[
  {
    "path": ".babelrc",
    "content": "{\n    \"presets\": [\n        \"es2015\",\n        \"react\"\n    ],\n    \"plugins\": [\"transform-object-rest-spread\"]\n}\n"
  },
  {
    "path": ".bottle-alias",
    "content": "<?xml version=\"1.0\"?>\r\n<aliases xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <Aliases>\r\n    <alias name=\"harness\" folder=\"src/DiagnosticsHarness\" />\r\n    <alias name=\"pak1\" folder=\"src/TestPackage1\" />\r\n    <alias name=\"pak2\" folder=\"src/TestPackage2\" />\r\n    <alias name=\"fubumvc\" folder=\"FubuMVC.Diagnostics\" />\r\n    <alias name=\"fubumvc.structuremap\" folder=\"src/FubuMVC.StructureMap\" />\r\n    <alias name=\"fubumvc.diagnostics\" folder=\"src/FubuMVC.Diagnostics\" />\r\n  </Aliases>\r\n</aliases>"
  },
  {
    "path": ".editorconfig",
    "content": "# editorconfig.org\r\nroot = true\r\n\r\n[*]\r\ncharset = utf-8\r\nend_of_line = crlf\r\nindent_size = 4\r\nindent_style = space\r\ninsert_final_newline = true\r\ntrim_trailing_whitespace = true\r\n\r\n[*.cs]\r\nindent_style = space\r\nindent_size = 4\r\n\r\n[*.js]\r\nindent_style = space\r\nindent_size = 4\r\n\r\n[*.md]\r\ntrim_trailing_whitespace = false\r\n"
  },
  {
    "path": ".gitignore",
    "content": "push.bat\r\nTestResult.xml\r\nbuild\r\nbuild35\r\nartifacts\r\nobj\r\nbin\r\nsrc/CommonAssemblyInfo.cs\r\n*.csproj.user\r\n_ReSharper.*\r\n*.[Rr]e[Ss]harper.user\r\nsrc/FubuMVC.*.ReSharper\r\n*.DotSettings*\r\n*.suo\r\n*.cache\r\n~$*\r\n*.stresult\r\n.fubu-alias\r\n.fubu-includes\r\n.fubu-manifest\r\neditor.htm\r\ntestEditor.css\r\nTestResult.xml\r\nhistory.xml\r\npak*.zip\r\ntest.db\r\n*.userprefs\r\n*.pidb\r\n*.DS_Store\r\ntest-results\r\nfubu-content\r\nspark.zip\r\n_combined/\r\nstoryteller\r\nsrc/Spark.Web.FubuMVC/\r\nreport.htm\r\ninstallation_report.htm\r\nsrc/Spark.Web.FubuMVC\r\nsrc/FubuMVC.Docs/snippets\r\nFubuTestAppRoot\r\nlib/bottles/FubuMVC*.*\r\nlib/**/*.nupkg\r\n.links\r\npackaging/release\r\n*.swp\r\noutput\r\noutput/*\r\n*.dotCover\r\nsrc/packages\r\nrepositories.config\r\nresults\r\nbottles.cmd\r\ndeploy\r\ndeploy/*\r\ndeployment/bottles/*.zip\r\ndeploymentplan.html\r\ndeployment\r\n!docs/source/topics/deployment\r\n*ncrunch*\r\nfubu.cmd\r\nGemfile.lock\r\nlogs\r\nstoryteller.cmd\r\ngems\r\npkg\r\nrun_st.cmd\r\n.bundle\r\nsrc/fubu.Docs/snippets\r\nnupkgs\r\nsrc/FubuApp/_templates\r\nrenamer.cs\r\nsrc/Specifications/Raven\r\nsrc/data\r\nsrc/Specifications/local.config\r\nstresults.htm\r\nsrc/Specifications/phantomjs.exe.version\r\nnode_modules\r\nUpgradeLog*.htm\r\nnpm-debug.log\r\ncontent\r\nmissing.locale.config\r\n*.esent.*\r\nsrc/FubuMVC.IntegrationTesting/chromedriver.exe\r\nsrc/FubuMVC.IntegrationTesting/phantomjs.exe\r\nsrc/FubuMVC.IntegrationTesting/chromedriver.exe.version\r\nsrc/FubuMVC.IntegrationTesting/local.config\r\npackages\r\nsrc/ServiceNode/fubutransportation.esent.2215/fubutransportation.esent.2215\r\n*.chk\r\n.vs/\r\nsrc/FubuMVC.IntegrationTesting/lmdb.dll\r\nsrc/FubuMVC.IntegrationTesting/fubutransportationqueues-2216/\r\n.idea*\r\nfubutransportationqueues.99*\r\n"
  },
  {
    "path": ".mailmap",
    "content": "Jeremy Miller <jeremydmiller@yahoo.com>\r\nBrandon Behrens <brandonbehrens@gmail.com>\r\nBrandon Behrens <bbehrens@.(none)>\r\nJoshua Flanagan <joshuaflanagan@gmail.com>\r\nJosh Arnold <rncodepoet@gmail.com>\r\nDru Sellers <dru@drusellers.com>\r\nChad Myers <chad.myers@gmail.com>\r\nJaime Febres <jaime.febres@gmail.com>\r\nRobert Greyling <robertgreyling@gmail.com>\r\nRobert Greyling <robertgreyling@cozwecan.com>\r\nRyan Rauh <rauh.ryan@gmail.com>\r\nRyan Rauh <rauh.ryan@ninecollective.com>\r\nNieve <nievegoor@gmail.com>\r\nNieve <Niv@.(none)>\r\nMike Murray <charliebrown928@hotmail.com>\r\nSam Merrell <merrell.sam@gmail.com>\r\n"
  },
  {
    "path": "Gemfile",
    "content": "source \"http://rubygems.org\"\r\ngem \"bundler\", \">=1.3.5\"\r\ngem \"rake\", \"~>10.0\"\r\ngem \"fuburake\", \"~>1.2\"\r\ngem \"ripple-cli\"\r\n"
  },
  {
    "path": "build.cmd",
    "content": "paket install\nnpm install\nnpm run build"
  },
  {
    "path": "fubu",
    "content": "#!/bin/env ruby\r\n#\r\n# This file was generated by RubyGems.\r\n#\r\n# The application 'fubu' is installed as part of a gem, and\r\n# this file is here to facilitate running it.\r\n#\r\ncmd = \"\"\r\nif(!RUBY_PLATFORM.match(\"linux|darwin\").nil?)\r\n  cmd << \"mono \"\r\nend\r\ncmd << File.dirname(__FILE__) + \"/Fubu.exe \" + ARGV.join(' ')\r\n\r\nresult = system(cmd)\r\nexit 1 unless result\r\n"
  },
  {
    "path": "javascript/active-section-view.jsx",
    "content": "import React from 'react'\n\nimport SectionLinks from './section-links'\n\nvar ActiveSectionView = React.createClass({\n\n    render(){\n        var path = this.props.location;\n        var sectionKey = path.split('/')[1];\n        var activeSection = FubuDiagnostics.section(sectionKey);\n\n        return (\n            <div style={{marginLeft: '300px'}}>\n                <h2>{activeSection.title} <small>{activeSection.description}</small></h2>\n                <SectionLinks section={activeSection} />\n            </div>\n        );\n    }\n});\n\nmodule.exports = ActiveSectionView;\n"
  },
  {
    "path": "javascript/appdomain.jsx",
    "content": "import React from 'react'\nimport _ from 'lodash'\n\nfunction Detail(header, prop){\n    this.header = header;\n    this.prop = prop;\n\n    this.toRow = function(data, index){\n        return (\n            <tr key={index}>\n                <th>{this.header}</th>\n                <td>{data[this.prop]}</td>\n            </tr>\n        );\n    }\n}\n\nvar AppDomain = React.createClass({\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        // TODO -- add parameters into this someday\n        FubuDiagnostics.get('AppDomain:appdomain', {}, data => {\n            _.assign(data, {loading: false});\n\n            this.setState(data);\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        var assemblies = this.state.assemblies.map(function(a, i){\n            return (\n                <tr key={i}>\n                    <td>{a.name}</td>\n                    <td>{a.version}</td>\n                    <td>{a.location}</td>\n                </tr>\n            );\n        });\n\n        var details = [\n            new Detail('Reloaded at', 'reloaded'),\n            new Detail('FubuMVC Path', 'fubuPath'),\n            new Detail('AppDomain Base Directory', 'baseDirectory'),\n            new Detail('AppDomain Bin Path', 'binPath'),\n            new Detail('Configuration File', 'config')\n        ];\n\n        var detailRows = details.map((d, i) => {\n            return d.toRow(this.state, i);\n        });\n\n        return (\n            <div>\n                <h3>Application Properties</h3>\n                <table className=\"table table-striped details\" style={{width: 'auto'}}>\n                    <tbody>\n                    {detailRows}\n                    </tbody>\n                </table>\n\n                <h3>Loaded Assemblies</h3>\n                <table className=\"table table-striped\">\n                    <tbody>\n                    <tr>\n                        <th>Name</th>\n                        <th>Version</th>\n                        <th>Location</th>\n                    </tr>\n                    {assemblies}\n                    </tbody>\n                </table>\n            </div>\n        );\n    }\n});\n\nFubuDiagnostics.addSection({\n    title: 'AppDomain',\n    description: 'Properties and Assemblies of the current AppDomain',\n    key: 'appdomain',\n    component: AppDomain\n});\n"
  },
  {
    "path": "javascript/assets.jsx",
    "content": "import React from 'react'\n\nvar AssetsTable = React.createClass({\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        // TODO -- add parameters into this someday\n        FubuDiagnostics.get('Asset:assets', {}, data => {\n            _.assign(data, {loading: false});\n\n            this.setState(data);\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        var rows = this.state.assets.map(a => {\n            return (\n                <tr key={a.url}>\n                    <td>{a.file}</td>\n                    <td>{a.url}</td>\n                    <td>{a.mimetype}</td>\n                    <td>{a.provenance}</td>\n                    <td>{a.cdn}</td>\n\n                </tr>\n            );\n        });\n\n        return (\n            <table className=\"table table-striped\">\n                <tbody>\n                <tr>\n                    <th>File</th>\n                    <th>Url</th>\n                    <th>Mimetype</th>\n                    <th>Provenance</th>\n                    <th>CDN</th>\n\n                </tr>\n                {rows}\n                </tbody>\n            </table>\n        );\n    }\n});\n\n\nFubuDiagnostics.addSection({\n    title: 'Assets',\n    description: 'All known client side assets',\n    key: 'assets',\n    component: AssetsTable\n});\n"
  },
  {
    "path": "javascript/chain-details.jsx",
    "content": "import React from 'react';\nimport _ from 'lodash'\nimport {Grid, Col, Row} from 'react-bootstrap'\nimport DescriptionBody from './description-body'\nimport ChainPerformanceHistory from './chain-performance-history'\n\nvar TypeDisplay = React.createClass({\n    render(){\n        return (\n            <span className=\"type-display\" title={this.props.type['qualified-name']}>{this.props.type.name}</span>\n        );\n    }\n});\n\n\n\nfunction Cell(title, att, toCell){\n    this.title = title;\n    this.toCell = toCell;\n\n    if (this.toCell == null){\n        this.toCell = function(data){\n            return (\n                <td key={this.title}>{data[att]}</td>\n            );\n        };\n    }\n\n    this.applies = function(data){\n        return data[att] != null;\n    }\n\n    this.shouldDisplay = function(data){\n        return data.hasOwnProperty(att);\n    }\n}\n\nfunction ArrayCell(title, att){\n    var toCell = function(data){\n        var display = _(data[att]).join(', ');\n\n        return (\n            <td>{display}</td>\n        );\n    };\n\n    var cell = new Cell(title, att, toCell);\n\n    cell.shouldDisplay = function(data){\n        if (!data.hasOwnProperty(att)) return false;\n\n        var actual = data[att];\n\n        return actual != null && actual.length > 0;\n    }\n\n    return cell;\n}\n\nfunction TypeCell(title, att){\n    var cell = new Cell(title, att);\n\n    cell.toCell = function(data){\n        return (\n            <td><TypeDisplay type={data[att]} /></td>\n        );\n    }\n\n    cell.shouldDisplay = function(data){\n        if (!data.hasOwnProperty(att)) return false;\n\n        var actual = data[att];\n\n        return actual != null && actual.length > 0;\n    }\n    return cell;\n}\n\n\nfunction toDetailRows(cells, data){\n    var activeCells = _.filter(cells, function(c, i){\n        return c.shouldDisplay(data);\n    });\n\n    return activeCells.map(cell => {\n        var td = cell.toCell(data);\n\n        return (\n            <tr key={cell.title}><th>{cell.title}</th>{td}</tr>\n        );\n    });\n}\n\nfunction toBehaviorRow(node){\n    return (\n        <tr key={node.title}>\n            <th>\n                <p>{node.title}</p>\n                <p><small className=\"small\">Category: {node.category}</small></p>\n            </th>\n            <td><DescriptionBody key={node.title} {...node} /></td>\n        </tr>\n    );\n}\n\nvar ChainDetails = React.createClass({\n\n    getInitialState(){\n        return {\n            loading: true,\n        }\n    },\n\n    componentDidMount(){\n        var params = this.props.params;\n        FubuDiagnostics.get('Chain:chain_details_Hash', params, data => {\n            this.setState({loading: false, data: data});\n        });\n    },\n\n    buildDetails(){\n        var detailCells = [\n            new Cell('Title', 'title'),\n            new Cell('Route', 'route'),\n            new TypeCell('Input Type', 'input'),\n            new TypeCell('Resource Type', 'resource'),\n            new ArrayCell('Accepts', 'accepts'),\n            new ArrayCell('Content-Type', 'content-type'),\n            new ArrayCell('Tags', 'tags'),\n        ];\n\n        return toDetailRows(detailCells, this.state.data.details);\n    },\n\n    buildRoute(){\n        return (\n            <tr key={this.state.data.route.title} className=\"route-data\">\n                <th>\n                    <p>{this.state.data.route.title}</p>\n                </th>\n                <td><DescriptionBody {...this.state.data.route} /></td>\n            </tr>\n        );\n    },\n\n    buildPerformanceSummary(rows){\n        var performanceHeader = (\n            <tr><td colSpan=\"2\"><h4>Performance Summary</h4></td></tr>\n        );\n        rows.push(performanceHeader);\n\n        var cells = [\n            new Cell('Hits', 'hits'),\n            new Cell('Total Execution Time', 'total'),\n            new Cell('Average Execution Time', 'average'),\n            new Cell('Exception %', 'exceptions'),\n            new Cell('Min Time', 'min'),\n            new Cell('Max Time', 'max')\n        ];\n\n        var perfRows = toDetailRows(cells, this.state.data.performance);\n        return rows.concat(perfRows);\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        if (this.state.data['not-found']){\n            return (<h1>Chain not found!</h1>);\n        }\n\n        var rows = this.buildDetails();\n\n        if (this.state.data.route != null){\n\n            rows.push(this.buildRoute(rows.length));\n        }\n\n        rows = this.buildPerformanceSummary(rows);\n\n        var behaviorHeader = (\n            <tr><td colSpan=\"2\"><h4>Behaviors</h4></td></tr>\n        );\n        rows.push(behaviorHeader);\n\n        this.state.data.nodes.forEach(function(node, i){\n            var row = toBehaviorRow(node, i);\n            rows.push(row);\n        });\n        return (\n            <Row>\n\n            <Col key=\"desc\" md={3} xs={3}>\n            This is a visualization of a single behavior chain. We should put more information here some day.\n            </Col>\n\n            <Col key=\"details-body\" md={9} xs={9}>\n\n            <table className=\"details table table-striped\" style={{width: 'auto'}}>\n                <tbody>\n                {rows}\n                </tbody>\n            </table>\n\n            <ChainPerformanceHistory key=\"chain-perf-history\" executions={this.state.data.executions} />\n\n            </Col>\n\n            </Row>\n        );\n    }\n});\n\nFubuDiagnostics.section('fubumvc').add({\n    title: 'Chain Details',\n    description: 'BehaviorChain Visualization',\n    key: 'chain-details',\n    route: 'Chain:chain_details_Hash',\n    component: ChainDetails\n});\n\n\n\n\n"
  },
  {
    "path": "javascript/chain-performance-history.jsx",
    "content": "import React from 'react'\n\nmodule.exports = React.createClass({\n    render(){\n        var rows = this.props.executions.map(x => {\n            var clazz = '';\n            if (x.warn){\n                clazz = 'warning';\n            }\n\n            var exceptionText = '';\n            if (x.exceptions){\n                exceptionText = 'Exception(s)!';\n                clazz = 'danger';\n            }\n\n            var url = \"#/fubumvc/request-details/\" + x.id;\n\n            return (\n                <tr key={x.id} className={clazz}>\n                    <td><a href={url}>{x.time}</a></td>\n                    <td style={{textAlign: \"right\"}}>{x.execution_time}</td>\n                </tr>\n\n            );\n        });\n\n        return (\n            <table className=\"table table-striped\" style={{width: 'auto'}}>\n                <tbody>\n                <tr>\n                    <th>Time</th>\n                    <th style={{textAlign: \"right\"}}>Execution Time</th>\n                </tr>\n                {rows}\n                </tbody>\n            </table>\n        );\n    }\n});\n"
  },
  {
    "path": "javascript/client-messages.jsx",
    "content": "import React from 'react'\n\nvar MessageTable = React.createClass({\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        FubuDiagnostics.get('ClientMessages:clientmessages', {}, data => {\n            _.assign(data, {loading: false});\n\n            this.setState(data);\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        if (this.state.messages.length == 0){\n            return (\n                <h1>No client messages in this application!</h1>\n            );\n        }\n\n        var rows = this.state.messages.map(function(r, i){\n            var url = '#fubumvc/chain-details/' + props.message.chain;\n            return (\n                <tr key={this.props.message.chain}>\n                    <td><a href={url} title=\"View the chain visualization for this message type\">{this.props.message.type}</a></td>\n                    <td>{this.props.message.query}</td>\n                    <td>{this.props.message.resource}</td>\n                </tr>\n            )\n        });\n\n        return (\n            <table className=\"table table-striped\">\n                <thead>\n                    <tr>\n                        <th>Client Side Name</th>\n                        <th>Query Model</th>\n                        <th>Resource Model</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    {rows}\n                </tbody>\n            </table>\n        );\n    }\n});\n\n\nFubuDiagnostics.section('fubumvc').add({\n    title: 'Client Message Types',\n    description: 'A list of all the message types available for aggregated querying',\n    key: 'client-messages',\n    component: MessageTable\n});\n"
  },
  {
    "path": "javascript/dashboard.jsx",
    "content": "import React from 'react'\nimport {Grid, Col, Row} from 'react-bootstrap'\n\n\nvar SectionLinks = require('./section-links');\n\nvar AllLinks = React.createClass({\n    render(){\n        var style = {\n            marginLeft: '10px'\n        }\n\n        var items = FubuDiagnostics.sections.map(s => {\n            var header = null;\n            if (s.activeViews().length == 0){\n                header = (\n                    <h4>\n                        <a href={s.anchor}>{s.title}</a>\n                        <small style={style}>{s.description}</small>\n                    </h4>\n                );\n            }\n            else{\n                header = (\n                    <h4>\n                        <span>{s.title}</span>\n                        <small style={style}>{s.description}</small>\n                    </h4>\n                );\n            }\n\n            return (\n                <div key={s.key}>\n                    {header}\n\n                    <SectionLinks key={s.key} section={s} />\n\n                    <hr />\n                </div>\n            );\n        });\n\n        return (\n            <div key={items.length}>{items}</div>\n        );\n    }\n});\n\n\nvar Dashboard = React.createClass({\n    render(){\n        return (\n            <Row>\n                <Col xs={6} md={6} >\n                  <h3>Getting Started</h3>\n                  <p>You are viewing the Advanced Diagnostics package that provides detailed insight into the configuration and runtime of your application.</p>\n\n                  <ol>\n                    <li>\n                      <strong>\n                        <a href=\"#fubumvc/endpoints\"> Explore your application</a>\n                      </strong>\n                      <p>The endpoint explorer allows you to sort and filter through the routes, endpoints, and chains within your application. You can also drill into the details and visualize the behavior chain.</p>\n                    </li>\n                    <li>\n                      <strong>\n                        <a href=\"#fubumvc/requests\">Explore the request history</a>\n                      </strong>\n                      <p>The requests explorer allows you to see the most recent requests that have been recorded within your application. You can drill into the details of each request to visualize the various steps that were taken to issue the response.</p>\n                    </li>\n                    <li>\n                      <strong>\n                        <a href=\"http://darthfubumvc.github.io/fubumvc/\">Browse the documentation</a>\n                      </strong>\n                      <p>Browse through our topics and read more about the our APIs.</p>\n                    </li>\n                    <li>\n                      <strong>\n                        <a href=\"https://groups.google.com/forum/#!forum/fubumvc-devel\">If you're really stuck</a>\n                      </strong>\n                      <p>Visit our user group to learn how to get plugged into our vibrant community. You'll get your questions answered in no time.</p>\n                    </li>\n                  </ol>\n\n                </Col>\n\n                <Col xs={6} md={6}>\n                    <AllLinks />\n                </Col>\n\n\n            </Row>\n        );\n    }\n});\n\nmodule.exports = Dashboard;\n"
  },
  {
    "path": "javascript/description-body.jsx",
    "content": "import React from 'react'\n\nvar Child = React.createClass({\n    render(){\n        return (\n            <div key={this.props.name} className=\"desc-child\">\n                <div className=\"desc-child-title\">\n                    <b>{this.props.name}</b>\n                    <i>{this.props.title}</i>\n                </div>\n                <div className=\"desc-child-body\">\n                    <DescriptionBody key={this.props.name} {...this.props} />\n                </div>\n            </div>\n        );\n    }\n});\n\nvar DescriptionBody = React.createClass({\n    render(){\n        var properties = this.renderProperties();\n        var children = this.renderChildren();\n        var lists = this.renderLists();\n\n        var description = null;\n        if (this.props.description){\n            description = (<p className=\"short-desc\">{this.props.description}</p>);\n        }\n\n        return (\n            <div className=\"description-body\">\n                {description}\n                {properties}\n                {children}\n                {lists}\n            </div>\n        );\n    },\n\n    renderChildren(){\n        var children = [];\n        if (this.props.children){\n            for (var key in children){\n                var child = (<Child name={key} {...children[key]} />);\n                children.push(child);\n            }\n        }\n\n        return children;\n    },\n\n    renderLists(){\n        var lists = [];\n        if (this.props.lists){\n            for (var key in this.props.lists){\n                var listTitle = (<div key={key} className=\"desc-list-name\">{key}</div>);\n                lists.push(listTitle);\n\n                this.props.lists[key].forEach(i => {\n                    var title = (<div key={i.title + i.length} className=\"desc-bullet-item-title\">{i.title}</div>);\n                    lists.push(title);\n\n                    var body = (\n                        <div key={\"body\" + i.title} className=\"desc-bullet-item-body\">\n                            <DescriptionBody {...i} />\n                        </div>\n                    );\n\n                    lists.push(body);\n                });\n            }\n        }\n        return lists;\n    },\n\n    renderProperties(){\n        var properties = null;\n        if (this.props.properties){\n            var propRows = [];\n            for (var key in this.props.properties){\n                var row = (<tr key={key}><th>{key}</th><td>{this.props.properties[key]}</td></tr>);\n                propRows.push(row);\n            }\n\n            properties = (\n                <table className=\"table desc-properties\">\n                    <tbody>\n                    {propRows}\n                    </tbody>\n                </table>\n            )\n        }\n        return properties;\n    }\n});\n\nmodule.exports = DescriptionBody;\n"
  },
  {
    "path": "javascript/description.jsx",
    "content": "import React from 'react'\nimport DescriptionBody from './description-body'\n\nvar Description = React.createClass({\n    render(){\n        return (\n            <div className=\"description\">\n                <h4>{this.props.title}</h4>\n                <DescriptionBody {...this.props} />\n\n            </div>\n        );\n    }\n});\n\nmodule.exports = Description;\n"
  },
  {
    "path": "javascript/endpoint-explorer.jsx",
    "content": "import React from 'react'\n\nvar EndpointRow = React.createClass({\n    render(){\n        var hash = '#fubumvc/chain-details/' + this.props.endpoint.hash;\n\n        return (\n            <tr>\n                <td><a href={hash}>Details</a></td>\n                <td>{this.props.endpoint.title}</td>\n                <td>{this.props.endpoint.actions}</td>\n            </tr>\n        );\n    }\n});\n\nvar EndpointTable = React.createClass({\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        FubuDiagnostics.get('EndpointExplorer:endpoints', {}, data => {\n            _.assign(data, {loading: false});\n\n            this.setState(data);\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        var rows = this.state.endpoints.map(function(e, i){\n            return (\n                <EndpointRow key={i} endpoint={e} />\n            );\n        });\n\n        return (\n            <div>\n\n            <h3>HTTP Endpoints</h3>\n\n            <table className=\"table\">\n                <thead>\n                    <tr>\n                        <th>View Details</th>\n                        <th>Description</th>\n                        <th>Action(s)</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    {rows}\n                </tbody>\n            </table>\n\n            </div>\n        );\n    }\n});\n\nFubuDiagnostics.section('fubumvc').add({\n    title: 'Endpoints',\n    description: 'All the configured endpoint routes, partials, and message handlers in this application',\n    key: 'endpoints',\n    component: EndpointTable\n});\n"
  },
  {
    "path": "javascript/fubu-diagnostics-section.jsx",
    "content": "import React from 'react'\nimport {Route} from 'react-router'\nimport FubuDiagnosticsView from './fubu-diagnostics-view'\n\nclass FubuDiagnosticsSection {\n    constructor(section){\n        this.title = section.title;\n        this.description = section.description;\n        this.key = section.key;\n\n        this.url = '/' + this.key;\n        this.views = [];\n        this.anchor = '#' + this.key;\n\n        this.component = section.component || require('./active-section-view');\n    }\n\n    add(data){\n        var view = new FubuDiagnosticsView(data, this);\n        this.views.push(view);\n        return this;\n    }\n\n    activeViews(){\n        return this.views.filter(v => !v.hasParameters);\n    }\n\n    toRoutes(index){\n        var routes = this.views.map(view => view.route);\n        if (this.component){\n            var sectionRoute = (<Route key={index} name={this.key} path={this.url} component={this.component} />);\n            routes.push(sectionRoute);\n        }\n        return routes;\n    }\n}\n\nmodule.exports = FubuDiagnosticsSection;\n"
  },
  {
    "path": "javascript/fubu-diagnostics-view.jsx",
    "content": "import React from 'react'\nimport {Route} from 'react-router'\n\nclass FubuDiagnosticsView {\n    constructor(view, section){\n        this.url = section.key + '/' + view.key;\n        this.key = view.key;\n\n        var routeName = section.key + ':' + view.key;\n\n        this.anchor = '#' + this.url;\n        this.hasParameters = false;\n        this.description = view.description;\n        this.title = view.title;\n\n\n        var component = view.component;\n        if (view.hasOwnProperty('render')){\n            component = React.createClass({\n                render: view.render\n            });\n        }\n\n        if (!component){\n            throw new Error(\"You need to either specify a React in view.component or pass in a render() function\");\n        }\n\n        if (view.route){\n            var route = FubuDiagnostics.routes[view.route];\n            if (route.params && route.params.length > 0){\n                this.hasParameters = true;\n                route.params.forEach(x => {\n                    this.url = this.url + '/:' + x.Name;\n                });\n            }\n        }\n        this.route = (<Route key={this.key} name={routeName} path={this.url} component={component}/>);\n    }\n}\n\nmodule.exports = FubuDiagnosticsView;\n"
  },
  {
    "path": "javascript/header.jsx",
    "content": "import React from 'react'\nimport {Navbar, Nav, DropdownButton, NavItem} from 'react-bootstrap'\n\nfunction Image(props) {\n    const { active, activeHref, activeKey, ...rest } = props\n        return <img {...rest} />\n}\n\nfunction Anchor(props) {\n    const { active, activeHref, activeKey, ...rest } = props\n        return <a {...rest} />\n}\n\nfunction StrippedDownButton(props) {\n    const { active, activeHref, activeKey, ...rest } = props\n    return <DropdownButton {...rest} />\n}\n\nvar Header = React.createClass({\n\n    render(){\n        var path = this.props.location;\n        var sectionLinks = [];\n        if (path != '/' && path){\n            var sectionKey = path.split('/')[1];\n            var activeSection = FubuDiagnostics.section(sectionKey);\n            sectionLinks = activeSection.activeViews().map(view => {\n                return (\n                    <NavItem key={sectionKey} href={view.anchor} title={view.description}>{view.title}</NavItem>\n                );\n            });\n        }\n\n        var sectionItems = FubuDiagnostics.sections.map((section) => {\n            var onclick = () => {\n                window.location = section.anchor;\n            }\n\n            return (<NavItem key={section.key} onClick={onclick} href={section.anchor} title={section.description}>{section.title}</NavItem>);\n        });\n\n        return (\n            <div>\n                <Navbar inverse={true} id=\"top-nav\">\n                    <Nav>\n                        <Image src=\"/_fubu/icon\" style={{marginTop: \"5px\", marginRight: '20px'}}/>\n                    </Nav>\n                    <Nav>\n                        <Anchor className=\"navbar-brand\" href=\"#/\">FubuMVC Diagnostics</Anchor>\n                        {sectionLinks}\n                    </Nav>\n                    <Nav>\n                        <StrippedDownButton id=\"top-nav-dropbutton\" key={1} title=\"Sections\" style={{float: 'right'}}>\n                          {sectionItems}\n                        </StrippedDownButton>\n                    </Nav>\n                </Navbar>\n            </div>\n        );\n    }\n});\n\nmodule.exports = Header;\n"
  },
  {
    "path": "javascript/html-screen.jsx",
    "content": "import React from 'react'\n\nvar HtmlScreen = React.createClass({\n    getInitialState(){\n        return {\n            html: 'Loading...'\n        }\n    },\n\n    componentDidMount(){\n        // TODO -- add parameters into this someday\n        FubuDiagnostics.getText(this.props.route, {}, data => {\n            this.setState({html: data});\n        });\n    },\n\n    render(){\n        return (\n            <div dangerouslySetInnerHTML={{__html: this.state.html}}></div>\n        );\n    }\n});\n\nmodule.exports = HtmlScreen;\n"
  },
  {
    "path": "javascript/http-request-header.jsx",
    "content": "import React from 'react'\n\nmodule.exports = React.createClass({\n    url(){\n        var request = this.props.request;\n\n        var url = request[\"owin.RequestScheme\"] + \"://\" + request[\"owin.RequestHeaders\"][\"Host\"][0] + request[\"owin.RequestPathBase\"] + request[\"owin.RequestPath\"];\n        if (request[\"RequestQueryString\"] && request[\"RequestQueryString\"].length > 0){\n            url = url + \"?\" + request[\"RequestQueryString\"];\n        }\n        return url;\n    },\n\n    requestHeaders(){\n        var request = this.props.request;\n        var requestHeaders = [];\n        for (var key in request[\"owin.RequestHeaders\"]){\n            var item = (\n                <li key={key}><b>{key}: </b>{request[\"owin.RequestHeaders\"][key].join(' / ')}</li>\n\n            );\n            requestHeaders.push(item);\n        }\n        return requestHeaders;\n    },\n\n    responseHeaders(){\n        var request = this.props.request;\n        var responseHeaders = [];\n        for (var key in request[\"owin.ResponseHeaders\"]){\n            var item = (\n                <li key={key}><b>{key}: </b>{request[\"owin.ResponseHeaders\"][key].join(' / ')}</li>\n            );\n            responseHeaders.push(item);\n        }\n        return responseHeaders;\n    },\n\n    render(){\n        var request = this.props.request;\n        var requestHeaders = this.requestHeaders();\n        var responseHeaders = this.responseHeaders();\n\n        var chainUrl = '#/fubumvc/chain-details/' + this.props.chain;\n\n        return (\n            <div>\n                <h4>General</h4>\n                <ul>\n                    <li key=\"chain\"><b>Chain: </b><a href={chainUrl}>{this.props.title}</a></li>\n                    <li key=\"time\"><b>Time: </b>{this.props.time}</li>\n                    <li key=\"executiontime\"><b>Execution Time: </b>{this.props[\"execution_time\"]} ms</li>\n                    <li key=\"url\"><b>Request URL: </b>{this.url()}</li>\n                    <li key=\"method\"><b>Request Method: </b>{request[\"owin.RequestMethod\"]}</li>\n                    <li key=\"status\"><b>Status Code: </b>{request[\"owin.ResponseStatusCode\"]}</li>\n                </ul>\n                <h4>Request Headers</h4>\n                <ul>\n                    {requestHeaders}\n                </ul>\n                <h4>Response Headers</h4>\n                <ul>\n                    {responseHeaders}\n                </ul>\n            </div>\n        );\n    }\n});\n"
  },
  {
    "path": "javascript/lightning-queues.jsx",
    "content": "import React from 'react'\nvar _ = require('lodash');\n\nvar QueueManager = React.createClass({\n    render(){\n        var queueRows = this.props.Queues.map((q, i) => {\n            var url = \"#lq/messages/\" + q.Port + \"/\" + q.QueueName;\n\n            return (\n                <tr key={i}>\n                    <td><a href={url}>{q.QueueName}</a></td>\n                    <td>{q.Port}</td>\n                    <td style={{textAlign: \"right\"}}>{q.NumberOfMessages}</td>\n                </tr>\n            );\n        });\n\n        return (\n        <div key={this.props.Port}>\n          <ul style={{float:'left'}}>\n            <li>Storage Path: {this.props.Path}</li>\n            <li>Port: {this.props.Port}</li>\n          </ul>\n          <table className=\"table table-striped\" style={{width: 'auto', marginLeft: '25px'}}>\n              <tbody>\n            <tr>\n                <th>Queue</th>\n                <th>Port</th>\n                <th style={{textAlign: \"right\"}}>Number of Messages</th>\n            </tr>\n            {queueRows}\n            </tbody>\n          </table>\n          <hr></hr>\n          </div>\n        );\n    }\n});\n\nvar AllQueues = React.createClass({\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        FubuDiagnostics.get('LightningQueues:queues', {}, data => {\n            this.setState({queues: data, loading: false});\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        var managers = this.state.queues.QueueManagers.map((qm, i) => {\n            return (<QueueManager key={i} {...qm} />);\n        });\n\n        return (\n            <div>\n            <h2>QueueManagers</h2>\n            <hr></hr>\n            {managers}\n            </div>\n        );\n    }\n});\n\n\nvar QueueDetails = React.createClass({\n\n    getInitialState(){\n        return {\n            loading: true,\n        }\n    },\n\n    componentDidMount(){\n        var params = this.props.params;\n        FubuDiagnostics.get('LightningQueues:messages_Port_QueueName', params, data => {\n            this.setState({loading: false, data: data});\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        var rows = this.state.data.Messages.map((msg, i) => {\n            // For whatever reason, LQ is sending us two different id's separated by a 'q', so this matches the route\n            var url = \"#lq/message-details/\" + this.state.data.Port + \"/\" + this.state.data.QueueName + \"/\" + msg.id;\n\n            return (\n                <tr key={i}>\n                    <td><a href={url}>{msg.id}</a></td>\n                    <td>{msg.headers['message-type']}</td>\n                    <td>{msg.sentat}</td>\n                    <td>{msg.destination}</td>\n                </tr>\n            );\n        });\n\n        return (\n            <div>\n            <p><a href=\"#/lq\">Back to LightningQueues...</a></p>\n\n            <h1>Messages in {this.state.data.QueueName} ({this.state.data.Port}) queue</h1>\n            <table className=\"table\">\n                <tbody>\n                <tr>\n                    <th>Message Id</th>\n                    <th>Type</th>\n                    <th>Sent At</th>\n                    <th>Destination</th>\n                </tr>\n\n                {rows}\n                </tbody>\n            </table>\n            <br></br>\n            </div>\n        );\n    }\n});\n\nvar MessageDetails = React.createClass({\n\n    getInitialState(){\n        return {\n            loading: true,\n        }\n    },\n\n    componentDidMount(){\n        var params = this.props.params;\n        FubuDiagnostics.get('LightningQueues:message_Port_QueueName_SourceInstanceId_MessageId', params, data => {\n            this.setState({loading: false, data: data});\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        if (this.state.data.NotFound){\n            return (\n                <div>This message cannot be found</div>\n            );\n        }\n\n        var keys = _.keys(this.state.data.Headers);\n        var headers = keys.map((key, i) => {\n            return (\n                <li key={i}><b>{key}</b> = {this.state.data.Headers[key]}</li>\n            );\n        });\n\n        var queueUrl = \"#/lq/messages/\" + this.state.data.Port + \"/\" + this.state.data.QueueName;\n\n        return (\n            <div>\n                <h1>Message Id: {this.state.data.MessageId.MessageIdentifier}</h1>\n\n                <br></br>\n                <h3>Queue: <a href={queueUrl}>{this.state.data.QueueName}</a></h3>\n                <h3>Sent At: {this.state.data.SentAt}</h3>\n                <br></br>\n\n                <h3>Headers</h3>\n                <ul>\n                    {headers}\n                </ul>\n\n                <h3>Message Payload</h3>\n                <pre>{this.state.data.Payload}</pre>\n\n            </div>\n\n        );\n    }\n});\n\nFubuDiagnostics.addSection({\n    title: 'LightningQueues',\n    description: 'The active LightningQueues queues in this application',\n    key: 'lq'\n}).add({\n    title: 'LightningQueues',\n    description: 'The active LightningQueues queues in this application',\n    key: 'summary',\n    component: AllQueues\n}).add({\n    title: 'Queue Messages',\n    description: 'Queued Messages',\n    key: 'messages',\n    route: 'LightningQueues:messages_Port_QueueName',\n    component: QueueDetails\n}).add({\n    title: 'Message Details',\n    description: 'Message Details',\n    key: 'message-details',\n    route: 'LightningQueues:message_Port_QueueName_SourceInstanceId_MessageId',\n    component: MessageDetails\n});\n"
  },
  {
    "path": "javascript/marten.jsx",
    "content": "import React from 'react'\n\nvar MartenSessions = React.createClass({\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        FubuDiagnostics.get('Marten:sessions', {}, data => {\n            this.setState({sessions: data, loading: false});\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        var rows = this.state.sessions.map(function(session, i){\n            var sessionUrl = \"#marten/session/\" + session.request;\n            var requestUrl = '#fubumvc/request-details/' + session.request;\n            var chainUrl = \"#/fubumvc/chain-details/\" + session.hash;\n\n            return (\n                <tr key={i}>\n                    <td><a href={chainUrl}>{session.chain}</a></td>\n                    <td style={{textAlign: 'right'}}>{session.execution_time}</td>\n                    <td><a href={requestUrl}>{session.time}</a></td>\n                    <td style={{textAlign: 'right'}}><a href={sessionUrl}>{session.request_count}</a></td>\n                </tr>\n            );\n        });\n\n        return (\n            <table className=\"table table-striped\" style={{width: 'auto'}}>\n                <thead>\n                    <tr>\n                        <th>Chain</th>\n                        <th style={{align: 'right'}}>Execution Time (ms)</th>\n                        <th>Time (Local)</th>\n                        <th style={{align: 'right'}}>Command Count</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    {rows}\n                </tbody>\n            </table>\n        );\n    }\n});\n\nvar Args = React.createClass({\n    render(){\n        var args = [];\n        for (var arg in this.props.args){\n            var elem = arg + \": \" + this.props.args[arg] + \"; \";\n            args.push(elem);\n        }\n\n        return (<p>{args}</p>);\n    }\n});\n\nvar MartenSession = React.createClass({\n\n    getInitialState(){\n        return {\n            loading: true,\n        }\n    },\n\n    componentDidMount(){\n        var params = this.getParams();\n        FubuDiagnostics.get('Marten:session_Id', params, data => {\n            this.setState({loading: false, data: data});\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        var commands = this.state.data.map(function(cmd){\n            if (cmd.success){\n                return (\n                    <div>\n                        <pre>\n                            {cmd.sql}\n                        </pre>\n                        <Args args={cmd.args} />\n                        <hr />\n                    </div>\n\n                );\n            }\n            else {\n                return (\n                    <div>\n                        <pre>\n                            {cmd.sql}\n                        </pre>\n                        <pre className=\"bg_warning\">\n                            {cmd.error}\n                        </pre>\n                        <Args args={cmd.args} />\n                        <hr />\n                    </div>\n\n                );\n            }\n        });\n\n        return (\n            <div>{commands}</div>\n        );\n    }\n});\n\nFubuDiagnostics.addSection({\n    title: 'Marten',\n    description: 'Information about Marten Activity',\n    key: 'marten'\n}).add({\n    title: 'Marten Sessions',\n    description: 'Marten Request Count per Session',\n    key: 'sessions',\n    component: MartenSessions\n}).add({\n    title: 'Session Details',\n    description: 'Session Details',\n    key: 'session-details',\n    route: 'Marten:session_Id',\n    component: MartenSession\n});\n"
  },
  {
    "path": "javascript/message-execution-header.jsx",
    "content": "import React from 'react'\n\nmodule.exports = React.createClass({\n    render(){\n        var request = this.props.request;\n\n        var chainUrl = '#/fubumvc/chain-details/' + this.props.chain;\n\n        var requestHeaders = [];\n        for (var key in request.headers){\n            var item = (\n                <li key={key}><b>{key}: </b>{request.headers[key]}</li>\n            );\n\n            requestHeaders.push(item);\n        }\n\n        return (\n            <div>\n                <h4>General</h4>\n                <ul>\n                    <li key=\"chain\"><b>Chain: </b><a href={chainUrl}>{this.props.title}</a></li>\n                    <li key=\"time\"><b>Time: </b>{this.props.time}</li>\n                    <li key=\"execution-time\"><b>Execution Time: </b>{this.props[\"execution_time\"]} ms</li>\n                </ul>\n\n                <h4>Envelope Headers</h4>\n                <ul>\n                    {requestHeaders}\n                </ul>\n            </div>\n        );\n    }\n});\n"
  },
  {
    "path": "javascript/message-table.jsx",
    "content": "import React from 'react'\n\nvar MessageRow = React.createClass({\n    render(){\n        var details = '#fubumvc/request-details/' + this.props.id;\n\n        return (\n            <tr key={this.props.id}>\n                <td><a href={details}>Details</a></td>\n                <td>{this.props.time}</td>\n                <td>{this.props.message}</td>\n                <td>{this.props.request.headers.attempts}</td>\n                <td style={{textAlign: \"right\"}}>{this.props.execution_time}</td>\n                <td>{this.props.request.headers[\"received-at\"]}</td>\n                <td>{this.props.request.headers[\"reply-uri\"]}</td>\n            </tr>\n        );\n    }\n});\n\nvar MessageTable = React.createClass({\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        FubuDiagnostics.get('Requests:messages', {}, data => {\n            this.setState({messages: data, loading: false});\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        var rows = this.state.messages.map((m, i) => {\n            return (\n                <MessageRow key={i} {...m} />\n            );\n        });\n\n        return (\n            <table className=\"table table-striped\" style={{width: 'auto'}}>\n                <thead>\n                    <tr>\n                        <th>Details</th>\n                        <th>Time (Local)</th>\n                        <th>Message Type</th>\n                        <th>Attempts</th>\n                        <th style={{textAlign: \"right\"}}>Duration (ms)</th>\n                        <th>Received At</th>\n                        <th>Reply Uri</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    {rows}\n                </tbody>\n            </table>\n        );\n    }\n});\n\nFubuDiagnostics.section('servicebus').add({\n    title: 'Message History',\n    description: 'A history of the most recent service bus messages handled by this application',\n    key: 'messages',\n    component: MessageTable\n});\n"
  },
  {
    "path": "javascript/model-binding.jsx",
    "content": "import React from 'react'\nimport {Col, Row} from 'react-bootstrap'\n\nvar ModelBinding = React.createClass({\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        // TODO -- add parameters into this someday\n        FubuDiagnostics.get('ModelBinding:binding_all', {}, data => {\n            this.setState({description: data, loading: false});\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<div>Loading...</div>);\n        }\n\n        return (\n            <Row>\n                <Col xs={3} md={2}>\n                  Model Binding in <a href=\"https://github.com/DarthFubuMVC/fubucore\">FubuCore</a> is generally done by invoking the <code>IObjectResolver</code> service.  Model binding in FubuMVC can be heavily customized and extended by plugging in additional implementations of these finer-grained services to handle types, handle properties, and converting values in new ways:\n                  <br></br>\n                  <ol>\n                    <li>\n                      <b>IModelBinder:  </b>The most coarse-grained level of customization.  An <code>IModelBinder</code> implementation \"knows\" how to create an object from the request data.  Most types will be handled by the StandardModelBinder that just calls a public constructor and delegates to <code>IPropertyBinder</code> services for each public setter.</li>\n                    <li>\n                      <b>IPropertyBinder:  </b>A model binding policy that can handle the model binding to one property at a time.  Most properties will be handled by the <code>ConversionPropertyBinder</code> that just finds the raw data from the request that matches the property name, converts or coerces the raw data to the property type, and sets the property value accordingly.  You might use custom <code>IPropertyBinder</code> services for information that isn't available in the http request.\n                  </li>\n                    <li>\n                      <b>IConversionFamily:  </b>A fine grained service that \"knows\" how to coerce (or find) a raw string value into a requested type.\n                    </li>\n                  </ol>\n\n                  <p>These services can be directly plugged in via your application's IoC container or through the <code>FubuRegisty.Model.******</code> methods in your FubuRegistry class.  Do keep in mind that ordering is important.  If two or more model binders / property binders / converter families could handle a scenario, the first one will always be used.\n                </p>\n                </Col>\n                <Col xs={9} md={9}>\n                    <Description {...this.state.description} />\n                </Col>\n            </Row>\n        );\n    }\n});\n\nmodule.exports = ModelBinding;\n"
  },
  {
    "path": "javascript/packaging.jsx",
    "content": "import React from 'react'\n\nvar Packaging = React.createClass({\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        FubuDiagnostics.get('PackageLog:package_logs', {}, data => {\n            _.assign(data, {loading: false});\n\n            this.setState(data);\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        var rows = this.state.logs.map((log, i) => {\n            var row = (\n                <tr key={i}>\n                  <td>{log.Type}</td>\n                  <td>{log.Description}</td>\n                  <td>{log.Provenance}</td>\n                </tr>\n            );\n\n            if (log.FullTraceText != '' && log.FullTraceText != null){\n                return [row, (\n                  <tr>\n                    <td colSpan=\"4\" className=\"bg-info\">\n                      {log.FullTraceText}\n                    </td>\n                  </tr>\n                )]\n            }\n\n            return row;\n        });\n\n        rows = _.flatten(rows);\n\n        return (\n          <div>\n          <h2>Package Loading Log</h2>\n          <table className=\"table\" style={{width: 'auto'}}>\n            <thead>\n              <tr>\n                <th>Type</th>\n                <th>Description</th>\n                <th>Provenance</th>\n              </tr>\n            </thead>\n            <tbody>\n              {rows}\n            </tbody>\n          </table>\n          </div>\n        );\n    }\n});\n\n\nFubuDiagnostics.section('fubumvc').add({\n    title: 'Package Loading',\n    description: 'Bottle Loading Logs',\n    key: 'package-loading',\n    component: Packaging\n});\n\n"
  },
  {
    "path": "javascript/partial-explorer.jsx",
    "content": "import React from 'react'\n\nvar PartialRow = React.createClass({\n    render(){\n        var hash = '#fubumvc/chain-details/' + this.props.endpoint.hash;\n\n        return (\n            <tr>\n                <td><a href={hash}>Details</a></td>\n                <td>{this.props.endpoint.title}</td>\n                <td>{this.props.endpoint.actions}</td>\n            </tr>\n        );\n    }\n});\n\nvar PartialTable = React.createClass({\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        FubuDiagnostics.get('EndpointExplorer:partials', {}, data => {\n            _.assign(data, {loading: false});\n\n            this.setState(data);\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        var rows = this.state.endpoints.map(function(e, i){\n            return (\n                <PartialRow key={i} endpoint={e} />\n            );\n        });\n\n        return (\n            <div>\n\n            <h3>Partial Chains</h3>\n\n            <table className=\"table\">\n                <thead>\n                    <tr>\n                        <th>View Details</th>\n                        <th>Description</th>\n                        <th>Action(s)</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    {rows}\n                </tbody>\n            </table>\n\n            </div>\n        );\n    }\n});\n\nFubuDiagnostics.section('fubumvc').add({\n    title: 'Partials',\n    description: 'All the configured partial chains in this application',\n    key: 'partials',\n    component: PartialTable\n});\n"
  },
  {
    "path": "javascript/performance.jsx",
    "content": "import React from 'react'\n\nvar PerformanceSummary = React.createClass({\n    getInitialState(){\n        return {\n            loading: true,\n        }\n    },\n\n    componentDidMount(){\n        FubuDiagnostics.get('Performance:performance', null, data => {\n            this.setState({loading: false, chains: data});\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        var rows = this.state.chains.map((chain, i) => {\n            var url = \"#/fubumvc/chain-details/\" + chain.hash;\n\n            return (\n                <tr key={i}>\n                    <td><a href={url}>{chain.title}</a></td>\n                    <td style={{textAlign: \"right\"}}>{chain.hits}</td>\n                    <td style={{textAlign: \"right\"}}>{chain.total}</td>\n                    <td style={{textAlign: \"right\"}}>{chain.average}</td>\n                    <td style={{textAlign: \"right\"}}>{chain.exceptions}</td>\n                    <td style={{textAlign: \"right\"}}>{chain.min}</td>\n                    <td style={{textAlign: \"right\"}}>{chain.max}</td>\n                </tr>\n            );\n        });\n\n        return (\n            <table className=\"table table-striped\" style={{width: 'auto'}}>\n                <thead>\n                    <tr>\n                        <th>Chain</th>\n                        <th style={{textAlign: \"right\"}}>Hits</th>\n                        <th style={{textAlign: \"right\"}}>Total</th>\n                        <th style={{textAlign: \"right\"}}>Average</th>\n                        <th style={{textAlign: \"right\"}}>Exception %</th>\n                        <th style={{textAlign: \"right\"}}>Min Time</th>\n                        <th style={{textAlign: \"right\"}}>Max Time</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    {rows}\n                </tbody>\n            </table>\n        );\n    }\n});\n\nFubuDiagnostics.addSection({\n    title: 'Performance',\n    description: 'Performance statistics for all behavior chains in the running system',\n    key: 'performance'\n}).add({\n    title: 'Performance Summary',\n    description: 'Performance overview for all behavior chains',\n    key: 'summary',\n    component: PerformanceSummary\n});\n"
  },
  {
    "path": "javascript/polling-jobs.jsx",
    "content": "import React from 'react'\n\nvar PollingJobTable = React.createClass({\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        FubuDiagnostics.get('PollingJob:pollingjobs', {}, data => {\n            this.setState({jobs: data, loading: false});\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        var rows = this.state.jobs.map(job => {\n            var url = '#/fubumvc/chain-details/' + job.chain;\n\n            var last = (<td></td>);\n            if (job.last){\n                var clazz = 'success';\n                if (job.last.exceptions){\n                    clazz = 'danger';\n                }\n\n                last = (\n                    <td className={clazz}>{job.last.time} in {job.last.execution_time} (ms)</td>\n                );\n            }\n\n            return (\n                <tr key={job.title}>\n                    <td title={job.type}><a href={url}>{job.title}</a></td>\n                    <td style={{textAlign: \"right\"}}>{job.interval}</td>\n                    <td>{job.execution}</td>\n                    {last}\n                    <td style={{textAlign: \"right\"}}>{job.performance.hits}</td>\n                    <td style={{textAlign: \"right\"}}>{job.performance.average}</td>\n                    <td style={{textAlign: \"right\"}}>{job.performance.exceptions}</td>\n                    <td style={{textAlign: \"right\"}}>{job.performance.min}</td>\n                    <td style={{textAlign: \"right\"}}>{job.performance.max}</td>\n                </tr>\n            );\n        });\n\n        return (\n            <table className=\"table table-striped\">\n                <thead>\n                    <tr>\n                        <th>Job Name</th>\n                        <th style={{textAlign: \"right\"}}>Interval (ms)</th>\n                        <th>Execution</th>\n                        <th>Last Execution</th>\n                        <th style={{textAlign: \"right\"}}>Hits</th>\n                        <th style={{textAlign: \"right\"}}>Average Time (ms)</th>\n                        <th style={{textAlign: \"right\"}}>Exception %</th>\n                        <th style={{textAlign: \"right\"}}>Min Time (ms)</th>\n                        <th style={{textAlign: \"right\"}}>Max Time (ms)</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    {rows}\n                </tbody>\n            </table>\n        );\n    }\n});\n\nFubuDiagnostics.addSection({\n    title: 'Polling Jobs',\n    description: 'All configured polling jobs',\n    key: 'pollingjobs',\n    component: PollingJobTable\n});\n"
  },
  {
    "path": "javascript/request-details.jsx",
    "content": "import React from 'react'\nimport HttpRequestHeader from './http-request-header'\nimport MessageExecutionHeader from './message-execution-header'\nimport Description from './description'\n\nvar ActivityTable = React.createClass({\n    render(){\n        var rows = this.props.activities.map((a, i) => {\n            return (\n                <tr key={i}>\n                    <td>{a.title}</td>\n                    <td style={{textAlign: \"right\"}}>{a.start}</td>\n                    <td style={{textAlign: \"right\"}}>{a.end}</td>\n                    <td style={{textAlign: \"right\"}}>{a.duration}</td>\n                    <td style={{textAlign: \"right\"}}>{a.inner_time}</td>\n                </tr>\n\n            );\n        });\n\n        return (\n            <table className=\"table table-striped\" style={{width: 'auto'}}>\n                <tbody>\n                <tr>\n                    <th>Activity</th>\n                    <th style={{textAlign: \"right\"}}>Starting</th>\n                    <th style={{textAlign: \"right\"}}>Ending</th>\n                    <th style={{textAlign: \"right\"}}>Total Time</th>\n                    <th style={{textAlign: \"right\"}}>Inner Time</th>\n                </tr>\n                {rows}\n                </tbody>\n            </table>\n        );\n    }\n});\n\nvar LogTable = React.createClass({\n    render(){\n        var activities = {};\n        this.props.activities.forEach(a => {\n            activities[a.id] = a.title;\n        });\n\n        var rows = this.props.steps.map((step, i) => {\n            return (\n                <tr key={i}>\n                    <td style={{verticalAlign: \"top\"}}>{activities[step.activity]}</td>\n                    <td style={{textAlign: \"right\", verticalAlign: \"top\"}}>{step.time}</td>\n                    <td style={{verticalAlign: \"top\"}}><Description {...step.log} /></td>\n                </tr>\n            );\n        });\n\n        return (\n            <table className=\"table table-striped\" style={{width: 'auto'}}>\n                <tbody>\n                <tr>\n                    <th>Activity</th>\n                    <th>Request Time</th>\n                    <th>Log</th>\n                </tr>\n                {rows}\n                </tbody>\n            </table>\n        );\n    }\n});\n\nvar RequestDetails = React.createClass({\n\n    getInitialState(){\n        return {\n            loading: true,\n        }\n    },\n\n    componentDidMount(){\n        var params = this.props.params;\n        FubuDiagnostics.get('Requests:request_Id', params, data => {\n            this.setState({loading: false, data: data});\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        if (this.state.data.log == null){\n            return (\n                <div>Request not found.</div>\n            );\n        }\n\n        var header = null;\n        if (this.state.data.type == 'RoutedChain'){\n            header = (<HttpRequestHeader {...this.state.data.log} />);\n        }\n\n        if (this.state.data.type == 'HandlerChain'){\n            header = (<MessageExecutionHeader {...this.state.data.log} />);\n        }\n\n        return (\n            <div>\n                {header}\n                <h3>Performance Timings per Behavior and/or Partial</h3>\n                <ActivityTable {...this.state.data.log} />\n\n                <h3>Log Activity</h3>\n                <LogTable {...this.state.data.log} />\n\n\n\n            </div>\n        );\n    }\n});\n\nFubuDiagnostics.section('fubumvc').add({\n    title: 'Request Details',\n    description: 'Http Request Visualization',\n    key: 'request-details',\n    route: 'Requests:request_Id',\n    component: RequestDetails\n});\n\n"
  },
  {
    "path": "javascript/request-table.jsx",
    "content": "import React from 'react'\n\nvar RequestRow = React.createClass({\n    render(){\n        var details = '#fubumvc/request-details/' + this.props.request.id;\n\n        return (\n            <tr key={this.props.request.id}>\n                <td><a href={details}>Details</a></td>\n                <td>{this.props.request.time}</td>\n                <td>{this.props.request.url}</td>\n                <td>{this.props.request.method}</td>\n                <td>{this.props.request.status}</td>\n                <td>{this.props.request.description}</td>\n                <td>{this.props.request.contentType}</td>\n                <td style={{textAlign: \"right\"}}>{this.props.request.duration}</td>\n            </tr>\n        );\n    }\n});\n\nvar RequestTable = React.createClass({\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        FubuDiagnostics.get('Requests:requests', {}, data => {\n            _.assign(data, {loading: false});\n\n            this.setState(data);\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        var rows = this.state.requests.map(function(r, i){\n            return (\n                <RequestRow key={i} request={r} />\n            );\n        });\n\n        return (\n            <table className=\"table table-striped\" style={{width: 'auto'}}>\n                <thead>\n                    <tr>\n                        <th>Details</th>\n                        <th>Time (Local)</th>\n                        <th>Url</th>\n                        <th>Method</th>\n                        <th>Status</th>\n                        <th>Description</th>\n                        <th>Content Type</th>\n                        <th>Duration (ms)</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    {rows}\n                </tbody>\n            </table>\n        );\n    }\n});\n\nFubuDiagnostics.section('fubumvc').add({\n    title: 'Requests',\n    description: 'A history of the most recent requests handled by this application',\n    key: 'requests',\n    component: RequestTable\n});\n"
  },
  {
    "path": "javascript/root.jsx",
    "content": "import React from 'react'\nimport _ from 'lodash'\nimport $ from 'jquery'\n\nimport FubuDiagnosticsSection  from './fubu-diagnostics-section.jsx'\n\n_.assign(FubuDiagnostics, {\n    cache: {},\n\n    // TODO -- cache if there are no params?\n    get: function (key, params, callback) {\n        var url = this.toUrl(key, params);\n        $.ajax({\n            method: 'GET',\n            url: url,\n            dataType: 'json',\n            accept: 'application/json',\n            success: function(data){\n                try {\n                    callback(data);\n                }\n                catch (e){\n                    console.error(e);\n                }\n            },\n            error: function(jqXHR, textStatus, errorThrown){\n                console.error(errorThrown);\n            }\n        });\n    },\n\n     getText: function (key, params, callback) {\n        var url = this.toUrl(key, params);\n        $.ajax({\n            method: 'GET',\n            url: url,\n            dataType: 'text',\n            accept: 'text/plain',\n            success: function(data){\n                try {\n                    callback(data);\n                }\n                catch (e){\n                    console.error(e);\n                }\n            },\n            error: function(jqXHR, textStatus, errorThrown){\n                console.error(errorThrown);\n            }\n        });\n    },\n\n    toUrl: function (key, params) {\n        var route = this.routes[key];\n        var url = route.url;\n        _.each(route.params, function (param) {\n            url = url.replace('{' + param.Name + '}', params[param.Name]);\n        });\n\n        return url;\n    },\n\n    sections: [],\n\n    addSection: function(data){\n        var section = new FubuDiagnosticsSection(data);\n        this.sections.push(section);\n\n        return section;\n    },\n\n    section: function(key){\n        return _.find(this.sections, s => s.key == key);\n    },\n\n    TextScreen: require('./text-screen'),\n    HtmlScreen: require('./html-screen'),\n    React: React\n});\n\n\n\n\nrequire('./appdomain');\nrequire('./assets');\nrequire('./structuremap');\nrequire('./service-bus');\nrequire('./message-table');\nrequire('./polling-jobs');\n\n\nFubuDiagnostics.addSection({\n    title: 'HTTP',\n    description: 'Core Diagnostics for HTTP Requests and Handlers',\n    key: 'fubumvc'\n}).add({\n    title: 'Model Binding',\n    description: 'All the configured model binding converters, property binders, and custom model binders',\n    key: 'model-binding',\n    component: require('./model-binding')\n});\n\nrequire('./endpoint-explorer');\nrequire('./partial-explorer');\nrequire('./chain-details');\nrequire('./request-table.jsx');\nrequire('./request-details.jsx');\nrequire('./packaging');\nrequire('./client-messages');\nrequire('./performance');\n\n\nvar Shell = require('./shell');\n\n$(document).ready(() => Shell.start());\n"
  },
  {
    "path": "javascript/section-links.jsx",
    "content": "import React from 'react'\n\nconst SectionLinks = (props) => {\n    return (\n        <dl className=\"dl-horizontal\">\n            {props.section.activeViews().map(view =>{\n                return (\n                    <div key={view.key}>\n                        <dt><a href={view.anchor}>{view.title}</a></dt>\n                        <dd> {view.description}</dd>\n                    </div>\n                )\n            })}\n        </dl>\n    )\n};\nmodule.exports = SectionLinks;\n"
  },
  {
    "path": "javascript/service-bus.jsx",
    "content": "import React from 'react'\n\nimport HtmlScreen from './html-screen'\n\nvar ChannelGraph = React.createClass({\n    render(){\n        return (\n            <HtmlScreen route=\"ChannelGraph:channels\" />\n        );\n    }\n});\n\nvar Subscriptions = React.createClass({\n    render(){\n        return (\n            <HtmlScreen route=\"Subscriptions:subscriptions\" />\n        );\n    }\n});\n\nvar Messages = React.createClass({\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        FubuDiagnostics.get('Messages:messages', {}, data => {\n            this.setState({messages: data, loading: false});\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        var rows = this.state.messages.map(msg => {\n            var url = \"#/fubumvc/chain-details/\" + msg.hash;\n\n            return (\n                <tr key={url}>\n                    <td><a href={url} title={msg.full_name}>{msg.message_type}</a></td>\n                    <td>{msg.handlers}</td>\n                </tr>\n            );\n        });\n\n        return (\n            <table className=\"table table-striped\" style={{width: 'auto'}}>\n                <thead>\n                    <tr>\n                        <th>Message Type</th>\n                        <th>Handlers</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    {rows}\n                </tbody>\n            </table>\n        );\n    }\n});\n\nvar Tasks = React.createClass({\n    render(){\n        return (\n            <HtmlScreen route=\"Tasks:tasks\" />\n        );\n    }\n})\n\nFubuDiagnostics.addSection({\n    title: 'Messaging',\n    description: 'The configuration and state of the messaging features',\n    key: 'servicebus'\n}).add({\n    title: 'Service Bus',\n    description: 'Everything about this service bus node',\n    key: 'channelgraph',\n    component: ChannelGraph\n}).add({\n    title: 'Subscriptions',\n    description: 'The current state and configuration of the subscription storage',\n    key: 'subscriptions',\n    component: Subscriptions\n}).add({\n    title: 'Message Handlers',\n    description: 'All of the message handlers in this application',\n    key: 'message-handlers',\n    component: Messages\n}).add({\n    title: 'Permanent Tasks',\n    description: 'Current state of the persistent tasks in the service bus',\n    key: 'persistent-tasks',\n    component: Tasks\n});\n"
  },
  {
    "path": "javascript/settings.jsx",
    "content": "import React from 'react'\n\nfunction replaceAll(str, find, replace) {\n    return str.replace(new RegExp(find, 'g'), replace);\n}\n\nvar SettingsTable = React.createClass({\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        FubuDiagnostics.get('Settings:settings', {}, data => {\n            _.assign(data, {loading: false});\n\n            this.setState(data);\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        var rows = this.state.settings.map(function(s, i){\n            var url = \"#settings/setting-details/\" + replaceAll(encodeURIComponent(s.type), '\\\\.', '_');\n\n            return (\n                <tr key={url}>\n                    <td title={s.type}><a href={url}>{s.name}</a></td>\n                    <td>{s.description}</td>\n                </tr>\n            );\n        });\n\n        return (\n            <table className=\"table table-striped\">\n                <tbody>\n                <tr>\n                    <th>Type</th>\n                    <th>Description</th>\n                </tr>\n                {rows}\n                </tbody>\n            </table>\n        );\n    }\n});\n\nvar SettingsDetail = React.createClass({\n\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        var params = this.props.params;\n        FubuDiagnostics.get('Settings:setting_Name', params, data => {\n            this.setState({data: data, loading: false});\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n\n        if (this.state.data.type == 'json'){\n            var json = JSON.stringify(this.state.data.body, null, 4);\n\n            return (\n                <div>\n                    <h3>{this.state.data.title}</h3>\n                    <pre>{json}</pre>\n                </div>\n            );\n        }\n        else{\n            return (\n                <div>\n                    <h3>{this.state.data.title}</h3>\n                    <div dangerouslySetInnerHTML={{\n                        __html: this.state.data.body\n                      }}></div>\n                </div>\n            );\n        }\n    }\n});\n\nFubuDiagnostics.addSection({\n    title: 'Settings',\n    description: \"All known 'Settings' types\",\n    key: 'settings',\n    component: SettingsTable\n})\n.add({\n    title: 'Setting Details',\n    description: '',\n    key: 'setting-details',\n    route: 'Settings:setting_Name',\n    component: SettingsDetail\n});\n\n"
  },
  {
    "path": "javascript/shell.jsx",
    "content": "import React from 'react'\nimport ReactDOM from 'react-dom'\nimport _ from 'lodash'\nimport {Router, Route, IndexRoute, hashHistory} from 'react-router'\n\nimport Header from './header'\nimport Dashboard from './dashboard'\nimport {Grid, Row} from 'react-bootstrap'\n\nvar count = 0;\n\nvar App = React.createClass({\n\n  getHandlerKey() {\n    count++;\n    return count;\n  },\n\n    render(){\n        var style = {\n            paddingLeft: '25px'\n        }\n\n        return (\n            <Grid fluid={true}>\n                <Row>\n                    <Header />\n                </Row>\n                <Row  style={style}>\n                    {React.cloneElement(this.props.children, { key: this.getHandlerKey() })}\n                </Row>\n            </Grid>\n        );\n    }\n});\n\nmodule.exports = {\n    start(){\n        var sectionRoutes = _.flatten(FubuDiagnostics.sections.map((section, i) => section.toRoutes(i)));\n\n        ReactDOM.render((\n            <Router key={\"router\"} history={hashHistory}>\n                <Route key={\"rootroute\"} name=\"app\" path=\"/\" component={App}>\n                    <IndexRoute key={\"indexroute\"} component={Dashboard} />\n                    {sectionRoutes}\n                </Route>\n            </Router>), document.getElementById('diagnostics'));\n    }\n}\n\n"
  },
  {
    "path": "javascript/structuremap-buildplan.jsx",
    "content": "var React = FubuDiagnostics.React;\n\nvar BuildPlanView = React.createClass({\n\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        var params = this.getParams();\n        FubuDiagnostics.getText('StructureMap:build_plan_PluginType_Name', params, data => {\n            this.setState({text: data, loading: false});\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading..</p>);\n        }\n\n        var params = this.getParams();\n\n        return (\n\n            <div>\n                <h3>PluginType: {params.PluginType}, Instance {params.Name}</h3>\n                <pre>{this.state.text}</pre>\n            </div>\n        );\n    }\n});\n\n\nmodule.exports = BuildPlanView;\n"
  },
  {
    "path": "javascript/structuremap-searchbox.jsx",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom'\n\nfunction StructureMapSearch(){\n    var self = this;\n\n    self.options = null;\n\n    self.find = function(query){\n        query = query.toLowerCase();\n\n        var matches = _.filter(self.options, function(o){\n            try {\n                return o.display.toLowerCase().indexOf(query) > -1;\n            }\n            catch (e){\n                return false;\n            }\n        });\n\n        return matches;\n    }\n\n    self.findMatches = function(query, callback){\n        if (self.options == null){\n            FubuDiagnostics.get('StructureMap:search_options', {}, function(data){\n                if (typeof data == 'string'){\n                    data = JSON.parse(data);\n                }\n\n                self.options = data;\n                callback(self.find(query));\n            });\n        }\n        else{\n            callback(self.find(query));\n        }\n    }\n\n    return self;\n}\n\nFubuDiagnostics.StructureMapSearch = new StructureMapSearch();\n\nvar SearchBox = React.createClass({\n\n    componentDidMount(){\n        var element = ReactDOM.findDOMNode(this);\n        $(element).typeahead({\n          minLength: 5,\n          highlight: true\n        },\n        {\n          name: 'structuremap',\n          displayKey: 'value',\n\n          source: FubuDiagnostics.StructureMapSearch.findMatches,\n          templates: {\n            empty: '<div class=\"empty-message\">No matches found</div>',\n            suggestion: _.template('<div><p><%= display%> - <small><%= type%></small></p><p><small><%= value%></small></p></div>')\n          }\n        });\n\n        $(element).on('typeahead:selected', function(jquery, option){\n            var url = '#/structuremap/search-results/' + option.type + '/' + option.value;\n            window.location = url;\n        });\n    },\n\n    componentWillUnmount(){\n        var element = ReactDOM.findDOMNode(this);\n        $(element).typeahead('destroy');\n    },\n\n    render(){\n        return (\n            <input type=\"search\" name=\"search\" ref=\"input\" className=\"form-control typeahead structuremap-search\" placeholder=\"Search the application container\" />\n        );\n    }\n});\n\nmodule.exports = SearchBox;\n"
  },
  {
    "path": "javascript/structuremap-searchresults.jsx",
    "content": "var React = FubuDiagnostics.React;\nvar _ = require('lodash');\nvar SearchBox = require('./structuremap-searchbox');\n\nvar InstanceRow = React.createClass({\n    render(){\n        var url = '#structuremap/buildplan/' + this.props._key;\n        var familyUrl = '#structuremap/search-results/Plugin-Type/' + this.props.pluginType;\n\n        return (\n            <tr>\n                <td><a href={familyUrl}>{this.props.pluginType}</a></td>\n                <td><a href={url}>{this.props.name}</a></td>\n                <td>{this.props.lifecycle}</td>\n                <td>{this.props.returnedType}</td>\n                <td>{this.props.description}</td>\n            </tr>\n        );\n    }\n});\n\nvar InstanceResults = React.createClass({\n    render(){\n        var items = this.props.instances.map(function(instance, i){\n            instance._key = instance.key;\n\n            return (<InstanceRow key={instance.key} {...instance} />);\n        });\n\n        return (\n            <table className=\"table table-striped\">\n                <tbody>\n                <tr>\n                    <th>Plugin Type</th>\n                    <th>Name</th>\n                    <th>Lifecycle</th>\n                    <th>Returned Type</th>\n                    <th>Description</th>\n                </tr>\n                {items}\n                </tbody>\n            </table>\n        );\n    }\n});\n\nfunction BuildPluginTypeData(pluginType){\n    var items = [];\n\n    if (pluginType.defaultInstance){\n        items.push(pluginType.defaultInstance);\n    }\n    else{\n        items.push({\n            pluginType: pluginType.pluginType,\n            lifecycle: pluginType.lifecycle,\n            returnedType: '',\n            name: '',\n            description: ''\n        });\n    }\n\n    items = items.concat(pluginType.others);\n\n    if (pluginType.missingName){\n        pluginType.missingName.name = '(missing named instance)';\n        items.push(pluginType.missingName);\n    }\n\n    if (pluginType.fallback){\n        pluginType.fallback.name = '(fallback)';\n        items.push(pluginType.fallback);\n    }\n\n    for (var i = 1; i < items.length; i++){\n        items[i].pluginType = '';\n    }\n    return items;\n}\n\nvar SearchTitle = React.createClass({\n    render(){\n        var type = this.props.search.Type.replace('-', ' ');\n\n        return (\n            <h3>Search Results: {type}/{this.props.search.Value}</h3>\n        );\n    }\n});\n\nvar SearchResults = React.createClass({\n\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        var params = this.props.params;\n        FubuDiagnostics.get('StructureMap:search_Type_Value', params, data => {\n            _.assign(data, {loading: false});\n\n            this.setState(data);\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        var instances = [];\n\n        if (this.state.search.Type == 'Returned-Type'){\n            instances = this.state.instances;\n        }\n        else{\n            instances = _.flatten(_.map(this.state.pluginTypes, BuildPluginTypeData));\n        }\n\n        return (\n            <div>\n                <SearchBox />\n\n                <SearchTitle search={this.state.search} />\n                <InstanceResults key={instances.length} instances={instances} />\n            </div>\n        );\n\n    }\n});\n\nmodule.exports = SearchResults;\n"
  },
  {
    "path": "javascript/structuremap-summary.jsx",
    "content": "import React from 'react'\nimport SearchBox from './structuremap-searchbox'\n\nvar AssemblySummaryItem = React.createClass({\n    render(){\n        var url = '#structuremap/search-results/Assembly/' + this.props.name;\n\n        return (\n          <li className=\"list-group-item\">\n            <span className=\"badge\">{this.props.count}</span>\n            <b><a href={url}>{this.props.name}</a></b>\n          </li>\n        );\n    }\n});\n\nvar NamespaceSummaryItem = React.createClass({\n    render(){\n      var url = '#structuremap/search-results/Namespace/' + this.props.name;\n\n      return (\n          <li className=\"list-group-item\">\n            <span className=\"badge\">{this.props.count}</span>\n            <a href={url}>{this.props.name}</a>\n          </li>\n      );\n    }\n});\n\n\n\nvar Summary = React.createClass({\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        FubuDiagnostics.get('StructureMap:summary', {}, data => {\n            _.assign(data, {loading: false});\n\n            this.setState(data);\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n\n        var items = [];\n\n        this.state.assemblies.forEach(function(assem, i){\n            var item = (<AssemblySummaryItem key={assem.name} {...assem}/>);\n\n            items.push(item);\n\n            assem.namespaces.forEach(function(ns, i){\n                var assemItem = (<NamespaceSummaryItem key={ns.name} {...ns} />);\n                items.push(assemItem);\n            });\n\n        });\n\n        return (\n            <div>\n\n            <SearchBox />\n\n            <hr />\n\n            <ul className=\"list-group\">\n                {items}\n            </ul>\n\n            </div>\n        );\n    }\n});\n\nmodule.exports = Summary;\n"
  },
  {
    "path": "javascript/structuremap-whatdoihave.jsx",
    "content": "import React from 'react'\n\nvar WhatDoIHave = React.createClass({\n    getInitialState(){\n        return {\n            loading: true\n        }\n    },\n\n    componentDidMount(){\n        FubuDiagnostics.getText('StructureMap:whatdoihave', {}, data => {\n            this.setState({text: data, loading: false});\n        });\n    },\n\n    render(){\n        if (this.state.loading){\n            return (<p>Loading...</p>);\n        }\n        return (<pre>{this.state.text}</pre>);\n    }\n});\n\nmodule.exports = WhatDoIHave;\n"
  },
  {
    "path": "javascript/structuremap.jsx",
    "content": "import React from 'react'\n\nimport Settings from './settings'\nimport Summary from './structuremap-summary'\nimport WhatDoIHave from './structuremap-whatdoihave'\nimport BuildPlanView from './structuremap-buildplan'\nimport SearchResults from './structuremap-searchresults'\n\nFubuDiagnostics.addSection({\n    title: 'StructureMap',\n    description: 'Insight into the configuration and state of the application container',\n    key: 'structuremap'\n})\n.add({\n    title: 'Summary',\n    description: 'Assemblies and Namespaces in the Container',\n    key: 'summary',\n    component: Summary\n})\n.add({\n    title: 'StructureMap Search Results',\n    description: \"Interactive version of StructureMap's WhatDoIHave()\",\n    key: 'search-results',\n    route: 'StructureMap:search_Type_Value',\n    component: SearchResults\n})\n.add({\n    title: 'What do I have?',\n    description: \"StructureMap's textual WhatDoIHave() diagnostics\",\n    key: 'whatdoihave',\n    component: WhatDoIHave\n})\n.add({\n    title: 'Build Plan',\n    description: 'How StructureMap will build this Instance',\n    key: 'buildplan',\n    route: 'StructureMap:build_plan_PluginType_Name',\n    component:  BuildPlanView\n});\n"
  },
  {
    "path": "javascript/text-screen.jsx",
    "content": "import React from 'react'\n\nvar TextScreen = React.createClass({\n    getInitialState(){\n        return {\n            text: 'Loading...'\n        }\n    },\n\n    componentDidMount(){\n        FubuDiagnostics.get(route, {}, data => {\n            this.setState({text: data});\n        });\n    },\n\n    render(){\n        return (\n            <pre>{this.state.text}</pre>\n        );\n    }\n});\n\nmodule.exports = TextScreen;\n"
  },
  {
    "path": "lib/LICENSE.BSD",
    "content": "Redistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n  * Redistributions of source code must retain the above copyright\n    notice, this list of conditions and the following disclaimer.\n  * Redistributions in binary form must reproduce the above copyright\n    notice, this list of conditions and the following disclaimer in the\n    documentation and/or other materials provided with the distribution.\n  * Neither the name of the <organization> nor the\n    names of its contributors may be used to endorse or promote products\n    derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "lib/README.md",
    "content": "Chrome Driver Version - 2.13\n\n"
  },
  {
    "path": "license.txt",
    "content": "Copyright 2011-2014 Jeremy Miller, Joshua Flanagan, Robert Greyling, Joshua Arnold, Corey Kaylor\r\nCopyright 2009-2010 Chad Myers, Jeremy Miller, Joshua Flanagan, Mark Nijhof\r\n\r\n   Licensed under the Apache License, Version 2.0 (the \"License\");\r\n   you may not use this file except in compliance with the License.\r\n   You may obtain a copy of the License at\r\n\r\n       http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n   Unless required by applicable law or agreed to in writing, software\r\n   distributed under the License is distributed on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n   See the License for the specific language governing permissions and\r\n   limitations under the License.\r\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"fubumvc.diagnostics\",\n  \"version\": \"0.0.1\",\n  \"description\": \"Executable Specification authoring and running\",\n  \"scripts\": {\n    \"build\": \"webpack\",\n    \"watch\": \"webpack -w\"\n  },\n  \"dependencies\": {\n    \"babel-core\": \"^6.14.0\",\n    \"babel-loader\": \"^6.2.5\",\n    \"jsx-loader\": \"^0.13.2\",\n    \"lodash\": \"^4.15.0\",\n    \"react\": \"^15.3.1\",\n    \"react-bootstrap\": \"^0.30.3\",\n    \"react-dom\": \"^15.3.1\",\n    \"react-loader\": \"^2.4.0\",\n    \"react-router\": \"^2.7.0\",\n    \"webpack\": \"^1.12.0\"\n  },\n  \"devDependencies\": {\n    \"babel-preset-es2015\": \"^6.14.0\",\n    \"babel-preset-react\": \"^6.11.1\"\n  }\n}\n"
  },
  {
    "path": "packaging/nuget/fubumvc.aspnet.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n  <metadata xmlns=\"http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd\">\n    <id>FubuMVC.ASPNET</id>\n    <version>0.0.0</version>\n    <authors>Jeremy D. Miller</authors>\n    <owners>Jeremy D. Miller</owners>\n    <licenseUrl>https://github.com/DarthFubuMVC/fubumvc/raw/master/license.txt</licenseUrl>\n    <projectUrl>http://github.com/DarthFubuMVC/fubumvc</projectUrl>\n    <iconUrl>https://github.com/DarthFubuMVC/fubu-collateral/raw/master/Icons/FubuMvc_256.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Support for using the Spark view engine within a FubuMVC application.</description>\n    <tags>fubumvc spark</tags>\n    <dependencies>\n      <dependency id=\"FubuMVC.Core\" version=\"3.0\"/>\n\t  <dependency id=\"Microsoft.Web.Infrastructure\" version=\"[1.0]\"/>\n    </dependencies>\n  </metadata>\n  <files>\n    <file src=\"..\\..\\src\\FubuMVC.AspNet\\bin\\release\\FubuMVC.AspNet.*\" target=\"lib\\net46\" />\n  </files>\n</package>"
  },
  {
    "path": "packaging/nuget/fubumvc.core.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd\">\n  <metadata xmlns=\"http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd\">\n    <id>FubuMVC.Core</id>\n    <version>0.0.0</version>\n    <authors>Jeremy D. Miller, Joshua Arnold, Corey Kaylor</authors>\n    <owners>Jeremy D. Miller, Corey Kaylor</owners>\n    <licenseUrl>https://github.com/DarthFubuMVC/fubumvc/raw/master/license.txt</licenseUrl>\n    <projectUrl>http://github.com/DarthFubuMVC/fubumvc</projectUrl>\n    <iconUrl>https://github.com/DarthFubuMVC/fubu-collateral/raw/master/Icons/FubuMvc_256.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>FubuMVC.Core Library</description>\n    <tags>web framework mvc fubumvc</tags>\n    <dependencies>\n      <dependency id=\"FubuCore\" version=\"2.0\" />\n      <dependency id=\"HtmlTags\" version=\"[2.1.0.183]\" />\n      <dependency id=\"structuremap\" version=\"4.4.0\" />\n\t  <dependency id=\"Newtonsoft.Json\" version=\"[9.0.1]\" />\n    </dependencies>\n    <frameworkAssemblies>\n      <frameworkAssembly assemblyName=\"System.Web\" />\n    </frameworkAssemblies>\n  </metadata>\n  <files xmlns=\"\">\n    <file src=\"..\\..\\src\\FubuMVC.Core\\bin\\release\\FubuMVC.Core.*\" target=\"lib\\net46\" />\n  </files>\n</package>\n"
  },
  {
    "path": "packaging/nuget/fubumvc.lightningqueues.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd\">\n  <metadata xmlns=\"http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd\">\n    <id>FubuMVC.LightningQueues</id>\n    <version>0.0.0</version>\n    <authors>Corey Kaylor, Jeremy D. Miller</authors>\n    <owners>Jeremy D. Miller, Corey Kaylor</owners>\n    <licenseUrl>https://github.com/DarthFubuMVC/fubutransportation/raw/master/license.txt</licenseUrl>\n    <projectUrl>https://github.com/DarthFubuMVC/FubuMVC</projectUrl>\n    <iconUrl>https://github.com/DarthFubuMVC/fubu-collateral/raw/master/Icons/FubuMvc_256.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>LightningQueues integration for FubuMVC Service Bus projects</description>\n    <tags>fubumvc service bus</tags>\n    <dependencies>\n      <dependency id=\"FubuMVC.Core\" version=\"3.0\" />\n      <dependency id=\"LightningQueues\" version=\"0.2.11\" />\n      <dependency id=\"LightningQueues.Storage.LMDB\" version=\"0.2.10\" />\n    </dependencies>\n  </metadata>\n  <files xmlns=\"\">\n    <file src=\"..\\..\\src\\FubuMVC.LightningQueues\\bin\\release\\FubuMVC.LightningQueues.dll\" target=\"lib\\net46\" />\n    <file src=\"..\\..\\src\\FubuMVC.LightningQueues\\bin\\release\\FubuMVC.LightningQueues.pdb\" target=\"lib\\net46\" />\n  </files>\n</package>\n"
  },
  {
    "path": "packaging/nuget/fubumvc.marten.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd\">\n  <metadata xmlns=\"http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd\">\n    <id>FubuMVC.Marten</id>\n    <version>0.0.0</version>\n    <authors>Jeremy D. Miller</authors>\n    <owners>Jeremy D. Miller</owners>\n    <licenseUrl>https://github.com/DarthFubuMVC/fubutransportation/raw/master/license.txt</licenseUrl>\n    <projectUrl>https://github.com/DarthFubuMVC/FubuMVC</projectUrl>\n    <iconUrl>https://github.com/DarthFubuMVC/fubu-collateral/raw/master/Icons/FubuMvc_256.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Integrates Marten into FubuMVC 3 applications</description>\n    <tags>fubumvc service bus</tags>\n    <dependencies>\n      <dependency id=\"FubuMVC.Core\" version=\"3.0\" />\n      <dependency id=\"Marten\" version=\"1.0.0-alpha-710\" />\n    </dependencies>\n  </metadata>\n  <files xmlns=\"\">\n    <file src=\"..\\..\\src\\FubuMVC.Marten\\bin\\release\\FubuMVC.Marten.dll\" target=\"lib\\net46\" />\n    <file src=\"..\\..\\src\\FubuMVC.Marten\\bin\\release\\FubuMVC.Marten.pdb\" target=\"lib\\net46\" />\n  </files>\n</package>\n"
  },
  {
    "path": "packaging/nuget/fubumvc.razor.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n  <metadata xmlns=\"http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd\">\n    <id>FubuMVC.Razor</id>\n    <version>0.0.0</version>\n    <authors>Corey Kaylor, Alex Henning Johannessen, Jeremy D. Miller</authors>\n    <owners>Corey Kaylor, Alex Henning Johannessen, Jeremy D. Miller</owners>\n    <licenseUrl>https://github.com/DarthFubuMVC/fubumvc/raw/master/license.txt</licenseUrl>\n    <projectUrl>http://github.com/DarthFubuMVC/fubumvc</projectUrl>\n    <iconUrl>https://github.com/DarthFubuMVC/fubu-collateral/raw/master/Icons/FubuMvc_256.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Support for using the Razor view engine within a FubuMVC application.</description>\n    <tags>fubumvc razor razorengine fubu</tags>\n    <dependencies>\n      <dependency id=\"FubuMVC.Core\" version=\"3.0\"/>\n\t  <dependency id=\"Microsoft.AspNet.Razor\" version=\"2.0.20715.0\" />\n    </dependencies>\n\t<frameworkAssemblies>\n\t\t<frameworkAssembly assemblyName=\"System.Web.Mvc\" />\n\t</frameworkAssemblies>\n  </metadata>\n  <files>\n\t<file src=\"web.config.transform\" target=\"content\" />\n    <file src=\"..\\..\\src\\FubuMVC.Razor\\bin\\release\\FubuMVC.Razor.*\" target=\"lib\\net46\" />\n  </files>\n</package>\n"
  },
  {
    "path": "packaging/nuget/fubumvc.spark.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n  <metadata xmlns=\"http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd\">\n    <id>FubuMVC.Spark</id>\n    <version>0.0.0</version>\n    <authors>Joshua Arnold, Jaime Febres, Alex Henning Johannessen, Jeremy D. Miller</authors>\n    <owners>Joshua Arnold, Alex Henning Johannessen, Joshua Flanagan</owners>\n    <licenseUrl>https://github.com/DarthFubuMVC/fubumvc/raw/master/license.txt</licenseUrl>\n    <projectUrl>http://github.com/DarthFubuMVC/fubumvc</projectUrl>\n    <iconUrl>https://github.com/DarthFubuMVC/fubu-collateral/raw/master/Icons/FubuMvc_256.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Support for using the Spark view engine within a FubuMVC application.</description>\n    <tags>fubumvc spark</tags>\n    <dependencies>\n      <dependency id=\"Spark\" version=\"1.7.5.0\" />\n      <dependency id=\"FubuMVC.Core\" version=\"3.0\"/>\n    </dependencies>\n  </metadata>\n  <files>\n    <file src=\"..\\..\\src\\FubuMVC.Spark\\bin\\release\\FubuMVC.Spark.*\" target=\"lib\\net46\" />\n  </files>\n</package>"
  },
  {
    "path": "packaging/nuget/jasperservice.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd\">\n  <metadata xmlns=\"http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd\">\n    <id>JasperService</id>\n    <version>0.0.0</version>\n    <authors>Jeremy D. Miller</authors>\n    <owners>Jeremy D. Miller</owners>\n    <licenseUrl>https://github.com/DarthFubuMVC/fubumvc/raw/master/license.txt</licenseUrl>\n    <projectUrl>http://github.com/DarthFubuMVC/fubumvc</projectUrl>\n    <iconUrl>https://github.com/DarthFubuMVC/fubu-collateral/raw/master/Icons/FubuMvc_256.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>TopShelf service hosting for FubuMVC 3 applications</description>\n    <tags>fubumvc topshelf</tags>\n    <dependencies>\n      <dependency id=\"FubuMVC.Core\" version=\"3.0\" />\n      <dependency id=\"TopShelf\" version=\"[4.0.1]\" />\n    </dependencies>\n  </metadata>\n  <files xmlns=\"\">\n    <file src=\"..\\..\\src\\JasperService\\bin\\release\\JasperService.*\" target=\"lib\\net46\" />\n  </files>\n</package>"
  },
  {
    "path": "packaging/nuget/serenity.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd\">\n  <metadata xmlns=\"http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd\">\n    <id>Serenity</id>\n    <version>0.0.0</version>\n    <authors>Jeremy D. Miller</authors>\n    <owners>Jeremy D. Miller</owners>\n    <licenseUrl>https://github.com/DarthFubuMVC/fubumvc/raw/master/license.txt</licenseUrl>\n    <projectUrl>http://github.com/DarthFubuMVC/fubumvc</projectUrl>\n    <iconUrl>https://github.com/DarthFubuMVC/fubu-collateral/raw/master/Icons/FubuMvc_256.png</iconUrl>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>Giving you piece of mind by making it easy to integrate both Storyteller and Jasmine testing into your FubuMVC applications</description>\n    <tags>web framework specification fubumvc</tags>\n    <dependencies>\n      <dependency id=\"FubuMVC.Core\" version=\"3.0\" />\n      <dependency id=\"Microsoft.Owin.Hosting\" />\n      <dependency id=\"Microsoft.Owin.Host.HttpListener\" />\n      <dependency id=\"Storyteller\" version=\"3.0.0\" />\n      <dependency id=\"Selenium.RC\" version=\"2.46.0\" />\n      <dependency id=\"Selenium.Support\" version=\"2.46.0\" />\n      <dependency id=\"Selenium.WebDriver\" version=\"2.46.0\" />\n      <dependency id=\"Selenium.WebDriverBackedSelenium\" version=\"2.46.0\" />\n    </dependencies>\n  </metadata>\n  <files xmlns=\"\">\n    <file src=\"..\\..\\src\\Serenity\\bin\\release\\Serenity.*\" target=\"lib\\net46\" />\n  </files>\n</package>\n"
  },
  {
    "path": "packaging/nuget/web.config.transform",
    "content": "<configuration>\n  <configSections>\n    <sectionGroup name=\"system.web.webPages.razor\" type=\"System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\">\n      <section name=\"host\" type=\"System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n      <section name=\"pages\" type=\"System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" requirePermission=\"false\" />\n    </sectionGroup>\n  </configSections>\n  <system.web>\n    <compilation debug=\"true\">\n      <assemblies>\n        <add assembly=\"System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089\" />\n        <add assembly=\"System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n      </assemblies>\n    </compilation>\n    <pages validateRequest=\"false\" controlRenderingCompatibilityVersion=\"3.5\" clientIDMode=\"AutoID\">\n      <namespaces>\n        <add namespace=\"FubuMVC.Core\" />\n        <add namespace=\"FubuCore\" />\n        <add namespace=\"FubuCore.Reflection\" />\n        <add namespace=\"FubuLocalization\" />\n        <add namespace=\"FubuMVC.Core.UI\" />\n\t\t<add namespace=\"FubuMVC.Core.Assets\" />\n        <add namespace=\"FubuMVC.Core.View\" />\n\t\t<add namespace=\"FubuMVC.Razor\" />\n        <add namespace=\"HtmlTags\" />\n      </namespaces>\n    </pages>\n  </system.web>\n  <system.web.webPages.razor>\n    <host factoryType=\"System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n    <pages pageBaseType=\"FubuMVC.Razor.Rendering.FubuRazorView\">\n      <namespaces>\n        <add namespace=\"FubuMVC.Core\" />\n        <add namespace=\"FubuCore\" />\n        <add namespace=\"FubuCore.Reflection\" />\n        <add namespace=\"FubuLocalization\" />\n        <add namespace=\"FubuMVC.Core.UI\" />\n\t\t<add namespace=\"FubuMVC.Core.Assets\" />\n        <add namespace=\"FubuMVC.Core.View\" />\n\t\t<add namespace=\"FubuMVC.Razor\" />\n        <add namespace=\"HtmlTags\" />\n      </namespaces>\n    </pages>\n  </system.web.webPages.razor>\n</configuration>"
  },
  {
    "path": "paket.dependencies",
    "content": "source http://nuget.org/api/v2\n\nnuget Castle.Core 3.2.1\nnuget Fixie ~> 1.0.0.29\nnuget Fleck 0.10.0.26\nnuget Jetbrains.Profiler.Kernel.Windows.Api 106.0.20160728.75739-eap10 eap\nnuget LightningDB 0.9.7\nnuget LightningQueues 0.2.11\nnuget LightningQueues.Storage.LMDB 0.2.10\nnuget Marten 1.0.0-alpha-710\nnuget Microsoft.AspNet.Razor 2.0.20715.0\nnuget Microsoft.Data.Edm 5.6.0\nnuget Microsoft.Net.Http 2.0.20710.0\nnuget Microsoft.Owin 3.0.1.0\nnuget Microsoft.Owin.Host.HttpListener 3.0.1.0\nnuget Microsoft.Owin.Hosting 3.0.1.0\nnuget Newtonsoft.Json 9.0.1\nnuget NLog 2.1\nnuget Nowin 0.16.0.0\nnuget Npgsql 3.1.6\nnuget Owin 1.0\nnuget RavenDB.Client 2.5.2750\nnuget RavenDB.Database 2.5.2750\nnuget RavenDB.Embedded 2.5.2750\nnuget RhinoMocks 3.6.1\nnuget Shouldly ~> 2.5.0\nnuget Spark 1.7.5.0\nnuget StructureMap 4.4.0\nnuget Storyteller 3.0.0.325-rc\nnuget System.Data.Common\nnuget System.Net.Sockets\nnuget System.Reactive\nnuget System.Spatial 5.6.0.0\nnuget WindowsAzure.Storage 3.0.1.0\n\nsource http://build.fubu-project.org/guestAuth/app/nuget/v1/FeedService.svc\nsource https://www.myget.org/F/fubumvc-edge\nnuget BottleServiceRunner\nnuget DotNetZip\nnuget FubuCore 2.0.0.311\nnuget HtmlTags 2.1.0.183\nnuget ManagedEsent\nnuget Microsoft.AspNet.WebApi.Client\nnuget Microsoft.AspNet.WebApi.Core\nnuget Microsoft.AspNet.WebApi.SelfHost\nnuget Microsoft.Bcl\nnuget Microsoft.Bcl.Build\nnuget Microsoft.CompilerServices.AsyncTargetingPack\nnuget Microsoft.Data.OData\nnuget Microsoft.Data.Services.Client\nnuget Microsoft.Web.Infrastructure\nnuget Microsoft.WindowsAzure.ConfigurationManager\nnuget PowerThreading\nnuget Selenium.RC\nnuget Selenium.Support\nnuget Selenium.WebDriver\nnuget Selenium.WebDriverBackedSelenium\nnuget TopShelf\n"
  },
  {
    "path": "rakefile.rb",
    "content": "COMPILE_TARGET = ENV['config'].nil? ? \"debug\" : ENV['config']\r\nRESULTS_DIR = \"results\"\r\nBUILD_VERSION = '4.0.0'\r\n\r\nNUGET_KEY = ENV['api_key']\r\n\r\ninclude FileUtils\r\ninclude FileTest\r\n\r\ntc_build_number = ENV[\"BUILD_NUMBER\"]\r\nbuild_revision = tc_build_number || Time.new.strftime('5%H%M')\r\nbuild_number = \"#{BUILD_VERSION}.#{build_revision}\"\r\nBUILD_NUMBER = build_number \r\n\r\ntask :ci => [:default, :integration_test, :pack]\r\n\r\ntask :default => [:test]\r\n\r\ndesc \"Prepares the working directory for a new build\"\r\ntask :clean do\r\n\t#TODO: do any other tasks required to clean/prepare the working directory\r\n\tFileUtils.rm_rf RESULTS_DIR\r\n\tFileUtils.rm_rf 'artifacts'\r\n\tDir.mkdir 'artifacts'\r\n\r\n\tDir.mkdir RESULTS_DIR\r\nend\r\n\r\ndesc \"Update the version information for the build\"\r\ntask :version do\r\n  asm_version = build_number\r\n  \r\n  begin\r\n    commit = `git log -1 --pretty=format:%H`\r\n  rescue\r\n    commit = \"git unavailable\"\r\n  end\r\n  puts \"##teamcity[buildNumber '#{build_number}']\" unless tc_build_number.nil?\r\n  puts \"Version: #{build_number}\" if tc_build_number.nil?\r\n  \r\n  options = {\r\n\t:description => 'The .Net web framework and service bus that gets out of your way',\r\n\t:product_name => 'StructureMap',\r\n\t:copyright => 'Copyright 2009-2015 Jeremy D. Miller, Corey Kaylor, Joshua Arnold, et al. All rights reserved.',\r\n\t:trademark => commit,\r\n\t:version => asm_version,\r\n\t:file_version => build_number,\r\n\t:informational_version => asm_version\r\n\t\r\n  }\r\n  \r\n  puts \"Writing src/CommonAssemblyInfo.cs...\"\r\n\tFile.open('src/CommonAssemblyInfo.cs', 'w') do |file|\r\n\t\tfile.write \"using System.Reflection;\\n\"\r\n\t\tfile.write \"using System.Runtime.InteropServices;\\n\"\r\n\t\tfile.write \"[assembly: AssemblyDescription(\\\"#{options[:description]}\\\")]\\n\"\r\n\t\tfile.write \"[assembly: AssemblyProduct(\\\"#{options[:product_name]}\\\")]\\n\"\r\n\t\tfile.write \"[assembly: AssemblyCopyright(\\\"#{options[:copyright]}\\\")]\\n\"\r\n\t\tfile.write \"[assembly: AssemblyTrademark(\\\"#{options[:trademark]}\\\")]\\n\"\r\n\t\tfile.write \"[assembly: AssemblyVersion(\\\"#{options[:version]}\\\")]\\n\"\r\n\t\tfile.write \"[assembly: AssemblyFileVersion(\\\"#{options[:file_version]}\\\")]\\n\"\r\n\t\tfile.write \"[assembly: AssemblyInformationalVersion(\\\"#{options[:informational_version]}\\\")]\\n\"\r\n\tend\r\nend\r\n\r\ndesc 'Compile the code'\r\ntask :compile => [:npm, :clean, :version] do\r\n\tsh \"paket.exe restore\"\r\n\t\r\n\tmsbuild = '\"C:\\Program Files (x86)\\MSBuild\\14.0\\Bin\\msbuild.exe\"'\r\n\tsh \"#{msbuild} src/FubuMVC.sln   /property:Configuration=#{COMPILE_TARGET} /v:m /t:rebuild /nr:False /maxcpucount:2\"\r\nend\r\n\r\ndesc 'Run the unit tests'\r\ntask :test => [:compile] do\r\n\tsh \"packages/Fixie/lib/net45/Fixie.Console.exe src/FubuMVC.Tests/bin/#{COMPILE_TARGET}/FubuMVC.Tests.dll --NUnitXml results/TestResult.xml\"\r\nend\r\n\r\ndesc 'Run the integration tests'\r\ntask :integration_test => [:compile] do\r\n    sh \"packages/Fixie/lib/net45/Fixie.Console.exe src/FubuMVC.IntegrationTesting/bin/#{COMPILE_TARGET}/FubuMVC.IntegrationTesting.dll --NUnitXml results/IntegrationTestResult.xml\"\r\n    sh \"packages/Fixie/lib/net45/Fixie.Console.exe src/FubuMVC.LightningQueues.Testing/bin/#{COMPILE_TARGET}/FubuMVC.LightningQueues.Testing.dll --NUnitXml results/LQTestResult.xml\"\r\nend\r\n\r\ndesc 'Build Nuspec packages'\r\ntask :pack => [:compile] do\r\n\tsh \"nuget.exe pack packaging/nuget/fubumvc.aspnet.nuspec -VERSION #{build_number}-alpha -OutputDirectory artifacts\"\r\n\tsh \"nuget.exe pack packaging/nuget/fubumvc.core.nuspec -VERSION #{build_number}-alpha -OutputDirectory artifacts\"\r\n\tsh \"nuget.exe pack packaging/nuget/fubumvc.lightningqueues.nuspec -VERSION #{build_number}-alpha -OutputDirectory artifacts\"\r\n\tsh \"nuget.exe pack packaging/nuget/fubumvc.spark.nuspec -VERSION #{build_number}-alpha -OutputDirectory artifacts\"\r\n\tsh \"nuget.exe pack packaging/nuget/fubumvc.marten.nuspec -VERSION #{build_number}-alpha -OutputDirectory artifacts\"\r\n\tsh \"nuget.exe pack packaging/nuget/serenity.nuspec -VERSION #{build_number}-alpha -OutputDirectory artifacts\"\r\n\tsh \"nuget.exe pack packaging/nuget/jasperservice.nuspec -VERSION #{build_number}-alpha -OutputDirectory artifacts\"\r\n\t\r\n\r\n\r\n\t\r\nend\r\n\r\ntask :publish => [:pack] do\r\n\tsh \"nuget.exe push artifacts/FubuMVC.Core.#{build_number}-alpha.nupkg #{NUGET_KEY} \"\r\n\tsh \"nuget.exe push artifacts/FubuMVC.AspNet.#{build_number}-alpha.nupkg #{NUGET_KEY} \"\r\n\tsh \"nuget.exe push artifacts/FubuMVC.LightningQueues.#{build_number}-alpha.nupkg #{NUGET_KEY} \"\r\n\tsh \"nuget.exe push artifacts/FubuMVC.Spark.#{build_number}-alpha.nupkg #{NUGET_KEY} \"\r\n\tsh \"nuget.exe push artifacts/FubuMVC.Marten.#{build_number}-alpha.nupkg #{NUGET_KEY} \"\r\n\tsh \"nuget.exe push artifacts/Serenity.#{build_number}-alpha.nupkg #{NUGET_KEY} \"\r\n\tsh \"nuget.exe push artifacts/JasperService.#{build_number}-alpha.nupkg #{NUGET_KEY} \"\r\nend\r\n\r\ndesc \"Launches the diagnostics harness for client side development\"\r\ntask :diagnostics => [:compile] do\r\n\tsh 'start npm run watch'\r\n\tsh \"src/Fubu/bin/#{COMPILE_TARGET}/fubu.exe run --directory src/DiagnosticsHarness -o -w --mode diagnostics\"\r\nend\r\n\r\ndesc \"Unit and Integration Tests\"\r\ntask :full => [:default, :integration_test]\r\n\r\n\r\ndesc \"Delegates to npm install and builds the javascript for diagnostics\"\r\ntask :npm do\r\n\tsh 'npm install'\r\n\tsh 'npm run build'\r\nend\r\n\r\n\r\ndesc \"Replaces the existing installed gem with the new version for local testing\"\r\ntask :local_gem => [:create_gem] do\r\n\tsh 'gem uninstall fubu -a -x'\r\n\tDir.chdir 'pkg' do\r\n\t    sh 'gem install fubu'\r\n    end\r\nend\r\n\r\ndesc \"Moves the gem to the archive folder\"\r\ntask :archive_gem => [:create_gem] do\r\n\tcopyOutputFiles \"pkg\", \"*.gem\", \"artifacts\"\r\nend\r\n\r\n\r\n# 'https://www.myget.org/F/fubumvc-edge/'\r\n# TODO -- need to add a set of tasks to test JasperService\r\n\r\ndesc \"Run the storyteller specifications\"\r\ntask :storyteller => [:compile] do\r\n\tsh \"packages/Storyteller/tools/st.exe run src/FubuMVC.IntegrationTesting --retries 3 --results-path artifacts/stresults.htm --build #{COMPILE_TARGET}\"\r\nend\r\n\r\ndesc \"Run the storyteller specifications for health monitoring\"\r\ntask :servicebus => [:compile] do\r\n\tsh \"packages/Storyteller/tools/st.exe run src/FubuMVC.IntegrationTesting --retries 3 --results-path artifacts/stresults.htm --build #{COMPILE_TARGET} -w ServiceBus\"\r\nend\r\n\r\ndesc \"Run the storyteller specifications\"\r\ntask :open_st => [:compile] do\r\n\tsh \"packages/Storyteller/tools/st.exe open src/FubuMVC.IntegrationTesting\"\r\nend\r\n\r\ndesc \"Outputs the command line usage\"\r\ntask :dump_usages => [:compile] do\r\n  sh \"src/Fubu/bin/#{COMPILE_TARGET}/fubu.exe dump-usages fubu src/Fubu.Docs/fubu.cli.xml\"\r\nend\r\n\r\ndesc \"Creates the gem for fubu.exe\"\r\ntask :create_gem => [:compile] do\r\n    require \"rubygems/package\"\r\n\tcleanDirectory 'bin';\t\r\n\tcleanDirectory 'pkg'\r\n\t\r\n\tDir.mkdir 'artifacts' unless Dir.exists?('artifacts')\r\n\tDir.mkdir 'bin' unless Dir.exists?('bin')\r\n\tDir.mkdir 'pkg' unless Dir.exists?('pkg')\r\n\t\r\n\tcopyOutputFiles \"src/Fubu/bin/#{COMPILE_TARGET}\", '*.dll', 'bin'\r\n\tcopyOutputFiles \"src/Fubu/bin/#{COMPILE_TARGET}\", 'Fubu.exe', 'bin'\r\n\tcopyOutputFiles \"src/Fubu/bin/#{COMPILE_TARGET}\", 'chromedriver.exe', 'bin'\r\n\tFileUtils.cp_r 'templates', 'bin'\r\n\t\r\n\tFileUtils.copy 'fubu', 'bin'\r\n\r\n\r\n\tspec = Gem::Specification.new do |s|\r\n\t  s.platform    = Gem::Platform::RUBY\r\n\t  s.name        = 'fubu'\r\n\t  s.version     = @solution.options[:build_number] + '.alpha'\r\n\t  s.files = Dir['bin/**/*']\r\n\t  s.bindir = 'bin'\r\n\t  s.executables << 'fubu'\r\n\t  \r\n\t  s.summary     = 'Command line tools for FubuMVC development'\r\n\t  s.description = 'Command line tools for FubuMVC development'\r\n\t  \r\n\t  s.add_runtime_dependency \"rake\",[\"~>10.0\"]\r\n\t  s.add_runtime_dependency \"bundler\",[\">=1.3.5\"]\r\n\t  \r\n\t  s.authors           = ['Jeremy D. Miller', 'Josh Arnold', 'Chad Myers', 'Joshua Flanagan']\r\n\t  s.email             = 'fubumvc-devel@googlegroups.com'\r\n\t  s.homepage          = 'http://fubu-project.org'\r\n\t  s.rubyforge_project = 'fubu'\r\n\tend   \r\n    puts \"ON THE FLY SPEC FILES\"\r\n    puts spec.files\r\n    puts \"==========\"\r\n\r\n    Gem::Package::build spec, true\r\n\t\r\n\tFileUtils.mv \"fubu-#{build_number}.alpha.gem\", \"pkg/fubu-#{build_number}.alpha.gem\"\r\n\t\r\nend\r\n\r\ndesc \"Launches VS to the FubuMVC solution file\"\r\ntask :sln do\r\n\tsh \"start src/FubuMVC.sln\"\r\nend\r\n\r\ndef copyOutputFiles(fromDir, filePattern, outDir)\r\n\tDir.glob(File.join(fromDir, filePattern)){|file|\t\t\r\n\t\tcopy(file, outDir) if File.file?(file)\r\n\t} \r\nend\r\n\r\ndef waitfor(&block)\r\n\tchecks = 0\r\n\tuntil block.call || checks >10 \r\n\t\tsleep 0.5\r\n\t\tchecks += 1\r\n\tend\r\n\traise 'waitfor timeout expired' if checks > 10\r\nend\r\n\r\ndef cleanDirectory(dir)\r\n\tif exists?(dir)\r\n\t\tputs 'Cleaning directory ' + dir\r\n\t\tFileUtils.rm_rf dir;\r\n\t\twaitfor { !exists?(dir) }\r\n\tend\r\n\t\r\n\tif dir == 'artifacts'\r\n\t\tDir.mkdir 'artifacts'\r\n\tend\r\nend\r\n\r\ndef cleanFile(file)\r\n\tFile.delete file unless !File.exist?(file)\r\nend\r\n"
  },
  {
    "path": "readme.markdown",
    "content": "# Building FubuMVC\r\n\r\nThe FubuMVC codebase still uses Rake for build automation, but as of September 2015, you don't **have** to use Rake to develop with FubuMVC if you don't want to. You **will need \r\nto have Node.js or Io.js and npm installed** in order to build the client side assets for FubuMVC's diagnostics package before working with the C# code.\r\n\r\n## With Rake\r\n\r\nAssuming you have Ruby 2.1+ installed on your computer, go to a command line and type...\r\n\r\n1. bundle install\r\n1. rake\r\n\r\n\r\n## Visual Studio.Net Only\r\n\r\nThere is a small command file called `build.cmd` that can be executed once to bring down nuget and npm dependencies and build the client side assets that FubuMVC \r\nneeds for its embedded. diagnostics. Run this command at least once before opening Visual Studio.Net.\r\n\r\nFrom there, open the solution file at `src/FubuMVC.sln` and go to town.\r\n\r\n\r\n# Working with Storyteller\r\n\r\n* `rake open_st` -- Opens the Storyteller test suite in the Storyteller client for interactive editing and execution\r\n* `rake storyteller` -- Runs all the Storyteller specifications\r\n\r\n# Working with Diagnostics\r\n\r\nOpen the diagnostics harness application to the browser with the command `rake diagnostics`. This command will start webpack in a new window against the client side\r\nattributes in the `javascript` folder in \"watched\" mode. This command also compiles and starts the `DiagnosticsHarness` application in a NOWIN server before opening a browser\r\nwindow to the newly launched application. The browser will auto-refresh whenever a new version of the webpack `bundle.js` file is saved. You will have to stop and restart\r\nthe FubuMVC application to see any changes to the server side.\r\n \r\n\r\n"
  },
  {
    "path": "src/AspNetApplication/AspNetApplication.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{DC1BCE7A-CA17-423C-81F2-836292C3AF2C}</ProjectGuid>\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>AspNetApplication</RootNamespace>\n    <AssemblyName>AspNetApplication</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <UseIISExpress>false</UseIISExpress>\n    <FileUpgradeFlags>\n    </FileUpgradeFlags>\n    <OldToolsVersion>4.5</OldToolsVersion>\n    <UpgradeBackupLocation>\n    </UpgradeBackupLocation>\n    <IISExpressSSLPort />\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Bottles\">\n      <HintPath>..\\packages\\Bottles\\lib\\Bottles.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.EnterpriseServices\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"System.Web.DynamicData\" />\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Web.Services\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"content\\scripts\\jquery-1.7.min.js\" />\n    <Content Include=\"content\\scripts\\sse\\serverSideEventPage.js\" />\n    <Content Include=\"Global.asax\" />\n    <Content Include=\"Test.txt\" />\n    <Content Include=\"Web.config\" />\n    <Content Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n    <Content Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"AspNetApplicationFubuRegistry.cs\" />\n    <Compile Include=\"binding_against_form_data.cs\" />\n    <Compile Include=\"binding_against_querystring_values.cs\" />\n    <Compile Include=\"binding_against_request_cookies.cs\" />\n    <Compile Include=\"CompressedContentController.cs\" />\n    <Compile Include=\"Global.asax.cs\">\n      <DependentUpon>Global.asax</DependentUpon>\n    </Compile>\n    <Compile Include=\"GoHereController.cs\" />\n    <Compile Include=\"handling_501_responses.cs\" />\n    <Compile Include=\"HomeEndpoint.cs\" />\n    <Compile Include=\"Http\\ResponseController.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"FileUpload\\FileUploadController.cs\" />\n    <Compile Include=\"reading_and_writing_json_and_xml_thru_conneg.cs\" />\n    <Compile Include=\"reading_cookies.cs\" />\n    <Compile Include=\"reading_request_headers.cs\" />\n    <Compile Include=\"reading_route_data.cs\" />\n    <Compile Include=\"writing_a_file_to_output.cs\" />\n    <Compile Include=\"writing_a_non_default_status_code.cs\" />\n    <Compile Include=\"writing_response_headers.cs\" />\n    <Compile Include=\"writing_string_output.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{E18FD922-0E7A-49CD-B89F-473826077B9D}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"ripple.dependencies.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"WidgetSpikes\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"app.asset.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\n  </Target>\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>False</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>52103</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>\n          </IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"HtmlTags\">\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Primitives\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.AppContext\">\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Buffers\">\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Console\">\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tools\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Calendars\">\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Extensions\">\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression\">\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression.ZipFile\">\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http\">\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Primitives\">\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Extensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Primitives\">\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Resources.ResourceManager\">\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Handles\">\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Loader\">\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Numerics\">\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Cng\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Csp\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Timer\">\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/AspNetApplication/AspNetApplicationFubuRegistry.cs",
    "content": "using FubuMVC.Core;\r\nusing FubuMVC.Core.Http.Compression;\r\n\r\nnamespace AspNetApplication\r\n{\r\n    public class AspNetApplicationFubuRegistry : FubuRegistry\r\n    {\r\n        public AspNetApplicationFubuRegistry()\r\n        {\r\n            Actions.IncludeClassesSuffixedWithController();\r\n            Actions.IncludeClassesSuffixedWithEndpoint();\r\n\r\n            Policies.Local.Add(x => {\r\n                x.Where.AnyActionMatches(call => call.HandlerType == typeof (CompressedContentController));\r\n                x.ContentCompression.Apply();\r\n            });\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/CompressedContentController.cs",
    "content": "﻿namespace AspNetApplication\r\n{\r\n    public class CompressedContentController\r\n    {\r\n         public string get_compressed_content(CompressedContentInput input)\r\n         {\r\n             return \"Hello, World!\";\r\n         }\r\n    }\r\n\r\n    public class CompressedContentInput\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/FileUpload/FileUploadController.cs",
    "content": "﻿using System.Web;\r\nusing FubuMVC.Core.UI;\r\nusing FubuMVC.Core.Urls;\r\nusing HtmlTags;\r\nusing FubuCore;\r\n\r\nnamespace AspNetApplication.FileUpload\r\n{\r\n    public class FileUploadTestInput{ }\r\n\r\n    public class FileUploadInput\r\n    {\r\n        public HttpPostedFileBase File1 { get; set; }\r\n    }\r\n\r\n    public class FileUploadOutput\r\n    {\r\n        public string Text { get; set; }\r\n    }\r\n\r\n    public class FileUploadController\r\n    {\r\n        private readonly IUrlRegistry _urls;\r\n\r\n        public FileUploadController(IUrlRegistry urls)\r\n        {\r\n            _urls = urls;\r\n        }\r\n\r\n        private HtmlDocument buildDocument(FileUploadOutput model)\r\n        {\r\n            var document = new HtmlDocument();\r\n            document.Title = \"File Upload View\";\r\n\r\n            document.Add(\"h1\").Text(model.Text);\r\n\r\n            document.Add(\"form\")\r\n                .Attr(\"method\", \"post\")\r\n                .Attr(\"enctype\", \"multipart/form-data\")\r\n                .Attr(\"action\", _urls.UrlFor<FileUploadInput>());\r\n\r\n            document.Add(\"br\");\r\n\r\n            document.Push(\"p\");\r\n            document.Add(\"span\").Text(\"File 1:  \");\r\n            document.Add(\"input\").Attr(\"type\", \"file\").Attr(\"name\", \"File1\");\r\n\r\n            \r\n            document.Add(\"br\");\r\n            document.Add(\"input\").Attr(\"type\", \"submit\");\r\n\r\n            return document;\r\n        }\r\n\r\n        public HtmlDocument get_file_upload_test(FileUploadTestInput input)\r\n        {\r\n\r\n            return buildDocument(new FileUploadOutput(){\r\n                Text = \"Please upload a file\"\r\n            });\r\n        }\r\n\r\n        public HtmlDocument post_file_upload_test(FileUploadInput input)\r\n        {\r\n            var text = (input.File1 == null) ? \"File upload failure!\" : \"File upload success! \" + input.File1.FileName;\r\n\r\n            return buildDocument(new FileUploadOutput\r\n            {\r\n                Text = text\r\n            });\r\n        }\r\n    \r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/Global.asax",
    "content": "﻿<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"AspNetApplication.Global\" Language=\"C#\" %>\r\n"
  },
  {
    "path": "src/AspNetApplication/Global.asax.cs",
    "content": "﻿using System;\r\nusing System.Web;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.StructureMap;\r\n\r\nnamespace AspNetApplication\r\n{\r\n    public class Global : HttpApplication\r\n    {\r\n        protected void Application_Start(object sender, EventArgs e)\r\n        {\r\n            FubuApplication\r\n                .For<AspNetApplicationFubuRegistry>()\r\n                .StructureMapObjectFactory()\r\n                .Bootstrap();\r\n        }\r\n\r\n        protected void Session_Start(object sender, EventArgs e)\r\n        {\r\n        }\r\n\r\n        protected void Application_BeginRequest(object sender, EventArgs e)\r\n        {\r\n        }\r\n\r\n        protected void Application_AuthenticateRequest(object sender, EventArgs e)\r\n        {\r\n        }\r\n\r\n        protected void Application_Error(object sender, EventArgs e)\r\n        {\r\n        }\r\n\r\n        protected void Session_End(object sender, EventArgs e)\r\n        {\r\n        }\r\n\r\n        protected void Application_End(object sender, EventArgs e)\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/GoHereController.cs",
    "content": "namespace AspNetApplication\r\n{\r\n    public class GoHereController\r\n    {\r\n        \r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/HomeEndpoint.cs",
    "content": "﻿using System;\r\n\r\nnamespace AspNetApplication\r\n{\r\n    public class HomeEndpoint\r\n    {\r\n        public string Index()\r\n        {\r\n            return \"hello there!\";\r\n        }\r\n\r\n        public string get_ysod()\r\n        {\r\n            throw new NotImplementedException(\"You shall not pass!\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/Http/ResponseController.cs",
    "content": "using System;\r\nusing System.Net;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Headers;\r\nusing FubuMVC.Core.Runtime;\r\nusing System.Linq;\r\nusing System.Collections.Generic;\r\n\r\nnamespace AspNetApplication.Http\r\n{\r\n    public class ResponseController\r\n    {\r\n        private readonly IOutputWriter _writer;\r\n        private readonly IHttpResponse _response;\r\n\r\n        public ResponseController(IOutputWriter writer, IHttpResponse response)\r\n        {\r\n            _writer = writer;\r\n            _response = response;\r\n        }\r\n\r\n        public AspNetResponse post_fake_response(AspNetRequest request)\r\n        {\r\n            _writer.WriteResponseCode((HttpStatusCode) Enum.ToObject(typeof(HttpStatusCode), request.StatusCode), request.StatusDescription);\r\n        \r\n            if (request.Headers != null)\r\n            {\r\n                request.Headers.Each(x => x.Write(_writer));\r\n            }\r\n\r\n            return new AspNetResponse{\r\n                Description = _response.StatusDescription,\r\n                StatusCode = _response.StatusCode,\r\n                ResponseHeaders = _response.AllHeaders().ToArray()\r\n            };\r\n        }        \r\n    }\r\n\r\n    public class AspNetRequest\r\n    {\r\n        public int StatusCode { get; set;}\r\n        public string StatusDescription { get; set;}\r\n        public Header[] Headers { get; set; }\r\n    }\r\n\r\n    public class AspNetResponse\r\n    {\r\n        public Header[] ResponseHeaders { get; set; }\r\n        public int StatusCode { get; set; }\r\n        public string Description { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"AspNetApplication\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"AspNetApplication\")]\r\n[assembly: AssemblyCopyright(\"Copyright ©  2012\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"e80f7749-c459-461e-bafe-9e6077ac8853\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Revision and Build Numbers \r\n// by using the '*' as shown below:\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n"
  },
  {
    "path": "src/AspNetApplication/Test.txt",
    "content": "﻿Some text here"
  },
  {
    "path": "src/AspNetApplication/Web.Debug.config",
    "content": "﻿<?xml version=\"1.0\"?>\r\n\r\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\r\n\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n  <!--\r\n    In the example below, the \"SetAttributes\" transform will change the value of \r\n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \r\n    finds an atrribute \"name\" that has a value of \"MyDB\".\r\n    \r\n    <connectionStrings>\r\n      <add name=\"MyDB\" \r\n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \r\n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\r\n    </connectionStrings>\r\n  -->\r\n  <system.web>\r\n    <!--\r\n      In the example below, the \"Replace\" transform will replace the entire \r\n      <customErrors> section of your web.config file.\r\n      Note that because there is only one customErrors section under the \r\n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\r\n      \r\n      <customErrors defaultRedirect=\"GenericError.htm\"\r\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\r\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\r\n      </customErrors>\r\n    -->\r\n  </system.web>\r\n</configuration>"
  },
  {
    "path": "src/AspNetApplication/Web.Release.config",
    "content": "﻿<?xml version=\"1.0\"?>\r\n\r\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\r\n\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n  <!--\r\n    In the example below, the \"SetAttributes\" transform will change the value of \r\n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \r\n    finds an atrribute \"name\" that has a value of \"MyDB\".\r\n    \r\n    <connectionStrings>\r\n      <add name=\"MyDB\" \r\n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \r\n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\r\n    </connectionStrings>\r\n  -->\r\n  <system.web>\r\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\r\n    <!--\r\n      In the example below, the \"Replace\" transform will replace the entire \r\n      <customErrors> section of your web.config file.\r\n      Note that because there is only one customErrors section under the \r\n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\r\n      \r\n      <customErrors defaultRedirect=\"GenericError.htm\"\r\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\r\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\r\n      </customErrors>\r\n    -->\r\n  </system.web>\r\n</configuration>"
  },
  {
    "path": "src/AspNetApplication/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\r\n<!--\r\n  For more information on how to configure your ASP.NET application, please visit\r\n  http://go.microsoft.com/fwlink/?LinkId=169433\r\n  -->\r\n<configuration>\r\n  <system.web>\r\n    <sessionState mode=\"Off\"/>\r\n    <compilation debug=\"true\" targetFramework=\"4.0\"/>\r\n    <pages controlRenderingCompatibilityVersion=\"3.5\" clientIDMode=\"AutoID\"/>\r\n  </system.web>\r\n  <system.webServer>\r\n    <modules runAllManagedModulesForAllRequests=\"true\"/>\r\n  </system.webServer>\r\n</configuration>"
  },
  {
    "path": "src/AspNetApplication/app.asset.config",
    "content": "﻿jquery is jquery-1.7.min.js"
  },
  {
    "path": "src/AspNetApplication/binding_against_form_data.cs",
    "content": "namespace AspNetApplication\r\n{\r\n    public class FormBindingEndpoint\r\n    {\r\n        public string post_form_values(FormInput input)\r\n        {\r\n            return input.ToString();\r\n        }\r\n    }\r\n\r\n    public class FormInput\r\n    {\r\n        public string Color { get; set; }\r\n        public string Direction { get; set; }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Color: {0}, Direction: {1}\", Color, Direction);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/binding_against_querystring_values.cs",
    "content": "using FubuMVC.Core;\r\n\r\nnamespace AspNetApplication\r\n{\r\n    public class QueryStringEndpoint\r\n    {\r\n        public string get_querystring_data(QueryStringModel model)\r\n        {\r\n            return model.ToString();\r\n        }\r\n    }\r\n\r\n    public class QueryStringModel\r\n    {\r\n        [QueryString]\r\n        public string Color { get; set; }\r\n\r\n        [QueryString]\r\n        public string Direction { get; set; }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Color: {0}, Direction: {1}\", Color, Direction);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/binding_against_request_cookies.cs",
    "content": "\r\nnamespace AspNetApplication\r\n{\r\n    public class CookieBindingEndpoint\r\n    {\r\n        public string get_cookie_data(CookieModel input)\r\n        {\r\n            return input.ToString();\r\n        }\r\n    }\r\n\r\n    public class CookieModel\r\n    {\r\n        public string Color { get; set; }\r\n        public string Direction { get; set; }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Color: {0}, Direction: {1}\", Color, Direction);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/handling_501_responses.cs",
    "content": "using System;\r\n\r\nnamespace AspNetApplication\r\n{\r\n    public class ExceptionEndpoint\r\n    {\r\n        public string get_exception()\r\n        {\r\n            throw new ApplicationException(\"I did not like this\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/paket.references",
    "content": "FubuCore\nHtmlTags\nstructuremap"
  },
  {
    "path": "src/AspNetApplication/reading_and_writing_json_and_xml_thru_conneg.cs",
    "content": "namespace AspNetApplication\r\n{\r\n    public class ConnegEndpoint\r\n    {\r\n        public Message post_message(Message message)\r\n        {\r\n            return message;\r\n        }\r\n    }\r\n\r\n    public class Message\r\n    {\r\n        public string Color { get; set; }\r\n        public string Direction { get; set; }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Color: {0}, Direction: {1}\", Color, Direction);\r\n        }\r\n\r\n        public bool Equals(Message other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other.Color, Color) && Equals(other.Direction, Direction);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof (Message)) return false;\r\n            return Equals((Message) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                return ((Color != null ? Color.GetHashCode() : 0)*397) ^ (Direction != null ? Direction.GetHashCode() : 0);\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/reading_cookies.cs",
    "content": "﻿using System.Web;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Cookies;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace AspNetApplication\r\n{\r\n    public class CookieEndpoint\r\n    {\r\n        public const string CookieName = \"Test\";\r\n\r\n        private readonly ICookies _cookies;\r\n        private readonly IOutputWriter _writer;\r\n\r\n        public CookieEndpoint(ICookies cookies, IOutputWriter writer)\r\n        {\r\n            _cookies = cookies;\r\n            _writer = writer;\r\n        }\r\n\r\n        public string get_cookie_info(CookieInfo info)\r\n        {\r\n            return _cookies.Get(CookieName).Value;\r\n        }\r\n\r\n        public void post_write_cookie(WriteCookieRequest request)\r\n        {\r\n            _writer.AppendCookie(new Cookie(request.Name, request.Value));\r\n        }\r\n    }\r\n\r\n    public class CookieInfo { }\r\n    public class WriteCookieRequest\r\n    {\r\n        public string Name { get; set; }\r\n        public string Value { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/reading_request_headers.cs",
    "content": "using System.Linq;\r\nusing FubuMVC.Core.Http;\r\n\r\nnamespace AspNetApplication\r\n{\r\n    public class RequestHeadersEndpoint\r\n    {\r\n        private readonly IHttpRequest _headers;\r\n\r\n        public RequestHeadersEndpoint(IHttpRequest headers)\r\n        {\r\n            _headers = headers;\r\n        }\r\n\r\n        public string get_header_Name(HeaderRequest request)\r\n        {\r\n            return _headers.GetHeader(request.Name).FirstOrDefault();\r\n        }\r\n    }\r\n\r\n    public class HeaderRequest\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/reading_route_data.cs",
    "content": "using FubuCore;\r\n\r\nnamespace AspNetApplication\r\n{\r\n    public class ReadingRouteEndpoint\r\n    {\r\n        public string get_routing_data_Name_Age(RouteInput input)\r\n        {\r\n            return \"Name={0}, Age={1}\".ToFormat(input.Name, input.Age);\r\n        }\r\n    }\r\n\r\n    public class RouteInput\r\n    {\r\n        public string Name { get; set; }\r\n        public int Age { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/writing_a_file_to_output.cs",
    "content": "using FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Files;\r\n\r\nnamespace AspNetApplication\r\n{\r\n    public class FileWriterEndpoint\r\n    {\r\n        private readonly IOutputWriter _writer;\r\n        private readonly IFubuApplicationFiles _files;\r\n\r\n        public FileWriterEndpoint(IOutputWriter writer, IFubuApplicationFiles files)\r\n        {\r\n            _writer = writer;\r\n            _files = files;\r\n        }\r\n\r\n        public void get_file_contents_Name(FileInput input)\r\n        {\r\n            var file = _files.Find(input.Name);\r\n            _writer.WriteFile(MimeType.Text, file.Path, input.Name);\r\n        }\r\n    }    \r\n\r\n    public class FileInput\r\n    {\r\n        public string Name { get; set;}\r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/writing_a_non_default_status_code.cs",
    "content": "using System.Net;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace AspNetApplication\r\n{\r\n    public class StatusCodeEndpoint\r\n    {\r\n        private readonly IOutputWriter _writer;\r\n\r\n        public StatusCodeEndpoint(IOutputWriter writer)\r\n        {\r\n            _writer = writer;\r\n        }\r\n\r\n        public string get_not_modified()\r\n        {\r\n            _writer.WriteResponseCode(HttpStatusCode.NotModified, \"No changes here\");\r\n\r\n            return \"Nothing to see here\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/writing_response_headers.cs",
    "content": "using FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace AspNetApplication\r\n{\r\n    public class ResponseHeadersEndpoint\r\n    {\r\n        private readonly IHttpResponse _response;\r\n        private readonly IOutputWriter _writer;\r\n\r\n        public ResponseHeadersEndpoint(IHttpResponse response, IOutputWriter writer)\r\n        {\r\n            _response = response;\r\n            _writer = writer;\r\n        }\r\n\r\n        public string get_response_headers()\r\n        {\r\n            _writer.AppendHeader(\"x-1\", \"a\");\r\n            _writer.AppendHeader(\"x-2\", \"b\");\r\n\r\n            _writer.AppendHeader(HttpResponseHeaders.KeepAlive, true.ToString());\r\n            _writer.AppendHeader(HttpResponseHeaders.Server, \"Server1\");\r\n\r\n            return \"Nothing to see here\";\r\n        }\r\n\r\n        public string get_content_headers()\r\n        {\r\n            _writer.AppendHeader(HttpResponseHeaders.ContentMd5, \"A\");\r\n            _writer.AppendHeader(HttpResponseHeaders.ContentDisposition, \"B\");\r\n            _writer.AppendHeader(HttpResponseHeaders.ContentLocation, \"C\");\r\n            _writer.AppendHeader(HttpResponseHeaders.Allow, \"D\");\r\n            _writer.AppendHeader(HttpResponseHeaders.ContentEncoding, \"UTF-16\");\r\n            _writer.AppendHeader(HttpResponseHeaders.ContentLength, \"Nothing to see here\".Length.ToString());\r\n            _writer.AppendHeader(HttpResponseHeaders.ContentLanguage, \"jp-JP\");\r\n            _writer.AppendHeader(HttpResponseHeaders.ContentRange, \"E\");\r\n            _writer.AppendHeader(HttpResponseHeaders.Expires, \"5\");\r\n            _writer.AppendHeader(HttpResponseHeaders.LastModified, \"12345\");\r\n\r\n            \r\n\r\n\r\n            return \"Nothing to see here\";\r\n        }\r\n\r\n        public string get_etag()\r\n        {\r\n            _writer.AppendHeader(HttpResponseHeaders.ETag, \"123456\");\r\n\r\n            return \"Nothing to see here\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/AspNetApplication/writing_string_output.cs",
    "content": "namespace AspNetApplication\r\n{\r\n    public class StringEndpoint\r\n    {\r\n        public string get_hello()\r\n        {\r\n            return \"Hello.\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/AspNetDiagnosticsHarness/AspNetDiagnosticsHarness.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{B580CCBB-CB2E-411E-B89F-C472B422B04C}</ProjectGuid>\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>AspNetDiagnosticsHarness</RootNamespace>\n    <AssemblyName>AspNetDiagnosticsHarness</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <UseIISExpress>true</UseIISExpress>\n    <IISExpressSSLPort />\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n    <FileUpgradeFlags>40</FileUpgradeFlags>\n    <UpgradeBackupLocation>C:\\code\\fubumvc\\src\\Backup3\\</UpgradeBackupLocation>\n    <OldToolsVersion>12.0</OldToolsVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Web.DynamicData\" />\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Web.Services\" />\n    <Reference Include=\"System.EnterpriseServices\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Global.asax\" />\n    <Content Include=\"Web.config\">\n      <SubType>Designer</SubType>\n    </Content>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Global.asax.cs\">\n      <DependentUpon>Global.asax</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n    <None Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\DiagnosticsHarness\\DiagnosticsHarness.csproj\">\n      <Project>{5a9e17dd-a8e3-4abd-ac6c-9a6a97f6cda9}</Project>\n      <Name>DiagnosticsHarness</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\FubuMVC.AspNet\\FubuMVC.AspNet.csproj\">\n      <Project>{f3711812-e9cd-42ea-b439-3271370e6cdf}</Project>\n      <Name>FubuMVC.AspNet</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>True</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>59015</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>http://localhost:59015/</IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v11.0\\WebApplications\\Microsoft.WebApplication.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src/AspNetDiagnosticsHarness/Global.asax",
    "content": "﻿<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"AspNetDiagnosticsHarness.Global\" Language=\"C#\" %>\n"
  },
  {
    "path": "src/AspNetDiagnosticsHarness/Global.asax.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Security;\nusing System.Web.SessionState;\nusing DiagnosticsHarness;\nusing FubuMVC.AspNet;\n\nnamespace AspNetDiagnosticsHarness\n{\n    public class Global : System.Web.HttpApplication\n    {\n        protected void Application_Start(object sender, EventArgs e)\n        {\n            var registry = new HarnessRegistry();\n            registry.Mode = null;\n            \n            FubuAspNetHost.Bootstrap(registry);\n        }\n    }\n}"
  },
  {
    "path": "src/AspNetDiagnosticsHarness/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"AspNetDiagnosticsHarness\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Towers Watson\")]\n[assembly: AssemblyProduct(\"AspNetDiagnosticsHarness\")]\n[assembly: AssemblyCopyright(\"Copyright © Towers Watson 2015\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"d6ea1382-052c-4e21-98dd-8bbb23951dde\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/AspNetDiagnosticsHarness/Web.Debug.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "src/AspNetDiagnosticsHarness/Web.Release.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "src/AspNetDiagnosticsHarness/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!--\n  For more information on how to configure your ASP.NET application, please visit\n  http://go.microsoft.com/fwlink/?LinkId=169433\n  -->\n\n<configuration>\n    <system.web>\n      <compilation debug=\"true\" targetFramework=\"4.5\" />\n      <httpRuntime targetFramework=\"4.5\" />\n    </system.web>\n\n  <appSettings>\n    <add key=\"owin:AutomaticAppStartup\" value=\"false\"/>\n  </appSettings>\n\n</configuration>\n"
  },
  {
    "path": "src/AssemblyPackage/.package-manifest",
    "content": "<?xml version=\"1.0\"?>\r\n<package xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <Role>module</Role>\r\n  <Name>AssemblyPackage</Name>\r\n  <assembly>AssemblyPackage</assembly>\r\n  <DataFileSet Include=\"*.*\">\r\n    <DeepSearch>true</DeepSearch>\r\n  </DataFileSet>\r\n  <ContentFileSet Include=\"*.as*x;*.master;Content\\*.*;*.config\" Exclude=\"data/*\">\r\n    <DeepSearch>true</DeepSearch>\r\n  </ContentFileSet>\r\n</package>"
  },
  {
    "path": "src/AssemblyPackage/AssemblyPackage.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{99DBA82A-E811-4DA0-983C-12E8317F8642}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>AssemblyPackage</RootNamespace>\n    <AssemblyName>AssemblyPackage</AssemblyName>\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"AssemblyPackageMarker.cs\" />\n    <Compile Include=\"AssemblyPackageRegistry.cs\" />\n    <Compile Include=\"FakeTypes.cs\" />\n    <Compile Include=\"HelloWorld.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Data\\1.txt\" />\n    <Content Include=\"Data\\2.txt\" />\n    <Content Include=\"Data\\3.txt\" />\n    <Content Include=\"JavaScript1.js\" />\n    <Content Include=\"WebContent\\content\\images\\aaa\\ico-close.gif\" />\n    <Content Include=\"WebContent\\content\\images\\icon-add-alt.png\" />\n    <Content Include=\"WebContent\\content\\scripts\\Pak1-A.js\" />\n    <Content Include=\"WebContent\\content\\scripts\\Script1.js\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\n  </Target>\n  <PropertyGroup>\n    <PreBuildEvent>\n    </PreBuildEvent>\n  </PropertyGroup>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{E18FD922-0E7A-49CD-B89F-473826077B9D}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"HtmlTags\">\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Primitives\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.AppContext\">\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Buffers\">\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Console\">\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tools\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Calendars\">\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Extensions\">\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression\">\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression.ZipFile\">\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http\">\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Primitives\">\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Extensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Primitives\">\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Resources.ResourceManager\">\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Handles\">\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Loader\">\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Numerics\">\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Cng\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Csp\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Timer\">\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/AssemblyPackage/AssemblyPackageMarker.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\n\r\nnamespace AssemblyPackage\r\n{\r\n    public class AssemblyPackageMarker\r\n    {\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/AssemblyPackage/AssemblyPackageRegistry.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Behaviors;\r\n\r\nnamespace AssemblyPackage\r\n{\r\n    public class AssemblyPackageRegistry : FubuPackageRegistry\r\n    {\r\n        public AssemblyPackageRegistry()\r\n        {\r\n\r\n        }\r\n    }\r\n\r\n    public class AssemblyEndpoint\r\n    {\r\n        public string get_hello()\r\n        {\r\n            return \"Hello.\";\r\n        }\r\n    }\r\n\r\n    public class AssemblyPackageExtension : IFubuRegistryExtension\r\n    {\r\n        public void Configure(FubuRegistry registry)\r\n        {\r\n            registry.Policies.Local.Configure(graph =>\r\n            {\r\n                graph.Chains\r\n                    .Where(x => x.HandlerTypeIs<AssemblyEndpoint>())\r\n                    .Each(x => x.WrapWith<BehaviorFromAssemblyPackage>());\r\n            });\r\n        }\r\n    }\r\n\r\n    public class BehaviorFromAssemblyPackage : BasicBehavior\r\n    {\r\n        public BehaviorFromAssemblyPackage()\r\n            : base(PartialBehavior.Executes)\r\n        {\r\n        }\r\n\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/AssemblyPackage/Data/1.txt",
    "content": "﻿1"
  },
  {
    "path": "src/AssemblyPackage/Data/2.txt",
    "content": "﻿2"
  },
  {
    "path": "src/AssemblyPackage/Data/3.txt",
    "content": "﻿3"
  },
  {
    "path": "src/AssemblyPackage/FakeTypes.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing FubuMVC.Core.Registration;\r\n\r\nnamespace AssemblyPackage\r\n{\r\n    public class AddressOverrides : OverridesFor<Address>\r\n    {\r\n        public AddressOverrides()\r\n        {\r\n            Property(x => x.Address1).Add(new ElementRule(\"1\")).Add(new ElementRule(\"2\"));\r\n            Property(x => x.Address2).Add(new ElementRule(\"3\")).Add(new ElementRule(\"4\"));\r\n        }\r\n    }\r\n\r\n    public class ElementRule\r\n    {\r\n        private readonly string _name;\r\n\r\n        public ElementRule(string name)\r\n        {\r\n            _name = name;\r\n        }\r\n\r\n        public string Name\r\n        {\r\n            get { return _name; }\r\n        }\r\n\r\n        protected bool Equals(ElementRule other)\r\n        {\r\n            return string.Equals(_name, other._name);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Name: {0}\", _name);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != this.GetType()) return false;\r\n            return Equals((ElementRule) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return (_name != null ? _name.GetHashCode() : 0);\r\n        }\r\n    }\r\n\r\n\r\n    public class AddressViewModel\r\n    {\r\n        public Address Address { get; set; }\r\n        public bool ShouldShow { get; set; }\r\n        public IList<LocalityViewModel> Localities { get; set; }\r\n    }\r\n\r\n    public class LocalityViewModel\r\n    {\r\n        public string ZipCode { get; set; }\r\n        public string CountyName { get; set; }\r\n    }\r\n\r\n    public class Address\r\n    {\r\n        public Address()\r\n        {\r\n            StateOrProvince = string.Empty;\r\n            Country = string.Empty;\r\n            AddressType = string.Empty;\r\n        }\r\n\r\n        public int Order { get; set; }\r\n\r\n        public bool IsActive { get; set; }\r\n\r\n        [FakeRequired, FakeMaximumStringLength(100)]\r\n        public string AddressType { get; set; }\r\n\r\n        [FakeRequired, FakeMaximumStringLength(250)]\r\n        public string Address1 { get; set; }\r\n\r\n        public string Address2 { get; set; }\r\n\r\n        [FakeRequired, FakeMaximumStringLength(250)]\r\n        public string City { get; set; }\r\n\r\n        [FakeRequired]\r\n        public string StateOrProvince { get; set; }\r\n\r\n        [FakeRequired, FakeMaximumStringLength(100)]\r\n        public string Country { get; set; }\r\n\r\n        [FakeRequired, FakeMaximumStringLength(50)]\r\n        public string PostalCode { get; set; }\r\n\r\n        //[Required]\r\n        //public TimeZoneInfo TimeZone { get; set; }\r\n\r\n\r\n        public DateTime DateEntered { get; set; }\r\n\r\n        public ColorEnum Color { get; set; }\r\n        public Guid Guid { get; set; }\r\n    }\r\n\r\n    public class FakeRequiredAttribute : Attribute\r\n    {\r\n    }\r\n\r\n    public class FakeMaximumStringLength : Attribute\r\n    {\r\n        private readonly int _maxLength;\r\n\r\n        public FakeMaximumStringLength(int maxLength)\r\n        {\r\n            _maxLength = maxLength;\r\n        }\r\n\r\n        public int MaxLength { get { return _maxLength; } }\r\n    }\r\n\r\n    public enum ColorEnum\r\n    {\r\n        red, blue, green\r\n    }\r\n}"
  },
  {
    "path": "src/AssemblyPackage/HelloWorld.cs",
    "content": "﻿using FubuMVC.Core;\n\nnamespace AssemblyPackage\n{\n    public class HomeEndpoint\n    {\n        public string Index()\n        {\n            return \"Hello, World\";\n        }\n    }\n\n    public class SampleApp : FubuRegistry\n    {\n        \n    }\n\n    public static class RunStuff\n    {\n        public static void do_the_home_page()\n        {\n            using (var runtime = FubuRuntime.For<SampleApp>())\n            {\n                runtime.Scenario(_ =>\n                {\n                    _.Get.Url(\"\");\n                    _.ContentShouldBe(\"Hello, World\");\n                    \n                });\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/AssemblyPackage/JavaScript1.js",
    "content": "﻿var answer = 42;"
  },
  {
    "path": "src/AssemblyPackage/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\nusing FubuMVC.Core;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"AssemblyPackage\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"Microsoft\")]\r\n[assembly: AssemblyProduct(\"AssemblyPackage\")]\r\n[assembly: AssemblyCopyright(\"Copyright © Microsoft 2011\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"9fea411f-7a5a-49bb-94f2-633acb58e74f\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Build and Revision Numbers \r\n// by using the '*' as shown below:\r\n// [assembly: AssemblyVersion(\"1.0.*\")]\r\n[assembly: AssemblyVersion(\"1.1.1.1\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n\r\n\r\n[assembly: FubuModule]"
  },
  {
    "path": "src/AssemblyPackage/paket.references",
    "content": "FubuCore\nHtmlTags\nstructuremap"
  },
  {
    "path": "src/Backup/AspNetDiagnosticsHarness.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{B580CCBB-CB2E-411E-B89F-C472B422B04C}</ProjectGuid>\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>AspNetDiagnosticsHarness</RootNamespace>\n    <AssemblyName>AspNetDiagnosticsHarness</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <UseIISExpress>true</UseIISExpress>\n    <IISExpressSSLPort />\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Web.DynamicData\" />\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Web.Services\" />\n    <Reference Include=\"System.EnterpriseServices\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Global.asax\" />\n    <Content Include=\"Web.config\">\n      <SubType>Designer</SubType>\n    </Content>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Global.asax.cs\">\n      <DependentUpon>Global.asax</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n    <None Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\DiagnosticsHarness\\DiagnosticsHarness.csproj\">\n      <Project>{5a9e17dd-a8e3-4abd-ac6c-9a6a97f6cda9}</Project>\n      <Name>DiagnosticsHarness</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\FubuMVC.AspNet\\FubuMVC.AspNet.csproj\">\n      <Project>{f3711812-e9cd-42ea-b439-3271370e6cdf}</Project>\n      <Name>FubuMVC.AspNet</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>True</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>59015</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>http://localhost:59015/</IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "src/Backup/Global.asax",
    "content": "﻿<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"AspNetDiagnosticsHarness.Global\" Language=\"C#\" %>\n"
  },
  {
    "path": "src/Backup/Global.asax.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Security;\nusing System.Web.SessionState;\nusing DiagnosticsHarness;\nusing FubuMVC.AspNet;\n\nnamespace AspNetDiagnosticsHarness\n{\n    public class Global : System.Web.HttpApplication\n    {\n        protected void Application_Start(object sender, EventArgs e)\n        {\n            var registry = new HarnessRegistry();\n            registry.Mode = null;\n            \n            FubuAspNetHost.Bootstrap(registry);\n        }\n    }\n}"
  },
  {
    "path": "src/Backup/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"AspNetDiagnosticsHarness\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Towers Watson\")]\n[assembly: AssemblyProduct(\"AspNetDiagnosticsHarness\")]\n[assembly: AssemblyCopyright(\"Copyright © Towers Watson 2015\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"d6ea1382-052c-4e21-98dd-8bbb23951dde\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Revision and Build Numbers \n// by using the '*' as shown below:\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/Backup/Web.Debug.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "src/Backup/Web.Release.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\n\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\n  <!--\n    In the example below, the \"SetAttributes\" transform will change the value of \n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \n    finds an attribute \"name\" that has a value of \"MyDB\".\n    \n    <connectionStrings>\n      <add name=\"MyDB\" \n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\n    </connectionStrings>\n  -->\n  <system.web>\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\n    <!--\n      In the example below, the \"Replace\" transform will replace the entire \n      <customErrors> section of your web.config file.\n      Note that because there is only one customErrors section under the \n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\n      \n      <customErrors defaultRedirect=\"GenericError.htm\"\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\n      </customErrors>\n    -->\n  </system.web>\n</configuration>"
  },
  {
    "path": "src/Backup/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\n\n<!--\n  For more information on how to configure your ASP.NET application, please visit\n  http://go.microsoft.com/fwlink/?LinkId=169433\n  -->\n\n<configuration>\n    <system.web>\n      <compilation debug=\"true\" targetFramework=\"4.5\" />\n      <httpRuntime targetFramework=\"4.5\" />\n    </system.web>\n\n  <appSettings>\n    <add key=\"owin:AutomaticAppStartup\" value=\"false\"/>\n  </appSettings>\n\n</configuration>\n"
  },
  {
    "path": "src/DiagnosticsHarness/DiagnosticsHarness.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>DiagnosticsHarness</RootNamespace>\n    <AssemblyName>DiagnosticsHarness</AssemblyName>\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"FakeEndpoints.cs\" />\n    <Compile Include=\"HarnessRegistry.cs\" />\n    <Compile Include=\"HarnessSettings.cs\" />\n    <Compile Include=\"HomeEndpoint.cs\" />\n    <Compile Include=\"HomeModel.cs\" />\n    <Compile Include=\"INumberCache.cs\" />\n    <Compile Include=\"MartenEndpoint.cs\" />\n    <Compile Include=\"NumberCache.cs\" />\n    <Compile Include=\"NumberHandler.cs\" />\n    <Compile Include=\"NumberMessage.cs\" />\n    <Compile Include=\"NumberPost.cs\" />\n    <Compile Include=\"PartialEndpoints.cs\" />\n    <Compile Include=\"SampleJob.cs\" />\n    <Compile Include=\"TraceMessage.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\FubuMVC.LightningQueues\\FubuMVC.LightningQueues.csproj\">\n      <Project>{f151167c-4736-4c67-9697-7876574c05d0}</Project>\n      <Name>FubuMVC.LightningQueues</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\FubuMVC.Marten\\FubuMVC.Marten.csproj\">\n      <Project>{1431a58d-34dc-4efb-9e3d-dc545d51be6a}</Project>\n      <Name>FubuMVC.Marten</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"Properties\\\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"LightningDB;Microsoft.Win32.Registry;System.AppContext;System.Diagnostics.Contracts;System.Diagnostics.Process;System.Diagnostics.StackTrace;System.Dynamic.Runtime;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Net.NameResolution;System.Net.NetworkInformation;System.Net.Security;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Runtime.InteropServices.WindowsRuntime;System.Runtime.Serialization.Primitives;System.Runtime.WindowsRuntime;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Security.Principal.Windows;System.Threading;System.Threading.Overlapped;System.Xml.XmlSerializer\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <Content Include=\"fubu-diagnostics\\jquery.min.js\" />\n    <Content Include=\"fubu-diagnostics\\lq.js\" />\n    <Content Include=\"fubu-diagnostics\\marten.js\" />\n    <Content Include=\"fubu-diagnostics\\root.js\" />\n    <Content Include=\"fubu-diagnostics\\typeahead.bundle.min.js\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Baseline\">\n          <HintPath>..\\..\\packages\\Baseline\\lib\\net451\\Baseline.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Baseline\">\n          <HintPath>..\\..\\packages\\Baseline\\lib\\netstandard1.3\\Baseline.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <ItemGroup>\n    <Reference Include=\"Bottles\">\n      <HintPath>..\\..\\packages\\Bottles\\lib\\Bottles.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"BottleServiceRunner\">\n      <HintPath>..\\..\\packages\\BottleServiceRunner\\lib\\BottleServiceRunner.exe</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"HtmlTags\">\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"LightningDB\">\n          <HintPath>..\\..\\packages\\LightningDB\\lib\\net45\\LightningDB.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"LightningDB\">\n          <HintPath>..\\..\\packages\\LightningDB\\lib\\netstandard1.3\\LightningDB.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"LightningQueues\">\n          <HintPath>..\\..\\packages\\LightningQueues\\lib\\net46\\LightningQueues.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"LightningQueues\">\n          <HintPath>..\\..\\packages\\LightningQueues\\lib\\netstandard1.3\\LightningQueues.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"LightningQueues.Storage.LMDB\">\n          <HintPath>..\\..\\packages\\LightningQueues.Storage.LMDB\\lib\\net46\\LightningQueues.Storage.LMDB.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"LightningQueues.Storage.LMDB\">\n          <HintPath>..\\..\\packages\\LightningQueues.Storage.LMDB\\lib\\netstandard1.3\\LightningQueues.Storage.LMDB.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Marten\">\n          <HintPath>..\\..\\packages\\Marten\\lib\\net46\\Marten.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"Marten\">\n          <HintPath>..\\..\\packages\\Marten\\lib\\netstandard1.3\\Marten.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Dataflow\">\n          <HintPath>..\\..\\packages\\Microsoft.Tpl.Dataflow\\lib\\portable-net45+win8+wpa81\\System.Threading.Tasks.Dataflow.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Primitives\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Registry\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Registry\\ref\\netstandard1.3\\Microsoft.Win32.Registry.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net20\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net35\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net40\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\netstandard1.0\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0') Or ($(TargetFrameworkProfile) == 'Profile5') Or ($(TargetFrameworkProfile) == 'Profile6') Or ($(TargetFrameworkProfile) == 'Profile14') Or ($(TargetFrameworkProfile) == 'Profile19') Or ($(TargetFrameworkProfile) == 'Profile24') Or ($(TargetFrameworkProfile) == 'Profile37') Or ($(TargetFrameworkProfile) == 'Profile42') Or ($(TargetFrameworkProfile) == 'Profile47') Or ($(TargetFrameworkProfile) == 'Profile92') Or ($(TargetFrameworkProfile) == 'Profile102') Or ($(TargetFrameworkProfile) == 'Profile136') Or ($(TargetFrameworkProfile) == 'Profile147') Or ($(TargetFrameworkProfile) == 'Profile158') Or ($(TargetFrameworkProfile) == 'Profile225') Or ($(TargetFrameworkProfile) == 'Profile240') Or ($(TargetFrameworkProfile) == 'Profile255') Or ($(TargetFrameworkProfile) == 'Profile328') Or ($(TargetFrameworkProfile) == 'Profile336') Or ($(TargetFrameworkProfile) == 'Profile344')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net40+sl5+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'MonoAndroid') Or ($(TargetFrameworkIdentifier) == 'MonoTouch') Or ($(TargetFrameworkIdentifier) == 'Xamarin.iOS') Or ($(TargetFrameworkIdentifier) == 'Xamarin.Mac') Or ($(TargetFrameworkProfile) == 'Profile7') Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile32') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile78') Or ($(TargetFrameworkProfile) == 'Profile111') Or ($(TargetFrameworkProfile) == 'Profile151') Or ($(TargetFrameworkProfile) == 'Profile157') Or ($(TargetFrameworkProfile) == 'Profile259')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0')\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net20\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net35\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net40\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net45\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v3.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl3\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl4\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v7.1' Or $(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl4-windowsphone71\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl5\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.5'\">\n      <ItemGroup>\n        <Reference Include=\"Npgsql\">\n          <HintPath>..\\..\\packages\\Npgsql\\lib\\net45\\Npgsql.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Npgsql\">\n          <HintPath>..\\..\\packages\\Npgsql\\lib\\net451\\Npgsql.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"Npgsql\">\n          <HintPath>..\\..\\packages\\Npgsql\\lib\\netstandard1.3\\Npgsql.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Owin\">\n          <HintPath>..\\..\\packages\\Owin\\lib\\net40\\Owin.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Remotion.Linq\">\n          <HintPath>..\\..\\packages\\Remotion.Linq\\lib\\net45\\Remotion.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Remotion.Linq\">\n          <HintPath>..\\..\\packages\\Remotion.Linq\\lib\\netstandard1.0\\Remotion.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.AppContext\">\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Buffers\">\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Immutable\">\n          <HintPath>..\\..\\packages\\System.Collections.Immutable\\lib\\netstandard1.0\\System.Collections.Immutable.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.NonGeneric\">\n          <HintPath>..\\..\\packages\\System.Collections.NonGeneric\\ref\\netstandard1.3\\System.Collections.NonGeneric.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Specialized\">\n          <HintPath>..\\..\\packages\\System.Collections.Specialized\\ref\\netstandard1.3\\System.Collections.Specialized.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.ComponentModel\">\n          <HintPath>..\\..\\packages\\System.ComponentModel\\ref\\netstandard1.0\\System.ComponentModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ComponentModel.Primitives\">\n          <HintPath>..\\..\\packages\\System.ComponentModel.Primitives\\ref\\netstandard1.0\\System.ComponentModel.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.ComponentModel.TypeConverter\">\n          <HintPath>..\\..\\packages\\System.ComponentModel.TypeConverter\\ref\\netstandard1.0\\System.ComponentModel.TypeConverter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ComponentModel.TypeConverter\">\n          <HintPath>..\\..\\packages\\System.ComponentModel.TypeConverter\\ref\\netstandard1.5\\System.ComponentModel.TypeConverter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Console\">\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Data.Common\">\n          <HintPath>..\\..\\packages\\System.Data.Common\\ref\\net451\\System.Data.Common.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Data.Common\">\n          <HintPath>..\\..\\packages\\System.Data.Common\\ref\\netstandard1.2\\System.Data.Common.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile32') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile84') Or ($(TargetFrameworkProfile) == 'Profile151') Or ($(TargetFrameworkProfile) == 'Profile157')\">\n      <ItemGroup>\n        <Reference Include=\"System.Data.Common\">\n          <HintPath>..\\..\\packages\\System.Data.Common\\ref\\portable-net451+win8+wp8+wpa81\\System.Data.Common.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Contracts\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Contracts\\ref\\netstandard1.0\\System.Diagnostics.Contracts.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Process\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Process\\ref\\netstandard1.3\\System.Diagnostics.Process.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Process\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Process\\ref\\netstandard1.4\\System.Diagnostics.Process.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.StackTrace\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.StackTrace\\ref\\netstandard1.3\\System.Diagnostics.StackTrace.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tools\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.0\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.3\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Calendars\">\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Extensions\">\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression\">\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression.ZipFile\">\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Queryable\">\n          <HintPath>..\\..\\packages\\System.Linq.Queryable\\ref\\netstandard1.0\\System.Linq.Queryable.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http\">\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.NameResolution\">\n          <HintPath>..\\..\\packages\\System.Net.NameResolution\\ref\\netstandard1.3\\System.Net.NameResolution.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.NetworkInformation\">\n          <HintPath>..\\..\\packages\\System.Net.NetworkInformation\\ref\\netstandard1.3\\System.Net.NetworkInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Primitives\">\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Security\">\n          <HintPath>..\\..\\packages\\System.Net.Security\\ref\\netstandard1.3\\System.Net.Security.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\net45\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\net46\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netcore451\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netcoreapp1.0\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netstandard1.0\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netstandard1.1\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netstandard1.3\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\wpa81\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Interfaces\">\n          <HintPath>..\\..\\packages\\System.Reactive.Interfaces\\lib\\net45\\System.Reactive.Interfaces.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Interfaces\">\n          <HintPath>..\\..\\packages\\System.Reactive.Interfaces\\lib\\netstandard1.0\\System.Reactive.Interfaces.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\net45\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\net46\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\netstandard1.0\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2'))\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\netstandard1.1\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\netstandard1.3\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\net45\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\net46\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netcore451\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netcoreapp1.0\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netstandard1.0\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netstandard1.3\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\wpa81\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Windows.Threading\">\n          <HintPath>..\\..\\packages\\System.Reactive.Windows.Threading\\lib\\net45\\System.Reactive.Windows.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"WindowsBase\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Windows.Threading\">\n          <HintPath>..\\..\\packages\\System.Reactive.Windows.Threading\\lib\\netcore451\\System.Reactive.Windows.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Windows.Threading\">\n          <HintPath>..\\..\\packages\\System.Reactive.Windows.Threading\\lib\\wpa81\\System.Reactive.Windows.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.WindowsRuntime\">\n          <HintPath>..\\..\\packages\\System.Reactive.WindowsRuntime\\lib\\netcore451\\System.Reactive.WindowsRuntime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.WindowsRuntime\">\n          <HintPath>..\\..\\packages\\System.Reactive.WindowsRuntime\\lib\\wpa81\\System.Reactive.WindowsRuntime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Extensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Metadata\">\n          <HintPath>..\\..\\packages\\System.Reflection.Metadata\\lib\\netstandard1.1\\System.Reflection.Metadata.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Primitives\">\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Resources.ResourceManager\">\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Handles\">\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.WindowsRuntime\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.WindowsRuntime\\ref\\netstandard1.0\\System.Runtime.InteropServices.WindowsRuntime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Loader\">\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Numerics\">\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.0\\System.Runtime.Serialization.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.3\\System.Runtime.Serialization.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.WindowsRuntime\">\n          <HintPath>..\\..\\packages\\System.Runtime.WindowsRuntime\\ref\\netstandard1.2\\System.Runtime.WindowsRuntime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Claims\">\n          <HintPath>..\\..\\packages\\System.Security.Claims\\ref\\netstandard1.3\\System.Security.Claims.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Cng\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Csp\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Principal\">\n          <HintPath>..\\..\\packages\\System.Security.Principal\\ref\\netstandard1.0\\System.Security.Principal.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Principal.Windows\">\n          <HintPath>..\\..\\packages\\System.Security.Principal.Windows\\ref\\netstandard1.3\\System.Security.Principal.Windows.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Overlapped\">\n          <HintPath>..\\..\\packages\\System.Threading.Overlapped\\ref\\netstandard1.3\\System.Threading.Overlapped.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Dataflow\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Dataflow\\lib\\netstandard1.1\\System.Threading.Tasks.Dataflow.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Thread\">\n          <HintPath>..\\..\\packages\\System.Threading.Thread\\ref\\netstandard1.3\\System.Threading.Thread.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.ThreadPool\">\n          <HintPath>..\\..\\packages\\System.Threading.ThreadPool\\ref\\netstandard1.3\\System.Threading.ThreadPool.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Timer\">\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XmlDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XmlDocument\\ref\\netstandard1.3\\System.Xml.XmlDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XmlSerializer\">\n          <HintPath>..\\..\\packages\\System.Xml.XmlSerializer\\ref\\netstandard1.3\\System.Xml.XmlSerializer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Topshelf\">\n          <HintPath>..\\..\\packages\\Topshelf\\lib\\net452\\Topshelf.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/DiagnosticsHarness/FakeEndpoints.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Continuations;\n\nnamespace DiagnosticsHarness\n{\n   \n    public class FakeEndpoints\n    {\n        [WrapWith(typeof(DelayWrapper))]\n        public string get_hello()\n        {\n            return \"Hello\";\n        }\n\n        [WrapWith(typeof(DelayWrapper))]\n        public string get_failure()\n        {\n            throw new Exception(\"This failed!\");\n        }\n\n        [WrapWith(typeof(DelayWrapper))]\n        public Team get_team_favorite()\n        {\n            return new Team\n            {\n                City = \"Kansas City\",\n                Mascot = \"Chiefs\"\n            };\n        }\n\n        public FubuContinuation get_redirects()\n        {\n            return FubuContinuation.RedirectTo<FakeEndpoints>(x => x.get_hello());\n        }\n\n        [WrapWith(typeof(DelayWrapper))]\n        public string post_team(Team team)\n        {\n            return team.City + \" \" + team.Mascot;\n        }\n\n        [WrapWith(typeof(DelayWrapper))]\n        public AjaxContinuation delete_team(Team team)\n        {\n            return AjaxContinuation.Successful();\n        }\n\n        [WrapWith(typeof(DelayWrapper))]\n        public AjaxContinuation put_team(Team team)\n        {\n            return AjaxContinuation.Successful();\n        }\n    }\n\n    public class DelayWrapper : WrappingBehavior\n    {\n        private static readonly Random random = new Random();\n\n        protected override Task invoke(Func<Task> func)\n        {\n            var ms = random.NextDouble() * 1000;\n            Thread.Sleep(TimeSpan.FromMilliseconds(ms));\n\n            return func();\n        }\n    }\n\n    public class Team\n    {\n        public string City { get; set; }\n        public string Mascot { get; set; }\n    }\n}"
  },
  {
    "path": "src/DiagnosticsHarness/HarnessRegistry.cs",
    "content": "﻿using System;\nusing System.Data;\nusing System.Timers;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing FubuMVC.Marten;\nusing Marten;\n\nnamespace DiagnosticsHarness\n{\n    public class HarnessRegistry : FubuTransportRegistry<HarnessSettings>\n    {\n        public HarnessRegistry()\n        {\n            //Comment out in order to test with LightningQueues\n            //EnableInMemoryTransport();\n\n            Features.Diagnostics.Enable(TraceLevel.Verbose);\n\n            Services.ForSingletonOf<MessagePumper>();\n            Services.ForSingletonOf<INumberCache>().Use<NumberCache>();\n\n            // TODO -- publish everything option in the FI?\n            Channel(x => x.Channel).ReadIncoming().AcceptsMessages(x => x != typeof(TraceMessage)).DefaultSerializer<XmlMessageSerializer>();\n\n            Policies.Global.Add<ErrorHandlingPolicy>();\n\n            Policies.Global.Add<TransactionalBehaviorPolicy>();\n\n            SubscribeLocally().ToSource(x => x.Publisher)\n                .ToMessage<NumberMessage>();\n\n            Channel(x => x.Publisher)\n                .ReadIncoming()\n                .AcceptsMessage<TraceMessage>()\n                .DefaultSerializer<XmlMessageSerializer>();\n\n            Polling.RunJob<SampleJob>().ScheduledAtInterval<HarnessSettings>(x => x.SampleJobTime).RunImmediately();\n\n            AlterSettings<StoreOptions>(_ =>\n            {\n                _.Connection(Environment.GetEnvironmentVariable(\"marten-testing-database\"));\n            });\n        }\n    }\n\n    public class MessagePumper : IDisposable\n    {\n        private readonly IServiceBus _bus;\n        private readonly Timer _timer = new Timer(500);\n\n        public MessagePumper(IServiceBus bus)\n        {\n            _bus = bus;\n        }\n\n        public void Start()\n        {\n            _timer.Elapsed += TimerOnElapsed;\n            _timer.Interval = 1000;\n            _timer.AutoReset = true;\n            _timer.Enabled = true;\n        }\n\n        public void Dispose()\n        {\n            _timer.Dispose();\n        }\n\n        private void TimerOnElapsed(object sender, ElapsedEventArgs elapsedEventArgs)\n        {\n            for (var i = 0; i < 25; i++)\n            {\n                _bus.Send(new TraceMessage());\n            }\n        }\n    }\n\n    public class ErrorHandlingPolicy : HandlerChainPolicy\n    {\n        public override void Configure(HandlerChain chain)\n        {\n            chain.MaximumAttempts = 5;\n            chain.OnException<TimeoutException>().Retry();\n            chain.OnException<DBConcurrencyException>().Retry();\n        }\n    }\n}\n"
  },
  {
    "path": "src/DiagnosticsHarness/HarnessSettings.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus;\n\nnamespace DiagnosticsHarness\n{\n    \n    public class HarnessSettings\n    {\n        public HarnessSettings()\n        {\n            Console.WriteLine(\"Just being different again\");\n\n            //Channel = \"memory://harness\".ToUri();\n            //Publisher = \"memory://publisher\".ToUri();\n\n            //Use this instead if you want to test with LightningQueues\n            Channel = \"lq.tcp://localhost:9998/channel\".ToUri();\n            Publisher = \"lq.tcp://localhost:9999/publisher\".ToUri();\n\n            SampleJobTime = 5000;\n        }\n\n        public Uri Publisher { get; set; }\n\n        public Uri Channel { get; set; }\n\n        public double SampleJobTime { get; set; }\n    }\n}"
  },
  {
    "path": "src/DiagnosticsHarness/HomeEndpoint.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.View;\nusing HtmlTags;\n\nnamespace DiagnosticsHarness\n{\n    public class HomeEndpoint\n    {\n        private readonly IServiceBus _serviceBus;\n        private readonly INumberCache _cache;\n        private readonly FubuHtmlDocument _document;\n        private readonly FubuRuntime _runtime;\n        private readonly MessagePumper _pumper;\n\n        public HomeEndpoint(IServiceBus serviceBus, INumberCache cache, FubuHtmlDocument document, FubuRuntime runtime, MessagePumper pumper)\n        {\n            _serviceBus = serviceBus;\n            _cache = cache;\n            _document = document;\n            _runtime = runtime;\n            _pumper = pumper;\n        }\n\n        public FubuContinuation post_numbers(NumberPost input)\n        {\n            var numbers =\n                input.Numbers.ToDelimitedArray().Select(x => { return new NumberMessage {Value = int.Parse(x)}; });\n\n            numbers.Each(x => _serviceBus.Send<NumberMessage>(x));\n\n            return FubuContinuation.RedirectTo(\"_fubu\");\n\n//            return\n//                FubuContinuation.RedirectTo<FubuMVC.Instrumentation.Features.Instrumentation.InstrumentationFubuDiagnostics>(\n//                    x => x.get_instrumentation(null));\n        }\n\n        public string get_received()\n        {\n            return _cache.Captured.Select(x => x.ToString()).Join(\"\\n\");\n        }\n\n        public FubuContinuation get_pump_messages()\n        {\n            _pumper.Start();\n            return FubuContinuation.RedirectTo(\"/_fubu#/lq\");\n        }\n\n        public HtmlDocument Index()\n        {\n            _document.Title = \"Diagnostics Harness\";\n\n            _document.Add(\"a\").Attr(\"href\", \"/_fubu\").Text(\"Diagnostics\");\n            _document.Add(\"br\");\n\n            _document.Add(\"a\").Attr(\"href\", \"requests\").Text(\"Run some fake Http Requests\");\n            _document.Add(\"br\");\n            _document.Add(\"a\").Attr(\"href\", \"pump/messages\").Text(\"Run a bunch of fake messages to see LQ diagnostics\");\n\n            _document.Add(\"br\");\n            _document.Add(\"a\")\n                .Attr(\"href\", _document.Urls.UrlFor<SampleJobEndpoint>(x => x.get_samplejob_controller()))\n                .Text(\"Sample Polling Job Controller\");\n\n\n            _document.Add(\"hr\");\n            _runtime.Behaviors.Chains.Each(chain =>\n            {\n                _document.Add(\"p\").Text(chain.Title());\n            });\n\n            return _document;\n        }\n\n        public FubuContinuation get_requests()\n        {\n            /*\n            _serviceBus.Send(new NumberMessage{Value = 1});\n            _serviceBus.Send(new NumberMessage{Value = 2});\n            _serviceBus.Send(new NumberMessage{Value = 3});\n            _serviceBus.Send(new NumberMessage{Value = 4});\n            _serviceBus.Send(new NumberMessage{Value = 5});\n            _serviceBus.Send(new NumberMessage{Value = 6});\n            _serviceBus.Send(new NumberMessage{Value = 7});\n            _serviceBus.Send(new NumberMessage{Value = 8});\n            _serviceBus.Send(new NumberMessage{Value = 9});\n            */\n            runRequests();\n            runRequests();\n            runRequests();\n            \n            runRequests();\n            runRequests();\n            runRequests();\n\n\n            return FubuContinuation.RedirectTo(\"_fubu\");\n        }\n\n        private void runRequests()\n        {\n            /*\n            _runtime.Scenario(_ => _.Get.Url(\"hello\"));\n            _runtime.Scenario(_ =>\n            {\n                _.Get.Url(\"failure\");\n                _.IgnoreStatusCode();\n            });\n            _runtime.Scenario(_ => _.Get.Url(\"team/favorite\"));\n            _runtime.Scenario(_ =>\n            {\n                _.Get.Url(\"redirects\");\n                _.StatusCodeShouldBe(302);\n            });\n            */\n\n\n            //_runtime.Scenario(_ => { _.Post.Json(new Team {City = \"Denver\", Mascot = \"Broncos\"}).Accepts(\"*/*\"); });\n\n            \n            //_runtime.Scenario(_ => { _.Delete.Json(new Team {City = \"Denver\", Mascot = \"Broncos\"}).Accepts(\"*/*\"); });\n\n            //_runtime.Scenario(_ => { _.Put.Json(new Team {City = \"Denver\", Mascot = \"Broncos\"}).Accepts(\"*/*\"); });\n            \n\n\n            writeMartenData();\n        }\n\n        private void writeMartenData()\n        {\n            _runtime.Scenario(_ => { _.Post.Action<MartenEndpoint>(x => x.post_marten_writes()); });\n\n            _runtime.Scenario(_ => { _.Get.Action<MartenEndpoint>(x => x.get_marten_reads()); });\n        }\n    }\n}"
  },
  {
    "path": "src/DiagnosticsHarness/HomeModel.cs",
    "content": "﻿namespace DiagnosticsHarness\n{\n    public class HomeModel\n    {\n    }\n}"
  },
  {
    "path": "src/DiagnosticsHarness/INumberCache.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace DiagnosticsHarness\n{\n    public interface INumberCache\n    {\n        void Register(int number);\n\n        IEnumerable<int> Captured { get; }\n    }\n}"
  },
  {
    "path": "src/DiagnosticsHarness/MartenEndpoint.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing Marten;\n\nnamespace DiagnosticsHarness\n{\n    public class MartenEndpoint\n    {\n        private readonly IDocumentSession _session;\n\n        public MartenEndpoint(IDocumentSession session)\n        {\n            _session = session;\n        }\n\n        public string post_marten_writes()\n        {\n            var random = new Random().Next();\n\n            var targets = Target.GenerateRandomData(random);\n            _session.Store(targets.ToArray());\n\n            _session.DeleteWhere<Target>(x => x.Double > 12);\n\n            return \"ok\";\n        }\n\n        public string get_marten_reads()\n        {\n            var count = _session.Query<Target>().Count();\n            return $\"There were {count} targets so far\";\n        }\n    }\n\n    public enum Colors\n    {\n        Red,\n        Blue,\n        Green\n    }\n\n    public class Target\n    {\n        private static Random _random = new Random(67);\n\n        private static string[] _strings = new[]\n        {\"Red\", \"Orange\", \"Yellow\", \"Green\", \"Blue\", \"Purple\", \"Violet\", \"Pink\", \"Gray\", \"Black\"};\n\n        private static string[] _otherStrings = new[]\n            {\"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"ten\"};\n\n        public static IEnumerable<Target> GenerateRandomData(int number)\n        {\n            var i = 0;\n            while (i < number)\n            {\n                yield return Random(true);\n\n                i++;\n            }\n        }\n\n        public static Target Random(bool deep = false)\n        {\n            var target = new Target();\n            target.String = _strings[_random.Next(0, 10)];\n            target.AnotherString = _otherStrings[_random.Next(0, 10)];\n            target.Number = _random.Next();\n\n            target.Float = float.Parse(_random.NextDouble().ToString());\n\n            target.NumberArray = new int[] { _random.Next(0, 10), _random.Next(0, 10), _random.Next(0, 10) };\n\n            switch (_random.Next(0, 2))\n            {\n                case 0:\n                    target.Color = Colors.Blue;\n                    break;\n\n                case 1:\n                    target.Color = Colors.Green;\n                    break;\n\n                default:\n                    target.Color = Colors.Red;\n                    break;\n            }\n\n            target.Long = 100 * _random.Next();\n            target.Double = _random.NextDouble();\n            target.Long = _random.Next() * 10000;\n\n            target.Date = DateTime.Today.AddDays(_random.Next(1, 100));\n\n            if (deep)\n            {\n                target.Inner = Random();\n\n                var number = _random.Next(1, 10);\n                target.Children = new Target[number];\n                for (int i = 0; i < number; i++)\n                {\n                    target.Children[i] = Random();\n                }\n            }\n\n            return target;\n        }\n\n        public Target()\n        {\n            Id = Guid.NewGuid();\n        }\n\n        public Guid Id { get; set; }\n\n        public int Number { get; set; }\n        public long Long { get; set; }\n        public string String { get; set; }\n        public string AnotherString { get; set; }\n\n        public Guid OtherGuid { get; set; }\n\n        public Target Inner { get; set; }\n\n        public Colors Color { get; set; }\n\n        public bool Flag { get; set; }\n\n        public double Double { get; set; }\n        public decimal Decimal { get; set; }\n        public DateTime Date { get; set; }\n        public DateTimeOffset DateOffset { get; set; }\n\n        public float Float;\n\n        public int[] NumberArray { get; set; }\n\n\n\n        public Target[] Children { get; set; }\n\n        public int? NullableNumber { get; set; }\n        public DateTime? NullableDateTime { get; set; }\n        public bool? NullableBoolean { get; set; }\n\n    }\n\n    public class Address\n    {\n        public Address()\n        {\n        }\n\n        public Address(string text)\n        {\n            var parts = text.ToDelimitedArray();\n            Address1 = parts[0];\n            City = parts[1];\n            StateOrProvince = parts[2];\n        }\n\n        public string Address1 { get; set; }\n        public string Address2 { get; set; }\n        public string City { get; set; }\n        public string StateOrProvince { get; set; }\n        public string Country { get; set; }\n        public string PostalCode { get; set; }\n\n        public bool Primary { get; set; }\n    }\n\n    public class ConnectionSource\n    {\n        public static readonly string EnvironmentKey = \"fubumvc.marten.tests\";\n\n        public static void SetConnectionString(string connectionString)\n        {\n            Environment.SetEnvironmentVariable(EnvironmentKey, connectionString);\n        }\n\n        public static string GetConnectionString()\n        {\n            var connectionString = Environment.GetEnvironmentVariable(EnvironmentKey);\n\n            if (connectionString.IsEmpty())\n            {\n                throw new Exception($\"You need to set the Environment variable {EnvironmentKey} to the connection string for your Postgresql schema\");\n            }\n\n            return connectionString;\n        }\n\n    }\n}"
  },
  {
    "path": "src/DiagnosticsHarness/NumberCache.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace DiagnosticsHarness\n{\n    public class NumberCache : INumberCache\n    {\n        private readonly IList<int> _numbers = new List<int>();\n\n        public void Register(int number)\n        {\n            _numbers.Add(number);\n        }\n\n        public IEnumerable<int> Captured\n        {\n            get { return _numbers; }\n        }\n    }\n}"
  },
  {
    "path": "src/DiagnosticsHarness/NumberHandler.cs",
    "content": "﻿using System;\nusing FubuMVC.Core;\n\nnamespace DiagnosticsHarness\n{\n    public class NumberHandler\n    {\n        private readonly INumberCache _cache;\n\n        public NumberHandler(INumberCache cache)\n        {\n            _cache = cache;\n        }\n\n        [WrapWith(typeof (DelayWrapper))]\n        public void Consume(NumberMessage message)\n        {\n            if (message.Value > 100)\n            {\n                throw new ArithmeticException(\"Too big for me!\");\n            }\n\n            _cache.Register(message.Value);\n        }\n    }\n}"
  },
  {
    "path": "src/DiagnosticsHarness/NumberMessage.cs",
    "content": "﻿namespace DiagnosticsHarness\n{\n    public class NumberMessage\n    {\n        public int Value { get; set; }\n    }\n}"
  },
  {
    "path": "src/DiagnosticsHarness/NumberPost.cs",
    "content": "﻿namespace DiagnosticsHarness\n{\n    public class NumberPost\n    {\n        public string Numbers { get; set; }\n    }\n}"
  },
  {
    "path": "src/DiagnosticsHarness/PartialEndpoints.cs",
    "content": "﻿using FubuMVC.Core;\n\nnamespace DiagnosticsHarness\n{\n    public class PartialEndpoints\n    {\n        [FubuPartial]\n        public string Red()\n        {\n            return \"Red\";\n        }\n\n        [FubuPartial]\n        public string Green()\n        {\n            return \"Green\";\n        }\n    }\n}"
  },
  {
    "path": "src/DiagnosticsHarness/SampleJob.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing FubuCore;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.View;\nusing HtmlTags;\n\nnamespace DiagnosticsHarness\n{\n    public class SampleJob : IJob\n    {\n        public static bool WillSucceed = true;\n        public static int Delay = 2;\n\n        public static int ExecutionCount = 0;\n\n        public void Execute(CancellationToken cancellation)\n        {\n            ExecutionCount++;\n\n            if (!WillSucceed) throw new DivideByZeroException(\"You cannot call me\");\n\n            Thread.Sleep(2.Seconds());\n        }\n    }\n\n    public class SampleJobEndpoint\n    {\n        private readonly FubuHtmlDocument _document;\n\n        public SampleJobEndpoint(FubuHtmlDocument document)\n        {\n            _document = document;\n        }\n\n        public HtmlDocument get_samplejob_controller()\n        {\n            _document.Title = \"Sample Job Controller\";\n\n            _document.Add(\"h1\").Text(\"Sample Job Controller\");\n\n            _document.Add(\"p\").Text(\"Has executed {0} times\".ToFormat(SampleJob.ExecutionCount));\n\n            _document.Add(\"p\")\n                .Text(SampleJob.WillSucceed ? \"The job will succeed on execution\" : \"The job fails on execution\");\n            _document.Push(\"form\").Attr(\"action\", _document.Urls.UrlFor<ToggleSampleJob>()).Attr(\"method\", \"POST\");\n            _document.Add(\"input\").Attr(\"type\", \"submit\").Text(\"Toggle the Sample Job Success State\");\n            _document.Pop();\n\n            _document.Add(\"hr\");\n\n            _document.Push(\"form\").Attr(\"action\", _document.Urls.UrlFor<SetSampleJobTime>()).Attr(\"method\", \"POST\");\n            _document.Add(\"input\").Attr(\"type\", \"text\").Value(SampleJob.Delay.ToString()).Name(\"Seconds\");\n            _document.Add(\"input\").Attr(\"type\", \"submit\").Text(\"Set the execution time in seconds\");\n\n\n            return _document;\n        }\n\n        public FubuContinuation post_samplejob_time(SetSampleJobTime time)\n        {\n            SampleJob.Delay = time.Seconds;\n\n            return FubuContinuation.RedirectTo<SampleJobEndpoint>(x => x.get_samplejob_controller());\n        }\n\n        public FubuContinuation post_samplejob_toggle(ToggleSampleJob toggle)\n        {\n            SampleJob.WillSucceed = !SampleJob.WillSucceed;\n\n            return FubuContinuation.RedirectTo<SampleJobEndpoint>(x => x.get_samplejob_controller());\n        }\n    }\n\n    public class ToggleSampleJob { }\n\n    public class SetSampleJobTime\n    {\n        public int Seconds { get; set; }\n    }\n}"
  },
  {
    "path": "src/DiagnosticsHarness/TraceMessage.cs",
    "content": "﻿using System;\nusing FubuMVC.Core;\n\nnamespace DiagnosticsHarness\n{\n    public class TraceMessage\n    {\n        public TraceMessage()\n        {\n            Name = Guid.NewGuid().ToString();\n        }\n\n        public string Name { get; set; } \n    }\n\n    \n    public class TraceHandler\n    {\n        [WrapWith(typeof(DelayWrapper))]\n        public NumberMessage Consume(TraceMessage message)\n        {\n            return new NumberMessage\n            {\n                Value = 100\n            };\n        }\n    }\n}"
  },
  {
    "path": "src/DiagnosticsHarness/app.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Topshelf\" publicKeyToken=\"b800c4cfcdeea87b\" culture=\"neutral\"/>\n        <bindingRedirect oldVersion=\"0.0.0.0-3.1.118.0\" newVersion=\"3.1.118.0\"/>\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.6\"/></startup></configuration>\n"
  },
  {
    "path": "src/DiagnosticsHarness/fubu-diagnostics/lq.js",
    "content": "/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/client/public/javascript/\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!*****************************************!*\\\n  !*** ./javascript/lightning-queues.jsx ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar _ = __webpack_require__(/*! lodash */ 32);\\n\\nvar QueueManager = _react2.default.createClass({\\n    displayName: 'QueueManager',\\n    render: function render() {\\n        var queueRows = this.props.Queues.map(function (q, i) {\\n            var url = \\\"#lq/messages/\\\" + q.Port + \\\"/\\\" + q.QueueName;\\n\\n            return _react2.default.createElement(\\n                'tr',\\n                { key: i },\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    _react2.default.createElement(\\n                        'a',\\n                        { href: url },\\n                        q.QueueName\\n                    )\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    q.Port\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    q.NumberOfMessages\\n                )\\n            );\\n        });\\n\\n        return _react2.default.createElement(\\n            'div',\\n            { key: this.props.Port },\\n            _react2.default.createElement(\\n                'ul',\\n                { style: { float: 'left' } },\\n                _react2.default.createElement(\\n                    'li',\\n                    null,\\n                    'Storage Path: ',\\n                    this.props.Path\\n                ),\\n                _react2.default.createElement(\\n                    'li',\\n                    null,\\n                    'Port: ',\\n                    this.props.Port\\n                )\\n            ),\\n            _react2.default.createElement(\\n                'table',\\n                { className: 'table table-striped', style: { width: 'auto', marginLeft: '25px' } },\\n                _react2.default.createElement(\\n                    'tbody',\\n                    null,\\n                    _react2.default.createElement(\\n                        'tr',\\n                        null,\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'Queue'\\n                        ),\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'Port'\\n                        ),\\n                        _react2.default.createElement(\\n                            'th',\\n                            { style: { textAlign: \\\"right\\\" } },\\n                            'Number of Messages'\\n                        )\\n                    ),\\n                    queueRows\\n                )\\n            ),\\n            _react2.default.createElement('hr', null)\\n        );\\n    }\\n});\\n\\nvar AllQueues = _react2.default.createClass({\\n    displayName: 'AllQueues',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        FubuDiagnostics.get('LightningQueues:queues', {}, function (data) {\\n            _this.setState({ queues: data, loading: false });\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        var managers = this.state.queues.QueueManagers.map(function (qm, i) {\\n            return _react2.default.createElement(QueueManager, _extends({ key: i }, qm));\\n        });\\n\\n        return _react2.default.createElement(\\n            'div',\\n            null,\\n            _react2.default.createElement(\\n                'h2',\\n                null,\\n                'QueueManagers'\\n            ),\\n            _react2.default.createElement('hr', null),\\n            managers\\n        );\\n    }\\n});\\n\\nvar QueueDetails = _react2.default.createClass({\\n    displayName: 'QueueDetails',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this2 = this;\\n\\n        var params = this.props.params;\\n        FubuDiagnostics.get('LightningQueues:messages_Port_QueueName', params, function (data) {\\n            _this2.setState({ loading: false, data: data });\\n        });\\n    },\\n    render: function render() {\\n        var _this3 = this;\\n\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        var rows = this.state.data.Messages.map(function (msg, i) {\\n            // For whatever reason, LQ is sending us two different id's separated by a 'q', so this matches the route\\n            var url = \\\"#lq/message-details/\\\" + _this3.state.data.Port + \\\"/\\\" + _this3.state.data.QueueName + \\\"/\\\" + msg.id;\\n\\n            return _react2.default.createElement(\\n                'tr',\\n                { key: i },\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    _react2.default.createElement(\\n                        'a',\\n                        { href: url },\\n                        msg.id\\n                    )\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    msg.headers['message-type']\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    msg.sentat\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    msg.destination\\n                )\\n            );\\n        });\\n\\n        return _react2.default.createElement(\\n            'div',\\n            null,\\n            _react2.default.createElement(\\n                'p',\\n                null,\\n                _react2.default.createElement(\\n                    'a',\\n                    { href: '#/lq' },\\n                    'Back to LightningQueues...'\\n                )\\n            ),\\n            _react2.default.createElement(\\n                'h1',\\n                null,\\n                'Messages in ',\\n                this.state.data.QueueName,\\n                ' (',\\n                this.state.data.Port,\\n                ') queue'\\n            ),\\n            _react2.default.createElement(\\n                'table',\\n                { className: 'table' },\\n                _react2.default.createElement(\\n                    'tbody',\\n                    null,\\n                    _react2.default.createElement(\\n                        'tr',\\n                        null,\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'Message Id'\\n                        ),\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'Type'\\n                        ),\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'Sent At'\\n                        ),\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'Destination'\\n                        )\\n                    ),\\n                    rows\\n                )\\n            ),\\n            _react2.default.createElement('br', null)\\n        );\\n    }\\n});\\n\\nvar MessageDetails = _react2.default.createClass({\\n    displayName: 'MessageDetails',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this4 = this;\\n\\n        var params = this.props.params;\\n        FubuDiagnostics.get('LightningQueues:message_Port_QueueName_SourceInstanceId_MessageId', params, function (data) {\\n            _this4.setState({ loading: false, data: data });\\n        });\\n    },\\n    render: function render() {\\n        var _this5 = this;\\n\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        if (this.state.data.NotFound) {\\n            return _react2.default.createElement(\\n                'div',\\n                null,\\n                'This message cannot be found'\\n            );\\n        }\\n\\n        var keys = _.keys(this.state.data.Headers);\\n        var headers = keys.map(function (key, i) {\\n            return _react2.default.createElement(\\n                'li',\\n                { key: i },\\n                _react2.default.createElement(\\n                    'b',\\n                    null,\\n                    key\\n                ),\\n                ' = ',\\n                _this5.state.data.Headers[key]\\n            );\\n        });\\n\\n        var queueUrl = \\\"#/lq/messages/\\\" + this.state.data.Port + \\\"/\\\" + this.state.data.QueueName;\\n\\n        return _react2.default.createElement(\\n            'div',\\n            null,\\n            _react2.default.createElement(\\n                'h1',\\n                null,\\n                'Message Id: ',\\n                this.state.data.MessageId.MessageIdentifier\\n            ),\\n            _react2.default.createElement('br', null),\\n            _react2.default.createElement(\\n                'h3',\\n                null,\\n                'Queue: ',\\n                _react2.default.createElement(\\n                    'a',\\n                    { href: queueUrl },\\n                    this.state.data.QueueName\\n                )\\n            ),\\n            _react2.default.createElement(\\n                'h3',\\n                null,\\n                'Sent At: ',\\n                this.state.data.SentAt\\n            ),\\n            _react2.default.createElement('br', null),\\n            _react2.default.createElement(\\n                'h3',\\n                null,\\n                'Headers'\\n            ),\\n            _react2.default.createElement(\\n                'ul',\\n                null,\\n                headers\\n            ),\\n            _react2.default.createElement(\\n                'h3',\\n                null,\\n                'Message Payload'\\n            ),\\n            _react2.default.createElement(\\n                'pre',\\n                null,\\n                this.state.data.Payload\\n            )\\n        );\\n    }\\n});\\n\\nFubuDiagnostics.addSection({\\n    title: 'LightningQueues',\\n    description: 'The active LightningQueues queues in this application',\\n    key: 'lq'\\n}).add({\\n    title: 'LightningQueues',\\n    description: 'The active LightningQueues queues in this application',\\n    key: 'summary',\\n    component: AllQueues\\n}).add({\\n    title: 'Queue Messages',\\n    description: 'Queued Messages',\\n    key: 'messages',\\n    route: 'LightningQueues:messages_Port_QueueName',\\n    component: QueueDetails\\n}).add({\\n    title: 'Message Details',\\n    description: 'Message Details',\\n    key: 'message-details',\\n    route: 'LightningQueues:message_Port_QueueName_SourceInstanceId_MessageId',\\n    component: MessageDetails\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/lightning-queues.jsx\\n// module id = 0\\n// module chunks = 0\\n//# sourceURL=webpack:///./javascript/lightning-queues.jsx?\");\n\n/***/ },\n/* 1 */\n/*!**************************!*\\\n  !*** ./~/react/react.js ***!\n  \\**************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nmodule.exports = __webpack_require__(/*! ./lib/React */ 2);\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/react.js\\n// module id = 1\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/react.js?\");\n\n/***/ },\n/* 2 */\n/*!******************************!*\\\n  !*** ./~/react/lib/React.js ***!\n  \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar ReactChildren = __webpack_require__(/*! ./ReactChildren */ 5);\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 18);\\nvar ReactPureComponent = __webpack_require__(/*! ./ReactPureComponent */ 21);\\nvar ReactClass = __webpack_require__(/*! ./ReactClass */ 22);\\nvar ReactDOMFactories = __webpack_require__(/*! ./ReactDOMFactories */ 24);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\nvar ReactPropTypes = __webpack_require__(/*! ./ReactPropTypes */ 29);\\nvar ReactVersion = __webpack_require__(/*! ./ReactVersion */ 30);\\n\\nvar onlyChild = __webpack_require__(/*! ./onlyChild */ 31);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar createElement = ReactElement.createElement;\\nvar createFactory = ReactElement.createFactory;\\nvar cloneElement = ReactElement.cloneElement;\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  var ReactElementValidator = __webpack_require__(/*! ./ReactElementValidator */ 25);\\n  createElement = ReactElementValidator.createElement;\\n  createFactory = ReactElementValidator.createFactory;\\n  cloneElement = ReactElementValidator.cloneElement;\\n}\\n\\nvar __spread = _assign;\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  var warned = false;\\n  __spread = function () {\\n    process.env.NODE_ENV !== 'production' ? warning(warned, 'React.__spread is deprecated and should not be used. Use ' + 'Object.assign directly or another helper function with similar ' + 'semantics. You may be seeing this warning due to your compiler. ' + 'See https://fb.me/react-spread-deprecation for more details.') : void 0;\\n    warned = true;\\n    return _assign.apply(null, arguments);\\n  };\\n}\\n\\nvar React = {\\n\\n  // Modern\\n\\n  Children: {\\n    map: ReactChildren.map,\\n    forEach: ReactChildren.forEach,\\n    count: ReactChildren.count,\\n    toArray: ReactChildren.toArray,\\n    only: onlyChild\\n  },\\n\\n  Component: ReactComponent,\\n  PureComponent: ReactPureComponent,\\n\\n  createElement: createElement,\\n  cloneElement: cloneElement,\\n  isValidElement: ReactElement.isValidElement,\\n\\n  // Classic\\n\\n  PropTypes: ReactPropTypes,\\n  createClass: ReactClass.createClass,\\n  createFactory: createFactory,\\n  createMixin: function (mixin) {\\n    // Currently a noop. Will be used to validate and trace mixins.\\n    return mixin;\\n  },\\n\\n  // This looks DOM specific but these are actually isomorphic helpers\\n  // since they are just generating DOM strings.\\n  DOM: ReactDOMFactories,\\n\\n  version: ReactVersion,\\n\\n  // Deprecated hook for JSX spread, don't use this for anything.\\n  __spread: __spread\\n};\\n\\nmodule.exports = React;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/React.js\\n// module id = 2\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/React.js?\");\n\n/***/ },\n/* 3 */\n/*!******************************!*\\\n  !*** ./~/process/browser.js ***!\n  \\******************************/\n/***/ function(module, exports) {\n\n\teval(\"// shim for using process in browser\\nvar process = module.exports = {};\\n\\n// cached from whatever global is present so that test runners that stub it\\n// don't break things.  But we need to wrap it in a try catch in case it is\\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\\n// function because try/catches deoptimize in certain engines.\\n\\nvar cachedSetTimeout;\\nvar cachedClearTimeout;\\n\\nfunction defaultSetTimout() {\\n    throw new Error('setTimeout has not been defined');\\n}\\nfunction defaultClearTimeout () {\\n    throw new Error('clearTimeout has not been defined');\\n}\\n(function () {\\n    try {\\n        if (typeof setTimeout === 'function') {\\n            cachedSetTimeout = setTimeout;\\n        } else {\\n            cachedSetTimeout = defaultSetTimout;\\n        }\\n    } catch (e) {\\n        cachedSetTimeout = defaultSetTimout;\\n    }\\n    try {\\n        if (typeof clearTimeout === 'function') {\\n            cachedClearTimeout = clearTimeout;\\n        } else {\\n            cachedClearTimeout = defaultClearTimeout;\\n        }\\n    } catch (e) {\\n        cachedClearTimeout = defaultClearTimeout;\\n    }\\n} ())\\nfunction runTimeout(fun) {\\n    if (cachedSetTimeout === setTimeout) {\\n        //normal enviroments in sane situations\\n        return setTimeout(fun, 0);\\n    }\\n    // if setTimeout wasn't available but was latter defined\\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\\n        cachedSetTimeout = setTimeout;\\n        return setTimeout(fun, 0);\\n    }\\n    try {\\n        // when when somebody has screwed with setTimeout but no I.E. maddness\\n        return cachedSetTimeout(fun, 0);\\n    } catch(e){\\n        try {\\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\\n            return cachedSetTimeout.call(null, fun, 0);\\n        } catch(e){\\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\\n            return cachedSetTimeout.call(this, fun, 0);\\n        }\\n    }\\n\\n\\n}\\nfunction runClearTimeout(marker) {\\n    if (cachedClearTimeout === clearTimeout) {\\n        //normal enviroments in sane situations\\n        return clearTimeout(marker);\\n    }\\n    // if clearTimeout wasn't available but was latter defined\\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\\n        cachedClearTimeout = clearTimeout;\\n        return clearTimeout(marker);\\n    }\\n    try {\\n        // when when somebody has screwed with setTimeout but no I.E. maddness\\n        return cachedClearTimeout(marker);\\n    } catch (e){\\n        try {\\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\\n            return cachedClearTimeout.call(null, marker);\\n        } catch (e){\\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\\n            return cachedClearTimeout.call(this, marker);\\n        }\\n    }\\n\\n\\n\\n}\\nvar queue = [];\\nvar draining = false;\\nvar currentQueue;\\nvar queueIndex = -1;\\n\\nfunction cleanUpNextTick() {\\n    if (!draining || !currentQueue) {\\n        return;\\n    }\\n    draining = false;\\n    if (currentQueue.length) {\\n        queue = currentQueue.concat(queue);\\n    } else {\\n        queueIndex = -1;\\n    }\\n    if (queue.length) {\\n        drainQueue();\\n    }\\n}\\n\\nfunction drainQueue() {\\n    if (draining) {\\n        return;\\n    }\\n    var timeout = runTimeout(cleanUpNextTick);\\n    draining = true;\\n\\n    var len = queue.length;\\n    while(len) {\\n        currentQueue = queue;\\n        queue = [];\\n        while (++queueIndex < len) {\\n            if (currentQueue) {\\n                currentQueue[queueIndex].run();\\n            }\\n        }\\n        queueIndex = -1;\\n        len = queue.length;\\n    }\\n    currentQueue = null;\\n    draining = false;\\n    runClearTimeout(timeout);\\n}\\n\\nprocess.nextTick = function (fun) {\\n    var args = new Array(arguments.length - 1);\\n    if (arguments.length > 1) {\\n        for (var i = 1; i < arguments.length; i++) {\\n            args[i - 1] = arguments[i];\\n        }\\n    }\\n    queue.push(new Item(fun, args));\\n    if (queue.length === 1 && !draining) {\\n        runTimeout(drainQueue);\\n    }\\n};\\n\\n// v8 likes predictible objects\\nfunction Item(fun, array) {\\n    this.fun = fun;\\n    this.array = array;\\n}\\nItem.prototype.run = function () {\\n    this.fun.apply(null, this.array);\\n};\\nprocess.title = 'browser';\\nprocess.browser = true;\\nprocess.env = {};\\nprocess.argv = [];\\nprocess.version = ''; // empty string to avoid regexp issues\\nprocess.versions = {};\\n\\nfunction noop() {}\\n\\nprocess.on = noop;\\nprocess.addListener = noop;\\nprocess.once = noop;\\nprocess.off = noop;\\nprocess.removeListener = noop;\\nprocess.removeAllListeners = noop;\\nprocess.emit = noop;\\n\\nprocess.binding = function (name) {\\n    throw new Error('process.binding is not supported');\\n};\\n\\nprocess.cwd = function () { return '/' };\\nprocess.chdir = function (dir) {\\n    throw new Error('process.chdir is not supported');\\n};\\nprocess.umask = function() { return 0; };\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/process/browser.js\\n// module id = 3\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/process/browser.js?\");\n\n/***/ },\n/* 4 */\n/*!**********************************!*\\\n  !*** ./~/object-assign/index.js ***!\n  \\**********************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n/* eslint-disable no-unused-vars */\\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\\n\\nfunction toObject(val) {\\n\\tif (val === null || val === undefined) {\\n\\t\\tthrow new TypeError('Object.assign cannot be called with null or undefined');\\n\\t}\\n\\n\\treturn Object(val);\\n}\\n\\nfunction shouldUseNative() {\\n\\ttry {\\n\\t\\tif (!Object.assign) {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// Detect buggy property enumeration order in older V8 versions.\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\\n\\t\\tvar test1 = new String('abc');  // eslint-disable-line\\n\\t\\ttest1[5] = 'de';\\n\\t\\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\\n\\t\\tvar test2 = {};\\n\\t\\tfor (var i = 0; i < 10; i++) {\\n\\t\\t\\ttest2['_' + String.fromCharCode(i)] = i;\\n\\t\\t}\\n\\t\\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\\n\\t\\t\\treturn test2[n];\\n\\t\\t});\\n\\t\\tif (order2.join('') !== '0123456789') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\\n\\t\\tvar test3 = {};\\n\\t\\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\\n\\t\\t\\ttest3[letter] = letter;\\n\\t\\t});\\n\\t\\tif (Object.keys(Object.assign({}, test3)).join('') !==\\n\\t\\t\\t\\t'abcdefghijklmnopqrst') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\treturn true;\\n\\t} catch (e) {\\n\\t\\t// We don't expect any of the above to throw, but better to be safe.\\n\\t\\treturn false;\\n\\t}\\n}\\n\\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\\n\\tvar from;\\n\\tvar to = toObject(target);\\n\\tvar symbols;\\n\\n\\tfor (var s = 1; s < arguments.length; s++) {\\n\\t\\tfrom = Object(arguments[s]);\\n\\n\\t\\tfor (var key in from) {\\n\\t\\t\\tif (hasOwnProperty.call(from, key)) {\\n\\t\\t\\t\\tto[key] = from[key];\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tif (Object.getOwnPropertySymbols) {\\n\\t\\t\\tsymbols = Object.getOwnPropertySymbols(from);\\n\\t\\t\\tfor (var i = 0; i < symbols.length; i++) {\\n\\t\\t\\t\\tif (propIsEnumerable.call(from, symbols[i])) {\\n\\t\\t\\t\\t\\tto[symbols[i]] = from[symbols[i]];\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\treturn to;\\n};\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/object-assign/index.js\\n// module id = 4\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/object-assign/index.js?\");\n\n/***/ },\n/* 5 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/ReactChildren.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 6);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\n\\nvar emptyFunction = __webpack_require__(/*! fbjs/lib/emptyFunction */ 12);\\nvar traverseAllChildren = __webpack_require__(/*! ./traverseAllChildren */ 15);\\n\\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\\nvar fourArgumentPooler = PooledClass.fourArgumentPooler;\\n\\nvar userProvidedKeyEscapeRegex = /\\\\/+/g;\\nfunction escapeUserProvidedKey(text) {\\n  return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\\n}\\n\\n/**\\n * PooledClass representing the bookkeeping associated with performing a child\\n * traversal. Allows avoiding binding callbacks.\\n *\\n * @constructor ForEachBookKeeping\\n * @param {!function} forEachFunction Function to perform traversal with.\\n * @param {?*} forEachContext Context to perform context with.\\n */\\nfunction ForEachBookKeeping(forEachFunction, forEachContext) {\\n  this.func = forEachFunction;\\n  this.context = forEachContext;\\n  this.count = 0;\\n}\\nForEachBookKeeping.prototype.destructor = function () {\\n  this.func = null;\\n  this.context = null;\\n  this.count = 0;\\n};\\nPooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);\\n\\nfunction forEachSingleChild(bookKeeping, child, name) {\\n  var func = bookKeeping.func,\\n      context = bookKeeping.context;\\n\\n  func.call(context, child, bookKeeping.count++);\\n}\\n\\n/**\\n * Iterates through children that are typically specified as `props.children`.\\n *\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.foreach\\n *\\n * The provided forEachFunc(child, index) will be called for each\\n * leaf child.\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} forEachFunc\\n * @param {*} forEachContext Context for forEachContext.\\n */\\nfunction forEachChildren(children, forEachFunc, forEachContext) {\\n  if (children == null) {\\n    return children;\\n  }\\n  var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);\\n  traverseAllChildren(children, forEachSingleChild, traverseContext);\\n  ForEachBookKeeping.release(traverseContext);\\n}\\n\\n/**\\n * PooledClass representing the bookkeeping associated with performing a child\\n * mapping. Allows avoiding binding callbacks.\\n *\\n * @constructor MapBookKeeping\\n * @param {!*} mapResult Object containing the ordered map of results.\\n * @param {!function} mapFunction Function to perform mapping with.\\n * @param {?*} mapContext Context to perform mapping with.\\n */\\nfunction MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) {\\n  this.result = mapResult;\\n  this.keyPrefix = keyPrefix;\\n  this.func = mapFunction;\\n  this.context = mapContext;\\n  this.count = 0;\\n}\\nMapBookKeeping.prototype.destructor = function () {\\n  this.result = null;\\n  this.keyPrefix = null;\\n  this.func = null;\\n  this.context = null;\\n  this.count = 0;\\n};\\nPooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler);\\n\\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\\n  var result = bookKeeping.result,\\n      keyPrefix = bookKeeping.keyPrefix,\\n      func = bookKeeping.func,\\n      context = bookKeeping.context;\\n\\n\\n  var mappedChild = func.call(context, child, bookKeeping.count++);\\n  if (Array.isArray(mappedChild)) {\\n    mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);\\n  } else if (mappedChild != null) {\\n    if (ReactElement.isValidElement(mappedChild)) {\\n      mappedChild = ReactElement.cloneAndReplaceKey(mappedChild,\\n      // Keep both the (mapped) and old keys if they differ, just as\\n      // traverseAllChildren used to do for objects as children\\n      keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\\n    }\\n    result.push(mappedChild);\\n  }\\n}\\n\\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\\n  var escapedPrefix = '';\\n  if (prefix != null) {\\n    escapedPrefix = escapeUserProvidedKey(prefix) + '/';\\n  }\\n  var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context);\\n  traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\\n  MapBookKeeping.release(traverseContext);\\n}\\n\\n/**\\n * Maps children that are typically specified as `props.children`.\\n *\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.map\\n *\\n * The provided mapFunction(child, key, index) will be called for each\\n * leaf child.\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} func The map function.\\n * @param {*} context Context for mapFunction.\\n * @return {object} Object containing the ordered map of results.\\n */\\nfunction mapChildren(children, func, context) {\\n  if (children == null) {\\n    return children;\\n  }\\n  var result = [];\\n  mapIntoWithKeyPrefixInternal(children, result, null, func, context);\\n  return result;\\n}\\n\\nfunction forEachSingleChildDummy(traverseContext, child, name) {\\n  return null;\\n}\\n\\n/**\\n * Count the number of children that are typically specified as\\n * `props.children`.\\n *\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.count\\n *\\n * @param {?*} children Children tree container.\\n * @return {number} The number of children.\\n */\\nfunction countChildren(children, context) {\\n  return traverseAllChildren(children, forEachSingleChildDummy, null);\\n}\\n\\n/**\\n * Flatten a children object (typically specified as `props.children`) and\\n * return an array with appropriately re-keyed children.\\n *\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.toarray\\n */\\nfunction toArray(children) {\\n  var result = [];\\n  mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);\\n  return result;\\n}\\n\\nvar ReactChildren = {\\n  forEach: forEachChildren,\\n  map: mapChildren,\\n  mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal,\\n  count: countChildren,\\n  toArray: toArray\\n};\\n\\nmodule.exports = ReactChildren;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactChildren.js\\n// module id = 5\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactChildren.js?\");\n\n/***/ },\n/* 6 */\n/*!************************************!*\\\n  !*** ./~/react/lib/PooledClass.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\n/**\\n * Static poolers. Several custom versions for each potential number of\\n * arguments. A completely generic pooler is easy to implement, but would\\n * require accessing the `arguments` object. In each of these, `this` refers to\\n * the Class itself, not an instance. If any others are needed, simply add them\\n * here, or in their own files.\\n */\\nvar oneArgumentPooler = function (copyFieldsFrom) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, copyFieldsFrom);\\n    return instance;\\n  } else {\\n    return new Klass(copyFieldsFrom);\\n  }\\n};\\n\\nvar twoArgumentPooler = function (a1, a2) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2);\\n  }\\n};\\n\\nvar threeArgumentPooler = function (a1, a2, a3) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2, a3);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2, a3);\\n  }\\n};\\n\\nvar fourArgumentPooler = function (a1, a2, a3, a4) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2, a3, a4);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2, a3, a4);\\n  }\\n};\\n\\nvar fiveArgumentPooler = function (a1, a2, a3, a4, a5) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2, a3, a4, a5);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2, a3, a4, a5);\\n  }\\n};\\n\\nvar standardReleaser = function (instance) {\\n  var Klass = this;\\n  !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;\\n  instance.destructor();\\n  if (Klass.instancePool.length < Klass.poolSize) {\\n    Klass.instancePool.push(instance);\\n  }\\n};\\n\\nvar DEFAULT_POOL_SIZE = 10;\\nvar DEFAULT_POOLER = oneArgumentPooler;\\n\\n/**\\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\\n * you give this may have a `poolSize` property, and will look for a\\n * prototypical `destructor` on instances.\\n *\\n * @param {Function} CopyConstructor Constructor that can be used to reset.\\n * @param {Function} pooler Customizable pooler.\\n */\\nvar addPoolingTo = function (CopyConstructor, pooler) {\\n  // Casting as any so that flow ignores the actual implementation and trusts\\n  // it to match the type we declared\\n  var NewKlass = CopyConstructor;\\n  NewKlass.instancePool = [];\\n  NewKlass.getPooled = pooler || DEFAULT_POOLER;\\n  if (!NewKlass.poolSize) {\\n    NewKlass.poolSize = DEFAULT_POOL_SIZE;\\n  }\\n  NewKlass.release = standardReleaser;\\n  return NewKlass;\\n};\\n\\nvar PooledClass = {\\n  addPoolingTo: addPoolingTo,\\n  oneArgumentPooler: oneArgumentPooler,\\n  twoArgumentPooler: twoArgumentPooler,\\n  threeArgumentPooler: threeArgumentPooler,\\n  fourArgumentPooler: fourArgumentPooler,\\n  fiveArgumentPooler: fiveArgumentPooler\\n};\\n\\nmodule.exports = PooledClass;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/PooledClass.js\\n// module id = 6\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/PooledClass.js?\");\n\n/***/ },\n/* 7 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/reactProdInvariant.js ***!\n  \\*******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n'use strict';\\n\\n/**\\n * WARNING: DO NOT manually require this module.\\n * This is a replacement for `invariant(...)` used by the error code system\\n * and will _only_ be required by the corresponding babel pass.\\n * It always throws.\\n */\\n\\nfunction reactProdInvariant(code) {\\n  var argCount = arguments.length - 1;\\n\\n  var message = 'Minified React error #' + code + '; visit ' + 'http://facebook.github.io/react/docs/error-decoder.html?invariant=' + code;\\n\\n  for (var argIdx = 0; argIdx < argCount; argIdx++) {\\n    message += '&args[]=' + encodeURIComponent(arguments[argIdx + 1]);\\n  }\\n\\n  message += ' for the full message or use the non-minified dev environment' + ' for full errors and additional helpful warnings.';\\n\\n  var error = new Error(message);\\n  error.name = 'Invariant Violation';\\n  error.framesToPop = 1; // we don't care about reactProdInvariant's own frame\\n\\n  throw error;\\n}\\n\\nmodule.exports = reactProdInvariant;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/reactProdInvariant.js\\n// module id = 7\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/reactProdInvariant.js?\");\n\n/***/ },\n/* 8 */\n/*!*********************************!*\\\n  !*** ./~/fbjs/lib/invariant.js ***!\n  \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\n/**\\n * Use invariant() to assert state which your program assumes to be true.\\n *\\n * Provide sprintf-style format (only %s is supported) and arguments\\n * to provide information about what broke and what you were\\n * expecting.\\n *\\n * The invariant message will be stripped in production, but the invariant\\n * will remain to ensure logic does not differ in production.\\n */\\n\\nfunction invariant(condition, format, a, b, c, d, e, f) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    if (format === undefined) {\\n      throw new Error('invariant requires an error message argument');\\n    }\\n  }\\n\\n  if (!condition) {\\n    var error;\\n    if (format === undefined) {\\n      error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\\n    } else {\\n      var args = [a, b, c, d, e, f];\\n      var argIndex = 0;\\n      error = new Error(format.replace(/%s/g, function () {\\n        return args[argIndex++];\\n      }));\\n      error.name = 'Invariant Violation';\\n    }\\n\\n    error.framesToPop = 1; // we don't care about invariant's own frame\\n    throw error;\\n  }\\n}\\n\\nmodule.exports = invariant;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/invariant.js\\n// module id = 8\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/fbjs/lib/invariant.js?\");\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/ReactElement.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 10);\\n\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\nvar canDefineProperty = __webpack_require__(/*! ./canDefineProperty */ 13);\\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\\n\\nvar REACT_ELEMENT_TYPE = __webpack_require__(/*! ./ReactElementSymbol */ 14);\\n\\nvar RESERVED_PROPS = {\\n  key: true,\\n  ref: true,\\n  __self: true,\\n  __source: true\\n};\\n\\nvar specialPropKeyWarningShown, specialPropRefWarningShown;\\n\\nfunction hasValidRef(config) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    if (hasOwnProperty.call(config, 'ref')) {\\n      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\\n      if (getter && getter.isReactWarning) {\\n        return false;\\n      }\\n    }\\n  }\\n  return config.ref !== undefined;\\n}\\n\\nfunction hasValidKey(config) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    if (hasOwnProperty.call(config, 'key')) {\\n      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\\n      if (getter && getter.isReactWarning) {\\n        return false;\\n      }\\n    }\\n  }\\n  return config.key !== undefined;\\n}\\n\\nfunction defineKeyPropWarningGetter(props, displayName) {\\n  var warnAboutAccessingKey = function () {\\n    if (!specialPropKeyWarningShown) {\\n      specialPropKeyWarningShown = true;\\n      process.env.NODE_ENV !== 'production' ? warning(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;\\n    }\\n  };\\n  warnAboutAccessingKey.isReactWarning = true;\\n  Object.defineProperty(props, 'key', {\\n    get: warnAboutAccessingKey,\\n    configurable: true\\n  });\\n}\\n\\nfunction defineRefPropWarningGetter(props, displayName) {\\n  var warnAboutAccessingRef = function () {\\n    if (!specialPropRefWarningShown) {\\n      specialPropRefWarningShown = true;\\n      process.env.NODE_ENV !== 'production' ? warning(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;\\n    }\\n  };\\n  warnAboutAccessingRef.isReactWarning = true;\\n  Object.defineProperty(props, 'ref', {\\n    get: warnAboutAccessingRef,\\n    configurable: true\\n  });\\n}\\n\\n/**\\n * Factory method to create a new React element. This no longer adheres to\\n * the class pattern, so do not use new to call it. Also, no instanceof check\\n * will work. Instead test $$typeof field against Symbol.for('react.element') to check\\n * if something is a React Element.\\n *\\n * @param {*} type\\n * @param {*} key\\n * @param {string|object} ref\\n * @param {*} self A *temporary* helper to detect places where `this` is\\n * different from the `owner` when React.createElement is called, so that we\\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\\n * functions, and as long as `this` and owner are the same, there will be no\\n * change in behavior.\\n * @param {*} source An annotation object (added by a transpiler or otherwise)\\n * indicating filename, line number, and/or other information.\\n * @param {*} owner\\n * @param {*} props\\n * @internal\\n */\\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\\n  var element = {\\n    // This tag allow us to uniquely identify this as a React Element\\n    $$typeof: REACT_ELEMENT_TYPE,\\n\\n    // Built-in properties that belong on the element\\n    type: type,\\n    key: key,\\n    ref: ref,\\n    props: props,\\n\\n    // Record the component responsible for creating this element.\\n    _owner: owner\\n  };\\n\\n  if (process.env.NODE_ENV !== 'production') {\\n    // The validation flag is currently mutative. We put it on\\n    // an external backing store so that we can freeze the whole object.\\n    // This can be replaced with a WeakMap once they are implemented in\\n    // commonly used development environments.\\n    element._store = {};\\n\\n    // To make comparing ReactElements easier for testing purposes, we make\\n    // the validation flag non-enumerable (where possible, which should\\n    // include every environment we run tests in), so the test framework\\n    // ignores it.\\n    if (canDefineProperty) {\\n      Object.defineProperty(element._store, 'validated', {\\n        configurable: false,\\n        enumerable: false,\\n        writable: true,\\n        value: false\\n      });\\n      // self and source are DEV only properties.\\n      Object.defineProperty(element, '_self', {\\n        configurable: false,\\n        enumerable: false,\\n        writable: false,\\n        value: self\\n      });\\n      // Two elements created in two different places should be considered\\n      // equal for testing purposes and therefore we hide it from enumeration.\\n      Object.defineProperty(element, '_source', {\\n        configurable: false,\\n        enumerable: false,\\n        writable: false,\\n        value: source\\n      });\\n    } else {\\n      element._store.validated = false;\\n      element._self = self;\\n      element._source = source;\\n    }\\n    if (Object.freeze) {\\n      Object.freeze(element.props);\\n      Object.freeze(element);\\n    }\\n  }\\n\\n  return element;\\n};\\n\\n/**\\n * Create and return a new ReactElement of the given type.\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createelement\\n */\\nReactElement.createElement = function (type, config, children) {\\n  var propName;\\n\\n  // Reserved names are extracted\\n  var props = {};\\n\\n  var key = null;\\n  var ref = null;\\n  var self = null;\\n  var source = null;\\n\\n  if (config != null) {\\n    if (hasValidRef(config)) {\\n      ref = config.ref;\\n    }\\n    if (hasValidKey(config)) {\\n      key = '' + config.key;\\n    }\\n\\n    self = config.__self === undefined ? null : config.__self;\\n    source = config.__source === undefined ? null : config.__source;\\n    // Remaining properties are added to a new props object\\n    for (propName in config) {\\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\\n        props[propName] = config[propName];\\n      }\\n    }\\n  }\\n\\n  // Children can be more than one argument, and those are transferred onto\\n  // the newly allocated props object.\\n  var childrenLength = arguments.length - 2;\\n  if (childrenLength === 1) {\\n    props.children = children;\\n  } else if (childrenLength > 1) {\\n    var childArray = Array(childrenLength);\\n    for (var i = 0; i < childrenLength; i++) {\\n      childArray[i] = arguments[i + 2];\\n    }\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (Object.freeze) {\\n        Object.freeze(childArray);\\n      }\\n    }\\n    props.children = childArray;\\n  }\\n\\n  // Resolve default props\\n  if (type && type.defaultProps) {\\n    var defaultProps = type.defaultProps;\\n    for (propName in defaultProps) {\\n      if (props[propName] === undefined) {\\n        props[propName] = defaultProps[propName];\\n      }\\n    }\\n  }\\n  if (process.env.NODE_ENV !== 'production') {\\n    if (key || ref) {\\n      if (typeof props.$$typeof === 'undefined' || props.$$typeof !== REACT_ELEMENT_TYPE) {\\n        var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\\n        if (key) {\\n          defineKeyPropWarningGetter(props, displayName);\\n        }\\n        if (ref) {\\n          defineRefPropWarningGetter(props, displayName);\\n        }\\n      }\\n    }\\n  }\\n  return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\\n};\\n\\n/**\\n * Return a function that produces ReactElements of a given type.\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createfactory\\n */\\nReactElement.createFactory = function (type) {\\n  var factory = ReactElement.createElement.bind(null, type);\\n  // Expose the type on the factory and the prototype so that it can be\\n  // easily accessed on elements. E.g. `<Foo />.type === Foo`.\\n  // This should not be named `constructor` since this may not be the function\\n  // that created the element, and it may not even be a constructor.\\n  // Legacy hook TODO: Warn if this is accessed\\n  factory.type = type;\\n  return factory;\\n};\\n\\nReactElement.cloneAndReplaceKey = function (oldElement, newKey) {\\n  var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\\n\\n  return newElement;\\n};\\n\\n/**\\n * Clone and return a new ReactElement using element as the starting point.\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.cloneelement\\n */\\nReactElement.cloneElement = function (element, config, children) {\\n  var propName;\\n\\n  // Original props are copied\\n  var props = _assign({}, element.props);\\n\\n  // Reserved names are extracted\\n  var key = element.key;\\n  var ref = element.ref;\\n  // Self is preserved since the owner is preserved.\\n  var self = element._self;\\n  // Source is preserved since cloneElement is unlikely to be targeted by a\\n  // transpiler, and the original source is probably a better indicator of the\\n  // true owner.\\n  var source = element._source;\\n\\n  // Owner will be preserved, unless ref is overridden\\n  var owner = element._owner;\\n\\n  if (config != null) {\\n    if (hasValidRef(config)) {\\n      // Silently steal the ref from the parent.\\n      ref = config.ref;\\n      owner = ReactCurrentOwner.current;\\n    }\\n    if (hasValidKey(config)) {\\n      key = '' + config.key;\\n    }\\n\\n    // Remaining properties override existing props\\n    var defaultProps;\\n    if (element.type && element.type.defaultProps) {\\n      defaultProps = element.type.defaultProps;\\n    }\\n    for (propName in config) {\\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\\n        if (config[propName] === undefined && defaultProps !== undefined) {\\n          // Resolve default props\\n          props[propName] = defaultProps[propName];\\n        } else {\\n          props[propName] = config[propName];\\n        }\\n      }\\n    }\\n  }\\n\\n  // Children can be more than one argument, and those are transferred onto\\n  // the newly allocated props object.\\n  var childrenLength = arguments.length - 2;\\n  if (childrenLength === 1) {\\n    props.children = children;\\n  } else if (childrenLength > 1) {\\n    var childArray = Array(childrenLength);\\n    for (var i = 0; i < childrenLength; i++) {\\n      childArray[i] = arguments[i + 2];\\n    }\\n    props.children = childArray;\\n  }\\n\\n  return ReactElement(element.type, key, ref, self, source, owner, props);\\n};\\n\\n/**\\n * Verifies the object is a ReactElement.\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.isvalidelement\\n * @param {?object} object\\n * @return {boolean} True if `object` is a valid component.\\n * @final\\n */\\nReactElement.isValidElement = function (object) {\\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\\n};\\n\\nmodule.exports = ReactElement;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactElement.js\\n// module id = 9\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactElement.js?\");\n\n/***/ },\n/* 10 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/ReactCurrentOwner.js ***!\n  \\******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n/**\\n * Keeps track of the current owner.\\n *\\n * The current owner is the component who should own any components that are\\n * currently being constructed.\\n */\\nvar ReactCurrentOwner = {\\n\\n  /**\\n   * @internal\\n   * @type {ReactComponent}\\n   */\\n  current: null\\n\\n};\\n\\nmodule.exports = ReactCurrentOwner;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactCurrentOwner.js\\n// module id = 10\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactCurrentOwner.js?\");\n\n/***/ },\n/* 11 */\n/*!*******************************!*\\\n  !*** ./~/fbjs/lib/warning.js ***!\n  \\*******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014-2015, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\n\\n/**\\n * Similar to invariant but only logs a warning if the condition is not met.\\n * This can be used to log issues in development environments in critical\\n * paths. Removing the logging code for production environments will keep the\\n * same logic and follow the same code paths.\\n */\\n\\nvar warning = emptyFunction;\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  (function () {\\n    var printWarning = function printWarning(format) {\\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\\n        args[_key - 1] = arguments[_key];\\n      }\\n\\n      var argIndex = 0;\\n      var message = 'Warning: ' + format.replace(/%s/g, function () {\\n        return args[argIndex++];\\n      });\\n      if (typeof console !== 'undefined') {\\n        console.error(message);\\n      }\\n      try {\\n        // --- Welcome to debugging React ---\\n        // This error was thrown as a convenience so that you can use this stack\\n        // to find the callsite that caused this warning to fire.\\n        throw new Error(message);\\n      } catch (x) {}\\n    };\\n\\n    warning = function warning(condition, format) {\\n      if (format === undefined) {\\n        throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\\n      }\\n\\n      if (format.indexOf('Failed Composite propType: ') === 0) {\\n        return; // Ignore CompositeComponent proptype check.\\n      }\\n\\n      if (!condition) {\\n        for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\\n          args[_key2 - 2] = arguments[_key2];\\n        }\\n\\n        printWarning.apply(undefined, [format].concat(args));\\n      }\\n    };\\n  })();\\n}\\n\\nmodule.exports = warning;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/warning.js\\n// module id = 11\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/fbjs/lib/warning.js?\");\n\n/***/ },\n/* 12 */\n/*!*************************************!*\\\n  !*** ./~/fbjs/lib/emptyFunction.js ***!\n  \\*************************************/\n/***/ function(module, exports) {\n\n\teval(\"\\\"use strict\\\";\\n\\n/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\nfunction makeEmptyFunction(arg) {\\n  return function () {\\n    return arg;\\n  };\\n}\\n\\n/**\\n * This function accepts and discards inputs; it has no side effects. This is\\n * primarily useful idiomatically for overridable function endpoints which\\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\\n */\\nvar emptyFunction = function emptyFunction() {};\\n\\nemptyFunction.thatReturns = makeEmptyFunction;\\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\\nemptyFunction.thatReturnsThis = function () {\\n  return this;\\n};\\nemptyFunction.thatReturnsArgument = function (arg) {\\n  return arg;\\n};\\n\\nmodule.exports = emptyFunction;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/emptyFunction.js\\n// module id = 12\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/fbjs/lib/emptyFunction.js?\");\n\n/***/ },\n/* 13 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/canDefineProperty.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar canDefineProperty = false;\\nif (process.env.NODE_ENV !== 'production') {\\n  try {\\n    // $FlowFixMe https://github.com/facebook/flow/issues/285\\n    Object.defineProperty({}, 'x', { get: function () {} });\\n    canDefineProperty = true;\\n  } catch (x) {\\n    // IE will fail on defineProperty\\n  }\\n}\\n\\nmodule.exports = canDefineProperty;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/canDefineProperty.js\\n// module id = 13\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/canDefineProperty.js?\");\n\n/***/ },\n/* 14 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/ReactElementSymbol.js ***!\n  \\*******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2014-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n// The Symbol used to tag the ReactElement type. If there is no native Symbol\\n// nor polyfill, then a plain number is used for performance.\\n\\nvar REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;\\n\\nmodule.exports = REACT_ELEMENT_TYPE;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactElementSymbol.js\\n// module id = 14\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactElementSymbol.js?\");\n\n/***/ },\n/* 15 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/traverseAllChildren.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 10);\\nvar REACT_ELEMENT_TYPE = __webpack_require__(/*! ./ReactElementSymbol */ 14);\\n\\nvar getIteratorFn = __webpack_require__(/*! ./getIteratorFn */ 16);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar KeyEscapeUtils = __webpack_require__(/*! ./KeyEscapeUtils */ 17);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar SEPARATOR = '.';\\nvar SUBSEPARATOR = ':';\\n\\n/**\\n * This is inlined from ReactElement since this file is shared between\\n * isomorphic and renderers. We could extract this to a\\n *\\n */\\n\\n/**\\n * TODO: Test that a single child and an array with one item have the same key\\n * pattern.\\n */\\n\\nvar didWarnAboutMaps = false;\\n\\n/**\\n * Generate a key string that identifies a component within a set.\\n *\\n * @param {*} component A component that could contain a manual key.\\n * @param {number} index Index that is used if a manual key is not provided.\\n * @return {string}\\n */\\nfunction getComponentKey(component, index) {\\n  // Do some typechecking here since we call this blindly. We want to ensure\\n  // that we don't block potential future ES APIs.\\n  if (component && typeof component === 'object' && component.key != null) {\\n    // Explicit key\\n    return KeyEscapeUtils.escape(component.key);\\n  }\\n  // Implicit key determined by the index in the set\\n  return index.toString(36);\\n}\\n\\n/**\\n * @param {?*} children Children tree container.\\n * @param {!string} nameSoFar Name of the key path so far.\\n * @param {!function} callback Callback to invoke with each child found.\\n * @param {?*} traverseContext Used to pass information throughout the traversal\\n * process.\\n * @return {!number} The number of children in this subtree.\\n */\\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\\n  var type = typeof children;\\n\\n  if (type === 'undefined' || type === 'boolean') {\\n    // All of the above are perceived as null.\\n    children = null;\\n  }\\n\\n  if (children === null || type === 'string' || type === 'number' ||\\n  // The following is inlined from ReactElement. This means we can optimize\\n  // some checks. React Fiber also inlines this logic for similar purposes.\\n  type === 'object' && children.$$typeof === REACT_ELEMENT_TYPE) {\\n    callback(traverseContext, children,\\n    // If it's the only child, treat the name as if it was wrapped in an array\\n    // so that it's consistent if the number of children grows.\\n    nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\\n    return 1;\\n  }\\n\\n  var child;\\n  var nextName;\\n  var subtreeCount = 0; // Count of children found in the current subtree.\\n  var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\\n\\n  if (Array.isArray(children)) {\\n    for (var i = 0; i < children.length; i++) {\\n      child = children[i];\\n      nextName = nextNamePrefix + getComponentKey(child, i);\\n      subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\\n    }\\n  } else {\\n    var iteratorFn = getIteratorFn(children);\\n    if (iteratorFn) {\\n      var iterator = iteratorFn.call(children);\\n      var step;\\n      if (iteratorFn !== children.entries) {\\n        var ii = 0;\\n        while (!(step = iterator.next()).done) {\\n          child = step.value;\\n          nextName = nextNamePrefix + getComponentKey(child, ii++);\\n          subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\\n        }\\n      } else {\\n        if (process.env.NODE_ENV !== 'production') {\\n          var mapsAsChildrenAddendum = '';\\n          if (ReactCurrentOwner.current) {\\n            var mapsAsChildrenOwnerName = ReactCurrentOwner.current.getName();\\n            if (mapsAsChildrenOwnerName) {\\n              mapsAsChildrenAddendum = ' Check the render method of `' + mapsAsChildrenOwnerName + '`.';\\n            }\\n          }\\n          process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.%s', mapsAsChildrenAddendum) : void 0;\\n          didWarnAboutMaps = true;\\n        }\\n        // Iterator will provide entry [k,v] tuples rather than values.\\n        while (!(step = iterator.next()).done) {\\n          var entry = step.value;\\n          if (entry) {\\n            child = entry[1];\\n            nextName = nextNamePrefix + KeyEscapeUtils.escape(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);\\n            subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\\n          }\\n        }\\n      }\\n    } else if (type === 'object') {\\n      var addendum = '';\\n      if (process.env.NODE_ENV !== 'production') {\\n        addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';\\n        if (children._isReactElement) {\\n          addendum = ' It looks like you\\\\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';\\n        }\\n        if (ReactCurrentOwner.current) {\\n          var name = ReactCurrentOwner.current.getName();\\n          if (name) {\\n            addendum += ' Check the render method of `' + name + '`.';\\n          }\\n        }\\n      }\\n      var childrenString = String(children);\\n       true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : _prodInvariant('31', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : void 0;\\n    }\\n  }\\n\\n  return subtreeCount;\\n}\\n\\n/**\\n * Traverses children that are typically specified as `props.children`, but\\n * might also be specified through attributes:\\n *\\n * - `traverseAllChildren(this.props.children, ...)`\\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\\n *\\n * The `traverseContext` is an optional argument that is passed through the\\n * entire traversal. It can be used to store accumulations or anything else that\\n * the callback might find relevant.\\n *\\n * @param {?*} children Children tree object.\\n * @param {!function} callback To invoke upon traversing each child.\\n * @param {?*} traverseContext Context for traversal.\\n * @return {!number} The number of children in this subtree.\\n */\\nfunction traverseAllChildren(children, callback, traverseContext) {\\n  if (children == null) {\\n    return 0;\\n  }\\n\\n  return traverseAllChildrenImpl(children, '', callback, traverseContext);\\n}\\n\\nmodule.exports = traverseAllChildren;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/traverseAllChildren.js\\n// module id = 15\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/traverseAllChildren.js?\");\n\n/***/ },\n/* 16 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/getIteratorFn.js ***!\n  \\**************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n/* global Symbol */\\n\\nvar ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\\nvar FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\\n\\n/**\\n * Returns the iterator method function contained on the iterable object.\\n *\\n * Be sure to invoke the function with the iterable as context:\\n *\\n *     var iteratorFn = getIteratorFn(myIterable);\\n *     if (iteratorFn) {\\n *       var iterator = iteratorFn.call(myIterable);\\n *       ...\\n *     }\\n *\\n * @param {?object} maybeIterable\\n * @return {?function}\\n */\\nfunction getIteratorFn(maybeIterable) {\\n  var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\\n  if (typeof iteratorFn === 'function') {\\n    return iteratorFn;\\n  }\\n}\\n\\nmodule.exports = getIteratorFn;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/getIteratorFn.js\\n// module id = 16\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/getIteratorFn.js?\");\n\n/***/ },\n/* 17 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/KeyEscapeUtils.js ***!\n  \\***************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n/**\\n * Escape and wrap key so it is safe to use as a reactid\\n *\\n * @param {string} key to be escaped.\\n * @return {string} the escaped key.\\n */\\n\\nfunction escape(key) {\\n  var escapeRegex = /[=:]/g;\\n  var escaperLookup = {\\n    '=': '=0',\\n    ':': '=2'\\n  };\\n  var escapedString = ('' + key).replace(escapeRegex, function (match) {\\n    return escaperLookup[match];\\n  });\\n\\n  return '$' + escapedString;\\n}\\n\\n/**\\n * Unescape and unwrap key for human-readable display\\n *\\n * @param {string} key to unescape.\\n * @return {string} the unescaped key.\\n */\\nfunction unescape(key) {\\n  var unescapeRegex = /(=0|=2)/g;\\n  var unescaperLookup = {\\n    '=0': '=',\\n    '=2': ':'\\n  };\\n  var keySubstring = key[0] === '.' && key[1] === '$' ? key.substring(2) : key.substring(1);\\n\\n  return ('' + keySubstring).replace(unescapeRegex, function (match) {\\n    return unescaperLookup[match];\\n  });\\n}\\n\\nvar KeyEscapeUtils = {\\n  escape: escape,\\n  unescape: unescape\\n};\\n\\nmodule.exports = KeyEscapeUtils;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/KeyEscapeUtils.js\\n// module id = 17\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/KeyEscapeUtils.js?\");\n\n/***/ },\n/* 18 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactComponent.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar ReactNoopUpdateQueue = __webpack_require__(/*! ./ReactNoopUpdateQueue */ 19);\\n\\nvar canDefineProperty = __webpack_require__(/*! ./canDefineProperty */ 13);\\nvar emptyObject = __webpack_require__(/*! fbjs/lib/emptyObject */ 20);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\n/**\\n * Base class helpers for the updating state of a component.\\n */\\nfunction ReactComponent(props, context, updater) {\\n  this.props = props;\\n  this.context = context;\\n  this.refs = emptyObject;\\n  // We initialize the default updater but the real one gets injected by the\\n  // renderer.\\n  this.updater = updater || ReactNoopUpdateQueue;\\n}\\n\\nReactComponent.prototype.isReactComponent = {};\\n\\n/**\\n * Sets a subset of the state. Always use this to mutate\\n * state. You should treat `this.state` as immutable.\\n *\\n * There is no guarantee that `this.state` will be immediately updated, so\\n * accessing `this.state` after calling this method may return the old value.\\n *\\n * There is no guarantee that calls to `setState` will run synchronously,\\n * as they may eventually be batched together.  You can provide an optional\\n * callback that will be executed when the call to setState is actually\\n * completed.\\n *\\n * When a function is provided to setState, it will be called at some point in\\n * the future (not synchronously). It will be called with the up to date\\n * component arguments (state, props, context). These values can be different\\n * from this.* because your function may be called after receiveProps but before\\n * shouldComponentUpdate, and this new state, props, and context will not yet be\\n * assigned to this.\\n *\\n * @param {object|function} partialState Next partial state or function to\\n *        produce next partial state to be merged with current state.\\n * @param {?function} callback Called after state is updated.\\n * @final\\n * @protected\\n */\\nReactComponent.prototype.setState = function (partialState, callback) {\\n  !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : _prodInvariant('85') : void 0;\\n  this.updater.enqueueSetState(this, partialState);\\n  if (callback) {\\n    this.updater.enqueueCallback(this, callback, 'setState');\\n  }\\n};\\n\\n/**\\n * Forces an update. This should only be invoked when it is known with\\n * certainty that we are **not** in a DOM transaction.\\n *\\n * You may want to call this when you know that some deeper aspect of the\\n * component's state has changed but `setState` was not called.\\n *\\n * This will not invoke `shouldComponentUpdate`, but it will invoke\\n * `componentWillUpdate` and `componentDidUpdate`.\\n *\\n * @param {?function} callback Called after update is complete.\\n * @final\\n * @protected\\n */\\nReactComponent.prototype.forceUpdate = function (callback) {\\n  this.updater.enqueueForceUpdate(this);\\n  if (callback) {\\n    this.updater.enqueueCallback(this, callback, 'forceUpdate');\\n  }\\n};\\n\\n/**\\n * Deprecated APIs. These APIs used to exist on classic React classes but since\\n * we would like to deprecate them, we're not going to move them over to this\\n * modern base class. Instead, we define a getter that warns if it's accessed.\\n */\\nif (process.env.NODE_ENV !== 'production') {\\n  var deprecatedAPIs = {\\n    isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\\n    replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\\n  };\\n  var defineDeprecationWarning = function (methodName, info) {\\n    if (canDefineProperty) {\\n      Object.defineProperty(ReactComponent.prototype, methodName, {\\n        get: function () {\\n          process.env.NODE_ENV !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : void 0;\\n          return undefined;\\n        }\\n      });\\n    }\\n  };\\n  for (var fnName in deprecatedAPIs) {\\n    if (deprecatedAPIs.hasOwnProperty(fnName)) {\\n      defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\\n    }\\n  }\\n}\\n\\nmodule.exports = ReactComponent;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactComponent.js\\n// module id = 18\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactComponent.js?\");\n\n/***/ },\n/* 19 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ReactNoopUpdateQueue.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2015-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nfunction warnNoop(publicInstance, callerName) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    var constructor = publicInstance.constructor;\\n    process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, constructor && (constructor.displayName || constructor.name) || 'ReactClass') : void 0;\\n  }\\n}\\n\\n/**\\n * This is the abstract API for an update queue.\\n */\\nvar ReactNoopUpdateQueue = {\\n\\n  /**\\n   * Checks whether or not this composite component is mounted.\\n   * @param {ReactClass} publicInstance The instance we want to test.\\n   * @return {boolean} True if mounted, false otherwise.\\n   * @protected\\n   * @final\\n   */\\n  isMounted: function (publicInstance) {\\n    return false;\\n  },\\n\\n  /**\\n   * Enqueue a callback that will be executed after all the pending updates\\n   * have processed.\\n   *\\n   * @param {ReactClass} publicInstance The instance to use as `this` context.\\n   * @param {?function} callback Called after state is updated.\\n   * @internal\\n   */\\n  enqueueCallback: function (publicInstance, callback) {},\\n\\n  /**\\n   * Forces an update. This should only be invoked when it is known with\\n   * certainty that we are **not** in a DOM transaction.\\n   *\\n   * You may want to call this when you know that some deeper aspect of the\\n   * component's state has changed but `setState` was not called.\\n   *\\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\\n   * `componentWillUpdate` and `componentDidUpdate`.\\n   *\\n   * @param {ReactClass} publicInstance The instance that should rerender.\\n   * @internal\\n   */\\n  enqueueForceUpdate: function (publicInstance) {\\n    warnNoop(publicInstance, 'forceUpdate');\\n  },\\n\\n  /**\\n   * Replaces all of the state. Always use this or `setState` to mutate state.\\n   * You should treat `this.state` as immutable.\\n   *\\n   * There is no guarantee that `this.state` will be immediately updated, so\\n   * accessing `this.state` after calling this method may return the old value.\\n   *\\n   * @param {ReactClass} publicInstance The instance that should rerender.\\n   * @param {object} completeState Next state.\\n   * @internal\\n   */\\n  enqueueReplaceState: function (publicInstance, completeState) {\\n    warnNoop(publicInstance, 'replaceState');\\n  },\\n\\n  /**\\n   * Sets a subset of the state. This only exists because _pendingState is\\n   * internal. This provides a merging strategy that is not available to deep\\n   * properties which is confusing. TODO: Expose pendingState or don't use it\\n   * during the merge.\\n   *\\n   * @param {ReactClass} publicInstance The instance that should rerender.\\n   * @param {object} partialState Next partial state to be merged with state.\\n   * @internal\\n   */\\n  enqueueSetState: function (publicInstance, partialState) {\\n    warnNoop(publicInstance, 'setState');\\n  }\\n};\\n\\nmodule.exports = ReactNoopUpdateQueue;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactNoopUpdateQueue.js\\n// module id = 19\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactNoopUpdateQueue.js?\");\n\n/***/ },\n/* 20 */\n/*!***********************************!*\\\n  !*** ./~/fbjs/lib/emptyObject.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar emptyObject = {};\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  Object.freeze(emptyObject);\\n}\\n\\nmodule.exports = emptyObject;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/emptyObject.js\\n// module id = 20\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/fbjs/lib/emptyObject.js?\");\n\n/***/ },\n/* 21 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/ReactPureComponent.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 18);\\nvar ReactNoopUpdateQueue = __webpack_require__(/*! ./ReactNoopUpdateQueue */ 19);\\n\\nvar emptyObject = __webpack_require__(/*! fbjs/lib/emptyObject */ 20);\\n\\n/**\\n * Base class helpers for the updating state of a component.\\n */\\nfunction ReactPureComponent(props, context, updater) {\\n  // Duplicated from ReactComponent.\\n  this.props = props;\\n  this.context = context;\\n  this.refs = emptyObject;\\n  // We initialize the default updater but the real one gets injected by the\\n  // renderer.\\n  this.updater = updater || ReactNoopUpdateQueue;\\n}\\n\\nfunction ComponentDummy() {}\\nComponentDummy.prototype = ReactComponent.prototype;\\nReactPureComponent.prototype = new ComponentDummy();\\nReactPureComponent.prototype.constructor = ReactPureComponent;\\n// Avoid an extra prototype jump for these methods.\\n_assign(ReactPureComponent.prototype, ReactComponent.prototype);\\nReactPureComponent.prototype.isPureReactComponent = true;\\n\\nmodule.exports = ReactPureComponent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactPureComponent.js\\n// module id = 21\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactPureComponent.js?\");\n\n/***/ },\n/* 22 */\n/*!***********************************!*\\\n  !*** ./~/react/lib/ReactClass.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7),\\n    _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 18);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\nvar ReactPropTypeLocationNames = __webpack_require__(/*! ./ReactPropTypeLocationNames */ 23);\\nvar ReactNoopUpdateQueue = __webpack_require__(/*! ./ReactNoopUpdateQueue */ 19);\\n\\nvar emptyObject = __webpack_require__(/*! fbjs/lib/emptyObject */ 20);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar MIXINS_KEY = 'mixins';\\n\\n// Helper function to allow the creation of anonymous functions which do not\\n// have .name set to the name of the variable being assigned to.\\nfunction identity(fn) {\\n  return fn;\\n}\\n\\n/**\\n * Policies that describe methods in `ReactClassInterface`.\\n */\\n\\n\\nvar injectedMixins = [];\\n\\n/**\\n * Composite components are higher-level components that compose other composite\\n * or host components.\\n *\\n * To create a new type of `ReactClass`, pass a specification of\\n * your new class to `React.createClass`. The only requirement of your class\\n * specification is that you implement a `render` method.\\n *\\n *   var MyComponent = React.createClass({\\n *     render: function() {\\n *       return <div>Hello World</div>;\\n *     }\\n *   });\\n *\\n * The class specification supports a specific protocol of methods that have\\n * special meaning (e.g. `render`). See `ReactClassInterface` for\\n * more the comprehensive protocol. Any other properties and methods in the\\n * class specification will be available on the prototype.\\n *\\n * @interface ReactClassInterface\\n * @internal\\n */\\nvar ReactClassInterface = {\\n\\n  /**\\n   * An array of Mixin objects to include when defining your component.\\n   *\\n   * @type {array}\\n   * @optional\\n   */\\n  mixins: 'DEFINE_MANY',\\n\\n  /**\\n   * An object containing properties and methods that should be defined on\\n   * the component's constructor instead of its prototype (static methods).\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  statics: 'DEFINE_MANY',\\n\\n  /**\\n   * Definition of prop types for this component.\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  propTypes: 'DEFINE_MANY',\\n\\n  /**\\n   * Definition of context types for this component.\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  contextTypes: 'DEFINE_MANY',\\n\\n  /**\\n   * Definition of context types this component sets for its children.\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  childContextTypes: 'DEFINE_MANY',\\n\\n  // ==== Definition methods ====\\n\\n  /**\\n   * Invoked when the component is mounted. Values in the mapping will be set on\\n   * `this.props` if that prop is not specified (i.e. using an `in` check).\\n   *\\n   * This method is invoked before `getInitialState` and therefore cannot rely\\n   * on `this.state` or use `this.setState`.\\n   *\\n   * @return {object}\\n   * @optional\\n   */\\n  getDefaultProps: 'DEFINE_MANY_MERGED',\\n\\n  /**\\n   * Invoked once before the component is mounted. The return value will be used\\n   * as the initial value of `this.state`.\\n   *\\n   *   getInitialState: function() {\\n   *     return {\\n   *       isOn: false,\\n   *       fooBaz: new BazFoo()\\n   *     }\\n   *   }\\n   *\\n   * @return {object}\\n   * @optional\\n   */\\n  getInitialState: 'DEFINE_MANY_MERGED',\\n\\n  /**\\n   * @return {object}\\n   * @optional\\n   */\\n  getChildContext: 'DEFINE_MANY_MERGED',\\n\\n  /**\\n   * Uses props from `this.props` and state from `this.state` to render the\\n   * structure of the component.\\n   *\\n   * No guarantees are made about when or how often this method is invoked, so\\n   * it must not have side effects.\\n   *\\n   *   render: function() {\\n   *     var name = this.props.name;\\n   *     return <div>Hello, {name}!</div>;\\n   *   }\\n   *\\n   * @return {ReactComponent}\\n   * @nosideeffects\\n   * @required\\n   */\\n  render: 'DEFINE_ONCE',\\n\\n  // ==== Delegate methods ====\\n\\n  /**\\n   * Invoked when the component is initially created and about to be mounted.\\n   * This may have side effects, but any external subscriptions or data created\\n   * by this method must be cleaned up in `componentWillUnmount`.\\n   *\\n   * @optional\\n   */\\n  componentWillMount: 'DEFINE_MANY',\\n\\n  /**\\n   * Invoked when the component has been mounted and has a DOM representation.\\n   * However, there is no guarantee that the DOM node is in the document.\\n   *\\n   * Use this as an opportunity to operate on the DOM when the component has\\n   * been mounted (initialized and rendered) for the first time.\\n   *\\n   * @param {DOMElement} rootNode DOM element representing the component.\\n   * @optional\\n   */\\n  componentDidMount: 'DEFINE_MANY',\\n\\n  /**\\n   * Invoked before the component receives new props.\\n   *\\n   * Use this as an opportunity to react to a prop transition by updating the\\n   * state using `this.setState`. Current props are accessed via `this.props`.\\n   *\\n   *   componentWillReceiveProps: function(nextProps, nextContext) {\\n   *     this.setState({\\n   *       likesIncreasing: nextProps.likeCount > this.props.likeCount\\n   *     });\\n   *   }\\n   *\\n   * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\\n   * transition may cause a state change, but the opposite is not true. If you\\n   * need it, you are probably looking for `componentWillUpdate`.\\n   *\\n   * @param {object} nextProps\\n   * @optional\\n   */\\n  componentWillReceiveProps: 'DEFINE_MANY',\\n\\n  /**\\n   * Invoked while deciding if the component should be updated as a result of\\n   * receiving new props, state and/or context.\\n   *\\n   * Use this as an opportunity to `return false` when you're certain that the\\n   * transition to the new props/state/context will not require a component\\n   * update.\\n   *\\n   *   shouldComponentUpdate: function(nextProps, nextState, nextContext) {\\n   *     return !equal(nextProps, this.props) ||\\n   *       !equal(nextState, this.state) ||\\n   *       !equal(nextContext, this.context);\\n   *   }\\n   *\\n   * @param {object} nextProps\\n   * @param {?object} nextState\\n   * @param {?object} nextContext\\n   * @return {boolean} True if the component should update.\\n   * @optional\\n   */\\n  shouldComponentUpdate: 'DEFINE_ONCE',\\n\\n  /**\\n   * Invoked when the component is about to update due to a transition from\\n   * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\\n   * and `nextContext`.\\n   *\\n   * Use this as an opportunity to perform preparation before an update occurs.\\n   *\\n   * NOTE: You **cannot** use `this.setState()` in this method.\\n   *\\n   * @param {object} nextProps\\n   * @param {?object} nextState\\n   * @param {?object} nextContext\\n   * @param {ReactReconcileTransaction} transaction\\n   * @optional\\n   */\\n  componentWillUpdate: 'DEFINE_MANY',\\n\\n  /**\\n   * Invoked when the component's DOM representation has been updated.\\n   *\\n   * Use this as an opportunity to operate on the DOM when the component has\\n   * been updated.\\n   *\\n   * @param {object} prevProps\\n   * @param {?object} prevState\\n   * @param {?object} prevContext\\n   * @param {DOMElement} rootNode DOM element representing the component.\\n   * @optional\\n   */\\n  componentDidUpdate: 'DEFINE_MANY',\\n\\n  /**\\n   * Invoked when the component is about to be removed from its parent and have\\n   * its DOM representation destroyed.\\n   *\\n   * Use this as an opportunity to deallocate any external resources.\\n   *\\n   * NOTE: There is no `componentDidUnmount` since your component will have been\\n   * destroyed by that point.\\n   *\\n   * @optional\\n   */\\n  componentWillUnmount: 'DEFINE_MANY',\\n\\n  // ==== Advanced methods ====\\n\\n  /**\\n   * Updates the component's currently mounted DOM representation.\\n   *\\n   * By default, this implements React's rendering and reconciliation algorithm.\\n   * Sophisticated clients may wish to override this.\\n   *\\n   * @param {ReactReconcileTransaction} transaction\\n   * @internal\\n   * @overridable\\n   */\\n  updateComponent: 'OVERRIDE_BASE'\\n\\n};\\n\\n/**\\n * Mapping from class specification keys to special processing functions.\\n *\\n * Although these are declared like instance properties in the specification\\n * when defining classes using `React.createClass`, they are actually static\\n * and are accessible on the constructor instead of the prototype. Despite\\n * being static, they must be defined outside of the \\\"statics\\\" key under\\n * which all other static methods are defined.\\n */\\nvar RESERVED_SPEC_KEYS = {\\n  displayName: function (Constructor, displayName) {\\n    Constructor.displayName = displayName;\\n  },\\n  mixins: function (Constructor, mixins) {\\n    if (mixins) {\\n      for (var i = 0; i < mixins.length; i++) {\\n        mixSpecIntoComponent(Constructor, mixins[i]);\\n      }\\n    }\\n  },\\n  childContextTypes: function (Constructor, childContextTypes) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      validateTypeDef(Constructor, childContextTypes, 'childContext');\\n    }\\n    Constructor.childContextTypes = _assign({}, Constructor.childContextTypes, childContextTypes);\\n  },\\n  contextTypes: function (Constructor, contextTypes) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      validateTypeDef(Constructor, contextTypes, 'context');\\n    }\\n    Constructor.contextTypes = _assign({}, Constructor.contextTypes, contextTypes);\\n  },\\n  /**\\n   * Special case getDefaultProps which should move into statics but requires\\n   * automatic merging.\\n   */\\n  getDefaultProps: function (Constructor, getDefaultProps) {\\n    if (Constructor.getDefaultProps) {\\n      Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);\\n    } else {\\n      Constructor.getDefaultProps = getDefaultProps;\\n    }\\n  },\\n  propTypes: function (Constructor, propTypes) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      validateTypeDef(Constructor, propTypes, 'prop');\\n    }\\n    Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);\\n  },\\n  statics: function (Constructor, statics) {\\n    mixStaticSpecIntoComponent(Constructor, statics);\\n  },\\n  autobind: function () {} };\\n\\nfunction validateTypeDef(Constructor, typeDef, location) {\\n  for (var propName in typeDef) {\\n    if (typeDef.hasOwnProperty(propName)) {\\n      // use a warning instead of an invariant so components\\n      // don't show up in prod but only in __DEV__\\n      process.env.NODE_ENV !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : void 0;\\n    }\\n  }\\n}\\n\\nfunction validateMethodOverride(isAlreadyDefined, name) {\\n  var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;\\n\\n  // Disallow overriding of base class methods unless explicitly allowed.\\n  if (ReactClassMixin.hasOwnProperty(name)) {\\n    !(specPolicy === 'OVERRIDE_BASE') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.', name) : _prodInvariant('73', name) : void 0;\\n  }\\n\\n  // Disallow defining methods more than once unless explicitly allowed.\\n  if (isAlreadyDefined) {\\n    !(specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('74', name) : void 0;\\n  }\\n}\\n\\n/**\\n * Mixin helper which handles policy validation and reserved\\n * specification keys when building React classes.\\n */\\nfunction mixSpecIntoComponent(Constructor, spec) {\\n  if (!spec) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      var typeofSpec = typeof spec;\\n      var isMixinValid = typeofSpec === 'object' && spec !== null;\\n\\n      process.env.NODE_ENV !== 'production' ? warning(isMixinValid, '%s: You\\\\'re attempting to include a mixin that is either null ' + 'or not an object. Check the mixins included by the component, ' + 'as well as any mixins they include themselves. ' + 'Expected object but got %s.', Constructor.displayName || 'ReactClass', spec === null ? null : typeofSpec) : void 0;\\n    }\\n\\n    return;\\n  }\\n\\n  !(typeof spec !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\\\'re attempting to use a component class or function as a mixin. Instead, just use a regular object.') : _prodInvariant('75') : void 0;\\n  !!ReactElement.isValidElement(spec) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\\\'re attempting to use a component as a mixin. Instead, just use a regular object.') : _prodInvariant('76') : void 0;\\n\\n  var proto = Constructor.prototype;\\n  var autoBindPairs = proto.__reactAutoBindPairs;\\n\\n  // By handling mixins before any other properties, we ensure the same\\n  // chaining order is applied to methods with DEFINE_MANY policy, whether\\n  // mixins are listed before or after these methods in the spec.\\n  if (spec.hasOwnProperty(MIXINS_KEY)) {\\n    RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\\n  }\\n\\n  for (var name in spec) {\\n    if (!spec.hasOwnProperty(name)) {\\n      continue;\\n    }\\n\\n    if (name === MIXINS_KEY) {\\n      // We have already handled mixins in a special case above.\\n      continue;\\n    }\\n\\n    var property = spec[name];\\n    var isAlreadyDefined = proto.hasOwnProperty(name);\\n    validateMethodOverride(isAlreadyDefined, name);\\n\\n    if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\\n      RESERVED_SPEC_KEYS[name](Constructor, property);\\n    } else {\\n      // Setup methods on prototype:\\n      // The following member methods should not be automatically bound:\\n      // 1. Expected ReactClass methods (in the \\\"interface\\\").\\n      // 2. Overridden methods (that were mixed in).\\n      var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\\n      var isFunction = typeof property === 'function';\\n      var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;\\n\\n      if (shouldAutoBind) {\\n        autoBindPairs.push(name, property);\\n        proto[name] = property;\\n      } else {\\n        if (isAlreadyDefined) {\\n          var specPolicy = ReactClassInterface[name];\\n\\n          // These cases should already be caught by validateMethodOverride.\\n          !(isReactClassMethod && (specPolicy === 'DEFINE_MANY_MERGED' || specPolicy === 'DEFINE_MANY')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.', specPolicy, name) : _prodInvariant('77', specPolicy, name) : void 0;\\n\\n          // For methods which are defined more than once, call the existing\\n          // methods before calling the new property, merging if appropriate.\\n          if (specPolicy === 'DEFINE_MANY_MERGED') {\\n            proto[name] = createMergedResultFunction(proto[name], property);\\n          } else if (specPolicy === 'DEFINE_MANY') {\\n            proto[name] = createChainedFunction(proto[name], property);\\n          }\\n        } else {\\n          proto[name] = property;\\n          if (process.env.NODE_ENV !== 'production') {\\n            // Add verbose displayName to the function, which helps when looking\\n            // at profiling tools.\\n            if (typeof property === 'function' && spec.displayName) {\\n              proto[name].displayName = spec.displayName + '_' + name;\\n            }\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\n\\nfunction mixStaticSpecIntoComponent(Constructor, statics) {\\n  if (!statics) {\\n    return;\\n  }\\n  for (var name in statics) {\\n    var property = statics[name];\\n    if (!statics.hasOwnProperty(name)) {\\n      continue;\\n    }\\n\\n    var isReserved = name in RESERVED_SPEC_KEYS;\\n    !!isReserved ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\\\\'t be on the \\\"statics\\\" key. Define it as an instance property instead; it will still be accessible on the constructor.', name) : _prodInvariant('78', name) : void 0;\\n\\n    var isInherited = name in Constructor;\\n    !!isInherited ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('79', name) : void 0;\\n    Constructor[name] = property;\\n  }\\n}\\n\\n/**\\n * Merge two objects, but throw if both contain the same key.\\n *\\n * @param {object} one The first object, which is mutated.\\n * @param {object} two The second object\\n * @return {object} one after it has been mutated to contain everything in two.\\n */\\nfunction mergeIntoWithNoDuplicateKeys(one, two) {\\n  !(one && two && typeof one === 'object' && typeof two === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : _prodInvariant('80') : void 0;\\n\\n  for (var key in two) {\\n    if (two.hasOwnProperty(key)) {\\n      !(one[key] === undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.', key) : _prodInvariant('81', key) : void 0;\\n      one[key] = two[key];\\n    }\\n  }\\n  return one;\\n}\\n\\n/**\\n * Creates a function that invokes two functions and merges their return values.\\n *\\n * @param {function} one Function to invoke first.\\n * @param {function} two Function to invoke second.\\n * @return {function} Function that invokes the two argument functions.\\n * @private\\n */\\nfunction createMergedResultFunction(one, two) {\\n  return function mergedResult() {\\n    var a = one.apply(this, arguments);\\n    var b = two.apply(this, arguments);\\n    if (a == null) {\\n      return b;\\n    } else if (b == null) {\\n      return a;\\n    }\\n    var c = {};\\n    mergeIntoWithNoDuplicateKeys(c, a);\\n    mergeIntoWithNoDuplicateKeys(c, b);\\n    return c;\\n  };\\n}\\n\\n/**\\n * Creates a function that invokes two functions and ignores their return vales.\\n *\\n * @param {function} one Function to invoke first.\\n * @param {function} two Function to invoke second.\\n * @return {function} Function that invokes the two argument functions.\\n * @private\\n */\\nfunction createChainedFunction(one, two) {\\n  return function chainedFunction() {\\n    one.apply(this, arguments);\\n    two.apply(this, arguments);\\n  };\\n}\\n\\n/**\\n * Binds a method to the component.\\n *\\n * @param {object} component Component whose method is going to be bound.\\n * @param {function} method Method to be bound.\\n * @return {function} The bound method.\\n */\\nfunction bindAutoBindMethod(component, method) {\\n  var boundMethod = method.bind(component);\\n  if (process.env.NODE_ENV !== 'production') {\\n    boundMethod.__reactBoundContext = component;\\n    boundMethod.__reactBoundMethod = method;\\n    boundMethod.__reactBoundArguments = null;\\n    var componentName = component.constructor.displayName;\\n    var _bind = boundMethod.bind;\\n    boundMethod.bind = function (newThis) {\\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\\n        args[_key - 1] = arguments[_key];\\n      }\\n\\n      // User is trying to bind() an autobound method; we effectively will\\n      // ignore the value of \\\"this\\\" that the user is trying to use, so\\n      // let's warn.\\n      if (newThis !== component && newThis !== null) {\\n        process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : void 0;\\n      } else if (!args.length) {\\n        process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : void 0;\\n        return boundMethod;\\n      }\\n      var reboundMethod = _bind.apply(boundMethod, arguments);\\n      reboundMethod.__reactBoundContext = component;\\n      reboundMethod.__reactBoundMethod = method;\\n      reboundMethod.__reactBoundArguments = args;\\n      return reboundMethod;\\n    };\\n  }\\n  return boundMethod;\\n}\\n\\n/**\\n * Binds all auto-bound methods in a component.\\n *\\n * @param {object} component Component whose method is going to be bound.\\n */\\nfunction bindAutoBindMethods(component) {\\n  var pairs = component.__reactAutoBindPairs;\\n  for (var i = 0; i < pairs.length; i += 2) {\\n    var autoBindKey = pairs[i];\\n    var method = pairs[i + 1];\\n    component[autoBindKey] = bindAutoBindMethod(component, method);\\n  }\\n}\\n\\n/**\\n * Add more to the ReactClass base class. These are all legacy features and\\n * therefore not already part of the modern ReactComponent.\\n */\\nvar ReactClassMixin = {\\n\\n  /**\\n   * TODO: This will be deprecated because state should always keep a consistent\\n   * type signature and the only use case for this, is to avoid that.\\n   */\\n  replaceState: function (newState, callback) {\\n    this.updater.enqueueReplaceState(this, newState);\\n    if (callback) {\\n      this.updater.enqueueCallback(this, callback, 'replaceState');\\n    }\\n  },\\n\\n  /**\\n   * Checks whether or not this composite component is mounted.\\n   * @return {boolean} True if mounted, false otherwise.\\n   * @protected\\n   * @final\\n   */\\n  isMounted: function () {\\n    return this.updater.isMounted(this);\\n  }\\n};\\n\\nvar ReactClassComponent = function () {};\\n_assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);\\n\\n/**\\n * Module for creating composite components.\\n *\\n * @class ReactClass\\n */\\nvar ReactClass = {\\n\\n  /**\\n   * Creates a composite component class given a class specification.\\n   * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass\\n   *\\n   * @param {object} spec Class specification (which must define `render`).\\n   * @return {function} Component constructor function.\\n   * @public\\n   */\\n  createClass: function (spec) {\\n    // To keep our warnings more understandable, we'll use a little hack here to\\n    // ensure that Constructor.name !== 'Constructor'. This makes sure we don't\\n    // unnecessarily identify a class without displayName as 'Constructor'.\\n    var Constructor = identity(function (props, context, updater) {\\n      // This constructor gets overridden by mocks. The argument is used\\n      // by mocks to assert on what gets mounted.\\n\\n      if (process.env.NODE_ENV !== 'production') {\\n        process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0;\\n      }\\n\\n      // Wire up auto-binding\\n      if (this.__reactAutoBindPairs.length) {\\n        bindAutoBindMethods(this);\\n      }\\n\\n      this.props = props;\\n      this.context = context;\\n      this.refs = emptyObject;\\n      this.updater = updater || ReactNoopUpdateQueue;\\n\\n      this.state = null;\\n\\n      // ReactClasses doesn't have constructors. Instead, they use the\\n      // getInitialState and componentWillMount methods for initialization.\\n\\n      var initialState = this.getInitialState ? this.getInitialState() : null;\\n      if (process.env.NODE_ENV !== 'production') {\\n        // We allow auto-mocks to proceed as if they're returning null.\\n        if (initialState === undefined && this.getInitialState._isMockFunction) {\\n          // This is probably bad practice. Consider warning here and\\n          // deprecating this convenience.\\n          initialState = null;\\n        }\\n      }\\n      !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : _prodInvariant('82', Constructor.displayName || 'ReactCompositeComponent') : void 0;\\n\\n      this.state = initialState;\\n    });\\n    Constructor.prototype = new ReactClassComponent();\\n    Constructor.prototype.constructor = Constructor;\\n    Constructor.prototype.__reactAutoBindPairs = [];\\n\\n    injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\\n\\n    mixSpecIntoComponent(Constructor, spec);\\n\\n    // Initialize the defaultProps property after all mixins have been merged.\\n    if (Constructor.getDefaultProps) {\\n      Constructor.defaultProps = Constructor.getDefaultProps();\\n    }\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      // This is a tag to indicate that the use of these method names is ok,\\n      // since it's used with createClass. If it's not, then it's likely a\\n      // mistake so we'll warn you to use the static property, property\\n      // initializer or constructor respectively.\\n      if (Constructor.getDefaultProps) {\\n        Constructor.getDefaultProps.isReactClassApproved = {};\\n      }\\n      if (Constructor.prototype.getInitialState) {\\n        Constructor.prototype.getInitialState.isReactClassApproved = {};\\n      }\\n    }\\n\\n    !Constructor.prototype.render ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : _prodInvariant('83') : void 0;\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : void 0;\\n      process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : void 0;\\n    }\\n\\n    // Reduce time spent doing lookups by setting these on the prototype.\\n    for (var methodName in ReactClassInterface) {\\n      if (!Constructor.prototype[methodName]) {\\n        Constructor.prototype[methodName] = null;\\n      }\\n    }\\n\\n    return Constructor;\\n  },\\n\\n  injection: {\\n    injectMixin: function (mixin) {\\n      injectedMixins.push(mixin);\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = ReactClass;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactClass.js\\n// module id = 22\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactClass.js?\");\n\n/***/ },\n/* 23 */\n/*!***************************************************!*\\\n  !*** ./~/react/lib/ReactPropTypeLocationNames.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar ReactPropTypeLocationNames = {};\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  ReactPropTypeLocationNames = {\\n    prop: 'prop',\\n    context: 'context',\\n    childContext: 'child context'\\n  };\\n}\\n\\nmodule.exports = ReactPropTypeLocationNames;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactPropTypeLocationNames.js\\n// module id = 23\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactPropTypeLocationNames.js?\");\n\n/***/ },\n/* 24 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/ReactDOMFactories.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\n\\n/**\\n * Create a factory that creates HTML tag elements.\\n *\\n * @private\\n */\\nvar createDOMFactory = ReactElement.createFactory;\\nif (process.env.NODE_ENV !== 'production') {\\n  var ReactElementValidator = __webpack_require__(/*! ./ReactElementValidator */ 25);\\n  createDOMFactory = ReactElementValidator.createFactory;\\n}\\n\\n/**\\n * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.\\n * This is also accessible via `React.DOM`.\\n *\\n * @public\\n */\\nvar ReactDOMFactories = {\\n  a: createDOMFactory('a'),\\n  abbr: createDOMFactory('abbr'),\\n  address: createDOMFactory('address'),\\n  area: createDOMFactory('area'),\\n  article: createDOMFactory('article'),\\n  aside: createDOMFactory('aside'),\\n  audio: createDOMFactory('audio'),\\n  b: createDOMFactory('b'),\\n  base: createDOMFactory('base'),\\n  bdi: createDOMFactory('bdi'),\\n  bdo: createDOMFactory('bdo'),\\n  big: createDOMFactory('big'),\\n  blockquote: createDOMFactory('blockquote'),\\n  body: createDOMFactory('body'),\\n  br: createDOMFactory('br'),\\n  button: createDOMFactory('button'),\\n  canvas: createDOMFactory('canvas'),\\n  caption: createDOMFactory('caption'),\\n  cite: createDOMFactory('cite'),\\n  code: createDOMFactory('code'),\\n  col: createDOMFactory('col'),\\n  colgroup: createDOMFactory('colgroup'),\\n  data: createDOMFactory('data'),\\n  datalist: createDOMFactory('datalist'),\\n  dd: createDOMFactory('dd'),\\n  del: createDOMFactory('del'),\\n  details: createDOMFactory('details'),\\n  dfn: createDOMFactory('dfn'),\\n  dialog: createDOMFactory('dialog'),\\n  div: createDOMFactory('div'),\\n  dl: createDOMFactory('dl'),\\n  dt: createDOMFactory('dt'),\\n  em: createDOMFactory('em'),\\n  embed: createDOMFactory('embed'),\\n  fieldset: createDOMFactory('fieldset'),\\n  figcaption: createDOMFactory('figcaption'),\\n  figure: createDOMFactory('figure'),\\n  footer: createDOMFactory('footer'),\\n  form: createDOMFactory('form'),\\n  h1: createDOMFactory('h1'),\\n  h2: createDOMFactory('h2'),\\n  h3: createDOMFactory('h3'),\\n  h4: createDOMFactory('h4'),\\n  h5: createDOMFactory('h5'),\\n  h6: createDOMFactory('h6'),\\n  head: createDOMFactory('head'),\\n  header: createDOMFactory('header'),\\n  hgroup: createDOMFactory('hgroup'),\\n  hr: createDOMFactory('hr'),\\n  html: createDOMFactory('html'),\\n  i: createDOMFactory('i'),\\n  iframe: createDOMFactory('iframe'),\\n  img: createDOMFactory('img'),\\n  input: createDOMFactory('input'),\\n  ins: createDOMFactory('ins'),\\n  kbd: createDOMFactory('kbd'),\\n  keygen: createDOMFactory('keygen'),\\n  label: createDOMFactory('label'),\\n  legend: createDOMFactory('legend'),\\n  li: createDOMFactory('li'),\\n  link: createDOMFactory('link'),\\n  main: createDOMFactory('main'),\\n  map: createDOMFactory('map'),\\n  mark: createDOMFactory('mark'),\\n  menu: createDOMFactory('menu'),\\n  menuitem: createDOMFactory('menuitem'),\\n  meta: createDOMFactory('meta'),\\n  meter: createDOMFactory('meter'),\\n  nav: createDOMFactory('nav'),\\n  noscript: createDOMFactory('noscript'),\\n  object: createDOMFactory('object'),\\n  ol: createDOMFactory('ol'),\\n  optgroup: createDOMFactory('optgroup'),\\n  option: createDOMFactory('option'),\\n  output: createDOMFactory('output'),\\n  p: createDOMFactory('p'),\\n  param: createDOMFactory('param'),\\n  picture: createDOMFactory('picture'),\\n  pre: createDOMFactory('pre'),\\n  progress: createDOMFactory('progress'),\\n  q: createDOMFactory('q'),\\n  rp: createDOMFactory('rp'),\\n  rt: createDOMFactory('rt'),\\n  ruby: createDOMFactory('ruby'),\\n  s: createDOMFactory('s'),\\n  samp: createDOMFactory('samp'),\\n  script: createDOMFactory('script'),\\n  section: createDOMFactory('section'),\\n  select: createDOMFactory('select'),\\n  small: createDOMFactory('small'),\\n  source: createDOMFactory('source'),\\n  span: createDOMFactory('span'),\\n  strong: createDOMFactory('strong'),\\n  style: createDOMFactory('style'),\\n  sub: createDOMFactory('sub'),\\n  summary: createDOMFactory('summary'),\\n  sup: createDOMFactory('sup'),\\n  table: createDOMFactory('table'),\\n  tbody: createDOMFactory('tbody'),\\n  td: createDOMFactory('td'),\\n  textarea: createDOMFactory('textarea'),\\n  tfoot: createDOMFactory('tfoot'),\\n  th: createDOMFactory('th'),\\n  thead: createDOMFactory('thead'),\\n  time: createDOMFactory('time'),\\n  title: createDOMFactory('title'),\\n  tr: createDOMFactory('tr'),\\n  track: createDOMFactory('track'),\\n  u: createDOMFactory('u'),\\n  ul: createDOMFactory('ul'),\\n  'var': createDOMFactory('var'),\\n  video: createDOMFactory('video'),\\n  wbr: createDOMFactory('wbr'),\\n\\n  // SVG\\n  circle: createDOMFactory('circle'),\\n  clipPath: createDOMFactory('clipPath'),\\n  defs: createDOMFactory('defs'),\\n  ellipse: createDOMFactory('ellipse'),\\n  g: createDOMFactory('g'),\\n  image: createDOMFactory('image'),\\n  line: createDOMFactory('line'),\\n  linearGradient: createDOMFactory('linearGradient'),\\n  mask: createDOMFactory('mask'),\\n  path: createDOMFactory('path'),\\n  pattern: createDOMFactory('pattern'),\\n  polygon: createDOMFactory('polygon'),\\n  polyline: createDOMFactory('polyline'),\\n  radialGradient: createDOMFactory('radialGradient'),\\n  rect: createDOMFactory('rect'),\\n  stop: createDOMFactory('stop'),\\n  svg: createDOMFactory('svg'),\\n  text: createDOMFactory('text'),\\n  tspan: createDOMFactory('tspan')\\n};\\n\\nmodule.exports = ReactDOMFactories;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactDOMFactories.js\\n// module id = 24\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMFactories.js?\");\n\n/***/ },\n/* 25 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/ReactElementValidator.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n/**\\n * ReactElementValidator provides a wrapper around a element factory\\n * which validates the props passed to the element. This is intended to be\\n * used only in DEV and could be replaced by a static type checker for languages\\n * that support it.\\n */\\n\\n'use strict';\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 10);\\nvar ReactComponentTreeHook = __webpack_require__(/*! ./ReactComponentTreeHook */ 26);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\n\\nvar checkReactTypeSpec = __webpack_require__(/*! ./checkReactTypeSpec */ 27);\\n\\nvar canDefineProperty = __webpack_require__(/*! ./canDefineProperty */ 13);\\nvar getIteratorFn = __webpack_require__(/*! ./getIteratorFn */ 16);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nfunction getDeclarationErrorAddendum() {\\n  if (ReactCurrentOwner.current) {\\n    var name = ReactCurrentOwner.current.getName();\\n    if (name) {\\n      return ' Check the render method of `' + name + '`.';\\n    }\\n  }\\n  return '';\\n}\\n\\n/**\\n * Warn if there's no key explicitly set on dynamic arrays of children or\\n * object keys are not valid. This allows us to keep track of children between\\n * updates.\\n */\\nvar ownerHasKeyUseWarning = {};\\n\\nfunction getCurrentComponentErrorInfo(parentType) {\\n  var info = getDeclarationErrorAddendum();\\n\\n  if (!info) {\\n    var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\\n    if (parentName) {\\n      info = ' Check the top-level render call using <' + parentName + '>.';\\n    }\\n  }\\n  return info;\\n}\\n\\n/**\\n * Warn if the element doesn't have an explicit key assigned to it.\\n * This element is in an array. The array could grow and shrink or be\\n * reordered. All children that haven't already been validated are required to\\n * have a \\\"key\\\" property assigned to it. Error statuses are cached so a warning\\n * will only be shown once.\\n *\\n * @internal\\n * @param {ReactElement} element Element that requires a key.\\n * @param {*} parentType element's parent's type.\\n */\\nfunction validateExplicitKey(element, parentType) {\\n  if (!element._store || element._store.validated || element.key != null) {\\n    return;\\n  }\\n  element._store.validated = true;\\n\\n  var memoizer = ownerHasKeyUseWarning.uniqueKey || (ownerHasKeyUseWarning.uniqueKey = {});\\n\\n  var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\\n  if (memoizer[currentComponentErrorInfo]) {\\n    return;\\n  }\\n  memoizer[currentComponentErrorInfo] = true;\\n\\n  // Usually the current owner is the offender, but if it accepts children as a\\n  // property, it may be the creator of the child that's responsible for\\n  // assigning it a key.\\n  var childOwner = '';\\n  if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\\n    // Give the component that originally created this child.\\n    childOwner = ' It was passed a child from ' + element._owner.getName() + '.';\\n  }\\n\\n  process.env.NODE_ENV !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique \\\"key\\\" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.%s', currentComponentErrorInfo, childOwner, ReactComponentTreeHook.getCurrentStackAddendum(element)) : void 0;\\n}\\n\\n/**\\n * Ensure that every element either is passed in a static location, in an\\n * array with an explicit keys property defined, or in an object literal\\n * with valid key property.\\n *\\n * @internal\\n * @param {ReactNode} node Statically passed child of any type.\\n * @param {*} parentType node's parent's type.\\n */\\nfunction validateChildKeys(node, parentType) {\\n  if (typeof node !== 'object') {\\n    return;\\n  }\\n  if (Array.isArray(node)) {\\n    for (var i = 0; i < node.length; i++) {\\n      var child = node[i];\\n      if (ReactElement.isValidElement(child)) {\\n        validateExplicitKey(child, parentType);\\n      }\\n    }\\n  } else if (ReactElement.isValidElement(node)) {\\n    // This element was passed in a valid location.\\n    if (node._store) {\\n      node._store.validated = true;\\n    }\\n  } else if (node) {\\n    var iteratorFn = getIteratorFn(node);\\n    // Entry iterators provide implicit keys.\\n    if (iteratorFn) {\\n      if (iteratorFn !== node.entries) {\\n        var iterator = iteratorFn.call(node);\\n        var step;\\n        while (!(step = iterator.next()).done) {\\n          if (ReactElement.isValidElement(step.value)) {\\n            validateExplicitKey(step.value, parentType);\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\n\\n/**\\n * Given an element, validate that its props follow the propTypes definition,\\n * provided by the type.\\n *\\n * @param {ReactElement} element\\n */\\nfunction validatePropTypes(element) {\\n  var componentClass = element.type;\\n  if (typeof componentClass !== 'function') {\\n    return;\\n  }\\n  var name = componentClass.displayName || componentClass.name;\\n  if (componentClass.propTypes) {\\n    checkReactTypeSpec(componentClass.propTypes, element.props, 'prop', name, element, null);\\n  }\\n  if (typeof componentClass.getDefaultProps === 'function') {\\n    process.env.NODE_ENV !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : void 0;\\n  }\\n}\\n\\nvar ReactElementValidator = {\\n\\n  createElement: function (type, props, children) {\\n    var validType = typeof type === 'string' || typeof type === 'function';\\n    // We warn in this case but don't throw. We expect the element creation to\\n    // succeed and there will likely be errors in render.\\n    if (!validType) {\\n      process.env.NODE_ENV !== 'production' ? warning(false, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : void 0;\\n    }\\n\\n    var element = ReactElement.createElement.apply(this, arguments);\\n\\n    // The result can be nullish if a mock or a custom function is used.\\n    // TODO: Drop this when these are no longer allowed as the type argument.\\n    if (element == null) {\\n      return element;\\n    }\\n\\n    // Skip key warning if the type isn't valid since our key validation logic\\n    // doesn't expect a non-string/function type and can throw confusing errors.\\n    // We don't want exception behavior to differ between dev and prod.\\n    // (Rendering will throw with a helpful message and as soon as the type is\\n    // fixed, the key warnings will appear.)\\n    if (validType) {\\n      for (var i = 2; i < arguments.length; i++) {\\n        validateChildKeys(arguments[i], type);\\n      }\\n    }\\n\\n    validatePropTypes(element);\\n\\n    return element;\\n  },\\n\\n  createFactory: function (type) {\\n    var validatedFactory = ReactElementValidator.createElement.bind(null, type);\\n    // Legacy hook TODO: Warn if this is accessed\\n    validatedFactory.type = type;\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (canDefineProperty) {\\n        Object.defineProperty(validatedFactory, 'type', {\\n          enumerable: false,\\n          get: function () {\\n            process.env.NODE_ENV !== 'production' ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : void 0;\\n            Object.defineProperty(this, 'type', {\\n              value: type\\n            });\\n            return type;\\n          }\\n        });\\n      }\\n    }\\n\\n    return validatedFactory;\\n  },\\n\\n  cloneElement: function (element, props, children) {\\n    var newElement = ReactElement.cloneElement.apply(this, arguments);\\n    for (var i = 2; i < arguments.length; i++) {\\n      validateChildKeys(arguments[i], newElement.type);\\n    }\\n    validatePropTypes(newElement);\\n    return newElement;\\n  }\\n\\n};\\n\\nmodule.exports = ReactElementValidator;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactElementValidator.js\\n// module id = 25\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactElementValidator.js?\");\n\n/***/ },\n/* 26 */\n/*!***********************************************!*\\\n  !*** ./~/react/lib/ReactComponentTreeHook.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2016-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 10);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nfunction isNative(fn) {\\n  // Based on isNative() from Lodash\\n  var funcToString = Function.prototype.toString;\\n  var hasOwnProperty = Object.prototype.hasOwnProperty;\\n  var reIsNative = RegExp('^' + funcToString\\n  // Take an example native function source for comparison\\n  .call(hasOwnProperty)\\n  // Strip regex characters so we can use it for regex\\n  .replace(/[\\\\\\\\^$.*+?()[\\\\]{}|]/g, '\\\\\\\\$&')\\n  // Remove hasOwnProperty from the template to make it generic\\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\\\\\\\()| for .+?(?=\\\\\\\\\\\\])/g, '$1.*?') + '$');\\n  try {\\n    var source = funcToString.call(fn);\\n    return reIsNative.test(source);\\n  } catch (err) {\\n    return false;\\n  }\\n}\\n\\nvar canUseCollections =\\n// Array.from\\ntypeof Array.from === 'function' &&\\n// Map\\ntypeof Map === 'function' && isNative(Map) &&\\n// Map.prototype.keys\\nMap.prototype != null && typeof Map.prototype.keys === 'function' && isNative(Map.prototype.keys) &&\\n// Set\\ntypeof Set === 'function' && isNative(Set) &&\\n// Set.prototype.keys\\nSet.prototype != null && typeof Set.prototype.keys === 'function' && isNative(Set.prototype.keys);\\n\\nvar setItem;\\nvar getItem;\\nvar removeItem;\\nvar getItemIDs;\\nvar addRoot;\\nvar removeRoot;\\nvar getRootIDs;\\n\\nif (canUseCollections) {\\n  var itemMap = new Map();\\n  var rootIDSet = new Set();\\n\\n  setItem = function (id, item) {\\n    itemMap.set(id, item);\\n  };\\n  getItem = function (id) {\\n    return itemMap.get(id);\\n  };\\n  removeItem = function (id) {\\n    itemMap['delete'](id);\\n  };\\n  getItemIDs = function () {\\n    return Array.from(itemMap.keys());\\n  };\\n\\n  addRoot = function (id) {\\n    rootIDSet.add(id);\\n  };\\n  removeRoot = function (id) {\\n    rootIDSet['delete'](id);\\n  };\\n  getRootIDs = function () {\\n    return Array.from(rootIDSet.keys());\\n  };\\n} else {\\n  var itemByKey = {};\\n  var rootByKey = {};\\n\\n  // Use non-numeric keys to prevent V8 performance issues:\\n  // https://github.com/facebook/react/pull/7232\\n  var getKeyFromID = function (id) {\\n    return '.' + id;\\n  };\\n  var getIDFromKey = function (key) {\\n    return parseInt(key.substr(1), 10);\\n  };\\n\\n  setItem = function (id, item) {\\n    var key = getKeyFromID(id);\\n    itemByKey[key] = item;\\n  };\\n  getItem = function (id) {\\n    var key = getKeyFromID(id);\\n    return itemByKey[key];\\n  };\\n  removeItem = function (id) {\\n    var key = getKeyFromID(id);\\n    delete itemByKey[key];\\n  };\\n  getItemIDs = function () {\\n    return Object.keys(itemByKey).map(getIDFromKey);\\n  };\\n\\n  addRoot = function (id) {\\n    var key = getKeyFromID(id);\\n    rootByKey[key] = true;\\n  };\\n  removeRoot = function (id) {\\n    var key = getKeyFromID(id);\\n    delete rootByKey[key];\\n  };\\n  getRootIDs = function () {\\n    return Object.keys(rootByKey).map(getIDFromKey);\\n  };\\n}\\n\\nvar unmountedIDs = [];\\n\\nfunction purgeDeep(id) {\\n  var item = getItem(id);\\n  if (item) {\\n    var childIDs = item.childIDs;\\n\\n    removeItem(id);\\n    childIDs.forEach(purgeDeep);\\n  }\\n}\\n\\nfunction describeComponentFrame(name, source, ownerName) {\\n  return '\\\\n    in ' + (name || 'Unknown') + (source ? ' (at ' + source.fileName.replace(/^.*[\\\\\\\\\\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : '');\\n}\\n\\nfunction getDisplayName(element) {\\n  if (element == null) {\\n    return '#empty';\\n  } else if (typeof element === 'string' || typeof element === 'number') {\\n    return '#text';\\n  } else if (typeof element.type === 'string') {\\n    return element.type;\\n  } else {\\n    return element.type.displayName || element.type.name || 'Unknown';\\n  }\\n}\\n\\nfunction describeID(id) {\\n  var name = ReactComponentTreeHook.getDisplayName(id);\\n  var element = ReactComponentTreeHook.getElement(id);\\n  var ownerID = ReactComponentTreeHook.getOwnerID(id);\\n  var ownerName;\\n  if (ownerID) {\\n    ownerName = ReactComponentTreeHook.getDisplayName(ownerID);\\n  }\\n  process.env.NODE_ENV !== 'production' ? warning(element, 'ReactComponentTreeHook: Missing React element for debugID %s when ' + 'building stack', id) : void 0;\\n  return describeComponentFrame(name, element && element._source, ownerName);\\n}\\n\\nvar ReactComponentTreeHook = {\\n  onSetChildren: function (id, nextChildIDs) {\\n    var item = getItem(id);\\n    !item ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Item must have been set') : _prodInvariant('144') : void 0;\\n    item.childIDs = nextChildIDs;\\n\\n    for (var i = 0; i < nextChildIDs.length; i++) {\\n      var nextChildID = nextChildIDs[i];\\n      var nextChild = getItem(nextChildID);\\n      !nextChild ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected hook events to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('140') : void 0;\\n      !(nextChild.childIDs != null || typeof nextChild.element !== 'object' || nextChild.element == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onSetChildren() to fire for a container child before its parent includes it in onSetChildren().') : _prodInvariant('141') : void 0;\\n      !nextChild.isMounted ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onMountComponent() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('71') : void 0;\\n      if (nextChild.parentID == null) {\\n        nextChild.parentID = id;\\n        // TODO: This shouldn't be necessary but mounting a new root during in\\n        // componentWillMount currently causes not-yet-mounted components to\\n        // be purged from our tree data so their parent id is missing.\\n      }\\n      !(nextChild.parentID === id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onBeforeMountComponent() parent and onSetChildren() to be consistent (%s has parents %s and %s).', nextChildID, nextChild.parentID, id) : _prodInvariant('142', nextChildID, nextChild.parentID, id) : void 0;\\n    }\\n  },\\n  onBeforeMountComponent: function (id, element, parentID) {\\n    var item = {\\n      element: element,\\n      parentID: parentID,\\n      text: null,\\n      childIDs: [],\\n      isMounted: false,\\n      updateCount: 0\\n    };\\n    setItem(id, item);\\n  },\\n  onBeforeUpdateComponent: function (id, element) {\\n    var item = getItem(id);\\n    if (!item || !item.isMounted) {\\n      // We may end up here as a result of setState() in componentWillUnmount().\\n      // In this case, ignore the element.\\n      return;\\n    }\\n    item.element = element;\\n  },\\n  onMountComponent: function (id) {\\n    var item = getItem(id);\\n    !item ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Item must have been set') : _prodInvariant('144') : void 0;\\n    item.isMounted = true;\\n    var isRoot = item.parentID === 0;\\n    if (isRoot) {\\n      addRoot(id);\\n    }\\n  },\\n  onUpdateComponent: function (id) {\\n    var item = getItem(id);\\n    if (!item || !item.isMounted) {\\n      // We may end up here as a result of setState() in componentWillUnmount().\\n      // In this case, ignore the element.\\n      return;\\n    }\\n    item.updateCount++;\\n  },\\n  onUnmountComponent: function (id) {\\n    var item = getItem(id);\\n    if (item) {\\n      // We need to check if it exists.\\n      // `item` might not exist if it is inside an error boundary, and a sibling\\n      // error boundary child threw while mounting. Then this instance never\\n      // got a chance to mount, but it still gets an unmounting event during\\n      // the error boundary cleanup.\\n      item.isMounted = false;\\n      var isRoot = item.parentID === 0;\\n      if (isRoot) {\\n        removeRoot(id);\\n      }\\n    }\\n    unmountedIDs.push(id);\\n  },\\n  purgeUnmountedComponents: function () {\\n    if (ReactComponentTreeHook._preventPurging) {\\n      // Should only be used for testing.\\n      return;\\n    }\\n\\n    for (var i = 0; i < unmountedIDs.length; i++) {\\n      var id = unmountedIDs[i];\\n      purgeDeep(id);\\n    }\\n    unmountedIDs.length = 0;\\n  },\\n  isMounted: function (id) {\\n    var item = getItem(id);\\n    return item ? item.isMounted : false;\\n  },\\n  getCurrentStackAddendum: function (topElement) {\\n    var info = '';\\n    if (topElement) {\\n      var name = getDisplayName(topElement);\\n      var owner = topElement._owner;\\n      info += describeComponentFrame(name, topElement._source, owner && owner.getName());\\n    }\\n\\n    var currentOwner = ReactCurrentOwner.current;\\n    var id = currentOwner && currentOwner._debugID;\\n\\n    info += ReactComponentTreeHook.getStackAddendumByID(id);\\n    return info;\\n  },\\n  getStackAddendumByID: function (id) {\\n    var info = '';\\n    while (id) {\\n      info += describeID(id);\\n      id = ReactComponentTreeHook.getParentID(id);\\n    }\\n    return info;\\n  },\\n  getChildIDs: function (id) {\\n    var item = getItem(id);\\n    return item ? item.childIDs : [];\\n  },\\n  getDisplayName: function (id) {\\n    var element = ReactComponentTreeHook.getElement(id);\\n    if (!element) {\\n      return null;\\n    }\\n    return getDisplayName(element);\\n  },\\n  getElement: function (id) {\\n    var item = getItem(id);\\n    return item ? item.element : null;\\n  },\\n  getOwnerID: function (id) {\\n    var element = ReactComponentTreeHook.getElement(id);\\n    if (!element || !element._owner) {\\n      return null;\\n    }\\n    return element._owner._debugID;\\n  },\\n  getParentID: function (id) {\\n    var item = getItem(id);\\n    return item ? item.parentID : null;\\n  },\\n  getSource: function (id) {\\n    var item = getItem(id);\\n    var element = item ? item.element : null;\\n    var source = element != null ? element._source : null;\\n    return source;\\n  },\\n  getText: function (id) {\\n    var element = ReactComponentTreeHook.getElement(id);\\n    if (typeof element === 'string') {\\n      return element;\\n    } else if (typeof element === 'number') {\\n      return '' + element;\\n    } else {\\n      return null;\\n    }\\n  },\\n  getUpdateCount: function (id) {\\n    var item = getItem(id);\\n    return item ? item.updateCount : 0;\\n  },\\n\\n\\n  getRootIDs: getRootIDs,\\n  getRegisteredIDs: getItemIDs\\n};\\n\\nmodule.exports = ReactComponentTreeHook;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactComponentTreeHook.js\\n// module id = 26\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactComponentTreeHook.js?\");\n\n/***/ },\n/* 27 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/checkReactTypeSpec.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar ReactPropTypeLocationNames = __webpack_require__(/*! ./ReactPropTypeLocationNames */ 23);\\nvar ReactPropTypesSecret = __webpack_require__(/*! ./ReactPropTypesSecret */ 28);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar ReactComponentTreeHook;\\n\\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {\\n  // Temporary hack.\\n  // Inline requires don't work well with Jest:\\n  // https://github.com/facebook/react/issues/7240\\n  // Remove the inline requires when we don't need them anymore:\\n  // https://github.com/facebook/react/pull/7178\\n  ReactComponentTreeHook = __webpack_require__(/*! ./ReactComponentTreeHook */ 26);\\n}\\n\\nvar loggedTypeFailures = {};\\n\\n/**\\n * Assert that the values match with the type specs.\\n * Error messages are memorized and will only be shown once.\\n *\\n * @param {object} typeSpecs Map of name to a ReactPropType\\n * @param {object} values Runtime values that need to be type-checked\\n * @param {string} location e.g. \\\"prop\\\", \\\"context\\\", \\\"child context\\\"\\n * @param {string} componentName Name of the component for error messages.\\n * @param {?object} element The React element that is being type-checked\\n * @param {?number} debugID The React component instance that is being type-checked\\n * @private\\n */\\nfunction checkReactTypeSpec(typeSpecs, values, location, componentName, element, debugID) {\\n  for (var typeSpecName in typeSpecs) {\\n    if (typeSpecs.hasOwnProperty(typeSpecName)) {\\n      var error;\\n      // Prop type validation may throw. In case they do, we don't want to\\n      // fail the render phase where it didn't fail before. So we log it.\\n      // After these have been cleaned up, we'll let them throw.\\n      try {\\n        // This is intentionally an invariant that gets caught. It's the same\\n        // behavior as without this statement except with a better message.\\n        !(typeof typeSpecs[typeSpecName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : _prodInvariant('84', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : void 0;\\n        error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\\n      } catch (ex) {\\n        error = ex;\\n      }\\n      process.env.NODE_ENV !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName, typeof error) : void 0;\\n      if (error instanceof Error && !(error.message in loggedTypeFailures)) {\\n        // Only monitor this failure once because there tends to be a lot of the\\n        // same error.\\n        loggedTypeFailures[error.message] = true;\\n\\n        var componentStackInfo = '';\\n\\n        if (process.env.NODE_ENV !== 'production') {\\n          if (!ReactComponentTreeHook) {\\n            ReactComponentTreeHook = __webpack_require__(/*! ./ReactComponentTreeHook */ 26);\\n          }\\n          if (debugID !== null) {\\n            componentStackInfo = ReactComponentTreeHook.getStackAddendumByID(debugID);\\n          } else if (element !== null) {\\n            componentStackInfo = ReactComponentTreeHook.getCurrentStackAddendum(element);\\n          }\\n        }\\n\\n        process.env.NODE_ENV !== 'production' ? warning(false, 'Failed %s type: %s%s', location, error.message, componentStackInfo) : void 0;\\n      }\\n    }\\n  }\\n}\\n\\nmodule.exports = checkReactTypeSpec;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/checkReactTypeSpec.js\\n// module id = 27\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/checkReactTypeSpec.js?\");\n\n/***/ },\n/* 28 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ReactPropTypesSecret.js ***!\n  \\*********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\\n\\nmodule.exports = ReactPropTypesSecret;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactPropTypesSecret.js\\n// module id = 28\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactPropTypesSecret.js?\");\n\n/***/ },\n/* 29 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactPropTypes.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\nvar ReactPropTypeLocationNames = __webpack_require__(/*! ./ReactPropTypeLocationNames */ 23);\\nvar ReactPropTypesSecret = __webpack_require__(/*! ./ReactPropTypesSecret */ 28);\\n\\nvar emptyFunction = __webpack_require__(/*! fbjs/lib/emptyFunction */ 12);\\nvar getIteratorFn = __webpack_require__(/*! ./getIteratorFn */ 16);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\n/**\\n * Collection of methods that allow declaration and validation of props that are\\n * supplied to React components. Example usage:\\n *\\n *   var Props = require('ReactPropTypes');\\n *   var MyArticle = React.createClass({\\n *     propTypes: {\\n *       // An optional string prop named \\\"description\\\".\\n *       description: Props.string,\\n *\\n *       // A required enum prop named \\\"category\\\".\\n *       category: Props.oneOf(['News','Photos']).isRequired,\\n *\\n *       // A prop named \\\"dialog\\\" that requires an instance of Dialog.\\n *       dialog: Props.instanceOf(Dialog).isRequired\\n *     },\\n *     render: function() { ... }\\n *   });\\n *\\n * A more formal specification of how these methods are used:\\n *\\n *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\\n *   decl := ReactPropTypes.{type}(.isRequired)?\\n *\\n * Each and every declaration produces a function with the same signature. This\\n * allows the creation of custom validation functions. For example:\\n *\\n *  var MyLink = React.createClass({\\n *    propTypes: {\\n *      // An optional string or URI prop named \\\"href\\\".\\n *      href: function(props, propName, componentName) {\\n *        var propValue = props[propName];\\n *        if (propValue != null && typeof propValue !== 'string' &&\\n *            !(propValue instanceof URI)) {\\n *          return new Error(\\n *            'Expected a string or an URI for ' + propName + ' in ' +\\n *            componentName\\n *          );\\n *        }\\n *      }\\n *    },\\n *    render: function() {...}\\n *  });\\n *\\n * @internal\\n */\\n\\nvar ANONYMOUS = '<<anonymous>>';\\n\\nvar ReactPropTypes = {\\n  array: createPrimitiveTypeChecker('array'),\\n  bool: createPrimitiveTypeChecker('boolean'),\\n  func: createPrimitiveTypeChecker('function'),\\n  number: createPrimitiveTypeChecker('number'),\\n  object: createPrimitiveTypeChecker('object'),\\n  string: createPrimitiveTypeChecker('string'),\\n  symbol: createPrimitiveTypeChecker('symbol'),\\n\\n  any: createAnyTypeChecker(),\\n  arrayOf: createArrayOfTypeChecker,\\n  element: createElementTypeChecker(),\\n  instanceOf: createInstanceTypeChecker,\\n  node: createNodeChecker(),\\n  objectOf: createObjectOfTypeChecker,\\n  oneOf: createEnumTypeChecker,\\n  oneOfType: createUnionTypeChecker,\\n  shape: createShapeTypeChecker\\n};\\n\\n/**\\n * inlined Object.is polyfill to avoid requiring consumers ship their own\\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\\n */\\n/*eslint-disable no-self-compare*/\\nfunction is(x, y) {\\n  // SameValue algorithm\\n  if (x === y) {\\n    // Steps 1-5, 7-10\\n    // Steps 6.b-6.e: +0 != -0\\n    return x !== 0 || 1 / x === 1 / y;\\n  } else {\\n    // Step 6.a: NaN == NaN\\n    return x !== x && y !== y;\\n  }\\n}\\n/*eslint-enable no-self-compare*/\\n\\n/**\\n * We use an Error-like object for backward compatibility as people may call\\n * PropTypes directly and inspect their output. However we don't use real\\n * Errors anymore. We don't inspect their stack anyway, and creating them\\n * is prohibitively expensive if they are created too often, such as what\\n * happens in oneOfType() for any type before the one that matched.\\n */\\nfunction PropTypeError(message) {\\n  this.message = message;\\n  this.stack = '';\\n}\\n// Make `instanceof Error` still work for returned errors.\\nPropTypeError.prototype = Error.prototype;\\n\\nfunction createChainableTypeChecker(validate) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    var manualPropTypeCallCache = {};\\n  }\\n  function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\\n    componentName = componentName || ANONYMOUS;\\n    propFullName = propFullName || propName;\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (secret !== ReactPropTypesSecret && typeof console !== 'undefined') {\\n        var cacheKey = componentName + ':' + propName;\\n        if (!manualPropTypeCallCache[cacheKey]) {\\n          process.env.NODE_ENV !== 'production' ? warning(false, 'You are manually calling a React.PropTypes validation ' + 'function for the `%s` prop on `%s`. This is deprecated ' + 'and will not work in production with the next major version. ' + 'You may be seeing this warning due to a third-party PropTypes ' + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.', propFullName, componentName) : void 0;\\n          manualPropTypeCallCache[cacheKey] = true;\\n        }\\n      }\\n    }\\n    if (props[propName] == null) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      if (isRequired) {\\n        if (props[propName] === null) {\\n          return new PropTypeError('The ' + locationName + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\\n        }\\n        return new PropTypeError('The ' + locationName + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\\n      }\\n      return null;\\n    } else {\\n      return validate(props, propName, componentName, location, propFullName);\\n    }\\n  }\\n\\n  var chainedCheckType = checkType.bind(null, false);\\n  chainedCheckType.isRequired = checkType.bind(null, true);\\n\\n  return chainedCheckType;\\n}\\n\\nfunction createPrimitiveTypeChecker(expectedType) {\\n  function validate(props, propName, componentName, location, propFullName, secret) {\\n    var propValue = props[propName];\\n    var propType = getPropType(propValue);\\n    if (propType !== expectedType) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      // `propValue` being instance of, say, date/regexp, pass the 'object'\\n      // check, but we can offer a more precise error message here rather than\\n      // 'of type `object`'.\\n      var preciseType = getPreciseType(propValue);\\n\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createAnyTypeChecker() {\\n  return createChainableTypeChecker(emptyFunction.thatReturns(null));\\n}\\n\\nfunction createArrayOfTypeChecker(typeChecker) {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    if (typeof typeChecker !== 'function') {\\n      return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\\n    }\\n    var propValue = props[propName];\\n    if (!Array.isArray(propValue)) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      var propType = getPropType(propValue);\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\\n    }\\n    for (var i = 0; i < propValue.length; i++) {\\n      var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\\n      if (error instanceof Error) {\\n        return error;\\n      }\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createElementTypeChecker() {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    var propValue = props[propName];\\n    if (!ReactElement.isValidElement(propValue)) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      var propType = getPropType(propValue);\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createInstanceTypeChecker(expectedClass) {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    if (!(props[propName] instanceof expectedClass)) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      var expectedClassName = expectedClass.name || ANONYMOUS;\\n      var actualClassName = getClassName(props[propName]);\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createEnumTypeChecker(expectedValues) {\\n  if (!Array.isArray(expectedValues)) {\\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0;\\n    return emptyFunction.thatReturnsNull;\\n  }\\n\\n  function validate(props, propName, componentName, location, propFullName) {\\n    var propValue = props[propName];\\n    for (var i = 0; i < expectedValues.length; i++) {\\n      if (is(propValue, expectedValues[i])) {\\n        return null;\\n      }\\n    }\\n\\n    var locationName = ReactPropTypeLocationNames[location];\\n    var valuesString = JSON.stringify(expectedValues);\\n    return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createObjectOfTypeChecker(typeChecker) {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    if (typeof typeChecker !== 'function') {\\n      return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\\n    }\\n    var propValue = props[propName];\\n    var propType = getPropType(propValue);\\n    if (propType !== 'object') {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\\n    }\\n    for (var key in propValue) {\\n      if (propValue.hasOwnProperty(key)) {\\n        var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\\n        if (error instanceof Error) {\\n          return error;\\n        }\\n      }\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createUnionTypeChecker(arrayOfTypeCheckers) {\\n  if (!Array.isArray(arrayOfTypeCheckers)) {\\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\\n    return emptyFunction.thatReturnsNull;\\n  }\\n\\n  function validate(props, propName, componentName, location, propFullName) {\\n    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\\n      var checker = arrayOfTypeCheckers[i];\\n      if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\\n        return null;\\n      }\\n    }\\n\\n    var locationName = ReactPropTypeLocationNames[location];\\n    return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createNodeChecker() {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    if (!isNode(props[propName])) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createShapeTypeChecker(shapeTypes) {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    var propValue = props[propName];\\n    var propType = getPropType(propValue);\\n    if (propType !== 'object') {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\\n    }\\n    for (var key in shapeTypes) {\\n      var checker = shapeTypes[key];\\n      if (!checker) {\\n        continue;\\n      }\\n      var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\\n      if (error) {\\n        return error;\\n      }\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction isNode(propValue) {\\n  switch (typeof propValue) {\\n    case 'number':\\n    case 'string':\\n    case 'undefined':\\n      return true;\\n    case 'boolean':\\n      return !propValue;\\n    case 'object':\\n      if (Array.isArray(propValue)) {\\n        return propValue.every(isNode);\\n      }\\n      if (propValue === null || ReactElement.isValidElement(propValue)) {\\n        return true;\\n      }\\n\\n      var iteratorFn = getIteratorFn(propValue);\\n      if (iteratorFn) {\\n        var iterator = iteratorFn.call(propValue);\\n        var step;\\n        if (iteratorFn !== propValue.entries) {\\n          while (!(step = iterator.next()).done) {\\n            if (!isNode(step.value)) {\\n              return false;\\n            }\\n          }\\n        } else {\\n          // Iterator will provide entry [k,v] tuples rather than values.\\n          while (!(step = iterator.next()).done) {\\n            var entry = step.value;\\n            if (entry) {\\n              if (!isNode(entry[1])) {\\n                return false;\\n              }\\n            }\\n          }\\n        }\\n      } else {\\n        return false;\\n      }\\n\\n      return true;\\n    default:\\n      return false;\\n  }\\n}\\n\\nfunction isSymbol(propType, propValue) {\\n  // Native Symbol.\\n  if (propType === 'symbol') {\\n    return true;\\n  }\\n\\n  // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\\n  if (propValue['@@toStringTag'] === 'Symbol') {\\n    return true;\\n  }\\n\\n  // Fallback for non-spec compliant Symbols which are polyfilled.\\n  if (typeof Symbol === 'function' && propValue instanceof Symbol) {\\n    return true;\\n  }\\n\\n  return false;\\n}\\n\\n// Equivalent of `typeof` but with special handling for array and regexp.\\nfunction getPropType(propValue) {\\n  var propType = typeof propValue;\\n  if (Array.isArray(propValue)) {\\n    return 'array';\\n  }\\n  if (propValue instanceof RegExp) {\\n    // Old webkits (at least until Android 4.0) return 'function' rather than\\n    // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\\n    // passes PropTypes.object.\\n    return 'object';\\n  }\\n  if (isSymbol(propType, propValue)) {\\n    return 'symbol';\\n  }\\n  return propType;\\n}\\n\\n// This handles more types than `getPropType`. Only used for error messages.\\n// See `createPrimitiveTypeChecker`.\\nfunction getPreciseType(propValue) {\\n  var propType = getPropType(propValue);\\n  if (propType === 'object') {\\n    if (propValue instanceof Date) {\\n      return 'date';\\n    } else if (propValue instanceof RegExp) {\\n      return 'regexp';\\n    }\\n  }\\n  return propType;\\n}\\n\\n// Returns class name of the object, if any.\\nfunction getClassName(propValue) {\\n  if (!propValue.constructor || !propValue.constructor.name) {\\n    return ANONYMOUS;\\n  }\\n  return propValue.constructor.name;\\n}\\n\\nmodule.exports = ReactPropTypes;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactPropTypes.js\\n// module id = 29\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactPropTypes.js?\");\n\n/***/ },\n/* 30 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/ReactVersion.js ***!\n  \\*************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nmodule.exports = '15.4.1';\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactVersion.js\\n// module id = 30\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactVersion.js?\");\n\n/***/ },\n/* 31 */\n/*!**********************************!*\\\n  !*** ./~/react/lib/onlyChild.js ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\n/**\\n * Returns the first child in a collection of children and verifies that there\\n * is only one child in the collection.\\n *\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.only\\n *\\n * The current implementation of this function assumes that a single child gets\\n * passed without a wrapper, but the purpose of this helper function is to\\n * abstract away the particular structure of children.\\n *\\n * @param {?object} children Child collection structure.\\n * @return {ReactElement} The first and only `ReactElement` contained in the\\n * structure.\\n */\\nfunction onlyChild(children) {\\n  !ReactElement.isValidElement(children) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'React.Children.only expected to receive a single React element child.') : _prodInvariant('143') : void 0;\\n  return children;\\n}\\n\\nmodule.exports = onlyChild;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/onlyChild.js\\n// module id = 31\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/onlyChild.js?\");\n\n/***/ },\n/* 32 */\n/*!****************************!*\\\n  !*** ./~/lodash/lodash.js ***!\n  \\****************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global, module) {/**\\n * @license\\n * Lodash <https://lodash.com/>\\n * Copyright JS Foundation and other contributors <https://js.foundation/>\\n * Released under MIT license <https://lodash.com/license>\\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\\n */\\n;(function() {\\n\\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\\n  var undefined;\\n\\n  /** Used as the semantic version number. */\\n  var VERSION = '4.17.2';\\n\\n  /** Used as the size to enable large array optimizations. */\\n  var LARGE_ARRAY_SIZE = 200;\\n\\n  /** Error message constants. */\\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\\n      FUNC_ERROR_TEXT = 'Expected a function';\\n\\n  /** Used to stand-in for `undefined` hash values. */\\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\\n\\n  /** Used as the maximum memoize cache size. */\\n  var MAX_MEMOIZE_SIZE = 500;\\n\\n  /** Used as the internal argument placeholder. */\\n  var PLACEHOLDER = '__lodash_placeholder__';\\n\\n  /** Used to compose bitmasks for cloning. */\\n  var CLONE_DEEP_FLAG = 1,\\n      CLONE_FLAT_FLAG = 2,\\n      CLONE_SYMBOLS_FLAG = 4;\\n\\n  /** Used to compose bitmasks for value comparisons. */\\n  var COMPARE_PARTIAL_FLAG = 1,\\n      COMPARE_UNORDERED_FLAG = 2;\\n\\n  /** Used to compose bitmasks for function metadata. */\\n  var WRAP_BIND_FLAG = 1,\\n      WRAP_BIND_KEY_FLAG = 2,\\n      WRAP_CURRY_BOUND_FLAG = 4,\\n      WRAP_CURRY_FLAG = 8,\\n      WRAP_CURRY_RIGHT_FLAG = 16,\\n      WRAP_PARTIAL_FLAG = 32,\\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\\n      WRAP_ARY_FLAG = 128,\\n      WRAP_REARG_FLAG = 256,\\n      WRAP_FLIP_FLAG = 512;\\n\\n  /** Used as default options for `_.truncate`. */\\n  var DEFAULT_TRUNC_LENGTH = 30,\\n      DEFAULT_TRUNC_OMISSION = '...';\\n\\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\\n  var HOT_COUNT = 800,\\n      HOT_SPAN = 16;\\n\\n  /** Used to indicate the type of lazy iteratees. */\\n  var LAZY_FILTER_FLAG = 1,\\n      LAZY_MAP_FLAG = 2,\\n      LAZY_WHILE_FLAG = 3;\\n\\n  /** Used as references for various `Number` constants. */\\n  var INFINITY = 1 / 0,\\n      MAX_SAFE_INTEGER = 9007199254740991,\\n      MAX_INTEGER = 1.7976931348623157e+308,\\n      NAN = 0 / 0;\\n\\n  /** Used as references for the maximum length and index of an array. */\\n  var MAX_ARRAY_LENGTH = 4294967295,\\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\\n\\n  /** Used to associate wrap methods with their bit flags. */\\n  var wrapFlags = [\\n    ['ary', WRAP_ARY_FLAG],\\n    ['bind', WRAP_BIND_FLAG],\\n    ['bindKey', WRAP_BIND_KEY_FLAG],\\n    ['curry', WRAP_CURRY_FLAG],\\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\\n    ['flip', WRAP_FLIP_FLAG],\\n    ['partial', WRAP_PARTIAL_FLAG],\\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\\n    ['rearg', WRAP_REARG_FLAG]\\n  ];\\n\\n  /** `Object#toString` result references. */\\n  var argsTag = '[object Arguments]',\\n      arrayTag = '[object Array]',\\n      asyncTag = '[object AsyncFunction]',\\n      boolTag = '[object Boolean]',\\n      dateTag = '[object Date]',\\n      domExcTag = '[object DOMException]',\\n      errorTag = '[object Error]',\\n      funcTag = '[object Function]',\\n      genTag = '[object GeneratorFunction]',\\n      mapTag = '[object Map]',\\n      numberTag = '[object Number]',\\n      nullTag = '[object Null]',\\n      objectTag = '[object Object]',\\n      promiseTag = '[object Promise]',\\n      proxyTag = '[object Proxy]',\\n      regexpTag = '[object RegExp]',\\n      setTag = '[object Set]',\\n      stringTag = '[object String]',\\n      symbolTag = '[object Symbol]',\\n      undefinedTag = '[object Undefined]',\\n      weakMapTag = '[object WeakMap]',\\n      weakSetTag = '[object WeakSet]';\\n\\n  var arrayBufferTag = '[object ArrayBuffer]',\\n      dataViewTag = '[object DataView]',\\n      float32Tag = '[object Float32Array]',\\n      float64Tag = '[object Float64Array]',\\n      int8Tag = '[object Int8Array]',\\n      int16Tag = '[object Int16Array]',\\n      int32Tag = '[object Int32Array]',\\n      uint8Tag = '[object Uint8Array]',\\n      uint8ClampedTag = '[object Uint8ClampedArray]',\\n      uint16Tag = '[object Uint16Array]',\\n      uint32Tag = '[object Uint32Array]';\\n\\n  /** Used to match empty string literals in compiled template source. */\\n  var reEmptyStringLeading = /\\\\b__p \\\\+= '';/g,\\n      reEmptyStringMiddle = /\\\\b(__p \\\\+=) '' \\\\+/g,\\n      reEmptyStringTrailing = /(__e\\\\(.*?\\\\)|\\\\b__t\\\\)) \\\\+\\\\n'';/g;\\n\\n  /** Used to match HTML entities and HTML characters. */\\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\\n      reUnescapedHtml = /[&<>\\\"']/g,\\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\\n\\n  /** Used to match template delimiters. */\\n  var reEscape = /<%-([\\\\s\\\\S]+?)%>/g,\\n      reEvaluate = /<%([\\\\s\\\\S]+?)%>/g,\\n      reInterpolate = /<%=([\\\\s\\\\S]+?)%>/g;\\n\\n  /** Used to match property names within property paths. */\\n  var reIsDeepProp = /\\\\.|\\\\[(?:[^[\\\\]]*|([\\\"'])(?:(?!\\\\1)[^\\\\\\\\]|\\\\\\\\.)*?\\\\1)\\\\]/,\\n      reIsPlainProp = /^\\\\w*$/,\\n      reLeadingDot = /^\\\\./,\\n      rePropName = /[^.[\\\\]]+|\\\\[(?:(-?\\\\d+(?:\\\\.\\\\d+)?)|([\\\"'])((?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\.)*?)\\\\2)\\\\]|(?=(?:\\\\.|\\\\[\\\\])(?:\\\\.|\\\\[\\\\]|$))/g;\\n\\n  /**\\n   * Used to match `RegExp`\\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\\n   */\\n  var reRegExpChar = /[\\\\\\\\^$.*+?()[\\\\]{}|]/g,\\n      reHasRegExpChar = RegExp(reRegExpChar.source);\\n\\n  /** Used to match leading and trailing whitespace. */\\n  var reTrim = /^\\\\s+|\\\\s+$/g,\\n      reTrimStart = /^\\\\s+/,\\n      reTrimEnd = /\\\\s+$/;\\n\\n  /** Used to match wrap detail comments. */\\n  var reWrapComment = /\\\\{(?:\\\\n\\\\/\\\\* \\\\[wrapped with .+\\\\] \\\\*\\\\/)?\\\\n?/,\\n      reWrapDetails = /\\\\{\\\\n\\\\/\\\\* \\\\[wrapped with (.+)\\\\] \\\\*/,\\n      reSplitDetails = /,? & /;\\n\\n  /** Used to match words composed of alphanumeric characters. */\\n  var reAsciiWord = /[^\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\x7f]+/g;\\n\\n  /** Used to match backslashes in property paths. */\\n  var reEscapeChar = /\\\\\\\\(\\\\\\\\)?/g;\\n\\n  /**\\n   * Used to match\\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\\n   */\\n  var reEsTemplate = /\\\\$\\\\{([^\\\\\\\\}]*(?:\\\\\\\\.[^\\\\\\\\}]*)*)\\\\}/g;\\n\\n  /** Used to match `RegExp` flags from their coerced string values. */\\n  var reFlags = /\\\\w*$/;\\n\\n  /** Used to detect bad signed hexadecimal string values. */\\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\\n\\n  /** Used to detect binary string values. */\\n  var reIsBinary = /^0b[01]+$/i;\\n\\n  /** Used to detect host constructors (Safari). */\\n  var reIsHostCtor = /^\\\\[object .+?Constructor\\\\]$/;\\n\\n  /** Used to detect octal string values. */\\n  var reIsOctal = /^0o[0-7]+$/i;\\n\\n  /** Used to detect unsigned integer values. */\\n  var reIsUint = /^(?:0|[1-9]\\\\d*)$/;\\n\\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\\n  var reLatin = /[\\\\xc0-\\\\xd6\\\\xd8-\\\\xf6\\\\xf8-\\\\xff\\\\u0100-\\\\u017f]/g;\\n\\n  /** Used to ensure capturing order of template delimiters. */\\n  var reNoMatch = /($^)/;\\n\\n  /** Used to match unescaped characters in compiled string literals. */\\n  var reUnescapedString = /['\\\\n\\\\r\\\\u2028\\\\u2029\\\\\\\\]/g;\\n\\n  /** Used to compose unicode character classes. */\\n  var rsAstralRange = '\\\\\\\\ud800-\\\\\\\\udfff',\\n      rsComboMarksRange = '\\\\\\\\u0300-\\\\\\\\u036f',\\n      reComboHalfMarksRange = '\\\\\\\\ufe20-\\\\\\\\ufe2f',\\n      rsComboSymbolsRange = '\\\\\\\\u20d0-\\\\\\\\u20ff',\\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\\n      rsDingbatRange = '\\\\\\\\u2700-\\\\\\\\u27bf',\\n      rsLowerRange = 'a-z\\\\\\\\xdf-\\\\\\\\xf6\\\\\\\\xf8-\\\\\\\\xff',\\n      rsMathOpRange = '\\\\\\\\xac\\\\\\\\xb1\\\\\\\\xd7\\\\\\\\xf7',\\n      rsNonCharRange = '\\\\\\\\x00-\\\\\\\\x2f\\\\\\\\x3a-\\\\\\\\x40\\\\\\\\x5b-\\\\\\\\x60\\\\\\\\x7b-\\\\\\\\xbf',\\n      rsPunctuationRange = '\\\\\\\\u2000-\\\\\\\\u206f',\\n      rsSpaceRange = ' \\\\\\\\t\\\\\\\\x0b\\\\\\\\f\\\\\\\\xa0\\\\\\\\ufeff\\\\\\\\n\\\\\\\\r\\\\\\\\u2028\\\\\\\\u2029\\\\\\\\u1680\\\\\\\\u180e\\\\\\\\u2000\\\\\\\\u2001\\\\\\\\u2002\\\\\\\\u2003\\\\\\\\u2004\\\\\\\\u2005\\\\\\\\u2006\\\\\\\\u2007\\\\\\\\u2008\\\\\\\\u2009\\\\\\\\u200a\\\\\\\\u202f\\\\\\\\u205f\\\\\\\\u3000',\\n      rsUpperRange = 'A-Z\\\\\\\\xc0-\\\\\\\\xd6\\\\\\\\xd8-\\\\\\\\xde',\\n      rsVarRange = '\\\\\\\\ufe0e\\\\\\\\ufe0f',\\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\\n\\n  /** Used to compose unicode capture groups. */\\n  var rsApos = \\\"['\\\\u2019]\\\",\\n      rsAstral = '[' + rsAstralRange + ']',\\n      rsBreak = '[' + rsBreakRange + ']',\\n      rsCombo = '[' + rsComboRange + ']',\\n      rsDigits = '\\\\\\\\d+',\\n      rsDingbat = '[' + rsDingbatRange + ']',\\n      rsLower = '[' + rsLowerRange + ']',\\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\\n      rsFitz = '\\\\\\\\ud83c[\\\\\\\\udffb-\\\\\\\\udfff]',\\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\\n      rsNonAstral = '[^' + rsAstralRange + ']',\\n      rsRegional = '(?:\\\\\\\\ud83c[\\\\\\\\udde6-\\\\\\\\uddff]){2}',\\n      rsSurrPair = '[\\\\\\\\ud800-\\\\\\\\udbff][\\\\\\\\udc00-\\\\\\\\udfff]',\\n      rsUpper = '[' + rsUpperRange + ']',\\n      rsZWJ = '\\\\\\\\u200d';\\n\\n  /** Used to compose unicode regexes. */\\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\\n      reOptMod = rsModifier + '?',\\n      rsOptVar = '[' + rsVarRange + ']?',\\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\\n      rsOrdLower = '\\\\\\\\d*(?:(?:1st|2nd|3rd|(?![123])\\\\\\\\dth)\\\\\\\\b)',\\n      rsOrdUpper = '\\\\\\\\d*(?:(?:1ST|2ND|3RD|(?![123])\\\\\\\\dTH)\\\\\\\\b)',\\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\\n\\n  /** Used to match apostrophes. */\\n  var reApos = RegExp(rsApos, 'g');\\n\\n  /**\\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\\n   */\\n  var reComboMark = RegExp(rsCombo, 'g');\\n\\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\\n\\n  /** Used to match complex or compound words. */\\n  var reUnicodeWord = RegExp([\\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\\n    rsUpper + '+' + rsOptContrUpper,\\n    rsOrdUpper,\\n    rsOrdLower,\\n    rsDigits,\\n    rsEmoji\\n  ].join('|'), 'g');\\n\\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\\n\\n  /** Used to detect strings that need a more robust regexp to match words. */\\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\\n\\n  /** Used to assign default `context` object properties. */\\n  var contextProps = [\\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\\n  ];\\n\\n  /** Used to make template sourceURLs easier to identify. */\\n  var templateCounter = -1;\\n\\n  /** Used to identify `toStringTag` values of typed arrays. */\\n  var typedArrayTags = {};\\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\\n  typedArrayTags[uint32Tag] = true;\\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\\n  typedArrayTags[weakMapTag] = false;\\n\\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\\n  var cloneableTags = {};\\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\\n  cloneableTags[weakMapTag] = false;\\n\\n  /** Used to map Latin Unicode letters to basic Latin letters. */\\n  var deburredLetters = {\\n    // Latin-1 Supplement block.\\n    '\\\\xc0': 'A',  '\\\\xc1': 'A', '\\\\xc2': 'A', '\\\\xc3': 'A', '\\\\xc4': 'A', '\\\\xc5': 'A',\\n    '\\\\xe0': 'a',  '\\\\xe1': 'a', '\\\\xe2': 'a', '\\\\xe3': 'a', '\\\\xe4': 'a', '\\\\xe5': 'a',\\n    '\\\\xc7': 'C',  '\\\\xe7': 'c',\\n    '\\\\xd0': 'D',  '\\\\xf0': 'd',\\n    '\\\\xc8': 'E',  '\\\\xc9': 'E', '\\\\xca': 'E', '\\\\xcb': 'E',\\n    '\\\\xe8': 'e',  '\\\\xe9': 'e', '\\\\xea': 'e', '\\\\xeb': 'e',\\n    '\\\\xcc': 'I',  '\\\\xcd': 'I', '\\\\xce': 'I', '\\\\xcf': 'I',\\n    '\\\\xec': 'i',  '\\\\xed': 'i', '\\\\xee': 'i', '\\\\xef': 'i',\\n    '\\\\xd1': 'N',  '\\\\xf1': 'n',\\n    '\\\\xd2': 'O',  '\\\\xd3': 'O', '\\\\xd4': 'O', '\\\\xd5': 'O', '\\\\xd6': 'O', '\\\\xd8': 'O',\\n    '\\\\xf2': 'o',  '\\\\xf3': 'o', '\\\\xf4': 'o', '\\\\xf5': 'o', '\\\\xf6': 'o', '\\\\xf8': 'o',\\n    '\\\\xd9': 'U',  '\\\\xda': 'U', '\\\\xdb': 'U', '\\\\xdc': 'U',\\n    '\\\\xf9': 'u',  '\\\\xfa': 'u', '\\\\xfb': 'u', '\\\\xfc': 'u',\\n    '\\\\xdd': 'Y',  '\\\\xfd': 'y', '\\\\xff': 'y',\\n    '\\\\xc6': 'Ae', '\\\\xe6': 'ae',\\n    '\\\\xde': 'Th', '\\\\xfe': 'th',\\n    '\\\\xdf': 'ss',\\n    // Latin Extended-A block.\\n    '\\\\u0100': 'A',  '\\\\u0102': 'A', '\\\\u0104': 'A',\\n    '\\\\u0101': 'a',  '\\\\u0103': 'a', '\\\\u0105': 'a',\\n    '\\\\u0106': 'C',  '\\\\u0108': 'C', '\\\\u010a': 'C', '\\\\u010c': 'C',\\n    '\\\\u0107': 'c',  '\\\\u0109': 'c', '\\\\u010b': 'c', '\\\\u010d': 'c',\\n    '\\\\u010e': 'D',  '\\\\u0110': 'D', '\\\\u010f': 'd', '\\\\u0111': 'd',\\n    '\\\\u0112': 'E',  '\\\\u0114': 'E', '\\\\u0116': 'E', '\\\\u0118': 'E', '\\\\u011a': 'E',\\n    '\\\\u0113': 'e',  '\\\\u0115': 'e', '\\\\u0117': 'e', '\\\\u0119': 'e', '\\\\u011b': 'e',\\n    '\\\\u011c': 'G',  '\\\\u011e': 'G', '\\\\u0120': 'G', '\\\\u0122': 'G',\\n    '\\\\u011d': 'g',  '\\\\u011f': 'g', '\\\\u0121': 'g', '\\\\u0123': 'g',\\n    '\\\\u0124': 'H',  '\\\\u0126': 'H', '\\\\u0125': 'h', '\\\\u0127': 'h',\\n    '\\\\u0128': 'I',  '\\\\u012a': 'I', '\\\\u012c': 'I', '\\\\u012e': 'I', '\\\\u0130': 'I',\\n    '\\\\u0129': 'i',  '\\\\u012b': 'i', '\\\\u012d': 'i', '\\\\u012f': 'i', '\\\\u0131': 'i',\\n    '\\\\u0134': 'J',  '\\\\u0135': 'j',\\n    '\\\\u0136': 'K',  '\\\\u0137': 'k', '\\\\u0138': 'k',\\n    '\\\\u0139': 'L',  '\\\\u013b': 'L', '\\\\u013d': 'L', '\\\\u013f': 'L', '\\\\u0141': 'L',\\n    '\\\\u013a': 'l',  '\\\\u013c': 'l', '\\\\u013e': 'l', '\\\\u0140': 'l', '\\\\u0142': 'l',\\n    '\\\\u0143': 'N',  '\\\\u0145': 'N', '\\\\u0147': 'N', '\\\\u014a': 'N',\\n    '\\\\u0144': 'n',  '\\\\u0146': 'n', '\\\\u0148': 'n', '\\\\u014b': 'n',\\n    '\\\\u014c': 'O',  '\\\\u014e': 'O', '\\\\u0150': 'O',\\n    '\\\\u014d': 'o',  '\\\\u014f': 'o', '\\\\u0151': 'o',\\n    '\\\\u0154': 'R',  '\\\\u0156': 'R', '\\\\u0158': 'R',\\n    '\\\\u0155': 'r',  '\\\\u0157': 'r', '\\\\u0159': 'r',\\n    '\\\\u015a': 'S',  '\\\\u015c': 'S', '\\\\u015e': 'S', '\\\\u0160': 'S',\\n    '\\\\u015b': 's',  '\\\\u015d': 's', '\\\\u015f': 's', '\\\\u0161': 's',\\n    '\\\\u0162': 'T',  '\\\\u0164': 'T', '\\\\u0166': 'T',\\n    '\\\\u0163': 't',  '\\\\u0165': 't', '\\\\u0167': 't',\\n    '\\\\u0168': 'U',  '\\\\u016a': 'U', '\\\\u016c': 'U', '\\\\u016e': 'U', '\\\\u0170': 'U', '\\\\u0172': 'U',\\n    '\\\\u0169': 'u',  '\\\\u016b': 'u', '\\\\u016d': 'u', '\\\\u016f': 'u', '\\\\u0171': 'u', '\\\\u0173': 'u',\\n    '\\\\u0174': 'W',  '\\\\u0175': 'w',\\n    '\\\\u0176': 'Y',  '\\\\u0177': 'y', '\\\\u0178': 'Y',\\n    '\\\\u0179': 'Z',  '\\\\u017b': 'Z', '\\\\u017d': 'Z',\\n    '\\\\u017a': 'z',  '\\\\u017c': 'z', '\\\\u017e': 'z',\\n    '\\\\u0132': 'IJ', '\\\\u0133': 'ij',\\n    '\\\\u0152': 'Oe', '\\\\u0153': 'oe',\\n    '\\\\u0149': \\\"'n\\\", '\\\\u017f': 's'\\n  };\\n\\n  /** Used to map characters to HTML entities. */\\n  var htmlEscapes = {\\n    '&': '&amp;',\\n    '<': '&lt;',\\n    '>': '&gt;',\\n    '\\\"': '&quot;',\\n    \\\"'\\\": '&#39;'\\n  };\\n\\n  /** Used to map HTML entities to characters. */\\n  var htmlUnescapes = {\\n    '&amp;': '&',\\n    '&lt;': '<',\\n    '&gt;': '>',\\n    '&quot;': '\\\"',\\n    '&#39;': \\\"'\\\"\\n  };\\n\\n  /** Used to escape characters for inclusion in compiled string literals. */\\n  var stringEscapes = {\\n    '\\\\\\\\': '\\\\\\\\',\\n    \\\"'\\\": \\\"'\\\",\\n    '\\\\n': 'n',\\n    '\\\\r': 'r',\\n    '\\\\u2028': 'u2028',\\n    '\\\\u2029': 'u2029'\\n  };\\n\\n  /** Built-in method references without a dependency on `root`. */\\n  var freeParseFloat = parseFloat,\\n      freeParseInt = parseInt;\\n\\n  /** Detect free variable `global` from Node.js. */\\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\\n\\n  /** Detect free variable `self`. */\\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\\n\\n  /** Used as a reference to the global object. */\\n  var root = freeGlobal || freeSelf || Function('return this')();\\n\\n  /** Detect free variable `exports`. */\\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\\n\\n  /** Detect free variable `module`. */\\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\\n\\n  /** Detect the popular CommonJS extension `module.exports`. */\\n  var moduleExports = freeModule && freeModule.exports === freeExports;\\n\\n  /** Detect free variable `process` from Node.js. */\\n  var freeProcess = moduleExports && freeGlobal.process;\\n\\n  /** Used to access faster Node.js helpers. */\\n  var nodeUtil = (function() {\\n    try {\\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\\n    } catch (e) {}\\n  }());\\n\\n  /* Node.js helper references. */\\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\\n\\n  /*--------------------------------------------------------------------------*/\\n\\n  /**\\n   * Adds the key-value `pair` to `map`.\\n   *\\n   * @private\\n   * @param {Object} map The map to modify.\\n   * @param {Array} pair The key-value pair to add.\\n   * @returns {Object} Returns `map`.\\n   */\\n  function addMapEntry(map, pair) {\\n    // Don't return `map.set` because it's not chainable in IE 11.\\n    map.set(pair[0], pair[1]);\\n    return map;\\n  }\\n\\n  /**\\n   * Adds `value` to `set`.\\n   *\\n   * @private\\n   * @param {Object} set The set to modify.\\n   * @param {*} value The value to add.\\n   * @returns {Object} Returns `set`.\\n   */\\n  function addSetEntry(set, value) {\\n    // Don't return `set.add` because it's not chainable in IE 11.\\n    set.add(value);\\n    return set;\\n  }\\n\\n  /**\\n   * A faster alternative to `Function#apply`, this function invokes `func`\\n   * with the `this` binding of `thisArg` and the arguments of `args`.\\n   *\\n   * @private\\n   * @param {Function} func The function to invoke.\\n   * @param {*} thisArg The `this` binding of `func`.\\n   * @param {Array} args The arguments to invoke `func` with.\\n   * @returns {*} Returns the result of `func`.\\n   */\\n  function apply(func, thisArg, args) {\\n    switch (args.length) {\\n      case 0: return func.call(thisArg);\\n      case 1: return func.call(thisArg, args[0]);\\n      case 2: return func.call(thisArg, args[0], args[1]);\\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\\n    }\\n    return func.apply(thisArg, args);\\n  }\\n\\n  /**\\n   * A specialized version of `baseAggregator` for arrays.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} setter The function to set `accumulator` values.\\n   * @param {Function} iteratee The iteratee to transform keys.\\n   * @param {Object} accumulator The initial aggregated object.\\n   * @returns {Function} Returns `accumulator`.\\n   */\\n  function arrayAggregator(array, setter, iteratee, accumulator) {\\n    var index = -1,\\n        length = array == null ? 0 : array.length;\\n\\n    while (++index < length) {\\n      var value = array[index];\\n      setter(accumulator, value, iteratee(value), array);\\n    }\\n    return accumulator;\\n  }\\n\\n  /**\\n   * A specialized version of `_.forEach` for arrays without support for\\n   * iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @returns {Array} Returns `array`.\\n   */\\n  function arrayEach(array, iteratee) {\\n    var index = -1,\\n        length = array == null ? 0 : array.length;\\n\\n    while (++index < length) {\\n      if (iteratee(array[index], index, array) === false) {\\n        break;\\n      }\\n    }\\n    return array;\\n  }\\n\\n  /**\\n   * A specialized version of `_.forEachRight` for arrays without support for\\n   * iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @returns {Array} Returns `array`.\\n   */\\n  function arrayEachRight(array, iteratee) {\\n    var length = array == null ? 0 : array.length;\\n\\n    while (length--) {\\n      if (iteratee(array[length], length, array) === false) {\\n        break;\\n      }\\n    }\\n    return array;\\n  }\\n\\n  /**\\n   * A specialized version of `_.every` for arrays without support for\\n   * iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} predicate The function invoked per iteration.\\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\\n   *  else `false`.\\n   */\\n  function arrayEvery(array, predicate) {\\n    var index = -1,\\n        length = array == null ? 0 : array.length;\\n\\n    while (++index < length) {\\n      if (!predicate(array[index], index, array)) {\\n        return false;\\n      }\\n    }\\n    return true;\\n  }\\n\\n  /**\\n   * A specialized version of `_.filter` for arrays without support for\\n   * iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} predicate The function invoked per iteration.\\n   * @returns {Array} Returns the new filtered array.\\n   */\\n  function arrayFilter(array, predicate) {\\n    var index = -1,\\n        length = array == null ? 0 : array.length,\\n        resIndex = 0,\\n        result = [];\\n\\n    while (++index < length) {\\n      var value = array[index];\\n      if (predicate(value, index, array)) {\\n        result[resIndex++] = value;\\n      }\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * A specialized version of `_.includes` for arrays without support for\\n   * specifying an index to search from.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to inspect.\\n   * @param {*} target The value to search for.\\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\\n   */\\n  function arrayIncludes(array, value) {\\n    var length = array == null ? 0 : array.length;\\n    return !!length && baseIndexOf(array, value, 0) > -1;\\n  }\\n\\n  /**\\n   * This function is like `arrayIncludes` except that it accepts a comparator.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to inspect.\\n   * @param {*} target The value to search for.\\n   * @param {Function} comparator The comparator invoked per element.\\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\\n   */\\n  function arrayIncludesWith(array, value, comparator) {\\n    var index = -1,\\n        length = array == null ? 0 : array.length;\\n\\n    while (++index < length) {\\n      if (comparator(value, array[index])) {\\n        return true;\\n      }\\n    }\\n    return false;\\n  }\\n\\n  /**\\n   * A specialized version of `_.map` for arrays without support for iteratee\\n   * shorthands.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @returns {Array} Returns the new mapped array.\\n   */\\n  function arrayMap(array, iteratee) {\\n    var index = -1,\\n        length = array == null ? 0 : array.length,\\n        result = Array(length);\\n\\n    while (++index < length) {\\n      result[index] = iteratee(array[index], index, array);\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * Appends the elements of `values` to `array`.\\n   *\\n   * @private\\n   * @param {Array} array The array to modify.\\n   * @param {Array} values The values to append.\\n   * @returns {Array} Returns `array`.\\n   */\\n  function arrayPush(array, values) {\\n    var index = -1,\\n        length = values.length,\\n        offset = array.length;\\n\\n    while (++index < length) {\\n      array[offset + index] = values[index];\\n    }\\n    return array;\\n  }\\n\\n  /**\\n   * A specialized version of `_.reduce` for arrays without support for\\n   * iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @param {*} [accumulator] The initial value.\\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\\n   *  the initial value.\\n   * @returns {*} Returns the accumulated value.\\n   */\\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\\n    var index = -1,\\n        length = array == null ? 0 : array.length;\\n\\n    if (initAccum && length) {\\n      accumulator = array[++index];\\n    }\\n    while (++index < length) {\\n      accumulator = iteratee(accumulator, array[index], index, array);\\n    }\\n    return accumulator;\\n  }\\n\\n  /**\\n   * A specialized version of `_.reduceRight` for arrays without support for\\n   * iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @param {*} [accumulator] The initial value.\\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\\n   *  the initial value.\\n   * @returns {*} Returns the accumulated value.\\n   */\\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\\n    var length = array == null ? 0 : array.length;\\n    if (initAccum && length) {\\n      accumulator = array[--length];\\n    }\\n    while (length--) {\\n      accumulator = iteratee(accumulator, array[length], length, array);\\n    }\\n    return accumulator;\\n  }\\n\\n  /**\\n   * A specialized version of `_.some` for arrays without support for iteratee\\n   * shorthands.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} predicate The function invoked per iteration.\\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\\n   *  else `false`.\\n   */\\n  function arraySome(array, predicate) {\\n    var index = -1,\\n        length = array == null ? 0 : array.length;\\n\\n    while (++index < length) {\\n      if (predicate(array[index], index, array)) {\\n        return true;\\n      }\\n    }\\n    return false;\\n  }\\n\\n  /**\\n   * Gets the size of an ASCII `string`.\\n   *\\n   * @private\\n   * @param {string} string The string inspect.\\n   * @returns {number} Returns the string size.\\n   */\\n  var asciiSize = baseProperty('length');\\n\\n  /**\\n   * Converts an ASCII `string` to an array.\\n   *\\n   * @private\\n   * @param {string} string The string to convert.\\n   * @returns {Array} Returns the converted array.\\n   */\\n  function asciiToArray(string) {\\n    return string.split('');\\n  }\\n\\n  /**\\n   * Splits an ASCII `string` into an array of its words.\\n   *\\n   * @private\\n   * @param {string} The string to inspect.\\n   * @returns {Array} Returns the words of `string`.\\n   */\\n  function asciiWords(string) {\\n    return string.match(reAsciiWord) || [];\\n  }\\n\\n  /**\\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\\n   * without support for iteratee shorthands, which iterates over `collection`\\n   * using `eachFunc`.\\n   *\\n   * @private\\n   * @param {Array|Object} collection The collection to inspect.\\n   * @param {Function} predicate The function invoked per iteration.\\n   * @param {Function} eachFunc The function to iterate over `collection`.\\n   * @returns {*} Returns the found element or its key, else `undefined`.\\n   */\\n  function baseFindKey(collection, predicate, eachFunc) {\\n    var result;\\n    eachFunc(collection, function(value, key, collection) {\\n      if (predicate(value, key, collection)) {\\n        result = key;\\n        return false;\\n      }\\n    });\\n    return result;\\n  }\\n\\n  /**\\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\\n   * support for iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} array The array to inspect.\\n   * @param {Function} predicate The function invoked per iteration.\\n   * @param {number} fromIndex The index to search from.\\n   * @param {boolean} [fromRight] Specify iterating from right to left.\\n   * @returns {number} Returns the index of the matched value, else `-1`.\\n   */\\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\\n    var length = array.length,\\n        index = fromIndex + (fromRight ? 1 : -1);\\n\\n    while ((fromRight ? index-- : ++index < length)) {\\n      if (predicate(array[index], index, array)) {\\n        return index;\\n      }\\n    }\\n    return -1;\\n  }\\n\\n  /**\\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\\n   *\\n   * @private\\n   * @param {Array} array The array to inspect.\\n   * @param {*} value The value to search for.\\n   * @param {number} fromIndex The index to search from.\\n   * @returns {number} Returns the index of the matched value, else `-1`.\\n   */\\n  function baseIndexOf(array, value, fromIndex) {\\n    return value === value\\n      ? strictIndexOf(array, value, fromIndex)\\n      : baseFindIndex(array, baseIsNaN, fromIndex);\\n  }\\n\\n  /**\\n   * This function is like `baseIndexOf` except that it accepts a comparator.\\n   *\\n   * @private\\n   * @param {Array} array The array to inspect.\\n   * @param {*} value The value to search for.\\n   * @param {number} fromIndex The index to search from.\\n   * @param {Function} comparator The comparator invoked per element.\\n   * @returns {number} Returns the index of the matched value, else `-1`.\\n   */\\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\\n    var index = fromIndex - 1,\\n        length = array.length;\\n\\n    while (++index < length) {\\n      if (comparator(array[index], value)) {\\n        return index;\\n      }\\n    }\\n    return -1;\\n  }\\n\\n  /**\\n   * The base implementation of `_.isNaN` without support for number objects.\\n   *\\n   * @private\\n   * @param {*} value The value to check.\\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\\n   */\\n  function baseIsNaN(value) {\\n    return value !== value;\\n  }\\n\\n  /**\\n   * The base implementation of `_.mean` and `_.meanBy` without support for\\n   * iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} array The array to iterate over.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @returns {number} Returns the mean.\\n   */\\n  function baseMean(array, iteratee) {\\n    var length = array == null ? 0 : array.length;\\n    return length ? (baseSum(array, iteratee) / length) : NAN;\\n  }\\n\\n  /**\\n   * The base implementation of `_.property` without support for deep paths.\\n   *\\n   * @private\\n   * @param {string} key The key of the property to get.\\n   * @returns {Function} Returns the new accessor function.\\n   */\\n  function baseProperty(key) {\\n    return function(object) {\\n      return object == null ? undefined : object[key];\\n    };\\n  }\\n\\n  /**\\n   * The base implementation of `_.propertyOf` without support for deep paths.\\n   *\\n   * @private\\n   * @param {Object} object The object to query.\\n   * @returns {Function} Returns the new accessor function.\\n   */\\n  function basePropertyOf(object) {\\n    return function(key) {\\n      return object == null ? undefined : object[key];\\n    };\\n  }\\n\\n  /**\\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\\n   *\\n   * @private\\n   * @param {Array|Object} collection The collection to iterate over.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @param {*} accumulator The initial value.\\n   * @param {boolean} initAccum Specify using the first or last element of\\n   *  `collection` as the initial value.\\n   * @param {Function} eachFunc The function to iterate over `collection`.\\n   * @returns {*} Returns the accumulated value.\\n   */\\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\\n    eachFunc(collection, function(value, index, collection) {\\n      accumulator = initAccum\\n        ? (initAccum = false, value)\\n        : iteratee(accumulator, value, index, collection);\\n    });\\n    return accumulator;\\n  }\\n\\n  /**\\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\\n   * sort order of `array` and replaces criteria objects with their corresponding\\n   * values.\\n   *\\n   * @private\\n   * @param {Array} array The array to sort.\\n   * @param {Function} comparer The function to define sort order.\\n   * @returns {Array} Returns `array`.\\n   */\\n  function baseSortBy(array, comparer) {\\n    var length = array.length;\\n\\n    array.sort(comparer);\\n    while (length--) {\\n      array[length] = array[length].value;\\n    }\\n    return array;\\n  }\\n\\n  /**\\n   * The base implementation of `_.sum` and `_.sumBy` without support for\\n   * iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} array The array to iterate over.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @returns {number} Returns the sum.\\n   */\\n  function baseSum(array, iteratee) {\\n    var result,\\n        index = -1,\\n        length = array.length;\\n\\n    while (++index < length) {\\n      var current = iteratee(array[index]);\\n      if (current !== undefined) {\\n        result = result === undefined ? current : (result + current);\\n      }\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * The base implementation of `_.times` without support for iteratee shorthands\\n   * or max array length checks.\\n   *\\n   * @private\\n   * @param {number} n The number of times to invoke `iteratee`.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @returns {Array} Returns the array of results.\\n   */\\n  function baseTimes(n, iteratee) {\\n    var index = -1,\\n        result = Array(n);\\n\\n    while (++index < n) {\\n      result[index] = iteratee(index);\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\\n   * of key-value pairs for `object` corresponding to the property names of `props`.\\n   *\\n   * @private\\n   * @param {Object} object The object to query.\\n   * @param {Array} props The property names to get values for.\\n   * @returns {Object} Returns the key-value pairs.\\n   */\\n  function baseToPairs(object, props) {\\n    return arrayMap(props, function(key) {\\n      return [key, object[key]];\\n    });\\n  }\\n\\n  /**\\n   * The base implementation of `_.unary` without support for storing metadata.\\n   *\\n   * @private\\n   * @param {Function} func The function to cap arguments for.\\n   * @returns {Function} Returns the new capped function.\\n   */\\n  function baseUnary(func) {\\n    return function(value) {\\n      return func(value);\\n    };\\n  }\\n\\n  /**\\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\\n   * array of `object` property values corresponding to the property names\\n   * of `props`.\\n   *\\n   * @private\\n   * @param {Object} object The object to query.\\n   * @param {Array} props The property names to get values for.\\n   * @returns {Object} Returns the array of property values.\\n   */\\n  function baseValues(object, props) {\\n    return arrayMap(props, function(key) {\\n      return object[key];\\n    });\\n  }\\n\\n  /**\\n   * Checks if a `cache` value for `key` exists.\\n   *\\n   * @private\\n   * @param {Object} cache The cache to query.\\n   * @param {string} key The key of the entry to check.\\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\\n   */\\n  function cacheHas(cache, key) {\\n    return cache.has(key);\\n  }\\n\\n  /**\\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\\n   * that is not found in the character symbols.\\n   *\\n   * @private\\n   * @param {Array} strSymbols The string symbols to inspect.\\n   * @param {Array} chrSymbols The character symbols to find.\\n   * @returns {number} Returns the index of the first unmatched string symbol.\\n   */\\n  function charsStartIndex(strSymbols, chrSymbols) {\\n    var index = -1,\\n        length = strSymbols.length;\\n\\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\\n    return index;\\n  }\\n\\n  /**\\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\\n   * that is not found in the character symbols.\\n   *\\n   * @private\\n   * @param {Array} strSymbols The string symbols to inspect.\\n   * @param {Array} chrSymbols The character symbols to find.\\n   * @returns {number} Returns the index of the last unmatched string symbol.\\n   */\\n  function charsEndIndex(strSymbols, chrSymbols) {\\n    var index = strSymbols.length;\\n\\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\\n    return index;\\n  }\\n\\n  /**\\n   * Gets the number of `placeholder` occurrences in `array`.\\n   *\\n   * @private\\n   * @param {Array} array The array to inspect.\\n   * @param {*} placeholder The placeholder to search for.\\n   * @returns {number} Returns the placeholder count.\\n   */\\n  function countHolders(array, placeholder) {\\n    var length = array.length,\\n        result = 0;\\n\\n    while (length--) {\\n      if (array[length] === placeholder) {\\n        ++result;\\n      }\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\\n   * letters to basic Latin letters.\\n   *\\n   * @private\\n   * @param {string} letter The matched letter to deburr.\\n   * @returns {string} Returns the deburred letter.\\n   */\\n  var deburrLetter = basePropertyOf(deburredLetters);\\n\\n  /**\\n   * Used by `_.escape` to convert characters to HTML entities.\\n   *\\n   * @private\\n   * @param {string} chr The matched character to escape.\\n   * @returns {string} Returns the escaped character.\\n   */\\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\\n\\n  /**\\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\\n   *\\n   * @private\\n   * @param {string} chr The matched character to escape.\\n   * @returns {string} Returns the escaped character.\\n   */\\n  function escapeStringChar(chr) {\\n    return '\\\\\\\\' + stringEscapes[chr];\\n  }\\n\\n  /**\\n   * Gets the value at `key` of `object`.\\n   *\\n   * @private\\n   * @param {Object} [object] The object to query.\\n   * @param {string} key The key of the property to get.\\n   * @returns {*} Returns the property value.\\n   */\\n  function getValue(object, key) {\\n    return object == null ? undefined : object[key];\\n  }\\n\\n  /**\\n   * Checks if `string` contains Unicode symbols.\\n   *\\n   * @private\\n   * @param {string} string The string to inspect.\\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\\n   */\\n  function hasUnicode(string) {\\n    return reHasUnicode.test(string);\\n  }\\n\\n  /**\\n   * Checks if `string` contains a word composed of Unicode symbols.\\n   *\\n   * @private\\n   * @param {string} string The string to inspect.\\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\\n   */\\n  function hasUnicodeWord(string) {\\n    return reHasUnicodeWord.test(string);\\n  }\\n\\n  /**\\n   * Converts `iterator` to an array.\\n   *\\n   * @private\\n   * @param {Object} iterator The iterator to convert.\\n   * @returns {Array} Returns the converted array.\\n   */\\n  function iteratorToArray(iterator) {\\n    var data,\\n        result = [];\\n\\n    while (!(data = iterator.next()).done) {\\n      result.push(data.value);\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * Converts `map` to its key-value pairs.\\n   *\\n   * @private\\n   * @param {Object} map The map to convert.\\n   * @returns {Array} Returns the key-value pairs.\\n   */\\n  function mapToArray(map) {\\n    var index = -1,\\n        result = Array(map.size);\\n\\n    map.forEach(function(value, key) {\\n      result[++index] = [key, value];\\n    });\\n    return result;\\n  }\\n\\n  /**\\n   * Creates a unary function that invokes `func` with its argument transformed.\\n   *\\n   * @private\\n   * @param {Function} func The function to wrap.\\n   * @param {Function} transform The argument transform.\\n   * @returns {Function} Returns the new function.\\n   */\\n  function overArg(func, transform) {\\n    return function(arg) {\\n      return func(transform(arg));\\n    };\\n  }\\n\\n  /**\\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\\n   * and returns an array of their indexes.\\n   *\\n   * @private\\n   * @param {Array} array The array to modify.\\n   * @param {*} placeholder The placeholder to replace.\\n   * @returns {Array} Returns the new array of placeholder indexes.\\n   */\\n  function replaceHolders(array, placeholder) {\\n    var index = -1,\\n        length = array.length,\\n        resIndex = 0,\\n        result = [];\\n\\n    while (++index < length) {\\n      var value = array[index];\\n      if (value === placeholder || value === PLACEHOLDER) {\\n        array[index] = PLACEHOLDER;\\n        result[resIndex++] = index;\\n      }\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * Converts `set` to an array of its values.\\n   *\\n   * @private\\n   * @param {Object} set The set to convert.\\n   * @returns {Array} Returns the values.\\n   */\\n  function setToArray(set) {\\n    var index = -1,\\n        result = Array(set.size);\\n\\n    set.forEach(function(value) {\\n      result[++index] = value;\\n    });\\n    return result;\\n  }\\n\\n  /**\\n   * Converts `set` to its value-value pairs.\\n   *\\n   * @private\\n   * @param {Object} set The set to convert.\\n   * @returns {Array} Returns the value-value pairs.\\n   */\\n  function setToPairs(set) {\\n    var index = -1,\\n        result = Array(set.size);\\n\\n    set.forEach(function(value) {\\n      result[++index] = [value, value];\\n    });\\n    return result;\\n  }\\n\\n  /**\\n   * A specialized version of `_.indexOf` which performs strict equality\\n   * comparisons of values, i.e. `===`.\\n   *\\n   * @private\\n   * @param {Array} array The array to inspect.\\n   * @param {*} value The value to search for.\\n   * @param {number} fromIndex The index to search from.\\n   * @returns {number} Returns the index of the matched value, else `-1`.\\n   */\\n  function strictIndexOf(array, value, fromIndex) {\\n    var index = fromIndex - 1,\\n        length = array.length;\\n\\n    while (++index < length) {\\n      if (array[index] === value) {\\n        return index;\\n      }\\n    }\\n    return -1;\\n  }\\n\\n  /**\\n   * A specialized version of `_.lastIndexOf` which performs strict equality\\n   * comparisons of values, i.e. `===`.\\n   *\\n   * @private\\n   * @param {Array} array The array to inspect.\\n   * @param {*} value The value to search for.\\n   * @param {number} fromIndex The index to search from.\\n   * @returns {number} Returns the index of the matched value, else `-1`.\\n   */\\n  function strictLastIndexOf(array, value, fromIndex) {\\n    var index = fromIndex + 1;\\n    while (index--) {\\n      if (array[index] === value) {\\n        return index;\\n      }\\n    }\\n    return index;\\n  }\\n\\n  /**\\n   * Gets the number of symbols in `string`.\\n   *\\n   * @private\\n   * @param {string} string The string to inspect.\\n   * @returns {number} Returns the string size.\\n   */\\n  function stringSize(string) {\\n    return hasUnicode(string)\\n      ? unicodeSize(string)\\n      : asciiSize(string);\\n  }\\n\\n  /**\\n   * Converts `string` to an array.\\n   *\\n   * @private\\n   * @param {string} string The string to convert.\\n   * @returns {Array} Returns the converted array.\\n   */\\n  function stringToArray(string) {\\n    return hasUnicode(string)\\n      ? unicodeToArray(string)\\n      : asciiToArray(string);\\n  }\\n\\n  /**\\n   * Used by `_.unescape` to convert HTML entities to characters.\\n   *\\n   * @private\\n   * @param {string} chr The matched character to unescape.\\n   * @returns {string} Returns the unescaped character.\\n   */\\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\\n\\n  /**\\n   * Gets the size of a Unicode `string`.\\n   *\\n   * @private\\n   * @param {string} string The string inspect.\\n   * @returns {number} Returns the string size.\\n   */\\n  function unicodeSize(string) {\\n    var result = reUnicode.lastIndex = 0;\\n    while (reUnicode.test(string)) {\\n      ++result;\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * Converts a Unicode `string` to an array.\\n   *\\n   * @private\\n   * @param {string} string The string to convert.\\n   * @returns {Array} Returns the converted array.\\n   */\\n  function unicodeToArray(string) {\\n    return string.match(reUnicode) || [];\\n  }\\n\\n  /**\\n   * Splits a Unicode `string` into an array of its words.\\n   *\\n   * @private\\n   * @param {string} The string to inspect.\\n   * @returns {Array} Returns the words of `string`.\\n   */\\n  function unicodeWords(string) {\\n    return string.match(reUnicodeWord) || [];\\n  }\\n\\n  /*--------------------------------------------------------------------------*/\\n\\n  /**\\n   * Create a new pristine `lodash` function using the `context` object.\\n   *\\n   * @static\\n   * @memberOf _\\n   * @since 1.1.0\\n   * @category Util\\n   * @param {Object} [context=root] The context object.\\n   * @returns {Function} Returns a new `lodash` function.\\n   * @example\\n   *\\n   * _.mixin({ 'foo': _.constant('foo') });\\n   *\\n   * var lodash = _.runInContext();\\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\\n   *\\n   * _.isFunction(_.foo);\\n   * // => true\\n   * _.isFunction(_.bar);\\n   * // => false\\n   *\\n   * lodash.isFunction(lodash.foo);\\n   * // => false\\n   * lodash.isFunction(lodash.bar);\\n   * // => true\\n   *\\n   * // Create a suped-up `defer` in Node.js.\\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\\n   */\\n  var runInContext = (function runInContext(context) {\\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\\n\\n    /** Built-in constructor references. */\\n    var Array = context.Array,\\n        Date = context.Date,\\n        Error = context.Error,\\n        Function = context.Function,\\n        Math = context.Math,\\n        Object = context.Object,\\n        RegExp = context.RegExp,\\n        String = context.String,\\n        TypeError = context.TypeError;\\n\\n    /** Used for built-in method references. */\\n    var arrayProto = Array.prototype,\\n        funcProto = Function.prototype,\\n        objectProto = Object.prototype;\\n\\n    /** Used to detect overreaching core-js shims. */\\n    var coreJsData = context['__core-js_shared__'];\\n\\n    /** Used to resolve the decompiled source of functions. */\\n    var funcToString = funcProto.toString;\\n\\n    /** Used to check objects for own properties. */\\n    var hasOwnProperty = objectProto.hasOwnProperty;\\n\\n    /** Used to generate unique IDs. */\\n    var idCounter = 0;\\n\\n    /** Used to detect methods masquerading as native. */\\n    var maskSrcKey = (function() {\\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\\n      return uid ? ('Symbol(src)_1.' + uid) : '';\\n    }());\\n\\n    /**\\n     * Used to resolve the\\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\\n     * of values.\\n     */\\n    var nativeObjectToString = objectProto.toString;\\n\\n    /** Used to infer the `Object` constructor. */\\n    var objectCtorString = funcToString.call(Object);\\n\\n    /** Used to restore the original `_` reference in `_.noConflict`. */\\n    var oldDash = root._;\\n\\n    /** Used to detect if a method is native. */\\n    var reIsNative = RegExp('^' +\\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\\\\\$&')\\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\\\\\\\()| for .+?(?=\\\\\\\\\\\\])/g, '$1.*?') + '$'\\n    );\\n\\n    /** Built-in value references. */\\n    var Buffer = moduleExports ? context.Buffer : undefined,\\n        Symbol = context.Symbol,\\n        Uint8Array = context.Uint8Array,\\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\\n        getPrototype = overArg(Object.getPrototypeOf, Object),\\n        objectCreate = Object.create,\\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\\n        splice = arrayProto.splice,\\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\\n        symIterator = Symbol ? Symbol.iterator : undefined,\\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\\n\\n    var defineProperty = (function() {\\n      try {\\n        var func = getNative(Object, 'defineProperty');\\n        func({}, '', {});\\n        return func;\\n      } catch (e) {}\\n    }());\\n\\n    /** Mocked built-ins. */\\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\\n\\n    /* Built-in method references for those with the same name as other `lodash` methods. */\\n    var nativeCeil = Math.ceil,\\n        nativeFloor = Math.floor,\\n        nativeGetSymbols = Object.getOwnPropertySymbols,\\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\\n        nativeIsFinite = context.isFinite,\\n        nativeJoin = arrayProto.join,\\n        nativeKeys = overArg(Object.keys, Object),\\n        nativeMax = Math.max,\\n        nativeMin = Math.min,\\n        nativeNow = Date.now,\\n        nativeParseInt = context.parseInt,\\n        nativeRandom = Math.random,\\n        nativeReverse = arrayProto.reverse;\\n\\n    /* Built-in method references that are verified to be native. */\\n    var DataView = getNative(context, 'DataView'),\\n        Map = getNative(context, 'Map'),\\n        Promise = getNative(context, 'Promise'),\\n        Set = getNative(context, 'Set'),\\n        WeakMap = getNative(context, 'WeakMap'),\\n        nativeCreate = getNative(Object, 'create');\\n\\n    /** Used to store function metadata. */\\n    var metaMap = WeakMap && new WeakMap;\\n\\n    /** Used to lookup unminified function names. */\\n    var realNames = {};\\n\\n    /** Used to detect maps, sets, and weakmaps. */\\n    var dataViewCtorString = toSource(DataView),\\n        mapCtorString = toSource(Map),\\n        promiseCtorString = toSource(Promise),\\n        setCtorString = toSource(Set),\\n        weakMapCtorString = toSource(WeakMap);\\n\\n    /** Used to convert symbols to primitives and strings. */\\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a `lodash` object which wraps `value` to enable implicit method\\n     * chain sequences. Methods that operate on and return arrays, collections,\\n     * and functions can be chained together. Methods that retrieve a single value\\n     * or may return a primitive value will automatically end the chain sequence\\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\\n     * with `_#value`.\\n     *\\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\\n     * enabled using `_.chain`.\\n     *\\n     * The execution of chained methods is lazy, that is, it's deferred until\\n     * `_#value` is implicitly or explicitly called.\\n     *\\n     * Lazy evaluation allows several methods to support shortcut fusion.\\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\\n     * the creation of intermediate arrays and can greatly reduce the number of\\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\\n     * fusion if the section is applied to an array of at least `200` elements\\n     * and any iteratees accept only one argument. The heuristic for whether a\\n     * section qualifies for shortcut fusion is subject to change.\\n     *\\n     * Chaining is supported in custom builds as long as the `_#value` method is\\n     * directly or indirectly included in the build.\\n     *\\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\\n     *\\n     * The wrapper `Array` methods are:\\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\\n     *\\n     * The wrapper `String` methods are:\\n     * `replace` and `split`\\n     *\\n     * The wrapper methods that support shortcut fusion are:\\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\\n     *\\n     * The chainable wrapper methods are:\\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\\n     *\\n     * The wrapper methods that are **not** chainable by default are:\\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\\n     * `upperFirst`, `value`, and `words`\\n     *\\n     * @name _\\n     * @constructor\\n     * @category Seq\\n     * @param {*} value The value to wrap in a `lodash` instance.\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * var wrapped = _([1, 2, 3]);\\n     *\\n     * // Returns an unwrapped value.\\n     * wrapped.reduce(_.add);\\n     * // => 6\\n     *\\n     * // Returns a wrapped value.\\n     * var squares = wrapped.map(square);\\n     *\\n     * _.isArray(squares);\\n     * // => false\\n     *\\n     * _.isArray(squares.value());\\n     * // => true\\n     */\\n    function lodash(value) {\\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\\n        if (value instanceof LodashWrapper) {\\n          return value;\\n        }\\n        if (hasOwnProperty.call(value, '__wrapped__')) {\\n          return wrapperClone(value);\\n        }\\n      }\\n      return new LodashWrapper(value);\\n    }\\n\\n    /**\\n     * The base implementation of `_.create` without support for assigning\\n     * properties to the created object.\\n     *\\n     * @private\\n     * @param {Object} proto The object to inherit from.\\n     * @returns {Object} Returns the new object.\\n     */\\n    var baseCreate = (function() {\\n      function object() {}\\n      return function(proto) {\\n        if (!isObject(proto)) {\\n          return {};\\n        }\\n        if (objectCreate) {\\n          return objectCreate(proto);\\n        }\\n        object.prototype = proto;\\n        var result = new object;\\n        object.prototype = undefined;\\n        return result;\\n      };\\n    }());\\n\\n    /**\\n     * The function whose prototype chain sequence wrappers inherit from.\\n     *\\n     * @private\\n     */\\n    function baseLodash() {\\n      // No operation performed.\\n    }\\n\\n    /**\\n     * The base constructor for creating `lodash` wrapper objects.\\n     *\\n     * @private\\n     * @param {*} value The value to wrap.\\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\\n     */\\n    function LodashWrapper(value, chainAll) {\\n      this.__wrapped__ = value;\\n      this.__actions__ = [];\\n      this.__chain__ = !!chainAll;\\n      this.__index__ = 0;\\n      this.__values__ = undefined;\\n    }\\n\\n    /**\\n     * By default, the template delimiters used by lodash are like those in\\n     * embedded Ruby (ERB). Change the following template settings to use\\n     * alternative delimiters.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @type {Object}\\n     */\\n    lodash.templateSettings = {\\n\\n      /**\\n       * Used to detect `data` property values to be HTML-escaped.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type {RegExp}\\n       */\\n      'escape': reEscape,\\n\\n      /**\\n       * Used to detect code to be evaluated.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type {RegExp}\\n       */\\n      'evaluate': reEvaluate,\\n\\n      /**\\n       * Used to detect `data` property values to inject.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type {RegExp}\\n       */\\n      'interpolate': reInterpolate,\\n\\n      /**\\n       * Used to reference the data object in the template text.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type {string}\\n       */\\n      'variable': '',\\n\\n      /**\\n       * Used to import variables into the compiled template.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type {Object}\\n       */\\n      'imports': {\\n\\n        /**\\n         * A reference to the `lodash` function.\\n         *\\n         * @memberOf _.templateSettings.imports\\n         * @type {Function}\\n         */\\n        '_': lodash\\n      }\\n    };\\n\\n    // Ensure wrappers are instances of `baseLodash`.\\n    lodash.prototype = baseLodash.prototype;\\n    lodash.prototype.constructor = lodash;\\n\\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\\n    LodashWrapper.prototype.constructor = LodashWrapper;\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\\n     *\\n     * @private\\n     * @constructor\\n     * @param {*} value The value to wrap.\\n     */\\n    function LazyWrapper(value) {\\n      this.__wrapped__ = value;\\n      this.__actions__ = [];\\n      this.__dir__ = 1;\\n      this.__filtered__ = false;\\n      this.__iteratees__ = [];\\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\\n      this.__views__ = [];\\n    }\\n\\n    /**\\n     * Creates a clone of the lazy wrapper object.\\n     *\\n     * @private\\n     * @name clone\\n     * @memberOf LazyWrapper\\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\\n     */\\n    function lazyClone() {\\n      var result = new LazyWrapper(this.__wrapped__);\\n      result.__actions__ = copyArray(this.__actions__);\\n      result.__dir__ = this.__dir__;\\n      result.__filtered__ = this.__filtered__;\\n      result.__iteratees__ = copyArray(this.__iteratees__);\\n      result.__takeCount__ = this.__takeCount__;\\n      result.__views__ = copyArray(this.__views__);\\n      return result;\\n    }\\n\\n    /**\\n     * Reverses the direction of lazy iteration.\\n     *\\n     * @private\\n     * @name reverse\\n     * @memberOf LazyWrapper\\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\\n     */\\n    function lazyReverse() {\\n      if (this.__filtered__) {\\n        var result = new LazyWrapper(this);\\n        result.__dir__ = -1;\\n        result.__filtered__ = true;\\n      } else {\\n        result = this.clone();\\n        result.__dir__ *= -1;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Extracts the unwrapped value from its lazy wrapper.\\n     *\\n     * @private\\n     * @name value\\n     * @memberOf LazyWrapper\\n     * @returns {*} Returns the unwrapped value.\\n     */\\n    function lazyValue() {\\n      var array = this.__wrapped__.value(),\\n          dir = this.__dir__,\\n          isArr = isArray(array),\\n          isRight = dir < 0,\\n          arrLength = isArr ? array.length : 0,\\n          view = getView(0, arrLength, this.__views__),\\n          start = view.start,\\n          end = view.end,\\n          length = end - start,\\n          index = isRight ? end : (start - 1),\\n          iteratees = this.__iteratees__,\\n          iterLength = iteratees.length,\\n          resIndex = 0,\\n          takeCount = nativeMin(length, this.__takeCount__);\\n\\n      if (!isArr || arrLength < LARGE_ARRAY_SIZE ||\\n          (arrLength == length && takeCount == length)) {\\n        return baseWrapperValue(array, this.__actions__);\\n      }\\n      var result = [];\\n\\n      outer:\\n      while (length-- && resIndex < takeCount) {\\n        index += dir;\\n\\n        var iterIndex = -1,\\n            value = array[index];\\n\\n        while (++iterIndex < iterLength) {\\n          var data = iteratees[iterIndex],\\n              iteratee = data.iteratee,\\n              type = data.type,\\n              computed = iteratee(value);\\n\\n          if (type == LAZY_MAP_FLAG) {\\n            value = computed;\\n          } else if (!computed) {\\n            if (type == LAZY_FILTER_FLAG) {\\n              continue outer;\\n            } else {\\n              break outer;\\n            }\\n          }\\n        }\\n        result[resIndex++] = value;\\n      }\\n      return result;\\n    }\\n\\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\\n    LazyWrapper.prototype.constructor = LazyWrapper;\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a hash object.\\n     *\\n     * @private\\n     * @constructor\\n     * @param {Array} [entries] The key-value pairs to cache.\\n     */\\n    function Hash(entries) {\\n      var index = -1,\\n          length = entries == null ? 0 : entries.length;\\n\\n      this.clear();\\n      while (++index < length) {\\n        var entry = entries[index];\\n        this.set(entry[0], entry[1]);\\n      }\\n    }\\n\\n    /**\\n     * Removes all key-value entries from the hash.\\n     *\\n     * @private\\n     * @name clear\\n     * @memberOf Hash\\n     */\\n    function hashClear() {\\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\\n      this.size = 0;\\n    }\\n\\n    /**\\n     * Removes `key` and its value from the hash.\\n     *\\n     * @private\\n     * @name delete\\n     * @memberOf Hash\\n     * @param {Object} hash The hash to modify.\\n     * @param {string} key The key of the value to remove.\\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\\n     */\\n    function hashDelete(key) {\\n      var result = this.has(key) && delete this.__data__[key];\\n      this.size -= result ? 1 : 0;\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the hash value for `key`.\\n     *\\n     * @private\\n     * @name get\\n     * @memberOf Hash\\n     * @param {string} key The key of the value to get.\\n     * @returns {*} Returns the entry value.\\n     */\\n    function hashGet(key) {\\n      var data = this.__data__;\\n      if (nativeCreate) {\\n        var result = data[key];\\n        return result === HASH_UNDEFINED ? undefined : result;\\n      }\\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\\n    }\\n\\n    /**\\n     * Checks if a hash value for `key` exists.\\n     *\\n     * @private\\n     * @name has\\n     * @memberOf Hash\\n     * @param {string} key The key of the entry to check.\\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\\n     */\\n    function hashHas(key) {\\n      var data = this.__data__;\\n      return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\\n    }\\n\\n    /**\\n     * Sets the hash `key` to `value`.\\n     *\\n     * @private\\n     * @name set\\n     * @memberOf Hash\\n     * @param {string} key The key of the value to set.\\n     * @param {*} value The value to set.\\n     * @returns {Object} Returns the hash instance.\\n     */\\n    function hashSet(key, value) {\\n      var data = this.__data__;\\n      this.size += this.has(key) ? 0 : 1;\\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\\n      return this;\\n    }\\n\\n    // Add methods to `Hash`.\\n    Hash.prototype.clear = hashClear;\\n    Hash.prototype['delete'] = hashDelete;\\n    Hash.prototype.get = hashGet;\\n    Hash.prototype.has = hashHas;\\n    Hash.prototype.set = hashSet;\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates an list cache object.\\n     *\\n     * @private\\n     * @constructor\\n     * @param {Array} [entries] The key-value pairs to cache.\\n     */\\n    function ListCache(entries) {\\n      var index = -1,\\n          length = entries == null ? 0 : entries.length;\\n\\n      this.clear();\\n      while (++index < length) {\\n        var entry = entries[index];\\n        this.set(entry[0], entry[1]);\\n      }\\n    }\\n\\n    /**\\n     * Removes all key-value entries from the list cache.\\n     *\\n     * @private\\n     * @name clear\\n     * @memberOf ListCache\\n     */\\n    function listCacheClear() {\\n      this.__data__ = [];\\n      this.size = 0;\\n    }\\n\\n    /**\\n     * Removes `key` and its value from the list cache.\\n     *\\n     * @private\\n     * @name delete\\n     * @memberOf ListCache\\n     * @param {string} key The key of the value to remove.\\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\\n     */\\n    function listCacheDelete(key) {\\n      var data = this.__data__,\\n          index = assocIndexOf(data, key);\\n\\n      if (index < 0) {\\n        return false;\\n      }\\n      var lastIndex = data.length - 1;\\n      if (index == lastIndex) {\\n        data.pop();\\n      } else {\\n        splice.call(data, index, 1);\\n      }\\n      --this.size;\\n      return true;\\n    }\\n\\n    /**\\n     * Gets the list cache value for `key`.\\n     *\\n     * @private\\n     * @name get\\n     * @memberOf ListCache\\n     * @param {string} key The key of the value to get.\\n     * @returns {*} Returns the entry value.\\n     */\\n    function listCacheGet(key) {\\n      var data = this.__data__,\\n          index = assocIndexOf(data, key);\\n\\n      return index < 0 ? undefined : data[index][1];\\n    }\\n\\n    /**\\n     * Checks if a list cache value for `key` exists.\\n     *\\n     * @private\\n     * @name has\\n     * @memberOf ListCache\\n     * @param {string} key The key of the entry to check.\\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\\n     */\\n    function listCacheHas(key) {\\n      return assocIndexOf(this.__data__, key) > -1;\\n    }\\n\\n    /**\\n     * Sets the list cache `key` to `value`.\\n     *\\n     * @private\\n     * @name set\\n     * @memberOf ListCache\\n     * @param {string} key The key of the value to set.\\n     * @param {*} value The value to set.\\n     * @returns {Object} Returns the list cache instance.\\n     */\\n    function listCacheSet(key, value) {\\n      var data = this.__data__,\\n          index = assocIndexOf(data, key);\\n\\n      if (index < 0) {\\n        ++this.size;\\n        data.push([key, value]);\\n      } else {\\n        data[index][1] = value;\\n      }\\n      return this;\\n    }\\n\\n    // Add methods to `ListCache`.\\n    ListCache.prototype.clear = listCacheClear;\\n    ListCache.prototype['delete'] = listCacheDelete;\\n    ListCache.prototype.get = listCacheGet;\\n    ListCache.prototype.has = listCacheHas;\\n    ListCache.prototype.set = listCacheSet;\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a map cache object to store key-value pairs.\\n     *\\n     * @private\\n     * @constructor\\n     * @param {Array} [entries] The key-value pairs to cache.\\n     */\\n    function MapCache(entries) {\\n      var index = -1,\\n          length = entries == null ? 0 : entries.length;\\n\\n      this.clear();\\n      while (++index < length) {\\n        var entry = entries[index];\\n        this.set(entry[0], entry[1]);\\n      }\\n    }\\n\\n    /**\\n     * Removes all key-value entries from the map.\\n     *\\n     * @private\\n     * @name clear\\n     * @memberOf MapCache\\n     */\\n    function mapCacheClear() {\\n      this.size = 0;\\n      this.__data__ = {\\n        'hash': new Hash,\\n        'map': new (Map || ListCache),\\n        'string': new Hash\\n      };\\n    }\\n\\n    /**\\n     * Removes `key` and its value from the map.\\n     *\\n     * @private\\n     * @name delete\\n     * @memberOf MapCache\\n     * @param {string} key The key of the value to remove.\\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\\n     */\\n    function mapCacheDelete(key) {\\n      var result = getMapData(this, key)['delete'](key);\\n      this.size -= result ? 1 : 0;\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the map value for `key`.\\n     *\\n     * @private\\n     * @name get\\n     * @memberOf MapCache\\n     * @param {string} key The key of the value to get.\\n     * @returns {*} Returns the entry value.\\n     */\\n    function mapCacheGet(key) {\\n      return getMapData(this, key).get(key);\\n    }\\n\\n    /**\\n     * Checks if a map value for `key` exists.\\n     *\\n     * @private\\n     * @name has\\n     * @memberOf MapCache\\n     * @param {string} key The key of the entry to check.\\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\\n     */\\n    function mapCacheHas(key) {\\n      return getMapData(this, key).has(key);\\n    }\\n\\n    /**\\n     * Sets the map `key` to `value`.\\n     *\\n     * @private\\n     * @name set\\n     * @memberOf MapCache\\n     * @param {string} key The key of the value to set.\\n     * @param {*} value The value to set.\\n     * @returns {Object} Returns the map cache instance.\\n     */\\n    function mapCacheSet(key, value) {\\n      var data = getMapData(this, key),\\n          size = data.size;\\n\\n      data.set(key, value);\\n      this.size += data.size == size ? 0 : 1;\\n      return this;\\n    }\\n\\n    // Add methods to `MapCache`.\\n    MapCache.prototype.clear = mapCacheClear;\\n    MapCache.prototype['delete'] = mapCacheDelete;\\n    MapCache.prototype.get = mapCacheGet;\\n    MapCache.prototype.has = mapCacheHas;\\n    MapCache.prototype.set = mapCacheSet;\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     *\\n     * Creates an array cache object to store unique values.\\n     *\\n     * @private\\n     * @constructor\\n     * @param {Array} [values] The values to cache.\\n     */\\n    function SetCache(values) {\\n      var index = -1,\\n          length = values == null ? 0 : values.length;\\n\\n      this.__data__ = new MapCache;\\n      while (++index < length) {\\n        this.add(values[index]);\\n      }\\n    }\\n\\n    /**\\n     * Adds `value` to the array cache.\\n     *\\n     * @private\\n     * @name add\\n     * @memberOf SetCache\\n     * @alias push\\n     * @param {*} value The value to cache.\\n     * @returns {Object} Returns the cache instance.\\n     */\\n    function setCacheAdd(value) {\\n      this.__data__.set(value, HASH_UNDEFINED);\\n      return this;\\n    }\\n\\n    /**\\n     * Checks if `value` is in the array cache.\\n     *\\n     * @private\\n     * @name has\\n     * @memberOf SetCache\\n     * @param {*} value The value to search for.\\n     * @returns {number} Returns `true` if `value` is found, else `false`.\\n     */\\n    function setCacheHas(value) {\\n      return this.__data__.has(value);\\n    }\\n\\n    // Add methods to `SetCache`.\\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\\n    SetCache.prototype.has = setCacheHas;\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a stack cache object to store key-value pairs.\\n     *\\n     * @private\\n     * @constructor\\n     * @param {Array} [entries] The key-value pairs to cache.\\n     */\\n    function Stack(entries) {\\n      var data = this.__data__ = new ListCache(entries);\\n      this.size = data.size;\\n    }\\n\\n    /**\\n     * Removes all key-value entries from the stack.\\n     *\\n     * @private\\n     * @name clear\\n     * @memberOf Stack\\n     */\\n    function stackClear() {\\n      this.__data__ = new ListCache;\\n      this.size = 0;\\n    }\\n\\n    /**\\n     * Removes `key` and its value from the stack.\\n     *\\n     * @private\\n     * @name delete\\n     * @memberOf Stack\\n     * @param {string} key The key of the value to remove.\\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\\n     */\\n    function stackDelete(key) {\\n      var data = this.__data__,\\n          result = data['delete'](key);\\n\\n      this.size = data.size;\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the stack value for `key`.\\n     *\\n     * @private\\n     * @name get\\n     * @memberOf Stack\\n     * @param {string} key The key of the value to get.\\n     * @returns {*} Returns the entry value.\\n     */\\n    function stackGet(key) {\\n      return this.__data__.get(key);\\n    }\\n\\n    /**\\n     * Checks if a stack value for `key` exists.\\n     *\\n     * @private\\n     * @name has\\n     * @memberOf Stack\\n     * @param {string} key The key of the entry to check.\\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\\n     */\\n    function stackHas(key) {\\n      return this.__data__.has(key);\\n    }\\n\\n    /**\\n     * Sets the stack `key` to `value`.\\n     *\\n     * @private\\n     * @name set\\n     * @memberOf Stack\\n     * @param {string} key The key of the value to set.\\n     * @param {*} value The value to set.\\n     * @returns {Object} Returns the stack cache instance.\\n     */\\n    function stackSet(key, value) {\\n      var data = this.__data__;\\n      if (data instanceof ListCache) {\\n        var pairs = data.__data__;\\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\\n          pairs.push([key, value]);\\n          this.size = ++data.size;\\n          return this;\\n        }\\n        data = this.__data__ = new MapCache(pairs);\\n      }\\n      data.set(key, value);\\n      this.size = data.size;\\n      return this;\\n    }\\n\\n    // Add methods to `Stack`.\\n    Stack.prototype.clear = stackClear;\\n    Stack.prototype['delete'] = stackDelete;\\n    Stack.prototype.get = stackGet;\\n    Stack.prototype.has = stackHas;\\n    Stack.prototype.set = stackSet;\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates an array of the enumerable property names of the array-like `value`.\\n     *\\n     * @private\\n     * @param {*} value The value to query.\\n     * @param {boolean} inherited Specify returning inherited property names.\\n     * @returns {Array} Returns the array of property names.\\n     */\\n    function arrayLikeKeys(value, inherited) {\\n      var isArr = isArray(value),\\n          isArg = !isArr && isArguments(value),\\n          isBuff = !isArr && !isArg && isBuffer(value),\\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\\n          skipIndexes = isArr || isArg || isBuff || isType,\\n          result = skipIndexes ? baseTimes(value.length, String) : [],\\n          length = result.length;\\n\\n      for (var key in value) {\\n        if ((inherited || hasOwnProperty.call(value, key)) &&\\n            !(skipIndexes && (\\n               // Safari 9 has enumerable `arguments.length` in strict mode.\\n               key == 'length' ||\\n               // Node.js 0.10 has enumerable non-index properties on buffers.\\n               (isBuff && (key == 'offset' || key == 'parent')) ||\\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\\n               // Skip index properties.\\n               isIndex(key, length)\\n            ))) {\\n          result.push(key);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * A specialized version of `_.sample` for arrays.\\n     *\\n     * @private\\n     * @param {Array} array The array to sample.\\n     * @returns {*} Returns the random element.\\n     */\\n    function arraySample(array) {\\n      var length = array.length;\\n      return length ? array[baseRandom(0, length - 1)] : undefined;\\n    }\\n\\n    /**\\n     * A specialized version of `_.sampleSize` for arrays.\\n     *\\n     * @private\\n     * @param {Array} array The array to sample.\\n     * @param {number} n The number of elements to sample.\\n     * @returns {Array} Returns the random elements.\\n     */\\n    function arraySampleSize(array, n) {\\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\\n    }\\n\\n    /**\\n     * A specialized version of `_.shuffle` for arrays.\\n     *\\n     * @private\\n     * @param {Array} array The array to shuffle.\\n     * @returns {Array} Returns the new shuffled array.\\n     */\\n    function arrayShuffle(array) {\\n      return shuffleSelf(copyArray(array));\\n    }\\n\\n    /**\\n     * Used by `_.defaults` to customize its `_.assignIn` use.\\n     *\\n     * @private\\n     * @param {*} objValue The destination value.\\n     * @param {*} srcValue The source value.\\n     * @param {string} key The key of the property to assign.\\n     * @param {Object} object The parent object of `objValue`.\\n     * @returns {*} Returns the value to assign.\\n     */\\n    function assignInDefaults(objValue, srcValue, key, object) {\\n      if (objValue === undefined ||\\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\\n        return srcValue;\\n      }\\n      return objValue;\\n    }\\n\\n    /**\\n     * This function is like `assignValue` except that it doesn't assign\\n     * `undefined` values.\\n     *\\n     * @private\\n     * @param {Object} object The object to modify.\\n     * @param {string} key The key of the property to assign.\\n     * @param {*} value The value to assign.\\n     */\\n    function assignMergeValue(object, key, value) {\\n      if ((value !== undefined && !eq(object[key], value)) ||\\n          (value === undefined && !(key in object))) {\\n        baseAssignValue(object, key, value);\\n      }\\n    }\\n\\n    /**\\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * @private\\n     * @param {Object} object The object to modify.\\n     * @param {string} key The key of the property to assign.\\n     * @param {*} value The value to assign.\\n     */\\n    function assignValue(object, key, value) {\\n      var objValue = object[key];\\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\\n          (value === undefined && !(key in object))) {\\n        baseAssignValue(object, key, value);\\n      }\\n    }\\n\\n    /**\\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\\n     *\\n     * @private\\n     * @param {Array} array The array to inspect.\\n     * @param {*} key The key to search for.\\n     * @returns {number} Returns the index of the matched value, else `-1`.\\n     */\\n    function assocIndexOf(array, key) {\\n      var length = array.length;\\n      while (length--) {\\n        if (eq(array[length][0], key)) {\\n          return length;\\n        }\\n      }\\n      return -1;\\n    }\\n\\n    /**\\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\\n     * by `iteratee` and values set by `setter`.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} setter The function to set `accumulator` values.\\n     * @param {Function} iteratee The iteratee to transform keys.\\n     * @param {Object} accumulator The initial aggregated object.\\n     * @returns {Function} Returns `accumulator`.\\n     */\\n    function baseAggregator(collection, setter, iteratee, accumulator) {\\n      baseEach(collection, function(value, key, collection) {\\n        setter(accumulator, value, iteratee(value), collection);\\n      });\\n      return accumulator;\\n    }\\n\\n    /**\\n     * The base implementation of `_.assign` without support for multiple sources\\n     * or `customizer` functions.\\n     *\\n     * @private\\n     * @param {Object} object The destination object.\\n     * @param {Object} source The source object.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseAssign(object, source) {\\n      return object && copyObject(source, keys(source), object);\\n    }\\n\\n    /**\\n     * The base implementation of `_.assignIn` without support for multiple sources\\n     * or `customizer` functions.\\n     *\\n     * @private\\n     * @param {Object} object The destination object.\\n     * @param {Object} source The source object.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseAssignIn(object, source) {\\n      return object && copyObject(source, keysIn(source), object);\\n    }\\n\\n    /**\\n     * The base implementation of `assignValue` and `assignMergeValue` without\\n     * value checks.\\n     *\\n     * @private\\n     * @param {Object} object The object to modify.\\n     * @param {string} key The key of the property to assign.\\n     * @param {*} value The value to assign.\\n     */\\n    function baseAssignValue(object, key, value) {\\n      if (key == '__proto__' && defineProperty) {\\n        defineProperty(object, key, {\\n          'configurable': true,\\n          'enumerable': true,\\n          'value': value,\\n          'writable': true\\n        });\\n      } else {\\n        object[key] = value;\\n      }\\n    }\\n\\n    /**\\n     * The base implementation of `_.at` without support for individual paths.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {string[]} paths The property paths to pick.\\n     * @returns {Array} Returns the picked elements.\\n     */\\n    function baseAt(object, paths) {\\n      var index = -1,\\n          length = paths.length,\\n          result = Array(length),\\n          skip = object == null;\\n\\n      while (++index < length) {\\n        result[index] = skip ? undefined : get(object, paths[index]);\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\\n     *\\n     * @private\\n     * @param {number} number The number to clamp.\\n     * @param {number} [lower] The lower bound.\\n     * @param {number} upper The upper bound.\\n     * @returns {number} Returns the clamped number.\\n     */\\n    function baseClamp(number, lower, upper) {\\n      if (number === number) {\\n        if (upper !== undefined) {\\n          number = number <= upper ? number : upper;\\n        }\\n        if (lower !== undefined) {\\n          number = number >= lower ? number : lower;\\n        }\\n      }\\n      return number;\\n    }\\n\\n    /**\\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\\n     * traversed objects.\\n     *\\n     * @private\\n     * @param {*} value The value to clone.\\n     * @param {boolean} bitmask The bitmask flags.\\n     *  1 - Deep clone\\n     *  2 - Flatten inherited properties\\n     *  4 - Clone symbols\\n     * @param {Function} [customizer] The function to customize cloning.\\n     * @param {string} [key] The key of `value`.\\n     * @param {Object} [object] The parent object of `value`.\\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\\n     * @returns {*} Returns the cloned value.\\n     */\\n    function baseClone(value, bitmask, customizer, key, object, stack) {\\n      var result,\\n          isDeep = bitmask & CLONE_DEEP_FLAG,\\n          isFlat = bitmask & CLONE_FLAT_FLAG,\\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\\n\\n      if (customizer) {\\n        result = object ? customizer(value, key, object, stack) : customizer(value);\\n      }\\n      if (result !== undefined) {\\n        return result;\\n      }\\n      if (!isObject(value)) {\\n        return value;\\n      }\\n      var isArr = isArray(value);\\n      if (isArr) {\\n        result = initCloneArray(value);\\n        if (!isDeep) {\\n          return copyArray(value, result);\\n        }\\n      } else {\\n        var tag = getTag(value),\\n            isFunc = tag == funcTag || tag == genTag;\\n\\n        if (isBuffer(value)) {\\n          return cloneBuffer(value, isDeep);\\n        }\\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\\n          if (!isDeep) {\\n            return isFlat\\n              ? copySymbolsIn(value, baseAssignIn(result, value))\\n              : copySymbols(value, baseAssign(result, value));\\n          }\\n        } else {\\n          if (!cloneableTags[tag]) {\\n            return object ? value : {};\\n          }\\n          result = initCloneByTag(value, tag, baseClone, isDeep);\\n        }\\n      }\\n      // Check for circular references and return its corresponding clone.\\n      stack || (stack = new Stack);\\n      var stacked = stack.get(value);\\n      if (stacked) {\\n        return stacked;\\n      }\\n      stack.set(value, result);\\n\\n      var keysFunc = isFull\\n        ? (isFlat ? getAllKeysIn : getAllKeys)\\n        : (isFlat ? keysIn : keys);\\n\\n      var props = isArr ? undefined : keysFunc(value);\\n      arrayEach(props || value, function(subValue, key) {\\n        if (props) {\\n          key = subValue;\\n          subValue = value[key];\\n        }\\n        // Recursively populate clone (susceptible to call stack limits).\\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.conforms` which doesn't clone `source`.\\n     *\\n     * @private\\n     * @param {Object} source The object of property predicates to conform to.\\n     * @returns {Function} Returns the new spec function.\\n     */\\n    function baseConforms(source) {\\n      var props = keys(source);\\n      return function(object) {\\n        return baseConformsTo(object, source, props);\\n      };\\n    }\\n\\n    /**\\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\\n     *\\n     * @private\\n     * @param {Object} object The object to inspect.\\n     * @param {Object} source The object of property predicates to conform to.\\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\\n     */\\n    function baseConformsTo(object, source, props) {\\n      var length = props.length;\\n      if (object == null) {\\n        return !length;\\n      }\\n      object = Object(object);\\n      while (length--) {\\n        var key = props[length],\\n            predicate = source[key],\\n            value = object[key];\\n\\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    }\\n\\n    /**\\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\\n     * to provide to `func`.\\n     *\\n     * @private\\n     * @param {Function} func The function to delay.\\n     * @param {number} wait The number of milliseconds to delay invocation.\\n     * @param {Array} args The arguments to provide to `func`.\\n     * @returns {number|Object} Returns the timer id or timeout object.\\n     */\\n    function baseDelay(func, wait, args) {\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\\n    }\\n\\n    /**\\n     * The base implementation of methods like `_.difference` without support\\n     * for excluding multiple arrays or iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array} array The array to inspect.\\n     * @param {Array} values The values to exclude.\\n     * @param {Function} [iteratee] The iteratee invoked per element.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new array of filtered values.\\n     */\\n    function baseDifference(array, values, iteratee, comparator) {\\n      var index = -1,\\n          includes = arrayIncludes,\\n          isCommon = true,\\n          length = array.length,\\n          result = [],\\n          valuesLength = values.length;\\n\\n      if (!length) {\\n        return result;\\n      }\\n      if (iteratee) {\\n        values = arrayMap(values, baseUnary(iteratee));\\n      }\\n      if (comparator) {\\n        includes = arrayIncludesWith;\\n        isCommon = false;\\n      }\\n      else if (values.length >= LARGE_ARRAY_SIZE) {\\n        includes = cacheHas;\\n        isCommon = false;\\n        values = new SetCache(values);\\n      }\\n      outer:\\n      while (++index < length) {\\n        var value = array[index],\\n            computed = iteratee == null ? value : iteratee(value);\\n\\n        value = (comparator || value !== 0) ? value : 0;\\n        if (isCommon && computed === computed) {\\n          var valuesIndex = valuesLength;\\n          while (valuesIndex--) {\\n            if (values[valuesIndex] === computed) {\\n              continue outer;\\n            }\\n          }\\n          result.push(value);\\n        }\\n        else if (!includes(values, computed, comparator)) {\\n          result.push(value);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array|Object} Returns `collection`.\\n     */\\n    var baseEach = createBaseEach(baseForOwn);\\n\\n    /**\\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array|Object} Returns `collection`.\\n     */\\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\\n\\n    /**\\n     * The base implementation of `_.every` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\\n     *  else `false`\\n     */\\n    function baseEvery(collection, predicate) {\\n      var result = true;\\n      baseEach(collection, function(value, index, collection) {\\n        result = !!predicate(value, index, collection);\\n        return result;\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\\n     * `comparator` to determine the extremum value.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} iteratee The iteratee invoked per iteration.\\n     * @param {Function} comparator The comparator used to compare values.\\n     * @returns {*} Returns the extremum value.\\n     */\\n    function baseExtremum(array, iteratee, comparator) {\\n      var index = -1,\\n          length = array.length;\\n\\n      while (++index < length) {\\n        var value = array[index],\\n            current = iteratee(value);\\n\\n        if (current != null && (computed === undefined\\n              ? (current === current && !isSymbol(current))\\n              : comparator(current, computed)\\n            )) {\\n          var computed = current,\\n              result = value;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.fill` without an iteratee call guard.\\n     *\\n     * @private\\n     * @param {Array} array The array to fill.\\n     * @param {*} value The value to fill `array` with.\\n     * @param {number} [start=0] The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function baseFill(array, value, start, end) {\\n      var length = array.length;\\n\\n      start = toInteger(start);\\n      if (start < 0) {\\n        start = -start > length ? 0 : (length + start);\\n      }\\n      end = (end === undefined || end > length) ? length : toInteger(end);\\n      if (end < 0) {\\n        end += length;\\n      }\\n      end = start > end ? 0 : toLength(end);\\n      while (start < end) {\\n        array[start++] = value;\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * The base implementation of `_.filter` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {Array} Returns the new filtered array.\\n     */\\n    function baseFilter(collection, predicate) {\\n      var result = [];\\n      baseEach(collection, function(value, index, collection) {\\n        if (predicate(value, index, collection)) {\\n          result.push(value);\\n        }\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.flatten` with support for restricting flattening.\\n     *\\n     * @private\\n     * @param {Array} array The array to flatten.\\n     * @param {number} depth The maximum recursion depth.\\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\\n     * @param {Array} [result=[]] The initial result value.\\n     * @returns {Array} Returns the new flattened array.\\n     */\\n    function baseFlatten(array, depth, predicate, isStrict, result) {\\n      var index = -1,\\n          length = array.length;\\n\\n      predicate || (predicate = isFlattenable);\\n      result || (result = []);\\n\\n      while (++index < length) {\\n        var value = array[index];\\n        if (depth > 0 && predicate(value)) {\\n          if (depth > 1) {\\n            // Recursively flatten arrays (susceptible to call stack limits).\\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\\n          } else {\\n            arrayPush(result, value);\\n          }\\n        } else if (!isStrict) {\\n          result[result.length] = value;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `baseForOwn` which iterates over `object`\\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {Function} keysFunc The function to get the keys of `object`.\\n     * @returns {Object} Returns `object`.\\n     */\\n    var baseFor = createBaseFor();\\n\\n    /**\\n     * This function is like `baseFor` except that it iterates over properties\\n     * in the opposite order.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {Function} keysFunc The function to get the keys of `object`.\\n     * @returns {Object} Returns `object`.\\n     */\\n    var baseForRight = createBaseFor(true);\\n\\n    /**\\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseForOwn(object, iteratee) {\\n      return object && baseFor(object, iteratee, keys);\\n    }\\n\\n    /**\\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseForOwnRight(object, iteratee) {\\n      return object && baseForRight(object, iteratee, keys);\\n    }\\n\\n    /**\\n     * The base implementation of `_.functions` which creates an array of\\n     * `object` function property names filtered from `props`.\\n     *\\n     * @private\\n     * @param {Object} object The object to inspect.\\n     * @param {Array} props The property names to filter.\\n     * @returns {Array} Returns the function names.\\n     */\\n    function baseFunctions(object, props) {\\n      return arrayFilter(props, function(key) {\\n        return isFunction(object[key]);\\n      });\\n    }\\n\\n    /**\\n     * The base implementation of `_.get` without support for default values.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path of the property to get.\\n     * @returns {*} Returns the resolved value.\\n     */\\n    function baseGet(object, path) {\\n      path = castPath(path, object);\\n\\n      var index = 0,\\n          length = path.length;\\n\\n      while (object != null && index < length) {\\n        object = object[toKey(path[index++])];\\n      }\\n      return (index && index == length) ? object : undefined;\\n    }\\n\\n    /**\\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\\n     * symbols of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {Function} keysFunc The function to get the keys of `object`.\\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\\n     * @returns {Array} Returns the array of property names and symbols.\\n     */\\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\\n      var result = keysFunc(object);\\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\\n    }\\n\\n    /**\\n     * The base implementation of `getTag` without fallbacks for buggy environments.\\n     *\\n     * @private\\n     * @param {*} value The value to query.\\n     * @returns {string} Returns the `toStringTag`.\\n     */\\n    function baseGetTag(value) {\\n      if (value == null) {\\n        return value === undefined ? undefinedTag : nullTag;\\n      }\\n      value = Object(value);\\n      return (symToStringTag && symToStringTag in value)\\n        ? getRawTag(value)\\n        : objectToString(value);\\n    }\\n\\n    /**\\n     * The base implementation of `_.gt` which doesn't coerce arguments.\\n     *\\n     * @private\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\\n     *  else `false`.\\n     */\\n    function baseGt(value, other) {\\n      return value > other;\\n    }\\n\\n    /**\\n     * The base implementation of `_.has` without support for deep paths.\\n     *\\n     * @private\\n     * @param {Object} [object] The object to query.\\n     * @param {Array|string} key The key to check.\\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\\n     */\\n    function baseHas(object, key) {\\n      return object != null && hasOwnProperty.call(object, key);\\n    }\\n\\n    /**\\n     * The base implementation of `_.hasIn` without support for deep paths.\\n     *\\n     * @private\\n     * @param {Object} [object] The object to query.\\n     * @param {Array|string} key The key to check.\\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\\n     */\\n    function baseHasIn(object, key) {\\n      return object != null && key in Object(object);\\n    }\\n\\n    /**\\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\\n     *\\n     * @private\\n     * @param {number} number The number to check.\\n     * @param {number} start The start of the range.\\n     * @param {number} end The end of the range.\\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\\n     */\\n    function baseInRange(number, start, end) {\\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\\n    }\\n\\n    /**\\n     * The base implementation of methods like `_.intersection`, without support\\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\\n     *\\n     * @private\\n     * @param {Array} arrays The arrays to inspect.\\n     * @param {Function} [iteratee] The iteratee invoked per element.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new array of shared values.\\n     */\\n    function baseIntersection(arrays, iteratee, comparator) {\\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\\n          length = arrays[0].length,\\n          othLength = arrays.length,\\n          othIndex = othLength,\\n          caches = Array(othLength),\\n          maxLength = Infinity,\\n          result = [];\\n\\n      while (othIndex--) {\\n        var array = arrays[othIndex];\\n        if (othIndex && iteratee) {\\n          array = arrayMap(array, baseUnary(iteratee));\\n        }\\n        maxLength = nativeMin(array.length, maxLength);\\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\\n          ? new SetCache(othIndex && array)\\n          : undefined;\\n      }\\n      array = arrays[0];\\n\\n      var index = -1,\\n          seen = caches[0];\\n\\n      outer:\\n      while (++index < length && result.length < maxLength) {\\n        var value = array[index],\\n            computed = iteratee ? iteratee(value) : value;\\n\\n        value = (comparator || value !== 0) ? value : 0;\\n        if (!(seen\\n              ? cacheHas(seen, computed)\\n              : includes(result, computed, comparator)\\n            )) {\\n          othIndex = othLength;\\n          while (--othIndex) {\\n            var cache = caches[othIndex];\\n            if (!(cache\\n                  ? cacheHas(cache, computed)\\n                  : includes(arrays[othIndex], computed, comparator))\\n                ) {\\n              continue outer;\\n            }\\n          }\\n          if (seen) {\\n            seen.push(computed);\\n          }\\n          result.push(value);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\\n     * `object` with values transformed by `iteratee` and set by `setter`.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} setter The function to set `accumulator` values.\\n     * @param {Function} iteratee The iteratee to transform values.\\n     * @param {Object} accumulator The initial inverted object.\\n     * @returns {Function} Returns `accumulator`.\\n     */\\n    function baseInverter(object, setter, iteratee, accumulator) {\\n      baseForOwn(object, function(value, key, object) {\\n        setter(accumulator, iteratee(value), key, object);\\n      });\\n      return accumulator;\\n    }\\n\\n    /**\\n     * The base implementation of `_.invoke` without support for individual\\n     * method arguments.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path of the method to invoke.\\n     * @param {Array} args The arguments to invoke the method with.\\n     * @returns {*} Returns the result of the invoked method.\\n     */\\n    function baseInvoke(object, path, args) {\\n      path = castPath(path, object);\\n      object = parent(object, path);\\n      var func = object == null ? object : object[toKey(last(path))];\\n      return func == null ? undefined : apply(func, object, args);\\n    }\\n\\n    /**\\n     * The base implementation of `_.isArguments`.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\\n     */\\n    function baseIsArguments(value) {\\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\\n     */\\n    function baseIsArrayBuffer(value) {\\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isDate` without Node.js optimizations.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\\n     */\\n    function baseIsDate(value) {\\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isEqual` which supports partial comparisons\\n     * and tracks traversed objects.\\n     *\\n     * @private\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @param {boolean} bitmask The bitmask flags.\\n     *  1 - Unordered comparison\\n     *  2 - Partial comparison\\n     * @param {Function} [customizer] The function to customize comparisons.\\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\\n     */\\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\\n      if (value === other) {\\n        return true;\\n      }\\n      if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\\n        return value !== value && other !== other;\\n      }\\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\\n    }\\n\\n    /**\\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\\n     * deep comparisons and tracks traversed objects enabling objects with circular\\n     * references to be compared.\\n     *\\n     * @private\\n     * @param {Object} object The object to compare.\\n     * @param {Object} other The other object to compare.\\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\\n     * @param {Function} customizer The function to customize comparisons.\\n     * @param {Function} equalFunc The function to determine equivalents of values.\\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\\n     */\\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\\n      var objIsArr = isArray(object),\\n          othIsArr = isArray(other),\\n          objTag = arrayTag,\\n          othTag = arrayTag;\\n\\n      if (!objIsArr) {\\n        objTag = getTag(object);\\n        objTag = objTag == argsTag ? objectTag : objTag;\\n      }\\n      if (!othIsArr) {\\n        othTag = getTag(other);\\n        othTag = othTag == argsTag ? objectTag : othTag;\\n      }\\n      var objIsObj = objTag == objectTag,\\n          othIsObj = othTag == objectTag,\\n          isSameTag = objTag == othTag;\\n\\n      if (isSameTag && isBuffer(object)) {\\n        if (!isBuffer(other)) {\\n          return false;\\n        }\\n        objIsArr = true;\\n        objIsObj = false;\\n      }\\n      if (isSameTag && !objIsObj) {\\n        stack || (stack = new Stack);\\n        return (objIsArr || isTypedArray(object))\\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\\n      }\\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\\n\\n        if (objIsWrapped || othIsWrapped) {\\n          var objUnwrapped = objIsWrapped ? object.value() : object,\\n              othUnwrapped = othIsWrapped ? other.value() : other;\\n\\n          stack || (stack = new Stack);\\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\\n        }\\n      }\\n      if (!isSameTag) {\\n        return false;\\n      }\\n      stack || (stack = new Stack);\\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\\n    }\\n\\n    /**\\n     * The base implementation of `_.isMap` without Node.js optimizations.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\\n     */\\n    function baseIsMap(value) {\\n      return isObjectLike(value) && getTag(value) == mapTag;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Object} object The object to inspect.\\n     * @param {Object} source The object of property values to match.\\n     * @param {Array} matchData The property names, values, and compare flags to match.\\n     * @param {Function} [customizer] The function to customize comparisons.\\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\\n     */\\n    function baseIsMatch(object, source, matchData, customizer) {\\n      var index = matchData.length,\\n          length = index,\\n          noCustomizer = !customizer;\\n\\n      if (object == null) {\\n        return !length;\\n      }\\n      object = Object(object);\\n      while (index--) {\\n        var data = matchData[index];\\n        if ((noCustomizer && data[2])\\n              ? data[1] !== object[data[0]]\\n              : !(data[0] in object)\\n            ) {\\n          return false;\\n        }\\n      }\\n      while (++index < length) {\\n        data = matchData[index];\\n        var key = data[0],\\n            objValue = object[key],\\n            srcValue = data[1];\\n\\n        if (noCustomizer && data[2]) {\\n          if (objValue === undefined && !(key in object)) {\\n            return false;\\n          }\\n        } else {\\n          var stack = new Stack;\\n          if (customizer) {\\n            var result = customizer(objValue, srcValue, key, object, source, stack);\\n          }\\n          if (!(result === undefined\\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\\n                : result\\n              )) {\\n            return false;\\n          }\\n        }\\n      }\\n      return true;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isNative` without bad shim checks.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a native function,\\n     *  else `false`.\\n     */\\n    function baseIsNative(value) {\\n      if (!isObject(value) || isMasked(value)) {\\n        return false;\\n      }\\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\\n      return pattern.test(toSource(value));\\n    }\\n\\n    /**\\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\\n     */\\n    function baseIsRegExp(value) {\\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isSet` without Node.js optimizations.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\\n     */\\n    function baseIsSet(value) {\\n      return isObjectLike(value) && getTag(value) == setTag;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\\n     */\\n    function baseIsTypedArray(value) {\\n      return isObjectLike(value) &&\\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\\n    }\\n\\n    /**\\n     * The base implementation of `_.iteratee`.\\n     *\\n     * @private\\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\\n     * @returns {Function} Returns the iteratee.\\n     */\\n    function baseIteratee(value) {\\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\\n      if (typeof value == 'function') {\\n        return value;\\n      }\\n      if (value == null) {\\n        return identity;\\n      }\\n      if (typeof value == 'object') {\\n        return isArray(value)\\n          ? baseMatchesProperty(value[0], value[1])\\n          : baseMatches(value);\\n      }\\n      return property(value);\\n    }\\n\\n    /**\\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names.\\n     */\\n    function baseKeys(object) {\\n      if (!isPrototype(object)) {\\n        return nativeKeys(object);\\n      }\\n      var result = [];\\n      for (var key in Object(object)) {\\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\\n          result.push(key);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names.\\n     */\\n    function baseKeysIn(object) {\\n      if (!isObject(object)) {\\n        return nativeKeysIn(object);\\n      }\\n      var isProto = isPrototype(object),\\n          result = [];\\n\\n      for (var key in object) {\\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\\n          result.push(key);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.lt` which doesn't coerce arguments.\\n     *\\n     * @private\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\\n     *  else `false`.\\n     */\\n    function baseLt(value, other) {\\n      return value < other;\\n    }\\n\\n    /**\\n     * The base implementation of `_.map` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array} Returns the new mapped array.\\n     */\\n    function baseMap(collection, iteratee) {\\n      var index = -1,\\n          result = isArrayLike(collection) ? Array(collection.length) : [];\\n\\n      baseEach(collection, function(value, key, collection) {\\n        result[++index] = iteratee(value, key, collection);\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.matches` which doesn't clone `source`.\\n     *\\n     * @private\\n     * @param {Object} source The object of property values to match.\\n     * @returns {Function} Returns the new spec function.\\n     */\\n    function baseMatches(source) {\\n      var matchData = getMatchData(source);\\n      if (matchData.length == 1 && matchData[0][2]) {\\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\\n      }\\n      return function(object) {\\n        return object === source || baseIsMatch(object, source, matchData);\\n      };\\n    }\\n\\n    /**\\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\\n     *\\n     * @private\\n     * @param {string} path The path of the property to get.\\n     * @param {*} srcValue The value to match.\\n     * @returns {Function} Returns the new spec function.\\n     */\\n    function baseMatchesProperty(path, srcValue) {\\n      if (isKey(path) && isStrictComparable(srcValue)) {\\n        return matchesStrictComparable(toKey(path), srcValue);\\n      }\\n      return function(object) {\\n        var objValue = get(object, path);\\n        return (objValue === undefined && objValue === srcValue)\\n          ? hasIn(object, path)\\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\\n      };\\n    }\\n\\n    /**\\n     * The base implementation of `_.merge` without support for multiple sources.\\n     *\\n     * @private\\n     * @param {Object} object The destination object.\\n     * @param {Object} source The source object.\\n     * @param {number} srcIndex The index of `source`.\\n     * @param {Function} [customizer] The function to customize merged values.\\n     * @param {Object} [stack] Tracks traversed source values and their merged\\n     *  counterparts.\\n     */\\n    function baseMerge(object, source, srcIndex, customizer, stack) {\\n      if (object === source) {\\n        return;\\n      }\\n      baseFor(source, function(srcValue, key) {\\n        if (isObject(srcValue)) {\\n          stack || (stack = new Stack);\\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\\n        }\\n        else {\\n          var newValue = customizer\\n            ? customizer(object[key], srcValue, (key + ''), object, source, stack)\\n            : undefined;\\n\\n          if (newValue === undefined) {\\n            newValue = srcValue;\\n          }\\n          assignMergeValue(object, key, newValue);\\n        }\\n      }, keysIn);\\n    }\\n\\n    /**\\n     * A specialized version of `baseMerge` for arrays and objects which performs\\n     * deep merges and tracks traversed objects enabling objects with circular\\n     * references to be merged.\\n     *\\n     * @private\\n     * @param {Object} object The destination object.\\n     * @param {Object} source The source object.\\n     * @param {string} key The key of the value to merge.\\n     * @param {number} srcIndex The index of `source`.\\n     * @param {Function} mergeFunc The function to merge values.\\n     * @param {Function} [customizer] The function to customize assigned values.\\n     * @param {Object} [stack] Tracks traversed source values and their merged\\n     *  counterparts.\\n     */\\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\\n      var objValue = object[key],\\n          srcValue = source[key],\\n          stacked = stack.get(srcValue);\\n\\n      if (stacked) {\\n        assignMergeValue(object, key, stacked);\\n        return;\\n      }\\n      var newValue = customizer\\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\\n        : undefined;\\n\\n      var isCommon = newValue === undefined;\\n\\n      if (isCommon) {\\n        var isArr = isArray(srcValue),\\n            isBuff = !isArr && isBuffer(srcValue),\\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\\n\\n        newValue = srcValue;\\n        if (isArr || isBuff || isTyped) {\\n          if (isArray(objValue)) {\\n            newValue = objValue;\\n          }\\n          else if (isArrayLikeObject(objValue)) {\\n            newValue = copyArray(objValue);\\n          }\\n          else if (isBuff) {\\n            isCommon = false;\\n            newValue = cloneBuffer(srcValue, true);\\n          }\\n          else if (isTyped) {\\n            isCommon = false;\\n            newValue = cloneTypedArray(srcValue, true);\\n          }\\n          else {\\n            newValue = [];\\n          }\\n        }\\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\\n          newValue = objValue;\\n          if (isArguments(objValue)) {\\n            newValue = toPlainObject(objValue);\\n          }\\n          else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {\\n            newValue = initCloneObject(srcValue);\\n          }\\n        }\\n        else {\\n          isCommon = false;\\n        }\\n      }\\n      if (isCommon) {\\n        // Recursively merge objects and arrays (susceptible to call stack limits).\\n        stack.set(srcValue, newValue);\\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\\n        stack['delete'](srcValue);\\n      }\\n      assignMergeValue(object, key, newValue);\\n    }\\n\\n    /**\\n     * The base implementation of `_.nth` which doesn't coerce arguments.\\n     *\\n     * @private\\n     * @param {Array} array The array to query.\\n     * @param {number} n The index of the element to return.\\n     * @returns {*} Returns the nth element of `array`.\\n     */\\n    function baseNth(array, n) {\\n      var length = array.length;\\n      if (!length) {\\n        return;\\n      }\\n      n += n < 0 ? length : 0;\\n      return isIndex(n, length) ? array[n] : undefined;\\n    }\\n\\n    /**\\n     * The base implementation of `_.orderBy` without param guards.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\\n     * @param {string[]} orders The sort orders of `iteratees`.\\n     * @returns {Array} Returns the new sorted array.\\n     */\\n    function baseOrderBy(collection, iteratees, orders) {\\n      var index = -1;\\n      iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\\n\\n      var result = baseMap(collection, function(value, key, collection) {\\n        var criteria = arrayMap(iteratees, function(iteratee) {\\n          return iteratee(value);\\n        });\\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\\n      });\\n\\n      return baseSortBy(result, function(object, other) {\\n        return compareMultiple(object, other, orders);\\n      });\\n    }\\n\\n    /**\\n     * The base implementation of `_.pick` without support for individual\\n     * property identifiers.\\n     *\\n     * @private\\n     * @param {Object} object The source object.\\n     * @param {string[]} paths The property paths to pick.\\n     * @returns {Object} Returns the new object.\\n     */\\n    function basePick(object, paths) {\\n      object = Object(object);\\n      return basePickBy(object, paths, function(value, path) {\\n        return hasIn(object, path);\\n      });\\n    }\\n\\n    /**\\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Object} object The source object.\\n     * @param {string[]} paths The property paths to pick.\\n     * @param {Function} predicate The function invoked per property.\\n     * @returns {Object} Returns the new object.\\n     */\\n    function basePickBy(object, paths, predicate) {\\n      var index = -1,\\n          length = paths.length,\\n          result = {};\\n\\n      while (++index < length) {\\n        var path = paths[index],\\n            value = baseGet(object, path);\\n\\n        if (predicate(value, path)) {\\n          baseSet(result, castPath(path, object), value);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * A specialized version of `baseProperty` which supports deep paths.\\n     *\\n     * @private\\n     * @param {Array|string} path The path of the property to get.\\n     * @returns {Function} Returns the new accessor function.\\n     */\\n    function basePropertyDeep(path) {\\n      return function(object) {\\n        return baseGet(object, path);\\n      };\\n    }\\n\\n    /**\\n     * The base implementation of `_.pullAllBy` without support for iteratee\\n     * shorthands.\\n     *\\n     * @private\\n     * @param {Array} array The array to modify.\\n     * @param {Array} values The values to remove.\\n     * @param {Function} [iteratee] The iteratee invoked per element.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function basePullAll(array, values, iteratee, comparator) {\\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\\n          index = -1,\\n          length = values.length,\\n          seen = array;\\n\\n      if (array === values) {\\n        values = copyArray(values);\\n      }\\n      if (iteratee) {\\n        seen = arrayMap(array, baseUnary(iteratee));\\n      }\\n      while (++index < length) {\\n        var fromIndex = 0,\\n            value = values[index],\\n            computed = iteratee ? iteratee(value) : value;\\n\\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\\n          if (seen !== array) {\\n            splice.call(seen, fromIndex, 1);\\n          }\\n          splice.call(array, fromIndex, 1);\\n        }\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * The base implementation of `_.pullAt` without support for individual\\n     * indexes or capturing the removed elements.\\n     *\\n     * @private\\n     * @param {Array} array The array to modify.\\n     * @param {number[]} indexes The indexes of elements to remove.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function basePullAt(array, indexes) {\\n      var length = array ? indexes.length : 0,\\n          lastIndex = length - 1;\\n\\n      while (length--) {\\n        var index = indexes[length];\\n        if (length == lastIndex || index !== previous) {\\n          var previous = index;\\n          if (isIndex(index)) {\\n            splice.call(array, index, 1);\\n          } else {\\n            baseUnset(array, index);\\n          }\\n        }\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * The base implementation of `_.random` without support for returning\\n     * floating-point numbers.\\n     *\\n     * @private\\n     * @param {number} lower The lower bound.\\n     * @param {number} upper The upper bound.\\n     * @returns {number} Returns the random number.\\n     */\\n    function baseRandom(lower, upper) {\\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\\n    }\\n\\n    /**\\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\\n     * coerce arguments.\\n     *\\n     * @private\\n     * @param {number} start The start of the range.\\n     * @param {number} end The end of the range.\\n     * @param {number} step The value to increment or decrement by.\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Array} Returns the range of numbers.\\n     */\\n    function baseRange(start, end, step, fromRight) {\\n      var index = -1,\\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\\n          result = Array(length);\\n\\n      while (length--) {\\n        result[fromRight ? length : ++index] = start;\\n        start += step;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\\n     *\\n     * @private\\n     * @param {string} string The string to repeat.\\n     * @param {number} n The number of times to repeat the string.\\n     * @returns {string} Returns the repeated string.\\n     */\\n    function baseRepeat(string, n) {\\n      var result = '';\\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\\n        return result;\\n      }\\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\\n      do {\\n        if (n % 2) {\\n          result += string;\\n        }\\n        n = nativeFloor(n / 2);\\n        if (n) {\\n          string += string;\\n        }\\n      } while (n);\\n\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\\n     *\\n     * @private\\n     * @param {Function} func The function to apply a rest parameter to.\\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\\n     * @returns {Function} Returns the new function.\\n     */\\n    function baseRest(func, start) {\\n      return setToString(overRest(func, start, identity), func + '');\\n    }\\n\\n    /**\\n     * The base implementation of `_.sample`.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to sample.\\n     * @returns {*} Returns the random element.\\n     */\\n    function baseSample(collection) {\\n      return arraySample(values(collection));\\n    }\\n\\n    /**\\n     * The base implementation of `_.sampleSize` without param guards.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to sample.\\n     * @param {number} n The number of elements to sample.\\n     * @returns {Array} Returns the random elements.\\n     */\\n    function baseSampleSize(collection, n) {\\n      var array = values(collection);\\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\\n    }\\n\\n    /**\\n     * The base implementation of `_.set`.\\n     *\\n     * @private\\n     * @param {Object} object The object to modify.\\n     * @param {Array|string} path The path of the property to set.\\n     * @param {*} value The value to set.\\n     * @param {Function} [customizer] The function to customize path creation.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseSet(object, path, value, customizer) {\\n      if (!isObject(object)) {\\n        return object;\\n      }\\n      path = castPath(path, object);\\n\\n      var index = -1,\\n          length = path.length,\\n          lastIndex = length - 1,\\n          nested = object;\\n\\n      while (nested != null && ++index < length) {\\n        var key = toKey(path[index]),\\n            newValue = value;\\n\\n        if (index != lastIndex) {\\n          var objValue = nested[key];\\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\\n          if (newValue === undefined) {\\n            newValue = isObject(objValue)\\n              ? objValue\\n              : (isIndex(path[index + 1]) ? [] : {});\\n          }\\n        }\\n        assignValue(nested, key, newValue);\\n        nested = nested[key];\\n      }\\n      return object;\\n    }\\n\\n    /**\\n     * The base implementation of `setData` without support for hot loop shorting.\\n     *\\n     * @private\\n     * @param {Function} func The function to associate metadata with.\\n     * @param {*} data The metadata.\\n     * @returns {Function} Returns `func`.\\n     */\\n    var baseSetData = !metaMap ? identity : function(func, data) {\\n      metaMap.set(func, data);\\n      return func;\\n    };\\n\\n    /**\\n     * The base implementation of `setToString` without support for hot loop shorting.\\n     *\\n     * @private\\n     * @param {Function} func The function to modify.\\n     * @param {Function} string The `toString` result.\\n     * @returns {Function} Returns `func`.\\n     */\\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\\n      return defineProperty(func, 'toString', {\\n        'configurable': true,\\n        'enumerable': false,\\n        'value': constant(string),\\n        'writable': true\\n      });\\n    };\\n\\n    /**\\n     * The base implementation of `_.shuffle`.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to shuffle.\\n     * @returns {Array} Returns the new shuffled array.\\n     */\\n    function baseShuffle(collection) {\\n      return shuffleSelf(values(collection));\\n    }\\n\\n    /**\\n     * The base implementation of `_.slice` without an iteratee call guard.\\n     *\\n     * @private\\n     * @param {Array} array The array to slice.\\n     * @param {number} [start=0] The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns the slice of `array`.\\n     */\\n    function baseSlice(array, start, end) {\\n      var index = -1,\\n          length = array.length;\\n\\n      if (start < 0) {\\n        start = -start > length ? 0 : (length + start);\\n      }\\n      end = end > length ? length : end;\\n      if (end < 0) {\\n        end += length;\\n      }\\n      length = start > end ? 0 : ((end - start) >>> 0);\\n      start >>>= 0;\\n\\n      var result = Array(length);\\n      while (++index < length) {\\n        result[index] = array[index + start];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.some` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\\n     *  else `false`.\\n     */\\n    function baseSome(collection, predicate) {\\n      var result;\\n\\n      baseEach(collection, function(value, index, collection) {\\n        result = predicate(value, index, collection);\\n        return !result;\\n      });\\n      return !!result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\\n     * performs a binary search of `array` to determine the index at which `value`\\n     * should be inserted into `array` in order to maintain its sort order.\\n     *\\n     * @private\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     */\\n    function baseSortedIndex(array, value, retHighest) {\\n      var low = 0,\\n          high = array == null ? low : array.length;\\n\\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\\n        while (low < high) {\\n          var mid = (low + high) >>> 1,\\n              computed = array[mid];\\n\\n          if (computed !== null && !isSymbol(computed) &&\\n              (retHighest ? (computed <= value) : (computed < value))) {\\n            low = mid + 1;\\n          } else {\\n            high = mid;\\n          }\\n        }\\n        return high;\\n      }\\n      return baseSortedIndexBy(array, value, identity, retHighest);\\n    }\\n\\n    /**\\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\\n     * which invokes `iteratee` for `value` and each element of `array` to compute\\n     * their sort ranking. The iteratee is invoked with one argument; (value).\\n     *\\n     * @private\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @param {Function} iteratee The iteratee invoked per element.\\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     */\\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\\n      value = iteratee(value);\\n\\n      var low = 0,\\n          high = array == null ? 0 : array.length,\\n          valIsNaN = value !== value,\\n          valIsNull = value === null,\\n          valIsSymbol = isSymbol(value),\\n          valIsUndefined = value === undefined;\\n\\n      while (low < high) {\\n        var mid = nativeFloor((low + high) / 2),\\n            computed = iteratee(array[mid]),\\n            othIsDefined = computed !== undefined,\\n            othIsNull = computed === null,\\n            othIsReflexive = computed === computed,\\n            othIsSymbol = isSymbol(computed);\\n\\n        if (valIsNaN) {\\n          var setLow = retHighest || othIsReflexive;\\n        } else if (valIsUndefined) {\\n          setLow = othIsReflexive && (retHighest || othIsDefined);\\n        } else if (valIsNull) {\\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\\n        } else if (valIsSymbol) {\\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\\n        } else if (othIsNull || othIsSymbol) {\\n          setLow = false;\\n        } else {\\n          setLow = retHighest ? (computed <= value) : (computed < value);\\n        }\\n        if (setLow) {\\n          low = mid + 1;\\n        } else {\\n          high = mid;\\n        }\\n      }\\n      return nativeMin(high, MAX_ARRAY_INDEX);\\n    }\\n\\n    /**\\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\\n     * support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array} array The array to inspect.\\n     * @param {Function} [iteratee] The iteratee invoked per element.\\n     * @returns {Array} Returns the new duplicate free array.\\n     */\\n    function baseSortedUniq(array, iteratee) {\\n      var index = -1,\\n          length = array.length,\\n          resIndex = 0,\\n          result = [];\\n\\n      while (++index < length) {\\n        var value = array[index],\\n            computed = iteratee ? iteratee(value) : value;\\n\\n        if (!index || !eq(computed, seen)) {\\n          var seen = computed;\\n          result[resIndex++] = value === 0 ? 0 : value;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.toNumber` which doesn't ensure correct\\n     * conversions of binary, hexadecimal, or octal string values.\\n     *\\n     * @private\\n     * @param {*} value The value to process.\\n     * @returns {number} Returns the number.\\n     */\\n    function baseToNumber(value) {\\n      if (typeof value == 'number') {\\n        return value;\\n      }\\n      if (isSymbol(value)) {\\n        return NAN;\\n      }\\n      return +value;\\n    }\\n\\n    /**\\n     * The base implementation of `_.toString` which doesn't convert nullish\\n     * values to empty strings.\\n     *\\n     * @private\\n     * @param {*} value The value to process.\\n     * @returns {string} Returns the string.\\n     */\\n    function baseToString(value) {\\n      // Exit early for strings to avoid a performance hit in some environments.\\n      if (typeof value == 'string') {\\n        return value;\\n      }\\n      if (isArray(value)) {\\n        // Recursively convert values (susceptible to call stack limits).\\n        return arrayMap(value, baseToString) + '';\\n      }\\n      if (isSymbol(value)) {\\n        return symbolToString ? symbolToString.call(value) : '';\\n      }\\n      var result = (value + '');\\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array} array The array to inspect.\\n     * @param {Function} [iteratee] The iteratee invoked per element.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new duplicate free array.\\n     */\\n    function baseUniq(array, iteratee, comparator) {\\n      var index = -1,\\n          includes = arrayIncludes,\\n          length = array.length,\\n          isCommon = true,\\n          result = [],\\n          seen = result;\\n\\n      if (comparator) {\\n        isCommon = false;\\n        includes = arrayIncludesWith;\\n      }\\n      else if (length >= LARGE_ARRAY_SIZE) {\\n        var set = iteratee ? null : createSet(array);\\n        if (set) {\\n          return setToArray(set);\\n        }\\n        isCommon = false;\\n        includes = cacheHas;\\n        seen = new SetCache;\\n      }\\n      else {\\n        seen = iteratee ? [] : result;\\n      }\\n      outer:\\n      while (++index < length) {\\n        var value = array[index],\\n            computed = iteratee ? iteratee(value) : value;\\n\\n        value = (comparator || value !== 0) ? value : 0;\\n        if (isCommon && computed === computed) {\\n          var seenIndex = seen.length;\\n          while (seenIndex--) {\\n            if (seen[seenIndex] === computed) {\\n              continue outer;\\n            }\\n          }\\n          if (iteratee) {\\n            seen.push(computed);\\n          }\\n          result.push(value);\\n        }\\n        else if (!includes(seen, computed, comparator)) {\\n          if (seen !== result) {\\n            seen.push(computed);\\n          }\\n          result.push(value);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.unset`.\\n     *\\n     * @private\\n     * @param {Object} object The object to modify.\\n     * @param {Array|string} path The property path to unset.\\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\\n     */\\n    function baseUnset(object, path) {\\n      path = castPath(path, object);\\n      object = parent(object, path);\\n      return object == null || delete object[toKey(last(path))];\\n    }\\n\\n    /**\\n     * The base implementation of `_.update`.\\n     *\\n     * @private\\n     * @param {Object} object The object to modify.\\n     * @param {Array|string} path The path of the property to update.\\n     * @param {Function} updater The function to produce the updated value.\\n     * @param {Function} [customizer] The function to customize path creation.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseUpdate(object, path, updater, customizer) {\\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\\n    }\\n\\n    /**\\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\\n     * without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array} array The array to query.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Array} Returns the slice of `array`.\\n     */\\n    function baseWhile(array, predicate, isDrop, fromRight) {\\n      var length = array.length,\\n          index = fromRight ? length : -1;\\n\\n      while ((fromRight ? index-- : ++index < length) &&\\n        predicate(array[index], index, array)) {}\\n\\n      return isDrop\\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\\n    }\\n\\n    /**\\n     * The base implementation of `wrapperValue` which returns the result of\\n     * performing a sequence of actions on the unwrapped `value`, where each\\n     * successive action is supplied the return value of the previous.\\n     *\\n     * @private\\n     * @param {*} value The unwrapped value.\\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\\n     * @returns {*} Returns the resolved value.\\n     */\\n    function baseWrapperValue(value, actions) {\\n      var result = value;\\n      if (result instanceof LazyWrapper) {\\n        result = result.value();\\n      }\\n      return arrayReduce(actions, function(result, action) {\\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\\n      }, result);\\n    }\\n\\n    /**\\n     * The base implementation of methods like `_.xor`, without support for\\n     * iteratee shorthands, that accepts an array of arrays to inspect.\\n     *\\n     * @private\\n     * @param {Array} arrays The arrays to inspect.\\n     * @param {Function} [iteratee] The iteratee invoked per element.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new array of values.\\n     */\\n    function baseXor(arrays, iteratee, comparator) {\\n      var length = arrays.length;\\n      if (length < 2) {\\n        return length ? baseUniq(arrays[0]) : [];\\n      }\\n      var index = -1,\\n          result = Array(length);\\n\\n      while (++index < length) {\\n        var array = arrays[index],\\n            othIndex = -1;\\n\\n        while (++othIndex < length) {\\n          if (othIndex != index) {\\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\\n          }\\n        }\\n      }\\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\\n    }\\n\\n    /**\\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\\n     *\\n     * @private\\n     * @param {Array} props The property identifiers.\\n     * @param {Array} values The property values.\\n     * @param {Function} assignFunc The function to assign values.\\n     * @returns {Object} Returns the new object.\\n     */\\n    function baseZipObject(props, values, assignFunc) {\\n      var index = -1,\\n          length = props.length,\\n          valsLength = values.length,\\n          result = {};\\n\\n      while (++index < length) {\\n        var value = index < valsLength ? values[index] : undefined;\\n        assignFunc(result, props[index], value);\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Casts `value` to an empty array if it's not an array like object.\\n     *\\n     * @private\\n     * @param {*} value The value to inspect.\\n     * @returns {Array|Object} Returns the cast array-like object.\\n     */\\n    function castArrayLikeObject(value) {\\n      return isArrayLikeObject(value) ? value : [];\\n    }\\n\\n    /**\\n     * Casts `value` to `identity` if it's not a function.\\n     *\\n     * @private\\n     * @param {*} value The value to inspect.\\n     * @returns {Function} Returns cast function.\\n     */\\n    function castFunction(value) {\\n      return typeof value == 'function' ? value : identity;\\n    }\\n\\n    /**\\n     * Casts `value` to a path array if it's not one.\\n     *\\n     * @private\\n     * @param {*} value The value to inspect.\\n     * @param {Object} [object] The object to query keys on.\\n     * @returns {Array} Returns the cast property path array.\\n     */\\n    function castPath(value, object) {\\n      if (isArray(value)) {\\n        return value;\\n      }\\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\\n    }\\n\\n    /**\\n     * A `baseRest` alias which can be replaced with `identity` by module\\n     * replacement plugins.\\n     *\\n     * @private\\n     * @type {Function}\\n     * @param {Function} func The function to apply a rest parameter to.\\n     * @returns {Function} Returns the new function.\\n     */\\n    var castRest = baseRest;\\n\\n    /**\\n     * Casts `array` to a slice if it's needed.\\n     *\\n     * @private\\n     * @param {Array} array The array to inspect.\\n     * @param {number} start The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns the cast slice.\\n     */\\n    function castSlice(array, start, end) {\\n      var length = array.length;\\n      end = end === undefined ? length : end;\\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\\n    }\\n\\n    /**\\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\\n     *\\n     * @private\\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\\n     */\\n    var clearTimeout = ctxClearTimeout || function(id) {\\n      return root.clearTimeout(id);\\n    };\\n\\n    /**\\n     * Creates a clone of  `buffer`.\\n     *\\n     * @private\\n     * @param {Buffer} buffer The buffer to clone.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @returns {Buffer} Returns the cloned buffer.\\n     */\\n    function cloneBuffer(buffer, isDeep) {\\n      if (isDeep) {\\n        return buffer.slice();\\n      }\\n      var length = buffer.length,\\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\\n\\n      buffer.copy(result);\\n      return result;\\n    }\\n\\n    /**\\n     * Creates a clone of `arrayBuffer`.\\n     *\\n     * @private\\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\\n     */\\n    function cloneArrayBuffer(arrayBuffer) {\\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\\n      return result;\\n    }\\n\\n    /**\\n     * Creates a clone of `dataView`.\\n     *\\n     * @private\\n     * @param {Object} dataView The data view to clone.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @returns {Object} Returns the cloned data view.\\n     */\\n    function cloneDataView(dataView, isDeep) {\\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\\n    }\\n\\n    /**\\n     * Creates a clone of `map`.\\n     *\\n     * @private\\n     * @param {Object} map The map to clone.\\n     * @param {Function} cloneFunc The function to clone values.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @returns {Object} Returns the cloned map.\\n     */\\n    function cloneMap(map, isDeep, cloneFunc) {\\n      var array = isDeep ? cloneFunc(mapToArray(map), CLONE_DEEP_FLAG) : mapToArray(map);\\n      return arrayReduce(array, addMapEntry, new map.constructor);\\n    }\\n\\n    /**\\n     * Creates a clone of `regexp`.\\n     *\\n     * @private\\n     * @param {Object} regexp The regexp to clone.\\n     * @returns {Object} Returns the cloned regexp.\\n     */\\n    function cloneRegExp(regexp) {\\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\\n      result.lastIndex = regexp.lastIndex;\\n      return result;\\n    }\\n\\n    /**\\n     * Creates a clone of `set`.\\n     *\\n     * @private\\n     * @param {Object} set The set to clone.\\n     * @param {Function} cloneFunc The function to clone values.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @returns {Object} Returns the cloned set.\\n     */\\n    function cloneSet(set, isDeep, cloneFunc) {\\n      var array = isDeep ? cloneFunc(setToArray(set), CLONE_DEEP_FLAG) : setToArray(set);\\n      return arrayReduce(array, addSetEntry, new set.constructor);\\n    }\\n\\n    /**\\n     * Creates a clone of the `symbol` object.\\n     *\\n     * @private\\n     * @param {Object} symbol The symbol object to clone.\\n     * @returns {Object} Returns the cloned symbol object.\\n     */\\n    function cloneSymbol(symbol) {\\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\\n    }\\n\\n    /**\\n     * Creates a clone of `typedArray`.\\n     *\\n     * @private\\n     * @param {Object} typedArray The typed array to clone.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @returns {Object} Returns the cloned typed array.\\n     */\\n    function cloneTypedArray(typedArray, isDeep) {\\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\\n    }\\n\\n    /**\\n     * Compares values to sort them in ascending order.\\n     *\\n     * @private\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {number} Returns the sort order indicator for `value`.\\n     */\\n    function compareAscending(value, other) {\\n      if (value !== other) {\\n        var valIsDefined = value !== undefined,\\n            valIsNull = value === null,\\n            valIsReflexive = value === value,\\n            valIsSymbol = isSymbol(value);\\n\\n        var othIsDefined = other !== undefined,\\n            othIsNull = other === null,\\n            othIsReflexive = other === other,\\n            othIsSymbol = isSymbol(other);\\n\\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\\n            (valIsNull && othIsDefined && othIsReflexive) ||\\n            (!valIsDefined && othIsReflexive) ||\\n            !valIsReflexive) {\\n          return 1;\\n        }\\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\\n            (othIsNull && valIsDefined && valIsReflexive) ||\\n            (!othIsDefined && valIsReflexive) ||\\n            !othIsReflexive) {\\n          return -1;\\n        }\\n      }\\n      return 0;\\n    }\\n\\n    /**\\n     * Used by `_.orderBy` to compare multiple properties of a value to another\\n     * and stable sort them.\\n     *\\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\\n     * specify an order of \\\"desc\\\" for descending or \\\"asc\\\" for ascending sort order\\n     * of corresponding values.\\n     *\\n     * @private\\n     * @param {Object} object The object to compare.\\n     * @param {Object} other The other object to compare.\\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\\n     * @returns {number} Returns the sort order indicator for `object`.\\n     */\\n    function compareMultiple(object, other, orders) {\\n      var index = -1,\\n          objCriteria = object.criteria,\\n          othCriteria = other.criteria,\\n          length = objCriteria.length,\\n          ordersLength = orders.length;\\n\\n      while (++index < length) {\\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\\n        if (result) {\\n          if (index >= ordersLength) {\\n            return result;\\n          }\\n          var order = orders[index];\\n          return result * (order == 'desc' ? -1 : 1);\\n        }\\n      }\\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\\n      // that causes it, under certain circumstances, to provide the same value for\\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\\n      // for more details.\\n      //\\n      // This also ensures a stable sort in V8 and other engines.\\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\\n      return object.index - other.index;\\n    }\\n\\n    /**\\n     * Creates an array that is the composition of partially applied arguments,\\n     * placeholders, and provided arguments into a single array of arguments.\\n     *\\n     * @private\\n     * @param {Array} args The provided arguments.\\n     * @param {Array} partials The arguments to prepend to those provided.\\n     * @param {Array} holders The `partials` placeholder indexes.\\n     * @params {boolean} [isCurried] Specify composing for a curried function.\\n     * @returns {Array} Returns the new array of composed arguments.\\n     */\\n    function composeArgs(args, partials, holders, isCurried) {\\n      var argsIndex = -1,\\n          argsLength = args.length,\\n          holdersLength = holders.length,\\n          leftIndex = -1,\\n          leftLength = partials.length,\\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\\n          result = Array(leftLength + rangeLength),\\n          isUncurried = !isCurried;\\n\\n      while (++leftIndex < leftLength) {\\n        result[leftIndex] = partials[leftIndex];\\n      }\\n      while (++argsIndex < holdersLength) {\\n        if (isUncurried || argsIndex < argsLength) {\\n          result[holders[argsIndex]] = args[argsIndex];\\n        }\\n      }\\n      while (rangeLength--) {\\n        result[leftIndex++] = args[argsIndex++];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * This function is like `composeArgs` except that the arguments composition\\n     * is tailored for `_.partialRight`.\\n     *\\n     * @private\\n     * @param {Array} args The provided arguments.\\n     * @param {Array} partials The arguments to append to those provided.\\n     * @param {Array} holders The `partials` placeholder indexes.\\n     * @params {boolean} [isCurried] Specify composing for a curried function.\\n     * @returns {Array} Returns the new array of composed arguments.\\n     */\\n    function composeArgsRight(args, partials, holders, isCurried) {\\n      var argsIndex = -1,\\n          argsLength = args.length,\\n          holdersIndex = -1,\\n          holdersLength = holders.length,\\n          rightIndex = -1,\\n          rightLength = partials.length,\\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\\n          result = Array(rangeLength + rightLength),\\n          isUncurried = !isCurried;\\n\\n      while (++argsIndex < rangeLength) {\\n        result[argsIndex] = args[argsIndex];\\n      }\\n      var offset = argsIndex;\\n      while (++rightIndex < rightLength) {\\n        result[offset + rightIndex] = partials[rightIndex];\\n      }\\n      while (++holdersIndex < holdersLength) {\\n        if (isUncurried || argsIndex < argsLength) {\\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Copies the values of `source` to `array`.\\n     *\\n     * @private\\n     * @param {Array} source The array to copy values from.\\n     * @param {Array} [array=[]] The array to copy values to.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function copyArray(source, array) {\\n      var index = -1,\\n          length = source.length;\\n\\n      array || (array = Array(length));\\n      while (++index < length) {\\n        array[index] = source[index];\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * Copies properties of `source` to `object`.\\n     *\\n     * @private\\n     * @param {Object} source The object to copy properties from.\\n     * @param {Array} props The property identifiers to copy.\\n     * @param {Object} [object={}] The object to copy properties to.\\n     * @param {Function} [customizer] The function to customize copied values.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function copyObject(source, props, object, customizer) {\\n      var isNew = !object;\\n      object || (object = {});\\n\\n      var index = -1,\\n          length = props.length;\\n\\n      while (++index < length) {\\n        var key = props[index];\\n\\n        var newValue = customizer\\n          ? customizer(object[key], source[key], key, object, source)\\n          : undefined;\\n\\n        if (newValue === undefined) {\\n          newValue = source[key];\\n        }\\n        if (isNew) {\\n          baseAssignValue(object, key, newValue);\\n        } else {\\n          assignValue(object, key, newValue);\\n        }\\n      }\\n      return object;\\n    }\\n\\n    /**\\n     * Copies own symbols of `source` to `object`.\\n     *\\n     * @private\\n     * @param {Object} source The object to copy symbols from.\\n     * @param {Object} [object={}] The object to copy symbols to.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function copySymbols(source, object) {\\n      return copyObject(source, getSymbols(source), object);\\n    }\\n\\n    /**\\n     * Copies own and inherited symbols of `source` to `object`.\\n     *\\n     * @private\\n     * @param {Object} source The object to copy symbols from.\\n     * @param {Object} [object={}] The object to copy symbols to.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function copySymbolsIn(source, object) {\\n      return copyObject(source, getSymbolsIn(source), object);\\n    }\\n\\n    /**\\n     * Creates a function like `_.groupBy`.\\n     *\\n     * @private\\n     * @param {Function} setter The function to set accumulator values.\\n     * @param {Function} [initializer] The accumulator object initializer.\\n     * @returns {Function} Returns the new aggregator function.\\n     */\\n    function createAggregator(setter, initializer) {\\n      return function(collection, iteratee) {\\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\\n            accumulator = initializer ? initializer() : {};\\n\\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function like `_.assign`.\\n     *\\n     * @private\\n     * @param {Function} assigner The function to assign values.\\n     * @returns {Function} Returns the new assigner function.\\n     */\\n    function createAssigner(assigner) {\\n      return baseRest(function(object, sources) {\\n        var index = -1,\\n            length = sources.length,\\n            customizer = length > 1 ? sources[length - 1] : undefined,\\n            guard = length > 2 ? sources[2] : undefined;\\n\\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\\n          ? (length--, customizer)\\n          : undefined;\\n\\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\\n          customizer = length < 3 ? undefined : customizer;\\n          length = 1;\\n        }\\n        object = Object(object);\\n        while (++index < length) {\\n          var source = sources[index];\\n          if (source) {\\n            assigner(object, source, index, customizer);\\n          }\\n        }\\n        return object;\\n      });\\n    }\\n\\n    /**\\n     * Creates a `baseEach` or `baseEachRight` function.\\n     *\\n     * @private\\n     * @param {Function} eachFunc The function to iterate over a collection.\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new base function.\\n     */\\n    function createBaseEach(eachFunc, fromRight) {\\n      return function(collection, iteratee) {\\n        if (collection == null) {\\n          return collection;\\n        }\\n        if (!isArrayLike(collection)) {\\n          return eachFunc(collection, iteratee);\\n        }\\n        var length = collection.length,\\n            index = fromRight ? length : -1,\\n            iterable = Object(collection);\\n\\n        while ((fromRight ? index-- : ++index < length)) {\\n          if (iteratee(iterable[index], index, iterable) === false) {\\n            break;\\n          }\\n        }\\n        return collection;\\n      };\\n    }\\n\\n    /**\\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\\n     *\\n     * @private\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new base function.\\n     */\\n    function createBaseFor(fromRight) {\\n      return function(object, iteratee, keysFunc) {\\n        var index = -1,\\n            iterable = Object(object),\\n            props = keysFunc(object),\\n            length = props.length;\\n\\n        while (length--) {\\n          var key = props[fromRight ? length : ++index];\\n          if (iteratee(iterable[key], key, iterable) === false) {\\n            break;\\n          }\\n        }\\n        return object;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that wraps `func` to invoke it with the optional `this`\\n     * binding of `thisArg`.\\n     *\\n     * @private\\n     * @param {Function} func The function to wrap.\\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createBind(func, bitmask, thisArg) {\\n      var isBind = bitmask & WRAP_BIND_FLAG,\\n          Ctor = createCtor(func);\\n\\n      function wrapper() {\\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\\n        return fn.apply(isBind ? thisArg : this, arguments);\\n      }\\n      return wrapper;\\n    }\\n\\n    /**\\n     * Creates a function like `_.lowerFirst`.\\n     *\\n     * @private\\n     * @param {string} methodName The name of the `String` case method to use.\\n     * @returns {Function} Returns the new case function.\\n     */\\n    function createCaseFirst(methodName) {\\n      return function(string) {\\n        string = toString(string);\\n\\n        var strSymbols = hasUnicode(string)\\n          ? stringToArray(string)\\n          : undefined;\\n\\n        var chr = strSymbols\\n          ? strSymbols[0]\\n          : string.charAt(0);\\n\\n        var trailing = strSymbols\\n          ? castSlice(strSymbols, 1).join('')\\n          : string.slice(1);\\n\\n        return chr[methodName]() + trailing;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function like `_.camelCase`.\\n     *\\n     * @private\\n     * @param {Function} callback The function to combine each word.\\n     * @returns {Function} Returns the new compounder function.\\n     */\\n    function createCompounder(callback) {\\n      return function(string) {\\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that produces an instance of `Ctor` regardless of\\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\\n     *\\n     * @private\\n     * @param {Function} Ctor The constructor to wrap.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createCtor(Ctor) {\\n      return function() {\\n        // Use a `switch` statement to work with class constructors. See\\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\\n        // for more details.\\n        var args = arguments;\\n        switch (args.length) {\\n          case 0: return new Ctor;\\n          case 1: return new Ctor(args[0]);\\n          case 2: return new Ctor(args[0], args[1]);\\n          case 3: return new Ctor(args[0], args[1], args[2]);\\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\\n        }\\n        var thisBinding = baseCreate(Ctor.prototype),\\n            result = Ctor.apply(thisBinding, args);\\n\\n        // Mimic the constructor's `return` behavior.\\n        // See https://es5.github.io/#x13.2.2 for more details.\\n        return isObject(result) ? result : thisBinding;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that wraps `func` to enable currying.\\n     *\\n     * @private\\n     * @param {Function} func The function to wrap.\\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\\n     * @param {number} arity The arity of `func`.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createCurry(func, bitmask, arity) {\\n      var Ctor = createCtor(func);\\n\\n      function wrapper() {\\n        var length = arguments.length,\\n            args = Array(length),\\n            index = length,\\n            placeholder = getHolder(wrapper);\\n\\n        while (index--) {\\n          args[index] = arguments[index];\\n        }\\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\\n          ? []\\n          : replaceHolders(args, placeholder);\\n\\n        length -= holders.length;\\n        if (length < arity) {\\n          return createRecurry(\\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\\n            args, holders, undefined, undefined, arity - length);\\n        }\\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\\n        return apply(fn, this, args);\\n      }\\n      return wrapper;\\n    }\\n\\n    /**\\n     * Creates a `_.find` or `_.findLast` function.\\n     *\\n     * @private\\n     * @param {Function} findIndexFunc The function to find the collection index.\\n     * @returns {Function} Returns the new find function.\\n     */\\n    function createFind(findIndexFunc) {\\n      return function(collection, predicate, fromIndex) {\\n        var iterable = Object(collection);\\n        if (!isArrayLike(collection)) {\\n          var iteratee = getIteratee(predicate, 3);\\n          collection = keys(collection);\\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\\n        }\\n        var index = findIndexFunc(collection, predicate, fromIndex);\\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.flow` or `_.flowRight` function.\\n     *\\n     * @private\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new flow function.\\n     */\\n    function createFlow(fromRight) {\\n      return flatRest(function(funcs) {\\n        var length = funcs.length,\\n            index = length,\\n            prereq = LodashWrapper.prototype.thru;\\n\\n        if (fromRight) {\\n          funcs.reverse();\\n        }\\n        while (index--) {\\n          var func = funcs[index];\\n          if (typeof func != 'function') {\\n            throw new TypeError(FUNC_ERROR_TEXT);\\n          }\\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\\n            var wrapper = new LodashWrapper([], true);\\n          }\\n        }\\n        index = wrapper ? index : length;\\n        while (++index < length) {\\n          func = funcs[index];\\n\\n          var funcName = getFuncName(func),\\n              data = funcName == 'wrapper' ? getData(func) : undefined;\\n\\n          if (data && isLaziable(data[0]) &&\\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\\n                !data[4].length && data[9] == 1\\n              ) {\\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\\n          } else {\\n            wrapper = (func.length == 1 && isLaziable(func))\\n              ? wrapper[funcName]()\\n              : wrapper.thru(func);\\n          }\\n        }\\n        return function() {\\n          var args = arguments,\\n              value = args[0];\\n\\n          if (wrapper && args.length == 1 &&\\n              isArray(value) && value.length >= LARGE_ARRAY_SIZE) {\\n            return wrapper.plant(value).value();\\n          }\\n          var index = 0,\\n              result = length ? funcs[index].apply(this, args) : value;\\n\\n          while (++index < length) {\\n            result = funcs[index].call(this, result);\\n          }\\n          return result;\\n        };\\n      });\\n    }\\n\\n    /**\\n     * Creates a function that wraps `func` to invoke it with optional `this`\\n     * binding of `thisArg`, partial application, and currying.\\n     *\\n     * @private\\n     * @param {Function|string} func The function or method name to wrap.\\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @param {Array} [partials] The arguments to prepend to those provided to\\n     *  the new function.\\n     * @param {Array} [holders] The `partials` placeholder indexes.\\n     * @param {Array} [partialsRight] The arguments to append to those provided\\n     *  to the new function.\\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\\n     * @param {Array} [argPos] The argument positions of the new function.\\n     * @param {number} [ary] The arity cap of `func`.\\n     * @param {number} [arity] The arity of `func`.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\\n      var isAry = bitmask & WRAP_ARY_FLAG,\\n          isBind = bitmask & WRAP_BIND_FLAG,\\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\\n          isFlip = bitmask & WRAP_FLIP_FLAG,\\n          Ctor = isBindKey ? undefined : createCtor(func);\\n\\n      function wrapper() {\\n        var length = arguments.length,\\n            args = Array(length),\\n            index = length;\\n\\n        while (index--) {\\n          args[index] = arguments[index];\\n        }\\n        if (isCurried) {\\n          var placeholder = getHolder(wrapper),\\n              holdersCount = countHolders(args, placeholder);\\n        }\\n        if (partials) {\\n          args = composeArgs(args, partials, holders, isCurried);\\n        }\\n        if (partialsRight) {\\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\\n        }\\n        length -= holdersCount;\\n        if (isCurried && length < arity) {\\n          var newHolders = replaceHolders(args, placeholder);\\n          return createRecurry(\\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\\n            args, newHolders, argPos, ary, arity - length\\n          );\\n        }\\n        var thisBinding = isBind ? thisArg : this,\\n            fn = isBindKey ? thisBinding[func] : func;\\n\\n        length = args.length;\\n        if (argPos) {\\n          args = reorder(args, argPos);\\n        } else if (isFlip && length > 1) {\\n          args.reverse();\\n        }\\n        if (isAry && ary < length) {\\n          args.length = ary;\\n        }\\n        if (this && this !== root && this instanceof wrapper) {\\n          fn = Ctor || createCtor(fn);\\n        }\\n        return fn.apply(thisBinding, args);\\n      }\\n      return wrapper;\\n    }\\n\\n    /**\\n     * Creates a function like `_.invertBy`.\\n     *\\n     * @private\\n     * @param {Function} setter The function to set accumulator values.\\n     * @param {Function} toIteratee The function to resolve iteratees.\\n     * @returns {Function} Returns the new inverter function.\\n     */\\n    function createInverter(setter, toIteratee) {\\n      return function(object, iteratee) {\\n        return baseInverter(object, setter, toIteratee(iteratee), {});\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that performs a mathematical operation on two values.\\n     *\\n     * @private\\n     * @param {Function} operator The function to perform the operation.\\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\\n     * @returns {Function} Returns the new mathematical operation function.\\n     */\\n    function createMathOperation(operator, defaultValue) {\\n      return function(value, other) {\\n        var result;\\n        if (value === undefined && other === undefined) {\\n          return defaultValue;\\n        }\\n        if (value !== undefined) {\\n          result = value;\\n        }\\n        if (other !== undefined) {\\n          if (result === undefined) {\\n            return other;\\n          }\\n          if (typeof value == 'string' || typeof other == 'string') {\\n            value = baseToString(value);\\n            other = baseToString(other);\\n          } else {\\n            value = baseToNumber(value);\\n            other = baseToNumber(other);\\n          }\\n          result = operator(value, other);\\n        }\\n        return result;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function like `_.over`.\\n     *\\n     * @private\\n     * @param {Function} arrayFunc The function to iterate over iteratees.\\n     * @returns {Function} Returns the new over function.\\n     */\\n    function createOver(arrayFunc) {\\n      return flatRest(function(iteratees) {\\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\\n        return baseRest(function(args) {\\n          var thisArg = this;\\n          return arrayFunc(iteratees, function(iteratee) {\\n            return apply(iteratee, thisArg, args);\\n          });\\n        });\\n      });\\n    }\\n\\n    /**\\n     * Creates the padding for `string` based on `length`. The `chars` string\\n     * is truncated if the number of characters exceeds `length`.\\n     *\\n     * @private\\n     * @param {number} length The padding length.\\n     * @param {string} [chars=' '] The string used as padding.\\n     * @returns {string} Returns the padding for `string`.\\n     */\\n    function createPadding(length, chars) {\\n      chars = chars === undefined ? ' ' : baseToString(chars);\\n\\n      var charsLength = chars.length;\\n      if (charsLength < 2) {\\n        return charsLength ? baseRepeat(chars, length) : chars;\\n      }\\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\\n      return hasUnicode(chars)\\n        ? castSlice(stringToArray(result), 0, length).join('')\\n        : result.slice(0, length);\\n    }\\n\\n    /**\\n     * Creates a function that wraps `func` to invoke it with the `this` binding\\n     * of `thisArg` and `partials` prepended to the arguments it receives.\\n     *\\n     * @private\\n     * @param {Function} func The function to wrap.\\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\\n     * @param {*} thisArg The `this` binding of `func`.\\n     * @param {Array} partials The arguments to prepend to those provided to\\n     *  the new function.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createPartial(func, bitmask, thisArg, partials) {\\n      var isBind = bitmask & WRAP_BIND_FLAG,\\n          Ctor = createCtor(func);\\n\\n      function wrapper() {\\n        var argsIndex = -1,\\n            argsLength = arguments.length,\\n            leftIndex = -1,\\n            leftLength = partials.length,\\n            args = Array(leftLength + argsLength),\\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\\n\\n        while (++leftIndex < leftLength) {\\n          args[leftIndex] = partials[leftIndex];\\n        }\\n        while (argsLength--) {\\n          args[leftIndex++] = arguments[++argsIndex];\\n        }\\n        return apply(fn, isBind ? thisArg : this, args);\\n      }\\n      return wrapper;\\n    }\\n\\n    /**\\n     * Creates a `_.range` or `_.rangeRight` function.\\n     *\\n     * @private\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new range function.\\n     */\\n    function createRange(fromRight) {\\n      return function(start, end, step) {\\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\\n          end = step = undefined;\\n        }\\n        // Ensure the sign of `-0` is preserved.\\n        start = toFinite(start);\\n        if (end === undefined) {\\n          end = start;\\n          start = 0;\\n        } else {\\n          end = toFinite(end);\\n        }\\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\\n        return baseRange(start, end, step, fromRight);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that performs a relational operation on two values.\\n     *\\n     * @private\\n     * @param {Function} operator The function to perform the operation.\\n     * @returns {Function} Returns the new relational operation function.\\n     */\\n    function createRelationalOperation(operator) {\\n      return function(value, other) {\\n        if (!(typeof value == 'string' && typeof other == 'string')) {\\n          value = toNumber(value);\\n          other = toNumber(other);\\n        }\\n        return operator(value, other);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that wraps `func` to continue currying.\\n     *\\n     * @private\\n     * @param {Function} func The function to wrap.\\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\\n     * @param {*} placeholder The placeholder value.\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @param {Array} [partials] The arguments to prepend to those provided to\\n     *  the new function.\\n     * @param {Array} [holders] The `partials` placeholder indexes.\\n     * @param {Array} [argPos] The argument positions of the new function.\\n     * @param {number} [ary] The arity cap of `func`.\\n     * @param {number} [arity] The arity of `func`.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\\n          newHolders = isCurry ? holders : undefined,\\n          newHoldersRight = isCurry ? undefined : holders,\\n          newPartials = isCurry ? partials : undefined,\\n          newPartialsRight = isCurry ? undefined : partials;\\n\\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\\n\\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\\n      }\\n      var newData = [\\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\\n        newHoldersRight, argPos, ary, arity\\n      ];\\n\\n      var result = wrapFunc.apply(undefined, newData);\\n      if (isLaziable(func)) {\\n        setData(result, newData);\\n      }\\n      result.placeholder = placeholder;\\n      return setWrapToString(result, func, bitmask);\\n    }\\n\\n    /**\\n     * Creates a function like `_.round`.\\n     *\\n     * @private\\n     * @param {string} methodName The name of the `Math` method to use when rounding.\\n     * @returns {Function} Returns the new round function.\\n     */\\n    function createRound(methodName) {\\n      var func = Math[methodName];\\n      return function(number, precision) {\\n        number = toNumber(number);\\n        precision = nativeMin(toInteger(precision), 292);\\n        if (precision) {\\n          // Shift with exponential notation to avoid floating-point issues.\\n          // See [MDN](https://mdn.io/round#Examples) for more details.\\n          var pair = (toString(number) + 'e').split('e'),\\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\\n\\n          pair = (toString(value) + 'e').split('e');\\n          return +(pair[0] + 'e' + (+pair[1] - precision));\\n        }\\n        return func(number);\\n      };\\n    }\\n\\n    /**\\n     * Creates a set object of `values`.\\n     *\\n     * @private\\n     * @param {Array} values The values to add to the set.\\n     * @returns {Object} Returns the new set.\\n     */\\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\\n      return new Set(values);\\n    };\\n\\n    /**\\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\\n     *\\n     * @private\\n     * @param {Function} keysFunc The function to get the keys of a given object.\\n     * @returns {Function} Returns the new pairs function.\\n     */\\n    function createToPairs(keysFunc) {\\n      return function(object) {\\n        var tag = getTag(object);\\n        if (tag == mapTag) {\\n          return mapToArray(object);\\n        }\\n        if (tag == setTag) {\\n          return setToPairs(object);\\n        }\\n        return baseToPairs(object, keysFunc(object));\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that either curries or invokes `func` with optional\\n     * `this` binding and partially applied arguments.\\n     *\\n     * @private\\n     * @param {Function|string} func The function or method name to wrap.\\n     * @param {number} bitmask The bitmask flags.\\n     *    1 - `_.bind`\\n     *    2 - `_.bindKey`\\n     *    4 - `_.curry` or `_.curryRight` of a bound function\\n     *    8 - `_.curry`\\n     *   16 - `_.curryRight`\\n     *   32 - `_.partial`\\n     *   64 - `_.partialRight`\\n     *  128 - `_.rearg`\\n     *  256 - `_.ary`\\n     *  512 - `_.flip`\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @param {Array} [partials] The arguments to be partially applied.\\n     * @param {Array} [holders] The `partials` placeholder indexes.\\n     * @param {Array} [argPos] The argument positions of the new function.\\n     * @param {number} [ary] The arity cap of `func`.\\n     * @param {number} [arity] The arity of `func`.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\\n      if (!isBindKey && typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      var length = partials ? partials.length : 0;\\n      if (!length) {\\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\\n        partials = holders = undefined;\\n      }\\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\\n      arity = arity === undefined ? arity : toInteger(arity);\\n      length -= holders ? holders.length : 0;\\n\\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\\n        var partialsRight = partials,\\n            holdersRight = holders;\\n\\n        partials = holders = undefined;\\n      }\\n      var data = isBindKey ? undefined : getData(func);\\n\\n      var newData = [\\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\\n        argPos, ary, arity\\n      ];\\n\\n      if (data) {\\n        mergeData(newData, data);\\n      }\\n      func = newData[0];\\n      bitmask = newData[1];\\n      thisArg = newData[2];\\n      partials = newData[3];\\n      holders = newData[4];\\n      arity = newData[9] = newData[9] == null\\n        ? (isBindKey ? 0 : func.length)\\n        : nativeMax(newData[9] - length, 0);\\n\\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\\n      }\\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\\n        var result = createBind(func, bitmask, thisArg);\\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\\n        result = createCurry(func, bitmask, arity);\\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\\n        result = createPartial(func, bitmask, thisArg, partials);\\n      } else {\\n        result = createHybrid.apply(undefined, newData);\\n      }\\n      var setter = data ? baseSetData : setData;\\n      return setWrapToString(setter(result, newData), func, bitmask);\\n    }\\n\\n    /**\\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\\n     * partial deep comparisons.\\n     *\\n     * @private\\n     * @param {Array} array The array to compare.\\n     * @param {Array} other The other array to compare.\\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\\n     * @param {Function} customizer The function to customize comparisons.\\n     * @param {Function} equalFunc The function to determine equivalents of values.\\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\\n     */\\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\\n          arrLength = array.length,\\n          othLength = other.length;\\n\\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\\n        return false;\\n      }\\n      // Assume cyclic values are equal.\\n      var stacked = stack.get(array);\\n      if (stacked && stack.get(other)) {\\n        return stacked == other;\\n      }\\n      var index = -1,\\n          result = true,\\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\\n\\n      stack.set(array, other);\\n      stack.set(other, array);\\n\\n      // Ignore non-index properties.\\n      while (++index < arrLength) {\\n        var arrValue = array[index],\\n            othValue = other[index];\\n\\n        if (customizer) {\\n          var compared = isPartial\\n            ? customizer(othValue, arrValue, index, other, array, stack)\\n            : customizer(arrValue, othValue, index, array, other, stack);\\n        }\\n        if (compared !== undefined) {\\n          if (compared) {\\n            continue;\\n          }\\n          result = false;\\n          break;\\n        }\\n        // Recursively compare arrays (susceptible to call stack limits).\\n        if (seen) {\\n          if (!arraySome(other, function(othValue, othIndex) {\\n                if (!cacheHas(seen, othIndex) &&\\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\\n                  return seen.push(othIndex);\\n                }\\n              })) {\\n            result = false;\\n            break;\\n          }\\n        } else if (!(\\n              arrValue === othValue ||\\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\\n            )) {\\n          result = false;\\n          break;\\n        }\\n      }\\n      stack['delete'](array);\\n      stack['delete'](other);\\n      return result;\\n    }\\n\\n    /**\\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\\n     * the same `toStringTag`.\\n     *\\n     * **Note:** This function only supports comparing values with tags of\\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\\n     *\\n     * @private\\n     * @param {Object} object The object to compare.\\n     * @param {Object} other The other object to compare.\\n     * @param {string} tag The `toStringTag` of the objects to compare.\\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\\n     * @param {Function} customizer The function to customize comparisons.\\n     * @param {Function} equalFunc The function to determine equivalents of values.\\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\\n     */\\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\\n      switch (tag) {\\n        case dataViewTag:\\n          if ((object.byteLength != other.byteLength) ||\\n              (object.byteOffset != other.byteOffset)) {\\n            return false;\\n          }\\n          object = object.buffer;\\n          other = other.buffer;\\n\\n        case arrayBufferTag:\\n          if ((object.byteLength != other.byteLength) ||\\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\\n            return false;\\n          }\\n          return true;\\n\\n        case boolTag:\\n        case dateTag:\\n        case numberTag:\\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\\n          // Invalid dates are coerced to `NaN`.\\n          return eq(+object, +other);\\n\\n        case errorTag:\\n          return object.name == other.name && object.message == other.message;\\n\\n        case regexpTag:\\n        case stringTag:\\n          // Coerce regexes to strings and treat strings, primitives and objects,\\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\\n          // for more details.\\n          return object == (other + '');\\n\\n        case mapTag:\\n          var convert = mapToArray;\\n\\n        case setTag:\\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\\n          convert || (convert = setToArray);\\n\\n          if (object.size != other.size && !isPartial) {\\n            return false;\\n          }\\n          // Assume cyclic values are equal.\\n          var stacked = stack.get(object);\\n          if (stacked) {\\n            return stacked == other;\\n          }\\n          bitmask |= COMPARE_UNORDERED_FLAG;\\n\\n          // Recursively compare objects (susceptible to call stack limits).\\n          stack.set(object, other);\\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\\n          stack['delete'](object);\\n          return result;\\n\\n        case symbolTag:\\n          if (symbolValueOf) {\\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\\n          }\\n      }\\n      return false;\\n    }\\n\\n    /**\\n     * A specialized version of `baseIsEqualDeep` for objects with support for\\n     * partial deep comparisons.\\n     *\\n     * @private\\n     * @param {Object} object The object to compare.\\n     * @param {Object} other The other object to compare.\\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\\n     * @param {Function} customizer The function to customize comparisons.\\n     * @param {Function} equalFunc The function to determine equivalents of values.\\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\\n     */\\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\\n          objProps = keys(object),\\n          objLength = objProps.length,\\n          othProps = keys(other),\\n          othLength = othProps.length;\\n\\n      if (objLength != othLength && !isPartial) {\\n        return false;\\n      }\\n      var index = objLength;\\n      while (index--) {\\n        var key = objProps[index];\\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\\n          return false;\\n        }\\n      }\\n      // Assume cyclic values are equal.\\n      var stacked = stack.get(object);\\n      if (stacked && stack.get(other)) {\\n        return stacked == other;\\n      }\\n      var result = true;\\n      stack.set(object, other);\\n      stack.set(other, object);\\n\\n      var skipCtor = isPartial;\\n      while (++index < objLength) {\\n        key = objProps[index];\\n        var objValue = object[key],\\n            othValue = other[key];\\n\\n        if (customizer) {\\n          var compared = isPartial\\n            ? customizer(othValue, objValue, key, other, object, stack)\\n            : customizer(objValue, othValue, key, object, other, stack);\\n        }\\n        // Recursively compare objects (susceptible to call stack limits).\\n        if (!(compared === undefined\\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\\n              : compared\\n            )) {\\n          result = false;\\n          break;\\n        }\\n        skipCtor || (skipCtor = key == 'constructor');\\n      }\\n      if (result && !skipCtor) {\\n        var objCtor = object.constructor,\\n            othCtor = other.constructor;\\n\\n        // Non `Object` object instances with different constructors are not equal.\\n        if (objCtor != othCtor &&\\n            ('constructor' in object && 'constructor' in other) &&\\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\\n          result = false;\\n        }\\n      }\\n      stack['delete'](object);\\n      stack['delete'](other);\\n      return result;\\n    }\\n\\n    /**\\n     * A specialized version of `baseRest` which flattens the rest array.\\n     *\\n     * @private\\n     * @param {Function} func The function to apply a rest parameter to.\\n     * @returns {Function} Returns the new function.\\n     */\\n    function flatRest(func) {\\n      return setToString(overRest(func, undefined, flatten), func + '');\\n    }\\n\\n    /**\\n     * Creates an array of own enumerable property names and symbols of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names and symbols.\\n     */\\n    function getAllKeys(object) {\\n      return baseGetAllKeys(object, keys, getSymbols);\\n    }\\n\\n    /**\\n     * Creates an array of own and inherited enumerable property names and\\n     * symbols of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names and symbols.\\n     */\\n    function getAllKeysIn(object) {\\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\\n    }\\n\\n    /**\\n     * Gets metadata for `func`.\\n     *\\n     * @private\\n     * @param {Function} func The function to query.\\n     * @returns {*} Returns the metadata for `func`.\\n     */\\n    var getData = !metaMap ? noop : function(func) {\\n      return metaMap.get(func);\\n    };\\n\\n    /**\\n     * Gets the name of `func`.\\n     *\\n     * @private\\n     * @param {Function} func The function to query.\\n     * @returns {string} Returns the function name.\\n     */\\n    function getFuncName(func) {\\n      var result = (func.name + ''),\\n          array = realNames[result],\\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\\n\\n      while (length--) {\\n        var data = array[length],\\n            otherFunc = data.func;\\n        if (otherFunc == null || otherFunc == func) {\\n          return data.name;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the argument placeholder value for `func`.\\n     *\\n     * @private\\n     * @param {Function} func The function to inspect.\\n     * @returns {*} Returns the placeholder value.\\n     */\\n    function getHolder(func) {\\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\\n      return object.placeholder;\\n    }\\n\\n    /**\\n     * Gets the appropriate \\\"iteratee\\\" function. If `_.iteratee` is customized,\\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\\n     * If arguments are provided, the chosen function is invoked with them and\\n     * its result is returned.\\n     *\\n     * @private\\n     * @param {*} [value] The value to convert to an iteratee.\\n     * @param {number} [arity] The arity of the created iteratee.\\n     * @returns {Function} Returns the chosen function or its result.\\n     */\\n    function getIteratee() {\\n      var result = lodash.iteratee || iteratee;\\n      result = result === iteratee ? baseIteratee : result;\\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\\n    }\\n\\n    /**\\n     * Gets the data for `map`.\\n     *\\n     * @private\\n     * @param {Object} map The map to query.\\n     * @param {string} key The reference key.\\n     * @returns {*} Returns the map data.\\n     */\\n    function getMapData(map, key) {\\n      var data = map.__data__;\\n      return isKeyable(key)\\n        ? data[typeof key == 'string' ? 'string' : 'hash']\\n        : data.map;\\n    }\\n\\n    /**\\n     * Gets the property names, values, and compare flags of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the match data of `object`.\\n     */\\n    function getMatchData(object) {\\n      var result = keys(object),\\n          length = result.length;\\n\\n      while (length--) {\\n        var key = result[length],\\n            value = object[key];\\n\\n        result[length] = [key, value, isStrictComparable(value)];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the native function at `key` of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {string} key The key of the method to get.\\n     * @returns {*} Returns the function if it's native, else `undefined`.\\n     */\\n    function getNative(object, key) {\\n      var value = getValue(object, key);\\n      return baseIsNative(value) ? value : undefined;\\n    }\\n\\n    /**\\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\\n     *\\n     * @private\\n     * @param {*} value The value to query.\\n     * @returns {string} Returns the raw `toStringTag`.\\n     */\\n    function getRawTag(value) {\\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\\n          tag = value[symToStringTag];\\n\\n      try {\\n        value[symToStringTag] = undefined;\\n        var unmasked = true;\\n      } catch (e) {}\\n\\n      var result = nativeObjectToString.call(value);\\n      if (unmasked) {\\n        if (isOwn) {\\n          value[symToStringTag] = tag;\\n        } else {\\n          delete value[symToStringTag];\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an array of the own enumerable symbols of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of symbols.\\n     */\\n    var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\\n\\n    /**\\n     * Creates an array of the own and inherited enumerable symbols of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of symbols.\\n     */\\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\\n      var result = [];\\n      while (object) {\\n        arrayPush(result, getSymbols(object));\\n        object = getPrototype(object);\\n      }\\n      return result;\\n    };\\n\\n    /**\\n     * Gets the `toStringTag` of `value`.\\n     *\\n     * @private\\n     * @param {*} value The value to query.\\n     * @returns {string} Returns the `toStringTag`.\\n     */\\n    var getTag = baseGetTag;\\n\\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\\n        (Map && getTag(new Map) != mapTag) ||\\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\\n        (Set && getTag(new Set) != setTag) ||\\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\\n      getTag = function(value) {\\n        var result = baseGetTag(value),\\n            Ctor = result == objectTag ? value.constructor : undefined,\\n            ctorString = Ctor ? toSource(Ctor) : '';\\n\\n        if (ctorString) {\\n          switch (ctorString) {\\n            case dataViewCtorString: return dataViewTag;\\n            case mapCtorString: return mapTag;\\n            case promiseCtorString: return promiseTag;\\n            case setCtorString: return setTag;\\n            case weakMapCtorString: return weakMapTag;\\n          }\\n        }\\n        return result;\\n      };\\n    }\\n\\n    /**\\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\\n     *\\n     * @private\\n     * @param {number} start The start of the view.\\n     * @param {number} end The end of the view.\\n     * @param {Array} transforms The transformations to apply to the view.\\n     * @returns {Object} Returns an object containing the `start` and `end`\\n     *  positions of the view.\\n     */\\n    function getView(start, end, transforms) {\\n      var index = -1,\\n          length = transforms.length;\\n\\n      while (++index < length) {\\n        var data = transforms[index],\\n            size = data.size;\\n\\n        switch (data.type) {\\n          case 'drop':      start += size; break;\\n          case 'dropRight': end -= size; break;\\n          case 'take':      end = nativeMin(end, start + size); break;\\n          case 'takeRight': start = nativeMax(start, end - size); break;\\n        }\\n      }\\n      return { 'start': start, 'end': end };\\n    }\\n\\n    /**\\n     * Extracts wrapper details from the `source` body comment.\\n     *\\n     * @private\\n     * @param {string} source The source to inspect.\\n     * @returns {Array} Returns the wrapper details.\\n     */\\n    function getWrapDetails(source) {\\n      var match = source.match(reWrapDetails);\\n      return match ? match[1].split(reSplitDetails) : [];\\n    }\\n\\n    /**\\n     * Checks if `path` exists on `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path to check.\\n     * @param {Function} hasFunc The function to check properties.\\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\\n     */\\n    function hasPath(object, path, hasFunc) {\\n      path = castPath(path, object);\\n\\n      var index = -1,\\n          length = path.length,\\n          result = false;\\n\\n      while (++index < length) {\\n        var key = toKey(path[index]);\\n        if (!(result = object != null && hasFunc(object, key))) {\\n          break;\\n        }\\n        object = object[key];\\n      }\\n      if (result || ++index != length) {\\n        return result;\\n      }\\n      length = object == null ? 0 : object.length;\\n      return !!length && isLength(length) && isIndex(key, length) &&\\n        (isArray(object) || isArguments(object));\\n    }\\n\\n    /**\\n     * Initializes an array clone.\\n     *\\n     * @private\\n     * @param {Array} array The array to clone.\\n     * @returns {Array} Returns the initialized clone.\\n     */\\n    function initCloneArray(array) {\\n      var length = array.length,\\n          result = array.constructor(length);\\n\\n      // Add properties assigned by `RegExp#exec`.\\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\\n        result.index = array.index;\\n        result.input = array.input;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Initializes an object clone.\\n     *\\n     * @private\\n     * @param {Object} object The object to clone.\\n     * @returns {Object} Returns the initialized clone.\\n     */\\n    function initCloneObject(object) {\\n      return (typeof object.constructor == 'function' && !isPrototype(object))\\n        ? baseCreate(getPrototype(object))\\n        : {};\\n    }\\n\\n    /**\\n     * Initializes an object clone based on its `toStringTag`.\\n     *\\n     * **Note:** This function only supports cloning values with tags of\\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\\n     *\\n     * @private\\n     * @param {Object} object The object to clone.\\n     * @param {string} tag The `toStringTag` of the object to clone.\\n     * @param {Function} cloneFunc The function to clone values.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @returns {Object} Returns the initialized clone.\\n     */\\n    function initCloneByTag(object, tag, cloneFunc, isDeep) {\\n      var Ctor = object.constructor;\\n      switch (tag) {\\n        case arrayBufferTag:\\n          return cloneArrayBuffer(object);\\n\\n        case boolTag:\\n        case dateTag:\\n          return new Ctor(+object);\\n\\n        case dataViewTag:\\n          return cloneDataView(object, isDeep);\\n\\n        case float32Tag: case float64Tag:\\n        case int8Tag: case int16Tag: case int32Tag:\\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\\n          return cloneTypedArray(object, isDeep);\\n\\n        case mapTag:\\n          return cloneMap(object, isDeep, cloneFunc);\\n\\n        case numberTag:\\n        case stringTag:\\n          return new Ctor(object);\\n\\n        case regexpTag:\\n          return cloneRegExp(object);\\n\\n        case setTag:\\n          return cloneSet(object, isDeep, cloneFunc);\\n\\n        case symbolTag:\\n          return cloneSymbol(object);\\n      }\\n    }\\n\\n    /**\\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\\n     *\\n     * @private\\n     * @param {string} source The source to modify.\\n     * @returns {Array} details The details to insert.\\n     * @returns {string} Returns the modified source.\\n     */\\n    function insertWrapDetails(source, details) {\\n      var length = details.length;\\n      if (!length) {\\n        return source;\\n      }\\n      var lastIndex = length - 1;\\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\\n      details = details.join(length > 2 ? ', ' : ' ');\\n      return source.replace(reWrapComment, '{\\\\n/* [wrapped with ' + details + '] */\\\\n');\\n    }\\n\\n    /**\\n     * Checks if `value` is a flattenable `arguments` object or array.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\\n     */\\n    function isFlattenable(value) {\\n      return isArray(value) || isArguments(value) ||\\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\\n    }\\n\\n    /**\\n     * Checks if `value` is a valid array-like index.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\\n     */\\n    function isIndex(value, length) {\\n      length = length == null ? MAX_SAFE_INTEGER : length;\\n      return !!length &&\\n        (typeof value == 'number' || reIsUint.test(value)) &&\\n        (value > -1 && value % 1 == 0 && value < length);\\n    }\\n\\n    /**\\n     * Checks if the given arguments are from an iteratee call.\\n     *\\n     * @private\\n     * @param {*} value The potential iteratee value argument.\\n     * @param {*} index The potential iteratee index or key argument.\\n     * @param {*} object The potential iteratee object argument.\\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\\n     *  else `false`.\\n     */\\n    function isIterateeCall(value, index, object) {\\n      if (!isObject(object)) {\\n        return false;\\n      }\\n      var type = typeof index;\\n      if (type == 'number'\\n            ? (isArrayLike(object) && isIndex(index, object.length))\\n            : (type == 'string' && index in object)\\n          ) {\\n        return eq(object[index], value);\\n      }\\n      return false;\\n    }\\n\\n    /**\\n     * Checks if `value` is a property name and not a property path.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @param {Object} [object] The object to query keys on.\\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\\n     */\\n    function isKey(value, object) {\\n      if (isArray(value)) {\\n        return false;\\n      }\\n      var type = typeof value;\\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\\n          value == null || isSymbol(value)) {\\n        return true;\\n      }\\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\\n        (object != null && value in Object(object));\\n    }\\n\\n    /**\\n     * Checks if `value` is suitable for use as unique object key.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\\n     */\\n    function isKeyable(value) {\\n      var type = typeof value;\\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\\n        ? (value !== '__proto__')\\n        : (value === null);\\n    }\\n\\n    /**\\n     * Checks if `func` has a lazy counterpart.\\n     *\\n     * @private\\n     * @param {Function} func The function to check.\\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\\n     *  else `false`.\\n     */\\n    function isLaziable(func) {\\n      var funcName = getFuncName(func),\\n          other = lodash[funcName];\\n\\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\\n        return false;\\n      }\\n      if (func === other) {\\n        return true;\\n      }\\n      var data = getData(other);\\n      return !!data && func === data[0];\\n    }\\n\\n    /**\\n     * Checks if `func` has its source masked.\\n     *\\n     * @private\\n     * @param {Function} func The function to check.\\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\\n     */\\n    function isMasked(func) {\\n      return !!maskSrcKey && (maskSrcKey in func);\\n    }\\n\\n    /**\\n     * Checks if `func` is capable of being masked.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\\n     */\\n    var isMaskable = coreJsData ? isFunction : stubFalse;\\n\\n    /**\\n     * Checks if `value` is likely a prototype object.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\\n     */\\n    function isPrototype(value) {\\n      var Ctor = value && value.constructor,\\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\\n\\n      return value === proto;\\n    }\\n\\n    /**\\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\\n     *  equality comparisons, else `false`.\\n     */\\n    function isStrictComparable(value) {\\n      return value === value && !isObject(value);\\n    }\\n\\n    /**\\n     * A specialized version of `matchesProperty` for source values suitable\\n     * for strict equality comparisons, i.e. `===`.\\n     *\\n     * @private\\n     * @param {string} key The key of the property to get.\\n     * @param {*} srcValue The value to match.\\n     * @returns {Function} Returns the new spec function.\\n     */\\n    function matchesStrictComparable(key, srcValue) {\\n      return function(object) {\\n        if (object == null) {\\n          return false;\\n        }\\n        return object[key] === srcValue &&\\n          (srcValue !== undefined || (key in Object(object)));\\n      };\\n    }\\n\\n    /**\\n     * A specialized version of `_.memoize` which clears the memoized function's\\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\\n     *\\n     * @private\\n     * @param {Function} func The function to have its output memoized.\\n     * @returns {Function} Returns the new memoized function.\\n     */\\n    function memoizeCapped(func) {\\n      var result = memoize(func, function(key) {\\n        if (cache.size === MAX_MEMOIZE_SIZE) {\\n          cache.clear();\\n        }\\n        return key;\\n      });\\n\\n      var cache = result.cache;\\n      return result;\\n    }\\n\\n    /**\\n     * Merges the function metadata of `source` into `data`.\\n     *\\n     * Merging metadata reduces the number of wrappers used to invoke a function.\\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\\n     * may be applied regardless of execution order. Methods like `_.ary` and\\n     * `_.rearg` modify function arguments, making the order in which they are\\n     * executed important, preventing the merging of metadata. However, we make\\n     * an exception for a safe combined case where curried functions have `_.ary`\\n     * and or `_.rearg` applied.\\n     *\\n     * @private\\n     * @param {Array} data The destination metadata.\\n     * @param {Array} source The source metadata.\\n     * @returns {Array} Returns `data`.\\n     */\\n    function mergeData(data, source) {\\n      var bitmask = data[1],\\n          srcBitmask = source[1],\\n          newBitmask = bitmask | srcBitmask,\\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\\n\\n      var isCombo =\\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\\n\\n      // Exit early if metadata can't be merged.\\n      if (!(isCommon || isCombo)) {\\n        return data;\\n      }\\n      // Use source `thisArg` if available.\\n      if (srcBitmask & WRAP_BIND_FLAG) {\\n        data[2] = source[2];\\n        // Set when currying a bound function.\\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\\n      }\\n      // Compose partial arguments.\\n      var value = source[3];\\n      if (value) {\\n        var partials = data[3];\\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\\n      }\\n      // Compose partial right arguments.\\n      value = source[5];\\n      if (value) {\\n        partials = data[5];\\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\\n      }\\n      // Use source `argPos` if available.\\n      value = source[7];\\n      if (value) {\\n        data[7] = value;\\n      }\\n      // Use source `ary` if it's smaller.\\n      if (srcBitmask & WRAP_ARY_FLAG) {\\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\\n      }\\n      // Use source `arity` if one is not provided.\\n      if (data[9] == null) {\\n        data[9] = source[9];\\n      }\\n      // Use source `func` and merge bitmasks.\\n      data[0] = source[0];\\n      data[1] = newBitmask;\\n\\n      return data;\\n    }\\n\\n    /**\\n     * Used by `_.defaultsDeep` to customize its `_.merge` use.\\n     *\\n     * @private\\n     * @param {*} objValue The destination value.\\n     * @param {*} srcValue The source value.\\n     * @param {string} key The key of the property to merge.\\n     * @param {Object} object The parent object of `objValue`.\\n     * @param {Object} source The parent object of `srcValue`.\\n     * @param {Object} [stack] Tracks traversed source values and their merged\\n     *  counterparts.\\n     * @returns {*} Returns the value to assign.\\n     */\\n    function mergeDefaults(objValue, srcValue, key, object, source, stack) {\\n      if (isObject(objValue) && isObject(srcValue)) {\\n        // Recursively merge objects and arrays (susceptible to call stack limits).\\n        stack.set(srcValue, objValue);\\n        baseMerge(objValue, srcValue, undefined, mergeDefaults, stack);\\n        stack['delete'](srcValue);\\n      }\\n      return objValue;\\n    }\\n\\n    /**\\n     * This function is like\\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\\n     * except that it includes inherited enumerable properties.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names.\\n     */\\n    function nativeKeysIn(object) {\\n      var result = [];\\n      if (object != null) {\\n        for (var key in Object(object)) {\\n          result.push(key);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Converts `value` to a string using `Object.prototype.toString`.\\n     *\\n     * @private\\n     * @param {*} value The value to convert.\\n     * @returns {string} Returns the converted string.\\n     */\\n    function objectToString(value) {\\n      return nativeObjectToString.call(value);\\n    }\\n\\n    /**\\n     * A specialized version of `baseRest` which transforms the rest array.\\n     *\\n     * @private\\n     * @param {Function} func The function to apply a rest parameter to.\\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\\n     * @param {Function} transform The rest array transform.\\n     * @returns {Function} Returns the new function.\\n     */\\n    function overRest(func, start, transform) {\\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\\n      return function() {\\n        var args = arguments,\\n            index = -1,\\n            length = nativeMax(args.length - start, 0),\\n            array = Array(length);\\n\\n        while (++index < length) {\\n          array[index] = args[start + index];\\n        }\\n        index = -1;\\n        var otherArgs = Array(start + 1);\\n        while (++index < start) {\\n          otherArgs[index] = args[index];\\n        }\\n        otherArgs[start] = transform(array);\\n        return apply(func, this, otherArgs);\\n      };\\n    }\\n\\n    /**\\n     * Gets the parent value at `path` of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {Array} path The path to get the parent value of.\\n     * @returns {*} Returns the parent value.\\n     */\\n    function parent(object, path) {\\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\\n    }\\n\\n    /**\\n     * Reorder `array` according to the specified indexes where the element at\\n     * the first index is assigned as the first element, the element at\\n     * the second index is assigned as the second element, and so on.\\n     *\\n     * @private\\n     * @param {Array} array The array to reorder.\\n     * @param {Array} indexes The arranged array indexes.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function reorder(array, indexes) {\\n      var arrLength = array.length,\\n          length = nativeMin(indexes.length, arrLength),\\n          oldArray = copyArray(array);\\n\\n      while (length--) {\\n        var index = indexes[length];\\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * Sets metadata for `func`.\\n     *\\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\\n     * period of time, it will trip its breaker and transition to an identity\\n     * function to avoid garbage collection pauses in V8. See\\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\\n     * for more details.\\n     *\\n     * @private\\n     * @param {Function} func The function to associate metadata with.\\n     * @param {*} data The metadata.\\n     * @returns {Function} Returns `func`.\\n     */\\n    var setData = shortOut(baseSetData);\\n\\n    /**\\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\\n     *\\n     * @private\\n     * @param {Function} func The function to delay.\\n     * @param {number} wait The number of milliseconds to delay invocation.\\n     * @returns {number|Object} Returns the timer id or timeout object.\\n     */\\n    var setTimeout = ctxSetTimeout || function(func, wait) {\\n      return root.setTimeout(func, wait);\\n    };\\n\\n    /**\\n     * Sets the `toString` method of `func` to return `string`.\\n     *\\n     * @private\\n     * @param {Function} func The function to modify.\\n     * @param {Function} string The `toString` result.\\n     * @returns {Function} Returns `func`.\\n     */\\n    var setToString = shortOut(baseSetToString);\\n\\n    /**\\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\\n     * with wrapper details in a comment at the top of the source body.\\n     *\\n     * @private\\n     * @param {Function} wrapper The function to modify.\\n     * @param {Function} reference The reference function.\\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\\n     * @returns {Function} Returns `wrapper`.\\n     */\\n    function setWrapToString(wrapper, reference, bitmask) {\\n      var source = (reference + '');\\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\\n    }\\n\\n    /**\\n     * Creates a function that'll short out and invoke `identity` instead\\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\\n     * milliseconds.\\n     *\\n     * @private\\n     * @param {Function} func The function to restrict.\\n     * @returns {Function} Returns the new shortable function.\\n     */\\n    function shortOut(func) {\\n      var count = 0,\\n          lastCalled = 0;\\n\\n      return function() {\\n        var stamp = nativeNow(),\\n            remaining = HOT_SPAN - (stamp - lastCalled);\\n\\n        lastCalled = stamp;\\n        if (remaining > 0) {\\n          if (++count >= HOT_COUNT) {\\n            return arguments[0];\\n          }\\n        } else {\\n          count = 0;\\n        }\\n        return func.apply(undefined, arguments);\\n      };\\n    }\\n\\n    /**\\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\\n     *\\n     * @private\\n     * @param {Array} array The array to shuffle.\\n     * @param {number} [size=array.length] The size of `array`.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function shuffleSelf(array, size) {\\n      var index = -1,\\n          length = array.length,\\n          lastIndex = length - 1;\\n\\n      size = size === undefined ? length : size;\\n      while (++index < size) {\\n        var rand = baseRandom(index, lastIndex),\\n            value = array[rand];\\n\\n        array[rand] = array[index];\\n        array[index] = value;\\n      }\\n      array.length = size;\\n      return array;\\n    }\\n\\n    /**\\n     * Converts `string` to a property path array.\\n     *\\n     * @private\\n     * @param {string} string The string to convert.\\n     * @returns {Array} Returns the property path array.\\n     */\\n    var stringToPath = memoizeCapped(function(string) {\\n      var result = [];\\n      if (reLeadingDot.test(string)) {\\n        result.push('');\\n      }\\n      string.replace(rePropName, function(match, number, quote, string) {\\n        result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\\n      });\\n      return result;\\n    });\\n\\n    /**\\n     * Converts `value` to a string key if it's not a string or symbol.\\n     *\\n     * @private\\n     * @param {*} value The value to inspect.\\n     * @returns {string|symbol} Returns the key.\\n     */\\n    function toKey(value) {\\n      if (typeof value == 'string' || isSymbol(value)) {\\n        return value;\\n      }\\n      var result = (value + '');\\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\\n    }\\n\\n    /**\\n     * Converts `func` to its source code.\\n     *\\n     * @private\\n     * @param {Function} func The function to convert.\\n     * @returns {string} Returns the source code.\\n     */\\n    function toSource(func) {\\n      if (func != null) {\\n        try {\\n          return funcToString.call(func);\\n        } catch (e) {}\\n        try {\\n          return (func + '');\\n        } catch (e) {}\\n      }\\n      return '';\\n    }\\n\\n    /**\\n     * Updates wrapper `details` based on `bitmask` flags.\\n     *\\n     * @private\\n     * @returns {Array} details The details to modify.\\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\\n     * @returns {Array} Returns `details`.\\n     */\\n    function updateWrapDetails(details, bitmask) {\\n      arrayEach(wrapFlags, function(pair) {\\n        var value = '_.' + pair[0];\\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\\n          details.push(value);\\n        }\\n      });\\n      return details.sort();\\n    }\\n\\n    /**\\n     * Creates a clone of `wrapper`.\\n     *\\n     * @private\\n     * @param {Object} wrapper The wrapper to clone.\\n     * @returns {Object} Returns the cloned wrapper.\\n     */\\n    function wrapperClone(wrapper) {\\n      if (wrapper instanceof LazyWrapper) {\\n        return wrapper.clone();\\n      }\\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\\n      result.__actions__ = copyArray(wrapper.__actions__);\\n      result.__index__  = wrapper.__index__;\\n      result.__values__ = wrapper.__values__;\\n      return result;\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates an array of elements split into groups the length of `size`.\\n     * If `array` can't be split evenly, the final chunk will be the remaining\\n     * elements.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to process.\\n     * @param {number} [size=1] The length of each chunk\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Array} Returns the new array of chunks.\\n     * @example\\n     *\\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\\n     * // => [['a', 'b'], ['c', 'd']]\\n     *\\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\\n     * // => [['a', 'b', 'c'], ['d']]\\n     */\\n    function chunk(array, size, guard) {\\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\\n        size = 1;\\n      } else {\\n        size = nativeMax(toInteger(size), 0);\\n      }\\n      var length = array == null ? 0 : array.length;\\n      if (!length || size < 1) {\\n        return [];\\n      }\\n      var index = 0,\\n          resIndex = 0,\\n          result = Array(nativeCeil(length / size));\\n\\n      while (index < length) {\\n        result[resIndex++] = baseSlice(array, index, (index += size));\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an array with all falsey values removed. The values `false`, `null`,\\n     * `0`, `\\\"\\\"`, `undefined`, and `NaN` are falsey.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to compact.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @example\\n     *\\n     * _.compact([0, 1, false, 2, '', 3]);\\n     * // => [1, 2, 3]\\n     */\\n    function compact(array) {\\n      var index = -1,\\n          length = array == null ? 0 : array.length,\\n          resIndex = 0,\\n          result = [];\\n\\n      while (++index < length) {\\n        var value = array[index];\\n        if (value) {\\n          result[resIndex++] = value;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Creates a new array concatenating `array` with any additional arrays\\n     * and/or values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to concatenate.\\n     * @param {...*} [values] The values to concatenate.\\n     * @returns {Array} Returns the new concatenated array.\\n     * @example\\n     *\\n     * var array = [1];\\n     * var other = _.concat(array, 2, [3], [[4]]);\\n     *\\n     * console.log(other);\\n     * // => [1, 2, 3, [4]]\\n     *\\n     * console.log(array);\\n     * // => [1]\\n     */\\n    function concat() {\\n      var length = arguments.length;\\n      if (!length) {\\n        return [];\\n      }\\n      var args = Array(length - 1),\\n          array = arguments[0],\\n          index = length;\\n\\n      while (index--) {\\n        args[index - 1] = arguments[index];\\n      }\\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\\n    }\\n\\n    /**\\n     * Creates an array of `array` values not included in the other given arrays\\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * for equality comparisons. The order and references of result values are\\n     * determined by the first array.\\n     *\\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {...Array} [values] The values to exclude.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @see _.without, _.xor\\n     * @example\\n     *\\n     * _.difference([2, 1], [2, 3]);\\n     * // => [1]\\n     */\\n    var difference = baseRest(function(array, values) {\\n      return isArrayLikeObject(array)\\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\\n        : [];\\n    });\\n\\n    /**\\n     * This method is like `_.difference` except that it accepts `iteratee` which\\n     * is invoked for each element of `array` and `values` to generate the criterion\\n     * by which they're compared. The order and references of result values are\\n     * determined by the first array. The iteratee is invoked with one argument:\\n     * (value).\\n     *\\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {...Array} [values] The values to exclude.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @example\\n     *\\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\\n     * // => [1.2]\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\\n     * // => [{ 'x': 2 }]\\n     */\\n    var differenceBy = baseRest(function(array, values) {\\n      var iteratee = last(values);\\n      if (isArrayLikeObject(iteratee)) {\\n        iteratee = undefined;\\n      }\\n      return isArrayLikeObject(array)\\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\\n        : [];\\n    });\\n\\n    /**\\n     * This method is like `_.difference` except that it accepts `comparator`\\n     * which is invoked to compare elements of `array` to `values`. The order and\\n     * references of result values are determined by the first array. The comparator\\n     * is invoked with two arguments: (arrVal, othVal).\\n     *\\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {...Array} [values] The values to exclude.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @example\\n     *\\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\\n     *\\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\\n     * // => [{ 'x': 2, 'y': 1 }]\\n     */\\n    var differenceWith = baseRest(function(array, values) {\\n      var comparator = last(values);\\n      if (isArrayLikeObject(comparator)) {\\n        comparator = undefined;\\n      }\\n      return isArrayLikeObject(array)\\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\\n        : [];\\n    });\\n\\n    /**\\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.5.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=1] The number of elements to drop.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.drop([1, 2, 3]);\\n     * // => [2, 3]\\n     *\\n     * _.drop([1, 2, 3], 2);\\n     * // => [3]\\n     *\\n     * _.drop([1, 2, 3], 5);\\n     * // => []\\n     *\\n     * _.drop([1, 2, 3], 0);\\n     * // => [1, 2, 3]\\n     */\\n    function drop(array, n, guard) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return [];\\n      }\\n      n = (guard || n === undefined) ? 1 : toInteger(n);\\n      return baseSlice(array, n < 0 ? 0 : n, length);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with `n` elements dropped from the end.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=1] The number of elements to drop.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.dropRight([1, 2, 3]);\\n     * // => [1, 2]\\n     *\\n     * _.dropRight([1, 2, 3], 2);\\n     * // => [1]\\n     *\\n     * _.dropRight([1, 2, 3], 5);\\n     * // => []\\n     *\\n     * _.dropRight([1, 2, 3], 0);\\n     * // => [1, 2, 3]\\n     */\\n    function dropRight(array, n, guard) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return [];\\n      }\\n      n = (guard || n === undefined) ? 1 : toInteger(n);\\n      n = length - n;\\n      return baseSlice(array, 0, n < 0 ? 0 : n);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` excluding elements dropped from the end.\\n     * Elements are dropped until `predicate` returns falsey. The predicate is\\n     * invoked with three arguments: (value, index, array).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': true },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': false }\\n     * ];\\n     *\\n     * _.dropRightWhile(users, function(o) { return !o.active; });\\n     * // => objects for ['barney']\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\\n     * // => objects for ['barney', 'fred']\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.dropRightWhile(users, ['active', false]);\\n     * // => objects for ['barney']\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.dropRightWhile(users, 'active');\\n     * // => objects for ['barney', 'fred', 'pebbles']\\n     */\\n    function dropRightWhile(array, predicate) {\\n      return (array && array.length)\\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\\n        : [];\\n    }\\n\\n    /**\\n     * Creates a slice of `array` excluding elements dropped from the beginning.\\n     * Elements are dropped until `predicate` returns falsey. The predicate is\\n     * invoked with three arguments: (value, index, array).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': false },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': true }\\n     * ];\\n     *\\n     * _.dropWhile(users, function(o) { return !o.active; });\\n     * // => objects for ['pebbles']\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\\n     * // => objects for ['fred', 'pebbles']\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.dropWhile(users, ['active', false]);\\n     * // => objects for ['pebbles']\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.dropWhile(users, 'active');\\n     * // => objects for ['barney', 'fred', 'pebbles']\\n     */\\n    function dropWhile(array, predicate) {\\n      return (array && array.length)\\n        ? baseWhile(array, getIteratee(predicate, 3), true)\\n        : [];\\n    }\\n\\n    /**\\n     * Fills elements of `array` with `value` from `start` up to, but not\\n     * including, `end`.\\n     *\\n     * **Note:** This method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.2.0\\n     * @category Array\\n     * @param {Array} array The array to fill.\\n     * @param {*} value The value to fill `array` with.\\n     * @param {number} [start=0] The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns `array`.\\n     * @example\\n     *\\n     * var array = [1, 2, 3];\\n     *\\n     * _.fill(array, 'a');\\n     * console.log(array);\\n     * // => ['a', 'a', 'a']\\n     *\\n     * _.fill(Array(3), 2);\\n     * // => [2, 2, 2]\\n     *\\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\\n     * // => [4, '*', '*', 10]\\n     */\\n    function fill(array, value, start, end) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return [];\\n      }\\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\\n        start = 0;\\n        end = length;\\n      }\\n      return baseFill(array, value, start, end);\\n    }\\n\\n    /**\\n     * This method is like `_.find` except that it returns the index of the first\\n     * element `predicate` returns truthy for instead of the element itself.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.1.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @param {number} [fromIndex=0] The index to search from.\\n     * @returns {number} Returns the index of the found element, else `-1`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': false },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': true }\\n     * ];\\n     *\\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\\n     * // => 0\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\\n     * // => 1\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.findIndex(users, ['active', false]);\\n     * // => 0\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.findIndex(users, 'active');\\n     * // => 2\\n     */\\n    function findIndex(array, predicate, fromIndex) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return -1;\\n      }\\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\\n      if (index < 0) {\\n        index = nativeMax(length + index, 0);\\n      }\\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\\n    }\\n\\n    /**\\n     * This method is like `_.findIndex` except that it iterates over elements\\n     * of `collection` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @param {number} [fromIndex=array.length-1] The index to search from.\\n     * @returns {number} Returns the index of the found element, else `-1`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': true },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': false }\\n     * ];\\n     *\\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\\n     * // => 2\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\\n     * // => 0\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.findLastIndex(users, ['active', false]);\\n     * // => 2\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.findLastIndex(users, 'active');\\n     * // => 0\\n     */\\n    function findLastIndex(array, predicate, fromIndex) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return -1;\\n      }\\n      var index = length - 1;\\n      if (fromIndex !== undefined) {\\n        index = toInteger(fromIndex);\\n        index = fromIndex < 0\\n          ? nativeMax(length + index, 0)\\n          : nativeMin(index, length - 1);\\n      }\\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\\n    }\\n\\n    /**\\n     * Flattens `array` a single level deep.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to flatten.\\n     * @returns {Array} Returns the new flattened array.\\n     * @example\\n     *\\n     * _.flatten([1, [2, [3, [4]], 5]]);\\n     * // => [1, 2, [3, [4]], 5]\\n     */\\n    function flatten(array) {\\n      var length = array == null ? 0 : array.length;\\n      return length ? baseFlatten(array, 1) : [];\\n    }\\n\\n    /**\\n     * Recursively flattens `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to flatten.\\n     * @returns {Array} Returns the new flattened array.\\n     * @example\\n     *\\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\\n     * // => [1, 2, 3, 4, 5]\\n     */\\n    function flattenDeep(array) {\\n      var length = array == null ? 0 : array.length;\\n      return length ? baseFlatten(array, INFINITY) : [];\\n    }\\n\\n    /**\\n     * Recursively flatten `array` up to `depth` times.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.4.0\\n     * @category Array\\n     * @param {Array} array The array to flatten.\\n     * @param {number} [depth=1] The maximum recursion depth.\\n     * @returns {Array} Returns the new flattened array.\\n     * @example\\n     *\\n     * var array = [1, [2, [3, [4]], 5]];\\n     *\\n     * _.flattenDepth(array, 1);\\n     * // => [1, 2, [3, [4]], 5]\\n     *\\n     * _.flattenDepth(array, 2);\\n     * // => [1, 2, 3, [4], 5]\\n     */\\n    function flattenDepth(array, depth) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return [];\\n      }\\n      depth = depth === undefined ? 1 : toInteger(depth);\\n      return baseFlatten(array, depth);\\n    }\\n\\n    /**\\n     * The inverse of `_.toPairs`; this method returns an object composed\\n     * from key-value `pairs`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} pairs The key-value pairs.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * _.fromPairs([['a', 1], ['b', 2]]);\\n     * // => { 'a': 1, 'b': 2 }\\n     */\\n    function fromPairs(pairs) {\\n      var index = -1,\\n          length = pairs == null ? 0 : pairs.length,\\n          result = {};\\n\\n      while (++index < length) {\\n        var pair = pairs[index];\\n        result[pair[0]] = pair[1];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the first element of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @alias first\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @returns {*} Returns the first element of `array`.\\n     * @example\\n     *\\n     * _.head([1, 2, 3]);\\n     * // => 1\\n     *\\n     * _.head([]);\\n     * // => undefined\\n     */\\n    function head(array) {\\n      return (array && array.length) ? array[0] : undefined;\\n    }\\n\\n    /**\\n     * Gets the index at which the first occurrence of `value` is found in `array`\\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\\n     * offset from the end of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {*} value The value to search for.\\n     * @param {number} [fromIndex=0] The index to search from.\\n     * @returns {number} Returns the index of the matched value, else `-1`.\\n     * @example\\n     *\\n     * _.indexOf([1, 2, 1, 2], 2);\\n     * // => 1\\n     *\\n     * // Search from the `fromIndex`.\\n     * _.indexOf([1, 2, 1, 2], 2, 2);\\n     * // => 3\\n     */\\n    function indexOf(array, value, fromIndex) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return -1;\\n      }\\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\\n      if (index < 0) {\\n        index = nativeMax(length + index, 0);\\n      }\\n      return baseIndexOf(array, value, index);\\n    }\\n\\n    /**\\n     * Gets all but the last element of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.initial([1, 2, 3]);\\n     * // => [1, 2]\\n     */\\n    function initial(array) {\\n      var length = array == null ? 0 : array.length;\\n      return length ? baseSlice(array, 0, -1) : [];\\n    }\\n\\n    /**\\n     * Creates an array of unique values that are included in all given arrays\\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * for equality comparisons. The order and references of result values are\\n     * determined by the first array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @returns {Array} Returns the new array of intersecting values.\\n     * @example\\n     *\\n     * _.intersection([2, 1], [2, 3]);\\n     * // => [2]\\n     */\\n    var intersection = baseRest(function(arrays) {\\n      var mapped = arrayMap(arrays, castArrayLikeObject);\\n      return (mapped.length && mapped[0] === arrays[0])\\n        ? baseIntersection(mapped)\\n        : [];\\n    });\\n\\n    /**\\n     * This method is like `_.intersection` except that it accepts `iteratee`\\n     * which is invoked for each element of each `arrays` to generate the criterion\\n     * by which they're compared. The order and references of result values are\\n     * determined by the first array. The iteratee is invoked with one argument:\\n     * (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {Array} Returns the new array of intersecting values.\\n     * @example\\n     *\\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\\n     * // => [2.1]\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\\n     * // => [{ 'x': 1 }]\\n     */\\n    var intersectionBy = baseRest(function(arrays) {\\n      var iteratee = last(arrays),\\n          mapped = arrayMap(arrays, castArrayLikeObject);\\n\\n      if (iteratee === last(mapped)) {\\n        iteratee = undefined;\\n      } else {\\n        mapped.pop();\\n      }\\n      return (mapped.length && mapped[0] === arrays[0])\\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\\n        : [];\\n    });\\n\\n    /**\\n     * This method is like `_.intersection` except that it accepts `comparator`\\n     * which is invoked to compare elements of `arrays`. The order and references\\n     * of result values are determined by the first array. The comparator is\\n     * invoked with two arguments: (arrVal, othVal).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new array of intersecting values.\\n     * @example\\n     *\\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\\n     *\\n     * _.intersectionWith(objects, others, _.isEqual);\\n     * // => [{ 'x': 1, 'y': 2 }]\\n     */\\n    var intersectionWith = baseRest(function(arrays) {\\n      var comparator = last(arrays),\\n          mapped = arrayMap(arrays, castArrayLikeObject);\\n\\n      comparator = typeof comparator == 'function' ? comparator : undefined;\\n      if (comparator) {\\n        mapped.pop();\\n      }\\n      return (mapped.length && mapped[0] === arrays[0])\\n        ? baseIntersection(mapped, undefined, comparator)\\n        : [];\\n    });\\n\\n    /**\\n     * Converts all elements in `array` into a string separated by `separator`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to convert.\\n     * @param {string} [separator=','] The element separator.\\n     * @returns {string} Returns the joined string.\\n     * @example\\n     *\\n     * _.join(['a', 'b', 'c'], '~');\\n     * // => 'a~b~c'\\n     */\\n    function join(array, separator) {\\n      return array == null ? '' : nativeJoin.call(array, separator);\\n    }\\n\\n    /**\\n     * Gets the last element of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @returns {*} Returns the last element of `array`.\\n     * @example\\n     *\\n     * _.last([1, 2, 3]);\\n     * // => 3\\n     */\\n    function last(array) {\\n      var length = array == null ? 0 : array.length;\\n      return length ? array[length - 1] : undefined;\\n    }\\n\\n    /**\\n     * This method is like `_.indexOf` except that it iterates over elements of\\n     * `array` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {*} value The value to search for.\\n     * @param {number} [fromIndex=array.length-1] The index to search from.\\n     * @returns {number} Returns the index of the matched value, else `-1`.\\n     * @example\\n     *\\n     * _.lastIndexOf([1, 2, 1, 2], 2);\\n     * // => 3\\n     *\\n     * // Search from the `fromIndex`.\\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\\n     * // => 1\\n     */\\n    function lastIndexOf(array, value, fromIndex) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return -1;\\n      }\\n      var index = length;\\n      if (fromIndex !== undefined) {\\n        index = toInteger(fromIndex);\\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\\n      }\\n      return value === value\\n        ? strictLastIndexOf(array, value, index)\\n        : baseFindIndex(array, baseIsNaN, index, true);\\n    }\\n\\n    /**\\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\\n     * element from the end is returned.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.11.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=0] The index of the element to return.\\n     * @returns {*} Returns the nth element of `array`.\\n     * @example\\n     *\\n     * var array = ['a', 'b', 'c', 'd'];\\n     *\\n     * _.nth(array, 1);\\n     * // => 'b'\\n     *\\n     * _.nth(array, -2);\\n     * // => 'c';\\n     */\\n    function nth(array, n) {\\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\\n    }\\n\\n    /**\\n     * Removes all given values from `array` using\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\\n     * to remove elements from an array by predicate.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {...*} [values] The values to remove.\\n     * @returns {Array} Returns `array`.\\n     * @example\\n     *\\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\\n     *\\n     * _.pull(array, 'a', 'c');\\n     * console.log(array);\\n     * // => ['b', 'b']\\n     */\\n    var pull = baseRest(pullAll);\\n\\n    /**\\n     * This method is like `_.pull` except that it accepts an array of values to remove.\\n     *\\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {Array} values The values to remove.\\n     * @returns {Array} Returns `array`.\\n     * @example\\n     *\\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\\n     *\\n     * _.pullAll(array, ['a', 'c']);\\n     * console.log(array);\\n     * // => ['b', 'b']\\n     */\\n    function pullAll(array, values) {\\n      return (array && array.length && values && values.length)\\n        ? basePullAll(array, values)\\n        : array;\\n    }\\n\\n    /**\\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\\n     * invoked for each element of `array` and `values` to generate the criterion\\n     * by which they're compared. The iteratee is invoked with one argument: (value).\\n     *\\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {Array} values The values to remove.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {Array} Returns `array`.\\n     * @example\\n     *\\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\\n     *\\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\\n     * console.log(array);\\n     * // => [{ 'x': 2 }]\\n     */\\n    function pullAllBy(array, values, iteratee) {\\n      return (array && array.length && values && values.length)\\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\\n        : array;\\n    }\\n\\n    /**\\n     * This method is like `_.pullAll` except that it accepts `comparator` which\\n     * is invoked to compare elements of `array` to `values`. The comparator is\\n     * invoked with two arguments: (arrVal, othVal).\\n     *\\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.6.0\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {Array} values The values to remove.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns `array`.\\n     * @example\\n     *\\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\\n     *\\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\\n     * console.log(array);\\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\\n     */\\n    function pullAllWith(array, values, comparator) {\\n      return (array && array.length && values && values.length)\\n        ? basePullAll(array, values, undefined, comparator)\\n        : array;\\n    }\\n\\n    /**\\n     * Removes elements from `array` corresponding to `indexes` and returns an\\n     * array of removed elements.\\n     *\\n     * **Note:** Unlike `_.at`, this method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\\n     * @returns {Array} Returns the new array of removed elements.\\n     * @example\\n     *\\n     * var array = ['a', 'b', 'c', 'd'];\\n     * var pulled = _.pullAt(array, [1, 3]);\\n     *\\n     * console.log(array);\\n     * // => ['a', 'c']\\n     *\\n     * console.log(pulled);\\n     * // => ['b', 'd']\\n     */\\n    var pullAt = flatRest(function(array, indexes) {\\n      var length = array == null ? 0 : array.length,\\n          result = baseAt(array, indexes);\\n\\n      basePullAt(array, arrayMap(indexes, function(index) {\\n        return isIndex(index, length) ? +index : index;\\n      }).sort(compareAscending));\\n\\n      return result;\\n    });\\n\\n    /**\\n     * Removes all elements from `array` that `predicate` returns truthy for\\n     * and returns an array of the removed elements. The predicate is invoked\\n     * with three arguments: (value, index, array).\\n     *\\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\\n     * to pull elements from an array by value.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the new array of removed elements.\\n     * @example\\n     *\\n     * var array = [1, 2, 3, 4];\\n     * var evens = _.remove(array, function(n) {\\n     *   return n % 2 == 0;\\n     * });\\n     *\\n     * console.log(array);\\n     * // => [1, 3]\\n     *\\n     * console.log(evens);\\n     * // => [2, 4]\\n     */\\n    function remove(array, predicate) {\\n      var result = [];\\n      if (!(array && array.length)) {\\n        return result;\\n      }\\n      var index = -1,\\n          indexes = [],\\n          length = array.length;\\n\\n      predicate = getIteratee(predicate, 3);\\n      while (++index < length) {\\n        var value = array[index];\\n        if (predicate(value, index, array)) {\\n          result.push(value);\\n          indexes.push(index);\\n        }\\n      }\\n      basePullAt(array, indexes);\\n      return result;\\n    }\\n\\n    /**\\n     * Reverses `array` so that the first element becomes the last, the second\\n     * element becomes the second to last, and so on.\\n     *\\n     * **Note:** This method mutates `array` and is based on\\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @returns {Array} Returns `array`.\\n     * @example\\n     *\\n     * var array = [1, 2, 3];\\n     *\\n     * _.reverse(array);\\n     * // => [3, 2, 1]\\n     *\\n     * console.log(array);\\n     * // => [3, 2, 1]\\n     */\\n    function reverse(array) {\\n      return array == null ? array : nativeReverse.call(array);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\\n     *\\n     * **Note:** This method is used instead of\\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\\n     * returned.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to slice.\\n     * @param {number} [start=0] The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns the slice of `array`.\\n     */\\n    function slice(array, start, end) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return [];\\n      }\\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\\n        start = 0;\\n        end = length;\\n      }\\n      else {\\n        start = start == null ? 0 : toInteger(start);\\n        end = end === undefined ? length : toInteger(end);\\n      }\\n      return baseSlice(array, start, end);\\n    }\\n\\n    /**\\n     * Uses a binary search to determine the lowest index at which `value`\\n     * should be inserted into `array` in order to maintain its sort order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     * @example\\n     *\\n     * _.sortedIndex([30, 50], 40);\\n     * // => 1\\n     */\\n    function sortedIndex(array, value) {\\n      return baseSortedIndex(array, value);\\n    }\\n\\n    /**\\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\\n     * which is invoked for `value` and each element of `array` to compute their\\n     * sort ranking. The iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     * @example\\n     *\\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\\n     *\\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\\n     * // => 0\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\\n     * // => 0\\n     */\\n    function sortedIndexBy(array, value, iteratee) {\\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\\n    }\\n\\n    /**\\n     * This method is like `_.indexOf` except that it performs a binary\\n     * search on a sorted `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {*} value The value to search for.\\n     * @returns {number} Returns the index of the matched value, else `-1`.\\n     * @example\\n     *\\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\\n     * // => 1\\n     */\\n    function sortedIndexOf(array, value) {\\n      var length = array == null ? 0 : array.length;\\n      if (length) {\\n        var index = baseSortedIndex(array, value);\\n        if (index < length && eq(array[index], value)) {\\n          return index;\\n        }\\n      }\\n      return -1;\\n    }\\n\\n    /**\\n     * This method is like `_.sortedIndex` except that it returns the highest\\n     * index at which `value` should be inserted into `array` in order to\\n     * maintain its sort order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     * @example\\n     *\\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\\n     * // => 4\\n     */\\n    function sortedLastIndex(array, value) {\\n      return baseSortedIndex(array, value, true);\\n    }\\n\\n    /**\\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\\n     * which is invoked for `value` and each element of `array` to compute their\\n     * sort ranking. The iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     * @example\\n     *\\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\\n     *\\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\\n     * // => 1\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\\n     * // => 1\\n     */\\n    function sortedLastIndexBy(array, value, iteratee) {\\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\\n    }\\n\\n    /**\\n     * This method is like `_.lastIndexOf` except that it performs a binary\\n     * search on a sorted `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {*} value The value to search for.\\n     * @returns {number} Returns the index of the matched value, else `-1`.\\n     * @example\\n     *\\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\\n     * // => 3\\n     */\\n    function sortedLastIndexOf(array, value) {\\n      var length = array == null ? 0 : array.length;\\n      if (length) {\\n        var index = baseSortedIndex(array, value, true) - 1;\\n        if (eq(array[index], value)) {\\n          return index;\\n        }\\n      }\\n      return -1;\\n    }\\n\\n    /**\\n     * This method is like `_.uniq` except that it's designed and optimized\\n     * for sorted arrays.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @returns {Array} Returns the new duplicate free array.\\n     * @example\\n     *\\n     * _.sortedUniq([1, 1, 2]);\\n     * // => [1, 2]\\n     */\\n    function sortedUniq(array) {\\n      return (array && array.length)\\n        ? baseSortedUniq(array)\\n        : [];\\n    }\\n\\n    /**\\n     * This method is like `_.uniqBy` except that it's designed and optimized\\n     * for sorted arrays.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {Function} [iteratee] The iteratee invoked per element.\\n     * @returns {Array} Returns the new duplicate free array.\\n     * @example\\n     *\\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\\n     * // => [1.1, 2.3]\\n     */\\n    function sortedUniqBy(array, iteratee) {\\n      return (array && array.length)\\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\\n        : [];\\n    }\\n\\n    /**\\n     * Gets all but the first element of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.tail([1, 2, 3]);\\n     * // => [2, 3]\\n     */\\n    function tail(array) {\\n      var length = array == null ? 0 : array.length;\\n      return length ? baseSlice(array, 1, length) : [];\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with `n` elements taken from the beginning.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=1] The number of elements to take.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.take([1, 2, 3]);\\n     * // => [1]\\n     *\\n     * _.take([1, 2, 3], 2);\\n     * // => [1, 2]\\n     *\\n     * _.take([1, 2, 3], 5);\\n     * // => [1, 2, 3]\\n     *\\n     * _.take([1, 2, 3], 0);\\n     * // => []\\n     */\\n    function take(array, n, guard) {\\n      if (!(array && array.length)) {\\n        return [];\\n      }\\n      n = (guard || n === undefined) ? 1 : toInteger(n);\\n      return baseSlice(array, 0, n < 0 ? 0 : n);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with `n` elements taken from the end.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=1] The number of elements to take.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.takeRight([1, 2, 3]);\\n     * // => [3]\\n     *\\n     * _.takeRight([1, 2, 3], 2);\\n     * // => [2, 3]\\n     *\\n     * _.takeRight([1, 2, 3], 5);\\n     * // => [1, 2, 3]\\n     *\\n     * _.takeRight([1, 2, 3], 0);\\n     * // => []\\n     */\\n    function takeRight(array, n, guard) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return [];\\n      }\\n      n = (guard || n === undefined) ? 1 : toInteger(n);\\n      n = length - n;\\n      return baseSlice(array, n < 0 ? 0 : n, length);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with elements taken from the end. Elements are\\n     * taken until `predicate` returns falsey. The predicate is invoked with\\n     * three arguments: (value, index, array).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': true },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': false }\\n     * ];\\n     *\\n     * _.takeRightWhile(users, function(o) { return !o.active; });\\n     * // => objects for ['fred', 'pebbles']\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\\n     * // => objects for ['pebbles']\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.takeRightWhile(users, ['active', false]);\\n     * // => objects for ['fred', 'pebbles']\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.takeRightWhile(users, 'active');\\n     * // => []\\n     */\\n    function takeRightWhile(array, predicate) {\\n      return (array && array.length)\\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\\n        : [];\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with elements taken from the beginning. Elements\\n     * are taken until `predicate` returns falsey. The predicate is invoked with\\n     * three arguments: (value, index, array).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': false },\\n     *   { 'user': 'fred',    'active': false},\\n     *   { 'user': 'pebbles', 'active': true }\\n     * ];\\n     *\\n     * _.takeWhile(users, function(o) { return !o.active; });\\n     * // => objects for ['barney', 'fred']\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\\n     * // => objects for ['barney']\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.takeWhile(users, ['active', false]);\\n     * // => objects for ['barney', 'fred']\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.takeWhile(users, 'active');\\n     * // => []\\n     */\\n    function takeWhile(array, predicate) {\\n      return (array && array.length)\\n        ? baseWhile(array, getIteratee(predicate, 3))\\n        : [];\\n    }\\n\\n    /**\\n     * Creates an array of unique values, in order, from all given arrays using\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @returns {Array} Returns the new array of combined values.\\n     * @example\\n     *\\n     * _.union([2], [1, 2]);\\n     * // => [2, 1]\\n     */\\n    var union = baseRest(function(arrays) {\\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\\n    });\\n\\n    /**\\n     * This method is like `_.union` except that it accepts `iteratee` which is\\n     * invoked for each element of each `arrays` to generate the criterion by\\n     * which uniqueness is computed. Result values are chosen from the first\\n     * array in which the value occurs. The iteratee is invoked with one argument:\\n     * (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {Array} Returns the new array of combined values.\\n     * @example\\n     *\\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\\n     * // => [2.1, 1.2]\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\\n     * // => [{ 'x': 1 }, { 'x': 2 }]\\n     */\\n    var unionBy = baseRest(function(arrays) {\\n      var iteratee = last(arrays);\\n      if (isArrayLikeObject(iteratee)) {\\n        iteratee = undefined;\\n      }\\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\\n    });\\n\\n    /**\\n     * This method is like `_.union` except that it accepts `comparator` which\\n     * is invoked to compare elements of `arrays`. Result values are chosen from\\n     * the first array in which the value occurs. The comparator is invoked\\n     * with two arguments: (arrVal, othVal).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new array of combined values.\\n     * @example\\n     *\\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\\n     *\\n     * _.unionWith(objects, others, _.isEqual);\\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\\n     */\\n    var unionWith = baseRest(function(arrays) {\\n      var comparator = last(arrays);\\n      comparator = typeof comparator == 'function' ? comparator : undefined;\\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\\n    });\\n\\n    /**\\n     * Creates a duplicate-free version of an array, using\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * for equality comparisons, in which only the first occurrence of each element\\n     * is kept. The order of result values is determined by the order they occur\\n     * in the array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @returns {Array} Returns the new duplicate free array.\\n     * @example\\n     *\\n     * _.uniq([2, 1, 2]);\\n     * // => [2, 1]\\n     */\\n    function uniq(array) {\\n      return (array && array.length) ? baseUniq(array) : [];\\n    }\\n\\n    /**\\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\\n     * invoked for each element in `array` to generate the criterion by which\\n     * uniqueness is computed. The order of result values is determined by the\\n     * order they occur in the array. The iteratee is invoked with one argument:\\n     * (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {Array} Returns the new duplicate free array.\\n     * @example\\n     *\\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\\n     * // => [2.1, 1.2]\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\\n     * // => [{ 'x': 1 }, { 'x': 2 }]\\n     */\\n    function uniqBy(array, iteratee) {\\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\\n    }\\n\\n    /**\\n     * This method is like `_.uniq` except that it accepts `comparator` which\\n     * is invoked to compare elements of `array`. The order of result values is\\n     * determined by the order they occur in the array.The comparator is invoked\\n     * with two arguments: (arrVal, othVal).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new duplicate free array.\\n     * @example\\n     *\\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\\n     *\\n     * _.uniqWith(objects, _.isEqual);\\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\\n     */\\n    function uniqWith(array, comparator) {\\n      comparator = typeof comparator == 'function' ? comparator : undefined;\\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\\n    }\\n\\n    /**\\n     * This method is like `_.zip` except that it accepts an array of grouped\\n     * elements and creates an array regrouping the elements to their pre-zip\\n     * configuration.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.2.0\\n     * @category Array\\n     * @param {Array} array The array of grouped elements to process.\\n     * @returns {Array} Returns the new array of regrouped elements.\\n     * @example\\n     *\\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\\n     * // => [['a', 1, true], ['b', 2, false]]\\n     *\\n     * _.unzip(zipped);\\n     * // => [['a', 'b'], [1, 2], [true, false]]\\n     */\\n    function unzip(array) {\\n      if (!(array && array.length)) {\\n        return [];\\n      }\\n      var length = 0;\\n      array = arrayFilter(array, function(group) {\\n        if (isArrayLikeObject(group)) {\\n          length = nativeMax(group.length, length);\\n          return true;\\n        }\\n      });\\n      return baseTimes(length, function(index) {\\n        return arrayMap(array, baseProperty(index));\\n      });\\n    }\\n\\n    /**\\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\\n     * how regrouped values should be combined. The iteratee is invoked with the\\n     * elements of each group: (...group).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.8.0\\n     * @category Array\\n     * @param {Array} array The array of grouped elements to process.\\n     * @param {Function} [iteratee=_.identity] The function to combine\\n     *  regrouped values.\\n     * @returns {Array} Returns the new array of regrouped elements.\\n     * @example\\n     *\\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\\n     * // => [[1, 10, 100], [2, 20, 200]]\\n     *\\n     * _.unzipWith(zipped, _.add);\\n     * // => [3, 30, 300]\\n     */\\n    function unzipWith(array, iteratee) {\\n      if (!(array && array.length)) {\\n        return [];\\n      }\\n      var result = unzip(array);\\n      if (iteratee == null) {\\n        return result;\\n      }\\n      return arrayMap(result, function(group) {\\n        return apply(iteratee, undefined, group);\\n      });\\n    }\\n\\n    /**\\n     * Creates an array excluding all given values using\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * **Note:** Unlike `_.pull`, this method returns a new array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {...*} [values] The values to exclude.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @see _.difference, _.xor\\n     * @example\\n     *\\n     * _.without([2, 1, 2, 3], 1, 2);\\n     * // => [3]\\n     */\\n    var without = baseRest(function(array, values) {\\n      return isArrayLikeObject(array)\\n        ? baseDifference(array, values)\\n        : [];\\n    });\\n\\n    /**\\n     * Creates an array of unique values that is the\\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\\n     * of the given arrays. The order of result values is determined by the order\\n     * they occur in the arrays.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.4.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @see _.difference, _.without\\n     * @example\\n     *\\n     * _.xor([2, 1], [2, 3]);\\n     * // => [1, 3]\\n     */\\n    var xor = baseRest(function(arrays) {\\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\\n    });\\n\\n    /**\\n     * This method is like `_.xor` except that it accepts `iteratee` which is\\n     * invoked for each element of each `arrays` to generate the criterion by\\n     * which by which they're compared. The order of result values is determined\\n     * by the order they occur in the arrays. The iteratee is invoked with one\\n     * argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @example\\n     *\\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\\n     * // => [1.2, 3.4]\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\\n     * // => [{ 'x': 2 }]\\n     */\\n    var xorBy = baseRest(function(arrays) {\\n      var iteratee = last(arrays);\\n      if (isArrayLikeObject(iteratee)) {\\n        iteratee = undefined;\\n      }\\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\\n    });\\n\\n    /**\\n     * This method is like `_.xor` except that it accepts `comparator` which is\\n     * invoked to compare elements of `arrays`. The order of result values is\\n     * determined by the order they occur in the arrays. The comparator is invoked\\n     * with two arguments: (arrVal, othVal).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @example\\n     *\\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\\n     *\\n     * _.xorWith(objects, others, _.isEqual);\\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\\n     */\\n    var xorWith = baseRest(function(arrays) {\\n      var comparator = last(arrays);\\n      comparator = typeof comparator == 'function' ? comparator : undefined;\\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\\n    });\\n\\n    /**\\n     * Creates an array of grouped elements, the first of which contains the\\n     * first elements of the given arrays, the second of which contains the\\n     * second elements of the given arrays, and so on.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to process.\\n     * @returns {Array} Returns the new array of grouped elements.\\n     * @example\\n     *\\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\\n     * // => [['a', 1, true], ['b', 2, false]]\\n     */\\n    var zip = baseRest(unzip);\\n\\n    /**\\n     * This method is like `_.fromPairs` except that it accepts two arrays,\\n     * one of property identifiers and one of corresponding values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.4.0\\n     * @category Array\\n     * @param {Array} [props=[]] The property identifiers.\\n     * @param {Array} [values=[]] The property values.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * _.zipObject(['a', 'b'], [1, 2]);\\n     * // => { 'a': 1, 'b': 2 }\\n     */\\n    function zipObject(props, values) {\\n      return baseZipObject(props || [], values || [], assignValue);\\n    }\\n\\n    /**\\n     * This method is like `_.zipObject` except that it supports property paths.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.1.0\\n     * @category Array\\n     * @param {Array} [props=[]] The property identifiers.\\n     * @param {Array} [values=[]] The property values.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\\n     */\\n    function zipObjectDeep(props, values) {\\n      return baseZipObject(props || [], values || [], baseSet);\\n    }\\n\\n    /**\\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\\n     * how grouped values should be combined. The iteratee is invoked with the\\n     * elements of each group: (...group).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.8.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to process.\\n     * @param {Function} [iteratee=_.identity] The function to combine\\n     *  grouped values.\\n     * @returns {Array} Returns the new array of grouped elements.\\n     * @example\\n     *\\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\\n     *   return a + b + c;\\n     * });\\n     * // => [111, 222]\\n     */\\n    var zipWith = baseRest(function(arrays) {\\n      var length = arrays.length,\\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\\n\\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\\n      return unzipWith(arrays, iteratee);\\n    });\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\\n     * chain sequences enabled. The result of such sequences must be unwrapped\\n     * with `_#value`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.3.0\\n     * @category Seq\\n     * @param {*} value The value to wrap.\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'age': 36 },\\n     *   { 'user': 'fred',    'age': 40 },\\n     *   { 'user': 'pebbles', 'age': 1 }\\n     * ];\\n     *\\n     * var youngest = _\\n     *   .chain(users)\\n     *   .sortBy('age')\\n     *   .map(function(o) {\\n     *     return o.user + ' is ' + o.age;\\n     *   })\\n     *   .head()\\n     *   .value();\\n     * // => 'pebbles is 1'\\n     */\\n    function chain(value) {\\n      var result = lodash(value);\\n      result.__chain__ = true;\\n      return result;\\n    }\\n\\n    /**\\n     * This method invokes `interceptor` and returns `value`. The interceptor\\n     * is invoked with one argument; (value). The purpose of this method is to\\n     * \\\"tap into\\\" a method chain sequence in order to modify intermediate results.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Seq\\n     * @param {*} value The value to provide to `interceptor`.\\n     * @param {Function} interceptor The function to invoke.\\n     * @returns {*} Returns `value`.\\n     * @example\\n     *\\n     * _([1, 2, 3])\\n     *  .tap(function(array) {\\n     *    // Mutate input array.\\n     *    array.pop();\\n     *  })\\n     *  .reverse()\\n     *  .value();\\n     * // => [2, 1]\\n     */\\n    function tap(value, interceptor) {\\n      interceptor(value);\\n      return value;\\n    }\\n\\n    /**\\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\\n     * The purpose of this method is to \\\"pass thru\\\" values replacing intermediate\\n     * results in a method chain sequence.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Seq\\n     * @param {*} value The value to provide to `interceptor`.\\n     * @param {Function} interceptor The function to invoke.\\n     * @returns {*} Returns the result of `interceptor`.\\n     * @example\\n     *\\n     * _('  abc  ')\\n     *  .chain()\\n     *  .trim()\\n     *  .thru(function(value) {\\n     *    return [value];\\n     *  })\\n     *  .value();\\n     * // => ['abc']\\n     */\\n    function thru(value, interceptor) {\\n      return interceptor(value);\\n    }\\n\\n    /**\\n     * This method is the wrapper version of `_.at`.\\n     *\\n     * @name at\\n     * @memberOf _\\n     * @since 1.0.0\\n     * @category Seq\\n     * @param {...(string|string[])} [paths] The property paths to pick.\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\\n     *\\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\\n     * // => [3, 4]\\n     */\\n    var wrapperAt = flatRest(function(paths) {\\n      var length = paths.length,\\n          start = length ? paths[0] : 0,\\n          value = this.__wrapped__,\\n          interceptor = function(object) { return baseAt(object, paths); };\\n\\n      if (length > 1 || this.__actions__.length ||\\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\\n        return this.thru(interceptor);\\n      }\\n      value = value.slice(start, +start + (length ? 1 : 0));\\n      value.__actions__.push({\\n        'func': thru,\\n        'args': [interceptor],\\n        'thisArg': undefined\\n      });\\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\\n        if (length && !array.length) {\\n          array.push(undefined);\\n        }\\n        return array;\\n      });\\n    });\\n\\n    /**\\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\\n     *\\n     * @name chain\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Seq\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36 },\\n     *   { 'user': 'fred',   'age': 40 }\\n     * ];\\n     *\\n     * // A sequence without explicit chaining.\\n     * _(users).head();\\n     * // => { 'user': 'barney', 'age': 36 }\\n     *\\n     * // A sequence with explicit chaining.\\n     * _(users)\\n     *   .chain()\\n     *   .head()\\n     *   .pick('user')\\n     *   .value();\\n     * // => { 'user': 'barney' }\\n     */\\n    function wrapperChain() {\\n      return chain(this);\\n    }\\n\\n    /**\\n     * Executes the chain sequence and returns the wrapped result.\\n     *\\n     * @name commit\\n     * @memberOf _\\n     * @since 3.2.0\\n     * @category Seq\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var array = [1, 2];\\n     * var wrapped = _(array).push(3);\\n     *\\n     * console.log(array);\\n     * // => [1, 2]\\n     *\\n     * wrapped = wrapped.commit();\\n     * console.log(array);\\n     * // => [1, 2, 3]\\n     *\\n     * wrapped.last();\\n     * // => 3\\n     *\\n     * console.log(array);\\n     * // => [1, 2, 3]\\n     */\\n    function wrapperCommit() {\\n      return new LodashWrapper(this.value(), this.__chain__);\\n    }\\n\\n    /**\\n     * Gets the next value on a wrapped object following the\\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\\n     *\\n     * @name next\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Seq\\n     * @returns {Object} Returns the next iterator value.\\n     * @example\\n     *\\n     * var wrapped = _([1, 2]);\\n     *\\n     * wrapped.next();\\n     * // => { 'done': false, 'value': 1 }\\n     *\\n     * wrapped.next();\\n     * // => { 'done': false, 'value': 2 }\\n     *\\n     * wrapped.next();\\n     * // => { 'done': true, 'value': undefined }\\n     */\\n    function wrapperNext() {\\n      if (this.__values__ === undefined) {\\n        this.__values__ = toArray(this.value());\\n      }\\n      var done = this.__index__ >= this.__values__.length,\\n          value = done ? undefined : this.__values__[this.__index__++];\\n\\n      return { 'done': done, 'value': value };\\n    }\\n\\n    /**\\n     * Enables the wrapper to be iterable.\\n     *\\n     * @name Symbol.iterator\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Seq\\n     * @returns {Object} Returns the wrapper object.\\n     * @example\\n     *\\n     * var wrapped = _([1, 2]);\\n     *\\n     * wrapped[Symbol.iterator]() === wrapped;\\n     * // => true\\n     *\\n     * Array.from(wrapped);\\n     * // => [1, 2]\\n     */\\n    function wrapperToIterator() {\\n      return this;\\n    }\\n\\n    /**\\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\\n     *\\n     * @name plant\\n     * @memberOf _\\n     * @since 3.2.0\\n     * @category Seq\\n     * @param {*} value The value to plant.\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * var wrapped = _([1, 2]).map(square);\\n     * var other = wrapped.plant([3, 4]);\\n     *\\n     * other.value();\\n     * // => [9, 16]\\n     *\\n     * wrapped.value();\\n     * // => [1, 4]\\n     */\\n    function wrapperPlant(value) {\\n      var result,\\n          parent = this;\\n\\n      while (parent instanceof baseLodash) {\\n        var clone = wrapperClone(parent);\\n        clone.__index__ = 0;\\n        clone.__values__ = undefined;\\n        if (result) {\\n          previous.__wrapped__ = clone;\\n        } else {\\n          result = clone;\\n        }\\n        var previous = clone;\\n        parent = parent.__wrapped__;\\n      }\\n      previous.__wrapped__ = value;\\n      return result;\\n    }\\n\\n    /**\\n     * This method is the wrapper version of `_.reverse`.\\n     *\\n     * **Note:** This method mutates the wrapped array.\\n     *\\n     * @name reverse\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Seq\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var array = [1, 2, 3];\\n     *\\n     * _(array).reverse().value()\\n     * // => [3, 2, 1]\\n     *\\n     * console.log(array);\\n     * // => [3, 2, 1]\\n     */\\n    function wrapperReverse() {\\n      var value = this.__wrapped__;\\n      if (value instanceof LazyWrapper) {\\n        var wrapped = value;\\n        if (this.__actions__.length) {\\n          wrapped = new LazyWrapper(this);\\n        }\\n        wrapped = wrapped.reverse();\\n        wrapped.__actions__.push({\\n          'func': thru,\\n          'args': [reverse],\\n          'thisArg': undefined\\n        });\\n        return new LodashWrapper(wrapped, this.__chain__);\\n      }\\n      return this.thru(reverse);\\n    }\\n\\n    /**\\n     * Executes the chain sequence to resolve the unwrapped value.\\n     *\\n     * @name value\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @alias toJSON, valueOf\\n     * @category Seq\\n     * @returns {*} Returns the resolved unwrapped value.\\n     * @example\\n     *\\n     * _([1, 2, 3]).value();\\n     * // => [1, 2, 3]\\n     */\\n    function wrapperValue() {\\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates an object composed of keys generated from the results of running\\n     * each element of `collection` thru `iteratee`. The corresponding value of\\n     * each key is the number of times the key was returned by `iteratee`. The\\n     * iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.5.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\\n     * @returns {Object} Returns the composed aggregate object.\\n     * @example\\n     *\\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\\n     * // => { '4': 1, '6': 2 }\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.countBy(['one', 'two', 'three'], 'length');\\n     * // => { '3': 2, '5': 1 }\\n     */\\n    var countBy = createAggregator(function(result, value, key) {\\n      if (hasOwnProperty.call(result, key)) {\\n        ++result[key];\\n      } else {\\n        baseAssignValue(result, key, 1);\\n      }\\n    });\\n\\n    /**\\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\\n     * invoked with three arguments: (value, index|key, collection).\\n     *\\n     * **Note:** This method returns `true` for\\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\\n     * elements of empty collections.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.every([true, 1, null, 'yes'], Boolean);\\n     * // => false\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': false },\\n     *   { 'user': 'fred',   'age': 40, 'active': false }\\n     * ];\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.every(users, { 'user': 'barney', 'active': false });\\n     * // => false\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.every(users, ['active', false]);\\n     * // => true\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.every(users, 'active');\\n     * // => false\\n     */\\n    function every(collection, predicate, guard) {\\n      var func = isArray(collection) ? arrayEvery : baseEvery;\\n      if (guard && isIterateeCall(collection, predicate, guard)) {\\n        predicate = undefined;\\n      }\\n      return func(collection, getIteratee(predicate, 3));\\n    }\\n\\n    /**\\n     * Iterates over elements of `collection`, returning an array of all elements\\n     * `predicate` returns truthy for. The predicate is invoked with three\\n     * arguments: (value, index|key, collection).\\n     *\\n     * **Note:** Unlike `_.remove`, this method returns a new array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the new filtered array.\\n     * @see _.reject\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': true },\\n     *   { 'user': 'fred',   'age': 40, 'active': false }\\n     * ];\\n     *\\n     * _.filter(users, function(o) { return !o.active; });\\n     * // => objects for ['fred']\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.filter(users, { 'age': 36, 'active': true });\\n     * // => objects for ['barney']\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.filter(users, ['active', false]);\\n     * // => objects for ['fred']\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.filter(users, 'active');\\n     * // => objects for ['barney']\\n     */\\n    function filter(collection, predicate) {\\n      var func = isArray(collection) ? arrayFilter : baseFilter;\\n      return func(collection, getIteratee(predicate, 3));\\n    }\\n\\n    /**\\n     * Iterates over elements of `collection`, returning the first element\\n     * `predicate` returns truthy for. The predicate is invoked with three\\n     * arguments: (value, index|key, collection).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to inspect.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @param {number} [fromIndex=0] The index to search from.\\n     * @returns {*} Returns the matched element, else `undefined`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'age': 36, 'active': true },\\n     *   { 'user': 'fred',    'age': 40, 'active': false },\\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\\n     * ];\\n     *\\n     * _.find(users, function(o) { return o.age < 40; });\\n     * // => object for 'barney'\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.find(users, { 'age': 1, 'active': true });\\n     * // => object for 'pebbles'\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.find(users, ['active', false]);\\n     * // => object for 'fred'\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.find(users, 'active');\\n     * // => object for 'barney'\\n     */\\n    var find = createFind(findIndex);\\n\\n    /**\\n     * This method is like `_.find` except that it iterates over elements of\\n     * `collection` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to inspect.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\\n     * @returns {*} Returns the matched element, else `undefined`.\\n     * @example\\n     *\\n     * _.findLast([1, 2, 3, 4], function(n) {\\n     *   return n % 2 == 1;\\n     * });\\n     * // => 3\\n     */\\n    var findLast = createFind(findLastIndex);\\n\\n    /**\\n     * Creates a flattened array of values by running each element in `collection`\\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\\n     * with three arguments: (value, index|key, collection).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the new flattened array.\\n     * @example\\n     *\\n     * function duplicate(n) {\\n     *   return [n, n];\\n     * }\\n     *\\n     * _.flatMap([1, 2], duplicate);\\n     * // => [1, 1, 2, 2]\\n     */\\n    function flatMap(collection, iteratee) {\\n      return baseFlatten(map(collection, iteratee), 1);\\n    }\\n\\n    /**\\n     * This method is like `_.flatMap` except that it recursively flattens the\\n     * mapped results.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.7.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the new flattened array.\\n     * @example\\n     *\\n     * function duplicate(n) {\\n     *   return [[[n, n]]];\\n     * }\\n     *\\n     * _.flatMapDeep([1, 2], duplicate);\\n     * // => [1, 1, 2, 2]\\n     */\\n    function flatMapDeep(collection, iteratee) {\\n      return baseFlatten(map(collection, iteratee), INFINITY);\\n    }\\n\\n    /**\\n     * This method is like `_.flatMap` except that it recursively flattens the\\n     * mapped results up to `depth` times.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.7.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {number} [depth=1] The maximum recursion depth.\\n     * @returns {Array} Returns the new flattened array.\\n     * @example\\n     *\\n     * function duplicate(n) {\\n     *   return [[[n, n]]];\\n     * }\\n     *\\n     * _.flatMapDepth([1, 2], duplicate, 2);\\n     * // => [[1, 1], [2, 2]]\\n     */\\n    function flatMapDepth(collection, iteratee, depth) {\\n      depth = depth === undefined ? 1 : toInteger(depth);\\n      return baseFlatten(map(collection, iteratee), depth);\\n    }\\n\\n    /**\\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\\n     *\\n     * **Note:** As with other \\\"Collections\\\" methods, objects with a \\\"length\\\"\\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\\n     * or `_.forOwn` for object iteration.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @alias each\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Array|Object} Returns `collection`.\\n     * @see _.forEachRight\\n     * @example\\n     *\\n     * _.forEach([1, 2], function(value) {\\n     *   console.log(value);\\n     * });\\n     * // => Logs `1` then `2`.\\n     *\\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\\n     */\\n    function forEach(collection, iteratee) {\\n      var func = isArray(collection) ? arrayEach : baseEach;\\n      return func(collection, getIteratee(iteratee, 3));\\n    }\\n\\n    /**\\n     * This method is like `_.forEach` except that it iterates over elements of\\n     * `collection` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @alias eachRight\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Array|Object} Returns `collection`.\\n     * @see _.forEach\\n     * @example\\n     *\\n     * _.forEachRight([1, 2], function(value) {\\n     *   console.log(value);\\n     * });\\n     * // => Logs `2` then `1`.\\n     */\\n    function forEachRight(collection, iteratee) {\\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\\n      return func(collection, getIteratee(iteratee, 3));\\n    }\\n\\n    /**\\n     * Creates an object composed of keys generated from the results of running\\n     * each element of `collection` thru `iteratee`. The order of grouped values\\n     * is determined by the order they occur in `collection`. The corresponding\\n     * value of each key is an array of elements responsible for generating the\\n     * key. The iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\\n     * @returns {Object} Returns the composed aggregate object.\\n     * @example\\n     *\\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.groupBy(['one', 'two', 'three'], 'length');\\n     * // => { '3': ['one', 'two'], '5': ['three'] }\\n     */\\n    var groupBy = createAggregator(function(result, value, key) {\\n      if (hasOwnProperty.call(result, key)) {\\n        result[key].push(value);\\n      } else {\\n        baseAssignValue(result, key, [value]);\\n      }\\n    });\\n\\n    /**\\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\\n     * checked for a substring of `value`, otherwise\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\\n     * the offset from the end of `collection`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to inspect.\\n     * @param {*} value The value to search for.\\n     * @param {number} [fromIndex=0] The index to search from.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\\n     * @example\\n     *\\n     * _.includes([1, 2, 3], 1);\\n     * // => true\\n     *\\n     * _.includes([1, 2, 3], 1, 2);\\n     * // => false\\n     *\\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\\n     * // => true\\n     *\\n     * _.includes('abcd', 'bc');\\n     * // => true\\n     */\\n    function includes(collection, value, fromIndex, guard) {\\n      collection = isArrayLike(collection) ? collection : values(collection);\\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\\n\\n      var length = collection.length;\\n      if (fromIndex < 0) {\\n        fromIndex = nativeMax(length + fromIndex, 0);\\n      }\\n      return isString(collection)\\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\\n    }\\n\\n    /**\\n     * Invokes the method at `path` of each element in `collection`, returning\\n     * an array of the results of each invoked method. Any additional arguments\\n     * are provided to each invoked method. If `path` is a function, it's invoked\\n     * for, and `this` bound to, each element in `collection`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Array|Function|string} path The path of the method to invoke or\\n     *  the function invoked per iteration.\\n     * @param {...*} [args] The arguments to invoke each method with.\\n     * @returns {Array} Returns the array of results.\\n     * @example\\n     *\\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\\n     * // => [[1, 5, 7], [1, 2, 3]]\\n     *\\n     * _.invokeMap([123, 456], String.prototype.split, '');\\n     * // => [['1', '2', '3'], ['4', '5', '6']]\\n     */\\n    var invokeMap = baseRest(function(collection, path, args) {\\n      var index = -1,\\n          isFunc = typeof path == 'function',\\n          result = isArrayLike(collection) ? Array(collection.length) : [];\\n\\n      baseEach(collection, function(value) {\\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\\n      });\\n      return result;\\n    });\\n\\n    /**\\n     * Creates an object composed of keys generated from the results of running\\n     * each element of `collection` thru `iteratee`. The corresponding value of\\n     * each key is the last element responsible for generating the key. The\\n     * iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\\n     * @returns {Object} Returns the composed aggregate object.\\n     * @example\\n     *\\n     * var array = [\\n     *   { 'dir': 'left', 'code': 97 },\\n     *   { 'dir': 'right', 'code': 100 }\\n     * ];\\n     *\\n     * _.keyBy(array, function(o) {\\n     *   return String.fromCharCode(o.code);\\n     * });\\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\\n     *\\n     * _.keyBy(array, 'dir');\\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\\n     */\\n    var keyBy = createAggregator(function(result, value, key) {\\n      baseAssignValue(result, key, value);\\n    });\\n\\n    /**\\n     * Creates an array of values by running each element in `collection` thru\\n     * `iteratee`. The iteratee is invoked with three arguments:\\n     * (value, index|key, collection).\\n     *\\n     * Many lodash methods are guarded to work as iteratees for methods like\\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\\n     *\\n     * The guarded methods are:\\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the new mapped array.\\n     * @example\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * _.map([4, 8], square);\\n     * // => [16, 64]\\n     *\\n     * _.map({ 'a': 4, 'b': 8 }, square);\\n     * // => [16, 64] (iteration order is not guaranteed)\\n     *\\n     * var users = [\\n     *   { 'user': 'barney' },\\n     *   { 'user': 'fred' }\\n     * ];\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.map(users, 'user');\\n     * // => ['barney', 'fred']\\n     */\\n    function map(collection, iteratee) {\\n      var func = isArray(collection) ? arrayMap : baseMap;\\n      return func(collection, getIteratee(iteratee, 3));\\n    }\\n\\n    /**\\n     * This method is like `_.sortBy` except that it allows specifying the sort\\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\\n     * are sorted in ascending order. Otherwise, specify an order of \\\"desc\\\" for\\n     * descending or \\\"asc\\\" for ascending sort order of corresponding values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\\n     *  The iteratees to sort by.\\n     * @param {string[]} [orders] The sort orders of `iteratees`.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\\n     * @returns {Array} Returns the new sorted array.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'fred',   'age': 48 },\\n     *   { 'user': 'barney', 'age': 34 },\\n     *   { 'user': 'fred',   'age': 40 },\\n     *   { 'user': 'barney', 'age': 36 }\\n     * ];\\n     *\\n     * // Sort by `user` in ascending order and by `age` in descending order.\\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\\n     */\\n    function orderBy(collection, iteratees, orders, guard) {\\n      if (collection == null) {\\n        return [];\\n      }\\n      if (!isArray(iteratees)) {\\n        iteratees = iteratees == null ? [] : [iteratees];\\n      }\\n      orders = guard ? undefined : orders;\\n      if (!isArray(orders)) {\\n        orders = orders == null ? [] : [orders];\\n      }\\n      return baseOrderBy(collection, iteratees, orders);\\n    }\\n\\n    /**\\n     * Creates an array of elements split into two groups, the first of which\\n     * contains elements `predicate` returns truthy for, the second of which\\n     * contains elements `predicate` returns falsey for. The predicate is\\n     * invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the array of grouped elements.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'age': 36, 'active': false },\\n     *   { 'user': 'fred',    'age': 40, 'active': true },\\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\\n     * ];\\n     *\\n     * _.partition(users, function(o) { return o.active; });\\n     * // => objects for [['fred'], ['barney', 'pebbles']]\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.partition(users, { 'age': 1, 'active': false });\\n     * // => objects for [['pebbles'], ['barney', 'fred']]\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.partition(users, ['active', false]);\\n     * // => objects for [['barney', 'pebbles'], ['fred']]\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.partition(users, 'active');\\n     * // => objects for [['fred'], ['barney', 'pebbles']]\\n     */\\n    var partition = createAggregator(function(result, value, key) {\\n      result[key ? 0 : 1].push(value);\\n    }, function() { return [[], []]; });\\n\\n    /**\\n     * Reduces `collection` to a value which is the accumulated result of running\\n     * each element in `collection` thru `iteratee`, where each successive\\n     * invocation is supplied the return value of the previous. If `accumulator`\\n     * is not given, the first element of `collection` is used as the initial\\n     * value. The iteratee is invoked with four arguments:\\n     * (accumulator, value, index|key, collection).\\n     *\\n     * Many lodash methods are guarded to work as iteratees for methods like\\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\\n     *\\n     * The guarded methods are:\\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\\n     * and `sortBy`\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [accumulator] The initial value.\\n     * @returns {*} Returns the accumulated value.\\n     * @see _.reduceRight\\n     * @example\\n     *\\n     * _.reduce([1, 2], function(sum, n) {\\n     *   return sum + n;\\n     * }, 0);\\n     * // => 3\\n     *\\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\\n     *   (result[value] || (result[value] = [])).push(key);\\n     *   return result;\\n     * }, {});\\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\\n     */\\n    function reduce(collection, iteratee, accumulator) {\\n      var func = isArray(collection) ? arrayReduce : baseReduce,\\n          initAccum = arguments.length < 3;\\n\\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\\n    }\\n\\n    /**\\n     * This method is like `_.reduce` except that it iterates over elements of\\n     * `collection` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [accumulator] The initial value.\\n     * @returns {*} Returns the accumulated value.\\n     * @see _.reduce\\n     * @example\\n     *\\n     * var array = [[0, 1], [2, 3], [4, 5]];\\n     *\\n     * _.reduceRight(array, function(flattened, other) {\\n     *   return flattened.concat(other);\\n     * }, []);\\n     * // => [4, 5, 2, 3, 0, 1]\\n     */\\n    function reduceRight(collection, iteratee, accumulator) {\\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\\n          initAccum = arguments.length < 3;\\n\\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\\n    }\\n\\n    /**\\n     * The opposite of `_.filter`; this method returns the elements of `collection`\\n     * that `predicate` does **not** return truthy for.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the new filtered array.\\n     * @see _.filter\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': false },\\n     *   { 'user': 'fred',   'age': 40, 'active': true }\\n     * ];\\n     *\\n     * _.reject(users, function(o) { return !o.active; });\\n     * // => objects for ['fred']\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.reject(users, { 'age': 40, 'active': true });\\n     * // => objects for ['barney']\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.reject(users, ['active', false]);\\n     * // => objects for ['fred']\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.reject(users, 'active');\\n     * // => objects for ['barney']\\n     */\\n    function reject(collection, predicate) {\\n      var func = isArray(collection) ? arrayFilter : baseFilter;\\n      return func(collection, negate(getIteratee(predicate, 3)));\\n    }\\n\\n    /**\\n     * Gets a random element from `collection`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to sample.\\n     * @returns {*} Returns the random element.\\n     * @example\\n     *\\n     * _.sample([1, 2, 3, 4]);\\n     * // => 2\\n     */\\n    function sample(collection) {\\n      var func = isArray(collection) ? arraySample : baseSample;\\n      return func(collection);\\n    }\\n\\n    /**\\n     * Gets `n` random elements at unique keys from `collection` up to the\\n     * size of `collection`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to sample.\\n     * @param {number} [n=1] The number of elements to sample.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Array} Returns the random elements.\\n     * @example\\n     *\\n     * _.sampleSize([1, 2, 3], 2);\\n     * // => [3, 1]\\n     *\\n     * _.sampleSize([1, 2, 3], 4);\\n     * // => [2, 3, 1]\\n     */\\n    function sampleSize(collection, n, guard) {\\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\\n        n = 1;\\n      } else {\\n        n = toInteger(n);\\n      }\\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\\n      return func(collection, n);\\n    }\\n\\n    /**\\n     * Creates an array of shuffled values, using a version of the\\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to shuffle.\\n     * @returns {Array} Returns the new shuffled array.\\n     * @example\\n     *\\n     * _.shuffle([1, 2, 3, 4]);\\n     * // => [4, 1, 3, 2]\\n     */\\n    function shuffle(collection) {\\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\\n      return func(collection);\\n    }\\n\\n    /**\\n     * Gets the size of `collection` by returning its length for array-like\\n     * values or the number of own enumerable string keyed properties for objects.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to inspect.\\n     * @returns {number} Returns the collection size.\\n     * @example\\n     *\\n     * _.size([1, 2, 3]);\\n     * // => 3\\n     *\\n     * _.size({ 'a': 1, 'b': 2 });\\n     * // => 2\\n     *\\n     * _.size('pebbles');\\n     * // => 7\\n     */\\n    function size(collection) {\\n      if (collection == null) {\\n        return 0;\\n      }\\n      if (isArrayLike(collection)) {\\n        return isString(collection) ? stringSize(collection) : collection.length;\\n      }\\n      var tag = getTag(collection);\\n      if (tag == mapTag || tag == setTag) {\\n        return collection.size;\\n      }\\n      return baseKeys(collection).length;\\n    }\\n\\n    /**\\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\\n     * invoked with three arguments: (value, index|key, collection).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.some([null, 0, 'yes', false], Boolean);\\n     * // => true\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'active': true },\\n     *   { 'user': 'fred',   'active': false }\\n     * ];\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.some(users, { 'user': 'barney', 'active': false });\\n     * // => false\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.some(users, ['active', false]);\\n     * // => true\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.some(users, 'active');\\n     * // => true\\n     */\\n    function some(collection, predicate, guard) {\\n      var func = isArray(collection) ? arraySome : baseSome;\\n      if (guard && isIterateeCall(collection, predicate, guard)) {\\n        predicate = undefined;\\n      }\\n      return func(collection, getIteratee(predicate, 3));\\n    }\\n\\n    /**\\n     * Creates an array of elements, sorted in ascending order by the results of\\n     * running each element in a collection thru each iteratee. This method\\n     * performs a stable sort, that is, it preserves the original sort order of\\n     * equal elements. The iteratees are invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\\n     *  The iteratees to sort by.\\n     * @returns {Array} Returns the new sorted array.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'fred',   'age': 48 },\\n     *   { 'user': 'barney', 'age': 36 },\\n     *   { 'user': 'fred',   'age': 40 },\\n     *   { 'user': 'barney', 'age': 34 }\\n     * ];\\n     *\\n     * _.sortBy(users, [function(o) { return o.user; }]);\\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\\n     *\\n     * _.sortBy(users, ['user', 'age']);\\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\\n     */\\n    var sortBy = baseRest(function(collection, iteratees) {\\n      if (collection == null) {\\n        return [];\\n      }\\n      var length = iteratees.length;\\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\\n        iteratees = [];\\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\\n        iteratees = [iteratees[0]];\\n      }\\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\\n    });\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Gets the timestamp of the number of milliseconds that have elapsed since\\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.4.0\\n     * @category Date\\n     * @returns {number} Returns the timestamp.\\n     * @example\\n     *\\n     * _.defer(function(stamp) {\\n     *   console.log(_.now() - stamp);\\n     * }, _.now());\\n     * // => Logs the number of milliseconds it took for the deferred invocation.\\n     */\\n    var now = ctxNow || function() {\\n      return root.Date.now();\\n    };\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * The opposite of `_.before`; this method creates a function that invokes\\n     * `func` once it's called `n` or more times.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {number} n The number of calls before `func` is invoked.\\n     * @param {Function} func The function to restrict.\\n     * @returns {Function} Returns the new restricted function.\\n     * @example\\n     *\\n     * var saves = ['profile', 'settings'];\\n     *\\n     * var done = _.after(saves.length, function() {\\n     *   console.log('done saving!');\\n     * });\\n     *\\n     * _.forEach(saves, function(type) {\\n     *   asyncSave({ 'type': type, 'complete': done });\\n     * });\\n     * // => Logs 'done saving!' after the two async saves have completed.\\n     */\\n    function after(n, func) {\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      n = toInteger(n);\\n      return function() {\\n        if (--n < 1) {\\n          return func.apply(this, arguments);\\n        }\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func`, with up to `n` arguments,\\n     * ignoring any additional arguments.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Function\\n     * @param {Function} func The function to cap arguments for.\\n     * @param {number} [n=func.length] The arity cap.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Function} Returns the new capped function.\\n     * @example\\n     *\\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\\n     * // => [6, 8, 10]\\n     */\\n    function ary(func, n, guard) {\\n      n = guard ? undefined : n;\\n      n = (func && n == null) ? func.length : n;\\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func`, with the `this` binding and arguments\\n     * of the created function, while it's called less than `n` times. Subsequent\\n     * calls to the created function return the result of the last `func` invocation.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Function\\n     * @param {number} n The number of calls at which `func` is no longer invoked.\\n     * @param {Function} func The function to restrict.\\n     * @returns {Function} Returns the new restricted function.\\n     * @example\\n     *\\n     * jQuery(element).on('click', _.before(5, addContactToList));\\n     * // => Allows adding up to 4 contacts to the list.\\n     */\\n    function before(n, func) {\\n      var result;\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      n = toInteger(n);\\n      return function() {\\n        if (--n > 0) {\\n          result = func.apply(this, arguments);\\n        }\\n        if (n <= 1) {\\n          func = undefined;\\n        }\\n        return result;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\\n     * and `partials` prepended to the arguments it receives.\\n     *\\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\\n     * may be used as a placeholder for partially applied arguments.\\n     *\\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \\\"length\\\"\\n     * property of bound functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {Function} func The function to bind.\\n     * @param {*} thisArg The `this` binding of `func`.\\n     * @param {...*} [partials] The arguments to be partially applied.\\n     * @returns {Function} Returns the new bound function.\\n     * @example\\n     *\\n     * function greet(greeting, punctuation) {\\n     *   return greeting + ' ' + this.user + punctuation;\\n     * }\\n     *\\n     * var object = { 'user': 'fred' };\\n     *\\n     * var bound = _.bind(greet, object, 'hi');\\n     * bound('!');\\n     * // => 'hi fred!'\\n     *\\n     * // Bound with placeholders.\\n     * var bound = _.bind(greet, object, _, '!');\\n     * bound('hi');\\n     * // => 'hi fred!'\\n     */\\n    var bind = baseRest(function(func, thisArg, partials) {\\n      var bitmask = WRAP_BIND_FLAG;\\n      if (partials.length) {\\n        var holders = replaceHolders(partials, getHolder(bind));\\n        bitmask |= WRAP_PARTIAL_FLAG;\\n      }\\n      return createWrap(func, bitmask, thisArg, partials, holders);\\n    });\\n\\n    /**\\n     * Creates a function that invokes the method at `object[key]` with `partials`\\n     * prepended to the arguments it receives.\\n     *\\n     * This method differs from `_.bind` by allowing bound functions to reference\\n     * methods that may be redefined or don't yet exist. See\\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\\n     * for more details.\\n     *\\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\\n     * builds, may be used as a placeholder for partially applied arguments.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.10.0\\n     * @category Function\\n     * @param {Object} object The object to invoke the method on.\\n     * @param {string} key The key of the method.\\n     * @param {...*} [partials] The arguments to be partially applied.\\n     * @returns {Function} Returns the new bound function.\\n     * @example\\n     *\\n     * var object = {\\n     *   'user': 'fred',\\n     *   'greet': function(greeting, punctuation) {\\n     *     return greeting + ' ' + this.user + punctuation;\\n     *   }\\n     * };\\n     *\\n     * var bound = _.bindKey(object, 'greet', 'hi');\\n     * bound('!');\\n     * // => 'hi fred!'\\n     *\\n     * object.greet = function(greeting, punctuation) {\\n     *   return greeting + 'ya ' + this.user + punctuation;\\n     * };\\n     *\\n     * bound('!');\\n     * // => 'hiya fred!'\\n     *\\n     * // Bound with placeholders.\\n     * var bound = _.bindKey(object, 'greet', _, '!');\\n     * bound('hi');\\n     * // => 'hiya fred!'\\n     */\\n    var bindKey = baseRest(function(object, key, partials) {\\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\\n      if (partials.length) {\\n        var holders = replaceHolders(partials, getHolder(bindKey));\\n        bitmask |= WRAP_PARTIAL_FLAG;\\n      }\\n      return createWrap(key, bitmask, object, partials, holders);\\n    });\\n\\n    /**\\n     * Creates a function that accepts arguments of `func` and either invokes\\n     * `func` returning its result, if at least `arity` number of arguments have\\n     * been provided, or returns a function that accepts the remaining `func`\\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\\n     * is not sufficient.\\n     *\\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\\n     * may be used as a placeholder for provided arguments.\\n     *\\n     * **Note:** This method doesn't set the \\\"length\\\" property of curried functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Function\\n     * @param {Function} func The function to curry.\\n     * @param {number} [arity=func.length] The arity of `func`.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Function} Returns the new curried function.\\n     * @example\\n     *\\n     * var abc = function(a, b, c) {\\n     *   return [a, b, c];\\n     * };\\n     *\\n     * var curried = _.curry(abc);\\n     *\\n     * curried(1)(2)(3);\\n     * // => [1, 2, 3]\\n     *\\n     * curried(1, 2)(3);\\n     * // => [1, 2, 3]\\n     *\\n     * curried(1, 2, 3);\\n     * // => [1, 2, 3]\\n     *\\n     * // Curried with placeholders.\\n     * curried(1)(_, 3)(2);\\n     * // => [1, 2, 3]\\n     */\\n    function curry(func, arity, guard) {\\n      arity = guard ? undefined : arity;\\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\\n      result.placeholder = curry.placeholder;\\n      return result;\\n    }\\n\\n    /**\\n     * This method is like `_.curry` except that arguments are applied to `func`\\n     * in the manner of `_.partialRight` instead of `_.partial`.\\n     *\\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\\n     * builds, may be used as a placeholder for provided arguments.\\n     *\\n     * **Note:** This method doesn't set the \\\"length\\\" property of curried functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Function\\n     * @param {Function} func The function to curry.\\n     * @param {number} [arity=func.length] The arity of `func`.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Function} Returns the new curried function.\\n     * @example\\n     *\\n     * var abc = function(a, b, c) {\\n     *   return [a, b, c];\\n     * };\\n     *\\n     * var curried = _.curryRight(abc);\\n     *\\n     * curried(3)(2)(1);\\n     * // => [1, 2, 3]\\n     *\\n     * curried(2, 3)(1);\\n     * // => [1, 2, 3]\\n     *\\n     * curried(1, 2, 3);\\n     * // => [1, 2, 3]\\n     *\\n     * // Curried with placeholders.\\n     * curried(3)(1, _)(2);\\n     * // => [1, 2, 3]\\n     */\\n    function curryRight(func, arity, guard) {\\n      arity = guard ? undefined : arity;\\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\\n      result.placeholder = curryRight.placeholder;\\n      return result;\\n    }\\n\\n    /**\\n     * Creates a debounced function that delays invoking `func` until after `wait`\\n     * milliseconds have elapsed since the last time the debounced function was\\n     * invoked. The debounced function comes with a `cancel` method to cancel\\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\\n     * Provide `options` to indicate whether `func` should be invoked on the\\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\\n     * with the last arguments provided to the debounced function. Subsequent\\n     * calls to the debounced function return the result of the last `func`\\n     * invocation.\\n     *\\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\\n     * invoked on the trailing edge of the timeout only if the debounced function\\n     * is invoked more than once during the `wait` timeout.\\n     *\\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\\n     *\\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\\n     * for details over the differences between `_.debounce` and `_.throttle`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {Function} func The function to debounce.\\n     * @param {number} [wait=0] The number of milliseconds to delay.\\n     * @param {Object} [options={}] The options object.\\n     * @param {boolean} [options.leading=false]\\n     *  Specify invoking on the leading edge of the timeout.\\n     * @param {number} [options.maxWait]\\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\\n     * @param {boolean} [options.trailing=true]\\n     *  Specify invoking on the trailing edge of the timeout.\\n     * @returns {Function} Returns the new debounced function.\\n     * @example\\n     *\\n     * // Avoid costly calculations while the window size is in flux.\\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\\n     *\\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\\n     *   'leading': true,\\n     *   'trailing': false\\n     * }));\\n     *\\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\\n     * var source = new EventSource('/stream');\\n     * jQuery(source).on('message', debounced);\\n     *\\n     * // Cancel the trailing debounced invocation.\\n     * jQuery(window).on('popstate', debounced.cancel);\\n     */\\n    function debounce(func, wait, options) {\\n      var lastArgs,\\n          lastThis,\\n          maxWait,\\n          result,\\n          timerId,\\n          lastCallTime,\\n          lastInvokeTime = 0,\\n          leading = false,\\n          maxing = false,\\n          trailing = true;\\n\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      wait = toNumber(wait) || 0;\\n      if (isObject(options)) {\\n        leading = !!options.leading;\\n        maxing = 'maxWait' in options;\\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\\n      }\\n\\n      function invokeFunc(time) {\\n        var args = lastArgs,\\n            thisArg = lastThis;\\n\\n        lastArgs = lastThis = undefined;\\n        lastInvokeTime = time;\\n        result = func.apply(thisArg, args);\\n        return result;\\n      }\\n\\n      function leadingEdge(time) {\\n        // Reset any `maxWait` timer.\\n        lastInvokeTime = time;\\n        // Start the timer for the trailing edge.\\n        timerId = setTimeout(timerExpired, wait);\\n        // Invoke the leading edge.\\n        return leading ? invokeFunc(time) : result;\\n      }\\n\\n      function remainingWait(time) {\\n        var timeSinceLastCall = time - lastCallTime,\\n            timeSinceLastInvoke = time - lastInvokeTime,\\n            result = wait - timeSinceLastCall;\\n\\n        return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\\n      }\\n\\n      function shouldInvoke(time) {\\n        var timeSinceLastCall = time - lastCallTime,\\n            timeSinceLastInvoke = time - lastInvokeTime;\\n\\n        // Either this is the first call, activity has stopped and we're at the\\n        // trailing edge, the system time has gone backwards and we're treating\\n        // it as the trailing edge, or we've hit the `maxWait` limit.\\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\\n      }\\n\\n      function timerExpired() {\\n        var time = now();\\n        if (shouldInvoke(time)) {\\n          return trailingEdge(time);\\n        }\\n        // Restart the timer.\\n        timerId = setTimeout(timerExpired, remainingWait(time));\\n      }\\n\\n      function trailingEdge(time) {\\n        timerId = undefined;\\n\\n        // Only invoke if we have `lastArgs` which means `func` has been\\n        // debounced at least once.\\n        if (trailing && lastArgs) {\\n          return invokeFunc(time);\\n        }\\n        lastArgs = lastThis = undefined;\\n        return result;\\n      }\\n\\n      function cancel() {\\n        if (timerId !== undefined) {\\n          clearTimeout(timerId);\\n        }\\n        lastInvokeTime = 0;\\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\\n      }\\n\\n      function flush() {\\n        return timerId === undefined ? result : trailingEdge(now());\\n      }\\n\\n      function debounced() {\\n        var time = now(),\\n            isInvoking = shouldInvoke(time);\\n\\n        lastArgs = arguments;\\n        lastThis = this;\\n        lastCallTime = time;\\n\\n        if (isInvoking) {\\n          if (timerId === undefined) {\\n            return leadingEdge(lastCallTime);\\n          }\\n          if (maxing) {\\n            // Handle invocations in a tight loop.\\n            timerId = setTimeout(timerExpired, wait);\\n            return invokeFunc(lastCallTime);\\n          }\\n        }\\n        if (timerId === undefined) {\\n          timerId = setTimeout(timerExpired, wait);\\n        }\\n        return result;\\n      }\\n      debounced.cancel = cancel;\\n      debounced.flush = flush;\\n      return debounced;\\n    }\\n\\n    /**\\n     * Defers invoking the `func` until the current call stack has cleared. Any\\n     * additional arguments are provided to `func` when it's invoked.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {Function} func The function to defer.\\n     * @param {...*} [args] The arguments to invoke `func` with.\\n     * @returns {number} Returns the timer id.\\n     * @example\\n     *\\n     * _.defer(function(text) {\\n     *   console.log(text);\\n     * }, 'deferred');\\n     * // => Logs 'deferred' after one millisecond.\\n     */\\n    var defer = baseRest(function(func, args) {\\n      return baseDelay(func, 1, args);\\n    });\\n\\n    /**\\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\\n     * provided to `func` when it's invoked.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {Function} func The function to delay.\\n     * @param {number} wait The number of milliseconds to delay invocation.\\n     * @param {...*} [args] The arguments to invoke `func` with.\\n     * @returns {number} Returns the timer id.\\n     * @example\\n     *\\n     * _.delay(function(text) {\\n     *   console.log(text);\\n     * }, 1000, 'later');\\n     * // => Logs 'later' after one second.\\n     */\\n    var delay = baseRest(function(func, wait, args) {\\n      return baseDelay(func, toNumber(wait) || 0, args);\\n    });\\n\\n    /**\\n     * Creates a function that invokes `func` with arguments reversed.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Function\\n     * @param {Function} func The function to flip arguments for.\\n     * @returns {Function} Returns the new flipped function.\\n     * @example\\n     *\\n     * var flipped = _.flip(function() {\\n     *   return _.toArray(arguments);\\n     * });\\n     *\\n     * flipped('a', 'b', 'c', 'd');\\n     * // => ['d', 'c', 'b', 'a']\\n     */\\n    function flip(func) {\\n      return createWrap(func, WRAP_FLIP_FLAG);\\n    }\\n\\n    /**\\n     * Creates a function that memoizes the result of `func`. If `resolver` is\\n     * provided, it determines the cache key for storing the result based on the\\n     * arguments provided to the memoized function. By default, the first argument\\n     * provided to the memoized function is used as the map cache key. The `func`\\n     * is invoked with the `this` binding of the memoized function.\\n     *\\n     * **Note:** The cache is exposed as the `cache` property on the memoized\\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\\n     * constructor with one whose instances implement the\\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {Function} func The function to have its output memoized.\\n     * @param {Function} [resolver] The function to resolve the cache key.\\n     * @returns {Function} Returns the new memoized function.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': 2 };\\n     * var other = { 'c': 3, 'd': 4 };\\n     *\\n     * var values = _.memoize(_.values);\\n     * values(object);\\n     * // => [1, 2]\\n     *\\n     * values(other);\\n     * // => [3, 4]\\n     *\\n     * object.a = 2;\\n     * values(object);\\n     * // => [1, 2]\\n     *\\n     * // Modify the result cache.\\n     * values.cache.set(object, ['a', 'b']);\\n     * values(object);\\n     * // => ['a', 'b']\\n     *\\n     * // Replace `_.memoize.Cache`.\\n     * _.memoize.Cache = WeakMap;\\n     */\\n    function memoize(func, resolver) {\\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      var memoized = function() {\\n        var args = arguments,\\n            key = resolver ? resolver.apply(this, args) : args[0],\\n            cache = memoized.cache;\\n\\n        if (cache.has(key)) {\\n          return cache.get(key);\\n        }\\n        var result = func.apply(this, args);\\n        memoized.cache = cache.set(key, result) || cache;\\n        return result;\\n      };\\n      memoized.cache = new (memoize.Cache || MapCache);\\n      return memoized;\\n    }\\n\\n    // Expose `MapCache`.\\n    memoize.Cache = MapCache;\\n\\n    /**\\n     * Creates a function that negates the result of the predicate `func`. The\\n     * `func` predicate is invoked with the `this` binding and arguments of the\\n     * created function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Function\\n     * @param {Function} predicate The predicate to negate.\\n     * @returns {Function} Returns the new negated function.\\n     * @example\\n     *\\n     * function isEven(n) {\\n     *   return n % 2 == 0;\\n     * }\\n     *\\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\\n     * // => [1, 3, 5]\\n     */\\n    function negate(predicate) {\\n      if (typeof predicate != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      return function() {\\n        var args = arguments;\\n        switch (args.length) {\\n          case 0: return !predicate.call(this);\\n          case 1: return !predicate.call(this, args[0]);\\n          case 2: return !predicate.call(this, args[0], args[1]);\\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\\n        }\\n        return !predicate.apply(this, args);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\\n     * to the function return the value of the first invocation. The `func` is\\n     * invoked with the `this` binding and arguments of the created function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {Function} func The function to restrict.\\n     * @returns {Function} Returns the new restricted function.\\n     * @example\\n     *\\n     * var initialize = _.once(createApplication);\\n     * initialize();\\n     * initialize();\\n     * // => `createApplication` is invoked once\\n     */\\n    function once(func) {\\n      return before(2, func);\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func` with its arguments transformed.\\n     *\\n     * @static\\n     * @since 4.0.0\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to wrap.\\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\\n     *  The argument transforms.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * function doubled(n) {\\n     *   return n * 2;\\n     * }\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * var func = _.overArgs(function(x, y) {\\n     *   return [x, y];\\n     * }, [square, doubled]);\\n     *\\n     * func(9, 3);\\n     * // => [81, 6]\\n     *\\n     * func(10, 5);\\n     * // => [100, 10]\\n     */\\n    var overArgs = castRest(function(func, transforms) {\\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\\n\\n      var funcsLength = transforms.length;\\n      return baseRest(function(args) {\\n        var index = -1,\\n            length = nativeMin(args.length, funcsLength);\\n\\n        while (++index < length) {\\n          args[index] = transforms[index].call(this, args[index]);\\n        }\\n        return apply(func, this, args);\\n      });\\n    });\\n\\n    /**\\n     * Creates a function that invokes `func` with `partials` prepended to the\\n     * arguments it receives. This method is like `_.bind` except it does **not**\\n     * alter the `this` binding.\\n     *\\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\\n     * builds, may be used as a placeholder for partially applied arguments.\\n     *\\n     * **Note:** This method doesn't set the \\\"length\\\" property of partially\\n     * applied functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.2.0\\n     * @category Function\\n     * @param {Function} func The function to partially apply arguments to.\\n     * @param {...*} [partials] The arguments to be partially applied.\\n     * @returns {Function} Returns the new partially applied function.\\n     * @example\\n     *\\n     * function greet(greeting, name) {\\n     *   return greeting + ' ' + name;\\n     * }\\n     *\\n     * var sayHelloTo = _.partial(greet, 'hello');\\n     * sayHelloTo('fred');\\n     * // => 'hello fred'\\n     *\\n     * // Partially applied with placeholders.\\n     * var greetFred = _.partial(greet, _, 'fred');\\n     * greetFred('hi');\\n     * // => 'hi fred'\\n     */\\n    var partial = baseRest(function(func, partials) {\\n      var holders = replaceHolders(partials, getHolder(partial));\\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\\n    });\\n\\n    /**\\n     * This method is like `_.partial` except that partially applied arguments\\n     * are appended to the arguments it receives.\\n     *\\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\\n     * builds, may be used as a placeholder for partially applied arguments.\\n     *\\n     * **Note:** This method doesn't set the \\\"length\\\" property of partially\\n     * applied functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.0.0\\n     * @category Function\\n     * @param {Function} func The function to partially apply arguments to.\\n     * @param {...*} [partials] The arguments to be partially applied.\\n     * @returns {Function} Returns the new partially applied function.\\n     * @example\\n     *\\n     * function greet(greeting, name) {\\n     *   return greeting + ' ' + name;\\n     * }\\n     *\\n     * var greetFred = _.partialRight(greet, 'fred');\\n     * greetFred('hi');\\n     * // => 'hi fred'\\n     *\\n     * // Partially applied with placeholders.\\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\\n     * sayHelloTo('fred');\\n     * // => 'hello fred'\\n     */\\n    var partialRight = baseRest(function(func, partials) {\\n      var holders = replaceHolders(partials, getHolder(partialRight));\\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\\n    });\\n\\n    /**\\n     * Creates a function that invokes `func` with arguments arranged according\\n     * to the specified `indexes` where the argument value at the first index is\\n     * provided as the first argument, the argument value at the second index is\\n     * provided as the second argument, and so on.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Function\\n     * @param {Function} func The function to rearrange arguments for.\\n     * @param {...(number|number[])} indexes The arranged argument indexes.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var rearged = _.rearg(function(a, b, c) {\\n     *   return [a, b, c];\\n     * }, [2, 0, 1]);\\n     *\\n     * rearged('b', 'c', 'a')\\n     * // => ['a', 'b', 'c']\\n     */\\n    var rearg = flatRest(function(func, indexes) {\\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\\n    });\\n\\n    /**\\n     * Creates a function that invokes `func` with the `this` binding of the\\n     * created function and arguments from `start` and beyond provided as\\n     * an array.\\n     *\\n     * **Note:** This method is based on the\\n     * [rest parameter](https://mdn.io/rest_parameters).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Function\\n     * @param {Function} func The function to apply a rest parameter to.\\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var say = _.rest(function(what, names) {\\n     *   return what + ' ' + _.initial(names).join(', ') +\\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\\n     * });\\n     *\\n     * say('hello', 'fred', 'barney', 'pebbles');\\n     * // => 'hello fred, barney, & pebbles'\\n     */\\n    function rest(func, start) {\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      start = start === undefined ? start : toInteger(start);\\n      return baseRest(func, start);\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func` with the `this` binding of the\\n     * create function and an array of arguments much like\\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\\n     *\\n     * **Note:** This method is based on the\\n     * [spread operator](https://mdn.io/spread_operator).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.2.0\\n     * @category Function\\n     * @param {Function} func The function to spread arguments over.\\n     * @param {number} [start=0] The start position of the spread.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var say = _.spread(function(who, what) {\\n     *   return who + ' says ' + what;\\n     * });\\n     *\\n     * say(['fred', 'hello']);\\n     * // => 'fred says hello'\\n     *\\n     * var numbers = Promise.all([\\n     *   Promise.resolve(40),\\n     *   Promise.resolve(36)\\n     * ]);\\n     *\\n     * numbers.then(_.spread(function(x, y) {\\n     *   return x + y;\\n     * }));\\n     * // => a Promise of 76\\n     */\\n    function spread(func, start) {\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      start = start === undefined ? 0 : nativeMax(toInteger(start), 0);\\n      return baseRest(function(args) {\\n        var array = args[start],\\n            otherArgs = castSlice(args, 0, start);\\n\\n        if (array) {\\n          arrayPush(otherArgs, array);\\n        }\\n        return apply(func, this, otherArgs);\\n      });\\n    }\\n\\n    /**\\n     * Creates a throttled function that only invokes `func` at most once per\\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\\n     * method to cancel delayed `func` invocations and a `flush` method to\\n     * immediately invoke them. Provide `options` to indicate whether `func`\\n     * should be invoked on the leading and/or trailing edge of the `wait`\\n     * timeout. The `func` is invoked with the last arguments provided to the\\n     * throttled function. Subsequent calls to the throttled function return the\\n     * result of the last `func` invocation.\\n     *\\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\\n     * invoked on the trailing edge of the timeout only if the throttled function\\n     * is invoked more than once during the `wait` timeout.\\n     *\\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\\n     *\\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\\n     * for details over the differences between `_.throttle` and `_.debounce`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {Function} func The function to throttle.\\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\\n     * @param {Object} [options={}] The options object.\\n     * @param {boolean} [options.leading=true]\\n     *  Specify invoking on the leading edge of the timeout.\\n     * @param {boolean} [options.trailing=true]\\n     *  Specify invoking on the trailing edge of the timeout.\\n     * @returns {Function} Returns the new throttled function.\\n     * @example\\n     *\\n     * // Avoid excessively updating the position while scrolling.\\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\\n     *\\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\\n     * jQuery(element).on('click', throttled);\\n     *\\n     * // Cancel the trailing throttled invocation.\\n     * jQuery(window).on('popstate', throttled.cancel);\\n     */\\n    function throttle(func, wait, options) {\\n      var leading = true,\\n          trailing = true;\\n\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      if (isObject(options)) {\\n        leading = 'leading' in options ? !!options.leading : leading;\\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\\n      }\\n      return debounce(func, wait, {\\n        'leading': leading,\\n        'maxWait': wait,\\n        'trailing': trailing\\n      });\\n    }\\n\\n    /**\\n     * Creates a function that accepts up to one argument, ignoring any\\n     * additional arguments.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Function\\n     * @param {Function} func The function to cap arguments for.\\n     * @returns {Function} Returns the new capped function.\\n     * @example\\n     *\\n     * _.map(['6', '8', '10'], _.unary(parseInt));\\n     * // => [6, 8, 10]\\n     */\\n    function unary(func) {\\n      return ary(func, 1);\\n    }\\n\\n    /**\\n     * Creates a function that provides `value` to `wrapper` as its first\\n     * argument. Any additional arguments provided to the function are appended\\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\\n     * binding of the created function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {*} value The value to wrap.\\n     * @param {Function} [wrapper=identity] The wrapper function.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var p = _.wrap(_.escape, function(func, text) {\\n     *   return '<p>' + func(text) + '</p>';\\n     * });\\n     *\\n     * p('fred, barney, & pebbles');\\n     * // => '<p>fred, barney, &amp; pebbles</p>'\\n     */\\n    function wrap(value, wrapper) {\\n      return partial(castFunction(wrapper), value);\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Casts `value` as an array if it's not one.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.4.0\\n     * @category Lang\\n     * @param {*} value The value to inspect.\\n     * @returns {Array} Returns the cast array.\\n     * @example\\n     *\\n     * _.castArray(1);\\n     * // => [1]\\n     *\\n     * _.castArray({ 'a': 1 });\\n     * // => [{ 'a': 1 }]\\n     *\\n     * _.castArray('abc');\\n     * // => ['abc']\\n     *\\n     * _.castArray(null);\\n     * // => [null]\\n     *\\n     * _.castArray(undefined);\\n     * // => [undefined]\\n     *\\n     * _.castArray();\\n     * // => []\\n     *\\n     * var array = [1, 2, 3];\\n     * console.log(_.castArray(array) === array);\\n     * // => true\\n     */\\n    function castArray() {\\n      if (!arguments.length) {\\n        return [];\\n      }\\n      var value = arguments[0];\\n      return isArray(value) ? value : [value];\\n    }\\n\\n    /**\\n     * Creates a shallow clone of `value`.\\n     *\\n     * **Note:** This method is loosely based on the\\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\\n     * arrays. The own enumerable properties of `arguments` objects are cloned\\n     * as plain objects. An empty object is returned for uncloneable values such\\n     * as error objects, functions, DOM nodes, and WeakMaps.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to clone.\\n     * @returns {*} Returns the cloned value.\\n     * @see _.cloneDeep\\n     * @example\\n     *\\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\\n     *\\n     * var shallow = _.clone(objects);\\n     * console.log(shallow[0] === objects[0]);\\n     * // => true\\n     */\\n    function clone(value) {\\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\\n    }\\n\\n    /**\\n     * This method is like `_.clone` except that it accepts `customizer` which\\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\\n     * cloning is handled by the method instead. The `customizer` is invoked with\\n     * up to four arguments; (value [, index|key, object, stack]).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to clone.\\n     * @param {Function} [customizer] The function to customize cloning.\\n     * @returns {*} Returns the cloned value.\\n     * @see _.cloneDeepWith\\n     * @example\\n     *\\n     * function customizer(value) {\\n     *   if (_.isElement(value)) {\\n     *     return value.cloneNode(false);\\n     *   }\\n     * }\\n     *\\n     * var el = _.cloneWith(document.body, customizer);\\n     *\\n     * console.log(el === document.body);\\n     * // => false\\n     * console.log(el.nodeName);\\n     * // => 'BODY'\\n     * console.log(el.childNodes.length);\\n     * // => 0\\n     */\\n    function cloneWith(value, customizer) {\\n      customizer = typeof customizer == 'function' ? customizer : undefined;\\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\\n    }\\n\\n    /**\\n     * This method is like `_.clone` except that it recursively clones `value`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.0.0\\n     * @category Lang\\n     * @param {*} value The value to recursively clone.\\n     * @returns {*} Returns the deep cloned value.\\n     * @see _.clone\\n     * @example\\n     *\\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\\n     *\\n     * var deep = _.cloneDeep(objects);\\n     * console.log(deep[0] === objects[0]);\\n     * // => false\\n     */\\n    function cloneDeep(value) {\\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\\n    }\\n\\n    /**\\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to recursively clone.\\n     * @param {Function} [customizer] The function to customize cloning.\\n     * @returns {*} Returns the deep cloned value.\\n     * @see _.cloneWith\\n     * @example\\n     *\\n     * function customizer(value) {\\n     *   if (_.isElement(value)) {\\n     *     return value.cloneNode(true);\\n     *   }\\n     * }\\n     *\\n     * var el = _.cloneDeepWith(document.body, customizer);\\n     *\\n     * console.log(el === document.body);\\n     * // => false\\n     * console.log(el.nodeName);\\n     * // => 'BODY'\\n     * console.log(el.childNodes.length);\\n     * // => 20\\n     */\\n    function cloneDeepWith(value, customizer) {\\n      customizer = typeof customizer == 'function' ? customizer : undefined;\\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\\n    }\\n\\n    /**\\n     * Checks if `object` conforms to `source` by invoking the predicate\\n     * properties of `source` with the corresponding property values of `object`.\\n     *\\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\\n     * partially applied.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.14.0\\n     * @category Lang\\n     * @param {Object} object The object to inspect.\\n     * @param {Object} source The object of property predicates to conform to.\\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': 2 };\\n     *\\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\\n     * // => true\\n     *\\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\\n     * // => false\\n     */\\n    function conformsTo(object, source) {\\n      return source == null || baseConformsTo(object, source, keys(source));\\n    }\\n\\n    /**\\n     * Performs a\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * comparison between two values to determine if they are equivalent.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\\n     * @example\\n     *\\n     * var object = { 'a': 1 };\\n     * var other = { 'a': 1 };\\n     *\\n     * _.eq(object, object);\\n     * // => true\\n     *\\n     * _.eq(object, other);\\n     * // => false\\n     *\\n     * _.eq('a', 'a');\\n     * // => true\\n     *\\n     * _.eq('a', Object('a'));\\n     * // => false\\n     *\\n     * _.eq(NaN, NaN);\\n     * // => true\\n     */\\n    function eq(value, other) {\\n      return value === other || (value !== value && other !== other);\\n    }\\n\\n    /**\\n     * Checks if `value` is greater than `other`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.9.0\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\\n     *  else `false`.\\n     * @see _.lt\\n     * @example\\n     *\\n     * _.gt(3, 1);\\n     * // => true\\n     *\\n     * _.gt(3, 3);\\n     * // => false\\n     *\\n     * _.gt(1, 3);\\n     * // => false\\n     */\\n    var gt = createRelationalOperation(baseGt);\\n\\n    /**\\n     * Checks if `value` is greater than or equal to `other`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.9.0\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\\n     *  `other`, else `false`.\\n     * @see _.lte\\n     * @example\\n     *\\n     * _.gte(3, 1);\\n     * // => true\\n     *\\n     * _.gte(3, 3);\\n     * // => true\\n     *\\n     * _.gte(1, 3);\\n     * // => false\\n     */\\n    var gte = createRelationalOperation(function(value, other) {\\n      return value >= other;\\n    });\\n\\n    /**\\n     * Checks if `value` is likely an `arguments` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.isArguments(function() { return arguments; }());\\n     * // => true\\n     *\\n     * _.isArguments([1, 2, 3]);\\n     * // => false\\n     */\\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\\n        !propertyIsEnumerable.call(value, 'callee');\\n    };\\n\\n    /**\\n     * Checks if `value` is classified as an `Array` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\\n     * @example\\n     *\\n     * _.isArray([1, 2, 3]);\\n     * // => true\\n     *\\n     * _.isArray(document.body.children);\\n     * // => false\\n     *\\n     * _.isArray('abc');\\n     * // => false\\n     *\\n     * _.isArray(_.noop);\\n     * // => false\\n     */\\n    var isArray = Array.isArray;\\n\\n    /**\\n     * Checks if `value` is classified as an `ArrayBuffer` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.3.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\\n     * @example\\n     *\\n     * _.isArrayBuffer(new ArrayBuffer(2));\\n     * // => true\\n     *\\n     * _.isArrayBuffer(new Array(2));\\n     * // => false\\n     */\\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\\n\\n    /**\\n     * Checks if `value` is array-like. A value is considered array-like if it's\\n     * not a function and has a `value.length` that's an integer greater than or\\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\\n     * @example\\n     *\\n     * _.isArrayLike([1, 2, 3]);\\n     * // => true\\n     *\\n     * _.isArrayLike(document.body.children);\\n     * // => true\\n     *\\n     * _.isArrayLike('abc');\\n     * // => true\\n     *\\n     * _.isArrayLike(_.noop);\\n     * // => false\\n     */\\n    function isArrayLike(value) {\\n      return value != null && isLength(value.length) && !isFunction(value);\\n    }\\n\\n    /**\\n     * This method is like `_.isArrayLike` except that it also checks if `value`\\n     * is an object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.isArrayLikeObject([1, 2, 3]);\\n     * // => true\\n     *\\n     * _.isArrayLikeObject(document.body.children);\\n     * // => true\\n     *\\n     * _.isArrayLikeObject('abc');\\n     * // => false\\n     *\\n     * _.isArrayLikeObject(_.noop);\\n     * // => false\\n     */\\n    function isArrayLikeObject(value) {\\n      return isObjectLike(value) && isArrayLike(value);\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a boolean primitive or object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\\n     * @example\\n     *\\n     * _.isBoolean(false);\\n     * // => true\\n     *\\n     * _.isBoolean(null);\\n     * // => false\\n     */\\n    function isBoolean(value) {\\n      return value === true || value === false ||\\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\\n    }\\n\\n    /**\\n     * Checks if `value` is a buffer.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.3.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\\n     * @example\\n     *\\n     * _.isBuffer(new Buffer(2));\\n     * // => true\\n     *\\n     * _.isBuffer(new Uint8Array(2));\\n     * // => false\\n     */\\n    var isBuffer = nativeIsBuffer || stubFalse;\\n\\n    /**\\n     * Checks if `value` is classified as a `Date` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\\n     * @example\\n     *\\n     * _.isDate(new Date);\\n     * // => true\\n     *\\n     * _.isDate('Mon April 23 2012');\\n     * // => false\\n     */\\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\\n\\n    /**\\n     * Checks if `value` is likely a DOM element.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\\n     * @example\\n     *\\n     * _.isElement(document.body);\\n     * // => true\\n     *\\n     * _.isElement('<body>');\\n     * // => false\\n     */\\n    function isElement(value) {\\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\\n    }\\n\\n    /**\\n     * Checks if `value` is an empty object, collection, map, or set.\\n     *\\n     * Objects are considered empty if they have no own enumerable string keyed\\n     * properties.\\n     *\\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\\n     * @example\\n     *\\n     * _.isEmpty(null);\\n     * // => true\\n     *\\n     * _.isEmpty(true);\\n     * // => true\\n     *\\n     * _.isEmpty(1);\\n     * // => true\\n     *\\n     * _.isEmpty([1, 2, 3]);\\n     * // => false\\n     *\\n     * _.isEmpty({ 'a': 1 });\\n     * // => false\\n     */\\n    function isEmpty(value) {\\n      if (value == null) {\\n        return true;\\n      }\\n      if (isArrayLike(value) &&\\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\\n        return !value.length;\\n      }\\n      var tag = getTag(value);\\n      if (tag == mapTag || tag == setTag) {\\n        return !value.size;\\n      }\\n      if (isPrototype(value)) {\\n        return !baseKeys(value).length;\\n      }\\n      for (var key in value) {\\n        if (hasOwnProperty.call(value, key)) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    }\\n\\n    /**\\n     * Performs a deep comparison between two values to determine if they are\\n     * equivalent.\\n     *\\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\\n     * by their own, not inherited, enumerable properties. Functions and DOM\\n     * nodes are **not** supported.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\\n     * @example\\n     *\\n     * var object = { 'a': 1 };\\n     * var other = { 'a': 1 };\\n     *\\n     * _.isEqual(object, other);\\n     * // => true\\n     *\\n     * object === other;\\n     * // => false\\n     */\\n    function isEqual(value, other) {\\n      return baseIsEqual(value, other);\\n    }\\n\\n    /**\\n     * This method is like `_.isEqual` except that it accepts `customizer` which\\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\\n     * are handled by the method instead. The `customizer` is invoked with up to\\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @param {Function} [customizer] The function to customize comparisons.\\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\\n     * @example\\n     *\\n     * function isGreeting(value) {\\n     *   return /^h(?:i|ello)$/.test(value);\\n     * }\\n     *\\n     * function customizer(objValue, othValue) {\\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\\n     *     return true;\\n     *   }\\n     * }\\n     *\\n     * var array = ['hello', 'goodbye'];\\n     * var other = ['hi', 'goodbye'];\\n     *\\n     * _.isEqualWith(array, other, customizer);\\n     * // => true\\n     */\\n    function isEqualWith(value, other, customizer) {\\n      customizer = typeof customizer == 'function' ? customizer : undefined;\\n      var result = customizer ? customizer(value, other) : undefined;\\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\\n    }\\n\\n    /**\\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\\n     * `SyntaxError`, `TypeError`, or `URIError` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\\n     * @example\\n     *\\n     * _.isError(new Error);\\n     * // => true\\n     *\\n     * _.isError(Error);\\n     * // => false\\n     */\\n    function isError(value) {\\n      if (!isObjectLike(value)) {\\n        return false;\\n      }\\n      var tag = baseGetTag(value);\\n      return tag == errorTag || tag == domExcTag ||\\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\\n    }\\n\\n    /**\\n     * Checks if `value` is a finite primitive number.\\n     *\\n     * **Note:** This method is based on\\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\\n     * @example\\n     *\\n     * _.isFinite(3);\\n     * // => true\\n     *\\n     * _.isFinite(Number.MIN_VALUE);\\n     * // => true\\n     *\\n     * _.isFinite(Infinity);\\n     * // => false\\n     *\\n     * _.isFinite('3');\\n     * // => false\\n     */\\n    function isFinite(value) {\\n      return typeof value == 'number' && nativeIsFinite(value);\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `Function` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\\n     * @example\\n     *\\n     * _.isFunction(_);\\n     * // => true\\n     *\\n     * _.isFunction(/abc/);\\n     * // => false\\n     */\\n    function isFunction(value) {\\n      if (!isObject(value)) {\\n        return false;\\n      }\\n      // The use of `Object#toString` avoids issues with the `typeof` operator\\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\\n      var tag = baseGetTag(value);\\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\\n    }\\n\\n    /**\\n     * Checks if `value` is an integer.\\n     *\\n     * **Note:** This method is based on\\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\\n     * @example\\n     *\\n     * _.isInteger(3);\\n     * // => true\\n     *\\n     * _.isInteger(Number.MIN_VALUE);\\n     * // => false\\n     *\\n     * _.isInteger(Infinity);\\n     * // => false\\n     *\\n     * _.isInteger('3');\\n     * // => false\\n     */\\n    function isInteger(value) {\\n      return typeof value == 'number' && value == toInteger(value);\\n    }\\n\\n    /**\\n     * Checks if `value` is a valid array-like length.\\n     *\\n     * **Note:** This method is loosely based on\\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\\n     * @example\\n     *\\n     * _.isLength(3);\\n     * // => true\\n     *\\n     * _.isLength(Number.MIN_VALUE);\\n     * // => false\\n     *\\n     * _.isLength(Infinity);\\n     * // => false\\n     *\\n     * _.isLength('3');\\n     * // => false\\n     */\\n    function isLength(value) {\\n      return typeof value == 'number' &&\\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\\n    }\\n\\n    /**\\n     * Checks if `value` is the\\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\\n     * @example\\n     *\\n     * _.isObject({});\\n     * // => true\\n     *\\n     * _.isObject([1, 2, 3]);\\n     * // => true\\n     *\\n     * _.isObject(_.noop);\\n     * // => true\\n     *\\n     * _.isObject(null);\\n     * // => false\\n     */\\n    function isObject(value) {\\n      var type = typeof value;\\n      return value != null && (type == 'object' || type == 'function');\\n    }\\n\\n    /**\\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\\n     * and has a `typeof` result of \\\"object\\\".\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\\n     * @example\\n     *\\n     * _.isObjectLike({});\\n     * // => true\\n     *\\n     * _.isObjectLike([1, 2, 3]);\\n     * // => true\\n     *\\n     * _.isObjectLike(_.noop);\\n     * // => false\\n     *\\n     * _.isObjectLike(null);\\n     * // => false\\n     */\\n    function isObjectLike(value) {\\n      return value != null && typeof value == 'object';\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `Map` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.3.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\\n     * @example\\n     *\\n     * _.isMap(new Map);\\n     * // => true\\n     *\\n     * _.isMap(new WeakMap);\\n     * // => false\\n     */\\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\\n\\n    /**\\n     * Performs a partial deep comparison between `object` and `source` to\\n     * determine if `object` contains equivalent property values.\\n     *\\n     * **Note:** This method is equivalent to `_.matches` when `source` is\\n     * partially applied.\\n     *\\n     * Partial comparisons will match empty array and empty object `source`\\n     * values against any array or object value, respectively. See `_.isEqual`\\n     * for a list of supported value comparisons.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Lang\\n     * @param {Object} object The object to inspect.\\n     * @param {Object} source The object of property values to match.\\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': 2 };\\n     *\\n     * _.isMatch(object, { 'b': 2 });\\n     * // => true\\n     *\\n     * _.isMatch(object, { 'b': 1 });\\n     * // => false\\n     */\\n    function isMatch(object, source) {\\n      return object === source || baseIsMatch(object, source, getMatchData(source));\\n    }\\n\\n    /**\\n     * This method is like `_.isMatch` except that it accepts `customizer` which\\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\\n     * are handled by the method instead. The `customizer` is invoked with five\\n     * arguments: (objValue, srcValue, index|key, object, source).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {Object} object The object to inspect.\\n     * @param {Object} source The object of property values to match.\\n     * @param {Function} [customizer] The function to customize comparisons.\\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\\n     * @example\\n     *\\n     * function isGreeting(value) {\\n     *   return /^h(?:i|ello)$/.test(value);\\n     * }\\n     *\\n     * function customizer(objValue, srcValue) {\\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\\n     *     return true;\\n     *   }\\n     * }\\n     *\\n     * var object = { 'greeting': 'hello' };\\n     * var source = { 'greeting': 'hi' };\\n     *\\n     * _.isMatchWith(object, source, customizer);\\n     * // => true\\n     */\\n    function isMatchWith(object, source, customizer) {\\n      customizer = typeof customizer == 'function' ? customizer : undefined;\\n      return baseIsMatch(object, source, getMatchData(source), customizer);\\n    }\\n\\n    /**\\n     * Checks if `value` is `NaN`.\\n     *\\n     * **Note:** This method is based on\\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\\n     * `undefined` and other non-number values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\\n     * @example\\n     *\\n     * _.isNaN(NaN);\\n     * // => true\\n     *\\n     * _.isNaN(new Number(NaN));\\n     * // => true\\n     *\\n     * isNaN(undefined);\\n     * // => true\\n     *\\n     * _.isNaN(undefined);\\n     * // => false\\n     */\\n    function isNaN(value) {\\n      // An `NaN` primitive is the only value that is not equal to itself.\\n      // Perform the `toStringTag` check first to avoid errors with some\\n      // ActiveX objects in IE.\\n      return isNumber(value) && value != +value;\\n    }\\n\\n    /**\\n     * Checks if `value` is a pristine native function.\\n     *\\n     * **Note:** This method can't reliably detect native functions in the presence\\n     * of the core-js package because core-js circumvents this kind of detection.\\n     * Despite multiple requests, the core-js maintainer has made it clear: any\\n     * attempt to fix the detection will be obstructed. As a result, we're left\\n     * with little choice but to throw an error. Unfortunately, this also affects\\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\\n     * which rely on core-js.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a native function,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.isNative(Array.prototype.push);\\n     * // => true\\n     *\\n     * _.isNative(_);\\n     * // => false\\n     */\\n    function isNative(value) {\\n      if (isMaskable(value)) {\\n        throw new Error(CORE_ERROR_TEXT);\\n      }\\n      return baseIsNative(value);\\n    }\\n\\n    /**\\n     * Checks if `value` is `null`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\\n     * @example\\n     *\\n     * _.isNull(null);\\n     * // => true\\n     *\\n     * _.isNull(void 0);\\n     * // => false\\n     */\\n    function isNull(value) {\\n      return value === null;\\n    }\\n\\n    /**\\n     * Checks if `value` is `null` or `undefined`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\\n     * @example\\n     *\\n     * _.isNil(null);\\n     * // => true\\n     *\\n     * _.isNil(void 0);\\n     * // => true\\n     *\\n     * _.isNil(NaN);\\n     * // => false\\n     */\\n    function isNil(value) {\\n      return value == null;\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `Number` primitive or object.\\n     *\\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\\n     * classified as numbers, use the `_.isFinite` method.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\\n     * @example\\n     *\\n     * _.isNumber(3);\\n     * // => true\\n     *\\n     * _.isNumber(Number.MIN_VALUE);\\n     * // => true\\n     *\\n     * _.isNumber(Infinity);\\n     * // => true\\n     *\\n     * _.isNumber('3');\\n     * // => false\\n     */\\n    function isNumber(value) {\\n      return typeof value == 'number' ||\\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\\n    }\\n\\n    /**\\n     * Checks if `value` is a plain object, that is, an object created by the\\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.8.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     * }\\n     *\\n     * _.isPlainObject(new Foo);\\n     * // => false\\n     *\\n     * _.isPlainObject([1, 2, 3]);\\n     * // => false\\n     *\\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\\n     * // => true\\n     *\\n     * _.isPlainObject(Object.create(null));\\n     * // => true\\n     */\\n    function isPlainObject(value) {\\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\\n        return false;\\n      }\\n      var proto = getPrototype(value);\\n      if (proto === null) {\\n        return true;\\n      }\\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\\n        funcToString.call(Ctor) == objectCtorString;\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `RegExp` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\\n     * @example\\n     *\\n     * _.isRegExp(/abc/);\\n     * // => true\\n     *\\n     * _.isRegExp('/abc/');\\n     * // => false\\n     */\\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\\n\\n    /**\\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\\n     * double precision number which isn't the result of a rounded unsafe integer.\\n     *\\n     * **Note:** This method is based on\\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\\n     * @example\\n     *\\n     * _.isSafeInteger(3);\\n     * // => true\\n     *\\n     * _.isSafeInteger(Number.MIN_VALUE);\\n     * // => false\\n     *\\n     * _.isSafeInteger(Infinity);\\n     * // => false\\n     *\\n     * _.isSafeInteger('3');\\n     * // => false\\n     */\\n    function isSafeInteger(value) {\\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `Set` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.3.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\\n     * @example\\n     *\\n     * _.isSet(new Set);\\n     * // => true\\n     *\\n     * _.isSet(new WeakSet);\\n     * // => false\\n     */\\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\\n\\n    /**\\n     * Checks if `value` is classified as a `String` primitive or object.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\\n     * @example\\n     *\\n     * _.isString('abc');\\n     * // => true\\n     *\\n     * _.isString(1);\\n     * // => false\\n     */\\n    function isString(value) {\\n      return typeof value == 'string' ||\\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `Symbol` primitive or object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\\n     * @example\\n     *\\n     * _.isSymbol(Symbol.iterator);\\n     * // => true\\n     *\\n     * _.isSymbol('abc');\\n     * // => false\\n     */\\n    function isSymbol(value) {\\n      return typeof value == 'symbol' ||\\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a typed array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\\n     * @example\\n     *\\n     * _.isTypedArray(new Uint8Array);\\n     * // => true\\n     *\\n     * _.isTypedArray([]);\\n     * // => false\\n     */\\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\\n\\n    /**\\n     * Checks if `value` is `undefined`.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\\n     * @example\\n     *\\n     * _.isUndefined(void 0);\\n     * // => true\\n     *\\n     * _.isUndefined(null);\\n     * // => false\\n     */\\n    function isUndefined(value) {\\n      return value === undefined;\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `WeakMap` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.3.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\\n     * @example\\n     *\\n     * _.isWeakMap(new WeakMap);\\n     * // => true\\n     *\\n     * _.isWeakMap(new Map);\\n     * // => false\\n     */\\n    function isWeakMap(value) {\\n      return isObjectLike(value) && getTag(value) == weakMapTag;\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `WeakSet` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.3.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\\n     * @example\\n     *\\n     * _.isWeakSet(new WeakSet);\\n     * // => true\\n     *\\n     * _.isWeakSet(new Set);\\n     * // => false\\n     */\\n    function isWeakSet(value) {\\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\\n    }\\n\\n    /**\\n     * Checks if `value` is less than `other`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.9.0\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\\n     *  else `false`.\\n     * @see _.gt\\n     * @example\\n     *\\n     * _.lt(1, 3);\\n     * // => true\\n     *\\n     * _.lt(3, 3);\\n     * // => false\\n     *\\n     * _.lt(3, 1);\\n     * // => false\\n     */\\n    var lt = createRelationalOperation(baseLt);\\n\\n    /**\\n     * Checks if `value` is less than or equal to `other`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.9.0\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\\n     *  `other`, else `false`.\\n     * @see _.gte\\n     * @example\\n     *\\n     * _.lte(1, 3);\\n     * // => true\\n     *\\n     * _.lte(3, 3);\\n     * // => true\\n     *\\n     * _.lte(3, 1);\\n     * // => false\\n     */\\n    var lte = createRelationalOperation(function(value, other) {\\n      return value <= other;\\n    });\\n\\n    /**\\n     * Converts `value` to an array.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {Array} Returns the converted array.\\n     * @example\\n     *\\n     * _.toArray({ 'a': 1, 'b': 2 });\\n     * // => [1, 2]\\n     *\\n     * _.toArray('abc');\\n     * // => ['a', 'b', 'c']\\n     *\\n     * _.toArray(1);\\n     * // => []\\n     *\\n     * _.toArray(null);\\n     * // => []\\n     */\\n    function toArray(value) {\\n      if (!value) {\\n        return [];\\n      }\\n      if (isArrayLike(value)) {\\n        return isString(value) ? stringToArray(value) : copyArray(value);\\n      }\\n      if (symIterator && value[symIterator]) {\\n        return iteratorToArray(value[symIterator]());\\n      }\\n      var tag = getTag(value),\\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\\n\\n      return func(value);\\n    }\\n\\n    /**\\n     * Converts `value` to a finite number.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.12.0\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {number} Returns the converted number.\\n     * @example\\n     *\\n     * _.toFinite(3.2);\\n     * // => 3.2\\n     *\\n     * _.toFinite(Number.MIN_VALUE);\\n     * // => 5e-324\\n     *\\n     * _.toFinite(Infinity);\\n     * // => 1.7976931348623157e+308\\n     *\\n     * _.toFinite('3.2');\\n     * // => 3.2\\n     */\\n    function toFinite(value) {\\n      if (!value) {\\n        return value === 0 ? value : 0;\\n      }\\n      value = toNumber(value);\\n      if (value === INFINITY || value === -INFINITY) {\\n        var sign = (value < 0 ? -1 : 1);\\n        return sign * MAX_INTEGER;\\n      }\\n      return value === value ? value : 0;\\n    }\\n\\n    /**\\n     * Converts `value` to an integer.\\n     *\\n     * **Note:** This method is loosely based on\\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {number} Returns the converted integer.\\n     * @example\\n     *\\n     * _.toInteger(3.2);\\n     * // => 3\\n     *\\n     * _.toInteger(Number.MIN_VALUE);\\n     * // => 0\\n     *\\n     * _.toInteger(Infinity);\\n     * // => 1.7976931348623157e+308\\n     *\\n     * _.toInteger('3.2');\\n     * // => 3\\n     */\\n    function toInteger(value) {\\n      var result = toFinite(value),\\n          remainder = result % 1;\\n\\n      return result === result ? (remainder ? result - remainder : result) : 0;\\n    }\\n\\n    /**\\n     * Converts `value` to an integer suitable for use as the length of an\\n     * array-like object.\\n     *\\n     * **Note:** This method is based on\\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {number} Returns the converted integer.\\n     * @example\\n     *\\n     * _.toLength(3.2);\\n     * // => 3\\n     *\\n     * _.toLength(Number.MIN_VALUE);\\n     * // => 0\\n     *\\n     * _.toLength(Infinity);\\n     * // => 4294967295\\n     *\\n     * _.toLength('3.2');\\n     * // => 3\\n     */\\n    function toLength(value) {\\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\\n    }\\n\\n    /**\\n     * Converts `value` to a number.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to process.\\n     * @returns {number} Returns the number.\\n     * @example\\n     *\\n     * _.toNumber(3.2);\\n     * // => 3.2\\n     *\\n     * _.toNumber(Number.MIN_VALUE);\\n     * // => 5e-324\\n     *\\n     * _.toNumber(Infinity);\\n     * // => Infinity\\n     *\\n     * _.toNumber('3.2');\\n     * // => 3.2\\n     */\\n    function toNumber(value) {\\n      if (typeof value == 'number') {\\n        return value;\\n      }\\n      if (isSymbol(value)) {\\n        return NAN;\\n      }\\n      if (isObject(value)) {\\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\\n        value = isObject(other) ? (other + '') : other;\\n      }\\n      if (typeof value != 'string') {\\n        return value === 0 ? value : +value;\\n      }\\n      value = value.replace(reTrim, '');\\n      var isBinary = reIsBinary.test(value);\\n      return (isBinary || reIsOctal.test(value))\\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\\n        : (reIsBadHex.test(value) ? NAN : +value);\\n    }\\n\\n    /**\\n     * Converts `value` to a plain object flattening inherited enumerable string\\n     * keyed properties of `value` to own properties of the plain object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {Object} Returns the converted plain object.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.assign({ 'a': 1 }, new Foo);\\n     * // => { 'a': 1, 'b': 2 }\\n     *\\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\\n     */\\n    function toPlainObject(value) {\\n      return copyObject(value, keysIn(value));\\n    }\\n\\n    /**\\n     * Converts `value` to a safe integer. A safe integer can be compared and\\n     * represented correctly.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {number} Returns the converted integer.\\n     * @example\\n     *\\n     * _.toSafeInteger(3.2);\\n     * // => 3\\n     *\\n     * _.toSafeInteger(Number.MIN_VALUE);\\n     * // => 0\\n     *\\n     * _.toSafeInteger(Infinity);\\n     * // => 9007199254740991\\n     *\\n     * _.toSafeInteger('3.2');\\n     * // => 3\\n     */\\n    function toSafeInteger(value) {\\n      return baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\\n    }\\n\\n    /**\\n     * Converts `value` to a string. An empty string is returned for `null`\\n     * and `undefined` values. The sign of `-0` is preserved.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {string} Returns the converted string.\\n     * @example\\n     *\\n     * _.toString(null);\\n     * // => ''\\n     *\\n     * _.toString(-0);\\n     * // => '-0'\\n     *\\n     * _.toString([1, 2, 3]);\\n     * // => '1,2,3'\\n     */\\n    function toString(value) {\\n      return value == null ? '' : baseToString(value);\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Assigns own enumerable string keyed properties of source objects to the\\n     * destination object. Source objects are applied from left to right.\\n     * Subsequent sources overwrite property assignments of previous sources.\\n     *\\n     * **Note:** This method mutates `object` and is loosely based on\\n     * [`Object.assign`](https://mdn.io/Object/assign).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.10.0\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @returns {Object} Returns `object`.\\n     * @see _.assignIn\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     * }\\n     *\\n     * function Bar() {\\n     *   this.c = 3;\\n     * }\\n     *\\n     * Foo.prototype.b = 2;\\n     * Bar.prototype.d = 4;\\n     *\\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\\n     * // => { 'a': 1, 'c': 3 }\\n     */\\n    var assign = createAssigner(function(object, source) {\\n      if (isPrototype(source) || isArrayLike(source)) {\\n        copyObject(source, keys(source), object);\\n        return;\\n      }\\n      for (var key in source) {\\n        if (hasOwnProperty.call(source, key)) {\\n          assignValue(object, key, source[key]);\\n        }\\n      }\\n    });\\n\\n    /**\\n     * This method is like `_.assign` except that it iterates over own and\\n     * inherited source properties.\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @alias extend\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @returns {Object} Returns `object`.\\n     * @see _.assign\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     * }\\n     *\\n     * function Bar() {\\n     *   this.c = 3;\\n     * }\\n     *\\n     * Foo.prototype.b = 2;\\n     * Bar.prototype.d = 4;\\n     *\\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\\n     */\\n    var assignIn = createAssigner(function(object, source) {\\n      copyObject(source, keysIn(source), object);\\n    });\\n\\n    /**\\n     * This method is like `_.assignIn` except that it accepts `customizer`\\n     * which is invoked to produce the assigned values. If `customizer` returns\\n     * `undefined`, assignment is handled by the method instead. The `customizer`\\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @alias extendWith\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} sources The source objects.\\n     * @param {Function} [customizer] The function to customize assigned values.\\n     * @returns {Object} Returns `object`.\\n     * @see _.assignWith\\n     * @example\\n     *\\n     * function customizer(objValue, srcValue) {\\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\\n     * }\\n     *\\n     * var defaults = _.partialRight(_.assignInWith, customizer);\\n     *\\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\\n     * // => { 'a': 1, 'b': 2 }\\n     */\\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\\n      copyObject(source, keysIn(source), object, customizer);\\n    });\\n\\n    /**\\n     * This method is like `_.assign` except that it accepts `customizer`\\n     * which is invoked to produce the assigned values. If `customizer` returns\\n     * `undefined`, assignment is handled by the method instead. The `customizer`\\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} sources The source objects.\\n     * @param {Function} [customizer] The function to customize assigned values.\\n     * @returns {Object} Returns `object`.\\n     * @see _.assignInWith\\n     * @example\\n     *\\n     * function customizer(objValue, srcValue) {\\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\\n     * }\\n     *\\n     * var defaults = _.partialRight(_.assignWith, customizer);\\n     *\\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\\n     * // => { 'a': 1, 'b': 2 }\\n     */\\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\\n      copyObject(source, keys(source), object, customizer);\\n    });\\n\\n    /**\\n     * Creates an array of values corresponding to `paths` of `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.0.0\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {...(string|string[])} [paths] The property paths to pick.\\n     * @returns {Array} Returns the picked values.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\\n     *\\n     * _.at(object, ['a[0].b.c', 'a[1]']);\\n     * // => [3, 4]\\n     */\\n    var at = flatRest(baseAt);\\n\\n    /**\\n     * Creates an object that inherits from the `prototype` object. If a\\n     * `properties` object is given, its own enumerable string keyed properties\\n     * are assigned to the created object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.3.0\\n     * @category Object\\n     * @param {Object} prototype The object to inherit from.\\n     * @param {Object} [properties] The properties to assign to the object.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * function Shape() {\\n     *   this.x = 0;\\n     *   this.y = 0;\\n     * }\\n     *\\n     * function Circle() {\\n     *   Shape.call(this);\\n     * }\\n     *\\n     * Circle.prototype = _.create(Shape.prototype, {\\n     *   'constructor': Circle\\n     * });\\n     *\\n     * var circle = new Circle;\\n     * circle instanceof Circle;\\n     * // => true\\n     *\\n     * circle instanceof Shape;\\n     * // => true\\n     */\\n    function create(prototype, properties) {\\n      var result = baseCreate(prototype);\\n      return properties == null ? result : baseAssign(result, properties);\\n    }\\n\\n    /**\\n     * Assigns own and inherited enumerable string keyed properties of source\\n     * objects to the destination object for all destination properties that\\n     * resolve to `undefined`. Source objects are applied from left to right.\\n     * Once a property is set, additional values of the same property are ignored.\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @returns {Object} Returns `object`.\\n     * @see _.defaultsDeep\\n     * @example\\n     *\\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\\n     * // => { 'a': 1, 'b': 2 }\\n     */\\n    var defaults = baseRest(function(args) {\\n      args.push(undefined, assignInDefaults);\\n      return apply(assignInWith, undefined, args);\\n    });\\n\\n    /**\\n     * This method is like `_.defaults` except that it recursively assigns\\n     * default properties.\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.10.0\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @returns {Object} Returns `object`.\\n     * @see _.defaults\\n     * @example\\n     *\\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\\n     * // => { 'a': { 'b': 2, 'c': 3 } }\\n     */\\n    var defaultsDeep = baseRest(function(args) {\\n      args.push(undefined, mergeDefaults);\\n      return apply(mergeWith, undefined, args);\\n    });\\n\\n    /**\\n     * This method is like `_.find` except that it returns the key of the first\\n     * element `predicate` returns truthy for instead of the element itself.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.1.0\\n     * @category Object\\n     * @param {Object} object The object to inspect.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {string|undefined} Returns the key of the matched element,\\n     *  else `undefined`.\\n     * @example\\n     *\\n     * var users = {\\n     *   'barney':  { 'age': 36, 'active': true },\\n     *   'fred':    { 'age': 40, 'active': false },\\n     *   'pebbles': { 'age': 1,  'active': true }\\n     * };\\n     *\\n     * _.findKey(users, function(o) { return o.age < 40; });\\n     * // => 'barney' (iteration order is not guaranteed)\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.findKey(users, { 'age': 1, 'active': true });\\n     * // => 'pebbles'\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.findKey(users, ['active', false]);\\n     * // => 'fred'\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.findKey(users, 'active');\\n     * // => 'barney'\\n     */\\n    function findKey(object, predicate) {\\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\\n    }\\n\\n    /**\\n     * This method is like `_.findKey` except that it iterates over elements of\\n     * a collection in the opposite order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Object\\n     * @param {Object} object The object to inspect.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {string|undefined} Returns the key of the matched element,\\n     *  else `undefined`.\\n     * @example\\n     *\\n     * var users = {\\n     *   'barney':  { 'age': 36, 'active': true },\\n     *   'fred':    { 'age': 40, 'active': false },\\n     *   'pebbles': { 'age': 1,  'active': true }\\n     * };\\n     *\\n     * _.findLastKey(users, function(o) { return o.age < 40; });\\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.findLastKey(users, { 'age': 36, 'active': true });\\n     * // => 'barney'\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.findLastKey(users, ['active', false]);\\n     * // => 'fred'\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.findLastKey(users, 'active');\\n     * // => 'pebbles'\\n     */\\n    function findLastKey(object, predicate) {\\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\\n    }\\n\\n    /**\\n     * Iterates over own and inherited enumerable string keyed properties of an\\n     * object and invokes `iteratee` for each property. The iteratee is invoked\\n     * with three arguments: (value, key, object). Iteratee functions may exit\\n     * iteration early by explicitly returning `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.3.0\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     * @see _.forInRight\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.forIn(new Foo, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\\n     */\\n    function forIn(object, iteratee) {\\n      return object == null\\n        ? object\\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\\n    }\\n\\n    /**\\n     * This method is like `_.forIn` except that it iterates over properties of\\n     * `object` in the opposite order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     * @see _.forIn\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.forInRight(new Foo, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\\n     */\\n    function forInRight(object, iteratee) {\\n      return object == null\\n        ? object\\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\\n    }\\n\\n    /**\\n     * Iterates over own enumerable string keyed properties of an object and\\n     * invokes `iteratee` for each property. The iteratee is invoked with three\\n     * arguments: (value, key, object). Iteratee functions may exit iteration\\n     * early by explicitly returning `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.3.0\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     * @see _.forOwnRight\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.forOwn(new Foo, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\\n     */\\n    function forOwn(object, iteratee) {\\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\\n    }\\n\\n    /**\\n     * This method is like `_.forOwn` except that it iterates over properties of\\n     * `object` in the opposite order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     * @see _.forOwn\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.forOwnRight(new Foo, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\\n     */\\n    function forOwnRight(object, iteratee) {\\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\\n    }\\n\\n    /**\\n     * Creates an array of function property names from own enumerable properties\\n     * of `object`.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to inspect.\\n     * @returns {Array} Returns the function names.\\n     * @see _.functionsIn\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = _.constant('a');\\n     *   this.b = _.constant('b');\\n     * }\\n     *\\n     * Foo.prototype.c = _.constant('c');\\n     *\\n     * _.functions(new Foo);\\n     * // => ['a', 'b']\\n     */\\n    function functions(object) {\\n      return object == null ? [] : baseFunctions(object, keys(object));\\n    }\\n\\n    /**\\n     * Creates an array of function property names from own and inherited\\n     * enumerable properties of `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The object to inspect.\\n     * @returns {Array} Returns the function names.\\n     * @see _.functions\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = _.constant('a');\\n     *   this.b = _.constant('b');\\n     * }\\n     *\\n     * Foo.prototype.c = _.constant('c');\\n     *\\n     * _.functionsIn(new Foo);\\n     * // => ['a', 'b', 'c']\\n     */\\n    function functionsIn(object) {\\n      return object == null ? [] : baseFunctions(object, keysIn(object));\\n    }\\n\\n    /**\\n     * Gets the value at `path` of `object`. If the resolved value is\\n     * `undefined`, the `defaultValue` is returned in its place.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.7.0\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path of the property to get.\\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\\n     * @returns {*} Returns the resolved value.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\\n     *\\n     * _.get(object, 'a[0].b.c');\\n     * // => 3\\n     *\\n     * _.get(object, ['a', '0', 'b', 'c']);\\n     * // => 3\\n     *\\n     * _.get(object, 'a.b.c', 'default');\\n     * // => 'default'\\n     */\\n    function get(object, path, defaultValue) {\\n      var result = object == null ? undefined : baseGet(object, path);\\n      return result === undefined ? defaultValue : result;\\n    }\\n\\n    /**\\n     * Checks if `path` is a direct property of `object`.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path to check.\\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\\n     * @example\\n     *\\n     * var object = { 'a': { 'b': 2 } };\\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\\n     *\\n     * _.has(object, 'a');\\n     * // => true\\n     *\\n     * _.has(object, 'a.b');\\n     * // => true\\n     *\\n     * _.has(object, ['a', 'b']);\\n     * // => true\\n     *\\n     * _.has(other, 'a');\\n     * // => false\\n     */\\n    function has(object, path) {\\n      return object != null && hasPath(object, path, baseHas);\\n    }\\n\\n    /**\\n     * Checks if `path` is a direct or inherited property of `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path to check.\\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\\n     * @example\\n     *\\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\\n     *\\n     * _.hasIn(object, 'a');\\n     * // => true\\n     *\\n     * _.hasIn(object, 'a.b');\\n     * // => true\\n     *\\n     * _.hasIn(object, ['a', 'b']);\\n     * // => true\\n     *\\n     * _.hasIn(object, 'b');\\n     * // => false\\n     */\\n    function hasIn(object, path) {\\n      return object != null && hasPath(object, path, baseHasIn);\\n    }\\n\\n    /**\\n     * Creates an object composed of the inverted keys and values of `object`.\\n     * If `object` contains duplicate values, subsequent values overwrite\\n     * property assignments of previous values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.7.0\\n     * @category Object\\n     * @param {Object} object The object to invert.\\n     * @returns {Object} Returns the new inverted object.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\\n     *\\n     * _.invert(object);\\n     * // => { '1': 'c', '2': 'b' }\\n     */\\n    var invert = createInverter(function(result, value, key) {\\n      result[value] = key;\\n    }, constant(identity));\\n\\n    /**\\n     * This method is like `_.invert` except that the inverted object is generated\\n     * from the results of running each element of `object` thru `iteratee`. The\\n     * corresponding inverted value of each inverted key is an array of keys\\n     * responsible for generating the inverted value. The iteratee is invoked\\n     * with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.1.0\\n     * @category Object\\n     * @param {Object} object The object to invert.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {Object} Returns the new inverted object.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\\n     *\\n     * _.invertBy(object);\\n     * // => { '1': ['a', 'c'], '2': ['b'] }\\n     *\\n     * _.invertBy(object, function(value) {\\n     *   return 'group' + value;\\n     * });\\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\\n     */\\n    var invertBy = createInverter(function(result, value, key) {\\n      if (hasOwnProperty.call(result, value)) {\\n        result[value].push(key);\\n      } else {\\n        result[value] = [key];\\n      }\\n    }, getIteratee);\\n\\n    /**\\n     * Invokes the method at `path` of `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path of the method to invoke.\\n     * @param {...*} [args] The arguments to invoke the method with.\\n     * @returns {*} Returns the result of the invoked method.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\\n     *\\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\\n     * // => [2, 3]\\n     */\\n    var invoke = baseRest(baseInvoke);\\n\\n    /**\\n     * Creates an array of the own enumerable property names of `object`.\\n     *\\n     * **Note:** Non-object values are coerced to objects. See the\\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\\n     * for more details.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.keys(new Foo);\\n     * // => ['a', 'b'] (iteration order is not guaranteed)\\n     *\\n     * _.keys('hi');\\n     * // => ['0', '1']\\n     */\\n    function keys(object) {\\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\\n    }\\n\\n    /**\\n     * Creates an array of the own and inherited enumerable property names of `object`.\\n     *\\n     * **Note:** Non-object values are coerced to objects.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.keysIn(new Foo);\\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\\n     */\\n    function keysIn(object) {\\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\\n    }\\n\\n    /**\\n     * The opposite of `_.mapValues`; this method creates an object with the\\n     * same values as `object` and keys generated by running each own enumerable\\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\\n     * with three arguments: (value, key, object).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.8.0\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Object} Returns the new mapped object.\\n     * @see _.mapValues\\n     * @example\\n     *\\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\\n     *   return key + value;\\n     * });\\n     * // => { 'a1': 1, 'b2': 2 }\\n     */\\n    function mapKeys(object, iteratee) {\\n      var result = {};\\n      iteratee = getIteratee(iteratee, 3);\\n\\n      baseForOwn(object, function(value, key, object) {\\n        baseAssignValue(result, iteratee(value, key, object), value);\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an object with the same keys as `object` and values generated\\n     * by running each own enumerable string keyed property of `object` thru\\n     * `iteratee`. The iteratee is invoked with three arguments:\\n     * (value, key, object).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.4.0\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Object} Returns the new mapped object.\\n     * @see _.mapKeys\\n     * @example\\n     *\\n     * var users = {\\n     *   'fred':    { 'user': 'fred',    'age': 40 },\\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\\n     * };\\n     *\\n     * _.mapValues(users, function(o) { return o.age; });\\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.mapValues(users, 'age');\\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\\n     */\\n    function mapValues(object, iteratee) {\\n      var result = {};\\n      iteratee = getIteratee(iteratee, 3);\\n\\n      baseForOwn(object, function(value, key, object) {\\n        baseAssignValue(result, key, iteratee(value, key, object));\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * This method is like `_.assign` except that it recursively merges own and\\n     * inherited enumerable string keyed properties of source objects into the\\n     * destination object. Source properties that resolve to `undefined` are\\n     * skipped if a destination value exists. Array and plain object properties\\n     * are merged recursively. Other objects and value types are overridden by\\n     * assignment. Source objects are applied from left to right. Subsequent\\n     * sources overwrite property assignments of previous sources.\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.5.0\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var object = {\\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\\n     * };\\n     *\\n     * var other = {\\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\\n     * };\\n     *\\n     * _.merge(object, other);\\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\\n     */\\n    var merge = createAssigner(function(object, source, srcIndex) {\\n      baseMerge(object, source, srcIndex);\\n    });\\n\\n    /**\\n     * This method is like `_.merge` except that it accepts `customizer` which\\n     * is invoked to produce the merged values of the destination and source\\n     * properties. If `customizer` returns `undefined`, merging is handled by the\\n     * method instead. The `customizer` is invoked with six arguments:\\n     * (objValue, srcValue, key, object, source, stack).\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} sources The source objects.\\n     * @param {Function} customizer The function to customize assigned values.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * function customizer(objValue, srcValue) {\\n     *   if (_.isArray(objValue)) {\\n     *     return objValue.concat(srcValue);\\n     *   }\\n     * }\\n     *\\n     * var object = { 'a': [1], 'b': [2] };\\n     * var other = { 'a': [3], 'b': [4] };\\n     *\\n     * _.mergeWith(object, other, customizer);\\n     * // => { 'a': [1, 3], 'b': [2, 4] }\\n     */\\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\\n      baseMerge(object, source, srcIndex, customizer);\\n    });\\n\\n    /**\\n     * The opposite of `_.pick`; this method creates an object composed of the\\n     * own and inherited enumerable property paths of `object` that are not omitted.\\n     *\\n     * **Note:** This method is considerably slower than `_.pick`.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The source object.\\n     * @param {...(string|string[])} [paths] The property paths to omit.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\\n     *\\n     * _.omit(object, ['a', 'c']);\\n     * // => { 'b': '2' }\\n     */\\n    var omit = flatRest(function(object, paths) {\\n      var result = {};\\n      if (object == null) {\\n        return result;\\n      }\\n      var isDeep = false;\\n      paths = arrayMap(paths, function(path) {\\n        path = castPath(path, object);\\n        isDeep || (isDeep = path.length > 1);\\n        return path;\\n      });\\n      copyObject(object, getAllKeysIn(object), result);\\n      if (isDeep) {\\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG);\\n      }\\n      var length = paths.length;\\n      while (length--) {\\n        baseUnset(result, paths[length]);\\n      }\\n      return result;\\n    });\\n\\n    /**\\n     * The opposite of `_.pickBy`; this method creates an object composed of\\n     * the own and inherited enumerable string keyed properties of `object` that\\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\\n     * arguments: (value, key).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The source object.\\n     * @param {Function} [predicate=_.identity] The function invoked per property.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\\n     *\\n     * _.omitBy(object, _.isNumber);\\n     * // => { 'b': '2' }\\n     */\\n    function omitBy(object, predicate) {\\n      return pickBy(object, negate(getIteratee(predicate)));\\n    }\\n\\n    /**\\n     * Creates an object composed of the picked `object` properties.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The source object.\\n     * @param {...(string|string[])} [paths] The property paths to pick.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\\n     *\\n     * _.pick(object, ['a', 'c']);\\n     * // => { 'a': 1, 'c': 3 }\\n     */\\n    var pick = flatRest(function(object, paths) {\\n      return object == null ? {} : basePick(object, paths);\\n    });\\n\\n    /**\\n     * Creates an object composed of the `object` properties `predicate` returns\\n     * truthy for. The predicate is invoked with two arguments: (value, key).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The source object.\\n     * @param {Function} [predicate=_.identity] The function invoked per property.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\\n     *\\n     * _.pickBy(object, _.isNumber);\\n     * // => { 'a': 1, 'c': 3 }\\n     */\\n    function pickBy(object, predicate) {\\n      if (object == null) {\\n        return {};\\n      }\\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\\n        return [prop];\\n      });\\n      predicate = getIteratee(predicate);\\n      return basePickBy(object, props, function(value, path) {\\n        return predicate(value, path[0]);\\n      });\\n    }\\n\\n    /**\\n     * This method is like `_.get` except that if the resolved value is a\\n     * function it's invoked with the `this` binding of its parent object and\\n     * its result is returned.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path of the property to resolve.\\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\\n     * @returns {*} Returns the resolved value.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\\n     *\\n     * _.result(object, 'a[0].b.c1');\\n     * // => 3\\n     *\\n     * _.result(object, 'a[0].b.c2');\\n     * // => 4\\n     *\\n     * _.result(object, 'a[0].b.c3', 'default');\\n     * // => 'default'\\n     *\\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\\n     * // => 'default'\\n     */\\n    function result(object, path, defaultValue) {\\n      path = castPath(path, object);\\n\\n      var index = -1,\\n          length = path.length;\\n\\n      // Ensure the loop is entered when path is empty.\\n      if (!length) {\\n        length = 1;\\n        object = undefined;\\n      }\\n      while (++index < length) {\\n        var value = object == null ? undefined : object[toKey(path[index])];\\n        if (value === undefined) {\\n          index = length;\\n          value = defaultValue;\\n        }\\n        object = isFunction(value) ? value.call(object) : value;\\n      }\\n      return object;\\n    }\\n\\n    /**\\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\\n     * it's created. Arrays are created for missing index properties while objects\\n     * are created for all other missing properties. Use `_.setWith` to customize\\n     * `path` creation.\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.7.0\\n     * @category Object\\n     * @param {Object} object The object to modify.\\n     * @param {Array|string} path The path of the property to set.\\n     * @param {*} value The value to set.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\\n     *\\n     * _.set(object, 'a[0].b.c', 4);\\n     * console.log(object.a[0].b.c);\\n     * // => 4\\n     *\\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\\n     * console.log(object.x[0].y.z);\\n     * // => 5\\n     */\\n    function set(object, path, value) {\\n      return object == null ? object : baseSet(object, path, value);\\n    }\\n\\n    /**\\n     * This method is like `_.set` except that it accepts `customizer` which is\\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\\n     * path creation is handled by the method instead. The `customizer` is invoked\\n     * with three arguments: (nsValue, key, nsObject).\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The object to modify.\\n     * @param {Array|string} path The path of the property to set.\\n     * @param {*} value The value to set.\\n     * @param {Function} [customizer] The function to customize assigned values.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var object = {};\\n     *\\n     * _.setWith(object, '[0][1]', 'a', Object);\\n     * // => { '0': { '1': 'a' } }\\n     */\\n    function setWith(object, path, value, customizer) {\\n      customizer = typeof customizer == 'function' ? customizer : undefined;\\n      return object == null ? object : baseSet(object, path, value, customizer);\\n    }\\n\\n    /**\\n     * Creates an array of own enumerable string keyed-value pairs for `object`\\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\\n     * entries are returned.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @alias entries\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the key-value pairs.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.toPairs(new Foo);\\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\\n     */\\n    var toPairs = createToPairs(keys);\\n\\n    /**\\n     * Creates an array of own and inherited enumerable string keyed-value pairs\\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\\n     * or set, its entries are returned.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @alias entriesIn\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the key-value pairs.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.toPairsIn(new Foo);\\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\\n     */\\n    var toPairsIn = createToPairs(keysIn);\\n\\n    /**\\n     * An alternative to `_.reduce`; this method transforms `object` to a new\\n     * `accumulator` object which is the result of running each of its own\\n     * enumerable string keyed properties thru `iteratee`, with each invocation\\n     * potentially mutating the `accumulator` object. If `accumulator` is not\\n     * provided, a new object with the same `[[Prototype]]` will be used. The\\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.3.0\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [accumulator] The custom accumulator value.\\n     * @returns {*} Returns the accumulated value.\\n     * @example\\n     *\\n     * _.transform([2, 3, 4], function(result, n) {\\n     *   result.push(n *= n);\\n     *   return n % 2 == 0;\\n     * }, []);\\n     * // => [4, 9]\\n     *\\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\\n     *   (result[value] || (result[value] = [])).push(key);\\n     * }, {});\\n     * // => { '1': ['a', 'c'], '2': ['b'] }\\n     */\\n    function transform(object, iteratee, accumulator) {\\n      var isArr = isArray(object),\\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\\n\\n      iteratee = getIteratee(iteratee, 4);\\n      if (accumulator == null) {\\n        var Ctor = object && object.constructor;\\n        if (isArrLike) {\\n          accumulator = isArr ? new Ctor : [];\\n        }\\n        else if (isObject(object)) {\\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\\n        }\\n        else {\\n          accumulator = {};\\n        }\\n      }\\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\\n        return iteratee(accumulator, value, index, object);\\n      });\\n      return accumulator;\\n    }\\n\\n    /**\\n     * Removes the property at `path` of `object`.\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The object to modify.\\n     * @param {Array|string} path The path of the property to unset.\\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\\n     * _.unset(object, 'a[0].b.c');\\n     * // => true\\n     *\\n     * console.log(object);\\n     * // => { 'a': [{ 'b': {} }] };\\n     *\\n     * _.unset(object, ['a', '0', 'b', 'c']);\\n     * // => true\\n     *\\n     * console.log(object);\\n     * // => { 'a': [{ 'b': {} }] };\\n     */\\n    function unset(object, path) {\\n      return object == null ? true : baseUnset(object, path);\\n    }\\n\\n    /**\\n     * This method is like `_.set` except that accepts `updater` to produce the\\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\\n     * is invoked with one argument: (value).\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.6.0\\n     * @category Object\\n     * @param {Object} object The object to modify.\\n     * @param {Array|string} path The path of the property to set.\\n     * @param {Function} updater The function to produce the updated value.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\\n     *\\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\\n     * console.log(object.a[0].b.c);\\n     * // => 9\\n     *\\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\\n     * console.log(object.x[0].y.z);\\n     * // => 0\\n     */\\n    function update(object, path, updater) {\\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\\n    }\\n\\n    /**\\n     * This method is like `_.update` except that it accepts `customizer` which is\\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\\n     * path creation is handled by the method instead. The `customizer` is invoked\\n     * with three arguments: (nsValue, key, nsObject).\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.6.0\\n     * @category Object\\n     * @param {Object} object The object to modify.\\n     * @param {Array|string} path The path of the property to set.\\n     * @param {Function} updater The function to produce the updated value.\\n     * @param {Function} [customizer] The function to customize assigned values.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var object = {};\\n     *\\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\\n     * // => { '0': { '1': 'a' } }\\n     */\\n    function updateWith(object, path, updater, customizer) {\\n      customizer = typeof customizer == 'function' ? customizer : undefined;\\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\\n    }\\n\\n    /**\\n     * Creates an array of the own enumerable string keyed property values of `object`.\\n     *\\n     * **Note:** Non-object values are coerced to objects.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property values.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.values(new Foo);\\n     * // => [1, 2] (iteration order is not guaranteed)\\n     *\\n     * _.values('hi');\\n     * // => ['h', 'i']\\n     */\\n    function values(object) {\\n      return object == null ? [] : baseValues(object, keys(object));\\n    }\\n\\n    /**\\n     * Creates an array of the own and inherited enumerable string keyed property\\n     * values of `object`.\\n     *\\n     * **Note:** Non-object values are coerced to objects.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property values.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.valuesIn(new Foo);\\n     * // => [1, 2, 3] (iteration order is not guaranteed)\\n     */\\n    function valuesIn(object) {\\n      return object == null ? [] : baseValues(object, keysIn(object));\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Number\\n     * @param {number} number The number to clamp.\\n     * @param {number} [lower] The lower bound.\\n     * @param {number} upper The upper bound.\\n     * @returns {number} Returns the clamped number.\\n     * @example\\n     *\\n     * _.clamp(-10, -5, 5);\\n     * // => -5\\n     *\\n     * _.clamp(10, -5, 5);\\n     * // => 5\\n     */\\n    function clamp(number, lower, upper) {\\n      if (upper === undefined) {\\n        upper = lower;\\n        lower = undefined;\\n      }\\n      if (upper !== undefined) {\\n        upper = toNumber(upper);\\n        upper = upper === upper ? upper : 0;\\n      }\\n      if (lower !== undefined) {\\n        lower = toNumber(lower);\\n        lower = lower === lower ? lower : 0;\\n      }\\n      return baseClamp(toNumber(number), lower, upper);\\n    }\\n\\n    /**\\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\\n     * If `start` is greater than `end` the params are swapped to support\\n     * negative ranges.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.3.0\\n     * @category Number\\n     * @param {number} number The number to check.\\n     * @param {number} [start=0] The start of the range.\\n     * @param {number} end The end of the range.\\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\\n     * @see _.range, _.rangeRight\\n     * @example\\n     *\\n     * _.inRange(3, 2, 4);\\n     * // => true\\n     *\\n     * _.inRange(4, 8);\\n     * // => true\\n     *\\n     * _.inRange(4, 2);\\n     * // => false\\n     *\\n     * _.inRange(2, 2);\\n     * // => false\\n     *\\n     * _.inRange(1.2, 2);\\n     * // => true\\n     *\\n     * _.inRange(5.2, 4);\\n     * // => false\\n     *\\n     * _.inRange(-3, -2, -6);\\n     * // => true\\n     */\\n    function inRange(number, start, end) {\\n      start = toFinite(start);\\n      if (end === undefined) {\\n        end = start;\\n        start = 0;\\n      } else {\\n        end = toFinite(end);\\n      }\\n      number = toNumber(number);\\n      return baseInRange(number, start, end);\\n    }\\n\\n    /**\\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\\n     * If only one argument is provided a number between `0` and the given number\\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\\n     * floats, a floating-point number is returned instead of an integer.\\n     *\\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\\n     * floating-point values which can produce unexpected results.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.7.0\\n     * @category Number\\n     * @param {number} [lower=0] The lower bound.\\n     * @param {number} [upper=1] The upper bound.\\n     * @param {boolean} [floating] Specify returning a floating-point number.\\n     * @returns {number} Returns the random number.\\n     * @example\\n     *\\n     * _.random(0, 5);\\n     * // => an integer between 0 and 5\\n     *\\n     * _.random(5);\\n     * // => also an integer between 0 and 5\\n     *\\n     * _.random(5, true);\\n     * // => a floating-point number between 0 and 5\\n     *\\n     * _.random(1.2, 5.2);\\n     * // => a floating-point number between 1.2 and 5.2\\n     */\\n    function random(lower, upper, floating) {\\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\\n        upper = floating = undefined;\\n      }\\n      if (floating === undefined) {\\n        if (typeof upper == 'boolean') {\\n          floating = upper;\\n          upper = undefined;\\n        }\\n        else if (typeof lower == 'boolean') {\\n          floating = lower;\\n          lower = undefined;\\n        }\\n      }\\n      if (lower === undefined && upper === undefined) {\\n        lower = 0;\\n        upper = 1;\\n      }\\n      else {\\n        lower = toFinite(lower);\\n        if (upper === undefined) {\\n          upper = lower;\\n          lower = 0;\\n        } else {\\n          upper = toFinite(upper);\\n        }\\n      }\\n      if (lower > upper) {\\n        var temp = lower;\\n        lower = upper;\\n        upper = temp;\\n      }\\n      if (floating || lower % 1 || upper % 1) {\\n        var rand = nativeRandom();\\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\\n      }\\n      return baseRandom(lower, upper);\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the camel cased string.\\n     * @example\\n     *\\n     * _.camelCase('Foo Bar');\\n     * // => 'fooBar'\\n     *\\n     * _.camelCase('--foo-bar--');\\n     * // => 'fooBar'\\n     *\\n     * _.camelCase('__FOO_BAR__');\\n     * // => 'fooBar'\\n     */\\n    var camelCase = createCompounder(function(result, word, index) {\\n      word = word.toLowerCase();\\n      return result + (index ? capitalize(word) : word);\\n    });\\n\\n    /**\\n     * Converts the first character of `string` to upper case and the remaining\\n     * to lower case.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to capitalize.\\n     * @returns {string} Returns the capitalized string.\\n     * @example\\n     *\\n     * _.capitalize('FRED');\\n     * // => 'Fred'\\n     */\\n    function capitalize(string) {\\n      return upperFirst(toString(string).toLowerCase());\\n    }\\n\\n    /**\\n     * Deburrs `string` by converting\\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\\n     * letters to basic Latin letters and removing\\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to deburr.\\n     * @returns {string} Returns the deburred string.\\n     * @example\\n     *\\n     * _.deburr('déjà vu');\\n     * // => 'deja vu'\\n     */\\n    function deburr(string) {\\n      string = toString(string);\\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\\n    }\\n\\n    /**\\n     * Checks if `string` ends with the given target string.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to inspect.\\n     * @param {string} [target] The string to search for.\\n     * @param {number} [position=string.length] The position to search up to.\\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.endsWith('abc', 'c');\\n     * // => true\\n     *\\n     * _.endsWith('abc', 'b');\\n     * // => false\\n     *\\n     * _.endsWith('abc', 'b', 2);\\n     * // => true\\n     */\\n    function endsWith(string, target, position) {\\n      string = toString(string);\\n      target = baseToString(target);\\n\\n      var length = string.length;\\n      position = position === undefined\\n        ? length\\n        : baseClamp(toInteger(position), 0, length);\\n\\n      var end = position;\\n      position -= target.length;\\n      return position >= 0 && string.slice(position, end) == target;\\n    }\\n\\n    /**\\n     * Converts the characters \\\"&\\\", \\\"<\\\", \\\">\\\", '\\\"', and \\\"'\\\" in `string` to their\\n     * corresponding HTML entities.\\n     *\\n     * **Note:** No other characters are escaped. To escape additional\\n     * characters use a third-party library like [_he_](https://mths.be/he).\\n     *\\n     * Though the \\\">\\\" character is escaped for symmetry, characters like\\n     * \\\">\\\" and \\\"/\\\" don't need escaping in HTML and have no special meaning\\n     * unless they're part of a tag or unquoted attribute value. See\\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\\n     * (under \\\"semi-related fun fact\\\") for more details.\\n     *\\n     * When working with HTML you should always\\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\\n     * XSS vectors.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to escape.\\n     * @returns {string} Returns the escaped string.\\n     * @example\\n     *\\n     * _.escape('fred, barney, & pebbles');\\n     * // => 'fred, barney, &amp; pebbles'\\n     */\\n    function escape(string) {\\n      string = toString(string);\\n      return (string && reHasUnescapedHtml.test(string))\\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\\n        : string;\\n    }\\n\\n    /**\\n     * Escapes the `RegExp` special characters \\\"^\\\", \\\"$\\\", \\\"\\\\\\\", \\\".\\\", \\\"*\\\", \\\"+\\\",\\n     * \\\"?\\\", \\\"(\\\", \\\")\\\", \\\"[\\\", \\\"]\\\", \\\"{\\\", \\\"}\\\", and \\\"|\\\" in `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to escape.\\n     * @returns {string} Returns the escaped string.\\n     * @example\\n     *\\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\\n     * // => '\\\\[lodash\\\\]\\\\(https://lodash\\\\.com/\\\\)'\\n     */\\n    function escapeRegExp(string) {\\n      string = toString(string);\\n      return (string && reHasRegExpChar.test(string))\\n        ? string.replace(reRegExpChar, '\\\\\\\\$&')\\n        : string;\\n    }\\n\\n    /**\\n     * Converts `string` to\\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the kebab cased string.\\n     * @example\\n     *\\n     * _.kebabCase('Foo Bar');\\n     * // => 'foo-bar'\\n     *\\n     * _.kebabCase('fooBar');\\n     * // => 'foo-bar'\\n     *\\n     * _.kebabCase('__FOO_BAR__');\\n     * // => 'foo-bar'\\n     */\\n    var kebabCase = createCompounder(function(result, word, index) {\\n      return result + (index ? '-' : '') + word.toLowerCase();\\n    });\\n\\n    /**\\n     * Converts `string`, as space separated words, to lower case.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the lower cased string.\\n     * @example\\n     *\\n     * _.lowerCase('--Foo-Bar--');\\n     * // => 'foo bar'\\n     *\\n     * _.lowerCase('fooBar');\\n     * // => 'foo bar'\\n     *\\n     * _.lowerCase('__FOO_BAR__');\\n     * // => 'foo bar'\\n     */\\n    var lowerCase = createCompounder(function(result, word, index) {\\n      return result + (index ? ' ' : '') + word.toLowerCase();\\n    });\\n\\n    /**\\n     * Converts the first character of `string` to lower case.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the converted string.\\n     * @example\\n     *\\n     * _.lowerFirst('Fred');\\n     * // => 'fred'\\n     *\\n     * _.lowerFirst('FRED');\\n     * // => 'fRED'\\n     */\\n    var lowerFirst = createCaseFirst('toLowerCase');\\n\\n    /**\\n     * Pads `string` on the left and right sides if it's shorter than `length`.\\n     * Padding characters are truncated if they can't be evenly divided by `length`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to pad.\\n     * @param {number} [length=0] The padding length.\\n     * @param {string} [chars=' '] The string used as padding.\\n     * @returns {string} Returns the padded string.\\n     * @example\\n     *\\n     * _.pad('abc', 8);\\n     * // => '  abc   '\\n     *\\n     * _.pad('abc', 8, '_-');\\n     * // => '_-abc_-_'\\n     *\\n     * _.pad('abc', 3);\\n     * // => 'abc'\\n     */\\n    function pad(string, length, chars) {\\n      string = toString(string);\\n      length = toInteger(length);\\n\\n      var strLength = length ? stringSize(string) : 0;\\n      if (!length || strLength >= length) {\\n        return string;\\n      }\\n      var mid = (length - strLength) / 2;\\n      return (\\n        createPadding(nativeFloor(mid), chars) +\\n        string +\\n        createPadding(nativeCeil(mid), chars)\\n      );\\n    }\\n\\n    /**\\n     * Pads `string` on the right side if it's shorter than `length`. Padding\\n     * characters are truncated if they exceed `length`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to pad.\\n     * @param {number} [length=0] The padding length.\\n     * @param {string} [chars=' '] The string used as padding.\\n     * @returns {string} Returns the padded string.\\n     * @example\\n     *\\n     * _.padEnd('abc', 6);\\n     * // => 'abc   '\\n     *\\n     * _.padEnd('abc', 6, '_-');\\n     * // => 'abc_-_'\\n     *\\n     * _.padEnd('abc', 3);\\n     * // => 'abc'\\n     */\\n    function padEnd(string, length, chars) {\\n      string = toString(string);\\n      length = toInteger(length);\\n\\n      var strLength = length ? stringSize(string) : 0;\\n      return (length && strLength < length)\\n        ? (string + createPadding(length - strLength, chars))\\n        : string;\\n    }\\n\\n    /**\\n     * Pads `string` on the left side if it's shorter than `length`. Padding\\n     * characters are truncated if they exceed `length`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to pad.\\n     * @param {number} [length=0] The padding length.\\n     * @param {string} [chars=' '] The string used as padding.\\n     * @returns {string} Returns the padded string.\\n     * @example\\n     *\\n     * _.padStart('abc', 6);\\n     * // => '   abc'\\n     *\\n     * _.padStart('abc', 6, '_-');\\n     * // => '_-_abc'\\n     *\\n     * _.padStart('abc', 3);\\n     * // => 'abc'\\n     */\\n    function padStart(string, length, chars) {\\n      string = toString(string);\\n      length = toInteger(length);\\n\\n      var strLength = length ? stringSize(string) : 0;\\n      return (length && strLength < length)\\n        ? (createPadding(length - strLength, chars) + string)\\n        : string;\\n    }\\n\\n    /**\\n     * Converts `string` to an integer of the specified radix. If `radix` is\\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\\n     * hexadecimal, in which case a `radix` of `16` is used.\\n     *\\n     * **Note:** This method aligns with the\\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.1.0\\n     * @category String\\n     * @param {string} string The string to convert.\\n     * @param {number} [radix=10] The radix to interpret `value` by.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {number} Returns the converted integer.\\n     * @example\\n     *\\n     * _.parseInt('08');\\n     * // => 8\\n     *\\n     * _.map(['6', '08', '10'], _.parseInt);\\n     * // => [6, 8, 10]\\n     */\\n    function parseInt(string, radix, guard) {\\n      if (guard || radix == null) {\\n        radix = 0;\\n      } else if (radix) {\\n        radix = +radix;\\n      }\\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\\n    }\\n\\n    /**\\n     * Repeats the given string `n` times.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to repeat.\\n     * @param {number} [n=1] The number of times to repeat the string.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {string} Returns the repeated string.\\n     * @example\\n     *\\n     * _.repeat('*', 3);\\n     * // => '***'\\n     *\\n     * _.repeat('abc', 2);\\n     * // => 'abcabc'\\n     *\\n     * _.repeat('abc', 0);\\n     * // => ''\\n     */\\n    function repeat(string, n, guard) {\\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\\n        n = 1;\\n      } else {\\n        n = toInteger(n);\\n      }\\n      return baseRepeat(toString(string), n);\\n    }\\n\\n    /**\\n     * Replaces matches for `pattern` in `string` with `replacement`.\\n     *\\n     * **Note:** This method is based on\\n     * [`String#replace`](https://mdn.io/String/replace).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to modify.\\n     * @param {RegExp|string} pattern The pattern to replace.\\n     * @param {Function|string} replacement The match replacement.\\n     * @returns {string} Returns the modified string.\\n     * @example\\n     *\\n     * _.replace('Hi Fred', 'Fred', 'Barney');\\n     * // => 'Hi Barney'\\n     */\\n    function replace() {\\n      var args = arguments,\\n          string = toString(args[0]);\\n\\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\\n    }\\n\\n    /**\\n     * Converts `string` to\\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the snake cased string.\\n     * @example\\n     *\\n     * _.snakeCase('Foo Bar');\\n     * // => 'foo_bar'\\n     *\\n     * _.snakeCase('fooBar');\\n     * // => 'foo_bar'\\n     *\\n     * _.snakeCase('--FOO-BAR--');\\n     * // => 'foo_bar'\\n     */\\n    var snakeCase = createCompounder(function(result, word, index) {\\n      return result + (index ? '_' : '') + word.toLowerCase();\\n    });\\n\\n    /**\\n     * Splits `string` by `separator`.\\n     *\\n     * **Note:** This method is based on\\n     * [`String#split`](https://mdn.io/String/split).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to split.\\n     * @param {RegExp|string} separator The separator pattern to split by.\\n     * @param {number} [limit] The length to truncate results to.\\n     * @returns {Array} Returns the string segments.\\n     * @example\\n     *\\n     * _.split('a-b-c', '-', 2);\\n     * // => ['a', 'b']\\n     */\\n    function split(string, separator, limit) {\\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\\n        separator = limit = undefined;\\n      }\\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\\n      if (!limit) {\\n        return [];\\n      }\\n      string = toString(string);\\n      if (string && (\\n            typeof separator == 'string' ||\\n            (separator != null && !isRegExp(separator))\\n          )) {\\n        separator = baseToString(separator);\\n        if (!separator && hasUnicode(string)) {\\n          return castSlice(stringToArray(string), 0, limit);\\n        }\\n      }\\n      return string.split(separator, limit);\\n    }\\n\\n    /**\\n     * Converts `string` to\\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.1.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the start cased string.\\n     * @example\\n     *\\n     * _.startCase('--foo-bar--');\\n     * // => 'Foo Bar'\\n     *\\n     * _.startCase('fooBar');\\n     * // => 'Foo Bar'\\n     *\\n     * _.startCase('__FOO_BAR__');\\n     * // => 'FOO BAR'\\n     */\\n    var startCase = createCompounder(function(result, word, index) {\\n      return result + (index ? ' ' : '') + upperFirst(word);\\n    });\\n\\n    /**\\n     * Checks if `string` starts with the given target string.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to inspect.\\n     * @param {string} [target] The string to search for.\\n     * @param {number} [position=0] The position to search from.\\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.startsWith('abc', 'a');\\n     * // => true\\n     *\\n     * _.startsWith('abc', 'b');\\n     * // => false\\n     *\\n     * _.startsWith('abc', 'b', 1);\\n     * // => true\\n     */\\n    function startsWith(string, target, position) {\\n      string = toString(string);\\n      position = baseClamp(toInteger(position), 0, string.length);\\n      target = baseToString(target);\\n      return string.slice(position, position + target.length) == target;\\n    }\\n\\n    /**\\n     * Creates a compiled template function that can interpolate data properties\\n     * in \\\"interpolate\\\" delimiters, HTML-escape interpolated data properties in\\n     * \\\"escape\\\" delimiters, and execute JavaScript in \\\"evaluate\\\" delimiters. Data\\n     * properties may be accessed as free variables in the template. If a setting\\n     * object is given, it takes precedence over `_.templateSettings` values.\\n     *\\n     * **Note:** In the development build `_.template` utilizes\\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\\n     * for easier debugging.\\n     *\\n     * For more information on precompiling templates see\\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\\n     *\\n     * For more information on Chrome extension sandboxes see\\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The template string.\\n     * @param {Object} [options={}] The options object.\\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\\n     *  The HTML \\\"escape\\\" delimiter.\\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\\n     *  The \\\"evaluate\\\" delimiter.\\n     * @param {Object} [options.imports=_.templateSettings.imports]\\n     *  An object to import into the template as free variables.\\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\\n     *  The \\\"interpolate\\\" delimiter.\\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\\n     *  The sourceURL of the compiled template.\\n     * @param {string} [options.variable='obj']\\n     *  The data object variable name.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Function} Returns the compiled template function.\\n     * @example\\n     *\\n     * // Use the \\\"interpolate\\\" delimiter to create a compiled template.\\n     * var compiled = _.template('hello <%= user %>!');\\n     * compiled({ 'user': 'fred' });\\n     * // => 'hello fred!'\\n     *\\n     * // Use the HTML \\\"escape\\\" delimiter to escape data property values.\\n     * var compiled = _.template('<b><%- value %></b>');\\n     * compiled({ 'value': '<script>' });\\n     * // => '<b>&lt;script&gt;</b>'\\n     *\\n     * // Use the \\\"evaluate\\\" delimiter to execute JavaScript and generate HTML.\\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\\n     * compiled({ 'users': ['fred', 'barney'] });\\n     * // => '<li>fred</li><li>barney</li>'\\n     *\\n     * // Use the internal `print` function in \\\"evaluate\\\" delimiters.\\n     * var compiled = _.template('<% print(\\\"hello \\\" + user); %>!');\\n     * compiled({ 'user': 'barney' });\\n     * // => 'hello barney!'\\n     *\\n     * // Use the ES template literal delimiter as an \\\"interpolate\\\" delimiter.\\n     * // Disable support by replacing the \\\"interpolate\\\" delimiter.\\n     * var compiled = _.template('hello ${ user }!');\\n     * compiled({ 'user': 'pebbles' });\\n     * // => 'hello pebbles!'\\n     *\\n     * // Use backslashes to treat delimiters as plain text.\\n     * var compiled = _.template('<%= \\\"\\\\\\\\<%- value %\\\\\\\\>\\\" %>');\\n     * compiled({ 'value': 'ignored' });\\n     * // => '<%- value %>'\\n     *\\n     * // Use the `imports` option to import `jQuery` as `jq`.\\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\\n     * compiled({ 'users': ['fred', 'barney'] });\\n     * // => '<li>fred</li><li>barney</li>'\\n     *\\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\\n     * compiled(data);\\n     * // => Find the source of \\\"greeting.jst\\\" under the Sources tab or Resources panel of the web inspector.\\n     *\\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\\n     * compiled.source;\\n     * // => function(data) {\\n     * //   var __t, __p = '';\\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\\n     * //   return __p;\\n     * // }\\n     *\\n     * // Use custom template delimiters.\\n     * _.templateSettings.interpolate = /{{([\\\\s\\\\S]+?)}}/g;\\n     * var compiled = _.template('hello {{ user }}!');\\n     * compiled({ 'user': 'mustache' });\\n     * // => 'hello mustache!'\\n     *\\n     * // Use the `source` property to inline compiled templates for meaningful\\n     * // line numbers in error messages and stack traces.\\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\\\\n     *   var JST = {\\\\\\n     *     \\\"main\\\": ' + _.template(mainText).source + '\\\\\\n     *   };\\\\\\n     * ');\\n     */\\n    function template(string, options, guard) {\\n      // Based on John Resig's `tmpl` implementation\\n      // (http://ejohn.org/blog/javascript-micro-templating/)\\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\\n      var settings = lodash.templateSettings;\\n\\n      if (guard && isIterateeCall(string, options, guard)) {\\n        options = undefined;\\n      }\\n      string = toString(string);\\n      options = assignInWith({}, options, settings, assignInDefaults);\\n\\n      var imports = assignInWith({}, options.imports, settings.imports, assignInDefaults),\\n          importsKeys = keys(imports),\\n          importsValues = baseValues(imports, importsKeys);\\n\\n      var isEscaping,\\n          isEvaluating,\\n          index = 0,\\n          interpolate = options.interpolate || reNoMatch,\\n          source = \\\"__p += '\\\";\\n\\n      // Compile the regexp to match each delimiter.\\n      var reDelimiters = RegExp(\\n        (options.escape || reNoMatch).source + '|' +\\n        interpolate.source + '|' +\\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\\n        (options.evaluate || reNoMatch).source + '|$'\\n      , 'g');\\n\\n      // Use a sourceURL for easier debugging.\\n      var sourceURL = '//# sourceURL=' +\\n        ('sourceURL' in options\\n          ? options.sourceURL\\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\\n        ) + '\\\\n';\\n\\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\\n        interpolateValue || (interpolateValue = esTemplateValue);\\n\\n        // Escape characters that can't be included in string literals.\\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\\n\\n        // Replace delimiters with snippets.\\n        if (escapeValue) {\\n          isEscaping = true;\\n          source += \\\"' +\\\\n__e(\\\" + escapeValue + \\\") +\\\\n'\\\";\\n        }\\n        if (evaluateValue) {\\n          isEvaluating = true;\\n          source += \\\"';\\\\n\\\" + evaluateValue + \\\";\\\\n__p += '\\\";\\n        }\\n        if (interpolateValue) {\\n          source += \\\"' +\\\\n((__t = (\\\" + interpolateValue + \\\")) == null ? '' : __t) +\\\\n'\\\";\\n        }\\n        index = offset + match.length;\\n\\n        // The JS engine embedded in Adobe products needs `match` returned in\\n        // order to produce the correct `offset` value.\\n        return match;\\n      });\\n\\n      source += \\\"';\\\\n\\\";\\n\\n      // If `variable` is not specified wrap a with-statement around the generated\\n      // code to add the data object to the top of the scope chain.\\n      var variable = options.variable;\\n      if (!variable) {\\n        source = 'with (obj) {\\\\n' + source + '\\\\n}\\\\n';\\n      }\\n      // Cleanup code by stripping empty strings.\\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\\n        .replace(reEmptyStringMiddle, '$1')\\n        .replace(reEmptyStringTrailing, '$1;');\\n\\n      // Frame code as the function body.\\n      source = 'function(' + (variable || 'obj') + ') {\\\\n' +\\n        (variable\\n          ? ''\\n          : 'obj || (obj = {});\\\\n'\\n        ) +\\n        \\\"var __t, __p = ''\\\" +\\n        (isEscaping\\n           ? ', __e = _.escape'\\n           : ''\\n        ) +\\n        (isEvaluating\\n          ? ', __j = Array.prototype.join;\\\\n' +\\n            \\\"function print() { __p += __j.call(arguments, '') }\\\\n\\\"\\n          : ';\\\\n'\\n        ) +\\n        source +\\n        'return __p\\\\n}';\\n\\n      var result = attempt(function() {\\n        return Function(importsKeys, sourceURL + 'return ' + source)\\n          .apply(undefined, importsValues);\\n      });\\n\\n      // Provide the compiled function's source by its `toString` method or\\n      // the `source` property as a convenience for inlining compiled templates.\\n      result.source = source;\\n      if (isError(result)) {\\n        throw result;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Converts `string`, as a whole, to lower case just like\\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the lower cased string.\\n     * @example\\n     *\\n     * _.toLower('--Foo-Bar--');\\n     * // => '--foo-bar--'\\n     *\\n     * _.toLower('fooBar');\\n     * // => 'foobar'\\n     *\\n     * _.toLower('__FOO_BAR__');\\n     * // => '__foo_bar__'\\n     */\\n    function toLower(value) {\\n      return toString(value).toLowerCase();\\n    }\\n\\n    /**\\n     * Converts `string`, as a whole, to upper case just like\\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the upper cased string.\\n     * @example\\n     *\\n     * _.toUpper('--foo-bar--');\\n     * // => '--FOO-BAR--'\\n     *\\n     * _.toUpper('fooBar');\\n     * // => 'FOOBAR'\\n     *\\n     * _.toUpper('__foo_bar__');\\n     * // => '__FOO_BAR__'\\n     */\\n    function toUpper(value) {\\n      return toString(value).toUpperCase();\\n    }\\n\\n    /**\\n     * Removes leading and trailing whitespace or specified characters from `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to trim.\\n     * @param {string} [chars=whitespace] The characters to trim.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {string} Returns the trimmed string.\\n     * @example\\n     *\\n     * _.trim('  abc  ');\\n     * // => 'abc'\\n     *\\n     * _.trim('-_-abc-_-', '_-');\\n     * // => 'abc'\\n     *\\n     * _.map(['  foo  ', '  bar  '], _.trim);\\n     * // => ['foo', 'bar']\\n     */\\n    function trim(string, chars, guard) {\\n      string = toString(string);\\n      if (string && (guard || chars === undefined)) {\\n        return string.replace(reTrim, '');\\n      }\\n      if (!string || !(chars = baseToString(chars))) {\\n        return string;\\n      }\\n      var strSymbols = stringToArray(string),\\n          chrSymbols = stringToArray(chars),\\n          start = charsStartIndex(strSymbols, chrSymbols),\\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\\n\\n      return castSlice(strSymbols, start, end).join('');\\n    }\\n\\n    /**\\n     * Removes trailing whitespace or specified characters from `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to trim.\\n     * @param {string} [chars=whitespace] The characters to trim.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {string} Returns the trimmed string.\\n     * @example\\n     *\\n     * _.trimEnd('  abc  ');\\n     * // => '  abc'\\n     *\\n     * _.trimEnd('-_-abc-_-', '_-');\\n     * // => '-_-abc'\\n     */\\n    function trimEnd(string, chars, guard) {\\n      string = toString(string);\\n      if (string && (guard || chars === undefined)) {\\n        return string.replace(reTrimEnd, '');\\n      }\\n      if (!string || !(chars = baseToString(chars))) {\\n        return string;\\n      }\\n      var strSymbols = stringToArray(string),\\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\\n\\n      return castSlice(strSymbols, 0, end).join('');\\n    }\\n\\n    /**\\n     * Removes leading whitespace or specified characters from `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to trim.\\n     * @param {string} [chars=whitespace] The characters to trim.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {string} Returns the trimmed string.\\n     * @example\\n     *\\n     * _.trimStart('  abc  ');\\n     * // => 'abc  '\\n     *\\n     * _.trimStart('-_-abc-_-', '_-');\\n     * // => 'abc-_-'\\n     */\\n    function trimStart(string, chars, guard) {\\n      string = toString(string);\\n      if (string && (guard || chars === undefined)) {\\n        return string.replace(reTrimStart, '');\\n      }\\n      if (!string || !(chars = baseToString(chars))) {\\n        return string;\\n      }\\n      var strSymbols = stringToArray(string),\\n          start = charsStartIndex(strSymbols, stringToArray(chars));\\n\\n      return castSlice(strSymbols, start).join('');\\n    }\\n\\n    /**\\n     * Truncates `string` if it's longer than the given maximum string length.\\n     * The last characters of the truncated string are replaced with the omission\\n     * string which defaults to \\\"...\\\".\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to truncate.\\n     * @param {Object} [options={}] The options object.\\n     * @param {number} [options.length=30] The maximum string length.\\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\\n     * @returns {string} Returns the truncated string.\\n     * @example\\n     *\\n     * _.truncate('hi-diddly-ho there, neighborino');\\n     * // => 'hi-diddly-ho there, neighbo...'\\n     *\\n     * _.truncate('hi-diddly-ho there, neighborino', {\\n     *   'length': 24,\\n     *   'separator': ' '\\n     * });\\n     * // => 'hi-diddly-ho there,...'\\n     *\\n     * _.truncate('hi-diddly-ho there, neighborino', {\\n     *   'length': 24,\\n     *   'separator': /,? +/\\n     * });\\n     * // => 'hi-diddly-ho there...'\\n     *\\n     * _.truncate('hi-diddly-ho there, neighborino', {\\n     *   'omission': ' [...]'\\n     * });\\n     * // => 'hi-diddly-ho there, neig [...]'\\n     */\\n    function truncate(string, options) {\\n      var length = DEFAULT_TRUNC_LENGTH,\\n          omission = DEFAULT_TRUNC_OMISSION;\\n\\n      if (isObject(options)) {\\n        var separator = 'separator' in options ? options.separator : separator;\\n        length = 'length' in options ? toInteger(options.length) : length;\\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\\n      }\\n      string = toString(string);\\n\\n      var strLength = string.length;\\n      if (hasUnicode(string)) {\\n        var strSymbols = stringToArray(string);\\n        strLength = strSymbols.length;\\n      }\\n      if (length >= strLength) {\\n        return string;\\n      }\\n      var end = length - stringSize(omission);\\n      if (end < 1) {\\n        return omission;\\n      }\\n      var result = strSymbols\\n        ? castSlice(strSymbols, 0, end).join('')\\n        : string.slice(0, end);\\n\\n      if (separator === undefined) {\\n        return result + omission;\\n      }\\n      if (strSymbols) {\\n        end += (result.length - end);\\n      }\\n      if (isRegExp(separator)) {\\n        if (string.slice(end).search(separator)) {\\n          var match,\\n              substring = result;\\n\\n          if (!separator.global) {\\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\\n          }\\n          separator.lastIndex = 0;\\n          while ((match = separator.exec(substring))) {\\n            var newEnd = match.index;\\n          }\\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\\n        }\\n      } else if (string.indexOf(baseToString(separator), end) != end) {\\n        var index = result.lastIndexOf(separator);\\n        if (index > -1) {\\n          result = result.slice(0, index);\\n        }\\n      }\\n      return result + omission;\\n    }\\n\\n    /**\\n     * The inverse of `_.escape`; this method converts the HTML entities\\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\\n     * their corresponding characters.\\n     *\\n     * **Note:** No other HTML entities are unescaped. To unescape additional\\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.6.0\\n     * @category String\\n     * @param {string} [string=''] The string to unescape.\\n     * @returns {string} Returns the unescaped string.\\n     * @example\\n     *\\n     * _.unescape('fred, barney, &amp; pebbles');\\n     * // => 'fred, barney, & pebbles'\\n     */\\n    function unescape(string) {\\n      string = toString(string);\\n      return (string && reHasEscapedHtml.test(string))\\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\\n        : string;\\n    }\\n\\n    /**\\n     * Converts `string`, as space separated words, to upper case.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the upper cased string.\\n     * @example\\n     *\\n     * _.upperCase('--foo-bar');\\n     * // => 'FOO BAR'\\n     *\\n     * _.upperCase('fooBar');\\n     * // => 'FOO BAR'\\n     *\\n     * _.upperCase('__foo_bar__');\\n     * // => 'FOO BAR'\\n     */\\n    var upperCase = createCompounder(function(result, word, index) {\\n      return result + (index ? ' ' : '') + word.toUpperCase();\\n    });\\n\\n    /**\\n     * Converts the first character of `string` to upper case.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the converted string.\\n     * @example\\n     *\\n     * _.upperFirst('fred');\\n     * // => 'Fred'\\n     *\\n     * _.upperFirst('FRED');\\n     * // => 'FRED'\\n     */\\n    var upperFirst = createCaseFirst('toUpperCase');\\n\\n    /**\\n     * Splits `string` into an array of its words.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to inspect.\\n     * @param {RegExp|string} [pattern] The pattern to match words.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Array} Returns the words of `string`.\\n     * @example\\n     *\\n     * _.words('fred, barney, & pebbles');\\n     * // => ['fred', 'barney', 'pebbles']\\n     *\\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\\n     * // => ['fred', 'barney', '&', 'pebbles']\\n     */\\n    function words(string, pattern, guard) {\\n      string = toString(string);\\n      pattern = guard ? undefined : pattern;\\n\\n      if (pattern === undefined) {\\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\\n      }\\n      return string.match(pattern) || [];\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Attempts to invoke `func`, returning either the result or the caught error\\n     * object. Any additional arguments are provided to `func` when it's invoked.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Util\\n     * @param {Function} func The function to attempt.\\n     * @param {...*} [args] The arguments to invoke `func` with.\\n     * @returns {*} Returns the `func` result or error object.\\n     * @example\\n     *\\n     * // Avoid throwing errors for invalid selectors.\\n     * var elements = _.attempt(function(selector) {\\n     *   return document.querySelectorAll(selector);\\n     * }, '>_>');\\n     *\\n     * if (_.isError(elements)) {\\n     *   elements = [];\\n     * }\\n     */\\n    var attempt = baseRest(function(func, args) {\\n      try {\\n        return apply(func, undefined, args);\\n      } catch (e) {\\n        return isError(e) ? e : new Error(e);\\n      }\\n    });\\n\\n    /**\\n     * Binds methods of an object to the object itself, overwriting the existing\\n     * method.\\n     *\\n     * **Note:** This method doesn't set the \\\"length\\\" property of bound functions.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Util\\n     * @param {Object} object The object to bind and assign the bound methods to.\\n     * @param {...(string|string[])} methodNames The object method names to bind.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var view = {\\n     *   'label': 'docs',\\n     *   'click': function() {\\n     *     console.log('clicked ' + this.label);\\n     *   }\\n     * };\\n     *\\n     * _.bindAll(view, ['click']);\\n     * jQuery(element).on('click', view.click);\\n     * // => Logs 'clicked docs' when clicked.\\n     */\\n    var bindAll = flatRest(function(object, methodNames) {\\n      arrayEach(methodNames, function(key) {\\n        key = toKey(key);\\n        baseAssignValue(object, key, bind(object[key], object));\\n      });\\n      return object;\\n    });\\n\\n    /**\\n     * Creates a function that iterates over `pairs` and invokes the corresponding\\n     * function of the first predicate to return truthy. The predicate-function\\n     * pairs are invoked with the `this` binding and arguments of the created\\n     * function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Util\\n     * @param {Array} pairs The predicate-function pairs.\\n     * @returns {Function} Returns the new composite function.\\n     * @example\\n     *\\n     * var func = _.cond([\\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\\n     *   [_.stubTrue,                      _.constant('no match')]\\n     * ]);\\n     *\\n     * func({ 'a': 1, 'b': 2 });\\n     * // => 'matches A'\\n     *\\n     * func({ 'a': 0, 'b': 1 });\\n     * // => 'matches B'\\n     *\\n     * func({ 'a': '1', 'b': '2' });\\n     * // => 'no match'\\n     */\\n    function cond(pairs) {\\n      var length = pairs == null ? 0 : pairs.length,\\n          toIteratee = getIteratee();\\n\\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\\n        if (typeof pair[1] != 'function') {\\n          throw new TypeError(FUNC_ERROR_TEXT);\\n        }\\n        return [toIteratee(pair[0]), pair[1]];\\n      });\\n\\n      return baseRest(function(args) {\\n        var index = -1;\\n        while (++index < length) {\\n          var pair = pairs[index];\\n          if (apply(pair[0], this, args)) {\\n            return apply(pair[1], this, args);\\n          }\\n        }\\n      });\\n    }\\n\\n    /**\\n     * Creates a function that invokes the predicate properties of `source` with\\n     * the corresponding property values of a given object, returning `true` if\\n     * all predicates return truthy, else `false`.\\n     *\\n     * **Note:** The created function is equivalent to `_.conformsTo` with\\n     * `source` partially applied.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Util\\n     * @param {Object} source The object of property predicates to conform to.\\n     * @returns {Function} Returns the new spec function.\\n     * @example\\n     *\\n     * var objects = [\\n     *   { 'a': 2, 'b': 1 },\\n     *   { 'a': 1, 'b': 2 }\\n     * ];\\n     *\\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\\n     * // => [{ 'a': 1, 'b': 2 }]\\n     */\\n    function conforms(source) {\\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\\n    }\\n\\n    /**\\n     * Creates a function that returns `value`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.4.0\\n     * @category Util\\n     * @param {*} value The value to return from the new function.\\n     * @returns {Function} Returns the new constant function.\\n     * @example\\n     *\\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\\n     *\\n     * console.log(objects);\\n     * // => [{ 'a': 1 }, { 'a': 1 }]\\n     *\\n     * console.log(objects[0] === objects[1]);\\n     * // => true\\n     */\\n    function constant(value) {\\n      return function() {\\n        return value;\\n      };\\n    }\\n\\n    /**\\n     * Checks `value` to determine whether a default value should be returned in\\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\\n     * or `undefined`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.14.0\\n     * @category Util\\n     * @param {*} value The value to check.\\n     * @param {*} defaultValue The default value.\\n     * @returns {*} Returns the resolved value.\\n     * @example\\n     *\\n     * _.defaultTo(1, 10);\\n     * // => 1\\n     *\\n     * _.defaultTo(undefined, 10);\\n     * // => 10\\n     */\\n    function defaultTo(value, defaultValue) {\\n      return (value == null || value !== value) ? defaultValue : value;\\n    }\\n\\n    /**\\n     * Creates a function that returns the result of invoking the given functions\\n     * with the `this` binding of the created function, where each successive\\n     * invocation is supplied the return value of the previous.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Util\\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\\n     * @returns {Function} Returns the new composite function.\\n     * @see _.flowRight\\n     * @example\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * var addSquare = _.flow([_.add, square]);\\n     * addSquare(1, 2);\\n     * // => 9\\n     */\\n    var flow = createFlow();\\n\\n    /**\\n     * This method is like `_.flow` except that it creates a function that\\n     * invokes the given functions from right to left.\\n     *\\n     * @static\\n     * @since 3.0.0\\n     * @memberOf _\\n     * @category Util\\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\\n     * @returns {Function} Returns the new composite function.\\n     * @see _.flow\\n     * @example\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * var addSquare = _.flowRight([square, _.add]);\\n     * addSquare(1, 2);\\n     * // => 9\\n     */\\n    var flowRight = createFlow(true);\\n\\n    /**\\n     * This method returns the first argument it receives.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Util\\n     * @param {*} value Any value.\\n     * @returns {*} Returns `value`.\\n     * @example\\n     *\\n     * var object = { 'a': 1 };\\n     *\\n     * console.log(_.identity(object) === object);\\n     * // => true\\n     */\\n    function identity(value) {\\n      return value;\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func` with the arguments of the created\\n     * function. If `func` is a property name, the created function returns the\\n     * property value for a given element. If `func` is an array or object, the\\n     * created function returns `true` for elements that contain the equivalent\\n     * source properties, otherwise it returns `false`.\\n     *\\n     * @static\\n     * @since 4.0.0\\n     * @memberOf _\\n     * @category Util\\n     * @param {*} [func=_.identity] The value to convert to a callback.\\n     * @returns {Function} Returns the callback.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': true },\\n     *   { 'user': 'fred',   'age': 40, 'active': false }\\n     * ];\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.filter(users, _.iteratee(['user', 'fred']));\\n     * // => [{ 'user': 'fred', 'age': 40 }]\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.map(users, _.iteratee('user'));\\n     * // => ['barney', 'fred']\\n     *\\n     * // Create custom iteratee shorthands.\\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\\n     *     return func.test(string);\\n     *   };\\n     * });\\n     *\\n     * _.filter(['abc', 'def'], /ef/);\\n     * // => ['def']\\n     */\\n    function iteratee(func) {\\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\\n    }\\n\\n    /**\\n     * Creates a function that performs a partial deep comparison between a given\\n     * object and `source`, returning `true` if the given object has equivalent\\n     * property values, else `false`.\\n     *\\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\\n     * partially applied.\\n     *\\n     * Partial comparisons will match empty array and empty object `source`\\n     * values against any array or object value, respectively. See `_.isEqual`\\n     * for a list of supported value comparisons.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Util\\n     * @param {Object} source The object of property values to match.\\n     * @returns {Function} Returns the new spec function.\\n     * @example\\n     *\\n     * var objects = [\\n     *   { 'a': 1, 'b': 2, 'c': 3 },\\n     *   { 'a': 4, 'b': 5, 'c': 6 }\\n     * ];\\n     *\\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\\n     */\\n    function matches(source) {\\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\\n    }\\n\\n    /**\\n     * Creates a function that performs a partial deep comparison between the\\n     * value at `path` of a given object to `srcValue`, returning `true` if the\\n     * object value is equivalent, else `false`.\\n     *\\n     * **Note:** Partial comparisons will match empty array and empty object\\n     * `srcValue` values against any array or object value, respectively. See\\n     * `_.isEqual` for a list of supported value comparisons.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.2.0\\n     * @category Util\\n     * @param {Array|string} path The path of the property to get.\\n     * @param {*} srcValue The value to match.\\n     * @returns {Function} Returns the new spec function.\\n     * @example\\n     *\\n     * var objects = [\\n     *   { 'a': 1, 'b': 2, 'c': 3 },\\n     *   { 'a': 4, 'b': 5, 'c': 6 }\\n     * ];\\n     *\\n     * _.find(objects, _.matchesProperty('a', 4));\\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\\n     */\\n    function matchesProperty(path, srcValue) {\\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\\n    }\\n\\n    /**\\n     * Creates a function that invokes the method at `path` of a given object.\\n     * Any additional arguments are provided to the invoked method.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.7.0\\n     * @category Util\\n     * @param {Array|string} path The path of the method to invoke.\\n     * @param {...*} [args] The arguments to invoke the method with.\\n     * @returns {Function} Returns the new invoker function.\\n     * @example\\n     *\\n     * var objects = [\\n     *   { 'a': { 'b': _.constant(2) } },\\n     *   { 'a': { 'b': _.constant(1) } }\\n     * ];\\n     *\\n     * _.map(objects, _.method('a.b'));\\n     * // => [2, 1]\\n     *\\n     * _.map(objects, _.method(['a', 'b']));\\n     * // => [2, 1]\\n     */\\n    var method = baseRest(function(path, args) {\\n      return function(object) {\\n        return baseInvoke(object, path, args);\\n      };\\n    });\\n\\n    /**\\n     * The opposite of `_.method`; this method creates a function that invokes\\n     * the method at a given path of `object`. Any additional arguments are\\n     * provided to the invoked method.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.7.0\\n     * @category Util\\n     * @param {Object} object The object to query.\\n     * @param {...*} [args] The arguments to invoke the method with.\\n     * @returns {Function} Returns the new invoker function.\\n     * @example\\n     *\\n     * var array = _.times(3, _.constant),\\n     *     object = { 'a': array, 'b': array, 'c': array };\\n     *\\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\\n     * // => [2, 0]\\n     *\\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\\n     * // => [2, 0]\\n     */\\n    var methodOf = baseRest(function(object, args) {\\n      return function(path) {\\n        return baseInvoke(object, path, args);\\n      };\\n    });\\n\\n    /**\\n     * Adds all own enumerable string keyed function properties of a source\\n     * object to the destination object. If `object` is a function, then methods\\n     * are added to its prototype as well.\\n     *\\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\\n     * avoid conflicts caused by modifying the original.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Util\\n     * @param {Function|Object} [object=lodash] The destination object.\\n     * @param {Object} source The object of functions to add.\\n     * @param {Object} [options={}] The options object.\\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\\n     * @returns {Function|Object} Returns `object`.\\n     * @example\\n     *\\n     * function vowels(string) {\\n     *   return _.filter(string, function(v) {\\n     *     return /[aeiou]/i.test(v);\\n     *   });\\n     * }\\n     *\\n     * _.mixin({ 'vowels': vowels });\\n     * _.vowels('fred');\\n     * // => ['e']\\n     *\\n     * _('fred').vowels().value();\\n     * // => ['e']\\n     *\\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\\n     * _('fred').vowels();\\n     * // => ['e']\\n     */\\n    function mixin(object, source, options) {\\n      var props = keys(source),\\n          methodNames = baseFunctions(source, props);\\n\\n      if (options == null &&\\n          !(isObject(source) && (methodNames.length || !props.length))) {\\n        options = source;\\n        source = object;\\n        object = this;\\n        methodNames = baseFunctions(source, keys(source));\\n      }\\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\\n          isFunc = isFunction(object);\\n\\n      arrayEach(methodNames, function(methodName) {\\n        var func = source[methodName];\\n        object[methodName] = func;\\n        if (isFunc) {\\n          object.prototype[methodName] = function() {\\n            var chainAll = this.__chain__;\\n            if (chain || chainAll) {\\n              var result = object(this.__wrapped__),\\n                  actions = result.__actions__ = copyArray(this.__actions__);\\n\\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\\n              result.__chain__ = chainAll;\\n              return result;\\n            }\\n            return func.apply(object, arrayPush([this.value()], arguments));\\n          };\\n        }\\n      });\\n\\n      return object;\\n    }\\n\\n    /**\\n     * Reverts the `_` variable to its previous value and returns a reference to\\n     * the `lodash` function.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Util\\n     * @returns {Function} Returns the `lodash` function.\\n     * @example\\n     *\\n     * var lodash = _.noConflict();\\n     */\\n    function noConflict() {\\n      if (root._ === this) {\\n        root._ = oldDash;\\n      }\\n      return this;\\n    }\\n\\n    /**\\n     * This method returns `undefined`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.3.0\\n     * @category Util\\n     * @example\\n     *\\n     * _.times(2, _.noop);\\n     * // => [undefined, undefined]\\n     */\\n    function noop() {\\n      // No operation performed.\\n    }\\n\\n    /**\\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\\n     * the nth argument from the end is returned.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Util\\n     * @param {number} [n=0] The index of the argument to return.\\n     * @returns {Function} Returns the new pass-thru function.\\n     * @example\\n     *\\n     * var func = _.nthArg(1);\\n     * func('a', 'b', 'c', 'd');\\n     * // => 'b'\\n     *\\n     * var func = _.nthArg(-2);\\n     * func('a', 'b', 'c', 'd');\\n     * // => 'c'\\n     */\\n    function nthArg(n) {\\n      n = toInteger(n);\\n      return baseRest(function(args) {\\n        return baseNth(args, n);\\n      });\\n    }\\n\\n    /**\\n     * Creates a function that invokes `iteratees` with the arguments it receives\\n     * and returns their results.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Util\\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\\n     *  The iteratees to invoke.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var func = _.over([Math.max, Math.min]);\\n     *\\n     * func(1, 2, 3, 4);\\n     * // => [4, 1]\\n     */\\n    var over = createOver(arrayMap);\\n\\n    /**\\n     * Creates a function that checks if **all** of the `predicates` return\\n     * truthy when invoked with the arguments it receives.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Util\\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\\n     *  The predicates to check.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var func = _.overEvery([Boolean, isFinite]);\\n     *\\n     * func('1');\\n     * // => true\\n     *\\n     * func(null);\\n     * // => false\\n     *\\n     * func(NaN);\\n     * // => false\\n     */\\n    var overEvery = createOver(arrayEvery);\\n\\n    /**\\n     * Creates a function that checks if **any** of the `predicates` return\\n     * truthy when invoked with the arguments it receives.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Util\\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\\n     *  The predicates to check.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var func = _.overSome([Boolean, isFinite]);\\n     *\\n     * func('1');\\n     * // => true\\n     *\\n     * func(null);\\n     * // => true\\n     *\\n     * func(NaN);\\n     * // => false\\n     */\\n    var overSome = createOver(arraySome);\\n\\n    /**\\n     * Creates a function that returns the value at `path` of a given object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.4.0\\n     * @category Util\\n     * @param {Array|string} path The path of the property to get.\\n     * @returns {Function} Returns the new accessor function.\\n     * @example\\n     *\\n     * var objects = [\\n     *   { 'a': { 'b': 2 } },\\n     *   { 'a': { 'b': 1 } }\\n     * ];\\n     *\\n     * _.map(objects, _.property('a.b'));\\n     * // => [2, 1]\\n     *\\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\\n     * // => [1, 2]\\n     */\\n    function property(path) {\\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\\n    }\\n\\n    /**\\n     * The opposite of `_.property`; this method creates a function that returns\\n     * the value at a given path of `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Util\\n     * @param {Object} object The object to query.\\n     * @returns {Function} Returns the new accessor function.\\n     * @example\\n     *\\n     * var array = [0, 1, 2],\\n     *     object = { 'a': array, 'b': array, 'c': array };\\n     *\\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\\n     * // => [2, 0]\\n     *\\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\\n     * // => [2, 0]\\n     */\\n    function propertyOf(object) {\\n      return function(path) {\\n        return object == null ? undefined : baseGet(object, path);\\n      };\\n    }\\n\\n    /**\\n     * Creates an array of numbers (positive and/or negative) progressing from\\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\\n     * it's set to `start` with `start` then set to `0`.\\n     *\\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\\n     * floating-point values which can produce unexpected results.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Util\\n     * @param {number} [start=0] The start of the range.\\n     * @param {number} end The end of the range.\\n     * @param {number} [step=1] The value to increment or decrement by.\\n     * @returns {Array} Returns the range of numbers.\\n     * @see _.inRange, _.rangeRight\\n     * @example\\n     *\\n     * _.range(4);\\n     * // => [0, 1, 2, 3]\\n     *\\n     * _.range(-4);\\n     * // => [0, -1, -2, -3]\\n     *\\n     * _.range(1, 5);\\n     * // => [1, 2, 3, 4]\\n     *\\n     * _.range(0, 20, 5);\\n     * // => [0, 5, 10, 15]\\n     *\\n     * _.range(0, -4, -1);\\n     * // => [0, -1, -2, -3]\\n     *\\n     * _.range(1, 4, 0);\\n     * // => [1, 1, 1]\\n     *\\n     * _.range(0);\\n     * // => []\\n     */\\n    var range = createRange();\\n\\n    /**\\n     * This method is like `_.range` except that it populates values in\\n     * descending order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Util\\n     * @param {number} [start=0] The start of the range.\\n     * @param {number} end The end of the range.\\n     * @param {number} [step=1] The value to increment or decrement by.\\n     * @returns {Array} Returns the range of numbers.\\n     * @see _.inRange, _.range\\n     * @example\\n     *\\n     * _.rangeRight(4);\\n     * // => [3, 2, 1, 0]\\n     *\\n     * _.rangeRight(-4);\\n     * // => [-3, -2, -1, 0]\\n     *\\n     * _.rangeRight(1, 5);\\n     * // => [4, 3, 2, 1]\\n     *\\n     * _.rangeRight(0, 20, 5);\\n     * // => [15, 10, 5, 0]\\n     *\\n     * _.rangeRight(0, -4, -1);\\n     * // => [-3, -2, -1, 0]\\n     *\\n     * _.rangeRight(1, 4, 0);\\n     * // => [1, 1, 1]\\n     *\\n     * _.rangeRight(0);\\n     * // => []\\n     */\\n    var rangeRight = createRange(true);\\n\\n    /**\\n     * This method returns a new empty array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.13.0\\n     * @category Util\\n     * @returns {Array} Returns the new empty array.\\n     * @example\\n     *\\n     * var arrays = _.times(2, _.stubArray);\\n     *\\n     * console.log(arrays);\\n     * // => [[], []]\\n     *\\n     * console.log(arrays[0] === arrays[1]);\\n     * // => false\\n     */\\n    function stubArray() {\\n      return [];\\n    }\\n\\n    /**\\n     * This method returns `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.13.0\\n     * @category Util\\n     * @returns {boolean} Returns `false`.\\n     * @example\\n     *\\n     * _.times(2, _.stubFalse);\\n     * // => [false, false]\\n     */\\n    function stubFalse() {\\n      return false;\\n    }\\n\\n    /**\\n     * This method returns a new empty object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.13.0\\n     * @category Util\\n     * @returns {Object} Returns the new empty object.\\n     * @example\\n     *\\n     * var objects = _.times(2, _.stubObject);\\n     *\\n     * console.log(objects);\\n     * // => [{}, {}]\\n     *\\n     * console.log(objects[0] === objects[1]);\\n     * // => false\\n     */\\n    function stubObject() {\\n      return {};\\n    }\\n\\n    /**\\n     * This method returns an empty string.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.13.0\\n     * @category Util\\n     * @returns {string} Returns the empty string.\\n     * @example\\n     *\\n     * _.times(2, _.stubString);\\n     * // => ['', '']\\n     */\\n    function stubString() {\\n      return '';\\n    }\\n\\n    /**\\n     * This method returns `true`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.13.0\\n     * @category Util\\n     * @returns {boolean} Returns `true`.\\n     * @example\\n     *\\n     * _.times(2, _.stubTrue);\\n     * // => [true, true]\\n     */\\n    function stubTrue() {\\n      return true;\\n    }\\n\\n    /**\\n     * Invokes the iteratee `n` times, returning an array of the results of\\n     * each invocation. The iteratee is invoked with one argument; (index).\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Util\\n     * @param {number} n The number of times to invoke `iteratee`.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the array of results.\\n     * @example\\n     *\\n     * _.times(3, String);\\n     * // => ['0', '1', '2']\\n     *\\n     *  _.times(4, _.constant(0));\\n     * // => [0, 0, 0, 0]\\n     */\\n    function times(n, iteratee) {\\n      n = toInteger(n);\\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\\n        return [];\\n      }\\n      var index = MAX_ARRAY_LENGTH,\\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\\n\\n      iteratee = getIteratee(iteratee);\\n      n -= MAX_ARRAY_LENGTH;\\n\\n      var result = baseTimes(length, iteratee);\\n      while (++index < n) {\\n        iteratee(index);\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Converts `value` to a property path array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Util\\n     * @param {*} value The value to convert.\\n     * @returns {Array} Returns the new property path array.\\n     * @example\\n     *\\n     * _.toPath('a.b.c');\\n     * // => ['a', 'b', 'c']\\n     *\\n     * _.toPath('a[0].b.c');\\n     * // => ['a', '0', 'b', 'c']\\n     */\\n    function toPath(value) {\\n      if (isArray(value)) {\\n        return arrayMap(value, toKey);\\n      }\\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\\n    }\\n\\n    /**\\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Util\\n     * @param {string} [prefix=''] The value to prefix the ID with.\\n     * @returns {string} Returns the unique ID.\\n     * @example\\n     *\\n     * _.uniqueId('contact_');\\n     * // => 'contact_104'\\n     *\\n     * _.uniqueId();\\n     * // => '105'\\n     */\\n    function uniqueId(prefix) {\\n      var id = ++idCounter;\\n      return toString(prefix) + id;\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Adds two numbers.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.4.0\\n     * @category Math\\n     * @param {number} augend The first number in an addition.\\n     * @param {number} addend The second number in an addition.\\n     * @returns {number} Returns the total.\\n     * @example\\n     *\\n     * _.add(6, 4);\\n     * // => 10\\n     */\\n    var add = createMathOperation(function(augend, addend) {\\n      return augend + addend;\\n    }, 0);\\n\\n    /**\\n     * Computes `number` rounded up to `precision`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.10.0\\n     * @category Math\\n     * @param {number} number The number to round up.\\n     * @param {number} [precision=0] The precision to round up to.\\n     * @returns {number} Returns the rounded up number.\\n     * @example\\n     *\\n     * _.ceil(4.006);\\n     * // => 5\\n     *\\n     * _.ceil(6.004, 2);\\n     * // => 6.01\\n     *\\n     * _.ceil(6040, -2);\\n     * // => 6100\\n     */\\n    var ceil = createRound('ceil');\\n\\n    /**\\n     * Divide two numbers.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.7.0\\n     * @category Math\\n     * @param {number} dividend The first number in a division.\\n     * @param {number} divisor The second number in a division.\\n     * @returns {number} Returns the quotient.\\n     * @example\\n     *\\n     * _.divide(6, 4);\\n     * // => 1.5\\n     */\\n    var divide = createMathOperation(function(dividend, divisor) {\\n      return dividend / divisor;\\n    }, 1);\\n\\n    /**\\n     * Computes `number` rounded down to `precision`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.10.0\\n     * @category Math\\n     * @param {number} number The number to round down.\\n     * @param {number} [precision=0] The precision to round down to.\\n     * @returns {number} Returns the rounded down number.\\n     * @example\\n     *\\n     * _.floor(4.006);\\n     * // => 4\\n     *\\n     * _.floor(0.046, 2);\\n     * // => 0.04\\n     *\\n     * _.floor(4060, -2);\\n     * // => 4000\\n     */\\n    var floor = createRound('floor');\\n\\n    /**\\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\\n     * `undefined` is returned.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Math\\n     * @param {Array} array The array to iterate over.\\n     * @returns {*} Returns the maximum value.\\n     * @example\\n     *\\n     * _.max([4, 2, 8, 6]);\\n     * // => 8\\n     *\\n     * _.max([]);\\n     * // => undefined\\n     */\\n    function max(array) {\\n      return (array && array.length)\\n        ? baseExtremum(array, identity, baseGt)\\n        : undefined;\\n    }\\n\\n    /**\\n     * This method is like `_.max` except that it accepts `iteratee` which is\\n     * invoked for each element in `array` to generate the criterion by which\\n     * the value is ranked. The iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Math\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {*} Returns the maximum value.\\n     * @example\\n     *\\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\\n     *\\n     * _.maxBy(objects, function(o) { return o.n; });\\n     * // => { 'n': 2 }\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.maxBy(objects, 'n');\\n     * // => { 'n': 2 }\\n     */\\n    function maxBy(array, iteratee) {\\n      return (array && array.length)\\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\\n        : undefined;\\n    }\\n\\n    /**\\n     * Computes the mean of the values in `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Math\\n     * @param {Array} array The array to iterate over.\\n     * @returns {number} Returns the mean.\\n     * @example\\n     *\\n     * _.mean([4, 2, 8, 6]);\\n     * // => 5\\n     */\\n    function mean(array) {\\n      return baseMean(array, identity);\\n    }\\n\\n    /**\\n     * This method is like `_.mean` except that it accepts `iteratee` which is\\n     * invoked for each element in `array` to generate the value to be averaged.\\n     * The iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.7.0\\n     * @category Math\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {number} Returns the mean.\\n     * @example\\n     *\\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\\n     *\\n     * _.meanBy(objects, function(o) { return o.n; });\\n     * // => 5\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.meanBy(objects, 'n');\\n     * // => 5\\n     */\\n    function meanBy(array, iteratee) {\\n      return baseMean(array, getIteratee(iteratee, 2));\\n    }\\n\\n    /**\\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\\n     * `undefined` is returned.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Math\\n     * @param {Array} array The array to iterate over.\\n     * @returns {*} Returns the minimum value.\\n     * @example\\n     *\\n     * _.min([4, 2, 8, 6]);\\n     * // => 2\\n     *\\n     * _.min([]);\\n     * // => undefined\\n     */\\n    function min(array) {\\n      return (array && array.length)\\n        ? baseExtremum(array, identity, baseLt)\\n        : undefined;\\n    }\\n\\n    /**\\n     * This method is like `_.min` except that it accepts `iteratee` which is\\n     * invoked for each element in `array` to generate the criterion by which\\n     * the value is ranked. The iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Math\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {*} Returns the minimum value.\\n     * @example\\n     *\\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\\n     *\\n     * _.minBy(objects, function(o) { return o.n; });\\n     * // => { 'n': 1 }\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.minBy(objects, 'n');\\n     * // => { 'n': 1 }\\n     */\\n    function minBy(array, iteratee) {\\n      return (array && array.length)\\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\\n        : undefined;\\n    }\\n\\n    /**\\n     * Multiply two numbers.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.7.0\\n     * @category Math\\n     * @param {number} multiplier The first number in a multiplication.\\n     * @param {number} multiplicand The second number in a multiplication.\\n     * @returns {number} Returns the product.\\n     * @example\\n     *\\n     * _.multiply(6, 4);\\n     * // => 24\\n     */\\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\\n      return multiplier * multiplicand;\\n    }, 1);\\n\\n    /**\\n     * Computes `number` rounded to `precision`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.10.0\\n     * @category Math\\n     * @param {number} number The number to round.\\n     * @param {number} [precision=0] The precision to round to.\\n     * @returns {number} Returns the rounded number.\\n     * @example\\n     *\\n     * _.round(4.006);\\n     * // => 4\\n     *\\n     * _.round(4.006, 2);\\n     * // => 4.01\\n     *\\n     * _.round(4060, -2);\\n     * // => 4100\\n     */\\n    var round = createRound('round');\\n\\n    /**\\n     * Subtract two numbers.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Math\\n     * @param {number} minuend The first number in a subtraction.\\n     * @param {number} subtrahend The second number in a subtraction.\\n     * @returns {number} Returns the difference.\\n     * @example\\n     *\\n     * _.subtract(6, 4);\\n     * // => 2\\n     */\\n    var subtract = createMathOperation(function(minuend, subtrahend) {\\n      return minuend - subtrahend;\\n    }, 0);\\n\\n    /**\\n     * Computes the sum of the values in `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.4.0\\n     * @category Math\\n     * @param {Array} array The array to iterate over.\\n     * @returns {number} Returns the sum.\\n     * @example\\n     *\\n     * _.sum([4, 2, 8, 6]);\\n     * // => 20\\n     */\\n    function sum(array) {\\n      return (array && array.length)\\n        ? baseSum(array, identity)\\n        : 0;\\n    }\\n\\n    /**\\n     * This method is like `_.sum` except that it accepts `iteratee` which is\\n     * invoked for each element in `array` to generate the value to be summed.\\n     * The iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Math\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {number} Returns the sum.\\n     * @example\\n     *\\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\\n     *\\n     * _.sumBy(objects, function(o) { return o.n; });\\n     * // => 20\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.sumBy(objects, 'n');\\n     * // => 20\\n     */\\n    function sumBy(array, iteratee) {\\n      return (array && array.length)\\n        ? baseSum(array, getIteratee(iteratee, 2))\\n        : 0;\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    // Add methods that return wrapped values in chain sequences.\\n    lodash.after = after;\\n    lodash.ary = ary;\\n    lodash.assign = assign;\\n    lodash.assignIn = assignIn;\\n    lodash.assignInWith = assignInWith;\\n    lodash.assignWith = assignWith;\\n    lodash.at = at;\\n    lodash.before = before;\\n    lodash.bind = bind;\\n    lodash.bindAll = bindAll;\\n    lodash.bindKey = bindKey;\\n    lodash.castArray = castArray;\\n    lodash.chain = chain;\\n    lodash.chunk = chunk;\\n    lodash.compact = compact;\\n    lodash.concat = concat;\\n    lodash.cond = cond;\\n    lodash.conforms = conforms;\\n    lodash.constant = constant;\\n    lodash.countBy = countBy;\\n    lodash.create = create;\\n    lodash.curry = curry;\\n    lodash.curryRight = curryRight;\\n    lodash.debounce = debounce;\\n    lodash.defaults = defaults;\\n    lodash.defaultsDeep = defaultsDeep;\\n    lodash.defer = defer;\\n    lodash.delay = delay;\\n    lodash.difference = difference;\\n    lodash.differenceBy = differenceBy;\\n    lodash.differenceWith = differenceWith;\\n    lodash.drop = drop;\\n    lodash.dropRight = dropRight;\\n    lodash.dropRightWhile = dropRightWhile;\\n    lodash.dropWhile = dropWhile;\\n    lodash.fill = fill;\\n    lodash.filter = filter;\\n    lodash.flatMap = flatMap;\\n    lodash.flatMapDeep = flatMapDeep;\\n    lodash.flatMapDepth = flatMapDepth;\\n    lodash.flatten = flatten;\\n    lodash.flattenDeep = flattenDeep;\\n    lodash.flattenDepth = flattenDepth;\\n    lodash.flip = flip;\\n    lodash.flow = flow;\\n    lodash.flowRight = flowRight;\\n    lodash.fromPairs = fromPairs;\\n    lodash.functions = functions;\\n    lodash.functionsIn = functionsIn;\\n    lodash.groupBy = groupBy;\\n    lodash.initial = initial;\\n    lodash.intersection = intersection;\\n    lodash.intersectionBy = intersectionBy;\\n    lodash.intersectionWith = intersectionWith;\\n    lodash.invert = invert;\\n    lodash.invertBy = invertBy;\\n    lodash.invokeMap = invokeMap;\\n    lodash.iteratee = iteratee;\\n    lodash.keyBy = keyBy;\\n    lodash.keys = keys;\\n    lodash.keysIn = keysIn;\\n    lodash.map = map;\\n    lodash.mapKeys = mapKeys;\\n    lodash.mapValues = mapValues;\\n    lodash.matches = matches;\\n    lodash.matchesProperty = matchesProperty;\\n    lodash.memoize = memoize;\\n    lodash.merge = merge;\\n    lodash.mergeWith = mergeWith;\\n    lodash.method = method;\\n    lodash.methodOf = methodOf;\\n    lodash.mixin = mixin;\\n    lodash.negate = negate;\\n    lodash.nthArg = nthArg;\\n    lodash.omit = omit;\\n    lodash.omitBy = omitBy;\\n    lodash.once = once;\\n    lodash.orderBy = orderBy;\\n    lodash.over = over;\\n    lodash.overArgs = overArgs;\\n    lodash.overEvery = overEvery;\\n    lodash.overSome = overSome;\\n    lodash.partial = partial;\\n    lodash.partialRight = partialRight;\\n    lodash.partition = partition;\\n    lodash.pick = pick;\\n    lodash.pickBy = pickBy;\\n    lodash.property = property;\\n    lodash.propertyOf = propertyOf;\\n    lodash.pull = pull;\\n    lodash.pullAll = pullAll;\\n    lodash.pullAllBy = pullAllBy;\\n    lodash.pullAllWith = pullAllWith;\\n    lodash.pullAt = pullAt;\\n    lodash.range = range;\\n    lodash.rangeRight = rangeRight;\\n    lodash.rearg = rearg;\\n    lodash.reject = reject;\\n    lodash.remove = remove;\\n    lodash.rest = rest;\\n    lodash.reverse = reverse;\\n    lodash.sampleSize = sampleSize;\\n    lodash.set = set;\\n    lodash.setWith = setWith;\\n    lodash.shuffle = shuffle;\\n    lodash.slice = slice;\\n    lodash.sortBy = sortBy;\\n    lodash.sortedUniq = sortedUniq;\\n    lodash.sortedUniqBy = sortedUniqBy;\\n    lodash.split = split;\\n    lodash.spread = spread;\\n    lodash.tail = tail;\\n    lodash.take = take;\\n    lodash.takeRight = takeRight;\\n    lodash.takeRightWhile = takeRightWhile;\\n    lodash.takeWhile = takeWhile;\\n    lodash.tap = tap;\\n    lodash.throttle = throttle;\\n    lodash.thru = thru;\\n    lodash.toArray = toArray;\\n    lodash.toPairs = toPairs;\\n    lodash.toPairsIn = toPairsIn;\\n    lodash.toPath = toPath;\\n    lodash.toPlainObject = toPlainObject;\\n    lodash.transform = transform;\\n    lodash.unary = unary;\\n    lodash.union = union;\\n    lodash.unionBy = unionBy;\\n    lodash.unionWith = unionWith;\\n    lodash.uniq = uniq;\\n    lodash.uniqBy = uniqBy;\\n    lodash.uniqWith = uniqWith;\\n    lodash.unset = unset;\\n    lodash.unzip = unzip;\\n    lodash.unzipWith = unzipWith;\\n    lodash.update = update;\\n    lodash.updateWith = updateWith;\\n    lodash.values = values;\\n    lodash.valuesIn = valuesIn;\\n    lodash.without = without;\\n    lodash.words = words;\\n    lodash.wrap = wrap;\\n    lodash.xor = xor;\\n    lodash.xorBy = xorBy;\\n    lodash.xorWith = xorWith;\\n    lodash.zip = zip;\\n    lodash.zipObject = zipObject;\\n    lodash.zipObjectDeep = zipObjectDeep;\\n    lodash.zipWith = zipWith;\\n\\n    // Add aliases.\\n    lodash.entries = toPairs;\\n    lodash.entriesIn = toPairsIn;\\n    lodash.extend = assignIn;\\n    lodash.extendWith = assignInWith;\\n\\n    // Add methods to `lodash.prototype`.\\n    mixin(lodash, lodash);\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    // Add methods that return unwrapped values in chain sequences.\\n    lodash.add = add;\\n    lodash.attempt = attempt;\\n    lodash.camelCase = camelCase;\\n    lodash.capitalize = capitalize;\\n    lodash.ceil = ceil;\\n    lodash.clamp = clamp;\\n    lodash.clone = clone;\\n    lodash.cloneDeep = cloneDeep;\\n    lodash.cloneDeepWith = cloneDeepWith;\\n    lodash.cloneWith = cloneWith;\\n    lodash.conformsTo = conformsTo;\\n    lodash.deburr = deburr;\\n    lodash.defaultTo = defaultTo;\\n    lodash.divide = divide;\\n    lodash.endsWith = endsWith;\\n    lodash.eq = eq;\\n    lodash.escape = escape;\\n    lodash.escapeRegExp = escapeRegExp;\\n    lodash.every = every;\\n    lodash.find = find;\\n    lodash.findIndex = findIndex;\\n    lodash.findKey = findKey;\\n    lodash.findLast = findLast;\\n    lodash.findLastIndex = findLastIndex;\\n    lodash.findLastKey = findLastKey;\\n    lodash.floor = floor;\\n    lodash.forEach = forEach;\\n    lodash.forEachRight = forEachRight;\\n    lodash.forIn = forIn;\\n    lodash.forInRight = forInRight;\\n    lodash.forOwn = forOwn;\\n    lodash.forOwnRight = forOwnRight;\\n    lodash.get = get;\\n    lodash.gt = gt;\\n    lodash.gte = gte;\\n    lodash.has = has;\\n    lodash.hasIn = hasIn;\\n    lodash.head = head;\\n    lodash.identity = identity;\\n    lodash.includes = includes;\\n    lodash.indexOf = indexOf;\\n    lodash.inRange = inRange;\\n    lodash.invoke = invoke;\\n    lodash.isArguments = isArguments;\\n    lodash.isArray = isArray;\\n    lodash.isArrayBuffer = isArrayBuffer;\\n    lodash.isArrayLike = isArrayLike;\\n    lodash.isArrayLikeObject = isArrayLikeObject;\\n    lodash.isBoolean = isBoolean;\\n    lodash.isBuffer = isBuffer;\\n    lodash.isDate = isDate;\\n    lodash.isElement = isElement;\\n    lodash.isEmpty = isEmpty;\\n    lodash.isEqual = isEqual;\\n    lodash.isEqualWith = isEqualWith;\\n    lodash.isError = isError;\\n    lodash.isFinite = isFinite;\\n    lodash.isFunction = isFunction;\\n    lodash.isInteger = isInteger;\\n    lodash.isLength = isLength;\\n    lodash.isMap = isMap;\\n    lodash.isMatch = isMatch;\\n    lodash.isMatchWith = isMatchWith;\\n    lodash.isNaN = isNaN;\\n    lodash.isNative = isNative;\\n    lodash.isNil = isNil;\\n    lodash.isNull = isNull;\\n    lodash.isNumber = isNumber;\\n    lodash.isObject = isObject;\\n    lodash.isObjectLike = isObjectLike;\\n    lodash.isPlainObject = isPlainObject;\\n    lodash.isRegExp = isRegExp;\\n    lodash.isSafeInteger = isSafeInteger;\\n    lodash.isSet = isSet;\\n    lodash.isString = isString;\\n    lodash.isSymbol = isSymbol;\\n    lodash.isTypedArray = isTypedArray;\\n    lodash.isUndefined = isUndefined;\\n    lodash.isWeakMap = isWeakMap;\\n    lodash.isWeakSet = isWeakSet;\\n    lodash.join = join;\\n    lodash.kebabCase = kebabCase;\\n    lodash.last = last;\\n    lodash.lastIndexOf = lastIndexOf;\\n    lodash.lowerCase = lowerCase;\\n    lodash.lowerFirst = lowerFirst;\\n    lodash.lt = lt;\\n    lodash.lte = lte;\\n    lodash.max = max;\\n    lodash.maxBy = maxBy;\\n    lodash.mean = mean;\\n    lodash.meanBy = meanBy;\\n    lodash.min = min;\\n    lodash.minBy = minBy;\\n    lodash.stubArray = stubArray;\\n    lodash.stubFalse = stubFalse;\\n    lodash.stubObject = stubObject;\\n    lodash.stubString = stubString;\\n    lodash.stubTrue = stubTrue;\\n    lodash.multiply = multiply;\\n    lodash.nth = nth;\\n    lodash.noConflict = noConflict;\\n    lodash.noop = noop;\\n    lodash.now = now;\\n    lodash.pad = pad;\\n    lodash.padEnd = padEnd;\\n    lodash.padStart = padStart;\\n    lodash.parseInt = parseInt;\\n    lodash.random = random;\\n    lodash.reduce = reduce;\\n    lodash.reduceRight = reduceRight;\\n    lodash.repeat = repeat;\\n    lodash.replace = replace;\\n    lodash.result = result;\\n    lodash.round = round;\\n    lodash.runInContext = runInContext;\\n    lodash.sample = sample;\\n    lodash.size = size;\\n    lodash.snakeCase = snakeCase;\\n    lodash.some = some;\\n    lodash.sortedIndex = sortedIndex;\\n    lodash.sortedIndexBy = sortedIndexBy;\\n    lodash.sortedIndexOf = sortedIndexOf;\\n    lodash.sortedLastIndex = sortedLastIndex;\\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\\n    lodash.startCase = startCase;\\n    lodash.startsWith = startsWith;\\n    lodash.subtract = subtract;\\n    lodash.sum = sum;\\n    lodash.sumBy = sumBy;\\n    lodash.template = template;\\n    lodash.times = times;\\n    lodash.toFinite = toFinite;\\n    lodash.toInteger = toInteger;\\n    lodash.toLength = toLength;\\n    lodash.toLower = toLower;\\n    lodash.toNumber = toNumber;\\n    lodash.toSafeInteger = toSafeInteger;\\n    lodash.toString = toString;\\n    lodash.toUpper = toUpper;\\n    lodash.trim = trim;\\n    lodash.trimEnd = trimEnd;\\n    lodash.trimStart = trimStart;\\n    lodash.truncate = truncate;\\n    lodash.unescape = unescape;\\n    lodash.uniqueId = uniqueId;\\n    lodash.upperCase = upperCase;\\n    lodash.upperFirst = upperFirst;\\n\\n    // Add aliases.\\n    lodash.each = forEach;\\n    lodash.eachRight = forEachRight;\\n    lodash.first = head;\\n\\n    mixin(lodash, (function() {\\n      var source = {};\\n      baseForOwn(lodash, function(func, methodName) {\\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\\n          source[methodName] = func;\\n        }\\n      });\\n      return source;\\n    }()), { 'chain': false });\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * The semantic version number.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @type {string}\\n     */\\n    lodash.VERSION = VERSION;\\n\\n    // Assign default placeholders.\\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\\n      lodash[methodName].placeholder = lodash;\\n    });\\n\\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\\n    arrayEach(['drop', 'take'], function(methodName, index) {\\n      LazyWrapper.prototype[methodName] = function(n) {\\n        var filtered = this.__filtered__;\\n        if (filtered && !index) {\\n          return new LazyWrapper(this);\\n        }\\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\\n\\n        var result = this.clone();\\n        if (filtered) {\\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\\n        } else {\\n          result.__views__.push({\\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\\n          });\\n        }\\n        return result;\\n      };\\n\\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\\n        return this.reverse()[methodName](n).reverse();\\n      };\\n    });\\n\\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\\n      var type = index + 1,\\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\\n\\n      LazyWrapper.prototype[methodName] = function(iteratee) {\\n        var result = this.clone();\\n        result.__iteratees__.push({\\n          'iteratee': getIteratee(iteratee, 3),\\n          'type': type\\n        });\\n        result.__filtered__ = result.__filtered__ || isFilter;\\n        return result;\\n      };\\n    });\\n\\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\\n    arrayEach(['head', 'last'], function(methodName, index) {\\n      var takeName = 'take' + (index ? 'Right' : '');\\n\\n      LazyWrapper.prototype[methodName] = function() {\\n        return this[takeName](1).value()[0];\\n      };\\n    });\\n\\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\\n    arrayEach(['initial', 'tail'], function(methodName, index) {\\n      var dropName = 'drop' + (index ? '' : 'Right');\\n\\n      LazyWrapper.prototype[methodName] = function() {\\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\\n      };\\n    });\\n\\n    LazyWrapper.prototype.compact = function() {\\n      return this.filter(identity);\\n    };\\n\\n    LazyWrapper.prototype.find = function(predicate) {\\n      return this.filter(predicate).head();\\n    };\\n\\n    LazyWrapper.prototype.findLast = function(predicate) {\\n      return this.reverse().find(predicate);\\n    };\\n\\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\\n      if (typeof path == 'function') {\\n        return new LazyWrapper(this);\\n      }\\n      return this.map(function(value) {\\n        return baseInvoke(value, path, args);\\n      });\\n    });\\n\\n    LazyWrapper.prototype.reject = function(predicate) {\\n      return this.filter(negate(getIteratee(predicate)));\\n    };\\n\\n    LazyWrapper.prototype.slice = function(start, end) {\\n      start = toInteger(start);\\n\\n      var result = this;\\n      if (result.__filtered__ && (start > 0 || end < 0)) {\\n        return new LazyWrapper(result);\\n      }\\n      if (start < 0) {\\n        result = result.takeRight(-start);\\n      } else if (start) {\\n        result = result.drop(start);\\n      }\\n      if (end !== undefined) {\\n        end = toInteger(end);\\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\\n      }\\n      return result;\\n    };\\n\\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\\n      return this.reverse().takeWhile(predicate).reverse();\\n    };\\n\\n    LazyWrapper.prototype.toArray = function() {\\n      return this.take(MAX_ARRAY_LENGTH);\\n    };\\n\\n    // Add `LazyWrapper` methods to `lodash.prototype`.\\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\\n          isTaker = /^(?:head|last)$/.test(methodName),\\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\\n          retUnwrapped = isTaker || /^find/.test(methodName);\\n\\n      if (!lodashFunc) {\\n        return;\\n      }\\n      lodash.prototype[methodName] = function() {\\n        var value = this.__wrapped__,\\n            args = isTaker ? [1] : arguments,\\n            isLazy = value instanceof LazyWrapper,\\n            iteratee = args[0],\\n            useLazy = isLazy || isArray(value);\\n\\n        var interceptor = function(value) {\\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\\n          return (isTaker && chainAll) ? result[0] : result;\\n        };\\n\\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\\n          // Avoid lazy use if the iteratee has a \\\"length\\\" value other than `1`.\\n          isLazy = useLazy = false;\\n        }\\n        var chainAll = this.__chain__,\\n            isHybrid = !!this.__actions__.length,\\n            isUnwrapped = retUnwrapped && !chainAll,\\n            onlyLazy = isLazy && !isHybrid;\\n\\n        if (!retUnwrapped && useLazy) {\\n          value = onlyLazy ? value : new LazyWrapper(this);\\n          var result = func.apply(value, args);\\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\\n          return new LodashWrapper(result, chainAll);\\n        }\\n        if (isUnwrapped && onlyLazy) {\\n          return func.apply(this, args);\\n        }\\n        result = this.thru(interceptor);\\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\\n      };\\n    });\\n\\n    // Add `Array` methods to `lodash.prototype`.\\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\\n      var func = arrayProto[methodName],\\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\\n\\n      lodash.prototype[methodName] = function() {\\n        var args = arguments;\\n        if (retUnwrapped && !this.__chain__) {\\n          var value = this.value();\\n          return func.apply(isArray(value) ? value : [], args);\\n        }\\n        return this[chainName](function(value) {\\n          return func.apply(isArray(value) ? value : [], args);\\n        });\\n      };\\n    });\\n\\n    // Map minified method names to their real names.\\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\\n      var lodashFunc = lodash[methodName];\\n      if (lodashFunc) {\\n        var key = (lodashFunc.name + ''),\\n            names = realNames[key] || (realNames[key] = []);\\n\\n        names.push({ 'name': methodName, 'func': lodashFunc });\\n      }\\n    });\\n\\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\\n      'name': 'wrapper',\\n      'func': undefined\\n    }];\\n\\n    // Add methods to `LazyWrapper`.\\n    LazyWrapper.prototype.clone = lazyClone;\\n    LazyWrapper.prototype.reverse = lazyReverse;\\n    LazyWrapper.prototype.value = lazyValue;\\n\\n    // Add chain sequence methods to the `lodash` wrapper.\\n    lodash.prototype.at = wrapperAt;\\n    lodash.prototype.chain = wrapperChain;\\n    lodash.prototype.commit = wrapperCommit;\\n    lodash.prototype.next = wrapperNext;\\n    lodash.prototype.plant = wrapperPlant;\\n    lodash.prototype.reverse = wrapperReverse;\\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\\n\\n    // Add lazy aliases.\\n    lodash.prototype.first = lodash.prototype.head;\\n\\n    if (symIterator) {\\n      lodash.prototype[symIterator] = wrapperToIterator;\\n    }\\n    return lodash;\\n  });\\n\\n  /*--------------------------------------------------------------------------*/\\n\\n  // Export lodash.\\n  var _ = runInContext();\\n\\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\\n  if (true) {\\n    // Expose Lodash on the global object to prevent errors when Lodash is\\n    // loaded by a script tag in the presence of an AMD loader.\\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\\n    // Use `_.noConflict` to remove Lodash from the global object.\\n    root._ = _;\\n\\n    // Define as an anonymous module so, through path mapping, it can be\\n    // referenced as the \\\"underscore\\\" module.\\n    !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {\\n      return _;\\n    }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n  }\\n  // Check for `exports` after `define` in case a build optimizer adds it.\\n  else if (freeModule) {\\n    // Export for Node.js.\\n    (freeModule.exports = _)._ = _;\\n    // Export for CommonJS support.\\n    freeExports._ = _;\\n  }\\n  else {\\n    // Export to the global object.\\n    root._ = _;\\n  }\\n}.call(this));\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(/*! ./../webpack/buildin/module.js */ 33)(module)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/lodash/lodash.js\\n// module id = 32\\n// module chunks = 0 2\\n//# sourceURL=webpack:///./~/lodash/lodash.js?\");\n\n/***/ },\n/* 33 */\n/*!***********************************!*\\\n  !*** (webpack)/buildin/module.js ***!\n  \\***********************************/\n/***/ function(module, exports) {\n\n\teval(\"module.exports = function(module) {\\n\\tif(!module.webpackPolyfill) {\\n\\t\\tmodule.deprecate = function() {};\\n\\t\\tmodule.paths = [];\\n\\t\\t// module.parent = undefined by default\\n\\t\\tmodule.children = [];\\n\\t\\tmodule.webpackPolyfill = 1;\\n\\t}\\n\\treturn module;\\n}\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// (webpack)/buildin/module.js\\n// module id = 33\\n// module chunks = 0 2\\n//# sourceURL=webpack:///(webpack)/buildin/module.js?\");\n\n/***/ }\n/******/ ]);"
  },
  {
    "path": "src/DiagnosticsHarness/fubu-diagnostics/marten.js",
    "content": "/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/client/public/javascript/\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!*******************************!*\\\n  !*** ./javascript/marten.jsx ***!\n  \\*******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar MartenSessions = _react2.default.createClass({\\n    displayName: 'MartenSessions',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        FubuDiagnostics.get('Marten:sessions', {}, function (data) {\\n            _this.setState({ sessions: data, loading: false });\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        var rows = this.state.sessions.map(function (session, i) {\\n            var sessionUrl = \\\"#marten/session/\\\" + session.request;\\n            var requestUrl = '#fubumvc/request-details/' + session.request;\\n            var chainUrl = \\\"#/fubumvc/chain-details/\\\" + session.hash;\\n\\n            return _react2.default.createElement(\\n                'tr',\\n                { key: i },\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    _react2.default.createElement(\\n                        'a',\\n                        { href: chainUrl },\\n                        session.chain\\n                    )\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: 'right' } },\\n                    session.execution_time\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    _react2.default.createElement(\\n                        'a',\\n                        { href: requestUrl },\\n                        session.time\\n                    )\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: 'right' } },\\n                    _react2.default.createElement(\\n                        'a',\\n                        { href: sessionUrl },\\n                        session.request_count\\n                    )\\n                )\\n            );\\n        });\\n\\n        return _react2.default.createElement(\\n            'table',\\n            { className: 'table table-striped', style: { width: 'auto' } },\\n            _react2.default.createElement(\\n                'thead',\\n                null,\\n                _react2.default.createElement(\\n                    'tr',\\n                    null,\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Chain'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { align: 'right' } },\\n                        'Execution Time (ms)'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Time (Local)'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { align: 'right' } },\\n                        'Command Count'\\n                    )\\n                )\\n            ),\\n            _react2.default.createElement(\\n                'tbody',\\n                null,\\n                rows\\n            )\\n        );\\n    }\\n});\\n\\nvar Args = _react2.default.createClass({\\n    displayName: 'Args',\\n    render: function render() {\\n        var args = [];\\n        for (var arg in this.props.args) {\\n            var elem = arg + \\\": \\\" + this.props.args[arg] + \\\"; \\\";\\n            args.push(elem);\\n        }\\n\\n        return _react2.default.createElement(\\n            'p',\\n            null,\\n            args\\n        );\\n    }\\n});\\n\\nvar MartenSession = _react2.default.createClass({\\n    displayName: 'MartenSession',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this2 = this;\\n\\n        var params = this.getParams();\\n        FubuDiagnostics.get('Marten:session_Id', params, function (data) {\\n            _this2.setState({ loading: false, data: data });\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        var commands = this.state.data.map(function (cmd) {\\n            if (cmd.success) {\\n                return _react2.default.createElement(\\n                    'div',\\n                    null,\\n                    _react2.default.createElement(\\n                        'pre',\\n                        null,\\n                        cmd.sql\\n                    ),\\n                    _react2.default.createElement(Args, { args: cmd.args }),\\n                    _react2.default.createElement('hr', null)\\n                );\\n            } else {\\n                return _react2.default.createElement(\\n                    'div',\\n                    null,\\n                    _react2.default.createElement(\\n                        'pre',\\n                        null,\\n                        cmd.sql\\n                    ),\\n                    _react2.default.createElement(\\n                        'pre',\\n                        { className: 'bg_warning' },\\n                        cmd.error\\n                    ),\\n                    _react2.default.createElement(Args, { args: cmd.args }),\\n                    _react2.default.createElement('hr', null)\\n                );\\n            }\\n        });\\n\\n        return _react2.default.createElement(\\n            'div',\\n            null,\\n            commands\\n        );\\n    }\\n});\\n\\nFubuDiagnostics.addSection({\\n    title: 'Marten',\\n    description: 'Information about Marten Activity',\\n    key: 'marten'\\n}).add({\\n    title: 'Marten Sessions',\\n    description: 'Marten Request Count per Session',\\n    key: 'sessions',\\n    component: MartenSessions\\n}).add({\\n    title: 'Session Details',\\n    description: 'Session Details',\\n    key: 'session-details',\\n    route: 'Marten:session_Id',\\n    component: MartenSession\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/marten.jsx\\n// module id = 0\\n// module chunks = 1\\n//# sourceURL=webpack:///./javascript/marten.jsx?\");\n\n/***/ },\n/* 1 */\n/*!**************************!*\\\n  !*** ./~/react/react.js ***!\n  \\**************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nmodule.exports = __webpack_require__(/*! ./lib/React */ 2);\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/react.js\\n// module id = 1\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/react.js?\");\n\n/***/ },\n/* 2 */\n/*!******************************!*\\\n  !*** ./~/react/lib/React.js ***!\n  \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar ReactChildren = __webpack_require__(/*! ./ReactChildren */ 5);\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 18);\\nvar ReactPureComponent = __webpack_require__(/*! ./ReactPureComponent */ 21);\\nvar ReactClass = __webpack_require__(/*! ./ReactClass */ 22);\\nvar ReactDOMFactories = __webpack_require__(/*! ./ReactDOMFactories */ 24);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\nvar ReactPropTypes = __webpack_require__(/*! ./ReactPropTypes */ 29);\\nvar ReactVersion = __webpack_require__(/*! ./ReactVersion */ 30);\\n\\nvar onlyChild = __webpack_require__(/*! ./onlyChild */ 31);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar createElement = ReactElement.createElement;\\nvar createFactory = ReactElement.createFactory;\\nvar cloneElement = ReactElement.cloneElement;\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  var ReactElementValidator = __webpack_require__(/*! ./ReactElementValidator */ 25);\\n  createElement = ReactElementValidator.createElement;\\n  createFactory = ReactElementValidator.createFactory;\\n  cloneElement = ReactElementValidator.cloneElement;\\n}\\n\\nvar __spread = _assign;\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  var warned = false;\\n  __spread = function () {\\n    process.env.NODE_ENV !== 'production' ? warning(warned, 'React.__spread is deprecated and should not be used. Use ' + 'Object.assign directly or another helper function with similar ' + 'semantics. You may be seeing this warning due to your compiler. ' + 'See https://fb.me/react-spread-deprecation for more details.') : void 0;\\n    warned = true;\\n    return _assign.apply(null, arguments);\\n  };\\n}\\n\\nvar React = {\\n\\n  // Modern\\n\\n  Children: {\\n    map: ReactChildren.map,\\n    forEach: ReactChildren.forEach,\\n    count: ReactChildren.count,\\n    toArray: ReactChildren.toArray,\\n    only: onlyChild\\n  },\\n\\n  Component: ReactComponent,\\n  PureComponent: ReactPureComponent,\\n\\n  createElement: createElement,\\n  cloneElement: cloneElement,\\n  isValidElement: ReactElement.isValidElement,\\n\\n  // Classic\\n\\n  PropTypes: ReactPropTypes,\\n  createClass: ReactClass.createClass,\\n  createFactory: createFactory,\\n  createMixin: function (mixin) {\\n    // Currently a noop. Will be used to validate and trace mixins.\\n    return mixin;\\n  },\\n\\n  // This looks DOM specific but these are actually isomorphic helpers\\n  // since they are just generating DOM strings.\\n  DOM: ReactDOMFactories,\\n\\n  version: ReactVersion,\\n\\n  // Deprecated hook for JSX spread, don't use this for anything.\\n  __spread: __spread\\n};\\n\\nmodule.exports = React;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/React.js\\n// module id = 2\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/React.js?\");\n\n/***/ },\n/* 3 */\n/*!******************************!*\\\n  !*** ./~/process/browser.js ***!\n  \\******************************/\n/***/ function(module, exports) {\n\n\teval(\"// shim for using process in browser\\nvar process = module.exports = {};\\n\\n// cached from whatever global is present so that test runners that stub it\\n// don't break things.  But we need to wrap it in a try catch in case it is\\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\\n// function because try/catches deoptimize in certain engines.\\n\\nvar cachedSetTimeout;\\nvar cachedClearTimeout;\\n\\nfunction defaultSetTimout() {\\n    throw new Error('setTimeout has not been defined');\\n}\\nfunction defaultClearTimeout () {\\n    throw new Error('clearTimeout has not been defined');\\n}\\n(function () {\\n    try {\\n        if (typeof setTimeout === 'function') {\\n            cachedSetTimeout = setTimeout;\\n        } else {\\n            cachedSetTimeout = defaultSetTimout;\\n        }\\n    } catch (e) {\\n        cachedSetTimeout = defaultSetTimout;\\n    }\\n    try {\\n        if (typeof clearTimeout === 'function') {\\n            cachedClearTimeout = clearTimeout;\\n        } else {\\n            cachedClearTimeout = defaultClearTimeout;\\n        }\\n    } catch (e) {\\n        cachedClearTimeout = defaultClearTimeout;\\n    }\\n} ())\\nfunction runTimeout(fun) {\\n    if (cachedSetTimeout === setTimeout) {\\n        //normal enviroments in sane situations\\n        return setTimeout(fun, 0);\\n    }\\n    // if setTimeout wasn't available but was latter defined\\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\\n        cachedSetTimeout = setTimeout;\\n        return setTimeout(fun, 0);\\n    }\\n    try {\\n        // when when somebody has screwed with setTimeout but no I.E. maddness\\n        return cachedSetTimeout(fun, 0);\\n    } catch(e){\\n        try {\\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\\n            return cachedSetTimeout.call(null, fun, 0);\\n        } catch(e){\\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\\n            return cachedSetTimeout.call(this, fun, 0);\\n        }\\n    }\\n\\n\\n}\\nfunction runClearTimeout(marker) {\\n    if (cachedClearTimeout === clearTimeout) {\\n        //normal enviroments in sane situations\\n        return clearTimeout(marker);\\n    }\\n    // if clearTimeout wasn't available but was latter defined\\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\\n        cachedClearTimeout = clearTimeout;\\n        return clearTimeout(marker);\\n    }\\n    try {\\n        // when when somebody has screwed with setTimeout but no I.E. maddness\\n        return cachedClearTimeout(marker);\\n    } catch (e){\\n        try {\\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\\n            return cachedClearTimeout.call(null, marker);\\n        } catch (e){\\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\\n            return cachedClearTimeout.call(this, marker);\\n        }\\n    }\\n\\n\\n\\n}\\nvar queue = [];\\nvar draining = false;\\nvar currentQueue;\\nvar queueIndex = -1;\\n\\nfunction cleanUpNextTick() {\\n    if (!draining || !currentQueue) {\\n        return;\\n    }\\n    draining = false;\\n    if (currentQueue.length) {\\n        queue = currentQueue.concat(queue);\\n    } else {\\n        queueIndex = -1;\\n    }\\n    if (queue.length) {\\n        drainQueue();\\n    }\\n}\\n\\nfunction drainQueue() {\\n    if (draining) {\\n        return;\\n    }\\n    var timeout = runTimeout(cleanUpNextTick);\\n    draining = true;\\n\\n    var len = queue.length;\\n    while(len) {\\n        currentQueue = queue;\\n        queue = [];\\n        while (++queueIndex < len) {\\n            if (currentQueue) {\\n                currentQueue[queueIndex].run();\\n            }\\n        }\\n        queueIndex = -1;\\n        len = queue.length;\\n    }\\n    currentQueue = null;\\n    draining = false;\\n    runClearTimeout(timeout);\\n}\\n\\nprocess.nextTick = function (fun) {\\n    var args = new Array(arguments.length - 1);\\n    if (arguments.length > 1) {\\n        for (var i = 1; i < arguments.length; i++) {\\n            args[i - 1] = arguments[i];\\n        }\\n    }\\n    queue.push(new Item(fun, args));\\n    if (queue.length === 1 && !draining) {\\n        runTimeout(drainQueue);\\n    }\\n};\\n\\n// v8 likes predictible objects\\nfunction Item(fun, array) {\\n    this.fun = fun;\\n    this.array = array;\\n}\\nItem.prototype.run = function () {\\n    this.fun.apply(null, this.array);\\n};\\nprocess.title = 'browser';\\nprocess.browser = true;\\nprocess.env = {};\\nprocess.argv = [];\\nprocess.version = ''; // empty string to avoid regexp issues\\nprocess.versions = {};\\n\\nfunction noop() {}\\n\\nprocess.on = noop;\\nprocess.addListener = noop;\\nprocess.once = noop;\\nprocess.off = noop;\\nprocess.removeListener = noop;\\nprocess.removeAllListeners = noop;\\nprocess.emit = noop;\\n\\nprocess.binding = function (name) {\\n    throw new Error('process.binding is not supported');\\n};\\n\\nprocess.cwd = function () { return '/' };\\nprocess.chdir = function (dir) {\\n    throw new Error('process.chdir is not supported');\\n};\\nprocess.umask = function() { return 0; };\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/process/browser.js\\n// module id = 3\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/process/browser.js?\");\n\n/***/ },\n/* 4 */\n/*!**********************************!*\\\n  !*** ./~/object-assign/index.js ***!\n  \\**********************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n/* eslint-disable no-unused-vars */\\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\\n\\nfunction toObject(val) {\\n\\tif (val === null || val === undefined) {\\n\\t\\tthrow new TypeError('Object.assign cannot be called with null or undefined');\\n\\t}\\n\\n\\treturn Object(val);\\n}\\n\\nfunction shouldUseNative() {\\n\\ttry {\\n\\t\\tif (!Object.assign) {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// Detect buggy property enumeration order in older V8 versions.\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\\n\\t\\tvar test1 = new String('abc');  // eslint-disable-line\\n\\t\\ttest1[5] = 'de';\\n\\t\\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\\n\\t\\tvar test2 = {};\\n\\t\\tfor (var i = 0; i < 10; i++) {\\n\\t\\t\\ttest2['_' + String.fromCharCode(i)] = i;\\n\\t\\t}\\n\\t\\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\\n\\t\\t\\treturn test2[n];\\n\\t\\t});\\n\\t\\tif (order2.join('') !== '0123456789') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\\n\\t\\tvar test3 = {};\\n\\t\\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\\n\\t\\t\\ttest3[letter] = letter;\\n\\t\\t});\\n\\t\\tif (Object.keys(Object.assign({}, test3)).join('') !==\\n\\t\\t\\t\\t'abcdefghijklmnopqrst') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\treturn true;\\n\\t} catch (e) {\\n\\t\\t// We don't expect any of the above to throw, but better to be safe.\\n\\t\\treturn false;\\n\\t}\\n}\\n\\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\\n\\tvar from;\\n\\tvar to = toObject(target);\\n\\tvar symbols;\\n\\n\\tfor (var s = 1; s < arguments.length; s++) {\\n\\t\\tfrom = Object(arguments[s]);\\n\\n\\t\\tfor (var key in from) {\\n\\t\\t\\tif (hasOwnProperty.call(from, key)) {\\n\\t\\t\\t\\tto[key] = from[key];\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tif (Object.getOwnPropertySymbols) {\\n\\t\\t\\tsymbols = Object.getOwnPropertySymbols(from);\\n\\t\\t\\tfor (var i = 0; i < symbols.length; i++) {\\n\\t\\t\\t\\tif (propIsEnumerable.call(from, symbols[i])) {\\n\\t\\t\\t\\t\\tto[symbols[i]] = from[symbols[i]];\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\treturn to;\\n};\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/object-assign/index.js\\n// module id = 4\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/object-assign/index.js?\");\n\n/***/ },\n/* 5 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/ReactChildren.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 6);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\n\\nvar emptyFunction = __webpack_require__(/*! fbjs/lib/emptyFunction */ 12);\\nvar traverseAllChildren = __webpack_require__(/*! ./traverseAllChildren */ 15);\\n\\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\\nvar fourArgumentPooler = PooledClass.fourArgumentPooler;\\n\\nvar userProvidedKeyEscapeRegex = /\\\\/+/g;\\nfunction escapeUserProvidedKey(text) {\\n  return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\\n}\\n\\n/**\\n * PooledClass representing the bookkeeping associated with performing a child\\n * traversal. Allows avoiding binding callbacks.\\n *\\n * @constructor ForEachBookKeeping\\n * @param {!function} forEachFunction Function to perform traversal with.\\n * @param {?*} forEachContext Context to perform context with.\\n */\\nfunction ForEachBookKeeping(forEachFunction, forEachContext) {\\n  this.func = forEachFunction;\\n  this.context = forEachContext;\\n  this.count = 0;\\n}\\nForEachBookKeeping.prototype.destructor = function () {\\n  this.func = null;\\n  this.context = null;\\n  this.count = 0;\\n};\\nPooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);\\n\\nfunction forEachSingleChild(bookKeeping, child, name) {\\n  var func = bookKeeping.func,\\n      context = bookKeeping.context;\\n\\n  func.call(context, child, bookKeeping.count++);\\n}\\n\\n/**\\n * Iterates through children that are typically specified as `props.children`.\\n *\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.foreach\\n *\\n * The provided forEachFunc(child, index) will be called for each\\n * leaf child.\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} forEachFunc\\n * @param {*} forEachContext Context for forEachContext.\\n */\\nfunction forEachChildren(children, forEachFunc, forEachContext) {\\n  if (children == null) {\\n    return children;\\n  }\\n  var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);\\n  traverseAllChildren(children, forEachSingleChild, traverseContext);\\n  ForEachBookKeeping.release(traverseContext);\\n}\\n\\n/**\\n * PooledClass representing the bookkeeping associated with performing a child\\n * mapping. Allows avoiding binding callbacks.\\n *\\n * @constructor MapBookKeeping\\n * @param {!*} mapResult Object containing the ordered map of results.\\n * @param {!function} mapFunction Function to perform mapping with.\\n * @param {?*} mapContext Context to perform mapping with.\\n */\\nfunction MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) {\\n  this.result = mapResult;\\n  this.keyPrefix = keyPrefix;\\n  this.func = mapFunction;\\n  this.context = mapContext;\\n  this.count = 0;\\n}\\nMapBookKeeping.prototype.destructor = function () {\\n  this.result = null;\\n  this.keyPrefix = null;\\n  this.func = null;\\n  this.context = null;\\n  this.count = 0;\\n};\\nPooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler);\\n\\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\\n  var result = bookKeeping.result,\\n      keyPrefix = bookKeeping.keyPrefix,\\n      func = bookKeeping.func,\\n      context = bookKeeping.context;\\n\\n\\n  var mappedChild = func.call(context, child, bookKeeping.count++);\\n  if (Array.isArray(mappedChild)) {\\n    mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);\\n  } else if (mappedChild != null) {\\n    if (ReactElement.isValidElement(mappedChild)) {\\n      mappedChild = ReactElement.cloneAndReplaceKey(mappedChild,\\n      // Keep both the (mapped) and old keys if they differ, just as\\n      // traverseAllChildren used to do for objects as children\\n      keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\\n    }\\n    result.push(mappedChild);\\n  }\\n}\\n\\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\\n  var escapedPrefix = '';\\n  if (prefix != null) {\\n    escapedPrefix = escapeUserProvidedKey(prefix) + '/';\\n  }\\n  var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context);\\n  traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\\n  MapBookKeeping.release(traverseContext);\\n}\\n\\n/**\\n * Maps children that are typically specified as `props.children`.\\n *\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.map\\n *\\n * The provided mapFunction(child, key, index) will be called for each\\n * leaf child.\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} func The map function.\\n * @param {*} context Context for mapFunction.\\n * @return {object} Object containing the ordered map of results.\\n */\\nfunction mapChildren(children, func, context) {\\n  if (children == null) {\\n    return children;\\n  }\\n  var result = [];\\n  mapIntoWithKeyPrefixInternal(children, result, null, func, context);\\n  return result;\\n}\\n\\nfunction forEachSingleChildDummy(traverseContext, child, name) {\\n  return null;\\n}\\n\\n/**\\n * Count the number of children that are typically specified as\\n * `props.children`.\\n *\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.count\\n *\\n * @param {?*} children Children tree container.\\n * @return {number} The number of children.\\n */\\nfunction countChildren(children, context) {\\n  return traverseAllChildren(children, forEachSingleChildDummy, null);\\n}\\n\\n/**\\n * Flatten a children object (typically specified as `props.children`) and\\n * return an array with appropriately re-keyed children.\\n *\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.toarray\\n */\\nfunction toArray(children) {\\n  var result = [];\\n  mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);\\n  return result;\\n}\\n\\nvar ReactChildren = {\\n  forEach: forEachChildren,\\n  map: mapChildren,\\n  mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal,\\n  count: countChildren,\\n  toArray: toArray\\n};\\n\\nmodule.exports = ReactChildren;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactChildren.js\\n// module id = 5\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactChildren.js?\");\n\n/***/ },\n/* 6 */\n/*!************************************!*\\\n  !*** ./~/react/lib/PooledClass.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\n/**\\n * Static poolers. Several custom versions for each potential number of\\n * arguments. A completely generic pooler is easy to implement, but would\\n * require accessing the `arguments` object. In each of these, `this` refers to\\n * the Class itself, not an instance. If any others are needed, simply add them\\n * here, or in their own files.\\n */\\nvar oneArgumentPooler = function (copyFieldsFrom) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, copyFieldsFrom);\\n    return instance;\\n  } else {\\n    return new Klass(copyFieldsFrom);\\n  }\\n};\\n\\nvar twoArgumentPooler = function (a1, a2) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2);\\n  }\\n};\\n\\nvar threeArgumentPooler = function (a1, a2, a3) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2, a3);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2, a3);\\n  }\\n};\\n\\nvar fourArgumentPooler = function (a1, a2, a3, a4) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2, a3, a4);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2, a3, a4);\\n  }\\n};\\n\\nvar fiveArgumentPooler = function (a1, a2, a3, a4, a5) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2, a3, a4, a5);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2, a3, a4, a5);\\n  }\\n};\\n\\nvar standardReleaser = function (instance) {\\n  var Klass = this;\\n  !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;\\n  instance.destructor();\\n  if (Klass.instancePool.length < Klass.poolSize) {\\n    Klass.instancePool.push(instance);\\n  }\\n};\\n\\nvar DEFAULT_POOL_SIZE = 10;\\nvar DEFAULT_POOLER = oneArgumentPooler;\\n\\n/**\\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\\n * you give this may have a `poolSize` property, and will look for a\\n * prototypical `destructor` on instances.\\n *\\n * @param {Function} CopyConstructor Constructor that can be used to reset.\\n * @param {Function} pooler Customizable pooler.\\n */\\nvar addPoolingTo = function (CopyConstructor, pooler) {\\n  // Casting as any so that flow ignores the actual implementation and trusts\\n  // it to match the type we declared\\n  var NewKlass = CopyConstructor;\\n  NewKlass.instancePool = [];\\n  NewKlass.getPooled = pooler || DEFAULT_POOLER;\\n  if (!NewKlass.poolSize) {\\n    NewKlass.poolSize = DEFAULT_POOL_SIZE;\\n  }\\n  NewKlass.release = standardReleaser;\\n  return NewKlass;\\n};\\n\\nvar PooledClass = {\\n  addPoolingTo: addPoolingTo,\\n  oneArgumentPooler: oneArgumentPooler,\\n  twoArgumentPooler: twoArgumentPooler,\\n  threeArgumentPooler: threeArgumentPooler,\\n  fourArgumentPooler: fourArgumentPooler,\\n  fiveArgumentPooler: fiveArgumentPooler\\n};\\n\\nmodule.exports = PooledClass;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/PooledClass.js\\n// module id = 6\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/PooledClass.js?\");\n\n/***/ },\n/* 7 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/reactProdInvariant.js ***!\n  \\*******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n'use strict';\\n\\n/**\\n * WARNING: DO NOT manually require this module.\\n * This is a replacement for `invariant(...)` used by the error code system\\n * and will _only_ be required by the corresponding babel pass.\\n * It always throws.\\n */\\n\\nfunction reactProdInvariant(code) {\\n  var argCount = arguments.length - 1;\\n\\n  var message = 'Minified React error #' + code + '; visit ' + 'http://facebook.github.io/react/docs/error-decoder.html?invariant=' + code;\\n\\n  for (var argIdx = 0; argIdx < argCount; argIdx++) {\\n    message += '&args[]=' + encodeURIComponent(arguments[argIdx + 1]);\\n  }\\n\\n  message += ' for the full message or use the non-minified dev environment' + ' for full errors and additional helpful warnings.';\\n\\n  var error = new Error(message);\\n  error.name = 'Invariant Violation';\\n  error.framesToPop = 1; // we don't care about reactProdInvariant's own frame\\n\\n  throw error;\\n}\\n\\nmodule.exports = reactProdInvariant;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/reactProdInvariant.js\\n// module id = 7\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/reactProdInvariant.js?\");\n\n/***/ },\n/* 8 */\n/*!*********************************!*\\\n  !*** ./~/fbjs/lib/invariant.js ***!\n  \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\n/**\\n * Use invariant() to assert state which your program assumes to be true.\\n *\\n * Provide sprintf-style format (only %s is supported) and arguments\\n * to provide information about what broke and what you were\\n * expecting.\\n *\\n * The invariant message will be stripped in production, but the invariant\\n * will remain to ensure logic does not differ in production.\\n */\\n\\nfunction invariant(condition, format, a, b, c, d, e, f) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    if (format === undefined) {\\n      throw new Error('invariant requires an error message argument');\\n    }\\n  }\\n\\n  if (!condition) {\\n    var error;\\n    if (format === undefined) {\\n      error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\\n    } else {\\n      var args = [a, b, c, d, e, f];\\n      var argIndex = 0;\\n      error = new Error(format.replace(/%s/g, function () {\\n        return args[argIndex++];\\n      }));\\n      error.name = 'Invariant Violation';\\n    }\\n\\n    error.framesToPop = 1; // we don't care about invariant's own frame\\n    throw error;\\n  }\\n}\\n\\nmodule.exports = invariant;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/invariant.js\\n// module id = 8\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/fbjs/lib/invariant.js?\");\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/ReactElement.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 10);\\n\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\nvar canDefineProperty = __webpack_require__(/*! ./canDefineProperty */ 13);\\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\\n\\nvar REACT_ELEMENT_TYPE = __webpack_require__(/*! ./ReactElementSymbol */ 14);\\n\\nvar RESERVED_PROPS = {\\n  key: true,\\n  ref: true,\\n  __self: true,\\n  __source: true\\n};\\n\\nvar specialPropKeyWarningShown, specialPropRefWarningShown;\\n\\nfunction hasValidRef(config) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    if (hasOwnProperty.call(config, 'ref')) {\\n      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\\n      if (getter && getter.isReactWarning) {\\n        return false;\\n      }\\n    }\\n  }\\n  return config.ref !== undefined;\\n}\\n\\nfunction hasValidKey(config) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    if (hasOwnProperty.call(config, 'key')) {\\n      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\\n      if (getter && getter.isReactWarning) {\\n        return false;\\n      }\\n    }\\n  }\\n  return config.key !== undefined;\\n}\\n\\nfunction defineKeyPropWarningGetter(props, displayName) {\\n  var warnAboutAccessingKey = function () {\\n    if (!specialPropKeyWarningShown) {\\n      specialPropKeyWarningShown = true;\\n      process.env.NODE_ENV !== 'production' ? warning(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;\\n    }\\n  };\\n  warnAboutAccessingKey.isReactWarning = true;\\n  Object.defineProperty(props, 'key', {\\n    get: warnAboutAccessingKey,\\n    configurable: true\\n  });\\n}\\n\\nfunction defineRefPropWarningGetter(props, displayName) {\\n  var warnAboutAccessingRef = function () {\\n    if (!specialPropRefWarningShown) {\\n      specialPropRefWarningShown = true;\\n      process.env.NODE_ENV !== 'production' ? warning(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;\\n    }\\n  };\\n  warnAboutAccessingRef.isReactWarning = true;\\n  Object.defineProperty(props, 'ref', {\\n    get: warnAboutAccessingRef,\\n    configurable: true\\n  });\\n}\\n\\n/**\\n * Factory method to create a new React element. This no longer adheres to\\n * the class pattern, so do not use new to call it. Also, no instanceof check\\n * will work. Instead test $$typeof field against Symbol.for('react.element') to check\\n * if something is a React Element.\\n *\\n * @param {*} type\\n * @param {*} key\\n * @param {string|object} ref\\n * @param {*} self A *temporary* helper to detect places where `this` is\\n * different from the `owner` when React.createElement is called, so that we\\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\\n * functions, and as long as `this` and owner are the same, there will be no\\n * change in behavior.\\n * @param {*} source An annotation object (added by a transpiler or otherwise)\\n * indicating filename, line number, and/or other information.\\n * @param {*} owner\\n * @param {*} props\\n * @internal\\n */\\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\\n  var element = {\\n    // This tag allow us to uniquely identify this as a React Element\\n    $$typeof: REACT_ELEMENT_TYPE,\\n\\n    // Built-in properties that belong on the element\\n    type: type,\\n    key: key,\\n    ref: ref,\\n    props: props,\\n\\n    // Record the component responsible for creating this element.\\n    _owner: owner\\n  };\\n\\n  if (process.env.NODE_ENV !== 'production') {\\n    // The validation flag is currently mutative. We put it on\\n    // an external backing store so that we can freeze the whole object.\\n    // This can be replaced with a WeakMap once they are implemented in\\n    // commonly used development environments.\\n    element._store = {};\\n\\n    // To make comparing ReactElements easier for testing purposes, we make\\n    // the validation flag non-enumerable (where possible, which should\\n    // include every environment we run tests in), so the test framework\\n    // ignores it.\\n    if (canDefineProperty) {\\n      Object.defineProperty(element._store, 'validated', {\\n        configurable: false,\\n        enumerable: false,\\n        writable: true,\\n        value: false\\n      });\\n      // self and source are DEV only properties.\\n      Object.defineProperty(element, '_self', {\\n        configurable: false,\\n        enumerable: false,\\n        writable: false,\\n        value: self\\n      });\\n      // Two elements created in two different places should be considered\\n      // equal for testing purposes and therefore we hide it from enumeration.\\n      Object.defineProperty(element, '_source', {\\n        configurable: false,\\n        enumerable: false,\\n        writable: false,\\n        value: source\\n      });\\n    } else {\\n      element._store.validated = false;\\n      element._self = self;\\n      element._source = source;\\n    }\\n    if (Object.freeze) {\\n      Object.freeze(element.props);\\n      Object.freeze(element);\\n    }\\n  }\\n\\n  return element;\\n};\\n\\n/**\\n * Create and return a new ReactElement of the given type.\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createelement\\n */\\nReactElement.createElement = function (type, config, children) {\\n  var propName;\\n\\n  // Reserved names are extracted\\n  var props = {};\\n\\n  var key = null;\\n  var ref = null;\\n  var self = null;\\n  var source = null;\\n\\n  if (config != null) {\\n    if (hasValidRef(config)) {\\n      ref = config.ref;\\n    }\\n    if (hasValidKey(config)) {\\n      key = '' + config.key;\\n    }\\n\\n    self = config.__self === undefined ? null : config.__self;\\n    source = config.__source === undefined ? null : config.__source;\\n    // Remaining properties are added to a new props object\\n    for (propName in config) {\\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\\n        props[propName] = config[propName];\\n      }\\n    }\\n  }\\n\\n  // Children can be more than one argument, and those are transferred onto\\n  // the newly allocated props object.\\n  var childrenLength = arguments.length - 2;\\n  if (childrenLength === 1) {\\n    props.children = children;\\n  } else if (childrenLength > 1) {\\n    var childArray = Array(childrenLength);\\n    for (var i = 0; i < childrenLength; i++) {\\n      childArray[i] = arguments[i + 2];\\n    }\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (Object.freeze) {\\n        Object.freeze(childArray);\\n      }\\n    }\\n    props.children = childArray;\\n  }\\n\\n  // Resolve default props\\n  if (type && type.defaultProps) {\\n    var defaultProps = type.defaultProps;\\n    for (propName in defaultProps) {\\n      if (props[propName] === undefined) {\\n        props[propName] = defaultProps[propName];\\n      }\\n    }\\n  }\\n  if (process.env.NODE_ENV !== 'production') {\\n    if (key || ref) {\\n      if (typeof props.$$typeof === 'undefined' || props.$$typeof !== REACT_ELEMENT_TYPE) {\\n        var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\\n        if (key) {\\n          defineKeyPropWarningGetter(props, displayName);\\n        }\\n        if (ref) {\\n          defineRefPropWarningGetter(props, displayName);\\n        }\\n      }\\n    }\\n  }\\n  return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\\n};\\n\\n/**\\n * Return a function that produces ReactElements of a given type.\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createfactory\\n */\\nReactElement.createFactory = function (type) {\\n  var factory = ReactElement.createElement.bind(null, type);\\n  // Expose the type on the factory and the prototype so that it can be\\n  // easily accessed on elements. E.g. `<Foo />.type === Foo`.\\n  // This should not be named `constructor` since this may not be the function\\n  // that created the element, and it may not even be a constructor.\\n  // Legacy hook TODO: Warn if this is accessed\\n  factory.type = type;\\n  return factory;\\n};\\n\\nReactElement.cloneAndReplaceKey = function (oldElement, newKey) {\\n  var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\\n\\n  return newElement;\\n};\\n\\n/**\\n * Clone and return a new ReactElement using element as the starting point.\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.cloneelement\\n */\\nReactElement.cloneElement = function (element, config, children) {\\n  var propName;\\n\\n  // Original props are copied\\n  var props = _assign({}, element.props);\\n\\n  // Reserved names are extracted\\n  var key = element.key;\\n  var ref = element.ref;\\n  // Self is preserved since the owner is preserved.\\n  var self = element._self;\\n  // Source is preserved since cloneElement is unlikely to be targeted by a\\n  // transpiler, and the original source is probably a better indicator of the\\n  // true owner.\\n  var source = element._source;\\n\\n  // Owner will be preserved, unless ref is overridden\\n  var owner = element._owner;\\n\\n  if (config != null) {\\n    if (hasValidRef(config)) {\\n      // Silently steal the ref from the parent.\\n      ref = config.ref;\\n      owner = ReactCurrentOwner.current;\\n    }\\n    if (hasValidKey(config)) {\\n      key = '' + config.key;\\n    }\\n\\n    // Remaining properties override existing props\\n    var defaultProps;\\n    if (element.type && element.type.defaultProps) {\\n      defaultProps = element.type.defaultProps;\\n    }\\n    for (propName in config) {\\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\\n        if (config[propName] === undefined && defaultProps !== undefined) {\\n          // Resolve default props\\n          props[propName] = defaultProps[propName];\\n        } else {\\n          props[propName] = config[propName];\\n        }\\n      }\\n    }\\n  }\\n\\n  // Children can be more than one argument, and those are transferred onto\\n  // the newly allocated props object.\\n  var childrenLength = arguments.length - 2;\\n  if (childrenLength === 1) {\\n    props.children = children;\\n  } else if (childrenLength > 1) {\\n    var childArray = Array(childrenLength);\\n    for (var i = 0; i < childrenLength; i++) {\\n      childArray[i] = arguments[i + 2];\\n    }\\n    props.children = childArray;\\n  }\\n\\n  return ReactElement(element.type, key, ref, self, source, owner, props);\\n};\\n\\n/**\\n * Verifies the object is a ReactElement.\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.isvalidelement\\n * @param {?object} object\\n * @return {boolean} True if `object` is a valid component.\\n * @final\\n */\\nReactElement.isValidElement = function (object) {\\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\\n};\\n\\nmodule.exports = ReactElement;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactElement.js\\n// module id = 9\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactElement.js?\");\n\n/***/ },\n/* 10 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/ReactCurrentOwner.js ***!\n  \\******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n/**\\n * Keeps track of the current owner.\\n *\\n * The current owner is the component who should own any components that are\\n * currently being constructed.\\n */\\nvar ReactCurrentOwner = {\\n\\n  /**\\n   * @internal\\n   * @type {ReactComponent}\\n   */\\n  current: null\\n\\n};\\n\\nmodule.exports = ReactCurrentOwner;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactCurrentOwner.js\\n// module id = 10\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactCurrentOwner.js?\");\n\n/***/ },\n/* 11 */\n/*!*******************************!*\\\n  !*** ./~/fbjs/lib/warning.js ***!\n  \\*******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014-2015, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\n\\n/**\\n * Similar to invariant but only logs a warning if the condition is not met.\\n * This can be used to log issues in development environments in critical\\n * paths. Removing the logging code for production environments will keep the\\n * same logic and follow the same code paths.\\n */\\n\\nvar warning = emptyFunction;\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  (function () {\\n    var printWarning = function printWarning(format) {\\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\\n        args[_key - 1] = arguments[_key];\\n      }\\n\\n      var argIndex = 0;\\n      var message = 'Warning: ' + format.replace(/%s/g, function () {\\n        return args[argIndex++];\\n      });\\n      if (typeof console !== 'undefined') {\\n        console.error(message);\\n      }\\n      try {\\n        // --- Welcome to debugging React ---\\n        // This error was thrown as a convenience so that you can use this stack\\n        // to find the callsite that caused this warning to fire.\\n        throw new Error(message);\\n      } catch (x) {}\\n    };\\n\\n    warning = function warning(condition, format) {\\n      if (format === undefined) {\\n        throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\\n      }\\n\\n      if (format.indexOf('Failed Composite propType: ') === 0) {\\n        return; // Ignore CompositeComponent proptype check.\\n      }\\n\\n      if (!condition) {\\n        for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\\n          args[_key2 - 2] = arguments[_key2];\\n        }\\n\\n        printWarning.apply(undefined, [format].concat(args));\\n      }\\n    };\\n  })();\\n}\\n\\nmodule.exports = warning;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/warning.js\\n// module id = 11\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/fbjs/lib/warning.js?\");\n\n/***/ },\n/* 12 */\n/*!*************************************!*\\\n  !*** ./~/fbjs/lib/emptyFunction.js ***!\n  \\*************************************/\n/***/ function(module, exports) {\n\n\teval(\"\\\"use strict\\\";\\n\\n/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\nfunction makeEmptyFunction(arg) {\\n  return function () {\\n    return arg;\\n  };\\n}\\n\\n/**\\n * This function accepts and discards inputs; it has no side effects. This is\\n * primarily useful idiomatically for overridable function endpoints which\\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\\n */\\nvar emptyFunction = function emptyFunction() {};\\n\\nemptyFunction.thatReturns = makeEmptyFunction;\\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\\nemptyFunction.thatReturnsThis = function () {\\n  return this;\\n};\\nemptyFunction.thatReturnsArgument = function (arg) {\\n  return arg;\\n};\\n\\nmodule.exports = emptyFunction;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/emptyFunction.js\\n// module id = 12\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/fbjs/lib/emptyFunction.js?\");\n\n/***/ },\n/* 13 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/canDefineProperty.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar canDefineProperty = false;\\nif (process.env.NODE_ENV !== 'production') {\\n  try {\\n    // $FlowFixMe https://github.com/facebook/flow/issues/285\\n    Object.defineProperty({}, 'x', { get: function () {} });\\n    canDefineProperty = true;\\n  } catch (x) {\\n    // IE will fail on defineProperty\\n  }\\n}\\n\\nmodule.exports = canDefineProperty;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/canDefineProperty.js\\n// module id = 13\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/canDefineProperty.js?\");\n\n/***/ },\n/* 14 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/ReactElementSymbol.js ***!\n  \\*******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2014-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n// The Symbol used to tag the ReactElement type. If there is no native Symbol\\n// nor polyfill, then a plain number is used for performance.\\n\\nvar REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;\\n\\nmodule.exports = REACT_ELEMENT_TYPE;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactElementSymbol.js\\n// module id = 14\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactElementSymbol.js?\");\n\n/***/ },\n/* 15 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/traverseAllChildren.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 10);\\nvar REACT_ELEMENT_TYPE = __webpack_require__(/*! ./ReactElementSymbol */ 14);\\n\\nvar getIteratorFn = __webpack_require__(/*! ./getIteratorFn */ 16);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar KeyEscapeUtils = __webpack_require__(/*! ./KeyEscapeUtils */ 17);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar SEPARATOR = '.';\\nvar SUBSEPARATOR = ':';\\n\\n/**\\n * This is inlined from ReactElement since this file is shared between\\n * isomorphic and renderers. We could extract this to a\\n *\\n */\\n\\n/**\\n * TODO: Test that a single child and an array with one item have the same key\\n * pattern.\\n */\\n\\nvar didWarnAboutMaps = false;\\n\\n/**\\n * Generate a key string that identifies a component within a set.\\n *\\n * @param {*} component A component that could contain a manual key.\\n * @param {number} index Index that is used if a manual key is not provided.\\n * @return {string}\\n */\\nfunction getComponentKey(component, index) {\\n  // Do some typechecking here since we call this blindly. We want to ensure\\n  // that we don't block potential future ES APIs.\\n  if (component && typeof component === 'object' && component.key != null) {\\n    // Explicit key\\n    return KeyEscapeUtils.escape(component.key);\\n  }\\n  // Implicit key determined by the index in the set\\n  return index.toString(36);\\n}\\n\\n/**\\n * @param {?*} children Children tree container.\\n * @param {!string} nameSoFar Name of the key path so far.\\n * @param {!function} callback Callback to invoke with each child found.\\n * @param {?*} traverseContext Used to pass information throughout the traversal\\n * process.\\n * @return {!number} The number of children in this subtree.\\n */\\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\\n  var type = typeof children;\\n\\n  if (type === 'undefined' || type === 'boolean') {\\n    // All of the above are perceived as null.\\n    children = null;\\n  }\\n\\n  if (children === null || type === 'string' || type === 'number' ||\\n  // The following is inlined from ReactElement. This means we can optimize\\n  // some checks. React Fiber also inlines this logic for similar purposes.\\n  type === 'object' && children.$$typeof === REACT_ELEMENT_TYPE) {\\n    callback(traverseContext, children,\\n    // If it's the only child, treat the name as if it was wrapped in an array\\n    // so that it's consistent if the number of children grows.\\n    nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\\n    return 1;\\n  }\\n\\n  var child;\\n  var nextName;\\n  var subtreeCount = 0; // Count of children found in the current subtree.\\n  var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\\n\\n  if (Array.isArray(children)) {\\n    for (var i = 0; i < children.length; i++) {\\n      child = children[i];\\n      nextName = nextNamePrefix + getComponentKey(child, i);\\n      subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\\n    }\\n  } else {\\n    var iteratorFn = getIteratorFn(children);\\n    if (iteratorFn) {\\n      var iterator = iteratorFn.call(children);\\n      var step;\\n      if (iteratorFn !== children.entries) {\\n        var ii = 0;\\n        while (!(step = iterator.next()).done) {\\n          child = step.value;\\n          nextName = nextNamePrefix + getComponentKey(child, ii++);\\n          subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\\n        }\\n      } else {\\n        if (process.env.NODE_ENV !== 'production') {\\n          var mapsAsChildrenAddendum = '';\\n          if (ReactCurrentOwner.current) {\\n            var mapsAsChildrenOwnerName = ReactCurrentOwner.current.getName();\\n            if (mapsAsChildrenOwnerName) {\\n              mapsAsChildrenAddendum = ' Check the render method of `' + mapsAsChildrenOwnerName + '`.';\\n            }\\n          }\\n          process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.%s', mapsAsChildrenAddendum) : void 0;\\n          didWarnAboutMaps = true;\\n        }\\n        // Iterator will provide entry [k,v] tuples rather than values.\\n        while (!(step = iterator.next()).done) {\\n          var entry = step.value;\\n          if (entry) {\\n            child = entry[1];\\n            nextName = nextNamePrefix + KeyEscapeUtils.escape(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);\\n            subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\\n          }\\n        }\\n      }\\n    } else if (type === 'object') {\\n      var addendum = '';\\n      if (process.env.NODE_ENV !== 'production') {\\n        addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';\\n        if (children._isReactElement) {\\n          addendum = ' It looks like you\\\\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';\\n        }\\n        if (ReactCurrentOwner.current) {\\n          var name = ReactCurrentOwner.current.getName();\\n          if (name) {\\n            addendum += ' Check the render method of `' + name + '`.';\\n          }\\n        }\\n      }\\n      var childrenString = String(children);\\n       true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : _prodInvariant('31', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : void 0;\\n    }\\n  }\\n\\n  return subtreeCount;\\n}\\n\\n/**\\n * Traverses children that are typically specified as `props.children`, but\\n * might also be specified through attributes:\\n *\\n * - `traverseAllChildren(this.props.children, ...)`\\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\\n *\\n * The `traverseContext` is an optional argument that is passed through the\\n * entire traversal. It can be used to store accumulations or anything else that\\n * the callback might find relevant.\\n *\\n * @param {?*} children Children tree object.\\n * @param {!function} callback To invoke upon traversing each child.\\n * @param {?*} traverseContext Context for traversal.\\n * @return {!number} The number of children in this subtree.\\n */\\nfunction traverseAllChildren(children, callback, traverseContext) {\\n  if (children == null) {\\n    return 0;\\n  }\\n\\n  return traverseAllChildrenImpl(children, '', callback, traverseContext);\\n}\\n\\nmodule.exports = traverseAllChildren;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/traverseAllChildren.js\\n// module id = 15\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/traverseAllChildren.js?\");\n\n/***/ },\n/* 16 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/getIteratorFn.js ***!\n  \\**************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n/* global Symbol */\\n\\nvar ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\\nvar FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\\n\\n/**\\n * Returns the iterator method function contained on the iterable object.\\n *\\n * Be sure to invoke the function with the iterable as context:\\n *\\n *     var iteratorFn = getIteratorFn(myIterable);\\n *     if (iteratorFn) {\\n *       var iterator = iteratorFn.call(myIterable);\\n *       ...\\n *     }\\n *\\n * @param {?object} maybeIterable\\n * @return {?function}\\n */\\nfunction getIteratorFn(maybeIterable) {\\n  var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\\n  if (typeof iteratorFn === 'function') {\\n    return iteratorFn;\\n  }\\n}\\n\\nmodule.exports = getIteratorFn;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/getIteratorFn.js\\n// module id = 16\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/getIteratorFn.js?\");\n\n/***/ },\n/* 17 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/KeyEscapeUtils.js ***!\n  \\***************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n/**\\n * Escape and wrap key so it is safe to use as a reactid\\n *\\n * @param {string} key to be escaped.\\n * @return {string} the escaped key.\\n */\\n\\nfunction escape(key) {\\n  var escapeRegex = /[=:]/g;\\n  var escaperLookup = {\\n    '=': '=0',\\n    ':': '=2'\\n  };\\n  var escapedString = ('' + key).replace(escapeRegex, function (match) {\\n    return escaperLookup[match];\\n  });\\n\\n  return '$' + escapedString;\\n}\\n\\n/**\\n * Unescape and unwrap key for human-readable display\\n *\\n * @param {string} key to unescape.\\n * @return {string} the unescaped key.\\n */\\nfunction unescape(key) {\\n  var unescapeRegex = /(=0|=2)/g;\\n  var unescaperLookup = {\\n    '=0': '=',\\n    '=2': ':'\\n  };\\n  var keySubstring = key[0] === '.' && key[1] === '$' ? key.substring(2) : key.substring(1);\\n\\n  return ('' + keySubstring).replace(unescapeRegex, function (match) {\\n    return unescaperLookup[match];\\n  });\\n}\\n\\nvar KeyEscapeUtils = {\\n  escape: escape,\\n  unescape: unescape\\n};\\n\\nmodule.exports = KeyEscapeUtils;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/KeyEscapeUtils.js\\n// module id = 17\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/KeyEscapeUtils.js?\");\n\n/***/ },\n/* 18 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactComponent.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar ReactNoopUpdateQueue = __webpack_require__(/*! ./ReactNoopUpdateQueue */ 19);\\n\\nvar canDefineProperty = __webpack_require__(/*! ./canDefineProperty */ 13);\\nvar emptyObject = __webpack_require__(/*! fbjs/lib/emptyObject */ 20);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\n/**\\n * Base class helpers for the updating state of a component.\\n */\\nfunction ReactComponent(props, context, updater) {\\n  this.props = props;\\n  this.context = context;\\n  this.refs = emptyObject;\\n  // We initialize the default updater but the real one gets injected by the\\n  // renderer.\\n  this.updater = updater || ReactNoopUpdateQueue;\\n}\\n\\nReactComponent.prototype.isReactComponent = {};\\n\\n/**\\n * Sets a subset of the state. Always use this to mutate\\n * state. You should treat `this.state` as immutable.\\n *\\n * There is no guarantee that `this.state` will be immediately updated, so\\n * accessing `this.state` after calling this method may return the old value.\\n *\\n * There is no guarantee that calls to `setState` will run synchronously,\\n * as they may eventually be batched together.  You can provide an optional\\n * callback that will be executed when the call to setState is actually\\n * completed.\\n *\\n * When a function is provided to setState, it will be called at some point in\\n * the future (not synchronously). It will be called with the up to date\\n * component arguments (state, props, context). These values can be different\\n * from this.* because your function may be called after receiveProps but before\\n * shouldComponentUpdate, and this new state, props, and context will not yet be\\n * assigned to this.\\n *\\n * @param {object|function} partialState Next partial state or function to\\n *        produce next partial state to be merged with current state.\\n * @param {?function} callback Called after state is updated.\\n * @final\\n * @protected\\n */\\nReactComponent.prototype.setState = function (partialState, callback) {\\n  !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : _prodInvariant('85') : void 0;\\n  this.updater.enqueueSetState(this, partialState);\\n  if (callback) {\\n    this.updater.enqueueCallback(this, callback, 'setState');\\n  }\\n};\\n\\n/**\\n * Forces an update. This should only be invoked when it is known with\\n * certainty that we are **not** in a DOM transaction.\\n *\\n * You may want to call this when you know that some deeper aspect of the\\n * component's state has changed but `setState` was not called.\\n *\\n * This will not invoke `shouldComponentUpdate`, but it will invoke\\n * `componentWillUpdate` and `componentDidUpdate`.\\n *\\n * @param {?function} callback Called after update is complete.\\n * @final\\n * @protected\\n */\\nReactComponent.prototype.forceUpdate = function (callback) {\\n  this.updater.enqueueForceUpdate(this);\\n  if (callback) {\\n    this.updater.enqueueCallback(this, callback, 'forceUpdate');\\n  }\\n};\\n\\n/**\\n * Deprecated APIs. These APIs used to exist on classic React classes but since\\n * we would like to deprecate them, we're not going to move them over to this\\n * modern base class. Instead, we define a getter that warns if it's accessed.\\n */\\nif (process.env.NODE_ENV !== 'production') {\\n  var deprecatedAPIs = {\\n    isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\\n    replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\\n  };\\n  var defineDeprecationWarning = function (methodName, info) {\\n    if (canDefineProperty) {\\n      Object.defineProperty(ReactComponent.prototype, methodName, {\\n        get: function () {\\n          process.env.NODE_ENV !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : void 0;\\n          return undefined;\\n        }\\n      });\\n    }\\n  };\\n  for (var fnName in deprecatedAPIs) {\\n    if (deprecatedAPIs.hasOwnProperty(fnName)) {\\n      defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\\n    }\\n  }\\n}\\n\\nmodule.exports = ReactComponent;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactComponent.js\\n// module id = 18\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactComponent.js?\");\n\n/***/ },\n/* 19 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ReactNoopUpdateQueue.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2015-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nfunction warnNoop(publicInstance, callerName) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    var constructor = publicInstance.constructor;\\n    process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, constructor && (constructor.displayName || constructor.name) || 'ReactClass') : void 0;\\n  }\\n}\\n\\n/**\\n * This is the abstract API for an update queue.\\n */\\nvar ReactNoopUpdateQueue = {\\n\\n  /**\\n   * Checks whether or not this composite component is mounted.\\n   * @param {ReactClass} publicInstance The instance we want to test.\\n   * @return {boolean} True if mounted, false otherwise.\\n   * @protected\\n   * @final\\n   */\\n  isMounted: function (publicInstance) {\\n    return false;\\n  },\\n\\n  /**\\n   * Enqueue a callback that will be executed after all the pending updates\\n   * have processed.\\n   *\\n   * @param {ReactClass} publicInstance The instance to use as `this` context.\\n   * @param {?function} callback Called after state is updated.\\n   * @internal\\n   */\\n  enqueueCallback: function (publicInstance, callback) {},\\n\\n  /**\\n   * Forces an update. This should only be invoked when it is known with\\n   * certainty that we are **not** in a DOM transaction.\\n   *\\n   * You may want to call this when you know that some deeper aspect of the\\n   * component's state has changed but `setState` was not called.\\n   *\\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\\n   * `componentWillUpdate` and `componentDidUpdate`.\\n   *\\n   * @param {ReactClass} publicInstance The instance that should rerender.\\n   * @internal\\n   */\\n  enqueueForceUpdate: function (publicInstance) {\\n    warnNoop(publicInstance, 'forceUpdate');\\n  },\\n\\n  /**\\n   * Replaces all of the state. Always use this or `setState` to mutate state.\\n   * You should treat `this.state` as immutable.\\n   *\\n   * There is no guarantee that `this.state` will be immediately updated, so\\n   * accessing `this.state` after calling this method may return the old value.\\n   *\\n   * @param {ReactClass} publicInstance The instance that should rerender.\\n   * @param {object} completeState Next state.\\n   * @internal\\n   */\\n  enqueueReplaceState: function (publicInstance, completeState) {\\n    warnNoop(publicInstance, 'replaceState');\\n  },\\n\\n  /**\\n   * Sets a subset of the state. This only exists because _pendingState is\\n   * internal. This provides a merging strategy that is not available to deep\\n   * properties which is confusing. TODO: Expose pendingState or don't use it\\n   * during the merge.\\n   *\\n   * @param {ReactClass} publicInstance The instance that should rerender.\\n   * @param {object} partialState Next partial state to be merged with state.\\n   * @internal\\n   */\\n  enqueueSetState: function (publicInstance, partialState) {\\n    warnNoop(publicInstance, 'setState');\\n  }\\n};\\n\\nmodule.exports = ReactNoopUpdateQueue;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactNoopUpdateQueue.js\\n// module id = 19\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactNoopUpdateQueue.js?\");\n\n/***/ },\n/* 20 */\n/*!***********************************!*\\\n  !*** ./~/fbjs/lib/emptyObject.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar emptyObject = {};\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  Object.freeze(emptyObject);\\n}\\n\\nmodule.exports = emptyObject;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/emptyObject.js\\n// module id = 20\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/fbjs/lib/emptyObject.js?\");\n\n/***/ },\n/* 21 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/ReactPureComponent.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 18);\\nvar ReactNoopUpdateQueue = __webpack_require__(/*! ./ReactNoopUpdateQueue */ 19);\\n\\nvar emptyObject = __webpack_require__(/*! fbjs/lib/emptyObject */ 20);\\n\\n/**\\n * Base class helpers for the updating state of a component.\\n */\\nfunction ReactPureComponent(props, context, updater) {\\n  // Duplicated from ReactComponent.\\n  this.props = props;\\n  this.context = context;\\n  this.refs = emptyObject;\\n  // We initialize the default updater but the real one gets injected by the\\n  // renderer.\\n  this.updater = updater || ReactNoopUpdateQueue;\\n}\\n\\nfunction ComponentDummy() {}\\nComponentDummy.prototype = ReactComponent.prototype;\\nReactPureComponent.prototype = new ComponentDummy();\\nReactPureComponent.prototype.constructor = ReactPureComponent;\\n// Avoid an extra prototype jump for these methods.\\n_assign(ReactPureComponent.prototype, ReactComponent.prototype);\\nReactPureComponent.prototype.isPureReactComponent = true;\\n\\nmodule.exports = ReactPureComponent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactPureComponent.js\\n// module id = 21\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactPureComponent.js?\");\n\n/***/ },\n/* 22 */\n/*!***********************************!*\\\n  !*** ./~/react/lib/ReactClass.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7),\\n    _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 18);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\nvar ReactPropTypeLocationNames = __webpack_require__(/*! ./ReactPropTypeLocationNames */ 23);\\nvar ReactNoopUpdateQueue = __webpack_require__(/*! ./ReactNoopUpdateQueue */ 19);\\n\\nvar emptyObject = __webpack_require__(/*! fbjs/lib/emptyObject */ 20);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar MIXINS_KEY = 'mixins';\\n\\n// Helper function to allow the creation of anonymous functions which do not\\n// have .name set to the name of the variable being assigned to.\\nfunction identity(fn) {\\n  return fn;\\n}\\n\\n/**\\n * Policies that describe methods in `ReactClassInterface`.\\n */\\n\\n\\nvar injectedMixins = [];\\n\\n/**\\n * Composite components are higher-level components that compose other composite\\n * or host components.\\n *\\n * To create a new type of `ReactClass`, pass a specification of\\n * your new class to `React.createClass`. The only requirement of your class\\n * specification is that you implement a `render` method.\\n *\\n *   var MyComponent = React.createClass({\\n *     render: function() {\\n *       return <div>Hello World</div>;\\n *     }\\n *   });\\n *\\n * The class specification supports a specific protocol of methods that have\\n * special meaning (e.g. `render`). See `ReactClassInterface` for\\n * more the comprehensive protocol. Any other properties and methods in the\\n * class specification will be available on the prototype.\\n *\\n * @interface ReactClassInterface\\n * @internal\\n */\\nvar ReactClassInterface = {\\n\\n  /**\\n   * An array of Mixin objects to include when defining your component.\\n   *\\n   * @type {array}\\n   * @optional\\n   */\\n  mixins: 'DEFINE_MANY',\\n\\n  /**\\n   * An object containing properties and methods that should be defined on\\n   * the component's constructor instead of its prototype (static methods).\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  statics: 'DEFINE_MANY',\\n\\n  /**\\n   * Definition of prop types for this component.\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  propTypes: 'DEFINE_MANY',\\n\\n  /**\\n   * Definition of context types for this component.\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  contextTypes: 'DEFINE_MANY',\\n\\n  /**\\n   * Definition of context types this component sets for its children.\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  childContextTypes: 'DEFINE_MANY',\\n\\n  // ==== Definition methods ====\\n\\n  /**\\n   * Invoked when the component is mounted. Values in the mapping will be set on\\n   * `this.props` if that prop is not specified (i.e. using an `in` check).\\n   *\\n   * This method is invoked before `getInitialState` and therefore cannot rely\\n   * on `this.state` or use `this.setState`.\\n   *\\n   * @return {object}\\n   * @optional\\n   */\\n  getDefaultProps: 'DEFINE_MANY_MERGED',\\n\\n  /**\\n   * Invoked once before the component is mounted. The return value will be used\\n   * as the initial value of `this.state`.\\n   *\\n   *   getInitialState: function() {\\n   *     return {\\n   *       isOn: false,\\n   *       fooBaz: new BazFoo()\\n   *     }\\n   *   }\\n   *\\n   * @return {object}\\n   * @optional\\n   */\\n  getInitialState: 'DEFINE_MANY_MERGED',\\n\\n  /**\\n   * @return {object}\\n   * @optional\\n   */\\n  getChildContext: 'DEFINE_MANY_MERGED',\\n\\n  /**\\n   * Uses props from `this.props` and state from `this.state` to render the\\n   * structure of the component.\\n   *\\n   * No guarantees are made about when or how often this method is invoked, so\\n   * it must not have side effects.\\n   *\\n   *   render: function() {\\n   *     var name = this.props.name;\\n   *     return <div>Hello, {name}!</div>;\\n   *   }\\n   *\\n   * @return {ReactComponent}\\n   * @nosideeffects\\n   * @required\\n   */\\n  render: 'DEFINE_ONCE',\\n\\n  // ==== Delegate methods ====\\n\\n  /**\\n   * Invoked when the component is initially created and about to be mounted.\\n   * This may have side effects, but any external subscriptions or data created\\n   * by this method must be cleaned up in `componentWillUnmount`.\\n   *\\n   * @optional\\n   */\\n  componentWillMount: 'DEFINE_MANY',\\n\\n  /**\\n   * Invoked when the component has been mounted and has a DOM representation.\\n   * However, there is no guarantee that the DOM node is in the document.\\n   *\\n   * Use this as an opportunity to operate on the DOM when the component has\\n   * been mounted (initialized and rendered) for the first time.\\n   *\\n   * @param {DOMElement} rootNode DOM element representing the component.\\n   * @optional\\n   */\\n  componentDidMount: 'DEFINE_MANY',\\n\\n  /**\\n   * Invoked before the component receives new props.\\n   *\\n   * Use this as an opportunity to react to a prop transition by updating the\\n   * state using `this.setState`. Current props are accessed via `this.props`.\\n   *\\n   *   componentWillReceiveProps: function(nextProps, nextContext) {\\n   *     this.setState({\\n   *       likesIncreasing: nextProps.likeCount > this.props.likeCount\\n   *     });\\n   *   }\\n   *\\n   * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\\n   * transition may cause a state change, but the opposite is not true. If you\\n   * need it, you are probably looking for `componentWillUpdate`.\\n   *\\n   * @param {object} nextProps\\n   * @optional\\n   */\\n  componentWillReceiveProps: 'DEFINE_MANY',\\n\\n  /**\\n   * Invoked while deciding if the component should be updated as a result of\\n   * receiving new props, state and/or context.\\n   *\\n   * Use this as an opportunity to `return false` when you're certain that the\\n   * transition to the new props/state/context will not require a component\\n   * update.\\n   *\\n   *   shouldComponentUpdate: function(nextProps, nextState, nextContext) {\\n   *     return !equal(nextProps, this.props) ||\\n   *       !equal(nextState, this.state) ||\\n   *       !equal(nextContext, this.context);\\n   *   }\\n   *\\n   * @param {object} nextProps\\n   * @param {?object} nextState\\n   * @param {?object} nextContext\\n   * @return {boolean} True if the component should update.\\n   * @optional\\n   */\\n  shouldComponentUpdate: 'DEFINE_ONCE',\\n\\n  /**\\n   * Invoked when the component is about to update due to a transition from\\n   * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\\n   * and `nextContext`.\\n   *\\n   * Use this as an opportunity to perform preparation before an update occurs.\\n   *\\n   * NOTE: You **cannot** use `this.setState()` in this method.\\n   *\\n   * @param {object} nextProps\\n   * @param {?object} nextState\\n   * @param {?object} nextContext\\n   * @param {ReactReconcileTransaction} transaction\\n   * @optional\\n   */\\n  componentWillUpdate: 'DEFINE_MANY',\\n\\n  /**\\n   * Invoked when the component's DOM representation has been updated.\\n   *\\n   * Use this as an opportunity to operate on the DOM when the component has\\n   * been updated.\\n   *\\n   * @param {object} prevProps\\n   * @param {?object} prevState\\n   * @param {?object} prevContext\\n   * @param {DOMElement} rootNode DOM element representing the component.\\n   * @optional\\n   */\\n  componentDidUpdate: 'DEFINE_MANY',\\n\\n  /**\\n   * Invoked when the component is about to be removed from its parent and have\\n   * its DOM representation destroyed.\\n   *\\n   * Use this as an opportunity to deallocate any external resources.\\n   *\\n   * NOTE: There is no `componentDidUnmount` since your component will have been\\n   * destroyed by that point.\\n   *\\n   * @optional\\n   */\\n  componentWillUnmount: 'DEFINE_MANY',\\n\\n  // ==== Advanced methods ====\\n\\n  /**\\n   * Updates the component's currently mounted DOM representation.\\n   *\\n   * By default, this implements React's rendering and reconciliation algorithm.\\n   * Sophisticated clients may wish to override this.\\n   *\\n   * @param {ReactReconcileTransaction} transaction\\n   * @internal\\n   * @overridable\\n   */\\n  updateComponent: 'OVERRIDE_BASE'\\n\\n};\\n\\n/**\\n * Mapping from class specification keys to special processing functions.\\n *\\n * Although these are declared like instance properties in the specification\\n * when defining classes using `React.createClass`, they are actually static\\n * and are accessible on the constructor instead of the prototype. Despite\\n * being static, they must be defined outside of the \\\"statics\\\" key under\\n * which all other static methods are defined.\\n */\\nvar RESERVED_SPEC_KEYS = {\\n  displayName: function (Constructor, displayName) {\\n    Constructor.displayName = displayName;\\n  },\\n  mixins: function (Constructor, mixins) {\\n    if (mixins) {\\n      for (var i = 0; i < mixins.length; i++) {\\n        mixSpecIntoComponent(Constructor, mixins[i]);\\n      }\\n    }\\n  },\\n  childContextTypes: function (Constructor, childContextTypes) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      validateTypeDef(Constructor, childContextTypes, 'childContext');\\n    }\\n    Constructor.childContextTypes = _assign({}, Constructor.childContextTypes, childContextTypes);\\n  },\\n  contextTypes: function (Constructor, contextTypes) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      validateTypeDef(Constructor, contextTypes, 'context');\\n    }\\n    Constructor.contextTypes = _assign({}, Constructor.contextTypes, contextTypes);\\n  },\\n  /**\\n   * Special case getDefaultProps which should move into statics but requires\\n   * automatic merging.\\n   */\\n  getDefaultProps: function (Constructor, getDefaultProps) {\\n    if (Constructor.getDefaultProps) {\\n      Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);\\n    } else {\\n      Constructor.getDefaultProps = getDefaultProps;\\n    }\\n  },\\n  propTypes: function (Constructor, propTypes) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      validateTypeDef(Constructor, propTypes, 'prop');\\n    }\\n    Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);\\n  },\\n  statics: function (Constructor, statics) {\\n    mixStaticSpecIntoComponent(Constructor, statics);\\n  },\\n  autobind: function () {} };\\n\\nfunction validateTypeDef(Constructor, typeDef, location) {\\n  for (var propName in typeDef) {\\n    if (typeDef.hasOwnProperty(propName)) {\\n      // use a warning instead of an invariant so components\\n      // don't show up in prod but only in __DEV__\\n      process.env.NODE_ENV !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : void 0;\\n    }\\n  }\\n}\\n\\nfunction validateMethodOverride(isAlreadyDefined, name) {\\n  var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;\\n\\n  // Disallow overriding of base class methods unless explicitly allowed.\\n  if (ReactClassMixin.hasOwnProperty(name)) {\\n    !(specPolicy === 'OVERRIDE_BASE') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.', name) : _prodInvariant('73', name) : void 0;\\n  }\\n\\n  // Disallow defining methods more than once unless explicitly allowed.\\n  if (isAlreadyDefined) {\\n    !(specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('74', name) : void 0;\\n  }\\n}\\n\\n/**\\n * Mixin helper which handles policy validation and reserved\\n * specification keys when building React classes.\\n */\\nfunction mixSpecIntoComponent(Constructor, spec) {\\n  if (!spec) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      var typeofSpec = typeof spec;\\n      var isMixinValid = typeofSpec === 'object' && spec !== null;\\n\\n      process.env.NODE_ENV !== 'production' ? warning(isMixinValid, '%s: You\\\\'re attempting to include a mixin that is either null ' + 'or not an object. Check the mixins included by the component, ' + 'as well as any mixins they include themselves. ' + 'Expected object but got %s.', Constructor.displayName || 'ReactClass', spec === null ? null : typeofSpec) : void 0;\\n    }\\n\\n    return;\\n  }\\n\\n  !(typeof spec !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\\\'re attempting to use a component class or function as a mixin. Instead, just use a regular object.') : _prodInvariant('75') : void 0;\\n  !!ReactElement.isValidElement(spec) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\\\'re attempting to use a component as a mixin. Instead, just use a regular object.') : _prodInvariant('76') : void 0;\\n\\n  var proto = Constructor.prototype;\\n  var autoBindPairs = proto.__reactAutoBindPairs;\\n\\n  // By handling mixins before any other properties, we ensure the same\\n  // chaining order is applied to methods with DEFINE_MANY policy, whether\\n  // mixins are listed before or after these methods in the spec.\\n  if (spec.hasOwnProperty(MIXINS_KEY)) {\\n    RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\\n  }\\n\\n  for (var name in spec) {\\n    if (!spec.hasOwnProperty(name)) {\\n      continue;\\n    }\\n\\n    if (name === MIXINS_KEY) {\\n      // We have already handled mixins in a special case above.\\n      continue;\\n    }\\n\\n    var property = spec[name];\\n    var isAlreadyDefined = proto.hasOwnProperty(name);\\n    validateMethodOverride(isAlreadyDefined, name);\\n\\n    if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\\n      RESERVED_SPEC_KEYS[name](Constructor, property);\\n    } else {\\n      // Setup methods on prototype:\\n      // The following member methods should not be automatically bound:\\n      // 1. Expected ReactClass methods (in the \\\"interface\\\").\\n      // 2. Overridden methods (that were mixed in).\\n      var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\\n      var isFunction = typeof property === 'function';\\n      var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;\\n\\n      if (shouldAutoBind) {\\n        autoBindPairs.push(name, property);\\n        proto[name] = property;\\n      } else {\\n        if (isAlreadyDefined) {\\n          var specPolicy = ReactClassInterface[name];\\n\\n          // These cases should already be caught by validateMethodOverride.\\n          !(isReactClassMethod && (specPolicy === 'DEFINE_MANY_MERGED' || specPolicy === 'DEFINE_MANY')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.', specPolicy, name) : _prodInvariant('77', specPolicy, name) : void 0;\\n\\n          // For methods which are defined more than once, call the existing\\n          // methods before calling the new property, merging if appropriate.\\n          if (specPolicy === 'DEFINE_MANY_MERGED') {\\n            proto[name] = createMergedResultFunction(proto[name], property);\\n          } else if (specPolicy === 'DEFINE_MANY') {\\n            proto[name] = createChainedFunction(proto[name], property);\\n          }\\n        } else {\\n          proto[name] = property;\\n          if (process.env.NODE_ENV !== 'production') {\\n            // Add verbose displayName to the function, which helps when looking\\n            // at profiling tools.\\n            if (typeof property === 'function' && spec.displayName) {\\n              proto[name].displayName = spec.displayName + '_' + name;\\n            }\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\n\\nfunction mixStaticSpecIntoComponent(Constructor, statics) {\\n  if (!statics) {\\n    return;\\n  }\\n  for (var name in statics) {\\n    var property = statics[name];\\n    if (!statics.hasOwnProperty(name)) {\\n      continue;\\n    }\\n\\n    var isReserved = name in RESERVED_SPEC_KEYS;\\n    !!isReserved ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\\\\'t be on the \\\"statics\\\" key. Define it as an instance property instead; it will still be accessible on the constructor.', name) : _prodInvariant('78', name) : void 0;\\n\\n    var isInherited = name in Constructor;\\n    !!isInherited ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('79', name) : void 0;\\n    Constructor[name] = property;\\n  }\\n}\\n\\n/**\\n * Merge two objects, but throw if both contain the same key.\\n *\\n * @param {object} one The first object, which is mutated.\\n * @param {object} two The second object\\n * @return {object} one after it has been mutated to contain everything in two.\\n */\\nfunction mergeIntoWithNoDuplicateKeys(one, two) {\\n  !(one && two && typeof one === 'object' && typeof two === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : _prodInvariant('80') : void 0;\\n\\n  for (var key in two) {\\n    if (two.hasOwnProperty(key)) {\\n      !(one[key] === undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.', key) : _prodInvariant('81', key) : void 0;\\n      one[key] = two[key];\\n    }\\n  }\\n  return one;\\n}\\n\\n/**\\n * Creates a function that invokes two functions and merges their return values.\\n *\\n * @param {function} one Function to invoke first.\\n * @param {function} two Function to invoke second.\\n * @return {function} Function that invokes the two argument functions.\\n * @private\\n */\\nfunction createMergedResultFunction(one, two) {\\n  return function mergedResult() {\\n    var a = one.apply(this, arguments);\\n    var b = two.apply(this, arguments);\\n    if (a == null) {\\n      return b;\\n    } else if (b == null) {\\n      return a;\\n    }\\n    var c = {};\\n    mergeIntoWithNoDuplicateKeys(c, a);\\n    mergeIntoWithNoDuplicateKeys(c, b);\\n    return c;\\n  };\\n}\\n\\n/**\\n * Creates a function that invokes two functions and ignores their return vales.\\n *\\n * @param {function} one Function to invoke first.\\n * @param {function} two Function to invoke second.\\n * @return {function} Function that invokes the two argument functions.\\n * @private\\n */\\nfunction createChainedFunction(one, two) {\\n  return function chainedFunction() {\\n    one.apply(this, arguments);\\n    two.apply(this, arguments);\\n  };\\n}\\n\\n/**\\n * Binds a method to the component.\\n *\\n * @param {object} component Component whose method is going to be bound.\\n * @param {function} method Method to be bound.\\n * @return {function} The bound method.\\n */\\nfunction bindAutoBindMethod(component, method) {\\n  var boundMethod = method.bind(component);\\n  if (process.env.NODE_ENV !== 'production') {\\n    boundMethod.__reactBoundContext = component;\\n    boundMethod.__reactBoundMethod = method;\\n    boundMethod.__reactBoundArguments = null;\\n    var componentName = component.constructor.displayName;\\n    var _bind = boundMethod.bind;\\n    boundMethod.bind = function (newThis) {\\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\\n        args[_key - 1] = arguments[_key];\\n      }\\n\\n      // User is trying to bind() an autobound method; we effectively will\\n      // ignore the value of \\\"this\\\" that the user is trying to use, so\\n      // let's warn.\\n      if (newThis !== component && newThis !== null) {\\n        process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : void 0;\\n      } else if (!args.length) {\\n        process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : void 0;\\n        return boundMethod;\\n      }\\n      var reboundMethod = _bind.apply(boundMethod, arguments);\\n      reboundMethod.__reactBoundContext = component;\\n      reboundMethod.__reactBoundMethod = method;\\n      reboundMethod.__reactBoundArguments = args;\\n      return reboundMethod;\\n    };\\n  }\\n  return boundMethod;\\n}\\n\\n/**\\n * Binds all auto-bound methods in a component.\\n *\\n * @param {object} component Component whose method is going to be bound.\\n */\\nfunction bindAutoBindMethods(component) {\\n  var pairs = component.__reactAutoBindPairs;\\n  for (var i = 0; i < pairs.length; i += 2) {\\n    var autoBindKey = pairs[i];\\n    var method = pairs[i + 1];\\n    component[autoBindKey] = bindAutoBindMethod(component, method);\\n  }\\n}\\n\\n/**\\n * Add more to the ReactClass base class. These are all legacy features and\\n * therefore not already part of the modern ReactComponent.\\n */\\nvar ReactClassMixin = {\\n\\n  /**\\n   * TODO: This will be deprecated because state should always keep a consistent\\n   * type signature and the only use case for this, is to avoid that.\\n   */\\n  replaceState: function (newState, callback) {\\n    this.updater.enqueueReplaceState(this, newState);\\n    if (callback) {\\n      this.updater.enqueueCallback(this, callback, 'replaceState');\\n    }\\n  },\\n\\n  /**\\n   * Checks whether or not this composite component is mounted.\\n   * @return {boolean} True if mounted, false otherwise.\\n   * @protected\\n   * @final\\n   */\\n  isMounted: function () {\\n    return this.updater.isMounted(this);\\n  }\\n};\\n\\nvar ReactClassComponent = function () {};\\n_assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);\\n\\n/**\\n * Module for creating composite components.\\n *\\n * @class ReactClass\\n */\\nvar ReactClass = {\\n\\n  /**\\n   * Creates a composite component class given a class specification.\\n   * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass\\n   *\\n   * @param {object} spec Class specification (which must define `render`).\\n   * @return {function} Component constructor function.\\n   * @public\\n   */\\n  createClass: function (spec) {\\n    // To keep our warnings more understandable, we'll use a little hack here to\\n    // ensure that Constructor.name !== 'Constructor'. This makes sure we don't\\n    // unnecessarily identify a class without displayName as 'Constructor'.\\n    var Constructor = identity(function (props, context, updater) {\\n      // This constructor gets overridden by mocks. The argument is used\\n      // by mocks to assert on what gets mounted.\\n\\n      if (process.env.NODE_ENV !== 'production') {\\n        process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0;\\n      }\\n\\n      // Wire up auto-binding\\n      if (this.__reactAutoBindPairs.length) {\\n        bindAutoBindMethods(this);\\n      }\\n\\n      this.props = props;\\n      this.context = context;\\n      this.refs = emptyObject;\\n      this.updater = updater || ReactNoopUpdateQueue;\\n\\n      this.state = null;\\n\\n      // ReactClasses doesn't have constructors. Instead, they use the\\n      // getInitialState and componentWillMount methods for initialization.\\n\\n      var initialState = this.getInitialState ? this.getInitialState() : null;\\n      if (process.env.NODE_ENV !== 'production') {\\n        // We allow auto-mocks to proceed as if they're returning null.\\n        if (initialState === undefined && this.getInitialState._isMockFunction) {\\n          // This is probably bad practice. Consider warning here and\\n          // deprecating this convenience.\\n          initialState = null;\\n        }\\n      }\\n      !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : _prodInvariant('82', Constructor.displayName || 'ReactCompositeComponent') : void 0;\\n\\n      this.state = initialState;\\n    });\\n    Constructor.prototype = new ReactClassComponent();\\n    Constructor.prototype.constructor = Constructor;\\n    Constructor.prototype.__reactAutoBindPairs = [];\\n\\n    injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\\n\\n    mixSpecIntoComponent(Constructor, spec);\\n\\n    // Initialize the defaultProps property after all mixins have been merged.\\n    if (Constructor.getDefaultProps) {\\n      Constructor.defaultProps = Constructor.getDefaultProps();\\n    }\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      // This is a tag to indicate that the use of these method names is ok,\\n      // since it's used with createClass. If it's not, then it's likely a\\n      // mistake so we'll warn you to use the static property, property\\n      // initializer or constructor respectively.\\n      if (Constructor.getDefaultProps) {\\n        Constructor.getDefaultProps.isReactClassApproved = {};\\n      }\\n      if (Constructor.prototype.getInitialState) {\\n        Constructor.prototype.getInitialState.isReactClassApproved = {};\\n      }\\n    }\\n\\n    !Constructor.prototype.render ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : _prodInvariant('83') : void 0;\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : void 0;\\n      process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : void 0;\\n    }\\n\\n    // Reduce time spent doing lookups by setting these on the prototype.\\n    for (var methodName in ReactClassInterface) {\\n      if (!Constructor.prototype[methodName]) {\\n        Constructor.prototype[methodName] = null;\\n      }\\n    }\\n\\n    return Constructor;\\n  },\\n\\n  injection: {\\n    injectMixin: function (mixin) {\\n      injectedMixins.push(mixin);\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = ReactClass;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactClass.js\\n// module id = 22\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactClass.js?\");\n\n/***/ },\n/* 23 */\n/*!***************************************************!*\\\n  !*** ./~/react/lib/ReactPropTypeLocationNames.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar ReactPropTypeLocationNames = {};\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  ReactPropTypeLocationNames = {\\n    prop: 'prop',\\n    context: 'context',\\n    childContext: 'child context'\\n  };\\n}\\n\\nmodule.exports = ReactPropTypeLocationNames;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactPropTypeLocationNames.js\\n// module id = 23\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactPropTypeLocationNames.js?\");\n\n/***/ },\n/* 24 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/ReactDOMFactories.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\n\\n/**\\n * Create a factory that creates HTML tag elements.\\n *\\n * @private\\n */\\nvar createDOMFactory = ReactElement.createFactory;\\nif (process.env.NODE_ENV !== 'production') {\\n  var ReactElementValidator = __webpack_require__(/*! ./ReactElementValidator */ 25);\\n  createDOMFactory = ReactElementValidator.createFactory;\\n}\\n\\n/**\\n * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.\\n * This is also accessible via `React.DOM`.\\n *\\n * @public\\n */\\nvar ReactDOMFactories = {\\n  a: createDOMFactory('a'),\\n  abbr: createDOMFactory('abbr'),\\n  address: createDOMFactory('address'),\\n  area: createDOMFactory('area'),\\n  article: createDOMFactory('article'),\\n  aside: createDOMFactory('aside'),\\n  audio: createDOMFactory('audio'),\\n  b: createDOMFactory('b'),\\n  base: createDOMFactory('base'),\\n  bdi: createDOMFactory('bdi'),\\n  bdo: createDOMFactory('bdo'),\\n  big: createDOMFactory('big'),\\n  blockquote: createDOMFactory('blockquote'),\\n  body: createDOMFactory('body'),\\n  br: createDOMFactory('br'),\\n  button: createDOMFactory('button'),\\n  canvas: createDOMFactory('canvas'),\\n  caption: createDOMFactory('caption'),\\n  cite: createDOMFactory('cite'),\\n  code: createDOMFactory('code'),\\n  col: createDOMFactory('col'),\\n  colgroup: createDOMFactory('colgroup'),\\n  data: createDOMFactory('data'),\\n  datalist: createDOMFactory('datalist'),\\n  dd: createDOMFactory('dd'),\\n  del: createDOMFactory('del'),\\n  details: createDOMFactory('details'),\\n  dfn: createDOMFactory('dfn'),\\n  dialog: createDOMFactory('dialog'),\\n  div: createDOMFactory('div'),\\n  dl: createDOMFactory('dl'),\\n  dt: createDOMFactory('dt'),\\n  em: createDOMFactory('em'),\\n  embed: createDOMFactory('embed'),\\n  fieldset: createDOMFactory('fieldset'),\\n  figcaption: createDOMFactory('figcaption'),\\n  figure: createDOMFactory('figure'),\\n  footer: createDOMFactory('footer'),\\n  form: createDOMFactory('form'),\\n  h1: createDOMFactory('h1'),\\n  h2: createDOMFactory('h2'),\\n  h3: createDOMFactory('h3'),\\n  h4: createDOMFactory('h4'),\\n  h5: createDOMFactory('h5'),\\n  h6: createDOMFactory('h6'),\\n  head: createDOMFactory('head'),\\n  header: createDOMFactory('header'),\\n  hgroup: createDOMFactory('hgroup'),\\n  hr: createDOMFactory('hr'),\\n  html: createDOMFactory('html'),\\n  i: createDOMFactory('i'),\\n  iframe: createDOMFactory('iframe'),\\n  img: createDOMFactory('img'),\\n  input: createDOMFactory('input'),\\n  ins: createDOMFactory('ins'),\\n  kbd: createDOMFactory('kbd'),\\n  keygen: createDOMFactory('keygen'),\\n  label: createDOMFactory('label'),\\n  legend: createDOMFactory('legend'),\\n  li: createDOMFactory('li'),\\n  link: createDOMFactory('link'),\\n  main: createDOMFactory('main'),\\n  map: createDOMFactory('map'),\\n  mark: createDOMFactory('mark'),\\n  menu: createDOMFactory('menu'),\\n  menuitem: createDOMFactory('menuitem'),\\n  meta: createDOMFactory('meta'),\\n  meter: createDOMFactory('meter'),\\n  nav: createDOMFactory('nav'),\\n  noscript: createDOMFactory('noscript'),\\n  object: createDOMFactory('object'),\\n  ol: createDOMFactory('ol'),\\n  optgroup: createDOMFactory('optgroup'),\\n  option: createDOMFactory('option'),\\n  output: createDOMFactory('output'),\\n  p: createDOMFactory('p'),\\n  param: createDOMFactory('param'),\\n  picture: createDOMFactory('picture'),\\n  pre: createDOMFactory('pre'),\\n  progress: createDOMFactory('progress'),\\n  q: createDOMFactory('q'),\\n  rp: createDOMFactory('rp'),\\n  rt: createDOMFactory('rt'),\\n  ruby: createDOMFactory('ruby'),\\n  s: createDOMFactory('s'),\\n  samp: createDOMFactory('samp'),\\n  script: createDOMFactory('script'),\\n  section: createDOMFactory('section'),\\n  select: createDOMFactory('select'),\\n  small: createDOMFactory('small'),\\n  source: createDOMFactory('source'),\\n  span: createDOMFactory('span'),\\n  strong: createDOMFactory('strong'),\\n  style: createDOMFactory('style'),\\n  sub: createDOMFactory('sub'),\\n  summary: createDOMFactory('summary'),\\n  sup: createDOMFactory('sup'),\\n  table: createDOMFactory('table'),\\n  tbody: createDOMFactory('tbody'),\\n  td: createDOMFactory('td'),\\n  textarea: createDOMFactory('textarea'),\\n  tfoot: createDOMFactory('tfoot'),\\n  th: createDOMFactory('th'),\\n  thead: createDOMFactory('thead'),\\n  time: createDOMFactory('time'),\\n  title: createDOMFactory('title'),\\n  tr: createDOMFactory('tr'),\\n  track: createDOMFactory('track'),\\n  u: createDOMFactory('u'),\\n  ul: createDOMFactory('ul'),\\n  'var': createDOMFactory('var'),\\n  video: createDOMFactory('video'),\\n  wbr: createDOMFactory('wbr'),\\n\\n  // SVG\\n  circle: createDOMFactory('circle'),\\n  clipPath: createDOMFactory('clipPath'),\\n  defs: createDOMFactory('defs'),\\n  ellipse: createDOMFactory('ellipse'),\\n  g: createDOMFactory('g'),\\n  image: createDOMFactory('image'),\\n  line: createDOMFactory('line'),\\n  linearGradient: createDOMFactory('linearGradient'),\\n  mask: createDOMFactory('mask'),\\n  path: createDOMFactory('path'),\\n  pattern: createDOMFactory('pattern'),\\n  polygon: createDOMFactory('polygon'),\\n  polyline: createDOMFactory('polyline'),\\n  radialGradient: createDOMFactory('radialGradient'),\\n  rect: createDOMFactory('rect'),\\n  stop: createDOMFactory('stop'),\\n  svg: createDOMFactory('svg'),\\n  text: createDOMFactory('text'),\\n  tspan: createDOMFactory('tspan')\\n};\\n\\nmodule.exports = ReactDOMFactories;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactDOMFactories.js\\n// module id = 24\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMFactories.js?\");\n\n/***/ },\n/* 25 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/ReactElementValidator.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n/**\\n * ReactElementValidator provides a wrapper around a element factory\\n * which validates the props passed to the element. This is intended to be\\n * used only in DEV and could be replaced by a static type checker for languages\\n * that support it.\\n */\\n\\n'use strict';\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 10);\\nvar ReactComponentTreeHook = __webpack_require__(/*! ./ReactComponentTreeHook */ 26);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\n\\nvar checkReactTypeSpec = __webpack_require__(/*! ./checkReactTypeSpec */ 27);\\n\\nvar canDefineProperty = __webpack_require__(/*! ./canDefineProperty */ 13);\\nvar getIteratorFn = __webpack_require__(/*! ./getIteratorFn */ 16);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nfunction getDeclarationErrorAddendum() {\\n  if (ReactCurrentOwner.current) {\\n    var name = ReactCurrentOwner.current.getName();\\n    if (name) {\\n      return ' Check the render method of `' + name + '`.';\\n    }\\n  }\\n  return '';\\n}\\n\\n/**\\n * Warn if there's no key explicitly set on dynamic arrays of children or\\n * object keys are not valid. This allows us to keep track of children between\\n * updates.\\n */\\nvar ownerHasKeyUseWarning = {};\\n\\nfunction getCurrentComponentErrorInfo(parentType) {\\n  var info = getDeclarationErrorAddendum();\\n\\n  if (!info) {\\n    var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\\n    if (parentName) {\\n      info = ' Check the top-level render call using <' + parentName + '>.';\\n    }\\n  }\\n  return info;\\n}\\n\\n/**\\n * Warn if the element doesn't have an explicit key assigned to it.\\n * This element is in an array. The array could grow and shrink or be\\n * reordered. All children that haven't already been validated are required to\\n * have a \\\"key\\\" property assigned to it. Error statuses are cached so a warning\\n * will only be shown once.\\n *\\n * @internal\\n * @param {ReactElement} element Element that requires a key.\\n * @param {*} parentType element's parent's type.\\n */\\nfunction validateExplicitKey(element, parentType) {\\n  if (!element._store || element._store.validated || element.key != null) {\\n    return;\\n  }\\n  element._store.validated = true;\\n\\n  var memoizer = ownerHasKeyUseWarning.uniqueKey || (ownerHasKeyUseWarning.uniqueKey = {});\\n\\n  var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\\n  if (memoizer[currentComponentErrorInfo]) {\\n    return;\\n  }\\n  memoizer[currentComponentErrorInfo] = true;\\n\\n  // Usually the current owner is the offender, but if it accepts children as a\\n  // property, it may be the creator of the child that's responsible for\\n  // assigning it a key.\\n  var childOwner = '';\\n  if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\\n    // Give the component that originally created this child.\\n    childOwner = ' It was passed a child from ' + element._owner.getName() + '.';\\n  }\\n\\n  process.env.NODE_ENV !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique \\\"key\\\" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.%s', currentComponentErrorInfo, childOwner, ReactComponentTreeHook.getCurrentStackAddendum(element)) : void 0;\\n}\\n\\n/**\\n * Ensure that every element either is passed in a static location, in an\\n * array with an explicit keys property defined, or in an object literal\\n * with valid key property.\\n *\\n * @internal\\n * @param {ReactNode} node Statically passed child of any type.\\n * @param {*} parentType node's parent's type.\\n */\\nfunction validateChildKeys(node, parentType) {\\n  if (typeof node !== 'object') {\\n    return;\\n  }\\n  if (Array.isArray(node)) {\\n    for (var i = 0; i < node.length; i++) {\\n      var child = node[i];\\n      if (ReactElement.isValidElement(child)) {\\n        validateExplicitKey(child, parentType);\\n      }\\n    }\\n  } else if (ReactElement.isValidElement(node)) {\\n    // This element was passed in a valid location.\\n    if (node._store) {\\n      node._store.validated = true;\\n    }\\n  } else if (node) {\\n    var iteratorFn = getIteratorFn(node);\\n    // Entry iterators provide implicit keys.\\n    if (iteratorFn) {\\n      if (iteratorFn !== node.entries) {\\n        var iterator = iteratorFn.call(node);\\n        var step;\\n        while (!(step = iterator.next()).done) {\\n          if (ReactElement.isValidElement(step.value)) {\\n            validateExplicitKey(step.value, parentType);\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\n\\n/**\\n * Given an element, validate that its props follow the propTypes definition,\\n * provided by the type.\\n *\\n * @param {ReactElement} element\\n */\\nfunction validatePropTypes(element) {\\n  var componentClass = element.type;\\n  if (typeof componentClass !== 'function') {\\n    return;\\n  }\\n  var name = componentClass.displayName || componentClass.name;\\n  if (componentClass.propTypes) {\\n    checkReactTypeSpec(componentClass.propTypes, element.props, 'prop', name, element, null);\\n  }\\n  if (typeof componentClass.getDefaultProps === 'function') {\\n    process.env.NODE_ENV !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : void 0;\\n  }\\n}\\n\\nvar ReactElementValidator = {\\n\\n  createElement: function (type, props, children) {\\n    var validType = typeof type === 'string' || typeof type === 'function';\\n    // We warn in this case but don't throw. We expect the element creation to\\n    // succeed and there will likely be errors in render.\\n    if (!validType) {\\n      process.env.NODE_ENV !== 'production' ? warning(false, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : void 0;\\n    }\\n\\n    var element = ReactElement.createElement.apply(this, arguments);\\n\\n    // The result can be nullish if a mock or a custom function is used.\\n    // TODO: Drop this when these are no longer allowed as the type argument.\\n    if (element == null) {\\n      return element;\\n    }\\n\\n    // Skip key warning if the type isn't valid since our key validation logic\\n    // doesn't expect a non-string/function type and can throw confusing errors.\\n    // We don't want exception behavior to differ between dev and prod.\\n    // (Rendering will throw with a helpful message and as soon as the type is\\n    // fixed, the key warnings will appear.)\\n    if (validType) {\\n      for (var i = 2; i < arguments.length; i++) {\\n        validateChildKeys(arguments[i], type);\\n      }\\n    }\\n\\n    validatePropTypes(element);\\n\\n    return element;\\n  },\\n\\n  createFactory: function (type) {\\n    var validatedFactory = ReactElementValidator.createElement.bind(null, type);\\n    // Legacy hook TODO: Warn if this is accessed\\n    validatedFactory.type = type;\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (canDefineProperty) {\\n        Object.defineProperty(validatedFactory, 'type', {\\n          enumerable: false,\\n          get: function () {\\n            process.env.NODE_ENV !== 'production' ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : void 0;\\n            Object.defineProperty(this, 'type', {\\n              value: type\\n            });\\n            return type;\\n          }\\n        });\\n      }\\n    }\\n\\n    return validatedFactory;\\n  },\\n\\n  cloneElement: function (element, props, children) {\\n    var newElement = ReactElement.cloneElement.apply(this, arguments);\\n    for (var i = 2; i < arguments.length; i++) {\\n      validateChildKeys(arguments[i], newElement.type);\\n    }\\n    validatePropTypes(newElement);\\n    return newElement;\\n  }\\n\\n};\\n\\nmodule.exports = ReactElementValidator;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactElementValidator.js\\n// module id = 25\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactElementValidator.js?\");\n\n/***/ },\n/* 26 */\n/*!***********************************************!*\\\n  !*** ./~/react/lib/ReactComponentTreeHook.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2016-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 10);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nfunction isNative(fn) {\\n  // Based on isNative() from Lodash\\n  var funcToString = Function.prototype.toString;\\n  var hasOwnProperty = Object.prototype.hasOwnProperty;\\n  var reIsNative = RegExp('^' + funcToString\\n  // Take an example native function source for comparison\\n  .call(hasOwnProperty)\\n  // Strip regex characters so we can use it for regex\\n  .replace(/[\\\\\\\\^$.*+?()[\\\\]{}|]/g, '\\\\\\\\$&')\\n  // Remove hasOwnProperty from the template to make it generic\\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\\\\\\\()| for .+?(?=\\\\\\\\\\\\])/g, '$1.*?') + '$');\\n  try {\\n    var source = funcToString.call(fn);\\n    return reIsNative.test(source);\\n  } catch (err) {\\n    return false;\\n  }\\n}\\n\\nvar canUseCollections =\\n// Array.from\\ntypeof Array.from === 'function' &&\\n// Map\\ntypeof Map === 'function' && isNative(Map) &&\\n// Map.prototype.keys\\nMap.prototype != null && typeof Map.prototype.keys === 'function' && isNative(Map.prototype.keys) &&\\n// Set\\ntypeof Set === 'function' && isNative(Set) &&\\n// Set.prototype.keys\\nSet.prototype != null && typeof Set.prototype.keys === 'function' && isNative(Set.prototype.keys);\\n\\nvar setItem;\\nvar getItem;\\nvar removeItem;\\nvar getItemIDs;\\nvar addRoot;\\nvar removeRoot;\\nvar getRootIDs;\\n\\nif (canUseCollections) {\\n  var itemMap = new Map();\\n  var rootIDSet = new Set();\\n\\n  setItem = function (id, item) {\\n    itemMap.set(id, item);\\n  };\\n  getItem = function (id) {\\n    return itemMap.get(id);\\n  };\\n  removeItem = function (id) {\\n    itemMap['delete'](id);\\n  };\\n  getItemIDs = function () {\\n    return Array.from(itemMap.keys());\\n  };\\n\\n  addRoot = function (id) {\\n    rootIDSet.add(id);\\n  };\\n  removeRoot = function (id) {\\n    rootIDSet['delete'](id);\\n  };\\n  getRootIDs = function () {\\n    return Array.from(rootIDSet.keys());\\n  };\\n} else {\\n  var itemByKey = {};\\n  var rootByKey = {};\\n\\n  // Use non-numeric keys to prevent V8 performance issues:\\n  // https://github.com/facebook/react/pull/7232\\n  var getKeyFromID = function (id) {\\n    return '.' + id;\\n  };\\n  var getIDFromKey = function (key) {\\n    return parseInt(key.substr(1), 10);\\n  };\\n\\n  setItem = function (id, item) {\\n    var key = getKeyFromID(id);\\n    itemByKey[key] = item;\\n  };\\n  getItem = function (id) {\\n    var key = getKeyFromID(id);\\n    return itemByKey[key];\\n  };\\n  removeItem = function (id) {\\n    var key = getKeyFromID(id);\\n    delete itemByKey[key];\\n  };\\n  getItemIDs = function () {\\n    return Object.keys(itemByKey).map(getIDFromKey);\\n  };\\n\\n  addRoot = function (id) {\\n    var key = getKeyFromID(id);\\n    rootByKey[key] = true;\\n  };\\n  removeRoot = function (id) {\\n    var key = getKeyFromID(id);\\n    delete rootByKey[key];\\n  };\\n  getRootIDs = function () {\\n    return Object.keys(rootByKey).map(getIDFromKey);\\n  };\\n}\\n\\nvar unmountedIDs = [];\\n\\nfunction purgeDeep(id) {\\n  var item = getItem(id);\\n  if (item) {\\n    var childIDs = item.childIDs;\\n\\n    removeItem(id);\\n    childIDs.forEach(purgeDeep);\\n  }\\n}\\n\\nfunction describeComponentFrame(name, source, ownerName) {\\n  return '\\\\n    in ' + (name || 'Unknown') + (source ? ' (at ' + source.fileName.replace(/^.*[\\\\\\\\\\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : '');\\n}\\n\\nfunction getDisplayName(element) {\\n  if (element == null) {\\n    return '#empty';\\n  } else if (typeof element === 'string' || typeof element === 'number') {\\n    return '#text';\\n  } else if (typeof element.type === 'string') {\\n    return element.type;\\n  } else {\\n    return element.type.displayName || element.type.name || 'Unknown';\\n  }\\n}\\n\\nfunction describeID(id) {\\n  var name = ReactComponentTreeHook.getDisplayName(id);\\n  var element = ReactComponentTreeHook.getElement(id);\\n  var ownerID = ReactComponentTreeHook.getOwnerID(id);\\n  var ownerName;\\n  if (ownerID) {\\n    ownerName = ReactComponentTreeHook.getDisplayName(ownerID);\\n  }\\n  process.env.NODE_ENV !== 'production' ? warning(element, 'ReactComponentTreeHook: Missing React element for debugID %s when ' + 'building stack', id) : void 0;\\n  return describeComponentFrame(name, element && element._source, ownerName);\\n}\\n\\nvar ReactComponentTreeHook = {\\n  onSetChildren: function (id, nextChildIDs) {\\n    var item = getItem(id);\\n    !item ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Item must have been set') : _prodInvariant('144') : void 0;\\n    item.childIDs = nextChildIDs;\\n\\n    for (var i = 0; i < nextChildIDs.length; i++) {\\n      var nextChildID = nextChildIDs[i];\\n      var nextChild = getItem(nextChildID);\\n      !nextChild ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected hook events to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('140') : void 0;\\n      !(nextChild.childIDs != null || typeof nextChild.element !== 'object' || nextChild.element == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onSetChildren() to fire for a container child before its parent includes it in onSetChildren().') : _prodInvariant('141') : void 0;\\n      !nextChild.isMounted ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onMountComponent() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('71') : void 0;\\n      if (nextChild.parentID == null) {\\n        nextChild.parentID = id;\\n        // TODO: This shouldn't be necessary but mounting a new root during in\\n        // componentWillMount currently causes not-yet-mounted components to\\n        // be purged from our tree data so their parent id is missing.\\n      }\\n      !(nextChild.parentID === id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onBeforeMountComponent() parent and onSetChildren() to be consistent (%s has parents %s and %s).', nextChildID, nextChild.parentID, id) : _prodInvariant('142', nextChildID, nextChild.parentID, id) : void 0;\\n    }\\n  },\\n  onBeforeMountComponent: function (id, element, parentID) {\\n    var item = {\\n      element: element,\\n      parentID: parentID,\\n      text: null,\\n      childIDs: [],\\n      isMounted: false,\\n      updateCount: 0\\n    };\\n    setItem(id, item);\\n  },\\n  onBeforeUpdateComponent: function (id, element) {\\n    var item = getItem(id);\\n    if (!item || !item.isMounted) {\\n      // We may end up here as a result of setState() in componentWillUnmount().\\n      // In this case, ignore the element.\\n      return;\\n    }\\n    item.element = element;\\n  },\\n  onMountComponent: function (id) {\\n    var item = getItem(id);\\n    !item ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Item must have been set') : _prodInvariant('144') : void 0;\\n    item.isMounted = true;\\n    var isRoot = item.parentID === 0;\\n    if (isRoot) {\\n      addRoot(id);\\n    }\\n  },\\n  onUpdateComponent: function (id) {\\n    var item = getItem(id);\\n    if (!item || !item.isMounted) {\\n      // We may end up here as a result of setState() in componentWillUnmount().\\n      // In this case, ignore the element.\\n      return;\\n    }\\n    item.updateCount++;\\n  },\\n  onUnmountComponent: function (id) {\\n    var item = getItem(id);\\n    if (item) {\\n      // We need to check if it exists.\\n      // `item` might not exist if it is inside an error boundary, and a sibling\\n      // error boundary child threw while mounting. Then this instance never\\n      // got a chance to mount, but it still gets an unmounting event during\\n      // the error boundary cleanup.\\n      item.isMounted = false;\\n      var isRoot = item.parentID === 0;\\n      if (isRoot) {\\n        removeRoot(id);\\n      }\\n    }\\n    unmountedIDs.push(id);\\n  },\\n  purgeUnmountedComponents: function () {\\n    if (ReactComponentTreeHook._preventPurging) {\\n      // Should only be used for testing.\\n      return;\\n    }\\n\\n    for (var i = 0; i < unmountedIDs.length; i++) {\\n      var id = unmountedIDs[i];\\n      purgeDeep(id);\\n    }\\n    unmountedIDs.length = 0;\\n  },\\n  isMounted: function (id) {\\n    var item = getItem(id);\\n    return item ? item.isMounted : false;\\n  },\\n  getCurrentStackAddendum: function (topElement) {\\n    var info = '';\\n    if (topElement) {\\n      var name = getDisplayName(topElement);\\n      var owner = topElement._owner;\\n      info += describeComponentFrame(name, topElement._source, owner && owner.getName());\\n    }\\n\\n    var currentOwner = ReactCurrentOwner.current;\\n    var id = currentOwner && currentOwner._debugID;\\n\\n    info += ReactComponentTreeHook.getStackAddendumByID(id);\\n    return info;\\n  },\\n  getStackAddendumByID: function (id) {\\n    var info = '';\\n    while (id) {\\n      info += describeID(id);\\n      id = ReactComponentTreeHook.getParentID(id);\\n    }\\n    return info;\\n  },\\n  getChildIDs: function (id) {\\n    var item = getItem(id);\\n    return item ? item.childIDs : [];\\n  },\\n  getDisplayName: function (id) {\\n    var element = ReactComponentTreeHook.getElement(id);\\n    if (!element) {\\n      return null;\\n    }\\n    return getDisplayName(element);\\n  },\\n  getElement: function (id) {\\n    var item = getItem(id);\\n    return item ? item.element : null;\\n  },\\n  getOwnerID: function (id) {\\n    var element = ReactComponentTreeHook.getElement(id);\\n    if (!element || !element._owner) {\\n      return null;\\n    }\\n    return element._owner._debugID;\\n  },\\n  getParentID: function (id) {\\n    var item = getItem(id);\\n    return item ? item.parentID : null;\\n  },\\n  getSource: function (id) {\\n    var item = getItem(id);\\n    var element = item ? item.element : null;\\n    var source = element != null ? element._source : null;\\n    return source;\\n  },\\n  getText: function (id) {\\n    var element = ReactComponentTreeHook.getElement(id);\\n    if (typeof element === 'string') {\\n      return element;\\n    } else if (typeof element === 'number') {\\n      return '' + element;\\n    } else {\\n      return null;\\n    }\\n  },\\n  getUpdateCount: function (id) {\\n    var item = getItem(id);\\n    return item ? item.updateCount : 0;\\n  },\\n\\n\\n  getRootIDs: getRootIDs,\\n  getRegisteredIDs: getItemIDs\\n};\\n\\nmodule.exports = ReactComponentTreeHook;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactComponentTreeHook.js\\n// module id = 26\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactComponentTreeHook.js?\");\n\n/***/ },\n/* 27 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/checkReactTypeSpec.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar ReactPropTypeLocationNames = __webpack_require__(/*! ./ReactPropTypeLocationNames */ 23);\\nvar ReactPropTypesSecret = __webpack_require__(/*! ./ReactPropTypesSecret */ 28);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar ReactComponentTreeHook;\\n\\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {\\n  // Temporary hack.\\n  // Inline requires don't work well with Jest:\\n  // https://github.com/facebook/react/issues/7240\\n  // Remove the inline requires when we don't need them anymore:\\n  // https://github.com/facebook/react/pull/7178\\n  ReactComponentTreeHook = __webpack_require__(/*! ./ReactComponentTreeHook */ 26);\\n}\\n\\nvar loggedTypeFailures = {};\\n\\n/**\\n * Assert that the values match with the type specs.\\n * Error messages are memorized and will only be shown once.\\n *\\n * @param {object} typeSpecs Map of name to a ReactPropType\\n * @param {object} values Runtime values that need to be type-checked\\n * @param {string} location e.g. \\\"prop\\\", \\\"context\\\", \\\"child context\\\"\\n * @param {string} componentName Name of the component for error messages.\\n * @param {?object} element The React element that is being type-checked\\n * @param {?number} debugID The React component instance that is being type-checked\\n * @private\\n */\\nfunction checkReactTypeSpec(typeSpecs, values, location, componentName, element, debugID) {\\n  for (var typeSpecName in typeSpecs) {\\n    if (typeSpecs.hasOwnProperty(typeSpecName)) {\\n      var error;\\n      // Prop type validation may throw. In case they do, we don't want to\\n      // fail the render phase where it didn't fail before. So we log it.\\n      // After these have been cleaned up, we'll let them throw.\\n      try {\\n        // This is intentionally an invariant that gets caught. It's the same\\n        // behavior as without this statement except with a better message.\\n        !(typeof typeSpecs[typeSpecName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : _prodInvariant('84', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : void 0;\\n        error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\\n      } catch (ex) {\\n        error = ex;\\n      }\\n      process.env.NODE_ENV !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName, typeof error) : void 0;\\n      if (error instanceof Error && !(error.message in loggedTypeFailures)) {\\n        // Only monitor this failure once because there tends to be a lot of the\\n        // same error.\\n        loggedTypeFailures[error.message] = true;\\n\\n        var componentStackInfo = '';\\n\\n        if (process.env.NODE_ENV !== 'production') {\\n          if (!ReactComponentTreeHook) {\\n            ReactComponentTreeHook = __webpack_require__(/*! ./ReactComponentTreeHook */ 26);\\n          }\\n          if (debugID !== null) {\\n            componentStackInfo = ReactComponentTreeHook.getStackAddendumByID(debugID);\\n          } else if (element !== null) {\\n            componentStackInfo = ReactComponentTreeHook.getCurrentStackAddendum(element);\\n          }\\n        }\\n\\n        process.env.NODE_ENV !== 'production' ? warning(false, 'Failed %s type: %s%s', location, error.message, componentStackInfo) : void 0;\\n      }\\n    }\\n  }\\n}\\n\\nmodule.exports = checkReactTypeSpec;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/checkReactTypeSpec.js\\n// module id = 27\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/checkReactTypeSpec.js?\");\n\n/***/ },\n/* 28 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ReactPropTypesSecret.js ***!\n  \\*********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\\n\\nmodule.exports = ReactPropTypesSecret;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactPropTypesSecret.js\\n// module id = 28\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactPropTypesSecret.js?\");\n\n/***/ },\n/* 29 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactPropTypes.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\nvar ReactPropTypeLocationNames = __webpack_require__(/*! ./ReactPropTypeLocationNames */ 23);\\nvar ReactPropTypesSecret = __webpack_require__(/*! ./ReactPropTypesSecret */ 28);\\n\\nvar emptyFunction = __webpack_require__(/*! fbjs/lib/emptyFunction */ 12);\\nvar getIteratorFn = __webpack_require__(/*! ./getIteratorFn */ 16);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\n/**\\n * Collection of methods that allow declaration and validation of props that are\\n * supplied to React components. Example usage:\\n *\\n *   var Props = require('ReactPropTypes');\\n *   var MyArticle = React.createClass({\\n *     propTypes: {\\n *       // An optional string prop named \\\"description\\\".\\n *       description: Props.string,\\n *\\n *       // A required enum prop named \\\"category\\\".\\n *       category: Props.oneOf(['News','Photos']).isRequired,\\n *\\n *       // A prop named \\\"dialog\\\" that requires an instance of Dialog.\\n *       dialog: Props.instanceOf(Dialog).isRequired\\n *     },\\n *     render: function() { ... }\\n *   });\\n *\\n * A more formal specification of how these methods are used:\\n *\\n *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\\n *   decl := ReactPropTypes.{type}(.isRequired)?\\n *\\n * Each and every declaration produces a function with the same signature. This\\n * allows the creation of custom validation functions. For example:\\n *\\n *  var MyLink = React.createClass({\\n *    propTypes: {\\n *      // An optional string or URI prop named \\\"href\\\".\\n *      href: function(props, propName, componentName) {\\n *        var propValue = props[propName];\\n *        if (propValue != null && typeof propValue !== 'string' &&\\n *            !(propValue instanceof URI)) {\\n *          return new Error(\\n *            'Expected a string or an URI for ' + propName + ' in ' +\\n *            componentName\\n *          );\\n *        }\\n *      }\\n *    },\\n *    render: function() {...}\\n *  });\\n *\\n * @internal\\n */\\n\\nvar ANONYMOUS = '<<anonymous>>';\\n\\nvar ReactPropTypes = {\\n  array: createPrimitiveTypeChecker('array'),\\n  bool: createPrimitiveTypeChecker('boolean'),\\n  func: createPrimitiveTypeChecker('function'),\\n  number: createPrimitiveTypeChecker('number'),\\n  object: createPrimitiveTypeChecker('object'),\\n  string: createPrimitiveTypeChecker('string'),\\n  symbol: createPrimitiveTypeChecker('symbol'),\\n\\n  any: createAnyTypeChecker(),\\n  arrayOf: createArrayOfTypeChecker,\\n  element: createElementTypeChecker(),\\n  instanceOf: createInstanceTypeChecker,\\n  node: createNodeChecker(),\\n  objectOf: createObjectOfTypeChecker,\\n  oneOf: createEnumTypeChecker,\\n  oneOfType: createUnionTypeChecker,\\n  shape: createShapeTypeChecker\\n};\\n\\n/**\\n * inlined Object.is polyfill to avoid requiring consumers ship their own\\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\\n */\\n/*eslint-disable no-self-compare*/\\nfunction is(x, y) {\\n  // SameValue algorithm\\n  if (x === y) {\\n    // Steps 1-5, 7-10\\n    // Steps 6.b-6.e: +0 != -0\\n    return x !== 0 || 1 / x === 1 / y;\\n  } else {\\n    // Step 6.a: NaN == NaN\\n    return x !== x && y !== y;\\n  }\\n}\\n/*eslint-enable no-self-compare*/\\n\\n/**\\n * We use an Error-like object for backward compatibility as people may call\\n * PropTypes directly and inspect their output. However we don't use real\\n * Errors anymore. We don't inspect their stack anyway, and creating them\\n * is prohibitively expensive if they are created too often, such as what\\n * happens in oneOfType() for any type before the one that matched.\\n */\\nfunction PropTypeError(message) {\\n  this.message = message;\\n  this.stack = '';\\n}\\n// Make `instanceof Error` still work for returned errors.\\nPropTypeError.prototype = Error.prototype;\\n\\nfunction createChainableTypeChecker(validate) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    var manualPropTypeCallCache = {};\\n  }\\n  function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\\n    componentName = componentName || ANONYMOUS;\\n    propFullName = propFullName || propName;\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (secret !== ReactPropTypesSecret && typeof console !== 'undefined') {\\n        var cacheKey = componentName + ':' + propName;\\n        if (!manualPropTypeCallCache[cacheKey]) {\\n          process.env.NODE_ENV !== 'production' ? warning(false, 'You are manually calling a React.PropTypes validation ' + 'function for the `%s` prop on `%s`. This is deprecated ' + 'and will not work in production with the next major version. ' + 'You may be seeing this warning due to a third-party PropTypes ' + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.', propFullName, componentName) : void 0;\\n          manualPropTypeCallCache[cacheKey] = true;\\n        }\\n      }\\n    }\\n    if (props[propName] == null) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      if (isRequired) {\\n        if (props[propName] === null) {\\n          return new PropTypeError('The ' + locationName + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\\n        }\\n        return new PropTypeError('The ' + locationName + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\\n      }\\n      return null;\\n    } else {\\n      return validate(props, propName, componentName, location, propFullName);\\n    }\\n  }\\n\\n  var chainedCheckType = checkType.bind(null, false);\\n  chainedCheckType.isRequired = checkType.bind(null, true);\\n\\n  return chainedCheckType;\\n}\\n\\nfunction createPrimitiveTypeChecker(expectedType) {\\n  function validate(props, propName, componentName, location, propFullName, secret) {\\n    var propValue = props[propName];\\n    var propType = getPropType(propValue);\\n    if (propType !== expectedType) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      // `propValue` being instance of, say, date/regexp, pass the 'object'\\n      // check, but we can offer a more precise error message here rather than\\n      // 'of type `object`'.\\n      var preciseType = getPreciseType(propValue);\\n\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createAnyTypeChecker() {\\n  return createChainableTypeChecker(emptyFunction.thatReturns(null));\\n}\\n\\nfunction createArrayOfTypeChecker(typeChecker) {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    if (typeof typeChecker !== 'function') {\\n      return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\\n    }\\n    var propValue = props[propName];\\n    if (!Array.isArray(propValue)) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      var propType = getPropType(propValue);\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\\n    }\\n    for (var i = 0; i < propValue.length; i++) {\\n      var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\\n      if (error instanceof Error) {\\n        return error;\\n      }\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createElementTypeChecker() {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    var propValue = props[propName];\\n    if (!ReactElement.isValidElement(propValue)) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      var propType = getPropType(propValue);\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createInstanceTypeChecker(expectedClass) {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    if (!(props[propName] instanceof expectedClass)) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      var expectedClassName = expectedClass.name || ANONYMOUS;\\n      var actualClassName = getClassName(props[propName]);\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createEnumTypeChecker(expectedValues) {\\n  if (!Array.isArray(expectedValues)) {\\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0;\\n    return emptyFunction.thatReturnsNull;\\n  }\\n\\n  function validate(props, propName, componentName, location, propFullName) {\\n    var propValue = props[propName];\\n    for (var i = 0; i < expectedValues.length; i++) {\\n      if (is(propValue, expectedValues[i])) {\\n        return null;\\n      }\\n    }\\n\\n    var locationName = ReactPropTypeLocationNames[location];\\n    var valuesString = JSON.stringify(expectedValues);\\n    return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createObjectOfTypeChecker(typeChecker) {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    if (typeof typeChecker !== 'function') {\\n      return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\\n    }\\n    var propValue = props[propName];\\n    var propType = getPropType(propValue);\\n    if (propType !== 'object') {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\\n    }\\n    for (var key in propValue) {\\n      if (propValue.hasOwnProperty(key)) {\\n        var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\\n        if (error instanceof Error) {\\n          return error;\\n        }\\n      }\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createUnionTypeChecker(arrayOfTypeCheckers) {\\n  if (!Array.isArray(arrayOfTypeCheckers)) {\\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\\n    return emptyFunction.thatReturnsNull;\\n  }\\n\\n  function validate(props, propName, componentName, location, propFullName) {\\n    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\\n      var checker = arrayOfTypeCheckers[i];\\n      if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\\n        return null;\\n      }\\n    }\\n\\n    var locationName = ReactPropTypeLocationNames[location];\\n    return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createNodeChecker() {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    if (!isNode(props[propName])) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createShapeTypeChecker(shapeTypes) {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    var propValue = props[propName];\\n    var propType = getPropType(propValue);\\n    if (propType !== 'object') {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\\n    }\\n    for (var key in shapeTypes) {\\n      var checker = shapeTypes[key];\\n      if (!checker) {\\n        continue;\\n      }\\n      var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\\n      if (error) {\\n        return error;\\n      }\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction isNode(propValue) {\\n  switch (typeof propValue) {\\n    case 'number':\\n    case 'string':\\n    case 'undefined':\\n      return true;\\n    case 'boolean':\\n      return !propValue;\\n    case 'object':\\n      if (Array.isArray(propValue)) {\\n        return propValue.every(isNode);\\n      }\\n      if (propValue === null || ReactElement.isValidElement(propValue)) {\\n        return true;\\n      }\\n\\n      var iteratorFn = getIteratorFn(propValue);\\n      if (iteratorFn) {\\n        var iterator = iteratorFn.call(propValue);\\n        var step;\\n        if (iteratorFn !== propValue.entries) {\\n          while (!(step = iterator.next()).done) {\\n            if (!isNode(step.value)) {\\n              return false;\\n            }\\n          }\\n        } else {\\n          // Iterator will provide entry [k,v] tuples rather than values.\\n          while (!(step = iterator.next()).done) {\\n            var entry = step.value;\\n            if (entry) {\\n              if (!isNode(entry[1])) {\\n                return false;\\n              }\\n            }\\n          }\\n        }\\n      } else {\\n        return false;\\n      }\\n\\n      return true;\\n    default:\\n      return false;\\n  }\\n}\\n\\nfunction isSymbol(propType, propValue) {\\n  // Native Symbol.\\n  if (propType === 'symbol') {\\n    return true;\\n  }\\n\\n  // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\\n  if (propValue['@@toStringTag'] === 'Symbol') {\\n    return true;\\n  }\\n\\n  // Fallback for non-spec compliant Symbols which are polyfilled.\\n  if (typeof Symbol === 'function' && propValue instanceof Symbol) {\\n    return true;\\n  }\\n\\n  return false;\\n}\\n\\n// Equivalent of `typeof` but with special handling for array and regexp.\\nfunction getPropType(propValue) {\\n  var propType = typeof propValue;\\n  if (Array.isArray(propValue)) {\\n    return 'array';\\n  }\\n  if (propValue instanceof RegExp) {\\n    // Old webkits (at least until Android 4.0) return 'function' rather than\\n    // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\\n    // passes PropTypes.object.\\n    return 'object';\\n  }\\n  if (isSymbol(propType, propValue)) {\\n    return 'symbol';\\n  }\\n  return propType;\\n}\\n\\n// This handles more types than `getPropType`. Only used for error messages.\\n// See `createPrimitiveTypeChecker`.\\nfunction getPreciseType(propValue) {\\n  var propType = getPropType(propValue);\\n  if (propType === 'object') {\\n    if (propValue instanceof Date) {\\n      return 'date';\\n    } else if (propValue instanceof RegExp) {\\n      return 'regexp';\\n    }\\n  }\\n  return propType;\\n}\\n\\n// Returns class name of the object, if any.\\nfunction getClassName(propValue) {\\n  if (!propValue.constructor || !propValue.constructor.name) {\\n    return ANONYMOUS;\\n  }\\n  return propValue.constructor.name;\\n}\\n\\nmodule.exports = ReactPropTypes;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactPropTypes.js\\n// module id = 29\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactPropTypes.js?\");\n\n/***/ },\n/* 30 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/ReactVersion.js ***!\n  \\*************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nmodule.exports = '15.4.1';\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactVersion.js\\n// module id = 30\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactVersion.js?\");\n\n/***/ },\n/* 31 */\n/*!**********************************!*\\\n  !*** ./~/react/lib/onlyChild.js ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\n/**\\n * Returns the first child in a collection of children and verifies that there\\n * is only one child in the collection.\\n *\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.only\\n *\\n * The current implementation of this function assumes that a single child gets\\n * passed without a wrapper, but the purpose of this helper function is to\\n * abstract away the particular structure of children.\\n *\\n * @param {?object} children Child collection structure.\\n * @return {ReactElement} The first and only `ReactElement` contained in the\\n * structure.\\n */\\nfunction onlyChild(children) {\\n  !ReactElement.isValidElement(children) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'React.Children.only expected to receive a single React element child.') : _prodInvariant('143') : void 0;\\n  return children;\\n}\\n\\nmodule.exports = onlyChild;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/onlyChild.js\\n// module id = 31\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/onlyChild.js?\");\n\n/***/ }\n/******/ ]);"
  },
  {
    "path": "src/DiagnosticsHarness/fubu-diagnostics/root.js",
    "content": "/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/client/public/javascript/\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!*****************************!*\\\n  !*** ./javascript/root.jsx ***!\n  \\*****************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _lodash = __webpack_require__(/*! lodash */ 32);\\n\\nvar _lodash2 = _interopRequireDefault(_lodash);\\n\\nvar _jquery = __webpack_require__(/*! jquery */ 34);\\n\\nvar _jquery2 = _interopRequireDefault(_jquery);\\n\\nvar _fubuDiagnosticsSection = __webpack_require__(/*! ./fubu-diagnostics-section.jsx */ 35);\\n\\nvar _fubuDiagnosticsSection2 = _interopRequireDefault(_fubuDiagnosticsSection);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\n_lodash2.default.assign(FubuDiagnostics, {\\n    cache: {},\\n\\n    // TODO -- cache if there are no params?\\n    get: function get(key, params, callback) {\\n        var url = this.toUrl(key, params);\\n        _jquery2.default.ajax({\\n            method: 'GET',\\n            url: url,\\n            dataType: 'json',\\n            accept: 'application/json',\\n            success: function success(data) {\\n                try {\\n                    callback(data);\\n                } catch (e) {\\n                    console.error(e);\\n                }\\n            },\\n            error: function error(jqXHR, textStatus, errorThrown) {\\n                console.error(errorThrown);\\n            }\\n        });\\n    },\\n\\n    getText: function getText(key, params, callback) {\\n        var url = this.toUrl(key, params);\\n        _jquery2.default.ajax({\\n            method: 'GET',\\n            url: url,\\n            dataType: 'text',\\n            accept: 'text/plain',\\n            success: function success(data) {\\n                try {\\n                    callback(data);\\n                } catch (e) {\\n                    console.error(e);\\n                }\\n            },\\n            error: function error(jqXHR, textStatus, errorThrown) {\\n                console.error(errorThrown);\\n            }\\n        });\\n    },\\n\\n    toUrl: function toUrl(key, params) {\\n        var route = this.routes[key];\\n        var url = route.url;\\n        _lodash2.default.each(route.params, function (param) {\\n            url = url.replace('{' + param.Name + '}', params[param.Name]);\\n        });\\n\\n        return url;\\n    },\\n\\n    sections: [],\\n\\n    addSection: function addSection(data) {\\n        var section = new _fubuDiagnosticsSection2.default(data);\\n        this.sections.push(section);\\n\\n        return section;\\n    },\\n\\n    section: function section(key) {\\n        return _lodash2.default.find(this.sections, function (s) {\\n            return s.key == key;\\n        });\\n    },\\n\\n    TextScreen: __webpack_require__(/*! ./text-screen */ 102),\\n    HtmlScreen: __webpack_require__(/*! ./html-screen */ 103),\\n    React: _react2.default\\n});\\n\\n__webpack_require__(/*! ./appdomain */ 104);\\n__webpack_require__(/*! ./assets */ 105);\\n__webpack_require__(/*! ./structuremap */ 106);\\n__webpack_require__(/*! ./service-bus */ 259);\\n__webpack_require__(/*! ./message-table */ 260);\\n__webpack_require__(/*! ./polling-jobs */ 261);\\n\\nFubuDiagnostics.addSection({\\n    title: 'HTTP',\\n    description: 'Core Diagnostics for HTTP Requests and Handlers',\\n    key: 'fubumvc'\\n}).add({\\n    title: 'Model Binding',\\n    description: 'All the configured model binding converters, property binders, and custom model binders',\\n    key: 'model-binding',\\n    component: __webpack_require__(/*! ./model-binding */ 262)\\n});\\n\\n__webpack_require__(/*! ./endpoint-explorer */ 513);\\n__webpack_require__(/*! ./partial-explorer */ 514);\\n__webpack_require__(/*! ./chain-details */ 515);\\n__webpack_require__(/*! ./request-table.jsx */ 518);\\n__webpack_require__(/*! ./request-details.jsx */ 519);\\n__webpack_require__(/*! ./packaging */ 523);\\n__webpack_require__(/*! ./client-messages */ 524);\\n__webpack_require__(/*! ./performance */ 525);\\n\\nvar Shell = __webpack_require__(/*! ./shell */ 526);\\n\\n(0, _jquery2.default)(document).ready(function () {\\n    return Shell.start();\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/root.jsx\\n// module id = 0\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/root.jsx?\");\n\n/***/ },\n/* 1 */\n/*!**************************!*\\\n  !*** ./~/react/react.js ***!\n  \\**************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nmodule.exports = __webpack_require__(/*! ./lib/React */ 2);\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/react.js\\n// module id = 1\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/react.js?\");\n\n/***/ },\n/* 2 */\n/*!******************************!*\\\n  !*** ./~/react/lib/React.js ***!\n  \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar ReactChildren = __webpack_require__(/*! ./ReactChildren */ 5);\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 18);\\nvar ReactPureComponent = __webpack_require__(/*! ./ReactPureComponent */ 21);\\nvar ReactClass = __webpack_require__(/*! ./ReactClass */ 22);\\nvar ReactDOMFactories = __webpack_require__(/*! ./ReactDOMFactories */ 24);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\nvar ReactPropTypes = __webpack_require__(/*! ./ReactPropTypes */ 29);\\nvar ReactVersion = __webpack_require__(/*! ./ReactVersion */ 30);\\n\\nvar onlyChild = __webpack_require__(/*! ./onlyChild */ 31);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar createElement = ReactElement.createElement;\\nvar createFactory = ReactElement.createFactory;\\nvar cloneElement = ReactElement.cloneElement;\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  var ReactElementValidator = __webpack_require__(/*! ./ReactElementValidator */ 25);\\n  createElement = ReactElementValidator.createElement;\\n  createFactory = ReactElementValidator.createFactory;\\n  cloneElement = ReactElementValidator.cloneElement;\\n}\\n\\nvar __spread = _assign;\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  var warned = false;\\n  __spread = function () {\\n    process.env.NODE_ENV !== 'production' ? warning(warned, 'React.__spread is deprecated and should not be used. Use ' + 'Object.assign directly or another helper function with similar ' + 'semantics. You may be seeing this warning due to your compiler. ' + 'See https://fb.me/react-spread-deprecation for more details.') : void 0;\\n    warned = true;\\n    return _assign.apply(null, arguments);\\n  };\\n}\\n\\nvar React = {\\n\\n  // Modern\\n\\n  Children: {\\n    map: ReactChildren.map,\\n    forEach: ReactChildren.forEach,\\n    count: ReactChildren.count,\\n    toArray: ReactChildren.toArray,\\n    only: onlyChild\\n  },\\n\\n  Component: ReactComponent,\\n  PureComponent: ReactPureComponent,\\n\\n  createElement: createElement,\\n  cloneElement: cloneElement,\\n  isValidElement: ReactElement.isValidElement,\\n\\n  // Classic\\n\\n  PropTypes: ReactPropTypes,\\n  createClass: ReactClass.createClass,\\n  createFactory: createFactory,\\n  createMixin: function (mixin) {\\n    // Currently a noop. Will be used to validate and trace mixins.\\n    return mixin;\\n  },\\n\\n  // This looks DOM specific but these are actually isomorphic helpers\\n  // since they are just generating DOM strings.\\n  DOM: ReactDOMFactories,\\n\\n  version: ReactVersion,\\n\\n  // Deprecated hook for JSX spread, don't use this for anything.\\n  __spread: __spread\\n};\\n\\nmodule.exports = React;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/React.js\\n// module id = 2\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/React.js?\");\n\n/***/ },\n/* 3 */\n/*!******************************!*\\\n  !*** ./~/process/browser.js ***!\n  \\******************************/\n/***/ function(module, exports) {\n\n\teval(\"// shim for using process in browser\\nvar process = module.exports = {};\\n\\n// cached from whatever global is present so that test runners that stub it\\n// don't break things.  But we need to wrap it in a try catch in case it is\\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\\n// function because try/catches deoptimize in certain engines.\\n\\nvar cachedSetTimeout;\\nvar cachedClearTimeout;\\n\\nfunction defaultSetTimout() {\\n    throw new Error('setTimeout has not been defined');\\n}\\nfunction defaultClearTimeout () {\\n    throw new Error('clearTimeout has not been defined');\\n}\\n(function () {\\n    try {\\n        if (typeof setTimeout === 'function') {\\n            cachedSetTimeout = setTimeout;\\n        } else {\\n            cachedSetTimeout = defaultSetTimout;\\n        }\\n    } catch (e) {\\n        cachedSetTimeout = defaultSetTimout;\\n    }\\n    try {\\n        if (typeof clearTimeout === 'function') {\\n            cachedClearTimeout = clearTimeout;\\n        } else {\\n            cachedClearTimeout = defaultClearTimeout;\\n        }\\n    } catch (e) {\\n        cachedClearTimeout = defaultClearTimeout;\\n    }\\n} ())\\nfunction runTimeout(fun) {\\n    if (cachedSetTimeout === setTimeout) {\\n        //normal enviroments in sane situations\\n        return setTimeout(fun, 0);\\n    }\\n    // if setTimeout wasn't available but was latter defined\\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\\n        cachedSetTimeout = setTimeout;\\n        return setTimeout(fun, 0);\\n    }\\n    try {\\n        // when when somebody has screwed with setTimeout but no I.E. maddness\\n        return cachedSetTimeout(fun, 0);\\n    } catch(e){\\n        try {\\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\\n            return cachedSetTimeout.call(null, fun, 0);\\n        } catch(e){\\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\\n            return cachedSetTimeout.call(this, fun, 0);\\n        }\\n    }\\n\\n\\n}\\nfunction runClearTimeout(marker) {\\n    if (cachedClearTimeout === clearTimeout) {\\n        //normal enviroments in sane situations\\n        return clearTimeout(marker);\\n    }\\n    // if clearTimeout wasn't available but was latter defined\\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\\n        cachedClearTimeout = clearTimeout;\\n        return clearTimeout(marker);\\n    }\\n    try {\\n        // when when somebody has screwed with setTimeout but no I.E. maddness\\n        return cachedClearTimeout(marker);\\n    } catch (e){\\n        try {\\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\\n            return cachedClearTimeout.call(null, marker);\\n        } catch (e){\\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\\n            return cachedClearTimeout.call(this, marker);\\n        }\\n    }\\n\\n\\n\\n}\\nvar queue = [];\\nvar draining = false;\\nvar currentQueue;\\nvar queueIndex = -1;\\n\\nfunction cleanUpNextTick() {\\n    if (!draining || !currentQueue) {\\n        return;\\n    }\\n    draining = false;\\n    if (currentQueue.length) {\\n        queue = currentQueue.concat(queue);\\n    } else {\\n        queueIndex = -1;\\n    }\\n    if (queue.length) {\\n        drainQueue();\\n    }\\n}\\n\\nfunction drainQueue() {\\n    if (draining) {\\n        return;\\n    }\\n    var timeout = runTimeout(cleanUpNextTick);\\n    draining = true;\\n\\n    var len = queue.length;\\n    while(len) {\\n        currentQueue = queue;\\n        queue = [];\\n        while (++queueIndex < len) {\\n            if (currentQueue) {\\n                currentQueue[queueIndex].run();\\n            }\\n        }\\n        queueIndex = -1;\\n        len = queue.length;\\n    }\\n    currentQueue = null;\\n    draining = false;\\n    runClearTimeout(timeout);\\n}\\n\\nprocess.nextTick = function (fun) {\\n    var args = new Array(arguments.length - 1);\\n    if (arguments.length > 1) {\\n        for (var i = 1; i < arguments.length; i++) {\\n            args[i - 1] = arguments[i];\\n        }\\n    }\\n    queue.push(new Item(fun, args));\\n    if (queue.length === 1 && !draining) {\\n        runTimeout(drainQueue);\\n    }\\n};\\n\\n// v8 likes predictible objects\\nfunction Item(fun, array) {\\n    this.fun = fun;\\n    this.array = array;\\n}\\nItem.prototype.run = function () {\\n    this.fun.apply(null, this.array);\\n};\\nprocess.title = 'browser';\\nprocess.browser = true;\\nprocess.env = {};\\nprocess.argv = [];\\nprocess.version = ''; // empty string to avoid regexp issues\\nprocess.versions = {};\\n\\nfunction noop() {}\\n\\nprocess.on = noop;\\nprocess.addListener = noop;\\nprocess.once = noop;\\nprocess.off = noop;\\nprocess.removeListener = noop;\\nprocess.removeAllListeners = noop;\\nprocess.emit = noop;\\n\\nprocess.binding = function (name) {\\n    throw new Error('process.binding is not supported');\\n};\\n\\nprocess.cwd = function () { return '/' };\\nprocess.chdir = function (dir) {\\n    throw new Error('process.chdir is not supported');\\n};\\nprocess.umask = function() { return 0; };\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/process/browser.js\\n// module id = 3\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/process/browser.js?\");\n\n/***/ },\n/* 4 */\n/*!**********************************!*\\\n  !*** ./~/object-assign/index.js ***!\n  \\**********************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n/* eslint-disable no-unused-vars */\\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\\n\\nfunction toObject(val) {\\n\\tif (val === null || val === undefined) {\\n\\t\\tthrow new TypeError('Object.assign cannot be called with null or undefined');\\n\\t}\\n\\n\\treturn Object(val);\\n}\\n\\nfunction shouldUseNative() {\\n\\ttry {\\n\\t\\tif (!Object.assign) {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// Detect buggy property enumeration order in older V8 versions.\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\\n\\t\\tvar test1 = new String('abc');  // eslint-disable-line\\n\\t\\ttest1[5] = 'de';\\n\\t\\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\\n\\t\\tvar test2 = {};\\n\\t\\tfor (var i = 0; i < 10; i++) {\\n\\t\\t\\ttest2['_' + String.fromCharCode(i)] = i;\\n\\t\\t}\\n\\t\\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\\n\\t\\t\\treturn test2[n];\\n\\t\\t});\\n\\t\\tif (order2.join('') !== '0123456789') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\\n\\t\\tvar test3 = {};\\n\\t\\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\\n\\t\\t\\ttest3[letter] = letter;\\n\\t\\t});\\n\\t\\tif (Object.keys(Object.assign({}, test3)).join('') !==\\n\\t\\t\\t\\t'abcdefghijklmnopqrst') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\treturn true;\\n\\t} catch (e) {\\n\\t\\t// We don't expect any of the above to throw, but better to be safe.\\n\\t\\treturn false;\\n\\t}\\n}\\n\\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\\n\\tvar from;\\n\\tvar to = toObject(target);\\n\\tvar symbols;\\n\\n\\tfor (var s = 1; s < arguments.length; s++) {\\n\\t\\tfrom = Object(arguments[s]);\\n\\n\\t\\tfor (var key in from) {\\n\\t\\t\\tif (hasOwnProperty.call(from, key)) {\\n\\t\\t\\t\\tto[key] = from[key];\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tif (Object.getOwnPropertySymbols) {\\n\\t\\t\\tsymbols = Object.getOwnPropertySymbols(from);\\n\\t\\t\\tfor (var i = 0; i < symbols.length; i++) {\\n\\t\\t\\t\\tif (propIsEnumerable.call(from, symbols[i])) {\\n\\t\\t\\t\\t\\tto[symbols[i]] = from[symbols[i]];\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\treturn to;\\n};\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/object-assign/index.js\\n// module id = 4\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/object-assign/index.js?\");\n\n/***/ },\n/* 5 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/ReactChildren.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 6);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\n\\nvar emptyFunction = __webpack_require__(/*! fbjs/lib/emptyFunction */ 12);\\nvar traverseAllChildren = __webpack_require__(/*! ./traverseAllChildren */ 15);\\n\\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\\nvar fourArgumentPooler = PooledClass.fourArgumentPooler;\\n\\nvar userProvidedKeyEscapeRegex = /\\\\/+/g;\\nfunction escapeUserProvidedKey(text) {\\n  return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\\n}\\n\\n/**\\n * PooledClass representing the bookkeeping associated with performing a child\\n * traversal. Allows avoiding binding callbacks.\\n *\\n * @constructor ForEachBookKeeping\\n * @param {!function} forEachFunction Function to perform traversal with.\\n * @param {?*} forEachContext Context to perform context with.\\n */\\nfunction ForEachBookKeeping(forEachFunction, forEachContext) {\\n  this.func = forEachFunction;\\n  this.context = forEachContext;\\n  this.count = 0;\\n}\\nForEachBookKeeping.prototype.destructor = function () {\\n  this.func = null;\\n  this.context = null;\\n  this.count = 0;\\n};\\nPooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);\\n\\nfunction forEachSingleChild(bookKeeping, child, name) {\\n  var func = bookKeeping.func,\\n      context = bookKeeping.context;\\n\\n  func.call(context, child, bookKeeping.count++);\\n}\\n\\n/**\\n * Iterates through children that are typically specified as `props.children`.\\n *\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.foreach\\n *\\n * The provided forEachFunc(child, index) will be called for each\\n * leaf child.\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} forEachFunc\\n * @param {*} forEachContext Context for forEachContext.\\n */\\nfunction forEachChildren(children, forEachFunc, forEachContext) {\\n  if (children == null) {\\n    return children;\\n  }\\n  var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);\\n  traverseAllChildren(children, forEachSingleChild, traverseContext);\\n  ForEachBookKeeping.release(traverseContext);\\n}\\n\\n/**\\n * PooledClass representing the bookkeeping associated with performing a child\\n * mapping. Allows avoiding binding callbacks.\\n *\\n * @constructor MapBookKeeping\\n * @param {!*} mapResult Object containing the ordered map of results.\\n * @param {!function} mapFunction Function to perform mapping with.\\n * @param {?*} mapContext Context to perform mapping with.\\n */\\nfunction MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) {\\n  this.result = mapResult;\\n  this.keyPrefix = keyPrefix;\\n  this.func = mapFunction;\\n  this.context = mapContext;\\n  this.count = 0;\\n}\\nMapBookKeeping.prototype.destructor = function () {\\n  this.result = null;\\n  this.keyPrefix = null;\\n  this.func = null;\\n  this.context = null;\\n  this.count = 0;\\n};\\nPooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler);\\n\\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\\n  var result = bookKeeping.result,\\n      keyPrefix = bookKeeping.keyPrefix,\\n      func = bookKeeping.func,\\n      context = bookKeeping.context;\\n\\n\\n  var mappedChild = func.call(context, child, bookKeeping.count++);\\n  if (Array.isArray(mappedChild)) {\\n    mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);\\n  } else if (mappedChild != null) {\\n    if (ReactElement.isValidElement(mappedChild)) {\\n      mappedChild = ReactElement.cloneAndReplaceKey(mappedChild,\\n      // Keep both the (mapped) and old keys if they differ, just as\\n      // traverseAllChildren used to do for objects as children\\n      keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\\n    }\\n    result.push(mappedChild);\\n  }\\n}\\n\\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\\n  var escapedPrefix = '';\\n  if (prefix != null) {\\n    escapedPrefix = escapeUserProvidedKey(prefix) + '/';\\n  }\\n  var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context);\\n  traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\\n  MapBookKeeping.release(traverseContext);\\n}\\n\\n/**\\n * Maps children that are typically specified as `props.children`.\\n *\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.map\\n *\\n * The provided mapFunction(child, key, index) will be called for each\\n * leaf child.\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} func The map function.\\n * @param {*} context Context for mapFunction.\\n * @return {object} Object containing the ordered map of results.\\n */\\nfunction mapChildren(children, func, context) {\\n  if (children == null) {\\n    return children;\\n  }\\n  var result = [];\\n  mapIntoWithKeyPrefixInternal(children, result, null, func, context);\\n  return result;\\n}\\n\\nfunction forEachSingleChildDummy(traverseContext, child, name) {\\n  return null;\\n}\\n\\n/**\\n * Count the number of children that are typically specified as\\n * `props.children`.\\n *\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.count\\n *\\n * @param {?*} children Children tree container.\\n * @return {number} The number of children.\\n */\\nfunction countChildren(children, context) {\\n  return traverseAllChildren(children, forEachSingleChildDummy, null);\\n}\\n\\n/**\\n * Flatten a children object (typically specified as `props.children`) and\\n * return an array with appropriately re-keyed children.\\n *\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.toarray\\n */\\nfunction toArray(children) {\\n  var result = [];\\n  mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);\\n  return result;\\n}\\n\\nvar ReactChildren = {\\n  forEach: forEachChildren,\\n  map: mapChildren,\\n  mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal,\\n  count: countChildren,\\n  toArray: toArray\\n};\\n\\nmodule.exports = ReactChildren;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactChildren.js\\n// module id = 5\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactChildren.js?\");\n\n/***/ },\n/* 6 */\n/*!************************************!*\\\n  !*** ./~/react/lib/PooledClass.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\n/**\\n * Static poolers. Several custom versions for each potential number of\\n * arguments. A completely generic pooler is easy to implement, but would\\n * require accessing the `arguments` object. In each of these, `this` refers to\\n * the Class itself, not an instance. If any others are needed, simply add them\\n * here, or in their own files.\\n */\\nvar oneArgumentPooler = function (copyFieldsFrom) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, copyFieldsFrom);\\n    return instance;\\n  } else {\\n    return new Klass(copyFieldsFrom);\\n  }\\n};\\n\\nvar twoArgumentPooler = function (a1, a2) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2);\\n  }\\n};\\n\\nvar threeArgumentPooler = function (a1, a2, a3) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2, a3);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2, a3);\\n  }\\n};\\n\\nvar fourArgumentPooler = function (a1, a2, a3, a4) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2, a3, a4);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2, a3, a4);\\n  }\\n};\\n\\nvar fiveArgumentPooler = function (a1, a2, a3, a4, a5) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2, a3, a4, a5);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2, a3, a4, a5);\\n  }\\n};\\n\\nvar standardReleaser = function (instance) {\\n  var Klass = this;\\n  !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;\\n  instance.destructor();\\n  if (Klass.instancePool.length < Klass.poolSize) {\\n    Klass.instancePool.push(instance);\\n  }\\n};\\n\\nvar DEFAULT_POOL_SIZE = 10;\\nvar DEFAULT_POOLER = oneArgumentPooler;\\n\\n/**\\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\\n * you give this may have a `poolSize` property, and will look for a\\n * prototypical `destructor` on instances.\\n *\\n * @param {Function} CopyConstructor Constructor that can be used to reset.\\n * @param {Function} pooler Customizable pooler.\\n */\\nvar addPoolingTo = function (CopyConstructor, pooler) {\\n  // Casting as any so that flow ignores the actual implementation and trusts\\n  // it to match the type we declared\\n  var NewKlass = CopyConstructor;\\n  NewKlass.instancePool = [];\\n  NewKlass.getPooled = pooler || DEFAULT_POOLER;\\n  if (!NewKlass.poolSize) {\\n    NewKlass.poolSize = DEFAULT_POOL_SIZE;\\n  }\\n  NewKlass.release = standardReleaser;\\n  return NewKlass;\\n};\\n\\nvar PooledClass = {\\n  addPoolingTo: addPoolingTo,\\n  oneArgumentPooler: oneArgumentPooler,\\n  twoArgumentPooler: twoArgumentPooler,\\n  threeArgumentPooler: threeArgumentPooler,\\n  fourArgumentPooler: fourArgumentPooler,\\n  fiveArgumentPooler: fiveArgumentPooler\\n};\\n\\nmodule.exports = PooledClass;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/PooledClass.js\\n// module id = 6\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/PooledClass.js?\");\n\n/***/ },\n/* 7 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/reactProdInvariant.js ***!\n  \\*******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n'use strict';\\n\\n/**\\n * WARNING: DO NOT manually require this module.\\n * This is a replacement for `invariant(...)` used by the error code system\\n * and will _only_ be required by the corresponding babel pass.\\n * It always throws.\\n */\\n\\nfunction reactProdInvariant(code) {\\n  var argCount = arguments.length - 1;\\n\\n  var message = 'Minified React error #' + code + '; visit ' + 'http://facebook.github.io/react/docs/error-decoder.html?invariant=' + code;\\n\\n  for (var argIdx = 0; argIdx < argCount; argIdx++) {\\n    message += '&args[]=' + encodeURIComponent(arguments[argIdx + 1]);\\n  }\\n\\n  message += ' for the full message or use the non-minified dev environment' + ' for full errors and additional helpful warnings.';\\n\\n  var error = new Error(message);\\n  error.name = 'Invariant Violation';\\n  error.framesToPop = 1; // we don't care about reactProdInvariant's own frame\\n\\n  throw error;\\n}\\n\\nmodule.exports = reactProdInvariant;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/reactProdInvariant.js\\n// module id = 7\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/reactProdInvariant.js?\");\n\n/***/ },\n/* 8 */\n/*!*********************************!*\\\n  !*** ./~/fbjs/lib/invariant.js ***!\n  \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\n/**\\n * Use invariant() to assert state which your program assumes to be true.\\n *\\n * Provide sprintf-style format (only %s is supported) and arguments\\n * to provide information about what broke and what you were\\n * expecting.\\n *\\n * The invariant message will be stripped in production, but the invariant\\n * will remain to ensure logic does not differ in production.\\n */\\n\\nfunction invariant(condition, format, a, b, c, d, e, f) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    if (format === undefined) {\\n      throw new Error('invariant requires an error message argument');\\n    }\\n  }\\n\\n  if (!condition) {\\n    var error;\\n    if (format === undefined) {\\n      error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\\n    } else {\\n      var args = [a, b, c, d, e, f];\\n      var argIndex = 0;\\n      error = new Error(format.replace(/%s/g, function () {\\n        return args[argIndex++];\\n      }));\\n      error.name = 'Invariant Violation';\\n    }\\n\\n    error.framesToPop = 1; // we don't care about invariant's own frame\\n    throw error;\\n  }\\n}\\n\\nmodule.exports = invariant;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/invariant.js\\n// module id = 8\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/fbjs/lib/invariant.js?\");\n\n/***/ },\n/* 9 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/ReactElement.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 10);\\n\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\nvar canDefineProperty = __webpack_require__(/*! ./canDefineProperty */ 13);\\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\\n\\nvar REACT_ELEMENT_TYPE = __webpack_require__(/*! ./ReactElementSymbol */ 14);\\n\\nvar RESERVED_PROPS = {\\n  key: true,\\n  ref: true,\\n  __self: true,\\n  __source: true\\n};\\n\\nvar specialPropKeyWarningShown, specialPropRefWarningShown;\\n\\nfunction hasValidRef(config) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    if (hasOwnProperty.call(config, 'ref')) {\\n      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\\n      if (getter && getter.isReactWarning) {\\n        return false;\\n      }\\n    }\\n  }\\n  return config.ref !== undefined;\\n}\\n\\nfunction hasValidKey(config) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    if (hasOwnProperty.call(config, 'key')) {\\n      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\\n      if (getter && getter.isReactWarning) {\\n        return false;\\n      }\\n    }\\n  }\\n  return config.key !== undefined;\\n}\\n\\nfunction defineKeyPropWarningGetter(props, displayName) {\\n  var warnAboutAccessingKey = function () {\\n    if (!specialPropKeyWarningShown) {\\n      specialPropKeyWarningShown = true;\\n      process.env.NODE_ENV !== 'production' ? warning(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;\\n    }\\n  };\\n  warnAboutAccessingKey.isReactWarning = true;\\n  Object.defineProperty(props, 'key', {\\n    get: warnAboutAccessingKey,\\n    configurable: true\\n  });\\n}\\n\\nfunction defineRefPropWarningGetter(props, displayName) {\\n  var warnAboutAccessingRef = function () {\\n    if (!specialPropRefWarningShown) {\\n      specialPropRefWarningShown = true;\\n      process.env.NODE_ENV !== 'production' ? warning(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName) : void 0;\\n    }\\n  };\\n  warnAboutAccessingRef.isReactWarning = true;\\n  Object.defineProperty(props, 'ref', {\\n    get: warnAboutAccessingRef,\\n    configurable: true\\n  });\\n}\\n\\n/**\\n * Factory method to create a new React element. This no longer adheres to\\n * the class pattern, so do not use new to call it. Also, no instanceof check\\n * will work. Instead test $$typeof field against Symbol.for('react.element') to check\\n * if something is a React Element.\\n *\\n * @param {*} type\\n * @param {*} key\\n * @param {string|object} ref\\n * @param {*} self A *temporary* helper to detect places where `this` is\\n * different from the `owner` when React.createElement is called, so that we\\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\\n * functions, and as long as `this` and owner are the same, there will be no\\n * change in behavior.\\n * @param {*} source An annotation object (added by a transpiler or otherwise)\\n * indicating filename, line number, and/or other information.\\n * @param {*} owner\\n * @param {*} props\\n * @internal\\n */\\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\\n  var element = {\\n    // This tag allow us to uniquely identify this as a React Element\\n    $$typeof: REACT_ELEMENT_TYPE,\\n\\n    // Built-in properties that belong on the element\\n    type: type,\\n    key: key,\\n    ref: ref,\\n    props: props,\\n\\n    // Record the component responsible for creating this element.\\n    _owner: owner\\n  };\\n\\n  if (process.env.NODE_ENV !== 'production') {\\n    // The validation flag is currently mutative. We put it on\\n    // an external backing store so that we can freeze the whole object.\\n    // This can be replaced with a WeakMap once they are implemented in\\n    // commonly used development environments.\\n    element._store = {};\\n\\n    // To make comparing ReactElements easier for testing purposes, we make\\n    // the validation flag non-enumerable (where possible, which should\\n    // include every environment we run tests in), so the test framework\\n    // ignores it.\\n    if (canDefineProperty) {\\n      Object.defineProperty(element._store, 'validated', {\\n        configurable: false,\\n        enumerable: false,\\n        writable: true,\\n        value: false\\n      });\\n      // self and source are DEV only properties.\\n      Object.defineProperty(element, '_self', {\\n        configurable: false,\\n        enumerable: false,\\n        writable: false,\\n        value: self\\n      });\\n      // Two elements created in two different places should be considered\\n      // equal for testing purposes and therefore we hide it from enumeration.\\n      Object.defineProperty(element, '_source', {\\n        configurable: false,\\n        enumerable: false,\\n        writable: false,\\n        value: source\\n      });\\n    } else {\\n      element._store.validated = false;\\n      element._self = self;\\n      element._source = source;\\n    }\\n    if (Object.freeze) {\\n      Object.freeze(element.props);\\n      Object.freeze(element);\\n    }\\n  }\\n\\n  return element;\\n};\\n\\n/**\\n * Create and return a new ReactElement of the given type.\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createelement\\n */\\nReactElement.createElement = function (type, config, children) {\\n  var propName;\\n\\n  // Reserved names are extracted\\n  var props = {};\\n\\n  var key = null;\\n  var ref = null;\\n  var self = null;\\n  var source = null;\\n\\n  if (config != null) {\\n    if (hasValidRef(config)) {\\n      ref = config.ref;\\n    }\\n    if (hasValidKey(config)) {\\n      key = '' + config.key;\\n    }\\n\\n    self = config.__self === undefined ? null : config.__self;\\n    source = config.__source === undefined ? null : config.__source;\\n    // Remaining properties are added to a new props object\\n    for (propName in config) {\\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\\n        props[propName] = config[propName];\\n      }\\n    }\\n  }\\n\\n  // Children can be more than one argument, and those are transferred onto\\n  // the newly allocated props object.\\n  var childrenLength = arguments.length - 2;\\n  if (childrenLength === 1) {\\n    props.children = children;\\n  } else if (childrenLength > 1) {\\n    var childArray = Array(childrenLength);\\n    for (var i = 0; i < childrenLength; i++) {\\n      childArray[i] = arguments[i + 2];\\n    }\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (Object.freeze) {\\n        Object.freeze(childArray);\\n      }\\n    }\\n    props.children = childArray;\\n  }\\n\\n  // Resolve default props\\n  if (type && type.defaultProps) {\\n    var defaultProps = type.defaultProps;\\n    for (propName in defaultProps) {\\n      if (props[propName] === undefined) {\\n        props[propName] = defaultProps[propName];\\n      }\\n    }\\n  }\\n  if (process.env.NODE_ENV !== 'production') {\\n    if (key || ref) {\\n      if (typeof props.$$typeof === 'undefined' || props.$$typeof !== REACT_ELEMENT_TYPE) {\\n        var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\\n        if (key) {\\n          defineKeyPropWarningGetter(props, displayName);\\n        }\\n        if (ref) {\\n          defineRefPropWarningGetter(props, displayName);\\n        }\\n      }\\n    }\\n  }\\n  return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\\n};\\n\\n/**\\n * Return a function that produces ReactElements of a given type.\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.createfactory\\n */\\nReactElement.createFactory = function (type) {\\n  var factory = ReactElement.createElement.bind(null, type);\\n  // Expose the type on the factory and the prototype so that it can be\\n  // easily accessed on elements. E.g. `<Foo />.type === Foo`.\\n  // This should not be named `constructor` since this may not be the function\\n  // that created the element, and it may not even be a constructor.\\n  // Legacy hook TODO: Warn if this is accessed\\n  factory.type = type;\\n  return factory;\\n};\\n\\nReactElement.cloneAndReplaceKey = function (oldElement, newKey) {\\n  var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\\n\\n  return newElement;\\n};\\n\\n/**\\n * Clone and return a new ReactElement using element as the starting point.\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.cloneelement\\n */\\nReactElement.cloneElement = function (element, config, children) {\\n  var propName;\\n\\n  // Original props are copied\\n  var props = _assign({}, element.props);\\n\\n  // Reserved names are extracted\\n  var key = element.key;\\n  var ref = element.ref;\\n  // Self is preserved since the owner is preserved.\\n  var self = element._self;\\n  // Source is preserved since cloneElement is unlikely to be targeted by a\\n  // transpiler, and the original source is probably a better indicator of the\\n  // true owner.\\n  var source = element._source;\\n\\n  // Owner will be preserved, unless ref is overridden\\n  var owner = element._owner;\\n\\n  if (config != null) {\\n    if (hasValidRef(config)) {\\n      // Silently steal the ref from the parent.\\n      ref = config.ref;\\n      owner = ReactCurrentOwner.current;\\n    }\\n    if (hasValidKey(config)) {\\n      key = '' + config.key;\\n    }\\n\\n    // Remaining properties override existing props\\n    var defaultProps;\\n    if (element.type && element.type.defaultProps) {\\n      defaultProps = element.type.defaultProps;\\n    }\\n    for (propName in config) {\\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\\n        if (config[propName] === undefined && defaultProps !== undefined) {\\n          // Resolve default props\\n          props[propName] = defaultProps[propName];\\n        } else {\\n          props[propName] = config[propName];\\n        }\\n      }\\n    }\\n  }\\n\\n  // Children can be more than one argument, and those are transferred onto\\n  // the newly allocated props object.\\n  var childrenLength = arguments.length - 2;\\n  if (childrenLength === 1) {\\n    props.children = children;\\n  } else if (childrenLength > 1) {\\n    var childArray = Array(childrenLength);\\n    for (var i = 0; i < childrenLength; i++) {\\n      childArray[i] = arguments[i + 2];\\n    }\\n    props.children = childArray;\\n  }\\n\\n  return ReactElement(element.type, key, ref, self, source, owner, props);\\n};\\n\\n/**\\n * Verifies the object is a ReactElement.\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.isvalidelement\\n * @param {?object} object\\n * @return {boolean} True if `object` is a valid component.\\n * @final\\n */\\nReactElement.isValidElement = function (object) {\\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\\n};\\n\\nmodule.exports = ReactElement;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactElement.js\\n// module id = 9\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactElement.js?\");\n\n/***/ },\n/* 10 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/ReactCurrentOwner.js ***!\n  \\******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n/**\\n * Keeps track of the current owner.\\n *\\n * The current owner is the component who should own any components that are\\n * currently being constructed.\\n */\\nvar ReactCurrentOwner = {\\n\\n  /**\\n   * @internal\\n   * @type {ReactComponent}\\n   */\\n  current: null\\n\\n};\\n\\nmodule.exports = ReactCurrentOwner;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactCurrentOwner.js\\n// module id = 10\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactCurrentOwner.js?\");\n\n/***/ },\n/* 11 */\n/*!*******************************!*\\\n  !*** ./~/fbjs/lib/warning.js ***!\n  \\*******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014-2015, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\n\\n/**\\n * Similar to invariant but only logs a warning if the condition is not met.\\n * This can be used to log issues in development environments in critical\\n * paths. Removing the logging code for production environments will keep the\\n * same logic and follow the same code paths.\\n */\\n\\nvar warning = emptyFunction;\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  (function () {\\n    var printWarning = function printWarning(format) {\\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\\n        args[_key - 1] = arguments[_key];\\n      }\\n\\n      var argIndex = 0;\\n      var message = 'Warning: ' + format.replace(/%s/g, function () {\\n        return args[argIndex++];\\n      });\\n      if (typeof console !== 'undefined') {\\n        console.error(message);\\n      }\\n      try {\\n        // --- Welcome to debugging React ---\\n        // This error was thrown as a convenience so that you can use this stack\\n        // to find the callsite that caused this warning to fire.\\n        throw new Error(message);\\n      } catch (x) {}\\n    };\\n\\n    warning = function warning(condition, format) {\\n      if (format === undefined) {\\n        throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\\n      }\\n\\n      if (format.indexOf('Failed Composite propType: ') === 0) {\\n        return; // Ignore CompositeComponent proptype check.\\n      }\\n\\n      if (!condition) {\\n        for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\\n          args[_key2 - 2] = arguments[_key2];\\n        }\\n\\n        printWarning.apply(undefined, [format].concat(args));\\n      }\\n    };\\n  })();\\n}\\n\\nmodule.exports = warning;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/warning.js\\n// module id = 11\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/fbjs/lib/warning.js?\");\n\n/***/ },\n/* 12 */\n/*!*************************************!*\\\n  !*** ./~/fbjs/lib/emptyFunction.js ***!\n  \\*************************************/\n/***/ function(module, exports) {\n\n\teval(\"\\\"use strict\\\";\\n\\n/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\nfunction makeEmptyFunction(arg) {\\n  return function () {\\n    return arg;\\n  };\\n}\\n\\n/**\\n * This function accepts and discards inputs; it has no side effects. This is\\n * primarily useful idiomatically for overridable function endpoints which\\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\\n */\\nvar emptyFunction = function emptyFunction() {};\\n\\nemptyFunction.thatReturns = makeEmptyFunction;\\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\\nemptyFunction.thatReturnsThis = function () {\\n  return this;\\n};\\nemptyFunction.thatReturnsArgument = function (arg) {\\n  return arg;\\n};\\n\\nmodule.exports = emptyFunction;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/emptyFunction.js\\n// module id = 12\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/fbjs/lib/emptyFunction.js?\");\n\n/***/ },\n/* 13 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/canDefineProperty.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar canDefineProperty = false;\\nif (process.env.NODE_ENV !== 'production') {\\n  try {\\n    // $FlowFixMe https://github.com/facebook/flow/issues/285\\n    Object.defineProperty({}, 'x', { get: function () {} });\\n    canDefineProperty = true;\\n  } catch (x) {\\n    // IE will fail on defineProperty\\n  }\\n}\\n\\nmodule.exports = canDefineProperty;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/canDefineProperty.js\\n// module id = 13\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/canDefineProperty.js?\");\n\n/***/ },\n/* 14 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/ReactElementSymbol.js ***!\n  \\*******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2014-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n// The Symbol used to tag the ReactElement type. If there is no native Symbol\\n// nor polyfill, then a plain number is used for performance.\\n\\nvar REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;\\n\\nmodule.exports = REACT_ELEMENT_TYPE;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactElementSymbol.js\\n// module id = 14\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactElementSymbol.js?\");\n\n/***/ },\n/* 15 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/traverseAllChildren.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 10);\\nvar REACT_ELEMENT_TYPE = __webpack_require__(/*! ./ReactElementSymbol */ 14);\\n\\nvar getIteratorFn = __webpack_require__(/*! ./getIteratorFn */ 16);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar KeyEscapeUtils = __webpack_require__(/*! ./KeyEscapeUtils */ 17);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar SEPARATOR = '.';\\nvar SUBSEPARATOR = ':';\\n\\n/**\\n * This is inlined from ReactElement since this file is shared between\\n * isomorphic and renderers. We could extract this to a\\n *\\n */\\n\\n/**\\n * TODO: Test that a single child and an array with one item have the same key\\n * pattern.\\n */\\n\\nvar didWarnAboutMaps = false;\\n\\n/**\\n * Generate a key string that identifies a component within a set.\\n *\\n * @param {*} component A component that could contain a manual key.\\n * @param {number} index Index that is used if a manual key is not provided.\\n * @return {string}\\n */\\nfunction getComponentKey(component, index) {\\n  // Do some typechecking here since we call this blindly. We want to ensure\\n  // that we don't block potential future ES APIs.\\n  if (component && typeof component === 'object' && component.key != null) {\\n    // Explicit key\\n    return KeyEscapeUtils.escape(component.key);\\n  }\\n  // Implicit key determined by the index in the set\\n  return index.toString(36);\\n}\\n\\n/**\\n * @param {?*} children Children tree container.\\n * @param {!string} nameSoFar Name of the key path so far.\\n * @param {!function} callback Callback to invoke with each child found.\\n * @param {?*} traverseContext Used to pass information throughout the traversal\\n * process.\\n * @return {!number} The number of children in this subtree.\\n */\\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\\n  var type = typeof children;\\n\\n  if (type === 'undefined' || type === 'boolean') {\\n    // All of the above are perceived as null.\\n    children = null;\\n  }\\n\\n  if (children === null || type === 'string' || type === 'number' ||\\n  // The following is inlined from ReactElement. This means we can optimize\\n  // some checks. React Fiber also inlines this logic for similar purposes.\\n  type === 'object' && children.$$typeof === REACT_ELEMENT_TYPE) {\\n    callback(traverseContext, children,\\n    // If it's the only child, treat the name as if it was wrapped in an array\\n    // so that it's consistent if the number of children grows.\\n    nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\\n    return 1;\\n  }\\n\\n  var child;\\n  var nextName;\\n  var subtreeCount = 0; // Count of children found in the current subtree.\\n  var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\\n\\n  if (Array.isArray(children)) {\\n    for (var i = 0; i < children.length; i++) {\\n      child = children[i];\\n      nextName = nextNamePrefix + getComponentKey(child, i);\\n      subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\\n    }\\n  } else {\\n    var iteratorFn = getIteratorFn(children);\\n    if (iteratorFn) {\\n      var iterator = iteratorFn.call(children);\\n      var step;\\n      if (iteratorFn !== children.entries) {\\n        var ii = 0;\\n        while (!(step = iterator.next()).done) {\\n          child = step.value;\\n          nextName = nextNamePrefix + getComponentKey(child, ii++);\\n          subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\\n        }\\n      } else {\\n        if (process.env.NODE_ENV !== 'production') {\\n          var mapsAsChildrenAddendum = '';\\n          if (ReactCurrentOwner.current) {\\n            var mapsAsChildrenOwnerName = ReactCurrentOwner.current.getName();\\n            if (mapsAsChildrenOwnerName) {\\n              mapsAsChildrenAddendum = ' Check the render method of `' + mapsAsChildrenOwnerName + '`.';\\n            }\\n          }\\n          process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.%s', mapsAsChildrenAddendum) : void 0;\\n          didWarnAboutMaps = true;\\n        }\\n        // Iterator will provide entry [k,v] tuples rather than values.\\n        while (!(step = iterator.next()).done) {\\n          var entry = step.value;\\n          if (entry) {\\n            child = entry[1];\\n            nextName = nextNamePrefix + KeyEscapeUtils.escape(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);\\n            subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\\n          }\\n        }\\n      }\\n    } else if (type === 'object') {\\n      var addendum = '';\\n      if (process.env.NODE_ENV !== 'production') {\\n        addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';\\n        if (children._isReactElement) {\\n          addendum = ' It looks like you\\\\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';\\n        }\\n        if (ReactCurrentOwner.current) {\\n          var name = ReactCurrentOwner.current.getName();\\n          if (name) {\\n            addendum += ' Check the render method of `' + name + '`.';\\n          }\\n        }\\n      }\\n      var childrenString = String(children);\\n       true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : _prodInvariant('31', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : void 0;\\n    }\\n  }\\n\\n  return subtreeCount;\\n}\\n\\n/**\\n * Traverses children that are typically specified as `props.children`, but\\n * might also be specified through attributes:\\n *\\n * - `traverseAllChildren(this.props.children, ...)`\\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\\n *\\n * The `traverseContext` is an optional argument that is passed through the\\n * entire traversal. It can be used to store accumulations or anything else that\\n * the callback might find relevant.\\n *\\n * @param {?*} children Children tree object.\\n * @param {!function} callback To invoke upon traversing each child.\\n * @param {?*} traverseContext Context for traversal.\\n * @return {!number} The number of children in this subtree.\\n */\\nfunction traverseAllChildren(children, callback, traverseContext) {\\n  if (children == null) {\\n    return 0;\\n  }\\n\\n  return traverseAllChildrenImpl(children, '', callback, traverseContext);\\n}\\n\\nmodule.exports = traverseAllChildren;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/traverseAllChildren.js\\n// module id = 15\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/traverseAllChildren.js?\");\n\n/***/ },\n/* 16 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/getIteratorFn.js ***!\n  \\**************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n/* global Symbol */\\n\\nvar ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\\nvar FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\\n\\n/**\\n * Returns the iterator method function contained on the iterable object.\\n *\\n * Be sure to invoke the function with the iterable as context:\\n *\\n *     var iteratorFn = getIteratorFn(myIterable);\\n *     if (iteratorFn) {\\n *       var iterator = iteratorFn.call(myIterable);\\n *       ...\\n *     }\\n *\\n * @param {?object} maybeIterable\\n * @return {?function}\\n */\\nfunction getIteratorFn(maybeIterable) {\\n  var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\\n  if (typeof iteratorFn === 'function') {\\n    return iteratorFn;\\n  }\\n}\\n\\nmodule.exports = getIteratorFn;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/getIteratorFn.js\\n// module id = 16\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/getIteratorFn.js?\");\n\n/***/ },\n/* 17 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/KeyEscapeUtils.js ***!\n  \\***************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n/**\\n * Escape and wrap key so it is safe to use as a reactid\\n *\\n * @param {string} key to be escaped.\\n * @return {string} the escaped key.\\n */\\n\\nfunction escape(key) {\\n  var escapeRegex = /[=:]/g;\\n  var escaperLookup = {\\n    '=': '=0',\\n    ':': '=2'\\n  };\\n  var escapedString = ('' + key).replace(escapeRegex, function (match) {\\n    return escaperLookup[match];\\n  });\\n\\n  return '$' + escapedString;\\n}\\n\\n/**\\n * Unescape and unwrap key for human-readable display\\n *\\n * @param {string} key to unescape.\\n * @return {string} the unescaped key.\\n */\\nfunction unescape(key) {\\n  var unescapeRegex = /(=0|=2)/g;\\n  var unescaperLookup = {\\n    '=0': '=',\\n    '=2': ':'\\n  };\\n  var keySubstring = key[0] === '.' && key[1] === '$' ? key.substring(2) : key.substring(1);\\n\\n  return ('' + keySubstring).replace(unescapeRegex, function (match) {\\n    return unescaperLookup[match];\\n  });\\n}\\n\\nvar KeyEscapeUtils = {\\n  escape: escape,\\n  unescape: unescape\\n};\\n\\nmodule.exports = KeyEscapeUtils;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/KeyEscapeUtils.js\\n// module id = 17\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/KeyEscapeUtils.js?\");\n\n/***/ },\n/* 18 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactComponent.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar ReactNoopUpdateQueue = __webpack_require__(/*! ./ReactNoopUpdateQueue */ 19);\\n\\nvar canDefineProperty = __webpack_require__(/*! ./canDefineProperty */ 13);\\nvar emptyObject = __webpack_require__(/*! fbjs/lib/emptyObject */ 20);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\n/**\\n * Base class helpers for the updating state of a component.\\n */\\nfunction ReactComponent(props, context, updater) {\\n  this.props = props;\\n  this.context = context;\\n  this.refs = emptyObject;\\n  // We initialize the default updater but the real one gets injected by the\\n  // renderer.\\n  this.updater = updater || ReactNoopUpdateQueue;\\n}\\n\\nReactComponent.prototype.isReactComponent = {};\\n\\n/**\\n * Sets a subset of the state. Always use this to mutate\\n * state. You should treat `this.state` as immutable.\\n *\\n * There is no guarantee that `this.state` will be immediately updated, so\\n * accessing `this.state` after calling this method may return the old value.\\n *\\n * There is no guarantee that calls to `setState` will run synchronously,\\n * as they may eventually be batched together.  You can provide an optional\\n * callback that will be executed when the call to setState is actually\\n * completed.\\n *\\n * When a function is provided to setState, it will be called at some point in\\n * the future (not synchronously). It will be called with the up to date\\n * component arguments (state, props, context). These values can be different\\n * from this.* because your function may be called after receiveProps but before\\n * shouldComponentUpdate, and this new state, props, and context will not yet be\\n * assigned to this.\\n *\\n * @param {object|function} partialState Next partial state or function to\\n *        produce next partial state to be merged with current state.\\n * @param {?function} callback Called after state is updated.\\n * @final\\n * @protected\\n */\\nReactComponent.prototype.setState = function (partialState, callback) {\\n  !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : _prodInvariant('85') : void 0;\\n  this.updater.enqueueSetState(this, partialState);\\n  if (callback) {\\n    this.updater.enqueueCallback(this, callback, 'setState');\\n  }\\n};\\n\\n/**\\n * Forces an update. This should only be invoked when it is known with\\n * certainty that we are **not** in a DOM transaction.\\n *\\n * You may want to call this when you know that some deeper aspect of the\\n * component's state has changed but `setState` was not called.\\n *\\n * This will not invoke `shouldComponentUpdate`, but it will invoke\\n * `componentWillUpdate` and `componentDidUpdate`.\\n *\\n * @param {?function} callback Called after update is complete.\\n * @final\\n * @protected\\n */\\nReactComponent.prototype.forceUpdate = function (callback) {\\n  this.updater.enqueueForceUpdate(this);\\n  if (callback) {\\n    this.updater.enqueueCallback(this, callback, 'forceUpdate');\\n  }\\n};\\n\\n/**\\n * Deprecated APIs. These APIs used to exist on classic React classes but since\\n * we would like to deprecate them, we're not going to move them over to this\\n * modern base class. Instead, we define a getter that warns if it's accessed.\\n */\\nif (process.env.NODE_ENV !== 'production') {\\n  var deprecatedAPIs = {\\n    isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\\n    replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\\n  };\\n  var defineDeprecationWarning = function (methodName, info) {\\n    if (canDefineProperty) {\\n      Object.defineProperty(ReactComponent.prototype, methodName, {\\n        get: function () {\\n          process.env.NODE_ENV !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : void 0;\\n          return undefined;\\n        }\\n      });\\n    }\\n  };\\n  for (var fnName in deprecatedAPIs) {\\n    if (deprecatedAPIs.hasOwnProperty(fnName)) {\\n      defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\\n    }\\n  }\\n}\\n\\nmodule.exports = ReactComponent;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactComponent.js\\n// module id = 18\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactComponent.js?\");\n\n/***/ },\n/* 19 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ReactNoopUpdateQueue.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2015-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nfunction warnNoop(publicInstance, callerName) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    var constructor = publicInstance.constructor;\\n    process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, constructor && (constructor.displayName || constructor.name) || 'ReactClass') : void 0;\\n  }\\n}\\n\\n/**\\n * This is the abstract API for an update queue.\\n */\\nvar ReactNoopUpdateQueue = {\\n\\n  /**\\n   * Checks whether or not this composite component is mounted.\\n   * @param {ReactClass} publicInstance The instance we want to test.\\n   * @return {boolean} True if mounted, false otherwise.\\n   * @protected\\n   * @final\\n   */\\n  isMounted: function (publicInstance) {\\n    return false;\\n  },\\n\\n  /**\\n   * Enqueue a callback that will be executed after all the pending updates\\n   * have processed.\\n   *\\n   * @param {ReactClass} publicInstance The instance to use as `this` context.\\n   * @param {?function} callback Called after state is updated.\\n   * @internal\\n   */\\n  enqueueCallback: function (publicInstance, callback) {},\\n\\n  /**\\n   * Forces an update. This should only be invoked when it is known with\\n   * certainty that we are **not** in a DOM transaction.\\n   *\\n   * You may want to call this when you know that some deeper aspect of the\\n   * component's state has changed but `setState` was not called.\\n   *\\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\\n   * `componentWillUpdate` and `componentDidUpdate`.\\n   *\\n   * @param {ReactClass} publicInstance The instance that should rerender.\\n   * @internal\\n   */\\n  enqueueForceUpdate: function (publicInstance) {\\n    warnNoop(publicInstance, 'forceUpdate');\\n  },\\n\\n  /**\\n   * Replaces all of the state. Always use this or `setState` to mutate state.\\n   * You should treat `this.state` as immutable.\\n   *\\n   * There is no guarantee that `this.state` will be immediately updated, so\\n   * accessing `this.state` after calling this method may return the old value.\\n   *\\n   * @param {ReactClass} publicInstance The instance that should rerender.\\n   * @param {object} completeState Next state.\\n   * @internal\\n   */\\n  enqueueReplaceState: function (publicInstance, completeState) {\\n    warnNoop(publicInstance, 'replaceState');\\n  },\\n\\n  /**\\n   * Sets a subset of the state. This only exists because _pendingState is\\n   * internal. This provides a merging strategy that is not available to deep\\n   * properties which is confusing. TODO: Expose pendingState or don't use it\\n   * during the merge.\\n   *\\n   * @param {ReactClass} publicInstance The instance that should rerender.\\n   * @param {object} partialState Next partial state to be merged with state.\\n   * @internal\\n   */\\n  enqueueSetState: function (publicInstance, partialState) {\\n    warnNoop(publicInstance, 'setState');\\n  }\\n};\\n\\nmodule.exports = ReactNoopUpdateQueue;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactNoopUpdateQueue.js\\n// module id = 19\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactNoopUpdateQueue.js?\");\n\n/***/ },\n/* 20 */\n/*!***********************************!*\\\n  !*** ./~/fbjs/lib/emptyObject.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar emptyObject = {};\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  Object.freeze(emptyObject);\\n}\\n\\nmodule.exports = emptyObject;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/emptyObject.js\\n// module id = 20\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/fbjs/lib/emptyObject.js?\");\n\n/***/ },\n/* 21 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/ReactPureComponent.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 18);\\nvar ReactNoopUpdateQueue = __webpack_require__(/*! ./ReactNoopUpdateQueue */ 19);\\n\\nvar emptyObject = __webpack_require__(/*! fbjs/lib/emptyObject */ 20);\\n\\n/**\\n * Base class helpers for the updating state of a component.\\n */\\nfunction ReactPureComponent(props, context, updater) {\\n  // Duplicated from ReactComponent.\\n  this.props = props;\\n  this.context = context;\\n  this.refs = emptyObject;\\n  // We initialize the default updater but the real one gets injected by the\\n  // renderer.\\n  this.updater = updater || ReactNoopUpdateQueue;\\n}\\n\\nfunction ComponentDummy() {}\\nComponentDummy.prototype = ReactComponent.prototype;\\nReactPureComponent.prototype = new ComponentDummy();\\nReactPureComponent.prototype.constructor = ReactPureComponent;\\n// Avoid an extra prototype jump for these methods.\\n_assign(ReactPureComponent.prototype, ReactComponent.prototype);\\nReactPureComponent.prototype.isPureReactComponent = true;\\n\\nmodule.exports = ReactPureComponent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactPureComponent.js\\n// module id = 21\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactPureComponent.js?\");\n\n/***/ },\n/* 22 */\n/*!***********************************!*\\\n  !*** ./~/react/lib/ReactClass.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7),\\n    _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 18);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\nvar ReactPropTypeLocationNames = __webpack_require__(/*! ./ReactPropTypeLocationNames */ 23);\\nvar ReactNoopUpdateQueue = __webpack_require__(/*! ./ReactNoopUpdateQueue */ 19);\\n\\nvar emptyObject = __webpack_require__(/*! fbjs/lib/emptyObject */ 20);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar MIXINS_KEY = 'mixins';\\n\\n// Helper function to allow the creation of anonymous functions which do not\\n// have .name set to the name of the variable being assigned to.\\nfunction identity(fn) {\\n  return fn;\\n}\\n\\n/**\\n * Policies that describe methods in `ReactClassInterface`.\\n */\\n\\n\\nvar injectedMixins = [];\\n\\n/**\\n * Composite components are higher-level components that compose other composite\\n * or host components.\\n *\\n * To create a new type of `ReactClass`, pass a specification of\\n * your new class to `React.createClass`. The only requirement of your class\\n * specification is that you implement a `render` method.\\n *\\n *   var MyComponent = React.createClass({\\n *     render: function() {\\n *       return <div>Hello World</div>;\\n *     }\\n *   });\\n *\\n * The class specification supports a specific protocol of methods that have\\n * special meaning (e.g. `render`). See `ReactClassInterface` for\\n * more the comprehensive protocol. Any other properties and methods in the\\n * class specification will be available on the prototype.\\n *\\n * @interface ReactClassInterface\\n * @internal\\n */\\nvar ReactClassInterface = {\\n\\n  /**\\n   * An array of Mixin objects to include when defining your component.\\n   *\\n   * @type {array}\\n   * @optional\\n   */\\n  mixins: 'DEFINE_MANY',\\n\\n  /**\\n   * An object containing properties and methods that should be defined on\\n   * the component's constructor instead of its prototype (static methods).\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  statics: 'DEFINE_MANY',\\n\\n  /**\\n   * Definition of prop types for this component.\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  propTypes: 'DEFINE_MANY',\\n\\n  /**\\n   * Definition of context types for this component.\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  contextTypes: 'DEFINE_MANY',\\n\\n  /**\\n   * Definition of context types this component sets for its children.\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  childContextTypes: 'DEFINE_MANY',\\n\\n  // ==== Definition methods ====\\n\\n  /**\\n   * Invoked when the component is mounted. Values in the mapping will be set on\\n   * `this.props` if that prop is not specified (i.e. using an `in` check).\\n   *\\n   * This method is invoked before `getInitialState` and therefore cannot rely\\n   * on `this.state` or use `this.setState`.\\n   *\\n   * @return {object}\\n   * @optional\\n   */\\n  getDefaultProps: 'DEFINE_MANY_MERGED',\\n\\n  /**\\n   * Invoked once before the component is mounted. The return value will be used\\n   * as the initial value of `this.state`.\\n   *\\n   *   getInitialState: function() {\\n   *     return {\\n   *       isOn: false,\\n   *       fooBaz: new BazFoo()\\n   *     }\\n   *   }\\n   *\\n   * @return {object}\\n   * @optional\\n   */\\n  getInitialState: 'DEFINE_MANY_MERGED',\\n\\n  /**\\n   * @return {object}\\n   * @optional\\n   */\\n  getChildContext: 'DEFINE_MANY_MERGED',\\n\\n  /**\\n   * Uses props from `this.props` and state from `this.state` to render the\\n   * structure of the component.\\n   *\\n   * No guarantees are made about when or how often this method is invoked, so\\n   * it must not have side effects.\\n   *\\n   *   render: function() {\\n   *     var name = this.props.name;\\n   *     return <div>Hello, {name}!</div>;\\n   *   }\\n   *\\n   * @return {ReactComponent}\\n   * @nosideeffects\\n   * @required\\n   */\\n  render: 'DEFINE_ONCE',\\n\\n  // ==== Delegate methods ====\\n\\n  /**\\n   * Invoked when the component is initially created and about to be mounted.\\n   * This may have side effects, but any external subscriptions or data created\\n   * by this method must be cleaned up in `componentWillUnmount`.\\n   *\\n   * @optional\\n   */\\n  componentWillMount: 'DEFINE_MANY',\\n\\n  /**\\n   * Invoked when the component has been mounted and has a DOM representation.\\n   * However, there is no guarantee that the DOM node is in the document.\\n   *\\n   * Use this as an opportunity to operate on the DOM when the component has\\n   * been mounted (initialized and rendered) for the first time.\\n   *\\n   * @param {DOMElement} rootNode DOM element representing the component.\\n   * @optional\\n   */\\n  componentDidMount: 'DEFINE_MANY',\\n\\n  /**\\n   * Invoked before the component receives new props.\\n   *\\n   * Use this as an opportunity to react to a prop transition by updating the\\n   * state using `this.setState`. Current props are accessed via `this.props`.\\n   *\\n   *   componentWillReceiveProps: function(nextProps, nextContext) {\\n   *     this.setState({\\n   *       likesIncreasing: nextProps.likeCount > this.props.likeCount\\n   *     });\\n   *   }\\n   *\\n   * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\\n   * transition may cause a state change, but the opposite is not true. If you\\n   * need it, you are probably looking for `componentWillUpdate`.\\n   *\\n   * @param {object} nextProps\\n   * @optional\\n   */\\n  componentWillReceiveProps: 'DEFINE_MANY',\\n\\n  /**\\n   * Invoked while deciding if the component should be updated as a result of\\n   * receiving new props, state and/or context.\\n   *\\n   * Use this as an opportunity to `return false` when you're certain that the\\n   * transition to the new props/state/context will not require a component\\n   * update.\\n   *\\n   *   shouldComponentUpdate: function(nextProps, nextState, nextContext) {\\n   *     return !equal(nextProps, this.props) ||\\n   *       !equal(nextState, this.state) ||\\n   *       !equal(nextContext, this.context);\\n   *   }\\n   *\\n   * @param {object} nextProps\\n   * @param {?object} nextState\\n   * @param {?object} nextContext\\n   * @return {boolean} True if the component should update.\\n   * @optional\\n   */\\n  shouldComponentUpdate: 'DEFINE_ONCE',\\n\\n  /**\\n   * Invoked when the component is about to update due to a transition from\\n   * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\\n   * and `nextContext`.\\n   *\\n   * Use this as an opportunity to perform preparation before an update occurs.\\n   *\\n   * NOTE: You **cannot** use `this.setState()` in this method.\\n   *\\n   * @param {object} nextProps\\n   * @param {?object} nextState\\n   * @param {?object} nextContext\\n   * @param {ReactReconcileTransaction} transaction\\n   * @optional\\n   */\\n  componentWillUpdate: 'DEFINE_MANY',\\n\\n  /**\\n   * Invoked when the component's DOM representation has been updated.\\n   *\\n   * Use this as an opportunity to operate on the DOM when the component has\\n   * been updated.\\n   *\\n   * @param {object} prevProps\\n   * @param {?object} prevState\\n   * @param {?object} prevContext\\n   * @param {DOMElement} rootNode DOM element representing the component.\\n   * @optional\\n   */\\n  componentDidUpdate: 'DEFINE_MANY',\\n\\n  /**\\n   * Invoked when the component is about to be removed from its parent and have\\n   * its DOM representation destroyed.\\n   *\\n   * Use this as an opportunity to deallocate any external resources.\\n   *\\n   * NOTE: There is no `componentDidUnmount` since your component will have been\\n   * destroyed by that point.\\n   *\\n   * @optional\\n   */\\n  componentWillUnmount: 'DEFINE_MANY',\\n\\n  // ==== Advanced methods ====\\n\\n  /**\\n   * Updates the component's currently mounted DOM representation.\\n   *\\n   * By default, this implements React's rendering and reconciliation algorithm.\\n   * Sophisticated clients may wish to override this.\\n   *\\n   * @param {ReactReconcileTransaction} transaction\\n   * @internal\\n   * @overridable\\n   */\\n  updateComponent: 'OVERRIDE_BASE'\\n\\n};\\n\\n/**\\n * Mapping from class specification keys to special processing functions.\\n *\\n * Although these are declared like instance properties in the specification\\n * when defining classes using `React.createClass`, they are actually static\\n * and are accessible on the constructor instead of the prototype. Despite\\n * being static, they must be defined outside of the \\\"statics\\\" key under\\n * which all other static methods are defined.\\n */\\nvar RESERVED_SPEC_KEYS = {\\n  displayName: function (Constructor, displayName) {\\n    Constructor.displayName = displayName;\\n  },\\n  mixins: function (Constructor, mixins) {\\n    if (mixins) {\\n      for (var i = 0; i < mixins.length; i++) {\\n        mixSpecIntoComponent(Constructor, mixins[i]);\\n      }\\n    }\\n  },\\n  childContextTypes: function (Constructor, childContextTypes) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      validateTypeDef(Constructor, childContextTypes, 'childContext');\\n    }\\n    Constructor.childContextTypes = _assign({}, Constructor.childContextTypes, childContextTypes);\\n  },\\n  contextTypes: function (Constructor, contextTypes) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      validateTypeDef(Constructor, contextTypes, 'context');\\n    }\\n    Constructor.contextTypes = _assign({}, Constructor.contextTypes, contextTypes);\\n  },\\n  /**\\n   * Special case getDefaultProps which should move into statics but requires\\n   * automatic merging.\\n   */\\n  getDefaultProps: function (Constructor, getDefaultProps) {\\n    if (Constructor.getDefaultProps) {\\n      Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);\\n    } else {\\n      Constructor.getDefaultProps = getDefaultProps;\\n    }\\n  },\\n  propTypes: function (Constructor, propTypes) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      validateTypeDef(Constructor, propTypes, 'prop');\\n    }\\n    Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);\\n  },\\n  statics: function (Constructor, statics) {\\n    mixStaticSpecIntoComponent(Constructor, statics);\\n  },\\n  autobind: function () {} };\\n\\nfunction validateTypeDef(Constructor, typeDef, location) {\\n  for (var propName in typeDef) {\\n    if (typeDef.hasOwnProperty(propName)) {\\n      // use a warning instead of an invariant so components\\n      // don't show up in prod but only in __DEV__\\n      process.env.NODE_ENV !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : void 0;\\n    }\\n  }\\n}\\n\\nfunction validateMethodOverride(isAlreadyDefined, name) {\\n  var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;\\n\\n  // Disallow overriding of base class methods unless explicitly allowed.\\n  if (ReactClassMixin.hasOwnProperty(name)) {\\n    !(specPolicy === 'OVERRIDE_BASE') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.', name) : _prodInvariant('73', name) : void 0;\\n  }\\n\\n  // Disallow defining methods more than once unless explicitly allowed.\\n  if (isAlreadyDefined) {\\n    !(specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('74', name) : void 0;\\n  }\\n}\\n\\n/**\\n * Mixin helper which handles policy validation and reserved\\n * specification keys when building React classes.\\n */\\nfunction mixSpecIntoComponent(Constructor, spec) {\\n  if (!spec) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      var typeofSpec = typeof spec;\\n      var isMixinValid = typeofSpec === 'object' && spec !== null;\\n\\n      process.env.NODE_ENV !== 'production' ? warning(isMixinValid, '%s: You\\\\'re attempting to include a mixin that is either null ' + 'or not an object. Check the mixins included by the component, ' + 'as well as any mixins they include themselves. ' + 'Expected object but got %s.', Constructor.displayName || 'ReactClass', spec === null ? null : typeofSpec) : void 0;\\n    }\\n\\n    return;\\n  }\\n\\n  !(typeof spec !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\\\'re attempting to use a component class or function as a mixin. Instead, just use a regular object.') : _prodInvariant('75') : void 0;\\n  !!ReactElement.isValidElement(spec) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You\\\\'re attempting to use a component as a mixin. Instead, just use a regular object.') : _prodInvariant('76') : void 0;\\n\\n  var proto = Constructor.prototype;\\n  var autoBindPairs = proto.__reactAutoBindPairs;\\n\\n  // By handling mixins before any other properties, we ensure the same\\n  // chaining order is applied to methods with DEFINE_MANY policy, whether\\n  // mixins are listed before or after these methods in the spec.\\n  if (spec.hasOwnProperty(MIXINS_KEY)) {\\n    RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\\n  }\\n\\n  for (var name in spec) {\\n    if (!spec.hasOwnProperty(name)) {\\n      continue;\\n    }\\n\\n    if (name === MIXINS_KEY) {\\n      // We have already handled mixins in a special case above.\\n      continue;\\n    }\\n\\n    var property = spec[name];\\n    var isAlreadyDefined = proto.hasOwnProperty(name);\\n    validateMethodOverride(isAlreadyDefined, name);\\n\\n    if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\\n      RESERVED_SPEC_KEYS[name](Constructor, property);\\n    } else {\\n      // Setup methods on prototype:\\n      // The following member methods should not be automatically bound:\\n      // 1. Expected ReactClass methods (in the \\\"interface\\\").\\n      // 2. Overridden methods (that were mixed in).\\n      var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\\n      var isFunction = typeof property === 'function';\\n      var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;\\n\\n      if (shouldAutoBind) {\\n        autoBindPairs.push(name, property);\\n        proto[name] = property;\\n      } else {\\n        if (isAlreadyDefined) {\\n          var specPolicy = ReactClassInterface[name];\\n\\n          // These cases should already be caught by validateMethodOverride.\\n          !(isReactClassMethod && (specPolicy === 'DEFINE_MANY_MERGED' || specPolicy === 'DEFINE_MANY')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.', specPolicy, name) : _prodInvariant('77', specPolicy, name) : void 0;\\n\\n          // For methods which are defined more than once, call the existing\\n          // methods before calling the new property, merging if appropriate.\\n          if (specPolicy === 'DEFINE_MANY_MERGED') {\\n            proto[name] = createMergedResultFunction(proto[name], property);\\n          } else if (specPolicy === 'DEFINE_MANY') {\\n            proto[name] = createChainedFunction(proto[name], property);\\n          }\\n        } else {\\n          proto[name] = property;\\n          if (process.env.NODE_ENV !== 'production') {\\n            // Add verbose displayName to the function, which helps when looking\\n            // at profiling tools.\\n            if (typeof property === 'function' && spec.displayName) {\\n              proto[name].displayName = spec.displayName + '_' + name;\\n            }\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\n\\nfunction mixStaticSpecIntoComponent(Constructor, statics) {\\n  if (!statics) {\\n    return;\\n  }\\n  for (var name in statics) {\\n    var property = statics[name];\\n    if (!statics.hasOwnProperty(name)) {\\n      continue;\\n    }\\n\\n    var isReserved = name in RESERVED_SPEC_KEYS;\\n    !!isReserved ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\\\\'t be on the \\\"statics\\\" key. Define it as an instance property instead; it will still be accessible on the constructor.', name) : _prodInvariant('78', name) : void 0;\\n\\n    var isInherited = name in Constructor;\\n    !!isInherited ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.', name) : _prodInvariant('79', name) : void 0;\\n    Constructor[name] = property;\\n  }\\n}\\n\\n/**\\n * Merge two objects, but throw if both contain the same key.\\n *\\n * @param {object} one The first object, which is mutated.\\n * @param {object} two The second object\\n * @return {object} one after it has been mutated to contain everything in two.\\n */\\nfunction mergeIntoWithNoDuplicateKeys(one, two) {\\n  !(one && two && typeof one === 'object' && typeof two === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : _prodInvariant('80') : void 0;\\n\\n  for (var key in two) {\\n    if (two.hasOwnProperty(key)) {\\n      !(one[key] === undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.', key) : _prodInvariant('81', key) : void 0;\\n      one[key] = two[key];\\n    }\\n  }\\n  return one;\\n}\\n\\n/**\\n * Creates a function that invokes two functions and merges their return values.\\n *\\n * @param {function} one Function to invoke first.\\n * @param {function} two Function to invoke second.\\n * @return {function} Function that invokes the two argument functions.\\n * @private\\n */\\nfunction createMergedResultFunction(one, two) {\\n  return function mergedResult() {\\n    var a = one.apply(this, arguments);\\n    var b = two.apply(this, arguments);\\n    if (a == null) {\\n      return b;\\n    } else if (b == null) {\\n      return a;\\n    }\\n    var c = {};\\n    mergeIntoWithNoDuplicateKeys(c, a);\\n    mergeIntoWithNoDuplicateKeys(c, b);\\n    return c;\\n  };\\n}\\n\\n/**\\n * Creates a function that invokes two functions and ignores their return vales.\\n *\\n * @param {function} one Function to invoke first.\\n * @param {function} two Function to invoke second.\\n * @return {function} Function that invokes the two argument functions.\\n * @private\\n */\\nfunction createChainedFunction(one, two) {\\n  return function chainedFunction() {\\n    one.apply(this, arguments);\\n    two.apply(this, arguments);\\n  };\\n}\\n\\n/**\\n * Binds a method to the component.\\n *\\n * @param {object} component Component whose method is going to be bound.\\n * @param {function} method Method to be bound.\\n * @return {function} The bound method.\\n */\\nfunction bindAutoBindMethod(component, method) {\\n  var boundMethod = method.bind(component);\\n  if (process.env.NODE_ENV !== 'production') {\\n    boundMethod.__reactBoundContext = component;\\n    boundMethod.__reactBoundMethod = method;\\n    boundMethod.__reactBoundArguments = null;\\n    var componentName = component.constructor.displayName;\\n    var _bind = boundMethod.bind;\\n    boundMethod.bind = function (newThis) {\\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\\n        args[_key - 1] = arguments[_key];\\n      }\\n\\n      // User is trying to bind() an autobound method; we effectively will\\n      // ignore the value of \\\"this\\\" that the user is trying to use, so\\n      // let's warn.\\n      if (newThis !== component && newThis !== null) {\\n        process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : void 0;\\n      } else if (!args.length) {\\n        process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : void 0;\\n        return boundMethod;\\n      }\\n      var reboundMethod = _bind.apply(boundMethod, arguments);\\n      reboundMethod.__reactBoundContext = component;\\n      reboundMethod.__reactBoundMethod = method;\\n      reboundMethod.__reactBoundArguments = args;\\n      return reboundMethod;\\n    };\\n  }\\n  return boundMethod;\\n}\\n\\n/**\\n * Binds all auto-bound methods in a component.\\n *\\n * @param {object} component Component whose method is going to be bound.\\n */\\nfunction bindAutoBindMethods(component) {\\n  var pairs = component.__reactAutoBindPairs;\\n  for (var i = 0; i < pairs.length; i += 2) {\\n    var autoBindKey = pairs[i];\\n    var method = pairs[i + 1];\\n    component[autoBindKey] = bindAutoBindMethod(component, method);\\n  }\\n}\\n\\n/**\\n * Add more to the ReactClass base class. These are all legacy features and\\n * therefore not already part of the modern ReactComponent.\\n */\\nvar ReactClassMixin = {\\n\\n  /**\\n   * TODO: This will be deprecated because state should always keep a consistent\\n   * type signature and the only use case for this, is to avoid that.\\n   */\\n  replaceState: function (newState, callback) {\\n    this.updater.enqueueReplaceState(this, newState);\\n    if (callback) {\\n      this.updater.enqueueCallback(this, callback, 'replaceState');\\n    }\\n  },\\n\\n  /**\\n   * Checks whether or not this composite component is mounted.\\n   * @return {boolean} True if mounted, false otherwise.\\n   * @protected\\n   * @final\\n   */\\n  isMounted: function () {\\n    return this.updater.isMounted(this);\\n  }\\n};\\n\\nvar ReactClassComponent = function () {};\\n_assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);\\n\\n/**\\n * Module for creating composite components.\\n *\\n * @class ReactClass\\n */\\nvar ReactClass = {\\n\\n  /**\\n   * Creates a composite component class given a class specification.\\n   * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass\\n   *\\n   * @param {object} spec Class specification (which must define `render`).\\n   * @return {function} Component constructor function.\\n   * @public\\n   */\\n  createClass: function (spec) {\\n    // To keep our warnings more understandable, we'll use a little hack here to\\n    // ensure that Constructor.name !== 'Constructor'. This makes sure we don't\\n    // unnecessarily identify a class without displayName as 'Constructor'.\\n    var Constructor = identity(function (props, context, updater) {\\n      // This constructor gets overridden by mocks. The argument is used\\n      // by mocks to assert on what gets mounted.\\n\\n      if (process.env.NODE_ENV !== 'production') {\\n        process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0;\\n      }\\n\\n      // Wire up auto-binding\\n      if (this.__reactAutoBindPairs.length) {\\n        bindAutoBindMethods(this);\\n      }\\n\\n      this.props = props;\\n      this.context = context;\\n      this.refs = emptyObject;\\n      this.updater = updater || ReactNoopUpdateQueue;\\n\\n      this.state = null;\\n\\n      // ReactClasses doesn't have constructors. Instead, they use the\\n      // getInitialState and componentWillMount methods for initialization.\\n\\n      var initialState = this.getInitialState ? this.getInitialState() : null;\\n      if (process.env.NODE_ENV !== 'production') {\\n        // We allow auto-mocks to proceed as if they're returning null.\\n        if (initialState === undefined && this.getInitialState._isMockFunction) {\\n          // This is probably bad practice. Consider warning here and\\n          // deprecating this convenience.\\n          initialState = null;\\n        }\\n      }\\n      !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : _prodInvariant('82', Constructor.displayName || 'ReactCompositeComponent') : void 0;\\n\\n      this.state = initialState;\\n    });\\n    Constructor.prototype = new ReactClassComponent();\\n    Constructor.prototype.constructor = Constructor;\\n    Constructor.prototype.__reactAutoBindPairs = [];\\n\\n    injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\\n\\n    mixSpecIntoComponent(Constructor, spec);\\n\\n    // Initialize the defaultProps property after all mixins have been merged.\\n    if (Constructor.getDefaultProps) {\\n      Constructor.defaultProps = Constructor.getDefaultProps();\\n    }\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      // This is a tag to indicate that the use of these method names is ok,\\n      // since it's used with createClass. If it's not, then it's likely a\\n      // mistake so we'll warn you to use the static property, property\\n      // initializer or constructor respectively.\\n      if (Constructor.getDefaultProps) {\\n        Constructor.getDefaultProps.isReactClassApproved = {};\\n      }\\n      if (Constructor.prototype.getInitialState) {\\n        Constructor.prototype.getInitialState.isReactClassApproved = {};\\n      }\\n    }\\n\\n    !Constructor.prototype.render ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : _prodInvariant('83') : void 0;\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : void 0;\\n      process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : void 0;\\n    }\\n\\n    // Reduce time spent doing lookups by setting these on the prototype.\\n    for (var methodName in ReactClassInterface) {\\n      if (!Constructor.prototype[methodName]) {\\n        Constructor.prototype[methodName] = null;\\n      }\\n    }\\n\\n    return Constructor;\\n  },\\n\\n  injection: {\\n    injectMixin: function (mixin) {\\n      injectedMixins.push(mixin);\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = ReactClass;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactClass.js\\n// module id = 22\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactClass.js?\");\n\n/***/ },\n/* 23 */\n/*!***************************************************!*\\\n  !*** ./~/react/lib/ReactPropTypeLocationNames.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar ReactPropTypeLocationNames = {};\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  ReactPropTypeLocationNames = {\\n    prop: 'prop',\\n    context: 'context',\\n    childContext: 'child context'\\n  };\\n}\\n\\nmodule.exports = ReactPropTypeLocationNames;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactPropTypeLocationNames.js\\n// module id = 23\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactPropTypeLocationNames.js?\");\n\n/***/ },\n/* 24 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/ReactDOMFactories.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\n\\n/**\\n * Create a factory that creates HTML tag elements.\\n *\\n * @private\\n */\\nvar createDOMFactory = ReactElement.createFactory;\\nif (process.env.NODE_ENV !== 'production') {\\n  var ReactElementValidator = __webpack_require__(/*! ./ReactElementValidator */ 25);\\n  createDOMFactory = ReactElementValidator.createFactory;\\n}\\n\\n/**\\n * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.\\n * This is also accessible via `React.DOM`.\\n *\\n * @public\\n */\\nvar ReactDOMFactories = {\\n  a: createDOMFactory('a'),\\n  abbr: createDOMFactory('abbr'),\\n  address: createDOMFactory('address'),\\n  area: createDOMFactory('area'),\\n  article: createDOMFactory('article'),\\n  aside: createDOMFactory('aside'),\\n  audio: createDOMFactory('audio'),\\n  b: createDOMFactory('b'),\\n  base: createDOMFactory('base'),\\n  bdi: createDOMFactory('bdi'),\\n  bdo: createDOMFactory('bdo'),\\n  big: createDOMFactory('big'),\\n  blockquote: createDOMFactory('blockquote'),\\n  body: createDOMFactory('body'),\\n  br: createDOMFactory('br'),\\n  button: createDOMFactory('button'),\\n  canvas: createDOMFactory('canvas'),\\n  caption: createDOMFactory('caption'),\\n  cite: createDOMFactory('cite'),\\n  code: createDOMFactory('code'),\\n  col: createDOMFactory('col'),\\n  colgroup: createDOMFactory('colgroup'),\\n  data: createDOMFactory('data'),\\n  datalist: createDOMFactory('datalist'),\\n  dd: createDOMFactory('dd'),\\n  del: createDOMFactory('del'),\\n  details: createDOMFactory('details'),\\n  dfn: createDOMFactory('dfn'),\\n  dialog: createDOMFactory('dialog'),\\n  div: createDOMFactory('div'),\\n  dl: createDOMFactory('dl'),\\n  dt: createDOMFactory('dt'),\\n  em: createDOMFactory('em'),\\n  embed: createDOMFactory('embed'),\\n  fieldset: createDOMFactory('fieldset'),\\n  figcaption: createDOMFactory('figcaption'),\\n  figure: createDOMFactory('figure'),\\n  footer: createDOMFactory('footer'),\\n  form: createDOMFactory('form'),\\n  h1: createDOMFactory('h1'),\\n  h2: createDOMFactory('h2'),\\n  h3: createDOMFactory('h3'),\\n  h4: createDOMFactory('h4'),\\n  h5: createDOMFactory('h5'),\\n  h6: createDOMFactory('h6'),\\n  head: createDOMFactory('head'),\\n  header: createDOMFactory('header'),\\n  hgroup: createDOMFactory('hgroup'),\\n  hr: createDOMFactory('hr'),\\n  html: createDOMFactory('html'),\\n  i: createDOMFactory('i'),\\n  iframe: createDOMFactory('iframe'),\\n  img: createDOMFactory('img'),\\n  input: createDOMFactory('input'),\\n  ins: createDOMFactory('ins'),\\n  kbd: createDOMFactory('kbd'),\\n  keygen: createDOMFactory('keygen'),\\n  label: createDOMFactory('label'),\\n  legend: createDOMFactory('legend'),\\n  li: createDOMFactory('li'),\\n  link: createDOMFactory('link'),\\n  main: createDOMFactory('main'),\\n  map: createDOMFactory('map'),\\n  mark: createDOMFactory('mark'),\\n  menu: createDOMFactory('menu'),\\n  menuitem: createDOMFactory('menuitem'),\\n  meta: createDOMFactory('meta'),\\n  meter: createDOMFactory('meter'),\\n  nav: createDOMFactory('nav'),\\n  noscript: createDOMFactory('noscript'),\\n  object: createDOMFactory('object'),\\n  ol: createDOMFactory('ol'),\\n  optgroup: createDOMFactory('optgroup'),\\n  option: createDOMFactory('option'),\\n  output: createDOMFactory('output'),\\n  p: createDOMFactory('p'),\\n  param: createDOMFactory('param'),\\n  picture: createDOMFactory('picture'),\\n  pre: createDOMFactory('pre'),\\n  progress: createDOMFactory('progress'),\\n  q: createDOMFactory('q'),\\n  rp: createDOMFactory('rp'),\\n  rt: createDOMFactory('rt'),\\n  ruby: createDOMFactory('ruby'),\\n  s: createDOMFactory('s'),\\n  samp: createDOMFactory('samp'),\\n  script: createDOMFactory('script'),\\n  section: createDOMFactory('section'),\\n  select: createDOMFactory('select'),\\n  small: createDOMFactory('small'),\\n  source: createDOMFactory('source'),\\n  span: createDOMFactory('span'),\\n  strong: createDOMFactory('strong'),\\n  style: createDOMFactory('style'),\\n  sub: createDOMFactory('sub'),\\n  summary: createDOMFactory('summary'),\\n  sup: createDOMFactory('sup'),\\n  table: createDOMFactory('table'),\\n  tbody: createDOMFactory('tbody'),\\n  td: createDOMFactory('td'),\\n  textarea: createDOMFactory('textarea'),\\n  tfoot: createDOMFactory('tfoot'),\\n  th: createDOMFactory('th'),\\n  thead: createDOMFactory('thead'),\\n  time: createDOMFactory('time'),\\n  title: createDOMFactory('title'),\\n  tr: createDOMFactory('tr'),\\n  track: createDOMFactory('track'),\\n  u: createDOMFactory('u'),\\n  ul: createDOMFactory('ul'),\\n  'var': createDOMFactory('var'),\\n  video: createDOMFactory('video'),\\n  wbr: createDOMFactory('wbr'),\\n\\n  // SVG\\n  circle: createDOMFactory('circle'),\\n  clipPath: createDOMFactory('clipPath'),\\n  defs: createDOMFactory('defs'),\\n  ellipse: createDOMFactory('ellipse'),\\n  g: createDOMFactory('g'),\\n  image: createDOMFactory('image'),\\n  line: createDOMFactory('line'),\\n  linearGradient: createDOMFactory('linearGradient'),\\n  mask: createDOMFactory('mask'),\\n  path: createDOMFactory('path'),\\n  pattern: createDOMFactory('pattern'),\\n  polygon: createDOMFactory('polygon'),\\n  polyline: createDOMFactory('polyline'),\\n  radialGradient: createDOMFactory('radialGradient'),\\n  rect: createDOMFactory('rect'),\\n  stop: createDOMFactory('stop'),\\n  svg: createDOMFactory('svg'),\\n  text: createDOMFactory('text'),\\n  tspan: createDOMFactory('tspan')\\n};\\n\\nmodule.exports = ReactDOMFactories;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactDOMFactories.js\\n// module id = 24\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMFactories.js?\");\n\n/***/ },\n/* 25 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/ReactElementValidator.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n/**\\n * ReactElementValidator provides a wrapper around a element factory\\n * which validates the props passed to the element. This is intended to be\\n * used only in DEV and could be replaced by a static type checker for languages\\n * that support it.\\n */\\n\\n'use strict';\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 10);\\nvar ReactComponentTreeHook = __webpack_require__(/*! ./ReactComponentTreeHook */ 26);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\n\\nvar checkReactTypeSpec = __webpack_require__(/*! ./checkReactTypeSpec */ 27);\\n\\nvar canDefineProperty = __webpack_require__(/*! ./canDefineProperty */ 13);\\nvar getIteratorFn = __webpack_require__(/*! ./getIteratorFn */ 16);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nfunction getDeclarationErrorAddendum() {\\n  if (ReactCurrentOwner.current) {\\n    var name = ReactCurrentOwner.current.getName();\\n    if (name) {\\n      return ' Check the render method of `' + name + '`.';\\n    }\\n  }\\n  return '';\\n}\\n\\n/**\\n * Warn if there's no key explicitly set on dynamic arrays of children or\\n * object keys are not valid. This allows us to keep track of children between\\n * updates.\\n */\\nvar ownerHasKeyUseWarning = {};\\n\\nfunction getCurrentComponentErrorInfo(parentType) {\\n  var info = getDeclarationErrorAddendum();\\n\\n  if (!info) {\\n    var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\\n    if (parentName) {\\n      info = ' Check the top-level render call using <' + parentName + '>.';\\n    }\\n  }\\n  return info;\\n}\\n\\n/**\\n * Warn if the element doesn't have an explicit key assigned to it.\\n * This element is in an array. The array could grow and shrink or be\\n * reordered. All children that haven't already been validated are required to\\n * have a \\\"key\\\" property assigned to it. Error statuses are cached so a warning\\n * will only be shown once.\\n *\\n * @internal\\n * @param {ReactElement} element Element that requires a key.\\n * @param {*} parentType element's parent's type.\\n */\\nfunction validateExplicitKey(element, parentType) {\\n  if (!element._store || element._store.validated || element.key != null) {\\n    return;\\n  }\\n  element._store.validated = true;\\n\\n  var memoizer = ownerHasKeyUseWarning.uniqueKey || (ownerHasKeyUseWarning.uniqueKey = {});\\n\\n  var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\\n  if (memoizer[currentComponentErrorInfo]) {\\n    return;\\n  }\\n  memoizer[currentComponentErrorInfo] = true;\\n\\n  // Usually the current owner is the offender, but if it accepts children as a\\n  // property, it may be the creator of the child that's responsible for\\n  // assigning it a key.\\n  var childOwner = '';\\n  if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\\n    // Give the component that originally created this child.\\n    childOwner = ' It was passed a child from ' + element._owner.getName() + '.';\\n  }\\n\\n  process.env.NODE_ENV !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique \\\"key\\\" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.%s', currentComponentErrorInfo, childOwner, ReactComponentTreeHook.getCurrentStackAddendum(element)) : void 0;\\n}\\n\\n/**\\n * Ensure that every element either is passed in a static location, in an\\n * array with an explicit keys property defined, or in an object literal\\n * with valid key property.\\n *\\n * @internal\\n * @param {ReactNode} node Statically passed child of any type.\\n * @param {*} parentType node's parent's type.\\n */\\nfunction validateChildKeys(node, parentType) {\\n  if (typeof node !== 'object') {\\n    return;\\n  }\\n  if (Array.isArray(node)) {\\n    for (var i = 0; i < node.length; i++) {\\n      var child = node[i];\\n      if (ReactElement.isValidElement(child)) {\\n        validateExplicitKey(child, parentType);\\n      }\\n    }\\n  } else if (ReactElement.isValidElement(node)) {\\n    // This element was passed in a valid location.\\n    if (node._store) {\\n      node._store.validated = true;\\n    }\\n  } else if (node) {\\n    var iteratorFn = getIteratorFn(node);\\n    // Entry iterators provide implicit keys.\\n    if (iteratorFn) {\\n      if (iteratorFn !== node.entries) {\\n        var iterator = iteratorFn.call(node);\\n        var step;\\n        while (!(step = iterator.next()).done) {\\n          if (ReactElement.isValidElement(step.value)) {\\n            validateExplicitKey(step.value, parentType);\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\n\\n/**\\n * Given an element, validate that its props follow the propTypes definition,\\n * provided by the type.\\n *\\n * @param {ReactElement} element\\n */\\nfunction validatePropTypes(element) {\\n  var componentClass = element.type;\\n  if (typeof componentClass !== 'function') {\\n    return;\\n  }\\n  var name = componentClass.displayName || componentClass.name;\\n  if (componentClass.propTypes) {\\n    checkReactTypeSpec(componentClass.propTypes, element.props, 'prop', name, element, null);\\n  }\\n  if (typeof componentClass.getDefaultProps === 'function') {\\n    process.env.NODE_ENV !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : void 0;\\n  }\\n}\\n\\nvar ReactElementValidator = {\\n\\n  createElement: function (type, props, children) {\\n    var validType = typeof type === 'string' || typeof type === 'function';\\n    // We warn in this case but don't throw. We expect the element creation to\\n    // succeed and there will likely be errors in render.\\n    if (!validType) {\\n      process.env.NODE_ENV !== 'production' ? warning(false, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : void 0;\\n    }\\n\\n    var element = ReactElement.createElement.apply(this, arguments);\\n\\n    // The result can be nullish if a mock or a custom function is used.\\n    // TODO: Drop this when these are no longer allowed as the type argument.\\n    if (element == null) {\\n      return element;\\n    }\\n\\n    // Skip key warning if the type isn't valid since our key validation logic\\n    // doesn't expect a non-string/function type and can throw confusing errors.\\n    // We don't want exception behavior to differ between dev and prod.\\n    // (Rendering will throw with a helpful message and as soon as the type is\\n    // fixed, the key warnings will appear.)\\n    if (validType) {\\n      for (var i = 2; i < arguments.length; i++) {\\n        validateChildKeys(arguments[i], type);\\n      }\\n    }\\n\\n    validatePropTypes(element);\\n\\n    return element;\\n  },\\n\\n  createFactory: function (type) {\\n    var validatedFactory = ReactElementValidator.createElement.bind(null, type);\\n    // Legacy hook TODO: Warn if this is accessed\\n    validatedFactory.type = type;\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (canDefineProperty) {\\n        Object.defineProperty(validatedFactory, 'type', {\\n          enumerable: false,\\n          get: function () {\\n            process.env.NODE_ENV !== 'production' ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : void 0;\\n            Object.defineProperty(this, 'type', {\\n              value: type\\n            });\\n            return type;\\n          }\\n        });\\n      }\\n    }\\n\\n    return validatedFactory;\\n  },\\n\\n  cloneElement: function (element, props, children) {\\n    var newElement = ReactElement.cloneElement.apply(this, arguments);\\n    for (var i = 2; i < arguments.length; i++) {\\n      validateChildKeys(arguments[i], newElement.type);\\n    }\\n    validatePropTypes(newElement);\\n    return newElement;\\n  }\\n\\n};\\n\\nmodule.exports = ReactElementValidator;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactElementValidator.js\\n// module id = 25\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactElementValidator.js?\");\n\n/***/ },\n/* 26 */\n/*!***********************************************!*\\\n  !*** ./~/react/lib/ReactComponentTreeHook.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2016-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 10);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nfunction isNative(fn) {\\n  // Based on isNative() from Lodash\\n  var funcToString = Function.prototype.toString;\\n  var hasOwnProperty = Object.prototype.hasOwnProperty;\\n  var reIsNative = RegExp('^' + funcToString\\n  // Take an example native function source for comparison\\n  .call(hasOwnProperty)\\n  // Strip regex characters so we can use it for regex\\n  .replace(/[\\\\\\\\^$.*+?()[\\\\]{}|]/g, '\\\\\\\\$&')\\n  // Remove hasOwnProperty from the template to make it generic\\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\\\\\\\()| for .+?(?=\\\\\\\\\\\\])/g, '$1.*?') + '$');\\n  try {\\n    var source = funcToString.call(fn);\\n    return reIsNative.test(source);\\n  } catch (err) {\\n    return false;\\n  }\\n}\\n\\nvar canUseCollections =\\n// Array.from\\ntypeof Array.from === 'function' &&\\n// Map\\ntypeof Map === 'function' && isNative(Map) &&\\n// Map.prototype.keys\\nMap.prototype != null && typeof Map.prototype.keys === 'function' && isNative(Map.prototype.keys) &&\\n// Set\\ntypeof Set === 'function' && isNative(Set) &&\\n// Set.prototype.keys\\nSet.prototype != null && typeof Set.prototype.keys === 'function' && isNative(Set.prototype.keys);\\n\\nvar setItem;\\nvar getItem;\\nvar removeItem;\\nvar getItemIDs;\\nvar addRoot;\\nvar removeRoot;\\nvar getRootIDs;\\n\\nif (canUseCollections) {\\n  var itemMap = new Map();\\n  var rootIDSet = new Set();\\n\\n  setItem = function (id, item) {\\n    itemMap.set(id, item);\\n  };\\n  getItem = function (id) {\\n    return itemMap.get(id);\\n  };\\n  removeItem = function (id) {\\n    itemMap['delete'](id);\\n  };\\n  getItemIDs = function () {\\n    return Array.from(itemMap.keys());\\n  };\\n\\n  addRoot = function (id) {\\n    rootIDSet.add(id);\\n  };\\n  removeRoot = function (id) {\\n    rootIDSet['delete'](id);\\n  };\\n  getRootIDs = function () {\\n    return Array.from(rootIDSet.keys());\\n  };\\n} else {\\n  var itemByKey = {};\\n  var rootByKey = {};\\n\\n  // Use non-numeric keys to prevent V8 performance issues:\\n  // https://github.com/facebook/react/pull/7232\\n  var getKeyFromID = function (id) {\\n    return '.' + id;\\n  };\\n  var getIDFromKey = function (key) {\\n    return parseInt(key.substr(1), 10);\\n  };\\n\\n  setItem = function (id, item) {\\n    var key = getKeyFromID(id);\\n    itemByKey[key] = item;\\n  };\\n  getItem = function (id) {\\n    var key = getKeyFromID(id);\\n    return itemByKey[key];\\n  };\\n  removeItem = function (id) {\\n    var key = getKeyFromID(id);\\n    delete itemByKey[key];\\n  };\\n  getItemIDs = function () {\\n    return Object.keys(itemByKey).map(getIDFromKey);\\n  };\\n\\n  addRoot = function (id) {\\n    var key = getKeyFromID(id);\\n    rootByKey[key] = true;\\n  };\\n  removeRoot = function (id) {\\n    var key = getKeyFromID(id);\\n    delete rootByKey[key];\\n  };\\n  getRootIDs = function () {\\n    return Object.keys(rootByKey).map(getIDFromKey);\\n  };\\n}\\n\\nvar unmountedIDs = [];\\n\\nfunction purgeDeep(id) {\\n  var item = getItem(id);\\n  if (item) {\\n    var childIDs = item.childIDs;\\n\\n    removeItem(id);\\n    childIDs.forEach(purgeDeep);\\n  }\\n}\\n\\nfunction describeComponentFrame(name, source, ownerName) {\\n  return '\\\\n    in ' + (name || 'Unknown') + (source ? ' (at ' + source.fileName.replace(/^.*[\\\\\\\\\\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : '');\\n}\\n\\nfunction getDisplayName(element) {\\n  if (element == null) {\\n    return '#empty';\\n  } else if (typeof element === 'string' || typeof element === 'number') {\\n    return '#text';\\n  } else if (typeof element.type === 'string') {\\n    return element.type;\\n  } else {\\n    return element.type.displayName || element.type.name || 'Unknown';\\n  }\\n}\\n\\nfunction describeID(id) {\\n  var name = ReactComponentTreeHook.getDisplayName(id);\\n  var element = ReactComponentTreeHook.getElement(id);\\n  var ownerID = ReactComponentTreeHook.getOwnerID(id);\\n  var ownerName;\\n  if (ownerID) {\\n    ownerName = ReactComponentTreeHook.getDisplayName(ownerID);\\n  }\\n  process.env.NODE_ENV !== 'production' ? warning(element, 'ReactComponentTreeHook: Missing React element for debugID %s when ' + 'building stack', id) : void 0;\\n  return describeComponentFrame(name, element && element._source, ownerName);\\n}\\n\\nvar ReactComponentTreeHook = {\\n  onSetChildren: function (id, nextChildIDs) {\\n    var item = getItem(id);\\n    !item ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Item must have been set') : _prodInvariant('144') : void 0;\\n    item.childIDs = nextChildIDs;\\n\\n    for (var i = 0; i < nextChildIDs.length; i++) {\\n      var nextChildID = nextChildIDs[i];\\n      var nextChild = getItem(nextChildID);\\n      !nextChild ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected hook events to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('140') : void 0;\\n      !(nextChild.childIDs != null || typeof nextChild.element !== 'object' || nextChild.element == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onSetChildren() to fire for a container child before its parent includes it in onSetChildren().') : _prodInvariant('141') : void 0;\\n      !nextChild.isMounted ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onMountComponent() to fire for the child before its parent includes it in onSetChildren().') : _prodInvariant('71') : void 0;\\n      if (nextChild.parentID == null) {\\n        nextChild.parentID = id;\\n        // TODO: This shouldn't be necessary but mounting a new root during in\\n        // componentWillMount currently causes not-yet-mounted components to\\n        // be purged from our tree data so their parent id is missing.\\n      }\\n      !(nextChild.parentID === id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected onBeforeMountComponent() parent and onSetChildren() to be consistent (%s has parents %s and %s).', nextChildID, nextChild.parentID, id) : _prodInvariant('142', nextChildID, nextChild.parentID, id) : void 0;\\n    }\\n  },\\n  onBeforeMountComponent: function (id, element, parentID) {\\n    var item = {\\n      element: element,\\n      parentID: parentID,\\n      text: null,\\n      childIDs: [],\\n      isMounted: false,\\n      updateCount: 0\\n    };\\n    setItem(id, item);\\n  },\\n  onBeforeUpdateComponent: function (id, element) {\\n    var item = getItem(id);\\n    if (!item || !item.isMounted) {\\n      // We may end up here as a result of setState() in componentWillUnmount().\\n      // In this case, ignore the element.\\n      return;\\n    }\\n    item.element = element;\\n  },\\n  onMountComponent: function (id) {\\n    var item = getItem(id);\\n    !item ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Item must have been set') : _prodInvariant('144') : void 0;\\n    item.isMounted = true;\\n    var isRoot = item.parentID === 0;\\n    if (isRoot) {\\n      addRoot(id);\\n    }\\n  },\\n  onUpdateComponent: function (id) {\\n    var item = getItem(id);\\n    if (!item || !item.isMounted) {\\n      // We may end up here as a result of setState() in componentWillUnmount().\\n      // In this case, ignore the element.\\n      return;\\n    }\\n    item.updateCount++;\\n  },\\n  onUnmountComponent: function (id) {\\n    var item = getItem(id);\\n    if (item) {\\n      // We need to check if it exists.\\n      // `item` might not exist if it is inside an error boundary, and a sibling\\n      // error boundary child threw while mounting. Then this instance never\\n      // got a chance to mount, but it still gets an unmounting event during\\n      // the error boundary cleanup.\\n      item.isMounted = false;\\n      var isRoot = item.parentID === 0;\\n      if (isRoot) {\\n        removeRoot(id);\\n      }\\n    }\\n    unmountedIDs.push(id);\\n  },\\n  purgeUnmountedComponents: function () {\\n    if (ReactComponentTreeHook._preventPurging) {\\n      // Should only be used for testing.\\n      return;\\n    }\\n\\n    for (var i = 0; i < unmountedIDs.length; i++) {\\n      var id = unmountedIDs[i];\\n      purgeDeep(id);\\n    }\\n    unmountedIDs.length = 0;\\n  },\\n  isMounted: function (id) {\\n    var item = getItem(id);\\n    return item ? item.isMounted : false;\\n  },\\n  getCurrentStackAddendum: function (topElement) {\\n    var info = '';\\n    if (topElement) {\\n      var name = getDisplayName(topElement);\\n      var owner = topElement._owner;\\n      info += describeComponentFrame(name, topElement._source, owner && owner.getName());\\n    }\\n\\n    var currentOwner = ReactCurrentOwner.current;\\n    var id = currentOwner && currentOwner._debugID;\\n\\n    info += ReactComponentTreeHook.getStackAddendumByID(id);\\n    return info;\\n  },\\n  getStackAddendumByID: function (id) {\\n    var info = '';\\n    while (id) {\\n      info += describeID(id);\\n      id = ReactComponentTreeHook.getParentID(id);\\n    }\\n    return info;\\n  },\\n  getChildIDs: function (id) {\\n    var item = getItem(id);\\n    return item ? item.childIDs : [];\\n  },\\n  getDisplayName: function (id) {\\n    var element = ReactComponentTreeHook.getElement(id);\\n    if (!element) {\\n      return null;\\n    }\\n    return getDisplayName(element);\\n  },\\n  getElement: function (id) {\\n    var item = getItem(id);\\n    return item ? item.element : null;\\n  },\\n  getOwnerID: function (id) {\\n    var element = ReactComponentTreeHook.getElement(id);\\n    if (!element || !element._owner) {\\n      return null;\\n    }\\n    return element._owner._debugID;\\n  },\\n  getParentID: function (id) {\\n    var item = getItem(id);\\n    return item ? item.parentID : null;\\n  },\\n  getSource: function (id) {\\n    var item = getItem(id);\\n    var element = item ? item.element : null;\\n    var source = element != null ? element._source : null;\\n    return source;\\n  },\\n  getText: function (id) {\\n    var element = ReactComponentTreeHook.getElement(id);\\n    if (typeof element === 'string') {\\n      return element;\\n    } else if (typeof element === 'number') {\\n      return '' + element;\\n    } else {\\n      return null;\\n    }\\n  },\\n  getUpdateCount: function (id) {\\n    var item = getItem(id);\\n    return item ? item.updateCount : 0;\\n  },\\n\\n\\n  getRootIDs: getRootIDs,\\n  getRegisteredIDs: getItemIDs\\n};\\n\\nmodule.exports = ReactComponentTreeHook;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactComponentTreeHook.js\\n// module id = 26\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactComponentTreeHook.js?\");\n\n/***/ },\n/* 27 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/checkReactTypeSpec.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar ReactPropTypeLocationNames = __webpack_require__(/*! ./ReactPropTypeLocationNames */ 23);\\nvar ReactPropTypesSecret = __webpack_require__(/*! ./ReactPropTypesSecret */ 28);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar ReactComponentTreeHook;\\n\\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {\\n  // Temporary hack.\\n  // Inline requires don't work well with Jest:\\n  // https://github.com/facebook/react/issues/7240\\n  // Remove the inline requires when we don't need them anymore:\\n  // https://github.com/facebook/react/pull/7178\\n  ReactComponentTreeHook = __webpack_require__(/*! ./ReactComponentTreeHook */ 26);\\n}\\n\\nvar loggedTypeFailures = {};\\n\\n/**\\n * Assert that the values match with the type specs.\\n * Error messages are memorized and will only be shown once.\\n *\\n * @param {object} typeSpecs Map of name to a ReactPropType\\n * @param {object} values Runtime values that need to be type-checked\\n * @param {string} location e.g. \\\"prop\\\", \\\"context\\\", \\\"child context\\\"\\n * @param {string} componentName Name of the component for error messages.\\n * @param {?object} element The React element that is being type-checked\\n * @param {?number} debugID The React component instance that is being type-checked\\n * @private\\n */\\nfunction checkReactTypeSpec(typeSpecs, values, location, componentName, element, debugID) {\\n  for (var typeSpecName in typeSpecs) {\\n    if (typeSpecs.hasOwnProperty(typeSpecName)) {\\n      var error;\\n      // Prop type validation may throw. In case they do, we don't want to\\n      // fail the render phase where it didn't fail before. So we log it.\\n      // After these have been cleaned up, we'll let them throw.\\n      try {\\n        // This is intentionally an invariant that gets caught. It's the same\\n        // behavior as without this statement except with a better message.\\n        !(typeof typeSpecs[typeSpecName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : _prodInvariant('84', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : void 0;\\n        error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\\n      } catch (ex) {\\n        error = ex;\\n      }\\n      process.env.NODE_ENV !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName, typeof error) : void 0;\\n      if (error instanceof Error && !(error.message in loggedTypeFailures)) {\\n        // Only monitor this failure once because there tends to be a lot of the\\n        // same error.\\n        loggedTypeFailures[error.message] = true;\\n\\n        var componentStackInfo = '';\\n\\n        if (process.env.NODE_ENV !== 'production') {\\n          if (!ReactComponentTreeHook) {\\n            ReactComponentTreeHook = __webpack_require__(/*! ./ReactComponentTreeHook */ 26);\\n          }\\n          if (debugID !== null) {\\n            componentStackInfo = ReactComponentTreeHook.getStackAddendumByID(debugID);\\n          } else if (element !== null) {\\n            componentStackInfo = ReactComponentTreeHook.getCurrentStackAddendum(element);\\n          }\\n        }\\n\\n        process.env.NODE_ENV !== 'production' ? warning(false, 'Failed %s type: %s%s', location, error.message, componentStackInfo) : void 0;\\n      }\\n    }\\n  }\\n}\\n\\nmodule.exports = checkReactTypeSpec;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/checkReactTypeSpec.js\\n// module id = 27\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/checkReactTypeSpec.js?\");\n\n/***/ },\n/* 28 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ReactPropTypesSecret.js ***!\n  \\*********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\\n\\nmodule.exports = ReactPropTypesSecret;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactPropTypesSecret.js\\n// module id = 28\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactPropTypesSecret.js?\");\n\n/***/ },\n/* 29 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactPropTypes.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\nvar ReactPropTypeLocationNames = __webpack_require__(/*! ./ReactPropTypeLocationNames */ 23);\\nvar ReactPropTypesSecret = __webpack_require__(/*! ./ReactPropTypesSecret */ 28);\\n\\nvar emptyFunction = __webpack_require__(/*! fbjs/lib/emptyFunction */ 12);\\nvar getIteratorFn = __webpack_require__(/*! ./getIteratorFn */ 16);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\n/**\\n * Collection of methods that allow declaration and validation of props that are\\n * supplied to React components. Example usage:\\n *\\n *   var Props = require('ReactPropTypes');\\n *   var MyArticle = React.createClass({\\n *     propTypes: {\\n *       // An optional string prop named \\\"description\\\".\\n *       description: Props.string,\\n *\\n *       // A required enum prop named \\\"category\\\".\\n *       category: Props.oneOf(['News','Photos']).isRequired,\\n *\\n *       // A prop named \\\"dialog\\\" that requires an instance of Dialog.\\n *       dialog: Props.instanceOf(Dialog).isRequired\\n *     },\\n *     render: function() { ... }\\n *   });\\n *\\n * A more formal specification of how these methods are used:\\n *\\n *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\\n *   decl := ReactPropTypes.{type}(.isRequired)?\\n *\\n * Each and every declaration produces a function with the same signature. This\\n * allows the creation of custom validation functions. For example:\\n *\\n *  var MyLink = React.createClass({\\n *    propTypes: {\\n *      // An optional string or URI prop named \\\"href\\\".\\n *      href: function(props, propName, componentName) {\\n *        var propValue = props[propName];\\n *        if (propValue != null && typeof propValue !== 'string' &&\\n *            !(propValue instanceof URI)) {\\n *          return new Error(\\n *            'Expected a string or an URI for ' + propName + ' in ' +\\n *            componentName\\n *          );\\n *        }\\n *      }\\n *    },\\n *    render: function() {...}\\n *  });\\n *\\n * @internal\\n */\\n\\nvar ANONYMOUS = '<<anonymous>>';\\n\\nvar ReactPropTypes = {\\n  array: createPrimitiveTypeChecker('array'),\\n  bool: createPrimitiveTypeChecker('boolean'),\\n  func: createPrimitiveTypeChecker('function'),\\n  number: createPrimitiveTypeChecker('number'),\\n  object: createPrimitiveTypeChecker('object'),\\n  string: createPrimitiveTypeChecker('string'),\\n  symbol: createPrimitiveTypeChecker('symbol'),\\n\\n  any: createAnyTypeChecker(),\\n  arrayOf: createArrayOfTypeChecker,\\n  element: createElementTypeChecker(),\\n  instanceOf: createInstanceTypeChecker,\\n  node: createNodeChecker(),\\n  objectOf: createObjectOfTypeChecker,\\n  oneOf: createEnumTypeChecker,\\n  oneOfType: createUnionTypeChecker,\\n  shape: createShapeTypeChecker\\n};\\n\\n/**\\n * inlined Object.is polyfill to avoid requiring consumers ship their own\\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\\n */\\n/*eslint-disable no-self-compare*/\\nfunction is(x, y) {\\n  // SameValue algorithm\\n  if (x === y) {\\n    // Steps 1-5, 7-10\\n    // Steps 6.b-6.e: +0 != -0\\n    return x !== 0 || 1 / x === 1 / y;\\n  } else {\\n    // Step 6.a: NaN == NaN\\n    return x !== x && y !== y;\\n  }\\n}\\n/*eslint-enable no-self-compare*/\\n\\n/**\\n * We use an Error-like object for backward compatibility as people may call\\n * PropTypes directly and inspect their output. However we don't use real\\n * Errors anymore. We don't inspect their stack anyway, and creating them\\n * is prohibitively expensive if they are created too often, such as what\\n * happens in oneOfType() for any type before the one that matched.\\n */\\nfunction PropTypeError(message) {\\n  this.message = message;\\n  this.stack = '';\\n}\\n// Make `instanceof Error` still work for returned errors.\\nPropTypeError.prototype = Error.prototype;\\n\\nfunction createChainableTypeChecker(validate) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    var manualPropTypeCallCache = {};\\n  }\\n  function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\\n    componentName = componentName || ANONYMOUS;\\n    propFullName = propFullName || propName;\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (secret !== ReactPropTypesSecret && typeof console !== 'undefined') {\\n        var cacheKey = componentName + ':' + propName;\\n        if (!manualPropTypeCallCache[cacheKey]) {\\n          process.env.NODE_ENV !== 'production' ? warning(false, 'You are manually calling a React.PropTypes validation ' + 'function for the `%s` prop on `%s`. This is deprecated ' + 'and will not work in production with the next major version. ' + 'You may be seeing this warning due to a third-party PropTypes ' + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.', propFullName, componentName) : void 0;\\n          manualPropTypeCallCache[cacheKey] = true;\\n        }\\n      }\\n    }\\n    if (props[propName] == null) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      if (isRequired) {\\n        if (props[propName] === null) {\\n          return new PropTypeError('The ' + locationName + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\\n        }\\n        return new PropTypeError('The ' + locationName + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\\n      }\\n      return null;\\n    } else {\\n      return validate(props, propName, componentName, location, propFullName);\\n    }\\n  }\\n\\n  var chainedCheckType = checkType.bind(null, false);\\n  chainedCheckType.isRequired = checkType.bind(null, true);\\n\\n  return chainedCheckType;\\n}\\n\\nfunction createPrimitiveTypeChecker(expectedType) {\\n  function validate(props, propName, componentName, location, propFullName, secret) {\\n    var propValue = props[propName];\\n    var propType = getPropType(propValue);\\n    if (propType !== expectedType) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      // `propValue` being instance of, say, date/regexp, pass the 'object'\\n      // check, but we can offer a more precise error message here rather than\\n      // 'of type `object`'.\\n      var preciseType = getPreciseType(propValue);\\n\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createAnyTypeChecker() {\\n  return createChainableTypeChecker(emptyFunction.thatReturns(null));\\n}\\n\\nfunction createArrayOfTypeChecker(typeChecker) {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    if (typeof typeChecker !== 'function') {\\n      return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\\n    }\\n    var propValue = props[propName];\\n    if (!Array.isArray(propValue)) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      var propType = getPropType(propValue);\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\\n    }\\n    for (var i = 0; i < propValue.length; i++) {\\n      var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\\n      if (error instanceof Error) {\\n        return error;\\n      }\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createElementTypeChecker() {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    var propValue = props[propName];\\n    if (!ReactElement.isValidElement(propValue)) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      var propType = getPropType(propValue);\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createInstanceTypeChecker(expectedClass) {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    if (!(props[propName] instanceof expectedClass)) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      var expectedClassName = expectedClass.name || ANONYMOUS;\\n      var actualClassName = getClassName(props[propName]);\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createEnumTypeChecker(expectedValues) {\\n  if (!Array.isArray(expectedValues)) {\\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0;\\n    return emptyFunction.thatReturnsNull;\\n  }\\n\\n  function validate(props, propName, componentName, location, propFullName) {\\n    var propValue = props[propName];\\n    for (var i = 0; i < expectedValues.length; i++) {\\n      if (is(propValue, expectedValues[i])) {\\n        return null;\\n      }\\n    }\\n\\n    var locationName = ReactPropTypeLocationNames[location];\\n    var valuesString = JSON.stringify(expectedValues);\\n    return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createObjectOfTypeChecker(typeChecker) {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    if (typeof typeChecker !== 'function') {\\n      return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\\n    }\\n    var propValue = props[propName];\\n    var propType = getPropType(propValue);\\n    if (propType !== 'object') {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\\n    }\\n    for (var key in propValue) {\\n      if (propValue.hasOwnProperty(key)) {\\n        var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\\n        if (error instanceof Error) {\\n          return error;\\n        }\\n      }\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createUnionTypeChecker(arrayOfTypeCheckers) {\\n  if (!Array.isArray(arrayOfTypeCheckers)) {\\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\\n    return emptyFunction.thatReturnsNull;\\n  }\\n\\n  function validate(props, propName, componentName, location, propFullName) {\\n    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\\n      var checker = arrayOfTypeCheckers[i];\\n      if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\\n        return null;\\n      }\\n    }\\n\\n    var locationName = ReactPropTypeLocationNames[location];\\n    return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createNodeChecker() {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    if (!isNode(props[propName])) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createShapeTypeChecker(shapeTypes) {\\n  function validate(props, propName, componentName, location, propFullName) {\\n    var propValue = props[propName];\\n    var propType = getPropType(propValue);\\n    if (propType !== 'object') {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      return new PropTypeError('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\\n    }\\n    for (var key in shapeTypes) {\\n      var checker = shapeTypes[key];\\n      if (!checker) {\\n        continue;\\n      }\\n      var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\\n      if (error) {\\n        return error;\\n      }\\n    }\\n    return null;\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction isNode(propValue) {\\n  switch (typeof propValue) {\\n    case 'number':\\n    case 'string':\\n    case 'undefined':\\n      return true;\\n    case 'boolean':\\n      return !propValue;\\n    case 'object':\\n      if (Array.isArray(propValue)) {\\n        return propValue.every(isNode);\\n      }\\n      if (propValue === null || ReactElement.isValidElement(propValue)) {\\n        return true;\\n      }\\n\\n      var iteratorFn = getIteratorFn(propValue);\\n      if (iteratorFn) {\\n        var iterator = iteratorFn.call(propValue);\\n        var step;\\n        if (iteratorFn !== propValue.entries) {\\n          while (!(step = iterator.next()).done) {\\n            if (!isNode(step.value)) {\\n              return false;\\n            }\\n          }\\n        } else {\\n          // Iterator will provide entry [k,v] tuples rather than values.\\n          while (!(step = iterator.next()).done) {\\n            var entry = step.value;\\n            if (entry) {\\n              if (!isNode(entry[1])) {\\n                return false;\\n              }\\n            }\\n          }\\n        }\\n      } else {\\n        return false;\\n      }\\n\\n      return true;\\n    default:\\n      return false;\\n  }\\n}\\n\\nfunction isSymbol(propType, propValue) {\\n  // Native Symbol.\\n  if (propType === 'symbol') {\\n    return true;\\n  }\\n\\n  // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\\n  if (propValue['@@toStringTag'] === 'Symbol') {\\n    return true;\\n  }\\n\\n  // Fallback for non-spec compliant Symbols which are polyfilled.\\n  if (typeof Symbol === 'function' && propValue instanceof Symbol) {\\n    return true;\\n  }\\n\\n  return false;\\n}\\n\\n// Equivalent of `typeof` but with special handling for array and regexp.\\nfunction getPropType(propValue) {\\n  var propType = typeof propValue;\\n  if (Array.isArray(propValue)) {\\n    return 'array';\\n  }\\n  if (propValue instanceof RegExp) {\\n    // Old webkits (at least until Android 4.0) return 'function' rather than\\n    // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\\n    // passes PropTypes.object.\\n    return 'object';\\n  }\\n  if (isSymbol(propType, propValue)) {\\n    return 'symbol';\\n  }\\n  return propType;\\n}\\n\\n// This handles more types than `getPropType`. Only used for error messages.\\n// See `createPrimitiveTypeChecker`.\\nfunction getPreciseType(propValue) {\\n  var propType = getPropType(propValue);\\n  if (propType === 'object') {\\n    if (propValue instanceof Date) {\\n      return 'date';\\n    } else if (propValue instanceof RegExp) {\\n      return 'regexp';\\n    }\\n  }\\n  return propType;\\n}\\n\\n// Returns class name of the object, if any.\\nfunction getClassName(propValue) {\\n  if (!propValue.constructor || !propValue.constructor.name) {\\n    return ANONYMOUS;\\n  }\\n  return propValue.constructor.name;\\n}\\n\\nmodule.exports = ReactPropTypes;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactPropTypes.js\\n// module id = 29\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactPropTypes.js?\");\n\n/***/ },\n/* 30 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/ReactVersion.js ***!\n  \\*************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nmodule.exports = '15.4.1';\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/ReactVersion.js\\n// module id = 30\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/ReactVersion.js?\");\n\n/***/ },\n/* 31 */\n/*!**********************************!*\\\n  !*** ./~/react/lib/onlyChild.js ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 7);\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 9);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\n/**\\n * Returns the first child in a collection of children and verifies that there\\n * is only one child in the collection.\\n *\\n * See https://facebook.github.io/react/docs/top-level-api.html#react.children.only\\n *\\n * The current implementation of this function assumes that a single child gets\\n * passed without a wrapper, but the purpose of this helper function is to\\n * abstract away the particular structure of children.\\n *\\n * @param {?object} children Child collection structure.\\n * @return {ReactElement} The first and only `ReactElement` contained in the\\n * structure.\\n */\\nfunction onlyChild(children) {\\n  !ReactElement.isValidElement(children) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'React.Children.only expected to receive a single React element child.') : _prodInvariant('143') : void 0;\\n  return children;\\n}\\n\\nmodule.exports = onlyChild;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react/lib/onlyChild.js\\n// module id = 31\\n// module chunks = 0 1 2\\n//# sourceURL=webpack:///./~/react/lib/onlyChild.js?\");\n\n/***/ },\n/* 32 */\n/*!****************************!*\\\n  !*** ./~/lodash/lodash.js ***!\n  \\****************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global, module) {/**\\n * @license\\n * Lodash <https://lodash.com/>\\n * Copyright JS Foundation and other contributors <https://js.foundation/>\\n * Released under MIT license <https://lodash.com/license>\\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\\n */\\n;(function() {\\n\\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\\n  var undefined;\\n\\n  /** Used as the semantic version number. */\\n  var VERSION = '4.17.2';\\n\\n  /** Used as the size to enable large array optimizations. */\\n  var LARGE_ARRAY_SIZE = 200;\\n\\n  /** Error message constants. */\\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\\n      FUNC_ERROR_TEXT = 'Expected a function';\\n\\n  /** Used to stand-in for `undefined` hash values. */\\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\\n\\n  /** Used as the maximum memoize cache size. */\\n  var MAX_MEMOIZE_SIZE = 500;\\n\\n  /** Used as the internal argument placeholder. */\\n  var PLACEHOLDER = '__lodash_placeholder__';\\n\\n  /** Used to compose bitmasks for cloning. */\\n  var CLONE_DEEP_FLAG = 1,\\n      CLONE_FLAT_FLAG = 2,\\n      CLONE_SYMBOLS_FLAG = 4;\\n\\n  /** Used to compose bitmasks for value comparisons. */\\n  var COMPARE_PARTIAL_FLAG = 1,\\n      COMPARE_UNORDERED_FLAG = 2;\\n\\n  /** Used to compose bitmasks for function metadata. */\\n  var WRAP_BIND_FLAG = 1,\\n      WRAP_BIND_KEY_FLAG = 2,\\n      WRAP_CURRY_BOUND_FLAG = 4,\\n      WRAP_CURRY_FLAG = 8,\\n      WRAP_CURRY_RIGHT_FLAG = 16,\\n      WRAP_PARTIAL_FLAG = 32,\\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\\n      WRAP_ARY_FLAG = 128,\\n      WRAP_REARG_FLAG = 256,\\n      WRAP_FLIP_FLAG = 512;\\n\\n  /** Used as default options for `_.truncate`. */\\n  var DEFAULT_TRUNC_LENGTH = 30,\\n      DEFAULT_TRUNC_OMISSION = '...';\\n\\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\\n  var HOT_COUNT = 800,\\n      HOT_SPAN = 16;\\n\\n  /** Used to indicate the type of lazy iteratees. */\\n  var LAZY_FILTER_FLAG = 1,\\n      LAZY_MAP_FLAG = 2,\\n      LAZY_WHILE_FLAG = 3;\\n\\n  /** Used as references for various `Number` constants. */\\n  var INFINITY = 1 / 0,\\n      MAX_SAFE_INTEGER = 9007199254740991,\\n      MAX_INTEGER = 1.7976931348623157e+308,\\n      NAN = 0 / 0;\\n\\n  /** Used as references for the maximum length and index of an array. */\\n  var MAX_ARRAY_LENGTH = 4294967295,\\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\\n\\n  /** Used to associate wrap methods with their bit flags. */\\n  var wrapFlags = [\\n    ['ary', WRAP_ARY_FLAG],\\n    ['bind', WRAP_BIND_FLAG],\\n    ['bindKey', WRAP_BIND_KEY_FLAG],\\n    ['curry', WRAP_CURRY_FLAG],\\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\\n    ['flip', WRAP_FLIP_FLAG],\\n    ['partial', WRAP_PARTIAL_FLAG],\\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\\n    ['rearg', WRAP_REARG_FLAG]\\n  ];\\n\\n  /** `Object#toString` result references. */\\n  var argsTag = '[object Arguments]',\\n      arrayTag = '[object Array]',\\n      asyncTag = '[object AsyncFunction]',\\n      boolTag = '[object Boolean]',\\n      dateTag = '[object Date]',\\n      domExcTag = '[object DOMException]',\\n      errorTag = '[object Error]',\\n      funcTag = '[object Function]',\\n      genTag = '[object GeneratorFunction]',\\n      mapTag = '[object Map]',\\n      numberTag = '[object Number]',\\n      nullTag = '[object Null]',\\n      objectTag = '[object Object]',\\n      promiseTag = '[object Promise]',\\n      proxyTag = '[object Proxy]',\\n      regexpTag = '[object RegExp]',\\n      setTag = '[object Set]',\\n      stringTag = '[object String]',\\n      symbolTag = '[object Symbol]',\\n      undefinedTag = '[object Undefined]',\\n      weakMapTag = '[object WeakMap]',\\n      weakSetTag = '[object WeakSet]';\\n\\n  var arrayBufferTag = '[object ArrayBuffer]',\\n      dataViewTag = '[object DataView]',\\n      float32Tag = '[object Float32Array]',\\n      float64Tag = '[object Float64Array]',\\n      int8Tag = '[object Int8Array]',\\n      int16Tag = '[object Int16Array]',\\n      int32Tag = '[object Int32Array]',\\n      uint8Tag = '[object Uint8Array]',\\n      uint8ClampedTag = '[object Uint8ClampedArray]',\\n      uint16Tag = '[object Uint16Array]',\\n      uint32Tag = '[object Uint32Array]';\\n\\n  /** Used to match empty string literals in compiled template source. */\\n  var reEmptyStringLeading = /\\\\b__p \\\\+= '';/g,\\n      reEmptyStringMiddle = /\\\\b(__p \\\\+=) '' \\\\+/g,\\n      reEmptyStringTrailing = /(__e\\\\(.*?\\\\)|\\\\b__t\\\\)) \\\\+\\\\n'';/g;\\n\\n  /** Used to match HTML entities and HTML characters. */\\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\\n      reUnescapedHtml = /[&<>\\\"']/g,\\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\\n\\n  /** Used to match template delimiters. */\\n  var reEscape = /<%-([\\\\s\\\\S]+?)%>/g,\\n      reEvaluate = /<%([\\\\s\\\\S]+?)%>/g,\\n      reInterpolate = /<%=([\\\\s\\\\S]+?)%>/g;\\n\\n  /** Used to match property names within property paths. */\\n  var reIsDeepProp = /\\\\.|\\\\[(?:[^[\\\\]]*|([\\\"'])(?:(?!\\\\1)[^\\\\\\\\]|\\\\\\\\.)*?\\\\1)\\\\]/,\\n      reIsPlainProp = /^\\\\w*$/,\\n      reLeadingDot = /^\\\\./,\\n      rePropName = /[^.[\\\\]]+|\\\\[(?:(-?\\\\d+(?:\\\\.\\\\d+)?)|([\\\"'])((?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\.)*?)\\\\2)\\\\]|(?=(?:\\\\.|\\\\[\\\\])(?:\\\\.|\\\\[\\\\]|$))/g;\\n\\n  /**\\n   * Used to match `RegExp`\\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\\n   */\\n  var reRegExpChar = /[\\\\\\\\^$.*+?()[\\\\]{}|]/g,\\n      reHasRegExpChar = RegExp(reRegExpChar.source);\\n\\n  /** Used to match leading and trailing whitespace. */\\n  var reTrim = /^\\\\s+|\\\\s+$/g,\\n      reTrimStart = /^\\\\s+/,\\n      reTrimEnd = /\\\\s+$/;\\n\\n  /** Used to match wrap detail comments. */\\n  var reWrapComment = /\\\\{(?:\\\\n\\\\/\\\\* \\\\[wrapped with .+\\\\] \\\\*\\\\/)?\\\\n?/,\\n      reWrapDetails = /\\\\{\\\\n\\\\/\\\\* \\\\[wrapped with (.+)\\\\] \\\\*/,\\n      reSplitDetails = /,? & /;\\n\\n  /** Used to match words composed of alphanumeric characters. */\\n  var reAsciiWord = /[^\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\x7f]+/g;\\n\\n  /** Used to match backslashes in property paths. */\\n  var reEscapeChar = /\\\\\\\\(\\\\\\\\)?/g;\\n\\n  /**\\n   * Used to match\\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\\n   */\\n  var reEsTemplate = /\\\\$\\\\{([^\\\\\\\\}]*(?:\\\\\\\\.[^\\\\\\\\}]*)*)\\\\}/g;\\n\\n  /** Used to match `RegExp` flags from their coerced string values. */\\n  var reFlags = /\\\\w*$/;\\n\\n  /** Used to detect bad signed hexadecimal string values. */\\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\\n\\n  /** Used to detect binary string values. */\\n  var reIsBinary = /^0b[01]+$/i;\\n\\n  /** Used to detect host constructors (Safari). */\\n  var reIsHostCtor = /^\\\\[object .+?Constructor\\\\]$/;\\n\\n  /** Used to detect octal string values. */\\n  var reIsOctal = /^0o[0-7]+$/i;\\n\\n  /** Used to detect unsigned integer values. */\\n  var reIsUint = /^(?:0|[1-9]\\\\d*)$/;\\n\\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\\n  var reLatin = /[\\\\xc0-\\\\xd6\\\\xd8-\\\\xf6\\\\xf8-\\\\xff\\\\u0100-\\\\u017f]/g;\\n\\n  /** Used to ensure capturing order of template delimiters. */\\n  var reNoMatch = /($^)/;\\n\\n  /** Used to match unescaped characters in compiled string literals. */\\n  var reUnescapedString = /['\\\\n\\\\r\\\\u2028\\\\u2029\\\\\\\\]/g;\\n\\n  /** Used to compose unicode character classes. */\\n  var rsAstralRange = '\\\\\\\\ud800-\\\\\\\\udfff',\\n      rsComboMarksRange = '\\\\\\\\u0300-\\\\\\\\u036f',\\n      reComboHalfMarksRange = '\\\\\\\\ufe20-\\\\\\\\ufe2f',\\n      rsComboSymbolsRange = '\\\\\\\\u20d0-\\\\\\\\u20ff',\\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\\n      rsDingbatRange = '\\\\\\\\u2700-\\\\\\\\u27bf',\\n      rsLowerRange = 'a-z\\\\\\\\xdf-\\\\\\\\xf6\\\\\\\\xf8-\\\\\\\\xff',\\n      rsMathOpRange = '\\\\\\\\xac\\\\\\\\xb1\\\\\\\\xd7\\\\\\\\xf7',\\n      rsNonCharRange = '\\\\\\\\x00-\\\\\\\\x2f\\\\\\\\x3a-\\\\\\\\x40\\\\\\\\x5b-\\\\\\\\x60\\\\\\\\x7b-\\\\\\\\xbf',\\n      rsPunctuationRange = '\\\\\\\\u2000-\\\\\\\\u206f',\\n      rsSpaceRange = ' \\\\\\\\t\\\\\\\\x0b\\\\\\\\f\\\\\\\\xa0\\\\\\\\ufeff\\\\\\\\n\\\\\\\\r\\\\\\\\u2028\\\\\\\\u2029\\\\\\\\u1680\\\\\\\\u180e\\\\\\\\u2000\\\\\\\\u2001\\\\\\\\u2002\\\\\\\\u2003\\\\\\\\u2004\\\\\\\\u2005\\\\\\\\u2006\\\\\\\\u2007\\\\\\\\u2008\\\\\\\\u2009\\\\\\\\u200a\\\\\\\\u202f\\\\\\\\u205f\\\\\\\\u3000',\\n      rsUpperRange = 'A-Z\\\\\\\\xc0-\\\\\\\\xd6\\\\\\\\xd8-\\\\\\\\xde',\\n      rsVarRange = '\\\\\\\\ufe0e\\\\\\\\ufe0f',\\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\\n\\n  /** Used to compose unicode capture groups. */\\n  var rsApos = \\\"['\\\\u2019]\\\",\\n      rsAstral = '[' + rsAstralRange + ']',\\n      rsBreak = '[' + rsBreakRange + ']',\\n      rsCombo = '[' + rsComboRange + ']',\\n      rsDigits = '\\\\\\\\d+',\\n      rsDingbat = '[' + rsDingbatRange + ']',\\n      rsLower = '[' + rsLowerRange + ']',\\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\\n      rsFitz = '\\\\\\\\ud83c[\\\\\\\\udffb-\\\\\\\\udfff]',\\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\\n      rsNonAstral = '[^' + rsAstralRange + ']',\\n      rsRegional = '(?:\\\\\\\\ud83c[\\\\\\\\udde6-\\\\\\\\uddff]){2}',\\n      rsSurrPair = '[\\\\\\\\ud800-\\\\\\\\udbff][\\\\\\\\udc00-\\\\\\\\udfff]',\\n      rsUpper = '[' + rsUpperRange + ']',\\n      rsZWJ = '\\\\\\\\u200d';\\n\\n  /** Used to compose unicode regexes. */\\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\\n      reOptMod = rsModifier + '?',\\n      rsOptVar = '[' + rsVarRange + ']?',\\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\\n      rsOrdLower = '\\\\\\\\d*(?:(?:1st|2nd|3rd|(?![123])\\\\\\\\dth)\\\\\\\\b)',\\n      rsOrdUpper = '\\\\\\\\d*(?:(?:1ST|2ND|3RD|(?![123])\\\\\\\\dTH)\\\\\\\\b)',\\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\\n\\n  /** Used to match apostrophes. */\\n  var reApos = RegExp(rsApos, 'g');\\n\\n  /**\\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\\n   */\\n  var reComboMark = RegExp(rsCombo, 'g');\\n\\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\\n\\n  /** Used to match complex or compound words. */\\n  var reUnicodeWord = RegExp([\\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\\n    rsUpper + '+' + rsOptContrUpper,\\n    rsOrdUpper,\\n    rsOrdLower,\\n    rsDigits,\\n    rsEmoji\\n  ].join('|'), 'g');\\n\\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\\n\\n  /** Used to detect strings that need a more robust regexp to match words. */\\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\\n\\n  /** Used to assign default `context` object properties. */\\n  var contextProps = [\\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\\n  ];\\n\\n  /** Used to make template sourceURLs easier to identify. */\\n  var templateCounter = -1;\\n\\n  /** Used to identify `toStringTag` values of typed arrays. */\\n  var typedArrayTags = {};\\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\\n  typedArrayTags[uint32Tag] = true;\\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\\n  typedArrayTags[weakMapTag] = false;\\n\\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\\n  var cloneableTags = {};\\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\\n  cloneableTags[weakMapTag] = false;\\n\\n  /** Used to map Latin Unicode letters to basic Latin letters. */\\n  var deburredLetters = {\\n    // Latin-1 Supplement block.\\n    '\\\\xc0': 'A',  '\\\\xc1': 'A', '\\\\xc2': 'A', '\\\\xc3': 'A', '\\\\xc4': 'A', '\\\\xc5': 'A',\\n    '\\\\xe0': 'a',  '\\\\xe1': 'a', '\\\\xe2': 'a', '\\\\xe3': 'a', '\\\\xe4': 'a', '\\\\xe5': 'a',\\n    '\\\\xc7': 'C',  '\\\\xe7': 'c',\\n    '\\\\xd0': 'D',  '\\\\xf0': 'd',\\n    '\\\\xc8': 'E',  '\\\\xc9': 'E', '\\\\xca': 'E', '\\\\xcb': 'E',\\n    '\\\\xe8': 'e',  '\\\\xe9': 'e', '\\\\xea': 'e', '\\\\xeb': 'e',\\n    '\\\\xcc': 'I',  '\\\\xcd': 'I', '\\\\xce': 'I', '\\\\xcf': 'I',\\n    '\\\\xec': 'i',  '\\\\xed': 'i', '\\\\xee': 'i', '\\\\xef': 'i',\\n    '\\\\xd1': 'N',  '\\\\xf1': 'n',\\n    '\\\\xd2': 'O',  '\\\\xd3': 'O', '\\\\xd4': 'O', '\\\\xd5': 'O', '\\\\xd6': 'O', '\\\\xd8': 'O',\\n    '\\\\xf2': 'o',  '\\\\xf3': 'o', '\\\\xf4': 'o', '\\\\xf5': 'o', '\\\\xf6': 'o', '\\\\xf8': 'o',\\n    '\\\\xd9': 'U',  '\\\\xda': 'U', '\\\\xdb': 'U', '\\\\xdc': 'U',\\n    '\\\\xf9': 'u',  '\\\\xfa': 'u', '\\\\xfb': 'u', '\\\\xfc': 'u',\\n    '\\\\xdd': 'Y',  '\\\\xfd': 'y', '\\\\xff': 'y',\\n    '\\\\xc6': 'Ae', '\\\\xe6': 'ae',\\n    '\\\\xde': 'Th', '\\\\xfe': 'th',\\n    '\\\\xdf': 'ss',\\n    // Latin Extended-A block.\\n    '\\\\u0100': 'A',  '\\\\u0102': 'A', '\\\\u0104': 'A',\\n    '\\\\u0101': 'a',  '\\\\u0103': 'a', '\\\\u0105': 'a',\\n    '\\\\u0106': 'C',  '\\\\u0108': 'C', '\\\\u010a': 'C', '\\\\u010c': 'C',\\n    '\\\\u0107': 'c',  '\\\\u0109': 'c', '\\\\u010b': 'c', '\\\\u010d': 'c',\\n    '\\\\u010e': 'D',  '\\\\u0110': 'D', '\\\\u010f': 'd', '\\\\u0111': 'd',\\n    '\\\\u0112': 'E',  '\\\\u0114': 'E', '\\\\u0116': 'E', '\\\\u0118': 'E', '\\\\u011a': 'E',\\n    '\\\\u0113': 'e',  '\\\\u0115': 'e', '\\\\u0117': 'e', '\\\\u0119': 'e', '\\\\u011b': 'e',\\n    '\\\\u011c': 'G',  '\\\\u011e': 'G', '\\\\u0120': 'G', '\\\\u0122': 'G',\\n    '\\\\u011d': 'g',  '\\\\u011f': 'g', '\\\\u0121': 'g', '\\\\u0123': 'g',\\n    '\\\\u0124': 'H',  '\\\\u0126': 'H', '\\\\u0125': 'h', '\\\\u0127': 'h',\\n    '\\\\u0128': 'I',  '\\\\u012a': 'I', '\\\\u012c': 'I', '\\\\u012e': 'I', '\\\\u0130': 'I',\\n    '\\\\u0129': 'i',  '\\\\u012b': 'i', '\\\\u012d': 'i', '\\\\u012f': 'i', '\\\\u0131': 'i',\\n    '\\\\u0134': 'J',  '\\\\u0135': 'j',\\n    '\\\\u0136': 'K',  '\\\\u0137': 'k', '\\\\u0138': 'k',\\n    '\\\\u0139': 'L',  '\\\\u013b': 'L', '\\\\u013d': 'L', '\\\\u013f': 'L', '\\\\u0141': 'L',\\n    '\\\\u013a': 'l',  '\\\\u013c': 'l', '\\\\u013e': 'l', '\\\\u0140': 'l', '\\\\u0142': 'l',\\n    '\\\\u0143': 'N',  '\\\\u0145': 'N', '\\\\u0147': 'N', '\\\\u014a': 'N',\\n    '\\\\u0144': 'n',  '\\\\u0146': 'n', '\\\\u0148': 'n', '\\\\u014b': 'n',\\n    '\\\\u014c': 'O',  '\\\\u014e': 'O', '\\\\u0150': 'O',\\n    '\\\\u014d': 'o',  '\\\\u014f': 'o', '\\\\u0151': 'o',\\n    '\\\\u0154': 'R',  '\\\\u0156': 'R', '\\\\u0158': 'R',\\n    '\\\\u0155': 'r',  '\\\\u0157': 'r', '\\\\u0159': 'r',\\n    '\\\\u015a': 'S',  '\\\\u015c': 'S', '\\\\u015e': 'S', '\\\\u0160': 'S',\\n    '\\\\u015b': 's',  '\\\\u015d': 's', '\\\\u015f': 's', '\\\\u0161': 's',\\n    '\\\\u0162': 'T',  '\\\\u0164': 'T', '\\\\u0166': 'T',\\n    '\\\\u0163': 't',  '\\\\u0165': 't', '\\\\u0167': 't',\\n    '\\\\u0168': 'U',  '\\\\u016a': 'U', '\\\\u016c': 'U', '\\\\u016e': 'U', '\\\\u0170': 'U', '\\\\u0172': 'U',\\n    '\\\\u0169': 'u',  '\\\\u016b': 'u', '\\\\u016d': 'u', '\\\\u016f': 'u', '\\\\u0171': 'u', '\\\\u0173': 'u',\\n    '\\\\u0174': 'W',  '\\\\u0175': 'w',\\n    '\\\\u0176': 'Y',  '\\\\u0177': 'y', '\\\\u0178': 'Y',\\n    '\\\\u0179': 'Z',  '\\\\u017b': 'Z', '\\\\u017d': 'Z',\\n    '\\\\u017a': 'z',  '\\\\u017c': 'z', '\\\\u017e': 'z',\\n    '\\\\u0132': 'IJ', '\\\\u0133': 'ij',\\n    '\\\\u0152': 'Oe', '\\\\u0153': 'oe',\\n    '\\\\u0149': \\\"'n\\\", '\\\\u017f': 's'\\n  };\\n\\n  /** Used to map characters to HTML entities. */\\n  var htmlEscapes = {\\n    '&': '&amp;',\\n    '<': '&lt;',\\n    '>': '&gt;',\\n    '\\\"': '&quot;',\\n    \\\"'\\\": '&#39;'\\n  };\\n\\n  /** Used to map HTML entities to characters. */\\n  var htmlUnescapes = {\\n    '&amp;': '&',\\n    '&lt;': '<',\\n    '&gt;': '>',\\n    '&quot;': '\\\"',\\n    '&#39;': \\\"'\\\"\\n  };\\n\\n  /** Used to escape characters for inclusion in compiled string literals. */\\n  var stringEscapes = {\\n    '\\\\\\\\': '\\\\\\\\',\\n    \\\"'\\\": \\\"'\\\",\\n    '\\\\n': 'n',\\n    '\\\\r': 'r',\\n    '\\\\u2028': 'u2028',\\n    '\\\\u2029': 'u2029'\\n  };\\n\\n  /** Built-in method references without a dependency on `root`. */\\n  var freeParseFloat = parseFloat,\\n      freeParseInt = parseInt;\\n\\n  /** Detect free variable `global` from Node.js. */\\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\\n\\n  /** Detect free variable `self`. */\\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\\n\\n  /** Used as a reference to the global object. */\\n  var root = freeGlobal || freeSelf || Function('return this')();\\n\\n  /** Detect free variable `exports`. */\\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\\n\\n  /** Detect free variable `module`. */\\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\\n\\n  /** Detect the popular CommonJS extension `module.exports`. */\\n  var moduleExports = freeModule && freeModule.exports === freeExports;\\n\\n  /** Detect free variable `process` from Node.js. */\\n  var freeProcess = moduleExports && freeGlobal.process;\\n\\n  /** Used to access faster Node.js helpers. */\\n  var nodeUtil = (function() {\\n    try {\\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\\n    } catch (e) {}\\n  }());\\n\\n  /* Node.js helper references. */\\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\\n\\n  /*--------------------------------------------------------------------------*/\\n\\n  /**\\n   * Adds the key-value `pair` to `map`.\\n   *\\n   * @private\\n   * @param {Object} map The map to modify.\\n   * @param {Array} pair The key-value pair to add.\\n   * @returns {Object} Returns `map`.\\n   */\\n  function addMapEntry(map, pair) {\\n    // Don't return `map.set` because it's not chainable in IE 11.\\n    map.set(pair[0], pair[1]);\\n    return map;\\n  }\\n\\n  /**\\n   * Adds `value` to `set`.\\n   *\\n   * @private\\n   * @param {Object} set The set to modify.\\n   * @param {*} value The value to add.\\n   * @returns {Object} Returns `set`.\\n   */\\n  function addSetEntry(set, value) {\\n    // Don't return `set.add` because it's not chainable in IE 11.\\n    set.add(value);\\n    return set;\\n  }\\n\\n  /**\\n   * A faster alternative to `Function#apply`, this function invokes `func`\\n   * with the `this` binding of `thisArg` and the arguments of `args`.\\n   *\\n   * @private\\n   * @param {Function} func The function to invoke.\\n   * @param {*} thisArg The `this` binding of `func`.\\n   * @param {Array} args The arguments to invoke `func` with.\\n   * @returns {*} Returns the result of `func`.\\n   */\\n  function apply(func, thisArg, args) {\\n    switch (args.length) {\\n      case 0: return func.call(thisArg);\\n      case 1: return func.call(thisArg, args[0]);\\n      case 2: return func.call(thisArg, args[0], args[1]);\\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\\n    }\\n    return func.apply(thisArg, args);\\n  }\\n\\n  /**\\n   * A specialized version of `baseAggregator` for arrays.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} setter The function to set `accumulator` values.\\n   * @param {Function} iteratee The iteratee to transform keys.\\n   * @param {Object} accumulator The initial aggregated object.\\n   * @returns {Function} Returns `accumulator`.\\n   */\\n  function arrayAggregator(array, setter, iteratee, accumulator) {\\n    var index = -1,\\n        length = array == null ? 0 : array.length;\\n\\n    while (++index < length) {\\n      var value = array[index];\\n      setter(accumulator, value, iteratee(value), array);\\n    }\\n    return accumulator;\\n  }\\n\\n  /**\\n   * A specialized version of `_.forEach` for arrays without support for\\n   * iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @returns {Array} Returns `array`.\\n   */\\n  function arrayEach(array, iteratee) {\\n    var index = -1,\\n        length = array == null ? 0 : array.length;\\n\\n    while (++index < length) {\\n      if (iteratee(array[index], index, array) === false) {\\n        break;\\n      }\\n    }\\n    return array;\\n  }\\n\\n  /**\\n   * A specialized version of `_.forEachRight` for arrays without support for\\n   * iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @returns {Array} Returns `array`.\\n   */\\n  function arrayEachRight(array, iteratee) {\\n    var length = array == null ? 0 : array.length;\\n\\n    while (length--) {\\n      if (iteratee(array[length], length, array) === false) {\\n        break;\\n      }\\n    }\\n    return array;\\n  }\\n\\n  /**\\n   * A specialized version of `_.every` for arrays without support for\\n   * iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} predicate The function invoked per iteration.\\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\\n   *  else `false`.\\n   */\\n  function arrayEvery(array, predicate) {\\n    var index = -1,\\n        length = array == null ? 0 : array.length;\\n\\n    while (++index < length) {\\n      if (!predicate(array[index], index, array)) {\\n        return false;\\n      }\\n    }\\n    return true;\\n  }\\n\\n  /**\\n   * A specialized version of `_.filter` for arrays without support for\\n   * iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} predicate The function invoked per iteration.\\n   * @returns {Array} Returns the new filtered array.\\n   */\\n  function arrayFilter(array, predicate) {\\n    var index = -1,\\n        length = array == null ? 0 : array.length,\\n        resIndex = 0,\\n        result = [];\\n\\n    while (++index < length) {\\n      var value = array[index];\\n      if (predicate(value, index, array)) {\\n        result[resIndex++] = value;\\n      }\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * A specialized version of `_.includes` for arrays without support for\\n   * specifying an index to search from.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to inspect.\\n   * @param {*} target The value to search for.\\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\\n   */\\n  function arrayIncludes(array, value) {\\n    var length = array == null ? 0 : array.length;\\n    return !!length && baseIndexOf(array, value, 0) > -1;\\n  }\\n\\n  /**\\n   * This function is like `arrayIncludes` except that it accepts a comparator.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to inspect.\\n   * @param {*} target The value to search for.\\n   * @param {Function} comparator The comparator invoked per element.\\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\\n   */\\n  function arrayIncludesWith(array, value, comparator) {\\n    var index = -1,\\n        length = array == null ? 0 : array.length;\\n\\n    while (++index < length) {\\n      if (comparator(value, array[index])) {\\n        return true;\\n      }\\n    }\\n    return false;\\n  }\\n\\n  /**\\n   * A specialized version of `_.map` for arrays without support for iteratee\\n   * shorthands.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @returns {Array} Returns the new mapped array.\\n   */\\n  function arrayMap(array, iteratee) {\\n    var index = -1,\\n        length = array == null ? 0 : array.length,\\n        result = Array(length);\\n\\n    while (++index < length) {\\n      result[index] = iteratee(array[index], index, array);\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * Appends the elements of `values` to `array`.\\n   *\\n   * @private\\n   * @param {Array} array The array to modify.\\n   * @param {Array} values The values to append.\\n   * @returns {Array} Returns `array`.\\n   */\\n  function arrayPush(array, values) {\\n    var index = -1,\\n        length = values.length,\\n        offset = array.length;\\n\\n    while (++index < length) {\\n      array[offset + index] = values[index];\\n    }\\n    return array;\\n  }\\n\\n  /**\\n   * A specialized version of `_.reduce` for arrays without support for\\n   * iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @param {*} [accumulator] The initial value.\\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\\n   *  the initial value.\\n   * @returns {*} Returns the accumulated value.\\n   */\\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\\n    var index = -1,\\n        length = array == null ? 0 : array.length;\\n\\n    if (initAccum && length) {\\n      accumulator = array[++index];\\n    }\\n    while (++index < length) {\\n      accumulator = iteratee(accumulator, array[index], index, array);\\n    }\\n    return accumulator;\\n  }\\n\\n  /**\\n   * A specialized version of `_.reduceRight` for arrays without support for\\n   * iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @param {*} [accumulator] The initial value.\\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\\n   *  the initial value.\\n   * @returns {*} Returns the accumulated value.\\n   */\\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\\n    var length = array == null ? 0 : array.length;\\n    if (initAccum && length) {\\n      accumulator = array[--length];\\n    }\\n    while (length--) {\\n      accumulator = iteratee(accumulator, array[length], length, array);\\n    }\\n    return accumulator;\\n  }\\n\\n  /**\\n   * A specialized version of `_.some` for arrays without support for iteratee\\n   * shorthands.\\n   *\\n   * @private\\n   * @param {Array} [array] The array to iterate over.\\n   * @param {Function} predicate The function invoked per iteration.\\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\\n   *  else `false`.\\n   */\\n  function arraySome(array, predicate) {\\n    var index = -1,\\n        length = array == null ? 0 : array.length;\\n\\n    while (++index < length) {\\n      if (predicate(array[index], index, array)) {\\n        return true;\\n      }\\n    }\\n    return false;\\n  }\\n\\n  /**\\n   * Gets the size of an ASCII `string`.\\n   *\\n   * @private\\n   * @param {string} string The string inspect.\\n   * @returns {number} Returns the string size.\\n   */\\n  var asciiSize = baseProperty('length');\\n\\n  /**\\n   * Converts an ASCII `string` to an array.\\n   *\\n   * @private\\n   * @param {string} string The string to convert.\\n   * @returns {Array} Returns the converted array.\\n   */\\n  function asciiToArray(string) {\\n    return string.split('');\\n  }\\n\\n  /**\\n   * Splits an ASCII `string` into an array of its words.\\n   *\\n   * @private\\n   * @param {string} The string to inspect.\\n   * @returns {Array} Returns the words of `string`.\\n   */\\n  function asciiWords(string) {\\n    return string.match(reAsciiWord) || [];\\n  }\\n\\n  /**\\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\\n   * without support for iteratee shorthands, which iterates over `collection`\\n   * using `eachFunc`.\\n   *\\n   * @private\\n   * @param {Array|Object} collection The collection to inspect.\\n   * @param {Function} predicate The function invoked per iteration.\\n   * @param {Function} eachFunc The function to iterate over `collection`.\\n   * @returns {*} Returns the found element or its key, else `undefined`.\\n   */\\n  function baseFindKey(collection, predicate, eachFunc) {\\n    var result;\\n    eachFunc(collection, function(value, key, collection) {\\n      if (predicate(value, key, collection)) {\\n        result = key;\\n        return false;\\n      }\\n    });\\n    return result;\\n  }\\n\\n  /**\\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\\n   * support for iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} array The array to inspect.\\n   * @param {Function} predicate The function invoked per iteration.\\n   * @param {number} fromIndex The index to search from.\\n   * @param {boolean} [fromRight] Specify iterating from right to left.\\n   * @returns {number} Returns the index of the matched value, else `-1`.\\n   */\\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\\n    var length = array.length,\\n        index = fromIndex + (fromRight ? 1 : -1);\\n\\n    while ((fromRight ? index-- : ++index < length)) {\\n      if (predicate(array[index], index, array)) {\\n        return index;\\n      }\\n    }\\n    return -1;\\n  }\\n\\n  /**\\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\\n   *\\n   * @private\\n   * @param {Array} array The array to inspect.\\n   * @param {*} value The value to search for.\\n   * @param {number} fromIndex The index to search from.\\n   * @returns {number} Returns the index of the matched value, else `-1`.\\n   */\\n  function baseIndexOf(array, value, fromIndex) {\\n    return value === value\\n      ? strictIndexOf(array, value, fromIndex)\\n      : baseFindIndex(array, baseIsNaN, fromIndex);\\n  }\\n\\n  /**\\n   * This function is like `baseIndexOf` except that it accepts a comparator.\\n   *\\n   * @private\\n   * @param {Array} array The array to inspect.\\n   * @param {*} value The value to search for.\\n   * @param {number} fromIndex The index to search from.\\n   * @param {Function} comparator The comparator invoked per element.\\n   * @returns {number} Returns the index of the matched value, else `-1`.\\n   */\\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\\n    var index = fromIndex - 1,\\n        length = array.length;\\n\\n    while (++index < length) {\\n      if (comparator(array[index], value)) {\\n        return index;\\n      }\\n    }\\n    return -1;\\n  }\\n\\n  /**\\n   * The base implementation of `_.isNaN` without support for number objects.\\n   *\\n   * @private\\n   * @param {*} value The value to check.\\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\\n   */\\n  function baseIsNaN(value) {\\n    return value !== value;\\n  }\\n\\n  /**\\n   * The base implementation of `_.mean` and `_.meanBy` without support for\\n   * iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} array The array to iterate over.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @returns {number} Returns the mean.\\n   */\\n  function baseMean(array, iteratee) {\\n    var length = array == null ? 0 : array.length;\\n    return length ? (baseSum(array, iteratee) / length) : NAN;\\n  }\\n\\n  /**\\n   * The base implementation of `_.property` without support for deep paths.\\n   *\\n   * @private\\n   * @param {string} key The key of the property to get.\\n   * @returns {Function} Returns the new accessor function.\\n   */\\n  function baseProperty(key) {\\n    return function(object) {\\n      return object == null ? undefined : object[key];\\n    };\\n  }\\n\\n  /**\\n   * The base implementation of `_.propertyOf` without support for deep paths.\\n   *\\n   * @private\\n   * @param {Object} object The object to query.\\n   * @returns {Function} Returns the new accessor function.\\n   */\\n  function basePropertyOf(object) {\\n    return function(key) {\\n      return object == null ? undefined : object[key];\\n    };\\n  }\\n\\n  /**\\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\\n   *\\n   * @private\\n   * @param {Array|Object} collection The collection to iterate over.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @param {*} accumulator The initial value.\\n   * @param {boolean} initAccum Specify using the first or last element of\\n   *  `collection` as the initial value.\\n   * @param {Function} eachFunc The function to iterate over `collection`.\\n   * @returns {*} Returns the accumulated value.\\n   */\\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\\n    eachFunc(collection, function(value, index, collection) {\\n      accumulator = initAccum\\n        ? (initAccum = false, value)\\n        : iteratee(accumulator, value, index, collection);\\n    });\\n    return accumulator;\\n  }\\n\\n  /**\\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\\n   * sort order of `array` and replaces criteria objects with their corresponding\\n   * values.\\n   *\\n   * @private\\n   * @param {Array} array The array to sort.\\n   * @param {Function} comparer The function to define sort order.\\n   * @returns {Array} Returns `array`.\\n   */\\n  function baseSortBy(array, comparer) {\\n    var length = array.length;\\n\\n    array.sort(comparer);\\n    while (length--) {\\n      array[length] = array[length].value;\\n    }\\n    return array;\\n  }\\n\\n  /**\\n   * The base implementation of `_.sum` and `_.sumBy` without support for\\n   * iteratee shorthands.\\n   *\\n   * @private\\n   * @param {Array} array The array to iterate over.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @returns {number} Returns the sum.\\n   */\\n  function baseSum(array, iteratee) {\\n    var result,\\n        index = -1,\\n        length = array.length;\\n\\n    while (++index < length) {\\n      var current = iteratee(array[index]);\\n      if (current !== undefined) {\\n        result = result === undefined ? current : (result + current);\\n      }\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * The base implementation of `_.times` without support for iteratee shorthands\\n   * or max array length checks.\\n   *\\n   * @private\\n   * @param {number} n The number of times to invoke `iteratee`.\\n   * @param {Function} iteratee The function invoked per iteration.\\n   * @returns {Array} Returns the array of results.\\n   */\\n  function baseTimes(n, iteratee) {\\n    var index = -1,\\n        result = Array(n);\\n\\n    while (++index < n) {\\n      result[index] = iteratee(index);\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\\n   * of key-value pairs for `object` corresponding to the property names of `props`.\\n   *\\n   * @private\\n   * @param {Object} object The object to query.\\n   * @param {Array} props The property names to get values for.\\n   * @returns {Object} Returns the key-value pairs.\\n   */\\n  function baseToPairs(object, props) {\\n    return arrayMap(props, function(key) {\\n      return [key, object[key]];\\n    });\\n  }\\n\\n  /**\\n   * The base implementation of `_.unary` without support for storing metadata.\\n   *\\n   * @private\\n   * @param {Function} func The function to cap arguments for.\\n   * @returns {Function} Returns the new capped function.\\n   */\\n  function baseUnary(func) {\\n    return function(value) {\\n      return func(value);\\n    };\\n  }\\n\\n  /**\\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\\n   * array of `object` property values corresponding to the property names\\n   * of `props`.\\n   *\\n   * @private\\n   * @param {Object} object The object to query.\\n   * @param {Array} props The property names to get values for.\\n   * @returns {Object} Returns the array of property values.\\n   */\\n  function baseValues(object, props) {\\n    return arrayMap(props, function(key) {\\n      return object[key];\\n    });\\n  }\\n\\n  /**\\n   * Checks if a `cache` value for `key` exists.\\n   *\\n   * @private\\n   * @param {Object} cache The cache to query.\\n   * @param {string} key The key of the entry to check.\\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\\n   */\\n  function cacheHas(cache, key) {\\n    return cache.has(key);\\n  }\\n\\n  /**\\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\\n   * that is not found in the character symbols.\\n   *\\n   * @private\\n   * @param {Array} strSymbols The string symbols to inspect.\\n   * @param {Array} chrSymbols The character symbols to find.\\n   * @returns {number} Returns the index of the first unmatched string symbol.\\n   */\\n  function charsStartIndex(strSymbols, chrSymbols) {\\n    var index = -1,\\n        length = strSymbols.length;\\n\\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\\n    return index;\\n  }\\n\\n  /**\\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\\n   * that is not found in the character symbols.\\n   *\\n   * @private\\n   * @param {Array} strSymbols The string symbols to inspect.\\n   * @param {Array} chrSymbols The character symbols to find.\\n   * @returns {number} Returns the index of the last unmatched string symbol.\\n   */\\n  function charsEndIndex(strSymbols, chrSymbols) {\\n    var index = strSymbols.length;\\n\\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\\n    return index;\\n  }\\n\\n  /**\\n   * Gets the number of `placeholder` occurrences in `array`.\\n   *\\n   * @private\\n   * @param {Array} array The array to inspect.\\n   * @param {*} placeholder The placeholder to search for.\\n   * @returns {number} Returns the placeholder count.\\n   */\\n  function countHolders(array, placeholder) {\\n    var length = array.length,\\n        result = 0;\\n\\n    while (length--) {\\n      if (array[length] === placeholder) {\\n        ++result;\\n      }\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\\n   * letters to basic Latin letters.\\n   *\\n   * @private\\n   * @param {string} letter The matched letter to deburr.\\n   * @returns {string} Returns the deburred letter.\\n   */\\n  var deburrLetter = basePropertyOf(deburredLetters);\\n\\n  /**\\n   * Used by `_.escape` to convert characters to HTML entities.\\n   *\\n   * @private\\n   * @param {string} chr The matched character to escape.\\n   * @returns {string} Returns the escaped character.\\n   */\\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\\n\\n  /**\\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\\n   *\\n   * @private\\n   * @param {string} chr The matched character to escape.\\n   * @returns {string} Returns the escaped character.\\n   */\\n  function escapeStringChar(chr) {\\n    return '\\\\\\\\' + stringEscapes[chr];\\n  }\\n\\n  /**\\n   * Gets the value at `key` of `object`.\\n   *\\n   * @private\\n   * @param {Object} [object] The object to query.\\n   * @param {string} key The key of the property to get.\\n   * @returns {*} Returns the property value.\\n   */\\n  function getValue(object, key) {\\n    return object == null ? undefined : object[key];\\n  }\\n\\n  /**\\n   * Checks if `string` contains Unicode symbols.\\n   *\\n   * @private\\n   * @param {string} string The string to inspect.\\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\\n   */\\n  function hasUnicode(string) {\\n    return reHasUnicode.test(string);\\n  }\\n\\n  /**\\n   * Checks if `string` contains a word composed of Unicode symbols.\\n   *\\n   * @private\\n   * @param {string} string The string to inspect.\\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\\n   */\\n  function hasUnicodeWord(string) {\\n    return reHasUnicodeWord.test(string);\\n  }\\n\\n  /**\\n   * Converts `iterator` to an array.\\n   *\\n   * @private\\n   * @param {Object} iterator The iterator to convert.\\n   * @returns {Array} Returns the converted array.\\n   */\\n  function iteratorToArray(iterator) {\\n    var data,\\n        result = [];\\n\\n    while (!(data = iterator.next()).done) {\\n      result.push(data.value);\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * Converts `map` to its key-value pairs.\\n   *\\n   * @private\\n   * @param {Object} map The map to convert.\\n   * @returns {Array} Returns the key-value pairs.\\n   */\\n  function mapToArray(map) {\\n    var index = -1,\\n        result = Array(map.size);\\n\\n    map.forEach(function(value, key) {\\n      result[++index] = [key, value];\\n    });\\n    return result;\\n  }\\n\\n  /**\\n   * Creates a unary function that invokes `func` with its argument transformed.\\n   *\\n   * @private\\n   * @param {Function} func The function to wrap.\\n   * @param {Function} transform The argument transform.\\n   * @returns {Function} Returns the new function.\\n   */\\n  function overArg(func, transform) {\\n    return function(arg) {\\n      return func(transform(arg));\\n    };\\n  }\\n\\n  /**\\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\\n   * and returns an array of their indexes.\\n   *\\n   * @private\\n   * @param {Array} array The array to modify.\\n   * @param {*} placeholder The placeholder to replace.\\n   * @returns {Array} Returns the new array of placeholder indexes.\\n   */\\n  function replaceHolders(array, placeholder) {\\n    var index = -1,\\n        length = array.length,\\n        resIndex = 0,\\n        result = [];\\n\\n    while (++index < length) {\\n      var value = array[index];\\n      if (value === placeholder || value === PLACEHOLDER) {\\n        array[index] = PLACEHOLDER;\\n        result[resIndex++] = index;\\n      }\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * Converts `set` to an array of its values.\\n   *\\n   * @private\\n   * @param {Object} set The set to convert.\\n   * @returns {Array} Returns the values.\\n   */\\n  function setToArray(set) {\\n    var index = -1,\\n        result = Array(set.size);\\n\\n    set.forEach(function(value) {\\n      result[++index] = value;\\n    });\\n    return result;\\n  }\\n\\n  /**\\n   * Converts `set` to its value-value pairs.\\n   *\\n   * @private\\n   * @param {Object} set The set to convert.\\n   * @returns {Array} Returns the value-value pairs.\\n   */\\n  function setToPairs(set) {\\n    var index = -1,\\n        result = Array(set.size);\\n\\n    set.forEach(function(value) {\\n      result[++index] = [value, value];\\n    });\\n    return result;\\n  }\\n\\n  /**\\n   * A specialized version of `_.indexOf` which performs strict equality\\n   * comparisons of values, i.e. `===`.\\n   *\\n   * @private\\n   * @param {Array} array The array to inspect.\\n   * @param {*} value The value to search for.\\n   * @param {number} fromIndex The index to search from.\\n   * @returns {number} Returns the index of the matched value, else `-1`.\\n   */\\n  function strictIndexOf(array, value, fromIndex) {\\n    var index = fromIndex - 1,\\n        length = array.length;\\n\\n    while (++index < length) {\\n      if (array[index] === value) {\\n        return index;\\n      }\\n    }\\n    return -1;\\n  }\\n\\n  /**\\n   * A specialized version of `_.lastIndexOf` which performs strict equality\\n   * comparisons of values, i.e. `===`.\\n   *\\n   * @private\\n   * @param {Array} array The array to inspect.\\n   * @param {*} value The value to search for.\\n   * @param {number} fromIndex The index to search from.\\n   * @returns {number} Returns the index of the matched value, else `-1`.\\n   */\\n  function strictLastIndexOf(array, value, fromIndex) {\\n    var index = fromIndex + 1;\\n    while (index--) {\\n      if (array[index] === value) {\\n        return index;\\n      }\\n    }\\n    return index;\\n  }\\n\\n  /**\\n   * Gets the number of symbols in `string`.\\n   *\\n   * @private\\n   * @param {string} string The string to inspect.\\n   * @returns {number} Returns the string size.\\n   */\\n  function stringSize(string) {\\n    return hasUnicode(string)\\n      ? unicodeSize(string)\\n      : asciiSize(string);\\n  }\\n\\n  /**\\n   * Converts `string` to an array.\\n   *\\n   * @private\\n   * @param {string} string The string to convert.\\n   * @returns {Array} Returns the converted array.\\n   */\\n  function stringToArray(string) {\\n    return hasUnicode(string)\\n      ? unicodeToArray(string)\\n      : asciiToArray(string);\\n  }\\n\\n  /**\\n   * Used by `_.unescape` to convert HTML entities to characters.\\n   *\\n   * @private\\n   * @param {string} chr The matched character to unescape.\\n   * @returns {string} Returns the unescaped character.\\n   */\\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\\n\\n  /**\\n   * Gets the size of a Unicode `string`.\\n   *\\n   * @private\\n   * @param {string} string The string inspect.\\n   * @returns {number} Returns the string size.\\n   */\\n  function unicodeSize(string) {\\n    var result = reUnicode.lastIndex = 0;\\n    while (reUnicode.test(string)) {\\n      ++result;\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * Converts a Unicode `string` to an array.\\n   *\\n   * @private\\n   * @param {string} string The string to convert.\\n   * @returns {Array} Returns the converted array.\\n   */\\n  function unicodeToArray(string) {\\n    return string.match(reUnicode) || [];\\n  }\\n\\n  /**\\n   * Splits a Unicode `string` into an array of its words.\\n   *\\n   * @private\\n   * @param {string} The string to inspect.\\n   * @returns {Array} Returns the words of `string`.\\n   */\\n  function unicodeWords(string) {\\n    return string.match(reUnicodeWord) || [];\\n  }\\n\\n  /*--------------------------------------------------------------------------*/\\n\\n  /**\\n   * Create a new pristine `lodash` function using the `context` object.\\n   *\\n   * @static\\n   * @memberOf _\\n   * @since 1.1.0\\n   * @category Util\\n   * @param {Object} [context=root] The context object.\\n   * @returns {Function} Returns a new `lodash` function.\\n   * @example\\n   *\\n   * _.mixin({ 'foo': _.constant('foo') });\\n   *\\n   * var lodash = _.runInContext();\\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\\n   *\\n   * _.isFunction(_.foo);\\n   * // => true\\n   * _.isFunction(_.bar);\\n   * // => false\\n   *\\n   * lodash.isFunction(lodash.foo);\\n   * // => false\\n   * lodash.isFunction(lodash.bar);\\n   * // => true\\n   *\\n   * // Create a suped-up `defer` in Node.js.\\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\\n   */\\n  var runInContext = (function runInContext(context) {\\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\\n\\n    /** Built-in constructor references. */\\n    var Array = context.Array,\\n        Date = context.Date,\\n        Error = context.Error,\\n        Function = context.Function,\\n        Math = context.Math,\\n        Object = context.Object,\\n        RegExp = context.RegExp,\\n        String = context.String,\\n        TypeError = context.TypeError;\\n\\n    /** Used for built-in method references. */\\n    var arrayProto = Array.prototype,\\n        funcProto = Function.prototype,\\n        objectProto = Object.prototype;\\n\\n    /** Used to detect overreaching core-js shims. */\\n    var coreJsData = context['__core-js_shared__'];\\n\\n    /** Used to resolve the decompiled source of functions. */\\n    var funcToString = funcProto.toString;\\n\\n    /** Used to check objects for own properties. */\\n    var hasOwnProperty = objectProto.hasOwnProperty;\\n\\n    /** Used to generate unique IDs. */\\n    var idCounter = 0;\\n\\n    /** Used to detect methods masquerading as native. */\\n    var maskSrcKey = (function() {\\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\\n      return uid ? ('Symbol(src)_1.' + uid) : '';\\n    }());\\n\\n    /**\\n     * Used to resolve the\\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\\n     * of values.\\n     */\\n    var nativeObjectToString = objectProto.toString;\\n\\n    /** Used to infer the `Object` constructor. */\\n    var objectCtorString = funcToString.call(Object);\\n\\n    /** Used to restore the original `_` reference in `_.noConflict`. */\\n    var oldDash = root._;\\n\\n    /** Used to detect if a method is native. */\\n    var reIsNative = RegExp('^' +\\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\\\\\$&')\\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\\\\\\\()| for .+?(?=\\\\\\\\\\\\])/g, '$1.*?') + '$'\\n    );\\n\\n    /** Built-in value references. */\\n    var Buffer = moduleExports ? context.Buffer : undefined,\\n        Symbol = context.Symbol,\\n        Uint8Array = context.Uint8Array,\\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\\n        getPrototype = overArg(Object.getPrototypeOf, Object),\\n        objectCreate = Object.create,\\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\\n        splice = arrayProto.splice,\\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\\n        symIterator = Symbol ? Symbol.iterator : undefined,\\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\\n\\n    var defineProperty = (function() {\\n      try {\\n        var func = getNative(Object, 'defineProperty');\\n        func({}, '', {});\\n        return func;\\n      } catch (e) {}\\n    }());\\n\\n    /** Mocked built-ins. */\\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\\n\\n    /* Built-in method references for those with the same name as other `lodash` methods. */\\n    var nativeCeil = Math.ceil,\\n        nativeFloor = Math.floor,\\n        nativeGetSymbols = Object.getOwnPropertySymbols,\\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\\n        nativeIsFinite = context.isFinite,\\n        nativeJoin = arrayProto.join,\\n        nativeKeys = overArg(Object.keys, Object),\\n        nativeMax = Math.max,\\n        nativeMin = Math.min,\\n        nativeNow = Date.now,\\n        nativeParseInt = context.parseInt,\\n        nativeRandom = Math.random,\\n        nativeReverse = arrayProto.reverse;\\n\\n    /* Built-in method references that are verified to be native. */\\n    var DataView = getNative(context, 'DataView'),\\n        Map = getNative(context, 'Map'),\\n        Promise = getNative(context, 'Promise'),\\n        Set = getNative(context, 'Set'),\\n        WeakMap = getNative(context, 'WeakMap'),\\n        nativeCreate = getNative(Object, 'create');\\n\\n    /** Used to store function metadata. */\\n    var metaMap = WeakMap && new WeakMap;\\n\\n    /** Used to lookup unminified function names. */\\n    var realNames = {};\\n\\n    /** Used to detect maps, sets, and weakmaps. */\\n    var dataViewCtorString = toSource(DataView),\\n        mapCtorString = toSource(Map),\\n        promiseCtorString = toSource(Promise),\\n        setCtorString = toSource(Set),\\n        weakMapCtorString = toSource(WeakMap);\\n\\n    /** Used to convert symbols to primitives and strings. */\\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a `lodash` object which wraps `value` to enable implicit method\\n     * chain sequences. Methods that operate on and return arrays, collections,\\n     * and functions can be chained together. Methods that retrieve a single value\\n     * or may return a primitive value will automatically end the chain sequence\\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\\n     * with `_#value`.\\n     *\\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\\n     * enabled using `_.chain`.\\n     *\\n     * The execution of chained methods is lazy, that is, it's deferred until\\n     * `_#value` is implicitly or explicitly called.\\n     *\\n     * Lazy evaluation allows several methods to support shortcut fusion.\\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\\n     * the creation of intermediate arrays and can greatly reduce the number of\\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\\n     * fusion if the section is applied to an array of at least `200` elements\\n     * and any iteratees accept only one argument. The heuristic for whether a\\n     * section qualifies for shortcut fusion is subject to change.\\n     *\\n     * Chaining is supported in custom builds as long as the `_#value` method is\\n     * directly or indirectly included in the build.\\n     *\\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\\n     *\\n     * The wrapper `Array` methods are:\\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\\n     *\\n     * The wrapper `String` methods are:\\n     * `replace` and `split`\\n     *\\n     * The wrapper methods that support shortcut fusion are:\\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\\n     *\\n     * The chainable wrapper methods are:\\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\\n     *\\n     * The wrapper methods that are **not** chainable by default are:\\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\\n     * `upperFirst`, `value`, and `words`\\n     *\\n     * @name _\\n     * @constructor\\n     * @category Seq\\n     * @param {*} value The value to wrap in a `lodash` instance.\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * var wrapped = _([1, 2, 3]);\\n     *\\n     * // Returns an unwrapped value.\\n     * wrapped.reduce(_.add);\\n     * // => 6\\n     *\\n     * // Returns a wrapped value.\\n     * var squares = wrapped.map(square);\\n     *\\n     * _.isArray(squares);\\n     * // => false\\n     *\\n     * _.isArray(squares.value());\\n     * // => true\\n     */\\n    function lodash(value) {\\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\\n        if (value instanceof LodashWrapper) {\\n          return value;\\n        }\\n        if (hasOwnProperty.call(value, '__wrapped__')) {\\n          return wrapperClone(value);\\n        }\\n      }\\n      return new LodashWrapper(value);\\n    }\\n\\n    /**\\n     * The base implementation of `_.create` without support for assigning\\n     * properties to the created object.\\n     *\\n     * @private\\n     * @param {Object} proto The object to inherit from.\\n     * @returns {Object} Returns the new object.\\n     */\\n    var baseCreate = (function() {\\n      function object() {}\\n      return function(proto) {\\n        if (!isObject(proto)) {\\n          return {};\\n        }\\n        if (objectCreate) {\\n          return objectCreate(proto);\\n        }\\n        object.prototype = proto;\\n        var result = new object;\\n        object.prototype = undefined;\\n        return result;\\n      };\\n    }());\\n\\n    /**\\n     * The function whose prototype chain sequence wrappers inherit from.\\n     *\\n     * @private\\n     */\\n    function baseLodash() {\\n      // No operation performed.\\n    }\\n\\n    /**\\n     * The base constructor for creating `lodash` wrapper objects.\\n     *\\n     * @private\\n     * @param {*} value The value to wrap.\\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\\n     */\\n    function LodashWrapper(value, chainAll) {\\n      this.__wrapped__ = value;\\n      this.__actions__ = [];\\n      this.__chain__ = !!chainAll;\\n      this.__index__ = 0;\\n      this.__values__ = undefined;\\n    }\\n\\n    /**\\n     * By default, the template delimiters used by lodash are like those in\\n     * embedded Ruby (ERB). Change the following template settings to use\\n     * alternative delimiters.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @type {Object}\\n     */\\n    lodash.templateSettings = {\\n\\n      /**\\n       * Used to detect `data` property values to be HTML-escaped.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type {RegExp}\\n       */\\n      'escape': reEscape,\\n\\n      /**\\n       * Used to detect code to be evaluated.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type {RegExp}\\n       */\\n      'evaluate': reEvaluate,\\n\\n      /**\\n       * Used to detect `data` property values to inject.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type {RegExp}\\n       */\\n      'interpolate': reInterpolate,\\n\\n      /**\\n       * Used to reference the data object in the template text.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type {string}\\n       */\\n      'variable': '',\\n\\n      /**\\n       * Used to import variables into the compiled template.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type {Object}\\n       */\\n      'imports': {\\n\\n        /**\\n         * A reference to the `lodash` function.\\n         *\\n         * @memberOf _.templateSettings.imports\\n         * @type {Function}\\n         */\\n        '_': lodash\\n      }\\n    };\\n\\n    // Ensure wrappers are instances of `baseLodash`.\\n    lodash.prototype = baseLodash.prototype;\\n    lodash.prototype.constructor = lodash;\\n\\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\\n    LodashWrapper.prototype.constructor = LodashWrapper;\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\\n     *\\n     * @private\\n     * @constructor\\n     * @param {*} value The value to wrap.\\n     */\\n    function LazyWrapper(value) {\\n      this.__wrapped__ = value;\\n      this.__actions__ = [];\\n      this.__dir__ = 1;\\n      this.__filtered__ = false;\\n      this.__iteratees__ = [];\\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\\n      this.__views__ = [];\\n    }\\n\\n    /**\\n     * Creates a clone of the lazy wrapper object.\\n     *\\n     * @private\\n     * @name clone\\n     * @memberOf LazyWrapper\\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\\n     */\\n    function lazyClone() {\\n      var result = new LazyWrapper(this.__wrapped__);\\n      result.__actions__ = copyArray(this.__actions__);\\n      result.__dir__ = this.__dir__;\\n      result.__filtered__ = this.__filtered__;\\n      result.__iteratees__ = copyArray(this.__iteratees__);\\n      result.__takeCount__ = this.__takeCount__;\\n      result.__views__ = copyArray(this.__views__);\\n      return result;\\n    }\\n\\n    /**\\n     * Reverses the direction of lazy iteration.\\n     *\\n     * @private\\n     * @name reverse\\n     * @memberOf LazyWrapper\\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\\n     */\\n    function lazyReverse() {\\n      if (this.__filtered__) {\\n        var result = new LazyWrapper(this);\\n        result.__dir__ = -1;\\n        result.__filtered__ = true;\\n      } else {\\n        result = this.clone();\\n        result.__dir__ *= -1;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Extracts the unwrapped value from its lazy wrapper.\\n     *\\n     * @private\\n     * @name value\\n     * @memberOf LazyWrapper\\n     * @returns {*} Returns the unwrapped value.\\n     */\\n    function lazyValue() {\\n      var array = this.__wrapped__.value(),\\n          dir = this.__dir__,\\n          isArr = isArray(array),\\n          isRight = dir < 0,\\n          arrLength = isArr ? array.length : 0,\\n          view = getView(0, arrLength, this.__views__),\\n          start = view.start,\\n          end = view.end,\\n          length = end - start,\\n          index = isRight ? end : (start - 1),\\n          iteratees = this.__iteratees__,\\n          iterLength = iteratees.length,\\n          resIndex = 0,\\n          takeCount = nativeMin(length, this.__takeCount__);\\n\\n      if (!isArr || arrLength < LARGE_ARRAY_SIZE ||\\n          (arrLength == length && takeCount == length)) {\\n        return baseWrapperValue(array, this.__actions__);\\n      }\\n      var result = [];\\n\\n      outer:\\n      while (length-- && resIndex < takeCount) {\\n        index += dir;\\n\\n        var iterIndex = -1,\\n            value = array[index];\\n\\n        while (++iterIndex < iterLength) {\\n          var data = iteratees[iterIndex],\\n              iteratee = data.iteratee,\\n              type = data.type,\\n              computed = iteratee(value);\\n\\n          if (type == LAZY_MAP_FLAG) {\\n            value = computed;\\n          } else if (!computed) {\\n            if (type == LAZY_FILTER_FLAG) {\\n              continue outer;\\n            } else {\\n              break outer;\\n            }\\n          }\\n        }\\n        result[resIndex++] = value;\\n      }\\n      return result;\\n    }\\n\\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\\n    LazyWrapper.prototype.constructor = LazyWrapper;\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a hash object.\\n     *\\n     * @private\\n     * @constructor\\n     * @param {Array} [entries] The key-value pairs to cache.\\n     */\\n    function Hash(entries) {\\n      var index = -1,\\n          length = entries == null ? 0 : entries.length;\\n\\n      this.clear();\\n      while (++index < length) {\\n        var entry = entries[index];\\n        this.set(entry[0], entry[1]);\\n      }\\n    }\\n\\n    /**\\n     * Removes all key-value entries from the hash.\\n     *\\n     * @private\\n     * @name clear\\n     * @memberOf Hash\\n     */\\n    function hashClear() {\\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\\n      this.size = 0;\\n    }\\n\\n    /**\\n     * Removes `key` and its value from the hash.\\n     *\\n     * @private\\n     * @name delete\\n     * @memberOf Hash\\n     * @param {Object} hash The hash to modify.\\n     * @param {string} key The key of the value to remove.\\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\\n     */\\n    function hashDelete(key) {\\n      var result = this.has(key) && delete this.__data__[key];\\n      this.size -= result ? 1 : 0;\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the hash value for `key`.\\n     *\\n     * @private\\n     * @name get\\n     * @memberOf Hash\\n     * @param {string} key The key of the value to get.\\n     * @returns {*} Returns the entry value.\\n     */\\n    function hashGet(key) {\\n      var data = this.__data__;\\n      if (nativeCreate) {\\n        var result = data[key];\\n        return result === HASH_UNDEFINED ? undefined : result;\\n      }\\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\\n    }\\n\\n    /**\\n     * Checks if a hash value for `key` exists.\\n     *\\n     * @private\\n     * @name has\\n     * @memberOf Hash\\n     * @param {string} key The key of the entry to check.\\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\\n     */\\n    function hashHas(key) {\\n      var data = this.__data__;\\n      return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\\n    }\\n\\n    /**\\n     * Sets the hash `key` to `value`.\\n     *\\n     * @private\\n     * @name set\\n     * @memberOf Hash\\n     * @param {string} key The key of the value to set.\\n     * @param {*} value The value to set.\\n     * @returns {Object} Returns the hash instance.\\n     */\\n    function hashSet(key, value) {\\n      var data = this.__data__;\\n      this.size += this.has(key) ? 0 : 1;\\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\\n      return this;\\n    }\\n\\n    // Add methods to `Hash`.\\n    Hash.prototype.clear = hashClear;\\n    Hash.prototype['delete'] = hashDelete;\\n    Hash.prototype.get = hashGet;\\n    Hash.prototype.has = hashHas;\\n    Hash.prototype.set = hashSet;\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates an list cache object.\\n     *\\n     * @private\\n     * @constructor\\n     * @param {Array} [entries] The key-value pairs to cache.\\n     */\\n    function ListCache(entries) {\\n      var index = -1,\\n          length = entries == null ? 0 : entries.length;\\n\\n      this.clear();\\n      while (++index < length) {\\n        var entry = entries[index];\\n        this.set(entry[0], entry[1]);\\n      }\\n    }\\n\\n    /**\\n     * Removes all key-value entries from the list cache.\\n     *\\n     * @private\\n     * @name clear\\n     * @memberOf ListCache\\n     */\\n    function listCacheClear() {\\n      this.__data__ = [];\\n      this.size = 0;\\n    }\\n\\n    /**\\n     * Removes `key` and its value from the list cache.\\n     *\\n     * @private\\n     * @name delete\\n     * @memberOf ListCache\\n     * @param {string} key The key of the value to remove.\\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\\n     */\\n    function listCacheDelete(key) {\\n      var data = this.__data__,\\n          index = assocIndexOf(data, key);\\n\\n      if (index < 0) {\\n        return false;\\n      }\\n      var lastIndex = data.length - 1;\\n      if (index == lastIndex) {\\n        data.pop();\\n      } else {\\n        splice.call(data, index, 1);\\n      }\\n      --this.size;\\n      return true;\\n    }\\n\\n    /**\\n     * Gets the list cache value for `key`.\\n     *\\n     * @private\\n     * @name get\\n     * @memberOf ListCache\\n     * @param {string} key The key of the value to get.\\n     * @returns {*} Returns the entry value.\\n     */\\n    function listCacheGet(key) {\\n      var data = this.__data__,\\n          index = assocIndexOf(data, key);\\n\\n      return index < 0 ? undefined : data[index][1];\\n    }\\n\\n    /**\\n     * Checks if a list cache value for `key` exists.\\n     *\\n     * @private\\n     * @name has\\n     * @memberOf ListCache\\n     * @param {string} key The key of the entry to check.\\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\\n     */\\n    function listCacheHas(key) {\\n      return assocIndexOf(this.__data__, key) > -1;\\n    }\\n\\n    /**\\n     * Sets the list cache `key` to `value`.\\n     *\\n     * @private\\n     * @name set\\n     * @memberOf ListCache\\n     * @param {string} key The key of the value to set.\\n     * @param {*} value The value to set.\\n     * @returns {Object} Returns the list cache instance.\\n     */\\n    function listCacheSet(key, value) {\\n      var data = this.__data__,\\n          index = assocIndexOf(data, key);\\n\\n      if (index < 0) {\\n        ++this.size;\\n        data.push([key, value]);\\n      } else {\\n        data[index][1] = value;\\n      }\\n      return this;\\n    }\\n\\n    // Add methods to `ListCache`.\\n    ListCache.prototype.clear = listCacheClear;\\n    ListCache.prototype['delete'] = listCacheDelete;\\n    ListCache.prototype.get = listCacheGet;\\n    ListCache.prototype.has = listCacheHas;\\n    ListCache.prototype.set = listCacheSet;\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a map cache object to store key-value pairs.\\n     *\\n     * @private\\n     * @constructor\\n     * @param {Array} [entries] The key-value pairs to cache.\\n     */\\n    function MapCache(entries) {\\n      var index = -1,\\n          length = entries == null ? 0 : entries.length;\\n\\n      this.clear();\\n      while (++index < length) {\\n        var entry = entries[index];\\n        this.set(entry[0], entry[1]);\\n      }\\n    }\\n\\n    /**\\n     * Removes all key-value entries from the map.\\n     *\\n     * @private\\n     * @name clear\\n     * @memberOf MapCache\\n     */\\n    function mapCacheClear() {\\n      this.size = 0;\\n      this.__data__ = {\\n        'hash': new Hash,\\n        'map': new (Map || ListCache),\\n        'string': new Hash\\n      };\\n    }\\n\\n    /**\\n     * Removes `key` and its value from the map.\\n     *\\n     * @private\\n     * @name delete\\n     * @memberOf MapCache\\n     * @param {string} key The key of the value to remove.\\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\\n     */\\n    function mapCacheDelete(key) {\\n      var result = getMapData(this, key)['delete'](key);\\n      this.size -= result ? 1 : 0;\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the map value for `key`.\\n     *\\n     * @private\\n     * @name get\\n     * @memberOf MapCache\\n     * @param {string} key The key of the value to get.\\n     * @returns {*} Returns the entry value.\\n     */\\n    function mapCacheGet(key) {\\n      return getMapData(this, key).get(key);\\n    }\\n\\n    /**\\n     * Checks if a map value for `key` exists.\\n     *\\n     * @private\\n     * @name has\\n     * @memberOf MapCache\\n     * @param {string} key The key of the entry to check.\\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\\n     */\\n    function mapCacheHas(key) {\\n      return getMapData(this, key).has(key);\\n    }\\n\\n    /**\\n     * Sets the map `key` to `value`.\\n     *\\n     * @private\\n     * @name set\\n     * @memberOf MapCache\\n     * @param {string} key The key of the value to set.\\n     * @param {*} value The value to set.\\n     * @returns {Object} Returns the map cache instance.\\n     */\\n    function mapCacheSet(key, value) {\\n      var data = getMapData(this, key),\\n          size = data.size;\\n\\n      data.set(key, value);\\n      this.size += data.size == size ? 0 : 1;\\n      return this;\\n    }\\n\\n    // Add methods to `MapCache`.\\n    MapCache.prototype.clear = mapCacheClear;\\n    MapCache.prototype['delete'] = mapCacheDelete;\\n    MapCache.prototype.get = mapCacheGet;\\n    MapCache.prototype.has = mapCacheHas;\\n    MapCache.prototype.set = mapCacheSet;\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     *\\n     * Creates an array cache object to store unique values.\\n     *\\n     * @private\\n     * @constructor\\n     * @param {Array} [values] The values to cache.\\n     */\\n    function SetCache(values) {\\n      var index = -1,\\n          length = values == null ? 0 : values.length;\\n\\n      this.__data__ = new MapCache;\\n      while (++index < length) {\\n        this.add(values[index]);\\n      }\\n    }\\n\\n    /**\\n     * Adds `value` to the array cache.\\n     *\\n     * @private\\n     * @name add\\n     * @memberOf SetCache\\n     * @alias push\\n     * @param {*} value The value to cache.\\n     * @returns {Object} Returns the cache instance.\\n     */\\n    function setCacheAdd(value) {\\n      this.__data__.set(value, HASH_UNDEFINED);\\n      return this;\\n    }\\n\\n    /**\\n     * Checks if `value` is in the array cache.\\n     *\\n     * @private\\n     * @name has\\n     * @memberOf SetCache\\n     * @param {*} value The value to search for.\\n     * @returns {number} Returns `true` if `value` is found, else `false`.\\n     */\\n    function setCacheHas(value) {\\n      return this.__data__.has(value);\\n    }\\n\\n    // Add methods to `SetCache`.\\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\\n    SetCache.prototype.has = setCacheHas;\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a stack cache object to store key-value pairs.\\n     *\\n     * @private\\n     * @constructor\\n     * @param {Array} [entries] The key-value pairs to cache.\\n     */\\n    function Stack(entries) {\\n      var data = this.__data__ = new ListCache(entries);\\n      this.size = data.size;\\n    }\\n\\n    /**\\n     * Removes all key-value entries from the stack.\\n     *\\n     * @private\\n     * @name clear\\n     * @memberOf Stack\\n     */\\n    function stackClear() {\\n      this.__data__ = new ListCache;\\n      this.size = 0;\\n    }\\n\\n    /**\\n     * Removes `key` and its value from the stack.\\n     *\\n     * @private\\n     * @name delete\\n     * @memberOf Stack\\n     * @param {string} key The key of the value to remove.\\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\\n     */\\n    function stackDelete(key) {\\n      var data = this.__data__,\\n          result = data['delete'](key);\\n\\n      this.size = data.size;\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the stack value for `key`.\\n     *\\n     * @private\\n     * @name get\\n     * @memberOf Stack\\n     * @param {string} key The key of the value to get.\\n     * @returns {*} Returns the entry value.\\n     */\\n    function stackGet(key) {\\n      return this.__data__.get(key);\\n    }\\n\\n    /**\\n     * Checks if a stack value for `key` exists.\\n     *\\n     * @private\\n     * @name has\\n     * @memberOf Stack\\n     * @param {string} key The key of the entry to check.\\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\\n     */\\n    function stackHas(key) {\\n      return this.__data__.has(key);\\n    }\\n\\n    /**\\n     * Sets the stack `key` to `value`.\\n     *\\n     * @private\\n     * @name set\\n     * @memberOf Stack\\n     * @param {string} key The key of the value to set.\\n     * @param {*} value The value to set.\\n     * @returns {Object} Returns the stack cache instance.\\n     */\\n    function stackSet(key, value) {\\n      var data = this.__data__;\\n      if (data instanceof ListCache) {\\n        var pairs = data.__data__;\\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\\n          pairs.push([key, value]);\\n          this.size = ++data.size;\\n          return this;\\n        }\\n        data = this.__data__ = new MapCache(pairs);\\n      }\\n      data.set(key, value);\\n      this.size = data.size;\\n      return this;\\n    }\\n\\n    // Add methods to `Stack`.\\n    Stack.prototype.clear = stackClear;\\n    Stack.prototype['delete'] = stackDelete;\\n    Stack.prototype.get = stackGet;\\n    Stack.prototype.has = stackHas;\\n    Stack.prototype.set = stackSet;\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates an array of the enumerable property names of the array-like `value`.\\n     *\\n     * @private\\n     * @param {*} value The value to query.\\n     * @param {boolean} inherited Specify returning inherited property names.\\n     * @returns {Array} Returns the array of property names.\\n     */\\n    function arrayLikeKeys(value, inherited) {\\n      var isArr = isArray(value),\\n          isArg = !isArr && isArguments(value),\\n          isBuff = !isArr && !isArg && isBuffer(value),\\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\\n          skipIndexes = isArr || isArg || isBuff || isType,\\n          result = skipIndexes ? baseTimes(value.length, String) : [],\\n          length = result.length;\\n\\n      for (var key in value) {\\n        if ((inherited || hasOwnProperty.call(value, key)) &&\\n            !(skipIndexes && (\\n               // Safari 9 has enumerable `arguments.length` in strict mode.\\n               key == 'length' ||\\n               // Node.js 0.10 has enumerable non-index properties on buffers.\\n               (isBuff && (key == 'offset' || key == 'parent')) ||\\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\\n               // Skip index properties.\\n               isIndex(key, length)\\n            ))) {\\n          result.push(key);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * A specialized version of `_.sample` for arrays.\\n     *\\n     * @private\\n     * @param {Array} array The array to sample.\\n     * @returns {*} Returns the random element.\\n     */\\n    function arraySample(array) {\\n      var length = array.length;\\n      return length ? array[baseRandom(0, length - 1)] : undefined;\\n    }\\n\\n    /**\\n     * A specialized version of `_.sampleSize` for arrays.\\n     *\\n     * @private\\n     * @param {Array} array The array to sample.\\n     * @param {number} n The number of elements to sample.\\n     * @returns {Array} Returns the random elements.\\n     */\\n    function arraySampleSize(array, n) {\\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\\n    }\\n\\n    /**\\n     * A specialized version of `_.shuffle` for arrays.\\n     *\\n     * @private\\n     * @param {Array} array The array to shuffle.\\n     * @returns {Array} Returns the new shuffled array.\\n     */\\n    function arrayShuffle(array) {\\n      return shuffleSelf(copyArray(array));\\n    }\\n\\n    /**\\n     * Used by `_.defaults` to customize its `_.assignIn` use.\\n     *\\n     * @private\\n     * @param {*} objValue The destination value.\\n     * @param {*} srcValue The source value.\\n     * @param {string} key The key of the property to assign.\\n     * @param {Object} object The parent object of `objValue`.\\n     * @returns {*} Returns the value to assign.\\n     */\\n    function assignInDefaults(objValue, srcValue, key, object) {\\n      if (objValue === undefined ||\\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\\n        return srcValue;\\n      }\\n      return objValue;\\n    }\\n\\n    /**\\n     * This function is like `assignValue` except that it doesn't assign\\n     * `undefined` values.\\n     *\\n     * @private\\n     * @param {Object} object The object to modify.\\n     * @param {string} key The key of the property to assign.\\n     * @param {*} value The value to assign.\\n     */\\n    function assignMergeValue(object, key, value) {\\n      if ((value !== undefined && !eq(object[key], value)) ||\\n          (value === undefined && !(key in object))) {\\n        baseAssignValue(object, key, value);\\n      }\\n    }\\n\\n    /**\\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * @private\\n     * @param {Object} object The object to modify.\\n     * @param {string} key The key of the property to assign.\\n     * @param {*} value The value to assign.\\n     */\\n    function assignValue(object, key, value) {\\n      var objValue = object[key];\\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\\n          (value === undefined && !(key in object))) {\\n        baseAssignValue(object, key, value);\\n      }\\n    }\\n\\n    /**\\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\\n     *\\n     * @private\\n     * @param {Array} array The array to inspect.\\n     * @param {*} key The key to search for.\\n     * @returns {number} Returns the index of the matched value, else `-1`.\\n     */\\n    function assocIndexOf(array, key) {\\n      var length = array.length;\\n      while (length--) {\\n        if (eq(array[length][0], key)) {\\n          return length;\\n        }\\n      }\\n      return -1;\\n    }\\n\\n    /**\\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\\n     * by `iteratee` and values set by `setter`.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} setter The function to set `accumulator` values.\\n     * @param {Function} iteratee The iteratee to transform keys.\\n     * @param {Object} accumulator The initial aggregated object.\\n     * @returns {Function} Returns `accumulator`.\\n     */\\n    function baseAggregator(collection, setter, iteratee, accumulator) {\\n      baseEach(collection, function(value, key, collection) {\\n        setter(accumulator, value, iteratee(value), collection);\\n      });\\n      return accumulator;\\n    }\\n\\n    /**\\n     * The base implementation of `_.assign` without support for multiple sources\\n     * or `customizer` functions.\\n     *\\n     * @private\\n     * @param {Object} object The destination object.\\n     * @param {Object} source The source object.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseAssign(object, source) {\\n      return object && copyObject(source, keys(source), object);\\n    }\\n\\n    /**\\n     * The base implementation of `_.assignIn` without support for multiple sources\\n     * or `customizer` functions.\\n     *\\n     * @private\\n     * @param {Object} object The destination object.\\n     * @param {Object} source The source object.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseAssignIn(object, source) {\\n      return object && copyObject(source, keysIn(source), object);\\n    }\\n\\n    /**\\n     * The base implementation of `assignValue` and `assignMergeValue` without\\n     * value checks.\\n     *\\n     * @private\\n     * @param {Object} object The object to modify.\\n     * @param {string} key The key of the property to assign.\\n     * @param {*} value The value to assign.\\n     */\\n    function baseAssignValue(object, key, value) {\\n      if (key == '__proto__' && defineProperty) {\\n        defineProperty(object, key, {\\n          'configurable': true,\\n          'enumerable': true,\\n          'value': value,\\n          'writable': true\\n        });\\n      } else {\\n        object[key] = value;\\n      }\\n    }\\n\\n    /**\\n     * The base implementation of `_.at` without support for individual paths.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {string[]} paths The property paths to pick.\\n     * @returns {Array} Returns the picked elements.\\n     */\\n    function baseAt(object, paths) {\\n      var index = -1,\\n          length = paths.length,\\n          result = Array(length),\\n          skip = object == null;\\n\\n      while (++index < length) {\\n        result[index] = skip ? undefined : get(object, paths[index]);\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\\n     *\\n     * @private\\n     * @param {number} number The number to clamp.\\n     * @param {number} [lower] The lower bound.\\n     * @param {number} upper The upper bound.\\n     * @returns {number} Returns the clamped number.\\n     */\\n    function baseClamp(number, lower, upper) {\\n      if (number === number) {\\n        if (upper !== undefined) {\\n          number = number <= upper ? number : upper;\\n        }\\n        if (lower !== undefined) {\\n          number = number >= lower ? number : lower;\\n        }\\n      }\\n      return number;\\n    }\\n\\n    /**\\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\\n     * traversed objects.\\n     *\\n     * @private\\n     * @param {*} value The value to clone.\\n     * @param {boolean} bitmask The bitmask flags.\\n     *  1 - Deep clone\\n     *  2 - Flatten inherited properties\\n     *  4 - Clone symbols\\n     * @param {Function} [customizer] The function to customize cloning.\\n     * @param {string} [key] The key of `value`.\\n     * @param {Object} [object] The parent object of `value`.\\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\\n     * @returns {*} Returns the cloned value.\\n     */\\n    function baseClone(value, bitmask, customizer, key, object, stack) {\\n      var result,\\n          isDeep = bitmask & CLONE_DEEP_FLAG,\\n          isFlat = bitmask & CLONE_FLAT_FLAG,\\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\\n\\n      if (customizer) {\\n        result = object ? customizer(value, key, object, stack) : customizer(value);\\n      }\\n      if (result !== undefined) {\\n        return result;\\n      }\\n      if (!isObject(value)) {\\n        return value;\\n      }\\n      var isArr = isArray(value);\\n      if (isArr) {\\n        result = initCloneArray(value);\\n        if (!isDeep) {\\n          return copyArray(value, result);\\n        }\\n      } else {\\n        var tag = getTag(value),\\n            isFunc = tag == funcTag || tag == genTag;\\n\\n        if (isBuffer(value)) {\\n          return cloneBuffer(value, isDeep);\\n        }\\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\\n          if (!isDeep) {\\n            return isFlat\\n              ? copySymbolsIn(value, baseAssignIn(result, value))\\n              : copySymbols(value, baseAssign(result, value));\\n          }\\n        } else {\\n          if (!cloneableTags[tag]) {\\n            return object ? value : {};\\n          }\\n          result = initCloneByTag(value, tag, baseClone, isDeep);\\n        }\\n      }\\n      // Check for circular references and return its corresponding clone.\\n      stack || (stack = new Stack);\\n      var stacked = stack.get(value);\\n      if (stacked) {\\n        return stacked;\\n      }\\n      stack.set(value, result);\\n\\n      var keysFunc = isFull\\n        ? (isFlat ? getAllKeysIn : getAllKeys)\\n        : (isFlat ? keysIn : keys);\\n\\n      var props = isArr ? undefined : keysFunc(value);\\n      arrayEach(props || value, function(subValue, key) {\\n        if (props) {\\n          key = subValue;\\n          subValue = value[key];\\n        }\\n        // Recursively populate clone (susceptible to call stack limits).\\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.conforms` which doesn't clone `source`.\\n     *\\n     * @private\\n     * @param {Object} source The object of property predicates to conform to.\\n     * @returns {Function} Returns the new spec function.\\n     */\\n    function baseConforms(source) {\\n      var props = keys(source);\\n      return function(object) {\\n        return baseConformsTo(object, source, props);\\n      };\\n    }\\n\\n    /**\\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\\n     *\\n     * @private\\n     * @param {Object} object The object to inspect.\\n     * @param {Object} source The object of property predicates to conform to.\\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\\n     */\\n    function baseConformsTo(object, source, props) {\\n      var length = props.length;\\n      if (object == null) {\\n        return !length;\\n      }\\n      object = Object(object);\\n      while (length--) {\\n        var key = props[length],\\n            predicate = source[key],\\n            value = object[key];\\n\\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    }\\n\\n    /**\\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\\n     * to provide to `func`.\\n     *\\n     * @private\\n     * @param {Function} func The function to delay.\\n     * @param {number} wait The number of milliseconds to delay invocation.\\n     * @param {Array} args The arguments to provide to `func`.\\n     * @returns {number|Object} Returns the timer id or timeout object.\\n     */\\n    function baseDelay(func, wait, args) {\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\\n    }\\n\\n    /**\\n     * The base implementation of methods like `_.difference` without support\\n     * for excluding multiple arrays or iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array} array The array to inspect.\\n     * @param {Array} values The values to exclude.\\n     * @param {Function} [iteratee] The iteratee invoked per element.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new array of filtered values.\\n     */\\n    function baseDifference(array, values, iteratee, comparator) {\\n      var index = -1,\\n          includes = arrayIncludes,\\n          isCommon = true,\\n          length = array.length,\\n          result = [],\\n          valuesLength = values.length;\\n\\n      if (!length) {\\n        return result;\\n      }\\n      if (iteratee) {\\n        values = arrayMap(values, baseUnary(iteratee));\\n      }\\n      if (comparator) {\\n        includes = arrayIncludesWith;\\n        isCommon = false;\\n      }\\n      else if (values.length >= LARGE_ARRAY_SIZE) {\\n        includes = cacheHas;\\n        isCommon = false;\\n        values = new SetCache(values);\\n      }\\n      outer:\\n      while (++index < length) {\\n        var value = array[index],\\n            computed = iteratee == null ? value : iteratee(value);\\n\\n        value = (comparator || value !== 0) ? value : 0;\\n        if (isCommon && computed === computed) {\\n          var valuesIndex = valuesLength;\\n          while (valuesIndex--) {\\n            if (values[valuesIndex] === computed) {\\n              continue outer;\\n            }\\n          }\\n          result.push(value);\\n        }\\n        else if (!includes(values, computed, comparator)) {\\n          result.push(value);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array|Object} Returns `collection`.\\n     */\\n    var baseEach = createBaseEach(baseForOwn);\\n\\n    /**\\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array|Object} Returns `collection`.\\n     */\\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\\n\\n    /**\\n     * The base implementation of `_.every` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\\n     *  else `false`\\n     */\\n    function baseEvery(collection, predicate) {\\n      var result = true;\\n      baseEach(collection, function(value, index, collection) {\\n        result = !!predicate(value, index, collection);\\n        return result;\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\\n     * `comparator` to determine the extremum value.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} iteratee The iteratee invoked per iteration.\\n     * @param {Function} comparator The comparator used to compare values.\\n     * @returns {*} Returns the extremum value.\\n     */\\n    function baseExtremum(array, iteratee, comparator) {\\n      var index = -1,\\n          length = array.length;\\n\\n      while (++index < length) {\\n        var value = array[index],\\n            current = iteratee(value);\\n\\n        if (current != null && (computed === undefined\\n              ? (current === current && !isSymbol(current))\\n              : comparator(current, computed)\\n            )) {\\n          var computed = current,\\n              result = value;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.fill` without an iteratee call guard.\\n     *\\n     * @private\\n     * @param {Array} array The array to fill.\\n     * @param {*} value The value to fill `array` with.\\n     * @param {number} [start=0] The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function baseFill(array, value, start, end) {\\n      var length = array.length;\\n\\n      start = toInteger(start);\\n      if (start < 0) {\\n        start = -start > length ? 0 : (length + start);\\n      }\\n      end = (end === undefined || end > length) ? length : toInteger(end);\\n      if (end < 0) {\\n        end += length;\\n      }\\n      end = start > end ? 0 : toLength(end);\\n      while (start < end) {\\n        array[start++] = value;\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * The base implementation of `_.filter` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {Array} Returns the new filtered array.\\n     */\\n    function baseFilter(collection, predicate) {\\n      var result = [];\\n      baseEach(collection, function(value, index, collection) {\\n        if (predicate(value, index, collection)) {\\n          result.push(value);\\n        }\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.flatten` with support for restricting flattening.\\n     *\\n     * @private\\n     * @param {Array} array The array to flatten.\\n     * @param {number} depth The maximum recursion depth.\\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\\n     * @param {Array} [result=[]] The initial result value.\\n     * @returns {Array} Returns the new flattened array.\\n     */\\n    function baseFlatten(array, depth, predicate, isStrict, result) {\\n      var index = -1,\\n          length = array.length;\\n\\n      predicate || (predicate = isFlattenable);\\n      result || (result = []);\\n\\n      while (++index < length) {\\n        var value = array[index];\\n        if (depth > 0 && predicate(value)) {\\n          if (depth > 1) {\\n            // Recursively flatten arrays (susceptible to call stack limits).\\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\\n          } else {\\n            arrayPush(result, value);\\n          }\\n        } else if (!isStrict) {\\n          result[result.length] = value;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `baseForOwn` which iterates over `object`\\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {Function} keysFunc The function to get the keys of `object`.\\n     * @returns {Object} Returns `object`.\\n     */\\n    var baseFor = createBaseFor();\\n\\n    /**\\n     * This function is like `baseFor` except that it iterates over properties\\n     * in the opposite order.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {Function} keysFunc The function to get the keys of `object`.\\n     * @returns {Object} Returns `object`.\\n     */\\n    var baseForRight = createBaseFor(true);\\n\\n    /**\\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseForOwn(object, iteratee) {\\n      return object && baseFor(object, iteratee, keys);\\n    }\\n\\n    /**\\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseForOwnRight(object, iteratee) {\\n      return object && baseForRight(object, iteratee, keys);\\n    }\\n\\n    /**\\n     * The base implementation of `_.functions` which creates an array of\\n     * `object` function property names filtered from `props`.\\n     *\\n     * @private\\n     * @param {Object} object The object to inspect.\\n     * @param {Array} props The property names to filter.\\n     * @returns {Array} Returns the function names.\\n     */\\n    function baseFunctions(object, props) {\\n      return arrayFilter(props, function(key) {\\n        return isFunction(object[key]);\\n      });\\n    }\\n\\n    /**\\n     * The base implementation of `_.get` without support for default values.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path of the property to get.\\n     * @returns {*} Returns the resolved value.\\n     */\\n    function baseGet(object, path) {\\n      path = castPath(path, object);\\n\\n      var index = 0,\\n          length = path.length;\\n\\n      while (object != null && index < length) {\\n        object = object[toKey(path[index++])];\\n      }\\n      return (index && index == length) ? object : undefined;\\n    }\\n\\n    /**\\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\\n     * symbols of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {Function} keysFunc The function to get the keys of `object`.\\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\\n     * @returns {Array} Returns the array of property names and symbols.\\n     */\\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\\n      var result = keysFunc(object);\\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\\n    }\\n\\n    /**\\n     * The base implementation of `getTag` without fallbacks for buggy environments.\\n     *\\n     * @private\\n     * @param {*} value The value to query.\\n     * @returns {string} Returns the `toStringTag`.\\n     */\\n    function baseGetTag(value) {\\n      if (value == null) {\\n        return value === undefined ? undefinedTag : nullTag;\\n      }\\n      value = Object(value);\\n      return (symToStringTag && symToStringTag in value)\\n        ? getRawTag(value)\\n        : objectToString(value);\\n    }\\n\\n    /**\\n     * The base implementation of `_.gt` which doesn't coerce arguments.\\n     *\\n     * @private\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\\n     *  else `false`.\\n     */\\n    function baseGt(value, other) {\\n      return value > other;\\n    }\\n\\n    /**\\n     * The base implementation of `_.has` without support for deep paths.\\n     *\\n     * @private\\n     * @param {Object} [object] The object to query.\\n     * @param {Array|string} key The key to check.\\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\\n     */\\n    function baseHas(object, key) {\\n      return object != null && hasOwnProperty.call(object, key);\\n    }\\n\\n    /**\\n     * The base implementation of `_.hasIn` without support for deep paths.\\n     *\\n     * @private\\n     * @param {Object} [object] The object to query.\\n     * @param {Array|string} key The key to check.\\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\\n     */\\n    function baseHasIn(object, key) {\\n      return object != null && key in Object(object);\\n    }\\n\\n    /**\\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\\n     *\\n     * @private\\n     * @param {number} number The number to check.\\n     * @param {number} start The start of the range.\\n     * @param {number} end The end of the range.\\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\\n     */\\n    function baseInRange(number, start, end) {\\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\\n    }\\n\\n    /**\\n     * The base implementation of methods like `_.intersection`, without support\\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\\n     *\\n     * @private\\n     * @param {Array} arrays The arrays to inspect.\\n     * @param {Function} [iteratee] The iteratee invoked per element.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new array of shared values.\\n     */\\n    function baseIntersection(arrays, iteratee, comparator) {\\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\\n          length = arrays[0].length,\\n          othLength = arrays.length,\\n          othIndex = othLength,\\n          caches = Array(othLength),\\n          maxLength = Infinity,\\n          result = [];\\n\\n      while (othIndex--) {\\n        var array = arrays[othIndex];\\n        if (othIndex && iteratee) {\\n          array = arrayMap(array, baseUnary(iteratee));\\n        }\\n        maxLength = nativeMin(array.length, maxLength);\\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\\n          ? new SetCache(othIndex && array)\\n          : undefined;\\n      }\\n      array = arrays[0];\\n\\n      var index = -1,\\n          seen = caches[0];\\n\\n      outer:\\n      while (++index < length && result.length < maxLength) {\\n        var value = array[index],\\n            computed = iteratee ? iteratee(value) : value;\\n\\n        value = (comparator || value !== 0) ? value : 0;\\n        if (!(seen\\n              ? cacheHas(seen, computed)\\n              : includes(result, computed, comparator)\\n            )) {\\n          othIndex = othLength;\\n          while (--othIndex) {\\n            var cache = caches[othIndex];\\n            if (!(cache\\n                  ? cacheHas(cache, computed)\\n                  : includes(arrays[othIndex], computed, comparator))\\n                ) {\\n              continue outer;\\n            }\\n          }\\n          if (seen) {\\n            seen.push(computed);\\n          }\\n          result.push(value);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\\n     * `object` with values transformed by `iteratee` and set by `setter`.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} setter The function to set `accumulator` values.\\n     * @param {Function} iteratee The iteratee to transform values.\\n     * @param {Object} accumulator The initial inverted object.\\n     * @returns {Function} Returns `accumulator`.\\n     */\\n    function baseInverter(object, setter, iteratee, accumulator) {\\n      baseForOwn(object, function(value, key, object) {\\n        setter(accumulator, iteratee(value), key, object);\\n      });\\n      return accumulator;\\n    }\\n\\n    /**\\n     * The base implementation of `_.invoke` without support for individual\\n     * method arguments.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path of the method to invoke.\\n     * @param {Array} args The arguments to invoke the method with.\\n     * @returns {*} Returns the result of the invoked method.\\n     */\\n    function baseInvoke(object, path, args) {\\n      path = castPath(path, object);\\n      object = parent(object, path);\\n      var func = object == null ? object : object[toKey(last(path))];\\n      return func == null ? undefined : apply(func, object, args);\\n    }\\n\\n    /**\\n     * The base implementation of `_.isArguments`.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\\n     */\\n    function baseIsArguments(value) {\\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\\n     */\\n    function baseIsArrayBuffer(value) {\\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isDate` without Node.js optimizations.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\\n     */\\n    function baseIsDate(value) {\\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isEqual` which supports partial comparisons\\n     * and tracks traversed objects.\\n     *\\n     * @private\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @param {boolean} bitmask The bitmask flags.\\n     *  1 - Unordered comparison\\n     *  2 - Partial comparison\\n     * @param {Function} [customizer] The function to customize comparisons.\\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\\n     */\\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\\n      if (value === other) {\\n        return true;\\n      }\\n      if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\\n        return value !== value && other !== other;\\n      }\\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\\n    }\\n\\n    /**\\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\\n     * deep comparisons and tracks traversed objects enabling objects with circular\\n     * references to be compared.\\n     *\\n     * @private\\n     * @param {Object} object The object to compare.\\n     * @param {Object} other The other object to compare.\\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\\n     * @param {Function} customizer The function to customize comparisons.\\n     * @param {Function} equalFunc The function to determine equivalents of values.\\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\\n     */\\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\\n      var objIsArr = isArray(object),\\n          othIsArr = isArray(other),\\n          objTag = arrayTag,\\n          othTag = arrayTag;\\n\\n      if (!objIsArr) {\\n        objTag = getTag(object);\\n        objTag = objTag == argsTag ? objectTag : objTag;\\n      }\\n      if (!othIsArr) {\\n        othTag = getTag(other);\\n        othTag = othTag == argsTag ? objectTag : othTag;\\n      }\\n      var objIsObj = objTag == objectTag,\\n          othIsObj = othTag == objectTag,\\n          isSameTag = objTag == othTag;\\n\\n      if (isSameTag && isBuffer(object)) {\\n        if (!isBuffer(other)) {\\n          return false;\\n        }\\n        objIsArr = true;\\n        objIsObj = false;\\n      }\\n      if (isSameTag && !objIsObj) {\\n        stack || (stack = new Stack);\\n        return (objIsArr || isTypedArray(object))\\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\\n      }\\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\\n\\n        if (objIsWrapped || othIsWrapped) {\\n          var objUnwrapped = objIsWrapped ? object.value() : object,\\n              othUnwrapped = othIsWrapped ? other.value() : other;\\n\\n          stack || (stack = new Stack);\\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\\n        }\\n      }\\n      if (!isSameTag) {\\n        return false;\\n      }\\n      stack || (stack = new Stack);\\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\\n    }\\n\\n    /**\\n     * The base implementation of `_.isMap` without Node.js optimizations.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\\n     */\\n    function baseIsMap(value) {\\n      return isObjectLike(value) && getTag(value) == mapTag;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Object} object The object to inspect.\\n     * @param {Object} source The object of property values to match.\\n     * @param {Array} matchData The property names, values, and compare flags to match.\\n     * @param {Function} [customizer] The function to customize comparisons.\\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\\n     */\\n    function baseIsMatch(object, source, matchData, customizer) {\\n      var index = matchData.length,\\n          length = index,\\n          noCustomizer = !customizer;\\n\\n      if (object == null) {\\n        return !length;\\n      }\\n      object = Object(object);\\n      while (index--) {\\n        var data = matchData[index];\\n        if ((noCustomizer && data[2])\\n              ? data[1] !== object[data[0]]\\n              : !(data[0] in object)\\n            ) {\\n          return false;\\n        }\\n      }\\n      while (++index < length) {\\n        data = matchData[index];\\n        var key = data[0],\\n            objValue = object[key],\\n            srcValue = data[1];\\n\\n        if (noCustomizer && data[2]) {\\n          if (objValue === undefined && !(key in object)) {\\n            return false;\\n          }\\n        } else {\\n          var stack = new Stack;\\n          if (customizer) {\\n            var result = customizer(objValue, srcValue, key, object, source, stack);\\n          }\\n          if (!(result === undefined\\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\\n                : result\\n              )) {\\n            return false;\\n          }\\n        }\\n      }\\n      return true;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isNative` without bad shim checks.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a native function,\\n     *  else `false`.\\n     */\\n    function baseIsNative(value) {\\n      if (!isObject(value) || isMasked(value)) {\\n        return false;\\n      }\\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\\n      return pattern.test(toSource(value));\\n    }\\n\\n    /**\\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\\n     */\\n    function baseIsRegExp(value) {\\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isSet` without Node.js optimizations.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\\n     */\\n    function baseIsSet(value) {\\n      return isObjectLike(value) && getTag(value) == setTag;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\\n     */\\n    function baseIsTypedArray(value) {\\n      return isObjectLike(value) &&\\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\\n    }\\n\\n    /**\\n     * The base implementation of `_.iteratee`.\\n     *\\n     * @private\\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\\n     * @returns {Function} Returns the iteratee.\\n     */\\n    function baseIteratee(value) {\\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\\n      if (typeof value == 'function') {\\n        return value;\\n      }\\n      if (value == null) {\\n        return identity;\\n      }\\n      if (typeof value == 'object') {\\n        return isArray(value)\\n          ? baseMatchesProperty(value[0], value[1])\\n          : baseMatches(value);\\n      }\\n      return property(value);\\n    }\\n\\n    /**\\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names.\\n     */\\n    function baseKeys(object) {\\n      if (!isPrototype(object)) {\\n        return nativeKeys(object);\\n      }\\n      var result = [];\\n      for (var key in Object(object)) {\\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\\n          result.push(key);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names.\\n     */\\n    function baseKeysIn(object) {\\n      if (!isObject(object)) {\\n        return nativeKeysIn(object);\\n      }\\n      var isProto = isPrototype(object),\\n          result = [];\\n\\n      for (var key in object) {\\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\\n          result.push(key);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.lt` which doesn't coerce arguments.\\n     *\\n     * @private\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\\n     *  else `false`.\\n     */\\n    function baseLt(value, other) {\\n      return value < other;\\n    }\\n\\n    /**\\n     * The base implementation of `_.map` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array} Returns the new mapped array.\\n     */\\n    function baseMap(collection, iteratee) {\\n      var index = -1,\\n          result = isArrayLike(collection) ? Array(collection.length) : [];\\n\\n      baseEach(collection, function(value, key, collection) {\\n        result[++index] = iteratee(value, key, collection);\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.matches` which doesn't clone `source`.\\n     *\\n     * @private\\n     * @param {Object} source The object of property values to match.\\n     * @returns {Function} Returns the new spec function.\\n     */\\n    function baseMatches(source) {\\n      var matchData = getMatchData(source);\\n      if (matchData.length == 1 && matchData[0][2]) {\\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\\n      }\\n      return function(object) {\\n        return object === source || baseIsMatch(object, source, matchData);\\n      };\\n    }\\n\\n    /**\\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\\n     *\\n     * @private\\n     * @param {string} path The path of the property to get.\\n     * @param {*} srcValue The value to match.\\n     * @returns {Function} Returns the new spec function.\\n     */\\n    function baseMatchesProperty(path, srcValue) {\\n      if (isKey(path) && isStrictComparable(srcValue)) {\\n        return matchesStrictComparable(toKey(path), srcValue);\\n      }\\n      return function(object) {\\n        var objValue = get(object, path);\\n        return (objValue === undefined && objValue === srcValue)\\n          ? hasIn(object, path)\\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\\n      };\\n    }\\n\\n    /**\\n     * The base implementation of `_.merge` without support for multiple sources.\\n     *\\n     * @private\\n     * @param {Object} object The destination object.\\n     * @param {Object} source The source object.\\n     * @param {number} srcIndex The index of `source`.\\n     * @param {Function} [customizer] The function to customize merged values.\\n     * @param {Object} [stack] Tracks traversed source values and their merged\\n     *  counterparts.\\n     */\\n    function baseMerge(object, source, srcIndex, customizer, stack) {\\n      if (object === source) {\\n        return;\\n      }\\n      baseFor(source, function(srcValue, key) {\\n        if (isObject(srcValue)) {\\n          stack || (stack = new Stack);\\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\\n        }\\n        else {\\n          var newValue = customizer\\n            ? customizer(object[key], srcValue, (key + ''), object, source, stack)\\n            : undefined;\\n\\n          if (newValue === undefined) {\\n            newValue = srcValue;\\n          }\\n          assignMergeValue(object, key, newValue);\\n        }\\n      }, keysIn);\\n    }\\n\\n    /**\\n     * A specialized version of `baseMerge` for arrays and objects which performs\\n     * deep merges and tracks traversed objects enabling objects with circular\\n     * references to be merged.\\n     *\\n     * @private\\n     * @param {Object} object The destination object.\\n     * @param {Object} source The source object.\\n     * @param {string} key The key of the value to merge.\\n     * @param {number} srcIndex The index of `source`.\\n     * @param {Function} mergeFunc The function to merge values.\\n     * @param {Function} [customizer] The function to customize assigned values.\\n     * @param {Object} [stack] Tracks traversed source values and their merged\\n     *  counterparts.\\n     */\\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\\n      var objValue = object[key],\\n          srcValue = source[key],\\n          stacked = stack.get(srcValue);\\n\\n      if (stacked) {\\n        assignMergeValue(object, key, stacked);\\n        return;\\n      }\\n      var newValue = customizer\\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\\n        : undefined;\\n\\n      var isCommon = newValue === undefined;\\n\\n      if (isCommon) {\\n        var isArr = isArray(srcValue),\\n            isBuff = !isArr && isBuffer(srcValue),\\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\\n\\n        newValue = srcValue;\\n        if (isArr || isBuff || isTyped) {\\n          if (isArray(objValue)) {\\n            newValue = objValue;\\n          }\\n          else if (isArrayLikeObject(objValue)) {\\n            newValue = copyArray(objValue);\\n          }\\n          else if (isBuff) {\\n            isCommon = false;\\n            newValue = cloneBuffer(srcValue, true);\\n          }\\n          else if (isTyped) {\\n            isCommon = false;\\n            newValue = cloneTypedArray(srcValue, true);\\n          }\\n          else {\\n            newValue = [];\\n          }\\n        }\\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\\n          newValue = objValue;\\n          if (isArguments(objValue)) {\\n            newValue = toPlainObject(objValue);\\n          }\\n          else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {\\n            newValue = initCloneObject(srcValue);\\n          }\\n        }\\n        else {\\n          isCommon = false;\\n        }\\n      }\\n      if (isCommon) {\\n        // Recursively merge objects and arrays (susceptible to call stack limits).\\n        stack.set(srcValue, newValue);\\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\\n        stack['delete'](srcValue);\\n      }\\n      assignMergeValue(object, key, newValue);\\n    }\\n\\n    /**\\n     * The base implementation of `_.nth` which doesn't coerce arguments.\\n     *\\n     * @private\\n     * @param {Array} array The array to query.\\n     * @param {number} n The index of the element to return.\\n     * @returns {*} Returns the nth element of `array`.\\n     */\\n    function baseNth(array, n) {\\n      var length = array.length;\\n      if (!length) {\\n        return;\\n      }\\n      n += n < 0 ? length : 0;\\n      return isIndex(n, length) ? array[n] : undefined;\\n    }\\n\\n    /**\\n     * The base implementation of `_.orderBy` without param guards.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\\n     * @param {string[]} orders The sort orders of `iteratees`.\\n     * @returns {Array} Returns the new sorted array.\\n     */\\n    function baseOrderBy(collection, iteratees, orders) {\\n      var index = -1;\\n      iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\\n\\n      var result = baseMap(collection, function(value, key, collection) {\\n        var criteria = arrayMap(iteratees, function(iteratee) {\\n          return iteratee(value);\\n        });\\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\\n      });\\n\\n      return baseSortBy(result, function(object, other) {\\n        return compareMultiple(object, other, orders);\\n      });\\n    }\\n\\n    /**\\n     * The base implementation of `_.pick` without support for individual\\n     * property identifiers.\\n     *\\n     * @private\\n     * @param {Object} object The source object.\\n     * @param {string[]} paths The property paths to pick.\\n     * @returns {Object} Returns the new object.\\n     */\\n    function basePick(object, paths) {\\n      object = Object(object);\\n      return basePickBy(object, paths, function(value, path) {\\n        return hasIn(object, path);\\n      });\\n    }\\n\\n    /**\\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Object} object The source object.\\n     * @param {string[]} paths The property paths to pick.\\n     * @param {Function} predicate The function invoked per property.\\n     * @returns {Object} Returns the new object.\\n     */\\n    function basePickBy(object, paths, predicate) {\\n      var index = -1,\\n          length = paths.length,\\n          result = {};\\n\\n      while (++index < length) {\\n        var path = paths[index],\\n            value = baseGet(object, path);\\n\\n        if (predicate(value, path)) {\\n          baseSet(result, castPath(path, object), value);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * A specialized version of `baseProperty` which supports deep paths.\\n     *\\n     * @private\\n     * @param {Array|string} path The path of the property to get.\\n     * @returns {Function} Returns the new accessor function.\\n     */\\n    function basePropertyDeep(path) {\\n      return function(object) {\\n        return baseGet(object, path);\\n      };\\n    }\\n\\n    /**\\n     * The base implementation of `_.pullAllBy` without support for iteratee\\n     * shorthands.\\n     *\\n     * @private\\n     * @param {Array} array The array to modify.\\n     * @param {Array} values The values to remove.\\n     * @param {Function} [iteratee] The iteratee invoked per element.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function basePullAll(array, values, iteratee, comparator) {\\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\\n          index = -1,\\n          length = values.length,\\n          seen = array;\\n\\n      if (array === values) {\\n        values = copyArray(values);\\n      }\\n      if (iteratee) {\\n        seen = arrayMap(array, baseUnary(iteratee));\\n      }\\n      while (++index < length) {\\n        var fromIndex = 0,\\n            value = values[index],\\n            computed = iteratee ? iteratee(value) : value;\\n\\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\\n          if (seen !== array) {\\n            splice.call(seen, fromIndex, 1);\\n          }\\n          splice.call(array, fromIndex, 1);\\n        }\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * The base implementation of `_.pullAt` without support for individual\\n     * indexes or capturing the removed elements.\\n     *\\n     * @private\\n     * @param {Array} array The array to modify.\\n     * @param {number[]} indexes The indexes of elements to remove.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function basePullAt(array, indexes) {\\n      var length = array ? indexes.length : 0,\\n          lastIndex = length - 1;\\n\\n      while (length--) {\\n        var index = indexes[length];\\n        if (length == lastIndex || index !== previous) {\\n          var previous = index;\\n          if (isIndex(index)) {\\n            splice.call(array, index, 1);\\n          } else {\\n            baseUnset(array, index);\\n          }\\n        }\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * The base implementation of `_.random` without support for returning\\n     * floating-point numbers.\\n     *\\n     * @private\\n     * @param {number} lower The lower bound.\\n     * @param {number} upper The upper bound.\\n     * @returns {number} Returns the random number.\\n     */\\n    function baseRandom(lower, upper) {\\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\\n    }\\n\\n    /**\\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\\n     * coerce arguments.\\n     *\\n     * @private\\n     * @param {number} start The start of the range.\\n     * @param {number} end The end of the range.\\n     * @param {number} step The value to increment or decrement by.\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Array} Returns the range of numbers.\\n     */\\n    function baseRange(start, end, step, fromRight) {\\n      var index = -1,\\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\\n          result = Array(length);\\n\\n      while (length--) {\\n        result[fromRight ? length : ++index] = start;\\n        start += step;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\\n     *\\n     * @private\\n     * @param {string} string The string to repeat.\\n     * @param {number} n The number of times to repeat the string.\\n     * @returns {string} Returns the repeated string.\\n     */\\n    function baseRepeat(string, n) {\\n      var result = '';\\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\\n        return result;\\n      }\\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\\n      do {\\n        if (n % 2) {\\n          result += string;\\n        }\\n        n = nativeFloor(n / 2);\\n        if (n) {\\n          string += string;\\n        }\\n      } while (n);\\n\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\\n     *\\n     * @private\\n     * @param {Function} func The function to apply a rest parameter to.\\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\\n     * @returns {Function} Returns the new function.\\n     */\\n    function baseRest(func, start) {\\n      return setToString(overRest(func, start, identity), func + '');\\n    }\\n\\n    /**\\n     * The base implementation of `_.sample`.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to sample.\\n     * @returns {*} Returns the random element.\\n     */\\n    function baseSample(collection) {\\n      return arraySample(values(collection));\\n    }\\n\\n    /**\\n     * The base implementation of `_.sampleSize` without param guards.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to sample.\\n     * @param {number} n The number of elements to sample.\\n     * @returns {Array} Returns the random elements.\\n     */\\n    function baseSampleSize(collection, n) {\\n      var array = values(collection);\\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\\n    }\\n\\n    /**\\n     * The base implementation of `_.set`.\\n     *\\n     * @private\\n     * @param {Object} object The object to modify.\\n     * @param {Array|string} path The path of the property to set.\\n     * @param {*} value The value to set.\\n     * @param {Function} [customizer] The function to customize path creation.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseSet(object, path, value, customizer) {\\n      if (!isObject(object)) {\\n        return object;\\n      }\\n      path = castPath(path, object);\\n\\n      var index = -1,\\n          length = path.length,\\n          lastIndex = length - 1,\\n          nested = object;\\n\\n      while (nested != null && ++index < length) {\\n        var key = toKey(path[index]),\\n            newValue = value;\\n\\n        if (index != lastIndex) {\\n          var objValue = nested[key];\\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\\n          if (newValue === undefined) {\\n            newValue = isObject(objValue)\\n              ? objValue\\n              : (isIndex(path[index + 1]) ? [] : {});\\n          }\\n        }\\n        assignValue(nested, key, newValue);\\n        nested = nested[key];\\n      }\\n      return object;\\n    }\\n\\n    /**\\n     * The base implementation of `setData` without support for hot loop shorting.\\n     *\\n     * @private\\n     * @param {Function} func The function to associate metadata with.\\n     * @param {*} data The metadata.\\n     * @returns {Function} Returns `func`.\\n     */\\n    var baseSetData = !metaMap ? identity : function(func, data) {\\n      metaMap.set(func, data);\\n      return func;\\n    };\\n\\n    /**\\n     * The base implementation of `setToString` without support for hot loop shorting.\\n     *\\n     * @private\\n     * @param {Function} func The function to modify.\\n     * @param {Function} string The `toString` result.\\n     * @returns {Function} Returns `func`.\\n     */\\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\\n      return defineProperty(func, 'toString', {\\n        'configurable': true,\\n        'enumerable': false,\\n        'value': constant(string),\\n        'writable': true\\n      });\\n    };\\n\\n    /**\\n     * The base implementation of `_.shuffle`.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to shuffle.\\n     * @returns {Array} Returns the new shuffled array.\\n     */\\n    function baseShuffle(collection) {\\n      return shuffleSelf(values(collection));\\n    }\\n\\n    /**\\n     * The base implementation of `_.slice` without an iteratee call guard.\\n     *\\n     * @private\\n     * @param {Array} array The array to slice.\\n     * @param {number} [start=0] The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns the slice of `array`.\\n     */\\n    function baseSlice(array, start, end) {\\n      var index = -1,\\n          length = array.length;\\n\\n      if (start < 0) {\\n        start = -start > length ? 0 : (length + start);\\n      }\\n      end = end > length ? length : end;\\n      if (end < 0) {\\n        end += length;\\n      }\\n      length = start > end ? 0 : ((end - start) >>> 0);\\n      start >>>= 0;\\n\\n      var result = Array(length);\\n      while (++index < length) {\\n        result[index] = array[index + start];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.some` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\\n     *  else `false`.\\n     */\\n    function baseSome(collection, predicate) {\\n      var result;\\n\\n      baseEach(collection, function(value, index, collection) {\\n        result = predicate(value, index, collection);\\n        return !result;\\n      });\\n      return !!result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\\n     * performs a binary search of `array` to determine the index at which `value`\\n     * should be inserted into `array` in order to maintain its sort order.\\n     *\\n     * @private\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     */\\n    function baseSortedIndex(array, value, retHighest) {\\n      var low = 0,\\n          high = array == null ? low : array.length;\\n\\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\\n        while (low < high) {\\n          var mid = (low + high) >>> 1,\\n              computed = array[mid];\\n\\n          if (computed !== null && !isSymbol(computed) &&\\n              (retHighest ? (computed <= value) : (computed < value))) {\\n            low = mid + 1;\\n          } else {\\n            high = mid;\\n          }\\n        }\\n        return high;\\n      }\\n      return baseSortedIndexBy(array, value, identity, retHighest);\\n    }\\n\\n    /**\\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\\n     * which invokes `iteratee` for `value` and each element of `array` to compute\\n     * their sort ranking. The iteratee is invoked with one argument; (value).\\n     *\\n     * @private\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @param {Function} iteratee The iteratee invoked per element.\\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     */\\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\\n      value = iteratee(value);\\n\\n      var low = 0,\\n          high = array == null ? 0 : array.length,\\n          valIsNaN = value !== value,\\n          valIsNull = value === null,\\n          valIsSymbol = isSymbol(value),\\n          valIsUndefined = value === undefined;\\n\\n      while (low < high) {\\n        var mid = nativeFloor((low + high) / 2),\\n            computed = iteratee(array[mid]),\\n            othIsDefined = computed !== undefined,\\n            othIsNull = computed === null,\\n            othIsReflexive = computed === computed,\\n            othIsSymbol = isSymbol(computed);\\n\\n        if (valIsNaN) {\\n          var setLow = retHighest || othIsReflexive;\\n        } else if (valIsUndefined) {\\n          setLow = othIsReflexive && (retHighest || othIsDefined);\\n        } else if (valIsNull) {\\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\\n        } else if (valIsSymbol) {\\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\\n        } else if (othIsNull || othIsSymbol) {\\n          setLow = false;\\n        } else {\\n          setLow = retHighest ? (computed <= value) : (computed < value);\\n        }\\n        if (setLow) {\\n          low = mid + 1;\\n        } else {\\n          high = mid;\\n        }\\n      }\\n      return nativeMin(high, MAX_ARRAY_INDEX);\\n    }\\n\\n    /**\\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\\n     * support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array} array The array to inspect.\\n     * @param {Function} [iteratee] The iteratee invoked per element.\\n     * @returns {Array} Returns the new duplicate free array.\\n     */\\n    function baseSortedUniq(array, iteratee) {\\n      var index = -1,\\n          length = array.length,\\n          resIndex = 0,\\n          result = [];\\n\\n      while (++index < length) {\\n        var value = array[index],\\n            computed = iteratee ? iteratee(value) : value;\\n\\n        if (!index || !eq(computed, seen)) {\\n          var seen = computed;\\n          result[resIndex++] = value === 0 ? 0 : value;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.toNumber` which doesn't ensure correct\\n     * conversions of binary, hexadecimal, or octal string values.\\n     *\\n     * @private\\n     * @param {*} value The value to process.\\n     * @returns {number} Returns the number.\\n     */\\n    function baseToNumber(value) {\\n      if (typeof value == 'number') {\\n        return value;\\n      }\\n      if (isSymbol(value)) {\\n        return NAN;\\n      }\\n      return +value;\\n    }\\n\\n    /**\\n     * The base implementation of `_.toString` which doesn't convert nullish\\n     * values to empty strings.\\n     *\\n     * @private\\n     * @param {*} value The value to process.\\n     * @returns {string} Returns the string.\\n     */\\n    function baseToString(value) {\\n      // Exit early for strings to avoid a performance hit in some environments.\\n      if (typeof value == 'string') {\\n        return value;\\n      }\\n      if (isArray(value)) {\\n        // Recursively convert values (susceptible to call stack limits).\\n        return arrayMap(value, baseToString) + '';\\n      }\\n      if (isSymbol(value)) {\\n        return symbolToString ? symbolToString.call(value) : '';\\n      }\\n      var result = (value + '');\\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array} array The array to inspect.\\n     * @param {Function} [iteratee] The iteratee invoked per element.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new duplicate free array.\\n     */\\n    function baseUniq(array, iteratee, comparator) {\\n      var index = -1,\\n          includes = arrayIncludes,\\n          length = array.length,\\n          isCommon = true,\\n          result = [],\\n          seen = result;\\n\\n      if (comparator) {\\n        isCommon = false;\\n        includes = arrayIncludesWith;\\n      }\\n      else if (length >= LARGE_ARRAY_SIZE) {\\n        var set = iteratee ? null : createSet(array);\\n        if (set) {\\n          return setToArray(set);\\n        }\\n        isCommon = false;\\n        includes = cacheHas;\\n        seen = new SetCache;\\n      }\\n      else {\\n        seen = iteratee ? [] : result;\\n      }\\n      outer:\\n      while (++index < length) {\\n        var value = array[index],\\n            computed = iteratee ? iteratee(value) : value;\\n\\n        value = (comparator || value !== 0) ? value : 0;\\n        if (isCommon && computed === computed) {\\n          var seenIndex = seen.length;\\n          while (seenIndex--) {\\n            if (seen[seenIndex] === computed) {\\n              continue outer;\\n            }\\n          }\\n          if (iteratee) {\\n            seen.push(computed);\\n          }\\n          result.push(value);\\n        }\\n        else if (!includes(seen, computed, comparator)) {\\n          if (seen !== result) {\\n            seen.push(computed);\\n          }\\n          result.push(value);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.unset`.\\n     *\\n     * @private\\n     * @param {Object} object The object to modify.\\n     * @param {Array|string} path The property path to unset.\\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\\n     */\\n    function baseUnset(object, path) {\\n      path = castPath(path, object);\\n      object = parent(object, path);\\n      return object == null || delete object[toKey(last(path))];\\n    }\\n\\n    /**\\n     * The base implementation of `_.update`.\\n     *\\n     * @private\\n     * @param {Object} object The object to modify.\\n     * @param {Array|string} path The path of the property to update.\\n     * @param {Function} updater The function to produce the updated value.\\n     * @param {Function} [customizer] The function to customize path creation.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseUpdate(object, path, updater, customizer) {\\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\\n    }\\n\\n    /**\\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\\n     * without support for iteratee shorthands.\\n     *\\n     * @private\\n     * @param {Array} array The array to query.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Array} Returns the slice of `array`.\\n     */\\n    function baseWhile(array, predicate, isDrop, fromRight) {\\n      var length = array.length,\\n          index = fromRight ? length : -1;\\n\\n      while ((fromRight ? index-- : ++index < length) &&\\n        predicate(array[index], index, array)) {}\\n\\n      return isDrop\\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\\n    }\\n\\n    /**\\n     * The base implementation of `wrapperValue` which returns the result of\\n     * performing a sequence of actions on the unwrapped `value`, where each\\n     * successive action is supplied the return value of the previous.\\n     *\\n     * @private\\n     * @param {*} value The unwrapped value.\\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\\n     * @returns {*} Returns the resolved value.\\n     */\\n    function baseWrapperValue(value, actions) {\\n      var result = value;\\n      if (result instanceof LazyWrapper) {\\n        result = result.value();\\n      }\\n      return arrayReduce(actions, function(result, action) {\\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\\n      }, result);\\n    }\\n\\n    /**\\n     * The base implementation of methods like `_.xor`, without support for\\n     * iteratee shorthands, that accepts an array of arrays to inspect.\\n     *\\n     * @private\\n     * @param {Array} arrays The arrays to inspect.\\n     * @param {Function} [iteratee] The iteratee invoked per element.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new array of values.\\n     */\\n    function baseXor(arrays, iteratee, comparator) {\\n      var length = arrays.length;\\n      if (length < 2) {\\n        return length ? baseUniq(arrays[0]) : [];\\n      }\\n      var index = -1,\\n          result = Array(length);\\n\\n      while (++index < length) {\\n        var array = arrays[index],\\n            othIndex = -1;\\n\\n        while (++othIndex < length) {\\n          if (othIndex != index) {\\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\\n          }\\n        }\\n      }\\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\\n    }\\n\\n    /**\\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\\n     *\\n     * @private\\n     * @param {Array} props The property identifiers.\\n     * @param {Array} values The property values.\\n     * @param {Function} assignFunc The function to assign values.\\n     * @returns {Object} Returns the new object.\\n     */\\n    function baseZipObject(props, values, assignFunc) {\\n      var index = -1,\\n          length = props.length,\\n          valsLength = values.length,\\n          result = {};\\n\\n      while (++index < length) {\\n        var value = index < valsLength ? values[index] : undefined;\\n        assignFunc(result, props[index], value);\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Casts `value` to an empty array if it's not an array like object.\\n     *\\n     * @private\\n     * @param {*} value The value to inspect.\\n     * @returns {Array|Object} Returns the cast array-like object.\\n     */\\n    function castArrayLikeObject(value) {\\n      return isArrayLikeObject(value) ? value : [];\\n    }\\n\\n    /**\\n     * Casts `value` to `identity` if it's not a function.\\n     *\\n     * @private\\n     * @param {*} value The value to inspect.\\n     * @returns {Function} Returns cast function.\\n     */\\n    function castFunction(value) {\\n      return typeof value == 'function' ? value : identity;\\n    }\\n\\n    /**\\n     * Casts `value` to a path array if it's not one.\\n     *\\n     * @private\\n     * @param {*} value The value to inspect.\\n     * @param {Object} [object] The object to query keys on.\\n     * @returns {Array} Returns the cast property path array.\\n     */\\n    function castPath(value, object) {\\n      if (isArray(value)) {\\n        return value;\\n      }\\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\\n    }\\n\\n    /**\\n     * A `baseRest` alias which can be replaced with `identity` by module\\n     * replacement plugins.\\n     *\\n     * @private\\n     * @type {Function}\\n     * @param {Function} func The function to apply a rest parameter to.\\n     * @returns {Function} Returns the new function.\\n     */\\n    var castRest = baseRest;\\n\\n    /**\\n     * Casts `array` to a slice if it's needed.\\n     *\\n     * @private\\n     * @param {Array} array The array to inspect.\\n     * @param {number} start The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns the cast slice.\\n     */\\n    function castSlice(array, start, end) {\\n      var length = array.length;\\n      end = end === undefined ? length : end;\\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\\n    }\\n\\n    /**\\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\\n     *\\n     * @private\\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\\n     */\\n    var clearTimeout = ctxClearTimeout || function(id) {\\n      return root.clearTimeout(id);\\n    };\\n\\n    /**\\n     * Creates a clone of  `buffer`.\\n     *\\n     * @private\\n     * @param {Buffer} buffer The buffer to clone.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @returns {Buffer} Returns the cloned buffer.\\n     */\\n    function cloneBuffer(buffer, isDeep) {\\n      if (isDeep) {\\n        return buffer.slice();\\n      }\\n      var length = buffer.length,\\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\\n\\n      buffer.copy(result);\\n      return result;\\n    }\\n\\n    /**\\n     * Creates a clone of `arrayBuffer`.\\n     *\\n     * @private\\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\\n     */\\n    function cloneArrayBuffer(arrayBuffer) {\\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\\n      return result;\\n    }\\n\\n    /**\\n     * Creates a clone of `dataView`.\\n     *\\n     * @private\\n     * @param {Object} dataView The data view to clone.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @returns {Object} Returns the cloned data view.\\n     */\\n    function cloneDataView(dataView, isDeep) {\\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\\n    }\\n\\n    /**\\n     * Creates a clone of `map`.\\n     *\\n     * @private\\n     * @param {Object} map The map to clone.\\n     * @param {Function} cloneFunc The function to clone values.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @returns {Object} Returns the cloned map.\\n     */\\n    function cloneMap(map, isDeep, cloneFunc) {\\n      var array = isDeep ? cloneFunc(mapToArray(map), CLONE_DEEP_FLAG) : mapToArray(map);\\n      return arrayReduce(array, addMapEntry, new map.constructor);\\n    }\\n\\n    /**\\n     * Creates a clone of `regexp`.\\n     *\\n     * @private\\n     * @param {Object} regexp The regexp to clone.\\n     * @returns {Object} Returns the cloned regexp.\\n     */\\n    function cloneRegExp(regexp) {\\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\\n      result.lastIndex = regexp.lastIndex;\\n      return result;\\n    }\\n\\n    /**\\n     * Creates a clone of `set`.\\n     *\\n     * @private\\n     * @param {Object} set The set to clone.\\n     * @param {Function} cloneFunc The function to clone values.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @returns {Object} Returns the cloned set.\\n     */\\n    function cloneSet(set, isDeep, cloneFunc) {\\n      var array = isDeep ? cloneFunc(setToArray(set), CLONE_DEEP_FLAG) : setToArray(set);\\n      return arrayReduce(array, addSetEntry, new set.constructor);\\n    }\\n\\n    /**\\n     * Creates a clone of the `symbol` object.\\n     *\\n     * @private\\n     * @param {Object} symbol The symbol object to clone.\\n     * @returns {Object} Returns the cloned symbol object.\\n     */\\n    function cloneSymbol(symbol) {\\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\\n    }\\n\\n    /**\\n     * Creates a clone of `typedArray`.\\n     *\\n     * @private\\n     * @param {Object} typedArray The typed array to clone.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @returns {Object} Returns the cloned typed array.\\n     */\\n    function cloneTypedArray(typedArray, isDeep) {\\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\\n    }\\n\\n    /**\\n     * Compares values to sort them in ascending order.\\n     *\\n     * @private\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {number} Returns the sort order indicator for `value`.\\n     */\\n    function compareAscending(value, other) {\\n      if (value !== other) {\\n        var valIsDefined = value !== undefined,\\n            valIsNull = value === null,\\n            valIsReflexive = value === value,\\n            valIsSymbol = isSymbol(value);\\n\\n        var othIsDefined = other !== undefined,\\n            othIsNull = other === null,\\n            othIsReflexive = other === other,\\n            othIsSymbol = isSymbol(other);\\n\\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\\n            (valIsNull && othIsDefined && othIsReflexive) ||\\n            (!valIsDefined && othIsReflexive) ||\\n            !valIsReflexive) {\\n          return 1;\\n        }\\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\\n            (othIsNull && valIsDefined && valIsReflexive) ||\\n            (!othIsDefined && valIsReflexive) ||\\n            !othIsReflexive) {\\n          return -1;\\n        }\\n      }\\n      return 0;\\n    }\\n\\n    /**\\n     * Used by `_.orderBy` to compare multiple properties of a value to another\\n     * and stable sort them.\\n     *\\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\\n     * specify an order of \\\"desc\\\" for descending or \\\"asc\\\" for ascending sort order\\n     * of corresponding values.\\n     *\\n     * @private\\n     * @param {Object} object The object to compare.\\n     * @param {Object} other The other object to compare.\\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\\n     * @returns {number} Returns the sort order indicator for `object`.\\n     */\\n    function compareMultiple(object, other, orders) {\\n      var index = -1,\\n          objCriteria = object.criteria,\\n          othCriteria = other.criteria,\\n          length = objCriteria.length,\\n          ordersLength = orders.length;\\n\\n      while (++index < length) {\\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\\n        if (result) {\\n          if (index >= ordersLength) {\\n            return result;\\n          }\\n          var order = orders[index];\\n          return result * (order == 'desc' ? -1 : 1);\\n        }\\n      }\\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\\n      // that causes it, under certain circumstances, to provide the same value for\\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\\n      // for more details.\\n      //\\n      // This also ensures a stable sort in V8 and other engines.\\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\\n      return object.index - other.index;\\n    }\\n\\n    /**\\n     * Creates an array that is the composition of partially applied arguments,\\n     * placeholders, and provided arguments into a single array of arguments.\\n     *\\n     * @private\\n     * @param {Array} args The provided arguments.\\n     * @param {Array} partials The arguments to prepend to those provided.\\n     * @param {Array} holders The `partials` placeholder indexes.\\n     * @params {boolean} [isCurried] Specify composing for a curried function.\\n     * @returns {Array} Returns the new array of composed arguments.\\n     */\\n    function composeArgs(args, partials, holders, isCurried) {\\n      var argsIndex = -1,\\n          argsLength = args.length,\\n          holdersLength = holders.length,\\n          leftIndex = -1,\\n          leftLength = partials.length,\\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\\n          result = Array(leftLength + rangeLength),\\n          isUncurried = !isCurried;\\n\\n      while (++leftIndex < leftLength) {\\n        result[leftIndex] = partials[leftIndex];\\n      }\\n      while (++argsIndex < holdersLength) {\\n        if (isUncurried || argsIndex < argsLength) {\\n          result[holders[argsIndex]] = args[argsIndex];\\n        }\\n      }\\n      while (rangeLength--) {\\n        result[leftIndex++] = args[argsIndex++];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * This function is like `composeArgs` except that the arguments composition\\n     * is tailored for `_.partialRight`.\\n     *\\n     * @private\\n     * @param {Array} args The provided arguments.\\n     * @param {Array} partials The arguments to append to those provided.\\n     * @param {Array} holders The `partials` placeholder indexes.\\n     * @params {boolean} [isCurried] Specify composing for a curried function.\\n     * @returns {Array} Returns the new array of composed arguments.\\n     */\\n    function composeArgsRight(args, partials, holders, isCurried) {\\n      var argsIndex = -1,\\n          argsLength = args.length,\\n          holdersIndex = -1,\\n          holdersLength = holders.length,\\n          rightIndex = -1,\\n          rightLength = partials.length,\\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\\n          result = Array(rangeLength + rightLength),\\n          isUncurried = !isCurried;\\n\\n      while (++argsIndex < rangeLength) {\\n        result[argsIndex] = args[argsIndex];\\n      }\\n      var offset = argsIndex;\\n      while (++rightIndex < rightLength) {\\n        result[offset + rightIndex] = partials[rightIndex];\\n      }\\n      while (++holdersIndex < holdersLength) {\\n        if (isUncurried || argsIndex < argsLength) {\\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Copies the values of `source` to `array`.\\n     *\\n     * @private\\n     * @param {Array} source The array to copy values from.\\n     * @param {Array} [array=[]] The array to copy values to.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function copyArray(source, array) {\\n      var index = -1,\\n          length = source.length;\\n\\n      array || (array = Array(length));\\n      while (++index < length) {\\n        array[index] = source[index];\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * Copies properties of `source` to `object`.\\n     *\\n     * @private\\n     * @param {Object} source The object to copy properties from.\\n     * @param {Array} props The property identifiers to copy.\\n     * @param {Object} [object={}] The object to copy properties to.\\n     * @param {Function} [customizer] The function to customize copied values.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function copyObject(source, props, object, customizer) {\\n      var isNew = !object;\\n      object || (object = {});\\n\\n      var index = -1,\\n          length = props.length;\\n\\n      while (++index < length) {\\n        var key = props[index];\\n\\n        var newValue = customizer\\n          ? customizer(object[key], source[key], key, object, source)\\n          : undefined;\\n\\n        if (newValue === undefined) {\\n          newValue = source[key];\\n        }\\n        if (isNew) {\\n          baseAssignValue(object, key, newValue);\\n        } else {\\n          assignValue(object, key, newValue);\\n        }\\n      }\\n      return object;\\n    }\\n\\n    /**\\n     * Copies own symbols of `source` to `object`.\\n     *\\n     * @private\\n     * @param {Object} source The object to copy symbols from.\\n     * @param {Object} [object={}] The object to copy symbols to.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function copySymbols(source, object) {\\n      return copyObject(source, getSymbols(source), object);\\n    }\\n\\n    /**\\n     * Copies own and inherited symbols of `source` to `object`.\\n     *\\n     * @private\\n     * @param {Object} source The object to copy symbols from.\\n     * @param {Object} [object={}] The object to copy symbols to.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function copySymbolsIn(source, object) {\\n      return copyObject(source, getSymbolsIn(source), object);\\n    }\\n\\n    /**\\n     * Creates a function like `_.groupBy`.\\n     *\\n     * @private\\n     * @param {Function} setter The function to set accumulator values.\\n     * @param {Function} [initializer] The accumulator object initializer.\\n     * @returns {Function} Returns the new aggregator function.\\n     */\\n    function createAggregator(setter, initializer) {\\n      return function(collection, iteratee) {\\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\\n            accumulator = initializer ? initializer() : {};\\n\\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function like `_.assign`.\\n     *\\n     * @private\\n     * @param {Function} assigner The function to assign values.\\n     * @returns {Function} Returns the new assigner function.\\n     */\\n    function createAssigner(assigner) {\\n      return baseRest(function(object, sources) {\\n        var index = -1,\\n            length = sources.length,\\n            customizer = length > 1 ? sources[length - 1] : undefined,\\n            guard = length > 2 ? sources[2] : undefined;\\n\\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\\n          ? (length--, customizer)\\n          : undefined;\\n\\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\\n          customizer = length < 3 ? undefined : customizer;\\n          length = 1;\\n        }\\n        object = Object(object);\\n        while (++index < length) {\\n          var source = sources[index];\\n          if (source) {\\n            assigner(object, source, index, customizer);\\n          }\\n        }\\n        return object;\\n      });\\n    }\\n\\n    /**\\n     * Creates a `baseEach` or `baseEachRight` function.\\n     *\\n     * @private\\n     * @param {Function} eachFunc The function to iterate over a collection.\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new base function.\\n     */\\n    function createBaseEach(eachFunc, fromRight) {\\n      return function(collection, iteratee) {\\n        if (collection == null) {\\n          return collection;\\n        }\\n        if (!isArrayLike(collection)) {\\n          return eachFunc(collection, iteratee);\\n        }\\n        var length = collection.length,\\n            index = fromRight ? length : -1,\\n            iterable = Object(collection);\\n\\n        while ((fromRight ? index-- : ++index < length)) {\\n          if (iteratee(iterable[index], index, iterable) === false) {\\n            break;\\n          }\\n        }\\n        return collection;\\n      };\\n    }\\n\\n    /**\\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\\n     *\\n     * @private\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new base function.\\n     */\\n    function createBaseFor(fromRight) {\\n      return function(object, iteratee, keysFunc) {\\n        var index = -1,\\n            iterable = Object(object),\\n            props = keysFunc(object),\\n            length = props.length;\\n\\n        while (length--) {\\n          var key = props[fromRight ? length : ++index];\\n          if (iteratee(iterable[key], key, iterable) === false) {\\n            break;\\n          }\\n        }\\n        return object;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that wraps `func` to invoke it with the optional `this`\\n     * binding of `thisArg`.\\n     *\\n     * @private\\n     * @param {Function} func The function to wrap.\\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createBind(func, bitmask, thisArg) {\\n      var isBind = bitmask & WRAP_BIND_FLAG,\\n          Ctor = createCtor(func);\\n\\n      function wrapper() {\\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\\n        return fn.apply(isBind ? thisArg : this, arguments);\\n      }\\n      return wrapper;\\n    }\\n\\n    /**\\n     * Creates a function like `_.lowerFirst`.\\n     *\\n     * @private\\n     * @param {string} methodName The name of the `String` case method to use.\\n     * @returns {Function} Returns the new case function.\\n     */\\n    function createCaseFirst(methodName) {\\n      return function(string) {\\n        string = toString(string);\\n\\n        var strSymbols = hasUnicode(string)\\n          ? stringToArray(string)\\n          : undefined;\\n\\n        var chr = strSymbols\\n          ? strSymbols[0]\\n          : string.charAt(0);\\n\\n        var trailing = strSymbols\\n          ? castSlice(strSymbols, 1).join('')\\n          : string.slice(1);\\n\\n        return chr[methodName]() + trailing;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function like `_.camelCase`.\\n     *\\n     * @private\\n     * @param {Function} callback The function to combine each word.\\n     * @returns {Function} Returns the new compounder function.\\n     */\\n    function createCompounder(callback) {\\n      return function(string) {\\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that produces an instance of `Ctor` regardless of\\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\\n     *\\n     * @private\\n     * @param {Function} Ctor The constructor to wrap.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createCtor(Ctor) {\\n      return function() {\\n        // Use a `switch` statement to work with class constructors. See\\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\\n        // for more details.\\n        var args = arguments;\\n        switch (args.length) {\\n          case 0: return new Ctor;\\n          case 1: return new Ctor(args[0]);\\n          case 2: return new Ctor(args[0], args[1]);\\n          case 3: return new Ctor(args[0], args[1], args[2]);\\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\\n        }\\n        var thisBinding = baseCreate(Ctor.prototype),\\n            result = Ctor.apply(thisBinding, args);\\n\\n        // Mimic the constructor's `return` behavior.\\n        // See https://es5.github.io/#x13.2.2 for more details.\\n        return isObject(result) ? result : thisBinding;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that wraps `func` to enable currying.\\n     *\\n     * @private\\n     * @param {Function} func The function to wrap.\\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\\n     * @param {number} arity The arity of `func`.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createCurry(func, bitmask, arity) {\\n      var Ctor = createCtor(func);\\n\\n      function wrapper() {\\n        var length = arguments.length,\\n            args = Array(length),\\n            index = length,\\n            placeholder = getHolder(wrapper);\\n\\n        while (index--) {\\n          args[index] = arguments[index];\\n        }\\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\\n          ? []\\n          : replaceHolders(args, placeholder);\\n\\n        length -= holders.length;\\n        if (length < arity) {\\n          return createRecurry(\\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\\n            args, holders, undefined, undefined, arity - length);\\n        }\\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\\n        return apply(fn, this, args);\\n      }\\n      return wrapper;\\n    }\\n\\n    /**\\n     * Creates a `_.find` or `_.findLast` function.\\n     *\\n     * @private\\n     * @param {Function} findIndexFunc The function to find the collection index.\\n     * @returns {Function} Returns the new find function.\\n     */\\n    function createFind(findIndexFunc) {\\n      return function(collection, predicate, fromIndex) {\\n        var iterable = Object(collection);\\n        if (!isArrayLike(collection)) {\\n          var iteratee = getIteratee(predicate, 3);\\n          collection = keys(collection);\\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\\n        }\\n        var index = findIndexFunc(collection, predicate, fromIndex);\\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.flow` or `_.flowRight` function.\\n     *\\n     * @private\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new flow function.\\n     */\\n    function createFlow(fromRight) {\\n      return flatRest(function(funcs) {\\n        var length = funcs.length,\\n            index = length,\\n            prereq = LodashWrapper.prototype.thru;\\n\\n        if (fromRight) {\\n          funcs.reverse();\\n        }\\n        while (index--) {\\n          var func = funcs[index];\\n          if (typeof func != 'function') {\\n            throw new TypeError(FUNC_ERROR_TEXT);\\n          }\\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\\n            var wrapper = new LodashWrapper([], true);\\n          }\\n        }\\n        index = wrapper ? index : length;\\n        while (++index < length) {\\n          func = funcs[index];\\n\\n          var funcName = getFuncName(func),\\n              data = funcName == 'wrapper' ? getData(func) : undefined;\\n\\n          if (data && isLaziable(data[0]) &&\\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\\n                !data[4].length && data[9] == 1\\n              ) {\\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\\n          } else {\\n            wrapper = (func.length == 1 && isLaziable(func))\\n              ? wrapper[funcName]()\\n              : wrapper.thru(func);\\n          }\\n        }\\n        return function() {\\n          var args = arguments,\\n              value = args[0];\\n\\n          if (wrapper && args.length == 1 &&\\n              isArray(value) && value.length >= LARGE_ARRAY_SIZE) {\\n            return wrapper.plant(value).value();\\n          }\\n          var index = 0,\\n              result = length ? funcs[index].apply(this, args) : value;\\n\\n          while (++index < length) {\\n            result = funcs[index].call(this, result);\\n          }\\n          return result;\\n        };\\n      });\\n    }\\n\\n    /**\\n     * Creates a function that wraps `func` to invoke it with optional `this`\\n     * binding of `thisArg`, partial application, and currying.\\n     *\\n     * @private\\n     * @param {Function|string} func The function or method name to wrap.\\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @param {Array} [partials] The arguments to prepend to those provided to\\n     *  the new function.\\n     * @param {Array} [holders] The `partials` placeholder indexes.\\n     * @param {Array} [partialsRight] The arguments to append to those provided\\n     *  to the new function.\\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\\n     * @param {Array} [argPos] The argument positions of the new function.\\n     * @param {number} [ary] The arity cap of `func`.\\n     * @param {number} [arity] The arity of `func`.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\\n      var isAry = bitmask & WRAP_ARY_FLAG,\\n          isBind = bitmask & WRAP_BIND_FLAG,\\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\\n          isFlip = bitmask & WRAP_FLIP_FLAG,\\n          Ctor = isBindKey ? undefined : createCtor(func);\\n\\n      function wrapper() {\\n        var length = arguments.length,\\n            args = Array(length),\\n            index = length;\\n\\n        while (index--) {\\n          args[index] = arguments[index];\\n        }\\n        if (isCurried) {\\n          var placeholder = getHolder(wrapper),\\n              holdersCount = countHolders(args, placeholder);\\n        }\\n        if (partials) {\\n          args = composeArgs(args, partials, holders, isCurried);\\n        }\\n        if (partialsRight) {\\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\\n        }\\n        length -= holdersCount;\\n        if (isCurried && length < arity) {\\n          var newHolders = replaceHolders(args, placeholder);\\n          return createRecurry(\\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\\n            args, newHolders, argPos, ary, arity - length\\n          );\\n        }\\n        var thisBinding = isBind ? thisArg : this,\\n            fn = isBindKey ? thisBinding[func] : func;\\n\\n        length = args.length;\\n        if (argPos) {\\n          args = reorder(args, argPos);\\n        } else if (isFlip && length > 1) {\\n          args.reverse();\\n        }\\n        if (isAry && ary < length) {\\n          args.length = ary;\\n        }\\n        if (this && this !== root && this instanceof wrapper) {\\n          fn = Ctor || createCtor(fn);\\n        }\\n        return fn.apply(thisBinding, args);\\n      }\\n      return wrapper;\\n    }\\n\\n    /**\\n     * Creates a function like `_.invertBy`.\\n     *\\n     * @private\\n     * @param {Function} setter The function to set accumulator values.\\n     * @param {Function} toIteratee The function to resolve iteratees.\\n     * @returns {Function} Returns the new inverter function.\\n     */\\n    function createInverter(setter, toIteratee) {\\n      return function(object, iteratee) {\\n        return baseInverter(object, setter, toIteratee(iteratee), {});\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that performs a mathematical operation on two values.\\n     *\\n     * @private\\n     * @param {Function} operator The function to perform the operation.\\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\\n     * @returns {Function} Returns the new mathematical operation function.\\n     */\\n    function createMathOperation(operator, defaultValue) {\\n      return function(value, other) {\\n        var result;\\n        if (value === undefined && other === undefined) {\\n          return defaultValue;\\n        }\\n        if (value !== undefined) {\\n          result = value;\\n        }\\n        if (other !== undefined) {\\n          if (result === undefined) {\\n            return other;\\n          }\\n          if (typeof value == 'string' || typeof other == 'string') {\\n            value = baseToString(value);\\n            other = baseToString(other);\\n          } else {\\n            value = baseToNumber(value);\\n            other = baseToNumber(other);\\n          }\\n          result = operator(value, other);\\n        }\\n        return result;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function like `_.over`.\\n     *\\n     * @private\\n     * @param {Function} arrayFunc The function to iterate over iteratees.\\n     * @returns {Function} Returns the new over function.\\n     */\\n    function createOver(arrayFunc) {\\n      return flatRest(function(iteratees) {\\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\\n        return baseRest(function(args) {\\n          var thisArg = this;\\n          return arrayFunc(iteratees, function(iteratee) {\\n            return apply(iteratee, thisArg, args);\\n          });\\n        });\\n      });\\n    }\\n\\n    /**\\n     * Creates the padding for `string` based on `length`. The `chars` string\\n     * is truncated if the number of characters exceeds `length`.\\n     *\\n     * @private\\n     * @param {number} length The padding length.\\n     * @param {string} [chars=' '] The string used as padding.\\n     * @returns {string} Returns the padding for `string`.\\n     */\\n    function createPadding(length, chars) {\\n      chars = chars === undefined ? ' ' : baseToString(chars);\\n\\n      var charsLength = chars.length;\\n      if (charsLength < 2) {\\n        return charsLength ? baseRepeat(chars, length) : chars;\\n      }\\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\\n      return hasUnicode(chars)\\n        ? castSlice(stringToArray(result), 0, length).join('')\\n        : result.slice(0, length);\\n    }\\n\\n    /**\\n     * Creates a function that wraps `func` to invoke it with the `this` binding\\n     * of `thisArg` and `partials` prepended to the arguments it receives.\\n     *\\n     * @private\\n     * @param {Function} func The function to wrap.\\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\\n     * @param {*} thisArg The `this` binding of `func`.\\n     * @param {Array} partials The arguments to prepend to those provided to\\n     *  the new function.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createPartial(func, bitmask, thisArg, partials) {\\n      var isBind = bitmask & WRAP_BIND_FLAG,\\n          Ctor = createCtor(func);\\n\\n      function wrapper() {\\n        var argsIndex = -1,\\n            argsLength = arguments.length,\\n            leftIndex = -1,\\n            leftLength = partials.length,\\n            args = Array(leftLength + argsLength),\\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\\n\\n        while (++leftIndex < leftLength) {\\n          args[leftIndex] = partials[leftIndex];\\n        }\\n        while (argsLength--) {\\n          args[leftIndex++] = arguments[++argsIndex];\\n        }\\n        return apply(fn, isBind ? thisArg : this, args);\\n      }\\n      return wrapper;\\n    }\\n\\n    /**\\n     * Creates a `_.range` or `_.rangeRight` function.\\n     *\\n     * @private\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new range function.\\n     */\\n    function createRange(fromRight) {\\n      return function(start, end, step) {\\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\\n          end = step = undefined;\\n        }\\n        // Ensure the sign of `-0` is preserved.\\n        start = toFinite(start);\\n        if (end === undefined) {\\n          end = start;\\n          start = 0;\\n        } else {\\n          end = toFinite(end);\\n        }\\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\\n        return baseRange(start, end, step, fromRight);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that performs a relational operation on two values.\\n     *\\n     * @private\\n     * @param {Function} operator The function to perform the operation.\\n     * @returns {Function} Returns the new relational operation function.\\n     */\\n    function createRelationalOperation(operator) {\\n      return function(value, other) {\\n        if (!(typeof value == 'string' && typeof other == 'string')) {\\n          value = toNumber(value);\\n          other = toNumber(other);\\n        }\\n        return operator(value, other);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that wraps `func` to continue currying.\\n     *\\n     * @private\\n     * @param {Function} func The function to wrap.\\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\\n     * @param {*} placeholder The placeholder value.\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @param {Array} [partials] The arguments to prepend to those provided to\\n     *  the new function.\\n     * @param {Array} [holders] The `partials` placeholder indexes.\\n     * @param {Array} [argPos] The argument positions of the new function.\\n     * @param {number} [ary] The arity cap of `func`.\\n     * @param {number} [arity] The arity of `func`.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\\n          newHolders = isCurry ? holders : undefined,\\n          newHoldersRight = isCurry ? undefined : holders,\\n          newPartials = isCurry ? partials : undefined,\\n          newPartialsRight = isCurry ? undefined : partials;\\n\\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\\n\\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\\n      }\\n      var newData = [\\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\\n        newHoldersRight, argPos, ary, arity\\n      ];\\n\\n      var result = wrapFunc.apply(undefined, newData);\\n      if (isLaziable(func)) {\\n        setData(result, newData);\\n      }\\n      result.placeholder = placeholder;\\n      return setWrapToString(result, func, bitmask);\\n    }\\n\\n    /**\\n     * Creates a function like `_.round`.\\n     *\\n     * @private\\n     * @param {string} methodName The name of the `Math` method to use when rounding.\\n     * @returns {Function} Returns the new round function.\\n     */\\n    function createRound(methodName) {\\n      var func = Math[methodName];\\n      return function(number, precision) {\\n        number = toNumber(number);\\n        precision = nativeMin(toInteger(precision), 292);\\n        if (precision) {\\n          // Shift with exponential notation to avoid floating-point issues.\\n          // See [MDN](https://mdn.io/round#Examples) for more details.\\n          var pair = (toString(number) + 'e').split('e'),\\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\\n\\n          pair = (toString(value) + 'e').split('e');\\n          return +(pair[0] + 'e' + (+pair[1] - precision));\\n        }\\n        return func(number);\\n      };\\n    }\\n\\n    /**\\n     * Creates a set object of `values`.\\n     *\\n     * @private\\n     * @param {Array} values The values to add to the set.\\n     * @returns {Object} Returns the new set.\\n     */\\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\\n      return new Set(values);\\n    };\\n\\n    /**\\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\\n     *\\n     * @private\\n     * @param {Function} keysFunc The function to get the keys of a given object.\\n     * @returns {Function} Returns the new pairs function.\\n     */\\n    function createToPairs(keysFunc) {\\n      return function(object) {\\n        var tag = getTag(object);\\n        if (tag == mapTag) {\\n          return mapToArray(object);\\n        }\\n        if (tag == setTag) {\\n          return setToPairs(object);\\n        }\\n        return baseToPairs(object, keysFunc(object));\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that either curries or invokes `func` with optional\\n     * `this` binding and partially applied arguments.\\n     *\\n     * @private\\n     * @param {Function|string} func The function or method name to wrap.\\n     * @param {number} bitmask The bitmask flags.\\n     *    1 - `_.bind`\\n     *    2 - `_.bindKey`\\n     *    4 - `_.curry` or `_.curryRight` of a bound function\\n     *    8 - `_.curry`\\n     *   16 - `_.curryRight`\\n     *   32 - `_.partial`\\n     *   64 - `_.partialRight`\\n     *  128 - `_.rearg`\\n     *  256 - `_.ary`\\n     *  512 - `_.flip`\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @param {Array} [partials] The arguments to be partially applied.\\n     * @param {Array} [holders] The `partials` placeholder indexes.\\n     * @param {Array} [argPos] The argument positions of the new function.\\n     * @param {number} [ary] The arity cap of `func`.\\n     * @param {number} [arity] The arity of `func`.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\\n      if (!isBindKey && typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      var length = partials ? partials.length : 0;\\n      if (!length) {\\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\\n        partials = holders = undefined;\\n      }\\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\\n      arity = arity === undefined ? arity : toInteger(arity);\\n      length -= holders ? holders.length : 0;\\n\\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\\n        var partialsRight = partials,\\n            holdersRight = holders;\\n\\n        partials = holders = undefined;\\n      }\\n      var data = isBindKey ? undefined : getData(func);\\n\\n      var newData = [\\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\\n        argPos, ary, arity\\n      ];\\n\\n      if (data) {\\n        mergeData(newData, data);\\n      }\\n      func = newData[0];\\n      bitmask = newData[1];\\n      thisArg = newData[2];\\n      partials = newData[3];\\n      holders = newData[4];\\n      arity = newData[9] = newData[9] == null\\n        ? (isBindKey ? 0 : func.length)\\n        : nativeMax(newData[9] - length, 0);\\n\\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\\n      }\\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\\n        var result = createBind(func, bitmask, thisArg);\\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\\n        result = createCurry(func, bitmask, arity);\\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\\n        result = createPartial(func, bitmask, thisArg, partials);\\n      } else {\\n        result = createHybrid.apply(undefined, newData);\\n      }\\n      var setter = data ? baseSetData : setData;\\n      return setWrapToString(setter(result, newData), func, bitmask);\\n    }\\n\\n    /**\\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\\n     * partial deep comparisons.\\n     *\\n     * @private\\n     * @param {Array} array The array to compare.\\n     * @param {Array} other The other array to compare.\\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\\n     * @param {Function} customizer The function to customize comparisons.\\n     * @param {Function} equalFunc The function to determine equivalents of values.\\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\\n     */\\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\\n          arrLength = array.length,\\n          othLength = other.length;\\n\\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\\n        return false;\\n      }\\n      // Assume cyclic values are equal.\\n      var stacked = stack.get(array);\\n      if (stacked && stack.get(other)) {\\n        return stacked == other;\\n      }\\n      var index = -1,\\n          result = true,\\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\\n\\n      stack.set(array, other);\\n      stack.set(other, array);\\n\\n      // Ignore non-index properties.\\n      while (++index < arrLength) {\\n        var arrValue = array[index],\\n            othValue = other[index];\\n\\n        if (customizer) {\\n          var compared = isPartial\\n            ? customizer(othValue, arrValue, index, other, array, stack)\\n            : customizer(arrValue, othValue, index, array, other, stack);\\n        }\\n        if (compared !== undefined) {\\n          if (compared) {\\n            continue;\\n          }\\n          result = false;\\n          break;\\n        }\\n        // Recursively compare arrays (susceptible to call stack limits).\\n        if (seen) {\\n          if (!arraySome(other, function(othValue, othIndex) {\\n                if (!cacheHas(seen, othIndex) &&\\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\\n                  return seen.push(othIndex);\\n                }\\n              })) {\\n            result = false;\\n            break;\\n          }\\n        } else if (!(\\n              arrValue === othValue ||\\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\\n            )) {\\n          result = false;\\n          break;\\n        }\\n      }\\n      stack['delete'](array);\\n      stack['delete'](other);\\n      return result;\\n    }\\n\\n    /**\\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\\n     * the same `toStringTag`.\\n     *\\n     * **Note:** This function only supports comparing values with tags of\\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\\n     *\\n     * @private\\n     * @param {Object} object The object to compare.\\n     * @param {Object} other The other object to compare.\\n     * @param {string} tag The `toStringTag` of the objects to compare.\\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\\n     * @param {Function} customizer The function to customize comparisons.\\n     * @param {Function} equalFunc The function to determine equivalents of values.\\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\\n     */\\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\\n      switch (tag) {\\n        case dataViewTag:\\n          if ((object.byteLength != other.byteLength) ||\\n              (object.byteOffset != other.byteOffset)) {\\n            return false;\\n          }\\n          object = object.buffer;\\n          other = other.buffer;\\n\\n        case arrayBufferTag:\\n          if ((object.byteLength != other.byteLength) ||\\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\\n            return false;\\n          }\\n          return true;\\n\\n        case boolTag:\\n        case dateTag:\\n        case numberTag:\\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\\n          // Invalid dates are coerced to `NaN`.\\n          return eq(+object, +other);\\n\\n        case errorTag:\\n          return object.name == other.name && object.message == other.message;\\n\\n        case regexpTag:\\n        case stringTag:\\n          // Coerce regexes to strings and treat strings, primitives and objects,\\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\\n          // for more details.\\n          return object == (other + '');\\n\\n        case mapTag:\\n          var convert = mapToArray;\\n\\n        case setTag:\\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\\n          convert || (convert = setToArray);\\n\\n          if (object.size != other.size && !isPartial) {\\n            return false;\\n          }\\n          // Assume cyclic values are equal.\\n          var stacked = stack.get(object);\\n          if (stacked) {\\n            return stacked == other;\\n          }\\n          bitmask |= COMPARE_UNORDERED_FLAG;\\n\\n          // Recursively compare objects (susceptible to call stack limits).\\n          stack.set(object, other);\\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\\n          stack['delete'](object);\\n          return result;\\n\\n        case symbolTag:\\n          if (symbolValueOf) {\\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\\n          }\\n      }\\n      return false;\\n    }\\n\\n    /**\\n     * A specialized version of `baseIsEqualDeep` for objects with support for\\n     * partial deep comparisons.\\n     *\\n     * @private\\n     * @param {Object} object The object to compare.\\n     * @param {Object} other The other object to compare.\\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\\n     * @param {Function} customizer The function to customize comparisons.\\n     * @param {Function} equalFunc The function to determine equivalents of values.\\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\\n     */\\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\\n          objProps = keys(object),\\n          objLength = objProps.length,\\n          othProps = keys(other),\\n          othLength = othProps.length;\\n\\n      if (objLength != othLength && !isPartial) {\\n        return false;\\n      }\\n      var index = objLength;\\n      while (index--) {\\n        var key = objProps[index];\\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\\n          return false;\\n        }\\n      }\\n      // Assume cyclic values are equal.\\n      var stacked = stack.get(object);\\n      if (stacked && stack.get(other)) {\\n        return stacked == other;\\n      }\\n      var result = true;\\n      stack.set(object, other);\\n      stack.set(other, object);\\n\\n      var skipCtor = isPartial;\\n      while (++index < objLength) {\\n        key = objProps[index];\\n        var objValue = object[key],\\n            othValue = other[key];\\n\\n        if (customizer) {\\n          var compared = isPartial\\n            ? customizer(othValue, objValue, key, other, object, stack)\\n            : customizer(objValue, othValue, key, object, other, stack);\\n        }\\n        // Recursively compare objects (susceptible to call stack limits).\\n        if (!(compared === undefined\\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\\n              : compared\\n            )) {\\n          result = false;\\n          break;\\n        }\\n        skipCtor || (skipCtor = key == 'constructor');\\n      }\\n      if (result && !skipCtor) {\\n        var objCtor = object.constructor,\\n            othCtor = other.constructor;\\n\\n        // Non `Object` object instances with different constructors are not equal.\\n        if (objCtor != othCtor &&\\n            ('constructor' in object && 'constructor' in other) &&\\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\\n          result = false;\\n        }\\n      }\\n      stack['delete'](object);\\n      stack['delete'](other);\\n      return result;\\n    }\\n\\n    /**\\n     * A specialized version of `baseRest` which flattens the rest array.\\n     *\\n     * @private\\n     * @param {Function} func The function to apply a rest parameter to.\\n     * @returns {Function} Returns the new function.\\n     */\\n    function flatRest(func) {\\n      return setToString(overRest(func, undefined, flatten), func + '');\\n    }\\n\\n    /**\\n     * Creates an array of own enumerable property names and symbols of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names and symbols.\\n     */\\n    function getAllKeys(object) {\\n      return baseGetAllKeys(object, keys, getSymbols);\\n    }\\n\\n    /**\\n     * Creates an array of own and inherited enumerable property names and\\n     * symbols of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names and symbols.\\n     */\\n    function getAllKeysIn(object) {\\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\\n    }\\n\\n    /**\\n     * Gets metadata for `func`.\\n     *\\n     * @private\\n     * @param {Function} func The function to query.\\n     * @returns {*} Returns the metadata for `func`.\\n     */\\n    var getData = !metaMap ? noop : function(func) {\\n      return metaMap.get(func);\\n    };\\n\\n    /**\\n     * Gets the name of `func`.\\n     *\\n     * @private\\n     * @param {Function} func The function to query.\\n     * @returns {string} Returns the function name.\\n     */\\n    function getFuncName(func) {\\n      var result = (func.name + ''),\\n          array = realNames[result],\\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\\n\\n      while (length--) {\\n        var data = array[length],\\n            otherFunc = data.func;\\n        if (otherFunc == null || otherFunc == func) {\\n          return data.name;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the argument placeholder value for `func`.\\n     *\\n     * @private\\n     * @param {Function} func The function to inspect.\\n     * @returns {*} Returns the placeholder value.\\n     */\\n    function getHolder(func) {\\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\\n      return object.placeholder;\\n    }\\n\\n    /**\\n     * Gets the appropriate \\\"iteratee\\\" function. If `_.iteratee` is customized,\\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\\n     * If arguments are provided, the chosen function is invoked with them and\\n     * its result is returned.\\n     *\\n     * @private\\n     * @param {*} [value] The value to convert to an iteratee.\\n     * @param {number} [arity] The arity of the created iteratee.\\n     * @returns {Function} Returns the chosen function or its result.\\n     */\\n    function getIteratee() {\\n      var result = lodash.iteratee || iteratee;\\n      result = result === iteratee ? baseIteratee : result;\\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\\n    }\\n\\n    /**\\n     * Gets the data for `map`.\\n     *\\n     * @private\\n     * @param {Object} map The map to query.\\n     * @param {string} key The reference key.\\n     * @returns {*} Returns the map data.\\n     */\\n    function getMapData(map, key) {\\n      var data = map.__data__;\\n      return isKeyable(key)\\n        ? data[typeof key == 'string' ? 'string' : 'hash']\\n        : data.map;\\n    }\\n\\n    /**\\n     * Gets the property names, values, and compare flags of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the match data of `object`.\\n     */\\n    function getMatchData(object) {\\n      var result = keys(object),\\n          length = result.length;\\n\\n      while (length--) {\\n        var key = result[length],\\n            value = object[key];\\n\\n        result[length] = [key, value, isStrictComparable(value)];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the native function at `key` of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {string} key The key of the method to get.\\n     * @returns {*} Returns the function if it's native, else `undefined`.\\n     */\\n    function getNative(object, key) {\\n      var value = getValue(object, key);\\n      return baseIsNative(value) ? value : undefined;\\n    }\\n\\n    /**\\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\\n     *\\n     * @private\\n     * @param {*} value The value to query.\\n     * @returns {string} Returns the raw `toStringTag`.\\n     */\\n    function getRawTag(value) {\\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\\n          tag = value[symToStringTag];\\n\\n      try {\\n        value[symToStringTag] = undefined;\\n        var unmasked = true;\\n      } catch (e) {}\\n\\n      var result = nativeObjectToString.call(value);\\n      if (unmasked) {\\n        if (isOwn) {\\n          value[symToStringTag] = tag;\\n        } else {\\n          delete value[symToStringTag];\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an array of the own enumerable symbols of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of symbols.\\n     */\\n    var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\\n\\n    /**\\n     * Creates an array of the own and inherited enumerable symbols of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of symbols.\\n     */\\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\\n      var result = [];\\n      while (object) {\\n        arrayPush(result, getSymbols(object));\\n        object = getPrototype(object);\\n      }\\n      return result;\\n    };\\n\\n    /**\\n     * Gets the `toStringTag` of `value`.\\n     *\\n     * @private\\n     * @param {*} value The value to query.\\n     * @returns {string} Returns the `toStringTag`.\\n     */\\n    var getTag = baseGetTag;\\n\\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\\n        (Map && getTag(new Map) != mapTag) ||\\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\\n        (Set && getTag(new Set) != setTag) ||\\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\\n      getTag = function(value) {\\n        var result = baseGetTag(value),\\n            Ctor = result == objectTag ? value.constructor : undefined,\\n            ctorString = Ctor ? toSource(Ctor) : '';\\n\\n        if (ctorString) {\\n          switch (ctorString) {\\n            case dataViewCtorString: return dataViewTag;\\n            case mapCtorString: return mapTag;\\n            case promiseCtorString: return promiseTag;\\n            case setCtorString: return setTag;\\n            case weakMapCtorString: return weakMapTag;\\n          }\\n        }\\n        return result;\\n      };\\n    }\\n\\n    /**\\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\\n     *\\n     * @private\\n     * @param {number} start The start of the view.\\n     * @param {number} end The end of the view.\\n     * @param {Array} transforms The transformations to apply to the view.\\n     * @returns {Object} Returns an object containing the `start` and `end`\\n     *  positions of the view.\\n     */\\n    function getView(start, end, transforms) {\\n      var index = -1,\\n          length = transforms.length;\\n\\n      while (++index < length) {\\n        var data = transforms[index],\\n            size = data.size;\\n\\n        switch (data.type) {\\n          case 'drop':      start += size; break;\\n          case 'dropRight': end -= size; break;\\n          case 'take':      end = nativeMin(end, start + size); break;\\n          case 'takeRight': start = nativeMax(start, end - size); break;\\n        }\\n      }\\n      return { 'start': start, 'end': end };\\n    }\\n\\n    /**\\n     * Extracts wrapper details from the `source` body comment.\\n     *\\n     * @private\\n     * @param {string} source The source to inspect.\\n     * @returns {Array} Returns the wrapper details.\\n     */\\n    function getWrapDetails(source) {\\n      var match = source.match(reWrapDetails);\\n      return match ? match[1].split(reSplitDetails) : [];\\n    }\\n\\n    /**\\n     * Checks if `path` exists on `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path to check.\\n     * @param {Function} hasFunc The function to check properties.\\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\\n     */\\n    function hasPath(object, path, hasFunc) {\\n      path = castPath(path, object);\\n\\n      var index = -1,\\n          length = path.length,\\n          result = false;\\n\\n      while (++index < length) {\\n        var key = toKey(path[index]);\\n        if (!(result = object != null && hasFunc(object, key))) {\\n          break;\\n        }\\n        object = object[key];\\n      }\\n      if (result || ++index != length) {\\n        return result;\\n      }\\n      length = object == null ? 0 : object.length;\\n      return !!length && isLength(length) && isIndex(key, length) &&\\n        (isArray(object) || isArguments(object));\\n    }\\n\\n    /**\\n     * Initializes an array clone.\\n     *\\n     * @private\\n     * @param {Array} array The array to clone.\\n     * @returns {Array} Returns the initialized clone.\\n     */\\n    function initCloneArray(array) {\\n      var length = array.length,\\n          result = array.constructor(length);\\n\\n      // Add properties assigned by `RegExp#exec`.\\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\\n        result.index = array.index;\\n        result.input = array.input;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Initializes an object clone.\\n     *\\n     * @private\\n     * @param {Object} object The object to clone.\\n     * @returns {Object} Returns the initialized clone.\\n     */\\n    function initCloneObject(object) {\\n      return (typeof object.constructor == 'function' && !isPrototype(object))\\n        ? baseCreate(getPrototype(object))\\n        : {};\\n    }\\n\\n    /**\\n     * Initializes an object clone based on its `toStringTag`.\\n     *\\n     * **Note:** This function only supports cloning values with tags of\\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\\n     *\\n     * @private\\n     * @param {Object} object The object to clone.\\n     * @param {string} tag The `toStringTag` of the object to clone.\\n     * @param {Function} cloneFunc The function to clone values.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @returns {Object} Returns the initialized clone.\\n     */\\n    function initCloneByTag(object, tag, cloneFunc, isDeep) {\\n      var Ctor = object.constructor;\\n      switch (tag) {\\n        case arrayBufferTag:\\n          return cloneArrayBuffer(object);\\n\\n        case boolTag:\\n        case dateTag:\\n          return new Ctor(+object);\\n\\n        case dataViewTag:\\n          return cloneDataView(object, isDeep);\\n\\n        case float32Tag: case float64Tag:\\n        case int8Tag: case int16Tag: case int32Tag:\\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\\n          return cloneTypedArray(object, isDeep);\\n\\n        case mapTag:\\n          return cloneMap(object, isDeep, cloneFunc);\\n\\n        case numberTag:\\n        case stringTag:\\n          return new Ctor(object);\\n\\n        case regexpTag:\\n          return cloneRegExp(object);\\n\\n        case setTag:\\n          return cloneSet(object, isDeep, cloneFunc);\\n\\n        case symbolTag:\\n          return cloneSymbol(object);\\n      }\\n    }\\n\\n    /**\\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\\n     *\\n     * @private\\n     * @param {string} source The source to modify.\\n     * @returns {Array} details The details to insert.\\n     * @returns {string} Returns the modified source.\\n     */\\n    function insertWrapDetails(source, details) {\\n      var length = details.length;\\n      if (!length) {\\n        return source;\\n      }\\n      var lastIndex = length - 1;\\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\\n      details = details.join(length > 2 ? ', ' : ' ');\\n      return source.replace(reWrapComment, '{\\\\n/* [wrapped with ' + details + '] */\\\\n');\\n    }\\n\\n    /**\\n     * Checks if `value` is a flattenable `arguments` object or array.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\\n     */\\n    function isFlattenable(value) {\\n      return isArray(value) || isArguments(value) ||\\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\\n    }\\n\\n    /**\\n     * Checks if `value` is a valid array-like index.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\\n     */\\n    function isIndex(value, length) {\\n      length = length == null ? MAX_SAFE_INTEGER : length;\\n      return !!length &&\\n        (typeof value == 'number' || reIsUint.test(value)) &&\\n        (value > -1 && value % 1 == 0 && value < length);\\n    }\\n\\n    /**\\n     * Checks if the given arguments are from an iteratee call.\\n     *\\n     * @private\\n     * @param {*} value The potential iteratee value argument.\\n     * @param {*} index The potential iteratee index or key argument.\\n     * @param {*} object The potential iteratee object argument.\\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\\n     *  else `false`.\\n     */\\n    function isIterateeCall(value, index, object) {\\n      if (!isObject(object)) {\\n        return false;\\n      }\\n      var type = typeof index;\\n      if (type == 'number'\\n            ? (isArrayLike(object) && isIndex(index, object.length))\\n            : (type == 'string' && index in object)\\n          ) {\\n        return eq(object[index], value);\\n      }\\n      return false;\\n    }\\n\\n    /**\\n     * Checks if `value` is a property name and not a property path.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @param {Object} [object] The object to query keys on.\\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\\n     */\\n    function isKey(value, object) {\\n      if (isArray(value)) {\\n        return false;\\n      }\\n      var type = typeof value;\\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\\n          value == null || isSymbol(value)) {\\n        return true;\\n      }\\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\\n        (object != null && value in Object(object));\\n    }\\n\\n    /**\\n     * Checks if `value` is suitable for use as unique object key.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\\n     */\\n    function isKeyable(value) {\\n      var type = typeof value;\\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\\n        ? (value !== '__proto__')\\n        : (value === null);\\n    }\\n\\n    /**\\n     * Checks if `func` has a lazy counterpart.\\n     *\\n     * @private\\n     * @param {Function} func The function to check.\\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\\n     *  else `false`.\\n     */\\n    function isLaziable(func) {\\n      var funcName = getFuncName(func),\\n          other = lodash[funcName];\\n\\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\\n        return false;\\n      }\\n      if (func === other) {\\n        return true;\\n      }\\n      var data = getData(other);\\n      return !!data && func === data[0];\\n    }\\n\\n    /**\\n     * Checks if `func` has its source masked.\\n     *\\n     * @private\\n     * @param {Function} func The function to check.\\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\\n     */\\n    function isMasked(func) {\\n      return !!maskSrcKey && (maskSrcKey in func);\\n    }\\n\\n    /**\\n     * Checks if `func` is capable of being masked.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\\n     */\\n    var isMaskable = coreJsData ? isFunction : stubFalse;\\n\\n    /**\\n     * Checks if `value` is likely a prototype object.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\\n     */\\n    function isPrototype(value) {\\n      var Ctor = value && value.constructor,\\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\\n\\n      return value === proto;\\n    }\\n\\n    /**\\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\\n     *  equality comparisons, else `false`.\\n     */\\n    function isStrictComparable(value) {\\n      return value === value && !isObject(value);\\n    }\\n\\n    /**\\n     * A specialized version of `matchesProperty` for source values suitable\\n     * for strict equality comparisons, i.e. `===`.\\n     *\\n     * @private\\n     * @param {string} key The key of the property to get.\\n     * @param {*} srcValue The value to match.\\n     * @returns {Function} Returns the new spec function.\\n     */\\n    function matchesStrictComparable(key, srcValue) {\\n      return function(object) {\\n        if (object == null) {\\n          return false;\\n        }\\n        return object[key] === srcValue &&\\n          (srcValue !== undefined || (key in Object(object)));\\n      };\\n    }\\n\\n    /**\\n     * A specialized version of `_.memoize` which clears the memoized function's\\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\\n     *\\n     * @private\\n     * @param {Function} func The function to have its output memoized.\\n     * @returns {Function} Returns the new memoized function.\\n     */\\n    function memoizeCapped(func) {\\n      var result = memoize(func, function(key) {\\n        if (cache.size === MAX_MEMOIZE_SIZE) {\\n          cache.clear();\\n        }\\n        return key;\\n      });\\n\\n      var cache = result.cache;\\n      return result;\\n    }\\n\\n    /**\\n     * Merges the function metadata of `source` into `data`.\\n     *\\n     * Merging metadata reduces the number of wrappers used to invoke a function.\\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\\n     * may be applied regardless of execution order. Methods like `_.ary` and\\n     * `_.rearg` modify function arguments, making the order in which they are\\n     * executed important, preventing the merging of metadata. However, we make\\n     * an exception for a safe combined case where curried functions have `_.ary`\\n     * and or `_.rearg` applied.\\n     *\\n     * @private\\n     * @param {Array} data The destination metadata.\\n     * @param {Array} source The source metadata.\\n     * @returns {Array} Returns `data`.\\n     */\\n    function mergeData(data, source) {\\n      var bitmask = data[1],\\n          srcBitmask = source[1],\\n          newBitmask = bitmask | srcBitmask,\\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\\n\\n      var isCombo =\\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\\n\\n      // Exit early if metadata can't be merged.\\n      if (!(isCommon || isCombo)) {\\n        return data;\\n      }\\n      // Use source `thisArg` if available.\\n      if (srcBitmask & WRAP_BIND_FLAG) {\\n        data[2] = source[2];\\n        // Set when currying a bound function.\\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\\n      }\\n      // Compose partial arguments.\\n      var value = source[3];\\n      if (value) {\\n        var partials = data[3];\\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\\n      }\\n      // Compose partial right arguments.\\n      value = source[5];\\n      if (value) {\\n        partials = data[5];\\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\\n      }\\n      // Use source `argPos` if available.\\n      value = source[7];\\n      if (value) {\\n        data[7] = value;\\n      }\\n      // Use source `ary` if it's smaller.\\n      if (srcBitmask & WRAP_ARY_FLAG) {\\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\\n      }\\n      // Use source `arity` if one is not provided.\\n      if (data[9] == null) {\\n        data[9] = source[9];\\n      }\\n      // Use source `func` and merge bitmasks.\\n      data[0] = source[0];\\n      data[1] = newBitmask;\\n\\n      return data;\\n    }\\n\\n    /**\\n     * Used by `_.defaultsDeep` to customize its `_.merge` use.\\n     *\\n     * @private\\n     * @param {*} objValue The destination value.\\n     * @param {*} srcValue The source value.\\n     * @param {string} key The key of the property to merge.\\n     * @param {Object} object The parent object of `objValue`.\\n     * @param {Object} source The parent object of `srcValue`.\\n     * @param {Object} [stack] Tracks traversed source values and their merged\\n     *  counterparts.\\n     * @returns {*} Returns the value to assign.\\n     */\\n    function mergeDefaults(objValue, srcValue, key, object, source, stack) {\\n      if (isObject(objValue) && isObject(srcValue)) {\\n        // Recursively merge objects and arrays (susceptible to call stack limits).\\n        stack.set(srcValue, objValue);\\n        baseMerge(objValue, srcValue, undefined, mergeDefaults, stack);\\n        stack['delete'](srcValue);\\n      }\\n      return objValue;\\n    }\\n\\n    /**\\n     * This function is like\\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\\n     * except that it includes inherited enumerable properties.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names.\\n     */\\n    function nativeKeysIn(object) {\\n      var result = [];\\n      if (object != null) {\\n        for (var key in Object(object)) {\\n          result.push(key);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Converts `value` to a string using `Object.prototype.toString`.\\n     *\\n     * @private\\n     * @param {*} value The value to convert.\\n     * @returns {string} Returns the converted string.\\n     */\\n    function objectToString(value) {\\n      return nativeObjectToString.call(value);\\n    }\\n\\n    /**\\n     * A specialized version of `baseRest` which transforms the rest array.\\n     *\\n     * @private\\n     * @param {Function} func The function to apply a rest parameter to.\\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\\n     * @param {Function} transform The rest array transform.\\n     * @returns {Function} Returns the new function.\\n     */\\n    function overRest(func, start, transform) {\\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\\n      return function() {\\n        var args = arguments,\\n            index = -1,\\n            length = nativeMax(args.length - start, 0),\\n            array = Array(length);\\n\\n        while (++index < length) {\\n          array[index] = args[start + index];\\n        }\\n        index = -1;\\n        var otherArgs = Array(start + 1);\\n        while (++index < start) {\\n          otherArgs[index] = args[index];\\n        }\\n        otherArgs[start] = transform(array);\\n        return apply(func, this, otherArgs);\\n      };\\n    }\\n\\n    /**\\n     * Gets the parent value at `path` of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {Array} path The path to get the parent value of.\\n     * @returns {*} Returns the parent value.\\n     */\\n    function parent(object, path) {\\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\\n    }\\n\\n    /**\\n     * Reorder `array` according to the specified indexes where the element at\\n     * the first index is assigned as the first element, the element at\\n     * the second index is assigned as the second element, and so on.\\n     *\\n     * @private\\n     * @param {Array} array The array to reorder.\\n     * @param {Array} indexes The arranged array indexes.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function reorder(array, indexes) {\\n      var arrLength = array.length,\\n          length = nativeMin(indexes.length, arrLength),\\n          oldArray = copyArray(array);\\n\\n      while (length--) {\\n        var index = indexes[length];\\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * Sets metadata for `func`.\\n     *\\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\\n     * period of time, it will trip its breaker and transition to an identity\\n     * function to avoid garbage collection pauses in V8. See\\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\\n     * for more details.\\n     *\\n     * @private\\n     * @param {Function} func The function to associate metadata with.\\n     * @param {*} data The metadata.\\n     * @returns {Function} Returns `func`.\\n     */\\n    var setData = shortOut(baseSetData);\\n\\n    /**\\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\\n     *\\n     * @private\\n     * @param {Function} func The function to delay.\\n     * @param {number} wait The number of milliseconds to delay invocation.\\n     * @returns {number|Object} Returns the timer id or timeout object.\\n     */\\n    var setTimeout = ctxSetTimeout || function(func, wait) {\\n      return root.setTimeout(func, wait);\\n    };\\n\\n    /**\\n     * Sets the `toString` method of `func` to return `string`.\\n     *\\n     * @private\\n     * @param {Function} func The function to modify.\\n     * @param {Function} string The `toString` result.\\n     * @returns {Function} Returns `func`.\\n     */\\n    var setToString = shortOut(baseSetToString);\\n\\n    /**\\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\\n     * with wrapper details in a comment at the top of the source body.\\n     *\\n     * @private\\n     * @param {Function} wrapper The function to modify.\\n     * @param {Function} reference The reference function.\\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\\n     * @returns {Function} Returns `wrapper`.\\n     */\\n    function setWrapToString(wrapper, reference, bitmask) {\\n      var source = (reference + '');\\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\\n    }\\n\\n    /**\\n     * Creates a function that'll short out and invoke `identity` instead\\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\\n     * milliseconds.\\n     *\\n     * @private\\n     * @param {Function} func The function to restrict.\\n     * @returns {Function} Returns the new shortable function.\\n     */\\n    function shortOut(func) {\\n      var count = 0,\\n          lastCalled = 0;\\n\\n      return function() {\\n        var stamp = nativeNow(),\\n            remaining = HOT_SPAN - (stamp - lastCalled);\\n\\n        lastCalled = stamp;\\n        if (remaining > 0) {\\n          if (++count >= HOT_COUNT) {\\n            return arguments[0];\\n          }\\n        } else {\\n          count = 0;\\n        }\\n        return func.apply(undefined, arguments);\\n      };\\n    }\\n\\n    /**\\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\\n     *\\n     * @private\\n     * @param {Array} array The array to shuffle.\\n     * @param {number} [size=array.length] The size of `array`.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function shuffleSelf(array, size) {\\n      var index = -1,\\n          length = array.length,\\n          lastIndex = length - 1;\\n\\n      size = size === undefined ? length : size;\\n      while (++index < size) {\\n        var rand = baseRandom(index, lastIndex),\\n            value = array[rand];\\n\\n        array[rand] = array[index];\\n        array[index] = value;\\n      }\\n      array.length = size;\\n      return array;\\n    }\\n\\n    /**\\n     * Converts `string` to a property path array.\\n     *\\n     * @private\\n     * @param {string} string The string to convert.\\n     * @returns {Array} Returns the property path array.\\n     */\\n    var stringToPath = memoizeCapped(function(string) {\\n      var result = [];\\n      if (reLeadingDot.test(string)) {\\n        result.push('');\\n      }\\n      string.replace(rePropName, function(match, number, quote, string) {\\n        result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\\n      });\\n      return result;\\n    });\\n\\n    /**\\n     * Converts `value` to a string key if it's not a string or symbol.\\n     *\\n     * @private\\n     * @param {*} value The value to inspect.\\n     * @returns {string|symbol} Returns the key.\\n     */\\n    function toKey(value) {\\n      if (typeof value == 'string' || isSymbol(value)) {\\n        return value;\\n      }\\n      var result = (value + '');\\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\\n    }\\n\\n    /**\\n     * Converts `func` to its source code.\\n     *\\n     * @private\\n     * @param {Function} func The function to convert.\\n     * @returns {string} Returns the source code.\\n     */\\n    function toSource(func) {\\n      if (func != null) {\\n        try {\\n          return funcToString.call(func);\\n        } catch (e) {}\\n        try {\\n          return (func + '');\\n        } catch (e) {}\\n      }\\n      return '';\\n    }\\n\\n    /**\\n     * Updates wrapper `details` based on `bitmask` flags.\\n     *\\n     * @private\\n     * @returns {Array} details The details to modify.\\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\\n     * @returns {Array} Returns `details`.\\n     */\\n    function updateWrapDetails(details, bitmask) {\\n      arrayEach(wrapFlags, function(pair) {\\n        var value = '_.' + pair[0];\\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\\n          details.push(value);\\n        }\\n      });\\n      return details.sort();\\n    }\\n\\n    /**\\n     * Creates a clone of `wrapper`.\\n     *\\n     * @private\\n     * @param {Object} wrapper The wrapper to clone.\\n     * @returns {Object} Returns the cloned wrapper.\\n     */\\n    function wrapperClone(wrapper) {\\n      if (wrapper instanceof LazyWrapper) {\\n        return wrapper.clone();\\n      }\\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\\n      result.__actions__ = copyArray(wrapper.__actions__);\\n      result.__index__  = wrapper.__index__;\\n      result.__values__ = wrapper.__values__;\\n      return result;\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates an array of elements split into groups the length of `size`.\\n     * If `array` can't be split evenly, the final chunk will be the remaining\\n     * elements.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to process.\\n     * @param {number} [size=1] The length of each chunk\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Array} Returns the new array of chunks.\\n     * @example\\n     *\\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\\n     * // => [['a', 'b'], ['c', 'd']]\\n     *\\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\\n     * // => [['a', 'b', 'c'], ['d']]\\n     */\\n    function chunk(array, size, guard) {\\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\\n        size = 1;\\n      } else {\\n        size = nativeMax(toInteger(size), 0);\\n      }\\n      var length = array == null ? 0 : array.length;\\n      if (!length || size < 1) {\\n        return [];\\n      }\\n      var index = 0,\\n          resIndex = 0,\\n          result = Array(nativeCeil(length / size));\\n\\n      while (index < length) {\\n        result[resIndex++] = baseSlice(array, index, (index += size));\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an array with all falsey values removed. The values `false`, `null`,\\n     * `0`, `\\\"\\\"`, `undefined`, and `NaN` are falsey.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to compact.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @example\\n     *\\n     * _.compact([0, 1, false, 2, '', 3]);\\n     * // => [1, 2, 3]\\n     */\\n    function compact(array) {\\n      var index = -1,\\n          length = array == null ? 0 : array.length,\\n          resIndex = 0,\\n          result = [];\\n\\n      while (++index < length) {\\n        var value = array[index];\\n        if (value) {\\n          result[resIndex++] = value;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Creates a new array concatenating `array` with any additional arrays\\n     * and/or values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to concatenate.\\n     * @param {...*} [values] The values to concatenate.\\n     * @returns {Array} Returns the new concatenated array.\\n     * @example\\n     *\\n     * var array = [1];\\n     * var other = _.concat(array, 2, [3], [[4]]);\\n     *\\n     * console.log(other);\\n     * // => [1, 2, 3, [4]]\\n     *\\n     * console.log(array);\\n     * // => [1]\\n     */\\n    function concat() {\\n      var length = arguments.length;\\n      if (!length) {\\n        return [];\\n      }\\n      var args = Array(length - 1),\\n          array = arguments[0],\\n          index = length;\\n\\n      while (index--) {\\n        args[index - 1] = arguments[index];\\n      }\\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\\n    }\\n\\n    /**\\n     * Creates an array of `array` values not included in the other given arrays\\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * for equality comparisons. The order and references of result values are\\n     * determined by the first array.\\n     *\\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {...Array} [values] The values to exclude.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @see _.without, _.xor\\n     * @example\\n     *\\n     * _.difference([2, 1], [2, 3]);\\n     * // => [1]\\n     */\\n    var difference = baseRest(function(array, values) {\\n      return isArrayLikeObject(array)\\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\\n        : [];\\n    });\\n\\n    /**\\n     * This method is like `_.difference` except that it accepts `iteratee` which\\n     * is invoked for each element of `array` and `values` to generate the criterion\\n     * by which they're compared. The order and references of result values are\\n     * determined by the first array. The iteratee is invoked with one argument:\\n     * (value).\\n     *\\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {...Array} [values] The values to exclude.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @example\\n     *\\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\\n     * // => [1.2]\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\\n     * // => [{ 'x': 2 }]\\n     */\\n    var differenceBy = baseRest(function(array, values) {\\n      var iteratee = last(values);\\n      if (isArrayLikeObject(iteratee)) {\\n        iteratee = undefined;\\n      }\\n      return isArrayLikeObject(array)\\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\\n        : [];\\n    });\\n\\n    /**\\n     * This method is like `_.difference` except that it accepts `comparator`\\n     * which is invoked to compare elements of `array` to `values`. The order and\\n     * references of result values are determined by the first array. The comparator\\n     * is invoked with two arguments: (arrVal, othVal).\\n     *\\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {...Array} [values] The values to exclude.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @example\\n     *\\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\\n     *\\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\\n     * // => [{ 'x': 2, 'y': 1 }]\\n     */\\n    var differenceWith = baseRest(function(array, values) {\\n      var comparator = last(values);\\n      if (isArrayLikeObject(comparator)) {\\n        comparator = undefined;\\n      }\\n      return isArrayLikeObject(array)\\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\\n        : [];\\n    });\\n\\n    /**\\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.5.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=1] The number of elements to drop.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.drop([1, 2, 3]);\\n     * // => [2, 3]\\n     *\\n     * _.drop([1, 2, 3], 2);\\n     * // => [3]\\n     *\\n     * _.drop([1, 2, 3], 5);\\n     * // => []\\n     *\\n     * _.drop([1, 2, 3], 0);\\n     * // => [1, 2, 3]\\n     */\\n    function drop(array, n, guard) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return [];\\n      }\\n      n = (guard || n === undefined) ? 1 : toInteger(n);\\n      return baseSlice(array, n < 0 ? 0 : n, length);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with `n` elements dropped from the end.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=1] The number of elements to drop.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.dropRight([1, 2, 3]);\\n     * // => [1, 2]\\n     *\\n     * _.dropRight([1, 2, 3], 2);\\n     * // => [1]\\n     *\\n     * _.dropRight([1, 2, 3], 5);\\n     * // => []\\n     *\\n     * _.dropRight([1, 2, 3], 0);\\n     * // => [1, 2, 3]\\n     */\\n    function dropRight(array, n, guard) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return [];\\n      }\\n      n = (guard || n === undefined) ? 1 : toInteger(n);\\n      n = length - n;\\n      return baseSlice(array, 0, n < 0 ? 0 : n);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` excluding elements dropped from the end.\\n     * Elements are dropped until `predicate` returns falsey. The predicate is\\n     * invoked with three arguments: (value, index, array).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': true },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': false }\\n     * ];\\n     *\\n     * _.dropRightWhile(users, function(o) { return !o.active; });\\n     * // => objects for ['barney']\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\\n     * // => objects for ['barney', 'fred']\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.dropRightWhile(users, ['active', false]);\\n     * // => objects for ['barney']\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.dropRightWhile(users, 'active');\\n     * // => objects for ['barney', 'fred', 'pebbles']\\n     */\\n    function dropRightWhile(array, predicate) {\\n      return (array && array.length)\\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\\n        : [];\\n    }\\n\\n    /**\\n     * Creates a slice of `array` excluding elements dropped from the beginning.\\n     * Elements are dropped until `predicate` returns falsey. The predicate is\\n     * invoked with three arguments: (value, index, array).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': false },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': true }\\n     * ];\\n     *\\n     * _.dropWhile(users, function(o) { return !o.active; });\\n     * // => objects for ['pebbles']\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\\n     * // => objects for ['fred', 'pebbles']\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.dropWhile(users, ['active', false]);\\n     * // => objects for ['pebbles']\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.dropWhile(users, 'active');\\n     * // => objects for ['barney', 'fred', 'pebbles']\\n     */\\n    function dropWhile(array, predicate) {\\n      return (array && array.length)\\n        ? baseWhile(array, getIteratee(predicate, 3), true)\\n        : [];\\n    }\\n\\n    /**\\n     * Fills elements of `array` with `value` from `start` up to, but not\\n     * including, `end`.\\n     *\\n     * **Note:** This method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.2.0\\n     * @category Array\\n     * @param {Array} array The array to fill.\\n     * @param {*} value The value to fill `array` with.\\n     * @param {number} [start=0] The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns `array`.\\n     * @example\\n     *\\n     * var array = [1, 2, 3];\\n     *\\n     * _.fill(array, 'a');\\n     * console.log(array);\\n     * // => ['a', 'a', 'a']\\n     *\\n     * _.fill(Array(3), 2);\\n     * // => [2, 2, 2]\\n     *\\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\\n     * // => [4, '*', '*', 10]\\n     */\\n    function fill(array, value, start, end) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return [];\\n      }\\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\\n        start = 0;\\n        end = length;\\n      }\\n      return baseFill(array, value, start, end);\\n    }\\n\\n    /**\\n     * This method is like `_.find` except that it returns the index of the first\\n     * element `predicate` returns truthy for instead of the element itself.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.1.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @param {number} [fromIndex=0] The index to search from.\\n     * @returns {number} Returns the index of the found element, else `-1`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': false },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': true }\\n     * ];\\n     *\\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\\n     * // => 0\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\\n     * // => 1\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.findIndex(users, ['active', false]);\\n     * // => 0\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.findIndex(users, 'active');\\n     * // => 2\\n     */\\n    function findIndex(array, predicate, fromIndex) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return -1;\\n      }\\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\\n      if (index < 0) {\\n        index = nativeMax(length + index, 0);\\n      }\\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\\n    }\\n\\n    /**\\n     * This method is like `_.findIndex` except that it iterates over elements\\n     * of `collection` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @param {number} [fromIndex=array.length-1] The index to search from.\\n     * @returns {number} Returns the index of the found element, else `-1`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': true },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': false }\\n     * ];\\n     *\\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\\n     * // => 2\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\\n     * // => 0\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.findLastIndex(users, ['active', false]);\\n     * // => 2\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.findLastIndex(users, 'active');\\n     * // => 0\\n     */\\n    function findLastIndex(array, predicate, fromIndex) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return -1;\\n      }\\n      var index = length - 1;\\n      if (fromIndex !== undefined) {\\n        index = toInteger(fromIndex);\\n        index = fromIndex < 0\\n          ? nativeMax(length + index, 0)\\n          : nativeMin(index, length - 1);\\n      }\\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\\n    }\\n\\n    /**\\n     * Flattens `array` a single level deep.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to flatten.\\n     * @returns {Array} Returns the new flattened array.\\n     * @example\\n     *\\n     * _.flatten([1, [2, [3, [4]], 5]]);\\n     * // => [1, 2, [3, [4]], 5]\\n     */\\n    function flatten(array) {\\n      var length = array == null ? 0 : array.length;\\n      return length ? baseFlatten(array, 1) : [];\\n    }\\n\\n    /**\\n     * Recursively flattens `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to flatten.\\n     * @returns {Array} Returns the new flattened array.\\n     * @example\\n     *\\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\\n     * // => [1, 2, 3, 4, 5]\\n     */\\n    function flattenDeep(array) {\\n      var length = array == null ? 0 : array.length;\\n      return length ? baseFlatten(array, INFINITY) : [];\\n    }\\n\\n    /**\\n     * Recursively flatten `array` up to `depth` times.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.4.0\\n     * @category Array\\n     * @param {Array} array The array to flatten.\\n     * @param {number} [depth=1] The maximum recursion depth.\\n     * @returns {Array} Returns the new flattened array.\\n     * @example\\n     *\\n     * var array = [1, [2, [3, [4]], 5]];\\n     *\\n     * _.flattenDepth(array, 1);\\n     * // => [1, 2, [3, [4]], 5]\\n     *\\n     * _.flattenDepth(array, 2);\\n     * // => [1, 2, 3, [4], 5]\\n     */\\n    function flattenDepth(array, depth) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return [];\\n      }\\n      depth = depth === undefined ? 1 : toInteger(depth);\\n      return baseFlatten(array, depth);\\n    }\\n\\n    /**\\n     * The inverse of `_.toPairs`; this method returns an object composed\\n     * from key-value `pairs`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} pairs The key-value pairs.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * _.fromPairs([['a', 1], ['b', 2]]);\\n     * // => { 'a': 1, 'b': 2 }\\n     */\\n    function fromPairs(pairs) {\\n      var index = -1,\\n          length = pairs == null ? 0 : pairs.length,\\n          result = {};\\n\\n      while (++index < length) {\\n        var pair = pairs[index];\\n        result[pair[0]] = pair[1];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the first element of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @alias first\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @returns {*} Returns the first element of `array`.\\n     * @example\\n     *\\n     * _.head([1, 2, 3]);\\n     * // => 1\\n     *\\n     * _.head([]);\\n     * // => undefined\\n     */\\n    function head(array) {\\n      return (array && array.length) ? array[0] : undefined;\\n    }\\n\\n    /**\\n     * Gets the index at which the first occurrence of `value` is found in `array`\\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\\n     * offset from the end of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {*} value The value to search for.\\n     * @param {number} [fromIndex=0] The index to search from.\\n     * @returns {number} Returns the index of the matched value, else `-1`.\\n     * @example\\n     *\\n     * _.indexOf([1, 2, 1, 2], 2);\\n     * // => 1\\n     *\\n     * // Search from the `fromIndex`.\\n     * _.indexOf([1, 2, 1, 2], 2, 2);\\n     * // => 3\\n     */\\n    function indexOf(array, value, fromIndex) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return -1;\\n      }\\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\\n      if (index < 0) {\\n        index = nativeMax(length + index, 0);\\n      }\\n      return baseIndexOf(array, value, index);\\n    }\\n\\n    /**\\n     * Gets all but the last element of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.initial([1, 2, 3]);\\n     * // => [1, 2]\\n     */\\n    function initial(array) {\\n      var length = array == null ? 0 : array.length;\\n      return length ? baseSlice(array, 0, -1) : [];\\n    }\\n\\n    /**\\n     * Creates an array of unique values that are included in all given arrays\\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * for equality comparisons. The order and references of result values are\\n     * determined by the first array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @returns {Array} Returns the new array of intersecting values.\\n     * @example\\n     *\\n     * _.intersection([2, 1], [2, 3]);\\n     * // => [2]\\n     */\\n    var intersection = baseRest(function(arrays) {\\n      var mapped = arrayMap(arrays, castArrayLikeObject);\\n      return (mapped.length && mapped[0] === arrays[0])\\n        ? baseIntersection(mapped)\\n        : [];\\n    });\\n\\n    /**\\n     * This method is like `_.intersection` except that it accepts `iteratee`\\n     * which is invoked for each element of each `arrays` to generate the criterion\\n     * by which they're compared. The order and references of result values are\\n     * determined by the first array. The iteratee is invoked with one argument:\\n     * (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {Array} Returns the new array of intersecting values.\\n     * @example\\n     *\\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\\n     * // => [2.1]\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\\n     * // => [{ 'x': 1 }]\\n     */\\n    var intersectionBy = baseRest(function(arrays) {\\n      var iteratee = last(arrays),\\n          mapped = arrayMap(arrays, castArrayLikeObject);\\n\\n      if (iteratee === last(mapped)) {\\n        iteratee = undefined;\\n      } else {\\n        mapped.pop();\\n      }\\n      return (mapped.length && mapped[0] === arrays[0])\\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\\n        : [];\\n    });\\n\\n    /**\\n     * This method is like `_.intersection` except that it accepts `comparator`\\n     * which is invoked to compare elements of `arrays`. The order and references\\n     * of result values are determined by the first array. The comparator is\\n     * invoked with two arguments: (arrVal, othVal).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new array of intersecting values.\\n     * @example\\n     *\\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\\n     *\\n     * _.intersectionWith(objects, others, _.isEqual);\\n     * // => [{ 'x': 1, 'y': 2 }]\\n     */\\n    var intersectionWith = baseRest(function(arrays) {\\n      var comparator = last(arrays),\\n          mapped = arrayMap(arrays, castArrayLikeObject);\\n\\n      comparator = typeof comparator == 'function' ? comparator : undefined;\\n      if (comparator) {\\n        mapped.pop();\\n      }\\n      return (mapped.length && mapped[0] === arrays[0])\\n        ? baseIntersection(mapped, undefined, comparator)\\n        : [];\\n    });\\n\\n    /**\\n     * Converts all elements in `array` into a string separated by `separator`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to convert.\\n     * @param {string} [separator=','] The element separator.\\n     * @returns {string} Returns the joined string.\\n     * @example\\n     *\\n     * _.join(['a', 'b', 'c'], '~');\\n     * // => 'a~b~c'\\n     */\\n    function join(array, separator) {\\n      return array == null ? '' : nativeJoin.call(array, separator);\\n    }\\n\\n    /**\\n     * Gets the last element of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @returns {*} Returns the last element of `array`.\\n     * @example\\n     *\\n     * _.last([1, 2, 3]);\\n     * // => 3\\n     */\\n    function last(array) {\\n      var length = array == null ? 0 : array.length;\\n      return length ? array[length - 1] : undefined;\\n    }\\n\\n    /**\\n     * This method is like `_.indexOf` except that it iterates over elements of\\n     * `array` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {*} value The value to search for.\\n     * @param {number} [fromIndex=array.length-1] The index to search from.\\n     * @returns {number} Returns the index of the matched value, else `-1`.\\n     * @example\\n     *\\n     * _.lastIndexOf([1, 2, 1, 2], 2);\\n     * // => 3\\n     *\\n     * // Search from the `fromIndex`.\\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\\n     * // => 1\\n     */\\n    function lastIndexOf(array, value, fromIndex) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return -1;\\n      }\\n      var index = length;\\n      if (fromIndex !== undefined) {\\n        index = toInteger(fromIndex);\\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\\n      }\\n      return value === value\\n        ? strictLastIndexOf(array, value, index)\\n        : baseFindIndex(array, baseIsNaN, index, true);\\n    }\\n\\n    /**\\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\\n     * element from the end is returned.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.11.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=0] The index of the element to return.\\n     * @returns {*} Returns the nth element of `array`.\\n     * @example\\n     *\\n     * var array = ['a', 'b', 'c', 'd'];\\n     *\\n     * _.nth(array, 1);\\n     * // => 'b'\\n     *\\n     * _.nth(array, -2);\\n     * // => 'c';\\n     */\\n    function nth(array, n) {\\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\\n    }\\n\\n    /**\\n     * Removes all given values from `array` using\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\\n     * to remove elements from an array by predicate.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {...*} [values] The values to remove.\\n     * @returns {Array} Returns `array`.\\n     * @example\\n     *\\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\\n     *\\n     * _.pull(array, 'a', 'c');\\n     * console.log(array);\\n     * // => ['b', 'b']\\n     */\\n    var pull = baseRest(pullAll);\\n\\n    /**\\n     * This method is like `_.pull` except that it accepts an array of values to remove.\\n     *\\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {Array} values The values to remove.\\n     * @returns {Array} Returns `array`.\\n     * @example\\n     *\\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\\n     *\\n     * _.pullAll(array, ['a', 'c']);\\n     * console.log(array);\\n     * // => ['b', 'b']\\n     */\\n    function pullAll(array, values) {\\n      return (array && array.length && values && values.length)\\n        ? basePullAll(array, values)\\n        : array;\\n    }\\n\\n    /**\\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\\n     * invoked for each element of `array` and `values` to generate the criterion\\n     * by which they're compared. The iteratee is invoked with one argument: (value).\\n     *\\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {Array} values The values to remove.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {Array} Returns `array`.\\n     * @example\\n     *\\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\\n     *\\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\\n     * console.log(array);\\n     * // => [{ 'x': 2 }]\\n     */\\n    function pullAllBy(array, values, iteratee) {\\n      return (array && array.length && values && values.length)\\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\\n        : array;\\n    }\\n\\n    /**\\n     * This method is like `_.pullAll` except that it accepts `comparator` which\\n     * is invoked to compare elements of `array` to `values`. The comparator is\\n     * invoked with two arguments: (arrVal, othVal).\\n     *\\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.6.0\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {Array} values The values to remove.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns `array`.\\n     * @example\\n     *\\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\\n     *\\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\\n     * console.log(array);\\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\\n     */\\n    function pullAllWith(array, values, comparator) {\\n      return (array && array.length && values && values.length)\\n        ? basePullAll(array, values, undefined, comparator)\\n        : array;\\n    }\\n\\n    /**\\n     * Removes elements from `array` corresponding to `indexes` and returns an\\n     * array of removed elements.\\n     *\\n     * **Note:** Unlike `_.at`, this method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\\n     * @returns {Array} Returns the new array of removed elements.\\n     * @example\\n     *\\n     * var array = ['a', 'b', 'c', 'd'];\\n     * var pulled = _.pullAt(array, [1, 3]);\\n     *\\n     * console.log(array);\\n     * // => ['a', 'c']\\n     *\\n     * console.log(pulled);\\n     * // => ['b', 'd']\\n     */\\n    var pullAt = flatRest(function(array, indexes) {\\n      var length = array == null ? 0 : array.length,\\n          result = baseAt(array, indexes);\\n\\n      basePullAt(array, arrayMap(indexes, function(index) {\\n        return isIndex(index, length) ? +index : index;\\n      }).sort(compareAscending));\\n\\n      return result;\\n    });\\n\\n    /**\\n     * Removes all elements from `array` that `predicate` returns truthy for\\n     * and returns an array of the removed elements. The predicate is invoked\\n     * with three arguments: (value, index, array).\\n     *\\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\\n     * to pull elements from an array by value.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the new array of removed elements.\\n     * @example\\n     *\\n     * var array = [1, 2, 3, 4];\\n     * var evens = _.remove(array, function(n) {\\n     *   return n % 2 == 0;\\n     * });\\n     *\\n     * console.log(array);\\n     * // => [1, 3]\\n     *\\n     * console.log(evens);\\n     * // => [2, 4]\\n     */\\n    function remove(array, predicate) {\\n      var result = [];\\n      if (!(array && array.length)) {\\n        return result;\\n      }\\n      var index = -1,\\n          indexes = [],\\n          length = array.length;\\n\\n      predicate = getIteratee(predicate, 3);\\n      while (++index < length) {\\n        var value = array[index];\\n        if (predicate(value, index, array)) {\\n          result.push(value);\\n          indexes.push(index);\\n        }\\n      }\\n      basePullAt(array, indexes);\\n      return result;\\n    }\\n\\n    /**\\n     * Reverses `array` so that the first element becomes the last, the second\\n     * element becomes the second to last, and so on.\\n     *\\n     * **Note:** This method mutates `array` and is based on\\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @returns {Array} Returns `array`.\\n     * @example\\n     *\\n     * var array = [1, 2, 3];\\n     *\\n     * _.reverse(array);\\n     * // => [3, 2, 1]\\n     *\\n     * console.log(array);\\n     * // => [3, 2, 1]\\n     */\\n    function reverse(array) {\\n      return array == null ? array : nativeReverse.call(array);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\\n     *\\n     * **Note:** This method is used instead of\\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\\n     * returned.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to slice.\\n     * @param {number} [start=0] The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns the slice of `array`.\\n     */\\n    function slice(array, start, end) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return [];\\n      }\\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\\n        start = 0;\\n        end = length;\\n      }\\n      else {\\n        start = start == null ? 0 : toInteger(start);\\n        end = end === undefined ? length : toInteger(end);\\n      }\\n      return baseSlice(array, start, end);\\n    }\\n\\n    /**\\n     * Uses a binary search to determine the lowest index at which `value`\\n     * should be inserted into `array` in order to maintain its sort order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     * @example\\n     *\\n     * _.sortedIndex([30, 50], 40);\\n     * // => 1\\n     */\\n    function sortedIndex(array, value) {\\n      return baseSortedIndex(array, value);\\n    }\\n\\n    /**\\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\\n     * which is invoked for `value` and each element of `array` to compute their\\n     * sort ranking. The iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     * @example\\n     *\\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\\n     *\\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\\n     * // => 0\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\\n     * // => 0\\n     */\\n    function sortedIndexBy(array, value, iteratee) {\\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\\n    }\\n\\n    /**\\n     * This method is like `_.indexOf` except that it performs a binary\\n     * search on a sorted `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {*} value The value to search for.\\n     * @returns {number} Returns the index of the matched value, else `-1`.\\n     * @example\\n     *\\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\\n     * // => 1\\n     */\\n    function sortedIndexOf(array, value) {\\n      var length = array == null ? 0 : array.length;\\n      if (length) {\\n        var index = baseSortedIndex(array, value);\\n        if (index < length && eq(array[index], value)) {\\n          return index;\\n        }\\n      }\\n      return -1;\\n    }\\n\\n    /**\\n     * This method is like `_.sortedIndex` except that it returns the highest\\n     * index at which `value` should be inserted into `array` in order to\\n     * maintain its sort order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     * @example\\n     *\\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\\n     * // => 4\\n     */\\n    function sortedLastIndex(array, value) {\\n      return baseSortedIndex(array, value, true);\\n    }\\n\\n    /**\\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\\n     * which is invoked for `value` and each element of `array` to compute their\\n     * sort ranking. The iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     * @example\\n     *\\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\\n     *\\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\\n     * // => 1\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\\n     * // => 1\\n     */\\n    function sortedLastIndexBy(array, value, iteratee) {\\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\\n    }\\n\\n    /**\\n     * This method is like `_.lastIndexOf` except that it performs a binary\\n     * search on a sorted `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {*} value The value to search for.\\n     * @returns {number} Returns the index of the matched value, else `-1`.\\n     * @example\\n     *\\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\\n     * // => 3\\n     */\\n    function sortedLastIndexOf(array, value) {\\n      var length = array == null ? 0 : array.length;\\n      if (length) {\\n        var index = baseSortedIndex(array, value, true) - 1;\\n        if (eq(array[index], value)) {\\n          return index;\\n        }\\n      }\\n      return -1;\\n    }\\n\\n    /**\\n     * This method is like `_.uniq` except that it's designed and optimized\\n     * for sorted arrays.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @returns {Array} Returns the new duplicate free array.\\n     * @example\\n     *\\n     * _.sortedUniq([1, 1, 2]);\\n     * // => [1, 2]\\n     */\\n    function sortedUniq(array) {\\n      return (array && array.length)\\n        ? baseSortedUniq(array)\\n        : [];\\n    }\\n\\n    /**\\n     * This method is like `_.uniqBy` except that it's designed and optimized\\n     * for sorted arrays.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {Function} [iteratee] The iteratee invoked per element.\\n     * @returns {Array} Returns the new duplicate free array.\\n     * @example\\n     *\\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\\n     * // => [1.1, 2.3]\\n     */\\n    function sortedUniqBy(array, iteratee) {\\n      return (array && array.length)\\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\\n        : [];\\n    }\\n\\n    /**\\n     * Gets all but the first element of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.tail([1, 2, 3]);\\n     * // => [2, 3]\\n     */\\n    function tail(array) {\\n      var length = array == null ? 0 : array.length;\\n      return length ? baseSlice(array, 1, length) : [];\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with `n` elements taken from the beginning.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=1] The number of elements to take.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.take([1, 2, 3]);\\n     * // => [1]\\n     *\\n     * _.take([1, 2, 3], 2);\\n     * // => [1, 2]\\n     *\\n     * _.take([1, 2, 3], 5);\\n     * // => [1, 2, 3]\\n     *\\n     * _.take([1, 2, 3], 0);\\n     * // => []\\n     */\\n    function take(array, n, guard) {\\n      if (!(array && array.length)) {\\n        return [];\\n      }\\n      n = (guard || n === undefined) ? 1 : toInteger(n);\\n      return baseSlice(array, 0, n < 0 ? 0 : n);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with `n` elements taken from the end.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=1] The number of elements to take.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.takeRight([1, 2, 3]);\\n     * // => [3]\\n     *\\n     * _.takeRight([1, 2, 3], 2);\\n     * // => [2, 3]\\n     *\\n     * _.takeRight([1, 2, 3], 5);\\n     * // => [1, 2, 3]\\n     *\\n     * _.takeRight([1, 2, 3], 0);\\n     * // => []\\n     */\\n    function takeRight(array, n, guard) {\\n      var length = array == null ? 0 : array.length;\\n      if (!length) {\\n        return [];\\n      }\\n      n = (guard || n === undefined) ? 1 : toInteger(n);\\n      n = length - n;\\n      return baseSlice(array, n < 0 ? 0 : n, length);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with elements taken from the end. Elements are\\n     * taken until `predicate` returns falsey. The predicate is invoked with\\n     * three arguments: (value, index, array).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': true },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': false }\\n     * ];\\n     *\\n     * _.takeRightWhile(users, function(o) { return !o.active; });\\n     * // => objects for ['fred', 'pebbles']\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\\n     * // => objects for ['pebbles']\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.takeRightWhile(users, ['active', false]);\\n     * // => objects for ['fred', 'pebbles']\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.takeRightWhile(users, 'active');\\n     * // => []\\n     */\\n    function takeRightWhile(array, predicate) {\\n      return (array && array.length)\\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\\n        : [];\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with elements taken from the beginning. Elements\\n     * are taken until `predicate` returns falsey. The predicate is invoked with\\n     * three arguments: (value, index, array).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': false },\\n     *   { 'user': 'fred',    'active': false},\\n     *   { 'user': 'pebbles', 'active': true }\\n     * ];\\n     *\\n     * _.takeWhile(users, function(o) { return !o.active; });\\n     * // => objects for ['barney', 'fred']\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\\n     * // => objects for ['barney']\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.takeWhile(users, ['active', false]);\\n     * // => objects for ['barney', 'fred']\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.takeWhile(users, 'active');\\n     * // => []\\n     */\\n    function takeWhile(array, predicate) {\\n      return (array && array.length)\\n        ? baseWhile(array, getIteratee(predicate, 3))\\n        : [];\\n    }\\n\\n    /**\\n     * Creates an array of unique values, in order, from all given arrays using\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @returns {Array} Returns the new array of combined values.\\n     * @example\\n     *\\n     * _.union([2], [1, 2]);\\n     * // => [2, 1]\\n     */\\n    var union = baseRest(function(arrays) {\\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\\n    });\\n\\n    /**\\n     * This method is like `_.union` except that it accepts `iteratee` which is\\n     * invoked for each element of each `arrays` to generate the criterion by\\n     * which uniqueness is computed. Result values are chosen from the first\\n     * array in which the value occurs. The iteratee is invoked with one argument:\\n     * (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {Array} Returns the new array of combined values.\\n     * @example\\n     *\\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\\n     * // => [2.1, 1.2]\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\\n     * // => [{ 'x': 1 }, { 'x': 2 }]\\n     */\\n    var unionBy = baseRest(function(arrays) {\\n      var iteratee = last(arrays);\\n      if (isArrayLikeObject(iteratee)) {\\n        iteratee = undefined;\\n      }\\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\\n    });\\n\\n    /**\\n     * This method is like `_.union` except that it accepts `comparator` which\\n     * is invoked to compare elements of `arrays`. Result values are chosen from\\n     * the first array in which the value occurs. The comparator is invoked\\n     * with two arguments: (arrVal, othVal).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new array of combined values.\\n     * @example\\n     *\\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\\n     *\\n     * _.unionWith(objects, others, _.isEqual);\\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\\n     */\\n    var unionWith = baseRest(function(arrays) {\\n      var comparator = last(arrays);\\n      comparator = typeof comparator == 'function' ? comparator : undefined;\\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\\n    });\\n\\n    /**\\n     * Creates a duplicate-free version of an array, using\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * for equality comparisons, in which only the first occurrence of each element\\n     * is kept. The order of result values is determined by the order they occur\\n     * in the array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @returns {Array} Returns the new duplicate free array.\\n     * @example\\n     *\\n     * _.uniq([2, 1, 2]);\\n     * // => [2, 1]\\n     */\\n    function uniq(array) {\\n      return (array && array.length) ? baseUniq(array) : [];\\n    }\\n\\n    /**\\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\\n     * invoked for each element in `array` to generate the criterion by which\\n     * uniqueness is computed. The order of result values is determined by the\\n     * order they occur in the array. The iteratee is invoked with one argument:\\n     * (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {Array} Returns the new duplicate free array.\\n     * @example\\n     *\\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\\n     * // => [2.1, 1.2]\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\\n     * // => [{ 'x': 1 }, { 'x': 2 }]\\n     */\\n    function uniqBy(array, iteratee) {\\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\\n    }\\n\\n    /**\\n     * This method is like `_.uniq` except that it accepts `comparator` which\\n     * is invoked to compare elements of `array`. The order of result values is\\n     * determined by the order they occur in the array.The comparator is invoked\\n     * with two arguments: (arrVal, othVal).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new duplicate free array.\\n     * @example\\n     *\\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\\n     *\\n     * _.uniqWith(objects, _.isEqual);\\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\\n     */\\n    function uniqWith(array, comparator) {\\n      comparator = typeof comparator == 'function' ? comparator : undefined;\\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\\n    }\\n\\n    /**\\n     * This method is like `_.zip` except that it accepts an array of grouped\\n     * elements and creates an array regrouping the elements to their pre-zip\\n     * configuration.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.2.0\\n     * @category Array\\n     * @param {Array} array The array of grouped elements to process.\\n     * @returns {Array} Returns the new array of regrouped elements.\\n     * @example\\n     *\\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\\n     * // => [['a', 1, true], ['b', 2, false]]\\n     *\\n     * _.unzip(zipped);\\n     * // => [['a', 'b'], [1, 2], [true, false]]\\n     */\\n    function unzip(array) {\\n      if (!(array && array.length)) {\\n        return [];\\n      }\\n      var length = 0;\\n      array = arrayFilter(array, function(group) {\\n        if (isArrayLikeObject(group)) {\\n          length = nativeMax(group.length, length);\\n          return true;\\n        }\\n      });\\n      return baseTimes(length, function(index) {\\n        return arrayMap(array, baseProperty(index));\\n      });\\n    }\\n\\n    /**\\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\\n     * how regrouped values should be combined. The iteratee is invoked with the\\n     * elements of each group: (...group).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.8.0\\n     * @category Array\\n     * @param {Array} array The array of grouped elements to process.\\n     * @param {Function} [iteratee=_.identity] The function to combine\\n     *  regrouped values.\\n     * @returns {Array} Returns the new array of regrouped elements.\\n     * @example\\n     *\\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\\n     * // => [[1, 10, 100], [2, 20, 200]]\\n     *\\n     * _.unzipWith(zipped, _.add);\\n     * // => [3, 30, 300]\\n     */\\n    function unzipWith(array, iteratee) {\\n      if (!(array && array.length)) {\\n        return [];\\n      }\\n      var result = unzip(array);\\n      if (iteratee == null) {\\n        return result;\\n      }\\n      return arrayMap(result, function(group) {\\n        return apply(iteratee, undefined, group);\\n      });\\n    }\\n\\n    /**\\n     * Creates an array excluding all given values using\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * **Note:** Unlike `_.pull`, this method returns a new array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {...*} [values] The values to exclude.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @see _.difference, _.xor\\n     * @example\\n     *\\n     * _.without([2, 1, 2, 3], 1, 2);\\n     * // => [3]\\n     */\\n    var without = baseRest(function(array, values) {\\n      return isArrayLikeObject(array)\\n        ? baseDifference(array, values)\\n        : [];\\n    });\\n\\n    /**\\n     * Creates an array of unique values that is the\\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\\n     * of the given arrays. The order of result values is determined by the order\\n     * they occur in the arrays.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.4.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @see _.difference, _.without\\n     * @example\\n     *\\n     * _.xor([2, 1], [2, 3]);\\n     * // => [1, 3]\\n     */\\n    var xor = baseRest(function(arrays) {\\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\\n    });\\n\\n    /**\\n     * This method is like `_.xor` except that it accepts `iteratee` which is\\n     * invoked for each element of each `arrays` to generate the criterion by\\n     * which by which they're compared. The order of result values is determined\\n     * by the order they occur in the arrays. The iteratee is invoked with one\\n     * argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @example\\n     *\\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\\n     * // => [1.2, 3.4]\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\\n     * // => [{ 'x': 2 }]\\n     */\\n    var xorBy = baseRest(function(arrays) {\\n      var iteratee = last(arrays);\\n      if (isArrayLikeObject(iteratee)) {\\n        iteratee = undefined;\\n      }\\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\\n    });\\n\\n    /**\\n     * This method is like `_.xor` except that it accepts `comparator` which is\\n     * invoked to compare elements of `arrays`. The order of result values is\\n     * determined by the order they occur in the arrays. The comparator is invoked\\n     * with two arguments: (arrVal, othVal).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @param {Function} [comparator] The comparator invoked per element.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @example\\n     *\\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\\n     *\\n     * _.xorWith(objects, others, _.isEqual);\\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\\n     */\\n    var xorWith = baseRest(function(arrays) {\\n      var comparator = last(arrays);\\n      comparator = typeof comparator == 'function' ? comparator : undefined;\\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\\n    });\\n\\n    /**\\n     * Creates an array of grouped elements, the first of which contains the\\n     * first elements of the given arrays, the second of which contains the\\n     * second elements of the given arrays, and so on.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to process.\\n     * @returns {Array} Returns the new array of grouped elements.\\n     * @example\\n     *\\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\\n     * // => [['a', 1, true], ['b', 2, false]]\\n     */\\n    var zip = baseRest(unzip);\\n\\n    /**\\n     * This method is like `_.fromPairs` except that it accepts two arrays,\\n     * one of property identifiers and one of corresponding values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.4.0\\n     * @category Array\\n     * @param {Array} [props=[]] The property identifiers.\\n     * @param {Array} [values=[]] The property values.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * _.zipObject(['a', 'b'], [1, 2]);\\n     * // => { 'a': 1, 'b': 2 }\\n     */\\n    function zipObject(props, values) {\\n      return baseZipObject(props || [], values || [], assignValue);\\n    }\\n\\n    /**\\n     * This method is like `_.zipObject` except that it supports property paths.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.1.0\\n     * @category Array\\n     * @param {Array} [props=[]] The property identifiers.\\n     * @param {Array} [values=[]] The property values.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\\n     */\\n    function zipObjectDeep(props, values) {\\n      return baseZipObject(props || [], values || [], baseSet);\\n    }\\n\\n    /**\\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\\n     * how grouped values should be combined. The iteratee is invoked with the\\n     * elements of each group: (...group).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.8.0\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to process.\\n     * @param {Function} [iteratee=_.identity] The function to combine\\n     *  grouped values.\\n     * @returns {Array} Returns the new array of grouped elements.\\n     * @example\\n     *\\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\\n     *   return a + b + c;\\n     * });\\n     * // => [111, 222]\\n     */\\n    var zipWith = baseRest(function(arrays) {\\n      var length = arrays.length,\\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\\n\\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\\n      return unzipWith(arrays, iteratee);\\n    });\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\\n     * chain sequences enabled. The result of such sequences must be unwrapped\\n     * with `_#value`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.3.0\\n     * @category Seq\\n     * @param {*} value The value to wrap.\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'age': 36 },\\n     *   { 'user': 'fred',    'age': 40 },\\n     *   { 'user': 'pebbles', 'age': 1 }\\n     * ];\\n     *\\n     * var youngest = _\\n     *   .chain(users)\\n     *   .sortBy('age')\\n     *   .map(function(o) {\\n     *     return o.user + ' is ' + o.age;\\n     *   })\\n     *   .head()\\n     *   .value();\\n     * // => 'pebbles is 1'\\n     */\\n    function chain(value) {\\n      var result = lodash(value);\\n      result.__chain__ = true;\\n      return result;\\n    }\\n\\n    /**\\n     * This method invokes `interceptor` and returns `value`. The interceptor\\n     * is invoked with one argument; (value). The purpose of this method is to\\n     * \\\"tap into\\\" a method chain sequence in order to modify intermediate results.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Seq\\n     * @param {*} value The value to provide to `interceptor`.\\n     * @param {Function} interceptor The function to invoke.\\n     * @returns {*} Returns `value`.\\n     * @example\\n     *\\n     * _([1, 2, 3])\\n     *  .tap(function(array) {\\n     *    // Mutate input array.\\n     *    array.pop();\\n     *  })\\n     *  .reverse()\\n     *  .value();\\n     * // => [2, 1]\\n     */\\n    function tap(value, interceptor) {\\n      interceptor(value);\\n      return value;\\n    }\\n\\n    /**\\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\\n     * The purpose of this method is to \\\"pass thru\\\" values replacing intermediate\\n     * results in a method chain sequence.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Seq\\n     * @param {*} value The value to provide to `interceptor`.\\n     * @param {Function} interceptor The function to invoke.\\n     * @returns {*} Returns the result of `interceptor`.\\n     * @example\\n     *\\n     * _('  abc  ')\\n     *  .chain()\\n     *  .trim()\\n     *  .thru(function(value) {\\n     *    return [value];\\n     *  })\\n     *  .value();\\n     * // => ['abc']\\n     */\\n    function thru(value, interceptor) {\\n      return interceptor(value);\\n    }\\n\\n    /**\\n     * This method is the wrapper version of `_.at`.\\n     *\\n     * @name at\\n     * @memberOf _\\n     * @since 1.0.0\\n     * @category Seq\\n     * @param {...(string|string[])} [paths] The property paths to pick.\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\\n     *\\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\\n     * // => [3, 4]\\n     */\\n    var wrapperAt = flatRest(function(paths) {\\n      var length = paths.length,\\n          start = length ? paths[0] : 0,\\n          value = this.__wrapped__,\\n          interceptor = function(object) { return baseAt(object, paths); };\\n\\n      if (length > 1 || this.__actions__.length ||\\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\\n        return this.thru(interceptor);\\n      }\\n      value = value.slice(start, +start + (length ? 1 : 0));\\n      value.__actions__.push({\\n        'func': thru,\\n        'args': [interceptor],\\n        'thisArg': undefined\\n      });\\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\\n        if (length && !array.length) {\\n          array.push(undefined);\\n        }\\n        return array;\\n      });\\n    });\\n\\n    /**\\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\\n     *\\n     * @name chain\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Seq\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36 },\\n     *   { 'user': 'fred',   'age': 40 }\\n     * ];\\n     *\\n     * // A sequence without explicit chaining.\\n     * _(users).head();\\n     * // => { 'user': 'barney', 'age': 36 }\\n     *\\n     * // A sequence with explicit chaining.\\n     * _(users)\\n     *   .chain()\\n     *   .head()\\n     *   .pick('user')\\n     *   .value();\\n     * // => { 'user': 'barney' }\\n     */\\n    function wrapperChain() {\\n      return chain(this);\\n    }\\n\\n    /**\\n     * Executes the chain sequence and returns the wrapped result.\\n     *\\n     * @name commit\\n     * @memberOf _\\n     * @since 3.2.0\\n     * @category Seq\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var array = [1, 2];\\n     * var wrapped = _(array).push(3);\\n     *\\n     * console.log(array);\\n     * // => [1, 2]\\n     *\\n     * wrapped = wrapped.commit();\\n     * console.log(array);\\n     * // => [1, 2, 3]\\n     *\\n     * wrapped.last();\\n     * // => 3\\n     *\\n     * console.log(array);\\n     * // => [1, 2, 3]\\n     */\\n    function wrapperCommit() {\\n      return new LodashWrapper(this.value(), this.__chain__);\\n    }\\n\\n    /**\\n     * Gets the next value on a wrapped object following the\\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\\n     *\\n     * @name next\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Seq\\n     * @returns {Object} Returns the next iterator value.\\n     * @example\\n     *\\n     * var wrapped = _([1, 2]);\\n     *\\n     * wrapped.next();\\n     * // => { 'done': false, 'value': 1 }\\n     *\\n     * wrapped.next();\\n     * // => { 'done': false, 'value': 2 }\\n     *\\n     * wrapped.next();\\n     * // => { 'done': true, 'value': undefined }\\n     */\\n    function wrapperNext() {\\n      if (this.__values__ === undefined) {\\n        this.__values__ = toArray(this.value());\\n      }\\n      var done = this.__index__ >= this.__values__.length,\\n          value = done ? undefined : this.__values__[this.__index__++];\\n\\n      return { 'done': done, 'value': value };\\n    }\\n\\n    /**\\n     * Enables the wrapper to be iterable.\\n     *\\n     * @name Symbol.iterator\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Seq\\n     * @returns {Object} Returns the wrapper object.\\n     * @example\\n     *\\n     * var wrapped = _([1, 2]);\\n     *\\n     * wrapped[Symbol.iterator]() === wrapped;\\n     * // => true\\n     *\\n     * Array.from(wrapped);\\n     * // => [1, 2]\\n     */\\n    function wrapperToIterator() {\\n      return this;\\n    }\\n\\n    /**\\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\\n     *\\n     * @name plant\\n     * @memberOf _\\n     * @since 3.2.0\\n     * @category Seq\\n     * @param {*} value The value to plant.\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * var wrapped = _([1, 2]).map(square);\\n     * var other = wrapped.plant([3, 4]);\\n     *\\n     * other.value();\\n     * // => [9, 16]\\n     *\\n     * wrapped.value();\\n     * // => [1, 4]\\n     */\\n    function wrapperPlant(value) {\\n      var result,\\n          parent = this;\\n\\n      while (parent instanceof baseLodash) {\\n        var clone = wrapperClone(parent);\\n        clone.__index__ = 0;\\n        clone.__values__ = undefined;\\n        if (result) {\\n          previous.__wrapped__ = clone;\\n        } else {\\n          result = clone;\\n        }\\n        var previous = clone;\\n        parent = parent.__wrapped__;\\n      }\\n      previous.__wrapped__ = value;\\n      return result;\\n    }\\n\\n    /**\\n     * This method is the wrapper version of `_.reverse`.\\n     *\\n     * **Note:** This method mutates the wrapped array.\\n     *\\n     * @name reverse\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Seq\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var array = [1, 2, 3];\\n     *\\n     * _(array).reverse().value()\\n     * // => [3, 2, 1]\\n     *\\n     * console.log(array);\\n     * // => [3, 2, 1]\\n     */\\n    function wrapperReverse() {\\n      var value = this.__wrapped__;\\n      if (value instanceof LazyWrapper) {\\n        var wrapped = value;\\n        if (this.__actions__.length) {\\n          wrapped = new LazyWrapper(this);\\n        }\\n        wrapped = wrapped.reverse();\\n        wrapped.__actions__.push({\\n          'func': thru,\\n          'args': [reverse],\\n          'thisArg': undefined\\n        });\\n        return new LodashWrapper(wrapped, this.__chain__);\\n      }\\n      return this.thru(reverse);\\n    }\\n\\n    /**\\n     * Executes the chain sequence to resolve the unwrapped value.\\n     *\\n     * @name value\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @alias toJSON, valueOf\\n     * @category Seq\\n     * @returns {*} Returns the resolved unwrapped value.\\n     * @example\\n     *\\n     * _([1, 2, 3]).value();\\n     * // => [1, 2, 3]\\n     */\\n    function wrapperValue() {\\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates an object composed of keys generated from the results of running\\n     * each element of `collection` thru `iteratee`. The corresponding value of\\n     * each key is the number of times the key was returned by `iteratee`. The\\n     * iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.5.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\\n     * @returns {Object} Returns the composed aggregate object.\\n     * @example\\n     *\\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\\n     * // => { '4': 1, '6': 2 }\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.countBy(['one', 'two', 'three'], 'length');\\n     * // => { '3': 2, '5': 1 }\\n     */\\n    var countBy = createAggregator(function(result, value, key) {\\n      if (hasOwnProperty.call(result, key)) {\\n        ++result[key];\\n      } else {\\n        baseAssignValue(result, key, 1);\\n      }\\n    });\\n\\n    /**\\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\\n     * invoked with three arguments: (value, index|key, collection).\\n     *\\n     * **Note:** This method returns `true` for\\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\\n     * elements of empty collections.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.every([true, 1, null, 'yes'], Boolean);\\n     * // => false\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': false },\\n     *   { 'user': 'fred',   'age': 40, 'active': false }\\n     * ];\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.every(users, { 'user': 'barney', 'active': false });\\n     * // => false\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.every(users, ['active', false]);\\n     * // => true\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.every(users, 'active');\\n     * // => false\\n     */\\n    function every(collection, predicate, guard) {\\n      var func = isArray(collection) ? arrayEvery : baseEvery;\\n      if (guard && isIterateeCall(collection, predicate, guard)) {\\n        predicate = undefined;\\n      }\\n      return func(collection, getIteratee(predicate, 3));\\n    }\\n\\n    /**\\n     * Iterates over elements of `collection`, returning an array of all elements\\n     * `predicate` returns truthy for. The predicate is invoked with three\\n     * arguments: (value, index|key, collection).\\n     *\\n     * **Note:** Unlike `_.remove`, this method returns a new array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the new filtered array.\\n     * @see _.reject\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': true },\\n     *   { 'user': 'fred',   'age': 40, 'active': false }\\n     * ];\\n     *\\n     * _.filter(users, function(o) { return !o.active; });\\n     * // => objects for ['fred']\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.filter(users, { 'age': 36, 'active': true });\\n     * // => objects for ['barney']\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.filter(users, ['active', false]);\\n     * // => objects for ['fred']\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.filter(users, 'active');\\n     * // => objects for ['barney']\\n     */\\n    function filter(collection, predicate) {\\n      var func = isArray(collection) ? arrayFilter : baseFilter;\\n      return func(collection, getIteratee(predicate, 3));\\n    }\\n\\n    /**\\n     * Iterates over elements of `collection`, returning the first element\\n     * `predicate` returns truthy for. The predicate is invoked with three\\n     * arguments: (value, index|key, collection).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to inspect.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @param {number} [fromIndex=0] The index to search from.\\n     * @returns {*} Returns the matched element, else `undefined`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'age': 36, 'active': true },\\n     *   { 'user': 'fred',    'age': 40, 'active': false },\\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\\n     * ];\\n     *\\n     * _.find(users, function(o) { return o.age < 40; });\\n     * // => object for 'barney'\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.find(users, { 'age': 1, 'active': true });\\n     * // => object for 'pebbles'\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.find(users, ['active', false]);\\n     * // => object for 'fred'\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.find(users, 'active');\\n     * // => object for 'barney'\\n     */\\n    var find = createFind(findIndex);\\n\\n    /**\\n     * This method is like `_.find` except that it iterates over elements of\\n     * `collection` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to inspect.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\\n     * @returns {*} Returns the matched element, else `undefined`.\\n     * @example\\n     *\\n     * _.findLast([1, 2, 3, 4], function(n) {\\n     *   return n % 2 == 1;\\n     * });\\n     * // => 3\\n     */\\n    var findLast = createFind(findLastIndex);\\n\\n    /**\\n     * Creates a flattened array of values by running each element in `collection`\\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\\n     * with three arguments: (value, index|key, collection).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the new flattened array.\\n     * @example\\n     *\\n     * function duplicate(n) {\\n     *   return [n, n];\\n     * }\\n     *\\n     * _.flatMap([1, 2], duplicate);\\n     * // => [1, 1, 2, 2]\\n     */\\n    function flatMap(collection, iteratee) {\\n      return baseFlatten(map(collection, iteratee), 1);\\n    }\\n\\n    /**\\n     * This method is like `_.flatMap` except that it recursively flattens the\\n     * mapped results.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.7.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the new flattened array.\\n     * @example\\n     *\\n     * function duplicate(n) {\\n     *   return [[[n, n]]];\\n     * }\\n     *\\n     * _.flatMapDeep([1, 2], duplicate);\\n     * // => [1, 1, 2, 2]\\n     */\\n    function flatMapDeep(collection, iteratee) {\\n      return baseFlatten(map(collection, iteratee), INFINITY);\\n    }\\n\\n    /**\\n     * This method is like `_.flatMap` except that it recursively flattens the\\n     * mapped results up to `depth` times.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.7.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {number} [depth=1] The maximum recursion depth.\\n     * @returns {Array} Returns the new flattened array.\\n     * @example\\n     *\\n     * function duplicate(n) {\\n     *   return [[[n, n]]];\\n     * }\\n     *\\n     * _.flatMapDepth([1, 2], duplicate, 2);\\n     * // => [[1, 1], [2, 2]]\\n     */\\n    function flatMapDepth(collection, iteratee, depth) {\\n      depth = depth === undefined ? 1 : toInteger(depth);\\n      return baseFlatten(map(collection, iteratee), depth);\\n    }\\n\\n    /**\\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\\n     *\\n     * **Note:** As with other \\\"Collections\\\" methods, objects with a \\\"length\\\"\\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\\n     * or `_.forOwn` for object iteration.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @alias each\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Array|Object} Returns `collection`.\\n     * @see _.forEachRight\\n     * @example\\n     *\\n     * _.forEach([1, 2], function(value) {\\n     *   console.log(value);\\n     * });\\n     * // => Logs `1` then `2`.\\n     *\\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\\n     */\\n    function forEach(collection, iteratee) {\\n      var func = isArray(collection) ? arrayEach : baseEach;\\n      return func(collection, getIteratee(iteratee, 3));\\n    }\\n\\n    /**\\n     * This method is like `_.forEach` except that it iterates over elements of\\n     * `collection` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @alias eachRight\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Array|Object} Returns `collection`.\\n     * @see _.forEach\\n     * @example\\n     *\\n     * _.forEachRight([1, 2], function(value) {\\n     *   console.log(value);\\n     * });\\n     * // => Logs `2` then `1`.\\n     */\\n    function forEachRight(collection, iteratee) {\\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\\n      return func(collection, getIteratee(iteratee, 3));\\n    }\\n\\n    /**\\n     * Creates an object composed of keys generated from the results of running\\n     * each element of `collection` thru `iteratee`. The order of grouped values\\n     * is determined by the order they occur in `collection`. The corresponding\\n     * value of each key is an array of elements responsible for generating the\\n     * key. The iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\\n     * @returns {Object} Returns the composed aggregate object.\\n     * @example\\n     *\\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.groupBy(['one', 'two', 'three'], 'length');\\n     * // => { '3': ['one', 'two'], '5': ['three'] }\\n     */\\n    var groupBy = createAggregator(function(result, value, key) {\\n      if (hasOwnProperty.call(result, key)) {\\n        result[key].push(value);\\n      } else {\\n        baseAssignValue(result, key, [value]);\\n      }\\n    });\\n\\n    /**\\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\\n     * checked for a substring of `value`, otherwise\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\\n     * the offset from the end of `collection`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to inspect.\\n     * @param {*} value The value to search for.\\n     * @param {number} [fromIndex=0] The index to search from.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\\n     * @example\\n     *\\n     * _.includes([1, 2, 3], 1);\\n     * // => true\\n     *\\n     * _.includes([1, 2, 3], 1, 2);\\n     * // => false\\n     *\\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\\n     * // => true\\n     *\\n     * _.includes('abcd', 'bc');\\n     * // => true\\n     */\\n    function includes(collection, value, fromIndex, guard) {\\n      collection = isArrayLike(collection) ? collection : values(collection);\\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\\n\\n      var length = collection.length;\\n      if (fromIndex < 0) {\\n        fromIndex = nativeMax(length + fromIndex, 0);\\n      }\\n      return isString(collection)\\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\\n    }\\n\\n    /**\\n     * Invokes the method at `path` of each element in `collection`, returning\\n     * an array of the results of each invoked method. Any additional arguments\\n     * are provided to each invoked method. If `path` is a function, it's invoked\\n     * for, and `this` bound to, each element in `collection`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Array|Function|string} path The path of the method to invoke or\\n     *  the function invoked per iteration.\\n     * @param {...*} [args] The arguments to invoke each method with.\\n     * @returns {Array} Returns the array of results.\\n     * @example\\n     *\\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\\n     * // => [[1, 5, 7], [1, 2, 3]]\\n     *\\n     * _.invokeMap([123, 456], String.prototype.split, '');\\n     * // => [['1', '2', '3'], ['4', '5', '6']]\\n     */\\n    var invokeMap = baseRest(function(collection, path, args) {\\n      var index = -1,\\n          isFunc = typeof path == 'function',\\n          result = isArrayLike(collection) ? Array(collection.length) : [];\\n\\n      baseEach(collection, function(value) {\\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\\n      });\\n      return result;\\n    });\\n\\n    /**\\n     * Creates an object composed of keys generated from the results of running\\n     * each element of `collection` thru `iteratee`. The corresponding value of\\n     * each key is the last element responsible for generating the key. The\\n     * iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\\n     * @returns {Object} Returns the composed aggregate object.\\n     * @example\\n     *\\n     * var array = [\\n     *   { 'dir': 'left', 'code': 97 },\\n     *   { 'dir': 'right', 'code': 100 }\\n     * ];\\n     *\\n     * _.keyBy(array, function(o) {\\n     *   return String.fromCharCode(o.code);\\n     * });\\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\\n     *\\n     * _.keyBy(array, 'dir');\\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\\n     */\\n    var keyBy = createAggregator(function(result, value, key) {\\n      baseAssignValue(result, key, value);\\n    });\\n\\n    /**\\n     * Creates an array of values by running each element in `collection` thru\\n     * `iteratee`. The iteratee is invoked with three arguments:\\n     * (value, index|key, collection).\\n     *\\n     * Many lodash methods are guarded to work as iteratees for methods like\\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\\n     *\\n     * The guarded methods are:\\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the new mapped array.\\n     * @example\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * _.map([4, 8], square);\\n     * // => [16, 64]\\n     *\\n     * _.map({ 'a': 4, 'b': 8 }, square);\\n     * // => [16, 64] (iteration order is not guaranteed)\\n     *\\n     * var users = [\\n     *   { 'user': 'barney' },\\n     *   { 'user': 'fred' }\\n     * ];\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.map(users, 'user');\\n     * // => ['barney', 'fred']\\n     */\\n    function map(collection, iteratee) {\\n      var func = isArray(collection) ? arrayMap : baseMap;\\n      return func(collection, getIteratee(iteratee, 3));\\n    }\\n\\n    /**\\n     * This method is like `_.sortBy` except that it allows specifying the sort\\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\\n     * are sorted in ascending order. Otherwise, specify an order of \\\"desc\\\" for\\n     * descending or \\\"asc\\\" for ascending sort order of corresponding values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\\n     *  The iteratees to sort by.\\n     * @param {string[]} [orders] The sort orders of `iteratees`.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\\n     * @returns {Array} Returns the new sorted array.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'fred',   'age': 48 },\\n     *   { 'user': 'barney', 'age': 34 },\\n     *   { 'user': 'fred',   'age': 40 },\\n     *   { 'user': 'barney', 'age': 36 }\\n     * ];\\n     *\\n     * // Sort by `user` in ascending order and by `age` in descending order.\\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\\n     */\\n    function orderBy(collection, iteratees, orders, guard) {\\n      if (collection == null) {\\n        return [];\\n      }\\n      if (!isArray(iteratees)) {\\n        iteratees = iteratees == null ? [] : [iteratees];\\n      }\\n      orders = guard ? undefined : orders;\\n      if (!isArray(orders)) {\\n        orders = orders == null ? [] : [orders];\\n      }\\n      return baseOrderBy(collection, iteratees, orders);\\n    }\\n\\n    /**\\n     * Creates an array of elements split into two groups, the first of which\\n     * contains elements `predicate` returns truthy for, the second of which\\n     * contains elements `predicate` returns falsey for. The predicate is\\n     * invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the array of grouped elements.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'age': 36, 'active': false },\\n     *   { 'user': 'fred',    'age': 40, 'active': true },\\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\\n     * ];\\n     *\\n     * _.partition(users, function(o) { return o.active; });\\n     * // => objects for [['fred'], ['barney', 'pebbles']]\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.partition(users, { 'age': 1, 'active': false });\\n     * // => objects for [['pebbles'], ['barney', 'fred']]\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.partition(users, ['active', false]);\\n     * // => objects for [['barney', 'pebbles'], ['fred']]\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.partition(users, 'active');\\n     * // => objects for [['fred'], ['barney', 'pebbles']]\\n     */\\n    var partition = createAggregator(function(result, value, key) {\\n      result[key ? 0 : 1].push(value);\\n    }, function() { return [[], []]; });\\n\\n    /**\\n     * Reduces `collection` to a value which is the accumulated result of running\\n     * each element in `collection` thru `iteratee`, where each successive\\n     * invocation is supplied the return value of the previous. If `accumulator`\\n     * is not given, the first element of `collection` is used as the initial\\n     * value. The iteratee is invoked with four arguments:\\n     * (accumulator, value, index|key, collection).\\n     *\\n     * Many lodash methods are guarded to work as iteratees for methods like\\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\\n     *\\n     * The guarded methods are:\\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\\n     * and `sortBy`\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [accumulator] The initial value.\\n     * @returns {*} Returns the accumulated value.\\n     * @see _.reduceRight\\n     * @example\\n     *\\n     * _.reduce([1, 2], function(sum, n) {\\n     *   return sum + n;\\n     * }, 0);\\n     * // => 3\\n     *\\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\\n     *   (result[value] || (result[value] = [])).push(key);\\n     *   return result;\\n     * }, {});\\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\\n     */\\n    function reduce(collection, iteratee, accumulator) {\\n      var func = isArray(collection) ? arrayReduce : baseReduce,\\n          initAccum = arguments.length < 3;\\n\\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\\n    }\\n\\n    /**\\n     * This method is like `_.reduce` except that it iterates over elements of\\n     * `collection` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [accumulator] The initial value.\\n     * @returns {*} Returns the accumulated value.\\n     * @see _.reduce\\n     * @example\\n     *\\n     * var array = [[0, 1], [2, 3], [4, 5]];\\n     *\\n     * _.reduceRight(array, function(flattened, other) {\\n     *   return flattened.concat(other);\\n     * }, []);\\n     * // => [4, 5, 2, 3, 0, 1]\\n     */\\n    function reduceRight(collection, iteratee, accumulator) {\\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\\n          initAccum = arguments.length < 3;\\n\\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\\n    }\\n\\n    /**\\n     * The opposite of `_.filter`; this method returns the elements of `collection`\\n     * that `predicate` does **not** return truthy for.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the new filtered array.\\n     * @see _.filter\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': false },\\n     *   { 'user': 'fred',   'age': 40, 'active': true }\\n     * ];\\n     *\\n     * _.reject(users, function(o) { return !o.active; });\\n     * // => objects for ['fred']\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.reject(users, { 'age': 40, 'active': true });\\n     * // => objects for ['barney']\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.reject(users, ['active', false]);\\n     * // => objects for ['fred']\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.reject(users, 'active');\\n     * // => objects for ['barney']\\n     */\\n    function reject(collection, predicate) {\\n      var func = isArray(collection) ? arrayFilter : baseFilter;\\n      return func(collection, negate(getIteratee(predicate, 3)));\\n    }\\n\\n    /**\\n     * Gets a random element from `collection`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to sample.\\n     * @returns {*} Returns the random element.\\n     * @example\\n     *\\n     * _.sample([1, 2, 3, 4]);\\n     * // => 2\\n     */\\n    function sample(collection) {\\n      var func = isArray(collection) ? arraySample : baseSample;\\n      return func(collection);\\n    }\\n\\n    /**\\n     * Gets `n` random elements at unique keys from `collection` up to the\\n     * size of `collection`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to sample.\\n     * @param {number} [n=1] The number of elements to sample.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Array} Returns the random elements.\\n     * @example\\n     *\\n     * _.sampleSize([1, 2, 3], 2);\\n     * // => [3, 1]\\n     *\\n     * _.sampleSize([1, 2, 3], 4);\\n     * // => [2, 3, 1]\\n     */\\n    function sampleSize(collection, n, guard) {\\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\\n        n = 1;\\n      } else {\\n        n = toInteger(n);\\n      }\\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\\n      return func(collection, n);\\n    }\\n\\n    /**\\n     * Creates an array of shuffled values, using a version of the\\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to shuffle.\\n     * @returns {Array} Returns the new shuffled array.\\n     * @example\\n     *\\n     * _.shuffle([1, 2, 3, 4]);\\n     * // => [4, 1, 3, 2]\\n     */\\n    function shuffle(collection) {\\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\\n      return func(collection);\\n    }\\n\\n    /**\\n     * Gets the size of `collection` by returning its length for array-like\\n     * values or the number of own enumerable string keyed properties for objects.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to inspect.\\n     * @returns {number} Returns the collection size.\\n     * @example\\n     *\\n     * _.size([1, 2, 3]);\\n     * // => 3\\n     *\\n     * _.size({ 'a': 1, 'b': 2 });\\n     * // => 2\\n     *\\n     * _.size('pebbles');\\n     * // => 7\\n     */\\n    function size(collection) {\\n      if (collection == null) {\\n        return 0;\\n      }\\n      if (isArrayLike(collection)) {\\n        return isString(collection) ? stringSize(collection) : collection.length;\\n      }\\n      var tag = getTag(collection);\\n      if (tag == mapTag || tag == setTag) {\\n        return collection.size;\\n      }\\n      return baseKeys(collection).length;\\n    }\\n\\n    /**\\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\\n     * invoked with three arguments: (value, index|key, collection).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.some([null, 0, 'yes', false], Boolean);\\n     * // => true\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'active': true },\\n     *   { 'user': 'fred',   'active': false }\\n     * ];\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.some(users, { 'user': 'barney', 'active': false });\\n     * // => false\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.some(users, ['active', false]);\\n     * // => true\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.some(users, 'active');\\n     * // => true\\n     */\\n    function some(collection, predicate, guard) {\\n      var func = isArray(collection) ? arraySome : baseSome;\\n      if (guard && isIterateeCall(collection, predicate, guard)) {\\n        predicate = undefined;\\n      }\\n      return func(collection, getIteratee(predicate, 3));\\n    }\\n\\n    /**\\n     * Creates an array of elements, sorted in ascending order by the results of\\n     * running each element in a collection thru each iteratee. This method\\n     * performs a stable sort, that is, it preserves the original sort order of\\n     * equal elements. The iteratees are invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Collection\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\\n     *  The iteratees to sort by.\\n     * @returns {Array} Returns the new sorted array.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'fred',   'age': 48 },\\n     *   { 'user': 'barney', 'age': 36 },\\n     *   { 'user': 'fred',   'age': 40 },\\n     *   { 'user': 'barney', 'age': 34 }\\n     * ];\\n     *\\n     * _.sortBy(users, [function(o) { return o.user; }]);\\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\\n     *\\n     * _.sortBy(users, ['user', 'age']);\\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\\n     */\\n    var sortBy = baseRest(function(collection, iteratees) {\\n      if (collection == null) {\\n        return [];\\n      }\\n      var length = iteratees.length;\\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\\n        iteratees = [];\\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\\n        iteratees = [iteratees[0]];\\n      }\\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\\n    });\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Gets the timestamp of the number of milliseconds that have elapsed since\\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.4.0\\n     * @category Date\\n     * @returns {number} Returns the timestamp.\\n     * @example\\n     *\\n     * _.defer(function(stamp) {\\n     *   console.log(_.now() - stamp);\\n     * }, _.now());\\n     * // => Logs the number of milliseconds it took for the deferred invocation.\\n     */\\n    var now = ctxNow || function() {\\n      return root.Date.now();\\n    };\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * The opposite of `_.before`; this method creates a function that invokes\\n     * `func` once it's called `n` or more times.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {number} n The number of calls before `func` is invoked.\\n     * @param {Function} func The function to restrict.\\n     * @returns {Function} Returns the new restricted function.\\n     * @example\\n     *\\n     * var saves = ['profile', 'settings'];\\n     *\\n     * var done = _.after(saves.length, function() {\\n     *   console.log('done saving!');\\n     * });\\n     *\\n     * _.forEach(saves, function(type) {\\n     *   asyncSave({ 'type': type, 'complete': done });\\n     * });\\n     * // => Logs 'done saving!' after the two async saves have completed.\\n     */\\n    function after(n, func) {\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      n = toInteger(n);\\n      return function() {\\n        if (--n < 1) {\\n          return func.apply(this, arguments);\\n        }\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func`, with up to `n` arguments,\\n     * ignoring any additional arguments.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Function\\n     * @param {Function} func The function to cap arguments for.\\n     * @param {number} [n=func.length] The arity cap.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Function} Returns the new capped function.\\n     * @example\\n     *\\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\\n     * // => [6, 8, 10]\\n     */\\n    function ary(func, n, guard) {\\n      n = guard ? undefined : n;\\n      n = (func && n == null) ? func.length : n;\\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func`, with the `this` binding and arguments\\n     * of the created function, while it's called less than `n` times. Subsequent\\n     * calls to the created function return the result of the last `func` invocation.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Function\\n     * @param {number} n The number of calls at which `func` is no longer invoked.\\n     * @param {Function} func The function to restrict.\\n     * @returns {Function} Returns the new restricted function.\\n     * @example\\n     *\\n     * jQuery(element).on('click', _.before(5, addContactToList));\\n     * // => Allows adding up to 4 contacts to the list.\\n     */\\n    function before(n, func) {\\n      var result;\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      n = toInteger(n);\\n      return function() {\\n        if (--n > 0) {\\n          result = func.apply(this, arguments);\\n        }\\n        if (n <= 1) {\\n          func = undefined;\\n        }\\n        return result;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\\n     * and `partials` prepended to the arguments it receives.\\n     *\\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\\n     * may be used as a placeholder for partially applied arguments.\\n     *\\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \\\"length\\\"\\n     * property of bound functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {Function} func The function to bind.\\n     * @param {*} thisArg The `this` binding of `func`.\\n     * @param {...*} [partials] The arguments to be partially applied.\\n     * @returns {Function} Returns the new bound function.\\n     * @example\\n     *\\n     * function greet(greeting, punctuation) {\\n     *   return greeting + ' ' + this.user + punctuation;\\n     * }\\n     *\\n     * var object = { 'user': 'fred' };\\n     *\\n     * var bound = _.bind(greet, object, 'hi');\\n     * bound('!');\\n     * // => 'hi fred!'\\n     *\\n     * // Bound with placeholders.\\n     * var bound = _.bind(greet, object, _, '!');\\n     * bound('hi');\\n     * // => 'hi fred!'\\n     */\\n    var bind = baseRest(function(func, thisArg, partials) {\\n      var bitmask = WRAP_BIND_FLAG;\\n      if (partials.length) {\\n        var holders = replaceHolders(partials, getHolder(bind));\\n        bitmask |= WRAP_PARTIAL_FLAG;\\n      }\\n      return createWrap(func, bitmask, thisArg, partials, holders);\\n    });\\n\\n    /**\\n     * Creates a function that invokes the method at `object[key]` with `partials`\\n     * prepended to the arguments it receives.\\n     *\\n     * This method differs from `_.bind` by allowing bound functions to reference\\n     * methods that may be redefined or don't yet exist. See\\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\\n     * for more details.\\n     *\\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\\n     * builds, may be used as a placeholder for partially applied arguments.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.10.0\\n     * @category Function\\n     * @param {Object} object The object to invoke the method on.\\n     * @param {string} key The key of the method.\\n     * @param {...*} [partials] The arguments to be partially applied.\\n     * @returns {Function} Returns the new bound function.\\n     * @example\\n     *\\n     * var object = {\\n     *   'user': 'fred',\\n     *   'greet': function(greeting, punctuation) {\\n     *     return greeting + ' ' + this.user + punctuation;\\n     *   }\\n     * };\\n     *\\n     * var bound = _.bindKey(object, 'greet', 'hi');\\n     * bound('!');\\n     * // => 'hi fred!'\\n     *\\n     * object.greet = function(greeting, punctuation) {\\n     *   return greeting + 'ya ' + this.user + punctuation;\\n     * };\\n     *\\n     * bound('!');\\n     * // => 'hiya fred!'\\n     *\\n     * // Bound with placeholders.\\n     * var bound = _.bindKey(object, 'greet', _, '!');\\n     * bound('hi');\\n     * // => 'hiya fred!'\\n     */\\n    var bindKey = baseRest(function(object, key, partials) {\\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\\n      if (partials.length) {\\n        var holders = replaceHolders(partials, getHolder(bindKey));\\n        bitmask |= WRAP_PARTIAL_FLAG;\\n      }\\n      return createWrap(key, bitmask, object, partials, holders);\\n    });\\n\\n    /**\\n     * Creates a function that accepts arguments of `func` and either invokes\\n     * `func` returning its result, if at least `arity` number of arguments have\\n     * been provided, or returns a function that accepts the remaining `func`\\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\\n     * is not sufficient.\\n     *\\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\\n     * may be used as a placeholder for provided arguments.\\n     *\\n     * **Note:** This method doesn't set the \\\"length\\\" property of curried functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Function\\n     * @param {Function} func The function to curry.\\n     * @param {number} [arity=func.length] The arity of `func`.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Function} Returns the new curried function.\\n     * @example\\n     *\\n     * var abc = function(a, b, c) {\\n     *   return [a, b, c];\\n     * };\\n     *\\n     * var curried = _.curry(abc);\\n     *\\n     * curried(1)(2)(3);\\n     * // => [1, 2, 3]\\n     *\\n     * curried(1, 2)(3);\\n     * // => [1, 2, 3]\\n     *\\n     * curried(1, 2, 3);\\n     * // => [1, 2, 3]\\n     *\\n     * // Curried with placeholders.\\n     * curried(1)(_, 3)(2);\\n     * // => [1, 2, 3]\\n     */\\n    function curry(func, arity, guard) {\\n      arity = guard ? undefined : arity;\\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\\n      result.placeholder = curry.placeholder;\\n      return result;\\n    }\\n\\n    /**\\n     * This method is like `_.curry` except that arguments are applied to `func`\\n     * in the manner of `_.partialRight` instead of `_.partial`.\\n     *\\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\\n     * builds, may be used as a placeholder for provided arguments.\\n     *\\n     * **Note:** This method doesn't set the \\\"length\\\" property of curried functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Function\\n     * @param {Function} func The function to curry.\\n     * @param {number} [arity=func.length] The arity of `func`.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Function} Returns the new curried function.\\n     * @example\\n     *\\n     * var abc = function(a, b, c) {\\n     *   return [a, b, c];\\n     * };\\n     *\\n     * var curried = _.curryRight(abc);\\n     *\\n     * curried(3)(2)(1);\\n     * // => [1, 2, 3]\\n     *\\n     * curried(2, 3)(1);\\n     * // => [1, 2, 3]\\n     *\\n     * curried(1, 2, 3);\\n     * // => [1, 2, 3]\\n     *\\n     * // Curried with placeholders.\\n     * curried(3)(1, _)(2);\\n     * // => [1, 2, 3]\\n     */\\n    function curryRight(func, arity, guard) {\\n      arity = guard ? undefined : arity;\\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\\n      result.placeholder = curryRight.placeholder;\\n      return result;\\n    }\\n\\n    /**\\n     * Creates a debounced function that delays invoking `func` until after `wait`\\n     * milliseconds have elapsed since the last time the debounced function was\\n     * invoked. The debounced function comes with a `cancel` method to cancel\\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\\n     * Provide `options` to indicate whether `func` should be invoked on the\\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\\n     * with the last arguments provided to the debounced function. Subsequent\\n     * calls to the debounced function return the result of the last `func`\\n     * invocation.\\n     *\\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\\n     * invoked on the trailing edge of the timeout only if the debounced function\\n     * is invoked more than once during the `wait` timeout.\\n     *\\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\\n     *\\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\\n     * for details over the differences between `_.debounce` and `_.throttle`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {Function} func The function to debounce.\\n     * @param {number} [wait=0] The number of milliseconds to delay.\\n     * @param {Object} [options={}] The options object.\\n     * @param {boolean} [options.leading=false]\\n     *  Specify invoking on the leading edge of the timeout.\\n     * @param {number} [options.maxWait]\\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\\n     * @param {boolean} [options.trailing=true]\\n     *  Specify invoking on the trailing edge of the timeout.\\n     * @returns {Function} Returns the new debounced function.\\n     * @example\\n     *\\n     * // Avoid costly calculations while the window size is in flux.\\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\\n     *\\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\\n     *   'leading': true,\\n     *   'trailing': false\\n     * }));\\n     *\\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\\n     * var source = new EventSource('/stream');\\n     * jQuery(source).on('message', debounced);\\n     *\\n     * // Cancel the trailing debounced invocation.\\n     * jQuery(window).on('popstate', debounced.cancel);\\n     */\\n    function debounce(func, wait, options) {\\n      var lastArgs,\\n          lastThis,\\n          maxWait,\\n          result,\\n          timerId,\\n          lastCallTime,\\n          lastInvokeTime = 0,\\n          leading = false,\\n          maxing = false,\\n          trailing = true;\\n\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      wait = toNumber(wait) || 0;\\n      if (isObject(options)) {\\n        leading = !!options.leading;\\n        maxing = 'maxWait' in options;\\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\\n      }\\n\\n      function invokeFunc(time) {\\n        var args = lastArgs,\\n            thisArg = lastThis;\\n\\n        lastArgs = lastThis = undefined;\\n        lastInvokeTime = time;\\n        result = func.apply(thisArg, args);\\n        return result;\\n      }\\n\\n      function leadingEdge(time) {\\n        // Reset any `maxWait` timer.\\n        lastInvokeTime = time;\\n        // Start the timer for the trailing edge.\\n        timerId = setTimeout(timerExpired, wait);\\n        // Invoke the leading edge.\\n        return leading ? invokeFunc(time) : result;\\n      }\\n\\n      function remainingWait(time) {\\n        var timeSinceLastCall = time - lastCallTime,\\n            timeSinceLastInvoke = time - lastInvokeTime,\\n            result = wait - timeSinceLastCall;\\n\\n        return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\\n      }\\n\\n      function shouldInvoke(time) {\\n        var timeSinceLastCall = time - lastCallTime,\\n            timeSinceLastInvoke = time - lastInvokeTime;\\n\\n        // Either this is the first call, activity has stopped and we're at the\\n        // trailing edge, the system time has gone backwards and we're treating\\n        // it as the trailing edge, or we've hit the `maxWait` limit.\\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\\n      }\\n\\n      function timerExpired() {\\n        var time = now();\\n        if (shouldInvoke(time)) {\\n          return trailingEdge(time);\\n        }\\n        // Restart the timer.\\n        timerId = setTimeout(timerExpired, remainingWait(time));\\n      }\\n\\n      function trailingEdge(time) {\\n        timerId = undefined;\\n\\n        // Only invoke if we have `lastArgs` which means `func` has been\\n        // debounced at least once.\\n        if (trailing && lastArgs) {\\n          return invokeFunc(time);\\n        }\\n        lastArgs = lastThis = undefined;\\n        return result;\\n      }\\n\\n      function cancel() {\\n        if (timerId !== undefined) {\\n          clearTimeout(timerId);\\n        }\\n        lastInvokeTime = 0;\\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\\n      }\\n\\n      function flush() {\\n        return timerId === undefined ? result : trailingEdge(now());\\n      }\\n\\n      function debounced() {\\n        var time = now(),\\n            isInvoking = shouldInvoke(time);\\n\\n        lastArgs = arguments;\\n        lastThis = this;\\n        lastCallTime = time;\\n\\n        if (isInvoking) {\\n          if (timerId === undefined) {\\n            return leadingEdge(lastCallTime);\\n          }\\n          if (maxing) {\\n            // Handle invocations in a tight loop.\\n            timerId = setTimeout(timerExpired, wait);\\n            return invokeFunc(lastCallTime);\\n          }\\n        }\\n        if (timerId === undefined) {\\n          timerId = setTimeout(timerExpired, wait);\\n        }\\n        return result;\\n      }\\n      debounced.cancel = cancel;\\n      debounced.flush = flush;\\n      return debounced;\\n    }\\n\\n    /**\\n     * Defers invoking the `func` until the current call stack has cleared. Any\\n     * additional arguments are provided to `func` when it's invoked.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {Function} func The function to defer.\\n     * @param {...*} [args] The arguments to invoke `func` with.\\n     * @returns {number} Returns the timer id.\\n     * @example\\n     *\\n     * _.defer(function(text) {\\n     *   console.log(text);\\n     * }, 'deferred');\\n     * // => Logs 'deferred' after one millisecond.\\n     */\\n    var defer = baseRest(function(func, args) {\\n      return baseDelay(func, 1, args);\\n    });\\n\\n    /**\\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\\n     * provided to `func` when it's invoked.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {Function} func The function to delay.\\n     * @param {number} wait The number of milliseconds to delay invocation.\\n     * @param {...*} [args] The arguments to invoke `func` with.\\n     * @returns {number} Returns the timer id.\\n     * @example\\n     *\\n     * _.delay(function(text) {\\n     *   console.log(text);\\n     * }, 1000, 'later');\\n     * // => Logs 'later' after one second.\\n     */\\n    var delay = baseRest(function(func, wait, args) {\\n      return baseDelay(func, toNumber(wait) || 0, args);\\n    });\\n\\n    /**\\n     * Creates a function that invokes `func` with arguments reversed.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Function\\n     * @param {Function} func The function to flip arguments for.\\n     * @returns {Function} Returns the new flipped function.\\n     * @example\\n     *\\n     * var flipped = _.flip(function() {\\n     *   return _.toArray(arguments);\\n     * });\\n     *\\n     * flipped('a', 'b', 'c', 'd');\\n     * // => ['d', 'c', 'b', 'a']\\n     */\\n    function flip(func) {\\n      return createWrap(func, WRAP_FLIP_FLAG);\\n    }\\n\\n    /**\\n     * Creates a function that memoizes the result of `func`. If `resolver` is\\n     * provided, it determines the cache key for storing the result based on the\\n     * arguments provided to the memoized function. By default, the first argument\\n     * provided to the memoized function is used as the map cache key. The `func`\\n     * is invoked with the `this` binding of the memoized function.\\n     *\\n     * **Note:** The cache is exposed as the `cache` property on the memoized\\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\\n     * constructor with one whose instances implement the\\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {Function} func The function to have its output memoized.\\n     * @param {Function} [resolver] The function to resolve the cache key.\\n     * @returns {Function} Returns the new memoized function.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': 2 };\\n     * var other = { 'c': 3, 'd': 4 };\\n     *\\n     * var values = _.memoize(_.values);\\n     * values(object);\\n     * // => [1, 2]\\n     *\\n     * values(other);\\n     * // => [3, 4]\\n     *\\n     * object.a = 2;\\n     * values(object);\\n     * // => [1, 2]\\n     *\\n     * // Modify the result cache.\\n     * values.cache.set(object, ['a', 'b']);\\n     * values(object);\\n     * // => ['a', 'b']\\n     *\\n     * // Replace `_.memoize.Cache`.\\n     * _.memoize.Cache = WeakMap;\\n     */\\n    function memoize(func, resolver) {\\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      var memoized = function() {\\n        var args = arguments,\\n            key = resolver ? resolver.apply(this, args) : args[0],\\n            cache = memoized.cache;\\n\\n        if (cache.has(key)) {\\n          return cache.get(key);\\n        }\\n        var result = func.apply(this, args);\\n        memoized.cache = cache.set(key, result) || cache;\\n        return result;\\n      };\\n      memoized.cache = new (memoize.Cache || MapCache);\\n      return memoized;\\n    }\\n\\n    // Expose `MapCache`.\\n    memoize.Cache = MapCache;\\n\\n    /**\\n     * Creates a function that negates the result of the predicate `func`. The\\n     * `func` predicate is invoked with the `this` binding and arguments of the\\n     * created function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Function\\n     * @param {Function} predicate The predicate to negate.\\n     * @returns {Function} Returns the new negated function.\\n     * @example\\n     *\\n     * function isEven(n) {\\n     *   return n % 2 == 0;\\n     * }\\n     *\\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\\n     * // => [1, 3, 5]\\n     */\\n    function negate(predicate) {\\n      if (typeof predicate != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      return function() {\\n        var args = arguments;\\n        switch (args.length) {\\n          case 0: return !predicate.call(this);\\n          case 1: return !predicate.call(this, args[0]);\\n          case 2: return !predicate.call(this, args[0], args[1]);\\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\\n        }\\n        return !predicate.apply(this, args);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\\n     * to the function return the value of the first invocation. The `func` is\\n     * invoked with the `this` binding and arguments of the created function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {Function} func The function to restrict.\\n     * @returns {Function} Returns the new restricted function.\\n     * @example\\n     *\\n     * var initialize = _.once(createApplication);\\n     * initialize();\\n     * initialize();\\n     * // => `createApplication` is invoked once\\n     */\\n    function once(func) {\\n      return before(2, func);\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func` with its arguments transformed.\\n     *\\n     * @static\\n     * @since 4.0.0\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to wrap.\\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\\n     *  The argument transforms.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * function doubled(n) {\\n     *   return n * 2;\\n     * }\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * var func = _.overArgs(function(x, y) {\\n     *   return [x, y];\\n     * }, [square, doubled]);\\n     *\\n     * func(9, 3);\\n     * // => [81, 6]\\n     *\\n     * func(10, 5);\\n     * // => [100, 10]\\n     */\\n    var overArgs = castRest(function(func, transforms) {\\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\\n\\n      var funcsLength = transforms.length;\\n      return baseRest(function(args) {\\n        var index = -1,\\n            length = nativeMin(args.length, funcsLength);\\n\\n        while (++index < length) {\\n          args[index] = transforms[index].call(this, args[index]);\\n        }\\n        return apply(func, this, args);\\n      });\\n    });\\n\\n    /**\\n     * Creates a function that invokes `func` with `partials` prepended to the\\n     * arguments it receives. This method is like `_.bind` except it does **not**\\n     * alter the `this` binding.\\n     *\\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\\n     * builds, may be used as a placeholder for partially applied arguments.\\n     *\\n     * **Note:** This method doesn't set the \\\"length\\\" property of partially\\n     * applied functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.2.0\\n     * @category Function\\n     * @param {Function} func The function to partially apply arguments to.\\n     * @param {...*} [partials] The arguments to be partially applied.\\n     * @returns {Function} Returns the new partially applied function.\\n     * @example\\n     *\\n     * function greet(greeting, name) {\\n     *   return greeting + ' ' + name;\\n     * }\\n     *\\n     * var sayHelloTo = _.partial(greet, 'hello');\\n     * sayHelloTo('fred');\\n     * // => 'hello fred'\\n     *\\n     * // Partially applied with placeholders.\\n     * var greetFred = _.partial(greet, _, 'fred');\\n     * greetFred('hi');\\n     * // => 'hi fred'\\n     */\\n    var partial = baseRest(function(func, partials) {\\n      var holders = replaceHolders(partials, getHolder(partial));\\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\\n    });\\n\\n    /**\\n     * This method is like `_.partial` except that partially applied arguments\\n     * are appended to the arguments it receives.\\n     *\\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\\n     * builds, may be used as a placeholder for partially applied arguments.\\n     *\\n     * **Note:** This method doesn't set the \\\"length\\\" property of partially\\n     * applied functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.0.0\\n     * @category Function\\n     * @param {Function} func The function to partially apply arguments to.\\n     * @param {...*} [partials] The arguments to be partially applied.\\n     * @returns {Function} Returns the new partially applied function.\\n     * @example\\n     *\\n     * function greet(greeting, name) {\\n     *   return greeting + ' ' + name;\\n     * }\\n     *\\n     * var greetFred = _.partialRight(greet, 'fred');\\n     * greetFred('hi');\\n     * // => 'hi fred'\\n     *\\n     * // Partially applied with placeholders.\\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\\n     * sayHelloTo('fred');\\n     * // => 'hello fred'\\n     */\\n    var partialRight = baseRest(function(func, partials) {\\n      var holders = replaceHolders(partials, getHolder(partialRight));\\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\\n    });\\n\\n    /**\\n     * Creates a function that invokes `func` with arguments arranged according\\n     * to the specified `indexes` where the argument value at the first index is\\n     * provided as the first argument, the argument value at the second index is\\n     * provided as the second argument, and so on.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Function\\n     * @param {Function} func The function to rearrange arguments for.\\n     * @param {...(number|number[])} indexes The arranged argument indexes.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var rearged = _.rearg(function(a, b, c) {\\n     *   return [a, b, c];\\n     * }, [2, 0, 1]);\\n     *\\n     * rearged('b', 'c', 'a')\\n     * // => ['a', 'b', 'c']\\n     */\\n    var rearg = flatRest(function(func, indexes) {\\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\\n    });\\n\\n    /**\\n     * Creates a function that invokes `func` with the `this` binding of the\\n     * created function and arguments from `start` and beyond provided as\\n     * an array.\\n     *\\n     * **Note:** This method is based on the\\n     * [rest parameter](https://mdn.io/rest_parameters).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Function\\n     * @param {Function} func The function to apply a rest parameter to.\\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var say = _.rest(function(what, names) {\\n     *   return what + ' ' + _.initial(names).join(', ') +\\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\\n     * });\\n     *\\n     * say('hello', 'fred', 'barney', 'pebbles');\\n     * // => 'hello fred, barney, & pebbles'\\n     */\\n    function rest(func, start) {\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      start = start === undefined ? start : toInteger(start);\\n      return baseRest(func, start);\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func` with the `this` binding of the\\n     * create function and an array of arguments much like\\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\\n     *\\n     * **Note:** This method is based on the\\n     * [spread operator](https://mdn.io/spread_operator).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.2.0\\n     * @category Function\\n     * @param {Function} func The function to spread arguments over.\\n     * @param {number} [start=0] The start position of the spread.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var say = _.spread(function(who, what) {\\n     *   return who + ' says ' + what;\\n     * });\\n     *\\n     * say(['fred', 'hello']);\\n     * // => 'fred says hello'\\n     *\\n     * var numbers = Promise.all([\\n     *   Promise.resolve(40),\\n     *   Promise.resolve(36)\\n     * ]);\\n     *\\n     * numbers.then(_.spread(function(x, y) {\\n     *   return x + y;\\n     * }));\\n     * // => a Promise of 76\\n     */\\n    function spread(func, start) {\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      start = start === undefined ? 0 : nativeMax(toInteger(start), 0);\\n      return baseRest(function(args) {\\n        var array = args[start],\\n            otherArgs = castSlice(args, 0, start);\\n\\n        if (array) {\\n          arrayPush(otherArgs, array);\\n        }\\n        return apply(func, this, otherArgs);\\n      });\\n    }\\n\\n    /**\\n     * Creates a throttled function that only invokes `func` at most once per\\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\\n     * method to cancel delayed `func` invocations and a `flush` method to\\n     * immediately invoke them. Provide `options` to indicate whether `func`\\n     * should be invoked on the leading and/or trailing edge of the `wait`\\n     * timeout. The `func` is invoked with the last arguments provided to the\\n     * throttled function. Subsequent calls to the throttled function return the\\n     * result of the last `func` invocation.\\n     *\\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\\n     * invoked on the trailing edge of the timeout only if the throttled function\\n     * is invoked more than once during the `wait` timeout.\\n     *\\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\\n     *\\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\\n     * for details over the differences between `_.throttle` and `_.debounce`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {Function} func The function to throttle.\\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\\n     * @param {Object} [options={}] The options object.\\n     * @param {boolean} [options.leading=true]\\n     *  Specify invoking on the leading edge of the timeout.\\n     * @param {boolean} [options.trailing=true]\\n     *  Specify invoking on the trailing edge of the timeout.\\n     * @returns {Function} Returns the new throttled function.\\n     * @example\\n     *\\n     * // Avoid excessively updating the position while scrolling.\\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\\n     *\\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\\n     * jQuery(element).on('click', throttled);\\n     *\\n     * // Cancel the trailing throttled invocation.\\n     * jQuery(window).on('popstate', throttled.cancel);\\n     */\\n    function throttle(func, wait, options) {\\n      var leading = true,\\n          trailing = true;\\n\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      if (isObject(options)) {\\n        leading = 'leading' in options ? !!options.leading : leading;\\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\\n      }\\n      return debounce(func, wait, {\\n        'leading': leading,\\n        'maxWait': wait,\\n        'trailing': trailing\\n      });\\n    }\\n\\n    /**\\n     * Creates a function that accepts up to one argument, ignoring any\\n     * additional arguments.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Function\\n     * @param {Function} func The function to cap arguments for.\\n     * @returns {Function} Returns the new capped function.\\n     * @example\\n     *\\n     * _.map(['6', '8', '10'], _.unary(parseInt));\\n     * // => [6, 8, 10]\\n     */\\n    function unary(func) {\\n      return ary(func, 1);\\n    }\\n\\n    /**\\n     * Creates a function that provides `value` to `wrapper` as its first\\n     * argument. Any additional arguments provided to the function are appended\\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\\n     * binding of the created function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Function\\n     * @param {*} value The value to wrap.\\n     * @param {Function} [wrapper=identity] The wrapper function.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var p = _.wrap(_.escape, function(func, text) {\\n     *   return '<p>' + func(text) + '</p>';\\n     * });\\n     *\\n     * p('fred, barney, & pebbles');\\n     * // => '<p>fred, barney, &amp; pebbles</p>'\\n     */\\n    function wrap(value, wrapper) {\\n      return partial(castFunction(wrapper), value);\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Casts `value` as an array if it's not one.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.4.0\\n     * @category Lang\\n     * @param {*} value The value to inspect.\\n     * @returns {Array} Returns the cast array.\\n     * @example\\n     *\\n     * _.castArray(1);\\n     * // => [1]\\n     *\\n     * _.castArray({ 'a': 1 });\\n     * // => [{ 'a': 1 }]\\n     *\\n     * _.castArray('abc');\\n     * // => ['abc']\\n     *\\n     * _.castArray(null);\\n     * // => [null]\\n     *\\n     * _.castArray(undefined);\\n     * // => [undefined]\\n     *\\n     * _.castArray();\\n     * // => []\\n     *\\n     * var array = [1, 2, 3];\\n     * console.log(_.castArray(array) === array);\\n     * // => true\\n     */\\n    function castArray() {\\n      if (!arguments.length) {\\n        return [];\\n      }\\n      var value = arguments[0];\\n      return isArray(value) ? value : [value];\\n    }\\n\\n    /**\\n     * Creates a shallow clone of `value`.\\n     *\\n     * **Note:** This method is loosely based on the\\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\\n     * arrays. The own enumerable properties of `arguments` objects are cloned\\n     * as plain objects. An empty object is returned for uncloneable values such\\n     * as error objects, functions, DOM nodes, and WeakMaps.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to clone.\\n     * @returns {*} Returns the cloned value.\\n     * @see _.cloneDeep\\n     * @example\\n     *\\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\\n     *\\n     * var shallow = _.clone(objects);\\n     * console.log(shallow[0] === objects[0]);\\n     * // => true\\n     */\\n    function clone(value) {\\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\\n    }\\n\\n    /**\\n     * This method is like `_.clone` except that it accepts `customizer` which\\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\\n     * cloning is handled by the method instead. The `customizer` is invoked with\\n     * up to four arguments; (value [, index|key, object, stack]).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to clone.\\n     * @param {Function} [customizer] The function to customize cloning.\\n     * @returns {*} Returns the cloned value.\\n     * @see _.cloneDeepWith\\n     * @example\\n     *\\n     * function customizer(value) {\\n     *   if (_.isElement(value)) {\\n     *     return value.cloneNode(false);\\n     *   }\\n     * }\\n     *\\n     * var el = _.cloneWith(document.body, customizer);\\n     *\\n     * console.log(el === document.body);\\n     * // => false\\n     * console.log(el.nodeName);\\n     * // => 'BODY'\\n     * console.log(el.childNodes.length);\\n     * // => 0\\n     */\\n    function cloneWith(value, customizer) {\\n      customizer = typeof customizer == 'function' ? customizer : undefined;\\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\\n    }\\n\\n    /**\\n     * This method is like `_.clone` except that it recursively clones `value`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.0.0\\n     * @category Lang\\n     * @param {*} value The value to recursively clone.\\n     * @returns {*} Returns the deep cloned value.\\n     * @see _.clone\\n     * @example\\n     *\\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\\n     *\\n     * var deep = _.cloneDeep(objects);\\n     * console.log(deep[0] === objects[0]);\\n     * // => false\\n     */\\n    function cloneDeep(value) {\\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\\n    }\\n\\n    /**\\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to recursively clone.\\n     * @param {Function} [customizer] The function to customize cloning.\\n     * @returns {*} Returns the deep cloned value.\\n     * @see _.cloneWith\\n     * @example\\n     *\\n     * function customizer(value) {\\n     *   if (_.isElement(value)) {\\n     *     return value.cloneNode(true);\\n     *   }\\n     * }\\n     *\\n     * var el = _.cloneDeepWith(document.body, customizer);\\n     *\\n     * console.log(el === document.body);\\n     * // => false\\n     * console.log(el.nodeName);\\n     * // => 'BODY'\\n     * console.log(el.childNodes.length);\\n     * // => 20\\n     */\\n    function cloneDeepWith(value, customizer) {\\n      customizer = typeof customizer == 'function' ? customizer : undefined;\\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\\n    }\\n\\n    /**\\n     * Checks if `object` conforms to `source` by invoking the predicate\\n     * properties of `source` with the corresponding property values of `object`.\\n     *\\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\\n     * partially applied.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.14.0\\n     * @category Lang\\n     * @param {Object} object The object to inspect.\\n     * @param {Object} source The object of property predicates to conform to.\\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': 2 };\\n     *\\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\\n     * // => true\\n     *\\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\\n     * // => false\\n     */\\n    function conformsTo(object, source) {\\n      return source == null || baseConformsTo(object, source, keys(source));\\n    }\\n\\n    /**\\n     * Performs a\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\\n     * comparison between two values to determine if they are equivalent.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\\n     * @example\\n     *\\n     * var object = { 'a': 1 };\\n     * var other = { 'a': 1 };\\n     *\\n     * _.eq(object, object);\\n     * // => true\\n     *\\n     * _.eq(object, other);\\n     * // => false\\n     *\\n     * _.eq('a', 'a');\\n     * // => true\\n     *\\n     * _.eq('a', Object('a'));\\n     * // => false\\n     *\\n     * _.eq(NaN, NaN);\\n     * // => true\\n     */\\n    function eq(value, other) {\\n      return value === other || (value !== value && other !== other);\\n    }\\n\\n    /**\\n     * Checks if `value` is greater than `other`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.9.0\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\\n     *  else `false`.\\n     * @see _.lt\\n     * @example\\n     *\\n     * _.gt(3, 1);\\n     * // => true\\n     *\\n     * _.gt(3, 3);\\n     * // => false\\n     *\\n     * _.gt(1, 3);\\n     * // => false\\n     */\\n    var gt = createRelationalOperation(baseGt);\\n\\n    /**\\n     * Checks if `value` is greater than or equal to `other`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.9.0\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\\n     *  `other`, else `false`.\\n     * @see _.lte\\n     * @example\\n     *\\n     * _.gte(3, 1);\\n     * // => true\\n     *\\n     * _.gte(3, 3);\\n     * // => true\\n     *\\n     * _.gte(1, 3);\\n     * // => false\\n     */\\n    var gte = createRelationalOperation(function(value, other) {\\n      return value >= other;\\n    });\\n\\n    /**\\n     * Checks if `value` is likely an `arguments` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.isArguments(function() { return arguments; }());\\n     * // => true\\n     *\\n     * _.isArguments([1, 2, 3]);\\n     * // => false\\n     */\\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\\n        !propertyIsEnumerable.call(value, 'callee');\\n    };\\n\\n    /**\\n     * Checks if `value` is classified as an `Array` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\\n     * @example\\n     *\\n     * _.isArray([1, 2, 3]);\\n     * // => true\\n     *\\n     * _.isArray(document.body.children);\\n     * // => false\\n     *\\n     * _.isArray('abc');\\n     * // => false\\n     *\\n     * _.isArray(_.noop);\\n     * // => false\\n     */\\n    var isArray = Array.isArray;\\n\\n    /**\\n     * Checks if `value` is classified as an `ArrayBuffer` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.3.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\\n     * @example\\n     *\\n     * _.isArrayBuffer(new ArrayBuffer(2));\\n     * // => true\\n     *\\n     * _.isArrayBuffer(new Array(2));\\n     * // => false\\n     */\\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\\n\\n    /**\\n     * Checks if `value` is array-like. A value is considered array-like if it's\\n     * not a function and has a `value.length` that's an integer greater than or\\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\\n     * @example\\n     *\\n     * _.isArrayLike([1, 2, 3]);\\n     * // => true\\n     *\\n     * _.isArrayLike(document.body.children);\\n     * // => true\\n     *\\n     * _.isArrayLike('abc');\\n     * // => true\\n     *\\n     * _.isArrayLike(_.noop);\\n     * // => false\\n     */\\n    function isArrayLike(value) {\\n      return value != null && isLength(value.length) && !isFunction(value);\\n    }\\n\\n    /**\\n     * This method is like `_.isArrayLike` except that it also checks if `value`\\n     * is an object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.isArrayLikeObject([1, 2, 3]);\\n     * // => true\\n     *\\n     * _.isArrayLikeObject(document.body.children);\\n     * // => true\\n     *\\n     * _.isArrayLikeObject('abc');\\n     * // => false\\n     *\\n     * _.isArrayLikeObject(_.noop);\\n     * // => false\\n     */\\n    function isArrayLikeObject(value) {\\n      return isObjectLike(value) && isArrayLike(value);\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a boolean primitive or object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\\n     * @example\\n     *\\n     * _.isBoolean(false);\\n     * // => true\\n     *\\n     * _.isBoolean(null);\\n     * // => false\\n     */\\n    function isBoolean(value) {\\n      return value === true || value === false ||\\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\\n    }\\n\\n    /**\\n     * Checks if `value` is a buffer.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.3.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\\n     * @example\\n     *\\n     * _.isBuffer(new Buffer(2));\\n     * // => true\\n     *\\n     * _.isBuffer(new Uint8Array(2));\\n     * // => false\\n     */\\n    var isBuffer = nativeIsBuffer || stubFalse;\\n\\n    /**\\n     * Checks if `value` is classified as a `Date` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\\n     * @example\\n     *\\n     * _.isDate(new Date);\\n     * // => true\\n     *\\n     * _.isDate('Mon April 23 2012');\\n     * // => false\\n     */\\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\\n\\n    /**\\n     * Checks if `value` is likely a DOM element.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\\n     * @example\\n     *\\n     * _.isElement(document.body);\\n     * // => true\\n     *\\n     * _.isElement('<body>');\\n     * // => false\\n     */\\n    function isElement(value) {\\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\\n    }\\n\\n    /**\\n     * Checks if `value` is an empty object, collection, map, or set.\\n     *\\n     * Objects are considered empty if they have no own enumerable string keyed\\n     * properties.\\n     *\\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\\n     * @example\\n     *\\n     * _.isEmpty(null);\\n     * // => true\\n     *\\n     * _.isEmpty(true);\\n     * // => true\\n     *\\n     * _.isEmpty(1);\\n     * // => true\\n     *\\n     * _.isEmpty([1, 2, 3]);\\n     * // => false\\n     *\\n     * _.isEmpty({ 'a': 1 });\\n     * // => false\\n     */\\n    function isEmpty(value) {\\n      if (value == null) {\\n        return true;\\n      }\\n      if (isArrayLike(value) &&\\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\\n        return !value.length;\\n      }\\n      var tag = getTag(value);\\n      if (tag == mapTag || tag == setTag) {\\n        return !value.size;\\n      }\\n      if (isPrototype(value)) {\\n        return !baseKeys(value).length;\\n      }\\n      for (var key in value) {\\n        if (hasOwnProperty.call(value, key)) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    }\\n\\n    /**\\n     * Performs a deep comparison between two values to determine if they are\\n     * equivalent.\\n     *\\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\\n     * by their own, not inherited, enumerable properties. Functions and DOM\\n     * nodes are **not** supported.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\\n     * @example\\n     *\\n     * var object = { 'a': 1 };\\n     * var other = { 'a': 1 };\\n     *\\n     * _.isEqual(object, other);\\n     * // => true\\n     *\\n     * object === other;\\n     * // => false\\n     */\\n    function isEqual(value, other) {\\n      return baseIsEqual(value, other);\\n    }\\n\\n    /**\\n     * This method is like `_.isEqual` except that it accepts `customizer` which\\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\\n     * are handled by the method instead. The `customizer` is invoked with up to\\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @param {Function} [customizer] The function to customize comparisons.\\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\\n     * @example\\n     *\\n     * function isGreeting(value) {\\n     *   return /^h(?:i|ello)$/.test(value);\\n     * }\\n     *\\n     * function customizer(objValue, othValue) {\\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\\n     *     return true;\\n     *   }\\n     * }\\n     *\\n     * var array = ['hello', 'goodbye'];\\n     * var other = ['hi', 'goodbye'];\\n     *\\n     * _.isEqualWith(array, other, customizer);\\n     * // => true\\n     */\\n    function isEqualWith(value, other, customizer) {\\n      customizer = typeof customizer == 'function' ? customizer : undefined;\\n      var result = customizer ? customizer(value, other) : undefined;\\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\\n    }\\n\\n    /**\\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\\n     * `SyntaxError`, `TypeError`, or `URIError` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\\n     * @example\\n     *\\n     * _.isError(new Error);\\n     * // => true\\n     *\\n     * _.isError(Error);\\n     * // => false\\n     */\\n    function isError(value) {\\n      if (!isObjectLike(value)) {\\n        return false;\\n      }\\n      var tag = baseGetTag(value);\\n      return tag == errorTag || tag == domExcTag ||\\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\\n    }\\n\\n    /**\\n     * Checks if `value` is a finite primitive number.\\n     *\\n     * **Note:** This method is based on\\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\\n     * @example\\n     *\\n     * _.isFinite(3);\\n     * // => true\\n     *\\n     * _.isFinite(Number.MIN_VALUE);\\n     * // => true\\n     *\\n     * _.isFinite(Infinity);\\n     * // => false\\n     *\\n     * _.isFinite('3');\\n     * // => false\\n     */\\n    function isFinite(value) {\\n      return typeof value == 'number' && nativeIsFinite(value);\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `Function` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\\n     * @example\\n     *\\n     * _.isFunction(_);\\n     * // => true\\n     *\\n     * _.isFunction(/abc/);\\n     * // => false\\n     */\\n    function isFunction(value) {\\n      if (!isObject(value)) {\\n        return false;\\n      }\\n      // The use of `Object#toString` avoids issues with the `typeof` operator\\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\\n      var tag = baseGetTag(value);\\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\\n    }\\n\\n    /**\\n     * Checks if `value` is an integer.\\n     *\\n     * **Note:** This method is based on\\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\\n     * @example\\n     *\\n     * _.isInteger(3);\\n     * // => true\\n     *\\n     * _.isInteger(Number.MIN_VALUE);\\n     * // => false\\n     *\\n     * _.isInteger(Infinity);\\n     * // => false\\n     *\\n     * _.isInteger('3');\\n     * // => false\\n     */\\n    function isInteger(value) {\\n      return typeof value == 'number' && value == toInteger(value);\\n    }\\n\\n    /**\\n     * Checks if `value` is a valid array-like length.\\n     *\\n     * **Note:** This method is loosely based on\\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\\n     * @example\\n     *\\n     * _.isLength(3);\\n     * // => true\\n     *\\n     * _.isLength(Number.MIN_VALUE);\\n     * // => false\\n     *\\n     * _.isLength(Infinity);\\n     * // => false\\n     *\\n     * _.isLength('3');\\n     * // => false\\n     */\\n    function isLength(value) {\\n      return typeof value == 'number' &&\\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\\n    }\\n\\n    /**\\n     * Checks if `value` is the\\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\\n     * @example\\n     *\\n     * _.isObject({});\\n     * // => true\\n     *\\n     * _.isObject([1, 2, 3]);\\n     * // => true\\n     *\\n     * _.isObject(_.noop);\\n     * // => true\\n     *\\n     * _.isObject(null);\\n     * // => false\\n     */\\n    function isObject(value) {\\n      var type = typeof value;\\n      return value != null && (type == 'object' || type == 'function');\\n    }\\n\\n    /**\\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\\n     * and has a `typeof` result of \\\"object\\\".\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\\n     * @example\\n     *\\n     * _.isObjectLike({});\\n     * // => true\\n     *\\n     * _.isObjectLike([1, 2, 3]);\\n     * // => true\\n     *\\n     * _.isObjectLike(_.noop);\\n     * // => false\\n     *\\n     * _.isObjectLike(null);\\n     * // => false\\n     */\\n    function isObjectLike(value) {\\n      return value != null && typeof value == 'object';\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `Map` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.3.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\\n     * @example\\n     *\\n     * _.isMap(new Map);\\n     * // => true\\n     *\\n     * _.isMap(new WeakMap);\\n     * // => false\\n     */\\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\\n\\n    /**\\n     * Performs a partial deep comparison between `object` and `source` to\\n     * determine if `object` contains equivalent property values.\\n     *\\n     * **Note:** This method is equivalent to `_.matches` when `source` is\\n     * partially applied.\\n     *\\n     * Partial comparisons will match empty array and empty object `source`\\n     * values against any array or object value, respectively. See `_.isEqual`\\n     * for a list of supported value comparisons.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Lang\\n     * @param {Object} object The object to inspect.\\n     * @param {Object} source The object of property values to match.\\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': 2 };\\n     *\\n     * _.isMatch(object, { 'b': 2 });\\n     * // => true\\n     *\\n     * _.isMatch(object, { 'b': 1 });\\n     * // => false\\n     */\\n    function isMatch(object, source) {\\n      return object === source || baseIsMatch(object, source, getMatchData(source));\\n    }\\n\\n    /**\\n     * This method is like `_.isMatch` except that it accepts `customizer` which\\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\\n     * are handled by the method instead. The `customizer` is invoked with five\\n     * arguments: (objValue, srcValue, index|key, object, source).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {Object} object The object to inspect.\\n     * @param {Object} source The object of property values to match.\\n     * @param {Function} [customizer] The function to customize comparisons.\\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\\n     * @example\\n     *\\n     * function isGreeting(value) {\\n     *   return /^h(?:i|ello)$/.test(value);\\n     * }\\n     *\\n     * function customizer(objValue, srcValue) {\\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\\n     *     return true;\\n     *   }\\n     * }\\n     *\\n     * var object = { 'greeting': 'hello' };\\n     * var source = { 'greeting': 'hi' };\\n     *\\n     * _.isMatchWith(object, source, customizer);\\n     * // => true\\n     */\\n    function isMatchWith(object, source, customizer) {\\n      customizer = typeof customizer == 'function' ? customizer : undefined;\\n      return baseIsMatch(object, source, getMatchData(source), customizer);\\n    }\\n\\n    /**\\n     * Checks if `value` is `NaN`.\\n     *\\n     * **Note:** This method is based on\\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\\n     * `undefined` and other non-number values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\\n     * @example\\n     *\\n     * _.isNaN(NaN);\\n     * // => true\\n     *\\n     * _.isNaN(new Number(NaN));\\n     * // => true\\n     *\\n     * isNaN(undefined);\\n     * // => true\\n     *\\n     * _.isNaN(undefined);\\n     * // => false\\n     */\\n    function isNaN(value) {\\n      // An `NaN` primitive is the only value that is not equal to itself.\\n      // Perform the `toStringTag` check first to avoid errors with some\\n      // ActiveX objects in IE.\\n      return isNumber(value) && value != +value;\\n    }\\n\\n    /**\\n     * Checks if `value` is a pristine native function.\\n     *\\n     * **Note:** This method can't reliably detect native functions in the presence\\n     * of the core-js package because core-js circumvents this kind of detection.\\n     * Despite multiple requests, the core-js maintainer has made it clear: any\\n     * attempt to fix the detection will be obstructed. As a result, we're left\\n     * with little choice but to throw an error. Unfortunately, this also affects\\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\\n     * which rely on core-js.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a native function,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.isNative(Array.prototype.push);\\n     * // => true\\n     *\\n     * _.isNative(_);\\n     * // => false\\n     */\\n    function isNative(value) {\\n      if (isMaskable(value)) {\\n        throw new Error(CORE_ERROR_TEXT);\\n      }\\n      return baseIsNative(value);\\n    }\\n\\n    /**\\n     * Checks if `value` is `null`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\\n     * @example\\n     *\\n     * _.isNull(null);\\n     * // => true\\n     *\\n     * _.isNull(void 0);\\n     * // => false\\n     */\\n    function isNull(value) {\\n      return value === null;\\n    }\\n\\n    /**\\n     * Checks if `value` is `null` or `undefined`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\\n     * @example\\n     *\\n     * _.isNil(null);\\n     * // => true\\n     *\\n     * _.isNil(void 0);\\n     * // => true\\n     *\\n     * _.isNil(NaN);\\n     * // => false\\n     */\\n    function isNil(value) {\\n      return value == null;\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `Number` primitive or object.\\n     *\\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\\n     * classified as numbers, use the `_.isFinite` method.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\\n     * @example\\n     *\\n     * _.isNumber(3);\\n     * // => true\\n     *\\n     * _.isNumber(Number.MIN_VALUE);\\n     * // => true\\n     *\\n     * _.isNumber(Infinity);\\n     * // => true\\n     *\\n     * _.isNumber('3');\\n     * // => false\\n     */\\n    function isNumber(value) {\\n      return typeof value == 'number' ||\\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\\n    }\\n\\n    /**\\n     * Checks if `value` is a plain object, that is, an object created by the\\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.8.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     * }\\n     *\\n     * _.isPlainObject(new Foo);\\n     * // => false\\n     *\\n     * _.isPlainObject([1, 2, 3]);\\n     * // => false\\n     *\\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\\n     * // => true\\n     *\\n     * _.isPlainObject(Object.create(null));\\n     * // => true\\n     */\\n    function isPlainObject(value) {\\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\\n        return false;\\n      }\\n      var proto = getPrototype(value);\\n      if (proto === null) {\\n        return true;\\n      }\\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\\n        funcToString.call(Ctor) == objectCtorString;\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `RegExp` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.1.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\\n     * @example\\n     *\\n     * _.isRegExp(/abc/);\\n     * // => true\\n     *\\n     * _.isRegExp('/abc/');\\n     * // => false\\n     */\\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\\n\\n    /**\\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\\n     * double precision number which isn't the result of a rounded unsafe integer.\\n     *\\n     * **Note:** This method is based on\\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\\n     * @example\\n     *\\n     * _.isSafeInteger(3);\\n     * // => true\\n     *\\n     * _.isSafeInteger(Number.MIN_VALUE);\\n     * // => false\\n     *\\n     * _.isSafeInteger(Infinity);\\n     * // => false\\n     *\\n     * _.isSafeInteger('3');\\n     * // => false\\n     */\\n    function isSafeInteger(value) {\\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `Set` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.3.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\\n     * @example\\n     *\\n     * _.isSet(new Set);\\n     * // => true\\n     *\\n     * _.isSet(new WeakSet);\\n     * // => false\\n     */\\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\\n\\n    /**\\n     * Checks if `value` is classified as a `String` primitive or object.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\\n     * @example\\n     *\\n     * _.isString('abc');\\n     * // => true\\n     *\\n     * _.isString(1);\\n     * // => false\\n     */\\n    function isString(value) {\\n      return typeof value == 'string' ||\\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `Symbol` primitive or object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\\n     * @example\\n     *\\n     * _.isSymbol(Symbol.iterator);\\n     * // => true\\n     *\\n     * _.isSymbol('abc');\\n     * // => false\\n     */\\n    function isSymbol(value) {\\n      return typeof value == 'symbol' ||\\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a typed array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\\n     * @example\\n     *\\n     * _.isTypedArray(new Uint8Array);\\n     * // => true\\n     *\\n     * _.isTypedArray([]);\\n     * // => false\\n     */\\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\\n\\n    /**\\n     * Checks if `value` is `undefined`.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\\n     * @example\\n     *\\n     * _.isUndefined(void 0);\\n     * // => true\\n     *\\n     * _.isUndefined(null);\\n     * // => false\\n     */\\n    function isUndefined(value) {\\n      return value === undefined;\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `WeakMap` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.3.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\\n     * @example\\n     *\\n     * _.isWeakMap(new WeakMap);\\n     * // => true\\n     *\\n     * _.isWeakMap(new Map);\\n     * // => false\\n     */\\n    function isWeakMap(value) {\\n      return isObjectLike(value) && getTag(value) == weakMapTag;\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `WeakSet` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.3.0\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\\n     * @example\\n     *\\n     * _.isWeakSet(new WeakSet);\\n     * // => true\\n     *\\n     * _.isWeakSet(new Set);\\n     * // => false\\n     */\\n    function isWeakSet(value) {\\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\\n    }\\n\\n    /**\\n     * Checks if `value` is less than `other`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.9.0\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\\n     *  else `false`.\\n     * @see _.gt\\n     * @example\\n     *\\n     * _.lt(1, 3);\\n     * // => true\\n     *\\n     * _.lt(3, 3);\\n     * // => false\\n     *\\n     * _.lt(3, 1);\\n     * // => false\\n     */\\n    var lt = createRelationalOperation(baseLt);\\n\\n    /**\\n     * Checks if `value` is less than or equal to `other`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.9.0\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\\n     *  `other`, else `false`.\\n     * @see _.gte\\n     * @example\\n     *\\n     * _.lte(1, 3);\\n     * // => true\\n     *\\n     * _.lte(3, 3);\\n     * // => true\\n     *\\n     * _.lte(3, 1);\\n     * // => false\\n     */\\n    var lte = createRelationalOperation(function(value, other) {\\n      return value <= other;\\n    });\\n\\n    /**\\n     * Converts `value` to an array.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {Array} Returns the converted array.\\n     * @example\\n     *\\n     * _.toArray({ 'a': 1, 'b': 2 });\\n     * // => [1, 2]\\n     *\\n     * _.toArray('abc');\\n     * // => ['a', 'b', 'c']\\n     *\\n     * _.toArray(1);\\n     * // => []\\n     *\\n     * _.toArray(null);\\n     * // => []\\n     */\\n    function toArray(value) {\\n      if (!value) {\\n        return [];\\n      }\\n      if (isArrayLike(value)) {\\n        return isString(value) ? stringToArray(value) : copyArray(value);\\n      }\\n      if (symIterator && value[symIterator]) {\\n        return iteratorToArray(value[symIterator]());\\n      }\\n      var tag = getTag(value),\\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\\n\\n      return func(value);\\n    }\\n\\n    /**\\n     * Converts `value` to a finite number.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.12.0\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {number} Returns the converted number.\\n     * @example\\n     *\\n     * _.toFinite(3.2);\\n     * // => 3.2\\n     *\\n     * _.toFinite(Number.MIN_VALUE);\\n     * // => 5e-324\\n     *\\n     * _.toFinite(Infinity);\\n     * // => 1.7976931348623157e+308\\n     *\\n     * _.toFinite('3.2');\\n     * // => 3.2\\n     */\\n    function toFinite(value) {\\n      if (!value) {\\n        return value === 0 ? value : 0;\\n      }\\n      value = toNumber(value);\\n      if (value === INFINITY || value === -INFINITY) {\\n        var sign = (value < 0 ? -1 : 1);\\n        return sign * MAX_INTEGER;\\n      }\\n      return value === value ? value : 0;\\n    }\\n\\n    /**\\n     * Converts `value` to an integer.\\n     *\\n     * **Note:** This method is loosely based on\\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {number} Returns the converted integer.\\n     * @example\\n     *\\n     * _.toInteger(3.2);\\n     * // => 3\\n     *\\n     * _.toInteger(Number.MIN_VALUE);\\n     * // => 0\\n     *\\n     * _.toInteger(Infinity);\\n     * // => 1.7976931348623157e+308\\n     *\\n     * _.toInteger('3.2');\\n     * // => 3\\n     */\\n    function toInteger(value) {\\n      var result = toFinite(value),\\n          remainder = result % 1;\\n\\n      return result === result ? (remainder ? result - remainder : result) : 0;\\n    }\\n\\n    /**\\n     * Converts `value` to an integer suitable for use as the length of an\\n     * array-like object.\\n     *\\n     * **Note:** This method is based on\\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {number} Returns the converted integer.\\n     * @example\\n     *\\n     * _.toLength(3.2);\\n     * // => 3\\n     *\\n     * _.toLength(Number.MIN_VALUE);\\n     * // => 0\\n     *\\n     * _.toLength(Infinity);\\n     * // => 4294967295\\n     *\\n     * _.toLength('3.2');\\n     * // => 3\\n     */\\n    function toLength(value) {\\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\\n    }\\n\\n    /**\\n     * Converts `value` to a number.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to process.\\n     * @returns {number} Returns the number.\\n     * @example\\n     *\\n     * _.toNumber(3.2);\\n     * // => 3.2\\n     *\\n     * _.toNumber(Number.MIN_VALUE);\\n     * // => 5e-324\\n     *\\n     * _.toNumber(Infinity);\\n     * // => Infinity\\n     *\\n     * _.toNumber('3.2');\\n     * // => 3.2\\n     */\\n    function toNumber(value) {\\n      if (typeof value == 'number') {\\n        return value;\\n      }\\n      if (isSymbol(value)) {\\n        return NAN;\\n      }\\n      if (isObject(value)) {\\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\\n        value = isObject(other) ? (other + '') : other;\\n      }\\n      if (typeof value != 'string') {\\n        return value === 0 ? value : +value;\\n      }\\n      value = value.replace(reTrim, '');\\n      var isBinary = reIsBinary.test(value);\\n      return (isBinary || reIsOctal.test(value))\\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\\n        : (reIsBadHex.test(value) ? NAN : +value);\\n    }\\n\\n    /**\\n     * Converts `value` to a plain object flattening inherited enumerable string\\n     * keyed properties of `value` to own properties of the plain object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {Object} Returns the converted plain object.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.assign({ 'a': 1 }, new Foo);\\n     * // => { 'a': 1, 'b': 2 }\\n     *\\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\\n     */\\n    function toPlainObject(value) {\\n      return copyObject(value, keysIn(value));\\n    }\\n\\n    /**\\n     * Converts `value` to a safe integer. A safe integer can be compared and\\n     * represented correctly.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {number} Returns the converted integer.\\n     * @example\\n     *\\n     * _.toSafeInteger(3.2);\\n     * // => 3\\n     *\\n     * _.toSafeInteger(Number.MIN_VALUE);\\n     * // => 0\\n     *\\n     * _.toSafeInteger(Infinity);\\n     * // => 9007199254740991\\n     *\\n     * _.toSafeInteger('3.2');\\n     * // => 3\\n     */\\n    function toSafeInteger(value) {\\n      return baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\\n    }\\n\\n    /**\\n     * Converts `value` to a string. An empty string is returned for `null`\\n     * and `undefined` values. The sign of `-0` is preserved.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {string} Returns the converted string.\\n     * @example\\n     *\\n     * _.toString(null);\\n     * // => ''\\n     *\\n     * _.toString(-0);\\n     * // => '-0'\\n     *\\n     * _.toString([1, 2, 3]);\\n     * // => '1,2,3'\\n     */\\n    function toString(value) {\\n      return value == null ? '' : baseToString(value);\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Assigns own enumerable string keyed properties of source objects to the\\n     * destination object. Source objects are applied from left to right.\\n     * Subsequent sources overwrite property assignments of previous sources.\\n     *\\n     * **Note:** This method mutates `object` and is loosely based on\\n     * [`Object.assign`](https://mdn.io/Object/assign).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.10.0\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @returns {Object} Returns `object`.\\n     * @see _.assignIn\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     * }\\n     *\\n     * function Bar() {\\n     *   this.c = 3;\\n     * }\\n     *\\n     * Foo.prototype.b = 2;\\n     * Bar.prototype.d = 4;\\n     *\\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\\n     * // => { 'a': 1, 'c': 3 }\\n     */\\n    var assign = createAssigner(function(object, source) {\\n      if (isPrototype(source) || isArrayLike(source)) {\\n        copyObject(source, keys(source), object);\\n        return;\\n      }\\n      for (var key in source) {\\n        if (hasOwnProperty.call(source, key)) {\\n          assignValue(object, key, source[key]);\\n        }\\n      }\\n    });\\n\\n    /**\\n     * This method is like `_.assign` except that it iterates over own and\\n     * inherited source properties.\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @alias extend\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @returns {Object} Returns `object`.\\n     * @see _.assign\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     * }\\n     *\\n     * function Bar() {\\n     *   this.c = 3;\\n     * }\\n     *\\n     * Foo.prototype.b = 2;\\n     * Bar.prototype.d = 4;\\n     *\\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\\n     */\\n    var assignIn = createAssigner(function(object, source) {\\n      copyObject(source, keysIn(source), object);\\n    });\\n\\n    /**\\n     * This method is like `_.assignIn` except that it accepts `customizer`\\n     * which is invoked to produce the assigned values. If `customizer` returns\\n     * `undefined`, assignment is handled by the method instead. The `customizer`\\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @alias extendWith\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} sources The source objects.\\n     * @param {Function} [customizer] The function to customize assigned values.\\n     * @returns {Object} Returns `object`.\\n     * @see _.assignWith\\n     * @example\\n     *\\n     * function customizer(objValue, srcValue) {\\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\\n     * }\\n     *\\n     * var defaults = _.partialRight(_.assignInWith, customizer);\\n     *\\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\\n     * // => { 'a': 1, 'b': 2 }\\n     */\\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\\n      copyObject(source, keysIn(source), object, customizer);\\n    });\\n\\n    /**\\n     * This method is like `_.assign` except that it accepts `customizer`\\n     * which is invoked to produce the assigned values. If `customizer` returns\\n     * `undefined`, assignment is handled by the method instead. The `customizer`\\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} sources The source objects.\\n     * @param {Function} [customizer] The function to customize assigned values.\\n     * @returns {Object} Returns `object`.\\n     * @see _.assignInWith\\n     * @example\\n     *\\n     * function customizer(objValue, srcValue) {\\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\\n     * }\\n     *\\n     * var defaults = _.partialRight(_.assignWith, customizer);\\n     *\\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\\n     * // => { 'a': 1, 'b': 2 }\\n     */\\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\\n      copyObject(source, keys(source), object, customizer);\\n    });\\n\\n    /**\\n     * Creates an array of values corresponding to `paths` of `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.0.0\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {...(string|string[])} [paths] The property paths to pick.\\n     * @returns {Array} Returns the picked values.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\\n     *\\n     * _.at(object, ['a[0].b.c', 'a[1]']);\\n     * // => [3, 4]\\n     */\\n    var at = flatRest(baseAt);\\n\\n    /**\\n     * Creates an object that inherits from the `prototype` object. If a\\n     * `properties` object is given, its own enumerable string keyed properties\\n     * are assigned to the created object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.3.0\\n     * @category Object\\n     * @param {Object} prototype The object to inherit from.\\n     * @param {Object} [properties] The properties to assign to the object.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * function Shape() {\\n     *   this.x = 0;\\n     *   this.y = 0;\\n     * }\\n     *\\n     * function Circle() {\\n     *   Shape.call(this);\\n     * }\\n     *\\n     * Circle.prototype = _.create(Shape.prototype, {\\n     *   'constructor': Circle\\n     * });\\n     *\\n     * var circle = new Circle;\\n     * circle instanceof Circle;\\n     * // => true\\n     *\\n     * circle instanceof Shape;\\n     * // => true\\n     */\\n    function create(prototype, properties) {\\n      var result = baseCreate(prototype);\\n      return properties == null ? result : baseAssign(result, properties);\\n    }\\n\\n    /**\\n     * Assigns own and inherited enumerable string keyed properties of source\\n     * objects to the destination object for all destination properties that\\n     * resolve to `undefined`. Source objects are applied from left to right.\\n     * Once a property is set, additional values of the same property are ignored.\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @returns {Object} Returns `object`.\\n     * @see _.defaultsDeep\\n     * @example\\n     *\\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\\n     * // => { 'a': 1, 'b': 2 }\\n     */\\n    var defaults = baseRest(function(args) {\\n      args.push(undefined, assignInDefaults);\\n      return apply(assignInWith, undefined, args);\\n    });\\n\\n    /**\\n     * This method is like `_.defaults` except that it recursively assigns\\n     * default properties.\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.10.0\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @returns {Object} Returns `object`.\\n     * @see _.defaults\\n     * @example\\n     *\\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\\n     * // => { 'a': { 'b': 2, 'c': 3 } }\\n     */\\n    var defaultsDeep = baseRest(function(args) {\\n      args.push(undefined, mergeDefaults);\\n      return apply(mergeWith, undefined, args);\\n    });\\n\\n    /**\\n     * This method is like `_.find` except that it returns the key of the first\\n     * element `predicate` returns truthy for instead of the element itself.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.1.0\\n     * @category Object\\n     * @param {Object} object The object to inspect.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {string|undefined} Returns the key of the matched element,\\n     *  else `undefined`.\\n     * @example\\n     *\\n     * var users = {\\n     *   'barney':  { 'age': 36, 'active': true },\\n     *   'fred':    { 'age': 40, 'active': false },\\n     *   'pebbles': { 'age': 1,  'active': true }\\n     * };\\n     *\\n     * _.findKey(users, function(o) { return o.age < 40; });\\n     * // => 'barney' (iteration order is not guaranteed)\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.findKey(users, { 'age': 1, 'active': true });\\n     * // => 'pebbles'\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.findKey(users, ['active', false]);\\n     * // => 'fred'\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.findKey(users, 'active');\\n     * // => 'barney'\\n     */\\n    function findKey(object, predicate) {\\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\\n    }\\n\\n    /**\\n     * This method is like `_.findKey` except that it iterates over elements of\\n     * a collection in the opposite order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Object\\n     * @param {Object} object The object to inspect.\\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\\n     * @returns {string|undefined} Returns the key of the matched element,\\n     *  else `undefined`.\\n     * @example\\n     *\\n     * var users = {\\n     *   'barney':  { 'age': 36, 'active': true },\\n     *   'fred':    { 'age': 40, 'active': false },\\n     *   'pebbles': { 'age': 1,  'active': true }\\n     * };\\n     *\\n     * _.findLastKey(users, function(o) { return o.age < 40; });\\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.findLastKey(users, { 'age': 36, 'active': true });\\n     * // => 'barney'\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.findLastKey(users, ['active', false]);\\n     * // => 'fred'\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.findLastKey(users, 'active');\\n     * // => 'pebbles'\\n     */\\n    function findLastKey(object, predicate) {\\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\\n    }\\n\\n    /**\\n     * Iterates over own and inherited enumerable string keyed properties of an\\n     * object and invokes `iteratee` for each property. The iteratee is invoked\\n     * with three arguments: (value, key, object). Iteratee functions may exit\\n     * iteration early by explicitly returning `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.3.0\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     * @see _.forInRight\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.forIn(new Foo, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\\n     */\\n    function forIn(object, iteratee) {\\n      return object == null\\n        ? object\\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\\n    }\\n\\n    /**\\n     * This method is like `_.forIn` except that it iterates over properties of\\n     * `object` in the opposite order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     * @see _.forIn\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.forInRight(new Foo, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\\n     */\\n    function forInRight(object, iteratee) {\\n      return object == null\\n        ? object\\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\\n    }\\n\\n    /**\\n     * Iterates over own enumerable string keyed properties of an object and\\n     * invokes `iteratee` for each property. The iteratee is invoked with three\\n     * arguments: (value, key, object). Iteratee functions may exit iteration\\n     * early by explicitly returning `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.3.0\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     * @see _.forOwnRight\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.forOwn(new Foo, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\\n     */\\n    function forOwn(object, iteratee) {\\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\\n    }\\n\\n    /**\\n     * This method is like `_.forOwn` except that it iterates over properties of\\n     * `object` in the opposite order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.0.0\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     * @see _.forOwn\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.forOwnRight(new Foo, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\\n     */\\n    function forOwnRight(object, iteratee) {\\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\\n    }\\n\\n    /**\\n     * Creates an array of function property names from own enumerable properties\\n     * of `object`.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to inspect.\\n     * @returns {Array} Returns the function names.\\n     * @see _.functionsIn\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = _.constant('a');\\n     *   this.b = _.constant('b');\\n     * }\\n     *\\n     * Foo.prototype.c = _.constant('c');\\n     *\\n     * _.functions(new Foo);\\n     * // => ['a', 'b']\\n     */\\n    function functions(object) {\\n      return object == null ? [] : baseFunctions(object, keys(object));\\n    }\\n\\n    /**\\n     * Creates an array of function property names from own and inherited\\n     * enumerable properties of `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The object to inspect.\\n     * @returns {Array} Returns the function names.\\n     * @see _.functions\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = _.constant('a');\\n     *   this.b = _.constant('b');\\n     * }\\n     *\\n     * Foo.prototype.c = _.constant('c');\\n     *\\n     * _.functionsIn(new Foo);\\n     * // => ['a', 'b', 'c']\\n     */\\n    function functionsIn(object) {\\n      return object == null ? [] : baseFunctions(object, keysIn(object));\\n    }\\n\\n    /**\\n     * Gets the value at `path` of `object`. If the resolved value is\\n     * `undefined`, the `defaultValue` is returned in its place.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.7.0\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path of the property to get.\\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\\n     * @returns {*} Returns the resolved value.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\\n     *\\n     * _.get(object, 'a[0].b.c');\\n     * // => 3\\n     *\\n     * _.get(object, ['a', '0', 'b', 'c']);\\n     * // => 3\\n     *\\n     * _.get(object, 'a.b.c', 'default');\\n     * // => 'default'\\n     */\\n    function get(object, path, defaultValue) {\\n      var result = object == null ? undefined : baseGet(object, path);\\n      return result === undefined ? defaultValue : result;\\n    }\\n\\n    /**\\n     * Checks if `path` is a direct property of `object`.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path to check.\\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\\n     * @example\\n     *\\n     * var object = { 'a': { 'b': 2 } };\\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\\n     *\\n     * _.has(object, 'a');\\n     * // => true\\n     *\\n     * _.has(object, 'a.b');\\n     * // => true\\n     *\\n     * _.has(object, ['a', 'b']);\\n     * // => true\\n     *\\n     * _.has(other, 'a');\\n     * // => false\\n     */\\n    function has(object, path) {\\n      return object != null && hasPath(object, path, baseHas);\\n    }\\n\\n    /**\\n     * Checks if `path` is a direct or inherited property of `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path to check.\\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\\n     * @example\\n     *\\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\\n     *\\n     * _.hasIn(object, 'a');\\n     * // => true\\n     *\\n     * _.hasIn(object, 'a.b');\\n     * // => true\\n     *\\n     * _.hasIn(object, ['a', 'b']);\\n     * // => true\\n     *\\n     * _.hasIn(object, 'b');\\n     * // => false\\n     */\\n    function hasIn(object, path) {\\n      return object != null && hasPath(object, path, baseHasIn);\\n    }\\n\\n    /**\\n     * Creates an object composed of the inverted keys and values of `object`.\\n     * If `object` contains duplicate values, subsequent values overwrite\\n     * property assignments of previous values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.7.0\\n     * @category Object\\n     * @param {Object} object The object to invert.\\n     * @returns {Object} Returns the new inverted object.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\\n     *\\n     * _.invert(object);\\n     * // => { '1': 'c', '2': 'b' }\\n     */\\n    var invert = createInverter(function(result, value, key) {\\n      result[value] = key;\\n    }, constant(identity));\\n\\n    /**\\n     * This method is like `_.invert` except that the inverted object is generated\\n     * from the results of running each element of `object` thru `iteratee`. The\\n     * corresponding inverted value of each inverted key is an array of keys\\n     * responsible for generating the inverted value. The iteratee is invoked\\n     * with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.1.0\\n     * @category Object\\n     * @param {Object} object The object to invert.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {Object} Returns the new inverted object.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\\n     *\\n     * _.invertBy(object);\\n     * // => { '1': ['a', 'c'], '2': ['b'] }\\n     *\\n     * _.invertBy(object, function(value) {\\n     *   return 'group' + value;\\n     * });\\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\\n     */\\n    var invertBy = createInverter(function(result, value, key) {\\n      if (hasOwnProperty.call(result, value)) {\\n        result[value].push(key);\\n      } else {\\n        result[value] = [key];\\n      }\\n    }, getIteratee);\\n\\n    /**\\n     * Invokes the method at `path` of `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path of the method to invoke.\\n     * @param {...*} [args] The arguments to invoke the method with.\\n     * @returns {*} Returns the result of the invoked method.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\\n     *\\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\\n     * // => [2, 3]\\n     */\\n    var invoke = baseRest(baseInvoke);\\n\\n    /**\\n     * Creates an array of the own enumerable property names of `object`.\\n     *\\n     * **Note:** Non-object values are coerced to objects. See the\\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\\n     * for more details.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.keys(new Foo);\\n     * // => ['a', 'b'] (iteration order is not guaranteed)\\n     *\\n     * _.keys('hi');\\n     * // => ['0', '1']\\n     */\\n    function keys(object) {\\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\\n    }\\n\\n    /**\\n     * Creates an array of the own and inherited enumerable property names of `object`.\\n     *\\n     * **Note:** Non-object values are coerced to objects.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.keysIn(new Foo);\\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\\n     */\\n    function keysIn(object) {\\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\\n    }\\n\\n    /**\\n     * The opposite of `_.mapValues`; this method creates an object with the\\n     * same values as `object` and keys generated by running each own enumerable\\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\\n     * with three arguments: (value, key, object).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.8.0\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Object} Returns the new mapped object.\\n     * @see _.mapValues\\n     * @example\\n     *\\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\\n     *   return key + value;\\n     * });\\n     * // => { 'a1': 1, 'b2': 2 }\\n     */\\n    function mapKeys(object, iteratee) {\\n      var result = {};\\n      iteratee = getIteratee(iteratee, 3);\\n\\n      baseForOwn(object, function(value, key, object) {\\n        baseAssignValue(result, iteratee(value, key, object), value);\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an object with the same keys as `object` and values generated\\n     * by running each own enumerable string keyed property of `object` thru\\n     * `iteratee`. The iteratee is invoked with three arguments:\\n     * (value, key, object).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.4.0\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Object} Returns the new mapped object.\\n     * @see _.mapKeys\\n     * @example\\n     *\\n     * var users = {\\n     *   'fred':    { 'user': 'fred',    'age': 40 },\\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\\n     * };\\n     *\\n     * _.mapValues(users, function(o) { return o.age; });\\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.mapValues(users, 'age');\\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\\n     */\\n    function mapValues(object, iteratee) {\\n      var result = {};\\n      iteratee = getIteratee(iteratee, 3);\\n\\n      baseForOwn(object, function(value, key, object) {\\n        baseAssignValue(result, key, iteratee(value, key, object));\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * This method is like `_.assign` except that it recursively merges own and\\n     * inherited enumerable string keyed properties of source objects into the\\n     * destination object. Source properties that resolve to `undefined` are\\n     * skipped if a destination value exists. Array and plain object properties\\n     * are merged recursively. Other objects and value types are overridden by\\n     * assignment. Source objects are applied from left to right. Subsequent\\n     * sources overwrite property assignments of previous sources.\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.5.0\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var object = {\\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\\n     * };\\n     *\\n     * var other = {\\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\\n     * };\\n     *\\n     * _.merge(object, other);\\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\\n     */\\n    var merge = createAssigner(function(object, source, srcIndex) {\\n      baseMerge(object, source, srcIndex);\\n    });\\n\\n    /**\\n     * This method is like `_.merge` except that it accepts `customizer` which\\n     * is invoked to produce the merged values of the destination and source\\n     * properties. If `customizer` returns `undefined`, merging is handled by the\\n     * method instead. The `customizer` is invoked with six arguments:\\n     * (objValue, srcValue, key, object, source, stack).\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} sources The source objects.\\n     * @param {Function} customizer The function to customize assigned values.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * function customizer(objValue, srcValue) {\\n     *   if (_.isArray(objValue)) {\\n     *     return objValue.concat(srcValue);\\n     *   }\\n     * }\\n     *\\n     * var object = { 'a': [1], 'b': [2] };\\n     * var other = { 'a': [3], 'b': [4] };\\n     *\\n     * _.mergeWith(object, other, customizer);\\n     * // => { 'a': [1, 3], 'b': [2, 4] }\\n     */\\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\\n      baseMerge(object, source, srcIndex, customizer);\\n    });\\n\\n    /**\\n     * The opposite of `_.pick`; this method creates an object composed of the\\n     * own and inherited enumerable property paths of `object` that are not omitted.\\n     *\\n     * **Note:** This method is considerably slower than `_.pick`.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The source object.\\n     * @param {...(string|string[])} [paths] The property paths to omit.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\\n     *\\n     * _.omit(object, ['a', 'c']);\\n     * // => { 'b': '2' }\\n     */\\n    var omit = flatRest(function(object, paths) {\\n      var result = {};\\n      if (object == null) {\\n        return result;\\n      }\\n      var isDeep = false;\\n      paths = arrayMap(paths, function(path) {\\n        path = castPath(path, object);\\n        isDeep || (isDeep = path.length > 1);\\n        return path;\\n      });\\n      copyObject(object, getAllKeysIn(object), result);\\n      if (isDeep) {\\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG);\\n      }\\n      var length = paths.length;\\n      while (length--) {\\n        baseUnset(result, paths[length]);\\n      }\\n      return result;\\n    });\\n\\n    /**\\n     * The opposite of `_.pickBy`; this method creates an object composed of\\n     * the own and inherited enumerable string keyed properties of `object` that\\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\\n     * arguments: (value, key).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The source object.\\n     * @param {Function} [predicate=_.identity] The function invoked per property.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\\n     *\\n     * _.omitBy(object, _.isNumber);\\n     * // => { 'b': '2' }\\n     */\\n    function omitBy(object, predicate) {\\n      return pickBy(object, negate(getIteratee(predicate)));\\n    }\\n\\n    /**\\n     * Creates an object composed of the picked `object` properties.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The source object.\\n     * @param {...(string|string[])} [paths] The property paths to pick.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\\n     *\\n     * _.pick(object, ['a', 'c']);\\n     * // => { 'a': 1, 'c': 3 }\\n     */\\n    var pick = flatRest(function(object, paths) {\\n      return object == null ? {} : basePick(object, paths);\\n    });\\n\\n    /**\\n     * Creates an object composed of the `object` properties `predicate` returns\\n     * truthy for. The predicate is invoked with two arguments: (value, key).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The source object.\\n     * @param {Function} [predicate=_.identity] The function invoked per property.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\\n     *\\n     * _.pickBy(object, _.isNumber);\\n     * // => { 'a': 1, 'c': 3 }\\n     */\\n    function pickBy(object, predicate) {\\n      if (object == null) {\\n        return {};\\n      }\\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\\n        return [prop];\\n      });\\n      predicate = getIteratee(predicate);\\n      return basePickBy(object, props, function(value, path) {\\n        return predicate(value, path[0]);\\n      });\\n    }\\n\\n    /**\\n     * This method is like `_.get` except that if the resolved value is a\\n     * function it's invoked with the `this` binding of its parent object and\\n     * its result is returned.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path of the property to resolve.\\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\\n     * @returns {*} Returns the resolved value.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\\n     *\\n     * _.result(object, 'a[0].b.c1');\\n     * // => 3\\n     *\\n     * _.result(object, 'a[0].b.c2');\\n     * // => 4\\n     *\\n     * _.result(object, 'a[0].b.c3', 'default');\\n     * // => 'default'\\n     *\\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\\n     * // => 'default'\\n     */\\n    function result(object, path, defaultValue) {\\n      path = castPath(path, object);\\n\\n      var index = -1,\\n          length = path.length;\\n\\n      // Ensure the loop is entered when path is empty.\\n      if (!length) {\\n        length = 1;\\n        object = undefined;\\n      }\\n      while (++index < length) {\\n        var value = object == null ? undefined : object[toKey(path[index])];\\n        if (value === undefined) {\\n          index = length;\\n          value = defaultValue;\\n        }\\n        object = isFunction(value) ? value.call(object) : value;\\n      }\\n      return object;\\n    }\\n\\n    /**\\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\\n     * it's created. Arrays are created for missing index properties while objects\\n     * are created for all other missing properties. Use `_.setWith` to customize\\n     * `path` creation.\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.7.0\\n     * @category Object\\n     * @param {Object} object The object to modify.\\n     * @param {Array|string} path The path of the property to set.\\n     * @param {*} value The value to set.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\\n     *\\n     * _.set(object, 'a[0].b.c', 4);\\n     * console.log(object.a[0].b.c);\\n     * // => 4\\n     *\\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\\n     * console.log(object.x[0].y.z);\\n     * // => 5\\n     */\\n    function set(object, path, value) {\\n      return object == null ? object : baseSet(object, path, value);\\n    }\\n\\n    /**\\n     * This method is like `_.set` except that it accepts `customizer` which is\\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\\n     * path creation is handled by the method instead. The `customizer` is invoked\\n     * with three arguments: (nsValue, key, nsObject).\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The object to modify.\\n     * @param {Array|string} path The path of the property to set.\\n     * @param {*} value The value to set.\\n     * @param {Function} [customizer] The function to customize assigned values.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var object = {};\\n     *\\n     * _.setWith(object, '[0][1]', 'a', Object);\\n     * // => { '0': { '1': 'a' } }\\n     */\\n    function setWith(object, path, value, customizer) {\\n      customizer = typeof customizer == 'function' ? customizer : undefined;\\n      return object == null ? object : baseSet(object, path, value, customizer);\\n    }\\n\\n    /**\\n     * Creates an array of own enumerable string keyed-value pairs for `object`\\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\\n     * entries are returned.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @alias entries\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the key-value pairs.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.toPairs(new Foo);\\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\\n     */\\n    var toPairs = createToPairs(keys);\\n\\n    /**\\n     * Creates an array of own and inherited enumerable string keyed-value pairs\\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\\n     * or set, its entries are returned.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @alias entriesIn\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the key-value pairs.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.toPairsIn(new Foo);\\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\\n     */\\n    var toPairsIn = createToPairs(keysIn);\\n\\n    /**\\n     * An alternative to `_.reduce`; this method transforms `object` to a new\\n     * `accumulator` object which is the result of running each of its own\\n     * enumerable string keyed properties thru `iteratee`, with each invocation\\n     * potentially mutating the `accumulator` object. If `accumulator` is not\\n     * provided, a new object with the same `[[Prototype]]` will be used. The\\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.3.0\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [accumulator] The custom accumulator value.\\n     * @returns {*} Returns the accumulated value.\\n     * @example\\n     *\\n     * _.transform([2, 3, 4], function(result, n) {\\n     *   result.push(n *= n);\\n     *   return n % 2 == 0;\\n     * }, []);\\n     * // => [4, 9]\\n     *\\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\\n     *   (result[value] || (result[value] = [])).push(key);\\n     * }, {});\\n     * // => { '1': ['a', 'c'], '2': ['b'] }\\n     */\\n    function transform(object, iteratee, accumulator) {\\n      var isArr = isArray(object),\\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\\n\\n      iteratee = getIteratee(iteratee, 4);\\n      if (accumulator == null) {\\n        var Ctor = object && object.constructor;\\n        if (isArrLike) {\\n          accumulator = isArr ? new Ctor : [];\\n        }\\n        else if (isObject(object)) {\\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\\n        }\\n        else {\\n          accumulator = {};\\n        }\\n      }\\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\\n        return iteratee(accumulator, value, index, object);\\n      });\\n      return accumulator;\\n    }\\n\\n    /**\\n     * Removes the property at `path` of `object`.\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Object\\n     * @param {Object} object The object to modify.\\n     * @param {Array|string} path The path of the property to unset.\\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\\n     * _.unset(object, 'a[0].b.c');\\n     * // => true\\n     *\\n     * console.log(object);\\n     * // => { 'a': [{ 'b': {} }] };\\n     *\\n     * _.unset(object, ['a', '0', 'b', 'c']);\\n     * // => true\\n     *\\n     * console.log(object);\\n     * // => { 'a': [{ 'b': {} }] };\\n     */\\n    function unset(object, path) {\\n      return object == null ? true : baseUnset(object, path);\\n    }\\n\\n    /**\\n     * This method is like `_.set` except that accepts `updater` to produce the\\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\\n     * is invoked with one argument: (value).\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.6.0\\n     * @category Object\\n     * @param {Object} object The object to modify.\\n     * @param {Array|string} path The path of the property to set.\\n     * @param {Function} updater The function to produce the updated value.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\\n     *\\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\\n     * console.log(object.a[0].b.c);\\n     * // => 9\\n     *\\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\\n     * console.log(object.x[0].y.z);\\n     * // => 0\\n     */\\n    function update(object, path, updater) {\\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\\n    }\\n\\n    /**\\n     * This method is like `_.update` except that it accepts `customizer` which is\\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\\n     * path creation is handled by the method instead. The `customizer` is invoked\\n     * with three arguments: (nsValue, key, nsObject).\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.6.0\\n     * @category Object\\n     * @param {Object} object The object to modify.\\n     * @param {Array|string} path The path of the property to set.\\n     * @param {Function} updater The function to produce the updated value.\\n     * @param {Function} [customizer] The function to customize assigned values.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var object = {};\\n     *\\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\\n     * // => { '0': { '1': 'a' } }\\n     */\\n    function updateWith(object, path, updater, customizer) {\\n      customizer = typeof customizer == 'function' ? customizer : undefined;\\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\\n    }\\n\\n    /**\\n     * Creates an array of the own enumerable string keyed property values of `object`.\\n     *\\n     * **Note:** Non-object values are coerced to objects.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property values.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.values(new Foo);\\n     * // => [1, 2] (iteration order is not guaranteed)\\n     *\\n     * _.values('hi');\\n     * // => ['h', 'i']\\n     */\\n    function values(object) {\\n      return object == null ? [] : baseValues(object, keys(object));\\n    }\\n\\n    /**\\n     * Creates an array of the own and inherited enumerable string keyed property\\n     * values of `object`.\\n     *\\n     * **Note:** Non-object values are coerced to objects.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property values.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.valuesIn(new Foo);\\n     * // => [1, 2, 3] (iteration order is not guaranteed)\\n     */\\n    function valuesIn(object) {\\n      return object == null ? [] : baseValues(object, keysIn(object));\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Number\\n     * @param {number} number The number to clamp.\\n     * @param {number} [lower] The lower bound.\\n     * @param {number} upper The upper bound.\\n     * @returns {number} Returns the clamped number.\\n     * @example\\n     *\\n     * _.clamp(-10, -5, 5);\\n     * // => -5\\n     *\\n     * _.clamp(10, -5, 5);\\n     * // => 5\\n     */\\n    function clamp(number, lower, upper) {\\n      if (upper === undefined) {\\n        upper = lower;\\n        lower = undefined;\\n      }\\n      if (upper !== undefined) {\\n        upper = toNumber(upper);\\n        upper = upper === upper ? upper : 0;\\n      }\\n      if (lower !== undefined) {\\n        lower = toNumber(lower);\\n        lower = lower === lower ? lower : 0;\\n      }\\n      return baseClamp(toNumber(number), lower, upper);\\n    }\\n\\n    /**\\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\\n     * If `start` is greater than `end` the params are swapped to support\\n     * negative ranges.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.3.0\\n     * @category Number\\n     * @param {number} number The number to check.\\n     * @param {number} [start=0] The start of the range.\\n     * @param {number} end The end of the range.\\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\\n     * @see _.range, _.rangeRight\\n     * @example\\n     *\\n     * _.inRange(3, 2, 4);\\n     * // => true\\n     *\\n     * _.inRange(4, 8);\\n     * // => true\\n     *\\n     * _.inRange(4, 2);\\n     * // => false\\n     *\\n     * _.inRange(2, 2);\\n     * // => false\\n     *\\n     * _.inRange(1.2, 2);\\n     * // => true\\n     *\\n     * _.inRange(5.2, 4);\\n     * // => false\\n     *\\n     * _.inRange(-3, -2, -6);\\n     * // => true\\n     */\\n    function inRange(number, start, end) {\\n      start = toFinite(start);\\n      if (end === undefined) {\\n        end = start;\\n        start = 0;\\n      } else {\\n        end = toFinite(end);\\n      }\\n      number = toNumber(number);\\n      return baseInRange(number, start, end);\\n    }\\n\\n    /**\\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\\n     * If only one argument is provided a number between `0` and the given number\\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\\n     * floats, a floating-point number is returned instead of an integer.\\n     *\\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\\n     * floating-point values which can produce unexpected results.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.7.0\\n     * @category Number\\n     * @param {number} [lower=0] The lower bound.\\n     * @param {number} [upper=1] The upper bound.\\n     * @param {boolean} [floating] Specify returning a floating-point number.\\n     * @returns {number} Returns the random number.\\n     * @example\\n     *\\n     * _.random(0, 5);\\n     * // => an integer between 0 and 5\\n     *\\n     * _.random(5);\\n     * // => also an integer between 0 and 5\\n     *\\n     * _.random(5, true);\\n     * // => a floating-point number between 0 and 5\\n     *\\n     * _.random(1.2, 5.2);\\n     * // => a floating-point number between 1.2 and 5.2\\n     */\\n    function random(lower, upper, floating) {\\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\\n        upper = floating = undefined;\\n      }\\n      if (floating === undefined) {\\n        if (typeof upper == 'boolean') {\\n          floating = upper;\\n          upper = undefined;\\n        }\\n        else if (typeof lower == 'boolean') {\\n          floating = lower;\\n          lower = undefined;\\n        }\\n      }\\n      if (lower === undefined && upper === undefined) {\\n        lower = 0;\\n        upper = 1;\\n      }\\n      else {\\n        lower = toFinite(lower);\\n        if (upper === undefined) {\\n          upper = lower;\\n          lower = 0;\\n        } else {\\n          upper = toFinite(upper);\\n        }\\n      }\\n      if (lower > upper) {\\n        var temp = lower;\\n        lower = upper;\\n        upper = temp;\\n      }\\n      if (floating || lower % 1 || upper % 1) {\\n        var rand = nativeRandom();\\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\\n      }\\n      return baseRandom(lower, upper);\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the camel cased string.\\n     * @example\\n     *\\n     * _.camelCase('Foo Bar');\\n     * // => 'fooBar'\\n     *\\n     * _.camelCase('--foo-bar--');\\n     * // => 'fooBar'\\n     *\\n     * _.camelCase('__FOO_BAR__');\\n     * // => 'fooBar'\\n     */\\n    var camelCase = createCompounder(function(result, word, index) {\\n      word = word.toLowerCase();\\n      return result + (index ? capitalize(word) : word);\\n    });\\n\\n    /**\\n     * Converts the first character of `string` to upper case and the remaining\\n     * to lower case.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to capitalize.\\n     * @returns {string} Returns the capitalized string.\\n     * @example\\n     *\\n     * _.capitalize('FRED');\\n     * // => 'Fred'\\n     */\\n    function capitalize(string) {\\n      return upperFirst(toString(string).toLowerCase());\\n    }\\n\\n    /**\\n     * Deburrs `string` by converting\\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\\n     * letters to basic Latin letters and removing\\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to deburr.\\n     * @returns {string} Returns the deburred string.\\n     * @example\\n     *\\n     * _.deburr('déjà vu');\\n     * // => 'deja vu'\\n     */\\n    function deburr(string) {\\n      string = toString(string);\\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\\n    }\\n\\n    /**\\n     * Checks if `string` ends with the given target string.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to inspect.\\n     * @param {string} [target] The string to search for.\\n     * @param {number} [position=string.length] The position to search up to.\\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.endsWith('abc', 'c');\\n     * // => true\\n     *\\n     * _.endsWith('abc', 'b');\\n     * // => false\\n     *\\n     * _.endsWith('abc', 'b', 2);\\n     * // => true\\n     */\\n    function endsWith(string, target, position) {\\n      string = toString(string);\\n      target = baseToString(target);\\n\\n      var length = string.length;\\n      position = position === undefined\\n        ? length\\n        : baseClamp(toInteger(position), 0, length);\\n\\n      var end = position;\\n      position -= target.length;\\n      return position >= 0 && string.slice(position, end) == target;\\n    }\\n\\n    /**\\n     * Converts the characters \\\"&\\\", \\\"<\\\", \\\">\\\", '\\\"', and \\\"'\\\" in `string` to their\\n     * corresponding HTML entities.\\n     *\\n     * **Note:** No other characters are escaped. To escape additional\\n     * characters use a third-party library like [_he_](https://mths.be/he).\\n     *\\n     * Though the \\\">\\\" character is escaped for symmetry, characters like\\n     * \\\">\\\" and \\\"/\\\" don't need escaping in HTML and have no special meaning\\n     * unless they're part of a tag or unquoted attribute value. See\\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\\n     * (under \\\"semi-related fun fact\\\") for more details.\\n     *\\n     * When working with HTML you should always\\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\\n     * XSS vectors.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to escape.\\n     * @returns {string} Returns the escaped string.\\n     * @example\\n     *\\n     * _.escape('fred, barney, & pebbles');\\n     * // => 'fred, barney, &amp; pebbles'\\n     */\\n    function escape(string) {\\n      string = toString(string);\\n      return (string && reHasUnescapedHtml.test(string))\\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\\n        : string;\\n    }\\n\\n    /**\\n     * Escapes the `RegExp` special characters \\\"^\\\", \\\"$\\\", \\\"\\\\\\\", \\\".\\\", \\\"*\\\", \\\"+\\\",\\n     * \\\"?\\\", \\\"(\\\", \\\")\\\", \\\"[\\\", \\\"]\\\", \\\"{\\\", \\\"}\\\", and \\\"|\\\" in `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to escape.\\n     * @returns {string} Returns the escaped string.\\n     * @example\\n     *\\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\\n     * // => '\\\\[lodash\\\\]\\\\(https://lodash\\\\.com/\\\\)'\\n     */\\n    function escapeRegExp(string) {\\n      string = toString(string);\\n      return (string && reHasRegExpChar.test(string))\\n        ? string.replace(reRegExpChar, '\\\\\\\\$&')\\n        : string;\\n    }\\n\\n    /**\\n     * Converts `string` to\\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the kebab cased string.\\n     * @example\\n     *\\n     * _.kebabCase('Foo Bar');\\n     * // => 'foo-bar'\\n     *\\n     * _.kebabCase('fooBar');\\n     * // => 'foo-bar'\\n     *\\n     * _.kebabCase('__FOO_BAR__');\\n     * // => 'foo-bar'\\n     */\\n    var kebabCase = createCompounder(function(result, word, index) {\\n      return result + (index ? '-' : '') + word.toLowerCase();\\n    });\\n\\n    /**\\n     * Converts `string`, as space separated words, to lower case.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the lower cased string.\\n     * @example\\n     *\\n     * _.lowerCase('--Foo-Bar--');\\n     * // => 'foo bar'\\n     *\\n     * _.lowerCase('fooBar');\\n     * // => 'foo bar'\\n     *\\n     * _.lowerCase('__FOO_BAR__');\\n     * // => 'foo bar'\\n     */\\n    var lowerCase = createCompounder(function(result, word, index) {\\n      return result + (index ? ' ' : '') + word.toLowerCase();\\n    });\\n\\n    /**\\n     * Converts the first character of `string` to lower case.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the converted string.\\n     * @example\\n     *\\n     * _.lowerFirst('Fred');\\n     * // => 'fred'\\n     *\\n     * _.lowerFirst('FRED');\\n     * // => 'fRED'\\n     */\\n    var lowerFirst = createCaseFirst('toLowerCase');\\n\\n    /**\\n     * Pads `string` on the left and right sides if it's shorter than `length`.\\n     * Padding characters are truncated if they can't be evenly divided by `length`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to pad.\\n     * @param {number} [length=0] The padding length.\\n     * @param {string} [chars=' '] The string used as padding.\\n     * @returns {string} Returns the padded string.\\n     * @example\\n     *\\n     * _.pad('abc', 8);\\n     * // => '  abc   '\\n     *\\n     * _.pad('abc', 8, '_-');\\n     * // => '_-abc_-_'\\n     *\\n     * _.pad('abc', 3);\\n     * // => 'abc'\\n     */\\n    function pad(string, length, chars) {\\n      string = toString(string);\\n      length = toInteger(length);\\n\\n      var strLength = length ? stringSize(string) : 0;\\n      if (!length || strLength >= length) {\\n        return string;\\n      }\\n      var mid = (length - strLength) / 2;\\n      return (\\n        createPadding(nativeFloor(mid), chars) +\\n        string +\\n        createPadding(nativeCeil(mid), chars)\\n      );\\n    }\\n\\n    /**\\n     * Pads `string` on the right side if it's shorter than `length`. Padding\\n     * characters are truncated if they exceed `length`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to pad.\\n     * @param {number} [length=0] The padding length.\\n     * @param {string} [chars=' '] The string used as padding.\\n     * @returns {string} Returns the padded string.\\n     * @example\\n     *\\n     * _.padEnd('abc', 6);\\n     * // => 'abc   '\\n     *\\n     * _.padEnd('abc', 6, '_-');\\n     * // => 'abc_-_'\\n     *\\n     * _.padEnd('abc', 3);\\n     * // => 'abc'\\n     */\\n    function padEnd(string, length, chars) {\\n      string = toString(string);\\n      length = toInteger(length);\\n\\n      var strLength = length ? stringSize(string) : 0;\\n      return (length && strLength < length)\\n        ? (string + createPadding(length - strLength, chars))\\n        : string;\\n    }\\n\\n    /**\\n     * Pads `string` on the left side if it's shorter than `length`. Padding\\n     * characters are truncated if they exceed `length`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to pad.\\n     * @param {number} [length=0] The padding length.\\n     * @param {string} [chars=' '] The string used as padding.\\n     * @returns {string} Returns the padded string.\\n     * @example\\n     *\\n     * _.padStart('abc', 6);\\n     * // => '   abc'\\n     *\\n     * _.padStart('abc', 6, '_-');\\n     * // => '_-_abc'\\n     *\\n     * _.padStart('abc', 3);\\n     * // => 'abc'\\n     */\\n    function padStart(string, length, chars) {\\n      string = toString(string);\\n      length = toInteger(length);\\n\\n      var strLength = length ? stringSize(string) : 0;\\n      return (length && strLength < length)\\n        ? (createPadding(length - strLength, chars) + string)\\n        : string;\\n    }\\n\\n    /**\\n     * Converts `string` to an integer of the specified radix. If `radix` is\\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\\n     * hexadecimal, in which case a `radix` of `16` is used.\\n     *\\n     * **Note:** This method aligns with the\\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 1.1.0\\n     * @category String\\n     * @param {string} string The string to convert.\\n     * @param {number} [radix=10] The radix to interpret `value` by.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {number} Returns the converted integer.\\n     * @example\\n     *\\n     * _.parseInt('08');\\n     * // => 8\\n     *\\n     * _.map(['6', '08', '10'], _.parseInt);\\n     * // => [6, 8, 10]\\n     */\\n    function parseInt(string, radix, guard) {\\n      if (guard || radix == null) {\\n        radix = 0;\\n      } else if (radix) {\\n        radix = +radix;\\n      }\\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\\n    }\\n\\n    /**\\n     * Repeats the given string `n` times.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to repeat.\\n     * @param {number} [n=1] The number of times to repeat the string.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {string} Returns the repeated string.\\n     * @example\\n     *\\n     * _.repeat('*', 3);\\n     * // => '***'\\n     *\\n     * _.repeat('abc', 2);\\n     * // => 'abcabc'\\n     *\\n     * _.repeat('abc', 0);\\n     * // => ''\\n     */\\n    function repeat(string, n, guard) {\\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\\n        n = 1;\\n      } else {\\n        n = toInteger(n);\\n      }\\n      return baseRepeat(toString(string), n);\\n    }\\n\\n    /**\\n     * Replaces matches for `pattern` in `string` with `replacement`.\\n     *\\n     * **Note:** This method is based on\\n     * [`String#replace`](https://mdn.io/String/replace).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to modify.\\n     * @param {RegExp|string} pattern The pattern to replace.\\n     * @param {Function|string} replacement The match replacement.\\n     * @returns {string} Returns the modified string.\\n     * @example\\n     *\\n     * _.replace('Hi Fred', 'Fred', 'Barney');\\n     * // => 'Hi Barney'\\n     */\\n    function replace() {\\n      var args = arguments,\\n          string = toString(args[0]);\\n\\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\\n    }\\n\\n    /**\\n     * Converts `string` to\\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the snake cased string.\\n     * @example\\n     *\\n     * _.snakeCase('Foo Bar');\\n     * // => 'foo_bar'\\n     *\\n     * _.snakeCase('fooBar');\\n     * // => 'foo_bar'\\n     *\\n     * _.snakeCase('--FOO-BAR--');\\n     * // => 'foo_bar'\\n     */\\n    var snakeCase = createCompounder(function(result, word, index) {\\n      return result + (index ? '_' : '') + word.toLowerCase();\\n    });\\n\\n    /**\\n     * Splits `string` by `separator`.\\n     *\\n     * **Note:** This method is based on\\n     * [`String#split`](https://mdn.io/String/split).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to split.\\n     * @param {RegExp|string} separator The separator pattern to split by.\\n     * @param {number} [limit] The length to truncate results to.\\n     * @returns {Array} Returns the string segments.\\n     * @example\\n     *\\n     * _.split('a-b-c', '-', 2);\\n     * // => ['a', 'b']\\n     */\\n    function split(string, separator, limit) {\\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\\n        separator = limit = undefined;\\n      }\\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\\n      if (!limit) {\\n        return [];\\n      }\\n      string = toString(string);\\n      if (string && (\\n            typeof separator == 'string' ||\\n            (separator != null && !isRegExp(separator))\\n          )) {\\n        separator = baseToString(separator);\\n        if (!separator && hasUnicode(string)) {\\n          return castSlice(stringToArray(string), 0, limit);\\n        }\\n      }\\n      return string.split(separator, limit);\\n    }\\n\\n    /**\\n     * Converts `string` to\\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.1.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the start cased string.\\n     * @example\\n     *\\n     * _.startCase('--foo-bar--');\\n     * // => 'Foo Bar'\\n     *\\n     * _.startCase('fooBar');\\n     * // => 'Foo Bar'\\n     *\\n     * _.startCase('__FOO_BAR__');\\n     * // => 'FOO BAR'\\n     */\\n    var startCase = createCompounder(function(result, word, index) {\\n      return result + (index ? ' ' : '') + upperFirst(word);\\n    });\\n\\n    /**\\n     * Checks if `string` starts with the given target string.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to inspect.\\n     * @param {string} [target] The string to search for.\\n     * @param {number} [position=0] The position to search from.\\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.startsWith('abc', 'a');\\n     * // => true\\n     *\\n     * _.startsWith('abc', 'b');\\n     * // => false\\n     *\\n     * _.startsWith('abc', 'b', 1);\\n     * // => true\\n     */\\n    function startsWith(string, target, position) {\\n      string = toString(string);\\n      position = baseClamp(toInteger(position), 0, string.length);\\n      target = baseToString(target);\\n      return string.slice(position, position + target.length) == target;\\n    }\\n\\n    /**\\n     * Creates a compiled template function that can interpolate data properties\\n     * in \\\"interpolate\\\" delimiters, HTML-escape interpolated data properties in\\n     * \\\"escape\\\" delimiters, and execute JavaScript in \\\"evaluate\\\" delimiters. Data\\n     * properties may be accessed as free variables in the template. If a setting\\n     * object is given, it takes precedence over `_.templateSettings` values.\\n     *\\n     * **Note:** In the development build `_.template` utilizes\\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\\n     * for easier debugging.\\n     *\\n     * For more information on precompiling templates see\\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\\n     *\\n     * For more information on Chrome extension sandboxes see\\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The template string.\\n     * @param {Object} [options={}] The options object.\\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\\n     *  The HTML \\\"escape\\\" delimiter.\\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\\n     *  The \\\"evaluate\\\" delimiter.\\n     * @param {Object} [options.imports=_.templateSettings.imports]\\n     *  An object to import into the template as free variables.\\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\\n     *  The \\\"interpolate\\\" delimiter.\\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\\n     *  The sourceURL of the compiled template.\\n     * @param {string} [options.variable='obj']\\n     *  The data object variable name.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Function} Returns the compiled template function.\\n     * @example\\n     *\\n     * // Use the \\\"interpolate\\\" delimiter to create a compiled template.\\n     * var compiled = _.template('hello <%= user %>!');\\n     * compiled({ 'user': 'fred' });\\n     * // => 'hello fred!'\\n     *\\n     * // Use the HTML \\\"escape\\\" delimiter to escape data property values.\\n     * var compiled = _.template('<b><%- value %></b>');\\n     * compiled({ 'value': '<script>' });\\n     * // => '<b>&lt;script&gt;</b>'\\n     *\\n     * // Use the \\\"evaluate\\\" delimiter to execute JavaScript and generate HTML.\\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\\n     * compiled({ 'users': ['fred', 'barney'] });\\n     * // => '<li>fred</li><li>barney</li>'\\n     *\\n     * // Use the internal `print` function in \\\"evaluate\\\" delimiters.\\n     * var compiled = _.template('<% print(\\\"hello \\\" + user); %>!');\\n     * compiled({ 'user': 'barney' });\\n     * // => 'hello barney!'\\n     *\\n     * // Use the ES template literal delimiter as an \\\"interpolate\\\" delimiter.\\n     * // Disable support by replacing the \\\"interpolate\\\" delimiter.\\n     * var compiled = _.template('hello ${ user }!');\\n     * compiled({ 'user': 'pebbles' });\\n     * // => 'hello pebbles!'\\n     *\\n     * // Use backslashes to treat delimiters as plain text.\\n     * var compiled = _.template('<%= \\\"\\\\\\\\<%- value %\\\\\\\\>\\\" %>');\\n     * compiled({ 'value': 'ignored' });\\n     * // => '<%- value %>'\\n     *\\n     * // Use the `imports` option to import `jQuery` as `jq`.\\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\\n     * compiled({ 'users': ['fred', 'barney'] });\\n     * // => '<li>fred</li><li>barney</li>'\\n     *\\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\\n     * compiled(data);\\n     * // => Find the source of \\\"greeting.jst\\\" under the Sources tab or Resources panel of the web inspector.\\n     *\\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\\n     * compiled.source;\\n     * // => function(data) {\\n     * //   var __t, __p = '';\\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\\n     * //   return __p;\\n     * // }\\n     *\\n     * // Use custom template delimiters.\\n     * _.templateSettings.interpolate = /{{([\\\\s\\\\S]+?)}}/g;\\n     * var compiled = _.template('hello {{ user }}!');\\n     * compiled({ 'user': 'mustache' });\\n     * // => 'hello mustache!'\\n     *\\n     * // Use the `source` property to inline compiled templates for meaningful\\n     * // line numbers in error messages and stack traces.\\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\\\\n     *   var JST = {\\\\\\n     *     \\\"main\\\": ' + _.template(mainText).source + '\\\\\\n     *   };\\\\\\n     * ');\\n     */\\n    function template(string, options, guard) {\\n      // Based on John Resig's `tmpl` implementation\\n      // (http://ejohn.org/blog/javascript-micro-templating/)\\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\\n      var settings = lodash.templateSettings;\\n\\n      if (guard && isIterateeCall(string, options, guard)) {\\n        options = undefined;\\n      }\\n      string = toString(string);\\n      options = assignInWith({}, options, settings, assignInDefaults);\\n\\n      var imports = assignInWith({}, options.imports, settings.imports, assignInDefaults),\\n          importsKeys = keys(imports),\\n          importsValues = baseValues(imports, importsKeys);\\n\\n      var isEscaping,\\n          isEvaluating,\\n          index = 0,\\n          interpolate = options.interpolate || reNoMatch,\\n          source = \\\"__p += '\\\";\\n\\n      // Compile the regexp to match each delimiter.\\n      var reDelimiters = RegExp(\\n        (options.escape || reNoMatch).source + '|' +\\n        interpolate.source + '|' +\\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\\n        (options.evaluate || reNoMatch).source + '|$'\\n      , 'g');\\n\\n      // Use a sourceURL for easier debugging.\\n      var sourceURL = '//# sourceURL=' +\\n        ('sourceURL' in options\\n          ? options.sourceURL\\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\\n        ) + '\\\\n';\\n\\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\\n        interpolateValue || (interpolateValue = esTemplateValue);\\n\\n        // Escape characters that can't be included in string literals.\\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\\n\\n        // Replace delimiters with snippets.\\n        if (escapeValue) {\\n          isEscaping = true;\\n          source += \\\"' +\\\\n__e(\\\" + escapeValue + \\\") +\\\\n'\\\";\\n        }\\n        if (evaluateValue) {\\n          isEvaluating = true;\\n          source += \\\"';\\\\n\\\" + evaluateValue + \\\";\\\\n__p += '\\\";\\n        }\\n        if (interpolateValue) {\\n          source += \\\"' +\\\\n((__t = (\\\" + interpolateValue + \\\")) == null ? '' : __t) +\\\\n'\\\";\\n        }\\n        index = offset + match.length;\\n\\n        // The JS engine embedded in Adobe products needs `match` returned in\\n        // order to produce the correct `offset` value.\\n        return match;\\n      });\\n\\n      source += \\\"';\\\\n\\\";\\n\\n      // If `variable` is not specified wrap a with-statement around the generated\\n      // code to add the data object to the top of the scope chain.\\n      var variable = options.variable;\\n      if (!variable) {\\n        source = 'with (obj) {\\\\n' + source + '\\\\n}\\\\n';\\n      }\\n      // Cleanup code by stripping empty strings.\\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\\n        .replace(reEmptyStringMiddle, '$1')\\n        .replace(reEmptyStringTrailing, '$1;');\\n\\n      // Frame code as the function body.\\n      source = 'function(' + (variable || 'obj') + ') {\\\\n' +\\n        (variable\\n          ? ''\\n          : 'obj || (obj = {});\\\\n'\\n        ) +\\n        \\\"var __t, __p = ''\\\" +\\n        (isEscaping\\n           ? ', __e = _.escape'\\n           : ''\\n        ) +\\n        (isEvaluating\\n          ? ', __j = Array.prototype.join;\\\\n' +\\n            \\\"function print() { __p += __j.call(arguments, '') }\\\\n\\\"\\n          : ';\\\\n'\\n        ) +\\n        source +\\n        'return __p\\\\n}';\\n\\n      var result = attempt(function() {\\n        return Function(importsKeys, sourceURL + 'return ' + source)\\n          .apply(undefined, importsValues);\\n      });\\n\\n      // Provide the compiled function's source by its `toString` method or\\n      // the `source` property as a convenience for inlining compiled templates.\\n      result.source = source;\\n      if (isError(result)) {\\n        throw result;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Converts `string`, as a whole, to lower case just like\\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the lower cased string.\\n     * @example\\n     *\\n     * _.toLower('--Foo-Bar--');\\n     * // => '--foo-bar--'\\n     *\\n     * _.toLower('fooBar');\\n     * // => 'foobar'\\n     *\\n     * _.toLower('__FOO_BAR__');\\n     * // => '__foo_bar__'\\n     */\\n    function toLower(value) {\\n      return toString(value).toLowerCase();\\n    }\\n\\n    /**\\n     * Converts `string`, as a whole, to upper case just like\\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the upper cased string.\\n     * @example\\n     *\\n     * _.toUpper('--foo-bar--');\\n     * // => '--FOO-BAR--'\\n     *\\n     * _.toUpper('fooBar');\\n     * // => 'FOOBAR'\\n     *\\n     * _.toUpper('__foo_bar__');\\n     * // => '__FOO_BAR__'\\n     */\\n    function toUpper(value) {\\n      return toString(value).toUpperCase();\\n    }\\n\\n    /**\\n     * Removes leading and trailing whitespace or specified characters from `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to trim.\\n     * @param {string} [chars=whitespace] The characters to trim.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {string} Returns the trimmed string.\\n     * @example\\n     *\\n     * _.trim('  abc  ');\\n     * // => 'abc'\\n     *\\n     * _.trim('-_-abc-_-', '_-');\\n     * // => 'abc'\\n     *\\n     * _.map(['  foo  ', '  bar  '], _.trim);\\n     * // => ['foo', 'bar']\\n     */\\n    function trim(string, chars, guard) {\\n      string = toString(string);\\n      if (string && (guard || chars === undefined)) {\\n        return string.replace(reTrim, '');\\n      }\\n      if (!string || !(chars = baseToString(chars))) {\\n        return string;\\n      }\\n      var strSymbols = stringToArray(string),\\n          chrSymbols = stringToArray(chars),\\n          start = charsStartIndex(strSymbols, chrSymbols),\\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\\n\\n      return castSlice(strSymbols, start, end).join('');\\n    }\\n\\n    /**\\n     * Removes trailing whitespace or specified characters from `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to trim.\\n     * @param {string} [chars=whitespace] The characters to trim.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {string} Returns the trimmed string.\\n     * @example\\n     *\\n     * _.trimEnd('  abc  ');\\n     * // => '  abc'\\n     *\\n     * _.trimEnd('-_-abc-_-', '_-');\\n     * // => '-_-abc'\\n     */\\n    function trimEnd(string, chars, guard) {\\n      string = toString(string);\\n      if (string && (guard || chars === undefined)) {\\n        return string.replace(reTrimEnd, '');\\n      }\\n      if (!string || !(chars = baseToString(chars))) {\\n        return string;\\n      }\\n      var strSymbols = stringToArray(string),\\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\\n\\n      return castSlice(strSymbols, 0, end).join('');\\n    }\\n\\n    /**\\n     * Removes leading whitespace or specified characters from `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to trim.\\n     * @param {string} [chars=whitespace] The characters to trim.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {string} Returns the trimmed string.\\n     * @example\\n     *\\n     * _.trimStart('  abc  ');\\n     * // => 'abc  '\\n     *\\n     * _.trimStart('-_-abc-_-', '_-');\\n     * // => 'abc-_-'\\n     */\\n    function trimStart(string, chars, guard) {\\n      string = toString(string);\\n      if (string && (guard || chars === undefined)) {\\n        return string.replace(reTrimStart, '');\\n      }\\n      if (!string || !(chars = baseToString(chars))) {\\n        return string;\\n      }\\n      var strSymbols = stringToArray(string),\\n          start = charsStartIndex(strSymbols, stringToArray(chars));\\n\\n      return castSlice(strSymbols, start).join('');\\n    }\\n\\n    /**\\n     * Truncates `string` if it's longer than the given maximum string length.\\n     * The last characters of the truncated string are replaced with the omission\\n     * string which defaults to \\\"...\\\".\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to truncate.\\n     * @param {Object} [options={}] The options object.\\n     * @param {number} [options.length=30] The maximum string length.\\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\\n     * @returns {string} Returns the truncated string.\\n     * @example\\n     *\\n     * _.truncate('hi-diddly-ho there, neighborino');\\n     * // => 'hi-diddly-ho there, neighbo...'\\n     *\\n     * _.truncate('hi-diddly-ho there, neighborino', {\\n     *   'length': 24,\\n     *   'separator': ' '\\n     * });\\n     * // => 'hi-diddly-ho there,...'\\n     *\\n     * _.truncate('hi-diddly-ho there, neighborino', {\\n     *   'length': 24,\\n     *   'separator': /,? +/\\n     * });\\n     * // => 'hi-diddly-ho there...'\\n     *\\n     * _.truncate('hi-diddly-ho there, neighborino', {\\n     *   'omission': ' [...]'\\n     * });\\n     * // => 'hi-diddly-ho there, neig [...]'\\n     */\\n    function truncate(string, options) {\\n      var length = DEFAULT_TRUNC_LENGTH,\\n          omission = DEFAULT_TRUNC_OMISSION;\\n\\n      if (isObject(options)) {\\n        var separator = 'separator' in options ? options.separator : separator;\\n        length = 'length' in options ? toInteger(options.length) : length;\\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\\n      }\\n      string = toString(string);\\n\\n      var strLength = string.length;\\n      if (hasUnicode(string)) {\\n        var strSymbols = stringToArray(string);\\n        strLength = strSymbols.length;\\n      }\\n      if (length >= strLength) {\\n        return string;\\n      }\\n      var end = length - stringSize(omission);\\n      if (end < 1) {\\n        return omission;\\n      }\\n      var result = strSymbols\\n        ? castSlice(strSymbols, 0, end).join('')\\n        : string.slice(0, end);\\n\\n      if (separator === undefined) {\\n        return result + omission;\\n      }\\n      if (strSymbols) {\\n        end += (result.length - end);\\n      }\\n      if (isRegExp(separator)) {\\n        if (string.slice(end).search(separator)) {\\n          var match,\\n              substring = result;\\n\\n          if (!separator.global) {\\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\\n          }\\n          separator.lastIndex = 0;\\n          while ((match = separator.exec(substring))) {\\n            var newEnd = match.index;\\n          }\\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\\n        }\\n      } else if (string.indexOf(baseToString(separator), end) != end) {\\n        var index = result.lastIndexOf(separator);\\n        if (index > -1) {\\n          result = result.slice(0, index);\\n        }\\n      }\\n      return result + omission;\\n    }\\n\\n    /**\\n     * The inverse of `_.escape`; this method converts the HTML entities\\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\\n     * their corresponding characters.\\n     *\\n     * **Note:** No other HTML entities are unescaped. To unescape additional\\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 0.6.0\\n     * @category String\\n     * @param {string} [string=''] The string to unescape.\\n     * @returns {string} Returns the unescaped string.\\n     * @example\\n     *\\n     * _.unescape('fred, barney, &amp; pebbles');\\n     * // => 'fred, barney, & pebbles'\\n     */\\n    function unescape(string) {\\n      string = toString(string);\\n      return (string && reHasEscapedHtml.test(string))\\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\\n        : string;\\n    }\\n\\n    /**\\n     * Converts `string`, as space separated words, to upper case.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the upper cased string.\\n     * @example\\n     *\\n     * _.upperCase('--foo-bar');\\n     * // => 'FOO BAR'\\n     *\\n     * _.upperCase('fooBar');\\n     * // => 'FOO BAR'\\n     *\\n     * _.upperCase('__foo_bar__');\\n     * // => 'FOO BAR'\\n     */\\n    var upperCase = createCompounder(function(result, word, index) {\\n      return result + (index ? ' ' : '') + word.toUpperCase();\\n    });\\n\\n    /**\\n     * Converts the first character of `string` to upper case.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the converted string.\\n     * @example\\n     *\\n     * _.upperFirst('fred');\\n     * // => 'Fred'\\n     *\\n     * _.upperFirst('FRED');\\n     * // => 'FRED'\\n     */\\n    var upperFirst = createCaseFirst('toUpperCase');\\n\\n    /**\\n     * Splits `string` into an array of its words.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category String\\n     * @param {string} [string=''] The string to inspect.\\n     * @param {RegExp|string} [pattern] The pattern to match words.\\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\\n     * @returns {Array} Returns the words of `string`.\\n     * @example\\n     *\\n     * _.words('fred, barney, & pebbles');\\n     * // => ['fred', 'barney', 'pebbles']\\n     *\\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\\n     * // => ['fred', 'barney', '&', 'pebbles']\\n     */\\n    function words(string, pattern, guard) {\\n      string = toString(string);\\n      pattern = guard ? undefined : pattern;\\n\\n      if (pattern === undefined) {\\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\\n      }\\n      return string.match(pattern) || [];\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Attempts to invoke `func`, returning either the result or the caught error\\n     * object. Any additional arguments are provided to `func` when it's invoked.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Util\\n     * @param {Function} func The function to attempt.\\n     * @param {...*} [args] The arguments to invoke `func` with.\\n     * @returns {*} Returns the `func` result or error object.\\n     * @example\\n     *\\n     * // Avoid throwing errors for invalid selectors.\\n     * var elements = _.attempt(function(selector) {\\n     *   return document.querySelectorAll(selector);\\n     * }, '>_>');\\n     *\\n     * if (_.isError(elements)) {\\n     *   elements = [];\\n     * }\\n     */\\n    var attempt = baseRest(function(func, args) {\\n      try {\\n        return apply(func, undefined, args);\\n      } catch (e) {\\n        return isError(e) ? e : new Error(e);\\n      }\\n    });\\n\\n    /**\\n     * Binds methods of an object to the object itself, overwriting the existing\\n     * method.\\n     *\\n     * **Note:** This method doesn't set the \\\"length\\\" property of bound functions.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Util\\n     * @param {Object} object The object to bind and assign the bound methods to.\\n     * @param {...(string|string[])} methodNames The object method names to bind.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var view = {\\n     *   'label': 'docs',\\n     *   'click': function() {\\n     *     console.log('clicked ' + this.label);\\n     *   }\\n     * };\\n     *\\n     * _.bindAll(view, ['click']);\\n     * jQuery(element).on('click', view.click);\\n     * // => Logs 'clicked docs' when clicked.\\n     */\\n    var bindAll = flatRest(function(object, methodNames) {\\n      arrayEach(methodNames, function(key) {\\n        key = toKey(key);\\n        baseAssignValue(object, key, bind(object[key], object));\\n      });\\n      return object;\\n    });\\n\\n    /**\\n     * Creates a function that iterates over `pairs` and invokes the corresponding\\n     * function of the first predicate to return truthy. The predicate-function\\n     * pairs are invoked with the `this` binding and arguments of the created\\n     * function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Util\\n     * @param {Array} pairs The predicate-function pairs.\\n     * @returns {Function} Returns the new composite function.\\n     * @example\\n     *\\n     * var func = _.cond([\\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\\n     *   [_.stubTrue,                      _.constant('no match')]\\n     * ]);\\n     *\\n     * func({ 'a': 1, 'b': 2 });\\n     * // => 'matches A'\\n     *\\n     * func({ 'a': 0, 'b': 1 });\\n     * // => 'matches B'\\n     *\\n     * func({ 'a': '1', 'b': '2' });\\n     * // => 'no match'\\n     */\\n    function cond(pairs) {\\n      var length = pairs == null ? 0 : pairs.length,\\n          toIteratee = getIteratee();\\n\\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\\n        if (typeof pair[1] != 'function') {\\n          throw new TypeError(FUNC_ERROR_TEXT);\\n        }\\n        return [toIteratee(pair[0]), pair[1]];\\n      });\\n\\n      return baseRest(function(args) {\\n        var index = -1;\\n        while (++index < length) {\\n          var pair = pairs[index];\\n          if (apply(pair[0], this, args)) {\\n            return apply(pair[1], this, args);\\n          }\\n        }\\n      });\\n    }\\n\\n    /**\\n     * Creates a function that invokes the predicate properties of `source` with\\n     * the corresponding property values of a given object, returning `true` if\\n     * all predicates return truthy, else `false`.\\n     *\\n     * **Note:** The created function is equivalent to `_.conformsTo` with\\n     * `source` partially applied.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Util\\n     * @param {Object} source The object of property predicates to conform to.\\n     * @returns {Function} Returns the new spec function.\\n     * @example\\n     *\\n     * var objects = [\\n     *   { 'a': 2, 'b': 1 },\\n     *   { 'a': 1, 'b': 2 }\\n     * ];\\n     *\\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\\n     * // => [{ 'a': 1, 'b': 2 }]\\n     */\\n    function conforms(source) {\\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\\n    }\\n\\n    /**\\n     * Creates a function that returns `value`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.4.0\\n     * @category Util\\n     * @param {*} value The value to return from the new function.\\n     * @returns {Function} Returns the new constant function.\\n     * @example\\n     *\\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\\n     *\\n     * console.log(objects);\\n     * // => [{ 'a': 1 }, { 'a': 1 }]\\n     *\\n     * console.log(objects[0] === objects[1]);\\n     * // => true\\n     */\\n    function constant(value) {\\n      return function() {\\n        return value;\\n      };\\n    }\\n\\n    /**\\n     * Checks `value` to determine whether a default value should be returned in\\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\\n     * or `undefined`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.14.0\\n     * @category Util\\n     * @param {*} value The value to check.\\n     * @param {*} defaultValue The default value.\\n     * @returns {*} Returns the resolved value.\\n     * @example\\n     *\\n     * _.defaultTo(1, 10);\\n     * // => 1\\n     *\\n     * _.defaultTo(undefined, 10);\\n     * // => 10\\n     */\\n    function defaultTo(value, defaultValue) {\\n      return (value == null || value !== value) ? defaultValue : value;\\n    }\\n\\n    /**\\n     * Creates a function that returns the result of invoking the given functions\\n     * with the `this` binding of the created function, where each successive\\n     * invocation is supplied the return value of the previous.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Util\\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\\n     * @returns {Function} Returns the new composite function.\\n     * @see _.flowRight\\n     * @example\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * var addSquare = _.flow([_.add, square]);\\n     * addSquare(1, 2);\\n     * // => 9\\n     */\\n    var flow = createFlow();\\n\\n    /**\\n     * This method is like `_.flow` except that it creates a function that\\n     * invokes the given functions from right to left.\\n     *\\n     * @static\\n     * @since 3.0.0\\n     * @memberOf _\\n     * @category Util\\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\\n     * @returns {Function} Returns the new composite function.\\n     * @see _.flow\\n     * @example\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * var addSquare = _.flowRight([square, _.add]);\\n     * addSquare(1, 2);\\n     * // => 9\\n     */\\n    var flowRight = createFlow(true);\\n\\n    /**\\n     * This method returns the first argument it receives.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Util\\n     * @param {*} value Any value.\\n     * @returns {*} Returns `value`.\\n     * @example\\n     *\\n     * var object = { 'a': 1 };\\n     *\\n     * console.log(_.identity(object) === object);\\n     * // => true\\n     */\\n    function identity(value) {\\n      return value;\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func` with the arguments of the created\\n     * function. If `func` is a property name, the created function returns the\\n     * property value for a given element. If `func` is an array or object, the\\n     * created function returns `true` for elements that contain the equivalent\\n     * source properties, otherwise it returns `false`.\\n     *\\n     * @static\\n     * @since 4.0.0\\n     * @memberOf _\\n     * @category Util\\n     * @param {*} [func=_.identity] The value to convert to a callback.\\n     * @returns {Function} Returns the callback.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': true },\\n     *   { 'user': 'fred',   'age': 40, 'active': false }\\n     * ];\\n     *\\n     * // The `_.matches` iteratee shorthand.\\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\\n     *\\n     * // The `_.matchesProperty` iteratee shorthand.\\n     * _.filter(users, _.iteratee(['user', 'fred']));\\n     * // => [{ 'user': 'fred', 'age': 40 }]\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.map(users, _.iteratee('user'));\\n     * // => ['barney', 'fred']\\n     *\\n     * // Create custom iteratee shorthands.\\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\\n     *     return func.test(string);\\n     *   };\\n     * });\\n     *\\n     * _.filter(['abc', 'def'], /ef/);\\n     * // => ['def']\\n     */\\n    function iteratee(func) {\\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\\n    }\\n\\n    /**\\n     * Creates a function that performs a partial deep comparison between a given\\n     * object and `source`, returning `true` if the given object has equivalent\\n     * property values, else `false`.\\n     *\\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\\n     * partially applied.\\n     *\\n     * Partial comparisons will match empty array and empty object `source`\\n     * values against any array or object value, respectively. See `_.isEqual`\\n     * for a list of supported value comparisons.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Util\\n     * @param {Object} source The object of property values to match.\\n     * @returns {Function} Returns the new spec function.\\n     * @example\\n     *\\n     * var objects = [\\n     *   { 'a': 1, 'b': 2, 'c': 3 },\\n     *   { 'a': 4, 'b': 5, 'c': 6 }\\n     * ];\\n     *\\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\\n     */\\n    function matches(source) {\\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\\n    }\\n\\n    /**\\n     * Creates a function that performs a partial deep comparison between the\\n     * value at `path` of a given object to `srcValue`, returning `true` if the\\n     * object value is equivalent, else `false`.\\n     *\\n     * **Note:** Partial comparisons will match empty array and empty object\\n     * `srcValue` values against any array or object value, respectively. See\\n     * `_.isEqual` for a list of supported value comparisons.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.2.0\\n     * @category Util\\n     * @param {Array|string} path The path of the property to get.\\n     * @param {*} srcValue The value to match.\\n     * @returns {Function} Returns the new spec function.\\n     * @example\\n     *\\n     * var objects = [\\n     *   { 'a': 1, 'b': 2, 'c': 3 },\\n     *   { 'a': 4, 'b': 5, 'c': 6 }\\n     * ];\\n     *\\n     * _.find(objects, _.matchesProperty('a', 4));\\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\\n     */\\n    function matchesProperty(path, srcValue) {\\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\\n    }\\n\\n    /**\\n     * Creates a function that invokes the method at `path` of a given object.\\n     * Any additional arguments are provided to the invoked method.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.7.0\\n     * @category Util\\n     * @param {Array|string} path The path of the method to invoke.\\n     * @param {...*} [args] The arguments to invoke the method with.\\n     * @returns {Function} Returns the new invoker function.\\n     * @example\\n     *\\n     * var objects = [\\n     *   { 'a': { 'b': _.constant(2) } },\\n     *   { 'a': { 'b': _.constant(1) } }\\n     * ];\\n     *\\n     * _.map(objects, _.method('a.b'));\\n     * // => [2, 1]\\n     *\\n     * _.map(objects, _.method(['a', 'b']));\\n     * // => [2, 1]\\n     */\\n    var method = baseRest(function(path, args) {\\n      return function(object) {\\n        return baseInvoke(object, path, args);\\n      };\\n    });\\n\\n    /**\\n     * The opposite of `_.method`; this method creates a function that invokes\\n     * the method at a given path of `object`. Any additional arguments are\\n     * provided to the invoked method.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.7.0\\n     * @category Util\\n     * @param {Object} object The object to query.\\n     * @param {...*} [args] The arguments to invoke the method with.\\n     * @returns {Function} Returns the new invoker function.\\n     * @example\\n     *\\n     * var array = _.times(3, _.constant),\\n     *     object = { 'a': array, 'b': array, 'c': array };\\n     *\\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\\n     * // => [2, 0]\\n     *\\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\\n     * // => [2, 0]\\n     */\\n    var methodOf = baseRest(function(object, args) {\\n      return function(path) {\\n        return baseInvoke(object, path, args);\\n      };\\n    });\\n\\n    /**\\n     * Adds all own enumerable string keyed function properties of a source\\n     * object to the destination object. If `object` is a function, then methods\\n     * are added to its prototype as well.\\n     *\\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\\n     * avoid conflicts caused by modifying the original.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Util\\n     * @param {Function|Object} [object=lodash] The destination object.\\n     * @param {Object} source The object of functions to add.\\n     * @param {Object} [options={}] The options object.\\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\\n     * @returns {Function|Object} Returns `object`.\\n     * @example\\n     *\\n     * function vowels(string) {\\n     *   return _.filter(string, function(v) {\\n     *     return /[aeiou]/i.test(v);\\n     *   });\\n     * }\\n     *\\n     * _.mixin({ 'vowels': vowels });\\n     * _.vowels('fred');\\n     * // => ['e']\\n     *\\n     * _('fred').vowels().value();\\n     * // => ['e']\\n     *\\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\\n     * _('fred').vowels();\\n     * // => ['e']\\n     */\\n    function mixin(object, source, options) {\\n      var props = keys(source),\\n          methodNames = baseFunctions(source, props);\\n\\n      if (options == null &&\\n          !(isObject(source) && (methodNames.length || !props.length))) {\\n        options = source;\\n        source = object;\\n        object = this;\\n        methodNames = baseFunctions(source, keys(source));\\n      }\\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\\n          isFunc = isFunction(object);\\n\\n      arrayEach(methodNames, function(methodName) {\\n        var func = source[methodName];\\n        object[methodName] = func;\\n        if (isFunc) {\\n          object.prototype[methodName] = function() {\\n            var chainAll = this.__chain__;\\n            if (chain || chainAll) {\\n              var result = object(this.__wrapped__),\\n                  actions = result.__actions__ = copyArray(this.__actions__);\\n\\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\\n              result.__chain__ = chainAll;\\n              return result;\\n            }\\n            return func.apply(object, arrayPush([this.value()], arguments));\\n          };\\n        }\\n      });\\n\\n      return object;\\n    }\\n\\n    /**\\n     * Reverts the `_` variable to its previous value and returns a reference to\\n     * the `lodash` function.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Util\\n     * @returns {Function} Returns the `lodash` function.\\n     * @example\\n     *\\n     * var lodash = _.noConflict();\\n     */\\n    function noConflict() {\\n      if (root._ === this) {\\n        root._ = oldDash;\\n      }\\n      return this;\\n    }\\n\\n    /**\\n     * This method returns `undefined`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.3.0\\n     * @category Util\\n     * @example\\n     *\\n     * _.times(2, _.noop);\\n     * // => [undefined, undefined]\\n     */\\n    function noop() {\\n      // No operation performed.\\n    }\\n\\n    /**\\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\\n     * the nth argument from the end is returned.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Util\\n     * @param {number} [n=0] The index of the argument to return.\\n     * @returns {Function} Returns the new pass-thru function.\\n     * @example\\n     *\\n     * var func = _.nthArg(1);\\n     * func('a', 'b', 'c', 'd');\\n     * // => 'b'\\n     *\\n     * var func = _.nthArg(-2);\\n     * func('a', 'b', 'c', 'd');\\n     * // => 'c'\\n     */\\n    function nthArg(n) {\\n      n = toInteger(n);\\n      return baseRest(function(args) {\\n        return baseNth(args, n);\\n      });\\n    }\\n\\n    /**\\n     * Creates a function that invokes `iteratees` with the arguments it receives\\n     * and returns their results.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Util\\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\\n     *  The iteratees to invoke.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var func = _.over([Math.max, Math.min]);\\n     *\\n     * func(1, 2, 3, 4);\\n     * // => [4, 1]\\n     */\\n    var over = createOver(arrayMap);\\n\\n    /**\\n     * Creates a function that checks if **all** of the `predicates` return\\n     * truthy when invoked with the arguments it receives.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Util\\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\\n     *  The predicates to check.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var func = _.overEvery([Boolean, isFinite]);\\n     *\\n     * func('1');\\n     * // => true\\n     *\\n     * func(null);\\n     * // => false\\n     *\\n     * func(NaN);\\n     * // => false\\n     */\\n    var overEvery = createOver(arrayEvery);\\n\\n    /**\\n     * Creates a function that checks if **any** of the `predicates` return\\n     * truthy when invoked with the arguments it receives.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Util\\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\\n     *  The predicates to check.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var func = _.overSome([Boolean, isFinite]);\\n     *\\n     * func('1');\\n     * // => true\\n     *\\n     * func(null);\\n     * // => true\\n     *\\n     * func(NaN);\\n     * // => false\\n     */\\n    var overSome = createOver(arraySome);\\n\\n    /**\\n     * Creates a function that returns the value at `path` of a given object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 2.4.0\\n     * @category Util\\n     * @param {Array|string} path The path of the property to get.\\n     * @returns {Function} Returns the new accessor function.\\n     * @example\\n     *\\n     * var objects = [\\n     *   { 'a': { 'b': 2 } },\\n     *   { 'a': { 'b': 1 } }\\n     * ];\\n     *\\n     * _.map(objects, _.property('a.b'));\\n     * // => [2, 1]\\n     *\\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\\n     * // => [1, 2]\\n     */\\n    function property(path) {\\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\\n    }\\n\\n    /**\\n     * The opposite of `_.property`; this method creates a function that returns\\n     * the value at a given path of `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.0.0\\n     * @category Util\\n     * @param {Object} object The object to query.\\n     * @returns {Function} Returns the new accessor function.\\n     * @example\\n     *\\n     * var array = [0, 1, 2],\\n     *     object = { 'a': array, 'b': array, 'c': array };\\n     *\\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\\n     * // => [2, 0]\\n     *\\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\\n     * // => [2, 0]\\n     */\\n    function propertyOf(object) {\\n      return function(path) {\\n        return object == null ? undefined : baseGet(object, path);\\n      };\\n    }\\n\\n    /**\\n     * Creates an array of numbers (positive and/or negative) progressing from\\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\\n     * it's set to `start` with `start` then set to `0`.\\n     *\\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\\n     * floating-point values which can produce unexpected results.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Util\\n     * @param {number} [start=0] The start of the range.\\n     * @param {number} end The end of the range.\\n     * @param {number} [step=1] The value to increment or decrement by.\\n     * @returns {Array} Returns the range of numbers.\\n     * @see _.inRange, _.rangeRight\\n     * @example\\n     *\\n     * _.range(4);\\n     * // => [0, 1, 2, 3]\\n     *\\n     * _.range(-4);\\n     * // => [0, -1, -2, -3]\\n     *\\n     * _.range(1, 5);\\n     * // => [1, 2, 3, 4]\\n     *\\n     * _.range(0, 20, 5);\\n     * // => [0, 5, 10, 15]\\n     *\\n     * _.range(0, -4, -1);\\n     * // => [0, -1, -2, -3]\\n     *\\n     * _.range(1, 4, 0);\\n     * // => [1, 1, 1]\\n     *\\n     * _.range(0);\\n     * // => []\\n     */\\n    var range = createRange();\\n\\n    /**\\n     * This method is like `_.range` except that it populates values in\\n     * descending order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Util\\n     * @param {number} [start=0] The start of the range.\\n     * @param {number} end The end of the range.\\n     * @param {number} [step=1] The value to increment or decrement by.\\n     * @returns {Array} Returns the range of numbers.\\n     * @see _.inRange, _.range\\n     * @example\\n     *\\n     * _.rangeRight(4);\\n     * // => [3, 2, 1, 0]\\n     *\\n     * _.rangeRight(-4);\\n     * // => [-3, -2, -1, 0]\\n     *\\n     * _.rangeRight(1, 5);\\n     * // => [4, 3, 2, 1]\\n     *\\n     * _.rangeRight(0, 20, 5);\\n     * // => [15, 10, 5, 0]\\n     *\\n     * _.rangeRight(0, -4, -1);\\n     * // => [-3, -2, -1, 0]\\n     *\\n     * _.rangeRight(1, 4, 0);\\n     * // => [1, 1, 1]\\n     *\\n     * _.rangeRight(0);\\n     * // => []\\n     */\\n    var rangeRight = createRange(true);\\n\\n    /**\\n     * This method returns a new empty array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.13.0\\n     * @category Util\\n     * @returns {Array} Returns the new empty array.\\n     * @example\\n     *\\n     * var arrays = _.times(2, _.stubArray);\\n     *\\n     * console.log(arrays);\\n     * // => [[], []]\\n     *\\n     * console.log(arrays[0] === arrays[1]);\\n     * // => false\\n     */\\n    function stubArray() {\\n      return [];\\n    }\\n\\n    /**\\n     * This method returns `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.13.0\\n     * @category Util\\n     * @returns {boolean} Returns `false`.\\n     * @example\\n     *\\n     * _.times(2, _.stubFalse);\\n     * // => [false, false]\\n     */\\n    function stubFalse() {\\n      return false;\\n    }\\n\\n    /**\\n     * This method returns a new empty object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.13.0\\n     * @category Util\\n     * @returns {Object} Returns the new empty object.\\n     * @example\\n     *\\n     * var objects = _.times(2, _.stubObject);\\n     *\\n     * console.log(objects);\\n     * // => [{}, {}]\\n     *\\n     * console.log(objects[0] === objects[1]);\\n     * // => false\\n     */\\n    function stubObject() {\\n      return {};\\n    }\\n\\n    /**\\n     * This method returns an empty string.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.13.0\\n     * @category Util\\n     * @returns {string} Returns the empty string.\\n     * @example\\n     *\\n     * _.times(2, _.stubString);\\n     * // => ['', '']\\n     */\\n    function stubString() {\\n      return '';\\n    }\\n\\n    /**\\n     * This method returns `true`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.13.0\\n     * @category Util\\n     * @returns {boolean} Returns `true`.\\n     * @example\\n     *\\n     * _.times(2, _.stubTrue);\\n     * // => [true, true]\\n     */\\n    function stubTrue() {\\n      return true;\\n    }\\n\\n    /**\\n     * Invokes the iteratee `n` times, returning an array of the results of\\n     * each invocation. The iteratee is invoked with one argument; (index).\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Util\\n     * @param {number} n The number of times to invoke `iteratee`.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @returns {Array} Returns the array of results.\\n     * @example\\n     *\\n     * _.times(3, String);\\n     * // => ['0', '1', '2']\\n     *\\n     *  _.times(4, _.constant(0));\\n     * // => [0, 0, 0, 0]\\n     */\\n    function times(n, iteratee) {\\n      n = toInteger(n);\\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\\n        return [];\\n      }\\n      var index = MAX_ARRAY_LENGTH,\\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\\n\\n      iteratee = getIteratee(iteratee);\\n      n -= MAX_ARRAY_LENGTH;\\n\\n      var result = baseTimes(length, iteratee);\\n      while (++index < n) {\\n        iteratee(index);\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Converts `value` to a property path array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Util\\n     * @param {*} value The value to convert.\\n     * @returns {Array} Returns the new property path array.\\n     * @example\\n     *\\n     * _.toPath('a.b.c');\\n     * // => ['a', 'b', 'c']\\n     *\\n     * _.toPath('a[0].b.c');\\n     * // => ['a', '0', 'b', 'c']\\n     */\\n    function toPath(value) {\\n      if (isArray(value)) {\\n        return arrayMap(value, toKey);\\n      }\\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\\n    }\\n\\n    /**\\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Util\\n     * @param {string} [prefix=''] The value to prefix the ID with.\\n     * @returns {string} Returns the unique ID.\\n     * @example\\n     *\\n     * _.uniqueId('contact_');\\n     * // => 'contact_104'\\n     *\\n     * _.uniqueId();\\n     * // => '105'\\n     */\\n    function uniqueId(prefix) {\\n      var id = ++idCounter;\\n      return toString(prefix) + id;\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Adds two numbers.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.4.0\\n     * @category Math\\n     * @param {number} augend The first number in an addition.\\n     * @param {number} addend The second number in an addition.\\n     * @returns {number} Returns the total.\\n     * @example\\n     *\\n     * _.add(6, 4);\\n     * // => 10\\n     */\\n    var add = createMathOperation(function(augend, addend) {\\n      return augend + addend;\\n    }, 0);\\n\\n    /**\\n     * Computes `number` rounded up to `precision`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.10.0\\n     * @category Math\\n     * @param {number} number The number to round up.\\n     * @param {number} [precision=0] The precision to round up to.\\n     * @returns {number} Returns the rounded up number.\\n     * @example\\n     *\\n     * _.ceil(4.006);\\n     * // => 5\\n     *\\n     * _.ceil(6.004, 2);\\n     * // => 6.01\\n     *\\n     * _.ceil(6040, -2);\\n     * // => 6100\\n     */\\n    var ceil = createRound('ceil');\\n\\n    /**\\n     * Divide two numbers.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.7.0\\n     * @category Math\\n     * @param {number} dividend The first number in a division.\\n     * @param {number} divisor The second number in a division.\\n     * @returns {number} Returns the quotient.\\n     * @example\\n     *\\n     * _.divide(6, 4);\\n     * // => 1.5\\n     */\\n    var divide = createMathOperation(function(dividend, divisor) {\\n      return dividend / divisor;\\n    }, 1);\\n\\n    /**\\n     * Computes `number` rounded down to `precision`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.10.0\\n     * @category Math\\n     * @param {number} number The number to round down.\\n     * @param {number} [precision=0] The precision to round down to.\\n     * @returns {number} Returns the rounded down number.\\n     * @example\\n     *\\n     * _.floor(4.006);\\n     * // => 4\\n     *\\n     * _.floor(0.046, 2);\\n     * // => 0.04\\n     *\\n     * _.floor(4060, -2);\\n     * // => 4000\\n     */\\n    var floor = createRound('floor');\\n\\n    /**\\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\\n     * `undefined` is returned.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Math\\n     * @param {Array} array The array to iterate over.\\n     * @returns {*} Returns the maximum value.\\n     * @example\\n     *\\n     * _.max([4, 2, 8, 6]);\\n     * // => 8\\n     *\\n     * _.max([]);\\n     * // => undefined\\n     */\\n    function max(array) {\\n      return (array && array.length)\\n        ? baseExtremum(array, identity, baseGt)\\n        : undefined;\\n    }\\n\\n    /**\\n     * This method is like `_.max` except that it accepts `iteratee` which is\\n     * invoked for each element in `array` to generate the criterion by which\\n     * the value is ranked. The iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Math\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {*} Returns the maximum value.\\n     * @example\\n     *\\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\\n     *\\n     * _.maxBy(objects, function(o) { return o.n; });\\n     * // => { 'n': 2 }\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.maxBy(objects, 'n');\\n     * // => { 'n': 2 }\\n     */\\n    function maxBy(array, iteratee) {\\n      return (array && array.length)\\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\\n        : undefined;\\n    }\\n\\n    /**\\n     * Computes the mean of the values in `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Math\\n     * @param {Array} array The array to iterate over.\\n     * @returns {number} Returns the mean.\\n     * @example\\n     *\\n     * _.mean([4, 2, 8, 6]);\\n     * // => 5\\n     */\\n    function mean(array) {\\n      return baseMean(array, identity);\\n    }\\n\\n    /**\\n     * This method is like `_.mean` except that it accepts `iteratee` which is\\n     * invoked for each element in `array` to generate the value to be averaged.\\n     * The iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.7.0\\n     * @category Math\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {number} Returns the mean.\\n     * @example\\n     *\\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\\n     *\\n     * _.meanBy(objects, function(o) { return o.n; });\\n     * // => 5\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.meanBy(objects, 'n');\\n     * // => 5\\n     */\\n    function meanBy(array, iteratee) {\\n      return baseMean(array, getIteratee(iteratee, 2));\\n    }\\n\\n    /**\\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\\n     * `undefined` is returned.\\n     *\\n     * @static\\n     * @since 0.1.0\\n     * @memberOf _\\n     * @category Math\\n     * @param {Array} array The array to iterate over.\\n     * @returns {*} Returns the minimum value.\\n     * @example\\n     *\\n     * _.min([4, 2, 8, 6]);\\n     * // => 2\\n     *\\n     * _.min([]);\\n     * // => undefined\\n     */\\n    function min(array) {\\n      return (array && array.length)\\n        ? baseExtremum(array, identity, baseLt)\\n        : undefined;\\n    }\\n\\n    /**\\n     * This method is like `_.min` except that it accepts `iteratee` which is\\n     * invoked for each element in `array` to generate the criterion by which\\n     * the value is ranked. The iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Math\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {*} Returns the minimum value.\\n     * @example\\n     *\\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\\n     *\\n     * _.minBy(objects, function(o) { return o.n; });\\n     * // => { 'n': 1 }\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.minBy(objects, 'n');\\n     * // => { 'n': 1 }\\n     */\\n    function minBy(array, iteratee) {\\n      return (array && array.length)\\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\\n        : undefined;\\n    }\\n\\n    /**\\n     * Multiply two numbers.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.7.0\\n     * @category Math\\n     * @param {number} multiplier The first number in a multiplication.\\n     * @param {number} multiplicand The second number in a multiplication.\\n     * @returns {number} Returns the product.\\n     * @example\\n     *\\n     * _.multiply(6, 4);\\n     * // => 24\\n     */\\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\\n      return multiplier * multiplicand;\\n    }, 1);\\n\\n    /**\\n     * Computes `number` rounded to `precision`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.10.0\\n     * @category Math\\n     * @param {number} number The number to round.\\n     * @param {number} [precision=0] The precision to round to.\\n     * @returns {number} Returns the rounded number.\\n     * @example\\n     *\\n     * _.round(4.006);\\n     * // => 4\\n     *\\n     * _.round(4.006, 2);\\n     * // => 4.01\\n     *\\n     * _.round(4060, -2);\\n     * // => 4100\\n     */\\n    var round = createRound('round');\\n\\n    /**\\n     * Subtract two numbers.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Math\\n     * @param {number} minuend The first number in a subtraction.\\n     * @param {number} subtrahend The second number in a subtraction.\\n     * @returns {number} Returns the difference.\\n     * @example\\n     *\\n     * _.subtract(6, 4);\\n     * // => 2\\n     */\\n    var subtract = createMathOperation(function(minuend, subtrahend) {\\n      return minuend - subtrahend;\\n    }, 0);\\n\\n    /**\\n     * Computes the sum of the values in `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 3.4.0\\n     * @category Math\\n     * @param {Array} array The array to iterate over.\\n     * @returns {number} Returns the sum.\\n     * @example\\n     *\\n     * _.sum([4, 2, 8, 6]);\\n     * // => 20\\n     */\\n    function sum(array) {\\n      return (array && array.length)\\n        ? baseSum(array, identity)\\n        : 0;\\n    }\\n\\n    /**\\n     * This method is like `_.sum` except that it accepts `iteratee` which is\\n     * invoked for each element in `array` to generate the value to be summed.\\n     * The iteratee is invoked with one argument: (value).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @since 4.0.0\\n     * @category Math\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\\n     * @returns {number} Returns the sum.\\n     * @example\\n     *\\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\\n     *\\n     * _.sumBy(objects, function(o) { return o.n; });\\n     * // => 20\\n     *\\n     * // The `_.property` iteratee shorthand.\\n     * _.sumBy(objects, 'n');\\n     * // => 20\\n     */\\n    function sumBy(array, iteratee) {\\n      return (array && array.length)\\n        ? baseSum(array, getIteratee(iteratee, 2))\\n        : 0;\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    // Add methods that return wrapped values in chain sequences.\\n    lodash.after = after;\\n    lodash.ary = ary;\\n    lodash.assign = assign;\\n    lodash.assignIn = assignIn;\\n    lodash.assignInWith = assignInWith;\\n    lodash.assignWith = assignWith;\\n    lodash.at = at;\\n    lodash.before = before;\\n    lodash.bind = bind;\\n    lodash.bindAll = bindAll;\\n    lodash.bindKey = bindKey;\\n    lodash.castArray = castArray;\\n    lodash.chain = chain;\\n    lodash.chunk = chunk;\\n    lodash.compact = compact;\\n    lodash.concat = concat;\\n    lodash.cond = cond;\\n    lodash.conforms = conforms;\\n    lodash.constant = constant;\\n    lodash.countBy = countBy;\\n    lodash.create = create;\\n    lodash.curry = curry;\\n    lodash.curryRight = curryRight;\\n    lodash.debounce = debounce;\\n    lodash.defaults = defaults;\\n    lodash.defaultsDeep = defaultsDeep;\\n    lodash.defer = defer;\\n    lodash.delay = delay;\\n    lodash.difference = difference;\\n    lodash.differenceBy = differenceBy;\\n    lodash.differenceWith = differenceWith;\\n    lodash.drop = drop;\\n    lodash.dropRight = dropRight;\\n    lodash.dropRightWhile = dropRightWhile;\\n    lodash.dropWhile = dropWhile;\\n    lodash.fill = fill;\\n    lodash.filter = filter;\\n    lodash.flatMap = flatMap;\\n    lodash.flatMapDeep = flatMapDeep;\\n    lodash.flatMapDepth = flatMapDepth;\\n    lodash.flatten = flatten;\\n    lodash.flattenDeep = flattenDeep;\\n    lodash.flattenDepth = flattenDepth;\\n    lodash.flip = flip;\\n    lodash.flow = flow;\\n    lodash.flowRight = flowRight;\\n    lodash.fromPairs = fromPairs;\\n    lodash.functions = functions;\\n    lodash.functionsIn = functionsIn;\\n    lodash.groupBy = groupBy;\\n    lodash.initial = initial;\\n    lodash.intersection = intersection;\\n    lodash.intersectionBy = intersectionBy;\\n    lodash.intersectionWith = intersectionWith;\\n    lodash.invert = invert;\\n    lodash.invertBy = invertBy;\\n    lodash.invokeMap = invokeMap;\\n    lodash.iteratee = iteratee;\\n    lodash.keyBy = keyBy;\\n    lodash.keys = keys;\\n    lodash.keysIn = keysIn;\\n    lodash.map = map;\\n    lodash.mapKeys = mapKeys;\\n    lodash.mapValues = mapValues;\\n    lodash.matches = matches;\\n    lodash.matchesProperty = matchesProperty;\\n    lodash.memoize = memoize;\\n    lodash.merge = merge;\\n    lodash.mergeWith = mergeWith;\\n    lodash.method = method;\\n    lodash.methodOf = methodOf;\\n    lodash.mixin = mixin;\\n    lodash.negate = negate;\\n    lodash.nthArg = nthArg;\\n    lodash.omit = omit;\\n    lodash.omitBy = omitBy;\\n    lodash.once = once;\\n    lodash.orderBy = orderBy;\\n    lodash.over = over;\\n    lodash.overArgs = overArgs;\\n    lodash.overEvery = overEvery;\\n    lodash.overSome = overSome;\\n    lodash.partial = partial;\\n    lodash.partialRight = partialRight;\\n    lodash.partition = partition;\\n    lodash.pick = pick;\\n    lodash.pickBy = pickBy;\\n    lodash.property = property;\\n    lodash.propertyOf = propertyOf;\\n    lodash.pull = pull;\\n    lodash.pullAll = pullAll;\\n    lodash.pullAllBy = pullAllBy;\\n    lodash.pullAllWith = pullAllWith;\\n    lodash.pullAt = pullAt;\\n    lodash.range = range;\\n    lodash.rangeRight = rangeRight;\\n    lodash.rearg = rearg;\\n    lodash.reject = reject;\\n    lodash.remove = remove;\\n    lodash.rest = rest;\\n    lodash.reverse = reverse;\\n    lodash.sampleSize = sampleSize;\\n    lodash.set = set;\\n    lodash.setWith = setWith;\\n    lodash.shuffle = shuffle;\\n    lodash.slice = slice;\\n    lodash.sortBy = sortBy;\\n    lodash.sortedUniq = sortedUniq;\\n    lodash.sortedUniqBy = sortedUniqBy;\\n    lodash.split = split;\\n    lodash.spread = spread;\\n    lodash.tail = tail;\\n    lodash.take = take;\\n    lodash.takeRight = takeRight;\\n    lodash.takeRightWhile = takeRightWhile;\\n    lodash.takeWhile = takeWhile;\\n    lodash.tap = tap;\\n    lodash.throttle = throttle;\\n    lodash.thru = thru;\\n    lodash.toArray = toArray;\\n    lodash.toPairs = toPairs;\\n    lodash.toPairsIn = toPairsIn;\\n    lodash.toPath = toPath;\\n    lodash.toPlainObject = toPlainObject;\\n    lodash.transform = transform;\\n    lodash.unary = unary;\\n    lodash.union = union;\\n    lodash.unionBy = unionBy;\\n    lodash.unionWith = unionWith;\\n    lodash.uniq = uniq;\\n    lodash.uniqBy = uniqBy;\\n    lodash.uniqWith = uniqWith;\\n    lodash.unset = unset;\\n    lodash.unzip = unzip;\\n    lodash.unzipWith = unzipWith;\\n    lodash.update = update;\\n    lodash.updateWith = updateWith;\\n    lodash.values = values;\\n    lodash.valuesIn = valuesIn;\\n    lodash.without = without;\\n    lodash.words = words;\\n    lodash.wrap = wrap;\\n    lodash.xor = xor;\\n    lodash.xorBy = xorBy;\\n    lodash.xorWith = xorWith;\\n    lodash.zip = zip;\\n    lodash.zipObject = zipObject;\\n    lodash.zipObjectDeep = zipObjectDeep;\\n    lodash.zipWith = zipWith;\\n\\n    // Add aliases.\\n    lodash.entries = toPairs;\\n    lodash.entriesIn = toPairsIn;\\n    lodash.extend = assignIn;\\n    lodash.extendWith = assignInWith;\\n\\n    // Add methods to `lodash.prototype`.\\n    mixin(lodash, lodash);\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    // Add methods that return unwrapped values in chain sequences.\\n    lodash.add = add;\\n    lodash.attempt = attempt;\\n    lodash.camelCase = camelCase;\\n    lodash.capitalize = capitalize;\\n    lodash.ceil = ceil;\\n    lodash.clamp = clamp;\\n    lodash.clone = clone;\\n    lodash.cloneDeep = cloneDeep;\\n    lodash.cloneDeepWith = cloneDeepWith;\\n    lodash.cloneWith = cloneWith;\\n    lodash.conformsTo = conformsTo;\\n    lodash.deburr = deburr;\\n    lodash.defaultTo = defaultTo;\\n    lodash.divide = divide;\\n    lodash.endsWith = endsWith;\\n    lodash.eq = eq;\\n    lodash.escape = escape;\\n    lodash.escapeRegExp = escapeRegExp;\\n    lodash.every = every;\\n    lodash.find = find;\\n    lodash.findIndex = findIndex;\\n    lodash.findKey = findKey;\\n    lodash.findLast = findLast;\\n    lodash.findLastIndex = findLastIndex;\\n    lodash.findLastKey = findLastKey;\\n    lodash.floor = floor;\\n    lodash.forEach = forEach;\\n    lodash.forEachRight = forEachRight;\\n    lodash.forIn = forIn;\\n    lodash.forInRight = forInRight;\\n    lodash.forOwn = forOwn;\\n    lodash.forOwnRight = forOwnRight;\\n    lodash.get = get;\\n    lodash.gt = gt;\\n    lodash.gte = gte;\\n    lodash.has = has;\\n    lodash.hasIn = hasIn;\\n    lodash.head = head;\\n    lodash.identity = identity;\\n    lodash.includes = includes;\\n    lodash.indexOf = indexOf;\\n    lodash.inRange = inRange;\\n    lodash.invoke = invoke;\\n    lodash.isArguments = isArguments;\\n    lodash.isArray = isArray;\\n    lodash.isArrayBuffer = isArrayBuffer;\\n    lodash.isArrayLike = isArrayLike;\\n    lodash.isArrayLikeObject = isArrayLikeObject;\\n    lodash.isBoolean = isBoolean;\\n    lodash.isBuffer = isBuffer;\\n    lodash.isDate = isDate;\\n    lodash.isElement = isElement;\\n    lodash.isEmpty = isEmpty;\\n    lodash.isEqual = isEqual;\\n    lodash.isEqualWith = isEqualWith;\\n    lodash.isError = isError;\\n    lodash.isFinite = isFinite;\\n    lodash.isFunction = isFunction;\\n    lodash.isInteger = isInteger;\\n    lodash.isLength = isLength;\\n    lodash.isMap = isMap;\\n    lodash.isMatch = isMatch;\\n    lodash.isMatchWith = isMatchWith;\\n    lodash.isNaN = isNaN;\\n    lodash.isNative = isNative;\\n    lodash.isNil = isNil;\\n    lodash.isNull = isNull;\\n    lodash.isNumber = isNumber;\\n    lodash.isObject = isObject;\\n    lodash.isObjectLike = isObjectLike;\\n    lodash.isPlainObject = isPlainObject;\\n    lodash.isRegExp = isRegExp;\\n    lodash.isSafeInteger = isSafeInteger;\\n    lodash.isSet = isSet;\\n    lodash.isString = isString;\\n    lodash.isSymbol = isSymbol;\\n    lodash.isTypedArray = isTypedArray;\\n    lodash.isUndefined = isUndefined;\\n    lodash.isWeakMap = isWeakMap;\\n    lodash.isWeakSet = isWeakSet;\\n    lodash.join = join;\\n    lodash.kebabCase = kebabCase;\\n    lodash.last = last;\\n    lodash.lastIndexOf = lastIndexOf;\\n    lodash.lowerCase = lowerCase;\\n    lodash.lowerFirst = lowerFirst;\\n    lodash.lt = lt;\\n    lodash.lte = lte;\\n    lodash.max = max;\\n    lodash.maxBy = maxBy;\\n    lodash.mean = mean;\\n    lodash.meanBy = meanBy;\\n    lodash.min = min;\\n    lodash.minBy = minBy;\\n    lodash.stubArray = stubArray;\\n    lodash.stubFalse = stubFalse;\\n    lodash.stubObject = stubObject;\\n    lodash.stubString = stubString;\\n    lodash.stubTrue = stubTrue;\\n    lodash.multiply = multiply;\\n    lodash.nth = nth;\\n    lodash.noConflict = noConflict;\\n    lodash.noop = noop;\\n    lodash.now = now;\\n    lodash.pad = pad;\\n    lodash.padEnd = padEnd;\\n    lodash.padStart = padStart;\\n    lodash.parseInt = parseInt;\\n    lodash.random = random;\\n    lodash.reduce = reduce;\\n    lodash.reduceRight = reduceRight;\\n    lodash.repeat = repeat;\\n    lodash.replace = replace;\\n    lodash.result = result;\\n    lodash.round = round;\\n    lodash.runInContext = runInContext;\\n    lodash.sample = sample;\\n    lodash.size = size;\\n    lodash.snakeCase = snakeCase;\\n    lodash.some = some;\\n    lodash.sortedIndex = sortedIndex;\\n    lodash.sortedIndexBy = sortedIndexBy;\\n    lodash.sortedIndexOf = sortedIndexOf;\\n    lodash.sortedLastIndex = sortedLastIndex;\\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\\n    lodash.startCase = startCase;\\n    lodash.startsWith = startsWith;\\n    lodash.subtract = subtract;\\n    lodash.sum = sum;\\n    lodash.sumBy = sumBy;\\n    lodash.template = template;\\n    lodash.times = times;\\n    lodash.toFinite = toFinite;\\n    lodash.toInteger = toInteger;\\n    lodash.toLength = toLength;\\n    lodash.toLower = toLower;\\n    lodash.toNumber = toNumber;\\n    lodash.toSafeInteger = toSafeInteger;\\n    lodash.toString = toString;\\n    lodash.toUpper = toUpper;\\n    lodash.trim = trim;\\n    lodash.trimEnd = trimEnd;\\n    lodash.trimStart = trimStart;\\n    lodash.truncate = truncate;\\n    lodash.unescape = unescape;\\n    lodash.uniqueId = uniqueId;\\n    lodash.upperCase = upperCase;\\n    lodash.upperFirst = upperFirst;\\n\\n    // Add aliases.\\n    lodash.each = forEach;\\n    lodash.eachRight = forEachRight;\\n    lodash.first = head;\\n\\n    mixin(lodash, (function() {\\n      var source = {};\\n      baseForOwn(lodash, function(func, methodName) {\\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\\n          source[methodName] = func;\\n        }\\n      });\\n      return source;\\n    }()), { 'chain': false });\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * The semantic version number.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @type {string}\\n     */\\n    lodash.VERSION = VERSION;\\n\\n    // Assign default placeholders.\\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\\n      lodash[methodName].placeholder = lodash;\\n    });\\n\\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\\n    arrayEach(['drop', 'take'], function(methodName, index) {\\n      LazyWrapper.prototype[methodName] = function(n) {\\n        var filtered = this.__filtered__;\\n        if (filtered && !index) {\\n          return new LazyWrapper(this);\\n        }\\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\\n\\n        var result = this.clone();\\n        if (filtered) {\\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\\n        } else {\\n          result.__views__.push({\\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\\n          });\\n        }\\n        return result;\\n      };\\n\\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\\n        return this.reverse()[methodName](n).reverse();\\n      };\\n    });\\n\\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\\n      var type = index + 1,\\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\\n\\n      LazyWrapper.prototype[methodName] = function(iteratee) {\\n        var result = this.clone();\\n        result.__iteratees__.push({\\n          'iteratee': getIteratee(iteratee, 3),\\n          'type': type\\n        });\\n        result.__filtered__ = result.__filtered__ || isFilter;\\n        return result;\\n      };\\n    });\\n\\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\\n    arrayEach(['head', 'last'], function(methodName, index) {\\n      var takeName = 'take' + (index ? 'Right' : '');\\n\\n      LazyWrapper.prototype[methodName] = function() {\\n        return this[takeName](1).value()[0];\\n      };\\n    });\\n\\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\\n    arrayEach(['initial', 'tail'], function(methodName, index) {\\n      var dropName = 'drop' + (index ? '' : 'Right');\\n\\n      LazyWrapper.prototype[methodName] = function() {\\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\\n      };\\n    });\\n\\n    LazyWrapper.prototype.compact = function() {\\n      return this.filter(identity);\\n    };\\n\\n    LazyWrapper.prototype.find = function(predicate) {\\n      return this.filter(predicate).head();\\n    };\\n\\n    LazyWrapper.prototype.findLast = function(predicate) {\\n      return this.reverse().find(predicate);\\n    };\\n\\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\\n      if (typeof path == 'function') {\\n        return new LazyWrapper(this);\\n      }\\n      return this.map(function(value) {\\n        return baseInvoke(value, path, args);\\n      });\\n    });\\n\\n    LazyWrapper.prototype.reject = function(predicate) {\\n      return this.filter(negate(getIteratee(predicate)));\\n    };\\n\\n    LazyWrapper.prototype.slice = function(start, end) {\\n      start = toInteger(start);\\n\\n      var result = this;\\n      if (result.__filtered__ && (start > 0 || end < 0)) {\\n        return new LazyWrapper(result);\\n      }\\n      if (start < 0) {\\n        result = result.takeRight(-start);\\n      } else if (start) {\\n        result = result.drop(start);\\n      }\\n      if (end !== undefined) {\\n        end = toInteger(end);\\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\\n      }\\n      return result;\\n    };\\n\\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\\n      return this.reverse().takeWhile(predicate).reverse();\\n    };\\n\\n    LazyWrapper.prototype.toArray = function() {\\n      return this.take(MAX_ARRAY_LENGTH);\\n    };\\n\\n    // Add `LazyWrapper` methods to `lodash.prototype`.\\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\\n          isTaker = /^(?:head|last)$/.test(methodName),\\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\\n          retUnwrapped = isTaker || /^find/.test(methodName);\\n\\n      if (!lodashFunc) {\\n        return;\\n      }\\n      lodash.prototype[methodName] = function() {\\n        var value = this.__wrapped__,\\n            args = isTaker ? [1] : arguments,\\n            isLazy = value instanceof LazyWrapper,\\n            iteratee = args[0],\\n            useLazy = isLazy || isArray(value);\\n\\n        var interceptor = function(value) {\\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\\n          return (isTaker && chainAll) ? result[0] : result;\\n        };\\n\\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\\n          // Avoid lazy use if the iteratee has a \\\"length\\\" value other than `1`.\\n          isLazy = useLazy = false;\\n        }\\n        var chainAll = this.__chain__,\\n            isHybrid = !!this.__actions__.length,\\n            isUnwrapped = retUnwrapped && !chainAll,\\n            onlyLazy = isLazy && !isHybrid;\\n\\n        if (!retUnwrapped && useLazy) {\\n          value = onlyLazy ? value : new LazyWrapper(this);\\n          var result = func.apply(value, args);\\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\\n          return new LodashWrapper(result, chainAll);\\n        }\\n        if (isUnwrapped && onlyLazy) {\\n          return func.apply(this, args);\\n        }\\n        result = this.thru(interceptor);\\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\\n      };\\n    });\\n\\n    // Add `Array` methods to `lodash.prototype`.\\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\\n      var func = arrayProto[methodName],\\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\\n\\n      lodash.prototype[methodName] = function() {\\n        var args = arguments;\\n        if (retUnwrapped && !this.__chain__) {\\n          var value = this.value();\\n          return func.apply(isArray(value) ? value : [], args);\\n        }\\n        return this[chainName](function(value) {\\n          return func.apply(isArray(value) ? value : [], args);\\n        });\\n      };\\n    });\\n\\n    // Map minified method names to their real names.\\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\\n      var lodashFunc = lodash[methodName];\\n      if (lodashFunc) {\\n        var key = (lodashFunc.name + ''),\\n            names = realNames[key] || (realNames[key] = []);\\n\\n        names.push({ 'name': methodName, 'func': lodashFunc });\\n      }\\n    });\\n\\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\\n      'name': 'wrapper',\\n      'func': undefined\\n    }];\\n\\n    // Add methods to `LazyWrapper`.\\n    LazyWrapper.prototype.clone = lazyClone;\\n    LazyWrapper.prototype.reverse = lazyReverse;\\n    LazyWrapper.prototype.value = lazyValue;\\n\\n    // Add chain sequence methods to the `lodash` wrapper.\\n    lodash.prototype.at = wrapperAt;\\n    lodash.prototype.chain = wrapperChain;\\n    lodash.prototype.commit = wrapperCommit;\\n    lodash.prototype.next = wrapperNext;\\n    lodash.prototype.plant = wrapperPlant;\\n    lodash.prototype.reverse = wrapperReverse;\\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\\n\\n    // Add lazy aliases.\\n    lodash.prototype.first = lodash.prototype.head;\\n\\n    if (symIterator) {\\n      lodash.prototype[symIterator] = wrapperToIterator;\\n    }\\n    return lodash;\\n  });\\n\\n  /*--------------------------------------------------------------------------*/\\n\\n  // Export lodash.\\n  var _ = runInContext();\\n\\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\\n  if (true) {\\n    // Expose Lodash on the global object to prevent errors when Lodash is\\n    // loaded by a script tag in the presence of an AMD loader.\\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\\n    // Use `_.noConflict` to remove Lodash from the global object.\\n    root._ = _;\\n\\n    // Define as an anonymous module so, through path mapping, it can be\\n    // referenced as the \\\"underscore\\\" module.\\n    !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {\\n      return _;\\n    }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n  }\\n  // Check for `exports` after `define` in case a build optimizer adds it.\\n  else if (freeModule) {\\n    // Export for Node.js.\\n    (freeModule.exports = _)._ = _;\\n    // Export for CommonJS support.\\n    freeExports._ = _;\\n  }\\n  else {\\n    // Export to the global object.\\n    root._ = _;\\n  }\\n}.call(this));\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(/*! ./../webpack/buildin/module.js */ 33)(module)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/lodash/lodash.js\\n// module id = 32\\n// module chunks = 0 2\\n//# sourceURL=webpack:///./~/lodash/lodash.js?\");\n\n/***/ },\n/* 33 */\n/*!***********************************!*\\\n  !*** (webpack)/buildin/module.js ***!\n  \\***********************************/\n/***/ function(module, exports) {\n\n\teval(\"module.exports = function(module) {\\n\\tif(!module.webpackPolyfill) {\\n\\t\\tmodule.deprecate = function() {};\\n\\t\\tmodule.paths = [];\\n\\t\\t// module.parent = undefined by default\\n\\t\\tmodule.children = [];\\n\\t\\tmodule.webpackPolyfill = 1;\\n\\t}\\n\\treturn module;\\n}\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// (webpack)/buildin/module.js\\n// module id = 33\\n// module chunks = 0 2\\n//# sourceURL=webpack:///(webpack)/buildin/module.js?\");\n\n/***/ },\n/* 34 */\n/*!*************************!*\\\n  !*** external \"jQuery\" ***!\n  \\*************************/\n/***/ function(module, exports) {\n\n\teval(\"module.exports = jQuery;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// external \\\"jQuery\\\"\\n// module id = 34\\n// module chunks = 2\\n//# sourceURL=webpack:///external_%22jQuery%22?\");\n\n/***/ },\n/* 35 */\n/*!*************************************************!*\\\n  !*** ./javascript/fubu-diagnostics-section.jsx ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\\"value\\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _reactRouter = __webpack_require__(/*! react-router */ 36);\\n\\nvar _fubuDiagnosticsView = __webpack_require__(/*! ./fubu-diagnostics-view */ 99);\\n\\nvar _fubuDiagnosticsView2 = _interopRequireDefault(_fubuDiagnosticsView);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\\"Cannot call a class as a function\\\"); } }\\n\\nvar FubuDiagnosticsSection = function () {\\n    function FubuDiagnosticsSection(section) {\\n        _classCallCheck(this, FubuDiagnosticsSection);\\n\\n        this.title = section.title;\\n        this.description = section.description;\\n        this.key = section.key;\\n\\n        this.url = '/' + this.key;\\n        this.views = [];\\n        this.anchor = '#' + this.key;\\n\\n        this.component = section.component || __webpack_require__(/*! ./active-section-view */ 100);\\n    }\\n\\n    _createClass(FubuDiagnosticsSection, [{\\n        key: 'add',\\n        value: function add(data) {\\n            var view = new _fubuDiagnosticsView2.default(data, this);\\n            this.views.push(view);\\n            return this;\\n        }\\n    }, {\\n        key: 'activeViews',\\n        value: function activeViews() {\\n            return this.views.filter(function (v) {\\n                return !v.hasParameters;\\n            });\\n        }\\n    }, {\\n        key: 'toRoutes',\\n        value: function toRoutes(index) {\\n            var routes = this.views.map(function (view) {\\n                return view.route;\\n            });\\n            if (this.component) {\\n                var sectionRoute = _react2.default.createElement(_reactRouter.Route, { key: index, name: this.key, path: this.url, component: this.component });\\n                routes.push(sectionRoute);\\n            }\\n            return routes;\\n        }\\n    }]);\\n\\n    return FubuDiagnosticsSection;\\n}();\\n\\nmodule.exports = FubuDiagnosticsSection;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/fubu-diagnostics-section.jsx\\n// module id = 35\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/fubu-diagnostics-section.jsx?\");\n\n/***/ },\n/* 36 */\n/*!*************************************!*\\\n  !*** ./~/react-router/lib/index.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\nexports.createMemoryHistory = exports.hashHistory = exports.browserHistory = exports.applyRouterMiddleware = exports.formatPattern = exports.useRouterHistory = exports.match = exports.routerShape = exports.locationShape = exports.PropTypes = exports.RoutingContext = exports.RouterContext = exports.createRoutes = exports.useRoutes = exports.RouteContext = exports.Lifecycle = exports.History = exports.Route = exports.Redirect = exports.IndexRoute = exports.IndexRedirect = exports.withRouter = exports.IndexLink = exports.Link = exports.Router = undefined;\\n\\nvar _RouteUtils = __webpack_require__(/*! ./RouteUtils */ 37);\\n\\nObject.defineProperty(exports, 'createRoutes', {\\n  enumerable: true,\\n  get: function get() {\\n    return _RouteUtils.createRoutes;\\n  }\\n});\\n\\nvar _PropTypes2 = __webpack_require__(/*! ./PropTypes */ 38);\\n\\nObject.defineProperty(exports, 'locationShape', {\\n  enumerable: true,\\n  get: function get() {\\n    return _PropTypes2.locationShape;\\n  }\\n});\\nObject.defineProperty(exports, 'routerShape', {\\n  enumerable: true,\\n  get: function get() {\\n    return _PropTypes2.routerShape;\\n  }\\n});\\n\\nvar _PatternUtils = __webpack_require__(/*! ./PatternUtils */ 43);\\n\\nObject.defineProperty(exports, 'formatPattern', {\\n  enumerable: true,\\n  get: function get() {\\n    return _PatternUtils.formatPattern;\\n  }\\n});\\n\\nvar _Router2 = __webpack_require__(/*! ./Router */ 45);\\n\\nvar _Router3 = _interopRequireDefault(_Router2);\\n\\nvar _Link2 = __webpack_require__(/*! ./Link */ 76);\\n\\nvar _Link3 = _interopRequireDefault(_Link2);\\n\\nvar _IndexLink2 = __webpack_require__(/*! ./IndexLink */ 77);\\n\\nvar _IndexLink3 = _interopRequireDefault(_IndexLink2);\\n\\nvar _withRouter2 = __webpack_require__(/*! ./withRouter */ 78);\\n\\nvar _withRouter3 = _interopRequireDefault(_withRouter2);\\n\\nvar _IndexRedirect2 = __webpack_require__(/*! ./IndexRedirect */ 80);\\n\\nvar _IndexRedirect3 = _interopRequireDefault(_IndexRedirect2);\\n\\nvar _IndexRoute2 = __webpack_require__(/*! ./IndexRoute */ 82);\\n\\nvar _IndexRoute3 = _interopRequireDefault(_IndexRoute2);\\n\\nvar _Redirect2 = __webpack_require__(/*! ./Redirect */ 81);\\n\\nvar _Redirect3 = _interopRequireDefault(_Redirect2);\\n\\nvar _Route2 = __webpack_require__(/*! ./Route */ 83);\\n\\nvar _Route3 = _interopRequireDefault(_Route2);\\n\\nvar _History2 = __webpack_require__(/*! ./History */ 84);\\n\\nvar _History3 = _interopRequireDefault(_History2);\\n\\nvar _Lifecycle2 = __webpack_require__(/*! ./Lifecycle */ 85);\\n\\nvar _Lifecycle3 = _interopRequireDefault(_Lifecycle2);\\n\\nvar _RouteContext2 = __webpack_require__(/*! ./RouteContext */ 86);\\n\\nvar _RouteContext3 = _interopRequireDefault(_RouteContext2);\\n\\nvar _useRoutes2 = __webpack_require__(/*! ./useRoutes */ 87);\\n\\nvar _useRoutes3 = _interopRequireDefault(_useRoutes2);\\n\\nvar _RouterContext2 = __webpack_require__(/*! ./RouterContext */ 73);\\n\\nvar _RouterContext3 = _interopRequireDefault(_RouterContext2);\\n\\nvar _RoutingContext2 = __webpack_require__(/*! ./RoutingContext */ 88);\\n\\nvar _RoutingContext3 = _interopRequireDefault(_RoutingContext2);\\n\\nvar _PropTypes3 = _interopRequireDefault(_PropTypes2);\\n\\nvar _match2 = __webpack_require__(/*! ./match */ 89);\\n\\nvar _match3 = _interopRequireDefault(_match2);\\n\\nvar _useRouterHistory2 = __webpack_require__(/*! ./useRouterHistory */ 93);\\n\\nvar _useRouterHistory3 = _interopRequireDefault(_useRouterHistory2);\\n\\nvar _applyRouterMiddleware2 = __webpack_require__(/*! ./applyRouterMiddleware */ 94);\\n\\nvar _applyRouterMiddleware3 = _interopRequireDefault(_applyRouterMiddleware2);\\n\\nvar _browserHistory2 = __webpack_require__(/*! ./browserHistory */ 95);\\n\\nvar _browserHistory3 = _interopRequireDefault(_browserHistory2);\\n\\nvar _hashHistory2 = __webpack_require__(/*! ./hashHistory */ 98);\\n\\nvar _hashHistory3 = _interopRequireDefault(_hashHistory2);\\n\\nvar _createMemoryHistory2 = __webpack_require__(/*! ./createMemoryHistory */ 90);\\n\\nvar _createMemoryHistory3 = _interopRequireDefault(_createMemoryHistory2);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nexports.Router = _Router3.default; /* components */\\n\\nexports.Link = _Link3.default;\\nexports.IndexLink = _IndexLink3.default;\\nexports.withRouter = _withRouter3.default;\\n\\n/* components (configuration) */\\n\\nexports.IndexRedirect = _IndexRedirect3.default;\\nexports.IndexRoute = _IndexRoute3.default;\\nexports.Redirect = _Redirect3.default;\\nexports.Route = _Route3.default;\\n\\n/* mixins */\\n\\nexports.History = _History3.default;\\nexports.Lifecycle = _Lifecycle3.default;\\nexports.RouteContext = _RouteContext3.default;\\n\\n/* utils */\\n\\nexports.useRoutes = _useRoutes3.default;\\nexports.RouterContext = _RouterContext3.default;\\nexports.RoutingContext = _RoutingContext3.default;\\nexports.PropTypes = _PropTypes3.default;\\nexports.match = _match3.default;\\nexports.useRouterHistory = _useRouterHistory3.default;\\nexports.applyRouterMiddleware = _applyRouterMiddleware3.default;\\n\\n/* histories */\\n\\nexports.browserHistory = _browserHistory3.default;\\nexports.hashHistory = _hashHistory3.default;\\nexports.createMemoryHistory = _createMemoryHistory3.default;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/index.js\\n// module id = 36\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/index.js?\");\n\n/***/ },\n/* 37 */\n/*!******************************************!*\\\n  !*** ./~/react-router/lib/RouteUtils.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nexports.isReactChildren = isReactChildren;\\nexports.createRouteFromReactElement = createRouteFromReactElement;\\nexports.createRoutesFromReactChildren = createRoutesFromReactChildren;\\nexports.createRoutes = createRoutes;\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction isValidChild(object) {\\n  return object == null || _react2.default.isValidElement(object);\\n}\\n\\nfunction isReactChildren(object) {\\n  return isValidChild(object) || Array.isArray(object) && object.every(isValidChild);\\n}\\n\\nfunction createRoute(defaultProps, props) {\\n  return _extends({}, defaultProps, props);\\n}\\n\\nfunction createRouteFromReactElement(element) {\\n  var type = element.type;\\n  var route = createRoute(type.defaultProps, element.props);\\n\\n  if (route.children) {\\n    var childRoutes = createRoutesFromReactChildren(route.children, route);\\n\\n    if (childRoutes.length) route.childRoutes = childRoutes;\\n\\n    delete route.children;\\n  }\\n\\n  return route;\\n}\\n\\n/**\\n * Creates and returns a routes object from the given ReactChildren. JSX\\n * provides a convenient way to visualize how routes in the hierarchy are\\n * nested.\\n *\\n *   import { Route, createRoutesFromReactChildren } from 'react-router'\\n *\\n *   const routes = createRoutesFromReactChildren(\\n *     <Route component={App}>\\n *       <Route path=\\\"home\\\" component={Dashboard}/>\\n *       <Route path=\\\"news\\\" component={NewsFeed}/>\\n *     </Route>\\n *   )\\n *\\n * Note: This method is automatically used when you provide <Route> children\\n * to a <Router> component.\\n */\\nfunction createRoutesFromReactChildren(children, parentRoute) {\\n  var routes = [];\\n\\n  _react2.default.Children.forEach(children, function (element) {\\n    if (_react2.default.isValidElement(element)) {\\n      // Component classes may have a static create* method.\\n      if (element.type.createRouteFromReactElement) {\\n        var route = element.type.createRouteFromReactElement(element, parentRoute);\\n\\n        if (route) routes.push(route);\\n      } else {\\n        routes.push(createRouteFromReactElement(element));\\n      }\\n    }\\n  });\\n\\n  return routes;\\n}\\n\\n/**\\n * Creates and returns an array of routes from the given object which\\n * may be a JSX route, a plain object route, or an array of either.\\n */\\nfunction createRoutes(routes) {\\n  if (isReactChildren(routes)) {\\n    routes = createRoutesFromReactChildren(routes);\\n  } else if (routes && !Array.isArray(routes)) {\\n    routes = [routes];\\n  }\\n\\n  return routes;\\n}\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/RouteUtils.js\\n// module id = 37\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/RouteUtils.js?\");\n\n/***/ },\n/* 38 */\n/*!*****************************************!*\\\n  !*** ./~/react-router/lib/PropTypes.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\nexports.router = exports.routes = exports.route = exports.components = exports.component = exports.location = exports.history = exports.falsy = exports.locationShape = exports.routerShape = undefined;\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _deprecateObjectProperties = __webpack_require__(/*! ./deprecateObjectProperties */ 39);\\n\\nvar _deprecateObjectProperties2 = _interopRequireDefault(_deprecateObjectProperties);\\n\\nvar _InternalPropTypes = __webpack_require__(/*! ./InternalPropTypes */ 42);\\n\\nvar InternalPropTypes = _interopRequireWildcard(_InternalPropTypes);\\n\\nvar _routerWarning = __webpack_require__(/*! ./routerWarning */ 40);\\n\\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\\n\\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar func = _react.PropTypes.func;\\nvar object = _react.PropTypes.object;\\nvar shape = _react.PropTypes.shape;\\nvar string = _react.PropTypes.string;\\nvar routerShape = exports.routerShape = shape({\\n  push: func.isRequired,\\n  replace: func.isRequired,\\n  go: func.isRequired,\\n  goBack: func.isRequired,\\n  goForward: func.isRequired,\\n  setRouteLeaveHook: func.isRequired,\\n  isActive: func.isRequired\\n});\\n\\nvar locationShape = exports.locationShape = shape({\\n  pathname: string.isRequired,\\n  search: string.isRequired,\\n  state: object,\\n  action: string.isRequired,\\n  key: string\\n});\\n\\n// Deprecated stuff below:\\n\\nvar falsy = exports.falsy = InternalPropTypes.falsy;\\nvar history = exports.history = InternalPropTypes.history;\\nvar location = exports.location = locationShape;\\nvar component = exports.component = InternalPropTypes.component;\\nvar components = exports.components = InternalPropTypes.components;\\nvar route = exports.route = InternalPropTypes.route;\\nvar routes = exports.routes = InternalPropTypes.routes;\\nvar router = exports.router = routerShape;\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  (function () {\\n    var deprecatePropType = function deprecatePropType(propType, message) {\\n      return function () {\\n        process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, message) : void 0;\\n        return propType.apply(undefined, arguments);\\n      };\\n    };\\n\\n    var deprecateInternalPropType = function deprecateInternalPropType(propType) {\\n      return deprecatePropType(propType, 'This prop type is not intended for external use, and was previously exported by mistake. These internal prop types are deprecated for external use, and will be removed in a later version.');\\n    };\\n\\n    var deprecateRenamedPropType = function deprecateRenamedPropType(propType, name) {\\n      return deprecatePropType(propType, 'The `' + name + '` prop type is now exported as `' + name + 'Shape` to avoid name conflicts. This export is deprecated and will be removed in a later version.');\\n    };\\n\\n    exports.falsy = falsy = deprecateInternalPropType(falsy);\\n    exports.history = history = deprecateInternalPropType(history);\\n    exports.component = component = deprecateInternalPropType(component);\\n    exports.components = components = deprecateInternalPropType(components);\\n    exports.route = route = deprecateInternalPropType(route);\\n    exports.routes = routes = deprecateInternalPropType(routes);\\n\\n    exports.location = location = deprecateRenamedPropType(location, 'location');\\n    exports.router = router = deprecateRenamedPropType(router, 'router');\\n  })();\\n}\\n\\nvar defaultExport = {\\n  falsy: falsy,\\n  history: history,\\n  location: location,\\n  component: component,\\n  components: components,\\n  route: route,\\n  // For some reason, routes was never here.\\n  router: router\\n};\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  defaultExport = (0, _deprecateObjectProperties2.default)(defaultExport, 'The default export from `react-router/lib/PropTypes` is deprecated. Please use the named exports instead.');\\n}\\n\\nexports.default = defaultExport;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/PropTypes.js\\n// module id = 38\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/PropTypes.js?\");\n\n/***/ },\n/* 39 */\n/*!*********************************************************!*\\\n  !*** ./~/react-router/lib/deprecateObjectProperties.js ***!\n  \\*********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\nexports.canUseMembrane = undefined;\\n\\nvar _routerWarning = __webpack_require__(/*! ./routerWarning */ 40);\\n\\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar canUseMembrane = exports.canUseMembrane = false;\\n\\n// No-op by default.\\nvar deprecateObjectProperties = function deprecateObjectProperties(object) {\\n  return object;\\n};\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  try {\\n    if (Object.defineProperty({}, 'x', {\\n      get: function get() {\\n        return true;\\n      }\\n    }).x) {\\n      exports.canUseMembrane = canUseMembrane = true;\\n    }\\n    /* eslint-disable no-empty */\\n  } catch (e) {}\\n  /* eslint-enable no-empty */\\n\\n  if (canUseMembrane) {\\n    deprecateObjectProperties = function deprecateObjectProperties(object, message) {\\n      // Wrap the deprecated object in a membrane to warn on property access.\\n      var membrane = {};\\n\\n      var _loop = function _loop(prop) {\\n        if (!Object.prototype.hasOwnProperty.call(object, prop)) {\\n          return 'continue';\\n        }\\n\\n        if (typeof object[prop] === 'function') {\\n          // Can't use fat arrow here because of use of arguments below.\\n          membrane[prop] = function () {\\n            process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, message) : void 0;\\n            return object[prop].apply(object, arguments);\\n          };\\n          return 'continue';\\n        }\\n\\n        // These properties are non-enumerable to prevent React dev tools from\\n        // seeing them and causing spurious warnings when accessing them. In\\n        // principle this could be done with a proxy, but support for the\\n        // ownKeys trap on proxies is not universal, even among browsers that\\n        // otherwise support proxies.\\n        Object.defineProperty(membrane, prop, {\\n          get: function get() {\\n            process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, message) : void 0;\\n            return object[prop];\\n          }\\n        });\\n      };\\n\\n      for (var prop in object) {\\n        var _ret = _loop(prop);\\n\\n        if (_ret === 'continue') continue;\\n      }\\n\\n      return membrane;\\n    };\\n  }\\n}\\n\\nexports.default = deprecateObjectProperties;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/deprecateObjectProperties.js\\n// module id = 39\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/deprecateObjectProperties.js?\");\n\n/***/ },\n/* 40 */\n/*!*********************************************!*\\\n  !*** ./~/react-router/lib/routerWarning.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\nexports.default = routerWarning;\\nexports._resetWarned = _resetWarned;\\n\\nvar _warning = __webpack_require__(/*! warning */ 41);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar warned = {};\\n\\nfunction routerWarning(falseToWarn, message) {\\n  // Only issue deprecation warnings once.\\n  if (message.indexOf('deprecated') !== -1) {\\n    if (warned[message]) {\\n      return;\\n    }\\n\\n    warned[message] = true;\\n  }\\n\\n  message = '[react-router] ' + message;\\n\\n  for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\\n    args[_key - 2] = arguments[_key];\\n  }\\n\\n  _warning2.default.apply(undefined, [falseToWarn, message].concat(args));\\n}\\n\\nfunction _resetWarned() {\\n  warned = {};\\n}\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/routerWarning.js\\n// module id = 40\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/routerWarning.js?\");\n\n/***/ },\n/* 41 */\n/*!******************************!*\\\n  !*** ./~/warning/browser.js ***!\n  \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014-2015, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n */\\n\\n'use strict';\\n\\n/**\\n * Similar to invariant but only logs a warning if the condition is not met.\\n * This can be used to log issues in development environments in critical\\n * paths. Removing the logging code for production environments will keep the\\n * same logic and follow the same code paths.\\n */\\n\\nvar warning = function() {};\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  warning = function(condition, format, args) {\\n    var len = arguments.length;\\n    args = new Array(len > 2 ? len - 2 : 0);\\n    for (var key = 2; key < len; key++) {\\n      args[key - 2] = arguments[key];\\n    }\\n    if (format === undefined) {\\n      throw new Error(\\n        '`warning(condition, format, ...args)` requires a warning ' +\\n        'message argument'\\n      );\\n    }\\n\\n    if (format.length < 10 || (/^[s\\\\W]*$/).test(format)) {\\n      throw new Error(\\n        'The warning format should be able to uniquely identify this ' +\\n        'warning. Please, use a more descriptive format than: ' + format\\n      );\\n    }\\n\\n    if (!condition) {\\n      var argIndex = 0;\\n      var message = 'Warning: ' +\\n        format.replace(/%s/g, function() {\\n          return args[argIndex++];\\n        });\\n      if (typeof console !== 'undefined') {\\n        console.error(message);\\n      }\\n      try {\\n        // This error was thrown as a convenience so that you can use this stack\\n        // to find the callsite that caused this warning to fire.\\n        throw new Error(message);\\n      } catch(x) {}\\n    }\\n  };\\n}\\n\\nmodule.exports = warning;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/warning/browser.js\\n// module id = 41\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/warning/browser.js?\");\n\n/***/ },\n/* 42 */\n/*!*************************************************!*\\\n  !*** ./~/react-router/lib/InternalPropTypes.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\nexports.routes = exports.route = exports.components = exports.component = exports.history = undefined;\\nexports.falsy = falsy;\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar func = _react.PropTypes.func;\\nvar object = _react.PropTypes.object;\\nvar arrayOf = _react.PropTypes.arrayOf;\\nvar oneOfType = _react.PropTypes.oneOfType;\\nvar element = _react.PropTypes.element;\\nvar shape = _react.PropTypes.shape;\\nvar string = _react.PropTypes.string;\\nfunction falsy(props, propName, componentName) {\\n  if (props[propName]) return new Error('<' + componentName + '> should not have a \\\"' + propName + '\\\" prop');\\n}\\n\\nvar history = exports.history = shape({\\n  listen: func.isRequired,\\n  push: func.isRequired,\\n  replace: func.isRequired,\\n  go: func.isRequired,\\n  goBack: func.isRequired,\\n  goForward: func.isRequired\\n});\\n\\nvar component = exports.component = oneOfType([func, string]);\\nvar components = exports.components = oneOfType([component, object]);\\nvar route = exports.route = oneOfType([object, element]);\\nvar routes = exports.routes = oneOfType([route, arrayOf(route)]);\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/InternalPropTypes.js\\n// module id = 42\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/InternalPropTypes.js?\");\n\n/***/ },\n/* 43 */\n/*!********************************************!*\\\n  !*** ./~/react-router/lib/PatternUtils.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\nexports.compilePattern = compilePattern;\\nexports.matchPattern = matchPattern;\\nexports.getParamNames = getParamNames;\\nexports.getParams = getParams;\\nexports.formatPattern = formatPattern;\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction escapeRegExp(string) {\\n  return string.replace(/[.*+?^${}()|[\\\\]\\\\\\\\]/g, '\\\\\\\\$&');\\n}\\n\\nfunction _compilePattern(pattern) {\\n  var regexpSource = '';\\n  var paramNames = [];\\n  var tokens = [];\\n\\n  var match = void 0,\\n      lastIndex = 0,\\n      matcher = /:([a-zA-Z_$][a-zA-Z0-9_$]*)|\\\\*\\\\*|\\\\*|\\\\(|\\\\)/g;\\n  while (match = matcher.exec(pattern)) {\\n    if (match.index !== lastIndex) {\\n      tokens.push(pattern.slice(lastIndex, match.index));\\n      regexpSource += escapeRegExp(pattern.slice(lastIndex, match.index));\\n    }\\n\\n    if (match[1]) {\\n      regexpSource += '([^/]+)';\\n      paramNames.push(match[1]);\\n    } else if (match[0] === '**') {\\n      regexpSource += '(.*)';\\n      paramNames.push('splat');\\n    } else if (match[0] === '*') {\\n      regexpSource += '(.*?)';\\n      paramNames.push('splat');\\n    } else if (match[0] === '(') {\\n      regexpSource += '(?:';\\n    } else if (match[0] === ')') {\\n      regexpSource += ')?';\\n    }\\n\\n    tokens.push(match[0]);\\n\\n    lastIndex = matcher.lastIndex;\\n  }\\n\\n  if (lastIndex !== pattern.length) {\\n    tokens.push(pattern.slice(lastIndex, pattern.length));\\n    regexpSource += escapeRegExp(pattern.slice(lastIndex, pattern.length));\\n  }\\n\\n  return {\\n    pattern: pattern,\\n    regexpSource: regexpSource,\\n    paramNames: paramNames,\\n    tokens: tokens\\n  };\\n}\\n\\nvar CompiledPatternsCache = Object.create(null);\\n\\nfunction compilePattern(pattern) {\\n  if (!CompiledPatternsCache[pattern]) CompiledPatternsCache[pattern] = _compilePattern(pattern);\\n\\n  return CompiledPatternsCache[pattern];\\n}\\n\\n/**\\n * Attempts to match a pattern on the given pathname. Patterns may use\\n * the following special characters:\\n *\\n * - :paramName     Matches a URL segment up to the next /, ?, or #. The\\n *                  captured string is considered a \\\"param\\\"\\n * - ()             Wraps a segment of the URL that is optional\\n * - *              Consumes (non-greedy) all characters up to the next\\n *                  character in the pattern, or to the end of the URL if\\n *                  there is none\\n * - **             Consumes (greedy) all characters up to the next character\\n *                  in the pattern, or to the end of the URL if there is none\\n *\\n *  The function calls callback(error, matched) when finished.\\n * The return value is an object with the following properties:\\n *\\n * - remainingPathname\\n * - paramNames\\n * - paramValues\\n */\\nfunction matchPattern(pattern, pathname) {\\n  // Ensure pattern starts with leading slash for consistency with pathname.\\n  if (pattern.charAt(0) !== '/') {\\n    pattern = '/' + pattern;\\n  }\\n\\n  var _compilePattern2 = compilePattern(pattern);\\n\\n  var regexpSource = _compilePattern2.regexpSource;\\n  var paramNames = _compilePattern2.paramNames;\\n  var tokens = _compilePattern2.tokens;\\n\\n\\n  if (pattern.charAt(pattern.length - 1) !== '/') {\\n    regexpSource += '/?'; // Allow optional path separator at end.\\n  }\\n\\n  // Special-case patterns like '*' for catch-all routes.\\n  if (tokens[tokens.length - 1] === '*') {\\n    regexpSource += '$';\\n  }\\n\\n  var match = pathname.match(new RegExp('^' + regexpSource, 'i'));\\n  if (match == null) {\\n    return null;\\n  }\\n\\n  var matchedPath = match[0];\\n  var remainingPathname = pathname.substr(matchedPath.length);\\n\\n  if (remainingPathname) {\\n    // Require that the match ends at a path separator, if we didn't match\\n    // the full path, so any remaining pathname is a new path segment.\\n    if (matchedPath.charAt(matchedPath.length - 1) !== '/') {\\n      return null;\\n    }\\n\\n    // If there is a remaining pathname, treat the path separator as part of\\n    // the remaining pathname for properly continuing the match.\\n    remainingPathname = '/' + remainingPathname;\\n  }\\n\\n  return {\\n    remainingPathname: remainingPathname,\\n    paramNames: paramNames,\\n    paramValues: match.slice(1).map(function (v) {\\n      return v && decodeURIComponent(v);\\n    })\\n  };\\n}\\n\\nfunction getParamNames(pattern) {\\n  return compilePattern(pattern).paramNames;\\n}\\n\\nfunction getParams(pattern, pathname) {\\n  var match = matchPattern(pattern, pathname);\\n  if (!match) {\\n    return null;\\n  }\\n\\n  var paramNames = match.paramNames;\\n  var paramValues = match.paramValues;\\n\\n  var params = {};\\n\\n  paramNames.forEach(function (paramName, index) {\\n    params[paramName] = paramValues[index];\\n  });\\n\\n  return params;\\n}\\n\\n/**\\n * Returns a version of the given pattern with params interpolated. Throws\\n * if there is a dynamic segment of the pattern for which there is no param.\\n */\\nfunction formatPattern(pattern, params) {\\n  params = params || {};\\n\\n  var _compilePattern3 = compilePattern(pattern);\\n\\n  var tokens = _compilePattern3.tokens;\\n\\n  var parenCount = 0,\\n      pathname = '',\\n      splatIndex = 0;\\n\\n  var token = void 0,\\n      paramName = void 0,\\n      paramValue = void 0;\\n  for (var i = 0, len = tokens.length; i < len; ++i) {\\n    token = tokens[i];\\n\\n    if (token === '*' || token === '**') {\\n      paramValue = Array.isArray(params.splat) ? params.splat[splatIndex++] : params.splat;\\n\\n      !(paramValue != null || parenCount > 0) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Missing splat #%s for path \\\"%s\\\"', splatIndex, pattern) : (0, _invariant2.default)(false) : void 0;\\n\\n      if (paramValue != null) pathname += encodeURI(paramValue);\\n    } else if (token === '(') {\\n      parenCount += 1;\\n    } else if (token === ')') {\\n      parenCount -= 1;\\n    } else if (token.charAt(0) === ':') {\\n      paramName = token.substring(1);\\n      paramValue = params[paramName];\\n\\n      !(paramValue != null || parenCount > 0) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'Missing \\\"%s\\\" parameter for path \\\"%s\\\"', paramName, pattern) : (0, _invariant2.default)(false) : void 0;\\n\\n      if (paramValue != null) pathname += encodeURIComponent(paramValue);\\n    } else {\\n      pathname += token;\\n    }\\n  }\\n\\n  return pathname.replace(/\\\\/+/g, '/');\\n}\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/PatternUtils.js\\n// module id = 43\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/PatternUtils.js?\");\n\n/***/ },\n/* 44 */\n/*!********************************!*\\\n  !*** ./~/invariant/browser.js ***!\n  \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2015, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n */\\n\\n'use strict';\\n\\n/**\\n * Use invariant() to assert state which your program assumes to be true.\\n *\\n * Provide sprintf-style format (only %s is supported) and arguments\\n * to provide information about what broke and what you were\\n * expecting.\\n *\\n * The invariant message will be stripped in production, but the invariant\\n * will remain to ensure logic does not differ in production.\\n */\\n\\nvar invariant = function(condition, format, a, b, c, d, e, f) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    if (format === undefined) {\\n      throw new Error('invariant requires an error message argument');\\n    }\\n  }\\n\\n  if (!condition) {\\n    var error;\\n    if (format === undefined) {\\n      error = new Error(\\n        'Minified exception occurred; use the non-minified dev environment ' +\\n        'for the full error message and additional helpful warnings.'\\n      );\\n    } else {\\n      var args = [a, b, c, d, e, f];\\n      var argIndex = 0;\\n      error = new Error(\\n        format.replace(/%s/g, function() { return args[argIndex++]; })\\n      );\\n      error.name = 'Invariant Violation';\\n    }\\n\\n    error.framesToPop = 1; // we don't care about invariant's own frame\\n    throw error;\\n  }\\n};\\n\\nmodule.exports = invariant;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/invariant/browser.js\\n// module id = 44\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/invariant/browser.js?\");\n\n/***/ },\n/* 45 */\n/*!**************************************!*\\\n  !*** ./~/react-router/lib/Router.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nvar _createHashHistory = __webpack_require__(/*! history/lib/createHashHistory */ 46);\\n\\nvar _createHashHistory2 = _interopRequireDefault(_createHashHistory);\\n\\nvar _useQueries = __webpack_require__(/*! history/lib/useQueries */ 62);\\n\\nvar _useQueries2 = _interopRequireDefault(_useQueries);\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _createTransitionManager = __webpack_require__(/*! ./createTransitionManager */ 65);\\n\\nvar _createTransitionManager2 = _interopRequireDefault(_createTransitionManager);\\n\\nvar _InternalPropTypes = __webpack_require__(/*! ./InternalPropTypes */ 42);\\n\\nvar _RouterContext = __webpack_require__(/*! ./RouterContext */ 73);\\n\\nvar _RouterContext2 = _interopRequireDefault(_RouterContext);\\n\\nvar _RouteUtils = __webpack_require__(/*! ./RouteUtils */ 37);\\n\\nvar _RouterUtils = __webpack_require__(/*! ./RouterUtils */ 75);\\n\\nvar _routerWarning = __webpack_require__(/*! ./routerWarning */ 40);\\n\\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\\n\\nfunction isDeprecatedHistory(history) {\\n  return !history || !history.__v2_compatible__;\\n}\\n\\n/* istanbul ignore next: sanity check */\\nfunction isUnsupportedHistory(history) {\\n  // v3 histories expose getCurrentLocation, but aren't currently supported.\\n  return history && history.getCurrentLocation;\\n}\\n\\nvar _React$PropTypes = _react2.default.PropTypes;\\nvar func = _React$PropTypes.func;\\nvar object = _React$PropTypes.object;\\n\\n/**\\n * A <Router> is a high-level API for automatically setting up\\n * a router that renders a <RouterContext> with all the props\\n * it needs each time the URL changes.\\n */\\n\\nvar Router = _react2.default.createClass({\\n  displayName: 'Router',\\n\\n\\n  propTypes: {\\n    history: object,\\n    children: _InternalPropTypes.routes,\\n    routes: _InternalPropTypes.routes, // alias for children\\n    render: func,\\n    createElement: func,\\n    onError: func,\\n    onUpdate: func,\\n\\n    // Deprecated:\\n    parseQueryString: func,\\n    stringifyQuery: func,\\n\\n    // PRIVATE: For client-side rehydration of server match.\\n    matchContext: object\\n  },\\n\\n  getDefaultProps: function getDefaultProps() {\\n    return {\\n      render: function render(props) {\\n        return _react2.default.createElement(_RouterContext2.default, props);\\n      }\\n    };\\n  },\\n  getInitialState: function getInitialState() {\\n    return {\\n      location: null,\\n      routes: null,\\n      params: null,\\n      components: null\\n    };\\n  },\\n  handleError: function handleError(error) {\\n    if (this.props.onError) {\\n      this.props.onError.call(this, error);\\n    } else {\\n      // Throw errors by default so we don't silently swallow them!\\n      throw error; // This error probably occurred in getChildRoutes or getComponents.\\n    }\\n  },\\n  componentWillMount: function componentWillMount() {\\n    var _this = this;\\n\\n    var _props = this.props;\\n    var parseQueryString = _props.parseQueryString;\\n    var stringifyQuery = _props.stringifyQuery;\\n\\n    process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(!(parseQueryString || stringifyQuery), '`parseQueryString` and `stringifyQuery` are deprecated. Please create a custom history. http://tiny.cc/router-customquerystring') : void 0;\\n\\n    var _createRouterObjects = this.createRouterObjects();\\n\\n    var history = _createRouterObjects.history;\\n    var transitionManager = _createRouterObjects.transitionManager;\\n    var router = _createRouterObjects.router;\\n\\n\\n    this._unlisten = transitionManager.listen(function (error, state) {\\n      if (error) {\\n        _this.handleError(error);\\n      } else {\\n        _this.setState(state, _this.props.onUpdate);\\n      }\\n    });\\n\\n    this.history = history;\\n    this.router = router;\\n  },\\n  createRouterObjects: function createRouterObjects() {\\n    var matchContext = this.props.matchContext;\\n\\n    if (matchContext) {\\n      return matchContext;\\n    }\\n\\n    var history = this.props.history;\\n    var _props2 = this.props;\\n    var routes = _props2.routes;\\n    var children = _props2.children;\\n\\n\\n    !!isUnsupportedHistory(history) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'You have provided a history object created with history v3.x. ' + 'This version of React Router is not compatible with v3 history ' + 'objects. Please use history v2.x instead.') : (0, _invariant2.default)(false) : void 0;\\n\\n    if (isDeprecatedHistory(history)) {\\n      history = this.wrapDeprecatedHistory(history);\\n    }\\n\\n    var transitionManager = (0, _createTransitionManager2.default)(history, (0, _RouteUtils.createRoutes)(routes || children));\\n    var router = (0, _RouterUtils.createRouterObject)(history, transitionManager);\\n    var routingHistory = (0, _RouterUtils.createRoutingHistory)(history, transitionManager);\\n\\n    return { history: routingHistory, transitionManager: transitionManager, router: router };\\n  },\\n  wrapDeprecatedHistory: function wrapDeprecatedHistory(history) {\\n    var _props3 = this.props;\\n    var parseQueryString = _props3.parseQueryString;\\n    var stringifyQuery = _props3.stringifyQuery;\\n\\n\\n    var createHistory = void 0;\\n    if (history) {\\n      process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'It appears you have provided a deprecated history object to `<Router/>`, please use a history provided by ' + 'React Router with `import { browserHistory } from \\\\'react-router\\\\'` or `import { hashHistory } from \\\\'react-router\\\\'`. ' + 'If you are using a custom history please create it with `useRouterHistory`, see http://tiny.cc/router-usinghistory for details.') : void 0;\\n      createHistory = function createHistory() {\\n        return history;\\n      };\\n    } else {\\n      process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, '`Router` no longer defaults the history prop to hash history. Please use the `hashHistory` singleton instead. http://tiny.cc/router-defaulthistory') : void 0;\\n      createHistory = _createHashHistory2.default;\\n    }\\n\\n    return (0, _useQueries2.default)(createHistory)({ parseQueryString: parseQueryString, stringifyQuery: stringifyQuery });\\n  },\\n\\n\\n  /* istanbul ignore next: sanity check */\\n  componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\\n    process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(nextProps.history === this.props.history, 'You cannot change <Router history>; it will be ignored') : void 0;\\n\\n    process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)((nextProps.routes || nextProps.children) === (this.props.routes || this.props.children), 'You cannot change <Router routes>; it will be ignored') : void 0;\\n  },\\n  componentWillUnmount: function componentWillUnmount() {\\n    if (this._unlisten) this._unlisten();\\n  },\\n  render: function render() {\\n    var _state = this.state;\\n    var location = _state.location;\\n    var routes = _state.routes;\\n    var params = _state.params;\\n    var components = _state.components;\\n    var _props4 = this.props;\\n    var createElement = _props4.createElement;\\n    var render = _props4.render;\\n\\n    var props = _objectWithoutProperties(_props4, ['createElement', 'render']);\\n\\n    if (location == null) return null; // Async match\\n\\n    // Only forward non-Router-specific props to routing context, as those are\\n    // the only ones that might be custom routing context props.\\n    Object.keys(Router.propTypes).forEach(function (propType) {\\n      return delete props[propType];\\n    });\\n\\n    return render(_extends({}, props, {\\n      history: this.history,\\n      router: this.router,\\n      location: location,\\n      routes: routes,\\n      params: params,\\n      components: components,\\n      createElement: createElement\\n    }));\\n  }\\n});\\n\\nexports.default = Router;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/Router.js\\n// module id = 45\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/Router.js?\");\n\n/***/ },\n/* 46 */\n/*!********************************************!*\\\n  !*** ./~/history/lib/createHashHistory.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar _warning = __webpack_require__(/*! warning */ 47);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nvar _Actions = __webpack_require__(/*! ./Actions */ 48);\\n\\nvar _PathUtils = __webpack_require__(/*! ./PathUtils */ 49);\\n\\nvar _ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 50);\\n\\nvar _DOMUtils = __webpack_require__(/*! ./DOMUtils */ 51);\\n\\nvar _DOMStateStorage = __webpack_require__(/*! ./DOMStateStorage */ 52);\\n\\nvar _createDOMHistory = __webpack_require__(/*! ./createDOMHistory */ 53);\\n\\nvar _createDOMHistory2 = _interopRequireDefault(_createDOMHistory);\\n\\nfunction isAbsolutePath(path) {\\n  return typeof path === 'string' && path.charAt(0) === '/';\\n}\\n\\nfunction ensureSlash() {\\n  var path = _DOMUtils.getHashPath();\\n\\n  if (isAbsolutePath(path)) return true;\\n\\n  _DOMUtils.replaceHashPath('/' + path);\\n\\n  return false;\\n}\\n\\nfunction addQueryStringValueToPath(path, key, value) {\\n  return path + (path.indexOf('?') === -1 ? '?' : '&') + (key + '=' + value);\\n}\\n\\nfunction stripQueryStringValueFromPath(path, key) {\\n  return path.replace(new RegExp('[?&]?' + key + '=[a-zA-Z0-9]+'), '');\\n}\\n\\nfunction getQueryStringValueFromPath(path, key) {\\n  var match = path.match(new RegExp('\\\\\\\\?.*?\\\\\\\\b' + key + '=(.+?)\\\\\\\\b'));\\n  return match && match[1];\\n}\\n\\nvar DefaultQueryKey = '_k';\\n\\nfunction createHashHistory() {\\n  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\\n\\n  !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Hash history needs a DOM') : _invariant2['default'](false) : undefined;\\n\\n  var queryKey = options.queryKey;\\n\\n  if (queryKey === undefined || !!queryKey) queryKey = typeof queryKey === 'string' ? queryKey : DefaultQueryKey;\\n\\n  function getCurrentLocation() {\\n    var path = _DOMUtils.getHashPath();\\n\\n    var key = undefined,\\n        state = undefined;\\n    if (queryKey) {\\n      key = getQueryStringValueFromPath(path, queryKey);\\n      path = stripQueryStringValueFromPath(path, queryKey);\\n\\n      if (key) {\\n        state = _DOMStateStorage.readState(key);\\n      } else {\\n        state = null;\\n        key = history.createKey();\\n        _DOMUtils.replaceHashPath(addQueryStringValueToPath(path, queryKey, key));\\n      }\\n    } else {\\n      key = state = null;\\n    }\\n\\n    var location = _PathUtils.parsePath(path);\\n\\n    return history.createLocation(_extends({}, location, { state: state }), undefined, key);\\n  }\\n\\n  function startHashChangeListener(_ref) {\\n    var transitionTo = _ref.transitionTo;\\n\\n    function hashChangeListener() {\\n      if (!ensureSlash()) return; // Always make sure hashes are preceeded with a /.\\n\\n      transitionTo(getCurrentLocation());\\n    }\\n\\n    ensureSlash();\\n    _DOMUtils.addEventListener(window, 'hashchange', hashChangeListener);\\n\\n    return function () {\\n      _DOMUtils.removeEventListener(window, 'hashchange', hashChangeListener);\\n    };\\n  }\\n\\n  function finishTransition(location) {\\n    var basename = location.basename;\\n    var pathname = location.pathname;\\n    var search = location.search;\\n    var state = location.state;\\n    var action = location.action;\\n    var key = location.key;\\n\\n    if (action === _Actions.POP) return; // Nothing to do.\\n\\n    var path = (basename || '') + pathname + search;\\n\\n    if (queryKey) {\\n      path = addQueryStringValueToPath(path, queryKey, key);\\n      _DOMStateStorage.saveState(key, state);\\n    } else {\\n      // Drop key and state.\\n      location.key = location.state = null;\\n    }\\n\\n    var currentHash = _DOMUtils.getHashPath();\\n\\n    if (action === _Actions.PUSH) {\\n      if (currentHash !== path) {\\n        window.location.hash = path;\\n      } else {\\n        process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'You cannot PUSH the same path using hash history') : undefined;\\n      }\\n    } else if (currentHash !== path) {\\n      // REPLACE\\n      _DOMUtils.replaceHashPath(path);\\n    }\\n  }\\n\\n  var history = _createDOMHistory2['default'](_extends({}, options, {\\n    getCurrentLocation: getCurrentLocation,\\n    finishTransition: finishTransition,\\n    saveState: _DOMStateStorage.saveState\\n  }));\\n\\n  var listenerCount = 0,\\n      stopHashChangeListener = undefined;\\n\\n  function listenBefore(listener) {\\n    if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history);\\n\\n    var unlisten = history.listenBefore(listener);\\n\\n    return function () {\\n      unlisten();\\n\\n      if (--listenerCount === 0) stopHashChangeListener();\\n    };\\n  }\\n\\n  function listen(listener) {\\n    if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history);\\n\\n    var unlisten = history.listen(listener);\\n\\n    return function () {\\n      unlisten();\\n\\n      if (--listenerCount === 0) stopHashChangeListener();\\n    };\\n  }\\n\\n  function push(location) {\\n    process.env.NODE_ENV !== 'production' ? _warning2['default'](queryKey || location.state == null, 'You cannot use state without a queryKey it will be dropped') : undefined;\\n\\n    history.push(location);\\n  }\\n\\n  function replace(location) {\\n    process.env.NODE_ENV !== 'production' ? _warning2['default'](queryKey || location.state == null, 'You cannot use state without a queryKey it will be dropped') : undefined;\\n\\n    history.replace(location);\\n  }\\n\\n  var goIsSupportedWithoutReload = _DOMUtils.supportsGoWithoutReloadUsingHash();\\n\\n  function go(n) {\\n    process.env.NODE_ENV !== 'production' ? _warning2['default'](goIsSupportedWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : undefined;\\n\\n    history.go(n);\\n  }\\n\\n  function createHref(path) {\\n    return '#' + history.createHref(path);\\n  }\\n\\n  // deprecated\\n  function registerTransitionHook(hook) {\\n    if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history);\\n\\n    history.registerTransitionHook(hook);\\n  }\\n\\n  // deprecated\\n  function unregisterTransitionHook(hook) {\\n    history.unregisterTransitionHook(hook);\\n\\n    if (--listenerCount === 0) stopHashChangeListener();\\n  }\\n\\n  // deprecated\\n  function pushState(state, path) {\\n    process.env.NODE_ENV !== 'production' ? _warning2['default'](queryKey || state == null, 'You cannot use state without a queryKey it will be dropped') : undefined;\\n\\n    history.pushState(state, path);\\n  }\\n\\n  // deprecated\\n  function replaceState(state, path) {\\n    process.env.NODE_ENV !== 'production' ? _warning2['default'](queryKey || state == null, 'You cannot use state without a queryKey it will be dropped') : undefined;\\n\\n    history.replaceState(state, path);\\n  }\\n\\n  return _extends({}, history, {\\n    listenBefore: listenBefore,\\n    listen: listen,\\n    push: push,\\n    replace: replace,\\n    go: go,\\n    createHref: createHref,\\n\\n    registerTransitionHook: registerTransitionHook, // deprecated - warning is in createHistory\\n    unregisterTransitionHook: unregisterTransitionHook, // deprecated - warning is in createHistory\\n    pushState: pushState, // deprecated - warning is in createHistory\\n    replaceState: replaceState // deprecated - warning is in createHistory\\n  });\\n}\\n\\nexports['default'] = createHashHistory;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/history/lib/createHashHistory.js\\n// module id = 46\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/history/lib/createHashHistory.js?\");\n\n/***/ },\n/* 47 */\n/*!****************************************!*\\\n  !*** ./~/history/~/warning/browser.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014-2015, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n */\\n\\n'use strict';\\n\\n/**\\n * Similar to invariant but only logs a warning if the condition is not met.\\n * This can be used to log issues in development environments in critical\\n * paths. Removing the logging code for production environments will keep the\\n * same logic and follow the same code paths.\\n */\\n\\nvar warning = function() {};\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  warning = function(condition, format, args) {\\n    var len = arguments.length;\\n    args = new Array(len > 2 ? len - 2 : 0);\\n    for (var key = 2; key < len; key++) {\\n      args[key - 2] = arguments[key];\\n    }\\n    if (format === undefined) {\\n      throw new Error(\\n        '`warning(condition, format, ...args)` requires a warning ' +\\n        'message argument'\\n      );\\n    }\\n\\n    if (format.length < 10 || (/^[s\\\\W]*$/).test(format)) {\\n      throw new Error(\\n        'The warning format should be able to uniquely identify this ' +\\n        'warning. Please, use a more descriptive format than: ' + format\\n      );\\n    }\\n\\n    if (!condition) {\\n      var argIndex = 0;\\n      var message = 'Warning: ' +\\n        format.replace(/%s/g, function() {\\n          return args[argIndex++];\\n        });\\n      if (typeof console !== 'undefined') {\\n        console.error(message);\\n      }\\n      try {\\n        // This error was thrown as a convenience so that you can use this stack\\n        // to find the callsite that caused this warning to fire.\\n        throw new Error(message);\\n      } catch(x) {}\\n    }\\n  };\\n}\\n\\nmodule.exports = warning;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/history/~/warning/browser.js\\n// module id = 47\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/history/~/warning/browser.js?\");\n\n/***/ },\n/* 48 */\n/*!**********************************!*\\\n  !*** ./~/history/lib/Actions.js ***!\n  \\**********************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Indicates that navigation was caused by a call to history.push.\\n */\\n'use strict';\\n\\nexports.__esModule = true;\\nvar PUSH = 'PUSH';\\n\\nexports.PUSH = PUSH;\\n/**\\n * Indicates that navigation was caused by a call to history.replace.\\n */\\nvar REPLACE = 'REPLACE';\\n\\nexports.REPLACE = REPLACE;\\n/**\\n * Indicates that navigation was caused by some other action such\\n * as using a browser's back/forward buttons and/or manually manipulating\\n * the URL in a browser's location bar. This is the default.\\n *\\n * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate\\n * for more information.\\n */\\nvar POP = 'POP';\\n\\nexports.POP = POP;\\nexports['default'] = {\\n  PUSH: PUSH,\\n  REPLACE: REPLACE,\\n  POP: POP\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/history/lib/Actions.js\\n// module id = 48\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/history/lib/Actions.js?\");\n\n/***/ },\n/* 49 */\n/*!************************************!*\\\n  !*** ./~/history/lib/PathUtils.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\nexports.extractPath = extractPath;\\nexports.parsePath = parsePath;\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar _warning = __webpack_require__(/*! warning */ 47);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nfunction extractPath(string) {\\n  var match = string.match(/^https?:\\\\/\\\\/[^\\\\/]*/);\\n\\n  if (match == null) return string;\\n\\n  return string.substring(match[0].length);\\n}\\n\\nfunction parsePath(path) {\\n  var pathname = extractPath(path);\\n  var search = '';\\n  var hash = '';\\n\\n  process.env.NODE_ENV !== 'production' ? _warning2['default'](path === pathname, 'A path must be pathname + search + hash only, not a fully qualified URL like \\\"%s\\\"', path) : undefined;\\n\\n  var hashIndex = pathname.indexOf('#');\\n  if (hashIndex !== -1) {\\n    hash = pathname.substring(hashIndex);\\n    pathname = pathname.substring(0, hashIndex);\\n  }\\n\\n  var searchIndex = pathname.indexOf('?');\\n  if (searchIndex !== -1) {\\n    search = pathname.substring(searchIndex);\\n    pathname = pathname.substring(0, searchIndex);\\n  }\\n\\n  if (pathname === '') pathname = '/';\\n\\n  return {\\n    pathname: pathname,\\n    search: search,\\n    hash: hash\\n  };\\n}\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/history/lib/PathUtils.js\\n// module id = 49\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/history/lib/PathUtils.js?\");\n\n/***/ },\n/* 50 */\n/*!***********************************************!*\\\n  !*** ./~/history/lib/ExecutionEnvironment.js ***!\n  \\***********************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\\nexports.canUseDOM = canUseDOM;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/history/lib/ExecutionEnvironment.js\\n// module id = 50\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/history/lib/ExecutionEnvironment.js?\");\n\n/***/ },\n/* 51 */\n/*!***********************************!*\\\n  !*** ./~/history/lib/DOMUtils.js ***!\n  \\***********************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\nexports.addEventListener = addEventListener;\\nexports.removeEventListener = removeEventListener;\\nexports.getHashPath = getHashPath;\\nexports.replaceHashPath = replaceHashPath;\\nexports.getWindowPath = getWindowPath;\\nexports.go = go;\\nexports.getUserConfirmation = getUserConfirmation;\\nexports.supportsHistory = supportsHistory;\\nexports.supportsGoWithoutReloadUsingHash = supportsGoWithoutReloadUsingHash;\\n\\nfunction addEventListener(node, event, listener) {\\n  if (node.addEventListener) {\\n    node.addEventListener(event, listener, false);\\n  } else {\\n    node.attachEvent('on' + event, listener);\\n  }\\n}\\n\\nfunction removeEventListener(node, event, listener) {\\n  if (node.removeEventListener) {\\n    node.removeEventListener(event, listener, false);\\n  } else {\\n    node.detachEvent('on' + event, listener);\\n  }\\n}\\n\\nfunction getHashPath() {\\n  // We can't use window.location.hash here because it's not\\n  // consistent across browsers - Firefox will pre-decode it!\\n  return window.location.href.split('#')[1] || '';\\n}\\n\\nfunction replaceHashPath(path) {\\n  window.location.replace(window.location.pathname + window.location.search + '#' + path);\\n}\\n\\nfunction getWindowPath() {\\n  return window.location.pathname + window.location.search + window.location.hash;\\n}\\n\\nfunction go(n) {\\n  if (n) window.history.go(n);\\n}\\n\\nfunction getUserConfirmation(message, callback) {\\n  callback(window.confirm(message));\\n}\\n\\n/**\\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\\n *\\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\\n * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586\\n */\\n\\nfunction supportsHistory() {\\n  var ua = navigator.userAgent;\\n  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) {\\n    return false;\\n  }\\n  return window.history && 'pushState' in window.history;\\n}\\n\\n/**\\n * Returns false if using go(n) with hash history causes a full page reload.\\n */\\n\\nfunction supportsGoWithoutReloadUsingHash() {\\n  var ua = navigator.userAgent;\\n  return ua.indexOf('Firefox') === -1;\\n}\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/history/lib/DOMUtils.js\\n// module id = 51\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/history/lib/DOMUtils.js?\");\n\n/***/ },\n/* 52 */\n/*!******************************************!*\\\n  !*** ./~/history/lib/DOMStateStorage.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/*eslint-disable no-empty */\\n'use strict';\\n\\nexports.__esModule = true;\\nexports.saveState = saveState;\\nexports.readState = readState;\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar _warning = __webpack_require__(/*! warning */ 47);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nvar KeyPrefix = '@@History/';\\nvar QuotaExceededErrors = ['QuotaExceededError', 'QUOTA_EXCEEDED_ERR'];\\n\\nvar SecurityError = 'SecurityError';\\n\\nfunction createKey(key) {\\n  return KeyPrefix + key;\\n}\\n\\nfunction saveState(key, state) {\\n  try {\\n    if (state == null) {\\n      window.sessionStorage.removeItem(createKey(key));\\n    } else {\\n      window.sessionStorage.setItem(createKey(key), JSON.stringify(state));\\n    }\\n  } catch (error) {\\n    if (error.name === SecurityError) {\\n      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any\\n      // attempt to access window.sessionStorage.\\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available due to security settings') : undefined;\\n\\n      return;\\n    }\\n\\n    if (QuotaExceededErrors.indexOf(error.name) >= 0 && window.sessionStorage.length === 0) {\\n      // Safari \\\"private mode\\\" throws QuotaExceededError.\\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available in Safari private mode') : undefined;\\n\\n      return;\\n    }\\n\\n    throw error;\\n  }\\n}\\n\\nfunction readState(key) {\\n  var json = undefined;\\n  try {\\n    json = window.sessionStorage.getItem(createKey(key));\\n  } catch (error) {\\n    if (error.name === SecurityError) {\\n      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any\\n      // attempt to access window.sessionStorage.\\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to read state; sessionStorage is not available due to security settings') : undefined;\\n\\n      return null;\\n    }\\n  }\\n\\n  if (json) {\\n    try {\\n      return JSON.parse(json);\\n    } catch (error) {\\n      // Ignore invalid JSON.\\n    }\\n  }\\n\\n  return null;\\n}\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/history/lib/DOMStateStorage.js\\n// module id = 52\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/history/lib/DOMStateStorage.js?\");\n\n/***/ },\n/* 53 */\n/*!*******************************************!*\\\n  !*** ./~/history/lib/createDOMHistory.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nvar _ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 50);\\n\\nvar _DOMUtils = __webpack_require__(/*! ./DOMUtils */ 51);\\n\\nvar _createHistory = __webpack_require__(/*! ./createHistory */ 54);\\n\\nvar _createHistory2 = _interopRequireDefault(_createHistory);\\n\\nfunction createDOMHistory(options) {\\n  var history = _createHistory2['default'](_extends({\\n    getUserConfirmation: _DOMUtils.getUserConfirmation\\n  }, options, {\\n    go: _DOMUtils.go\\n  }));\\n\\n  function listen(listener) {\\n    !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'DOM history needs a DOM') : _invariant2['default'](false) : undefined;\\n\\n    return history.listen(listener);\\n  }\\n\\n  return _extends({}, history, {\\n    listen: listen\\n  });\\n}\\n\\nexports['default'] = createDOMHistory;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/history/lib/createDOMHistory.js\\n// module id = 53\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/history/lib/createDOMHistory.js?\");\n\n/***/ },\n/* 54 */\n/*!****************************************!*\\\n  !*** ./~/history/lib/createHistory.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar _warning = __webpack_require__(/*! warning */ 47);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nvar _deepEqual = __webpack_require__(/*! deep-equal */ 55);\\n\\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\\n\\nvar _PathUtils = __webpack_require__(/*! ./PathUtils */ 49);\\n\\nvar _AsyncUtils = __webpack_require__(/*! ./AsyncUtils */ 58);\\n\\nvar _Actions = __webpack_require__(/*! ./Actions */ 48);\\n\\nvar _createLocation2 = __webpack_require__(/*! ./createLocation */ 59);\\n\\nvar _createLocation3 = _interopRequireDefault(_createLocation2);\\n\\nvar _runTransitionHook = __webpack_require__(/*! ./runTransitionHook */ 60);\\n\\nvar _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);\\n\\nvar _deprecate = __webpack_require__(/*! ./deprecate */ 61);\\n\\nvar _deprecate2 = _interopRequireDefault(_deprecate);\\n\\nfunction createRandomKey(length) {\\n  return Math.random().toString(36).substr(2, length);\\n}\\n\\nfunction locationsAreEqual(a, b) {\\n  return a.pathname === b.pathname && a.search === b.search &&\\n  //a.action === b.action && // Different action !== location change.\\n  a.key === b.key && _deepEqual2['default'](a.state, b.state);\\n}\\n\\nvar DefaultKeyLength = 6;\\n\\nfunction createHistory() {\\n  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\\n  var getCurrentLocation = options.getCurrentLocation;\\n  var finishTransition = options.finishTransition;\\n  var saveState = options.saveState;\\n  var go = options.go;\\n  var getUserConfirmation = options.getUserConfirmation;\\n  var keyLength = options.keyLength;\\n\\n  if (typeof keyLength !== 'number') keyLength = DefaultKeyLength;\\n\\n  var transitionHooks = [];\\n\\n  function listenBefore(hook) {\\n    transitionHooks.push(hook);\\n\\n    return function () {\\n      transitionHooks = transitionHooks.filter(function (item) {\\n        return item !== hook;\\n      });\\n    };\\n  }\\n\\n  var allKeys = [];\\n  var changeListeners = [];\\n  var location = undefined;\\n\\n  function getCurrent() {\\n    if (pendingLocation && pendingLocation.action === _Actions.POP) {\\n      return allKeys.indexOf(pendingLocation.key);\\n    } else if (location) {\\n      return allKeys.indexOf(location.key);\\n    } else {\\n      return -1;\\n    }\\n  }\\n\\n  function updateLocation(newLocation) {\\n    var current = getCurrent();\\n\\n    location = newLocation;\\n\\n    if (location.action === _Actions.PUSH) {\\n      allKeys = [].concat(allKeys.slice(0, current + 1), [location.key]);\\n    } else if (location.action === _Actions.REPLACE) {\\n      allKeys[current] = location.key;\\n    }\\n\\n    changeListeners.forEach(function (listener) {\\n      listener(location);\\n    });\\n  }\\n\\n  function listen(listener) {\\n    changeListeners.push(listener);\\n\\n    if (location) {\\n      listener(location);\\n    } else {\\n      var _location = getCurrentLocation();\\n      allKeys = [_location.key];\\n      updateLocation(_location);\\n    }\\n\\n    return function () {\\n      changeListeners = changeListeners.filter(function (item) {\\n        return item !== listener;\\n      });\\n    };\\n  }\\n\\n  function confirmTransitionTo(location, callback) {\\n    _AsyncUtils.loopAsync(transitionHooks.length, function (index, next, done) {\\n      _runTransitionHook2['default'](transitionHooks[index], location, function (result) {\\n        if (result != null) {\\n          done(result);\\n        } else {\\n          next();\\n        }\\n      });\\n    }, function (message) {\\n      if (getUserConfirmation && typeof message === 'string') {\\n        getUserConfirmation(message, function (ok) {\\n          callback(ok !== false);\\n        });\\n      } else {\\n        callback(message !== false);\\n      }\\n    });\\n  }\\n\\n  var pendingLocation = undefined;\\n\\n  function transitionTo(nextLocation) {\\n    if (location && locationsAreEqual(location, nextLocation)) return; // Nothing to do.\\n\\n    pendingLocation = nextLocation;\\n\\n    confirmTransitionTo(nextLocation, function (ok) {\\n      if (pendingLocation !== nextLocation) return; // Transition was interrupted.\\n\\n      if (ok) {\\n        // treat PUSH to current path like REPLACE to be consistent with browsers\\n        if (nextLocation.action === _Actions.PUSH) {\\n          var prevPath = createPath(location);\\n          var nextPath = createPath(nextLocation);\\n\\n          if (nextPath === prevPath && _deepEqual2['default'](location.state, nextLocation.state)) nextLocation.action = _Actions.REPLACE;\\n        }\\n\\n        if (finishTransition(nextLocation) !== false) updateLocation(nextLocation);\\n      } else if (location && nextLocation.action === _Actions.POP) {\\n        var prevIndex = allKeys.indexOf(location.key);\\n        var nextIndex = allKeys.indexOf(nextLocation.key);\\n\\n        if (prevIndex !== -1 && nextIndex !== -1) go(prevIndex - nextIndex); // Restore the URL.\\n      }\\n    });\\n  }\\n\\n  function push(location) {\\n    transitionTo(createLocation(location, _Actions.PUSH, createKey()));\\n  }\\n\\n  function replace(location) {\\n    transitionTo(createLocation(location, _Actions.REPLACE, createKey()));\\n  }\\n\\n  function goBack() {\\n    go(-1);\\n  }\\n\\n  function goForward() {\\n    go(1);\\n  }\\n\\n  function createKey() {\\n    return createRandomKey(keyLength);\\n  }\\n\\n  function createPath(location) {\\n    if (location == null || typeof location === 'string') return location;\\n\\n    var pathname = location.pathname;\\n    var search = location.search;\\n    var hash = location.hash;\\n\\n    var result = pathname;\\n\\n    if (search) result += search;\\n\\n    if (hash) result += hash;\\n\\n    return result;\\n  }\\n\\n  function createHref(location) {\\n    return createPath(location);\\n  }\\n\\n  function createLocation(location, action) {\\n    var key = arguments.length <= 2 || arguments[2] === undefined ? createKey() : arguments[2];\\n\\n    if (typeof action === 'object') {\\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'The state (2nd) argument to history.createLocation is deprecated; use a ' + 'location descriptor instead') : undefined;\\n\\n      if (typeof location === 'string') location = _PathUtils.parsePath(location);\\n\\n      location = _extends({}, location, { state: action });\\n\\n      action = key;\\n      key = arguments[3] || createKey();\\n    }\\n\\n    return _createLocation3['default'](location, action, key);\\n  }\\n\\n  // deprecated\\n  function setState(state) {\\n    if (location) {\\n      updateLocationState(location, state);\\n      updateLocation(location);\\n    } else {\\n      updateLocationState(getCurrentLocation(), state);\\n    }\\n  }\\n\\n  function updateLocationState(location, state) {\\n    location.state = _extends({}, location.state, state);\\n    saveState(location.key, location.state);\\n  }\\n\\n  // deprecated\\n  function registerTransitionHook(hook) {\\n    if (transitionHooks.indexOf(hook) === -1) transitionHooks.push(hook);\\n  }\\n\\n  // deprecated\\n  function unregisterTransitionHook(hook) {\\n    transitionHooks = transitionHooks.filter(function (item) {\\n      return item !== hook;\\n    });\\n  }\\n\\n  // deprecated\\n  function pushState(state, path) {\\n    if (typeof path === 'string') path = _PathUtils.parsePath(path);\\n\\n    push(_extends({ state: state }, path));\\n  }\\n\\n  // deprecated\\n  function replaceState(state, path) {\\n    if (typeof path === 'string') path = _PathUtils.parsePath(path);\\n\\n    replace(_extends({ state: state }, path));\\n  }\\n\\n  return {\\n    listenBefore: listenBefore,\\n    listen: listen,\\n    transitionTo: transitionTo,\\n    push: push,\\n    replace: replace,\\n    go: go,\\n    goBack: goBack,\\n    goForward: goForward,\\n    createKey: createKey,\\n    createPath: createPath,\\n    createHref: createHref,\\n    createLocation: createLocation,\\n\\n    setState: _deprecate2['default'](setState, 'setState is deprecated; use location.key to save state instead'),\\n    registerTransitionHook: _deprecate2['default'](registerTransitionHook, 'registerTransitionHook is deprecated; use listenBefore instead'),\\n    unregisterTransitionHook: _deprecate2['default'](unregisterTransitionHook, 'unregisterTransitionHook is deprecated; use the callback returned from listenBefore instead'),\\n    pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'),\\n    replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead')\\n  };\\n}\\n\\nexports['default'] = createHistory;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/history/lib/createHistory.js\\n// module id = 54\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/history/lib/createHistory.js?\");\n\n/***/ },\n/* 55 */\n/*!*******************************!*\\\n  !*** ./~/deep-equal/index.js ***!\n  \\*******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var pSlice = Array.prototype.slice;\\nvar objectKeys = __webpack_require__(/*! ./lib/keys.js */ 56);\\nvar isArguments = __webpack_require__(/*! ./lib/is_arguments.js */ 57);\\n\\nvar deepEqual = module.exports = function (actual, expected, opts) {\\n  if (!opts) opts = {};\\n  // 7.1. All identical values are equivalent, as determined by ===.\\n  if (actual === expected) {\\n    return true;\\n\\n  } else if (actual instanceof Date && expected instanceof Date) {\\n    return actual.getTime() === expected.getTime();\\n\\n  // 7.3. Other pairs that do not both pass typeof value == 'object',\\n  // equivalence is determined by ==.\\n  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\\n    return opts.strict ? actual === expected : actual == expected;\\n\\n  // 7.4. For all other Object pairs, including Array objects, equivalence is\\n  // determined by having the same number of owned properties (as verified\\n  // with Object.prototype.hasOwnProperty.call), the same set of keys\\n  // (although not necessarily the same order), equivalent values for every\\n  // corresponding key, and an identical 'prototype' property. Note: this\\n  // accounts for both named and indexed properties on Arrays.\\n  } else {\\n    return objEquiv(actual, expected, opts);\\n  }\\n}\\n\\nfunction isUndefinedOrNull(value) {\\n  return value === null || value === undefined;\\n}\\n\\nfunction isBuffer (x) {\\n  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\\n  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\\n    return false;\\n  }\\n  if (x.length > 0 && typeof x[0] !== 'number') return false;\\n  return true;\\n}\\n\\nfunction objEquiv(a, b, opts) {\\n  var i, key;\\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\\n    return false;\\n  // an identical 'prototype' property.\\n  if (a.prototype !== b.prototype) return false;\\n  //~~~I've managed to break Object.keys through screwy arguments passing.\\n  //   Converting to array solves the problem.\\n  if (isArguments(a)) {\\n    if (!isArguments(b)) {\\n      return false;\\n    }\\n    a = pSlice.call(a);\\n    b = pSlice.call(b);\\n    return deepEqual(a, b, opts);\\n  }\\n  if (isBuffer(a)) {\\n    if (!isBuffer(b)) {\\n      return false;\\n    }\\n    if (a.length !== b.length) return false;\\n    for (i = 0; i < a.length; i++) {\\n      if (a[i] !== b[i]) return false;\\n    }\\n    return true;\\n  }\\n  try {\\n    var ka = objectKeys(a),\\n        kb = objectKeys(b);\\n  } catch (e) {//happens when one is a string literal and the other isn't\\n    return false;\\n  }\\n  // having the same number of owned properties (keys incorporates\\n  // hasOwnProperty)\\n  if (ka.length != kb.length)\\n    return false;\\n  //the same set of keys (although not necessarily the same order),\\n  ka.sort();\\n  kb.sort();\\n  //~~~cheap key test\\n  for (i = ka.length - 1; i >= 0; i--) {\\n    if (ka[i] != kb[i])\\n      return false;\\n  }\\n  //equivalent values for every corresponding key, and\\n  //~~~possibly expensive deep test\\n  for (i = ka.length - 1; i >= 0; i--) {\\n    key = ka[i];\\n    if (!deepEqual(a[key], b[key], opts)) return false;\\n  }\\n  return typeof a === typeof b;\\n}\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/deep-equal/index.js\\n// module id = 55\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/deep-equal/index.js?\");\n\n/***/ },\n/* 56 */\n/*!**********************************!*\\\n  !*** ./~/deep-equal/lib/keys.js ***!\n  \\**********************************/\n/***/ function(module, exports) {\n\n\teval(\"exports = module.exports = typeof Object.keys === 'function'\\n  ? Object.keys : shim;\\n\\nexports.shim = shim;\\nfunction shim (obj) {\\n  var keys = [];\\n  for (var key in obj) keys.push(key);\\n  return keys;\\n}\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/deep-equal/lib/keys.js\\n// module id = 56\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/deep-equal/lib/keys.js?\");\n\n/***/ },\n/* 57 */\n/*!******************************************!*\\\n  !*** ./~/deep-equal/lib/is_arguments.js ***!\n  \\******************************************/\n/***/ function(module, exports) {\n\n\teval(\"var supportsArgumentsClass = (function(){\\n  return Object.prototype.toString.call(arguments)\\n})() == '[object Arguments]';\\n\\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\\n\\nexports.supported = supported;\\nfunction supported(object) {\\n  return Object.prototype.toString.call(object) == '[object Arguments]';\\n};\\n\\nexports.unsupported = unsupported;\\nfunction unsupported(object){\\n  return object &&\\n    typeof object == 'object' &&\\n    typeof object.length == 'number' &&\\n    Object.prototype.hasOwnProperty.call(object, 'callee') &&\\n    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\\n    false;\\n};\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/deep-equal/lib/is_arguments.js\\n// module id = 57\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/deep-equal/lib/is_arguments.js?\");\n\n/***/ },\n/* 58 */\n/*!*************************************!*\\\n  !*** ./~/history/lib/AsyncUtils.js ***!\n  \\*************************************/\n/***/ function(module, exports) {\n\n\teval(\"\\\"use strict\\\";\\n\\nexports.__esModule = true;\\nvar _slice = Array.prototype.slice;\\nexports.loopAsync = loopAsync;\\n\\nfunction loopAsync(turns, work, callback) {\\n  var currentTurn = 0,\\n      isDone = false;\\n  var sync = false,\\n      hasNext = false,\\n      doneArgs = undefined;\\n\\n  function done() {\\n    isDone = true;\\n    if (sync) {\\n      // Iterate instead of recursing if possible.\\n      doneArgs = [].concat(_slice.call(arguments));\\n      return;\\n    }\\n\\n    callback.apply(this, arguments);\\n  }\\n\\n  function next() {\\n    if (isDone) {\\n      return;\\n    }\\n\\n    hasNext = true;\\n    if (sync) {\\n      // Iterate instead of recursing if possible.\\n      return;\\n    }\\n\\n    sync = true;\\n\\n    while (!isDone && currentTurn < turns && hasNext) {\\n      hasNext = false;\\n      work.call(this, currentTurn++, next, done);\\n    }\\n\\n    sync = false;\\n\\n    if (isDone) {\\n      // This means the loop finished synchronously.\\n      callback.apply(this, doneArgs);\\n      return;\\n    }\\n\\n    if (currentTurn >= turns && hasNext) {\\n      isDone = true;\\n      callback();\\n    }\\n  }\\n\\n  next();\\n}\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/history/lib/AsyncUtils.js\\n// module id = 58\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/history/lib/AsyncUtils.js?\");\n\n/***/ },\n/* 59 */\n/*!*****************************************!*\\\n  !*** ./~/history/lib/createLocation.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar _warning = __webpack_require__(/*! warning */ 47);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nvar _Actions = __webpack_require__(/*! ./Actions */ 48);\\n\\nvar _PathUtils = __webpack_require__(/*! ./PathUtils */ 49);\\n\\nfunction createLocation() {\\n  var location = arguments.length <= 0 || arguments[0] === undefined ? '/' : arguments[0];\\n  var action = arguments.length <= 1 || arguments[1] === undefined ? _Actions.POP : arguments[1];\\n  var key = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];\\n\\n  var _fourthArg = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3];\\n\\n  if (typeof location === 'string') location = _PathUtils.parsePath(location);\\n\\n  if (typeof action === 'object') {\\n    process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'The state (2nd) argument to createLocation is deprecated; use a ' + 'location descriptor instead') : undefined;\\n\\n    location = _extends({}, location, { state: action });\\n\\n    action = key || _Actions.POP;\\n    key = _fourthArg;\\n  }\\n\\n  var pathname = location.pathname || '/';\\n  var search = location.search || '';\\n  var hash = location.hash || '';\\n  var state = location.state || null;\\n\\n  return {\\n    pathname: pathname,\\n    search: search,\\n    hash: hash,\\n    state: state,\\n    action: action,\\n    key: key\\n  };\\n}\\n\\nexports['default'] = createLocation;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/history/lib/createLocation.js\\n// module id = 59\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/history/lib/createLocation.js?\");\n\n/***/ },\n/* 60 */\n/*!********************************************!*\\\n  !*** ./~/history/lib/runTransitionHook.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar _warning = __webpack_require__(/*! warning */ 47);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nfunction runTransitionHook(hook, location, callback) {\\n  var result = hook(location, callback);\\n\\n  if (hook.length < 2) {\\n    // Assume the hook runs synchronously and automatically\\n    // call the callback with the return value.\\n    callback(result);\\n  } else {\\n    process.env.NODE_ENV !== 'production' ? _warning2['default'](result === undefined, 'You should not \\\"return\\\" in a transition hook with a callback argument; call the callback instead') : undefined;\\n  }\\n}\\n\\nexports['default'] = runTransitionHook;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/history/lib/runTransitionHook.js\\n// module id = 60\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/history/lib/runTransitionHook.js?\");\n\n/***/ },\n/* 61 */\n/*!************************************!*\\\n  !*** ./~/history/lib/deprecate.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar _warning = __webpack_require__(/*! warning */ 47);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nfunction deprecate(fn, message) {\\n  return function () {\\n    process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] ' + message) : undefined;\\n    return fn.apply(this, arguments);\\n  };\\n}\\n\\nexports['default'] = deprecate;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/history/lib/deprecate.js\\n// module id = 61\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/history/lib/deprecate.js?\");\n\n/***/ },\n/* 62 */\n/*!*************************************!*\\\n  !*** ./~/history/lib/useQueries.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar _warning = __webpack_require__(/*! warning */ 47);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nvar _queryString = __webpack_require__(/*! query-string */ 63);\\n\\nvar _runTransitionHook = __webpack_require__(/*! ./runTransitionHook */ 60);\\n\\nvar _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);\\n\\nvar _PathUtils = __webpack_require__(/*! ./PathUtils */ 49);\\n\\nvar _deprecate = __webpack_require__(/*! ./deprecate */ 61);\\n\\nvar _deprecate2 = _interopRequireDefault(_deprecate);\\n\\nvar SEARCH_BASE_KEY = '$searchBase';\\n\\nfunction defaultStringifyQuery(query) {\\n  return _queryString.stringify(query).replace(/%20/g, '+');\\n}\\n\\nvar defaultParseQueryString = _queryString.parse;\\n\\nfunction isNestedObject(object) {\\n  for (var p in object) {\\n    if (Object.prototype.hasOwnProperty.call(object, p) && typeof object[p] === 'object' && !Array.isArray(object[p]) && object[p] !== null) return true;\\n  }return false;\\n}\\n\\n/**\\n * Returns a new createHistory function that may be used to create\\n * history objects that know how to handle URL queries.\\n */\\nfunction useQueries(createHistory) {\\n  return function () {\\n    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\\n\\n    var history = createHistory(options);\\n\\n    var stringifyQuery = options.stringifyQuery;\\n    var parseQueryString = options.parseQueryString;\\n\\n    if (typeof stringifyQuery !== 'function') stringifyQuery = defaultStringifyQuery;\\n\\n    if (typeof parseQueryString !== 'function') parseQueryString = defaultParseQueryString;\\n\\n    function addQuery(location) {\\n      if (location.query == null) {\\n        var search = location.search;\\n\\n        location.query = parseQueryString(search.substring(1));\\n        location[SEARCH_BASE_KEY] = { search: search, searchBase: '' };\\n      }\\n\\n      // TODO: Instead of all the book-keeping here, this should just strip the\\n      // stringified query from the search.\\n\\n      return location;\\n    }\\n\\n    function appendQuery(location, query) {\\n      var _extends2;\\n\\n      var searchBaseSpec = location[SEARCH_BASE_KEY];\\n      var queryString = query ? stringifyQuery(query) : '';\\n      if (!searchBaseSpec && !queryString) {\\n        return location;\\n      }\\n\\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](stringifyQuery !== defaultStringifyQuery || !isNestedObject(query), 'useQueries does not stringify nested query objects by default; ' + 'use a custom stringifyQuery function') : undefined;\\n\\n      if (typeof location === 'string') location = _PathUtils.parsePath(location);\\n\\n      var searchBase = undefined;\\n      if (searchBaseSpec && location.search === searchBaseSpec.search) {\\n        searchBase = searchBaseSpec.searchBase;\\n      } else {\\n        searchBase = location.search || '';\\n      }\\n\\n      var search = searchBase;\\n      if (queryString) {\\n        search += (search ? '&' : '?') + queryString;\\n      }\\n\\n      return _extends({}, location, (_extends2 = {\\n        search: search\\n      }, _extends2[SEARCH_BASE_KEY] = { search: search, searchBase: searchBase }, _extends2));\\n    }\\n\\n    // Override all read methods with query-aware versions.\\n    function listenBefore(hook) {\\n      return history.listenBefore(function (location, callback) {\\n        _runTransitionHook2['default'](hook, addQuery(location), callback);\\n      });\\n    }\\n\\n    function listen(listener) {\\n      return history.listen(function (location) {\\n        listener(addQuery(location));\\n      });\\n    }\\n\\n    // Override all write methods with query-aware versions.\\n    function push(location) {\\n      history.push(appendQuery(location, location.query));\\n    }\\n\\n    function replace(location) {\\n      history.replace(appendQuery(location, location.query));\\n    }\\n\\n    function createPath(location, query) {\\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](!query, 'the query argument to createPath is deprecated; use a location descriptor instead') : undefined;\\n\\n      return history.createPath(appendQuery(location, query || location.query));\\n    }\\n\\n    function createHref(location, query) {\\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](!query, 'the query argument to createHref is deprecated; use a location descriptor instead') : undefined;\\n\\n      return history.createHref(appendQuery(location, query || location.query));\\n    }\\n\\n    function createLocation(location) {\\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\\n        args[_key - 1] = arguments[_key];\\n      }\\n\\n      var fullLocation = history.createLocation.apply(history, [appendQuery(location, location.query)].concat(args));\\n      if (location.query) {\\n        fullLocation.query = location.query;\\n      }\\n      return addQuery(fullLocation);\\n    }\\n\\n    // deprecated\\n    function pushState(state, path, query) {\\n      if (typeof path === 'string') path = _PathUtils.parsePath(path);\\n\\n      push(_extends({ state: state }, path, { query: query }));\\n    }\\n\\n    // deprecated\\n    function replaceState(state, path, query) {\\n      if (typeof path === 'string') path = _PathUtils.parsePath(path);\\n\\n      replace(_extends({ state: state }, path, { query: query }));\\n    }\\n\\n    return _extends({}, history, {\\n      listenBefore: listenBefore,\\n      listen: listen,\\n      push: push,\\n      replace: replace,\\n      createPath: createPath,\\n      createHref: createHref,\\n      createLocation: createLocation,\\n\\n      pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'),\\n      replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead')\\n    });\\n  };\\n}\\n\\nexports['default'] = useQueries;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/history/lib/useQueries.js\\n// module id = 62\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/history/lib/useQueries.js?\");\n\n/***/ },\n/* 63 */\n/*!*********************************!*\\\n  !*** ./~/query-string/index.js ***!\n  \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\nvar strictUriEncode = __webpack_require__(/*! strict-uri-encode */ 64);\\n\\nexports.extract = function (str) {\\n\\treturn str.split('?')[1] || '';\\n};\\n\\nexports.parse = function (str) {\\n\\tif (typeof str !== 'string') {\\n\\t\\treturn {};\\n\\t}\\n\\n\\tstr = str.trim().replace(/^(\\\\?|#|&)/, '');\\n\\n\\tif (!str) {\\n\\t\\treturn {};\\n\\t}\\n\\n\\treturn str.split('&').reduce(function (ret, param) {\\n\\t\\tvar parts = param.replace(/\\\\+/g, ' ').split('=');\\n\\t\\t// Firefox (pre 40) decodes `%3D` to `=`\\n\\t\\t// https://github.com/sindresorhus/query-string/pull/37\\n\\t\\tvar key = parts.shift();\\n\\t\\tvar val = parts.length > 0 ? parts.join('=') : undefined;\\n\\n\\t\\tkey = decodeURIComponent(key);\\n\\n\\t\\t// missing `=` should be `null`:\\n\\t\\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\\n\\t\\tval = val === undefined ? null : decodeURIComponent(val);\\n\\n\\t\\tif (!ret.hasOwnProperty(key)) {\\n\\t\\t\\tret[key] = val;\\n\\t\\t} else if (Array.isArray(ret[key])) {\\n\\t\\t\\tret[key].push(val);\\n\\t\\t} else {\\n\\t\\t\\tret[key] = [ret[key], val];\\n\\t\\t}\\n\\n\\t\\treturn ret;\\n\\t}, {});\\n};\\n\\nexports.stringify = function (obj) {\\n\\treturn obj ? Object.keys(obj).sort().map(function (key) {\\n\\t\\tvar val = obj[key];\\n\\n\\t\\tif (val === undefined) {\\n\\t\\t\\treturn '';\\n\\t\\t}\\n\\n\\t\\tif (val === null) {\\n\\t\\t\\treturn key;\\n\\t\\t}\\n\\n\\t\\tif (Array.isArray(val)) {\\n\\t\\t\\treturn val.slice().sort().map(function (val2) {\\n\\t\\t\\t\\treturn strictUriEncode(key) + '=' + strictUriEncode(val2);\\n\\t\\t\\t}).join('&');\\n\\t\\t}\\n\\n\\t\\treturn strictUriEncode(key) + '=' + strictUriEncode(val);\\n\\t}).filter(function (x) {\\n\\t\\treturn x.length > 0;\\n\\t}).join('&') : '';\\n};\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/query-string/index.js\\n// module id = 63\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/query-string/index.js?\");\n\n/***/ },\n/* 64 */\n/*!**************************************!*\\\n  !*** ./~/strict-uri-encode/index.js ***!\n  \\**************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\nmodule.exports = function (str) {\\n\\treturn encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\\n\\t\\treturn '%' + c.charCodeAt(0).toString(16).toUpperCase();\\n\\t});\\n};\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/strict-uri-encode/index.js\\n// module id = 64\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/strict-uri-encode/index.js?\");\n\n/***/ },\n/* 65 */\n/*!*******************************************************!*\\\n  !*** ./~/react-router/lib/createTransitionManager.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nexports.default = createTransitionManager;\\n\\nvar _routerWarning = __webpack_require__(/*! ./routerWarning */ 40);\\n\\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\\n\\nvar _computeChangedRoutes2 = __webpack_require__(/*! ./computeChangedRoutes */ 66);\\n\\nvar _computeChangedRoutes3 = _interopRequireDefault(_computeChangedRoutes2);\\n\\nvar _TransitionUtils = __webpack_require__(/*! ./TransitionUtils */ 67);\\n\\nvar _isActive2 = __webpack_require__(/*! ./isActive */ 69);\\n\\nvar _isActive3 = _interopRequireDefault(_isActive2);\\n\\nvar _getComponents = __webpack_require__(/*! ./getComponents */ 70);\\n\\nvar _getComponents2 = _interopRequireDefault(_getComponents);\\n\\nvar _matchRoutes = __webpack_require__(/*! ./matchRoutes */ 72);\\n\\nvar _matchRoutes2 = _interopRequireDefault(_matchRoutes);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction hasAnyProperties(object) {\\n  for (var p in object) {\\n    if (Object.prototype.hasOwnProperty.call(object, p)) return true;\\n  }return false;\\n}\\n\\nfunction createTransitionManager(history, routes) {\\n  var state = {};\\n\\n  // Signature should be (location, indexOnly), but needs to support (path,\\n  // query, indexOnly)\\n  function isActive(location) {\\n    var indexOnlyOrDeprecatedQuery = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\\n    var deprecatedIndexOnly = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];\\n\\n    var indexOnly = void 0;\\n    if (indexOnlyOrDeprecatedQuery && indexOnlyOrDeprecatedQuery !== true || deprecatedIndexOnly !== null) {\\n      process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, '`isActive(pathname, query, indexOnly) is deprecated; use `isActive(location, indexOnly)` with a location descriptor instead. http://tiny.cc/router-isActivedeprecated') : void 0;\\n      location = { pathname: location, query: indexOnlyOrDeprecatedQuery };\\n      indexOnly = deprecatedIndexOnly || false;\\n    } else {\\n      location = history.createLocation(location);\\n      indexOnly = indexOnlyOrDeprecatedQuery;\\n    }\\n\\n    return (0, _isActive3.default)(location, indexOnly, state.location, state.routes, state.params);\\n  }\\n\\n  var partialNextState = void 0;\\n\\n  function match(location, callback) {\\n    if (partialNextState && partialNextState.location === location) {\\n      // Continue from where we left off.\\n      finishMatch(partialNextState, callback);\\n    } else {\\n      (0, _matchRoutes2.default)(routes, location, function (error, nextState) {\\n        if (error) {\\n          callback(error);\\n        } else if (nextState) {\\n          finishMatch(_extends({}, nextState, { location: location }), callback);\\n        } else {\\n          callback();\\n        }\\n      });\\n    }\\n  }\\n\\n  function finishMatch(nextState, callback) {\\n    var _computeChangedRoutes = (0, _computeChangedRoutes3.default)(state, nextState);\\n\\n    var leaveRoutes = _computeChangedRoutes.leaveRoutes;\\n    var changeRoutes = _computeChangedRoutes.changeRoutes;\\n    var enterRoutes = _computeChangedRoutes.enterRoutes;\\n\\n\\n    (0, _TransitionUtils.runLeaveHooks)(leaveRoutes, state);\\n\\n    // Tear down confirmation hooks for left routes\\n    leaveRoutes.filter(function (route) {\\n      return enterRoutes.indexOf(route) === -1;\\n    }).forEach(removeListenBeforeHooksForRoute);\\n\\n    // change and enter hooks are run in series\\n    (0, _TransitionUtils.runChangeHooks)(changeRoutes, state, nextState, function (error, redirectInfo) {\\n      if (error || redirectInfo) return handleErrorOrRedirect(error, redirectInfo);\\n\\n      (0, _TransitionUtils.runEnterHooks)(enterRoutes, nextState, finishEnterHooks);\\n    });\\n\\n    function finishEnterHooks(error, redirectInfo) {\\n      if (error || redirectInfo) return handleErrorOrRedirect(error, redirectInfo);\\n\\n      // TODO: Fetch components after state is updated.\\n      (0, _getComponents2.default)(nextState, function (error, components) {\\n        if (error) {\\n          callback(error);\\n        } else {\\n          // TODO: Make match a pure function and have some other API\\n          // for \\\"match and update state\\\".\\n          callback(null, null, state = _extends({}, nextState, { components: components }));\\n        }\\n      });\\n    }\\n\\n    function handleErrorOrRedirect(error, redirectInfo) {\\n      if (error) callback(error);else callback(null, redirectInfo);\\n    }\\n  }\\n\\n  var RouteGuid = 1;\\n\\n  function getRouteID(route) {\\n    var create = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];\\n\\n    return route.__id__ || create && (route.__id__ = RouteGuid++);\\n  }\\n\\n  var RouteHooks = Object.create(null);\\n\\n  function getRouteHooksForRoutes(routes) {\\n    return routes.reduce(function (hooks, route) {\\n      hooks.push.apply(hooks, RouteHooks[getRouteID(route)]);\\n      return hooks;\\n    }, []);\\n  }\\n\\n  function transitionHook(location, callback) {\\n    (0, _matchRoutes2.default)(routes, location, function (error, nextState) {\\n      if (nextState == null) {\\n        // TODO: We didn't actually match anything, but hang\\n        // onto error/nextState so we don't have to matchRoutes\\n        // again in the listen callback.\\n        callback();\\n        return;\\n      }\\n\\n      // Cache some state here so we don't have to\\n      // matchRoutes() again in the listen callback.\\n      partialNextState = _extends({}, nextState, { location: location });\\n\\n      var hooks = getRouteHooksForRoutes((0, _computeChangedRoutes3.default)(state, partialNextState).leaveRoutes);\\n\\n      var result = void 0;\\n      for (var i = 0, len = hooks.length; result == null && i < len; ++i) {\\n        // Passing the location arg here indicates to\\n        // the user that this is a transition hook.\\n        result = hooks[i](location);\\n      }\\n\\n      callback(result);\\n    });\\n  }\\n\\n  /* istanbul ignore next: untestable with Karma */\\n  function beforeUnloadHook() {\\n    // Synchronously check to see if any route hooks want\\n    // to prevent the current window/tab from closing.\\n    if (state.routes) {\\n      var hooks = getRouteHooksForRoutes(state.routes);\\n\\n      var message = void 0;\\n      for (var i = 0, len = hooks.length; typeof message !== 'string' && i < len; ++i) {\\n        // Passing no args indicates to the user that this is a\\n        // beforeunload hook. We don't know the next location.\\n        message = hooks[i]();\\n      }\\n\\n      return message;\\n    }\\n  }\\n\\n  var unlistenBefore = void 0,\\n      unlistenBeforeUnload = void 0;\\n\\n  function removeListenBeforeHooksForRoute(route) {\\n    var routeID = getRouteID(route, false);\\n    if (!routeID) {\\n      return;\\n    }\\n\\n    delete RouteHooks[routeID];\\n\\n    if (!hasAnyProperties(RouteHooks)) {\\n      // teardown transition & beforeunload hooks\\n      if (unlistenBefore) {\\n        unlistenBefore();\\n        unlistenBefore = null;\\n      }\\n\\n      if (unlistenBeforeUnload) {\\n        unlistenBeforeUnload();\\n        unlistenBeforeUnload = null;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * Registers the given hook function to run before leaving the given route.\\n   *\\n   * During a normal transition, the hook function receives the next location\\n   * as its only argument and can return either a prompt message (string) to show the user,\\n   * to make sure they want to leave the page; or `false`, to prevent the transition.\\n   * Any other return value will have no effect.\\n   *\\n   * During the beforeunload event (in browsers) the hook receives no arguments.\\n   * In this case it must return a prompt message to prevent the transition.\\n   *\\n   * Returns a function that may be used to unbind the listener.\\n   */\\n  function listenBeforeLeavingRoute(route, hook) {\\n    // TODO: Warn if they register for a route that isn't currently\\n    // active. They're probably doing something wrong, like re-creating\\n    // route objects on every location change.\\n    var routeID = getRouteID(route);\\n    var hooks = RouteHooks[routeID];\\n\\n    if (!hooks) {\\n      var thereWereNoRouteHooks = !hasAnyProperties(RouteHooks);\\n\\n      RouteHooks[routeID] = [hook];\\n\\n      if (thereWereNoRouteHooks) {\\n        // setup transition & beforeunload hooks\\n        unlistenBefore = history.listenBefore(transitionHook);\\n\\n        if (history.listenBeforeUnload) unlistenBeforeUnload = history.listenBeforeUnload(beforeUnloadHook);\\n      }\\n    } else {\\n      if (hooks.indexOf(hook) === -1) {\\n        process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'adding multiple leave hooks for the same route is deprecated; manage multiple confirmations in your own code instead') : void 0;\\n\\n        hooks.push(hook);\\n      }\\n    }\\n\\n    return function () {\\n      var hooks = RouteHooks[routeID];\\n\\n      if (hooks) {\\n        var newHooks = hooks.filter(function (item) {\\n          return item !== hook;\\n        });\\n\\n        if (newHooks.length === 0) {\\n          removeListenBeforeHooksForRoute(route);\\n        } else {\\n          RouteHooks[routeID] = newHooks;\\n        }\\n      }\\n    };\\n  }\\n\\n  /**\\n   * This is the API for stateful environments. As the location\\n   * changes, we update state and call the listener. We can also\\n   * gracefully handle errors and redirects.\\n   */\\n  function listen(listener) {\\n    // TODO: Only use a single history listener. Otherwise we'll\\n    // end up with multiple concurrent calls to match.\\n    return history.listen(function (location) {\\n      if (state.location === location) {\\n        listener(null, state);\\n      } else {\\n        match(location, function (error, redirectLocation, nextState) {\\n          if (error) {\\n            listener(error);\\n          } else if (redirectLocation) {\\n            history.replace(redirectLocation);\\n          } else if (nextState) {\\n            listener(null, nextState);\\n          } else {\\n            process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'Location \\\"%s\\\" did not match any routes', location.pathname + location.search + location.hash) : void 0;\\n          }\\n        });\\n      }\\n    });\\n  }\\n\\n  return {\\n    isActive: isActive,\\n    match: match,\\n    listenBeforeLeavingRoute: listenBeforeLeavingRoute,\\n    listen: listen\\n  };\\n}\\n\\n//export default useRoutes\\n\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/createTransitionManager.js\\n// module id = 65\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/createTransitionManager.js?\");\n\n/***/ },\n/* 66 */\n/*!****************************************************!*\\\n  !*** ./~/react-router/lib/computeChangedRoutes.js ***!\n  \\****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _PatternUtils = __webpack_require__(/*! ./PatternUtils */ 43);\\n\\nfunction routeParamsChanged(route, prevState, nextState) {\\n  if (!route.path) return false;\\n\\n  var paramNames = (0, _PatternUtils.getParamNames)(route.path);\\n\\n  return paramNames.some(function (paramName) {\\n    return prevState.params[paramName] !== nextState.params[paramName];\\n  });\\n}\\n\\n/**\\n * Returns an object of { leaveRoutes, changeRoutes, enterRoutes } determined by\\n * the change from prevState to nextState. We leave routes if either\\n * 1) they are not in the next state or 2) they are in the next state\\n * but their params have changed (i.e. /users/123 => /users/456).\\n *\\n * leaveRoutes are ordered starting at the leaf route of the tree\\n * we're leaving up to the common parent route. enterRoutes are ordered\\n * from the top of the tree we're entering down to the leaf route.\\n *\\n * changeRoutes are any routes that didn't leave or enter during\\n * the transition.\\n */\\nfunction computeChangedRoutes(prevState, nextState) {\\n  var prevRoutes = prevState && prevState.routes;\\n  var nextRoutes = nextState.routes;\\n\\n  var leaveRoutes = void 0,\\n      changeRoutes = void 0,\\n      enterRoutes = void 0;\\n  if (prevRoutes) {\\n    (function () {\\n      var parentIsLeaving = false;\\n      leaveRoutes = prevRoutes.filter(function (route) {\\n        if (parentIsLeaving) {\\n          return true;\\n        } else {\\n          var isLeaving = nextRoutes.indexOf(route) === -1 || routeParamsChanged(route, prevState, nextState);\\n          if (isLeaving) parentIsLeaving = true;\\n          return isLeaving;\\n        }\\n      });\\n\\n      // onLeave hooks start at the leaf route.\\n      leaveRoutes.reverse();\\n\\n      enterRoutes = [];\\n      changeRoutes = [];\\n\\n      nextRoutes.forEach(function (route) {\\n        var isNew = prevRoutes.indexOf(route) === -1;\\n        var paramsChanged = leaveRoutes.indexOf(route) !== -1;\\n\\n        if (isNew || paramsChanged) enterRoutes.push(route);else changeRoutes.push(route);\\n      });\\n    })();\\n  } else {\\n    leaveRoutes = [];\\n    changeRoutes = [];\\n    enterRoutes = nextRoutes;\\n  }\\n\\n  return {\\n    leaveRoutes: leaveRoutes,\\n    changeRoutes: changeRoutes,\\n    enterRoutes: enterRoutes\\n  };\\n}\\n\\nexports.default = computeChangedRoutes;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/computeChangedRoutes.js\\n// module id = 66\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/computeChangedRoutes.js?\");\n\n/***/ },\n/* 67 */\n/*!***********************************************!*\\\n  !*** ./~/react-router/lib/TransitionUtils.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\nexports.runEnterHooks = runEnterHooks;\\nexports.runChangeHooks = runChangeHooks;\\nexports.runLeaveHooks = runLeaveHooks;\\n\\nvar _AsyncUtils = __webpack_require__(/*! ./AsyncUtils */ 68);\\n\\nvar _routerWarning = __webpack_require__(/*! ./routerWarning */ 40);\\n\\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction createTransitionHook(hook, route, asyncArity) {\\n  return function () {\\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\\n      args[_key] = arguments[_key];\\n    }\\n\\n    hook.apply(route, args);\\n\\n    if (hook.length < asyncArity) {\\n      var callback = args[args.length - 1];\\n      // Assume hook executes synchronously and\\n      // automatically call the callback.\\n      callback();\\n    }\\n  };\\n}\\n\\nfunction getEnterHooks(routes) {\\n  return routes.reduce(function (hooks, route) {\\n    if (route.onEnter) hooks.push(createTransitionHook(route.onEnter, route, 3));\\n\\n    return hooks;\\n  }, []);\\n}\\n\\nfunction getChangeHooks(routes) {\\n  return routes.reduce(function (hooks, route) {\\n    if (route.onChange) hooks.push(createTransitionHook(route.onChange, route, 4));\\n    return hooks;\\n  }, []);\\n}\\n\\nfunction runTransitionHooks(length, iter, callback) {\\n  if (!length) {\\n    callback();\\n    return;\\n  }\\n\\n  var redirectInfo = void 0;\\n  function replace(location, deprecatedPathname, deprecatedQuery) {\\n    if (deprecatedPathname) {\\n      process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, '`replaceState(state, pathname, query) is deprecated; use `replace(location)` with a location descriptor instead. http://tiny.cc/router-isActivedeprecated') : void 0;\\n      redirectInfo = {\\n        pathname: deprecatedPathname,\\n        query: deprecatedQuery,\\n        state: location\\n      };\\n\\n      return;\\n    }\\n\\n    redirectInfo = location;\\n  }\\n\\n  (0, _AsyncUtils.loopAsync)(length, function (index, next, done) {\\n    iter(index, replace, function (error) {\\n      if (error || redirectInfo) {\\n        done(error, redirectInfo); // No need to continue.\\n      } else {\\n        next();\\n      }\\n    });\\n  }, callback);\\n}\\n\\n/**\\n * Runs all onEnter hooks in the given array of routes in order\\n * with onEnter(nextState, replace, callback) and calls\\n * callback(error, redirectInfo) when finished. The first hook\\n * to use replace short-circuits the loop.\\n *\\n * If a hook needs to run asynchronously, it may use the callback\\n * function. However, doing so will cause the transition to pause,\\n * which could lead to a non-responsive UI if the hook is slow.\\n */\\nfunction runEnterHooks(routes, nextState, callback) {\\n  var hooks = getEnterHooks(routes);\\n  return runTransitionHooks(hooks.length, function (index, replace, next) {\\n    hooks[index](nextState, replace, next);\\n  }, callback);\\n}\\n\\n/**\\n * Runs all onChange hooks in the given array of routes in order\\n * with onChange(prevState, nextState, replace, callback) and calls\\n * callback(error, redirectInfo) when finished. The first hook\\n * to use replace short-circuits the loop.\\n *\\n * If a hook needs to run asynchronously, it may use the callback\\n * function. However, doing so will cause the transition to pause,\\n * which could lead to a non-responsive UI if the hook is slow.\\n */\\nfunction runChangeHooks(routes, state, nextState, callback) {\\n  var hooks = getChangeHooks(routes);\\n  return runTransitionHooks(hooks.length, function (index, replace, next) {\\n    hooks[index](state, nextState, replace, next);\\n  }, callback);\\n}\\n\\n/**\\n * Runs all onLeave hooks in the given array of routes in order.\\n */\\nfunction runLeaveHooks(routes, prevState) {\\n  for (var i = 0, len = routes.length; i < len; ++i) {\\n    if (routes[i].onLeave) routes[i].onLeave.call(routes[i], prevState);\\n  }\\n}\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/TransitionUtils.js\\n// module id = 67\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/TransitionUtils.js?\");\n\n/***/ },\n/* 68 */\n/*!******************************************!*\\\n  !*** ./~/react-router/lib/AsyncUtils.js ***!\n  \\******************************************/\n/***/ function(module, exports) {\n\n\teval(\"\\\"use strict\\\";\\n\\nexports.__esModule = true;\\nexports.loopAsync = loopAsync;\\nexports.mapAsync = mapAsync;\\nfunction loopAsync(turns, work, callback) {\\n  var currentTurn = 0,\\n      isDone = false;\\n  var sync = false,\\n      hasNext = false,\\n      doneArgs = void 0;\\n\\n  function done() {\\n    isDone = true;\\n    if (sync) {\\n      // Iterate instead of recursing if possible.\\n      doneArgs = [].concat(Array.prototype.slice.call(arguments));\\n      return;\\n    }\\n\\n    callback.apply(this, arguments);\\n  }\\n\\n  function next() {\\n    if (isDone) {\\n      return;\\n    }\\n\\n    hasNext = true;\\n    if (sync) {\\n      // Iterate instead of recursing if possible.\\n      return;\\n    }\\n\\n    sync = true;\\n\\n    while (!isDone && currentTurn < turns && hasNext) {\\n      hasNext = false;\\n      work.call(this, currentTurn++, next, done);\\n    }\\n\\n    sync = false;\\n\\n    if (isDone) {\\n      // This means the loop finished synchronously.\\n      callback.apply(this, doneArgs);\\n      return;\\n    }\\n\\n    if (currentTurn >= turns && hasNext) {\\n      isDone = true;\\n      callback();\\n    }\\n  }\\n\\n  next();\\n}\\n\\nfunction mapAsync(array, work, callback) {\\n  var length = array.length;\\n  var values = [];\\n\\n  if (length === 0) return callback(null, values);\\n\\n  var isDone = false,\\n      doneCount = 0;\\n\\n  function done(index, error, value) {\\n    if (isDone) return;\\n\\n    if (error) {\\n      isDone = true;\\n      callback(error);\\n    } else {\\n      values[index] = value;\\n\\n      isDone = ++doneCount === length;\\n\\n      if (isDone) callback(null, values);\\n    }\\n  }\\n\\n  array.forEach(function (item, index) {\\n    work(item, index, function (error, value) {\\n      done(index, error, value);\\n    });\\n  });\\n}\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/AsyncUtils.js\\n// module id = 68\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/AsyncUtils.js?\");\n\n/***/ },\n/* 69 */\n/*!****************************************!*\\\n  !*** ./~/react-router/lib/isActive.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _typeof = typeof Symbol === \\\"function\\\" && typeof Symbol.iterator === \\\"symbol\\\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \\\"function\\\" && obj.constructor === Symbol ? \\\"symbol\\\" : typeof obj; };\\n\\nexports.default = isActive;\\n\\nvar _PatternUtils = __webpack_require__(/*! ./PatternUtils */ 43);\\n\\nfunction deepEqual(a, b) {\\n  if (a == b) return true;\\n\\n  if (a == null || b == null) return false;\\n\\n  if (Array.isArray(a)) {\\n    return Array.isArray(b) && a.length === b.length && a.every(function (item, index) {\\n      return deepEqual(item, b[index]);\\n    });\\n  }\\n\\n  if ((typeof a === 'undefined' ? 'undefined' : _typeof(a)) === 'object') {\\n    for (var p in a) {\\n      if (!Object.prototype.hasOwnProperty.call(a, p)) {\\n        continue;\\n      }\\n\\n      if (a[p] === undefined) {\\n        if (b[p] !== undefined) {\\n          return false;\\n        }\\n      } else if (!Object.prototype.hasOwnProperty.call(b, p)) {\\n        return false;\\n      } else if (!deepEqual(a[p], b[p])) {\\n        return false;\\n      }\\n    }\\n\\n    return true;\\n  }\\n\\n  return String(a) === String(b);\\n}\\n\\n/**\\n * Returns true if the current pathname matches the supplied one, net of\\n * leading and trailing slash normalization. This is sufficient for an\\n * indexOnly route match.\\n */\\nfunction pathIsActive(pathname, currentPathname) {\\n  // Normalize leading slash for consistency. Leading slash on pathname has\\n  // already been normalized in isActive. See caveat there.\\n  if (currentPathname.charAt(0) !== '/') {\\n    currentPathname = '/' + currentPathname;\\n  }\\n\\n  // Normalize the end of both path names too. Maybe `/foo/` shouldn't show\\n  // `/foo` as active, but in this case, we would already have failed the\\n  // match.\\n  if (pathname.charAt(pathname.length - 1) !== '/') {\\n    pathname += '/';\\n  }\\n  if (currentPathname.charAt(currentPathname.length - 1) !== '/') {\\n    currentPathname += '/';\\n  }\\n\\n  return currentPathname === pathname;\\n}\\n\\n/**\\n * Returns true if the given pathname matches the active routes and params.\\n */\\nfunction routeIsActive(pathname, routes, params) {\\n  var remainingPathname = pathname,\\n      paramNames = [],\\n      paramValues = [];\\n\\n  // for...of would work here but it's probably slower post-transpilation.\\n  for (var i = 0, len = routes.length; i < len; ++i) {\\n    var route = routes[i];\\n    var pattern = route.path || '';\\n\\n    if (pattern.charAt(0) === '/') {\\n      remainingPathname = pathname;\\n      paramNames = [];\\n      paramValues = [];\\n    }\\n\\n    if (remainingPathname !== null && pattern) {\\n      var matched = (0, _PatternUtils.matchPattern)(pattern, remainingPathname);\\n      if (matched) {\\n        remainingPathname = matched.remainingPathname;\\n        paramNames = [].concat(paramNames, matched.paramNames);\\n        paramValues = [].concat(paramValues, matched.paramValues);\\n      } else {\\n        remainingPathname = null;\\n      }\\n\\n      if (remainingPathname === '') {\\n        // We have an exact match on the route. Just check that all the params\\n        // match.\\n        // FIXME: This doesn't work on repeated params.\\n        return paramNames.every(function (paramName, index) {\\n          return String(paramValues[index]) === String(params[paramName]);\\n        });\\n      }\\n    }\\n  }\\n\\n  return false;\\n}\\n\\n/**\\n * Returns true if all key/value pairs in the given query are\\n * currently active.\\n */\\nfunction queryIsActive(query, activeQuery) {\\n  if (activeQuery == null) return query == null;\\n\\n  if (query == null) return true;\\n\\n  return deepEqual(query, activeQuery);\\n}\\n\\n/**\\n * Returns true if a <Link> to the given pathname/query combination is\\n * currently active.\\n */\\nfunction isActive(_ref, indexOnly, currentLocation, routes, params) {\\n  var pathname = _ref.pathname;\\n  var query = _ref.query;\\n\\n  if (currentLocation == null) return false;\\n\\n  // TODO: This is a bit ugly. It keeps around support for treating pathnames\\n  // without preceding slashes as absolute paths, but possibly also works\\n  // around the same quirks with basenames as in matchRoutes.\\n  if (pathname.charAt(0) !== '/') {\\n    pathname = '/' + pathname;\\n  }\\n\\n  if (!pathIsActive(pathname, currentLocation.pathname)) {\\n    // The path check is necessary and sufficient for indexOnly, but otherwise\\n    // we still need to check the routes.\\n    if (indexOnly || !routeIsActive(pathname, routes, params)) {\\n      return false;\\n    }\\n  }\\n\\n  return queryIsActive(query, currentLocation.query);\\n}\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/isActive.js\\n// module id = 69\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/isActive.js?\");\n\n/***/ },\n/* 70 */\n/*!*********************************************!*\\\n  !*** ./~/react-router/lib/getComponents.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _AsyncUtils = __webpack_require__(/*! ./AsyncUtils */ 68);\\n\\nvar _makeStateWithLocation = __webpack_require__(/*! ./makeStateWithLocation */ 71);\\n\\nvar _makeStateWithLocation2 = _interopRequireDefault(_makeStateWithLocation);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction getComponentsForRoute(nextState, route, callback) {\\n  if (route.component || route.components) {\\n    callback(null, route.component || route.components);\\n    return;\\n  }\\n\\n  var getComponent = route.getComponent || route.getComponents;\\n  if (!getComponent) {\\n    callback();\\n    return;\\n  }\\n\\n  var location = nextState.location;\\n\\n  var nextStateWithLocation = (0, _makeStateWithLocation2.default)(nextState, location);\\n\\n  getComponent.call(route, nextStateWithLocation, callback);\\n}\\n\\n/**\\n * Asynchronously fetches all components needed for the given router\\n * state and calls callback(error, components) when finished.\\n *\\n * Note: This operation may finish synchronously if no routes have an\\n * asynchronous getComponents method.\\n */\\nfunction getComponents(nextState, callback) {\\n  (0, _AsyncUtils.mapAsync)(nextState.routes, function (route, index, callback) {\\n    getComponentsForRoute(nextState, route, callback);\\n  }, callback);\\n}\\n\\nexports.default = getComponents;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/getComponents.js\\n// module id = 70\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/getComponents.js?\");\n\n/***/ },\n/* 71 */\n/*!*****************************************************!*\\\n  !*** ./~/react-router/lib/makeStateWithLocation.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nexports.default = makeStateWithLocation;\\n\\nvar _deprecateObjectProperties = __webpack_require__(/*! ./deprecateObjectProperties */ 39);\\n\\nvar _routerWarning = __webpack_require__(/*! ./routerWarning */ 40);\\n\\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction makeStateWithLocation(state, location) {\\n  if (process.env.NODE_ENV !== 'production' && _deprecateObjectProperties.canUseMembrane) {\\n    var stateWithLocation = _extends({}, state);\\n\\n    // I don't use deprecateObjectProperties here because I want to keep the\\n    // same code path between development and production, in that we just\\n    // assign extra properties to the copy of the state object in both cases.\\n\\n    var _loop = function _loop(prop) {\\n      if (!Object.prototype.hasOwnProperty.call(location, prop)) {\\n        return 'continue';\\n      }\\n\\n      Object.defineProperty(stateWithLocation, prop, {\\n        get: function get() {\\n          process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'Accessing location properties directly from the first argument to `getComponent`, `getComponents`, `getChildRoutes`, and `getIndexRoute` is deprecated. That argument is now the router state (`nextState` or `partialNextState`) rather than the location. To access the location, use `nextState.location` or `partialNextState.location`.') : void 0;\\n          return location[prop];\\n        }\\n      });\\n    };\\n\\n    for (var prop in location) {\\n      var _ret = _loop(prop);\\n\\n      if (_ret === 'continue') continue;\\n    }\\n\\n    return stateWithLocation;\\n  }\\n\\n  return _extends({}, state, location);\\n}\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/makeStateWithLocation.js\\n// module id = 71\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/makeStateWithLocation.js?\");\n\n/***/ },\n/* 72 */\n/*!*******************************************!*\\\n  !*** ./~/react-router/lib/matchRoutes.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nvar _typeof = typeof Symbol === \\\"function\\\" && typeof Symbol.iterator === \\\"symbol\\\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \\\"function\\\" && obj.constructor === Symbol ? \\\"symbol\\\" : typeof obj; };\\n\\nexports.default = matchRoutes;\\n\\nvar _AsyncUtils = __webpack_require__(/*! ./AsyncUtils */ 68);\\n\\nvar _makeStateWithLocation = __webpack_require__(/*! ./makeStateWithLocation */ 71);\\n\\nvar _makeStateWithLocation2 = _interopRequireDefault(_makeStateWithLocation);\\n\\nvar _PatternUtils = __webpack_require__(/*! ./PatternUtils */ 43);\\n\\nvar _routerWarning = __webpack_require__(/*! ./routerWarning */ 40);\\n\\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\\n\\nvar _RouteUtils = __webpack_require__(/*! ./RouteUtils */ 37);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction getChildRoutes(route, location, paramNames, paramValues, callback) {\\n  if (route.childRoutes) {\\n    return [null, route.childRoutes];\\n  }\\n  if (!route.getChildRoutes) {\\n    return [];\\n  }\\n\\n  var sync = true,\\n      result = void 0;\\n\\n  var partialNextState = {\\n    location: location,\\n    params: createParams(paramNames, paramValues)\\n  };\\n\\n  var partialNextStateWithLocation = (0, _makeStateWithLocation2.default)(partialNextState, location);\\n\\n  route.getChildRoutes(partialNextStateWithLocation, function (error, childRoutes) {\\n    childRoutes = !error && (0, _RouteUtils.createRoutes)(childRoutes);\\n    if (sync) {\\n      result = [error, childRoutes];\\n      return;\\n    }\\n\\n    callback(error, childRoutes);\\n  });\\n\\n  sync = false;\\n  return result; // Might be undefined.\\n}\\n\\nfunction getIndexRoute(route, location, paramNames, paramValues, callback) {\\n  if (route.indexRoute) {\\n    callback(null, route.indexRoute);\\n  } else if (route.getIndexRoute) {\\n    var partialNextState = {\\n      location: location,\\n      params: createParams(paramNames, paramValues)\\n    };\\n\\n    var partialNextStateWithLocation = (0, _makeStateWithLocation2.default)(partialNextState, location);\\n\\n    route.getIndexRoute(partialNextStateWithLocation, function (error, indexRoute) {\\n      callback(error, !error && (0, _RouteUtils.createRoutes)(indexRoute)[0]);\\n    });\\n  } else if (route.childRoutes) {\\n    (function () {\\n      var pathless = route.childRoutes.filter(function (childRoute) {\\n        return !childRoute.path;\\n      });\\n\\n      (0, _AsyncUtils.loopAsync)(pathless.length, function (index, next, done) {\\n        getIndexRoute(pathless[index], location, paramNames, paramValues, function (error, indexRoute) {\\n          if (error || indexRoute) {\\n            var routes = [pathless[index]].concat(Array.isArray(indexRoute) ? indexRoute : [indexRoute]);\\n            done(error, routes);\\n          } else {\\n            next();\\n          }\\n        });\\n      }, function (err, routes) {\\n        callback(null, routes);\\n      });\\n    })();\\n  } else {\\n    callback();\\n  }\\n}\\n\\nfunction assignParams(params, paramNames, paramValues) {\\n  return paramNames.reduce(function (params, paramName, index) {\\n    var paramValue = paramValues && paramValues[index];\\n\\n    if (Array.isArray(params[paramName])) {\\n      params[paramName].push(paramValue);\\n    } else if (paramName in params) {\\n      params[paramName] = [params[paramName], paramValue];\\n    } else {\\n      params[paramName] = paramValue;\\n    }\\n\\n    return params;\\n  }, params);\\n}\\n\\nfunction createParams(paramNames, paramValues) {\\n  return assignParams({}, paramNames, paramValues);\\n}\\n\\nfunction matchRouteDeep(route, location, remainingPathname, paramNames, paramValues, callback) {\\n  var pattern = route.path || '';\\n\\n  if (pattern.charAt(0) === '/') {\\n    remainingPathname = location.pathname;\\n    paramNames = [];\\n    paramValues = [];\\n  }\\n\\n  // Only try to match the path if the route actually has a pattern, and if\\n  // we're not just searching for potential nested absolute paths.\\n  if (remainingPathname !== null && pattern) {\\n    try {\\n      var matched = (0, _PatternUtils.matchPattern)(pattern, remainingPathname);\\n      if (matched) {\\n        remainingPathname = matched.remainingPathname;\\n        paramNames = [].concat(paramNames, matched.paramNames);\\n        paramValues = [].concat(paramValues, matched.paramValues);\\n      } else {\\n        remainingPathname = null;\\n      }\\n    } catch (error) {\\n      callback(error);\\n    }\\n\\n    // By assumption, pattern is non-empty here, which is the prerequisite for\\n    // actually terminating a match.\\n    if (remainingPathname === '') {\\n      var _ret2 = function () {\\n        var match = {\\n          routes: [route],\\n          params: createParams(paramNames, paramValues)\\n        };\\n\\n        getIndexRoute(route, location, paramNames, paramValues, function (error, indexRoute) {\\n          if (error) {\\n            callback(error);\\n          } else {\\n            if (Array.isArray(indexRoute)) {\\n              var _match$routes;\\n\\n              process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(indexRoute.every(function (route) {\\n                return !route.path;\\n              }), 'Index routes should not have paths') : void 0;\\n              (_match$routes = match.routes).push.apply(_match$routes, indexRoute);\\n            } else if (indexRoute) {\\n              process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(!indexRoute.path, 'Index routes should not have paths') : void 0;\\n              match.routes.push(indexRoute);\\n            }\\n\\n            callback(null, match);\\n          }\\n        });\\n\\n        return {\\n          v: void 0\\n        };\\n      }();\\n\\n      if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === \\\"object\\\") return _ret2.v;\\n    }\\n  }\\n\\n  if (remainingPathname != null || route.childRoutes) {\\n    // Either a) this route matched at least some of the path or b)\\n    // we don't have to load this route's children asynchronously. In\\n    // either case continue checking for matches in the subtree.\\n    var onChildRoutes = function onChildRoutes(error, childRoutes) {\\n      if (error) {\\n        callback(error);\\n      } else if (childRoutes) {\\n        // Check the child routes to see if any of them match.\\n        matchRoutes(childRoutes, location, function (error, match) {\\n          if (error) {\\n            callback(error);\\n          } else if (match) {\\n            // A child route matched! Augment the match and pass it up the stack.\\n            match.routes.unshift(route);\\n            callback(null, match);\\n          } else {\\n            callback();\\n          }\\n        }, remainingPathname, paramNames, paramValues);\\n      } else {\\n        callback();\\n      }\\n    };\\n\\n    var result = getChildRoutes(route, location, paramNames, paramValues, onChildRoutes);\\n    if (result) {\\n      onChildRoutes.apply(undefined, result);\\n    }\\n  } else {\\n    callback();\\n  }\\n}\\n\\n/**\\n * Asynchronously matches the given location to a set of routes and calls\\n * callback(error, state) when finished. The state object will have the\\n * following properties:\\n *\\n * - routes       An array of routes that matched, in hierarchical order\\n * - params       An object of URL parameters\\n *\\n * Note: This operation may finish synchronously if no routes have an\\n * asynchronous getChildRoutes method.\\n */\\nfunction matchRoutes(routes, location, callback, remainingPathname) {\\n  var paramNames = arguments.length <= 4 || arguments[4] === undefined ? [] : arguments[4];\\n  var paramValues = arguments.length <= 5 || arguments[5] === undefined ? [] : arguments[5];\\n\\n  if (remainingPathname === undefined) {\\n    // TODO: This is a little bit ugly, but it works around a quirk in history\\n    // that strips the leading slash from pathnames when using basenames with\\n    // trailing slashes.\\n    if (location.pathname.charAt(0) !== '/') {\\n      location = _extends({}, location, {\\n        pathname: '/' + location.pathname\\n      });\\n    }\\n    remainingPathname = location.pathname;\\n  }\\n\\n  (0, _AsyncUtils.loopAsync)(routes.length, function (index, next, done) {\\n    matchRouteDeep(routes[index], location, remainingPathname, paramNames, paramValues, function (error, match) {\\n      if (error || match) {\\n        done(error, match);\\n      } else {\\n        next();\\n      }\\n    });\\n  }, callback);\\n}\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/matchRoutes.js\\n// module id = 72\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/matchRoutes.js?\");\n\n/***/ },\n/* 73 */\n/*!*********************************************!*\\\n  !*** ./~/react-router/lib/RouterContext.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _typeof = typeof Symbol === \\\"function\\\" && typeof Symbol.iterator === \\\"symbol\\\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \\\"function\\\" && obj.constructor === Symbol ? \\\"symbol\\\" : typeof obj; };\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _deprecateObjectProperties = __webpack_require__(/*! ./deprecateObjectProperties */ 39);\\n\\nvar _deprecateObjectProperties2 = _interopRequireDefault(_deprecateObjectProperties);\\n\\nvar _getRouteParams = __webpack_require__(/*! ./getRouteParams */ 74);\\n\\nvar _getRouteParams2 = _interopRequireDefault(_getRouteParams);\\n\\nvar _RouteUtils = __webpack_require__(/*! ./RouteUtils */ 37);\\n\\nvar _routerWarning = __webpack_require__(/*! ./routerWarning */ 40);\\n\\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar _React$PropTypes = _react2.default.PropTypes;\\nvar array = _React$PropTypes.array;\\nvar func = _React$PropTypes.func;\\nvar object = _React$PropTypes.object;\\n\\n/**\\n * A <RouterContext> renders the component tree for a given router state\\n * and sets the history object and the current location in context.\\n */\\n\\nvar RouterContext = _react2.default.createClass({\\n  displayName: 'RouterContext',\\n\\n\\n  propTypes: {\\n    history: object,\\n    router: object.isRequired,\\n    location: object.isRequired,\\n    routes: array.isRequired,\\n    params: object.isRequired,\\n    components: array.isRequired,\\n    createElement: func.isRequired\\n  },\\n\\n  getDefaultProps: function getDefaultProps() {\\n    return {\\n      createElement: _react2.default.createElement\\n    };\\n  },\\n\\n\\n  childContextTypes: {\\n    history: object,\\n    location: object.isRequired,\\n    router: object.isRequired\\n  },\\n\\n  getChildContext: function getChildContext() {\\n    var _props = this.props;\\n    var router = _props.router;\\n    var history = _props.history;\\n    var location = _props.location;\\n\\n    if (!router) {\\n      process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, '`<RouterContext>` expects a `router` rather than a `history`') : void 0;\\n\\n      router = _extends({}, history, {\\n        setRouteLeaveHook: history.listenBeforeLeavingRoute\\n      });\\n      delete router.listenBeforeLeavingRoute;\\n    }\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      location = (0, _deprecateObjectProperties2.default)(location, '`context.location` is deprecated, please use a route component\\\\'s `props.location` instead. http://tiny.cc/router-accessinglocation');\\n    }\\n\\n    return { history: history, location: location, router: router };\\n  },\\n  createElement: function createElement(component, props) {\\n    return component == null ? null : this.props.createElement(component, props);\\n  },\\n  render: function render() {\\n    var _this = this;\\n\\n    var _props2 = this.props;\\n    var history = _props2.history;\\n    var location = _props2.location;\\n    var routes = _props2.routes;\\n    var params = _props2.params;\\n    var components = _props2.components;\\n\\n    var element = null;\\n\\n    if (components) {\\n      element = components.reduceRight(function (element, components, index) {\\n        if (components == null) return element; // Don't create new children; use the grandchildren.\\n\\n        var route = routes[index];\\n        var routeParams = (0, _getRouteParams2.default)(route, params);\\n        var props = {\\n          history: history,\\n          location: location,\\n          params: params,\\n          route: route,\\n          routeParams: routeParams,\\n          routes: routes\\n        };\\n\\n        if ((0, _RouteUtils.isReactChildren)(element)) {\\n          props.children = element;\\n        } else if (element) {\\n          for (var prop in element) {\\n            if (Object.prototype.hasOwnProperty.call(element, prop)) props[prop] = element[prop];\\n          }\\n        }\\n\\n        if ((typeof components === 'undefined' ? 'undefined' : _typeof(components)) === 'object') {\\n          var elements = {};\\n\\n          for (var key in components) {\\n            if (Object.prototype.hasOwnProperty.call(components, key)) {\\n              // Pass through the key as a prop to createElement to allow\\n              // custom createElement functions to know which named component\\n              // they're rendering, for e.g. matching up to fetched data.\\n              elements[key] = _this.createElement(components[key], _extends({\\n                key: key }, props));\\n            }\\n          }\\n\\n          return elements;\\n        }\\n\\n        return _this.createElement(components, props);\\n      }, element);\\n    }\\n\\n    !(element === null || element === false || _react2.default.isValidElement(element)) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'The root route must render a single element') : (0, _invariant2.default)(false) : void 0;\\n\\n    return element;\\n  }\\n});\\n\\nexports.default = RouterContext;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/RouterContext.js\\n// module id = 73\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/RouterContext.js?\");\n\n/***/ },\n/* 74 */\n/*!**********************************************!*\\\n  !*** ./~/react-router/lib/getRouteParams.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _PatternUtils = __webpack_require__(/*! ./PatternUtils */ 43);\\n\\n/**\\n * Extracts an object of params the given route cares about from\\n * the given params object.\\n */\\nfunction getRouteParams(route, params) {\\n  var routeParams = {};\\n\\n  if (!route.path) return routeParams;\\n\\n  (0, _PatternUtils.getParamNames)(route.path).forEach(function (p) {\\n    if (Object.prototype.hasOwnProperty.call(params, p)) {\\n      routeParams[p] = params[p];\\n    }\\n  });\\n\\n  return routeParams;\\n}\\n\\nexports.default = getRouteParams;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/getRouteParams.js\\n// module id = 74\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/getRouteParams.js?\");\n\n/***/ },\n/* 75 */\n/*!*******************************************!*\\\n  !*** ./~/react-router/lib/RouterUtils.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nexports.createRouterObject = createRouterObject;\\nexports.createRoutingHistory = createRoutingHistory;\\n\\nvar _deprecateObjectProperties = __webpack_require__(/*! ./deprecateObjectProperties */ 39);\\n\\nvar _deprecateObjectProperties2 = _interopRequireDefault(_deprecateObjectProperties);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction createRouterObject(history, transitionManager) {\\n  return _extends({}, history, {\\n    setRouteLeaveHook: transitionManager.listenBeforeLeavingRoute,\\n    isActive: transitionManager.isActive\\n  });\\n}\\n\\n// deprecated\\nfunction createRoutingHistory(history, transitionManager) {\\n  history = _extends({}, history, transitionManager);\\n\\n  if (process.env.NODE_ENV !== 'production') {\\n    history = (0, _deprecateObjectProperties2.default)(history, '`props.history` and `context.history` are deprecated. Please use `context.router`. http://tiny.cc/router-contextchanges');\\n  }\\n\\n  return history;\\n}\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/RouterUtils.js\\n// module id = 75\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/RouterUtils.js?\");\n\n/***/ },\n/* 76 */\n/*!************************************!*\\\n  !*** ./~/react-router/lib/Link.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _routerWarning = __webpack_require__(/*! ./routerWarning */ 40);\\n\\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nvar _PropTypes = __webpack_require__(/*! ./PropTypes */ 38);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\\n\\nvar _React$PropTypes = _react2.default.PropTypes;\\nvar bool = _React$PropTypes.bool;\\nvar object = _React$PropTypes.object;\\nvar string = _React$PropTypes.string;\\nvar func = _React$PropTypes.func;\\nvar oneOfType = _React$PropTypes.oneOfType;\\n\\n\\nfunction isLeftClickEvent(event) {\\n  return event.button === 0;\\n}\\n\\nfunction isModifiedEvent(event) {\\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\\n}\\n\\n// TODO: De-duplicate against hasAnyProperties in createTransitionManager.\\nfunction isEmptyObject(object) {\\n  for (var p in object) {\\n    if (Object.prototype.hasOwnProperty.call(object, p)) return false;\\n  }return true;\\n}\\n\\nfunction createLocationDescriptor(to, _ref) {\\n  var query = _ref.query;\\n  var hash = _ref.hash;\\n  var state = _ref.state;\\n\\n  if (query || hash || state) {\\n    return { pathname: to, query: query, hash: hash, state: state };\\n  }\\n\\n  return to;\\n}\\n\\n/**\\n * A <Link> is used to create an <a> element that links to a route.\\n * When that route is active, the link gets the value of its\\n * activeClassName prop.\\n *\\n * For example, assuming you have the following route:\\n *\\n *   <Route path=\\\"/posts/:postID\\\" component={Post} />\\n *\\n * You could use the following component to link to that route:\\n *\\n *   <Link to={`/posts/${post.id}`} />\\n *\\n * Links may pass along location state and/or query string parameters\\n * in the state/query props, respectively.\\n *\\n *   <Link ... query={{ show: true }} state={{ the: 'state' }} />\\n */\\nvar Link = _react2.default.createClass({\\n  displayName: 'Link',\\n\\n\\n  contextTypes: {\\n    router: _PropTypes.routerShape\\n  },\\n\\n  propTypes: {\\n    to: oneOfType([string, object]),\\n    query: object,\\n    hash: string,\\n    state: object,\\n    activeStyle: object,\\n    activeClassName: string,\\n    onlyActiveOnIndex: bool.isRequired,\\n    onClick: func,\\n    target: string\\n  },\\n\\n  getDefaultProps: function getDefaultProps() {\\n    return {\\n      onlyActiveOnIndex: false,\\n      style: {}\\n    };\\n  },\\n  handleClick: function handleClick(event) {\\n    if (this.props.onClick) this.props.onClick(event);\\n\\n    if (event.defaultPrevented) return;\\n\\n    !this.context.router ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, '<Link>s rendered outside of a router context cannot navigate.') : (0, _invariant2.default)(false) : void 0;\\n\\n    if (isModifiedEvent(event) || !isLeftClickEvent(event)) return;\\n\\n    // If target prop is set (e.g. to \\\"_blank\\\"), let browser handle link.\\n    /* istanbul ignore if: untestable with Karma */\\n    if (this.props.target) return;\\n\\n    event.preventDefault();\\n\\n    var _props = this.props;\\n    var to = _props.to;\\n    var query = _props.query;\\n    var hash = _props.hash;\\n    var state = _props.state;\\n\\n    var location = createLocationDescriptor(to, { query: query, hash: hash, state: state });\\n\\n    this.context.router.push(location);\\n  },\\n  render: function render() {\\n    var _props2 = this.props;\\n    var to = _props2.to;\\n    var query = _props2.query;\\n    var hash = _props2.hash;\\n    var state = _props2.state;\\n    var activeClassName = _props2.activeClassName;\\n    var activeStyle = _props2.activeStyle;\\n    var onlyActiveOnIndex = _props2.onlyActiveOnIndex;\\n\\n    var props = _objectWithoutProperties(_props2, ['to', 'query', 'hash', 'state', 'activeClassName', 'activeStyle', 'onlyActiveOnIndex']);\\n\\n    process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(!(query || hash || state), 'the `query`, `hash`, and `state` props on `<Link>` are deprecated, use `<Link to={{ pathname, query, hash, state }}/>. http://tiny.cc/router-isActivedeprecated') : void 0;\\n\\n    // Ignore if rendered outside the context of router, simplifies unit testing.\\n    var router = this.context.router;\\n\\n\\n    if (router) {\\n      // If user does not specify a `to` prop, return an empty anchor tag.\\n      if (to == null) {\\n        return _react2.default.createElement('a', props);\\n      }\\n\\n      var location = createLocationDescriptor(to, { query: query, hash: hash, state: state });\\n      props.href = router.createHref(location);\\n\\n      if (activeClassName || activeStyle != null && !isEmptyObject(activeStyle)) {\\n        if (router.isActive(location, onlyActiveOnIndex)) {\\n          if (activeClassName) {\\n            if (props.className) {\\n              props.className += ' ' + activeClassName;\\n            } else {\\n              props.className = activeClassName;\\n            }\\n          }\\n\\n          if (activeStyle) props.style = _extends({}, props.style, activeStyle);\\n        }\\n      }\\n    }\\n\\n    return _react2.default.createElement('a', _extends({}, props, { onClick: this.handleClick }));\\n  }\\n});\\n\\nexports.default = Link;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/Link.js\\n// module id = 76\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/Link.js?\");\n\n/***/ },\n/* 77 */\n/*!*****************************************!*\\\n  !*** ./~/react-router/lib/IndexLink.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _Link = __webpack_require__(/*! ./Link */ 76);\\n\\nvar _Link2 = _interopRequireDefault(_Link);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\n/**\\n * An <IndexLink> is used to link to an <IndexRoute>.\\n */\\nvar IndexLink = _react2.default.createClass({\\n  displayName: 'IndexLink',\\n  render: function render() {\\n    return _react2.default.createElement(_Link2.default, _extends({}, this.props, { onlyActiveOnIndex: true }));\\n  }\\n});\\n\\nexports.default = IndexLink;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/IndexLink.js\\n// module id = 77\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/IndexLink.js?\");\n\n/***/ },\n/* 78 */\n/*!******************************************!*\\\n  !*** ./~/react-router/lib/withRouter.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nexports.default = withRouter;\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _hoistNonReactStatics = __webpack_require__(/*! hoist-non-react-statics */ 79);\\n\\nvar _hoistNonReactStatics2 = _interopRequireDefault(_hoistNonReactStatics);\\n\\nvar _PropTypes = __webpack_require__(/*! ./PropTypes */ 38);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction getDisplayName(WrappedComponent) {\\n  return WrappedComponent.displayName || WrappedComponent.name || 'Component';\\n}\\n\\nfunction withRouter(WrappedComponent, options) {\\n  var withRef = options && options.withRef;\\n\\n  var WithRouter = _react2.default.createClass({\\n    displayName: 'WithRouter',\\n\\n    contextTypes: { router: _PropTypes.routerShape },\\n    propTypes: { router: _PropTypes.routerShape },\\n\\n    getWrappedInstance: function getWrappedInstance() {\\n      !withRef ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'To access the wrapped instance, you need to specify ' + '`{ withRef: true }` as the second argument of the withRouter() call.') : (0, _invariant2.default)(false) : void 0;\\n\\n      return this.wrappedInstance;\\n    },\\n    render: function render() {\\n      var _this = this;\\n\\n      var router = this.props.router || this.context.router;\\n      var props = _extends({}, this.props, { router: router });\\n\\n      if (withRef) {\\n        props.ref = function (c) {\\n          _this.wrappedInstance = c;\\n        };\\n      }\\n\\n      return _react2.default.createElement(WrappedComponent, props);\\n    }\\n  });\\n\\n  WithRouter.displayName = 'withRouter(' + getDisplayName(WrappedComponent) + ')';\\n  WithRouter.WrappedComponent = WrappedComponent;\\n\\n  return (0, _hoistNonReactStatics2.default)(WithRouter, WrappedComponent);\\n}\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/withRouter.js\\n// module id = 78\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/withRouter.js?\");\n\n/***/ },\n/* 79 */\n/*!********************************************!*\\\n  !*** ./~/hoist-non-react-statics/index.js ***!\n  \\********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2015, Yahoo! Inc.\\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\\n */\\n'use strict';\\n\\nvar REACT_STATICS = {\\n    childContextTypes: true,\\n    contextTypes: true,\\n    defaultProps: true,\\n    displayName: true,\\n    getDefaultProps: true,\\n    mixins: true,\\n    propTypes: true,\\n    type: true\\n};\\n\\nvar KNOWN_STATICS = {\\n    name: true,\\n    length: true,\\n    prototype: true,\\n    caller: true,\\n    arguments: true,\\n    arity: true\\n};\\n\\nvar isGetOwnPropertySymbolsAvailable = typeof Object.getOwnPropertySymbols === 'function';\\n\\nmodule.exports = function hoistNonReactStatics(targetComponent, sourceComponent, customStatics) {\\n    if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components\\n        var keys = Object.getOwnPropertyNames(sourceComponent);\\n\\n        /* istanbul ignore else */\\n        if (isGetOwnPropertySymbolsAvailable) {\\n            keys = keys.concat(Object.getOwnPropertySymbols(sourceComponent));\\n        }\\n\\n        for (var i = 0; i < keys.length; ++i) {\\n            if (!REACT_STATICS[keys[i]] && !KNOWN_STATICS[keys[i]] && (!customStatics || !customStatics[keys[i]])) {\\n                try {\\n                    targetComponent[keys[i]] = sourceComponent[keys[i]];\\n                } catch (error) {\\n\\n                }\\n            }\\n        }\\n    }\\n\\n    return targetComponent;\\n};\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/hoist-non-react-statics/index.js\\n// module id = 79\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/hoist-non-react-statics/index.js?\");\n\n/***/ },\n/* 80 */\n/*!*********************************************!*\\\n  !*** ./~/react-router/lib/IndexRedirect.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _routerWarning = __webpack_require__(/*! ./routerWarning */ 40);\\n\\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nvar _Redirect = __webpack_require__(/*! ./Redirect */ 81);\\n\\nvar _Redirect2 = _interopRequireDefault(_Redirect);\\n\\nvar _InternalPropTypes = __webpack_require__(/*! ./InternalPropTypes */ 42);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar _React$PropTypes = _react2.default.PropTypes;\\nvar string = _React$PropTypes.string;\\nvar object = _React$PropTypes.object;\\n\\n/**\\n * An <IndexRedirect> is used to redirect from an indexRoute.\\n */\\n\\nvar IndexRedirect = _react2.default.createClass({\\n  displayName: 'IndexRedirect',\\n\\n\\n  statics: {\\n    createRouteFromReactElement: function createRouteFromReactElement(element, parentRoute) {\\n      /* istanbul ignore else: sanity check */\\n      if (parentRoute) {\\n        parentRoute.indexRoute = _Redirect2.default.createRouteFromReactElement(element);\\n      } else {\\n        process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'An <IndexRedirect> does not make sense at the root of your route config') : void 0;\\n      }\\n    }\\n  },\\n\\n  propTypes: {\\n    to: string.isRequired,\\n    query: object,\\n    state: object,\\n    onEnter: _InternalPropTypes.falsy,\\n    children: _InternalPropTypes.falsy\\n  },\\n\\n  /* istanbul ignore next: sanity check */\\n  render: function render() {\\n     true ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, '<IndexRedirect> elements are for router configuration only and should not be rendered') : (0, _invariant2.default)(false) : void 0;\\n  }\\n});\\n\\nexports.default = IndexRedirect;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/IndexRedirect.js\\n// module id = 80\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/IndexRedirect.js?\");\n\n/***/ },\n/* 81 */\n/*!****************************************!*\\\n  !*** ./~/react-router/lib/Redirect.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nvar _RouteUtils = __webpack_require__(/*! ./RouteUtils */ 37);\\n\\nvar _PatternUtils = __webpack_require__(/*! ./PatternUtils */ 43);\\n\\nvar _InternalPropTypes = __webpack_require__(/*! ./InternalPropTypes */ 42);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar _React$PropTypes = _react2.default.PropTypes;\\nvar string = _React$PropTypes.string;\\nvar object = _React$PropTypes.object;\\n\\n/**\\n * A <Redirect> is used to declare another URL path a client should\\n * be sent to when they request a given URL.\\n *\\n * Redirects are placed alongside routes in the route configuration\\n * and are traversed in the same manner.\\n */\\n\\nvar Redirect = _react2.default.createClass({\\n  displayName: 'Redirect',\\n\\n\\n  statics: {\\n    createRouteFromReactElement: function createRouteFromReactElement(element) {\\n      var route = (0, _RouteUtils.createRouteFromReactElement)(element);\\n\\n      if (route.from) route.path = route.from;\\n\\n      route.onEnter = function (nextState, replace) {\\n        var location = nextState.location;\\n        var params = nextState.params;\\n\\n\\n        var pathname = void 0;\\n        if (route.to.charAt(0) === '/') {\\n          pathname = (0, _PatternUtils.formatPattern)(route.to, params);\\n        } else if (!route.to) {\\n          pathname = location.pathname;\\n        } else {\\n          var routeIndex = nextState.routes.indexOf(route);\\n          var parentPattern = Redirect.getRoutePattern(nextState.routes, routeIndex - 1);\\n          var pattern = parentPattern.replace(/\\\\/*$/, '/') + route.to;\\n          pathname = (0, _PatternUtils.formatPattern)(pattern, params);\\n        }\\n\\n        replace({\\n          pathname: pathname,\\n          query: route.query || location.query,\\n          state: route.state || location.state\\n        });\\n      };\\n\\n      return route;\\n    },\\n    getRoutePattern: function getRoutePattern(routes, routeIndex) {\\n      var parentPattern = '';\\n\\n      for (var i = routeIndex; i >= 0; i--) {\\n        var route = routes[i];\\n        var pattern = route.path || '';\\n\\n        parentPattern = pattern.replace(/\\\\/*$/, '/') + parentPattern;\\n\\n        if (pattern.indexOf('/') === 0) break;\\n      }\\n\\n      return '/' + parentPattern;\\n    }\\n  },\\n\\n  propTypes: {\\n    path: string,\\n    from: string, // Alias for path\\n    to: string.isRequired,\\n    query: object,\\n    state: object,\\n    onEnter: _InternalPropTypes.falsy,\\n    children: _InternalPropTypes.falsy\\n  },\\n\\n  /* istanbul ignore next: sanity check */\\n  render: function render() {\\n     true ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, '<Redirect> elements are for router configuration only and should not be rendered') : (0, _invariant2.default)(false) : void 0;\\n  }\\n});\\n\\nexports.default = Redirect;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/Redirect.js\\n// module id = 81\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/Redirect.js?\");\n\n/***/ },\n/* 82 */\n/*!******************************************!*\\\n  !*** ./~/react-router/lib/IndexRoute.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _routerWarning = __webpack_require__(/*! ./routerWarning */ 40);\\n\\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nvar _RouteUtils = __webpack_require__(/*! ./RouteUtils */ 37);\\n\\nvar _InternalPropTypes = __webpack_require__(/*! ./InternalPropTypes */ 42);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar func = _react2.default.PropTypes.func;\\n\\n/**\\n * An <IndexRoute> is used to specify its parent's <Route indexRoute> in\\n * a JSX route config.\\n */\\n\\nvar IndexRoute = _react2.default.createClass({\\n  displayName: 'IndexRoute',\\n\\n\\n  statics: {\\n    createRouteFromReactElement: function createRouteFromReactElement(element, parentRoute) {\\n      /* istanbul ignore else: sanity check */\\n      if (parentRoute) {\\n        parentRoute.indexRoute = (0, _RouteUtils.createRouteFromReactElement)(element);\\n      } else {\\n        process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'An <IndexRoute> does not make sense at the root of your route config') : void 0;\\n      }\\n    }\\n  },\\n\\n  propTypes: {\\n    path: _InternalPropTypes.falsy,\\n    component: _InternalPropTypes.component,\\n    components: _InternalPropTypes.components,\\n    getComponent: func,\\n    getComponents: func\\n  },\\n\\n  /* istanbul ignore next: sanity check */\\n  render: function render() {\\n     true ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, '<IndexRoute> elements are for router configuration only and should not be rendered') : (0, _invariant2.default)(false) : void 0;\\n  }\\n});\\n\\nexports.default = IndexRoute;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/IndexRoute.js\\n// module id = 82\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/IndexRoute.js?\");\n\n/***/ },\n/* 83 */\n/*!*************************************!*\\\n  !*** ./~/react-router/lib/Route.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nvar _RouteUtils = __webpack_require__(/*! ./RouteUtils */ 37);\\n\\nvar _InternalPropTypes = __webpack_require__(/*! ./InternalPropTypes */ 42);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar _React$PropTypes = _react2.default.PropTypes;\\nvar string = _React$PropTypes.string;\\nvar func = _React$PropTypes.func;\\n\\n/**\\n * A <Route> is used to declare which components are rendered to the\\n * page when the URL matches a given pattern.\\n *\\n * Routes are arranged in a nested tree structure. When a new URL is\\n * requested, the tree is searched depth-first to find a route whose\\n * path matches the URL.  When one is found, all routes in the tree\\n * that lead to it are considered \\\"active\\\" and their components are\\n * rendered into the DOM, nested in the same order as in the tree.\\n */\\n\\nvar Route = _react2.default.createClass({\\n  displayName: 'Route',\\n\\n\\n  statics: {\\n    createRouteFromReactElement: _RouteUtils.createRouteFromReactElement\\n  },\\n\\n  propTypes: {\\n    path: string,\\n    component: _InternalPropTypes.component,\\n    components: _InternalPropTypes.components,\\n    getComponent: func,\\n    getComponents: func\\n  },\\n\\n  /* istanbul ignore next: sanity check */\\n  render: function render() {\\n     true ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, '<Route> elements are for router configuration only and should not be rendered') : (0, _invariant2.default)(false) : void 0;\\n  }\\n});\\n\\nexports.default = Route;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/Route.js\\n// module id = 83\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/Route.js?\");\n\n/***/ },\n/* 84 */\n/*!***************************************!*\\\n  !*** ./~/react-router/lib/History.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _routerWarning = __webpack_require__(/*! ./routerWarning */ 40);\\n\\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\\n\\nvar _InternalPropTypes = __webpack_require__(/*! ./InternalPropTypes */ 42);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\n/**\\n * A mixin that adds the \\\"history\\\" instance variable to components.\\n */\\nvar History = {\\n\\n  contextTypes: {\\n    history: _InternalPropTypes.history\\n  },\\n\\n  componentWillMount: function componentWillMount() {\\n    process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'the `History` mixin is deprecated, please access `context.router` with your own `contextTypes`. http://tiny.cc/router-historymixin') : void 0;\\n    this.history = this.context.history;\\n  }\\n};\\n\\nexports.default = History;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/History.js\\n// module id = 84\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/History.js?\");\n\n/***/ },\n/* 85 */\n/*!*****************************************!*\\\n  !*** ./~/react-router/lib/Lifecycle.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _routerWarning = __webpack_require__(/*! ./routerWarning */ 40);\\n\\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar object = _react2.default.PropTypes.object;\\n\\n/**\\n * The Lifecycle mixin adds the routerWillLeave lifecycle method to a\\n * component that may be used to cancel a transition or prompt the user\\n * for confirmation.\\n *\\n * On standard transitions, routerWillLeave receives a single argument: the\\n * location we're transitioning to. To cancel the transition, return false.\\n * To prompt the user for confirmation, return a prompt message (string).\\n *\\n * During the beforeunload event (assuming you're using the useBeforeUnload\\n * history enhancer), routerWillLeave does not receive a location object\\n * because it isn't possible for us to know the location we're transitioning\\n * to. In this case routerWillLeave must return a prompt message to prevent\\n * the user from closing the window/tab.\\n */\\n\\nvar Lifecycle = {\\n\\n  contextTypes: {\\n    history: object.isRequired,\\n    // Nested children receive the route as context, either\\n    // set by the route component using the RouteContext mixin\\n    // or by some other ancestor.\\n    route: object\\n  },\\n\\n  propTypes: {\\n    // Route components receive the route object as a prop.\\n    route: object\\n  },\\n\\n  componentDidMount: function componentDidMount() {\\n    process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'the `Lifecycle` mixin is deprecated, please use `context.router.setRouteLeaveHook(route, hook)`. http://tiny.cc/router-lifecyclemixin') : void 0;\\n    !this.routerWillLeave ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'The Lifecycle mixin requires you to define a routerWillLeave method') : (0, _invariant2.default)(false) : void 0;\\n\\n    var route = this.props.route || this.context.route;\\n\\n    !route ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'The Lifecycle mixin must be used on either a) a <Route component> or ' + 'b) a descendant of a <Route component> that uses the RouteContext mixin') : (0, _invariant2.default)(false) : void 0;\\n\\n    this._unlistenBeforeLeavingRoute = this.context.history.listenBeforeLeavingRoute(route, this.routerWillLeave);\\n  },\\n  componentWillUnmount: function componentWillUnmount() {\\n    if (this._unlistenBeforeLeavingRoute) this._unlistenBeforeLeavingRoute();\\n  }\\n};\\n\\nexports.default = Lifecycle;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/Lifecycle.js\\n// module id = 85\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/Lifecycle.js?\");\n\n/***/ },\n/* 86 */\n/*!********************************************!*\\\n  !*** ./~/react-router/lib/RouteContext.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _routerWarning = __webpack_require__(/*! ./routerWarning */ 40);\\n\\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar object = _react2.default.PropTypes.object;\\n\\n/**\\n * The RouteContext mixin provides a convenient way for route\\n * components to set the route in context. This is needed for\\n * routes that render elements that want to use the Lifecycle\\n * mixin to prevent transitions.\\n */\\n\\nvar RouteContext = {\\n\\n  propTypes: {\\n    route: object.isRequired\\n  },\\n\\n  childContextTypes: {\\n    route: object.isRequired\\n  },\\n\\n  getChildContext: function getChildContext() {\\n    return {\\n      route: this.props.route\\n    };\\n  },\\n  componentWillMount: function componentWillMount() {\\n    process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, 'The `RouteContext` mixin is deprecated. You can provide `this.props.route` on context with your own `contextTypes`. http://tiny.cc/router-routecontextmixin') : void 0;\\n  }\\n};\\n\\nexports.default = RouteContext;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/RouteContext.js\\n// module id = 86\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/RouteContext.js?\");\n\n/***/ },\n/* 87 */\n/*!*****************************************!*\\\n  !*** ./~/react-router/lib/useRoutes.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nvar _useQueries = __webpack_require__(/*! history/lib/useQueries */ 62);\\n\\nvar _useQueries2 = _interopRequireDefault(_useQueries);\\n\\nvar _createTransitionManager = __webpack_require__(/*! ./createTransitionManager */ 65);\\n\\nvar _createTransitionManager2 = _interopRequireDefault(_createTransitionManager);\\n\\nvar _routerWarning = __webpack_require__(/*! ./routerWarning */ 40);\\n\\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\\n\\n/**\\n * Returns a new createHistory function that may be used to create\\n * history objects that know about routing.\\n *\\n * Enhances history objects with the following methods:\\n *\\n * - listen((error, nextState) => {})\\n * - listenBeforeLeavingRoute(route, (nextLocation) => {})\\n * - match(location, (error, redirectLocation, nextState) => {})\\n * - isActive(pathname, query, indexOnly=false)\\n */\\nfunction useRoutes(createHistory) {\\n  process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, '`useRoutes` is deprecated. Please use `createTransitionManager` instead.') : void 0;\\n\\n  return function () {\\n    var _ref = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\\n\\n    var routes = _ref.routes;\\n\\n    var options = _objectWithoutProperties(_ref, ['routes']);\\n\\n    var history = (0, _useQueries2.default)(createHistory)(options);\\n    var transitionManager = (0, _createTransitionManager2.default)(history, routes);\\n    return _extends({}, history, transitionManager);\\n  };\\n}\\n\\nexports.default = useRoutes;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/useRoutes.js\\n// module id = 87\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/useRoutes.js?\");\n\n/***/ },\n/* 88 */\n/*!**********************************************!*\\\n  !*** ./~/react-router/lib/RoutingContext.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _RouterContext = __webpack_require__(/*! ./RouterContext */ 73);\\n\\nvar _RouterContext2 = _interopRequireDefault(_RouterContext);\\n\\nvar _routerWarning = __webpack_require__(/*! ./routerWarning */ 40);\\n\\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar RoutingContext = _react2.default.createClass({\\n  displayName: 'RoutingContext',\\n  componentWillMount: function componentWillMount() {\\n    process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(false, '`RoutingContext` has been renamed to `RouterContext`. Please use `import { RouterContext } from \\\\'react-router\\\\'`. http://tiny.cc/router-routercontext') : void 0;\\n  },\\n  render: function render() {\\n    return _react2.default.createElement(_RouterContext2.default, this.props);\\n  }\\n});\\n\\nexports.default = RoutingContext;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/RoutingContext.js\\n// module id = 88\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/RoutingContext.js?\");\n\n/***/ },\n/* 89 */\n/*!*************************************!*\\\n  !*** ./~/react-router/lib/match.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nvar _Actions = __webpack_require__(/*! history/lib/Actions */ 48);\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nvar _createMemoryHistory = __webpack_require__(/*! ./createMemoryHistory */ 90);\\n\\nvar _createMemoryHistory2 = _interopRequireDefault(_createMemoryHistory);\\n\\nvar _createTransitionManager = __webpack_require__(/*! ./createTransitionManager */ 65);\\n\\nvar _createTransitionManager2 = _interopRequireDefault(_createTransitionManager);\\n\\nvar _RouteUtils = __webpack_require__(/*! ./RouteUtils */ 37);\\n\\nvar _RouterUtils = __webpack_require__(/*! ./RouterUtils */ 75);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\\n\\n/**\\n * A high-level API to be used for server-side rendering.\\n *\\n * This function matches a location to a set of routes and calls\\n * callback(error, redirectLocation, renderProps) when finished.\\n *\\n * Note: You probably don't want to use this in a browser unless you're using\\n * server-side rendering with async routes.\\n */\\nfunction match(_ref, callback) {\\n  var history = _ref.history;\\n  var routes = _ref.routes;\\n  var location = _ref.location;\\n\\n  var options = _objectWithoutProperties(_ref, ['history', 'routes', 'location']);\\n\\n  !(history || location) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2.default)(false, 'match needs a history or a location') : (0, _invariant2.default)(false) : void 0;\\n\\n  history = history ? history : (0, _createMemoryHistory2.default)(options);\\n  var transitionManager = (0, _createTransitionManager2.default)(history, (0, _RouteUtils.createRoutes)(routes));\\n\\n  var unlisten = void 0;\\n\\n  if (location) {\\n    // Allow match({ location: '/the/path', ... })\\n    location = history.createLocation(location);\\n  } else {\\n    // Pick up the location from the history via synchronous history.listen\\n    // call if needed.\\n    unlisten = history.listen(function (historyLocation) {\\n      location = historyLocation;\\n    });\\n  }\\n\\n  var router = (0, _RouterUtils.createRouterObject)(history, transitionManager);\\n  history = (0, _RouterUtils.createRoutingHistory)(history, transitionManager);\\n\\n  transitionManager.match(location, function (error, redirectLocation, nextState) {\\n    callback(error, redirectLocation && router.createLocation(redirectLocation, _Actions.REPLACE), nextState && _extends({}, nextState, {\\n      history: history,\\n      router: router,\\n      matchContext: { history: history, transitionManager: transitionManager, router: router }\\n    }));\\n\\n    // Defer removing the listener to here to prevent DOM histories from having\\n    // to unwind DOM event listeners unnecessarily, in case callback renders a\\n    // <Router> and attaches another history listener.\\n    if (unlisten) {\\n      unlisten();\\n    }\\n  });\\n}\\n\\nexports.default = match;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/match.js\\n// module id = 89\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/match.js?\");\n\n/***/ },\n/* 90 */\n/*!***************************************************!*\\\n  !*** ./~/react-router/lib/createMemoryHistory.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\nexports.default = createMemoryHistory;\\n\\nvar _useQueries = __webpack_require__(/*! history/lib/useQueries */ 62);\\n\\nvar _useQueries2 = _interopRequireDefault(_useQueries);\\n\\nvar _useBasename = __webpack_require__(/*! history/lib/useBasename */ 91);\\n\\nvar _useBasename2 = _interopRequireDefault(_useBasename);\\n\\nvar _createMemoryHistory = __webpack_require__(/*! history/lib/createMemoryHistory */ 92);\\n\\nvar _createMemoryHistory2 = _interopRequireDefault(_createMemoryHistory);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction createMemoryHistory(options) {\\n  // signatures and type checking differ between `useRoutes` and\\n  // `createMemoryHistory`, have to create `memoryHistory` first because\\n  // `useQueries` doesn't understand the signature\\n  var memoryHistory = (0, _createMemoryHistory2.default)(options);\\n  var createHistory = function createHistory() {\\n    return memoryHistory;\\n  };\\n  var history = (0, _useQueries2.default)((0, _useBasename2.default)(createHistory))(options);\\n  history.__v2_compatible__ = true;\\n  return history;\\n}\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/createMemoryHistory.js\\n// module id = 90\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/createMemoryHistory.js?\");\n\n/***/ },\n/* 91 */\n/*!**************************************!*\\\n  !*** ./~/history/lib/useBasename.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar _warning = __webpack_require__(/*! warning */ 47);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nvar _ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 50);\\n\\nvar _PathUtils = __webpack_require__(/*! ./PathUtils */ 49);\\n\\nvar _runTransitionHook = __webpack_require__(/*! ./runTransitionHook */ 60);\\n\\nvar _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);\\n\\nvar _deprecate = __webpack_require__(/*! ./deprecate */ 61);\\n\\nvar _deprecate2 = _interopRequireDefault(_deprecate);\\n\\nfunction useBasename(createHistory) {\\n  return function () {\\n    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\\n\\n    var history = createHistory(options);\\n\\n    var basename = options.basename;\\n\\n    var checkedBaseHref = false;\\n\\n    function checkBaseHref() {\\n      if (checkedBaseHref) {\\n        return;\\n      }\\n\\n      // Automatically use the value of <base href> in HTML\\n      // documents as basename if it's not explicitly given.\\n      if (basename == null && _ExecutionEnvironment.canUseDOM) {\\n        var base = document.getElementsByTagName('base')[0];\\n        var baseHref = base && base.getAttribute('href');\\n\\n        if (baseHref != null) {\\n          basename = baseHref;\\n\\n          process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'Automatically setting basename using <base href> is deprecated and will ' + 'be removed in the next major release. The semantics of <base href> are ' + 'subtly different from basename. Please pass the basename explicitly in ' + 'the options to createHistory') : undefined;\\n        }\\n      }\\n\\n      checkedBaseHref = true;\\n    }\\n\\n    function addBasename(location) {\\n      checkBaseHref();\\n\\n      if (basename && location.basename == null) {\\n        if (location.pathname.indexOf(basename) === 0) {\\n          location.pathname = location.pathname.substring(basename.length);\\n          location.basename = basename;\\n\\n          if (location.pathname === '') location.pathname = '/';\\n        } else {\\n          location.basename = '';\\n        }\\n      }\\n\\n      return location;\\n    }\\n\\n    function prependBasename(location) {\\n      checkBaseHref();\\n\\n      if (!basename) return location;\\n\\n      if (typeof location === 'string') location = _PathUtils.parsePath(location);\\n\\n      var pname = location.pathname;\\n      var normalizedBasename = basename.slice(-1) === '/' ? basename : basename + '/';\\n      var normalizedPathname = pname.charAt(0) === '/' ? pname.slice(1) : pname;\\n      var pathname = normalizedBasename + normalizedPathname;\\n\\n      return _extends({}, location, {\\n        pathname: pathname\\n      });\\n    }\\n\\n    // Override all read methods with basename-aware versions.\\n    function listenBefore(hook) {\\n      return history.listenBefore(function (location, callback) {\\n        _runTransitionHook2['default'](hook, addBasename(location), callback);\\n      });\\n    }\\n\\n    function listen(listener) {\\n      return history.listen(function (location) {\\n        listener(addBasename(location));\\n      });\\n    }\\n\\n    // Override all write methods with basename-aware versions.\\n    function push(location) {\\n      history.push(prependBasename(location));\\n    }\\n\\n    function replace(location) {\\n      history.replace(prependBasename(location));\\n    }\\n\\n    function createPath(location) {\\n      return history.createPath(prependBasename(location));\\n    }\\n\\n    function createHref(location) {\\n      return history.createHref(prependBasename(location));\\n    }\\n\\n    function createLocation(location) {\\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\\n        args[_key - 1] = arguments[_key];\\n      }\\n\\n      return addBasename(history.createLocation.apply(history, [prependBasename(location)].concat(args)));\\n    }\\n\\n    // deprecated\\n    function pushState(state, path) {\\n      if (typeof path === 'string') path = _PathUtils.parsePath(path);\\n\\n      push(_extends({ state: state }, path));\\n    }\\n\\n    // deprecated\\n    function replaceState(state, path) {\\n      if (typeof path === 'string') path = _PathUtils.parsePath(path);\\n\\n      replace(_extends({ state: state }, path));\\n    }\\n\\n    return _extends({}, history, {\\n      listenBefore: listenBefore,\\n      listen: listen,\\n      push: push,\\n      replace: replace,\\n      createPath: createPath,\\n      createHref: createHref,\\n      createLocation: createLocation,\\n\\n      pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'),\\n      replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead')\\n    });\\n  };\\n}\\n\\nexports['default'] = useBasename;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/history/lib/useBasename.js\\n// module id = 91\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/history/lib/useBasename.js?\");\n\n/***/ },\n/* 92 */\n/*!**********************************************!*\\\n  !*** ./~/history/lib/createMemoryHistory.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar _warning = __webpack_require__(/*! warning */ 47);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nvar _PathUtils = __webpack_require__(/*! ./PathUtils */ 49);\\n\\nvar _Actions = __webpack_require__(/*! ./Actions */ 48);\\n\\nvar _createHistory = __webpack_require__(/*! ./createHistory */ 54);\\n\\nvar _createHistory2 = _interopRequireDefault(_createHistory);\\n\\nfunction createStateStorage(entries) {\\n  return entries.filter(function (entry) {\\n    return entry.state;\\n  }).reduce(function (memo, entry) {\\n    memo[entry.key] = entry.state;\\n    return memo;\\n  }, {});\\n}\\n\\nfunction createMemoryHistory() {\\n  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\\n\\n  if (Array.isArray(options)) {\\n    options = { entries: options };\\n  } else if (typeof options === 'string') {\\n    options = { entries: [options] };\\n  }\\n\\n  var history = _createHistory2['default'](_extends({}, options, {\\n    getCurrentLocation: getCurrentLocation,\\n    finishTransition: finishTransition,\\n    saveState: saveState,\\n    go: go\\n  }));\\n\\n  var _options = options;\\n  var entries = _options.entries;\\n  var current = _options.current;\\n\\n  if (typeof entries === 'string') {\\n    entries = [entries];\\n  } else if (!Array.isArray(entries)) {\\n    entries = ['/'];\\n  }\\n\\n  entries = entries.map(function (entry) {\\n    var key = history.createKey();\\n\\n    if (typeof entry === 'string') return { pathname: entry, key: key };\\n\\n    if (typeof entry === 'object' && entry) return _extends({}, entry, { key: key });\\n\\n     true ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Unable to create history entry from %s', entry) : _invariant2['default'](false) : undefined;\\n  });\\n\\n  if (current == null) {\\n    current = entries.length - 1;\\n  } else {\\n    !(current >= 0 && current < entries.length) ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Current index must be >= 0 and < %s, was %s', entries.length, current) : _invariant2['default'](false) : undefined;\\n  }\\n\\n  var storage = createStateStorage(entries);\\n\\n  function saveState(key, state) {\\n    storage[key] = state;\\n  }\\n\\n  function readState(key) {\\n    return storage[key];\\n  }\\n\\n  function getCurrentLocation() {\\n    var entry = entries[current];\\n    var basename = entry.basename;\\n    var pathname = entry.pathname;\\n    var search = entry.search;\\n\\n    var path = (basename || '') + pathname + (search || '');\\n\\n    var key = undefined,\\n        state = undefined;\\n    if (entry.key) {\\n      key = entry.key;\\n      state = readState(key);\\n    } else {\\n      key = history.createKey();\\n      state = null;\\n      entry.key = key;\\n    }\\n\\n    var location = _PathUtils.parsePath(path);\\n\\n    return history.createLocation(_extends({}, location, { state: state }), undefined, key);\\n  }\\n\\n  function canGo(n) {\\n    var index = current + n;\\n    return index >= 0 && index < entries.length;\\n  }\\n\\n  function go(n) {\\n    if (n) {\\n      if (!canGo(n)) {\\n        process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'Cannot go(%s) there is not enough history', n) : undefined;\\n        return;\\n      }\\n\\n      current += n;\\n\\n      var currentLocation = getCurrentLocation();\\n\\n      // change action to POP\\n      history.transitionTo(_extends({}, currentLocation, { action: _Actions.POP }));\\n    }\\n  }\\n\\n  function finishTransition(location) {\\n    switch (location.action) {\\n      case _Actions.PUSH:\\n        current += 1;\\n\\n        // if we are not on the top of stack\\n        // remove rest and push new\\n        if (current < entries.length) entries.splice(current);\\n\\n        entries.push(location);\\n        saveState(location.key, location.state);\\n        break;\\n      case _Actions.REPLACE:\\n        entries[current] = location;\\n        saveState(location.key, location.state);\\n        break;\\n    }\\n  }\\n\\n  return history;\\n}\\n\\nexports['default'] = createMemoryHistory;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/history/lib/createMemoryHistory.js\\n// module id = 92\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/history/lib/createMemoryHistory.js?\");\n\n/***/ },\n/* 93 */\n/*!************************************************!*\\\n  !*** ./~/react-router/lib/useRouterHistory.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\nexports.default = useRouterHistory;\\n\\nvar _useQueries = __webpack_require__(/*! history/lib/useQueries */ 62);\\n\\nvar _useQueries2 = _interopRequireDefault(_useQueries);\\n\\nvar _useBasename = __webpack_require__(/*! history/lib/useBasename */ 91);\\n\\nvar _useBasename2 = _interopRequireDefault(_useBasename);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction useRouterHistory(createHistory) {\\n  return function (options) {\\n    var history = (0, _useQueries2.default)((0, _useBasename2.default)(createHistory))(options);\\n    history.__v2_compatible__ = true;\\n    return history;\\n  };\\n}\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/useRouterHistory.js\\n// module id = 93\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/useRouterHistory.js?\");\n\n/***/ },\n/* 94 */\n/*!*****************************************************!*\\\n  !*** ./~/react-router/lib/applyRouterMiddleware.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _RouterContext = __webpack_require__(/*! ./RouterContext */ 73);\\n\\nvar _RouterContext2 = _interopRequireDefault(_RouterContext);\\n\\nvar _routerWarning = __webpack_require__(/*! ./routerWarning */ 40);\\n\\nvar _routerWarning2 = _interopRequireDefault(_routerWarning);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nexports.default = function () {\\n  for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) {\\n    middlewares[_key] = arguments[_key];\\n  }\\n\\n  if (process.env.NODE_ENV !== 'production') {\\n    middlewares.forEach(function (middleware, index) {\\n      process.env.NODE_ENV !== 'production' ? (0, _routerWarning2.default)(middleware.renderRouterContext || middleware.renderRouteComponent, 'The middleware specified at index ' + index + ' does not appear to be ' + 'a valid React Router middleware.') : void 0;\\n    });\\n  }\\n\\n  var withContext = middlewares.map(function (middleware) {\\n    return middleware.renderRouterContext;\\n  }).filter(Boolean);\\n  var withComponent = middlewares.map(function (middleware) {\\n    return middleware.renderRouteComponent;\\n  }).filter(Boolean);\\n\\n  var makeCreateElement = function makeCreateElement() {\\n    var baseCreateElement = arguments.length <= 0 || arguments[0] === undefined ? _react.createElement : arguments[0];\\n    return function (Component, props) {\\n      return withComponent.reduceRight(function (previous, renderRouteComponent) {\\n        return renderRouteComponent(previous, props);\\n      }, baseCreateElement(Component, props));\\n    };\\n  };\\n\\n  return function (renderProps) {\\n    return withContext.reduceRight(function (previous, renderRouterContext) {\\n      return renderRouterContext(previous, renderProps);\\n    }, _react2.default.createElement(_RouterContext2.default, _extends({}, renderProps, {\\n      createElement: makeCreateElement(renderProps.createElement)\\n    })));\\n  };\\n};\\n\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/applyRouterMiddleware.js\\n// module id = 94\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/applyRouterMiddleware.js?\");\n\n/***/ },\n/* 95 */\n/*!**********************************************!*\\\n  !*** ./~/react-router/lib/browserHistory.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _createBrowserHistory = __webpack_require__(/*! history/lib/createBrowserHistory */ 96);\\n\\nvar _createBrowserHistory2 = _interopRequireDefault(_createBrowserHistory);\\n\\nvar _createRouterHistory = __webpack_require__(/*! ./createRouterHistory */ 97);\\n\\nvar _createRouterHistory2 = _interopRequireDefault(_createRouterHistory);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nexports.default = (0, _createRouterHistory2.default)(_createBrowserHistory2.default);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/browserHistory.js\\n// module id = 95\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/browserHistory.js?\");\n\n/***/ },\n/* 96 */\n/*!***********************************************!*\\\n  !*** ./~/history/lib/createBrowserHistory.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nvar _Actions = __webpack_require__(/*! ./Actions */ 48);\\n\\nvar _PathUtils = __webpack_require__(/*! ./PathUtils */ 49);\\n\\nvar _ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 50);\\n\\nvar _DOMUtils = __webpack_require__(/*! ./DOMUtils */ 51);\\n\\nvar _DOMStateStorage = __webpack_require__(/*! ./DOMStateStorage */ 52);\\n\\nvar _createDOMHistory = __webpack_require__(/*! ./createDOMHistory */ 53);\\n\\nvar _createDOMHistory2 = _interopRequireDefault(_createDOMHistory);\\n\\n/**\\n * Creates and returns a history object that uses HTML5's history API\\n * (pushState, replaceState, and the popstate event) to manage history.\\n * This is the recommended method of managing history in browsers because\\n * it provides the cleanest URLs.\\n *\\n * Note: In browsers that do not support the HTML5 history API full\\n * page reloads will be used to preserve URLs.\\n */\\nfunction createBrowserHistory() {\\n  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\\n\\n  !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Browser history needs a DOM') : _invariant2['default'](false) : undefined;\\n\\n  var forceRefresh = options.forceRefresh;\\n\\n  var isSupported = _DOMUtils.supportsHistory();\\n  var useRefresh = !isSupported || forceRefresh;\\n\\n  function getCurrentLocation(historyState) {\\n    try {\\n      historyState = historyState || window.history.state || {};\\n    } catch (e) {\\n      historyState = {};\\n    }\\n\\n    var path = _DOMUtils.getWindowPath();\\n    var _historyState = historyState;\\n    var key = _historyState.key;\\n\\n    var state = undefined;\\n    if (key) {\\n      state = _DOMStateStorage.readState(key);\\n    } else {\\n      state = null;\\n      key = history.createKey();\\n\\n      if (isSupported) window.history.replaceState(_extends({}, historyState, { key: key }), null);\\n    }\\n\\n    var location = _PathUtils.parsePath(path);\\n\\n    return history.createLocation(_extends({}, location, { state: state }), undefined, key);\\n  }\\n\\n  function startPopStateListener(_ref) {\\n    var transitionTo = _ref.transitionTo;\\n\\n    function popStateListener(event) {\\n      if (event.state === undefined) return; // Ignore extraneous popstate events in WebKit.\\n\\n      transitionTo(getCurrentLocation(event.state));\\n    }\\n\\n    _DOMUtils.addEventListener(window, 'popstate', popStateListener);\\n\\n    return function () {\\n      _DOMUtils.removeEventListener(window, 'popstate', popStateListener);\\n    };\\n  }\\n\\n  function finishTransition(location) {\\n    var basename = location.basename;\\n    var pathname = location.pathname;\\n    var search = location.search;\\n    var hash = location.hash;\\n    var state = location.state;\\n    var action = location.action;\\n    var key = location.key;\\n\\n    if (action === _Actions.POP) return; // Nothing to do.\\n\\n    _DOMStateStorage.saveState(key, state);\\n\\n    var path = (basename || '') + pathname + search + hash;\\n    var historyState = {\\n      key: key\\n    };\\n\\n    if (action === _Actions.PUSH) {\\n      if (useRefresh) {\\n        window.location.href = path;\\n        return false; // Prevent location update.\\n      } else {\\n          window.history.pushState(historyState, null, path);\\n        }\\n    } else {\\n      // REPLACE\\n      if (useRefresh) {\\n        window.location.replace(path);\\n        return false; // Prevent location update.\\n      } else {\\n          window.history.replaceState(historyState, null, path);\\n        }\\n    }\\n  }\\n\\n  var history = _createDOMHistory2['default'](_extends({}, options, {\\n    getCurrentLocation: getCurrentLocation,\\n    finishTransition: finishTransition,\\n    saveState: _DOMStateStorage.saveState\\n  }));\\n\\n  var listenerCount = 0,\\n      stopPopStateListener = undefined;\\n\\n  function listenBefore(listener) {\\n    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\\n\\n    var unlisten = history.listenBefore(listener);\\n\\n    return function () {\\n      unlisten();\\n\\n      if (--listenerCount === 0) stopPopStateListener();\\n    };\\n  }\\n\\n  function listen(listener) {\\n    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\\n\\n    var unlisten = history.listen(listener);\\n\\n    return function () {\\n      unlisten();\\n\\n      if (--listenerCount === 0) stopPopStateListener();\\n    };\\n  }\\n\\n  // deprecated\\n  function registerTransitionHook(hook) {\\n    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\\n\\n    history.registerTransitionHook(hook);\\n  }\\n\\n  // deprecated\\n  function unregisterTransitionHook(hook) {\\n    history.unregisterTransitionHook(hook);\\n\\n    if (--listenerCount === 0) stopPopStateListener();\\n  }\\n\\n  return _extends({}, history, {\\n    listenBefore: listenBefore,\\n    listen: listen,\\n    registerTransitionHook: registerTransitionHook,\\n    unregisterTransitionHook: unregisterTransitionHook\\n  });\\n}\\n\\nexports['default'] = createBrowserHistory;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/history/lib/createBrowserHistory.js\\n// module id = 96\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/history/lib/createBrowserHistory.js?\");\n\n/***/ },\n/* 97 */\n/*!***************************************************!*\\\n  !*** ./~/react-router/lib/createRouterHistory.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nexports.default = function (createHistory) {\\n  var history = void 0;\\n  if (canUseDOM) history = (0, _useRouterHistory2.default)(createHistory)();\\n  return history;\\n};\\n\\nvar _useRouterHistory = __webpack_require__(/*! ./useRouterHistory */ 93);\\n\\nvar _useRouterHistory2 = _interopRequireDefault(_useRouterHistory);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\\n\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/createRouterHistory.js\\n// module id = 97\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/createRouterHistory.js?\");\n\n/***/ },\n/* 98 */\n/*!*******************************************!*\\\n  !*** ./~/react-router/lib/hashHistory.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _createHashHistory = __webpack_require__(/*! history/lib/createHashHistory */ 46);\\n\\nvar _createHashHistory2 = _interopRequireDefault(_createHashHistory);\\n\\nvar _createRouterHistory = __webpack_require__(/*! ./createRouterHistory */ 97);\\n\\nvar _createRouterHistory2 = _interopRequireDefault(_createRouterHistory);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nexports.default = (0, _createRouterHistory2.default)(_createHashHistory2.default);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-router/lib/hashHistory.js\\n// module id = 98\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-router/lib/hashHistory.js?\");\n\n/***/ },\n/* 99 */\n/*!**********************************************!*\\\n  !*** ./javascript/fubu-diagnostics-view.jsx ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _reactRouter = __webpack_require__(/*! react-router */ 36);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\\"Cannot call a class as a function\\\"); } }\\n\\nvar FubuDiagnosticsView = function FubuDiagnosticsView(view, section) {\\n    var _this = this;\\n\\n    _classCallCheck(this, FubuDiagnosticsView);\\n\\n    this.url = section.key + '/' + view.key;\\n    this.key = view.key;\\n\\n    var routeName = section.key + ':' + view.key;\\n\\n    this.anchor = '#' + this.url;\\n    this.hasParameters = false;\\n    this.description = view.description;\\n    this.title = view.title;\\n\\n    var component = view.component;\\n    if (view.hasOwnProperty('render')) {\\n        component = _react2.default.createClass({\\n            displayName: 'component',\\n\\n            render: view.render\\n        });\\n    }\\n\\n    if (!component) {\\n        throw new Error(\\\"You need to either specify a React in view.component or pass in a render() function\\\");\\n    }\\n\\n    if (view.route) {\\n        var route = FubuDiagnostics.routes[view.route];\\n        if (route.params && route.params.length > 0) {\\n            this.hasParameters = true;\\n            route.params.forEach(function (x) {\\n                _this.url = _this.url + '/:' + x.Name;\\n            });\\n        }\\n    }\\n    this.route = _react2.default.createElement(_reactRouter.Route, { key: this.key, name: routeName, path: this.url, component: component });\\n};\\n\\nmodule.exports = FubuDiagnosticsView;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/fubu-diagnostics-view.jsx\\n// module id = 99\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/fubu-diagnostics-view.jsx?\");\n\n/***/ },\n/* 100 */\n/*!********************************************!*\\\n  !*** ./javascript/active-section-view.jsx ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _sectionLinks = __webpack_require__(/*! ./section-links */ 101);\\n\\nvar _sectionLinks2 = _interopRequireDefault(_sectionLinks);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar ActiveSectionView = _react2.default.createClass({\\n    displayName: 'ActiveSectionView',\\n    render: function render() {\\n        var path = this.props.location;\\n        var sectionKey = path.split('/')[1];\\n        var activeSection = FubuDiagnostics.section(sectionKey);\\n\\n        return _react2.default.createElement(\\n            'div',\\n            { style: { marginLeft: '300px' } },\\n            _react2.default.createElement(\\n                'h2',\\n                null,\\n                activeSection.title,\\n                ' ',\\n                _react2.default.createElement(\\n                    'small',\\n                    null,\\n                    activeSection.description\\n                )\\n            ),\\n            _react2.default.createElement(_sectionLinks2.default, { section: activeSection })\\n        );\\n    }\\n});\\n\\nmodule.exports = ActiveSectionView;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/active-section-view.jsx\\n// module id = 100\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/active-section-view.jsx?\");\n\n/***/ },\n/* 101 */\n/*!**************************************!*\\\n  !*** ./javascript/section-links.jsx ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"\\\"use strict\\\";\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar SectionLinks = function SectionLinks(props) {\\n    return _react2.default.createElement(\\n        \\\"dl\\\",\\n        { className: \\\"dl-horizontal\\\" },\\n        props.section.activeViews().map(function (view) {\\n            return _react2.default.createElement(\\n                \\\"div\\\",\\n                { key: view.key },\\n                _react2.default.createElement(\\n                    \\\"dt\\\",\\n                    null,\\n                    _react2.default.createElement(\\n                        \\\"a\\\",\\n                        { href: view.anchor },\\n                        view.title\\n                    )\\n                ),\\n                _react2.default.createElement(\\n                    \\\"dd\\\",\\n                    null,\\n                    \\\" \\\",\\n                    view.description\\n                )\\n            );\\n        })\\n    );\\n};\\nmodule.exports = SectionLinks;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/section-links.jsx\\n// module id = 101\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/section-links.jsx?\");\n\n/***/ },\n/* 102 */\n/*!************************************!*\\\n  !*** ./javascript/text-screen.jsx ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar TextScreen = _react2.default.createClass({\\n    displayName: 'TextScreen',\\n    getInitialState: function getInitialState() {\\n        return {\\n            text: 'Loading...'\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        FubuDiagnostics.get(route, {}, function (data) {\\n            _this.setState({ text: data });\\n        });\\n    },\\n    render: function render() {\\n        return _react2.default.createElement(\\n            'pre',\\n            null,\\n            this.state.text\\n        );\\n    }\\n});\\n\\nmodule.exports = TextScreen;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/text-screen.jsx\\n// module id = 102\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/text-screen.jsx?\");\n\n/***/ },\n/* 103 */\n/*!************************************!*\\\n  !*** ./javascript/html-screen.jsx ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar HtmlScreen = _react2.default.createClass({\\n    displayName: 'HtmlScreen',\\n    getInitialState: function getInitialState() {\\n        return {\\n            html: 'Loading...'\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        // TODO -- add parameters into this someday\\n        FubuDiagnostics.getText(this.props.route, {}, function (data) {\\n            _this.setState({ html: data });\\n        });\\n    },\\n    render: function render() {\\n        return _react2.default.createElement('div', { dangerouslySetInnerHTML: { __html: this.state.html } });\\n    }\\n});\\n\\nmodule.exports = HtmlScreen;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/html-screen.jsx\\n// module id = 103\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/html-screen.jsx?\");\n\n/***/ },\n/* 104 */\n/*!**********************************!*\\\n  !*** ./javascript/appdomain.jsx ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _lodash = __webpack_require__(/*! lodash */ 32);\\n\\nvar _lodash2 = _interopRequireDefault(_lodash);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction Detail(header, prop) {\\n    this.header = header;\\n    this.prop = prop;\\n\\n    this.toRow = function (data, index) {\\n        return _react2.default.createElement(\\n            'tr',\\n            { key: index },\\n            _react2.default.createElement(\\n                'th',\\n                null,\\n                this.header\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                data[this.prop]\\n            )\\n        );\\n    };\\n}\\n\\nvar AppDomain = _react2.default.createClass({\\n    displayName: 'AppDomain',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        // TODO -- add parameters into this someday\\n        FubuDiagnostics.get('AppDomain:appdomain', {}, function (data) {\\n            _lodash2.default.assign(data, { loading: false });\\n\\n            _this.setState(data);\\n        });\\n    },\\n    render: function render() {\\n        var _this2 = this;\\n\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        var assemblies = this.state.assemblies.map(function (a, i) {\\n            return _react2.default.createElement(\\n                'tr',\\n                { key: i },\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    a.name\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    a.version\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    a.location\\n                )\\n            );\\n        });\\n\\n        var details = [new Detail('Reloaded at', 'reloaded'), new Detail('FubuMVC Path', 'fubuPath'), new Detail('AppDomain Base Directory', 'baseDirectory'), new Detail('AppDomain Bin Path', 'binPath'), new Detail('Configuration File', 'config')];\\n\\n        var detailRows = details.map(function (d, i) {\\n            return d.toRow(_this2.state, i);\\n        });\\n\\n        return _react2.default.createElement(\\n            'div',\\n            null,\\n            _react2.default.createElement(\\n                'h3',\\n                null,\\n                'Application Properties'\\n            ),\\n            _react2.default.createElement(\\n                'table',\\n                { className: 'table table-striped details', style: { width: 'auto' } },\\n                _react2.default.createElement(\\n                    'tbody',\\n                    null,\\n                    detailRows\\n                )\\n            ),\\n            _react2.default.createElement(\\n                'h3',\\n                null,\\n                'Loaded Assemblies'\\n            ),\\n            _react2.default.createElement(\\n                'table',\\n                { className: 'table table-striped' },\\n                _react2.default.createElement(\\n                    'tbody',\\n                    null,\\n                    _react2.default.createElement(\\n                        'tr',\\n                        null,\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'Name'\\n                        ),\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'Version'\\n                        ),\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'Location'\\n                        )\\n                    ),\\n                    assemblies\\n                )\\n            )\\n        );\\n    }\\n});\\n\\nFubuDiagnostics.addSection({\\n    title: 'AppDomain',\\n    description: 'Properties and Assemblies of the current AppDomain',\\n    key: 'appdomain',\\n    component: AppDomain\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/appdomain.jsx\\n// module id = 104\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/appdomain.jsx?\");\n\n/***/ },\n/* 105 */\n/*!*******************************!*\\\n  !*** ./javascript/assets.jsx ***!\n  \\*******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar AssetsTable = _react2.default.createClass({\\n    displayName: 'AssetsTable',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        // TODO -- add parameters into this someday\\n        FubuDiagnostics.get('Asset:assets', {}, function (data) {\\n            _.assign(data, { loading: false });\\n\\n            _this.setState(data);\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        var rows = this.state.assets.map(function (a) {\\n            return _react2.default.createElement(\\n                'tr',\\n                { key: a.url },\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    a.file\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    a.url\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    a.mimetype\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    a.provenance\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    a.cdn\\n                )\\n            );\\n        });\\n\\n        return _react2.default.createElement(\\n            'table',\\n            { className: 'table table-striped' },\\n            _react2.default.createElement(\\n                'tbody',\\n                null,\\n                _react2.default.createElement(\\n                    'tr',\\n                    null,\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'File'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Url'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Mimetype'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Provenance'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'CDN'\\n                    )\\n                ),\\n                rows\\n            )\\n        );\\n    }\\n});\\n\\nFubuDiagnostics.addSection({\\n    title: 'Assets',\\n    description: 'All known client side assets',\\n    key: 'assets',\\n    component: AssetsTable\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/assets.jsx\\n// module id = 105\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/assets.jsx?\");\n\n/***/ },\n/* 106 */\n/*!*************************************!*\\\n  !*** ./javascript/structuremap.jsx ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _settings = __webpack_require__(/*! ./settings */ 107);\\n\\nvar _settings2 = _interopRequireDefault(_settings);\\n\\nvar _structuremapSummary = __webpack_require__(/*! ./structuremap-summary */ 108);\\n\\nvar _structuremapSummary2 = _interopRequireDefault(_structuremapSummary);\\n\\nvar _structuremapWhatdoihave = __webpack_require__(/*! ./structuremap-whatdoihave */ 256);\\n\\nvar _structuremapWhatdoihave2 = _interopRequireDefault(_structuremapWhatdoihave);\\n\\nvar _structuremapBuildplan = __webpack_require__(/*! ./structuremap-buildplan */ 257);\\n\\nvar _structuremapBuildplan2 = _interopRequireDefault(_structuremapBuildplan);\\n\\nvar _structuremapSearchresults = __webpack_require__(/*! ./structuremap-searchresults */ 258);\\n\\nvar _structuremapSearchresults2 = _interopRequireDefault(_structuremapSearchresults);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nFubuDiagnostics.addSection({\\n    title: 'StructureMap',\\n    description: 'Insight into the configuration and state of the application container',\\n    key: 'structuremap'\\n}).add({\\n    title: 'Summary',\\n    description: 'Assemblies and Namespaces in the Container',\\n    key: 'summary',\\n    component: _structuremapSummary2.default\\n}).add({\\n    title: 'StructureMap Search Results',\\n    description: \\\"Interactive version of StructureMap's WhatDoIHave()\\\",\\n    key: 'search-results',\\n    route: 'StructureMap:search_Type_Value',\\n    component: _structuremapSearchresults2.default\\n}).add({\\n    title: 'What do I have?',\\n    description: \\\"StructureMap's textual WhatDoIHave() diagnostics\\\",\\n    key: 'whatdoihave',\\n    component: _structuremapWhatdoihave2.default\\n}).add({\\n    title: 'Build Plan',\\n    description: 'How StructureMap will build this Instance',\\n    key: 'buildplan',\\n    route: 'StructureMap:build_plan_PluginType_Name',\\n    component: _structuremapBuildplan2.default\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/structuremap.jsx\\n// module id = 106\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/structuremap.jsx?\");\n\n/***/ },\n/* 107 */\n/*!*********************************!*\\\n  !*** ./javascript/settings.jsx ***!\n  \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction replaceAll(str, find, replace) {\\n    return str.replace(new RegExp(find, 'g'), replace);\\n}\\n\\nvar SettingsTable = _react2.default.createClass({\\n    displayName: 'SettingsTable',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        FubuDiagnostics.get('Settings:settings', {}, function (data) {\\n            _.assign(data, { loading: false });\\n\\n            _this.setState(data);\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        var rows = this.state.settings.map(function (s, i) {\\n            var url = \\\"#settings/setting-details/\\\" + replaceAll(encodeURIComponent(s.type), '\\\\\\\\.', '_');\\n\\n            return _react2.default.createElement(\\n                'tr',\\n                { key: url },\\n                _react2.default.createElement(\\n                    'td',\\n                    { title: s.type },\\n                    _react2.default.createElement(\\n                        'a',\\n                        { href: url },\\n                        s.name\\n                    )\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    s.description\\n                )\\n            );\\n        });\\n\\n        return _react2.default.createElement(\\n            'table',\\n            { className: 'table table-striped' },\\n            _react2.default.createElement(\\n                'tbody',\\n                null,\\n                _react2.default.createElement(\\n                    'tr',\\n                    null,\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Type'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Description'\\n                    )\\n                ),\\n                rows\\n            )\\n        );\\n    }\\n});\\n\\nvar SettingsDetail = _react2.default.createClass({\\n    displayName: 'SettingsDetail',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this2 = this;\\n\\n        var params = this.props.params;\\n        FubuDiagnostics.get('Settings:setting_Name', params, function (data) {\\n            _this2.setState({ data: data, loading: false });\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        if (this.state.data.type == 'json') {\\n            var json = JSON.stringify(this.state.data.body, null, 4);\\n\\n            return _react2.default.createElement(\\n                'div',\\n                null,\\n                _react2.default.createElement(\\n                    'h3',\\n                    null,\\n                    this.state.data.title\\n                ),\\n                _react2.default.createElement(\\n                    'pre',\\n                    null,\\n                    json\\n                )\\n            );\\n        } else {\\n            return _react2.default.createElement(\\n                'div',\\n                null,\\n                _react2.default.createElement(\\n                    'h3',\\n                    null,\\n                    this.state.data.title\\n                ),\\n                _react2.default.createElement('div', { dangerouslySetInnerHTML: {\\n                        __html: this.state.data.body\\n                    } })\\n            );\\n        }\\n    }\\n});\\n\\nFubuDiagnostics.addSection({\\n    title: 'Settings',\\n    description: \\\"All known 'Settings' types\\\",\\n    key: 'settings',\\n    component: SettingsTable\\n}).add({\\n    title: 'Setting Details',\\n    description: '',\\n    key: 'setting-details',\\n    route: 'Settings:setting_Name',\\n    component: SettingsDetail\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/settings.jsx\\n// module id = 107\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/settings.jsx?\");\n\n/***/ },\n/* 108 */\n/*!*********************************************!*\\\n  !*** ./javascript/structuremap-summary.jsx ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _structuremapSearchbox = __webpack_require__(/*! ./structuremap-searchbox */ 109);\\n\\nvar _structuremapSearchbox2 = _interopRequireDefault(_structuremapSearchbox);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar AssemblySummaryItem = _react2.default.createClass({\\n    displayName: 'AssemblySummaryItem',\\n    render: function render() {\\n        var url = '#structuremap/search-results/Assembly/' + this.props.name;\\n\\n        return _react2.default.createElement(\\n            'li',\\n            { className: 'list-group-item' },\\n            _react2.default.createElement(\\n                'span',\\n                { className: 'badge' },\\n                this.props.count\\n            ),\\n            _react2.default.createElement(\\n                'b',\\n                null,\\n                _react2.default.createElement(\\n                    'a',\\n                    { href: url },\\n                    this.props.name\\n                )\\n            )\\n        );\\n    }\\n});\\n\\nvar NamespaceSummaryItem = _react2.default.createClass({\\n    displayName: 'NamespaceSummaryItem',\\n    render: function render() {\\n        var url = '#structuremap/search-results/Namespace/' + this.props.name;\\n\\n        return _react2.default.createElement(\\n            'li',\\n            { className: 'list-group-item' },\\n            _react2.default.createElement(\\n                'span',\\n                { className: 'badge' },\\n                this.props.count\\n            ),\\n            _react2.default.createElement(\\n                'a',\\n                { href: url },\\n                this.props.name\\n            )\\n        );\\n    }\\n});\\n\\nvar Summary = _react2.default.createClass({\\n    displayName: 'Summary',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        FubuDiagnostics.get('StructureMap:summary', {}, function (data) {\\n            _.assign(data, { loading: false });\\n\\n            _this.setState(data);\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        var items = [];\\n\\n        this.state.assemblies.forEach(function (assem, i) {\\n            var item = _react2.default.createElement(AssemblySummaryItem, _extends({ key: assem.name }, assem));\\n\\n            items.push(item);\\n\\n            assem.namespaces.forEach(function (ns, i) {\\n                var assemItem = _react2.default.createElement(NamespaceSummaryItem, _extends({ key: ns.name }, ns));\\n                items.push(assemItem);\\n            });\\n        });\\n\\n        return _react2.default.createElement(\\n            'div',\\n            null,\\n            _react2.default.createElement(_structuremapSearchbox2.default, null),\\n            _react2.default.createElement('hr', null),\\n            _react2.default.createElement(\\n                'ul',\\n                { className: 'list-group' },\\n                items\\n            )\\n        );\\n    }\\n});\\n\\nmodule.exports = Summary;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/structuremap-summary.jsx\\n// module id = 108\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/structuremap-summary.jsx?\");\n\n/***/ },\n/* 109 */\n/*!***********************************************!*\\\n  !*** ./javascript/structuremap-searchbox.jsx ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _reactDom = __webpack_require__(/*! react-dom */ 110);\\n\\nvar _reactDom2 = _interopRequireDefault(_reactDom);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction StructureMapSearch() {\\n    var self = this;\\n\\n    self.options = null;\\n\\n    self.find = function (query) {\\n        query = query.toLowerCase();\\n\\n        var matches = _.filter(self.options, function (o) {\\n            try {\\n                return o.display.toLowerCase().indexOf(query) > -1;\\n            } catch (e) {\\n                return false;\\n            }\\n        });\\n\\n        return matches;\\n    };\\n\\n    self.findMatches = function (query, callback) {\\n        if (self.options == null) {\\n            FubuDiagnostics.get('StructureMap:search_options', {}, function (data) {\\n                if (typeof data == 'string') {\\n                    data = JSON.parse(data);\\n                }\\n\\n                self.options = data;\\n                callback(self.find(query));\\n            });\\n        } else {\\n            callback(self.find(query));\\n        }\\n    };\\n\\n    return self;\\n}\\n\\nFubuDiagnostics.StructureMapSearch = new StructureMapSearch();\\n\\nvar SearchBox = _react2.default.createClass({\\n    displayName: 'SearchBox',\\n    componentDidMount: function componentDidMount() {\\n        var element = _reactDom2.default.findDOMNode(this);\\n        $(element).typeahead({\\n            minLength: 5,\\n            highlight: true\\n        }, {\\n            name: 'structuremap',\\n            displayKey: 'value',\\n\\n            source: FubuDiagnostics.StructureMapSearch.findMatches,\\n            templates: {\\n                empty: '<div class=\\\"empty-message\\\">No matches found</div>',\\n                suggestion: _.template('<div><p><%= display%> - <small><%= type%></small></p><p><small><%= value%></small></p></div>')\\n            }\\n        });\\n\\n        $(element).on('typeahead:selected', function (jquery, option) {\\n            var url = '#/structuremap/search-results/' + option.type + '/' + option.value;\\n            window.location = url;\\n        });\\n    },\\n    componentWillUnmount: function componentWillUnmount() {\\n        var element = _reactDom2.default.findDOMNode(this);\\n        $(element).typeahead('destroy');\\n    },\\n    render: function render() {\\n        return _react2.default.createElement('input', { type: 'search', name: 'search', ref: 'input', className: 'form-control typeahead structuremap-search', placeholder: 'Search the application container' });\\n    }\\n});\\n\\nmodule.exports = SearchBox;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/structuremap-searchbox.jsx\\n// module id = 109\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/structuremap-searchbox.jsx?\");\n\n/***/ },\n/* 110 */\n/*!******************************!*\\\n  !*** ./~/react-dom/index.js ***!\n  \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nmodule.exports = __webpack_require__(/*! ./lib/ReactDOM */ 111);\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/index.js\\n// module id = 110\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/index.js?\");\n\n/***/ },\n/* 111 */\n/*!*************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOM.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n/* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/\\n\\n'use strict';\\n\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\nvar ReactDefaultInjection = __webpack_require__(/*! ./ReactDefaultInjection */ 116);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 244);\\nvar ReactReconciler = __webpack_require__(/*! ./ReactReconciler */ 137);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 134);\\nvar ReactVersion = __webpack_require__(/*! ./ReactVersion */ 249);\\n\\nvar findDOMNode = __webpack_require__(/*! ./findDOMNode */ 250);\\nvar getHostComponentFromComposite = __webpack_require__(/*! ./getHostComponentFromComposite */ 251);\\nvar renderSubtreeIntoContainer = __webpack_require__(/*! ./renderSubtreeIntoContainer */ 252);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nReactDefaultInjection.inject();\\n\\nvar ReactDOM = {\\n  findDOMNode: findDOMNode,\\n  render: ReactMount.render,\\n  unmountComponentAtNode: ReactMount.unmountComponentAtNode,\\n  version: ReactVersion,\\n\\n  /* eslint-disable camelcase */\\n  unstable_batchedUpdates: ReactUpdates.batchedUpdates,\\n  unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer\\n};\\n\\n// Inject the runtime into a devtools global hook regardless of browser.\\n// Allows for debugging when the hook is injected on the page.\\nif (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {\\n  __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({\\n    ComponentTree: {\\n      getClosestInstanceFromNode: ReactDOMComponentTree.getClosestInstanceFromNode,\\n      getNodeFromInstance: function (inst) {\\n        // inst is an internal instance (but could be a composite)\\n        if (inst._renderedComponent) {\\n          inst = getHostComponentFromComposite(inst);\\n        }\\n        if (inst) {\\n          return ReactDOMComponentTree.getNodeFromInstance(inst);\\n        } else {\\n          return null;\\n        }\\n      }\\n    },\\n    Mount: ReactMount,\\n    Reconciler: ReactReconciler\\n  });\\n}\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  var ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ 126);\\n  if (ExecutionEnvironment.canUseDOM && window.top === window.self) {\\n\\n    // First check if devtools is not installed\\n    if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\\n      // If we're in Chrome or Firefox, provide a download link if not installed.\\n      if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\\n        // Firefox does not have the issue with devtools loaded over file://\\n        var showFileUrlMessage = window.location.protocol.indexOf('http') === -1 && navigator.userAgent.indexOf('Firefox') === -1;\\n        console.debug('Download the React DevTools ' + (showFileUrlMessage ? 'and use an HTTP server (instead of a file: URL) ' : '') + 'for a better development experience: ' + 'https://fb.me/react-devtools');\\n      }\\n    }\\n\\n    var testFunc = function testFn() {};\\n    process.env.NODE_ENV !== 'production' ? warning((testFunc.name || testFunc.toString()).indexOf('testFn') !== -1, 'It looks like you\\\\'re using a minified copy of the development build ' + 'of React. When deploying React apps to production, make sure to use ' + 'the production build which skips development warnings and is faster. ' + 'See https://fb.me/react-minification for more details.') : void 0;\\n\\n    // If we're in IE8, check to see if we are in compatibility mode and provide\\n    // information on preventing compatibility mode\\n    var ieCompatibilityMode = document.documentMode && document.documentMode < 8;\\n\\n    process.env.NODE_ENV !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '<meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"IE=edge\\\" />') : void 0;\\n\\n    var expectedFeatures = [\\n    // shims\\n    Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.trim];\\n\\n    for (var i = 0; i < expectedFeatures.length; i++) {\\n      if (!expectedFeatures[i]) {\\n        process.env.NODE_ENV !== 'production' ? warning(false, 'One or more ES5 shims expected by React are not available: ' + 'https://fb.me/react-warning-polyfills') : void 0;\\n        break;\\n      }\\n    }\\n  }\\n}\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  var ReactInstrumentation = __webpack_require__(/*! ./ReactInstrumentation */ 140);\\n  var ReactDOMUnknownPropertyHook = __webpack_require__(/*! ./ReactDOMUnknownPropertyHook */ 253);\\n  var ReactDOMNullInputValuePropHook = __webpack_require__(/*! ./ReactDOMNullInputValuePropHook */ 254);\\n  var ReactDOMInvalidARIAHook = __webpack_require__(/*! ./ReactDOMInvalidARIAHook */ 255);\\n\\n  ReactInstrumentation.debugTool.addHook(ReactDOMUnknownPropertyHook);\\n  ReactInstrumentation.debugTool.addHook(ReactDOMNullInputValuePropHook);\\n  ReactInstrumentation.debugTool.addHook(ReactDOMInvalidARIAHook);\\n}\\n\\nmodule.exports = ReactDOM;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOM.js\\n// module id = 111\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOM.js?\");\n\n/***/ },\n/* 112 */\n/*!**************************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOMComponentTree.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 114);\\nvar ReactDOMComponentFlags = __webpack_require__(/*! ./ReactDOMComponentFlags */ 115);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\nvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\\nvar Flags = ReactDOMComponentFlags;\\n\\nvar internalInstanceKey = '__reactInternalInstance$' + Math.random().toString(36).slice(2);\\n\\n/**\\n * Drill down (through composites and empty components) until we get a host or\\n * host text component.\\n *\\n * This is pretty polymorphic but unavoidable with the current structure we have\\n * for `_renderedChildren`.\\n */\\nfunction getRenderedHostOrTextFromComponent(component) {\\n  var rendered;\\n  while (rendered = component._renderedComponent) {\\n    component = rendered;\\n  }\\n  return component;\\n}\\n\\n/**\\n * Populate `_hostNode` on the rendered host/text component with the given\\n * DOM node. The passed `inst` can be a composite.\\n */\\nfunction precacheNode(inst, node) {\\n  var hostInst = getRenderedHostOrTextFromComponent(inst);\\n  hostInst._hostNode = node;\\n  node[internalInstanceKey] = hostInst;\\n}\\n\\nfunction uncacheNode(inst) {\\n  var node = inst._hostNode;\\n  if (node) {\\n    delete node[internalInstanceKey];\\n    inst._hostNode = null;\\n  }\\n}\\n\\n/**\\n * Populate `_hostNode` on each child of `inst`, assuming that the children\\n * match up with the DOM (element) children of `node`.\\n *\\n * We cache entire levels at once to avoid an n^2 problem where we access the\\n * children of a node sequentially and have to walk from the start to our target\\n * node every time.\\n *\\n * Since we update `_renderedChildren` and the actual DOM at (slightly)\\n * different times, we could race here and see a newer `_renderedChildren` than\\n * the DOM nodes we see. To avoid this, ReactMultiChild calls\\n * `prepareToManageChildren` before we change `_renderedChildren`, at which\\n * time the container's child nodes are always cached (until it unmounts).\\n */\\nfunction precacheChildNodes(inst, node) {\\n  if (inst._flags & Flags.hasCachedChildNodes) {\\n    return;\\n  }\\n  var children = inst._renderedChildren;\\n  var childNode = node.firstChild;\\n  outer: for (var name in children) {\\n    if (!children.hasOwnProperty(name)) {\\n      continue;\\n    }\\n    var childInst = children[name];\\n    var childID = getRenderedHostOrTextFromComponent(childInst)._domID;\\n    if (childID === 0) {\\n      // We're currently unmounting this child in ReactMultiChild; skip it.\\n      continue;\\n    }\\n    // We assume the child nodes are in the same order as the child instances.\\n    for (; childNode !== null; childNode = childNode.nextSibling) {\\n      if (childNode.nodeType === 1 && childNode.getAttribute(ATTR_NAME) === String(childID) || childNode.nodeType === 8 && childNode.nodeValue === ' react-text: ' + childID + ' ' || childNode.nodeType === 8 && childNode.nodeValue === ' react-empty: ' + childID + ' ') {\\n        precacheNode(childInst, childNode);\\n        continue outer;\\n      }\\n    }\\n    // We reached the end of the DOM children without finding an ID match.\\n     true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Unable to find element with ID %s.', childID) : _prodInvariant('32', childID) : void 0;\\n  }\\n  inst._flags |= Flags.hasCachedChildNodes;\\n}\\n\\n/**\\n * Given a DOM node, return the closest ReactDOMComponent or\\n * ReactDOMTextComponent instance ancestor.\\n */\\nfunction getClosestInstanceFromNode(node) {\\n  if (node[internalInstanceKey]) {\\n    return node[internalInstanceKey];\\n  }\\n\\n  // Walk up the tree until we find an ancestor whose instance we have cached.\\n  var parents = [];\\n  while (!node[internalInstanceKey]) {\\n    parents.push(node);\\n    if (node.parentNode) {\\n      node = node.parentNode;\\n    } else {\\n      // Top of the tree. This node must not be part of a React tree (or is\\n      // unmounted, potentially).\\n      return null;\\n    }\\n  }\\n\\n  var closest;\\n  var inst;\\n  for (; node && (inst = node[internalInstanceKey]); node = parents.pop()) {\\n    closest = inst;\\n    if (parents.length) {\\n      precacheChildNodes(inst, node);\\n    }\\n  }\\n\\n  return closest;\\n}\\n\\n/**\\n * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent\\n * instance, or null if the node was not rendered by this React.\\n */\\nfunction getInstanceFromNode(node) {\\n  var inst = getClosestInstanceFromNode(node);\\n  if (inst != null && inst._hostNode === node) {\\n    return inst;\\n  } else {\\n    return null;\\n  }\\n}\\n\\n/**\\n * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding\\n * DOM node.\\n */\\nfunction getNodeFromInstance(inst) {\\n  // Without this first invariant, passing a non-DOM-component triggers the next\\n  // invariant for a missing parent, which is super confusing.\\n  !(inst._hostNode !== undefined) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;\\n\\n  if (inst._hostNode) {\\n    return inst._hostNode;\\n  }\\n\\n  // Walk up the tree until we find an ancestor whose DOM node we have cached.\\n  var parents = [];\\n  while (!inst._hostNode) {\\n    parents.push(inst);\\n    !inst._hostParent ? process.env.NODE_ENV !== 'production' ? invariant(false, 'React DOM tree root should always have a node reference.') : _prodInvariant('34') : void 0;\\n    inst = inst._hostParent;\\n  }\\n\\n  // Now parents contains each ancestor that does *not* have a cached native\\n  // node, and `inst` is the deepest ancestor that does.\\n  for (; parents.length; inst = parents.pop()) {\\n    precacheChildNodes(inst, inst._hostNode);\\n  }\\n\\n  return inst._hostNode;\\n}\\n\\nvar ReactDOMComponentTree = {\\n  getClosestInstanceFromNode: getClosestInstanceFromNode,\\n  getInstanceFromNode: getInstanceFromNode,\\n  getNodeFromInstance: getNodeFromInstance,\\n  precacheChildNodes: precacheChildNodes,\\n  precacheNode: precacheNode,\\n  uncacheNode: uncacheNode\\n};\\n\\nmodule.exports = ReactDOMComponentTree;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOMComponentTree.js\\n// module id = 112\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOMComponentTree.js?\");\n\n/***/ },\n/* 113 */\n/*!***********************************************!*\\\n  !*** ./~/react-dom/lib/reactProdInvariant.js ***!\n  \\***********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n'use strict';\\n\\n/**\\n * WARNING: DO NOT manually require this module.\\n * This is a replacement for `invariant(...)` used by the error code system\\n * and will _only_ be required by the corresponding babel pass.\\n * It always throws.\\n */\\n\\nfunction reactProdInvariant(code) {\\n  var argCount = arguments.length - 1;\\n\\n  var message = 'Minified React error #' + code + '; visit ' + 'http://facebook.github.io/react/docs/error-decoder.html?invariant=' + code;\\n\\n  for (var argIdx = 0; argIdx < argCount; argIdx++) {\\n    message += '&args[]=' + encodeURIComponent(arguments[argIdx + 1]);\\n  }\\n\\n  message += ' for the full message or use the non-minified dev environment' + ' for full errors and additional helpful warnings.';\\n\\n  var error = new Error(message);\\n  error.name = 'Invariant Violation';\\n  error.framesToPop = 1; // we don't care about reactProdInvariant's own frame\\n\\n  throw error;\\n}\\n\\nmodule.exports = reactProdInvariant;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/reactProdInvariant.js\\n// module id = 113\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/reactProdInvariant.js?\");\n\n/***/ },\n/* 114 */\n/*!****************************************!*\\\n  !*** ./~/react-dom/lib/DOMProperty.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\nfunction checkMask(value, bitmask) {\\n  return (value & bitmask) === bitmask;\\n}\\n\\nvar DOMPropertyInjection = {\\n  /**\\n   * Mapping from normalized, camelcased property names to a configuration that\\n   * specifies how the associated DOM property should be accessed or rendered.\\n   */\\n  MUST_USE_PROPERTY: 0x1,\\n  HAS_BOOLEAN_VALUE: 0x4,\\n  HAS_NUMERIC_VALUE: 0x8,\\n  HAS_POSITIVE_NUMERIC_VALUE: 0x10 | 0x8,\\n  HAS_OVERLOADED_BOOLEAN_VALUE: 0x20,\\n\\n  /**\\n   * Inject some specialized knowledge about the DOM. This takes a config object\\n   * with the following properties:\\n   *\\n   * isCustomAttribute: function that given an attribute name will return true\\n   * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*\\n   * attributes where it's impossible to enumerate all of the possible\\n   * attribute names,\\n   *\\n   * Properties: object mapping DOM property name to one of the\\n   * DOMPropertyInjection constants or null. If your attribute isn't in here,\\n   * it won't get written to the DOM.\\n   *\\n   * DOMAttributeNames: object mapping React attribute name to the DOM\\n   * attribute name. Attribute names not specified use the **lowercase**\\n   * normalized name.\\n   *\\n   * DOMAttributeNamespaces: object mapping React attribute name to the DOM\\n   * attribute namespace URL. (Attribute names not specified use no namespace.)\\n   *\\n   * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.\\n   * Property names not specified use the normalized name.\\n   *\\n   * DOMMutationMethods: Properties that require special mutation methods. If\\n   * `value` is undefined, the mutation method should unset the property.\\n   *\\n   * @param {object} domPropertyConfig the config as described above.\\n   */\\n  injectDOMPropertyConfig: function (domPropertyConfig) {\\n    var Injection = DOMPropertyInjection;\\n    var Properties = domPropertyConfig.Properties || {};\\n    var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};\\n    var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};\\n    var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};\\n    var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};\\n\\n    if (domPropertyConfig.isCustomAttribute) {\\n      DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);\\n    }\\n\\n    for (var propName in Properties) {\\n      !!DOMProperty.properties.hasOwnProperty(propName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\\\\'re trying to inject DOM property \\\\'%s\\\\' which has already been injected. You may be accidentally injecting the same DOM property config twice, or you may be injecting two configs that have conflicting property names.', propName) : _prodInvariant('48', propName) : void 0;\\n\\n      var lowerCased = propName.toLowerCase();\\n      var propConfig = Properties[propName];\\n\\n      var propertyInfo = {\\n        attributeName: lowerCased,\\n        attributeNamespace: null,\\n        propertyName: propName,\\n        mutationMethod: null,\\n\\n        mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),\\n        hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),\\n        hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),\\n        hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),\\n        hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)\\n      };\\n      !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or numeric value, but not a combination: %s', propName) : _prodInvariant('50', propName) : void 0;\\n\\n      if (process.env.NODE_ENV !== 'production') {\\n        DOMProperty.getPossibleStandardName[lowerCased] = propName;\\n      }\\n\\n      if (DOMAttributeNames.hasOwnProperty(propName)) {\\n        var attributeName = DOMAttributeNames[propName];\\n        propertyInfo.attributeName = attributeName;\\n        if (process.env.NODE_ENV !== 'production') {\\n          DOMProperty.getPossibleStandardName[attributeName] = propName;\\n        }\\n      }\\n\\n      if (DOMAttributeNamespaces.hasOwnProperty(propName)) {\\n        propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];\\n      }\\n\\n      if (DOMPropertyNames.hasOwnProperty(propName)) {\\n        propertyInfo.propertyName = DOMPropertyNames[propName];\\n      }\\n\\n      if (DOMMutationMethods.hasOwnProperty(propName)) {\\n        propertyInfo.mutationMethod = DOMMutationMethods[propName];\\n      }\\n\\n      DOMProperty.properties[propName] = propertyInfo;\\n    }\\n  }\\n};\\n\\n/* eslint-disable max-len */\\nvar ATTRIBUTE_NAME_START_CHAR = ':A-Z_a-z\\\\\\\\u00C0-\\\\\\\\u00D6\\\\\\\\u00D8-\\\\\\\\u00F6\\\\\\\\u00F8-\\\\\\\\u02FF\\\\\\\\u0370-\\\\\\\\u037D\\\\\\\\u037F-\\\\\\\\u1FFF\\\\\\\\u200C-\\\\\\\\u200D\\\\\\\\u2070-\\\\\\\\u218F\\\\\\\\u2C00-\\\\\\\\u2FEF\\\\\\\\u3001-\\\\\\\\uD7FF\\\\\\\\uF900-\\\\\\\\uFDCF\\\\\\\\uFDF0-\\\\\\\\uFFFD';\\n/* eslint-enable max-len */\\n\\n/**\\n * DOMProperty exports lookup objects that can be used like functions:\\n *\\n *   > DOMProperty.isValid['id']\\n *   true\\n *   > DOMProperty.isValid['foobar']\\n *   undefined\\n *\\n * Although this may be confusing, it performs better in general.\\n *\\n * @see http://jsperf.com/key-exists\\n * @see http://jsperf.com/key-missing\\n */\\nvar DOMProperty = {\\n\\n  ID_ATTRIBUTE_NAME: 'data-reactid',\\n  ROOT_ATTRIBUTE_NAME: 'data-reactroot',\\n\\n  ATTRIBUTE_NAME_START_CHAR: ATTRIBUTE_NAME_START_CHAR,\\n  ATTRIBUTE_NAME_CHAR: ATTRIBUTE_NAME_START_CHAR + '\\\\\\\\-.0-9\\\\\\\\u00B7\\\\\\\\u0300-\\\\\\\\u036F\\\\\\\\u203F-\\\\\\\\u2040',\\n\\n  /**\\n   * Map from property \\\"standard name\\\" to an object with info about how to set\\n   * the property in the DOM. Each object contains:\\n   *\\n   * attributeName:\\n   *   Used when rendering markup or with `*Attribute()`.\\n   * attributeNamespace\\n   * propertyName:\\n   *   Used on DOM node instances. (This includes properties that mutate due to\\n   *   external factors.)\\n   * mutationMethod:\\n   *   If non-null, used instead of the property or `setAttribute()` after\\n   *   initial render.\\n   * mustUseProperty:\\n   *   Whether the property must be accessed and mutated as an object property.\\n   * hasBooleanValue:\\n   *   Whether the property should be removed when set to a falsey value.\\n   * hasNumericValue:\\n   *   Whether the property must be numeric or parse as a numeric and should be\\n   *   removed when set to a falsey value.\\n   * hasPositiveNumericValue:\\n   *   Whether the property must be positive numeric or parse as a positive\\n   *   numeric and should be removed when set to a falsey value.\\n   * hasOverloadedBooleanValue:\\n   *   Whether the property can be used as a flag as well as with a value.\\n   *   Removed when strictly equal to false; present without a value when\\n   *   strictly equal to true; present with a value otherwise.\\n   */\\n  properties: {},\\n\\n  /**\\n   * Mapping from lowercase property names to the properly cased version, used\\n   * to warn in the case of missing properties. Available only in __DEV__.\\n   *\\n   * autofocus is predefined, because adding it to the property whitelist\\n   * causes unintended side effects.\\n   *\\n   * @type {Object}\\n   */\\n  getPossibleStandardName: process.env.NODE_ENV !== 'production' ? { autofocus: 'autoFocus' } : null,\\n\\n  /**\\n   * All of the isCustomAttribute() functions that have been injected.\\n   */\\n  _isCustomAttributeFunctions: [],\\n\\n  /**\\n   * Checks whether a property name is a custom attribute.\\n   * @method\\n   */\\n  isCustomAttribute: function (attributeName) {\\n    for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {\\n      var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];\\n      if (isCustomAttributeFn(attributeName)) {\\n        return true;\\n      }\\n    }\\n    return false;\\n  },\\n\\n  injection: DOMPropertyInjection\\n};\\n\\nmodule.exports = DOMProperty;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/DOMProperty.js\\n// module id = 114\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/DOMProperty.js?\");\n\n/***/ },\n/* 115 */\n/*!***************************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOMComponentFlags.js ***!\n  \\***************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2015-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ReactDOMComponentFlags = {\\n  hasCachedChildNodes: 1 << 0\\n};\\n\\nmodule.exports = ReactDOMComponentFlags;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOMComponentFlags.js\\n// module id = 115\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOMComponentFlags.js?\");\n\n/***/ },\n/* 116 */\n/*!**************************************************!*\\\n  !*** ./~/react-dom/lib/ReactDefaultInjection.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ARIADOMPropertyConfig = __webpack_require__(/*! ./ARIADOMPropertyConfig */ 117);\\nvar BeforeInputEventPlugin = __webpack_require__(/*! ./BeforeInputEventPlugin */ 118);\\nvar ChangeEventPlugin = __webpack_require__(/*! ./ChangeEventPlugin */ 133);\\nvar DefaultEventPluginOrder = __webpack_require__(/*! ./DefaultEventPluginOrder */ 150);\\nvar EnterLeaveEventPlugin = __webpack_require__(/*! ./EnterLeaveEventPlugin */ 151);\\nvar HTMLDOMPropertyConfig = __webpack_require__(/*! ./HTMLDOMPropertyConfig */ 156);\\nvar ReactComponentBrowserEnvironment = __webpack_require__(/*! ./ReactComponentBrowserEnvironment */ 157);\\nvar ReactDOMComponent = __webpack_require__(/*! ./ReactDOMComponent */ 170);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\nvar ReactDOMEmptyComponent = __webpack_require__(/*! ./ReactDOMEmptyComponent */ 215);\\nvar ReactDOMTreeTraversal = __webpack_require__(/*! ./ReactDOMTreeTraversal */ 216);\\nvar ReactDOMTextComponent = __webpack_require__(/*! ./ReactDOMTextComponent */ 217);\\nvar ReactDefaultBatchingStrategy = __webpack_require__(/*! ./ReactDefaultBatchingStrategy */ 218);\\nvar ReactEventListener = __webpack_require__(/*! ./ReactEventListener */ 219);\\nvar ReactInjection = __webpack_require__(/*! ./ReactInjection */ 222);\\nvar ReactReconcileTransaction = __webpack_require__(/*! ./ReactReconcileTransaction */ 223);\\nvar SVGDOMPropertyConfig = __webpack_require__(/*! ./SVGDOMPropertyConfig */ 231);\\nvar SelectEventPlugin = __webpack_require__(/*! ./SelectEventPlugin */ 232);\\nvar SimpleEventPlugin = __webpack_require__(/*! ./SimpleEventPlugin */ 233);\\n\\nvar alreadyInjected = false;\\n\\nfunction inject() {\\n  if (alreadyInjected) {\\n    // TODO: This is currently true because these injections are shared between\\n    // the client and the server package. They should be built independently\\n    // and not share any injection state. Then this problem will be solved.\\n    return;\\n  }\\n  alreadyInjected = true;\\n\\n  ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);\\n\\n  /**\\n   * Inject modules for resolving DOM hierarchy and plugin ordering.\\n   */\\n  ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);\\n  ReactInjection.EventPluginUtils.injectComponentTree(ReactDOMComponentTree);\\n  ReactInjection.EventPluginUtils.injectTreeTraversal(ReactDOMTreeTraversal);\\n\\n  /**\\n   * Some important event plugins included by default (without having to require\\n   * them).\\n   */\\n  ReactInjection.EventPluginHub.injectEventPluginsByName({\\n    SimpleEventPlugin: SimpleEventPlugin,\\n    EnterLeaveEventPlugin: EnterLeaveEventPlugin,\\n    ChangeEventPlugin: ChangeEventPlugin,\\n    SelectEventPlugin: SelectEventPlugin,\\n    BeforeInputEventPlugin: BeforeInputEventPlugin\\n  });\\n\\n  ReactInjection.HostComponent.injectGenericComponentClass(ReactDOMComponent);\\n\\n  ReactInjection.HostComponent.injectTextComponentClass(ReactDOMTextComponent);\\n\\n  ReactInjection.DOMProperty.injectDOMPropertyConfig(ARIADOMPropertyConfig);\\n  ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);\\n  ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);\\n\\n  ReactInjection.EmptyComponent.injectEmptyComponentFactory(function (instantiate) {\\n    return new ReactDOMEmptyComponent(instantiate);\\n  });\\n\\n  ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction);\\n  ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);\\n\\n  ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);\\n}\\n\\nmodule.exports = {\\n  inject: inject\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDefaultInjection.js\\n// module id = 116\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDefaultInjection.js?\");\n\n/***/ },\n/* 117 */\n/*!**************************************************!*\\\n  !*** ./~/react-dom/lib/ARIADOMPropertyConfig.js ***!\n  \\**************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ARIADOMPropertyConfig = {\\n  Properties: {\\n    // Global States and Properties\\n    'aria-current': 0, // state\\n    'aria-details': 0,\\n    'aria-disabled': 0, // state\\n    'aria-hidden': 0, // state\\n    'aria-invalid': 0, // state\\n    'aria-keyshortcuts': 0,\\n    'aria-label': 0,\\n    'aria-roledescription': 0,\\n    // Widget Attributes\\n    'aria-autocomplete': 0,\\n    'aria-checked': 0,\\n    'aria-expanded': 0,\\n    'aria-haspopup': 0,\\n    'aria-level': 0,\\n    'aria-modal': 0,\\n    'aria-multiline': 0,\\n    'aria-multiselectable': 0,\\n    'aria-orientation': 0,\\n    'aria-placeholder': 0,\\n    'aria-pressed': 0,\\n    'aria-readonly': 0,\\n    'aria-required': 0,\\n    'aria-selected': 0,\\n    'aria-sort': 0,\\n    'aria-valuemax': 0,\\n    'aria-valuemin': 0,\\n    'aria-valuenow': 0,\\n    'aria-valuetext': 0,\\n    // Live Region Attributes\\n    'aria-atomic': 0,\\n    'aria-busy': 0,\\n    'aria-live': 0,\\n    'aria-relevant': 0,\\n    // Drag-and-Drop Attributes\\n    'aria-dropeffect': 0,\\n    'aria-grabbed': 0,\\n    // Relationship Attributes\\n    'aria-activedescendant': 0,\\n    'aria-colcount': 0,\\n    'aria-colindex': 0,\\n    'aria-colspan': 0,\\n    'aria-controls': 0,\\n    'aria-describedby': 0,\\n    'aria-errormessage': 0,\\n    'aria-flowto': 0,\\n    'aria-labelledby': 0,\\n    'aria-owns': 0,\\n    'aria-posinset': 0,\\n    'aria-rowcount': 0,\\n    'aria-rowindex': 0,\\n    'aria-rowspan': 0,\\n    'aria-setsize': 0\\n  },\\n  DOMAttributeNames: {},\\n  DOMPropertyNames: {}\\n};\\n\\nmodule.exports = ARIADOMPropertyConfig;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ARIADOMPropertyConfig.js\\n// module id = 117\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ARIADOMPropertyConfig.js?\");\n\n/***/ },\n/* 118 */\n/*!***************************************************!*\\\n  !*** ./~/react-dom/lib/BeforeInputEventPlugin.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar EventPropagators = __webpack_require__(/*! ./EventPropagators */ 119);\\nvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ 126);\\nvar FallbackCompositionState = __webpack_require__(/*! ./FallbackCompositionState */ 127);\\nvar SyntheticCompositionEvent = __webpack_require__(/*! ./SyntheticCompositionEvent */ 130);\\nvar SyntheticInputEvent = __webpack_require__(/*! ./SyntheticInputEvent */ 132);\\n\\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\\nvar START_KEYCODE = 229;\\n\\nvar canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window;\\n\\nvar documentMode = null;\\nif (ExecutionEnvironment.canUseDOM && 'documentMode' in document) {\\n  documentMode = document.documentMode;\\n}\\n\\n// Webkit offers a very useful `textInput` event that can be used to\\n// directly represent `beforeInput`. The IE `textinput` event is not as\\n// useful, so we don't use it.\\nvar canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto();\\n\\n// In IE9+, we have access to composition events, but the data supplied\\n// by the native compositionend event may be incorrect. Japanese ideographic\\n// spaces, for instance (\\\\u3000) are not recorded correctly.\\nvar useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\\n\\n/**\\n * Opera <= 12 includes TextEvent in window, but does not fire\\n * text input events. Rely on keypress instead.\\n */\\nfunction isPresto() {\\n  var opera = window.opera;\\n  return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12;\\n}\\n\\nvar SPACEBAR_CODE = 32;\\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);\\n\\n// Events and their corresponding property names.\\nvar eventTypes = {\\n  beforeInput: {\\n    phasedRegistrationNames: {\\n      bubbled: 'onBeforeInput',\\n      captured: 'onBeforeInputCapture'\\n    },\\n    dependencies: ['topCompositionEnd', 'topKeyPress', 'topTextInput', 'topPaste']\\n  },\\n  compositionEnd: {\\n    phasedRegistrationNames: {\\n      bubbled: 'onCompositionEnd',\\n      captured: 'onCompositionEndCapture'\\n    },\\n    dependencies: ['topBlur', 'topCompositionEnd', 'topKeyDown', 'topKeyPress', 'topKeyUp', 'topMouseDown']\\n  },\\n  compositionStart: {\\n    phasedRegistrationNames: {\\n      bubbled: 'onCompositionStart',\\n      captured: 'onCompositionStartCapture'\\n    },\\n    dependencies: ['topBlur', 'topCompositionStart', 'topKeyDown', 'topKeyPress', 'topKeyUp', 'topMouseDown']\\n  },\\n  compositionUpdate: {\\n    phasedRegistrationNames: {\\n      bubbled: 'onCompositionUpdate',\\n      captured: 'onCompositionUpdateCapture'\\n    },\\n    dependencies: ['topBlur', 'topCompositionUpdate', 'topKeyDown', 'topKeyPress', 'topKeyUp', 'topMouseDown']\\n  }\\n};\\n\\n// Track whether we've ever handled a keypress on the space key.\\nvar hasSpaceKeypress = false;\\n\\n/**\\n * Return whether a native keypress event is assumed to be a command.\\n * This is required because Firefox fires `keypress` events for key commands\\n * (cut, copy, select-all, etc.) even though no character is inserted.\\n */\\nfunction isKeypressCommand(nativeEvent) {\\n  return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&\\n  // ctrlKey && altKey is equivalent to AltGr, and is not a command.\\n  !(nativeEvent.ctrlKey && nativeEvent.altKey);\\n}\\n\\n/**\\n * Translate native top level events into event types.\\n *\\n * @param {string} topLevelType\\n * @return {object}\\n */\\nfunction getCompositionEventType(topLevelType) {\\n  switch (topLevelType) {\\n    case 'topCompositionStart':\\n      return eventTypes.compositionStart;\\n    case 'topCompositionEnd':\\n      return eventTypes.compositionEnd;\\n    case 'topCompositionUpdate':\\n      return eventTypes.compositionUpdate;\\n  }\\n}\\n\\n/**\\n * Does our fallback best-guess model think this event signifies that\\n * composition has begun?\\n *\\n * @param {string} topLevelType\\n * @param {object} nativeEvent\\n * @return {boolean}\\n */\\nfunction isFallbackCompositionStart(topLevelType, nativeEvent) {\\n  return topLevelType === 'topKeyDown' && nativeEvent.keyCode === START_KEYCODE;\\n}\\n\\n/**\\n * Does our fallback mode think that this event is the end of composition?\\n *\\n * @param {string} topLevelType\\n * @param {object} nativeEvent\\n * @return {boolean}\\n */\\nfunction isFallbackCompositionEnd(topLevelType, nativeEvent) {\\n  switch (topLevelType) {\\n    case 'topKeyUp':\\n      // Command keys insert or clear IME input.\\n      return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\\n    case 'topKeyDown':\\n      // Expect IME keyCode on each keydown. If we get any other\\n      // code we must have exited earlier.\\n      return nativeEvent.keyCode !== START_KEYCODE;\\n    case 'topKeyPress':\\n    case 'topMouseDown':\\n    case 'topBlur':\\n      // Events are not possible without cancelling IME.\\n      return true;\\n    default:\\n      return false;\\n  }\\n}\\n\\n/**\\n * Google Input Tools provides composition data via a CustomEvent,\\n * with the `data` property populated in the `detail` object. If this\\n * is available on the event object, use it. If not, this is a plain\\n * composition event and we have nothing special to extract.\\n *\\n * @param {object} nativeEvent\\n * @return {?string}\\n */\\nfunction getDataFromCustomEvent(nativeEvent) {\\n  var detail = nativeEvent.detail;\\n  if (typeof detail === 'object' && 'data' in detail) {\\n    return detail.data;\\n  }\\n  return null;\\n}\\n\\n// Track the current IME composition fallback object, if any.\\nvar currentComposition = null;\\n\\n/**\\n * @return {?object} A SyntheticCompositionEvent.\\n */\\nfunction extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\\n  var eventType;\\n  var fallbackData;\\n\\n  if (canUseCompositionEvent) {\\n    eventType = getCompositionEventType(topLevelType);\\n  } else if (!currentComposition) {\\n    if (isFallbackCompositionStart(topLevelType, nativeEvent)) {\\n      eventType = eventTypes.compositionStart;\\n    }\\n  } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {\\n    eventType = eventTypes.compositionEnd;\\n  }\\n\\n  if (!eventType) {\\n    return null;\\n  }\\n\\n  if (useFallbackCompositionData) {\\n    // The current composition is stored statically and must not be\\n    // overwritten while composition continues.\\n    if (!currentComposition && eventType === eventTypes.compositionStart) {\\n      currentComposition = FallbackCompositionState.getPooled(nativeEventTarget);\\n    } else if (eventType === eventTypes.compositionEnd) {\\n      if (currentComposition) {\\n        fallbackData = currentComposition.getData();\\n      }\\n    }\\n  }\\n\\n  var event = SyntheticCompositionEvent.getPooled(eventType, targetInst, nativeEvent, nativeEventTarget);\\n\\n  if (fallbackData) {\\n    // Inject data generated from fallback path into the synthetic event.\\n    // This matches the property of native CompositionEventInterface.\\n    event.data = fallbackData;\\n  } else {\\n    var customData = getDataFromCustomEvent(nativeEvent);\\n    if (customData !== null) {\\n      event.data = customData;\\n    }\\n  }\\n\\n  EventPropagators.accumulateTwoPhaseDispatches(event);\\n  return event;\\n}\\n\\n/**\\n * @param {string} topLevelType Record from `EventConstants`.\\n * @param {object} nativeEvent Native browser event.\\n * @return {?string} The string corresponding to this `beforeInput` event.\\n */\\nfunction getNativeBeforeInputChars(topLevelType, nativeEvent) {\\n  switch (topLevelType) {\\n    case 'topCompositionEnd':\\n      return getDataFromCustomEvent(nativeEvent);\\n    case 'topKeyPress':\\n      /**\\n       * If native `textInput` events are available, our goal is to make\\n       * use of them. However, there is a special case: the spacebar key.\\n       * In Webkit, preventing default on a spacebar `textInput` event\\n       * cancels character insertion, but it *also* causes the browser\\n       * to fall back to its default spacebar behavior of scrolling the\\n       * page.\\n       *\\n       * Tracking at:\\n       * https://code.google.com/p/chromium/issues/detail?id=355103\\n       *\\n       * To avoid this issue, use the keypress event as if no `textInput`\\n       * event is available.\\n       */\\n      var which = nativeEvent.which;\\n      if (which !== SPACEBAR_CODE) {\\n        return null;\\n      }\\n\\n      hasSpaceKeypress = true;\\n      return SPACEBAR_CHAR;\\n\\n    case 'topTextInput':\\n      // Record the characters to be added to the DOM.\\n      var chars = nativeEvent.data;\\n\\n      // If it's a spacebar character, assume that we have already handled\\n      // it at the keypress level and bail immediately. Android Chrome\\n      // doesn't give us keycodes, so we need to blacklist it.\\n      if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\\n        return null;\\n      }\\n\\n      return chars;\\n\\n    default:\\n      // For other native event types, do nothing.\\n      return null;\\n  }\\n}\\n\\n/**\\n * For browsers that do not provide the `textInput` event, extract the\\n * appropriate string to use for SyntheticInputEvent.\\n *\\n * @param {string} topLevelType Record from `EventConstants`.\\n * @param {object} nativeEvent Native browser event.\\n * @return {?string} The fallback string for this `beforeInput` event.\\n */\\nfunction getFallbackBeforeInputChars(topLevelType, nativeEvent) {\\n  // If we are currently composing (IME) and using a fallback to do so,\\n  // try to extract the composed characters from the fallback object.\\n  // If composition event is available, we extract a string only at\\n  // compositionevent, otherwise extract it at fallback events.\\n  if (currentComposition) {\\n    if (topLevelType === 'topCompositionEnd' || !canUseCompositionEvent && isFallbackCompositionEnd(topLevelType, nativeEvent)) {\\n      var chars = currentComposition.getData();\\n      FallbackCompositionState.release(currentComposition);\\n      currentComposition = null;\\n      return chars;\\n    }\\n    return null;\\n  }\\n\\n  switch (topLevelType) {\\n    case 'topPaste':\\n      // If a paste event occurs after a keypress, throw out the input\\n      // chars. Paste events should not lead to BeforeInput events.\\n      return null;\\n    case 'topKeyPress':\\n      /**\\n       * As of v27, Firefox may fire keypress events even when no character\\n       * will be inserted. A few possibilities:\\n       *\\n       * - `which` is `0`. Arrow keys, Esc key, etc.\\n       *\\n       * - `which` is the pressed key code, but no char is available.\\n       *   Ex: 'AltGr + d` in Polish. There is no modified character for\\n       *   this key combination and no character is inserted into the\\n       *   document, but FF fires the keypress for char code `100` anyway.\\n       *   No `input` event will occur.\\n       *\\n       * - `which` is the pressed key code, but a command combination is\\n       *   being used. Ex: `Cmd+C`. No character is inserted, and no\\n       *   `input` event will occur.\\n       */\\n      if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {\\n        return String.fromCharCode(nativeEvent.which);\\n      }\\n      return null;\\n    case 'topCompositionEnd':\\n      return useFallbackCompositionData ? null : nativeEvent.data;\\n    default:\\n      return null;\\n  }\\n}\\n\\n/**\\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\\n * `textInput` or fallback behavior.\\n *\\n * @return {?object} A SyntheticInputEvent.\\n */\\nfunction extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\\n  var chars;\\n\\n  if (canUseTextInputEvent) {\\n    chars = getNativeBeforeInputChars(topLevelType, nativeEvent);\\n  } else {\\n    chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);\\n  }\\n\\n  // If no characters are being inserted, no BeforeInput event should\\n  // be fired.\\n  if (!chars) {\\n    return null;\\n  }\\n\\n  var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, targetInst, nativeEvent, nativeEventTarget);\\n\\n  event.data = chars;\\n  EventPropagators.accumulateTwoPhaseDispatches(event);\\n  return event;\\n}\\n\\n/**\\n * Create an `onBeforeInput` event to match\\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\\n *\\n * This event plugin is based on the native `textInput` event\\n * available in Chrome, Safari, Opera, and IE. This event fires after\\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\\n *\\n * `beforeInput` is spec'd but not implemented in any browsers, and\\n * the `input` event does not provide any useful information about what has\\n * actually been added, contrary to the spec. Thus, `textInput` is the best\\n * available event to identify the characters that have actually been inserted\\n * into the target node.\\n *\\n * This plugin is also responsible for emitting `composition` events, thus\\n * allowing us to share composition fallback code for both `beforeInput` and\\n * `composition` event types.\\n */\\nvar BeforeInputEventPlugin = {\\n\\n  eventTypes: eventTypes,\\n\\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\\n    return [extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget)];\\n  }\\n};\\n\\nmodule.exports = BeforeInputEventPlugin;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/BeforeInputEventPlugin.js\\n// module id = 118\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/BeforeInputEventPlugin.js?\");\n\n/***/ },\n/* 119 */\n/*!*********************************************!*\\\n  !*** ./~/react-dom/lib/EventPropagators.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar EventPluginHub = __webpack_require__(/*! ./EventPluginHub */ 120);\\nvar EventPluginUtils = __webpack_require__(/*! ./EventPluginUtils */ 122);\\n\\nvar accumulateInto = __webpack_require__(/*! ./accumulateInto */ 124);\\nvar forEachAccumulated = __webpack_require__(/*! ./forEachAccumulated */ 125);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar getListener = EventPluginHub.getListener;\\n\\n/**\\n * Some event types have a notion of different registration names for different\\n * \\\"phases\\\" of propagation. This finds listeners by a given phase.\\n */\\nfunction listenerAtPhase(inst, event, propagationPhase) {\\n  var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];\\n  return getListener(inst, registrationName);\\n}\\n\\n/**\\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\\n * here, allows us to not have to bind or create functions for each event.\\n * Mutating the event's members allows us to not have to create a wrapping\\n * \\\"dispatch\\\" object that pairs the event with the listener.\\n */\\nfunction accumulateDirectionalDispatches(inst, phase, event) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    process.env.NODE_ENV !== 'production' ? warning(inst, 'Dispatching inst must not be null') : void 0;\\n  }\\n  var listener = listenerAtPhase(inst, event, phase);\\n  if (listener) {\\n    event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\\n    event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\\n  }\\n}\\n\\n/**\\n * Collect dispatches (must be entirely collected before dispatching - see unit\\n * tests). Lazily allocate the array to conserve memory.  We must loop through\\n * each event and perform the traversal for each one. We cannot perform a\\n * single traversal for the entire collection of events because each event may\\n * have a different target.\\n */\\nfunction accumulateTwoPhaseDispatchesSingle(event) {\\n  if (event && event.dispatchConfig.phasedRegistrationNames) {\\n    EventPluginUtils.traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event);\\n  }\\n}\\n\\n/**\\n * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID.\\n */\\nfunction accumulateTwoPhaseDispatchesSingleSkipTarget(event) {\\n  if (event && event.dispatchConfig.phasedRegistrationNames) {\\n    var targetInst = event._targetInst;\\n    var parentInst = targetInst ? EventPluginUtils.getParentInstance(targetInst) : null;\\n    EventPluginUtils.traverseTwoPhase(parentInst, accumulateDirectionalDispatches, event);\\n  }\\n}\\n\\n/**\\n * Accumulates without regard to direction, does not look for phased\\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\\n */\\nfunction accumulateDispatches(inst, ignoredDirection, event) {\\n  if (event && event.dispatchConfig.registrationName) {\\n    var registrationName = event.dispatchConfig.registrationName;\\n    var listener = getListener(inst, registrationName);\\n    if (listener) {\\n      event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\\n      event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\\n    }\\n  }\\n}\\n\\n/**\\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\\n * `dispatchMarker`.\\n * @param {SyntheticEvent} event\\n */\\nfunction accumulateDirectDispatchesSingle(event) {\\n  if (event && event.dispatchConfig.registrationName) {\\n    accumulateDispatches(event._targetInst, null, event);\\n  }\\n}\\n\\nfunction accumulateTwoPhaseDispatches(events) {\\n  forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\\n}\\n\\nfunction accumulateTwoPhaseDispatchesSkipTarget(events) {\\n  forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget);\\n}\\n\\nfunction accumulateEnterLeaveDispatches(leave, enter, from, to) {\\n  EventPluginUtils.traverseEnterLeave(from, to, accumulateDispatches, leave, enter);\\n}\\n\\nfunction accumulateDirectDispatches(events) {\\n  forEachAccumulated(events, accumulateDirectDispatchesSingle);\\n}\\n\\n/**\\n * A small set of propagation patterns, each of which will accept a small amount\\n * of information, and generate a set of \\\"dispatch ready event objects\\\" - which\\n * are sets of events that have already been annotated with a set of dispatched\\n * listener functions/ids. The API is designed this way to discourage these\\n * propagation strategies from actually executing the dispatches, since we\\n * always want to collect the entire set of dispatches before executing event a\\n * single one.\\n *\\n * @constructor EventPropagators\\n */\\nvar EventPropagators = {\\n  accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,\\n  accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget,\\n  accumulateDirectDispatches: accumulateDirectDispatches,\\n  accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches\\n};\\n\\nmodule.exports = EventPropagators;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/EventPropagators.js\\n// module id = 119\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/EventPropagators.js?\");\n\n/***/ },\n/* 120 */\n/*!*******************************************!*\\\n  !*** ./~/react-dom/lib/EventPluginHub.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar EventPluginRegistry = __webpack_require__(/*! ./EventPluginRegistry */ 121);\\nvar EventPluginUtils = __webpack_require__(/*! ./EventPluginUtils */ 122);\\nvar ReactErrorUtils = __webpack_require__(/*! ./ReactErrorUtils */ 123);\\n\\nvar accumulateInto = __webpack_require__(/*! ./accumulateInto */ 124);\\nvar forEachAccumulated = __webpack_require__(/*! ./forEachAccumulated */ 125);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\n/**\\n * Internal store for event listeners\\n */\\nvar listenerBank = {};\\n\\n/**\\n * Internal queue of events that have accumulated their dispatches and are\\n * waiting to have their dispatches executed.\\n */\\nvar eventQueue = null;\\n\\n/**\\n * Dispatches an event and releases it back into the pool, unless persistent.\\n *\\n * @param {?object} event Synthetic event to be dispatched.\\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\\n * @private\\n */\\nvar executeDispatchesAndRelease = function (event, simulated) {\\n  if (event) {\\n    EventPluginUtils.executeDispatchesInOrder(event, simulated);\\n\\n    if (!event.isPersistent()) {\\n      event.constructor.release(event);\\n    }\\n  }\\n};\\nvar executeDispatchesAndReleaseSimulated = function (e) {\\n  return executeDispatchesAndRelease(e, true);\\n};\\nvar executeDispatchesAndReleaseTopLevel = function (e) {\\n  return executeDispatchesAndRelease(e, false);\\n};\\n\\nvar getDictionaryKey = function (inst) {\\n  // Prevents V8 performance issue:\\n  // https://github.com/facebook/react/pull/7232\\n  return '.' + inst._rootNodeID;\\n};\\n\\nfunction isInteractive(tag) {\\n  return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\\n}\\n\\nfunction shouldPreventMouseEvent(name, type, props) {\\n  switch (name) {\\n    case 'onClick':\\n    case 'onClickCapture':\\n    case 'onDoubleClick':\\n    case 'onDoubleClickCapture':\\n    case 'onMouseDown':\\n    case 'onMouseDownCapture':\\n    case 'onMouseMove':\\n    case 'onMouseMoveCapture':\\n    case 'onMouseUp':\\n    case 'onMouseUpCapture':\\n      return !!(props.disabled && isInteractive(type));\\n    default:\\n      return false;\\n  }\\n}\\n\\n/**\\n * This is a unified interface for event plugins to be installed and configured.\\n *\\n * Event plugins can implement the following properties:\\n *\\n *   `extractEvents` {function(string, DOMEventTarget, string, object): *}\\n *     Required. When a top-level event is fired, this method is expected to\\n *     extract synthetic events that will in turn be queued and dispatched.\\n *\\n *   `eventTypes` {object}\\n *     Optional, plugins that fire events must publish a mapping of registration\\n *     names that are used to register listeners. Values of this mapping must\\n *     be objects that contain `registrationName` or `phasedRegistrationNames`.\\n *\\n *   `executeDispatch` {function(object, function, string)}\\n *     Optional, allows plugins to override how an event gets dispatched. By\\n *     default, the listener is simply invoked.\\n *\\n * Each plugin that is injected into `EventsPluginHub` is immediately operable.\\n *\\n * @public\\n */\\nvar EventPluginHub = {\\n\\n  /**\\n   * Methods for injecting dependencies.\\n   */\\n  injection: {\\n\\n    /**\\n     * @param {array} InjectedEventPluginOrder\\n     * @public\\n     */\\n    injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,\\n\\n    /**\\n     * @param {object} injectedNamesToPlugins Map from names to plugin modules.\\n     */\\n    injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName\\n\\n  },\\n\\n  /**\\n   * Stores `listener` at `listenerBank[registrationName][key]`. Is idempotent.\\n   *\\n   * @param {object} inst The instance, which is the source of events.\\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\\n   * @param {function} listener The callback to store.\\n   */\\n  putListener: function (inst, registrationName, listener) {\\n    !(typeof listener === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : _prodInvariant('94', registrationName, typeof listener) : void 0;\\n\\n    var key = getDictionaryKey(inst);\\n    var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});\\n    bankForRegistrationName[key] = listener;\\n\\n    var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\\n    if (PluginModule && PluginModule.didPutListener) {\\n      PluginModule.didPutListener(inst, registrationName, listener);\\n    }\\n  },\\n\\n  /**\\n   * @param {object} inst The instance, which is the source of events.\\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\\n   * @return {?function} The stored callback.\\n   */\\n  getListener: function (inst, registrationName) {\\n    // TODO: shouldPreventMouseEvent is DOM-specific and definitely should not\\n    // live here; needs to be moved to a better place soon\\n    var bankForRegistrationName = listenerBank[registrationName];\\n    if (shouldPreventMouseEvent(registrationName, inst._currentElement.type, inst._currentElement.props)) {\\n      return null;\\n    }\\n    var key = getDictionaryKey(inst);\\n    return bankForRegistrationName && bankForRegistrationName[key];\\n  },\\n\\n  /**\\n   * Deletes a listener from the registration bank.\\n   *\\n   * @param {object} inst The instance, which is the source of events.\\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\\n   */\\n  deleteListener: function (inst, registrationName) {\\n    var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\\n    if (PluginModule && PluginModule.willDeleteListener) {\\n      PluginModule.willDeleteListener(inst, registrationName);\\n    }\\n\\n    var bankForRegistrationName = listenerBank[registrationName];\\n    // TODO: This should never be null -- when is it?\\n    if (bankForRegistrationName) {\\n      var key = getDictionaryKey(inst);\\n      delete bankForRegistrationName[key];\\n    }\\n  },\\n\\n  /**\\n   * Deletes all listeners for the DOM element with the supplied ID.\\n   *\\n   * @param {object} inst The instance, which is the source of events.\\n   */\\n  deleteAllListeners: function (inst) {\\n    var key = getDictionaryKey(inst);\\n    for (var registrationName in listenerBank) {\\n      if (!listenerBank.hasOwnProperty(registrationName)) {\\n        continue;\\n      }\\n\\n      if (!listenerBank[registrationName][key]) {\\n        continue;\\n      }\\n\\n      var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\\n      if (PluginModule && PluginModule.willDeleteListener) {\\n        PluginModule.willDeleteListener(inst, registrationName);\\n      }\\n\\n      delete listenerBank[registrationName][key];\\n    }\\n  },\\n\\n  /**\\n   * Allows registered plugins an opportunity to extract events from top-level\\n   * native browser events.\\n   *\\n   * @return {*} An accumulation of synthetic events.\\n   * @internal\\n   */\\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\\n    var events;\\n    var plugins = EventPluginRegistry.plugins;\\n    for (var i = 0; i < plugins.length; i++) {\\n      // Not every plugin in the ordering may be loaded at runtime.\\n      var possiblePlugin = plugins[i];\\n      if (possiblePlugin) {\\n        var extractedEvents = possiblePlugin.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);\\n        if (extractedEvents) {\\n          events = accumulateInto(events, extractedEvents);\\n        }\\n      }\\n    }\\n    return events;\\n  },\\n\\n  /**\\n   * Enqueues a synthetic event that should be dispatched when\\n   * `processEventQueue` is invoked.\\n   *\\n   * @param {*} events An accumulation of synthetic events.\\n   * @internal\\n   */\\n  enqueueEvents: function (events) {\\n    if (events) {\\n      eventQueue = accumulateInto(eventQueue, events);\\n    }\\n  },\\n\\n  /**\\n   * Dispatches all synthetic events on the event queue.\\n   *\\n   * @internal\\n   */\\n  processEventQueue: function (simulated) {\\n    // Set `eventQueue` to null before processing it so that we can tell if more\\n    // events get enqueued while processing.\\n    var processingEventQueue = eventQueue;\\n    eventQueue = null;\\n    if (simulated) {\\n      forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated);\\n    } else {\\n      forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);\\n    }\\n    !!eventQueue ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.') : _prodInvariant('95') : void 0;\\n    // This would be a good time to rethrow if any of the event handlers threw.\\n    ReactErrorUtils.rethrowCaughtError();\\n  },\\n\\n  /**\\n   * These are needed for tests only. Do not use!\\n   */\\n  __purge: function () {\\n    listenerBank = {};\\n  },\\n\\n  __getListenerBank: function () {\\n    return listenerBank;\\n  }\\n\\n};\\n\\nmodule.exports = EventPluginHub;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/EventPluginHub.js\\n// module id = 120\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/EventPluginHub.js?\");\n\n/***/ },\n/* 121 */\n/*!************************************************!*\\\n  !*** ./~/react-dom/lib/EventPluginRegistry.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\n/**\\n * Injectable ordering of event plugins.\\n */\\nvar eventPluginOrder = null;\\n\\n/**\\n * Injectable mapping from names to event plugin modules.\\n */\\nvar namesToPlugins = {};\\n\\n/**\\n * Recomputes the plugin list using the injected plugins and plugin ordering.\\n *\\n * @private\\n */\\nfunction recomputePluginOrdering() {\\n  if (!eventPluginOrder) {\\n    // Wait until an `eventPluginOrder` is injected.\\n    return;\\n  }\\n  for (var pluginName in namesToPlugins) {\\n    var pluginModule = namesToPlugins[pluginName];\\n    var pluginIndex = eventPluginOrder.indexOf(pluginName);\\n    !(pluginIndex > -1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.', pluginName) : _prodInvariant('96', pluginName) : void 0;\\n    if (EventPluginRegistry.plugins[pluginIndex]) {\\n      continue;\\n    }\\n    !pluginModule.extractEvents ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.', pluginName) : _prodInvariant('97', pluginName) : void 0;\\n    EventPluginRegistry.plugins[pluginIndex] = pluginModule;\\n    var publishedEvents = pluginModule.eventTypes;\\n    for (var eventName in publishedEvents) {\\n      !publishEventForPlugin(publishedEvents[eventName], pluginModule, eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : _prodInvariant('98', eventName, pluginName) : void 0;\\n    }\\n  }\\n}\\n\\n/**\\n * Publishes an event so that it can be dispatched by the supplied plugin.\\n *\\n * @param {object} dispatchConfig Dispatch configuration for the event.\\n * @param {object} PluginModule Plugin publishing the event.\\n * @return {boolean} True if the event was successfully published.\\n * @private\\n */\\nfunction publishEventForPlugin(dispatchConfig, pluginModule, eventName) {\\n  !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.', eventName) : _prodInvariant('99', eventName) : void 0;\\n  EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;\\n\\n  var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\\n  if (phasedRegistrationNames) {\\n    for (var phaseName in phasedRegistrationNames) {\\n      if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\\n        var phasedRegistrationName = phasedRegistrationNames[phaseName];\\n        publishRegistrationName(phasedRegistrationName, pluginModule, eventName);\\n      }\\n    }\\n    return true;\\n  } else if (dispatchConfig.registrationName) {\\n    publishRegistrationName(dispatchConfig.registrationName, pluginModule, eventName);\\n    return true;\\n  }\\n  return false;\\n}\\n\\n/**\\n * Publishes a registration name that is used to identify dispatched events and\\n * can be used with `EventPluginHub.putListener` to register listeners.\\n *\\n * @param {string} registrationName Registration name to add.\\n * @param {object} PluginModule Plugin publishing the event.\\n * @private\\n */\\nfunction publishRegistrationName(registrationName, pluginModule, eventName) {\\n  !!EventPluginRegistry.registrationNameModules[registrationName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.', registrationName) : _prodInvariant('100', registrationName) : void 0;\\n  EventPluginRegistry.registrationNameModules[registrationName] = pluginModule;\\n  EventPluginRegistry.registrationNameDependencies[registrationName] = pluginModule.eventTypes[eventName].dependencies;\\n\\n  if (process.env.NODE_ENV !== 'production') {\\n    var lowerCasedName = registrationName.toLowerCase();\\n    EventPluginRegistry.possibleRegistrationNames[lowerCasedName] = registrationName;\\n\\n    if (registrationName === 'onDoubleClick') {\\n      EventPluginRegistry.possibleRegistrationNames.ondblclick = registrationName;\\n    }\\n  }\\n}\\n\\n/**\\n * Registers plugins so that they can extract and dispatch events.\\n *\\n * @see {EventPluginHub}\\n */\\nvar EventPluginRegistry = {\\n\\n  /**\\n   * Ordered list of injected plugins.\\n   */\\n  plugins: [],\\n\\n  /**\\n   * Mapping from event name to dispatch config\\n   */\\n  eventNameDispatchConfigs: {},\\n\\n  /**\\n   * Mapping from registration name to plugin module\\n   */\\n  registrationNameModules: {},\\n\\n  /**\\n   * Mapping from registration name to event name\\n   */\\n  registrationNameDependencies: {},\\n\\n  /**\\n   * Mapping from lowercase registration names to the properly cased version,\\n   * used to warn in the case of missing event handlers. Available\\n   * only in __DEV__.\\n   * @type {Object}\\n   */\\n  possibleRegistrationNames: process.env.NODE_ENV !== 'production' ? {} : null,\\n  // Trust the developer to only use possibleRegistrationNames in __DEV__\\n\\n  /**\\n   * Injects an ordering of plugins (by plugin name). This allows the ordering\\n   * to be decoupled from injection of the actual plugins so that ordering is\\n   * always deterministic regardless of packaging, on-the-fly injection, etc.\\n   *\\n   * @param {array} InjectedEventPluginOrder\\n   * @internal\\n   * @see {EventPluginHub.injection.injectEventPluginOrder}\\n   */\\n  injectEventPluginOrder: function (injectedEventPluginOrder) {\\n    !!eventPluginOrder ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.') : _prodInvariant('101') : void 0;\\n    // Clone the ordering so it cannot be dynamically mutated.\\n    eventPluginOrder = Array.prototype.slice.call(injectedEventPluginOrder);\\n    recomputePluginOrdering();\\n  },\\n\\n  /**\\n   * Injects plugins to be used by `EventPluginHub`. The plugin names must be\\n   * in the ordering injected by `injectEventPluginOrder`.\\n   *\\n   * Plugins can be injected as part of page initialization or on-the-fly.\\n   *\\n   * @param {object} injectedNamesToPlugins Map from names to plugin modules.\\n   * @internal\\n   * @see {EventPluginHub.injection.injectEventPluginsByName}\\n   */\\n  injectEventPluginsByName: function (injectedNamesToPlugins) {\\n    var isOrderingDirty = false;\\n    for (var pluginName in injectedNamesToPlugins) {\\n      if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\\n        continue;\\n      }\\n      var pluginModule = injectedNamesToPlugins[pluginName];\\n      if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== pluginModule) {\\n        !!namesToPlugins[pluginName] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.', pluginName) : _prodInvariant('102', pluginName) : void 0;\\n        namesToPlugins[pluginName] = pluginModule;\\n        isOrderingDirty = true;\\n      }\\n    }\\n    if (isOrderingDirty) {\\n      recomputePluginOrdering();\\n    }\\n  },\\n\\n  /**\\n   * Looks up the plugin for the supplied event.\\n   *\\n   * @param {object} event A synthetic event.\\n   * @return {?object} The plugin that created the supplied event.\\n   * @internal\\n   */\\n  getPluginModuleForEvent: function (event) {\\n    var dispatchConfig = event.dispatchConfig;\\n    if (dispatchConfig.registrationName) {\\n      return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;\\n    }\\n    if (dispatchConfig.phasedRegistrationNames !== undefined) {\\n      // pulling phasedRegistrationNames out of dispatchConfig helps Flow see\\n      // that it is not undefined.\\n      var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\\n\\n      for (var phase in phasedRegistrationNames) {\\n        if (!phasedRegistrationNames.hasOwnProperty(phase)) {\\n          continue;\\n        }\\n        var pluginModule = EventPluginRegistry.registrationNameModules[phasedRegistrationNames[phase]];\\n        if (pluginModule) {\\n          return pluginModule;\\n        }\\n      }\\n    }\\n    return null;\\n  },\\n\\n  /**\\n   * Exposed for unit testing.\\n   * @private\\n   */\\n  _resetEventPlugins: function () {\\n    eventPluginOrder = null;\\n    for (var pluginName in namesToPlugins) {\\n      if (namesToPlugins.hasOwnProperty(pluginName)) {\\n        delete namesToPlugins[pluginName];\\n      }\\n    }\\n    EventPluginRegistry.plugins.length = 0;\\n\\n    var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;\\n    for (var eventName in eventNameDispatchConfigs) {\\n      if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {\\n        delete eventNameDispatchConfigs[eventName];\\n      }\\n    }\\n\\n    var registrationNameModules = EventPluginRegistry.registrationNameModules;\\n    for (var registrationName in registrationNameModules) {\\n      if (registrationNameModules.hasOwnProperty(registrationName)) {\\n        delete registrationNameModules[registrationName];\\n      }\\n    }\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      var possibleRegistrationNames = EventPluginRegistry.possibleRegistrationNames;\\n      for (var lowerCasedName in possibleRegistrationNames) {\\n        if (possibleRegistrationNames.hasOwnProperty(lowerCasedName)) {\\n          delete possibleRegistrationNames[lowerCasedName];\\n        }\\n      }\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = EventPluginRegistry;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/EventPluginRegistry.js\\n// module id = 121\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/EventPluginRegistry.js?\");\n\n/***/ },\n/* 122 */\n/*!*********************************************!*\\\n  !*** ./~/react-dom/lib/EventPluginUtils.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar ReactErrorUtils = __webpack_require__(/*! ./ReactErrorUtils */ 123);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\n/**\\n * Injected dependencies:\\n */\\n\\n/**\\n * - `ComponentTree`: [required] Module that can convert between React instances\\n *   and actual node references.\\n */\\nvar ComponentTree;\\nvar TreeTraversal;\\nvar injection = {\\n  injectComponentTree: function (Injected) {\\n    ComponentTree = Injected;\\n    if (process.env.NODE_ENV !== 'production') {\\n      process.env.NODE_ENV !== 'production' ? warning(Injected && Injected.getNodeFromInstance && Injected.getInstanceFromNode, 'EventPluginUtils.injection.injectComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.') : void 0;\\n    }\\n  },\\n  injectTreeTraversal: function (Injected) {\\n    TreeTraversal = Injected;\\n    if (process.env.NODE_ENV !== 'production') {\\n      process.env.NODE_ENV !== 'production' ? warning(Injected && Injected.isAncestor && Injected.getLowestCommonAncestor, 'EventPluginUtils.injection.injectTreeTraversal(...): Injected ' + 'module is missing isAncestor or getLowestCommonAncestor.') : void 0;\\n    }\\n  }\\n};\\n\\nfunction isEndish(topLevelType) {\\n  return topLevelType === 'topMouseUp' || topLevelType === 'topTouchEnd' || topLevelType === 'topTouchCancel';\\n}\\n\\nfunction isMoveish(topLevelType) {\\n  return topLevelType === 'topMouseMove' || topLevelType === 'topTouchMove';\\n}\\nfunction isStartish(topLevelType) {\\n  return topLevelType === 'topMouseDown' || topLevelType === 'topTouchStart';\\n}\\n\\nvar validateEventDispatches;\\nif (process.env.NODE_ENV !== 'production') {\\n  validateEventDispatches = function (event) {\\n    var dispatchListeners = event._dispatchListeners;\\n    var dispatchInstances = event._dispatchInstances;\\n\\n    var listenersIsArr = Array.isArray(dispatchListeners);\\n    var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\\n\\n    var instancesIsArr = Array.isArray(dispatchInstances);\\n    var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;\\n\\n    process.env.NODE_ENV !== 'production' ? warning(instancesIsArr === listenersIsArr && instancesLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : void 0;\\n  };\\n}\\n\\n/**\\n * Dispatch the event to the listener.\\n * @param {SyntheticEvent} event SyntheticEvent to handle\\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\\n * @param {function} listener Application-level callback\\n * @param {*} inst Internal component instance\\n */\\nfunction executeDispatch(event, simulated, listener, inst) {\\n  var type = event.type || 'unknown-event';\\n  event.currentTarget = EventPluginUtils.getNodeFromInstance(inst);\\n  if (simulated) {\\n    ReactErrorUtils.invokeGuardedCallbackWithCatch(type, listener, event);\\n  } else {\\n    ReactErrorUtils.invokeGuardedCallback(type, listener, event);\\n  }\\n  event.currentTarget = null;\\n}\\n\\n/**\\n * Standard/simple iteration through an event's collected dispatches.\\n */\\nfunction executeDispatchesInOrder(event, simulated) {\\n  var dispatchListeners = event._dispatchListeners;\\n  var dispatchInstances = event._dispatchInstances;\\n  if (process.env.NODE_ENV !== 'production') {\\n    validateEventDispatches(event);\\n  }\\n  if (Array.isArray(dispatchListeners)) {\\n    for (var i = 0; i < dispatchListeners.length; i++) {\\n      if (event.isPropagationStopped()) {\\n        break;\\n      }\\n      // Listeners and Instances are two parallel arrays that are always in sync.\\n      executeDispatch(event, simulated, dispatchListeners[i], dispatchInstances[i]);\\n    }\\n  } else if (dispatchListeners) {\\n    executeDispatch(event, simulated, dispatchListeners, dispatchInstances);\\n  }\\n  event._dispatchListeners = null;\\n  event._dispatchInstances = null;\\n}\\n\\n/**\\n * Standard/simple iteration through an event's collected dispatches, but stops\\n * at the first dispatch execution returning true, and returns that id.\\n *\\n * @return {?string} id of the first dispatch execution who's listener returns\\n * true, or null if no listener returned true.\\n */\\nfunction executeDispatchesInOrderStopAtTrueImpl(event) {\\n  var dispatchListeners = event._dispatchListeners;\\n  var dispatchInstances = event._dispatchInstances;\\n  if (process.env.NODE_ENV !== 'production') {\\n    validateEventDispatches(event);\\n  }\\n  if (Array.isArray(dispatchListeners)) {\\n    for (var i = 0; i < dispatchListeners.length; i++) {\\n      if (event.isPropagationStopped()) {\\n        break;\\n      }\\n      // Listeners and Instances are two parallel arrays that are always in sync.\\n      if (dispatchListeners[i](event, dispatchInstances[i])) {\\n        return dispatchInstances[i];\\n      }\\n    }\\n  } else if (dispatchListeners) {\\n    if (dispatchListeners(event, dispatchInstances)) {\\n      return dispatchInstances;\\n    }\\n  }\\n  return null;\\n}\\n\\n/**\\n * @see executeDispatchesInOrderStopAtTrueImpl\\n */\\nfunction executeDispatchesInOrderStopAtTrue(event) {\\n  var ret = executeDispatchesInOrderStopAtTrueImpl(event);\\n  event._dispatchInstances = null;\\n  event._dispatchListeners = null;\\n  return ret;\\n}\\n\\n/**\\n * Execution of a \\\"direct\\\" dispatch - there must be at most one dispatch\\n * accumulated on the event or it is considered an error. It doesn't really make\\n * sense for an event with multiple dispatches (bubbled) to keep track of the\\n * return values at each dispatch execution, but it does tend to make sense when\\n * dealing with \\\"direct\\\" dispatches.\\n *\\n * @return {*} The return value of executing the single dispatch.\\n */\\nfunction executeDirectDispatch(event) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    validateEventDispatches(event);\\n  }\\n  var dispatchListener = event._dispatchListeners;\\n  var dispatchInstance = event._dispatchInstances;\\n  !!Array.isArray(dispatchListener) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : _prodInvariant('103') : void 0;\\n  event.currentTarget = dispatchListener ? EventPluginUtils.getNodeFromInstance(dispatchInstance) : null;\\n  var res = dispatchListener ? dispatchListener(event) : null;\\n  event.currentTarget = null;\\n  event._dispatchListeners = null;\\n  event._dispatchInstances = null;\\n  return res;\\n}\\n\\n/**\\n * @param {SyntheticEvent} event\\n * @return {boolean} True iff number of dispatches accumulated is greater than 0.\\n */\\nfunction hasDispatches(event) {\\n  return !!event._dispatchListeners;\\n}\\n\\n/**\\n * General utilities that are useful in creating custom Event Plugins.\\n */\\nvar EventPluginUtils = {\\n  isEndish: isEndish,\\n  isMoveish: isMoveish,\\n  isStartish: isStartish,\\n\\n  executeDirectDispatch: executeDirectDispatch,\\n  executeDispatchesInOrder: executeDispatchesInOrder,\\n  executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,\\n  hasDispatches: hasDispatches,\\n\\n  getInstanceFromNode: function (node) {\\n    return ComponentTree.getInstanceFromNode(node);\\n  },\\n  getNodeFromInstance: function (node) {\\n    return ComponentTree.getNodeFromInstance(node);\\n  },\\n  isAncestor: function (a, b) {\\n    return TreeTraversal.isAncestor(a, b);\\n  },\\n  getLowestCommonAncestor: function (a, b) {\\n    return TreeTraversal.getLowestCommonAncestor(a, b);\\n  },\\n  getParentInstance: function (inst) {\\n    return TreeTraversal.getParentInstance(inst);\\n  },\\n  traverseTwoPhase: function (target, fn, arg) {\\n    return TreeTraversal.traverseTwoPhase(target, fn, arg);\\n  },\\n  traverseEnterLeave: function (from, to, fn, argFrom, argTo) {\\n    return TreeTraversal.traverseEnterLeave(from, to, fn, argFrom, argTo);\\n  },\\n\\n  injection: injection\\n};\\n\\nmodule.exports = EventPluginUtils;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/EventPluginUtils.js\\n// module id = 122\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/EventPluginUtils.js?\");\n\n/***/ },\n/* 123 */\n/*!********************************************!*\\\n  !*** ./~/react-dom/lib/ReactErrorUtils.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar caughtError = null;\\n\\n/**\\n * Call a function while guarding against errors that happens within it.\\n *\\n * @param {String} name of the guard to use for logging or debugging\\n * @param {Function} func The function to invoke\\n * @param {*} a First argument\\n * @param {*} b Second argument\\n */\\nfunction invokeGuardedCallback(name, func, a) {\\n  try {\\n    func(a);\\n  } catch (x) {\\n    if (caughtError === null) {\\n      caughtError = x;\\n    }\\n  }\\n}\\n\\nvar ReactErrorUtils = {\\n  invokeGuardedCallback: invokeGuardedCallback,\\n\\n  /**\\n   * Invoked by ReactTestUtils.Simulate so that any errors thrown by the event\\n   * handler are sure to be rethrown by rethrowCaughtError.\\n   */\\n  invokeGuardedCallbackWithCatch: invokeGuardedCallback,\\n\\n  /**\\n   * During execution of guarded functions we will capture the first error which\\n   * we will rethrow to be handled by the top level error handler.\\n   */\\n  rethrowCaughtError: function () {\\n    if (caughtError) {\\n      var error = caughtError;\\n      caughtError = null;\\n      throw error;\\n    }\\n  }\\n};\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  /**\\n   * To help development we can get better devtools integration by simulating a\\n   * real browser event.\\n   */\\n  if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\\n    var fakeNode = document.createElement('react');\\n    ReactErrorUtils.invokeGuardedCallback = function (name, func, a) {\\n      var boundFunc = func.bind(null, a);\\n      var evtType = 'react-' + name;\\n      fakeNode.addEventListener(evtType, boundFunc, false);\\n      var evt = document.createEvent('Event');\\n      // $FlowFixMe https://github.com/facebook/flow/issues/2336\\n      evt.initEvent(evtType, false, false);\\n      fakeNode.dispatchEvent(evt);\\n      fakeNode.removeEventListener(evtType, boundFunc, false);\\n    };\\n  }\\n}\\n\\nmodule.exports = ReactErrorUtils;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactErrorUtils.js\\n// module id = 123\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactErrorUtils.js?\");\n\n/***/ },\n/* 124 */\n/*!*******************************************!*\\\n  !*** ./~/react-dom/lib/accumulateInto.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\n/**\\n * Accumulates items that must not be null or undefined into the first one. This\\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\\n * API cleanness. Since `current` can be null before being passed in and not\\n * null after this function, make sure to assign it back to `current`:\\n *\\n * `a = accumulateInto(a, b);`\\n *\\n * This API should be sparingly used. Try `accumulate` for something cleaner.\\n *\\n * @return {*|array<*>} An accumulation of items.\\n */\\n\\nfunction accumulateInto(current, next) {\\n  !(next != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : _prodInvariant('30') : void 0;\\n\\n  if (current == null) {\\n    return next;\\n  }\\n\\n  // Both are not empty. Warning: Never call x.concat(y) when you are not\\n  // certain that x is an Array (x could be a string with concat method).\\n  if (Array.isArray(current)) {\\n    if (Array.isArray(next)) {\\n      current.push.apply(current, next);\\n      return current;\\n    }\\n    current.push(next);\\n    return current;\\n  }\\n\\n  if (Array.isArray(next)) {\\n    // A bit too dangerous to mutate `next`.\\n    return [current].concat(next);\\n  }\\n\\n  return [current, next];\\n}\\n\\nmodule.exports = accumulateInto;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/accumulateInto.js\\n// module id = 124\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/accumulateInto.js?\");\n\n/***/ },\n/* 125 */\n/*!***********************************************!*\\\n  !*** ./~/react-dom/lib/forEachAccumulated.js ***!\n  \\***********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n/**\\n * @param {array} arr an \\\"accumulation\\\" of items which is either an Array or\\n * a single item. Useful when paired with the `accumulate` module. This is a\\n * simple utility that allows us to reason about a collection of items, but\\n * handling the case when there is exactly one item (and we do not need to\\n * allocate an array).\\n */\\n\\nfunction forEachAccumulated(arr, cb, scope) {\\n  if (Array.isArray(arr)) {\\n    arr.forEach(cb, scope);\\n  } else if (arr) {\\n    cb.call(scope, arr);\\n  }\\n}\\n\\nmodule.exports = forEachAccumulated;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/forEachAccumulated.js\\n// module id = 125\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/forEachAccumulated.js?\");\n\n/***/ },\n/* 126 */\n/*!********************************************!*\\\n  !*** ./~/fbjs/lib/ExecutionEnvironment.js ***!\n  \\********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\\n\\n/**\\n * Simple, lightweight module assisting with the detection and context of\\n * Worker. Helps avoid circular dependencies and allows code to reason about\\n * whether or not they are in a Worker, even if they never include the main\\n * `ReactWorker` dependency.\\n */\\nvar ExecutionEnvironment = {\\n\\n  canUseDOM: canUseDOM,\\n\\n  canUseWorkers: typeof Worker !== 'undefined',\\n\\n  canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\\n\\n  canUseViewport: canUseDOM && !!window.screen,\\n\\n  isInWorker: !canUseDOM // For now, this is true - might change in the future.\\n\\n};\\n\\nmodule.exports = ExecutionEnvironment;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/ExecutionEnvironment.js\\n// module id = 126\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/ExecutionEnvironment.js?\");\n\n/***/ },\n/* 127 */\n/*!*****************************************************!*\\\n  !*** ./~/react-dom/lib/FallbackCompositionState.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 128);\\n\\nvar getTextContentAccessor = __webpack_require__(/*! ./getTextContentAccessor */ 129);\\n\\n/**\\n * This helper class stores information about text content of a target node,\\n * allowing comparison of content before and after a given event.\\n *\\n * Identify the node where selection currently begins, then observe\\n * both its text content and its current position in the DOM. Since the\\n * browser may natively replace the target node during composition, we can\\n * use its position to find its replacement.\\n *\\n * @param {DOMEventTarget} root\\n */\\nfunction FallbackCompositionState(root) {\\n  this._root = root;\\n  this._startText = this.getText();\\n  this._fallbackText = null;\\n}\\n\\n_assign(FallbackCompositionState.prototype, {\\n  destructor: function () {\\n    this._root = null;\\n    this._startText = null;\\n    this._fallbackText = null;\\n  },\\n\\n  /**\\n   * Get current text of input.\\n   *\\n   * @return {string}\\n   */\\n  getText: function () {\\n    if ('value' in this._root) {\\n      return this._root.value;\\n    }\\n    return this._root[getTextContentAccessor()];\\n  },\\n\\n  /**\\n   * Determine the differing substring between the initially stored\\n   * text content and the current content.\\n   *\\n   * @return {string}\\n   */\\n  getData: function () {\\n    if (this._fallbackText) {\\n      return this._fallbackText;\\n    }\\n\\n    var start;\\n    var startValue = this._startText;\\n    var startLength = startValue.length;\\n    var end;\\n    var endValue = this.getText();\\n    var endLength = endValue.length;\\n\\n    for (start = 0; start < startLength; start++) {\\n      if (startValue[start] !== endValue[start]) {\\n        break;\\n      }\\n    }\\n\\n    var minEnd = startLength - start;\\n    for (end = 1; end <= minEnd; end++) {\\n      if (startValue[startLength - end] !== endValue[endLength - end]) {\\n        break;\\n      }\\n    }\\n\\n    var sliceTail = end > 1 ? 1 - end : undefined;\\n    this._fallbackText = endValue.slice(start, sliceTail);\\n    return this._fallbackText;\\n  }\\n});\\n\\nPooledClass.addPoolingTo(FallbackCompositionState);\\n\\nmodule.exports = FallbackCompositionState;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/FallbackCompositionState.js\\n// module id = 127\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/FallbackCompositionState.js?\");\n\n/***/ },\n/* 128 */\n/*!****************************************!*\\\n  !*** ./~/react-dom/lib/PooledClass.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\n/**\\n * Static poolers. Several custom versions for each potential number of\\n * arguments. A completely generic pooler is easy to implement, but would\\n * require accessing the `arguments` object. In each of these, `this` refers to\\n * the Class itself, not an instance. If any others are needed, simply add them\\n * here, or in their own files.\\n */\\nvar oneArgumentPooler = function (copyFieldsFrom) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, copyFieldsFrom);\\n    return instance;\\n  } else {\\n    return new Klass(copyFieldsFrom);\\n  }\\n};\\n\\nvar twoArgumentPooler = function (a1, a2) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2);\\n  }\\n};\\n\\nvar threeArgumentPooler = function (a1, a2, a3) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2, a3);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2, a3);\\n  }\\n};\\n\\nvar fourArgumentPooler = function (a1, a2, a3, a4) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2, a3, a4);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2, a3, a4);\\n  }\\n};\\n\\nvar fiveArgumentPooler = function (a1, a2, a3, a4, a5) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2, a3, a4, a5);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2, a3, a4, a5);\\n  }\\n};\\n\\nvar standardReleaser = function (instance) {\\n  var Klass = this;\\n  !(instance instanceof Klass) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : _prodInvariant('25') : void 0;\\n  instance.destructor();\\n  if (Klass.instancePool.length < Klass.poolSize) {\\n    Klass.instancePool.push(instance);\\n  }\\n};\\n\\nvar DEFAULT_POOL_SIZE = 10;\\nvar DEFAULT_POOLER = oneArgumentPooler;\\n\\n/**\\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\\n * you give this may have a `poolSize` property, and will look for a\\n * prototypical `destructor` on instances.\\n *\\n * @param {Function} CopyConstructor Constructor that can be used to reset.\\n * @param {Function} pooler Customizable pooler.\\n */\\nvar addPoolingTo = function (CopyConstructor, pooler) {\\n  // Casting as any so that flow ignores the actual implementation and trusts\\n  // it to match the type we declared\\n  var NewKlass = CopyConstructor;\\n  NewKlass.instancePool = [];\\n  NewKlass.getPooled = pooler || DEFAULT_POOLER;\\n  if (!NewKlass.poolSize) {\\n    NewKlass.poolSize = DEFAULT_POOL_SIZE;\\n  }\\n  NewKlass.release = standardReleaser;\\n  return NewKlass;\\n};\\n\\nvar PooledClass = {\\n  addPoolingTo: addPoolingTo,\\n  oneArgumentPooler: oneArgumentPooler,\\n  twoArgumentPooler: twoArgumentPooler,\\n  threeArgumentPooler: threeArgumentPooler,\\n  fourArgumentPooler: fourArgumentPooler,\\n  fiveArgumentPooler: fiveArgumentPooler\\n};\\n\\nmodule.exports = PooledClass;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/PooledClass.js\\n// module id = 128\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/PooledClass.js?\");\n\n/***/ },\n/* 129 */\n/*!***************************************************!*\\\n  !*** ./~/react-dom/lib/getTextContentAccessor.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ 126);\\n\\nvar contentKey = null;\\n\\n/**\\n * Gets the key used to access text content on a DOM node.\\n *\\n * @return {?string} Key used to access text content.\\n * @internal\\n */\\nfunction getTextContentAccessor() {\\n  if (!contentKey && ExecutionEnvironment.canUseDOM) {\\n    // Prefer textContent to innerText because many browsers support both but\\n    // SVG <text> elements don't support innerText even when <div> does.\\n    contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';\\n  }\\n  return contentKey;\\n}\\n\\nmodule.exports = getTextContentAccessor;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/getTextContentAccessor.js\\n// module id = 129\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/getTextContentAccessor.js?\");\n\n/***/ },\n/* 130 */\n/*!******************************************************!*\\\n  !*** ./~/react-dom/lib/SyntheticCompositionEvent.js ***!\n  \\******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 131);\\n\\n/**\\n * @interface Event\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\\n */\\nvar CompositionEventInterface = {\\n  data: null\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\\n}\\n\\nSyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);\\n\\nmodule.exports = SyntheticCompositionEvent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/SyntheticCompositionEvent.js\\n// module id = 130\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/SyntheticCompositionEvent.js?\");\n\n/***/ },\n/* 131 */\n/*!*******************************************!*\\\n  !*** ./~/react-dom/lib/SyntheticEvent.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 128);\\n\\nvar emptyFunction = __webpack_require__(/*! fbjs/lib/emptyFunction */ 12);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar didWarnForAddedNewProperty = false;\\nvar isProxySupported = typeof Proxy === 'function';\\n\\nvar shouldBeReleasedProperties = ['dispatchConfig', '_targetInst', 'nativeEvent', 'isDefaultPrevented', 'isPropagationStopped', '_dispatchListeners', '_dispatchInstances'];\\n\\n/**\\n * @interface Event\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar EventInterface = {\\n  type: null,\\n  target: null,\\n  // currentTarget is set when dispatching; no use in copying it here\\n  currentTarget: emptyFunction.thatReturnsNull,\\n  eventPhase: null,\\n  bubbles: null,\\n  cancelable: null,\\n  timeStamp: function (event) {\\n    return event.timeStamp || Date.now();\\n  },\\n  defaultPrevented: null,\\n  isTrusted: null\\n};\\n\\n/**\\n * Synthetic events are dispatched by event plugins, typically in response to a\\n * top-level event delegation handler.\\n *\\n * These systems should generally use pooling to reduce the frequency of garbage\\n * collection. The system should check `isPersistent` to determine whether the\\n * event should be released into the pool after being dispatched. Users that\\n * need a persisted event should invoke `persist`.\\n *\\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\\n * DOM interface; custom application-specific events can also subclass this.\\n *\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {*} targetInst Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @param {DOMEventTarget} nativeEventTarget Target node.\\n */\\nfunction SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    // these have a getter/setter for warnings\\n    delete this.nativeEvent;\\n    delete this.preventDefault;\\n    delete this.stopPropagation;\\n  }\\n\\n  this.dispatchConfig = dispatchConfig;\\n  this._targetInst = targetInst;\\n  this.nativeEvent = nativeEvent;\\n\\n  var Interface = this.constructor.Interface;\\n  for (var propName in Interface) {\\n    if (!Interface.hasOwnProperty(propName)) {\\n      continue;\\n    }\\n    if (process.env.NODE_ENV !== 'production') {\\n      delete this[propName]; // this has a getter/setter for warnings\\n    }\\n    var normalize = Interface[propName];\\n    if (normalize) {\\n      this[propName] = normalize(nativeEvent);\\n    } else {\\n      if (propName === 'target') {\\n        this.target = nativeEventTarget;\\n      } else {\\n        this[propName] = nativeEvent[propName];\\n      }\\n    }\\n  }\\n\\n  var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\\n  if (defaultPrevented) {\\n    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\\n  } else {\\n    this.isDefaultPrevented = emptyFunction.thatReturnsFalse;\\n  }\\n  this.isPropagationStopped = emptyFunction.thatReturnsFalse;\\n  return this;\\n}\\n\\n_assign(SyntheticEvent.prototype, {\\n\\n  preventDefault: function () {\\n    this.defaultPrevented = true;\\n    var event = this.nativeEvent;\\n    if (!event) {\\n      return;\\n    }\\n\\n    if (event.preventDefault) {\\n      event.preventDefault();\\n    } else if (typeof event.returnValue !== 'unknown') {\\n      // eslint-disable-line valid-typeof\\n      event.returnValue = false;\\n    }\\n    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\\n  },\\n\\n  stopPropagation: function () {\\n    var event = this.nativeEvent;\\n    if (!event) {\\n      return;\\n    }\\n\\n    if (event.stopPropagation) {\\n      event.stopPropagation();\\n    } else if (typeof event.cancelBubble !== 'unknown') {\\n      // eslint-disable-line valid-typeof\\n      // The ChangeEventPlugin registers a \\\"propertychange\\\" event for\\n      // IE. This event does not support bubbling or cancelling, and\\n      // any references to cancelBubble throw \\\"Member not found\\\".  A\\n      // typeof check of \\\"unknown\\\" circumvents this issue (and is also\\n      // IE specific).\\n      event.cancelBubble = true;\\n    }\\n\\n    this.isPropagationStopped = emptyFunction.thatReturnsTrue;\\n  },\\n\\n  /**\\n   * We release all dispatched `SyntheticEvent`s after each event loop, adding\\n   * them back into the pool. This allows a way to hold onto a reference that\\n   * won't be added back into the pool.\\n   */\\n  persist: function () {\\n    this.isPersistent = emptyFunction.thatReturnsTrue;\\n  },\\n\\n  /**\\n   * Checks if this event should be released back into the pool.\\n   *\\n   * @return {boolean} True if this should not be released, false otherwise.\\n   */\\n  isPersistent: emptyFunction.thatReturnsFalse,\\n\\n  /**\\n   * `PooledClass` looks for `destructor` on each instance it releases.\\n   */\\n  destructor: function () {\\n    var Interface = this.constructor.Interface;\\n    for (var propName in Interface) {\\n      if (process.env.NODE_ENV !== 'production') {\\n        Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));\\n      } else {\\n        this[propName] = null;\\n      }\\n    }\\n    for (var i = 0; i < shouldBeReleasedProperties.length; i++) {\\n      this[shouldBeReleasedProperties[i]] = null;\\n    }\\n    if (process.env.NODE_ENV !== 'production') {\\n      Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));\\n      Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', emptyFunction));\\n      Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', emptyFunction));\\n    }\\n  }\\n\\n});\\n\\nSyntheticEvent.Interface = EventInterface;\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  if (isProxySupported) {\\n    /*eslint-disable no-func-assign */\\n    SyntheticEvent = new Proxy(SyntheticEvent, {\\n      construct: function (target, args) {\\n        return this.apply(target, Object.create(target.prototype), args);\\n      },\\n      apply: function (constructor, that, args) {\\n        return new Proxy(constructor.apply(that, args), {\\n          set: function (target, prop, value) {\\n            if (prop !== 'isPersistent' && !target.constructor.Interface.hasOwnProperty(prop) && shouldBeReleasedProperties.indexOf(prop) === -1) {\\n              process.env.NODE_ENV !== 'production' ? warning(didWarnForAddedNewProperty || target.isPersistent(), 'This synthetic event is reused for performance reasons. If you\\\\'re ' + 'seeing this, you\\\\'re adding a new property in the synthetic event object. ' + 'The property is never released. See ' + 'https://fb.me/react-event-pooling for more information.') : void 0;\\n              didWarnForAddedNewProperty = true;\\n            }\\n            target[prop] = value;\\n            return true;\\n          }\\n        });\\n      }\\n    });\\n    /*eslint-enable no-func-assign */\\n  }\\n}\\n/**\\n * Helper to reduce boilerplate when creating subclasses.\\n *\\n * @param {function} Class\\n * @param {?object} Interface\\n */\\nSyntheticEvent.augmentClass = function (Class, Interface) {\\n  var Super = this;\\n\\n  var E = function () {};\\n  E.prototype = Super.prototype;\\n  var prototype = new E();\\n\\n  _assign(prototype, Class.prototype);\\n  Class.prototype = prototype;\\n  Class.prototype.constructor = Class;\\n\\n  Class.Interface = _assign({}, Super.Interface, Interface);\\n  Class.augmentClass = Super.augmentClass;\\n\\n  PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler);\\n};\\n\\nPooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler);\\n\\nmodule.exports = SyntheticEvent;\\n\\n/**\\n  * Helper to nullify syntheticEvent instance properties when destructing\\n  *\\n  * @param {object} SyntheticEvent\\n  * @param {String} propName\\n  * @return {object} defineProperty object\\n  */\\nfunction getPooledWarningPropertyDefinition(propName, getVal) {\\n  var isFunction = typeof getVal === 'function';\\n  return {\\n    configurable: true,\\n    set: set,\\n    get: get\\n  };\\n\\n  function set(val) {\\n    var action = isFunction ? 'setting the method' : 'setting the property';\\n    warn(action, 'This is effectively a no-op');\\n    return val;\\n  }\\n\\n  function get() {\\n    var action = isFunction ? 'accessing the method' : 'accessing the property';\\n    var result = isFunction ? 'This is a no-op function' : 'This is set to null';\\n    warn(action, result);\\n    return getVal;\\n  }\\n\\n  function warn(action, result) {\\n    var warningCondition = false;\\n    process.env.NODE_ENV !== 'production' ? warning(warningCondition, 'This synthetic event is reused for performance reasons. If you\\\\'re seeing this, ' + 'you\\\\'re %s `%s` on a released/nullified synthetic event. %s. ' + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result) : void 0;\\n  }\\n}\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/SyntheticEvent.js\\n// module id = 131\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/SyntheticEvent.js?\");\n\n/***/ },\n/* 132 */\n/*!************************************************!*\\\n  !*** ./~/react-dom/lib/SyntheticInputEvent.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 131);\\n\\n/**\\n * @interface Event\\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\\n *      /#events-inputevents\\n */\\nvar InputEventInterface = {\\n  data: null\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\\n}\\n\\nSyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface);\\n\\nmodule.exports = SyntheticInputEvent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/SyntheticInputEvent.js\\n// module id = 132\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/SyntheticInputEvent.js?\");\n\n/***/ },\n/* 133 */\n/*!**********************************************!*\\\n  !*** ./~/react-dom/lib/ChangeEventPlugin.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar EventPluginHub = __webpack_require__(/*! ./EventPluginHub */ 120);\\nvar EventPropagators = __webpack_require__(/*! ./EventPropagators */ 119);\\nvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ 126);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 134);\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 131);\\n\\nvar getEventTarget = __webpack_require__(/*! ./getEventTarget */ 147);\\nvar isEventSupported = __webpack_require__(/*! ./isEventSupported */ 148);\\nvar isTextInputElement = __webpack_require__(/*! ./isTextInputElement */ 149);\\n\\nvar eventTypes = {\\n  change: {\\n    phasedRegistrationNames: {\\n      bubbled: 'onChange',\\n      captured: 'onChangeCapture'\\n    },\\n    dependencies: ['topBlur', 'topChange', 'topClick', 'topFocus', 'topInput', 'topKeyDown', 'topKeyUp', 'topSelectionChange']\\n  }\\n};\\n\\n/**\\n * For IE shims\\n */\\nvar activeElement = null;\\nvar activeElementInst = null;\\nvar activeElementValue = null;\\nvar activeElementValueProp = null;\\n\\n/**\\n * SECTION: handle `change` event\\n */\\nfunction shouldUseChangeEvent(elem) {\\n  var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\\n  return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\\n}\\n\\nvar doesChangeEventBubble = false;\\nif (ExecutionEnvironment.canUseDOM) {\\n  // See `handleChange` comment below\\n  doesChangeEventBubble = isEventSupported('change') && (!document.documentMode || document.documentMode > 8);\\n}\\n\\nfunction manualDispatchChangeEvent(nativeEvent) {\\n  var event = SyntheticEvent.getPooled(eventTypes.change, activeElementInst, nativeEvent, getEventTarget(nativeEvent));\\n  EventPropagators.accumulateTwoPhaseDispatches(event);\\n\\n  // If change and propertychange bubbled, we'd just bind to it like all the\\n  // other events and have it go through ReactBrowserEventEmitter. Since it\\n  // doesn't, we manually listen for the events and so we have to enqueue and\\n  // process the abstract event manually.\\n  //\\n  // Batching is necessary here in order to ensure that all event handlers run\\n  // before the next rerender (including event handlers attached to ancestor\\n  // elements instead of directly on the input). Without this, controlled\\n  // components don't work properly in conjunction with event bubbling because\\n  // the component is rerendered and the value reverted before all the event\\n  // handlers can run. See https://github.com/facebook/react/issues/708.\\n  ReactUpdates.batchedUpdates(runEventInBatch, event);\\n}\\n\\nfunction runEventInBatch(event) {\\n  EventPluginHub.enqueueEvents(event);\\n  EventPluginHub.processEventQueue(false);\\n}\\n\\nfunction startWatchingForChangeEventIE8(target, targetInst) {\\n  activeElement = target;\\n  activeElementInst = targetInst;\\n  activeElement.attachEvent('onchange', manualDispatchChangeEvent);\\n}\\n\\nfunction stopWatchingForChangeEventIE8() {\\n  if (!activeElement) {\\n    return;\\n  }\\n  activeElement.detachEvent('onchange', manualDispatchChangeEvent);\\n  activeElement = null;\\n  activeElementInst = null;\\n}\\n\\nfunction getTargetInstForChangeEvent(topLevelType, targetInst) {\\n  if (topLevelType === 'topChange') {\\n    return targetInst;\\n  }\\n}\\nfunction handleEventsForChangeEventIE8(topLevelType, target, targetInst) {\\n  if (topLevelType === 'topFocus') {\\n    // stopWatching() should be a noop here but we call it just in case we\\n    // missed a blur event somehow.\\n    stopWatchingForChangeEventIE8();\\n    startWatchingForChangeEventIE8(target, targetInst);\\n  } else if (topLevelType === 'topBlur') {\\n    stopWatchingForChangeEventIE8();\\n  }\\n}\\n\\n/**\\n * SECTION: handle `input` event\\n */\\nvar isInputEventSupported = false;\\nif (ExecutionEnvironment.canUseDOM) {\\n  // IE9 claims to support the input event but fails to trigger it when\\n  // deleting text, so we ignore its input events.\\n  // IE10+ fire input events to often, such when a placeholder\\n  // changes or when an input with a placeholder is focused.\\n  isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 11);\\n}\\n\\n/**\\n * (For IE <=11) Replacement getter/setter for the `value` property that gets\\n * set on the active element.\\n */\\nvar newValueProp = {\\n  get: function () {\\n    return activeElementValueProp.get.call(this);\\n  },\\n  set: function (val) {\\n    // Cast to a string so we can do equality checks.\\n    activeElementValue = '' + val;\\n    activeElementValueProp.set.call(this, val);\\n  }\\n};\\n\\n/**\\n * (For IE <=11) Starts tracking propertychange events on the passed-in element\\n * and override the value property so that we can distinguish user events from\\n * value changes in JS.\\n */\\nfunction startWatchingForValueChange(target, targetInst) {\\n  activeElement = target;\\n  activeElementInst = targetInst;\\n  activeElementValue = target.value;\\n  activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value');\\n\\n  // Not guarded in a canDefineProperty check: IE8 supports defineProperty only\\n  // on DOM elements\\n  Object.defineProperty(activeElement, 'value', newValueProp);\\n  if (activeElement.attachEvent) {\\n    activeElement.attachEvent('onpropertychange', handlePropertyChange);\\n  } else {\\n    activeElement.addEventListener('propertychange', handlePropertyChange, false);\\n  }\\n}\\n\\n/**\\n * (For IE <=11) Removes the event listeners from the currently-tracked element,\\n * if any exists.\\n */\\nfunction stopWatchingForValueChange() {\\n  if (!activeElement) {\\n    return;\\n  }\\n\\n  // delete restores the original property definition\\n  delete activeElement.value;\\n\\n  if (activeElement.detachEvent) {\\n    activeElement.detachEvent('onpropertychange', handlePropertyChange);\\n  } else {\\n    activeElement.removeEventListener('propertychange', handlePropertyChange, false);\\n  }\\n\\n  activeElement = null;\\n  activeElementInst = null;\\n  activeElementValue = null;\\n  activeElementValueProp = null;\\n}\\n\\n/**\\n * (For IE <=11) Handles a propertychange event, sending a `change` event if\\n * the value of the active element has changed.\\n */\\nfunction handlePropertyChange(nativeEvent) {\\n  if (nativeEvent.propertyName !== 'value') {\\n    return;\\n  }\\n  var value = nativeEvent.srcElement.value;\\n  if (value === activeElementValue) {\\n    return;\\n  }\\n  activeElementValue = value;\\n\\n  manualDispatchChangeEvent(nativeEvent);\\n}\\n\\n/**\\n * If a `change` event should be fired, returns the target's ID.\\n */\\nfunction getTargetInstForInputEvent(topLevelType, targetInst) {\\n  if (topLevelType === 'topInput') {\\n    // In modern browsers (i.e., not IE8 or IE9), the input event is exactly\\n    // what we want so fall through here and trigger an abstract event\\n    return targetInst;\\n  }\\n}\\n\\nfunction handleEventsForInputEventIE(topLevelType, target, targetInst) {\\n  if (topLevelType === 'topFocus') {\\n    // In IE8, we can capture almost all .value changes by adding a\\n    // propertychange handler and looking for events with propertyName\\n    // equal to 'value'\\n    // In IE9-11, propertychange fires for most input events but is buggy and\\n    // doesn't fire when text is deleted, but conveniently, selectionchange\\n    // appears to fire in all of the remaining cases so we catch those and\\n    // forward the event if the value has changed\\n    // In either case, we don't want to call the event handler if the value\\n    // is changed from JS so we redefine a setter for `.value` that updates\\n    // our activeElementValue variable, allowing us to ignore those changes\\n    //\\n    // stopWatching() should be a noop here but we call it just in case we\\n    // missed a blur event somehow.\\n    stopWatchingForValueChange();\\n    startWatchingForValueChange(target, targetInst);\\n  } else if (topLevelType === 'topBlur') {\\n    stopWatchingForValueChange();\\n  }\\n}\\n\\n// For IE8 and IE9.\\nfunction getTargetInstForInputEventIE(topLevelType, targetInst) {\\n  if (topLevelType === 'topSelectionChange' || topLevelType === 'topKeyUp' || topLevelType === 'topKeyDown') {\\n    // On the selectionchange event, the target is just document which isn't\\n    // helpful for us so just check activeElement instead.\\n    //\\n    // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\\n    // propertychange on the first input event after setting `value` from a\\n    // script and fires only keydown, keypress, keyup. Catching keyup usually\\n    // gets it and catching keydown lets us fire an event for the first\\n    // keystroke if user does a key repeat (it'll be a little delayed: right\\n    // before the second keystroke). Other input methods (e.g., paste) seem to\\n    // fire selectionchange normally.\\n    if (activeElement && activeElement.value !== activeElementValue) {\\n      activeElementValue = activeElement.value;\\n      return activeElementInst;\\n    }\\n  }\\n}\\n\\n/**\\n * SECTION: handle `click` event\\n */\\nfunction shouldUseClickEvent(elem) {\\n  // Use the `click` event to detect changes to checkbox and radio inputs.\\n  // This approach works across all browsers, whereas `change` does not fire\\n  // until `blur` in IE8.\\n  return elem.nodeName && elem.nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\\n}\\n\\nfunction getTargetInstForClickEvent(topLevelType, targetInst) {\\n  if (topLevelType === 'topClick') {\\n    return targetInst;\\n  }\\n}\\n\\n/**\\n * This plugin creates an `onChange` event that normalizes change events\\n * across form elements. This event fires at a time when it's possible to\\n * change the element's value without seeing a flicker.\\n *\\n * Supported elements are:\\n * - input (see `isTextInputElement`)\\n * - textarea\\n * - select\\n */\\nvar ChangeEventPlugin = {\\n\\n  eventTypes: eventTypes,\\n\\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\\n    var targetNode = targetInst ? ReactDOMComponentTree.getNodeFromInstance(targetInst) : window;\\n\\n    var getTargetInstFunc, handleEventFunc;\\n    if (shouldUseChangeEvent(targetNode)) {\\n      if (doesChangeEventBubble) {\\n        getTargetInstFunc = getTargetInstForChangeEvent;\\n      } else {\\n        handleEventFunc = handleEventsForChangeEventIE8;\\n      }\\n    } else if (isTextInputElement(targetNode)) {\\n      if (isInputEventSupported) {\\n        getTargetInstFunc = getTargetInstForInputEvent;\\n      } else {\\n        getTargetInstFunc = getTargetInstForInputEventIE;\\n        handleEventFunc = handleEventsForInputEventIE;\\n      }\\n    } else if (shouldUseClickEvent(targetNode)) {\\n      getTargetInstFunc = getTargetInstForClickEvent;\\n    }\\n\\n    if (getTargetInstFunc) {\\n      var inst = getTargetInstFunc(topLevelType, targetInst);\\n      if (inst) {\\n        var event = SyntheticEvent.getPooled(eventTypes.change, inst, nativeEvent, nativeEventTarget);\\n        event.type = 'change';\\n        EventPropagators.accumulateTwoPhaseDispatches(event);\\n        return event;\\n      }\\n    }\\n\\n    if (handleEventFunc) {\\n      handleEventFunc(topLevelType, targetNode, targetInst);\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = ChangeEventPlugin;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ChangeEventPlugin.js\\n// module id = 133\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ChangeEventPlugin.js?\");\n\n/***/ },\n/* 134 */\n/*!*****************************************!*\\\n  !*** ./~/react-dom/lib/ReactUpdates.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113),\\n    _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar CallbackQueue = __webpack_require__(/*! ./CallbackQueue */ 135);\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 128);\\nvar ReactFeatureFlags = __webpack_require__(/*! ./ReactFeatureFlags */ 136);\\nvar ReactReconciler = __webpack_require__(/*! ./ReactReconciler */ 137);\\nvar Transaction = __webpack_require__(/*! ./Transaction */ 146);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\nvar dirtyComponents = [];\\nvar updateBatchNumber = 0;\\nvar asapCallbackQueue = CallbackQueue.getPooled();\\nvar asapEnqueued = false;\\n\\nvar batchingStrategy = null;\\n\\nfunction ensureInjected() {\\n  !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching strategy') : _prodInvariant('123') : void 0;\\n}\\n\\nvar NESTED_UPDATES = {\\n  initialize: function () {\\n    this.dirtyComponentsLength = dirtyComponents.length;\\n  },\\n  close: function () {\\n    if (this.dirtyComponentsLength !== dirtyComponents.length) {\\n      // Additional updates were enqueued by componentDidUpdate handlers or\\n      // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run\\n      // these new updates so that if A's componentDidUpdate calls setState on\\n      // B, B will update before the callback A's updater provided when calling\\n      // setState.\\n      dirtyComponents.splice(0, this.dirtyComponentsLength);\\n      flushBatchedUpdates();\\n    } else {\\n      dirtyComponents.length = 0;\\n    }\\n  }\\n};\\n\\nvar UPDATE_QUEUEING = {\\n  initialize: function () {\\n    this.callbackQueue.reset();\\n  },\\n  close: function () {\\n    this.callbackQueue.notifyAll();\\n  }\\n};\\n\\nvar TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];\\n\\nfunction ReactUpdatesFlushTransaction() {\\n  this.reinitializeTransaction();\\n  this.dirtyComponentsLength = null;\\n  this.callbackQueue = CallbackQueue.getPooled();\\n  this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled(\\n  /* useCreateElement */true);\\n}\\n\\n_assign(ReactUpdatesFlushTransaction.prototype, Transaction, {\\n  getTransactionWrappers: function () {\\n    return TRANSACTION_WRAPPERS;\\n  },\\n\\n  destructor: function () {\\n    this.dirtyComponentsLength = null;\\n    CallbackQueue.release(this.callbackQueue);\\n    this.callbackQueue = null;\\n    ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);\\n    this.reconcileTransaction = null;\\n  },\\n\\n  perform: function (method, scope, a) {\\n    // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`\\n    // with this transaction's wrappers around it.\\n    return Transaction.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);\\n  }\\n});\\n\\nPooledClass.addPoolingTo(ReactUpdatesFlushTransaction);\\n\\nfunction batchedUpdates(callback, a, b, c, d, e) {\\n  ensureInjected();\\n  return batchingStrategy.batchedUpdates(callback, a, b, c, d, e);\\n}\\n\\n/**\\n * Array comparator for ReactComponents by mount ordering.\\n *\\n * @param {ReactComponent} c1 first component you're comparing\\n * @param {ReactComponent} c2 second component you're comparing\\n * @return {number} Return value usable by Array.prototype.sort().\\n */\\nfunction mountOrderComparator(c1, c2) {\\n  return c1._mountOrder - c2._mountOrder;\\n}\\n\\nfunction runBatchedUpdates(transaction) {\\n  var len = transaction.dirtyComponentsLength;\\n  !(len === dirtyComponents.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Expected flush transaction\\\\'s stored dirty-components length (%s) to match dirty-components array length (%s).', len, dirtyComponents.length) : _prodInvariant('124', len, dirtyComponents.length) : void 0;\\n\\n  // Since reconciling a component higher in the owner hierarchy usually (not\\n  // always -- see shouldComponentUpdate()) will reconcile children, reconcile\\n  // them before their children by sorting the array.\\n  dirtyComponents.sort(mountOrderComparator);\\n\\n  // Any updates enqueued while reconciling must be performed after this entire\\n  // batch. Otherwise, if dirtyComponents is [A, B] where A has children B and\\n  // C, B could update twice in a single batch if C's render enqueues an update\\n  // to B (since B would have already updated, we should skip it, and the only\\n  // way we can know to do so is by checking the batch counter).\\n  updateBatchNumber++;\\n\\n  for (var i = 0; i < len; i++) {\\n    // If a component is unmounted before pending changes apply, it will still\\n    // be here, but we assume that it has cleared its _pendingCallbacks and\\n    // that performUpdateIfNecessary is a noop.\\n    var component = dirtyComponents[i];\\n\\n    // If performUpdateIfNecessary happens to enqueue any new updates, we\\n    // shouldn't execute the callbacks until the next render happens, so\\n    // stash the callbacks first\\n    var callbacks = component._pendingCallbacks;\\n    component._pendingCallbacks = null;\\n\\n    var markerName;\\n    if (ReactFeatureFlags.logTopLevelRenders) {\\n      var namedComponent = component;\\n      // Duck type TopLevelWrapper. This is probably always true.\\n      if (component._currentElement.type.isReactTopLevelWrapper) {\\n        namedComponent = component._renderedComponent;\\n      }\\n      markerName = 'React update: ' + namedComponent.getName();\\n      console.time(markerName);\\n    }\\n\\n    ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction, updateBatchNumber);\\n\\n    if (markerName) {\\n      console.timeEnd(markerName);\\n    }\\n\\n    if (callbacks) {\\n      for (var j = 0; j < callbacks.length; j++) {\\n        transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance());\\n      }\\n    }\\n  }\\n}\\n\\nvar flushBatchedUpdates = function () {\\n  // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents\\n  // array and perform any updates enqueued by mount-ready handlers (i.e.,\\n  // componentDidUpdate) but we need to check here too in order to catch\\n  // updates enqueued by setState callbacks and asap calls.\\n  while (dirtyComponents.length || asapEnqueued) {\\n    if (dirtyComponents.length) {\\n      var transaction = ReactUpdatesFlushTransaction.getPooled();\\n      transaction.perform(runBatchedUpdates, null, transaction);\\n      ReactUpdatesFlushTransaction.release(transaction);\\n    }\\n\\n    if (asapEnqueued) {\\n      asapEnqueued = false;\\n      var queue = asapCallbackQueue;\\n      asapCallbackQueue = CallbackQueue.getPooled();\\n      queue.notifyAll();\\n      CallbackQueue.release(queue);\\n    }\\n  }\\n};\\n\\n/**\\n * Mark a component as needing a rerender, adding an optional callback to a\\n * list of functions which will be executed once the rerender occurs.\\n */\\nfunction enqueueUpdate(component) {\\n  ensureInjected();\\n\\n  // Various parts of our code (such as ReactCompositeComponent's\\n  // _renderValidatedComponent) assume that calls to render aren't nested;\\n  // verify that that's the case. (This is called by each top-level update\\n  // function, like setState, forceUpdate, etc.; creation and\\n  // destruction of top-level components is guarded in ReactMount.)\\n\\n  if (!batchingStrategy.isBatchingUpdates) {\\n    batchingStrategy.batchedUpdates(enqueueUpdate, component);\\n    return;\\n  }\\n\\n  dirtyComponents.push(component);\\n  if (component._updateBatchNumber == null) {\\n    component._updateBatchNumber = updateBatchNumber + 1;\\n  }\\n}\\n\\n/**\\n * Enqueue a callback to be run at the end of the current batching cycle. Throws\\n * if no updates are currently being performed.\\n */\\nfunction asap(callback, context) {\\n  !batchingStrategy.isBatchingUpdates ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates.asap: Can\\\\'t enqueue an asap callback in a context whereupdates are not being batched.') : _prodInvariant('125') : void 0;\\n  asapCallbackQueue.enqueue(callback, context);\\n  asapEnqueued = true;\\n}\\n\\nvar ReactUpdatesInjection = {\\n  injectReconcileTransaction: function (ReconcileTransaction) {\\n    !ReconcileTransaction ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : _prodInvariant('126') : void 0;\\n    ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;\\n  },\\n\\n  injectBatchingStrategy: function (_batchingStrategy) {\\n    !_batchingStrategy ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batching strategy') : _prodInvariant('127') : void 0;\\n    !(typeof _batchingStrategy.batchedUpdates === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : _prodInvariant('128') : void 0;\\n    !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : _prodInvariant('129') : void 0;\\n    batchingStrategy = _batchingStrategy;\\n  }\\n};\\n\\nvar ReactUpdates = {\\n  /**\\n   * React references `ReactReconcileTransaction` using this property in order\\n   * to allow dependency injection.\\n   *\\n   * @internal\\n   */\\n  ReactReconcileTransaction: null,\\n\\n  batchedUpdates: batchedUpdates,\\n  enqueueUpdate: enqueueUpdate,\\n  flushBatchedUpdates: flushBatchedUpdates,\\n  injection: ReactUpdatesInjection,\\n  asap: asap\\n};\\n\\nmodule.exports = ReactUpdates;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactUpdates.js\\n// module id = 134\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactUpdates.js?\");\n\n/***/ },\n/* 135 */\n/*!******************************************!*\\\n  !*** ./~/react-dom/lib/CallbackQueue.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\\"Cannot call a class as a function\\\"); } }\\n\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 128);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\n/**\\n * A specialized pseudo-event module to help keep track of components waiting to\\n * be notified when their DOM representations are available for use.\\n *\\n * This implements `PooledClass`, so you should never need to instantiate this.\\n * Instead, use `CallbackQueue.getPooled()`.\\n *\\n * @class ReactMountReady\\n * @implements PooledClass\\n * @internal\\n */\\n\\nvar CallbackQueue = function () {\\n  function CallbackQueue(arg) {\\n    _classCallCheck(this, CallbackQueue);\\n\\n    this._callbacks = null;\\n    this._contexts = null;\\n    this._arg = arg;\\n  }\\n\\n  /**\\n   * Enqueues a callback to be invoked when `notifyAll` is invoked.\\n   *\\n   * @param {function} callback Invoked when `notifyAll` is invoked.\\n   * @param {?object} context Context to call `callback` with.\\n   * @internal\\n   */\\n\\n\\n  CallbackQueue.prototype.enqueue = function enqueue(callback, context) {\\n    this._callbacks = this._callbacks || [];\\n    this._callbacks.push(callback);\\n    this._contexts = this._contexts || [];\\n    this._contexts.push(context);\\n  };\\n\\n  /**\\n   * Invokes all enqueued callbacks and clears the queue. This is invoked after\\n   * the DOM representation of a component has been created or updated.\\n   *\\n   * @internal\\n   */\\n\\n\\n  CallbackQueue.prototype.notifyAll = function notifyAll() {\\n    var callbacks = this._callbacks;\\n    var contexts = this._contexts;\\n    var arg = this._arg;\\n    if (callbacks && contexts) {\\n      !(callbacks.length === contexts.length) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : _prodInvariant('24') : void 0;\\n      this._callbacks = null;\\n      this._contexts = null;\\n      for (var i = 0; i < callbacks.length; i++) {\\n        callbacks[i].call(contexts[i], arg);\\n      }\\n      callbacks.length = 0;\\n      contexts.length = 0;\\n    }\\n  };\\n\\n  CallbackQueue.prototype.checkpoint = function checkpoint() {\\n    return this._callbacks ? this._callbacks.length : 0;\\n  };\\n\\n  CallbackQueue.prototype.rollback = function rollback(len) {\\n    if (this._callbacks && this._contexts) {\\n      this._callbacks.length = len;\\n      this._contexts.length = len;\\n    }\\n  };\\n\\n  /**\\n   * Resets the internal queue.\\n   *\\n   * @internal\\n   */\\n\\n\\n  CallbackQueue.prototype.reset = function reset() {\\n    this._callbacks = null;\\n    this._contexts = null;\\n  };\\n\\n  /**\\n   * `PooledClass` looks for this.\\n   */\\n\\n\\n  CallbackQueue.prototype.destructor = function destructor() {\\n    this.reset();\\n  };\\n\\n  return CallbackQueue;\\n}();\\n\\nmodule.exports = PooledClass.addPoolingTo(CallbackQueue);\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/CallbackQueue.js\\n// module id = 135\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/CallbackQueue.js?\");\n\n/***/ },\n/* 136 */\n/*!**********************************************!*\\\n  !*** ./~/react-dom/lib/ReactFeatureFlags.js ***!\n  \\**********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar ReactFeatureFlags = {\\n  // When true, call console.time() before and .timeEnd() after each top-level\\n  // render (both initial renders and updates). Useful when looking at prod-mode\\n  // timeline profiles in Chrome, for example.\\n  logTopLevelRenders: false\\n};\\n\\nmodule.exports = ReactFeatureFlags;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactFeatureFlags.js\\n// module id = 136\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactFeatureFlags.js?\");\n\n/***/ },\n/* 137 */\n/*!********************************************!*\\\n  !*** ./~/react-dom/lib/ReactReconciler.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ReactRef = __webpack_require__(/*! ./ReactRef */ 138);\\nvar ReactInstrumentation = __webpack_require__(/*! ./ReactInstrumentation */ 140);\\n\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\n/**\\n * Helper to call ReactRef.attachRefs with this composite component, split out\\n * to avoid allocations in the transaction mount-ready queue.\\n */\\nfunction attachRefs() {\\n  ReactRef.attachRefs(this, this._currentElement);\\n}\\n\\nvar ReactReconciler = {\\n\\n  /**\\n   * Initializes the component, renders markup, and registers event listeners.\\n   *\\n   * @param {ReactComponent} internalInstance\\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n   * @param {?object} the containing host component instance\\n   * @param {?object} info about the host container\\n   * @return {?string} Rendered markup to be inserted into the DOM.\\n   * @final\\n   * @internal\\n   */\\n  mountComponent: function (internalInstance, transaction, hostParent, hostContainerInfo, context, parentDebugID // 0 in production and for roots\\n  ) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (internalInstance._debugID !== 0) {\\n        ReactInstrumentation.debugTool.onBeforeMountComponent(internalInstance._debugID, internalInstance._currentElement, parentDebugID);\\n      }\\n    }\\n    var markup = internalInstance.mountComponent(transaction, hostParent, hostContainerInfo, context, parentDebugID);\\n    if (internalInstance._currentElement && internalInstance._currentElement.ref != null) {\\n      transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\\n    }\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (internalInstance._debugID !== 0) {\\n        ReactInstrumentation.debugTool.onMountComponent(internalInstance._debugID);\\n      }\\n    }\\n    return markup;\\n  },\\n\\n  /**\\n   * Returns a value that can be passed to\\n   * ReactComponentEnvironment.replaceNodeWithMarkup.\\n   */\\n  getHostNode: function (internalInstance) {\\n    return internalInstance.getHostNode();\\n  },\\n\\n  /**\\n   * Releases any resources allocated by `mountComponent`.\\n   *\\n   * @final\\n   * @internal\\n   */\\n  unmountComponent: function (internalInstance, safely) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (internalInstance._debugID !== 0) {\\n        ReactInstrumentation.debugTool.onBeforeUnmountComponent(internalInstance._debugID);\\n      }\\n    }\\n    ReactRef.detachRefs(internalInstance, internalInstance._currentElement);\\n    internalInstance.unmountComponent(safely);\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (internalInstance._debugID !== 0) {\\n        ReactInstrumentation.debugTool.onUnmountComponent(internalInstance._debugID);\\n      }\\n    }\\n  },\\n\\n  /**\\n   * Update a component using a new element.\\n   *\\n   * @param {ReactComponent} internalInstance\\n   * @param {ReactElement} nextElement\\n   * @param {ReactReconcileTransaction} transaction\\n   * @param {object} context\\n   * @internal\\n   */\\n  receiveComponent: function (internalInstance, nextElement, transaction, context) {\\n    var prevElement = internalInstance._currentElement;\\n\\n    if (nextElement === prevElement && context === internalInstance._context) {\\n      // Since elements are immutable after the owner is rendered,\\n      // we can do a cheap identity compare here to determine if this is a\\n      // superfluous reconcile. It's possible for state to be mutable but such\\n      // change should trigger an update of the owner which would recreate\\n      // the element. We explicitly check for the existence of an owner since\\n      // it's possible for an element created outside a composite to be\\n      // deeply mutated and reused.\\n\\n      // TODO: Bailing out early is just a perf optimization right?\\n      // TODO: Removing the return statement should affect correctness?\\n      return;\\n    }\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (internalInstance._debugID !== 0) {\\n        ReactInstrumentation.debugTool.onBeforeUpdateComponent(internalInstance._debugID, nextElement);\\n      }\\n    }\\n\\n    var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);\\n\\n    if (refsChanged) {\\n      ReactRef.detachRefs(internalInstance, prevElement);\\n    }\\n\\n    internalInstance.receiveComponent(nextElement, transaction, context);\\n\\n    if (refsChanged && internalInstance._currentElement && internalInstance._currentElement.ref != null) {\\n      transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\\n    }\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (internalInstance._debugID !== 0) {\\n        ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);\\n      }\\n    }\\n  },\\n\\n  /**\\n   * Flush any dirty changes in a component.\\n   *\\n   * @param {ReactComponent} internalInstance\\n   * @param {ReactReconcileTransaction} transaction\\n   * @internal\\n   */\\n  performUpdateIfNecessary: function (internalInstance, transaction, updateBatchNumber) {\\n    if (internalInstance._updateBatchNumber !== updateBatchNumber) {\\n      // The component's enqueued batch number should always be the current\\n      // batch or the following one.\\n      process.env.NODE_ENV !== 'production' ? warning(internalInstance._updateBatchNumber == null || internalInstance._updateBatchNumber === updateBatchNumber + 1, 'performUpdateIfNecessary: Unexpected batch number (current %s, ' + 'pending %s)', updateBatchNumber, internalInstance._updateBatchNumber) : void 0;\\n      return;\\n    }\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (internalInstance._debugID !== 0) {\\n        ReactInstrumentation.debugTool.onBeforeUpdateComponent(internalInstance._debugID, internalInstance._currentElement);\\n      }\\n    }\\n    internalInstance.performUpdateIfNecessary(transaction);\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (internalInstance._debugID !== 0) {\\n        ReactInstrumentation.debugTool.onUpdateComponent(internalInstance._debugID);\\n      }\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = ReactReconciler;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactReconciler.js\\n// module id = 137\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactReconciler.js?\");\n\n/***/ },\n/* 138 */\n/*!*************************************!*\\\n  !*** ./~/react-dom/lib/ReactRef.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar ReactOwner = __webpack_require__(/*! ./ReactOwner */ 139);\\n\\nvar ReactRef = {};\\n\\nfunction attachRef(ref, component, owner) {\\n  if (typeof ref === 'function') {\\n    ref(component.getPublicInstance());\\n  } else {\\n    // Legacy ref\\n    ReactOwner.addComponentAsRefTo(component, ref, owner);\\n  }\\n}\\n\\nfunction detachRef(ref, component, owner) {\\n  if (typeof ref === 'function') {\\n    ref(null);\\n  } else {\\n    // Legacy ref\\n    ReactOwner.removeComponentAsRefFrom(component, ref, owner);\\n  }\\n}\\n\\nReactRef.attachRefs = function (instance, element) {\\n  if (element === null || typeof element !== 'object') {\\n    return;\\n  }\\n  var ref = element.ref;\\n  if (ref != null) {\\n    attachRef(ref, instance, element._owner);\\n  }\\n};\\n\\nReactRef.shouldUpdateRefs = function (prevElement, nextElement) {\\n  // If either the owner or a `ref` has changed, make sure the newest owner\\n  // has stored a reference to `this`, and the previous owner (if different)\\n  // has forgotten the reference to `this`. We use the element instead\\n  // of the public this.props because the post processing cannot determine\\n  // a ref. The ref conceptually lives on the element.\\n\\n  // TODO: Should this even be possible? The owner cannot change because\\n  // it's forbidden by shouldUpdateReactComponent. The ref can change\\n  // if you swap the keys of but not the refs. Reconsider where this check\\n  // is made. It probably belongs where the key checking and\\n  // instantiateReactComponent is done.\\n\\n  var prevRef = null;\\n  var prevOwner = null;\\n  if (prevElement !== null && typeof prevElement === 'object') {\\n    prevRef = prevElement.ref;\\n    prevOwner = prevElement._owner;\\n  }\\n\\n  var nextRef = null;\\n  var nextOwner = null;\\n  if (nextElement !== null && typeof nextElement === 'object') {\\n    nextRef = nextElement.ref;\\n    nextOwner = nextElement._owner;\\n  }\\n\\n  return prevRef !== nextRef ||\\n  // If owner changes but we have an unchanged function ref, don't update refs\\n  typeof nextRef === 'string' && nextOwner !== prevOwner;\\n};\\n\\nReactRef.detachRefs = function (instance, element) {\\n  if (element === null || typeof element !== 'object') {\\n    return;\\n  }\\n  var ref = element.ref;\\n  if (ref != null) {\\n    detachRef(ref, instance, element._owner);\\n  }\\n};\\n\\nmodule.exports = ReactRef;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactRef.js\\n// module id = 138\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactRef.js?\");\n\n/***/ },\n/* 139 */\n/*!***************************************!*\\\n  !*** ./~/react-dom/lib/ReactOwner.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\n/**\\n * @param {?object} object\\n * @return {boolean} True if `object` is a valid owner.\\n * @final\\n */\\nfunction isValidOwner(object) {\\n  return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function');\\n}\\n\\n/**\\n * ReactOwners are capable of storing references to owned components.\\n *\\n * All components are capable of //being// referenced by owner components, but\\n * only ReactOwner components are capable of //referencing// owned components.\\n * The named reference is known as a \\\"ref\\\".\\n *\\n * Refs are available when mounted and updated during reconciliation.\\n *\\n *   var MyComponent = React.createClass({\\n *     render: function() {\\n *       return (\\n *         <div onClick={this.handleClick}>\\n *           <CustomComponent ref=\\\"custom\\\" />\\n *         </div>\\n *       );\\n *     },\\n *     handleClick: function() {\\n *       this.refs.custom.handleClick();\\n *     },\\n *     componentDidMount: function() {\\n *       this.refs.custom.initialize();\\n *     }\\n *   });\\n *\\n * Refs should rarely be used. When refs are used, they should only be done to\\n * control data that is not handled by React's data flow.\\n *\\n * @class ReactOwner\\n */\\nvar ReactOwner = {\\n  /**\\n   * Adds a component by ref to an owner component.\\n   *\\n   * @param {ReactComponent} component Component to reference.\\n   * @param {string} ref Name by which to refer to the component.\\n   * @param {ReactOwner} owner Component on which to record the ref.\\n   * @final\\n   * @internal\\n   */\\n  addComponentAsRefTo: function (component, ref, owner) {\\n    !isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs. You might be adding a ref to a component that was not created inside a component\\\\'s `render` method, or you have multiple copies of React loaded (details: https://fb.me/react-refs-must-have-owner).') : _prodInvariant('119') : void 0;\\n    owner.attachRef(ref, component);\\n  },\\n\\n  /**\\n   * Removes a component by ref from an owner component.\\n   *\\n   * @param {ReactComponent} component Component to dereference.\\n   * @param {string} ref Name of the ref to remove.\\n   * @param {ReactOwner} owner Component on which the ref is recorded.\\n   * @final\\n   * @internal\\n   */\\n  removeComponentAsRefFrom: function (component, ref, owner) {\\n    !isValidOwner(owner) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. You might be removing a ref to a component that was not created inside a component\\\\'s `render` method, or you have multiple copies of React loaded (details: https://fb.me/react-refs-must-have-owner).') : _prodInvariant('120') : void 0;\\n    var ownerPublicInstance = owner.getPublicInstance();\\n    // Check that `component`'s owner is still alive and that `component` is still the current ref\\n    // because we do not want to detach the ref if another component stole it.\\n    if (ownerPublicInstance && ownerPublicInstance.refs[ref] === component.getPublicInstance()) {\\n      owner.detachRef(ref);\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = ReactOwner;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactOwner.js\\n// module id = 139\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactOwner.js?\");\n\n/***/ },\n/* 140 */\n/*!*************************************************!*\\\n  !*** ./~/react-dom/lib/ReactInstrumentation.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2016-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n// Trust the developer to only use ReactInstrumentation with a __DEV__ check\\n\\nvar debugTool = null;\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  var ReactDebugTool = __webpack_require__(/*! ./ReactDebugTool */ 141);\\n  debugTool = ReactDebugTool;\\n}\\n\\nmodule.exports = { debugTool: debugTool };\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactInstrumentation.js\\n// module id = 140\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactInstrumentation.js?\");\n\n/***/ },\n/* 141 */\n/*!*******************************************!*\\\n  !*** ./~/react-dom/lib/ReactDebugTool.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2016-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar ReactInvalidSetStateWarningHook = __webpack_require__(/*! ./ReactInvalidSetStateWarningHook */ 142);\\nvar ReactHostOperationHistoryHook = __webpack_require__(/*! ./ReactHostOperationHistoryHook */ 143);\\nvar ReactComponentTreeHook = __webpack_require__(/*! react/lib/ReactComponentTreeHook */ 26);\\nvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ 126);\\n\\nvar performanceNow = __webpack_require__(/*! fbjs/lib/performanceNow */ 144);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar hooks = [];\\nvar didHookThrowForEvent = {};\\n\\nfunction callHook(event, fn, context, arg1, arg2, arg3, arg4, arg5) {\\n  try {\\n    fn.call(context, arg1, arg2, arg3, arg4, arg5);\\n  } catch (e) {\\n    process.env.NODE_ENV !== 'production' ? warning(didHookThrowForEvent[event], 'Exception thrown by hook while handling %s: %s', event, e + '\\\\n' + e.stack) : void 0;\\n    didHookThrowForEvent[event] = true;\\n  }\\n}\\n\\nfunction emitEvent(event, arg1, arg2, arg3, arg4, arg5) {\\n  for (var i = 0; i < hooks.length; i++) {\\n    var hook = hooks[i];\\n    var fn = hook[event];\\n    if (fn) {\\n      callHook(event, fn, hook, arg1, arg2, arg3, arg4, arg5);\\n    }\\n  }\\n}\\n\\nvar isProfiling = false;\\nvar flushHistory = [];\\nvar lifeCycleTimerStack = [];\\nvar currentFlushNesting = 0;\\nvar currentFlushMeasurements = [];\\nvar currentFlushStartTime = 0;\\nvar currentTimerDebugID = null;\\nvar currentTimerStartTime = 0;\\nvar currentTimerNestedFlushDuration = 0;\\nvar currentTimerType = null;\\n\\nvar lifeCycleTimerHasWarned = false;\\n\\nfunction clearHistory() {\\n  ReactComponentTreeHook.purgeUnmountedComponents();\\n  ReactHostOperationHistoryHook.clearHistory();\\n}\\n\\nfunction getTreeSnapshot(registeredIDs) {\\n  return registeredIDs.reduce(function (tree, id) {\\n    var ownerID = ReactComponentTreeHook.getOwnerID(id);\\n    var parentID = ReactComponentTreeHook.getParentID(id);\\n    tree[id] = {\\n      displayName: ReactComponentTreeHook.getDisplayName(id),\\n      text: ReactComponentTreeHook.getText(id),\\n      updateCount: ReactComponentTreeHook.getUpdateCount(id),\\n      childIDs: ReactComponentTreeHook.getChildIDs(id),\\n      // Text nodes don't have owners but this is close enough.\\n      ownerID: ownerID || parentID && ReactComponentTreeHook.getOwnerID(parentID) || 0,\\n      parentID: parentID\\n    };\\n    return tree;\\n  }, {});\\n}\\n\\nfunction resetMeasurements() {\\n  var previousStartTime = currentFlushStartTime;\\n  var previousMeasurements = currentFlushMeasurements;\\n  var previousOperations = ReactHostOperationHistoryHook.getHistory();\\n\\n  if (currentFlushNesting === 0) {\\n    currentFlushStartTime = 0;\\n    currentFlushMeasurements = [];\\n    clearHistory();\\n    return;\\n  }\\n\\n  if (previousMeasurements.length || previousOperations.length) {\\n    var registeredIDs = ReactComponentTreeHook.getRegisteredIDs();\\n    flushHistory.push({\\n      duration: performanceNow() - previousStartTime,\\n      measurements: previousMeasurements || [],\\n      operations: previousOperations || [],\\n      treeSnapshot: getTreeSnapshot(registeredIDs)\\n    });\\n  }\\n\\n  clearHistory();\\n  currentFlushStartTime = performanceNow();\\n  currentFlushMeasurements = [];\\n}\\n\\nfunction checkDebugID(debugID) {\\n  var allowRoot = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\\n\\n  if (allowRoot && debugID === 0) {\\n    return;\\n  }\\n  if (!debugID) {\\n    process.env.NODE_ENV !== 'production' ? warning(false, 'ReactDebugTool: debugID may not be empty.') : void 0;\\n  }\\n}\\n\\nfunction beginLifeCycleTimer(debugID, timerType) {\\n  if (currentFlushNesting === 0) {\\n    return;\\n  }\\n  if (currentTimerType && !lifeCycleTimerHasWarned) {\\n    process.env.NODE_ENV !== 'production' ? warning(false, 'There is an internal error in the React performance measurement code. ' + 'Did not expect %s timer to start while %s timer is still in ' + 'progress for %s instance.', timerType, currentTimerType || 'no', debugID === currentTimerDebugID ? 'the same' : 'another') : void 0;\\n    lifeCycleTimerHasWarned = true;\\n  }\\n  currentTimerStartTime = performanceNow();\\n  currentTimerNestedFlushDuration = 0;\\n  currentTimerDebugID = debugID;\\n  currentTimerType = timerType;\\n}\\n\\nfunction endLifeCycleTimer(debugID, timerType) {\\n  if (currentFlushNesting === 0) {\\n    return;\\n  }\\n  if (currentTimerType !== timerType && !lifeCycleTimerHasWarned) {\\n    process.env.NODE_ENV !== 'production' ? warning(false, 'There is an internal error in the React performance measurement code. ' + 'We did not expect %s timer to stop while %s timer is still in ' + 'progress for %s instance. Please report this as a bug in React.', timerType, currentTimerType || 'no', debugID === currentTimerDebugID ? 'the same' : 'another') : void 0;\\n    lifeCycleTimerHasWarned = true;\\n  }\\n  if (isProfiling) {\\n    currentFlushMeasurements.push({\\n      timerType: timerType,\\n      instanceID: debugID,\\n      duration: performanceNow() - currentTimerStartTime - currentTimerNestedFlushDuration\\n    });\\n  }\\n  currentTimerStartTime = 0;\\n  currentTimerNestedFlushDuration = 0;\\n  currentTimerDebugID = null;\\n  currentTimerType = null;\\n}\\n\\nfunction pauseCurrentLifeCycleTimer() {\\n  var currentTimer = {\\n    startTime: currentTimerStartTime,\\n    nestedFlushStartTime: performanceNow(),\\n    debugID: currentTimerDebugID,\\n    timerType: currentTimerType\\n  };\\n  lifeCycleTimerStack.push(currentTimer);\\n  currentTimerStartTime = 0;\\n  currentTimerNestedFlushDuration = 0;\\n  currentTimerDebugID = null;\\n  currentTimerType = null;\\n}\\n\\nfunction resumeCurrentLifeCycleTimer() {\\n  var _lifeCycleTimerStack$ = lifeCycleTimerStack.pop(),\\n      startTime = _lifeCycleTimerStack$.startTime,\\n      nestedFlushStartTime = _lifeCycleTimerStack$.nestedFlushStartTime,\\n      debugID = _lifeCycleTimerStack$.debugID,\\n      timerType = _lifeCycleTimerStack$.timerType;\\n\\n  var nestedFlushDuration = performanceNow() - nestedFlushStartTime;\\n  currentTimerStartTime = startTime;\\n  currentTimerNestedFlushDuration += nestedFlushDuration;\\n  currentTimerDebugID = debugID;\\n  currentTimerType = timerType;\\n}\\n\\nvar lastMarkTimeStamp = 0;\\nvar canUsePerformanceMeasure =\\n// $FlowFixMe https://github.com/facebook/flow/issues/2345\\ntypeof performance !== 'undefined' && typeof performance.mark === 'function' && typeof performance.clearMarks === 'function' && typeof performance.measure === 'function' && typeof performance.clearMeasures === 'function';\\n\\nfunction shouldMark(debugID) {\\n  if (!isProfiling || !canUsePerformanceMeasure) {\\n    return false;\\n  }\\n  var element = ReactComponentTreeHook.getElement(debugID);\\n  if (element == null || typeof element !== 'object') {\\n    return false;\\n  }\\n  var isHostElement = typeof element.type === 'string';\\n  if (isHostElement) {\\n    return false;\\n  }\\n  return true;\\n}\\n\\nfunction markBegin(debugID, markType) {\\n  if (!shouldMark(debugID)) {\\n    return;\\n  }\\n\\n  var markName = debugID + '::' + markType;\\n  lastMarkTimeStamp = performanceNow();\\n  performance.mark(markName);\\n}\\n\\nfunction markEnd(debugID, markType) {\\n  if (!shouldMark(debugID)) {\\n    return;\\n  }\\n\\n  var markName = debugID + '::' + markType;\\n  var displayName = ReactComponentTreeHook.getDisplayName(debugID) || 'Unknown';\\n\\n  // Chrome has an issue of dropping markers recorded too fast:\\n  // https://bugs.chromium.org/p/chromium/issues/detail?id=640652\\n  // To work around this, we will not report very small measurements.\\n  // I determined the magic number by tweaking it back and forth.\\n  // 0.05ms was enough to prevent the issue, but I set it to 0.1ms to be safe.\\n  // When the bug is fixed, we can `measure()` unconditionally if we want to.\\n  var timeStamp = performanceNow();\\n  if (timeStamp - lastMarkTimeStamp > 0.1) {\\n    var measurementName = displayName + ' [' + markType + ']';\\n    performance.measure(measurementName, markName);\\n  }\\n\\n  performance.clearMarks(markName);\\n  performance.clearMeasures(measurementName);\\n}\\n\\nvar ReactDebugTool = {\\n  addHook: function (hook) {\\n    hooks.push(hook);\\n  },\\n  removeHook: function (hook) {\\n    for (var i = 0; i < hooks.length; i++) {\\n      if (hooks[i] === hook) {\\n        hooks.splice(i, 1);\\n        i--;\\n      }\\n    }\\n  },\\n  isProfiling: function () {\\n    return isProfiling;\\n  },\\n  beginProfiling: function () {\\n    if (isProfiling) {\\n      return;\\n    }\\n\\n    isProfiling = true;\\n    flushHistory.length = 0;\\n    resetMeasurements();\\n    ReactDebugTool.addHook(ReactHostOperationHistoryHook);\\n  },\\n  endProfiling: function () {\\n    if (!isProfiling) {\\n      return;\\n    }\\n\\n    isProfiling = false;\\n    resetMeasurements();\\n    ReactDebugTool.removeHook(ReactHostOperationHistoryHook);\\n  },\\n  getFlushHistory: function () {\\n    return flushHistory;\\n  },\\n  onBeginFlush: function () {\\n    currentFlushNesting++;\\n    resetMeasurements();\\n    pauseCurrentLifeCycleTimer();\\n    emitEvent('onBeginFlush');\\n  },\\n  onEndFlush: function () {\\n    resetMeasurements();\\n    currentFlushNesting--;\\n    resumeCurrentLifeCycleTimer();\\n    emitEvent('onEndFlush');\\n  },\\n  onBeginLifeCycleTimer: function (debugID, timerType) {\\n    checkDebugID(debugID);\\n    emitEvent('onBeginLifeCycleTimer', debugID, timerType);\\n    markBegin(debugID, timerType);\\n    beginLifeCycleTimer(debugID, timerType);\\n  },\\n  onEndLifeCycleTimer: function (debugID, timerType) {\\n    checkDebugID(debugID);\\n    endLifeCycleTimer(debugID, timerType);\\n    markEnd(debugID, timerType);\\n    emitEvent('onEndLifeCycleTimer', debugID, timerType);\\n  },\\n  onBeginProcessingChildContext: function () {\\n    emitEvent('onBeginProcessingChildContext');\\n  },\\n  onEndProcessingChildContext: function () {\\n    emitEvent('onEndProcessingChildContext');\\n  },\\n  onHostOperation: function (operation) {\\n    checkDebugID(operation.instanceID);\\n    emitEvent('onHostOperation', operation);\\n  },\\n  onSetState: function () {\\n    emitEvent('onSetState');\\n  },\\n  onSetChildren: function (debugID, childDebugIDs) {\\n    checkDebugID(debugID);\\n    childDebugIDs.forEach(checkDebugID);\\n    emitEvent('onSetChildren', debugID, childDebugIDs);\\n  },\\n  onBeforeMountComponent: function (debugID, element, parentDebugID) {\\n    checkDebugID(debugID);\\n    checkDebugID(parentDebugID, true);\\n    emitEvent('onBeforeMountComponent', debugID, element, parentDebugID);\\n    markBegin(debugID, 'mount');\\n  },\\n  onMountComponent: function (debugID) {\\n    checkDebugID(debugID);\\n    markEnd(debugID, 'mount');\\n    emitEvent('onMountComponent', debugID);\\n  },\\n  onBeforeUpdateComponent: function (debugID, element) {\\n    checkDebugID(debugID);\\n    emitEvent('onBeforeUpdateComponent', debugID, element);\\n    markBegin(debugID, 'update');\\n  },\\n  onUpdateComponent: function (debugID) {\\n    checkDebugID(debugID);\\n    markEnd(debugID, 'update');\\n    emitEvent('onUpdateComponent', debugID);\\n  },\\n  onBeforeUnmountComponent: function (debugID) {\\n    checkDebugID(debugID);\\n    emitEvent('onBeforeUnmountComponent', debugID);\\n    markBegin(debugID, 'unmount');\\n  },\\n  onUnmountComponent: function (debugID) {\\n    checkDebugID(debugID);\\n    markEnd(debugID, 'unmount');\\n    emitEvent('onUnmountComponent', debugID);\\n  },\\n  onTestEvent: function () {\\n    emitEvent('onTestEvent');\\n  }\\n};\\n\\n// TODO remove these when RN/www gets updated\\nReactDebugTool.addDevtool = ReactDebugTool.addHook;\\nReactDebugTool.removeDevtool = ReactDebugTool.removeHook;\\n\\nReactDebugTool.addHook(ReactInvalidSetStateWarningHook);\\nReactDebugTool.addHook(ReactComponentTreeHook);\\nvar url = ExecutionEnvironment.canUseDOM && window.location.href || '';\\nif (/[?&]react_perf\\\\b/.test(url)) {\\n  ReactDebugTool.beginProfiling();\\n}\\n\\nmodule.exports = ReactDebugTool;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDebugTool.js\\n// module id = 141\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDebugTool.js?\");\n\n/***/ },\n/* 142 */\n/*!************************************************************!*\\\n  !*** ./~/react-dom/lib/ReactInvalidSetStateWarningHook.js ***!\n  \\************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2016-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  var processingChildContext = false;\\n\\n  var warnInvalidSetState = function () {\\n    process.env.NODE_ENV !== 'production' ? warning(!processingChildContext, 'setState(...): Cannot call setState() inside getChildContext()') : void 0;\\n  };\\n}\\n\\nvar ReactInvalidSetStateWarningHook = {\\n  onBeginProcessingChildContext: function () {\\n    processingChildContext = true;\\n  },\\n  onEndProcessingChildContext: function () {\\n    processingChildContext = false;\\n  },\\n  onSetState: function () {\\n    warnInvalidSetState();\\n  }\\n};\\n\\nmodule.exports = ReactInvalidSetStateWarningHook;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactInvalidSetStateWarningHook.js\\n// module id = 142\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactInvalidSetStateWarningHook.js?\");\n\n/***/ },\n/* 143 */\n/*!**********************************************************!*\\\n  !*** ./~/react-dom/lib/ReactHostOperationHistoryHook.js ***!\n  \\**********************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2016-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar history = [];\\n\\nvar ReactHostOperationHistoryHook = {\\n  onHostOperation: function (operation) {\\n    history.push(operation);\\n  },\\n  clearHistory: function () {\\n    if (ReactHostOperationHistoryHook._preventClearing) {\\n      // Should only be used for tests.\\n      return;\\n    }\\n\\n    history = [];\\n  },\\n  getHistory: function () {\\n    return history;\\n  }\\n};\\n\\nmodule.exports = ReactHostOperationHistoryHook;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactHostOperationHistoryHook.js\\n// module id = 143\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactHostOperationHistoryHook.js?\");\n\n/***/ },\n/* 144 */\n/*!**************************************!*\\\n  !*** ./~/fbjs/lib/performanceNow.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\n/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @typechecks\\n */\\n\\nvar performance = __webpack_require__(/*! ./performance */ 145);\\n\\nvar performanceNow;\\n\\n/**\\n * Detect if we can use `window.performance.now()` and gracefully fallback to\\n * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now\\n * because of Facebook's testing infrastructure.\\n */\\nif (performance.now) {\\n  performanceNow = function performanceNow() {\\n    return performance.now();\\n  };\\n} else {\\n  performanceNow = function performanceNow() {\\n    return Date.now();\\n  };\\n}\\n\\nmodule.exports = performanceNow;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/performanceNow.js\\n// module id = 144\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/performanceNow.js?\");\n\n/***/ },\n/* 145 */\n/*!***********************************!*\\\n  !*** ./~/fbjs/lib/performance.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @typechecks\\n */\\n\\n'use strict';\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 126);\\n\\nvar performance;\\n\\nif (ExecutionEnvironment.canUseDOM) {\\n  performance = window.performance || window.msPerformance || window.webkitPerformance;\\n}\\n\\nmodule.exports = performance || {};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/performance.js\\n// module id = 145\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/performance.js?\");\n\n/***/ },\n/* 146 */\n/*!****************************************!*\\\n  !*** ./~/react-dom/lib/Transaction.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\nvar OBSERVED_ERROR = {};\\n\\n/**\\n * `Transaction` creates a black box that is able to wrap any method such that\\n * certain invariants are maintained before and after the method is invoked\\n * (Even if an exception is thrown while invoking the wrapped method). Whoever\\n * instantiates a transaction can provide enforcers of the invariants at\\n * creation time. The `Transaction` class itself will supply one additional\\n * automatic invariant for you - the invariant that any transaction instance\\n * should not be run while it is already being run. You would typically create a\\n * single instance of a `Transaction` for reuse multiple times, that potentially\\n * is used to wrap several different methods. Wrappers are extremely simple -\\n * they only require implementing two methods.\\n *\\n * <pre>\\n *                       wrappers (injected at creation time)\\n *                                      +        +\\n *                                      |        |\\n *                    +-----------------|--------|--------------+\\n *                    |                 v        |              |\\n *                    |      +---------------+   |              |\\n *                    |   +--|    wrapper1   |---|----+         |\\n *                    |   |  +---------------+   v    |         |\\n *                    |   |          +-------------+  |         |\\n *                    |   |     +----|   wrapper2  |--------+   |\\n *                    |   |     |    +-------------+  |     |   |\\n *                    |   |     |                     |     |   |\\n *                    |   v     v                     v     v   | wrapper\\n *                    | +---+ +---+   +---------+   +---+ +---+ | invariants\\n * perform(anyMethod) | |   | |   |   |         |   |   | |   | | maintained\\n * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->\\n *                    | |   | |   |   |         |   |   | |   | |\\n *                    | |   | |   |   |         |   |   | |   | |\\n *                    | |   | |   |   |         |   |   | |   | |\\n *                    | +---+ +---+   +---------+   +---+ +---+ |\\n *                    |  initialize                    close    |\\n *                    +-----------------------------------------+\\n * </pre>\\n *\\n * Use cases:\\n * - Preserving the input selection ranges before/after reconciliation.\\n *   Restoring selection even in the event of an unexpected error.\\n * - Deactivating events while rearranging the DOM, preventing blurs/focuses,\\n *   while guaranteeing that afterwards, the event system is reactivated.\\n * - Flushing a queue of collected DOM mutations to the main UI thread after a\\n *   reconciliation takes place in a worker thread.\\n * - Invoking any collected `componentDidUpdate` callbacks after rendering new\\n *   content.\\n * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue\\n *   to preserve the `scrollTop` (an automatic scroll aware DOM).\\n * - (Future use case): Layout calculations before and after DOM updates.\\n *\\n * Transactional plugin API:\\n * - A module that has an `initialize` method that returns any precomputation.\\n * - and a `close` method that accepts the precomputation. `close` is invoked\\n *   when the wrapped process is completed, or has failed.\\n *\\n * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules\\n * that implement `initialize` and `close`.\\n * @return {Transaction} Single transaction for reuse in thread.\\n *\\n * @class Transaction\\n */\\nvar TransactionImpl = {\\n  /**\\n   * Sets up this instance so that it is prepared for collecting metrics. Does\\n   * so such that this setup method may be used on an instance that is already\\n   * initialized, in a way that does not consume additional memory upon reuse.\\n   * That can be useful if you decide to make your subclass of this mixin a\\n   * \\\"PooledClass\\\".\\n   */\\n  reinitializeTransaction: function () {\\n    this.transactionWrappers = this.getTransactionWrappers();\\n    if (this.wrapperInitData) {\\n      this.wrapperInitData.length = 0;\\n    } else {\\n      this.wrapperInitData = [];\\n    }\\n    this._isInTransaction = false;\\n  },\\n\\n  _isInTransaction: false,\\n\\n  /**\\n   * @abstract\\n   * @return {Array<TransactionWrapper>} Array of transaction wrappers.\\n   */\\n  getTransactionWrappers: null,\\n\\n  isInTransaction: function () {\\n    return !!this._isInTransaction;\\n  },\\n\\n  /**\\n   * Executes the function within a safety window. Use this for the top level\\n   * methods that result in large amounts of computation/mutations that would\\n   * need to be safety checked. The optional arguments helps prevent the need\\n   * to bind in many cases.\\n   *\\n   * @param {function} method Member of scope to call.\\n   * @param {Object} scope Scope to invoke from.\\n   * @param {Object?=} a Argument to pass to the method.\\n   * @param {Object?=} b Argument to pass to the method.\\n   * @param {Object?=} c Argument to pass to the method.\\n   * @param {Object?=} d Argument to pass to the method.\\n   * @param {Object?=} e Argument to pass to the method.\\n   * @param {Object?=} f Argument to pass to the method.\\n   *\\n   * @return {*} Return value from `method`.\\n   */\\n  perform: function (method, scope, a, b, c, d, e, f) {\\n    !!this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there is already an outstanding transaction.') : _prodInvariant('27') : void 0;\\n    var errorThrown;\\n    var ret;\\n    try {\\n      this._isInTransaction = true;\\n      // Catching errors makes debugging more difficult, so we start with\\n      // errorThrown set to true before setting it to false after calling\\n      // close -- if it's still set to true in the finally block, it means\\n      // one of these calls threw.\\n      errorThrown = true;\\n      this.initializeAll(0);\\n      ret = method.call(scope, a, b, c, d, e, f);\\n      errorThrown = false;\\n    } finally {\\n      try {\\n        if (errorThrown) {\\n          // If `method` throws, prefer to show that stack trace over any thrown\\n          // by invoking `closeAll`.\\n          try {\\n            this.closeAll(0);\\n          } catch (err) {}\\n        } else {\\n          // Since `method` didn't throw, we don't want to silence the exception\\n          // here.\\n          this.closeAll(0);\\n        }\\n      } finally {\\n        this._isInTransaction = false;\\n      }\\n    }\\n    return ret;\\n  },\\n\\n  initializeAll: function (startIndex) {\\n    var transactionWrappers = this.transactionWrappers;\\n    for (var i = startIndex; i < transactionWrappers.length; i++) {\\n      var wrapper = transactionWrappers[i];\\n      try {\\n        // Catching errors makes debugging more difficult, so we start with the\\n        // OBSERVED_ERROR state before overwriting it with the real return value\\n        // of initialize -- if it's still set to OBSERVED_ERROR in the finally\\n        // block, it means wrapper.initialize threw.\\n        this.wrapperInitData[i] = OBSERVED_ERROR;\\n        this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null;\\n      } finally {\\n        if (this.wrapperInitData[i] === OBSERVED_ERROR) {\\n          // The initializer for wrapper i threw an error; initialize the\\n          // remaining wrappers but silence any exceptions from them to ensure\\n          // that the first error is the one to bubble up.\\n          try {\\n            this.initializeAll(i + 1);\\n          } catch (err) {}\\n        }\\n      }\\n    }\\n  },\\n\\n  /**\\n   * Invokes each of `this.transactionWrappers.close[i]` functions, passing into\\n   * them the respective return values of `this.transactionWrappers.init[i]`\\n   * (`close`rs that correspond to initializers that failed will not be\\n   * invoked).\\n   */\\n  closeAll: function (startIndex) {\\n    !this.isInTransaction() ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : _prodInvariant('28') : void 0;\\n    var transactionWrappers = this.transactionWrappers;\\n    for (var i = startIndex; i < transactionWrappers.length; i++) {\\n      var wrapper = transactionWrappers[i];\\n      var initData = this.wrapperInitData[i];\\n      var errorThrown;\\n      try {\\n        // Catching errors makes debugging more difficult, so we start with\\n        // errorThrown set to true before setting it to false after calling\\n        // close -- if it's still set to true in the finally block, it means\\n        // wrapper.close threw.\\n        errorThrown = true;\\n        if (initData !== OBSERVED_ERROR && wrapper.close) {\\n          wrapper.close.call(this, initData);\\n        }\\n        errorThrown = false;\\n      } finally {\\n        if (errorThrown) {\\n          // The closer for wrapper i threw an error; close the remaining\\n          // wrappers but silence any exceptions from them to ensure that the\\n          // first error is the one to bubble up.\\n          try {\\n            this.closeAll(i + 1);\\n          } catch (e) {}\\n        }\\n      }\\n    }\\n    this.wrapperInitData.length = 0;\\n  }\\n};\\n\\nmodule.exports = TransactionImpl;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/Transaction.js\\n// module id = 146\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/Transaction.js?\");\n\n/***/ },\n/* 147 */\n/*!*******************************************!*\\\n  !*** ./~/react-dom/lib/getEventTarget.js ***!\n  \\*******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\n/**\\n * Gets the target node from a native browser event by accounting for\\n * inconsistencies in browser DOM APIs.\\n *\\n * @param {object} nativeEvent Native browser event.\\n * @return {DOMEventTarget} Target node.\\n */\\n\\nfunction getEventTarget(nativeEvent) {\\n  var target = nativeEvent.target || nativeEvent.srcElement || window;\\n\\n  // Normalize SVG <use> element events #4963\\n  if (target.correspondingUseElement) {\\n    target = target.correspondingUseElement;\\n  }\\n\\n  // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\\n  // @see http://www.quirksmode.org/js/events_properties.html\\n  return target.nodeType === 3 ? target.parentNode : target;\\n}\\n\\nmodule.exports = getEventTarget;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/getEventTarget.js\\n// module id = 147\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/getEventTarget.js?\");\n\n/***/ },\n/* 148 */\n/*!*********************************************!*\\\n  !*** ./~/react-dom/lib/isEventSupported.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ 126);\\n\\nvar useHasFeature;\\nif (ExecutionEnvironment.canUseDOM) {\\n  useHasFeature = document.implementation && document.implementation.hasFeature &&\\n  // always returns true in newer browsers as per the standard.\\n  // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\\n  document.implementation.hasFeature('', '') !== true;\\n}\\n\\n/**\\n * Checks if an event is supported in the current execution environment.\\n *\\n * NOTE: This will not work correctly for non-generic events such as `change`,\\n * `reset`, `load`, `error`, and `select`.\\n *\\n * Borrows from Modernizr.\\n *\\n * @param {string} eventNameSuffix Event name, e.g. \\\"click\\\".\\n * @param {?boolean} capture Check if the capture phase is supported.\\n * @return {boolean} True if the event is supported.\\n * @internal\\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\\n */\\nfunction isEventSupported(eventNameSuffix, capture) {\\n  if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) {\\n    return false;\\n  }\\n\\n  var eventName = 'on' + eventNameSuffix;\\n  var isSupported = eventName in document;\\n\\n  if (!isSupported) {\\n    var element = document.createElement('div');\\n    element.setAttribute(eventName, 'return;');\\n    isSupported = typeof element[eventName] === 'function';\\n  }\\n\\n  if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\\n    // This is the only way to test support for the `wheel` event in IE9+.\\n    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\\n  }\\n\\n  return isSupported;\\n}\\n\\nmodule.exports = isEventSupported;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/isEventSupported.js\\n// module id = 148\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/isEventSupported.js?\");\n\n/***/ },\n/* 149 */\n/*!***********************************************!*\\\n  !*** ./~/react-dom/lib/isTextInputElement.js ***!\n  \\***********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n/**\\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\\n */\\n\\nvar supportedInputTypes = {\\n  'color': true,\\n  'date': true,\\n  'datetime': true,\\n  'datetime-local': true,\\n  'email': true,\\n  'month': true,\\n  'number': true,\\n  'password': true,\\n  'range': true,\\n  'search': true,\\n  'tel': true,\\n  'text': true,\\n  'time': true,\\n  'url': true,\\n  'week': true\\n};\\n\\nfunction isTextInputElement(elem) {\\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\\n\\n  if (nodeName === 'input') {\\n    return !!supportedInputTypes[elem.type];\\n  }\\n\\n  if (nodeName === 'textarea') {\\n    return true;\\n  }\\n\\n  return false;\\n}\\n\\nmodule.exports = isTextInputElement;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/isTextInputElement.js\\n// module id = 149\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/isTextInputElement.js?\");\n\n/***/ },\n/* 150 */\n/*!****************************************************!*\\\n  !*** ./~/react-dom/lib/DefaultEventPluginOrder.js ***!\n  \\****************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\n/**\\n * Module that is injectable into `EventPluginHub`, that specifies a\\n * deterministic ordering of `EventPlugin`s. A convenient way to reason about\\n * plugins, without having to package every one of them. This is better than\\n * having plugins be ordered in the same order that they are injected because\\n * that ordering would be influenced by the packaging order.\\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\\n */\\n\\nvar DefaultEventPluginOrder = ['ResponderEventPlugin', 'SimpleEventPlugin', 'TapEventPlugin', 'EnterLeaveEventPlugin', 'ChangeEventPlugin', 'SelectEventPlugin', 'BeforeInputEventPlugin'];\\n\\nmodule.exports = DefaultEventPluginOrder;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/DefaultEventPluginOrder.js\\n// module id = 150\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/DefaultEventPluginOrder.js?\");\n\n/***/ },\n/* 151 */\n/*!**************************************************!*\\\n  !*** ./~/react-dom/lib/EnterLeaveEventPlugin.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar EventPropagators = __webpack_require__(/*! ./EventPropagators */ 119);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\nvar SyntheticMouseEvent = __webpack_require__(/*! ./SyntheticMouseEvent */ 152);\\n\\nvar eventTypes = {\\n  mouseEnter: {\\n    registrationName: 'onMouseEnter',\\n    dependencies: ['topMouseOut', 'topMouseOver']\\n  },\\n  mouseLeave: {\\n    registrationName: 'onMouseLeave',\\n    dependencies: ['topMouseOut', 'topMouseOver']\\n  }\\n};\\n\\nvar EnterLeaveEventPlugin = {\\n\\n  eventTypes: eventTypes,\\n\\n  /**\\n   * For almost every interaction we care about, there will be both a top-level\\n   * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\\n   * we do not extract duplicate events. However, moving the mouse into the\\n   * browser from outside will not fire a `mouseout` event. In this case, we use\\n   * the `mouseover` top-level event.\\n   */\\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\\n    if (topLevelType === 'topMouseOver' && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {\\n      return null;\\n    }\\n    if (topLevelType !== 'topMouseOut' && topLevelType !== 'topMouseOver') {\\n      // Must not be a mouse in or mouse out - ignoring.\\n      return null;\\n    }\\n\\n    var win;\\n    if (nativeEventTarget.window === nativeEventTarget) {\\n      // `nativeEventTarget` is probably a window object.\\n      win = nativeEventTarget;\\n    } else {\\n      // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\\n      var doc = nativeEventTarget.ownerDocument;\\n      if (doc) {\\n        win = doc.defaultView || doc.parentWindow;\\n      } else {\\n        win = window;\\n      }\\n    }\\n\\n    var from;\\n    var to;\\n    if (topLevelType === 'topMouseOut') {\\n      from = targetInst;\\n      var related = nativeEvent.relatedTarget || nativeEvent.toElement;\\n      to = related ? ReactDOMComponentTree.getClosestInstanceFromNode(related) : null;\\n    } else {\\n      // Moving to a node from outside the window.\\n      from = null;\\n      to = targetInst;\\n    }\\n\\n    if (from === to) {\\n      // Nothing pertains to our managed components.\\n      return null;\\n    }\\n\\n    var fromNode = from == null ? win : ReactDOMComponentTree.getNodeFromInstance(from);\\n    var toNode = to == null ? win : ReactDOMComponentTree.getNodeFromInstance(to);\\n\\n    var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, from, nativeEvent, nativeEventTarget);\\n    leave.type = 'mouseleave';\\n    leave.target = fromNode;\\n    leave.relatedTarget = toNode;\\n\\n    var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, to, nativeEvent, nativeEventTarget);\\n    enter.type = 'mouseenter';\\n    enter.target = toNode;\\n    enter.relatedTarget = fromNode;\\n\\n    EventPropagators.accumulateEnterLeaveDispatches(leave, enter, from, to);\\n\\n    return [leave, enter];\\n  }\\n\\n};\\n\\nmodule.exports = EnterLeaveEventPlugin;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/EnterLeaveEventPlugin.js\\n// module id = 151\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/EnterLeaveEventPlugin.js?\");\n\n/***/ },\n/* 152 */\n/*!************************************************!*\\\n  !*** ./~/react-dom/lib/SyntheticMouseEvent.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar SyntheticUIEvent = __webpack_require__(/*! ./SyntheticUIEvent */ 153);\\nvar ViewportMetrics = __webpack_require__(/*! ./ViewportMetrics */ 154);\\n\\nvar getEventModifierState = __webpack_require__(/*! ./getEventModifierState */ 155);\\n\\n/**\\n * @interface MouseEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar MouseEventInterface = {\\n  screenX: null,\\n  screenY: null,\\n  clientX: null,\\n  clientY: null,\\n  ctrlKey: null,\\n  shiftKey: null,\\n  altKey: null,\\n  metaKey: null,\\n  getModifierState: getEventModifierState,\\n  button: function (event) {\\n    // Webkit, Firefox, IE9+\\n    // which:  1 2 3\\n    // button: 0 1 2 (standard)\\n    var button = event.button;\\n    if ('which' in event) {\\n      return button;\\n    }\\n    // IE<9\\n    // which:  undefined\\n    // button: 0 0 0\\n    // button: 1 4 2 (onmouseup)\\n    return button === 2 ? 2 : button === 4 ? 1 : 0;\\n  },\\n  buttons: null,\\n  relatedTarget: function (event) {\\n    return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);\\n  },\\n  // \\\"Proprietary\\\" Interface.\\n  pageX: function (event) {\\n    return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;\\n  },\\n  pageY: function (event) {\\n    return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;\\n  }\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\\n  return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\\n}\\n\\nSyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);\\n\\nmodule.exports = SyntheticMouseEvent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/SyntheticMouseEvent.js\\n// module id = 152\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/SyntheticMouseEvent.js?\");\n\n/***/ },\n/* 153 */\n/*!*********************************************!*\\\n  !*** ./~/react-dom/lib/SyntheticUIEvent.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 131);\\n\\nvar getEventTarget = __webpack_require__(/*! ./getEventTarget */ 147);\\n\\n/**\\n * @interface UIEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar UIEventInterface = {\\n  view: function (event) {\\n    if (event.view) {\\n      return event.view;\\n    }\\n\\n    var target = getEventTarget(event);\\n    if (target.window === target) {\\n      // target is a window object\\n      return target;\\n    }\\n\\n    var doc = target.ownerDocument;\\n    // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\\n    if (doc) {\\n      return doc.defaultView || doc.parentWindow;\\n    } else {\\n      return window;\\n    }\\n  },\\n  detail: function (event) {\\n    return event.detail || 0;\\n  }\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticEvent}\\n */\\nfunction SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\\n}\\n\\nSyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);\\n\\nmodule.exports = SyntheticUIEvent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/SyntheticUIEvent.js\\n// module id = 153\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/SyntheticUIEvent.js?\");\n\n/***/ },\n/* 154 */\n/*!********************************************!*\\\n  !*** ./~/react-dom/lib/ViewportMetrics.js ***!\n  \\********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ViewportMetrics = {\\n\\n  currentScrollLeft: 0,\\n\\n  currentScrollTop: 0,\\n\\n  refreshScrollValues: function (scrollPosition) {\\n    ViewportMetrics.currentScrollLeft = scrollPosition.x;\\n    ViewportMetrics.currentScrollTop = scrollPosition.y;\\n  }\\n\\n};\\n\\nmodule.exports = ViewportMetrics;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ViewportMetrics.js\\n// module id = 154\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ViewportMetrics.js?\");\n\n/***/ },\n/* 155 */\n/*!**************************************************!*\\\n  !*** ./~/react-dom/lib/getEventModifierState.js ***!\n  \\**************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\n/**\\n * Translation from modifier key to the associated property in the event.\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\\n */\\n\\nvar modifierKeyToProp = {\\n  'Alt': 'altKey',\\n  'Control': 'ctrlKey',\\n  'Meta': 'metaKey',\\n  'Shift': 'shiftKey'\\n};\\n\\n// IE8 does not implement getModifierState so we simply map it to the only\\n// modifier keys exposed by the event itself, does not support Lock-keys.\\n// Currently, all major browsers except Chrome seems to support Lock-keys.\\nfunction modifierStateGetter(keyArg) {\\n  var syntheticEvent = this;\\n  var nativeEvent = syntheticEvent.nativeEvent;\\n  if (nativeEvent.getModifierState) {\\n    return nativeEvent.getModifierState(keyArg);\\n  }\\n  var keyProp = modifierKeyToProp[keyArg];\\n  return keyProp ? !!nativeEvent[keyProp] : false;\\n}\\n\\nfunction getEventModifierState(nativeEvent) {\\n  return modifierStateGetter;\\n}\\n\\nmodule.exports = getEventModifierState;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/getEventModifierState.js\\n// module id = 155\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/getEventModifierState.js?\");\n\n/***/ },\n/* 156 */\n/*!**************************************************!*\\\n  !*** ./~/react-dom/lib/HTMLDOMPropertyConfig.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 114);\\n\\nvar MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;\\nvar HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;\\nvar HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;\\nvar HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;\\nvar HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;\\n\\nvar HTMLDOMPropertyConfig = {\\n  isCustomAttribute: RegExp.prototype.test.bind(new RegExp('^(data|aria)-[' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$')),\\n  Properties: {\\n    /**\\n     * Standard Properties\\n     */\\n    accept: 0,\\n    acceptCharset: 0,\\n    accessKey: 0,\\n    action: 0,\\n    allowFullScreen: HAS_BOOLEAN_VALUE,\\n    allowTransparency: 0,\\n    alt: 0,\\n    // specifies target context for links with `preload` type\\n    as: 0,\\n    async: HAS_BOOLEAN_VALUE,\\n    autoComplete: 0,\\n    // autoFocus is polyfilled/normalized by AutoFocusUtils\\n    // autoFocus: HAS_BOOLEAN_VALUE,\\n    autoPlay: HAS_BOOLEAN_VALUE,\\n    capture: HAS_BOOLEAN_VALUE,\\n    cellPadding: 0,\\n    cellSpacing: 0,\\n    charSet: 0,\\n    challenge: 0,\\n    checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    cite: 0,\\n    classID: 0,\\n    className: 0,\\n    cols: HAS_POSITIVE_NUMERIC_VALUE,\\n    colSpan: 0,\\n    content: 0,\\n    contentEditable: 0,\\n    contextMenu: 0,\\n    controls: HAS_BOOLEAN_VALUE,\\n    coords: 0,\\n    crossOrigin: 0,\\n    data: 0, // For `<object />` acts as `src`.\\n    dateTime: 0,\\n    'default': HAS_BOOLEAN_VALUE,\\n    defer: HAS_BOOLEAN_VALUE,\\n    dir: 0,\\n    disabled: HAS_BOOLEAN_VALUE,\\n    download: HAS_OVERLOADED_BOOLEAN_VALUE,\\n    draggable: 0,\\n    encType: 0,\\n    form: 0,\\n    formAction: 0,\\n    formEncType: 0,\\n    formMethod: 0,\\n    formNoValidate: HAS_BOOLEAN_VALUE,\\n    formTarget: 0,\\n    frameBorder: 0,\\n    headers: 0,\\n    height: 0,\\n    hidden: HAS_BOOLEAN_VALUE,\\n    high: 0,\\n    href: 0,\\n    hrefLang: 0,\\n    htmlFor: 0,\\n    httpEquiv: 0,\\n    icon: 0,\\n    id: 0,\\n    inputMode: 0,\\n    integrity: 0,\\n    is: 0,\\n    keyParams: 0,\\n    keyType: 0,\\n    kind: 0,\\n    label: 0,\\n    lang: 0,\\n    list: 0,\\n    loop: HAS_BOOLEAN_VALUE,\\n    low: 0,\\n    manifest: 0,\\n    marginHeight: 0,\\n    marginWidth: 0,\\n    max: 0,\\n    maxLength: 0,\\n    media: 0,\\n    mediaGroup: 0,\\n    method: 0,\\n    min: 0,\\n    minLength: 0,\\n    // Caution; `option.selected` is not updated if `select.multiple` is\\n    // disabled with `removeAttribute`.\\n    multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    name: 0,\\n    nonce: 0,\\n    noValidate: HAS_BOOLEAN_VALUE,\\n    open: HAS_BOOLEAN_VALUE,\\n    optimum: 0,\\n    pattern: 0,\\n    placeholder: 0,\\n    playsInline: HAS_BOOLEAN_VALUE,\\n    poster: 0,\\n    preload: 0,\\n    profile: 0,\\n    radioGroup: 0,\\n    readOnly: HAS_BOOLEAN_VALUE,\\n    referrerPolicy: 0,\\n    rel: 0,\\n    required: HAS_BOOLEAN_VALUE,\\n    reversed: HAS_BOOLEAN_VALUE,\\n    role: 0,\\n    rows: HAS_POSITIVE_NUMERIC_VALUE,\\n    rowSpan: HAS_NUMERIC_VALUE,\\n    sandbox: 0,\\n    scope: 0,\\n    scoped: HAS_BOOLEAN_VALUE,\\n    scrolling: 0,\\n    seamless: HAS_BOOLEAN_VALUE,\\n    selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    shape: 0,\\n    size: HAS_POSITIVE_NUMERIC_VALUE,\\n    sizes: 0,\\n    span: HAS_POSITIVE_NUMERIC_VALUE,\\n    spellCheck: 0,\\n    src: 0,\\n    srcDoc: 0,\\n    srcLang: 0,\\n    srcSet: 0,\\n    start: HAS_NUMERIC_VALUE,\\n    step: 0,\\n    style: 0,\\n    summary: 0,\\n    tabIndex: 0,\\n    target: 0,\\n    title: 0,\\n    // Setting .type throws on non-<input> tags\\n    type: 0,\\n    useMap: 0,\\n    value: 0,\\n    width: 0,\\n    wmode: 0,\\n    wrap: 0,\\n\\n    /**\\n     * RDFa Properties\\n     */\\n    about: 0,\\n    datatype: 0,\\n    inlist: 0,\\n    prefix: 0,\\n    // property is also supported for OpenGraph in meta tags.\\n    property: 0,\\n    resource: 0,\\n    'typeof': 0,\\n    vocab: 0,\\n\\n    /**\\n     * Non-standard Properties\\n     */\\n    // autoCapitalize and autoCorrect are supported in Mobile Safari for\\n    // keyboard hints.\\n    autoCapitalize: 0,\\n    autoCorrect: 0,\\n    // autoSave allows WebKit/Blink to persist values of input fields on page reloads\\n    autoSave: 0,\\n    // color is for Safari mask-icon link\\n    color: 0,\\n    // itemProp, itemScope, itemType are for\\n    // Microdata support. See http://schema.org/docs/gs.html\\n    itemProp: 0,\\n    itemScope: HAS_BOOLEAN_VALUE,\\n    itemType: 0,\\n    // itemID and itemRef are for Microdata support as well but\\n    // only specified in the WHATWG spec document. See\\n    // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api\\n    itemID: 0,\\n    itemRef: 0,\\n    // results show looking glass icon and recent searches on input\\n    // search fields in WebKit/Blink\\n    results: 0,\\n    // IE-only attribute that specifies security restrictions on an iframe\\n    // as an alternative to the sandbox attribute on IE<10\\n    security: 0,\\n    // IE-only attribute that controls focus behavior\\n    unselectable: 0\\n  },\\n  DOMAttributeNames: {\\n    acceptCharset: 'accept-charset',\\n    className: 'class',\\n    htmlFor: 'for',\\n    httpEquiv: 'http-equiv'\\n  },\\n  DOMPropertyNames: {}\\n};\\n\\nmodule.exports = HTMLDOMPropertyConfig;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/HTMLDOMPropertyConfig.js\\n// module id = 156\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/HTMLDOMPropertyConfig.js?\");\n\n/***/ },\n/* 157 */\n/*!*************************************************************!*\\\n  !*** ./~/react-dom/lib/ReactComponentBrowserEnvironment.js ***!\n  \\*************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar DOMChildrenOperations = __webpack_require__(/*! ./DOMChildrenOperations */ 158);\\nvar ReactDOMIDOperations = __webpack_require__(/*! ./ReactDOMIDOperations */ 169);\\n\\n/**\\n * Abstracts away all functionality of the reconciler that requires knowledge of\\n * the browser context. TODO: These callers should be refactored to avoid the\\n * need for this injection.\\n */\\nvar ReactComponentBrowserEnvironment = {\\n\\n  processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,\\n\\n  replaceNodeWithMarkup: DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup\\n\\n};\\n\\nmodule.exports = ReactComponentBrowserEnvironment;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactComponentBrowserEnvironment.js\\n// module id = 157\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactComponentBrowserEnvironment.js?\");\n\n/***/ },\n/* 158 */\n/*!**************************************************!*\\\n  !*** ./~/react-dom/lib/DOMChildrenOperations.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar DOMLazyTree = __webpack_require__(/*! ./DOMLazyTree */ 159);\\nvar Danger = __webpack_require__(/*! ./Danger */ 165);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\nvar ReactInstrumentation = __webpack_require__(/*! ./ReactInstrumentation */ 140);\\n\\nvar createMicrosoftUnsafeLocalFunction = __webpack_require__(/*! ./createMicrosoftUnsafeLocalFunction */ 162);\\nvar setInnerHTML = __webpack_require__(/*! ./setInnerHTML */ 161);\\nvar setTextContent = __webpack_require__(/*! ./setTextContent */ 163);\\n\\nfunction getNodeAfter(parentNode, node) {\\n  // Special case for text components, which return [open, close] comments\\n  // from getHostNode.\\n  if (Array.isArray(node)) {\\n    node = node[1];\\n  }\\n  return node ? node.nextSibling : parentNode.firstChild;\\n}\\n\\n/**\\n * Inserts `childNode` as a child of `parentNode` at the `index`.\\n *\\n * @param {DOMElement} parentNode Parent node in which to insert.\\n * @param {DOMElement} childNode Child node to insert.\\n * @param {number} index Index at which to insert the child.\\n * @internal\\n */\\nvar insertChildAt = createMicrosoftUnsafeLocalFunction(function (parentNode, childNode, referenceNode) {\\n  // We rely exclusively on `insertBefore(node, null)` instead of also using\\n  // `appendChild(node)`. (Using `undefined` is not allowed by all browsers so\\n  // we are careful to use `null`.)\\n  parentNode.insertBefore(childNode, referenceNode);\\n});\\n\\nfunction insertLazyTreeChildAt(parentNode, childTree, referenceNode) {\\n  DOMLazyTree.insertTreeBefore(parentNode, childTree, referenceNode);\\n}\\n\\nfunction moveChild(parentNode, childNode, referenceNode) {\\n  if (Array.isArray(childNode)) {\\n    moveDelimitedText(parentNode, childNode[0], childNode[1], referenceNode);\\n  } else {\\n    insertChildAt(parentNode, childNode, referenceNode);\\n  }\\n}\\n\\nfunction removeChild(parentNode, childNode) {\\n  if (Array.isArray(childNode)) {\\n    var closingComment = childNode[1];\\n    childNode = childNode[0];\\n    removeDelimitedText(parentNode, childNode, closingComment);\\n    parentNode.removeChild(closingComment);\\n  }\\n  parentNode.removeChild(childNode);\\n}\\n\\nfunction moveDelimitedText(parentNode, openingComment, closingComment, referenceNode) {\\n  var node = openingComment;\\n  while (true) {\\n    var nextNode = node.nextSibling;\\n    insertChildAt(parentNode, node, referenceNode);\\n    if (node === closingComment) {\\n      break;\\n    }\\n    node = nextNode;\\n  }\\n}\\n\\nfunction removeDelimitedText(parentNode, startNode, closingComment) {\\n  while (true) {\\n    var node = startNode.nextSibling;\\n    if (node === closingComment) {\\n      // The closing comment is removed by ReactMultiChild.\\n      break;\\n    } else {\\n      parentNode.removeChild(node);\\n    }\\n  }\\n}\\n\\nfunction replaceDelimitedText(openingComment, closingComment, stringText) {\\n  var parentNode = openingComment.parentNode;\\n  var nodeAfterComment = openingComment.nextSibling;\\n  if (nodeAfterComment === closingComment) {\\n    // There are no text nodes between the opening and closing comments; insert\\n    // a new one if stringText isn't empty.\\n    if (stringText) {\\n      insertChildAt(parentNode, document.createTextNode(stringText), nodeAfterComment);\\n    }\\n  } else {\\n    if (stringText) {\\n      // Set the text content of the first node after the opening comment, and\\n      // remove all following nodes up until the closing comment.\\n      setTextContent(nodeAfterComment, stringText);\\n      removeDelimitedText(parentNode, nodeAfterComment, closingComment);\\n    } else {\\n      removeDelimitedText(parentNode, openingComment, closingComment);\\n    }\\n  }\\n\\n  if (process.env.NODE_ENV !== 'production') {\\n    ReactInstrumentation.debugTool.onHostOperation({\\n      instanceID: ReactDOMComponentTree.getInstanceFromNode(openingComment)._debugID,\\n      type: 'replace text',\\n      payload: stringText\\n    });\\n  }\\n}\\n\\nvar dangerouslyReplaceNodeWithMarkup = Danger.dangerouslyReplaceNodeWithMarkup;\\nif (process.env.NODE_ENV !== 'production') {\\n  dangerouslyReplaceNodeWithMarkup = function (oldChild, markup, prevInstance) {\\n    Danger.dangerouslyReplaceNodeWithMarkup(oldChild, markup);\\n    if (prevInstance._debugID !== 0) {\\n      ReactInstrumentation.debugTool.onHostOperation({\\n        instanceID: prevInstance._debugID,\\n        type: 'replace with',\\n        payload: markup.toString()\\n      });\\n    } else {\\n      var nextInstance = ReactDOMComponentTree.getInstanceFromNode(markup.node);\\n      if (nextInstance._debugID !== 0) {\\n        ReactInstrumentation.debugTool.onHostOperation({\\n          instanceID: nextInstance._debugID,\\n          type: 'mount',\\n          payload: markup.toString()\\n        });\\n      }\\n    }\\n  };\\n}\\n\\n/**\\n * Operations for updating with DOM children.\\n */\\nvar DOMChildrenOperations = {\\n\\n  dangerouslyReplaceNodeWithMarkup: dangerouslyReplaceNodeWithMarkup,\\n\\n  replaceDelimitedText: replaceDelimitedText,\\n\\n  /**\\n   * Updates a component's children by processing a series of updates. The\\n   * update configurations are each expected to have a `parentNode` property.\\n   *\\n   * @param {array<object>} updates List of update configurations.\\n   * @internal\\n   */\\n  processUpdates: function (parentNode, updates) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      var parentNodeDebugID = ReactDOMComponentTree.getInstanceFromNode(parentNode)._debugID;\\n    }\\n\\n    for (var k = 0; k < updates.length; k++) {\\n      var update = updates[k];\\n      switch (update.type) {\\n        case 'INSERT_MARKUP':\\n          insertLazyTreeChildAt(parentNode, update.content, getNodeAfter(parentNode, update.afterNode));\\n          if (process.env.NODE_ENV !== 'production') {\\n            ReactInstrumentation.debugTool.onHostOperation({\\n              instanceID: parentNodeDebugID,\\n              type: 'insert child',\\n              payload: { toIndex: update.toIndex, content: update.content.toString() }\\n            });\\n          }\\n          break;\\n        case 'MOVE_EXISTING':\\n          moveChild(parentNode, update.fromNode, getNodeAfter(parentNode, update.afterNode));\\n          if (process.env.NODE_ENV !== 'production') {\\n            ReactInstrumentation.debugTool.onHostOperation({\\n              instanceID: parentNodeDebugID,\\n              type: 'move child',\\n              payload: { fromIndex: update.fromIndex, toIndex: update.toIndex }\\n            });\\n          }\\n          break;\\n        case 'SET_MARKUP':\\n          setInnerHTML(parentNode, update.content);\\n          if (process.env.NODE_ENV !== 'production') {\\n            ReactInstrumentation.debugTool.onHostOperation({\\n              instanceID: parentNodeDebugID,\\n              type: 'replace children',\\n              payload: update.content.toString()\\n            });\\n          }\\n          break;\\n        case 'TEXT_CONTENT':\\n          setTextContent(parentNode, update.content);\\n          if (process.env.NODE_ENV !== 'production') {\\n            ReactInstrumentation.debugTool.onHostOperation({\\n              instanceID: parentNodeDebugID,\\n              type: 'replace text',\\n              payload: update.content.toString()\\n            });\\n          }\\n          break;\\n        case 'REMOVE_NODE':\\n          removeChild(parentNode, update.fromNode);\\n          if (process.env.NODE_ENV !== 'production') {\\n            ReactInstrumentation.debugTool.onHostOperation({\\n              instanceID: parentNodeDebugID,\\n              type: 'remove child',\\n              payload: { fromIndex: update.fromIndex }\\n            });\\n          }\\n          break;\\n      }\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = DOMChildrenOperations;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/DOMChildrenOperations.js\\n// module id = 158\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/DOMChildrenOperations.js?\");\n\n/***/ },\n/* 159 */\n/*!****************************************!*\\\n  !*** ./~/react-dom/lib/DOMLazyTree.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2015-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar DOMNamespaces = __webpack_require__(/*! ./DOMNamespaces */ 160);\\nvar setInnerHTML = __webpack_require__(/*! ./setInnerHTML */ 161);\\n\\nvar createMicrosoftUnsafeLocalFunction = __webpack_require__(/*! ./createMicrosoftUnsafeLocalFunction */ 162);\\nvar setTextContent = __webpack_require__(/*! ./setTextContent */ 163);\\n\\nvar ELEMENT_NODE_TYPE = 1;\\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\\n\\n/**\\n * In IE (8-11) and Edge, appending nodes with no children is dramatically\\n * faster than appending a full subtree, so we essentially queue up the\\n * .appendChild calls here and apply them so each node is added to its parent\\n * before any children are added.\\n *\\n * In other browsers, doing so is slower or neutral compared to the other order\\n * (in Firefox, twice as slow) so we only do this inversion in IE.\\n *\\n * See https://github.com/spicyj/innerhtml-vs-createelement-vs-clonenode.\\n */\\nvar enableLazy = typeof document !== 'undefined' && typeof document.documentMode === 'number' || typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && /\\\\bEdge\\\\/\\\\d/.test(navigator.userAgent);\\n\\nfunction insertTreeChildren(tree) {\\n  if (!enableLazy) {\\n    return;\\n  }\\n  var node = tree.node;\\n  var children = tree.children;\\n  if (children.length) {\\n    for (var i = 0; i < children.length; i++) {\\n      insertTreeBefore(node, children[i], null);\\n    }\\n  } else if (tree.html != null) {\\n    setInnerHTML(node, tree.html);\\n  } else if (tree.text != null) {\\n    setTextContent(node, tree.text);\\n  }\\n}\\n\\nvar insertTreeBefore = createMicrosoftUnsafeLocalFunction(function (parentNode, tree, referenceNode) {\\n  // DocumentFragments aren't actually part of the DOM after insertion so\\n  // appending children won't update the DOM. We need to ensure the fragment\\n  // is properly populated first, breaking out of our lazy approach for just\\n  // this level. Also, some <object> plugins (like Flash Player) will read\\n  // <param> nodes immediately upon insertion into the DOM, so <object>\\n  // must also be populated prior to insertion into the DOM.\\n  if (tree.node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE || tree.node.nodeType === ELEMENT_NODE_TYPE && tree.node.nodeName.toLowerCase() === 'object' && (tree.node.namespaceURI == null || tree.node.namespaceURI === DOMNamespaces.html)) {\\n    insertTreeChildren(tree);\\n    parentNode.insertBefore(tree.node, referenceNode);\\n  } else {\\n    parentNode.insertBefore(tree.node, referenceNode);\\n    insertTreeChildren(tree);\\n  }\\n});\\n\\nfunction replaceChildWithTree(oldNode, newTree) {\\n  oldNode.parentNode.replaceChild(newTree.node, oldNode);\\n  insertTreeChildren(newTree);\\n}\\n\\nfunction queueChild(parentTree, childTree) {\\n  if (enableLazy) {\\n    parentTree.children.push(childTree);\\n  } else {\\n    parentTree.node.appendChild(childTree.node);\\n  }\\n}\\n\\nfunction queueHTML(tree, html) {\\n  if (enableLazy) {\\n    tree.html = html;\\n  } else {\\n    setInnerHTML(tree.node, html);\\n  }\\n}\\n\\nfunction queueText(tree, text) {\\n  if (enableLazy) {\\n    tree.text = text;\\n  } else {\\n    setTextContent(tree.node, text);\\n  }\\n}\\n\\nfunction toString() {\\n  return this.node.nodeName;\\n}\\n\\nfunction DOMLazyTree(node) {\\n  return {\\n    node: node,\\n    children: [],\\n    html: null,\\n    text: null,\\n    toString: toString\\n  };\\n}\\n\\nDOMLazyTree.insertTreeBefore = insertTreeBefore;\\nDOMLazyTree.replaceChildWithTree = replaceChildWithTree;\\nDOMLazyTree.queueChild = queueChild;\\nDOMLazyTree.queueHTML = queueHTML;\\nDOMLazyTree.queueText = queueText;\\n\\nmodule.exports = DOMLazyTree;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/DOMLazyTree.js\\n// module id = 159\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/DOMLazyTree.js?\");\n\n/***/ },\n/* 160 */\n/*!******************************************!*\\\n  !*** ./~/react-dom/lib/DOMNamespaces.js ***!\n  \\******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar DOMNamespaces = {\\n  html: 'http://www.w3.org/1999/xhtml',\\n  mathml: 'http://www.w3.org/1998/Math/MathML',\\n  svg: 'http://www.w3.org/2000/svg'\\n};\\n\\nmodule.exports = DOMNamespaces;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/DOMNamespaces.js\\n// module id = 160\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/DOMNamespaces.js?\");\n\n/***/ },\n/* 161 */\n/*!*****************************************!*\\\n  !*** ./~/react-dom/lib/setInnerHTML.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ 126);\\nvar DOMNamespaces = __webpack_require__(/*! ./DOMNamespaces */ 160);\\n\\nvar WHITESPACE_TEST = /^[ \\\\r\\\\n\\\\t\\\\f]/;\\nvar NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \\\\r\\\\n\\\\t\\\\f\\\\/>]/;\\n\\nvar createMicrosoftUnsafeLocalFunction = __webpack_require__(/*! ./createMicrosoftUnsafeLocalFunction */ 162);\\n\\n// SVG temp container for IE lacking innerHTML\\nvar reusableSVGContainer;\\n\\n/**\\n * Set the innerHTML property of a node, ensuring that whitespace is preserved\\n * even in IE8.\\n *\\n * @param {DOMElement} node\\n * @param {string} html\\n * @internal\\n */\\nvar setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {\\n  // IE does not have innerHTML for SVG nodes, so instead we inject the\\n  // new markup in a temp node and then move the child nodes across into\\n  // the target node\\n  if (node.namespaceURI === DOMNamespaces.svg && !('innerHTML' in node)) {\\n    reusableSVGContainer = reusableSVGContainer || document.createElement('div');\\n    reusableSVGContainer.innerHTML = '<svg>' + html + '</svg>';\\n    var svgNode = reusableSVGContainer.firstChild;\\n    while (svgNode.firstChild) {\\n      node.appendChild(svgNode.firstChild);\\n    }\\n  } else {\\n    node.innerHTML = html;\\n  }\\n});\\n\\nif (ExecutionEnvironment.canUseDOM) {\\n  // IE8: When updating a just created node with innerHTML only leading\\n  // whitespace is removed. When updating an existing node with innerHTML\\n  // whitespace in root TextNodes is also collapsed.\\n  // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html\\n\\n  // Feature detection; only IE8 is known to behave improperly like this.\\n  var testElement = document.createElement('div');\\n  testElement.innerHTML = ' ';\\n  if (testElement.innerHTML === '') {\\n    setInnerHTML = function (node, html) {\\n      // Magic theory: IE8 supposedly differentiates between added and updated\\n      // nodes when processing innerHTML, innerHTML on updated nodes suffers\\n      // from worse whitespace behavior. Re-adding a node like this triggers\\n      // the initial and more favorable whitespace behavior.\\n      // TODO: What to do on a detached node?\\n      if (node.parentNode) {\\n        node.parentNode.replaceChild(node, node);\\n      }\\n\\n      // We also implement a workaround for non-visible tags disappearing into\\n      // thin air on IE8, this only happens if there is no visible text\\n      // in-front of the non-visible tags. Piggyback on the whitespace fix\\n      // and simply check if any non-visible tags appear in the source.\\n      if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) {\\n        // Recover leading whitespace by temporarily prepending any character.\\n        // \\\\uFEFF has the potential advantage of being zero-width/invisible.\\n        // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode\\n        // in hopes that this is preserved even if \\\"\\\\uFEFF\\\" is transformed to\\n        // the actual Unicode character (by Babel, for example).\\n        // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216\\n        node.innerHTML = String.fromCharCode(0xFEFF) + html;\\n\\n        // deleteData leaves an empty `TextNode` which offsets the index of all\\n        // children. Definitely want to avoid this.\\n        var textNode = node.firstChild;\\n        if (textNode.data.length === 1) {\\n          node.removeChild(textNode);\\n        } else {\\n          textNode.deleteData(0, 1);\\n        }\\n      } else {\\n        node.innerHTML = html;\\n      }\\n    };\\n  }\\n  testElement = null;\\n}\\n\\nmodule.exports = setInnerHTML;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/setInnerHTML.js\\n// module id = 161\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/setInnerHTML.js?\");\n\n/***/ },\n/* 162 */\n/*!***************************************************************!*\\\n  !*** ./~/react-dom/lib/createMicrosoftUnsafeLocalFunction.js ***!\n  \\***************************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n/* globals MSApp */\\n\\n'use strict';\\n\\n/**\\n * Create a function which has 'unsafe' privileges (required by windows8 apps)\\n */\\n\\nvar createMicrosoftUnsafeLocalFunction = function (func) {\\n  if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\\n    return function (arg0, arg1, arg2, arg3) {\\n      MSApp.execUnsafeLocalFunction(function () {\\n        return func(arg0, arg1, arg2, arg3);\\n      });\\n    };\\n  } else {\\n    return func;\\n  }\\n};\\n\\nmodule.exports = createMicrosoftUnsafeLocalFunction;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/createMicrosoftUnsafeLocalFunction.js\\n// module id = 162\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/createMicrosoftUnsafeLocalFunction.js?\");\n\n/***/ },\n/* 163 */\n/*!*******************************************!*\\\n  !*** ./~/react-dom/lib/setTextContent.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ 126);\\nvar escapeTextContentForBrowser = __webpack_require__(/*! ./escapeTextContentForBrowser */ 164);\\nvar setInnerHTML = __webpack_require__(/*! ./setInnerHTML */ 161);\\n\\n/**\\n * Set the textContent property of a node, ensuring that whitespace is preserved\\n * even in IE8. innerText is a poor substitute for textContent and, among many\\n * issues, inserts <br> instead of the literal newline chars. innerHTML behaves\\n * as it should.\\n *\\n * @param {DOMElement} node\\n * @param {string} text\\n * @internal\\n */\\nvar setTextContent = function (node, text) {\\n  if (text) {\\n    var firstChild = node.firstChild;\\n\\n    if (firstChild && firstChild === node.lastChild && firstChild.nodeType === 3) {\\n      firstChild.nodeValue = text;\\n      return;\\n    }\\n  }\\n  node.textContent = text;\\n};\\n\\nif (ExecutionEnvironment.canUseDOM) {\\n  if (!('textContent' in document.documentElement)) {\\n    setTextContent = function (node, text) {\\n      if (node.nodeType === 3) {\\n        node.nodeValue = text;\\n        return;\\n      }\\n      setInnerHTML(node, escapeTextContentForBrowser(text));\\n    };\\n  }\\n}\\n\\nmodule.exports = setTextContent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/setTextContent.js\\n// module id = 163\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/setTextContent.js?\");\n\n/***/ },\n/* 164 */\n/*!********************************************************!*\\\n  !*** ./~/react-dom/lib/escapeTextContentForBrowser.js ***!\n  \\********************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2016-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * Based on the escape-html library, which is used under the MIT License below:\\n *\\n * Copyright (c) 2012-2013 TJ Holowaychuk\\n * Copyright (c) 2015 Andreas Lubbe\\n * Copyright (c) 2015 Tiancheng \\\"Timothy\\\" Gu\\n *\\n * Permission is hereby granted, free of charge, to any person obtaining\\n * a copy of this software and associated documentation files (the\\n * 'Software'), to deal in the Software without restriction, including\\n * without limitation the rights to use, copy, modify, merge, publish,\\n * distribute, sublicense, and/or sell copies of the Software, and to\\n * permit persons to whom the Software is furnished to do so, subject to\\n * the following conditions:\\n *\\n * The above copyright notice and this permission notice shall be\\n * included in all copies or substantial portions of the Software.\\n *\\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n *\\n */\\n\\n'use strict';\\n\\n// code copied and modified from escape-html\\n/**\\n * Module variables.\\n * @private\\n */\\n\\nvar matchHtmlRegExp = /[\\\"'&<>]/;\\n\\n/**\\n * Escape special characters in the given string of html.\\n *\\n * @param  {string} string The string to escape for inserting into HTML\\n * @return {string}\\n * @public\\n */\\n\\nfunction escapeHtml(string) {\\n  var str = '' + string;\\n  var match = matchHtmlRegExp.exec(str);\\n\\n  if (!match) {\\n    return str;\\n  }\\n\\n  var escape;\\n  var html = '';\\n  var index = 0;\\n  var lastIndex = 0;\\n\\n  for (index = match.index; index < str.length; index++) {\\n    switch (str.charCodeAt(index)) {\\n      case 34:\\n        // \\\"\\n        escape = '&quot;';\\n        break;\\n      case 38:\\n        // &\\n        escape = '&amp;';\\n        break;\\n      case 39:\\n        // '\\n        escape = '&#x27;'; // modified from escape-html; used to be '&#39'\\n        break;\\n      case 60:\\n        // <\\n        escape = '&lt;';\\n        break;\\n      case 62:\\n        // >\\n        escape = '&gt;';\\n        break;\\n      default:\\n        continue;\\n    }\\n\\n    if (lastIndex !== index) {\\n      html += str.substring(lastIndex, index);\\n    }\\n\\n    lastIndex = index + 1;\\n    html += escape;\\n  }\\n\\n  return lastIndex !== index ? html + str.substring(lastIndex, index) : html;\\n}\\n// end code copied and modified from escape-html\\n\\n\\n/**\\n * Escapes text to prevent scripting attacks.\\n *\\n * @param {*} text Text value to escape.\\n * @return {string} An escaped string.\\n */\\nfunction escapeTextContentForBrowser(text) {\\n  if (typeof text === 'boolean' || typeof text === 'number') {\\n    // this shortcircuit helps perf for types that we know will never have\\n    // special characters, especially given that this function is used often\\n    // for numeric dom ids.\\n    return '' + text;\\n  }\\n  return escapeHtml(text);\\n}\\n\\nmodule.exports = escapeTextContentForBrowser;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/escapeTextContentForBrowser.js\\n// module id = 164\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/escapeTextContentForBrowser.js?\");\n\n/***/ },\n/* 165 */\n/*!***********************************!*\\\n  !*** ./~/react-dom/lib/Danger.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar DOMLazyTree = __webpack_require__(/*! ./DOMLazyTree */ 159);\\nvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ 126);\\n\\nvar createNodesFromMarkup = __webpack_require__(/*! fbjs/lib/createNodesFromMarkup */ 166);\\nvar emptyFunction = __webpack_require__(/*! fbjs/lib/emptyFunction */ 12);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\nvar Danger = {\\n\\n  /**\\n   * Replaces a node with a string of markup at its current position within its\\n   * parent. The markup must render into a single root node.\\n   *\\n   * @param {DOMElement} oldChild Child node to replace.\\n   * @param {string} markup Markup to render in place of the child node.\\n   * @internal\\n   */\\n  dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) {\\n    !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a worker thread. Make sure `window` and `document` are available globally before requiring React when unit testing or use ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('56') : void 0;\\n    !markup ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : _prodInvariant('57') : void 0;\\n    !(oldChild.nodeName !== 'HTML') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the <html> node. This is because browser quirks make this unreliable and/or slow. If you want to render to the root you must use server rendering. See ReactDOMServer.renderToString().') : _prodInvariant('58') : void 0;\\n\\n    if (typeof markup === 'string') {\\n      var newChild = createNodesFromMarkup(markup, emptyFunction)[0];\\n      oldChild.parentNode.replaceChild(newChild, oldChild);\\n    } else {\\n      DOMLazyTree.replaceChildWithTree(oldChild, markup);\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = Danger;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/Danger.js\\n// module id = 165\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/Danger.js?\");\n\n/***/ },\n/* 166 */\n/*!*********************************************!*\\\n  !*** ./~/fbjs/lib/createNodesFromMarkup.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\n/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @typechecks\\n */\\n\\n/*eslint-disable fb-www/unsafe-html*/\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 126);\\n\\nvar createArrayFromMixed = __webpack_require__(/*! ./createArrayFromMixed */ 167);\\nvar getMarkupWrap = __webpack_require__(/*! ./getMarkupWrap */ 168);\\nvar invariant = __webpack_require__(/*! ./invariant */ 8);\\n\\n/**\\n * Dummy container used to render all markup.\\n */\\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\\n\\n/**\\n * Pattern used by `getNodeName`.\\n */\\nvar nodeNamePattern = /^\\\\s*<(\\\\w+)/;\\n\\n/**\\n * Extracts the `nodeName` of the first element in a string of markup.\\n *\\n * @param {string} markup String of markup.\\n * @return {?string} Node name of the supplied markup.\\n */\\nfunction getNodeName(markup) {\\n  var nodeNameMatch = markup.match(nodeNamePattern);\\n  return nodeNameMatch && nodeNameMatch[1].toLowerCase();\\n}\\n\\n/**\\n * Creates an array containing the nodes rendered from the supplied markup. The\\n * optionally supplied `handleScript` function will be invoked once for each\\n * <script> element that is rendered. If no `handleScript` function is supplied,\\n * an exception is thrown if any <script> elements are rendered.\\n *\\n * @param {string} markup A string of valid HTML markup.\\n * @param {?function} handleScript Invoked once for each rendered <script>.\\n * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.\\n */\\nfunction createNodesFromMarkup(markup, handleScript) {\\n  var node = dummyNode;\\n  !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup dummy not initialized') : invariant(false) : void 0;\\n  var nodeName = getNodeName(markup);\\n\\n  var wrap = nodeName && getMarkupWrap(nodeName);\\n  if (wrap) {\\n    node.innerHTML = wrap[1] + markup + wrap[2];\\n\\n    var wrapDepth = wrap[0];\\n    while (wrapDepth--) {\\n      node = node.lastChild;\\n    }\\n  } else {\\n    node.innerHTML = markup;\\n  }\\n\\n  var scripts = node.getElementsByTagName('script');\\n  if (scripts.length) {\\n    !handleScript ? process.env.NODE_ENV !== 'production' ? invariant(false, 'createNodesFromMarkup(...): Unexpected <script> element rendered.') : invariant(false) : void 0;\\n    createArrayFromMixed(scripts).forEach(handleScript);\\n  }\\n\\n  var nodes = Array.from(node.childNodes);\\n  while (node.lastChild) {\\n    node.removeChild(node.lastChild);\\n  }\\n  return nodes;\\n}\\n\\nmodule.exports = createNodesFromMarkup;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/createNodesFromMarkup.js\\n// module id = 166\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/createNodesFromMarkup.js?\");\n\n/***/ },\n/* 167 */\n/*!********************************************!*\\\n  !*** ./~/fbjs/lib/createArrayFromMixed.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\n/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @typechecks\\n */\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 8);\\n\\n/**\\n * Convert array-like objects to arrays.\\n *\\n * This API assumes the caller knows the contents of the data type. For less\\n * well defined inputs use createArrayFromMixed.\\n *\\n * @param {object|function|filelist} obj\\n * @return {array}\\n */\\nfunction toArray(obj) {\\n  var length = obj.length;\\n\\n  // Some browsers builtin objects can report typeof 'function' (e.g. NodeList\\n  // in old versions of Safari).\\n  !(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : void 0;\\n\\n  !(typeof length === 'number') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : void 0;\\n\\n  !(length === 0 || length - 1 in obj) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : void 0;\\n\\n  !(typeof obj.callee !== 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'toArray: Object can\\\\'t be `arguments`. Use rest params ' + '(function(...args) {}) or Array.from() instead.') : invariant(false) : void 0;\\n\\n  // Old IE doesn't give collections access to hasOwnProperty. Assume inputs\\n  // without method will throw during the slice call and skip straight to the\\n  // fallback.\\n  if (obj.hasOwnProperty) {\\n    try {\\n      return Array.prototype.slice.call(obj);\\n    } catch (e) {\\n      // IE < 9 does not support Array#slice on collections objects\\n    }\\n  }\\n\\n  // Fall back to copying key by key. This assumes all keys have a value,\\n  // so will not preserve sparsely populated inputs.\\n  var ret = Array(length);\\n  for (var ii = 0; ii < length; ii++) {\\n    ret[ii] = obj[ii];\\n  }\\n  return ret;\\n}\\n\\n/**\\n * Perform a heuristic test to determine if an object is \\\"array-like\\\".\\n *\\n *   A monk asked Joshu, a Zen master, \\\"Has a dog Buddha nature?\\\"\\n *   Joshu replied: \\\"Mu.\\\"\\n *\\n * This function determines if its argument has \\\"array nature\\\": it returns\\n * true if the argument is an actual array, an `arguments' object, or an\\n * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).\\n *\\n * It will return false for other array-like objects like Filelist.\\n *\\n * @param {*} obj\\n * @return {boolean}\\n */\\nfunction hasArrayNature(obj) {\\n  return (\\n    // not null/false\\n    !!obj && (\\n    // arrays are objects, NodeLists are functions in Safari\\n    typeof obj == 'object' || typeof obj == 'function') &&\\n    // quacks like an array\\n    'length' in obj &&\\n    // not window\\n    !('setInterval' in obj) &&\\n    // no DOM node should be considered an array-like\\n    // a 'select' element has 'length' and 'item' properties on IE8\\n    typeof obj.nodeType != 'number' && (\\n    // a real array\\n    Array.isArray(obj) ||\\n    // arguments\\n    'callee' in obj ||\\n    // HTMLCollection/NodeList\\n    'item' in obj)\\n  );\\n}\\n\\n/**\\n * Ensure that the argument is an array by wrapping it in an array if it is not.\\n * Creates a copy of the argument if it is already an array.\\n *\\n * This is mostly useful idiomatically:\\n *\\n *   var createArrayFromMixed = require('createArrayFromMixed');\\n *\\n *   function takesOneOrMoreThings(things) {\\n *     things = createArrayFromMixed(things);\\n *     ...\\n *   }\\n *\\n * This allows you to treat `things' as an array, but accept scalars in the API.\\n *\\n * If you need to convert an array-like object, like `arguments`, into an array\\n * use toArray instead.\\n *\\n * @param {*} obj\\n * @return {array}\\n */\\nfunction createArrayFromMixed(obj) {\\n  if (!hasArrayNature(obj)) {\\n    return [obj];\\n  } else if (Array.isArray(obj)) {\\n    return obj.slice();\\n  } else {\\n    return toArray(obj);\\n  }\\n}\\n\\nmodule.exports = createArrayFromMixed;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/createArrayFromMixed.js\\n// module id = 167\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/createArrayFromMixed.js?\");\n\n/***/ },\n/* 168 */\n/*!*************************************!*\\\n  !*** ./~/fbjs/lib/getMarkupWrap.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\n/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n/*eslint-disable fb-www/unsafe-html */\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 126);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 8);\\n\\n/**\\n * Dummy container used to detect which wraps are necessary.\\n */\\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\\n\\n/**\\n * Some browsers cannot use `innerHTML` to render certain elements standalone,\\n * so we wrap them, render the wrapped nodes, then extract the desired node.\\n *\\n * In IE8, certain elements cannot render alone, so wrap all elements ('*').\\n */\\n\\nvar shouldWrap = {};\\n\\nvar selectWrap = [1, '<select multiple=\\\"true\\\">', '</select>'];\\nvar tableWrap = [1, '<table>', '</table>'];\\nvar trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];\\n\\nvar svgWrap = [1, '<svg xmlns=\\\"http://www.w3.org/2000/svg\\\">', '</svg>'];\\n\\nvar markupWrap = {\\n  '*': [1, '?<div>', '</div>'],\\n\\n  'area': [1, '<map>', '</map>'],\\n  'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],\\n  'legend': [1, '<fieldset>', '</fieldset>'],\\n  'param': [1, '<object>', '</object>'],\\n  'tr': [2, '<table><tbody>', '</tbody></table>'],\\n\\n  'optgroup': selectWrap,\\n  'option': selectWrap,\\n\\n  'caption': tableWrap,\\n  'colgroup': tableWrap,\\n  'tbody': tableWrap,\\n  'tfoot': tableWrap,\\n  'thead': tableWrap,\\n\\n  'td': trWrap,\\n  'th': trWrap\\n};\\n\\n// Initialize the SVG elements since we know they'll always need to be wrapped\\n// consistently. If they are created inside a <div> they will be initialized in\\n// the wrong namespace (and will not display).\\nvar svgElements = ['circle', 'clipPath', 'defs', 'ellipse', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'text', 'tspan'];\\nsvgElements.forEach(function (nodeName) {\\n  markupWrap[nodeName] = svgWrap;\\n  shouldWrap[nodeName] = true;\\n});\\n\\n/**\\n * Gets the markup wrap configuration for the supplied `nodeName`.\\n *\\n * NOTE: This lazily detects which wraps are necessary for the current browser.\\n *\\n * @param {string} nodeName Lowercase `nodeName`.\\n * @return {?array} Markup wrap configuration, if applicable.\\n */\\nfunction getMarkupWrap(nodeName) {\\n  !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Markup wrapping node not initialized') : invariant(false) : void 0;\\n  if (!markupWrap.hasOwnProperty(nodeName)) {\\n    nodeName = '*';\\n  }\\n  if (!shouldWrap.hasOwnProperty(nodeName)) {\\n    if (nodeName === '*') {\\n      dummyNode.innerHTML = '<link />';\\n    } else {\\n      dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';\\n    }\\n    shouldWrap[nodeName] = !dummyNode.firstChild;\\n  }\\n  return shouldWrap[nodeName] ? markupWrap[nodeName] : null;\\n}\\n\\nmodule.exports = getMarkupWrap;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/getMarkupWrap.js\\n// module id = 168\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/getMarkupWrap.js?\");\n\n/***/ },\n/* 169 */\n/*!*************************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOMIDOperations.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar DOMChildrenOperations = __webpack_require__(/*! ./DOMChildrenOperations */ 158);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\n\\n/**\\n * Operations used to process updates to DOM nodes.\\n */\\nvar ReactDOMIDOperations = {\\n\\n  /**\\n   * Updates a component's children by processing a series of updates.\\n   *\\n   * @param {array<object>} updates List of update configurations.\\n   * @internal\\n   */\\n  dangerouslyProcessChildrenUpdates: function (parentInst, updates) {\\n    var node = ReactDOMComponentTree.getNodeFromInstance(parentInst);\\n    DOMChildrenOperations.processUpdates(node, updates);\\n  }\\n};\\n\\nmodule.exports = ReactDOMIDOperations;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOMIDOperations.js\\n// module id = 169\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOMIDOperations.js?\");\n\n/***/ },\n/* 170 */\n/*!**********************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOMComponent.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n/* global hasOwnProperty:true */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113),\\n    _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar AutoFocusUtils = __webpack_require__(/*! ./AutoFocusUtils */ 171);\\nvar CSSPropertyOperations = __webpack_require__(/*! ./CSSPropertyOperations */ 173);\\nvar DOMLazyTree = __webpack_require__(/*! ./DOMLazyTree */ 159);\\nvar DOMNamespaces = __webpack_require__(/*! ./DOMNamespaces */ 160);\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 114);\\nvar DOMPropertyOperations = __webpack_require__(/*! ./DOMPropertyOperations */ 181);\\nvar EventPluginHub = __webpack_require__(/*! ./EventPluginHub */ 120);\\nvar EventPluginRegistry = __webpack_require__(/*! ./EventPluginRegistry */ 121);\\nvar ReactBrowserEventEmitter = __webpack_require__(/*! ./ReactBrowserEventEmitter */ 183);\\nvar ReactDOMComponentFlags = __webpack_require__(/*! ./ReactDOMComponentFlags */ 115);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\nvar ReactDOMInput = __webpack_require__(/*! ./ReactDOMInput */ 186);\\nvar ReactDOMOption = __webpack_require__(/*! ./ReactDOMOption */ 189);\\nvar ReactDOMSelect = __webpack_require__(/*! ./ReactDOMSelect */ 190);\\nvar ReactDOMTextarea = __webpack_require__(/*! ./ReactDOMTextarea */ 191);\\nvar ReactInstrumentation = __webpack_require__(/*! ./ReactInstrumentation */ 140);\\nvar ReactMultiChild = __webpack_require__(/*! ./ReactMultiChild */ 192);\\nvar ReactServerRenderingTransaction = __webpack_require__(/*! ./ReactServerRenderingTransaction */ 211);\\n\\nvar emptyFunction = __webpack_require__(/*! fbjs/lib/emptyFunction */ 12);\\nvar escapeTextContentForBrowser = __webpack_require__(/*! ./escapeTextContentForBrowser */ 164);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar isEventSupported = __webpack_require__(/*! ./isEventSupported */ 148);\\nvar shallowEqual = __webpack_require__(/*! fbjs/lib/shallowEqual */ 201);\\nvar validateDOMNesting = __webpack_require__(/*! ./validateDOMNesting */ 214);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar Flags = ReactDOMComponentFlags;\\nvar deleteListener = EventPluginHub.deleteListener;\\nvar getNode = ReactDOMComponentTree.getNodeFromInstance;\\nvar listenTo = ReactBrowserEventEmitter.listenTo;\\nvar registrationNameModules = EventPluginRegistry.registrationNameModules;\\n\\n// For quickly matching children type, to test if can be treated as content.\\nvar CONTENT_TYPES = { 'string': true, 'number': true };\\n\\nvar STYLE = 'style';\\nvar HTML = '__html';\\nvar RESERVED_PROPS = {\\n  children: null,\\n  dangerouslySetInnerHTML: null,\\n  suppressContentEditableWarning: null\\n};\\n\\n// Node type for document fragments (Node.DOCUMENT_FRAGMENT_NODE).\\nvar DOC_FRAGMENT_TYPE = 11;\\n\\nfunction getDeclarationErrorAddendum(internalInstance) {\\n  if (internalInstance) {\\n    var owner = internalInstance._currentElement._owner || null;\\n    if (owner) {\\n      var name = owner.getName();\\n      if (name) {\\n        return ' This DOM node was rendered by `' + name + '`.';\\n      }\\n    }\\n  }\\n  return '';\\n}\\n\\nfunction friendlyStringify(obj) {\\n  if (typeof obj === 'object') {\\n    if (Array.isArray(obj)) {\\n      return '[' + obj.map(friendlyStringify).join(', ') + ']';\\n    } else {\\n      var pairs = [];\\n      for (var key in obj) {\\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\\n          var keyEscaped = /^[a-z$_][\\\\w$_]*$/i.test(key) ? key : JSON.stringify(key);\\n          pairs.push(keyEscaped + ': ' + friendlyStringify(obj[key]));\\n        }\\n      }\\n      return '{' + pairs.join(', ') + '}';\\n    }\\n  } else if (typeof obj === 'string') {\\n    return JSON.stringify(obj);\\n  } else if (typeof obj === 'function') {\\n    return '[function object]';\\n  }\\n  // Differs from JSON.stringify in that undefined because undefined and that\\n  // inf and nan don't become null\\n  return String(obj);\\n}\\n\\nvar styleMutationWarning = {};\\n\\nfunction checkAndWarnForMutatedStyle(style1, style2, component) {\\n  if (style1 == null || style2 == null) {\\n    return;\\n  }\\n  if (shallowEqual(style1, style2)) {\\n    return;\\n  }\\n\\n  var componentName = component._tag;\\n  var owner = component._currentElement._owner;\\n  var ownerName;\\n  if (owner) {\\n    ownerName = owner.getName();\\n  }\\n\\n  var hash = ownerName + '|' + componentName;\\n\\n  if (styleMutationWarning.hasOwnProperty(hash)) {\\n    return;\\n  }\\n\\n  styleMutationWarning[hash] = true;\\n\\n  process.env.NODE_ENV !== 'production' ? warning(false, '`%s` was passed a style object that has previously been mutated. ' + 'Mutating `style` is deprecated. Consider cloning it beforehand. Check ' + 'the `render` %s. Previous style: %s. Mutated style: %s.', componentName, owner ? 'of `' + ownerName + '`' : 'using <' + componentName + '>', friendlyStringify(style1), friendlyStringify(style2)) : void 0;\\n}\\n\\n/**\\n * @param {object} component\\n * @param {?object} props\\n */\\nfunction assertValidProps(component, props) {\\n  if (!props) {\\n    return;\\n  }\\n  // Note the use of `==` which checks for null or undefined.\\n  if (voidElementTags[component._tag]) {\\n    !(props.children == null && props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : _prodInvariant('137', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : void 0;\\n  }\\n  if (props.dangerouslySetInnerHTML != null) {\\n    !(props.children == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : _prodInvariant('60') : void 0;\\n    !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information.') : _prodInvariant('61') : void 0;\\n  }\\n  if (process.env.NODE_ENV !== 'production') {\\n    process.env.NODE_ENV !== 'production' ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : void 0;\\n    process.env.NODE_ENV !== 'production' ? warning(props.suppressContentEditableWarning || !props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : void 0;\\n    process.env.NODE_ENV !== 'production' ? warning(props.onFocusIn == null && props.onFocusOut == null, 'React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.') : void 0;\\n  }\\n  !(props.style == null || typeof props.style === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + \\\\'em\\\\'}} when using JSX.%s', getDeclarationErrorAddendum(component)) : _prodInvariant('62', getDeclarationErrorAddendum(component)) : void 0;\\n}\\n\\nfunction enqueuePutListener(inst, registrationName, listener, transaction) {\\n  if (transaction instanceof ReactServerRenderingTransaction) {\\n    return;\\n  }\\n  if (process.env.NODE_ENV !== 'production') {\\n    // IE8 has no API for event capturing and the `onScroll` event doesn't\\n    // bubble.\\n    process.env.NODE_ENV !== 'production' ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\\\\'t support the `onScroll` event') : void 0;\\n  }\\n  var containerInfo = inst._hostContainerInfo;\\n  var isDocumentFragment = containerInfo._node && containerInfo._node.nodeType === DOC_FRAGMENT_TYPE;\\n  var doc = isDocumentFragment ? containerInfo._node : containerInfo._ownerDocument;\\n  listenTo(registrationName, doc);\\n  transaction.getReactMountReady().enqueue(putListener, {\\n    inst: inst,\\n    registrationName: registrationName,\\n    listener: listener\\n  });\\n}\\n\\nfunction putListener() {\\n  var listenerToPut = this;\\n  EventPluginHub.putListener(listenerToPut.inst, listenerToPut.registrationName, listenerToPut.listener);\\n}\\n\\nfunction inputPostMount() {\\n  var inst = this;\\n  ReactDOMInput.postMountWrapper(inst);\\n}\\n\\nfunction textareaPostMount() {\\n  var inst = this;\\n  ReactDOMTextarea.postMountWrapper(inst);\\n}\\n\\nfunction optionPostMount() {\\n  var inst = this;\\n  ReactDOMOption.postMountWrapper(inst);\\n}\\n\\nvar setAndValidateContentChildDev = emptyFunction;\\nif (process.env.NODE_ENV !== 'production') {\\n  setAndValidateContentChildDev = function (content) {\\n    var hasExistingContent = this._contentDebugID != null;\\n    var debugID = this._debugID;\\n    // This ID represents the inlined child that has no backing instance:\\n    var contentDebugID = -debugID;\\n\\n    if (content == null) {\\n      if (hasExistingContent) {\\n        ReactInstrumentation.debugTool.onUnmountComponent(this._contentDebugID);\\n      }\\n      this._contentDebugID = null;\\n      return;\\n    }\\n\\n    validateDOMNesting(null, String(content), this, this._ancestorInfo);\\n    this._contentDebugID = contentDebugID;\\n    if (hasExistingContent) {\\n      ReactInstrumentation.debugTool.onBeforeUpdateComponent(contentDebugID, content);\\n      ReactInstrumentation.debugTool.onUpdateComponent(contentDebugID);\\n    } else {\\n      ReactInstrumentation.debugTool.onBeforeMountComponent(contentDebugID, content, debugID);\\n      ReactInstrumentation.debugTool.onMountComponent(contentDebugID);\\n      ReactInstrumentation.debugTool.onSetChildren(debugID, [contentDebugID]);\\n    }\\n  };\\n}\\n\\n// There are so many media events, it makes sense to just\\n// maintain a list rather than create a `trapBubbledEvent` for each\\nvar mediaEvents = {\\n  topAbort: 'abort',\\n  topCanPlay: 'canplay',\\n  topCanPlayThrough: 'canplaythrough',\\n  topDurationChange: 'durationchange',\\n  topEmptied: 'emptied',\\n  topEncrypted: 'encrypted',\\n  topEnded: 'ended',\\n  topError: 'error',\\n  topLoadedData: 'loadeddata',\\n  topLoadedMetadata: 'loadedmetadata',\\n  topLoadStart: 'loadstart',\\n  topPause: 'pause',\\n  topPlay: 'play',\\n  topPlaying: 'playing',\\n  topProgress: 'progress',\\n  topRateChange: 'ratechange',\\n  topSeeked: 'seeked',\\n  topSeeking: 'seeking',\\n  topStalled: 'stalled',\\n  topSuspend: 'suspend',\\n  topTimeUpdate: 'timeupdate',\\n  topVolumeChange: 'volumechange',\\n  topWaiting: 'waiting'\\n};\\n\\nfunction trapBubbledEventsLocal() {\\n  var inst = this;\\n  // If a component renders to null or if another component fatals and causes\\n  // the state of the tree to be corrupted, `node` here can be null.\\n  !inst._rootNodeID ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Must be mounted to trap events') : _prodInvariant('63') : void 0;\\n  var node = getNode(inst);\\n  !node ? process.env.NODE_ENV !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : _prodInvariant('64') : void 0;\\n\\n  switch (inst._tag) {\\n    case 'iframe':\\n    case 'object':\\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent('topLoad', 'load', node)];\\n      break;\\n    case 'video':\\n    case 'audio':\\n\\n      inst._wrapperState.listeners = [];\\n      // Create listener for each media event\\n      for (var event in mediaEvents) {\\n        if (mediaEvents.hasOwnProperty(event)) {\\n          inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(event, mediaEvents[event], node));\\n        }\\n      }\\n      break;\\n    case 'source':\\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent('topError', 'error', node)];\\n      break;\\n    case 'img':\\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent('topError', 'error', node), ReactBrowserEventEmitter.trapBubbledEvent('topLoad', 'load', node)];\\n      break;\\n    case 'form':\\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent('topReset', 'reset', node), ReactBrowserEventEmitter.trapBubbledEvent('topSubmit', 'submit', node)];\\n      break;\\n    case 'input':\\n    case 'select':\\n    case 'textarea':\\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent('topInvalid', 'invalid', node)];\\n      break;\\n  }\\n}\\n\\nfunction postUpdateSelectWrapper() {\\n  ReactDOMSelect.postUpdateWrapper(this);\\n}\\n\\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\\n// those special-case tags.\\n\\nvar omittedCloseTags = {\\n  'area': true,\\n  'base': true,\\n  'br': true,\\n  'col': true,\\n  'embed': true,\\n  'hr': true,\\n  'img': true,\\n  'input': true,\\n  'keygen': true,\\n  'link': true,\\n  'meta': true,\\n  'param': true,\\n  'source': true,\\n  'track': true,\\n  'wbr': true\\n};\\n\\nvar newlineEatingTags = {\\n  'listing': true,\\n  'pre': true,\\n  'textarea': true\\n};\\n\\n// For HTML, certain tags cannot have children. This has the same purpose as\\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\\n\\nvar voidElementTags = _assign({\\n  'menuitem': true\\n}, omittedCloseTags);\\n\\n// We accept any tag to be rendered but since this gets injected into arbitrary\\n// HTML, we want to make sure that it's a safe tag.\\n// http://www.w3.org/TR/REC-xml/#NT-Name\\n\\nvar VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\\\\.\\\\-\\\\d]*$/; // Simplified subset\\nvar validatedTagCache = {};\\nvar hasOwnProperty = {}.hasOwnProperty;\\n\\nfunction validateDangerousTag(tag) {\\n  if (!hasOwnProperty.call(validatedTagCache, tag)) {\\n    !VALID_TAG_REGEX.test(tag) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : _prodInvariant('65', tag) : void 0;\\n    validatedTagCache[tag] = true;\\n  }\\n}\\n\\nfunction isCustomComponent(tagName, props) {\\n  return tagName.indexOf('-') >= 0 || props.is != null;\\n}\\n\\nvar globalIdCounter = 1;\\n\\n/**\\n * Creates a new React class that is idempotent and capable of containing other\\n * React components. It accepts event listeners and DOM properties that are\\n * valid according to `DOMProperty`.\\n *\\n *  - Event listeners: `onClick`, `onMouseDown`, etc.\\n *  - DOM properties: `className`, `name`, `title`, etc.\\n *\\n * The `style` property functions differently from the DOM API. It accepts an\\n * object mapping of style properties to values.\\n *\\n * @constructor ReactDOMComponent\\n * @extends ReactMultiChild\\n */\\nfunction ReactDOMComponent(element) {\\n  var tag = element.type;\\n  validateDangerousTag(tag);\\n  this._currentElement = element;\\n  this._tag = tag.toLowerCase();\\n  this._namespaceURI = null;\\n  this._renderedChildren = null;\\n  this._previousStyle = null;\\n  this._previousStyleCopy = null;\\n  this._hostNode = null;\\n  this._hostParent = null;\\n  this._rootNodeID = 0;\\n  this._domID = 0;\\n  this._hostContainerInfo = null;\\n  this._wrapperState = null;\\n  this._topLevelWrapper = null;\\n  this._flags = 0;\\n  if (process.env.NODE_ENV !== 'production') {\\n    this._ancestorInfo = null;\\n    setAndValidateContentChildDev.call(this, null);\\n  }\\n}\\n\\nReactDOMComponent.displayName = 'ReactDOMComponent';\\n\\nReactDOMComponent.Mixin = {\\n\\n  /**\\n   * Generates root tag markup then recurses. This method has side effects and\\n   * is not idempotent.\\n   *\\n   * @internal\\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n   * @param {?ReactDOMComponent} the parent component instance\\n   * @param {?object} info about the host container\\n   * @param {object} context\\n   * @return {string} The computed markup.\\n   */\\n  mountComponent: function (transaction, hostParent, hostContainerInfo, context) {\\n    this._rootNodeID = globalIdCounter++;\\n    this._domID = hostContainerInfo._idCounter++;\\n    this._hostParent = hostParent;\\n    this._hostContainerInfo = hostContainerInfo;\\n\\n    var props = this._currentElement.props;\\n\\n    switch (this._tag) {\\n      case 'audio':\\n      case 'form':\\n      case 'iframe':\\n      case 'img':\\n      case 'link':\\n      case 'object':\\n      case 'source':\\n      case 'video':\\n        this._wrapperState = {\\n          listeners: null\\n        };\\n        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\\n        break;\\n      case 'input':\\n        ReactDOMInput.mountWrapper(this, props, hostParent);\\n        props = ReactDOMInput.getHostProps(this, props);\\n        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\\n        break;\\n      case 'option':\\n        ReactDOMOption.mountWrapper(this, props, hostParent);\\n        props = ReactDOMOption.getHostProps(this, props);\\n        break;\\n      case 'select':\\n        ReactDOMSelect.mountWrapper(this, props, hostParent);\\n        props = ReactDOMSelect.getHostProps(this, props);\\n        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\\n        break;\\n      case 'textarea':\\n        ReactDOMTextarea.mountWrapper(this, props, hostParent);\\n        props = ReactDOMTextarea.getHostProps(this, props);\\n        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\\n        break;\\n    }\\n\\n    assertValidProps(this, props);\\n\\n    // We create tags in the namespace of their parent container, except HTML\\n    // tags get no namespace.\\n    var namespaceURI;\\n    var parentTag;\\n    if (hostParent != null) {\\n      namespaceURI = hostParent._namespaceURI;\\n      parentTag = hostParent._tag;\\n    } else if (hostContainerInfo._tag) {\\n      namespaceURI = hostContainerInfo._namespaceURI;\\n      parentTag = hostContainerInfo._tag;\\n    }\\n    if (namespaceURI == null || namespaceURI === DOMNamespaces.svg && parentTag === 'foreignobject') {\\n      namespaceURI = DOMNamespaces.html;\\n    }\\n    if (namespaceURI === DOMNamespaces.html) {\\n      if (this._tag === 'svg') {\\n        namespaceURI = DOMNamespaces.svg;\\n      } else if (this._tag === 'math') {\\n        namespaceURI = DOMNamespaces.mathml;\\n      }\\n    }\\n    this._namespaceURI = namespaceURI;\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      var parentInfo;\\n      if (hostParent != null) {\\n        parentInfo = hostParent._ancestorInfo;\\n      } else if (hostContainerInfo._tag) {\\n        parentInfo = hostContainerInfo._ancestorInfo;\\n      }\\n      if (parentInfo) {\\n        // parentInfo should always be present except for the top-level\\n        // component when server rendering\\n        validateDOMNesting(this._tag, null, this, parentInfo);\\n      }\\n      this._ancestorInfo = validateDOMNesting.updatedAncestorInfo(parentInfo, this._tag, this);\\n    }\\n\\n    var mountImage;\\n    if (transaction.useCreateElement) {\\n      var ownerDocument = hostContainerInfo._ownerDocument;\\n      var el;\\n      if (namespaceURI === DOMNamespaces.html) {\\n        if (this._tag === 'script') {\\n          // Create the script via .innerHTML so its \\\"parser-inserted\\\" flag is\\n          // set to true and it does not execute\\n          var div = ownerDocument.createElement('div');\\n          var type = this._currentElement.type;\\n          div.innerHTML = '<' + type + '></' + type + '>';\\n          el = div.removeChild(div.firstChild);\\n        } else if (props.is) {\\n          el = ownerDocument.createElement(this._currentElement.type, props.is);\\n        } else {\\n          // Separate else branch instead of using `props.is || undefined` above becuase of a Firefox bug.\\n          // See discussion in https://github.com/facebook/react/pull/6896\\n          // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240\\n          el = ownerDocument.createElement(this._currentElement.type);\\n        }\\n      } else {\\n        el = ownerDocument.createElementNS(namespaceURI, this._currentElement.type);\\n      }\\n      ReactDOMComponentTree.precacheNode(this, el);\\n      this._flags |= Flags.hasCachedChildNodes;\\n      if (!this._hostParent) {\\n        DOMPropertyOperations.setAttributeForRoot(el);\\n      }\\n      this._updateDOMProperties(null, props, transaction);\\n      var lazyTree = DOMLazyTree(el);\\n      this._createInitialChildren(transaction, props, context, lazyTree);\\n      mountImage = lazyTree;\\n    } else {\\n      var tagOpen = this._createOpenTagMarkupAndPutListeners(transaction, props);\\n      var tagContent = this._createContentMarkup(transaction, props, context);\\n      if (!tagContent && omittedCloseTags[this._tag]) {\\n        mountImage = tagOpen + '/>';\\n      } else {\\n        mountImage = tagOpen + '>' + tagContent + '</' + this._currentElement.type + '>';\\n      }\\n    }\\n\\n    switch (this._tag) {\\n      case 'input':\\n        transaction.getReactMountReady().enqueue(inputPostMount, this);\\n        if (props.autoFocus) {\\n          transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);\\n        }\\n        break;\\n      case 'textarea':\\n        transaction.getReactMountReady().enqueue(textareaPostMount, this);\\n        if (props.autoFocus) {\\n          transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);\\n        }\\n        break;\\n      case 'select':\\n        if (props.autoFocus) {\\n          transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);\\n        }\\n        break;\\n      case 'button':\\n        if (props.autoFocus) {\\n          transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);\\n        }\\n        break;\\n      case 'option':\\n        transaction.getReactMountReady().enqueue(optionPostMount, this);\\n        break;\\n    }\\n\\n    return mountImage;\\n  },\\n\\n  /**\\n   * Creates markup for the open tag and all attributes.\\n   *\\n   * This method has side effects because events get registered.\\n   *\\n   * Iterating over object properties is faster than iterating over arrays.\\n   * @see http://jsperf.com/obj-vs-arr-iteration\\n   *\\n   * @private\\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n   * @param {object} props\\n   * @return {string} Markup of opening tag.\\n   */\\n  _createOpenTagMarkupAndPutListeners: function (transaction, props) {\\n    var ret = '<' + this._currentElement.type;\\n\\n    for (var propKey in props) {\\n      if (!props.hasOwnProperty(propKey)) {\\n        continue;\\n      }\\n      var propValue = props[propKey];\\n      if (propValue == null) {\\n        continue;\\n      }\\n      if (registrationNameModules.hasOwnProperty(propKey)) {\\n        if (propValue) {\\n          enqueuePutListener(this, propKey, propValue, transaction);\\n        }\\n      } else {\\n        if (propKey === STYLE) {\\n          if (propValue) {\\n            if (process.env.NODE_ENV !== 'production') {\\n              // See `_updateDOMProperties`. style block\\n              this._previousStyle = propValue;\\n            }\\n            propValue = this._previousStyleCopy = _assign({}, props.style);\\n          }\\n          propValue = CSSPropertyOperations.createMarkupForStyles(propValue, this);\\n        }\\n        var markup = null;\\n        if (this._tag != null && isCustomComponent(this._tag, props)) {\\n          if (!RESERVED_PROPS.hasOwnProperty(propKey)) {\\n            markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue);\\n          }\\n        } else {\\n          markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);\\n        }\\n        if (markup) {\\n          ret += ' ' + markup;\\n        }\\n      }\\n    }\\n\\n    // For static pages, no need to put React ID and checksum. Saves lots of\\n    // bytes.\\n    if (transaction.renderToStaticMarkup) {\\n      return ret;\\n    }\\n\\n    if (!this._hostParent) {\\n      ret += ' ' + DOMPropertyOperations.createMarkupForRoot();\\n    }\\n    ret += ' ' + DOMPropertyOperations.createMarkupForID(this._domID);\\n    return ret;\\n  },\\n\\n  /**\\n   * Creates markup for the content between the tags.\\n   *\\n   * @private\\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n   * @param {object} props\\n   * @param {object} context\\n   * @return {string} Content markup.\\n   */\\n  _createContentMarkup: function (transaction, props, context) {\\n    var ret = '';\\n\\n    // Intentional use of != to avoid catching zero/false.\\n    var innerHTML = props.dangerouslySetInnerHTML;\\n    if (innerHTML != null) {\\n      if (innerHTML.__html != null) {\\n        ret = innerHTML.__html;\\n      }\\n    } else {\\n      var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;\\n      var childrenToUse = contentToUse != null ? null : props.children;\\n      if (contentToUse != null) {\\n        // TODO: Validate that text is allowed as a child of this node\\n        ret = escapeTextContentForBrowser(contentToUse);\\n        if (process.env.NODE_ENV !== 'production') {\\n          setAndValidateContentChildDev.call(this, contentToUse);\\n        }\\n      } else if (childrenToUse != null) {\\n        var mountImages = this.mountChildren(childrenToUse, transaction, context);\\n        ret = mountImages.join('');\\n      }\\n    }\\n    if (newlineEatingTags[this._tag] && ret.charAt(0) === '\\\\n') {\\n      // text/html ignores the first character in these tags if it's a newline\\n      // Prefer to break application/xml over text/html (for now) by adding\\n      // a newline specifically to get eaten by the parser. (Alternately for\\n      // textareas, replacing \\\"^\\\\n\\\" with \\\"\\\\r\\\\n\\\" doesn't get eaten, and the first\\n      // \\\\r is normalized out by HTMLTextAreaElement#value.)\\n      // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>\\n      // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>\\n      // See: <http://www.w3.org/TR/html5/syntax.html#newlines>\\n      // See: Parsing of \\\"textarea\\\" \\\"listing\\\" and \\\"pre\\\" elements\\n      //  from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>\\n      return '\\\\n' + ret;\\n    } else {\\n      return ret;\\n    }\\n  },\\n\\n  _createInitialChildren: function (transaction, props, context, lazyTree) {\\n    // Intentional use of != to avoid catching zero/false.\\n    var innerHTML = props.dangerouslySetInnerHTML;\\n    if (innerHTML != null) {\\n      if (innerHTML.__html != null) {\\n        DOMLazyTree.queueHTML(lazyTree, innerHTML.__html);\\n      }\\n    } else {\\n      var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;\\n      var childrenToUse = contentToUse != null ? null : props.children;\\n      if (contentToUse != null) {\\n        // TODO: Validate that text is allowed as a child of this node\\n        if (process.env.NODE_ENV !== 'production') {\\n          setAndValidateContentChildDev.call(this, contentToUse);\\n        }\\n        DOMLazyTree.queueText(lazyTree, contentToUse);\\n      } else if (childrenToUse != null) {\\n        var mountImages = this.mountChildren(childrenToUse, transaction, context);\\n        for (var i = 0; i < mountImages.length; i++) {\\n          DOMLazyTree.queueChild(lazyTree, mountImages[i]);\\n        }\\n      }\\n    }\\n  },\\n\\n  /**\\n   * Receives a next element and updates the component.\\n   *\\n   * @internal\\n   * @param {ReactElement} nextElement\\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n   * @param {object} context\\n   */\\n  receiveComponent: function (nextElement, transaction, context) {\\n    var prevElement = this._currentElement;\\n    this._currentElement = nextElement;\\n    this.updateComponent(transaction, prevElement, nextElement, context);\\n  },\\n\\n  /**\\n   * Updates a DOM component after it has already been allocated and\\n   * attached to the DOM. Reconciles the root DOM node, then recurses.\\n   *\\n   * @param {ReactReconcileTransaction} transaction\\n   * @param {ReactElement} prevElement\\n   * @param {ReactElement} nextElement\\n   * @internal\\n   * @overridable\\n   */\\n  updateComponent: function (transaction, prevElement, nextElement, context) {\\n    var lastProps = prevElement.props;\\n    var nextProps = this._currentElement.props;\\n\\n    switch (this._tag) {\\n      case 'input':\\n        lastProps = ReactDOMInput.getHostProps(this, lastProps);\\n        nextProps = ReactDOMInput.getHostProps(this, nextProps);\\n        break;\\n      case 'option':\\n        lastProps = ReactDOMOption.getHostProps(this, lastProps);\\n        nextProps = ReactDOMOption.getHostProps(this, nextProps);\\n        break;\\n      case 'select':\\n        lastProps = ReactDOMSelect.getHostProps(this, lastProps);\\n        nextProps = ReactDOMSelect.getHostProps(this, nextProps);\\n        break;\\n      case 'textarea':\\n        lastProps = ReactDOMTextarea.getHostProps(this, lastProps);\\n        nextProps = ReactDOMTextarea.getHostProps(this, nextProps);\\n        break;\\n    }\\n\\n    assertValidProps(this, nextProps);\\n    this._updateDOMProperties(lastProps, nextProps, transaction);\\n    this._updateDOMChildren(lastProps, nextProps, transaction, context);\\n\\n    switch (this._tag) {\\n      case 'input':\\n        // Update the wrapper around inputs *after* updating props. This has to\\n        // happen after `_updateDOMProperties`. Otherwise HTML5 input validations\\n        // raise warnings and prevent the new value from being assigned.\\n        ReactDOMInput.updateWrapper(this);\\n        break;\\n      case 'textarea':\\n        ReactDOMTextarea.updateWrapper(this);\\n        break;\\n      case 'select':\\n        // <select> value update needs to occur after <option> children\\n        // reconciliation\\n        transaction.getReactMountReady().enqueue(postUpdateSelectWrapper, this);\\n        break;\\n    }\\n  },\\n\\n  /**\\n   * Reconciles the properties by detecting differences in property values and\\n   * updating the DOM as necessary. This function is probably the single most\\n   * critical path for performance optimization.\\n   *\\n   * TODO: Benchmark whether checking for changed values in memory actually\\n   *       improves performance (especially statically positioned elements).\\n   * TODO: Benchmark the effects of putting this at the top since 99% of props\\n   *       do not change for a given reconciliation.\\n   * TODO: Benchmark areas that can be improved with caching.\\n   *\\n   * @private\\n   * @param {object} lastProps\\n   * @param {object} nextProps\\n   * @param {?DOMElement} node\\n   */\\n  _updateDOMProperties: function (lastProps, nextProps, transaction) {\\n    var propKey;\\n    var styleName;\\n    var styleUpdates;\\n    for (propKey in lastProps) {\\n      if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {\\n        continue;\\n      }\\n      if (propKey === STYLE) {\\n        var lastStyle = this._previousStyleCopy;\\n        for (styleName in lastStyle) {\\n          if (lastStyle.hasOwnProperty(styleName)) {\\n            styleUpdates = styleUpdates || {};\\n            styleUpdates[styleName] = '';\\n          }\\n        }\\n        this._previousStyleCopy = null;\\n      } else if (registrationNameModules.hasOwnProperty(propKey)) {\\n        if (lastProps[propKey]) {\\n          // Only call deleteListener if there was a listener previously or\\n          // else willDeleteListener gets called when there wasn't actually a\\n          // listener (e.g., onClick={null})\\n          deleteListener(this, propKey);\\n        }\\n      } else if (isCustomComponent(this._tag, lastProps)) {\\n        if (!RESERVED_PROPS.hasOwnProperty(propKey)) {\\n          DOMPropertyOperations.deleteValueForAttribute(getNode(this), propKey);\\n        }\\n      } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {\\n        DOMPropertyOperations.deleteValueForProperty(getNode(this), propKey);\\n      }\\n    }\\n    for (propKey in nextProps) {\\n      var nextProp = nextProps[propKey];\\n      var lastProp = propKey === STYLE ? this._previousStyleCopy : lastProps != null ? lastProps[propKey] : undefined;\\n      if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {\\n        continue;\\n      }\\n      if (propKey === STYLE) {\\n        if (nextProp) {\\n          if (process.env.NODE_ENV !== 'production') {\\n            checkAndWarnForMutatedStyle(this._previousStyleCopy, this._previousStyle, this);\\n            this._previousStyle = nextProp;\\n          }\\n          nextProp = this._previousStyleCopy = _assign({}, nextProp);\\n        } else {\\n          this._previousStyleCopy = null;\\n        }\\n        if (lastProp) {\\n          // Unset styles on `lastProp` but not on `nextProp`.\\n          for (styleName in lastProp) {\\n            if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {\\n              styleUpdates = styleUpdates || {};\\n              styleUpdates[styleName] = '';\\n            }\\n          }\\n          // Update styles that changed since `lastProp`.\\n          for (styleName in nextProp) {\\n            if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {\\n              styleUpdates = styleUpdates || {};\\n              styleUpdates[styleName] = nextProp[styleName];\\n            }\\n          }\\n        } else {\\n          // Relies on `updateStylesByID` not mutating `styleUpdates`.\\n          styleUpdates = nextProp;\\n        }\\n      } else if (registrationNameModules.hasOwnProperty(propKey)) {\\n        if (nextProp) {\\n          enqueuePutListener(this, propKey, nextProp, transaction);\\n        } else if (lastProp) {\\n          deleteListener(this, propKey);\\n        }\\n      } else if (isCustomComponent(this._tag, nextProps)) {\\n        if (!RESERVED_PROPS.hasOwnProperty(propKey)) {\\n          DOMPropertyOperations.setValueForAttribute(getNode(this), propKey, nextProp);\\n        }\\n      } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {\\n        var node = getNode(this);\\n        // If we're updating to null or undefined, we should remove the property\\n        // from the DOM node instead of inadvertently setting to a string. This\\n        // brings us in line with the same behavior we have on initial render.\\n        if (nextProp != null) {\\n          DOMPropertyOperations.setValueForProperty(node, propKey, nextProp);\\n        } else {\\n          DOMPropertyOperations.deleteValueForProperty(node, propKey);\\n        }\\n      }\\n    }\\n    if (styleUpdates) {\\n      CSSPropertyOperations.setValueForStyles(getNode(this), styleUpdates, this);\\n    }\\n  },\\n\\n  /**\\n   * Reconciles the children with the various properties that affect the\\n   * children content.\\n   *\\n   * @param {object} lastProps\\n   * @param {object} nextProps\\n   * @param {ReactReconcileTransaction} transaction\\n   * @param {object} context\\n   */\\n  _updateDOMChildren: function (lastProps, nextProps, transaction, context) {\\n    var lastContent = CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null;\\n    var nextContent = CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null;\\n\\n    var lastHtml = lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html;\\n    var nextHtml = nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html;\\n\\n    // Note the use of `!=` which checks for null or undefined.\\n    var lastChildren = lastContent != null ? null : lastProps.children;\\n    var nextChildren = nextContent != null ? null : nextProps.children;\\n\\n    // If we're switching from children to content/html or vice versa, remove\\n    // the old content\\n    var lastHasContentOrHtml = lastContent != null || lastHtml != null;\\n    var nextHasContentOrHtml = nextContent != null || nextHtml != null;\\n    if (lastChildren != null && nextChildren == null) {\\n      this.updateChildren(null, transaction, context);\\n    } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {\\n      this.updateTextContent('');\\n      if (process.env.NODE_ENV !== 'production') {\\n        ReactInstrumentation.debugTool.onSetChildren(this._debugID, []);\\n      }\\n    }\\n\\n    if (nextContent != null) {\\n      if (lastContent !== nextContent) {\\n        this.updateTextContent('' + nextContent);\\n        if (process.env.NODE_ENV !== 'production') {\\n          setAndValidateContentChildDev.call(this, nextContent);\\n        }\\n      }\\n    } else if (nextHtml != null) {\\n      if (lastHtml !== nextHtml) {\\n        this.updateMarkup('' + nextHtml);\\n      }\\n      if (process.env.NODE_ENV !== 'production') {\\n        ReactInstrumentation.debugTool.onSetChildren(this._debugID, []);\\n      }\\n    } else if (nextChildren != null) {\\n      if (process.env.NODE_ENV !== 'production') {\\n        setAndValidateContentChildDev.call(this, null);\\n      }\\n\\n      this.updateChildren(nextChildren, transaction, context);\\n    }\\n  },\\n\\n  getHostNode: function () {\\n    return getNode(this);\\n  },\\n\\n  /**\\n   * Destroys all event registrations for this instance. Does not remove from\\n   * the DOM. That must be done by the parent.\\n   *\\n   * @internal\\n   */\\n  unmountComponent: function (safely) {\\n    switch (this._tag) {\\n      case 'audio':\\n      case 'form':\\n      case 'iframe':\\n      case 'img':\\n      case 'link':\\n      case 'object':\\n      case 'source':\\n      case 'video':\\n        var listeners = this._wrapperState.listeners;\\n        if (listeners) {\\n          for (var i = 0; i < listeners.length; i++) {\\n            listeners[i].remove();\\n          }\\n        }\\n        break;\\n      case 'html':\\n      case 'head':\\n      case 'body':\\n        /**\\n         * Components like <html> <head> and <body> can't be removed or added\\n         * easily in a cross-browser way, however it's valuable to be able to\\n         * take advantage of React's reconciliation for styling and <title>\\n         * management. So we just document it and throw in dangerous cases.\\n         */\\n         true ? process.env.NODE_ENV !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is impossible to unmount some top-level components (eg <html>, <head>, and <body>) reliably and efficiently. To fix this, have a single top-level component that never unmounts render these elements.', this._tag) : _prodInvariant('66', this._tag) : void 0;\\n        break;\\n    }\\n\\n    this.unmountChildren(safely);\\n    ReactDOMComponentTree.uncacheNode(this);\\n    EventPluginHub.deleteAllListeners(this);\\n    this._rootNodeID = 0;\\n    this._domID = 0;\\n    this._wrapperState = null;\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      setAndValidateContentChildDev.call(this, null);\\n    }\\n  },\\n\\n  getPublicInstance: function () {\\n    return getNode(this);\\n  }\\n\\n};\\n\\n_assign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);\\n\\nmodule.exports = ReactDOMComponent;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOMComponent.js\\n// module id = 170\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOMComponent.js?\");\n\n/***/ },\n/* 171 */\n/*!*******************************************!*\\\n  !*** ./~/react-dom/lib/AutoFocusUtils.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\n\\nvar focusNode = __webpack_require__(/*! fbjs/lib/focusNode */ 172);\\n\\nvar AutoFocusUtils = {\\n  focusDOMComponent: function () {\\n    focusNode(ReactDOMComponentTree.getNodeFromInstance(this));\\n  }\\n};\\n\\nmodule.exports = AutoFocusUtils;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/AutoFocusUtils.js\\n// module id = 171\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/AutoFocusUtils.js?\");\n\n/***/ },\n/* 172 */\n/*!*********************************!*\\\n  !*** ./~/fbjs/lib/focusNode.js ***!\n  \\*********************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\n/**\\n * @param {DOMElement} node input/textarea to focus\\n */\\n\\nfunction focusNode(node) {\\n  // IE8 can throw \\\"Can't move focus to the control because it is invisible,\\n  // not enabled, or of a type that does not accept the focus.\\\" for all kinds of\\n  // reasons that are too expensive and fragile to test.\\n  try {\\n    node.focus();\\n  } catch (e) {}\\n}\\n\\nmodule.exports = focusNode;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/focusNode.js\\n// module id = 172\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/focusNode.js?\");\n\n/***/ },\n/* 173 */\n/*!**************************************************!*\\\n  !*** ./~/react-dom/lib/CSSPropertyOperations.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar CSSProperty = __webpack_require__(/*! ./CSSProperty */ 174);\\nvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ 126);\\nvar ReactInstrumentation = __webpack_require__(/*! ./ReactInstrumentation */ 140);\\n\\nvar camelizeStyleName = __webpack_require__(/*! fbjs/lib/camelizeStyleName */ 175);\\nvar dangerousStyleValue = __webpack_require__(/*! ./dangerousStyleValue */ 177);\\nvar hyphenateStyleName = __webpack_require__(/*! fbjs/lib/hyphenateStyleName */ 178);\\nvar memoizeStringOnly = __webpack_require__(/*! fbjs/lib/memoizeStringOnly */ 180);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar processStyleName = memoizeStringOnly(function (styleName) {\\n  return hyphenateStyleName(styleName);\\n});\\n\\nvar hasShorthandPropertyBug = false;\\nvar styleFloatAccessor = 'cssFloat';\\nif (ExecutionEnvironment.canUseDOM) {\\n  var tempStyle = document.createElement('div').style;\\n  try {\\n    // IE8 throws \\\"Invalid argument.\\\" if resetting shorthand style properties.\\n    tempStyle.font = '';\\n  } catch (e) {\\n    hasShorthandPropertyBug = true;\\n  }\\n  // IE8 only supports accessing cssFloat (standard) as styleFloat\\n  if (document.documentElement.style.cssFloat === undefined) {\\n    styleFloatAccessor = 'styleFloat';\\n  }\\n}\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  // 'msTransform' is correct, but the other prefixes should be capitalized\\n  var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\\n\\n  // style values shouldn't contain a semicolon\\n  var badStyleValueWithSemicolonPattern = /;\\\\s*$/;\\n\\n  var warnedStyleNames = {};\\n  var warnedStyleValues = {};\\n  var warnedForNaNValue = false;\\n\\n  var warnHyphenatedStyleName = function (name, owner) {\\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\\n      return;\\n    }\\n\\n    warnedStyleNames[name] = true;\\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported style property %s. Did you mean %s?%s', name, camelizeStyleName(name), checkRenderMessage(owner)) : void 0;\\n  };\\n\\n  var warnBadVendoredStyleName = function (name, owner) {\\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\\n      return;\\n    }\\n\\n    warnedStyleNames[name] = true;\\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?%s', name, name.charAt(0).toUpperCase() + name.slice(1), checkRenderMessage(owner)) : void 0;\\n  };\\n\\n  var warnStyleValueWithSemicolon = function (name, value, owner) {\\n    if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\\n      return;\\n    }\\n\\n    warnedStyleValues[value] = true;\\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Style property values shouldn\\\\'t contain a semicolon.%s ' + 'Try \\\"%s: %s\\\" instead.', checkRenderMessage(owner), name, value.replace(badStyleValueWithSemicolonPattern, '')) : void 0;\\n  };\\n\\n  var warnStyleValueIsNaN = function (name, value, owner) {\\n    if (warnedForNaNValue) {\\n      return;\\n    }\\n\\n    warnedForNaNValue = true;\\n    process.env.NODE_ENV !== 'production' ? warning(false, '`NaN` is an invalid value for the `%s` css style property.%s', name, checkRenderMessage(owner)) : void 0;\\n  };\\n\\n  var checkRenderMessage = function (owner) {\\n    if (owner) {\\n      var name = owner.getName();\\n      if (name) {\\n        return ' Check the render method of `' + name + '`.';\\n      }\\n    }\\n    return '';\\n  };\\n\\n  /**\\n   * @param {string} name\\n   * @param {*} value\\n   * @param {ReactDOMComponent} component\\n   */\\n  var warnValidStyle = function (name, value, component) {\\n    var owner;\\n    if (component) {\\n      owner = component._currentElement._owner;\\n    }\\n    if (name.indexOf('-') > -1) {\\n      warnHyphenatedStyleName(name, owner);\\n    } else if (badVendoredStyleNamePattern.test(name)) {\\n      warnBadVendoredStyleName(name, owner);\\n    } else if (badStyleValueWithSemicolonPattern.test(value)) {\\n      warnStyleValueWithSemicolon(name, value, owner);\\n    }\\n\\n    if (typeof value === 'number' && isNaN(value)) {\\n      warnStyleValueIsNaN(name, value, owner);\\n    }\\n  };\\n}\\n\\n/**\\n * Operations for dealing with CSS properties.\\n */\\nvar CSSPropertyOperations = {\\n\\n  /**\\n   * Serializes a mapping of style properties for use as inline styles:\\n   *\\n   *   > createMarkupForStyles({width: '200px', height: 0})\\n   *   \\\"width:200px;height:0;\\\"\\n   *\\n   * Undefined values are ignored so that declarative programming is easier.\\n   * The result should be HTML-escaped before insertion into the DOM.\\n   *\\n   * @param {object} styles\\n   * @param {ReactDOMComponent} component\\n   * @return {?string}\\n   */\\n  createMarkupForStyles: function (styles, component) {\\n    var serialized = '';\\n    for (var styleName in styles) {\\n      if (!styles.hasOwnProperty(styleName)) {\\n        continue;\\n      }\\n      var styleValue = styles[styleName];\\n      if (process.env.NODE_ENV !== 'production') {\\n        warnValidStyle(styleName, styleValue, component);\\n      }\\n      if (styleValue != null) {\\n        serialized += processStyleName(styleName) + ':';\\n        serialized += dangerousStyleValue(styleName, styleValue, component) + ';';\\n      }\\n    }\\n    return serialized || null;\\n  },\\n\\n  /**\\n   * Sets the value for multiple styles on a node.  If a value is specified as\\n   * '' (empty string), the corresponding style property will be unset.\\n   *\\n   * @param {DOMElement} node\\n   * @param {object} styles\\n   * @param {ReactDOMComponent} component\\n   */\\n  setValueForStyles: function (node, styles, component) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      ReactInstrumentation.debugTool.onHostOperation({\\n        instanceID: component._debugID,\\n        type: 'update styles',\\n        payload: styles\\n      });\\n    }\\n\\n    var style = node.style;\\n    for (var styleName in styles) {\\n      if (!styles.hasOwnProperty(styleName)) {\\n        continue;\\n      }\\n      if (process.env.NODE_ENV !== 'production') {\\n        warnValidStyle(styleName, styles[styleName], component);\\n      }\\n      var styleValue = dangerousStyleValue(styleName, styles[styleName], component);\\n      if (styleName === 'float' || styleName === 'cssFloat') {\\n        styleName = styleFloatAccessor;\\n      }\\n      if (styleValue) {\\n        style[styleName] = styleValue;\\n      } else {\\n        var expansion = hasShorthandPropertyBug && CSSProperty.shorthandPropertyExpansions[styleName];\\n        if (expansion) {\\n          // Shorthand property that IE8 won't like unsetting, so unset each\\n          // component to placate it\\n          for (var individualStyleName in expansion) {\\n            style[individualStyleName] = '';\\n          }\\n        } else {\\n          style[styleName] = '';\\n        }\\n      }\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = CSSPropertyOperations;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/CSSPropertyOperations.js\\n// module id = 173\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/CSSPropertyOperations.js?\");\n\n/***/ },\n/* 174 */\n/*!****************************************!*\\\n  !*** ./~/react-dom/lib/CSSProperty.js ***!\n  \\****************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\n/**\\n * CSS properties which accept numbers but are not in units of \\\"px\\\".\\n */\\n\\nvar isUnitlessNumber = {\\n  animationIterationCount: true,\\n  borderImageOutset: true,\\n  borderImageSlice: true,\\n  borderImageWidth: true,\\n  boxFlex: true,\\n  boxFlexGroup: true,\\n  boxOrdinalGroup: true,\\n  columnCount: true,\\n  flex: true,\\n  flexGrow: true,\\n  flexPositive: true,\\n  flexShrink: true,\\n  flexNegative: true,\\n  flexOrder: true,\\n  gridRow: true,\\n  gridColumn: true,\\n  fontWeight: true,\\n  lineClamp: true,\\n  lineHeight: true,\\n  opacity: true,\\n  order: true,\\n  orphans: true,\\n  tabSize: true,\\n  widows: true,\\n  zIndex: true,\\n  zoom: true,\\n\\n  // SVG-related properties\\n  fillOpacity: true,\\n  floodOpacity: true,\\n  stopOpacity: true,\\n  strokeDasharray: true,\\n  strokeDashoffset: true,\\n  strokeMiterlimit: true,\\n  strokeOpacity: true,\\n  strokeWidth: true\\n};\\n\\n/**\\n * @param {string} prefix vendor-specific prefix, eg: Webkit\\n * @param {string} key style name, eg: transitionDuration\\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\\n * WebkitTransitionDuration\\n */\\nfunction prefixKey(prefix, key) {\\n  return prefix + key.charAt(0).toUpperCase() + key.substring(1);\\n}\\n\\n/**\\n * Support style names that may come passed in prefixed by adding permutations\\n * of vendor prefixes.\\n */\\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\\n\\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\\n// infinite loop, because it iterates over the newly added props too.\\nObject.keys(isUnitlessNumber).forEach(function (prop) {\\n  prefixes.forEach(function (prefix) {\\n    isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\\n  });\\n});\\n\\n/**\\n * Most style properties can be unset by doing .style[prop] = '' but IE8\\n * doesn't like doing that with shorthand properties so for the properties that\\n * IE8 breaks on, which are listed here, we instead unset each of the\\n * individual properties. See http://bugs.jquery.com/ticket/12385.\\n * The 4-value 'clock' properties like margin, padding, border-width seem to\\n * behave without any problems. Curiously, list-style works too without any\\n * special prodding.\\n */\\nvar shorthandPropertyExpansions = {\\n  background: {\\n    backgroundAttachment: true,\\n    backgroundColor: true,\\n    backgroundImage: true,\\n    backgroundPositionX: true,\\n    backgroundPositionY: true,\\n    backgroundRepeat: true\\n  },\\n  backgroundPosition: {\\n    backgroundPositionX: true,\\n    backgroundPositionY: true\\n  },\\n  border: {\\n    borderWidth: true,\\n    borderStyle: true,\\n    borderColor: true\\n  },\\n  borderBottom: {\\n    borderBottomWidth: true,\\n    borderBottomStyle: true,\\n    borderBottomColor: true\\n  },\\n  borderLeft: {\\n    borderLeftWidth: true,\\n    borderLeftStyle: true,\\n    borderLeftColor: true\\n  },\\n  borderRight: {\\n    borderRightWidth: true,\\n    borderRightStyle: true,\\n    borderRightColor: true\\n  },\\n  borderTop: {\\n    borderTopWidth: true,\\n    borderTopStyle: true,\\n    borderTopColor: true\\n  },\\n  font: {\\n    fontStyle: true,\\n    fontVariant: true,\\n    fontWeight: true,\\n    fontSize: true,\\n    lineHeight: true,\\n    fontFamily: true\\n  },\\n  outline: {\\n    outlineWidth: true,\\n    outlineStyle: true,\\n    outlineColor: true\\n  }\\n};\\n\\nvar CSSProperty = {\\n  isUnitlessNumber: isUnitlessNumber,\\n  shorthandPropertyExpansions: shorthandPropertyExpansions\\n};\\n\\nmodule.exports = CSSProperty;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/CSSProperty.js\\n// module id = 174\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/CSSProperty.js?\");\n\n/***/ },\n/* 175 */\n/*!*****************************************!*\\\n  !*** ./~/fbjs/lib/camelizeStyleName.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @typechecks\\n */\\n\\n'use strict';\\n\\nvar camelize = __webpack_require__(/*! ./camelize */ 176);\\n\\nvar msPattern = /^-ms-/;\\n\\n/**\\n * Camelcases a hyphenated CSS property name, for example:\\n *\\n *   > camelizeStyleName('background-color')\\n *   < \\\"backgroundColor\\\"\\n *   > camelizeStyleName('-moz-transition')\\n *   < \\\"MozTransition\\\"\\n *   > camelizeStyleName('-ms-transition')\\n *   < \\\"msTransition\\\"\\n *\\n * As Andi Smith suggests\\n * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\\n * is converted to lowercase `ms`.\\n *\\n * @param {string} string\\n * @return {string}\\n */\\nfunction camelizeStyleName(string) {\\n  return camelize(string.replace(msPattern, 'ms-'));\\n}\\n\\nmodule.exports = camelizeStyleName;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/camelizeStyleName.js\\n// module id = 175\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/camelizeStyleName.js?\");\n\n/***/ },\n/* 176 */\n/*!********************************!*\\\n  !*** ./~/fbjs/lib/camelize.js ***!\n  \\********************************/\n/***/ function(module, exports) {\n\n\teval(\"\\\"use strict\\\";\\n\\n/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @typechecks\\n */\\n\\nvar _hyphenPattern = /-(.)/g;\\n\\n/**\\n * Camelcases a hyphenated string, for example:\\n *\\n *   > camelize('background-color')\\n *   < \\\"backgroundColor\\\"\\n *\\n * @param {string} string\\n * @return {string}\\n */\\nfunction camelize(string) {\\n  return string.replace(_hyphenPattern, function (_, character) {\\n    return character.toUpperCase();\\n  });\\n}\\n\\nmodule.exports = camelize;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/camelize.js\\n// module id = 176\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/camelize.js?\");\n\n/***/ },\n/* 177 */\n/*!************************************************!*\\\n  !*** ./~/react-dom/lib/dangerousStyleValue.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar CSSProperty = __webpack_require__(/*! ./CSSProperty */ 174);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar isUnitlessNumber = CSSProperty.isUnitlessNumber;\\nvar styleWarnings = {};\\n\\n/**\\n * Convert a value into the proper css writable value. The style name `name`\\n * should be logical (no hyphens), as specified\\n * in `CSSProperty.isUnitlessNumber`.\\n *\\n * @param {string} name CSS property name such as `topMargin`.\\n * @param {*} value CSS property value such as `10px`.\\n * @param {ReactDOMComponent} component\\n * @return {string} Normalized style value with dimensions applied.\\n */\\nfunction dangerousStyleValue(name, value, component) {\\n  // Note that we've removed escapeTextForBrowser() calls here since the\\n  // whole string will be escaped when the attribute is injected into\\n  // the markup. If you provide unsafe user data here they can inject\\n  // arbitrary CSS which may be problematic (I couldn't repro this):\\n  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\\n  // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\\n  // This is not an XSS hole but instead a potential CSS injection issue\\n  // which has lead to a greater discussion about how we're going to\\n  // trust URLs moving forward. See #2115901\\n\\n  var isEmpty = value == null || typeof value === 'boolean' || value === '';\\n  if (isEmpty) {\\n    return '';\\n  }\\n\\n  var isNonNumeric = isNaN(value);\\n  if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {\\n    return '' + value; // cast to string\\n  }\\n\\n  if (typeof value === 'string') {\\n    if (process.env.NODE_ENV !== 'production') {\\n      // Allow '0' to pass through without warning. 0 is already special and\\n      // doesn't require units, so we don't need to warn about it.\\n      if (component && value !== '0') {\\n        var owner = component._currentElement._owner;\\n        var ownerName = owner ? owner.getName() : null;\\n        if (ownerName && !styleWarnings[ownerName]) {\\n          styleWarnings[ownerName] = {};\\n        }\\n        var warned = false;\\n        if (ownerName) {\\n          var warnings = styleWarnings[ownerName];\\n          warned = warnings[name];\\n          if (!warned) {\\n            warnings[name] = true;\\n          }\\n        }\\n        if (!warned) {\\n          process.env.NODE_ENV !== 'production' ? warning(false, 'a `%s` tag (owner: `%s`) was passed a numeric string value ' + 'for CSS property `%s` (value: `%s`) which will be treated ' + 'as a unitless number in a future version of React.', component._currentElement.type, ownerName || 'unknown', name, value) : void 0;\\n        }\\n      }\\n    }\\n    value = value.trim();\\n  }\\n  return value + 'px';\\n}\\n\\nmodule.exports = dangerousStyleValue;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/dangerousStyleValue.js\\n// module id = 177\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/dangerousStyleValue.js?\");\n\n/***/ },\n/* 178 */\n/*!******************************************!*\\\n  !*** ./~/fbjs/lib/hyphenateStyleName.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @typechecks\\n */\\n\\n'use strict';\\n\\nvar hyphenate = __webpack_require__(/*! ./hyphenate */ 179);\\n\\nvar msPattern = /^ms-/;\\n\\n/**\\n * Hyphenates a camelcased CSS property name, for example:\\n *\\n *   > hyphenateStyleName('backgroundColor')\\n *   < \\\"background-color\\\"\\n *   > hyphenateStyleName('MozTransition')\\n *   < \\\"-moz-transition\\\"\\n *   > hyphenateStyleName('msTransition')\\n *   < \\\"-ms-transition\\\"\\n *\\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\\n * is converted to `-ms-`.\\n *\\n * @param {string} string\\n * @return {string}\\n */\\nfunction hyphenateStyleName(string) {\\n  return hyphenate(string).replace(msPattern, '-ms-');\\n}\\n\\nmodule.exports = hyphenateStyleName;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/hyphenateStyleName.js\\n// module id = 178\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/hyphenateStyleName.js?\");\n\n/***/ },\n/* 179 */\n/*!*********************************!*\\\n  !*** ./~/fbjs/lib/hyphenate.js ***!\n  \\*********************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n\\n/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @typechecks\\n */\\n\\nvar _uppercasePattern = /([A-Z])/g;\\n\\n/**\\n * Hyphenates a camelcased string, for example:\\n *\\n *   > hyphenate('backgroundColor')\\n *   < \\\"background-color\\\"\\n *\\n * For CSS style names, use `hyphenateStyleName` instead which works properly\\n * with all vendor prefixes, including `ms`.\\n *\\n * @param {string} string\\n * @return {string}\\n */\\nfunction hyphenate(string) {\\n  return string.replace(_uppercasePattern, '-$1').toLowerCase();\\n}\\n\\nmodule.exports = hyphenate;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/hyphenate.js\\n// module id = 179\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/hyphenate.js?\");\n\n/***/ },\n/* 180 */\n/*!*****************************************!*\\\n  !*** ./~/fbjs/lib/memoizeStringOnly.js ***!\n  \\*****************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n * @typechecks static-only\\n */\\n\\n'use strict';\\n\\n/**\\n * Memoizes the return value of a function that accepts one string argument.\\n */\\n\\nfunction memoizeStringOnly(callback) {\\n  var cache = {};\\n  return function (string) {\\n    if (!cache.hasOwnProperty(string)) {\\n      cache[string] = callback.call(this, string);\\n    }\\n    return cache[string];\\n  };\\n}\\n\\nmodule.exports = memoizeStringOnly;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/memoizeStringOnly.js\\n// module id = 180\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/memoizeStringOnly.js?\");\n\n/***/ },\n/* 181 */\n/*!**************************************************!*\\\n  !*** ./~/react-dom/lib/DOMPropertyOperations.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 114);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\nvar ReactInstrumentation = __webpack_require__(/*! ./ReactInstrumentation */ 140);\\n\\nvar quoteAttributeValueForBrowser = __webpack_require__(/*! ./quoteAttributeValueForBrowser */ 182);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + DOMProperty.ATTRIBUTE_NAME_START_CHAR + '][' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$');\\nvar illegalAttributeNameCache = {};\\nvar validatedAttributeNameCache = {};\\n\\nfunction isAttributeNameSafe(attributeName) {\\n  if (validatedAttributeNameCache.hasOwnProperty(attributeName)) {\\n    return true;\\n  }\\n  if (illegalAttributeNameCache.hasOwnProperty(attributeName)) {\\n    return false;\\n  }\\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\\n    validatedAttributeNameCache[attributeName] = true;\\n    return true;\\n  }\\n  illegalAttributeNameCache[attributeName] = true;\\n  process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid attribute name: `%s`', attributeName) : void 0;\\n  return false;\\n}\\n\\nfunction shouldIgnoreValue(propertyInfo, value) {\\n  return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false;\\n}\\n\\n/**\\n * Operations for dealing with DOM properties.\\n */\\nvar DOMPropertyOperations = {\\n\\n  /**\\n   * Creates markup for the ID property.\\n   *\\n   * @param {string} id Unescaped ID.\\n   * @return {string} Markup string.\\n   */\\n  createMarkupForID: function (id) {\\n    return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id);\\n  },\\n\\n  setAttributeForID: function (node, id) {\\n    node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id);\\n  },\\n\\n  createMarkupForRoot: function () {\\n    return DOMProperty.ROOT_ATTRIBUTE_NAME + '=\\\"\\\"';\\n  },\\n\\n  setAttributeForRoot: function (node) {\\n    node.setAttribute(DOMProperty.ROOT_ATTRIBUTE_NAME, '');\\n  },\\n\\n  /**\\n   * Creates markup for a property.\\n   *\\n   * @param {string} name\\n   * @param {*} value\\n   * @return {?string} Markup string, or null if the property was invalid.\\n   */\\n  createMarkupForProperty: function (name, value) {\\n    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\\n    if (propertyInfo) {\\n      if (shouldIgnoreValue(propertyInfo, value)) {\\n        return '';\\n      }\\n      var attributeName = propertyInfo.attributeName;\\n      if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\\n        return attributeName + '=\\\"\\\"';\\n      }\\n      return attributeName + '=' + quoteAttributeValueForBrowser(value);\\n    } else if (DOMProperty.isCustomAttribute(name)) {\\n      if (value == null) {\\n        return '';\\n      }\\n      return name + '=' + quoteAttributeValueForBrowser(value);\\n    }\\n    return null;\\n  },\\n\\n  /**\\n   * Creates markup for a custom property.\\n   *\\n   * @param {string} name\\n   * @param {*} value\\n   * @return {string} Markup string, or empty string if the property was invalid.\\n   */\\n  createMarkupForCustomAttribute: function (name, value) {\\n    if (!isAttributeNameSafe(name) || value == null) {\\n      return '';\\n    }\\n    return name + '=' + quoteAttributeValueForBrowser(value);\\n  },\\n\\n  /**\\n   * Sets the value for a property on a node.\\n   *\\n   * @param {DOMElement} node\\n   * @param {string} name\\n   * @param {*} value\\n   */\\n  setValueForProperty: function (node, name, value) {\\n    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\\n    if (propertyInfo) {\\n      var mutationMethod = propertyInfo.mutationMethod;\\n      if (mutationMethod) {\\n        mutationMethod(node, value);\\n      } else if (shouldIgnoreValue(propertyInfo, value)) {\\n        this.deleteValueForProperty(node, name);\\n        return;\\n      } else if (propertyInfo.mustUseProperty) {\\n        // Contrary to `setAttribute`, object properties are properly\\n        // `toString`ed by IE8/9.\\n        node[propertyInfo.propertyName] = value;\\n      } else {\\n        var attributeName = propertyInfo.attributeName;\\n        var namespace = propertyInfo.attributeNamespace;\\n        // `setAttribute` with objects becomes only `[object]` in IE8/9,\\n        // ('' + value) makes it output the correct toString()-value.\\n        if (namespace) {\\n          node.setAttributeNS(namespace, attributeName, '' + value);\\n        } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\\n          node.setAttribute(attributeName, '');\\n        } else {\\n          node.setAttribute(attributeName, '' + value);\\n        }\\n      }\\n    } else if (DOMProperty.isCustomAttribute(name)) {\\n      DOMPropertyOperations.setValueForAttribute(node, name, value);\\n      return;\\n    }\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      var payload = {};\\n      payload[name] = value;\\n      ReactInstrumentation.debugTool.onHostOperation({\\n        instanceID: ReactDOMComponentTree.getInstanceFromNode(node)._debugID,\\n        type: 'update attribute',\\n        payload: payload\\n      });\\n    }\\n  },\\n\\n  setValueForAttribute: function (node, name, value) {\\n    if (!isAttributeNameSafe(name)) {\\n      return;\\n    }\\n    if (value == null) {\\n      node.removeAttribute(name);\\n    } else {\\n      node.setAttribute(name, '' + value);\\n    }\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      var payload = {};\\n      payload[name] = value;\\n      ReactInstrumentation.debugTool.onHostOperation({\\n        instanceID: ReactDOMComponentTree.getInstanceFromNode(node)._debugID,\\n        type: 'update attribute',\\n        payload: payload\\n      });\\n    }\\n  },\\n\\n  /**\\n   * Deletes an attributes from a node.\\n   *\\n   * @param {DOMElement} node\\n   * @param {string} name\\n   */\\n  deleteValueForAttribute: function (node, name) {\\n    node.removeAttribute(name);\\n    if (process.env.NODE_ENV !== 'production') {\\n      ReactInstrumentation.debugTool.onHostOperation({\\n        instanceID: ReactDOMComponentTree.getInstanceFromNode(node)._debugID,\\n        type: 'remove attribute',\\n        payload: name\\n      });\\n    }\\n  },\\n\\n  /**\\n   * Deletes the value for a property on a node.\\n   *\\n   * @param {DOMElement} node\\n   * @param {string} name\\n   */\\n  deleteValueForProperty: function (node, name) {\\n    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\\n    if (propertyInfo) {\\n      var mutationMethod = propertyInfo.mutationMethod;\\n      if (mutationMethod) {\\n        mutationMethod(node, undefined);\\n      } else if (propertyInfo.mustUseProperty) {\\n        var propName = propertyInfo.propertyName;\\n        if (propertyInfo.hasBooleanValue) {\\n          node[propName] = false;\\n        } else {\\n          node[propName] = '';\\n        }\\n      } else {\\n        node.removeAttribute(propertyInfo.attributeName);\\n      }\\n    } else if (DOMProperty.isCustomAttribute(name)) {\\n      node.removeAttribute(name);\\n    }\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      ReactInstrumentation.debugTool.onHostOperation({\\n        instanceID: ReactDOMComponentTree.getInstanceFromNode(node)._debugID,\\n        type: 'remove attribute',\\n        payload: name\\n      });\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = DOMPropertyOperations;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/DOMPropertyOperations.js\\n// module id = 181\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/DOMPropertyOperations.js?\");\n\n/***/ },\n/* 182 */\n/*!**********************************************************!*\\\n  !*** ./~/react-dom/lib/quoteAttributeValueForBrowser.js ***!\n  \\**********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar escapeTextContentForBrowser = __webpack_require__(/*! ./escapeTextContentForBrowser */ 164);\\n\\n/**\\n * Escapes attribute value to prevent scripting attacks.\\n *\\n * @param {*} value Value to escape.\\n * @return {string} An escaped string.\\n */\\nfunction quoteAttributeValueForBrowser(value) {\\n  return '\\\"' + escapeTextContentForBrowser(value) + '\\\"';\\n}\\n\\nmodule.exports = quoteAttributeValueForBrowser;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/quoteAttributeValueForBrowser.js\\n// module id = 182\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/quoteAttributeValueForBrowser.js?\");\n\n/***/ },\n/* 183 */\n/*!*****************************************************!*\\\n  !*** ./~/react-dom/lib/ReactBrowserEventEmitter.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar EventPluginRegistry = __webpack_require__(/*! ./EventPluginRegistry */ 121);\\nvar ReactEventEmitterMixin = __webpack_require__(/*! ./ReactEventEmitterMixin */ 184);\\nvar ViewportMetrics = __webpack_require__(/*! ./ViewportMetrics */ 154);\\n\\nvar getVendorPrefixedEventName = __webpack_require__(/*! ./getVendorPrefixedEventName */ 185);\\nvar isEventSupported = __webpack_require__(/*! ./isEventSupported */ 148);\\n\\n/**\\n * Summary of `ReactBrowserEventEmitter` event handling:\\n *\\n *  - Top-level delegation is used to trap most native browser events. This\\n *    may only occur in the main thread and is the responsibility of\\n *    ReactEventListener, which is injected and can therefore support pluggable\\n *    event sources. This is the only work that occurs in the main thread.\\n *\\n *  - We normalize and de-duplicate events to account for browser quirks. This\\n *    may be done in the worker thread.\\n *\\n *  - Forward these native events (with the associated top-level type used to\\n *    trap it) to `EventPluginHub`, which in turn will ask plugins if they want\\n *    to extract any synthetic events.\\n *\\n *  - The `EventPluginHub` will then process each event by annotating them with\\n *    \\\"dispatches\\\", a sequence of listeners and IDs that care about that event.\\n *\\n *  - The `EventPluginHub` then dispatches the events.\\n *\\n * Overview of React and the event system:\\n *\\n * +------------+    .\\n * |    DOM     |    .\\n * +------------+    .\\n *       |           .\\n *       v           .\\n * +------------+    .\\n * | ReactEvent |    .\\n * |  Listener  |    .\\n * +------------+    .                         +-----------+\\n *       |           .               +--------+|SimpleEvent|\\n *       |           .               |         |Plugin     |\\n * +-----|------+    .               v         +-----------+\\n * |     |      |    .    +--------------+                    +------------+\\n * |     +-----------.--->|EventPluginHub|                    |    Event   |\\n * |            |    .    |              |     +-----------+  | Propagators|\\n * | ReactEvent |    .    |              |     |TapEvent   |  |------------|\\n * |  Emitter   |    .    |              |<---+|Plugin     |  |other plugin|\\n * |            |    .    |              |     +-----------+  |  utilities |\\n * |     +-----------.--->|              |                    +------------+\\n * |     |      |    .    +--------------+\\n * +-----|------+    .                ^        +-----------+\\n *       |           .                |        |Enter/Leave|\\n *       +           .                +-------+|Plugin     |\\n * +-------------+   .                         +-----------+\\n * | application |   .\\n * |-------------|   .\\n * |             |   .\\n * |             |   .\\n * +-------------+   .\\n *                   .\\n *    React Core     .  General Purpose Event Plugin System\\n */\\n\\nvar hasEventPageXY;\\nvar alreadyListeningTo = {};\\nvar isMonitoringScrollValue = false;\\nvar reactTopListenersCounter = 0;\\n\\n// For events like 'submit' which don't consistently bubble (which we trap at a\\n// lower node than `document`), binding at `document` would cause duplicate\\n// events so we don't include them here\\nvar topEventMapping = {\\n  topAbort: 'abort',\\n  topAnimationEnd: getVendorPrefixedEventName('animationend') || 'animationend',\\n  topAnimationIteration: getVendorPrefixedEventName('animationiteration') || 'animationiteration',\\n  topAnimationStart: getVendorPrefixedEventName('animationstart') || 'animationstart',\\n  topBlur: 'blur',\\n  topCanPlay: 'canplay',\\n  topCanPlayThrough: 'canplaythrough',\\n  topChange: 'change',\\n  topClick: 'click',\\n  topCompositionEnd: 'compositionend',\\n  topCompositionStart: 'compositionstart',\\n  topCompositionUpdate: 'compositionupdate',\\n  topContextMenu: 'contextmenu',\\n  topCopy: 'copy',\\n  topCut: 'cut',\\n  topDoubleClick: 'dblclick',\\n  topDrag: 'drag',\\n  topDragEnd: 'dragend',\\n  topDragEnter: 'dragenter',\\n  topDragExit: 'dragexit',\\n  topDragLeave: 'dragleave',\\n  topDragOver: 'dragover',\\n  topDragStart: 'dragstart',\\n  topDrop: 'drop',\\n  topDurationChange: 'durationchange',\\n  topEmptied: 'emptied',\\n  topEncrypted: 'encrypted',\\n  topEnded: 'ended',\\n  topError: 'error',\\n  topFocus: 'focus',\\n  topInput: 'input',\\n  topKeyDown: 'keydown',\\n  topKeyPress: 'keypress',\\n  topKeyUp: 'keyup',\\n  topLoadedData: 'loadeddata',\\n  topLoadedMetadata: 'loadedmetadata',\\n  topLoadStart: 'loadstart',\\n  topMouseDown: 'mousedown',\\n  topMouseMove: 'mousemove',\\n  topMouseOut: 'mouseout',\\n  topMouseOver: 'mouseover',\\n  topMouseUp: 'mouseup',\\n  topPaste: 'paste',\\n  topPause: 'pause',\\n  topPlay: 'play',\\n  topPlaying: 'playing',\\n  topProgress: 'progress',\\n  topRateChange: 'ratechange',\\n  topScroll: 'scroll',\\n  topSeeked: 'seeked',\\n  topSeeking: 'seeking',\\n  topSelectionChange: 'selectionchange',\\n  topStalled: 'stalled',\\n  topSuspend: 'suspend',\\n  topTextInput: 'textInput',\\n  topTimeUpdate: 'timeupdate',\\n  topTouchCancel: 'touchcancel',\\n  topTouchEnd: 'touchend',\\n  topTouchMove: 'touchmove',\\n  topTouchStart: 'touchstart',\\n  topTransitionEnd: getVendorPrefixedEventName('transitionend') || 'transitionend',\\n  topVolumeChange: 'volumechange',\\n  topWaiting: 'waiting',\\n  topWheel: 'wheel'\\n};\\n\\n/**\\n * To ensure no conflicts with other potential React instances on the page\\n */\\nvar topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2);\\n\\nfunction getListeningForDocument(mountAt) {\\n  // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`\\n  // directly.\\n  if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {\\n    mountAt[topListenersIDKey] = reactTopListenersCounter++;\\n    alreadyListeningTo[mountAt[topListenersIDKey]] = {};\\n  }\\n  return alreadyListeningTo[mountAt[topListenersIDKey]];\\n}\\n\\n/**\\n * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For\\n * example:\\n *\\n *   EventPluginHub.putListener('myID', 'onClick', myFunction);\\n *\\n * This would allocate a \\\"registration\\\" of `('onClick', myFunction)` on 'myID'.\\n *\\n * @internal\\n */\\nvar ReactBrowserEventEmitter = _assign({}, ReactEventEmitterMixin, {\\n\\n  /**\\n   * Injectable event backend\\n   */\\n  ReactEventListener: null,\\n\\n  injection: {\\n    /**\\n     * @param {object} ReactEventListener\\n     */\\n    injectReactEventListener: function (ReactEventListener) {\\n      ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel);\\n      ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;\\n    }\\n  },\\n\\n  /**\\n   * Sets whether or not any created callbacks should be enabled.\\n   *\\n   * @param {boolean} enabled True if callbacks should be enabled.\\n   */\\n  setEnabled: function (enabled) {\\n    if (ReactBrowserEventEmitter.ReactEventListener) {\\n      ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);\\n    }\\n  },\\n\\n  /**\\n   * @return {boolean} True if callbacks are enabled.\\n   */\\n  isEnabled: function () {\\n    return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled());\\n  },\\n\\n  /**\\n   * We listen for bubbled touch events on the document object.\\n   *\\n   * Firefox v8.01 (and possibly others) exhibited strange behavior when\\n   * mounting `onmousemove` events at some node that was not the document\\n   * element. The symptoms were that if your mouse is not moving over something\\n   * contained within that mount point (for example on the background) the\\n   * top-level listeners for `onmousemove` won't be called. However, if you\\n   * register the `mousemove` on the document object, then it will of course\\n   * catch all `mousemove`s. This along with iOS quirks, justifies restricting\\n   * top-level listeners to the document object only, at least for these\\n   * movement types of events and possibly all events.\\n   *\\n   * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\\n   *\\n   * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but\\n   * they bubble to document.\\n   *\\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\\n   * @param {object} contentDocumentHandle Document which owns the container\\n   */\\n  listenTo: function (registrationName, contentDocumentHandle) {\\n    var mountAt = contentDocumentHandle;\\n    var isListening = getListeningForDocument(mountAt);\\n    var dependencies = EventPluginRegistry.registrationNameDependencies[registrationName];\\n\\n    for (var i = 0; i < dependencies.length; i++) {\\n      var dependency = dependencies[i];\\n      if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {\\n        if (dependency === 'topWheel') {\\n          if (isEventSupported('wheel')) {\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent('topWheel', 'wheel', mountAt);\\n          } else if (isEventSupported('mousewheel')) {\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent('topWheel', 'mousewheel', mountAt);\\n          } else {\\n            // Firefox needs to capture a different mouse scroll event.\\n            // @see http://www.quirksmode.org/dom/events/tests/scroll.html\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent('topWheel', 'DOMMouseScroll', mountAt);\\n          }\\n        } else if (dependency === 'topScroll') {\\n\\n          if (isEventSupported('scroll', true)) {\\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent('topScroll', 'scroll', mountAt);\\n          } else {\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent('topScroll', 'scroll', ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE);\\n          }\\n        } else if (dependency === 'topFocus' || dependency === 'topBlur') {\\n\\n          if (isEventSupported('focus', true)) {\\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent('topFocus', 'focus', mountAt);\\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent('topBlur', 'blur', mountAt);\\n          } else if (isEventSupported('focusin')) {\\n            // IE has `focusin` and `focusout` events which bubble.\\n            // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent('topFocus', 'focusin', mountAt);\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent('topBlur', 'focusout', mountAt);\\n          }\\n\\n          // to make sure blur and focus event listeners are only attached once\\n          isListening.topBlur = true;\\n          isListening.topFocus = true;\\n        } else if (topEventMapping.hasOwnProperty(dependency)) {\\n          ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt);\\n        }\\n\\n        isListening[dependency] = true;\\n      }\\n    }\\n  },\\n\\n  trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {\\n    return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle);\\n  },\\n\\n  trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {\\n    return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle);\\n  },\\n\\n  /**\\n   * Protect against document.createEvent() returning null\\n   * Some popup blocker extensions appear to do this:\\n   * https://github.com/facebook/react/issues/6887\\n   */\\n  supportsEventPageXY: function () {\\n    if (!document.createEvent) {\\n      return false;\\n    }\\n    var ev = document.createEvent('MouseEvent');\\n    return ev != null && 'pageX' in ev;\\n  },\\n\\n  /**\\n   * Listens to window scroll and resize events. We cache scroll values so that\\n   * application code can access them without triggering reflows.\\n   *\\n   * ViewportMetrics is only used by SyntheticMouse/TouchEvent and only when\\n   * pageX/pageY isn't supported (legacy browsers).\\n   *\\n   * NOTE: Scroll events do not bubble.\\n   *\\n   * @see http://www.quirksmode.org/dom/events/scroll.html\\n   */\\n  ensureScrollValueMonitoring: function () {\\n    if (hasEventPageXY === undefined) {\\n      hasEventPageXY = ReactBrowserEventEmitter.supportsEventPageXY();\\n    }\\n    if (!hasEventPageXY && !isMonitoringScrollValue) {\\n      var refresh = ViewportMetrics.refreshScrollValues;\\n      ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);\\n      isMonitoringScrollValue = true;\\n    }\\n  }\\n\\n});\\n\\nmodule.exports = ReactBrowserEventEmitter;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactBrowserEventEmitter.js\\n// module id = 183\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactBrowserEventEmitter.js?\");\n\n/***/ },\n/* 184 */\n/*!***************************************************!*\\\n  !*** ./~/react-dom/lib/ReactEventEmitterMixin.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar EventPluginHub = __webpack_require__(/*! ./EventPluginHub */ 120);\\n\\nfunction runEventQueueInBatch(events) {\\n  EventPluginHub.enqueueEvents(events);\\n  EventPluginHub.processEventQueue(false);\\n}\\n\\nvar ReactEventEmitterMixin = {\\n\\n  /**\\n   * Streams a fired top-level event to `EventPluginHub` where plugins have the\\n   * opportunity to create `ReactEvent`s to be dispatched.\\n   */\\n  handleTopLevel: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\\n    var events = EventPluginHub.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);\\n    runEventQueueInBatch(events);\\n  }\\n};\\n\\nmodule.exports = ReactEventEmitterMixin;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactEventEmitterMixin.js\\n// module id = 184\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactEventEmitterMixin.js?\");\n\n/***/ },\n/* 185 */\n/*!*******************************************************!*\\\n  !*** ./~/react-dom/lib/getVendorPrefixedEventName.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ 126);\\n\\n/**\\n * Generate a mapping of standard vendor prefixes using the defined style property and event name.\\n *\\n * @param {string} styleProp\\n * @param {string} eventName\\n * @returns {object}\\n */\\nfunction makePrefixMap(styleProp, eventName) {\\n  var prefixes = {};\\n\\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\\n  prefixes['Webkit' + styleProp] = 'webkit' + eventName;\\n  prefixes['Moz' + styleProp] = 'moz' + eventName;\\n  prefixes['ms' + styleProp] = 'MS' + eventName;\\n  prefixes['O' + styleProp] = 'o' + eventName.toLowerCase();\\n\\n  return prefixes;\\n}\\n\\n/**\\n * A list of event names to a configurable list of vendor prefixes.\\n */\\nvar vendorPrefixes = {\\n  animationend: makePrefixMap('Animation', 'AnimationEnd'),\\n  animationiteration: makePrefixMap('Animation', 'AnimationIteration'),\\n  animationstart: makePrefixMap('Animation', 'AnimationStart'),\\n  transitionend: makePrefixMap('Transition', 'TransitionEnd')\\n};\\n\\n/**\\n * Event names that have already been detected and prefixed (if applicable).\\n */\\nvar prefixedEventNames = {};\\n\\n/**\\n * Element to check for prefixes on.\\n */\\nvar style = {};\\n\\n/**\\n * Bootstrap if a DOM exists.\\n */\\nif (ExecutionEnvironment.canUseDOM) {\\n  style = document.createElement('div').style;\\n\\n  // On some platforms, in particular some releases of Android 4.x,\\n  // the un-prefixed \\\"animation\\\" and \\\"transition\\\" properties are defined on the\\n  // style object but the events that fire will still be prefixed, so we need\\n  // to check if the un-prefixed events are usable, and if not remove them from the map.\\n  if (!('AnimationEvent' in window)) {\\n    delete vendorPrefixes.animationend.animation;\\n    delete vendorPrefixes.animationiteration.animation;\\n    delete vendorPrefixes.animationstart.animation;\\n  }\\n\\n  // Same as above\\n  if (!('TransitionEvent' in window)) {\\n    delete vendorPrefixes.transitionend.transition;\\n  }\\n}\\n\\n/**\\n * Attempts to determine the correct vendor prefixed event name.\\n *\\n * @param {string} eventName\\n * @returns {string}\\n */\\nfunction getVendorPrefixedEventName(eventName) {\\n  if (prefixedEventNames[eventName]) {\\n    return prefixedEventNames[eventName];\\n  } else if (!vendorPrefixes[eventName]) {\\n    return eventName;\\n  }\\n\\n  var prefixMap = vendorPrefixes[eventName];\\n\\n  for (var styleProp in prefixMap) {\\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {\\n      return prefixedEventNames[eventName] = prefixMap[styleProp];\\n    }\\n  }\\n\\n  return '';\\n}\\n\\nmodule.exports = getVendorPrefixedEventName;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/getVendorPrefixedEventName.js\\n// module id = 185\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/getVendorPrefixedEventName.js?\");\n\n/***/ },\n/* 186 */\n/*!******************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOMInput.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113),\\n    _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar DOMPropertyOperations = __webpack_require__(/*! ./DOMPropertyOperations */ 181);\\nvar LinkedValueUtils = __webpack_require__(/*! ./LinkedValueUtils */ 187);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 134);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar didWarnValueLink = false;\\nvar didWarnCheckedLink = false;\\nvar didWarnValueDefaultValue = false;\\nvar didWarnCheckedDefaultChecked = false;\\nvar didWarnControlledToUncontrolled = false;\\nvar didWarnUncontrolledToControlled = false;\\n\\nfunction forceUpdateIfMounted() {\\n  if (this._rootNodeID) {\\n    // DOM component is still mounted; update\\n    ReactDOMInput.updateWrapper(this);\\n  }\\n}\\n\\nfunction isControlled(props) {\\n  var usesChecked = props.type === 'checkbox' || props.type === 'radio';\\n  return usesChecked ? props.checked != null : props.value != null;\\n}\\n\\n/**\\n * Implements an <input> host component that allows setting these optional\\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\\n *\\n * If `checked` or `value` are not supplied (or null/undefined), user actions\\n * that affect the checked state or value will trigger updates to the element.\\n *\\n * If they are supplied (and not null/undefined), the rendered element will not\\n * trigger updates to the element. Instead, the props must change in order for\\n * the rendered element to be updated.\\n *\\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\\n * with an empty value (or `defaultValue`).\\n *\\n * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\\n */\\nvar ReactDOMInput = {\\n  getHostProps: function (inst, props) {\\n    var value = LinkedValueUtils.getValue(props);\\n    var checked = LinkedValueUtils.getChecked(props);\\n\\n    var hostProps = _assign({\\n      // Make sure we set .type before any other properties (setting .value\\n      // before .type means .value is lost in IE11 and below)\\n      type: undefined,\\n      // Make sure we set .step before .value (setting .value before .step\\n      // means .value is rounded on mount, based upon step precision)\\n      step: undefined,\\n      // Make sure we set .min & .max before .value (to ensure proper order\\n      // in corner cases such as min or max deriving from value, e.g. Issue #7170)\\n      min: undefined,\\n      max: undefined\\n    }, props, {\\n      defaultChecked: undefined,\\n      defaultValue: undefined,\\n      value: value != null ? value : inst._wrapperState.initialValue,\\n      checked: checked != null ? checked : inst._wrapperState.initialChecked,\\n      onChange: inst._wrapperState.onChange\\n    });\\n\\n    return hostProps;\\n  },\\n\\n  mountWrapper: function (inst, props) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      LinkedValueUtils.checkPropTypes('input', props, inst._currentElement._owner);\\n\\n      var owner = inst._currentElement._owner;\\n\\n      if (props.valueLink !== undefined && !didWarnValueLink) {\\n        process.env.NODE_ENV !== 'production' ? warning(false, '`valueLink` prop on `input` is deprecated; set `value` and `onChange` instead.') : void 0;\\n        didWarnValueLink = true;\\n      }\\n      if (props.checkedLink !== undefined && !didWarnCheckedLink) {\\n        process.env.NODE_ENV !== 'production' ? warning(false, '`checkedLink` prop on `input` is deprecated; set `value` and `onChange` instead.') : void 0;\\n        didWarnCheckedLink = true;\\n      }\\n      if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {\\n        process.env.NODE_ENV !== 'production' ? warning(false, '%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;\\n        didWarnCheckedDefaultChecked = true;\\n      }\\n      if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\\n        process.env.NODE_ENV !== 'production' ? warning(false, '%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;\\n        didWarnValueDefaultValue = true;\\n      }\\n    }\\n\\n    var defaultValue = props.defaultValue;\\n    inst._wrapperState = {\\n      initialChecked: props.checked != null ? props.checked : props.defaultChecked,\\n      initialValue: props.value != null ? props.value : defaultValue,\\n      listeners: null,\\n      onChange: _handleChange.bind(inst)\\n    };\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      inst._wrapperState.controlled = isControlled(props);\\n    }\\n  },\\n\\n  updateWrapper: function (inst) {\\n    var props = inst._currentElement.props;\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      var controlled = isControlled(props);\\n      var owner = inst._currentElement._owner;\\n\\n      if (!inst._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {\\n        process.env.NODE_ENV !== 'production' ? warning(false, '%s is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;\\n        didWarnUncontrolledToControlled = true;\\n      }\\n      if (inst._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {\\n        process.env.NODE_ENV !== 'production' ? warning(false, '%s is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;\\n        didWarnControlledToUncontrolled = true;\\n      }\\n    }\\n\\n    // TODO: Shouldn't this be getChecked(props)?\\n    var checked = props.checked;\\n    if (checked != null) {\\n      DOMPropertyOperations.setValueForProperty(ReactDOMComponentTree.getNodeFromInstance(inst), 'checked', checked || false);\\n    }\\n\\n    var node = ReactDOMComponentTree.getNodeFromInstance(inst);\\n    var value = LinkedValueUtils.getValue(props);\\n    if (value != null) {\\n\\n      // Cast `value` to a string to ensure the value is set correctly. While\\n      // browsers typically do this as necessary, jsdom doesn't.\\n      var newValue = '' + value;\\n\\n      // To avoid side effects (such as losing text selection), only set value if changed\\n      if (newValue !== node.value) {\\n        node.value = newValue;\\n      }\\n    } else {\\n      if (props.value == null && props.defaultValue != null) {\\n        node.defaultValue = '' + props.defaultValue;\\n      }\\n      if (props.checked == null && props.defaultChecked != null) {\\n        node.defaultChecked = !!props.defaultChecked;\\n      }\\n    }\\n  },\\n\\n  postMountWrapper: function (inst) {\\n    var props = inst._currentElement.props;\\n\\n    // This is in postMount because we need access to the DOM node, which is not\\n    // available until after the component has mounted.\\n    var node = ReactDOMComponentTree.getNodeFromInstance(inst);\\n\\n    // Detach value from defaultValue. We won't do anything if we're working on\\n    // submit or reset inputs as those values & defaultValues are linked. They\\n    // are not resetable nodes so this operation doesn't matter and actually\\n    // removes browser-default values (eg \\\"Submit Query\\\") when no value is\\n    // provided.\\n\\n    switch (props.type) {\\n      case 'submit':\\n      case 'reset':\\n        break;\\n      case 'color':\\n      case 'date':\\n      case 'datetime':\\n      case 'datetime-local':\\n      case 'month':\\n      case 'time':\\n      case 'week':\\n        // This fixes the no-show issue on iOS Safari and Android Chrome:\\n        // https://github.com/facebook/react/issues/7233\\n        node.value = '';\\n        node.value = node.defaultValue;\\n        break;\\n      default:\\n        node.value = node.value;\\n        break;\\n    }\\n\\n    // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug\\n    // this is needed to work around a chrome bug where setting defaultChecked\\n    // will sometimes influence the value of checked (even after detachment).\\n    // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416\\n    // We need to temporarily unset name to avoid disrupting radio button groups.\\n    var name = node.name;\\n    if (name !== '') {\\n      node.name = '';\\n    }\\n    node.defaultChecked = !node.defaultChecked;\\n    node.defaultChecked = !node.defaultChecked;\\n    if (name !== '') {\\n      node.name = name;\\n    }\\n  }\\n};\\n\\nfunction _handleChange(event) {\\n  var props = this._currentElement.props;\\n\\n  var returnValue = LinkedValueUtils.executeOnChange(props, event);\\n\\n  // Here we use asap to wait until all updates have propagated, which\\n  // is important when using controlled components within layers:\\n  // https://github.com/facebook/react/issues/1698\\n  ReactUpdates.asap(forceUpdateIfMounted, this);\\n\\n  var name = props.name;\\n  if (props.type === 'radio' && name != null) {\\n    var rootNode = ReactDOMComponentTree.getNodeFromInstance(this);\\n    var queryRoot = rootNode;\\n\\n    while (queryRoot.parentNode) {\\n      queryRoot = queryRoot.parentNode;\\n    }\\n\\n    // If `rootNode.form` was non-null, then we could try `form.elements`,\\n    // but that sometimes behaves strangely in IE8. We could also try using\\n    // `form.getElementsByName`, but that will only return direct children\\n    // and won't include inputs that use the HTML5 `form=` attribute. Since\\n    // the input might not even be in a form, let's just use the global\\n    // `querySelectorAll` to ensure we don't miss anything.\\n    var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\\\"radio\\\"]');\\n\\n    for (var i = 0; i < group.length; i++) {\\n      var otherNode = group[i];\\n      if (otherNode === rootNode || otherNode.form !== rootNode.form) {\\n        continue;\\n      }\\n      // This will throw if radio buttons rendered by different copies of React\\n      // and the same name are rendered into the same form (same as #1939).\\n      // That's probably okay; we don't support it just as we don't support\\n      // mixing React radio buttons with non-React ones.\\n      var otherInstance = ReactDOMComponentTree.getInstanceFromNode(otherNode);\\n      !otherInstance ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.') : _prodInvariant('90') : void 0;\\n      // If this is a controlled radio button group, forcing the input that\\n      // was previously checked to update will cause it to be come re-checked\\n      // as appropriate.\\n      ReactUpdates.asap(forceUpdateIfMounted, otherInstance);\\n    }\\n  }\\n\\n  return returnValue;\\n}\\n\\nmodule.exports = ReactDOMInput;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOMInput.js\\n// module id = 186\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOMInput.js?\");\n\n/***/ },\n/* 187 */\n/*!*********************************************!*\\\n  !*** ./~/react-dom/lib/LinkedValueUtils.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar React = __webpack_require__(/*! react/lib/React */ 2);\\nvar ReactPropTypesSecret = __webpack_require__(/*! ./ReactPropTypesSecret */ 188);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar hasReadOnlyValue = {\\n  'button': true,\\n  'checkbox': true,\\n  'image': true,\\n  'hidden': true,\\n  'radio': true,\\n  'reset': true,\\n  'submit': true\\n};\\n\\nfunction _assertSingleLink(inputProps) {\\n  !(inputProps.checkedLink == null || inputProps.valueLink == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use checkedLink, you probably don\\\\'t want to use valueLink and vice versa.') : _prodInvariant('87') : void 0;\\n}\\nfunction _assertValueLink(inputProps) {\\n  _assertSingleLink(inputProps);\\n  !(inputProps.value == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want to use value or onChange, you probably don\\\\'t want to use valueLink.') : _prodInvariant('88') : void 0;\\n}\\n\\nfunction _assertCheckedLink(inputProps) {\\n  _assertSingleLink(inputProps);\\n  !(inputProps.checked == null && inputProps.onChange == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. If you want to use checked or onChange, you probably don\\\\'t want to use checkedLink') : _prodInvariant('89') : void 0;\\n}\\n\\nvar propTypes = {\\n  value: function (props, propName, componentName) {\\n    if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) {\\n      return null;\\n    }\\n    return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\\n  },\\n  checked: function (props, propName, componentName) {\\n    if (!props[propName] || props.onChange || props.readOnly || props.disabled) {\\n      return null;\\n    }\\n    return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\\n  },\\n  onChange: React.PropTypes.func\\n};\\n\\nvar loggedTypeFailures = {};\\nfunction getDeclarationErrorAddendum(owner) {\\n  if (owner) {\\n    var name = owner.getName();\\n    if (name) {\\n      return ' Check the render method of `' + name + '`.';\\n    }\\n  }\\n  return '';\\n}\\n\\n/**\\n * Provide a linked `value` attribute for controlled forms. You should not use\\n * this outside of the ReactDOM controlled form components.\\n */\\nvar LinkedValueUtils = {\\n  checkPropTypes: function (tagName, props, owner) {\\n    for (var propName in propTypes) {\\n      if (propTypes.hasOwnProperty(propName)) {\\n        var error = propTypes[propName](props, propName, tagName, 'prop', null, ReactPropTypesSecret);\\n      }\\n      if (error instanceof Error && !(error.message in loggedTypeFailures)) {\\n        // Only monitor this failure once because there tends to be a lot of the\\n        // same error.\\n        loggedTypeFailures[error.message] = true;\\n\\n        var addendum = getDeclarationErrorAddendum(owner);\\n        process.env.NODE_ENV !== 'production' ? warning(false, 'Failed form propType: %s%s', error.message, addendum) : void 0;\\n      }\\n    }\\n  },\\n\\n  /**\\n   * @param {object} inputProps Props for form component\\n   * @return {*} current value of the input either from value prop or link.\\n   */\\n  getValue: function (inputProps) {\\n    if (inputProps.valueLink) {\\n      _assertValueLink(inputProps);\\n      return inputProps.valueLink.value;\\n    }\\n    return inputProps.value;\\n  },\\n\\n  /**\\n   * @param {object} inputProps Props for form component\\n   * @return {*} current checked status of the input either from checked prop\\n   *             or link.\\n   */\\n  getChecked: function (inputProps) {\\n    if (inputProps.checkedLink) {\\n      _assertCheckedLink(inputProps);\\n      return inputProps.checkedLink.value;\\n    }\\n    return inputProps.checked;\\n  },\\n\\n  /**\\n   * @param {object} inputProps Props for form component\\n   * @param {SyntheticEvent} event change event to handle\\n   */\\n  executeOnChange: function (inputProps, event) {\\n    if (inputProps.valueLink) {\\n      _assertValueLink(inputProps);\\n      return inputProps.valueLink.requestChange(event.target.value);\\n    } else if (inputProps.checkedLink) {\\n      _assertCheckedLink(inputProps);\\n      return inputProps.checkedLink.requestChange(event.target.checked);\\n    } else if (inputProps.onChange) {\\n      return inputProps.onChange.call(undefined, event);\\n    }\\n  }\\n};\\n\\nmodule.exports = LinkedValueUtils;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/LinkedValueUtils.js\\n// module id = 187\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/LinkedValueUtils.js?\");\n\n/***/ },\n/* 188 */\n/*!*************************************************!*\\\n  !*** ./~/react-dom/lib/ReactPropTypesSecret.js ***!\n  \\*************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\\n\\nmodule.exports = ReactPropTypesSecret;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactPropTypesSecret.js\\n// module id = 188\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactPropTypesSecret.js?\");\n\n/***/ },\n/* 189 */\n/*!*******************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOMOption.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar React = __webpack_require__(/*! react/lib/React */ 2);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\nvar ReactDOMSelect = __webpack_require__(/*! ./ReactDOMSelect */ 190);\\n\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\nvar didWarnInvalidOptionChildren = false;\\n\\nfunction flattenChildren(children) {\\n  var content = '';\\n\\n  // Flatten children and warn if they aren't strings or numbers;\\n  // invalid types are ignored.\\n  React.Children.forEach(children, function (child) {\\n    if (child == null) {\\n      return;\\n    }\\n    if (typeof child === 'string' || typeof child === 'number') {\\n      content += child;\\n    } else if (!didWarnInvalidOptionChildren) {\\n      didWarnInvalidOptionChildren = true;\\n      process.env.NODE_ENV !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : void 0;\\n    }\\n  });\\n\\n  return content;\\n}\\n\\n/**\\n * Implements an <option> host component that warns when `selected` is set.\\n */\\nvar ReactDOMOption = {\\n  mountWrapper: function (inst, props, hostParent) {\\n    // TODO (yungsters): Remove support for `selected` in <option>.\\n    if (process.env.NODE_ENV !== 'production') {\\n      process.env.NODE_ENV !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : void 0;\\n    }\\n\\n    // Look up whether this option is 'selected'\\n    var selectValue = null;\\n    if (hostParent != null) {\\n      var selectParent = hostParent;\\n\\n      if (selectParent._tag === 'optgroup') {\\n        selectParent = selectParent._hostParent;\\n      }\\n\\n      if (selectParent != null && selectParent._tag === 'select') {\\n        selectValue = ReactDOMSelect.getSelectValueContext(selectParent);\\n      }\\n    }\\n\\n    // If the value is null (e.g., no specified value or after initial mount)\\n    // or missing (e.g., for <datalist>), we don't change props.selected\\n    var selected = null;\\n    if (selectValue != null) {\\n      var value;\\n      if (props.value != null) {\\n        value = props.value + '';\\n      } else {\\n        value = flattenChildren(props.children);\\n      }\\n      selected = false;\\n      if (Array.isArray(selectValue)) {\\n        // multiple\\n        for (var i = 0; i < selectValue.length; i++) {\\n          if ('' + selectValue[i] === value) {\\n            selected = true;\\n            break;\\n          }\\n        }\\n      } else {\\n        selected = '' + selectValue === value;\\n      }\\n    }\\n\\n    inst._wrapperState = { selected: selected };\\n  },\\n\\n  postMountWrapper: function (inst) {\\n    // value=\\\"\\\" should make a value attribute (#6219)\\n    var props = inst._currentElement.props;\\n    if (props.value != null) {\\n      var node = ReactDOMComponentTree.getNodeFromInstance(inst);\\n      node.setAttribute('value', props.value);\\n    }\\n  },\\n\\n  getHostProps: function (inst, props) {\\n    var hostProps = _assign({ selected: undefined, children: undefined }, props);\\n\\n    // Read state only from initial mount because <select> updates value\\n    // manually; we need the initial state only for server rendering\\n    if (inst._wrapperState.selected != null) {\\n      hostProps.selected = inst._wrapperState.selected;\\n    }\\n\\n    var content = flattenChildren(props.children);\\n\\n    if (content) {\\n      hostProps.children = content;\\n    }\\n\\n    return hostProps;\\n  }\\n\\n};\\n\\nmodule.exports = ReactDOMOption;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOMOption.js\\n// module id = 189\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOMOption.js?\");\n\n/***/ },\n/* 190 */\n/*!*******************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOMSelect.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar LinkedValueUtils = __webpack_require__(/*! ./LinkedValueUtils */ 187);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 134);\\n\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar didWarnValueLink = false;\\nvar didWarnValueDefaultValue = false;\\n\\nfunction updateOptionsIfPendingUpdateAndMounted() {\\n  if (this._rootNodeID && this._wrapperState.pendingUpdate) {\\n    this._wrapperState.pendingUpdate = false;\\n\\n    var props = this._currentElement.props;\\n    var value = LinkedValueUtils.getValue(props);\\n\\n    if (value != null) {\\n      updateOptions(this, Boolean(props.multiple), value);\\n    }\\n  }\\n}\\n\\nfunction getDeclarationErrorAddendum(owner) {\\n  if (owner) {\\n    var name = owner.getName();\\n    if (name) {\\n      return ' Check the render method of `' + name + '`.';\\n    }\\n  }\\n  return '';\\n}\\n\\nvar valuePropNames = ['value', 'defaultValue'];\\n\\n/**\\n * Validation function for `value` and `defaultValue`.\\n * @private\\n */\\nfunction checkSelectPropTypes(inst, props) {\\n  var owner = inst._currentElement._owner;\\n  LinkedValueUtils.checkPropTypes('select', props, owner);\\n\\n  if (props.valueLink !== undefined && !didWarnValueLink) {\\n    process.env.NODE_ENV !== 'production' ? warning(false, '`valueLink` prop on `select` is deprecated; set `value` and `onChange` instead.') : void 0;\\n    didWarnValueLink = true;\\n  }\\n\\n  for (var i = 0; i < valuePropNames.length; i++) {\\n    var propName = valuePropNames[i];\\n    if (props[propName] == null) {\\n      continue;\\n    }\\n    var isArray = Array.isArray(props[propName]);\\n    if (props.multiple && !isArray) {\\n      process.env.NODE_ENV !== 'production' ? warning(false, 'The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum(owner)) : void 0;\\n    } else if (!props.multiple && isArray) {\\n      process.env.NODE_ENV !== 'production' ? warning(false, 'The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum(owner)) : void 0;\\n    }\\n  }\\n}\\n\\n/**\\n * @param {ReactDOMComponent} inst\\n * @param {boolean} multiple\\n * @param {*} propValue A stringable (with `multiple`, a list of stringables).\\n * @private\\n */\\nfunction updateOptions(inst, multiple, propValue) {\\n  var selectedValue, i;\\n  var options = ReactDOMComponentTree.getNodeFromInstance(inst).options;\\n\\n  if (multiple) {\\n    selectedValue = {};\\n    for (i = 0; i < propValue.length; i++) {\\n      selectedValue['' + propValue[i]] = true;\\n    }\\n    for (i = 0; i < options.length; i++) {\\n      var selected = selectedValue.hasOwnProperty(options[i].value);\\n      if (options[i].selected !== selected) {\\n        options[i].selected = selected;\\n      }\\n    }\\n  } else {\\n    // Do not set `select.value` as exact behavior isn't consistent across all\\n    // browsers for all cases.\\n    selectedValue = '' + propValue;\\n    for (i = 0; i < options.length; i++) {\\n      if (options[i].value === selectedValue) {\\n        options[i].selected = true;\\n        return;\\n      }\\n    }\\n    if (options.length) {\\n      options[0].selected = true;\\n    }\\n  }\\n}\\n\\n/**\\n * Implements a <select> host component that allows optionally setting the\\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\\n * stringable. If `multiple` is true, the prop must be an array of stringables.\\n *\\n * If `value` is not supplied (or null/undefined), user actions that change the\\n * selected option will trigger updates to the rendered options.\\n *\\n * If it is supplied (and not null/undefined), the rendered options will not\\n * update in response to user actions. Instead, the `value` prop must change in\\n * order for the rendered options to update.\\n *\\n * If `defaultValue` is provided, any options with the supplied values will be\\n * selected.\\n */\\nvar ReactDOMSelect = {\\n  getHostProps: function (inst, props) {\\n    return _assign({}, props, {\\n      onChange: inst._wrapperState.onChange,\\n      value: undefined\\n    });\\n  },\\n\\n  mountWrapper: function (inst, props) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      checkSelectPropTypes(inst, props);\\n    }\\n\\n    var value = LinkedValueUtils.getValue(props);\\n    inst._wrapperState = {\\n      pendingUpdate: false,\\n      initialValue: value != null ? value : props.defaultValue,\\n      listeners: null,\\n      onChange: _handleChange.bind(inst),\\n      wasMultiple: Boolean(props.multiple)\\n    };\\n\\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\\n      process.env.NODE_ENV !== 'production' ? warning(false, 'Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;\\n      didWarnValueDefaultValue = true;\\n    }\\n  },\\n\\n  getSelectValueContext: function (inst) {\\n    // ReactDOMOption looks at this initial value so the initial generated\\n    // markup has correct `selected` attributes\\n    return inst._wrapperState.initialValue;\\n  },\\n\\n  postUpdateWrapper: function (inst) {\\n    var props = inst._currentElement.props;\\n\\n    // After the initial mount, we control selected-ness manually so don't pass\\n    // this value down\\n    inst._wrapperState.initialValue = undefined;\\n\\n    var wasMultiple = inst._wrapperState.wasMultiple;\\n    inst._wrapperState.wasMultiple = Boolean(props.multiple);\\n\\n    var value = LinkedValueUtils.getValue(props);\\n    if (value != null) {\\n      inst._wrapperState.pendingUpdate = false;\\n      updateOptions(inst, Boolean(props.multiple), value);\\n    } else if (wasMultiple !== Boolean(props.multiple)) {\\n      // For simplicity, reapply `defaultValue` if `multiple` is toggled.\\n      if (props.defaultValue != null) {\\n        updateOptions(inst, Boolean(props.multiple), props.defaultValue);\\n      } else {\\n        // Revert the select back to its default unselected state.\\n        updateOptions(inst, Boolean(props.multiple), props.multiple ? [] : '');\\n      }\\n    }\\n  }\\n};\\n\\nfunction _handleChange(event) {\\n  var props = this._currentElement.props;\\n  var returnValue = LinkedValueUtils.executeOnChange(props, event);\\n\\n  if (this._rootNodeID) {\\n    this._wrapperState.pendingUpdate = true;\\n  }\\n  ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this);\\n  return returnValue;\\n}\\n\\nmodule.exports = ReactDOMSelect;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOMSelect.js\\n// module id = 190\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOMSelect.js?\");\n\n/***/ },\n/* 191 */\n/*!*********************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOMTextarea.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113),\\n    _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar LinkedValueUtils = __webpack_require__(/*! ./LinkedValueUtils */ 187);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 134);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar didWarnValueLink = false;\\nvar didWarnValDefaultVal = false;\\n\\nfunction forceUpdateIfMounted() {\\n  if (this._rootNodeID) {\\n    // DOM component is still mounted; update\\n    ReactDOMTextarea.updateWrapper(this);\\n  }\\n}\\n\\n/**\\n * Implements a <textarea> host component that allows setting `value`, and\\n * `defaultValue`. This differs from the traditional DOM API because value is\\n * usually set as PCDATA children.\\n *\\n * If `value` is not supplied (or null/undefined), user actions that affect the\\n * value will trigger updates to the element.\\n *\\n * If `value` is supplied (and not null/undefined), the rendered element will\\n * not trigger updates to the element. Instead, the `value` prop must change in\\n * order for the rendered element to be updated.\\n *\\n * The rendered element will be initialized with an empty value, the prop\\n * `defaultValue` if specified, or the children content (deprecated).\\n */\\nvar ReactDOMTextarea = {\\n  getHostProps: function (inst, props) {\\n    !(props.dangerouslySetInnerHTML == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : _prodInvariant('91') : void 0;\\n\\n    // Always set children to the same thing. In IE9, the selection range will\\n    // get reset if `textContent` is mutated.  We could add a check in setTextContent\\n    // to only set the value if/when the value differs from the node value (which would\\n    // completely solve this IE9 bug), but Sebastian+Ben seemed to like this solution.\\n    // The value can be a boolean or object so that's why it's forced to be a string.\\n    var hostProps = _assign({}, props, {\\n      value: undefined,\\n      defaultValue: undefined,\\n      children: '' + inst._wrapperState.initialValue,\\n      onChange: inst._wrapperState.onChange\\n    });\\n\\n    return hostProps;\\n  },\\n\\n  mountWrapper: function (inst, props) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      LinkedValueUtils.checkPropTypes('textarea', props, inst._currentElement._owner);\\n      if (props.valueLink !== undefined && !didWarnValueLink) {\\n        process.env.NODE_ENV !== 'production' ? warning(false, '`valueLink` prop on `textarea` is deprecated; set `value` and `onChange` instead.') : void 0;\\n        didWarnValueLink = true;\\n      }\\n      if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {\\n        process.env.NODE_ENV !== 'production' ? warning(false, 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;\\n        didWarnValDefaultVal = true;\\n      }\\n    }\\n\\n    var value = LinkedValueUtils.getValue(props);\\n    var initialValue = value;\\n\\n    // Only bother fetching default value if we're going to use it\\n    if (value == null) {\\n      var defaultValue = props.defaultValue;\\n      // TODO (yungsters): Remove support for children content in <textarea>.\\n      var children = props.children;\\n      if (children != null) {\\n        if (process.env.NODE_ENV !== 'production') {\\n          process.env.NODE_ENV !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : void 0;\\n        }\\n        !(defaultValue == null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : _prodInvariant('92') : void 0;\\n        if (Array.isArray(children)) {\\n          !(children.length <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : _prodInvariant('93') : void 0;\\n          children = children[0];\\n        }\\n\\n        defaultValue = '' + children;\\n      }\\n      if (defaultValue == null) {\\n        defaultValue = '';\\n      }\\n      initialValue = defaultValue;\\n    }\\n\\n    inst._wrapperState = {\\n      initialValue: '' + initialValue,\\n      listeners: null,\\n      onChange: _handleChange.bind(inst)\\n    };\\n  },\\n\\n  updateWrapper: function (inst) {\\n    var props = inst._currentElement.props;\\n\\n    var node = ReactDOMComponentTree.getNodeFromInstance(inst);\\n    var value = LinkedValueUtils.getValue(props);\\n    if (value != null) {\\n      // Cast `value` to a string to ensure the value is set correctly. While\\n      // browsers typically do this as necessary, jsdom doesn't.\\n      var newValue = '' + value;\\n\\n      // To avoid side effects (such as losing text selection), only set value if changed\\n      if (newValue !== node.value) {\\n        node.value = newValue;\\n      }\\n      if (props.defaultValue == null) {\\n        node.defaultValue = newValue;\\n      }\\n    }\\n    if (props.defaultValue != null) {\\n      node.defaultValue = props.defaultValue;\\n    }\\n  },\\n\\n  postMountWrapper: function (inst) {\\n    // This is in postMount because we need access to the DOM node, which is not\\n    // available until after the component has mounted.\\n    var node = ReactDOMComponentTree.getNodeFromInstance(inst);\\n\\n    // Warning: node.value may be the empty string at this point (IE11) if placeholder is set.\\n    node.value = node.textContent; // Detach value from defaultValue\\n  }\\n};\\n\\nfunction _handleChange(event) {\\n  var props = this._currentElement.props;\\n  var returnValue = LinkedValueUtils.executeOnChange(props, event);\\n  ReactUpdates.asap(forceUpdateIfMounted, this);\\n  return returnValue;\\n}\\n\\nmodule.exports = ReactDOMTextarea;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOMTextarea.js\\n// module id = 191\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOMTextarea.js?\");\n\n/***/ },\n/* 192 */\n/*!********************************************!*\\\n  !*** ./~/react-dom/lib/ReactMultiChild.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar ReactComponentEnvironment = __webpack_require__(/*! ./ReactComponentEnvironment */ 193);\\nvar ReactInstanceMap = __webpack_require__(/*! ./ReactInstanceMap */ 194);\\nvar ReactInstrumentation = __webpack_require__(/*! ./ReactInstrumentation */ 140);\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! react/lib/ReactCurrentOwner */ 10);\\nvar ReactReconciler = __webpack_require__(/*! ./ReactReconciler */ 137);\\nvar ReactChildReconciler = __webpack_require__(/*! ./ReactChildReconciler */ 195);\\n\\nvar emptyFunction = __webpack_require__(/*! fbjs/lib/emptyFunction */ 12);\\nvar flattenChildren = __webpack_require__(/*! ./flattenChildren */ 210);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\n/**\\n * Make an update for markup to be rendered and inserted at a supplied index.\\n *\\n * @param {string} markup Markup that renders into an element.\\n * @param {number} toIndex Destination index.\\n * @private\\n */\\nfunction makeInsertMarkup(markup, afterNode, toIndex) {\\n  // NOTE: Null values reduce hidden classes.\\n  return {\\n    type: 'INSERT_MARKUP',\\n    content: markup,\\n    fromIndex: null,\\n    fromNode: null,\\n    toIndex: toIndex,\\n    afterNode: afterNode\\n  };\\n}\\n\\n/**\\n * Make an update for moving an existing element to another index.\\n *\\n * @param {number} fromIndex Source index of the existing element.\\n * @param {number} toIndex Destination index of the element.\\n * @private\\n */\\nfunction makeMove(child, afterNode, toIndex) {\\n  // NOTE: Null values reduce hidden classes.\\n  return {\\n    type: 'MOVE_EXISTING',\\n    content: null,\\n    fromIndex: child._mountIndex,\\n    fromNode: ReactReconciler.getHostNode(child),\\n    toIndex: toIndex,\\n    afterNode: afterNode\\n  };\\n}\\n\\n/**\\n * Make an update for removing an element at an index.\\n *\\n * @param {number} fromIndex Index of the element to remove.\\n * @private\\n */\\nfunction makeRemove(child, node) {\\n  // NOTE: Null values reduce hidden classes.\\n  return {\\n    type: 'REMOVE_NODE',\\n    content: null,\\n    fromIndex: child._mountIndex,\\n    fromNode: node,\\n    toIndex: null,\\n    afterNode: null\\n  };\\n}\\n\\n/**\\n * Make an update for setting the markup of a node.\\n *\\n * @param {string} markup Markup that renders into an element.\\n * @private\\n */\\nfunction makeSetMarkup(markup) {\\n  // NOTE: Null values reduce hidden classes.\\n  return {\\n    type: 'SET_MARKUP',\\n    content: markup,\\n    fromIndex: null,\\n    fromNode: null,\\n    toIndex: null,\\n    afterNode: null\\n  };\\n}\\n\\n/**\\n * Make an update for setting the text content.\\n *\\n * @param {string} textContent Text content to set.\\n * @private\\n */\\nfunction makeTextContent(textContent) {\\n  // NOTE: Null values reduce hidden classes.\\n  return {\\n    type: 'TEXT_CONTENT',\\n    content: textContent,\\n    fromIndex: null,\\n    fromNode: null,\\n    toIndex: null,\\n    afterNode: null\\n  };\\n}\\n\\n/**\\n * Push an update, if any, onto the queue. Creates a new queue if none is\\n * passed and always returns the queue. Mutative.\\n */\\nfunction enqueue(queue, update) {\\n  if (update) {\\n    queue = queue || [];\\n    queue.push(update);\\n  }\\n  return queue;\\n}\\n\\n/**\\n * Processes any enqueued updates.\\n *\\n * @private\\n */\\nfunction processQueue(inst, updateQueue) {\\n  ReactComponentEnvironment.processChildrenUpdates(inst, updateQueue);\\n}\\n\\nvar setChildrenForInstrumentation = emptyFunction;\\nif (process.env.NODE_ENV !== 'production') {\\n  var getDebugID = function (inst) {\\n    if (!inst._debugID) {\\n      // Check for ART-like instances. TODO: This is silly/gross.\\n      var internal;\\n      if (internal = ReactInstanceMap.get(inst)) {\\n        inst = internal;\\n      }\\n    }\\n    return inst._debugID;\\n  };\\n  setChildrenForInstrumentation = function (children) {\\n    var debugID = getDebugID(this);\\n    // TODO: React Native empty components are also multichild.\\n    // This means they still get into this method but don't have _debugID.\\n    if (debugID !== 0) {\\n      ReactInstrumentation.debugTool.onSetChildren(debugID, children ? Object.keys(children).map(function (key) {\\n        return children[key]._debugID;\\n      }) : []);\\n    }\\n  };\\n}\\n\\n/**\\n * ReactMultiChild are capable of reconciling multiple children.\\n *\\n * @class ReactMultiChild\\n * @internal\\n */\\nvar ReactMultiChild = {\\n\\n  /**\\n   * Provides common functionality for components that must reconcile multiple\\n   * children. This is used by `ReactDOMComponent` to mount, update, and\\n   * unmount child components.\\n   *\\n   * @lends {ReactMultiChild.prototype}\\n   */\\n  Mixin: {\\n\\n    _reconcilerInstantiateChildren: function (nestedChildren, transaction, context) {\\n      if (process.env.NODE_ENV !== 'production') {\\n        var selfDebugID = getDebugID(this);\\n        if (this._currentElement) {\\n          try {\\n            ReactCurrentOwner.current = this._currentElement._owner;\\n            return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context, selfDebugID);\\n          } finally {\\n            ReactCurrentOwner.current = null;\\n          }\\n        }\\n      }\\n      return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);\\n    },\\n\\n    _reconcilerUpdateChildren: function (prevChildren, nextNestedChildrenElements, mountImages, removedNodes, transaction, context) {\\n      var nextChildren;\\n      var selfDebugID = 0;\\n      if (process.env.NODE_ENV !== 'production') {\\n        selfDebugID = getDebugID(this);\\n        if (this._currentElement) {\\n          try {\\n            ReactCurrentOwner.current = this._currentElement._owner;\\n            nextChildren = flattenChildren(nextNestedChildrenElements, selfDebugID);\\n          } finally {\\n            ReactCurrentOwner.current = null;\\n          }\\n          ReactChildReconciler.updateChildren(prevChildren, nextChildren, mountImages, removedNodes, transaction, this, this._hostContainerInfo, context, selfDebugID);\\n          return nextChildren;\\n        }\\n      }\\n      nextChildren = flattenChildren(nextNestedChildrenElements, selfDebugID);\\n      ReactChildReconciler.updateChildren(prevChildren, nextChildren, mountImages, removedNodes, transaction, this, this._hostContainerInfo, context, selfDebugID);\\n      return nextChildren;\\n    },\\n\\n    /**\\n     * Generates a \\\"mount image\\\" for each of the supplied children. In the case\\n     * of `ReactDOMComponent`, a mount image is a string of markup.\\n     *\\n     * @param {?object} nestedChildren Nested child maps.\\n     * @return {array} An array of mounted representations.\\n     * @internal\\n     */\\n    mountChildren: function (nestedChildren, transaction, context) {\\n      var children = this._reconcilerInstantiateChildren(nestedChildren, transaction, context);\\n      this._renderedChildren = children;\\n\\n      var mountImages = [];\\n      var index = 0;\\n      for (var name in children) {\\n        if (children.hasOwnProperty(name)) {\\n          var child = children[name];\\n          var selfDebugID = 0;\\n          if (process.env.NODE_ENV !== 'production') {\\n            selfDebugID = getDebugID(this);\\n          }\\n          var mountImage = ReactReconciler.mountComponent(child, transaction, this, this._hostContainerInfo, context, selfDebugID);\\n          child._mountIndex = index++;\\n          mountImages.push(mountImage);\\n        }\\n      }\\n\\n      if (process.env.NODE_ENV !== 'production') {\\n        setChildrenForInstrumentation.call(this, children);\\n      }\\n\\n      return mountImages;\\n    },\\n\\n    /**\\n     * Replaces any rendered children with a text content string.\\n     *\\n     * @param {string} nextContent String of content.\\n     * @internal\\n     */\\n    updateTextContent: function (nextContent) {\\n      var prevChildren = this._renderedChildren;\\n      // Remove any rendered children.\\n      ReactChildReconciler.unmountChildren(prevChildren, false);\\n      for (var name in prevChildren) {\\n        if (prevChildren.hasOwnProperty(name)) {\\n           true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : _prodInvariant('118') : void 0;\\n        }\\n      }\\n      // Set new text content.\\n      var updates = [makeTextContent(nextContent)];\\n      processQueue(this, updates);\\n    },\\n\\n    /**\\n     * Replaces any rendered children with a markup string.\\n     *\\n     * @param {string} nextMarkup String of markup.\\n     * @internal\\n     */\\n    updateMarkup: function (nextMarkup) {\\n      var prevChildren = this._renderedChildren;\\n      // Remove any rendered children.\\n      ReactChildReconciler.unmountChildren(prevChildren, false);\\n      for (var name in prevChildren) {\\n        if (prevChildren.hasOwnProperty(name)) {\\n           true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : _prodInvariant('118') : void 0;\\n        }\\n      }\\n      var updates = [makeSetMarkup(nextMarkup)];\\n      processQueue(this, updates);\\n    },\\n\\n    /**\\n     * Updates the rendered children with new children.\\n     *\\n     * @param {?object} nextNestedChildrenElements Nested child element maps.\\n     * @param {ReactReconcileTransaction} transaction\\n     * @internal\\n     */\\n    updateChildren: function (nextNestedChildrenElements, transaction, context) {\\n      // Hook used by React ART\\n      this._updateChildren(nextNestedChildrenElements, transaction, context);\\n    },\\n\\n    /**\\n     * @param {?object} nextNestedChildrenElements Nested child element maps.\\n     * @param {ReactReconcileTransaction} transaction\\n     * @final\\n     * @protected\\n     */\\n    _updateChildren: function (nextNestedChildrenElements, transaction, context) {\\n      var prevChildren = this._renderedChildren;\\n      var removedNodes = {};\\n      var mountImages = [];\\n      var nextChildren = this._reconcilerUpdateChildren(prevChildren, nextNestedChildrenElements, mountImages, removedNodes, transaction, context);\\n      if (!nextChildren && !prevChildren) {\\n        return;\\n      }\\n      var updates = null;\\n      var name;\\n      // `nextIndex` will increment for each child in `nextChildren`, but\\n      // `lastIndex` will be the last index visited in `prevChildren`.\\n      var nextIndex = 0;\\n      var lastIndex = 0;\\n      // `nextMountIndex` will increment for each newly mounted child.\\n      var nextMountIndex = 0;\\n      var lastPlacedNode = null;\\n      for (name in nextChildren) {\\n        if (!nextChildren.hasOwnProperty(name)) {\\n          continue;\\n        }\\n        var prevChild = prevChildren && prevChildren[name];\\n        var nextChild = nextChildren[name];\\n        if (prevChild === nextChild) {\\n          updates = enqueue(updates, this.moveChild(prevChild, lastPlacedNode, nextIndex, lastIndex));\\n          lastIndex = Math.max(prevChild._mountIndex, lastIndex);\\n          prevChild._mountIndex = nextIndex;\\n        } else {\\n          if (prevChild) {\\n            // Update `lastIndex` before `_mountIndex` gets unset by unmounting.\\n            lastIndex = Math.max(prevChild._mountIndex, lastIndex);\\n            // The `removedNodes` loop below will actually remove the child.\\n          }\\n          // The child must be instantiated before it's mounted.\\n          updates = enqueue(updates, this._mountChildAtIndex(nextChild, mountImages[nextMountIndex], lastPlacedNode, nextIndex, transaction, context));\\n          nextMountIndex++;\\n        }\\n        nextIndex++;\\n        lastPlacedNode = ReactReconciler.getHostNode(nextChild);\\n      }\\n      // Remove children that are no longer present.\\n      for (name in removedNodes) {\\n        if (removedNodes.hasOwnProperty(name)) {\\n          updates = enqueue(updates, this._unmountChild(prevChildren[name], removedNodes[name]));\\n        }\\n      }\\n      if (updates) {\\n        processQueue(this, updates);\\n      }\\n      this._renderedChildren = nextChildren;\\n\\n      if (process.env.NODE_ENV !== 'production') {\\n        setChildrenForInstrumentation.call(this, nextChildren);\\n      }\\n    },\\n\\n    /**\\n     * Unmounts all rendered children. This should be used to clean up children\\n     * when this component is unmounted. It does not actually perform any\\n     * backend operations.\\n     *\\n     * @internal\\n     */\\n    unmountChildren: function (safely) {\\n      var renderedChildren = this._renderedChildren;\\n      ReactChildReconciler.unmountChildren(renderedChildren, safely);\\n      this._renderedChildren = null;\\n    },\\n\\n    /**\\n     * Moves a child component to the supplied index.\\n     *\\n     * @param {ReactComponent} child Component to move.\\n     * @param {number} toIndex Destination index of the element.\\n     * @param {number} lastIndex Last index visited of the siblings of `child`.\\n     * @protected\\n     */\\n    moveChild: function (child, afterNode, toIndex, lastIndex) {\\n      // If the index of `child` is less than `lastIndex`, then it needs to\\n      // be moved. Otherwise, we do not need to move it because a child will be\\n      // inserted or moved before `child`.\\n      if (child._mountIndex < lastIndex) {\\n        return makeMove(child, afterNode, toIndex);\\n      }\\n    },\\n\\n    /**\\n     * Creates a child component.\\n     *\\n     * @param {ReactComponent} child Component to create.\\n     * @param {string} mountImage Markup to insert.\\n     * @protected\\n     */\\n    createChild: function (child, afterNode, mountImage) {\\n      return makeInsertMarkup(mountImage, afterNode, child._mountIndex);\\n    },\\n\\n    /**\\n     * Removes a child component.\\n     *\\n     * @param {ReactComponent} child Child to remove.\\n     * @protected\\n     */\\n    removeChild: function (child, node) {\\n      return makeRemove(child, node);\\n    },\\n\\n    /**\\n     * Mounts a child with the supplied name.\\n     *\\n     * NOTE: This is part of `updateChildren` and is here for readability.\\n     *\\n     * @param {ReactComponent} child Component to mount.\\n     * @param {string} name Name of the child.\\n     * @param {number} index Index at which to insert the child.\\n     * @param {ReactReconcileTransaction} transaction\\n     * @private\\n     */\\n    _mountChildAtIndex: function (child, mountImage, afterNode, index, transaction, context) {\\n      child._mountIndex = index;\\n      return this.createChild(child, afterNode, mountImage);\\n    },\\n\\n    /**\\n     * Unmounts a rendered child.\\n     *\\n     * NOTE: This is part of `updateChildren` and is here for readability.\\n     *\\n     * @param {ReactComponent} child Component to unmount.\\n     * @private\\n     */\\n    _unmountChild: function (child, node) {\\n      var update = this.removeChild(child, node);\\n      child._mountIndex = null;\\n      return update;\\n    }\\n\\n  }\\n\\n};\\n\\nmodule.exports = ReactMultiChild;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactMultiChild.js\\n// module id = 192\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactMultiChild.js?\");\n\n/***/ },\n/* 193 */\n/*!******************************************************!*\\\n  !*** ./~/react-dom/lib/ReactComponentEnvironment.js ***!\n  \\******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\nvar injected = false;\\n\\nvar ReactComponentEnvironment = {\\n\\n  /**\\n   * Optionally injectable hook for swapping out mount images in the middle of\\n   * the tree.\\n   */\\n  replaceNodeWithMarkup: null,\\n\\n  /**\\n   * Optionally injectable hook for processing a queue of child updates. Will\\n   * later move into MultiChildComponents.\\n   */\\n  processChildrenUpdates: null,\\n\\n  injection: {\\n    injectEnvironment: function (environment) {\\n      !!injected ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : _prodInvariant('104') : void 0;\\n      ReactComponentEnvironment.replaceNodeWithMarkup = environment.replaceNodeWithMarkup;\\n      ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;\\n      injected = true;\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = ReactComponentEnvironment;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactComponentEnvironment.js\\n// module id = 193\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactComponentEnvironment.js?\");\n\n/***/ },\n/* 194 */\n/*!*********************************************!*\\\n  !*** ./~/react-dom/lib/ReactInstanceMap.js ***!\n  \\*********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\n/**\\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\\n * instance (key) and the internal representation (value). This allows public\\n * methods to accept the user facing instance as an argument and map them back\\n * to internal methods.\\n */\\n\\n// TODO: Replace this with ES6: var ReactInstanceMap = new Map();\\n\\nvar ReactInstanceMap = {\\n\\n  /**\\n   * This API should be called `delete` but we'd have to make sure to always\\n   * transform these to strings for IE support. When this transform is fully\\n   * supported we can rename it.\\n   */\\n  remove: function (key) {\\n    key._reactInternalInstance = undefined;\\n  },\\n\\n  get: function (key) {\\n    return key._reactInternalInstance;\\n  },\\n\\n  has: function (key) {\\n    return key._reactInternalInstance !== undefined;\\n  },\\n\\n  set: function (key, value) {\\n    key._reactInternalInstance = value;\\n  }\\n\\n};\\n\\nmodule.exports = ReactInstanceMap;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactInstanceMap.js\\n// module id = 194\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactInstanceMap.js?\");\n\n/***/ },\n/* 195 */\n/*!*************************************************!*\\\n  !*** ./~/react-dom/lib/ReactChildReconciler.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ReactReconciler = __webpack_require__(/*! ./ReactReconciler */ 137);\\n\\nvar instantiateReactComponent = __webpack_require__(/*! ./instantiateReactComponent */ 196);\\nvar KeyEscapeUtils = __webpack_require__(/*! ./KeyEscapeUtils */ 206);\\nvar shouldUpdateReactComponent = __webpack_require__(/*! ./shouldUpdateReactComponent */ 202);\\nvar traverseAllChildren = __webpack_require__(/*! ./traverseAllChildren */ 207);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar ReactComponentTreeHook;\\n\\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {\\n  // Temporary hack.\\n  // Inline requires don't work well with Jest:\\n  // https://github.com/facebook/react/issues/7240\\n  // Remove the inline requires when we don't need them anymore:\\n  // https://github.com/facebook/react/pull/7178\\n  ReactComponentTreeHook = __webpack_require__(/*! react/lib/ReactComponentTreeHook */ 26);\\n}\\n\\nfunction instantiateChild(childInstances, child, name, selfDebugID) {\\n  // We found a component instance.\\n  var keyUnique = childInstances[name] === undefined;\\n  if (process.env.NODE_ENV !== 'production') {\\n    if (!ReactComponentTreeHook) {\\n      ReactComponentTreeHook = __webpack_require__(/*! react/lib/ReactComponentTreeHook */ 26);\\n    }\\n    if (!keyUnique) {\\n      process.env.NODE_ENV !== 'production' ? warning(false, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.%s', KeyEscapeUtils.unescape(name), ReactComponentTreeHook.getStackAddendumByID(selfDebugID)) : void 0;\\n    }\\n  }\\n  if (child != null && keyUnique) {\\n    childInstances[name] = instantiateReactComponent(child, true);\\n  }\\n}\\n\\n/**\\n * ReactChildReconciler provides helpers for initializing or updating a set of\\n * children. Its output is suitable for passing it onto ReactMultiChild which\\n * does diffed reordering and insertion.\\n */\\nvar ReactChildReconciler = {\\n  /**\\n   * Generates a \\\"mount image\\\" for each of the supplied children. In the case\\n   * of `ReactDOMComponent`, a mount image is a string of markup.\\n   *\\n   * @param {?object} nestedChildNodes Nested child maps.\\n   * @return {?object} A set of child instances.\\n   * @internal\\n   */\\n  instantiateChildren: function (nestedChildNodes, transaction, context, selfDebugID // 0 in production and for roots\\n  ) {\\n    if (nestedChildNodes == null) {\\n      return null;\\n    }\\n    var childInstances = {};\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      traverseAllChildren(nestedChildNodes, function (childInsts, child, name) {\\n        return instantiateChild(childInsts, child, name, selfDebugID);\\n      }, childInstances);\\n    } else {\\n      traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);\\n    }\\n    return childInstances;\\n  },\\n\\n  /**\\n   * Updates the rendered children and returns a new set of children.\\n   *\\n   * @param {?object} prevChildren Previously initialized set of children.\\n   * @param {?object} nextChildren Flat child element maps.\\n   * @param {ReactReconcileTransaction} transaction\\n   * @param {object} context\\n   * @return {?object} A new set of child instances.\\n   * @internal\\n   */\\n  updateChildren: function (prevChildren, nextChildren, mountImages, removedNodes, transaction, hostParent, hostContainerInfo, context, selfDebugID // 0 in production and for roots\\n  ) {\\n    // We currently don't have a way to track moves here but if we use iterators\\n    // instead of for..in we can zip the iterators and check if an item has\\n    // moved.\\n    // TODO: If nothing has changed, return the prevChildren object so that we\\n    // can quickly bailout if nothing has changed.\\n    if (!nextChildren && !prevChildren) {\\n      return;\\n    }\\n    var name;\\n    var prevChild;\\n    for (name in nextChildren) {\\n      if (!nextChildren.hasOwnProperty(name)) {\\n        continue;\\n      }\\n      prevChild = prevChildren && prevChildren[name];\\n      var prevElement = prevChild && prevChild._currentElement;\\n      var nextElement = nextChildren[name];\\n      if (prevChild != null && shouldUpdateReactComponent(prevElement, nextElement)) {\\n        ReactReconciler.receiveComponent(prevChild, nextElement, transaction, context);\\n        nextChildren[name] = prevChild;\\n      } else {\\n        if (prevChild) {\\n          removedNodes[name] = ReactReconciler.getHostNode(prevChild);\\n          ReactReconciler.unmountComponent(prevChild, false);\\n        }\\n        // The child must be instantiated before it's mounted.\\n        var nextChildInstance = instantiateReactComponent(nextElement, true);\\n        nextChildren[name] = nextChildInstance;\\n        // Creating mount image now ensures refs are resolved in right order\\n        // (see https://github.com/facebook/react/pull/7101 for explanation).\\n        var nextChildMountImage = ReactReconciler.mountComponent(nextChildInstance, transaction, hostParent, hostContainerInfo, context, selfDebugID);\\n        mountImages.push(nextChildMountImage);\\n      }\\n    }\\n    // Unmount children that are no longer present.\\n    for (name in prevChildren) {\\n      if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {\\n        prevChild = prevChildren[name];\\n        removedNodes[name] = ReactReconciler.getHostNode(prevChild);\\n        ReactReconciler.unmountComponent(prevChild, false);\\n      }\\n    }\\n  },\\n\\n  /**\\n   * Unmounts all rendered children. This should be used to clean up children\\n   * when this component is unmounted.\\n   *\\n   * @param {?object} renderedChildren Previously initialized set of children.\\n   * @internal\\n   */\\n  unmountChildren: function (renderedChildren, safely) {\\n    for (var name in renderedChildren) {\\n      if (renderedChildren.hasOwnProperty(name)) {\\n        var renderedChild = renderedChildren[name];\\n        ReactReconciler.unmountComponent(renderedChild, safely);\\n      }\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = ReactChildReconciler;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactChildReconciler.js\\n// module id = 195\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactChildReconciler.js?\");\n\n/***/ },\n/* 196 */\n/*!******************************************************!*\\\n  !*** ./~/react-dom/lib/instantiateReactComponent.js ***!\n  \\******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113),\\n    _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 197);\\nvar ReactEmptyComponent = __webpack_require__(/*! ./ReactEmptyComponent */ 203);\\nvar ReactHostComponent = __webpack_require__(/*! ./ReactHostComponent */ 204);\\n\\nvar getNextDebugID = __webpack_require__(/*! ./getNextDebugID */ 205);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\n// To avoid a cyclic dependency, we create the final class in this module\\nvar ReactCompositeComponentWrapper = function (element) {\\n  this.construct(element);\\n};\\n_assign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent, {\\n  _instantiateReactComponent: instantiateReactComponent\\n});\\n\\nfunction getDeclarationErrorAddendum(owner) {\\n  if (owner) {\\n    var name = owner.getName();\\n    if (name) {\\n      return ' Check the render method of `' + name + '`.';\\n    }\\n  }\\n  return '';\\n}\\n\\n/**\\n * Check if the type reference is a known internal type. I.e. not a user\\n * provided composite type.\\n *\\n * @param {function} type\\n * @return {boolean} Returns true if this is a valid internal type.\\n */\\nfunction isInternalComponentType(type) {\\n  return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';\\n}\\n\\n/**\\n * Given a ReactNode, create an instance that will actually be mounted.\\n *\\n * @param {ReactNode} node\\n * @param {boolean} shouldHaveDebugID\\n * @return {object} A new instance of the element's constructor.\\n * @protected\\n */\\nfunction instantiateReactComponent(node, shouldHaveDebugID) {\\n  var instance;\\n\\n  if (node === null || node === false) {\\n    instance = ReactEmptyComponent.create(instantiateReactComponent);\\n  } else if (typeof node === 'object') {\\n    var element = node;\\n    !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : _prodInvariant('130', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : void 0;\\n\\n    // Special case string values\\n    if (typeof element.type === 'string') {\\n      instance = ReactHostComponent.createInternalComponent(element);\\n    } else if (isInternalComponentType(element.type)) {\\n      // This is temporarily available for custom components that are not string\\n      // representations. I.e. ART. Once those are updated to use the string\\n      // representation, we can drop this code path.\\n      instance = new element.type(element);\\n\\n      // We renamed this. Allow the old name for compat. :(\\n      if (!instance.getHostNode) {\\n        instance.getHostNode = instance.getNativeNode;\\n      }\\n    } else {\\n      instance = new ReactCompositeComponentWrapper(element);\\n    }\\n  } else if (typeof node === 'string' || typeof node === 'number') {\\n    instance = ReactHostComponent.createInstanceForText(node);\\n  } else {\\n     true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : _prodInvariant('131', typeof node) : void 0;\\n  }\\n\\n  if (process.env.NODE_ENV !== 'production') {\\n    process.env.NODE_ENV !== 'production' ? warning(typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.getHostNode === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : void 0;\\n  }\\n\\n  // These two fields are used by the DOM and ART diffing algorithms\\n  // respectively. Instead of using expandos on components, we should be\\n  // storing the state needed by the diffing algorithms elsewhere.\\n  instance._mountIndex = 0;\\n  instance._mountImage = null;\\n\\n  if (process.env.NODE_ENV !== 'production') {\\n    instance._debugID = shouldHaveDebugID ? getNextDebugID() : 0;\\n  }\\n\\n  // Internal instances should fully constructed at this point, so they should\\n  // not get any new fields added to them at this point.\\n  if (process.env.NODE_ENV !== 'production') {\\n    if (Object.preventExtensions) {\\n      Object.preventExtensions(instance);\\n    }\\n  }\\n\\n  return instance;\\n}\\n\\nmodule.exports = instantiateReactComponent;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/instantiateReactComponent.js\\n// module id = 196\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/instantiateReactComponent.js?\");\n\n/***/ },\n/* 197 */\n/*!****************************************************!*\\\n  !*** ./~/react-dom/lib/ReactCompositeComponent.js ***!\n  \\****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113),\\n    _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar React = __webpack_require__(/*! react/lib/React */ 2);\\nvar ReactComponentEnvironment = __webpack_require__(/*! ./ReactComponentEnvironment */ 193);\\nvar ReactCurrentOwner = __webpack_require__(/*! react/lib/ReactCurrentOwner */ 10);\\nvar ReactErrorUtils = __webpack_require__(/*! ./ReactErrorUtils */ 123);\\nvar ReactInstanceMap = __webpack_require__(/*! ./ReactInstanceMap */ 194);\\nvar ReactInstrumentation = __webpack_require__(/*! ./ReactInstrumentation */ 140);\\nvar ReactNodeTypes = __webpack_require__(/*! ./ReactNodeTypes */ 198);\\nvar ReactReconciler = __webpack_require__(/*! ./ReactReconciler */ 137);\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  var checkReactTypeSpec = __webpack_require__(/*! ./checkReactTypeSpec */ 199);\\n}\\n\\nvar emptyObject = __webpack_require__(/*! fbjs/lib/emptyObject */ 20);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar shallowEqual = __webpack_require__(/*! fbjs/lib/shallowEqual */ 201);\\nvar shouldUpdateReactComponent = __webpack_require__(/*! ./shouldUpdateReactComponent */ 202);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar CompositeTypes = {\\n  ImpureClass: 0,\\n  PureClass: 1,\\n  StatelessFunctional: 2\\n};\\n\\nfunction StatelessComponent(Component) {}\\nStatelessComponent.prototype.render = function () {\\n  var Component = ReactInstanceMap.get(this)._currentElement.type;\\n  var element = Component(this.props, this.context, this.updater);\\n  warnIfInvalidElement(Component, element);\\n  return element;\\n};\\n\\nfunction warnIfInvalidElement(Component, element) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    process.env.NODE_ENV !== 'production' ? warning(element === null || element === false || React.isValidElement(element), '%s(...): A valid React element (or null) must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : void 0;\\n    process.env.NODE_ENV !== 'production' ? warning(!Component.childContextTypes, '%s(...): childContextTypes cannot be defined on a functional component.', Component.displayName || Component.name || 'Component') : void 0;\\n  }\\n}\\n\\nfunction shouldConstruct(Component) {\\n  return !!(Component.prototype && Component.prototype.isReactComponent);\\n}\\n\\nfunction isPureComponent(Component) {\\n  return !!(Component.prototype && Component.prototype.isPureReactComponent);\\n}\\n\\n// Separated into a function to contain deoptimizations caused by try/finally.\\nfunction measureLifeCyclePerf(fn, debugID, timerType) {\\n  if (debugID === 0) {\\n    // Top-level wrappers (see ReactMount) and empty components (see\\n    // ReactDOMEmptyComponent) are invisible to hooks and devtools.\\n    // Both are implementation details that should go away in the future.\\n    return fn();\\n  }\\n\\n  ReactInstrumentation.debugTool.onBeginLifeCycleTimer(debugID, timerType);\\n  try {\\n    return fn();\\n  } finally {\\n    ReactInstrumentation.debugTool.onEndLifeCycleTimer(debugID, timerType);\\n  }\\n}\\n\\n/**\\n * ------------------ The Life-Cycle of a Composite Component ------------------\\n *\\n * - constructor: Initialization of state. The instance is now retained.\\n *   - componentWillMount\\n *   - render\\n *   - [children's constructors]\\n *     - [children's componentWillMount and render]\\n *     - [children's componentDidMount]\\n *     - componentDidMount\\n *\\n *       Update Phases:\\n *       - componentWillReceiveProps (only called if parent updated)\\n *       - shouldComponentUpdate\\n *         - componentWillUpdate\\n *           - render\\n *           - [children's constructors or receive props phases]\\n *         - componentDidUpdate\\n *\\n *     - componentWillUnmount\\n *     - [children's componentWillUnmount]\\n *   - [children destroyed]\\n * - (destroyed): The instance is now blank, released by React and ready for GC.\\n *\\n * -----------------------------------------------------------------------------\\n */\\n\\n/**\\n * An incrementing ID assigned to each component when it is mounted. This is\\n * used to enforce the order in which `ReactUpdates` updates dirty components.\\n *\\n * @private\\n */\\nvar nextMountID = 1;\\n\\n/**\\n * @lends {ReactCompositeComponent.prototype}\\n */\\nvar ReactCompositeComponent = {\\n\\n  /**\\n   * Base constructor for all composite component.\\n   *\\n   * @param {ReactElement} element\\n   * @final\\n   * @internal\\n   */\\n  construct: function (element) {\\n    this._currentElement = element;\\n    this._rootNodeID = 0;\\n    this._compositeType = null;\\n    this._instance = null;\\n    this._hostParent = null;\\n    this._hostContainerInfo = null;\\n\\n    // See ReactUpdateQueue\\n    this._updateBatchNumber = null;\\n    this._pendingElement = null;\\n    this._pendingStateQueue = null;\\n    this._pendingReplaceState = false;\\n    this._pendingForceUpdate = false;\\n\\n    this._renderedNodeType = null;\\n    this._renderedComponent = null;\\n    this._context = null;\\n    this._mountOrder = 0;\\n    this._topLevelWrapper = null;\\n\\n    // See ReactUpdates and ReactUpdateQueue.\\n    this._pendingCallbacks = null;\\n\\n    // ComponentWillUnmount shall only be called once\\n    this._calledComponentWillUnmount = false;\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      this._warnedAboutRefsInRender = false;\\n    }\\n  },\\n\\n  /**\\n   * Initializes the component, renders markup, and registers event listeners.\\n   *\\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n   * @param {?object} hostParent\\n   * @param {?object} hostContainerInfo\\n   * @param {?object} context\\n   * @return {?string} Rendered markup to be inserted into the DOM.\\n   * @final\\n   * @internal\\n   */\\n  mountComponent: function (transaction, hostParent, hostContainerInfo, context) {\\n    var _this = this;\\n\\n    this._context = context;\\n    this._mountOrder = nextMountID++;\\n    this._hostParent = hostParent;\\n    this._hostContainerInfo = hostContainerInfo;\\n\\n    var publicProps = this._currentElement.props;\\n    var publicContext = this._processContext(context);\\n\\n    var Component = this._currentElement.type;\\n\\n    var updateQueue = transaction.getUpdateQueue();\\n\\n    // Initialize the public class\\n    var doConstruct = shouldConstruct(Component);\\n    var inst = this._constructComponent(doConstruct, publicProps, publicContext, updateQueue);\\n    var renderedElement;\\n\\n    // Support functional components\\n    if (!doConstruct && (inst == null || inst.render == null)) {\\n      renderedElement = inst;\\n      warnIfInvalidElement(Component, renderedElement);\\n      !(inst === null || inst === false || React.isValidElement(inst)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s(...): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : _prodInvariant('105', Component.displayName || Component.name || 'Component') : void 0;\\n      inst = new StatelessComponent(Component);\\n      this._compositeType = CompositeTypes.StatelessFunctional;\\n    } else {\\n      if (isPureComponent(Component)) {\\n        this._compositeType = CompositeTypes.PureClass;\\n      } else {\\n        this._compositeType = CompositeTypes.ImpureClass;\\n      }\\n    }\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      // This will throw later in _renderValidatedComponent, but add an early\\n      // warning now to help debugging\\n      if (inst.render == null) {\\n        process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', Component.displayName || Component.name || 'Component') : void 0;\\n      }\\n\\n      var propsMutated = inst.props !== publicProps;\\n      var componentName = Component.displayName || Component.name || 'Component';\\n\\n      process.env.NODE_ENV !== 'production' ? warning(inst.props === undefined || !propsMutated, '%s(...): When calling super() in `%s`, make sure to pass ' + 'up the same props that your component\\\\'s constructor was passed.', componentName, componentName) : void 0;\\n    }\\n\\n    // These should be set up in the constructor, but as a convenience for\\n    // simpler class abstractions, we set them up after the fact.\\n    inst.props = publicProps;\\n    inst.context = publicContext;\\n    inst.refs = emptyObject;\\n    inst.updater = updateQueue;\\n\\n    this._instance = inst;\\n\\n    // Store a reference from the instance back to the internal representation\\n    ReactInstanceMap.set(inst, this);\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      // Since plain JS classes are defined without any special initialization\\n      // logic, we can not catch common errors early. Therefore, we have to\\n      // catch them here, at initialization time, instead.\\n      process.env.NODE_ENV !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : void 0;\\n      process.env.NODE_ENV !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : void 0;\\n      process.env.NODE_ENV !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : void 0;\\n      process.env.NODE_ENV !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : void 0;\\n      process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentShouldUpdate !== 'function', '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', this.getName() || 'A component') : void 0;\\n      process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentDidUnmount !== 'function', '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', this.getName() || 'A component') : void 0;\\n      process.env.NODE_ENV !== 'production' ? warning(typeof inst.componentWillRecieveProps !== 'function', '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', this.getName() || 'A component') : void 0;\\n    }\\n\\n    var initialState = inst.state;\\n    if (initialState === undefined) {\\n      inst.state = initialState = null;\\n    }\\n    !(typeof initialState === 'object' && !Array.isArray(initialState)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : _prodInvariant('106', this.getName() || 'ReactCompositeComponent') : void 0;\\n\\n    this._pendingStateQueue = null;\\n    this._pendingReplaceState = false;\\n    this._pendingForceUpdate = false;\\n\\n    var markup;\\n    if (inst.unstable_handleError) {\\n      markup = this.performInitialMountWithErrorHandling(renderedElement, hostParent, hostContainerInfo, transaction, context);\\n    } else {\\n      markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);\\n    }\\n\\n    if (inst.componentDidMount) {\\n      if (process.env.NODE_ENV !== 'production') {\\n        transaction.getReactMountReady().enqueue(function () {\\n          measureLifeCyclePerf(function () {\\n            return inst.componentDidMount();\\n          }, _this._debugID, 'componentDidMount');\\n        });\\n      } else {\\n        transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);\\n      }\\n    }\\n\\n    return markup;\\n  },\\n\\n  _constructComponent: function (doConstruct, publicProps, publicContext, updateQueue) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      ReactCurrentOwner.current = this;\\n      try {\\n        return this._constructComponentWithoutOwner(doConstruct, publicProps, publicContext, updateQueue);\\n      } finally {\\n        ReactCurrentOwner.current = null;\\n      }\\n    } else {\\n      return this._constructComponentWithoutOwner(doConstruct, publicProps, publicContext, updateQueue);\\n    }\\n  },\\n\\n  _constructComponentWithoutOwner: function (doConstruct, publicProps, publicContext, updateQueue) {\\n    var Component = this._currentElement.type;\\n\\n    if (doConstruct) {\\n      if (process.env.NODE_ENV !== 'production') {\\n        return measureLifeCyclePerf(function () {\\n          return new Component(publicProps, publicContext, updateQueue);\\n        }, this._debugID, 'ctor');\\n      } else {\\n        return new Component(publicProps, publicContext, updateQueue);\\n      }\\n    }\\n\\n    // This can still be an instance in case of factory components\\n    // but we'll count this as time spent rendering as the more common case.\\n    if (process.env.NODE_ENV !== 'production') {\\n      return measureLifeCyclePerf(function () {\\n        return Component(publicProps, publicContext, updateQueue);\\n      }, this._debugID, 'render');\\n    } else {\\n      return Component(publicProps, publicContext, updateQueue);\\n    }\\n  },\\n\\n  performInitialMountWithErrorHandling: function (renderedElement, hostParent, hostContainerInfo, transaction, context) {\\n    var markup;\\n    var checkpoint = transaction.checkpoint();\\n    try {\\n      markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);\\n    } catch (e) {\\n      // Roll back to checkpoint, handle error (which may add items to the transaction), and take a new checkpoint\\n      transaction.rollback(checkpoint);\\n      this._instance.unstable_handleError(e);\\n      if (this._pendingStateQueue) {\\n        this._instance.state = this._processPendingState(this._instance.props, this._instance.context);\\n      }\\n      checkpoint = transaction.checkpoint();\\n\\n      this._renderedComponent.unmountComponent(true);\\n      transaction.rollback(checkpoint);\\n\\n      // Try again - we've informed the component about the error, so they can render an error message this time.\\n      // If this throws again, the error will bubble up (and can be caught by a higher error boundary).\\n      markup = this.performInitialMount(renderedElement, hostParent, hostContainerInfo, transaction, context);\\n    }\\n    return markup;\\n  },\\n\\n  performInitialMount: function (renderedElement, hostParent, hostContainerInfo, transaction, context) {\\n    var inst = this._instance;\\n\\n    var debugID = 0;\\n    if (process.env.NODE_ENV !== 'production') {\\n      debugID = this._debugID;\\n    }\\n\\n    if (inst.componentWillMount) {\\n      if (process.env.NODE_ENV !== 'production') {\\n        measureLifeCyclePerf(function () {\\n          return inst.componentWillMount();\\n        }, debugID, 'componentWillMount');\\n      } else {\\n        inst.componentWillMount();\\n      }\\n      // When mounting, calls to `setState` by `componentWillMount` will set\\n      // `this._pendingStateQueue` without triggering a re-render.\\n      if (this._pendingStateQueue) {\\n        inst.state = this._processPendingState(inst.props, inst.context);\\n      }\\n    }\\n\\n    // If not a stateless component, we now render\\n    if (renderedElement === undefined) {\\n      renderedElement = this._renderValidatedComponent();\\n    }\\n\\n    var nodeType = ReactNodeTypes.getType(renderedElement);\\n    this._renderedNodeType = nodeType;\\n    var child = this._instantiateReactComponent(renderedElement, nodeType !== ReactNodeTypes.EMPTY /* shouldHaveDebugID */\\n    );\\n    this._renderedComponent = child;\\n\\n    var markup = ReactReconciler.mountComponent(child, transaction, hostParent, hostContainerInfo, this._processChildContext(context), debugID);\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (debugID !== 0) {\\n        var childDebugIDs = child._debugID !== 0 ? [child._debugID] : [];\\n        ReactInstrumentation.debugTool.onSetChildren(debugID, childDebugIDs);\\n      }\\n    }\\n\\n    return markup;\\n  },\\n\\n  getHostNode: function () {\\n    return ReactReconciler.getHostNode(this._renderedComponent);\\n  },\\n\\n  /**\\n   * Releases any resources allocated by `mountComponent`.\\n   *\\n   * @final\\n   * @internal\\n   */\\n  unmountComponent: function (safely) {\\n    if (!this._renderedComponent) {\\n      return;\\n    }\\n\\n    var inst = this._instance;\\n\\n    if (inst.componentWillUnmount && !inst._calledComponentWillUnmount) {\\n      inst._calledComponentWillUnmount = true;\\n\\n      if (safely) {\\n        var name = this.getName() + '.componentWillUnmount()';\\n        ReactErrorUtils.invokeGuardedCallback(name, inst.componentWillUnmount.bind(inst));\\n      } else {\\n        if (process.env.NODE_ENV !== 'production') {\\n          measureLifeCyclePerf(function () {\\n            return inst.componentWillUnmount();\\n          }, this._debugID, 'componentWillUnmount');\\n        } else {\\n          inst.componentWillUnmount();\\n        }\\n      }\\n    }\\n\\n    if (this._renderedComponent) {\\n      ReactReconciler.unmountComponent(this._renderedComponent, safely);\\n      this._renderedNodeType = null;\\n      this._renderedComponent = null;\\n      this._instance = null;\\n    }\\n\\n    // Reset pending fields\\n    // Even if this component is scheduled for another update in ReactUpdates,\\n    // it would still be ignored because these fields are reset.\\n    this._pendingStateQueue = null;\\n    this._pendingReplaceState = false;\\n    this._pendingForceUpdate = false;\\n    this._pendingCallbacks = null;\\n    this._pendingElement = null;\\n\\n    // These fields do not really need to be reset since this object is no\\n    // longer accessible.\\n    this._context = null;\\n    this._rootNodeID = 0;\\n    this._topLevelWrapper = null;\\n\\n    // Delete the reference from the instance to this internal representation\\n    // which allow the internals to be properly cleaned up even if the user\\n    // leaks a reference to the public instance.\\n    ReactInstanceMap.remove(inst);\\n\\n    // Some existing components rely on inst.props even after they've been\\n    // destroyed (in event handlers).\\n    // TODO: inst.props = null;\\n    // TODO: inst.state = null;\\n    // TODO: inst.context = null;\\n  },\\n\\n  /**\\n   * Filters the context object to only contain keys specified in\\n   * `contextTypes`\\n   *\\n   * @param {object} context\\n   * @return {?object}\\n   * @private\\n   */\\n  _maskContext: function (context) {\\n    var Component = this._currentElement.type;\\n    var contextTypes = Component.contextTypes;\\n    if (!contextTypes) {\\n      return emptyObject;\\n    }\\n    var maskedContext = {};\\n    for (var contextName in contextTypes) {\\n      maskedContext[contextName] = context[contextName];\\n    }\\n    return maskedContext;\\n  },\\n\\n  /**\\n   * Filters the context object to only contain keys specified in\\n   * `contextTypes`, and asserts that they are valid.\\n   *\\n   * @param {object} context\\n   * @return {?object}\\n   * @private\\n   */\\n  _processContext: function (context) {\\n    var maskedContext = this._maskContext(context);\\n    if (process.env.NODE_ENV !== 'production') {\\n      var Component = this._currentElement.type;\\n      if (Component.contextTypes) {\\n        this._checkContextTypes(Component.contextTypes, maskedContext, 'context');\\n      }\\n    }\\n    return maskedContext;\\n  },\\n\\n  /**\\n   * @param {object} currentContext\\n   * @return {object}\\n   * @private\\n   */\\n  _processChildContext: function (currentContext) {\\n    var Component = this._currentElement.type;\\n    var inst = this._instance;\\n    var childContext;\\n\\n    if (inst.getChildContext) {\\n      if (process.env.NODE_ENV !== 'production') {\\n        ReactInstrumentation.debugTool.onBeginProcessingChildContext();\\n        try {\\n          childContext = inst.getChildContext();\\n        } finally {\\n          ReactInstrumentation.debugTool.onEndProcessingChildContext();\\n        }\\n      } else {\\n        childContext = inst.getChildContext();\\n      }\\n    }\\n\\n    if (childContext) {\\n      !(typeof Component.childContextTypes === 'object') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().', this.getName() || 'ReactCompositeComponent') : _prodInvariant('107', this.getName() || 'ReactCompositeComponent') : void 0;\\n      if (process.env.NODE_ENV !== 'production') {\\n        this._checkContextTypes(Component.childContextTypes, childContext, 'childContext');\\n      }\\n      for (var name in childContext) {\\n        !(name in Component.childContextTypes) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.getChildContext(): key \\\"%s\\\" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : _prodInvariant('108', this.getName() || 'ReactCompositeComponent', name) : void 0;\\n      }\\n      return _assign({}, currentContext, childContext);\\n    }\\n    return currentContext;\\n  },\\n\\n  /**\\n   * Assert that the context types are valid\\n   *\\n   * @param {object} typeSpecs Map of context field to a ReactPropType\\n   * @param {object} values Runtime values that need to be type-checked\\n   * @param {string} location e.g. \\\"prop\\\", \\\"context\\\", \\\"child context\\\"\\n   * @private\\n   */\\n  _checkContextTypes: function (typeSpecs, values, location) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      checkReactTypeSpec(typeSpecs, values, location, this.getName(), null, this._debugID);\\n    }\\n  },\\n\\n  receiveComponent: function (nextElement, transaction, nextContext) {\\n    var prevElement = this._currentElement;\\n    var prevContext = this._context;\\n\\n    this._pendingElement = null;\\n\\n    this.updateComponent(transaction, prevElement, nextElement, prevContext, nextContext);\\n  },\\n\\n  /**\\n   * If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate`\\n   * is set, update the component.\\n   *\\n   * @param {ReactReconcileTransaction} transaction\\n   * @internal\\n   */\\n  performUpdateIfNecessary: function (transaction) {\\n    if (this._pendingElement != null) {\\n      ReactReconciler.receiveComponent(this, this._pendingElement, transaction, this._context);\\n    } else if (this._pendingStateQueue !== null || this._pendingForceUpdate) {\\n      this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context);\\n    } else {\\n      this._updateBatchNumber = null;\\n    }\\n  },\\n\\n  /**\\n   * Perform an update to a mounted component. The componentWillReceiveProps and\\n   * shouldComponentUpdate methods are called, then (assuming the update isn't\\n   * skipped) the remaining update lifecycle methods are called and the DOM\\n   * representation is updated.\\n   *\\n   * By default, this implements React's rendering and reconciliation algorithm.\\n   * Sophisticated clients may wish to override this.\\n   *\\n   * @param {ReactReconcileTransaction} transaction\\n   * @param {ReactElement} prevParentElement\\n   * @param {ReactElement} nextParentElement\\n   * @internal\\n   * @overridable\\n   */\\n  updateComponent: function (transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) {\\n    var inst = this._instance;\\n    !(inst != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Attempted to update component `%s` that has already been unmounted (or failed to mount).', this.getName() || 'ReactCompositeComponent') : _prodInvariant('136', this.getName() || 'ReactCompositeComponent') : void 0;\\n\\n    var willReceive = false;\\n    var nextContext;\\n\\n    // Determine if the context has changed or not\\n    if (this._context === nextUnmaskedContext) {\\n      nextContext = inst.context;\\n    } else {\\n      nextContext = this._processContext(nextUnmaskedContext);\\n      willReceive = true;\\n    }\\n\\n    var prevProps = prevParentElement.props;\\n    var nextProps = nextParentElement.props;\\n\\n    // Not a simple state update but a props update\\n    if (prevParentElement !== nextParentElement) {\\n      willReceive = true;\\n    }\\n\\n    // An update here will schedule an update but immediately set\\n    // _pendingStateQueue which will ensure that any state updates gets\\n    // immediately reconciled instead of waiting for the next batch.\\n    if (willReceive && inst.componentWillReceiveProps) {\\n      if (process.env.NODE_ENV !== 'production') {\\n        measureLifeCyclePerf(function () {\\n          return inst.componentWillReceiveProps(nextProps, nextContext);\\n        }, this._debugID, 'componentWillReceiveProps');\\n      } else {\\n        inst.componentWillReceiveProps(nextProps, nextContext);\\n      }\\n    }\\n\\n    var nextState = this._processPendingState(nextProps, nextContext);\\n    var shouldUpdate = true;\\n\\n    if (!this._pendingForceUpdate) {\\n      if (inst.shouldComponentUpdate) {\\n        if (process.env.NODE_ENV !== 'production') {\\n          shouldUpdate = measureLifeCyclePerf(function () {\\n            return inst.shouldComponentUpdate(nextProps, nextState, nextContext);\\n          }, this._debugID, 'shouldComponentUpdate');\\n        } else {\\n          shouldUpdate = inst.shouldComponentUpdate(nextProps, nextState, nextContext);\\n        }\\n      } else {\\n        if (this._compositeType === CompositeTypes.PureClass) {\\n          shouldUpdate = !shallowEqual(prevProps, nextProps) || !shallowEqual(inst.state, nextState);\\n        }\\n      }\\n    }\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      process.env.NODE_ENV !== 'production' ? warning(shouldUpdate !== undefined, '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent') : void 0;\\n    }\\n\\n    this._updateBatchNumber = null;\\n    if (shouldUpdate) {\\n      this._pendingForceUpdate = false;\\n      // Will set `this.props`, `this.state` and `this.context`.\\n      this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext);\\n    } else {\\n      // If it's determined that a component should not update, we still want\\n      // to set props and state but we shortcut the rest of the update.\\n      this._currentElement = nextParentElement;\\n      this._context = nextUnmaskedContext;\\n      inst.props = nextProps;\\n      inst.state = nextState;\\n      inst.context = nextContext;\\n    }\\n  },\\n\\n  _processPendingState: function (props, context) {\\n    var inst = this._instance;\\n    var queue = this._pendingStateQueue;\\n    var replace = this._pendingReplaceState;\\n    this._pendingReplaceState = false;\\n    this._pendingStateQueue = null;\\n\\n    if (!queue) {\\n      return inst.state;\\n    }\\n\\n    if (replace && queue.length === 1) {\\n      return queue[0];\\n    }\\n\\n    var nextState = _assign({}, replace ? queue[0] : inst.state);\\n    for (var i = replace ? 1 : 0; i < queue.length; i++) {\\n      var partial = queue[i];\\n      _assign(nextState, typeof partial === 'function' ? partial.call(inst, nextState, props, context) : partial);\\n    }\\n\\n    return nextState;\\n  },\\n\\n  /**\\n   * Merges new props and state, notifies delegate methods of update and\\n   * performs update.\\n   *\\n   * @param {ReactElement} nextElement Next element\\n   * @param {object} nextProps Next public object to set as properties.\\n   * @param {?object} nextState Next object to set as state.\\n   * @param {?object} nextContext Next public object to set as context.\\n   * @param {ReactReconcileTransaction} transaction\\n   * @param {?object} unmaskedContext\\n   * @private\\n   */\\n  _performComponentUpdate: function (nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) {\\n    var _this2 = this;\\n\\n    var inst = this._instance;\\n\\n    var hasComponentDidUpdate = Boolean(inst.componentDidUpdate);\\n    var prevProps;\\n    var prevState;\\n    var prevContext;\\n    if (hasComponentDidUpdate) {\\n      prevProps = inst.props;\\n      prevState = inst.state;\\n      prevContext = inst.context;\\n    }\\n\\n    if (inst.componentWillUpdate) {\\n      if (process.env.NODE_ENV !== 'production') {\\n        measureLifeCyclePerf(function () {\\n          return inst.componentWillUpdate(nextProps, nextState, nextContext);\\n        }, this._debugID, 'componentWillUpdate');\\n      } else {\\n        inst.componentWillUpdate(nextProps, nextState, nextContext);\\n      }\\n    }\\n\\n    this._currentElement = nextElement;\\n    this._context = unmaskedContext;\\n    inst.props = nextProps;\\n    inst.state = nextState;\\n    inst.context = nextContext;\\n\\n    this._updateRenderedComponent(transaction, unmaskedContext);\\n\\n    if (hasComponentDidUpdate) {\\n      if (process.env.NODE_ENV !== 'production') {\\n        transaction.getReactMountReady().enqueue(function () {\\n          measureLifeCyclePerf(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), _this2._debugID, 'componentDidUpdate');\\n        });\\n      } else {\\n        transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst);\\n      }\\n    }\\n  },\\n\\n  /**\\n   * Call the component's `render` method and update the DOM accordingly.\\n   *\\n   * @param {ReactReconcileTransaction} transaction\\n   * @internal\\n   */\\n  _updateRenderedComponent: function (transaction, context) {\\n    var prevComponentInstance = this._renderedComponent;\\n    var prevRenderedElement = prevComponentInstance._currentElement;\\n    var nextRenderedElement = this._renderValidatedComponent();\\n\\n    var debugID = 0;\\n    if (process.env.NODE_ENV !== 'production') {\\n      debugID = this._debugID;\\n    }\\n\\n    if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {\\n      ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._processChildContext(context));\\n    } else {\\n      var oldHostNode = ReactReconciler.getHostNode(prevComponentInstance);\\n      ReactReconciler.unmountComponent(prevComponentInstance, false);\\n\\n      var nodeType = ReactNodeTypes.getType(nextRenderedElement);\\n      this._renderedNodeType = nodeType;\\n      var child = this._instantiateReactComponent(nextRenderedElement, nodeType !== ReactNodeTypes.EMPTY /* shouldHaveDebugID */\\n      );\\n      this._renderedComponent = child;\\n\\n      var nextMarkup = ReactReconciler.mountComponent(child, transaction, this._hostParent, this._hostContainerInfo, this._processChildContext(context), debugID);\\n\\n      if (process.env.NODE_ENV !== 'production') {\\n        if (debugID !== 0) {\\n          var childDebugIDs = child._debugID !== 0 ? [child._debugID] : [];\\n          ReactInstrumentation.debugTool.onSetChildren(debugID, childDebugIDs);\\n        }\\n      }\\n\\n      this._replaceNodeWithMarkup(oldHostNode, nextMarkup, prevComponentInstance);\\n    }\\n  },\\n\\n  /**\\n   * Overridden in shallow rendering.\\n   *\\n   * @protected\\n   */\\n  _replaceNodeWithMarkup: function (oldHostNode, nextMarkup, prevInstance) {\\n    ReactComponentEnvironment.replaceNodeWithMarkup(oldHostNode, nextMarkup, prevInstance);\\n  },\\n\\n  /**\\n   * @protected\\n   */\\n  _renderValidatedComponentWithoutOwnerOrContext: function () {\\n    var inst = this._instance;\\n    var renderedElement;\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      renderedElement = measureLifeCyclePerf(function () {\\n        return inst.render();\\n      }, this._debugID, 'render');\\n    } else {\\n      renderedElement = inst.render();\\n    }\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      // We allow auto-mocks to proceed as if they're returning null.\\n      if (renderedElement === undefined && inst.render._isMockFunction) {\\n        // This is probably bad practice. Consider warning here and\\n        // deprecating this convenience.\\n        renderedElement = null;\\n      }\\n    }\\n\\n    return renderedElement;\\n  },\\n\\n  /**\\n   * @private\\n   */\\n  _renderValidatedComponent: function () {\\n    var renderedElement;\\n    if (process.env.NODE_ENV !== 'production' || this._compositeType !== CompositeTypes.StatelessFunctional) {\\n      ReactCurrentOwner.current = this;\\n      try {\\n        renderedElement = this._renderValidatedComponentWithoutOwnerOrContext();\\n      } finally {\\n        ReactCurrentOwner.current = null;\\n      }\\n    } else {\\n      renderedElement = this._renderValidatedComponentWithoutOwnerOrContext();\\n    }\\n    !(\\n    // TODO: An `isValidNode` function would probably be more appropriate\\n    renderedElement === null || renderedElement === false || React.isValidElement(renderedElement)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s.render(): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : _prodInvariant('109', this.getName() || 'ReactCompositeComponent') : void 0;\\n\\n    return renderedElement;\\n  },\\n\\n  /**\\n   * Lazily allocates the refs object and stores `component` as `ref`.\\n   *\\n   * @param {string} ref Reference name.\\n   * @param {component} component Component to store as `ref`.\\n   * @final\\n   * @private\\n   */\\n  attachRef: function (ref, component) {\\n    var inst = this.getPublicInstance();\\n    !(inst != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : _prodInvariant('110') : void 0;\\n    var publicComponentInstance = component.getPublicInstance();\\n    if (process.env.NODE_ENV !== 'production') {\\n      var componentName = component && component.getName ? component.getName() : 'a component';\\n      process.env.NODE_ENV !== 'production' ? warning(publicComponentInstance != null || component._compositeType !== CompositeTypes.StatelessFunctional, 'Stateless function components cannot be given refs ' + '(See ref \\\"%s\\\" in %s created by %s). ' + 'Attempts to access this ref will fail.', ref, componentName, this.getName()) : void 0;\\n    }\\n    var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs;\\n    refs[ref] = publicComponentInstance;\\n  },\\n\\n  /**\\n   * Detaches a reference name.\\n   *\\n   * @param {string} ref Name to dereference.\\n   * @final\\n   * @private\\n   */\\n  detachRef: function (ref) {\\n    var refs = this.getPublicInstance().refs;\\n    delete refs[ref];\\n  },\\n\\n  /**\\n   * Get a text description of the component that can be used to identify it\\n   * in error messages.\\n   * @return {string} The name or null.\\n   * @internal\\n   */\\n  getName: function () {\\n    var type = this._currentElement.type;\\n    var constructor = this._instance && this._instance.constructor;\\n    return type.displayName || constructor && constructor.displayName || type.name || constructor && constructor.name || null;\\n  },\\n\\n  /**\\n   * Get the publicly accessible representation of this component - i.e. what\\n   * is exposed by refs and returned by render. Can be null for stateless\\n   * components.\\n   *\\n   * @return {ReactComponent} the public component instance.\\n   * @internal\\n   */\\n  getPublicInstance: function () {\\n    var inst = this._instance;\\n    if (this._compositeType === CompositeTypes.StatelessFunctional) {\\n      return null;\\n    }\\n    return inst;\\n  },\\n\\n  // Stub\\n  _instantiateReactComponent: null\\n\\n};\\n\\nmodule.exports = ReactCompositeComponent;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactCompositeComponent.js\\n// module id = 197\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactCompositeComponent.js?\");\n\n/***/ },\n/* 198 */\n/*!*******************************************!*\\\n  !*** ./~/react-dom/lib/ReactNodeTypes.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar React = __webpack_require__(/*! react/lib/React */ 2);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\nvar ReactNodeTypes = {\\n  HOST: 0,\\n  COMPOSITE: 1,\\n  EMPTY: 2,\\n\\n  getType: function (node) {\\n    if (node === null || node === false) {\\n      return ReactNodeTypes.EMPTY;\\n    } else if (React.isValidElement(node)) {\\n      if (typeof node.type === 'function') {\\n        return ReactNodeTypes.COMPOSITE;\\n      } else {\\n        return ReactNodeTypes.HOST;\\n      }\\n    }\\n     true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Unexpected node: %s', node) : _prodInvariant('26', node) : void 0;\\n  }\\n};\\n\\nmodule.exports = ReactNodeTypes;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactNodeTypes.js\\n// module id = 198\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactNodeTypes.js?\");\n\n/***/ },\n/* 199 */\n/*!***********************************************!*\\\n  !*** ./~/react-dom/lib/checkReactTypeSpec.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar ReactPropTypeLocationNames = __webpack_require__(/*! ./ReactPropTypeLocationNames */ 200);\\nvar ReactPropTypesSecret = __webpack_require__(/*! ./ReactPropTypesSecret */ 188);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar ReactComponentTreeHook;\\n\\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {\\n  // Temporary hack.\\n  // Inline requires don't work well with Jest:\\n  // https://github.com/facebook/react/issues/7240\\n  // Remove the inline requires when we don't need them anymore:\\n  // https://github.com/facebook/react/pull/7178\\n  ReactComponentTreeHook = __webpack_require__(/*! react/lib/ReactComponentTreeHook */ 26);\\n}\\n\\nvar loggedTypeFailures = {};\\n\\n/**\\n * Assert that the values match with the type specs.\\n * Error messages are memorized and will only be shown once.\\n *\\n * @param {object} typeSpecs Map of name to a ReactPropType\\n * @param {object} values Runtime values that need to be type-checked\\n * @param {string} location e.g. \\\"prop\\\", \\\"context\\\", \\\"child context\\\"\\n * @param {string} componentName Name of the component for error messages.\\n * @param {?object} element The React element that is being type-checked\\n * @param {?number} debugID The React component instance that is being type-checked\\n * @private\\n */\\nfunction checkReactTypeSpec(typeSpecs, values, location, componentName, element, debugID) {\\n  for (var typeSpecName in typeSpecs) {\\n    if (typeSpecs.hasOwnProperty(typeSpecName)) {\\n      var error;\\n      // Prop type validation may throw. In case they do, we don't want to\\n      // fail the render phase where it didn't fail before. So we log it.\\n      // After these have been cleaned up, we'll let them throw.\\n      try {\\n        // This is intentionally an invariant that gets caught. It's the same\\n        // behavior as without this statement except with a better message.\\n        !(typeof typeSpecs[typeSpecName] === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : _prodInvariant('84', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName) : void 0;\\n        error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\\n      } catch (ex) {\\n        error = ex;\\n      }\\n      process.env.NODE_ENV !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], typeSpecName, typeof error) : void 0;\\n      if (error instanceof Error && !(error.message in loggedTypeFailures)) {\\n        // Only monitor this failure once because there tends to be a lot of the\\n        // same error.\\n        loggedTypeFailures[error.message] = true;\\n\\n        var componentStackInfo = '';\\n\\n        if (process.env.NODE_ENV !== 'production') {\\n          if (!ReactComponentTreeHook) {\\n            ReactComponentTreeHook = __webpack_require__(/*! react/lib/ReactComponentTreeHook */ 26);\\n          }\\n          if (debugID !== null) {\\n            componentStackInfo = ReactComponentTreeHook.getStackAddendumByID(debugID);\\n          } else if (element !== null) {\\n            componentStackInfo = ReactComponentTreeHook.getCurrentStackAddendum(element);\\n          }\\n        }\\n\\n        process.env.NODE_ENV !== 'production' ? warning(false, 'Failed %s type: %s%s', location, error.message, componentStackInfo) : void 0;\\n      }\\n    }\\n  }\\n}\\n\\nmodule.exports = checkReactTypeSpec;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/checkReactTypeSpec.js\\n// module id = 199\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/checkReactTypeSpec.js?\");\n\n/***/ },\n/* 200 */\n/*!*******************************************************!*\\\n  !*** ./~/react-dom/lib/ReactPropTypeLocationNames.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar ReactPropTypeLocationNames = {};\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  ReactPropTypeLocationNames = {\\n    prop: 'prop',\\n    context: 'context',\\n    childContext: 'child context'\\n  };\\n}\\n\\nmodule.exports = ReactPropTypeLocationNames;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactPropTypeLocationNames.js\\n// module id = 200\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactPropTypeLocationNames.js?\");\n\n/***/ },\n/* 201 */\n/*!************************************!*\\\n  !*** ./~/fbjs/lib/shallowEqual.js ***!\n  \\************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @typechecks\\n * \\n */\\n\\n/*eslint-disable no-self-compare */\\n\\n'use strict';\\n\\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\\n\\n/**\\n * inlined Object.is polyfill to avoid requiring consumers ship their own\\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\\n */\\nfunction is(x, y) {\\n  // SameValue algorithm\\n  if (x === y) {\\n    // Steps 1-5, 7-10\\n    // Steps 6.b-6.e: +0 != -0\\n    // Added the nonzero y check to make Flow happy, but it is redundant\\n    return x !== 0 || y !== 0 || 1 / x === 1 / y;\\n  } else {\\n    // Step 6.a: NaN == NaN\\n    return x !== x && y !== y;\\n  }\\n}\\n\\n/**\\n * Performs equality by iterating through keys on an object and returning false\\n * when any key has values which are not strictly equal between the arguments.\\n * Returns true when the values of all keys are strictly equal.\\n */\\nfunction shallowEqual(objA, objB) {\\n  if (is(objA, objB)) {\\n    return true;\\n  }\\n\\n  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\\n    return false;\\n  }\\n\\n  var keysA = Object.keys(objA);\\n  var keysB = Object.keys(objB);\\n\\n  if (keysA.length !== keysB.length) {\\n    return false;\\n  }\\n\\n  // Test for A's keys different from B.\\n  for (var i = 0; i < keysA.length; i++) {\\n    if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\\n      return false;\\n    }\\n  }\\n\\n  return true;\\n}\\n\\nmodule.exports = shallowEqual;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/shallowEqual.js\\n// module id = 201\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/shallowEqual.js?\");\n\n/***/ },\n/* 202 */\n/*!*******************************************************!*\\\n  !*** ./~/react-dom/lib/shouldUpdateReactComponent.js ***!\n  \\*******************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\n/**\\n * Given a `prevElement` and `nextElement`, determines if the existing\\n * instance should be updated as opposed to being destroyed or replaced by a new\\n * instance. Both arguments are elements. This ensures that this logic can\\n * operate on stateless trees without any backing instance.\\n *\\n * @param {?object} prevElement\\n * @param {?object} nextElement\\n * @return {boolean} True if the existing instance should be updated.\\n * @protected\\n */\\n\\nfunction shouldUpdateReactComponent(prevElement, nextElement) {\\n  var prevEmpty = prevElement === null || prevElement === false;\\n  var nextEmpty = nextElement === null || nextElement === false;\\n  if (prevEmpty || nextEmpty) {\\n    return prevEmpty === nextEmpty;\\n  }\\n\\n  var prevType = typeof prevElement;\\n  var nextType = typeof nextElement;\\n  if (prevType === 'string' || prevType === 'number') {\\n    return nextType === 'string' || nextType === 'number';\\n  } else {\\n    return nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key;\\n  }\\n}\\n\\nmodule.exports = shouldUpdateReactComponent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/shouldUpdateReactComponent.js\\n// module id = 202\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/shouldUpdateReactComponent.js?\");\n\n/***/ },\n/* 203 */\n/*!************************************************!*\\\n  !*** ./~/react-dom/lib/ReactEmptyComponent.js ***!\n  \\************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2014-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar emptyComponentFactory;\\n\\nvar ReactEmptyComponentInjection = {\\n  injectEmptyComponentFactory: function (factory) {\\n    emptyComponentFactory = factory;\\n  }\\n};\\n\\nvar ReactEmptyComponent = {\\n  create: function (instantiate) {\\n    return emptyComponentFactory(instantiate);\\n  }\\n};\\n\\nReactEmptyComponent.injection = ReactEmptyComponentInjection;\\n\\nmodule.exports = ReactEmptyComponent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactEmptyComponent.js\\n// module id = 203\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactEmptyComponent.js?\");\n\n/***/ },\n/* 204 */\n/*!***********************************************!*\\\n  !*** ./~/react-dom/lib/ReactHostComponent.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113),\\n    _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\nvar genericComponentClass = null;\\n// This registry keeps track of wrapper classes around host tags.\\nvar tagToComponentClass = {};\\nvar textComponentClass = null;\\n\\nvar ReactHostComponentInjection = {\\n  // This accepts a class that receives the tag string. This is a catch all\\n  // that can render any kind of tag.\\n  injectGenericComponentClass: function (componentClass) {\\n    genericComponentClass = componentClass;\\n  },\\n  // This accepts a text component class that takes the text string to be\\n  // rendered as props.\\n  injectTextComponentClass: function (componentClass) {\\n    textComponentClass = componentClass;\\n  },\\n  // This accepts a keyed object with classes as values. Each key represents a\\n  // tag. That particular tag will use this class instead of the generic one.\\n  injectComponentClasses: function (componentClasses) {\\n    _assign(tagToComponentClass, componentClasses);\\n  }\\n};\\n\\n/**\\n * Get a host internal component class for a specific tag.\\n *\\n * @param {ReactElement} element The element to create.\\n * @return {function} The internal class constructor function.\\n */\\nfunction createInternalComponent(element) {\\n  !genericComponentClass ? process.env.NODE_ENV !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : _prodInvariant('111', element.type) : void 0;\\n  return new genericComponentClass(element);\\n}\\n\\n/**\\n * @param {ReactText} text\\n * @return {ReactComponent}\\n */\\nfunction createInstanceForText(text) {\\n  return new textComponentClass(text);\\n}\\n\\n/**\\n * @param {ReactComponent} component\\n * @return {boolean}\\n */\\nfunction isTextComponent(component) {\\n  return component instanceof textComponentClass;\\n}\\n\\nvar ReactHostComponent = {\\n  createInternalComponent: createInternalComponent,\\n  createInstanceForText: createInstanceForText,\\n  isTextComponent: isTextComponent,\\n  injection: ReactHostComponentInjection\\n};\\n\\nmodule.exports = ReactHostComponent;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactHostComponent.js\\n// module id = 204\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactHostComponent.js?\");\n\n/***/ },\n/* 205 */\n/*!*******************************************!*\\\n  !*** ./~/react-dom/lib/getNextDebugID.js ***!\n  \\*******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar nextDebugID = 1;\\n\\nfunction getNextDebugID() {\\n  return nextDebugID++;\\n}\\n\\nmodule.exports = getNextDebugID;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/getNextDebugID.js\\n// module id = 205\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/getNextDebugID.js?\");\n\n/***/ },\n/* 206 */\n/*!*******************************************!*\\\n  !*** ./~/react-dom/lib/KeyEscapeUtils.js ***!\n  \\*******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n/**\\n * Escape and wrap key so it is safe to use as a reactid\\n *\\n * @param {string} key to be escaped.\\n * @return {string} the escaped key.\\n */\\n\\nfunction escape(key) {\\n  var escapeRegex = /[=:]/g;\\n  var escaperLookup = {\\n    '=': '=0',\\n    ':': '=2'\\n  };\\n  var escapedString = ('' + key).replace(escapeRegex, function (match) {\\n    return escaperLookup[match];\\n  });\\n\\n  return '$' + escapedString;\\n}\\n\\n/**\\n * Unescape and unwrap key for human-readable display\\n *\\n * @param {string} key to unescape.\\n * @return {string} the unescaped key.\\n */\\nfunction unescape(key) {\\n  var unescapeRegex = /(=0|=2)/g;\\n  var unescaperLookup = {\\n    '=0': '=',\\n    '=2': ':'\\n  };\\n  var keySubstring = key[0] === '.' && key[1] === '$' ? key.substring(2) : key.substring(1);\\n\\n  return ('' + keySubstring).replace(unescapeRegex, function (match) {\\n    return unescaperLookup[match];\\n  });\\n}\\n\\nvar KeyEscapeUtils = {\\n  escape: escape,\\n  unescape: unescape\\n};\\n\\nmodule.exports = KeyEscapeUtils;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/KeyEscapeUtils.js\\n// module id = 206\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/KeyEscapeUtils.js?\");\n\n/***/ },\n/* 207 */\n/*!************************************************!*\\\n  !*** ./~/react-dom/lib/traverseAllChildren.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! react/lib/ReactCurrentOwner */ 10);\\nvar REACT_ELEMENT_TYPE = __webpack_require__(/*! ./ReactElementSymbol */ 208);\\n\\nvar getIteratorFn = __webpack_require__(/*! ./getIteratorFn */ 209);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar KeyEscapeUtils = __webpack_require__(/*! ./KeyEscapeUtils */ 206);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar SEPARATOR = '.';\\nvar SUBSEPARATOR = ':';\\n\\n/**\\n * This is inlined from ReactElement since this file is shared between\\n * isomorphic and renderers. We could extract this to a\\n *\\n */\\n\\n/**\\n * TODO: Test that a single child and an array with one item have the same key\\n * pattern.\\n */\\n\\nvar didWarnAboutMaps = false;\\n\\n/**\\n * Generate a key string that identifies a component within a set.\\n *\\n * @param {*} component A component that could contain a manual key.\\n * @param {number} index Index that is used if a manual key is not provided.\\n * @return {string}\\n */\\nfunction getComponentKey(component, index) {\\n  // Do some typechecking here since we call this blindly. We want to ensure\\n  // that we don't block potential future ES APIs.\\n  if (component && typeof component === 'object' && component.key != null) {\\n    // Explicit key\\n    return KeyEscapeUtils.escape(component.key);\\n  }\\n  // Implicit key determined by the index in the set\\n  return index.toString(36);\\n}\\n\\n/**\\n * @param {?*} children Children tree container.\\n * @param {!string} nameSoFar Name of the key path so far.\\n * @param {!function} callback Callback to invoke with each child found.\\n * @param {?*} traverseContext Used to pass information throughout the traversal\\n * process.\\n * @return {!number} The number of children in this subtree.\\n */\\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\\n  var type = typeof children;\\n\\n  if (type === 'undefined' || type === 'boolean') {\\n    // All of the above are perceived as null.\\n    children = null;\\n  }\\n\\n  if (children === null || type === 'string' || type === 'number' ||\\n  // The following is inlined from ReactElement. This means we can optimize\\n  // some checks. React Fiber also inlines this logic for similar purposes.\\n  type === 'object' && children.$$typeof === REACT_ELEMENT_TYPE) {\\n    callback(traverseContext, children,\\n    // If it's the only child, treat the name as if it was wrapped in an array\\n    // so that it's consistent if the number of children grows.\\n    nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\\n    return 1;\\n  }\\n\\n  var child;\\n  var nextName;\\n  var subtreeCount = 0; // Count of children found in the current subtree.\\n  var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\\n\\n  if (Array.isArray(children)) {\\n    for (var i = 0; i < children.length; i++) {\\n      child = children[i];\\n      nextName = nextNamePrefix + getComponentKey(child, i);\\n      subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\\n    }\\n  } else {\\n    var iteratorFn = getIteratorFn(children);\\n    if (iteratorFn) {\\n      var iterator = iteratorFn.call(children);\\n      var step;\\n      if (iteratorFn !== children.entries) {\\n        var ii = 0;\\n        while (!(step = iterator.next()).done) {\\n          child = step.value;\\n          nextName = nextNamePrefix + getComponentKey(child, ii++);\\n          subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\\n        }\\n      } else {\\n        if (process.env.NODE_ENV !== 'production') {\\n          var mapsAsChildrenAddendum = '';\\n          if (ReactCurrentOwner.current) {\\n            var mapsAsChildrenOwnerName = ReactCurrentOwner.current.getName();\\n            if (mapsAsChildrenOwnerName) {\\n              mapsAsChildrenAddendum = ' Check the render method of `' + mapsAsChildrenOwnerName + '`.';\\n            }\\n          }\\n          process.env.NODE_ENV !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.%s', mapsAsChildrenAddendum) : void 0;\\n          didWarnAboutMaps = true;\\n        }\\n        // Iterator will provide entry [k,v] tuples rather than values.\\n        while (!(step = iterator.next()).done) {\\n          var entry = step.value;\\n          if (entry) {\\n            child = entry[1];\\n            nextName = nextNamePrefix + KeyEscapeUtils.escape(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);\\n            subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\\n          }\\n        }\\n      }\\n    } else if (type === 'object') {\\n      var addendum = '';\\n      if (process.env.NODE_ENV !== 'production') {\\n        addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';\\n        if (children._isReactElement) {\\n          addendum = ' It looks like you\\\\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';\\n        }\\n        if (ReactCurrentOwner.current) {\\n          var name = ReactCurrentOwner.current.getName();\\n          if (name) {\\n            addendum += ' Check the render method of `' + name + '`.';\\n          }\\n        }\\n      }\\n      var childrenString = String(children);\\n       true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : _prodInvariant('31', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : void 0;\\n    }\\n  }\\n\\n  return subtreeCount;\\n}\\n\\n/**\\n * Traverses children that are typically specified as `props.children`, but\\n * might also be specified through attributes:\\n *\\n * - `traverseAllChildren(this.props.children, ...)`\\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\\n *\\n * The `traverseContext` is an optional argument that is passed through the\\n * entire traversal. It can be used to store accumulations or anything else that\\n * the callback might find relevant.\\n *\\n * @param {?*} children Children tree object.\\n * @param {!function} callback To invoke upon traversing each child.\\n * @param {?*} traverseContext Context for traversal.\\n * @return {!number} The number of children in this subtree.\\n */\\nfunction traverseAllChildren(children, callback, traverseContext) {\\n  if (children == null) {\\n    return 0;\\n  }\\n\\n  return traverseAllChildrenImpl(children, '', callback, traverseContext);\\n}\\n\\nmodule.exports = traverseAllChildren;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/traverseAllChildren.js\\n// module id = 207\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/traverseAllChildren.js?\");\n\n/***/ },\n/* 208 */\n/*!***********************************************!*\\\n  !*** ./~/react-dom/lib/ReactElementSymbol.js ***!\n  \\***********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2014-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n// The Symbol used to tag the ReactElement type. If there is no native Symbol\\n// nor polyfill, then a plain number is used for performance.\\n\\nvar REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;\\n\\nmodule.exports = REACT_ELEMENT_TYPE;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactElementSymbol.js\\n// module id = 208\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactElementSymbol.js?\");\n\n/***/ },\n/* 209 */\n/*!******************************************!*\\\n  !*** ./~/react-dom/lib/getIteratorFn.js ***!\n  \\******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\n/* global Symbol */\\n\\nvar ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\\nvar FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\\n\\n/**\\n * Returns the iterator method function contained on the iterable object.\\n *\\n * Be sure to invoke the function with the iterable as context:\\n *\\n *     var iteratorFn = getIteratorFn(myIterable);\\n *     if (iteratorFn) {\\n *       var iterator = iteratorFn.call(myIterable);\\n *       ...\\n *     }\\n *\\n * @param {?object} maybeIterable\\n * @return {?function}\\n */\\nfunction getIteratorFn(maybeIterable) {\\n  var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\\n  if (typeof iteratorFn === 'function') {\\n    return iteratorFn;\\n  }\\n}\\n\\nmodule.exports = getIteratorFn;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/getIteratorFn.js\\n// module id = 209\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/getIteratorFn.js?\");\n\n/***/ },\n/* 210 */\n/*!********************************************!*\\\n  !*** ./~/react-dom/lib/flattenChildren.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar KeyEscapeUtils = __webpack_require__(/*! ./KeyEscapeUtils */ 206);\\nvar traverseAllChildren = __webpack_require__(/*! ./traverseAllChildren */ 207);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar ReactComponentTreeHook;\\n\\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'test') {\\n  // Temporary hack.\\n  // Inline requires don't work well with Jest:\\n  // https://github.com/facebook/react/issues/7240\\n  // Remove the inline requires when we don't need them anymore:\\n  // https://github.com/facebook/react/pull/7178\\n  ReactComponentTreeHook = __webpack_require__(/*! react/lib/ReactComponentTreeHook */ 26);\\n}\\n\\n/**\\n * @param {function} traverseContext Context passed through traversal.\\n * @param {?ReactComponent} child React child component.\\n * @param {!string} name String name of key path to child.\\n * @param {number=} selfDebugID Optional debugID of the current internal instance.\\n */\\nfunction flattenSingleChildIntoContext(traverseContext, child, name, selfDebugID) {\\n  // We found a component instance.\\n  if (traverseContext && typeof traverseContext === 'object') {\\n    var result = traverseContext;\\n    var keyUnique = result[name] === undefined;\\n    if (process.env.NODE_ENV !== 'production') {\\n      if (!ReactComponentTreeHook) {\\n        ReactComponentTreeHook = __webpack_require__(/*! react/lib/ReactComponentTreeHook */ 26);\\n      }\\n      if (!keyUnique) {\\n        process.env.NODE_ENV !== 'production' ? warning(false, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.%s', KeyEscapeUtils.unescape(name), ReactComponentTreeHook.getStackAddendumByID(selfDebugID)) : void 0;\\n      }\\n    }\\n    if (keyUnique && child != null) {\\n      result[name] = child;\\n    }\\n  }\\n}\\n\\n/**\\n * Flattens children that are typically specified as `props.children`. Any null\\n * children will not be included in the resulting object.\\n * @return {!object} flattened children keyed by name.\\n */\\nfunction flattenChildren(children, selfDebugID) {\\n  if (children == null) {\\n    return children;\\n  }\\n  var result = {};\\n\\n  if (process.env.NODE_ENV !== 'production') {\\n    traverseAllChildren(children, function (traverseContext, child, name) {\\n      return flattenSingleChildIntoContext(traverseContext, child, name, selfDebugID);\\n    }, result);\\n  } else {\\n    traverseAllChildren(children, flattenSingleChildIntoContext, result);\\n  }\\n  return result;\\n}\\n\\nmodule.exports = flattenChildren;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/flattenChildren.js\\n// module id = 210\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/flattenChildren.js?\");\n\n/***/ },\n/* 211 */\n/*!************************************************************!*\\\n  !*** ./~/react-dom/lib/ReactServerRenderingTransaction.js ***!\n  \\************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 128);\\nvar Transaction = __webpack_require__(/*! ./Transaction */ 146);\\nvar ReactInstrumentation = __webpack_require__(/*! ./ReactInstrumentation */ 140);\\nvar ReactServerUpdateQueue = __webpack_require__(/*! ./ReactServerUpdateQueue */ 212);\\n\\n/**\\n * Executed within the scope of the `Transaction` instance. Consider these as\\n * being member methods, but with an implied ordering while being isolated from\\n * each other.\\n */\\nvar TRANSACTION_WRAPPERS = [];\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  TRANSACTION_WRAPPERS.push({\\n    initialize: ReactInstrumentation.debugTool.onBeginFlush,\\n    close: ReactInstrumentation.debugTool.onEndFlush\\n  });\\n}\\n\\nvar noopCallbackQueue = {\\n  enqueue: function () {}\\n};\\n\\n/**\\n * @class ReactServerRenderingTransaction\\n * @param {boolean} renderToStaticMarkup\\n */\\nfunction ReactServerRenderingTransaction(renderToStaticMarkup) {\\n  this.reinitializeTransaction();\\n  this.renderToStaticMarkup = renderToStaticMarkup;\\n  this.useCreateElement = false;\\n  this.updateQueue = new ReactServerUpdateQueue(this);\\n}\\n\\nvar Mixin = {\\n  /**\\n   * @see Transaction\\n   * @abstract\\n   * @final\\n   * @return {array} Empty list of operation wrap procedures.\\n   */\\n  getTransactionWrappers: function () {\\n    return TRANSACTION_WRAPPERS;\\n  },\\n\\n  /**\\n   * @return {object} The queue to collect `onDOMReady` callbacks with.\\n   */\\n  getReactMountReady: function () {\\n    return noopCallbackQueue;\\n  },\\n\\n  /**\\n   * @return {object} The queue to collect React async events.\\n   */\\n  getUpdateQueue: function () {\\n    return this.updateQueue;\\n  },\\n\\n  /**\\n   * `PooledClass` looks for this, and will invoke this before allowing this\\n   * instance to be reused.\\n   */\\n  destructor: function () {},\\n\\n  checkpoint: function () {},\\n\\n  rollback: function () {}\\n};\\n\\n_assign(ReactServerRenderingTransaction.prototype, Transaction, Mixin);\\n\\nPooledClass.addPoolingTo(ReactServerRenderingTransaction);\\n\\nmodule.exports = ReactServerRenderingTransaction;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactServerRenderingTransaction.js\\n// module id = 211\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactServerRenderingTransaction.js?\");\n\n/***/ },\n/* 212 */\n/*!***************************************************!*\\\n  !*** ./~/react-dom/lib/ReactServerUpdateQueue.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2015-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\\"Cannot call a class as a function\\\"); } }\\n\\nvar ReactUpdateQueue = __webpack_require__(/*! ./ReactUpdateQueue */ 213);\\n\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nfunction warnNoop(publicInstance, callerName) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    var constructor = publicInstance.constructor;\\n    process.env.NODE_ENV !== 'production' ? warning(false, '%s(...): Can only update a mounting component. ' + 'This usually means you called %s() outside componentWillMount() on the server. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, constructor && (constructor.displayName || constructor.name) || 'ReactClass') : void 0;\\n  }\\n}\\n\\n/**\\n * This is the update queue used for server rendering.\\n * It delegates to ReactUpdateQueue while server rendering is in progress and\\n * switches to ReactNoopUpdateQueue after the transaction has completed.\\n * @class ReactServerUpdateQueue\\n * @param {Transaction} transaction\\n */\\n\\nvar ReactServerUpdateQueue = function () {\\n  function ReactServerUpdateQueue(transaction) {\\n    _classCallCheck(this, ReactServerUpdateQueue);\\n\\n    this.transaction = transaction;\\n  }\\n\\n  /**\\n   * Checks whether or not this composite component is mounted.\\n   * @param {ReactClass} publicInstance The instance we want to test.\\n   * @return {boolean} True if mounted, false otherwise.\\n   * @protected\\n   * @final\\n   */\\n\\n\\n  ReactServerUpdateQueue.prototype.isMounted = function isMounted(publicInstance) {\\n    return false;\\n  };\\n\\n  /**\\n   * Enqueue a callback that will be executed after all the pending updates\\n   * have processed.\\n   *\\n   * @param {ReactClass} publicInstance The instance to use as `this` context.\\n   * @param {?function} callback Called after state is updated.\\n   * @internal\\n   */\\n\\n\\n  ReactServerUpdateQueue.prototype.enqueueCallback = function enqueueCallback(publicInstance, callback, callerName) {\\n    if (this.transaction.isInTransaction()) {\\n      ReactUpdateQueue.enqueueCallback(publicInstance, callback, callerName);\\n    }\\n  };\\n\\n  /**\\n   * Forces an update. This should only be invoked when it is known with\\n   * certainty that we are **not** in a DOM transaction.\\n   *\\n   * You may want to call this when you know that some deeper aspect of the\\n   * component's state has changed but `setState` was not called.\\n   *\\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\\n   * `componentWillUpdate` and `componentDidUpdate`.\\n   *\\n   * @param {ReactClass} publicInstance The instance that should rerender.\\n   * @internal\\n   */\\n\\n\\n  ReactServerUpdateQueue.prototype.enqueueForceUpdate = function enqueueForceUpdate(publicInstance) {\\n    if (this.transaction.isInTransaction()) {\\n      ReactUpdateQueue.enqueueForceUpdate(publicInstance);\\n    } else {\\n      warnNoop(publicInstance, 'forceUpdate');\\n    }\\n  };\\n\\n  /**\\n   * Replaces all of the state. Always use this or `setState` to mutate state.\\n   * You should treat `this.state` as immutable.\\n   *\\n   * There is no guarantee that `this.state` will be immediately updated, so\\n   * accessing `this.state` after calling this method may return the old value.\\n   *\\n   * @param {ReactClass} publicInstance The instance that should rerender.\\n   * @param {object|function} completeState Next state.\\n   * @internal\\n   */\\n\\n\\n  ReactServerUpdateQueue.prototype.enqueueReplaceState = function enqueueReplaceState(publicInstance, completeState) {\\n    if (this.transaction.isInTransaction()) {\\n      ReactUpdateQueue.enqueueReplaceState(publicInstance, completeState);\\n    } else {\\n      warnNoop(publicInstance, 'replaceState');\\n    }\\n  };\\n\\n  /**\\n   * Sets a subset of the state. This only exists because _pendingState is\\n   * internal. This provides a merging strategy that is not available to deep\\n   * properties which is confusing. TODO: Expose pendingState or don't use it\\n   * during the merge.\\n   *\\n   * @param {ReactClass} publicInstance The instance that should rerender.\\n   * @param {object|function} partialState Next partial state to be merged with state.\\n   * @internal\\n   */\\n\\n\\n  ReactServerUpdateQueue.prototype.enqueueSetState = function enqueueSetState(publicInstance, partialState) {\\n    if (this.transaction.isInTransaction()) {\\n      ReactUpdateQueue.enqueueSetState(publicInstance, partialState);\\n    } else {\\n      warnNoop(publicInstance, 'setState');\\n    }\\n  };\\n\\n  return ReactServerUpdateQueue;\\n}();\\n\\nmodule.exports = ReactServerUpdateQueue;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactServerUpdateQueue.js\\n// module id = 212\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactServerUpdateQueue.js?\");\n\n/***/ },\n/* 213 */\n/*!*********************************************!*\\\n  !*** ./~/react-dom/lib/ReactUpdateQueue.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2015-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! react/lib/ReactCurrentOwner */ 10);\\nvar ReactInstanceMap = __webpack_require__(/*! ./ReactInstanceMap */ 194);\\nvar ReactInstrumentation = __webpack_require__(/*! ./ReactInstrumentation */ 140);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 134);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nfunction enqueueUpdate(internalInstance) {\\n  ReactUpdates.enqueueUpdate(internalInstance);\\n}\\n\\nfunction formatUnexpectedArgument(arg) {\\n  var type = typeof arg;\\n  if (type !== 'object') {\\n    return type;\\n  }\\n  var displayName = arg.constructor && arg.constructor.name || type;\\n  var keys = Object.keys(arg);\\n  if (keys.length > 0 && keys.length < 20) {\\n    return displayName + ' (keys: ' + keys.join(', ') + ')';\\n  }\\n  return displayName;\\n}\\n\\nfunction getInternalInstanceReadyForUpdate(publicInstance, callerName) {\\n  var internalInstance = ReactInstanceMap.get(publicInstance);\\n  if (!internalInstance) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      var ctor = publicInstance.constructor;\\n      // Only warn when we have a callerName. Otherwise we should be silent.\\n      // We're probably calling from enqueueCallback. We don't want to warn\\n      // there because we already warned for the corresponding lifecycle method.\\n      process.env.NODE_ENV !== 'production' ? warning(!callerName, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, ctor && (ctor.displayName || ctor.name) || 'ReactClass') : void 0;\\n    }\\n    return null;\\n  }\\n\\n  if (process.env.NODE_ENV !== 'production') {\\n    process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '%s(...): Cannot update during an existing state transition (such as ' + 'within `render` or another component\\\\'s constructor). Render methods ' + 'should be a pure function of props and state; constructor ' + 'side-effects are an anti-pattern, but can be moved to ' + '`componentWillMount`.', callerName) : void 0;\\n  }\\n\\n  return internalInstance;\\n}\\n\\n/**\\n * ReactUpdateQueue allows for state updates to be scheduled into a later\\n * reconciliation step.\\n */\\nvar ReactUpdateQueue = {\\n\\n  /**\\n   * Checks whether or not this composite component is mounted.\\n   * @param {ReactClass} publicInstance The instance we want to test.\\n   * @return {boolean} True if mounted, false otherwise.\\n   * @protected\\n   * @final\\n   */\\n  isMounted: function (publicInstance) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      var owner = ReactCurrentOwner.current;\\n      if (owner !== null) {\\n        process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : void 0;\\n        owner._warnedAboutRefsInRender = true;\\n      }\\n    }\\n    var internalInstance = ReactInstanceMap.get(publicInstance);\\n    if (internalInstance) {\\n      // During componentWillMount and render this will still be null but after\\n      // that will always render to something. At least for now. So we can use\\n      // this hack.\\n      return !!internalInstance._renderedComponent;\\n    } else {\\n      return false;\\n    }\\n  },\\n\\n  /**\\n   * Enqueue a callback that will be executed after all the pending updates\\n   * have processed.\\n   *\\n   * @param {ReactClass} publicInstance The instance to use as `this` context.\\n   * @param {?function} callback Called after state is updated.\\n   * @param {string} callerName Name of the calling function in the public API.\\n   * @internal\\n   */\\n  enqueueCallback: function (publicInstance, callback, callerName) {\\n    ReactUpdateQueue.validateCallback(callback, callerName);\\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);\\n\\n    // Previously we would throw an error if we didn't have an internal\\n    // instance. Since we want to make it a no-op instead, we mirror the same\\n    // behavior we have in other enqueue* methods.\\n    // We also need to ignore callbacks in componentWillMount. See\\n    // enqueueUpdates.\\n    if (!internalInstance) {\\n      return null;\\n    }\\n\\n    if (internalInstance._pendingCallbacks) {\\n      internalInstance._pendingCallbacks.push(callback);\\n    } else {\\n      internalInstance._pendingCallbacks = [callback];\\n    }\\n    // TODO: The callback here is ignored when setState is called from\\n    // componentWillMount. Either fix it or disallow doing so completely in\\n    // favor of getInitialState. Alternatively, we can disallow\\n    // componentWillMount during server-side rendering.\\n    enqueueUpdate(internalInstance);\\n  },\\n\\n  enqueueCallbackInternal: function (internalInstance, callback) {\\n    if (internalInstance._pendingCallbacks) {\\n      internalInstance._pendingCallbacks.push(callback);\\n    } else {\\n      internalInstance._pendingCallbacks = [callback];\\n    }\\n    enqueueUpdate(internalInstance);\\n  },\\n\\n  /**\\n   * Forces an update. This should only be invoked when it is known with\\n   * certainty that we are **not** in a DOM transaction.\\n   *\\n   * You may want to call this when you know that some deeper aspect of the\\n   * component's state has changed but `setState` was not called.\\n   *\\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\\n   * `componentWillUpdate` and `componentDidUpdate`.\\n   *\\n   * @param {ReactClass} publicInstance The instance that should rerender.\\n   * @internal\\n   */\\n  enqueueForceUpdate: function (publicInstance) {\\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'forceUpdate');\\n\\n    if (!internalInstance) {\\n      return;\\n    }\\n\\n    internalInstance._pendingForceUpdate = true;\\n\\n    enqueueUpdate(internalInstance);\\n  },\\n\\n  /**\\n   * Replaces all of the state. Always use this or `setState` to mutate state.\\n   * You should treat `this.state` as immutable.\\n   *\\n   * There is no guarantee that `this.state` will be immediately updated, so\\n   * accessing `this.state` after calling this method may return the old value.\\n   *\\n   * @param {ReactClass} publicInstance The instance that should rerender.\\n   * @param {object} completeState Next state.\\n   * @internal\\n   */\\n  enqueueReplaceState: function (publicInstance, completeState) {\\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceState');\\n\\n    if (!internalInstance) {\\n      return;\\n    }\\n\\n    internalInstance._pendingStateQueue = [completeState];\\n    internalInstance._pendingReplaceState = true;\\n\\n    enqueueUpdate(internalInstance);\\n  },\\n\\n  /**\\n   * Sets a subset of the state. This only exists because _pendingState is\\n   * internal. This provides a merging strategy that is not available to deep\\n   * properties which is confusing. TODO: Expose pendingState or don't use it\\n   * during the merge.\\n   *\\n   * @param {ReactClass} publicInstance The instance that should rerender.\\n   * @param {object} partialState Next partial state to be merged with state.\\n   * @internal\\n   */\\n  enqueueSetState: function (publicInstance, partialState) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      ReactInstrumentation.debugTool.onSetState();\\n      process.env.NODE_ENV !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : void 0;\\n    }\\n\\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setState');\\n\\n    if (!internalInstance) {\\n      return;\\n    }\\n\\n    var queue = internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []);\\n    queue.push(partialState);\\n\\n    enqueueUpdate(internalInstance);\\n  },\\n\\n  enqueueElementInternal: function (internalInstance, nextElement, nextContext) {\\n    internalInstance._pendingElement = nextElement;\\n    // TODO: introduce _pendingContext instead of setting it directly.\\n    internalInstance._context = nextContext;\\n    enqueueUpdate(internalInstance);\\n  },\\n\\n  validateCallback: function (callback, callerName) {\\n    !(!callback || typeof callback === 'function') ? process.env.NODE_ENV !== 'production' ? invariant(false, '%s(...): Expected the last optional `callback` argument to be a function. Instead received: %s.', callerName, formatUnexpectedArgument(callback)) : _prodInvariant('122', callerName, formatUnexpectedArgument(callback)) : void 0;\\n  }\\n\\n};\\n\\nmodule.exports = ReactUpdateQueue;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactUpdateQueue.js\\n// module id = 213\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactUpdateQueue.js?\");\n\n/***/ },\n/* 214 */\n/*!***********************************************!*\\\n  !*** ./~/react-dom/lib/validateDOMNesting.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2015-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar emptyFunction = __webpack_require__(/*! fbjs/lib/emptyFunction */ 12);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar validateDOMNesting = emptyFunction;\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  // This validation code was written based on the HTML5 parsing spec:\\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\\n  //\\n  // Note: this does not catch all invalid nesting, nor does it try to (as it's\\n  // not clear what practical benefit doing so provides); instead, we warn only\\n  // for cases where the parser will give a parse tree differing from what React\\n  // intended. For example, <b><div></div></b> is invalid but we don't warn\\n  // because it still parses correctly; we do warn for other cases like nested\\n  // <p> tags where the beginning of the second element implicitly closes the\\n  // first, causing a confusing mess.\\n\\n  // https://html.spec.whatwg.org/multipage/syntax.html#special\\n  var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp'];\\n\\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\\n  var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template',\\n\\n  // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\\n  // TODO: Distinguish by namespace here -- for <title>, including it here\\n  // errs on the side of fewer warnings\\n  'foreignObject', 'desc', 'title'];\\n\\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\\n  var buttonScopeTags = inScopeTags.concat(['button']);\\n\\n  // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\\n  var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\\n\\n  var emptyAncestorInfo = {\\n    current: null,\\n\\n    formTag: null,\\n    aTagInScope: null,\\n    buttonTagInScope: null,\\n    nobrTagInScope: null,\\n    pTagInButtonScope: null,\\n\\n    listItemTagAutoclosing: null,\\n    dlItemTagAutoclosing: null\\n  };\\n\\n  var updatedAncestorInfo = function (oldInfo, tag, instance) {\\n    var ancestorInfo = _assign({}, oldInfo || emptyAncestorInfo);\\n    var info = { tag: tag, instance: instance };\\n\\n    if (inScopeTags.indexOf(tag) !== -1) {\\n      ancestorInfo.aTagInScope = null;\\n      ancestorInfo.buttonTagInScope = null;\\n      ancestorInfo.nobrTagInScope = null;\\n    }\\n    if (buttonScopeTags.indexOf(tag) !== -1) {\\n      ancestorInfo.pTagInButtonScope = null;\\n    }\\n\\n    // See rules for 'li', 'dd', 'dt' start tags in\\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\\n    if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\\n      ancestorInfo.listItemTagAutoclosing = null;\\n      ancestorInfo.dlItemTagAutoclosing = null;\\n    }\\n\\n    ancestorInfo.current = info;\\n\\n    if (tag === 'form') {\\n      ancestorInfo.formTag = info;\\n    }\\n    if (tag === 'a') {\\n      ancestorInfo.aTagInScope = info;\\n    }\\n    if (tag === 'button') {\\n      ancestorInfo.buttonTagInScope = info;\\n    }\\n    if (tag === 'nobr') {\\n      ancestorInfo.nobrTagInScope = info;\\n    }\\n    if (tag === 'p') {\\n      ancestorInfo.pTagInButtonScope = info;\\n    }\\n    if (tag === 'li') {\\n      ancestorInfo.listItemTagAutoclosing = info;\\n    }\\n    if (tag === 'dd' || tag === 'dt') {\\n      ancestorInfo.dlItemTagAutoclosing = info;\\n    }\\n\\n    return ancestorInfo;\\n  };\\n\\n  /**\\n   * Returns whether\\n   */\\n  var isTagValidWithParent = function (tag, parentTag) {\\n    // First, let's check if we're in an unusual parsing mode...\\n    switch (parentTag) {\\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\\n      case 'select':\\n        return tag === 'option' || tag === 'optgroup' || tag === '#text';\\n      case 'optgroup':\\n        return tag === 'option' || tag === '#text';\\n      // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\\n      // but\\n      case 'option':\\n        return tag === '#text';\\n\\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\\n      // No special behavior since these rules fall back to \\\"in body\\\" mode for\\n      // all except special table nodes which cause bad parsing behavior anyway.\\n\\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\\n      case 'tr':\\n        return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\\n\\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\\n      case 'tbody':\\n      case 'thead':\\n      case 'tfoot':\\n        return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\\n\\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\\n      case 'colgroup':\\n        return tag === 'col' || tag === 'template';\\n\\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\\n      case 'table':\\n        return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\\n\\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\\n      case 'head':\\n        return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\\n\\n      // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\\n      case 'html':\\n        return tag === 'head' || tag === 'body';\\n      case '#document':\\n        return tag === 'html';\\n    }\\n\\n    // Probably in the \\\"in body\\\" parsing mode, so we outlaw only tag combos\\n    // where the parsing rules cause implicit opens or closes to be added.\\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\\n    switch (tag) {\\n      case 'h1':\\n      case 'h2':\\n      case 'h3':\\n      case 'h4':\\n      case 'h5':\\n      case 'h6':\\n        return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\\n\\n      case 'rp':\\n      case 'rt':\\n        return impliedEndTags.indexOf(parentTag) === -1;\\n\\n      case 'body':\\n      case 'caption':\\n      case 'col':\\n      case 'colgroup':\\n      case 'frame':\\n      case 'head':\\n      case 'html':\\n      case 'tbody':\\n      case 'td':\\n      case 'tfoot':\\n      case 'th':\\n      case 'thead':\\n      case 'tr':\\n        // These tags are only valid with a few parents that have special child\\n        // parsing rules -- if we're down here, then none of those matched and\\n        // so we allow it only if we don't know what the parent is, as all other\\n        // cases are invalid.\\n        return parentTag == null;\\n    }\\n\\n    return true;\\n  };\\n\\n  /**\\n   * Returns whether\\n   */\\n  var findInvalidAncestorForTag = function (tag, ancestorInfo) {\\n    switch (tag) {\\n      case 'address':\\n      case 'article':\\n      case 'aside':\\n      case 'blockquote':\\n      case 'center':\\n      case 'details':\\n      case 'dialog':\\n      case 'dir':\\n      case 'div':\\n      case 'dl':\\n      case 'fieldset':\\n      case 'figcaption':\\n      case 'figure':\\n      case 'footer':\\n      case 'header':\\n      case 'hgroup':\\n      case 'main':\\n      case 'menu':\\n      case 'nav':\\n      case 'ol':\\n      case 'p':\\n      case 'section':\\n      case 'summary':\\n      case 'ul':\\n\\n      case 'pre':\\n      case 'listing':\\n\\n      case 'table':\\n\\n      case 'hr':\\n\\n      case 'xmp':\\n\\n      case 'h1':\\n      case 'h2':\\n      case 'h3':\\n      case 'h4':\\n      case 'h5':\\n      case 'h6':\\n        return ancestorInfo.pTagInButtonScope;\\n\\n      case 'form':\\n        return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\\n\\n      case 'li':\\n        return ancestorInfo.listItemTagAutoclosing;\\n\\n      case 'dd':\\n      case 'dt':\\n        return ancestorInfo.dlItemTagAutoclosing;\\n\\n      case 'button':\\n        return ancestorInfo.buttonTagInScope;\\n\\n      case 'a':\\n        // Spec says something about storing a list of markers, but it sounds\\n        // equivalent to this check.\\n        return ancestorInfo.aTagInScope;\\n\\n      case 'nobr':\\n        return ancestorInfo.nobrTagInScope;\\n    }\\n\\n    return null;\\n  };\\n\\n  /**\\n   * Given a ReactCompositeComponent instance, return a list of its recursive\\n   * owners, starting at the root and ending with the instance itself.\\n   */\\n  var findOwnerStack = function (instance) {\\n    if (!instance) {\\n      return [];\\n    }\\n\\n    var stack = [];\\n    do {\\n      stack.push(instance);\\n    } while (instance = instance._currentElement._owner);\\n    stack.reverse();\\n    return stack;\\n  };\\n\\n  var didWarn = {};\\n\\n  validateDOMNesting = function (childTag, childText, childInstance, ancestorInfo) {\\n    ancestorInfo = ancestorInfo || emptyAncestorInfo;\\n    var parentInfo = ancestorInfo.current;\\n    var parentTag = parentInfo && parentInfo.tag;\\n\\n    if (childText != null) {\\n      process.env.NODE_ENV !== 'production' ? warning(childTag == null, 'validateDOMNesting: when childText is passed, childTag should be null') : void 0;\\n      childTag = '#text';\\n    }\\n\\n    var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\\n    var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\\n    var problematic = invalidParent || invalidAncestor;\\n\\n    if (problematic) {\\n      var ancestorTag = problematic.tag;\\n      var ancestorInstance = problematic.instance;\\n\\n      var childOwner = childInstance && childInstance._currentElement._owner;\\n      var ancestorOwner = ancestorInstance && ancestorInstance._currentElement._owner;\\n\\n      var childOwners = findOwnerStack(childOwner);\\n      var ancestorOwners = findOwnerStack(ancestorOwner);\\n\\n      var minStackLen = Math.min(childOwners.length, ancestorOwners.length);\\n      var i;\\n\\n      var deepestCommon = -1;\\n      for (i = 0; i < minStackLen; i++) {\\n        if (childOwners[i] === ancestorOwners[i]) {\\n          deepestCommon = i;\\n        } else {\\n          break;\\n        }\\n      }\\n\\n      var UNKNOWN = '(unknown)';\\n      var childOwnerNames = childOwners.slice(deepestCommon + 1).map(function (inst) {\\n        return inst.getName() || UNKNOWN;\\n      });\\n      var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(function (inst) {\\n        return inst.getName() || UNKNOWN;\\n      });\\n      var ownerInfo = [].concat(\\n      // If the parent and child instances have a common owner ancestor, start\\n      // with that -- otherwise we just start with the parent's owners.\\n      deepestCommon !== -1 ? childOwners[deepestCommon].getName() || UNKNOWN : [], ancestorOwnerNames, ancestorTag,\\n      // If we're warning about an invalid (non-parent) ancestry, add '...'\\n      invalidAncestor ? ['...'] : [], childOwnerNames, childTag).join(' > ');\\n\\n      var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + ownerInfo;\\n      if (didWarn[warnKey]) {\\n        return;\\n      }\\n      didWarn[warnKey] = true;\\n\\n      var tagDisplayName = childTag;\\n      var whitespaceInfo = '';\\n      if (childTag === '#text') {\\n        if (/\\\\S/.test(childText)) {\\n          tagDisplayName = 'Text nodes';\\n        } else {\\n          tagDisplayName = 'Whitespace text nodes';\\n          whitespaceInfo = ' Make sure you don\\\\'t have any extra whitespace between tags on ' + 'each line of your source code.';\\n        }\\n      } else {\\n        tagDisplayName = '<' + childTag + '>';\\n      }\\n\\n      if (invalidParent) {\\n        var info = '';\\n        if (ancestorTag === 'table' && childTag === 'tr') {\\n          info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.';\\n        }\\n        process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a child of <%s>.%s ' + 'See %s.%s', tagDisplayName, ancestorTag, whitespaceInfo, ownerInfo, info) : void 0;\\n      } else {\\n        process.env.NODE_ENV !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>. See %s.', tagDisplayName, ancestorTag, ownerInfo) : void 0;\\n      }\\n    }\\n  };\\n\\n  validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo;\\n\\n  // For testing\\n  validateDOMNesting.isTagValidInContext = function (tag, ancestorInfo) {\\n    ancestorInfo = ancestorInfo || emptyAncestorInfo;\\n    var parentInfo = ancestorInfo.current;\\n    var parentTag = parentInfo && parentInfo.tag;\\n    return isTagValidWithParent(tag, parentTag) && !findInvalidAncestorForTag(tag, ancestorInfo);\\n  };\\n}\\n\\nmodule.exports = validateDOMNesting;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/validateDOMNesting.js\\n// module id = 214\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/validateDOMNesting.js?\");\n\n/***/ },\n/* 215 */\n/*!***************************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOMEmptyComponent.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2014-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar DOMLazyTree = __webpack_require__(/*! ./DOMLazyTree */ 159);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\n\\nvar ReactDOMEmptyComponent = function (instantiate) {\\n  // ReactCompositeComponent uses this:\\n  this._currentElement = null;\\n  // ReactDOMComponentTree uses these:\\n  this._hostNode = null;\\n  this._hostParent = null;\\n  this._hostContainerInfo = null;\\n  this._domID = 0;\\n};\\n_assign(ReactDOMEmptyComponent.prototype, {\\n  mountComponent: function (transaction, hostParent, hostContainerInfo, context) {\\n    var domID = hostContainerInfo._idCounter++;\\n    this._domID = domID;\\n    this._hostParent = hostParent;\\n    this._hostContainerInfo = hostContainerInfo;\\n\\n    var nodeValue = ' react-empty: ' + this._domID + ' ';\\n    if (transaction.useCreateElement) {\\n      var ownerDocument = hostContainerInfo._ownerDocument;\\n      var node = ownerDocument.createComment(nodeValue);\\n      ReactDOMComponentTree.precacheNode(this, node);\\n      return DOMLazyTree(node);\\n    } else {\\n      if (transaction.renderToStaticMarkup) {\\n        // Normally we'd insert a comment node, but since this is a situation\\n        // where React won't take over (static pages), we can simply return\\n        // nothing.\\n        return '';\\n      }\\n      return '<!--' + nodeValue + '-->';\\n    }\\n  },\\n  receiveComponent: function () {},\\n  getHostNode: function () {\\n    return ReactDOMComponentTree.getNodeFromInstance(this);\\n  },\\n  unmountComponent: function () {\\n    ReactDOMComponentTree.uncacheNode(this);\\n  }\\n});\\n\\nmodule.exports = ReactDOMEmptyComponent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOMEmptyComponent.js\\n// module id = 215\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOMEmptyComponent.js?\");\n\n/***/ },\n/* 216 */\n/*!**************************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOMTreeTraversal.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2015-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\n/**\\n * Return the lowest common ancestor of A and B, or null if they are in\\n * different trees.\\n */\\nfunction getLowestCommonAncestor(instA, instB) {\\n  !('_hostNode' in instA) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;\\n  !('_hostNode' in instB) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;\\n\\n  var depthA = 0;\\n  for (var tempA = instA; tempA; tempA = tempA._hostParent) {\\n    depthA++;\\n  }\\n  var depthB = 0;\\n  for (var tempB = instB; tempB; tempB = tempB._hostParent) {\\n    depthB++;\\n  }\\n\\n  // If A is deeper, crawl up.\\n  while (depthA - depthB > 0) {\\n    instA = instA._hostParent;\\n    depthA--;\\n  }\\n\\n  // If B is deeper, crawl up.\\n  while (depthB - depthA > 0) {\\n    instB = instB._hostParent;\\n    depthB--;\\n  }\\n\\n  // Walk in lockstep until we find a match.\\n  var depth = depthA;\\n  while (depth--) {\\n    if (instA === instB) {\\n      return instA;\\n    }\\n    instA = instA._hostParent;\\n    instB = instB._hostParent;\\n  }\\n  return null;\\n}\\n\\n/**\\n * Return if A is an ancestor of B.\\n */\\nfunction isAncestor(instA, instB) {\\n  !('_hostNode' in instA) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;\\n  !('_hostNode' in instB) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : _prodInvariant('35') : void 0;\\n\\n  while (instB) {\\n    if (instB === instA) {\\n      return true;\\n    }\\n    instB = instB._hostParent;\\n  }\\n  return false;\\n}\\n\\n/**\\n * Return the parent instance of the passed-in instance.\\n */\\nfunction getParentInstance(inst) {\\n  !('_hostNode' in inst) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'getParentInstance: Invalid argument.') : _prodInvariant('36') : void 0;\\n\\n  return inst._hostParent;\\n}\\n\\n/**\\n * Simulates the traversal of a two-phase, capture/bubble event dispatch.\\n */\\nfunction traverseTwoPhase(inst, fn, arg) {\\n  var path = [];\\n  while (inst) {\\n    path.push(inst);\\n    inst = inst._hostParent;\\n  }\\n  var i;\\n  for (i = path.length; i-- > 0;) {\\n    fn(path[i], 'captured', arg);\\n  }\\n  for (i = 0; i < path.length; i++) {\\n    fn(path[i], 'bubbled', arg);\\n  }\\n}\\n\\n/**\\n * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that\\n * should would receive a `mouseEnter` or `mouseLeave` event.\\n *\\n * Does not invoke the callback on the nearest common ancestor because nothing\\n * \\\"entered\\\" or \\\"left\\\" that element.\\n */\\nfunction traverseEnterLeave(from, to, fn, argFrom, argTo) {\\n  var common = from && to ? getLowestCommonAncestor(from, to) : null;\\n  var pathFrom = [];\\n  while (from && from !== common) {\\n    pathFrom.push(from);\\n    from = from._hostParent;\\n  }\\n  var pathTo = [];\\n  while (to && to !== common) {\\n    pathTo.push(to);\\n    to = to._hostParent;\\n  }\\n  var i;\\n  for (i = 0; i < pathFrom.length; i++) {\\n    fn(pathFrom[i], 'bubbled', argFrom);\\n  }\\n  for (i = pathTo.length; i-- > 0;) {\\n    fn(pathTo[i], 'captured', argTo);\\n  }\\n}\\n\\nmodule.exports = {\\n  isAncestor: isAncestor,\\n  getLowestCommonAncestor: getLowestCommonAncestor,\\n  getParentInstance: getParentInstance,\\n  traverseTwoPhase: traverseTwoPhase,\\n  traverseEnterLeave: traverseEnterLeave\\n};\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOMTreeTraversal.js\\n// module id = 216\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOMTreeTraversal.js?\");\n\n/***/ },\n/* 217 */\n/*!**************************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOMTextComponent.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113),\\n    _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar DOMChildrenOperations = __webpack_require__(/*! ./DOMChildrenOperations */ 158);\\nvar DOMLazyTree = __webpack_require__(/*! ./DOMLazyTree */ 159);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\n\\nvar escapeTextContentForBrowser = __webpack_require__(/*! ./escapeTextContentForBrowser */ 164);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar validateDOMNesting = __webpack_require__(/*! ./validateDOMNesting */ 214);\\n\\n/**\\n * Text nodes violate a couple assumptions that React makes about components:\\n *\\n *  - When mounting text into the DOM, adjacent text nodes are merged.\\n *  - Text nodes cannot be assigned a React root ID.\\n *\\n * This component is used to wrap strings between comment nodes so that they\\n * can undergo the same reconciliation that is applied to elements.\\n *\\n * TODO: Investigate representing React components in the DOM with text nodes.\\n *\\n * @class ReactDOMTextComponent\\n * @extends ReactComponent\\n * @internal\\n */\\nvar ReactDOMTextComponent = function (text) {\\n  // TODO: This is really a ReactText (ReactNode), not a ReactElement\\n  this._currentElement = text;\\n  this._stringText = '' + text;\\n  // ReactDOMComponentTree uses these:\\n  this._hostNode = null;\\n  this._hostParent = null;\\n\\n  // Properties\\n  this._domID = 0;\\n  this._mountIndex = 0;\\n  this._closingComment = null;\\n  this._commentNodes = null;\\n};\\n\\n_assign(ReactDOMTextComponent.prototype, {\\n\\n  /**\\n   * Creates the markup for this text node. This node is not intended to have\\n   * any features besides containing text content.\\n   *\\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n   * @return {string} Markup for this text node.\\n   * @internal\\n   */\\n  mountComponent: function (transaction, hostParent, hostContainerInfo, context) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      var parentInfo;\\n      if (hostParent != null) {\\n        parentInfo = hostParent._ancestorInfo;\\n      } else if (hostContainerInfo != null) {\\n        parentInfo = hostContainerInfo._ancestorInfo;\\n      }\\n      if (parentInfo) {\\n        // parentInfo should always be present except for the top-level\\n        // component when server rendering\\n        validateDOMNesting(null, this._stringText, this, parentInfo);\\n      }\\n    }\\n\\n    var domID = hostContainerInfo._idCounter++;\\n    var openingValue = ' react-text: ' + domID + ' ';\\n    var closingValue = ' /react-text ';\\n    this._domID = domID;\\n    this._hostParent = hostParent;\\n    if (transaction.useCreateElement) {\\n      var ownerDocument = hostContainerInfo._ownerDocument;\\n      var openingComment = ownerDocument.createComment(openingValue);\\n      var closingComment = ownerDocument.createComment(closingValue);\\n      var lazyTree = DOMLazyTree(ownerDocument.createDocumentFragment());\\n      DOMLazyTree.queueChild(lazyTree, DOMLazyTree(openingComment));\\n      if (this._stringText) {\\n        DOMLazyTree.queueChild(lazyTree, DOMLazyTree(ownerDocument.createTextNode(this._stringText)));\\n      }\\n      DOMLazyTree.queueChild(lazyTree, DOMLazyTree(closingComment));\\n      ReactDOMComponentTree.precacheNode(this, openingComment);\\n      this._closingComment = closingComment;\\n      return lazyTree;\\n    } else {\\n      var escapedText = escapeTextContentForBrowser(this._stringText);\\n\\n      if (transaction.renderToStaticMarkup) {\\n        // Normally we'd wrap this between comment nodes for the reasons stated\\n        // above, but since this is a situation where React won't take over\\n        // (static pages), we can simply return the text as it is.\\n        return escapedText;\\n      }\\n\\n      return '<!--' + openingValue + '-->' + escapedText + '<!--' + closingValue + '-->';\\n    }\\n  },\\n\\n  /**\\n   * Updates this component by updating the text content.\\n   *\\n   * @param {ReactText} nextText The next text content\\n   * @param {ReactReconcileTransaction} transaction\\n   * @internal\\n   */\\n  receiveComponent: function (nextText, transaction) {\\n    if (nextText !== this._currentElement) {\\n      this._currentElement = nextText;\\n      var nextStringText = '' + nextText;\\n      if (nextStringText !== this._stringText) {\\n        // TODO: Save this as pending props and use performUpdateIfNecessary\\n        // and/or updateComponent to do the actual update for consistency with\\n        // other component types?\\n        this._stringText = nextStringText;\\n        var commentNodes = this.getHostNode();\\n        DOMChildrenOperations.replaceDelimitedText(commentNodes[0], commentNodes[1], nextStringText);\\n      }\\n    }\\n  },\\n\\n  getHostNode: function () {\\n    var hostNode = this._commentNodes;\\n    if (hostNode) {\\n      return hostNode;\\n    }\\n    if (!this._closingComment) {\\n      var openingComment = ReactDOMComponentTree.getNodeFromInstance(this);\\n      var node = openingComment.nextSibling;\\n      while (true) {\\n        !(node != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Missing closing comment for text component %s', this._domID) : _prodInvariant('67', this._domID) : void 0;\\n        if (node.nodeType === 8 && node.nodeValue === ' /react-text ') {\\n          this._closingComment = node;\\n          break;\\n        }\\n        node = node.nextSibling;\\n      }\\n    }\\n    hostNode = [this._hostNode, this._closingComment];\\n    this._commentNodes = hostNode;\\n    return hostNode;\\n  },\\n\\n  unmountComponent: function () {\\n    this._closingComment = null;\\n    this._commentNodes = null;\\n    ReactDOMComponentTree.uncacheNode(this);\\n  }\\n\\n});\\n\\nmodule.exports = ReactDOMTextComponent;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOMTextComponent.js\\n// module id = 217\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOMTextComponent.js?\");\n\n/***/ },\n/* 218 */\n/*!*********************************************************!*\\\n  !*** ./~/react-dom/lib/ReactDefaultBatchingStrategy.js ***!\n  \\*********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 134);\\nvar Transaction = __webpack_require__(/*! ./Transaction */ 146);\\n\\nvar emptyFunction = __webpack_require__(/*! fbjs/lib/emptyFunction */ 12);\\n\\nvar RESET_BATCHED_UPDATES = {\\n  initialize: emptyFunction,\\n  close: function () {\\n    ReactDefaultBatchingStrategy.isBatchingUpdates = false;\\n  }\\n};\\n\\nvar FLUSH_BATCHED_UPDATES = {\\n  initialize: emptyFunction,\\n  close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)\\n};\\n\\nvar TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];\\n\\nfunction ReactDefaultBatchingStrategyTransaction() {\\n  this.reinitializeTransaction();\\n}\\n\\n_assign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction, {\\n  getTransactionWrappers: function () {\\n    return TRANSACTION_WRAPPERS;\\n  }\\n});\\n\\nvar transaction = new ReactDefaultBatchingStrategyTransaction();\\n\\nvar ReactDefaultBatchingStrategy = {\\n  isBatchingUpdates: false,\\n\\n  /**\\n   * Call the provided function in a context within which calls to `setState`\\n   * and friends are batched such that components aren't updated unnecessarily.\\n   */\\n  batchedUpdates: function (callback, a, b, c, d, e) {\\n    var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;\\n\\n    ReactDefaultBatchingStrategy.isBatchingUpdates = true;\\n\\n    // The code is written this way to avoid extra allocations\\n    if (alreadyBatchingUpdates) {\\n      return callback(a, b, c, d, e);\\n    } else {\\n      return transaction.perform(callback, null, a, b, c, d, e);\\n    }\\n  }\\n};\\n\\nmodule.exports = ReactDefaultBatchingStrategy;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDefaultBatchingStrategy.js\\n// module id = 218\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDefaultBatchingStrategy.js?\");\n\n/***/ },\n/* 219 */\n/*!***********************************************!*\\\n  !*** ./~/react-dom/lib/ReactEventListener.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar EventListener = __webpack_require__(/*! fbjs/lib/EventListener */ 220);\\nvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ 126);\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 128);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 134);\\n\\nvar getEventTarget = __webpack_require__(/*! ./getEventTarget */ 147);\\nvar getUnboundedScrollPosition = __webpack_require__(/*! fbjs/lib/getUnboundedScrollPosition */ 221);\\n\\n/**\\n * Find the deepest React component completely containing the root of the\\n * passed-in instance (for use when entire React trees are nested within each\\n * other). If React trees are not nested, returns null.\\n */\\nfunction findParent(inst) {\\n  // TODO: It may be a good idea to cache this to prevent unnecessary DOM\\n  // traversal, but caching is difficult to do correctly without using a\\n  // mutation observer to listen for all DOM changes.\\n  while (inst._hostParent) {\\n    inst = inst._hostParent;\\n  }\\n  var rootNode = ReactDOMComponentTree.getNodeFromInstance(inst);\\n  var container = rootNode.parentNode;\\n  return ReactDOMComponentTree.getClosestInstanceFromNode(container);\\n}\\n\\n// Used to store ancestor hierarchy in top level callback\\nfunction TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {\\n  this.topLevelType = topLevelType;\\n  this.nativeEvent = nativeEvent;\\n  this.ancestors = [];\\n}\\n_assign(TopLevelCallbackBookKeeping.prototype, {\\n  destructor: function () {\\n    this.topLevelType = null;\\n    this.nativeEvent = null;\\n    this.ancestors.length = 0;\\n  }\\n});\\nPooledClass.addPoolingTo(TopLevelCallbackBookKeeping, PooledClass.twoArgumentPooler);\\n\\nfunction handleTopLevelImpl(bookKeeping) {\\n  var nativeEventTarget = getEventTarget(bookKeeping.nativeEvent);\\n  var targetInst = ReactDOMComponentTree.getClosestInstanceFromNode(nativeEventTarget);\\n\\n  // Loop through the hierarchy, in case there's any nested components.\\n  // It's important that we build the array of ancestors before calling any\\n  // event handlers, because event handlers can modify the DOM, leading to\\n  // inconsistencies with ReactMount's node cache. See #1105.\\n  var ancestor = targetInst;\\n  do {\\n    bookKeeping.ancestors.push(ancestor);\\n    ancestor = ancestor && findParent(ancestor);\\n  } while (ancestor);\\n\\n  for (var i = 0; i < bookKeeping.ancestors.length; i++) {\\n    targetInst = bookKeeping.ancestors[i];\\n    ReactEventListener._handleTopLevel(bookKeeping.topLevelType, targetInst, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));\\n  }\\n}\\n\\nfunction scrollValueMonitor(cb) {\\n  var scrollPosition = getUnboundedScrollPosition(window);\\n  cb(scrollPosition);\\n}\\n\\nvar ReactEventListener = {\\n  _enabled: true,\\n  _handleTopLevel: null,\\n\\n  WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,\\n\\n  setHandleTopLevel: function (handleTopLevel) {\\n    ReactEventListener._handleTopLevel = handleTopLevel;\\n  },\\n\\n  setEnabled: function (enabled) {\\n    ReactEventListener._enabled = !!enabled;\\n  },\\n\\n  isEnabled: function () {\\n    return ReactEventListener._enabled;\\n  },\\n\\n  /**\\n   * Traps top-level events by using event bubbling.\\n   *\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {string} handlerBaseName Event name (e.g. \\\"click\\\").\\n   * @param {object} element Element on which to attach listener.\\n   * @return {?object} An object with a remove function which will forcefully\\n   *                  remove the listener.\\n   * @internal\\n   */\\n  trapBubbledEvent: function (topLevelType, handlerBaseName, element) {\\n    if (!element) {\\n      return null;\\n    }\\n    return EventListener.listen(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));\\n  },\\n\\n  /**\\n   * Traps a top-level event by using event capturing.\\n   *\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {string} handlerBaseName Event name (e.g. \\\"click\\\").\\n   * @param {object} element Element on which to attach listener.\\n   * @return {?object} An object with a remove function which will forcefully\\n   *                  remove the listener.\\n   * @internal\\n   */\\n  trapCapturedEvent: function (topLevelType, handlerBaseName, element) {\\n    if (!element) {\\n      return null;\\n    }\\n    return EventListener.capture(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));\\n  },\\n\\n  monitorScrollValue: function (refresh) {\\n    var callback = scrollValueMonitor.bind(null, refresh);\\n    EventListener.listen(window, 'scroll', callback);\\n  },\\n\\n  dispatchEvent: function (topLevelType, nativeEvent) {\\n    if (!ReactEventListener._enabled) {\\n      return;\\n    }\\n\\n    var bookKeeping = TopLevelCallbackBookKeeping.getPooled(topLevelType, nativeEvent);\\n    try {\\n      // Event queue being processed in the same cycle allows\\n      // `preventDefault`.\\n      ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);\\n    } finally {\\n      TopLevelCallbackBookKeeping.release(bookKeeping);\\n    }\\n  }\\n};\\n\\nmodule.exports = ReactEventListener;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactEventListener.js\\n// module id = 219\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactEventListener.js?\");\n\n/***/ },\n/* 220 */\n/*!*************************************!*\\\n  !*** ./~/fbjs/lib/EventListener.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\n/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n *\\n * @typechecks\\n */\\n\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\n\\n/**\\n * Upstream version of event listener. Does not take into account specific\\n * nature of platform.\\n */\\nvar EventListener = {\\n  /**\\n   * Listen to DOM events during the bubble phase.\\n   *\\n   * @param {DOMEventTarget} target DOM element to register listener on.\\n   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\\n   * @param {function} callback Callback function.\\n   * @return {object} Object with a `remove` method.\\n   */\\n  listen: function listen(target, eventType, callback) {\\n    if (target.addEventListener) {\\n      target.addEventListener(eventType, callback, false);\\n      return {\\n        remove: function remove() {\\n          target.removeEventListener(eventType, callback, false);\\n        }\\n      };\\n    } else if (target.attachEvent) {\\n      target.attachEvent('on' + eventType, callback);\\n      return {\\n        remove: function remove() {\\n          target.detachEvent('on' + eventType, callback);\\n        }\\n      };\\n    }\\n  },\\n\\n  /**\\n   * Listen to DOM events during the capture phase.\\n   *\\n   * @param {DOMEventTarget} target DOM element to register listener on.\\n   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\\n   * @param {function} callback Callback function.\\n   * @return {object} Object with a `remove` method.\\n   */\\n  capture: function capture(target, eventType, callback) {\\n    if (target.addEventListener) {\\n      target.addEventListener(eventType, callback, true);\\n      return {\\n        remove: function remove() {\\n          target.removeEventListener(eventType, callback, true);\\n        }\\n      };\\n    } else {\\n      if (process.env.NODE_ENV !== 'production') {\\n        console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');\\n      }\\n      return {\\n        remove: emptyFunction\\n      };\\n    }\\n  },\\n\\n  registerDefault: function registerDefault() {}\\n};\\n\\nmodule.exports = EventListener;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/EventListener.js\\n// module id = 220\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/EventListener.js?\");\n\n/***/ },\n/* 221 */\n/*!**************************************************!*\\\n  !*** ./~/fbjs/lib/getUnboundedScrollPosition.js ***!\n  \\**************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @typechecks\\n */\\n\\n'use strict';\\n\\n/**\\n * Gets the scroll position of the supplied element or window.\\n *\\n * The return values are unbounded, unlike `getScrollPosition`. This means they\\n * may be negative or exceed the element boundaries (which is possible using\\n * inertial scrolling).\\n *\\n * @param {DOMWindow|DOMElement} scrollable\\n * @return {object} Map with `x` and `y` keys.\\n */\\n\\nfunction getUnboundedScrollPosition(scrollable) {\\n  if (scrollable === window) {\\n    return {\\n      x: window.pageXOffset || document.documentElement.scrollLeft,\\n      y: window.pageYOffset || document.documentElement.scrollTop\\n    };\\n  }\\n  return {\\n    x: scrollable.scrollLeft,\\n    y: scrollable.scrollTop\\n  };\\n}\\n\\nmodule.exports = getUnboundedScrollPosition;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/getUnboundedScrollPosition.js\\n// module id = 221\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/getUnboundedScrollPosition.js?\");\n\n/***/ },\n/* 222 */\n/*!*******************************************!*\\\n  !*** ./~/react-dom/lib/ReactInjection.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 114);\\nvar EventPluginHub = __webpack_require__(/*! ./EventPluginHub */ 120);\\nvar EventPluginUtils = __webpack_require__(/*! ./EventPluginUtils */ 122);\\nvar ReactComponentEnvironment = __webpack_require__(/*! ./ReactComponentEnvironment */ 193);\\nvar ReactEmptyComponent = __webpack_require__(/*! ./ReactEmptyComponent */ 203);\\nvar ReactBrowserEventEmitter = __webpack_require__(/*! ./ReactBrowserEventEmitter */ 183);\\nvar ReactHostComponent = __webpack_require__(/*! ./ReactHostComponent */ 204);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 134);\\n\\nvar ReactInjection = {\\n  Component: ReactComponentEnvironment.injection,\\n  DOMProperty: DOMProperty.injection,\\n  EmptyComponent: ReactEmptyComponent.injection,\\n  EventPluginHub: EventPluginHub.injection,\\n  EventPluginUtils: EventPluginUtils.injection,\\n  EventEmitter: ReactBrowserEventEmitter.injection,\\n  HostComponent: ReactHostComponent.injection,\\n  Updates: ReactUpdates.injection\\n};\\n\\nmodule.exports = ReactInjection;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactInjection.js\\n// module id = 222\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactInjection.js?\");\n\n/***/ },\n/* 223 */\n/*!******************************************************!*\\\n  !*** ./~/react-dom/lib/ReactReconcileTransaction.js ***!\n  \\******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ 4);\\n\\nvar CallbackQueue = __webpack_require__(/*! ./CallbackQueue */ 135);\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 128);\\nvar ReactBrowserEventEmitter = __webpack_require__(/*! ./ReactBrowserEventEmitter */ 183);\\nvar ReactInputSelection = __webpack_require__(/*! ./ReactInputSelection */ 224);\\nvar ReactInstrumentation = __webpack_require__(/*! ./ReactInstrumentation */ 140);\\nvar Transaction = __webpack_require__(/*! ./Transaction */ 146);\\nvar ReactUpdateQueue = __webpack_require__(/*! ./ReactUpdateQueue */ 213);\\n\\n/**\\n * Ensures that, when possible, the selection range (currently selected text\\n * input) is not disturbed by performing the transaction.\\n */\\nvar SELECTION_RESTORATION = {\\n  /**\\n   * @return {Selection} Selection information.\\n   */\\n  initialize: ReactInputSelection.getSelectionInformation,\\n  /**\\n   * @param {Selection} sel Selection information returned from `initialize`.\\n   */\\n  close: ReactInputSelection.restoreSelection\\n};\\n\\n/**\\n * Suppresses events (blur/focus) that could be inadvertently dispatched due to\\n * high level DOM manipulations (like temporarily removing a text input from the\\n * DOM).\\n */\\nvar EVENT_SUPPRESSION = {\\n  /**\\n   * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before\\n   * the reconciliation.\\n   */\\n  initialize: function () {\\n    var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();\\n    ReactBrowserEventEmitter.setEnabled(false);\\n    return currentlyEnabled;\\n  },\\n\\n  /**\\n   * @param {boolean} previouslyEnabled Enabled status of\\n   *   `ReactBrowserEventEmitter` before the reconciliation occurred. `close`\\n   *   restores the previous value.\\n   */\\n  close: function (previouslyEnabled) {\\n    ReactBrowserEventEmitter.setEnabled(previouslyEnabled);\\n  }\\n};\\n\\n/**\\n * Provides a queue for collecting `componentDidMount` and\\n * `componentDidUpdate` callbacks during the transaction.\\n */\\nvar ON_DOM_READY_QUEUEING = {\\n  /**\\n   * Initializes the internal `onDOMReady` queue.\\n   */\\n  initialize: function () {\\n    this.reactMountReady.reset();\\n  },\\n\\n  /**\\n   * After DOM is flushed, invoke all registered `onDOMReady` callbacks.\\n   */\\n  close: function () {\\n    this.reactMountReady.notifyAll();\\n  }\\n};\\n\\n/**\\n * Executed within the scope of the `Transaction` instance. Consider these as\\n * being member methods, but with an implied ordering while being isolated from\\n * each other.\\n */\\nvar TRANSACTION_WRAPPERS = [SELECTION_RESTORATION, EVENT_SUPPRESSION, ON_DOM_READY_QUEUEING];\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  TRANSACTION_WRAPPERS.push({\\n    initialize: ReactInstrumentation.debugTool.onBeginFlush,\\n    close: ReactInstrumentation.debugTool.onEndFlush\\n  });\\n}\\n\\n/**\\n * Currently:\\n * - The order that these are listed in the transaction is critical:\\n * - Suppresses events.\\n * - Restores selection range.\\n *\\n * Future:\\n * - Restore document/overflow scroll positions that were unintentionally\\n *   modified via DOM insertions above the top viewport boundary.\\n * - Implement/integrate with customized constraint based layout system and keep\\n *   track of which dimensions must be remeasured.\\n *\\n * @class ReactReconcileTransaction\\n */\\nfunction ReactReconcileTransaction(useCreateElement) {\\n  this.reinitializeTransaction();\\n  // Only server-side rendering really needs this option (see\\n  // `ReactServerRendering`), but server-side uses\\n  // `ReactServerRenderingTransaction` instead. This option is here so that it's\\n  // accessible and defaults to false when `ReactDOMComponent` and\\n  // `ReactDOMTextComponent` checks it in `mountComponent`.`\\n  this.renderToStaticMarkup = false;\\n  this.reactMountReady = CallbackQueue.getPooled(null);\\n  this.useCreateElement = useCreateElement;\\n}\\n\\nvar Mixin = {\\n  /**\\n   * @see Transaction\\n   * @abstract\\n   * @final\\n   * @return {array<object>} List of operation wrap procedures.\\n   *   TODO: convert to array<TransactionWrapper>\\n   */\\n  getTransactionWrappers: function () {\\n    return TRANSACTION_WRAPPERS;\\n  },\\n\\n  /**\\n   * @return {object} The queue to collect `onDOMReady` callbacks with.\\n   */\\n  getReactMountReady: function () {\\n    return this.reactMountReady;\\n  },\\n\\n  /**\\n   * @return {object} The queue to collect React async events.\\n   */\\n  getUpdateQueue: function () {\\n    return ReactUpdateQueue;\\n  },\\n\\n  /**\\n   * Save current transaction state -- if the return value from this method is\\n   * passed to `rollback`, the transaction will be reset to that state.\\n   */\\n  checkpoint: function () {\\n    // reactMountReady is the our only stateful wrapper\\n    return this.reactMountReady.checkpoint();\\n  },\\n\\n  rollback: function (checkpoint) {\\n    this.reactMountReady.rollback(checkpoint);\\n  },\\n\\n  /**\\n   * `PooledClass` looks for this, and will invoke this before allowing this\\n   * instance to be reused.\\n   */\\n  destructor: function () {\\n    CallbackQueue.release(this.reactMountReady);\\n    this.reactMountReady = null;\\n  }\\n};\\n\\n_assign(ReactReconcileTransaction.prototype, Transaction, Mixin);\\n\\nPooledClass.addPoolingTo(ReactReconcileTransaction);\\n\\nmodule.exports = ReactReconcileTransaction;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactReconcileTransaction.js\\n// module id = 223\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactReconcileTransaction.js?\");\n\n/***/ },\n/* 224 */\n/*!************************************************!*\\\n  !*** ./~/react-dom/lib/ReactInputSelection.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ReactDOMSelection = __webpack_require__(/*! ./ReactDOMSelection */ 225);\\n\\nvar containsNode = __webpack_require__(/*! fbjs/lib/containsNode */ 227);\\nvar focusNode = __webpack_require__(/*! fbjs/lib/focusNode */ 172);\\nvar getActiveElement = __webpack_require__(/*! fbjs/lib/getActiveElement */ 230);\\n\\nfunction isInDocument(node) {\\n  return containsNode(document.documentElement, node);\\n}\\n\\n/**\\n * @ReactInputSelection: React input selection module. Based on Selection.js,\\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\\n * assume buttons have range selections allowed).\\n * Input selection module for React.\\n */\\nvar ReactInputSelection = {\\n\\n  hasSelectionCapabilities: function (elem) {\\n    var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\\n    return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true');\\n  },\\n\\n  getSelectionInformation: function () {\\n    var focusedElem = getActiveElement();\\n    return {\\n      focusedElem: focusedElem,\\n      selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null\\n    };\\n  },\\n\\n  /**\\n   * @restoreSelection: If any selection information was potentially lost,\\n   * restore it. This is useful when performing operations that could remove dom\\n   * nodes and place them back in, resulting in focus being lost.\\n   */\\n  restoreSelection: function (priorSelectionInformation) {\\n    var curFocusedElem = getActiveElement();\\n    var priorFocusedElem = priorSelectionInformation.focusedElem;\\n    var priorSelectionRange = priorSelectionInformation.selectionRange;\\n    if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\\n      if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {\\n        ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange);\\n      }\\n      focusNode(priorFocusedElem);\\n    }\\n  },\\n\\n  /**\\n   * @getSelection: Gets the selection bounds of a focused textarea, input or\\n   * contentEditable node.\\n   * -@input: Look up selection bounds of this input\\n   * -@return {start: selectionStart, end: selectionEnd}\\n   */\\n  getSelection: function (input) {\\n    var selection;\\n\\n    if ('selectionStart' in input) {\\n      // Modern browser with input or textarea.\\n      selection = {\\n        start: input.selectionStart,\\n        end: input.selectionEnd\\n      };\\n    } else if (document.selection && input.nodeName && input.nodeName.toLowerCase() === 'input') {\\n      // IE8 input.\\n      var range = document.selection.createRange();\\n      // There can only be one selection per document in IE, so it must\\n      // be in our element.\\n      if (range.parentElement() === input) {\\n        selection = {\\n          start: -range.moveStart('character', -input.value.length),\\n          end: -range.moveEnd('character', -input.value.length)\\n        };\\n      }\\n    } else {\\n      // Content editable or old IE textarea.\\n      selection = ReactDOMSelection.getOffsets(input);\\n    }\\n\\n    return selection || { start: 0, end: 0 };\\n  },\\n\\n  /**\\n   * @setSelection: Sets the selection bounds of a textarea or input and focuses\\n   * the input.\\n   * -@input     Set selection bounds of this input or textarea\\n   * -@offsets   Object of same form that is returned from get*\\n   */\\n  setSelection: function (input, offsets) {\\n    var start = offsets.start;\\n    var end = offsets.end;\\n    if (end === undefined) {\\n      end = start;\\n    }\\n\\n    if ('selectionStart' in input) {\\n      input.selectionStart = start;\\n      input.selectionEnd = Math.min(end, input.value.length);\\n    } else if (document.selection && input.nodeName && input.nodeName.toLowerCase() === 'input') {\\n      var range = input.createTextRange();\\n      range.collapse(true);\\n      range.moveStart('character', start);\\n      range.moveEnd('character', end - start);\\n      range.select();\\n    } else {\\n      ReactDOMSelection.setOffsets(input, offsets);\\n    }\\n  }\\n};\\n\\nmodule.exports = ReactInputSelection;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactInputSelection.js\\n// module id = 224\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactInputSelection.js?\");\n\n/***/ },\n/* 225 */\n/*!**********************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOMSelection.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ 126);\\n\\nvar getNodeForCharacterOffset = __webpack_require__(/*! ./getNodeForCharacterOffset */ 226);\\nvar getTextContentAccessor = __webpack_require__(/*! ./getTextContentAccessor */ 129);\\n\\n/**\\n * While `isCollapsed` is available on the Selection object and `collapsed`\\n * is available on the Range object, IE11 sometimes gets them wrong.\\n * If the anchor/focus nodes and offsets are the same, the range is collapsed.\\n */\\nfunction isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {\\n  return anchorNode === focusNode && anchorOffset === focusOffset;\\n}\\n\\n/**\\n * Get the appropriate anchor and focus node/offset pairs for IE.\\n *\\n * The catch here is that IE's selection API doesn't provide information\\n * about whether the selection is forward or backward, so we have to\\n * behave as though it's always forward.\\n *\\n * IE text differs from modern selection in that it behaves as though\\n * block elements end with a new line. This means character offsets will\\n * differ between the two APIs.\\n *\\n * @param {DOMElement} node\\n * @return {object}\\n */\\nfunction getIEOffsets(node) {\\n  var selection = document.selection;\\n  var selectedRange = selection.createRange();\\n  var selectedLength = selectedRange.text.length;\\n\\n  // Duplicate selection so we can move range without breaking user selection.\\n  var fromStart = selectedRange.duplicate();\\n  fromStart.moveToElementText(node);\\n  fromStart.setEndPoint('EndToStart', selectedRange);\\n\\n  var startOffset = fromStart.text.length;\\n  var endOffset = startOffset + selectedLength;\\n\\n  return {\\n    start: startOffset,\\n    end: endOffset\\n  };\\n}\\n\\n/**\\n * @param {DOMElement} node\\n * @return {?object}\\n */\\nfunction getModernOffsets(node) {\\n  var selection = window.getSelection && window.getSelection();\\n\\n  if (!selection || selection.rangeCount === 0) {\\n    return null;\\n  }\\n\\n  var anchorNode = selection.anchorNode;\\n  var anchorOffset = selection.anchorOffset;\\n  var focusNode = selection.focusNode;\\n  var focusOffset = selection.focusOffset;\\n\\n  var currentRange = selection.getRangeAt(0);\\n\\n  // In Firefox, range.startContainer and range.endContainer can be \\\"anonymous\\n  // divs\\\", e.g. the up/down buttons on an <input type=\\\"number\\\">. Anonymous\\n  // divs do not seem to expose properties, triggering a \\\"Permission denied\\n  // error\\\" if any of its properties are accessed. The only seemingly possible\\n  // way to avoid erroring is to access a property that typically works for\\n  // non-anonymous divs and catch any error that may otherwise arise. See\\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\\n  try {\\n    /* eslint-disable no-unused-expressions */\\n    currentRange.startContainer.nodeType;\\n    currentRange.endContainer.nodeType;\\n    /* eslint-enable no-unused-expressions */\\n  } catch (e) {\\n    return null;\\n  }\\n\\n  // If the node and offset values are the same, the selection is collapsed.\\n  // `Selection.isCollapsed` is available natively, but IE sometimes gets\\n  // this value wrong.\\n  var isSelectionCollapsed = isCollapsed(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\\n\\n  var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length;\\n\\n  var tempRange = currentRange.cloneRange();\\n  tempRange.selectNodeContents(node);\\n  tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);\\n\\n  var isTempRangeCollapsed = isCollapsed(tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset);\\n\\n  var start = isTempRangeCollapsed ? 0 : tempRange.toString().length;\\n  var end = start + rangeLength;\\n\\n  // Detect whether the selection is backward.\\n  var detectionRange = document.createRange();\\n  detectionRange.setStart(anchorNode, anchorOffset);\\n  detectionRange.setEnd(focusNode, focusOffset);\\n  var isBackward = detectionRange.collapsed;\\n\\n  return {\\n    start: isBackward ? end : start,\\n    end: isBackward ? start : end\\n  };\\n}\\n\\n/**\\n * @param {DOMElement|DOMTextNode} node\\n * @param {object} offsets\\n */\\nfunction setIEOffsets(node, offsets) {\\n  var range = document.selection.createRange().duplicate();\\n  var start, end;\\n\\n  if (offsets.end === undefined) {\\n    start = offsets.start;\\n    end = start;\\n  } else if (offsets.start > offsets.end) {\\n    start = offsets.end;\\n    end = offsets.start;\\n  } else {\\n    start = offsets.start;\\n    end = offsets.end;\\n  }\\n\\n  range.moveToElementText(node);\\n  range.moveStart('character', start);\\n  range.setEndPoint('EndToStart', range);\\n  range.moveEnd('character', end - start);\\n  range.select();\\n}\\n\\n/**\\n * In modern non-IE browsers, we can support both forward and backward\\n * selections.\\n *\\n * Note: IE10+ supports the Selection object, but it does not support\\n * the `extend` method, which means that even in modern IE, it's not possible\\n * to programmatically create a backward selection. Thus, for all IE\\n * versions, we use the old IE API to create our selections.\\n *\\n * @param {DOMElement|DOMTextNode} node\\n * @param {object} offsets\\n */\\nfunction setModernOffsets(node, offsets) {\\n  if (!window.getSelection) {\\n    return;\\n  }\\n\\n  var selection = window.getSelection();\\n  var length = node[getTextContentAccessor()].length;\\n  var start = Math.min(offsets.start, length);\\n  var end = offsets.end === undefined ? start : Math.min(offsets.end, length);\\n\\n  // IE 11 uses modern selection, but doesn't support the extend method.\\n  // Flip backward selections, so we can set with a single range.\\n  if (!selection.extend && start > end) {\\n    var temp = end;\\n    end = start;\\n    start = temp;\\n  }\\n\\n  var startMarker = getNodeForCharacterOffset(node, start);\\n  var endMarker = getNodeForCharacterOffset(node, end);\\n\\n  if (startMarker && endMarker) {\\n    var range = document.createRange();\\n    range.setStart(startMarker.node, startMarker.offset);\\n    selection.removeAllRanges();\\n\\n    if (start > end) {\\n      selection.addRange(range);\\n      selection.extend(endMarker.node, endMarker.offset);\\n    } else {\\n      range.setEnd(endMarker.node, endMarker.offset);\\n      selection.addRange(range);\\n    }\\n  }\\n}\\n\\nvar useIEOffsets = ExecutionEnvironment.canUseDOM && 'selection' in document && !('getSelection' in window);\\n\\nvar ReactDOMSelection = {\\n  /**\\n   * @param {DOMElement} node\\n   */\\n  getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,\\n\\n  /**\\n   * @param {DOMElement|DOMTextNode} node\\n   * @param {object} offsets\\n   */\\n  setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets\\n};\\n\\nmodule.exports = ReactDOMSelection;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOMSelection.js\\n// module id = 225\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOMSelection.js?\");\n\n/***/ },\n/* 226 */\n/*!******************************************************!*\\\n  !*** ./~/react-dom/lib/getNodeForCharacterOffset.js ***!\n  \\******************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\n/**\\n * Given any node return the first leaf node without children.\\n *\\n * @param {DOMElement|DOMTextNode} node\\n * @return {DOMElement|DOMTextNode}\\n */\\n\\nfunction getLeafNode(node) {\\n  while (node && node.firstChild) {\\n    node = node.firstChild;\\n  }\\n  return node;\\n}\\n\\n/**\\n * Get the next sibling within a container. This will walk up the\\n * DOM if a node's siblings have been exhausted.\\n *\\n * @param {DOMElement|DOMTextNode} node\\n * @return {?DOMElement|DOMTextNode}\\n */\\nfunction getSiblingNode(node) {\\n  while (node) {\\n    if (node.nextSibling) {\\n      return node.nextSibling;\\n    }\\n    node = node.parentNode;\\n  }\\n}\\n\\n/**\\n * Get object describing the nodes which contain characters at offset.\\n *\\n * @param {DOMElement|DOMTextNode} root\\n * @param {number} offset\\n * @return {?object}\\n */\\nfunction getNodeForCharacterOffset(root, offset) {\\n  var node = getLeafNode(root);\\n  var nodeStart = 0;\\n  var nodeEnd = 0;\\n\\n  while (node) {\\n    if (node.nodeType === 3) {\\n      nodeEnd = nodeStart + node.textContent.length;\\n\\n      if (nodeStart <= offset && nodeEnd >= offset) {\\n        return {\\n          node: node,\\n          offset: offset - nodeStart\\n        };\\n      }\\n\\n      nodeStart = nodeEnd;\\n    }\\n\\n    node = getLeafNode(getSiblingNode(node));\\n  }\\n}\\n\\nmodule.exports = getNodeForCharacterOffset;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/getNodeForCharacterOffset.js\\n// module id = 226\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/getNodeForCharacterOffset.js?\");\n\n/***/ },\n/* 227 */\n/*!************************************!*\\\n  !*** ./~/fbjs/lib/containsNode.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\n/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\nvar isTextNode = __webpack_require__(/*! ./isTextNode */ 228);\\n\\n/*eslint-disable no-bitwise */\\n\\n/**\\n * Checks if a given DOM node contains or is another DOM node.\\n */\\nfunction containsNode(outerNode, innerNode) {\\n  if (!outerNode || !innerNode) {\\n    return false;\\n  } else if (outerNode === innerNode) {\\n    return true;\\n  } else if (isTextNode(outerNode)) {\\n    return false;\\n  } else if (isTextNode(innerNode)) {\\n    return containsNode(outerNode, innerNode.parentNode);\\n  } else if ('contains' in outerNode) {\\n    return outerNode.contains(innerNode);\\n  } else if (outerNode.compareDocumentPosition) {\\n    return !!(outerNode.compareDocumentPosition(innerNode) & 16);\\n  } else {\\n    return false;\\n  }\\n}\\n\\nmodule.exports = containsNode;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/containsNode.js\\n// module id = 227\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/containsNode.js?\");\n\n/***/ },\n/* 228 */\n/*!**********************************!*\\\n  !*** ./~/fbjs/lib/isTextNode.js ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\n/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @typechecks\\n */\\n\\nvar isNode = __webpack_require__(/*! ./isNode */ 229);\\n\\n/**\\n * @param {*} object The object to check.\\n * @return {boolean} Whether or not the object is a DOM text node.\\n */\\nfunction isTextNode(object) {\\n  return isNode(object) && object.nodeType == 3;\\n}\\n\\nmodule.exports = isTextNode;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/isTextNode.js\\n// module id = 228\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/isTextNode.js?\");\n\n/***/ },\n/* 229 */\n/*!******************************!*\\\n  !*** ./~/fbjs/lib/isNode.js ***!\n  \\******************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n\\n/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @typechecks\\n */\\n\\n/**\\n * @param {*} object The object to check.\\n * @return {boolean} Whether or not the object is a DOM node.\\n */\\nfunction isNode(object) {\\n  return !!(object && (typeof Node === 'function' ? object instanceof Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));\\n}\\n\\nmodule.exports = isNode;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/isNode.js\\n// module id = 229\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/isNode.js?\");\n\n/***/ },\n/* 230 */\n/*!****************************************!*\\\n  !*** ./~/fbjs/lib/getActiveElement.js ***!\n  \\****************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n\\n/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @typechecks\\n */\\n\\n/* eslint-disable fb-www/typeof-undefined */\\n\\n/**\\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\\n * not safe to call document.activeElement if there is nothing focused.\\n *\\n * The activeElement will be null only if the document or document body is not\\n * yet defined.\\n */\\nfunction getActiveElement() /*?DOMElement*/{\\n  if (typeof document === 'undefined') {\\n    return null;\\n  }\\n  try {\\n    return document.activeElement || document.body;\\n  } catch (e) {\\n    return document.body;\\n  }\\n}\\n\\nmodule.exports = getActiveElement;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/fbjs/lib/getActiveElement.js\\n// module id = 230\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/fbjs/lib/getActiveElement.js?\");\n\n/***/ },\n/* 231 */\n/*!*************************************************!*\\\n  !*** ./~/react-dom/lib/SVGDOMPropertyConfig.js ***!\n  \\*************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar NS = {\\n  xlink: 'http://www.w3.org/1999/xlink',\\n  xml: 'http://www.w3.org/XML/1998/namespace'\\n};\\n\\n// We use attributes for everything SVG so let's avoid some duplication and run\\n// code instead.\\n// The following are all specified in the HTML config already so we exclude here.\\n// - class (as className)\\n// - color\\n// - height\\n// - id\\n// - lang\\n// - max\\n// - media\\n// - method\\n// - min\\n// - name\\n// - style\\n// - target\\n// - type\\n// - width\\nvar ATTRS = {\\n  accentHeight: 'accent-height',\\n  accumulate: 0,\\n  additive: 0,\\n  alignmentBaseline: 'alignment-baseline',\\n  allowReorder: 'allowReorder',\\n  alphabetic: 0,\\n  amplitude: 0,\\n  arabicForm: 'arabic-form',\\n  ascent: 0,\\n  attributeName: 'attributeName',\\n  attributeType: 'attributeType',\\n  autoReverse: 'autoReverse',\\n  azimuth: 0,\\n  baseFrequency: 'baseFrequency',\\n  baseProfile: 'baseProfile',\\n  baselineShift: 'baseline-shift',\\n  bbox: 0,\\n  begin: 0,\\n  bias: 0,\\n  by: 0,\\n  calcMode: 'calcMode',\\n  capHeight: 'cap-height',\\n  clip: 0,\\n  clipPath: 'clip-path',\\n  clipRule: 'clip-rule',\\n  clipPathUnits: 'clipPathUnits',\\n  colorInterpolation: 'color-interpolation',\\n  colorInterpolationFilters: 'color-interpolation-filters',\\n  colorProfile: 'color-profile',\\n  colorRendering: 'color-rendering',\\n  contentScriptType: 'contentScriptType',\\n  contentStyleType: 'contentStyleType',\\n  cursor: 0,\\n  cx: 0,\\n  cy: 0,\\n  d: 0,\\n  decelerate: 0,\\n  descent: 0,\\n  diffuseConstant: 'diffuseConstant',\\n  direction: 0,\\n  display: 0,\\n  divisor: 0,\\n  dominantBaseline: 'dominant-baseline',\\n  dur: 0,\\n  dx: 0,\\n  dy: 0,\\n  edgeMode: 'edgeMode',\\n  elevation: 0,\\n  enableBackground: 'enable-background',\\n  end: 0,\\n  exponent: 0,\\n  externalResourcesRequired: 'externalResourcesRequired',\\n  fill: 0,\\n  fillOpacity: 'fill-opacity',\\n  fillRule: 'fill-rule',\\n  filter: 0,\\n  filterRes: 'filterRes',\\n  filterUnits: 'filterUnits',\\n  floodColor: 'flood-color',\\n  floodOpacity: 'flood-opacity',\\n  focusable: 0,\\n  fontFamily: 'font-family',\\n  fontSize: 'font-size',\\n  fontSizeAdjust: 'font-size-adjust',\\n  fontStretch: 'font-stretch',\\n  fontStyle: 'font-style',\\n  fontVariant: 'font-variant',\\n  fontWeight: 'font-weight',\\n  format: 0,\\n  from: 0,\\n  fx: 0,\\n  fy: 0,\\n  g1: 0,\\n  g2: 0,\\n  glyphName: 'glyph-name',\\n  glyphOrientationHorizontal: 'glyph-orientation-horizontal',\\n  glyphOrientationVertical: 'glyph-orientation-vertical',\\n  glyphRef: 'glyphRef',\\n  gradientTransform: 'gradientTransform',\\n  gradientUnits: 'gradientUnits',\\n  hanging: 0,\\n  horizAdvX: 'horiz-adv-x',\\n  horizOriginX: 'horiz-origin-x',\\n  ideographic: 0,\\n  imageRendering: 'image-rendering',\\n  'in': 0,\\n  in2: 0,\\n  intercept: 0,\\n  k: 0,\\n  k1: 0,\\n  k2: 0,\\n  k3: 0,\\n  k4: 0,\\n  kernelMatrix: 'kernelMatrix',\\n  kernelUnitLength: 'kernelUnitLength',\\n  kerning: 0,\\n  keyPoints: 'keyPoints',\\n  keySplines: 'keySplines',\\n  keyTimes: 'keyTimes',\\n  lengthAdjust: 'lengthAdjust',\\n  letterSpacing: 'letter-spacing',\\n  lightingColor: 'lighting-color',\\n  limitingConeAngle: 'limitingConeAngle',\\n  local: 0,\\n  markerEnd: 'marker-end',\\n  markerMid: 'marker-mid',\\n  markerStart: 'marker-start',\\n  markerHeight: 'markerHeight',\\n  markerUnits: 'markerUnits',\\n  markerWidth: 'markerWidth',\\n  mask: 0,\\n  maskContentUnits: 'maskContentUnits',\\n  maskUnits: 'maskUnits',\\n  mathematical: 0,\\n  mode: 0,\\n  numOctaves: 'numOctaves',\\n  offset: 0,\\n  opacity: 0,\\n  operator: 0,\\n  order: 0,\\n  orient: 0,\\n  orientation: 0,\\n  origin: 0,\\n  overflow: 0,\\n  overlinePosition: 'overline-position',\\n  overlineThickness: 'overline-thickness',\\n  paintOrder: 'paint-order',\\n  panose1: 'panose-1',\\n  pathLength: 'pathLength',\\n  patternContentUnits: 'patternContentUnits',\\n  patternTransform: 'patternTransform',\\n  patternUnits: 'patternUnits',\\n  pointerEvents: 'pointer-events',\\n  points: 0,\\n  pointsAtX: 'pointsAtX',\\n  pointsAtY: 'pointsAtY',\\n  pointsAtZ: 'pointsAtZ',\\n  preserveAlpha: 'preserveAlpha',\\n  preserveAspectRatio: 'preserveAspectRatio',\\n  primitiveUnits: 'primitiveUnits',\\n  r: 0,\\n  radius: 0,\\n  refX: 'refX',\\n  refY: 'refY',\\n  renderingIntent: 'rendering-intent',\\n  repeatCount: 'repeatCount',\\n  repeatDur: 'repeatDur',\\n  requiredExtensions: 'requiredExtensions',\\n  requiredFeatures: 'requiredFeatures',\\n  restart: 0,\\n  result: 0,\\n  rotate: 0,\\n  rx: 0,\\n  ry: 0,\\n  scale: 0,\\n  seed: 0,\\n  shapeRendering: 'shape-rendering',\\n  slope: 0,\\n  spacing: 0,\\n  specularConstant: 'specularConstant',\\n  specularExponent: 'specularExponent',\\n  speed: 0,\\n  spreadMethod: 'spreadMethod',\\n  startOffset: 'startOffset',\\n  stdDeviation: 'stdDeviation',\\n  stemh: 0,\\n  stemv: 0,\\n  stitchTiles: 'stitchTiles',\\n  stopColor: 'stop-color',\\n  stopOpacity: 'stop-opacity',\\n  strikethroughPosition: 'strikethrough-position',\\n  strikethroughThickness: 'strikethrough-thickness',\\n  string: 0,\\n  stroke: 0,\\n  strokeDasharray: 'stroke-dasharray',\\n  strokeDashoffset: 'stroke-dashoffset',\\n  strokeLinecap: 'stroke-linecap',\\n  strokeLinejoin: 'stroke-linejoin',\\n  strokeMiterlimit: 'stroke-miterlimit',\\n  strokeOpacity: 'stroke-opacity',\\n  strokeWidth: 'stroke-width',\\n  surfaceScale: 'surfaceScale',\\n  systemLanguage: 'systemLanguage',\\n  tableValues: 'tableValues',\\n  targetX: 'targetX',\\n  targetY: 'targetY',\\n  textAnchor: 'text-anchor',\\n  textDecoration: 'text-decoration',\\n  textRendering: 'text-rendering',\\n  textLength: 'textLength',\\n  to: 0,\\n  transform: 0,\\n  u1: 0,\\n  u2: 0,\\n  underlinePosition: 'underline-position',\\n  underlineThickness: 'underline-thickness',\\n  unicode: 0,\\n  unicodeBidi: 'unicode-bidi',\\n  unicodeRange: 'unicode-range',\\n  unitsPerEm: 'units-per-em',\\n  vAlphabetic: 'v-alphabetic',\\n  vHanging: 'v-hanging',\\n  vIdeographic: 'v-ideographic',\\n  vMathematical: 'v-mathematical',\\n  values: 0,\\n  vectorEffect: 'vector-effect',\\n  version: 0,\\n  vertAdvY: 'vert-adv-y',\\n  vertOriginX: 'vert-origin-x',\\n  vertOriginY: 'vert-origin-y',\\n  viewBox: 'viewBox',\\n  viewTarget: 'viewTarget',\\n  visibility: 0,\\n  widths: 0,\\n  wordSpacing: 'word-spacing',\\n  writingMode: 'writing-mode',\\n  x: 0,\\n  xHeight: 'x-height',\\n  x1: 0,\\n  x2: 0,\\n  xChannelSelector: 'xChannelSelector',\\n  xlinkActuate: 'xlink:actuate',\\n  xlinkArcrole: 'xlink:arcrole',\\n  xlinkHref: 'xlink:href',\\n  xlinkRole: 'xlink:role',\\n  xlinkShow: 'xlink:show',\\n  xlinkTitle: 'xlink:title',\\n  xlinkType: 'xlink:type',\\n  xmlBase: 'xml:base',\\n  xmlns: 0,\\n  xmlnsXlink: 'xmlns:xlink',\\n  xmlLang: 'xml:lang',\\n  xmlSpace: 'xml:space',\\n  y: 0,\\n  y1: 0,\\n  y2: 0,\\n  yChannelSelector: 'yChannelSelector',\\n  z: 0,\\n  zoomAndPan: 'zoomAndPan'\\n};\\n\\nvar SVGDOMPropertyConfig = {\\n  Properties: {},\\n  DOMAttributeNamespaces: {\\n    xlinkActuate: NS.xlink,\\n    xlinkArcrole: NS.xlink,\\n    xlinkHref: NS.xlink,\\n    xlinkRole: NS.xlink,\\n    xlinkShow: NS.xlink,\\n    xlinkTitle: NS.xlink,\\n    xlinkType: NS.xlink,\\n    xmlBase: NS.xml,\\n    xmlLang: NS.xml,\\n    xmlSpace: NS.xml\\n  },\\n  DOMAttributeNames: {}\\n};\\n\\nObject.keys(ATTRS).forEach(function (key) {\\n  SVGDOMPropertyConfig.Properties[key] = 0;\\n  if (ATTRS[key]) {\\n    SVGDOMPropertyConfig.DOMAttributeNames[key] = ATTRS[key];\\n  }\\n});\\n\\nmodule.exports = SVGDOMPropertyConfig;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/SVGDOMPropertyConfig.js\\n// module id = 231\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/SVGDOMPropertyConfig.js?\");\n\n/***/ },\n/* 232 */\n/*!**********************************************!*\\\n  !*** ./~/react-dom/lib/SelectEventPlugin.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar EventPropagators = __webpack_require__(/*! ./EventPropagators */ 119);\\nvar ExecutionEnvironment = __webpack_require__(/*! fbjs/lib/ExecutionEnvironment */ 126);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\nvar ReactInputSelection = __webpack_require__(/*! ./ReactInputSelection */ 224);\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 131);\\n\\nvar getActiveElement = __webpack_require__(/*! fbjs/lib/getActiveElement */ 230);\\nvar isTextInputElement = __webpack_require__(/*! ./isTextInputElement */ 149);\\nvar shallowEqual = __webpack_require__(/*! fbjs/lib/shallowEqual */ 201);\\n\\nvar skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11;\\n\\nvar eventTypes = {\\n  select: {\\n    phasedRegistrationNames: {\\n      bubbled: 'onSelect',\\n      captured: 'onSelectCapture'\\n    },\\n    dependencies: ['topBlur', 'topContextMenu', 'topFocus', 'topKeyDown', 'topKeyUp', 'topMouseDown', 'topMouseUp', 'topSelectionChange']\\n  }\\n};\\n\\nvar activeElement = null;\\nvar activeElementInst = null;\\nvar lastSelection = null;\\nvar mouseDown = false;\\n\\n// Track whether a listener exists for this plugin. If none exist, we do\\n// not extract events. See #3639.\\nvar hasListener = false;\\n\\n/**\\n * Get an object which is a unique representation of the current selection.\\n *\\n * The return value will not be consistent across nodes or browsers, but\\n * two identical selections on the same node will return identical objects.\\n *\\n * @param {DOMElement} node\\n * @return {object}\\n */\\nfunction getSelection(node) {\\n  if ('selectionStart' in node && ReactInputSelection.hasSelectionCapabilities(node)) {\\n    return {\\n      start: node.selectionStart,\\n      end: node.selectionEnd\\n    };\\n  } else if (window.getSelection) {\\n    var selection = window.getSelection();\\n    return {\\n      anchorNode: selection.anchorNode,\\n      anchorOffset: selection.anchorOffset,\\n      focusNode: selection.focusNode,\\n      focusOffset: selection.focusOffset\\n    };\\n  } else if (document.selection) {\\n    var range = document.selection.createRange();\\n    return {\\n      parentElement: range.parentElement(),\\n      text: range.text,\\n      top: range.boundingTop,\\n      left: range.boundingLeft\\n    };\\n  }\\n}\\n\\n/**\\n * Poll selection to see whether it's changed.\\n *\\n * @param {object} nativeEvent\\n * @return {?SyntheticEvent}\\n */\\nfunction constructSelectEvent(nativeEvent, nativeEventTarget) {\\n  // Ensure we have the right element, and that the user is not dragging a\\n  // selection (this matches native `select` event behavior). In HTML5, select\\n  // fires only on input and textarea thus if there's no focused element we\\n  // won't dispatch.\\n  if (mouseDown || activeElement == null || activeElement !== getActiveElement()) {\\n    return null;\\n  }\\n\\n  // Only fire when selection has actually changed.\\n  var currentSelection = getSelection(activeElement);\\n  if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\\n    lastSelection = currentSelection;\\n\\n    var syntheticEvent = SyntheticEvent.getPooled(eventTypes.select, activeElementInst, nativeEvent, nativeEventTarget);\\n\\n    syntheticEvent.type = 'select';\\n    syntheticEvent.target = activeElement;\\n\\n    EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);\\n\\n    return syntheticEvent;\\n  }\\n\\n  return null;\\n}\\n\\n/**\\n * This plugin creates an `onSelect` event that normalizes select events\\n * across form elements.\\n *\\n * Supported elements are:\\n * - input (see `isTextInputElement`)\\n * - textarea\\n * - contentEditable\\n *\\n * This differs from native browser implementations in the following ways:\\n * - Fires on contentEditable fields as well as inputs.\\n * - Fires for collapsed selection.\\n * - Fires after user input.\\n */\\nvar SelectEventPlugin = {\\n\\n  eventTypes: eventTypes,\\n\\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\\n    if (!hasListener) {\\n      return null;\\n    }\\n\\n    var targetNode = targetInst ? ReactDOMComponentTree.getNodeFromInstance(targetInst) : window;\\n\\n    switch (topLevelType) {\\n      // Track the input node that has focus.\\n      case 'topFocus':\\n        if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {\\n          activeElement = targetNode;\\n          activeElementInst = targetInst;\\n          lastSelection = null;\\n        }\\n        break;\\n      case 'topBlur':\\n        activeElement = null;\\n        activeElementInst = null;\\n        lastSelection = null;\\n        break;\\n\\n      // Don't fire the event while the user is dragging. This matches the\\n      // semantics of the native select event.\\n      case 'topMouseDown':\\n        mouseDown = true;\\n        break;\\n      case 'topContextMenu':\\n      case 'topMouseUp':\\n        mouseDown = false;\\n        return constructSelectEvent(nativeEvent, nativeEventTarget);\\n\\n      // Chrome and IE fire non-standard event when selection is changed (and\\n      // sometimes when it hasn't). IE's event fires out of order with respect\\n      // to key and input events on deletion, so we discard it.\\n      //\\n      // Firefox doesn't support selectionchange, so check selection status\\n      // after each key entry. The selection changes after keydown and before\\n      // keyup, but we check on keydown as well in the case of holding down a\\n      // key, when multiple keydown events are fired but only one keyup is.\\n      // This is also our approach for IE handling, for the reason above.\\n      case 'topSelectionChange':\\n        if (skipSelectionChangeEvent) {\\n          break;\\n        }\\n      // falls through\\n      case 'topKeyDown':\\n      case 'topKeyUp':\\n        return constructSelectEvent(nativeEvent, nativeEventTarget);\\n    }\\n\\n    return null;\\n  },\\n\\n  didPutListener: function (inst, registrationName, listener) {\\n    if (registrationName === 'onSelect') {\\n      hasListener = true;\\n    }\\n  }\\n};\\n\\nmodule.exports = SelectEventPlugin;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/SelectEventPlugin.js\\n// module id = 232\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/SelectEventPlugin.js?\");\n\n/***/ },\n/* 233 */\n/*!**********************************************!*\\\n  !*** ./~/react-dom/lib/SimpleEventPlugin.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar EventListener = __webpack_require__(/*! fbjs/lib/EventListener */ 220);\\nvar EventPropagators = __webpack_require__(/*! ./EventPropagators */ 119);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\nvar SyntheticAnimationEvent = __webpack_require__(/*! ./SyntheticAnimationEvent */ 234);\\nvar SyntheticClipboardEvent = __webpack_require__(/*! ./SyntheticClipboardEvent */ 235);\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 131);\\nvar SyntheticFocusEvent = __webpack_require__(/*! ./SyntheticFocusEvent */ 236);\\nvar SyntheticKeyboardEvent = __webpack_require__(/*! ./SyntheticKeyboardEvent */ 237);\\nvar SyntheticMouseEvent = __webpack_require__(/*! ./SyntheticMouseEvent */ 152);\\nvar SyntheticDragEvent = __webpack_require__(/*! ./SyntheticDragEvent */ 240);\\nvar SyntheticTouchEvent = __webpack_require__(/*! ./SyntheticTouchEvent */ 241);\\nvar SyntheticTransitionEvent = __webpack_require__(/*! ./SyntheticTransitionEvent */ 242);\\nvar SyntheticUIEvent = __webpack_require__(/*! ./SyntheticUIEvent */ 153);\\nvar SyntheticWheelEvent = __webpack_require__(/*! ./SyntheticWheelEvent */ 243);\\n\\nvar emptyFunction = __webpack_require__(/*! fbjs/lib/emptyFunction */ 12);\\nvar getEventCharCode = __webpack_require__(/*! ./getEventCharCode */ 238);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\n\\n/**\\n * Turns\\n * ['abort', ...]\\n * into\\n * eventTypes = {\\n *   'abort': {\\n *     phasedRegistrationNames: {\\n *       bubbled: 'onAbort',\\n *       captured: 'onAbortCapture',\\n *     },\\n *     dependencies: ['topAbort'],\\n *   },\\n *   ...\\n * };\\n * topLevelEventsToDispatchConfig = {\\n *   'topAbort': { sameConfig }\\n * };\\n */\\nvar eventTypes = {};\\nvar topLevelEventsToDispatchConfig = {};\\n['abort', 'animationEnd', 'animationIteration', 'animationStart', 'blur', 'canPlay', 'canPlayThrough', 'click', 'contextMenu', 'copy', 'cut', 'doubleClick', 'drag', 'dragEnd', 'dragEnter', 'dragExit', 'dragLeave', 'dragOver', 'dragStart', 'drop', 'durationChange', 'emptied', 'encrypted', 'ended', 'error', 'focus', 'input', 'invalid', 'keyDown', 'keyPress', 'keyUp', 'load', 'loadedData', 'loadedMetadata', 'loadStart', 'mouseDown', 'mouseMove', 'mouseOut', 'mouseOver', 'mouseUp', 'paste', 'pause', 'play', 'playing', 'progress', 'rateChange', 'reset', 'scroll', 'seeked', 'seeking', 'stalled', 'submit', 'suspend', 'timeUpdate', 'touchCancel', 'touchEnd', 'touchMove', 'touchStart', 'transitionEnd', 'volumeChange', 'waiting', 'wheel'].forEach(function (event) {\\n  var capitalizedEvent = event[0].toUpperCase() + event.slice(1);\\n  var onEvent = 'on' + capitalizedEvent;\\n  var topEvent = 'top' + capitalizedEvent;\\n\\n  var type = {\\n    phasedRegistrationNames: {\\n      bubbled: onEvent,\\n      captured: onEvent + 'Capture'\\n    },\\n    dependencies: [topEvent]\\n  };\\n  eventTypes[event] = type;\\n  topLevelEventsToDispatchConfig[topEvent] = type;\\n});\\n\\nvar onClickListeners = {};\\n\\nfunction getDictionaryKey(inst) {\\n  // Prevents V8 performance issue:\\n  // https://github.com/facebook/react/pull/7232\\n  return '.' + inst._rootNodeID;\\n}\\n\\nfunction isInteractive(tag) {\\n  return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\\n}\\n\\nvar SimpleEventPlugin = {\\n\\n  eventTypes: eventTypes,\\n\\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\\n    var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];\\n    if (!dispatchConfig) {\\n      return null;\\n    }\\n    var EventConstructor;\\n    switch (topLevelType) {\\n      case 'topAbort':\\n      case 'topCanPlay':\\n      case 'topCanPlayThrough':\\n      case 'topDurationChange':\\n      case 'topEmptied':\\n      case 'topEncrypted':\\n      case 'topEnded':\\n      case 'topError':\\n      case 'topInput':\\n      case 'topInvalid':\\n      case 'topLoad':\\n      case 'topLoadedData':\\n      case 'topLoadedMetadata':\\n      case 'topLoadStart':\\n      case 'topPause':\\n      case 'topPlay':\\n      case 'topPlaying':\\n      case 'topProgress':\\n      case 'topRateChange':\\n      case 'topReset':\\n      case 'topSeeked':\\n      case 'topSeeking':\\n      case 'topStalled':\\n      case 'topSubmit':\\n      case 'topSuspend':\\n      case 'topTimeUpdate':\\n      case 'topVolumeChange':\\n      case 'topWaiting':\\n        // HTML Events\\n        // @see http://www.w3.org/TR/html5/index.html#events-0\\n        EventConstructor = SyntheticEvent;\\n        break;\\n      case 'topKeyPress':\\n        // Firefox creates a keypress event for function keys too. This removes\\n        // the unwanted keypress events. Enter is however both printable and\\n        // non-printable. One would expect Tab to be as well (but it isn't).\\n        if (getEventCharCode(nativeEvent) === 0) {\\n          return null;\\n        }\\n      /* falls through */\\n      case 'topKeyDown':\\n      case 'topKeyUp':\\n        EventConstructor = SyntheticKeyboardEvent;\\n        break;\\n      case 'topBlur':\\n      case 'topFocus':\\n        EventConstructor = SyntheticFocusEvent;\\n        break;\\n      case 'topClick':\\n        // Firefox creates a click event on right mouse clicks. This removes the\\n        // unwanted click events.\\n        if (nativeEvent.button === 2) {\\n          return null;\\n        }\\n      /* falls through */\\n      case 'topDoubleClick':\\n      case 'topMouseDown':\\n      case 'topMouseMove':\\n      case 'topMouseUp':\\n      // TODO: Disabled elements should not respond to mouse events\\n      /* falls through */\\n      case 'topMouseOut':\\n      case 'topMouseOver':\\n      case 'topContextMenu':\\n        EventConstructor = SyntheticMouseEvent;\\n        break;\\n      case 'topDrag':\\n      case 'topDragEnd':\\n      case 'topDragEnter':\\n      case 'topDragExit':\\n      case 'topDragLeave':\\n      case 'topDragOver':\\n      case 'topDragStart':\\n      case 'topDrop':\\n        EventConstructor = SyntheticDragEvent;\\n        break;\\n      case 'topTouchCancel':\\n      case 'topTouchEnd':\\n      case 'topTouchMove':\\n      case 'topTouchStart':\\n        EventConstructor = SyntheticTouchEvent;\\n        break;\\n      case 'topAnimationEnd':\\n      case 'topAnimationIteration':\\n      case 'topAnimationStart':\\n        EventConstructor = SyntheticAnimationEvent;\\n        break;\\n      case 'topTransitionEnd':\\n        EventConstructor = SyntheticTransitionEvent;\\n        break;\\n      case 'topScroll':\\n        EventConstructor = SyntheticUIEvent;\\n        break;\\n      case 'topWheel':\\n        EventConstructor = SyntheticWheelEvent;\\n        break;\\n      case 'topCopy':\\n      case 'topCut':\\n      case 'topPaste':\\n        EventConstructor = SyntheticClipboardEvent;\\n        break;\\n    }\\n    !EventConstructor ? process.env.NODE_ENV !== 'production' ? invariant(false, 'SimpleEventPlugin: Unhandled event type, `%s`.', topLevelType) : _prodInvariant('86', topLevelType) : void 0;\\n    var event = EventConstructor.getPooled(dispatchConfig, targetInst, nativeEvent, nativeEventTarget);\\n    EventPropagators.accumulateTwoPhaseDispatches(event);\\n    return event;\\n  },\\n\\n  didPutListener: function (inst, registrationName, listener) {\\n    // Mobile Safari does not fire properly bubble click events on\\n    // non-interactive elements, which means delegated click listeners do not\\n    // fire. The workaround for this bug involves attaching an empty click\\n    // listener on the target node.\\n    // http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\\n    if (registrationName === 'onClick' && !isInteractive(inst._tag)) {\\n      var key = getDictionaryKey(inst);\\n      var node = ReactDOMComponentTree.getNodeFromInstance(inst);\\n      if (!onClickListeners[key]) {\\n        onClickListeners[key] = EventListener.listen(node, 'click', emptyFunction);\\n      }\\n    }\\n  },\\n\\n  willDeleteListener: function (inst, registrationName) {\\n    if (registrationName === 'onClick' && !isInteractive(inst._tag)) {\\n      var key = getDictionaryKey(inst);\\n      onClickListeners[key].remove();\\n      delete onClickListeners[key];\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = SimpleEventPlugin;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/SimpleEventPlugin.js\\n// module id = 233\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/SimpleEventPlugin.js?\");\n\n/***/ },\n/* 234 */\n/*!****************************************************!*\\\n  !*** ./~/react-dom/lib/SyntheticAnimationEvent.js ***!\n  \\****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 131);\\n\\n/**\\n * @interface Event\\n * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface\\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent\\n */\\nvar AnimationEventInterface = {\\n  animationName: null,\\n  elapsedTime: null,\\n  pseudoElement: null\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticEvent}\\n */\\nfunction SyntheticAnimationEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\\n}\\n\\nSyntheticEvent.augmentClass(SyntheticAnimationEvent, AnimationEventInterface);\\n\\nmodule.exports = SyntheticAnimationEvent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/SyntheticAnimationEvent.js\\n// module id = 234\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/SyntheticAnimationEvent.js?\");\n\n/***/ },\n/* 235 */\n/*!****************************************************!*\\\n  !*** ./~/react-dom/lib/SyntheticClipboardEvent.js ***!\n  \\****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 131);\\n\\n/**\\n * @interface Event\\n * @see http://www.w3.org/TR/clipboard-apis/\\n */\\nvar ClipboardEventInterface = {\\n  clipboardData: function (event) {\\n    return 'clipboardData' in event ? event.clipboardData : window.clipboardData;\\n  }\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\\n}\\n\\nSyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);\\n\\nmodule.exports = SyntheticClipboardEvent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/SyntheticClipboardEvent.js\\n// module id = 235\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/SyntheticClipboardEvent.js?\");\n\n/***/ },\n/* 236 */\n/*!************************************************!*\\\n  !*** ./~/react-dom/lib/SyntheticFocusEvent.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar SyntheticUIEvent = __webpack_require__(/*! ./SyntheticUIEvent */ 153);\\n\\n/**\\n * @interface FocusEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar FocusEventInterface = {\\n  relatedTarget: null\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\\n  return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\\n}\\n\\nSyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);\\n\\nmodule.exports = SyntheticFocusEvent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/SyntheticFocusEvent.js\\n// module id = 236\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/SyntheticFocusEvent.js?\");\n\n/***/ },\n/* 237 */\n/*!***************************************************!*\\\n  !*** ./~/react-dom/lib/SyntheticKeyboardEvent.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar SyntheticUIEvent = __webpack_require__(/*! ./SyntheticUIEvent */ 153);\\n\\nvar getEventCharCode = __webpack_require__(/*! ./getEventCharCode */ 238);\\nvar getEventKey = __webpack_require__(/*! ./getEventKey */ 239);\\nvar getEventModifierState = __webpack_require__(/*! ./getEventModifierState */ 155);\\n\\n/**\\n * @interface KeyboardEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar KeyboardEventInterface = {\\n  key: getEventKey,\\n  location: null,\\n  ctrlKey: null,\\n  shiftKey: null,\\n  altKey: null,\\n  metaKey: null,\\n  repeat: null,\\n  locale: null,\\n  getModifierState: getEventModifierState,\\n  // Legacy Interface\\n  charCode: function (event) {\\n    // `charCode` is the result of a KeyPress event and represents the value of\\n    // the actual printable character.\\n\\n    // KeyPress is deprecated, but its replacement is not yet final and not\\n    // implemented in any major browser. Only KeyPress has charCode.\\n    if (event.type === 'keypress') {\\n      return getEventCharCode(event);\\n    }\\n    return 0;\\n  },\\n  keyCode: function (event) {\\n    // `keyCode` is the result of a KeyDown/Up event and represents the value of\\n    // physical keyboard key.\\n\\n    // The actual meaning of the value depends on the users' keyboard layout\\n    // which cannot be detected. Assuming that it is a US keyboard layout\\n    // provides a surprisingly accurate mapping for US and European users.\\n    // Due to this, it is left to the user to implement at this time.\\n    if (event.type === 'keydown' || event.type === 'keyup') {\\n      return event.keyCode;\\n    }\\n    return 0;\\n  },\\n  which: function (event) {\\n    // `which` is an alias for either `keyCode` or `charCode` depending on the\\n    // type of the event.\\n    if (event.type === 'keypress') {\\n      return getEventCharCode(event);\\n    }\\n    if (event.type === 'keydown' || event.type === 'keyup') {\\n      return event.keyCode;\\n    }\\n    return 0;\\n  }\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\\n  return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\\n}\\n\\nSyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);\\n\\nmodule.exports = SyntheticKeyboardEvent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/SyntheticKeyboardEvent.js\\n// module id = 237\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/SyntheticKeyboardEvent.js?\");\n\n/***/ },\n/* 238 */\n/*!*********************************************!*\\\n  !*** ./~/react-dom/lib/getEventCharCode.js ***!\n  \\*********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\n/**\\n * `charCode` represents the actual \\\"character code\\\" and is safe to use with\\n * `String.fromCharCode`. As such, only keys that correspond to printable\\n * characters produce a valid `charCode`, the only exception to this is Enter.\\n * The Tab-key is considered non-printable and does not have a `charCode`,\\n * presumably because it does not produce a tab-character in browsers.\\n *\\n * @param {object} nativeEvent Native browser event.\\n * @return {number} Normalized `charCode` property.\\n */\\n\\nfunction getEventCharCode(nativeEvent) {\\n  var charCode;\\n  var keyCode = nativeEvent.keyCode;\\n\\n  if ('charCode' in nativeEvent) {\\n    charCode = nativeEvent.charCode;\\n\\n    // FF does not set `charCode` for the Enter-key, check against `keyCode`.\\n    if (charCode === 0 && keyCode === 13) {\\n      charCode = 13;\\n    }\\n  } else {\\n    // IE8 does not implement `charCode`, but `keyCode` has the correct value.\\n    charCode = keyCode;\\n  }\\n\\n  // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\\n  // Must not discard the (non-)printable Enter-key.\\n  if (charCode >= 32 || charCode === 13) {\\n    return charCode;\\n  }\\n\\n  return 0;\\n}\\n\\nmodule.exports = getEventCharCode;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/getEventCharCode.js\\n// module id = 238\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/getEventCharCode.js?\");\n\n/***/ },\n/* 239 */\n/*!****************************************!*\\\n  !*** ./~/react-dom/lib/getEventKey.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar getEventCharCode = __webpack_require__(/*! ./getEventCharCode */ 238);\\n\\n/**\\n * Normalization of deprecated HTML5 `key` values\\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\\n */\\nvar normalizeKey = {\\n  'Esc': 'Escape',\\n  'Spacebar': ' ',\\n  'Left': 'ArrowLeft',\\n  'Up': 'ArrowUp',\\n  'Right': 'ArrowRight',\\n  'Down': 'ArrowDown',\\n  'Del': 'Delete',\\n  'Win': 'OS',\\n  'Menu': 'ContextMenu',\\n  'Apps': 'ContextMenu',\\n  'Scroll': 'ScrollLock',\\n  'MozPrintableKey': 'Unidentified'\\n};\\n\\n/**\\n * Translation from legacy `keyCode` to HTML5 `key`\\n * Only special keys supported, all others depend on keyboard layout or browser\\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\\n */\\nvar translateToKey = {\\n  8: 'Backspace',\\n  9: 'Tab',\\n  12: 'Clear',\\n  13: 'Enter',\\n  16: 'Shift',\\n  17: 'Control',\\n  18: 'Alt',\\n  19: 'Pause',\\n  20: 'CapsLock',\\n  27: 'Escape',\\n  32: ' ',\\n  33: 'PageUp',\\n  34: 'PageDown',\\n  35: 'End',\\n  36: 'Home',\\n  37: 'ArrowLeft',\\n  38: 'ArrowUp',\\n  39: 'ArrowRight',\\n  40: 'ArrowDown',\\n  45: 'Insert',\\n  46: 'Delete',\\n  112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',\\n  118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',\\n  144: 'NumLock',\\n  145: 'ScrollLock',\\n  224: 'Meta'\\n};\\n\\n/**\\n * @param {object} nativeEvent Native browser event.\\n * @return {string} Normalized `key` property.\\n */\\nfunction getEventKey(nativeEvent) {\\n  if (nativeEvent.key) {\\n    // Normalize inconsistent values reported by browsers due to\\n    // implementations of a working draft specification.\\n\\n    // FireFox implements `key` but returns `MozPrintableKey` for all\\n    // printable characters (normalized to `Unidentified`), ignore it.\\n    var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\\n    if (key !== 'Unidentified') {\\n      return key;\\n    }\\n  }\\n\\n  // Browser does not implement `key`, polyfill as much of it as we can.\\n  if (nativeEvent.type === 'keypress') {\\n    var charCode = getEventCharCode(nativeEvent);\\n\\n    // The enter-key is technically both printable and non-printable and can\\n    // thus be captured by `keypress`, no other non-printable key should.\\n    return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\\n  }\\n  if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\\n    // While user keyboard layout determines the actual meaning of each\\n    // `keyCode` value, almost all function keys have a universal value.\\n    return translateToKey[nativeEvent.keyCode] || 'Unidentified';\\n  }\\n  return '';\\n}\\n\\nmodule.exports = getEventKey;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/getEventKey.js\\n// module id = 239\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/getEventKey.js?\");\n\n/***/ },\n/* 240 */\n/*!***********************************************!*\\\n  !*** ./~/react-dom/lib/SyntheticDragEvent.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar SyntheticMouseEvent = __webpack_require__(/*! ./SyntheticMouseEvent */ 152);\\n\\n/**\\n * @interface DragEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar DragEventInterface = {\\n  dataTransfer: null\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\\n  return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\\n}\\n\\nSyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);\\n\\nmodule.exports = SyntheticDragEvent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/SyntheticDragEvent.js\\n// module id = 240\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/SyntheticDragEvent.js?\");\n\n/***/ },\n/* 241 */\n/*!************************************************!*\\\n  !*** ./~/react-dom/lib/SyntheticTouchEvent.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar SyntheticUIEvent = __webpack_require__(/*! ./SyntheticUIEvent */ 153);\\n\\nvar getEventModifierState = __webpack_require__(/*! ./getEventModifierState */ 155);\\n\\n/**\\n * @interface TouchEvent\\n * @see http://www.w3.org/TR/touch-events/\\n */\\nvar TouchEventInterface = {\\n  touches: null,\\n  targetTouches: null,\\n  changedTouches: null,\\n  altKey: null,\\n  metaKey: null,\\n  ctrlKey: null,\\n  shiftKey: null,\\n  getModifierState: getEventModifierState\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\\n  return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\\n}\\n\\nSyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);\\n\\nmodule.exports = SyntheticTouchEvent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/SyntheticTouchEvent.js\\n// module id = 241\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/SyntheticTouchEvent.js?\");\n\n/***/ },\n/* 242 */\n/*!*****************************************************!*\\\n  !*** ./~/react-dom/lib/SyntheticTransitionEvent.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 131);\\n\\n/**\\n * @interface Event\\n * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-\\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent\\n */\\nvar TransitionEventInterface = {\\n  propertyName: null,\\n  elapsedTime: null,\\n  pseudoElement: null\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticEvent}\\n */\\nfunction SyntheticTransitionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\\n}\\n\\nSyntheticEvent.augmentClass(SyntheticTransitionEvent, TransitionEventInterface);\\n\\nmodule.exports = SyntheticTransitionEvent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/SyntheticTransitionEvent.js\\n// module id = 242\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/SyntheticTransitionEvent.js?\");\n\n/***/ },\n/* 243 */\n/*!************************************************!*\\\n  !*** ./~/react-dom/lib/SyntheticWheelEvent.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar SyntheticMouseEvent = __webpack_require__(/*! ./SyntheticMouseEvent */ 152);\\n\\n/**\\n * @interface WheelEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar WheelEventInterface = {\\n  deltaX: function (event) {\\n    return 'deltaX' in event ? event.deltaX :\\n    // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\\n    'wheelDeltaX' in event ? -event.wheelDeltaX : 0;\\n  },\\n  deltaY: function (event) {\\n    return 'deltaY' in event ? event.deltaY :\\n    // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\\n    'wheelDeltaY' in event ? -event.wheelDeltaY :\\n    // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\\n    'wheelDelta' in event ? -event.wheelDelta : 0;\\n  },\\n  deltaZ: null,\\n\\n  // Browsers without \\\"deltaMode\\\" is reporting in raw wheel delta where one\\n  // notch on the scroll is always +/- 120, roughly equivalent to pixels.\\n  // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\\n  // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\\n  deltaMode: null\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticMouseEvent}\\n */\\nfunction SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\\n  return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\\n}\\n\\nSyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);\\n\\nmodule.exports = SyntheticWheelEvent;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/SyntheticWheelEvent.js\\n// module id = 243\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/SyntheticWheelEvent.js?\");\n\n/***/ },\n/* 244 */\n/*!***************************************!*\\\n  !*** ./~/react-dom/lib/ReactMount.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar DOMLazyTree = __webpack_require__(/*! ./DOMLazyTree */ 159);\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 114);\\nvar React = __webpack_require__(/*! react/lib/React */ 2);\\nvar ReactBrowserEventEmitter = __webpack_require__(/*! ./ReactBrowserEventEmitter */ 183);\\nvar ReactCurrentOwner = __webpack_require__(/*! react/lib/ReactCurrentOwner */ 10);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\nvar ReactDOMContainerInfo = __webpack_require__(/*! ./ReactDOMContainerInfo */ 245);\\nvar ReactDOMFeatureFlags = __webpack_require__(/*! ./ReactDOMFeatureFlags */ 246);\\nvar ReactFeatureFlags = __webpack_require__(/*! ./ReactFeatureFlags */ 136);\\nvar ReactInstanceMap = __webpack_require__(/*! ./ReactInstanceMap */ 194);\\nvar ReactInstrumentation = __webpack_require__(/*! ./ReactInstrumentation */ 140);\\nvar ReactMarkupChecksum = __webpack_require__(/*! ./ReactMarkupChecksum */ 247);\\nvar ReactReconciler = __webpack_require__(/*! ./ReactReconciler */ 137);\\nvar ReactUpdateQueue = __webpack_require__(/*! ./ReactUpdateQueue */ 213);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 134);\\n\\nvar emptyObject = __webpack_require__(/*! fbjs/lib/emptyObject */ 20);\\nvar instantiateReactComponent = __webpack_require__(/*! ./instantiateReactComponent */ 196);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar setInnerHTML = __webpack_require__(/*! ./setInnerHTML */ 161);\\nvar shouldUpdateReactComponent = __webpack_require__(/*! ./shouldUpdateReactComponent */ 202);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\\nvar ROOT_ATTR_NAME = DOMProperty.ROOT_ATTRIBUTE_NAME;\\n\\nvar ELEMENT_NODE_TYPE = 1;\\nvar DOC_NODE_TYPE = 9;\\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\\n\\nvar instancesByReactRootID = {};\\n\\n/**\\n * Finds the index of the first character\\n * that's not common between the two given strings.\\n *\\n * @return {number} the index of the character where the strings diverge\\n */\\nfunction firstDifferenceIndex(string1, string2) {\\n  var minLen = Math.min(string1.length, string2.length);\\n  for (var i = 0; i < minLen; i++) {\\n    if (string1.charAt(i) !== string2.charAt(i)) {\\n      return i;\\n    }\\n  }\\n  return string1.length === string2.length ? -1 : minLen;\\n}\\n\\n/**\\n * @param {DOMElement|DOMDocument} container DOM element that may contain\\n * a React component\\n * @return {?*} DOM element that may have the reactRoot ID, or null.\\n */\\nfunction getReactRootElementInContainer(container) {\\n  if (!container) {\\n    return null;\\n  }\\n\\n  if (container.nodeType === DOC_NODE_TYPE) {\\n    return container.documentElement;\\n  } else {\\n    return container.firstChild;\\n  }\\n}\\n\\nfunction internalGetID(node) {\\n  // If node is something like a window, document, or text node, none of\\n  // which support attributes or a .getAttribute method, gracefully return\\n  // the empty string, as if the attribute were missing.\\n  return node.getAttribute && node.getAttribute(ATTR_NAME) || '';\\n}\\n\\n/**\\n * Mounts this component and inserts it into the DOM.\\n *\\n * @param {ReactComponent} componentInstance The instance to mount.\\n * @param {DOMElement} container DOM element to mount into.\\n * @param {ReactReconcileTransaction} transaction\\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\\n */\\nfunction mountComponentIntoNode(wrapperInstance, container, transaction, shouldReuseMarkup, context) {\\n  var markerName;\\n  if (ReactFeatureFlags.logTopLevelRenders) {\\n    var wrappedElement = wrapperInstance._currentElement.props.child;\\n    var type = wrappedElement.type;\\n    markerName = 'React mount: ' + (typeof type === 'string' ? type : type.displayName || type.name);\\n    console.time(markerName);\\n  }\\n\\n  var markup = ReactReconciler.mountComponent(wrapperInstance, transaction, null, ReactDOMContainerInfo(wrapperInstance, container), context, 0 /* parentDebugID */\\n  );\\n\\n  if (markerName) {\\n    console.timeEnd(markerName);\\n  }\\n\\n  wrapperInstance._renderedComponent._topLevelWrapper = wrapperInstance;\\n  ReactMount._mountImageIntoNode(markup, container, wrapperInstance, shouldReuseMarkup, transaction);\\n}\\n\\n/**\\n * Batched mount.\\n *\\n * @param {ReactComponent} componentInstance The instance to mount.\\n * @param {DOMElement} container DOM element to mount into.\\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\\n */\\nfunction batchedMountComponentIntoNode(componentInstance, container, shouldReuseMarkup, context) {\\n  var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(\\n  /* useCreateElement */\\n  !shouldReuseMarkup && ReactDOMFeatureFlags.useCreateElement);\\n  transaction.perform(mountComponentIntoNode, null, componentInstance, container, transaction, shouldReuseMarkup, context);\\n  ReactUpdates.ReactReconcileTransaction.release(transaction);\\n}\\n\\n/**\\n * Unmounts a component and removes it from the DOM.\\n *\\n * @param {ReactComponent} instance React component instance.\\n * @param {DOMElement} container DOM element to unmount from.\\n * @final\\n * @internal\\n * @see {ReactMount.unmountComponentAtNode}\\n */\\nfunction unmountComponentFromNode(instance, container, safely) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    ReactInstrumentation.debugTool.onBeginFlush();\\n  }\\n  ReactReconciler.unmountComponent(instance, safely);\\n  if (process.env.NODE_ENV !== 'production') {\\n    ReactInstrumentation.debugTool.onEndFlush();\\n  }\\n\\n  if (container.nodeType === DOC_NODE_TYPE) {\\n    container = container.documentElement;\\n  }\\n\\n  // http://jsperf.com/emptying-a-node\\n  while (container.lastChild) {\\n    container.removeChild(container.lastChild);\\n  }\\n}\\n\\n/**\\n * True if the supplied DOM node has a direct React-rendered child that is\\n * not a React root element. Useful for warning in `render`,\\n * `unmountComponentAtNode`, etc.\\n *\\n * @param {?DOMElement} node The candidate DOM node.\\n * @return {boolean} True if the DOM element contains a direct child that was\\n * rendered by React but is not a root element.\\n * @internal\\n */\\nfunction hasNonRootReactChild(container) {\\n  var rootEl = getReactRootElementInContainer(container);\\n  if (rootEl) {\\n    var inst = ReactDOMComponentTree.getInstanceFromNode(rootEl);\\n    return !!(inst && inst._hostParent);\\n  }\\n}\\n\\n/**\\n * True if the supplied DOM node is a React DOM element and\\n * it has been rendered by another copy of React.\\n *\\n * @param {?DOMElement} node The candidate DOM node.\\n * @return {boolean} True if the DOM has been rendered by another copy of React\\n * @internal\\n */\\nfunction nodeIsRenderedByOtherInstance(container) {\\n  var rootEl = getReactRootElementInContainer(container);\\n  return !!(rootEl && isReactNode(rootEl) && !ReactDOMComponentTree.getInstanceFromNode(rootEl));\\n}\\n\\n/**\\n * True if the supplied DOM node is a valid node element.\\n *\\n * @param {?DOMElement} node The candidate DOM node.\\n * @return {boolean} True if the DOM is a valid DOM node.\\n * @internal\\n */\\nfunction isValidContainer(node) {\\n  return !!(node && (node.nodeType === ELEMENT_NODE_TYPE || node.nodeType === DOC_NODE_TYPE || node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE));\\n}\\n\\n/**\\n * True if the supplied DOM node is a valid React node element.\\n *\\n * @param {?DOMElement} node The candidate DOM node.\\n * @return {boolean} True if the DOM is a valid React DOM node.\\n * @internal\\n */\\nfunction isReactNode(node) {\\n  return isValidContainer(node) && (node.hasAttribute(ROOT_ATTR_NAME) || node.hasAttribute(ATTR_NAME));\\n}\\n\\nfunction getHostRootInstanceInContainer(container) {\\n  var rootEl = getReactRootElementInContainer(container);\\n  var prevHostInstance = rootEl && ReactDOMComponentTree.getInstanceFromNode(rootEl);\\n  return prevHostInstance && !prevHostInstance._hostParent ? prevHostInstance : null;\\n}\\n\\nfunction getTopLevelWrapperInContainer(container) {\\n  var root = getHostRootInstanceInContainer(container);\\n  return root ? root._hostContainerInfo._topLevelWrapper : null;\\n}\\n\\n/**\\n * Temporary (?) hack so that we can store all top-level pending updates on\\n * composites instead of having to worry about different types of components\\n * here.\\n */\\nvar topLevelRootCounter = 1;\\nvar TopLevelWrapper = function () {\\n  this.rootID = topLevelRootCounter++;\\n};\\nTopLevelWrapper.prototype.isReactComponent = {};\\nif (process.env.NODE_ENV !== 'production') {\\n  TopLevelWrapper.displayName = 'TopLevelWrapper';\\n}\\nTopLevelWrapper.prototype.render = function () {\\n  return this.props.child;\\n};\\nTopLevelWrapper.isReactTopLevelWrapper = true;\\n\\n/**\\n * Mounting is the process of initializing a React component by creating its\\n * representative DOM elements and inserting them into a supplied `container`.\\n * Any prior content inside `container` is destroyed in the process.\\n *\\n *   ReactMount.render(\\n *     component,\\n *     document.getElementById('container')\\n *   );\\n *\\n *   <div id=\\\"container\\\">                   <-- Supplied `container`.\\n *     <div data-reactid=\\\".3\\\">              <-- Rendered reactRoot of React\\n *       // ...                                 component.\\n *     </div>\\n *   </div>\\n *\\n * Inside of `container`, the first element rendered is the \\\"reactRoot\\\".\\n */\\nvar ReactMount = {\\n\\n  TopLevelWrapper: TopLevelWrapper,\\n\\n  /**\\n   * Used by devtools. The keys are not important.\\n   */\\n  _instancesByReactRootID: instancesByReactRootID,\\n\\n  /**\\n   * This is a hook provided to support rendering React components while\\n   * ensuring that the apparent scroll position of its `container` does not\\n   * change.\\n   *\\n   * @param {DOMElement} container The `container` being rendered into.\\n   * @param {function} renderCallback This must be called once to do the render.\\n   */\\n  scrollMonitor: function (container, renderCallback) {\\n    renderCallback();\\n  },\\n\\n  /**\\n   * Take a component that's already mounted into the DOM and replace its props\\n   * @param {ReactComponent} prevComponent component instance already in the DOM\\n   * @param {ReactElement} nextElement component instance to render\\n   * @param {DOMElement} container container to render into\\n   * @param {?function} callback function triggered on completion\\n   */\\n  _updateRootComponent: function (prevComponent, nextElement, nextContext, container, callback) {\\n    ReactMount.scrollMonitor(container, function () {\\n      ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement, nextContext);\\n      if (callback) {\\n        ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback);\\n      }\\n    });\\n\\n    return prevComponent;\\n  },\\n\\n  /**\\n   * Render a new component into the DOM. Hooked by hooks!\\n   *\\n   * @param {ReactElement} nextElement element to render\\n   * @param {DOMElement} container container to render into\\n   * @param {boolean} shouldReuseMarkup if we should skip the markup insertion\\n   * @return {ReactComponent} nextComponent\\n   */\\n  _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) {\\n    // Various parts of our code (such as ReactCompositeComponent's\\n    // _renderValidatedComponent) assume that calls to render aren't nested;\\n    // verify that that's the case.\\n    process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;\\n\\n    !isValidContainer(container) ? process.env.NODE_ENV !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : _prodInvariant('37') : void 0;\\n\\n    ReactBrowserEventEmitter.ensureScrollValueMonitoring();\\n    var componentInstance = instantiateReactComponent(nextElement, false);\\n\\n    // The initial render is synchronous but any updates that happen during\\n    // rendering, in componentWillMount or componentDidMount, will be batched\\n    // according to the current batching strategy.\\n\\n    ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, container, shouldReuseMarkup, context);\\n\\n    var wrapperID = componentInstance._instance.rootID;\\n    instancesByReactRootID[wrapperID] = componentInstance;\\n\\n    return componentInstance;\\n  },\\n\\n  /**\\n   * Renders a React component into the DOM in the supplied `container`.\\n   *\\n   * If the React component was previously rendered into `container`, this will\\n   * perform an update on it and only mutate the DOM as necessary to reflect the\\n   * latest React component.\\n   *\\n   * @param {ReactComponent} parentComponent The conceptual parent of this render tree.\\n   * @param {ReactElement} nextElement Component element to render.\\n   * @param {DOMElement} container DOM element to render into.\\n   * @param {?function} callback function triggered on completion\\n   * @return {ReactComponent} Component instance rendered in `container`.\\n   */\\n  renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\\n    !(parentComponent != null && ReactInstanceMap.has(parentComponent)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : _prodInvariant('38') : void 0;\\n    return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback);\\n  },\\n\\n  _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\\n    ReactUpdateQueue.validateCallback(callback, 'ReactDOM.render');\\n    !React.isValidElement(nextElement) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing a string like \\\\'div\\\\', pass ' + 'React.createElement(\\\\'div\\\\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' :\\n    // Check if it quacks like an element\\n    nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : _prodInvariant('39', typeof nextElement === 'string' ? ' Instead of passing a string like \\\\'div\\\\', pass ' + 'React.createElement(\\\\'div\\\\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' : nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : void 0;\\n\\n    process.env.NODE_ENV !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : void 0;\\n\\n    var nextWrappedElement = React.createElement(TopLevelWrapper, { child: nextElement });\\n\\n    var nextContext;\\n    if (parentComponent) {\\n      var parentInst = ReactInstanceMap.get(parentComponent);\\n      nextContext = parentInst._processChildContext(parentInst._context);\\n    } else {\\n      nextContext = emptyObject;\\n    }\\n\\n    var prevComponent = getTopLevelWrapperInContainer(container);\\n\\n    if (prevComponent) {\\n      var prevWrappedElement = prevComponent._currentElement;\\n      var prevElement = prevWrappedElement.props.child;\\n      if (shouldUpdateReactComponent(prevElement, nextElement)) {\\n        var publicInst = prevComponent._renderedComponent.getPublicInstance();\\n        var updatedCallback = callback && function () {\\n          callback.call(publicInst);\\n        };\\n        ReactMount._updateRootComponent(prevComponent, nextWrappedElement, nextContext, container, updatedCallback);\\n        return publicInst;\\n      } else {\\n        ReactMount.unmountComponentAtNode(container);\\n      }\\n    }\\n\\n    var reactRootElement = getReactRootElementInContainer(container);\\n    var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement);\\n    var containerHasNonRootReactChild = hasNonRootReactChild(container);\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : void 0;\\n\\n      if (!containerHasReactMarkup || reactRootElement.nextSibling) {\\n        var rootElementSibling = reactRootElement;\\n        while (rootElementSibling) {\\n          if (internalGetID(rootElementSibling)) {\\n            process.env.NODE_ENV !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : void 0;\\n            break;\\n          }\\n          rootElementSibling = rootElementSibling.nextSibling;\\n        }\\n      }\\n    }\\n\\n    var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild;\\n    var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, nextContext)._renderedComponent.getPublicInstance();\\n    if (callback) {\\n      callback.call(component);\\n    }\\n    return component;\\n  },\\n\\n  /**\\n   * Renders a React component into the DOM in the supplied `container`.\\n   * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.render\\n   *\\n   * If the React component was previously rendered into `container`, this will\\n   * perform an update on it and only mutate the DOM as necessary to reflect the\\n   * latest React component.\\n   *\\n   * @param {ReactElement} nextElement Component element to render.\\n   * @param {DOMElement} container DOM element to render into.\\n   * @param {?function} callback function triggered on completion\\n   * @return {ReactComponent} Component instance rendered in `container`.\\n   */\\n  render: function (nextElement, container, callback) {\\n    return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback);\\n  },\\n\\n  /**\\n   * Unmounts and destroys the React component rendered in the `container`.\\n   * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.unmountcomponentatnode\\n   *\\n   * @param {DOMElement} container DOM element containing a React component.\\n   * @return {boolean} True if a component was found in and unmounted from\\n   *                   `container`\\n   */\\n  unmountComponentAtNode: function (container) {\\n    // Various parts of our code (such as ReactCompositeComponent's\\n    // _renderValidatedComponent) assume that calls to render aren't nested;\\n    // verify that that's the case. (Strictly speaking, unmounting won't cause a\\n    // render but we still don't expect to be in a render call here.)\\n    process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;\\n\\n    !isValidContainer(container) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : _prodInvariant('40') : void 0;\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      process.env.NODE_ENV !== 'production' ? warning(!nodeIsRenderedByOtherInstance(container), 'unmountComponentAtNode(): The node you\\\\'re attempting to unmount ' + 'was rendered by another copy of React.') : void 0;\\n    }\\n\\n    var prevComponent = getTopLevelWrapperInContainer(container);\\n    if (!prevComponent) {\\n      // Check if the node being unmounted was rendered by React, but isn't a\\n      // root node.\\n      var containerHasNonRootReactChild = hasNonRootReactChild(container);\\n\\n      // Check if the container itself is a React root node.\\n      var isContainerReactRoot = container.nodeType === 1 && container.hasAttribute(ROOT_ATTR_NAME);\\n\\n      if (process.env.NODE_ENV !== 'production') {\\n        process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\\\\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : void 0;\\n      }\\n\\n      return false;\\n    }\\n    delete instancesByReactRootID[prevComponent._instance.rootID];\\n    ReactUpdates.batchedUpdates(unmountComponentFromNode, prevComponent, container, false);\\n    return true;\\n  },\\n\\n  _mountImageIntoNode: function (markup, container, instance, shouldReuseMarkup, transaction) {\\n    !isValidContainer(container) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : _prodInvariant('41') : void 0;\\n\\n    if (shouldReuseMarkup) {\\n      var rootElement = getReactRootElementInContainer(container);\\n      if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) {\\n        ReactDOMComponentTree.precacheNode(instance, rootElement);\\n        return;\\n      } else {\\n        var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\\n        rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\\n\\n        var rootMarkup = rootElement.outerHTML;\\n        rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum);\\n\\n        var normalizedMarkup = markup;\\n        if (process.env.NODE_ENV !== 'production') {\\n          // because rootMarkup is retrieved from the DOM, various normalizations\\n          // will have occurred which will not be present in `markup`. Here,\\n          // insert markup into a <div> or <iframe> depending on the container\\n          // type to perform the same normalizations before comparing.\\n          var normalizer;\\n          if (container.nodeType === ELEMENT_NODE_TYPE) {\\n            normalizer = document.createElement('div');\\n            normalizer.innerHTML = markup;\\n            normalizedMarkup = normalizer.innerHTML;\\n          } else {\\n            normalizer = document.createElement('iframe');\\n            document.body.appendChild(normalizer);\\n            normalizer.contentDocument.write(markup);\\n            normalizedMarkup = normalizer.contentDocument.documentElement.outerHTML;\\n            document.body.removeChild(normalizer);\\n          }\\n        }\\n\\n        var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup);\\n        var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\\\\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);\\n\\n        !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\\\\'re trying to render a component to the document using server rendering but the checksum was invalid. This usually means you rendered a different component type or props on the client from the one on the server, or your render() methods are impure. React cannot handle this case due to cross-browser quirks by rendering at the document root. You should look for environment dependent code in your components and ensure the props are the same client and server side:\\\\n%s', difference) : _prodInvariant('42', difference) : void 0;\\n\\n        if (process.env.NODE_ENV !== 'production') {\\n          process.env.NODE_ENV !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\\\\n%s', difference) : void 0;\\n        }\\n      }\\n    }\\n\\n    !(container.nodeType !== DOC_NODE_TYPE) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'You\\\\'re trying to render a component to the document but you didn\\\\'t use server rendering. We can\\\\'t do this without using server rendering due to cross-browser quirks. See ReactDOMServer.renderToString() for server rendering.') : _prodInvariant('43') : void 0;\\n\\n    if (transaction.useCreateElement) {\\n      while (container.lastChild) {\\n        container.removeChild(container.lastChild);\\n      }\\n      DOMLazyTree.insertTreeBefore(container, markup, null);\\n    } else {\\n      setInnerHTML(container, markup);\\n      ReactDOMComponentTree.precacheNode(instance, container.firstChild);\\n    }\\n\\n    if (process.env.NODE_ENV !== 'production') {\\n      var hostNode = ReactDOMComponentTree.getInstanceFromNode(container.firstChild);\\n      if (hostNode._debugID !== 0) {\\n        ReactInstrumentation.debugTool.onHostOperation({\\n          instanceID: hostNode._debugID,\\n          type: 'mount',\\n          payload: markup.toString()\\n        });\\n      }\\n    }\\n  }\\n};\\n\\nmodule.exports = ReactMount;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactMount.js\\n// module id = 244\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactMount.js?\");\n\n/***/ },\n/* 245 */\n/*!**************************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOMContainerInfo.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar validateDOMNesting = __webpack_require__(/*! ./validateDOMNesting */ 214);\\n\\nvar DOC_NODE_TYPE = 9;\\n\\nfunction ReactDOMContainerInfo(topLevelWrapper, node) {\\n  var info = {\\n    _topLevelWrapper: topLevelWrapper,\\n    _idCounter: 1,\\n    _ownerDocument: node ? node.nodeType === DOC_NODE_TYPE ? node : node.ownerDocument : null,\\n    _node: node,\\n    _tag: node ? node.nodeName.toLowerCase() : null,\\n    _namespaceURI: node ? node.namespaceURI : null\\n  };\\n  if (process.env.NODE_ENV !== 'production') {\\n    info._ancestorInfo = node ? validateDOMNesting.updatedAncestorInfo(null, info._tag, null) : null;\\n  }\\n  return info;\\n}\\n\\nmodule.exports = ReactDOMContainerInfo;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOMContainerInfo.js\\n// module id = 245\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOMContainerInfo.js?\");\n\n/***/ },\n/* 246 */\n/*!*************************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOMFeatureFlags.js ***!\n  \\*************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ReactDOMFeatureFlags = {\\n  useCreateElement: true,\\n  useFiber: false\\n};\\n\\nmodule.exports = ReactDOMFeatureFlags;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOMFeatureFlags.js\\n// module id = 246\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOMFeatureFlags.js?\");\n\n/***/ },\n/* 247 */\n/*!************************************************!*\\\n  !*** ./~/react-dom/lib/ReactMarkupChecksum.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar adler32 = __webpack_require__(/*! ./adler32 */ 248);\\n\\nvar TAG_END = /\\\\/?>/;\\nvar COMMENT_START = /^<\\\\!\\\\-\\\\-/;\\n\\nvar ReactMarkupChecksum = {\\n  CHECKSUM_ATTR_NAME: 'data-react-checksum',\\n\\n  /**\\n   * @param {string} markup Markup string\\n   * @return {string} Markup string with checksum attribute attached\\n   */\\n  addChecksumToMarkup: function (markup) {\\n    var checksum = adler32(markup);\\n\\n    // Add checksum (handle both parent tags, comments and self-closing tags)\\n    if (COMMENT_START.test(markup)) {\\n      return markup;\\n    } else {\\n      return markup.replace(TAG_END, ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '=\\\"' + checksum + '\\\"$&');\\n    }\\n  },\\n\\n  /**\\n   * @param {string} markup to use\\n   * @param {DOMElement} element root React element\\n   * @returns {boolean} whether or not the markup is the same\\n   */\\n  canReuseMarkup: function (markup, element) {\\n    var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\\n    existingChecksum = existingChecksum && parseInt(existingChecksum, 10);\\n    var markupChecksum = adler32(markup);\\n    return markupChecksum === existingChecksum;\\n  }\\n};\\n\\nmodule.exports = ReactMarkupChecksum;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactMarkupChecksum.js\\n// module id = 247\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactMarkupChecksum.js?\");\n\n/***/ },\n/* 248 */\n/*!************************************!*\\\n  !*** ./~/react-dom/lib/adler32.js ***!\n  \\************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * \\n */\\n\\n'use strict';\\n\\nvar MOD = 65521;\\n\\n// adler32 is not cryptographically strong, and is only used to sanity check that\\n// markup generated on the server matches the markup generated on the client.\\n// This implementation (a modified version of the SheetJS version) has been optimized\\n// for our use case, at the expense of conforming to the adler32 specification\\n// for non-ascii inputs.\\nfunction adler32(data) {\\n  var a = 1;\\n  var b = 0;\\n  var i = 0;\\n  var l = data.length;\\n  var m = l & ~0x3;\\n  while (i < m) {\\n    var n = Math.min(i + 4096, m);\\n    for (; i < n; i += 4) {\\n      b += (a += data.charCodeAt(i)) + (a += data.charCodeAt(i + 1)) + (a += data.charCodeAt(i + 2)) + (a += data.charCodeAt(i + 3));\\n    }\\n    a %= MOD;\\n    b %= MOD;\\n  }\\n  for (; i < l; i++) {\\n    b += a += data.charCodeAt(i);\\n  }\\n  a %= MOD;\\n  b %= MOD;\\n  return a | b << 16;\\n}\\n\\nmodule.exports = adler32;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/adler32.js\\n// module id = 248\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/adler32.js?\");\n\n/***/ },\n/* 249 */\n/*!*****************************************!*\\\n  !*** ./~/react-dom/lib/ReactVersion.js ***!\n  \\*****************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nmodule.exports = '15.4.1';\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactVersion.js\\n// module id = 249\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactVersion.js?\");\n\n/***/ },\n/* 250 */\n/*!****************************************!*\\\n  !*** ./~/react-dom/lib/findDOMNode.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar _prodInvariant = __webpack_require__(/*! ./reactProdInvariant */ 113);\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! react/lib/ReactCurrentOwner */ 10);\\nvar ReactDOMComponentTree = __webpack_require__(/*! ./ReactDOMComponentTree */ 112);\\nvar ReactInstanceMap = __webpack_require__(/*! ./ReactInstanceMap */ 194);\\n\\nvar getHostComponentFromComposite = __webpack_require__(/*! ./getHostComponentFromComposite */ 251);\\nvar invariant = __webpack_require__(/*! fbjs/lib/invariant */ 8);\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\n/**\\n * Returns the DOM node rendered by this element.\\n *\\n * See https://facebook.github.io/react/docs/top-level-api.html#reactdom.finddomnode\\n *\\n * @param {ReactComponent|DOMElement} componentOrElement\\n * @return {?DOMElement} The root node of this element.\\n */\\nfunction findDOMNode(componentOrElement) {\\n  if (process.env.NODE_ENV !== 'production') {\\n    var owner = ReactCurrentOwner.current;\\n    if (owner !== null) {\\n      process.env.NODE_ENV !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : void 0;\\n      owner._warnedAboutRefsInRender = true;\\n    }\\n  }\\n  if (componentOrElement == null) {\\n    return null;\\n  }\\n  if (componentOrElement.nodeType === 1) {\\n    return componentOrElement;\\n  }\\n\\n  var inst = ReactInstanceMap.get(componentOrElement);\\n  if (inst) {\\n    inst = getHostComponentFromComposite(inst);\\n    return inst ? ReactDOMComponentTree.getNodeFromInstance(inst) : null;\\n  }\\n\\n  if (typeof componentOrElement.render === 'function') {\\n     true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findDOMNode was called on an unmounted component.') : _prodInvariant('44') : void 0;\\n  } else {\\n     true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element appears to be neither ReactComponent nor DOMNode (keys: %s)', Object.keys(componentOrElement)) : _prodInvariant('45', Object.keys(componentOrElement)) : void 0;\\n  }\\n}\\n\\nmodule.exports = findDOMNode;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/findDOMNode.js\\n// module id = 250\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/findDOMNode.js?\");\n\n/***/ },\n/* 251 */\n/*!**********************************************************!*\\\n  !*** ./~/react-dom/lib/getHostComponentFromComposite.js ***!\n  \\**********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ReactNodeTypes = __webpack_require__(/*! ./ReactNodeTypes */ 198);\\n\\nfunction getHostComponentFromComposite(inst) {\\n  var type;\\n\\n  while ((type = inst._renderedNodeType) === ReactNodeTypes.COMPOSITE) {\\n    inst = inst._renderedComponent;\\n  }\\n\\n  if (type === ReactNodeTypes.HOST) {\\n    return inst._renderedComponent;\\n  } else if (type === ReactNodeTypes.EMPTY) {\\n    return null;\\n  }\\n}\\n\\nmodule.exports = getHostComponentFromComposite;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/getHostComponentFromComposite.js\\n// module id = 251\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/getHostComponentFromComposite.js?\");\n\n/***/ },\n/* 252 */\n/*!*******************************************************!*\\\n  !*** ./~/react-dom/lib/renderSubtreeIntoContainer.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 244);\\n\\nmodule.exports = ReactMount.renderSubtreeIntoContainer;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/renderSubtreeIntoContainer.js\\n// module id = 252\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/renderSubtreeIntoContainer.js?\");\n\n/***/ },\n/* 253 */\n/*!********************************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOMUnknownPropertyHook.js ***!\n  \\********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 114);\\nvar EventPluginRegistry = __webpack_require__(/*! ./EventPluginRegistry */ 121);\\nvar ReactComponentTreeHook = __webpack_require__(/*! react/lib/ReactComponentTreeHook */ 26);\\n\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nif (process.env.NODE_ENV !== 'production') {\\n  var reactProps = {\\n    children: true,\\n    dangerouslySetInnerHTML: true,\\n    key: true,\\n    ref: true,\\n\\n    autoFocus: true,\\n    defaultValue: true,\\n    valueLink: true,\\n    defaultChecked: true,\\n    checkedLink: true,\\n    innerHTML: true,\\n    suppressContentEditableWarning: true,\\n    onFocusIn: true,\\n    onFocusOut: true\\n  };\\n  var warnedProperties = {};\\n\\n  var validateProperty = function (tagName, name, debugID) {\\n    if (DOMProperty.properties.hasOwnProperty(name) || DOMProperty.isCustomAttribute(name)) {\\n      return true;\\n    }\\n    if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {\\n      return true;\\n    }\\n    if (EventPluginRegistry.registrationNameModules.hasOwnProperty(name)) {\\n      return true;\\n    }\\n    warnedProperties[name] = true;\\n    var lowerCasedName = name.toLowerCase();\\n\\n    // data-* attributes should be lowercase; suggest the lowercase version\\n    var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;\\n\\n    var registrationName = EventPluginRegistry.possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? EventPluginRegistry.possibleRegistrationNames[lowerCasedName] : null;\\n\\n    if (standardName != null) {\\n      process.env.NODE_ENV !== 'production' ? warning(false, 'Unknown DOM property %s. Did you mean %s?%s', name, standardName, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;\\n      return true;\\n    } else if (registrationName != null) {\\n      process.env.NODE_ENV !== 'production' ? warning(false, 'Unknown event handler property %s. Did you mean `%s`?%s', name, registrationName, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;\\n      return true;\\n    } else {\\n      // We were unable to guess which prop the user intended.\\n      // It is likely that the user was just blindly spreading/forwarding props\\n      // Components should be careful to only render valid props/attributes.\\n      // Warning will be invoked in warnUnknownProperties to allow grouping.\\n      return false;\\n    }\\n  };\\n}\\n\\nvar warnUnknownProperties = function (debugID, element) {\\n  var unknownProps = [];\\n  for (var key in element.props) {\\n    var isValid = validateProperty(element.type, key, debugID);\\n    if (!isValid) {\\n      unknownProps.push(key);\\n    }\\n  }\\n\\n  var unknownPropString = unknownProps.map(function (prop) {\\n    return '`' + prop + '`';\\n  }).join(', ');\\n\\n  if (unknownProps.length === 1) {\\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Unknown prop %s on <%s> tag. Remove this prop from the element. ' + 'For details, see https://fb.me/react-unknown-prop%s', unknownPropString, element.type, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;\\n  } else if (unknownProps.length > 1) {\\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Unknown props %s on <%s> tag. Remove these props from the element. ' + 'For details, see https://fb.me/react-unknown-prop%s', unknownPropString, element.type, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;\\n  }\\n};\\n\\nfunction handleElement(debugID, element) {\\n  if (element == null || typeof element.type !== 'string') {\\n    return;\\n  }\\n  if (element.type.indexOf('-') >= 0 || element.props.is) {\\n    return;\\n  }\\n  warnUnknownProperties(debugID, element);\\n}\\n\\nvar ReactDOMUnknownPropertyHook = {\\n  onBeforeMountComponent: function (debugID, element) {\\n    handleElement(debugID, element);\\n  },\\n  onBeforeUpdateComponent: function (debugID, element) {\\n    handleElement(debugID, element);\\n  }\\n};\\n\\nmodule.exports = ReactDOMUnknownPropertyHook;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOMUnknownPropertyHook.js\\n// module id = 253\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOMUnknownPropertyHook.js?\");\n\n/***/ },\n/* 254 */\n/*!***********************************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOMNullInputValuePropHook.js ***!\n  \\***********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar ReactComponentTreeHook = __webpack_require__(/*! react/lib/ReactComponentTreeHook */ 26);\\n\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar didWarnValueNull = false;\\n\\nfunction handleElement(debugID, element) {\\n  if (element == null) {\\n    return;\\n  }\\n  if (element.type !== 'input' && element.type !== 'textarea' && element.type !== 'select') {\\n    return;\\n  }\\n  if (element.props != null && element.props.value === null && !didWarnValueNull) {\\n    process.env.NODE_ENV !== 'production' ? warning(false, '`value` prop on `%s` should not be null. ' + 'Consider using the empty string to clear the component or `undefined` ' + 'for uncontrolled components.%s', element.type, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;\\n\\n    didWarnValueNull = true;\\n  }\\n}\\n\\nvar ReactDOMNullInputValuePropHook = {\\n  onBeforeMountComponent: function (debugID, element) {\\n    handleElement(debugID, element);\\n  },\\n  onBeforeUpdateComponent: function (debugID, element) {\\n    handleElement(debugID, element);\\n  }\\n};\\n\\nmodule.exports = ReactDOMNullInputValuePropHook;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOMNullInputValuePropHook.js\\n// module id = 254\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOMNullInputValuePropHook.js?\");\n\n/***/ },\n/* 255 */\n/*!****************************************************!*\\\n  !*** ./~/react-dom/lib/ReactDOMInvalidARIAHook.js ***!\n  \\****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n */\\n\\n'use strict';\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 114);\\nvar ReactComponentTreeHook = __webpack_require__(/*! react/lib/ReactComponentTreeHook */ 26);\\n\\nvar warning = __webpack_require__(/*! fbjs/lib/warning */ 11);\\n\\nvar warnedProperties = {};\\nvar rARIA = new RegExp('^(aria)-[' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$');\\n\\nfunction validateProperty(tagName, name, debugID) {\\n  if (warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {\\n    return true;\\n  }\\n\\n  if (rARIA.test(name)) {\\n    var lowerCasedName = name.toLowerCase();\\n    var standardName = DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;\\n\\n    // If this is an aria-* attribute, but is not listed in the known DOM\\n    // DOM properties, then it is an invalid aria-* attribute.\\n    if (standardName == null) {\\n      warnedProperties[name] = true;\\n      return false;\\n    }\\n    // aria-* attributes should be lowercase; suggest the lowercase version.\\n    if (name !== standardName) {\\n      process.env.NODE_ENV !== 'production' ? warning(false, 'Unknown ARIA attribute %s. Did you mean %s?%s', name, standardName, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;\\n      warnedProperties[name] = true;\\n      return true;\\n    }\\n  }\\n\\n  return true;\\n}\\n\\nfunction warnInvalidARIAProps(debugID, element) {\\n  var invalidProps = [];\\n\\n  for (var key in element.props) {\\n    var isValid = validateProperty(element.type, key, debugID);\\n    if (!isValid) {\\n      invalidProps.push(key);\\n    }\\n  }\\n\\n  var unknownPropString = invalidProps.map(function (prop) {\\n    return '`' + prop + '`';\\n  }).join(', ');\\n\\n  if (invalidProps.length === 1) {\\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid aria prop %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop%s', unknownPropString, element.type, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;\\n  } else if (invalidProps.length > 1) {\\n    process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid aria props %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop%s', unknownPropString, element.type, ReactComponentTreeHook.getStackAddendumByID(debugID)) : void 0;\\n  }\\n}\\n\\nfunction handleElement(debugID, element) {\\n  if (element == null || typeof element.type !== 'string') {\\n    return;\\n  }\\n  if (element.type.indexOf('-') >= 0 || element.props.is) {\\n    return;\\n  }\\n\\n  warnInvalidARIAProps(debugID, element);\\n}\\n\\nvar ReactDOMInvalidARIAHook = {\\n  onBeforeMountComponent: function (debugID, element) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      handleElement(debugID, element);\\n    }\\n  },\\n  onBeforeUpdateComponent: function (debugID, element) {\\n    if (process.env.NODE_ENV !== 'production') {\\n      handleElement(debugID, element);\\n    }\\n  }\\n};\\n\\nmodule.exports = ReactDOMInvalidARIAHook;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-dom/lib/ReactDOMInvalidARIAHook.js\\n// module id = 255\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-dom/lib/ReactDOMInvalidARIAHook.js?\");\n\n/***/ },\n/* 256 */\n/*!*************************************************!*\\\n  !*** ./javascript/structuremap-whatdoihave.jsx ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar WhatDoIHave = _react2.default.createClass({\\n    displayName: 'WhatDoIHave',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        FubuDiagnostics.getText('StructureMap:whatdoihave', {}, function (data) {\\n            _this.setState({ text: data, loading: false });\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n        return _react2.default.createElement(\\n            'pre',\\n            null,\\n            this.state.text\\n        );\\n    }\\n});\\n\\nmodule.exports = WhatDoIHave;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/structuremap-whatdoihave.jsx\\n// module id = 256\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/structuremap-whatdoihave.jsx?\");\n\n/***/ },\n/* 257 */\n/*!***********************************************!*\\\n  !*** ./javascript/structuremap-buildplan.jsx ***!\n  \\***********************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n\\nvar React = FubuDiagnostics.React;\\n\\nvar BuildPlanView = React.createClass({\\n    displayName: 'BuildPlanView',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        var params = this.getParams();\\n        FubuDiagnostics.getText('StructureMap:build_plan_PluginType_Name', params, function (data) {\\n            _this.setState({ text: data, loading: false });\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return React.createElement(\\n                'p',\\n                null,\\n                'Loading..'\\n            );\\n        }\\n\\n        var params = this.getParams();\\n\\n        return React.createElement(\\n            'div',\\n            null,\\n            React.createElement(\\n                'h3',\\n                null,\\n                'PluginType: ',\\n                params.PluginType,\\n                ', Instance ',\\n                params.Name\\n            ),\\n            React.createElement(\\n                'pre',\\n                null,\\n                this.state.text\\n            )\\n        );\\n    }\\n});\\n\\nmodule.exports = BuildPlanView;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/structuremap-buildplan.jsx\\n// module id = 257\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/structuremap-buildplan.jsx?\");\n\n/***/ },\n/* 258 */\n/*!***************************************************!*\\\n  !*** ./javascript/structuremap-searchresults.jsx ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nvar React = FubuDiagnostics.React;\\nvar _ = __webpack_require__(/*! lodash */ 32);\\nvar SearchBox = __webpack_require__(/*! ./structuremap-searchbox */ 109);\\n\\nvar InstanceRow = React.createClass({\\n    displayName: 'InstanceRow',\\n    render: function render() {\\n        var url = '#structuremap/buildplan/' + this.props._key;\\n        var familyUrl = '#structuremap/search-results/Plugin-Type/' + this.props.pluginType;\\n\\n        return React.createElement(\\n            'tr',\\n            null,\\n            React.createElement(\\n                'td',\\n                null,\\n                React.createElement(\\n                    'a',\\n                    { href: familyUrl },\\n                    this.props.pluginType\\n                )\\n            ),\\n            React.createElement(\\n                'td',\\n                null,\\n                React.createElement(\\n                    'a',\\n                    { href: url },\\n                    this.props.name\\n                )\\n            ),\\n            React.createElement(\\n                'td',\\n                null,\\n                this.props.lifecycle\\n            ),\\n            React.createElement(\\n                'td',\\n                null,\\n                this.props.returnedType\\n            ),\\n            React.createElement(\\n                'td',\\n                null,\\n                this.props.description\\n            )\\n        );\\n    }\\n});\\n\\nvar InstanceResults = React.createClass({\\n    displayName: 'InstanceResults',\\n    render: function render() {\\n        var items = this.props.instances.map(function (instance, i) {\\n            instance._key = instance.key;\\n\\n            return React.createElement(InstanceRow, _extends({ key: instance.key }, instance));\\n        });\\n\\n        return React.createElement(\\n            'table',\\n            { className: 'table table-striped' },\\n            React.createElement(\\n                'tbody',\\n                null,\\n                React.createElement(\\n                    'tr',\\n                    null,\\n                    React.createElement(\\n                        'th',\\n                        null,\\n                        'Plugin Type'\\n                    ),\\n                    React.createElement(\\n                        'th',\\n                        null,\\n                        'Name'\\n                    ),\\n                    React.createElement(\\n                        'th',\\n                        null,\\n                        'Lifecycle'\\n                    ),\\n                    React.createElement(\\n                        'th',\\n                        null,\\n                        'Returned Type'\\n                    ),\\n                    React.createElement(\\n                        'th',\\n                        null,\\n                        'Description'\\n                    )\\n                ),\\n                items\\n            )\\n        );\\n    }\\n});\\n\\nfunction BuildPluginTypeData(pluginType) {\\n    var items = [];\\n\\n    if (pluginType.defaultInstance) {\\n        items.push(pluginType.defaultInstance);\\n    } else {\\n        items.push({\\n            pluginType: pluginType.pluginType,\\n            lifecycle: pluginType.lifecycle,\\n            returnedType: '',\\n            name: '',\\n            description: ''\\n        });\\n    }\\n\\n    items = items.concat(pluginType.others);\\n\\n    if (pluginType.missingName) {\\n        pluginType.missingName.name = '(missing named instance)';\\n        items.push(pluginType.missingName);\\n    }\\n\\n    if (pluginType.fallback) {\\n        pluginType.fallback.name = '(fallback)';\\n        items.push(pluginType.fallback);\\n    }\\n\\n    for (var i = 1; i < items.length; i++) {\\n        items[i].pluginType = '';\\n    }\\n    return items;\\n}\\n\\nvar SearchTitle = React.createClass({\\n    displayName: 'SearchTitle',\\n    render: function render() {\\n        var type = this.props.search.Type.replace('-', ' ');\\n\\n        return React.createElement(\\n            'h3',\\n            null,\\n            'Search Results: ',\\n            type,\\n            '/',\\n            this.props.search.Value\\n        );\\n    }\\n});\\n\\nvar SearchResults = React.createClass({\\n    displayName: 'SearchResults',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        var params = this.props.params;\\n        FubuDiagnostics.get('StructureMap:search_Type_Value', params, function (data) {\\n            _.assign(data, { loading: false });\\n\\n            _this.setState(data);\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return React.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        var instances = [];\\n\\n        if (this.state.search.Type == 'Returned-Type') {\\n            instances = this.state.instances;\\n        } else {\\n            instances = _.flatten(_.map(this.state.pluginTypes, BuildPluginTypeData));\\n        }\\n\\n        return React.createElement(\\n            'div',\\n            null,\\n            React.createElement(SearchBox, null),\\n            React.createElement(SearchTitle, { search: this.state.search }),\\n            React.createElement(InstanceResults, { key: instances.length, instances: instances })\\n        );\\n    }\\n});\\n\\nmodule.exports = SearchResults;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/structuremap-searchresults.jsx\\n// module id = 258\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/structuremap-searchresults.jsx?\");\n\n/***/ },\n/* 259 */\n/*!************************************!*\\\n  !*** ./javascript/service-bus.jsx ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _htmlScreen = __webpack_require__(/*! ./html-screen */ 103);\\n\\nvar _htmlScreen2 = _interopRequireDefault(_htmlScreen);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar ChannelGraph = _react2.default.createClass({\\n    displayName: 'ChannelGraph',\\n    render: function render() {\\n        return _react2.default.createElement(_htmlScreen2.default, { route: 'ChannelGraph:channels' });\\n    }\\n});\\n\\nvar Subscriptions = _react2.default.createClass({\\n    displayName: 'Subscriptions',\\n    render: function render() {\\n        return _react2.default.createElement(_htmlScreen2.default, { route: 'Subscriptions:subscriptions' });\\n    }\\n});\\n\\nvar Messages = _react2.default.createClass({\\n    displayName: 'Messages',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        FubuDiagnostics.get('Messages:messages', {}, function (data) {\\n            _this.setState({ messages: data, loading: false });\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        var rows = this.state.messages.map(function (msg) {\\n            var url = \\\"#/fubumvc/chain-details/\\\" + msg.hash;\\n\\n            return _react2.default.createElement(\\n                'tr',\\n                { key: url },\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    _react2.default.createElement(\\n                        'a',\\n                        { href: url, title: msg.full_name },\\n                        msg.message_type\\n                    )\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    msg.handlers\\n                )\\n            );\\n        });\\n\\n        return _react2.default.createElement(\\n            'table',\\n            { className: 'table table-striped', style: { width: 'auto' } },\\n            _react2.default.createElement(\\n                'thead',\\n                null,\\n                _react2.default.createElement(\\n                    'tr',\\n                    null,\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Message Type'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Handlers'\\n                    )\\n                )\\n            ),\\n            _react2.default.createElement(\\n                'tbody',\\n                null,\\n                rows\\n            )\\n        );\\n    }\\n});\\n\\nvar Tasks = _react2.default.createClass({\\n    displayName: 'Tasks',\\n    render: function render() {\\n        return _react2.default.createElement(_htmlScreen2.default, { route: 'Tasks:tasks' });\\n    }\\n});\\n\\nFubuDiagnostics.addSection({\\n    title: 'Messaging',\\n    description: 'The configuration and state of the messaging features',\\n    key: 'servicebus'\\n}).add({\\n    title: 'Service Bus',\\n    description: 'Everything about this service bus node',\\n    key: 'channelgraph',\\n    component: ChannelGraph\\n}).add({\\n    title: 'Subscriptions',\\n    description: 'The current state and configuration of the subscription storage',\\n    key: 'subscriptions',\\n    component: Subscriptions\\n}).add({\\n    title: 'Message Handlers',\\n    description: 'All of the message handlers in this application',\\n    key: 'message-handlers',\\n    component: Messages\\n}).add({\\n    title: 'Permanent Tasks',\\n    description: 'Current state of the persistent tasks in the service bus',\\n    key: 'persistent-tasks',\\n    component: Tasks\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/service-bus.jsx\\n// module id = 259\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/service-bus.jsx?\");\n\n/***/ },\n/* 260 */\n/*!**************************************!*\\\n  !*** ./javascript/message-table.jsx ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar MessageRow = _react2.default.createClass({\\n    displayName: 'MessageRow',\\n    render: function render() {\\n        var details = '#fubumvc/request-details/' + this.props.id;\\n\\n        return _react2.default.createElement(\\n            'tr',\\n            { key: this.props.id },\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                _react2.default.createElement(\\n                    'a',\\n                    { href: details },\\n                    'Details'\\n                )\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                this.props.time\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                this.props.message\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                this.props.request.headers.attempts\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                { style: { textAlign: \\\"right\\\" } },\\n                this.props.execution_time\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                this.props.request.headers[\\\"received-at\\\"]\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                this.props.request.headers[\\\"reply-uri\\\"]\\n            )\\n        );\\n    }\\n});\\n\\nvar MessageTable = _react2.default.createClass({\\n    displayName: 'MessageTable',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        FubuDiagnostics.get('Requests:messages', {}, function (data) {\\n            _this.setState({ messages: data, loading: false });\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        var rows = this.state.messages.map(function (m, i) {\\n            return _react2.default.createElement(MessageRow, _extends({ key: i }, m));\\n        });\\n\\n        return _react2.default.createElement(\\n            'table',\\n            { className: 'table table-striped', style: { width: 'auto' } },\\n            _react2.default.createElement(\\n                'thead',\\n                null,\\n                _react2.default.createElement(\\n                    'tr',\\n                    null,\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Details'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Time (Local)'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Message Type'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Attempts'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Duration (ms)'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Received At'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Reply Uri'\\n                    )\\n                )\\n            ),\\n            _react2.default.createElement(\\n                'tbody',\\n                null,\\n                rows\\n            )\\n        );\\n    }\\n});\\n\\nFubuDiagnostics.section('servicebus').add({\\n    title: 'Message History',\\n    description: 'A history of the most recent service bus messages handled by this application',\\n    key: 'messages',\\n    component: MessageTable\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/message-table.jsx\\n// module id = 260\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/message-table.jsx?\");\n\n/***/ },\n/* 261 */\n/*!*************************************!*\\\n  !*** ./javascript/polling-jobs.jsx ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar PollingJobTable = _react2.default.createClass({\\n    displayName: 'PollingJobTable',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        FubuDiagnostics.get('PollingJob:pollingjobs', {}, function (data) {\\n            _this.setState({ jobs: data, loading: false });\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        var rows = this.state.jobs.map(function (job) {\\n            var url = '#/fubumvc/chain-details/' + job.chain;\\n\\n            var last = _react2.default.createElement('td', null);\\n            if (job.last) {\\n                var clazz = 'success';\\n                if (job.last.exceptions) {\\n                    clazz = 'danger';\\n                }\\n\\n                last = _react2.default.createElement(\\n                    'td',\\n                    { className: clazz },\\n                    job.last.time,\\n                    ' in ',\\n                    job.last.execution_time,\\n                    ' (ms)'\\n                );\\n            }\\n\\n            return _react2.default.createElement(\\n                'tr',\\n                { key: job.title },\\n                _react2.default.createElement(\\n                    'td',\\n                    { title: job.type },\\n                    _react2.default.createElement(\\n                        'a',\\n                        { href: url },\\n                        job.title\\n                    )\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    job.interval\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    job.execution\\n                ),\\n                last,\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    job.performance.hits\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    job.performance.average\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    job.performance.exceptions\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    job.performance.min\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    job.performance.max\\n                )\\n            );\\n        });\\n\\n        return _react2.default.createElement(\\n            'table',\\n            { className: 'table table-striped' },\\n            _react2.default.createElement(\\n                'thead',\\n                null,\\n                _react2.default.createElement(\\n                    'tr',\\n                    null,\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Job Name'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Interval (ms)'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Execution'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Last Execution'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Hits'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Average Time (ms)'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Exception %'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Min Time (ms)'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Max Time (ms)'\\n                    )\\n                )\\n            ),\\n            _react2.default.createElement(\\n                'tbody',\\n                null,\\n                rows\\n            )\\n        );\\n    }\\n});\\n\\nFubuDiagnostics.addSection({\\n    title: 'Polling Jobs',\\n    description: 'All configured polling jobs',\\n    key: 'pollingjobs',\\n    component: PollingJobTable\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/polling-jobs.jsx\\n// module id = 261\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/polling-jobs.jsx?\");\n\n/***/ },\n/* 262 */\n/*!**************************************!*\\\n  !*** ./javascript/model-binding.jsx ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _reactBootstrap = __webpack_require__(/*! react-bootstrap */ 263);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar ModelBinding = _react2.default.createClass({\\n    displayName: 'ModelBinding',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        // TODO -- add parameters into this someday\\n        FubuDiagnostics.get('ModelBinding:binding_all', {}, function (data) {\\n            _this.setState({ description: data, loading: false });\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'div',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        return _react2.default.createElement(\\n            _reactBootstrap.Row,\\n            null,\\n            _react2.default.createElement(\\n                _reactBootstrap.Col,\\n                { xs: 3, md: 2 },\\n                'Model Binding in ',\\n                _react2.default.createElement(\\n                    'a',\\n                    { href: 'https://github.com/DarthFubuMVC/fubucore' },\\n                    'FubuCore'\\n                ),\\n                ' is generally done by invoking the ',\\n                _react2.default.createElement(\\n                    'code',\\n                    null,\\n                    'IObjectResolver'\\n                ),\\n                ' service.  Model binding in FubuMVC can be heavily customized and extended by plugging in additional implementations of these finer-grained services to handle types, handle properties, and converting values in new ways:',\\n                _react2.default.createElement('br', null),\\n                _react2.default.createElement(\\n                    'ol',\\n                    null,\\n                    _react2.default.createElement(\\n                        'li',\\n                        null,\\n                        _react2.default.createElement(\\n                            'b',\\n                            null,\\n                            'IModelBinder:  '\\n                        ),\\n                        'The most coarse-grained level of customization.  An ',\\n                        _react2.default.createElement(\\n                            'code',\\n                            null,\\n                            'IModelBinder'\\n                        ),\\n                        ' implementation \\\"knows\\\" how to create an object from the request data.  Most types will be handled by the StandardModelBinder that just calls a public constructor and delegates to ',\\n                        _react2.default.createElement(\\n                            'code',\\n                            null,\\n                            'IPropertyBinder'\\n                        ),\\n                        ' services for each public setter.'\\n                    ),\\n                    _react2.default.createElement(\\n                        'li',\\n                        null,\\n                        _react2.default.createElement(\\n                            'b',\\n                            null,\\n                            'IPropertyBinder:  '\\n                        ),\\n                        'A model binding policy that can handle the model binding to one property at a time.  Most properties will be handled by the ',\\n                        _react2.default.createElement(\\n                            'code',\\n                            null,\\n                            'ConversionPropertyBinder'\\n                        ),\\n                        ' that just finds the raw data from the request that matches the property name, converts or coerces the raw data to the property type, and sets the property value accordingly.  You might use custom ',\\n                        _react2.default.createElement(\\n                            'code',\\n                            null,\\n                            'IPropertyBinder'\\n                        ),\\n                        ' services for information that isn\\\\'t available in the http request.'\\n                    ),\\n                    _react2.default.createElement(\\n                        'li',\\n                        null,\\n                        _react2.default.createElement(\\n                            'b',\\n                            null,\\n                            'IConversionFamily:  '\\n                        ),\\n                        'A fine grained service that \\\"knows\\\" how to coerce (or find) a raw string value into a requested type.'\\n                    )\\n                ),\\n                _react2.default.createElement(\\n                    'p',\\n                    null,\\n                    'These services can be directly plugged in via your application\\\\'s IoC container or through the ',\\n                    _react2.default.createElement(\\n                        'code',\\n                        null,\\n                        'FubuRegisty.Model.******'\\n                    ),\\n                    ' methods in your FubuRegistry class.  Do keep in mind that ordering is important.  If two or more model binders / property binders / converter families could handle a scenario, the first one will always be used.'\\n                )\\n            ),\\n            _react2.default.createElement(\\n                _reactBootstrap.Col,\\n                { xs: 9, md: 9 },\\n                _react2.default.createElement(Description, this.state.description)\\n            )\\n        );\\n    }\\n});\\n\\nmodule.exports = ModelBinding;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/model-binding.jsx\\n// module id = 262\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/model-binding.jsx?\");\n\n/***/ },\n/* 263 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/index.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\nexports.utils = exports.Well = exports.Tooltip = exports.Thumbnail = exports.Tabs = exports.TabPane = exports.Table = exports.TabContent = exports.TabContainer = exports.Tab = exports.SplitButton = exports.SafeAnchor = exports.Row = exports.ResponsiveEmbed = exports.Radio = exports.ProgressBar = exports.Popover = exports.PanelGroup = exports.Panel = exports.Pagination = exports.Pager = exports.PageItem = exports.PageHeader = exports.OverlayTrigger = exports.Overlay = exports.NavItem = exports.NavDropdown = exports.NavbarBrand = exports.Navbar = exports.Nav = exports.ModalTitle = exports.ModalHeader = exports.ModalFooter = exports.ModalBody = exports.Modal = exports.MenuItem = exports.Media = exports.ListGroupItem = exports.ListGroup = exports.Label = exports.Jumbotron = exports.InputGroup = exports.Image = exports.HelpBlock = exports.Grid = exports.Glyphicon = exports.FormGroup = exports.FormControl = exports.Form = exports.Fade = exports.DropdownButton = exports.Dropdown = exports.Collapse = exports.Col = exports.ControlLabel = exports.Clearfix = exports.Checkbox = exports.CarouselItem = exports.Carousel = exports.ButtonToolbar = exports.ButtonGroup = exports.Button = exports.BreadcrumbItem = exports.Breadcrumb = exports.Badge = exports.Alert = exports.Accordion = undefined;\\n\\nvar _Accordion2 = __webpack_require__(/*! ./Accordion */ 264);\\n\\nvar _Accordion3 = _interopRequireDefault(_Accordion2);\\n\\nvar _Alert2 = __webpack_require__(/*! ./Alert */ 359);\\n\\nvar _Alert3 = _interopRequireDefault(_Alert2);\\n\\nvar _Badge2 = __webpack_require__(/*! ./Badge */ 363);\\n\\nvar _Badge3 = _interopRequireDefault(_Badge2);\\n\\nvar _Breadcrumb2 = __webpack_require__(/*! ./Breadcrumb */ 364);\\n\\nvar _Breadcrumb3 = _interopRequireDefault(_Breadcrumb2);\\n\\nvar _BreadcrumbItem2 = __webpack_require__(/*! ./BreadcrumbItem */ 365);\\n\\nvar _BreadcrumbItem3 = _interopRequireDefault(_BreadcrumbItem2);\\n\\nvar _Button2 = __webpack_require__(/*! ./Button */ 369);\\n\\nvar _Button3 = _interopRequireDefault(_Button2);\\n\\nvar _ButtonGroup2 = __webpack_require__(/*! ./ButtonGroup */ 370);\\n\\nvar _ButtonGroup3 = _interopRequireDefault(_ButtonGroup2);\\n\\nvar _ButtonToolbar2 = __webpack_require__(/*! ./ButtonToolbar */ 372);\\n\\nvar _ButtonToolbar3 = _interopRequireDefault(_ButtonToolbar2);\\n\\nvar _Carousel2 = __webpack_require__(/*! ./Carousel */ 373);\\n\\nvar _Carousel3 = _interopRequireDefault(_Carousel2);\\n\\nvar _CarouselItem2 = __webpack_require__(/*! ./CarouselItem */ 375);\\n\\nvar _CarouselItem3 = _interopRequireDefault(_CarouselItem2);\\n\\nvar _Checkbox2 = __webpack_require__(/*! ./Checkbox */ 378);\\n\\nvar _Checkbox3 = _interopRequireDefault(_Checkbox2);\\n\\nvar _Clearfix2 = __webpack_require__(/*! ./Clearfix */ 379);\\n\\nvar _Clearfix3 = _interopRequireDefault(_Clearfix2);\\n\\nvar _ControlLabel2 = __webpack_require__(/*! ./ControlLabel */ 381);\\n\\nvar _ControlLabel3 = _interopRequireDefault(_ControlLabel2);\\n\\nvar _Col2 = __webpack_require__(/*! ./Col */ 382);\\n\\nvar _Col3 = _interopRequireDefault(_Col2);\\n\\nvar _Collapse2 = __webpack_require__(/*! ./Collapse */ 383);\\n\\nvar _Collapse3 = _interopRequireDefault(_Collapse2);\\n\\nvar _Dropdown2 = __webpack_require__(/*! ./Dropdown */ 396);\\n\\nvar _Dropdown3 = _interopRequireDefault(_Dropdown2);\\n\\nvar _DropdownButton2 = __webpack_require__(/*! ./DropdownButton */ 421);\\n\\nvar _DropdownButton3 = _interopRequireDefault(_DropdownButton2);\\n\\nvar _Fade2 = __webpack_require__(/*! ./Fade */ 423);\\n\\nvar _Fade3 = _interopRequireDefault(_Fade2);\\n\\nvar _Form2 = __webpack_require__(/*! ./Form */ 424);\\n\\nvar _Form3 = _interopRequireDefault(_Form2);\\n\\nvar _FormControl2 = __webpack_require__(/*! ./FormControl */ 425);\\n\\nvar _FormControl3 = _interopRequireDefault(_FormControl2);\\n\\nvar _FormGroup2 = __webpack_require__(/*! ./FormGroup */ 428);\\n\\nvar _FormGroup3 = _interopRequireDefault(_FormGroup2);\\n\\nvar _Glyphicon2 = __webpack_require__(/*! ./Glyphicon */ 377);\\n\\nvar _Glyphicon3 = _interopRequireDefault(_Glyphicon2);\\n\\nvar _Grid2 = __webpack_require__(/*! ./Grid */ 429);\\n\\nvar _Grid3 = _interopRequireDefault(_Grid2);\\n\\nvar _HelpBlock2 = __webpack_require__(/*! ./HelpBlock */ 430);\\n\\nvar _HelpBlock3 = _interopRequireDefault(_HelpBlock2);\\n\\nvar _Image2 = __webpack_require__(/*! ./Image */ 431);\\n\\nvar _Image3 = _interopRequireDefault(_Image2);\\n\\nvar _InputGroup2 = __webpack_require__(/*! ./InputGroup */ 432);\\n\\nvar _InputGroup3 = _interopRequireDefault(_InputGroup2);\\n\\nvar _Jumbotron2 = __webpack_require__(/*! ./Jumbotron */ 435);\\n\\nvar _Jumbotron3 = _interopRequireDefault(_Jumbotron2);\\n\\nvar _Label2 = __webpack_require__(/*! ./Label */ 436);\\n\\nvar _Label3 = _interopRequireDefault(_Label2);\\n\\nvar _ListGroup2 = __webpack_require__(/*! ./ListGroup */ 437);\\n\\nvar _ListGroup3 = _interopRequireDefault(_ListGroup2);\\n\\nvar _ListGroupItem2 = __webpack_require__(/*! ./ListGroupItem */ 438);\\n\\nvar _ListGroupItem3 = _interopRequireDefault(_ListGroupItem2);\\n\\nvar _Media2 = __webpack_require__(/*! ./Media */ 439);\\n\\nvar _Media3 = _interopRequireDefault(_Media2);\\n\\nvar _MenuItem2 = __webpack_require__(/*! ./MenuItem */ 446);\\n\\nvar _MenuItem3 = _interopRequireDefault(_MenuItem2);\\n\\nvar _Modal2 = __webpack_require__(/*! ./Modal */ 447);\\n\\nvar _Modal3 = _interopRequireDefault(_Modal2);\\n\\nvar _ModalBody2 = __webpack_require__(/*! ./ModalBody */ 465);\\n\\nvar _ModalBody3 = _interopRequireDefault(_ModalBody2);\\n\\nvar _ModalFooter2 = __webpack_require__(/*! ./ModalFooter */ 467);\\n\\nvar _ModalFooter3 = _interopRequireDefault(_ModalFooter2);\\n\\nvar _ModalHeader2 = __webpack_require__(/*! ./ModalHeader */ 468);\\n\\nvar _ModalHeader3 = _interopRequireDefault(_ModalHeader2);\\n\\nvar _ModalTitle2 = __webpack_require__(/*! ./ModalTitle */ 469);\\n\\nvar _ModalTitle3 = _interopRequireDefault(_ModalTitle2);\\n\\nvar _Nav2 = __webpack_require__(/*! ./Nav */ 470);\\n\\nvar _Nav3 = _interopRequireDefault(_Nav2);\\n\\nvar _Navbar2 = __webpack_require__(/*! ./Navbar */ 471);\\n\\nvar _Navbar3 = _interopRequireDefault(_Navbar2);\\n\\nvar _NavbarBrand2 = __webpack_require__(/*! ./NavbarBrand */ 472);\\n\\nvar _NavbarBrand3 = _interopRequireDefault(_NavbarBrand2);\\n\\nvar _NavDropdown2 = __webpack_require__(/*! ./NavDropdown */ 476);\\n\\nvar _NavDropdown3 = _interopRequireDefault(_NavDropdown2);\\n\\nvar _NavItem2 = __webpack_require__(/*! ./NavItem */ 477);\\n\\nvar _NavItem3 = _interopRequireDefault(_NavItem2);\\n\\nvar _Overlay2 = __webpack_require__(/*! ./Overlay */ 478);\\n\\nvar _Overlay3 = _interopRequireDefault(_Overlay2);\\n\\nvar _OverlayTrigger2 = __webpack_require__(/*! ./OverlayTrigger */ 487);\\n\\nvar _OverlayTrigger3 = _interopRequireDefault(_OverlayTrigger2);\\n\\nvar _PageHeader2 = __webpack_require__(/*! ./PageHeader */ 488);\\n\\nvar _PageHeader3 = _interopRequireDefault(_PageHeader2);\\n\\nvar _PageItem2 = __webpack_require__(/*! ./PageItem */ 489);\\n\\nvar _PageItem3 = _interopRequireDefault(_PageItem2);\\n\\nvar _Pager2 = __webpack_require__(/*! ./Pager */ 492);\\n\\nvar _Pager3 = _interopRequireDefault(_Pager2);\\n\\nvar _Pagination2 = __webpack_require__(/*! ./Pagination */ 493);\\n\\nvar _Pagination3 = _interopRequireDefault(_Pagination2);\\n\\nvar _Panel2 = __webpack_require__(/*! ./Panel */ 495);\\n\\nvar _Panel3 = _interopRequireDefault(_Panel2);\\n\\nvar _PanelGroup2 = __webpack_require__(/*! ./PanelGroup */ 348);\\n\\nvar _PanelGroup3 = _interopRequireDefault(_PanelGroup2);\\n\\nvar _Popover2 = __webpack_require__(/*! ./Popover */ 496);\\n\\nvar _Popover3 = _interopRequireDefault(_Popover2);\\n\\nvar _ProgressBar2 = __webpack_require__(/*! ./ProgressBar */ 497);\\n\\nvar _ProgressBar3 = _interopRequireDefault(_ProgressBar2);\\n\\nvar _Radio2 = __webpack_require__(/*! ./Radio */ 498);\\n\\nvar _Radio3 = _interopRequireDefault(_Radio2);\\n\\nvar _ResponsiveEmbed2 = __webpack_require__(/*! ./ResponsiveEmbed */ 499);\\n\\nvar _ResponsiveEmbed3 = _interopRequireDefault(_ResponsiveEmbed2);\\n\\nvar _Row2 = __webpack_require__(/*! ./Row */ 500);\\n\\nvar _Row3 = _interopRequireDefault(_Row2);\\n\\nvar _SafeAnchor2 = __webpack_require__(/*! ./SafeAnchor */ 366);\\n\\nvar _SafeAnchor3 = _interopRequireDefault(_SafeAnchor2);\\n\\nvar _SplitButton2 = __webpack_require__(/*! ./SplitButton */ 501);\\n\\nvar _SplitButton3 = _interopRequireDefault(_SplitButton2);\\n\\nvar _Tab2 = __webpack_require__(/*! ./Tab */ 503);\\n\\nvar _Tab3 = _interopRequireDefault(_Tab2);\\n\\nvar _TabContainer2 = __webpack_require__(/*! ./TabContainer */ 504);\\n\\nvar _TabContainer3 = _interopRequireDefault(_TabContainer2);\\n\\nvar _TabContent2 = __webpack_require__(/*! ./TabContent */ 505);\\n\\nvar _TabContent3 = _interopRequireDefault(_TabContent2);\\n\\nvar _Table2 = __webpack_require__(/*! ./Table */ 507);\\n\\nvar _Table3 = _interopRequireDefault(_Table2);\\n\\nvar _TabPane2 = __webpack_require__(/*! ./TabPane */ 506);\\n\\nvar _TabPane3 = _interopRequireDefault(_TabPane2);\\n\\nvar _Tabs2 = __webpack_require__(/*! ./Tabs */ 508);\\n\\nvar _Tabs3 = _interopRequireDefault(_Tabs2);\\n\\nvar _Thumbnail2 = __webpack_require__(/*! ./Thumbnail */ 509);\\n\\nvar _Thumbnail3 = _interopRequireDefault(_Thumbnail2);\\n\\nvar _Tooltip2 = __webpack_require__(/*! ./Tooltip */ 510);\\n\\nvar _Tooltip3 = _interopRequireDefault(_Tooltip2);\\n\\nvar _Well2 = __webpack_require__(/*! ./Well */ 511);\\n\\nvar _Well3 = _interopRequireDefault(_Well2);\\n\\nvar _utils2 = __webpack_require__(/*! ./utils */ 512);\\n\\nvar _utils = _interopRequireWildcard(_utils2);\\n\\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nexports.Accordion = _Accordion3['default'];\\nexports.Alert = _Alert3['default'];\\nexports.Badge = _Badge3['default'];\\nexports.Breadcrumb = _Breadcrumb3['default'];\\nexports.BreadcrumbItem = _BreadcrumbItem3['default'];\\nexports.Button = _Button3['default'];\\nexports.ButtonGroup = _ButtonGroup3['default'];\\nexports.ButtonToolbar = _ButtonToolbar3['default'];\\nexports.Carousel = _Carousel3['default'];\\nexports.CarouselItem = _CarouselItem3['default'];\\nexports.Checkbox = _Checkbox3['default'];\\nexports.Clearfix = _Clearfix3['default'];\\nexports.ControlLabel = _ControlLabel3['default'];\\nexports.Col = _Col3['default'];\\nexports.Collapse = _Collapse3['default'];\\nexports.Dropdown = _Dropdown3['default'];\\nexports.DropdownButton = _DropdownButton3['default'];\\nexports.Fade = _Fade3['default'];\\nexports.Form = _Form3['default'];\\nexports.FormControl = _FormControl3['default'];\\nexports.FormGroup = _FormGroup3['default'];\\nexports.Glyphicon = _Glyphicon3['default'];\\nexports.Grid = _Grid3['default'];\\nexports.HelpBlock = _HelpBlock3['default'];\\nexports.Image = _Image3['default'];\\nexports.InputGroup = _InputGroup3['default'];\\nexports.Jumbotron = _Jumbotron3['default'];\\nexports.Label = _Label3['default'];\\nexports.ListGroup = _ListGroup3['default'];\\nexports.ListGroupItem = _ListGroupItem3['default'];\\nexports.Media = _Media3['default'];\\nexports.MenuItem = _MenuItem3['default'];\\nexports.Modal = _Modal3['default'];\\nexports.ModalBody = _ModalBody3['default'];\\nexports.ModalFooter = _ModalFooter3['default'];\\nexports.ModalHeader = _ModalHeader3['default'];\\nexports.ModalTitle = _ModalTitle3['default'];\\nexports.Nav = _Nav3['default'];\\nexports.Navbar = _Navbar3['default'];\\nexports.NavbarBrand = _NavbarBrand3['default'];\\nexports.NavDropdown = _NavDropdown3['default'];\\nexports.NavItem = _NavItem3['default'];\\nexports.Overlay = _Overlay3['default'];\\nexports.OverlayTrigger = _OverlayTrigger3['default'];\\nexports.PageHeader = _PageHeader3['default'];\\nexports.PageItem = _PageItem3['default'];\\nexports.Pager = _Pager3['default'];\\nexports.Pagination = _Pagination3['default'];\\nexports.Panel = _Panel3['default'];\\nexports.PanelGroup = _PanelGroup3['default'];\\nexports.Popover = _Popover3['default'];\\nexports.ProgressBar = _ProgressBar3['default'];\\nexports.Radio = _Radio3['default'];\\nexports.ResponsiveEmbed = _ResponsiveEmbed3['default'];\\nexports.Row = _Row3['default'];\\nexports.SafeAnchor = _SafeAnchor3['default'];\\nexports.SplitButton = _SplitButton3['default'];\\nexports.Tab = _Tab3['default'];\\nexports.TabContainer = _TabContainer3['default'];\\nexports.TabContent = _TabContent3['default'];\\nexports.Table = _Table3['default'];\\nexports.TabPane = _TabPane3['default'];\\nexports.Tabs = _Tabs3['default'];\\nexports.Thumbnail = _Thumbnail3['default'];\\nexports.Tooltip = _Tooltip3['default'];\\nexports.Well = _Well3['default'];\\nexports.utils = _utils;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/index.js\\n// module id = 263\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/index.js?\");\n\n/***/ },\n/* 264 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/Accordion.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _PanelGroup = __webpack_require__(/*! ./PanelGroup */ 348);\\n\\nvar _PanelGroup2 = _interopRequireDefault(_PanelGroup);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar Accordion = function (_React$Component) {\\n  (0, _inherits3['default'])(Accordion, _React$Component);\\n\\n  function Accordion() {\\n    (0, _classCallCheck3['default'])(this, Accordion);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Accordion.prototype.render = function render() {\\n    return _react2['default'].createElement(\\n      _PanelGroup2['default'],\\n      (0, _extends3['default'])({}, this.props, { accordion: true }),\\n      this.props.children\\n    );\\n  };\\n\\n  return Accordion;\\n}(_react2['default'].Component);\\n\\nexports['default'] = Accordion;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Accordion.js\\n// module id = 264\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Accordion.js?\");\n\n/***/ },\n/* 265 */\n/*!********************************************!*\\\n  !*** ./~/babel-runtime/helpers/extends.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"\\\"use strict\\\";\\n\\nexports.__esModule = true;\\n\\nvar _assign = __webpack_require__(/*! ../core-js/object/assign */ 266);\\n\\nvar _assign2 = _interopRequireDefault(_assign);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nexports.default = _assign2.default || function (target) {\\n  for (var i = 1; i < arguments.length; i++) {\\n    var source = arguments[i];\\n\\n    for (var key in source) {\\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\\n        target[key] = source[key];\\n      }\\n    }\\n  }\\n\\n  return target;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/babel-runtime/helpers/extends.js\\n// module id = 265\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/babel-runtime/helpers/extends.js?\");\n\n/***/ },\n/* 266 */\n/*!**************************************************!*\\\n  !*** ./~/babel-runtime/core-js/object/assign.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"module.exports = { \\\"default\\\": __webpack_require__(/*! core-js/library/fn/object/assign */ 267), __esModule: true };\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/babel-runtime/core-js/object/assign.js\\n// module id = 266\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/babel-runtime/core-js/object/assign.js?\");\n\n/***/ },\n/* 267 */\n/*!***********************************************!*\\\n  !*** ./~/core-js/library/fn/object/assign.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"__webpack_require__(/*! ../../modules/es6.object.assign */ 268);\\nmodule.exports = __webpack_require__(/*! ../../modules/_core */ 271).Object.assign;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/fn/object/assign.js\\n// module id = 267\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/fn/object/assign.js?\");\n\n/***/ },\n/* 268 */\n/*!********************************************************!*\\\n  !*** ./~/core-js/library/modules/es6.object.assign.js ***!\n  \\********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// 19.1.3.1 Object.assign(target, source)\\nvar $export = __webpack_require__(/*! ./_export */ 269);\\n\\n$export($export.S + $export.F, 'Object', {assign: __webpack_require__(/*! ./_object-assign */ 284)});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/es6.object.assign.js\\n// module id = 268\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/es6.object.assign.js?\");\n\n/***/ },\n/* 269 */\n/*!**********************************************!*\\\n  !*** ./~/core-js/library/modules/_export.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var global    = __webpack_require__(/*! ./_global */ 270)\\n  , core      = __webpack_require__(/*! ./_core */ 271)\\n  , ctx       = __webpack_require__(/*! ./_ctx */ 272)\\n  , hide      = __webpack_require__(/*! ./_hide */ 274)\\n  , PROTOTYPE = 'prototype';\\n\\nvar $export = function(type, name, source){\\n  var IS_FORCED = type & $export.F\\n    , IS_GLOBAL = type & $export.G\\n    , IS_STATIC = type & $export.S\\n    , IS_PROTO  = type & $export.P\\n    , IS_BIND   = type & $export.B\\n    , IS_WRAP   = type & $export.W\\n    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})\\n    , expProto  = exports[PROTOTYPE]\\n    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\\n    , key, own, out;\\n  if(IS_GLOBAL)source = name;\\n  for(key in source){\\n    // contains in native\\n    own = !IS_FORCED && target && target[key] !== undefined;\\n    if(own && key in exports)continue;\\n    // export native or passed\\n    out = own ? target[key] : source[key];\\n    // prevent global pollution for namespaces\\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\\n    // bind timers to global for call from export context\\n    : IS_BIND && own ? ctx(out, global)\\n    // wrap global constructors for prevent change them in library\\n    : IS_WRAP && target[key] == out ? (function(C){\\n      var F = function(a, b, c){\\n        if(this instanceof C){\\n          switch(arguments.length){\\n            case 0: return new C;\\n            case 1: return new C(a);\\n            case 2: return new C(a, b);\\n          } return new C(a, b, c);\\n        } return C.apply(this, arguments);\\n      };\\n      F[PROTOTYPE] = C[PROTOTYPE];\\n      return F;\\n    // make static versions for prototype methods\\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\\n    if(IS_PROTO){\\n      (exports.virtual || (exports.virtual = {}))[key] = out;\\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\\n      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);\\n    }\\n  }\\n};\\n// type bitmap\\n$export.F = 1;   // forced\\n$export.G = 2;   // global\\n$export.S = 4;   // static\\n$export.P = 8;   // proto\\n$export.B = 16;  // bind\\n$export.W = 32;  // wrap\\n$export.U = 64;  // safe\\n$export.R = 128; // real proto method for `library` \\nmodule.exports = $export;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_export.js\\n// module id = 269\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_export.js?\");\n\n/***/ },\n/* 270 */\n/*!**********************************************!*\\\n  !*** ./~/core-js/library/modules/_global.js ***!\n  \\**********************************************/\n/***/ function(module, exports) {\n\n\teval(\"// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\\n  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_global.js\\n// module id = 270\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_global.js?\");\n\n/***/ },\n/* 271 */\n/*!********************************************!*\\\n  !*** ./~/core-js/library/modules/_core.js ***!\n  \\********************************************/\n/***/ function(module, exports) {\n\n\teval(\"var core = module.exports = {version: '2.4.0'};\\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_core.js\\n// module id = 271\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_core.js?\");\n\n/***/ },\n/* 272 */\n/*!*******************************************!*\\\n  !*** ./~/core-js/library/modules/_ctx.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// optional / simple context binding\\nvar aFunction = __webpack_require__(/*! ./_a-function */ 273);\\nmodule.exports = function(fn, that, length){\\n  aFunction(fn);\\n  if(that === undefined)return fn;\\n  switch(length){\\n    case 1: return function(a){\\n      return fn.call(that, a);\\n    };\\n    case 2: return function(a, b){\\n      return fn.call(that, a, b);\\n    };\\n    case 3: return function(a, b, c){\\n      return fn.call(that, a, b, c);\\n    };\\n  }\\n  return function(/* ...args */){\\n    return fn.apply(that, arguments);\\n  };\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_ctx.js\\n// module id = 272\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_ctx.js?\");\n\n/***/ },\n/* 273 */\n/*!**************************************************!*\\\n  !*** ./~/core-js/library/modules/_a-function.js ***!\n  \\**************************************************/\n/***/ function(module, exports) {\n\n\teval(\"module.exports = function(it){\\n  if(typeof it != 'function')throw TypeError(it + ' is not a function!');\\n  return it;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_a-function.js\\n// module id = 273\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_a-function.js?\");\n\n/***/ },\n/* 274 */\n/*!********************************************!*\\\n  !*** ./~/core-js/library/modules/_hide.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var dP         = __webpack_require__(/*! ./_object-dp */ 275)\\n  , createDesc = __webpack_require__(/*! ./_property-desc */ 283);\\nmodule.exports = __webpack_require__(/*! ./_descriptors */ 279) ? function(object, key, value){\\n  return dP.f(object, key, createDesc(1, value));\\n} : function(object, key, value){\\n  object[key] = value;\\n  return object;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_hide.js\\n// module id = 274\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_hide.js?\");\n\n/***/ },\n/* 275 */\n/*!*************************************************!*\\\n  !*** ./~/core-js/library/modules/_object-dp.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var anObject       = __webpack_require__(/*! ./_an-object */ 276)\\n  , IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ 278)\\n  , toPrimitive    = __webpack_require__(/*! ./_to-primitive */ 282)\\n  , dP             = Object.defineProperty;\\n\\nexports.f = __webpack_require__(/*! ./_descriptors */ 279) ? Object.defineProperty : function defineProperty(O, P, Attributes){\\n  anObject(O);\\n  P = toPrimitive(P, true);\\n  anObject(Attributes);\\n  if(IE8_DOM_DEFINE)try {\\n    return dP(O, P, Attributes);\\n  } catch(e){ /* empty */ }\\n  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\\n  if('value' in Attributes)O[P] = Attributes.value;\\n  return O;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_object-dp.js\\n// module id = 275\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_object-dp.js?\");\n\n/***/ },\n/* 276 */\n/*!*************************************************!*\\\n  !*** ./~/core-js/library/modules/_an-object.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var isObject = __webpack_require__(/*! ./_is-object */ 277);\\nmodule.exports = function(it){\\n  if(!isObject(it))throw TypeError(it + ' is not an object!');\\n  return it;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_an-object.js\\n// module id = 276\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_an-object.js?\");\n\n/***/ },\n/* 277 */\n/*!*************************************************!*\\\n  !*** ./~/core-js/library/modules/_is-object.js ***!\n  \\*************************************************/\n/***/ function(module, exports) {\n\n\teval(\"module.exports = function(it){\\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_is-object.js\\n// module id = 277\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_is-object.js?\");\n\n/***/ },\n/* 278 */\n/*!******************************************************!*\\\n  !*** ./~/core-js/library/modules/_ie8-dom-define.js ***!\n  \\******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"module.exports = !__webpack_require__(/*! ./_descriptors */ 279) && !__webpack_require__(/*! ./_fails */ 280)(function(){\\n  return Object.defineProperty(__webpack_require__(/*! ./_dom-create */ 281)('div'), 'a', {get: function(){ return 7; }}).a != 7;\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_ie8-dom-define.js\\n// module id = 278\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_ie8-dom-define.js?\");\n\n/***/ },\n/* 279 */\n/*!***************************************************!*\\\n  !*** ./~/core-js/library/modules/_descriptors.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// Thank's IE8 for his funny defineProperty\\nmodule.exports = !__webpack_require__(/*! ./_fails */ 280)(function(){\\n  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_descriptors.js\\n// module id = 279\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_descriptors.js?\");\n\n/***/ },\n/* 280 */\n/*!*********************************************!*\\\n  !*** ./~/core-js/library/modules/_fails.js ***!\n  \\*********************************************/\n/***/ function(module, exports) {\n\n\teval(\"module.exports = function(exec){\\n  try {\\n    return !!exec();\\n  } catch(e){\\n    return true;\\n  }\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_fails.js\\n// module id = 280\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_fails.js?\");\n\n/***/ },\n/* 281 */\n/*!**************************************************!*\\\n  !*** ./~/core-js/library/modules/_dom-create.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var isObject = __webpack_require__(/*! ./_is-object */ 277)\\n  , document = __webpack_require__(/*! ./_global */ 270).document\\n  // in old IE typeof document.createElement is 'object'\\n  , is = isObject(document) && isObject(document.createElement);\\nmodule.exports = function(it){\\n  return is ? document.createElement(it) : {};\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_dom-create.js\\n// module id = 281\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_dom-create.js?\");\n\n/***/ },\n/* 282 */\n/*!****************************************************!*\\\n  !*** ./~/core-js/library/modules/_to-primitive.js ***!\n  \\****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// 7.1.1 ToPrimitive(input [, PreferredType])\\nvar isObject = __webpack_require__(/*! ./_is-object */ 277);\\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\\n// and the second argument - flag - preferred type is a string\\nmodule.exports = function(it, S){\\n  if(!isObject(it))return it;\\n  var fn, val;\\n  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\\n  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\\n  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\\n  throw TypeError(\\\"Can't convert object to primitive value\\\");\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_to-primitive.js\\n// module id = 282\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_to-primitive.js?\");\n\n/***/ },\n/* 283 */\n/*!*****************************************************!*\\\n  !*** ./~/core-js/library/modules/_property-desc.js ***!\n  \\*****************************************************/\n/***/ function(module, exports) {\n\n\teval(\"module.exports = function(bitmap, value){\\n  return {\\n    enumerable  : !(bitmap & 1),\\n    configurable: !(bitmap & 2),\\n    writable    : !(bitmap & 4),\\n    value       : value\\n  };\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_property-desc.js\\n// module id = 283\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_property-desc.js?\");\n\n/***/ },\n/* 284 */\n/*!*****************************************************!*\\\n  !*** ./~/core-js/library/modules/_object-assign.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n// 19.1.2.1 Object.assign(target, source, ...)\\nvar getKeys  = __webpack_require__(/*! ./_object-keys */ 285)\\n  , gOPS     = __webpack_require__(/*! ./_object-gops */ 300)\\n  , pIE      = __webpack_require__(/*! ./_object-pie */ 301)\\n  , toObject = __webpack_require__(/*! ./_to-object */ 302)\\n  , IObject  = __webpack_require__(/*! ./_iobject */ 289)\\n  , $assign  = Object.assign;\\n\\n// should work with symbols and should have deterministic property order (V8 bug)\\nmodule.exports = !$assign || __webpack_require__(/*! ./_fails */ 280)(function(){\\n  var A = {}\\n    , B = {}\\n    , S = Symbol()\\n    , K = 'abcdefghijklmnopqrst';\\n  A[S] = 7;\\n  K.split('').forEach(function(k){ B[k] = k; });\\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\\n}) ? function assign(target, source){ // eslint-disable-line no-unused-vars\\n  var T     = toObject(target)\\n    , aLen  = arguments.length\\n    , index = 1\\n    , getSymbols = gOPS.f\\n    , isEnum     = pIE.f;\\n  while(aLen > index){\\n    var S      = IObject(arguments[index++])\\n      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)\\n      , length = keys.length\\n      , j      = 0\\n      , key;\\n    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];\\n  } return T;\\n} : $assign;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_object-assign.js\\n// module id = 284\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_object-assign.js?\");\n\n/***/ },\n/* 285 */\n/*!***************************************************!*\\\n  !*** ./~/core-js/library/modules/_object-keys.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// 19.1.2.14 / 15.2.3.14 Object.keys(O)\\nvar $keys       = __webpack_require__(/*! ./_object-keys-internal */ 286)\\n  , enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ 299);\\n\\nmodule.exports = Object.keys || function keys(O){\\n  return $keys(O, enumBugKeys);\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_object-keys.js\\n// module id = 285\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_object-keys.js?\");\n\n/***/ },\n/* 286 */\n/*!************************************************************!*\\\n  !*** ./~/core-js/library/modules/_object-keys-internal.js ***!\n  \\************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var has          = __webpack_require__(/*! ./_has */ 287)\\n  , toIObject    = __webpack_require__(/*! ./_to-iobject */ 288)\\n  , arrayIndexOf = __webpack_require__(/*! ./_array-includes */ 292)(false)\\n  , IE_PROTO     = __webpack_require__(/*! ./_shared-key */ 296)('IE_PROTO');\\n\\nmodule.exports = function(object, names){\\n  var O      = toIObject(object)\\n    , i      = 0\\n    , result = []\\n    , key;\\n  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\\n  // Don't enum bug & hidden keys\\n  while(names.length > i)if(has(O, key = names[i++])){\\n    ~arrayIndexOf(result, key) || result.push(key);\\n  }\\n  return result;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_object-keys-internal.js\\n// module id = 286\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_object-keys-internal.js?\");\n\n/***/ },\n/* 287 */\n/*!*******************************************!*\\\n  !*** ./~/core-js/library/modules/_has.js ***!\n  \\*******************************************/\n/***/ function(module, exports) {\n\n\teval(\"var hasOwnProperty = {}.hasOwnProperty;\\nmodule.exports = function(it, key){\\n  return hasOwnProperty.call(it, key);\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_has.js\\n// module id = 287\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_has.js?\");\n\n/***/ },\n/* 288 */\n/*!**************************************************!*\\\n  !*** ./~/core-js/library/modules/_to-iobject.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// to indexed object, toObject with fallback for non-array-like ES3 strings\\nvar IObject = __webpack_require__(/*! ./_iobject */ 289)\\n  , defined = __webpack_require__(/*! ./_defined */ 291);\\nmodule.exports = function(it){\\n  return IObject(defined(it));\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_to-iobject.js\\n// module id = 288\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_to-iobject.js?\");\n\n/***/ },\n/* 289 */\n/*!***********************************************!*\\\n  !*** ./~/core-js/library/modules/_iobject.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// fallback for non-array-like ES3 and non-enumerable old V8 strings\\nvar cof = __webpack_require__(/*! ./_cof */ 290);\\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\\n  return cof(it) == 'String' ? it.split('') : Object(it);\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_iobject.js\\n// module id = 289\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_iobject.js?\");\n\n/***/ },\n/* 290 */\n/*!*******************************************!*\\\n  !*** ./~/core-js/library/modules/_cof.js ***!\n  \\*******************************************/\n/***/ function(module, exports) {\n\n\teval(\"var toString = {}.toString;\\n\\nmodule.exports = function(it){\\n  return toString.call(it).slice(8, -1);\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_cof.js\\n// module id = 290\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_cof.js?\");\n\n/***/ },\n/* 291 */\n/*!***********************************************!*\\\n  !*** ./~/core-js/library/modules/_defined.js ***!\n  \\***********************************************/\n/***/ function(module, exports) {\n\n\teval(\"// 7.2.1 RequireObjectCoercible(argument)\\nmodule.exports = function(it){\\n  if(it == undefined)throw TypeError(\\\"Can't call method on  \\\" + it);\\n  return it;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_defined.js\\n// module id = 291\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_defined.js?\");\n\n/***/ },\n/* 292 */\n/*!******************************************************!*\\\n  !*** ./~/core-js/library/modules/_array-includes.js ***!\n  \\******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// false -> Array#indexOf\\n// true  -> Array#includes\\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ 288)\\n  , toLength  = __webpack_require__(/*! ./_to-length */ 293)\\n  , toIndex   = __webpack_require__(/*! ./_to-index */ 295);\\nmodule.exports = function(IS_INCLUDES){\\n  return function($this, el, fromIndex){\\n    var O      = toIObject($this)\\n      , length = toLength(O.length)\\n      , index  = toIndex(fromIndex, length)\\n      , value;\\n    // Array#includes uses SameValueZero equality algorithm\\n    if(IS_INCLUDES && el != el)while(length > index){\\n      value = O[index++];\\n      if(value != value)return true;\\n    // Array#toIndex ignores holes, Array#includes - not\\n    } else for(;length > index; index++)if(IS_INCLUDES || index in O){\\n      if(O[index] === el)return IS_INCLUDES || index || 0;\\n    } return !IS_INCLUDES && -1;\\n  };\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_array-includes.js\\n// module id = 292\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_array-includes.js?\");\n\n/***/ },\n/* 293 */\n/*!*************************************************!*\\\n  !*** ./~/core-js/library/modules/_to-length.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// 7.1.15 ToLength\\nvar toInteger = __webpack_require__(/*! ./_to-integer */ 294)\\n  , min       = Math.min;\\nmodule.exports = function(it){\\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_to-length.js\\n// module id = 293\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_to-length.js?\");\n\n/***/ },\n/* 294 */\n/*!**************************************************!*\\\n  !*** ./~/core-js/library/modules/_to-integer.js ***!\n  \\**************************************************/\n/***/ function(module, exports) {\n\n\teval(\"// 7.1.4 ToInteger\\nvar ceil  = Math.ceil\\n  , floor = Math.floor;\\nmodule.exports = function(it){\\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_to-integer.js\\n// module id = 294\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_to-integer.js?\");\n\n/***/ },\n/* 295 */\n/*!************************************************!*\\\n  !*** ./~/core-js/library/modules/_to-index.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var toInteger = __webpack_require__(/*! ./_to-integer */ 294)\\n  , max       = Math.max\\n  , min       = Math.min;\\nmodule.exports = function(index, length){\\n  index = toInteger(index);\\n  return index < 0 ? max(index + length, 0) : min(index, length);\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_to-index.js\\n// module id = 295\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_to-index.js?\");\n\n/***/ },\n/* 296 */\n/*!**************************************************!*\\\n  !*** ./~/core-js/library/modules/_shared-key.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var shared = __webpack_require__(/*! ./_shared */ 297)('keys')\\n  , uid    = __webpack_require__(/*! ./_uid */ 298);\\nmodule.exports = function(key){\\n  return shared[key] || (shared[key] = uid(key));\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_shared-key.js\\n// module id = 296\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_shared-key.js?\");\n\n/***/ },\n/* 297 */\n/*!**********************************************!*\\\n  !*** ./~/core-js/library/modules/_shared.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var global = __webpack_require__(/*! ./_global */ 270)\\n  , SHARED = '__core-js_shared__'\\n  , store  = global[SHARED] || (global[SHARED] = {});\\nmodule.exports = function(key){\\n  return store[key] || (store[key] = {});\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_shared.js\\n// module id = 297\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_shared.js?\");\n\n/***/ },\n/* 298 */\n/*!*******************************************!*\\\n  !*** ./~/core-js/library/modules/_uid.js ***!\n  \\*******************************************/\n/***/ function(module, exports) {\n\n\teval(\"var id = 0\\n  , px = Math.random();\\nmodule.exports = function(key){\\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_uid.js\\n// module id = 298\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_uid.js?\");\n\n/***/ },\n/* 299 */\n/*!*****************************************************!*\\\n  !*** ./~/core-js/library/modules/_enum-bug-keys.js ***!\n  \\*****************************************************/\n/***/ function(module, exports) {\n\n\teval(\"// IE 8- don't enum bug keys\\nmodule.exports = (\\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\\n).split(',');\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_enum-bug-keys.js\\n// module id = 299\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_enum-bug-keys.js?\");\n\n/***/ },\n/* 300 */\n/*!***************************************************!*\\\n  !*** ./~/core-js/library/modules/_object-gops.js ***!\n  \\***************************************************/\n/***/ function(module, exports) {\n\n\teval(\"exports.f = Object.getOwnPropertySymbols;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_object-gops.js\\n// module id = 300\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_object-gops.js?\");\n\n/***/ },\n/* 301 */\n/*!**************************************************!*\\\n  !*** ./~/core-js/library/modules/_object-pie.js ***!\n  \\**************************************************/\n/***/ function(module, exports) {\n\n\teval(\"exports.f = {}.propertyIsEnumerable;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_object-pie.js\\n// module id = 301\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_object-pie.js?\");\n\n/***/ },\n/* 302 */\n/*!*************************************************!*\\\n  !*** ./~/core-js/library/modules/_to-object.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// 7.1.13 ToObject(argument)\\nvar defined = __webpack_require__(/*! ./_defined */ 291);\\nmodule.exports = function(it){\\n  return Object(defined(it));\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_to-object.js\\n// module id = 302\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_to-object.js?\");\n\n/***/ },\n/* 303 */\n/*!***************************************************!*\\\n  !*** ./~/babel-runtime/helpers/classCallCheck.js ***!\n  \\***************************************************/\n/***/ function(module, exports) {\n\n\teval(\"\\\"use strict\\\";\\n\\nexports.__esModule = true;\\n\\nexports.default = function (instance, Constructor) {\\n  if (!(instance instanceof Constructor)) {\\n    throw new TypeError(\\\"Cannot call a class as a function\\\");\\n  }\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/babel-runtime/helpers/classCallCheck.js\\n// module id = 303\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/babel-runtime/helpers/classCallCheck.js?\");\n\n/***/ },\n/* 304 */\n/*!**************************************************************!*\\\n  !*** ./~/babel-runtime/helpers/possibleConstructorReturn.js ***!\n  \\**************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"\\\"use strict\\\";\\n\\nexports.__esModule = true;\\n\\nvar _typeof2 = __webpack_require__(/*! ../helpers/typeof */ 305);\\n\\nvar _typeof3 = _interopRequireDefault(_typeof2);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nexports.default = function (self, call) {\\n  if (!self) {\\n    throw new ReferenceError(\\\"this hasn't been initialised - super() hasn't been called\\\");\\n  }\\n\\n  return call && ((typeof call === \\\"undefined\\\" ? \\\"undefined\\\" : (0, _typeof3.default)(call)) === \\\"object\\\" || typeof call === \\\"function\\\") ? call : self;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/babel-runtime/helpers/possibleConstructorReturn.js\\n// module id = 304\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/babel-runtime/helpers/possibleConstructorReturn.js?\");\n\n/***/ },\n/* 305 */\n/*!*******************************************!*\\\n  !*** ./~/babel-runtime/helpers/typeof.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"\\\"use strict\\\";\\n\\nexports.__esModule = true;\\n\\nvar _iterator = __webpack_require__(/*! ../core-js/symbol/iterator */ 306);\\n\\nvar _iterator2 = _interopRequireDefault(_iterator);\\n\\nvar _symbol = __webpack_require__(/*! ../core-js/symbol */ 326);\\n\\nvar _symbol2 = _interopRequireDefault(_symbol);\\n\\nvar _typeof = typeof _symbol2.default === \\\"function\\\" && typeof _iterator2.default === \\\"symbol\\\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \\\"function\\\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \\\"symbol\\\" : typeof obj; };\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nexports.default = typeof _symbol2.default === \\\"function\\\" && _typeof(_iterator2.default) === \\\"symbol\\\" ? function (obj) {\\n  return typeof obj === \\\"undefined\\\" ? \\\"undefined\\\" : _typeof(obj);\\n} : function (obj) {\\n  return obj && typeof _symbol2.default === \\\"function\\\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \\\"symbol\\\" : typeof obj === \\\"undefined\\\" ? \\\"undefined\\\" : _typeof(obj);\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/babel-runtime/helpers/typeof.js\\n// module id = 305\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/babel-runtime/helpers/typeof.js?\");\n\n/***/ },\n/* 306 */\n/*!****************************************************!*\\\n  !*** ./~/babel-runtime/core-js/symbol/iterator.js ***!\n  \\****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"module.exports = { \\\"default\\\": __webpack_require__(/*! core-js/library/fn/symbol/iterator */ 307), __esModule: true };\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/babel-runtime/core-js/symbol/iterator.js\\n// module id = 306\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/babel-runtime/core-js/symbol/iterator.js?\");\n\n/***/ },\n/* 307 */\n/*!*************************************************!*\\\n  !*** ./~/core-js/library/fn/symbol/iterator.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"__webpack_require__(/*! ../../modules/es6.string.iterator */ 308);\\n__webpack_require__(/*! ../../modules/web.dom.iterable */ 321);\\nmodule.exports = __webpack_require__(/*! ../../modules/_wks-ext */ 325).f('iterator');\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/fn/symbol/iterator.js\\n// module id = 307\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/fn/symbol/iterator.js?\");\n\n/***/ },\n/* 308 */\n/*!**********************************************************!*\\\n  !*** ./~/core-js/library/modules/es6.string.iterator.js ***!\n  \\**********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\nvar $at  = __webpack_require__(/*! ./_string-at */ 309)(true);\\n\\n// 21.1.3.27 String.prototype[@@iterator]()\\n__webpack_require__(/*! ./_iter-define */ 310)(String, 'String', function(iterated){\\n  this._t = String(iterated); // target\\n  this._i = 0;                // next index\\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\\n}, function(){\\n  var O     = this._t\\n    , index = this._i\\n    , point;\\n  if(index >= O.length)return {value: undefined, done: true};\\n  point = $at(O, index);\\n  this._i += point.length;\\n  return {value: point, done: false};\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/es6.string.iterator.js\\n// module id = 308\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/es6.string.iterator.js?\");\n\n/***/ },\n/* 309 */\n/*!*************************************************!*\\\n  !*** ./~/core-js/library/modules/_string-at.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var toInteger = __webpack_require__(/*! ./_to-integer */ 294)\\n  , defined   = __webpack_require__(/*! ./_defined */ 291);\\n// true  -> String#at\\n// false -> String#codePointAt\\nmodule.exports = function(TO_STRING){\\n  return function(that, pos){\\n    var s = String(defined(that))\\n      , i = toInteger(pos)\\n      , l = s.length\\n      , a, b;\\n    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\\n    a = s.charCodeAt(i);\\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\\n      ? TO_STRING ? s.charAt(i) : a\\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\\n  };\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_string-at.js\\n// module id = 309\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_string-at.js?\");\n\n/***/ },\n/* 310 */\n/*!***************************************************!*\\\n  !*** ./~/core-js/library/modules/_iter-define.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\nvar LIBRARY        = __webpack_require__(/*! ./_library */ 311)\\n  , $export        = __webpack_require__(/*! ./_export */ 269)\\n  , redefine       = __webpack_require__(/*! ./_redefine */ 312)\\n  , hide           = __webpack_require__(/*! ./_hide */ 274)\\n  , has            = __webpack_require__(/*! ./_has */ 287)\\n  , Iterators      = __webpack_require__(/*! ./_iterators */ 313)\\n  , $iterCreate    = __webpack_require__(/*! ./_iter-create */ 314)\\n  , setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ 318)\\n  , getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ 320)\\n  , ITERATOR       = __webpack_require__(/*! ./_wks */ 319)('iterator')\\n  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\\n  , FF_ITERATOR    = '@@iterator'\\n  , KEYS           = 'keys'\\n  , VALUES         = 'values';\\n\\nvar returnThis = function(){ return this; };\\n\\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\\n  $iterCreate(Constructor, NAME, next);\\n  var getMethod = function(kind){\\n    if(!BUGGY && kind in proto)return proto[kind];\\n    switch(kind){\\n      case KEYS: return function keys(){ return new Constructor(this, kind); };\\n      case VALUES: return function values(){ return new Constructor(this, kind); };\\n    } return function entries(){ return new Constructor(this, kind); };\\n  };\\n  var TAG        = NAME + ' Iterator'\\n    , DEF_VALUES = DEFAULT == VALUES\\n    , VALUES_BUG = false\\n    , proto      = Base.prototype\\n    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\\n    , $default   = $native || getMethod(DEFAULT)\\n    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\\n    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\\n    , methods, key, IteratorPrototype;\\n  // Fix native\\n  if($anyNative){\\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\\n    if(IteratorPrototype !== Object.prototype){\\n      // Set @@toStringTag to native iterators\\n      setToStringTag(IteratorPrototype, TAG, true);\\n      // fix for some old engines\\n      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\\n    }\\n  }\\n  // fix Array#{values, @@iterator}.name in V8 / FF\\n  if(DEF_VALUES && $native && $native.name !== VALUES){\\n    VALUES_BUG = true;\\n    $default = function values(){ return $native.call(this); };\\n  }\\n  // Define iterator\\n  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\\n    hide(proto, ITERATOR, $default);\\n  }\\n  // Plug for library\\n  Iterators[NAME] = $default;\\n  Iterators[TAG]  = returnThis;\\n  if(DEFAULT){\\n    methods = {\\n      values:  DEF_VALUES ? $default : getMethod(VALUES),\\n      keys:    IS_SET     ? $default : getMethod(KEYS),\\n      entries: $entries\\n    };\\n    if(FORCED)for(key in methods){\\n      if(!(key in proto))redefine(proto, key, methods[key]);\\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\\n  }\\n  return methods;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_iter-define.js\\n// module id = 310\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_iter-define.js?\");\n\n/***/ },\n/* 311 */\n/*!***********************************************!*\\\n  !*** ./~/core-js/library/modules/_library.js ***!\n  \\***********************************************/\n/***/ function(module, exports) {\n\n\teval(\"module.exports = true;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_library.js\\n// module id = 311\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_library.js?\");\n\n/***/ },\n/* 312 */\n/*!************************************************!*\\\n  !*** ./~/core-js/library/modules/_redefine.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"module.exports = __webpack_require__(/*! ./_hide */ 274);\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_redefine.js\\n// module id = 312\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_redefine.js?\");\n\n/***/ },\n/* 313 */\n/*!*************************************************!*\\\n  !*** ./~/core-js/library/modules/_iterators.js ***!\n  \\*************************************************/\n/***/ function(module, exports) {\n\n\teval(\"module.exports = {};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_iterators.js\\n// module id = 313\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_iterators.js?\");\n\n/***/ },\n/* 314 */\n/*!***************************************************!*\\\n  !*** ./~/core-js/library/modules/_iter-create.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\nvar create         = __webpack_require__(/*! ./_object-create */ 315)\\n  , descriptor     = __webpack_require__(/*! ./_property-desc */ 283)\\n  , setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ 318)\\n  , IteratorPrototype = {};\\n\\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\\n__webpack_require__(/*! ./_hide */ 274)(IteratorPrototype, __webpack_require__(/*! ./_wks */ 319)('iterator'), function(){ return this; });\\n\\nmodule.exports = function(Constructor, NAME, next){\\n  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\\n  setToStringTag(Constructor, NAME + ' Iterator');\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_iter-create.js\\n// module id = 314\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_iter-create.js?\");\n\n/***/ },\n/* 315 */\n/*!*****************************************************!*\\\n  !*** ./~/core-js/library/modules/_object-create.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\\nvar anObject    = __webpack_require__(/*! ./_an-object */ 276)\\n  , dPs         = __webpack_require__(/*! ./_object-dps */ 316)\\n  , enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ 299)\\n  , IE_PROTO    = __webpack_require__(/*! ./_shared-key */ 296)('IE_PROTO')\\n  , Empty       = function(){ /* empty */ }\\n  , PROTOTYPE   = 'prototype';\\n\\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\\nvar createDict = function(){\\n  // Thrash, waste and sodomy: IE GC bug\\n  var iframe = __webpack_require__(/*! ./_dom-create */ 281)('iframe')\\n    , i      = enumBugKeys.length\\n    , lt     = '<'\\n    , gt     = '>'\\n    , iframeDocument;\\n  iframe.style.display = 'none';\\n  __webpack_require__(/*! ./_html */ 317).appendChild(iframe);\\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\\n  // createDict = iframe.contentWindow.Object;\\n  // html.removeChild(iframe);\\n  iframeDocument = iframe.contentWindow.document;\\n  iframeDocument.open();\\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\\n  iframeDocument.close();\\n  createDict = iframeDocument.F;\\n  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\\n  return createDict();\\n};\\n\\nmodule.exports = Object.create || function create(O, Properties){\\n  var result;\\n  if(O !== null){\\n    Empty[PROTOTYPE] = anObject(O);\\n    result = new Empty;\\n    Empty[PROTOTYPE] = null;\\n    // add \\\"__proto__\\\" for Object.getPrototypeOf polyfill\\n    result[IE_PROTO] = O;\\n  } else result = createDict();\\n  return Properties === undefined ? result : dPs(result, Properties);\\n};\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_object-create.js\\n// module id = 315\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_object-create.js?\");\n\n/***/ },\n/* 316 */\n/*!**************************************************!*\\\n  !*** ./~/core-js/library/modules/_object-dps.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var dP       = __webpack_require__(/*! ./_object-dp */ 275)\\n  , anObject = __webpack_require__(/*! ./_an-object */ 276)\\n  , getKeys  = __webpack_require__(/*! ./_object-keys */ 285);\\n\\nmodule.exports = __webpack_require__(/*! ./_descriptors */ 279) ? Object.defineProperties : function defineProperties(O, Properties){\\n  anObject(O);\\n  var keys   = getKeys(Properties)\\n    , length = keys.length\\n    , i = 0\\n    , P;\\n  while(length > i)dP.f(O, P = keys[i++], Properties[P]);\\n  return O;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_object-dps.js\\n// module id = 316\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_object-dps.js?\");\n\n/***/ },\n/* 317 */\n/*!********************************************!*\\\n  !*** ./~/core-js/library/modules/_html.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"module.exports = __webpack_require__(/*! ./_global */ 270).document && document.documentElement;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_html.js\\n// module id = 317\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_html.js?\");\n\n/***/ },\n/* 318 */\n/*!*********************************************************!*\\\n  !*** ./~/core-js/library/modules/_set-to-string-tag.js ***!\n  \\*********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var def = __webpack_require__(/*! ./_object-dp */ 275).f\\n  , has = __webpack_require__(/*! ./_has */ 287)\\n  , TAG = __webpack_require__(/*! ./_wks */ 319)('toStringTag');\\n\\nmodule.exports = function(it, tag, stat){\\n  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_set-to-string-tag.js\\n// module id = 318\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_set-to-string-tag.js?\");\n\n/***/ },\n/* 319 */\n/*!*******************************************!*\\\n  !*** ./~/core-js/library/modules/_wks.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var store      = __webpack_require__(/*! ./_shared */ 297)('wks')\\n  , uid        = __webpack_require__(/*! ./_uid */ 298)\\n  , Symbol     = __webpack_require__(/*! ./_global */ 270).Symbol\\n  , USE_SYMBOL = typeof Symbol == 'function';\\n\\nvar $exports = module.exports = function(name){\\n  return store[name] || (store[name] =\\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\\n};\\n\\n$exports.store = store;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_wks.js\\n// module id = 319\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_wks.js?\");\n\n/***/ },\n/* 320 */\n/*!**************************************************!*\\\n  !*** ./~/core-js/library/modules/_object-gpo.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\\nvar has         = __webpack_require__(/*! ./_has */ 287)\\n  , toObject    = __webpack_require__(/*! ./_to-object */ 302)\\n  , IE_PROTO    = __webpack_require__(/*! ./_shared-key */ 296)('IE_PROTO')\\n  , ObjectProto = Object.prototype;\\n\\nmodule.exports = Object.getPrototypeOf || function(O){\\n  O = toObject(O);\\n  if(has(O, IE_PROTO))return O[IE_PROTO];\\n  if(typeof O.constructor == 'function' && O instanceof O.constructor){\\n    return O.constructor.prototype;\\n  } return O instanceof Object ? ObjectProto : null;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_object-gpo.js\\n// module id = 320\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_object-gpo.js?\");\n\n/***/ },\n/* 321 */\n/*!*******************************************************!*\\\n  !*** ./~/core-js/library/modules/web.dom.iterable.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"__webpack_require__(/*! ./es6.array.iterator */ 322);\\nvar global        = __webpack_require__(/*! ./_global */ 270)\\n  , hide          = __webpack_require__(/*! ./_hide */ 274)\\n  , Iterators     = __webpack_require__(/*! ./_iterators */ 313)\\n  , TO_STRING_TAG = __webpack_require__(/*! ./_wks */ 319)('toStringTag');\\n\\nfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\\n  var NAME       = collections[i]\\n    , Collection = global[NAME]\\n    , proto      = Collection && Collection.prototype;\\n  if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\\n  Iterators[NAME] = Iterators.Array;\\n}\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/web.dom.iterable.js\\n// module id = 321\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/web.dom.iterable.js?\");\n\n/***/ },\n/* 322 */\n/*!*********************************************************!*\\\n  !*** ./~/core-js/library/modules/es6.array.iterator.js ***!\n  \\*********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\nvar addToUnscopables = __webpack_require__(/*! ./_add-to-unscopables */ 323)\\n  , step             = __webpack_require__(/*! ./_iter-step */ 324)\\n  , Iterators        = __webpack_require__(/*! ./_iterators */ 313)\\n  , toIObject        = __webpack_require__(/*! ./_to-iobject */ 288);\\n\\n// 22.1.3.4 Array.prototype.entries()\\n// 22.1.3.13 Array.prototype.keys()\\n// 22.1.3.29 Array.prototype.values()\\n// 22.1.3.30 Array.prototype[@@iterator]()\\nmodule.exports = __webpack_require__(/*! ./_iter-define */ 310)(Array, 'Array', function(iterated, kind){\\n  this._t = toIObject(iterated); // target\\n  this._i = 0;                   // next index\\n  this._k = kind;                // kind\\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\\n}, function(){\\n  var O     = this._t\\n    , kind  = this._k\\n    , index = this._i++;\\n  if(!O || index >= O.length){\\n    this._t = undefined;\\n    return step(1);\\n  }\\n  if(kind == 'keys'  )return step(0, index);\\n  if(kind == 'values')return step(0, O[index]);\\n  return step(0, [index, O[index]]);\\n}, 'values');\\n\\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\\nIterators.Arguments = Iterators.Array;\\n\\naddToUnscopables('keys');\\naddToUnscopables('values');\\naddToUnscopables('entries');\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/es6.array.iterator.js\\n// module id = 322\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/es6.array.iterator.js?\");\n\n/***/ },\n/* 323 */\n/*!**********************************************************!*\\\n  !*** ./~/core-js/library/modules/_add-to-unscopables.js ***!\n  \\**********************************************************/\n/***/ function(module, exports) {\n\n\teval(\"module.exports = function(){ /* empty */ };\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_add-to-unscopables.js\\n// module id = 323\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_add-to-unscopables.js?\");\n\n/***/ },\n/* 324 */\n/*!*************************************************!*\\\n  !*** ./~/core-js/library/modules/_iter-step.js ***!\n  \\*************************************************/\n/***/ function(module, exports) {\n\n\teval(\"module.exports = function(done, value){\\n  return {value: value, done: !!done};\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_iter-step.js\\n// module id = 324\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_iter-step.js?\");\n\n/***/ },\n/* 325 */\n/*!***********************************************!*\\\n  !*** ./~/core-js/library/modules/_wks-ext.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"exports.f = __webpack_require__(/*! ./_wks */ 319);\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_wks-ext.js\\n// module id = 325\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_wks-ext.js?\");\n\n/***/ },\n/* 326 */\n/*!*******************************************!*\\\n  !*** ./~/babel-runtime/core-js/symbol.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"module.exports = { \\\"default\\\": __webpack_require__(/*! core-js/library/fn/symbol */ 327), __esModule: true };\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/babel-runtime/core-js/symbol.js\\n// module id = 326\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/babel-runtime/core-js/symbol.js?\");\n\n/***/ },\n/* 327 */\n/*!**********************************************!*\\\n  !*** ./~/core-js/library/fn/symbol/index.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"__webpack_require__(/*! ../../modules/es6.symbol */ 328);\\n__webpack_require__(/*! ../../modules/es6.object.to-string */ 337);\\n__webpack_require__(/*! ../../modules/es7.symbol.async-iterator */ 338);\\n__webpack_require__(/*! ../../modules/es7.symbol.observable */ 339);\\nmodule.exports = __webpack_require__(/*! ../../modules/_core */ 271).Symbol;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/fn/symbol/index.js\\n// module id = 327\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/fn/symbol/index.js?\");\n\n/***/ },\n/* 328 */\n/*!*************************************************!*\\\n  !*** ./~/core-js/library/modules/es6.symbol.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n// ECMAScript 6 symbols shim\\nvar global         = __webpack_require__(/*! ./_global */ 270)\\n  , has            = __webpack_require__(/*! ./_has */ 287)\\n  , DESCRIPTORS    = __webpack_require__(/*! ./_descriptors */ 279)\\n  , $export        = __webpack_require__(/*! ./_export */ 269)\\n  , redefine       = __webpack_require__(/*! ./_redefine */ 312)\\n  , META           = __webpack_require__(/*! ./_meta */ 329).KEY\\n  , $fails         = __webpack_require__(/*! ./_fails */ 280)\\n  , shared         = __webpack_require__(/*! ./_shared */ 297)\\n  , setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ 318)\\n  , uid            = __webpack_require__(/*! ./_uid */ 298)\\n  , wks            = __webpack_require__(/*! ./_wks */ 319)\\n  , wksExt         = __webpack_require__(/*! ./_wks-ext */ 325)\\n  , wksDefine      = __webpack_require__(/*! ./_wks-define */ 330)\\n  , keyOf          = __webpack_require__(/*! ./_keyof */ 331)\\n  , enumKeys       = __webpack_require__(/*! ./_enum-keys */ 332)\\n  , isArray        = __webpack_require__(/*! ./_is-array */ 333)\\n  , anObject       = __webpack_require__(/*! ./_an-object */ 276)\\n  , toIObject      = __webpack_require__(/*! ./_to-iobject */ 288)\\n  , toPrimitive    = __webpack_require__(/*! ./_to-primitive */ 282)\\n  , createDesc     = __webpack_require__(/*! ./_property-desc */ 283)\\n  , _create        = __webpack_require__(/*! ./_object-create */ 315)\\n  , gOPNExt        = __webpack_require__(/*! ./_object-gopn-ext */ 334)\\n  , $GOPD          = __webpack_require__(/*! ./_object-gopd */ 336)\\n  , $DP            = __webpack_require__(/*! ./_object-dp */ 275)\\n  , $keys          = __webpack_require__(/*! ./_object-keys */ 285)\\n  , gOPD           = $GOPD.f\\n  , dP             = $DP.f\\n  , gOPN           = gOPNExt.f\\n  , $Symbol        = global.Symbol\\n  , $JSON          = global.JSON\\n  , _stringify     = $JSON && $JSON.stringify\\n  , PROTOTYPE      = 'prototype'\\n  , HIDDEN         = wks('_hidden')\\n  , TO_PRIMITIVE   = wks('toPrimitive')\\n  , isEnum         = {}.propertyIsEnumerable\\n  , SymbolRegistry = shared('symbol-registry')\\n  , AllSymbols     = shared('symbols')\\n  , OPSymbols      = shared('op-symbols')\\n  , ObjectProto    = Object[PROTOTYPE]\\n  , USE_NATIVE     = typeof $Symbol == 'function'\\n  , QObject        = global.QObject;\\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\\n\\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\\nvar setSymbolDesc = DESCRIPTORS && $fails(function(){\\n  return _create(dP({}, 'a', {\\n    get: function(){ return dP(this, 'a', {value: 7}).a; }\\n  })).a != 7;\\n}) ? function(it, key, D){\\n  var protoDesc = gOPD(ObjectProto, key);\\n  if(protoDesc)delete ObjectProto[key];\\n  dP(it, key, D);\\n  if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);\\n} : dP;\\n\\nvar wrap = function(tag){\\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\\n  sym._k = tag;\\n  return sym;\\n};\\n\\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){\\n  return typeof it == 'symbol';\\n} : function(it){\\n  return it instanceof $Symbol;\\n};\\n\\nvar $defineProperty = function defineProperty(it, key, D){\\n  if(it === ObjectProto)$defineProperty(OPSymbols, key, D);\\n  anObject(it);\\n  key = toPrimitive(key, true);\\n  anObject(D);\\n  if(has(AllSymbols, key)){\\n    if(!D.enumerable){\\n      if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));\\n      it[HIDDEN][key] = true;\\n    } else {\\n      if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;\\n      D = _create(D, {enumerable: createDesc(0, false)});\\n    } return setSymbolDesc(it, key, D);\\n  } return dP(it, key, D);\\n};\\nvar $defineProperties = function defineProperties(it, P){\\n  anObject(it);\\n  var keys = enumKeys(P = toIObject(P))\\n    , i    = 0\\n    , l = keys.length\\n    , key;\\n  while(l > i)$defineProperty(it, key = keys[i++], P[key]);\\n  return it;\\n};\\nvar $create = function create(it, P){\\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\\n};\\nvar $propertyIsEnumerable = function propertyIsEnumerable(key){\\n  var E = isEnum.call(this, key = toPrimitive(key, true));\\n  if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;\\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\\n};\\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){\\n  it  = toIObject(it);\\n  key = toPrimitive(key, true);\\n  if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;\\n  var D = gOPD(it, key);\\n  if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;\\n  return D;\\n};\\nvar $getOwnPropertyNames = function getOwnPropertyNames(it){\\n  var names  = gOPN(toIObject(it))\\n    , result = []\\n    , i      = 0\\n    , key;\\n  while(names.length > i){\\n    if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);\\n  } return result;\\n};\\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it){\\n  var IS_OP  = it === ObjectProto\\n    , names  = gOPN(IS_OP ? OPSymbols : toIObject(it))\\n    , result = []\\n    , i      = 0\\n    , key;\\n  while(names.length > i){\\n    if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);\\n  } return result;\\n};\\n\\n// 19.4.1.1 Symbol([description])\\nif(!USE_NATIVE){\\n  $Symbol = function Symbol(){\\n    if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');\\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\\n    var $set = function(value){\\n      if(this === ObjectProto)$set.call(OPSymbols, value);\\n      if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;\\n      setSymbolDesc(this, tag, createDesc(1, value));\\n    };\\n    if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});\\n    return wrap(tag);\\n  };\\n  redefine($Symbol[PROTOTYPE], 'toString', function toString(){\\n    return this._k;\\n  });\\n\\n  $GOPD.f = $getOwnPropertyDescriptor;\\n  $DP.f   = $defineProperty;\\n  __webpack_require__(/*! ./_object-gopn */ 335).f = gOPNExt.f = $getOwnPropertyNames;\\n  __webpack_require__(/*! ./_object-pie */ 301).f  = $propertyIsEnumerable;\\n  __webpack_require__(/*! ./_object-gops */ 300).f = $getOwnPropertySymbols;\\n\\n  if(DESCRIPTORS && !__webpack_require__(/*! ./_library */ 311)){\\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\\n  }\\n\\n  wksExt.f = function(name){\\n    return wrap(wks(name));\\n  }\\n}\\n\\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});\\n\\nfor(var symbols = (\\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\\n).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);\\n\\nfor(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);\\n\\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\\n  // 19.4.2.1 Symbol.for(key)\\n  'for': function(key){\\n    return has(SymbolRegistry, key += '')\\n      ? SymbolRegistry[key]\\n      : SymbolRegistry[key] = $Symbol(key);\\n  },\\n  // 19.4.2.5 Symbol.keyFor(sym)\\n  keyFor: function keyFor(key){\\n    if(isSymbol(key))return keyOf(SymbolRegistry, key);\\n    throw TypeError(key + ' is not a symbol!');\\n  },\\n  useSetter: function(){ setter = true; },\\n  useSimple: function(){ setter = false; }\\n});\\n\\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\\n  // 19.1.2.2 Object.create(O [, Properties])\\n  create: $create,\\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\\n  defineProperty: $defineProperty,\\n  // 19.1.2.3 Object.defineProperties(O, Properties)\\n  defineProperties: $defineProperties,\\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\\n  getOwnPropertyNames: $getOwnPropertyNames,\\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\\n  getOwnPropertySymbols: $getOwnPropertySymbols\\n});\\n\\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){\\n  var S = $Symbol();\\n  // MS Edge converts symbol values to JSON as {}\\n  // WebKit converts symbol values to JSON as null\\n  // V8 throws on boxed symbols\\n  return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';\\n})), 'JSON', {\\n  stringify: function stringify(it){\\n    if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined\\n    var args = [it]\\n      , i    = 1\\n      , replacer, $replacer;\\n    while(arguments.length > i)args.push(arguments[i++]);\\n    replacer = args[1];\\n    if(typeof replacer == 'function')$replacer = replacer;\\n    if($replacer || !isArray(replacer))replacer = function(key, value){\\n      if($replacer)value = $replacer.call(this, key, value);\\n      if(!isSymbol(value))return value;\\n    };\\n    args[1] = replacer;\\n    return _stringify.apply($JSON, args);\\n  }\\n});\\n\\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(/*! ./_hide */ 274)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\\nsetToStringTag($Symbol, 'Symbol');\\n// 20.2.1.9 Math[@@toStringTag]\\nsetToStringTag(Math, 'Math', true);\\n// 24.3.3 JSON[@@toStringTag]\\nsetToStringTag(global.JSON, 'JSON', true);\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/es6.symbol.js\\n// module id = 328\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/es6.symbol.js?\");\n\n/***/ },\n/* 329 */\n/*!********************************************!*\\\n  !*** ./~/core-js/library/modules/_meta.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var META     = __webpack_require__(/*! ./_uid */ 298)('meta')\\n  , isObject = __webpack_require__(/*! ./_is-object */ 277)\\n  , has      = __webpack_require__(/*! ./_has */ 287)\\n  , setDesc  = __webpack_require__(/*! ./_object-dp */ 275).f\\n  , id       = 0;\\nvar isExtensible = Object.isExtensible || function(){\\n  return true;\\n};\\nvar FREEZE = !__webpack_require__(/*! ./_fails */ 280)(function(){\\n  return isExtensible(Object.preventExtensions({}));\\n});\\nvar setMeta = function(it){\\n  setDesc(it, META, {value: {\\n    i: 'O' + ++id, // object ID\\n    w: {}          // weak collections IDs\\n  }});\\n};\\nvar fastKey = function(it, create){\\n  // return primitive with prefix\\n  if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\\n  if(!has(it, META)){\\n    // can't set metadata to uncaught frozen object\\n    if(!isExtensible(it))return 'F';\\n    // not necessary to add metadata\\n    if(!create)return 'E';\\n    // add missing metadata\\n    setMeta(it);\\n  // return object ID\\n  } return it[META].i;\\n};\\nvar getWeak = function(it, create){\\n  if(!has(it, META)){\\n    // can't set metadata to uncaught frozen object\\n    if(!isExtensible(it))return true;\\n    // not necessary to add metadata\\n    if(!create)return false;\\n    // add missing metadata\\n    setMeta(it);\\n  // return hash weak collections IDs\\n  } return it[META].w;\\n};\\n// add metadata on freeze-family methods calling\\nvar onFreeze = function(it){\\n  if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);\\n  return it;\\n};\\nvar meta = module.exports = {\\n  KEY:      META,\\n  NEED:     false,\\n  fastKey:  fastKey,\\n  getWeak:  getWeak,\\n  onFreeze: onFreeze\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_meta.js\\n// module id = 329\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_meta.js?\");\n\n/***/ },\n/* 330 */\n/*!**************************************************!*\\\n  !*** ./~/core-js/library/modules/_wks-define.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var global         = __webpack_require__(/*! ./_global */ 270)\\n  , core           = __webpack_require__(/*! ./_core */ 271)\\n  , LIBRARY        = __webpack_require__(/*! ./_library */ 311)\\n  , wksExt         = __webpack_require__(/*! ./_wks-ext */ 325)\\n  , defineProperty = __webpack_require__(/*! ./_object-dp */ 275).f;\\nmodule.exports = function(name){\\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\\n  if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)});\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_wks-define.js\\n// module id = 330\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_wks-define.js?\");\n\n/***/ },\n/* 331 */\n/*!*********************************************!*\\\n  !*** ./~/core-js/library/modules/_keyof.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var getKeys   = __webpack_require__(/*! ./_object-keys */ 285)\\n  , toIObject = __webpack_require__(/*! ./_to-iobject */ 288);\\nmodule.exports = function(object, el){\\n  var O      = toIObject(object)\\n    , keys   = getKeys(O)\\n    , length = keys.length\\n    , index  = 0\\n    , key;\\n  while(length > index)if(O[key = keys[index++]] === el)return key;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_keyof.js\\n// module id = 331\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_keyof.js?\");\n\n/***/ },\n/* 332 */\n/*!*************************************************!*\\\n  !*** ./~/core-js/library/modules/_enum-keys.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// all enumerable object keys, includes symbols\\nvar getKeys = __webpack_require__(/*! ./_object-keys */ 285)\\n  , gOPS    = __webpack_require__(/*! ./_object-gops */ 300)\\n  , pIE     = __webpack_require__(/*! ./_object-pie */ 301);\\nmodule.exports = function(it){\\n  var result     = getKeys(it)\\n    , getSymbols = gOPS.f;\\n  if(getSymbols){\\n    var symbols = getSymbols(it)\\n      , isEnum  = pIE.f\\n      , i       = 0\\n      , key;\\n    while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);\\n  } return result;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_enum-keys.js\\n// module id = 332\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_enum-keys.js?\");\n\n/***/ },\n/* 333 */\n/*!************************************************!*\\\n  !*** ./~/core-js/library/modules/_is-array.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// 7.2.2 IsArray(argument)\\nvar cof = __webpack_require__(/*! ./_cof */ 290);\\nmodule.exports = Array.isArray || function isArray(arg){\\n  return cof(arg) == 'Array';\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_is-array.js\\n// module id = 333\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_is-array.js?\");\n\n/***/ },\n/* 334 */\n/*!*******************************************************!*\\\n  !*** ./~/core-js/library/modules/_object-gopn-ext.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ 288)\\n  , gOPN      = __webpack_require__(/*! ./_object-gopn */ 335).f\\n  , toString  = {}.toString;\\n\\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\\n  ? Object.getOwnPropertyNames(window) : [];\\n\\nvar getWindowNames = function(it){\\n  try {\\n    return gOPN(it);\\n  } catch(e){\\n    return windowNames.slice();\\n  }\\n};\\n\\nmodule.exports.f = function getOwnPropertyNames(it){\\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\\n};\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_object-gopn-ext.js\\n// module id = 334\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_object-gopn-ext.js?\");\n\n/***/ },\n/* 335 */\n/*!***************************************************!*\\\n  !*** ./~/core-js/library/modules/_object-gopn.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\\nvar $keys      = __webpack_require__(/*! ./_object-keys-internal */ 286)\\n  , hiddenKeys = __webpack_require__(/*! ./_enum-bug-keys */ 299).concat('length', 'prototype');\\n\\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){\\n  return $keys(O, hiddenKeys);\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_object-gopn.js\\n// module id = 335\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_object-gopn.js?\");\n\n/***/ },\n/* 336 */\n/*!***************************************************!*\\\n  !*** ./~/core-js/library/modules/_object-gopd.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var pIE            = __webpack_require__(/*! ./_object-pie */ 301)\\n  , createDesc     = __webpack_require__(/*! ./_property-desc */ 283)\\n  , toIObject      = __webpack_require__(/*! ./_to-iobject */ 288)\\n  , toPrimitive    = __webpack_require__(/*! ./_to-primitive */ 282)\\n  , has            = __webpack_require__(/*! ./_has */ 287)\\n  , IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ 278)\\n  , gOPD           = Object.getOwnPropertyDescriptor;\\n\\nexports.f = __webpack_require__(/*! ./_descriptors */ 279) ? gOPD : function getOwnPropertyDescriptor(O, P){\\n  O = toIObject(O);\\n  P = toPrimitive(P, true);\\n  if(IE8_DOM_DEFINE)try {\\n    return gOPD(O, P);\\n  } catch(e){ /* empty */ }\\n  if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]);\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_object-gopd.js\\n// module id = 336\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_object-gopd.js?\");\n\n/***/ },\n/* 337 */\n/*!***********************************************************!*\\\n  !*** ./~/core-js/library/modules/es6.object.to-string.js ***!\n  \\***********************************************************/\n/***/ function(module, exports) {\n\n\teval(\"\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/es6.object.to-string.js\\n// module id = 337\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/es6.object.to-string.js?\");\n\n/***/ },\n/* 338 */\n/*!****************************************************************!*\\\n  !*** ./~/core-js/library/modules/es7.symbol.async-iterator.js ***!\n  \\****************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"__webpack_require__(/*! ./_wks-define */ 330)('asyncIterator');\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/es7.symbol.async-iterator.js\\n// module id = 338\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/es7.symbol.async-iterator.js?\");\n\n/***/ },\n/* 339 */\n/*!************************************************************!*\\\n  !*** ./~/core-js/library/modules/es7.symbol.observable.js ***!\n  \\************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"__webpack_require__(/*! ./_wks-define */ 330)('observable');\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/es7.symbol.observable.js\\n// module id = 339\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/es7.symbol.observable.js?\");\n\n/***/ },\n/* 340 */\n/*!*********************************************!*\\\n  !*** ./~/babel-runtime/helpers/inherits.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"\\\"use strict\\\";\\n\\nexports.__esModule = true;\\n\\nvar _setPrototypeOf = __webpack_require__(/*! ../core-js/object/set-prototype-of */ 341);\\n\\nvar _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);\\n\\nvar _create = __webpack_require__(/*! ../core-js/object/create */ 345);\\n\\nvar _create2 = _interopRequireDefault(_create);\\n\\nvar _typeof2 = __webpack_require__(/*! ../helpers/typeof */ 305);\\n\\nvar _typeof3 = _interopRequireDefault(_typeof2);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nexports.default = function (subClass, superClass) {\\n  if (typeof superClass !== \\\"function\\\" && superClass !== null) {\\n    throw new TypeError(\\\"Super expression must either be null or a function, not \\\" + (typeof superClass === \\\"undefined\\\" ? \\\"undefined\\\" : (0, _typeof3.default)(superClass)));\\n  }\\n\\n  subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {\\n    constructor: {\\n      value: subClass,\\n      enumerable: false,\\n      writable: true,\\n      configurable: true\\n    }\\n  });\\n  if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/babel-runtime/helpers/inherits.js\\n// module id = 340\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/babel-runtime/helpers/inherits.js?\");\n\n/***/ },\n/* 341 */\n/*!************************************************************!*\\\n  !*** ./~/babel-runtime/core-js/object/set-prototype-of.js ***!\n  \\************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"module.exports = { \\\"default\\\": __webpack_require__(/*! core-js/library/fn/object/set-prototype-of */ 342), __esModule: true };\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/babel-runtime/core-js/object/set-prototype-of.js\\n// module id = 341\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/babel-runtime/core-js/object/set-prototype-of.js?\");\n\n/***/ },\n/* 342 */\n/*!*********************************************************!*\\\n  !*** ./~/core-js/library/fn/object/set-prototype-of.js ***!\n  \\*********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"__webpack_require__(/*! ../../modules/es6.object.set-prototype-of */ 343);\\nmodule.exports = __webpack_require__(/*! ../../modules/_core */ 271).Object.setPrototypeOf;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/fn/object/set-prototype-of.js\\n// module id = 342\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/fn/object/set-prototype-of.js?\");\n\n/***/ },\n/* 343 */\n/*!******************************************************************!*\\\n  !*** ./~/core-js/library/modules/es6.object.set-prototype-of.js ***!\n  \\******************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// 19.1.3.19 Object.setPrototypeOf(O, proto)\\nvar $export = __webpack_require__(/*! ./_export */ 269);\\n$export($export.S, 'Object', {setPrototypeOf: __webpack_require__(/*! ./_set-proto */ 344).set});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/es6.object.set-prototype-of.js\\n// module id = 343\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/es6.object.set-prototype-of.js?\");\n\n/***/ },\n/* 344 */\n/*!*************************************************!*\\\n  !*** ./~/core-js/library/modules/_set-proto.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// Works with __proto__ only. Old v8 can't work with null proto objects.\\n/* eslint-disable no-proto */\\nvar isObject = __webpack_require__(/*! ./_is-object */ 277)\\n  , anObject = __webpack_require__(/*! ./_an-object */ 276);\\nvar check = function(O, proto){\\n  anObject(O);\\n  if(!isObject(proto) && proto !== null)throw TypeError(proto + \\\": can't set as prototype!\\\");\\n};\\nmodule.exports = {\\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\\n    function(test, buggy, set){\\n      try {\\n        set = __webpack_require__(/*! ./_ctx */ 272)(Function.call, __webpack_require__(/*! ./_object-gopd */ 336).f(Object.prototype, '__proto__').set, 2);\\n        set(test, []);\\n        buggy = !(test instanceof Array);\\n      } catch(e){ buggy = true; }\\n      return function setPrototypeOf(O, proto){\\n        check(O, proto);\\n        if(buggy)O.__proto__ = proto;\\n        else set(O, proto);\\n        return O;\\n      };\\n    }({}, false) : undefined),\\n  check: check\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_set-proto.js\\n// module id = 344\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_set-proto.js?\");\n\n/***/ },\n/* 345 */\n/*!**************************************************!*\\\n  !*** ./~/babel-runtime/core-js/object/create.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"module.exports = { \\\"default\\\": __webpack_require__(/*! core-js/library/fn/object/create */ 346), __esModule: true };\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/babel-runtime/core-js/object/create.js\\n// module id = 345\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/babel-runtime/core-js/object/create.js?\");\n\n/***/ },\n/* 346 */\n/*!***********************************************!*\\\n  !*** ./~/core-js/library/fn/object/create.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"__webpack_require__(/*! ../../modules/es6.object.create */ 347);\\nvar $Object = __webpack_require__(/*! ../../modules/_core */ 271).Object;\\nmodule.exports = function create(P, D){\\n  return $Object.create(P, D);\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/fn/object/create.js\\n// module id = 346\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/fn/object/create.js?\");\n\n/***/ },\n/* 347 */\n/*!********************************************************!*\\\n  !*** ./~/core-js/library/modules/es6.object.create.js ***!\n  \\********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var $export = __webpack_require__(/*! ./_export */ 269)\\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\\n$export($export.S, 'Object', {create: __webpack_require__(/*! ./_object-create */ 315)});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/es6.object.create.js\\n// module id = 347\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/es6.object.create.js?\");\n\n/***/ },\n/* 348 */\n/*!*********************************************!*\\\n  !*** ./~/react-bootstrap/lib/PanelGroup.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _assign = __webpack_require__(/*! babel-runtime/core-js/object/assign */ 266);\\n\\nvar _assign2 = _interopRequireDefault(_assign);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 357);\\n\\nvar _createChainedFunction2 = _interopRequireDefault(_createChainedFunction);\\n\\nvar _ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 358);\\n\\nvar _ValidComponentChildren2 = _interopRequireDefault(_ValidComponentChildren);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  accordion: _react2['default'].PropTypes.bool,\\n  activeKey: _react2['default'].PropTypes.any,\\n  defaultActiveKey: _react2['default'].PropTypes.any,\\n  onSelect: _react2['default'].PropTypes.func,\\n  role: _react2['default'].PropTypes.string\\n};\\n\\nvar defaultProps = {\\n  accordion: false\\n};\\n\\n// TODO: Use uncontrollable.\\n\\nvar PanelGroup = function (_React$Component) {\\n  (0, _inherits3['default'])(PanelGroup, _React$Component);\\n\\n  function PanelGroup(props, context) {\\n    (0, _classCallCheck3['default'])(this, PanelGroup);\\n\\n    var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props, context));\\n\\n    _this.handleSelect = _this.handleSelect.bind(_this);\\n\\n    _this.state = {\\n      activeKey: props.defaultActiveKey\\n    };\\n    return _this;\\n  }\\n\\n  PanelGroup.prototype.handleSelect = function handleSelect(key, e) {\\n    e.preventDefault();\\n\\n    if (this.props.onSelect) {\\n      this.props.onSelect(key, e);\\n    }\\n\\n    if (this.state.activeKey === key) {\\n      key = null;\\n    }\\n\\n    this.setState({ activeKey: key });\\n  };\\n\\n  PanelGroup.prototype.render = function render() {\\n    var _this2 = this;\\n\\n    var _props = this.props,\\n        accordion = _props.accordion,\\n        propsActiveKey = _props.activeKey,\\n        className = _props.className,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['accordion', 'activeKey', 'className', 'children']);\\n\\n    var _splitBsPropsAndOmit = (0, _bootstrapUtils.splitBsPropsAndOmit)(props, ['defaultActiveKey', 'onSelect']),\\n        bsProps = _splitBsPropsAndOmit[0],\\n        elementProps = _splitBsPropsAndOmit[1];\\n\\n    var activeKey = void 0;\\n    if (accordion) {\\n      activeKey = propsActiveKey != null ? propsActiveKey : this.state.activeKey;\\n      elementProps.role = elementProps.role || 'tablist';\\n    }\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement(\\n      'div',\\n      (0, _extends3['default'])({}, elementProps, {\\n        className: (0, _classnames2['default'])(className, classes)\\n      }),\\n      _ValidComponentChildren2['default'].map(children, function (child) {\\n        var childProps = {\\n          bsStyle: child.props.bsStyle || bsProps.bsStyle\\n        };\\n\\n        if (accordion) {\\n          (0, _assign2['default'])(childProps, {\\n            headerRole: 'tab',\\n            panelRole: 'tabpanel',\\n            collapsible: true,\\n            expanded: child.props.eventKey === activeKey,\\n            onSelect: (0, _createChainedFunction2['default'])(_this2.handleSelect, child.props.onSelect)\\n          });\\n        }\\n\\n        return (0, _react.cloneElement)(child, childProps);\\n      })\\n    );\\n  };\\n\\n  return PanelGroup;\\n}(_react2['default'].Component);\\n\\nPanelGroup.propTypes = propTypes;\\nPanelGroup.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('panel-group', PanelGroup);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/PanelGroup.js\\n// module id = 348\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/PanelGroup.js?\");\n\n/***/ },\n/* 349 */\n/*!************************************************************!*\\\n  !*** ./~/babel-runtime/helpers/objectWithoutProperties.js ***!\n  \\************************************************************/\n/***/ function(module, exports) {\n\n\teval(\"\\\"use strict\\\";\\n\\nexports.__esModule = true;\\n\\nexports.default = function (obj, keys) {\\n  var target = {};\\n\\n  for (var i in obj) {\\n    if (keys.indexOf(i) >= 0) continue;\\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\\n    target[i] = obj[i];\\n  }\\n\\n  return target;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/babel-runtime/helpers/objectWithoutProperties.js\\n// module id = 349\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/babel-runtime/helpers/objectWithoutProperties.js?\");\n\n/***/ },\n/* 350 */\n/*!*******************************!*\\\n  !*** ./~/classnames/index.js ***!\n  \\*******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\\n  Copyright (c) 2016 Jed Watson.\\n  Licensed under the MIT License (MIT), see\\n  http://jedwatson.github.io/classnames\\n*/\\n/* global define */\\n\\n(function () {\\n\\t'use strict';\\n\\n\\tvar hasOwn = {}.hasOwnProperty;\\n\\n\\tfunction classNames () {\\n\\t\\tvar classes = [];\\n\\n\\t\\tfor (var i = 0; i < arguments.length; i++) {\\n\\t\\t\\tvar arg = arguments[i];\\n\\t\\t\\tif (!arg) continue;\\n\\n\\t\\t\\tvar argType = typeof arg;\\n\\n\\t\\t\\tif (argType === 'string' || argType === 'number') {\\n\\t\\t\\t\\tclasses.push(arg);\\n\\t\\t\\t} else if (Array.isArray(arg)) {\\n\\t\\t\\t\\tclasses.push(classNames.apply(null, arg));\\n\\t\\t\\t} else if (argType === 'object') {\\n\\t\\t\\t\\tfor (var key in arg) {\\n\\t\\t\\t\\t\\tif (hasOwn.call(arg, key) && arg[key]) {\\n\\t\\t\\t\\t\\t\\tclasses.push(key);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\treturn classes.join(' ');\\n\\t}\\n\\n\\tif (typeof module !== 'undefined' && module.exports) {\\n\\t\\tmodule.exports = classNames;\\n\\t} else if (true) {\\n\\t\\t// register as 'classnames', consistent with npm package name\\n\\t\\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {\\n\\t\\t\\treturn classNames;\\n\\t\\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n\\t} else {\\n\\t\\twindow.classNames = classNames;\\n\\t}\\n}());\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/classnames/index.js\\n// module id = 350\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/classnames/index.js?\");\n\n/***/ },\n/* 351 */\n/*!*******************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/bootstrapUtils.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\nexports._curry = exports.bsSizes = exports.bsStyles = exports.bsClass = undefined;\\n\\nvar _entries = __webpack_require__(/*! babel-runtime/core-js/object/entries */ 352);\\n\\nvar _entries2 = _interopRequireDefault(_entries);\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nexports.prefix = prefix;\\nexports.getClassSet = getClassSet;\\nexports.splitBsProps = splitBsProps;\\nexports.splitBsPropsAndOmit = splitBsPropsAndOmit;\\nexports.addStyle = addStyle;\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _StyleConfig = __webpack_require__(/*! ./StyleConfig */ 356);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nfunction curry(fn) {\\n  return function () {\\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\\n      args[_key] = arguments[_key];\\n    }\\n\\n    var last = args[args.length - 1];\\n    if (typeof last === 'function') {\\n      return fn.apply(undefined, args);\\n    }\\n    return function (Component) {\\n      return fn.apply(undefined, args.concat([Component]));\\n    };\\n  };\\n} // TODO: The publicly exposed parts of this should be in lib/BootstrapUtils.\\n\\nfunction prefix(props, variant) {\\n  !(props.bsClass != null) ? process.env.NODE_ENV !== 'production' ? (0, _invariant2['default'])(false, 'A `bsClass` prop is required for this component') : (0, _invariant2['default'])(false) : void 0;\\n  return props.bsClass + (variant ? '-' + variant : '');\\n}\\n\\nvar bsClass = exports.bsClass = curry(function (defaultClass, Component) {\\n  var propTypes = Component.propTypes || (Component.propTypes = {});\\n  var defaultProps = Component.defaultProps || (Component.defaultProps = {});\\n\\n  propTypes.bsClass = _react.PropTypes.string;\\n  defaultProps.bsClass = defaultClass;\\n\\n  return Component;\\n});\\n\\nvar bsStyles = exports.bsStyles = curry(function (styles, defaultStyle, Component) {\\n  if (typeof defaultStyle !== 'string') {\\n    Component = defaultStyle;\\n    defaultStyle = undefined;\\n  }\\n\\n  var existing = Component.STYLES || [];\\n  var propTypes = Component.propTypes || {};\\n\\n  styles.forEach(function (style) {\\n    if (existing.indexOf(style) === -1) {\\n      existing.push(style);\\n    }\\n  });\\n\\n  var propType = _react.PropTypes.oneOf(existing);\\n\\n  // expose the values on the propType function for documentation\\n  Component.STYLES = propType._values = existing;\\n\\n  Component.propTypes = (0, _extends3['default'])({}, propTypes, {\\n    bsStyle: propType\\n  });\\n\\n  if (defaultStyle !== undefined) {\\n    var defaultProps = Component.defaultProps || (Component.defaultProps = {});\\n    defaultProps.bsStyle = defaultStyle;\\n  }\\n\\n  return Component;\\n});\\n\\nvar bsSizes = exports.bsSizes = curry(function (sizes, defaultSize, Component) {\\n  if (typeof defaultSize !== 'string') {\\n    Component = defaultSize;\\n    defaultSize = undefined;\\n  }\\n\\n  var existing = Component.SIZES || [];\\n  var propTypes = Component.propTypes || {};\\n\\n  sizes.forEach(function (size) {\\n    if (existing.indexOf(size) === -1) {\\n      existing.push(size);\\n    }\\n  });\\n\\n  var values = [];\\n  existing.forEach(function (size) {\\n    var mappedSize = _StyleConfig.SIZE_MAP[size];\\n    if (mappedSize && mappedSize !== size) {\\n      values.push(mappedSize);\\n    }\\n\\n    values.push(size);\\n  });\\n\\n  var propType = _react.PropTypes.oneOf(values);\\n  propType._values = values;\\n\\n  // expose the values on the propType function for documentation\\n  Component.SIZES = existing;\\n\\n  Component.propTypes = (0, _extends3['default'])({}, propTypes, {\\n    bsSize: propType\\n  });\\n\\n  if (defaultSize !== undefined) {\\n    if (!Component.defaultProps) {\\n      Component.defaultProps = {};\\n    }\\n    Component.defaultProps.bsSize = defaultSize;\\n  }\\n\\n  return Component;\\n});\\n\\nfunction getClassSet(props) {\\n  var _classes;\\n\\n  var classes = (_classes = {}, _classes[prefix(props)] = true, _classes);\\n\\n  if (props.bsSize) {\\n    var bsSize = _StyleConfig.SIZE_MAP[props.bsSize] || props.bsSize;\\n    classes[prefix(props, bsSize)] = true;\\n  }\\n\\n  if (props.bsStyle) {\\n    classes[prefix(props, props.bsStyle)] = true;\\n  }\\n\\n  return classes;\\n}\\n\\nfunction getBsProps(props) {\\n  return {\\n    bsClass: props.bsClass,\\n    bsSize: props.bsSize,\\n    bsStyle: props.bsStyle,\\n    bsRole: props.bsRole\\n  };\\n}\\n\\nfunction isBsProp(propName) {\\n  return propName === 'bsClass' || propName === 'bsSize' || propName === 'bsStyle' || propName === 'bsRole';\\n}\\n\\nfunction splitBsProps(props) {\\n  var elementProps = {};\\n  (0, _entries2['default'])(props).forEach(function (_ref) {\\n    var propName = _ref[0],\\n        propValue = _ref[1];\\n\\n    if (!isBsProp(propName)) {\\n      elementProps[propName] = propValue;\\n    }\\n  });\\n\\n  return [getBsProps(props), elementProps];\\n}\\n\\nfunction splitBsPropsAndOmit(props, omittedPropNames) {\\n  var isOmittedProp = {};\\n  omittedPropNames.forEach(function (propName) {\\n    isOmittedProp[propName] = true;\\n  });\\n\\n  var elementProps = {};\\n  (0, _entries2['default'])(props).forEach(function (_ref2) {\\n    var propName = _ref2[0],\\n        propValue = _ref2[1];\\n\\n    if (!isBsProp(propName) && !isOmittedProp[propName]) {\\n      elementProps[propName] = propValue;\\n    }\\n  });\\n\\n  return [getBsProps(props), elementProps];\\n}\\n\\n/**\\n * Add a style variant to a Component. Mutates the propTypes of the component\\n * in order to validate the new variant.\\n */\\nfunction addStyle(Component) {\\n  for (var _len2 = arguments.length, styleVariant = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\\n    styleVariant[_key2 - 1] = arguments[_key2];\\n  }\\n\\n  bsStyles(styleVariant, Component);\\n}\\n\\nvar _curry = exports._curry = curry;\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/utils/bootstrapUtils.js\\n// module id = 351\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/bootstrapUtils.js?\");\n\n/***/ },\n/* 352 */\n/*!***************************************************!*\\\n  !*** ./~/babel-runtime/core-js/object/entries.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"module.exports = { \\\"default\\\": __webpack_require__(/*! core-js/library/fn/object/entries */ 353), __esModule: true };\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/babel-runtime/core-js/object/entries.js\\n// module id = 352\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/babel-runtime/core-js/object/entries.js?\");\n\n/***/ },\n/* 353 */\n/*!************************************************!*\\\n  !*** ./~/core-js/library/fn/object/entries.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"__webpack_require__(/*! ../../modules/es7.object.entries */ 354);\\nmodule.exports = __webpack_require__(/*! ../../modules/_core */ 271).Object.entries;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/fn/object/entries.js\\n// module id = 353\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/fn/object/entries.js?\");\n\n/***/ },\n/* 354 */\n/*!*********************************************************!*\\\n  !*** ./~/core-js/library/modules/es7.object.entries.js ***!\n  \\*********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// https://github.com/tc39/proposal-object-values-entries\\nvar $export  = __webpack_require__(/*! ./_export */ 269)\\n  , $entries = __webpack_require__(/*! ./_object-to-array */ 355)(true);\\n\\n$export($export.S, 'Object', {\\n  entries: function entries(it){\\n    return $entries(it);\\n  }\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/es7.object.entries.js\\n// module id = 354\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/es7.object.entries.js?\");\n\n/***/ },\n/* 355 */\n/*!*******************************************************!*\\\n  !*** ./~/core-js/library/modules/_object-to-array.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var getKeys   = __webpack_require__(/*! ./_object-keys */ 285)\\n  , toIObject = __webpack_require__(/*! ./_to-iobject */ 288)\\n  , isEnum    = __webpack_require__(/*! ./_object-pie */ 301).f;\\nmodule.exports = function(isEntries){\\n  return function(it){\\n    var O      = toIObject(it)\\n      , keys   = getKeys(O)\\n      , length = keys.length\\n      , i      = 0\\n      , result = []\\n      , key;\\n    while(length > i)if(isEnum.call(O, key = keys[i++])){\\n      result.push(isEntries ? [key, O[key]] : O[key]);\\n    } return result;\\n  };\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_object-to-array.js\\n// module id = 355\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_object-to-array.js?\");\n\n/***/ },\n/* 356 */\n/*!****************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/StyleConfig.js ***!\n  \\****************************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\nvar Size = exports.Size = {\\n  LARGE: 'large',\\n  SMALL: 'small',\\n  XSMALL: 'xsmall'\\n};\\n\\nvar SIZE_MAP = exports.SIZE_MAP = {\\n  large: 'lg',\\n  medium: 'md',\\n  small: 'sm',\\n  xsmall: 'xs',\\n  lg: 'lg',\\n  md: 'md',\\n  sm: 'sm',\\n  xs: 'xs'\\n};\\n\\nvar DEVICE_SIZES = exports.DEVICE_SIZES = ['lg', 'md', 'sm', 'xs'];\\n\\nvar State = exports.State = {\\n  SUCCESS: 'success',\\n  WARNING: 'warning',\\n  DANGER: 'danger',\\n  INFO: 'info'\\n};\\n\\nvar Style = exports.Style = {\\n  DEFAULT: 'default',\\n  PRIMARY: 'primary',\\n  LINK: 'link',\\n  INVERSE: 'inverse'\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/utils/StyleConfig.js\\n// module id = 356\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/StyleConfig.js?\");\n\n/***/ },\n/* 357 */\n/*!**************************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/createChainedFunction.js ***!\n  \\**************************************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n/**\\n * Safe chained function\\n *\\n * Will only create a new function if needed,\\n * otherwise will pass back existing functions or null.\\n *\\n * @param {function} functions to chain\\n * @returns {function|null}\\n */\\nfunction createChainedFunction() {\\n  for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {\\n    funcs[_key] = arguments[_key];\\n  }\\n\\n  return funcs.filter(function (f) {\\n    return f != null;\\n  }).reduce(function (acc, f) {\\n    if (typeof f !== 'function') {\\n      throw new Error('Invalid Argument Type, must only provide functions, undefined, or null.');\\n    }\\n\\n    if (acc === null) {\\n      return f;\\n    }\\n\\n    return function chainedFunction() {\\n      for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\\n        args[_key2] = arguments[_key2];\\n      }\\n\\n      acc.apply(this, args);\\n      f.apply(this, args);\\n    };\\n  }, null);\\n}\\n\\nexports['default'] = createChainedFunction;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/utils/createChainedFunction.js\\n// module id = 357\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/createChainedFunction.js?\");\n\n/***/ },\n/* 358 */\n/*!***************************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/ValidComponentChildren.js ***!\n  \\***************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\n/**\\n * Iterates through children that are typically specified as `props.children`,\\n * but only maps over children that are \\\"valid components\\\".\\n *\\n * The mapFunction provided index will be normalised to the components mapped,\\n * so an invalid component would not increase the index.\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} func.\\n * @param {*} context Context for func.\\n * @return {object} Object containing the ordered map of results.\\n */\\nfunction map(children, func, context) {\\n  var index = 0;\\n\\n  return _react2['default'].Children.map(children, function (child) {\\n    if (!_react2['default'].isValidElement(child)) {\\n      return child;\\n    }\\n\\n    return func.call(context, child, index++);\\n  });\\n}\\n\\n/**\\n * Iterates through children that are \\\"valid components\\\".\\n *\\n * The provided forEachFunc(child, index) will be called for each\\n * leaf child with the index reflecting the position relative to \\\"valid components\\\".\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} func.\\n * @param {*} context Context for context.\\n */\\n// TODO: This module should be ElementChildren, and should use named exports.\\n\\nfunction forEach(children, func, context) {\\n  var index = 0;\\n\\n  _react2['default'].Children.forEach(children, function (child) {\\n    if (!_react2['default'].isValidElement(child)) {\\n      return;\\n    }\\n\\n    func.call(context, child, index++);\\n  });\\n}\\n\\n/**\\n * Count the number of \\\"valid components\\\" in the Children container.\\n *\\n * @param {?*} children Children tree container.\\n * @returns {number}\\n */\\nfunction count(children) {\\n  var result = 0;\\n\\n  _react2['default'].Children.forEach(children, function (child) {\\n    if (!_react2['default'].isValidElement(child)) {\\n      return;\\n    }\\n\\n    ++result;\\n  });\\n\\n  return result;\\n}\\n\\n/**\\n * Finds children that are typically specified as `props.children`,\\n * but only iterates over children that are \\\"valid components\\\".\\n *\\n * The provided forEachFunc(child, index) will be called for each\\n * leaf child with the index reflecting the position relative to \\\"valid components\\\".\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} func.\\n * @param {*} context Context for func.\\n * @returns {array} of children that meet the func return statement\\n */\\nfunction filter(children, func, context) {\\n  var index = 0;\\n  var result = [];\\n\\n  _react2['default'].Children.forEach(children, function (child) {\\n    if (!_react2['default'].isValidElement(child)) {\\n      return;\\n    }\\n\\n    if (func.call(context, child, index++)) {\\n      result.push(child);\\n    }\\n  });\\n\\n  return result;\\n}\\n\\nfunction find(children, func, context) {\\n  var index = 0;\\n  var result = undefined;\\n\\n  _react2['default'].Children.forEach(children, function (child) {\\n    if (result) {\\n      return;\\n    }\\n    if (!_react2['default'].isValidElement(child)) {\\n      return;\\n    }\\n\\n    if (func.call(context, child, index++)) {\\n      result = child;\\n    }\\n  });\\n\\n  return result;\\n}\\n\\nfunction every(children, func, context) {\\n  var index = 0;\\n  var result = true;\\n\\n  _react2['default'].Children.forEach(children, function (child) {\\n    if (!result) {\\n      return;\\n    }\\n    if (!_react2['default'].isValidElement(child)) {\\n      return;\\n    }\\n\\n    if (!func.call(context, child, index++)) {\\n      result = false;\\n    }\\n  });\\n\\n  return result;\\n}\\n\\nfunction some(children, func, context) {\\n  var index = 0;\\n  var result = false;\\n\\n  _react2['default'].Children.forEach(children, function (child) {\\n    if (result) {\\n      return;\\n    }\\n    if (!_react2['default'].isValidElement(child)) {\\n      return;\\n    }\\n\\n    if (func.call(context, child, index++)) {\\n      result = true;\\n    }\\n  });\\n\\n  return result;\\n}\\n\\nfunction toArray(children) {\\n  var result = [];\\n\\n  _react2['default'].Children.forEach(children, function (child) {\\n    if (!_react2['default'].isValidElement(child)) {\\n      return;\\n    }\\n\\n    result.push(child);\\n  });\\n\\n  return result;\\n}\\n\\nexports['default'] = {\\n  map: map,\\n  forEach: forEach,\\n  count: count,\\n  find: find,\\n  filter: filter,\\n  every: every,\\n  some: some,\\n  toArray: toArray\\n};\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/utils/ValidComponentChildren.js\\n// module id = 358\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/ValidComponentChildren.js?\");\n\n/***/ },\n/* 359 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Alert.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _values = __webpack_require__(/*! babel-runtime/core-js/object/values */ 360);\\n\\nvar _values2 = _interopRequireDefault(_values);\\n\\nvar _extends3 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends4 = _interopRequireDefault(_extends3);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _StyleConfig = __webpack_require__(/*! ./utils/StyleConfig */ 356);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  onDismiss: _react2['default'].PropTypes.func,\\n  closeLabel: _react2['default'].PropTypes.string\\n};\\n\\nvar defaultProps = {\\n  closeLabel: 'Close alert'\\n};\\n\\nvar Alert = function (_React$Component) {\\n  (0, _inherits3['default'])(Alert, _React$Component);\\n\\n  function Alert() {\\n    (0, _classCallCheck3['default'])(this, Alert);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Alert.prototype.renderDismissButton = function renderDismissButton(onDismiss) {\\n    return _react2['default'].createElement(\\n      'button',\\n      {\\n        type: 'button',\\n        className: 'close',\\n        onClick: onDismiss,\\n        'aria-hidden': 'true',\\n        tabIndex: '-1'\\n      },\\n      _react2['default'].createElement(\\n        'span',\\n        null,\\n        '\\\\xD7'\\n      )\\n    );\\n  };\\n\\n  Alert.prototype.renderSrOnlyDismissButton = function renderSrOnlyDismissButton(onDismiss, closeLabel) {\\n    return _react2['default'].createElement(\\n      'button',\\n      {\\n        type: 'button',\\n        className: 'close sr-only',\\n        onClick: onDismiss\\n      },\\n      closeLabel\\n    );\\n  };\\n\\n  Alert.prototype.render = function render() {\\n    var _extends2;\\n\\n    var _props = this.props,\\n        onDismiss = _props.onDismiss,\\n        closeLabel = _props.closeLabel,\\n        className = _props.className,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['onDismiss', 'closeLabel', 'className', 'children']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var dismissable = !!onDismiss;\\n    var classes = (0, _extends4['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), (_extends2 = {}, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'dismissable')] = dismissable, _extends2));\\n\\n    return _react2['default'].createElement(\\n      'div',\\n      (0, _extends4['default'])({}, elementProps, {\\n        role: 'alert',\\n        className: (0, _classnames2['default'])(className, classes)\\n      }),\\n      dismissable && this.renderDismissButton(onDismiss),\\n      children,\\n      dismissable && this.renderSrOnlyDismissButton(onDismiss, closeLabel)\\n    );\\n  };\\n\\n  return Alert;\\n}(_react2['default'].Component);\\n\\nAlert.propTypes = propTypes;\\nAlert.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsStyles)((0, _values2['default'])(_StyleConfig.State), _StyleConfig.State.INFO, (0, _bootstrapUtils.bsClass)('alert', Alert));\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Alert.js\\n// module id = 359\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Alert.js?\");\n\n/***/ },\n/* 360 */\n/*!**************************************************!*\\\n  !*** ./~/babel-runtime/core-js/object/values.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"module.exports = { \\\"default\\\": __webpack_require__(/*! core-js/library/fn/object/values */ 361), __esModule: true };\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/babel-runtime/core-js/object/values.js\\n// module id = 360\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/babel-runtime/core-js/object/values.js?\");\n\n/***/ },\n/* 361 */\n/*!***********************************************!*\\\n  !*** ./~/core-js/library/fn/object/values.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"__webpack_require__(/*! ../../modules/es7.object.values */ 362);\\nmodule.exports = __webpack_require__(/*! ../../modules/_core */ 271).Object.values;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/fn/object/values.js\\n// module id = 361\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/fn/object/values.js?\");\n\n/***/ },\n/* 362 */\n/*!********************************************************!*\\\n  !*** ./~/core-js/library/modules/es7.object.values.js ***!\n  \\********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// https://github.com/tc39/proposal-object-values-entries\\nvar $export = __webpack_require__(/*! ./_export */ 269)\\n  , $values = __webpack_require__(/*! ./_object-to-array */ 355)(false);\\n\\n$export($export.S, 'Object', {\\n  values: function values(it){\\n    return $values(it);\\n  }\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/es7.object.values.js\\n// module id = 362\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/es7.object.values.js?\");\n\n/***/ },\n/* 363 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Badge.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\n// TODO: `pullRight` doesn't belong here. There's no special handling here.\\n\\nvar propTypes = {\\n  pullRight: _react2['default'].PropTypes.bool\\n};\\n\\nvar defaultProps = {\\n  pullRight: false\\n};\\n\\nvar Badge = function (_React$Component) {\\n  (0, _inherits3['default'])(Badge, _React$Component);\\n\\n  function Badge() {\\n    (0, _classCallCheck3['default'])(this, Badge);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Badge.prototype.hasContent = function hasContent(children) {\\n    var result = false;\\n\\n    _react2['default'].Children.forEach(children, function (child) {\\n      if (result) {\\n        return;\\n      }\\n\\n      if (child || child === 0) {\\n        result = true;\\n      }\\n    });\\n\\n    return result;\\n  };\\n\\n  Badge.prototype.render = function render() {\\n    var _props = this.props,\\n        pullRight = _props.pullRight,\\n        className = _props.className,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['pullRight', 'className', 'children']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _extends3['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), {\\n      'pull-right': pullRight,\\n\\n      // Hack for collapsing on IE8.\\n      hidden: !this.hasContent(children)\\n    });\\n\\n    return _react2['default'].createElement(\\n      'span',\\n      (0, _extends3['default'])({}, elementProps, {\\n        className: (0, _classnames2['default'])(className, classes)\\n      }),\\n      children\\n    );\\n  };\\n\\n  return Badge;\\n}(_react2['default'].Component);\\n\\nBadge.propTypes = propTypes;\\nBadge.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('badge', Badge);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Badge.js\\n// module id = 363\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Badge.js?\");\n\n/***/ },\n/* 364 */\n/*!*********************************************!*\\\n  !*** ./~/react-bootstrap/lib/Breadcrumb.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _BreadcrumbItem = __webpack_require__(/*! ./BreadcrumbItem */ 365);\\n\\nvar _BreadcrumbItem2 = _interopRequireDefault(_BreadcrumbItem);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar Breadcrumb = function (_React$Component) {\\n  (0, _inherits3['default'])(Breadcrumb, _React$Component);\\n\\n  function Breadcrumb() {\\n    (0, _classCallCheck3['default'])(this, Breadcrumb);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Breadcrumb.prototype.render = function render() {\\n    var _props = this.props,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement('ol', (0, _extends3['default'])({}, elementProps, {\\n      role: 'navigation',\\n      'aria-label': 'breadcrumbs',\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return Breadcrumb;\\n}(_react2['default'].Component);\\n\\nBreadcrumb.Item = _BreadcrumbItem2['default'];\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('breadcrumb', Breadcrumb);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Breadcrumb.js\\n// module id = 364\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Breadcrumb.js?\");\n\n/***/ },\n/* 365 */\n/*!*************************************************!*\\\n  !*** ./~/react-bootstrap/lib/BreadcrumbItem.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _SafeAnchor = __webpack_require__(/*! ./SafeAnchor */ 366);\\n\\nvar _SafeAnchor2 = _interopRequireDefault(_SafeAnchor);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  /**\\n   * If set to true, renders `span` instead of `a`\\n   */\\n  active: _react2['default'].PropTypes.bool,\\n  /**\\n   * `href` attribute for the inner `a` element\\n   */\\n  href: _react2['default'].PropTypes.string,\\n  /**\\n   * `title` attribute for the inner `a` element\\n   */\\n  title: _react2['default'].PropTypes.node,\\n  /**\\n   * `target` attribute for the inner `a` element\\n   */\\n  target: _react2['default'].PropTypes.string\\n};\\n\\nvar defaultProps = {\\n  active: false\\n};\\n\\nvar BreadcrumbItem = function (_React$Component) {\\n  (0, _inherits3['default'])(BreadcrumbItem, _React$Component);\\n\\n  function BreadcrumbItem() {\\n    (0, _classCallCheck3['default'])(this, BreadcrumbItem);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  BreadcrumbItem.prototype.render = function render() {\\n    var _props = this.props,\\n        active = _props.active,\\n        href = _props.href,\\n        title = _props.title,\\n        target = _props.target,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['active', 'href', 'title', 'target', 'className']);\\n\\n    // Don't try to render these props on non-active <span>.\\n\\n    var linkProps = { href: href, title: title, target: target };\\n\\n    return _react2['default'].createElement(\\n      'li',\\n      { className: (0, _classnames2['default'])(className, { active: active }) },\\n      active ? _react2['default'].createElement('span', props) : _react2['default'].createElement(_SafeAnchor2['default'], (0, _extends3['default'])({}, props, linkProps))\\n    );\\n  };\\n\\n  return BreadcrumbItem;\\n}(_react2['default'].Component);\\n\\nBreadcrumbItem.propTypes = propTypes;\\nBreadcrumbItem.defaultProps = defaultProps;\\n\\nexports['default'] = BreadcrumbItem;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/BreadcrumbItem.js\\n// module id = 365\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/BreadcrumbItem.js?\");\n\n/***/ },\n/* 366 */\n/*!*********************************************!*\\\n  !*** ./~/react-bootstrap/lib/SafeAnchor.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  href: _react2['default'].PropTypes.string,\\n  onClick: _react2['default'].PropTypes.func,\\n  disabled: _react2['default'].PropTypes.bool,\\n  role: _react2['default'].PropTypes.string,\\n  tabIndex: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.number, _react2['default'].PropTypes.string]),\\n  /**\\n   * this is sort of silly but needed for Button\\n   */\\n  componentClass: _elementType2['default']\\n};\\n\\nvar defaultProps = {\\n  componentClass: 'a'\\n};\\n\\nfunction isTrivialHref(href) {\\n  return !href || href.trim() === '#';\\n}\\n\\n/**\\n * There are situations due to browser quirks or Bootstrap CSS where\\n * an anchor tag is needed, when semantically a button tag is the\\n * better choice. SafeAnchor ensures that when an anchor is used like a\\n * button its accessible. It also emulates input `disabled` behavior for\\n * links, which is usually desirable for Buttons, NavItems, MenuItems, etc.\\n */\\n\\nvar SafeAnchor = function (_React$Component) {\\n  (0, _inherits3['default'])(SafeAnchor, _React$Component);\\n\\n  function SafeAnchor(props, context) {\\n    (0, _classCallCheck3['default'])(this, SafeAnchor);\\n\\n    var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props, context));\\n\\n    _this.handleClick = _this.handleClick.bind(_this);\\n    return _this;\\n  }\\n\\n  SafeAnchor.prototype.handleClick = function handleClick(event) {\\n    var _props = this.props,\\n        disabled = _props.disabled,\\n        href = _props.href,\\n        onClick = _props.onClick;\\n\\n\\n    if (disabled || isTrivialHref(href)) {\\n      event.preventDefault();\\n    }\\n\\n    if (disabled) {\\n      event.stopPropagation();\\n      return;\\n    }\\n\\n    if (onClick) {\\n      onClick(event);\\n    }\\n  };\\n\\n  SafeAnchor.prototype.render = function render() {\\n    var _props2 = this.props,\\n        Component = _props2.componentClass,\\n        disabled = _props2.disabled,\\n        props = (0, _objectWithoutProperties3['default'])(_props2, ['componentClass', 'disabled']);\\n\\n\\n    if (isTrivialHref(props.href)) {\\n      props.role = props.role || 'button';\\n      // we want to make sure there is a href attribute on the node\\n      // otherwise, the cursor incorrectly styled (except with role='button')\\n      props.href = props.href || '#';\\n    }\\n\\n    if (disabled) {\\n      props.tabIndex = -1;\\n      props.style = (0, _extends3['default'])({ pointerEvents: 'none' }, props.style);\\n    }\\n\\n    return _react2['default'].createElement(Component, (0, _extends3['default'])({}, props, {\\n      onClick: this.handleClick\\n    }));\\n  };\\n\\n  return SafeAnchor;\\n}(_react2['default'].Component);\\n\\nSafeAnchor.propTypes = propTypes;\\nSafeAnchor.defaultProps = defaultProps;\\n\\nexports['default'] = SafeAnchor;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/SafeAnchor.js\\n// module id = 366\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/SafeAnchor.js?\");\n\n/***/ },\n/* 367 */\n/*!***********************************************!*\\\n  !*** ./~/react-prop-types/lib/elementType.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _typeof = typeof Symbol === \\\"function\\\" && typeof Symbol.iterator === \\\"symbol\\\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \\\"function\\\" && obj.constructor === Symbol ? \\\"symbol\\\" : typeof obj; };\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _createChainableTypeChecker = __webpack_require__(/*! ./utils/createChainableTypeChecker */ 368);\\n\\nvar _createChainableTypeChecker2 = _interopRequireDefault(_createChainableTypeChecker);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction elementType(props, propName, componentName, location, propFullName) {\\n  var propValue = props[propName];\\n  var propType = typeof propValue === 'undefined' ? 'undefined' : _typeof(propValue);\\n\\n  if (_react2.default.isValidElement(propValue)) {\\n    return new Error('Invalid ' + location + ' `' + propFullName + '` of type ReactElement ' + ('supplied to `' + componentName + '`, expected an element type (a string ') + 'or a ReactClass).');\\n  }\\n\\n  if (propType !== 'function' && propType !== 'string') {\\n    return new Error('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected an element type (a string ') + 'or a ReactClass).');\\n  }\\n\\n  return null;\\n}\\n\\nexports.default = (0, _createChainableTypeChecker2.default)(elementType);\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-prop-types/lib/elementType.js\\n// module id = 367\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-prop-types/lib/elementType.js?\");\n\n/***/ },\n/* 368 */\n/*!********************************************************************!*\\\n  !*** ./~/react-prop-types/lib/utils/createChainableTypeChecker.js ***!\n  \\********************************************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\nexports.default = createChainableTypeChecker;\\n/**\\n * Copyright 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n */\\n\\n// Mostly taken from ReactPropTypes.\\n\\nfunction createChainableTypeChecker(validate) {\\n  function checkType(isRequired, props, propName, componentName, location, propFullName) {\\n    var componentNameSafe = componentName || '<<anonymous>>';\\n    var propFullNameSafe = propFullName || propName;\\n\\n    if (props[propName] == null) {\\n      if (isRequired) {\\n        return new Error('Required ' + location + ' `' + propFullNameSafe + '` was not specified ' + ('in `' + componentNameSafe + '`.'));\\n      }\\n\\n      return null;\\n    }\\n\\n    for (var _len = arguments.length, args = Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) {\\n      args[_key - 6] = arguments[_key];\\n    }\\n\\n    return validate.apply(undefined, [props, propName, componentNameSafe, location, propFullNameSafe].concat(args));\\n  }\\n\\n  var chainedCheckType = checkType.bind(null, false);\\n  chainedCheckType.isRequired = checkType.bind(null, true);\\n\\n  return chainedCheckType;\\n}\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-prop-types/lib/utils/createChainableTypeChecker.js\\n// module id = 368\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-prop-types/lib/utils/createChainableTypeChecker.js?\");\n\n/***/ },\n/* 369 */\n/*!*****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Button.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _values = __webpack_require__(/*! babel-runtime/core-js/object/values */ 360);\\n\\nvar _values2 = _interopRequireDefault(_values);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _extends3 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends4 = _interopRequireDefault(_extends3);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _StyleConfig = __webpack_require__(/*! ./utils/StyleConfig */ 356);\\n\\nvar _SafeAnchor = __webpack_require__(/*! ./SafeAnchor */ 366);\\n\\nvar _SafeAnchor2 = _interopRequireDefault(_SafeAnchor);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  active: _react2['default'].PropTypes.bool,\\n  disabled: _react2['default'].PropTypes.bool,\\n  block: _react2['default'].PropTypes.bool,\\n  onClick: _react2['default'].PropTypes.func,\\n  componentClass: _elementType2['default'],\\n  href: _react2['default'].PropTypes.string,\\n  /**\\n   * Defines HTML button type attribute\\n   * @defaultValue 'button'\\n   */\\n  type: _react2['default'].PropTypes.oneOf(['button', 'reset', 'submit'])\\n};\\n\\nvar defaultProps = {\\n  active: false,\\n  block: false,\\n  disabled: false\\n};\\n\\nvar Button = function (_React$Component) {\\n  (0, _inherits3['default'])(Button, _React$Component);\\n\\n  function Button() {\\n    (0, _classCallCheck3['default'])(this, Button);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Button.prototype.renderAnchor = function renderAnchor(elementProps, className) {\\n    return _react2['default'].createElement(_SafeAnchor2['default'], (0, _extends4['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, elementProps.disabled && 'disabled')\\n    }));\\n  };\\n\\n  Button.prototype.renderButton = function renderButton(_ref, className) {\\n    var componentClass = _ref.componentClass,\\n        elementProps = (0, _objectWithoutProperties3['default'])(_ref, ['componentClass']);\\n\\n    var Component = componentClass || 'button';\\n\\n    return _react2['default'].createElement(Component, (0, _extends4['default'])({}, elementProps, {\\n      type: elementProps.type || 'button',\\n      className: className\\n    }));\\n  };\\n\\n  Button.prototype.render = function render() {\\n    var _extends2;\\n\\n    var _props = this.props,\\n        active = _props.active,\\n        block = _props.block,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['active', 'block', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _extends4['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), (_extends2 = {\\n      active: active\\n    }, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'block')] = block, _extends2));\\n    var fullClassName = (0, _classnames2['default'])(className, classes);\\n\\n    if (elementProps.href) {\\n      return this.renderAnchor(elementProps, fullClassName);\\n    }\\n\\n    return this.renderButton(elementProps, fullClassName);\\n  };\\n\\n  return Button;\\n}(_react2['default'].Component);\\n\\nButton.propTypes = propTypes;\\nButton.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('btn', (0, _bootstrapUtils.bsSizes)([_StyleConfig.Size.LARGE, _StyleConfig.Size.SMALL, _StyleConfig.Size.XSMALL], (0, _bootstrapUtils.bsStyles)([].concat((0, _values2['default'])(_StyleConfig.State), [_StyleConfig.Style.DEFAULT, _StyleConfig.Style.PRIMARY, _StyleConfig.Style.LINK]), _StyleConfig.Style.DEFAULT, Button)));\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Button.js\\n// module id = 369\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Button.js?\");\n\n/***/ },\n/* 370 */\n/*!**********************************************!*\\\n  !*** ./~/react-bootstrap/lib/ButtonGroup.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends3 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends4 = _interopRequireDefault(_extends3);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _all = __webpack_require__(/*! react-prop-types/lib/all */ 371);\\n\\nvar _all2 = _interopRequireDefault(_all);\\n\\nvar _Button = __webpack_require__(/*! ./Button */ 369);\\n\\nvar _Button2 = _interopRequireDefault(_Button);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  vertical: _react2['default'].PropTypes.bool,\\n  justified: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Display block buttons; only useful when used with the \\\"vertical\\\" prop.\\n   * @type {bool}\\n   */\\n  block: (0, _all2['default'])(_react2['default'].PropTypes.bool, function (_ref) {\\n    var block = _ref.block,\\n        vertical = _ref.vertical;\\n    return block && !vertical ? new Error('`block` requires `vertical` to be set to have any effect') : null;\\n  })\\n};\\n\\nvar defaultProps = {\\n  block: false,\\n  justified: false,\\n  vertical: false\\n};\\n\\nvar ButtonGroup = function (_React$Component) {\\n  (0, _inherits3['default'])(ButtonGroup, _React$Component);\\n\\n  function ButtonGroup() {\\n    (0, _classCallCheck3['default'])(this, ButtonGroup);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  ButtonGroup.prototype.render = function render() {\\n    var _extends2;\\n\\n    var _props = this.props,\\n        block = _props.block,\\n        justified = _props.justified,\\n        vertical = _props.vertical,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['block', 'justified', 'vertical', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _extends4['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), (_extends2 = {}, _extends2[(0, _bootstrapUtils.prefix)(bsProps)] = !vertical, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'vertical')] = vertical, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'justified')] = justified, _extends2[(0, _bootstrapUtils.prefix)(_Button2['default'].defaultProps, 'block')] = block, _extends2));\\n\\n    return _react2['default'].createElement('div', (0, _extends4['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return ButtonGroup;\\n}(_react2['default'].Component);\\n\\nButtonGroup.propTypes = propTypes;\\nButtonGroup.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('btn-group', ButtonGroup);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/ButtonGroup.js\\n// module id = 370\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ButtonGroup.js?\");\n\n/***/ },\n/* 371 */\n/*!***************************************!*\\\n  !*** ./~/react-prop-types/lib/all.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\nexports.default = all;\\n\\nvar _createChainableTypeChecker = __webpack_require__(/*! ./utils/createChainableTypeChecker */ 368);\\n\\nvar _createChainableTypeChecker2 = _interopRequireDefault(_createChainableTypeChecker);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction all() {\\n  for (var _len = arguments.length, validators = Array(_len), _key = 0; _key < _len; _key++) {\\n    validators[_key] = arguments[_key];\\n  }\\n\\n  function allPropTypes() {\\n    for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\\n      args[_key2] = arguments[_key2];\\n    }\\n\\n    var error = null;\\n\\n    validators.forEach(function (validator) {\\n      if (error != null) {\\n        return;\\n      }\\n\\n      var result = validator.apply(undefined, args);\\n      if (result != null) {\\n        error = result;\\n      }\\n    });\\n\\n    return error;\\n  }\\n\\n  return (0, _createChainableTypeChecker2.default)(allPropTypes);\\n}\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-prop-types/lib/all.js\\n// module id = 371\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-prop-types/lib/all.js?\");\n\n/***/ },\n/* 372 */\n/*!************************************************!*\\\n  !*** ./~/react-bootstrap/lib/ButtonToolbar.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _Button = __webpack_require__(/*! ./Button */ 369);\\n\\nvar _Button2 = _interopRequireDefault(_Button);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar ButtonToolbar = function (_React$Component) {\\n  (0, _inherits3['default'])(ButtonToolbar, _React$Component);\\n\\n  function ButtonToolbar() {\\n    (0, _classCallCheck3['default'])(this, ButtonToolbar);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  ButtonToolbar.prototype.render = function render() {\\n    var _props = this.props,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement('div', (0, _extends3['default'])({}, elementProps, {\\n      role: 'toolbar',\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return ButtonToolbar;\\n}(_react2['default'].Component);\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('btn-toolbar', (0, _bootstrapUtils.bsSizes)(_Button2['default'].SIZES, ButtonToolbar));\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/ButtonToolbar.js\\n// module id = 372\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ButtonToolbar.js?\");\n\n/***/ },\n/* 373 */\n/*!*******************************************!*\\\n  !*** ./~/react-bootstrap/lib/Carousel.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _CarouselCaption = __webpack_require__(/*! ./CarouselCaption */ 374);\\n\\nvar _CarouselCaption2 = _interopRequireDefault(_CarouselCaption);\\n\\nvar _CarouselItem = __webpack_require__(/*! ./CarouselItem */ 375);\\n\\nvar _CarouselItem2 = _interopRequireDefault(_CarouselItem);\\n\\nvar _Glyphicon = __webpack_require__(/*! ./Glyphicon */ 377);\\n\\nvar _Glyphicon2 = _interopRequireDefault(_Glyphicon);\\n\\nvar _SafeAnchor = __webpack_require__(/*! ./SafeAnchor */ 366);\\n\\nvar _SafeAnchor2 = _interopRequireDefault(_SafeAnchor);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 358);\\n\\nvar _ValidComponentChildren2 = _interopRequireDefault(_ValidComponentChildren);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\n// TODO: `slide` should be `animate`.\\n\\n// TODO: Use uncontrollable.\\n\\nvar propTypes = {\\n  slide: _react2['default'].PropTypes.bool,\\n  indicators: _react2['default'].PropTypes.bool,\\n  interval: _react2['default'].PropTypes.number,\\n  controls: _react2['default'].PropTypes.bool,\\n  pauseOnHover: _react2['default'].PropTypes.bool,\\n  wrap: _react2['default'].PropTypes.bool,\\n  /**\\n   * Callback fired when the active item changes.\\n   *\\n   * ```js\\n   * (eventKey: any) => any | (eventKey: any, event: Object) => any\\n   * ```\\n   *\\n   * If this callback takes two or more arguments, the second argument will\\n   * be a persisted event object with `direction` set to the direction of the\\n   * transition.\\n   */\\n  onSelect: _react2['default'].PropTypes.func,\\n  onSlideEnd: _react2['default'].PropTypes.func,\\n  activeIndex: _react2['default'].PropTypes.number,\\n  defaultActiveIndex: _react2['default'].PropTypes.number,\\n  direction: _react2['default'].PropTypes.oneOf(['prev', 'next']),\\n  prevIcon: _react2['default'].PropTypes.node,\\n  /**\\n   * Label shown to screen readers only, can be used to show the previous element\\n   * in the carousel.\\n   * Set to null to deactivate.\\n   */\\n  prevLabel: _react2['default'].PropTypes.string,\\n  nextIcon: _react2['default'].PropTypes.node,\\n  /**\\n   * Label shown to screen readers only, can be used to show the next element\\n   * in the carousel.\\n   * Set to null to deactivate.\\n   */\\n  nextLabel: _react2['default'].PropTypes.string\\n};\\n\\nvar defaultProps = {\\n  slide: true,\\n  interval: 5000,\\n  pauseOnHover: true,\\n  wrap: true,\\n  indicators: true,\\n  controls: true,\\n  prevIcon: _react2['default'].createElement(_Glyphicon2['default'], { glyph: 'chevron-left' }),\\n  prevLabel: 'Previous',\\n  nextIcon: _react2['default'].createElement(_Glyphicon2['default'], { glyph: 'chevron-right' }),\\n  nextLabel: 'Next'\\n};\\n\\nvar Carousel = function (_React$Component) {\\n  (0, _inherits3['default'])(Carousel, _React$Component);\\n\\n  function Carousel(props, context) {\\n    (0, _classCallCheck3['default'])(this, Carousel);\\n\\n    var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props, context));\\n\\n    _this.handleMouseOver = _this.handleMouseOver.bind(_this);\\n    _this.handleMouseOut = _this.handleMouseOut.bind(_this);\\n    _this.handlePrev = _this.handlePrev.bind(_this);\\n    _this.handleNext = _this.handleNext.bind(_this);\\n    _this.handleItemAnimateOutEnd = _this.handleItemAnimateOutEnd.bind(_this);\\n\\n    var defaultActiveIndex = props.defaultActiveIndex;\\n\\n\\n    _this.state = {\\n      activeIndex: defaultActiveIndex != null ? defaultActiveIndex : 0,\\n      previousActiveIndex: null,\\n      direction: null\\n    };\\n\\n    _this.isUnmounted = false;\\n    return _this;\\n  }\\n\\n  Carousel.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\\n    var activeIndex = this.getActiveIndex();\\n\\n    if (nextProps.activeIndex != null && nextProps.activeIndex !== activeIndex) {\\n      clearTimeout(this.timeout);\\n\\n      this.setState({\\n        previousActiveIndex: activeIndex,\\n        direction: nextProps.direction != null ? nextProps.direction : this.getDirection(activeIndex, nextProps.activeIndex)\\n      });\\n    }\\n  };\\n\\n  Carousel.prototype.componentDidMount = function componentDidMount() {\\n    this.waitForNext();\\n  };\\n\\n  Carousel.prototype.componentWillUnmount = function componentWillUnmount() {\\n    clearTimeout(this.timeout);\\n    this.isUnmounted = true;\\n  };\\n\\n  Carousel.prototype.handleMouseOver = function handleMouseOver() {\\n    if (this.props.pauseOnHover) {\\n      this.pause();\\n    }\\n  };\\n\\n  Carousel.prototype.handleMouseOut = function handleMouseOut() {\\n    if (this.isPaused) {\\n      this.play();\\n    }\\n  };\\n\\n  Carousel.prototype.handlePrev = function handlePrev(e) {\\n    var index = this.getActiveIndex() - 1;\\n\\n    if (index < 0) {\\n      if (!this.props.wrap) {\\n        return;\\n      }\\n      index = _ValidComponentChildren2['default'].count(this.props.children) - 1;\\n    }\\n\\n    this.select(index, e, 'prev');\\n  };\\n\\n  Carousel.prototype.handleNext = function handleNext(e) {\\n    var index = this.getActiveIndex() + 1;\\n    var count = _ValidComponentChildren2['default'].count(this.props.children);\\n\\n    if (index > count - 1) {\\n      if (!this.props.wrap) {\\n        return;\\n      }\\n      index = 0;\\n    }\\n\\n    this.select(index, e, 'next');\\n  };\\n\\n  Carousel.prototype.handleItemAnimateOutEnd = function handleItemAnimateOutEnd() {\\n    var _this2 = this;\\n\\n    this.setState({\\n      previousActiveIndex: null,\\n      direction: null\\n    }, function () {\\n      _this2.waitForNext();\\n\\n      if (_this2.props.onSlideEnd) {\\n        _this2.props.onSlideEnd();\\n      }\\n    });\\n  };\\n\\n  Carousel.prototype.getActiveIndex = function getActiveIndex() {\\n    var activeIndexProp = this.props.activeIndex;\\n    return activeIndexProp != null ? activeIndexProp : this.state.activeIndex;\\n  };\\n\\n  Carousel.prototype.getDirection = function getDirection(prevIndex, index) {\\n    if (prevIndex === index) {\\n      return null;\\n    }\\n\\n    return prevIndex > index ? 'prev' : 'next';\\n  };\\n\\n  Carousel.prototype.select = function select(index, e, direction) {\\n    clearTimeout(this.timeout);\\n\\n    // TODO: Is this necessary? Seems like the only risk is if the component\\n    // unmounts while handleItemAnimateOutEnd fires.\\n    if (this.isUnmounted) {\\n      return;\\n    }\\n\\n    var previousActiveIndex = this.getActiveIndex();\\n    direction = direction || this.getDirection(previousActiveIndex, index);\\n\\n    var onSelect = this.props.onSelect;\\n\\n\\n    if (onSelect) {\\n      if (onSelect.length > 1) {\\n        // React SyntheticEvents are pooled, so we need to remove this event\\n        // from the pool to add a custom property. To avoid unnecessarily\\n        // removing objects from the pool, only do this when the listener\\n        // actually wants the event.\\n        if (e) {\\n          e.persist();\\n          e.direction = direction;\\n        } else {\\n          e = { direction: direction };\\n        }\\n\\n        onSelect(index, e);\\n      } else {\\n        onSelect(index);\\n      }\\n    }\\n\\n    if (this.props.activeIndex == null && index !== previousActiveIndex) {\\n      if (this.state.previousActiveIndex != null) {\\n        // If currently animating don't activate the new index.\\n        // TODO: look into queueing this canceled call and\\n        // animating after the current animation has ended.\\n        return;\\n      }\\n\\n      this.setState({\\n        activeIndex: index,\\n        previousActiveIndex: previousActiveIndex,\\n        direction: direction\\n      });\\n    }\\n  };\\n\\n  Carousel.prototype.waitForNext = function waitForNext() {\\n    var _props = this.props,\\n        slide = _props.slide,\\n        interval = _props.interval,\\n        activeIndexProp = _props.activeIndex;\\n\\n\\n    if (!this.isPaused && slide && interval && activeIndexProp == null) {\\n      this.timeout = setTimeout(this.handleNext, interval);\\n    }\\n  };\\n\\n  // This might be a public API.\\n\\n\\n  Carousel.prototype.pause = function pause() {\\n    this.isPaused = true;\\n    clearTimeout(this.timeout);\\n  };\\n\\n  // This might be a public API.\\n\\n\\n  Carousel.prototype.play = function play() {\\n    this.isPaused = false;\\n    this.waitForNext();\\n  };\\n\\n  Carousel.prototype.renderIndicators = function renderIndicators(children, activeIndex, bsProps) {\\n    var _this3 = this;\\n\\n    var indicators = [];\\n\\n    _ValidComponentChildren2['default'].forEach(children, function (child, index) {\\n      indicators.push(_react2['default'].createElement('li', {\\n        key: index,\\n        className: index === activeIndex ? 'active' : null,\\n        onClick: function onClick(e) {\\n          return _this3.select(index, e);\\n        }\\n      }),\\n\\n      // Force whitespace between indicator elements. Bootstrap requires\\n      // this for correct spacing of elements.\\n      ' ');\\n    });\\n\\n    return _react2['default'].createElement(\\n      'ol',\\n      { className: (0, _bootstrapUtils.prefix)(bsProps, 'indicators') },\\n      indicators\\n    );\\n  };\\n\\n  Carousel.prototype.renderControls = function renderControls(properties) {\\n    var wrap = properties.wrap,\\n        children = properties.children,\\n        activeIndex = properties.activeIndex,\\n        prevIcon = properties.prevIcon,\\n        nextIcon = properties.nextIcon,\\n        bsProps = properties.bsProps,\\n        prevLabel = properties.prevLabel,\\n        nextLabel = properties.nextLabel;\\n\\n    var controlClassName = (0, _bootstrapUtils.prefix)(bsProps, 'control');\\n    var count = _ValidComponentChildren2['default'].count(children);\\n\\n    return [(wrap || activeIndex !== 0) && _react2['default'].createElement(\\n      _SafeAnchor2['default'],\\n      {\\n        key: 'prev',\\n        className: (0, _classnames2['default'])(controlClassName, 'left'),\\n        onClick: this.handlePrev\\n      },\\n      prevIcon,\\n      prevLabel && _react2['default'].createElement(\\n        'span',\\n        { className: 'sr-only' },\\n        prevLabel\\n      )\\n    ), (wrap || activeIndex !== count - 1) && _react2['default'].createElement(\\n      _SafeAnchor2['default'],\\n      {\\n        key: 'next',\\n        className: (0, _classnames2['default'])(controlClassName, 'right'),\\n        onClick: this.handleNext\\n      },\\n      nextIcon,\\n      nextLabel && _react2['default'].createElement(\\n        'span',\\n        { className: 'sr-only' },\\n        nextLabel\\n      )\\n    )];\\n  };\\n\\n  Carousel.prototype.render = function render() {\\n    var _this4 = this;\\n\\n    var _props2 = this.props,\\n        slide = _props2.slide,\\n        indicators = _props2.indicators,\\n        controls = _props2.controls,\\n        wrap = _props2.wrap,\\n        prevIcon = _props2.prevIcon,\\n        prevLabel = _props2.prevLabel,\\n        nextIcon = _props2.nextIcon,\\n        nextLabel = _props2.nextLabel,\\n        className = _props2.className,\\n        children = _props2.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props2, ['slide', 'indicators', 'controls', 'wrap', 'prevIcon', 'prevLabel', 'nextIcon', 'nextLabel', 'className', 'children']);\\n    var _state = this.state,\\n        previousActiveIndex = _state.previousActiveIndex,\\n        direction = _state.direction;\\n\\n    var _splitBsPropsAndOmit = (0, _bootstrapUtils.splitBsPropsAndOmit)(props, ['interval', 'pauseOnHover', 'onSelect', 'onSlideEnd', 'activeIndex', // Accessed via this.getActiveIndex().\\n    'defaultActiveIndex', 'direction']),\\n        bsProps = _splitBsPropsAndOmit[0],\\n        elementProps = _splitBsPropsAndOmit[1];\\n\\n    var activeIndex = this.getActiveIndex();\\n\\n    var classes = (0, _extends3['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), {\\n      slide: slide\\n    });\\n\\n    return _react2['default'].createElement(\\n      'div',\\n      (0, _extends3['default'])({}, elementProps, {\\n        className: (0, _classnames2['default'])(className, classes),\\n        onMouseOver: this.handleMouseOver,\\n        onMouseOut: this.handleMouseOut\\n      }),\\n      indicators && this.renderIndicators(children, activeIndex, bsProps),\\n      _react2['default'].createElement(\\n        'div',\\n        { className: (0, _bootstrapUtils.prefix)(bsProps, 'inner') },\\n        _ValidComponentChildren2['default'].map(children, function (child, index) {\\n          var active = index === activeIndex;\\n          var previousActive = slide && index === previousActiveIndex;\\n\\n          return (0, _react.cloneElement)(child, {\\n            active: active,\\n            index: index,\\n            animateOut: previousActive,\\n            animateIn: active && previousActiveIndex != null && slide,\\n            direction: direction,\\n            onAnimateOutEnd: previousActive ? _this4.handleItemAnimateOutEnd : null\\n          });\\n        })\\n      ),\\n      controls && this.renderControls({\\n        wrap: wrap,\\n        children: children,\\n        activeIndex: activeIndex,\\n        prevIcon: prevIcon,\\n        prevLabel: prevLabel,\\n        nextIcon: nextIcon,\\n        nextLabel: nextLabel,\\n        bsProps: bsProps\\n      })\\n    );\\n  };\\n\\n  return Carousel;\\n}(_react2['default'].Component);\\n\\nCarousel.propTypes = propTypes;\\nCarousel.defaultProps = defaultProps;\\n\\nCarousel.Caption = _CarouselCaption2['default'];\\nCarousel.Item = _CarouselItem2['default'];\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('carousel', Carousel);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Carousel.js\\n// module id = 373\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Carousel.js?\");\n\n/***/ },\n/* 374 */\n/*!**************************************************!*\\\n  !*** ./~/react-bootstrap/lib/CarouselCaption.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  componentClass: _elementType2['default']\\n};\\n\\nvar defaultProps = {\\n  componentClass: 'div'\\n};\\n\\nvar CarouselCaption = function (_React$Component) {\\n  (0, _inherits3['default'])(CarouselCaption, _React$Component);\\n\\n  function CarouselCaption() {\\n    (0, _classCallCheck3['default'])(this, CarouselCaption);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  CarouselCaption.prototype.render = function render() {\\n    var _props = this.props,\\n        Component = _props.componentClass,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['componentClass', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement(Component, (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return CarouselCaption;\\n}(_react2['default'].Component);\\n\\nCarouselCaption.propTypes = propTypes;\\nCarouselCaption.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('carousel-caption', CarouselCaption);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/CarouselCaption.js\\n// module id = 374\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/CarouselCaption.js?\");\n\n/***/ },\n/* 375 */\n/*!***********************************************!*\\\n  !*** ./~/react-bootstrap/lib/CarouselItem.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _reactDom = __webpack_require__(/*! react-dom */ 110);\\n\\nvar _reactDom2 = _interopRequireDefault(_reactDom);\\n\\nvar _TransitionEvents = __webpack_require__(/*! ./utils/TransitionEvents */ 376);\\n\\nvar _TransitionEvents2 = _interopRequireDefault(_TransitionEvents);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\n// TODO: This should use a timeout instead of TransitionEvents, or else just\\n// not wait until transition end to trigger continuing animations.\\n\\nvar propTypes = {\\n  direction: _react2['default'].PropTypes.oneOf(['prev', 'next']),\\n  onAnimateOutEnd: _react2['default'].PropTypes.func,\\n  active: _react2['default'].PropTypes.bool,\\n  animateIn: _react2['default'].PropTypes.bool,\\n  animateOut: _react2['default'].PropTypes.bool,\\n  index: _react2['default'].PropTypes.number\\n};\\n\\nvar defaultProps = {\\n  active: false,\\n  animateIn: false,\\n  animateOut: false\\n};\\n\\nvar CarouselItem = function (_React$Component) {\\n  (0, _inherits3['default'])(CarouselItem, _React$Component);\\n\\n  function CarouselItem(props, context) {\\n    (0, _classCallCheck3['default'])(this, CarouselItem);\\n\\n    var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props, context));\\n\\n    _this.handleAnimateOutEnd = _this.handleAnimateOutEnd.bind(_this);\\n\\n    _this.state = {\\n      direction: null\\n    };\\n\\n    _this.isUnmounted = false;\\n    return _this;\\n  }\\n\\n  CarouselItem.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\\n    if (this.props.active !== nextProps.active) {\\n      this.setState({ direction: null });\\n    }\\n  };\\n\\n  CarouselItem.prototype.componentDidUpdate = function componentDidUpdate(prevProps) {\\n    var _this2 = this;\\n\\n    var active = this.props.active;\\n\\n    var prevActive = prevProps.active;\\n\\n    if (!active && prevActive) {\\n      _TransitionEvents2['default'].addEndEventListener(_reactDom2['default'].findDOMNode(this), this.handleAnimateOutEnd);\\n    }\\n\\n    if (active !== prevActive) {\\n      setTimeout(function () {\\n        return _this2.startAnimation();\\n      }, 20);\\n    }\\n  };\\n\\n  CarouselItem.prototype.componentWillUnmount = function componentWillUnmount() {\\n    this.isUnmounted = true;\\n  };\\n\\n  CarouselItem.prototype.handleAnimateOutEnd = function handleAnimateOutEnd() {\\n    if (this.isUnmounted) {\\n      return;\\n    }\\n\\n    if (this.props.onAnimateOutEnd) {\\n      this.props.onAnimateOutEnd(this.props.index);\\n    }\\n  };\\n\\n  CarouselItem.prototype.startAnimation = function startAnimation() {\\n    if (this.isUnmounted) {\\n      return;\\n    }\\n\\n    this.setState({\\n      direction: this.props.direction === 'prev' ? 'right' : 'left'\\n    });\\n  };\\n\\n  CarouselItem.prototype.render = function render() {\\n    var _props = this.props,\\n        direction = _props.direction,\\n        active = _props.active,\\n        animateIn = _props.animateIn,\\n        animateOut = _props.animateOut,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['direction', 'active', 'animateIn', 'animateOut', 'className']);\\n\\n\\n    delete props.onAnimateOutEnd;\\n    delete props.index;\\n\\n    var classes = {\\n      item: true,\\n      active: active && !animateIn || animateOut\\n    };\\n    if (direction && active && animateIn) {\\n      classes[direction] = true;\\n    }\\n    if (this.state.direction && (animateIn || animateOut)) {\\n      classes[this.state.direction] = true;\\n    }\\n\\n    return _react2['default'].createElement('div', (0, _extends3['default'])({}, props, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return CarouselItem;\\n}(_react2['default'].Component);\\n\\nCarouselItem.propTypes = propTypes;\\nCarouselItem.defaultProps = defaultProps;\\n\\nexports['default'] = CarouselItem;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/CarouselItem.js\\n// module id = 375\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/CarouselItem.js?\");\n\n/***/ },\n/* 376 */\n/*!*********************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/TransitionEvents.js ***!\n  \\*********************************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This file contains a modified version of:\\n * https://github.com/facebook/react/blob/v0.12.0/src/addons/transitions/ReactTransitionEvents.js\\n *\\n * This source code is licensed under the BSD-style license found here:\\n * https://github.com/facebook/react/blob/v0.12.0/LICENSE\\n * An additional grant of patent rights can be found here:\\n * https://github.com/facebook/react/blob/v0.12.0/PATENTS\\n */\\n\\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\\n\\n/**\\n * EVENT_NAME_MAP is used to determine which event fired when a\\n * transition/animation ends, based on the style property used to\\n * define that event.\\n */\\nvar EVENT_NAME_MAP = {\\n  transitionend: {\\n    'transition': 'transitionend',\\n    'WebkitTransition': 'webkitTransitionEnd',\\n    'MozTransition': 'mozTransitionEnd',\\n    'OTransition': 'oTransitionEnd',\\n    'msTransition': 'MSTransitionEnd'\\n  },\\n\\n  animationend: {\\n    'animation': 'animationend',\\n    'WebkitAnimation': 'webkitAnimationEnd',\\n    'MozAnimation': 'mozAnimationEnd',\\n    'OAnimation': 'oAnimationEnd',\\n    'msAnimation': 'MSAnimationEnd'\\n  }\\n};\\n\\nvar endEvents = [];\\n\\nfunction detectEvents() {\\n  var testEl = document.createElement('div');\\n  var style = testEl.style;\\n\\n  // On some platforms, in particular some releases of Android 4.x,\\n  // the un-prefixed \\\"animation\\\" and \\\"transition\\\" properties are defined on the\\n  // style object but the events that fire will still be prefixed, so we need\\n  // to check if the un-prefixed events are useable, and if not remove them\\n  // from the map\\n  if (!('AnimationEvent' in window)) {\\n    delete EVENT_NAME_MAP.animationend.animation;\\n  }\\n\\n  if (!('TransitionEvent' in window)) {\\n    delete EVENT_NAME_MAP.transitionend.transition;\\n  }\\n\\n  for (var baseEventName in EVENT_NAME_MAP) {\\n    // eslint-disable-line guard-for-in\\n    var baseEvents = EVENT_NAME_MAP[baseEventName];\\n    for (var styleName in baseEvents) {\\n      if (styleName in style) {\\n        endEvents.push(baseEvents[styleName]);\\n        break;\\n      }\\n    }\\n  }\\n}\\n\\nif (canUseDOM) {\\n  detectEvents();\\n}\\n\\n// We use the raw {add|remove}EventListener() call because EventListener\\n// does not know how to remove event listeners and we really should\\n// clean up. Also, these events are not triggered in older browsers\\n// so we should be A-OK here.\\n\\nfunction addEventListener(node, eventName, eventListener) {\\n  node.addEventListener(eventName, eventListener, false);\\n}\\n\\nfunction removeEventListener(node, eventName, eventListener) {\\n  node.removeEventListener(eventName, eventListener, false);\\n}\\n\\nvar ReactTransitionEvents = {\\n  addEndEventListener: function addEndEventListener(node, eventListener) {\\n    if (endEvents.length === 0) {\\n      // If CSS transitions are not supported, trigger an \\\"end animation\\\"\\n      // event immediately.\\n      window.setTimeout(eventListener, 0);\\n      return;\\n    }\\n    endEvents.forEach(function (endEvent) {\\n      addEventListener(node, endEvent, eventListener);\\n    });\\n  },\\n  removeEndEventListener: function removeEndEventListener(node, eventListener) {\\n    if (endEvents.length === 0) {\\n      return;\\n    }\\n    endEvents.forEach(function (endEvent) {\\n      removeEventListener(node, endEvent, eventListener);\\n    });\\n  }\\n};\\n\\nexports['default'] = ReactTransitionEvents;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/utils/TransitionEvents.js\\n// module id = 376\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/TransitionEvents.js?\");\n\n/***/ },\n/* 377 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/Glyphicon.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends3 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends4 = _interopRequireDefault(_extends3);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  /**\\n   * An icon name. See e.g. http://getbootstrap.com/components/#glyphicons\\n   */\\n  glyph: _react2['default'].PropTypes.string.isRequired\\n};\\n\\nvar Glyphicon = function (_React$Component) {\\n  (0, _inherits3['default'])(Glyphicon, _React$Component);\\n\\n  function Glyphicon() {\\n    (0, _classCallCheck3['default'])(this, Glyphicon);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Glyphicon.prototype.render = function render() {\\n    var _extends2;\\n\\n    var _props = this.props,\\n        glyph = _props.glyph,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['glyph', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _extends4['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), (_extends2 = {}, _extends2[(0, _bootstrapUtils.prefix)(bsProps, glyph)] = true, _extends2));\\n\\n    return _react2['default'].createElement('span', (0, _extends4['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return Glyphicon;\\n}(_react2['default'].Component);\\n\\nGlyphicon.propTypes = propTypes;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('glyphicon', Glyphicon);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Glyphicon.js\\n// module id = 377\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Glyphicon.js?\");\n\n/***/ },\n/* 378 */\n/*!*******************************************!*\\\n  !*** ./~/react-bootstrap/lib/Checkbox.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _warning = __webpack_require__(/*! warning */ 41);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  inline: _react2['default'].PropTypes.bool,\\n  disabled: _react2['default'].PropTypes.bool,\\n  /**\\n   * Only valid if `inline` is not set.\\n   */\\n  validationState: _react2['default'].PropTypes.oneOf(['success', 'warning', 'error', null]),\\n  /**\\n   * Attaches a ref to the `<input>` element. Only functions can be used here.\\n   *\\n   * ```js\\n   * <Checkbox inputRef={ref => { this.input = ref; }} />\\n   * ```\\n   */\\n  inputRef: _react2['default'].PropTypes.func\\n};\\n\\nvar defaultProps = {\\n  inline: false,\\n  disabled: false\\n};\\n\\nvar Checkbox = function (_React$Component) {\\n  (0, _inherits3['default'])(Checkbox, _React$Component);\\n\\n  function Checkbox() {\\n    (0, _classCallCheck3['default'])(this, Checkbox);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Checkbox.prototype.render = function render() {\\n    var _props = this.props,\\n        inline = _props.inline,\\n        disabled = _props.disabled,\\n        validationState = _props.validationState,\\n        inputRef = _props.inputRef,\\n        className = _props.className,\\n        style = _props.style,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['inline', 'disabled', 'validationState', 'inputRef', 'className', 'style', 'children']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var input = _react2['default'].createElement('input', (0, _extends3['default'])({}, elementProps, {\\n      ref: inputRef,\\n      type: 'checkbox',\\n      disabled: disabled\\n    }));\\n\\n    if (inline) {\\n      var _classes2;\\n\\n      var _classes = (_classes2 = {}, _classes2[(0, _bootstrapUtils.prefix)(bsProps, 'inline')] = true, _classes2.disabled = disabled, _classes2);\\n\\n      // Use a warning here instead of in propTypes to get better-looking\\n      // generated documentation.\\n      process.env.NODE_ENV !== 'production' ? (0, _warning2['default'])(!validationState, '`validationState` is ignored on `<Checkbox inline>`. To display ' + 'validation state on an inline checkbox, set `validationState` on a ' + 'parent `<FormGroup>` or other element instead.') : void 0;\\n\\n      return _react2['default'].createElement(\\n        'label',\\n        { className: (0, _classnames2['default'])(className, _classes), style: style },\\n        input,\\n        children\\n      );\\n    }\\n\\n    var classes = (0, _extends3['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), {\\n      disabled: disabled\\n    });\\n    if (validationState) {\\n      classes['has-' + validationState] = true;\\n    }\\n\\n    return _react2['default'].createElement(\\n      'div',\\n      { className: (0, _classnames2['default'])(className, classes), style: style },\\n      _react2['default'].createElement(\\n        'label',\\n        null,\\n        input,\\n        children\\n      )\\n    );\\n  };\\n\\n  return Checkbox;\\n}(_react2['default'].Component);\\n\\nCheckbox.propTypes = propTypes;\\nCheckbox.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('checkbox', Checkbox);\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Checkbox.js\\n// module id = 378\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Checkbox.js?\");\n\n/***/ },\n/* 379 */\n/*!*******************************************!*\\\n  !*** ./~/react-bootstrap/lib/Clearfix.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _capitalize = __webpack_require__(/*! ./utils/capitalize */ 380);\\n\\nvar _capitalize2 = _interopRequireDefault(_capitalize);\\n\\nvar _StyleConfig = __webpack_require__(/*! ./utils/StyleConfig */ 356);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  componentClass: _elementType2['default'],\\n\\n  /**\\n   * Apply clearfix\\n   *\\n   * on Extra small devices Phones\\n   *\\n   * adds class `visible-xs-block`\\n   */\\n  visibleXsBlock: _react2['default'].PropTypes.bool,\\n  /**\\n   * Apply clearfix\\n   *\\n   * on Small devices Tablets\\n   *\\n   * adds class `visible-sm-block`\\n   */\\n  visibleSmBlock: _react2['default'].PropTypes.bool,\\n  /**\\n   * Apply clearfix\\n   *\\n   * on Medium devices Desktops\\n   *\\n   * adds class `visible-md-block`\\n   */\\n  visibleMdBlock: _react2['default'].PropTypes.bool,\\n  /**\\n   * Apply clearfix\\n   *\\n   * on Large devices Desktops\\n   *\\n   * adds class `visible-lg-block`\\n   */\\n  visibleLgBlock: _react2['default'].PropTypes.bool\\n};\\n\\nvar defaultProps = {\\n  componentClass: 'div'\\n};\\n\\nvar Clearfix = function (_React$Component) {\\n  (0, _inherits3['default'])(Clearfix, _React$Component);\\n\\n  function Clearfix() {\\n    (0, _classCallCheck3['default'])(this, Clearfix);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Clearfix.prototype.render = function render() {\\n    var _props = this.props,\\n        Component = _props.componentClass,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['componentClass', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    _StyleConfig.DEVICE_SIZES.forEach(function (size) {\\n      var propName = 'visible' + (0, _capitalize2['default'])(size) + 'Block';\\n      if (elementProps[propName]) {\\n        classes['visible-' + size + '-block'] = true;\\n      }\\n\\n      delete elementProps[propName];\\n    });\\n\\n    return _react2['default'].createElement(Component, (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return Clearfix;\\n}(_react2['default'].Component);\\n\\nClearfix.propTypes = propTypes;\\nClearfix.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('clearfix', Clearfix);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Clearfix.js\\n// module id = 379\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Clearfix.js?\");\n\n/***/ },\n/* 380 */\n/*!***************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/capitalize.js ***!\n  \\***************************************************/\n/***/ function(module, exports) {\n\n\teval(\"\\\"use strict\\\";\\n\\nexports.__esModule = true;\\nexports[\\\"default\\\"] = capitalize;\\nfunction capitalize(string) {\\n  return \\\"\\\" + string.charAt(0).toUpperCase() + string.slice(1);\\n}\\nmodule.exports = exports[\\\"default\\\"];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/utils/capitalize.js\\n// module id = 380\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/capitalize.js?\");\n\n/***/ },\n/* 381 */\n/*!***********************************************!*\\\n  !*** ./~/react-bootstrap/lib/ControlLabel.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _warning = __webpack_require__(/*! warning */ 41);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  /**\\n   * Uses `controlId` from `<FormGroup>` if not explicitly specified.\\n   */\\n  htmlFor: _react2['default'].PropTypes.string,\\n  srOnly: _react2['default'].PropTypes.bool\\n};\\n\\nvar defaultProps = {\\n  srOnly: false\\n};\\n\\nvar contextTypes = {\\n  $bs_formGroup: _react2['default'].PropTypes.object\\n};\\n\\nvar ControlLabel = function (_React$Component) {\\n  (0, _inherits3['default'])(ControlLabel, _React$Component);\\n\\n  function ControlLabel() {\\n    (0, _classCallCheck3['default'])(this, ControlLabel);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  ControlLabel.prototype.render = function render() {\\n    var formGroup = this.context.$bs_formGroup;\\n    var controlId = formGroup && formGroup.controlId;\\n\\n    var _props = this.props,\\n        _props$htmlFor = _props.htmlFor,\\n        htmlFor = _props$htmlFor === undefined ? controlId : _props$htmlFor,\\n        srOnly = _props.srOnly,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['htmlFor', 'srOnly', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    process.env.NODE_ENV !== 'production' ? (0, _warning2['default'])(controlId == null || htmlFor === controlId, '`controlId` is ignored on `<ControlLabel>` when `htmlFor` is specified.') : void 0;\\n\\n    var classes = (0, _extends3['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), {\\n      'sr-only': srOnly\\n    });\\n\\n    return _react2['default'].createElement('label', (0, _extends3['default'])({}, elementProps, {\\n      htmlFor: htmlFor,\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return ControlLabel;\\n}(_react2['default'].Component);\\n\\nControlLabel.propTypes = propTypes;\\nControlLabel.defaultProps = defaultProps;\\nControlLabel.contextTypes = contextTypes;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('control-label', ControlLabel);\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/ControlLabel.js\\n// module id = 381\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ControlLabel.js?\");\n\n/***/ },\n/* 382 */\n/*!**************************************!*\\\n  !*** ./~/react-bootstrap/lib/Col.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _StyleConfig = __webpack_require__(/*! ./utils/StyleConfig */ 356);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  componentClass: _elementType2['default'],\\n\\n  /**\\n   * The number of columns you wish to span\\n   *\\n   * for Extra small devices Phones (<768px)\\n   *\\n   * class-prefix `col-xs-`\\n   */\\n  xs: _react2['default'].PropTypes.number,\\n  /**\\n   * The number of columns you wish to span\\n   *\\n   * for Small devices Tablets (≥768px)\\n   *\\n   * class-prefix `col-sm-`\\n   */\\n  sm: _react2['default'].PropTypes.number,\\n  /**\\n   * The number of columns you wish to span\\n   *\\n   * for Medium devices Desktops (≥992px)\\n   *\\n   * class-prefix `col-md-`\\n   */\\n  md: _react2['default'].PropTypes.number,\\n  /**\\n   * The number of columns you wish to span\\n   *\\n   * for Large devices Desktops (≥1200px)\\n   *\\n   * class-prefix `col-lg-`\\n   */\\n  lg: _react2['default'].PropTypes.number,\\n  /**\\n   * Hide column\\n   *\\n   * on Extra small devices Phones\\n   *\\n   * adds class `hidden-xs`\\n   */\\n  xsHidden: _react2['default'].PropTypes.bool,\\n  /**\\n   * Hide column\\n   *\\n   * on Small devices Tablets\\n   *\\n   * adds class `hidden-sm`\\n   */\\n  smHidden: _react2['default'].PropTypes.bool,\\n  /**\\n   * Hide column\\n   *\\n   * on Medium devices Desktops\\n   *\\n   * adds class `hidden-md`\\n   */\\n  mdHidden: _react2['default'].PropTypes.bool,\\n  /**\\n   * Hide column\\n   *\\n   * on Large devices Desktops\\n   *\\n   * adds class `hidden-lg`\\n   */\\n  lgHidden: _react2['default'].PropTypes.bool,\\n  /**\\n   * Move columns to the right\\n   *\\n   * for Extra small devices Phones\\n   *\\n   * class-prefix `col-xs-offset-`\\n   */\\n  xsOffset: _react2['default'].PropTypes.number,\\n  /**\\n   * Move columns to the right\\n   *\\n   * for Small devices Tablets\\n   *\\n   * class-prefix `col-sm-offset-`\\n   */\\n  smOffset: _react2['default'].PropTypes.number,\\n  /**\\n   * Move columns to the right\\n   *\\n   * for Medium devices Desktops\\n   *\\n   * class-prefix `col-md-offset-`\\n   */\\n  mdOffset: _react2['default'].PropTypes.number,\\n  /**\\n   * Move columns to the right\\n   *\\n   * for Large devices Desktops\\n   *\\n   * class-prefix `col-lg-offset-`\\n   */\\n  lgOffset: _react2['default'].PropTypes.number,\\n  /**\\n   * Change the order of grid columns to the right\\n   *\\n   * for Extra small devices Phones\\n   *\\n   * class-prefix `col-xs-push-`\\n   */\\n  xsPush: _react2['default'].PropTypes.number,\\n  /**\\n   * Change the order of grid columns to the right\\n   *\\n   * for Small devices Tablets\\n   *\\n   * class-prefix `col-sm-push-`\\n   */\\n  smPush: _react2['default'].PropTypes.number,\\n  /**\\n   * Change the order of grid columns to the right\\n   *\\n   * for Medium devices Desktops\\n   *\\n   * class-prefix `col-md-push-`\\n   */\\n  mdPush: _react2['default'].PropTypes.number,\\n  /**\\n   * Change the order of grid columns to the right\\n   *\\n   * for Large devices Desktops\\n   *\\n   * class-prefix `col-lg-push-`\\n   */\\n  lgPush: _react2['default'].PropTypes.number,\\n  /**\\n   * Change the order of grid columns to the left\\n   *\\n   * for Extra small devices Phones\\n   *\\n   * class-prefix `col-xs-pull-`\\n   */\\n  xsPull: _react2['default'].PropTypes.number,\\n  /**\\n   * Change the order of grid columns to the left\\n   *\\n   * for Small devices Tablets\\n   *\\n   * class-prefix `col-sm-pull-`\\n   */\\n  smPull: _react2['default'].PropTypes.number,\\n  /**\\n   * Change the order of grid columns to the left\\n   *\\n   * for Medium devices Desktops\\n   *\\n   * class-prefix `col-md-pull-`\\n   */\\n  mdPull: _react2['default'].PropTypes.number,\\n  /**\\n   * Change the order of grid columns to the left\\n   *\\n   * for Large devices Desktops\\n   *\\n   * class-prefix `col-lg-pull-`\\n   */\\n  lgPull: _react2['default'].PropTypes.number\\n};\\n\\nvar defaultProps = {\\n  componentClass: 'div'\\n};\\n\\nvar Col = function (_React$Component) {\\n  (0, _inherits3['default'])(Col, _React$Component);\\n\\n  function Col() {\\n    (0, _classCallCheck3['default'])(this, Col);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Col.prototype.render = function render() {\\n    var _props = this.props,\\n        Component = _props.componentClass,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['componentClass', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = [];\\n\\n    _StyleConfig.DEVICE_SIZES.forEach(function (size) {\\n      function popProp(propSuffix, modifier) {\\n        var propName = '' + size + propSuffix;\\n        var propValue = elementProps[propName];\\n\\n        if (propValue != null) {\\n          classes.push((0, _bootstrapUtils.prefix)(bsProps, '' + size + modifier + '-' + propValue));\\n        }\\n\\n        delete elementProps[propName];\\n      }\\n\\n      popProp('', '');\\n      popProp('Offset', '-offset');\\n      popProp('Push', '-push');\\n      popProp('Pull', '-pull');\\n\\n      var hiddenPropName = size + 'Hidden';\\n      if (elementProps[hiddenPropName]) {\\n        classes.push('hidden-' + size);\\n      }\\n      delete elementProps[hiddenPropName];\\n    });\\n\\n    return _react2['default'].createElement(Component, (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return Col;\\n}(_react2['default'].Component);\\n\\nCol.propTypes = propTypes;\\nCol.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('col', Col);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Col.js\\n// module id = 382\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Col.js?\");\n\n/***/ },\n/* 383 */\n/*!*******************************************!*\\\n  !*** ./~/react-bootstrap/lib/Collapse.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _style = __webpack_require__(/*! dom-helpers/style */ 384);\\n\\nvar _style2 = _interopRequireDefault(_style);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _Transition = __webpack_require__(/*! react-overlays/lib/Transition */ 392);\\n\\nvar _Transition2 = _interopRequireDefault(_Transition);\\n\\nvar _capitalize = __webpack_require__(/*! ./utils/capitalize */ 380);\\n\\nvar _capitalize2 = _interopRequireDefault(_capitalize);\\n\\nvar _createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 357);\\n\\nvar _createChainedFunction2 = _interopRequireDefault(_createChainedFunction);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar MARGINS = {\\n  height: ['marginTop', 'marginBottom'],\\n  width: ['marginLeft', 'marginRight']\\n};\\n\\n// reading a dimension prop will cause the browser to recalculate,\\n// which will let our animations work\\nfunction triggerBrowserReflow(node) {\\n  node.offsetHeight; // eslint-disable-line no-unused-expressions\\n}\\n\\nfunction getDimensionValue(dimension, elem) {\\n  var value = elem['offset' + (0, _capitalize2['default'])(dimension)];\\n  var margins = MARGINS[dimension];\\n\\n  return value + parseInt((0, _style2['default'])(elem, margins[0]), 10) + parseInt((0, _style2['default'])(elem, margins[1]), 10);\\n}\\n\\nvar propTypes = {\\n  /**\\n   * Show the component; triggers the expand or collapse animation\\n   */\\n  'in': _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Unmount the component (remove it from the DOM) when it is collapsed\\n   */\\n  unmountOnExit: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Run the expand animation when the component mounts, if it is initially\\n   * shown\\n   */\\n  transitionAppear: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Duration of the collapse animation in milliseconds, to ensure that\\n   * finishing callbacks are fired even if the original browser transition end\\n   * events are canceled\\n   */\\n  timeout: _react2['default'].PropTypes.number,\\n\\n  /**\\n   * Callback fired before the component expands\\n   */\\n  onEnter: _react2['default'].PropTypes.func,\\n  /**\\n   * Callback fired after the component starts to expand\\n   */\\n  onEntering: _react2['default'].PropTypes.func,\\n  /**\\n   * Callback fired after the component has expanded\\n   */\\n  onEntered: _react2['default'].PropTypes.func,\\n  /**\\n   * Callback fired before the component collapses\\n   */\\n  onExit: _react2['default'].PropTypes.func,\\n  /**\\n   * Callback fired after the component starts to collapse\\n   */\\n  onExiting: _react2['default'].PropTypes.func,\\n  /**\\n   * Callback fired after the component has collapsed\\n   */\\n  onExited: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * The dimension used when collapsing, or a function that returns the\\n   * dimension\\n   *\\n   * _Note: Bootstrap only partially supports 'width'!\\n   * You will need to supply your own CSS animation for the `.width` CSS class._\\n   */\\n  dimension: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.oneOf(['height', 'width']), _react2['default'].PropTypes.func]),\\n\\n  /**\\n   * Function that returns the height or width of the animating DOM node\\n   *\\n   * Allows for providing some custom logic for how much the Collapse component\\n   * should animate in its specified dimension. Called with the current\\n   * dimension prop value and the DOM node.\\n   */\\n  getDimensionValue: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * ARIA role of collapsible element\\n   */\\n  role: _react2['default'].PropTypes.string\\n};\\n\\nvar defaultProps = {\\n  'in': false,\\n  timeout: 300,\\n  unmountOnExit: false,\\n  transitionAppear: false,\\n\\n  dimension: 'height',\\n  getDimensionValue: getDimensionValue\\n};\\n\\nvar Collapse = function (_React$Component) {\\n  (0, _inherits3['default'])(Collapse, _React$Component);\\n\\n  function Collapse(props, context) {\\n    (0, _classCallCheck3['default'])(this, Collapse);\\n\\n    var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props, context));\\n\\n    _this.handleEnter = _this.handleEnter.bind(_this);\\n    _this.handleEntering = _this.handleEntering.bind(_this);\\n    _this.handleEntered = _this.handleEntered.bind(_this);\\n    _this.handleExit = _this.handleExit.bind(_this);\\n    _this.handleExiting = _this.handleExiting.bind(_this);\\n    return _this;\\n  }\\n\\n  /* -- Expanding -- */\\n\\n\\n  Collapse.prototype.handleEnter = function handleEnter(elem) {\\n    var dimension = this._dimension();\\n    elem.style[dimension] = '0';\\n  };\\n\\n  Collapse.prototype.handleEntering = function handleEntering(elem) {\\n    var dimension = this._dimension();\\n    elem.style[dimension] = this._getScrollDimensionValue(elem, dimension);\\n  };\\n\\n  Collapse.prototype.handleEntered = function handleEntered(elem) {\\n    var dimension = this._dimension();\\n    elem.style[dimension] = null;\\n  };\\n\\n  /* -- Collapsing -- */\\n\\n\\n  Collapse.prototype.handleExit = function handleExit(elem) {\\n    var dimension = this._dimension();\\n    elem.style[dimension] = this.props.getDimensionValue(dimension, elem) + 'px';\\n    triggerBrowserReflow(elem);\\n  };\\n\\n  Collapse.prototype.handleExiting = function handleExiting(elem) {\\n    var dimension = this._dimension();\\n    elem.style[dimension] = '0';\\n  };\\n\\n  Collapse.prototype._dimension = function _dimension() {\\n    return typeof this.props.dimension === 'function' ? this.props.dimension() : this.props.dimension;\\n  };\\n\\n  // for testing\\n\\n\\n  Collapse.prototype._getScrollDimensionValue = function _getScrollDimensionValue(elem, dimension) {\\n    return elem['scroll' + (0, _capitalize2['default'])(dimension)] + 'px';\\n  };\\n\\n  Collapse.prototype.render = function render() {\\n    var _props = this.props,\\n        onEnter = _props.onEnter,\\n        onEntering = _props.onEntering,\\n        onEntered = _props.onEntered,\\n        onExit = _props.onExit,\\n        onExiting = _props.onExiting,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['onEnter', 'onEntering', 'onEntered', 'onExit', 'onExiting', 'className']);\\n\\n\\n    delete props.dimension;\\n    delete props.getDimensionValue;\\n\\n    var handleEnter = (0, _createChainedFunction2['default'])(this.handleEnter, onEnter);\\n    var handleEntering = (0, _createChainedFunction2['default'])(this.handleEntering, onEntering);\\n    var handleEntered = (0, _createChainedFunction2['default'])(this.handleEntered, onEntered);\\n    var handleExit = (0, _createChainedFunction2['default'])(this.handleExit, onExit);\\n    var handleExiting = (0, _createChainedFunction2['default'])(this.handleExiting, onExiting);\\n\\n    var classes = {\\n      width: this._dimension() === 'width'\\n    };\\n\\n    return _react2['default'].createElement(_Transition2['default'], (0, _extends3['default'])({}, props, {\\n      'aria-expanded': props.role ? props['in'] : null,\\n      className: (0, _classnames2['default'])(className, classes),\\n      exitedClassName: 'collapse',\\n      exitingClassName: 'collapsing',\\n      enteredClassName: 'collapse in',\\n      enteringClassName: 'collapsing',\\n      onEnter: handleEnter,\\n      onEntering: handleEntering,\\n      onEntered: handleEntered,\\n      onExit: handleExit,\\n      onExiting: handleExiting\\n    }));\\n  };\\n\\n  return Collapse;\\n}(_react2['default'].Component);\\n\\nCollapse.propTypes = propTypes;\\nCollapse.defaultProps = defaultProps;\\n\\nexports['default'] = Collapse;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Collapse.js\\n// module id = 383\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Collapse.js?\");\n\n/***/ },\n/* 384 */\n/*!**************************************!*\\\n  !*** ./~/dom-helpers/style/index.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar camelize = __webpack_require__(/*! ../util/camelizeStyle */ 385),\\n    hyphenate = __webpack_require__(/*! ../util/hyphenateStyle */ 387),\\n    _getComputedStyle = __webpack_require__(/*! ./getComputedStyle */ 389),\\n    removeStyle = __webpack_require__(/*! ./removeStyle */ 391);\\n\\nvar has = Object.prototype.hasOwnProperty;\\n\\nmodule.exports = function style(node, property, value) {\\n  var css = '',\\n      props = property;\\n\\n  if (typeof property === 'string') {\\n\\n    if (value === undefined) return node.style[camelize(property)] || _getComputedStyle(node).getPropertyValue(hyphenate(property));else (props = {})[property] = value;\\n  }\\n\\n  for (var key in props) if (has.call(props, key)) {\\n    !props[key] && props[key] !== 0 ? removeStyle(node, hyphenate(key)) : css += hyphenate(key) + ':' + props[key] + ';';\\n  }\\n\\n  node.style.cssText += ';' + css;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/style/index.js\\n// module id = 384\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/style/index.js?\");\n\n/***/ },\n/* 385 */\n/*!*********************************************!*\\\n  !*** ./~/dom-helpers/util/camelizeStyle.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\r\\n * Copyright 2014-2015, Facebook, Inc.\\r\\n * All rights reserved.\\r\\n * https://github.com/facebook/react/blob/2aeb8a2a6beb00617a4217f7f8284924fa2ad819/src/vendor/core/camelizeStyleName.js\\r\\n */\\n\\n'use strict';\\nvar camelize = __webpack_require__(/*! ./camelize */ 386);\\nvar msPattern = /^-ms-/;\\n\\nmodule.exports = function camelizeStyleName(string) {\\n  return camelize(string.replace(msPattern, 'ms-'));\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/util/camelizeStyle.js\\n// module id = 385\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/util/camelizeStyle.js?\");\n\n/***/ },\n/* 386 */\n/*!****************************************!*\\\n  !*** ./~/dom-helpers/util/camelize.js ***!\n  \\****************************************/\n/***/ function(module, exports) {\n\n\teval(\"\\\"use strict\\\";\\n\\nvar rHyphen = /-(.)/g;\\n\\nmodule.exports = function camelize(string) {\\n  return string.replace(rHyphen, function (_, chr) {\\n    return chr.toUpperCase();\\n  });\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/util/camelize.js\\n// module id = 386\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/util/camelize.js?\");\n\n/***/ },\n/* 387 */\n/*!**********************************************!*\\\n  !*** ./~/dom-helpers/util/hyphenateStyle.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\r\\n * Copyright 2013-2014, Facebook, Inc.\\r\\n * All rights reserved.\\r\\n * https://github.com/facebook/react/blob/2aeb8a2a6beb00617a4217f7f8284924fa2ad819/src/vendor/core/hyphenateStyleName.js\\r\\n */\\n\\n\\\"use strict\\\";\\n\\nvar hyphenate = __webpack_require__(/*! ./hyphenate */ 388);\\nvar msPattern = /^ms-/;\\n\\nmodule.exports = function hyphenateStyleName(string) {\\n  return hyphenate(string).replace(msPattern, \\\"-ms-\\\");\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/util/hyphenateStyle.js\\n// module id = 387\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/util/hyphenateStyle.js?\");\n\n/***/ },\n/* 388 */\n/*!*****************************************!*\\\n  !*** ./~/dom-helpers/util/hyphenate.js ***!\n  \\*****************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n\\nvar rUpper = /([A-Z])/g;\\n\\nmodule.exports = function hyphenate(string) {\\n  return string.replace(rUpper, '-$1').toLowerCase();\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/util/hyphenate.js\\n// module id = 388\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/util/hyphenate.js?\");\n\n/***/ },\n/* 389 */\n/*!*************************************************!*\\\n  !*** ./~/dom-helpers/style/getComputedStyle.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar babelHelpers = __webpack_require__(/*! ../util/babelHelpers.js */ 390);\\n\\nvar _utilCamelizeStyle = __webpack_require__(/*! ../util/camelizeStyle */ 385);\\n\\nvar _utilCamelizeStyle2 = babelHelpers.interopRequireDefault(_utilCamelizeStyle);\\n\\nvar rposition = /^(top|right|bottom|left)$/;\\nvar rnumnonpx = /^([+-]?(?:\\\\d*\\\\.|)\\\\d+(?:[eE][+-]?\\\\d+|))(?!px)[a-z%]+$/i;\\n\\nmodule.exports = function _getComputedStyle(node) {\\n  if (!node) throw new TypeError('No Element passed to `getComputedStyle()`');\\n  var doc = node.ownerDocument;\\n\\n  return 'defaultView' in doc ? doc.defaultView.opener ? node.ownerDocument.defaultView.getComputedStyle(node, null) : window.getComputedStyle(node, null) : { //ie 8 \\\"magic\\\" from: https://github.com/jquery/jquery/blob/1.11-stable/src/css/curCSS.js#L72\\n    getPropertyValue: function getPropertyValue(prop) {\\n      var style = node.style;\\n\\n      prop = (0, _utilCamelizeStyle2['default'])(prop);\\n\\n      if (prop == 'float') prop = 'styleFloat';\\n\\n      var current = node.currentStyle[prop] || null;\\n\\n      if (current == null && style && style[prop]) current = style[prop];\\n\\n      if (rnumnonpx.test(current) && !rposition.test(prop)) {\\n        // Remember the original values\\n        var left = style.left;\\n        var runStyle = node.runtimeStyle;\\n        var rsLeft = runStyle && runStyle.left;\\n\\n        // Put in the new values to get a computed value out\\n        if (rsLeft) runStyle.left = node.currentStyle.left;\\n\\n        style.left = prop === 'fontSize' ? '1em' : current;\\n        current = style.pixelLeft + 'px';\\n\\n        // Revert the changed values\\n        style.left = left;\\n        if (rsLeft) runStyle.left = rsLeft;\\n      }\\n\\n      return current;\\n    }\\n  };\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/style/getComputedStyle.js\\n// module id = 389\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/style/getComputedStyle.js?\");\n\n/***/ },\n/* 390 */\n/*!********************************************!*\\\n  !*** ./~/dom-helpers/util/babelHelpers.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\\n  if (true) {\\n    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n  } else if (typeof exports === \\\"object\\\") {\\n    factory(exports);\\n  } else {\\n    factory(root.babelHelpers = {});\\n  }\\n})(this, function (global) {\\n  var babelHelpers = global;\\n\\n  babelHelpers.interopRequireDefault = function (obj) {\\n    return obj && obj.__esModule ? obj : {\\n      \\\"default\\\": obj\\n    };\\n  };\\n\\n  babelHelpers._extends = Object.assign || function (target) {\\n    for (var i = 1; i < arguments.length; i++) {\\n      var source = arguments[i];\\n\\n      for (var key in source) {\\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\\n          target[key] = source[key];\\n        }\\n      }\\n    }\\n\\n    return target;\\n  };\\n})\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/util/babelHelpers.js\\n// module id = 390\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/util/babelHelpers.js?\");\n\n/***/ },\n/* 391 */\n/*!********************************************!*\\\n  !*** ./~/dom-helpers/style/removeStyle.js ***!\n  \\********************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n\\nmodule.exports = function removeStyle(node, key) {\\n  return 'removeProperty' in node.style ? node.style.removeProperty(key) : node.style.removeAttribute(key);\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/style/removeStyle.js\\n// module id = 391\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/style/removeStyle.js?\");\n\n/***/ },\n/* 392 */\n/*!********************************************!*\\\n  !*** ./~/react-overlays/lib/Transition.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n  value: true\\n});\\nexports.EXITING = exports.ENTERED = exports.ENTERING = exports.EXITED = exports.UNMOUNTED = undefined;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\\"value\\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _reactDom = __webpack_require__(/*! react-dom */ 110);\\n\\nvar _reactDom2 = _interopRequireDefault(_reactDom);\\n\\nvar _properties = __webpack_require__(/*! dom-helpers/transition/properties */ 393);\\n\\nvar _properties2 = _interopRequireDefault(_properties);\\n\\nvar _on = __webpack_require__(/*! dom-helpers/events/on */ 395);\\n\\nvar _on2 = _interopRequireDefault(_on);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\\n\\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\\"Cannot call a class as a function\\\"); } }\\n\\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\\\"this hasn't been initialised - super() hasn't been called\\\"); } return call && (typeof call === \\\"object\\\" || typeof call === \\\"function\\\") ? call : self; }\\n\\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \\\"function\\\" && superClass !== null) { throw new TypeError(\\\"Super expression must either be null or a function, not \\\" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\\n\\nvar transitionEndEvent = _properties2.default.end;\\n\\nvar UNMOUNTED = exports.UNMOUNTED = 0;\\nvar EXITED = exports.EXITED = 1;\\nvar ENTERING = exports.ENTERING = 2;\\nvar ENTERED = exports.ENTERED = 3;\\nvar EXITING = exports.EXITING = 4;\\n\\n/**\\n * The Transition component lets you define and run css transitions with a simple declarative api.\\n * It works similar to React's own [CSSTransitionGroup](http://facebook.github.io/react/docs/animation.html#high-level-api-reactcsstransitiongroup)\\n * but is specifically optimized for transitioning a single child \\\"in\\\" or \\\"out\\\".\\n *\\n * You don't even need to use class based css transitions if you don't want to (but it is easiest).\\n * The extensive set of lifecyle callbacks means you have control over\\n * the transitioning now at each step of the way.\\n */\\n\\nvar Transition = function (_React$Component) {\\n  _inherits(Transition, _React$Component);\\n\\n  function Transition(props, context) {\\n    _classCallCheck(this, Transition);\\n\\n    var _this = _possibleConstructorReturn(this, (Transition.__proto__ || Object.getPrototypeOf(Transition)).call(this, props, context));\\n\\n    var initialStatus = void 0;\\n    if (props.in) {\\n      // Start enter transition in componentDidMount.\\n      initialStatus = props.transitionAppear ? EXITED : ENTERED;\\n    } else {\\n      initialStatus = props.unmountOnExit ? UNMOUNTED : EXITED;\\n    }\\n    _this.state = { status: initialStatus };\\n\\n    _this.nextCallback = null;\\n    return _this;\\n  }\\n\\n  _createClass(Transition, [{\\n    key: 'componentDidMount',\\n    value: function componentDidMount() {\\n      if (this.props.transitionAppear && this.props.in) {\\n        this.performEnter(this.props);\\n      }\\n    }\\n  }, {\\n    key: 'componentWillReceiveProps',\\n    value: function componentWillReceiveProps(nextProps) {\\n      if (nextProps.in && this.props.unmountOnExit) {\\n        if (this.state.status === UNMOUNTED) {\\n          // Start enter transition in componentDidUpdate.\\n          this.setState({ status: EXITED });\\n        }\\n      } else {\\n        this._needsUpdate = true;\\n      }\\n    }\\n  }, {\\n    key: 'componentDidUpdate',\\n    value: function componentDidUpdate() {\\n      var status = this.state.status;\\n\\n      if (this.props.unmountOnExit && status === EXITED) {\\n        // EXITED is always a transitional state to either ENTERING or UNMOUNTED\\n        // when using unmountOnExit.\\n        if (this.props.in) {\\n          this.performEnter(this.props);\\n        } else {\\n          this.setState({ status: UNMOUNTED });\\n        }\\n\\n        return;\\n      }\\n\\n      // guard ensures we are only responding to prop changes\\n      if (this._needsUpdate) {\\n        this._needsUpdate = false;\\n\\n        if (this.props.in) {\\n          if (status === EXITING) {\\n            this.performEnter(this.props);\\n          } else if (status === EXITED) {\\n            this.performEnter(this.props);\\n          }\\n          // Otherwise we're already entering or entered.\\n        } else {\\n          if (status === ENTERING || status === ENTERED) {\\n            this.performExit(this.props);\\n          }\\n          // Otherwise we're already exited or exiting.\\n        }\\n      }\\n    }\\n  }, {\\n    key: 'componentWillUnmount',\\n    value: function componentWillUnmount() {\\n      this.cancelNextCallback();\\n    }\\n  }, {\\n    key: 'performEnter',\\n    value: function performEnter(props) {\\n      var _this2 = this;\\n\\n      this.cancelNextCallback();\\n      var node = _reactDom2.default.findDOMNode(this);\\n\\n      // Not this.props, because we might be about to receive new props.\\n      props.onEnter(node);\\n\\n      this.safeSetState({ status: ENTERING }, function () {\\n        _this2.props.onEntering(node);\\n\\n        _this2.onTransitionEnd(node, function () {\\n          _this2.safeSetState({ status: ENTERED }, function () {\\n            _this2.props.onEntered(node);\\n          });\\n        });\\n      });\\n    }\\n  }, {\\n    key: 'performExit',\\n    value: function performExit(props) {\\n      var _this3 = this;\\n\\n      this.cancelNextCallback();\\n      var node = _reactDom2.default.findDOMNode(this);\\n\\n      // Not this.props, because we might be about to receive new props.\\n      props.onExit(node);\\n\\n      this.safeSetState({ status: EXITING }, function () {\\n        _this3.props.onExiting(node);\\n\\n        _this3.onTransitionEnd(node, function () {\\n          _this3.safeSetState({ status: EXITED }, function () {\\n            _this3.props.onExited(node);\\n          });\\n        });\\n      });\\n    }\\n  }, {\\n    key: 'cancelNextCallback',\\n    value: function cancelNextCallback() {\\n      if (this.nextCallback !== null) {\\n        this.nextCallback.cancel();\\n        this.nextCallback = null;\\n      }\\n    }\\n  }, {\\n    key: 'safeSetState',\\n    value: function safeSetState(nextState, callback) {\\n      // This shouldn't be necessary, but there are weird race conditions with\\n      // setState callbacks and unmounting in testing, so always make sure that\\n      // we can cancel any pending setState callbacks after we unmount.\\n      this.setState(nextState, this.setNextCallback(callback));\\n    }\\n  }, {\\n    key: 'setNextCallback',\\n    value: function setNextCallback(callback) {\\n      var _this4 = this;\\n\\n      var active = true;\\n\\n      this.nextCallback = function (event) {\\n        if (active) {\\n          active = false;\\n          _this4.nextCallback = null;\\n\\n          callback(event);\\n        }\\n      };\\n\\n      this.nextCallback.cancel = function () {\\n        active = false;\\n      };\\n\\n      return this.nextCallback;\\n    }\\n  }, {\\n    key: 'onTransitionEnd',\\n    value: function onTransitionEnd(node, handler) {\\n      this.setNextCallback(handler);\\n\\n      if (node) {\\n        (0, _on2.default)(node, transitionEndEvent, this.nextCallback);\\n        setTimeout(this.nextCallback, this.props.timeout);\\n      } else {\\n        setTimeout(this.nextCallback, 0);\\n      }\\n    }\\n  }, {\\n    key: 'render',\\n    value: function render() {\\n      var status = this.state.status;\\n      if (status === UNMOUNTED) {\\n        return null;\\n      }\\n\\n      var _props = this.props;\\n      var children = _props.children;\\n      var className = _props.className;\\n\\n      var childProps = _objectWithoutProperties(_props, ['children', 'className']);\\n\\n      Object.keys(Transition.propTypes).forEach(function (key) {\\n        return delete childProps[key];\\n      });\\n\\n      var transitionClassName = void 0;\\n      if (status === EXITED) {\\n        transitionClassName = this.props.exitedClassName;\\n      } else if (status === ENTERING) {\\n        transitionClassName = this.props.enteringClassName;\\n      } else if (status === ENTERED) {\\n        transitionClassName = this.props.enteredClassName;\\n      } else if (status === EXITING) {\\n        transitionClassName = this.props.exitingClassName;\\n      }\\n\\n      var child = _react2.default.Children.only(children);\\n      return _react2.default.cloneElement(child, _extends({}, childProps, {\\n        className: (0, _classnames2.default)(child.props.className, className, transitionClassName)\\n      }));\\n    }\\n  }]);\\n\\n  return Transition;\\n}(_react2.default.Component);\\n\\nTransition.propTypes = {\\n  /**\\n   * Show the component; triggers the enter or exit animation\\n   */\\n  in: _react2.default.PropTypes.bool,\\n\\n  /**\\n   * Unmount the component (remove it from the DOM) when it is not shown\\n   */\\n  unmountOnExit: _react2.default.PropTypes.bool,\\n\\n  /**\\n   * Run the enter animation when the component mounts, if it is initially\\n   * shown\\n   */\\n  transitionAppear: _react2.default.PropTypes.bool,\\n\\n  /**\\n   * A Timeout for the animation, in milliseconds, to ensure that a node doesn't\\n   * transition indefinately if the browser transitionEnd events are\\n   * canceled or interrupted.\\n   *\\n   * By default this is set to a high number (5 seconds) as a failsafe. You should consider\\n   * setting this to the duration of your animation (or a bit above it).\\n   */\\n  timeout: _react2.default.PropTypes.number,\\n\\n  /**\\n   * CSS class or classes applied when the component is exited\\n   */\\n  exitedClassName: _react2.default.PropTypes.string,\\n  /**\\n   * CSS class or classes applied while the component is exiting\\n   */\\n  exitingClassName: _react2.default.PropTypes.string,\\n  /**\\n   * CSS class or classes applied when the component is entered\\n   */\\n  enteredClassName: _react2.default.PropTypes.string,\\n  /**\\n   * CSS class or classes applied while the component is entering\\n   */\\n  enteringClassName: _react2.default.PropTypes.string,\\n\\n  /**\\n   * Callback fired before the \\\"entering\\\" classes are applied\\n   */\\n  onEnter: _react2.default.PropTypes.func,\\n  /**\\n   * Callback fired after the \\\"entering\\\" classes are applied\\n   */\\n  onEntering: _react2.default.PropTypes.func,\\n  /**\\n   * Callback fired after the \\\"enter\\\" classes are applied\\n   */\\n  onEntered: _react2.default.PropTypes.func,\\n  /**\\n   * Callback fired before the \\\"exiting\\\" classes are applied\\n   */\\n  onExit: _react2.default.PropTypes.func,\\n  /**\\n   * Callback fired after the \\\"exiting\\\" classes are applied\\n   */\\n  onExiting: _react2.default.PropTypes.func,\\n  /**\\n   * Callback fired after the \\\"exited\\\" classes are applied\\n   */\\n  onExited: _react2.default.PropTypes.func\\n};\\n\\n// Name the function so it is clearer in the documentation\\nfunction noop() {}\\n\\nTransition.displayName = 'Transition';\\n\\nTransition.defaultProps = {\\n  in: false,\\n  unmountOnExit: false,\\n  transitionAppear: false,\\n\\n  timeout: 5000,\\n\\n  onEnter: noop,\\n  onEntering: noop,\\n  onEntered: noop,\\n\\n  onExit: noop,\\n  onExiting: noop,\\n  onExited: noop\\n};\\n\\nexports.default = Transition;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-overlays/lib/Transition.js\\n// module id = 392\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-overlays/lib/Transition.js?\");\n\n/***/ },\n/* 393 */\n/*!************************************************!*\\\n  !*** ./~/dom-helpers/transition/properties.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\nvar canUseDOM = __webpack_require__(/*! ../util/inDOM */ 394);\\n\\nvar has = Object.prototype.hasOwnProperty,\\n    transform = 'transform',\\n    transition = {},\\n    transitionTiming,\\n    transitionDuration,\\n    transitionProperty,\\n    transitionDelay;\\n\\nif (canUseDOM) {\\n  transition = getTransitionProperties();\\n\\n  transform = transition.prefix + transform;\\n\\n  transitionProperty = transition.prefix + 'transition-property';\\n  transitionDuration = transition.prefix + 'transition-duration';\\n  transitionDelay = transition.prefix + 'transition-delay';\\n  transitionTiming = transition.prefix + 'transition-timing-function';\\n}\\n\\nmodule.exports = {\\n  transform: transform,\\n  end: transition.end,\\n  property: transitionProperty,\\n  timing: transitionTiming,\\n  delay: transitionDelay,\\n  duration: transitionDuration\\n};\\n\\nfunction getTransitionProperties() {\\n  var endEvent,\\n      prefix = '',\\n      transitions = {\\n    O: 'otransitionend',\\n    Moz: 'transitionend',\\n    Webkit: 'webkitTransitionEnd',\\n    ms: 'MSTransitionEnd'\\n  };\\n\\n  var element = document.createElement('div');\\n\\n  for (var vendor in transitions) if (has.call(transitions, vendor)) {\\n    if (element.style[vendor + 'TransitionProperty'] !== undefined) {\\n      prefix = '-' + vendor.toLowerCase() + '-';\\n      endEvent = transitions[vendor];\\n      break;\\n    }\\n  }\\n\\n  if (!endEvent && element.style.transitionProperty !== undefined) endEvent = 'transitionend';\\n\\n  return { end: endEvent, prefix: prefix };\\n}\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/transition/properties.js\\n// module id = 393\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/transition/properties.js?\");\n\n/***/ },\n/* 394 */\n/*!*************************************!*\\\n  !*** ./~/dom-helpers/util/inDOM.js ***!\n  \\*************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\nmodule.exports = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/util/inDOM.js\\n// module id = 394\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/util/inDOM.js?\");\n\n/***/ },\n/* 395 */\n/*!************************************!*\\\n  !*** ./~/dom-helpers/events/on.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\nvar canUseDOM = __webpack_require__(/*! ../util/inDOM */ 394);\\nvar on = function on() {};\\n\\nif (canUseDOM) {\\n  on = (function () {\\n\\n    if (document.addEventListener) return function (node, eventName, handler, capture) {\\n      return node.addEventListener(eventName, handler, capture || false);\\n    };else if (document.attachEvent) return function (node, eventName, handler) {\\n      return node.attachEvent('on' + eventName, handler);\\n    };\\n  })();\\n}\\n\\nmodule.exports = on;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/events/on.js\\n// module id = 395\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/events/on.js?\");\n\n/***/ },\n/* 396 */\n/*!*******************************************!*\\\n  !*** ./~/react-bootstrap/lib/Dropdown.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _activeElement = __webpack_require__(/*! dom-helpers/activeElement */ 397);\\n\\nvar _activeElement2 = _interopRequireDefault(_activeElement);\\n\\nvar _contains = __webpack_require__(/*! dom-helpers/query/contains */ 399);\\n\\nvar _contains2 = _interopRequireDefault(_contains);\\n\\nvar _keycode = __webpack_require__(/*! keycode */ 400);\\n\\nvar _keycode2 = _interopRequireDefault(_keycode);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _reactDom = __webpack_require__(/*! react-dom */ 110);\\n\\nvar _reactDom2 = _interopRequireDefault(_reactDom);\\n\\nvar _all = __webpack_require__(/*! react-prop-types/lib/all */ 371);\\n\\nvar _all2 = _interopRequireDefault(_all);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _isRequiredForA11y = __webpack_require__(/*! react-prop-types/lib/isRequiredForA11y */ 401);\\n\\nvar _isRequiredForA11y2 = _interopRequireDefault(_isRequiredForA11y);\\n\\nvar _uncontrollable = __webpack_require__(/*! uncontrollable */ 402);\\n\\nvar _uncontrollable2 = _interopRequireDefault(_uncontrollable);\\n\\nvar _warning = __webpack_require__(/*! warning */ 41);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nvar _ButtonGroup = __webpack_require__(/*! ./ButtonGroup */ 370);\\n\\nvar _ButtonGroup2 = _interopRequireDefault(_ButtonGroup);\\n\\nvar _DropdownMenu = __webpack_require__(/*! ./DropdownMenu */ 405);\\n\\nvar _DropdownMenu2 = _interopRequireDefault(_DropdownMenu);\\n\\nvar _DropdownToggle = __webpack_require__(/*! ./DropdownToggle */ 419);\\n\\nvar _DropdownToggle2 = _interopRequireDefault(_DropdownToggle);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 357);\\n\\nvar _createChainedFunction2 = _interopRequireDefault(_createChainedFunction);\\n\\nvar _PropTypes = __webpack_require__(/*! ./utils/PropTypes */ 420);\\n\\nvar _ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 358);\\n\\nvar _ValidComponentChildren2 = _interopRequireDefault(_ValidComponentChildren);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar TOGGLE_ROLE = _DropdownToggle2['default'].defaultProps.bsRole;\\nvar MENU_ROLE = _DropdownMenu2['default'].defaultProps.bsRole;\\n\\nvar propTypes = {\\n  /**\\n   * The menu will open above the dropdown button, instead of below it.\\n   */\\n  dropup: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * An html id attribute, necessary for assistive technologies, such as screen readers.\\n   * @type {string|number}\\n   * @required\\n   */\\n  id: (0, _isRequiredForA11y2['default'])(_react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number])),\\n\\n  componentClass: _elementType2['default'],\\n\\n  /**\\n   * The children of a Dropdown may be a `<Dropdown.Toggle>` or a `<Dropdown.Menu>`.\\n   * @type {node}\\n   */\\n  children: (0, _all2['default'])((0, _PropTypes.requiredRoles)(TOGGLE_ROLE, MENU_ROLE), (0, _PropTypes.exclusiveRoles)(MENU_ROLE)),\\n\\n  /**\\n   * Whether or not component is disabled.\\n   */\\n  disabled: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Align the menu to the right side of the Dropdown toggle\\n   */\\n  pullRight: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Whether or not the Dropdown is visible.\\n   *\\n   * @controllable onToggle\\n   */\\n  open: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * A callback fired when the Dropdown closes.\\n   */\\n  onClose: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * A callback fired when the Dropdown wishes to change visibility. Called with the requested\\n   * `open` value.\\n   *\\n   * ```js\\n   * function(Boolean isOpen) {}\\n   * ```\\n   * @controllable open\\n   */\\n  onToggle: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * A callback fired when a menu item is selected.\\n   *\\n   * ```js\\n   * (eventKey: any, event: Object) => any\\n   * ```\\n   */\\n  onSelect: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * If `'menuitem'`, causes the dropdown to behave like a menu item rather than\\n   * a menu button.\\n   */\\n  role: _react2['default'].PropTypes.string,\\n\\n  /**\\n   * Which event when fired outside the component will cause it to be closed\\n   */\\n  rootCloseEvent: _react2['default'].PropTypes.oneOf(['click', 'mousedown']),\\n\\n  /**\\n   * @private\\n   */\\n  onMouseEnter: _react2['default'].PropTypes.func,\\n  /**\\n   * @private\\n   */\\n  onMouseLeave: _react2['default'].PropTypes.func\\n};\\n\\nvar defaultProps = {\\n  componentClass: _ButtonGroup2['default']\\n};\\n\\nvar Dropdown = function (_React$Component) {\\n  (0, _inherits3['default'])(Dropdown, _React$Component);\\n\\n  function Dropdown(props, context) {\\n    (0, _classCallCheck3['default'])(this, Dropdown);\\n\\n    var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props, context));\\n\\n    _this.handleClick = _this.handleClick.bind(_this);\\n    _this.handleKeyDown = _this.handleKeyDown.bind(_this);\\n    _this.handleClose = _this.handleClose.bind(_this);\\n\\n    _this._focusInDropdown = false;\\n    _this.lastOpenEventType = null;\\n    return _this;\\n  }\\n\\n  Dropdown.prototype.componentDidMount = function componentDidMount() {\\n    this.focusNextOnOpen();\\n  };\\n\\n  Dropdown.prototype.componentWillUpdate = function componentWillUpdate(nextProps) {\\n    if (!nextProps.open && this.props.open) {\\n      this._focusInDropdown = (0, _contains2['default'])(_reactDom2['default'].findDOMNode(this.menu), (0, _activeElement2['default'])(document));\\n    }\\n  };\\n\\n  Dropdown.prototype.componentDidUpdate = function componentDidUpdate(prevProps) {\\n    var open = this.props.open;\\n\\n    var prevOpen = prevProps.open;\\n\\n    if (open && !prevOpen) {\\n      this.focusNextOnOpen();\\n    }\\n\\n    if (!open && prevOpen) {\\n      // if focus hasn't already moved from the menu lets return it\\n      // to the toggle\\n      if (this._focusInDropdown) {\\n        this._focusInDropdown = false;\\n        this.focus();\\n      }\\n    }\\n  };\\n\\n  Dropdown.prototype.handleClick = function handleClick() {\\n    if (this.props.disabled) {\\n      return;\\n    }\\n\\n    this.toggleOpen('click');\\n  };\\n\\n  Dropdown.prototype.handleKeyDown = function handleKeyDown(event) {\\n    if (this.props.disabled) {\\n      return;\\n    }\\n\\n    switch (event.keyCode) {\\n      case _keycode2['default'].codes.down:\\n        if (!this.props.open) {\\n          this.toggleOpen('keydown');\\n        } else if (this.menu.focusNext) {\\n          this.menu.focusNext();\\n        }\\n        event.preventDefault();\\n        break;\\n      case _keycode2['default'].codes.esc:\\n      case _keycode2['default'].codes.tab:\\n        this.handleClose(event);\\n        break;\\n      default:\\n    }\\n  };\\n\\n  Dropdown.prototype.toggleOpen = function toggleOpen(eventType) {\\n    var open = !this.props.open;\\n\\n    if (open) {\\n      this.lastOpenEventType = eventType;\\n    }\\n\\n    if (this.props.onToggle) {\\n      this.props.onToggle(open);\\n    }\\n  };\\n\\n  Dropdown.prototype.handleClose = function handleClose() {\\n    if (!this.props.open) {\\n      return;\\n    }\\n\\n    this.toggleOpen(null);\\n  };\\n\\n  Dropdown.prototype.focusNextOnOpen = function focusNextOnOpen() {\\n    var menu = this.menu;\\n\\n    if (!menu.focusNext) {\\n      return;\\n    }\\n\\n    if (this.lastOpenEventType === 'keydown' || this.props.role === 'menuitem') {\\n      menu.focusNext();\\n    }\\n  };\\n\\n  Dropdown.prototype.focus = function focus() {\\n    var toggle = _reactDom2['default'].findDOMNode(this.toggle);\\n\\n    if (toggle && toggle.focus) {\\n      toggle.focus();\\n    }\\n  };\\n\\n  Dropdown.prototype.renderToggle = function renderToggle(child, props) {\\n    var _this2 = this;\\n\\n    var ref = function ref(c) {\\n      _this2.toggle = c;\\n    };\\n\\n    if (typeof child.ref === 'string') {\\n      process.env.NODE_ENV !== 'production' ? (0, _warning2['default'])(false, 'String refs are not supported on `<Dropdown.Toggle>` components. ' + 'To apply a ref to the component use the callback signature:\\\\n\\\\n ' + 'https://facebook.github.io/react/docs/more-about-refs.html#the-ref-callback-attribute') : void 0;\\n    } else {\\n      ref = (0, _createChainedFunction2['default'])(child.ref, ref);\\n    }\\n\\n    return (0, _react.cloneElement)(child, (0, _extends3['default'])({}, props, {\\n      ref: ref,\\n      bsClass: (0, _bootstrapUtils.prefix)(props, 'toggle'),\\n      onClick: (0, _createChainedFunction2['default'])(child.props.onClick, this.handleClick),\\n      onKeyDown: (0, _createChainedFunction2['default'])(child.props.onKeyDown, this.handleKeyDown)\\n    }));\\n  };\\n\\n  Dropdown.prototype.renderMenu = function renderMenu(child, _ref) {\\n    var _this3 = this;\\n\\n    var id = _ref.id,\\n        onClose = _ref.onClose,\\n        onSelect = _ref.onSelect,\\n        rootCloseEvent = _ref.rootCloseEvent,\\n        props = (0, _objectWithoutProperties3['default'])(_ref, ['id', 'onClose', 'onSelect', 'rootCloseEvent']);\\n\\n    var ref = function ref(c) {\\n      _this3.menu = c;\\n    };\\n\\n    if (typeof child.ref === 'string') {\\n      process.env.NODE_ENV !== 'production' ? (0, _warning2['default'])(false, 'String refs are not supported on `<Dropdown.Menu>` components. ' + 'To apply a ref to the component use the callback signature:\\\\n\\\\n ' + 'https://facebook.github.io/react/docs/more-about-refs.html#the-ref-callback-attribute') : void 0;\\n    } else {\\n      ref = (0, _createChainedFunction2['default'])(child.ref, ref);\\n    }\\n\\n    return (0, _react.cloneElement)(child, (0, _extends3['default'])({}, props, {\\n      ref: ref,\\n      labelledBy: id,\\n      bsClass: (0, _bootstrapUtils.prefix)(props, 'menu'),\\n      onClose: (0, _createChainedFunction2['default'])(child.props.onClose, onClose, this.handleClose),\\n      onSelect: (0, _createChainedFunction2['default'])(child.props.onSelect, onSelect, this.handleClose),\\n      rootCloseEvent: rootCloseEvent\\n    }));\\n  };\\n\\n  Dropdown.prototype.render = function render() {\\n    var _classes,\\n        _this4 = this;\\n\\n    var _props = this.props,\\n        Component = _props.componentClass,\\n        id = _props.id,\\n        dropup = _props.dropup,\\n        disabled = _props.disabled,\\n        pullRight = _props.pullRight,\\n        open = _props.open,\\n        onClose = _props.onClose,\\n        onSelect = _props.onSelect,\\n        role = _props.role,\\n        bsClass = _props.bsClass,\\n        className = _props.className,\\n        rootCloseEvent = _props.rootCloseEvent,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['componentClass', 'id', 'dropup', 'disabled', 'pullRight', 'open', 'onClose', 'onSelect', 'role', 'bsClass', 'className', 'rootCloseEvent', 'children']);\\n\\n\\n    delete props.onToggle;\\n\\n    var classes = (_classes = {}, _classes[bsClass] = true, _classes.open = open, _classes.disabled = disabled, _classes);\\n\\n    if (dropup) {\\n      classes[bsClass] = false;\\n      classes.dropup = true;\\n    }\\n\\n    // This intentionally forwards bsSize and bsStyle (if set) to the\\n    // underlying component, to allow it to render size and style variants.\\n\\n    return _react2['default'].createElement(\\n      Component,\\n      (0, _extends3['default'])({}, props, {\\n        className: (0, _classnames2['default'])(className, classes)\\n      }),\\n      _ValidComponentChildren2['default'].map(children, function (child) {\\n        switch (child.props.bsRole) {\\n          case TOGGLE_ROLE:\\n            return _this4.renderToggle(child, {\\n              id: id, disabled: disabled, open: open, role: role, bsClass: bsClass\\n            });\\n          case MENU_ROLE:\\n            return _this4.renderMenu(child, {\\n              id: id, open: open, pullRight: pullRight, bsClass: bsClass, onClose: onClose, onSelect: onSelect, rootCloseEvent: rootCloseEvent\\n            });\\n          default:\\n            return child;\\n        }\\n      })\\n    );\\n  };\\n\\n  return Dropdown;\\n}(_react2['default'].Component);\\n\\nDropdown.propTypes = propTypes;\\nDropdown.defaultProps = defaultProps;\\n\\n(0, _bootstrapUtils.bsClass)('dropdown', Dropdown);\\n\\nvar UncontrolledDropdown = (0, _uncontrollable2['default'])(Dropdown, { open: 'onToggle' });\\n\\nUncontrolledDropdown.Toggle = _DropdownToggle2['default'];\\nUncontrolledDropdown.Menu = _DropdownMenu2['default'];\\n\\nexports['default'] = UncontrolledDropdown;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Dropdown.js\\n// module id = 396\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Dropdown.js?\");\n\n/***/ },\n/* 397 */\n/*!****************************************!*\\\n  !*** ./~/dom-helpers/activeElement.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar babelHelpers = __webpack_require__(/*! ./util/babelHelpers.js */ 390);\\n\\nexports.__esModule = true;\\n\\n/**\\r\\n * document.activeElement\\r\\n */\\nexports['default'] = activeElement;\\n\\nvar _ownerDocument = __webpack_require__(/*! ./ownerDocument */ 398);\\n\\nvar _ownerDocument2 = babelHelpers.interopRequireDefault(_ownerDocument);\\n\\nfunction activeElement() {\\n  var doc = arguments[0] === undefined ? document : arguments[0];\\n\\n  try {\\n    return doc.activeElement;\\n  } catch (e) {}\\n}\\n\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/activeElement.js\\n// module id = 397\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/activeElement.js?\");\n\n/***/ },\n/* 398 */\n/*!****************************************!*\\\n  !*** ./~/dom-helpers/ownerDocument.js ***!\n  \\****************************************/\n/***/ function(module, exports) {\n\n\teval(\"\\\"use strict\\\";\\n\\nexports.__esModule = true;\\nexports[\\\"default\\\"] = ownerDocument;\\n\\nfunction ownerDocument(node) {\\n  return node && node.ownerDocument || document;\\n}\\n\\nmodule.exports = exports[\\\"default\\\"];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/ownerDocument.js\\n// module id = 398\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/ownerDocument.js?\");\n\n/***/ },\n/* 399 */\n/*!*****************************************!*\\\n  !*** ./~/dom-helpers/query/contains.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\nvar canUseDOM = __webpack_require__(/*! ../util/inDOM */ 394);\\n\\nvar contains = (function () {\\n  var root = canUseDOM && document.documentElement;\\n\\n  return root && root.contains ? function (context, node) {\\n    return context.contains(node);\\n  } : root && root.compareDocumentPosition ? function (context, node) {\\n    return context === node || !!(context.compareDocumentPosition(node) & 16);\\n  } : function (context, node) {\\n    if (node) do {\\n      if (node === context) return true;\\n    } while (node = node.parentNode);\\n\\n    return false;\\n  };\\n})();\\n\\nmodule.exports = contains;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/query/contains.js\\n// module id = 399\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/query/contains.js?\");\n\n/***/ },\n/* 400 */\n/*!****************************!*\\\n  !*** ./~/keycode/index.js ***!\n  \\****************************/\n/***/ function(module, exports) {\n\n\teval(\"// Source: http://jsfiddle.net/vWx8V/\\n// http://stackoverflow.com/questions/5603195/full-list-of-javascript-keycodes\\n\\n/**\\n * Conenience method returns corresponding value for given keyName or keyCode.\\n *\\n * @param {Mixed} keyCode {Number} or keyName {String}\\n * @return {Mixed}\\n * @api public\\n */\\n\\nexports = module.exports = function(searchInput) {\\n  // Keyboard Events\\n  if (searchInput && 'object' === typeof searchInput) {\\n    var hasKeyCode = searchInput.which || searchInput.keyCode || searchInput.charCode\\n    if (hasKeyCode) searchInput = hasKeyCode\\n  }\\n\\n  // Numbers\\n  if ('number' === typeof searchInput) return names[searchInput]\\n\\n  // Everything else (cast to string)\\n  var search = String(searchInput)\\n\\n  // check codes\\n  var foundNamedKey = codes[search.toLowerCase()]\\n  if (foundNamedKey) return foundNamedKey\\n\\n  // check aliases\\n  var foundNamedKey = aliases[search.toLowerCase()]\\n  if (foundNamedKey) return foundNamedKey\\n\\n  // weird character?\\n  if (search.length === 1) return search.charCodeAt(0)\\n\\n  return undefined\\n}\\n\\n/**\\n * Get by name\\n *\\n *   exports.code['enter'] // => 13\\n */\\n\\nvar codes = exports.code = exports.codes = {\\n  'backspace': 8,\\n  'tab': 9,\\n  'enter': 13,\\n  'shift': 16,\\n  'ctrl': 17,\\n  'alt': 18,\\n  'pause/break': 19,\\n  'caps lock': 20,\\n  'esc': 27,\\n  'space': 32,\\n  'page up': 33,\\n  'page down': 34,\\n  'end': 35,\\n  'home': 36,\\n  'left': 37,\\n  'up': 38,\\n  'right': 39,\\n  'down': 40,\\n  'insert': 45,\\n  'delete': 46,\\n  'command': 91,\\n  'left command': 91,\\n  'right command': 93,\\n  'numpad *': 106,\\n  'numpad +': 107,\\n  'numpad -': 109,\\n  'numpad .': 110,\\n  'numpad /': 111,\\n  'num lock': 144,\\n  'scroll lock': 145,\\n  'my computer': 182,\\n  'my calculator': 183,\\n  ';': 186,\\n  '=': 187,\\n  ',': 188,\\n  '-': 189,\\n  '.': 190,\\n  '/': 191,\\n  '`': 192,\\n  '[': 219,\\n  '\\\\\\\\': 220,\\n  ']': 221,\\n  \\\"'\\\": 222\\n}\\n\\n// Helper aliases\\n\\nvar aliases = exports.aliases = {\\n  'windows': 91,\\n  '⇧': 16,\\n  '⌥': 18,\\n  '⌃': 17,\\n  '⌘': 91,\\n  'ctl': 17,\\n  'control': 17,\\n  'option': 18,\\n  'pause': 19,\\n  'break': 19,\\n  'caps': 20,\\n  'return': 13,\\n  'escape': 27,\\n  'spc': 32,\\n  'pgup': 33,\\n  'pgdn': 34,\\n  'ins': 45,\\n  'del': 46,\\n  'cmd': 91\\n}\\n\\n\\n/*!\\n * Programatically add the following\\n */\\n\\n// lower case chars\\nfor (i = 97; i < 123; i++) codes[String.fromCharCode(i)] = i - 32\\n\\n// numbers\\nfor (var i = 48; i < 58; i++) codes[i - 48] = i\\n\\n// function keys\\nfor (i = 1; i < 13; i++) codes['f'+i] = i + 111\\n\\n// numpad keys\\nfor (i = 0; i < 10; i++) codes['numpad '+i] = i + 96\\n\\n/**\\n * Get by code\\n *\\n *   exports.name[13] // => 'Enter'\\n */\\n\\nvar names = exports.names = exports.title = {} // title for backward compat\\n\\n// Create reverse mapping\\nfor (i in codes) names[codes[i]] = i\\n\\n// Add aliases\\nfor (var alias in aliases) {\\n  codes[alias] = aliases[alias]\\n}\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/keycode/index.js\\n// module id = 400\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/keycode/index.js?\");\n\n/***/ },\n/* 401 */\n/*!*****************************************************!*\\\n  !*** ./~/react-prop-types/lib/isRequiredForA11y.js ***!\n  \\*****************************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\nexports.default = isRequiredForA11y;\\nfunction isRequiredForA11y(validator) {\\n  return function validate(props, propName, componentName, location, propFullName) {\\n    var componentNameSafe = componentName || '<<anonymous>>';\\n    var propFullNameSafe = propFullName || propName;\\n\\n    if (props[propName] == null) {\\n      return new Error('The ' + location + ' `' + propFullNameSafe + '` is required to make ' + ('`' + componentNameSafe + '` accessible for users of assistive ') + 'technologies such as screen readers.');\\n    }\\n\\n    for (var _len = arguments.length, args = Array(_len > 5 ? _len - 5 : 0), _key = 5; _key < _len; _key++) {\\n      args[_key - 5] = arguments[_key];\\n    }\\n\\n    return validator.apply(undefined, [props, propName, componentName, location, propFullName].concat(args));\\n  };\\n}\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-prop-types/lib/isRequiredForA11y.js\\n// module id = 401\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-prop-types/lib/isRequiredForA11y.js?\");\n\n/***/ },\n/* 402 */\n/*!***********************************!*\\\n  !*** ./~/uncontrollable/index.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _createUncontrollable = __webpack_require__(/*! ./createUncontrollable */ 403);\\n\\nvar _createUncontrollable2 = _interopRequireDefault(_createUncontrollable);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar mixin = {\\n  shouldComponentUpdate: function shouldComponentUpdate() {\\n    //let the forceUpdate trigger the update\\n    return !this._notifying;\\n  }\\n};\\n\\nfunction set(component, propName, handler, value, args) {\\n  if (handler) {\\n    component._notifying = true;\\n    handler.call.apply(handler, [component, value].concat(args));\\n    component._notifying = false;\\n  }\\n\\n  component._values[propName] = value;\\n\\n  if (component.isMounted()) component.forceUpdate();\\n}\\n\\nexports.default = (0, _createUncontrollable2.default)([mixin], set);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/uncontrollable/index.js\\n// module id = 402\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/uncontrollable/index.js?\");\n\n/***/ },\n/* 403 */\n/*!**************************************************!*\\\n  !*** ./~/uncontrollable/createUncontrollable.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nexports.default = createUncontrollable;\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nvar _utils = __webpack_require__(/*! ./utils */ 404);\\n\\nvar utils = _interopRequireWildcard(_utils);\\n\\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction createUncontrollable(mixins, set) {\\n\\n  return uncontrollable;\\n\\n  function uncontrollable(Component, controlledValues) {\\n    var methods = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2];\\n\\n    var displayName = Component.displayName || Component.name || 'Component',\\n        basePropTypes = utils.getType(Component).propTypes,\\n        isCompositeComponent = utils.isReactComponent(Component),\\n        controlledProps = Object.keys(controlledValues),\\n        propTypes;\\n\\n    var OMIT_PROPS = ['valueLink', 'checkedLink'].concat(controlledProps.map(utils.defaultKey));\\n\\n    propTypes = utils.uncontrolledPropTypes(controlledValues, basePropTypes, displayName);\\n\\n    (0, _invariant2.default)(isCompositeComponent || !methods.length, '[uncontrollable] stateless function components cannot pass through methods ' + 'because they have no associated instances. Check component: ' + displayName + ', ' + 'attempting to pass through methods: ' + methods.join(', '));\\n\\n    methods = utils.transform(methods, function (obj, method) {\\n      obj[method] = function () {\\n        var _refs$inner;\\n\\n        return (_refs$inner = this.refs.inner)[method].apply(_refs$inner, arguments);\\n      };\\n    }, {});\\n\\n    var component = _react2.default.createClass(_extends({\\n\\n      displayName: 'Uncontrolled(' + displayName + ')',\\n\\n      mixins: mixins,\\n\\n      propTypes: propTypes\\n\\n    }, methods, {\\n      componentWillMount: function componentWillMount() {\\n        var _this = this;\\n\\n        var props = this.props;\\n\\n        this._values = {};\\n\\n        controlledProps.forEach(function (key) {\\n          _this._values[key] = props[utils.defaultKey(key)];\\n        });\\n      },\\n\\n\\n      /**\\n       * If a prop switches from controlled to Uncontrolled\\n       * reset its value to the defaultValue\\n       */\\n      componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\\n        var _this2 = this;\\n\\n        var props = this.props;\\n\\n        controlledProps.forEach(function (key) {\\n          if (utils.getValue(nextProps, key) === undefined && utils.getValue(props, key) !== undefined) {\\n            _this2._values[key] = nextProps[utils.defaultKey(key)];\\n          }\\n        });\\n      },\\n      getControlledInstance: function getControlledInstance() {\\n        return this.refs.inner;\\n      },\\n      render: function render() {\\n        var _this3 = this;\\n\\n        var newProps = {},\\n            props = omitProps(this.props);\\n\\n        utils.each(controlledValues, function (handle, propName) {\\n          var linkPropName = utils.getLinkName(propName),\\n              prop = _this3.props[propName];\\n\\n          if (linkPropName && !isProp(_this3.props, propName) && isProp(_this3.props, linkPropName)) {\\n            prop = _this3.props[linkPropName].value;\\n          }\\n\\n          newProps[propName] = prop !== undefined ? prop : _this3._values[propName];\\n\\n          newProps[handle] = setAndNotify.bind(_this3, propName);\\n        });\\n\\n        newProps = _extends({}, props, newProps, {\\n          ref: isCompositeComponent ? 'inner' : null\\n        });\\n\\n        return _react2.default.createElement(Component, newProps);\\n      }\\n    }));\\n\\n    component.ControlledComponent = Component;\\n\\n    /**\\n     * useful when wrapping a Component and you want to control\\n     * everything\\n     */\\n    component.deferControlTo = function (newComponent) {\\n      var additions = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\\n      var nextMethods = arguments[2];\\n\\n      return uncontrollable(newComponent, _extends({}, controlledValues, additions), nextMethods);\\n    };\\n\\n    return component;\\n\\n    function setAndNotify(propName, value) {\\n      var linkName = utils.getLinkName(propName),\\n          handler = this.props[controlledValues[propName]];\\n\\n      if (linkName && isProp(this.props, linkName) && !handler) {\\n        handler = this.props[linkName].requestChange;\\n      }\\n\\n      for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\\n        args[_key - 2] = arguments[_key];\\n      }\\n\\n      set(this, propName, handler, value, args);\\n    }\\n\\n    function isProp(props, prop) {\\n      return props[prop] !== undefined;\\n    }\\n\\n    function omitProps(props) {\\n      var result = {};\\n\\n      utils.each(props, function (value, key) {\\n        if (OMIT_PROPS.indexOf(key) === -1) result[key] = value;\\n      });\\n\\n      return result;\\n    }\\n  }\\n}\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/uncontrollable/createUncontrollable.js\\n// module id = 403\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/uncontrollable/createUncontrollable.js?\");\n\n/***/ },\n/* 404 */\n/*!***********************************!*\\\n  !*** ./~/uncontrollable/utils.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\nexports.version = undefined;\\nexports.uncontrolledPropTypes = uncontrolledPropTypes;\\nexports.getType = getType;\\nexports.getValue = getValue;\\nexports.getLinkName = getLinkName;\\nexports.defaultKey = defaultKey;\\nexports.chain = chain;\\nexports.transform = transform;\\nexports.each = each;\\nexports.has = has;\\nexports.isReactComponent = isReactComponent;\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _invariant = __webpack_require__(/*! invariant */ 44);\\n\\nvar _invariant2 = _interopRequireDefault(_invariant);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction readOnlyPropType(handler, name) {\\n  return function (props, propName) {\\n    if (props[propName] !== undefined) {\\n      if (!props[handler]) {\\n        return new Error('You have provided a `' + propName + '` prop to ' + '`' + name + '` without an `' + handler + '` handler. This will render a read-only field. ' + 'If the field should be mutable use `' + defaultKey(propName) + '`. Otherwise, set `' + handler + '`');\\n      }\\n    }\\n  };\\n}\\n\\nfunction uncontrolledPropTypes(controlledValues, basePropTypes, displayName) {\\n  var propTypes = {};\\n\\n  if (process.env.NODE_ENV !== 'production' && basePropTypes) {\\n    transform(controlledValues, function (obj, handler, prop) {\\n      (0, _invariant2.default)(typeof handler === 'string' && handler.trim().length, 'Uncontrollable - [%s]: the prop `%s` needs a valid handler key name in order to make it uncontrollable', displayName, prop);\\n\\n      obj[prop] = readOnlyPropType(handler, displayName);\\n    }, propTypes);\\n  }\\n\\n  return propTypes;\\n}\\n\\nvar version = exports.version = _react2.default.version.split('.').map(parseFloat);\\n\\nfunction getType(component) {\\n  if (version[0] >= 15 || version[0] === 0 && version[1] >= 13) return component;\\n\\n  return component.type;\\n}\\n\\nfunction getValue(props, name) {\\n  var linkPropName = getLinkName(name);\\n\\n  if (linkPropName && !isProp(props, name) && isProp(props, linkPropName)) return props[linkPropName].value;\\n\\n  return props[name];\\n}\\n\\nfunction isProp(props, prop) {\\n  return props[prop] !== undefined;\\n}\\n\\nfunction getLinkName(name) {\\n  return name === 'value' ? 'valueLink' : name === 'checked' ? 'checkedLink' : null;\\n}\\n\\nfunction defaultKey(key) {\\n  return 'default' + key.charAt(0).toUpperCase() + key.substr(1);\\n}\\n\\nfunction chain(thisArg, a, b) {\\n  return function chainedFunction() {\\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\\n      args[_key] = arguments[_key];\\n    }\\n\\n    a && a.call.apply(a, [thisArg].concat(args));\\n    b && b.call.apply(b, [thisArg].concat(args));\\n  };\\n}\\n\\nfunction transform(obj, cb, seed) {\\n  each(obj, cb.bind(null, seed = seed || (Array.isArray(obj) ? [] : {})));\\n  return seed;\\n}\\n\\nfunction each(obj, cb, thisArg) {\\n  if (Array.isArray(obj)) return obj.forEach(cb, thisArg);\\n\\n  for (var key in obj) {\\n    if (has(obj, key)) cb.call(thisArg, obj[key], key, obj);\\n  }\\n}\\n\\nfunction has(o, k) {\\n  return o ? Object.prototype.hasOwnProperty.call(o, k) : false;\\n}\\n\\n/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n */\\nfunction isReactComponent(component) {\\n  return !!(component && component.prototype && component.prototype.isReactComponent);\\n}\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/uncontrollable/utils.js\\n// module id = 404\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/uncontrollable/utils.js?\");\n\n/***/ },\n/* 405 */\n/*!***********************************************!*\\\n  !*** ./~/react-bootstrap/lib/DropdownMenu.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends3 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends4 = _interopRequireDefault(_extends3);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _from = __webpack_require__(/*! babel-runtime/core-js/array/from */ 406);\\n\\nvar _from2 = _interopRequireDefault(_from);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _keycode = __webpack_require__(/*! keycode */ 400);\\n\\nvar _keycode2 = _interopRequireDefault(_keycode);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _reactDom = __webpack_require__(/*! react-dom */ 110);\\n\\nvar _reactDom2 = _interopRequireDefault(_reactDom);\\n\\nvar _RootCloseWrapper = __webpack_require__(/*! react-overlays/lib/RootCloseWrapper */ 415);\\n\\nvar _RootCloseWrapper2 = _interopRequireDefault(_RootCloseWrapper);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 357);\\n\\nvar _createChainedFunction2 = _interopRequireDefault(_createChainedFunction);\\n\\nvar _ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 358);\\n\\nvar _ValidComponentChildren2 = _interopRequireDefault(_ValidComponentChildren);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  open: _react2['default'].PropTypes.bool,\\n  pullRight: _react2['default'].PropTypes.bool,\\n  onClose: _react2['default'].PropTypes.func,\\n  labelledBy: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number]),\\n  onSelect: _react2['default'].PropTypes.func,\\n  rootCloseEvent: _react2['default'].PropTypes.oneOf(['click', 'mousedown'])\\n};\\n\\nvar defaultProps = {\\n  bsRole: 'menu',\\n  pullRight: false\\n};\\n\\nvar DropdownMenu = function (_React$Component) {\\n  (0, _inherits3['default'])(DropdownMenu, _React$Component);\\n\\n  function DropdownMenu(props) {\\n    (0, _classCallCheck3['default'])(this, DropdownMenu);\\n\\n    var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props));\\n\\n    _this.handleKeyDown = _this.handleKeyDown.bind(_this);\\n    return _this;\\n  }\\n\\n  DropdownMenu.prototype.handleKeyDown = function handleKeyDown(event) {\\n    switch (event.keyCode) {\\n      case _keycode2['default'].codes.down:\\n        this.focusNext();\\n        event.preventDefault();\\n        break;\\n      case _keycode2['default'].codes.up:\\n        this.focusPrevious();\\n        event.preventDefault();\\n        break;\\n      case _keycode2['default'].codes.esc:\\n      case _keycode2['default'].codes.tab:\\n        this.props.onClose(event);\\n        break;\\n      default:\\n    }\\n  };\\n\\n  DropdownMenu.prototype.getItemsAndActiveIndex = function getItemsAndActiveIndex() {\\n    var items = this.getFocusableMenuItems();\\n    var activeIndex = items.indexOf(document.activeElement);\\n\\n    return { items: items, activeIndex: activeIndex };\\n  };\\n\\n  DropdownMenu.prototype.getFocusableMenuItems = function getFocusableMenuItems() {\\n    var node = _reactDom2['default'].findDOMNode(this);\\n    if (!node) {\\n      return [];\\n    }\\n\\n    return (0, _from2['default'])(node.querySelectorAll('[tabIndex=\\\"-1\\\"]'));\\n  };\\n\\n  DropdownMenu.prototype.focusNext = function focusNext() {\\n    var _getItemsAndActiveInd = this.getItemsAndActiveIndex(),\\n        items = _getItemsAndActiveInd.items,\\n        activeIndex = _getItemsAndActiveInd.activeIndex;\\n\\n    if (items.length === 0) {\\n      return;\\n    }\\n\\n    var nextIndex = activeIndex === items.length - 1 ? 0 : activeIndex + 1;\\n    items[nextIndex].focus();\\n  };\\n\\n  DropdownMenu.prototype.focusPrevious = function focusPrevious() {\\n    var _getItemsAndActiveInd2 = this.getItemsAndActiveIndex(),\\n        items = _getItemsAndActiveInd2.items,\\n        activeIndex = _getItemsAndActiveInd2.activeIndex;\\n\\n    if (items.length === 0) {\\n      return;\\n    }\\n\\n    var prevIndex = activeIndex === 0 ? items.length - 1 : activeIndex - 1;\\n    items[prevIndex].focus();\\n  };\\n\\n  DropdownMenu.prototype.render = function render() {\\n    var _extends2,\\n        _this2 = this;\\n\\n    var _props = this.props,\\n        open = _props.open,\\n        pullRight = _props.pullRight,\\n        onClose = _props.onClose,\\n        labelledBy = _props.labelledBy,\\n        onSelect = _props.onSelect,\\n        className = _props.className,\\n        rootCloseEvent = _props.rootCloseEvent,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['open', 'pullRight', 'onClose', 'labelledBy', 'onSelect', 'className', 'rootCloseEvent', 'children']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _extends4['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), (_extends2 = {}, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'right')] = pullRight, _extends2));\\n\\n    return _react2['default'].createElement(\\n      _RootCloseWrapper2['default'],\\n      {\\n        disabled: !open,\\n        onRootClose: onClose,\\n        event: rootCloseEvent\\n      },\\n      _react2['default'].createElement(\\n        'ul',\\n        (0, _extends4['default'])({}, elementProps, {\\n          role: 'menu',\\n          className: (0, _classnames2['default'])(className, classes),\\n          'aria-labelledby': labelledBy\\n        }),\\n        _ValidComponentChildren2['default'].map(children, function (child) {\\n          return _react2['default'].cloneElement(child, {\\n            onKeyDown: (0, _createChainedFunction2['default'])(child.props.onKeyDown, _this2.handleKeyDown),\\n            onSelect: (0, _createChainedFunction2['default'])(child.props.onSelect, onSelect)\\n          });\\n        })\\n      )\\n    );\\n  };\\n\\n  return DropdownMenu;\\n}(_react2['default'].Component);\\n\\nDropdownMenu.propTypes = propTypes;\\nDropdownMenu.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('dropdown-menu', DropdownMenu);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/DropdownMenu.js\\n// module id = 405\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/DropdownMenu.js?\");\n\n/***/ },\n/* 406 */\n/*!***********************************************!*\\\n  !*** ./~/babel-runtime/core-js/array/from.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"module.exports = { \\\"default\\\": __webpack_require__(/*! core-js/library/fn/array/from */ 407), __esModule: true };\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/babel-runtime/core-js/array/from.js\\n// module id = 406\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/babel-runtime/core-js/array/from.js?\");\n\n/***/ },\n/* 407 */\n/*!********************************************!*\\\n  !*** ./~/core-js/library/fn/array/from.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"__webpack_require__(/*! ../../modules/es6.string.iterator */ 308);\\n__webpack_require__(/*! ../../modules/es6.array.from */ 408);\\nmodule.exports = __webpack_require__(/*! ../../modules/_core */ 271).Array.from;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/fn/array/from.js\\n// module id = 407\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/fn/array/from.js?\");\n\n/***/ },\n/* 408 */\n/*!*****************************************************!*\\\n  !*** ./~/core-js/library/modules/es6.array.from.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\nvar ctx            = __webpack_require__(/*! ./_ctx */ 272)\\n  , $export        = __webpack_require__(/*! ./_export */ 269)\\n  , toObject       = __webpack_require__(/*! ./_to-object */ 302)\\n  , call           = __webpack_require__(/*! ./_iter-call */ 409)\\n  , isArrayIter    = __webpack_require__(/*! ./_is-array-iter */ 410)\\n  , toLength       = __webpack_require__(/*! ./_to-length */ 293)\\n  , createProperty = __webpack_require__(/*! ./_create-property */ 411)\\n  , getIterFn      = __webpack_require__(/*! ./core.get-iterator-method */ 412);\\n\\n$export($export.S + $export.F * !__webpack_require__(/*! ./_iter-detect */ 414)(function(iter){ Array.from(iter); }), 'Array', {\\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\\n  from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){\\n    var O       = toObject(arrayLike)\\n      , C       = typeof this == 'function' ? this : Array\\n      , aLen    = arguments.length\\n      , mapfn   = aLen > 1 ? arguments[1] : undefined\\n      , mapping = mapfn !== undefined\\n      , index   = 0\\n      , iterFn  = getIterFn(O)\\n      , length, result, step, iterator;\\n    if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\\n    // if object isn't iterable or it's array with default iterator - use simple case\\n    if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){\\n      for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){\\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\\n      }\\n    } else {\\n      length = toLength(O.length);\\n      for(result = new C(length); length > index; index++){\\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\\n      }\\n    }\\n    result.length = index;\\n    return result;\\n  }\\n});\\n\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/es6.array.from.js\\n// module id = 408\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/es6.array.from.js?\");\n\n/***/ },\n/* 409 */\n/*!*************************************************!*\\\n  !*** ./~/core-js/library/modules/_iter-call.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// call something on iterator step with safe closing on error\\nvar anObject = __webpack_require__(/*! ./_an-object */ 276);\\nmodule.exports = function(iterator, fn, value, entries){\\n  try {\\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\\n  // 7.4.6 IteratorClose(iterator, completion)\\n  } catch(e){\\n    var ret = iterator['return'];\\n    if(ret !== undefined)anObject(ret.call(iterator));\\n    throw e;\\n  }\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_iter-call.js\\n// module id = 409\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_iter-call.js?\");\n\n/***/ },\n/* 410 */\n/*!*****************************************************!*\\\n  !*** ./~/core-js/library/modules/_is-array-iter.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// check on default Array iterator\\nvar Iterators  = __webpack_require__(/*! ./_iterators */ 313)\\n  , ITERATOR   = __webpack_require__(/*! ./_wks */ 319)('iterator')\\n  , ArrayProto = Array.prototype;\\n\\nmodule.exports = function(it){\\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_is-array-iter.js\\n// module id = 410\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_is-array-iter.js?\");\n\n/***/ },\n/* 411 */\n/*!*******************************************************!*\\\n  !*** ./~/core-js/library/modules/_create-property.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\nvar $defineProperty = __webpack_require__(/*! ./_object-dp */ 275)\\n  , createDesc      = __webpack_require__(/*! ./_property-desc */ 283);\\n\\nmodule.exports = function(object, index, value){\\n  if(index in object)$defineProperty.f(object, index, createDesc(0, value));\\n  else object[index] = value;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_create-property.js\\n// module id = 411\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_create-property.js?\");\n\n/***/ },\n/* 412 */\n/*!***************************************************************!*\\\n  !*** ./~/core-js/library/modules/core.get-iterator-method.js ***!\n  \\***************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var classof   = __webpack_require__(/*! ./_classof */ 413)\\n  , ITERATOR  = __webpack_require__(/*! ./_wks */ 319)('iterator')\\n  , Iterators = __webpack_require__(/*! ./_iterators */ 313);\\nmodule.exports = __webpack_require__(/*! ./_core */ 271).getIteratorMethod = function(it){\\n  if(it != undefined)return it[ITERATOR]\\n    || it['@@iterator']\\n    || Iterators[classof(it)];\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/core.get-iterator-method.js\\n// module id = 412\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/core.get-iterator-method.js?\");\n\n/***/ },\n/* 413 */\n/*!***********************************************!*\\\n  !*** ./~/core-js/library/modules/_classof.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// getting tag from 19.1.3.6 Object.prototype.toString()\\nvar cof = __webpack_require__(/*! ./_cof */ 290)\\n  , TAG = __webpack_require__(/*! ./_wks */ 319)('toStringTag')\\n  // ES3 wrong here\\n  , ARG = cof(function(){ return arguments; }()) == 'Arguments';\\n\\n// fallback for IE11 Script Access Denied error\\nvar tryGet = function(it, key){\\n  try {\\n    return it[key];\\n  } catch(e){ /* empty */ }\\n};\\n\\nmodule.exports = function(it){\\n  var O, T, B;\\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\\n    // @@toStringTag case\\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\\n    // builtinTag case\\n    : ARG ? cof(O)\\n    // ES3 arguments fallback\\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_classof.js\\n// module id = 413\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_classof.js?\");\n\n/***/ },\n/* 414 */\n/*!***************************************************!*\\\n  !*** ./~/core-js/library/modules/_iter-detect.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var ITERATOR     = __webpack_require__(/*! ./_wks */ 319)('iterator')\\n  , SAFE_CLOSING = false;\\n\\ntry {\\n  var riter = [7][ITERATOR]();\\n  riter['return'] = function(){ SAFE_CLOSING = true; };\\n  Array.from(riter, function(){ throw 2; });\\n} catch(e){ /* empty */ }\\n\\nmodule.exports = function(exec, skipClosing){\\n  if(!skipClosing && !SAFE_CLOSING)return false;\\n  var safe = false;\\n  try {\\n    var arr  = [7]\\n      , iter = arr[ITERATOR]();\\n    iter.next = function(){ return {done: safe = true}; };\\n    arr[ITERATOR] = function(){ return iter; };\\n    exec(arr);\\n  } catch(e){ /* empty */ }\\n  return safe;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/core-js/library/modules/_iter-detect.js\\n// module id = 414\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/core-js/library/modules/_iter-detect.js?\");\n\n/***/ },\n/* 415 */\n/*!**************************************************!*\\\n  !*** ./~/react-overlays/lib/RootCloseWrapper.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n  value: true\\n});\\n\\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\\"value\\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\\n\\nvar _contains = __webpack_require__(/*! dom-helpers/query/contains */ 399);\\n\\nvar _contains2 = _interopRequireDefault(_contains);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _reactDom = __webpack_require__(/*! react-dom */ 110);\\n\\nvar _reactDom2 = _interopRequireDefault(_reactDom);\\n\\nvar _addEventListener = __webpack_require__(/*! ./utils/addEventListener */ 416);\\n\\nvar _addEventListener2 = _interopRequireDefault(_addEventListener);\\n\\nvar _ownerDocument = __webpack_require__(/*! ./utils/ownerDocument */ 418);\\n\\nvar _ownerDocument2 = _interopRequireDefault(_ownerDocument);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\\"Cannot call a class as a function\\\"); } }\\n\\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\\\"this hasn't been initialised - super() hasn't been called\\\"); } return call && (typeof call === \\\"object\\\" || typeof call === \\\"function\\\") ? call : self; }\\n\\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \\\"function\\\" && superClass !== null) { throw new TypeError(\\\"Super expression must either be null or a function, not \\\" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\\n\\nfunction isLeftClickEvent(event) {\\n  return event.button === 0;\\n}\\n\\nfunction isModifiedEvent(event) {\\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\\n}\\n\\nvar RootCloseWrapper = function (_React$Component) {\\n  _inherits(RootCloseWrapper, _React$Component);\\n\\n  function RootCloseWrapper(props, context) {\\n    _classCallCheck(this, RootCloseWrapper);\\n\\n    var _this = _possibleConstructorReturn(this, (RootCloseWrapper.__proto__ || Object.getPrototypeOf(RootCloseWrapper)).call(this, props, context));\\n\\n    _this.handleMouseCapture = function (e) {\\n      _this.preventMouseRootClose = isModifiedEvent(e) || !isLeftClickEvent(e) || (0, _contains2.default)(_reactDom2.default.findDOMNode(_this), e.target);\\n    };\\n\\n    _this.handleMouse = function () {\\n      if (!_this.preventMouseRootClose && _this.props.onRootClose) {\\n        _this.props.onRootClose();\\n      }\\n    };\\n\\n    _this.handleKeyUp = function (e) {\\n      if (e.keyCode === 27 && _this.props.onRootClose) {\\n        _this.props.onRootClose();\\n      }\\n    };\\n\\n    _this.preventMouseRootClose = false;\\n    return _this;\\n  }\\n\\n  _createClass(RootCloseWrapper, [{\\n    key: 'componentDidMount',\\n    value: function componentDidMount() {\\n      if (!this.props.disabled) {\\n        this.addEventListeners();\\n      }\\n    }\\n  }, {\\n    key: 'componentDidUpdate',\\n    value: function componentDidUpdate(prevProps) {\\n      if (!this.props.disabled && prevProps.disabled) {\\n        this.addEventListeners();\\n      } else if (this.props.disabled && !prevProps.disabled) {\\n        this.removeEventListeners();\\n      }\\n    }\\n  }, {\\n    key: 'componentWillUnmount',\\n    value: function componentWillUnmount() {\\n      if (!this.props.disabled) {\\n        this.removeEventListeners();\\n      }\\n    }\\n  }, {\\n    key: 'addEventListeners',\\n    value: function addEventListeners() {\\n      var event = this.props.event;\\n\\n      var doc = (0, _ownerDocument2.default)(this);\\n\\n      // Use capture for this listener so it fires before React's listener, to\\n      // avoid false positives in the contains() check below if the target DOM\\n      // element is removed in the React mouse callback.\\n      this.documentMouseCaptureListener = (0, _addEventListener2.default)(doc, event, this.handleMouseCapture, true);\\n\\n      this.documentMouseListener = (0, _addEventListener2.default)(doc, event, this.handleMouse);\\n\\n      this.documentKeyupListener = (0, _addEventListener2.default)(doc, 'keyup', this.handleKeyUp);\\n    }\\n  }, {\\n    key: 'removeEventListeners',\\n    value: function removeEventListeners() {\\n      if (this.documentMouseCaptureListener) {\\n        this.documentMouseCaptureListener.remove();\\n      }\\n\\n      if (this.documentMouseListener) {\\n        this.documentMouseListener.remove();\\n      }\\n\\n      if (this.documentKeyupListener) {\\n        this.documentKeyupListener.remove();\\n      }\\n    }\\n  }, {\\n    key: 'render',\\n    value: function render() {\\n      return this.props.children;\\n    }\\n  }]);\\n\\n  return RootCloseWrapper;\\n}(_react2.default.Component);\\n\\nexports.default = RootCloseWrapper;\\n\\n\\nRootCloseWrapper.displayName = 'RootCloseWrapper';\\n\\nRootCloseWrapper.propTypes = {\\n  onRootClose: _react2.default.PropTypes.func,\\n  children: _react2.default.PropTypes.element,\\n\\n  /**\\n   * Disable the the RootCloseWrapper, preventing it from triggering\\n   * `onRootClose`.\\n   */\\n  disabled: _react2.default.PropTypes.bool,\\n  /**\\n   * Choose which document mouse event to bind to\\n   */\\n  event: _react2.default.PropTypes.oneOf(['click', 'mousedown'])\\n};\\n\\nRootCloseWrapper.defaultProps = {\\n  event: 'click'\\n};\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-overlays/lib/RootCloseWrapper.js\\n// module id = 415\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-overlays/lib/RootCloseWrapper.js?\");\n\n/***/ },\n/* 416 */\n/*!********************************************************!*\\\n  !*** ./~/react-overlays/lib/utils/addEventListener.js ***!\n  \\********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n  value: true\\n});\\n\\nexports.default = function (node, event, handler, capture) {\\n  (0, _on2.default)(node, event, handler, capture);\\n\\n  return {\\n    remove: function remove() {\\n      (0, _off2.default)(node, event, handler, capture);\\n    }\\n  };\\n};\\n\\nvar _on = __webpack_require__(/*! dom-helpers/events/on */ 395);\\n\\nvar _on2 = _interopRequireDefault(_on);\\n\\nvar _off = __webpack_require__(/*! dom-helpers/events/off */ 417);\\n\\nvar _off2 = _interopRequireDefault(_off);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-overlays/lib/utils/addEventListener.js\\n// module id = 416\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-overlays/lib/utils/addEventListener.js?\");\n\n/***/ },\n/* 417 */\n/*!*************************************!*\\\n  !*** ./~/dom-helpers/events/off.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\nvar canUseDOM = __webpack_require__(/*! ../util/inDOM */ 394);\\nvar off = function off() {};\\n\\nif (canUseDOM) {\\n\\n  off = (function () {\\n\\n    if (document.addEventListener) return function (node, eventName, handler, capture) {\\n      return node.removeEventListener(eventName, handler, capture || false);\\n    };else if (document.attachEvent) return function (node, eventName, handler) {\\n      return node.detachEvent('on' + eventName, handler);\\n    };\\n  })();\\n}\\n\\nmodule.exports = off;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/events/off.js\\n// module id = 417\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/events/off.js?\");\n\n/***/ },\n/* 418 */\n/*!*****************************************************!*\\\n  !*** ./~/react-overlays/lib/utils/ownerDocument.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n  value: true\\n});\\n\\nexports.default = function (componentOrElement) {\\n  return (0, _ownerDocument2.default)(_reactDom2.default.findDOMNode(componentOrElement));\\n};\\n\\nvar _reactDom = __webpack_require__(/*! react-dom */ 110);\\n\\nvar _reactDom2 = _interopRequireDefault(_reactDom);\\n\\nvar _ownerDocument = __webpack_require__(/*! dom-helpers/ownerDocument */ 398);\\n\\nvar _ownerDocument2 = _interopRequireDefault(_ownerDocument);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-overlays/lib/utils/ownerDocument.js\\n// module id = 418\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-overlays/lib/utils/ownerDocument.js?\");\n\n/***/ },\n/* 419 */\n/*!*************************************************!*\\\n  !*** ./~/react-bootstrap/lib/DropdownToggle.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _Button = __webpack_require__(/*! ./Button */ 369);\\n\\nvar _Button2 = _interopRequireDefault(_Button);\\n\\nvar _SafeAnchor = __webpack_require__(/*! ./SafeAnchor */ 366);\\n\\nvar _SafeAnchor2 = _interopRequireDefault(_SafeAnchor);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  noCaret: _react2['default'].PropTypes.bool,\\n  open: _react2['default'].PropTypes.bool,\\n  title: _react2['default'].PropTypes.string,\\n  useAnchor: _react2['default'].PropTypes.bool\\n};\\n\\nvar defaultProps = {\\n  open: false,\\n  useAnchor: false,\\n  bsRole: 'toggle'\\n};\\n\\nvar DropdownToggle = function (_React$Component) {\\n  (0, _inherits3['default'])(DropdownToggle, _React$Component);\\n\\n  function DropdownToggle() {\\n    (0, _classCallCheck3['default'])(this, DropdownToggle);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  DropdownToggle.prototype.render = function render() {\\n    var _props = this.props,\\n        noCaret = _props.noCaret,\\n        open = _props.open,\\n        useAnchor = _props.useAnchor,\\n        bsClass = _props.bsClass,\\n        className = _props.className,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['noCaret', 'open', 'useAnchor', 'bsClass', 'className', 'children']);\\n\\n\\n    delete props.bsRole;\\n\\n    var Component = useAnchor ? _SafeAnchor2['default'] : _Button2['default'];\\n    var useCaret = !noCaret;\\n\\n    // This intentionally forwards bsSize and bsStyle (if set) to the\\n    // underlying component, to allow it to render size and style variants.\\n\\n    // FIXME: Should this really fall back to `title` as children?\\n\\n    return _react2['default'].createElement(\\n      Component,\\n      (0, _extends3['default'])({}, props, {\\n        role: 'button',\\n        className: (0, _classnames2['default'])(className, bsClass),\\n        'aria-haspopup': true,\\n        'aria-expanded': open\\n      }),\\n      children || props.title,\\n      useCaret && ' ',\\n      useCaret && _react2['default'].createElement('span', { className: 'caret' })\\n    );\\n  };\\n\\n  return DropdownToggle;\\n}(_react2['default'].Component);\\n\\nDropdownToggle.propTypes = propTypes;\\nDropdownToggle.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('dropdown-toggle', DropdownToggle);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/DropdownToggle.js\\n// module id = 419\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/DropdownToggle.js?\");\n\n/***/ },\n/* 420 */\n/*!**************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/PropTypes.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\nexports.requiredRoles = requiredRoles;\\nexports.exclusiveRoles = exclusiveRoles;\\n\\nvar _createChainableTypeChecker = __webpack_require__(/*! react-prop-types/lib/utils/createChainableTypeChecker */ 368);\\n\\nvar _createChainableTypeChecker2 = _interopRequireDefault(_createChainableTypeChecker);\\n\\nvar _ValidComponentChildren = __webpack_require__(/*! ./ValidComponentChildren */ 358);\\n\\nvar _ValidComponentChildren2 = _interopRequireDefault(_ValidComponentChildren);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nfunction requiredRoles() {\\n  for (var _len = arguments.length, roles = Array(_len), _key = 0; _key < _len; _key++) {\\n    roles[_key] = arguments[_key];\\n  }\\n\\n  return (0, _createChainableTypeChecker2['default'])(function (props, propName, component) {\\n    var missing = void 0;\\n\\n    roles.every(function (role) {\\n      if (!_ValidComponentChildren2['default'].some(props.children, function (child) {\\n        return child.props.bsRole === role;\\n      })) {\\n        missing = role;\\n        return false;\\n      }\\n\\n      return true;\\n    });\\n\\n    if (missing) {\\n      return new Error('(children) ' + component + ' - Missing a required child with bsRole: ' + (missing + '. ' + component + ' must have at least one child of each of ') + ('the following bsRoles: ' + roles.join(', ')));\\n    }\\n\\n    return null;\\n  });\\n}\\n\\nfunction exclusiveRoles() {\\n  for (var _len2 = arguments.length, roles = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\\n    roles[_key2] = arguments[_key2];\\n  }\\n\\n  return (0, _createChainableTypeChecker2['default'])(function (props, propName, component) {\\n    var duplicate = void 0;\\n\\n    roles.every(function (role) {\\n      var childrenWithRole = _ValidComponentChildren2['default'].filter(props.children, function (child) {\\n        return child.props.bsRole === role;\\n      });\\n\\n      if (childrenWithRole.length > 1) {\\n        duplicate = role;\\n        return false;\\n      }\\n\\n      return true;\\n    });\\n\\n    if (duplicate) {\\n      return new Error('(children) ' + component + ' - Duplicate children detected of bsRole: ' + (duplicate + '. Only one child each allowed with the following ') + ('bsRoles: ' + roles.join(', ')));\\n    }\\n\\n    return null;\\n  });\\n}\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/utils/PropTypes.js\\n// module id = 420\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/PropTypes.js?\");\n\n/***/ },\n/* 421 */\n/*!*************************************************!*\\\n  !*** ./~/react-bootstrap/lib/DropdownButton.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _Dropdown = __webpack_require__(/*! ./Dropdown */ 396);\\n\\nvar _Dropdown2 = _interopRequireDefault(_Dropdown);\\n\\nvar _splitComponentProps2 = __webpack_require__(/*! ./utils/splitComponentProps */ 422);\\n\\nvar _splitComponentProps3 = _interopRequireDefault(_splitComponentProps2);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = (0, _extends3['default'])({}, _Dropdown2['default'].propTypes, {\\n\\n  // Toggle props.\\n  bsStyle: _react2['default'].PropTypes.string,\\n  bsSize: _react2['default'].PropTypes.string,\\n  title: _react2['default'].PropTypes.node.isRequired,\\n  noCaret: _react2['default'].PropTypes.bool,\\n\\n  // Override generated docs from <Dropdown>.\\n  /**\\n   * @private\\n   */\\n  children: _react2['default'].PropTypes.node\\n});\\n\\nvar DropdownButton = function (_React$Component) {\\n  (0, _inherits3['default'])(DropdownButton, _React$Component);\\n\\n  function DropdownButton() {\\n    (0, _classCallCheck3['default'])(this, DropdownButton);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  DropdownButton.prototype.render = function render() {\\n    var _props = this.props,\\n        bsSize = _props.bsSize,\\n        bsStyle = _props.bsStyle,\\n        title = _props.title,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['bsSize', 'bsStyle', 'title', 'children']);\\n\\n    var _splitComponentProps = (0, _splitComponentProps3['default'])(props, _Dropdown2['default'].ControlledComponent),\\n        dropdownProps = _splitComponentProps[0],\\n        toggleProps = _splitComponentProps[1];\\n\\n    return _react2['default'].createElement(\\n      _Dropdown2['default'],\\n      (0, _extends3['default'])({}, dropdownProps, {\\n        bsSize: bsSize,\\n        bsStyle: bsStyle\\n      }),\\n      _react2['default'].createElement(\\n        _Dropdown2['default'].Toggle,\\n        (0, _extends3['default'])({}, toggleProps, {\\n          bsSize: bsSize,\\n          bsStyle: bsStyle\\n        }),\\n        title\\n      ),\\n      _react2['default'].createElement(\\n        _Dropdown2['default'].Menu,\\n        null,\\n        children\\n      )\\n    );\\n  };\\n\\n  return DropdownButton;\\n}(_react2['default'].Component);\\n\\nDropdownButton.propTypes = propTypes;\\n\\nexports['default'] = DropdownButton;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/DropdownButton.js\\n// module id = 421\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/DropdownButton.js?\");\n\n/***/ },\n/* 422 */\n/*!************************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/splitComponentProps.js ***!\n  \\************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"\\\"use strict\\\";\\n\\nexports.__esModule = true;\\n\\nvar _entries = __webpack_require__(/*! babel-runtime/core-js/object/entries */ 352);\\n\\nvar _entries2 = _interopRequireDefault(_entries);\\n\\nexports[\\\"default\\\"] = splitComponentProps;\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \\\"default\\\": obj }; }\\n\\nfunction splitComponentProps(props, Component) {\\n  var componentPropTypes = Component.propTypes;\\n\\n  var parentProps = {};\\n  var childProps = {};\\n\\n  (0, _entries2[\\\"default\\\"])(props).forEach(function (_ref) {\\n    var propName = _ref[0],\\n        propValue = _ref[1];\\n\\n    if (componentPropTypes[propName]) {\\n      parentProps[propName] = propValue;\\n    } else {\\n      childProps[propName] = propValue;\\n    }\\n  });\\n\\n  return [parentProps, childProps];\\n}\\nmodule.exports = exports[\\\"default\\\"];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/utils/splitComponentProps.js\\n// module id = 422\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/splitComponentProps.js?\");\n\n/***/ },\n/* 423 */\n/*!***************************************!*\\\n  !*** ./~/react-bootstrap/lib/Fade.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _Transition = __webpack_require__(/*! react-overlays/lib/Transition */ 392);\\n\\nvar _Transition2 = _interopRequireDefault(_Transition);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  /**\\n   * Show the component; triggers the fade in or fade out animation\\n   */\\n  'in': _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Unmount the component (remove it from the DOM) when it is faded out\\n   */\\n  unmountOnExit: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Run the fade in animation when the component mounts, if it is initially\\n   * shown\\n   */\\n  transitionAppear: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Duration of the fade animation in milliseconds, to ensure that finishing\\n   * callbacks are fired even if the original browser transition end events are\\n   * canceled\\n   */\\n  timeout: _react2['default'].PropTypes.number,\\n\\n  /**\\n   * Callback fired before the component fades in\\n   */\\n  onEnter: _react2['default'].PropTypes.func,\\n  /**\\n   * Callback fired after the component starts to fade in\\n   */\\n  onEntering: _react2['default'].PropTypes.func,\\n  /**\\n   * Callback fired after the has component faded in\\n   */\\n  onEntered: _react2['default'].PropTypes.func,\\n  /**\\n   * Callback fired before the component fades out\\n   */\\n  onExit: _react2['default'].PropTypes.func,\\n  /**\\n   * Callback fired after the component starts to fade out\\n   */\\n  onExiting: _react2['default'].PropTypes.func,\\n  /**\\n   * Callback fired after the component has faded out\\n   */\\n  onExited: _react2['default'].PropTypes.func\\n};\\n\\nvar defaultProps = {\\n  'in': false,\\n  timeout: 300,\\n  unmountOnExit: false,\\n  transitionAppear: false\\n};\\n\\nvar Fade = function (_React$Component) {\\n  (0, _inherits3['default'])(Fade, _React$Component);\\n\\n  function Fade() {\\n    (0, _classCallCheck3['default'])(this, Fade);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Fade.prototype.render = function render() {\\n    return _react2['default'].createElement(_Transition2['default'], (0, _extends3['default'])({}, this.props, {\\n      className: (0, _classnames2['default'])(this.props.className, 'fade'),\\n      enteredClassName: 'in',\\n      enteringClassName: 'in'\\n    }));\\n  };\\n\\n  return Fade;\\n}(_react2['default'].Component);\\n\\nFade.propTypes = propTypes;\\nFade.defaultProps = defaultProps;\\n\\nexports['default'] = Fade;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Fade.js\\n// module id = 423\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Fade.js?\");\n\n/***/ },\n/* 424 */\n/*!***************************************!*\\\n  !*** ./~/react-bootstrap/lib/Form.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  horizontal: _react2['default'].PropTypes.bool,\\n  inline: _react2['default'].PropTypes.bool,\\n  componentClass: _elementType2['default']\\n};\\n\\nvar defaultProps = {\\n  horizontal: false,\\n  inline: false,\\n  componentClass: 'form'\\n};\\n\\nvar Form = function (_React$Component) {\\n  (0, _inherits3['default'])(Form, _React$Component);\\n\\n  function Form() {\\n    (0, _classCallCheck3['default'])(this, Form);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Form.prototype.render = function render() {\\n    var _props = this.props,\\n        horizontal = _props.horizontal,\\n        inline = _props.inline,\\n        Component = _props.componentClass,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['horizontal', 'inline', 'componentClass', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = [];\\n    if (horizontal) {\\n      classes.push((0, _bootstrapUtils.prefix)(bsProps, 'horizontal'));\\n    }\\n    if (inline) {\\n      classes.push((0, _bootstrapUtils.prefix)(bsProps, 'inline'));\\n    }\\n\\n    return _react2['default'].createElement(Component, (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return Form;\\n}(_react2['default'].Component);\\n\\nForm.propTypes = propTypes;\\nForm.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('form', Form);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Form.js\\n// module id = 424\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Form.js?\");\n\n/***/ },\n/* 425 */\n/*!**********************************************!*\\\n  !*** ./~/react-bootstrap/lib/FormControl.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _warning = __webpack_require__(/*! warning */ 41);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nvar _FormControlFeedback = __webpack_require__(/*! ./FormControlFeedback */ 426);\\n\\nvar _FormControlFeedback2 = _interopRequireDefault(_FormControlFeedback);\\n\\nvar _FormControlStatic = __webpack_require__(/*! ./FormControlStatic */ 427);\\n\\nvar _FormControlStatic2 = _interopRequireDefault(_FormControlStatic);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  componentClass: _elementType2['default'],\\n  /**\\n   * Only relevant if `componentClass` is `'input'`.\\n   */\\n  type: _react2['default'].PropTypes.string,\\n  /**\\n   * Uses `controlId` from `<FormGroup>` if not explicitly specified.\\n   */\\n  id: _react2['default'].PropTypes.string,\\n  /**\\n   * Attaches a ref to the `<input>` element. Only functions can be used here.\\n   *\\n   * ```js\\n   * <FormControl inputRef={ref => { this.input = ref; }} />\\n   * ```\\n   */\\n  inputRef: _react2['default'].PropTypes.func\\n};\\n\\nvar defaultProps = {\\n  componentClass: 'input'\\n};\\n\\nvar contextTypes = {\\n  $bs_formGroup: _react2['default'].PropTypes.object\\n};\\n\\nvar FormControl = function (_React$Component) {\\n  (0, _inherits3['default'])(FormControl, _React$Component);\\n\\n  function FormControl() {\\n    (0, _classCallCheck3['default'])(this, FormControl);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  FormControl.prototype.render = function render() {\\n    var formGroup = this.context.$bs_formGroup;\\n    var controlId = formGroup && formGroup.controlId;\\n\\n    var _props = this.props,\\n        Component = _props.componentClass,\\n        type = _props.type,\\n        _props$id = _props.id,\\n        id = _props$id === undefined ? controlId : _props$id,\\n        inputRef = _props.inputRef,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['componentClass', 'type', 'id', 'inputRef', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    process.env.NODE_ENV !== 'production' ? (0, _warning2['default'])(controlId == null || id === controlId, '`controlId` is ignored on `<FormControl>` when `id` is specified.') : void 0;\\n\\n    // input[type=\\\"file\\\"] should not have .form-control.\\n    var classes = void 0;\\n    if (type !== 'file') {\\n      classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n    }\\n\\n    return _react2['default'].createElement(Component, (0, _extends3['default'])({}, elementProps, {\\n      type: type,\\n      id: id,\\n      ref: inputRef,\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return FormControl;\\n}(_react2['default'].Component);\\n\\nFormControl.propTypes = propTypes;\\nFormControl.defaultProps = defaultProps;\\nFormControl.contextTypes = contextTypes;\\n\\nFormControl.Feedback = _FormControlFeedback2['default'];\\nFormControl.Static = _FormControlStatic2['default'];\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('form-control', FormControl);\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/FormControl.js\\n// module id = 425\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/FormControl.js?\");\n\n/***/ },\n/* 426 */\n/*!******************************************************!*\\\n  !*** ./~/react-bootstrap/lib/FormControlFeedback.js ***!\n  \\******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _Glyphicon = __webpack_require__(/*! ./Glyphicon */ 377);\\n\\nvar _Glyphicon2 = _interopRequireDefault(_Glyphicon);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar defaultProps = {\\n  bsRole: 'feedback'\\n};\\n\\nvar contextTypes = {\\n  $bs_formGroup: _react2['default'].PropTypes.object\\n};\\n\\nvar FormControlFeedback = function (_React$Component) {\\n  (0, _inherits3['default'])(FormControlFeedback, _React$Component);\\n\\n  function FormControlFeedback() {\\n    (0, _classCallCheck3['default'])(this, FormControlFeedback);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  FormControlFeedback.prototype.getGlyph = function getGlyph(validationState) {\\n    switch (validationState) {\\n      case 'success':\\n        return 'ok';\\n      case 'warning':\\n        return 'warning-sign';\\n      case 'error':\\n        return 'remove';\\n      default:\\n        return null;\\n    }\\n  };\\n\\n  FormControlFeedback.prototype.renderDefaultFeedback = function renderDefaultFeedback(formGroup, className, classes, elementProps) {\\n    var glyph = this.getGlyph(formGroup && formGroup.validationState);\\n    if (!glyph) {\\n      return null;\\n    }\\n\\n    return _react2['default'].createElement(_Glyphicon2['default'], (0, _extends3['default'])({}, elementProps, {\\n      glyph: glyph,\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  FormControlFeedback.prototype.render = function render() {\\n    var _props = this.props,\\n        className = _props.className,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['className', 'children']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    if (!children) {\\n      return this.renderDefaultFeedback(this.context.$bs_formGroup, className, classes, elementProps);\\n    }\\n\\n    var child = _react2['default'].Children.only(children);\\n    return _react2['default'].cloneElement(child, (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(child.props.className, className, classes)\\n    }));\\n  };\\n\\n  return FormControlFeedback;\\n}(_react2['default'].Component);\\n\\nFormControlFeedback.defaultProps = defaultProps;\\nFormControlFeedback.contextTypes = contextTypes;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('form-control-feedback', FormControlFeedback);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/FormControlFeedback.js\\n// module id = 426\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/FormControlFeedback.js?\");\n\n/***/ },\n/* 427 */\n/*!****************************************************!*\\\n  !*** ./~/react-bootstrap/lib/FormControlStatic.js ***!\n  \\****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  componentClass: _elementType2['default']\\n};\\n\\nvar defaultProps = {\\n  componentClass: 'p'\\n};\\n\\nvar FormControlStatic = function (_React$Component) {\\n  (0, _inherits3['default'])(FormControlStatic, _React$Component);\\n\\n  function FormControlStatic() {\\n    (0, _classCallCheck3['default'])(this, FormControlStatic);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  FormControlStatic.prototype.render = function render() {\\n    var _props = this.props,\\n        Component = _props.componentClass,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['componentClass', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement(Component, (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return FormControlStatic;\\n}(_react2['default'].Component);\\n\\nFormControlStatic.propTypes = propTypes;\\nFormControlStatic.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('form-control-static', FormControlStatic);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/FormControlStatic.js\\n// module id = 427\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/FormControlStatic.js?\");\n\n/***/ },\n/* 428 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/FormGroup.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _StyleConfig = __webpack_require__(/*! ./utils/StyleConfig */ 356);\\n\\nvar _ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 358);\\n\\nvar _ValidComponentChildren2 = _interopRequireDefault(_ValidComponentChildren);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  /**\\n   * Sets `id` on `<FormControl>` and `htmlFor` on `<FormGroup.Label>`.\\n   */\\n  controlId: _react2['default'].PropTypes.string,\\n  validationState: _react2['default'].PropTypes.oneOf(['success', 'warning', 'error', null])\\n};\\n\\nvar childContextTypes = {\\n  $bs_formGroup: _react2['default'].PropTypes.object.isRequired\\n};\\n\\nvar FormGroup = function (_React$Component) {\\n  (0, _inherits3['default'])(FormGroup, _React$Component);\\n\\n  function FormGroup() {\\n    (0, _classCallCheck3['default'])(this, FormGroup);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  FormGroup.prototype.getChildContext = function getChildContext() {\\n    var _props = this.props,\\n        controlId = _props.controlId,\\n        validationState = _props.validationState;\\n\\n\\n    return {\\n      $bs_formGroup: {\\n        controlId: controlId,\\n        validationState: validationState\\n      }\\n    };\\n  };\\n\\n  FormGroup.prototype.hasFeedback = function hasFeedback(children) {\\n    var _this2 = this;\\n\\n    return _ValidComponentChildren2['default'].some(children, function (child) {\\n      return child.props.bsRole === 'feedback' || child.props.children && _this2.hasFeedback(child.props.children);\\n    });\\n  };\\n\\n  FormGroup.prototype.render = function render() {\\n    var _props2 = this.props,\\n        validationState = _props2.validationState,\\n        className = _props2.className,\\n        children = _props2.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props2, ['validationState', 'className', 'children']);\\n\\n    var _splitBsPropsAndOmit = (0, _bootstrapUtils.splitBsPropsAndOmit)(props, ['controlId']),\\n        bsProps = _splitBsPropsAndOmit[0],\\n        elementProps = _splitBsPropsAndOmit[1];\\n\\n    var classes = (0, _extends3['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), {\\n      'has-feedback': this.hasFeedback(children)\\n    });\\n    if (validationState) {\\n      classes['has-' + validationState] = true;\\n    }\\n\\n    return _react2['default'].createElement(\\n      'div',\\n      (0, _extends3['default'])({}, elementProps, {\\n        className: (0, _classnames2['default'])(className, classes)\\n      }),\\n      children\\n    );\\n  };\\n\\n  return FormGroup;\\n}(_react2['default'].Component);\\n\\nFormGroup.propTypes = propTypes;\\nFormGroup.childContextTypes = childContextTypes;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('form-group', (0, _bootstrapUtils.bsSizes)([_StyleConfig.Size.LARGE, _StyleConfig.Size.SMALL], FormGroup));\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/FormGroup.js\\n// module id = 428\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/FormGroup.js?\");\n\n/***/ },\n/* 429 */\n/*!***************************************!*\\\n  !*** ./~/react-bootstrap/lib/Grid.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  /**\\n   * Turn any fixed-width grid layout into a full-width layout by this property.\\n   *\\n   * Adds `container-fluid` class.\\n   */\\n  fluid: _react2['default'].PropTypes.bool,\\n  /**\\n   * You can use a custom element for this component\\n   */\\n  componentClass: _elementType2['default']\\n};\\n\\nvar defaultProps = {\\n  componentClass: 'div',\\n  fluid: false\\n};\\n\\nvar Grid = function (_React$Component) {\\n  (0, _inherits3['default'])(Grid, _React$Component);\\n\\n  function Grid() {\\n    (0, _classCallCheck3['default'])(this, Grid);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Grid.prototype.render = function render() {\\n    var _props = this.props,\\n        fluid = _props.fluid,\\n        Component = _props.componentClass,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['fluid', 'componentClass', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.prefix)(bsProps, fluid && 'fluid');\\n\\n    return _react2['default'].createElement(Component, (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return Grid;\\n}(_react2['default'].Component);\\n\\nGrid.propTypes = propTypes;\\nGrid.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('container', Grid);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Grid.js\\n// module id = 429\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Grid.js?\");\n\n/***/ },\n/* 430 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/HelpBlock.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar HelpBlock = function (_React$Component) {\\n  (0, _inherits3['default'])(HelpBlock, _React$Component);\\n\\n  function HelpBlock() {\\n    (0, _classCallCheck3['default'])(this, HelpBlock);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  HelpBlock.prototype.render = function render() {\\n    var _props = this.props,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement('span', (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return HelpBlock;\\n}(_react2['default'].Component);\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('help-block', HelpBlock);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/HelpBlock.js\\n// module id = 430\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/HelpBlock.js?\");\n\n/***/ },\n/* 431 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Image.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  /**\\n   * Sets image as responsive image\\n   */\\n  responsive: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Sets image shape as rounded\\n   */\\n  rounded: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Sets image shape as circle\\n   */\\n  circle: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Sets image shape as thumbnail\\n   */\\n  thumbnail: _react2['default'].PropTypes.bool\\n};\\n\\nvar defaultProps = {\\n  responsive: false,\\n  rounded: false,\\n  circle: false,\\n  thumbnail: false\\n};\\n\\nvar Image = function (_React$Component) {\\n  (0, _inherits3['default'])(Image, _React$Component);\\n\\n  function Image() {\\n    (0, _classCallCheck3['default'])(this, Image);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Image.prototype.render = function render() {\\n    var _classes;\\n\\n    var _props = this.props,\\n        responsive = _props.responsive,\\n        rounded = _props.rounded,\\n        circle = _props.circle,\\n        thumbnail = _props.thumbnail,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['responsive', 'rounded', 'circle', 'thumbnail', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (_classes = {}, _classes[(0, _bootstrapUtils.prefix)(bsProps, 'responsive')] = responsive, _classes[(0, _bootstrapUtils.prefix)(bsProps, 'rounded')] = rounded, _classes[(0, _bootstrapUtils.prefix)(bsProps, 'circle')] = circle, _classes[(0, _bootstrapUtils.prefix)(bsProps, 'thumbnail')] = thumbnail, _classes);\\n\\n    return _react2['default'].createElement('img', (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return Image;\\n}(_react2['default'].Component);\\n\\nImage.propTypes = propTypes;\\nImage.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('img', Image);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Image.js\\n// module id = 431\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Image.js?\");\n\n/***/ },\n/* 432 */\n/*!*********************************************!*\\\n  !*** ./~/react-bootstrap/lib/InputGroup.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _InputGroupAddon = __webpack_require__(/*! ./InputGroupAddon */ 433);\\n\\nvar _InputGroupAddon2 = _interopRequireDefault(_InputGroupAddon);\\n\\nvar _InputGroupButton = __webpack_require__(/*! ./InputGroupButton */ 434);\\n\\nvar _InputGroupButton2 = _interopRequireDefault(_InputGroupButton);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _StyleConfig = __webpack_require__(/*! ./utils/StyleConfig */ 356);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar InputGroup = function (_React$Component) {\\n  (0, _inherits3['default'])(InputGroup, _React$Component);\\n\\n  function InputGroup() {\\n    (0, _classCallCheck3['default'])(this, InputGroup);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  InputGroup.prototype.render = function render() {\\n    var _props = this.props,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement('span', (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return InputGroup;\\n}(_react2['default'].Component);\\n\\nInputGroup.Addon = _InputGroupAddon2['default'];\\nInputGroup.Button = _InputGroupButton2['default'];\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('input-group', (0, _bootstrapUtils.bsSizes)([_StyleConfig.Size.LARGE, _StyleConfig.Size.SMALL], InputGroup));\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/InputGroup.js\\n// module id = 432\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/InputGroup.js?\");\n\n/***/ },\n/* 433 */\n/*!**************************************************!*\\\n  !*** ./~/react-bootstrap/lib/InputGroupAddon.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar InputGroupAddon = function (_React$Component) {\\n  (0, _inherits3['default'])(InputGroupAddon, _React$Component);\\n\\n  function InputGroupAddon() {\\n    (0, _classCallCheck3['default'])(this, InputGroupAddon);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  InputGroupAddon.prototype.render = function render() {\\n    var _props = this.props,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement('span', (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return InputGroupAddon;\\n}(_react2['default'].Component);\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('input-group-addon', InputGroupAddon);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/InputGroupAddon.js\\n// module id = 433\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/InputGroupAddon.js?\");\n\n/***/ },\n/* 434 */\n/*!***************************************************!*\\\n  !*** ./~/react-bootstrap/lib/InputGroupButton.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar InputGroupButton = function (_React$Component) {\\n  (0, _inherits3['default'])(InputGroupButton, _React$Component);\\n\\n  function InputGroupButton() {\\n    (0, _classCallCheck3['default'])(this, InputGroupButton);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  InputGroupButton.prototype.render = function render() {\\n    var _props = this.props,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement('span', (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return InputGroupButton;\\n}(_react2['default'].Component);\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('input-group-btn', InputGroupButton);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/InputGroupButton.js\\n// module id = 434\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/InputGroupButton.js?\");\n\n/***/ },\n/* 435 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/Jumbotron.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  componentClass: _elementType2['default']\\n};\\n\\nvar defaultProps = {\\n  componentClass: 'div'\\n};\\n\\nvar Jumbotron = function (_React$Component) {\\n  (0, _inherits3['default'])(Jumbotron, _React$Component);\\n\\n  function Jumbotron() {\\n    (0, _classCallCheck3['default'])(this, Jumbotron);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Jumbotron.prototype.render = function render() {\\n    var _props = this.props,\\n        Component = _props.componentClass,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['componentClass', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement(Component, (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return Jumbotron;\\n}(_react2['default'].Component);\\n\\nJumbotron.propTypes = propTypes;\\nJumbotron.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('jumbotron', Jumbotron);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Jumbotron.js\\n// module id = 435\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Jumbotron.js?\");\n\n/***/ },\n/* 436 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Label.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _values = __webpack_require__(/*! babel-runtime/core-js/object/values */ 360);\\n\\nvar _values2 = _interopRequireDefault(_values);\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _StyleConfig = __webpack_require__(/*! ./utils/StyleConfig */ 356);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar Label = function (_React$Component) {\\n  (0, _inherits3['default'])(Label, _React$Component);\\n\\n  function Label() {\\n    (0, _classCallCheck3['default'])(this, Label);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Label.prototype.hasContent = function hasContent(children) {\\n    var result = false;\\n\\n    _react2['default'].Children.forEach(children, function (child) {\\n      if (result) {\\n        return;\\n      }\\n\\n      if (child || child === 0) {\\n        result = true;\\n      }\\n    });\\n\\n    return result;\\n  };\\n\\n  Label.prototype.render = function render() {\\n    var _props = this.props,\\n        className = _props.className,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['className', 'children']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _extends3['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), {\\n\\n      // Hack for collapsing on IE8.\\n      hidden: !this.hasContent(children)\\n    });\\n\\n    return _react2['default'].createElement(\\n      'span',\\n      (0, _extends3['default'])({}, elementProps, {\\n        className: (0, _classnames2['default'])(className, classes)\\n      }),\\n      children\\n    );\\n  };\\n\\n  return Label;\\n}(_react2['default'].Component);\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('label', (0, _bootstrapUtils.bsStyles)([].concat((0, _values2['default'])(_StyleConfig.State), [_StyleConfig.Style.DEFAULT, _StyleConfig.Style.PRIMARY]), _StyleConfig.Style.DEFAULT, Label));\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Label.js\\n// module id = 436\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Label.js?\");\n\n/***/ },\n/* 437 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/ListGroup.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _ListGroupItem = __webpack_require__(/*! ./ListGroupItem */ 438);\\n\\nvar _ListGroupItem2 = _interopRequireDefault(_ListGroupItem);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 358);\\n\\nvar _ValidComponentChildren2 = _interopRequireDefault(_ValidComponentChildren);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  /**\\n   * You can use a custom element type for this component.\\n   *\\n   * If not specified, it will be treated as `'li'` if every child is a\\n   * non-actionable `<ListGroupItem>`, and `'div'` otherwise.\\n   */\\n  componentClass: _elementType2['default']\\n};\\n\\nfunction getDefaultComponent(children) {\\n  if (!children) {\\n    // FIXME: This is the old behavior. Is this right?\\n    return 'div';\\n  }\\n\\n  if (_ValidComponentChildren2['default'].some(children, function (child) {\\n    return child.type !== _ListGroupItem2['default'] || child.props.href || child.props.onClick;\\n  })) {\\n    return 'div';\\n  }\\n\\n  return 'ul';\\n}\\n\\nvar ListGroup = function (_React$Component) {\\n  (0, _inherits3['default'])(ListGroup, _React$Component);\\n\\n  function ListGroup() {\\n    (0, _classCallCheck3['default'])(this, ListGroup);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  ListGroup.prototype.render = function render() {\\n    var _props = this.props,\\n        children = _props.children,\\n        _props$componentClass = _props.componentClass,\\n        Component = _props$componentClass === undefined ? getDefaultComponent(children) : _props$componentClass,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['children', 'componentClass', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    var useListItem = Component === 'ul' && _ValidComponentChildren2['default'].every(children, function (child) {\\n      return child.type === _ListGroupItem2['default'];\\n    });\\n\\n    return _react2['default'].createElement(\\n      Component,\\n      (0, _extends3['default'])({}, elementProps, {\\n        className: (0, _classnames2['default'])(className, classes)\\n      }),\\n      useListItem ? _ValidComponentChildren2['default'].map(children, function (child) {\\n        return (0, _react.cloneElement)(child, { listItem: true });\\n      }) : children\\n    );\\n  };\\n\\n  return ListGroup;\\n}(_react2['default'].Component);\\n\\nListGroup.propTypes = propTypes;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('list-group', ListGroup);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/ListGroup.js\\n// module id = 437\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ListGroup.js?\");\n\n/***/ },\n/* 438 */\n/*!************************************************!*\\\n  !*** ./~/react-bootstrap/lib/ListGroupItem.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _values = __webpack_require__(/*! babel-runtime/core-js/object/values */ 360);\\n\\nvar _values2 = _interopRequireDefault(_values);\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _StyleConfig = __webpack_require__(/*! ./utils/StyleConfig */ 356);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  active: _react2['default'].PropTypes.any,\\n  disabled: _react2['default'].PropTypes.any,\\n  header: _react2['default'].PropTypes.node,\\n  listItem: _react2['default'].PropTypes.bool,\\n  onClick: _react2['default'].PropTypes.func,\\n  href: _react2['default'].PropTypes.string,\\n  type: _react2['default'].PropTypes.string\\n};\\n\\nvar defaultProps = {\\n  listItem: false\\n};\\n\\nvar ListGroupItem = function (_React$Component) {\\n  (0, _inherits3['default'])(ListGroupItem, _React$Component);\\n\\n  function ListGroupItem() {\\n    (0, _classCallCheck3['default'])(this, ListGroupItem);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  ListGroupItem.prototype.renderHeader = function renderHeader(header, headingClassName) {\\n    if (_react2['default'].isValidElement(header)) {\\n      return (0, _react.cloneElement)(header, {\\n        className: (0, _classnames2['default'])(header.props.className, headingClassName)\\n      });\\n    }\\n\\n    return _react2['default'].createElement(\\n      'h4',\\n      { className: headingClassName },\\n      header\\n    );\\n  };\\n\\n  ListGroupItem.prototype.render = function render() {\\n    var _props = this.props,\\n        active = _props.active,\\n        disabled = _props.disabled,\\n        className = _props.className,\\n        header = _props.header,\\n        listItem = _props.listItem,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['active', 'disabled', 'className', 'header', 'listItem', 'children']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _extends3['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), {\\n      active: active,\\n      disabled: disabled\\n    });\\n\\n    var Component = void 0;\\n\\n    if (elementProps.href) {\\n      Component = 'a';\\n    } else if (elementProps.onClick) {\\n      Component = 'button';\\n      elementProps.type = elementProps.type || 'button';\\n    } else if (listItem) {\\n      Component = 'li';\\n    } else {\\n      Component = 'span';\\n    }\\n\\n    elementProps.className = (0, _classnames2['default'])(className, classes);\\n\\n    // TODO: Deprecate `header` prop.\\n    if (header) {\\n      return _react2['default'].createElement(\\n        Component,\\n        elementProps,\\n        this.renderHeader(header, (0, _bootstrapUtils.prefix)(bsProps, 'heading')),\\n        _react2['default'].createElement(\\n          'p',\\n          { className: (0, _bootstrapUtils.prefix)(bsProps, 'text') },\\n          children\\n        )\\n      );\\n    }\\n\\n    return _react2['default'].createElement(\\n      Component,\\n      elementProps,\\n      children\\n    );\\n  };\\n\\n  return ListGroupItem;\\n}(_react2['default'].Component);\\n\\nListGroupItem.propTypes = propTypes;\\nListGroupItem.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('list-group-item', (0, _bootstrapUtils.bsStyles)((0, _values2['default'])(_StyleConfig.State), ListGroupItem));\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/ListGroupItem.js\\n// module id = 438\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ListGroupItem.js?\");\n\n/***/ },\n/* 439 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Media.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _MediaBody = __webpack_require__(/*! ./MediaBody */ 440);\\n\\nvar _MediaBody2 = _interopRequireDefault(_MediaBody);\\n\\nvar _MediaHeading = __webpack_require__(/*! ./MediaHeading */ 441);\\n\\nvar _MediaHeading2 = _interopRequireDefault(_MediaHeading);\\n\\nvar _MediaLeft = __webpack_require__(/*! ./MediaLeft */ 442);\\n\\nvar _MediaLeft2 = _interopRequireDefault(_MediaLeft);\\n\\nvar _MediaList = __webpack_require__(/*! ./MediaList */ 443);\\n\\nvar _MediaList2 = _interopRequireDefault(_MediaList);\\n\\nvar _MediaListItem = __webpack_require__(/*! ./MediaListItem */ 444);\\n\\nvar _MediaListItem2 = _interopRequireDefault(_MediaListItem);\\n\\nvar _MediaRight = __webpack_require__(/*! ./MediaRight */ 445);\\n\\nvar _MediaRight2 = _interopRequireDefault(_MediaRight);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  componentClass: _elementType2['default']\\n};\\n\\nvar defaultProps = {\\n  componentClass: 'div'\\n};\\n\\nvar Media = function (_React$Component) {\\n  (0, _inherits3['default'])(Media, _React$Component);\\n\\n  function Media() {\\n    (0, _classCallCheck3['default'])(this, Media);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Media.prototype.render = function render() {\\n    var _props = this.props,\\n        Component = _props.componentClass,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['componentClass', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement(Component, (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return Media;\\n}(_react2['default'].Component);\\n\\nMedia.propTypes = propTypes;\\nMedia.defaultProps = defaultProps;\\n\\nMedia.Heading = _MediaHeading2['default'];\\nMedia.Body = _MediaBody2['default'];\\nMedia.Left = _MediaLeft2['default'];\\nMedia.Right = _MediaRight2['default'];\\nMedia.List = _MediaList2['default'];\\nMedia.ListItem = _MediaListItem2['default'];\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('media', Media);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Media.js\\n// module id = 439\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Media.js?\");\n\n/***/ },\n/* 440 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/MediaBody.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  componentClass: _elementType2['default']\\n};\\n\\nvar defaultProps = {\\n  componentClass: 'div'\\n};\\n\\nvar MediaBody = function (_React$Component) {\\n  (0, _inherits3['default'])(MediaBody, _React$Component);\\n\\n  function MediaBody() {\\n    (0, _classCallCheck3['default'])(this, MediaBody);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  MediaBody.prototype.render = function render() {\\n    var _props = this.props,\\n        Component = _props.componentClass,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['componentClass', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement(Component, (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return MediaBody;\\n}(_react2['default'].Component);\\n\\nMediaBody.propTypes = propTypes;\\nMediaBody.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('media-body', MediaBody);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/MediaBody.js\\n// module id = 440\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/MediaBody.js?\");\n\n/***/ },\n/* 441 */\n/*!***********************************************!*\\\n  !*** ./~/react-bootstrap/lib/MediaHeading.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  componentClass: _elementType2['default']\\n};\\n\\nvar defaultProps = {\\n  componentClass: 'h4'\\n};\\n\\nvar MediaHeading = function (_React$Component) {\\n  (0, _inherits3['default'])(MediaHeading, _React$Component);\\n\\n  function MediaHeading() {\\n    (0, _classCallCheck3['default'])(this, MediaHeading);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  MediaHeading.prototype.render = function render() {\\n    var _props = this.props,\\n        Component = _props.componentClass,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['componentClass', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement(Component, (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return MediaHeading;\\n}(_react2['default'].Component);\\n\\nMediaHeading.propTypes = propTypes;\\nMediaHeading.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('media-heading', MediaHeading);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/MediaHeading.js\\n// module id = 441\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/MediaHeading.js?\");\n\n/***/ },\n/* 442 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/MediaLeft.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _Media = __webpack_require__(/*! ./Media */ 439);\\n\\nvar _Media2 = _interopRequireDefault(_Media);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  /**\\n   * Align the media to the top, middle, or bottom of the media object.\\n   */\\n  align: _react2['default'].PropTypes.oneOf(['top', 'middle', 'bottom'])\\n};\\n\\nvar MediaLeft = function (_React$Component) {\\n  (0, _inherits3['default'])(MediaLeft, _React$Component);\\n\\n  function MediaLeft() {\\n    (0, _classCallCheck3['default'])(this, MediaLeft);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  MediaLeft.prototype.render = function render() {\\n    var _props = this.props,\\n        align = _props.align,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['align', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    if (align) {\\n      // The class is e.g. `media-top`, not `media-left-top`.\\n      classes[(0, _bootstrapUtils.prefix)(_Media2['default'].defaultProps, align)] = true;\\n    }\\n\\n    return _react2['default'].createElement('div', (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return MediaLeft;\\n}(_react2['default'].Component);\\n\\nMediaLeft.propTypes = propTypes;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('media-left', MediaLeft);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/MediaLeft.js\\n// module id = 442\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/MediaLeft.js?\");\n\n/***/ },\n/* 443 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/MediaList.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar MediaList = function (_React$Component) {\\n  (0, _inherits3['default'])(MediaList, _React$Component);\\n\\n  function MediaList() {\\n    (0, _classCallCheck3['default'])(this, MediaList);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  MediaList.prototype.render = function render() {\\n    var _props = this.props,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement('ul', (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return MediaList;\\n}(_react2['default'].Component);\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('media-list', MediaList);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/MediaList.js\\n// module id = 443\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/MediaList.js?\");\n\n/***/ },\n/* 444 */\n/*!************************************************!*\\\n  !*** ./~/react-bootstrap/lib/MediaListItem.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar MediaListItem = function (_React$Component) {\\n  (0, _inherits3['default'])(MediaListItem, _React$Component);\\n\\n  function MediaListItem() {\\n    (0, _classCallCheck3['default'])(this, MediaListItem);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  MediaListItem.prototype.render = function render() {\\n    var _props = this.props,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement('li', (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return MediaListItem;\\n}(_react2['default'].Component);\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('media', MediaListItem);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/MediaListItem.js\\n// module id = 444\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/MediaListItem.js?\");\n\n/***/ },\n/* 445 */\n/*!*********************************************!*\\\n  !*** ./~/react-bootstrap/lib/MediaRight.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _Media = __webpack_require__(/*! ./Media */ 439);\\n\\nvar _Media2 = _interopRequireDefault(_Media);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  /**\\n   * Align the media to the top, middle, or bottom of the media object.\\n   */\\n  align: _react2['default'].PropTypes.oneOf(['top', 'middle', 'bottom'])\\n};\\n\\nvar MediaRight = function (_React$Component) {\\n  (0, _inherits3['default'])(MediaRight, _React$Component);\\n\\n  function MediaRight() {\\n    (0, _classCallCheck3['default'])(this, MediaRight);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  MediaRight.prototype.render = function render() {\\n    var _props = this.props,\\n        align = _props.align,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['align', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    if (align) {\\n      // The class is e.g. `media-top`, not `media-right-top`.\\n      classes[(0, _bootstrapUtils.prefix)(_Media2['default'].defaultProps, align)] = true;\\n    }\\n\\n    return _react2['default'].createElement('div', (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return MediaRight;\\n}(_react2['default'].Component);\\n\\nMediaRight.propTypes = propTypes;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('media-right', MediaRight);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/MediaRight.js\\n// module id = 445\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/MediaRight.js?\");\n\n/***/ },\n/* 446 */\n/*!*******************************************!*\\\n  !*** ./~/react-bootstrap/lib/MenuItem.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _all = __webpack_require__(/*! react-prop-types/lib/all */ 371);\\n\\nvar _all2 = _interopRequireDefault(_all);\\n\\nvar _SafeAnchor = __webpack_require__(/*! ./SafeAnchor */ 366);\\n\\nvar _SafeAnchor2 = _interopRequireDefault(_SafeAnchor);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 357);\\n\\nvar _createChainedFunction2 = _interopRequireDefault(_createChainedFunction);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  /**\\n   * Highlight the menu item as active.\\n   */\\n  active: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Disable the menu item, making it unselectable.\\n   */\\n  disabled: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Styles the menu item as a horizontal rule, providing visual separation between\\n   * groups of menu items.\\n   */\\n  divider: (0, _all2['default'])(_react2['default'].PropTypes.bool, function (_ref) {\\n    var divider = _ref.divider,\\n        children = _ref.children;\\n    return divider && children ? new Error('Children will not be rendered for dividers') : null;\\n  }),\\n\\n  /**\\n   * Value passed to the `onSelect` handler, useful for identifying the selected menu item.\\n   */\\n  eventKey: _react2['default'].PropTypes.any,\\n\\n  /**\\n   * Styles the menu item as a header label, useful for describing a group of menu items.\\n   */\\n  header: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * HTML `href` attribute corresponding to `a.href`.\\n   */\\n  href: _react2['default'].PropTypes.string,\\n\\n  /**\\n   * Callback fired when the menu item is clicked.\\n   */\\n  onClick: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * Callback fired when the menu item is selected.\\n   *\\n   * ```js\\n   * (eventKey: any, event: Object) => any\\n   * ```\\n   */\\n  onSelect: _react2['default'].PropTypes.func\\n};\\n\\nvar defaultProps = {\\n  divider: false,\\n  disabled: false,\\n  header: false\\n};\\n\\nvar MenuItem = function (_React$Component) {\\n  (0, _inherits3['default'])(MenuItem, _React$Component);\\n\\n  function MenuItem(props, context) {\\n    (0, _classCallCheck3['default'])(this, MenuItem);\\n\\n    var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props, context));\\n\\n    _this.handleClick = _this.handleClick.bind(_this);\\n    return _this;\\n  }\\n\\n  MenuItem.prototype.handleClick = function handleClick(event) {\\n    var _props = this.props,\\n        href = _props.href,\\n        disabled = _props.disabled,\\n        onSelect = _props.onSelect,\\n        eventKey = _props.eventKey;\\n\\n\\n    if (!href || disabled) {\\n      event.preventDefault();\\n    }\\n\\n    if (disabled) {\\n      return;\\n    }\\n\\n    if (onSelect) {\\n      onSelect(eventKey, event);\\n    }\\n  };\\n\\n  MenuItem.prototype.render = function render() {\\n    var _props2 = this.props,\\n        active = _props2.active,\\n        disabled = _props2.disabled,\\n        divider = _props2.divider,\\n        header = _props2.header,\\n        onClick = _props2.onClick,\\n        className = _props2.className,\\n        style = _props2.style,\\n        props = (0, _objectWithoutProperties3['default'])(_props2, ['active', 'disabled', 'divider', 'header', 'onClick', 'className', 'style']);\\n\\n    var _splitBsPropsAndOmit = (0, _bootstrapUtils.splitBsPropsAndOmit)(props, ['eventKey', 'onSelect']),\\n        bsProps = _splitBsPropsAndOmit[0],\\n        elementProps = _splitBsPropsAndOmit[1];\\n\\n    if (divider) {\\n      // Forcibly blank out the children; separators shouldn't render any.\\n      elementProps.children = undefined;\\n\\n      return _react2['default'].createElement('li', (0, _extends3['default'])({}, elementProps, {\\n        role: 'separator',\\n        className: (0, _classnames2['default'])(className, 'divider'),\\n        style: style\\n      }));\\n    }\\n\\n    if (header) {\\n      return _react2['default'].createElement('li', (0, _extends3['default'])({}, elementProps, {\\n        role: 'heading',\\n        className: (0, _classnames2['default'])(className, (0, _bootstrapUtils.prefix)(bsProps, 'header')),\\n        style: style\\n      }));\\n    }\\n\\n    return _react2['default'].createElement(\\n      'li',\\n      {\\n        role: 'presentation',\\n        className: (0, _classnames2['default'])(className, { active: active, disabled: disabled }),\\n        style: style\\n      },\\n      _react2['default'].createElement(_SafeAnchor2['default'], (0, _extends3['default'])({}, elementProps, {\\n        role: 'menuitem',\\n        tabIndex: '-1',\\n        onClick: (0, _createChainedFunction2['default'])(onClick, this.handleClick)\\n      }))\\n    );\\n  };\\n\\n  return MenuItem;\\n}(_react2['default'].Component);\\n\\nMenuItem.propTypes = propTypes;\\nMenuItem.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('dropdown', MenuItem);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/MenuItem.js\\n// module id = 446\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/MenuItem.js?\");\n\n/***/ },\n/* 447 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Modal.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _events = __webpack_require__(/*! dom-helpers/events */ 448);\\n\\nvar _events2 = _interopRequireDefault(_events);\\n\\nvar _ownerDocument = __webpack_require__(/*! dom-helpers/ownerDocument */ 398);\\n\\nvar _ownerDocument2 = _interopRequireDefault(_ownerDocument);\\n\\nvar _inDOM = __webpack_require__(/*! dom-helpers/util/inDOM */ 394);\\n\\nvar _inDOM2 = _interopRequireDefault(_inDOM);\\n\\nvar _scrollbarSize = __webpack_require__(/*! dom-helpers/util/scrollbarSize */ 451);\\n\\nvar _scrollbarSize2 = _interopRequireDefault(_scrollbarSize);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _reactDom = __webpack_require__(/*! react-dom */ 110);\\n\\nvar _reactDom2 = _interopRequireDefault(_reactDom);\\n\\nvar _Modal = __webpack_require__(/*! react-overlays/lib/Modal */ 452);\\n\\nvar _Modal2 = _interopRequireDefault(_Modal);\\n\\nvar _isOverflowing = __webpack_require__(/*! react-overlays/lib/utils/isOverflowing */ 461);\\n\\nvar _isOverflowing2 = _interopRequireDefault(_isOverflowing);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _Fade = __webpack_require__(/*! ./Fade */ 423);\\n\\nvar _Fade2 = _interopRequireDefault(_Fade);\\n\\nvar _ModalBody = __webpack_require__(/*! ./ModalBody */ 465);\\n\\nvar _ModalBody2 = _interopRequireDefault(_ModalBody);\\n\\nvar _ModalDialog = __webpack_require__(/*! ./ModalDialog */ 466);\\n\\nvar _ModalDialog2 = _interopRequireDefault(_ModalDialog);\\n\\nvar _ModalFooter = __webpack_require__(/*! ./ModalFooter */ 467);\\n\\nvar _ModalFooter2 = _interopRequireDefault(_ModalFooter);\\n\\nvar _ModalHeader = __webpack_require__(/*! ./ModalHeader */ 468);\\n\\nvar _ModalHeader2 = _interopRequireDefault(_ModalHeader);\\n\\nvar _ModalTitle = __webpack_require__(/*! ./ModalTitle */ 469);\\n\\nvar _ModalTitle2 = _interopRequireDefault(_ModalTitle);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 357);\\n\\nvar _createChainedFunction2 = _interopRequireDefault(_createChainedFunction);\\n\\nvar _splitComponentProps2 = __webpack_require__(/*! ./utils/splitComponentProps */ 422);\\n\\nvar _splitComponentProps3 = _interopRequireDefault(_splitComponentProps2);\\n\\nvar _StyleConfig = __webpack_require__(/*! ./utils/StyleConfig */ 356);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = (0, _extends3['default'])({}, _Modal2['default'].propTypes, _ModalDialog2['default'].propTypes, {\\n\\n  /**\\n   * Include a backdrop component. Specify 'static' for a backdrop that doesn't\\n   * trigger an \\\"onHide\\\" when clicked.\\n   */\\n  backdrop: _react2['default'].PropTypes.oneOf(['static', true, false]),\\n\\n  /**\\n   * Close the modal when escape key is pressed\\n   */\\n  keyboard: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Open and close the Modal with a slide and fade animation.\\n   */\\n  animation: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * A Component type that provides the modal content Markup. This is a useful\\n   * prop when you want to use your own styles and markup to create a custom\\n   * modal component.\\n   */\\n  dialogComponentClass: _elementType2['default'],\\n\\n  /**\\n   * When `true` The modal will automatically shift focus to itself when it\\n   * opens, and replace it to the last focused element when it closes.\\n   * Generally this should never be set to false as it makes the Modal less\\n   * accessible to assistive technologies, like screen-readers.\\n   */\\n  autoFocus: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * When `true` The modal will prevent focus from leaving the Modal while\\n   * open. Consider leaving the default value here, as it is necessary to make\\n   * the Modal work well with assistive technologies, such as screen readers.\\n   */\\n  enforceFocus: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * When `true` The modal will show itself.\\n   */\\n  show: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * A callback fired when the header closeButton or non-static backdrop is\\n   * clicked. Required if either are specified.\\n   */\\n  onHide: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * Callback fired before the Modal transitions in\\n   */\\n  onEnter: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * Callback fired as the Modal begins to transition in\\n   */\\n  onEntering: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * Callback fired after the Modal finishes transitioning in\\n   */\\n  onEntered: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * Callback fired right before the Modal transitions out\\n   */\\n  onExit: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * Callback fired as the Modal begins to transition out\\n   */\\n  onExiting: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * Callback fired after the Modal finishes transitioning out\\n   */\\n  onExited: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * @private\\n   */\\n  container: _Modal2['default'].propTypes.container\\n});\\n\\nvar defaultProps = (0, _extends3['default'])({}, _Modal2['default'].defaultProps, {\\n  animation: true,\\n  dialogComponentClass: _ModalDialog2['default']\\n});\\n\\nvar childContextTypes = {\\n  $bs_modal: _react2['default'].PropTypes.shape({\\n    onHide: _react2['default'].PropTypes.func\\n  })\\n};\\n\\nvar Modal = function (_React$Component) {\\n  (0, _inherits3['default'])(Modal, _React$Component);\\n\\n  function Modal(props, context) {\\n    (0, _classCallCheck3['default'])(this, Modal);\\n\\n    var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props, context));\\n\\n    _this.handleEntering = _this.handleEntering.bind(_this);\\n    _this.handleExited = _this.handleExited.bind(_this);\\n    _this.handleWindowResize = _this.handleWindowResize.bind(_this);\\n    _this.handleDialogClick = _this.handleDialogClick.bind(_this);\\n\\n    _this.state = {\\n      style: {}\\n    };\\n    return _this;\\n  }\\n\\n  Modal.prototype.getChildContext = function getChildContext() {\\n    return {\\n      $bs_modal: {\\n        onHide: this.props.onHide\\n      }\\n    };\\n  };\\n\\n  Modal.prototype.componentWillUnmount = function componentWillUnmount() {\\n    // Clean up the listener if we need to.\\n    this.handleExited();\\n  };\\n\\n  Modal.prototype.handleEntering = function handleEntering() {\\n    // FIXME: This should work even when animation is disabled.\\n    _events2['default'].on(window, 'resize', this.handleWindowResize);\\n    this.updateStyle();\\n  };\\n\\n  Modal.prototype.handleExited = function handleExited() {\\n    // FIXME: This should work even when animation is disabled.\\n    _events2['default'].off(window, 'resize', this.handleWindowResize);\\n  };\\n\\n  Modal.prototype.handleWindowResize = function handleWindowResize() {\\n    this.updateStyle();\\n  };\\n\\n  Modal.prototype.handleDialogClick = function handleDialogClick(e) {\\n    if (e.target !== e.currentTarget) {\\n      return;\\n    }\\n\\n    this.props.onHide();\\n  };\\n\\n  Modal.prototype.updateStyle = function updateStyle() {\\n    if (!_inDOM2['default']) {\\n      return;\\n    }\\n\\n    var dialogNode = this._modal.getDialogElement();\\n    var dialogHeight = dialogNode.scrollHeight;\\n\\n    var document = (0, _ownerDocument2['default'])(dialogNode);\\n    var bodyIsOverflowing = (0, _isOverflowing2['default'])(_reactDom2['default'].findDOMNode(this.props.container || document.body));\\n    var modalIsOverflowing = dialogHeight > document.documentElement.clientHeight;\\n\\n    this.setState({\\n      style: {\\n        paddingRight: bodyIsOverflowing && !modalIsOverflowing ? (0, _scrollbarSize2['default'])() : undefined,\\n        paddingLeft: !bodyIsOverflowing && modalIsOverflowing ? (0, _scrollbarSize2['default'])() : undefined\\n      }\\n    });\\n  };\\n\\n  Modal.prototype.render = function render() {\\n    var _this2 = this;\\n\\n    var _props = this.props,\\n        backdrop = _props.backdrop,\\n        animation = _props.animation,\\n        show = _props.show,\\n        Dialog = _props.dialogComponentClass,\\n        className = _props.className,\\n        style = _props.style,\\n        children = _props.children,\\n        onEntering = _props.onEntering,\\n        onExited = _props.onExited,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['backdrop', 'animation', 'show', 'dialogComponentClass', 'className', 'style', 'children', 'onEntering', 'onExited']);\\n\\n    var _splitComponentProps = (0, _splitComponentProps3['default'])(props, _Modal2['default']),\\n        baseModalProps = _splitComponentProps[0],\\n        dialogProps = _splitComponentProps[1];\\n\\n    var inClassName = show && !animation && 'in';\\n\\n    return _react2['default'].createElement(\\n      _Modal2['default'],\\n      (0, _extends3['default'])({}, baseModalProps, {\\n        ref: function ref(c) {\\n          _this2._modal = c;\\n        },\\n        show: show,\\n        onEntering: (0, _createChainedFunction2['default'])(onEntering, this.handleEntering),\\n        onExited: (0, _createChainedFunction2['default'])(onExited, this.handleExited),\\n        backdrop: backdrop,\\n        backdropClassName: (0, _classnames2['default'])((0, _bootstrapUtils.prefix)(props, 'backdrop'), inClassName),\\n        containerClassName: (0, _bootstrapUtils.prefix)(props, 'open'),\\n        transition: animation ? _Fade2['default'] : undefined,\\n        dialogTransitionTimeout: Modal.TRANSITION_DURATION,\\n        backdropTransitionTimeout: Modal.BACKDROP_TRANSITION_DURATION\\n      }),\\n      _react2['default'].createElement(\\n        Dialog,\\n        (0, _extends3['default'])({}, dialogProps, {\\n          style: (0, _extends3['default'])({}, this.state.style, style),\\n          className: (0, _classnames2['default'])(className, inClassName),\\n          onClick: backdrop === true ? this.handleDialogClick : null\\n        }),\\n        children\\n      )\\n    );\\n  };\\n\\n  return Modal;\\n}(_react2['default'].Component);\\n\\nModal.propTypes = propTypes;\\nModal.defaultProps = defaultProps;\\nModal.childContextTypes = childContextTypes;\\n\\nModal.Body = _ModalBody2['default'];\\nModal.Header = _ModalHeader2['default'];\\nModal.Title = _ModalTitle2['default'];\\nModal.Footer = _ModalFooter2['default'];\\n\\nModal.Dialog = _ModalDialog2['default'];\\n\\nModal.TRANSITION_DURATION = 300;\\nModal.BACKDROP_TRANSITION_DURATION = 150;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('modal', (0, _bootstrapUtils.bsSizes)([_StyleConfig.Size.LARGE, _StyleConfig.Size.SMALL], Modal));\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Modal.js\\n// module id = 447\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Modal.js?\");\n\n/***/ },\n/* 448 */\n/*!***************************************!*\\\n  !*** ./~/dom-helpers/events/index.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\nvar on = __webpack_require__(/*! ./on */ 395),\\n    off = __webpack_require__(/*! ./off */ 417),\\n    filter = __webpack_require__(/*! ./filter */ 449);\\n\\nmodule.exports = { on: on, off: off, filter: filter };\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/events/index.js\\n// module id = 448\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/events/index.js?\");\n\n/***/ },\n/* 449 */\n/*!****************************************!*\\\n  !*** ./~/dom-helpers/events/filter.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar contains = __webpack_require__(/*! ../query/contains */ 399),\\n    qsa = __webpack_require__(/*! ../query/querySelectorAll */ 450);\\n\\nmodule.exports = function (selector, handler) {\\n  return function (e) {\\n    var top = e.currentTarget,\\n        target = e.target,\\n        matches = qsa(top, selector);\\n\\n    if (matches.some(function (match) {\\n      return contains(match, target);\\n    })) handler.call(this, e);\\n  };\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/events/filter.js\\n// module id = 449\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/events/filter.js?\");\n\n/***/ },\n/* 450 */\n/*!*************************************************!*\\\n  !*** ./~/dom-helpers/query/querySelectorAll.js ***!\n  \\*************************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n//     Zepto.js\\n//     (c) 2010-2015 Thomas Fuchs\\n//     Zepto.js may be freely distributed under the MIT license.\\nvar simpleSelectorRE = /^[\\\\w-]*$/,\\n    toArray = Function.prototype.bind.call(Function.prototype.call, [].slice);\\n\\nmodule.exports = function qsa(element, selector) {\\n  var maybeID = selector[0] === '#',\\n      maybeClass = selector[0] === '.',\\n      nameOnly = maybeID || maybeClass ? selector.slice(1) : selector,\\n      isSimple = simpleSelectorRE.test(nameOnly),\\n      found;\\n\\n  if (isSimple) {\\n    if (maybeID) {\\n      element = element.getElementById ? element : document;\\n      return (found = element.getElementById(nameOnly)) ? [found] : [];\\n    }\\n\\n    if (element.getElementsByClassName && maybeClass) return toArray(element.getElementsByClassName(nameOnly));\\n\\n    return toArray(element.getElementsByTagName(selector));\\n  }\\n\\n  return toArray(element.querySelectorAll(selector));\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/query/querySelectorAll.js\\n// module id = 450\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/query/querySelectorAll.js?\");\n\n/***/ },\n/* 451 */\n/*!*********************************************!*\\\n  !*** ./~/dom-helpers/util/scrollbarSize.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar canUseDOM = __webpack_require__(/*! ./inDOM */ 394);\\n\\nvar size;\\n\\nmodule.exports = function (recalc) {\\n  if (!size || recalc) {\\n    if (canUseDOM) {\\n      var scrollDiv = document.createElement('div');\\n\\n      scrollDiv.style.position = 'absolute';\\n      scrollDiv.style.top = '-9999px';\\n      scrollDiv.style.width = '50px';\\n      scrollDiv.style.height = '50px';\\n      scrollDiv.style.overflow = 'scroll';\\n\\n      document.body.appendChild(scrollDiv);\\n      size = scrollDiv.offsetWidth - scrollDiv.clientWidth;\\n      document.body.removeChild(scrollDiv);\\n    }\\n  }\\n\\n  return size;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/util/scrollbarSize.js\\n// module id = 451\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/util/scrollbarSize.js?\");\n\n/***/ },\n/* 452 */\n/*!***************************************!*\\\n  !*** ./~/react-overlays/lib/Modal.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n  value: true\\n});\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /*eslint-disable react/prop-types */\\n\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _warning = __webpack_require__(/*! warning */ 41);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nvar _componentOrElement = __webpack_require__(/*! react-prop-types/lib/componentOrElement */ 453);\\n\\nvar _componentOrElement2 = _interopRequireDefault(_componentOrElement);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _Portal = __webpack_require__(/*! ./Portal */ 454);\\n\\nvar _Portal2 = _interopRequireDefault(_Portal);\\n\\nvar _ModalManager = __webpack_require__(/*! ./ModalManager */ 456);\\n\\nvar _ModalManager2 = _interopRequireDefault(_ModalManager);\\n\\nvar _ownerDocument = __webpack_require__(/*! ./utils/ownerDocument */ 418);\\n\\nvar _ownerDocument2 = _interopRequireDefault(_ownerDocument);\\n\\nvar _addEventListener = __webpack_require__(/*! ./utils/addEventListener */ 416);\\n\\nvar _addEventListener2 = _interopRequireDefault(_addEventListener);\\n\\nvar _addFocusListener = __webpack_require__(/*! ./utils/addFocusListener */ 464);\\n\\nvar _addFocusListener2 = _interopRequireDefault(_addFocusListener);\\n\\nvar _inDOM = __webpack_require__(/*! dom-helpers/util/inDOM */ 394);\\n\\nvar _inDOM2 = _interopRequireDefault(_inDOM);\\n\\nvar _activeElement = __webpack_require__(/*! dom-helpers/activeElement */ 397);\\n\\nvar _activeElement2 = _interopRequireDefault(_activeElement);\\n\\nvar _contains = __webpack_require__(/*! dom-helpers/query/contains */ 399);\\n\\nvar _contains2 = _interopRequireDefault(_contains);\\n\\nvar _getContainer = __webpack_require__(/*! ./utils/getContainer */ 455);\\n\\nvar _getContainer2 = _interopRequireDefault(_getContainer);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar modalManager = new _ModalManager2.default();\\n\\n/**\\n * Love them or hate them, `<Modal/>` provides a solid foundation for creating dialogs, lightboxes, or whatever else.\\n * The Modal component renders its `children` node in front of a backdrop component.\\n *\\n * The Modal offers a few helpful features over using just a `<Portal/>` component and some styles:\\n *\\n * - Manages dialog stacking when one-at-a-time just isn't enough.\\n * - Creates a backdrop, for disabling interaction below the modal.\\n * - It properly manages focus; moving to the modal content, and keeping it there until the modal is closed.\\n * - It disables scrolling of the page content while open.\\n * - Adds the appropriate ARIA roles are automatically.\\n * - Easily pluggable animations via a `<Transition/>` component.\\n *\\n * Note that, in the same way the backdrop element prevents users from clicking or interacting\\n * with the page content underneath the Modal, Screen readers also need to be signaled to not to\\n * interact with page content while the Modal is open. To do this, we use a common technique of applying\\n * the `aria-hidden='true'` attribute to the non-Modal elements in the Modal `container`. This means that for\\n * a Modal to be truly modal, it should have a `container` that is _outside_ your app's\\n * React hierarchy (such as the default: document.body).\\n */\\nvar Modal = _react2.default.createClass({\\n  displayName: 'Modal',\\n\\n\\n  propTypes: _extends({}, _Portal2.default.propTypes, {\\n\\n    /**\\n     * Set the visibility of the Modal\\n     */\\n    show: _react2.default.PropTypes.bool,\\n\\n    /**\\n     * A Node, Component instance, or function that returns either. The Modal is appended to it's container element.\\n     *\\n     * For the sake of assistive technologies, the container should usually be the document body, so that the rest of the\\n     * page content can be placed behind a virtual backdrop as well as a visual one.\\n     */\\n    container: _react2.default.PropTypes.oneOfType([_componentOrElement2.default, _react2.default.PropTypes.func]),\\n\\n    /**\\n     * A callback fired when the Modal is opening.\\n     */\\n    onShow: _react2.default.PropTypes.func,\\n\\n    /**\\n     * A callback fired when either the backdrop is clicked, or the escape key is pressed.\\n     *\\n     * The `onHide` callback only signals intent from the Modal,\\n     * you must actually set the `show` prop to `false` for the Modal to close.\\n     */\\n    onHide: _react2.default.PropTypes.func,\\n\\n    /**\\n     * Include a backdrop component.\\n     */\\n    backdrop: _react2.default.PropTypes.oneOfType([_react2.default.PropTypes.bool, _react2.default.PropTypes.oneOf(['static'])]),\\n\\n    /**\\n     * A function that returns a backdrop component. Useful for custom\\n     * backdrop rendering.\\n     *\\n     * ```js\\n     *  renderBackdrop={props => <MyBackdrop {...props} />}\\n     * ```\\n     */\\n    renderBackdrop: _react2.default.PropTypes.func,\\n\\n    /**\\n     * A callback fired when the escape key, if specified in `keyboard`, is pressed.\\n     */\\n    onEscapeKeyUp: _react2.default.PropTypes.func,\\n\\n    /**\\n     * A callback fired when the backdrop, if specified, is clicked.\\n     */\\n    onBackdropClick: _react2.default.PropTypes.func,\\n\\n    /**\\n     * A style object for the backdrop component.\\n     */\\n    backdropStyle: _react2.default.PropTypes.object,\\n\\n    /**\\n     * A css class or classes for the backdrop component.\\n     */\\n    backdropClassName: _react2.default.PropTypes.string,\\n\\n    /**\\n     * A css class or set of classes applied to the modal container when the modal is open,\\n     * and removed when it is closed.\\n     */\\n    containerClassName: _react2.default.PropTypes.string,\\n\\n    /**\\n     * Close the modal when escape key is pressed\\n     */\\n    keyboard: _react2.default.PropTypes.bool,\\n\\n    /**\\n     * A `<Transition/>` component to use for the dialog and backdrop components.\\n     */\\n    transition: _elementType2.default,\\n\\n    /**\\n     * The `timeout` of the dialog transition if specified. This number is used to ensure that\\n     * transition callbacks are always fired, even if browser transition events are canceled.\\n     *\\n     * See the Transition `timeout` prop for more infomation.\\n     */\\n    dialogTransitionTimeout: _react2.default.PropTypes.number,\\n\\n    /**\\n     * The `timeout` of the backdrop transition if specified. This number is used to\\n     * ensure that transition callbacks are always fired, even if browser transition events are canceled.\\n     *\\n     * See the Transition `timeout` prop for more infomation.\\n     */\\n    backdropTransitionTimeout: _react2.default.PropTypes.number,\\n\\n    /**\\n     * When `true` The modal will automatically shift focus to itself when it opens, and\\n     * replace it to the last focused element when it closes. This also\\n     * works correctly with any Modal children that have the `autoFocus` prop.\\n     *\\n     * Generally this should never be set to `false` as it makes the Modal less\\n     * accessible to assistive technologies, like screen readers.\\n     */\\n    autoFocus: _react2.default.PropTypes.bool,\\n\\n    /**\\n     * When `true` The modal will prevent focus from leaving the Modal while open.\\n     *\\n     * Generally this should never be set to `false` as it makes the Modal less\\n     * accessible to assistive technologies, like screen readers.\\n     */\\n    enforceFocus: _react2.default.PropTypes.bool,\\n\\n    /**\\n     * Callback fired before the Modal transitions in\\n     */\\n    onEnter: _react2.default.PropTypes.func,\\n\\n    /**\\n     * Callback fired as the Modal begins to transition in\\n     */\\n    onEntering: _react2.default.PropTypes.func,\\n\\n    /**\\n     * Callback fired after the Modal finishes transitioning in\\n     */\\n    onEntered: _react2.default.PropTypes.func,\\n\\n    /**\\n     * Callback fired right before the Modal transitions out\\n     */\\n    onExit: _react2.default.PropTypes.func,\\n\\n    /**\\n     * Callback fired as the Modal begins to transition out\\n     */\\n    onExiting: _react2.default.PropTypes.func,\\n\\n    /**\\n     * Callback fired after the Modal finishes transitioning out\\n     */\\n    onExited: _react2.default.PropTypes.func,\\n\\n    /**\\n     * A ModalManager instance used to track and manage the state of open\\n     * Modals. Useful when customizing how modals interact within a container\\n     */\\n    manager: _react2.default.PropTypes.object.isRequired\\n  }),\\n\\n  getDefaultProps: function getDefaultProps() {\\n    var noop = function noop() {};\\n\\n    return {\\n      show: false,\\n      backdrop: true,\\n      keyboard: true,\\n      autoFocus: true,\\n      enforceFocus: true,\\n      onHide: noop,\\n      manager: modalManager,\\n      renderBackdrop: function renderBackdrop(props) {\\n        return _react2.default.createElement('div', props);\\n      }\\n    };\\n  },\\n  getInitialState: function getInitialState() {\\n    return { exited: !this.props.show };\\n  },\\n  render: function render() {\\n    var _props = this.props;\\n    var show = _props.show;\\n    var container = _props.container;\\n    var children = _props.children;\\n    var Transition = _props.transition;\\n    var backdrop = _props.backdrop;\\n    var dialogTransitionTimeout = _props.dialogTransitionTimeout;\\n    var className = _props.className;\\n    var style = _props.style;\\n    var onExit = _props.onExit;\\n    var onExiting = _props.onExiting;\\n    var onEnter = _props.onEnter;\\n    var onEntering = _props.onEntering;\\n    var onEntered = _props.onEntered;\\n\\n\\n    var dialog = _react2.default.Children.only(children);\\n\\n    var mountModal = show || Transition && !this.state.exited;\\n    if (!mountModal) {\\n      return null;\\n    }\\n\\n    var _dialog$props = dialog.props;\\n    var role = _dialog$props.role;\\n    var tabIndex = _dialog$props.tabIndex;\\n\\n\\n    if (role === undefined || tabIndex === undefined) {\\n      dialog = (0, _react.cloneElement)(dialog, {\\n        role: role === undefined ? 'document' : role,\\n        tabIndex: tabIndex == null ? '-1' : tabIndex\\n      });\\n    }\\n\\n    if (Transition) {\\n      dialog = _react2.default.createElement(\\n        Transition,\\n        {\\n          transitionAppear: true,\\n          unmountOnExit: true,\\n          'in': show,\\n          timeout: dialogTransitionTimeout,\\n          onExit: onExit,\\n          onExiting: onExiting,\\n          onExited: this.handleHidden,\\n          onEnter: onEnter,\\n          onEntering: onEntering,\\n          onEntered: onEntered\\n        },\\n        dialog\\n      );\\n    }\\n\\n    return _react2.default.createElement(\\n      _Portal2.default,\\n      {\\n        ref: this.setMountNode,\\n        container: container\\n      },\\n      _react2.default.createElement(\\n        'div',\\n        {\\n          ref: 'modal',\\n          role: role || 'dialog',\\n          style: style,\\n          className: className\\n        },\\n        backdrop && this.renderBackdrop(),\\n        dialog\\n      )\\n    );\\n  },\\n  renderBackdrop: function renderBackdrop() {\\n    var _this = this;\\n\\n    var _props2 = this.props;\\n    var backdropStyle = _props2.backdropStyle;\\n    var backdropClassName = _props2.backdropClassName;\\n    var renderBackdrop = _props2.renderBackdrop;\\n    var Transition = _props2.transition;\\n    var backdropTransitionTimeout = _props2.backdropTransitionTimeout;\\n\\n\\n    var backdropRef = function backdropRef(ref) {\\n      return _this.backdrop = ref;\\n    };\\n\\n    var backdrop = _react2.default.createElement('div', {\\n      ref: backdropRef,\\n      style: this.props.backdropStyle,\\n      className: this.props.backdropClassName,\\n      onClick: this.handleBackdropClick\\n    });\\n\\n    if (Transition) {\\n      backdrop = _react2.default.createElement(\\n        Transition,\\n        { transitionAppear: true,\\n          'in': this.props.show,\\n          timeout: backdropTransitionTimeout\\n        },\\n        renderBackdrop({\\n          ref: backdropRef,\\n          style: backdropStyle,\\n          className: backdropClassName,\\n          onClick: this.handleBackdropClick\\n        })\\n      );\\n    }\\n\\n    return backdrop;\\n  },\\n  componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\\n    if (nextProps.show) {\\n      this.setState({ exited: false });\\n    } else if (!nextProps.transition) {\\n      // Otherwise let handleHidden take care of marking exited.\\n      this.setState({ exited: true });\\n    }\\n  },\\n  componentWillUpdate: function componentWillUpdate(nextProps) {\\n    if (!this.props.show && nextProps.show) {\\n      this.checkForFocus();\\n    }\\n  },\\n  componentDidMount: function componentDidMount() {\\n    if (this.props.show) {\\n      this.onShow();\\n    }\\n  },\\n  componentDidUpdate: function componentDidUpdate(prevProps) {\\n    var transition = this.props.transition;\\n\\n\\n    if (prevProps.show && !this.props.show && !transition) {\\n      // Otherwise handleHidden will call this.\\n      this.onHide();\\n    } else if (!prevProps.show && this.props.show) {\\n      this.onShow();\\n    }\\n  },\\n  componentWillUnmount: function componentWillUnmount() {\\n    var _props3 = this.props;\\n    var show = _props3.show;\\n    var transition = _props3.transition;\\n\\n\\n    if (show || transition && !this.state.exited) {\\n      this.onHide();\\n    }\\n  },\\n  onShow: function onShow() {\\n    var doc = (0, _ownerDocument2.default)(this);\\n    var container = (0, _getContainer2.default)(this.props.container, doc.body);\\n\\n    this.props.manager.add(this, container, this.props.containerClassName);\\n\\n    this._onDocumentKeyupListener = (0, _addEventListener2.default)(doc, 'keyup', this.handleDocumentKeyUp);\\n\\n    this._onFocusinListener = (0, _addFocusListener2.default)(this.enforceFocus);\\n\\n    this.focus();\\n\\n    if (this.props.onShow) {\\n      this.props.onShow();\\n    }\\n  },\\n  onHide: function onHide() {\\n    this.props.manager.remove(this);\\n\\n    this._onDocumentKeyupListener.remove();\\n\\n    this._onFocusinListener.remove();\\n\\n    this.restoreLastFocus();\\n  },\\n  setMountNode: function setMountNode(ref) {\\n    this.mountNode = ref ? ref.getMountNode() : ref;\\n  },\\n  handleHidden: function handleHidden() {\\n    this.setState({ exited: true });\\n    this.onHide();\\n\\n    if (this.props.onExited) {\\n      var _props4;\\n\\n      (_props4 = this.props).onExited.apply(_props4, arguments);\\n    }\\n  },\\n  handleBackdropClick: function handleBackdropClick(e) {\\n    if (e.target !== e.currentTarget) {\\n      return;\\n    }\\n\\n    if (this.props.onBackdropClick) {\\n      this.props.onBackdropClick(e);\\n    }\\n\\n    if (this.props.backdrop === true) {\\n      this.props.onHide();\\n    }\\n  },\\n  handleDocumentKeyUp: function handleDocumentKeyUp(e) {\\n    if (this.props.keyboard && e.keyCode === 27 && this.isTopModal()) {\\n      if (this.props.onEscapeKeyUp) {\\n        this.props.onEscapeKeyUp(e);\\n      }\\n      this.props.onHide();\\n    }\\n  },\\n  checkForFocus: function checkForFocus() {\\n    if (_inDOM2.default) {\\n      this.lastFocus = (0, _activeElement2.default)();\\n    }\\n  },\\n  focus: function focus() {\\n    var autoFocus = this.props.autoFocus;\\n    var modalContent = this.getDialogElement();\\n    var current = (0, _activeElement2.default)((0, _ownerDocument2.default)(this));\\n    var focusInModal = current && (0, _contains2.default)(modalContent, current);\\n\\n    if (modalContent && autoFocus && !focusInModal) {\\n      this.lastFocus = current;\\n\\n      if (!modalContent.hasAttribute('tabIndex')) {\\n        modalContent.setAttribute('tabIndex', -1);\\n        (0, _warning2.default)(false, 'The modal content node does not accept focus. ' + 'For the benefit of assistive technologies, the tabIndex of the node is being set to \\\"-1\\\".');\\n      }\\n\\n      modalContent.focus();\\n    }\\n  },\\n  restoreLastFocus: function restoreLastFocus() {\\n    // Support: <=IE11 doesn't support `focus()` on svg elements (RB: #917)\\n    if (this.lastFocus && this.lastFocus.focus) {\\n      this.lastFocus.focus();\\n      this.lastFocus = null;\\n    }\\n  },\\n  enforceFocus: function enforceFocus() {\\n    var enforceFocus = this.props.enforceFocus;\\n\\n\\n    if (!enforceFocus || !this.isMounted() || !this.isTopModal()) {\\n      return;\\n    }\\n\\n    var active = (0, _activeElement2.default)((0, _ownerDocument2.default)(this));\\n    var modal = this.getDialogElement();\\n\\n    if (modal && modal !== active && !(0, _contains2.default)(modal, active)) {\\n      modal.focus();\\n    }\\n  },\\n\\n\\n  //instead of a ref, which might conflict with one the parent applied.\\n  getDialogElement: function getDialogElement() {\\n    var node = this.refs.modal;\\n    return node && node.lastChild;\\n  },\\n  isTopModal: function isTopModal() {\\n    return this.props.manager.isTopModal(this);\\n  }\\n});\\n\\nModal.Manager = _ModalManager2.default;\\n\\nexports.default = Modal;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-overlays/lib/Modal.js\\n// module id = 452\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-overlays/lib/Modal.js?\");\n\n/***/ },\n/* 453 */\n/*!******************************************************!*\\\n  !*** ./~/react-prop-types/lib/componentOrElement.js ***!\n  \\******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _typeof = typeof Symbol === \\\"function\\\" && typeof Symbol.iterator === \\\"symbol\\\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \\\"function\\\" && obj.constructor === Symbol ? \\\"symbol\\\" : typeof obj; };\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _createChainableTypeChecker = __webpack_require__(/*! ./utils/createChainableTypeChecker */ 368);\\n\\nvar _createChainableTypeChecker2 = _interopRequireDefault(_createChainableTypeChecker);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction validate(props, propName, componentName, location, propFullName) {\\n  var propValue = props[propName];\\n  var propType = typeof propValue === 'undefined' ? 'undefined' : _typeof(propValue);\\n\\n  if (_react2.default.isValidElement(propValue)) {\\n    return new Error('Invalid ' + location + ' `' + propFullName + '` of type ReactElement ' + ('supplied to `' + componentName + '`, expected a ReactComponent or a ') + 'DOMElement. You can usually obtain a ReactComponent or DOMElement ' + 'from a ReactElement by attaching a ref to it.');\\n  }\\n\\n  if ((propType !== 'object' || typeof propValue.render !== 'function') && propValue.nodeType !== 1) {\\n    return new Error('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected a ReactComponent or a ') + 'DOMElement.');\\n  }\\n\\n  return null;\\n}\\n\\nexports.default = (0, _createChainableTypeChecker2.default)(validate);\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-prop-types/lib/componentOrElement.js\\n// module id = 453\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-prop-types/lib/componentOrElement.js?\");\n\n/***/ },\n/* 454 */\n/*!****************************************!*\\\n  !*** ./~/react-overlays/lib/Portal.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n  value: true\\n});\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _reactDom = __webpack_require__(/*! react-dom */ 110);\\n\\nvar _reactDom2 = _interopRequireDefault(_reactDom);\\n\\nvar _componentOrElement = __webpack_require__(/*! react-prop-types/lib/componentOrElement */ 453);\\n\\nvar _componentOrElement2 = _interopRequireDefault(_componentOrElement);\\n\\nvar _ownerDocument = __webpack_require__(/*! ./utils/ownerDocument */ 418);\\n\\nvar _ownerDocument2 = _interopRequireDefault(_ownerDocument);\\n\\nvar _getContainer = __webpack_require__(/*! ./utils/getContainer */ 455);\\n\\nvar _getContainer2 = _interopRequireDefault(_getContainer);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\n/**\\n * The `<Portal/>` component renders its children into a new \\\"subtree\\\" outside of current component hierarchy.\\n * You can think of it as a declarative `appendChild()`, or jQuery's `$.fn.appendTo()`.\\n * The children of `<Portal/>` component will be appended to the `container` specified.\\n */\\nvar Portal = _react2.default.createClass({\\n\\n  displayName: 'Portal',\\n\\n  propTypes: {\\n    /**\\n     * A Node, Component instance, or function that returns either. The `container` will have the Portal children\\n     * appended to it.\\n     */\\n    container: _react2.default.PropTypes.oneOfType([_componentOrElement2.default, _react2.default.PropTypes.func])\\n  },\\n\\n  componentDidMount: function componentDidMount() {\\n    this._renderOverlay();\\n  },\\n  componentDidUpdate: function componentDidUpdate() {\\n    this._renderOverlay();\\n  },\\n  componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\\n    if (this._overlayTarget && nextProps.container !== this.props.container) {\\n      this._portalContainerNode.removeChild(this._overlayTarget);\\n      this._portalContainerNode = (0, _getContainer2.default)(nextProps.container, (0, _ownerDocument2.default)(this).body);\\n      this._portalContainerNode.appendChild(this._overlayTarget);\\n    }\\n  },\\n  componentWillUnmount: function componentWillUnmount() {\\n    this._unrenderOverlay();\\n    this._unmountOverlayTarget();\\n  },\\n  _mountOverlayTarget: function _mountOverlayTarget() {\\n    if (!this._overlayTarget) {\\n      this._overlayTarget = document.createElement('div');\\n      this._portalContainerNode = (0, _getContainer2.default)(this.props.container, (0, _ownerDocument2.default)(this).body);\\n      this._portalContainerNode.appendChild(this._overlayTarget);\\n    }\\n  },\\n  _unmountOverlayTarget: function _unmountOverlayTarget() {\\n    if (this._overlayTarget) {\\n      this._portalContainerNode.removeChild(this._overlayTarget);\\n      this._overlayTarget = null;\\n    }\\n    this._portalContainerNode = null;\\n  },\\n  _renderOverlay: function _renderOverlay() {\\n\\n    var overlay = !this.props.children ? null : _react2.default.Children.only(this.props.children);\\n\\n    // Save reference for future access.\\n    if (overlay !== null) {\\n      this._mountOverlayTarget();\\n      this._overlayInstance = _reactDom2.default.unstable_renderSubtreeIntoContainer(this, overlay, this._overlayTarget);\\n    } else {\\n      // Unrender if the component is null for transitions to null\\n      this._unrenderOverlay();\\n      this._unmountOverlayTarget();\\n    }\\n  },\\n  _unrenderOverlay: function _unrenderOverlay() {\\n    if (this._overlayTarget) {\\n      _reactDom2.default.unmountComponentAtNode(this._overlayTarget);\\n      this._overlayInstance = null;\\n    }\\n  },\\n  render: function render() {\\n    return null;\\n  },\\n  getMountNode: function getMountNode() {\\n    return this._overlayTarget;\\n  },\\n  getOverlayDOMNode: function getOverlayDOMNode() {\\n    if (!this.isMounted()) {\\n      throw new Error('getOverlayDOMNode(): A component must be mounted to have a DOM node.');\\n    }\\n\\n    if (this._overlayInstance) {\\n      return _reactDom2.default.findDOMNode(this._overlayInstance);\\n    }\\n\\n    return null;\\n  }\\n});\\n\\nexports.default = Portal;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-overlays/lib/Portal.js\\n// module id = 454\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-overlays/lib/Portal.js?\");\n\n/***/ },\n/* 455 */\n/*!****************************************************!*\\\n  !*** ./~/react-overlays/lib/utils/getContainer.js ***!\n  \\****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n  value: true\\n});\\nexports.default = getContainer;\\n\\nvar _reactDom = __webpack_require__(/*! react-dom */ 110);\\n\\nvar _reactDom2 = _interopRequireDefault(_reactDom);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction getContainer(container, defaultContainer) {\\n  container = typeof container === 'function' ? container() : container;\\n  return _reactDom2.default.findDOMNode(container) || defaultContainer;\\n}\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-overlays/lib/utils/getContainer.js\\n// module id = 455\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-overlays/lib/utils/getContainer.js?\");\n\n/***/ },\n/* 456 */\n/*!**********************************************!*\\\n  !*** ./~/react-overlays/lib/ModalManager.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n  value: true\\n});\\n\\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\\"value\\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\\n\\nvar _style = __webpack_require__(/*! dom-helpers/style */ 384);\\n\\nvar _style2 = _interopRequireDefault(_style);\\n\\nvar _class = __webpack_require__(/*! dom-helpers/class */ 457);\\n\\nvar _class2 = _interopRequireDefault(_class);\\n\\nvar _scrollbarSize = __webpack_require__(/*! dom-helpers/util/scrollbarSize */ 451);\\n\\nvar _scrollbarSize2 = _interopRequireDefault(_scrollbarSize);\\n\\nvar _isOverflowing = __webpack_require__(/*! ./utils/isOverflowing */ 461);\\n\\nvar _isOverflowing2 = _interopRequireDefault(_isOverflowing);\\n\\nvar _manageAriaHidden = __webpack_require__(/*! ./utils/manageAriaHidden */ 463);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\\"Cannot call a class as a function\\\"); } }\\n\\nfunction findIndexOf(arr, cb) {\\n  var idx = -1;\\n  arr.some(function (d, i) {\\n    if (cb(d, i)) {\\n      idx = i;\\n      return true;\\n    }\\n  });\\n  return idx;\\n}\\n\\nfunction findContainer(data, modal) {\\n  return findIndexOf(data, function (d) {\\n    return d.modals.indexOf(modal) !== -1;\\n  });\\n}\\n\\nfunction setContainerStyle(state, container) {\\n  var style = { overflow: 'hidden' };\\n\\n  // we are only interested in the actual `style` here\\n  // becasue we will override it\\n  state.style = {\\n    overflow: container.style.overflow,\\n    paddingRight: container.style.paddingRight\\n  };\\n\\n  if (state.overflowing) {\\n    // use computed style, here to get the real padding\\n    // to add our scrollbar width\\n    style.paddingRight = parseInt((0, _style2.default)(container, 'paddingRight') || 0, 10) + (0, _scrollbarSize2.default)() + 'px';\\n  }\\n\\n  (0, _style2.default)(container, style);\\n}\\n\\nfunction removeContainerStyle(_ref, container) {\\n  var style = _ref.style;\\n\\n\\n  Object.keys(style).forEach(function (key) {\\n    return container.style[key] = style[key];\\n  });\\n}\\n/**\\n * Proper state managment for containers and the modals in those containers.\\n *\\n * @internal Used by the Modal to ensure proper styling of containers.\\n */\\n\\nvar ModalManager = function () {\\n  function ModalManager() {\\n    var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\\n\\n    var _ref2$hideSiblingNode = _ref2.hideSiblingNodes;\\n    var hideSiblingNodes = _ref2$hideSiblingNode === undefined ? true : _ref2$hideSiblingNode;\\n    var _ref2$handleContainer = _ref2.handleContainerOverflow;\\n    var handleContainerOverflow = _ref2$handleContainer === undefined ? true : _ref2$handleContainer;\\n\\n    _classCallCheck(this, ModalManager);\\n\\n    this.hideSiblingNodes = hideSiblingNodes;\\n    this.handleContainerOverflow = handleContainerOverflow;\\n    this.modals = [];\\n    this.containers = [];\\n    this.data = [];\\n  }\\n\\n  _createClass(ModalManager, [{\\n    key: 'add',\\n    value: function add(modal, container, className) {\\n      var modalIdx = this.modals.indexOf(modal);\\n      var containerIdx = this.containers.indexOf(container);\\n\\n      if (modalIdx !== -1) {\\n        return modalIdx;\\n      }\\n\\n      modalIdx = this.modals.length;\\n      this.modals.push(modal);\\n\\n      if (this.hideSiblingNodes) {\\n        (0, _manageAriaHidden.hideSiblings)(container, modal.mountNode);\\n      }\\n\\n      if (containerIdx !== -1) {\\n        this.data[containerIdx].modals.push(modal);\\n        return modalIdx;\\n      }\\n\\n      var data = {\\n        modals: [modal],\\n        //right now only the first modal of a container will have its classes applied\\n        classes: className ? className.split(/\\\\s+/) : [],\\n\\n        overflowing: (0, _isOverflowing2.default)(container)\\n      };\\n\\n      if (this.handleContainerOverflow) {\\n        setContainerStyle(data, container);\\n      }\\n\\n      data.classes.forEach(_class2.default.addClass.bind(null, container));\\n\\n      this.containers.push(container);\\n      this.data.push(data);\\n\\n      return modalIdx;\\n    }\\n  }, {\\n    key: 'remove',\\n    value: function remove(modal) {\\n      var modalIdx = this.modals.indexOf(modal);\\n\\n      if (modalIdx === -1) {\\n        return;\\n      }\\n\\n      var containerIdx = findContainer(this.data, modal);\\n      var data = this.data[containerIdx];\\n      var container = this.containers[containerIdx];\\n\\n      data.modals.splice(data.modals.indexOf(modal), 1);\\n\\n      this.modals.splice(modalIdx, 1);\\n\\n      // if that was the last modal in a container,\\n      // clean up the container\\n      if (data.modals.length === 0) {\\n        data.classes.forEach(_class2.default.removeClass.bind(null, container));\\n\\n        if (this.handleContainerOverflow) {\\n          removeContainerStyle(data, container);\\n        }\\n\\n        if (this.hideSiblingNodes) {\\n          (0, _manageAriaHidden.showSiblings)(container, modal.mountNode);\\n        }\\n        this.containers.splice(containerIdx, 1);\\n        this.data.splice(containerIdx, 1);\\n      } else if (this.hideSiblingNodes) {\\n        //otherwise make sure the next top modal is visible to a SR\\n        (0, _manageAriaHidden.ariaHidden)(false, data.modals[data.modals.length - 1].mountNode);\\n      }\\n    }\\n  }, {\\n    key: 'isTopModal',\\n    value: function isTopModal(modal) {\\n      return !!this.modals.length && this.modals[this.modals.length - 1] === modal;\\n    }\\n  }]);\\n\\n  return ModalManager;\\n}();\\n\\nexports.default = ModalManager;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-overlays/lib/ModalManager.js\\n// module id = 456\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-overlays/lib/ModalManager.js?\");\n\n/***/ },\n/* 457 */\n/*!**************************************!*\\\n  !*** ./~/dom-helpers/class/index.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nmodule.exports = {\\n  addClass: __webpack_require__(/*! ./addClass */ 458),\\n  removeClass: __webpack_require__(/*! ./removeClass */ 460),\\n  hasClass: __webpack_require__(/*! ./hasClass */ 459)\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/class/index.js\\n// module id = 457\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/class/index.js?\");\n\n/***/ },\n/* 458 */\n/*!*****************************************!*\\\n  !*** ./~/dom-helpers/class/addClass.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\nvar hasClass = __webpack_require__(/*! ./hasClass */ 459);\\n\\nmodule.exports = function addClass(element, className) {\\n  if (element.classList) element.classList.add(className);else if (!hasClass(element)) element.className = element.className + ' ' + className;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/class/addClass.js\\n// module id = 458\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/class/addClass.js?\");\n\n/***/ },\n/* 459 */\n/*!*****************************************!*\\\n  !*** ./~/dom-helpers/class/hasClass.js ***!\n  \\*****************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\nmodule.exports = function hasClass(element, className) {\\n  if (element.classList) return !!className && element.classList.contains(className);else return (' ' + element.className + ' ').indexOf(' ' + className + ' ') !== -1;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/class/hasClass.js\\n// module id = 459\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/class/hasClass.js?\");\n\n/***/ },\n/* 460 */\n/*!********************************************!*\\\n  !*** ./~/dom-helpers/class/removeClass.js ***!\n  \\********************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n\\nmodule.exports = function removeClass(element, className) {\\n  if (element.classList) element.classList.remove(className);else element.className = element.className.replace(new RegExp('(^|\\\\\\\\s)' + className + '(?:\\\\\\\\s|$)', 'g'), '$1').replace(/\\\\s+/g, ' ').replace(/^\\\\s*|\\\\s*$/g, '');\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/class/removeClass.js\\n// module id = 460\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/class/removeClass.js?\");\n\n/***/ },\n/* 461 */\n/*!*****************************************************!*\\\n  !*** ./~/react-overlays/lib/utils/isOverflowing.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n  value: true\\n});\\nexports.default = isOverflowing;\\n\\nvar _isWindow = __webpack_require__(/*! dom-helpers/query/isWindow */ 462);\\n\\nvar _isWindow2 = _interopRequireDefault(_isWindow);\\n\\nvar _ownerDocument = __webpack_require__(/*! dom-helpers/ownerDocument */ 398);\\n\\nvar _ownerDocument2 = _interopRequireDefault(_ownerDocument);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction isBody(node) {\\n  return node && node.tagName.toLowerCase() === 'body';\\n}\\n\\nfunction bodyIsOverflowing(node) {\\n  var doc = (0, _ownerDocument2.default)(node);\\n  var win = (0, _isWindow2.default)(doc);\\n  var fullWidth = win.innerWidth;\\n\\n  // Support: ie8, no innerWidth\\n  if (!fullWidth) {\\n    var documentElementRect = doc.documentElement.getBoundingClientRect();\\n    fullWidth = documentElementRect.right - Math.abs(documentElementRect.left);\\n  }\\n\\n  return doc.body.clientWidth < fullWidth;\\n}\\n\\nfunction isOverflowing(container) {\\n  var win = (0, _isWindow2.default)(container);\\n\\n  return win || isBody(container) ? bodyIsOverflowing(container) : container.scrollHeight > container.clientHeight;\\n}\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-overlays/lib/utils/isOverflowing.js\\n// module id = 461\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-overlays/lib/utils/isOverflowing.js?\");\n\n/***/ },\n/* 462 */\n/*!*****************************************!*\\\n  !*** ./~/dom-helpers/query/isWindow.js ***!\n  \\*****************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n\\nmodule.exports = function getWindow(node) {\\n  return node === node.window ? node : node.nodeType === 9 ? node.defaultView || node.parentWindow : false;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/query/isWindow.js\\n// module id = 462\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/query/isWindow.js?\");\n\n/***/ },\n/* 463 */\n/*!********************************************************!*\\\n  !*** ./~/react-overlays/lib/utils/manageAriaHidden.js ***!\n  \\********************************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n  value: true\\n});\\nexports.ariaHidden = ariaHidden;\\nexports.hideSiblings = hideSiblings;\\nexports.showSiblings = showSiblings;\\n\\nvar BLACKLIST = ['template', 'script', 'style'];\\n\\nvar isHidable = function isHidable(_ref) {\\n  var nodeType = _ref.nodeType;\\n  var tagName = _ref.tagName;\\n  return nodeType === 1 && BLACKLIST.indexOf(tagName.toLowerCase()) === -1;\\n};\\n\\nvar siblings = function siblings(container, mount, cb) {\\n  mount = [].concat(mount);\\n\\n  [].forEach.call(container.children, function (node) {\\n    if (mount.indexOf(node) === -1 && isHidable(node)) {\\n      cb(node);\\n    }\\n  });\\n};\\n\\nfunction ariaHidden(show, node) {\\n  if (!node) {\\n    return;\\n  }\\n  if (show) {\\n    node.setAttribute('aria-hidden', 'true');\\n  } else {\\n    node.removeAttribute('aria-hidden');\\n  }\\n}\\n\\nfunction hideSiblings(container, mountNode) {\\n  siblings(container, mountNode, function (node) {\\n    return ariaHidden(true, node);\\n  });\\n}\\n\\nfunction showSiblings(container, mountNode) {\\n  siblings(container, mountNode, function (node) {\\n    return ariaHidden(false, node);\\n  });\\n}\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-overlays/lib/utils/manageAriaHidden.js\\n// module id = 463\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-overlays/lib/utils/manageAriaHidden.js?\");\n\n/***/ },\n/* 464 */\n/*!********************************************************!*\\\n  !*** ./~/react-overlays/lib/utils/addFocusListener.js ***!\n  \\********************************************************/\n/***/ function(module, exports) {\n\n\teval(\"'use strict';\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n  value: true\\n});\\nexports.default = addFocusListener;\\n/**\\n * Firefox doesn't have a focusin event so using capture is easiest way to get bubbling\\n * IE8 can't do addEventListener, but does have onfocusin, so we use that in ie8\\n *\\n * We only allow one Listener at a time to avoid stack overflows\\n */\\nfunction addFocusListener(handler) {\\n  var useFocusin = !document.addEventListener;\\n  var remove = void 0;\\n\\n  if (useFocusin) {\\n    document.attachEvent('onfocusin', handler);\\n    remove = function remove() {\\n      return document.detachEvent('onfocusin', handler);\\n    };\\n  } else {\\n    document.addEventListener('focus', handler, true);\\n    remove = function remove() {\\n      return document.removeEventListener('focus', handler, true);\\n    };\\n  }\\n\\n  return { remove: remove };\\n}\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-overlays/lib/utils/addFocusListener.js\\n// module id = 464\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-overlays/lib/utils/addFocusListener.js?\");\n\n/***/ },\n/* 465 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/ModalBody.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  componentClass: _elementType2['default']\\n};\\n\\nvar defaultProps = {\\n  componentClass: 'div'\\n};\\n\\nvar ModalBody = function (_React$Component) {\\n  (0, _inherits3['default'])(ModalBody, _React$Component);\\n\\n  function ModalBody() {\\n    (0, _classCallCheck3['default'])(this, ModalBody);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  ModalBody.prototype.render = function render() {\\n    var _props = this.props,\\n        Component = _props.componentClass,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['componentClass', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement(Component, (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return ModalBody;\\n}(_react2['default'].Component);\\n\\nModalBody.propTypes = propTypes;\\nModalBody.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('modal-body', ModalBody);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/ModalBody.js\\n// module id = 465\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ModalBody.js?\");\n\n/***/ },\n/* 466 */\n/*!**********************************************!*\\\n  !*** ./~/react-bootstrap/lib/ModalDialog.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends3 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends4 = _interopRequireDefault(_extends3);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _StyleConfig = __webpack_require__(/*! ./utils/StyleConfig */ 356);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  /**\\n   * A css class to apply to the Modal dialog DOM node.\\n   */\\n  dialogClassName: _react2['default'].PropTypes.string\\n};\\n\\nvar ModalDialog = function (_React$Component) {\\n  (0, _inherits3['default'])(ModalDialog, _React$Component);\\n\\n  function ModalDialog() {\\n    (0, _classCallCheck3['default'])(this, ModalDialog);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  ModalDialog.prototype.render = function render() {\\n    var _extends2;\\n\\n    var _props = this.props,\\n        dialogClassName = _props.dialogClassName,\\n        className = _props.className,\\n        style = _props.style,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['dialogClassName', 'className', 'style', 'children']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var bsClassName = (0, _bootstrapUtils.prefix)(bsProps);\\n\\n    var modalStyle = (0, _extends4['default'])({ display: 'block' }, style);\\n\\n    var dialogClasses = (0, _extends4['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), (_extends2 = {}, _extends2[bsClassName] = false, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'dialog')] = true, _extends2));\\n\\n    return _react2['default'].createElement(\\n      'div',\\n      (0, _extends4['default'])({}, elementProps, {\\n        tabIndex: '-1',\\n        role: 'dialog',\\n        style: modalStyle,\\n        className: (0, _classnames2['default'])(className, bsClassName)\\n      }),\\n      _react2['default'].createElement(\\n        'div',\\n        { className: (0, _classnames2['default'])(dialogClassName, dialogClasses) },\\n        _react2['default'].createElement(\\n          'div',\\n          { className: (0, _bootstrapUtils.prefix)(bsProps, 'content'), role: 'document' },\\n          children\\n        )\\n      )\\n    );\\n  };\\n\\n  return ModalDialog;\\n}(_react2['default'].Component);\\n\\nModalDialog.propTypes = propTypes;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('modal', (0, _bootstrapUtils.bsSizes)([_StyleConfig.Size.LARGE, _StyleConfig.Size.SMALL], ModalDialog));\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/ModalDialog.js\\n// module id = 466\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ModalDialog.js?\");\n\n/***/ },\n/* 467 */\n/*!**********************************************!*\\\n  !*** ./~/react-bootstrap/lib/ModalFooter.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  componentClass: _elementType2['default']\\n};\\n\\nvar defaultProps = {\\n  componentClass: 'div'\\n};\\n\\nvar ModalFooter = function (_React$Component) {\\n  (0, _inherits3['default'])(ModalFooter, _React$Component);\\n\\n  function ModalFooter() {\\n    (0, _classCallCheck3['default'])(this, ModalFooter);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  ModalFooter.prototype.render = function render() {\\n    var _props = this.props,\\n        Component = _props.componentClass,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['componentClass', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement(Component, (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return ModalFooter;\\n}(_react2['default'].Component);\\n\\nModalFooter.propTypes = propTypes;\\nModalFooter.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('modal-footer', ModalFooter);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/ModalFooter.js\\n// module id = 467\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ModalFooter.js?\");\n\n/***/ },\n/* 468 */\n/*!**********************************************!*\\\n  !*** ./~/react-bootstrap/lib/ModalHeader.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 357);\\n\\nvar _createChainedFunction2 = _interopRequireDefault(_createChainedFunction);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\n// TODO: `aria-label` should be `closeLabel`.\\n\\nvar propTypes = {\\n  /**\\n   * The 'aria-label' attribute provides an accessible label for the close\\n   * button. It is used for Assistive Technology when the label text is not\\n   * readable.\\n   */\\n  'aria-label': _react2['default'].PropTypes.string,\\n\\n  /**\\n   * Specify whether the Component should contain a close button\\n   */\\n  closeButton: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * A Callback fired when the close button is clicked. If used directly inside\\n   * a Modal component, the onHide will automatically be propagated up to the\\n   * parent Modal `onHide`.\\n   */\\n  onHide: _react2['default'].PropTypes.func\\n};\\n\\nvar defaultProps = {\\n  'aria-label': 'Close',\\n  closeButton: false\\n};\\n\\nvar contextTypes = {\\n  $bs_modal: _react2['default'].PropTypes.shape({\\n    onHide: _react2['default'].PropTypes.func\\n  })\\n};\\n\\nvar ModalHeader = function (_React$Component) {\\n  (0, _inherits3['default'])(ModalHeader, _React$Component);\\n\\n  function ModalHeader() {\\n    (0, _classCallCheck3['default'])(this, ModalHeader);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  ModalHeader.prototype.render = function render() {\\n    var _props = this.props,\\n        label = _props['aria-label'],\\n        closeButton = _props.closeButton,\\n        onHide = _props.onHide,\\n        className = _props.className,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['aria-label', 'closeButton', 'onHide', 'className', 'children']);\\n\\n\\n    var modal = this.context.$bs_modal;\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement(\\n      'div',\\n      (0, _extends3['default'])({}, elementProps, {\\n        className: (0, _classnames2['default'])(className, classes)\\n      }),\\n      closeButton && _react2['default'].createElement(\\n        'button',\\n        {\\n          type: 'button',\\n          className: 'close',\\n          'aria-label': label,\\n          onClick: (0, _createChainedFunction2['default'])(modal.onHide, onHide)\\n        },\\n        _react2['default'].createElement(\\n          'span',\\n          { 'aria-hidden': 'true' },\\n          '\\\\xD7'\\n        )\\n      ),\\n      children\\n    );\\n  };\\n\\n  return ModalHeader;\\n}(_react2['default'].Component);\\n\\nModalHeader.propTypes = propTypes;\\nModalHeader.defaultProps = defaultProps;\\nModalHeader.contextTypes = contextTypes;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('modal-header', ModalHeader);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/ModalHeader.js\\n// module id = 468\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ModalHeader.js?\");\n\n/***/ },\n/* 469 */\n/*!*********************************************!*\\\n  !*** ./~/react-bootstrap/lib/ModalTitle.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  componentClass: _elementType2['default']\\n};\\n\\nvar defaultProps = {\\n  componentClass: 'h4'\\n};\\n\\nvar ModalTitle = function (_React$Component) {\\n  (0, _inherits3['default'])(ModalTitle, _React$Component);\\n\\n  function ModalTitle() {\\n    (0, _classCallCheck3['default'])(this, ModalTitle);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  ModalTitle.prototype.render = function render() {\\n    var _props = this.props,\\n        Component = _props.componentClass,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['componentClass', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement(Component, (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return ModalTitle;\\n}(_react2['default'].Component);\\n\\nModalTitle.propTypes = propTypes;\\nModalTitle.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('modal-title', ModalTitle);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/ModalTitle.js\\n// module id = 469\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ModalTitle.js?\");\n\n/***/ },\n/* 470 */\n/*!**************************************!*\\\n  !*** ./~/react-bootstrap/lib/Nav.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends3 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends4 = _interopRequireDefault(_extends3);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _keycode = __webpack_require__(/*! keycode */ 400);\\n\\nvar _keycode2 = _interopRequireDefault(_keycode);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _reactDom = __webpack_require__(/*! react-dom */ 110);\\n\\nvar _reactDom2 = _interopRequireDefault(_reactDom);\\n\\nvar _all = __webpack_require__(/*! react-prop-types/lib/all */ 371);\\n\\nvar _all2 = _interopRequireDefault(_all);\\n\\nvar _warning = __webpack_require__(/*! warning */ 41);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 357);\\n\\nvar _createChainedFunction2 = _interopRequireDefault(_createChainedFunction);\\n\\nvar _ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 358);\\n\\nvar _ValidComponentChildren2 = _interopRequireDefault(_ValidComponentChildren);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\n// TODO: Should we expose `<NavItem>` as `<Nav.Item>`?\\n\\n// TODO: This `bsStyle` is very unlike the others. Should we rename it?\\n\\n// TODO: `pullRight` and `pullLeft` don't render right outside of `navbar`.\\n// Consider renaming or replacing them.\\n\\nvar propTypes = {\\n  /**\\n   * Marks the NavItem with a matching `eventKey` as active. Has a\\n   * higher precedence over `activeHref`.\\n   */\\n  activeKey: _react2['default'].PropTypes.any,\\n\\n  /**\\n   * Marks the child NavItem with a matching `href` prop as active.\\n   */\\n  activeHref: _react2['default'].PropTypes.string,\\n\\n  /**\\n   * NavItems are be positioned vertically.\\n   */\\n  stacked: _react2['default'].PropTypes.bool,\\n\\n  justified: (0, _all2['default'])(_react2['default'].PropTypes.bool, function (_ref) {\\n    var justified = _ref.justified,\\n        navbar = _ref.navbar;\\n    return justified && navbar ? Error('justified navbar `Nav`s are not supported') : null;\\n  }),\\n\\n  /**\\n   * A callback fired when a NavItem is selected.\\n   *\\n   * ```js\\n   * function (\\n   * \\tAny eventKey,\\n   * \\tSyntheticEvent event?\\n   * )\\n   * ```\\n   */\\n  onSelect: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * ARIA role for the Nav, in the context of a TabContainer, the default will\\n   * be set to \\\"tablist\\\", but can be overridden by the Nav when set explicitly.\\n   *\\n   * When the role is set to \\\"tablist\\\" NavItem focus is managed according to\\n   * the ARIA authoring practices for tabs:\\n   * https://www.w3.org/TR/2013/WD-wai-aria-practices-20130307/#tabpanel\\n   */\\n  role: _react2['default'].PropTypes.string,\\n\\n  /**\\n   * Apply styling an alignment for use in a Navbar. This prop will be set\\n   * automatically when the Nav is used inside a Navbar.\\n   */\\n  navbar: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Float the Nav to the right. When `navbar` is `true` the appropriate\\n   * contextual classes are added as well.\\n   */\\n  pullRight: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Float the Nav to the left. When `navbar` is `true` the appropriate\\n   * contextual classes are added as well.\\n   */\\n  pullLeft: _react2['default'].PropTypes.bool\\n};\\n\\nvar defaultProps = {\\n  justified: false,\\n  pullRight: false,\\n  pullLeft: false,\\n  stacked: false\\n};\\n\\nvar contextTypes = {\\n  $bs_navbar: _react2['default'].PropTypes.shape({\\n    bsClass: _react2['default'].PropTypes.string,\\n    onSelect: _react2['default'].PropTypes.func\\n  }),\\n\\n  $bs_tabContainer: _react2['default'].PropTypes.shape({\\n    activeKey: _react2['default'].PropTypes.any,\\n    onSelect: _react2['default'].PropTypes.func.isRequired,\\n    getTabId: _react2['default'].PropTypes.func.isRequired,\\n    getPaneId: _react2['default'].PropTypes.func.isRequired\\n  })\\n};\\n\\nvar Nav = function (_React$Component) {\\n  (0, _inherits3['default'])(Nav, _React$Component);\\n\\n  function Nav() {\\n    (0, _classCallCheck3['default'])(this, Nav);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Nav.prototype.componentDidUpdate = function componentDidUpdate() {\\n    var _this2 = this;\\n\\n    if (!this._needsRefocus) {\\n      return;\\n    }\\n\\n    this._needsRefocus = false;\\n\\n    var children = this.props.children;\\n\\n    var _getActiveProps = this.getActiveProps(),\\n        activeKey = _getActiveProps.activeKey,\\n        activeHref = _getActiveProps.activeHref;\\n\\n    var activeChild = _ValidComponentChildren2['default'].find(children, function (child) {\\n      return _this2.isActive(child, activeKey, activeHref);\\n    });\\n\\n    var childrenArray = _ValidComponentChildren2['default'].toArray(children);\\n    var activeChildIndex = childrenArray.indexOf(activeChild);\\n\\n    var childNodes = _reactDom2['default'].findDOMNode(this).children;\\n    var activeNode = childNodes && childNodes[activeChildIndex];\\n\\n    if (!activeNode || !activeNode.firstChild) {\\n      return;\\n    }\\n\\n    activeNode.firstChild.focus();\\n  };\\n\\n  Nav.prototype.handleTabKeyDown = function handleTabKeyDown(onSelect, event) {\\n    var nextActiveChild = void 0;\\n\\n    switch (event.keyCode) {\\n      case _keycode2['default'].codes.left:\\n      case _keycode2['default'].codes.up:\\n        nextActiveChild = this.getNextActiveChild(-1);\\n        break;\\n      case _keycode2['default'].codes.right:\\n      case _keycode2['default'].codes.down:\\n        nextActiveChild = this.getNextActiveChild(1);\\n        break;\\n      default:\\n        // It was a different key; don't handle this keypress.\\n        return;\\n    }\\n\\n    event.preventDefault();\\n\\n    if (onSelect && nextActiveChild && nextActiveChild.props.eventKey) {\\n      onSelect(nextActiveChild.props.eventKey);\\n    }\\n\\n    this._needsRefocus = true;\\n  };\\n\\n  Nav.prototype.getNextActiveChild = function getNextActiveChild(offset) {\\n    var _this3 = this;\\n\\n    var children = this.props.children;\\n\\n    var validChildren = children.filter(function (child) {\\n      return child.props.eventKey && !child.props.disabled;\\n    });\\n\\n    var _getActiveProps2 = this.getActiveProps(),\\n        activeKey = _getActiveProps2.activeKey,\\n        activeHref = _getActiveProps2.activeHref;\\n\\n    var activeChild = _ValidComponentChildren2['default'].find(children, function (child) {\\n      return _this3.isActive(child, activeKey, activeHref);\\n    });\\n\\n    // This assumes the active child is not disabled.\\n    var activeChildIndex = validChildren.indexOf(activeChild);\\n    if (activeChildIndex === -1) {\\n      // Something has gone wrong. Select the first valid child we can find.\\n      return validChildren[0];\\n    }\\n\\n    var nextIndex = activeChildIndex + offset;\\n    var numValidChildren = validChildren.length;\\n\\n    if (nextIndex >= numValidChildren) {\\n      nextIndex = 0;\\n    } else if (nextIndex < 0) {\\n      nextIndex = numValidChildren - 1;\\n    }\\n\\n    return validChildren[nextIndex];\\n  };\\n\\n  Nav.prototype.getActiveProps = function getActiveProps() {\\n    var tabContainer = this.context.$bs_tabContainer;\\n\\n    if (tabContainer) {\\n      process.env.NODE_ENV !== 'production' ? (0, _warning2['default'])(this.props.activeKey == null && !this.props.activeHref, 'Specifying a `<Nav>` `activeKey` or `activeHref` in the context of ' + 'a `<TabContainer>` is not supported. Instead use `<TabContainer ' + ('activeKey={' + this.props.activeKey + '} />`.')) : void 0;\\n\\n      return tabContainer;\\n    }\\n\\n    return this.props;\\n  };\\n\\n  Nav.prototype.isActive = function isActive(_ref2, activeKey, activeHref) {\\n    var props = _ref2.props;\\n\\n    if (props.active || activeKey != null && props.eventKey === activeKey || activeHref && props.href === activeHref) {\\n      return true;\\n    }\\n\\n    return props.active;\\n  };\\n\\n  Nav.prototype.getTabProps = function getTabProps(child, tabContainer, navRole, active, onSelect) {\\n    var _this4 = this;\\n\\n    if (!tabContainer && navRole !== 'tablist') {\\n      // No tab props here.\\n      return null;\\n    }\\n\\n    var _child$props = child.props,\\n        id = _child$props.id,\\n        controls = _child$props['aria-controls'],\\n        eventKey = _child$props.eventKey,\\n        role = _child$props.role,\\n        onKeyDown = _child$props.onKeyDown,\\n        tabIndex = _child$props.tabIndex;\\n\\n\\n    if (tabContainer) {\\n      process.env.NODE_ENV !== 'production' ? (0, _warning2['default'])(!id && !controls, 'In the context of a `<TabContainer>`, `<NavItem>`s are given ' + 'generated `id` and `aria-controls` attributes for the sake of ' + 'proper component accessibility. Any provided ones will be ignored. ' + 'To control these attributes directly, provide a `generateChildId` ' + 'prop to the parent `<TabContainer>`.') : void 0;\\n\\n      id = tabContainer.getTabId(eventKey);\\n      controls = tabContainer.getPaneId(eventKey);\\n    }\\n\\n    if (navRole === 'tablist') {\\n      role = role || 'tab';\\n      onKeyDown = (0, _createChainedFunction2['default'])(function (event) {\\n        return _this4.handleTabKeyDown(onSelect, event);\\n      }, onKeyDown);\\n      tabIndex = active ? tabIndex : -1;\\n    }\\n\\n    return {\\n      id: id,\\n      role: role,\\n      onKeyDown: onKeyDown,\\n      'aria-controls': controls,\\n      tabIndex: tabIndex\\n    };\\n  };\\n\\n  Nav.prototype.render = function render() {\\n    var _extends2,\\n        _this5 = this;\\n\\n    var _props = this.props,\\n        stacked = _props.stacked,\\n        justified = _props.justified,\\n        onSelect = _props.onSelect,\\n        propsRole = _props.role,\\n        propsNavbar = _props.navbar,\\n        pullRight = _props.pullRight,\\n        pullLeft = _props.pullLeft,\\n        className = _props.className,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['stacked', 'justified', 'onSelect', 'role', 'navbar', 'pullRight', 'pullLeft', 'className', 'children']);\\n\\n\\n    var tabContainer = this.context.$bs_tabContainer;\\n    var role = propsRole || (tabContainer ? 'tablist' : null);\\n\\n    var _getActiveProps3 = this.getActiveProps(),\\n        activeKey = _getActiveProps3.activeKey,\\n        activeHref = _getActiveProps3.activeHref;\\n\\n    delete props.activeKey; // Accessed via this.getActiveProps().\\n    delete props.activeHref; // Accessed via this.getActiveProps().\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _extends4['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), (_extends2 = {}, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'stacked')] = stacked, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'justified')] = justified, _extends2));\\n\\n    var navbar = propsNavbar != null ? propsNavbar : this.context.$bs_navbar;\\n    var pullLeftClassName = void 0;\\n    var pullRightClassName = void 0;\\n\\n    if (navbar) {\\n      var navbarProps = this.context.$bs_navbar || { bsClass: 'navbar' };\\n\\n      classes[(0, _bootstrapUtils.prefix)(navbarProps, 'nav')] = true;\\n\\n      pullRightClassName = (0, _bootstrapUtils.prefix)(navbarProps, 'right');\\n      pullLeftClassName = (0, _bootstrapUtils.prefix)(navbarProps, 'left');\\n    } else {\\n      pullRightClassName = 'pull-right';\\n      pullLeftClassName = 'pull-left';\\n    }\\n\\n    classes[pullRightClassName] = pullRight;\\n    classes[pullLeftClassName] = pullLeft;\\n\\n    return _react2['default'].createElement(\\n      'ul',\\n      (0, _extends4['default'])({}, elementProps, {\\n        role: role,\\n        className: (0, _classnames2['default'])(className, classes)\\n      }),\\n      _ValidComponentChildren2['default'].map(children, function (child) {\\n        var active = _this5.isActive(child, activeKey, activeHref);\\n        var childOnSelect = (0, _createChainedFunction2['default'])(child.props.onSelect, onSelect, navbar && navbar.onSelect, tabContainer && tabContainer.onSelect);\\n\\n        return (0, _react.cloneElement)(child, (0, _extends4['default'])({}, _this5.getTabProps(child, tabContainer, role, active, childOnSelect), {\\n          active: active,\\n          activeKey: activeKey,\\n          activeHref: activeHref,\\n          onSelect: childOnSelect\\n        }));\\n      })\\n    );\\n  };\\n\\n  return Nav;\\n}(_react2['default'].Component);\\n\\nNav.propTypes = propTypes;\\nNav.defaultProps = defaultProps;\\nNav.contextTypes = contextTypes;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('nav', (0, _bootstrapUtils.bsStyles)(['tabs', 'pills'], Nav));\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Nav.js\\n// module id = 470\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Nav.js?\");\n\n/***/ },\n/* 471 */\n/*!*****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Navbar.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends3 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends4 = _interopRequireDefault(_extends3);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _uncontrollable = __webpack_require__(/*! uncontrollable */ 402);\\n\\nvar _uncontrollable2 = _interopRequireDefault(_uncontrollable);\\n\\nvar _Grid = __webpack_require__(/*! ./Grid */ 429);\\n\\nvar _Grid2 = _interopRequireDefault(_Grid);\\n\\nvar _NavbarBrand = __webpack_require__(/*! ./NavbarBrand */ 472);\\n\\nvar _NavbarBrand2 = _interopRequireDefault(_NavbarBrand);\\n\\nvar _NavbarCollapse = __webpack_require__(/*! ./NavbarCollapse */ 473);\\n\\nvar _NavbarCollapse2 = _interopRequireDefault(_NavbarCollapse);\\n\\nvar _NavbarHeader = __webpack_require__(/*! ./NavbarHeader */ 474);\\n\\nvar _NavbarHeader2 = _interopRequireDefault(_NavbarHeader);\\n\\nvar _NavbarToggle = __webpack_require__(/*! ./NavbarToggle */ 475);\\n\\nvar _NavbarToggle2 = _interopRequireDefault(_NavbarToggle);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _StyleConfig = __webpack_require__(/*! ./utils/StyleConfig */ 356);\\n\\nvar _createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 357);\\n\\nvar _createChainedFunction2 = _interopRequireDefault(_createChainedFunction);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\n// TODO: Remove this pragma once we upgrade eslint-config-airbnb.\\n/* eslint-disable react/no-multi-comp */\\n\\nvar propTypes = {\\n  /**\\n   * Create a fixed navbar along the top of the screen, that scrolls with the\\n   * page\\n   */\\n  fixedTop: _react2['default'].PropTypes.bool,\\n  /**\\n   * Create a fixed navbar along the bottom of the screen, that scrolls with\\n   * the page\\n   */\\n  fixedBottom: _react2['default'].PropTypes.bool,\\n  /**\\n   * Create a full-width navbar that scrolls away with the page\\n   */\\n  staticTop: _react2['default'].PropTypes.bool,\\n  /**\\n   * An alternative dark visual style for the Navbar\\n   */\\n  inverse: _react2['default'].PropTypes.bool,\\n  /**\\n   * Allow the Navbar to fluidly adjust to the page or container width, instead\\n   * of at the predefined screen breakpoints\\n   */\\n  fluid: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * Set a custom element for this component.\\n   */\\n  componentClass: _elementType2['default'],\\n  /**\\n   * A callback fired when the `<Navbar>` body collapses or expands. Fired when\\n   * a `<Navbar.Toggle>` is clicked and called with the new `navExpanded`\\n   * boolean value.\\n   *\\n   * @controllable navExpanded\\n   */\\n  onToggle: _react2['default'].PropTypes.func,\\n  /**\\n   * A callback fired when a descendant of a child `<Nav>` is selected. Should\\n   * be used to execute complex closing or other miscellaneous actions desired\\n   * after selecting a descendant of `<Nav>`. Does nothing if no `<Nav>` or `<Nav>`\\n   * descendants exist. The callback is called with an eventKey, which is a\\n   * prop from the selected `<Nav>` descendant, and an event.\\n   *\\n   * ```js\\n   * function (\\n   * \\tAny eventKey,\\n   * \\tSyntheticEvent event?\\n   * )\\n   * ```\\n   *\\n   * For basic closing behavior after all `<Nav>` descendant onSelect events in\\n   * mobile viewports, try using collapseOnSelect.\\n   *\\n   * Note: If you are manually closing the navbar using this `OnSelect` prop,\\n   * ensure that you are setting `expanded` to false and not *toggling* between\\n   * true and false.\\n   */\\n  onSelect: _react2['default'].PropTypes.func,\\n  /**\\n   * Sets `expanded` to `false` after the onSelect event of a descendant of a\\n   * child `<Nav>`. Does nothing if no `<Nav>` or `<Nav>` descendants exist.\\n   *\\n   * The onSelect callback should be used instead for more complex operations\\n   * that need to be executed after the `select` event of `<Nav>` descendants.\\n   */\\n  collapseOnSelect: _react2['default'].PropTypes.bool,\\n  /**\\n   * Explicitly set the visiblity of the navbar body\\n   *\\n   * @controllable onToggle\\n   */\\n  expanded: _react2['default'].PropTypes.bool,\\n\\n  role: _react2['default'].PropTypes.string\\n};\\n\\nvar defaultProps = {\\n  componentClass: 'nav',\\n  fixedTop: false,\\n  fixedBottom: false,\\n  staticTop: false,\\n  inverse: false,\\n  fluid: false,\\n  collapseOnSelect: false\\n};\\n\\nvar childContextTypes = {\\n  $bs_navbar: _react.PropTypes.shape({\\n    bsClass: _react.PropTypes.string,\\n    expanded: _react.PropTypes.bool,\\n    onToggle: _react.PropTypes.func.isRequired,\\n    onSelect: _react.PropTypes.func\\n  })\\n};\\n\\nvar Navbar = function (_React$Component) {\\n  (0, _inherits3['default'])(Navbar, _React$Component);\\n\\n  function Navbar(props, context) {\\n    (0, _classCallCheck3['default'])(this, Navbar);\\n\\n    var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props, context));\\n\\n    _this.handleToggle = _this.handleToggle.bind(_this);\\n    _this.handleCollapse = _this.handleCollapse.bind(_this);\\n    return _this;\\n  }\\n\\n  Navbar.prototype.getChildContext = function getChildContext() {\\n    var _props = this.props,\\n        bsClass = _props.bsClass,\\n        expanded = _props.expanded,\\n        onSelect = _props.onSelect,\\n        collapseOnSelect = _props.collapseOnSelect;\\n\\n\\n    return {\\n      $bs_navbar: {\\n        bsClass: bsClass,\\n        expanded: expanded,\\n        onToggle: this.handleToggle,\\n        onSelect: (0, _createChainedFunction2['default'])(onSelect, collapseOnSelect ? this.handleCollapse : null)\\n      }\\n    };\\n  };\\n\\n  Navbar.prototype.handleCollapse = function handleCollapse() {\\n    var _props2 = this.props,\\n        onToggle = _props2.onToggle,\\n        expanded = _props2.expanded;\\n\\n\\n    if (expanded) {\\n      onToggle(false);\\n    }\\n  };\\n\\n  Navbar.prototype.handleToggle = function handleToggle() {\\n    var _props3 = this.props,\\n        onToggle = _props3.onToggle,\\n        expanded = _props3.expanded;\\n\\n\\n    onToggle(!expanded);\\n  };\\n\\n  Navbar.prototype.render = function render() {\\n    var _extends2;\\n\\n    var _props4 = this.props,\\n        Component = _props4.componentClass,\\n        fixedTop = _props4.fixedTop,\\n        fixedBottom = _props4.fixedBottom,\\n        staticTop = _props4.staticTop,\\n        inverse = _props4.inverse,\\n        fluid = _props4.fluid,\\n        className = _props4.className,\\n        children = _props4.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props4, ['componentClass', 'fixedTop', 'fixedBottom', 'staticTop', 'inverse', 'fluid', 'className', 'children']);\\n\\n    var _splitBsPropsAndOmit = (0, _bootstrapUtils.splitBsPropsAndOmit)(props, ['expanded', 'onToggle', 'onSelect', 'collapseOnSelect']),\\n        bsProps = _splitBsPropsAndOmit[0],\\n        elementProps = _splitBsPropsAndOmit[1];\\n\\n    // will result in some false positives but that seems better\\n    // than false negatives. strict `undefined` check allows explicit\\n    // \\\"nulling\\\" of the role if the user really doesn't want one\\n\\n\\n    if (elementProps.role === undefined && Component !== 'nav') {\\n      elementProps.role = 'navigation';\\n    }\\n\\n    if (inverse) {\\n      bsProps.bsStyle = _StyleConfig.Style.INVERSE;\\n    }\\n\\n    var classes = (0, _extends4['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), (_extends2 = {}, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'fixed-top')] = fixedTop, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'fixed-bottom')] = fixedBottom, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'static-top')] = staticTop, _extends2));\\n\\n    return _react2['default'].createElement(\\n      Component,\\n      (0, _extends4['default'])({}, elementProps, {\\n        className: (0, _classnames2['default'])(className, classes)\\n      }),\\n      _react2['default'].createElement(\\n        _Grid2['default'],\\n        { fluid: fluid },\\n        children\\n      )\\n    );\\n  };\\n\\n  return Navbar;\\n}(_react2['default'].Component);\\n\\nNavbar.propTypes = propTypes;\\nNavbar.defaultProps = defaultProps;\\nNavbar.childContextTypes = childContextTypes;\\n\\n(0, _bootstrapUtils.bsClass)('navbar', Navbar);\\n\\nvar UncontrollableNavbar = (0, _uncontrollable2['default'])(Navbar, { expanded: 'onToggle' });\\n\\nfunction createSimpleWrapper(tag, suffix, displayName) {\\n  var Wrapper = function Wrapper(_ref, _ref2) {\\n    var _ref2$$bs_navbar = _ref2.$bs_navbar,\\n        navbarProps = _ref2$$bs_navbar === undefined ? { bsClass: 'navbar' } : _ref2$$bs_navbar;\\n    var Component = _ref.componentClass,\\n        className = _ref.className,\\n        pullRight = _ref.pullRight,\\n        pullLeft = _ref.pullLeft,\\n        props = (0, _objectWithoutProperties3['default'])(_ref, ['componentClass', 'className', 'pullRight', 'pullLeft']);\\n    return _react2['default'].createElement(Component, (0, _extends4['default'])({}, props, {\\n      className: (0, _classnames2['default'])(className, (0, _bootstrapUtils.prefix)(navbarProps, suffix), pullRight && (0, _bootstrapUtils.prefix)(navbarProps, 'right'), pullLeft && (0, _bootstrapUtils.prefix)(navbarProps, 'left'))\\n    }));\\n  };\\n\\n  Wrapper.displayName = displayName;\\n\\n  Wrapper.propTypes = {\\n    componentClass: _elementType2['default'],\\n    pullRight: _react2['default'].PropTypes.bool,\\n    pullLeft: _react2['default'].PropTypes.bool\\n  };\\n\\n  Wrapper.defaultProps = {\\n    componentClass: tag,\\n    pullRight: false,\\n    pullLeft: false\\n  };\\n\\n  Wrapper.contextTypes = {\\n    $bs_navbar: _react.PropTypes.shape({\\n      bsClass: _react.PropTypes.string\\n    })\\n  };\\n\\n  return Wrapper;\\n}\\n\\nUncontrollableNavbar.Brand = _NavbarBrand2['default'];\\nUncontrollableNavbar.Header = _NavbarHeader2['default'];\\nUncontrollableNavbar.Toggle = _NavbarToggle2['default'];\\nUncontrollableNavbar.Collapse = _NavbarCollapse2['default'];\\n\\nUncontrollableNavbar.Form = createSimpleWrapper('div', 'form', 'NavbarForm');\\nUncontrollableNavbar.Text = createSimpleWrapper('p', 'text', 'NavbarText');\\nUncontrollableNavbar.Link = createSimpleWrapper('a', 'link', 'NavbarLink');\\n\\n// Set bsStyles here so they can be overridden.\\nexports['default'] = (0, _bootstrapUtils.bsStyles)([_StyleConfig.Style.DEFAULT, _StyleConfig.Style.INVERSE], _StyleConfig.Style.DEFAULT, UncontrollableNavbar);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Navbar.js\\n// module id = 471\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Navbar.js?\");\n\n/***/ },\n/* 472 */\n/*!**********************************************!*\\\n  !*** ./~/react-bootstrap/lib/NavbarBrand.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar contextTypes = {\\n  $bs_navbar: _react2['default'].PropTypes.shape({\\n    bsClass: _react2['default'].PropTypes.string\\n  })\\n};\\n\\nvar NavbarBrand = function (_React$Component) {\\n  (0, _inherits3['default'])(NavbarBrand, _React$Component);\\n\\n  function NavbarBrand() {\\n    (0, _classCallCheck3['default'])(this, NavbarBrand);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  NavbarBrand.prototype.render = function render() {\\n    var _props = this.props,\\n        className = _props.className,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['className', 'children']);\\n\\n    var navbarProps = this.context.$bs_navbar || { bsClass: 'navbar' };\\n\\n    var bsClassName = (0, _bootstrapUtils.prefix)(navbarProps, 'brand');\\n\\n    if (_react2['default'].isValidElement(children)) {\\n      return _react2['default'].cloneElement(children, {\\n        className: (0, _classnames2['default'])(children.props.className, className, bsClassName)\\n      });\\n    }\\n\\n    return _react2['default'].createElement(\\n      'span',\\n      (0, _extends3['default'])({}, props, { className: (0, _classnames2['default'])(className, bsClassName) }),\\n      children\\n    );\\n  };\\n\\n  return NavbarBrand;\\n}(_react2['default'].Component);\\n\\nNavbarBrand.contextTypes = contextTypes;\\n\\nexports['default'] = NavbarBrand;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/NavbarBrand.js\\n// module id = 472\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/NavbarBrand.js?\");\n\n/***/ },\n/* 473 */\n/*!*************************************************!*\\\n  !*** ./~/react-bootstrap/lib/NavbarCollapse.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _Collapse = __webpack_require__(/*! ./Collapse */ 383);\\n\\nvar _Collapse2 = _interopRequireDefault(_Collapse);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar contextTypes = {\\n  $bs_navbar: _react.PropTypes.shape({\\n    bsClass: _react.PropTypes.string,\\n    expanded: _react.PropTypes.bool\\n  })\\n};\\n\\nvar NavbarCollapse = function (_React$Component) {\\n  (0, _inherits3['default'])(NavbarCollapse, _React$Component);\\n\\n  function NavbarCollapse() {\\n    (0, _classCallCheck3['default'])(this, NavbarCollapse);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  NavbarCollapse.prototype.render = function render() {\\n    var _props = this.props,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['children']);\\n\\n    var navbarProps = this.context.$bs_navbar || { bsClass: 'navbar' };\\n\\n    var bsClassName = (0, _bootstrapUtils.prefix)(navbarProps, 'collapse');\\n\\n    return _react2['default'].createElement(\\n      _Collapse2['default'],\\n      (0, _extends3['default'])({ 'in': navbarProps.expanded }, props),\\n      _react2['default'].createElement(\\n        'div',\\n        { className: bsClassName },\\n        children\\n      )\\n    );\\n  };\\n\\n  return NavbarCollapse;\\n}(_react2['default'].Component);\\n\\nNavbarCollapse.contextTypes = contextTypes;\\n\\nexports['default'] = NavbarCollapse;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/NavbarCollapse.js\\n// module id = 473\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/NavbarCollapse.js?\");\n\n/***/ },\n/* 474 */\n/*!***********************************************!*\\\n  !*** ./~/react-bootstrap/lib/NavbarHeader.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar contextTypes = {\\n  $bs_navbar: _react2['default'].PropTypes.shape({\\n    bsClass: _react2['default'].PropTypes.string\\n  })\\n};\\n\\nvar NavbarHeader = function (_React$Component) {\\n  (0, _inherits3['default'])(NavbarHeader, _React$Component);\\n\\n  function NavbarHeader() {\\n    (0, _classCallCheck3['default'])(this, NavbarHeader);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  NavbarHeader.prototype.render = function render() {\\n    var _props = this.props,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['className']);\\n\\n    var navbarProps = this.context.$bs_navbar || { bsClass: 'navbar' };\\n\\n    var bsClassName = (0, _bootstrapUtils.prefix)(navbarProps, 'header');\\n\\n    return _react2['default'].createElement('div', (0, _extends3['default'])({}, props, { className: (0, _classnames2['default'])(className, bsClassName) }));\\n  };\\n\\n  return NavbarHeader;\\n}(_react2['default'].Component);\\n\\nNavbarHeader.contextTypes = contextTypes;\\n\\nexports['default'] = NavbarHeader;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/NavbarHeader.js\\n// module id = 474\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/NavbarHeader.js?\");\n\n/***/ },\n/* 475 */\n/*!***********************************************!*\\\n  !*** ./~/react-bootstrap/lib/NavbarToggle.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 357);\\n\\nvar _createChainedFunction2 = _interopRequireDefault(_createChainedFunction);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  onClick: _react.PropTypes.func,\\n  /**\\n   * The toggle content, if left empty it will render the default toggle (seen above).\\n   */\\n  children: _react.PropTypes.node\\n};\\n\\nvar contextTypes = {\\n  $bs_navbar: _react.PropTypes.shape({\\n    bsClass: _react.PropTypes.string,\\n    expanded: _react.PropTypes.bool,\\n    onToggle: _react.PropTypes.func.isRequired\\n  })\\n};\\n\\nvar NavbarToggle = function (_React$Component) {\\n  (0, _inherits3['default'])(NavbarToggle, _React$Component);\\n\\n  function NavbarToggle() {\\n    (0, _classCallCheck3['default'])(this, NavbarToggle);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  NavbarToggle.prototype.render = function render() {\\n    var _props = this.props,\\n        onClick = _props.onClick,\\n        className = _props.className,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['onClick', 'className', 'children']);\\n\\n    var navbarProps = this.context.$bs_navbar || { bsClass: 'navbar' };\\n\\n    var buttonProps = (0, _extends3['default'])({\\n      type: 'button'\\n    }, props, {\\n      onClick: (0, _createChainedFunction2['default'])(onClick, navbarProps.onToggle),\\n      className: (0, _classnames2['default'])(className, (0, _bootstrapUtils.prefix)(navbarProps, 'toggle'), !navbarProps.expanded && 'collapsed')\\n    });\\n\\n    if (children) {\\n      return _react2['default'].createElement(\\n        'button',\\n        buttonProps,\\n        children\\n      );\\n    }\\n\\n    return _react2['default'].createElement(\\n      'button',\\n      buttonProps,\\n      _react2['default'].createElement(\\n        'span',\\n        { className: 'sr-only' },\\n        'Toggle navigation'\\n      ),\\n      _react2['default'].createElement('span', { className: 'icon-bar' }),\\n      _react2['default'].createElement('span', { className: 'icon-bar' }),\\n      _react2['default'].createElement('span', { className: 'icon-bar' })\\n    );\\n  };\\n\\n  return NavbarToggle;\\n}(_react2['default'].Component);\\n\\nNavbarToggle.propTypes = propTypes;\\nNavbarToggle.contextTypes = contextTypes;\\n\\nexports['default'] = NavbarToggle;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/NavbarToggle.js\\n// module id = 475\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/NavbarToggle.js?\");\n\n/***/ },\n/* 476 */\n/*!**********************************************!*\\\n  !*** ./~/react-bootstrap/lib/NavDropdown.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _Dropdown = __webpack_require__(/*! ./Dropdown */ 396);\\n\\nvar _Dropdown2 = _interopRequireDefault(_Dropdown);\\n\\nvar _splitComponentProps2 = __webpack_require__(/*! ./utils/splitComponentProps */ 422);\\n\\nvar _splitComponentProps3 = _interopRequireDefault(_splitComponentProps2);\\n\\nvar _ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 358);\\n\\nvar _ValidComponentChildren2 = _interopRequireDefault(_ValidComponentChildren);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = (0, _extends3['default'])({}, _Dropdown2['default'].propTypes, {\\n\\n  // Toggle props.\\n  title: _react2['default'].PropTypes.node.isRequired,\\n  noCaret: _react2['default'].PropTypes.bool,\\n  active: _react2['default'].PropTypes.bool,\\n\\n  // Override generated docs from <Dropdown>.\\n  /**\\n   * @private\\n   */\\n  children: _react2['default'].PropTypes.node\\n});\\n\\nvar NavDropdown = function (_React$Component) {\\n  (0, _inherits3['default'])(NavDropdown, _React$Component);\\n\\n  function NavDropdown() {\\n    (0, _classCallCheck3['default'])(this, NavDropdown);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  NavDropdown.prototype.isActive = function isActive(_ref, activeKey, activeHref) {\\n    var props = _ref.props;\\n\\n    var _this2 = this;\\n\\n    if (props.active || activeKey != null && props.eventKey === activeKey || activeHref && props.href === activeHref) {\\n      return true;\\n    }\\n\\n    if (_ValidComponentChildren2['default'].some(props.children, function (child) {\\n      return _this2.isActive(child, activeKey, activeHref);\\n    })) {\\n      return true;\\n    }\\n\\n    return props.active;\\n  };\\n\\n  NavDropdown.prototype.render = function render() {\\n    var _this3 = this;\\n\\n    var _props = this.props,\\n        title = _props.title,\\n        activeKey = _props.activeKey,\\n        activeHref = _props.activeHref,\\n        className = _props.className,\\n        style = _props.style,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['title', 'activeKey', 'activeHref', 'className', 'style', 'children']);\\n\\n\\n    var active = this.isActive(this, activeKey, activeHref);\\n    delete props.active; // Accessed via this.isActive().\\n    delete props.eventKey; // Accessed via this.isActive().\\n\\n    var _splitComponentProps = (0, _splitComponentProps3['default'])(props, _Dropdown2['default'].ControlledComponent),\\n        dropdownProps = _splitComponentProps[0],\\n        toggleProps = _splitComponentProps[1];\\n\\n    // Unlike for the other dropdowns, styling needs to go to the `<Dropdown>`\\n    // rather than the `<Dropdown.Toggle>`.\\n\\n    return _react2['default'].createElement(\\n      _Dropdown2['default'],\\n      (0, _extends3['default'])({}, dropdownProps, {\\n        componentClass: 'li',\\n        className: (0, _classnames2['default'])(className, { active: active }),\\n        style: style\\n      }),\\n      _react2['default'].createElement(\\n        _Dropdown2['default'].Toggle,\\n        (0, _extends3['default'])({}, toggleProps, { useAnchor: true }),\\n        title\\n      ),\\n      _react2['default'].createElement(\\n        _Dropdown2['default'].Menu,\\n        null,\\n        _ValidComponentChildren2['default'].map(children, function (child) {\\n          return _react2['default'].cloneElement(child, {\\n            active: _this3.isActive(child, activeKey, activeHref)\\n          });\\n        })\\n      )\\n    );\\n  };\\n\\n  return NavDropdown;\\n}(_react2['default'].Component);\\n\\nNavDropdown.propTypes = propTypes;\\n\\nexports['default'] = NavDropdown;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/NavDropdown.js\\n// module id = 476\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/NavDropdown.js?\");\n\n/***/ },\n/* 477 */\n/*!******************************************!*\\\n  !*** ./~/react-bootstrap/lib/NavItem.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _SafeAnchor = __webpack_require__(/*! ./SafeAnchor */ 366);\\n\\nvar _SafeAnchor2 = _interopRequireDefault(_SafeAnchor);\\n\\nvar _createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 357);\\n\\nvar _createChainedFunction2 = _interopRequireDefault(_createChainedFunction);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  active: _react2['default'].PropTypes.bool,\\n  disabled: _react2['default'].PropTypes.bool,\\n  role: _react2['default'].PropTypes.string,\\n  href: _react2['default'].PropTypes.string,\\n  onClick: _react2['default'].PropTypes.func,\\n  onSelect: _react2['default'].PropTypes.func,\\n  eventKey: _react2['default'].PropTypes.any\\n};\\n\\nvar defaultProps = {\\n  active: false,\\n  disabled: false\\n};\\n\\nvar NavItem = function (_React$Component) {\\n  (0, _inherits3['default'])(NavItem, _React$Component);\\n\\n  function NavItem(props, context) {\\n    (0, _classCallCheck3['default'])(this, NavItem);\\n\\n    var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props, context));\\n\\n    _this.handleClick = _this.handleClick.bind(_this);\\n    return _this;\\n  }\\n\\n  NavItem.prototype.handleClick = function handleClick(e) {\\n    if (this.props.onSelect) {\\n      e.preventDefault();\\n\\n      if (!this.props.disabled) {\\n        this.props.onSelect(this.props.eventKey, e);\\n      }\\n    }\\n  };\\n\\n  NavItem.prototype.render = function render() {\\n    var _props = this.props,\\n        active = _props.active,\\n        disabled = _props.disabled,\\n        onClick = _props.onClick,\\n        className = _props.className,\\n        style = _props.style,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['active', 'disabled', 'onClick', 'className', 'style']);\\n\\n\\n    delete props.onSelect;\\n    delete props.eventKey;\\n\\n    // These are injected down by `<Nav>` for building `<SubNav>`s.\\n    delete props.activeKey;\\n    delete props.activeHref;\\n\\n    if (!props.role) {\\n      if (props.href === '#') {\\n        props.role = 'button';\\n      }\\n    } else if (props.role === 'tab') {\\n      props['aria-selected'] = active;\\n    }\\n\\n    return _react2['default'].createElement(\\n      'li',\\n      {\\n        role: 'presentation',\\n        className: (0, _classnames2['default'])(className, { active: active, disabled: disabled }),\\n        style: style\\n      },\\n      _react2['default'].createElement(_SafeAnchor2['default'], (0, _extends3['default'])({}, props, {\\n        disabled: disabled,\\n        onClick: (0, _createChainedFunction2['default'])(onClick, this.handleClick)\\n      }))\\n    );\\n  };\\n\\n  return NavItem;\\n}(_react2['default'].Component);\\n\\nNavItem.propTypes = propTypes;\\nNavItem.defaultProps = defaultProps;\\n\\nexports['default'] = NavItem;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/NavItem.js\\n// module id = 477\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/NavItem.js?\");\n\n/***/ },\n/* 478 */\n/*!******************************************!*\\\n  !*** ./~/react-bootstrap/lib/Overlay.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _Overlay = __webpack_require__(/*! react-overlays/lib/Overlay */ 479);\\n\\nvar _Overlay2 = _interopRequireDefault(_Overlay);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _Fade = __webpack_require__(/*! ./Fade */ 423);\\n\\nvar _Fade2 = _interopRequireDefault(_Fade);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = (0, _extends3['default'])({}, _Overlay2['default'].propTypes, {\\n\\n  /**\\n   * Set the visibility of the Overlay\\n   */\\n  show: _react2['default'].PropTypes.bool,\\n  /**\\n   * Specify whether the overlay should trigger onHide when the user clicks outside the overlay\\n   */\\n  rootClose: _react2['default'].PropTypes.bool,\\n  /**\\n   * A callback invoked by the overlay when it wishes to be hidden. Required if\\n   * `rootClose` is specified.\\n   */\\n  onHide: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * Use animation\\n   */\\n  animation: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.bool, _elementType2['default']]),\\n\\n  /**\\n   * Callback fired before the Overlay transitions in\\n   */\\n  onEnter: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * Callback fired as the Overlay begins to transition in\\n   */\\n  onEntering: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * Callback fired after the Overlay finishes transitioning in\\n   */\\n  onEntered: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * Callback fired right before the Overlay transitions out\\n   */\\n  onExit: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * Callback fired as the Overlay begins to transition out\\n   */\\n  onExiting: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * Callback fired after the Overlay finishes transitioning out\\n   */\\n  onExited: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * Sets the direction of the Overlay.\\n   */\\n  placement: _react2['default'].PropTypes.oneOf(['top', 'right', 'bottom', 'left'])\\n});\\n\\nvar defaultProps = {\\n  animation: _Fade2['default'],\\n  rootClose: false,\\n  show: false,\\n  placement: 'right'\\n};\\n\\nvar Overlay = function (_React$Component) {\\n  (0, _inherits3['default'])(Overlay, _React$Component);\\n\\n  function Overlay() {\\n    (0, _classCallCheck3['default'])(this, Overlay);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Overlay.prototype.render = function render() {\\n    var _props = this.props,\\n        animation = _props.animation,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['animation', 'children']);\\n\\n\\n    var transition = animation === true ? _Fade2['default'] : animation || null;\\n\\n    var child = void 0;\\n\\n    if (!transition) {\\n      child = (0, _react.cloneElement)(children, {\\n        className: (0, _classnames2['default'])(children.props.className, 'in')\\n      });\\n    } else {\\n      child = children;\\n    }\\n\\n    return _react2['default'].createElement(\\n      _Overlay2['default'],\\n      (0, _extends3['default'])({}, props, {\\n        transition: transition\\n      }),\\n      child\\n    );\\n  };\\n\\n  return Overlay;\\n}(_react2['default'].Component);\\n\\nOverlay.propTypes = propTypes;\\nOverlay.defaultProps = defaultProps;\\n\\nexports['default'] = Overlay;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Overlay.js\\n// module id = 478\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Overlay.js?\");\n\n/***/ },\n/* 479 */\n/*!*****************************************!*\\\n  !*** ./~/react-overlays/lib/Overlay.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n  value: true\\n});\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\\"value\\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _Portal = __webpack_require__(/*! ./Portal */ 454);\\n\\nvar _Portal2 = _interopRequireDefault(_Portal);\\n\\nvar _Position = __webpack_require__(/*! ./Position */ 480);\\n\\nvar _Position2 = _interopRequireDefault(_Position);\\n\\nvar _RootCloseWrapper = __webpack_require__(/*! ./RootCloseWrapper */ 415);\\n\\nvar _RootCloseWrapper2 = _interopRequireDefault(_RootCloseWrapper);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\\n\\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\\"Cannot call a class as a function\\\"); } }\\n\\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\\\"this hasn't been initialised - super() hasn't been called\\\"); } return call && (typeof call === \\\"object\\\" || typeof call === \\\"function\\\") ? call : self; }\\n\\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \\\"function\\\" && superClass !== null) { throw new TypeError(\\\"Super expression must either be null or a function, not \\\" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\\n\\n/**\\n * Built on top of `<Position/>` and `<Portal/>`, the overlay component is great for custom tooltip overlays.\\n */\\nvar Overlay = function (_React$Component) {\\n  _inherits(Overlay, _React$Component);\\n\\n  function Overlay(props, context) {\\n    _classCallCheck(this, Overlay);\\n\\n    var _this = _possibleConstructorReturn(this, (Overlay.__proto__ || Object.getPrototypeOf(Overlay)).call(this, props, context));\\n\\n    _this.state = { exited: !props.show };\\n    _this.onHiddenListener = _this.handleHidden.bind(_this);\\n    return _this;\\n  }\\n\\n  _createClass(Overlay, [{\\n    key: 'componentWillReceiveProps',\\n    value: function componentWillReceiveProps(nextProps) {\\n      if (nextProps.show) {\\n        this.setState({ exited: false });\\n      } else if (!nextProps.transition) {\\n        // Otherwise let handleHidden take care of marking exited.\\n        this.setState({ exited: true });\\n      }\\n    }\\n  }, {\\n    key: 'render',\\n    value: function render() {\\n      var _props = this.props;\\n      var container = _props.container;\\n      var containerPadding = _props.containerPadding;\\n      var target = _props.target;\\n      var placement = _props.placement;\\n      var shouldUpdatePosition = _props.shouldUpdatePosition;\\n      var rootClose = _props.rootClose;\\n      var children = _props.children;\\n      var Transition = _props.transition;\\n\\n      var props = _objectWithoutProperties(_props, ['container', 'containerPadding', 'target', 'placement', 'shouldUpdatePosition', 'rootClose', 'children', 'transition']);\\n\\n      // Don't un-render the overlay while it's transitioning out.\\n\\n\\n      var mountOverlay = props.show || Transition && !this.state.exited;\\n      if (!mountOverlay) {\\n        // Don't bother showing anything if we don't have to.\\n        return null;\\n      }\\n\\n      var child = children;\\n\\n      // Position is be inner-most because it adds inline styles into the child,\\n      // which the other wrappers don't forward correctly.\\n      child = _react2.default.createElement(\\n        _Position2.default,\\n        { container: container, containerPadding: containerPadding, target: target, placement: placement, shouldUpdatePosition: shouldUpdatePosition },\\n        child\\n      );\\n\\n      if (Transition) {\\n        var onExit = props.onExit;\\n        var onExiting = props.onExiting;\\n        var onEnter = props.onEnter;\\n        var onEntering = props.onEntering;\\n        var onEntered = props.onEntered;\\n\\n        // This animates the child node by injecting props, so it must precede\\n        // anything that adds a wrapping div.\\n\\n        child = _react2.default.createElement(\\n          Transition,\\n          {\\n            'in': props.show,\\n            transitionAppear: true,\\n            onExit: onExit,\\n            onExiting: onExiting,\\n            onExited: this.onHiddenListener,\\n            onEnter: onEnter,\\n            onEntering: onEntering,\\n            onEntered: onEntered\\n          },\\n          child\\n        );\\n      }\\n\\n      // This goes after everything else because it adds a wrapping div.\\n      if (rootClose) {\\n        child = _react2.default.createElement(\\n          _RootCloseWrapper2.default,\\n          { onRootClose: props.onHide },\\n          child\\n        );\\n      }\\n\\n      return _react2.default.createElement(\\n        _Portal2.default,\\n        { container: container },\\n        child\\n      );\\n    }\\n  }, {\\n    key: 'handleHidden',\\n    value: function handleHidden() {\\n      this.setState({ exited: true });\\n\\n      if (this.props.onExited) {\\n        var _props2;\\n\\n        (_props2 = this.props).onExited.apply(_props2, arguments);\\n      }\\n    }\\n  }]);\\n\\n  return Overlay;\\n}(_react2.default.Component);\\n\\nOverlay.propTypes = _extends({}, _Portal2.default.propTypes, _Position2.default.propTypes, {\\n\\n  /**\\n   * Set the visibility of the Overlay\\n   */\\n  show: _react2.default.PropTypes.bool,\\n\\n  /**\\n   * Specify whether the overlay should trigger `onHide` when the user clicks outside the overlay\\n   */\\n  rootClose: _react2.default.PropTypes.bool,\\n\\n  /**\\n   * A Callback fired by the Overlay when it wishes to be hidden.\\n   *\\n   * __required__ when `rootClose` is `true`.\\n   *\\n   * @type func\\n   */\\n  onHide: function onHide(props) {\\n    var propType = _react2.default.PropTypes.func;\\n    if (props.rootClose) {\\n      propType = propType.isRequired;\\n    }\\n\\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\\n      args[_key - 1] = arguments[_key];\\n    }\\n\\n    return propType.apply(undefined, [props].concat(args));\\n  },\\n\\n\\n  /**\\n   * A `<Transition/>` component used to animate the overlay changes visibility.\\n   */\\n  transition: _elementType2.default,\\n\\n  /**\\n   * Callback fired before the Overlay transitions in\\n   */\\n  onEnter: _react2.default.PropTypes.func,\\n\\n  /**\\n   * Callback fired as the Overlay begins to transition in\\n   */\\n  onEntering: _react2.default.PropTypes.func,\\n\\n  /**\\n   * Callback fired after the Overlay finishes transitioning in\\n   */\\n  onEntered: _react2.default.PropTypes.func,\\n\\n  /**\\n   * Callback fired right before the Overlay transitions out\\n   */\\n  onExit: _react2.default.PropTypes.func,\\n\\n  /**\\n   * Callback fired as the Overlay begins to transition out\\n   */\\n  onExiting: _react2.default.PropTypes.func,\\n\\n  /**\\n   * Callback fired after the Overlay finishes transitioning out\\n   */\\n  onExited: _react2.default.PropTypes.func\\n});\\n\\nexports.default = Overlay;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-overlays/lib/Overlay.js\\n// module id = 479\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-overlays/lib/Overlay.js?\");\n\n/***/ },\n/* 480 */\n/*!******************************************!*\\\n  !*** ./~/react-overlays/lib/Position.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n  value: true\\n});\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\\"value\\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _reactDom = __webpack_require__(/*! react-dom */ 110);\\n\\nvar _reactDom2 = _interopRequireDefault(_reactDom);\\n\\nvar _componentOrElement = __webpack_require__(/*! react-prop-types/lib/componentOrElement */ 453);\\n\\nvar _componentOrElement2 = _interopRequireDefault(_componentOrElement);\\n\\nvar _calculatePosition = __webpack_require__(/*! ./utils/calculatePosition */ 481);\\n\\nvar _calculatePosition2 = _interopRequireDefault(_calculatePosition);\\n\\nvar _getContainer = __webpack_require__(/*! ./utils/getContainer */ 455);\\n\\nvar _getContainer2 = _interopRequireDefault(_getContainer);\\n\\nvar _ownerDocument = __webpack_require__(/*! ./utils/ownerDocument */ 418);\\n\\nvar _ownerDocument2 = _interopRequireDefault(_ownerDocument);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\\n\\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\\"Cannot call a class as a function\\\"); } }\\n\\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\\\"this hasn't been initialised - super() hasn't been called\\\"); } return call && (typeof call === \\\"object\\\" || typeof call === \\\"function\\\") ? call : self; }\\n\\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \\\"function\\\" && superClass !== null) { throw new TypeError(\\\"Super expression must either be null or a function, not \\\" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\\n\\n/**\\n * The Position component calculates the coordinates for its child, to position\\n * it relative to a `target` component or node. Useful for creating callouts\\n * and tooltips, the Position component injects a `style` props with `left` and\\n * `top` values for positioning your component.\\n *\\n * It also injects \\\"arrow\\\" `left`, and `top` values for styling callout arrows\\n * for giving your components a sense of directionality.\\n */\\nvar Position = function (_React$Component) {\\n  _inherits(Position, _React$Component);\\n\\n  function Position(props, context) {\\n    _classCallCheck(this, Position);\\n\\n    var _this = _possibleConstructorReturn(this, (Position.__proto__ || Object.getPrototypeOf(Position)).call(this, props, context));\\n\\n    _this.state = {\\n      positionLeft: 0,\\n      positionTop: 0,\\n      arrowOffsetLeft: null,\\n      arrowOffsetTop: null\\n    };\\n\\n    _this._needsFlush = false;\\n    _this._lastTarget = null;\\n    return _this;\\n  }\\n\\n  _createClass(Position, [{\\n    key: 'componentDidMount',\\n    value: function componentDidMount() {\\n      this.updatePosition(this.getTarget());\\n    }\\n  }, {\\n    key: 'componentWillReceiveProps',\\n    value: function componentWillReceiveProps() {\\n      this._needsFlush = true;\\n    }\\n  }, {\\n    key: 'componentDidUpdate',\\n    value: function componentDidUpdate(prevProps) {\\n      if (this._needsFlush) {\\n        this._needsFlush = false;\\n        this.maybeUpdatePosition(this.props.placement !== prevProps.placement);\\n      }\\n    }\\n  }, {\\n    key: 'render',\\n    value: function render() {\\n      var _props = this.props;\\n      var children = _props.children;\\n      var className = _props.className;\\n\\n      var props = _objectWithoutProperties(_props, ['children', 'className']);\\n\\n      var _state = this.state;\\n      var positionLeft = _state.positionLeft;\\n      var positionTop = _state.positionTop;\\n\\n      var arrowPosition = _objectWithoutProperties(_state, ['positionLeft', 'positionTop']);\\n\\n      // These should not be forwarded to the child.\\n\\n\\n      delete props.target;\\n      delete props.container;\\n      delete props.containerPadding;\\n      delete props.shouldUpdatePosition;\\n\\n      var child = _react2.default.Children.only(children);\\n      return (0, _react.cloneElement)(child, _extends({}, props, arrowPosition, {\\n        // FIXME: Don't forward `positionLeft` and `positionTop` via both props\\n        // and `props.style`.\\n        positionLeft: positionLeft,\\n        positionTop: positionTop,\\n        className: (0, _classnames2.default)(className, child.props.className),\\n        style: _extends({}, child.props.style, {\\n          left: positionLeft,\\n          top: positionTop\\n        })\\n      }));\\n    }\\n  }, {\\n    key: 'getTarget',\\n    value: function getTarget() {\\n      var target = this.props.target;\\n\\n      var targetElement = typeof target === 'function' ? target() : target;\\n      return targetElement && _reactDom2.default.findDOMNode(targetElement) || null;\\n    }\\n  }, {\\n    key: 'maybeUpdatePosition',\\n    value: function maybeUpdatePosition(placementChanged) {\\n      var target = this.getTarget();\\n\\n      if (!this.props.shouldUpdatePosition && target === this._lastTarget && !placementChanged) {\\n        return;\\n      }\\n\\n      this.updatePosition(target);\\n    }\\n  }, {\\n    key: 'updatePosition',\\n    value: function updatePosition(target) {\\n      this._lastTarget = target;\\n\\n      if (!target) {\\n        this.setState({\\n          positionLeft: 0,\\n          positionTop: 0,\\n          arrowOffsetLeft: null,\\n          arrowOffsetTop: null\\n        });\\n\\n        return;\\n      }\\n\\n      var overlay = _reactDom2.default.findDOMNode(this);\\n      var container = (0, _getContainer2.default)(this.props.container, (0, _ownerDocument2.default)(this).body);\\n\\n      this.setState((0, _calculatePosition2.default)(this.props.placement, overlay, target, container, this.props.containerPadding));\\n    }\\n  }]);\\n\\n  return Position;\\n}(_react2.default.Component);\\n\\nPosition.propTypes = {\\n  /**\\n   * A node, element, or function that returns either. The child will be\\n   * be positioned next to the `target` specified.\\n   */\\n  target: _react2.default.PropTypes.oneOfType([_componentOrElement2.default, _react2.default.PropTypes.func]),\\n\\n  /**\\n   * \\\"offsetParent\\\" of the component\\n   */\\n  container: _react2.default.PropTypes.oneOfType([_componentOrElement2.default, _react2.default.PropTypes.func]),\\n  /**\\n   * Minimum spacing in pixels between container border and component border\\n   */\\n  containerPadding: _react2.default.PropTypes.number,\\n  /**\\n   * How to position the component relative to the target\\n   */\\n  placement: _react2.default.PropTypes.oneOf(['top', 'right', 'bottom', 'left']),\\n  /**\\n   * Whether the position should be changed on each update\\n   */\\n  shouldUpdatePosition: _react2.default.PropTypes.bool\\n};\\n\\nPosition.displayName = 'Position';\\n\\nPosition.defaultProps = {\\n  containerPadding: 0,\\n  placement: 'right',\\n  shouldUpdatePosition: false\\n};\\n\\nexports.default = Position;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-overlays/lib/Position.js\\n// module id = 480\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-overlays/lib/Position.js?\");\n\n/***/ },\n/* 481 */\n/*!*********************************************************!*\\\n  !*** ./~/react-overlays/lib/utils/calculatePosition.js ***!\n  \\*********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n  value: true\\n});\\nexports.default = calculatePosition;\\n\\nvar _offset = __webpack_require__(/*! dom-helpers/query/offset */ 482);\\n\\nvar _offset2 = _interopRequireDefault(_offset);\\n\\nvar _position = __webpack_require__(/*! dom-helpers/query/position */ 483);\\n\\nvar _position2 = _interopRequireDefault(_position);\\n\\nvar _scrollTop = __webpack_require__(/*! dom-helpers/query/scrollTop */ 485);\\n\\nvar _scrollTop2 = _interopRequireDefault(_scrollTop);\\n\\nvar _ownerDocument = __webpack_require__(/*! ./ownerDocument */ 418);\\n\\nvar _ownerDocument2 = _interopRequireDefault(_ownerDocument);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction getContainerDimensions(containerNode) {\\n  var width = void 0,\\n      height = void 0,\\n      scroll = void 0;\\n\\n  if (containerNode.tagName === 'BODY') {\\n    width = window.innerWidth;\\n    height = window.innerHeight;\\n\\n    scroll = (0, _scrollTop2.default)((0, _ownerDocument2.default)(containerNode).documentElement) || (0, _scrollTop2.default)(containerNode);\\n  } else {\\n    var _getOffset = (0, _offset2.default)(containerNode);\\n\\n    width = _getOffset.width;\\n    height = _getOffset.height;\\n\\n    scroll = (0, _scrollTop2.default)(containerNode);\\n  }\\n\\n  return { width: width, height: height, scroll: scroll };\\n}\\n\\nfunction getTopDelta(top, overlayHeight, container, padding) {\\n  var containerDimensions = getContainerDimensions(container);\\n  var containerScroll = containerDimensions.scroll;\\n  var containerHeight = containerDimensions.height;\\n\\n  var topEdgeOffset = top - padding - containerScroll;\\n  var bottomEdgeOffset = top + padding - containerScroll + overlayHeight;\\n\\n  if (topEdgeOffset < 0) {\\n    return -topEdgeOffset;\\n  } else if (bottomEdgeOffset > containerHeight) {\\n    return containerHeight - bottomEdgeOffset;\\n  } else {\\n    return 0;\\n  }\\n}\\n\\nfunction getLeftDelta(left, overlayWidth, container, padding) {\\n  var containerDimensions = getContainerDimensions(container);\\n  var containerWidth = containerDimensions.width;\\n\\n  var leftEdgeOffset = left - padding;\\n  var rightEdgeOffset = left + padding + overlayWidth;\\n\\n  if (leftEdgeOffset < 0) {\\n    return -leftEdgeOffset;\\n  } else if (rightEdgeOffset > containerWidth) {\\n    return containerWidth - rightEdgeOffset;\\n  }\\n\\n  return 0;\\n}\\n\\nfunction calculatePosition(placement, overlayNode, target, container, padding) {\\n  var childOffset = container.tagName === 'BODY' ? (0, _offset2.default)(target) : (0, _position2.default)(target, container);\\n\\n  var _getOffset2 = (0, _offset2.default)(overlayNode);\\n\\n  var overlayHeight = _getOffset2.height;\\n  var overlayWidth = _getOffset2.width;\\n\\n\\n  var positionLeft = void 0,\\n      positionTop = void 0,\\n      arrowOffsetLeft = void 0,\\n      arrowOffsetTop = void 0;\\n\\n  if (placement === 'left' || placement === 'right') {\\n    positionTop = childOffset.top + (childOffset.height - overlayHeight) / 2;\\n\\n    if (placement === 'left') {\\n      positionLeft = childOffset.left - overlayWidth;\\n    } else {\\n      positionLeft = childOffset.left + childOffset.width;\\n    }\\n\\n    var topDelta = getTopDelta(positionTop, overlayHeight, container, padding);\\n\\n    positionTop += topDelta;\\n    arrowOffsetTop = 50 * (1 - 2 * topDelta / overlayHeight) + '%';\\n    arrowOffsetLeft = void 0;\\n  } else if (placement === 'top' || placement === 'bottom') {\\n    positionLeft = childOffset.left + (childOffset.width - overlayWidth) / 2;\\n\\n    if (placement === 'top') {\\n      positionTop = childOffset.top - overlayHeight;\\n    } else {\\n      positionTop = childOffset.top + childOffset.height;\\n    }\\n\\n    var leftDelta = getLeftDelta(positionLeft, overlayWidth, container, padding);\\n\\n    positionLeft += leftDelta;\\n    arrowOffsetLeft = 50 * (1 - 2 * leftDelta / overlayWidth) + '%';\\n    arrowOffsetTop = void 0;\\n  } else {\\n    throw new Error('calcOverlayPosition(): No such placement of \\\"' + placement + '\\\" found.');\\n  }\\n\\n  return { positionLeft: positionLeft, positionTop: positionTop, arrowOffsetLeft: arrowOffsetLeft, arrowOffsetTop: arrowOffsetTop };\\n}\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-overlays/lib/utils/calculatePosition.js\\n// module id = 481\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-overlays/lib/utils/calculatePosition.js?\");\n\n/***/ },\n/* 482 */\n/*!***************************************!*\\\n  !*** ./~/dom-helpers/query/offset.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\nvar contains = __webpack_require__(/*! ./contains */ 399),\\n    getWindow = __webpack_require__(/*! ./isWindow */ 462),\\n    ownerDocument = __webpack_require__(/*! ../ownerDocument */ 398);\\n\\nmodule.exports = function offset(node) {\\n  var doc = ownerDocument(node),\\n      win = getWindow(doc),\\n      docElem = doc && doc.documentElement,\\n      box = { top: 0, left: 0, height: 0, width: 0 };\\n\\n  if (!doc) return;\\n\\n  // Make sure it's not a disconnected DOM node\\n  if (!contains(docElem, node)) return box;\\n\\n  if (node.getBoundingClientRect !== undefined) box = node.getBoundingClientRect();\\n\\n  if (box.width || box.height) {\\n\\n    box = {\\n      top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\\n      left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0),\\n      width: (box.width == null ? node.offsetWidth : box.width) || 0,\\n      height: (box.height == null ? node.offsetHeight : box.height) || 0\\n    };\\n  }\\n\\n  return box;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/query/offset.js\\n// module id = 482\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/query/offset.js?\");\n\n/***/ },\n/* 483 */\n/*!*****************************************!*\\\n  !*** ./~/dom-helpers/query/position.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar babelHelpers = __webpack_require__(/*! ../util/babelHelpers.js */ 390);\\n\\nexports.__esModule = true;\\nexports['default'] = position;\\n\\nvar _offset = __webpack_require__(/*! ./offset */ 482);\\n\\nvar _offset2 = babelHelpers.interopRequireDefault(_offset);\\n\\nvar _offsetParent = __webpack_require__(/*! ./offsetParent */ 484);\\n\\nvar _offsetParent2 = babelHelpers.interopRequireDefault(_offsetParent);\\n\\nvar _scrollTop = __webpack_require__(/*! ./scrollTop */ 485);\\n\\nvar _scrollTop2 = babelHelpers.interopRequireDefault(_scrollTop);\\n\\nvar _scrollLeft = __webpack_require__(/*! ./scrollLeft */ 486);\\n\\nvar _scrollLeft2 = babelHelpers.interopRequireDefault(_scrollLeft);\\n\\nvar _style = __webpack_require__(/*! ../style */ 384);\\n\\nvar _style2 = babelHelpers.interopRequireDefault(_style);\\n\\nfunction nodeName(node) {\\n  return node.nodeName && node.nodeName.toLowerCase();\\n}\\n\\nfunction position(node, offsetParent) {\\n  var parentOffset = { top: 0, left: 0 },\\n      offset;\\n\\n  // Fixed elements are offset from window (parentOffset = {top:0, left: 0},\\n  // because it is its only offset parent\\n  if ((0, _style2['default'])(node, 'position') === 'fixed') {\\n    offset = node.getBoundingClientRect();\\n  } else {\\n    offsetParent = offsetParent || (0, _offsetParent2['default'])(node);\\n    offset = (0, _offset2['default'])(node);\\n\\n    if (nodeName(offsetParent) !== 'html') parentOffset = (0, _offset2['default'])(offsetParent);\\n\\n    parentOffset.top += parseInt((0, _style2['default'])(offsetParent, 'borderTopWidth'), 10) - (0, _scrollTop2['default'])(offsetParent) || 0;\\n    parentOffset.left += parseInt((0, _style2['default'])(offsetParent, 'borderLeftWidth'), 10) - (0, _scrollLeft2['default'])(offsetParent) || 0;\\n  }\\n\\n  // Subtract parent offsets and node margins\\n  return babelHelpers._extends({}, offset, {\\n    top: offset.top - parentOffset.top - (parseInt((0, _style2['default'])(node, 'marginTop'), 10) || 0),\\n    left: offset.left - parentOffset.left - (parseInt((0, _style2['default'])(node, 'marginLeft'), 10) || 0)\\n  });\\n}\\n\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/query/position.js\\n// module id = 483\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/query/position.js?\");\n\n/***/ },\n/* 484 */\n/*!*********************************************!*\\\n  !*** ./~/dom-helpers/query/offsetParent.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar babelHelpers = __webpack_require__(/*! ../util/babelHelpers.js */ 390);\\n\\nexports.__esModule = true;\\nexports['default'] = offsetParent;\\n\\nvar _ownerDocument = __webpack_require__(/*! ../ownerDocument */ 398);\\n\\nvar _ownerDocument2 = babelHelpers.interopRequireDefault(_ownerDocument);\\n\\nvar _style = __webpack_require__(/*! ../style */ 384);\\n\\nvar _style2 = babelHelpers.interopRequireDefault(_style);\\n\\nfunction nodeName(node) {\\n  return node.nodeName && node.nodeName.toLowerCase();\\n}\\n\\nfunction offsetParent(node) {\\n  var doc = (0, _ownerDocument2['default'])(node),\\n      offsetParent = node && node.offsetParent;\\n\\n  while (offsetParent && nodeName(node) !== 'html' && (0, _style2['default'])(offsetParent, 'position') === 'static') {\\n    offsetParent = offsetParent.offsetParent;\\n  }\\n\\n  return offsetParent || doc.documentElement;\\n}\\n\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/query/offsetParent.js\\n// module id = 484\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/query/offsetParent.js?\");\n\n/***/ },\n/* 485 */\n/*!******************************************!*\\\n  !*** ./~/dom-helpers/query/scrollTop.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\nvar getWindow = __webpack_require__(/*! ./isWindow */ 462);\\n\\nmodule.exports = function scrollTop(node, val) {\\n  var win = getWindow(node);\\n\\n  if (val === undefined) return win ? 'pageYOffset' in win ? win.pageYOffset : win.document.documentElement.scrollTop : node.scrollTop;\\n\\n  if (win) win.scrollTo('pageXOffset' in win ? win.pageXOffset : win.document.documentElement.scrollLeft, val);else node.scrollTop = val;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/query/scrollTop.js\\n// module id = 485\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/query/scrollTop.js?\");\n\n/***/ },\n/* 486 */\n/*!*******************************************!*\\\n  !*** ./~/dom-helpers/query/scrollLeft.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\nvar getWindow = __webpack_require__(/*! ./isWindow */ 462);\\n\\nmodule.exports = function scrollTop(node, val) {\\n  var win = getWindow(node);\\n\\n  if (val === undefined) return win ? 'pageXOffset' in win ? win.pageXOffset : win.document.documentElement.scrollLeft : node.scrollLeft;\\n\\n  if (win) win.scrollTo(val, 'pageYOffset' in win ? win.pageYOffset : win.document.documentElement.scrollTop);else node.scrollLeft = val;\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/dom-helpers/query/scrollLeft.js\\n// module id = 486\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/dom-helpers/query/scrollLeft.js?\");\n\n/***/ },\n/* 487 */\n/*!*************************************************!*\\\n  !*** ./~/react-bootstrap/lib/OverlayTrigger.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _contains = __webpack_require__(/*! dom-helpers/query/contains */ 399);\\n\\nvar _contains2 = _interopRequireDefault(_contains);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _reactDom = __webpack_require__(/*! react-dom */ 110);\\n\\nvar _reactDom2 = _interopRequireDefault(_reactDom);\\n\\nvar _warning = __webpack_require__(/*! warning */ 41);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nvar _Overlay = __webpack_require__(/*! ./Overlay */ 478);\\n\\nvar _Overlay2 = _interopRequireDefault(_Overlay);\\n\\nvar _createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 357);\\n\\nvar _createChainedFunction2 = _interopRequireDefault(_createChainedFunction);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\n/**\\n * Check if value one is inside or equal to the of value\\n *\\n * @param {string} one\\n * @param {string|array} of\\n * @returns {boolean}\\n */\\nfunction isOneOf(one, of) {\\n  if (Array.isArray(of)) {\\n    return of.indexOf(one) >= 0;\\n  }\\n  return one === of;\\n}\\n\\nvar triggerType = _react2['default'].PropTypes.oneOf(['click', 'hover', 'focus']);\\n\\nvar propTypes = (0, _extends3['default'])({}, _Overlay2['default'].propTypes, {\\n\\n  /**\\n  * Specify which action or actions trigger Overlay visibility\\n  */\\n  trigger: _react2['default'].PropTypes.oneOfType([triggerType, _react2['default'].PropTypes.arrayOf(triggerType)]),\\n\\n  /**\\n   * A millisecond delay amount to show and hide the Overlay once triggered\\n   */\\n  delay: _react2['default'].PropTypes.number,\\n  /**\\n   * A millisecond delay amount before showing the Overlay once triggered.\\n   */\\n  delayShow: _react2['default'].PropTypes.number,\\n  /**\\n   * A millisecond delay amount before hiding the Overlay once triggered.\\n   */\\n  delayHide: _react2['default'].PropTypes.number,\\n\\n  // FIXME: This should be `defaultShow`.\\n  /**\\n   * The initial visibility state of the Overlay. For more nuanced visibility\\n   * control, consider using the Overlay component directly.\\n   */\\n  defaultOverlayShown: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * An element or text to overlay next to the target.\\n   */\\n  overlay: _react2['default'].PropTypes.node.isRequired,\\n\\n  /**\\n   * @private\\n   */\\n  onBlur: _react2['default'].PropTypes.func,\\n  /**\\n   * @private\\n   */\\n  onClick: _react2['default'].PropTypes.func,\\n  /**\\n   * @private\\n   */\\n  onFocus: _react2['default'].PropTypes.func,\\n  /**\\n   * @private\\n   */\\n  onMouseOut: _react2['default'].PropTypes.func,\\n  /**\\n   * @private\\n   */\\n  onMouseOver: _react2['default'].PropTypes.func,\\n\\n  // Overridden props from `<Overlay>`.\\n  /**\\n   * @private\\n   */\\n  target: _react2['default'].PropTypes.oneOf([null]),\\n  /**\\n  * @private\\n  */\\n  onHide: _react2['default'].PropTypes.oneOf([null]),\\n  /**\\n   * @private\\n   */\\n  show: _react2['default'].PropTypes.oneOf([null])\\n});\\n\\nvar defaultProps = {\\n  defaultOverlayShown: false,\\n  trigger: ['hover', 'focus']\\n};\\n\\nvar OverlayTrigger = function (_React$Component) {\\n  (0, _inherits3['default'])(OverlayTrigger, _React$Component);\\n\\n  function OverlayTrigger(props, context) {\\n    (0, _classCallCheck3['default'])(this, OverlayTrigger);\\n\\n    var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props, context));\\n\\n    _this.handleToggle = _this.handleToggle.bind(_this);\\n    _this.handleDelayedShow = _this.handleDelayedShow.bind(_this);\\n    _this.handleDelayedHide = _this.handleDelayedHide.bind(_this);\\n    _this.handleHide = _this.handleHide.bind(_this);\\n\\n    _this.handleMouseOver = function (e) {\\n      return _this.handleMouseOverOut(_this.handleDelayedShow, e);\\n    };\\n    _this.handleMouseOut = function (e) {\\n      return _this.handleMouseOverOut(_this.handleDelayedHide, e);\\n    };\\n\\n    _this._mountNode = null;\\n\\n    _this.state = {\\n      show: props.defaultOverlayShown\\n    };\\n    return _this;\\n  }\\n\\n  OverlayTrigger.prototype.componentDidMount = function componentDidMount() {\\n    this._mountNode = document.createElement('div');\\n    this.renderOverlay();\\n  };\\n\\n  OverlayTrigger.prototype.componentDidUpdate = function componentDidUpdate() {\\n    this.renderOverlay();\\n  };\\n\\n  OverlayTrigger.prototype.componentWillUnmount = function componentWillUnmount() {\\n    _reactDom2['default'].unmountComponentAtNode(this._mountNode);\\n    this._mountNode = null;\\n\\n    clearTimeout(this._hoverShowDelay);\\n    clearTimeout(this._hoverHideDelay);\\n  };\\n\\n  OverlayTrigger.prototype.handleToggle = function handleToggle() {\\n    if (this.state.show) {\\n      this.hide();\\n    } else {\\n      this.show();\\n    }\\n  };\\n\\n  OverlayTrigger.prototype.handleDelayedShow = function handleDelayedShow() {\\n    var _this2 = this;\\n\\n    if (this._hoverHideDelay != null) {\\n      clearTimeout(this._hoverHideDelay);\\n      this._hoverHideDelay = null;\\n      return;\\n    }\\n\\n    if (this.state.show || this._hoverShowDelay != null) {\\n      return;\\n    }\\n\\n    var delay = this.props.delayShow != null ? this.props.delayShow : this.props.delay;\\n\\n    if (!delay) {\\n      this.show();\\n      return;\\n    }\\n\\n    this._hoverShowDelay = setTimeout(function () {\\n      _this2._hoverShowDelay = null;\\n      _this2.show();\\n    }, delay);\\n  };\\n\\n  OverlayTrigger.prototype.handleDelayedHide = function handleDelayedHide() {\\n    var _this3 = this;\\n\\n    if (this._hoverShowDelay != null) {\\n      clearTimeout(this._hoverShowDelay);\\n      this._hoverShowDelay = null;\\n      return;\\n    }\\n\\n    if (!this.state.show || this._hoverHideDelay != null) {\\n      return;\\n    }\\n\\n    var delay = this.props.delayHide != null ? this.props.delayHide : this.props.delay;\\n\\n    if (!delay) {\\n      this.hide();\\n      return;\\n    }\\n\\n    this._hoverHideDelay = setTimeout(function () {\\n      _this3._hoverHideDelay = null;\\n      _this3.hide();\\n    }, delay);\\n  };\\n\\n  // Simple implementation of mouseEnter and mouseLeave.\\n  // React's built version is broken: https://github.com/facebook/react/issues/4251\\n  // for cases when the trigger is disabled and mouseOut/Over can cause flicker\\n  // moving from one child element to another.\\n\\n\\n  OverlayTrigger.prototype.handleMouseOverOut = function handleMouseOverOut(handler, e) {\\n    var target = e.currentTarget;\\n    var related = e.relatedTarget || e.nativeEvent.toElement;\\n\\n    if (!related || related !== target && !(0, _contains2['default'])(target, related)) {\\n      handler(e);\\n    }\\n  };\\n\\n  OverlayTrigger.prototype.handleHide = function handleHide() {\\n    this.hide();\\n  };\\n\\n  OverlayTrigger.prototype.show = function show() {\\n    this.setState({ show: true });\\n  };\\n\\n  OverlayTrigger.prototype.hide = function hide() {\\n    this.setState({ show: false });\\n  };\\n\\n  OverlayTrigger.prototype.makeOverlay = function makeOverlay(overlay, props) {\\n    return _react2['default'].createElement(\\n      _Overlay2['default'],\\n      (0, _extends3['default'])({}, props, {\\n        show: this.state.show,\\n        onHide: this.handleHide,\\n        target: this\\n      }),\\n      overlay\\n    );\\n  };\\n\\n  OverlayTrigger.prototype.renderOverlay = function renderOverlay() {\\n    _reactDom2['default'].unstable_renderSubtreeIntoContainer(this, this._overlay, this._mountNode);\\n  };\\n\\n  OverlayTrigger.prototype.render = function render() {\\n    var _props = this.props,\\n        trigger = _props.trigger,\\n        overlay = _props.overlay,\\n        children = _props.children,\\n        onBlur = _props.onBlur,\\n        onClick = _props.onClick,\\n        onFocus = _props.onFocus,\\n        onMouseOut = _props.onMouseOut,\\n        onMouseOver = _props.onMouseOver,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['trigger', 'overlay', 'children', 'onBlur', 'onClick', 'onFocus', 'onMouseOut', 'onMouseOver']);\\n\\n\\n    delete props.delay;\\n    delete props.delayShow;\\n    delete props.delayHide;\\n    delete props.defaultOverlayShown;\\n\\n    var child = _react2['default'].Children.only(children);\\n    var childProps = child.props;\\n\\n    var triggerProps = {\\n      'aria-describedby': overlay.props.id\\n    };\\n\\n    // FIXME: The logic here for passing through handlers on this component is\\n    // inconsistent. We shouldn't be passing any of these props through.\\n\\n    triggerProps.onClick = (0, _createChainedFunction2['default'])(childProps.onClick, onClick);\\n\\n    if (isOneOf('click', trigger)) {\\n      triggerProps.onClick = (0, _createChainedFunction2['default'])(triggerProps.onClick, this.handleToggle);\\n    }\\n\\n    if (isOneOf('hover', trigger)) {\\n      process.env.NODE_ENV !== 'production' ? (0, _warning2['default'])(!(trigger === 'hover'), '[react-bootstrap] Specifying only the `\\\"hover\\\"` trigger limits the ' + 'visibility of the overlay to just mouse users. Consider also ' + 'including the `\\\"focus\\\"` trigger so that touch and keyboard only ' + 'users can see the overlay as well.') : void 0;\\n\\n      triggerProps.onMouseOver = (0, _createChainedFunction2['default'])(childProps.onMouseOver, onMouseOver, this.handleMouseOver);\\n      triggerProps.onMouseOut = (0, _createChainedFunction2['default'])(childProps.onMouseOut, onMouseOut, this.handleMouseOut);\\n    }\\n\\n    if (isOneOf('focus', trigger)) {\\n      triggerProps.onFocus = (0, _createChainedFunction2['default'])(childProps.onFocus, onFocus, this.handleDelayedShow);\\n      triggerProps.onBlur = (0, _createChainedFunction2['default'])(childProps.onBlur, onBlur, this.handleDelayedHide);\\n    }\\n\\n    this._overlay = this.makeOverlay(overlay, props);\\n\\n    return (0, _react.cloneElement)(child, triggerProps);\\n  };\\n\\n  return OverlayTrigger;\\n}(_react2['default'].Component);\\n\\nOverlayTrigger.propTypes = propTypes;\\nOverlayTrigger.defaultProps = defaultProps;\\n\\nexports['default'] = OverlayTrigger;\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/OverlayTrigger.js\\n// module id = 487\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/OverlayTrigger.js?\");\n\n/***/ },\n/* 488 */\n/*!*********************************************!*\\\n  !*** ./~/react-bootstrap/lib/PageHeader.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar PageHeader = function (_React$Component) {\\n  (0, _inherits3['default'])(PageHeader, _React$Component);\\n\\n  function PageHeader() {\\n    (0, _classCallCheck3['default'])(this, PageHeader);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  PageHeader.prototype.render = function render() {\\n    var _props = this.props,\\n        className = _props.className,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['className', 'children']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement(\\n      'div',\\n      (0, _extends3['default'])({}, elementProps, {\\n        className: (0, _classnames2['default'])(className, classes)\\n      }),\\n      _react2['default'].createElement(\\n        'h1',\\n        null,\\n        children\\n      )\\n    );\\n  };\\n\\n  return PageHeader;\\n}(_react2['default'].Component);\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('page-header', PageHeader);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/PageHeader.js\\n// module id = 488\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/PageHeader.js?\");\n\n/***/ },\n/* 489 */\n/*!*******************************************!*\\\n  !*** ./~/react-bootstrap/lib/PageItem.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _PagerItem = __webpack_require__(/*! ./PagerItem */ 490);\\n\\nvar _PagerItem2 = _interopRequireDefault(_PagerItem);\\n\\nvar _deprecationWarning = __webpack_require__(/*! ./utils/deprecationWarning */ 491);\\n\\nvar _deprecationWarning2 = _interopRequireDefault(_deprecationWarning);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nexports['default'] = _deprecationWarning2['default'].wrapper(_PagerItem2['default'], '`<PageItem>`', '`<Pager.Item>`');\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/PageItem.js\\n// module id = 489\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/PageItem.js?\");\n\n/***/ },\n/* 490 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/PagerItem.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _SafeAnchor = __webpack_require__(/*! ./SafeAnchor */ 366);\\n\\nvar _SafeAnchor2 = _interopRequireDefault(_SafeAnchor);\\n\\nvar _createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 357);\\n\\nvar _createChainedFunction2 = _interopRequireDefault(_createChainedFunction);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  disabled: _react2['default'].PropTypes.bool,\\n  previous: _react2['default'].PropTypes.bool,\\n  next: _react2['default'].PropTypes.bool,\\n  onClick: _react2['default'].PropTypes.func,\\n  onSelect: _react2['default'].PropTypes.func,\\n  eventKey: _react2['default'].PropTypes.any\\n};\\n\\nvar defaultProps = {\\n  disabled: false,\\n  previous: false,\\n  next: false\\n};\\n\\nvar PagerItem = function (_React$Component) {\\n  (0, _inherits3['default'])(PagerItem, _React$Component);\\n\\n  function PagerItem(props, context) {\\n    (0, _classCallCheck3['default'])(this, PagerItem);\\n\\n    var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props, context));\\n\\n    _this.handleSelect = _this.handleSelect.bind(_this);\\n    return _this;\\n  }\\n\\n  PagerItem.prototype.handleSelect = function handleSelect(e) {\\n    var _props = this.props,\\n        disabled = _props.disabled,\\n        onSelect = _props.onSelect,\\n        eventKey = _props.eventKey;\\n\\n\\n    if (onSelect || disabled) {\\n      e.preventDefault();\\n    }\\n\\n    if (disabled) {\\n      return;\\n    }\\n\\n    if (onSelect) {\\n      onSelect(eventKey, e);\\n    }\\n  };\\n\\n  PagerItem.prototype.render = function render() {\\n    var _props2 = this.props,\\n        disabled = _props2.disabled,\\n        previous = _props2.previous,\\n        next = _props2.next,\\n        onClick = _props2.onClick,\\n        className = _props2.className,\\n        style = _props2.style,\\n        props = (0, _objectWithoutProperties3['default'])(_props2, ['disabled', 'previous', 'next', 'onClick', 'className', 'style']);\\n\\n\\n    delete props.onSelect;\\n    delete props.eventKey;\\n\\n    return _react2['default'].createElement(\\n      'li',\\n      {\\n        className: (0, _classnames2['default'])(className, { disabled: disabled, previous: previous, next: next }),\\n        style: style\\n      },\\n      _react2['default'].createElement(_SafeAnchor2['default'], (0, _extends3['default'])({}, props, {\\n        disabled: disabled,\\n        onClick: (0, _createChainedFunction2['default'])(onClick, this.handleSelect)\\n      }))\\n    );\\n  };\\n\\n  return PagerItem;\\n}(_react2['default'].Component);\\n\\nPagerItem.propTypes = propTypes;\\nPagerItem.defaultProps = defaultProps;\\n\\nexports['default'] = PagerItem;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/PagerItem.js\\n// module id = 490\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/PagerItem.js?\");\n\n/***/ },\n/* 491 */\n/*!***********************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/deprecationWarning.js ***!\n  \\***********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _typeof2 = __webpack_require__(/*! babel-runtime/helpers/typeof */ 305);\\n\\nvar _typeof3 = _interopRequireDefault(_typeof2);\\n\\nexports._resetWarned = _resetWarned;\\n\\nvar _warning = __webpack_require__(/*! warning */ 41);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar warned = {};\\n\\nfunction deprecationWarning(oldname, newname, link) {\\n  var message = void 0;\\n\\n  if ((typeof oldname === 'undefined' ? 'undefined' : (0, _typeof3['default'])(oldname)) === 'object') {\\n    message = oldname.message;\\n  } else {\\n    message = oldname + ' is deprecated. Use ' + newname + ' instead.';\\n\\n    if (link) {\\n      message += '\\\\nYou can read more about it at ' + link;\\n    }\\n  }\\n\\n  if (warned[message]) {\\n    return;\\n  }\\n\\n  process.env.NODE_ENV !== 'production' ? (0, _warning2['default'])(false, message) : void 0;\\n  warned[message] = true;\\n}\\n\\ndeprecationWarning.wrapper = function (Component) {\\n  for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\\n    args[_key - 1] = arguments[_key];\\n  }\\n\\n  return function (_Component) {\\n    (0, _inherits3['default'])(DeprecatedComponent, _Component);\\n\\n    function DeprecatedComponent() {\\n      (0, _classCallCheck3['default'])(this, DeprecatedComponent);\\n      return (0, _possibleConstructorReturn3['default'])(this, _Component.apply(this, arguments));\\n    }\\n\\n    DeprecatedComponent.prototype.componentWillMount = function componentWillMount() {\\n      deprecationWarning.apply(undefined, args);\\n\\n      if (_Component.prototype.componentWillMount) {\\n        var _Component$prototype$;\\n\\n        for (var _len2 = arguments.length, methodArgs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\\n          methodArgs[_key2] = arguments[_key2];\\n        }\\n\\n        (_Component$prototype$ = _Component.prototype.componentWillMount).call.apply(_Component$prototype$, [this].concat(methodArgs));\\n      }\\n    };\\n\\n    return DeprecatedComponent;\\n  }(Component);\\n};\\n\\nexports['default'] = deprecationWarning;\\nfunction _resetWarned() {\\n  warned = {};\\n}\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/utils/deprecationWarning.js\\n// module id = 491\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/deprecationWarning.js?\");\n\n/***/ },\n/* 492 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Pager.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _PagerItem = __webpack_require__(/*! ./PagerItem */ 490);\\n\\nvar _PagerItem2 = _interopRequireDefault(_PagerItem);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 357);\\n\\nvar _createChainedFunction2 = _interopRequireDefault(_createChainedFunction);\\n\\nvar _ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 358);\\n\\nvar _ValidComponentChildren2 = _interopRequireDefault(_ValidComponentChildren);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  onSelect: _react2['default'].PropTypes.func\\n};\\n\\nvar Pager = function (_React$Component) {\\n  (0, _inherits3['default'])(Pager, _React$Component);\\n\\n  function Pager() {\\n    (0, _classCallCheck3['default'])(this, Pager);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Pager.prototype.render = function render() {\\n    var _props = this.props,\\n        onSelect = _props.onSelect,\\n        className = _props.className,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['onSelect', 'className', 'children']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement(\\n      'ul',\\n      (0, _extends3['default'])({}, elementProps, {\\n        className: (0, _classnames2['default'])(className, classes)\\n      }),\\n      _ValidComponentChildren2['default'].map(children, function (child) {\\n        return (0, _react.cloneElement)(child, {\\n          onSelect: (0, _createChainedFunction2['default'])(child.props.onSelect, onSelect)\\n        });\\n      })\\n    );\\n  };\\n\\n  return Pager;\\n}(_react2['default'].Component);\\n\\nPager.propTypes = propTypes;\\n\\nPager.Item = _PagerItem2['default'];\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('pager', Pager);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Pager.js\\n// module id = 492\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Pager.js?\");\n\n/***/ },\n/* 493 */\n/*!*********************************************!*\\\n  !*** ./~/react-bootstrap/lib/Pagination.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _PaginationButton = __webpack_require__(/*! ./PaginationButton */ 494);\\n\\nvar _PaginationButton2 = _interopRequireDefault(_PaginationButton);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  activePage: _react2['default'].PropTypes.number,\\n  items: _react2['default'].PropTypes.number,\\n  maxButtons: _react2['default'].PropTypes.number,\\n\\n  /**\\n   * When `true`, will display the first and the last button page\\n   */\\n  boundaryLinks: _react2['default'].PropTypes.bool,\\n\\n  /**\\n   * When `true`, will display the default node value ('&hellip;').\\n   * Otherwise, will display provided node (when specified).\\n   */\\n  ellipsis: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.bool, _react2['default'].PropTypes.node]),\\n\\n  /**\\n   * When `true`, will display the default node value ('&laquo;').\\n   * Otherwise, will display provided node (when specified).\\n   */\\n  first: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.bool, _react2['default'].PropTypes.node]),\\n\\n  /**\\n   * When `true`, will display the default node value ('&raquo;').\\n   * Otherwise, will display provided node (when specified).\\n   */\\n  last: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.bool, _react2['default'].PropTypes.node]),\\n\\n  /**\\n   * When `true`, will display the default node value ('&lsaquo;').\\n   * Otherwise, will display provided node (when specified).\\n   */\\n  prev: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.bool, _react2['default'].PropTypes.node]),\\n\\n  /**\\n   * When `true`, will display the default node value ('&rsaquo;').\\n   * Otherwise, will display provided node (when specified).\\n   */\\n  next: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.bool, _react2['default'].PropTypes.node]),\\n\\n  onSelect: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * You can use a custom element for the buttons\\n   */\\n  buttonComponentClass: _elementType2['default']\\n};\\n\\nvar defaultProps = {\\n  activePage: 1,\\n  items: 1,\\n  maxButtons: 0,\\n  first: false,\\n  last: false,\\n  prev: false,\\n  next: false,\\n  ellipsis: true,\\n  boundaryLinks: false\\n};\\n\\nvar Pagination = function (_React$Component) {\\n  (0, _inherits3['default'])(Pagination, _React$Component);\\n\\n  function Pagination() {\\n    (0, _classCallCheck3['default'])(this, Pagination);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Pagination.prototype.renderPageButtons = function renderPageButtons(activePage, items, maxButtons, boundaryLinks, ellipsis, buttonProps) {\\n    var pageButtons = [];\\n\\n    var startPage = void 0;\\n    var endPage = void 0;\\n    var hasHiddenPagesAfter = void 0;\\n\\n    if (maxButtons) {\\n      var hiddenPagesBefore = activePage - parseInt(maxButtons / 2, 10);\\n      startPage = Math.max(hiddenPagesBefore, 1);\\n      hasHiddenPagesAfter = items >= startPage + maxButtons;\\n\\n      if (!hasHiddenPagesAfter) {\\n        endPage = items;\\n        startPage = items - maxButtons + 1;\\n        if (startPage < 1) {\\n          startPage = 1;\\n        }\\n      } else {\\n        endPage = startPage + maxButtons - 1;\\n      }\\n    } else {\\n      startPage = 1;\\n      endPage = items;\\n    }\\n\\n    for (var pagenumber = startPage; pagenumber <= endPage; pagenumber++) {\\n      pageButtons.push(_react2['default'].createElement(\\n        _PaginationButton2['default'],\\n        (0, _extends3['default'])({}, buttonProps, {\\n          key: pagenumber,\\n          eventKey: pagenumber,\\n          active: pagenumber === activePage\\n        }),\\n        pagenumber\\n      ));\\n    }\\n\\n    if (boundaryLinks && ellipsis && startPage !== 1) {\\n      pageButtons.unshift(_react2['default'].createElement(\\n        _PaginationButton2['default'],\\n        {\\n          key: 'ellipsisFirst',\\n          disabled: true,\\n          componentClass: buttonProps.componentClass\\n        },\\n        _react2['default'].createElement(\\n          'span',\\n          { 'aria-label': 'More' },\\n          ellipsis === true ? '\\\\u2026' : ellipsis\\n        )\\n      ));\\n\\n      pageButtons.unshift(_react2['default'].createElement(\\n        _PaginationButton2['default'],\\n        (0, _extends3['default'])({}, buttonProps, {\\n          key: 1,\\n          eventKey: 1,\\n          active: false\\n        }),\\n        '1'\\n      ));\\n    }\\n\\n    if (maxButtons && hasHiddenPagesAfter && ellipsis) {\\n      pageButtons.push(_react2['default'].createElement(\\n        _PaginationButton2['default'],\\n        {\\n          key: 'ellipsis',\\n          disabled: true,\\n          componentClass: buttonProps.componentClass\\n        },\\n        _react2['default'].createElement(\\n          'span',\\n          { 'aria-label': 'More' },\\n          ellipsis === true ? '\\\\u2026' : ellipsis\\n        )\\n      ));\\n\\n      if (boundaryLinks && endPage !== items) {\\n        pageButtons.push(_react2['default'].createElement(\\n          _PaginationButton2['default'],\\n          (0, _extends3['default'])({}, buttonProps, {\\n            key: items,\\n            eventKey: items,\\n            active: false\\n          }),\\n          items\\n        ));\\n      }\\n    }\\n\\n    return pageButtons;\\n  };\\n\\n  Pagination.prototype.render = function render() {\\n    var _props = this.props,\\n        activePage = _props.activePage,\\n        items = _props.items,\\n        maxButtons = _props.maxButtons,\\n        boundaryLinks = _props.boundaryLinks,\\n        ellipsis = _props.ellipsis,\\n        first = _props.first,\\n        last = _props.last,\\n        prev = _props.prev,\\n        next = _props.next,\\n        onSelect = _props.onSelect,\\n        buttonComponentClass = _props.buttonComponentClass,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['activePage', 'items', 'maxButtons', 'boundaryLinks', 'ellipsis', 'first', 'last', 'prev', 'next', 'onSelect', 'buttonComponentClass', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    var buttonProps = {\\n      onSelect: onSelect,\\n      componentClass: buttonComponentClass\\n    };\\n\\n    return _react2['default'].createElement(\\n      'ul',\\n      (0, _extends3['default'])({}, elementProps, {\\n        className: (0, _classnames2['default'])(className, classes)\\n      }),\\n      first && _react2['default'].createElement(\\n        _PaginationButton2['default'],\\n        (0, _extends3['default'])({}, buttonProps, {\\n          eventKey: 1,\\n          disabled: activePage === 1\\n        }),\\n        _react2['default'].createElement(\\n          'span',\\n          { 'aria-label': 'First' },\\n          first === true ? '\\\\xAB' : first\\n        )\\n      ),\\n      prev && _react2['default'].createElement(\\n        _PaginationButton2['default'],\\n        (0, _extends3['default'])({}, buttonProps, {\\n          eventKey: activePage - 1,\\n          disabled: activePage === 1\\n        }),\\n        _react2['default'].createElement(\\n          'span',\\n          { 'aria-label': 'Previous' },\\n          prev === true ? '\\\\u2039' : prev\\n        )\\n      ),\\n      this.renderPageButtons(activePage, items, maxButtons, boundaryLinks, ellipsis, buttonProps),\\n      next && _react2['default'].createElement(\\n        _PaginationButton2['default'],\\n        (0, _extends3['default'])({}, buttonProps, {\\n          eventKey: activePage + 1,\\n          disabled: activePage >= items\\n        }),\\n        _react2['default'].createElement(\\n          'span',\\n          { 'aria-label': 'Next' },\\n          next === true ? '\\\\u203A' : next\\n        )\\n      ),\\n      last && _react2['default'].createElement(\\n        _PaginationButton2['default'],\\n        (0, _extends3['default'])({}, buttonProps, {\\n          eventKey: items,\\n          disabled: activePage >= items\\n        }),\\n        _react2['default'].createElement(\\n          'span',\\n          { 'aria-label': 'Last' },\\n          last === true ? '\\\\xBB' : last\\n        )\\n      )\\n    );\\n  };\\n\\n  return Pagination;\\n}(_react2['default'].Component);\\n\\nPagination.propTypes = propTypes;\\nPagination.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('pagination', Pagination);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Pagination.js\\n// module id = 493\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Pagination.js?\");\n\n/***/ },\n/* 494 */\n/*!***************************************************!*\\\n  !*** ./~/react-bootstrap/lib/PaginationButton.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _SafeAnchor = __webpack_require__(/*! ./SafeAnchor */ 366);\\n\\nvar _SafeAnchor2 = _interopRequireDefault(_SafeAnchor);\\n\\nvar _createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 357);\\n\\nvar _createChainedFunction2 = _interopRequireDefault(_createChainedFunction);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\n// TODO: This should be `<Pagination.Item>`.\\n\\n// TODO: This should use `componentClass` like other components.\\n\\nvar propTypes = {\\n  componentClass: _elementType2['default'],\\n  className: _react2['default'].PropTypes.string,\\n  eventKey: _react2['default'].PropTypes.any,\\n  onSelect: _react2['default'].PropTypes.func,\\n  disabled: _react2['default'].PropTypes.bool,\\n  active: _react2['default'].PropTypes.bool,\\n  onClick: _react2['default'].PropTypes.func\\n};\\n\\nvar defaultProps = {\\n  componentClass: _SafeAnchor2['default'],\\n  active: false,\\n  disabled: false\\n};\\n\\nvar PaginationButton = function (_React$Component) {\\n  (0, _inherits3['default'])(PaginationButton, _React$Component);\\n\\n  function PaginationButton(props, context) {\\n    (0, _classCallCheck3['default'])(this, PaginationButton);\\n\\n    var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props, context));\\n\\n    _this.handleClick = _this.handleClick.bind(_this);\\n    return _this;\\n  }\\n\\n  PaginationButton.prototype.handleClick = function handleClick(event) {\\n    var _props = this.props,\\n        disabled = _props.disabled,\\n        onSelect = _props.onSelect,\\n        eventKey = _props.eventKey;\\n\\n\\n    if (disabled) {\\n      return;\\n    }\\n\\n    if (onSelect) {\\n      onSelect(eventKey, event);\\n    }\\n  };\\n\\n  PaginationButton.prototype.render = function render() {\\n    var _props2 = this.props,\\n        Component = _props2.componentClass,\\n        active = _props2.active,\\n        disabled = _props2.disabled,\\n        onClick = _props2.onClick,\\n        className = _props2.className,\\n        style = _props2.style,\\n        props = (0, _objectWithoutProperties3['default'])(_props2, ['componentClass', 'active', 'disabled', 'onClick', 'className', 'style']);\\n\\n\\n    if (Component === _SafeAnchor2['default']) {\\n      // Assume that custom components want `eventKey`.\\n      delete props.eventKey;\\n    }\\n\\n    delete props.onSelect;\\n\\n    return _react2['default'].createElement(\\n      'li',\\n      {\\n        className: (0, _classnames2['default'])(className, { active: active, disabled: disabled }),\\n        style: style\\n      },\\n      _react2['default'].createElement(Component, (0, _extends3['default'])({}, props, {\\n        disabled: disabled,\\n        onClick: (0, _createChainedFunction2['default'])(onClick, this.handleClick)\\n      }))\\n    );\\n  };\\n\\n  return PaginationButton;\\n}(_react2['default'].Component);\\n\\nPaginationButton.propTypes = propTypes;\\nPaginationButton.defaultProps = defaultProps;\\n\\nexports['default'] = PaginationButton;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/PaginationButton.js\\n// module id = 494\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/PaginationButton.js?\");\n\n/***/ },\n/* 495 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Panel.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _values = __webpack_require__(/*! babel-runtime/core-js/object/values */ 360);\\n\\nvar _values2 = _interopRequireDefault(_values);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _Collapse = __webpack_require__(/*! ./Collapse */ 383);\\n\\nvar _Collapse2 = _interopRequireDefault(_Collapse);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _StyleConfig = __webpack_require__(/*! ./utils/StyleConfig */ 356);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\n// TODO: Use uncontrollable.\\n\\nvar propTypes = {\\n  collapsible: _react2['default'].PropTypes.bool,\\n  onSelect: _react2['default'].PropTypes.func,\\n  header: _react2['default'].PropTypes.node,\\n  id: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number]),\\n  footer: _react2['default'].PropTypes.node,\\n  defaultExpanded: _react2['default'].PropTypes.bool,\\n  expanded: _react2['default'].PropTypes.bool,\\n  eventKey: _react2['default'].PropTypes.any,\\n  headerRole: _react2['default'].PropTypes.string,\\n  panelRole: _react2['default'].PropTypes.string,\\n\\n  // From Collapse.\\n  onEnter: _react2['default'].PropTypes.func,\\n  onEntering: _react2['default'].PropTypes.func,\\n  onEntered: _react2['default'].PropTypes.func,\\n  onExit: _react2['default'].PropTypes.func,\\n  onExiting: _react2['default'].PropTypes.func,\\n  onExited: _react2['default'].PropTypes.func\\n};\\n\\nvar defaultProps = {\\n  defaultExpanded: false\\n};\\n\\nvar Panel = function (_React$Component) {\\n  (0, _inherits3['default'])(Panel, _React$Component);\\n\\n  function Panel(props, context) {\\n    (0, _classCallCheck3['default'])(this, Panel);\\n\\n    var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props, context));\\n\\n    _this.handleClickTitle = _this.handleClickTitle.bind(_this);\\n\\n    _this.state = {\\n      expanded: _this.props.defaultExpanded\\n    };\\n    return _this;\\n  }\\n\\n  Panel.prototype.handleClickTitle = function handleClickTitle(e) {\\n    // FIXME: What the heck? This API is horrible. This needs to go away!\\n    e.persist();\\n    e.selected = true;\\n\\n    if (this.props.onSelect) {\\n      this.props.onSelect(this.props.eventKey, e);\\n    } else {\\n      e.preventDefault();\\n    }\\n\\n    if (e.selected) {\\n      this.setState({ expanded: !this.state.expanded });\\n    }\\n  };\\n\\n  Panel.prototype.renderHeader = function renderHeader(collapsible, header, id, role, expanded, bsProps) {\\n    var titleClassName = (0, _bootstrapUtils.prefix)(bsProps, 'title');\\n\\n    if (!collapsible) {\\n      if (!_react2['default'].isValidElement(header)) {\\n        return header;\\n      }\\n\\n      return (0, _react.cloneElement)(header, {\\n        className: (0, _classnames2['default'])(header.props.className, titleClassName)\\n      });\\n    }\\n\\n    if (!_react2['default'].isValidElement(header)) {\\n      return _react2['default'].createElement(\\n        'h4',\\n        { role: 'presentation', className: titleClassName },\\n        this.renderAnchor(header, id, role, expanded)\\n      );\\n    }\\n\\n    return (0, _react.cloneElement)(header, {\\n      className: (0, _classnames2['default'])(header.props.className, titleClassName),\\n      children: this.renderAnchor(header.props.children, id, role, expanded)\\n    });\\n  };\\n\\n  Panel.prototype.renderAnchor = function renderAnchor(header, id, role, expanded) {\\n    return _react2['default'].createElement(\\n      'a',\\n      {\\n        role: role,\\n        href: id && '#' + id,\\n        onClick: this.handleClickTitle,\\n        'aria-controls': id,\\n        'aria-expanded': expanded,\\n        'aria-selected': expanded,\\n        className: expanded ? null : 'collapsed'\\n      },\\n      header\\n    );\\n  };\\n\\n  Panel.prototype.renderCollapsibleBody = function renderCollapsibleBody(id, expanded, role, children, bsProps, animationHooks) {\\n    return _react2['default'].createElement(\\n      _Collapse2['default'],\\n      (0, _extends3['default'])({ 'in': expanded }, animationHooks),\\n      _react2['default'].createElement(\\n        'div',\\n        {\\n          id: id,\\n          role: role,\\n          className: (0, _bootstrapUtils.prefix)(bsProps, 'collapse'),\\n          'aria-hidden': !expanded\\n        },\\n        this.renderBody(children, bsProps)\\n      )\\n    );\\n  };\\n\\n  Panel.prototype.renderBody = function renderBody(rawChildren, bsProps) {\\n    var children = [];\\n    var bodyChildren = [];\\n\\n    var bodyClassName = (0, _bootstrapUtils.prefix)(bsProps, 'body');\\n\\n    function maybeAddBody() {\\n      if (!bodyChildren.length) {\\n        return;\\n      }\\n\\n      // Derive the key from the index here, since we need to make one up.\\n      children.push(_react2['default'].createElement(\\n        'div',\\n        { key: children.length, className: bodyClassName },\\n        bodyChildren\\n      ));\\n\\n      bodyChildren = [];\\n    }\\n\\n    // Convert to array so we can re-use keys.\\n    _react2['default'].Children.toArray(rawChildren).forEach(function (child) {\\n      if (_react2['default'].isValidElement(child) && child.props.fill) {\\n        maybeAddBody();\\n\\n        // Remove the child's unknown `fill` prop.\\n        children.push((0, _react.cloneElement)(child, { fill: undefined }));\\n\\n        return;\\n      }\\n\\n      bodyChildren.push(child);\\n    });\\n\\n    maybeAddBody();\\n\\n    return children;\\n  };\\n\\n  Panel.prototype.render = function render() {\\n    var _props = this.props,\\n        collapsible = _props.collapsible,\\n        header = _props.header,\\n        id = _props.id,\\n        footer = _props.footer,\\n        propsExpanded = _props.expanded,\\n        headerRole = _props.headerRole,\\n        panelRole = _props.panelRole,\\n        className = _props.className,\\n        children = _props.children,\\n        onEnter = _props.onEnter,\\n        onEntering = _props.onEntering,\\n        onEntered = _props.onEntered,\\n        onExit = _props.onExit,\\n        onExiting = _props.onExiting,\\n        onExited = _props.onExited,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['collapsible', 'header', 'id', 'footer', 'expanded', 'headerRole', 'panelRole', 'className', 'children', 'onEnter', 'onEntering', 'onEntered', 'onExit', 'onExiting', 'onExited']);\\n\\n    var _splitBsPropsAndOmit = (0, _bootstrapUtils.splitBsPropsAndOmit)(props, ['defaultExpanded', 'eventKey', 'onSelect']),\\n        bsProps = _splitBsPropsAndOmit[0],\\n        elementProps = _splitBsPropsAndOmit[1];\\n\\n    var expanded = propsExpanded != null ? propsExpanded : this.state.expanded;\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement(\\n      'div',\\n      (0, _extends3['default'])({}, elementProps, {\\n        className: (0, _classnames2['default'])(className, classes),\\n        id: collapsible ? null : id\\n      }),\\n      header && _react2['default'].createElement(\\n        'div',\\n        { className: (0, _bootstrapUtils.prefix)(bsProps, 'heading') },\\n        this.renderHeader(collapsible, header, id, headerRole, expanded, bsProps)\\n      ),\\n      collapsible ? this.renderCollapsibleBody(id, expanded, panelRole, children, bsProps, { onEnter: onEnter, onEntering: onEntering, onEntered: onEntered, onExit: onExit, onExiting: onExiting, onExited: onExited }) : this.renderBody(children, bsProps),\\n      footer && _react2['default'].createElement(\\n        'div',\\n        { className: (0, _bootstrapUtils.prefix)(bsProps, 'footer') },\\n        footer\\n      )\\n    );\\n  };\\n\\n  return Panel;\\n}(_react2['default'].Component);\\n\\nPanel.propTypes = propTypes;\\nPanel.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('panel', (0, _bootstrapUtils.bsStyles)([].concat((0, _values2['default'])(_StyleConfig.State), [_StyleConfig.Style.DEFAULT, _StyleConfig.Style.PRIMARY]), _StyleConfig.Style.DEFAULT, Panel));\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Panel.js\\n// module id = 495\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Panel.js?\");\n\n/***/ },\n/* 496 */\n/*!******************************************!*\\\n  !*** ./~/react-bootstrap/lib/Popover.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends3 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends4 = _interopRequireDefault(_extends3);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _isRequiredForA11y = __webpack_require__(/*! react-prop-types/lib/isRequiredForA11y */ 401);\\n\\nvar _isRequiredForA11y2 = _interopRequireDefault(_isRequiredForA11y);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  /**\\n   * An html id attribute, necessary for accessibility\\n   * @type {string}\\n   * @required\\n   */\\n  id: (0, _isRequiredForA11y2['default'])(_react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number])),\\n\\n  /**\\n   * Sets the direction the Popover is positioned towards.\\n   */\\n  placement: _react2['default'].PropTypes.oneOf(['top', 'right', 'bottom', 'left']),\\n\\n  /**\\n   * The \\\"top\\\" position value for the Popover.\\n   */\\n  positionTop: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.number, _react2['default'].PropTypes.string]),\\n  /**\\n   * The \\\"left\\\" position value for the Popover.\\n   */\\n  positionLeft: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.number, _react2['default'].PropTypes.string]),\\n\\n  /**\\n   * The \\\"top\\\" position value for the Popover arrow.\\n   */\\n  arrowOffsetTop: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.number, _react2['default'].PropTypes.string]),\\n  /**\\n   * The \\\"left\\\" position value for the Popover arrow.\\n   */\\n  arrowOffsetLeft: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.number, _react2['default'].PropTypes.string]),\\n\\n  /**\\n   * Title content\\n   */\\n  title: _react2['default'].PropTypes.node\\n};\\n\\nvar defaultProps = {\\n  placement: 'right'\\n};\\n\\nvar Popover = function (_React$Component) {\\n  (0, _inherits3['default'])(Popover, _React$Component);\\n\\n  function Popover() {\\n    (0, _classCallCheck3['default'])(this, Popover);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Popover.prototype.render = function render() {\\n    var _extends2;\\n\\n    var _props = this.props,\\n        placement = _props.placement,\\n        positionTop = _props.positionTop,\\n        positionLeft = _props.positionLeft,\\n        arrowOffsetTop = _props.arrowOffsetTop,\\n        arrowOffsetLeft = _props.arrowOffsetLeft,\\n        title = _props.title,\\n        className = _props.className,\\n        style = _props.style,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['placement', 'positionTop', 'positionLeft', 'arrowOffsetTop', 'arrowOffsetLeft', 'title', 'className', 'style', 'children']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _extends4['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), (_extends2 = {}, _extends2[placement] = true, _extends2));\\n\\n    var outerStyle = (0, _extends4['default'])({\\n      display: 'block',\\n      top: positionTop,\\n      left: positionLeft\\n    }, style);\\n\\n    var arrowStyle = {\\n      top: arrowOffsetTop,\\n      left: arrowOffsetLeft\\n    };\\n\\n    return _react2['default'].createElement(\\n      'div',\\n      (0, _extends4['default'])({}, elementProps, {\\n        role: 'tooltip',\\n        className: (0, _classnames2['default'])(className, classes),\\n        style: outerStyle\\n      }),\\n      _react2['default'].createElement('div', { className: 'arrow', style: arrowStyle }),\\n      title && _react2['default'].createElement(\\n        'h3',\\n        { className: (0, _bootstrapUtils.prefix)(bsProps, 'title') },\\n        title\\n      ),\\n      _react2['default'].createElement(\\n        'div',\\n        { className: (0, _bootstrapUtils.prefix)(bsProps, 'content') },\\n        children\\n      )\\n    );\\n  };\\n\\n  return Popover;\\n}(_react2['default'].Component);\\n\\nPopover.propTypes = propTypes;\\nPopover.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('popover', Popover);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Popover.js\\n// module id = 496\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Popover.js?\");\n\n/***/ },\n/* 497 */\n/*!**********************************************!*\\\n  !*** ./~/react-bootstrap/lib/ProgressBar.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _values = __webpack_require__(/*! babel-runtime/core-js/object/values */ 360);\\n\\nvar _values2 = _interopRequireDefault(_values);\\n\\nvar _extends3 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends4 = _interopRequireDefault(_extends3);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _StyleConfig = __webpack_require__(/*! ./utils/StyleConfig */ 356);\\n\\nvar _ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 358);\\n\\nvar _ValidComponentChildren2 = _interopRequireDefault(_ValidComponentChildren);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar ROUND_PRECISION = 1000;\\n\\n/**\\n * Validate that children, if any, are instances of `<ProgressBar>`.\\n */\\nfunction onlyProgressBar(props, propName, componentName) {\\n  var children = props[propName];\\n  if (!children) {\\n    return null;\\n  }\\n\\n  var error = null;\\n\\n  _react2['default'].Children.forEach(children, function (child) {\\n    if (error) {\\n      return;\\n    }\\n\\n    if (child.type === ProgressBar) {\\n      // eslint-disable-line no-use-before-define\\n      return;\\n    }\\n\\n    var childIdentifier = _react2['default'].isValidElement(child) ? child.type.displayName || child.type.name || child.type : child;\\n    error = new Error('Children of ' + componentName + ' can contain only ProgressBar ' + ('components. Found ' + childIdentifier + '.'));\\n  });\\n\\n  return error;\\n}\\n\\nvar propTypes = {\\n  min: _react.PropTypes.number,\\n  now: _react.PropTypes.number,\\n  max: _react.PropTypes.number,\\n  label: _react.PropTypes.node,\\n  srOnly: _react.PropTypes.bool,\\n  striped: _react.PropTypes.bool,\\n  active: _react.PropTypes.bool,\\n  children: onlyProgressBar,\\n\\n  /**\\n   * @private\\n   */\\n  isChild: _react.PropTypes.bool\\n};\\n\\nvar defaultProps = {\\n  min: 0,\\n  max: 100,\\n  active: false,\\n  isChild: false,\\n  srOnly: false,\\n  striped: false\\n};\\n\\nfunction getPercentage(now, min, max) {\\n  var percentage = (now - min) / (max - min) * 100;\\n  return Math.round(percentage * ROUND_PRECISION) / ROUND_PRECISION;\\n}\\n\\nvar ProgressBar = function (_React$Component) {\\n  (0, _inherits3['default'])(ProgressBar, _React$Component);\\n\\n  function ProgressBar() {\\n    (0, _classCallCheck3['default'])(this, ProgressBar);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  ProgressBar.prototype.renderProgressBar = function renderProgressBar(_ref) {\\n    var _extends2;\\n\\n    var min = _ref.min,\\n        now = _ref.now,\\n        max = _ref.max,\\n        label = _ref.label,\\n        srOnly = _ref.srOnly,\\n        striped = _ref.striped,\\n        active = _ref.active,\\n        className = _ref.className,\\n        style = _ref.style,\\n        props = (0, _objectWithoutProperties3['default'])(_ref, ['min', 'now', 'max', 'label', 'srOnly', 'striped', 'active', 'className', 'style']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _extends4['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), (_extends2 = {\\n      active: active\\n    }, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'striped')] = active || striped, _extends2));\\n\\n    return _react2['default'].createElement(\\n      'div',\\n      (0, _extends4['default'])({}, elementProps, {\\n        role: 'progressbar',\\n        className: (0, _classnames2['default'])(className, classes),\\n        style: (0, _extends4['default'])({ width: getPercentage(now, min, max) + '%' }, style),\\n        'aria-valuenow': now,\\n        'aria-valuemin': min,\\n        'aria-valuemax': max\\n      }),\\n      srOnly ? _react2['default'].createElement(\\n        'span',\\n        { className: 'sr-only' },\\n        label\\n      ) : label\\n    );\\n  };\\n\\n  ProgressBar.prototype.render = function render() {\\n    var _props = this.props,\\n        isChild = _props.isChild,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['isChild']);\\n\\n\\n    if (isChild) {\\n      return this.renderProgressBar(props);\\n    }\\n\\n    var min = props.min,\\n        now = props.now,\\n        max = props.max,\\n        label = props.label,\\n        srOnly = props.srOnly,\\n        striped = props.striped,\\n        active = props.active,\\n        bsClass = props.bsClass,\\n        bsStyle = props.bsStyle,\\n        className = props.className,\\n        children = props.children,\\n        wrapperProps = (0, _objectWithoutProperties3['default'])(props, ['min', 'now', 'max', 'label', 'srOnly', 'striped', 'active', 'bsClass', 'bsStyle', 'className', 'children']);\\n\\n\\n    return _react2['default'].createElement(\\n      'div',\\n      (0, _extends4['default'])({}, wrapperProps, {\\n        className: (0, _classnames2['default'])(className, 'progress')\\n      }),\\n      children ? _ValidComponentChildren2['default'].map(children, function (child) {\\n        return (0, _react.cloneElement)(child, { isChild: true });\\n      }) : this.renderProgressBar({\\n        min: min, now: now, max: max, label: label, srOnly: srOnly, striped: striped, active: active, bsClass: bsClass, bsStyle: bsStyle\\n      })\\n    );\\n  };\\n\\n  return ProgressBar;\\n}(_react2['default'].Component);\\n\\nProgressBar.propTypes = propTypes;\\nProgressBar.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('progress-bar', (0, _bootstrapUtils.bsStyles)((0, _values2['default'])(_StyleConfig.State), ProgressBar));\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/ProgressBar.js\\n// module id = 497\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ProgressBar.js?\");\n\n/***/ },\n/* 498 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Radio.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _warning = __webpack_require__(/*! warning */ 41);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  inline: _react2['default'].PropTypes.bool,\\n  disabled: _react2['default'].PropTypes.bool,\\n  /**\\n   * Only valid if `inline` is not set.\\n   */\\n  validationState: _react2['default'].PropTypes.oneOf(['success', 'warning', 'error', null]),\\n  /**\\n   * Attaches a ref to the `<input>` element. Only functions can be used here.\\n   *\\n   * ```js\\n   * <Radio inputRef={ref => { this.input = ref; }} />\\n   * ```\\n   */\\n  inputRef: _react2['default'].PropTypes.func\\n};\\n\\nvar defaultProps = {\\n  inline: false,\\n  disabled: false\\n};\\n\\nvar Radio = function (_React$Component) {\\n  (0, _inherits3['default'])(Radio, _React$Component);\\n\\n  function Radio() {\\n    (0, _classCallCheck3['default'])(this, Radio);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Radio.prototype.render = function render() {\\n    var _props = this.props,\\n        inline = _props.inline,\\n        disabled = _props.disabled,\\n        validationState = _props.validationState,\\n        inputRef = _props.inputRef,\\n        className = _props.className,\\n        style = _props.style,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['inline', 'disabled', 'validationState', 'inputRef', 'className', 'style', 'children']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var input = _react2['default'].createElement('input', (0, _extends3['default'])({}, elementProps, {\\n      ref: inputRef,\\n      type: 'radio',\\n      disabled: disabled\\n    }));\\n\\n    if (inline) {\\n      var _classes2;\\n\\n      var _classes = (_classes2 = {}, _classes2[(0, _bootstrapUtils.prefix)(bsProps, 'inline')] = true, _classes2.disabled = disabled, _classes2);\\n\\n      // Use a warning here instead of in propTypes to get better-looking\\n      // generated documentation.\\n      process.env.NODE_ENV !== 'production' ? (0, _warning2['default'])(!validationState, '`validationState` is ignored on `<Radio inline>`. To display ' + 'validation state on an inline radio, set `validationState` on a ' + 'parent `<FormGroup>` or other element instead.') : void 0;\\n\\n      return _react2['default'].createElement(\\n        'label',\\n        { className: (0, _classnames2['default'])(className, _classes), style: style },\\n        input,\\n        children\\n      );\\n    }\\n\\n    var classes = (0, _extends3['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), {\\n      disabled: disabled\\n    });\\n    if (validationState) {\\n      classes['has-' + validationState] = true;\\n    }\\n\\n    return _react2['default'].createElement(\\n      'div',\\n      { className: (0, _classnames2['default'])(className, classes), style: style },\\n      _react2['default'].createElement(\\n        'label',\\n        null,\\n        input,\\n        children\\n      )\\n    );\\n  };\\n\\n  return Radio;\\n}(_react2['default'].Component);\\n\\nRadio.propTypes = propTypes;\\nRadio.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('radio', Radio);\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Radio.js\\n// module id = 498\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Radio.js?\");\n\n/***/ },\n/* 499 */\n/*!**************************************************!*\\\n  !*** ./~/react-bootstrap/lib/ResponsiveEmbed.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends3 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends4 = _interopRequireDefault(_extends3);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _warning = __webpack_require__(/*! warning */ 41);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\n// TODO: This should probably take a single `aspectRatio` prop.\\n\\nvar propTypes = {\\n  /**\\n   * This component requires a single child element\\n   */\\n  children: _react.PropTypes.element.isRequired,\\n  /**\\n   * 16by9 aspect ratio\\n   */\\n  a16by9: _react.PropTypes.bool,\\n  /**\\n   * 4by3 aspect ratio\\n   */\\n  a4by3: _react.PropTypes.bool\\n};\\n\\nvar defaultProps = {\\n  a16by9: false,\\n  a4by3: false\\n};\\n\\nvar ResponsiveEmbed = function (_React$Component) {\\n  (0, _inherits3['default'])(ResponsiveEmbed, _React$Component);\\n\\n  function ResponsiveEmbed() {\\n    (0, _classCallCheck3['default'])(this, ResponsiveEmbed);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  ResponsiveEmbed.prototype.render = function render() {\\n    var _extends2;\\n\\n    var _props = this.props,\\n        a16by9 = _props.a16by9,\\n        a4by3 = _props.a4by3,\\n        className = _props.className,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['a16by9', 'a4by3', 'className', 'children']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    process.env.NODE_ENV !== 'production' ? (0, _warning2['default'])(a16by9 || a4by3, 'Either `a16by9` or `a4by3` must be set.') : void 0;\\n    process.env.NODE_ENV !== 'production' ? (0, _warning2['default'])(!(a16by9 && a4by3), 'Only one of `a16by9` or `a4by3` can be set.') : void 0;\\n\\n    var classes = (0, _extends4['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), (_extends2 = {}, _extends2[(0, _bootstrapUtils.prefix)(bsProps, '16by9')] = a16by9, _extends2[(0, _bootstrapUtils.prefix)(bsProps, '4by3')] = a4by3, _extends2));\\n\\n    return _react2['default'].createElement(\\n      'div',\\n      { className: (0, _classnames2['default'])(classes) },\\n      (0, _react.cloneElement)(children, (0, _extends4['default'])({}, elementProps, {\\n        className: (0, _classnames2['default'])(className, (0, _bootstrapUtils.prefix)(bsProps, 'item'))\\n      }))\\n    );\\n  };\\n\\n  return ResponsiveEmbed;\\n}(_react2['default'].Component);\\n\\nResponsiveEmbed.propTypes = propTypes;\\nResponsiveEmbed.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('embed-responsive', ResponsiveEmbed);\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/ResponsiveEmbed.js\\n// module id = 499\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ResponsiveEmbed.js?\");\n\n/***/ },\n/* 500 */\n/*!**************************************!*\\\n  !*** ./~/react-bootstrap/lib/Row.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  componentClass: _elementType2['default']\\n};\\n\\nvar defaultProps = {\\n  componentClass: 'div'\\n};\\n\\nvar Row = function (_React$Component) {\\n  (0, _inherits3['default'])(Row, _React$Component);\\n\\n  function Row() {\\n    (0, _classCallCheck3['default'])(this, Row);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Row.prototype.render = function render() {\\n    var _props = this.props,\\n        Component = _props.componentClass,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['componentClass', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement(Component, (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return Row;\\n}(_react2['default'].Component);\\n\\nRow.propTypes = propTypes;\\nRow.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('row', Row);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Row.js\\n// module id = 500\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Row.js?\");\n\n/***/ },\n/* 501 */\n/*!**********************************************!*\\\n  !*** ./~/react-bootstrap/lib/SplitButton.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _Button = __webpack_require__(/*! ./Button */ 369);\\n\\nvar _Button2 = _interopRequireDefault(_Button);\\n\\nvar _Dropdown = __webpack_require__(/*! ./Dropdown */ 396);\\n\\nvar _Dropdown2 = _interopRequireDefault(_Dropdown);\\n\\nvar _SplitToggle = __webpack_require__(/*! ./SplitToggle */ 502);\\n\\nvar _SplitToggle2 = _interopRequireDefault(_SplitToggle);\\n\\nvar _splitComponentProps2 = __webpack_require__(/*! ./utils/splitComponentProps */ 422);\\n\\nvar _splitComponentProps3 = _interopRequireDefault(_splitComponentProps2);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = (0, _extends3['default'])({}, _Dropdown2['default'].propTypes, {\\n\\n  // Toggle props.\\n  bsStyle: _react2['default'].PropTypes.string,\\n  bsSize: _react2['default'].PropTypes.string,\\n  href: _react2['default'].PropTypes.string,\\n  onClick: _react2['default'].PropTypes.func,\\n  /**\\n   * The content of the split button.\\n   */\\n  title: _react2['default'].PropTypes.node.isRequired,\\n  /**\\n   * Accessible label for the toggle; the value of `title` if not specified.\\n   */\\n  toggleLabel: _react2['default'].PropTypes.string,\\n\\n  // Override generated docs from <Dropdown>.\\n  /**\\n   * @private\\n   */\\n  children: _react2['default'].PropTypes.node\\n});\\n\\nvar SplitButton = function (_React$Component) {\\n  (0, _inherits3['default'])(SplitButton, _React$Component);\\n\\n  function SplitButton() {\\n    (0, _classCallCheck3['default'])(this, SplitButton);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  SplitButton.prototype.render = function render() {\\n    var _props = this.props,\\n        bsSize = _props.bsSize,\\n        bsStyle = _props.bsStyle,\\n        title = _props.title,\\n        toggleLabel = _props.toggleLabel,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['bsSize', 'bsStyle', 'title', 'toggleLabel', 'children']);\\n\\n    var _splitComponentProps = (0, _splitComponentProps3['default'])(props, _Dropdown2['default'].ControlledComponent),\\n        dropdownProps = _splitComponentProps[0],\\n        buttonProps = _splitComponentProps[1];\\n\\n    return _react2['default'].createElement(\\n      _Dropdown2['default'],\\n      (0, _extends3['default'])({}, dropdownProps, {\\n        bsSize: bsSize,\\n        bsStyle: bsStyle\\n      }),\\n      _react2['default'].createElement(\\n        _Button2['default'],\\n        (0, _extends3['default'])({}, buttonProps, {\\n          disabled: props.disabled,\\n          bsSize: bsSize,\\n          bsStyle: bsStyle\\n        }),\\n        title\\n      ),\\n      _react2['default'].createElement(_SplitToggle2['default'], {\\n        'aria-label': toggleLabel || title,\\n        bsSize: bsSize,\\n        bsStyle: bsStyle\\n      }),\\n      _react2['default'].createElement(\\n        _Dropdown2['default'].Menu,\\n        null,\\n        children\\n      )\\n    );\\n  };\\n\\n  return SplitButton;\\n}(_react2['default'].Component);\\n\\nSplitButton.propTypes = propTypes;\\n\\nSplitButton.Toggle = _SplitToggle2['default'];\\n\\nexports['default'] = SplitButton;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/SplitButton.js\\n// module id = 501\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/SplitButton.js?\");\n\n/***/ },\n/* 502 */\n/*!**********************************************!*\\\n  !*** ./~/react-bootstrap/lib/SplitToggle.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _DropdownToggle = __webpack_require__(/*! ./DropdownToggle */ 419);\\n\\nvar _DropdownToggle2 = _interopRequireDefault(_DropdownToggle);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar SplitToggle = function (_React$Component) {\\n  (0, _inherits3['default'])(SplitToggle, _React$Component);\\n\\n  function SplitToggle() {\\n    (0, _classCallCheck3['default'])(this, SplitToggle);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  SplitToggle.prototype.render = function render() {\\n    return _react2['default'].createElement(_DropdownToggle2['default'], (0, _extends3['default'])({}, this.props, {\\n      useAnchor: false,\\n      noCaret: false\\n    }));\\n  };\\n\\n  return SplitToggle;\\n}(_react2['default'].Component);\\n\\nSplitToggle.defaultProps = _DropdownToggle2['default'].defaultProps;\\n\\nexports['default'] = SplitToggle;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/SplitToggle.js\\n// module id = 502\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/SplitToggle.js?\");\n\n/***/ },\n/* 503 */\n/*!**************************************!*\\\n  !*** ./~/react-bootstrap/lib/Tab.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _TabContainer = __webpack_require__(/*! ./TabContainer */ 504);\\n\\nvar _TabContainer2 = _interopRequireDefault(_TabContainer);\\n\\nvar _TabContent = __webpack_require__(/*! ./TabContent */ 505);\\n\\nvar _TabContent2 = _interopRequireDefault(_TabContent);\\n\\nvar _TabPane = __webpack_require__(/*! ./TabPane */ 506);\\n\\nvar _TabPane2 = _interopRequireDefault(_TabPane);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = (0, _extends3['default'])({}, _TabPane2['default'].propTypes, {\\n\\n  disabled: _react2['default'].PropTypes.bool,\\n\\n  title: _react2['default'].PropTypes.node,\\n\\n  /**\\n   * tabClassName is used as className for the associated NavItem\\n   */\\n  tabClassName: _react2['default'].PropTypes.string\\n});\\n\\nvar Tab = function (_React$Component) {\\n  (0, _inherits3['default'])(Tab, _React$Component);\\n\\n  function Tab() {\\n    (0, _classCallCheck3['default'])(this, Tab);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Tab.prototype.render = function render() {\\n    var props = (0, _extends3['default'])({}, this.props);\\n\\n    // These props are for the parent `<Tabs>` rather than the `<TabPane>`.\\n    delete props.title;\\n    delete props.disabled;\\n    delete props.tabClassName;\\n\\n    return _react2['default'].createElement(_TabPane2['default'], props);\\n  };\\n\\n  return Tab;\\n}(_react2['default'].Component);\\n\\nTab.propTypes = propTypes;\\n\\nTab.Container = _TabContainer2['default'];\\nTab.Content = _TabContent2['default'];\\nTab.Pane = _TabPane2['default'];\\n\\nexports['default'] = Tab;\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Tab.js\\n// module id = 503\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Tab.js?\");\n\n/***/ },\n/* 504 */\n/*!***********************************************!*\\\n  !*** ./~/react-bootstrap/lib/TabContainer.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _uncontrollable = __webpack_require__(/*! uncontrollable */ 402);\\n\\nvar _uncontrollable2 = _interopRequireDefault(_uncontrollable);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar TAB = 'tab';\\nvar PANE = 'pane';\\n\\nvar idPropType = _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.number]);\\n\\nvar propTypes = {\\n  /**\\n   * HTML id attribute, required if no `generateChildId` prop\\n   * is specified.\\n   */\\n  id: function id(props) {\\n    var error = null;\\n\\n    if (!props.generateChildId) {\\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\\n        args[_key - 1] = arguments[_key];\\n      }\\n\\n      error = idPropType.apply(undefined, [props].concat(args));\\n\\n      if (!error && !props.id) {\\n        error = new Error('In order to properly initialize Tabs in a way that is accessible ' + 'to assistive technologies (such as screen readers) an `id` or a ' + '`generateChildId` prop to TabContainer is required');\\n      }\\n    }\\n\\n    return error;\\n  },\\n\\n\\n  /**\\n   * A function that takes an `eventKey` and `type` and returns a unique id for\\n   * child tab `<NavItem>`s and `<TabPane>`s. The function _must_ be a pure\\n   * function, meaning it should always return the _same_ id for the same set\\n   * of inputs. The default value requires that an `id` to be set for the\\n   * `<TabContainer>`.\\n   *\\n   * The `type` argument will either be `\\\"tab\\\"` or `\\\"pane\\\"`.\\n   *\\n   * @defaultValue (eventKey, type) => `${this.props.id}-${type}-${key}`\\n   */\\n  generateChildId: _react.PropTypes.func,\\n\\n  /**\\n   * A callback fired when a tab is selected.\\n   *\\n   * @controllable activeKey\\n   */\\n  onSelect: _react.PropTypes.func,\\n\\n  /**\\n   * The `eventKey` of the currently active tab.\\n   *\\n   * @controllable onSelect\\n   */\\n  activeKey: _react.PropTypes.any\\n};\\n\\nvar childContextTypes = {\\n  $bs_tabContainer: _react2['default'].PropTypes.shape({\\n    activeKey: _react.PropTypes.any,\\n    onSelect: _react.PropTypes.func.isRequired,\\n    getTabId: _react.PropTypes.func.isRequired,\\n    getPaneId: _react.PropTypes.func.isRequired\\n  })\\n};\\n\\nvar TabContainer = function (_React$Component) {\\n  (0, _inherits3['default'])(TabContainer, _React$Component);\\n\\n  function TabContainer() {\\n    (0, _classCallCheck3['default'])(this, TabContainer);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  TabContainer.prototype.getChildContext = function getChildContext() {\\n    var _props = this.props,\\n        activeKey = _props.activeKey,\\n        onSelect = _props.onSelect,\\n        generateChildId = _props.generateChildId,\\n        id = _props.id;\\n\\n\\n    var getId = generateChildId || function (key, type) {\\n      return id ? id + '-' + type + '-' + key : null;\\n    };\\n\\n    return {\\n      $bs_tabContainer: {\\n        activeKey: activeKey,\\n        onSelect: onSelect,\\n        getTabId: function getTabId(key) {\\n          return getId(key, TAB);\\n        },\\n        getPaneId: function getPaneId(key) {\\n          return getId(key, PANE);\\n        }\\n      }\\n    };\\n  };\\n\\n  TabContainer.prototype.render = function render() {\\n    var _props2 = this.props,\\n        children = _props2.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props2, ['children']);\\n\\n\\n    delete props.generateChildId;\\n    delete props.onSelect;\\n    delete props.activeKey;\\n\\n    return _react2['default'].cloneElement(_react2['default'].Children.only(children), props);\\n  };\\n\\n  return TabContainer;\\n}(_react2['default'].Component);\\n\\nTabContainer.propTypes = propTypes;\\nTabContainer.childContextTypes = childContextTypes;\\n\\nexports['default'] = (0, _uncontrollable2['default'])(TabContainer, { activeKey: 'onSelect' });\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/TabContainer.js\\n// module id = 504\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/TabContainer.js?\");\n\n/***/ },\n/* 505 */\n/*!*********************************************!*\\\n  !*** ./~/react-bootstrap/lib/TabContent.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  componentClass: _elementType2['default'],\\n\\n  /**\\n   * Sets a default animation strategy for all children `<TabPane>`s. Use\\n   * `false` to disable, `true` to enable the default `<Fade>` animation or any\\n   * `<Transition>` component.\\n   */\\n  animation: _react.PropTypes.oneOfType([_react.PropTypes.bool, _elementType2['default']]),\\n\\n  /**\\n   * Unmount tabs (remove it from the DOM) when they are no longer visible\\n   */\\n  unmountOnExit: _react.PropTypes.bool\\n};\\n\\nvar defaultProps = {\\n  componentClass: 'div',\\n  animation: true,\\n  unmountOnExit: false\\n};\\n\\nvar contextTypes = {\\n  $bs_tabContainer: _react.PropTypes.shape({\\n    activeKey: _react.PropTypes.any\\n  })\\n};\\n\\nvar childContextTypes = {\\n  $bs_tabContent: _react.PropTypes.shape({\\n    bsClass: _react.PropTypes.string,\\n    animation: _react.PropTypes.oneOfType([_react.PropTypes.bool, _elementType2['default']]),\\n    activeKey: _react.PropTypes.any,\\n    unmountOnExit: _react.PropTypes.bool,\\n    onPaneEnter: _react.PropTypes.func.isRequired,\\n    onPaneExited: _react.PropTypes.func.isRequired,\\n    exiting: _react.PropTypes.bool.isRequired\\n  })\\n};\\n\\nvar TabContent = function (_React$Component) {\\n  (0, _inherits3['default'])(TabContent, _React$Component);\\n\\n  function TabContent(props, context) {\\n    (0, _classCallCheck3['default'])(this, TabContent);\\n\\n    var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props, context));\\n\\n    _this.handlePaneEnter = _this.handlePaneEnter.bind(_this);\\n    _this.handlePaneExited = _this.handlePaneExited.bind(_this);\\n\\n    // Active entries in state will be `null` unless `animation` is set. Need\\n    // to track active child in case keys swap and the active child changes\\n    // but the active key does not.\\n    _this.state = {\\n      activeKey: null,\\n      activeChild: null\\n    };\\n    return _this;\\n  }\\n\\n  TabContent.prototype.getChildContext = function getChildContext() {\\n    var _props = this.props,\\n        bsClass = _props.bsClass,\\n        animation = _props.animation,\\n        unmountOnExit = _props.unmountOnExit;\\n\\n\\n    var stateActiveKey = this.state.activeKey;\\n    var containerActiveKey = this.getContainerActiveKey();\\n\\n    var activeKey = stateActiveKey != null ? stateActiveKey : containerActiveKey;\\n    var exiting = stateActiveKey != null && stateActiveKey !== containerActiveKey;\\n\\n    return {\\n      $bs_tabContent: {\\n        bsClass: bsClass,\\n        animation: animation,\\n        activeKey: activeKey,\\n        unmountOnExit: unmountOnExit,\\n        onPaneEnter: this.handlePaneEnter,\\n        onPaneExited: this.handlePaneExited,\\n        exiting: exiting\\n      }\\n    };\\n  };\\n\\n  TabContent.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\\n    if (!nextProps.animation && this.state.activeChild) {\\n      this.setState({ activeKey: null, activeChild: null });\\n    }\\n  };\\n\\n  TabContent.prototype.componentWillUnmount = function componentWillUnmount() {\\n    this.isUnmounted = true;\\n  };\\n\\n  TabContent.prototype.handlePaneEnter = function handlePaneEnter(child, childKey) {\\n    if (!this.props.animation) {\\n      return false;\\n    }\\n\\n    // It's possible that this child should be transitioning out.\\n    if (childKey !== this.getContainerActiveKey()) {\\n      return false;\\n    }\\n\\n    this.setState({\\n      activeKey: childKey,\\n      activeChild: child\\n    });\\n\\n    return true;\\n  };\\n\\n  TabContent.prototype.handlePaneExited = function handlePaneExited(child) {\\n    // This might happen as everything is unmounting.\\n    if (this.isUnmounted) {\\n      return;\\n    }\\n\\n    this.setState(function (_ref) {\\n      var activeChild = _ref.activeChild;\\n\\n      if (activeChild !== child) {\\n        return null;\\n      }\\n\\n      return {\\n        activeKey: null,\\n        activeChild: null\\n      };\\n    });\\n  };\\n\\n  TabContent.prototype.getContainerActiveKey = function getContainerActiveKey() {\\n    var tabContainer = this.context.$bs_tabContainer;\\n    return tabContainer && tabContainer.activeKey;\\n  };\\n\\n  TabContent.prototype.render = function render() {\\n    var _props2 = this.props,\\n        Component = _props2.componentClass,\\n        className = _props2.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props2, ['componentClass', 'className']);\\n\\n    var _splitBsPropsAndOmit = (0, _bootstrapUtils.splitBsPropsAndOmit)(props, ['animation', 'unmountOnExit']),\\n        bsProps = _splitBsPropsAndOmit[0],\\n        elementProps = _splitBsPropsAndOmit[1];\\n\\n    return _react2['default'].createElement(Component, (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, (0, _bootstrapUtils.prefix)(bsProps, 'content'))\\n    }));\\n  };\\n\\n  return TabContent;\\n}(_react2['default'].Component);\\n\\nTabContent.propTypes = propTypes;\\nTabContent.defaultProps = defaultProps;\\nTabContent.contextTypes = contextTypes;\\nTabContent.childContextTypes = childContextTypes;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('tab', TabContent);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/TabContent.js\\n// module id = 505\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/TabContent.js?\");\n\n/***/ },\n/* 506 */\n/*!******************************************!*\\\n  !*** ./~/react-bootstrap/lib/TabPane.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _elementType = __webpack_require__(/*! react-prop-types/lib/elementType */ 367);\\n\\nvar _elementType2 = _interopRequireDefault(_elementType);\\n\\nvar _warning = __webpack_require__(/*! warning */ 41);\\n\\nvar _warning2 = _interopRequireDefault(_warning);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 357);\\n\\nvar _createChainedFunction2 = _interopRequireDefault(_createChainedFunction);\\n\\nvar _Fade = __webpack_require__(/*! ./Fade */ 423);\\n\\nvar _Fade2 = _interopRequireDefault(_Fade);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  /**\\n   * Uniquely identify the `<TabPane>` among its siblings.\\n   */\\n  eventKey: _react.PropTypes.any,\\n\\n  /**\\n   * Use animation when showing or hiding `<TabPane>`s. Use `false` to disable,\\n   * `true` to enable the default `<Fade>` animation or any `<Transition>`\\n   * component.\\n   */\\n  animation: _react.PropTypes.oneOfType([_react.PropTypes.bool, _elementType2['default']]),\\n\\n  /** @private **/\\n  id: _react.PropTypes.string,\\n\\n  /** @private **/\\n  'aria-labelledby': _react.PropTypes.string,\\n\\n  /**\\n   * If not explicitly specified and rendered in the context of a\\n   * `<TabContent>`, the `bsClass` of the `<TabContent>` suffixed by `-pane`.\\n   * If otherwise not explicitly specified, `tab-pane`.\\n   */\\n  bsClass: _react2['default'].PropTypes.string,\\n\\n  /**\\n   * Transition onEnter callback when animation is not `false`\\n   */\\n  onEnter: _react.PropTypes.func,\\n\\n  /**\\n   * Transition onEntering callback when animation is not `false`\\n   */\\n  onEntering: _react.PropTypes.func,\\n\\n  /**\\n   * Transition onEntered callback when animation is not `false`\\n   */\\n  onEntered: _react.PropTypes.func,\\n\\n  /**\\n   * Transition onExit callback when animation is not `false`\\n   */\\n  onExit: _react.PropTypes.func,\\n\\n  /**\\n   * Transition onExiting callback when animation is not `false`\\n   */\\n  onExiting: _react.PropTypes.func,\\n\\n  /**\\n   * Transition onExited callback when animation is not `false`\\n   */\\n  onExited: _react.PropTypes.func,\\n\\n  /**\\n   * Unmount the tab (remove it from the DOM) when it is no longer visible\\n   */\\n  unmountOnExit: _react.PropTypes.bool\\n};\\n\\nvar contextTypes = {\\n  $bs_tabContainer: _react.PropTypes.shape({\\n    getId: _react.PropTypes.func,\\n    unmountOnExit: _react.PropTypes.bool\\n  }),\\n  $bs_tabContent: _react.PropTypes.shape({\\n    bsClass: _react.PropTypes.string,\\n    animation: _react.PropTypes.oneOfType([_react.PropTypes.bool, _elementType2['default']]),\\n    activeKey: _react.PropTypes.any,\\n    unmountOnExit: _react.PropTypes.bool,\\n    onPaneEnter: _react.PropTypes.func.isRequired,\\n    onPaneExited: _react.PropTypes.func.isRequired,\\n    exiting: _react.PropTypes.bool.isRequired\\n  })\\n};\\n\\n/**\\n * We override the `<TabContainer>` context so `<Nav>`s in `<TabPane>`s don't\\n * conflict with the top level one.\\n */\\nvar childContextTypes = {\\n  $bs_tabContainer: _react.PropTypes.oneOf([null])\\n};\\n\\nvar TabPane = function (_React$Component) {\\n  (0, _inherits3['default'])(TabPane, _React$Component);\\n\\n  function TabPane(props, context) {\\n    (0, _classCallCheck3['default'])(this, TabPane);\\n\\n    var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props, context));\\n\\n    _this.handleEnter = _this.handleEnter.bind(_this);\\n    _this.handleExited = _this.handleExited.bind(_this);\\n\\n    _this['in'] = false;\\n    return _this;\\n  }\\n\\n  TabPane.prototype.getChildContext = function getChildContext() {\\n    return {\\n      $bs_tabContainer: null\\n    };\\n  };\\n\\n  TabPane.prototype.componentDidMount = function componentDidMount() {\\n    if (this.shouldBeIn()) {\\n      // In lieu of the action event firing.\\n      this.handleEnter();\\n    }\\n  };\\n\\n  TabPane.prototype.componentDidUpdate = function componentDidUpdate() {\\n    if (this['in']) {\\n      if (!this.shouldBeIn()) {\\n        // We shouldn't be active any more. Notify the parent.\\n        this.handleExited();\\n      }\\n    } else if (this.shouldBeIn()) {\\n      // We are the active child. Notify the parent.\\n      this.handleEnter();\\n    }\\n  };\\n\\n  TabPane.prototype.componentWillUnmount = function componentWillUnmount() {\\n    if (this['in']) {\\n      // In lieu of the action event firing.\\n      this.handleExited();\\n    }\\n  };\\n\\n  TabPane.prototype.handleEnter = function handleEnter() {\\n    var tabContent = this.context.$bs_tabContent;\\n    if (!tabContent) {\\n      return;\\n    }\\n\\n    this['in'] = tabContent.onPaneEnter(this, this.props.eventKey);\\n  };\\n\\n  TabPane.prototype.handleExited = function handleExited() {\\n    var tabContent = this.context.$bs_tabContent;\\n    if (!tabContent) {\\n      return;\\n    }\\n\\n    tabContent.onPaneExited(this);\\n    this['in'] = false;\\n  };\\n\\n  TabPane.prototype.getAnimation = function getAnimation() {\\n    if (this.props.animation != null) {\\n      return this.props.animation;\\n    }\\n\\n    var tabContent = this.context.$bs_tabContent;\\n    return tabContent && tabContent.animation;\\n  };\\n\\n  TabPane.prototype.isActive = function isActive() {\\n    var tabContent = this.context.$bs_tabContent;\\n    var activeKey = tabContent && tabContent.activeKey;\\n\\n    return this.props.eventKey === activeKey;\\n  };\\n\\n  TabPane.prototype.shouldBeIn = function shouldBeIn() {\\n    return this.getAnimation() && this.isActive();\\n  };\\n\\n  TabPane.prototype.render = function render() {\\n    var _props = this.props,\\n        eventKey = _props.eventKey,\\n        className = _props.className,\\n        onEnter = _props.onEnter,\\n        onEntering = _props.onEntering,\\n        onEntered = _props.onEntered,\\n        onExit = _props.onExit,\\n        onExiting = _props.onExiting,\\n        onExited = _props.onExited,\\n        propsUnmountOnExit = _props.unmountOnExit,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['eventKey', 'className', 'onEnter', 'onEntering', 'onEntered', 'onExit', 'onExiting', 'onExited', 'unmountOnExit']);\\n    var _context = this.context,\\n        tabContent = _context.$bs_tabContent,\\n        tabContainer = _context.$bs_tabContainer;\\n\\n    var _splitBsPropsAndOmit = (0, _bootstrapUtils.splitBsPropsAndOmit)(props, ['animation']),\\n        bsProps = _splitBsPropsAndOmit[0],\\n        elementProps = _splitBsPropsAndOmit[1];\\n\\n    var active = this.isActive();\\n    var animation = this.getAnimation();\\n\\n    var unmountOnExit = propsUnmountOnExit != null ? propsUnmountOnExit : tabContent && tabContent.unmountOnExit;\\n\\n    if (!active && !animation && unmountOnExit) {\\n      return null;\\n    }\\n\\n    var Transition = animation === true ? _Fade2['default'] : animation || null;\\n\\n    if (tabContent) {\\n      bsProps.bsClass = (0, _bootstrapUtils.prefix)(tabContent, 'pane');\\n    }\\n\\n    var classes = (0, _extends3['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), {\\n      active: active\\n    });\\n\\n    if (tabContainer) {\\n      process.env.NODE_ENV !== 'production' ? (0, _warning2['default'])(!elementProps.id && !elementProps['aria-labelledby'], 'In the context of a `<TabContainer>`, `<TabPanes>` are given ' + 'generated `id` and `aria-labelledby` attributes for the sake of ' + 'proper component accessibility. Any provided ones will be ignored. ' + 'To control these attributes directly provide a `generateChildId` ' + 'prop to the parent `<TabContainer>`.') : void 0;\\n\\n      elementProps.id = tabContainer.getPaneId(eventKey);\\n      elementProps['aria-labelledby'] = tabContainer.getTabId(eventKey);\\n    }\\n\\n    var pane = _react2['default'].createElement('div', (0, _extends3['default'])({}, elementProps, {\\n      role: 'tabpanel',\\n      'aria-hidden': !active,\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n\\n    if (Transition) {\\n      var exiting = tabContent && tabContent.exiting;\\n\\n      return _react2['default'].createElement(\\n        Transition,\\n        {\\n          'in': active && !exiting,\\n          onEnter: (0, _createChainedFunction2['default'])(this.handleEnter, onEnter),\\n          onEntering: onEntering,\\n          onEntered: onEntered,\\n          onExit: onExit,\\n          onExiting: onExiting,\\n          onExited: (0, _createChainedFunction2['default'])(this.handleExited, onExited),\\n          unmountOnExit: unmountOnExit\\n        },\\n        pane\\n      );\\n    }\\n\\n    return pane;\\n  };\\n\\n  return TabPane;\\n}(_react2['default'].Component);\\n\\nTabPane.propTypes = propTypes;\\nTabPane.contextTypes = contextTypes;\\nTabPane.childContextTypes = childContextTypes;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('tab-pane', TabPane);\\nmodule.exports = exports['default'];\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! ./~/process/browser.js */ 3)))\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/TabPane.js\\n// module id = 506\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/TabPane.js?\");\n\n/***/ },\n/* 507 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Table.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends3 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends4 = _interopRequireDefault(_extends3);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  striped: _react2['default'].PropTypes.bool,\\n  bordered: _react2['default'].PropTypes.bool,\\n  condensed: _react2['default'].PropTypes.bool,\\n  hover: _react2['default'].PropTypes.bool,\\n  responsive: _react2['default'].PropTypes.bool\\n};\\n\\nvar defaultProps = {\\n  bordered: false,\\n  condensed: false,\\n  hover: false,\\n  responsive: false,\\n  striped: false\\n};\\n\\nvar Table = function (_React$Component) {\\n  (0, _inherits3['default'])(Table, _React$Component);\\n\\n  function Table() {\\n    (0, _classCallCheck3['default'])(this, Table);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Table.prototype.render = function render() {\\n    var _extends2;\\n\\n    var _props = this.props,\\n        striped = _props.striped,\\n        bordered = _props.bordered,\\n        condensed = _props.condensed,\\n        hover = _props.hover,\\n        responsive = _props.responsive,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['striped', 'bordered', 'condensed', 'hover', 'responsive', 'className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _extends4['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), (_extends2 = {}, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'striped')] = striped, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'bordered')] = bordered, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'condensed')] = condensed, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'hover')] = hover, _extends2));\\n\\n    var table = _react2['default'].createElement('table', (0, _extends4['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n\\n    if (responsive) {\\n      return _react2['default'].createElement(\\n        'div',\\n        { className: (0, _bootstrapUtils.prefix)(bsProps, 'responsive') },\\n        table\\n      );\\n    }\\n\\n    return table;\\n  };\\n\\n  return Table;\\n}(_react2['default'].Component);\\n\\nTable.propTypes = propTypes;\\nTable.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('table', Table);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Table.js\\n// module id = 507\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Table.js?\");\n\n/***/ },\n/* 508 */\n/*!***************************************!*\\\n  !*** ./~/react-bootstrap/lib/Tabs.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _isRequiredForA11y = __webpack_require__(/*! react-prop-types/lib/isRequiredForA11y */ 401);\\n\\nvar _isRequiredForA11y2 = _interopRequireDefault(_isRequiredForA11y);\\n\\nvar _uncontrollable = __webpack_require__(/*! uncontrollable */ 402);\\n\\nvar _uncontrollable2 = _interopRequireDefault(_uncontrollable);\\n\\nvar _Nav = __webpack_require__(/*! ./Nav */ 470);\\n\\nvar _Nav2 = _interopRequireDefault(_Nav);\\n\\nvar _NavItem = __webpack_require__(/*! ./NavItem */ 477);\\n\\nvar _NavItem2 = _interopRequireDefault(_NavItem);\\n\\nvar _TabContainer = __webpack_require__(/*! ./TabContainer */ 504);\\n\\nvar _TabContainer2 = _interopRequireDefault(_TabContainer);\\n\\nvar _TabContent = __webpack_require__(/*! ./TabContent */ 505);\\n\\nvar _TabContent2 = _interopRequireDefault(_TabContent);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 358);\\n\\nvar _ValidComponentChildren2 = _interopRequireDefault(_ValidComponentChildren);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar TabContainer = _TabContainer2['default'].ControlledComponent;\\n\\nvar propTypes = {\\n  /**\\n   * Mark the Tab with a matching `eventKey` as active.\\n   *\\n   * @controllable onSelect\\n   */\\n  activeKey: _react2['default'].PropTypes.any,\\n\\n  /**\\n   * Navigation style\\n   */\\n  bsStyle: _react2['default'].PropTypes.oneOf(['tabs', 'pills']),\\n\\n  animation: _react2['default'].PropTypes.bool,\\n\\n  id: (0, _isRequiredForA11y2['default'])(_react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number])),\\n\\n  /**\\n   * Callback fired when a Tab is selected.\\n   *\\n   * ```js\\n   * function (\\n   * \\tAny eventKey,\\n   * \\tSyntheticEvent event?\\n   * )\\n   * ```\\n   *\\n   * @controllable activeKey\\n   */\\n  onSelect: _react2['default'].PropTypes.func,\\n\\n  /**\\n   * Unmount tabs (remove it from the DOM) when it is no longer visible\\n   */\\n  unmountOnExit: _react2['default'].PropTypes.bool\\n};\\n\\nvar defaultProps = {\\n  bsStyle: 'tabs',\\n  animation: true,\\n  unmountOnExit: false\\n};\\n\\nfunction getDefaultActiveKey(children) {\\n  var defaultActiveKey = void 0;\\n  _ValidComponentChildren2['default'].forEach(children, function (child) {\\n    if (defaultActiveKey == null) {\\n      defaultActiveKey = child.props.eventKey;\\n    }\\n  });\\n\\n  return defaultActiveKey;\\n}\\n\\nvar Tabs = function (_React$Component) {\\n  (0, _inherits3['default'])(Tabs, _React$Component);\\n\\n  function Tabs() {\\n    (0, _classCallCheck3['default'])(this, Tabs);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Tabs.prototype.renderTab = function renderTab(child) {\\n    var _child$props = child.props,\\n        title = _child$props.title,\\n        eventKey = _child$props.eventKey,\\n        disabled = _child$props.disabled,\\n        tabClassName = _child$props.tabClassName;\\n\\n    if (title == null) {\\n      return null;\\n    }\\n\\n    return _react2['default'].createElement(\\n      _NavItem2['default'],\\n      {\\n        eventKey: eventKey,\\n        disabled: disabled,\\n        className: tabClassName\\n      },\\n      title\\n    );\\n  };\\n\\n  Tabs.prototype.render = function render() {\\n    var _props = this.props,\\n        id = _props.id,\\n        onSelect = _props.onSelect,\\n        animation = _props.animation,\\n        unmountOnExit = _props.unmountOnExit,\\n        bsClass = _props.bsClass,\\n        className = _props.className,\\n        style = _props.style,\\n        children = _props.children,\\n        _props$activeKey = _props.activeKey,\\n        activeKey = _props$activeKey === undefined ? getDefaultActiveKey(children) : _props$activeKey,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['id', 'onSelect', 'animation', 'unmountOnExit', 'bsClass', 'className', 'style', 'children', 'activeKey']);\\n\\n\\n    return _react2['default'].createElement(\\n      TabContainer,\\n      {\\n        id: id,\\n        activeKey: activeKey,\\n        onSelect: onSelect,\\n        className: className,\\n        style: style\\n      },\\n      _react2['default'].createElement(\\n        'div',\\n        null,\\n        _react2['default'].createElement(\\n          _Nav2['default'],\\n          (0, _extends3['default'])({}, props, {\\n            role: 'tablist'\\n          }),\\n          _ValidComponentChildren2['default'].map(children, this.renderTab)\\n        ),\\n        _react2['default'].createElement(\\n          _TabContent2['default'],\\n          {\\n            bsClass: bsClass,\\n            animation: animation,\\n            unmountOnExit: unmountOnExit\\n          },\\n          children\\n        )\\n      )\\n    );\\n  };\\n\\n  return Tabs;\\n}(_react2['default'].Component);\\n\\nTabs.propTypes = propTypes;\\nTabs.defaultProps = defaultProps;\\n\\n(0, _bootstrapUtils.bsClass)('tab', Tabs);\\n\\nexports['default'] = (0, _uncontrollable2['default'])(Tabs, { activeKey: 'onSelect' });\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Tabs.js\\n// module id = 508\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Tabs.js?\");\n\n/***/ },\n/* 509 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/Thumbnail.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _SafeAnchor = __webpack_require__(/*! ./SafeAnchor */ 366);\\n\\nvar _SafeAnchor2 = _interopRequireDefault(_SafeAnchor);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  src: _react2['default'].PropTypes.string,\\n  alt: _react2['default'].PropTypes.string,\\n  href: _react2['default'].PropTypes.string\\n};\\n\\nvar Thumbnail = function (_React$Component) {\\n  (0, _inherits3['default'])(Thumbnail, _React$Component);\\n\\n  function Thumbnail() {\\n    (0, _classCallCheck3['default'])(this, Thumbnail);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Thumbnail.prototype.render = function render() {\\n    var _props = this.props,\\n        src = _props.src,\\n        alt = _props.alt,\\n        className = _props.className,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['src', 'alt', 'className', 'children']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var Component = elementProps.href ? _SafeAnchor2['default'] : 'div';\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement(\\n      Component,\\n      (0, _extends3['default'])({}, elementProps, {\\n        className: (0, _classnames2['default'])(className, classes)\\n      }),\\n      _react2['default'].createElement('img', { src: src, alt: alt }),\\n      children && _react2['default'].createElement(\\n        'div',\\n        { className: 'caption' },\\n        children\\n      )\\n    );\\n  };\\n\\n  return Thumbnail;\\n}(_react2['default'].Component);\\n\\nThumbnail.propTypes = propTypes;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('thumbnail', Thumbnail);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Thumbnail.js\\n// module id = 509\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Thumbnail.js?\");\n\n/***/ },\n/* 510 */\n/*!******************************************!*\\\n  !*** ./~/react-bootstrap/lib/Tooltip.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends3 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends4 = _interopRequireDefault(_extends3);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _isRequiredForA11y = __webpack_require__(/*! react-prop-types/lib/isRequiredForA11y */ 401);\\n\\nvar _isRequiredForA11y2 = _interopRequireDefault(_isRequiredForA11y);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar propTypes = {\\n  /**\\n   * An html id attribute, necessary for accessibility\\n   * @type {string|number}\\n   * @required\\n   */\\n  id: (0, _isRequiredForA11y2['default'])(_react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.number])),\\n\\n  /**\\n   * Sets the direction the Tooltip is positioned towards.\\n   */\\n  placement: _react2['default'].PropTypes.oneOf(['top', 'right', 'bottom', 'left']),\\n\\n  /**\\n   * The \\\"top\\\" position value for the Tooltip.\\n   */\\n  positionTop: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.number, _react2['default'].PropTypes.string]),\\n  /**\\n   * The \\\"left\\\" position value for the Tooltip.\\n   */\\n  positionLeft: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.number, _react2['default'].PropTypes.string]),\\n\\n  /**\\n   * The \\\"top\\\" position value for the Tooltip arrow.\\n   */\\n  arrowOffsetTop: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.number, _react2['default'].PropTypes.string]),\\n  /**\\n   * The \\\"left\\\" position value for the Tooltip arrow.\\n   */\\n  arrowOffsetLeft: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.number, _react2['default'].PropTypes.string])\\n};\\n\\nvar defaultProps = {\\n  placement: 'right'\\n};\\n\\nvar Tooltip = function (_React$Component) {\\n  (0, _inherits3['default'])(Tooltip, _React$Component);\\n\\n  function Tooltip() {\\n    (0, _classCallCheck3['default'])(this, Tooltip);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Tooltip.prototype.render = function render() {\\n    var _extends2;\\n\\n    var _props = this.props,\\n        placement = _props.placement,\\n        positionTop = _props.positionTop,\\n        positionLeft = _props.positionLeft,\\n        arrowOffsetTop = _props.arrowOffsetTop,\\n        arrowOffsetLeft = _props.arrowOffsetLeft,\\n        className = _props.className,\\n        style = _props.style,\\n        children = _props.children,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['placement', 'positionTop', 'positionLeft', 'arrowOffsetTop', 'arrowOffsetLeft', 'className', 'style', 'children']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _extends4['default'])({}, (0, _bootstrapUtils.getClassSet)(bsProps), (_extends2 = {}, _extends2[placement] = true, _extends2));\\n\\n    var outerStyle = (0, _extends4['default'])({\\n      top: positionTop,\\n      left: positionLeft\\n    }, style);\\n\\n    var arrowStyle = {\\n      top: arrowOffsetTop,\\n      left: arrowOffsetLeft\\n    };\\n\\n    return _react2['default'].createElement(\\n      'div',\\n      (0, _extends4['default'])({}, elementProps, {\\n        role: 'tooltip',\\n        className: (0, _classnames2['default'])(className, classes),\\n        style: outerStyle\\n      }),\\n      _react2['default'].createElement('div', { className: (0, _bootstrapUtils.prefix)(bsProps, 'arrow'), style: arrowStyle }),\\n      _react2['default'].createElement(\\n        'div',\\n        { className: (0, _bootstrapUtils.prefix)(bsProps, 'inner') },\\n        children\\n      )\\n    );\\n  };\\n\\n  return Tooltip;\\n}(_react2['default'].Component);\\n\\nTooltip.propTypes = propTypes;\\nTooltip.defaultProps = defaultProps;\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('tooltip', Tooltip);\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Tooltip.js\\n// module id = 510\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Tooltip.js?\");\n\n/***/ },\n/* 511 */\n/*!***************************************!*\\\n  !*** ./~/react-bootstrap/lib/Well.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\n\\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ 265);\\n\\nvar _extends3 = _interopRequireDefault(_extends2);\\n\\nvar _objectWithoutProperties2 = __webpack_require__(/*! babel-runtime/helpers/objectWithoutProperties */ 349);\\n\\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\\n\\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ 303);\\n\\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\\n\\nvar _possibleConstructorReturn2 = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ 304);\\n\\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\\n\\nvar _inherits2 = __webpack_require__(/*! babel-runtime/helpers/inherits */ 340);\\n\\nvar _inherits3 = _interopRequireDefault(_inherits2);\\n\\nvar _classnames = __webpack_require__(/*! classnames */ 350);\\n\\nvar _classnames2 = _interopRequireDefault(_classnames);\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _bootstrapUtils = __webpack_require__(/*! ./utils/bootstrapUtils */ 351);\\n\\nvar _StyleConfig = __webpack_require__(/*! ./utils/StyleConfig */ 356);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nvar Well = function (_React$Component) {\\n  (0, _inherits3['default'])(Well, _React$Component);\\n\\n  function Well() {\\n    (0, _classCallCheck3['default'])(this, Well);\\n    return (0, _possibleConstructorReturn3['default'])(this, _React$Component.apply(this, arguments));\\n  }\\n\\n  Well.prototype.render = function render() {\\n    var _props = this.props,\\n        className = _props.className,\\n        props = (0, _objectWithoutProperties3['default'])(_props, ['className']);\\n\\n    var _splitBsProps = (0, _bootstrapUtils.splitBsProps)(props),\\n        bsProps = _splitBsProps[0],\\n        elementProps = _splitBsProps[1];\\n\\n    var classes = (0, _bootstrapUtils.getClassSet)(bsProps);\\n\\n    return _react2['default'].createElement('div', (0, _extends3['default'])({}, elementProps, {\\n      className: (0, _classnames2['default'])(className, classes)\\n    }));\\n  };\\n\\n  return Well;\\n}(_react2['default'].Component);\\n\\nexports['default'] = (0, _bootstrapUtils.bsClass)('well', (0, _bootstrapUtils.bsSizes)([_StyleConfig.Size.LARGE, _StyleConfig.Size.SMALL], Well));\\nmodule.exports = exports['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/Well.js\\n// module id = 511\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Well.js?\");\n\n/***/ },\n/* 512 */\n/*!**********************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/index.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nexports.__esModule = true;\\nexports.ValidComponentChildren = exports.createChainedFunction = exports.bootstrapUtils = undefined;\\n\\nvar _bootstrapUtils2 = __webpack_require__(/*! ./bootstrapUtils */ 351);\\n\\nvar _bootstrapUtils = _interopRequireWildcard(_bootstrapUtils2);\\n\\nvar _createChainedFunction2 = __webpack_require__(/*! ./createChainedFunction */ 357);\\n\\nvar _createChainedFunction3 = _interopRequireDefault(_createChainedFunction2);\\n\\nvar _ValidComponentChildren2 = __webpack_require__(/*! ./ValidComponentChildren */ 358);\\n\\nvar _ValidComponentChildren3 = _interopRequireDefault(_ValidComponentChildren2);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\\n\\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\\n\\nexports.bootstrapUtils = _bootstrapUtils;\\nexports.createChainedFunction = _createChainedFunction3['default'];\\nexports.ValidComponentChildren = _ValidComponentChildren3['default'];\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./~/react-bootstrap/lib/utils/index.js\\n// module id = 512\\n// module chunks = 2\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/index.js?\");\n\n/***/ },\n/* 513 */\n/*!******************************************!*\\\n  !*** ./javascript/endpoint-explorer.jsx ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar EndpointRow = _react2.default.createClass({\\n    displayName: 'EndpointRow',\\n    render: function render() {\\n        var hash = '#fubumvc/chain-details/' + this.props.endpoint.hash;\\n\\n        return _react2.default.createElement(\\n            'tr',\\n            null,\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                _react2.default.createElement(\\n                    'a',\\n                    { href: hash },\\n                    'Details'\\n                )\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                this.props.endpoint.title\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                this.props.endpoint.actions\\n            )\\n        );\\n    }\\n});\\n\\nvar EndpointTable = _react2.default.createClass({\\n    displayName: 'EndpointTable',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        FubuDiagnostics.get('EndpointExplorer:endpoints', {}, function (data) {\\n            _.assign(data, { loading: false });\\n\\n            _this.setState(data);\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        var rows = this.state.endpoints.map(function (e, i) {\\n            return _react2.default.createElement(EndpointRow, { key: i, endpoint: e });\\n        });\\n\\n        return _react2.default.createElement(\\n            'div',\\n            null,\\n            _react2.default.createElement(\\n                'h3',\\n                null,\\n                'HTTP Endpoints'\\n            ),\\n            _react2.default.createElement(\\n                'table',\\n                { className: 'table' },\\n                _react2.default.createElement(\\n                    'thead',\\n                    null,\\n                    _react2.default.createElement(\\n                        'tr',\\n                        null,\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'View Details'\\n                        ),\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'Description'\\n                        ),\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'Action(s)'\\n                        )\\n                    )\\n                ),\\n                _react2.default.createElement(\\n                    'tbody',\\n                    null,\\n                    rows\\n                )\\n            )\\n        );\\n    }\\n});\\n\\nFubuDiagnostics.section('fubumvc').add({\\n    title: 'Endpoints',\\n    description: 'All the configured endpoint routes, partials, and message handlers in this application',\\n    key: 'endpoints',\\n    component: EndpointTable\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/endpoint-explorer.jsx\\n// module id = 513\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/endpoint-explorer.jsx?\");\n\n/***/ },\n/* 514 */\n/*!*****************************************!*\\\n  !*** ./javascript/partial-explorer.jsx ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar PartialRow = _react2.default.createClass({\\n    displayName: 'PartialRow',\\n    render: function render() {\\n        var hash = '#fubumvc/chain-details/' + this.props.endpoint.hash;\\n\\n        return _react2.default.createElement(\\n            'tr',\\n            null,\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                _react2.default.createElement(\\n                    'a',\\n                    { href: hash },\\n                    'Details'\\n                )\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                this.props.endpoint.title\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                this.props.endpoint.actions\\n            )\\n        );\\n    }\\n});\\n\\nvar PartialTable = _react2.default.createClass({\\n    displayName: 'PartialTable',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        FubuDiagnostics.get('EndpointExplorer:partials', {}, function (data) {\\n            _.assign(data, { loading: false });\\n\\n            _this.setState(data);\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        var rows = this.state.endpoints.map(function (e, i) {\\n            return _react2.default.createElement(PartialRow, { key: i, endpoint: e });\\n        });\\n\\n        return _react2.default.createElement(\\n            'div',\\n            null,\\n            _react2.default.createElement(\\n                'h3',\\n                null,\\n                'Partial Chains'\\n            ),\\n            _react2.default.createElement(\\n                'table',\\n                { className: 'table' },\\n                _react2.default.createElement(\\n                    'thead',\\n                    null,\\n                    _react2.default.createElement(\\n                        'tr',\\n                        null,\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'View Details'\\n                        ),\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'Description'\\n                        ),\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'Action(s)'\\n                        )\\n                    )\\n                ),\\n                _react2.default.createElement(\\n                    'tbody',\\n                    null,\\n                    rows\\n                )\\n            )\\n        );\\n    }\\n});\\n\\nFubuDiagnostics.section('fubumvc').add({\\n    title: 'Partials',\\n    description: 'All the configured partial chains in this application',\\n    key: 'partials',\\n    component: PartialTable\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/partial-explorer.jsx\\n// module id = 514\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/partial-explorer.jsx?\");\n\n/***/ },\n/* 515 */\n/*!**************************************!*\\\n  !*** ./javascript/chain-details.jsx ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _lodash = __webpack_require__(/*! lodash */ 32);\\n\\nvar _lodash2 = _interopRequireDefault(_lodash);\\n\\nvar _reactBootstrap = __webpack_require__(/*! react-bootstrap */ 263);\\n\\nvar _descriptionBody = __webpack_require__(/*! ./description-body */ 516);\\n\\nvar _descriptionBody2 = _interopRequireDefault(_descriptionBody);\\n\\nvar _chainPerformanceHistory = __webpack_require__(/*! ./chain-performance-history */ 517);\\n\\nvar _chainPerformanceHistory2 = _interopRequireDefault(_chainPerformanceHistory);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar TypeDisplay = _react2.default.createClass({\\n    displayName: 'TypeDisplay',\\n    render: function render() {\\n        return _react2.default.createElement(\\n            'span',\\n            { className: 'type-display', title: this.props.type['qualified-name'] },\\n            this.props.type.name\\n        );\\n    }\\n});\\n\\nfunction Cell(title, att, toCell) {\\n    this.title = title;\\n    this.toCell = toCell;\\n\\n    if (this.toCell == null) {\\n        this.toCell = function (data) {\\n            return _react2.default.createElement(\\n                'td',\\n                { key: this.title },\\n                data[att]\\n            );\\n        };\\n    }\\n\\n    this.applies = function (data) {\\n        return data[att] != null;\\n    };\\n\\n    this.shouldDisplay = function (data) {\\n        return data.hasOwnProperty(att);\\n    };\\n}\\n\\nfunction ArrayCell(title, att) {\\n    var toCell = function toCell(data) {\\n        var display = (0, _lodash2.default)(data[att]).join(', ');\\n\\n        return _react2.default.createElement(\\n            'td',\\n            null,\\n            display\\n        );\\n    };\\n\\n    var cell = new Cell(title, att, toCell);\\n\\n    cell.shouldDisplay = function (data) {\\n        if (!data.hasOwnProperty(att)) return false;\\n\\n        var actual = data[att];\\n\\n        return actual != null && actual.length > 0;\\n    };\\n\\n    return cell;\\n}\\n\\nfunction TypeCell(title, att) {\\n    var cell = new Cell(title, att);\\n\\n    cell.toCell = function (data) {\\n        return _react2.default.createElement(\\n            'td',\\n            null,\\n            _react2.default.createElement(TypeDisplay, { type: data[att] })\\n        );\\n    };\\n\\n    cell.shouldDisplay = function (data) {\\n        if (!data.hasOwnProperty(att)) return false;\\n\\n        var actual = data[att];\\n\\n        return actual != null && actual.length > 0;\\n    };\\n    return cell;\\n}\\n\\nfunction toDetailRows(cells, data) {\\n    var activeCells = _lodash2.default.filter(cells, function (c, i) {\\n        return c.shouldDisplay(data);\\n    });\\n\\n    return activeCells.map(function (cell) {\\n        var td = cell.toCell(data);\\n\\n        return _react2.default.createElement(\\n            'tr',\\n            { key: cell.title },\\n            _react2.default.createElement(\\n                'th',\\n                null,\\n                cell.title\\n            ),\\n            td\\n        );\\n    });\\n}\\n\\nfunction toBehaviorRow(node) {\\n    return _react2.default.createElement(\\n        'tr',\\n        { key: node.title },\\n        _react2.default.createElement(\\n            'th',\\n            null,\\n            _react2.default.createElement(\\n                'p',\\n                null,\\n                node.title\\n            ),\\n            _react2.default.createElement(\\n                'p',\\n                null,\\n                _react2.default.createElement(\\n                    'small',\\n                    { className: 'small' },\\n                    'Category: ',\\n                    node.category\\n                )\\n            )\\n        ),\\n        _react2.default.createElement(\\n            'td',\\n            null,\\n            _react2.default.createElement(_descriptionBody2.default, _extends({ key: node.title }, node))\\n        )\\n    );\\n}\\n\\nvar ChainDetails = _react2.default.createClass({\\n    displayName: 'ChainDetails',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        var params = this.props.params;\\n        FubuDiagnostics.get('Chain:chain_details_Hash', params, function (data) {\\n            _this.setState({ loading: false, data: data });\\n        });\\n    },\\n    buildDetails: function buildDetails() {\\n        var detailCells = [new Cell('Title', 'title'), new Cell('Route', 'route'), new TypeCell('Input Type', 'input'), new TypeCell('Resource Type', 'resource'), new ArrayCell('Accepts', 'accepts'), new ArrayCell('Content-Type', 'content-type'), new ArrayCell('Tags', 'tags')];\\n\\n        return toDetailRows(detailCells, this.state.data.details);\\n    },\\n    buildRoute: function buildRoute() {\\n        return _react2.default.createElement(\\n            'tr',\\n            { key: this.state.data.route.title, className: 'route-data' },\\n            _react2.default.createElement(\\n                'th',\\n                null,\\n                _react2.default.createElement(\\n                    'p',\\n                    null,\\n                    this.state.data.route.title\\n                )\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                _react2.default.createElement(_descriptionBody2.default, this.state.data.route)\\n            )\\n        );\\n    },\\n    buildPerformanceSummary: function buildPerformanceSummary(rows) {\\n        var performanceHeader = _react2.default.createElement(\\n            'tr',\\n            null,\\n            _react2.default.createElement(\\n                'td',\\n                { colSpan: '2' },\\n                _react2.default.createElement(\\n                    'h4',\\n                    null,\\n                    'Performance Summary'\\n                )\\n            )\\n        );\\n        rows.push(performanceHeader);\\n\\n        var cells = [new Cell('Hits', 'hits'), new Cell('Total Execution Time', 'total'), new Cell('Average Execution Time', 'average'), new Cell('Exception %', 'exceptions'), new Cell('Min Time', 'min'), new Cell('Max Time', 'max')];\\n\\n        var perfRows = toDetailRows(cells, this.state.data.performance);\\n        return rows.concat(perfRows);\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        if (this.state.data['not-found']) {\\n            return _react2.default.createElement(\\n                'h1',\\n                null,\\n                'Chain not found!'\\n            );\\n        }\\n\\n        var rows = this.buildDetails();\\n\\n        if (this.state.data.route != null) {\\n\\n            rows.push(this.buildRoute(rows.length));\\n        }\\n\\n        rows = this.buildPerformanceSummary(rows);\\n\\n        var behaviorHeader = _react2.default.createElement(\\n            'tr',\\n            null,\\n            _react2.default.createElement(\\n                'td',\\n                { colSpan: '2' },\\n                _react2.default.createElement(\\n                    'h4',\\n                    null,\\n                    'Behaviors'\\n                )\\n            )\\n        );\\n        rows.push(behaviorHeader);\\n\\n        this.state.data.nodes.forEach(function (node, i) {\\n            var row = toBehaviorRow(node, i);\\n            rows.push(row);\\n        });\\n        return _react2.default.createElement(\\n            _reactBootstrap.Row,\\n            null,\\n            _react2.default.createElement(\\n                _reactBootstrap.Col,\\n                { key: 'desc', md: 3, xs: 3 },\\n                'This is a visualization of a single behavior chain. We should put more information here some day.'\\n            ),\\n            _react2.default.createElement(\\n                _reactBootstrap.Col,\\n                { key: 'details-body', md: 9, xs: 9 },\\n                _react2.default.createElement(\\n                    'table',\\n                    { className: 'details table table-striped', style: { width: 'auto' } },\\n                    _react2.default.createElement(\\n                        'tbody',\\n                        null,\\n                        rows\\n                    )\\n                ),\\n                _react2.default.createElement(_chainPerformanceHistory2.default, { key: 'chain-perf-history', executions: this.state.data.executions })\\n            )\\n        );\\n    }\\n});\\n\\nFubuDiagnostics.section('fubumvc').add({\\n    title: 'Chain Details',\\n    description: 'BehaviorChain Visualization',\\n    key: 'chain-details',\\n    route: 'Chain:chain_details_Hash',\\n    component: ChainDetails\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/chain-details.jsx\\n// module id = 515\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/chain-details.jsx?\");\n\n/***/ },\n/* 516 */\n/*!*****************************************!*\\\n  !*** ./javascript/description-body.jsx ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"\\\"use strict\\\";\\n\\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar Child = _react2.default.createClass({\\n    displayName: \\\"Child\\\",\\n    render: function render() {\\n        return _react2.default.createElement(\\n            \\\"div\\\",\\n            { key: this.props.name, className: \\\"desc-child\\\" },\\n            _react2.default.createElement(\\n                \\\"div\\\",\\n                { className: \\\"desc-child-title\\\" },\\n                _react2.default.createElement(\\n                    \\\"b\\\",\\n                    null,\\n                    this.props.name\\n                ),\\n                _react2.default.createElement(\\n                    \\\"i\\\",\\n                    null,\\n                    this.props.title\\n                )\\n            ),\\n            _react2.default.createElement(\\n                \\\"div\\\",\\n                { className: \\\"desc-child-body\\\" },\\n                _react2.default.createElement(DescriptionBody, _extends({ key: this.props.name }, this.props))\\n            )\\n        );\\n    }\\n});\\n\\nvar DescriptionBody = _react2.default.createClass({\\n    displayName: \\\"DescriptionBody\\\",\\n    render: function render() {\\n        var properties = this.renderProperties();\\n        var children = this.renderChildren();\\n        var lists = this.renderLists();\\n\\n        var description = null;\\n        if (this.props.description) {\\n            description = _react2.default.createElement(\\n                \\\"p\\\",\\n                { className: \\\"short-desc\\\" },\\n                this.props.description\\n            );\\n        }\\n\\n        return _react2.default.createElement(\\n            \\\"div\\\",\\n            { className: \\\"description-body\\\" },\\n            description,\\n            properties,\\n            children,\\n            lists\\n        );\\n    },\\n    renderChildren: function renderChildren() {\\n        var children = [];\\n        if (this.props.children) {\\n            for (var key in children) {\\n                var child = _react2.default.createElement(Child, _extends({ name: key }, children[key]));\\n                children.push(child);\\n            }\\n        }\\n\\n        return children;\\n    },\\n    renderLists: function renderLists() {\\n        var lists = [];\\n        if (this.props.lists) {\\n            for (var key in this.props.lists) {\\n                var listTitle = _react2.default.createElement(\\n                    \\\"div\\\",\\n                    { key: key, className: \\\"desc-list-name\\\" },\\n                    key\\n                );\\n                lists.push(listTitle);\\n\\n                this.props.lists[key].forEach(function (i) {\\n                    var title = _react2.default.createElement(\\n                        \\\"div\\\",\\n                        { key: i.title + i.length, className: \\\"desc-bullet-item-title\\\" },\\n                        i.title\\n                    );\\n                    lists.push(title);\\n\\n                    var body = _react2.default.createElement(\\n                        \\\"div\\\",\\n                        { key: \\\"body\\\" + i.title, className: \\\"desc-bullet-item-body\\\" },\\n                        _react2.default.createElement(DescriptionBody, i)\\n                    );\\n\\n                    lists.push(body);\\n                });\\n            }\\n        }\\n        return lists;\\n    },\\n    renderProperties: function renderProperties() {\\n        var properties = null;\\n        if (this.props.properties) {\\n            var propRows = [];\\n            for (var key in this.props.properties) {\\n                var row = _react2.default.createElement(\\n                    \\\"tr\\\",\\n                    { key: key },\\n                    _react2.default.createElement(\\n                        \\\"th\\\",\\n                        null,\\n                        key\\n                    ),\\n                    _react2.default.createElement(\\n                        \\\"td\\\",\\n                        null,\\n                        this.props.properties[key]\\n                    )\\n                );\\n                propRows.push(row);\\n            }\\n\\n            properties = _react2.default.createElement(\\n                \\\"table\\\",\\n                { className: \\\"table desc-properties\\\" },\\n                _react2.default.createElement(\\n                    \\\"tbody\\\",\\n                    null,\\n                    propRows\\n                )\\n            );\\n        }\\n        return properties;\\n    }\\n});\\n\\nmodule.exports = DescriptionBody;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/description-body.jsx\\n// module id = 516\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/description-body.jsx?\");\n\n/***/ },\n/* 517 */\n/*!**************************************************!*\\\n  !*** ./javascript/chain-performance-history.jsx ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nmodule.exports = _react2.default.createClass({\\n    displayName: 'exports',\\n    render: function render() {\\n        var rows = this.props.executions.map(function (x) {\\n            var clazz = '';\\n            if (x.warn) {\\n                clazz = 'warning';\\n            }\\n\\n            var exceptionText = '';\\n            if (x.exceptions) {\\n                exceptionText = 'Exception(s)!';\\n                clazz = 'danger';\\n            }\\n\\n            var url = \\\"#/fubumvc/request-details/\\\" + x.id;\\n\\n            return _react2.default.createElement(\\n                'tr',\\n                { key: x.id, className: clazz },\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    _react2.default.createElement(\\n                        'a',\\n                        { href: url },\\n                        x.time\\n                    )\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    x.execution_time\\n                )\\n            );\\n        });\\n\\n        return _react2.default.createElement(\\n            'table',\\n            { className: 'table table-striped', style: { width: 'auto' } },\\n            _react2.default.createElement(\\n                'tbody',\\n                null,\\n                _react2.default.createElement(\\n                    'tr',\\n                    null,\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Time'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Execution Time'\\n                    )\\n                ),\\n                rows\\n            )\\n        );\\n    }\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/chain-performance-history.jsx\\n// module id = 517\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/chain-performance-history.jsx?\");\n\n/***/ },\n/* 518 */\n/*!**************************************!*\\\n  !*** ./javascript/request-table.jsx ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar RequestRow = _react2.default.createClass({\\n    displayName: 'RequestRow',\\n    render: function render() {\\n        var details = '#fubumvc/request-details/' + this.props.request.id;\\n\\n        return _react2.default.createElement(\\n            'tr',\\n            { key: this.props.request.id },\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                _react2.default.createElement(\\n                    'a',\\n                    { href: details },\\n                    'Details'\\n                )\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                this.props.request.time\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                this.props.request.url\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                this.props.request.method\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                this.props.request.status\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                this.props.request.description\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                null,\\n                this.props.request.contentType\\n            ),\\n            _react2.default.createElement(\\n                'td',\\n                { style: { textAlign: \\\"right\\\" } },\\n                this.props.request.duration\\n            )\\n        );\\n    }\\n});\\n\\nvar RequestTable = _react2.default.createClass({\\n    displayName: 'RequestTable',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        FubuDiagnostics.get('Requests:requests', {}, function (data) {\\n            _.assign(data, { loading: false });\\n\\n            _this.setState(data);\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        var rows = this.state.requests.map(function (r, i) {\\n            return _react2.default.createElement(RequestRow, { key: i, request: r });\\n        });\\n\\n        return _react2.default.createElement(\\n            'table',\\n            { className: 'table table-striped', style: { width: 'auto' } },\\n            _react2.default.createElement(\\n                'thead',\\n                null,\\n                _react2.default.createElement(\\n                    'tr',\\n                    null,\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Details'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Time (Local)'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Url'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Method'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Status'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Description'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Content Type'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Duration (ms)'\\n                    )\\n                )\\n            ),\\n            _react2.default.createElement(\\n                'tbody',\\n                null,\\n                rows\\n            )\\n        );\\n    }\\n});\\n\\nFubuDiagnostics.section('fubumvc').add({\\n    title: 'Requests',\\n    description: 'A history of the most recent requests handled by this application',\\n    key: 'requests',\\n    component: RequestTable\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/request-table.jsx\\n// module id = 518\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/request-table.jsx?\");\n\n/***/ },\n/* 519 */\n/*!****************************************!*\\\n  !*** ./javascript/request-details.jsx ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _httpRequestHeader = __webpack_require__(/*! ./http-request-header */ 520);\\n\\nvar _httpRequestHeader2 = _interopRequireDefault(_httpRequestHeader);\\n\\nvar _messageExecutionHeader = __webpack_require__(/*! ./message-execution-header */ 521);\\n\\nvar _messageExecutionHeader2 = _interopRequireDefault(_messageExecutionHeader);\\n\\nvar _description = __webpack_require__(/*! ./description */ 522);\\n\\nvar _description2 = _interopRequireDefault(_description);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar ActivityTable = _react2.default.createClass({\\n    displayName: 'ActivityTable',\\n    render: function render() {\\n        var rows = this.props.activities.map(function (a, i) {\\n            return _react2.default.createElement(\\n                'tr',\\n                { key: i },\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    a.title\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    a.start\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    a.end\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    a.duration\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    a.inner_time\\n                )\\n            );\\n        });\\n\\n        return _react2.default.createElement(\\n            'table',\\n            { className: 'table table-striped', style: { width: 'auto' } },\\n            _react2.default.createElement(\\n                'tbody',\\n                null,\\n                _react2.default.createElement(\\n                    'tr',\\n                    null,\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Activity'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Starting'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Ending'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Total Time'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Inner Time'\\n                    )\\n                ),\\n                rows\\n            )\\n        );\\n    }\\n});\\n\\nvar LogTable = _react2.default.createClass({\\n    displayName: 'LogTable',\\n    render: function render() {\\n        var activities = {};\\n        this.props.activities.forEach(function (a) {\\n            activities[a.id] = a.title;\\n        });\\n\\n        var rows = this.props.steps.map(function (step, i) {\\n            return _react2.default.createElement(\\n                'tr',\\n                { key: i },\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { verticalAlign: \\\"top\\\" } },\\n                    activities[step.activity]\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\", verticalAlign: \\\"top\\\" } },\\n                    step.time\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { verticalAlign: \\\"top\\\" } },\\n                    _react2.default.createElement(_description2.default, step.log)\\n                )\\n            );\\n        });\\n\\n        return _react2.default.createElement(\\n            'table',\\n            { className: 'table table-striped', style: { width: 'auto' } },\\n            _react2.default.createElement(\\n                'tbody',\\n                null,\\n                _react2.default.createElement(\\n                    'tr',\\n                    null,\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Activity'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Request Time'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Log'\\n                    )\\n                ),\\n                rows\\n            )\\n        );\\n    }\\n});\\n\\nvar RequestDetails = _react2.default.createClass({\\n    displayName: 'RequestDetails',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        var params = this.props.params;\\n        FubuDiagnostics.get('Requests:request_Id', params, function (data) {\\n            _this.setState({ loading: false, data: data });\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        if (this.state.data.log == null) {\\n            return _react2.default.createElement(\\n                'div',\\n                null,\\n                'Request not found.'\\n            );\\n        }\\n\\n        var header = null;\\n        if (this.state.data.type == 'RoutedChain') {\\n            header = _react2.default.createElement(_httpRequestHeader2.default, this.state.data.log);\\n        }\\n\\n        if (this.state.data.type == 'HandlerChain') {\\n            header = _react2.default.createElement(_messageExecutionHeader2.default, this.state.data.log);\\n        }\\n\\n        return _react2.default.createElement(\\n            'div',\\n            null,\\n            header,\\n            _react2.default.createElement(\\n                'h3',\\n                null,\\n                'Performance Timings per Behavior and/or Partial'\\n            ),\\n            _react2.default.createElement(ActivityTable, this.state.data.log),\\n            _react2.default.createElement(\\n                'h3',\\n                null,\\n                'Log Activity'\\n            ),\\n            _react2.default.createElement(LogTable, this.state.data.log)\\n        );\\n    }\\n});\\n\\nFubuDiagnostics.section('fubumvc').add({\\n    title: 'Request Details',\\n    description: 'Http Request Visualization',\\n    key: 'request-details',\\n    route: 'Requests:request_Id',\\n    component: RequestDetails\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/request-details.jsx\\n// module id = 519\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/request-details.jsx?\");\n\n/***/ },\n/* 520 */\n/*!********************************************!*\\\n  !*** ./javascript/http-request-header.jsx ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"\\\"use strict\\\";\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nmodule.exports = _react2.default.createClass({\\n    displayName: \\\"exports\\\",\\n    url: function url() {\\n        var request = this.props.request;\\n\\n        var url = request[\\\"owin.RequestScheme\\\"] + \\\"://\\\" + request[\\\"owin.RequestHeaders\\\"][\\\"Host\\\"][0] + request[\\\"owin.RequestPathBase\\\"] + request[\\\"owin.RequestPath\\\"];\\n        if (request[\\\"RequestQueryString\\\"] && request[\\\"RequestQueryString\\\"].length > 0) {\\n            url = url + \\\"?\\\" + request[\\\"RequestQueryString\\\"];\\n        }\\n        return url;\\n    },\\n    requestHeaders: function requestHeaders() {\\n        var request = this.props.request;\\n        var requestHeaders = [];\\n        for (var key in request[\\\"owin.RequestHeaders\\\"]) {\\n            var item = _react2.default.createElement(\\n                \\\"li\\\",\\n                { key: key },\\n                _react2.default.createElement(\\n                    \\\"b\\\",\\n                    null,\\n                    key,\\n                    \\\": \\\"\\n                ),\\n                request[\\\"owin.RequestHeaders\\\"][key].join(' / ')\\n            );\\n            requestHeaders.push(item);\\n        }\\n        return requestHeaders;\\n    },\\n    responseHeaders: function responseHeaders() {\\n        var request = this.props.request;\\n        var responseHeaders = [];\\n        for (var key in request[\\\"owin.ResponseHeaders\\\"]) {\\n            var item = _react2.default.createElement(\\n                \\\"li\\\",\\n                { key: key },\\n                _react2.default.createElement(\\n                    \\\"b\\\",\\n                    null,\\n                    key,\\n                    \\\": \\\"\\n                ),\\n                request[\\\"owin.ResponseHeaders\\\"][key].join(' / ')\\n            );\\n            responseHeaders.push(item);\\n        }\\n        return responseHeaders;\\n    },\\n    render: function render() {\\n        var request = this.props.request;\\n        var requestHeaders = this.requestHeaders();\\n        var responseHeaders = this.responseHeaders();\\n\\n        var chainUrl = '#/fubumvc/chain-details/' + this.props.chain;\\n\\n        return _react2.default.createElement(\\n            \\\"div\\\",\\n            null,\\n            _react2.default.createElement(\\n                \\\"h4\\\",\\n                null,\\n                \\\"General\\\"\\n            ),\\n            _react2.default.createElement(\\n                \\\"ul\\\",\\n                null,\\n                _react2.default.createElement(\\n                    \\\"li\\\",\\n                    { key: \\\"chain\\\" },\\n                    _react2.default.createElement(\\n                        \\\"b\\\",\\n                        null,\\n                        \\\"Chain: \\\"\\n                    ),\\n                    _react2.default.createElement(\\n                        \\\"a\\\",\\n                        { href: chainUrl },\\n                        this.props.title\\n                    )\\n                ),\\n                _react2.default.createElement(\\n                    \\\"li\\\",\\n                    { key: \\\"time\\\" },\\n                    _react2.default.createElement(\\n                        \\\"b\\\",\\n                        null,\\n                        \\\"Time: \\\"\\n                    ),\\n                    this.props.time\\n                ),\\n                _react2.default.createElement(\\n                    \\\"li\\\",\\n                    { key: \\\"executiontime\\\" },\\n                    _react2.default.createElement(\\n                        \\\"b\\\",\\n                        null,\\n                        \\\"Execution Time: \\\"\\n                    ),\\n                    this.props[\\\"execution_time\\\"],\\n                    \\\" ms\\\"\\n                ),\\n                _react2.default.createElement(\\n                    \\\"li\\\",\\n                    { key: \\\"url\\\" },\\n                    _react2.default.createElement(\\n                        \\\"b\\\",\\n                        null,\\n                        \\\"Request URL: \\\"\\n                    ),\\n                    this.url()\\n                ),\\n                _react2.default.createElement(\\n                    \\\"li\\\",\\n                    { key: \\\"method\\\" },\\n                    _react2.default.createElement(\\n                        \\\"b\\\",\\n                        null,\\n                        \\\"Request Method: \\\"\\n                    ),\\n                    request[\\\"owin.RequestMethod\\\"]\\n                ),\\n                _react2.default.createElement(\\n                    \\\"li\\\",\\n                    { key: \\\"status\\\" },\\n                    _react2.default.createElement(\\n                        \\\"b\\\",\\n                        null,\\n                        \\\"Status Code: \\\"\\n                    ),\\n                    request[\\\"owin.ResponseStatusCode\\\"]\\n                )\\n            ),\\n            _react2.default.createElement(\\n                \\\"h4\\\",\\n                null,\\n                \\\"Request Headers\\\"\\n            ),\\n            _react2.default.createElement(\\n                \\\"ul\\\",\\n                null,\\n                requestHeaders\\n            ),\\n            _react2.default.createElement(\\n                \\\"h4\\\",\\n                null,\\n                \\\"Response Headers\\\"\\n            ),\\n            _react2.default.createElement(\\n                \\\"ul\\\",\\n                null,\\n                responseHeaders\\n            )\\n        );\\n    }\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/http-request-header.jsx\\n// module id = 520\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/http-request-header.jsx?\");\n\n/***/ },\n/* 521 */\n/*!*************************************************!*\\\n  !*** ./javascript/message-execution-header.jsx ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nmodule.exports = _react2.default.createClass({\\n    displayName: 'exports',\\n    render: function render() {\\n        var request = this.props.request;\\n\\n        var chainUrl = '#/fubumvc/chain-details/' + this.props.chain;\\n\\n        var requestHeaders = [];\\n        for (var key in request.headers) {\\n            var item = _react2.default.createElement(\\n                'li',\\n                { key: key },\\n                _react2.default.createElement(\\n                    'b',\\n                    null,\\n                    key,\\n                    ': '\\n                ),\\n                request.headers[key]\\n            );\\n\\n            requestHeaders.push(item);\\n        }\\n\\n        return _react2.default.createElement(\\n            'div',\\n            null,\\n            _react2.default.createElement(\\n                'h4',\\n                null,\\n                'General'\\n            ),\\n            _react2.default.createElement(\\n                'ul',\\n                null,\\n                _react2.default.createElement(\\n                    'li',\\n                    { key: 'chain' },\\n                    _react2.default.createElement(\\n                        'b',\\n                        null,\\n                        'Chain: '\\n                    ),\\n                    _react2.default.createElement(\\n                        'a',\\n                        { href: chainUrl },\\n                        this.props.title\\n                    )\\n                ),\\n                _react2.default.createElement(\\n                    'li',\\n                    { key: 'time' },\\n                    _react2.default.createElement(\\n                        'b',\\n                        null,\\n                        'Time: '\\n                    ),\\n                    this.props.time\\n                ),\\n                _react2.default.createElement(\\n                    'li',\\n                    { key: 'execution-time' },\\n                    _react2.default.createElement(\\n                        'b',\\n                        null,\\n                        'Execution Time: '\\n                    ),\\n                    this.props[\\\"execution_time\\\"],\\n                    ' ms'\\n                )\\n            ),\\n            _react2.default.createElement(\\n                'h4',\\n                null,\\n                'Envelope Headers'\\n            ),\\n            _react2.default.createElement(\\n                'ul',\\n                null,\\n                requestHeaders\\n            )\\n        );\\n    }\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/message-execution-header.jsx\\n// module id = 521\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/message-execution-header.jsx?\");\n\n/***/ },\n/* 522 */\n/*!************************************!*\\\n  !*** ./javascript/description.jsx ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _descriptionBody = __webpack_require__(/*! ./description-body */ 516);\\n\\nvar _descriptionBody2 = _interopRequireDefault(_descriptionBody);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar Description = _react2.default.createClass({\\n    displayName: 'Description',\\n    render: function render() {\\n        return _react2.default.createElement(\\n            'div',\\n            { className: 'description' },\\n            _react2.default.createElement(\\n                'h4',\\n                null,\\n                this.props.title\\n            ),\\n            _react2.default.createElement(_descriptionBody2.default, this.props)\\n        );\\n    }\\n});\\n\\nmodule.exports = Description;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/description.jsx\\n// module id = 522\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/description.jsx?\");\n\n/***/ },\n/* 523 */\n/*!**********************************!*\\\n  !*** ./javascript/packaging.jsx ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar Packaging = _react2.default.createClass({\\n    displayName: 'Packaging',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        FubuDiagnostics.get('PackageLog:package_logs', {}, function (data) {\\n            _.assign(data, { loading: false });\\n\\n            _this.setState(data);\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        var rows = this.state.logs.map(function (log, i) {\\n            var row = _react2.default.createElement(\\n                'tr',\\n                { key: i },\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    log.Type\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    log.Description\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    log.Provenance\\n                )\\n            );\\n\\n            if (log.FullTraceText != '' && log.FullTraceText != null) {\\n                return [row, _react2.default.createElement(\\n                    'tr',\\n                    null,\\n                    _react2.default.createElement(\\n                        'td',\\n                        { colSpan: '4', className: 'bg-info' },\\n                        log.FullTraceText\\n                    )\\n                )];\\n            }\\n\\n            return row;\\n        });\\n\\n        rows = _.flatten(rows);\\n\\n        return _react2.default.createElement(\\n            'div',\\n            null,\\n            _react2.default.createElement(\\n                'h2',\\n                null,\\n                'Package Loading Log'\\n            ),\\n            _react2.default.createElement(\\n                'table',\\n                { className: 'table', style: { width: 'auto' } },\\n                _react2.default.createElement(\\n                    'thead',\\n                    null,\\n                    _react2.default.createElement(\\n                        'tr',\\n                        null,\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'Type'\\n                        ),\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'Description'\\n                        ),\\n                        _react2.default.createElement(\\n                            'th',\\n                            null,\\n                            'Provenance'\\n                        )\\n                    )\\n                ),\\n                _react2.default.createElement(\\n                    'tbody',\\n                    null,\\n                    rows\\n                )\\n            )\\n        );\\n    }\\n});\\n\\nFubuDiagnostics.section('fubumvc').add({\\n    title: 'Package Loading',\\n    description: 'Bottle Loading Logs',\\n    key: 'package-loading',\\n    component: Packaging\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/packaging.jsx\\n// module id = 523\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/packaging.jsx?\");\n\n/***/ },\n/* 524 */\n/*!****************************************!*\\\n  !*** ./javascript/client-messages.jsx ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar MessageTable = _react2.default.createClass({\\n    displayName: 'MessageTable',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        FubuDiagnostics.get('ClientMessages:clientmessages', {}, function (data) {\\n            _.assign(data, { loading: false });\\n\\n            _this.setState(data);\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        if (this.state.messages.length == 0) {\\n            return _react2.default.createElement(\\n                'h1',\\n                null,\\n                'No client messages in this application!'\\n            );\\n        }\\n\\n        var rows = this.state.messages.map(function (r, i) {\\n            var url = '#fubumvc/chain-details/' + props.message.chain;\\n            return _react2.default.createElement(\\n                'tr',\\n                { key: this.props.message.chain },\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    _react2.default.createElement(\\n                        'a',\\n                        { href: url, title: 'View the chain visualization for this message type' },\\n                        this.props.message.type\\n                    )\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    this.props.message.query\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    this.props.message.resource\\n                )\\n            );\\n        });\\n\\n        return _react2.default.createElement(\\n            'table',\\n            { className: 'table table-striped' },\\n            _react2.default.createElement(\\n                'thead',\\n                null,\\n                _react2.default.createElement(\\n                    'tr',\\n                    null,\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Client Side Name'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Query Model'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Resource Model'\\n                    )\\n                )\\n            ),\\n            _react2.default.createElement(\\n                'tbody',\\n                null,\\n                rows\\n            )\\n        );\\n    }\\n});\\n\\nFubuDiagnostics.section('fubumvc').add({\\n    title: 'Client Message Types',\\n    description: 'A list of all the message types available for aggregated querying',\\n    key: 'client-messages',\\n    component: MessageTable\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/client-messages.jsx\\n// module id = 524\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/client-messages.jsx?\");\n\n/***/ },\n/* 525 */\n/*!************************************!*\\\n  !*** ./javascript/performance.jsx ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar PerformanceSummary = _react2.default.createClass({\\n    displayName: 'PerformanceSummary',\\n    getInitialState: function getInitialState() {\\n        return {\\n            loading: true\\n        };\\n    },\\n    componentDidMount: function componentDidMount() {\\n        var _this = this;\\n\\n        FubuDiagnostics.get('Performance:performance', null, function (data) {\\n            _this.setState({ loading: false, chains: data });\\n        });\\n    },\\n    render: function render() {\\n        if (this.state.loading) {\\n            return _react2.default.createElement(\\n                'p',\\n                null,\\n                'Loading...'\\n            );\\n        }\\n\\n        var rows = this.state.chains.map(function (chain, i) {\\n            var url = \\\"#/fubumvc/chain-details/\\\" + chain.hash;\\n\\n            return _react2.default.createElement(\\n                'tr',\\n                { key: i },\\n                _react2.default.createElement(\\n                    'td',\\n                    null,\\n                    _react2.default.createElement(\\n                        'a',\\n                        { href: url },\\n                        chain.title\\n                    )\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    chain.hits\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    chain.total\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    chain.average\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    chain.exceptions\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    chain.min\\n                ),\\n                _react2.default.createElement(\\n                    'td',\\n                    { style: { textAlign: \\\"right\\\" } },\\n                    chain.max\\n                )\\n            );\\n        });\\n\\n        return _react2.default.createElement(\\n            'table',\\n            { className: 'table table-striped', style: { width: 'auto' } },\\n            _react2.default.createElement(\\n                'thead',\\n                null,\\n                _react2.default.createElement(\\n                    'tr',\\n                    null,\\n                    _react2.default.createElement(\\n                        'th',\\n                        null,\\n                        'Chain'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Hits'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Total'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Average'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Exception %'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Min Time'\\n                    ),\\n                    _react2.default.createElement(\\n                        'th',\\n                        { style: { textAlign: \\\"right\\\" } },\\n                        'Max Time'\\n                    )\\n                )\\n            ),\\n            _react2.default.createElement(\\n                'tbody',\\n                null,\\n                rows\\n            )\\n        );\\n    }\\n});\\n\\nFubuDiagnostics.addSection({\\n    title: 'Performance',\\n    description: 'Performance statistics for all behavior chains in the running system',\\n    key: 'performance'\\n}).add({\\n    title: 'Performance Summary',\\n    description: 'Performance overview for all behavior chains',\\n    key: 'summary',\\n    component: PerformanceSummary\\n});\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/performance.jsx\\n// module id = 525\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/performance.jsx?\");\n\n/***/ },\n/* 526 */\n/*!******************************!*\\\n  !*** ./javascript/shell.jsx ***!\n  \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _reactDom = __webpack_require__(/*! react-dom */ 110);\\n\\nvar _reactDom2 = _interopRequireDefault(_reactDom);\\n\\nvar _lodash = __webpack_require__(/*! lodash */ 32);\\n\\nvar _lodash2 = _interopRequireDefault(_lodash);\\n\\nvar _reactRouter = __webpack_require__(/*! react-router */ 36);\\n\\nvar _header = __webpack_require__(/*! ./header */ 527);\\n\\nvar _header2 = _interopRequireDefault(_header);\\n\\nvar _dashboard = __webpack_require__(/*! ./dashboard */ 528);\\n\\nvar _dashboard2 = _interopRequireDefault(_dashboard);\\n\\nvar _reactBootstrap = __webpack_require__(/*! react-bootstrap */ 263);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar count = 0;\\n\\nvar App = _react2.default.createClass({\\n    displayName: 'App',\\n    getHandlerKey: function getHandlerKey() {\\n        count++;\\n        return count;\\n    },\\n    render: function render() {\\n        var style = {\\n            paddingLeft: '25px'\\n        };\\n\\n        return _react2.default.createElement(\\n            _reactBootstrap.Grid,\\n            { fluid: true },\\n            _react2.default.createElement(\\n                _reactBootstrap.Row,\\n                null,\\n                _react2.default.createElement(_header2.default, null)\\n            ),\\n            _react2.default.createElement(\\n                _reactBootstrap.Row,\\n                { style: style },\\n                _react2.default.cloneElement(this.props.children, { key: this.getHandlerKey() })\\n            )\\n        );\\n    }\\n});\\n\\nmodule.exports = {\\n    start: function start() {\\n        var sectionRoutes = _lodash2.default.flatten(FubuDiagnostics.sections.map(function (section, i) {\\n            return section.toRoutes(i);\\n        }));\\n\\n        _reactDom2.default.render(_react2.default.createElement(\\n            _reactRouter.Router,\\n            { key: \\\"router\\\", history: _reactRouter.hashHistory },\\n            _react2.default.createElement(\\n                _reactRouter.Route,\\n                { key: \\\"rootroute\\\", name: 'app', path: '/', component: App },\\n                _react2.default.createElement(_reactRouter.IndexRoute, { key: \\\"indexroute\\\", component: _dashboard2.default }),\\n                sectionRoutes\\n            )\\n        ), document.getElementById('diagnostics'));\\n    }\\n};\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/shell.jsx\\n// module id = 526\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/shell.jsx?\");\n\n/***/ },\n/* 527 */\n/*!*******************************!*\\\n  !*** ./javascript/header.jsx ***!\n  \\*******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _reactBootstrap = __webpack_require__(/*! react-bootstrap */ 263);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\\n\\nfunction Image(props) {\\n    var active = props.active,\\n        activeHref = props.activeHref,\\n        activeKey = props.activeKey,\\n        rest = _objectWithoutProperties(props, ['active', 'activeHref', 'activeKey']);\\n\\n    return _react2.default.createElement('img', rest);\\n}\\n\\nfunction Anchor(props) {\\n    var active = props.active,\\n        activeHref = props.activeHref,\\n        activeKey = props.activeKey,\\n        rest = _objectWithoutProperties(props, ['active', 'activeHref', 'activeKey']);\\n\\n    return _react2.default.createElement('a', rest);\\n}\\n\\nfunction StrippedDownButton(props) {\\n    var active = props.active,\\n        activeHref = props.activeHref,\\n        activeKey = props.activeKey,\\n        rest = _objectWithoutProperties(props, ['active', 'activeHref', 'activeKey']);\\n\\n    return _react2.default.createElement(_reactBootstrap.DropdownButton, rest);\\n}\\n\\nvar Header = _react2.default.createClass({\\n    displayName: 'Header',\\n    render: function render() {\\n        var path = this.props.location;\\n        var sectionLinks = [];\\n        if (path != '/' && path) {\\n            var sectionKey = path.split('/')[1];\\n            var activeSection = FubuDiagnostics.section(sectionKey);\\n            sectionLinks = activeSection.activeViews().map(function (view) {\\n                return _react2.default.createElement(\\n                    _reactBootstrap.NavItem,\\n                    { key: sectionKey, href: view.anchor, title: view.description },\\n                    view.title\\n                );\\n            });\\n        }\\n\\n        var sectionItems = FubuDiagnostics.sections.map(function (section) {\\n            var onclick = function onclick() {\\n                window.location = section.anchor;\\n            };\\n\\n            return _react2.default.createElement(\\n                _reactBootstrap.NavItem,\\n                { key: section.key, onClick: onclick, href: section.anchor, title: section.description },\\n                section.title\\n            );\\n        });\\n\\n        return _react2.default.createElement(\\n            'div',\\n            null,\\n            _react2.default.createElement(\\n                _reactBootstrap.Navbar,\\n                { inverse: true, id: 'top-nav' },\\n                _react2.default.createElement(\\n                    _reactBootstrap.Nav,\\n                    null,\\n                    _react2.default.createElement(Image, { src: '/_fubu/icon', style: { marginTop: \\\"5px\\\", marginRight: '20px' } })\\n                ),\\n                _react2.default.createElement(\\n                    _reactBootstrap.Nav,\\n                    null,\\n                    _react2.default.createElement(\\n                        Anchor,\\n                        { className: 'navbar-brand', href: '#/' },\\n                        'FubuMVC Diagnostics'\\n                    ),\\n                    sectionLinks\\n                ),\\n                _react2.default.createElement(\\n                    _reactBootstrap.Nav,\\n                    null,\\n                    _react2.default.createElement(\\n                        StrippedDownButton,\\n                        { id: 'top-nav-dropbutton', key: 1, title: 'Sections', style: { float: 'right' } },\\n                        sectionItems\\n                    )\\n                )\\n            )\\n        );\\n    }\\n});\\n\\nmodule.exports = Header;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/header.jsx\\n// module id = 527\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/header.jsx?\");\n\n/***/ },\n/* 528 */\n/*!**********************************!*\\\n  !*** ./javascript/dashboard.jsx ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"'use strict';\\n\\nvar _react = __webpack_require__(/*! react */ 1);\\n\\nvar _react2 = _interopRequireDefault(_react);\\n\\nvar _reactBootstrap = __webpack_require__(/*! react-bootstrap */ 263);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar SectionLinks = __webpack_require__(/*! ./section-links */ 101);\\n\\nvar AllLinks = _react2.default.createClass({\\n    displayName: 'AllLinks',\\n    render: function render() {\\n        var style = {\\n            marginLeft: '10px'\\n        };\\n\\n        var items = FubuDiagnostics.sections.map(function (s) {\\n            var header = null;\\n            if (s.activeViews().length == 0) {\\n                header = _react2.default.createElement(\\n                    'h4',\\n                    null,\\n                    _react2.default.createElement(\\n                        'a',\\n                        { href: s.anchor },\\n                        s.title\\n                    ),\\n                    _react2.default.createElement(\\n                        'small',\\n                        { style: style },\\n                        s.description\\n                    )\\n                );\\n            } else {\\n                header = _react2.default.createElement(\\n                    'h4',\\n                    null,\\n                    _react2.default.createElement(\\n                        'span',\\n                        null,\\n                        s.title\\n                    ),\\n                    _react2.default.createElement(\\n                        'small',\\n                        { style: style },\\n                        s.description\\n                    )\\n                );\\n            }\\n\\n            return _react2.default.createElement(\\n                'div',\\n                { key: s.key },\\n                header,\\n                _react2.default.createElement(SectionLinks, { key: s.key, section: s }),\\n                _react2.default.createElement('hr', null)\\n            );\\n        });\\n\\n        return _react2.default.createElement(\\n            'div',\\n            { key: items.length },\\n            items\\n        );\\n    }\\n});\\n\\nvar Dashboard = _react2.default.createClass({\\n    displayName: 'Dashboard',\\n    render: function render() {\\n        return _react2.default.createElement(\\n            _reactBootstrap.Row,\\n            null,\\n            _react2.default.createElement(\\n                _reactBootstrap.Col,\\n                { xs: 6, md: 6 },\\n                _react2.default.createElement(\\n                    'h3',\\n                    null,\\n                    'Getting Started'\\n                ),\\n                _react2.default.createElement(\\n                    'p',\\n                    null,\\n                    'You are viewing the Advanced Diagnostics package that provides detailed insight into the configuration and runtime of your application.'\\n                ),\\n                _react2.default.createElement(\\n                    'ol',\\n                    null,\\n                    _react2.default.createElement(\\n                        'li',\\n                        null,\\n                        _react2.default.createElement(\\n                            'strong',\\n                            null,\\n                            _react2.default.createElement(\\n                                'a',\\n                                { href: '#fubumvc/endpoints' },\\n                                ' Explore your application'\\n                            )\\n                        ),\\n                        _react2.default.createElement(\\n                            'p',\\n                            null,\\n                            'The endpoint explorer allows you to sort and filter through the routes, endpoints, and chains within your application. You can also drill into the details and visualize the behavior chain.'\\n                        )\\n                    ),\\n                    _react2.default.createElement(\\n                        'li',\\n                        null,\\n                        _react2.default.createElement(\\n                            'strong',\\n                            null,\\n                            _react2.default.createElement(\\n                                'a',\\n                                { href: '#fubumvc/requests' },\\n                                'Explore the request history'\\n                            )\\n                        ),\\n                        _react2.default.createElement(\\n                            'p',\\n                            null,\\n                            'The requests explorer allows you to see the most recent requests that have been recorded within your application. You can drill into the details of each request to visualize the various steps that were taken to issue the response.'\\n                        )\\n                    ),\\n                    _react2.default.createElement(\\n                        'li',\\n                        null,\\n                        _react2.default.createElement(\\n                            'strong',\\n                            null,\\n                            _react2.default.createElement(\\n                                'a',\\n                                { href: 'http://darthfubumvc.github.io/fubumvc/' },\\n                                'Browse the documentation'\\n                            )\\n                        ),\\n                        _react2.default.createElement(\\n                            'p',\\n                            null,\\n                            'Browse through our topics and read more about the our APIs.'\\n                        )\\n                    ),\\n                    _react2.default.createElement(\\n                        'li',\\n                        null,\\n                        _react2.default.createElement(\\n                            'strong',\\n                            null,\\n                            _react2.default.createElement(\\n                                'a',\\n                                { href: 'https://groups.google.com/forum/#!forum/fubumvc-devel' },\\n                                'If you\\\\'re really stuck'\\n                            )\\n                        ),\\n                        _react2.default.createElement(\\n                            'p',\\n                            null,\\n                            'Visit our user group to learn how to get plugged into our vibrant community. You\\\\'ll get your questions answered in no time.'\\n                        )\\n                    )\\n                )\\n            ),\\n            _react2.default.createElement(\\n                _reactBootstrap.Col,\\n                { xs: 6, md: 6 },\\n                _react2.default.createElement(AllLinks, null)\\n            )\\n        );\\n    }\\n});\\n\\nmodule.exports = Dashboard;\\n\\n//////////////////\\n// WEBPACK FOOTER\\n// ./javascript/dashboard.jsx\\n// module id = 528\\n// module chunks = 2\\n//# sourceURL=webpack:///./javascript/dashboard.jsx?\");\n\n/***/ }\n/******/ ]);"
  },
  {
    "path": "src/DiagnosticsHarness/paket.references",
    "content": "BottleServiceRunner\nFubuCore\nHtmlTags\nLightningDB\nLightningQueues\nLightningQueues.Storage.LMDB\nNewtonsoft.Json\nOwin\nstructuremap\nTopShelf\nNLog\nMarten\n"
  },
  {
    "path": "src/FakeBottle/FakeBottle.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{1403B489-5AD5-4664-BC24-DBDD48719EE3}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>FakeBottle</RootNamespace>\n    <AssemblyName>FakeBottle</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Bottles\">\n      <HintPath>..\\packages\\Bottles\\lib\\Bottles.dll</HintPath>\n    </Reference>\n    <Reference Include=\"FubuLocalization\">\n      <HintPath>..\\packages\\FubuLocalization\\lib\\FubuLocalization.dll</HintPath>\n    </Reference>\n    <Reference Include=\"FubuMVC.Core\">\n      <HintPath>..\\packages\\FubuMVC.Core\\lib\\net40\\FubuMVC.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"FakeBottleFubuDiagnostics.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"HtmlTags\">\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/FakeBottle/FakeBottleFubuDiagnostics.cs",
    "content": "﻿using System.ComponentModel;\r\n\r\nnamespace FakeBottle\r\n{\r\n    public class FubuDiagnosticsConfiguration\r\n    {\r\n        public string Url = \"fake\";\r\n        public string Title = \"Fake\";\r\n        public string Description = \"Some fake diagnostics\";\r\n    }\r\n\r\n    public class FakeBottleFubuDiagnostics\r\n    {\r\n        [Description(\"Three\")]\r\n        public string get_three()\r\n        {\r\n            return \"Three\";\r\n        }\r\n\r\n        [Description(\"Four\")]\r\n        public string get_four()\r\n        {\r\n            return \"Four\";\r\n        } \r\n    }\r\n}"
  },
  {
    "path": "src/FakeBottle/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\nusing FubuMVC.Core;\r\n\r\n[assembly: AssemblyTitle(\"FakeBottle\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"Extend Health Inc\")]\r\n[assembly: AssemblyProduct(\"FakeBottle\")]\r\n[assembly: AssemblyCopyright(\"Copyright © Extend Health Inc 2013\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"3b99cc40-fad9-4481-b67d-8e3ef6c32ecc\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Build and Revision Numbers \r\n// by using the '*' as shown below:\r\n// [assembly: AssemblyVersion(\"1.0.*\")]\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n[assembly: FubuModule]"
  },
  {
    "path": "src/FakeBottle/paket.references",
    "content": "FubuCore\nHtmlTags"
  },
  {
    "path": "src/Fubu/Fubu.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{90DBE31C-948D-47AF-8C17-0056511A7313}</ProjectGuid>\r\n    <OutputType>Exe</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>Fubu</RootNamespace>\r\n    <AssemblyName>Fubu</AssemblyName>\r\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\r\n    <TargetFrameworkProfile>\r\n    </TargetFrameworkProfile>\r\n    <FileAlignment>512</FileAlignment>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>\r\n    <Prefer32Bit>false</Prefer32Bit>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>\r\n    <Prefer32Bit>false</Prefer32Bit>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"Microsoft.Build.Engine\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"System.DirectoryServices\" />\r\n    <Reference Include=\"System.Web\" />\r\n    <Reference Include=\"System.Xml\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"..\\CommonAssemblyInfo.cs\">\r\n      <Link>CommonAssemblyInfo.cs</Link>\r\n    </Compile>\r\n    <Compile Include=\"Program.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"Running\\FubuRegistryChooser.cs\" />\r\n    <Compile Include=\"Running\\ApplicationStarted.cs\" />\r\n    <Compile Include=\"Running\\FubuRegistryFinder.cs\" />\r\n    <Compile Include=\"Running\\ApplicationRequest.cs\" />\r\n    <Compile Include=\"Running\\BrowserDriver.cs\" />\r\n    <Compile Include=\"Running\\FubuMvcApplicationActivator.cs\" />\r\n    <Compile Include=\"Running\\IFubuRegistryFinder.cs\" />\r\n    <Compile Include=\"Running\\IFubuMvcApplicationActivator.cs\" />\r\n    <Compile Include=\"Running\\IMessaging.cs\" />\r\n    <Compile Include=\"Running\\InvalidApplication.cs\" />\r\n    <Compile Include=\"Running\\Messaging.cs\" />\r\n    <Compile Include=\"Running\\RecycleApplication.cs\" />\r\n    <Compile Include=\"Running\\RemoteApplication.cs\" />\r\n    <Compile Include=\"Running\\RemoteFubuMvcBootstrapper.cs\" />\r\n    <Compile Include=\"Running\\RemoteFubuMvcProxy.cs\" />\r\n    <Compile Include=\"Running\\RunCommand.cs\" />\r\n    <Compile Include=\"Running\\StartApplication.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"app.config\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"file-patterns.txt\">\r\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r\n    </Content>\r\n    <EmbeddedResource Include=\"Running\\WebsocketsRefresh.txt\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\r\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\r\n      <Name>FubuMVC.Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\r\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\r\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Dynamic.Runtime;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Runtime.Serialization.Primitives;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\r\n  </Target>\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0' Or $(TargetFrameworkVersion) == 'v3.5' Or $(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"DotNetZip\">\r\n          <HintPath>..\\..\\packages\\DotNetZip\\lib\\net20\\DotNetZip.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Fleck\">\r\n          <HintPath>..\\..\\packages\\Fleck\\lib\\net40\\Fleck.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <ItemGroup>\r\n    <Reference Include=\"FubuCore\">\r\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\r\n      <Private>True</Private>\r\n      <Paket>True</Paket>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"HtmlTags\">\r\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\net40\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\net40\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\net40\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkProfile) == 'Profile3') Or ($(TargetFrameworkProfile) == 'Profile18') Or ($(TargetFrameworkProfile) == 'Profile23') Or ($(TargetFrameworkProfile) == 'Profile41') Or ($(TargetFrameworkProfile) == 'Profile46')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+sl4+win8\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+sl4+win8\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+sl4+win8\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkProfile) == 'Profile88') Or ($(TargetFrameworkProfile) == 'Profile96') Or ($(TargetFrameworkProfile) == 'Profile104')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+sl4+win8+wp71+wpa81\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkProfile) == 'Profile36') Or ($(TargetFrameworkProfile) == 'Profile143') Or ($(TargetFrameworkProfile) == 'Profile154')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+sl4+win8+wp8+wpa81\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+sl4+win8+wp8+wpa81\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+sl4+win8+wp8+wpa81\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkProfile) == 'Profile14') Or ($(TargetFrameworkProfile) == 'Profile19') Or ($(TargetFrameworkProfile) == 'Profile24') Or ($(TargetFrameworkProfile) == 'Profile37') Or ($(TargetFrameworkProfile) == 'Profile42') Or ($(TargetFrameworkProfile) == 'Profile47') Or ($(TargetFrameworkProfile) == 'Profile136') Or ($(TargetFrameworkProfile) == 'Profile147') Or ($(TargetFrameworkProfile) == 'Profile158') Or ($(TargetFrameworkProfile) == 'Profile225') Or ($(TargetFrameworkProfile) == 'Profile240') Or ($(TargetFrameworkProfile) == 'Profile255') Or ($(TargetFrameworkProfile) == 'Profile328') Or ($(TargetFrameworkProfile) == 'Profile336') Or ($(TargetFrameworkProfile) == 'Profile344')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+sl5+win8+wp8+wpa81\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+sl5+win8+wp8+wpa81\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+sl5+win8+wp8+wpa81\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkProfile) == 'Profile5') Or ($(TargetFrameworkProfile) == 'Profile6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+win8\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+win8\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+win8\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkProfile) == 'Profile92') Or ($(TargetFrameworkProfile) == 'Profile102')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+win8+wp8+wpa81\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+win8+wp8+wpa81\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\portable-net40+win8+wp8+wpa81\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v4.0'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\sl4\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\sl4\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\sl4\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v7.1'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\sl4-windowsphone71\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\sl4-windowsphone71\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\sl4-windowsphone71\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\sl5\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\sl5\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Bcl\\lib\\sl5\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Http.WebRequest\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Net.Http\\lib\\net40\\System.Net.Http.WebRequest.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Net.Http\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Net.Http\\lib\\net40\\System.Net.Http.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Http\">\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.Net.Http.WebRequest\">\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Owin\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Owin\\lib\\net45\\Microsoft.Owin.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Owin.Host.HttpListener\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Owin.Host.HttpListener\\lib\\net45\\Microsoft.Owin.Host.HttpListener.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Owin.Hosting\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Owin.Hosting\\lib\\net45\\Microsoft.Owin.Hosting.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Win32.Primitives\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net20\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net35\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net40\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\netstandard1.0\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0') Or ($(TargetFrameworkProfile) == 'Profile5') Or ($(TargetFrameworkProfile) == 'Profile6') Or ($(TargetFrameworkProfile) == 'Profile14') Or ($(TargetFrameworkProfile) == 'Profile19') Or ($(TargetFrameworkProfile) == 'Profile24') Or ($(TargetFrameworkProfile) == 'Profile37') Or ($(TargetFrameworkProfile) == 'Profile42') Or ($(TargetFrameworkProfile) == 'Profile47') Or ($(TargetFrameworkProfile) == 'Profile92') Or ($(TargetFrameworkProfile) == 'Profile102') Or ($(TargetFrameworkProfile) == 'Profile136') Or ($(TargetFrameworkProfile) == 'Profile147') Or ($(TargetFrameworkProfile) == 'Profile158') Or ($(TargetFrameworkProfile) == 'Profile225') Or ($(TargetFrameworkProfile) == 'Profile240') Or ($(TargetFrameworkProfile) == 'Profile255') Or ($(TargetFrameworkProfile) == 'Profile328') Or ($(TargetFrameworkProfile) == 'Profile336') Or ($(TargetFrameworkProfile) == 'Profile344')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net40+sl5+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'MonoAndroid') Or ($(TargetFrameworkIdentifier) == 'MonoTouch') Or ($(TargetFrameworkIdentifier) == 'Xamarin.iOS') Or ($(TargetFrameworkIdentifier) == 'Xamarin.Mac') Or ($(TargetFrameworkProfile) == 'Profile7') Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile32') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile78') Or ($(TargetFrameworkProfile) == 'Profile111') Or ($(TargetFrameworkProfile) == 'Profile151') Or ($(TargetFrameworkProfile) == 'Profile157') Or ($(TargetFrameworkProfile) == 'Profile259')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Owin\">\r\n          <HintPath>..\\..\\packages\\Owin\\lib\\net40\\Owin.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Spark\">\r\n          <HintPath>..\\..\\packages\\Spark\\lib\\NET35\\Spark.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Spark\">\r\n          <HintPath>..\\..\\packages\\Spark\\lib\\NET40\\Spark.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.AppContext\">\r\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Buffers\">\r\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Console\">\r\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tools\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Dynamic.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.0\\System.Dynamic.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Dynamic.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.3\\System.Dynamic.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Calendars\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression.ZipFile\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Http\">\r\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"mscorlib\">\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Resources.ResourceManager\">\r\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Handles\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Loader\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Numerics\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.0\\System.Runtime.Serialization.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.3\\System.Runtime.Serialization.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Cng\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Csp\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Timer\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n</Project>"
  },
  {
    "path": "src/Fubu/Program.cs",
    "content": "﻿using System;\r\nusing FubuCore.CommandLine;\r\n\r\nnamespace Fubu\r\n{\r\n    public class Program\r\n    {\r\n        private static bool success;\r\n\r\n        public static int Main(string[] args)\r\n        {\r\n            try\r\n            {\r\n                var factory = new CommandFactory();\r\n                factory.RegisterCommands(typeof (IFubuCommand).Assembly);\r\n                factory.RegisterCommands(typeof (Program).Assembly);\r\n\r\n                var executor = new CommandExecutor(factory);\r\n                success = executor.Execute(args);\r\n            }\r\n            catch (CommandFailureException e)\r\n            {\r\n                Console.ForegroundColor = ConsoleColor.Red;\r\n                Console.WriteLine(\"ERROR: \" + e.Message);\r\n                Console.ResetColor();\r\n                return 1;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.ForegroundColor = ConsoleColor.Red;\r\n                Console.WriteLine(\"ERROR: \" + ex);\r\n                Console.ResetColor();\r\n                return 1;\r\n            }\r\n\r\n            return success ? 0 : 1;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/Fubu/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n\r\n[assembly: AssemblyTitle(\"Fubu\")]"
  },
  {
    "path": "src/Fubu/Running/ApplicationRequest.cs",
    "content": "﻿using System;\r\nusing System.ComponentModel;\r\nusing System.IO;\r\nusing FubuCore;\r\nusing FubuCore.CommandLine;\r\n\r\nnamespace Fubu.Running\r\n{\r\n    public enum BrowserType\r\n    {\r\n        Chrome,\r\n        Firefox\r\n    }\r\n\r\n    public class ApplicationRequest\r\n    {\r\n        private string _directoryFlag;\r\n\r\n        public ApplicationRequest()\r\n        {\r\n            PortFlag = 5500;\r\n            DirectoryFlag = Environment.CurrentDirectory;\r\n            BuildFlag = \"Debug\";\r\n            ModeFlag = \"Development\";\r\n        }\r\n\r\n        [Description(\r\n            \"If you are running a class library, sets the preference for the profile to load.  As in bin/[BuildFlag].  Default is debug\"\r\n            )]\r\n        public string BuildFlag { get; set; }\r\n\r\n        [Description(\"IP Port.  Default is 5500\")]\r\n        public int PortFlag { get; set; }\r\n\r\n        [Description(\"Specific name of a FubuRegistry class that builds this application\")]\r\n        public string RegistryFlag { get; set; } // this is optional\r\n\r\n        [Description(\"If set, overrides the name of the configuration file for the FubuMVC application AppDomain to use\"\r\n            )]\r\n        public string ConfigFlag { get; set; }\r\n\r\n        [Description(\"Overrides the directory that is the physical path of the running fubumvc application\")]\r\n        public string DirectoryFlag\r\n        {\r\n            get { return _directoryFlag; }\r\n            set\r\n            {\r\n                _directoryFlag = value.ToFullPath();\r\n            }\r\n        }\r\n\r\n        // This is mandatory\r\n\r\n        [Description(\"Start the default browser to the home page of this application\")]\r\n        public bool OpenFlag { get; set; }\r\n\r\n        [Description(\"Open a 'watched' browser with WebDriver to refresh the page on content or application recycles\")]\r\n        public bool WatchedFlag { get; set; }\r\n\r\n        [Description(\"Unless this flag is set, the fubumvc application will run in Development mode\")]\r\n        [FlagAlias(\"mode\")]\r\n        public string ModeFlag { get; set; }\r\n\r\n\r\n        public string DetermineBinPath()\r\n        {\r\n            var buildPath = DirectoryFlag.AppendPath(\"bin\", BuildFlag);\r\n            if (Directory.Exists(buildPath))\r\n            {\r\n                return Path.Combine(\"bin\", BuildFlag);\r\n            }\r\n\r\n            var binPath = DirectoryFlag.AppendPath(\"bin\");\r\n            if (Directory.Exists(binPath))\r\n            {\r\n                return \"bin\";\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        [IgnoreOnCommandLine]\r\n        public string AutoRefreshWebSocketsAddress { get; set; }\r\n\r\n        [Description(\"Set an optional relative url to open first\")]\r\n        public string UrlFlag { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/Fubu/Running/ApplicationStarted.cs",
    "content": "﻿using System;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Assets;\r\n\r\nnamespace Fubu.Running\r\n{\r\n    public class ApplicationStarted\r\n    {\r\n        public FileWatcherManifest Watcher { get; set; }\r\n        public string HomeAddress { get; set; }\r\n        public string ApplicationName { get; set; }\r\n        public DateTime Timestamp { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/Fubu/Running/BrowserDriver.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing Fleck;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace Fubu.Running\r\n{\r\n    public class BrowserDriver : IDisposable\r\n    {\r\n        private int _port;\r\n        private WebSocketServer _server;\r\n        private string _webSocketsAddress;\r\n        private readonly IList<IWebSocketConnection> _sockets = new List<IWebSocketConnection>();\r\n\r\n        public void StartWebSockets()\r\n        {\r\n            _port = PortFinder.FindPort(8181);\r\n            _webSocketsAddress = \"ws://0.0.0.0:\" + _port;\r\n\r\n            Console.WriteLine(\"Broadcasting auto-refresh messages via WebSockets at \" + _webSocketsAddress);\r\n\r\n            _server = new WebSocketServer(_webSocketsAddress);\r\n            _server.Start(socket => {\r\n                socket.OnOpen = () => _sockets.Add(socket);\r\n\r\n                socket.OnClose = () => _sockets.Remove(socket);\r\n\r\n\r\n            });\r\n        }\r\n\r\n        public int Port\r\n        {\r\n            get { return _port; }\r\n        }\r\n\r\n        public void OpenBrowserTo(string url)\r\n        {\r\n            Process.Start(url);\r\n        }\r\n\r\n        public void RefreshPage()\r\n        {\r\n            _sockets.Each(x => x.Send(\"REFRESH\"));\r\n        }\r\n\r\n        public void Dispose()\r\n        {\r\n            _sockets.Clear();\r\n            if (_server != null) _server.Dispose();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/Fubu/Running/FubuMvcApplicationActivator.cs",
    "content": "﻿using System;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.Http.Hosting;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Http.Owin.Middleware;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Services.Messaging;\r\n\r\nnamespace Fubu.Running\r\n{\r\n    public class FubuMvcApplicationActivator : IFubuMvcApplicationActivator\r\n    {\r\n        private FubuRuntime _server = null;\r\n        private FubuRegistry _registry;\r\n\r\n        public void Initialize(Type applicationType, StartApplication message)\r\n        {\r\n            _registry = Activator.CreateInstance(applicationType).As<FubuRegistry>();\r\n            _registry.RootPath = message.PhysicalPath;\r\n            _registry.Port = PortFinder.FindPort(message.PortNumber);\r\n            _registry.Mode = message.Mode;\r\n\r\n            _registry.AlterSettings<OwinSettings>(owin =>\r\n            {\r\n                owin.AddMiddleware<HtmlHeadInjectionMiddleware>().Arguments.Set(new InjectionOptions\r\n                {\r\n                    Content = c => message.HtmlHeadInjectedText\r\n                });\r\n            });\r\n\r\n            if (_registry.Host == null) _registry.HostWith<Katana>();\r\n\r\n            StartUp();\r\n        }\r\n\r\n        public void StartUp()\r\n        {\r\n            try\r\n            {\r\n                _server = _registry.ToRuntime();\r\n\r\n                GlobalMessageTracking.SendMessage(new ApplicationStarted\r\n                {\r\n                    ApplicationName = _registry.GetType().Name,\r\n                    HomeAddress = _server.BaseAddress,\r\n                    Timestamp = DateTime.Now,\r\n                    Watcher = _server.Get<AssetSettings>().CreateFileWatcherManifest(_server.Files)\r\n                });\r\n            }\r\n            catch (HostingFailedException e)\r\n            {\r\n                GlobalMessageTracking.SendMessage(new InvalidApplication\r\n                {\r\n                    ExceptionText = e.Message,\r\n                    Message = \"Access denied.\"\r\n                });               \r\n            }\r\n            catch (Exception e)\r\n            {\r\n                GlobalMessageTracking.SendMessage(new InvalidApplication\r\n                {\r\n                    ExceptionText = e.ToString(),\r\n                    Message = \"Bootstrapping {0} Failed!\".ToFormat(_registry.GetType().Name)\r\n                });\r\n            }\r\n        }\r\n\r\n        public void ShutDown()\r\n        {\r\n            _server.SafeDispose();\r\n        }\r\n\r\n        public void Recycle()\r\n        {\r\n            ShutDown();\r\n            StartUp();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/Fubu/Running/FubuRegistryChooser.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore;\n\nnamespace Fubu.Running\n{\n    public class FubuRegistryChooser\n    {\n        private readonly IFubuRegistryFinder _finder;\n        private readonly IMessaging _messaging;\n\n        public FubuRegistryChooser(IFubuRegistryFinder finder, IMessaging messaging)\n        {\n            _finder = finder;\n            _messaging = messaging;\n        }\n\n        public void Find(StartApplication message, Action<Type> onFound)\n        {\n            var applicationTypes = _finder.Find();\n\n            Type applicationType = null;\n\n\n            if (!applicationTypes.Any())\n            {\n                _messaging.Send(new InvalidApplication\n                {\n                    Message = \"Could not find any instance of FubuRegistry in any assembly in this directory\"\n                });\n\n                return;\n            }\n\n            if (message.ApplicationName.IsNotEmpty())\n            {\n                applicationType = applicationTypes.FirstOrDefault(x => x.Name.EqualsIgnoreCase(message.ApplicationName));\n\n\n                if (applicationType == null)\n                {\n                    _messaging.Send(new InvalidApplication\n                    {\n                        Message = \"Could not find an application named '{0}'\".ToFormat(message.ApplicationName),\n                        Applications = applicationTypes.Select(x => x.Name).ToArray()\n                    });\n\n                    return;\n                }\n            }\n\n            if (applicationType == null && applicationTypes.Count() == 1)\n            {\n                applicationType = applicationTypes.Single();\n            }\n\n            if (applicationType == null)\n            {\n                _messaging.Send(new InvalidApplication\n                {\n                    Applications = applicationTypes.Select(x => x.Name).ToArray(),\n                    Message = \"Unable to determine the FubuMVC Application\"\n                });\n            }\n            else\n            {\n                onFound(applicationType);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Fubu/Running/FubuRegistryFinder.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing StructureMap.Graph.Scanning;\n\nnamespace Fubu.Running\n{\n    public class FubuRegistryFinder : IFubuRegistryFinder\n    {\n        public IEnumerable<Type> Find()\n        {\n            var assemblies = AssemblyFinder.FindDependentAssemblies().ToArray();\n\n            return\n                TypeRepository.FindTypes(assemblies, TypeClassification.Concretes,\n                    x => x.IsConcreteTypeOf<FubuRegistry>() && x.IsConcreteWithDefaultCtor()).Result();\n        }\n    }\n}"
  },
  {
    "path": "src/Fubu/Running/IFubuMvcApplicationActivator.cs",
    "content": "﻿using System;\r\n\r\nnamespace Fubu.Running\r\n{\r\n    public interface IFubuMvcApplicationActivator\r\n    {\r\n        void Initialize(Type applicationType, StartApplication message);\r\n        void ShutDown();\r\n        void Recycle();\r\n    }\r\n}"
  },
  {
    "path": "src/Fubu/Running/IFubuRegistryFinder.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace Fubu.Running\n{\n    public interface IFubuRegistryFinder\n    {\n        IEnumerable<Type> Find();\n\n    }\n}"
  },
  {
    "path": "src/Fubu/Running/IMessaging.cs",
    "content": "﻿namespace Fubu.Running\r\n{\r\n    public interface IMessaging\r\n    {\r\n        void Send<T>(T message);\r\n    }\r\n}"
  },
  {
    "path": "src/Fubu/Running/InvalidApplication.cs",
    "content": "﻿namespace Fubu.Running\r\n{\r\n    public class InvalidApplication\r\n    {\r\n        public string[] Applications { get; set; }\r\n        public string Message { get; set; }\r\n        public string ExceptionText { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/Fubu/Running/Messaging.cs",
    "content": "﻿using FubuMVC.Core.Services.Messaging;\r\n\r\nnamespace Fubu.Running\r\n{\r\n    public class Messaging : IMessaging\r\n    {\r\n        public void Send<T>(T message)\r\n        {\r\n            GlobalMessageTracking.SendMessage(message);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/Fubu/Running/RecycleApplication.cs",
    "content": "﻿namespace Fubu.Running\r\n{\r\n    public class RecycleApplication\r\n    {\r\n        \r\n    }\r\n}"
  },
  {
    "path": "src/Fubu/Running/RemoteApplication.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading;\r\nusing FubuCore;\r\nusing FubuCore.CommandLine;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Services.Messaging;\r\nusing FubuMVC.Core.Services.Remote;\r\n\r\nnamespace Fubu.Running\r\n{\r\n    public class RemoteApplication : IListener<ApplicationStarted>, IListener<InvalidApplication>, IApplicationObserver\r\n    {\r\n        private readonly ManualResetEvent _reset = new ManualResetEvent(false);\r\n        private readonly BrowserDriver _driver = new BrowserDriver();\r\n        private ApplicationRequest _input;\r\n        private bool _opened;\r\n        private RemoteFubuMvcProxy _proxy;\r\n        private FileWatcherManifest _watcher;\r\n        private readonly Action<RemoteDomainExpression> _configuration;\r\n\r\n\r\n        public RemoteApplication()\r\n        {\r\n            _configuration = x => { };\r\n        }\r\n\r\n        public RemoteApplication(Action<RemoteDomainExpression> configuration)\r\n        {\r\n            _configuration = configuration;\r\n        }\r\n\r\n        public void RefreshContent()\r\n        {\r\n            _driver.RefreshPage();\r\n        }\r\n\r\n        public void RecycleAppDomain()\r\n        {\r\n            if (_watcher != null) _watcher.StopWatching();\r\n            if (_proxy != null)\r\n            {\r\n                _proxy.SafeDispose();\r\n            }\r\n\r\n            start();\r\n\r\n            _driver.RefreshPage();\r\n        }\r\n\r\n        public void RecycleApplication()\r\n        {\r\n            _watcher.StopWatching();\r\n            _proxy.Recycle();\r\n\r\n            _driver.RefreshPage();\r\n        }\r\n\r\n        public void Receive(ApplicationStarted message)\r\n        {\r\n            Console.WriteLine(\"Started application {0} at url {1} at {2}\", message.ApplicationName, message.HomeAddress,\r\n                message.Timestamp);\r\n\r\n\r\n            if ((_input.OpenFlag || _input.UrlFlag.IsNotEmpty()) && !_opened)\r\n            {\r\n                _opened = true;\r\n                var url = message.HomeAddress;\r\n                if (_input.UrlFlag.IsNotEmpty())\r\n                {\r\n                    url = url.TrimEnd('/') + '/' + _input.UrlFlag.TrimStart('/');\r\n                }\r\n\r\n                _driver.OpenBrowserTo(url);\r\n            }\r\n\r\n            if (_watcher == null)\r\n            {\r\n                _watcher = message.Watcher;\r\n                _watcher.Watch(_input.WatchedFlag, this);\r\n            }\r\n\r\n            _watcher.StartWatching();\r\n\r\n\r\n            _reset.Set();\r\n        }\r\n\r\n        public void Receive(InvalidApplication message)\r\n        {\r\n            ConsoleWriter.Write(ConsoleColor.Red, message.Message);\r\n\r\n            if (message.Applications != null && message.Applications.Any())\r\n            {\r\n                Console.WriteLine(\"Found applications:  \" + message.Applications.Join(\", \"));\r\n            }\r\n\r\n            if (message.ExceptionText.IsNotEmpty())\r\n            {\r\n                ConsoleWriter.Write(ConsoleColor.Yellow, message.ExceptionText);\r\n            }\r\n\r\n            _reset.Set();\r\n\r\n            Failed = true;\r\n\r\n            throw new Exception(\"Application Failed!\");\r\n        }\r\n\r\n        public bool Failed { get; set; }\r\n\r\n        public void Start(ApplicationRequest input)\r\n        {\r\n            _input = input;\r\n\r\n            if (_input.WatchedFlag)\r\n            {\r\n                _driver.StartWebSockets();\r\n                _input.AutoRefreshWebSocketsAddress = _driver.Port.ToString();\r\n            }\r\n\r\n            start();\r\n        }\r\n\r\n        private void start()\r\n        {\r\n            _reset.Reset();\r\n            _proxy = new RemoteFubuMvcProxy(_input);\r\n            _proxy.Start(this, _configuration);\r\n\r\n            _reset.WaitOne();\r\n        }\r\n\r\n        public void Shutdown()\r\n        {\r\n            _driver.SafeDispose();\r\n            _watcher.StopWatching();\r\n            _proxy.SafeDispose();\r\n        }\r\n\r\n    }\r\n\r\n\r\n}"
  },
  {
    "path": "src/Fubu/Running/RemoteFubuMvcBootstrapper.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\nusing FubuMVC.Core.Services;\r\nusing FubuMVC.Core.Services.Messaging;\r\n\r\nnamespace Fubu.Running\r\n{\r\n    public class RemoteFubuMvcBootstrapper : IApplicationLoader, IActivator, IListener<StartApplication>,\r\n        IListener<RecycleApplication>, IDisposable\r\n    {\r\n        private readonly IFubuRegistryFinder _typeFinder;\r\n        private readonly IFubuMvcApplicationActivator _activator;\r\n        private readonly IMessaging _messaging;\r\n\r\n        public RemoteFubuMvcBootstrapper()\r\n            : this(new FubuRegistryFinder(), new FubuMvcApplicationActivator(), new Messaging())\r\n        {\r\n        }\r\n\r\n        public RemoteFubuMvcBootstrapper(IFubuRegistryFinder typeFinder, IFubuMvcApplicationActivator activator,\r\n            IMessaging messaging)\r\n        {\r\n            _typeFinder = typeFinder;\r\n            _activator = activator;\r\n            _messaging = messaging;\r\n        }\r\n\r\n        public IDisposable Load(Dictionary<string, string> properties)\r\n        {\r\n            GlobalMessageTracking.Messaging.AddListener(this);\r\n            return this;\r\n        }\r\n\r\n        public void Dispose()\r\n        {\r\n            _activator.ShutDown();\r\n        }\r\n\r\n        public void Receive(StartApplication message)\r\n        {\r\n            Console.WriteLine(\"Trying to start application \" + message);\r\n\r\n\r\n            var chooser = new FubuRegistryChooser(_typeFinder, _messaging);\r\n            chooser.Find(message,\r\n                applicationType => _activator.Initialize(applicationType, message));\r\n        }\r\n\r\n        public void Receive(RecycleApplication message)\r\n        {\r\n            _activator.Recycle();\r\n        }\r\n\r\n        void IActivator.Activate(IActivationLog log, IPerfTimer timer)\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/Fubu/Running/RemoteFubuMvcProxy.cs",
    "content": "﻿using System;\r\nusing FubuCore;\r\nusing FubuCore.Binding;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Services.Remote;\r\nusing HtmlTags;\r\nusing Owin;\r\n\r\nnamespace Fubu.Running\r\n{\r\n    public class RemoteFubuMvcProxy : IDisposable\r\n    {\r\n        private readonly ApplicationRequest _request;\r\n        private RemoteServiceRunner _runner;\r\n\r\n        public RemoteFubuMvcProxy(ApplicationRequest request)\r\n        {\r\n            _request = request;\r\n        }\r\n\r\n        public void Start(object listener, Action<RemoteDomainExpression> configuration = null)\r\n        {\r\n            _runner = RemoteServiceRunner.For<RemoteFubuMvcBootstrapper>(x =>\r\n            {\r\n                x.RequireAssemblyContainingType<RemoteFubuMvcProxy>(AssemblyCopyMode.SemVerCompatible);\r\n                x.RequireAssemblyContainingType<IAppBuilder>();\r\n                x.RequireAssemblyContainingType<IModelBinder>(); // FubuCore\r\n                x.RequireAssemblyContainingType<FubuRuntime>(AssemblyCopyMode.SemVerCompatible); // FubuMVC.Core\r\n                x.RequireAssemblyContainingType<HtmlTag>(AssemblyCopyMode.SemVerCompatible); // HtmlTags\r\n\r\n                x.RequireAssembly(\"Microsoft.Owin.Hosting\");\r\n                x.RequireAssembly(\"Microsoft.Owin.Host.HttpListener\");\r\n                x.RequireAssembly(\"Microsoft.Owin\");\r\n                x.RequireAssembly(\"Owin\");\r\n\r\n                x.ServiceDirectory = _request.DirectoryFlag;\r\n\r\n                if (_request.ConfigFlag.IsNotEmpty())\r\n                {\r\n                    x.Setup.ConfigurationFile = _request.ConfigFlag;\r\n                }\r\n\r\n                x.Setup.PrivateBinPath = _request.DetermineBinPath();\r\n\r\n                if (configuration != null)\r\n                {\r\n                    configuration(x);\r\n                }\r\n\r\n                Console.WriteLine(\"Assembly bin path is \" + x.Setup.PrivateBinPath);\r\n                Console.WriteLine(\"The configuration file is \" + x.Setup.ConfigurationFile);\r\n            });\r\n\r\n            _runner.WaitForServiceToStart<RemoteFubuMvcBootstrapper>();\r\n\r\n            _runner.Messaging.AddListener(listener);\r\n\r\n\r\n            _runner.SendRemotely(new StartApplication\r\n            {\r\n                ApplicationName = _request.RegistryFlag,\r\n                PhysicalPath = _request.DirectoryFlag,\r\n                PortNumber = PortFinder.FindPort(_request.PortFlag),\r\n                Mode = _request.ModeFlag,\r\n                AutoRefreshWebSocketsAddress = _request.AutoRefreshWebSocketsAddress\r\n            });\r\n        }\r\n\r\n        public void Recycle()\r\n        {\r\n            _runner.SendRemotely(new RecycleApplication());\r\n        }\r\n\r\n        public void Dispose()\r\n        {\r\n            _runner.Dispose();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/Fubu/Running/RunCommand.cs",
    "content": "﻿using System;\r\nusing FubuCore.CommandLine;\r\n\r\nnamespace Fubu.Running\r\n{\r\n    [CommandDescription(\"Run a fubumvc application hosted in Katana\")]\r\n    public class RunCommand : FubuCommand<ApplicationRequest>\r\n    {\r\n        private RemoteApplication _application;\r\n\r\n\r\n        public override bool Execute(ApplicationRequest input)\r\n        {\r\n            _application = new RemoteApplication();\r\n            _application.Start(input);\r\n\r\n            if (_application.Failed)\r\n            {\r\n                ConsoleWriter.Write(ConsoleColor.Yellow, \"Application failed to start, exiting\");\r\n                return false;\r\n            }\r\n\r\n            tellUsersWhatToDo();\r\n            var key = Console.ReadKey();\r\n            while (key.Key != ConsoleKey.Q)\r\n            {\r\n                if (key.Key == ConsoleKey.R)\r\n                {\r\n                    Console.WriteLine();\r\n                    Console.WriteLine();\r\n\r\n                    _application.RecycleAppDomain();\r\n\r\n                    tellUsersWhatToDo();\r\n                    key = Console.ReadKey();\r\n                }\r\n            }\r\n\r\n            _application.Shutdown();\r\n\r\n            return true;\r\n        }\r\n\r\n        private static void tellUsersWhatToDo()\r\n        {\r\n            Console.WriteLine(\"Press 'q' to quit or 'r' to recycle the application\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/Fubu/Running/StartApplication.cs",
    "content": "﻿using System.Reflection;\r\nusing FubuCore;\r\n\r\nnamespace Fubu.Running\r\n{\r\n    public class StartApplication\r\n    {\r\n        public static readonly string WebSocketsContent = \"WebsocketsRefresh.txt\";\r\n\r\n        public string ApplicationName { get; set; }\r\n        public int PortNumber { get; set; }\r\n        public string PhysicalPath { get; set; }\r\n\r\n        public string Mode { get; set; }\r\n        public string HtmlHeadInjectedText { get; set; }\r\n\r\n        public string AutoRefreshWebSocketsAddress\r\n        {\r\n            set\r\n            {\r\n                if (value.IsEmpty())\r\n                {\r\n                    HtmlHeadInjectedText = null;\r\n                    return;\r\n                }\r\n\r\n                var text = Assembly.GetExecutingAssembly().GetManifestResourceStream(GetType(), WebSocketsContent)\r\n                    .ReadAllText();\r\n\r\n                HtmlHeadInjectedText = text.Replace(\"%WEB_SOCKET_ADDRESS%\", value);\r\n            }\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            if (ApplicationName.IsNotEmpty())\r\n            {\r\n                return string.Format(\"ApplicationName: {0}, PortNumber: {1}, PhysicalPath: {2}\", ApplicationName,\r\n                    PortNumber, PhysicalPath);\r\n            }\r\n\r\n            return \"{0} with port number {1}\".ToFormat(PhysicalPath, PortNumber);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/Fubu/Running/WebsocketsRefresh.txt",
    "content": "﻿<script language=\"javascript\">\r\n        var start = function () {\r\n            var wsImpl = window.WebSocket || window.MozWebSocket;\r\n\r\n            // create a new websocket and connect\r\n            window.ws = new wsImpl('ws://localhost:%WEB_SOCKET_ADDRESS%');\r\n\r\n            // when data is comming from the server, this metod is called\r\n            ws.onmessage = function (evt) {\r\n                location.reload();\r\n            };\r\n\r\n        }\r\n\r\n\t\twindow.addEventListener('load', function(e){\r\n\t\t\tstart();\r\n\t\t});\r\n</script>"
  },
  {
    "path": "src/Fubu/app.config",
    "content": "<?xml version=\"1.0\"?>\r\n<configuration>\r\n  <runtime>\r\n\r\n  </runtime>\r\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.6\"/></startup></configuration>\r\n"
  },
  {
    "path": "src/Fubu/file-patterns.txt",
    "content": "﻿*.spark=Content\r\n*.dll=AppDomain\r\n*.exe=AppDomain\r\n*.script.config=Application\r\n*.asset.config=Application\r\n*.assets.config=Application\r\n*.cshtml=Content\r\n*.css=Content\r\n*.js=Content\r\n*.coffee=Content\r\nweb.config=AppDomain\r\n*.config=Application\r\n"
  },
  {
    "path": "src/Fubu/fubu",
    "content": "#!/bin/sh\nFILEDIR=\"$( cd \"$( dirname \"$0\" )\" && pwd )\"\nif [[ $OSTYPE = \"msys\" || $OSTYPE = \"cygwin\" ]]\nthen\n  exec \"$FILEDIR/fubu.exe\" \"$@\"\nelse\n  exec mono $MONO_OPTIONS \"$FILEDIR/fubu.exe\" \"$@\"\nfi\n"
  },
  {
    "path": "src/Fubu/paket.references",
    "content": "DotNetZip\nFleck\nFubuCore\nHtmlTags\nMicrosoft.Bcl\nMicrosoft.Bcl.Build\nMicrosoft.Net.Http\nMicrosoft.Owin\nMicrosoft.Owin.Host.HttpListener\nMicrosoft.Owin.Hosting\nNewtonsoft.Json\nOwin\nSpark\nstructuremap"
  },
  {
    "path": "src/FubuMVC.4.1.resharper",
    "content": "<Configuration>\r\n  <SharedSolutionTemplateManager>\r\n    <LiveTemplates>\r\n      <Template uid=\"c7021f12-6126-43b0-9e05-5f94d617d1e1\" text=\"[Test]&#xD;&#xA;public void $TESTNAME$()&#xD;&#xA;{&#xD;&#xA;\t$END$&#xD;&#xA;}\" shortcut=\"pvt\" description=\"New test case\" reformat=\"true\" shortenQualifiedReferences=\"true\">\r\n        <Context>\r\n          <CSharpContext context=\"TypeMember\" minimumLanguageVersion=\"2.0\" />\r\n        </Context>\r\n        <Categories />\r\n        <Variables>\r\n          <Variable name=\"TESTNAME\" expression=\"\" initialRange=\"0\" />\r\n        </Variables>\r\n        <CustomProperties />\r\n      </Template>\r\n    </LiveTemplates>\r\n    <Surrounds />\r\n    <FileTemplates />\r\n  </SharedSolutionTemplateManager>\r\n</Configuration>\r\n"
  },
  {
    "path": "src/FubuMVC.4.5.resharper",
    "content": "<Configuration>\r\n  <SharedSolutionTemplateManager>\r\n    <LiveTemplates>\r\n      <Template uid=\"c7021f12-6126-43b0-9e05-5f94d617d1e1\" shortcut=\"pvt\" description=\"New test case\" text=\"[Test]&#xD;&#xA;public void $TESTNAME$()&#xD;&#xA;{&#xD;&#xA;\t$END$&#xD;&#xA;}\" reformat=\"True\" shortenQualifiedReferences=\"True\">\r\n        <Context>\r\n          <CSharpContext context=\"TypeMember\" minimumLanguageVersion=\"2.0\" />\r\n        </Context>\r\n        <Categories />\r\n        <Variables>\r\n          <Variable name=\"TESTNAME\" expression=\"\" initialRange=\"0\" />\r\n        </Variables>\r\n        <CustomProperties />\r\n      </Template>\r\n    </LiveTemplates>\r\n  </SharedSolutionTemplateManager>\r\n</Configuration>"
  },
  {
    "path": "src/FubuMVC.Core/Ajax/AjaxContinuation.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Runtime.CompilerServices;\r\nusing FubuCore;\r\nusing FubuCore.Util;\r\n\r\nnamespace FubuMVC.Core.Ajax\r\n{\r\n    /// <summary>\r\n    /// Used as the return value from Ajax endpoints to standardize the communication and interaction of the server\r\n    /// and client.  Several built in conventions and external packages work with AjaxContinuation\r\n    /// </summary>\r\n    public class AjaxContinuation\r\n    {\r\n        private readonly Cache<string, object> _data = new Cache<string, object>();\r\n        private readonly IList<AjaxError> _errors = new List<AjaxError>();\r\n\r\n\r\n        /// <summary>\r\n        /// Apply key/value pairs\r\n        /// </summary>\r\n        /// <param name=\"key\"></param>\r\n        /// <returns></returns>\r\n        [IndexerName(\"Data\")]\r\n        public object this[string key]\r\n        {\r\n            get { return _data[key]; }\r\n            set { _data[key] = value; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// List of AjaxError's to communicate validation errors to the client\r\n        /// </summary>\r\n        public IList<AjaxError> Errors\r\n        {\r\n            get { return _errors; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// If expressed, tells the client page to navigate the browser to the designated url\r\n        /// </summary>\r\n        public string NavigatePage { get; set; }\r\n\r\n        public bool Success { get; set; }\r\n        \r\n        public string Message { get; set; }\r\n\r\n        /// <summary>\r\n        /// Should the entire page or at least the part of the UI that originated the Ajax call be refreshed?\r\n        /// </summary>\r\n        public bool ShouldRefresh { get; set; }\r\n\r\n        /// <summary>\r\n        /// Convenience method to get an empty AjaxContinuation{Success = true}\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public static AjaxContinuation Successful()\r\n        {\r\n            return new AjaxContinuation\r\n            {\r\n                Success = true\r\n            };\r\n        }\r\n\r\n        /// <summary>\r\n        /// Convenience method to build an AjaxContinuation for a failure message\r\n        /// </summary>\r\n        /// <param name=\"message\"></param>\r\n        /// <returns></returns>\r\n        public static AjaxContinuation ForMessage(object message)\r\n        {\r\n            return ForMessage(message.ToString());\r\n        }\r\n\r\n        /// <summary>\r\n        /// Convenience method to build an AjaxContinuation for a failure message\r\n        /// </summary>\r\n        /// <param name=\"message\"></param>\r\n        /// <returns></returns>\r\n        public static AjaxContinuation ForMessage(string message)\r\n        {\r\n            return new AjaxContinuation\r\n            {\r\n                Message = message\r\n            };\r\n        }\r\n\r\n        /// <summary>\r\n        /// Builds a dictionary that FubuMVC will serialize to Json\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public virtual IDictionary<string, object> ToDictionary()\r\n        {\r\n            var dict = new Dictionary<string, object>\r\n            {\r\n                {\"success\", Success},\r\n                {\"refresh\", ShouldRefresh}\r\n            };\r\n\r\n            Message.IfNotNull(x => dict.Add(\"message\", x));\r\n            NavigatePage.IfNotNull(x => dict.Add(\"navigatePage\", x));\r\n\r\n            _data.Each(dict.Add);\r\n\r\n            if (_errors.Any())\r\n            {\r\n                dict.Add(\"errors\", _errors.ToArray());\r\n            }\r\n\r\n            return dict;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Does this AjaxContinuation have a value for the key?\r\n        /// </summary>\r\n        /// <param name=\"key\"></param>\r\n        /// <returns></returns>\r\n        public virtual bool HasData(string key)\r\n        {\r\n            return _data.Has(key);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Ajax/AjaxContinuationWriter.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Json;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Ajax\r\n{\r\n    [Title(\"AjaxContinuationWriter\")]\r\n    public class AjaxContinuationWriter<T> : IMediaWriter<T> where T : AjaxContinuation\r\n    {\r\n        public Task Write(string mimeType, IFubuRequestContext context, T resource)\r\n        {\r\n            var serializer = context.Services.GetInstance<IJsonSerializer>();\r\n            var json = serializer.Serialize(resource.ToDictionary());\r\n            return context.Writer.Write(mimeType, json);\r\n        }\r\n\r\n        public IEnumerable<string> Mimetypes\r\n        {\r\n            get\r\n            {\r\n                yield return \"application/json\";\r\n                yield return \"text/json\";\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Ajax/AjaxError.cs",
    "content": "namespace FubuMVC.Core.Ajax\r\n{\r\n    /// <summary>\r\n    /// DTO class to standardize the transmission of validation errors\r\n    /// to a client page from the server.\r\n    /// </summary>\r\n    public class AjaxError\r\n    {\r\n        /// <summary>\r\n        /// error/warning/etc.\r\n        /// </summary>\r\n        public string category { get; set; }\r\n\r\n        public string field { get; set; }\r\n\t\tpublic string label { get; set; }\r\n        public string message { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/AjaxExtensions.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing FubuCore.Binding;\r\nusing FubuMVC.Core.Http;\r\nusing System.Linq;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core\r\n{\r\n    public static class AjaxExtensions\r\n    {\r\n        public const string XmlHttpRequestValue = \"XMLHttpRequest\";\r\n        public const string XRequestedWithHeader = \"X-Requested-With\";\r\n\r\n        /// <summary>\r\n        /// Tries to determine whether or not a given request is an Ajax request by looking for the \"X-Requested-With\" header\r\n        /// </summary>\r\n        /// <param name=\"requestInput\"></param>\r\n        /// <returns></returns>\r\n        public static bool IsAjaxRequest(this IDictionary<string, object> requestInput)\r\n        {\r\n            object value;\r\n            return\r\n                requestInput.TryGetValue(XRequestedWithHeader, out value)\r\n                && IsAjaxRequest(value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tries to determine whether or not a given request is an Ajax request by looking for the X-Requested-With\" header\r\n        /// </summary>\r\n        /// <param name=\"requestInput\"></param>\r\n        /// <returns></returns>\r\n        public static bool IsAjaxRequest(this IRequestData requestInput)\r\n        {\r\n            bool result = false;\r\n            requestInput.Value(XRequestedWithHeader, value => result = IsAjaxRequest(value.RawValue));\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determines whether or not a request is an Ajax request by comparing the value to \"XMLHttpRequest\"\r\n        /// </summary>\r\n        /// <param name=\"value\"></param>\r\n        /// <returns></returns>\r\n        private static bool IsAjaxRequest(this object value)\r\n        {\r\n            return XmlHttpRequestValue.Equals(value as string, StringComparison.InvariantCultureIgnoreCase);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determines whether or not a request is an Ajax request by searching for a value of the \"X-Requested-With\" header\r\n        /// </summary>\r\n        /// <param name=\"context\"></param>\r\n        /// <returns></returns>\r\n        public static bool IsAjaxRequest(this IBindingContext context)\r\n        {\r\n            bool returnValue = false;\r\n            context.Data.ValueAs<object>(XRequestedWithHeader, val => returnValue = val.IsAjaxRequest());\r\n            return returnValue;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determines whether or not a request is an Ajax request by searching for a value of the \"X-Requested-With\" header\r\n        /// </summary>\r\n        /// <param name=\"request\"></param>\r\n        /// <returns></returns>\r\n        public static bool IsAjaxRequest(this IHttpRequest request)\r\n        {\r\n            var headers = request.GetHeader(XRequestedWithHeader);\r\n            return headers.Any(x => x.EqualsIgnoreCase(XmlHttpRequestValue));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Assets/Asset.cs",
    "content": "﻿using System.IO;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Files;\r\n\r\nnamespace FubuMVC.Core.Assets\r\n{\r\n    public class Asset\r\n    {\r\n        public readonly IFubuFile File;\r\n        public readonly string Url;\r\n        public readonly MimeType MimeType;\r\n        public readonly string Filename;\r\n\r\n        public string CdnUrl;\r\n        public string FallbackTest ;\r\n\r\n        // For testing only!\r\n        public Asset(string url)\r\n        {\r\n            Url = url;\r\n            Filename = Path.GetFileName(url);\r\n        }\r\n\r\n        public Asset(IFubuFile file)\r\n        {\r\n            File = file;\r\n\r\n            Filename = Path.GetFileName(file.Path);\r\n            MimeType = MimeType.MimeTypeByFileName(Filename);\r\n\r\n            Url = file.RelativePath.Replace(\"\\\\\", \"/\").TrimStart('/');\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Filename: {0}, Url: {1}, MimeType: {2}\", Filename, Url, MimeType.Value);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Assets/AssetFilePageExtensions.cs",
    "content": "﻿using System;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Assets.JavascriptRouting;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.View;\r\nusing HtmlTags;\r\n\r\nnamespace FubuMVC.Core.Assets\r\n{\r\n    public static class AssetFilePageExtensions\r\n    {\r\n        /// <summary>\r\n        ///   Creates an HTML img tag to display the specified file from the application's image folder\r\n        /// </summary>\r\n        /// <param name = \"viewPage\"></param>\r\n        /// <param name = \"fileOrUrl\">The name of the image file, relative to the applications' image folder</param>\r\n        /// <returns></returns>\r\n        public static ImageTag Image(this IFubuPage viewPage, string fileOrUrl)\r\n        {\r\n            var imageUrl = Uri.IsWellFormedUriString(fileOrUrl, UriKind.Absolute)\r\n                ? fileOrUrl\r\n                : viewPage.ImageUrl(fileOrUrl);\r\n\r\n            return new ImageTag(imageUrl);\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Returns the absolute URL for an image (may be a customer overridden path or a package image path)\r\n        /// </summary>\r\n        /// <param name = \"viewPage\"></param>\r\n        /// <param name = \"imageFilename\">The name of the image file, relative to the applications' image folder</param>\r\n        /// <returns></returns>\r\n        public static string ImageUrl(this IFubuPage viewPage, string imageFilename)\r\n        {\r\n            return viewPage.Get<IAssetTagBuilder>().FindImageUrl(imageFilename);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates an <image> tag for the named image using the url from the asset pipeline\r\n        /// *Same* functionality as Image()\r\n        /// </summary>\r\n        /// <param name=\"page\"></param>\r\n        /// <param name=\"assetName\"></param>\r\n        /// <returns></returns>\r\n        public static HtmlTag ImageFor(this IFubuPage page, string assetName)\r\n        {\r\n            return page.Image(assetName);\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Creates &lt;script&gt; tags for each script\r\n        /// </summary>\r\n        /// <param name=\"page\"></param>\r\n        /// <param name=\"scripts\"></param>\r\n        public static TagList Script(this IFubuPage page, params string[] scripts)\r\n        {\r\n            return page.Get<IAssetTagBuilder>().BuildScriptTags(scripts).ToArray().ToTagList();\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Creates &lt;link&gt; tags for each stylesheet\r\n        /// </summary>\r\n        /// <param name=\"page\"></param>\r\n        /// <param name=\"cssNames\"></param>\r\n        public static TagList Css(this IFubuPage page, params string[] cssNames)\r\n        {\r\n            return page.Get<IAssetTagBuilder>().BuildStylesheetTags(cssNames).ToArray().ToTagList();\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Creates a script tag if the named scripts can be found.\r\n        /// </summary>\r\n        /// <param name=\"page\"></param>\r\n        /// <param name=\"scripts\"></param>\r\n        public static TagList OptionalScript(this IFubuPage page, params string[] scripts)\r\n        {\r\n            var finder = page.Get<IAssetFinder>();\r\n            var request = page.Get<IHttpRequest>();\r\n            var mode = page.Get<FubuRuntime>().Mode;\r\n\r\n            var tags = scripts.Select(finder.FindAsset).Where(x => x != null)\r\n                .Select(x => new ScriptTag(mode, request.ToFullUrl, x)).ToArray();\r\n\r\n            return new TagList(tags);\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Creates link tags for the named stylesheets if they exist\r\n        /// </summary>\r\n        /// <param name=\"page\"></param>\r\n        /// <param name=\"stylesheets\"></param>\r\n        public static TagList OptionalCss(this IFubuPage page, params string[] stylesheets)\r\n        {\r\n            var finder = page.Get<IAssetFinder>();\r\n            var request = page.Get<IHttpRequest>();\r\n            var tags = stylesheets.Select(finder.FindAsset).Where(x => x != null)\r\n                .Select(x => new StylesheetLinkTag(request.ToFullUrl(x.Url))).ToArray();\r\n\r\n            return new TagList(tags);\r\n        }\r\n\r\n        /// <summary>\r\n        /// \"Require\" script assets to be written later.  Useful to register scripts in partial\r\n        /// views that need to be written by the master layout\r\n        /// </summary>\r\n        /// <param name=\"page\"></param>\r\n        /// <param name=\"scripts\"></param>\r\n        public static void RequireScript(this IFubuPage page, params string[] scripts)\r\n        {\r\n            page.Get<IAssetTagBuilder>().RequireScript(scripts);\r\n        }\r\n\r\n        public static HtmlTag WriteJavascriptRoutes(this JavascriptRouteWriter writer, string groupName,\r\n            IJavascriptRouter router)\r\n        {\r\n            var dict = writer.Write(router.Routes());\r\n\r\n            var tag = new HtmlTag(\"script\").Attr(\"type\", \"text/javascript\");\r\n            tag.Encoded(false);\r\n\r\n            tag.Text(\"\\n{0} = {1};\\n\".ToFormat(groupName, JsonUtil.ToJson(dict)));\r\n\r\n            return tag;\r\n        }\r\n\r\n        public static HtmlTag JavascriptRoutes<T>(this IFubuPage page, string groupName)\r\n            where T : IJavascriptRouter, new()\r\n        {\r\n            var writer = page.Get<JavascriptRouteWriter>();\r\n            var router = new T();\r\n\r\n            return writer.WriteJavascriptRoutes(groupName, router);\r\n        }\r\n\r\n        public static string PublicAssetFolder(this IFubuPage page)\r\n        {\r\n            var settings = page.Get<AssetSettings>();\r\n            var files = page.Get<IFubuApplicationFiles>();\r\n\r\n            if (settings.PublicAssetFolder.IsEmpty())\r\n            {\r\n                var directory = settings.DeterminePublicFolder(files);\r\n                var relativePath = directory.PathRelativeTo(files.RootPath)\r\n                    .Replace('\\\\', '/');\r\n\r\n                settings.PublicAssetFolder = page.Get<IHttpRequest>().ToFullUrl(relativePath);\r\n            }\r\n\r\n            return settings.PublicAssetFolder;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Assets/AssetFinderCache.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core.Runtime.Files;\r\n\r\nnamespace FubuMVC.Core.Assets\r\n{\r\n    public interface IAssetFinder\r\n    {\r\n        Asset FindAsset(string search);\r\n        AssetGraph FindAll();\r\n    }\r\n\r\n    public class AssetFinderCache : IAssetFinder\r\n    {\r\n        private readonly AssetSettings _settings;\r\n        private readonly IFubuApplicationFiles _files;\r\n        private readonly ConcurrentCache<string, Asset> _searches = new ConcurrentCache<string, Asset>();\r\n        private readonly Lazy<AssetGraph> _graph; \r\n\r\n        public AssetFinderCache(AssetSettings settings, IFubuApplicationFiles files)\r\n        {\r\n            _settings = settings;\r\n            _files = files;\r\n            _searches.OnMissing = findAsset;\r\n\r\n            _graph = new Lazy<AssetGraph>(findAll);\r\n        }\r\n\r\n        public Asset FindAsset(string search)\r\n        {\r\n            return _searches[search];\r\n        }\r\n\r\n        private Asset findAsset(string search)\r\n        {\r\n            search = search.TrimStart('/');\r\n            var alias = _settings.FileForAlias(search);\r\n\r\n            if (alias.IsNotEmpty()) search = alias;\r\n            \r\n            var filename = Path.GetFileName(search);\r\n            var cdn = _settings.FindCdnAsset(search);\r\n\r\n            var files = findFiles(filename).ToArray();\r\n            var file = findMatch(files, search);\r\n\r\n\r\n            if (file != null)\r\n            {\r\n                var asset = new Asset(file);\r\n                if (cdn != null)\r\n                {\r\n                    asset.CdnUrl = cdn.Url;\r\n                    asset.FallbackTest = cdn.Fallback;\r\n                }\r\n\r\n                return asset;\r\n            }\r\n            \r\n            if (cdn != null)\r\n            {\r\n                return new Asset(cdn.Url)\r\n                {\r\n                    CdnUrl = cdn.Url,\r\n                    FallbackTest = cdn.Fallback\r\n                };\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        private IFubuFile findMatch(IEnumerable<IFubuFile> files, string search)\r\n        {\r\n            var exactMatch = files.FirstOrDefault(x => x.RelativePath == search);\r\n            if (exactMatch != null) return exactMatch;\r\n\r\n            return files.FirstOrDefault(x => x.RelativePath.EndsWith(search));\r\n        }\r\n\r\n        private IEnumerable<IFubuFile> findFiles(string filename)\r\n        {\r\n            if (_settings.Mode == SearchMode.PublicFolderOnly)\r\n            {\r\n                var publicFolder = _settings.DeterminePublicFolder(_files);\r\n                var appFolder = _files.RootPath;\r\n\r\n                return new FileSystem().FindFiles(publicFolder, FileSet.Deep(filename))\r\n                    .Select(x =>\r\n                    {\r\n                        return new FubuFile(x)\r\n                        {\r\n                            RelativePath = x.PathRelativeTo(appFolder).Replace('\\\\', '/')\r\n                        };\r\n                    });\r\n            }\r\n\r\n\r\n            return _files.FindFiles(FileSet.Deep(filename, _settings.Exclusions));\r\n        } \r\n\r\n        public AssetGraph FindAll()\r\n        {\r\n            return _graph.Value;\r\n        }\r\n\r\n        private AssetGraph findAll()\r\n        {\r\n            var graph = new AssetGraph();\r\n\r\n            var files = findAssetFiles();\r\n\r\n            graph.Add(files.Select(x => new Asset(x)));\r\n\r\n            _settings.Aliases.AllKeys.Each(alias => graph.StoreAlias(alias, _settings.Aliases[alias]));\r\n\r\n            _settings.CdnAssets.Each(x => graph.RegisterCdnAsset(x));\r\n\r\n            return graph;\r\n        }\r\n\r\n\r\n        private IEnumerable<IFubuFile> findAssetFiles()\r\n        {\r\n            var search = _settings.CreateAssetSearch();\r\n\r\n            if (_settings.Mode == SearchMode.PublicFolderOnly)\r\n            {\r\n                var publicFolder = _settings.DeterminePublicFolder(_files);\r\n                var appFolder = _files.RootPath;\r\n\r\n                return new FileSystem().FindFiles(publicFolder, search)\r\n                    .Select(x =>\r\n                    {\r\n                        return new FubuFile(x)\r\n                        {\r\n                            RelativePath = x.PathRelativeTo(appFolder).Replace('\\\\', '/')\r\n                        };\r\n                    });\r\n            }\r\n\r\n\r\n            return _files.FindFiles(search);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Assets/AssetGraph.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuCore.Util;\r\n\r\nnamespace FubuMVC.Core.Assets\r\n{\r\n    public class AssetGraph\r\n    {\r\n        private readonly IList<Asset> _assets = new List<Asset>();\r\n        private readonly ConcurrentCache<string, Asset> _searches = new ConcurrentCache<string, Asset>();\r\n\r\n        public AssetGraph()\r\n        {\r\n            _searches.OnMissing = findAsset;\r\n        }\r\n\r\n        public void Add(Asset asset)\r\n        {\r\n            _assets.Add(asset);\r\n        }\r\n\r\n        public void Add(IEnumerable<Asset> assets)\r\n        {\r\n            _assets.AddRange(assets);\r\n        }\r\n\r\n        public Asset RegisterCdnAsset(CdnAsset cdn)\r\n        {\r\n            var file = cdn.Filename();\r\n            var asset = _searches[file];\r\n            if (asset == null)\r\n            {\r\n                asset = new Asset(cdn.Url)\r\n                {\r\n\r\n                };\r\n                _assets.Add(asset);\r\n            }\r\n\r\n            asset.CdnUrl = cdn.Url;\r\n            asset.FallbackTest = cdn.Fallback;\r\n\r\n            return asset;\r\n\r\n        }\r\n\r\n        public Asset FindAsset(string search)\r\n        {\r\n            return _searches[search];\r\n        }\r\n\r\n        private Asset findAsset(string search)\r\n        {\r\n            search = search.TrimStart('/');\r\n\r\n            var exact = _assets.FirstOrDefault(x => x.Url == search);\r\n            if (exact != null) return exact;\r\n\r\n            if (search.Contains(\"/\"))\r\n            {\r\n                var pathSearch = \"/\" + search;\r\n                return _assets.FirstOrDefault(x => x.Url.EndsWith(pathSearch));\r\n            }\r\n\r\n            return _assets.FirstOrDefault(x => x.Filename == search);\r\n        }\r\n\r\n        public IEnumerable<Asset> Assets\r\n        {\r\n            get { return _assets; }\r\n        }\r\n\r\n        public void StoreAlias(string alias, string filename)\r\n        {\r\n            var asset = findAsset(filename);\r\n            if (asset == null)\r\n            {\r\n                throw new ArgumentOutOfRangeException(\"filename\",\"No asset file named '{0}' can be found\".ToFormat(filename));\r\n            }\r\n\r\n            _searches[alias] = asset;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Assets/AssetSettings.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.Specialized;\r\nusing System.ComponentModel;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin.Middleware.StaticFiles;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.Security;\r\nusing FubuMVC.Core.Security.Authorization;\r\nusing FubuMVC.Core.Services;\r\n\r\nnamespace FubuMVC.Core.Assets\r\n{\r\n    public class CdnAsset : DescribesItself\r\n    {\r\n        public string Url;\r\n        public string Fallback;\r\n        public string File;\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = Url;\r\n            description.Properties[\"Fallback\"] = Fallback;\r\n            description.Properties[\"File\"] = File;\r\n        }\r\n\r\n        public string Filename()\r\n        {\r\n            return File ?? new Uri(Url).Segments.Last();\r\n        }\r\n    }\r\n\r\n    public enum SearchMode\r\n    {\r\n        /// <summary>\r\n        /// Use assets from any location in either the application or loaded FubuMVC modules\r\n        /// </summary>\r\n        Anywhere,\r\n\r\n        /// <summary>\r\n        /// Limits the asset sourcing to the files under the PublicFolder/[Version] folder\r\n        /// </summary>\r\n        PublicFolderOnly\r\n    }\r\n\r\n\r\n    [Description(\"Allow read access to javascript, css, image, and html files\")]\r\n    public class AssetSettings : IStaticFileRule, DescribesItself\r\n    {\r\n        /// <summary>\r\n        /// The default maximum age in seconds to cache an asset in production mode. 1 day.\r\n        /// </summary>\r\n        public static readonly int MaxAgeInSeconds = 24*60*60;\r\n\r\n\r\n        public AssetSettings()\r\n        {\r\n            Exclude(\"node_modules/*\");\r\n\r\n            Mode = SearchMode.Anywhere;\r\n            PublicFolder = \"public\";\r\n\r\n            TemplateDestination = \"_templates\";\r\n\r\n            var cacheHeader = \"private, max-age={0}\".ToFormat(MaxAgeInSeconds);\r\n\r\n            Headers[HttpGeneralHeaders.CacheControl] = () => cacheHeader;\r\n            Headers[HttpGeneralHeaders.Expires] = () => DateTime.UtcNow.AddSeconds(MaxAgeInSeconds).ToString(\"R\");\r\n        }\r\n\r\n\r\n        public void SetupForDevelopment()\r\n        {\r\n            Headers.ClearAll();\r\n        }\r\n\r\n        internal string PublicAssetFolder;\r\n\r\n        /// <summary>\r\n        /// Add assets that will be sourced by CDN\r\n        /// </summary>\r\n        public readonly IList<CdnAsset> CdnAssets = new List<CdnAsset>();\r\n\r\n\r\n        /// <summary>\r\n        /// Used internally to determine the public folder if the mode is set to\r\n        /// PublicFolderOnly\r\n        /// </summary>\r\n        /// <param name=\"files\"></param>\r\n        /// <returns></returns>\r\n        public string DeterminePublicFolder(IFubuApplicationFiles files)\r\n        {\r\n            var candidate = files.RootPath.AppendPath(PublicFolder);\r\n\r\n            if (Version.IsNotEmpty())\r\n            {\r\n                var versioned = candidate.AppendPath(Version);\r\n                if (Directory.Exists(versioned))\r\n                {\r\n                    candidate = versioned;\r\n                }\r\n            }\r\n\r\n            if (!Directory.Exists(candidate))\r\n            {\r\n                Console.WriteLine(\"The designated public asset folder '{0}' cannot be found\".ToFormat(candidate));\r\n            }\r\n\r\n            return candidate;\r\n        }\r\n\r\n\r\n        public string Exclusions = null;\r\n\r\n        /// <summary>\r\n        /// Exclude a file by name or an entire sub folder with the syntax '[folder]/*'\r\n        /// 'node_modules' is excluded by default\r\n        /// </summary>\r\n        /// <param name=\"content\"></param>\r\n        public void Exclude(string content)\r\n        {\r\n            Exclusions += string.Empty + \";\" + content;\r\n            Exclusions = Exclusions.TrimStart(';');\r\n        }\r\n\r\n        /// <summary>\r\n        /// Used internally to build up the file search for assets\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public FileSet CreateAssetSearch()\r\n        {\r\n            var extensions =\r\n                assetMimeTypes().SelectMany(x => x.Extensions).Union(AllowableExtensions).Select(x => \"*\" + x).Join(\";\");\r\n\r\n            return FileSet.Deep(extensions, Exclusions);\r\n        }\r\n\r\n        private IEnumerable<MimeType> assetMimeTypes()\r\n        {\r\n            yield return MimeType.Javascript;\r\n            yield return MimeType.Css;\r\n\r\n            foreach (var mimetype in MimeType.All().Where(x => x.Value.StartsWith(\"image/\")))\r\n            {\r\n                yield return mimetype;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Add name aliases for assets like \"jquery\" = \"jquery.1.18.min.js\"\r\n        /// </summary>\r\n        public readonly NameValueCollection Aliases = new NameValueCollection();\r\n\r\n\r\n        AuthorizationRight IStaticFileRule.IsAllowed(IFubuFile file)\r\n        {\r\n            var mimetype = MimeType.MimeTypeByFileName(file.Path);\r\n            if (mimetype == null) return AuthorizationRight.None;\r\n\r\n            if (mimetype == MimeType.Javascript) return AuthorizationRight.Allow;\r\n\r\n            if (mimetype == MimeType.Css) return AuthorizationRight.Allow;\r\n\r\n            if (mimetype == MimeType.Html) return AuthorizationRight.Allow;\r\n\r\n            if (mimetype.Value.StartsWith(\"image/\")) return AuthorizationRight.Allow;\r\n\r\n            if (AllowableExtensions.Contains(Path.GetExtension(file.Path))) return AuthorizationRight.Allow;\r\n\r\n            return AuthorizationRight.None;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Configure more allowable static files if you need to customize what\r\n        /// files are allowed to be served via http\r\n        /// </summary>\r\n        public readonly IList<IStaticFileRule> StaticFileRules\r\n            = new List<IStaticFileRule> {new DenyConfigRule()};\r\n\r\n        public AuthorizationRight DetermineStaticFileRights(IFubuFile file)\r\n        {\r\n            return AuthorizationRight.Combine(StaticFileRules.UnionWith(this).Select(x => x.IsAllowed(file)));\r\n        }\r\n\r\n        /// <summary>\r\n        /// The Http headers to be written when serving up static files\r\n        /// </summary>\r\n        public readonly Cache<string, Func<string>> Headers = new Cache<string, Func<string>>();\r\n\r\n\r\n        /// <summary>\r\n        /// Default is 'public'. Establishes the public folder if you are publishing all assets to one folder at build time\r\n        /// </summary>\r\n        public string PublicFolder { get; set; }\r\n\r\n        /// <summary>\r\n        /// Defines the published version of the assets and uses this string to find the public asset folder. Is ignored if the [public]/[version] folder does not exist. Default is null.\r\n        /// </summary>\r\n        public string Version { get; set; }\r\n\r\n        /// <summary>\r\n        /// Switch between serving assets from anywhere and assets from only the public folder. Default is Anywhere.\r\n        /// </summary>\r\n        public SearchMode Mode { get; set; }\r\n\r\n        /// <summary>\r\n        /// Add additional file extensions as allowable assets\r\n        /// </summary>\r\n        public IList<string> AllowableExtensions = new List<string> {\".eot\", \".ttf\", \".woff\", \".woff2\", \".svg\", \".map\"};\r\n\r\n\r\n        /// <summary>\r\n        /// The path relative to the application where generated html templates should be \r\n        /// written\r\n        /// </summary>\r\n        public string TemplateDestination { get; set; }\r\n\r\n        /// <summary>\r\n        /// Designate all the CultureInfo's for template generation. Default is ['en-US']\r\n        /// </summary>\r\n        public IList<string> TemplateCultures = new List<string> {\"en-US\"};\r\n\r\n\r\n        /// <summary>\r\n        /// List of file patterns that should be considered to be content files\r\n        /// </summary>\r\n        public readonly IList<string> ContentMatches = new List<string> {\".txt\", \".htm\", \".html\"};\r\n\r\n        public FileWatcherManifest CreateFileWatcherManifest(IFubuApplicationFiles files)\r\n        {\r\n            var manifest = new FileWatcherManifest(files.RootPath, AssemblyFinder.FindBinPath());\r\n\r\n            if (Mode == SearchMode.PublicFolderOnly)\r\n            {\r\n                manifest.PublicAssetFolder = DeterminePublicFolder(files).Replace('\\\\', '/');\r\n            }\r\n\r\n            manifest.AssetExtensions =\r\n                assetMimeTypes().SelectMany(x => x.Extensions).Union(AllowableExtensions).ToArray();\r\n\r\n            manifest.ContentMatches = ContentMatches.ToArray();\r\n\r\n            return manifest;\r\n        }\r\n\r\n        public void Describe(Description _)\r\n        {\r\n            _.ShortDescription =\r\n                \"AssetSettings governs everything to do with client side assets, white listed content files, and the creation of server generated template exports\";\r\n\r\n            _.Properties[\"Search Mode\"] = Mode.ToString();\r\n            _.Properties[\"Version\"] = Version;\r\n            \r\n            // TODO -- bring this back some how.\r\n            //_.Properties[\"Public Asset Folder\"] = DeterminePublicFolder(AppplicationPath);\r\n            _.Properties[\"Excluded Files\"] = Exclusions;\r\n            _.Properties[\"Whitelisted file extensions\"] = AllowableExtensions.Join(\", \");\r\n            _.Properties[\"File extensions considered to be content\"] = ContentMatches.Join(\", \");\r\n            _.Properties[\"Template Cultures\"] = TemplateCultures.Join(\", \");\r\n            _.Properties[\"Template Destination\"] = TemplateDestination;\r\n            _.AddList(\"CDN Assets\", CdnAssets);\r\n        }\r\n\r\n        public string FileForAlias(string search)\r\n        {\r\n            if (Aliases.AllKeys.Contains(search)) return Aliases[search];\r\n\r\n            return null;\r\n        }\r\n\r\n        public CdnAsset FindCdnAsset(string search)\r\n        {\r\n            return CdnAssets.FirstOrDefault(x => x.File == search)\r\n                   ?? CdnAssets.FirstOrDefault(x => x.Filename() == search);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Assets/AssetTagBuilder.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Security.Policy;\r\nusing FubuMVC.Core.Http;\r\nusing HtmlTags;\r\n\r\nnamespace FubuMVC.Core.Assets\r\n{\r\n    // Tested through integration tests\r\n    public class AssetTagBuilder : IAssetTagBuilder\r\n    {\r\n        private readonly IAssetFinder _finder;\r\n        private readonly IHttpRequest _request;\r\n        private readonly FubuRuntime _runtime;\r\n\r\n        private readonly Queue<Asset> _queuedScripts = new Queue<Asset>();\r\n        private readonly IList<Asset> _writtenScripts = new List<Asset>(); \r\n\r\n        public AssetTagBuilder(IAssetFinder finder, IHttpRequest request, FubuRuntime runtime)\r\n        {\r\n            _finder = finder;\r\n            _request = request;\r\n            _runtime = runtime;\r\n        }\r\n\r\n        public IEnumerable<HtmlTag> BuildScriptTags(IEnumerable<string> scripts)\r\n        {\r\n            Func<string, string> toFullUrl = url => _request.ToFullUrl(url);\r\n\r\n            while (_queuedScripts.Any())\r\n            {\r\n                var asset = _queuedScripts.Dequeue();\r\n                if (_writtenScripts.Contains(asset)) continue;\r\n\r\n                _writtenScripts.Add(asset);\r\n\r\n                yield return new ScriptTag(_runtime.Mode, toFullUrl, asset);\r\n            }\r\n\r\n            foreach (var x in scripts)\r\n            {\r\n                var asset = _finder.FindAsset(x);\r\n\r\n                if (asset == null)\r\n                {\r\n                    yield return new ScriptTag(_runtime.Mode, toFullUrl, null, defaultUrl: x);\r\n                }\r\n                else if (!_writtenScripts.Contains(asset))\r\n                {\r\n                    _writtenScripts.Add(asset);\r\n                    yield return new ScriptTag(_runtime.Mode, toFullUrl, asset, defaultUrl: x);\r\n                }\r\n            }\r\n\r\n        }\r\n\r\n        \r\n\r\n        public IEnumerable<HtmlTag> BuildStylesheetTags(IEnumerable<string> stylesheets)\r\n        {\r\n            return stylesheets.Select(x =>\r\n            {\r\n                var asset = _finder.FindAsset(x);\r\n                var url = asset == null ? x : asset.Url;\r\n\r\n                return new StylesheetLinkTag(_request.ToFullUrl(url));\r\n            });\r\n        }\r\n\r\n        public string FindImageUrl(string urlOrFilename)\r\n        {\r\n            var asset = _finder.FindAsset(urlOrFilename);\r\n            var relativeUrl = asset == null ? urlOrFilename : asset.Url;\r\n\r\n            return _request.ToFullUrl(relativeUrl);\r\n        }\r\n\r\n        public void RequireScript(params string[] scripts)\r\n        {\r\n           scripts\r\n               .Select(x => _finder.FindAsset(x))\r\n               .Where(x => x != null && !_writtenScripts.Contains(x))\r\n               .Each(x => _queuedScripts.Enqueue(x));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Assets/DevelopmentModeAssetTagBuilder.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Http;\r\nusing HtmlTags;\r\n\r\nnamespace FubuMVC.Core.Assets\r\n{\r\n    public class DevelopmentModeAssetTagBuilder : IAssetTagBuilder\r\n    {\r\n        private readonly IAssetFinder _finder;\r\n        private readonly FubuRuntime _runtime;\r\n        private readonly AssetTagBuilder _inner;\r\n\r\n        public DevelopmentModeAssetTagBuilder(IAssetFinder finder, IHttpRequest request, FubuRuntime runtime)\r\n        {\r\n            _finder = finder;\r\n            _runtime = runtime;\r\n\r\n            _inner = new AssetTagBuilder(finder, request, runtime);\r\n        }\r\n\r\n        public IEnumerable<HtmlTag> BuildScriptTags(IEnumerable<string> scripts)\r\n        {\r\n            var results = find(scripts);\r\n\r\n            if (results.Any(x => x.Asset == null))\r\n            {\r\n                throw new MissingAssetException(\"Requested script(s) {0} cannot be found\".ToFormat(Result.MissingListDescription(results)));\r\n            }\r\n\r\n            return _inner.BuildScriptTags(scripts);\r\n        }\r\n\r\n        private IEnumerable<Result> find(IEnumerable<string> names)\r\n        {\r\n            return names.Select(x => new Result\r\n            {\r\n                Asset = _finder.FindAsset(x),\r\n                Name = x\r\n            }).ToArray();\r\n        }\r\n\r\n        public class Result\r\n        {\r\n            public static string MissingListDescription(IEnumerable<Result> results)\r\n            {\r\n                return results.Where(x => x.Asset == null).Select(x => x.Description)\r\n                    .Join(\", \");\r\n            }\r\n\r\n            public string Name;\r\n            public Asset Asset;\r\n\r\n            public string Description\r\n            {\r\n                get\r\n                {\r\n                    return \"'\" + Name + \"'\";\r\n                }\r\n            }\r\n        }\r\n\r\n        public IEnumerable<HtmlTag> BuildStylesheetTags(IEnumerable<string> stylesheets)\r\n        {\r\n            var results = find(stylesheets);\r\n\r\n            if (results.Any(x => x.Asset == null))\r\n            {\r\n                throw new MissingAssetException(\"Requested stylesheets(s) {0} cannot be found\".ToFormat(Result.MissingListDescription(results)));\r\n            }\r\n\r\n            return _inner.BuildStylesheetTags(stylesheets);\r\n        }\r\n\r\n        public string FindImageUrl(string urlOrFilename)\r\n        {\r\n            var asset = _finder.FindAsset(urlOrFilename);\r\n            if (asset == null)\r\n            {\r\n                throw new MissingAssetException(\"Requested image '{0}' cannot be found\".ToFormat(urlOrFilename));\r\n            }\r\n\r\n            return _inner.FindImageUrl(urlOrFilename);\r\n        }\r\n\r\n        public void RequireScript(params string[] scripts)\r\n        {\r\n            _inner.RequireScript(scripts);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Assets/FileWatcherManifest.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing FubuCore;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Runtime.Files;\nusing FubuMVC.Core.Services.Remote;\n\nnamespace FubuMVC.Core.Assets\n{\n    public class FileWatcherManifest : IDisposable\n    {\n        public string ConfigurationFile = Path.GetFileName(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);\n        public string[] ContentMatches = new string[0];\n\n        public string PublicAssetFolder = string.Empty;\n\n        public string[] AssetExtensions = new string[0];\n\n        public readonly string ApplicationPath;\n        public readonly string BinPath;\n\n        private AppDomainFileChangeWatcher _appDomainWatcher;\n        private FileChangeWatcher _watcher;\n\n        public FileWatcherManifest(string applicationPath, string binPath)\n        {\n            ApplicationPath = applicationPath;\n            BinPath = binPath;\n        }\n\n        public void Watch(bool refreshContent, IApplicationObserver observer)\n        {\n            _appDomainWatcher = new AppDomainFileChangeWatcher(observer.RecycleAppDomain);\n            _appDomainWatcher.WatchBinariesAt(BinPath);\n\n\n            if (!refreshContent)\n            {\n                return;\n            }\n\n            var watchedDirectory = PublicAssetFolder.IsNotEmpty() ? PublicAssetFolder : ApplicationPath;\n            var pattern = \"*.css;*.js\";\n            ContentMatches.Each(ext =>\n            {\n                if (!ext.StartsWith(\"*\")) ext = \"*\" + ext;\n                pattern += \";\" + ext;\n            });\n\n            var assetFileSet = FileSet.Deep(pattern);\n\n            _watcher = new FileChangeWatcher(watchedDirectory, assetFileSet, new ContentRefresher(observer));\n        }\n\n        public class ContentRefresher : IChangeSetHandler\n        {\n            private readonly IApplicationObserver _observer;\n\n            public ContentRefresher(IApplicationObserver observer)\n            {\n                _observer = observer;\n            }\n\n            public void Handle(ChangeSet changes)\n            {\n                _observer.RefreshContent();\n            }\n        }\n\n\n        public bool IsWatching()\n        {\n            return _watcher.Enabled;\n        }\n\n        public void StopWatching()\n        {\n            _appDomainWatcher.StopWatching();\n            _watcher.Stop();\n        }\n\n        public void StartWatching()\n        {\n            _appDomainWatcher.StartWatching();\n            _watcher.Start();\n        }\n\n        public void Dispose()\n        {\n            StopWatching();\n            _watcher.Dispose();\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Assets/IAssetTagBuilder.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing HtmlTags;\r\n\r\nnamespace FubuMVC.Core.Assets\r\n{\r\n    public interface IAssetTagBuilder\r\n    {\r\n        IEnumerable<HtmlTag> BuildScriptTags(IEnumerable<string> scripts);\r\n        IEnumerable<HtmlTag> BuildStylesheetTags(IEnumerable<string> scripts);\r\n        string FindImageUrl(string urlOrFilename);\r\n\r\n        void RequireScript(params string[] scripts);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Assets/JavascriptRouting/IJavascriptRouter.cs",
    "content": "using System.Collections.Generic;\r\n\r\nnamespace FubuMVC.Core.Assets.JavascriptRouting\r\n{\r\n    public interface IJavascriptRouter\r\n    {\r\n        IEnumerable<JavascriptRoute> Routes();\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Assets/JavascriptRouting/JavascriptRoute.cs",
    "content": "using System;\r\nusing System.Linq;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Projections;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Querying;\r\n\r\nnamespace FubuMVC.Core.Assets.JavascriptRouting\r\n{\r\n    public class JavascriptRoute\r\n    {\r\n        public string Name;\r\n        public string Method;\r\n        public Func<IChainResolver, BehaviorChain> Finder;\r\n\r\n        public RoutedChain FindChain(IChainResolver resolver)\r\n        {\r\n            var chain = Finder(resolver) as RoutedChain;\r\n\r\n            if (chain == null)\r\n            {\r\n                throw new Exception(\"Unable to find a routed chain for a Javascript route named \" + Name);\r\n            }\r\n            return chain;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Assets/JavascriptRouting/JavascriptRouteWriter.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Projections;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Querying;\r\nusing FubuMVC.Core.Registration.Routes;\r\n\r\nnamespace FubuMVC.Core.Assets.JavascriptRouting\r\n{\r\n    // Tested by integration tests only\r\n    public class JavascriptRouteWriter\r\n    {\r\n        private readonly IJavascriptRouteData _routeData;\r\n        private readonly IChainResolver _resolver;\r\n\r\n        public JavascriptRouteWriter(IJavascriptRouteData routeData, IChainResolver resolver)\r\n        {\r\n            _routeData = routeData;\r\n            _resolver = resolver;\r\n        }\r\n\r\n        public IDictionary<string, object> Write(IEnumerable<JavascriptRoute> routes)\r\n        {\r\n            var node = new DictionaryMediaNode();\r\n\r\n            routes.Each(x => {\r\n                var child = node.AddChild(x.Name);\r\n                var chain = x.FindChain(_resolver);\r\n                child.SetAttribute(\"name\", x.Name);\r\n                child.SetAttribute(\"method\", x.Method);\r\n\r\n                child.SetAttribute(\"url\", _routeData.ToUrl(chain));\r\n\r\n                var parameters = _routeData.ToParameters(chain);\r\n                if (parameters.Any())\r\n                {\r\n                    child.SetAttribute(\"params\", parameters);\r\n                }\r\n                \r\n\r\n\r\n            });\r\n\r\n            return node.Values;\r\n        }\r\n    }\r\n\r\n    public class JavascriptRouteData : IJavascriptRouteData\r\n    {\r\n        private readonly IHttpRequest _request;\r\n\r\n        public JavascriptRouteData(IHttpRequest request)\r\n        {\r\n            _request = request;\r\n        }\r\n\r\n        public string ToUrl(RoutedChain chain)\r\n        {\r\n            return _request.ToFullUrl(chain.GetRoutePattern());\r\n        }\r\n\r\n        public IEnumerable<RouteParameter> ToParameters(RoutedChain chain)\r\n        {\r\n            if (chain.Route.Input == null)\r\n            {\r\n                return Enumerable.Empty<RouteParameter>();\r\n            }\r\n\r\n            return chain.Route.Input.RouteParameters;\r\n        }\r\n    }\r\n\r\n    public interface IJavascriptRouteData\r\n    {\r\n        string ToUrl(RoutedChain chain);\r\n        IEnumerable<RouteParameter> ToParameters(RoutedChain chain);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Assets/JavascriptRouting/JavascriptRouter.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Querying;\r\n\r\nnamespace FubuMVC.Core.Assets.JavascriptRouting\r\n{\r\n    // Completely covered by integration tests\r\n    public abstract class JavascriptRouter : IJavascriptRouter\r\n    {\r\n        private readonly IList<JavascriptRoute> _routes = new List<JavascriptRoute>();\r\n\r\n\r\n        public IEnumerable<JavascriptRoute> Routes()\r\n        {\r\n            return _routes;\r\n        }\r\n\r\n        public void Add(RoutedChain chain)\r\n        {\r\n            if (chain.RouteName.IsEmpty()) throw new ArgumentOutOfRangeException(\"chain.RouteName\");\r\n\r\n            var method = chain.Route.AllowedHttpMethods.FirstOrDefault();\r\n            if (method == null) throw new ArgumentOutOfRangeException(\"chain\", \"Must have at least one HTTP method constraint specified, url: \" + chain.GetRoutePattern());\r\n        \r\n            _routes.Add(new JavascriptRoute\r\n            {\r\n                Finder = r => chain,\r\n                Method = method.ToUpper(),\r\n                Name = chain.RouteName\r\n            });\r\n        }\r\n\r\n        public ChainExpression Get(string name)\r\n        {\r\n            return new ChainExpression(this, name, \"GET\");\r\n        }\r\n\r\n        public ChainExpression Post(string name)\r\n        {\r\n            return new ChainExpression(this, name, \"POST\");\r\n        }\r\n\r\n        public ChainExpression Put(string name)\r\n        {\r\n            return new ChainExpression(this, name, \"PUT\");\r\n        }\r\n\r\n        public ChainExpression Delete(string name)\r\n        {\r\n            return new ChainExpression(this, name, \"DELETE\");\r\n        }\r\n\r\n        public class ChainExpression\r\n        {\r\n            private readonly JavascriptRoute _route;\r\n\r\n            public ChainExpression(JavascriptRouter parent, string name, string method)\r\n            {\r\n                _route = new JavascriptRoute\r\n                {\r\n                    Name = name,\r\n                    Method = method\r\n                };\r\n\r\n                parent._routes.Add(_route);\r\n            }\r\n\r\n            public void InputType<T>()\r\n            {\r\n                _route.Finder = x => x.FindUniqueByType(typeof (T), _route.Method);\r\n            }\r\n\r\n            public void Action<T>(Expression<Action<T>> expression)\r\n            {\r\n                _route.Finder = x => x.Find(expression, _route.Method);\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Assets/MissingAssetException.cs",
    "content": "﻿using System;\r\nusing System.Runtime.Serialization;\r\n\r\nnamespace FubuMVC.Core.Assets\r\n{\r\n    [Serializable]\r\n    public class MissingAssetException : Exception\r\n    {\r\n        public MissingAssetException(string message) : base(message)\r\n        {\r\n        }\r\n\r\n        protected MissingAssetException(SerializationInfo info, StreamingContext context) : base(info, context)\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Assets/ObsoleteAssetFilePageExtensions.cs",
    "content": "﻿using System;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.View;\r\nusing HtmlTags;\r\n\r\nnamespace FubuMVC.Core.Assets\r\n{\r\n    public static class ObsoleteAssetFilePageExtensions\r\n    {\r\n        /// <summary>\r\n        /// OBSOLETE, only here to provide guidance on new usage\r\n        /// </summary>\r\n        /// <param name=\"page\"></param>\r\n        /// <param name=\"assets\"></param>\r\n        [Obsolete(\"This is deprecated and will throw an exception.  Use Css() or Script() instead\")]\r\n        public static TagList Asset(this IFubuPage page, params string[] assets)\r\n        {\r\n            throw new NotSupportedException(\"The IFubuPage.Asset() method is no longer functional in 2.0.  Use IFubuPage.Css() and/or IFubuPage.Script() instead\");\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// OBSOLETE, only here to provide guidance on new usage\r\n        /// </summary>\r\n        /// <param name=\"page\"></param>\r\n        /// <param name=\"assets\"></param>\r\n        [Obsolete(\"This method is deprecated and will throw an exception. Use OptionalCss() or OptionalScript() instead\")]\r\n        public static void OptionalAsset(this IFubuPage page, params string[] assets)\r\n        {\r\n            throw new NotSupportedException(\"The IFubuPage.OptionalAsset() method is no longer functional in 2.0. Use IFubuPage.OptionalScript() or IFubuPage.OptionalCss() instead\");\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// OBSOLETE, Removed in 2.0.  Use IFubuPage.Script() instead\r\n        /// </summary>\r\n        /// <param name=\"page\"></param>\r\n        /// <param name=\"scriptNames\"></param>\r\n        /// <returns></returns\r\n        [Obsolete(\"Removed in 2.0.  Use IFubuPage.Script() instead\")]\r\n        public static TagList WriteScriptTags(this IFubuPage page, params string[] scriptNames)\r\n        {\r\n            throw new NotSupportedException(\"Removed in 2.0.  Use IFubuPage.Script() instead\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// OBSOLETE, Removed in 2.0.  Use IFubuPage.Script() or IFubuPage.Css() instead\r\n        /// </summary>\r\n        /// <param name=\"page\"></param>\r\n        /// <param name=\"assetNames\"></param>\r\n        /// <returns></returns>\r\n        [Obsolete(\"Removed in 2.0.  Use IFubuPage.Script() or IFubuPage.Css() instead\")]\r\n        public static TagList WriteAssetTags(this IFubuPage page, params string[] assetNames)\r\n        {\r\n            throw new NotSupportedException(\"Removed in 2.0.  Use IFubuPage.Script() or IFubuPage.Css() instead\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// OBSOLETE, Removed in 2.0.  Use IFubuPage.Script() or IFubuPage.Css() instead\r\n        /// </summary>\r\n        /// <param name=\"page\"></param>\r\n        /// <param name=\"mimeType\"></param>\r\n        /// <param name=\"names\"></param>\r\n        /// <returns></returns>\r\n        [Obsolete(\"Removed in 2.0.  Use IFubuPage.Script() or IFubuPage.Css() instead\")]\r\n        public static TagList WriteAssetTagsImmediately(this IFubuPage page, MimeType mimeType, params string[] names)\r\n        {\r\n            throw new NotSupportedException(\"Removed in 2.0.  Use IFubuPage.Script() or IFubuPage.Css() instead\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// OBSOLETE, Removed in 2.0.  Use IFubuPage.Script() instead\r\n        /// </summary>\r\n        /// <param name=\"page\"></param>\r\n        /// <param name=\"names\"></param>\r\n        /// <returns></returns>\r\n        [Obsolete(\"Removed in 2.0.  Use IFubuPage.Script() instead\")]\r\n        public static TagList WriteScriptTagsImmediately(this IFubuPage page, params string[] names)\r\n        {\r\n            throw new NotSupportedException(\"Removed in 2.0.  Use IFubuPage.Script() instead\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// OBSOLETE, Removed in 2.0.  Use IFubuPage.Css() instead\r\n        /// </summary>\r\n        /// <param name=\"page\"></param>\r\n        /// <param name=\"names\"></param>\r\n        /// <returns></returns>\r\n        [Obsolete(\"Removed in 2.0.  Use IFubuPage.Css() instead\")]\r\n        public static TagList WriteCssTagsImmediately(this IFubuPage page, params string[] names)\r\n        {\r\n            throw new NotSupportedException(\"WriteCssTagsImmediately() is obsolete.  Just use the Css() method instead\");\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// OBSOLETE, Removed in 2.0.  Use IFubuPage.Css() instead\r\n        /// </summary>\r\n        /// <param name=\"page\"></param>\r\n        /// <param name=\"styleNames\"></param>\r\n        /// <returns></returns>\r\n        [Obsolete(\"Removed in 2.0.  Use IFubuPage.Css() instead\")]\r\n        public static TagList WriteCssTags(this IFubuPage page, params string[] styleNames)\r\n        {\r\n            throw new NotSupportedException(\"WriteCssTags() is obsolete.  Just use the Css() method instead\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Assets/ScriptTag.cs",
    "content": "﻿using System;\r\nusing FubuCore;\r\nusing HtmlTags;\r\n\r\nnamespace FubuMVC.Core.Assets\r\n{\r\n    public class ScriptTag : HtmlTag\r\n    {\r\n        public ScriptTag(string mode, Func<string, string> toFullUrl, Asset asset, string defaultUrl = null)\r\n            : base(\"script\")\r\n        {\r\n            // http://stackoverflow.com/a/1288319/75194 \r\n            Attr(\"type\", \"text/javascript\");\r\n\r\n            if (asset == null)\r\n            {\r\n                Attr(\"src\", toFullUrl(defaultUrl));\r\n                return;\r\n            }\r\n\r\n            if (asset.CdnUrl.IsNotEmpty())\r\n            {\r\n                Attr(\"src\", asset.CdnUrl);\r\n                if (asset.FallbackTest.IsNotEmpty() && asset.File != null)\r\n                {\r\n                    Next = new HtmlTag(\"script\");\r\n                    var text = \"if ({0}) document.write(unescape(\\\"%3Cscript src='{1}' type='text/javascript'%3E%3C/script%3E\\\"));\".ToFormat(asset.FallbackTest, asset.Url);\r\n\r\n                    Next.Encoded(false);\r\n                    Next.Text(text);\r\n                }\r\n\r\n                return;\r\n            }\r\n\r\n            var url = asset.Url;\r\n            if (mode.InDevelopment() && asset.File != null)\r\n            {\r\n                url += \"?Etag=\" + asset.File.Etag();\r\n            }\r\n\r\n            Attr(\"src\", toFullUrl(url));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Assets/StylesheetLinkTag.cs",
    "content": "﻿using FubuMVC.Core.Runtime;\r\nusing HtmlTags;\r\n\r\nnamespace FubuMVC.Core.Assets\r\n{\r\n    public class StylesheetLinkTag : HtmlTag\r\n    {\r\n        public StylesheetLinkTag(string url)\r\n            : base(\"link\")\r\n        {\r\n            Attr(\"href\", url);\r\n            Attr(\"rel\", \"stylesheet\");\r\n            Attr(\"type\", MimeType.Css.Value);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Attributes/CanBeMultiplesAttribute.cs",
    "content": "using System;\n\nnamespace FubuMVC.Core\n{\n    /// <summary>\n    /// Only used on IConfigurationAction classes.  Forces FubuMVC to accept multiple\n    /// instances of an IConfigurationAction type in Policies.Add()\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]\n    public class CanBeMultiplesAttribute : Attribute\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Attributes/CompressContentAttribute.cs",
    "content": "using System;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core\n{\n    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]\n    public class CompressContentAttribute : ModifyChainAttribute\n    {\n        public override void Alter(ActionCallBase call)\n        {\n            call.Chain.ApplyCompression();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Attributes/DoNotAutoImportAttribute.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core\n{\n    /// <summary>\n    /// Use this attribute on an IFubuRegistryExtension class to \n    /// prevent FubuMVC from automatically applying the extension\n    /// if it is contained in a Bottle assembly\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Class, Inherited = false)]\n    public class DoNotAutoImportAttribute : Attribute\n    {\n         \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Attributes/FubuModuleAttribute.cs",
    "content": "using System;\n\nnamespace FubuMVC.Core\n{\n    /// <summary>\n    /// FubuMVC applications will treat any assembly marked with the \n    /// [FubuModule] attribute as a Bottle\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Assembly)]\n    public class FubuModuleAttribute : Attribute\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Attributes/FubuPartialAttribute.cs",
    "content": "using System;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core\n{\n    /// <summary>\n    /// Explicitly marks an endpoint as \"partial only\"\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]\n    public class FubuPartialAttribute : Attribute\n    {\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Attributes/NoDiagnosticsAttribute.cs",
    "content": "using System;\n\nnamespace FubuMVC.Core\n{\n    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]\n    public class NoDiagnosticsAttribute : Attribute\n    {\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Attributes/QueryStringAttribute.cs",
    "content": "using System;\n\nnamespace FubuMVC.Core\n{\n    /// <summary>\n    /// Marks a property as bound to the querystring so that a non-default\n    /// value of the marked property will be added to the generated url\n    /// in IUrlRegistry\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Property)]\n    public class QueryStringAttribute : Attribute\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Attributes/RouteInputAttribute.cs",
    "content": "using System;\n\nnamespace FubuMVC.Core\n{\n    /// <summary>\n    /// Marks a property as a route input\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Property)]\n    public class RouteInputAttribute : Attribute\n    {\n        public RouteInputAttribute()\n        {\n        }\n\n        public RouteInputAttribute(string defaultValue)\n        {\n            DefaultValue = defaultValue;\n        }\n\n        public object DefaultObject\n        {\n            set { DefaultValue = value.ToString(); }\n        }\n\n        public string DefaultValue { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Attributes/TagAttribute.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core\n{\n    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]\n    public class TagAttribute : ModifyChainAttribute\n    {\n        private readonly string[] _tags;\n\n        public TagAttribute(params string[] tags)\n        {\n            _tags = tags;\n        }\n\n        public override void Alter(ActionCallBase call)\n        {\n            var chain = call.ParentChain();\n            chain.Tags.Fill(_tags);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Attributes/UrlAliasAttribute.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core\n{\n    /// <summary>\n    /// Explicitly specifies an additional route for the chain containing this method as its ActionCall.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]\n    public class UrlAliasAttribute : ModifyChainAttribute\n    {\n        private readonly string _pattern;\n\n        public UrlAliasAttribute(string pattern)\n        {\n            _pattern = pattern;\n        }\n\n        public override void Alter(ActionCallBase call)\n        {\n            if (call is ActionCall)\n            {\n                var chain = call.ParentChain();\n                var alias = call.As<ActionCall>().BuildRouteForPattern(_pattern);\n\n                chain.As<RoutedChain>().AddRouteAlias(alias);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Attributes/UrlFolderAttribute.cs",
    "content": "using System;\n\nnamespace FubuMVC.Core\n{\n    /// <summary>\n    /// Alters the route generation in the default routing conventions\n    /// to override the usual handling of the class name with the value of \n    /// the [UrlFolder] name\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Class)]\n    public class UrlFolderAttribute : Attribute\n    {\n        private readonly string _folder;\n\n        public UrlFolderAttribute(string folder)\n        {\n            _folder = folder;\n        }\n\n        public string Folder\n        {\n            get { return _folder; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Attributes/UrlForNewAttribute.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core\n{\n    /// <summary>\n    /// Marks this endpoint as the creator of the designated type\n    /// so that this endpoint will resolve as IUrlRegistry.UrlForNew(type)\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]\n    public class UrlForNewAttribute : ModifyChainAttribute\n    {\n        private readonly Type _type;\n\n        public UrlForNewAttribute(Type type)\n        {\n            _type = type;\n        }\n\n        public Type Type\n        {\n            get { return _type; }\n        }\n\n        public override void Alter(ActionCallBase call)\n        {\n            call.ParentChain().As<RoutedChain>().UrlCategory.Creates.Add(Type);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Attributes/UrlPatternAttribute.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Registration.Routes;\n\nnamespace FubuMVC.Core\n{\n\n    public class GetAttribute : UrlPatternAttribute\n    {\n        public GetAttribute(string pattern) : base(pattern)\n        {\n        }\n\n        public override IRouteDefinition BuildRoute(Type inputType)\n        {\n            var route = base.BuildRoute(inputType);\n            route.AddHttpMethodConstraint(\"GET\");\n\n            return route;\n        }\n    }\n\n    public class PostAttribute : UrlPatternAttribute\n    {\n        public PostAttribute(string pattern)\n            : base(pattern)\n        {\n        }\n\n        public override IRouteDefinition BuildRoute(Type inputType)\n        {\n            var route = base.BuildRoute(inputType);\n            route.AddHttpMethodConstraint(\"POST\");\n\n            return route;\n        }\n    }\n\n    public class PutAttribute : UrlPatternAttribute\n    {\n        public PutAttribute(string pattern)\n            : base(pattern)\n        {\n        }\n\n        public override IRouteDefinition BuildRoute(Type inputType)\n        {\n            var route = base.BuildRoute(inputType);\n            route.AddHttpMethodConstraint(\"PUT\");\n\n            return route;\n        }\n    }\n\n    public class DeleteAttribute : UrlPatternAttribute\n    {\n        public DeleteAttribute(string pattern)\n            : base(pattern)\n        {\n        }\n\n        public override IRouteDefinition BuildRoute(Type inputType)\n        {\n            var route = base.BuildRoute(inputType);\n            route.AddHttpMethodConstraint(\"DELETE\");\n\n            return route;\n        }\n    }\n\n    /// <summary>\n    /// Explicitly specify the url pattern for the chain containing this method\n    /// as its ActionCall.  Supports inputs like \"folder/find/{Id}\"\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]\n    public class UrlPatternAttribute : ViewSubjectAttribute\n    {\n        private readonly string _pattern;\n\n        public UrlPatternAttribute(string pattern)\n        {\n            _pattern = pattern.Trim();\n        }\n\n        public virtual IRouteDefinition BuildRoute(Type inputType)\n        {\n            var index = _pattern.IndexOf(\"::\");\n            var pattern = index == -1 ? _pattern : _pattern.Substring(index + 2, _pattern.Length - index -2);\n\n            var route = inputType == null\n                ? new RouteDefinition(pattern)\n                : RouteBuilder.Build(inputType, pattern);\n\n            if (index > -1)\n            {\n                _pattern.Substring(0, index).ToDelimitedArray(',').Each(route.AddHttpMethodConstraint);\n            }\n\n            return route;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Attributes/UrlRegistryCategoryAttribute.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core\n{\n    /// <summary>\n    /// Explicitly adds a category to the Route of this endpoint.  Used to resolve or match\n    /// url's or endpoints in usages like IUrlRegistry.UrlFor(model, category)\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false)]\n    public class UrlRegistryCategoryAttribute : ModifyChainAttribute\n    {\n        private readonly string _category;\n\n        public UrlRegistryCategoryAttribute(string category)\n        {\n            _category = category;\n        }\n\n        public string Category\n        {\n            get { return _category; }\n        }\n\n        public override void Alter(ActionCallBase call)\n        {\n            call.ParentChain().As<RoutedChain>().UrlCategory.Category = Category;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Attributes/ViewSubjectAttribute.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core\n{\n    [AttributeUsage(AttributeTargets.Class)]\n    public class ViewSubjectAttribute : Attribute\n    {\n         \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Attributes/WrapWithAttribute.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core\n{\n    /// <summary>\n    /// Applies one or more \"Wrapper\" behaviors of the given types to \n    /// this chain.  The Wrapper nodes are applied immediately before\n    /// this ActionCall, from inside to outside\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]\n    public class WrapWithAttribute : ModifyChainAttribute\n    {\n        private readonly Type[] _behaviorTypes;\n\n        public WrapWithAttribute(params Type[] behaviorTypes)\n        {\n            _behaviorTypes = behaviorTypes;\n        }\n\n        public Type[] BehaviorTypes\n        {\n            get { return _behaviorTypes; }\n        }\n\n        public override void Alter(ActionCallBase call)\n        {\n            _behaviorTypes.Each(x => call.WrapWith(x));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/BehaviorChainExtensions.cs",
    "content": "using System;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Http.Compression;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core\n{\n    public static class BehaviorChainExtensions\n    {\n        public readonly static HttpContentEncodingFilter DefaultFilter = new HttpContentEncodingFilter(new HttpContentEncoders(new IHttpContentEncoding[] { new GZipHttpContentEncoding(), new DeflateHttpContentEncoding() }));\n\n        public static void ApplyCompression(this BehaviorChain chain, params IHttpContentEncoding[] encodings)\n        {\n            if (chain.Calls.Any(x => x.HasAttribute<DoNotCompressAttribute>()))\n            {\n                return;\n            }\n\n            if (encodings.Any())\n            {\n                var filter = new HttpContentEncodingFilter(new HttpContentEncoders(encodings));\n                chain.AddFilter(filter);\n            }\n            else\n            {\n                chain.AddFilter(DefaultFilter);\n            }\n        }\n\n        public static bool HandlerTypeIs<T>(this BehaviorChain chain)\n        {\n            return chain.Calls.Any(x => x.HandlerType == typeof (T));\n        }\n\n        public static void WrapWith<T>(this BehaviorChain chain) where T : IActionBehavior\n        {\n            chain.InsertFirst(Wrapper.For<T>());\n        }\n\n        public static bool IsClientMessage(this Type type)\n        {\n            if (type == null) return false;\n            return type.HasAttribute<ClientMessageAttribute>() || type.CanBeCastTo<ClientMessage>();\n        }\n\n        public static bool IsAggregatedChain(this BehaviorChain chain)\n        {\n            return chain.InputType().IsClientMessage() || chain.ResourceType().IsClientMessage();\n        }\n\n        public static string GetDefaultMessageName(this Type type)\n        {\n            return type.Name.SplitPascalCase().Replace(\" \", \"-\").ToLower();\n        }\n\n        public static string GetMessageName(this Type type)\n        {\n            string messageName = null;\n\n            if (type.HasAttribute<ClientMessageAttribute>())\n            {\n                messageName = type.GetAttribute<ClientMessageAttribute>().MessageName;\n            }\n\n            if (type.CanBeCastTo<ClientMessage>())\n            {\n                messageName = Activator.CreateInstance(type).As<ClientMessage>().MessageName();\n            }\n\n            return messageName.IsEmpty()\n                ? type.GetDefaultMessageName()\n                : messageName;\n        }\n\n        public static bool AnyActionHasAttribute<T>(this BehaviorChain chain) where T : Attribute\n        {\n            return chain.OfType<ActionCall>().Any(x => x.HasAttribute<T>());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Behaviors/ActionInvoker.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Behaviors\n{\n    public static class TaskExtensions\n    {\n        public static Task SetFubuRequestValue<T>(Task<T> task, IFubuRequest request) where T : class\n        {\n            return task.ContinueWith(t => request.Set<T>(t.Result), TaskContinuationOptions.NotOnFaulted);\n        }\n    }\n\n    public class ActionInvocation<TEndpoint>\n    {\n\n\n        private static readonly MethodInfo FubuRequestSet = typeof(IFubuRequest).GetMethod(nameof(IFubuRequest.Set),\n            new Type[] {typeof(Type), typeof(object)});\n\n        private readonly Func<TEndpoint, IFubuRequest, Task> _action;\n\n        private static readonly MethodInfo SetFubuRequestValue =\n            typeof(TaskExtensions).GetMethod(nameof(TaskExtensions.SetFubuRequestValue), BindingFlags.Static | BindingFlags.Public);\n\n        \n        public ActionInvocation(MethodInfo method)\n        {\n            var request = Expression.Parameter(typeof(IFubuRequest), \"request\");\n            var endpoint = Expression.Parameter(typeof(TEndpoint), \"endpoint\");\n\n            var inputs = method.GetParameters().Select(param => buildExpressionForParameter(request, param));\n\n            Expression body = Expression.Call(endpoint, method, inputs);\n\n            if (method.ReturnType != typeof(Task) && method.ReturnType.CanBeCastTo<Task>())\n            {\n                var outputType = method.ReturnType.GetGenericArguments().Single();\n\n                var setRequestMethod = SetFubuRequestValue.MakeGenericMethod(outputType);\n                body = Expression.Call(null, setRequestMethod, body, request);\n\n            }\n            else if (method.ReturnType != typeof(void) && method.ReturnType != typeof(Task))\n            {\n                body = setRequestExpression(method.ReturnType, request, body);\n            }\n\n\n            if (!body.Type.CanBeCastTo<Task>())\n            {\n                var returnStatement = Expression.Constant(Task.CompletedTask);\n                body = Expression.Block(body, returnStatement);\n            }\n\n\n            var lambda = Expression.Lambda<Func<TEndpoint, IFubuRequest, Task>>(body, endpoint, request);\n\n            _action = lambda.Compile();\n        }\n\n        private Expression setRequestExpression(Type outputType, ParameterExpression request, Expression value)\n        {\n            return Expression.Call(request, FubuRequestSet, Expression.Constant(outputType), value);\n        }\n\n        private Expression buildExpressionForParameter(ParameterExpression request, ParameterInfo parameter)\n        {\n            var method = typeof(IFubuRequest).GetMethod(nameof(IFubuRequest.Get), new Type[0]).MakeGenericMethod(parameter.ParameterType);\n\n            return Expression.Call(request, method);\n        }\n\n        public Task Invoke(IFubuRequest request, TEndpoint endpoint)\n        {\n            return _action(endpoint, request);\n        }\n    }\n\n\n    public class ActionInvoker<TEndpoint> : BasicBehavior\n    {\n        private readonly IFubuRequest _request;\n        private readonly TEndpoint _endpoint;\n        private readonly ActionInvocation<TEndpoint> _invocation;\n\n        public ActionInvoker(IFubuRequest request, TEndpoint endpoint, ActionInvocation<TEndpoint> invocation) : base(PartialBehavior.Executes)\n        {\n            _request = request;\n            _endpoint = endpoint;\n            _invocation = invocation;\n        }\n\n        protected override async Task<DoNext> performInvoke()\n        {\n            await _invocation.Invoke(_request, _endpoint).ConfigureAwait(false);\n\n            return DoNext.Continue;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Behaviors/BasicBehavior.cs",
    "content": "using System;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Core.Behaviors\r\n{\r\n    public abstract class BasicBehavior : IActionBehavior\r\n    {\r\n        private readonly PartialBehavior _partialBehavior;\r\n        private readonly Func<Task> _innerInvoke;\r\n\r\n        protected BasicBehavior(PartialBehavior partialBehavior)\r\n        {\r\n            _partialBehavior = partialBehavior;\r\n\r\n\r\n        }\r\n\r\n        public IActionBehavior InsideBehavior { get; set; }\r\n\r\n        public Task Invoke()\r\n        {\r\n            return InsideBehavior == null \r\n                ? invoke(() => Task.CompletedTask) \r\n                : invoke(() => InsideBehavior.Invoke());\r\n        }\r\n\r\n        private async Task invoke(Func<Task> inner)\r\n        {\r\n            var doNext = await performInvoke().ConfigureAwait(false);\r\n            if (doNext == DoNext.Continue)\r\n            {\r\n                await inner().ConfigureAwait(false);\r\n            }\r\n\r\n            await afterInsideBehavior().ConfigureAwait(false);\r\n        }\r\n\r\n        public async Task InvokePartial()\r\n        {\r\n            Func<Task> inner = () => Task.CompletedTask;\r\n            if (InsideBehavior != null)\r\n            {\r\n                inner = InsideBehavior.InvokePartial;\r\n            }\r\n\r\n            if (_partialBehavior == PartialBehavior.Executes)\r\n            {\r\n                await invoke(inner).ConfigureAwait(false);\r\n            }\r\n            else\r\n            {\r\n                await inner().ConfigureAwait(false);\r\n            }\r\n        }\r\n\r\n        protected virtual Task<DoNext> performInvoke()\r\n        {\r\n            return Task.FromResult(DoNext.Continue);\r\n        }\r\n\r\n        protected virtual Task afterInsideBehavior()\r\n        {\r\n            return Task.CompletedTask;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Behaviors/IActionBehavior.cs",
    "content": "using System;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Core.Behaviors\r\n{\r\n    /// <summary>\r\n    /// Implement this contract to be able to take part in behavior chains\r\n    /// </summary>\r\n    // SAMPLE: IActionBehavior\r\n    public interface IActionBehavior\r\n    {\r\n        Task Invoke();\r\n        Task InvokePartial();\r\n    }\r\n    // ENDSAMPLE\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Behaviors/InterceptExceptionBehavior.cs",
    "content": "﻿using System;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Behaviors\r\n{\r\n\tpublic abstract class InterceptExceptionBehavior<T> : IActionBehavior\r\n\t\twhere T : Exception\r\n\t{\r\n\t\tpublic IActionBehavior InsideBehavior { get; set; }\r\n\r\n\t\tpublic async Task InvokePartial()\r\n\t\t{\r\n\t\t    if (InsideBehavior != null)\r\n\t\t    {\r\n\t\t        await InsideBehavior.InvokePartial().ConfigureAwait(false);\r\n\t\t    }\r\n\t\t}\r\n\r\n\t\tpublic async Task Invoke()\r\n\t\t{\r\n\t\t\tif (InsideBehavior == null)\r\n\t\t\t\tthrow new FubuAssertionException(\"When interception exceptions you must have an inside behavior. Otherwise, there would be nothing to intercept.\");\r\n\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tawait InsideBehavior.Invoke().ConfigureAwait(false);\r\n\t\t\t}\r\n\t\t\tcatch (T exception)\r\n\t\t\t{\r\n\t\t\t\tif (!ShouldHandle(exception))\r\n\t\t\t\t\tthrow;\r\n\r\n\t\t\t\tHandle(exception);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic virtual bool ShouldHandle(T exception)\r\n\t\t{\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tpublic abstract void Handle(T exception);\r\n\t}\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Behaviors/NulloBehavior.cs",
    "content": "using System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Core.Behaviors\r\n{\r\n    public class NulloBehavior : IActionBehavior\r\n    {\r\n        public Task Invoke()\r\n        {\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            return Task.CompletedTask;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Behaviors/PartialBehavior.cs",
    "content": "namespace FubuMVC.Core.Behaviors\n{\n    public enum PartialBehavior\n    {\n        Ignored,\n        Executes\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Behaviors/WrappingBehavior.cs",
    "content": "using System;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Core.Behaviors\r\n{\r\n    public abstract class WrappingBehavior : IActionBehavior\r\n    {\r\n        public IActionBehavior Inner { get; set; }\r\n\r\n        public async Task Invoke()\r\n        {\r\n            if (Inner != null)\r\n            {\r\n                await invoke(() => Inner.Invoke()).ConfigureAwait(false);\r\n            }\r\n        }\r\n\r\n        public async Task InvokePartial()\r\n        {\r\n            if (Inner != null)\r\n            {\r\n                await invoke(() => Inner.InvokePartial()).ConfigureAwait(false);\r\n            }\r\n        }\r\n\r\n        protected abstract Task invoke(Func<Task> func);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Caching/IRecordedHttpOutput.cs",
    "content": "using System.IO;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Http;\r\n\r\nnamespace FubuMVC.Core.Caching\r\n{\r\n    public interface IRecordedHttpOutput\r\n    {\r\n        Task Replay(IHttpResponse response);\r\n    }\r\n\r\n    public interface IRecordedTextOutput\r\n    {\r\n        void WriteText(StringWriter writer);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Caching/IRecordedOutput.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Headers;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Caching\r\n{\r\n    public interface IRecordedOutput : IHaveContentType\r\n    {\r\n        void Replay(IHttpResponse response);\r\n\r\n        string GetText();\r\n\r\n        IEnumerable<Header> Headers();\r\n\r\n        bool IsEmpty();\r\n\r\n        IEnumerable<IRecordedHttpOutput> Outputs { get; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Caching/RecordedOutput.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Headers;\r\nusing FubuMVC.Core.Runtime;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Core.Caching\r\n{\r\n    public class RecordedOutput : IOutputState, IRecordedOutput, IHaveContentType\r\n    {\r\n        private readonly IFileSystem _fileSystem;\r\n        private readonly IList<IRecordedHttpOutput> _outputs = new List<IRecordedHttpOutput>();\r\n\r\n        public RecordedOutput(IFileSystem fileSystem)\r\n        {\r\n            _fileSystem = fileSystem;\r\n        }\r\n\r\n        private IRecordedHttpOutput output\r\n        {\r\n            set { _outputs.Add(value); }\r\n        }\r\n\r\n        public IEnumerable<IRecordedHttpOutput> Outputs\r\n        {\r\n            get { return _outputs; }\r\n        }\r\n\r\n        public Task Write(string contentType, string renderedOutput)\r\n        {\r\n            output = new SetContentType(contentType);\r\n            output = new WriteTextOutput(renderedOutput);\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        public Task Write(string renderedOutput)\r\n        {\r\n            output = new WriteTextOutput(renderedOutput);\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        public Task Write(string contentType, Func<Stream, Task> action)\r\n        {\r\n            output = new SetContentType(contentType);\r\n\r\n            var stream = new MemoryStream();\r\n            action(stream);\r\n\r\n            output = new WriteStream(stream);\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        public void AppendHeader(string header, string value)\r\n        {\r\n            output = new Header(header, value);\r\n        }\r\n\r\n        public void WriteFile(string contentType, string localFilePath, string displayName)\r\n        {\r\n            output = WriteFileRecord.Create(_fileSystem, localFilePath, contentType, displayName);\r\n        }\r\n\r\n        public void Flush()\r\n        {\r\n            // no-op;\r\n        }\r\n\r\n\r\n\r\n        public void Replay(IHttpResponse response)\r\n        {\r\n            _outputs.Each(x => x.Replay(response));\r\n        }\r\n\r\n\r\n\r\n        public string GetText()\r\n        {\r\n            var writer = new StringWriter();\r\n            _outputs.OfType<IRecordedTextOutput>().Each(o => o.WriteText(writer));\r\n            return writer.ToString();\r\n        }\r\n\r\n        public IEnumerable<Header> Headers()\r\n        {\r\n            return _outputs.OfType<Header>();\r\n        }\r\n\r\n        public bool IsEmpty()\r\n        {\r\n            return !_outputs.Any();\r\n        }\r\n\r\n        public void AddOutput(IRecordedHttpOutput output)\r\n        {\r\n            _outputs.Add(output);\r\n        }\r\n\r\n        public string ContentType\r\n        {\r\n            get\r\n            {\r\n                var o = _outputs.OfType<IHaveContentType>().Where(x => x.ContentType.IsNotEmpty()).LastOrDefault();\r\n                return o == null ? null : o.ContentType;\r\n            \r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Caching/SetContentType.cs",
    "content": "using System;\r\nusing System.Threading.Tasks;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Http;\r\n\r\nnamespace FubuMVC.Core.Caching\r\n{\r\n    public class SetContentType : IRecordedHttpOutput, DescribesItself\r\n    {\r\n        private readonly string _contentType;\r\n\r\n        public SetContentType(string contentType)\r\n        {\r\n            _contentType = contentType;\r\n        }\r\n\r\n        public Task Replay(IHttpResponse response)\r\n        {\r\n            response.WriteContentType(_contentType);\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        public bool Equals(SetContentType other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other._contentType, _contentType);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof (SetContentType)) return false;\r\n            return Equals((SetContentType) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return (_contentType != null ? _contentType.GetHashCode() : 0);\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"ContentType is \" + _contentType;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"ContentType: {0}\", _contentType);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Caching/WriteFileRecord.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Http;\r\n\r\nnamespace FubuMVC.Core.Caching\r\n{\r\n    public class WriteFileRecord : IRecordedHttpOutput, DescribesItself\r\n    {\r\n        private IList<Action<IHttpResponse>> _writes = new List<Action<IHttpResponse>>();\r\n\r\n        private Action<IHttpResponse> write\r\n        {\r\n            set\r\n            {\r\n                _writes.Add(value);\r\n            }\r\n        }\r\n\r\n        public static WriteFileRecord Create(IFileSystem fileSystem, string file, string contentType, string displayName)\r\n        {\r\n            var record = new WriteFileRecord();\r\n            record.write = x => x.WriteContentType(contentType);\r\n            \r\n            if (displayName != null)\r\n            {\r\n                record.write = x => x.AppendHeader(HttpResponseHeaders.ContentDisposition, \"attachment; filename=\\\"\" + displayName + \"\\\"\");\r\n            }\r\n\r\n            var fileLength = fileSystem.FileSizeOf(file);\r\n            record.write = x => x.AppendHeader(HttpResponseHeaders.ContentLength, fileLength.ToString());\r\n\r\n            record.write = x => x.WriteFile(file);\r\n\r\n            return record;\r\n        }\r\n\r\n        private WriteFileRecord()\r\n        {\r\n        }\r\n\r\n        public Task Replay(IHttpResponse response)\r\n        {\r\n            _writes.Each(x => x(response));\r\n\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Write file\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Caching/WriteStream.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Http;\r\n\r\nnamespace FubuMVC.Core.Caching\r\n{\r\n    public class WriteStream : IRecordedHttpOutput, IRecordedTextOutput, DescribesItself\r\n    {\r\n        private readonly MemoryStream _stream;\r\n        private readonly object _locker = new object();\r\n\r\n        public WriteStream(MemoryStream stream)\r\n        {\r\n            _stream = stream;\r\n        }\r\n\r\n        public Task Replay(IHttpResponse response)\r\n        {\r\n            return response.Write(stream =>\r\n            {\r\n                lock (_locker)\r\n                {\r\n                    _stream.Position = 0;\r\n                    return _stream.CopyToAsync(stream);\r\n                }\r\n            });\r\n        }\r\n\r\n        public void WriteText(StringWriter writer)\r\n        {\r\n            _stream.Position = 0;\r\n            // TODO -- some day we're gonna get bitten by character encoding\r\n            writer.WriteLine(_stream.ReadAllText());\r\n        }\r\n\r\n        public string ReadAll()\r\n        {\r\n            lock (_locker)\r\n            {\r\n                _stream.Position = 0;\r\n                var reader = new StreamReader(_stream);\r\n                return reader.ReadToEnd();\r\n            }\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Write to stream\";\r\n            description.LongDescription = ReadAll();\r\n        }\r\n\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Caching/WriteTextOutput.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Threading.Tasks;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Http;\r\n\r\nnamespace FubuMVC.Core.Caching\r\n{\r\n    public class WriteTextOutput : IRecordedHttpOutput, IRecordedTextOutput, DescribesItself\r\n    {\r\n        private readonly string _text;\r\n\r\n        public WriteTextOutput(string text)\r\n        {\r\n            _text = text;\r\n        }\r\n\r\n        public Task Replay(IHttpResponse response)\r\n        {\r\n            return response.Write(_text);\r\n        }\r\n\r\n        public void WriteText(StringWriter writer)\r\n        {\r\n            writer.Write(_text);\r\n        }\r\n\r\n        public bool Equals(WriteTextOutput other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other._text, _text);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof (WriteTextOutput)) return false;\r\n            return Equals((WriteTextOutput) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return (_text != null ? _text.GetHashCode() : 0);\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Write Text\";\r\n            description.LongDescription = _text;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Text: {0}\", _text);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/ClientMessage.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Security.Authorization;\n\nnamespace FubuMVC.Core\n{\n    /// <summary>\n    /// Marks this input or resource type as a \n    /// known message type for the client to facilitate\n    /// data aggregation\n    /// </summary>\n    public abstract class ClientMessage\n    {\n        private readonly string _messageName;\n\n        protected ClientMessage()\n        {\n\n        }\n\n        protected ClientMessage(string messageName)\n        {\n            _messageName = messageName;\n        }\n\n        public string MessageName()\n        {\n            return _messageName;\n        }\n    }\n\n    [AttributeUsage(AttributeTargets.Class)]\n    public class ClientMessageAttribute : Attribute\n    {\n        private readonly string _messageName;\n\n        public ClientMessageAttribute()\n        {\n        }\n\n        public ClientMessageAttribute(string messageName)\n        {\n            _messageName = messageName;\n        }\n\n        public string MessageName\n        {\n            get { return _messageName; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Continuations/ContinuationHandler.cs",
    "content": "using System;\r\nusing System.Net;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Querying;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Urls;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Core.Continuations\r\n{\r\n    public class ContinuationHandler : IActionBehavior, IContinuationDirector\r\n    {\r\n        private readonly IPartialFactory _factory;\r\n        private readonly IChainResolver _resolver;\r\n        private readonly IUrlRegistry _registry;\r\n        private readonly IFubuRequest _request;\r\n        private readonly IOutputWriter _writer;\r\n\r\n        public ContinuationHandler(IUrlRegistry registry, IOutputWriter writer, IFubuRequest request, IPartialFactory factory, IChainResolver resolver)\r\n        {\r\n            _registry = registry;\r\n            _writer = writer;\r\n            _request = request;\r\n            _factory = factory;\r\n            _resolver = resolver;\r\n        }\r\n\r\n        public IActionBehavior InsideBehavior { get; set; }\r\n\r\n        public async Task InvokeNextBehavior()\r\n        {\r\n            if (InsideBehavior != null)\r\n            {\r\n                await InsideBehavior.Invoke().ConfigureAwait(false);\r\n            }\r\n        }\r\n\r\n        public async Task Invoke()\r\n        {\r\n            var continuation = FindContinuation();\r\n            await continuation.Process(this).ConfigureAwait(false);\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            var continuation = FindContinuation();\r\n            return continuation.Process(this);\r\n        }\r\n\r\n        public Task RedirectTo(object input, string categoryOrHttpMethod = null)\r\n        {\r\n            string url = input as string ?? _registry.UrlFor(input, categoryOrHttpMethod ?? \"GET\");\r\n            _writer.RedirectToUrl(url);\r\n\r\n            // TODO -- use an async write method on the HTTP?\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        public Task RedirectToCall(ActionCall call, string categoryOrHttpMethod = null)\r\n        {\r\n            string url = _registry.UrlFor(call.HandlerType, call.Method, categoryOrHttpMethod ?? \"GET\");\r\n            _writer.RedirectToUrl(url);\r\n\r\n            // TODO -- use an async write method on the HTTP?\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        public Task TransferTo(object input, string categoryOrHttpMethod = null)\r\n        {\r\n            if (input == null)\r\n            {\r\n                throw new ArgumentNullException(nameof(input));\r\n            }\r\n\r\n            _request.SetObject(input);\r\n\r\n            var chain = _resolver.FindUnique(input, categoryOrHttpMethod);\r\n\r\n            var partial = _factory.BuildBehavior(chain);\r\n            return partial.InvokePartial();\r\n        }\r\n\r\n        public Task TransferToCall(ActionCall call, string categoryOrHttpMethod = null)\r\n        {\r\n            var chain = _resolver.Find(call.HandlerType, call.Method, categoryOrHttpMethod);\r\n\r\n            var partial = _factory.BuildBehavior(chain);\r\n            return partial.InvokePartial();\r\n        }\r\n\r\n        public Task EndWithStatusCode(HttpStatusCode code)\r\n        {\r\n            _writer.WriteResponseCode(code);\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n\r\n\r\n        public FubuContinuation FindContinuation()\r\n        {\r\n            var redirectable = _request.Find<IRedirectable>().FirstOrDefault();\r\n            if (redirectable != null)\r\n            {\r\n                return redirectable.RedirectTo ?? FubuContinuation.NextBehavior();\r\n            }\r\n\r\n            return _request.Get<FubuContinuation>();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Continuations/ContinuationProcessor.cs",
    "content": "using FubuMVC.Core.Behaviors;\r\n\r\nnamespace FubuMVC.Core.Continuations\r\n{\r\n    public class ContinuationProcessor : IContinuationProcessor\r\n    {\r\n        private readonly ContinuationHandler _handler;\r\n\r\n        public ContinuationProcessor(ContinuationHandler handler)\r\n        {\r\n            _handler = handler;\r\n        }\r\n\r\n        public void Continue(FubuContinuation continuation, IActionBehavior nextBehavior)\r\n        {\r\n            _handler.InsideBehavior = nextBehavior;\r\n            continuation.Process(_handler);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Continuations/ContinuationType.cs",
    "content": "namespace FubuMVC.Core.Continuations\r\n{\r\n    public enum ContinuationType\r\n    {\r\n        NextBehavior,\r\n        Redirect,\r\n        Transfer,\r\n        Stop\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Continuations/FubuContinuation.cs",
    "content": "using System;\r\nusing System.Linq.Expressions;\r\nusing System.Net;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Core.Continuations\r\n{\r\n    /// <summary>\r\n    /// Return an instance of this class whenever you might need to change how a request is handled\r\n    /// by runtime conditions.  FubuContinuation provides a set of instructions on what to do next\r\n    /// after the action that returned the FubuContinuation\r\n    /// </summary>\r\n    public class FubuContinuation\r\n    {\r\n        private readonly Func<IContinuationDirector, Task> _configure;\r\n        private ActionCall _call;\r\n        private object _destination;\r\n        public HttpStatusCode? _statusCode;\r\n        public string _categoryOrHttpMethod;\r\n\r\n        private FubuContinuation(ContinuationType type, Func<IContinuationDirector, Task> configure)\r\n        {\r\n            Type = type;\r\n            _configure = configure;\r\n        }\r\n\r\n        public ContinuationType Type { get; }\r\n\r\n        /// <summary>\r\n        /// Only for testing\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <returns></returns>\r\n        public T Destination<T>() where T : class\r\n        {\r\n            return _destination as T;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Issues an Http 302 redirect to the endpoint with the designated action and otherwise stops the currently\r\n        /// executing behavior chain\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"expression\"></param>\r\n        /// <param name=\"categoryOrHttpMethod\">Defaults to GET</param>\r\n        /// <returns></returns>\r\n        public static FubuContinuation RedirectTo<T>(Expression<Action<T>> expression, string categoryOrHttpMethod = null)\r\n        {\r\n            ActionCall call = ActionCall.For(expression);\r\n            return new FubuContinuation(ContinuationType.Redirect, d => d.RedirectToCall(call, categoryOrHttpMethod))\r\n            {\r\n                _call = call,\r\n                _categoryOrHttpMethod = categoryOrHttpMethod\r\n            };\r\n        }\r\n\r\n        /// <summary>\r\n        /// Issues an Http 302 redirect to the endpoint that accepts the designated input model and otherwise stops the currently\r\n        /// executing behavior chain\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"categoryOrHttpMethod\"></param>\r\n        /// <returns></returns>\r\n        public static FubuContinuation RedirectTo<T>(string categoryOrHttpMethod = null)\r\n            where T : new()\r\n        {\r\n            return RedirectTo(new T(), categoryOrHttpMethod);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Executes the behavior chain that accepts type T as an input model instead of the rest of the current chain\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"categoryOrHttpMethod\"></param>\r\n        /// <returns></returns>\r\n        public static FubuContinuation TransferTo<T>(string categoryOrHttpMethod = null)\r\n            where T : new()\r\n        {\r\n            return TransferTo(new T(), categoryOrHttpMethod);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Issues an Http 302 redirect to the endpoint that accepts the model and otherwise stops the currently\r\n        /// executing behavior chain\r\n        /// </summary>\r\n        /// <param name=\"destination\"></param>\r\n        /// <param name=\"categoryOrHttpMethod\"></param>\r\n        /// <returns></returns>\r\n        public static FubuContinuation RedirectTo(object destination, string categoryOrHttpMethod = null)\r\n        {\r\n            if (destination == null) throw new ArgumentNullException(\"destination\");\r\n            return new FubuContinuation(ContinuationType.Redirect, d => d.RedirectTo(destination, categoryOrHttpMethod))\r\n            {\r\n                _destination = destination,\r\n                _categoryOrHttpMethod = categoryOrHttpMethod\r\n            };\r\n        }\r\n\r\n        /// <summary>\r\n        /// Executes the behavior chain that accepts the destination object instead of the rest of the current chain\r\n        /// </summary>\r\n        /// <param name=\"destination\"></param>\r\n        /// <param name=\"categoryOrHttpMethod\"></param>\r\n        /// <returns></returns>\r\n        public static FubuContinuation TransferTo(object destination, string categoryOrHttpMethod = null)\r\n        {\r\n            if (destination == null) throw new ArgumentNullException(\"destination\");\r\n            return new FubuContinuation(ContinuationType.Transfer, d => d.TransferTo(destination, categoryOrHttpMethod))\r\n            {\r\n                _destination = destination,\r\n                _categoryOrHttpMethod = categoryOrHttpMethod\r\n            };\r\n        }\r\n\r\n        /// <summary>\r\n        /// Executes the behavior chain that includes the designated action instead of the rest of the current chain\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"expression\"></param>\r\n        /// <param name=\"categoryOrHttpMethod\"></param>\r\n        /// <returns></returns>\r\n        public static FubuContinuation TransferTo<T>(Expression<Action<T>> expression, string categoryOrHttpMethod = null)\r\n        {\r\n            ActionCall call = ActionCall.For(expression);\r\n            return new FubuContinuation(ContinuationType.Transfer, d => d.TransferToCall(call, categoryOrHttpMethod))\r\n            {\r\n                _call = call,\r\n                _categoryOrHttpMethod = categoryOrHttpMethod\r\n            };\r\n        }\r\n\r\n        /// <summary>\r\n        /// Write out the designated status code and stop the behavior chain from proceeding\r\n        /// </summary>\r\n        /// <param name=\"code\"></param>\r\n        /// <returns></returns>\r\n        public static FubuContinuation EndWithStatusCode(HttpStatusCode code)\r\n        {\r\n            return new FubuContinuation(ContinuationType.Stop, d => d.EndWithStatusCode(code)){\r\n                _statusCode = code\r\n            };\r\n\r\n        }\r\n\r\n        /// <summary>\r\n        /// Allow the behavior chain to continue executing\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public static FubuContinuation NextBehavior()\r\n        {\r\n            return new FubuContinuation(ContinuationType.NextBehavior, d => d.InvokeNextBehavior());\r\n        }\r\n\r\n        /// <summary>\r\n        /// Unit testing assertion against a FubuContinuation object\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"expression\"></param>\r\n        /// <param name=\"categoryOrHttpMethod\"></param>\r\n        public void AssertWasTransferedTo<T>(Expression<Action<T>> expression, string categoryOrHttpMethod = null)\r\n        {\r\n            ActionCall call = ActionCall.For(expression);\r\n            assertMatches(Type == ContinuationType.Transfer && callMatches(call) && _categoryOrHttpMethod == categoryOrHttpMethod);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Unit testing assertion against a FubuContinuation object\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"destination\"></param>\r\n        /// <param name=\"categoryOrHttpMethod\"></param>\r\n        public void AssertWasTransferedTo<T>(T destination, string categoryOrHttpMethod = null)\r\n        {\r\n            Func<T, bool> predicate = x => x.Equals(destination);\r\n            AssertWasTransferedTo(predicate, categoryOrHttpMethod);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Unit testing assertion against a FubuContinuation object\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"predicate\"></param>\r\n        /// <param name=\"categoryOrHttpMethod\"></param>\r\n        public void AssertWasTransferedTo<T>(Func<T, bool> predicate, string categoryOrHttpMethod = null)\r\n        {\r\n            assertMatches(_categoryOrHttpMethod == categoryOrHttpMethod);\r\n            assertMatches(_destination != null && typeof (T) == _destination.GetType());\r\n            assertMatches(Type == ContinuationType.Transfer && predicate((T) _destination));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Unit testing assertion against a FubuContinuation object\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"destination\"></param>\r\n        /// <param name=\"categoryOrHttpMethod\"></param>\r\n        public void AssertWasRedirectedTo<T>(T destination, string categoryOrHttpMethod = null)\r\n        {\r\n            Func<T, bool> predicate = x => x.Equals(destination);\r\n            AssertWasRedirectedTo(predicate, categoryOrHttpMethod);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Unit testing assertion against a FubuContinuation object\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"predicate\"></param>\r\n        /// <param name=\"categoryOrHttpMethod\"></param>\r\n        public void AssertWasRedirectedTo<T>(Func<T, bool> predicate, string categoryOrHttpMethod = null)\r\n        {\r\n            assertMatches(_categoryOrHttpMethod == categoryOrHttpMethod);\r\n            assertMatches(_destination != null && typeof(T) == _destination.GetType());\r\n            assertMatches(Type == ContinuationType.Redirect && predicate((T)_destination));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Unit testing assertion against a FubuContinuation object\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"expression\"></param>\r\n        /// <param name=\"categoryOrHttpMethod\"></param>\r\n        public void AssertWasRedirectedTo<T>(Expression<Action<T>> expression, string categoryOrHttpMethod = null)\r\n        {\r\n            assertMatches(_categoryOrHttpMethod == categoryOrHttpMethod);\r\n            ActionCall call = ActionCall.For(expression);\r\n            assertMatches(Type == ContinuationType.Redirect && callMatches(call));\r\n        }\r\n\r\n        private bool callMatches(ActionCall call)\r\n        {\r\n            return _call != null && call.HandlerType == _call.HandlerType && call.Method == _call.Method;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Unit testing assertion against a FubuContinuation object\r\n        /// </summary>\r\n        public void AssertWasContinuedToNextBehavior()\r\n        {\r\n            assertMatches(Type == ContinuationType.NextBehavior);\r\n        }\r\n\r\n        private void assertMatches(bool matches)\r\n        {\r\n            if (matches) return;\r\n\r\n            string message = \"Assertion Failed!\\nContinuation Type:  \" + Type;\r\n            if (_destination != null)\r\n            {\r\n                message += \"\\n  destination model: \" + _destination;\r\n            }\r\n\r\n            if (_call != null)\r\n            {\r\n                message += \"\\n destination call: \" + _call.Description;\r\n            }\r\n\r\n            if (_statusCode.HasValue )\r\n            {\r\n                message += \"\\n status code:  \" + _statusCode.Value.ToString();\r\n            }\r\n\r\n            if (_categoryOrHttpMethod.IsNotEmpty())\r\n            {\r\n                message += \"\\n categoryOrHttpMethod:  \" + _categoryOrHttpMethod;\r\n            }\r\n\r\n            throw new FubuAssertionException(message);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called internally by FubuMVC to process this FubuContinuation\r\n        /// </summary>\r\n        /// <param name=\"director\"></param>\r\n        public Task Process(IContinuationDirector director)\r\n        {\r\n            return _configure(director);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Unit testing assertion against a FubuContinuation object\r\n        /// </summary>\r\n        /// <param name=\"httpStatusCode\"></param>\r\n        public void AssertWasEndedWithStatusCode(HttpStatusCode httpStatusCode)\r\n        {\r\n            assertMatches(Type == ContinuationType.Stop && _statusCode.HasValue && _statusCode.Value == httpStatusCode);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Continuations/IContinuationDirector.cs",
    "content": "using System.Net;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Core.Continuations\r\n{\r\n    public interface IContinuationDirector\r\n    {\r\n        Task InvokeNextBehavior();\r\n        Task RedirectTo(object input, string categoryOrHttpMethod = null);\r\n        Task RedirectToCall(ActionCall call, string categoryOrHttpMethod = null);\r\n        Task TransferTo(object input, string categoryOrHttpMethod = null);\r\n        Task TransferToCall(ActionCall call, string categoryOrHttpMethod = null);\r\n        Task EndWithStatusCode(HttpStatusCode code);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Continuations/IContinuationProcessor.cs",
    "content": "using FubuMVC.Core.Behaviors;\r\n\r\nnamespace FubuMVC.Core.Continuations\r\n{\r\n    /// <summary>\r\n    /// Use to process an adhoc FubuContinuation in a service or\r\n    /// custom behavior\r\n    /// </summary>\r\n    public interface IContinuationProcessor\r\n    {\r\n        void Continue(FubuContinuation continuation, IActionBehavior nextBehavior);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Continuations/IRedirectable.cs",
    "content": "using System;\r\nusing System.Linq.Expressions;\r\nusing System.Net;\r\n\r\nnamespace FubuMVC.Core.Continuations\r\n{\r\n    /// <summary>\r\n    /// Marker interface that can be used to redirect or\r\n    /// transfer requests after an action by checking the \r\n    /// RedirectTo property\r\n    /// </summary>\r\n    public interface IRedirectable\r\n    {\r\n        FubuContinuation RedirectTo { get; set;}\r\n    }\r\n\r\n    /// <summary>\r\n    /// Use to return an IRedirectable that stops the current\r\n    /// request with an Http status code\r\n    /// </summary>\r\n    /// <typeparam name=\"TModel\"></typeparam>\r\n    public static class Stop<TModel> where TModel : IRedirectable, new()\r\n    {\r\n        public static TModel With(HttpStatusCode code)\r\n        {\r\n            return new TModel{\r\n                RedirectTo = FubuContinuation.EndWithStatusCode(code)\r\n            };\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Return an IRedirectable that issues a redirect to the \r\n    /// </summary>\r\n    /// <typeparam name=\"TModel\"></typeparam>\r\n    public static class Redirect<TModel> where TModel : IRedirectable, new()\r\n    {\r\n        /// <summary>\r\n        /// Redirects the request to url from IUrlRegistry.UrlFor(destination)\r\n        /// </summary>\r\n        /// <param name=\"destination\"></param>\r\n        /// <returns></returns>\r\n        public static TModel To(object destination)\r\n        {\r\n            return new TModel(){\r\n                RedirectTo = FubuContinuation.RedirectTo(destination)\r\n            };\r\n        }\r\n\r\n        /// <summary>\r\n        /// Redirects the request to the url from IUrlRegistry.UrlFor<TActionHandler>(method)\r\n        /// </summary>\r\n        /// <typeparam name=\"TActionHandler\"></typeparam>\r\n        /// <param name=\"method\"></param>\r\n        /// <returns></returns>\r\n        public static TModel To<TActionHandler>(Expression<Action<TActionHandler>> method)\r\n        {\r\n            return new TModel(){\r\n                RedirectTo = FubuContinuation.RedirectTo(method)\r\n            };\r\n        }\r\n    }\r\n\r\n    /// <summary>\r\n    /// Returns an IRedirectable that transfers to another chain\r\n    /// </summary>\r\n    /// <typeparam name=\"TModel\"></typeparam>\r\n    public static class Transfer<TModel> where TModel : IRedirectable, new()\r\n    {\r\n        /// <summary>\r\n        /// Transfers the request to url from IUrlRegistry.UrlFor(destination)\r\n        /// </summary>\r\n        /// <param name=\"destination\"></param>\r\n        /// <returns></returns>\r\n        public static TModel To(object destination)\r\n        {\r\n            return new TModel()\r\n            {\r\n                RedirectTo = FubuContinuation.TransferTo(destination)\r\n            };\r\n        }\r\n\r\n        /// <summary>\r\n        /// Transfers the request to the url from IUrlRegistry.UrlFor<TActionHandler>(method)\r\n        /// </summary>\r\n        /// <typeparam name=\"TActionHandler\"></typeparam>\r\n        /// <param name=\"method\"></param>\r\n        /// <returns></returns>\r\n        public static TModel To<TActionHandler>(Expression<Action<TActionHandler>> method)\r\n        {\r\n            return new TModel()\r\n            {\r\n                RedirectTo = FubuContinuation.TransferTo(method)\r\n            };\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/DeactivatorExecuted.cs",
    "content": "using FubuCore.Descriptions;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Core\n{\n    public class DeactivatorExecuted : LogRecord, DescribesItself\n    {\n        public string Deactivator { get; set; }\n        public IActivationLog Log { get; set; }\n\n        public void Describe(Description description)\n        {\n            description.Title = \"Deactivator: \" + Deactivator;\n            description.LongDescription = Log.FullTraceText();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/AboutFubuDiagnostics.cs",
    "content": "using FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.Diagnostics\n{\n    public class AboutFubuDiagnostics\n    {\n        private readonly AppReloaded _reloaded;\n        private readonly BehaviorGraph _graph;\n        private readonly FubuRuntime _runtime;\n\n        public AboutFubuDiagnostics(AppReloaded reloaded, BehaviorGraph graph, FubuRuntime runtime)\n        {\n            _reloaded = reloaded;\n            _graph = graph;\n            _runtime = runtime;\n        }\n\n        public string get_about()\n        {\n            return FubuApplicationDescriber.WriteDescription(_runtime.ActivationDiagnostics, _runtime);\n        }\n\n        public string get_loaded()\n        {\n            return _reloaded.Timestamp.ToString();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/AppDomainFubuDiagnostics.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Runtime.Files;\nusing FubuMVC.Core.Services;\n\nnamespace FubuMVC.Core.Diagnostics\n{\n    public class AppDomainFubuDiagnostics\n    {\n        private readonly AppReloaded _reloaded;\n        private readonly IFubuApplicationFiles _files;\n\n        public AppDomainFubuDiagnostics(AppReloaded reloaded, IFubuApplicationFiles files)\n        {\n            _reloaded = reloaded;\n            _files = files;\n        }\n\n        public Dictionary<string, object> get_appdomain()\n        {\n            var dict = new Dictionary<string, object>\n            {\n                {\"reloaded\", _reloaded.Timestamp.ToLocalTime().ToString()},\n                {\"fubuPath\", _files.RootPath},\n                {\"baseDirectory\", AppDomain.CurrentDomain.BaseDirectory},\n                {\"binPath\", AssemblyFinder.FindBinPath()},\n                {\"config\", AppDomain.CurrentDomain.SetupInformation.ConfigurationFile}\n            };\n\n            var assemblyLocations = \n                AppDomain.CurrentDomain.GetAssemblies()\n                    .Select(x => new AssemblyLocation(x))\n                    .OrderBy(x => x.name)\n                    .ToArray();\n\n            dict.Add(\"assemblies\", assemblyLocations);\n\n            return dict;\n        } \n    }\n\n    public class AssemblyLocation\n    {\n        public AssemblyLocation()\n        {\n        }\n\n        public AssemblyLocation(Assembly assembly)\n        {\n            name = assembly.GetName().Name;\n            version = assembly.GetName().Version.ToString();\n            location = findCodebase(assembly);\n        }\n\n        public string name;\n        public string location;\n        public string version;\n\n        private static string findCodebase(Assembly assem)\n        {\n            if (assem.IsDynamic) return \"(dynamic)\";\n\n            try\n            {\n                var file = assem.CodeBase;\n                return file ?? \"None\";\n            }\n            catch (Exception)\n            {\n                return \"None\";\n            }\n        }\n    }\n\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/AppReloaded.cs",
    "content": "using System;\r\n\r\nnamespace FubuMVC.Core.Diagnostics\r\n{\r\n    public class AppReloaded\r\n    {\r\n        public DateTime Timestamp = DateTime.UtcNow;\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/AssetFubuDiagnostics.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Assets;\n\nnamespace FubuMVC.Core.Diagnostics\n{\n    public class AssetFubuDiagnostics\n    {\n        private readonly IAssetFinder _assets;\n\n        public AssetFubuDiagnostics(IAssetFinder assets)\n        {\n            _assets = assets;\n        }\n\n        public AssetToken get_assets_find_Name(AssetSearch search)\n        {\n            var asset = _assets.FindAsset(search.Name);\n            return asset == null ? new AssetToken {url = search.Name, file = \"NOT FOUND\"} : new AssetToken(asset);\n        }\n\n        public Dictionary<string, object> get_assets()\n        {\n            return new Dictionary<string, object>\n            {\n                {\"assets\", _assets.FindAll().Assets.Select(x => new AssetToken(x)).ToArray()}\n            };\n        }\n    }\n\n    public class AssetSearch\n    {\n        public string Name { get; set; }\n    }\n\n    public class AssetToken\n    {\n        public string url;\n        public string mimetype;\n        public string file;\n        public string cdn;\n\n        public AssetToken()\n        {\n        }\n\n        public AssetToken(Asset asset)\n        {\n            url = asset.Url;\n            mimetype = asset.MimeType.Value;\n            file = asset.Filename;\n            cdn = asset.CdnUrl;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Assets/DiagnosticAssetsCache.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Mime;\nusing System.Reflection;\nusing System.Security.Permissions;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Diagnostics.Assets\n{\n    public interface IDiagnosticAssets\n    {\n        EmbeddedFile For(string name);\n        void AddAssembly(Assembly assembly);\n        IEnumerable<EmbeddedFile> JavascriptFiles();\n    }\n\n    [ReflectionPermission(SecurityAction.Assert)]\n    public class DiagnosticAssetsCache : IDiagnosticAssets\n    {\n        private readonly IList<EmbeddedFile> _files = new List<EmbeddedFile>();\n        private readonly Cache<string, EmbeddedFile> _searches;\n\n        public DiagnosticAssetsCache(BehaviorGraph graph)\n        {\n            AddAssembly(Assembly.GetExecutingAssembly());\n            graph.PackageAssemblies.Each(AddAssembly);\n\n            _searches = new Cache<string, EmbeddedFile>(name =>\n            {\n                return _files.FirstOrDefault(x => x.Matches(name));\n            });\n        }\n\n        public IEnumerable<EmbeddedFile> JavascriptFiles()\n        {\n            return _files.Where(x => x.ContentType == MimeType.Javascript);\n        } \n\n        public EmbeddedFile For(string name)\n        {\n            return _searches[name];\n        }\n\n        public void AddAssembly(Assembly assembly)\n        {\n            var resources =\n                assembly.GetManifestResourceNames()\n                .Where(IsDiagnosticAsset)\n                .Select(x => new EmbeddedFile(assembly, x));\n\n            _files.AddRange(resources);\n        }\n\n        public static bool IsDiagnosticAsset(string path)\n        {\n            var parts = path.Split('.');\n            return parts.Any(x => x.EqualsIgnoreCase(\"fubu_diagnostics\"));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Assets/EmbeddedFile.cs",
    "content": "﻿using System;\nusing System.Net;\nusing System.Reflection;\nusing FubuCore;\nusing FubuMVC.Core.Assets;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Runtime;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.Diagnostics.Assets\n{\n    public class EmbeddedFile\n    {\n        private readonly Lazy<byte[]> _contents;\n        private readonly string _cacheHeader = \"private, max-age={0}\".ToFormat(AssetSettings.MaxAgeInSeconds);\n        private Lazy<string> _text;\n\n\n        public EmbeddedFile(Assembly assembly, string resource)\n        {\n            Name = resource;\n            ContentType = MimeType.MimeTypeByFileName(Name);\n\n            AssemblyName = assembly.GetName().Name;\n\n            _contents = new Lazy<byte[]>(() =>\n            {\n                var stream = assembly.GetManifestResourceStream(resource);\n                return stream.ReadAllBytes();\n            });\n\n            _text = new Lazy<string>(() =>\n            {\n                var stream = assembly.GetManifestResourceStream(resource);\n                return stream.ReadAllText();\n            });\n\n            Version = assembly.GetName().Version.ToString();\n        }\n\n        public string AssemblyName { get; private set; }\n\n        public bool Matches(string file)\n        {\n            return Name.EndsWith(file, StringComparison.OrdinalIgnoreCase);\n        }\n\n        // Only hitting this with integration tests\n        public void Write(IHttpResponse response)\n        {\n            response.WriteContentType(ContentType.Value);\n            response.WriteResponseCode(HttpStatusCode.OK);\n            /* TODO -- add later, but not NOW\n            response.AppendHeader(HttpResponseHeaders.CacheControl, _cacheHeader);\n            var expiresKey = DateTime.UtcNow.AddSeconds(AssetSettings.MaxAgeInSeconds).ToString(\"R\");\n            response.AppendHeader(HttpResponseHeaders.Expires, expiresKey);\n             */\n\n            response.Write(stream => stream.WriteAsync(Contents(), 0, Contents().Length));\n        }\n\n\n        public MimeType ContentType { get; private set; }\n\n        public string Name { get; private set; }\n        public string Version { get; private set; }\n\n        public byte[] Contents()\n        {\n            return _contents.Value;\n        }\n\n        public string Url\n        {\n            get { return \"_fubu/asset/{0}/{1}\".ToFormat(Version, Name); }\n        }\n\n        public HtmlTag ToStyleTag(IHttpRequest request)\n        {\n            return new StylesheetLinkTag(request.ToFullUrl(Url));\n        }\n\n        public HtmlTag ToEmbeddedStyleTag()\n        {\n            // <style media=\"screen\" type=\"text/css\">\n            return new HtmlTag(\"style\").Attr(\"media\", \"screen\").Attr(\"type\", \"text/css\").Text(FullText()).Encoded(false);\n        }\n\n        public HtmlTag ToScriptTag(IHttpRequest request)\n        {\n            return new HtmlTag(\"script\").Attr(\"language\", \"javascript\").Attr(\"src\", request.ToFullUrl(Url));\n        }\n\n        public HtmlTag ToEmbeddedScriptTag()\n        {\n            return new HtmlTag(\"script\").Attr(\"language\", \"javascript\").Text(FullText()).Encoded(false);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"EmbeddedFile: {0}\", Url);\n        }\n\n        public string FullText()\n        {\n            return _text.Value;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/AutoReloadingTag.cs",
    "content": "using HtmlTags;\r\n\r\nnamespace FubuMVC.Core.Diagnostics\r\n{\r\n    public class AutoReloadingTag : HtmlTag\r\n    {\r\n        public AutoReloadingTag(string mode) : this(mode, \"/_loaded\", 1000)\r\n        {\r\n        }\r\n\r\n        public AutoReloadingTag(string mode, string url, int interval)\r\n            : base(\"script\")\r\n        {\r\n            if (!mode.InDevelopment())\r\n            {\r\n                Render(false);\r\n            }\r\n\r\n            Attr(\"language\", \"javascript\");\r\n\r\n            Encoded(false);\r\n\r\n            var js = @\"\n      function FubuAppWatcher(url, interval){\n        var self = this;\n\n        self.lastValue = null;\n        \n        self.check = function(){\n          xhr.open('GET', url, true);\n          xhr.send();\n        };\n        \n        var xhr = new XMLHttpRequest();\n        xhr.onreadystatechange = function(){\n          if (xhr.readyState==4 && xhr.status==200){\n            if (self.lastValue == null){\n              self.lastValue = xhr.responseText;\n            }\n            else if (self.lastValue != xhr.responseText){\n              location.reload(true);\n              return;\n            }\n            \n            window.setTimeout(self.check, interval);\n          }\n        };\n        \n        \n        window.setTimeout(self.check, interval);\n        return self;\n      }\n\n      var watcher = new FubuAppWatcher('{URL}', {INTERVAL});\n      watcher.start();\r\n\";\r\n\r\n            js = js.Replace(\"{URL}\", url).Replace(\"{INTERVAL}\", interval.ToString());\r\n\r\n\r\n            Text(js);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/BehaviorChainExtensions.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Diagnostics\n{\n    public static class BehaviorChainExtensions\n    {\n        public static IEnumerable<BehaviorNode> NonDiagnosticNodes(this BehaviorChain chain)\n        {\n            return chain.Where(NonDiagnosticNodes);\n        }\n\n        public static bool NonDiagnosticNodes(BehaviorNode node)\n        {\n            if (node is BehaviorTracerNode) return false;\n\n            return true;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/ChainFubuDiagnostics.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.Diagnostics.Endpoints;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Diagnostics\n{\n    public class ChainFubuDiagnostics\n    {\n        private readonly BehaviorGraph _graph;\n        private readonly IChainExecutionHistory _history;\n\n        public ChainFubuDiagnostics(BehaviorGraph graph, IChainExecutionHistory history)\n        {\n            _graph = graph;\n            _history = history;\n        }\n\n        public Dictionary<string, object> get_chain_details_Hash(ChainDetailsRequest request)\n        {\n            var dict = new Dictionary<string, object>();\n\n            var chain = _graph.FindChain(request.Hash);\n            if (chain == null)\n            {\n                dict.Add(\"not-found\", true);\n                return dict;\n            }\n\n            dict.Add(\"details\", EndpointReport.ForChain(chain).ToDictionary());\n\n            if (chain is RoutedChain)\n            {\n                var routed = chain.As<RoutedChain>();\n                var description = Description.For(routed.Route);\n\n\n                dict.Add(\"route\", description.ToDictionary());\n            }\n\n            var nodes = chain.NonDiagnosticNodes().Select(x =>\n            {\n                var details = x.ToDescriptiveDictionary();\n                details.Add(\"category\", x.Category.ToString());\n\n\n                return details;\n            });\n\n            addPerformanceData(dict, chain);\n\n            dict.Add(\"nodes\", nodes);\n\n\n            return dict;\n        }\n\n        private void addPerformanceData(Dictionary<string, object> dict, BehaviorChain chain)\n        {\n            dict.Add(\"performance\", chain.Performance.ToDictionary());\n\n            var recent = _history.GetRecentRequests(chain).OrderByDescending(x => x.Time);\n            var executions = recent.Select(log =>\n            {\n                var logDict = log.ToHeaderDictionary();\n                logDict.Add(\"warn\", chain.Performance.IsWarning(log));\n\n                return logDict;\n            }).ToArray();\n\n            dict.Add(\"executions\", executions);\n        }\n    }\n\n    public class ChainDetailsRequest\n    {\n        public int Hash { get; set; }\n\n        public bool Equals(ChainDetailsRequest other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return other.Hash.Equals(Hash);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof(ChainDetailsRequest)) return false;\n            return Equals((ChainDetailsRequest)obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return Hash.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Hash: {0}\", Hash);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/ChildDescriptionTag.cs",
    "content": "﻿using FubuCore.Descriptions;\r\nusing HtmlTags;\r\n\r\nnamespace FubuMVC.Core.Diagnostics\r\n{\r\n    public class ChildDescriptionTag : HtmlTag\r\n    {\r\n        public ChildDescriptionTag(string name, Description child)\r\n            : base(\"div\")\r\n        {\r\n            AddClass(\"desc-child\");\r\n\r\n            Add(\"div\", title =>\r\n            {\r\n                title.AddClass(\"desc-child-title\");\r\n                title.Add(\"b\").Text(name);\r\n                title.Add(\"i\").Text(child.Title);\r\n            });\r\n\r\n            Add(\"div\").AddClass(\"desc-child-body\").Append(new DescriptionBodyTag(child));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/ClientMessagesFubuDiagnostics.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Runtime.Aggregation;\n\nnamespace FubuMVC.Core.Diagnostics\n{\n    public class ClientMessagesFubuDiagnostics\n    {\n        private readonly IClientMessageCache _messages;\n\n        public ClientMessagesFubuDiagnostics(IClientMessageCache messages)\n        {\n            _messages = messages;\n        }\n\n        public ClientMessageReport get_clientmessages()\n        {\n            return new ClientMessageReport\n            {\n                messages = _messages.AllClientMessages().OrderBy(x => x.Message).Select(x =>\n                {\n                    var description1 = new ClientMessageDescription(x);\n\n\n                    return description1;\n                }).ToArray()\n            };\n        }\n    }\n\n    public class ClientMessageReport\n    {\n        public ClientMessageDescription[] messages;\n    }\n\n    public class ClientMessageDescription\n    {\n        public ClientMessageDescription()\n        {\n        }\n\n        public ClientMessageDescription(ClientMessagePath path)\n        {\n            type = path.Message;\n            query = path.InputType == null ? \"N/A\" : path.InputType.FullName;\n            resource = path.ResourceType.FullName;\n            chain = path.Chain.GetHashCode();\n        }\n\n        public int chain { get; set; }\n\n        public string resource { get; set; }\n\n        public string query { get; set; }\n\n        public string type { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/ClientSideViewWriter.cs",
    "content": "﻿using System;\nusing FubuCore.Descriptions;\nusing StructureMap;\n\nnamespace FubuMVC.Core.Diagnostics\n{\n\n    public interface IClientSideView\n    {\n        object Convert(object target);\n    }\n\n    public interface IClientSideView<T> : IClientSideView\n    {\n        \n    }\n\n    public class DescriptionClientSideView<T> : IClientSideView<T>\n    {\n        public object Convert(object target)\n        {\n            return Description.For(target).ToDictionary();\n        }\n    }\n\n    public class PassthroughClientSideView<T> : IClientSideView<T>\n    {\n        public object Convert(object target)\n        {\n            return target;\n        }\n    }\n\n    public class ClientSideViewWriter\n    {\n        private readonly IContainer _container;\n\n        public ClientSideViewWriter(IContainer container)\n        {\n            _container = container;\n        }\n\n        public object Convert(object target)\n        {\n            if (target == null) throw new ArgumentNullException(\"target\");\n\n            var converter = _container\n                .ForGenericType(typeof (IClientSideView<>))\n                .WithParameters(target.GetType())\n                .GetInstanceAs<IClientSideView>();\n\n            return converter.Convert(target);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/DescriptionBodyTag.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing HtmlTags;\r\n\r\nnamespace FubuMVC.Core.Diagnostics\r\n{\r\n    public class DescriptionBodyTag : HtmlTag\r\n    {\r\n        public DescriptionBodyTag(Description description)\r\n            : base(\"div\")\r\n        {\r\n            AddClass(\"description-body\");\r\n\r\n            addDescriptionText(description);\r\n\r\n            writeProperties(description);\r\n\r\n            writeChildren(description);\r\n\r\n            description.BulletLists.Each(writeBulletList);\r\n        }\r\n\r\n        private void writeBulletList(BulletList list)\r\n        {\r\n            Add(\"div\").AddClass(\"desc-list-name\").Text(list.Label ?? list.Name);\r\n            list.Children.Each(writeBulletItem);\r\n        }\r\n\r\n        private void writeBulletItem(Description bullet)\r\n        {\r\n            Add(\"div\").AddClass(\"desc-bullet-item-title\").Text(bullet.Title);\r\n            Add(\"div\").AddClass(\"desc-bullet-item-body\").Append(new DescriptionBodyTag(bullet));\r\n        }\r\n\r\n        private void writeChildren(Description description)\r\n        {\r\n            description.Children.Each((name, child) => Append(new ChildDescriptionTag(name, child)));\r\n        }\r\n\r\n        private void writeProperties(Description description)\r\n        {\r\n            if (description.Properties.Any())\r\n            {\r\n                var table = new TableTag();\r\n                table.AddClass(\"desc-properties\");\r\n\r\n                description.Properties.Each((key, value) =>\r\n                {\r\n                    table.AddBodyRow(row =>\r\n                    {\r\n                        row.Header(key);\r\n                        row.Cell(value);\r\n                    });\r\n                });\r\n\r\n                Append(table);\r\n            }\r\n\r\n\r\n        }\r\n\r\n        private void addDescriptionText(Description description)\r\n        {\r\n            if (description.HasExplicitShortDescription())\r\n            {\r\n                Add(\"p\").AddClass(\"short-desc\").Text(description.ShortDescription);\r\n            }\r\n\r\n            if (description.LongDescription.IsNotEmpty())\r\n            {\r\n                Add(\"p\").AddClass(\"long-desc\").Text(description.LongDescription);\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/DescriptionExtensions.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Security.Cryptography;\nusing FubuCore.Descriptions;\n\nnamespace FubuMVC.Core.Diagnostics\n{\n    public static class DescriptionExtensions\n    {\n        public static IDictionary<string, object> ToDescriptiveDictionary(this object target)\n        {\n            return Description.For(target).ToDictionary();\n        } \n\n        public static Dictionary<string, object> ToDictionary(this Description description)\n        {\n            var dictionary = new Dictionary<string, object>\n            {\n                {\"type\", \"description\"},\n                {\"title\", description.Title},\n                {\"targetType\", description.TargetType.FullName}\n            };\n\n            if (description.HasExplicitShortDescription()) dictionary.Add(\"description\", description.ShortDescription);\n\n            if (description.Properties.Count > 0)\n            {\n                dictionary.Add(\"properties\", description.Properties.ToDictionary());\n            }\n\n            if (description.Children.Count > 0)\n            {\n                var children = new Dictionary<string, object>();\n                dictionary.Add(\"children\", children);\n\n                description.Children.Each((key, desc) => children.Add(key, desc.ToDictionary()));\n            }\n\n            if (description.BulletLists.Count > 0)\n            {\n                var lists = new Dictionary<string, object>();\n                dictionary.Add(\"lists\", lists);\n\n                description.BulletLists.Each(list =>\n                {\n                    lists.Add(list.Name, list.Children.Select(x => x.ToDictionary()).ToArray());\n                });\n            }\n\n\n            return dictionary;\n        } \n    }\n\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/DescriptionPropertyTag.cs",
    "content": "﻿using HtmlTags;\r\n\r\nnamespace FubuMVC.Core.Diagnostics\r\n{\r\n    public class DescriptionPropertyTag : HtmlTag\r\n    {\r\n        public DescriptionPropertyTag(string key, string value)\r\n            : base(\"div\")\r\n        {\r\n            AddClass(\"desc-prop\");\r\n            Add(\"b\").Text(key);\r\n            Add(\"span\").Text(value);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/DiagnosticChain.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Linq.Expressions;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Json;\r\nusing FubuMVC.Core.Registration.Conventions;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Formatters;\r\nusing HtmlTags;\r\nusing Newtonsoft.Json;\r\nusing StringWriter = System.IO.StringWriter;\r\n\r\nnamespace FubuMVC.Core.Diagnostics\r\n{\r\n    public class DiagnosticChain : RoutedChain\r\n    {\r\n        public const string DiagnosticsUrl = \"_fubu\";\r\n\r\n        public static IRouteDefinition BuildRoute(ActionCall call)\r\n        {\r\n            // I hate this.\r\n            if (call.HandlerType == typeof (FubuDiagnosticsEndpoint))\r\n            {\r\n                return buildStandardRoute(call);\r\n            }\r\n\r\n            var prefix = call.HandlerType.Name.Replace(\"FubuDiagnostics\", \"\").ToLower();\r\n\r\n            if (call.Method.Name == \"Index\")\r\n            {\r\n                return new RouteDefinition(\"{0}/{1}\".ToFormat(DiagnosticsUrl, prefix).TrimEnd('/'));\r\n            }\r\n\r\n            var route = call.ToRouteDefinition();\r\n            MethodToUrlBuilder.Alter(route, call);\r\n            route.Prepend(prefix);\r\n            route.Prepend(DiagnosticsUrl);\r\n\r\n            return route;\r\n        }\r\n\r\n        private static IRouteDefinition buildStandardRoute(ActionCall call)\r\n        {\r\n            var route = call.ToRouteDefinition();\r\n            MethodToUrlBuilder.Alter(route, call);\r\n            return route;\r\n        }\r\n\r\n        public DiagnosticChain(ActionCall call) : base(BuildRoute(call))\r\n        {\r\n            if (call.HasInput)\r\n            {\r\n                Route.ApplyInputType(call.InputType());\r\n            }\r\n\r\n            Tags.Add(NoTracing);\r\n\r\n            RouteName = call.HandlerType.Name.Replace(\"FubuDiagnostics\", \"\") \r\n                + \":\" \r\n                + call.Method.Name.Replace(\"get_\", \"\").Replace(\"post_\", \"\").Replace(\"{\", \"\").Replace(\"}\", \"\");\r\n\r\n            AddToEnd(call);\r\n\r\n            if (call.HasInput) Input.Add(new NewtonsoftJsonFormatter());\r\n            if (call.HasOutput && call.OutputType() != typeof(HtmlTag) && !call.OutputType().CanBeCastTo<HtmlDocument>())\r\n            {\r\n                var writerType = typeof(DiagnosticJsonWriter<>).MakeGenericType(call.OutputType());\r\n                var writer = Activator.CreateInstance(writerType).As<IMediaWriter>();\r\n                Output.Add(writer);\r\n            }\r\n        }\r\n\r\n        public new static DiagnosticChain For<T>(Expression<Action<T>> method)\r\n        {\r\n            var call = ActionCall.For(method);\r\n            return new DiagnosticChain(call);\r\n        }\r\n    }\r\n\r\n    [Description(\"Diagnostics Json Writer\")]\r\n    public class DiagnosticJsonWriter<T> : IMediaWriter<T>\r\n    {\r\n        private readonly JsonSerializer _serializer;\r\n\r\n        public DiagnosticJsonWriter()\r\n        {\r\n            _serializer = new Newtonsoft.Json.JsonSerializer();\r\n        }\r\n\r\n        public IEnumerable<string> Mimetypes\r\n        {\r\n            get\r\n            {\r\n                yield return \"application/json\";\r\n                yield return \"text/json\";\r\n            }\r\n        }\r\n\r\n\r\n        \r\n        public Task Write(string mimeType, IFubuRequestContext context, T resource)\r\n        {\r\n            var stringWriter = new StringWriter();\r\n            var writer = new JsonTextWriter(stringWriter);\r\n            _serializer.Serialize(writer, resource);\r\n\r\n            return context.Writer.Write(mimeType, stringWriter.ToString());\r\n        }\r\n        \r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/DiagnosticChainsSource.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Diagnostics\n{\n    public class DiagnosticChainsSource : IChainSource\n    {\n        public Task<BehaviorChain[]> BuildChains(BehaviorGraph graph, IPerfTimer timer)\n        {\n            var settings = graph.Settings.Get<DiagnosticsSettings>();\n\n            return findActions(graph).ContinueWith(t =>\n            {\n                return fromActions(settings, t.Result).ToArray();\n            });\n        }\n\n        private IEnumerable<BehaviorChain> fromActions(DiagnosticsSettings settings, IEnumerable<ActionCall> calls)\n        {\n            foreach (var action in calls)\n            {\n                if (action.Method.Name.StartsWith(\"Visualize\"))\n                {\n                    var chain = new BehaviorChain();\n                    chain.AddToEnd(action);\n                    chain.IsPartialOnly = true;\n\n                    chain.Tags.Add(\"Diagnostics\");\n\n                    yield return chain;\n                }\n                else\n                {\n                    var diagnosticChain = new DiagnosticChain(action);\n                    diagnosticChain.Authorization.AddPolicies(settings.AuthorizationRights);\n\n                    yield return diagnosticChain;\n                }\n            }\n        } \n\n        private Task<ActionCall[]> findActions(BehaviorGraph graph)\n        {\n            var source = new ActionSource();\n\n            source.Applies.ToAssemblyContainingType<IActionBehavior>();\n            graph.PackageAssemblies.Each(a => source.Applies.ToAssembly(a));\n            source.IncludeTypesNamed(name => name.EndsWith(\"FubuDiagnostics\"));\n            source.IncludeTypes(type => type == typeof(FubuDiagnosticsEndpoint));\n\n            return source.As<IActionSource>().FindActions(null);\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Endpoints/EndpointExplorerFubuDiagnostics.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Urls;\n\nnamespace FubuMVC.Core.Diagnostics.Endpoints\n{\n    public class EndpointExplorerFubuDiagnostics\n    {\n        private readonly BehaviorGraph _graph;\n        private readonly IUrlRegistry _urls;\n\n        public EndpointExplorerFubuDiagnostics(BehaviorGraph graph, IUrlRegistry urls)\n        {\n            _graph = graph;\n            _urls = urls;\n        }\n\n        public EndpointList get_endpoints()\n        {\n            return new EndpointList\n            {\n                endpoints = _graph.Routes\n                    .Where(IsNotDiagnosticRoute)\n                    .Select(EndpointReport.ForChain)\n                    .OrderBy(x => x.Title)\n                    .Select(x => x.ToDictionary())\n                    .ToList()\n            };\n        }\n\n        public EndpointList get_partials()\n        {\n            return new EndpointList\n            {\n                endpoints = _graph.Chains.Where(x => x.IsPartialOnly && x.GetType() == typeof(BehaviorChain))\n                    .Where(IsNotDiagnosticRoute)\n                    .Select(EndpointReport.ForChain)\n                    .OrderBy(x => x.Title)\n                    .Select(x => x.ToDictionary())\n                    .ToList()\n            };\n        }\n\n        public static bool IsNotDiagnosticRoute(BehaviorChain chain)\n        {\n            if (chain is DiagnosticChain) return false;\n            if (chain.Tags.Contains(\"Diagnostics\")) return false;\n\n            return true;\n        }\n    }\n\n    public class EndpointList\n    {\n        public IList<IDictionary<string, object>> endpoints;\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Endpoints/EndpointReport.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Security;\nusing FubuMVC.Core.Security.Authorization;\n\nnamespace FubuMVC.Core.Diagnostics.Endpoints\n{\n    public class EndpointReport\n    {\n        public const string N_A = \"N/A\";\n        private readonly BehaviorChain _chain;\n\n\n        public static EndpointReport ForChain(BehaviorChain chain)\n        {\n            return new EndpointReport(chain);\n        }\n\n        public EndpointReport(BehaviorChain chain)\n        {\n            _chain = chain;\n        }\n\n        public IDictionary<string, object> ToDictionary()\n        {\n            var dict = new Dictionary<string, object>\n            {\n                {\"title\", Title},\n                {\"constraints\", Constraints},\n                {\"actions\", Action.ToArray()},\n                {\"route\", Route},\n                {\"hash\", _chain.GetHashCode()},\n                {\"resource\", ResourceType.ToDictionary()},\n                {\"input\", InputModel.ToDictionary()},\n                {\"origin\", Origin},\n                {\"accepts\", Accepts},\n                {\"authorization\", Authorization},\n                {\"content-type\", ContentType},\n                {\"output\", Output.ToArray()},\n                {\"category\", UrlCategory},\n                {\"wrappers\", Wrappers.ToArray()},\n                {\"tags\", _chain.Tags.ToArray()}\n            };\n\n\n            return dict;\n        }\n\n        public string Route\n        {\n            get\n            {\n                var route = _chain is RoutedChain ? _chain.As<RoutedChain>().GetRoutePattern() : N_A;\n                if (route.IsEmpty())\n                {\n                    route = \"(home)\";\n                }\n\n                return route;\n            }\n        }\n\n        public Type ResourceType\n        {\n            get\n            {\n                // TODO -- FubuContinuation does not count!\n                return _chain.ResourceType();\n            }\n        }\n\n        public Type InputModel\n        {\n            get { return _chain.InputType(); }\n        }\n\n        public IEnumerable<string> Action\n        {\n            get { return _chain.Calls.Select(x => x.Description); }\n        }\n\n        public string Constraints\n        {\n            get\n            {\n                var routedChain = _chain as RoutedChain;\n\n\n                if (routedChain == null) return N_A;\n\n                if (!routedChain.Route.AllowedHttpMethods.Any()) return \"Any\";\n\n                return routedChain.Route.AllowedHttpMethods.OrderBy(x => x).Join(\", \");\n            }\n        }\n\n        public string Title\n        {\n            get { return _chain.Title(); }\n        }\n\n\n        public IEnumerable<string> Output\n        {\n            get\n            {\n                foreach (var node in _chain.Where(x => x.Category == BehaviorCategory.Output))\n                {\n                    if (node is OutputNode)\n                    {\n                        foreach (var writer in node.As<OutputNode>().Media())\n                        {\n                            yield return writer.ToString();\n                        }\n                    }\n                    else\n                    {\n                        yield return Description.For(node).Title;\n                    }\n                }\n            }\n        }\n\n        public IEnumerable<string> ContentType\n        {\n            get\n            {\n                // TODO -- what about other types of nodes that can write?\n                // IHaveContentTypes ?????\n                var outputNode = _chain.OfType<OutputNode>().FirstOrDefault();\n                if (outputNode == null) return Enumerable.Empty<string>();\n\n                return outputNode.Media().SelectMany(x => x.Mimetypes).Distinct();\n            }\n        }\n\n        public IEnumerable<string> Accepts\n        {\n            get\n            {\n                // TODO -- what about other types of nodes that can write?\n                // IHaveContentTypes ?????\n                var inputNode = _chain.OfType<InputNode>().FirstOrDefault();\n                if (inputNode == null) return new[] {MimeType.HttpFormMimetype};\n\n                return inputNode.Readers().SelectMany(x => x.Mimetypes).Distinct();\n            }\n        }\n\n        public IEnumerable<string> Authorization\n        {\n            get\n            {\n                var authorization = _chain.OfType<AuthorizationNode>().FirstOrDefault();\n                if (authorization == null || !authorization.Policies.Any()) yield break;\n\n                foreach (var policy in authorization.Policies)\n                {\n                    yield return Description.For(policy).Title;\n                }\n            }\n        }\n\n        public IEnumerable<string> Wrappers\n        {\n            get\n            {\n                // TODO -- might be a pretty type opportunity\n                return _chain.OfType<Wrapper>().Select(x => x.BehaviorType.Name);\n            }\n        }\n\n        public string Origin\n        {\n            get { return _chain.Origin; }\n        }\n\n        public string UrlCategory\n        {\n            get\n            {\n                var routed = _chain as RoutedChain;\n\n                return routed == null ? string.Empty : routed.UrlCategory.Category;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/FubuApplicationDescriber.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing FubuCore.Util.TextWriting;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\n\r\nnamespace FubuMVC.Core.Diagnostics\r\n{\r\n    public static class FubuApplicationDescriber\r\n    {\r\n        public static string WriteDescription(IActivationDiagnostics diagnostics, FubuRuntime runtime)\r\n        {\r\n            var writer = new System.IO.StringWriter();\r\n\r\n            writeProperties(writer, runtime);\r\n\r\n            writeErrors(writer, diagnostics);\r\n\r\n            writeAssemblies(writer);\r\n\r\n            writeLogs(writer, diagnostics);\r\n\r\n            return writer.ToString();\r\n        }\r\n\r\n        private static void writeLogs(StringWriter writer, IActivationDiagnostics diagnostics)\r\n        {\r\n            writer.WriteLine(\"------------------------------------------------------------------------------------------------\");\r\n            writer.WriteLine(\"Logs\");\r\n            writer.WriteLine(\"------------------------------------------------------------------------------------------------\");\r\n\r\n            diagnostics.EachLog((o, log) =>\r\n            {\r\n                if (log.Success)\r\n                {\r\n                    writer.WriteLine(o.ToString());\r\n                    writer.WriteLine(log.FullTraceText());\r\n                    writer.WriteLine(\"------------------------------------------------------------------------------------------------\");\r\n                }\r\n            });\r\n\r\n            writer.WriteLine();\r\n        }\r\n\r\n        private static void writeErrors(StringWriter writer, IActivationDiagnostics diagnostics)\r\n        {\r\n            writer.WriteLine(\"------------------------------------------------------------------------------------------------\");\r\n            writer.WriteLine(\"Errors\");\r\n            writer.WriteLine(\"------------------------------------------------------------------------------------------------\");\r\n\r\n            diagnostics.EachLog((o, log) =>\r\n            {\r\n                if (!log.Success)\r\n                {\r\n                    writer.WriteLine(o.ToString());\r\n                    writer.WriteLine(log.FullTraceText());\r\n                    writer.WriteLine(\"------------------------------------------------------------------------------------------------\");\r\n                }\r\n            });\r\n\r\n            writer.WriteLine();\r\n\r\n        }\r\n\r\n        \r\n\r\n        private static void writeAssemblies(StringWriter writer)\r\n        {\r\n            var report = new TextReport();\r\n            report.StartColumns(3);\r\n            report.AddDivider('-');\r\n            report.AddText(\"Assemblies\");\r\n            report.AddDivider('-');\r\n\r\n            AppDomain.CurrentDomain.GetAssemblies().Where(x => !x.IsDynamic).Each(assem => {\r\n                var assemblyName = assem.GetName();\r\n                var file = findCodebase(assem);\r\n                report.AddColumnData(assemblyName.Name, assemblyName.Version.ToString(), file);\r\n            });\r\n\r\n            report.AddDivider('-');\r\n            report.Write(writer);\r\n\r\n            writer.WriteLine();\r\n        }\r\n\r\n        private static string findCodebase(Assembly assem)\r\n        {\r\n            try\r\n            {\r\n                var file = assem.CodeBase;\r\n                return file ?? \"None\";\r\n            }\r\n            catch (Exception)\r\n            {\r\n                return \"None\";\r\n            }\r\n        }\r\n\r\n        private static void writeProperties(StringWriter writer, FubuRuntime runtime)\r\n        {\r\n            var report = new TextReport();\r\n            report.StartColumns(2);\r\n\r\n            if (runtime.Restarted.HasValue)\r\n                report.AddColumnData(\"Restarted\", runtime.Restarted.ToString());\r\n            report.AddColumnData(\"Application Path\", runtime.Files.RootPath);\r\n\r\n            report.Write(writer);\r\n\r\n            writer.WriteLine();\r\n        }\r\n\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/FubuDiagnosticsEndpoint.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing FubuCore;\nusing FubuMVC.Core.Assets;\nusing FubuMVC.Core.Assets.JavascriptRouting;\nusing FubuMVC.Core.Diagnostics.Assets;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Registration;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.Diagnostics\n{\n\n    [Tag(\"Diagnostics\")]\n    public class FubuDiagnosticsEndpoint\n    {\n        private readonly IAssetTagBuilder _tags;\n        private readonly IHttpResponse _response;\n        private readonly IDiagnosticAssets _assets;\n        private readonly JavascriptRouteWriter _routeWriter;\n        private readonly DiagnosticJavascriptRoutes _routes;\n        private readonly IHttpRequest _request;\n        private readonly FubuRuntime _runtime;\n\n        private static readonly string[] _styles = new[] {\"bootstrap.min.css\", \"master.css\", \"bootstrap.overrides.css\"};\n        private static readonly string[] _scripts = new[] { \"jquery.min.js\", \"typeahead.bundle.min.js\", \"root.js\" };\n\n        public FubuDiagnosticsEndpoint(IAssetTagBuilder tags, IHttpResponse response, IDiagnosticAssets assets, JavascriptRouteWriter routeWriter, DiagnosticJavascriptRoutes routes, IHttpRequest request, FubuRuntime runtime)\n        {\n            _tags = tags;\n            _response = response;\n            _assets = assets;\n            _routeWriter = routeWriter;\n            _routes = routes;\n            _request = request;\n            _runtime = runtime;\n        }\n\n        public HtmlDocument get__fubu()\n        {\n            var document = new HtmlDocument\n            {\n                Title = \"FubuMVC Diagnostics\"\n            };\n\n            writeStyles(document);\n\n            var div = new HtmlTag(\"div\");\n            div.Id(\"diagnostics\");\n            var foot = new HtmlTag(\"foot\");\n            document.Body.Children.Add(div);\n            document.Body.Children.Add(foot);\n            writeScripts(foot);\n            return document;\n        }\n\n\n        private void writeScripts(HtmlTag foot)\n        {\n            // Do this regardless\n            foot.Append(_assets.For(\"FubuDiagnostics.js\").ToEmbeddedScriptTag());\n\n            var routeData = _routeWriter.WriteJavascriptRoutes(\"FubuDiagnostics.routes\", _routes);\n            foot.Append(routeData);\n\n            var extensionFiles = _assets.JavascriptFiles().Where(x => x.AssemblyName != \"FubuMVC.Core\");\n\n            if (_runtime.Mode.InDiagnostics())\n            {\n                var names = _scripts.Union(extensionFiles.Select(x => x.Name.Split('.').Reverse().Take(2).Reverse().Join(\".\")));\n                var links = _tags.BuildScriptTags(names.Select(x => \"fubu-diagnostics/\" + x));\n                links.Each(x => foot.Append(x));\n\n            }\n            else\n            {\n                _scripts.Each(name =>\n                {\n                    var file = _assets.For(name);\n                    foot.Append(file.ToEmbeddedScriptTag());\n                });\n\n                extensionFiles.Each(file => foot.Append(file.ToEmbeddedScriptTag()));\n            }\n        }\n\n        private void writeStyles(HtmlDocument document)\n        {\n            _styles.Each(name =>\n            {\n                var file = _assets.For(name);\n                document.Head.Append(file.ToEmbeddedStyleTag());\n            });\n        }\n\n        [NoDiagnostics]\n        public void get__fubu_asset_Version_Name(DiagnosticAssetRequest request)\n        {\n            var file = _assets.For(request.Name);\n            if (file == null)\n            {\n                _response.StatusCode = (int) HttpStatusCode.NotFound;\n                return;\n            }\n\n            file.Write(_response);\n        }\n\n        [NoDiagnostics]\n        public void get__fubu_icon(Standin standin)\n        {\n            var file = _assets.For(\"fubumvc.png\");\n            file.Write(_response);\n        }\n    }\n\n    public class Standin { }\n\n    public class DiagnosticAssetRequest\n    {\n        public string Version { get; set; }\n        public string Name { get; set; }\n    }\n\n    public class DiagnosticJavascriptRoutes : JavascriptRouter\n    {\n        public DiagnosticJavascriptRoutes(BehaviorGraph graph)\n        {\n            graph.Chains.OfType<DiagnosticChain>().Where(x => x.Route.AllowedHttpMethods.Any()).Each(Add);\n\n            Get(\"icon\").Action<FubuDiagnosticsEndpoint>(x => x.get__fubu_icon(null));\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/HttpRequestSummary.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Http.Owin;\n\nnamespace FubuMVC.Core.Diagnostics\n{\n    public class HttpRequestSummary\n    {\n        // For serialization\n        public HttpRequestSummary()\n        {\n            type = \"http\";\n        }\n\n        public HttpRequestSummary(ChainExecutionLog log) : this()\n        {\n            var request = new OwinHttpRequest(log.Request);\n            var response = new OwinHttpResponse(log.Request);\n\n            id = log.Id.ToString();\n            time = log.Time.ToHttpDateString();\n            url = request.RawUrl();\n            method = request.HttpMethod();\n            status = response.StatusCode;\n            description = response.StatusDescription;\n            if (status == 302)\n            {\n                // TODO -- write a helper for location\n                description = response.HeaderValueFor(HttpResponseHeaders.Location).SingleOrDefault();\n            }\n\n            contentType = response.ContentType();\n            duration = log.ExecutionTime;\n        }\n\n        public string type { get; set; }\n\n        public string id { get; set; }\n        public string time { get; set; }\n        public string url { get; set; }\n        public string method { get; set; }\n        public int status { get; set; }\n        public string description { get; set; }\n        public string contentType { get; set; }\n        public double duration { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/Activity.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public class Activity\n    {\n        private readonly double _start;\n        \n        private double _end;\n        private readonly ISubject _subject;\n\n        public Activity(ISubject subject, double start)\n        {\n            _start = start;\n            _subject = subject;\n        }\n\n\n        public IList<Activity> Nested = new List<Activity>(); \n\n\n        public ISubject Subject\n        {\n            get { return _subject; }\n        }\n\n        public void MarkEnd(double end)\n        {\n            _end = end;\n        }\n\n        public double Start\n        {\n            get { return _start; }\n        }\n\n        public double End\n        {\n            get { return _end; }\n        }\n\n        public double Duration\n        {\n            get { return _end - _start; }\n        }\n\n        public double InnerTime\n        {\n            get { return Duration - Nested.Sum(x => x.Duration); }\n        }\n\n        public IEnumerable<Activity> AllActivities()\n        {\n            yield return this;\n\n            foreach (var activity in Nested)\n            {\n                yield return activity;\n\n                foreach (var child in children())\n                {\n                    yield return child;\n                }\n            }\n        }\n\n        private IEnumerable<Activity> children()\n        {\n            foreach (var child in Nested)\n            {\n                yield return child;\n\n                foreach ( var descendent in child.children())\n                {\n                    yield return descendent;\n                }\n            }\n        } \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/ApplyTracing.cs",
    "content": "using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    [Description(\"Applies the runtime tracing behaviors to each chain\")]\n    public class ApplyTracing\n    {\n        public static void Configure(BehaviorGraph graph)\n        {\n            foreach (BehaviorChain chain in graph.Chains.Where(ShouldApply).ToArray())\n            {\n                ApplyToChain(chain);\n            }\n        }\n\n        public static bool ShouldApply(BehaviorChain chain)\n        {\n            if (chain is DiagnosticChain) return false;\n            if (chain.Tags.Contains(\"Diagnostics\")) return false;\n\n            if (chain.IsTagged(BehaviorChain.NoTracing))\n            {\n                return false;\n            }\n\n\n            if (chain.Calls.Any(x => x.HasAttribute<NoDiagnosticsAttribute>()))\n            {\n                return false;\n            }\n\n            return true;\n        }\n\n        public static void ApplyToChain(BehaviorChain chain)\n        {\n            var nodes = chain.ToList();\n            nodes.Each(x => new BehaviorTracerNode(x));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/BehaviorTracer.cs",
    "content": "using System;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public class BehaviorTracer : WrappingBehavior\n    {\n        private readonly BehaviorNode _node;\n        private readonly IChainExecutionLog _log;\n\n        public BehaviorTracer(BehaviorNode node, IChainExecutionLog log)\n        {\n            _node = node;\n            _log = log;\n        }\n\n        protected override async Task invoke(Func<Task> func)\n        {\n            _log.StartSubject(_node);\n\n            try\n            {\n                await func().ConfigureAwait(false);\n            }\n            catch (Exception ex)\n            {\n                _log.LogException(ex);\n                throw;\n            }\n            finally\n            {\n                _log.FinishSubject();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/BehaviorTracerNode.cs",
    "content": "using System.ComponentModel;\nusing FubuMVC.Core.Registration.Nodes;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    [Description(\"Behavior Tracing\")]\n    public class BehaviorTracerNode : BehaviorNode\n    {\n        public BehaviorTracerNode(BehaviorNode inner)\n        {\n            inner.AddBefore(this);\n        }\n\n        public override BehaviorCategory Category\n        {\n            get { return BehaviorCategory.Instrumentation; }\n        }\n\n        protected override IConfiguredInstance buildInstance()\n        {\n            var instance = new SmartInstance<BehaviorTracer>();\n            instance.Ctor<BehaviorNode>().Is(Next);\n\n            return instance;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/ChainExecutionHistory.cs",
    "content": "using System;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public class ChainExecutionHistory : IChainExecutionHistory\n    {\n        private readonly ConcurrentQueue<ChainExecutionLog> _reports = new ConcurrentQueue<ChainExecutionLog>();\n        private readonly DiagnosticsSettings _settings;\n\n        public ChainExecutionHistory(DiagnosticsSettings settings)\n        {\n            _settings = settings;\n        }\n\n        public void Store(ChainExecutionLog log)\n        {\n            log.SessionTag = CurrentSessionTag;\n\n            _reports.Enqueue(log);\n            while (_reports.Count > _settings.MaxRequests)\n            {\n                ChainExecutionLog _;\n                _reports.TryDequeue(out _);\n            }\n        }\n\n        public IEnumerable<ChainExecutionLog> RecentReports()\n        {\n            return _reports.ToList();\n        }\n\n        public string CurrentSessionTag { get; set; }\n\n        public ChainExecutionLog Find(Guid id)\n        {\n            return _reports.FirstOrDefault(x => x.Id == id);\n        }\n\n        public void Clear()\n        {\n            while (_reports.Count > 0)\n            {\n                ChainExecutionLog _;\n                _reports.TryDequeue(out _);\n            }\n        }\n\n        public IEnumerable<ChainExecutionLog> GetRecentRequests(BehaviorChain chain)\n        {\n            return _reports.ToArray().Where(x => x.RootChain == chain).ToArray();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/ChainExecutionListener.cs",
    "content": "using System;\nusing FubuCore.Logging;\nusing ExceptionReport = FubuCore.Logging.ExceptionReport;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public class ChainExecutionListener : ILogListener\n    {\n        private readonly IChainExecutionLog _trace;\n\n        public ChainExecutionListener(IChainExecutionLog trace)\n        {\n            _trace = trace;\n        }\n\n        public bool ListensFor(Type type)\n        {\n            return true;\n        }\n\n        public void DebugMessage(object message)\n        {\n            _trace.Log(message);\n        }\n\n        public void InfoMessage(object message)\n        {\n            _trace.Log(message);\n        }\n\n        public void Debug(string message)\n        {\n            _trace.Log(new StringMessage(message));\n        }\n\n        public void Info(string message)\n        {\n            _trace.Log(new StringMessage(message));\n        }\n\n        public void Error(string message, Exception ex)\n        {\n            _trace.LogException(ex);\n        }\n\n        public void Error(object correlationId, string message, Exception ex)\n        {\n            _trace.LogException(ex);\n        }\n\n        public bool IsDebugEnabled\n        {\n            get { return true; }\n        }\n\n        public bool IsInfoEnabled\n        {\n            get { return true; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/ChainExecutionLog.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing FubuCore.Descriptions;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public class ChainExecutionLog : IRequestLog, ISubject, IChainExecutionLog\n    {\n        private readonly Dictionary<string, object> _request;\n        private readonly Stopwatch _stopwatch = new Stopwatch();\n\n        private readonly Activity _activity;\n        private readonly Stack<Activity> _activityStack = new Stack<Activity>();\n        private readonly IList<Exception> _exceptions = new List<Exception>();\n        private readonly IList<RequestStep> _steps = new List<RequestStep>(); \n\n        public ChainExecutionLog()\n        {\n            _request = new Dictionary<string, object>();\n            _stopwatch.Start();\n            Id = Guid.NewGuid();\n\n            _activity = new Activity(this, 0);\n            _activityStack.Push(_activity);\n        }\n\n        public IEnumerable<RequestStep> Steps\n        {\n            get { return _steps; }\n        }\n\n        public IDictionary<string, object> ToDictionary()\n        {\n            var dict = ToHeaderDictionary();\n\n            var steps = Steps.Select(x =>\n            {\n                return new Dictionary<string, object>\n                {\n                    {\"activity\", x.Activity.Subject.Id},\n                    {\"log\", Description.For(x.Log).ToDictionary()},\n                    {\"time\", x.RequestTime}\n                };\n            }).ToArray();\n            dict.Add(\"steps\", steps);\n\n\n            var activities = AllActivities().Select(x =>\n            {\n                return new Dictionary<string, object>\n                {\n                    {\"title\", x.Subject.Title()},\n                    {\"start\", x.Start},\n                    {\"end\", x.End},\n                    {\"duration\", x.Duration},\n                    {\"inner_time\", x.InnerTime},\n                    {\"id\", x.Subject.Id.ToString()}\n                };\n            }).ToArray();\n\n            dict.Add(\"activities\", activities);\n\n\n            return dict;\n        }\n\n        public Dictionary<string, object> ToHeaderDictionary()\n        {\n            var dict = new Dictionary<string, object>\n            {\n                {\"request\", _request},\n                {\"time\", Time.ToLocalTime().ToShortTimeString()},\n                {\"execution_time\", ExecutionTime},\n                {\"title\", Title()},\n                {\"id\", Id.ToString()},\n                {\"exceptions\", HadException}\n            };\n\n            if (RootChain != null) dict.Add(\"chain\", RootChain.Key);\n            return dict;\n        }\n\n        public IEnumerable<Activity> AllActivities()\n        {\n            return Activity.AllActivities().Distinct();\n        }\n\n        public readonly DateTime Time = DateTime.UtcNow;\n\n        public Activity Activity\n        {\n            get { return _activity; }\n        }\n\n        protected virtual double requestTime()\n        {\n            return _stopwatch.ElapsedMilliseconds;\n        }\n\n        private Activity current\n        {\n            get { return _activityStack.Any() ? _activityStack.Peek() : _activity; }\n        }\n\n        public void StartSubject(ISubject subject)\n        {\n            var activity = new Activity(subject, requestTime());\n            current.Nested.Add(activity);\n\n            _activityStack.Push(activity);\n        }\n\n        public void FinishSubject()\n        {\n            if (_activityStack.Any())\n            {\n                current.MarkEnd(requestTime());\n                _activityStack.Pop();\n            }\n        }\n\n        public BehaviorChain RootChain { get; set; }\n\n        public string Title()\n        {\n            return RootChain == null ? \"Unknown\" : RootChain.Title();\n        }\n\n        public Guid Id { get; private set; }\n\n\n        public double ExecutionTime { get; private set; }\n\n        public bool HadException { get; private set; }\n\n        public void LogException(Exception ex)\n        {\n            if (_exceptions.Contains(ex)) return;\n\n            _exceptions.Add(ex);\n            HadException = true;\n            Log(new ExceptionReport(ex));\n        }\n\n        public void MarkFinished()\n        {\n            _exceptions.Clear();\n            _stopwatch.Stop();\n            _activity.MarkEnd(requestTime());\n            ExecutionTime = requestTime();\n        }\n\n        public Dictionary<string, object> Request\n        {\n            get { return _request; }\n        }\n\n        public string SessionTag { get; set; }\n\n        public void Log(object log)\n        {\n            var step = new RequestStep(requestTime(), log) {Activity = _activityStack.Peek()};\n\n            _steps.Add(step);\n        }\n\n        // acts like the timer in diagnostics\n        public void Trace(string description, Action action)\n        {\n            var start = requestTime();\n            action();\n            var finish = requestTime();\n\n            Log(new Trace\n            {\n                Description = description,\n                Duration = finish - start\n            });\n        }\n\n        public void RecordHeaders(IDictionary<string, object> env)\n        {\n            env.CopyTo(_request, \"owin.RequestHeaders\", \"owin.RequestMethod\", \"owin.RequestPath\", \"owin.RequestPathBase\",\n                \"owin.RequestProtocol\", \"owin.RequestQueryString\", \"owin.RequestScheme\", \"owin.ResponseHeaders\",\n                \"owin.ResponseStatusCode\", \"owin.ResponseReasonPhrase\");\n        }\n\n        public void RecordBody(IDictionary<string, object> env)\n        {\n            // TODO -- will need to get the request body somehow\n        }\n\n        public void RecordHeaders(Envelope envelope)\n        {\n            try\n            {\n                var dict = envelope.Headers.ToDictionary();\n\n                _request.Add(\"headers\", dict);\n            }\n            catch (Exception)\n            {\n                // Nothing. Don't even think about letting a failure here cause any upstream harm\n            }\n        }\n\n        public void RecordBody(Envelope envelope)\n        {\n            // TODO -- grab the message body if it isn't too big?\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/IChainExecutionHistory.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public interface IChainExecutionHistory\n    {\n        void Store(ChainExecutionLog log);\n        IEnumerable<ChainExecutionLog> RecentReports();\n        string CurrentSessionTag { get; set; }\n        ChainExecutionLog Find(Guid id);\n        void Clear();\n        IEnumerable<ChainExecutionLog> GetRecentRequests(BehaviorChain chain);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/IChainExecutionLog.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public interface IChainExecutionLog\n    {\n        void StartSubject(ISubject subject);\n        void FinishSubject();\n        void LogException(Exception ex);\n        void Log(object log);\n        void Trace(string description, Action action);\n        void RecordHeaders(IDictionary<string, object> env);\n        void RecordBody(IDictionary<string, object> env);\n\n        void RecordHeaders(Envelope envelope);\n        void RecordBody(Envelope envelope);\n\n        Guid Id { get; }\n        BehaviorChain RootChain { get; set; }\n    }\n\n\n    public class NulloChainExecutionLog : IChainExecutionLog\n    {\n        public void StartSubject(ISubject subject)\n        {\n            // nothing\n        }\n\n        public void FinishSubject()\n        {\n            // nothing\n        }\n\n        public void LogException(Exception ex)\n        {\n            // nothing\n        }\n\n        public void Log(object log)\n        {\n            // nothing\n        }\n\n        public void Trace(string description, Action action)\n        {\n            // nothing\n            action();\n        }\n\n        public void RecordHeaders(IDictionary<string, object> env)\n        {\n            // nothing\n        }\n\n        public void RecordBody(IDictionary<string, object> env)\n        {\n            // nothing\n        }\n\n        public void RecordHeaders(Envelope envelope)\n        {\n            // nothing\n        }\n\n        public void RecordBody(Envelope envelope)\n        {\n            // nothing\n        }\n\n        public Guid Id\n        {\n            get { return Guid.Empty; }\n        }\n\n        public BehaviorChain RootChain { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/IExecutionLogStorage.cs",
    "content": "namespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public interface IExecutionLogStorage\n    {\n        void Store(IChainExecutionLog log);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/IExecutionLogger.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public interface IExecutionLogger\n    {\n        void Record(IChainExecutionLog log, IDictionary<string, object> http);\n        void Record(IChainExecutionLog log, Envelope envelope);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/IPerformanceHistoryQueue.cs",
    "content": "namespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public interface IPerformanceHistoryQueue\n    {\n        void Enqueue(ChainExecutionLog log);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/IRequestLog.cs",
    "content": "using FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public interface IRequestLog\n    {\n        double ExecutionTime { get; }\n        bool HadException { get; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/ISubject.cs",
    "content": "using System;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public interface ISubject\n    {\n        string Title();\n        Guid Id { get; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/InMemoryExecutionLogStorage.cs",
    "content": "namespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public class InMemoryExecutionLogStorage : IExecutionLogStorage\n    {\n        private readonly IChainExecutionHistory _history;\n        private readonly IPerformanceHistoryQueue _queue;\n\n        public InMemoryExecutionLogStorage(IChainExecutionHistory history, IPerformanceHistoryQueue queue)\n        {\n            _history = history;\n            _queue = queue;\n        }\n\n        public void Store(IChainExecutionLog log)\n        {\n            _history.Store((ChainExecutionLog) log);\n            _queue.Enqueue((ChainExecutionLog) log);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/InMemoryInstrumentationServices.cs",
    "content": "using StructureMap;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public class InMemoryInstrumentationServices : Registry\n    {\n        public InMemoryInstrumentationServices()\n        {\n            ForSingletonOf<IExecutionLogStorage>().Use<InMemoryExecutionLogStorage>();\n\n            ForSingletonOf<IPerformanceHistoryQueue>().Use<PerformanceHistoryQueue>();\n            ForSingletonOf<IChainExecutionHistory>().Use<ChainExecutionHistory>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/NulloExecutionLogger.cs",
    "content": "using System.Collections.Generic;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public class NulloExecutionLogger : IExecutionLogger\n    {\n        public void Record(IChainExecutionLog log, IDictionary<string, object> http)\n        {\n            // no-op\n        }\n\n        public void Record(IChainExecutionLog log, Envelope envelope)\n        {\n            // no-op\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/PerformanceHistory.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public class PerformanceHistory\n    {\n        private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();\n\n        public void Read(IRequestLog log)\n        {\n            _lock.Write(() =>\n            {\n                LastExecution = log as ChainExecutionLog;\n\n                HitCount++;\n                if (log.HadException) ExceptionCount++;\n                TotalExecutionTime += log.ExecutionTime;\n\n                if (log.ExecutionTime > MaxTime) MaxTime = log.ExecutionTime;\n                if (log.ExecutionTime < MinTime || MinTime == 0) MinTime = log.ExecutionTime;\n            });\n        }\n\n        public long HitCount { get; private set; }\n        public long ExceptionCount { get; private set; }\n\n        public double TotalExecutionTime { get; private set; }\n\n        public double MaxTime { get; private set; }\n        public double MinTime { get; private set; }\n\n        public double Average\n        {\n            get\n            {\n                if (HitCount == 0) return 0;\n                return TotalExecutionTime/HitCount;\n            }\n        }\n\n        public double ExceptionPercentage\n        {\n            get\n            {\n                if (HitCount == 0) return 0;\n                \n                return (((double)ExceptionCount)/((double)HitCount))*100;\n            }\n        }\n\n        public ChainExecutionLog LastExecution { get; private set; }\n\n        public bool IsWarning(ChainExecutionLog report)\n        {\n            var max = MaxTime;\n            var avg = Average;\n            var p1 = 1 - report.ExecutionTime / max;\n            var p2 = 1 - (double)avg / max;\n            return (p2 - p1) > 0.25;\n        }\n\n        public Dictionary<string, object> ToDictionary()\n        {\n            return _lock.Read(() =>\n            {\n                return new Dictionary<string, object>\n                {\n                    {\"hits\", HitCount},\n                    {\"total\", TotalExecutionTime.ToString(\"N\")},\n                    {\"average\", Average.ToString(\"N\")},\n                    {\"exceptions\", ExceptionPercentage.ToString(\"N\")},\n                    {\"min\", MinTime.ToString(\"N\")},\n                    {\"max\", MaxTime.ToString(\"N\")}\n\n                };\n            });\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"HitCount: {0}, ExceptionCount: {1}, TotalExecutionTime: {2}, MaxTime: {3}, MinTime: {4}, Average: {5}, ExceptionPercentage: {6}\", HitCount, ExceptionCount, TotalExecutionTime, MaxTime, MinTime, Average, ExceptionPercentage);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/PerformanceHistoryQueue.cs",
    "content": "using System;\nusing System.Collections.Concurrent;\nusing System.Threading.Tasks;\nusing FubuCore.Logging;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    // Break it out. This needs to be a singleton\n\n    public class PerformanceHistoryQueue : IPerformanceHistoryQueue\n    {\n        private readonly ILogger _logger;\n\n        public PerformanceHistoryQueue(ILogger logger)\n        {\n            _logger = logger;\n        }\n\n\n        public void Enqueue(ChainExecutionLog log)\n        {\n            Task.Factory.StartNew(() =>\n            {\n                try\n                {\n                    log.RootChain?.Performance?.Read(log);\n                }\n                catch (Exception ex)\n                {\n                    try\n                    {\n                        _logger.Info(\"Failed while updating performance history: \" + ex);\n                    }\n                    catch (Exception e)\n                    {\n                        // Yeah, I know, but don't allow an exception here to *ever* bubble up\n                        Console.WriteLine(e);\n                    }\n                }\n            });\n\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/ProductionExecutionLogger.cs",
    "content": "using System.Collections.Generic;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public class ProductionExecutionLogger : IExecutionLogger\n    {\n        private readonly IExecutionLogStorage _storage;\n\n        public ProductionExecutionLogger(IExecutionLogStorage storage)\n        {\n            _storage = storage;\n        }\n\n        public void Record(IChainExecutionLog log, IDictionary<string, object> http)\n        {\n            log.RecordHeaders(http);\n            _storage.Store(log);\n        }\n\n        public void Record(IChainExecutionLog log, Envelope envelope)\n        {\n            log.RecordHeaders(envelope);\n\n            _storage.Store(log);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/ProductionModeTraceListener.cs",
    "content": "using System;\nusing FubuCore.Logging;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public class ProductionModeTraceListener : ILogListener\n    {\n        private readonly IChainExecutionLog _trace;\n\n        public ProductionModeTraceListener(IChainExecutionLog trace)\n        {\n            _trace = trace;\n        }\n\n        public void Error(string message, Exception ex)\n        {\n            _trace.Log(new ExceptionReport(message, ex));\n        }\n\n        public void Error(object correlationId, string message, Exception ex)\n        {\n            _trace.Log(new ExceptionReport(message, ex)\n            {\n                CorrelationId = correlationId\n            });\n        }\n\n        public bool ListensFor(Type type)\n        {\n            return false;\n        }\n\n        public void DebugMessage(object message)\n        {\n        }\n\n        public void InfoMessage(object message)\n        {\n        }\n\n        public void Debug(string message)\n        {\n        }\n\n        public void Info(string message)\n        {\n        }\n\n        public bool IsDebugEnabled\n        {\n            get\n            {\n                return false;\n            }\n        }\n\n        public bool IsInfoEnabled\n        {\n            get\n            {\n                return false;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/RequestStep.cs",
    "content": "using System;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public class RequestStep\n    {\n        public RequestStep(double requestTime, object log)\n        {\n            RequestTime = requestTime;\n            Log = log;\n            Id = Guid.NewGuid();\n        }\n\n        public double RequestTime { get; private set; }\n        public object Log { get; private set; }\n\n        public Guid Id { get; private set; }\n        public Activity Activity { get; set; }\n\n        public bool Equals(RequestStep other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return other.RequestTime.Equals(RequestTime) && Equals(other.Log, Log);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof(RequestStep)) return false;\n            return Equals((RequestStep)obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return (RequestTime.GetHashCode() * 397) ^ (Log != null ? Log.GetHashCode() : 0);\n            }\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"RequestTimeInMilliseconds: {0}, Log: {1}\", RequestTime, Log);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/Trace.cs",
    "content": "namespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public class Trace\n    {\n        public string Description { get; set; }\n        public double Duration { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Instrumentation/VerboseExecutionLogger.cs",
    "content": "using System.Collections.Generic;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.Diagnostics.Instrumentation\n{\n    public class VerboseExecutionLogger : IExecutionLogger\n    {\n        private readonly IExecutionLogStorage _storage;\n\n        public VerboseExecutionLogger(IExecutionLogStorage storage)\n        {\n            _storage = storage;\n        }\n\n        public void Record(IChainExecutionLog log, IDictionary<string, object> http)\n        {\n            log.RecordHeaders(http);\n            log.RecordBody(http);\n\n            _storage.Store(log);\n        }\n\n        public void Record(IChainExecutionLog log, Envelope envelope)\n        {\n            log.RecordHeaders(envelope);\n            log.RecordBody(envelope);\n\n            _storage.Store(log);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/ModelBindingFubuDiagnostics.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Binding;\nusing FubuCore.Binding.Logging;\nusing FubuCore.Descriptions;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.Diagnostics\n{\n    public class ModelBindingFubuDiagnostics\n    {\n        private readonly BindingRegistry _bindingRegistry;\n\n        public ModelBindingFubuDiagnostics(BindingRegistry bindingRegistry)\n        {\n            _bindingRegistry = bindingRegistry;\n        }\n\n        public Dictionary<string, object> get_binding_all()\n        {\n            var description = Description.For(_bindingRegistry);\n\n            return description.ToDictionary();\n        }\n    }\n\n    public class ModelBindingHtmlReport : IBindingReportVisitor\n    {\n        private readonly TableTag _table;\n        private readonly Stack<string> _descriptions = new Stack<string>();\n        private readonly Stack<BindingReport> _bindingStack = new Stack<BindingReport>();\n\n        public ModelBindingHtmlReport()\n        {\n            _table = buildTable();\n        }\n\n        private static TableTag buildTable()\n        {\n            var table = new TableTag();\n            table.AddClass(\"table table-striped table-bordered table-condensed\");\n\n            table.AddHeaderRow(row =>\n            {\n                row.Header(\"Property\");\n                row.Header(\"Handler\");\n                row.Header(\"Value(s)\");\n            });\n\n            return table;\n        }\n\n        public HtmlTag Table\n        {\n            get { return _table; }\n        }\n\n        void IBindingReportVisitor.Report(BindingReport report)\n        {\n            _bindingStack.Push(report);\n        }\n\n        private void write(object handler, IEnumerable<BindingValue> values = null)\n        {\n            var description = Description.For(handler).Title;\n\n            var propertyName = _descriptions.Reverse().Join(\"\").Replace(\".[\", \"[\").TrimStart('.');\n            var valueString = values == null\n                                    ? string.Empty\n                                    : values.Select(x => \"'{0}' from '{1}'/{2}\".ToFormat(x.RawValue, x.Source, x.RawKey)).Join(\", \");\n\n\n            _table.AddBodyRow(row =>\n            {\n                row.Cell(propertyName);\n                row.Cell(description);\n                row.Cell(valueString);\n            });\n        }\n\n        void IBindingReportVisitor.Property(PropertyBindingReport report)\n        {\n            _descriptions.Push(\".\" + report.Property.Name);\n            object handler = (object)report.Converter ?? report.Binder;\n            write(handler, report.Values);\n        }\n\n        void IBindingReportVisitor.Element(ElementBinding binding)\n        {\n            _descriptions.Push(\"[{0}]\".ToFormat(binding.Index));\n            write(binding.Binder);\n        }\n\n        void IBindingReportVisitor.EndReport()\n        {\n            _bindingStack.Pop();\n        }\n\n        void IBindingReportVisitor.EndProperty()\n        {\n            _descriptions.Pop();\n        }\n\n        void IBindingReportVisitor.EndElement()\n        {\n            _descriptions.Pop();\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Packaging/ActivationDiagnostics.cs",
    "content": "using System;\nusing System.Reflection;\nusing FubuMVC.Core.Environment;\n\nnamespace FubuMVC.Core.Diagnostics.Packaging\n{\n    public class ActivationDiagnostics : IActivationDiagnostics\n    {\n        private readonly LoggingSession _log;\n\n        public ActivationDiagnostics()\n        {\n            Timer = new PerfTimer();\n            _log = new LoggingSession(Timer);\n        }\n\n        public void LogExecution(object target, Action continuation)\n        {\n            _log.LogExecution(target, continuation);\n        }\n\n        public IActivationLog LogFor(object target)\n        {\n            return _log.LogFor(target);\n        }\n\n        public void EachLog(Action<object, ActivationLog> action)\n        {\n            _log.EachLog(action);\n        }\n\n        public bool HasErrors()\n        {\n            return _log.HasErrors();\n        }\n\n        public PerfTimer Timer { get; private set; }\n\n        // Hokey, but it gets the job done.\n        public static string GetTypeName(object target)\n        {\n            if (target is IActivator) return typeof (IActivator).Name;\n            if (target is Assembly) return typeof (Assembly).Name;\n            if (target is IEnvironmentRequirement) return typeof (IEnvironmentRequirement).Name;\n\n            return target.GetType().Name;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Packaging/ActivationLog.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.CommandLine;\n\nnamespace FubuMVC.Core.Diagnostics.Packaging\n{\n    [Serializable]\n    public class ActivationLog : IActivationLog\n    {\n        private readonly IPerfTimer _timer;\n        private readonly StringWriter _text = new StringWriter();\n        private readonly IList<object> _children = new List<object>();\n\n        public ActivationLog(IPerfTimer timer)\n        {\n            _timer = timer;\n            Success = true;\n            Id = Guid.NewGuid();\n        }\n\n        public ActivationLog() : this(new PerfTimer())\n        {\n        }\n\n        public string Provenance { get; set; }\n        public string Description { get; set; }\n\n        public void Execute(Action continuation)\n        {\n            try\n            {\n                _timer.Record(Description, continuation);\n            }\n            catch (Exception e)\n            {\n                MarkFailure(e);\n            }\n        }\n\n        public void Trace(ConsoleColor color, string format, params object[] parameters)\n        {\n            var text = format;\n\n            if (parameters.Length > 0)\n            {\n                try\n                {\n                    text = format.ToFormat(parameters);\n                }\n                catch (FormatException ex)\n                {\n                    //this could be moved into 'ToFormat'\n                    var f = format.Replace(\"{\", \"{{\").Replace(\"}\", \"}}\");\n                    var a = parameters.Aggregate((l, r) => l + \",\" + r);\n                    throw new Exception(\"Attempted to format the string --{0}-- with --{1}--\".ToFormat(f, a), ex);\n                }\n            }\n\n            _text.WriteLine(text);\n        }\n\n        public void Trace(string format, params object[] parameters)\n        {\n            Trace(ConsoleColor.Gray, format, parameters);\n        }\n\n        public bool Success { get; private set; }\n\n        public void MarkFailure(Exception exception)\n        {\n            MarkFailure(exception.ToString());\n        }\n\n        public void MarkFailure(string text, params object[] args)\n        {\n            var output = args.Any() ? text.ToFormat(args) : text;\n            ConsoleWriter.Write(ConsoleColor.Red, output);\n\n            _text.WriteLine(output);\n\n            Success = false;\n        }\n\n        public string FullTraceText()\n        {\n            return _text.ToString();\n        }\n\n        public void AddChild(params object[] child)\n        {\n            _children.AddRange(child);\n        }\n\n        public IEnumerable<T> FindChildren<T>()\n        {\n            return _children.Where(x => x is T).Cast<T>();\n        }\n\n\n        public Guid Id { get; private set; }\n\n\n        public void TrapErrors(Action action)\n        {\n            try\n            {\n                action();\n            }\n            catch (Exception e)\n            {\n                MarkFailure(e);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Packaging/IActivationDiagnostics.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.Diagnostics.Packaging\n{\n    public interface IActivationDiagnostics\n    {\n        //on logging session\n        void LogExecution(object target, Action continuation);\n        IActivationLog LogFor(object target);\n        void EachLog(Action<object, ActivationLog> action);\n        bool HasErrors();\n\n\n        PerfTimer Timer { get; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Packaging/IActivationLog.cs",
    "content": "using System;\nusing System.Collections.Generic;\n\nnamespace FubuMVC.Core.Diagnostics.Packaging\n{\n    public interface IActivationLog\n    {\n        void Trace(ConsoleColor color, string text, params object[] parameters);\n        void Trace(string text, params object[] parameters);\n\n        void MarkFailure(Exception exception);\n        void MarkFailure(string text, params object[] parameters);\n\n        string FullTraceText();\n        string Description { get; }\n        bool Success { get; }\n        void AddChild(params object[] child);\n        IEnumerable<T> FindChildren<T>();\n        void Execute(Action continuation);\n        void TrapErrors(Action action);\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Packaging/LogWriter.cs",
    "content": "using System;\n\nnamespace FubuMVC.Core.Diagnostics.Packaging\n{\n    /// <summary>\n    /// Provides static access to the 'current' IActivationLog\n    /// </summary>\n    public static class LogWriter\n    {\n        private static readonly LogWriterStatus _status = new LogWriterStatus();\n\n        public static void WithLog(IActivationLog log, Action action)\n        {\n            _status.PushLog(log);\n            try\n            {\n                log.Execute(action);\n            }\n            catch (Exception ex)\n            {\n                log.MarkFailure(ex);\n            }\n            finally\n            {\n                _status.PopLog();\n            }\n        }\n\n        public static IActivationLog Current\n        {\n            get { return _status.Current; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Packaging/LogWriterStatus.cs",
    "content": "using System.Collections.Generic;\n\nnamespace FubuMVC.Core.Diagnostics.Packaging\n{\n    /// <summary>\n    /// Manages the log stack\n    /// </summary>\n    public class LogWriterStatus\n    {\n        private readonly Stack<IActivationLog> _logs = new Stack<IActivationLog>();\n\n        public LogWriterStatus()\n        {\n            _logs.Push(new ActivationLog(new PerfTimer()));\n        }\n\n        public IActivationLog Current\n        {\n            get\n            {\n                return _logs.Peek();\n            }\n        }\n\n        public void PushLog(IActivationLog log)\n        {\n            _logs.Push(log);\n        }\n\n        public void PopLog()\n        {\n            _logs.Pop();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Packaging/LoggingSession.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Util;\n\nnamespace FubuMVC.Core.Diagnostics.Packaging\n{\n    public class LoggingSession\n    {\n        private readonly IPerfTimer _timer;\n\n        public LoggingSession(IPerfTimer timer)\n        {\n            _timer = timer;\n\n            _logs = new Cache<object, ActivationLog>(o => new ActivationLog(_timer)\n            {\n                Description = o.ToString()\n            });\n        }\n\n        public LoggingSession() : this(new PerfTimer())\n        {\n        }\n\n        private readonly Cache<object, ActivationLog> _logs;\n\n        public void LogObject(object target, string provenance)\n        {\n            _logs[target].Provenance = provenance;\n        }\n\n        public IActivationLog LogFor(object target)\n        {\n            return _logs[target];\n        }\n\n        public void LogExecution(object target, Action continuation)\n        {\n            _logs[target].Execute(continuation);\n        }\n\n        public void EachLog(Action<object, ActivationLog> action)\n        {\n            _logs.Each(action);\n        }\n\n        public bool HasErrors()\n        {\n            return _logs.GetAll().Any(x => !x.Success);\n        }\n\n        public IEnumerable<LogSubject> LogsForSubjectType<T>()\n        {\n            foreach (var pair in _logs.ToDictionary())\n            {\n                if (pair.Key.GetType().CanBeCastTo<T>())\n                {\n                    yield return new LogSubject\n                    {\n                        Subject = pair.Key,\n                        Log = pair.Value\n                    };\n                }\n            }\n        }\n    }\n\n    public class LogSubject\n    {\n        public object Subject { get; set; }\n        public ActivationLog Log { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Packaging/PackageDiagnosticsLogModel.cs",
    "content": "using FubuCore;\n\nnamespace FubuMVC.Core.Diagnostics.Packaging\n{\n    public class PackageDiagnosticsLogModel\n    {\n        public string Type { get; set; }\n        public string Description { get; set; }\n        public string Provenance { get; set; }\n        public string FullTraceText { get; set; }\n        public bool Success { get; set; }\n\n        public bool HasTraceText()\n        {\n            return FullTraceText.IsNotEmpty();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Packaging/PackageDiagnosticsModel.cs",
    "content": "using System.Collections.Generic;\n\nnamespace FubuMVC.Core.Diagnostics.Packaging\n{\n    public class PackageDiagnosticsModel\n    {\n        public PackageDiagnosticsModel()\n        {\n            logs = new List<PackageDiagnosticsLogModel>();\n        }\n\n        public IEnumerable<PackageDiagnosticsLogModel> logs { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Packaging/PackageDiagnosticsRequestModel.cs",
    "content": "namespace FubuMVC.Core.Diagnostics.Packaging\n{\n    public class PackageDiagnosticsRequestModel\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Packaging/PackageLogFubuDiagnostics.cs",
    "content": "using System.Collections.Generic;\n\nnamespace FubuMVC.Core.Diagnostics.Packaging\n{\n    public class PackageLogFubuDiagnostics\n    {\n        private readonly FubuRuntime _runtime;\n\n        public PackageLogFubuDiagnostics(FubuRuntime runtime)\n        {\n            _runtime = runtime;\n        }\n\n        [System.ComponentModel.Description(\"Application Startup\")]\n        public PackageDiagnosticsModel get_package_logs(PackageDiagnosticsRequestModel request)\n        {\n            // Might want to do some querying via json so let's flatten the logs - maybe map them?\n            var logs = new List<PackageDiagnosticsLogModel>();\n\n            // Nothing really gained here by mocking this so let's hit it directly\n            _runtime\n                .ActivationDiagnostics\n                .EachLog((target, log) => logs.Add(new PackageDiagnosticsLogModel{\n                    Type = ActivationDiagnostics.GetTypeName(target),\n                    Description = target.ToString(),\n                    Provenance = log.Provenance,\n                    FullTraceText = log.FullTraceText(),\n                    Success = log.Success\n                }));\n\n            return new PackageDiagnosticsModel{\n                logs = logs\n            };\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Packaging/PackagingDiagnosticsExtensions.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Diagnostics.Packaging\n{\n    public static class PackagingDiagnosticsExtensions\n    {\n        public static void LogExecutionOnEach<TItem>(this IActivationDiagnostics diagnostics, IEnumerable<TItem> targets, Action<TItem, IActivationLog> continuation)\n        {\n            targets.Each(currentTarget =>\n            {\n                var log = diagnostics.LogFor(currentTarget);\n                diagnostics.LogExecution(currentTarget, () => continuation(currentTarget, log));\n            });\n        }\n\n        public static void LogExecutionOnEachInParallel<TItem>(this IActivationDiagnostics diagnostics, IEnumerable<TItem> targets, Action<TItem, IActivationLog> continuation)\n        {\n            var tasks = targets.Select(currentTarget => {\n                return Task.Factory.StartNew(() => {\n                    var log = diagnostics.LogFor(currentTarget);\n                    diagnostics.LogExecution(currentTarget, () => continuation(currentTarget, log));\n                });\n            }).ToArray();\n\n            Task.WaitAll(tasks, 10.Seconds());\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Packaging/PerfTimer.cs",
    "content": "﻿using System;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing FubuCore.Util;\nusing FubuCore.Util.TextWriting;\n\nnamespace FubuMVC.Core.Diagnostics.Packaging\n{\n    public interface IPerfTimer\n    {\n        void Record(string text, Action action);\n        T Record<T>(string text, Func<T> func);\n    }\n\n    public class PerfTimer : IPerfTimer\n    {\n        public static readonly string Started = \"Started\";\n        public static readonly string Finished = \"Finished\";\n        public static readonly string Marked = \"Marked\";\n\n        private readonly Stopwatch _stopwatch = new Stopwatch();\n        private ConcurrentQueue<Checkpoint> _checkpoints = new ConcurrentQueue<Checkpoint>();\n        private string _description;\n\n        public void Start(string description)\n        {\n            _description = description;\n            \n\n            _stopwatch.Reset();\n            _checkpoints = new ConcurrentQueue<Checkpoint>();\n\n            _checkpoints.Enqueue(new Checkpoint(Started, _description, 0));\n\n            _stopwatch.Start();\n            \n        }\n\n        public void Stop()\n        {\n            \n            _stopwatch.Stop();\n            add(Finished, _description);\n        }\n\n        public long TimeEllapsedInMilliseconds()\n        {\n            return _stopwatch.ElapsedMilliseconds;\n        }\n\n        private void add(string status, string text)\n        {\n            var checkpoint = new Checkpoint(status, text, _stopwatch.ElapsedMilliseconds);\n            _checkpoints.Enqueue(checkpoint);\n        }\n\n        public void Mark(string text)\n        {\n            add(Marked, text);\n        }\n\n        public void Record(string text, Action action)\n        {\n            add(Started, text);\n            action();\n            add(Finished, text);\n        }\n\n        public T Record<T>(string text, Func<T> func)\n        {\n            add(Started, text);\n            try\n            {\n                return func();\n            }\n            finally\n            {\n                add(Finished, text);\n            }\n        }\n\n        public IEnumerable<TimedStep> TimedSteps()\n        {\n            var steps = new Cache<string, TimedStep>(text => new TimedStep {Text = text});\n            _checkpoints.Where(x => x.Status == Started).Each(x => { steps[x.Text].Start = x.Time; });\n\n            _checkpoints.Where(x => x.Status == Finished).Each(x => { steps[x.Text].Finished = x.Time; });\n\n            _checkpoints.Where(x => x.Status == Marked).Each(x => {\n                var step = steps[x.Text];\n                step.Start = step.Finished = x.Time;\n            });\n\n            return steps;\n        }\n\n        public TextReport DisplayTimings<T>(Func<TimedStep, T> sort)\n        {\n            var ordered = TimedSteps().OrderBy(sort).ToArray();\n\n            return displayTimings(ordered);\n        }\n\n        private static TextReport displayTimings(IEnumerable<TimedStep> ordered)\n        {\n            var writer = new FubuCore.Util.TextWriting.TextReport();\n            writer.StartColumns(new Column(ColumnJustification.left, 0, 3), new Column(ColumnJustification.right, 0, 3),\n                new Column(ColumnJustification.right, 0, 3), new Column(ColumnJustification.right, 0, 3));\n            writer.AddColumnData(\"Description\", \"Start\", \"Finish\", \"Duration\");\n            writer.AddDivider('-');\n\n            ordered.Each(\n                x => { writer.AddColumnData(x.Text, x.Start.ToString(), x.Finished.ToString(), x.Duration().ToString()); });\n\n            return writer;\n        }\n\n        public TextReport DisplayTimings()\n        {\n            var ordered = TimedSteps().ToList();\n            ordered.Sort();\n\n            return displayTimings(ordered);\n        }\n\n        public class Checkpoint\n        {\n            private readonly string _status;\n            private readonly string _text;\n            private readonly long _time;\n\n            public Checkpoint(string status, string text, long time)\n            {\n                _status = status;\n                _text = text;\n                _time = time;\n            }\n\n            public string Status\n            {\n                get { return _status; }\n            }\n\n            public string Text\n            {\n                get { return _text; }\n            }\n\n            public long Time\n            {\n                get { return _time; }\n            }\n        }\n    }\n\n    public class TimedStep : IComparable<TimedStep>\n    {\n        public string Text { get; set; }\n\n        public long Start { get; set; }\n\n        public long Finished { get; set; }\n\n        public long Duration()\n        {\n            return Finished - Start;\n        }\n\n        public int CompareTo(TimedStep other)\n        {\n            // reverse the ordering if finished is the same\n            if (other.Finished == Finished) return other.Start.CompareTo(Start);\n\n            return Finished.CompareTo(other.Finished);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/PerformanceFubuDiagnostics.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.Diagnostics\n{\n    public class PerformanceFubuDiagnostics\n    {\n        private readonly BehaviorGraph _graph;\n        private readonly IChainExecutionHistory _history;\n\n        public PerformanceFubuDiagnostics(BehaviorGraph graph, IChainExecutionHistory history)\n        {\n            _graph = graph;\n            _history = history;\n        }\n\n        public Dictionary<string, object>[] get_performance()\n        {\n            return _graph.Chains\n                .Where(x => x.Performance.HitCount > 0)\n                .OrderByDescending(x => x.Performance.Average)\n                .Select(chain =>\n            {\n                var dict = chain.Performance.ToDictionary();\n                dict.Add(\"title\", chain.Title());\n                dict.Add(\"hash\", chain.Key);\n\n                return dict;\n            }).ToArray();\n        }\n\n\n    }\n\n    public class PerformanceByChain\n    {\n        public int Hash { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/PollingJobFubuDiagnostics.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.ServiceBus.Polling;\n\nnamespace FubuMVC.Core.Diagnostics\n{\n    public class PollingJobFubuDiagnostics\n    {\n        private readonly IPollingJobs _jobs;\n\n        public PollingJobFubuDiagnostics(IPollingJobs jobs)\n        {\n            _jobs = jobs;\n        }\n\n        public Dictionary<string, object>[] get_pollingjobs()\n        {\n            return _jobs.Select(toDictionary).ToArray();\n        }\n\n        private Dictionary<string, object> toDictionary(IPollingJob job)\n        {\n            var dict = new Dictionary<string, object>\n            {\n                {\"chain\", job.Chain.Key},\n                {\"title\", Description.For(job).Title},\n                {\"type\", job.JobType.FullName},\n                {\"interval\", job.Interval},\n                {\"performance\", job.Chain.Performance.ToDictionary()},\n                {\"running\", job.IsRunning()},\n                {\"execution\", job.ScheduledExecution.ToString()}\n            };\n\n\n            if (job.Chain.Performance.LastExecution != null)\n            {\n                dict.Add(\"last\", job.Chain.Performance.LastExecution.ToHeaderDictionary());\n            }\n\n\n\n            return dict;\n        } \n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/RequestsFubuDiagnostics.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Core.Diagnostics\n{\n    public class RequestsFubuDiagnostics\n    {\n        private readonly IChainExecutionHistory _history;\n\n        public RequestsFubuDiagnostics(IChainExecutionHistory history)\n        {\n            _history = history;\n        }\n\n        public HttpRequestSummaryItems get_requests()\n        {\n            var logs = _history.RecentReports().Where(x => x.RootChain is RoutedChain).OrderByDescending(x => x.Time);\n            return new HttpRequestSummaryItems(logs);\n        }\n\n        public Dictionary<string, object>[] get_messages()\n        {\n            var logs = _history.RecentReports().Where(x => x.RootChain is HandlerChain)\n                .Where(x => !x.RootChain.As<HandlerChain>().IsPollingJob())\n                .OrderByDescending(x => x.Time);\n\n            return logs.Select(log =>\n            {\n                var dict = log.ToHeaderDictionary();\n\n                dict.Add(\"message\", log.RootChain.InputType().Name);\n\n                return dict;\n            }).ToArray();\n        } \n\n        public Dictionary<string, object> get_request_Id(ChainExecutionLog query)\n        {\n            var log = _history.Find(query.Id);\n\n            var dict = new Dictionary<string, object>();\n\n            if (log != null)\n            {\n                dict.Add(\"log\", log.ToDictionary());\n                if (log.RootChain != null) dict.Add(\"type\", log.RootChain.GetType().Name);\n            }\n\n            return dict;\n        }\n\n    }\n\n    public class HttpRequestSummaryItems\n    {\n        public HttpRequestSummaryItems()\n        {\n        }\n\n        public HttpRequestSummaryItems(IEnumerable<ChainExecutionLog> logs)\n        {\n            requests = logs.Select(x => new HttpRequestSummary(x)).ToArray();\n        }\n\n        public HttpRequestSummary[] requests { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Runtime/BindingHistory.cs",
    "content": "using FubuCore.Binding.InMemory;\r\nusing FubuCore.Binding.Logging;\r\nusing FubuCore.Logging;\r\n\r\nnamespace FubuMVC.Core.Diagnostics.Runtime\r\n{\r\n    public class BindingHistory : IBindingHistory\r\n    {\r\n        private readonly ILogger _logger;\r\n\r\n        public BindingHistory(ILogger logger)\r\n        {\r\n            _logger = logger;\r\n        }\r\n\r\n        public void Store(BindingReport report)\r\n        {\r\n            _logger.DebugMessage(() => new ModelBindingLog{Report = report});\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/Runtime/ModelBindingLog.cs",
    "content": "using System.ComponentModel;\r\nusing FubuCore.Binding.Logging;\r\nusing FubuCore.Logging;\r\n\r\nnamespace FubuMVC.Core.Diagnostics.Runtime\r\n{\r\n    [Description(\"Model Binding Log\")]\r\n    public class ModelBindingLog : LogRecord\r\n    {\r\n        public BindingReport Report { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/TypeExtensions.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.Specialized;\r\nusing System.Linq;\r\nusing FubuMVC.Core.Http.Headers;\r\n\r\nnamespace FubuMVC.Core.Diagnostics\r\n{\r\n    public static class TypeExtensions\r\n    {\r\n        public static Dictionary<string, object> ToDictionary(this Type type)\r\n        {\r\n            if (type == null) return null;\r\n\r\n            return new Dictionary<string, object>\r\n            {\r\n                {\"name\", type.Name},\r\n                {\"fullname\", type.FullName},\r\n                {\"qualified-name\", type.AssemblyQualifiedName},\r\n                {\"namespace\", type.Namespace},\r\n                {\"assembly\", type.Assembly.GetName().Name}\r\n            };\r\n        }\r\n\r\n        public static Dictionary<string, object> AddChild(this IDictionary<string, object> parent, string key)\r\n        {\r\n            var dict = new Dictionary<string, object>();\r\n            parent.Add(key, dict);\r\n\r\n            return dict;\r\n        }\r\n\r\n        public static void AddHeaders(this IDictionary<string, object> parent, string name, IEnumerable<Header> headers)\r\n        {\r\n            var values = headers.GroupBy(x => x.Name).Select(g => {\r\n                return new {key = g.Key, values = g.Select(x => x.Value).Join(\", \")};\r\n            }).ToArray();\r\n\r\n            parent.Add(name, values);\r\n        }\r\n\r\n        public static void AddNameValues(this IDictionary<string, object> parent, string name,\r\n            NameValueCollection values)\r\n        {\r\n\r\n            var headers = values.AllKeys.Select(key => {\r\n                return new {key = key, value = values[key]};\r\n            }).ToArray();\r\n\r\n            parent.Add(name, headers);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Diagnostics/TypeFubuDiagnostics.cs",
    "content": "using System;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.Diagnostics\n{\n    public class TypeFubuDiagnostics\n    {\n        public HtmlTag VisualizePartial(TypeInput input)\n        {\n            var type = input.Type;\n\n            var div = new HtmlTag(\"div\");\n            div.Text(type.Name);\n            div.Title(type.AssemblyQualifiedName);\n\n            return div;\n        }\n    }\n\n    public class TypeInput\n    {\n        public Type Type { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/DiagnosticsExtensions.cs",
    "content": "using System;\nusing System.IO;\nusing FubuCore;\nusing FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Core\n{\n    public static class DiagnosticsExtensions\n    {\n        /// <summary>\n        /// A static method that should be exposed, to allow you to \n        /// take an action when there has been a failure in the system.\n        /// </summary>\n        /// <param name=\"failure\">The action to perform</param>\n        public static void AssertNoFailures(this IActivationDiagnostics diagnostics, Action failure)\n        {\n            if (diagnostics.HasErrors())\n            {\n                failure();\n            }\n        }\n\n        /// <summary>\n        /// Default AssertNoFailures\n        /// </summary>\n        public static void AssertNoFailures(this IActivationDiagnostics diagnostics)\n        {\n            diagnostics.AssertNoFailures(() =>\n            {\n                var writer = new StringWriter();\n                writer.WriteLine(\"Package loading and application bootstrapping failed\");\n                writer.WriteLine();\n                diagnostics.EachLog((o, log) =>\n                {\n                    if (!log.Success)\n                    {\n                        writer.WriteLine(o.ToString());\n                        writer.WriteLine(log.FullTraceText());\n                        writer.WriteLine(\n                            \"------------------------------------------------------------------------------------------------\");\n                    }\n                });\n\n                throw new FubuException(1, writer.GetStringBuilder().ToString());\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/DiagnosticsSettings.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuCore.Binding.InMemory;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Logging;\r\nusing FubuMVC.Core.Diagnostics;\r\nusing FubuMVC.Core.Diagnostics.Instrumentation;\r\nusing FubuMVC.Core.Diagnostics.Runtime;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Security.Authorization;\r\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\r\nusing StructureMap;\r\n\r\nnamespace FubuMVC.Core\r\n{\r\n    [Title(\"Diagnostic Tracing and Authorization Configuration\")]\r\n    public class DiagnosticsSettings : DescribesItself, IFeatureSettings\r\n    {\r\n        public readonly IList<IAuthorizationPolicy> AuthorizationRights = new List<IAuthorizationPolicy>();\r\n        private TraceLevel? _traceLevel;\r\n\r\n        public DiagnosticsSettings()\r\n        {\r\n            MaxRequests = 1000;\r\n            InstrumentationServices = new InMemoryInstrumentationServices();\r\n        }\r\n\r\n        public Registry InstrumentationServices { get; set; }\r\n\r\n        public int MaxRequests { get; set; }\r\n\r\n        public TraceLevel TraceLevel\r\n        {\r\n            get { return _traceLevel ?? TraceLevel.None; }\r\n            set { _traceLevel = value; }\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.ShortDescription = \"Governs the behavior and verbosity of the runtime diagnostics\";\r\n            description.Properties[\"Tracing Level\"] = TraceLevel.ToString();\r\n            description.Properties[\"Maximum Number of Requests to Keep\"] = MaxRequests.ToString();\r\n            description.AddList(\"Authorization Rules for Diagnostics\", AuthorizationRights);\r\n        }\r\n\r\n        void IFeatureSettings.Apply(FubuRegistry registry)\r\n        {\r\n            if (registry.Mode.InDevelopment() || TraceLevel != TraceLevel.None)\r\n            {\r\n                registry.Policies.ChainSource<DiagnosticChainsSource>();\r\n                registry.Services.ReplaceService<IBindingHistory, BindingHistory>();\r\n\r\n                registry.Services.IncludeRegistry(InstrumentationServices);\r\n            }\r\n\r\n            if (registry.Mode.InDevelopment() || TraceLevel == TraceLevel.Verbose)\r\n            {\r\n                registry.Services.ReplaceService<IBindingLogger, RecordingBindingLogger>();\r\n                registry.Services.ReplaceService<IBindingHistory, BindingHistory>();\r\n                registry.Services.ForSingletonOf<IExecutionLogger>().Use<VerboseExecutionLogger>();\r\n                registry.Services.AddService<ILogListener, ChainExecutionListener>();\r\n\r\n                registry.Services.ReplaceService<IPartialFactory, DiagnosticPartialFactory>();\r\n\r\n                registry.Services.For<IEnvelopeLifecycle>().Use<EnvelopeLifecycle<VerboseDiagnosticEnvelopeContext>>();\r\n            }\r\n            else if (TraceLevel == TraceLevel.Production)\r\n            {\r\n                registry.Services.IncludeRegistry<ProductionDiagnosticsServices>();\r\n                registry.Services.For<IEnvelopeLifecycle>()\r\n                    .Use<EnvelopeLifecycle<ProductionDiagnosticEnvelopeContext>>();\r\n            }\r\n            else\r\n            {\r\n                registry.Services.ForSingletonOf<IExecutionLogger>().Use<NulloExecutionLogger>();\r\n                registry.Services.For<IEnvelopeLifecycle>().Use<EnvelopeLifecycle<EnvelopeContext>>();\r\n            }\r\n        }\r\n\r\n        public void RestrictToRole(string role)\r\n        {\r\n            AuthorizationRights.Add(new AllowRole(role));\r\n        }\r\n\r\n        public void SetIfNone(TraceLevel level)\r\n        {\r\n            if (!_traceLevel.HasValue)\r\n            {\r\n                _traceLevel = level;\r\n            }\r\n        }\r\n\r\n        public Func<IDictionary<string, object>, Task> WrapAppFunc(FubuRuntime runtime,\r\n            Func<IDictionary<string, object>, Task> inner)\r\n        {\r\n            if (TraceLevel == TraceLevel.None) return inner;\r\n\r\n            var logger = runtime.Get<IExecutionLogger>();\r\n\r\n            return env =>\r\n            {\r\n                var log = new ChainExecutionLog();\r\n                env.Log(log);\r\n\r\n                return inner(env).ContinueWith(t =>\r\n                {\r\n                    if (t.IsFaulted)\r\n                    {\r\n                        t.Exception.Flatten().InnerExceptions.Each(log.LogException);\r\n                    }\r\n\r\n                    log.MarkFinished();\r\n\r\n                    if (log.RootChain != null && ApplyTracing.ShouldApply(log.RootChain))\r\n                    {\r\n                        logger.Record(log, env);\r\n                    }\r\n                });\r\n            };\r\n        }\r\n    }\r\n\r\n    public class ProductionDiagnosticsServices : ServiceRegistry\r\n    {\r\n        public ProductionDiagnosticsServices()\r\n        {\r\n            AddService<ILogListener, ProductionModeTraceListener>();\r\n            ForSingletonOf<IExecutionLogger>().Use<ProductionExecutionLogger>();\r\n        }\r\n    }\r\n\r\n\r\n    public enum TraceLevel\r\n    {\r\n        Verbose,\r\n        Production,\r\n        None\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/DoNext.cs",
    "content": "namespace FubuMVC.Core\r\n{\r\n    /// <summary>\r\n    /// Continue or stop?\r\n    /// </summary>\r\n    public enum DoNext\r\n    {\r\n        Continue,\r\n        Stop\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Downloads/DownloadFileBehavior.cs",
    "content": "using System.Threading.Tasks;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Downloads\n{\n    public class DownloadFileBehavior : BasicBehavior\n    {\n        private readonly IFubuRequest _request;\n        private readonly IOutputWriter _writer;\n\n        public DownloadFileBehavior(IOutputWriter writer, IFubuRequest request)\n            : base(PartialBehavior.Ignored)\n        {\n            _writer = writer;\n            _request = request;\n        }\n\n        protected override Task<DoNext> performInvoke()\n        {\n            var output = _request.Get<DownloadFileModel>();\n\n            // TODO -- definitely switch to async writing\n            _writer.WriteFile(output.ContentType, output.LocalFileName, output.FileNameToDisplay);\n\n            return Task.FromResult(DoNext.Continue);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Downloads/DownloadFileConvention.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.Downloads\n{\n    public class DownloadFileConvention : IConfigurationAction\n    {\n        public void Configure(BehaviorGraph graph)\n        {\n            graph.Routes.Resources.Where(x => TypeExtensions.CanBeCastTo<DownloadFileModel>(x.ResourceType()))\n                .Each(x => x.AddToEnd(new DownloadFileNode()));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Downloads/DownloadFileModel.cs",
    "content": "﻿namespace FubuMVC.Core.Downloads\n{\n    public class DownloadFileModel\n    {\n        public string ContentType { get; set; }\n        public string LocalFileName { get; set; }\n        public string FileNameToDisplay { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Downloads/DownloadFileNode.cs",
    "content": "using FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Downloads\n{\n    public class DownloadFileNode : Process\n    {\n        public DownloadFileNode() : base(typeof(DownloadFileBehavior))\n        {\n        }\n\n        public override BehaviorCategory Category\n        {\n            get { return BehaviorCategory.Output; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Environment/CanWriteToFolder.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Core.Environment\n{\n    public class CanWriteToFolder : IEnvironmentRequirement\n    {\n        private readonly string _folder;\n\n        public CanWriteToFolder(string folder)\n        {\n            _folder = folder;\n        }\n\n        public string DescriptionMessage = \"Can write to folder '{0}'\";\n        public string FailureMessage = \"Could not write to folder '{0}'\";\n        public string SuccessMessage = \"Was able to write to folder '{0}'\";\n\n        public string TracerFile = Guid.NewGuid() + \".txt\";\n\n        public string Describe()\n        {\n            return DescriptionMessage.ToFormat(_folder);\n        }\n\n        public void Check(IActivationLog log)\n        {\n            var file = _folder.AppendPath(TracerFile);\n            try\n            {\n                var system = new FileSystem();\n                system.WriteStringToFile(file, \"just a test of whether or not a process can write to a folder\");\n                system.DeleteFile(file);\n\n                log.Trace(SuccessMessage.ToFormat(_folder));\n            }\n            catch (Exception)\n            {\n                log.MarkFailure(FailureMessage.ToFormat(_folder));\n            }\n        }\n    }\n\n    public class CanWriteToFolder<TSettings> : CanWriteToFolder\n    {\n        public CanWriteToFolder(TSettings settings, Expression<Func<TSettings, object>> property)\n            : base((string)ReflectionHelper.GetAccessor(property).GetValue(settings))\n        {\n            var propertyName = \"{0}.{1}\".ToFormat(typeof(TSettings).Name, ReflectionHelper.GetAccessor(property).Name);\n\n            DescriptionMessage += \" defined by \" + propertyName;\n            SuccessMessage += \" defined by \" + propertyName;\n            FailureMessage += \" defined by \" + propertyName;\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Environment/FileExists.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Core.Environment\n{\n    public class FileExists : IEnvironmentRequirement\n    {\n        private readonly string _file;\n\n        public FileExists(string file)\n        {\n            _file = file;\n        }\n\n        public string DescriptionMessage = \"File '{0}' must exist\";\n        public string FailureMessage = \"File '{0}' does not exist!\";\n        public string SuccessMessage = \"File '{0}' exists\";\n\n\n        public string Describe()\n        {\n            return \"File '{0}' must exist\".ToFormat(_file);\n        }\n\n        public void Check(IActivationLog log)\n        {\n            if (File.Exists(_file))\n            {\n                log.Trace(SuccessMessage, _file);\n            }\n            else\n            {\n                log.MarkFailure(FailureMessage, _file);\n            }\n        }\n    }\n\n    public class FileExists<TSettings> : FileExists\n    {\n        public FileExists(Expression<Func<TSettings, object>> property, TSettings settings)\n            : base((string) ReflectionHelper.GetAccessor(property).GetValue(settings))\n        {\n            var accessor = ReflectionHelper.GetAccessor(property);\n\n            string propertyName = \"{0}.{1}\".ToFormat(typeof (TSettings).Name, accessor.Name);\n\n\n            DescriptionMessage = \"File '{0}' defined by {1} must exist\".Replace(\"{1}\", propertyName);\n            SuccessMessage = \"File '{0}' defined by {1} exists'\".Replace(\"{1}\", propertyName);\n            FailureMessage = \"File '{0}' defined by {1} does not exist!\".Replace(\"{1}\", propertyName);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Environment/FolderExists.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Core.Environment\n{\n    public class FolderExists : IEnvironmentRequirement\n    {\n        private readonly string _folder;\n\n        public FolderExists(string folder)\n        {\n            _folder = folder;\n        }\n\n        public string DescriptionMessage = \"Folder '{0}' should exist\";\n        public string FailureMessage = \"Folder '{0}' does not exist!\";\n        public string SuccessMessage = \"Folder '{0}' exists\";\n\n\n        public string Describe()\n        {\n            return DescriptionMessage;\n        }\n\n        public void Check(IActivationLog log)\n        {\n            if (Directory.Exists(_folder))\n            {\n                log.Trace(SuccessMessage, _folder);\n            }\n            else\n            {\n                log.MarkFailure(FailureMessage, _folder);\n            }\n        }\n    }\n\n    public class FolderExists<TSettings> : FolderExists\n    {\n        public FolderExists(Expression<Func<TSettings, object>> property, TSettings settings)\n            : base((string)ReflectionHelper.GetAccessor(property).GetValue(settings))\n        {\n            var accessor = ReflectionHelper.GetAccessor(property);\n\n            string propertyName = \"{0}.{1}\".ToFormat(typeof(TSettings).Name, accessor.Name);\n\n            DescriptionMessage = \"Folder '{0}' defined by {1} must exist\".Replace(\"{1}\", propertyName);\n            SuccessMessage = \"Folder '{0}' defined by {1} exists\".Replace(\"{1}\", propertyName);\n            FailureMessage = \"Folder '{0}' defined by {1} does not exist!\".Replace(\"{1}\", propertyName);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Environment/IEnvironmentRequirement.cs",
    "content": "﻿using FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Core.Environment\n{\n    public interface IEnvironmentRequirement\n    {\n        string Describe();\n        void Check(IActivationLog log);\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Environment/IEnvironmentRequirements.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace FubuMVC.Core.Environment\n{\n    public interface IEnvironmentRequirements\n    {\n        IEnumerable<IEnvironmentRequirement> Requirements();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/FubuMVC.Core.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>9.0.30729</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{E18FD922-0E7A-49CD-B89F-473826077B9D}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>FubuMVC.Core</RootNamespace>\r\n    <AssemblyName>FubuMVC.Core</AssemblyName>\r\n    <FileAlignment>512</FileAlignment>\r\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r\n    <TargetFrameworkProfile />\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>\r\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\r\n    <Prefer32Bit>false</Prefer32Bit>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\r\n    <Prefer32Bit>false</Prefer32Bit>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Runtime.Serialization\" />\r\n    <Reference Include=\"System.Security\" />\r\n    <Reference Include=\"System.Web\" />\r\n    <Reference Include=\"System.Web.Abstractions\" />\r\n    <Reference Include=\"System.Web.Extensions\" />\r\n    <Reference Include=\"System.Web.Routing\" />\r\n    <Reference Include=\"System.Xml\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"..\\CommonAssemblyInfo.cs\">\r\n      <Link>Properties\\CommonAssemblyInfo.cs</Link>\r\n    </Compile>\r\n    <Compile Include=\"AjaxExtensions.cs\" />\r\n    <Compile Include=\"Ajax\\AjaxContinuationWriter.cs\" />\r\n    <Compile Include=\"Ajax\\AjaxError.cs\" />\r\n    <Compile Include=\"Attributes\\CompressContentAttribute.cs\" />\r\n    <Compile Include=\"Attributes\\ViewSubjectAttribute.cs\" />\r\n    <Compile Include=\"BehaviorChainExtensions.cs\" />\r\n    <Compile Include=\"Behaviors\\ActionInvoker.cs\" />\r\n    <Compile Include=\"Behaviors\\PartialBehavior.cs\" />\r\n    <Compile Include=\"DeactivatorExecuted.cs\" />\r\n    <Compile Include=\"DiagnosticsExtensions.cs\" />\r\n    <Compile Include=\"Diagnostics\\ClientSideViewWriter.cs\" />\r\n    <Compile Include=\"Diagnostics\\DescriptionExtensions.cs\" />\r\n    <Compile Include=\"Diagnostics\\HttpRequestSummary.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\Activity.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\BehaviorTracer.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\BehaviorTracerNode.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\ChainExecutionHistory.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\ChainExecutionLog.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\IChainExecutionHistory.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\IChainExecutionLog.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\IExecutionLogger.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\IExecutionLogStorage.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\InMemoryExecutionLogStorage.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\InMemoryInstrumentationServices.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\IPerformanceHistoryQueue.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\IRequestLog.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\ISubject.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\NulloExecutionLogger.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\PerformanceHistory.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\PerformanceHistoryQueue.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\ProductionExecutionLogger.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\RequestStep.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\ChainExecutionListener.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\Trace.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\VerboseExecutionLogger.cs\" />\r\n    <Compile Include=\"Diagnostics\\PerformanceFubuDiagnostics.cs\" />\r\n    <Compile Include=\"Diagnostics\\PollingJobFubuDiagnostics.cs\" />\r\n    <Compile Include=\"Downloads\\DownloadFileModel.cs\" />\r\n    <Compile Include=\"Downloads\\DownloadFileBehavior.cs\" />\r\n    <Compile Include=\"Downloads\\DownloadFileConvention.cs\" />\r\n    <Compile Include=\"Downloads\\DownloadFileNode.cs\" />\r\n    <Compile Include=\"FubuModeExtensions.cs\" />\r\n    <Compile Include=\"Http\\Compression\\ApplyCompression.cs\" />\r\n    <Compile Include=\"Http\\Hosting\\IHost.cs\" />\r\n    <Compile Include=\"Http\\Hosting\\Katana.cs\" />\r\n    <Compile Include=\"Http\\Hosting\\HostingFailedException.cs\" />\r\n    <Compile Include=\"Http\\Hosting\\Nowin.cs\" />\r\n    <Compile Include=\"Http\\Hosting\\ReflectionExtensions.cs\" />\r\n    <Compile Include=\"Localization\\Basic\\AssemblyScanner.cs\" />\r\n    <Compile Include=\"Localization\\Basic\\ILocalizationCache.cs\" />\r\n    <Compile Include=\"Localization\\Basic\\ILocalizationProviderFactory.cs\" />\r\n    <Compile Include=\"Localization\\Basic\\ILocalizationStorage.cs\" />\r\n    <Compile Include=\"Localization\\Basic\\InMemoryLocalizationStorage.cs\" />\r\n    <Compile Include=\"Localization\\Basic\\LocalizationCache.cs\" />\r\n    <Compile Include=\"Localization\\Basic\\LocalizationMissingHandler.cs\" />\r\n    <Compile Include=\"Localization\\Basic\\LocalizationProvider.cs\" />\r\n    <Compile Include=\"Localization\\Basic\\LocalizationProviderFactory.cs\" />\r\n    <Compile Include=\"Localization\\Basic\\XmlDirectoryLocalizationStorage.cs\" />\r\n    <Compile Include=\"Localization\\CurrentCultureContext.cs\" />\r\n    <Compile Include=\"Localization\\HeaderTextAttribute.cs\" />\r\n    <Compile Include=\"Localization\\ICurrentCultureContext.cs\" />\r\n    <Compile Include=\"Localization\\ILocaleCache.cs\" />\r\n    <Compile Include=\"Localization\\ILocaleCacheContext.cs\" />\r\n    <Compile Include=\"Localization\\ILocalizationDataProvider.cs\" />\r\n    <Compile Include=\"Localization\\ILocalizationMissingHandler.cs\" />\r\n    <Compile Include=\"Localization\\IStringTokenWithParams.cs\" />\r\n    <Compile Include=\"Localization\\LocalizationExtensions.cs\" />\r\n    <Compile Include=\"Localization\\LocalizationKey.cs\" />\r\n    <Compile Include=\"Localization\\LocalizationManager.cs\" />\r\n    <Compile Include=\"Localization\\LocalString.cs\" />\r\n    <Compile Include=\"Localization\\NulloLocalizationDataProvider.cs\" />\r\n    <Compile Include=\"Localization\\PropertyToken.cs\" />\r\n    <Compile Include=\"Localization\\StringToken.cs\" />\r\n    <Compile Include=\"Localization\\StringToken`1.cs\" />\r\n    <Compile Include=\"Localization\\StringToken`2.cs\" />\r\n    <Compile Include=\"Localization\\ThreadSafeLocaleCache.cs\" />\r\n    <Compile Include=\"Navigation\\AddAfter.cs\" />\r\n    <Compile Include=\"Navigation\\AddBefore.cs\" />\r\n    <Compile Include=\"Navigation\\AddChild.cs\" />\r\n    <Compile Include=\"Navigation\\AuthorizedContextualMenu.cs\" />\r\n    <Compile Include=\"Navigation\\ByName.cs\" />\r\n    <Compile Include=\"Navigation\\IContextualAction.cs\" />\r\n    <Compile Include=\"Navigation\\IContextualMenu.cs\" />\r\n    <Compile Include=\"Navigation\\IMenuPlacementStrategy.cs\" />\r\n    <Compile Include=\"Navigation\\IMenuRegistration.cs\" />\r\n    <Compile Include=\"Navigation\\IMenuStateService.cs\" />\r\n    <Compile Include=\"Navigation\\INavigationService.cs\" />\r\n    <Compile Include=\"Navigation\\IStringTokenMatcher.cs\" />\r\n    <Compile Include=\"Navigation\\Literal.cs\" />\r\n    <Compile Include=\"Navigation\\MenuChain.cs\" />\r\n    <Compile Include=\"Navigation\\MenuItemAttribute.cs\" />\r\n    <Compile Include=\"Navigation\\MenuItemAttributeConfigurator.cs\" />\r\n    <Compile Include=\"Navigation\\MenuItemState.cs\" />\r\n    <Compile Include=\"Navigation\\MenuItemToken.cs\" />\r\n    <Compile Include=\"Navigation\\MenuNode.cs\" />\r\n    <Compile Include=\"Navigation\\MenuNodeType.cs\" />\r\n    <Compile Include=\"Navigation\\MenuRegistration.cs\" />\r\n    <Compile Include=\"Navigation\\MenuStateService.cs\" />\r\n    <Compile Include=\"Navigation\\NavigationGraph.cs\" />\r\n    <Compile Include=\"Navigation\\NavigationKey.cs\" />\r\n    <Compile Include=\"Navigation\\NavigationRegistry.cs\" />\r\n    <Compile Include=\"Navigation\\NavigationRegistryExtension.cs\" />\r\n    <Compile Include=\"Navigation\\NavigationService.cs\" />\r\n    <Compile Include=\"Navigation\\NavigationServiceRegistry.cs\" />\r\n    <Compile Include=\"Registration\\ActionlessViewChainSource.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\OutputPartialBehavior.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\ReaderChoice.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\ViewAttachment.cs\" />\r\n    <Compile Include=\"Runtime\\DiagnosticPartialFactory.cs\" />\r\n    <Compile Include=\"Runtime\\Files\\ChangeSet.cs\" />\r\n    <Compile Include=\"Runtime\\Files\\FileChangeWatcher.cs\" />\r\n    <Compile Include=\"Runtime\\Files\\IChangeSetHandler.cs\" />\r\n    <Compile Include=\"Runtime\\Files\\TrackedSet.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\DefaultLoginRequestWriter.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\AudienceRestriction.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\AuthenticationStatement.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\BasicSamlResponseHandler.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Certificates\\BasicSamlCertificateRepository.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Certificates\\CertificateLoader.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Certificates\\CertificateService.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Certificates\\ICertificate.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Certificates\\ICertificateLoader.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Certificates\\ICertificateService.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Certificates\\InMemoryCertificate.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Certificates\\InMemoryCertificateLoader.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Certificates\\ISamlCertificateRepository.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Certificates\\SamlCertificate.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Certificates\\X509CertificateWrapper.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\ConditionGroup.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Encryption\\AssertionXmlDecryptor.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Encryption\\AssertionXmlEncryptor.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Encryption\\IAssertionXmlDecryptor.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Encryption\\IAssertionXmlEncryptor.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Encryption\\ISamlResponseXmlSigner.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Encryption\\SamlResponseReader.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Encryption\\SamlResponseWriter.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Encryption\\SamlResponseXmlSigner.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\EnvironmentTestExtensions.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\ICondition.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\ISamlDirector.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\ISamlResponseHandler.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\ISamlResponseRedirector.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\NameFormat.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Saml2ServicesRegistry.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Saml2VerificationActivator.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlAuthenticationStrategy.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlDirector.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlError.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlName.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlNameType.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlResponse.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlResponseRedirectionDocument.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlResponseRedirector.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlResponseSettings.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlStatus.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SignatureStatus.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Subject.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SubjectConfirmation.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SubjectConfirmationData.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\UriEnum.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Validation\\AudienceValidationRule.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Validation\\CertificateValidation.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Validation\\ConditionTimeFrame.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Validation\\ISamlValidationRule.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Validation\\SamlValidationKeys.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Validation\\SignatureIsRequired.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Xml\\ReadsSamlXml.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Xml\\SamlBasicExtensions.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Xml\\SamlResponseXmlReader.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Xml\\SamlResponseXmlWriter.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Xml\\XmlElementStack.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Windows\\ApplyWindowsAuthentication.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Windows\\AspNetWindowsAuthenticationContext.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Windows\\DefaultWindowsPrincipalHandler.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Windows\\IWindowsAuthentication.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Windows\\IWindowsAuthenticationContext.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Windows\\IWindowsPrincipalHandler.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Windows\\SuccessfulWindowsAuthentication.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Windows\\WindowsActionSource.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Windows\\WindowsAuthentication.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Windows\\WindowsAuthenticationServiceRegistry.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Windows\\WindowsController.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Windows\\WindowsSignInRequest.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\MustBeAuthenticated.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\RequireRole.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\AspNetShutDownDetector.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\Channel.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\ChannelWriter.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\DefaultEventQueueFactory.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\EventPublisher.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\EventQueue.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\EventQueueFactory.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\IChannel.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\IChannelInitializer.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\IEventPublisher.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\IEventQueue.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\IEventQueueFactory.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\IServerEvent.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\IServerEventWriter.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\ITopicChannelCache.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\NulloShutdownDetector.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\ServerEvent.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\ServerEventList.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\ServerEventWriter.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\ServerSentEventRegistry.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\TopicChainSource.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\ServerSentEventsSettings.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\SseTopicChain.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\Topic.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\TopicChannel.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\TopicChannelCache.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\TopicFamily.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\ByTaskScheduleMaker.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\ByThreadScheduleMaker.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\ChannelGraph.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\ChannelNode.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\FubuTransportRegistry.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\HandlerChain.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\HandlerChainPolicy.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\HandlerGraph.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\HandlerGraphSource.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\HealthMonitoringExpression.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\ISettingsAware.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\SchedulerMaker.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\UriExtensions.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\IMessagingSession.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\MessageLog.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\MessageHistoryTableTag.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\MessageRecord.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\MessageRecordListener.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\MessageRecordNode.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\MessagingSession.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\Visualization\\ChannelGraphFubuDiagnostics.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\Visualization\\ChannelsTableTag.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\Visualization\\ChildDescriptionTag.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\Visualization\\DescriptionBodyTag.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\Visualization\\DescriptionPropertyTag.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\Visualization\\FubuDiagnosticsConfiguration.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\Visualization\\HtmlTagExtensions.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\Visualization\\MessagesFubuDiagnostics.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\Visualization\\ScheduledJobsFubuDiagnostics.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\Visualization\\SerializersTag.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\Visualization\\SubscriptionsFubuDiagnostics.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\Visualization\\SubscriptionsTableTag.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\Visualization\\TasksFubuDiagnostics.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\Visualization\\TransportsTag.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\Always.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\DelayedRetryContinuation.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\ErrorHandler.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\ErrorReport.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\ExceptionHandlerBehavior.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\ExceptionHandlerNode.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\ExceptionMatch.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\ExceptionMatchExpression.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\ExceptionTypeMatch.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\IErrorHandler.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\IExceptionMatch.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\MoveToErrorQueue.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\MoveToErrorQueueHandler.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\RequeueContinuation.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\RespondWithMessageContinuation.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\RespondWithMessageHandler.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\RetryNowContinuation.cs\" />\r\n    <Compile Include=\"ServiceBus\\EventAggregator.cs\" />\r\n    <Compile Include=\"ServiceBus\\Events\\ExpiringListenerCleanup.cs\" />\r\n    <Compile Include=\"ServiceBus\\Events\\ExpiringListenerExtensions.cs\" />\r\n    <Compile Include=\"ServiceBus\\Events\\IEventAggregator.cs\" />\r\n    <Compile Include=\"ServiceBus\\Events\\IExpiringListener.cs\" />\r\n    <Compile Include=\"ServiceBus\\Events\\IListener.cs\" />\r\n    <Compile Include=\"ServiceBus\\Events\\SynchronousEventAggregator.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\IPersistentTaskController.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\IPersistentTasks.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\TaskAssignmentStatus.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\TaskDeactivationResponse.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\EnvelopeLifecycle.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\IEnvelopeContext.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\IEnvelopeLifecycle.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\ProductionDiagnosticEnvelopeContext.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\VerboseDiagnosticEnvelopeContext.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Serializers\\JsonMessageSerializer.cs\" />\r\n    <Compile Include=\"ServiceBus\\ServiceBusActivator.cs\" />\r\n    <Compile Include=\"ServiceBus\\FubuTransportServiceRegistry.cs\" />\r\n    <Compile Include=\"ServiceBus\\IFubuTransportActivator.cs\" />\r\n    <Compile Include=\"ServiceBus\\SystemLevelHandlers.cs\" />\r\n    <Compile Include=\"ServiceBus\\InMemory\\InMemoryChannel.cs\" />\r\n    <Compile Include=\"ServiceBus\\InMemory\\InMemoryQueue.cs\" />\r\n    <Compile Include=\"ServiceBus\\InMemory\\InMemoryQueueManager.cs\" />\r\n    <Compile Include=\"ServiceBus\\InMemory\\InMemorySagaRepository.cs\" />\r\n    <Compile Include=\"ServiceBus\\InMemory\\InMemorySagaStorage.cs\" />\r\n    <Compile Include=\"ServiceBus\\InMemory\\InMemoryTransport.cs\" />\r\n    <Compile Include=\"ServiceBus\\InMemory\\ISagaStateCache.cs\" />\r\n    <Compile Include=\"ServiceBus\\InMemory\\SagaStateCache.cs\" />\r\n    <Compile Include=\"ServiceBus\\IServiceBus.cs\" />\r\n    <Compile Include=\"ServiceBus\\Logging\\ChainExecutionFinished.cs\" />\r\n    <Compile Include=\"ServiceBus\\Logging\\ChainExecutionStarted.cs\" />\r\n    <Compile Include=\"ServiceBus\\Logging\\EnvelopeContinuationChosen.cs\" />\r\n    <Compile Include=\"ServiceBus\\Logging\\EnvelopeReceived.cs\" />\r\n    <Compile Include=\"ServiceBus\\Logging\\EnvelopeSent.cs\" />\r\n    <Compile Include=\"ServiceBus\\Logging\\EventAggregationListener.cs\" />\r\n    <Compile Include=\"ServiceBus\\Logging\\MessageFailed.cs\" />\r\n    <Compile Include=\"ServiceBus\\Logging\\MessageLogRecord.cs\" />\r\n    <Compile Include=\"ServiceBus\\Logging\\MessageSuccessful.cs\" />\r\n    <Compile Include=\"ServiceBus\\Logging\\NoHandlerForMessage.cs\" />\r\n    <Compile Include=\"ServiceBus\\Logging\\ReceiveFailed.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\HealthMonitoringSettings.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\HealthMonitorPollingJob.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\HealthStatus.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\IPersistentTask.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\IPersistentTaskSource.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\ITaskMonitoringSource.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\ITaskRouter.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\ITransportPeer.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\LogMessages.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\MonitoringControlHandler.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\MonitoringServiceRegistry.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\OrderedAssignment.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\OwnershipStatus.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\PersistentTaskAgent.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\PersistentTaskController.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\PersistentTaskMessageModifier.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\PersistentTaskStatus.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\TakeOwnershipRequest.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\TakeOwnershipResponse.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\TaskDeactivation.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\TaskHealthAssignmentPlanner.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\TaskHealthRequest.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\TaskHealthResponse.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\TaskMonitoringSource.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\TaskOwner.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\TransportPeer.cs\" />\r\n    <Compile Include=\"ServiceBus\\NotHandlerAttribute.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\DefaultTimer.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\IJob.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\IPollingJob.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\IPollingJobLogger.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\IPollingJobs.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\ITimer.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\JobRequest.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\JobRunner.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingJob.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingJobActivator.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingJobDeactivator.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingJobChain.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingJobExpression.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingJobFailed.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingJobLogger.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingJobs.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingJobSettings.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingJobStarted.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingJobStopped.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingJobSuccess.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingServicesRegistry.cs\" />\r\n    <Compile Include=\"ServiceBus\\ReceiveFailureException.cs\" />\r\n    <Compile Include=\"ServiceBus\\RecordingServiceBus.cs\" />\r\n    <Compile Include=\"ServiceBus\\Registration\\DefaultHandlerSource.cs\" />\r\n    <Compile Include=\"ServiceBus\\Registration\\ExplicitTypeHandlerSource.cs\" />\r\n    <Compile Include=\"ServiceBus\\Registration\\FuncBuilder.cs\" />\r\n    <Compile Include=\"ServiceBus\\Registration\\HandlerSource.cs\" />\r\n    <Compile Include=\"ServiceBus\\Registration\\IHandlerSource.cs\" />\r\n    <Compile Include=\"ServiceBus\\Registration\\Nodes\\HandlerCall.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Acknowledgement.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Cascading\\DelayedResponse.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Cascading\\IImmediateContinuation.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Cascading\\IOutgoingSender.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Cascading\\ISendMyself.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Cascading\\OutgoingSender.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Cascading\\Respond.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Cascading\\RespondToSender.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Cascading\\SendDirectlyTo.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Delayed\\DelayedEnvelopeAddedBackToQueue.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Delayed\\DelayedEnvelopeProcessor.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Delayed\\DelayedEnvelopeReceived.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Delayed\\DelayedMessageCache.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Envelope.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\EnvelopeModifier.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\EnvelopeSender.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\EnvelopeToken.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\FailureAcknowledgement.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Headers\\DictionaryHeaders.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Headers\\IHeaders.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Headers\\NameValueHeaders.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\HeaderWrapper.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\IChannel.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\IEnvelopeModifier.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\IEnvelopeSender.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\Batching\\BatchConsumer.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\Batching\\BatchMessage.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\Batching\\IBatchMessage.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\ChainExecutionEnvelopeHandler.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\ChainExecutionWatcher.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\ChainFailureContinuation.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\ChainInvoker.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\ChainSuccessContinuation.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\CompositeContinuation.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\EnvelopeContext.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\DelayedEnvelopeHandler.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\DeserializationFailureContinuation.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\HandlerPipeline.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\IChainInvoker.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\IContinuation.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\IEnvelopeHandler.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\IHandlerPipeline.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\IInvocationContext.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\IMessageCallback.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\IMessageExecutor.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\InvocationContext.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\MessageExecutor.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\NoHandlerException.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\NoSubscriberHandler.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\ResponseEnvelopeHandler.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\SimpleEnvelopeHandler.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\IReceiver.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\ITransport.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Receiver.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\ReplyListener.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Routing\\AssemblyRule.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Routing\\IRoutingRule.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Routing\\LambdaRoutingRule.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Routing\\NamespaceRule.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Routing\\SingleTypeRoutingRule.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Serializers\\BasicJsonMessageSerializer.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Serializers\\BinarySerializer.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Serializers\\EnvelopeDeserializationException.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Serializers\\EnvelopeSerializer.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Serializers\\IMessageSerializer.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Serializers\\XmlMessageSerializer.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\TransportActivator.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\TransportBase.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\UnknownChannelException.cs\" />\r\n    <Compile Include=\"ServiceBus\\Sagas\\ISagaRepository.cs\" />\r\n    <Compile Include=\"ServiceBus\\Sagas\\ISagaStorage.cs\" />\r\n    <Compile Include=\"ServiceBus\\Sagas\\IStatefulSaga.cs\" />\r\n    <Compile Include=\"ServiceBus\\Sagas\\SagaBehavior.cs\" />\r\n    <Compile Include=\"ServiceBus\\Sagas\\SagaRepositoryUnresolvableException.cs\" />\r\n    <Compile Include=\"ServiceBus\\Sagas\\SagaTypes.cs\" />\r\n    <Compile Include=\"ServiceBus\\Sagas\\StatefulSagaConvention.cs\" />\r\n    <Compile Include=\"ServiceBus\\Sagas\\StatefulSagaNode.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Configuration\\ApplyScheduledJobRouting.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Configuration\\ScheduledJobExpression.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Configuration\\ScheduledJobHandlerCall.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Configuration\\ScheduledJobHandlerSource.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Configuration\\ScheduledJobRoutingRule.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Configuration\\ScheduledJobServicesRegistry.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Execution\\EveryDayAtSpecificTime.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Execution\\ExecuteScheduledJob.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Execution\\IJobExecutor.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Execution\\IScheduledJobController.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Execution\\IScheduleRule.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Execution\\JobTimer.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Execution\\ScheduledJobController.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Execution\\ScheduledJobLogRecords.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Execution\\ScheduledJobRecordModifier.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Execution\\ScheduledJobRunner.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\IScheduledJob.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\JobKeyAttribute.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Messages\\SchedulingHandler.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Persistence\\InMemorySchedulePersistence.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Persistence\\ISchedulePersistence.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Persistence\\IScheduleStatusMonitor.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Persistence\\JobExecutionRecord.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Persistence\\JobExecutionStatus.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Persistence\\JobSchedule.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Persistence\\JobStatus.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Persistence\\JobStatusDTO.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Persistence\\JobStatusExtensions.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Persistence\\ScheduledRunHistory.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\Persistence\\ScheduleStatusMonitor.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\RescheduleRequest.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\ScheduledJob.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\ScheduledJobGraph.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\ScheduledJobPersistentTask.cs\" />\r\n    <Compile Include=\"ServiceBus\\Scheduling\\IScheduler.cs\" />\r\n    <Compile Include=\"ServiceBus\\Scheduling\\TaskScheduler.cs\" />\r\n    <Compile Include=\"ServiceBus\\Scheduling\\ThreadScheduler.cs\" />\r\n    <Compile Include=\"ServiceBus\\ServiceBus.cs\" />\r\n    <Compile Include=\"ServiceBus\\StringExtensions.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\GroupSubscriptionRequirement.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\InMemorySubscriptionPersistence.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\InvalidOrMissingTransportException.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\ISubscriptionCache.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\ISubscriptionPersistence.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\ISubscriptionRepository.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\ISubscriptionRequirement.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\LocalSubscriptionRequirement.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\Subscription.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\SubscriptionActivator.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\SubscriptionCache.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\SubscriptionRefreshJob.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\SubscriptionRepository.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\SubscriptionRequested.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\SubscriptionRequirements.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\SubscriptionRole.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\SubscriptionsChanged.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\SubscriptionsHandler.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\SubscriptionsRemoved.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\TransportNode.cs\" />\r\n    <Compile Include=\"ServiceBus\\TaskExtensions.cs\" />\r\n    <Compile Include=\"ServiceBus\\TestSupport\\ClearAllTransports.cs\" />\r\n    <Compile Include=\"ServiceBus\\TestSupport\\TransportCleanup.cs\" />\r\n    <Compile Include=\"ServiceBus\\TestSupport\\TransportCleanupActivator.cs\" />\r\n    <Compile Include=\"ServiceBus\\TimeoutRunner.cs\" />\r\n    <Compile Include=\"ServiceBus\\TransportSettings.cs\" />\r\n    <Compile Include=\"ServiceBus\\TypeExtensions.cs\" />\r\n    <Compile Include=\"ServiceBus\\Web\\ISendMessages.cs\" />\r\n    <Compile Include=\"ServiceBus\\Web\\SendMessageBehavior.cs\" />\r\n    <Compile Include=\"ServiceBus\\Web\\SendsMessage.cs\" />\r\n    <Compile Include=\"ServiceBus\\Web\\SendsMessageActionSource.cs\" />\r\n    <Compile Include=\"ServiceBus\\Web\\SendsMessageConvention.cs\" />\r\n    <Compile Include=\"Registration\\AssemblyFinder.cs\" />\r\n    <Compile Include=\"Assets\\Asset.cs\" />\r\n    <Compile Include=\"Assets\\AssetFinderCache.cs\" />\r\n    <Compile Include=\"Assets\\AssetGraph.cs\" />\r\n    <Compile Include=\"Assets\\AssetSettings.cs\" />\r\n    <Compile Include=\"Assets\\AssetTagBuilder.cs\" />\r\n    <Compile Include=\"Assets\\AssetFilePageExtensions.cs\" />\r\n    <Compile Include=\"Assets\\DevelopmentModeAssetTagBuilder.cs\" />\r\n    <Compile Include=\"Assets\\IAssetTagBuilder.cs\" />\r\n    <Compile Include=\"Assets\\JavascriptRouting\\IJavascriptRouter.cs\" />\r\n    <Compile Include=\"Assets\\JavascriptRouting\\JavascriptRoute.cs\" />\r\n    <Compile Include=\"Assets\\JavascriptRouting\\JavascriptRouter.cs\" />\r\n    <Compile Include=\"Assets\\JavascriptRouting\\JavascriptRouteWriter.cs\" />\r\n    <Compile Include=\"Assets\\MissingAssetException.cs\" />\r\n    <Compile Include=\"Assets\\ObsoleteAssetFilePageExtensions.cs\" />\r\n    <Compile Include=\"Assets\\ScriptTag.cs\" />\r\n    <Compile Include=\"Assets\\StylesheetLinkTag.cs\" />\r\n    <Compile Include=\"ClientMessage.cs\" />\r\n    <Compile Include=\"Registration\\BehaviorGraphBuilder.cs\" />\r\n    <Compile Include=\"Attributes\\CanBeMultiplesAttribute.cs\" />\r\n    <Compile Include=\"Behaviors\\WrappingBehavior.cs\" />\r\n    <Compile Include=\"Registration\\ConfigGraph.cs\" />\r\n    <Compile Include=\"Registration\\ConfigurationActionSet.cs\" />\r\n    <Compile Include=\"Localization\\BasicLocalizationServices.cs\" />\r\n    <Compile Include=\"Localization\\HtmlTagExtensions.cs\" />\r\n    <Compile Include=\"Localization\\LocalizationSettings.cs\" />\r\n    <Compile Include=\"Localization\\PackageAwareXmlLocalizationStorage.cs\" />\r\n    <Compile Include=\"Localization\\SpinUpLocalizationCaches.cs\" />\r\n    <Compile Include=\"Registration\\DSL\\Feature.cs\" />\r\n    <Compile Include=\"Registration\\DSL\\FeatureExpression.cs\" />\r\n    <Compile Include=\"Continuations\\ContinuationProcessor.cs\" />\r\n    <Compile Include=\"Continuations\\IContinuationProcessor.cs\" />\r\n    <Compile Include=\"DiagnosticsSettings.cs\" />\r\n    <Compile Include=\"Diagnostics\\AboutFubuDiagnostics.cs\" />\r\n    <Compile Include=\"Diagnostics\\AppDomainFubuDiagnostics.cs\" />\r\n    <Compile Include=\"Diagnostics\\AppReloaded.cs\" />\r\n    <Compile Include=\"Diagnostics\\AssetFubuDiagnostics.cs\" />\r\n    <Compile Include=\"Diagnostics\\Assets\\DiagnosticAssetsCache.cs\" />\r\n    <Compile Include=\"Diagnostics\\Assets\\EmbeddedFile.cs\" />\r\n    <Compile Include=\"Diagnostics\\AutoReloadingTag.cs\" />\r\n    <Compile Include=\"Diagnostics\\BehaviorChainExtensions.cs\" />\r\n    <Compile Include=\"Diagnostics\\ChainFubuDiagnostics.cs\" />\r\n    <Compile Include=\"Diagnostics\\ChildDescriptionTag.cs\" />\r\n    <Compile Include=\"Diagnostics\\ClientMessagesFubuDiagnostics.cs\" />\r\n    <Compile Include=\"Diagnostics\\DescriptionPropertyTag.cs\" />\r\n    <Compile Include=\"Diagnostics\\DescriptionBodyTag.cs\" />\r\n    <Compile Include=\"Diagnostics\\DiagnosticChain.cs\" />\r\n    <Compile Include=\"Diagnostics\\DiagnosticChainsSource.cs\" />\r\n    <Compile Include=\"Diagnostics\\Endpoints\\EndpointExplorerFubuDiagnostics.cs\" />\r\n    <Compile Include=\"Diagnostics\\Endpoints\\EndpointReport.cs\" />\r\n    <Compile Include=\"Diagnostics\\FubuDiagnosticsEndpoint.cs\" />\r\n    <Compile Include=\"Diagnostics\\ModelBindingFubuDiagnostics.cs\" />\r\n    <Compile Include=\"Diagnostics\\Packaging\\ActivationDiagnostics.cs\" />\r\n    <Compile Include=\"Diagnostics\\Packaging\\IActivationDiagnostics.cs\" />\r\n    <Compile Include=\"Diagnostics\\Packaging\\IActivationLog.cs\" />\r\n    <Compile Include=\"Diagnostics\\Packaging\\LoggingSession.cs\" />\r\n    <Compile Include=\"Diagnostics\\Packaging\\LogWriter.cs\" />\r\n    <Compile Include=\"Diagnostics\\Packaging\\LogWriterStatus.cs\" />\r\n    <Compile Include=\"Diagnostics\\Packaging\\PackageDiagnosticsLogModel.cs\" />\r\n    <Compile Include=\"Diagnostics\\Packaging\\PackageDiagnosticsModel.cs\" />\r\n    <Compile Include=\"Diagnostics\\Packaging\\PackageDiagnosticsRequestModel.cs\" />\r\n    <Compile Include=\"Diagnostics\\Packaging\\ActivationLog.cs\" />\r\n    <Compile Include=\"Diagnostics\\Packaging\\PackageLogFubuDiagnostics.cs\" />\r\n    <Compile Include=\"Diagnostics\\Packaging\\PackagingDiagnosticsExtensions.cs\" />\r\n    <Compile Include=\"Diagnostics\\Packaging\\PerfTimer.cs\" />\r\n    <Compile Include=\"Diagnostics\\RequestsFubuDiagnostics.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\ApplyTracing.cs\" />\r\n    <Compile Include=\"Diagnostics\\Runtime\\BindingHistory.cs\" />\r\n    <Compile Include=\"Diagnostics\\Runtime\\ModelBindingLog.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\ProductionModeTraceListener.cs\" />\r\n    <Compile Include=\"Diagnostics\\TypeFubuDiagnostics.cs\" />\r\n    <Compile Include=\"Diagnostics\\TypeExtensions.cs\" />\r\n    <Compile Include=\"Attributes\\DoNotAutoImportAttribute.cs\" />\r\n    <Compile Include=\"Diagnostics\\FubuApplicationDescriber.cs\" />\r\n    <Compile Include=\"Environment\\CanWriteToFolder.cs\" />\r\n    <Compile Include=\"Environment\\FileExists.cs\" />\r\n    <Compile Include=\"Environment\\FolderExists.cs\" />\r\n    <Compile Include=\"Environment\\IEnvironmentRequirement.cs\" />\r\n    <Compile Include=\"Environment\\IEnvironmentRequirements.cs\" />\r\n    <Compile Include=\"Assets\\FileWatcherManifest.cs\" />\r\n    <Compile Include=\"Attributes\\FubuModuleAttribute.cs\" />\r\n    <Compile Include=\"Attributes\\FubuPartialAttribute.cs\" />\r\n    <Compile Include=\"FubuRuntime.cs\" />\r\n    <Compile Include=\"Http\\CommaTokenParser.cs\" />\r\n    <Compile Include=\"Http\\Compression\\DeflateHttpContentEncoding.cs\" />\r\n    <Compile Include=\"Http\\Compression\\DoNotCompressAttribute.cs\" />\r\n    <Compile Include=\"Http\\ConnegQuerystring.cs\" />\r\n    <Compile Include=\"Http\\ConnegSettings.cs\" />\r\n    <Compile Include=\"Http\\Cookies\\CookieState.cs\" />\r\n    <Compile Include=\"Http\\Cookies\\CookieValue.cs\" />\r\n    <Compile Include=\"Http\\Cookies\\CookieParser.cs\" />\r\n    <Compile Include=\"Http\\Cookies\\CookieValueSource.cs\" />\r\n    <Compile Include=\"Http\\Cookies\\ICookies.cs\" />\r\n    <Compile Include=\"Http\\Cookies\\ICookieValue.cs\" />\r\n    <Compile Include=\"Http\\Cookies\\Segment.cs\" />\r\n    <Compile Include=\"Http\\HttpRequestExtensions.cs\" />\r\n    <Compile Include=\"Http\\EtagMatch.cs\" />\r\n    <Compile Include=\"Http\\FubuMvcRequestData.cs\" />\r\n    <Compile Include=\"Http\\HeaderValueSource.cs\" />\r\n    <Compile Include=\"Http\\IMimetypeCorrection.cs\" />\r\n    <Compile Include=\"Http\\Owin\\FubuOwinHost.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\FilteredOwinMiddleware.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\HtmlHeadInjectionMiddleware.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\IOwinMiddleware.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\MiddlewareChain.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\MiddlewareContinuation.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\MiddlewareDeactivator.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\MiddlewareNode.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\StaticFiles\\DenyConfigRule.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\StaticFiles\\IStaticFileRule.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\StaticFiles\\StaticFileMiddleware.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\StaticFiles\\WriteFileContinuation.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\StaticFiles\\WriteFileHeadContinuation.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\StaticFiles\\WriterContinuation.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\StaticFiles\\WriteStatusCodeContinuation.cs\" />\r\n    <Compile Include=\"Http\\Owin\\OwinConstants.cs\" />\r\n    <Compile Include=\"Http\\Owin\\OwinContext.cs\" />\r\n    <Compile Include=\"Http\\Owin\\OwinHeaderSettings.cs\" />\r\n    <Compile Include=\"Http\\Owin\\OwinHttpRequest.cs\" />\r\n    <Compile Include=\"Http\\Owin\\OwinHttpContext.cs\" />\r\n    <Compile Include=\"Http\\Owin\\AspNetHttpRequestAdapter.cs\" />\r\n    <Compile Include=\"Http\\Owin\\OwinHttpResponse.cs\" />\r\n    <Compile Include=\"Http\\Owin\\OwinServiceArguments.cs\" />\r\n    <Compile Include=\"Http\\Owin\\OwinSettings.cs\" />\r\n    <Compile Include=\"Http\\Scenarios\\Scenario.cs\" />\r\n    <Compile Include=\"Http\\Scenarios\\IUrlExpression.cs\" />\r\n    <Compile Include=\"Http\\Scenarios\\ScenarioAssertionException.cs\" />\r\n    <Compile Include=\"IActivator.cs\" />\r\n    <Compile Include=\"IDeactivator.cs\" />\r\n    <Compile Include=\"Json\\AggregatedQueryReader.cs\" />\r\n    <Compile Include=\"Json\\AggregatedRegistry.cs\" />\r\n    <Compile Include=\"Json\\FubuJsonConverter.cs\" />\r\n    <Compile Include=\"Json\\IJsonSerializer.cs\" />\r\n    <Compile Include=\"Json\\JObjectValues.cs\" />\r\n    <Compile Include=\"Json\\JsonBindingAttribute.cs\" />\r\n    <Compile Include=\"Json\\JTokenKeyValuePairExtensions.cs\" />\r\n    <Compile Include=\"Json\\NewtonSoftBindingReader.cs\" />\r\n    <Compile Include=\"Json\\NewtonsoftJsonFormatter.cs\" />\r\n    <Compile Include=\"Json\\NewtonSoftJsonReader.cs\" />\r\n    <Compile Include=\"Json\\NewtonsoftJsonSerializer.cs\" />\r\n    <Compile Include=\"Runtime\\LambdaActivator.cs\" />\r\n    <Compile Include=\"Attributes\\NoDiagnosticsAttribute.cs\" />\r\n    <Compile Include=\"Registration\\PerfTimerExtensions.cs\" />\r\n    <Compile Include=\"Runtime\\PortFinder.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Readers\\FormReader.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Readers\\IOwinRequestReader.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Readers\\MediaTypeReader.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Readers\\OwinRequestReader.cs\" />\r\n    <Compile Include=\"Services\\FubuRegistryLoader.cs\" />\r\n    <Compile Include=\"Services\\JasperServiceConfiguration.cs\" />\r\n    <Compile Include=\"Services\\JasperServiceRuntime.cs\" />\r\n    <Compile Include=\"UI\\AuthorizationOnPageExtensions.cs\" />\r\n    <Compile Include=\"UI\\DefaultHtmlConventions.cs\" />\r\n    <Compile Include=\"UI\\ElementCategoryExpression.cs\" />\r\n    <Compile Include=\"UI\\ElementConventionsFubuPageExtensions.cs\" />\r\n    <Compile Include=\"UI\\Elements\\AccessorDef.cs\" />\r\n    <Compile Include=\"UI\\Elements\\AccessorOverrideElementBuilderPolicy.cs\" />\r\n    <Compile Include=\"UI\\Elements\\AccessorOverridesClasses.cs\" />\r\n    <Compile Include=\"UI\\Elements\\Builders\\AddClassForAttributeModifier.cs\" />\r\n    <Compile Include=\"UI\\Elements\\Builders\\AddClassModifier.cs\" />\r\n    <Compile Include=\"UI\\Elements\\Builders\\AddNameModifier.cs\" />\r\n    <Compile Include=\"UI\\Elements\\Builders\\CheckboxBuilder.cs\" />\r\n    <Compile Include=\"UI\\Elements\\Builders\\ConditionalElementBuilder.cs\" />\r\n    <Compile Include=\"UI\\Elements\\Builders\\ConditionalElementModifier.cs\" />\r\n    <Compile Include=\"UI\\Elements\\Builders\\DataFldModifier.cs\" />\r\n    <Compile Include=\"UI\\Elements\\Builders\\DefaultLabelBuilder.cs\" />\r\n    <Compile Include=\"UI\\Elements\\Builders\\LambdaElementBuilder.cs\" />\r\n    <Compile Include=\"UI\\Elements\\Builders\\LambdaElementModifier.cs\" />\r\n    <Compile Include=\"UI\\Elements\\Builders\\SpanDisplayBuilder.cs\" />\r\n    <Compile Include=\"UI\\Elements\\Builders\\TemplateSpanBuilder.cs\" />\r\n    <Compile Include=\"UI\\Elements\\Builders\\TemplateTextboxBuilder.cs\" />\r\n    <Compile Include=\"UI\\Elements\\Builders\\TextboxBuilder.cs\" />\r\n    <Compile Include=\"UI\\Elements\\DefaultElementNamingConvention.cs\" />\r\n    <Compile Include=\"UI\\Elements\\DotNotationElementNamingConvention.cs\" />\r\n    <Compile Include=\"UI\\Elements\\ElementConstants.cs\" />\r\n    <Compile Include=\"UI\\Elements\\ElementGenerator.cs\" />\r\n    <Compile Include=\"UI\\Elements\\ElementIdActivator.cs\" />\r\n    <Compile Include=\"UI\\Elements\\ElementOverridesExtensions.cs\" />\r\n    <Compile Include=\"UI\\Elements\\ElementRequest.cs\" />\r\n    <Compile Include=\"UI\\Elements\\ElementRequestActivator.cs\" />\r\n    <Compile Include=\"UI\\Elements\\IElementBuilder.cs\" />\r\n    <Compile Include=\"UI\\Elements\\IElementGenerator.cs\" />\r\n    <Compile Include=\"UI\\Elements\\IElementModifier.cs\" />\r\n    <Compile Include=\"UI\\Elements\\IElementNamingConvention.cs\" />\r\n    <Compile Include=\"UI\\Elements\\IElementTagOverride.cs\" />\r\n    <Compile Include=\"UI\\Elements\\TagRequestActivator.cs\" />\r\n    <Compile Include=\"UI\\Forms\\DefinitionListFieldChrome.cs\" />\r\n    <Compile Include=\"UI\\Forms\\FormLineExpression.cs\" />\r\n    <Compile Include=\"UI\\Forms\\FormRequest.cs\" />\r\n    <Compile Include=\"UI\\Forms\\FormTagBuilder.cs\" />\r\n    <Compile Include=\"UI\\Forms\\IFieldChrome.cs\" />\r\n    <Compile Include=\"UI\\Forms\\TableRowFieldChrome.cs\" />\r\n    <Compile Include=\"UI\\FubuHtmlDocument.cs\" />\r\n    <Compile Include=\"UI\\FubuPageFormExtensions.cs\" />\r\n    <Compile Include=\"UI\\HtmlConventionCollator.cs\" />\r\n    <Compile Include=\"UI\\HtmlConventionRegistry.cs\" />\r\n    <Compile Include=\"UI\\LabelBuilder.cs\" />\r\n    <Compile Include=\"UI\\ProfileExpression.cs\" />\r\n    <Compile Include=\"UI\\Security\\AccessRight.cs\" />\r\n    <Compile Include=\"UI\\Security\\AccessRightExtensions.cs\" />\r\n    <Compile Include=\"UI\\Security\\DegradingAccessElementBuilder.cs\" />\r\n    <Compile Include=\"UI\\Security\\FieldAccessRightsExecutor.cs\" />\r\n    <Compile Include=\"UI\\Security\\FieldAccessService.cs\" />\r\n    <Compile Include=\"UI\\Security\\FieldAccessServiceExtensions.cs\" />\r\n    <Compile Include=\"UI\\Security\\IFieldAccessRule.cs\" />\r\n    <Compile Include=\"UI\\Security\\IFieldAccessService.cs\" />\r\n    <Compile Include=\"UI\\ServiceLocatorTagRequestActivator.cs\" />\r\n    <Compile Include=\"UI\\ShowEditFieldExpressions.cs\" />\r\n    <Compile Include=\"UI\\UIServiceRegistry.cs\" />\r\n    <Compile Include=\"Validation\\ClassValidationRules.cs\" />\r\n    <Compile Include=\"Validation\\CollectionLengthAttribute.cs\" />\r\n    <Compile Include=\"Validation\\ContinueValidationAttribute.cs\" />\r\n    <Compile Include=\"Validation\\CoreExtensions.cs\" />\r\n    <Compile Include=\"Validation\\EmailAttribute.cs\" />\r\n    <Compile Include=\"Validation\\FieldEqualityRule.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\AttributeFieldValidationSource.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\ClassFieldValidationRules.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\CollectionLengthRule.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\ConditionalFieldRule.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\ContinuationFieldRule.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\EmailFieldRule.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\FieldRuleSource.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\FieldRulesRegistry.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\FieldValidationAttribute.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\FieldValidationRuleExtensions.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\GreaterOrEqualToZeroRule.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\GreaterThanZeroRule.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\IFieldRuleCondition.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\IFieldRulesRegistry.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\IFieldValidationQuery.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\IFieldValidationRule.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\IFieldValidationSource.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\IgnoreClientLocalizationAttribute.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\IsValid.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\LambdaFieldValidationSource.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\MaximumLengthRule.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\MaxValueFieldRule.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\MinimumLengthRule.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\MinValueFieldRule.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\RangeLengthFieldRule.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\RegularExpressionFieldRule.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\RequiredFieldRule.cs\" />\r\n    <Compile Include=\"Validation\\FubuValidationException.cs\" />\r\n    <Compile Include=\"Validation\\GreaterOrEqualToZeroAttribute.cs\" />\r\n    <Compile Include=\"Validation\\GreaterThanZeroAttribute.cs\" />\r\n    <Compile Include=\"Validation\\IValidated.cs\" />\r\n    <Compile Include=\"Validation\\IValidationRegistration.cs\" />\r\n    <Compile Include=\"Validation\\IValidationRule.cs\" />\r\n    <Compile Include=\"Validation\\IValidationSource.cs\" />\r\n    <Compile Include=\"Validation\\IValidator.cs\" />\r\n    <Compile Include=\"Validation\\MaximumStringLengthAttribute.cs\" />\r\n    <Compile Include=\"Validation\\MaxValueAttribute.cs\" />\r\n    <Compile Include=\"Validation\\MinimumStringLengthAttribute.cs\" />\r\n    <Compile Include=\"Validation\\MinValueAttribute.cs\" />\r\n    <Compile Include=\"Validation\\Notification.cs\" />\r\n    <Compile Include=\"Validation\\NotificationMessage.cs\" />\r\n    <Compile Include=\"Validation\\RangeLengthAttribute.cs\" />\r\n    <Compile Include=\"Validation\\RegularExpressionAttribute.cs\" />\r\n    <Compile Include=\"Validation\\RequiredAttribute.cs\" />\r\n    <Compile Include=\"Validation\\TemplateExtensions.cs\" />\r\n    <Compile Include=\"Validation\\TemplateValue.cs\" />\r\n    <Compile Include=\"Validation\\ValidationAttribute.cs\" />\r\n    <Compile Include=\"Validation\\ValidationCompiler.cs\" />\r\n    <Compile Include=\"Validation\\ValidationContext.cs\" />\r\n    <Compile Include=\"Validation\\ValidationError.cs\" />\r\n    <Compile Include=\"Validation\\ValidationGraph.cs\" />\r\n    <Compile Include=\"Validation\\ValidationKeys.cs\" />\r\n    <Compile Include=\"Validation\\ValidationMode.cs\" />\r\n    <Compile Include=\"Validation\\ValidationPlan.cs\" />\r\n    <Compile Include=\"Validation\\ValidationScenario.cs\" />\r\n    <Compile Include=\"Validation\\ValidationStep.cs\" />\r\n    <Compile Include=\"Validation\\Validator.cs\" />\r\n    <Compile Include=\"Validation\\Web\\AccessorRulesExtensions.cs\" />\r\n    <Compile Include=\"Validation\\Web\\AccessorRulesFieldSource.cs\" />\r\n    <Compile Include=\"Validation\\Web\\AccessorRulesValidationModePolicy.cs\" />\r\n    <Compile Include=\"Validation\\Web\\AjaxContinuationResolver.cs\" />\r\n    <Compile Include=\"Validation\\Web\\AjaxValidation.cs\" />\r\n    <Compile Include=\"Validation\\Web\\AjaxValidationBehavior.cs\" />\r\n    <Compile Include=\"Validation\\Web\\AjaxValidationNode.cs\" />\r\n    <Compile Include=\"Validation\\Web\\FubuMvcValidationServices.cs\" />\r\n    <Compile Include=\"Validation\\Web\\FubuValidationServiceRegistry.cs\" />\r\n    <Compile Include=\"Validation\\Web\\IAjaxValidationFailureHandler.cs\" />\r\n    <Compile Include=\"Validation\\Web\\IHaveValidation.cs\" />\r\n    <Compile Include=\"Validation\\Web\\IValidationModePolicy.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ModelBindingErrors.cs\" />\r\n    <Compile Include=\"Validation\\Web\\NotValidatedAttribute.cs\" />\r\n    <Compile Include=\"Validation\\Web\\RemoteRuleExpression.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\IRemoteFieldValidationRule.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\IRemoteRuleFilter.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\IRemoteRuleQuery.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\IRuleRunner.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\IValidationTargetResolver.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\RemoteAttribute.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\RemoteFieldRule.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\RemoteRuleGraph.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\RemoteRuleGraphActivator.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\ValidateField.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\CssValidationAnnotationStrategy.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\DateElementModifier.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\DefaultValidationSummaryWriter.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\ElementLocalizationMessages.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\FieldEqualityFormModifier.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\FieldOptions.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\FieldValidationElementModifier.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\FormValidationModifier.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\FormValidationSummaryModifier.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\IFieldValidationModifier.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\InputElementModifier.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\IRenderingStrategy.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\IValidationAnnotationStrategy.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\LocalizationAnnotationStrategy.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\LocalizationLabelModifier.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\MaximumLengthModifier.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\MaxValueModifier.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\MinimumLengthModifier.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\MinValueModifier.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\NotificationSerializationModifier.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\NumberElementModifier.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\RangeLengthModifier.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\RegularExpressionModifier.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\RemoteValidationElementModifier.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\RenderingStrategies.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\RuleAliases.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\ValidationOptions.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\ValidationSummarySource.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationActionFilter.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationAjaxExtensions.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationBehaviorChainExtensions.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationFilter.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationHtmlConventions.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationModeAttributePolicy.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationNode.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationNodeModification.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationPolicy.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationSettings.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationSettingsRegistry.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationSummary.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationUrlRegistryExtensions.cs\" />\r\n    <Compile Include=\"View\\ImageTag.cs\" />\r\n    <Compile Include=\"Runtime\\IFubuRequestContext.cs\" />\r\n    <Compile Include=\"Projections\\AccessorProjection.cs\" />\r\n    <Compile Include=\"Projections\\AdaptiveAccessorProjection.cs\" />\r\n    <Compile Include=\"Projections\\ChildProjection.cs\" />\r\n    <Compile Include=\"Projections\\DelegatingProjection.cs\" />\r\n    <Compile Include=\"Projections\\DictionaryMediaNode.cs\" />\r\n    <Compile Include=\"Projections\\DictionaryMediaNodeList.cs\" />\r\n    <Compile Include=\"Projections\\DisplayFormatting.cs\" />\r\n    <Compile Include=\"Projections\\EnumerableProjection.cs\" />\r\n    <Compile Include=\"Projections\\ExternallyFormattedValueProjector.cs\" />\r\n    <Compile Include=\"Projections\\IMediaNode.cs\" />\r\n    <Compile Include=\"Projections\\IProjection.cs\" />\r\n    <Compile Include=\"Projections\\IProjectionContext.cs\" />\r\n    <Compile Include=\"Projections\\IProjectionRunner.cs\" />\r\n    <Compile Include=\"Projections\\IProjectMyself.cs\" />\r\n    <Compile Include=\"Projections\\ISingleValueProjection.cs\" />\r\n    <Compile Include=\"Projections\\IValueProjector.cs\" />\r\n    <Compile Include=\"Projections\\IValues.cs\" />\r\n    <Compile Include=\"Projections\\IValueSource.cs\" />\r\n    <Compile Include=\"Projections\\IValueStream.cs\" />\r\n    <Compile Include=\"Projections\\Projection.cs\" />\r\n    <Compile Include=\"Projections\\ProjectionContext.cs\" />\r\n    <Compile Include=\"Projections\\ProjectionContextExtensions.cs\" />\r\n    <Compile Include=\"Projections\\SelfProjectingValueProjector.cs\" />\r\n    <Compile Include=\"Projections\\SimpleValues.cs\" />\r\n    <Compile Include=\"Projections\\SingleValueProjection.cs\" />\r\n    <Compile Include=\"Projections\\ValuesExtensions.cs\" />\r\n    <Compile Include=\"Projections\\ValueSource.cs\" />\r\n    <Compile Include=\"Attributes\\QueryStringAttribute.cs\" />\r\n    <Compile Include=\"ReflectionExtensions.cs\" />\r\n    <Compile Include=\"Registration\\AccessorRulesExpression.cs\" />\r\n    <Compile Include=\"Registration\\ActionSourceAggregator.cs\" />\r\n    <Compile Include=\"Http\\Compression\\ContentEncoding.cs\" />\r\n    <Compile Include=\"Http\\Compression\\GZipHttpContentEncoding.cs\" />\r\n    <Compile Include=\"Http\\Compression\\HttpContentEncodingFilter.cs\" />\r\n    <Compile Include=\"Http\\Compression\\IHttpContentEncoders.cs\" />\r\n    <Compile Include=\"Http\\Compression\\IHttpContentEncoding.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\DefaultRouteConventionBasedUrlPolicy.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\DefaultUrlPolicy.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\OutputBeforeAjaxContinuationPolicy.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\UrlPolicies.cs\" />\r\n    <Compile Include=\"Registration\\DSL\\AppliesToExpression.cs\" />\r\n    <Compile Include=\"Registration\\DSL\\PolicyAdderExpression.cs\" />\r\n    <Compile Include=\"Registration\\FeatureLoader.cs\" />\r\n    <Compile Include=\"Registration\\FilterAttribute.cs\" />\r\n    <Compile Include=\"Registration\\IAccessorRulesExpression.cs\" />\r\n    <Compile Include=\"Registration\\IAccessorRulesRegistration.cs\" />\r\n    <Compile Include=\"Registration\\IChainSource.cs\" />\r\n    <Compile Include=\"Registration\\IFeatureSettings.cs\" />\r\n    <Compile Include=\"Registration\\ISettingsAlteration.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\IModifiesChain.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\RoutedChain.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\ActionFilter.cs\" />\r\n    <Compile Include=\"Registration\\OverridesFor.cs\" />\r\n    <Compile Include=\"Registration\\Routes\\IMakeMyOwnUrl.cs\" />\r\n    <Compile Include=\"Registration\\Routes\\IRankMeLast.cs\" />\r\n    <Compile Include=\"Registration\\Routes\\SessionStateRequirement.cs\" />\r\n    <Compile Include=\"Registration\\SettingAlteration.cs\" />\r\n    <Compile Include=\"Registration\\SettingReplacement.cs\" />\r\n    <Compile Include=\"Registration\\SettingsCollection.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\AjaxContinuations.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\ConnegGraph.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\ConnegRule.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\CustomReadersAndWriters.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\DefaultReadersAndWriters.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\HtmlTagsRule.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\IOutputNode.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\IResourceNotFoundHandler.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\DefaultResourceNotFoundHandler.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\NoMatchingWriter.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\NoWritersMatch.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\OutputNodeExtensions.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\ConnegRules.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\StringOutput.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\WriterChoice.cs\" />\r\n    <Compile Include=\"Resources\\Hypermedia\\ILinkCreator.cs\" />\r\n    <Compile Include=\"Resources\\Hypermedia\\ILinkModifier.cs\" />\r\n    <Compile Include=\"Resources\\Hypermedia\\ILinkSource.cs\" />\r\n    <Compile Include=\"Resources\\Hypermedia\\Link.cs\" />\r\n    <Compile Include=\"Resources\\Hypermedia\\LinkExpression.cs\" />\r\n    <Compile Include=\"Resources\\Hypermedia\\LinkSource.cs\" />\r\n    <Compile Include=\"Resources\\Hypermedia\\LinksSource.cs\" />\r\n    <Compile Include=\"Runtime\\Aggregation\\AggregatedQuery.cs\" />\r\n    <Compile Include=\"Runtime\\Aggregation\\AggregateRequest.cs\" />\r\n    <Compile Include=\"Runtime\\Aggregation\\AggregationResponse.cs\" />\r\n    <Compile Include=\"Runtime\\Aggregation\\Aggregator.cs\" />\r\n    <Compile Include=\"Runtime\\Aggregation\\ClientMessagePath.cs\" />\r\n    <Compile Include=\"Runtime\\Aggregation\\ClientMessageCache.cs\" />\r\n    <Compile Include=\"Runtime\\Aggregation\\ClientQuery.cs\" />\r\n    <Compile Include=\"Runtime\\Aggregation\\ClientResponse.cs\" />\r\n    <Compile Include=\"Runtime\\Aggregation\\IAggregator.cs\" />\r\n    <Compile Include=\"Runtime\\Aggregation\\IAggregatorSource.cs\" />\r\n    <Compile Include=\"Runtime\\Aggregation\\IClientMessageCache.cs\" />\r\n    <Compile Include=\"Runtime\\AjaxAwareJsonSerializer.cs\" />\r\n    <Compile Include=\"Runtime\\Conditionals\\IConditionalService.cs\" />\r\n    <Compile Include=\"Runtime\\ExceptionHandlingObserver.cs\" />\r\n    <Compile Include=\"Runtime\\Files\\FubuApplicationFiles.cs\" />\r\n    <Compile Include=\"Runtime\\Files\\FubuFile.cs\" />\r\n    <Compile Include=\"Runtime\\Files\\IFubuApplicationFiles.cs\" />\r\n    <Compile Include=\"Runtime\\Files\\IFubuFile.cs\" />\r\n    <Compile Include=\"Runtime\\FullChainSwitcher.cs\" />\r\n    <Compile Include=\"Runtime\\Handlers\\AsynchronousHttpHandler.cs\" />\r\n    <Compile Include=\"Runtime\\Handlers\\AsynchronousHttpHandlerSource.cs\" />\r\n    <Compile Include=\"Runtime\\Handlers\\IHttpHandlerSource.cs\" />\r\n    <Compile Include=\"Runtime\\IApplicationObserver.cs\" />\r\n    <Compile Include=\"Runtime\\InMemoryFubuRequest.cs\" />\r\n    <Compile Include=\"Runtime\\Handlers\\SessionlessAsynchronousHttpHandler.cs\" />\r\n    <Compile Include=\"Runtime\\Handlers\\SessionlessAsynchronousHttpHandlerSource.cs\" />\r\n    <Compile Include=\"Runtime\\Logging\\FileOutputReport.cs\" />\r\n    <Compile Include=\"Runtime\\Logging\\FinishedRecordingOutput.cs\" />\r\n    <Compile Include=\"Runtime\\Logging\\HttpStatusReport.cs\" />\r\n    <Compile Include=\"Runtime\\Logging\\OutputReport.cs\" />\r\n    <Compile Include=\"Runtime\\Logging\\RedirectReport.cs\" />\r\n    <Compile Include=\"Runtime\\Logging\\ReplayRecordedOutput.cs\" />\r\n    <Compile Include=\"Runtime\\Logging\\SetHeaderValue.cs\" />\r\n    <Compile Include=\"Runtime\\Logging\\StartedRecordingOutput.cs\" />\r\n    <Compile Include=\"Runtime\\Logging\\WriteCookieReport.cs\" />\r\n    <Compile Include=\"Runtime\\Logging\\WriteToStreamReport.cs\" />\r\n    <Compile Include=\"Runtime\\PartialChainSwitcher.cs\" />\r\n    <Compile Include=\"Runtime\\PartialFactory.cs\" />\r\n    <Compile Include=\"Runtime\\SetValueReport.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\AntiForgeryBehavior.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\AntiForgeryData.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\AntiForgeryNode.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\AntiForgeryPolicy.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\AntiForgeryService.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\AntiForgeryServiceRegistry.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\AntiForgerySettings.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\AntiForgeryTokenAttribute.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\AntiForgeryTokenFubuPageExtensions.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\AntiForgeryTokenProvider.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\AntiForgeryValidator.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\BinaryAntiForgerySerializer.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\FormToken.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\IAntiForgeryEncoder.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\IAntiForgerySerializer.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\IAntiForgeryService.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\IAntiForgeryTokenProvider.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\IAntiForgeryValidator.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\MachineKeyAntiForgeryEncoder.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AjaxAuthenticationRedirect.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\ApplyAuthenticationPolicy.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Auditing\\AuditMessage.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Auditing\\ILoginAuditor.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Auditing\\LoginFailure.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Auditing\\LoginSuccess.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Auditing\\NulloLoginAuditor.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationChain.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationFilter.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationFilterNode.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationIsConfigured.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationNode.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationRedirector.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationService.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationServiceRegistry.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationSettings.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthResult.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\BasicAuthentication.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Cookies\\BasicFubuLoginCookies.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Cookies\\CookieSettings.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Cookies\\CookieTicketSource.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Cookies\\ILoginCookies.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Cookies\\ILoginCookieService.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Cookies\\LoginCookieService.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\DefaultAuthenticationRedirect.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Endpoints\\LoginController.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Endpoints\\LoginKeys.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Endpoints\\LogoutController.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\IAuthenticationRedirect.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\IAuthenticationRedirector.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\IAuthenticationService.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\IAuthenticationSession.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\IAuthenticationStrategy.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\ICredentialsAuthenticator.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\ILockedOutRule.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\ILoginSuccessHandler.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\ILogoutSuccessHandler.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\IPasswordHash.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\IPrincipalBuilder.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\IPrincipalContext.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\LoginRequest.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\LoginStatus.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\LoginSuccessHandler.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\LogoutRequest.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\LogoutSuccessHandler.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Membership\\FubuPrincipal.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Membership\\IMembershipRepository.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Membership\\InMemoryMembershipRepository.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Membership\\MembershipAuthentication.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Membership\\MembershipNode.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Membership\\UserInfo.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\PassThroughAuthenticationAttribute.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\PassThroughAuthenticationFilter.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\PasswordHash.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\RedirectLibrary.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\ThreadPrincipalContext.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Tickets\\AuthenticationTicket.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Tickets\\Encryption.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Tickets\\IAuthenticationTicketEncryptor.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Tickets\\ITicketSource.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Tickets\\TicketAuthenticationSession.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AlwaysAllowPolicy.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AlwaysDenyPolicy.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AuthorizationCheckPolicy.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AuthorizationByService.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\ChainAuthorizor.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\IAuthorizationCheck.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\IAuthorizationNode.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\IChainAuthorizor.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\NotAuthenticatedAttribute.cs\" />\r\n    <Compile Include=\"Registration\\EndpointActionSource.cs\" />\r\n    <Compile Include=\"Runtime\\Conditionals\\Always.cs\" />\r\n    <Compile Include=\"Runtime\\Conditionals\\IConditional.cs\" />\r\n    <Compile Include=\"Runtime\\Conditionals\\IsAjaxRequest.cs\" />\r\n    <Compile Include=\"Runtime\\Conditionals\\IsNotAjaxRequest.cs\" />\r\n    <Compile Include=\"Runtime\\Conditionals\\LambdaConditional.cs\" />\r\n    <Compile Include=\"Runtime\\Conditionals\\Never.cs\" />\r\n    <Compile Include=\"Behaviors\\InterceptExceptionBehavior.cs\" />\r\n    <Compile Include=\"Ajax\\AjaxContinuation.cs\" />\r\n    <Compile Include=\"Caching\\IRecordedHttpOutput.cs\" />\r\n    <Compile Include=\"Caching\\IRecordedOutput.cs\" />\r\n    <Compile Include=\"Caching\\SetContentType.cs\" />\r\n    <Compile Include=\"Caching\\WriteFileRecord.cs\" />\r\n    <Compile Include=\"Caching\\WriteStream.cs\" />\r\n    <Compile Include=\"Caching\\WriteTextOutput.cs\" />\r\n    <Compile Include=\"Continuations\\IRedirectable.cs\" />\r\n    <Compile Include=\"Registration\\CoreServiceRegistry.cs\" />\r\n    <Compile Include=\"Http\\CurrentRequestFullUrlPropertyBinder.cs\" />\r\n    <Compile Include=\"Http\\CurrentRequestRelativeUrlPropertyBinder.cs\" />\r\n    <Compile Include=\"Http\\AspNet\\RequestPropertyValueSource.cs\" />\r\n    <Compile Include=\"Http\\HttpStandinServiceRegistry.cs\" />\r\n    <Compile Include=\"Http\\RequestDataExtensions.cs\" />\r\n    <Compile Include=\"Http\\RouteDataValues.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\Chain.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\Node.cs\" />\r\n    <Compile Include=\"Registration\\RegistryImport.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\InputNode.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\IReader.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\OutputNode.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\FormatterReader.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\FormatterWriter.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\HtmlStringWriter.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\IMediaWriter.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\InputBehavior.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\ModelBindingReader.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\OutputBehavior.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\StringWriter.cs\" />\r\n    <Compile Include=\"Runtime\\HeaderValueAttribute.cs\" />\r\n    <Compile Include=\"Registration\\Services\\ModelBindingServicesRegistry.cs\" />\r\n    <Compile Include=\"Registration\\ActionMethodFilter.cs\" />\r\n    <Compile Include=\"Registration\\ActionSource.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\IContainerModel.cs\" />\r\n    <Compile Include=\"Registration\\Querying\\ChainSearch.cs\" />\r\n    <Compile Include=\"Registration\\SingleTypeActionSource.cs\" />\r\n    <Compile Include=\"Registration\\TypeRegistrationExtensions.cs\" />\r\n    <Compile Include=\"Runtime\\AspNetPassthroughConverter.cs\" />\r\n    <Compile Include=\"Runtime\\IExceptionHandler.cs\" />\r\n    <Compile Include=\"Runtime\\IFubuRouteHandler.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\SecurityServicesRegistry.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\SecuritySettings.cs\" />\r\n    <Compile Include=\"Services\\ApplicationLoaderFinder.cs\" />\r\n    <Compile Include=\"Services\\IApplicationLoader.cs\" />\r\n    <Compile Include=\"Services\\JsonSerialization.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\GlobalMessageTracking.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\IListener.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\IMessagingHub.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\IRemoteListener.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\MessageWaitCondition.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\MessagingHub.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\MessagingHubExtensions.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\RemoteListener.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\ServiceMessage.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\Tracking\\AllMessagesComplete.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\Tracking\\MessageHistory.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\Tracking\\MessageTrack.cs\" />\r\n    <Compile Include=\"Services\\Remote\\AppDomainFileChangeWatcher.cs\" />\r\n    <Compile Include=\"Services\\Remote\\AssemblyCopyMode.cs\" />\r\n    <Compile Include=\"Services\\Remote\\AssemblyRequirement.cs\" />\r\n    <Compile Include=\"Services\\Remote\\RemoteDomainExpression.cs\" />\r\n    <Compile Include=\"Services\\Remote\\RemoteServiceRunner.cs\" />\r\n    <Compile Include=\"Services\\Remote\\RemoteServicesProxy.cs\" />\r\n    <Compile Include=\"Services\\Remote\\ServiceStarted.cs\" />\r\n    <Compile Include=\"Services\\Wait.cs\" />\r\n    <Compile Include=\"Runtime\\SessionState\\CookieFlashProvider.cs\" />\r\n    <Compile Include=\"StructureMap\\AppSettingProviderRegistry.cs\" />\r\n    <Compile Include=\"StructureMap\\ContainerExtensions.cs\" />\r\n    <Compile Include=\"StructureMap\\Diagnostics\\AssemblyDTO.cs\" />\r\n    <Compile Include=\"StructureMap\\Diagnostics\\BuildPlanRequest.cs\" />\r\n    <Compile Include=\"StructureMap\\Diagnostics\\InstanceDTO.cs\" />\r\n    <Compile Include=\"StructureMap\\Diagnostics\\Namespace.cs\" />\r\n    <Compile Include=\"StructureMap\\Diagnostics\\PluginTypeDTO.cs\" />\r\n    <Compile Include=\"StructureMap\\Diagnostics\\SearchOption.cs\" />\r\n    <Compile Include=\"StructureMap\\Diagnostics\\SearchOptions.cs\" />\r\n    <Compile Include=\"StructureMap\\Diagnostics\\SettingsFubuDiagnostics.cs\" />\r\n    <Compile Include=\"StructureMap\\Diagnostics\\StructureMapExtensions.cs\" />\r\n    <Compile Include=\"StructureMap\\Diagnostics\\StructureMapFubuDiagnostics.cs\" />\r\n    <Compile Include=\"StructureMap\\IContainerExtension.cs\" />\r\n    <Compile Include=\"StructureMap\\NestedStructureMapContainerBehavior.cs\" />\r\n    <Compile Include=\"StructureMap\\SettingsScanner.cs\" />\r\n    <Compile Include=\"StructureMap\\Settings\\SettingPolicy.cs\" />\r\n    <Compile Include=\"StructureMap\\StructureMapServiceFactory.cs\" />\r\n    <Compile Include=\"StructureMap\\StructureMapServiceLocator.cs\" />\r\n    <Compile Include=\"Attributes\\TagAttribute.cs\" />\r\n    <Compile Include=\"View\\AuthorizationOnPageExtensions.cs\" />\r\n    <Compile Include=\"View\\DisplayConversionRegistryActivator.cs\" />\r\n    <Compile Include=\"Http\\AspNet\\AspNetHttpResponse.cs\" />\r\n    <Compile Include=\"Http\\AspNet\\AspNetHttpRequest.cs\" />\r\n    <Compile Include=\"Http\\AspNet\\ASPNetObjectConversionFamily.cs\" />\r\n    <Compile Include=\"Http\\AspNet\\AspNetServiceArguments.cs\" />\r\n    <Compile Include=\"Http\\Cookies\\Cookie.cs\" />\r\n    <Compile Include=\"Http\\CurrentChain.cs\" />\r\n    <Compile Include=\"Http\\CurrentMimeType.cs\" />\r\n    <Compile Include=\"Http\\CurrentMimeTypeModelBinder.cs\" />\r\n    <Compile Include=\"Http\\Headers\\HttpHeaderValues.cs\" />\r\n    <Compile Include=\"Http\\Headers\\IHaveHeaders.cs\" />\r\n    <Compile Include=\"Http\\HttpGeneralHeaders.cs\" />\r\n    <Compile Include=\"Http\\HttpHeaderNameExtensions.cs\" />\r\n    <Compile Include=\"Http\\HttpRequestHeaders.cs\" />\r\n    <Compile Include=\"Http\\HttpResponseHeaders.cs\" />\r\n    <Compile Include=\"Http\\ICurrentChain.cs\" />\r\n    <Compile Include=\"Http\\IHttpRequest.cs\" />\r\n    <Compile Include=\"Http\\MimeTypeList.cs\" />\r\n    <Compile Include=\"Http\\RequestDataSource.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\ActionCallBase.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\Process.cs\" />\r\n    <Compile Include=\"Http\\Headers\\Header.cs\" />\r\n    <Compile Include=\"Runtime\\Formatters\\IFormatter.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\MediaProcessingException.cs\" />\r\n    <Compile Include=\"Runtime\\Formatters\\XmlFormatter.cs\" />\r\n    <Compile Include=\"Continuations\\ContinuationHandler.cs\" />\r\n    <Compile Include=\"Continuations\\FubuContinuation.cs\" />\r\n    <Compile Include=\"Continuations\\ContinuationType.cs\" />\r\n    <Compile Include=\"Continuations\\IContinuationDirector.cs\" />\r\n    <Compile Include=\"Runtime\\EndpointService.cs\" />\r\n    <Compile Include=\"Registration\\FubuExtensionFinder.cs\" />\r\n    <Compile Include=\"FubuPackageRegistry.cs\" />\r\n    <Compile Include=\"IFubuRegistryExtension.cs\" />\r\n    <Compile Include=\"Resources\\PathBased\\ResourcePathBinder.cs\" />\r\n    <Compile Include=\"Resources\\PathBased\\ResourcePath.cs\" />\r\n    <Compile Include=\"Registration\\AddImplementationsServiceRegistrationConvention.cs\" />\r\n    <Compile Include=\"Registration\\ConnectImplementationsServiceRegistrationConvention.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\MethodToUrlBuilder.cs\" />\r\n    <Compile Include=\"Registration\\IServiceRegistrationConvention.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\BehaviorCategory.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\BehaviorSearch.cs\" />\r\n    <Compile Include=\"Registration\\Routes\\IRouteInput.cs\" />\r\n    <Compile Include=\"Registration\\Routes\\RouteParameters.cs\" />\r\n    <Compile Include=\"Registration\\Routes\\RouteInput.cs\" />\r\n    <Compile Include=\"Registration\\Routes\\IRoutePolicy.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\ReorderBehaviorsPolicy.cs\" />\r\n    <Compile Include=\"Registration\\DSL\\ModelsExpression.cs\" />\r\n    <Compile Include=\"Registration\\DSL\\PoliciesExpression.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\UrlPatternAttributePolicy.cs\" />\r\n    <Compile Include=\"Registration\\DSL\\ActionCallCandidateExpression.cs\" />\r\n    <Compile Include=\"Attributes\\RouteInputAttribute.cs\" />\r\n    <Compile Include=\"Behaviors\\BasicBehavior.cs\" />\r\n    <Compile Include=\"DoNext.cs\" />\r\n    <Compile Include=\"Behaviors\\IActionBehavior.cs\" />\r\n    <Compile Include=\"Behaviors\\NulloBehavior.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\IUrlPolicy.cs\" />\r\n    <Compile Include=\"Registration\\DSL\\TypeMethodPolicy.cs\" />\r\n    <Compile Include=\"Registration\\IActionSource.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\ContinuationNode.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\IMayHaveInputType.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\UrlCategory.cs\" />\r\n    <Compile Include=\"Registration\\Querying\\ChainResolutionCache.cs\" />\r\n    <Compile Include=\"Registration\\Querying\\IChainResolver.cs\" />\r\n    <Compile Include=\"Registration\\ServiceRegistry.cs\" />\r\n    <Compile Include=\"Runtime\\BehaviorInvoker.cs\" />\r\n    <Compile Include=\"Runtime\\IBehaviorInvocationFilter.cs\" />\r\n    <Compile Include=\"Runtime\\IBehaviorInvoker.cs\" />\r\n    <Compile Include=\"Runtime\\IgnoredRoute.cs\" />\r\n    <Compile Include=\"Http\\IHttpResponse.cs\" />\r\n    <Compile Include=\"Runtime\\InMemoryOutputWriter.cs\" />\r\n    <Compile Include=\"Runtime\\IOutputState.cs\" />\r\n    <Compile Include=\"Runtime\\IPartialFactory.cs\" />\r\n    <Compile Include=\"Runtime\\ISessionState.cs\" />\r\n    <Compile Include=\"Runtime\\NormalState.cs\" />\r\n    <Compile Include=\"Runtime\\OutputWriterExtensions.cs\" />\r\n    <Compile Include=\"Caching\\RecordedOutput.cs\" />\r\n    <Compile Include=\"Runtime\\SetterBinder.cs\" />\r\n    <Compile Include=\"Runtime\\UnknownExtensionException.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AllowRole.cs\" />\r\n    <Compile Include=\"Registration\\ModifyChainAttribute.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AuthorizationBehavior.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AuthorizationNode.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AuthorizationPolicyExecutor.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AuthorizationRight.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AuthorizedByAttribute.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\DefaultAuthorizationFailureHandler.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AuthorizationPreviewService.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\IAuthorizationFailureHandler.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\IAuthorizationPolicy.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\IAuthorizationPreviewService.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\PrincipalRoles.cs\" />\r\n    <Compile Include=\"Registration\\Routes\\StandardRoutePolicy.cs\" />\r\n    <Compile Include=\"View\\FubuHtmlDocument.cs\" />\r\n    <Compile Include=\"View\\FubuPageExtensions.cs\" />\r\n    <Compile Include=\"View\\HtmlTagExtensions.cs\" />\r\n    <Compile Include=\"Runtime\\IPartialInvoker.cs\" />\r\n    <Compile Include=\"Runtime\\PartialInvoker.cs\" />\r\n    <Compile Include=\"Registration\\Querying\\ChainInterrogator.cs\" />\r\n    <Compile Include=\"Attributes\\UrlAliasAttribute.cs\" />\r\n    <Compile Include=\"UrlContext.cs\" />\r\n    <Compile Include=\"Attributes\\UrlFolderAttribute.cs\" />\r\n    <Compile Include=\"Attributes\\UrlForNewAttribute.cs\" />\r\n    <Compile Include=\"Attributes\\UrlPatternAttribute.cs\" />\r\n    <Compile Include=\"Attributes\\UrlRegistryCategoryAttribute.cs\" />\r\n    <Compile Include=\"UrlStringExtensions.cs\" />\r\n    <Compile Include=\"Urls\\IChainUrlResolver.cs\" />\r\n    <Compile Include=\"Urls\\StubUrlRegistry.cs\" />\r\n    <Compile Include=\"Urls\\UrlRegistry.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\BehaviorChain.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\BehaviorExtensions.cs\" />\r\n    <Compile Include=\"Registration\\BehaviorGraph.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\BehaviorNode.cs\" />\r\n    <Compile Include=\"Urls\\Categories.cs\" />\r\n    <Compile Include=\"FubuRegistry.cs\" />\r\n    <Compile Include=\"Registration\\Routes\\FuncBuilder.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\ActionCall.cs\" />\r\n    <Compile Include=\"Registration\\IConfigurationAction.cs\" />\r\n    <Compile Include=\"Registration\\LambdaConfigurationAction.cs\" />\r\n    <Compile Include=\"Registration\\Routes\\RouteBuilder.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\Wrapper.cs\" />\r\n    <Compile Include=\"Registration\\Routes\\IRouteDefinition.cs\" />\r\n    <Compile Include=\"Registration\\Routes\\RouteDefinition.cs\" />\r\n    <Compile Include=\"Registration\\Routes\\RouteParameter.cs\" />\r\n    <Compile Include=\"Runtime\\FubuRequest.cs\" />\r\n    <Compile Include=\"Runtime\\OutputWriter.cs\" />\r\n    <Compile Include=\"Runtime\\IServiceFactory.cs\" />\r\n    <Compile Include=\"Runtime\\IFubuRequest.cs\" />\r\n    <Compile Include=\"Runtime\\MimeType.cs\" />\r\n    <Compile Include=\"Runtime\\Handlers\\FubuRouteHandler.cs\" />\r\n    <Compile Include=\"Runtime\\IOutputWriter.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\IPrincipalFactory.cs\" />\r\n    <Compile Include=\"Runtime\\SessionState\\IFlash.cs\" />\r\n    <Compile Include=\"Runtime\\SessionState\\IRequestDataProvider.cs\" />\r\n    <Compile Include=\"Urls\\IUrlRegistry.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\IAuthenticationContext.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\ISecurityContext.cs\" />\r\n    <Compile Include=\"View\\Attachment\\ViewBag.cs\" />\r\n    <Compile Include=\"View\\AutoImportModelNamespacesConvention.cs\" />\r\n    <Compile Include=\"View\\CommonViewNamespaces.cs\" />\r\n    <Compile Include=\"View\\IFubuView.cs\" />\r\n    <Compile Include=\"View\\IViewFacility.cs\" />\r\n    <Compile Include=\"View\\Model\\ViewCollection.cs\" />\r\n    <Compile Include=\"View\\Model\\ITemplateFile.cs\" />\r\n    <Compile Include=\"View\\IViewToken.cs\" />\r\n    <Compile Include=\"View\\Model\\Parsing.cs\" />\r\n    <Compile Include=\"View\\Model\\Template.cs\" />\r\n    <Compile Include=\"View\\Model\\TemplateLogger.cs\" />\r\n    <Compile Include=\"View\\Model\\ViewFacility.cs\" />\r\n    <Compile Include=\"View\\Model\\ViewFolder.cs\" />\r\n    <Compile Include=\"View\\Model\\ViewTypePool.cs\" />\r\n    <Compile Include=\"View\\PartialExpressionExtensions.cs\" />\r\n    <Compile Include=\"View\\Registration\\GenericParser.cs\" />\r\n    <Compile Include=\"View\\Rendering\\IRenderableView.cs\" />\r\n    <Compile Include=\"View\\ViewEngineSettings.cs\" />\r\n    <Compile Include=\"View\\ViewWriter.cs\" />\r\n    <Compile Include=\"Security\\WebAuthenticationContext.cs\" />\r\n    <Compile Include=\"Security\\WebSecurityContext.cs\" />\r\n    <Compile Include=\"Attributes\\WrapWithAttribute.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"fubu-diagnostics\\bootstrap.min.css\" />\r\n    <EmbeddedResource Include=\"fubu-diagnostics\\bootstrap.overrides.css\" />\r\n    <EmbeddedResource Include=\"fubu-diagnostics\\master.css\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"fubu-diagnostics\\FubuDiagnostics.js\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"fubu-diagnostics\\fubumvc.png\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"fubu-diagnostics\\jquery.min.js\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"fubu-diagnostics\\typeahead.bundle.min.js\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"..\\DiagnosticsHarness\\fubu-diagnostics\\root.js\">\r\n      <Link>fubu-diagnostics\\root.js</Link>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\r\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\r\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Dynamic.Runtime;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Runtime.Serialization.Primitives;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\r\n  </Target>\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n  <ItemGroup>\r\n    <Reference Include=\"FubuCore\">\r\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\r\n      <Private>True</Private>\r\n      <Paket>True</Paket>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"HtmlTags\">\r\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Win32.Primitives\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net20\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net35\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net40\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\netstandard1.0\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0') Or ($(TargetFrameworkProfile) == 'Profile5') Or ($(TargetFrameworkProfile) == 'Profile6') Or ($(TargetFrameworkProfile) == 'Profile14') Or ($(TargetFrameworkProfile) == 'Profile19') Or ($(TargetFrameworkProfile) == 'Profile24') Or ($(TargetFrameworkProfile) == 'Profile37') Or ($(TargetFrameworkProfile) == 'Profile42') Or ($(TargetFrameworkProfile) == 'Profile47') Or ($(TargetFrameworkProfile) == 'Profile92') Or ($(TargetFrameworkProfile) == 'Profile102') Or ($(TargetFrameworkProfile) == 'Profile136') Or ($(TargetFrameworkProfile) == 'Profile147') Or ($(TargetFrameworkProfile) == 'Profile158') Or ($(TargetFrameworkProfile) == 'Profile225') Or ($(TargetFrameworkProfile) == 'Profile240') Or ($(TargetFrameworkProfile) == 'Profile255') Or ($(TargetFrameworkProfile) == 'Profile328') Or ($(TargetFrameworkProfile) == 'Profile336') Or ($(TargetFrameworkProfile) == 'Profile344')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net40+sl5+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'MonoAndroid') Or ($(TargetFrameworkIdentifier) == 'MonoTouch') Or ($(TargetFrameworkIdentifier) == 'Xamarin.iOS') Or ($(TargetFrameworkIdentifier) == 'Xamarin.Mac') Or ($(TargetFrameworkProfile) == 'Profile7') Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile32') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile78') Or ($(TargetFrameworkProfile) == 'Profile111') Or ($(TargetFrameworkProfile) == 'Profile151') Or ($(TargetFrameworkProfile) == 'Profile157') Or ($(TargetFrameworkProfile) == 'Profile259')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.AppContext\">\r\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Buffers\">\r\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Console\">\r\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tools\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Dynamic.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.0\\System.Dynamic.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Dynamic.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.3\\System.Dynamic.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Calendars\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression.ZipFile\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Http\">\r\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"mscorlib\">\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Resources.ResourceManager\">\r\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Handles\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Loader\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Numerics\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.0\\System.Runtime.Serialization.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.3\\System.Runtime.Serialization.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Cng\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Csp\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Timer\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n</Project>"
  },
  {
    "path": "src/FubuMVC.Core/FubuMVC.Core.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.31101.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"FubuMVC.Core\", \"FubuMVC.Core.csproj\", \"{E18FD922-0E7A-49CD-B89F-473826077B9D}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "src/FubuMVC.Core/FubuModeExtensions.cs",
    "content": "using System;\nusing FubuCore;\n\nnamespace FubuMVC.Core\n{\n\n    /// <summary>\n    /// Detects the machine or environment \"mode\" of a FubuMVC application.  Generally used\n    /// to latch development features\n    /// </summary>\n    public static class FubuModeExtensions\n    {\n        public static readonly string Development = \"Development\";\n        public static readonly string Testing = \"Testing\";\n\n\n        /// <summary>\n        /// Is the \"Development\" mode detected?\n        /// </summary>\n        /// <returns></returns>\n        public static bool InDevelopment(this string mode)\n        {\n            if (mode.IsEmpty()) return false;\n\n            return mode.Equals(Development, StringComparison.OrdinalIgnoreCase);\n        }\n\n        public static bool InDiagnostics(this string mode)\n        {\n            if (mode.IsEmpty()) return false;\n\n            return mode.Equals(\"diagnostics\", StringComparison.OrdinalIgnoreCase);\n        }\n\n        public static bool InTesting(this string mode)\n        {\n            if (mode.IsEmpty()) return false;\n\n            return mode.Equals(\"testing\", StringComparison.OrdinalIgnoreCase);\n        }\n\n    }\n\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/FubuPackageRegistry.cs",
    "content": "﻿namespace FubuMVC.Core\r\n{\r\n    /// <summary>\r\n    /// The base FubuRegistry for importing endpoints from an external module that add vertical slices of functionality\r\n    /// to a base application\r\n    /// </summary>\r\n    public class FubuPackageRegistry : FubuRegistry, IFubuRegistryExtension\r\n    {\r\n        public FubuPackageRegistry() : this(string.Empty)\r\n        {\r\n        }\r\n\r\n        public FubuPackageRegistry(string urlPrefix)\r\n        {\r\n            UrlPrefix = urlPrefix;\r\n        }\r\n\r\n        public string UrlPrefix { get; protected internal set; }\r\n\r\n        void IFubuRegistryExtension.Configure(FubuRegistry registry)\r\n        {\r\n            registry.Import(this, UrlPrefix);\r\n\r\n            registry.Config.ImportGlobals(Config);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/FubuRegistry.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Reflection;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Http.Hosting;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.DSL;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.ServiceBus.Configuration;\r\nusing FubuMVC.Core.ServiceBus.Polling;\r\nusing FubuMVC.Core.ServiceBus.Registration;\r\nusing FubuMVC.Core.Services;\r\nusing StructureMap;\r\nusing PoliciesExpression = FubuMVC.Core.Registration.DSL.PoliciesExpression;\r\n\r\nnamespace FubuMVC.Core\r\n{\r\n    /// <summary>\r\n    ///   The <see cref = \"FubuRegistry\" /> class provides methods and grammars for configuring FubuMVC.\r\n    ///   Using a <see cref = \"FubuRegistry\" /> subclass is the recommended way of configuring FubuMVC.\r\n    /// </summary>\r\n    /// <example>\r\n    ///   public class MyFubuRegistry : FubuRegistry\r\n    ///   {\r\n    ///   public MyFubuRegistry()\r\n    ///   {\r\n    ///   Applies.ToThisAssembly();\r\n    ///   }\r\n    ///   }\r\n    /// </example>\r\n    public class FubuRegistry\r\n    {\r\n        private readonly IList<Type> _importedTypes = new List<Type>();\r\n        private readonly Assembly _applicationAssembly;\r\n        private readonly ConfigGraph _config;\r\n\r\n        private string _name;\r\n\r\n        public FubuRegistry()\r\n        {\r\n            var type = GetType();\r\n\r\n            _name = type.Name.Replace(\"TransportRegistry\", \"\").Replace(\"Registry\", \"\").ToLower();\r\n\r\n            if (type == typeof (FubuRegistry) || type == typeof (FubuPackageRegistry))\r\n            {\r\n                _applicationAssembly = AssemblyFinder.FindTheCallingAssembly();\r\n            }\r\n            else\r\n            {\r\n                _applicationAssembly = type.Assembly;\r\n            }\r\n\r\n            _config = new ConfigGraph(_applicationAssembly);\r\n\r\n            if (!this.GetType().CanBeCastTo<FubuPackageRegistry>())\r\n            {\r\n                // TODO: Hokey. Gotta be a better way to do this\r\n                AlterSettings<ChannelGraph>(x =>\r\n                {\r\n                    if (x.Name.IsEmpty())\r\n                    {\r\n                        x.Name = _name;\r\n                    }\r\n                });\r\n            }\r\n        }\r\n\r\n        public FubuRegistry(Action<FubuRegistry> configure) : this()\r\n        {\r\n            configure(this);\r\n        }\r\n\r\n        public FubuRuntime ToRuntime()\r\n        {\r\n            return new FubuRuntime(this);\r\n        }\r\n\r\n        /// <summary>\r\n        /// \r\n        /// </summary>\r\n        /// <param name=\"assembly\">The primary assembly for this application used in type scanning conventions and policies</param>\r\n        public FubuRegistry(Assembly assembly)\r\n        {\r\n            _applicationAssembly = assembly;\r\n            _config = new ConfigGraph(_applicationAssembly);\r\n        }\r\n\r\n        /// <summary>\r\n        /// If set, overrides the automatic determination of where FubuMVC loads\r\n        /// content files like views, scripts, and stylesheets\r\n        /// </summary>\r\n        public string RootPath;\r\n\r\n        /// <summary>\r\n        /// Sets the RootPath to the root directory of a named folder parallel\r\n        /// to the currently executing project\r\n        /// </summary>\r\n        /// <param name=\"directory\"></param>\r\n        public void UseParallelDirectory(string directory)\r\n        {\r\n            var path = FubuRuntime.DefaultApplicationPath();\r\n\r\n            RootPath = path.ParentDirectory().AppendPath(directory);\r\n        }\r\n\r\n\r\n        public int Port = PortFinder.FindPort(5500);\r\n        public IHost Host;\r\n\r\n        public void HostWith<T>(int port = 0) where T : IHost, new()\r\n        {\r\n            Host = new T();\r\n            if (port > 0) Port = port;\r\n        }\r\n\r\n\r\n        public string NodeName\r\n        {\r\n            set\r\n            {\r\n                _name = value;\r\n                AlterSettings<ChannelGraph>(x => x.Name = value);\r\n            }\r\n            get { return _name; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// A shortcut to programmatically set the NodeId\r\n        /// Useful for testing or running multiples of the same\r\n        /// configured Node on one box\r\n        /// </summary>\r\n        public string NodeId\r\n        {\r\n            set { AlterSettings<ChannelGraph>(x => x.NodeId = value); }\r\n        }\r\n\r\n        internal ConfigGraph Config\r\n        {\r\n            get { return _config; }\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Gets the name of the <see cref = \"FubuRegistry\" />. Mostly used for diagnostics.\r\n        /// </summary>\r\n        public virtual string Name\r\n        {\r\n            get { return GetType().ToString(); }\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        ///   Expression builder for configuring conventions that execute near the end of the build up of the <see cref = \"BehaviorGraph\" />.\r\n        ///   These are useful when conditionally applying conventions use criteria like route patterns, input/output models, etc\r\n        /// </summary>\r\n        public PoliciesExpression Policies\r\n        {\r\n            get { return new PoliciesExpression(_config); }\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Entry point to configuring model binding\r\n        /// </summary>\r\n        public ModelsExpression Models\r\n        {\r\n            get { return new ModelsExpression(Services); }\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Entry point to configuring how actions are found. Actions are the nuclei of behavior chains.\r\n        /// </summary>\r\n        public ActionCallCandidateExpression Actions\r\n        {\r\n            get { return new ActionCallCandidateExpression(_config); }\r\n        }\r\n\r\n        public ServiceRegistry Services\r\n        {\r\n            get { return _config.ApplicationServices; }\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        ///   Imports the specified <see cref = \"FubuRegistry\" />. \r\n        ///   Use a prefix to prefix routes generated by the registry.\r\n        /// </summary>\r\n        public void Import<T>(string prefix) where T : FubuRegistry, new()\r\n        {\r\n            _config.AddImport(new RegistryImport\r\n            {\r\n                Prefix = prefix,\r\n                Registry = new T()\r\n            });\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Imports the specified <see cref = \"FubuRegistry\" />. \r\n        ///   Use a prefix to prefix routes generated by the registry\r\n        /// </summary>\r\n        public void Import(FubuRegistry registry, string prefix)\r\n        {\r\n            _config.AddImport(new RegistryImport\r\n            {\r\n                Prefix = prefix,\r\n                Registry = registry\r\n            });\r\n        }\r\n\r\n        /// <summary>\r\n        /// Allows you to manipulate a settings object on <see cref=\"BehaviorGraph.Settings\"/>.\r\n        /// </summary>\r\n        public void AlterSettings<T>(Action<T> alteration) where T : class, new()\r\n        {\r\n            Config.Settings.Fill(new SettingAlteration<T>(alteration));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Completely replace the setting object for type T\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"settings\"></param>\r\n        public void ReplaceSettings<T>(T settings) where T : class\r\n        {\r\n            Config.Settings.Fill(new SettingReplacement<T>(settings));\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Allows you to directly manipulate the BehaviorGraph produced by this FubuRegistry.\r\n        ///   This should only be used after careful consideration and subsequent rejection of all other entry points to configuring the runtime\r\n        ///   behaviour.\r\n        /// </summary>\r\n        public void Configure(Action<BehaviorGraph> alteration)\r\n        {\r\n            addExplicit(alteration);\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        ///   Imports an IFubuRegistryExtension. The most\r\n        ///   prominent Extensions you will care to add are those that set up\r\n        ///   a view engine for you to use e.g. the WebFormsEngine or the\r\n        ///   SparkEngine\r\n        /// </summary>\r\n        public void Import<T>() where T : IFubuRegistryExtension, new()\r\n        {\r\n            if (_importedTypes.Contains(typeof (T))) return;\r\n\r\n\r\n            var extension = new T();\r\n\r\n            extension.Configure(this);\r\n\r\n            if (!typeof (T).CanBeCastTo<FubuPackageRegistry>())\r\n            {\r\n                _importedTypes.Add(typeof (T));\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Imports the declarations of an IFubuRegistryExtension\r\n        /// </summary>\r\n        /// <typeparam name = \"T\"></typeparam>\r\n        public void Import<T>(Action<T> configuration) where T : IFubuRegistryExtension, new()\r\n        {\r\n            var extension = new T();\r\n\r\n            configuration(extension);\r\n\r\n            extension.Configure(this);\r\n\r\n            _importedTypes.Add(typeof (T));\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Enable and configure optional features\r\n        /// </summary>\r\n        public FeatureExpression Features\r\n        {\r\n            get { return new FeatureExpression(this); }\r\n        }\r\n\r\n\r\n        private void addExplicit(Action<BehaviorGraph> action)\r\n        {\r\n            var explicitAction = new LambdaConfigurationAction(action);\r\n            _config.Local.Explicits.Fill(explicitAction);\r\n        }\r\n\r\n        public Assembly ApplicationAssembly\r\n        {\r\n            get { return _applicationAssembly; }\r\n        }\r\n\r\n        public void RoutePolicy<T>() where T : IRoutePolicy, new()\r\n        {\r\n            Configure(x => x.RoutePolicy = new T());\r\n        }\r\n\r\n\r\n        public HandlersExpression Handlers\r\n        {\r\n            get { return new HandlersExpression(this); }\r\n        }\r\n\r\n        public class HandlersExpression\r\n        {\r\n            private readonly FubuRegistry _parent;\r\n\r\n            public HandlersExpression(FubuRegistry parent)\r\n            {\r\n                _parent = parent;\r\n            }\r\n\r\n            public void Include(params Type[] types)\r\n            {\r\n                _parent.Config.Add(new ExplicitTypeHandlerSource(types));\r\n            }\r\n\r\n            public void Include<T>()\r\n            {\r\n                Include(typeof (T));\r\n            }\r\n\r\n            public void FindBy(Action<HandlerSource> configuration)\r\n            {\r\n                var source = new HandlerSource();\r\n                configuration(source);\r\n\r\n                _parent.Config.Add(source);\r\n            }\r\n\r\n            public void FindBy<T>() where T : IHandlerSource, new()\r\n            {\r\n                _parent.Config.Add(new T());\r\n            }\r\n\r\n            public void FindBy(IHandlerSource source)\r\n            {\r\n                _parent.Config.Add(source);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Completely remove the default handler finding\r\n            /// logic.  This is probably only applicable to \r\n            /// retrofitting the ServiceBus feature to existing \r\n            /// systems with a very different nomenclature\r\n            /// than the defaults\r\n            /// </summary>\r\n            public void DisableDefaultHandlerSource()\r\n            {\r\n                _parent.Config.Handlers.HandlerSources.RemoveAll(x => x is DefaultHandlerSource);\r\n            }\r\n        }\r\n\r\n\r\n        private Func<IContainer> _containerSource = () => new Container();\r\n        \r\n        public string Mode = null;\r\n\r\n        public void StructureMap(IContainer existing)\r\n        {\r\n            if (existing == null) throw new ArgumentNullException(\"existing\");\r\n\r\n            _containerSource = () => existing;\r\n        }\r\n\r\n        internal IContainer ToContainer()\r\n        {\r\n            return _containerSource == null ? new Container() : _containerSource();\r\n        }\r\n\r\n\r\n        public ServiceBusFeature ServiceBus\r\n        {\r\n            get { return new ServiceBusFeature(this); }\r\n        }\r\n\r\n\r\n        public PollingJobExpression Polling\r\n        {\r\n            get { return new PollingJobExpression(this); }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/FubuRuntime.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Threading.Tasks;\r\nusing System.Web.Hosting;\r\nusing System.Web.Routing;\r\nusing FubuCore;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Logging;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Hosting;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Http.Scenarios;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.StructureMap;\r\nusing FubuMVC.Core.StructureMap.Settings;\r\nusing FubuMVC.Core.UI;\r\nusing FubuMVC.Core.Urls;\r\nusing HtmlTags.Conventions;\r\nusing StructureMap;\r\n\r\nnamespace FubuMVC.Core\r\n{\r\n    using AppFunc = Func<IDictionary<string, object>, Task>;\r\n\r\n    /// <summary>\r\n    /// Represents a running FubuMVC application, with access to the key parts of the application\r\n    /// </summary>\r\n    public class FubuRuntime : IDisposable, IScenarioSupport\r\n    {\r\n        private readonly IServiceFactory _factory;\r\n        private readonly IContainer _container;\r\n        private readonly IList<RouteBase> _routes;\r\n        private bool _disposed;\r\n        private readonly IFubuApplicationFiles _files;\r\n        private readonly ActivationDiagnostics _diagnostics;\r\n        private readonly PerfTimer _perfTimer;\r\n        private readonly Lazy<AppFunc> _appFunc;\r\n        private IDisposable _server;\r\n        private string _baseAddress = \"http://memory\"; // leave this here\r\n        private readonly FubuRegistry _registry;\r\n\r\n\r\n        public static FubuRuntime Basic(Action<FubuRegistry> configure = null)\r\n        {\r\n            var assembly = AssemblyFinder.FindTheCallingAssembly();\r\n            var registry = new FubuRegistry(assembly);\r\n            if (configure != null)\r\n            {\r\n                configure(registry);\r\n            }\r\n\r\n            return new FubuRuntime(registry);\r\n        }\r\n\r\n        public static FubuRuntime BasicBus(Action<FubuRegistry> configure = null)\r\n        {\r\n            return Basic(r =>\r\n            {\r\n                configure?.Invoke(r);\r\n                r.ServiceBus.Enable(true);\r\n                r.ServiceBus.EnableInMemoryTransport();\r\n            });\r\n        }\r\n\r\n        public static FubuRuntime For<T>(Action<FubuRegistry> configure = null) where T : FubuRegistry, new()\r\n        {\r\n            var registry = new T();\r\n            configure?.Invoke(registry);\r\n\r\n            return new FubuRuntime(registry);\r\n        }\r\n\r\n        static FubuRuntime()\r\n        {\r\n            BindingContext.AddNamingStrategy(HttpRequestHeaders.HeaderDictionaryNameForProperty);\r\n        }\r\n\r\n        public FubuRuntime(FubuRegistry registry)\r\n        {\r\n            _registry = registry;\r\n\r\n            _appFunc = new Lazy<AppFunc>(() => FubuOwinHost.ToAppFunc(this));\r\n\r\n            RouteTable.Routes.Clear();\r\n\r\n            _diagnostics = new ActivationDiagnostics();\r\n\r\n            _perfTimer = _diagnostics.Timer;\r\n            _perfTimer.Start(\"FubuRuntime Bootstrapping\");\r\n\r\n\r\n            var packageAssemblies = AssemblyFinder.FindModuleAssemblies(_diagnostics);\r\n\r\n            var applicationPath = registry.RootPath ?? DefaultApplicationPath();\r\n            _files = new FubuApplicationFiles(applicationPath);\r\n\r\n            _perfTimer.Record(\"Applying IFubuRegistryExtension's\",\r\n                () => applyFubuExtensionsFromPackages(_diagnostics, packageAssemblies, registry));\r\n\r\n            _container = registry.ToContainer();\r\n\r\n            var graph = _perfTimer.Record(\"Building the BehaviorGraph\",\r\n                () => BehaviorGraphBuilder.Build(registry, _perfTimer, packageAssemblies, _diagnostics, _files));\r\n\r\n            _perfTimer.Record(\"Registering services into the IoC Container\",\r\n                () => registry.Config.RegisterServices(Mode, _container, graph));\r\n\r\n            _factory = new StructureMapServiceFactory(_container);\r\n\r\n            var routeTask = _perfTimer.RecordTask(\"Building Routes\", () =>\r\n            {\r\n                var routes = buildRoutes(_factory, graph);\r\n                routes.Each(r => RouteTable.Routes.Add(r));\r\n\r\n                return routes;\r\n            });\r\n\r\n            var library = HtmlConventionCollator.BuildHtmlConventions(graph);\r\n\r\n            _container.Configure(_ =>\r\n            {\r\n                _.Policies.OnMissingFamily<SettingPolicy>();\r\n\r\n                _.For<IFubuApplicationFiles>().Use(_files);\r\n                _.For<IServiceLocator>().Use<StructureMapServiceLocator>();\r\n                _.For<FubuRuntime>().Use(this);\r\n                _.For<IServiceFactory>().Use(_factory);\r\n                _.For<HtmlConventionLibrary>().Use(library);\r\n            });\r\n\r\n\r\n            Activate();\r\n\r\n            _routes = routeTask.Result();\r\n\r\n            \r\n\r\n            if (registry.Host != null)\r\n            {\r\n                startHosting();\r\n            }\r\n\r\n            _perfTimer.Stop();\r\n            Restarted = DateTime.Now;\r\n\r\n            _diagnostics.AssertNoFailures();\r\n        }\r\n\r\n        private void startHosting()\r\n        {\r\n            _baseAddress = \"http://localhost:\" + Port;\r\n\r\n            _perfTimer.Record(\"Starting up the embedded host at \" + _baseAddress, () =>\r\n            {\r\n                var settings = Get<OwinSettings>();\r\n                settings.EnvironmentData[OwinConstants.AppMode] = Mode == null ? string.Empty : Mode.ToLower();\r\n                var options = settings.EnvironmentData.ToDictionary();\r\n\r\n\r\n                _server = Host.Start(Port, _appFunc.Value, options);\r\n            });\r\n        }\r\n\r\n        public string BaseAddress => _baseAddress;\r\n\r\n        public IHost Host => _registry.Host;\r\n\r\n        public int Port => _registry.Port;\r\n\r\n        public string Mode => _registry.Mode;\r\n\r\n        // Build route objects from route definitions on graph + add packaging routes\r\n        private IList<RouteBase> buildRoutes(IServiceFactory factory, BehaviorGraph graph)\r\n        {\r\n            var routes = new List<RouteBase>();\r\n\r\n            graph.RoutePolicy.BuildRoutes(graph, factory).Each(routes.Add);\r\n\r\n            return routes;\r\n        }\r\n\r\n        private void applyFubuExtensionsFromPackages(IActivationDiagnostics diagnostics,\r\n            IEnumerable<Assembly> packageAssemblies, FubuRegistry registry)\r\n        {\r\n            // THIS IS NEW, ONLY ASSEMBLIES MARKED AS [FubuModule] will be scanned\r\n            var importers = packageAssemblies.Where(a => a.HasAttribute<FubuModuleAttribute>()).Select(\r\n                assem => Task.Factory.StartNew(() => assem.FindAllExtensions(diagnostics))).ToArray();\r\n\r\n            Task.WaitAll(importers, 5.Seconds());\r\n\r\n            importers.SelectMany(x => x.Result).Each(x => x.Apply(registry));\r\n        }\r\n\r\n\r\n        public ActivationDiagnostics ActivationDiagnostics => _diagnostics;\r\n\r\n        public IFubuApplicationFiles Files => _files;\r\n\r\n        public T Get<T>()\r\n        {\r\n            // This is important, do it from IServiceFactory so \r\n            // that it's using the current \"scope\" in Serenity\r\n            // testing\r\n            return _factory.Get<T>();\r\n        }\r\n\r\n        public IContainer CurrentContainer => _factory.As<StructureMapServiceFactory>().Container;\r\n\r\n        public IList<RouteBase> Routes => _routes;\r\n\r\n        public BehaviorGraph Behaviors => Get<BehaviorGraph>();\r\n\r\n        public void Dispose()\r\n        {\r\n            dispose();\r\n            GC.SuppressFinalize(this);\r\n        }\r\n\r\n        private void dispose()\r\n        {\r\n            if (_disposed) return;\r\n\r\n            _disposed = true;\r\n\r\n            _server?.SafeDispose();\r\n\r\n            if (_factory != null)\r\n            {\r\n                runDeactivators();\r\n            }\r\n\r\n\r\n            _container?.Dispose();\r\n        }\r\n\r\n        private void runDeactivators()\r\n        {\r\n            var logger = _factory.Get<ILogger>();\r\n            var deactivators = _factory.GetAll<IDeactivator>().ToArray();\r\n\r\n\r\n            deactivators.Each(x =>\r\n            {\r\n                var log = ActivationDiagnostics.LogFor(x);\r\n\r\n                try\r\n                {\r\n                    x.Deactivate(log);\r\n                }\r\n                catch (Exception e)\r\n                {\r\n                    logger.Error(\"Failed while running Deactivator\", e);\r\n                    log.MarkFailure(e);\r\n                }\r\n                finally\r\n                {\r\n                    logger.InfoMessage(() => new DeactivatorExecuted {Deactivator = x.ToString(), Log = log});\r\n                }\r\n            });\r\n        }\r\n\r\n        ~FubuRuntime()\r\n        {\r\n            try\r\n            {\r\n                dispose();\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine(\"An error occurred in the finalizer {0}\", ex);\r\n            }\r\n        }\r\n\r\n        internal void Activate()\r\n        {\r\n            var activators = _container.GetAllInstances<IActivator>();\r\n            _diagnostics.LogExecutionOnEachInParallel(activators,\r\n                (activator, log) => activator.Activate(log, _perfTimer));\r\n\r\n            _diagnostics.AssertNoFailures();\r\n\r\n            _diagnostics.Timer.Stop();\r\n\r\n            Restarted = DateTime.Now;\r\n        }\r\n\r\n        public DateTime? Restarted { get; private set; }\r\n\r\n        public static string DefaultApplicationPath()\r\n        {\r\n            return\r\n                HostingEnvironment.ApplicationPhysicalPath ?? determineApplicationPathFromAppDomain();\r\n        }\r\n\r\n        private static string determineApplicationPathFromAppDomain()\r\n        {\r\n            var basePath = AppDomain.CurrentDomain.BaseDirectory.TrimEnd(Path.DirectorySeparatorChar);\r\n            if (basePath.EndsWith(\"bin\"))\r\n            {\r\n                basePath = basePath.Substring(0, basePath.Length - 3).TrimEnd(Path.DirectorySeparatorChar);\r\n            }\r\n\r\n            var segments = basePath.Split(Path.DirectorySeparatorChar);\r\n            if (segments.Length > 2)\r\n            {\r\n                if (segments[segments.Length - 2].EqualsIgnoreCase(\"bin\"))\r\n                {\r\n                    return basePath.ParentDirectory().ParentDirectory();\r\n                }\r\n            }\r\n\r\n            return basePath;\r\n        }\r\n\r\n\r\n        OwinHttpResponse IScenarioSupport.Send(OwinHttpRequest request)\r\n        {\r\n            // TODO -- make the wait be configurable?\r\n            request.RewindData();\r\n\r\n            _appFunc.Value(request.Environment).Wait(15.Seconds());\r\n\r\n            return new OwinHttpResponse(request.Environment);\r\n        }\r\n\r\n        public OwinHttpResponse Scenario(Action<Scenario> configuration)\r\n        {\r\n            var scenario = new Scenario(this);\r\n            using (scenario)\r\n            {\r\n                configuration(scenario);\r\n\r\n                return scenario.Response;\r\n            }\r\n        }\r\n\r\n        string IScenarioSupport.RootUrl\r\n        {\r\n            get { return \"http://memory\"; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/AspNet/ASPNetObjectConversionFamily.cs",
    "content": "using System.ComponentModel;\r\nusing System.Reflection;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Descriptions;\r\n\r\nnamespace FubuMVC.Core.Http.AspNet\r\n{\r\n    [Title(\"ASP.Net Request Properties\")]\r\n    [Description(\"Passthrough conversion of any property value that matches a property on HttpRequestBase\")]\r\n    public class AspNetObjectConversionFamily : StatelessConverter\r\n    {\r\n        public override bool Matches(PropertyInfo property)\r\n        {\r\n            return RequestPropertyValueSource.IsSystemProperty(property);\r\n        }\r\n\r\n        public override object Convert(IPropertyContext context)\r\n        {\r\n            return context.RawValueFromRequest.RawValue;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/AspNet/AspNetHttpRequest.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.Specialized;\r\nusing System.IO;\r\nusing System.Web;\r\nusing FubuCore;\r\nusing System.Linq;\r\nusing FubuMVC.Core.Http.Cookies;\r\n\r\nnamespace FubuMVC.Core.Http.AspNet\r\n{\r\n    public class AspNetHttpRequest : IHttpRequest\r\n    {\r\n        private readonly HttpRequestBase _request;\r\n        private readonly HttpResponseBase _response;\r\n\r\n        public AspNetHttpRequest(HttpRequestBase request, HttpResponseBase response)\r\n        {\r\n            _request = request;\r\n            _response = response;\r\n        }\r\n\r\n        public string RawUrl()\r\n        {\r\n            return _request.RawUrl;\r\n        }\r\n\r\n        public string RelativeUrl()\r\n        {\r\n            var url = _request.AppRelativeCurrentExecutionFilePath;\r\n            \r\n            var querystring = _request.Url.Query;\r\n            if (querystring.IsNotEmpty())\r\n            {\r\n                url += querystring;\r\n            }\r\n\r\n            return url;\r\n        }\r\n\r\n        public string FullUrl()\r\n        {\r\n            return _request.Url.ToString();\r\n        }\r\n\r\n        public string ToFullUrl(string url)\r\n        {\r\n            if (Uri.IsWellFormedUriString(url, UriKind.Absolute)) return url;\r\n            if (url.IsEmpty()){ url = \"~/\"; }\r\n\r\n            var urlParts = url.Split(new[] { '?' }, 2);\r\n            var baseUrl = urlParts[0];\r\n\r\n\t\t\tif (baseUrl.IsEmpty())\r\n\t\t\t{\r\n\t\t\t\tbaseUrl = \"~/\";\r\n\t\t\t}\r\n            \r\n            if (!VirtualPathUtility.IsAbsolute(baseUrl))\r\n            {\r\n                baseUrl = VirtualPathUtility.Combine(\"~\", baseUrl);\r\n            }\r\n\r\n            var absoluteUrl = VirtualPathUtility.ToAbsolute(baseUrl);\r\n            \r\n            if (urlParts.Length > 1) absoluteUrl += (\"?\" + urlParts[1]);\r\n            return absoluteUrl;\r\n        }\r\n\r\n        public string HttpMethod()\r\n        {\r\n            return _request.HttpMethod;\r\n        }\r\n\r\n        public bool HasHeader(string key)\r\n        {\r\n            var headers = _request.Headers.Get(key);\r\n            if (headers == null) return false;\r\n\r\n            return headers.Any();\r\n        }\r\n\r\n        public IEnumerable<string> GetHeader(string key)\r\n        {\r\n            return _request.Headers.GetValues(key) ?? new string[0];\r\n        }\r\n\r\n        public IEnumerable<string> AllHeaderKeys()\r\n        {\r\n            return _request.Headers.AllKeys;\r\n        }\r\n\r\n        public NameValueCollection QueryString\r\n        {\r\n            get\r\n            {\r\n                return _request.QueryString;\r\n            }\r\n        }\r\n\r\n        public NameValueCollection Form\r\n        {\r\n            get\r\n            {\r\n                return _request.Form;\r\n            }\r\n        }\r\n\r\n        public Stream Input\r\n        {\r\n            get { return _request.InputStream; }\r\n        }\r\n\r\n        public bool IsClientConnected()\r\n        {\r\n            return _response.IsClientConnected;\r\n        }\r\n\r\n        public ICookies Cookies\r\n        {\r\n            get\r\n            {\r\n                return new Cookies.Cookies(this);\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/AspNet/AspNetHttpResponse.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing System.Threading.Tasks;\r\nusing System.Web;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Http.Compression;\r\nusing FubuMVC.Core.Http.Headers;\r\n\r\nnamespace FubuMVC.Core.Http.AspNet\r\n{\r\n    public class AspNetHttpResponse : IHttpResponse\r\n    {\r\n        private readonly HttpResponseBase _response;\r\n\r\n\r\n        public AspNetHttpResponse(HttpResponseBase response)\r\n        {\r\n            _response = response;\r\n        }\r\n\r\n        public void AppendHeader(string key, string value)\r\n        {\r\n            _response.AppendHeader(key, value);\r\n        }\r\n\r\n        public void WriteFile(string file)\r\n        {\r\n            _response.WriteFile(file);\r\n        }\r\n\r\n        public void WriteContentType(string contentType)\r\n        {\r\n            _response.ContentType = contentType;\r\n        }\r\n\r\n        public Task Write(string content)\r\n        {\r\n            var writer = new StreamWriter(_response.OutputStream);\r\n            return writer.WriteAsync(content);\r\n        }\r\n\r\n        public void Redirect(string url)\r\n        {\r\n            _response.Redirect(url, false);\r\n        }\r\n\r\n        public void WriteResponseCode(HttpStatusCode status, string description = null)\r\n        {\r\n            _response.StatusCode = (int) status;\r\n            if (description.IsNotEmpty()) _response.StatusDescription = description;\r\n        }\r\n\r\n        public int StatusCode\r\n        {\r\n            get { return _response.StatusCode; }\r\n            set { _response.StatusCode = value; }\r\n        }\r\n\r\n        public string StatusDescription\r\n        {\r\n            get { return _response.StatusDescription; }\r\n            set { _response.StatusDescription = value; }\r\n        }\r\n\r\n        public IEnumerable<string> HeaderValueFor(HttpResponseHeader key)\r\n        {\r\n            return HeaderValueFor(HttpResponseHeaders.HeaderNameFor(key));\r\n        }\r\n\r\n        public IEnumerable<string> HeaderValueFor(string headerKey)\r\n        {\r\n            return new []{_response.Headers[headerKey]};\r\n        }\r\n\r\n        public IEnumerable<Header> AllHeaders()\r\n        {\r\n            var keys = _response.Headers.AllKeys;\r\n            return keys.Select(x => new Header(x, _response.Headers[x])).ToArray();\r\n        }\r\n\r\n        public void UseEncoding(IHttpContentEncoding encoding)\r\n        {\r\n            _response.Filter = encoding.Encode(_response.Filter);\r\n        }\r\n\r\n        public Task Write(Func<Stream, Task> output)\r\n        {\r\n            return output(_response.OutputStream);\r\n        }\r\n\r\n        public void Flush()\r\n        {\r\n            if (_response.IsClientConnected && !_response.IsRequestBeingRedirected)\r\n            {\r\n                _response.Flush();\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/AspNet/AspNetServiceArguments.cs",
    "content": "using System.Web;\r\nusing System.Web.Routing;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Diagnostics.Instrumentation;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Http.AspNet\r\n{\r\n    public class AspNetServiceArguments : TypeArguments\r\n    {\r\n        public const string CHAIN_EXECUTION_LOG = \"ChainExecutionLog\";\r\n\r\n        public AspNetServiceArguments(RequestContext requestContext)\r\n        {\r\n            var currentRequest = new AspNetHttpRequest(requestContext.HttpContext.Request, requestContext.HttpContext.Response);\r\n\r\n            if (requestContext.HttpContext.Items.Contains(CHAIN_EXECUTION_LOG))\r\n            {\r\n                var log = requestContext.HttpContext.Items[CHAIN_EXECUTION_LOG].As<IChainExecutionLog>();\r\n                Set(log);\r\n            }\r\n\r\n            Set(requestContext.RouteData);\r\n            Set(requestContext.HttpContext);\r\n            //With(requestContext.HttpContext.Session);\r\n\r\n            \r\n            Set<IHttpRequest>(currentRequest);\r\n\r\n            Set<IHttpResponse>(new AspNetHttpResponse(requestContext.HttpContext.Response));\r\n        }\r\n\r\n    }\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/AspNet/RequestPropertyValueSource.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing System.Web;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Binding.Values;\r\nusing FubuCore.Reflection;\r\nusing FubuCore.Util;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Http.AspNet\r\n{\r\n    public class RequestPropertyValueSource : IValueSource\r\n    {\r\n        private static readonly Cache<string, Func<HttpRequestBase, object>> _requestProperties =\r\n            new Cache<string, Func<HttpRequestBase, object>>();\r\n\r\n        private static readonly IList<PropertyInfo> _systemProperties = new List<PropertyInfo>();\r\n        private readonly HttpRequestBase _request;\r\n\r\n        static RequestPropertyValueSource()\r\n        {\r\n            AddRequestProperty(r => r.AcceptTypes);\r\n            AddRequestProperty(r => r.ApplicationPath);\r\n            AddRequestProperty(r => r.AppRelativeCurrentExecutionFilePath);\r\n            AddRequestProperty(r => r.Browser);\r\n            AddRequestProperty(r => r.ClientCertificate);\r\n            AddRequestProperty(r => r.ContentEncoding);\r\n            AddRequestProperty(r => r.ContentLength);\r\n            AddRequestProperty(r => r.ContentType);\r\n            AddRequestProperty(r => r.Cookies);\r\n            AddRequestProperty(r => r.CurrentExecutionFilePath);\r\n            AddRequestProperty(r => r.FilePath);\r\n            AddRequestProperty(r => r.Files);\r\n            AddRequestProperty(r => r.Filter);\r\n            AddRequestProperty(r => r.Form);\r\n            AddRequestProperty(r => r.Headers);\r\n            AddRequestProperty(r => r.HttpMethod);\r\n            AddRequestProperty(r => r.IsAuthenticated);\r\n            AddRequestProperty(r => r.IsLocal);\r\n            AddRequestProperty(r => r.IsSecureConnection);\r\n            AddRequestProperty(r => r.LogonUserIdentity);\r\n            AddRequestProperty(r => r.Params);\r\n            AddRequestProperty(r => r.Path);\r\n            AddRequestProperty(r => r.PathInfo);\r\n            AddRequestProperty(r => r.PhysicalApplicationPath);\r\n            AddRequestProperty(r => r.PhysicalPath);\r\n            AddRequestProperty(r => r.QueryString);\r\n            AddRequestProperty(r => r.RawUrl);\r\n            AddRequestProperty(r => r.RequestType);\r\n            AddRequestProperty(r => r.ServerVariables);\r\n            AddRequestProperty(r => r.TotalBytes);\r\n            AddRequestProperty(r => r.UrlReferrer);\r\n            AddRequestProperty(r => r.UserAgent);\r\n            AddRequestProperty(r => r.UserHostAddress);\r\n            AddRequestProperty(r => r.UserHostName);\r\n            AddRequestProperty(r => r.UserLanguages);\r\n        }\r\n\r\n        public static bool IsSystemProperty(PropertyInfo property)\r\n        {\r\n            return\r\n                _systemProperties.Any(\r\n                    x => property.PropertyType.IsAssignableFrom(x.PropertyType) && x.Name == property.Name);\r\n        }\r\n\r\n        public static void AddRequestProperty(Expression<Func<HttpRequestBase, object>> expression)\r\n        {\r\n            var property = ReflectionHelper.GetProperty(expression);\r\n            _systemProperties.Add(property);\r\n\r\n            _requestProperties[property.Name] = expression.Compile();\r\n        }\r\n\r\n        public RequestPropertyValueSource(HttpRequestBase request)\r\n        {\r\n            _request = request;\r\n        }\r\n\r\n        //AddLocator(RequestDataSource.RequestProperty, key => GetRequestProperty(request, key),\r\n        //               () => _requestProperties.GetAllKeys());\r\n\r\n        public bool Has(string key)\r\n        {\r\n            return _systemProperties.Any(x => x.Name == key);\r\n        }\r\n\r\n        public object Get(string key)\r\n        {\r\n            return GetRequestProperty(_request, key);\r\n        }\r\n\r\n        public bool HasChild(string key)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        public IValueSource GetChild(string key)\r\n        {\r\n            throw new NotSupportedException();\r\n        }\r\n\r\n        public IEnumerable<IValueSource> GetChildren(string key)\r\n        {\r\n            return Enumerable.Empty<IValueSource>();\r\n        }\r\n\r\n        public void WriteReport(IValueReport report)\r\n        {\r\n            _systemProperties.Each(prop => report.Value(prop.Name, Get(prop.Name)));\r\n        }\r\n\r\n        public bool Value(string key, Action<BindingValue> callback)\r\n        {\n            if (!Has(key)) return false;\r\n\r\n            callback(new BindingValue{\r\n                RawKey = key,\r\n                RawValue = Get(key),\r\n                Source = Provenance\r\n            });\r\n\r\n            return true;\r\n        }\r\n\r\n        public string Provenance\r\n        {\r\n            get { return RequestDataSource.RequestProperty.ToString(); }\r\n        }\r\n\r\n        private static object GetRequestProperty(HttpRequestBase request, string key)\r\n        {\r\n            return _requestProperties.Has(key) ? _requestProperties[key](request) : null;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/CommaTokenParser.cs",
    "content": "using System.Collections.Generic;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    public class CommaTokenParser\r\n    {\r\n        private readonly List<string> _tokens = new List<string>();\r\n        private List<char> _characters;\r\n        private IMode _mode;\r\n\r\n        public CommaTokenParser()\r\n        {\r\n            _mode = new Searching(this);\r\n        }\r\n\r\n        public void Read(char c)\r\n        {\r\n            _mode.Read(c);\r\n        }\r\n\r\n        private void addChar(char c)\r\n        {\r\n            _characters.Add(c);\r\n        }\r\n\r\n        public IEnumerable<string> Tokens\r\n        {\r\n            get\r\n            {\r\n                return _tokens;\r\n            }\r\n        }\r\n\r\n        private void startToken(IMode mode)\r\n        {\r\n            _mode = mode;\r\n            _characters = new List<char>();\r\n        }\r\n\r\n        private void endToken()\r\n        {\r\n            var @string = new string(_characters.ToArray());\r\n            _tokens.Add(@string);\r\n\r\n            _mode = new Searching(this);\r\n        }\r\n\r\n\r\n        public interface IMode\r\n        {\r\n            void Read(char c);\r\n        }\r\n\r\n        public class Searching : IMode\r\n        {\r\n            private readonly CommaTokenParser _parent;\r\n\r\n            public Searching(CommaTokenParser parent)\r\n            {\r\n                _parent = parent;\r\n            }\r\n\r\n            public void Read(char c)\r\n            {\r\n                if (c == ',') return;\r\n\r\n                if (c == '\"')\r\n                {\r\n                    _parent.startToken(new InsideQuotedToken(_parent));\r\n                }\r\n                else\r\n                {\r\n                    var normalToken = new InsideNormalToken(_parent);\r\n                    _parent.startToken(normalToken);\r\n                    normalToken.Read(c);\r\n                }\r\n            }\r\n        }\r\n\r\n        public class InsideQuotedToken : IMode\r\n        {\r\n            private readonly CommaTokenParser _parent;\r\n\r\n            public InsideQuotedToken(CommaTokenParser parent)\r\n            {\r\n                _parent = parent;\r\n            }\r\n\r\n\r\n            public void Read(char c)\r\n            {\r\n                if (c == '\"')\r\n                {\r\n                    _parent.endToken();\r\n                }\r\n                else\r\n                {\r\n                    _parent.addChar(c);\r\n                }\r\n            }\r\n        }\r\n\r\n        public class InsideNormalToken : IMode\r\n        {\r\n            private readonly CommaTokenParser _parent;\r\n\r\n            public InsideNormalToken(CommaTokenParser parent)\r\n            {\r\n                _parent = parent;\r\n            }\r\n\r\n            public void Read(char c)\r\n            {\r\n                if (c == ',')\r\n                {\r\n                    _parent.endToken();\r\n                }\r\n                else\r\n                {\r\n                    _parent.addChar(c);\r\n                }\r\n            }\r\n        }\r\n\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Compression/ApplyCompression.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.Http.Compression\n{\n    [Description(\"Applies gzip and deflate compression on all chains without the [DoNotCompress] attribute\")]\n    public class ApplyCompression : IConfigurationAction\n    {\n        public void Configure(BehaviorGraph graph)\n        {\n            graph.Chains\n                .Where(chain => chain.Calls.Any(x => !x.HasAttribute<DoNotCompressAttribute>()))\n                .Each(chain => chain.ApplyCompression());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Compression/ContentEncoding.cs",
    "content": "using System;\r\n\r\nnamespace FubuMVC.Core.Http.Compression\r\n{\r\n    public class ContentEncoding\r\n    {\r\n        public static ContentEncoding GZip = new ContentEncoding(\"gzip\");\r\n        public static ContentEncoding Deflate = new ContentEncoding(\"deflate\");\r\n        public static ContentEncoding None = new ContentEncoding(\"None\");\r\n\r\n        private readonly string _encoding;\r\n\r\n        private ContentEncoding(string encoding)\r\n        {\r\n            _encoding = encoding;\r\n        }\r\n\r\n        public string Value\r\n        {\r\n            get { return _encoding; }\r\n        }\r\n\r\n        public bool Matches(string encoding)\r\n        {\r\n            return Value.Equals(encoding, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof (ContentEncoding)) return false;\r\n            return Equals((ContentEncoding) obj);\r\n        }\r\n\r\n        public bool Equals(ContentEncoding other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other._encoding, _encoding);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return _encoding.GetHashCode();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Compression/DeflateHttpContentEncoding.cs",
    "content": "using System.IO;\r\nusing System.IO.Compression;\r\n\r\nnamespace FubuMVC.Core.Http.Compression\r\n{\r\n    public class DeflateHttpContentEncoding : IHttpContentEncoding\r\n    {\r\n        public ContentEncoding MatchingEncoding\r\n        {\r\n            get { return ContentEncoding.Deflate; }\r\n        }\r\n\r\n        public Stream Encode(Stream content)\r\n        {\r\n            return new DeflateStream(content, CompressionMode.Compress);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Compression/DoNotCompressAttribute.cs",
    "content": "﻿using System;\r\n\r\nnamespace FubuMVC.Core.Http.Compression\r\n{\r\n    // Just a marker to make the convention flow easier\r\n    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]\r\n    public class DoNotCompressAttribute : Attribute\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Compression/GZipHttpContentEncoding.cs",
    "content": "using System.IO;\r\nusing System.IO.Compression;\r\n\r\nnamespace FubuMVC.Core.Http.Compression\r\n{\r\n    public class GZipHttpContentEncoding : IHttpContentEncoding\r\n    {\r\n        public ContentEncoding MatchingEncoding\r\n        {\r\n            get { return ContentEncoding.GZip; }\r\n        }\r\n\r\n        public Stream Encode(Stream content)\r\n        {\r\n            return new GZipStream(content, CompressionMode.Compress, true);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Compression/HttpContentEncodingFilter.cs",
    "content": "using FubuCore.Binding;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Runtime;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Http.Compression\r\n{\r\n    public class HttpContentEncodingFilter : IBehaviorInvocationFilter, DescribesItself\r\n    {\r\n        private readonly IHttpContentEncoders _encoders;\r\n\r\n        public HttpContentEncodingFilter(IHttpContentEncoders encoders)\r\n        {\r\n            _encoders = encoders;\r\n        }\r\n\r\n        public DoNext Filter(TypeArguments arguments)\r\n        {\r\n            if (arguments.Has(typeof (Latch))) return DoNext.Stop;\r\n\r\n\r\n            var request = arguments.Get<IHttpRequest>();\r\n            if (!request.HasHeader(HttpRequestHeaders.AcceptEncoding)) return DoNext.Continue;\r\n\r\n            var acceptEncoding = request\r\n                .GetSingleHeader(HttpRequestHeaders.AcceptEncoding);\r\n\r\n\r\n            var encoding = _encoders.MatchFor(acceptEncoding);\r\n            var writer = arguments.Get<IHttpResponse>();\r\n            writer.AppendHeader(HttpRequestHeaders.ContentEncoding, encoding.MatchingEncoding.Value);\r\n\r\n            writer.UseEncoding(encoding);\r\n\r\n            arguments.Set(typeof (Latch), new Latch());\r\n\r\n            return DoNext.Continue;\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.AddList(\"Encoders\", _encoders.Encodings);\r\n        }\r\n    }\r\n\r\n    public class Latch\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Compression/IHttpContentEncoders.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Core.Http.Compression\r\n{\r\n    public interface IHttpContentEncoders\r\n    {\r\n        IHttpContentEncoding MatchFor(string acceptEncoding);\r\n        IEnumerable<IHttpContentEncoding> Encodings { get; }\r\n    }\r\n\r\n    public class HttpContentEncoders : IHttpContentEncoders\r\n    {\r\n        private readonly IEnumerable<IHttpContentEncoding> _encodings;\r\n\r\n        public HttpContentEncoders(IEnumerable<IHttpContentEncoding> encodings)\r\n        {\r\n            _encodings = encodings;\r\n        }\r\n\r\n        public IEnumerable<IHttpContentEncoding> Encodings\r\n        {\r\n            get { return _encodings; }\r\n        }\r\n\r\n        public IHttpContentEncoding MatchFor(string acceptEncoding)\r\n        {\r\n            var acceptableValues = acceptEncoding\r\n                .Split(new[] {\",\"}, StringSplitOptions.RemoveEmptyEntries)\r\n                .Select(x => x.Trim());\r\n\r\n            IHttpContentEncoding encoding = new PassthroughEncoding();\r\n            foreach(var value in acceptableValues)\r\n            {\r\n                var matching = _encodings.FirstOrDefault(x => x.MatchingEncoding.Matches(value));\r\n                if (matching == null) continue;\r\n                \r\n                encoding = matching;\r\n                break;\r\n            }\r\n\r\n            return encoding;\r\n        }\r\n\r\n        public class PassthroughEncoding : IHttpContentEncoding\r\n        {\r\n            public ContentEncoding MatchingEncoding => ContentEncoding.None;\r\n\r\n            public Stream Encode(Stream content)\r\n            {\r\n                return content;\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Compression/IHttpContentEncoding.cs",
    "content": "using System.IO;\r\n\r\nnamespace FubuMVC.Core.Http.Compression\r\n{\r\n    public interface IHttpContentEncoding\r\n    {\r\n        ContentEncoding MatchingEncoding { get; }\r\n        Stream Encode(Stream content);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/ConnegQuerystring.cs",
    "content": "﻿using System.Collections.Specialized;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    public class ConnegQuerystring : DescribesItself\r\n    {\r\n        public ConnegQuerystring(string key, string value, string mimetype)\r\n        {\r\n            Key = key;\r\n            Value = value;\r\n            Mimetype = mimetype;\r\n        }\r\n\r\n        public ConnegQuerystring(string key, string value, MimeType mimetype)\r\n        {\r\n            Key = key;\r\n            Value = value;\r\n            Mimetype = mimetype.Value;\r\n        }\r\n\r\n        public string Key { get; private set; }\r\n        public string Value { get; private set; }\r\n        public string Mimetype { get; private set; }\r\n\r\n        public string Determine(NameValueCollection querystring)\r\n        {\r\n            var value = querystring[Key];\r\n\r\n\r\n            return value != null && value.EqualsIgnoreCase(Value)\r\n                ? Mimetype\r\n                : null;\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.ShortDescription = \"?{0}={1} is '{2}'\".ToFormat(Key, Value, Mimetype);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/ConnegSettings.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Json;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Formatters;\r\nusing FubuMVC.Core.View;\r\nusing FubuMVC.Core.View.Attachment;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    public class ConnegSettings : DescribesItself\r\n    {\r\n        public readonly ConnegRules Rules = new ConnegRules();\r\n\r\n        public ConnegSettings()\r\n        {\r\n            Rules.AddToEnd<AjaxContinuations>();\r\n            Rules.AddToEnd<StringOutput>();\r\n            Rules.AddToEnd<HtmlTagsRule>();\r\n            Rules.AddToEnd<CustomReadersAndWriters>();\r\n            Rules.AddToEnd<ViewAttachment>();\r\n            Rules.AddToEnd<DefaultReadersAndWriters>();\r\n        }\r\n\r\n        void DescribesItself.Describe(Description _)\r\n        {\r\n            _.Title = \"Content Negotiation Rules and Configuration\";\r\n\r\n            if (Formatters.Any())\r\n            {\r\n                _.AddList(\"Formatters\", Formatters);\r\n            }\r\n\r\n            _.AddList(\"Rules\", Rules);\r\n            _.AddList(\"Conneg Querystring Rules\", QuerystringParameters);\r\n\r\n            if (Corrections.Any())\r\n            {\r\n                _.AddList(\"Mimetype Corrections\", Corrections);\r\n            }\r\n        }\r\n\r\n        public void ReadConnegGraph(BehaviorGraph graph)\r\n        {\r\n            _graph = ConnegGraph.Build(graph);\r\n        }\r\n\r\n        public void StoreViews(Task<ViewBag> views)\r\n        {\r\n            _views = views;\r\n        }\r\n\r\n        public ConnegGraph Graph\r\n        {\r\n            get\r\n            {\r\n                // This makes UT's run cleanly\r\n                if (_graph == null) return null;\r\n\r\n                _graph.Wait(5.Seconds());\r\n                return _graph.Result;\r\n            }\r\n        }\r\n\r\n        public ViewBag Views\r\n        {\r\n            get\r\n            {\r\n                if (_views == null) return new ViewBag(Enumerable.Empty<IViewToken>());\r\n\r\n                _views.Wait(5.Seconds());\r\n                return _views.Result;\r\n            }\r\n        }\r\n\r\n        public void ApplyRules(InputNode node)\r\n        {\r\n            Rules.Top.ApplyInputs(node, node.ParentChain() ?? new BehaviorChain(), this);\r\n        }\r\n\r\n        public void ApplyRules(OutputNode node)\r\n        {\r\n            Rules.Top.ApplyOutputs(node, node.ParentChain() ?? new BehaviorChain(), this);\r\n        }\r\n\r\n        public readonly IList<ConnegQuerystring> QuerystringParameters =\r\n            new List<ConnegQuerystring>\r\n            {\r\n                new ConnegQuerystring(\"Format\", \"JSON\", MimeType.Json),\r\n                new ConnegQuerystring(\"Format\", \"XML\", MimeType.Xml)\r\n            };\r\n\r\n        public readonly IList<IFormatter> Formatters = new List<IFormatter>\r\n        {\r\n            new NewtonsoftJsonFormatter(),\r\n            new XmlFormatter()\r\n        };\r\n\r\n        public readonly IList<IMimetypeCorrection> Corrections = new List<IMimetypeCorrection>();\r\n        private Task<ConnegGraph> _graph;\r\n        private Task<ViewBag> _views;\r\n\r\n        public void InterpretQuerystring(CurrentMimeType mimeType, IHttpRequest request)\r\n        {\r\n            var corrected = QuerystringParameters.FirstValue(x => x.Determine(request.QueryString));\r\n            if (corrected.IsNotEmpty())\r\n            {\r\n                mimeType.AcceptTypes = new MimeTypeList(corrected);\r\n            }\r\n        }\r\n\r\n        public IFormatter FormatterFor(MimeType mimeType)\r\n        {\r\n            return FormatterFor(mimeType.Value);\r\n        }\r\n\r\n        private IFormatter FormatterFor(string mimeType)\r\n        {\r\n            return Formatters.FirstOrDefault(x => x.MatchingMimetypes.Contains(mimeType.ToLowerInvariant()));\r\n        }\r\n\r\n        public void AddFormatter(IFormatter formatter)\r\n        {\r\n            Formatters.Insert(0, formatter);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Cookies/Cookie.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Http.Cookies\r\n{\r\n    public class Cookie\r\n    {\r\n        private readonly IList<CookieState> _states = new List<CookieState>();\r\n\r\n        public Cookie()\r\n        {\r\n        }\r\n\r\n        public Cookie(string name)\r\n        {\r\n            var state = new CookieState(name);\r\n            _states.Add(state);\r\n        }\r\n\r\n        public Cookie(string name, string value)\r\n        {\r\n            var state = new CookieState(name, value);\r\n            _states.Add(state);\r\n        }\r\n\r\n        public Cookie(string name, string value, string domain) : this(name, value)\r\n        {\r\n            Domain = domain;\r\n        }\r\n\r\n        public IEnumerable<CookieState> States\r\n        {\r\n            get { return _states; }\r\n        }\r\n\r\n        public CookieState For(string key)\r\n        {\r\n            return _states.FirstOrDefault(x => x.Name.EqualsIgnoreCase(key));\r\n        }\r\n\r\n        public bool Matches(string name)\r\n        {\r\n            return _states.Any(x => x.Name.EqualsIgnoreCase(name));\r\n        }\r\n\r\n        /// <summary>\r\n        ///     Gets or sets the expiration date and time for the cookie.\r\n        /// </summary>\r\n        /// <returns>\r\n        ///     The time of day (on the client) at which the cookie expires.\r\n        /// </returns>\r\n        public DateTimeOffset? Expires { get; set; }\r\n\r\n        /// <summary>\r\n        ///     Gets or sets the maximum age permitted for a resource.\r\n        /// </summary>\r\n        /// <returns>\r\n        ///     The maximum age permitted for a resource.\r\n        /// </returns>\r\n        public TimeSpan? MaxAge { get; set; }\r\n\r\n        /// <summary>\r\n        ///     Gets or sets the domain to associate the cookie with.\r\n        /// </summary>\r\n        /// <returns>\r\n        ///     The name of the domain to associate the cookie with.\r\n        /// </returns>\r\n        public string Domain { get; set; }\r\n\r\n        /// <summary>\r\n        ///     Gets or sets the virtual path to transmit with the current cookie.\r\n        /// </summary>\r\n        /// <returns>\r\n        ///     The virtual path to transmit with the cookie.\r\n        /// </returns>\r\n        public string Path { get; set; }\r\n\r\n        /// <summary>\r\n        ///     Gets or sets a value indicating whether to transmit the cookie using Secure Sockets Layer (SSL)that is, over HTTPS only.\r\n        /// </summary>\r\n        /// <returns>\r\n        ///     true to transmit the cookie over an SSL connection (HTTPS); otherwise, false.\r\n        /// </returns>\r\n        public bool Secure { get; set; }\r\n\r\n        /// <summary>\r\n        ///     Gets or sets a value that specifies whether a cookie is accessible by client-side script.\r\n        /// </summary>\r\n        /// <returns>\r\n        ///     true if the cookie has the HttpOnly attribute and cannot be accessed through a client-side script; otherwise, false.\r\n        /// </returns>\r\n        public bool HttpOnly { get; set; }\r\n\r\n        /// <summary>\r\n        /// This is only usable if there is only one state and one value\r\n        /// </summary>\r\n        public string Value\r\n        {\r\n            get\r\n            {\r\n                if (_states.Count != 1)\r\n                {\r\n                    return null;\r\n                }\r\n\r\n                return _states.Single().Value;\r\n            }\r\n            set\r\n            {\r\n                if (_states.Count != 1)\r\n                {\r\n                    throw new InvalidOperationException(\"This action is only valid for single value cookies\");\r\n                }\r\n\r\n                _states.Single().Value = value;\r\n            }\r\n        }\r\n\r\n        public Cookie Add(CookieState state)\r\n        {\r\n            _states.Add(state);\r\n            return this;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var builder = new StringBuilder();\r\n\r\n            _states.Each(x => {\r\n                x.Write(builder);\r\n                builder.Append(\"; \");\r\n            });\r\n\r\n            if (Expires.HasValue)\r\n            {\r\n                builder.Append(\"expires=\");\r\n                string displayedExpiration = Expires.Value.ToString(\"r\", CultureInfo.InvariantCulture);\r\n                builder.Append(displayedExpiration);\r\n                builder.Append(\"; \");\r\n            }\r\n\r\n            if (MaxAge.HasValue)\r\n            {\r\n                builder.Append(\"max-age=\");\r\n                builder.Append(MaxAge.Value.TotalSeconds);\r\n                builder.Append(\"; \");\r\n            }\r\n\r\n            if (Domain.IsNotEmpty())\r\n            {\r\n                builder.Append(\"domain=\");\r\n                builder.Append(Domain);\r\n                builder.Append(\"; \");\r\n            }\r\n\r\n            if (Path.IsNotEmpty())\r\n            {\r\n                builder.Append(\"path=\");\r\n                builder.Append(Path);\r\n                builder.Append(\"; \");  \r\n            }\r\n\r\n            if (Secure)\r\n            {\r\n                builder.Append(\"secure; \");\r\n            }\r\n\r\n            if (HttpOnly)\r\n            {\r\n                builder.Append(\"httponly; \");\r\n            }\r\n\r\n           \r\n\r\n            return builder.ToString().TrimEnd(';', ' ');\r\n        }\r\n\r\n        public static string DateToString(DateTimeOffset dateTime)\r\n        {\r\n            return dateTime.ToUniversalTime().ToString(\"r\", (IFormatProvider)CultureInfo.InvariantCulture);\r\n        }\r\n\r\n        public string GetValue(string name)\r\n        {\r\n            var state = _states.FirstOrDefault(x => x.Name.EqualsIgnoreCase(name));\r\n            return state == null ? null : state.Value;\r\n        }\r\n    }\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Cookies/CookieParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.Linq;\r\nusing System.Web;\r\nusing FubuCore;\r\nusing FubuCore.Util;\r\n\r\nnamespace FubuMVC.Core.Http.Cookies\r\n{\r\n    public static class CookieParser\r\n    {\r\n        private static readonly string[] dateFormats = new string[15]\r\n    {\r\n      \"ddd, d MMM yyyy H:m:s 'GMT'\",\r\n      \"ddd, d MMM yyyy H:m:s\",\r\n      \"d MMM yyyy H:m:s 'GMT'\",\r\n      \"d MMM yyyy H:m:s\",\r\n      \"ddd, d MMM yy H:m:s 'GMT'\",\r\n      \"ddd, d MMM yy H:m:s\",\r\n      \"d MMM yy H:m:s 'GMT'\",\r\n      \"d MMM yy H:m:s\",\r\n      \"dddd, d'-'MMM'-'yy H:m:s 'GMT'\",\r\n      \"dddd, d'-'MMM'-'yy H:m:s\",\r\n      \"ddd MMM d H:m:s yyyy\",\r\n      \"ddd, d MMM yyyy H:m:s zzz\",\r\n      \"ddd, d MMM yyyy H:m:s\",\r\n      \"d MMM yyyy H:m:s zzz\",\r\n      \"d MMM yyyy H:m:s\"\r\n    };\r\n\r\n        private const string ExpiresToken = \"expires\";\r\n        private const string MaxAgeToken = \"max-age\";\r\n        private const string DomainToken = \"domain\";\r\n        private const string PathToken = \"path\";\r\n        private const string SecureToken = \"secure\";\r\n        private const string HttpOnlyToken = \"httponly\";\r\n\r\n        private static readonly Cache<string, Action<Cookie, string>> _setters =\r\n            new Cache<string, Action<Cookie, string>>();\r\n\r\n\r\n        static CookieParser()\r\n        {\r\n            _setters[ExpiresToken] = (cookie, value) => {\r\n                DateTimeOffset offset;\r\n                if (TryParseDate(value, out offset))\r\n                {\r\n                    cookie.Expires = offset;\r\n                }\r\n                \r\n                \r\n            };\r\n\r\n            _setters[MaxAgeToken] = (cookie, value) => {\r\n                try\r\n                {\r\n                    var seconds = int.Parse(value.Trim());\r\n                    cookie.MaxAge = seconds.Seconds();\r\n                }\r\n                catch (Exception)\r\n                {\r\n                    \r\n                    // doing nothing here\r\n                }\r\n            };\r\n\r\n            _setters[DomainToken] = (cookie, value) => { cookie.Domain = value; };\r\n\r\n            _setters[PathToken] = (cookie, value) => {\r\n                cookie.Path = value.IsEmpty() ? \"/\" : value;\r\n            };\r\n\r\n            _setters[SecureToken] = (cookie, value) => { cookie.Secure = true; };\r\n\r\n            _setters[HttpOnlyToken] = (cookie, value) => { cookie.HttpOnly = true; };\r\n\r\n        }\r\n\r\n        public static Cookie ToCookie(string headerValue)\r\n        {\r\n            if (headerValue.IsEmpty()) return null;\r\n\r\n            var cookie = new Cookie();\r\n\r\n            var segments = SplitValues(headerValue).Select(x => new Segment(x.Trim()));\r\n            segments.Each(segment => {\r\n                string canonicalKey = segment.Key.ToLowerInvariant();\r\n\r\n                if (_setters.Has(canonicalKey))\r\n                {\r\n                    _setters[canonicalKey](cookie, segment.Value);\r\n                }\r\n                else\r\n                {\r\n                    var state = CookieState.For(segment);\r\n                    cookie.Add(state);\r\n                }\r\n            });\r\n\r\n            return cookie;\r\n        }\r\n\r\n        public static string DateToString(DateTimeOffset dateTime)\r\n        {\r\n            return dateTime.ToUniversalTime().ToString(\"r\", (IFormatProvider)CultureInfo.InvariantCulture);\r\n        }\r\n\r\n        public static bool TryParseDate(string input, out DateTimeOffset result)\r\n        {\r\n            return DateTimeOffset.TryParseExact(input, dateFormats, (IFormatProvider)DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AssumeUniversal, out result);\r\n        }\r\n\r\n\t    public static IEnumerable<string> SplitValues(string input)\r\n\t    {\r\n\t\t    return input.TrimEnd().TrimEnd(';').Split(';').Select(x => x.Trim());\r\n\t    }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Cookies/CookieState.cs",
    "content": "﻿using System;\r\nusing System.Collections.Specialized;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Web;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Http.Cookies\r\n{\r\n    public class CookieState\r\n    {\r\n        private string _name;\r\n        private string _value;\r\n        private readonly NameValueCollection _values = new NameValueCollection();\r\n\r\n        public static CookieState Parse(string name, string text)\r\n        {\r\n            if (text.IsEmpty())\r\n            {\r\n                return new CookieState(name, \"NONE\");\r\n            }\r\n\r\n            var values = HttpUtility.ParseQueryString(text);\r\n            if (values.Count == 1 && values.AllKeys.Single().IsEmpty())\r\n            {\r\n                return new CookieState(name, text);\r\n            }\r\n\r\n            return new CookieState(name, values);\r\n        }\r\n\r\n        public static CookieState For(Segment segment)\r\n        {\r\n            return Parse(segment.Key, segment.Value);\r\n        }\r\n\r\n        public CookieState(string name)\r\n        {\r\n            Name = name;\r\n        }\r\n\r\n        public CookieState(string name, string value) : this(name)\r\n        {\r\n            Value = value;\r\n        }\r\n\r\n        private CookieState(string name, NameValueCollection values)\r\n        {\r\n            Name = name;\r\n            _values = values;\r\n        }\r\n\r\n        public string Name\r\n        {\r\n            get { return _name; }\r\n            set\r\n            {\r\n                if (value.IsEmpty())\r\n                {\r\n                    throw new ArgumentNullException(\"value\");\r\n                }\r\n\r\n                _name = value;\r\n            }\r\n        }\r\n\r\n        public CookieState With(string key, string value)\r\n        {\r\n            this[key] = value;\r\n            return this;\r\n        }\r\n\r\n        public string Value\r\n        {\r\n            get { return _value; }\r\n            set\r\n            {\r\n                if (value.IsEmpty()) throw new ArgumentNullException(\"value\");\r\n                \r\n                _value = value;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the cookie value with the specified cookie name, if the cookie data is structured.\r\n        /// </summary>\r\n        /// \r\n        /// <returns>\r\n        /// The cookie value with the specified cookie name.\r\n        /// </returns>\r\n        public string this[string subName]\r\n        {\r\n            get\r\n            {\r\n                return _values[subName];\r\n            }\r\n            set\r\n            {\r\n                if (_value.IsNotEmpty())\r\n                {\r\n                    throw new InvalidOperationException(\"A cookie can have a single value or structured sub-values, but not both\");\r\n                }\r\n\r\n                _values[subName] = value;\r\n            }\r\n        }\r\n\r\n        public NameValueCollection Values\r\n        {\r\n            get { return _values; }\r\n        }\r\n\r\n        public void Write(StringBuilder builder)\r\n        {\r\n            builder.Append(Name);\r\n            builder.Append(\"=\");\r\n\r\n            if (Value.IsNotEmpty())\r\n            {\r\n                builder.Append(Value);\r\n            }\r\n            else\r\n            {\r\n                builder.Append(_values.ToString());\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the string representation the current object.\r\n        /// </summary>\r\n        /// \r\n        /// <returns>\r\n        /// The string representation the current object.\r\n        /// </returns>\r\n        public override string ToString()\r\n        {\r\n            var builder = new StringBuilder();\r\n            Write(builder);\r\n\r\n            return builder.ToString();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Cookies/CookieValue.cs",
    "content": "﻿using System.Linq;\r\nusing System.Web;\r\nusing FubuCore.Dates;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Http.Cookies\r\n{\r\n    // TODO -- This is a great big bag of fail for testing\r\n    public class CookieValue : ICookieValue\r\n    {\r\n        private readonly string _cookieName;\r\n        private readonly ICookies _cookies;\r\n        private readonly ISystemTime _time;\r\n        private readonly IOutputWriter _writer;\r\n\r\n        public CookieValue(string cookieName, ISystemTime time, ICookies cookies, IOutputWriter writer)\r\n        {\r\n            _time = time;\r\n            _cookies = cookies;\r\n            _writer = writer;\r\n            _cookieName = cookieName;\r\n        }\r\n\r\n        public string Value\r\n        {\r\n            get\r\n            {\r\n                var cookie = _cookies.All.SingleOrDefault(x => x.Matches(_cookieName));\r\n                return cookie == null ? null : cookie.For(_cookieName).Value;\r\n            }\r\n            set\r\n            {\r\n                var cookie = new Cookie(_cookieName, value)\r\n                {\r\n                    Expires = _time.UtcNow().AddYears(1)\r\n                };\r\n\r\n                _writer.AppendCookie(cookie);\r\n            }\r\n        }\r\n\r\n        public void Erase()\r\n        {\r\n            var cookie = new Cookie(_cookieName, \"BLANK\")\r\n            {\r\n                Expires = _time.UtcNow().AddYears(-1)\r\n            };\r\n\r\n            _writer.AppendCookie(cookie);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Cookies/CookieValueSource.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing FubuCore;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Binding.Values;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Core.Http.Cookies\r\n{\r\n    public class CookieValueSource : IValueSource\r\n    {\r\n        private readonly ICookies _cookies;\r\n\r\n        public CookieValueSource(ICookies cookies)\r\n        {\r\n            _cookies = cookies;\r\n            Provenance = RequestDataSource.Cookie.ToString();\r\n        }\r\n\r\n        public bool Has(string key)\r\n        {\r\n            Cookie cookie = _cookies.Get(key);\r\n            return cookie != null && cookie.Value.IsNotEmpty();\r\n        }\r\n\r\n        public object Get(string key)\r\n        {\r\n            Cookie cookie = _cookies.Get(key);\r\n            if (cookie == null) return null;\r\n\r\n            return cookie.Value ?? cookie.GetValue(key);\r\n        }\r\n\r\n        public bool HasChild(string key)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        public IValueSource GetChild(string key)\r\n        {\r\n            throw new NotSupportedException();\r\n        }\r\n\r\n        public IEnumerable<IValueSource> GetChildren(string key)\r\n        {\r\n            return Enumerable.Empty<IValueSource>();\r\n        }\r\n\r\n        public void WriteReport(IValueReport report)\r\n        {\r\n            _cookies.All.Where(x => x.Value.IsNotEmpty()).Each(x => {\r\n                report.Value(x.States.First().Name, x.Value);\r\n            });\r\n        }\r\n\r\n        public bool Value(string key, Action<BindingValue> callback)\r\n        {\r\n            var value = Get(key);\r\n\r\n            if (value == null) return false;\r\n\r\n            callback(new BindingValue\r\n            {\r\n                RawKey = key,\r\n                RawValue = value,\r\n                Source = Provenance\r\n            });\r\n\r\n            return true;\r\n        }\r\n\r\n        public string Provenance { get; private set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Cookies/ICookieValue.cs",
    "content": "﻿namespace FubuMVC.Core.Http.Cookies\r\n{\r\n    public interface ICookieValue\r\n    {\r\n        string Value { get; set; }\r\n        void Erase();\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Cookies/ICookies.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Net;\r\nusing System.Web;\r\nusing System.Linq;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Http.Cookies\r\n{\r\n    /// <summary>\r\n    /// Provides access to cookies in the request\r\n    /// </summary>\r\n    public interface ICookies\r\n    {\r\n        bool Has(string name);\r\n        Cookie Get(string name);\r\n\r\n        /// <summary>\r\n        /// This function is only useful for single value cookies\r\n        /// </summary>\r\n        /// <param name=\"name\"></param>\r\n        /// <returns></returns>\r\n        string GetValue(string name);\r\n\r\n        /// <summary>\r\n        /// All the cookies in the http request\r\n        /// </summary>\r\n        IEnumerable<Cookie> All { get; }\r\n    }\r\n\r\n    public class Cookies : ICookies\r\n    {\r\n        private readonly Lazy<IEnumerable<Cookie>> _cookies;\r\n\r\n        public Cookies(IHttpRequest request)\r\n        {\r\n            _cookies = new Lazy<IEnumerable<Cookie>>(() => \r\n\t\t\t{\r\n\t\t\t\tvar value = request.GetHeader(HttpRequestHeader.Cookie).SingleOrDefault();\r\n\t\t\t\tif(value.IsEmpty()) return new Cookie[0];\r\n\r\n                return CookieParser.SplitValues(value).Select(CookieParser.ToCookie).ToArray();\r\n            });\r\n        }\r\n\r\n        public bool Has(string name)\r\n        {\r\n            return _cookies.Value.Any(x => x.Matches(name));\r\n        }\r\n\r\n        public Cookie Get(string name)\r\n        {\r\n            return _cookies.Value.FirstOrDefault(x => x.Matches(name));\r\n        }\r\n\r\n        public string GetValue(string name)\r\n        {\r\n            var cookie = Get(name);\r\n            return cookie.GetValue(name);\r\n        }\r\n\r\n        public IEnumerable<Cookie> All\r\n        {\r\n            get { return _cookies.Value; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Cookies/Segment.cs",
    "content": "﻿using System;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Core.Http.Cookies\r\n{\r\n    public struct Segment\r\n    {\r\n        public static string UnquoteToken(string token)\r\n        {\r\n            if (string.IsNullOrWhiteSpace(token) || !token.StartsWith(\"\\\"\", StringComparison.Ordinal) || (!token.EndsWith(\"\\\"\", StringComparison.Ordinal) || token.Length <= 1))\r\n                return token;\r\n\r\n            return token.Substring(1, token.Length - 2);\r\n        }\r\n\r\n        public Segment(string text)\r\n        {\r\n            var index = text.IndexOf('=');\r\n            if (index < 0)\r\n            {\r\n                Key = text;\r\n                Value = null;\r\n            }\r\n            else\r\n            {\r\n                Key = text.Substring(0, index);\r\n                Value = UnquoteToken(text.Substring(index + 1).Trim());\r\n            }\r\n        }\r\n\r\n        public string Key;\r\n        public string Value;\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/CurrentChain.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    public class CurrentChain : ICurrentChain\r\n    {\r\n        private readonly Stack<BehaviorChain> _chains = new Stack<BehaviorChain>();\r\n        private readonly BehaviorChain _originalChain;\r\n        private readonly Lazy<string> _resourceHash;\r\n        private readonly IDictionary<string, object> _routeData;\r\n\r\n        public CurrentChain(BehaviorChain top, IDictionary<string, object> data)\r\n        {\r\n            _chains.Push(top);\r\n            _originalChain = top;\r\n\r\n            _routeData = data;\r\n\r\n            _resourceHash = new Lazy<string>(() =>\r\n            {\r\n                var dict = new Dictionary<string, string>{\r\n                    {\"Pattern\", top.ToString()}\r\n                };\r\n\r\n                data.OrderBy(x => x.Key).Each(\r\n                    pair => { dict.Add(pair.Key, pair.Value == null ? string.Empty : pair.Value.ToString()); });\r\n\r\n                return dict.Select(x => \"{0}={1}\".ToFormat(x.Key, x.Value)).Join(\";\").ToHash();\r\n            });\r\n        }\r\n\r\n        public IDictionary<string, object> RouteData\r\n        {\r\n            get { return _routeData; }\r\n        }\r\n\r\n        public BehaviorChain Current\r\n        {\r\n            get { return _chains.Peek(); }\r\n        }\r\n\r\n        public BehaviorChain OriginatingChain\r\n        {\r\n            get { return _originalChain; }\r\n        }\r\n\r\n        public void Push(BehaviorChain chain)\r\n        {\r\n            _chains.Push(chain);\r\n        }\r\n\r\n        public void Pop()\r\n        {\r\n            _chains.Pop();\r\n        }\r\n\r\n        public string ResourceHash()\r\n        {\r\n            return _resourceHash.Value;\r\n        }\r\n\r\n        public bool IsInPartial()\r\n        {\r\n            return _chains.Count > 1;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/CurrentMimeType.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    [DebuggerDisplay(\"{debuggerDisplay()}\")]\r\n    public class CurrentMimeType\r\n    {\r\n        private MimeTypeList _acceptTypes;\r\n\r\n        public CurrentMimeType()\r\n        {\r\n        }\r\n\r\n        // If contenttype is null, use the url encoded thing\r\n        public CurrentMimeType(string contentType, string acceptType)\r\n        {\r\n            contentType = contentType ?? MimeType.HttpFormMimetype;\r\n            if (contentType.Contains(\";\"))\r\n            {\r\n                var parts = contentType.ToDelimitedArray(';');\r\n                contentType = parts.First();\r\n\r\n                if (parts.Last().Contains(\"charset\"))\r\n                {\r\n                    Charset = parts.Last().Split('=').Last();\r\n                }\r\n            }\r\n\r\n            ContentType = contentType;\r\n\r\n            AcceptTypes = new MimeTypeList(acceptType);\r\n        }\r\n\r\n        public string ContentType { get; set; }\r\n\r\n        public MimeTypeList AcceptTypes\r\n        {\r\n            get { return _acceptTypes ?? new MimeTypeList(MimeType.Any); }\r\n            set { _acceptTypes = value; }\r\n        }\r\n\r\n        public string Charset { get; set; }\r\n\r\n        public bool AcceptsHtml()\r\n        {\r\n            return AcceptTypes.Contains(MimeType.Html.ToString());\r\n        }\r\n\r\n        public bool AcceptsAny()\r\n        {\r\n            return AcceptTypes.DefaultIfEmpty(\"*/*\").Contains(\"*/*\");\r\n        }\r\n\r\n        public string SelectFirstMatching(IEnumerable<string> candidates)\r\n        {\r\n            var exact = candidates.FirstOrDefault(x => AcceptTypes.Contains(x));\r\n            return exact ?? (AcceptsAny() ? candidates.FirstOrDefault() : null);\r\n        }\r\n\r\n        string debuggerDisplay()\r\n        {\r\n            return ContentType + (Charset == null ?\r\n                \"\" : \";charset=\" + Charset);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/CurrentMimeTypeModelBinder.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Net;\r\nusing FubuCore.Binding;\r\nusing System.Linq;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    [Description(\"Custom model binder for FubuMVC's CurrentMimeType class\")]\r\n    public class CurrentMimeTypeModelBinder : IModelBinder\r\n    {\r\n        public bool Matches(Type type)\r\n        {\r\n            return type == typeof (CurrentMimeType);\r\n        }\r\n\r\n        public void Bind(Type type, object instance, IBindingContext context)\r\n        {\r\n            throw new NotSupportedException();\r\n        }\r\n\r\n        public object Bind(Type type, IBindingContext context)\r\n        {\r\n            var mimetypeContext = context.Service<MimetypeContext>();\r\n\r\n\r\n            var contentType = mimetypeContext.ContentType;\r\n            var acceptType = mimetypeContext.Accepts;\r\n            \r\n            \r\n\r\n            var currentMimeType = new CurrentMimeType(contentType, acceptType);\r\n            mimetypeContext.Correct(currentMimeType);\r\n\r\n            return currentMimeType;\r\n        }\r\n\r\n\r\n\r\n        public class MimetypeContext\r\n        {\r\n            private readonly ConnegSettings _settings;\r\n            private readonly ICurrentChain _currentChain;\r\n            private readonly IHttpRequest _request;\r\n\r\n            public MimetypeContext(ConnegSettings settings, ICurrentChain currentChain, IHttpRequest request)\r\n            {\r\n                _settings = settings;\r\n                _currentChain = currentChain;\r\n                _request = request;\r\n            }\r\n\r\n            public string ContentType\r\n            {\r\n                get\r\n                {\r\n                    return _request.GetHeader(HttpRequestHeader.ContentType).FirstOrDefault() ??\r\n                              MimeType.HttpFormMimetype;\r\n                }\r\n            }\r\n\r\n            public string Accepts\r\n            {\r\n                get\r\n                {\r\n                    return readAcceptType(_request.GetHeader(HttpRequestHeader.Accept));\r\n                }\r\n            }\r\n\r\n            private string readAcceptType(IEnumerable<string> header)\r\n            {\r\n                if (header == null || header.Count() == 0) return \"*/*\";\r\n\r\n                if (header.Count() == 1) return header.Single();\r\n\r\n                return header.Join(\", \");\r\n            }\r\n\r\n            public void Correct(CurrentMimeType currentMimeType)\r\n            {\r\n                _settings.InterpretQuerystring(currentMimeType, _request);\r\n\r\n                _settings.Corrections.Each(x => x.Correct(currentMimeType, _request, _currentChain.OriginatingChain));\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/CurrentRequestFullUrlPropertyBinder.cs",
    "content": "using System.ComponentModel;\r\nusing System.Reflection;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Reflection;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    [Title(\"FullUrl Property\")]\r\n    [Description(\"Binds the full url of the current request to an string property called FullUrl\")]\r\n    public class CurrentRequestFullUrlPropertyBinder : IPropertyBinder\r\n    {\r\n        private static readonly string PropertyName =\r\n            ReflectionHelper.GetMethod<IHttpRequest>(r => r.FullUrl()).Name;\r\n\r\n        public bool Matches(PropertyInfo property)\r\n        {\r\n            return property.Name.Equals(PropertyName) \r\n                    && property.PropertyType.FullName == typeof(string).FullName;\r\n        }\r\n\r\n        public void Bind(PropertyInfo property, IBindingContext context)\r\n        {\r\n            var request = context.Service<IHttpRequest>();\r\n            property.SetValue(context.Object, request.FullUrl(), null);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/CurrentRequestRelativeUrlPropertyBinder.cs",
    "content": "using System.ComponentModel;\r\nusing System.Reflection;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Reflection;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    [Title(\"RelativeUrl Property\")]\r\n    [Description(\"Binds the relative url of the current request to an string property called RelativeUrl\")]\r\n    public class CurrentRequestRelativeUrlPropertyBinder : IPropertyBinder\r\n    {\r\n        private static readonly string PropertyName =\r\n            ReflectionHelper.GetMethod<IHttpRequest>(r => r.RelativeUrl()).Name;\r\n\r\n        public bool Matches(PropertyInfo property)\r\n        {\r\n            return property.Name.Equals(PropertyName) \r\n                    && property.PropertyType.FullName == typeof(string).FullName;\r\n        }\r\n\r\n        public void Bind(PropertyInfo property, IBindingContext context)\r\n        {\r\n            var request = context.Service<IHttpRequest>();\r\n            property.SetValue(context.Object, request.RelativeUrl(), null);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/EtagMatch.cs",
    "content": "namespace FubuMVC.Core.Http\r\n{\r\n    public enum EtagMatch\r\n    {\r\n        Yes,\r\n        No,\r\n        None\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/FubuMvcRequestData.cs",
    "content": "﻿using System.Web.Routing;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Binding.Values;\r\nusing FubuMVC.Core.Http.Cookies;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    public class FubuMvcRequestData : RequestData\r\n    {\r\n        public FubuMvcRequestData(IHttpRequest request, RouteData routeData)\r\n        {\r\n            AddValues(new RouteDataValues(routeData));\r\n            AddValues(\"Querystring\", new NamedKeyValues(request.QueryString));\r\n            AddValues(\"Form\", new NamedKeyValues(request.Form));\r\n\r\n            AddValues(new CookieValueSource(new Cookies.Cookies(request)));\r\n            AddValues(new HeaderValueSource(request));\r\n\r\n            // TODO -- add something back for Files\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/HeaderValueSource.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Binding.Values;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    public class HeaderValueSource : IValueSource\r\n    {\r\n        private readonly IHttpRequest _request;\r\n\r\n        public HeaderValueSource(IHttpRequest request)\r\n        {\r\n            _request = request;\r\n            Provenance = RequestDataSource.Header.ToString();\r\n        }\r\n\r\n        public bool Has(string key)\r\n        {\r\n            return _request.HasHeader(key);\r\n        }\r\n\r\n        public object Get(string key)\r\n        {\r\n            var value = _request.GetHeader(key);\r\n            return value.Count() == 1 ? (object) value.Single() : value;\r\n        }\r\n\r\n        public bool HasChild(string key)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        public IValueSource GetChild(string key)\r\n        {\r\n            throw new NotSupportedException();\r\n        }\r\n\r\n        public IEnumerable<IValueSource> GetChildren(string key)\r\n        {\r\n            return Enumerable.Empty<IValueSource>();\r\n        }\r\n\r\n        public void WriteReport(IValueReport report)\r\n        {\r\n            _request.AllHeaderKeys().Each(key => {\r\n                report.Value(key, Get(key));\r\n            });\r\n        }\r\n\r\n        public bool Value(string key, Action<BindingValue> callback)\r\n        {\r\n            if (!Has(key)) return false;\r\n\r\n            callback(new BindingValue\r\n            {\r\n                RawKey = key,\r\n                Source = Provenance,\r\n                RawValue = Get(key)\r\n            });\r\n\r\n\r\n            return true;\r\n        }\r\n\r\n        public string Provenance { get; private set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Headers/Header.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Net;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Caching;\r\nusing FubuMVC.Core.Runtime;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Core.Http.Headers\r\n{\r\n    [Title(\"Http Header\")]\r\n    public class Header : IRecordedHttpOutput\r\n    {\r\n        public string Name { get; set; }\r\n        public string Value { get; set; }\r\n\r\n        public Header(string name, string value)\r\n        {\r\n            Name = name;\r\n            Value = value;\r\n        }\r\n\r\n        public Header(HttpResponseHeader header, string value) : this(HttpResponseHeaders.HeaderNameFor(header), value)\r\n        {\r\n            \r\n        }\r\n\r\n        // for serialization\r\n        public Header()\r\n        {\r\n        }\r\n\r\n        public void Write(IOutputWriter writer)\r\n        {\r\n            writer.AppendHeader(Name, Value);\r\n        }\r\n\r\n        public Task Replay(IHttpResponse response)\r\n        {\r\n            response.AppendHeader(Name, Value);\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n\r\n        public bool Equals(Header other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other.Name, Name) && Equals(other.Value, Value);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof (Header)) return false;\r\n            return Equals((Header) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                return ((Name != null ? Name.GetHashCode() : 0)*397) ^ (Value != null ? Value.GetHashCode() : 0);\r\n            }\r\n        }\r\n\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Name: {0}, Value: {1}\", Name, Value);\r\n        }\r\n\r\n        public bool Matches(string headerName)\r\n        {\r\n            return string.Equals(Name, headerName, StringComparison.InvariantCultureIgnoreCase);\r\n        }\r\n    }\r\n\r\n    public static class HeadersExtension\r\n    {\r\n        public static string ValueFor(this IEnumerable<Header> headers,  HttpRequestHeader header)\r\n        {\r\n            return headers.ValueFor(HttpRequestHeaders.HeaderNameFor(header));\r\n        }\r\n\r\n        public static string ValueFor(this IEnumerable<Header> headers, HttpResponseHeader header)\r\n        {\r\n            return headers.ValueFor(HttpResponseHeaders.HeaderNameFor(header));\r\n        }\r\n\r\n        public static string ValueFor(this IEnumerable<Header> headers, string headerName)\r\n        {\r\n            var header = headers.FirstOrDefault(x => x.Matches(headerName));\r\n            return header == null ? null : header.Value;\r\n        }\r\n\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Headers/HttpHeaderValues.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing FubuCore.Util;\r\n\r\nnamespace FubuMVC.Core.Http.Headers\r\n{\r\n    public class HttpHeaderValues : IHaveHeaders\r\n    {\r\n        private readonly Cache<string, string> _headers = new Cache<string, string>();\r\n\r\n        public HttpHeaderValues()\r\n        {\r\n        }\r\n\r\n        public HttpHeaderValues(string key, string value)\r\n        {\r\n            this[key] = value;\r\n        }\r\n\r\n        public string this[string key]\r\n        {\r\n            get\r\n            {\r\n                return _headers[key];\r\n            }\r\n            set\r\n            {\r\n                _headers[key] = value;\r\n            }\r\n        }\r\n\r\n        public bool Has(string name)\r\n        {\r\n            return _headers.Has(name);\r\n        }\r\n\r\n\r\n        public IEnumerable<Header> Headers\r\n        {\r\n            get\r\n            {\r\n                foreach (var key in _headers.GetAllKeys())\r\n                {\r\n                    yield return new Header(key, _headers[key]);\r\n                }\r\n            }\r\n        }\r\n\r\n        public static HttpHeaderValues ForETag(string etag)\r\n        {\r\n            return new HttpHeaderValues(HttpResponseHeaders.ETag, etag);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Headers/IHaveHeaders.cs",
    "content": "using System.Collections.Generic;\r\n\r\nnamespace FubuMVC.Core.Http.Headers\r\n{\r\n    /// <summary>\r\n    /// Marker interface for a resource type that also sets http header values\r\n    /// </summary>\r\n    public interface IHaveHeaders\r\n    {\r\n        IEnumerable<Header> Headers { get; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Hosting/HostingFailedException.cs",
    "content": "﻿using System;\nusing System.Runtime.Serialization;\nusing System.Security.Principal;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Http.Hosting\n{\n    [Serializable]\n    public class HostingFailedException : Exception\n    {\n        private readonly int _port;\n        private readonly string _username;\n\n        public HostingFailedException(Exception innerException, int port) : base(string.Empty, innerException)\n        {\n            _port = port;\n            //Not ideal, but helps identify issues with the specific service account the host may be running under\n            var identity = WindowsIdentity.GetCurrent();\n            _username = identity == null || identity.Name.IsEmpty() ? \"DOMAIN\\\\user\" : identity.Name;\n        }\n\n        protected HostingFailedException(SerializationInfo info, StreamingContext context) : base(info, context)\n        {\n        }\n\n        public override string Message\n        {\n            get { return @\"\nTo use Katana hosting, you need to either run with administrative rights\nor optionally, use 'netsh http add urlacl url=http://*:{0}/ user={1}' at the command line.\nSee http://msdn.microsoft.com/en-us/library/ms733768.aspx for more information.\".ToFormat(_port, _username).Trim(); }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Hosting/IHost.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.Http.Hosting\n{\n    public interface IHost\n    {\n        IDisposable Start(\n            int port, \n            Func<IDictionary<string, object>, Task> func, \n            IDictionary<string, object> properties\n        );\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Hosting/Katana.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Http.Hosting\n{\n    public class Katana : IHost\n    {\n        public IDisposable Start(int port, Func<IDictionary<string, object>, Task> func,\n            IDictionary<string, object> properties)\n        {\n            var parameters = build(\"Microsoft.Owin.Hosting.StartOptions, Microsoft.Owin.Hosting\");\n            parameters.SetProperty(\"Port\", port);\n\n            parameters.GetProperty(\"Urls\").Call(\"Add\", \"http://*:\" + port);\n\n            var context = build(\"Microsoft.Owin.Hosting.Engine.StartContext, Microsoft.Owin.Hosting\", parameters);\n            context.SetProperty(\"App\", func);\n            context.GetProperty(\"EnvironmentData\").Call(\"AddRange\", properties);\n\n            var appBuilderFactory = build(\"Microsoft.Owin.Hosting.Builder.AppBuilderFactory, Microsoft.Owin.Hosting\");\n            var traceOutputFactory = build(\"Microsoft.Owin.Hosting.Tracing.TraceOutputFactory, Microsoft.Owin.Hosting\");\n            var appLoaderFactories = createAppLoaderFactories();\n\n            var appLoader = build(\"Microsoft.Owin.Hosting.Loader.AppLoader, Microsoft.Owin.Hosting\", appLoaderFactories);\n            var serviceProvider = build(\"Microsoft.Owin.Hosting.Services.ServiceProvider, Microsoft.Owin.Hosting\");\n            var serverFactoryActivator =\n                build(\"Microsoft.Owin.Hosting.ServerFactory.ServerFactoryActivator, Microsoft.Owin.Hosting\",\n                    serviceProvider);\n\n            var serverFactoryLoader =\n                build(\"Microsoft.Owin.Hosting.ServerFactory.ServerFactoryLoader, Microsoft.Owin.Hosting\",\n                    serverFactoryActivator);\n\n            var diagnosticsLoggerFactory = build(\"Microsoft.Owin.Logging.DiagnosticsLoggerFactory, Microsoft.Owin\");\n\n            var engine = build(\"Microsoft.Owin.Hosting.Engine.HostingEngine, Microsoft.Owin.Hosting\",\n                appBuilderFactory, traceOutputFactory, appLoader, serverFactoryLoader, diagnosticsLoggerFactory);\n\n\n            try\n            {\n                return engine.Call(\"Start\", context).As<IDisposable>();\n            }\n            catch (TargetInvocationException e)\n            {\n                throw new HostingFailedException(e.InnerException, port);\n            }\n        }\n\n        private static Array createAppLoaderFactories()\n        {\n            var appLoaderFactories =\n                Array.CreateInstance(\n                    Type.GetType(\"Microsoft.Owin.Hosting.Loader.IAppLoaderFactory, Microsoft.Owin.Hosting\"), 0);\n            return appLoaderFactories;\n        }\n\n        private object build(string typeName, params object[] args)\n        {\n            var type = Type.GetType(typeName);\n            if(type == null)\n                throw new TypeLoadException(\"Could not find type: {0}. Are you missing an assembly reference?\".ToFormat(typeName));\n            return Activator.CreateInstance(type, args);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Hosting/Nowin.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Reflection;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.Http.Hosting\n{\n    public class NOWIN : IHost\n    {\n        public IDisposable Start(int port, Func<IDictionary<string, object>, Task> func, IDictionary<string, object> properties)\n        {\n            var list = new List<IDictionary<string, object>>(){new Dictionary<string, object>()};\n            list[0].Add(\"port\", port.ToString());\n\n            properties.Add(\"host.Addresses\", list);\n\n            var type = Type.GetType(\"Nowin.OwinServerFactory, Nowin\");\n\n            var initialize = type.GetMethod(\"Initialize\", BindingFlags.Static | BindingFlags.Public);\n            var create = type.GetMethod(\"Create\", BindingFlags.Static | BindingFlags.Public);\n\n            initialize.Invoke(null, new object[]{properties});\n            return (IDisposable) create.Invoke(null, new object[]{func, properties});\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Hosting/ReflectionExtensions.cs",
    "content": "namespace FubuMVC.Core.Http.Hosting\n{\n    public static class ReflectionExtensions\n    {\n        public static void SetProperty(this object target, string name, object value)\n        {\n            var property = target.GetType().GetProperty(name);\n            property.SetValue(target, value);\n        }\n\n        public static object GetProperty(this object target, string name)\n        {\n            var property = target.GetType().GetProperty(name);\n            return property.GetValue(target);\n        }\n\n        public static object Call(this object target, string methodName, params object[] args)\n        {\n            var method = target.GetType().GetMethod(methodName);\n            return method.Invoke(target, args);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/HttpGeneralHeaders.cs",
    "content": "namespace FubuMVC.Core.Http\r\n{\r\n    public class HttpGeneralHeaders\r\n    {\r\n        public static readonly string CacheControl = \"Cache-Control\";\r\n        public static readonly string Connection = \"Connection\";\r\n        public static readonly string Date = \"Date\";\r\n        public static readonly string Pragma = \"Pragma\";\r\n        public static readonly string Trailer = \"Trailer\";\r\n        public static readonly string TransferEncoding = \"Transfer-Encoding\";\r\n        public static readonly string Upgrade = \"Upgrade\";\r\n        public static readonly string Via = \"Via\";\r\n        public static readonly string Warning = \"Warning\";\r\n\r\n\r\n        // Entity fields\r\n        public static readonly string Allow = \"Allow\";\r\n        public static readonly string ContentEncoding = \"Content-Encoding\";\r\n        public static readonly string ContentLanguage = \"Content-Language\";\r\n        public static readonly string ContentLocation = \"Content-Location\";\r\n        public static readonly string ContentRange = \"Content-Range\";\r\n        public static readonly string Expires = \"Expires\";\r\n        public static readonly string LastModified = \"Last-Modified\";\r\n\r\n        protected HttpGeneralHeaders()\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/HttpHeaderNameExtensions.cs",
    "content": "using System;\r\nusing System.Net;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    public static class HttpHeaderNameExtensions\r\n    {\r\n        public static string ToName(this HttpRequestHeader header)\r\n        {\r\n            return HttpRequestHeaders.HeaderNameFor(header);\r\n        }\r\n\r\n        public static string ToName(this HttpResponseHeader header)\r\n        {\r\n            return HttpResponseHeaders.HeaderNameFor(header);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/HttpRequestExtensions.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing FubuCore;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Http.Owin;\nusing FubuMVC.Core.Runtime.Logging;\n\nnamespace FubuMVC.Core.Http\n{\n    public static class HttpRequestExtensions\n    {\n        /// <summary>\n        /// The current request matches one of these HTTP methods\n        /// </summary>\n        /// <param name=\"request\"></param>\n        /// <param name=\"httpMethods\"></param>\n        /// <returns></returns>\n        public static bool HttpMethodMatchesAny(this IHttpRequest request, params string[] httpMethods)\n        {\n            return httpMethods.Any(x => x.EqualsIgnoreCase(request.HttpMethod()));\n        }\n\n        /// <summary>\n        /// Evaluates if the current request is for an HTTP method *other* than the supplied httpMethods\n        /// </summary>\n        /// <param name=\"request\"></param>\n        /// <param name=\"httpMethods\"></param>\n        /// <returns></returns>\n        public static bool IsNotHttpMethod(this IHttpRequest request, params string[] httpMethods)\n        {\n            return !request.HttpMethodMatchesAny(httpMethods);\n        }\n\n        /// <summary>\n        /// Is an Http header present in the current request?\n        /// </summary>\n        /// <param name=\"request\"></param>\n        /// <param name=\"key\"></param>\n        /// <returns></returns>\n        public static bool HasHeader(this IHttpRequest request, HttpRequestHeader key)\n        {\n            return request.HasHeader(HttpRequestHeaders.HeaderNameFor(key));\n        }\n\n        /// <summary>\n        /// Get all values for a named header from the current request\n        /// </summary>\n        /// <param name=\"request\"></param>\n        /// <param name=\"key\"></param>\n        /// <returns></returns>\n        public static IEnumerable<string> GetHeader(this IHttpRequest request, HttpRequestHeader key)\n        {\n            return request.GetHeader(HttpRequestHeaders.HeaderNameFor(key));\n        }\n\n        /// <summary>\n        /// Is the current request an Http GET?\n        /// </summary>\n        /// <param name=\"request\"></param>\n        /// <returns></returns>\n        public static bool IsGet(this IHttpRequest request)\n        {\n            return request.HttpMethod().EqualsIgnoreCase(\"GET\");\n        }\n\n        /// <summary>\n        /// Is the current request an Http POST?\n        /// </summary>\n        /// <param name=\"request\"></param>\n        /// <returns></returns>\n        public static bool IsPost(this IHttpRequest request)\n        {\n            return request.HttpMethod().EqualsIgnoreCase(\"POST\");\n        }\n\n        /// <summary>\n        /// Is the current request an Http HEAD?\n        /// </summary>\n        /// <param name=\"request\"></param>\n        /// <returns></returns>\n        public static bool IsHead(this IHttpRequest request)\n        {\n            return request.HttpMethod().EqualsIgnoreCase(\"HEAD\");\n        }\n\n        /// <summary>\n        /// Is the currrent request an Http PUT?\n        /// </summary>\n        /// <param name=\"request\"></param>\n        /// <returns></returns>\n        public static bool IsPut(this IHttpRequest request)\n        {\n            return request.HttpMethod().EqualsIgnoreCase(\"PUT\");\n        }\n\n        /// <summary>\n        /// Converts the given url to a url relative to the current request\n        /// </summary>\n        /// <param name=\"request\"></param>\n        /// <param name=\"url\"></param>\n        /// <returns></returns>\n        public static string ToRelativeContentUrl(this IHttpRequest request, string url)\n        {\n            var current = request.RelativeUrl().TrimStart('/');\n            var contentUrl = url.TrimStart('/');\n\n            if (current == string.Empty)\n            {\n                return contentUrl;\n            }\n\n            if (contentUrl.StartsWith(current))\n            {\n                return contentUrl.Substring(current.Length).TrimStart('/');\n            }\n\n            var prepend = current.Split('/').Select(x => \"..\").Join(\"/\");\n            var relativeUrl = prepend.AppendUrl(contentUrl);\n\n            return relativeUrl;\n        }\n\n        /// <summary>\n        /// Get the associated values from the collection separated into individual values.\n        /// Quoted values will not be split, and the quotes will be removed.\n        /// </summary>\n        /// <param name=\"request\"></param>\n        /// <param name=\"key\"></param>\n        /// <returns></returns>\n        public static IEnumerable<string> GetDelimitedHeaderValues(this IHttpRequest request, string key)\n        {\n            return request.GetHeader(key).GetCommaSeparatedHeaderValues();\n        }\n\n        /// <summary>\n        /// Gets the first, raw header value for the key\n        /// </summary>\n        /// <param name=\"request\"></param>\n        /// <param name=\"key\"></param>\n        /// <returns></returns>\n        public static string GetSingleHeader(this IHttpRequest request, string key)\n        {\n            return request.GetHeader(key).FirstOrDefault();\n        }\n\n        public static IEnumerable<string> GetCommaSeparatedHeaderValues(this IEnumerable<string> enumerable)\n        {\n            foreach (var content in enumerable)\n            {\n                var searchString = content.Trim();\n                if (searchString.Length == 0) break;\n\n                var parser = new CommaTokenParser();\n                content.ToCharArray().Each(parser.Read);\n\n                // Gotta force the parser to know it's done\n                parser.Read(',');\n\n                foreach (var token in parser.Tokens)\n                {\n                    yield return token.Trim();\n                }\n            }\n\n\n        }\n\n        public static string Quoted(this string value)\n        {\n            return \"\\\"{0}\\\"\".ToFormat(value);\n        }\n\n        \n        // TODO -- will want a ReplaceValue too\n        public static void AppendValue(this IDictionary<string, string[]> headers, string key, string value)\n        {\n            if (headers.ContainsKey(key))\n            {\n                var oldArray = headers[key];\n                var newArray = new string[oldArray.Length + 1];\n                oldArray.CopyTo(newArray, 0);\n                newArray[oldArray.Length] = value;\n\n                headers[key] = newArray;\n            }\n            else\n            {\n                headers[key] = new[] { value };\n            }\n        }\n\n        public static DateTime? TryParseHttpDate(this string dateString)\n        {\n            DateTime date;\n\n            return DateTime.TryParseExact(dateString, \"r\", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)\n                ? date\n                : null as DateTime?;\n        }\n\n        public static string ToHttpDateString(this DateTime time)\n        {\n            return time.ToUniversalTime().ToString(\"r\");\n        }\n\n        public static DateTime? IfModifiedSince(this IHttpRequest request)\n        {\n            return request.GetSingleHeader(HttpRequestHeaders.IfModifiedSince)\n                .TryParseHttpDate();\n        }\n\n        public static DateTime? IfUnModifiedSince(this IHttpRequest request)\n        {\n            return request.GetSingleHeader(HttpRequestHeaders.IfUnmodifiedSince)\n                .TryParseHttpDate();\n        }\n\n        public static IEnumerable<string> IfMatch(this IHttpRequest request)\n        {\n            return request.GetHeader(HttpRequestHeaders.IfMatch).GetCommaSeparatedHeaderValues();\n        }\n\n        public static IEnumerable<string> IfNoneMatch(this IHttpRequest request)\n        {\n            return request.GetHeader(HttpRequestHeaders.IfNoneMatch).GetCommaSeparatedHeaderValues();\n        }\n\n        public static EtagMatch EtagMatches(this IEnumerable<string> values, string etag)\n        {\n            if (values == null || !values.Any()) return EtagMatch.None;\n\n            return values.Any(x => x.Equals(etag, StringComparison.Ordinal) || x == \"*\")\n                ? EtagMatch.Yes\n                : EtagMatch.No;\n\n        }\n\n        /// <summary>\n        /// Checks whether or not there is any data in the request body\n        /// </summary>\n        /// <param name=\"data\"></param>\n        /// <returns></returns>\n        public static bool HasBodyData(this IHttpRequest data)\n        {\n            return data.Input != null && data.Input.CanRead && data.Input.Length > 0;\n        }\n\n        public static bool CouldBeJson(this IHttpRequest data)\n        {\n            if (!data.HasBodyData()) return false;\n\n            var reader = new StreamReader(data.Input);\n            var firstCharacter = reader.Read();\n            data.Input.Position = 0;\n\n            return firstCharacter == '{';\n        }\n\n        public static readonly string LOG_KEY = \"fubu.ExecutionLog\";\n        public static readonly string REQUEST_ID = \"x-request-id\";\n\n        public static void Set<T>(this IDictionary<string, object> dict, string key, T value)\n        {\n            if (dict.ContainsKey(key))\n            {\n                dict[key] = value;\n            }\n            else\n            {\n                dict.Add(key, value);\n            }\n        }\n\n        public static string RequestId(this IDictionary<string, object> http)\n        {\n            var raw = http.ResponseHeaders();\n\n            if (raw == null) return null;\n\n            if (raw.ContainsKey(REQUEST_ID))\n            {\n                return raw[REQUEST_ID].FirstOrDefault();\n            }\n\n            return null;\n\n        }\n\n        public static void RequestId(this IDictionary<string, object> http, string id)\n        {\n            http.ResponseHeaders().AppendValue(REQUEST_ID, id);\n        }\n\n        public static string RequestId(this IHttpResponse response)\n        {\n            var raw = response.HeaderValueFor(REQUEST_ID);\n            if (raw == null || !raw.Any()) return null;\n\n            return raw.First();\n        }\n\n        public static void CopyTo(this IDictionary<string, object> source, IDictionary<string, object> destination,\n            params string[] keys)\n        {\n            keys.Where(source.ContainsKey).Each(x => destination.Add(x, source[x]));\n        }\n\n        public static IDictionary<string, string[]> ResponseHeaders(this IDictionary<string, object> dict)\n        {\n            if (!dict.ContainsKey(OwinConstants.ResponseHeadersKey))\n            {\n                dict.Add(OwinConstants.ResponseHeadersKey, new Dictionary<string, string[]>());\n            }\n\n            return dict[OwinConstants.ResponseHeadersKey].As<IDictionary<string, string[]>>();\n        } \n\n        public static void Log(this IDictionary<string, object> dict, IChainExecutionLog log)\n        {\n            dict.ResponseHeaders().AppendValue(REQUEST_ID, log.Id.ToString());\n            dict.Set(LOG_KEY, log);\n        }\n\n        public static IChainExecutionLog Log(this IDictionary<string, object> dict)\n        {\n            return (IChainExecutionLog) (dict.ContainsKey(LOG_KEY) ? dict[LOG_KEY] : null);\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/HttpRequestHeaders.cs",
    "content": "using System.Net;\r\nusing System.Reflection;\r\nusing FubuCore.Util;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    public class HttpRequestHeaders : HttpGeneralHeaders\r\n    {\r\n        public static readonly string Accept = \"Accept\";\r\n        public static readonly string AcceptCharset = \"Accept-Charset\";\r\n        public static readonly string AcceptEncoding = \"Accept-Encoding\";\r\n        public static readonly string AcceptLanguage = \"Accept-Language\";\r\n        public static readonly string Authorization = \"Authorization\";\r\n        public static readonly string Cookie = \"Cookie\";\r\n        public static readonly string ContentLength = \"Content-Length\";\r\n        public static readonly string ContentMd5 = \"Content-MD5\";\r\n        public static readonly string ContentType = \"Content-Type\";\r\n        public static readonly string Expect = \"Expect\";\r\n        public static readonly string From = \"From\";\r\n        public static readonly string Host = \"Host\";\r\n        public static readonly string IfMatch = \"If-Match\";\r\n        public static readonly string IfModifiedSince = \"If-Modified-Since\";\r\n        public static readonly string IfNoneMatch = \"If-None-Match\";\r\n        public static readonly string IfRange = \"If-Range\";\r\n        public static readonly string IfUnmodifiedSince = \"If-Unmodified-Since\";\r\n        public static readonly string MaxForwards = \"Max-Forwards\";\r\n        public static readonly string ProxyAuthorization = \"Proxy-Authorization\";\r\n        public static readonly string Range = \"Range\";\r\n        public static readonly string Referer = \"Referer\";\r\n        public static readonly string Te = \"TE\";\r\n        public static readonly string UserAgent = \"User-Agent\";\r\n\r\n\r\n        // http 1.0\r\n        public static readonly string KeepAlive = \"keep-alive\";\r\n\r\n\r\n        // Not sure this is still used\r\n        public static readonly string Translate = \"Translate\";\r\n\r\n\r\n        private static readonly Cache<HttpRequestHeader, string> _headerNames = new Cache<HttpRequestHeader, string>();\r\n\r\n        private static readonly Cache<string, string> _propertyAliases = new Cache<string, string>(name =>\r\n        {\r\n            var prop = typeof (HttpRequestHeaders).GetField(name, BindingFlags.Static | BindingFlags.Public);\r\n            return prop == null ? name : (string) prop.GetValue(null);\r\n        });\r\n\r\n        static HttpRequestHeaders()\r\n        {\r\n            _headerNames[HttpRequestHeader.CacheControl] = CacheControl;\r\n            _headerNames[HttpRequestHeader.Connection] = Connection;\r\n            _headerNames[HttpRequestHeader.Date] = Date;\r\n            _headerNames[HttpRequestHeader.KeepAlive] = KeepAlive;\r\n            _headerNames[HttpRequestHeader.Pragma] = Pragma;\r\n            _headerNames[HttpRequestHeader.Trailer] = Trailer;\r\n            _headerNames[HttpRequestHeader.TransferEncoding] = TransferEncoding;\r\n            _headerNames[HttpRequestHeader.Upgrade] = Upgrade;\r\n            _headerNames[HttpRequestHeader.Via] = Via;\r\n            _headerNames[HttpRequestHeader.Warning] = Warning;\r\n            _headerNames[HttpRequestHeader.Allow] = Allow;\r\n            _headerNames[HttpRequestHeader.ContentLength] = ContentLength;\r\n            _headerNames[HttpRequestHeader.ContentType] = ContentType;\r\n            _headerNames[HttpRequestHeader.ContentEncoding] = ContentEncoding;\r\n            _headerNames[HttpRequestHeader.ContentLanguage] = ContentLanguage;\r\n            _headerNames[HttpRequestHeader.ContentLocation] = ContentLocation;\r\n            _headerNames[HttpRequestHeader.ContentMd5] = ContentMd5;\r\n            _headerNames[HttpRequestHeader.ContentRange] = ContentRange;\r\n            _headerNames[HttpRequestHeader.Expires] = Expires;\r\n            _headerNames[HttpRequestHeader.LastModified] = LastModified;\r\n            _headerNames[HttpRequestHeader.Accept] = Accept;\r\n            _headerNames[HttpRequestHeader.AcceptCharset] = AcceptCharset;\r\n            _headerNames[HttpRequestHeader.AcceptEncoding] = AcceptEncoding;\r\n            _headerNames[HttpRequestHeader.AcceptLanguage] = AcceptLanguage;\r\n            _headerNames[HttpRequestHeader.Authorization] = Authorization;\r\n            _headerNames[HttpRequestHeader.Cookie] = Cookie;\r\n            _headerNames[HttpRequestHeader.Expect] = Expect;\r\n            _headerNames[HttpRequestHeader.From] = From;\r\n            _headerNames[HttpRequestHeader.Host] = Host;\r\n            _headerNames[HttpRequestHeader.IfMatch] = IfMatch;\r\n            _headerNames[HttpRequestHeader.IfModifiedSince] = IfModifiedSince;\r\n            _headerNames[HttpRequestHeader.IfNoneMatch] = IfNoneMatch;\r\n            _headerNames[HttpRequestHeader.IfRange] = IfRange;\r\n            _headerNames[HttpRequestHeader.IfUnmodifiedSince] = IfUnmodifiedSince;\r\n            _headerNames[HttpRequestHeader.MaxForwards] = MaxForwards;\r\n            _headerNames[HttpRequestHeader.ProxyAuthorization] = ProxyAuthorization;\r\n            _headerNames[HttpRequestHeader.Referer] = Referer;\r\n            _headerNames[HttpRequestHeader.Range] = Range;\r\n            _headerNames[HttpRequestHeader.Te] = Te;\r\n            _headerNames[HttpRequestHeader.Translate] = Translate;\r\n            _headerNames[HttpRequestHeader.UserAgent] = UserAgent;\r\n        }\r\n\r\n        protected HttpRequestHeaders()\r\n        {\r\n        }\r\n\r\n        public static string HeaderNameFor(HttpRequestHeader header)\r\n        {\r\n            return _headerNames[header];\r\n        }\r\n\r\n        public static string HeaderDictionaryNameForProperty(string propertyName)\r\n        {\r\n            return _propertyAliases[propertyName];\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/HttpResponseHeaders.cs",
    "content": "using System.Net;\r\nusing FubuCore.Util;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    public class HttpResponseHeaders : HttpGeneralHeaders\r\n    {\r\n        public static readonly string AcceptRanges = \"Accept-Ranges\";\r\n        public static readonly string Age = \"Age\";\r\n        public static readonly string ContentLength = \"Content-Length\";\r\n        public static readonly string ContentMd5 = \"Content-Md5\";\r\n        public static readonly string ContentType = \"Content-Type\";\r\n        public static readonly string ETag = \"ETag\";\r\n        public static readonly string KeepAlive = \"KeepAlive\";\r\n        public static readonly string Location = \"Location\";\r\n        public static readonly string ProxyAuthenticate = \"Proxy-Authenticate\";\r\n        public static readonly string ProxyAuthorize = \"Proxy-Authorize\";\r\n        public static readonly string RetryAfter = \"Retry-After\";\r\n        public static readonly string Server = \"Server\";\r\n        public static readonly string SetCookie = \"Set-Cookie\";\r\n        public static readonly string Vary = \"Vary\";\r\n        public static readonly string WwwAuthenticate = \"WWW-Authenticate\";\r\n\r\n        public static readonly string ContentDisposition = \"Content-Disposition\";\r\n\r\n        private static readonly Cache<HttpResponseHeader, string> _headerNames = new Cache<HttpResponseHeader, string>();\r\n\r\n        static HttpResponseHeaders()\r\n        {\r\n            _headerNames[HttpResponseHeader.AcceptRanges] = AcceptRanges;\r\n            _headerNames[HttpResponseHeader.Age] = Age;\r\n            _headerNames[HttpResponseHeader.Allow] = Allow;\r\n            _headerNames[HttpResponseHeader.CacheControl] = CacheControl;\r\n            _headerNames[HttpResponseHeader.Connection] = Connection;\r\n            _headerNames[HttpResponseHeader.ContentEncoding] = ContentEncoding;\r\n            _headerNames[HttpResponseHeader.ContentLanguage] = ContentLanguage;\r\n            _headerNames[HttpResponseHeader.ContentLength] = ContentLength;\r\n            _headerNames[HttpResponseHeader.ContentLocation] = ContentLocation;\r\n            _headerNames[HttpResponseHeader.ContentMd5] = ContentMd5;\r\n            _headerNames[HttpResponseHeader.ContentRange] = ContentRange;\r\n            _headerNames[HttpResponseHeader.ContentType] = ContentType;\r\n            _headerNames[HttpResponseHeader.Date] = Date;\r\n            _headerNames[HttpResponseHeader.ETag] = ETag;\r\n            _headerNames[HttpResponseHeader.Expires] = Expires;\r\n            _headerNames[HttpResponseHeader.KeepAlive] = KeepAlive;\r\n            _headerNames[HttpResponseHeader.LastModified] = LastModified;\r\n            _headerNames[HttpResponseHeader.Location] = Location;\r\n            _headerNames[HttpResponseHeader.Pragma] = Pragma;\r\n            _headerNames[HttpResponseHeader.ProxyAuthenticate] = ProxyAuthenticate;\r\n            _headerNames[HttpResponseHeader.RetryAfter] = RetryAfter;\r\n            _headerNames[HttpResponseHeader.Server] = Server;\r\n            _headerNames[HttpResponseHeader.SetCookie] = SetCookie;\r\n            _headerNames[HttpResponseHeader.Trailer] = Trailer;\r\n            _headerNames[HttpResponseHeader.TransferEncoding] = TransferEncoding;\r\n            _headerNames[HttpResponseHeader.Upgrade] = Upgrade;\r\n            _headerNames[HttpResponseHeader.Vary] = Vary;\r\n            _headerNames[HttpResponseHeader.Via] = Via;\r\n            _headerNames[HttpResponseHeader.Warning] = Warning;\r\n            _headerNames[HttpResponseHeader.WwwAuthenticate] = WwwAuthenticate;\r\n        }\r\n\r\n        protected HttpResponseHeaders()\r\n        {\r\n        }\r\n\r\n        public static string HeaderNameFor(HttpResponseHeader header)\r\n        {\r\n            return _headerNames[header];\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/HttpStandinServiceRegistry.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Web.Routing;\r\nusing FubuMVC.Core.Diagnostics.Instrumentation;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Registration;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    public class HttpStandInServiceRegistry : ServiceRegistry\r\n    {\r\n        public HttpStandInServiceRegistry()\r\n        {\r\n            // All of these services are replaced per request in nested\r\n            // containers, but this is necessary for testing\r\n            For<IHttpRequest>().Use<OwinHttpRequest>();\r\n            For<IHttpResponse>().Use<OwinHttpResponse>();\r\n            For<ICurrentChain>().Use(new CurrentChain(null, null));\r\n            For<RouteData>().Use(new RouteData());\r\n            For<IDictionary<string, object>>().Use(new Dictionary<string, object>());\r\n\r\n            // This is important, really needs to be the nullo to avoid\r\n            // hanging on to things we shouldn't\r\n            For<IChainExecutionLog>().Use<NulloChainExecutionLog>();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/ICurrentChain.cs",
    "content": "using System.Collections.Generic;\r\nusing FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    public interface ICurrentChain\r\n    {\r\n        /// <summary>\r\n        ///   The behavior chain that is currently executing\r\n        /// </summary>\r\n        /// <value></value>\r\n        BehaviorChain Current { get; }\r\n\r\n        /// <summary>\r\n        /// The original BehaviorChain that started this request.  This will\r\n        /// be different than the Current property within partial requests\r\n        /// </summary>\r\n        BehaviorChain OriginatingChain { get; }\r\n\r\n        IDictionary<string, object> RouteData { get; }\r\n\r\n        // This is necessary if we wanna get handle partials too\r\n        void Push(BehaviorChain chain);\r\n        void Pop();\r\n\r\n        /// <summary>\r\n        ///   Canonical hash code unique for this resource path.  \r\n        ///   Calculated by the chain id and the key/value pairs \r\n        ///   of the route\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        string ResourceHash();\r\n\r\n        bool IsInPartial();\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/IHttpRequest.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.Specialized;\r\nusing System.IO;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core.Http.Cookies;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    public interface IHttpRequest\r\n    {\r\n        /// <summary>\r\n        ///   Full url of the request, never contains a trailing /\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        string RawUrl();\r\n\r\n        /// <summary>\r\n        ///   Url relative to the application\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        string RelativeUrl();\r\n\r\n        /// <summary>\r\n        ///  Gets the full URI (with schema, server, port, etc.) as requested by the client\r\n        /// </summary>\r\n        /// <returns>Fully qualified URI as requested by the client</returns>\r\n        string FullUrl();\r\n\r\n        /// <summary>\r\n        /// Converts a relative URL into an app-qualified URL\r\n        /// </summary>\r\n        /// <param name=\"url\">an absolute, relative, or app-relative URL</param>\r\n        /// <returns>an app-qualified URL</returns>\r\n        /// <remarks>This method does not return a fully qualified URI. That is, the return value will not contain the scheme (e.g. http, https), the server host or IP, or port number.</remarks>\r\n        string ToFullUrl(string url);\r\n\r\n        /// <summary>\r\n        /// Name of the Http Method, i.e., POST/GET/PUT/DELETE\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        string HttpMethod();\r\n\r\n        /// <summary>\r\n        /// Is there any value(s) for the header key\r\n        /// </summary>\r\n        /// <param name=\"key\"></param>\r\n        /// <returns></returns>\r\n        bool HasHeader(string key);\r\n\r\n        /// <summary>\r\n        /// Get all the header values for a given header key\r\n        /// </summary>\r\n        /// <param name=\"key\"></param>\r\n        /// <returns></returns>\r\n        IEnumerable<string> GetHeader(string key);\r\n\r\n        /// <summary>\r\n        /// All request header keys\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        IEnumerable<string> AllHeaderKeys();\r\n\r\n\r\n        /// <summary>\r\n        /// Exposes the query string keys and values for\r\n        /// the current Http request\r\n        /// </summary>\r\n        NameValueCollection QueryString { get; }\r\n\r\n        /// <summary>\r\n        /// Exposes the name/value form post data for \r\n        /// the current HTTP request if it exists\r\n        /// </summary>\r\n        NameValueCollection Form { get; }\r\n\r\n        /// <summary>\r\n        /// Read the body of the HTTP request as a Stream\r\n        /// Note: you cannot reading the Stream and the Form\r\n        /// is mutually exclusive within one request\r\n        /// </summary>\r\n        Stream Input { get; }\r\n\r\n        /// <summary>\r\n        /// Is the client still connected to this request?\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        bool IsClientConnected();\r\n\r\n        /// <summary>\r\n        /// Access to the Request Cookies\r\n        /// </summary>\r\n        ICookies Cookies { get; }\r\n    }\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/IHttpResponse.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Net;\r\nusing System.Threading.Tasks;\r\nusing System.Web;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Http.Compression;\r\nusing FubuMVC.Core.Http.Headers;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    /// <summary>\r\n    /// Lowest level service to write to the Http output\r\n    /// </summary>\r\n    public interface IHttpResponse\r\n    {\r\n        /// <summary>\r\n        /// Write a header value to the response\r\n        /// </summary>\r\n        /// <param name=\"key\"></param>\r\n        /// <param name=\"value\"></param>\r\n        void AppendHeader(string key, string value);\r\n\r\n        /// <summary>\r\n        /// Write the contents of the file location out into the output stream\r\n        /// </summary>\r\n        /// <param name=\"file\"></param>\r\n        // TODO -- make this be async someday\r\n        void WriteFile(string file);\r\n\r\n        /// <summary>\r\n        /// Set the Content-Type response header\r\n        /// </summary>\r\n        /// <param name=\"contentType\"></param>\r\n        void WriteContentType(string contentType);\r\n\r\n        /// <summary>\r\n        /// Write string content to the output.  This method can be called multiple times\r\n        /// for each request.  Many Bothans died to bring you this functionality.\r\n        /// </summary>\r\n        /// <param name=\"content\"></param>\r\n        Task Write(string content);\r\n\r\n        /// <summary>\r\n        /// Writes a 302 redirect response and body to the http output\r\n        /// </summary>\r\n        /// <param name=\"url\"></param>\r\n        void Redirect(string url);\r\n\r\n        /// <summary>\r\n        /// Writes the status code and an optional status description to the response\r\n        /// </summary>\r\n        /// <param name=\"status\"></param>\r\n        /// <param name=\"description\"></param>\r\n        void WriteResponseCode(HttpStatusCode status, string description = null);\r\n\r\n        /// <summary>\r\n        /// The HTTP status code.  The default is 200\r\n        /// </summary>\r\n        int StatusCode { get; set; }\r\n\r\n        /// <summary>\r\n        /// The HTTP status description header\r\n        /// </summary>\r\n        string StatusDescription { get; set; }\r\n\r\n\r\n        /// <summary>\r\n        /// All response header values for the key\r\n        /// </summary>\r\n        /// <param name=\"headerKey\"></param>\r\n        /// <returns></returns>\r\n        IEnumerable<string> HeaderValueFor(string headerKey);\r\n\r\n        /// <summary>\r\n        /// All appended Header values, per key and value\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        IEnumerable<Header> AllHeaders();\r\n\r\n        /// <summary>\r\n        /// Applies output encoding to the response.  Mostly used by FubuMVC's internal support for content compression\r\n        /// </summary>\r\n        /// <param name=\"encoding\"></param>\r\n        void UseEncoding(IHttpContentEncoding encoding);\r\n\r\n        /// <summary>\r\n        /// Write directly to the output stream\r\n        /// </summary>\r\n        /// <param name=\"output\"></param>\r\n        Task Write(Func<Stream, Task> output);\r\n\r\n        /// <summary>\r\n        /// Force the output to write to the http output.  Do NOT use this unless you know exactly what the ramifications are, and\r\n        /// this varies by host type.  \r\n        /// </summary>\r\n        void Flush();\r\n    }\r\n\r\n    // TODO -- flesh this out\r\n    public class RecordingHttpResponse : IHttpResponse\r\n    {\r\n        private readonly StringWriter _writer = new StringWriter();\r\n\r\n        public void AppendHeader(string key, string value)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void WriteFile(string file)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void WriteContentType(string contentType)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task Write(string content)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void Redirect(string url)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void WriteResponseCode(HttpStatusCode status, string description = null)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public int StatusCode { get; set; }\r\n        public string StatusDescription { get; set; }\r\n\r\n        public IEnumerable<string> HeaderValueFor(string headerKey)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public IEnumerable<Header> AllHeaders()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void UseEncoding(IHttpContentEncoding encoding)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public async Task Write(Func<Stream, Task> output)\r\n        {\r\n            var stream = new MemoryStream();\r\n            await output(stream).ConfigureAwait(false);\r\n\r\n            stream.Position = 0;\r\n            _writer.WriteLine(stream.ReadAllText());\r\n\r\n        }\r\n\r\n        public void Flush()\r\n        {\r\n            // definitely don't do anything here\r\n        }\r\n\r\n        public string AllText()\r\n        {\r\n            return _writer.ToString();\r\n        }\r\n    }\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/IMimetypeCorrection.cs",
    "content": "﻿using FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    public interface IMimetypeCorrection\r\n    {\r\n        void Correct(CurrentMimeType mimeType, IHttpRequest request, BehaviorChain chain);\r\n    }\r\n\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/MimeTypeList.cs",
    "content": "using System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    public class MimeTypeList : IEnumerable<string>\r\n    {\r\n        private readonly IList<string> _mimeTypes = new List<string>();\r\n\r\n        // put stuff after ';' over to the side\r\n        // look for ',' separated values\r\n        public MimeTypeList(string mimeType)\r\n        {\r\n            Raw = mimeType;\r\n\r\n            if (mimeType != null)\r\n            {\r\n                mimeType.ToDelimitedArray(',').Each(x =>\r\n                {\r\n                    var type = x.Split(';').First();\r\n                    if (type.IsNotEmpty())\r\n                    {\r\n                        _mimeTypes.Add(type);\r\n                    }\r\n                });\r\n            }\r\n        }\r\n\r\n        public string Raw { get; private set; }\r\n\r\n        public MimeTypeList(params MimeType[] mimeTypes)\r\n        {\r\n            Raw = mimeTypes.Select(x => x.Value).Join(\";\");\r\n            _mimeTypes.AddRange(mimeTypes.Select(x => x.Value));\r\n        }\r\n\r\n        public void AddMimeType(string mimeType)\r\n        {\r\n            _mimeTypes.Add(mimeType);\r\n        }\r\n\r\n        public bool Matches(params string[] mimeTypes)\r\n        {\r\n            return _mimeTypes.Intersect(mimeTypes).Any();\r\n        }\r\n\r\n        IEnumerator IEnumerable.GetEnumerator()\r\n        {\r\n            return GetEnumerator();\r\n        }\r\n\r\n        public IEnumerator<string> GetEnumerator()\r\n        {\r\n            return _mimeTypes.GetEnumerator();\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return _mimeTypes.Join(\", \");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/AspNetHttpRequestAdapter.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Web;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Http.Owin\n{\n    public class AspNetHttpRequestAdapter : HttpRequestBase\n    {\n        private readonly IDictionary<string, object> _environment;\n\n        public AspNetHttpRequestAdapter(IDictionary<string, object> environment)\n        {\n            _environment = environment;\n            \n        }\n\n        public override string PathInfo\n        {\n            get { return _environment.Get<string>(OwinConstants.RequestPathKey).TrimStart('/'); }\n        }\n\n        public override string AppRelativeCurrentExecutionFilePath\n        {\n            get { return \"~/\"; }\n        }\n\n        public override string HttpMethod\n        {\n            get { return _environment.Get<string>(OwinConstants.RequestMethodKey); }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/FubuOwinHost.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Net;\r\nusing System.Threading.Tasks;\r\nusing System.Web.Routing;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Http.Owin.Readers;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Handlers;\r\nusing HtmlTags;\r\n\r\nnamespace FubuMVC.Core.Http.Owin\r\n{\r\n    using AppFunc = Func<IDictionary<string, object>, Task>;\r\n\r\n    public class FubuOwinHost\r\n    {\r\n        private readonly RouteCollection _routes;\r\n\r\n        public static AppFunc ToAppFunc(FubuRuntime runtime, OwinSettings settings = null)\r\n        {\r\n            settings = settings ?? runtime.Get<OwinSettings>();\r\n            var host = new FubuOwinHost(runtime.Routes);\r\n            AppFunc inner = host.Invoke;\r\n            AppFunc appFunc = settings.BuildAppFunc(inner, runtime.Get<IServiceFactory>());\r\n\r\n            var diagnostics = runtime.Get<DiagnosticsSettings>();\r\n            return diagnostics.WrapAppFunc(runtime, appFunc);\r\n        }\r\n\r\n\r\n        public FubuOwinHost(IEnumerable<RouteBase> routes)\r\n        {\r\n            _routes = new RouteCollection();\r\n            _routes.AddRange(routes);\r\n        }\r\n\r\n        public async Task Invoke(IDictionary<string, object> environment)\r\n        {\r\n            var owinHttpContext = new OwinHttpContext(environment);\r\n            var routeData = _routes.GetRouteData(owinHttpContext);\r\n            if (routeData == null)\r\n            {\r\n                write404(environment);\r\n                return;\r\n            }\r\n\r\n\r\n            new OwinRequestReader().Read(environment);\r\n\r\n            var arguments = new OwinServiceArguments(routeData, environment);\r\n            var invoker = routeData.RouteHandler.As<FubuRouteHandler>().Invoker;\r\n\r\n            try\r\n            {\r\n                await invoker.Invoke(arguments, routeData.Values).ConfigureAwait(false);\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                write500(environment, e);\r\n            }\r\n        }\r\n\r\n        private void write404(IDictionary<string, object> environment)\r\n        {\r\n            environment[OwinConstants.ResponseStatusCodeKey] = HttpStatusCode.NotFound;\r\n        }\r\n\r\n        private void write500(IDictionary<string, object> environment, Exception exception)\r\n        {\r\n            using (var writer = new OwinHttpResponse(environment))\r\n            {\r\n                writer.WriteResponseCode(HttpStatusCode.InternalServerError);\r\n                var document = new HtmlDocument\r\n                {\r\n                    Title = \"Exception!\"\r\n                };\r\n\r\n                document.Add(\"h1\").Text(\"FubuMVC has detected an exception\");\r\n                document.Add(\"hr\");\r\n                document.Add(\"pre\").Id(\"error\").Text(exception.ToString());\r\n\r\n                writer.WriteContentType(MimeType.Html.Value);\r\n                writer.Write(document.ToString());\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Middleware/FilteredOwinMiddleware.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Middleware\r\n{\r\n    public abstract class FilteredOwinMiddleware : IOwinMiddleware\r\n    {\r\n        private readonly Func<IDictionary<string, object>, Task> _inner;\r\n\r\n        protected FilteredOwinMiddleware(Func<IDictionary<string, object>, Task> inner)\r\n        {\r\n            _inner = inner;\r\n        }\r\n\r\n        public Task Invoke(IDictionary<string, object> environment)\r\n        {\r\n            var continuation = Invoke(new OwinHttpRequest(environment), new OwinHttpResponse(environment));\r\n\r\n            return continuation.ToTask(environment, _inner);\r\n        }\r\n\r\n        public abstract MiddlewareContinuation Invoke(IHttpRequest request, IHttpResponse response);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Middleware/HtmlHeadInjectionMiddleware.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Middleware\r\n{\r\n    using AppFunc = Func<IDictionary<string, object>, Task>;\r\n\r\n    public class HtmlHeadInjectionMiddleware : IOwinMiddleware\r\n    {\r\n        public static readonly string TEXT_PROPERTY = \"HTML-HEAD-INJECTION\";\r\n\r\n        private readonly AppFunc _inner;\r\n        private readonly InjectionOptions _options;\r\n\r\n        public HtmlHeadInjectionMiddleware(AppFunc inner, InjectionOptions options)\r\n        {\r\n            _inner = inner;\r\n            _options = options;\r\n        }\r\n\r\n        public Task Invoke(IDictionary<string, object> environment)\r\n        {\r\n            if (!environment.Get<string>(OwinConstants.RequestMethodKey).EqualsIgnoreCase(\"GET\"))\r\n            {\r\n                return _inner(environment);\r\n            }\r\n\r\n            var originalOutput = environment.Get<Stream>(OwinConstants.ResponseBodyKey);\r\n            var recordedStream = new MemoryStream();\r\n            environment.Set(OwinConstants.ResponseBodyKey, recordedStream);\r\n\r\n            return _inner(environment).ContinueWith(t => {\r\n                recordedStream.Position = 0;\r\n                environment[OwinConstants.ResponseBodyKey] = originalOutput;\r\n\r\n                var response = new OwinHttpResponse(environment);\r\n\r\n                if (IsGetHtmlRequest(environment) && response.StatusCode < 500)\r\n                {\r\n                    injectContent(environment, recordedStream, response);\r\n                }\r\n                else\r\n                {\r\n                    response.StreamContents(recordedStream);\r\n                }\r\n            });\r\n        }\r\n\r\n        private void injectContent(IDictionary<string, object> environment, MemoryStream recordedStream, OwinHttpResponse response)\r\n        {\r\n            var html = recordedStream.ReadAllText();\r\n            var builder = new StringBuilder(html);\r\n            var position = html.IndexOf(\"</head>\", 0, StringComparison.OrdinalIgnoreCase);\r\n\r\n            if (position >= 0)\r\n            {\r\n                builder.Insert(position, _options.Content(environment));\r\n            }\r\n\r\n            response.Write(builder.ToString());\r\n            response.Flush();\r\n        }\r\n\r\n        public static bool IsGetHtmlRequest(IDictionary<string, object> environment)\r\n        {\r\n            return environment.Get<string>(OwinConstants.RequestMethodKey).EqualsIgnoreCase(\"GET\") &&\r\n                   new OwinHttpResponse(environment).ContentTypeMatches(MimeType.Html);\r\n        }\r\n    }\r\n\r\n    public class InjectionOptions\r\n    {\r\n        public Func<IDictionary<string, object>, string> Content = x => \"\";\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Middleware/IOwinMiddleware.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Middleware\r\n{\r\n    public interface IOwinMiddleware\r\n    {\r\n        Task Invoke(IDictionary<string, object> environment);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Middleware/MiddlewareChain.cs",
    "content": "﻿using FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Middleware\r\n{\r\n    public class MiddlewareChain : Chain<MiddlewareNode, MiddlewareChain>\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Middleware/MiddlewareContinuation.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Middleware\r\n{\r\n    public class MiddlewareContinuation\r\n    {\r\n        public static MiddlewareContinuation Continue(Func<Task> action = null)\r\n        {\r\n            return new MiddlewareContinuation {DoNext = DoNext.Continue, Action = action};\r\n        }\r\n\r\n        public static MiddlewareContinuation StopHere(Func<Task> action = null)\r\n        {\r\n            return new MiddlewareContinuation { DoNext = DoNext.Stop, Action = action };\r\n        }\r\n\r\n        public DoNext DoNext;\r\n        public Func<Task> Action;\r\n\r\n        public void AssertOnlyContinuesToTheInner()\r\n        {\r\n            if (Action != null)\r\n            {\r\n                throw new Exception(\"There is an action on this continuation\");\r\n            }\r\n\r\n            if (DoNext == DoNext.Stop)\r\n            {\r\n                throw new Exception(\"The continuation is 'DoNext.Stop'\");\r\n            }\r\n        }\r\n\r\n        public async Task ToTask(IDictionary<string, object> environment, Func<IDictionary<string, object>, Task> inner)\r\n        {\r\n            if (Action != null)\r\n            {\r\n                await Action.Invoke().ConfigureAwait(false);\r\n            }\r\n\r\n            if (DoNext == DoNext.Continue)\r\n            {\r\n                await inner(environment).ConfigureAwait(false);\r\n            }\r\n        }\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Middleware/MiddlewareDeactivator.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Middleware\r\n{\r\n    public class MiddlewareDeactivator : IDeactivator\r\n    {\r\n        private readonly OwinSettings _settings;\r\n\r\n        public MiddlewareDeactivator(OwinSettings settings)\r\n        {\r\n            _settings = settings;\r\n        }\r\n\r\n        public void Deactivate(IActivationLog log)\r\n        {\r\n            _settings.Middleware.OfType<IDisposable>().Each(x => x.Dispose());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Middleware/MiddlewareNode.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Runtime;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Middleware\r\n{\r\n    using AppFunc = Func<IDictionary<string, object>, Task>;\r\n\r\n    public abstract class MiddlewareNode : Node<MiddlewareNode, MiddlewareChain>\r\n    {\r\n        private BehaviorCategory _category = BehaviorCategory.Process;\r\n\r\n\r\n        public MiddlewareNode Category(BehaviorCategory category)\r\n        {\r\n            _category = category;\r\n            return this;\r\n        }\r\n\r\n        public BehaviorCategory Category()\r\n        {\r\n            return _category;\r\n        }\r\n\r\n        public abstract AppFunc BuildAppFunc(AppFunc inner, IServiceFactory factory);\r\n        public abstract Description ToDescription();\r\n    }\r\n\r\n    public class MiddlewareNode<T> : MiddlewareNode, IDisposable where T : class, IOwinMiddleware\r\n    {\r\n        // TODO -- add other service arguments\r\n        public readonly TypeArguments Arguments = new TypeArguments();\r\n        private T _middleware;\r\n\r\n        // Tested through integration tests\r\n        public override AppFunc BuildAppFunc(AppFunc inner, IServiceFactory factory)\r\n        {\r\n            Arguments.Set(inner);\r\n            _middleware = factory.Build<T>(Arguments);\r\n            \r\n\r\n            return _middleware.Invoke;\r\n        }\r\n\r\n        public T Middleware\r\n        {\r\n            get { return _middleware; }\r\n        }\r\n\r\n        public override Description ToDescription()\r\n        {\r\n            if (_middleware == null)\r\n            {\r\n                return new Description\r\n                {\r\n                    Title = typeof(T).FullName\r\n                };\r\n            }\r\n\r\n            return Description.For(_middleware);\r\n        }\r\n\r\n        public void Dispose()\r\n        {\r\n            var disposable = _middleware as IDisposable;\r\n            disposable.CallIfNotNull(x => x.Dispose());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Middleware/StaticFiles/DenyConfigRule.cs",
    "content": "﻿using System.ComponentModel;\r\nusing System.IO;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.Security;\r\nusing FubuMVC.Core.Security.Authorization;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Middleware.StaticFiles\r\n{\r\n    [Description(\"Denies read access to any *.config file\")]\r\n    public class DenyConfigRule : IStaticFileRule\r\n    {\r\n        public AuthorizationRight IsAllowed(IFubuFile file)\r\n        {\r\n            return Path.GetExtension(file.Path).EqualsIgnoreCase(\".config\")\r\n                ? AuthorizationRight.Deny\r\n                : AuthorizationRight.None;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Middleware/StaticFiles/IStaticFileRule.cs",
    "content": "﻿using FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.Security;\r\nusing FubuMVC.Core.Security.Authorization;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Middleware.StaticFiles\r\n{\r\n    public interface IStaticFileRule\r\n    {\r\n        AuthorizationRight IsAllowed(IFubuFile file);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Middleware/StaticFiles/StaticFileMiddleware.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.Security.Authorization;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Middleware.StaticFiles\r\n{\r\n    public class StaticFileMiddleware : FilteredOwinMiddleware\r\n    {\r\n        private readonly IFubuApplicationFiles _files;\r\n        private readonly AssetSettings _settings;\r\n\r\n        public StaticFileMiddleware(Func<IDictionary<string, object>, Task> inner, IFubuApplicationFiles files, AssetSettings settings) : base(inner)\r\n        {\r\n            _files = files;\r\n            _settings = settings;\r\n        }\r\n\r\n        public override MiddlewareContinuation Invoke(IHttpRequest request, IHttpResponse response)\r\n        {\r\n            if (request.IsNotHttpMethod(\"GET\", \"HEAD\")) return MiddlewareContinuation.Continue();\r\n\r\n            // TODO -- hokey. Get rid of this as we switch over to pure OWIN instead\r\n            // of the IHttp**** wrappers\r\n            var relativeUrl = request.RelativeUrl().Split('?').FirstOrDefault();\r\n\r\n            // Gets around what I *think* is a Katana bug \r\n            if (relativeUrl.StartsWith(\"http:/\")) return MiddlewareContinuation.Continue();\r\n\r\n            var file = _files.Find(relativeUrl);\r\n            if (file == null) return MiddlewareContinuation.Continue();\r\n\r\n            if (_settings.DetermineStaticFileRights(file) != AuthorizationRight.Allow)\r\n            {\r\n                return MiddlewareContinuation.Continue();\r\n            }\r\n\r\n            if (request.IsHead())\r\n            {\r\n                return new WriteFileHeadContinuation(response, file, HttpStatusCode.OK);\r\n            }\r\n\r\n            if (request.IfMatchHeaderDoesNotMatchEtag(file))\r\n            {\r\n                return new WriteStatusCodeContinuation(response, HttpStatusCode.PreconditionFailed, \"If-Match test failed\"); \r\n            }\r\n\r\n            if (request.IfNoneMatchHeaderMatchesEtag(file))\r\n            {\r\n                return new WriteFileHeadContinuation(response, file, HttpStatusCode.NotModified);\r\n            }\r\n\r\n            if (request.IfModifiedSinceHeaderAndNotModified(file))\r\n            {\r\n                return new WriteFileHeadContinuation(response, file, HttpStatusCode.NotModified);\r\n            }\r\n\r\n            if (request.IfUnModifiedSinceHeaderAndModifiedSince(file))\r\n            {\r\n                return new WriteStatusCodeContinuation(response, HttpStatusCode.PreconditionFailed, \"File has been modified\");\r\n            }\r\n\r\n            // Write headers here.\r\n\r\n            return new WriteFileContinuation(response, file, _settings);\r\n        }\r\n\r\n        \r\n    }\r\n\r\n    public static class CurrentHttpRequestExtensions\r\n    {\r\n        public static bool IfUnModifiedSinceHeaderAndModifiedSince(this IHttpRequest request, IFubuFile file)\r\n        {\r\n            var ifUnModifiedSince = request.IfUnModifiedSince();\r\n            return ifUnModifiedSince.HasValue && file.LastModified() > ifUnModifiedSince.Value;\r\n        }\r\n\r\n        public static bool IfModifiedSinceHeaderAndNotModified(this IHttpRequest request, IFubuFile file)\r\n        {\r\n            var ifModifiedSince = request.IfModifiedSince();\r\n            return ifModifiedSince.HasValue && file.LastModified().ToUniversalTime() <= ifModifiedSince.Value;\r\n        }\r\n\r\n        public static bool IfNoneMatchHeaderMatchesEtag(this IHttpRequest request, IFubuFile file)\r\n        {\r\n            return request.IfNoneMatch().EtagMatches(file.Etag()) == EtagMatch.Yes;\r\n        }\r\n\r\n        public static bool IfMatchHeaderDoesNotMatchEtag(this IHttpRequest request, IFubuFile file)\r\n        {\r\n            return request.IfMatch().EtagMatches(file.Etag()) == EtagMatch.No;\r\n        }\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Middleware/StaticFiles/WriteFileContinuation.cs",
    "content": "﻿using System.Net;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.Runtime.Files;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Middleware.StaticFiles\r\n{\r\n    public class WriteFileContinuation : WriterContinuation\r\n    {\r\n        private readonly IFubuFile _file;\r\n        private readonly AssetSettings _settings;\r\n\r\n        public WriteFileContinuation(IHttpResponse response, IFubuFile file, AssetSettings settings) : base(response, DoNext.Stop)\r\n        {\r\n            _file = file;\r\n            _settings = settings;\r\n        }\r\n\r\n        public override Task Write(IHttpResponse response)\r\n        {\r\n            response.WriteFile(_file.Path);\r\n\r\n            WriteFileHeadContinuation.WriteHeaders(response, _file);\r\n\r\n            _settings.Headers.Each((key, source) => response.AppendHeader(key, source()));\r\n\r\n            response.WriteResponseCode(HttpStatusCode.OK);\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        public IFubuFile File => _file;\r\n\r\n        public override string ToString()\r\n        {\r\n            return $\"Write file: {_file}\";\r\n        }\r\n\r\n        protected bool Equals(WriteFileContinuation other)\r\n        {\r\n            return Equals(_file, other._file);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != this.GetType()) return false;\r\n            return Equals((WriteFileContinuation) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return (_file != null ? _file.GetHashCode() : 0);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Middleware/StaticFiles/WriteFileHeadContinuation.cs",
    "content": "﻿using System.Net;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Files;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Middleware.StaticFiles\r\n{\r\n    public class WriteFileHeadContinuation : WriterContinuation\r\n    {\r\n        private readonly IFubuFile _file;\r\n        private readonly HttpStatusCode _status;\r\n\r\n        public WriteFileHeadContinuation(IHttpResponse response, IFubuFile file, HttpStatusCode status) : base(response, DoNext.Stop)\r\n        {\r\n            _file = file;\r\n            _status = status;\r\n        }\r\n\r\n        public IFubuFile File => _file;\r\n\r\n        public HttpStatusCode Status => _status;\r\n\r\n        public static void WriteHeaders(IHttpResponse response, IFubuFile file)\r\n        {\r\n            var mimeType = MimeType.MimeTypeByFileName(file.Path);\r\n            if (mimeType != null)\r\n            {\r\n                response.AppendHeader(HttpResponseHeaders.ContentType, mimeType.Value);\r\n            }\r\n\r\n            response.AppendHeader(HttpResponseHeaders.LastModified, file.LastModified().ToString(\"r\"));\r\n            response.AppendHeader(HttpResponseHeaders.ETag, file.Etag().Quoted());\r\n\r\n        }\r\n\r\n        public override Task Write(IHttpResponse response)\r\n        {\r\n            WriteHeaders(response, _file);\r\n\r\n            if (_status == HttpStatusCode.OK)\r\n            {\r\n                response.AppendHeader(HttpResponseHeaders.ContentLength, _file.Length().ToString());\r\n            }\r\n\r\n            response.WriteResponseCode(_status);\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Middleware/StaticFiles/WriteStatusCodeContinuation.cs",
    "content": "﻿using System.Net;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Middleware.StaticFiles\r\n{\r\n    public class WriteStatusCodeContinuation : WriterContinuation\r\n    {\r\n        private readonly HttpStatusCode _status;\r\n        private readonly string _reason;\r\n\r\n        public WriteStatusCodeContinuation(IHttpResponse response, HttpStatusCode status, string reason)\r\n            : base(response, DoNext.Stop)\r\n        {\r\n            _status = status;\r\n            _reason = reason;\r\n        }\r\n\r\n        public override Task Write(IHttpResponse response)\r\n        {\r\n            response.WriteResponseCode(_status, _reason);\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        public HttpStatusCode Status => _status;\r\n\r\n        public string Reason => _reason;\r\n\r\n        protected bool Equals(WriteStatusCodeContinuation other)\r\n        {\r\n            return _status == other._status && string.Equals(_reason, other._reason);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != this.GetType()) return false;\r\n            return Equals((WriteStatusCodeContinuation) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                return ((int) _status*397) ^ (_reason != null ? _reason.GetHashCode() : 0);\r\n            }\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Stopping with Code: {0}, Reason: {1}\", _status, _reason);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Middleware/StaticFiles/WriterContinuation.cs",
    "content": "﻿using System;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Middleware.StaticFiles\r\n{\r\n    public abstract class WriterContinuation : MiddlewareContinuation\r\n    {\r\n        protected WriterContinuation(IHttpResponse response, DoNext doNext)\r\n        {\r\n            if (response == null) throw new ArgumentNullException(nameof(response));\r\n\r\n            DoNext = doNext;\r\n\r\n            Action = async () => {\r\n                await Write(response).ConfigureAwait(false);\r\n                response.Flush();\r\n            };\r\n        }\r\n\r\n        public abstract Task Write(IHttpResponse response);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/OwinConstants.cs",
    "content": "﻿namespace FubuMVC.Core.Http.Owin\n{\n    public static class OwinConstants\n    {\n        public const string OwinVersion = \"1.0\";\n        public const string CallCancelledKey = \"owin.CallCancelled\";\n\n        public const string RequestBodyKey = \"owin.RequestBody\";\n        public const string VersionKey = \"owin.Version\";\n        public const string RequestHeadersKey = \"owin.RequestHeaders\";\n        public const string RequestMethodKey = \"owin.RequestMethod\";\n        public const string RequestPathBaseKey = \"owin.RequestPathBase\";\n        public const string RequestPathKey = \"owin.RequestPath\";\n        public const string RequestProtocolKey = \"owin.RequestProtocol\";\n        public const string RequestQueryStringKey = \"owin.RequestQueryString\";\n        public const string RequestSchemeKey = \"owin.RequestScheme\";\n        public const string ResponseBodyKey = \"owin.ResponseBody\";\n        public const string ResponseHeadersKey = \"owin.ResponseHeaders\";\n        public const string ResponseProtocolKey = \"owin.ResponseProtocol\";\n        public const string ResponseStatusCodeKey = \"owin.ResponseStatusCode\";\n        public const string ResponseReasonPhraseKey = \"owin.ReasonPhrase\";\n\n        public const string ClientCertifiateKey = \"ssl.ClientCertificate\";\n\n        public const string ServerRemoteIpAddressKey = \"server.RemoteIpAddress\";\n        public const string ServerRemotePortKey = \"server.RemotePort\";\n        public const string ServerLocalIpAddressKey = \"server.LocalIpAddress\";\n        public const string ServerLocalPortKey = \"server.LocalPort\";\n        public const string ServerUserKey = \"server.User\";\n        public const string ServerIsLocalKey = \"server.IsLocal\";\n\n        public const string WebSocketSupportKey = \"websocket.Support\";\n        public const string WebSocketFuncKey = \"websocket.Func\";\n        public const string WebSocketSupport = \"WebSocketFunc\";\n\n        public const string WwwAuthenticateHeader = \"WWW-Authenticate\";\n        public const string AcceptHeader = \"Accept\";\n        public const string ContentTypeHeader = \"Content-Type\";\n        public const string ContentLengthHeader = \"Content-Length\";\n        public const string TransferEncodingHeader = \"Transfer-Encoding\";\n        public const string KeepAliveHeader = \"Keep-Alive\";\n        public const string ConnectionHeader = \"Connection\";\n        public const string HostHeader = \"Host\";\n\n        //Fubu specific keys until owin has equivalents\n        public const string MediaTypeKey = \"fubu.MediaType\";\n        public const string RequestFormKey = \"fubu.RequestForm\";\r\n\r\n        public const string AppMode = \"host.AppMode\";\r\n        public const string HeaderSettings = \"fubu.headerSettings\";\r\n    }\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/OwinContext.cs",
    "content": "using System.Collections.Generic;\r\n\r\nnamespace FubuMVC.Core.Http.Owin\r\n{\r\n    public class OwinContext\r\n    {\r\n        private readonly IDictionary<string, object> _environment;\r\n\r\n        public OwinContext(IDictionary<string, object> environment)\r\n        {\r\n            _environment = environment;\r\n        }\r\n\r\n        public IDictionary<string, object> Environment\r\n        {\r\n            get { return _environment; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/OwinHeaderSettings.cs",
    "content": "﻿using System.Collections.Generic;\r\n\r\nnamespace FubuMVC.Core.Http.Owin\r\n{\r\n    public class OwinHeaderSettings\r\n    {\r\n        private readonly IList<string> _singularHeaders = new List<string>();\r\n\r\n        public OwinHeaderSettings()\r\n        {\r\n            DoNotAllowMultipleValues(HttpRequestHeaders.ContentLength);\r\n        }\r\n\r\n        public void DoNotAllowMultipleValues(string key)\r\n        {\r\n            _singularHeaders.Add(key);\r\n        }\r\n\r\n        public bool AllowMultiple(string key)\r\n        {\r\n            return !_singularHeaders.Contains(key);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/OwinHttpContext.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Web;\r\n\r\nnamespace FubuMVC.Core.Http.Owin\n{\n    public class OwinHttpContext : HttpContextBase\n    {\n        private readonly AspNetHttpRequestAdapter _request;\n\n        public OwinHttpContext(IDictionary<string, object> environment)\n        {\n            _request = new AspNetHttpRequestAdapter(environment);\n        }\n\n        public override HttpRequestBase Request\n        {\n            get { return _request; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/OwinHttpRequest.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.Specialized;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Web;\r\nusing System.Xml.Serialization;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Http.Cookies;\r\nusing FubuMVC.Core.Http.Scenarios;\r\nusing FubuMVC.Core.Json;\r\nusing HtmlTags;\r\n\r\nnamespace FubuMVC.Core.Http.Owin\r\n{\r\n    // TODO -- OwinHttpRequest is too big.  Thin it down.  Extract some responsibilities\r\n    public class OwinHttpRequest : IHttpRequest\r\n    {\r\n        public static OwinHttpRequest ForTesting()\r\n        {\r\n            var request = new OwinHttpRequest();\r\n            request.HttpMethod(\"GET\");\r\n            request.FullUrl(\"http://server\");\r\n\r\n\r\n            return request;\r\n        }\r\n\r\n        private readonly IDictionary<string, object> _environment;\r\n        private readonly Lazy<IDictionary<string, string[]>> _headers;\r\n        private readonly Lazy<NameValueCollection> _querystring;\r\n\r\n        public OwinHttpRequest() : this(new Dictionary<string, object>())\r\n        {\r\n            _environment.Add(OwinConstants.RequestHeadersKey, new Dictionary<string, string[]>());\r\n            _querystring = new Lazy<NameValueCollection>(() => new NameValueCollection());\r\n            _environment.Add(OwinConstants.ResponseBodyKey, new MemoryStream());\r\n        }\r\n\r\n        public OwinHttpRequest(IDictionary<string, object> environment)\r\n        {\r\n            _environment = environment;\r\n            _headers =\r\n                new Lazy<IDictionary<string, string[]>>(\r\n                    () =>\r\n                    {\r\n                        if (!environment.ContainsKey(OwinConstants.RequestHeadersKey))\r\n                        {\r\n                            environment.Add(OwinConstants.RequestHeadersKey, new Dictionary<string, string[]>());\r\n                        }\r\n                        \r\n                        \r\n                        return environment.Get<IDictionary<string, string[]>>(OwinConstants.RequestHeadersKey);\r\n                    });\r\n\r\n            _querystring =\r\n                new Lazy<NameValueCollection>(\r\n                    () => {\r\n                        if (!environment.ContainsKey(OwinConstants.RequestQueryStringKey)) return new NameValueCollection();\r\n\r\n                        var values = HttpUtility.ParseQueryString(environment.Get<string>(OwinConstants.RequestQueryStringKey));\r\n\r\n                        return values;\r\n                    });\r\n\r\n            Cookies = new Cookies.Cookies(this);\r\n        }\r\n\r\n        public IDictionary<string, object> Environment\r\n        {\r\n            get { return _environment; }\r\n        }\r\n\r\n        private T get<T>(string key)\r\n        {\r\n            object value;\r\n            return _environment.TryGetValue(key, out value) ? (T) value : default(T);\r\n        }\r\n\r\n        private void append(string key, object o)\r\n        {\r\n            if (_environment.ContainsKey(key))\r\n            {\r\n                _environment[key] = o;\r\n            }\r\n            else\r\n            {\r\n                _environment.Add(key, o);\r\n            }\r\n        }\r\n\r\n        public string RawUrl()\r\n        {\r\n            var queryString = get<string>(OwinConstants.RequestQueryStringKey);\r\n            if (queryString.IsEmpty())\r\n            {\r\n                return get<string>(OwinConstants.RequestPathBaseKey) + get<string>(OwinConstants.RequestPathKey);\r\n            }\r\n\r\n            return get<string>(\"owin.RequestPathBase\") + get<string>(\"owin.RequestPath\") + \"?\" +\r\n                   get<string>(\"owin.RequestQueryString\");\r\n        }\r\n\r\n        public string RelativeUrl()\r\n        {\r\n            var url = _environment.Get<string>(OwinConstants.RequestPathKey).TrimStart('/');\r\n\r\n            var queryString = get<string>(OwinConstants.RequestQueryStringKey);\r\n            if (queryString.IsNotEmpty())\r\n            {\r\n                url = url + \"?\" + queryString;\r\n            }\r\n\r\n            return url;\r\n        }\r\n\r\n        public void AppendCookie(Cookie cookie)\r\n        {\r\n            if (_headers.Value.ContainsKey(HttpRequestHeaders.Cookie))\r\n            {\r\n                _headers.Value[HttpRequestHeaders.Cookie][0] = _headers.Value[HttpRequestHeaders.Cookie][0] + \"; \" +\r\n                                                            cookie.ToString();\r\n            }\r\n            else\r\n            {\r\n                AppendHeader(HttpRequestHeaders.Cookie, cookie.ToString());\r\n            }\r\n\r\n            \r\n        }\r\n\r\n        public OwinHttpRequest RelativeUrl(string url)\r\n        {\r\n            var parts = url.Split('?');\r\n\r\n            append(OwinConstants.RequestPathKey, parts.First());\r\n\r\n            if (url.Contains(\"?\"))\r\n            {\r\n                var querystring = parts.Last();\r\n                if (_environment.ContainsKey(OwinConstants.RequestQueryStringKey))\r\n                {\r\n                    _environment[OwinConstants.RequestQueryStringKey] = querystring;\r\n                }\r\n                else\r\n                {\r\n                    _environment.Add(OwinConstants.RequestQueryStringKey, querystring);\r\n                }\r\n            }\r\n\r\n            return this;\r\n        }\r\n\r\n        public OwinHttpRequest FullUrl(string url)\r\n        {\r\n            var parts = url.Split('?');\r\n            var root = parts.First();\r\n\r\n            var uri = new Uri(root);\r\n            append(OwinConstants.RequestSchemeKey, uri.Scheme);\r\n            append(OwinConstants.RequestPathBaseKey, string.Empty);\r\n            AppendHeader(HttpRequestHeaders.Host, uri.Host);\r\n            append(OwinConstants.RequestPathKey, uri.AbsolutePath);\r\n\r\n            if (parts.Length == 2)\r\n            {\r\n                append(OwinConstants.RequestQueryStringKey, parts.Last());\r\n            }\r\n            \r\n\r\n            return this;\r\n        }\r\n\r\n\r\n        public string FullUrl()\r\n        {\r\n            var requestPath = get<string>(OwinConstants.RequestPathKey);\r\n\r\n\r\n            var uriBuilder = uriBuilderFor(requestPath);\r\n\r\n\r\n            var requestQueryString = get<string>(OwinConstants.RequestQueryStringKey);\r\n            if (requestQueryString.IsNotEmpty())\r\n            {\r\n                uriBuilder.Query = requestQueryString;\r\n            }\r\n\r\n            return uriBuilder.Uri.ToString();\r\n        }\r\n\r\n        private UriBuilder uriBuilderFor(string requestPath)\r\n        {\r\n            var requestScheme = get<string>(OwinConstants.RequestSchemeKey);\r\n            var requestPathBase = get<string>(OwinConstants.RequestPathBaseKey);\r\n\r\n            // default values, in absence of a host header\r\n            var host = \"127.0.0.1\";\r\n            var port = String.Equals(requestScheme, Uri.UriSchemeHttps, StringComparison.OrdinalIgnoreCase) ? 443 : 80;\r\n\r\n            // if a single host header is available\r\n            string[] hostAndPort;\r\n            if (_headers.Value.TryGetValue(\"Host\", out hostAndPort) &&\r\n                hostAndPort != null &&\r\n                hostAndPort.Length == 1 &&\r\n                !String.IsNullOrWhiteSpace(hostAndPort[0]))\r\n            {\r\n                var parts = hostAndPort[0].Split(':');\r\n                host = parts[0];\r\n                if (parts.Length > 1)\r\n                {\r\n                    int.TryParse(parts[1], out port);\r\n                }\r\n            }\r\n\r\n            var uriBuilder = new UriBuilder(requestScheme, host, port, requestPathBase + requestPath);\r\n            return uriBuilder;\r\n        }\r\n\r\n        public string ToFullUrl(string url)\r\n        {\r\n            if (Uri.IsWellFormedUriString(url, UriKind.Absolute)) return url;\r\n\r\n            if (url.StartsWith(\"~/\"))\r\n            {\r\n                // TODO -- need to use the OwinRequestPathBase whatever in this case.  Not really important now, but might \r\n                // be down the road.\r\n                return url.TrimStart('~');\r\n            }\r\n\r\n            if (!url.StartsWith(\"/\"))\r\n            {\r\n                return \"/\" + url;\r\n            }\r\n\r\n            var requestScheme = get<string>(OwinConstants.RequestSchemeKey) + \"://\";\r\n            if (url.StartsWith(requestScheme, StringComparison.OrdinalIgnoreCase)) return url;\r\n\r\n            return uriBuilderFor(url).Uri.ToString();\r\n        }\r\n\r\n        public string HttpMethod()\r\n        {\r\n            return get<string>(OwinConstants.RequestMethodKey);\r\n        }\r\n\r\n        public OwinHttpRequest HttpMethod(string method)\r\n        {\r\n            append(OwinConstants.RequestMethodKey, method);\r\n            return this;\r\n        }\r\n\r\n        public OwinHttpRequest ReplaceHeader(string key, string value)\r\n        {\r\n            if (_headers.Value.ContainsKey(key))\r\n            {\r\n                _headers.Value[key] = new[] {value};\r\n            }\r\n            else\r\n            {\r\n                _headers.Value.Add(key, new []{value});\r\n            }\r\n\r\n            return this;\r\n        }\r\n\r\n        public OwinHttpRequest AppendHeader(string key, params string[] values)\r\n        {\r\n            values.Each(x => _headers.Value.AppendValue(key, x));\r\n\r\n            return this;\r\n        }\r\n\r\n        public OwinHttpRequest ContentType(string contentType)\r\n        {\r\n            return ReplaceHeader(HttpRequestHeaders.ContentType, contentType);\r\n        }\r\n\r\n        public OwinHttpRequest Accepts(string accepts)\r\n        {\r\n            return ReplaceHeader(HttpRequestHeaders.Accept, accepts);\r\n        }\r\n\r\n        public OwinHttpRequest IfNoneMatch(string etag)\r\n        {\r\n            return AppendHeader(HttpRequestHeaders.IfNoneMatch, etag);\r\n        }\r\n\r\n        public OwinHttpRequest IfMatch(string etag)\r\n        {\r\n            return AppendHeader(HttpRequestHeaders.IfMatch, etag);\r\n        }\r\n\r\n        public OwinHttpRequest IfModifiedSince(DateTime time)\r\n        {\r\n            return AppendHeader(HttpRequestHeaders.IfModifiedSince, time.ToUniversalTime().ToString(\"r\"));\r\n        }\r\n\r\n        public OwinHttpRequest IfUnModifiedSince(DateTime time)\r\n        {\r\n            return AppendHeader(HttpRequestHeaders.IfUnmodifiedSince, time.ToUniversalTime().ToString(\"r\"));\r\n        }\r\n\r\n        public bool HasHeader(string key)\r\n        {\r\n            return _headers.Value.ContainsKey(key) || _headers.Value.Keys.Any(x => x.EqualsIgnoreCase(key));\r\n        }\r\n\r\n        public IEnumerable<string> GetHeader(string key)\r\n        {\r\n            if (!HasHeader(key)) return new string[0];\r\n\r\n            key = _headers.Value.Keys.FirstOrDefault(x => x.EqualsIgnoreCase(key));\r\n            return key.IsEmpty() ? new string[0] : _headers.Value.Get(key);\r\n        }\r\n\r\n        public IEnumerable<string> AllHeaderKeys()\r\n        {\r\n            return _headers.Value.Keys;\r\n        }\r\n\r\n        public NameValueCollection QueryString\r\n        {\r\n            get { return _querystring.Value; }\r\n        }\r\n\r\n        public NameValueCollection Form\r\n        {\r\n            get\r\n            {\r\n                if (!_environment.ContainsKey(OwinConstants.RequestFormKey))\r\n                {\r\n                    _environment.Add(OwinConstants.RequestFormKey, new NameValueCollection());\r\n                }\r\n\r\n                return _environment.Get<NameValueCollection>(OwinConstants.RequestFormKey);\r\n            }\r\n        }\r\n\r\n\r\n        public Stream Input\r\n        {\r\n            get\r\n            {\r\n                if (!_environment.ContainsKey(OwinConstants.RequestBodyKey))\r\n                {\r\n                    _environment.Add(OwinConstants.RequestBodyKey, new MemoryStream());\r\n                }\r\n\r\n                return _environment.Get<Stream>(OwinConstants.RequestBodyKey);\r\n            }\r\n        }\r\n\r\n        public bool IsClientConnected()\r\n        {\r\n            var cancellation = _environment.Get<CancellationToken>(OwinConstants.CallCancelledKey);\r\n            return cancellation == null ? false : !cancellation.IsCancellationRequested;\r\n        }\r\n\r\n        public ICookies Cookies { get; private set; }\r\n\r\n\r\n        public HttpRequestBody Body\r\n        {\r\n            get { return new HttpRequestBody(this); }\r\n        }\r\n\r\n        public class HttpRequestBody\r\n        {\r\n            private readonly OwinHttpRequest _parent;\r\n\r\n            public HttpRequestBody(OwinHttpRequest parent)\r\n            {\r\n                _parent = parent;\r\n            }\r\n\r\n            public void XmlInputIs(object target)\r\n            {\r\n                var serializer = new XmlSerializer(target.GetType());\r\n                serializer.Serialize(_parent.Input, target);\r\n                _parent.Input.Position = 0;\r\n            }\r\n\r\n            public void JsonInputIs(object target)\r\n            {\r\n                string json = null;\r\n\r\n                if (_parent.Environment.ContainsKey(\"scenario-support\"))\r\n                {\r\n                    var serializer = _parent.Environment[\"scenario-support\"]\r\n                        .As<IScenarioSupport>()\r\n                        .Get<IJsonSerializer>();\r\n\r\n                    json = serializer.Serialize(target);\r\n                }\r\n                else\r\n                {\r\n                    json = JsonUtil.ToJson(target);\r\n                }\r\n\r\n                JsonInputIs(json);\r\n            }\r\n\r\n            public void JsonInputIs(string json)\r\n            {\r\n                var writer = new StreamWriter(_parent.Input);\r\n                writer.Write(json);\r\n                writer.Flush();\r\n\r\n                _parent.Input.Position = 0;\r\n            }\r\n\r\n            public void WriteFormData<T>(T target) where T : class\r\n            {\r\n                new TypeDescriptorCache().ForEachProperty(typeof(T), prop =>\r\n                {\r\n                    var rawValue = prop.GetValue(target, null);\r\n                    var httpValue = rawValue == null ? string.Empty : rawValue.ToString().UrlEncoded();\r\n\r\n                    _parent.Form[prop.Name] = httpValue;\r\n                });\r\n            }\r\n\r\n            public void ReplaceBody(Stream stream)\r\n            {\r\n                stream.Position = 0;\r\n                _parent.append(OwinConstants.RequestBodyKey, stream);\r\n            }\r\n        }\r\n\r\n        public void RewindData()\r\n        {\r\n            if (_environment.ContainsKey(OwinConstants.RequestFormKey) && Form.Count > 0)\r\n            {\r\n                var post = formData().Join(\"&\");\r\n                var postBytes = Encoding.Default.GetBytes(post);\r\n                Input.Write(postBytes, 0, postBytes.Length);\r\n\r\n                _environment.Remove(OwinConstants.RequestFormKey);\r\n            }\r\n\r\n            if (_environment.ContainsKey(OwinConstants.RequestBodyKey))\r\n            {\r\n                Input.Position = 0;\r\n            }\r\n        }\r\n\r\n        private IEnumerable<string> formData()\r\n        {\r\n            foreach (var key in Form.AllKeys)\r\n            {\r\n                yield return \"{0}={1}\".ToFormat(key, HttpUtility.HtmlEncode(Form[key]));\r\n            }\r\n        }\r\n\r\n\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/OwinHttpResponse.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing System.Xml;\r\nusing System.Xml.Serialization;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Http.Compression;\r\nusing FubuMVC.Core.Http.Cookies;\r\nusing FubuMVC.Core.Http.Headers;\r\nusing FubuMVC.Core.Http.Scenarios;\r\nusing FubuMVC.Core.Json;\r\nusing FubuMVC.Core.Runtime;\r\nusing HtmlTags;\r\nusing Cookie = FubuMVC.Core.Http.Cookies.Cookie;\r\n\r\nnamespace FubuMVC.Core.Http.Owin\r\n{\r\n    public class OwinHttpResponse : IHttpResponse, IDisposable\r\n    {\r\n        private readonly OwinHeaderSettings _headerSettings;\r\n        private readonly IDictionary<string, object> _environment;\r\n        private MemoryStream _output;\r\n\r\n        public OwinHttpResponse() : this(new Dictionary<string, object>())\r\n        {\r\n        }\r\n\r\n        public OwinHttpResponse(IDictionary<string, object> environment)\r\n        {\r\n            _environment = environment;\r\n\r\n            _output = new MemoryStream();\r\n\r\n            if (!environment.ContainsKey(OwinConstants.ResponseStatusCodeKey))\r\n            {\r\n                StatusCode = 200;\r\n            }\r\n\r\n            _headerSettings = environment.ContainsKey(OwinConstants.HeaderSettings)\r\n                ? environment.Get<OwinHeaderSettings>(OwinConstants.HeaderSettings)\r\n                : new OwinHeaderSettings();\r\n        }\r\n\r\n        public void AppendHeader(string key, string value)\r\n        {\r\n            if (!_environment.ContainsKey(OwinConstants.ResponseHeadersKey))\r\n            {\r\n                _environment.Add(OwinConstants.ResponseHeadersKey, new Dictionary<string, string[]>());\r\n            }\r\n\r\n            var headers = _environment.ResponseHeaders();\r\n            if (!_headerSettings.AllowMultiple(key))\r\n            {\r\n                headers.Remove(key);\r\n                headers.Add(key, new[] { value });\r\n                return;\r\n            }\r\n\r\n            headers.AppendValue(key, value);\r\n        }\r\n\r\n        public void WriteFile(string file)\r\n        {\r\n            var fileInfo = new FileInfo(file);\r\n\r\n            if (_environment.ContainsKey(\"sendfile.SendAsync\"))\r\n            {\r\n                var sendFile = _environment.Get<Func<string, long, long?, CancellationToken, Task>>(\"sendfile.SendAsync\");\r\n                sendFile(file, 0, fileInfo.Length, _environment.Get<CancellationToken>(OwinConstants.CallCancelledKey));\r\n            }\r\n            else\r\n            {\r\n                AppendHeader(HttpResponseHeaders.ContentLength, fileInfo.Length.ToString(CultureInfo.InvariantCulture));\r\n                using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))\r\n                {\r\n                    // TODO -- SMELLY AS ALL HELL\r\n                    Write(stream => fileStream.CopyToAsync(stream)).GetAwaiter().GetResult();\r\n                }\r\n            }\r\n\r\n\r\n\r\n        }\r\n\r\n        public void WriteContentType(string contentType)\r\n        {\r\n            AppendHeader(HttpResponseHeaders.ContentType, contentType);\r\n        }\r\n\r\n        public long ContentLength\r\n        {\r\n            get\r\n            {\r\n                var headers = _environment.Get<IDictionary<string, string[]>>(OwinConstants.ResponseHeadersKey);\r\n                return headers.ContainsKey(OwinConstants.ContentLengthHeader)\r\n                    ? long.Parse(headers[OwinConstants.ContentLengthHeader][0])\r\n                    : 0;\r\n            }\r\n            set\r\n            {\r\n                var headers = _environment.Get<IDictionary<string, string[]>>(OwinConstants.ResponseHeadersKey);\r\n                if (headers.ContainsKey(OwinConstants.ContentLengthHeader))\r\n                {\r\n                    headers[OwinConstants.ContentLengthHeader][0] = value.ToString();\r\n                }\r\n                else\r\n                {\r\n                    headers.Add(OwinConstants.ContentLengthHeader, new []{value.ToString()});\r\n                }\r\n            }\r\n        }\r\n\r\n        public Task Write(string content)\r\n        {\r\n            var writer = new StreamWriter(_output){AutoFlush = true};\r\n\r\n            return writer.WriteAsync(content);\r\n        }\r\n\r\n        public void Redirect(string url)\r\n        {\r\n            if (url.StartsWith(\"~\"))\r\n            {\r\n                url = url.TrimStart('~');\r\n            }\r\n\r\n            _environment[OwinConstants.ResponseStatusCodeKey] = HttpStatusCode.Redirect;\r\n            AppendHeader(\"Location\", url);\r\n            Write(\r\n                $\"<html><head><title>302 Found</title></head><body><h1>Found</h1><p>The document has moved <a href='{url}'>here</a>.</p></body></html>\");\r\n        }\r\n\r\n        public void WriteResponseCode(HttpStatusCode status, string description = null)\r\n        {\r\n            _environment[OwinConstants.ResponseStatusCodeKey] = status.As<int>();\r\n            _environment[OwinConstants.ResponseReasonPhraseKey] = description;\r\n        }\r\n\r\n        public int StatusCode\r\n        {\r\n            get\r\n            {\r\n                return _environment.Get<int>(OwinConstants.ResponseStatusCodeKey);\r\n            }\r\n            set\r\n            {\r\n                _environment.Set<int>(OwinConstants.ResponseStatusCodeKey, value);\r\n            }\r\n        }\r\n\r\n        public string StatusDescription\r\n        {\r\n            get\r\n            {\r\n                return _environment.ContainsKey(OwinConstants.ResponseReasonPhraseKey) ? _environment.Get<string>(OwinConstants.ResponseReasonPhraseKey) : string.Empty;\r\n            }\r\n            set\r\n            {\r\n                _environment.Set<string>(OwinConstants.ResponseReasonPhraseKey, value);\r\n            }\r\n        }\r\n\r\n        public IEnumerable<string> HeaderValueFor(string headerKey)\r\n        {\r\n            if (!_environment.ContainsKey(OwinConstants.ResponseHeadersKey))\r\n            {\r\n                return new string[0];\r\n            }\r\n\r\n            return _environment.Get<IDictionary<string, string[]>>(OwinConstants.ResponseHeadersKey).Get(headerKey) ?? new string[0];\r\n        }\r\n\r\n        public IEnumerable<Header> AllHeaders()\r\n        {\r\n            if (!_environment.ContainsKey(OwinConstants.ResponseHeadersKey))\r\n            {\r\n                return Enumerable.Empty<Header>();\r\n            }\r\n\r\n            return\r\n                _environment.Get<IDictionary<string, string[]>>(OwinConstants.ResponseHeadersKey).SelectMany(pair =>\r\n                {\r\n                    return pair.Value.Select(x => new Header(pair.Key, x));\r\n                });\r\n        }\r\n\r\n        public void UseEncoding(IHttpContentEncoding encoding)\r\n        {\r\n            // TODO -- Come back to this one. The integration tests can't be done until we do\r\n        }\r\n\r\n        public Task Write(Func<Stream, Task> output)\r\n        {\r\n            return output(_output);\r\n        }\r\n\r\n        public void Flush()\r\n        {\r\n            if (_output.Length <= 0) return;\r\n\r\n            StreamContents(_output);\r\n\r\n            _output = new MemoryStream();\r\n        }\r\n\r\n        public void StreamContents(MemoryStream recordedStream)\r\n        {\r\n            recordedStream.Position = 0;\r\n\r\n            var owinOutput = _environment.Get<Stream>(OwinConstants.ResponseBodyKey);\r\n            recordedStream.CopyTo(owinOutput);\r\n\r\n            recordedStream.Flush();\r\n        }\r\n\r\n        public Stream Output\r\n        {\r\n            get { return _output; }\r\n        }\r\n\r\n        public void Dispose()\r\n        {\r\n            Flush();\r\n        }\r\n\r\n        public DateTime? LastModified()\r\n        {\r\n            var lastModifiedString = HeaderValueFor(HttpResponseHeaders.LastModified).SingleOrDefault();\r\n            return lastModifiedString.IsEmpty() ? (DateTime?)null : DateTime.ParseExact(lastModifiedString, \"r\", null);\r\n        }\r\n\r\n        public HttpResponseBody Body\r\n        {\r\n            get\r\n            {\r\n                return new HttpResponseBody(_environment.Get<Stream>(OwinConstants.ResponseBodyKey), _environment);\r\n            }\r\n        }\r\n\r\n        public IEnumerable<Cookie> Cookies()\r\n        {\r\n            return HeaderValueFor(HttpResponseHeaders.SetCookie).Select(CookieParser.ToCookie);\r\n        }\r\n\r\n        public Cookie CookieFor(string name)\r\n        {\r\n            return Cookies().FirstOrDefault(x => x.Matches(name));\r\n        }\r\n\r\n        public string ContentType()\r\n        {\r\n            return HeaderValueFor(HttpResponseHeaders.ContentType).FirstOrDefault();\r\n        }\r\n\r\n        public bool ContentTypeMatches(MimeType mimeType)\r\n        {\r\n            return HeaderValueFor(HttpResponseHeaders.ContentType).Any(x => x.EqualsIgnoreCase(mimeType.Value));\r\n        }\r\n\r\n\r\n    }\r\n\r\n    public class HttpResponseBody\r\n    {\r\n        private readonly Stream _stream;\r\n        private readonly IDictionary<string, object> _environment;\r\n\r\n        public HttpResponseBody(Stream stream, IDictionary<string, object> environment)\r\n        {\r\n            _stream = stream;\r\n            _environment = environment;\r\n        }\r\n\r\n        public string ReadAsText()\r\n        {\r\n            return Read(s => s.ReadAllText());\r\n        }\r\n\r\n        public T Read<T>(Func<Stream, T> read)\r\n        {\r\n            _stream.Position = 0;\r\n            return read(_stream);\r\n        }\r\n\r\n        public XmlDocument ReadAsXml()\r\n        {\r\n            Func<Stream, XmlDocument> read = s => {\r\n                var body = s.ReadAllText();\r\n\r\n                if (body.Contains(\"Error\")) return null;\r\n\r\n                var document = new XmlDocument();\r\n                document.LoadXml(body);\r\n\r\n                return document;\r\n            };\r\n\r\n            return Read(read);\r\n        }\r\n\r\n        public T ReadAsXml<T>() where T : class\r\n        {\r\n            _stream.Position = 0;\r\n            var serializer = new XmlSerializer(typeof (T));\r\n            return serializer.Deserialize(new XmlTextReader(new StringReader(_stream.ReadAllText()))) as T;\r\n        }\r\n\r\n        public T ReadAsJson<T>()\r\n        {\r\n            var json = ReadAsText();\r\n\r\n            if (_environment.ContainsKey(\"scenario-support\"))\r\n            {\r\n                return\r\n                    _environment.Get<IScenarioSupport>(\"scenario-support\")\r\n                        .Get<IJsonSerializer>()\r\n                        .Deserialize<T>(json);\r\n            }\r\n\r\n            \r\n            return JsonUtil.Get<T>(json);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/OwinServiceArguments.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Web;\r\nusing System.Web.Routing;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Http.Owin\r\n{\r\n    public class OwinServiceArguments : TypeArguments\r\n    {\r\n        public OwinServiceArguments(RouteData routeData, IDictionary<string, object> environment)\r\n        {\r\n            var httpRequest = new OwinHttpRequest(environment);\r\n\r\n            var httpContextBase = new OwinHttpContext(environment);\r\n\r\n            Set(environment);\r\n\r\n            Set<HttpContextBase>(httpContextBase);\r\n\r\n            Set(routeData);\r\n\r\n            Set<IHttpRequest>(httpRequest);\r\n\r\n            Set<IHttpResponse>(new OwinHttpResponse(environment));\r\n\r\n            Set(new OwinContext(environment));\r\n\r\n            var log = environment.Log();\r\n            if (log != null)\r\n            {\r\n                Set(log);\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/OwinSettings.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core.Http.Owin.Middleware;\r\nusing FubuMVC.Core.Http.Owin.Middleware.StaticFiles;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Http.Owin\r\n{\r\n    using AppFunc = Func<IDictionary<string, object>, Task>;\r\n\r\n    public class OwinSettings : DescribesItself\r\n    {\r\n        public OwinSettings()\r\n        {\r\n            AddMiddleware<StaticFileMiddleware>();\r\n\r\n            EnvironmentData.Fill(OwinConstants.HeaderSettings, Headers);\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"OWIN Settings\";\r\n            description.ShortDescription =\r\n                \"Governs the attachment and ordering of OWIN middleware plus OWIN host properties\";\r\n            Properties.Each(x => description.Properties[x.Key] = x.Value.ToString());\r\n\r\n            EnvironmentData.Each((key, value) => description.Properties[key] = value.ToString());\r\n\r\n            var middleware = new BulletList {Name = \"Middleware\", Label = \"Middleware\"};\r\n\r\n            Middleware.Each(x => middleware.Children.Add(x.ToDescription()));\r\n\r\n            description.BulletLists.Add(middleware);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Key value pairs to control or alter the behavior of the underlying host\r\n        /// </summary>\r\n        public readonly IDictionary<string, object> Properties = new Dictionary<string, object>();\r\n\r\n        /// <summary>\r\n        /// Provides granular control over the headers that are written by the host\r\n        /// </summary>\r\n        public readonly OwinHeaderSettings Headers = new OwinHeaderSettings();\r\n\r\n        /// <summary>\r\n        /// A list of keys and their associated values that will be injected by the host into each OWIN request environment.\r\n        /// </summary>\r\n        public readonly Cache<string, object> EnvironmentData = new Cache<string, object>();\r\n\r\n        // Tested through integration tests\r\n        public AppFunc BuildAppFunc(AppFunc inner, IServiceFactory factory)\r\n        {\r\n            AppFunc func = inner;\r\n            Middleware.Reverse().Each(x => func = x.BuildAppFunc(func, factory));\r\n\r\n            return func;\r\n        }\r\n\r\n\r\n        public readonly MiddlewareChain Middleware = new MiddlewareChain();\r\n\r\n\r\n        public MiddlewareNode<T> AddMiddleware<T>(BehaviorCategory category = BehaviorCategory.Process) where T : class, IOwinMiddleware\r\n        {\r\n            var node = new MiddlewareNode<T>();\r\n            AddMiddleware(node);\r\n\r\n            return node;\r\n        }\r\n\r\n        public void AddMiddleware(MiddlewareNode node)\r\n        {\r\n            Middleware.AddToEnd(node);\r\n        }\r\n\r\n        public AnonymousMiddleware AddMiddleware(AppFunc appFunc)\r\n        {\r\n            Func<AppFunc, AppFunc> appFuncSource = inner => {\r\n                return dict => {\r\n                    return appFunc(dict).ContinueWith(t => inner.Invoke(dict));\r\n                };\r\n            };\r\n\r\n            return AddMiddleware(appFuncSource);\r\n        }\r\n\r\n        public AnonymousMiddleware AddMiddleware(Func<AppFunc, AppFunc> appFuncSource)\r\n        {\r\n            var node = new AnonymousMiddleware(appFuncSource);\r\n            AddMiddleware(node);\r\n\r\n            return node;\r\n        }\r\n\r\n\r\n    }\r\n\r\n    public class AnonymousMiddleware : MiddlewareNode\r\n    {\r\n        private readonly Func<AppFunc, AppFunc> _builder;\r\n        private string _description = \"Anonymous Middleware\";\r\n\r\n        public AnonymousMiddleware(Func<AppFunc, AppFunc> builder)\r\n        {\r\n            _builder = builder;\r\n        }\r\n\r\n        public override AppFunc BuildAppFunc(AppFunc inner, IServiceFactory factory)\r\n        {\r\n            return _builder(inner);\r\n        }\r\n\r\n        public string Description()\r\n        {\r\n            return _description;\r\n        }\r\n\r\n        public void Description(string description)\r\n        {\r\n            _description = description;\r\n        }\r\n\r\n        public override Description ToDescription()\r\n        {\r\n            return new Description\r\n            {\r\n                Title = _description,\r\n                ShortDescription = \"Category: \" + Category()\r\n            };\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Readers/FormReader.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Collections.Specialized;\r\nusing System.IO;\r\nusing System.Web;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Readers\n{\n    public class FormReader : IOwinRequestReader\n    {\n        public void Read(IDictionary<string, object> environment)\n        {\n            var form = new NameValueCollection();\n\n            environment.Add(OwinConstants.RequestFormKey, form);\n            var mediaType = environment.Get<string>(OwinConstants.MediaTypeKey);\n            if (mediaType != MimeType.HttpFormMimetype && mediaType != MimeType.MultipartMimetype)  return;\r\n\r\n            if (environment.ContainsKey(OwinConstants.RequestBodyKey))\r\n            {\r\n                var body = environment.Get<Stream>(OwinConstants.RequestBodyKey);\r\n                string formValue;\r\n                using (var reader = new StreamReader(body))\r\n                {\r\n                    formValue = reader.ReadToEnd();\r\n                }\r\n\r\n                form.Add(HttpUtility.ParseQueryString(formValue));\r\n            }\n\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Readers/IOwinRequestReader.cs",
    "content": "﻿using System.Collections.Generic;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Readers\n{\n    public interface IOwinRequestReader\n    {\n        void Read(IDictionary<string, object> environment);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Readers/MediaTypeReader.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Readers\n{\n    public class MediaTypeReader : IOwinRequestReader\n    {\n        public void Read(IDictionary<string, object> environment)\n        {\n            var headers = environment.Get<IDictionary<string, string[]>>(OwinConstants.RequestHeadersKey);\n\t        var values = headers.Get(OwinConstants.ContentTypeHeader);\n\t        var contentType = MimeType.Html.Value;\n\n\t\t\tif (values != null && values.Any())\n\t\t\t{\n\t\t\t\tcontentType = values.First();\n\t\t\t}\n\n            var commaSemicolon = new[] { ',', ';' };\n            var delimiterPos = contentType.IndexOfAny(commaSemicolon);\n            var mediaType = delimiterPos < 0 ? contentType : contentType.Substring(0, delimiterPos);\n            environment.Add(OwinConstants.MediaTypeKey, mediaType);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Owin/Readers/OwinRequestReader.cs",
    "content": "﻿using System.Collections.Generic;\r\n\r\nnamespace FubuMVC.Core.Http.Owin.Readers\n{\n    public class OwinRequestReader : IOwinRequestReader\n    {\n        private readonly IOwinRequestReader[] readers = new IOwinRequestReader[]\n        {\n            new MediaTypeReader(),\n            new FormReader(), \n        };\n\n        public void Read(IDictionary<string, object> environment)\n        {\n            readers.Each(x => x.Read(environment));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/RequestDataExtensions.cs",
    "content": "using FubuCore.Binding;\r\nusing FubuCore.Binding.Values;\r\nusing FubuCore.Util;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    public static class RequestDataExtensions\r\n    {\r\n        public static void AddValues(this IRequestData request, RequestDataSource source, IKeyValues values)\r\n        {\r\n            request.AddValues(source.ToString(), values);\r\n        }\r\n\r\n        public static IValueSource ValuesFor(this IRequestData request, RequestDataSource source)\r\n        {\r\n            return request.ValuesFor(source.ToString());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/RequestDataSource.cs",
    "content": "namespace FubuMVC.Core.Http\r\n{\r\n    public enum RequestDataSource\r\n    {\r\n        Route,\r\n        Request,\r\n        RequestProperty,\r\n        File,\r\n        Header,\r\n        Cookie,\r\n        Other\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/RouteDataValues.cs",
    "content": "using System.Web.Routing;\r\nusing FubuCore.Binding.Values;\r\n\r\nnamespace FubuMVC.Core.Http\r\n{\r\n    public class RouteDataValues : GenericValueSource\r\n    {\r\n        public RouteDataValues(RouteData data)\r\n            : base(RequestDataSource.Route.ToString(), key => data.Values[key], () => data.Values.Keys)\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Scenarios/IUrlExpression.cs",
    "content": "﻿using System;\r\nusing System.Linq.Expressions;\r\nusing FubuMVC.Core.Http.Owin;\r\n\r\nnamespace FubuMVC.Core.Http.Scenarios\r\n{\r\n    public interface IUrlExpression\r\n    {\r\n        SendExpression Action<T>(Expression<Action<T>> expression);\r\n        SendExpression Url(string relativeUrl);\r\n        SendExpression Input<T>(T input = null) where T : class;\r\n\r\n        SendExpression Json<T>(T input) where T : class;\r\n        SendExpression Xml<T>(T input) where T : class;\r\n\r\n        SendExpression FormData<T>(T input) where T : class;\r\n    }\r\n\r\n    public class SendExpression\r\n    {\r\n        private readonly OwinHttpRequest _request;\r\n\r\n        public SendExpression(OwinHttpRequest request)\r\n        {\r\n            _request = request;\r\n        }\r\n\r\n        public SendExpression ContentType(string contentType)\r\n        {\r\n            _request.ContentType(contentType);\r\n            return this;\r\n        }\r\n\r\n        public SendExpression Accepts(string accepts)\r\n        {\r\n            _request.Accepts(accepts);\r\n            return this;\r\n        }\r\n\r\n        public SendExpression Etag(string etag)\r\n        {\r\n            _request.ReplaceHeader(HttpRequestHeaders.IfNoneMatch, etag);\r\n            return this;\r\n        }\r\n    }\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Scenarios/Scenario.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing System.Net;\r\nusing System.Text;\r\nusing System.Xml.Serialization;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Json;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Security.Authorization;\r\nusing FubuMVC.Core.Urls;\r\n\r\nnamespace FubuMVC.Core.Http.Scenarios\r\n{\r\n    public interface IScenarioSupport\r\n    {\r\n        string RootUrl { get; }\r\n        T Get<T>();\r\n        OwinHttpResponse Send(OwinHttpRequest request);\r\n    }\r\n\r\n    public static class ScenarioSupportExtensions\r\n    {\r\n        public static OwinHttpResponse Send(this IScenarioSupport support, Action<OwinHttpRequest> configuration)\r\n        {\r\n            var scenario = new Scenario(support);\r\n            configuration(scenario.Request);\r\n\r\n            return scenario.Response;\r\n        }\r\n    }\r\n\r\n    public class Scenario : IUrlExpression, IDisposable\r\n    {\r\n        private readonly IScenarioSupport _support;\r\n        private readonly OwinHttpRequest _request;\r\n        private readonly Lazy<OwinHttpResponse> _response;\r\n        private readonly Lazy<string> _bodyText;\r\n        private readonly ScenarioAssertionException _assertion = new ScenarioAssertionException();\r\n        private int _expectedStatusCode = HttpStatusCode.OK.As<int>();\r\n        private string _expectedStatusReason = \"Ok\";\r\n        private bool _ignoreStatusCode;\r\n\r\n        void IDisposable.Dispose()\r\n        {\r\n            _assertion.AssertValid();\r\n        }\r\n\r\n        public Scenario(IScenarioSupport support)\r\n        {\r\n            _support = support;\r\n            _request = OwinHttpRequest.ForTesting();\r\n            _request.FullUrl(support.RootUrl);\r\n            _request.Environment.Add(\"scenario-support\", _support);\r\n            _request.Accepts(\"*/*\");\r\n\r\n            support.Get<SecuritySettings>().Reset();\r\n\r\n            _response = new Lazy<OwinHttpResponse>(() =>\r\n            {\r\n                var response = _support.Send(_request);\r\n\r\n                if (!_ignoreStatusCode)\r\n                {\r\n                    validateStatusCode(response);\r\n                }\r\n\r\n\r\n                return response;\r\n            });\r\n\r\n            _bodyText = new Lazy<string>(() => _response.Value.Body.ReadAsText());\r\n        }\r\n\r\n        private void validateStatusCode(OwinHttpResponse response)\r\n        {\r\n            var httpStatusCode = response.StatusCode;\r\n            if (httpStatusCode != _expectedStatusCode)\r\n            {\r\n                _assertion.Add(\"Expected status code {0} ({1}), but was {2}\", _expectedStatusCode,\r\n                    _expectedStatusReason, httpStatusCode);\r\n\r\n                if (httpStatusCode >= 500)\r\n                {\r\n                    _assertion.Body = response.Body.ReadAsText();\r\n                }\r\n            }\r\n        }\r\n\r\n        public IUrlExpression Get\r\n        {\r\n            get\r\n            {\r\n                _request.HttpMethod(\"GET\");\r\n                return this;\r\n            }\r\n        }\r\n\r\n        public IUrlExpression Put\r\n        {\r\n            get\r\n            {\r\n                _request.HttpMethod(\"PUT\");\r\n                return this;\r\n            }\r\n        }\r\n\r\n        public IUrlExpression Delete\r\n        {\r\n            get\r\n            {\r\n                _request.HttpMethod(\"DELETE\");\r\n                return this;\r\n            }\r\n        }\r\n\r\n        public IUrlExpression Post\r\n        {\r\n            get\r\n            {\r\n                _request.HttpMethod(\"POST\");\r\n                return this;\r\n            }\r\n        }\r\n\r\n        public IUrlExpression Head\r\n        {\r\n            get\r\n            {\r\n                _request.HttpMethod(\"HEAD\");\r\n                return this;\r\n            }\r\n        }\r\n\r\n        public SecuritySettings Security\r\n        {\r\n            get { return _support.Get<SecuritySettings>(); }\r\n        }\r\n\r\n\r\n        public OwinHttpRequest Request\r\n        {\r\n            get { return _request; }\r\n        }\r\n\r\n        public OwinHttpResponse Response\r\n        {\r\n            get { return _response.Value; }\r\n        }\r\n\r\n        public void ContentShouldContain(string text)\r\n        {\r\n            if (!_bodyText.Value.Contains(text))\r\n            {\r\n                _assertion.Add(\"The response body does not contain expected text \\\"{0}\\\"\", text);\r\n\r\n                _assertion.Body = _bodyText.Value;\r\n            }\r\n        }\r\n\r\n        public void ContentShouldNotContain(string text)\r\n        {\r\n            if (_bodyText.Value.Contains(text))\r\n            {\r\n                _assertion.Add(\"The response body should not contain text \\\"{0}\\\"\", text);\r\n\r\n                _assertion.Body = _bodyText.Value;\r\n            }\r\n        }\r\n\r\n        public void ContentShouldBe(string exactContent)\r\n        {\r\n            if (_bodyText.Value != exactContent)\r\n            {\r\n                _assertion.Add(\"Expected the content to be '{0}'\", exactContent);\r\n\r\n                _assertion.Body = _bodyText.Value;\r\n            }\r\n        }\r\n\r\n        private IUrlRegistry urls\r\n        {\r\n            get { return _support.Get<IUrlRegistry>(); }\r\n        }\r\n\r\n        SendExpression IUrlExpression.Action<T>(Expression<Action<T>> expression)\r\n        {\r\n            _request.RelativeUrl(urls.UrlFor(expression, _request.HttpMethod()));\r\n            return new SendExpression(_request);\r\n        }\r\n\r\n        SendExpression IUrlExpression.Url(string relativeUrl)\r\n        {\r\n            _request.RelativeUrl(relativeUrl);\r\n            return new SendExpression(_request);\r\n        }\r\n\r\n        SendExpression IUrlExpression.Input<T>(T input)\r\n        {\r\n            var url = input == null\r\n                ? urls.UrlFor<T>(_request.HttpMethod())\r\n                : urls.UrlFor(input, _request.HttpMethod());\r\n\r\n            _request.RelativeUrl(url);\r\n\r\n            return new SendExpression(_request);\r\n        }\r\n\r\n        SendExpression IUrlExpression.Json<T>(T input)\r\n        {\r\n            this.As<IUrlExpression>().Input(input);\r\n            _request.Body.JsonInputIs(_support.Get<IJsonSerializer>().Serialize(input));\r\n\r\n            _request.ContentType(\"application/json\");\r\n            _request.Accepts(\"application/json\");\r\n\r\n            return new SendExpression(_request);\r\n        }\r\n\r\n        SendExpression IUrlExpression.Xml<T>(T input)\r\n        {\r\n            var writer = new StringWriter();\r\n\r\n            var serializer = new XmlSerializer(typeof(T));\r\n            serializer.Serialize(writer, input);\r\n\r\n            var bytes = Encoding.Default.GetBytes(writer.ToString());\r\n\r\n            Request.Input.Write(bytes, 0, bytes.Length);\r\n\r\n            Request.ContentType(\"application/xml\");\r\n            Request.Accepts(\"application/xml\");\r\n\r\n            this.As<IUrlExpression>().Input(input);\r\n\r\n            return new SendExpression(_request);\r\n        }\r\n\r\n        SendExpression IUrlExpression.FormData<T>(T input)\r\n        {\r\n            this.As<IUrlExpression>().Input(input);\r\n\r\n            _request.ContentType(MimeType.HttpFormMimetype);\r\n\r\n            var dictionary = new Dictionary<string, object>();\r\n            new TypeDescriptorCache().ForEachProperty(typeof(T), prop =>\r\n            {\r\n                var rawValue = prop.GetValue(input, null);\r\n                var httpValue = rawValue == null ? string.Empty : rawValue.ToString().UrlEncoded();\r\n\r\n                dictionary.Add(prop.Name, httpValue);\r\n            });\r\n\r\n            var post = dictionary.Select(x => \"{0}={1}\".ToFormat(x.Key, x.Value)).Join(\"&\");\r\n            var stream = new MemoryStream();\r\n            var writer = new StreamWriter(stream);\r\n            writer.Write(post);\r\n            writer.Flush();\r\n            stream.Position = 0;\r\n\r\n            _request.Body.ReplaceBody(stream);\r\n\r\n            return new SendExpression(_request);\r\n        }\r\n\r\n\r\n        public void StatusCodeShouldBe(HttpStatusCode httpStatusCode)\r\n        {\r\n            _expectedStatusCode = (int) httpStatusCode;\r\n            _expectedStatusReason = httpStatusCode.ToString();\r\n        }\r\n\r\n        public void StatusCodeShouldBe(int statusCode)\r\n        {\r\n            _expectedStatusCode = statusCode;\r\n        }\r\n\r\n        public HeaderExpectations Header(string headerKey)\r\n        {\r\n            return new HeaderExpectations(this, headerKey);\r\n        }\r\n\r\n        public class HeaderExpectations\r\n        {\r\n            private readonly Scenario _parent;\r\n            private readonly string _headerKey;\r\n\r\n            public HeaderExpectations(Scenario parent, string headerKey)\r\n            {\r\n                _parent = parent;\r\n                _headerKey = headerKey;\r\n            }\r\n\r\n            public HeaderExpectations SingleValueShouldEqual(string expected)\r\n            {\r\n                var values = _parent.Response.HeaderValueFor(_headerKey);\r\n                switch (values.Count())\r\n                {\r\n                    case 0:\r\n                        _parent._assertion.Add(\r\n                            \"Expected a single header value of '{0}'='{1}', but no values were found on the response\",\r\n                            _headerKey, expected);\r\n                        break;\r\n\r\n                    case 1:\r\n                        var actual = values.Single();\r\n                        if (actual != expected)\r\n                        {\r\n                            _parent._assertion.Add(\r\n                                \"Expected a single header value of '{0}'='{1}', but the actual value was '{2}'\",\r\n                                _headerKey, expected, actual);\r\n                        }\r\n                        break;\r\n\r\n                    default:\r\n                        var valueText = values.Select(x => \"'\" + x + \"'\").Join(\", \");\r\n                        _parent._assertion.Add(\r\n                            \"Expected a single header value of '{0}'='{1}', but the actual values were {2}\", _headerKey,\r\n                            expected, valueText);\r\n                        break;\r\n                }\r\n\r\n\r\n                return this;\r\n            }\r\n\r\n            public HeaderExpectations ShouldHaveOneNonNullValue()\r\n            {\r\n                var values = _parent.Response.HeaderValueFor(_headerKey);\r\n                switch (values.Count())\r\n                {\r\n                    case 0:\r\n                        _parent._assertion.Add(\r\n                            \"Expected a single header value of '{0}', but no values were found on the response\",\r\n                            _headerKey);\r\n                        break;\r\n                    case 1:\r\n                        return this;\r\n\r\n                    default:\r\n                        var valueText = values.Select(x => \"'\" + x + \"'\").Join(\", \");\r\n                        _parent._assertion.Add(\r\n                            \"Expected a single header value of '{0}', but found multiple values on the response: {1}\",\r\n                            _headerKey, valueText);\r\n                        break;\r\n                }\r\n\r\n\r\n                return this;\r\n            }\r\n\r\n            public void ShouldNotBeWritten()\r\n            {\r\n                var values = _parent.Response.HeaderValueFor(_headerKey);\r\n                if (values.Any())\r\n                {\r\n                    var valueText = values.Select(x => \"'\" + x + \"'\").Join(\", \");\r\n                    _parent._assertion.Add(\"Expected no value for header '{0}', but found values {1}\", _headerKey,\r\n                        valueText);\r\n                }\r\n            }\r\n        }\r\n\r\n\r\n        public void StatusCodeShouldBeOk()\r\n        {\r\n            StatusCodeShouldBe(HttpStatusCode.OK);\r\n        }\r\n\r\n        public void ContentTypeShouldBe(MimeType mimeType)\r\n        {\r\n            ContentTypeShouldBe(mimeType.Value);\r\n        }\r\n\r\n\r\n        public void ContentTypeShouldBe(string mimeType)\r\n        {\r\n            Header(HttpResponseHeaders.ContentType).SingleValueShouldEqual(mimeType);\r\n        }\r\n\r\n        public void FormData<T>(T target, string method = \"POST\",\r\n            string contentType = \"application/x-www-form-urlencoded\", string accept = \"*/*\") where T : class\r\n        {\r\n            Request.Body.WriteFormData(target);\r\n\r\n            Request.HttpMethod(method);\r\n            Request.ContentType(contentType);\r\n\r\n            this.As<IUrlExpression>().Input(target);\r\n        }\r\n\r\n        public void IgnoreStatusCode()\r\n        {\r\n            _ignoreStatusCode = true;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Http/Scenarios/ScenarioAssertionException.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Runtime.Serialization;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Http.Scenarios\r\n{\r\n    [Serializable]\r\n    public class ScenarioAssertionException : Exception\r\n    {\r\n        private readonly IList<string> _messages = new List<string>();\r\n\r\n        public ScenarioAssertionException()\r\n        {\r\n        }\r\n\r\n        protected ScenarioAssertionException(SerializationInfo info, StreamingContext context) : base(info, context)\r\n        {\r\n        }\r\n\r\n        public void Add(string format, params object[] parameters)\r\n        {\r\n            _messages.Add(format.ToFormat(parameters));\r\n        }\r\n\r\n        public void AssertValid()\r\n        {\r\n            if (_messages.Any())\r\n            {\r\n                throw this;\r\n            }\r\n        }\r\n\r\n        public override string Message\r\n        {\r\n            get\r\n            {\r\n                var writer = new StringWriter();\r\n                _messages.Each(x => writer.WriteLine(x));\r\n\r\n                if (Body.IsNotEmpty())\r\n                {\r\n                    writer.WriteLine();\r\n                    writer.WriteLine();\r\n                    writer.WriteLine(\"Actual body text was:\");\r\n                    writer.WriteLine();\r\n                    writer.WriteLine(Body);\r\n                }\r\n\r\n                return writer.ToString();\r\n            }\r\n        }\r\n\r\n        public string Body { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/IActivator.cs",
    "content": "using FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Core\n{\n    /// <summary>\n    /// Returned from a bootstrapper.\n    /// It's activate method is called, and it is given access to all \n    /// of the packages, and a log object so that it log into the \n    /// central stream.\n    /// \n    /// This can be used to load a database with data, install things,\n    /// warm a cache up, etc.\n    /// </summary>\n    public interface IActivator\n    {\n        void Activate(IActivationLog log, IPerfTimer timer);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/IDeactivator.cs",
    "content": "using FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Core\n{\n    /// <summary>\n    /// Marker interface for activators that require some shutdown.\n    /// </summary>\n    public interface IDeactivator\n    {\n        void Deactivate(IActivationLog log);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/IFubuRegistryExtension.cs",
    "content": "﻿namespace FubuMVC.Core\r\n{\r\n    /// <summary>\r\n    /// Implementations of this contract interact with a <see cref=\"FubuRegistry\"/>\r\n    /// instance\r\n    /// </summary>\r\n    public interface IFubuRegistryExtension\r\n    {\r\n        void Configure(FubuRegistry registry);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Json/AggregatedQueryReader.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Runtime.Aggregation;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace FubuMVC.Core.Json\n{\n    public class AggregatedQueryReader : IReader<AggregatedQuery>\n    {\n        public IEnumerable<string> Mimetypes\n        {\n            get\n            {\n                yield return \"text/json\";\n                yield return \"application/json\";\n            }\n        }\n\n        public async Task<AggregatedQuery> Read(string mimeType, IFubuRequestContext context)\n        {\n            var messageTypes = context.Service<IClientMessageCache>();\n            var serializer = context.Service<NewtonSoftJsonSerializer>().InnerSerializer();\n\n            var reader = new StreamReader(context.Request.Input);\n            var json = await reader.ReadToEndAsync().ConfigureAwait(false);\n\n            return Read(serializer, messageTypes, json);\n        }\n\n        public AggregatedQuery Read(JsonSerializer serializer, IClientMessageCache messageTypes, string json)\n        {\n            var token = JToken.Parse(json);\n\n            var queries = token[\"queries\"] as JArray;\n\n            if (queries == null) throw new ArgumentOutOfRangeException(\"json\",\"No 'queries' were sent in this request\");\n\n            return new AggregatedQuery\n            {\n                queries = queries.Select(x => readQuery(x, messageTypes, serializer)).ToArray()\n            };\n\n        }\n\n        private ClientQuery readQuery(JToken jToken, IClientMessageCache messageTypes, JsonSerializer serializer)\n        {\n            var messageName = jToken[\"type\"].Value<string>();\n            var chain = messageTypes.FindChain(messageName);\n\n            string correlationId = null;\n            var correlationIdToken = jToken[\"correlationId\"];\n            if (correlationIdToken != null)\n            {\n                correlationId = correlationIdToken.Value<string>();\n            }\n\n            var query = new ClientQuery {type = messageName, correlationId = correlationId};\n\n            if (chain.InputType() != null)\n            {\n                var reader = new JTokenReader(jToken[\"query\"]);\n                query.query = serializer.Deserialize(reader, chain.InputType());\n            }\n\n            return query;\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/Json/AggregatedRegistry.cs",
    "content": "﻿namespace FubuMVC.Core.Json\n{\n    public class AggregatedRegistry : FubuPackageRegistry\n    {\n         \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Json/FubuJsonConverter.cs",
    "content": "﻿using System;\nusing FubuCore.Conversion;\nusing Newtonsoft.Json;\n\nnamespace FubuMVC.Core.Json\n{\n\t// Just a convenience helper\n\t// See the NewtonsoftJsonSerializer tests for examples\n\tpublic abstract class FubuJsonConverter<T> : JsonConverter\n\t{\n\t\tprivate readonly IObjectConverter _converter;\n\n\t\tpublic FubuJsonConverter(IObjectConverter converter)\n\t\t{\n\t\t\t_converter = converter;\n\t\t}\n\n\t\tpublic override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\n\t\t{\n\t\t\tstring jsonValue = toJsonValue((T)value);\n\n\t\t\tserializer.Serialize(writer, jsonValue);\n\t\t}\n\n\t\tprotected abstract string toJsonValue(T value);\n\n\t\tpublic override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)\n\t\t{\n\t\t\tif (reader.Value == null) return default(T);\n\n\t\t\treturn _converter.FromString<T>(reader.Value.ToString());\n\t\t}\n\n\t\tpublic override bool CanConvert(Type objectType)\n\t\t{\n\t\t\treturn objectType.Equals(typeof(T));\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Json/IJsonSerializer.cs",
    "content": "﻿using System.IO;\n\nnamespace FubuMVC.Core.Json\n{\n\tpublic interface IJsonSerializer\n\t{\n\t\tstring Serialize(object target, bool includeMetadata = false);\n\t\tT Deserialize<T>(string input);\n\t    T Deserialize<T>(Stream stream);\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Json/JObjectValues.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.Binding;\nusing FubuCore.Binding.Values;\nusing Newtonsoft.Json.Linq;\n\nnamespace FubuMVC.Core.Json\n{\n    public class JObjectValues : IValueSource\n    {\n        private readonly JObject _jObject;\n\n        public JObjectValues(string json)\n            : this(JObject.Parse(json))\n        {\n        }\n\n        public JObjectValues(JObject jObject)\n        {\n            _jObject = jObject;\n        }\n\n        private bool with<T>(string key, Action<T> action) where T : JToken\n        {\n            JToken token = null;\n            _jObject.TryGetValue(key, out token);\n\n            var target = token as T;\n            if (target != null)\n            {\n                action(target);\n                return true;\n            }\n\n            return false;\n        }\n\n        private TReturn find<T, TReturn>(string key, Func<T, TReturn> creator)\n            where T : JToken\n            where TReturn : class\n        {\n            JToken token = null;\n            _jObject.TryGetValue(key, out token);\n\n            var specific = token as T;\n            return specific == null ? null : creator(specific);\n        }\n\n        public bool Has(string key)\n        {\n            return with<JValue>(key, x => { });\n        }\n\n        public object Get(string key)\n        {\n            return find<JValue, object>(key, v => v.Value<string>());\n        }\n\n        public bool HasChild(string key)\n        {\n            return with<JObject>(key, o => { });\n        }\n\n        public IValueSource GetChild(string key)\n        {\n            return find<JObject, IValueSource>(key, x => new JObjectValues(x));\n        }\n\n        public IEnumerable<IValueSource> GetChildren(string key)\n        {\n            Func<JArray, IEnumerable<IValueSource>> creator = ja => ja.OfType<JObject>().Select(x => new JObjectValues(x)).ToList();\n            return find(key, creator) ?? Enumerable.Empty<IValueSource>();\n        }\n\n        public void WriteReport(IValueReport report)\n        {\n            foreach (var pair in _jObject)\n            {\n                var key = pair.Key;\n\n                pair.IfIs<JValue>(value => report.Value(key, value.Value<string>()));\n\n                pair.IfIs<JObject>(jo =>\n                {\n                    report.StartChild(key);\n\n                    var child = new JObjectValues(jo);\n                    child.WriteReport(report);\n\n                    report.EndChild();\n                });\n\n                pair.IfIs<JArray>(ja =>\n                {\n                    int i = 0;\n                    foreach (JObject jo in ja.OfType<JObject>())\n                    {\n                        report.StartChild(key, i);\n\n                        var child = new JObjectValues(jo);\n                        child.WriteReport(report);\n\n                        report.EndChild();\n                    }\n                });\n            }\n        }\n\n\n        public bool Value(string key, Action<BindingValue> callback)\n        {\n            var found = with<JValue>(key, v => callback(new BindingValue\n            {\n                RawKey = key,\n                RawValue = v.Value<string>(),\n                Source = Provenance\n            }));\n\n            if (found) return true;\n\n            return with<JObject>(key, v => callback(new BindingValue\n            {\n                RawKey = key,\n                RawValue = v,\n                Source = Provenance\n            }));\n        }\n\n        public string Provenance\n        {\n            get { return \"Json Values\"; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Json/JTokenKeyValuePairExtensions.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing Newtonsoft.Json.Linq;\n\nnamespace FubuMVC.Core.Json\n{\n    public static class JTokenKeyValuePairExtensions\n    {\n        public static void IfIs<T>(this KeyValuePair<string, JToken> pair, Action<T> action) where T : class\n        {\n            var target = pair.Value as T;\n\n            if (target != null)\n            {\n                action(target);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Json/JsonBindingAttribute.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Json\n{\n    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]\n    public class JsonBindingAttribute : ModifyChainAttribute\n    {\n        public override void Alter(ActionCallBase call)\n        {\n            call.ParentChain().Input.Add(typeof(NewtonSoftBindingReader<>));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Json/NewtonSoftBindingReader.cs",
    "content": "using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Binding;\nusing FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Json\n{\n    [Description(\"Uses model binding against the parsed JSON. Use with caution\")]\n    public class NewtonSoftBindingReader<T> : IReader<T>\n    {\n        public async Task<T> Read(string mimeType, IFubuRequestContext context)\n        {\n            var json = await context.Services.GetInstance<NewtonSoftJsonReader>().GetInputText().ConfigureAwait(false);\n            var values = new JObjectValues(json);\n\n            var value = context.Services.GetInstance<IObjectResolver>().BindModel(typeof(T), values).Value.As<T>();\n            return value;\n        }\n\n        public IEnumerable<string> Mimetypes\n        {\n            get\n            {\n                yield return \"application/json\";\n                yield return \"text/json\";\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Json/NewtonSoftJsonReader.cs",
    "content": "using System.IO;\nusing System.Text;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Http;\n\nnamespace FubuMVC.Core.Json\n{\n    public class NewtonSoftJsonReader\n    {\n        private readonly IHttpRequest _request;\n        private readonly IJsonSerializer _serializer;\n\n        public NewtonSoftJsonReader(IHttpRequest request, IJsonSerializer serializer)\n        {\n            _request = request;\n            _serializer = serializer;\n        }\n\n        public async Task<T> Read<T>()\n        {\n            string inputText = await GetInputText().ConfigureAwait(false);\n            return _serializer.Deserialize<T>(inputText);\n        }\n\n        // Leave this here for testing\n        public virtual Task<string> GetInputText()\n        {\n            Encoding encoding = Encoding.UTF8;\n            if (_request.HasHeader(HttpGeneralHeaders.ContentEncoding))\n            {\n                encoding = Encoding.GetEncoding(_request.GetSingleHeader(HttpGeneralHeaders.ContentEncoding));\n            }\n\n            if (_request.HasHeader(\"x-encoding\"))\n            {\n                encoding = Encoding.GetEncoding(_request.GetSingleHeader(\"x-encoding\"));\n            }\n\n\n            var reader = new StreamReader(_request.Input, encoding);\n\n            return reader.ReadToEndAsync();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Json/NewtonsoftJsonFormatter.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.IO;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Runtime.Formatters;\n\nnamespace FubuMVC.Core.Json\n{\n    [Description(\"Json serialization with Newtonsoft.Json\")]\n    public class NewtonsoftJsonFormatter : IFormatter\n    {\n        public virtual Task Write<T>(IFubuRequestContext context, T target, string mimeType)\n        {\n            var text = serializeData(context, target);\n            return context.Writer.Write(mimeType, text);\n        }\n\n        protected static string serializeData<T>(IFubuRequestContext context, T target)\n        {\n            var serializer = context.Services.GetInstance<IJsonSerializer>();\n            var text = serializer.Serialize(target);\n            return text;\n        }\n\n        public async Task<T> Read<T>(IFubuRequestContext context)\n        {\n            var serializer = context.Services.GetInstance<IJsonSerializer>();\n\n            var reader = new StreamReader(context.Request.Input);\n            var json = await reader.ReadToEndAsync().ConfigureAwait(false);\n\n            return serializer.Deserialize<T>(json);\n        }\n\n        public IEnumerable<string> MatchingMimetypes\n        {\n            get\n            {\n                yield return \"application/json\";\n                yield return \"text/json\";\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Json/NewtonsoftJsonSerializer.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.IO;\nusing Newtonsoft.Json;\n\nnamespace FubuMVC.Core.Json\n{\n\n\n\tpublic class NewtonSoftJsonSerializer : IJsonSerializer\n\t{\n\t    private readonly JsonSerializerSettings _settings;\n\t    private readonly IEnumerable<JsonConverter> _converters;\n\n\t\tpublic NewtonSoftJsonSerializer(JsonSerializerSettings settings, IEnumerable<JsonConverter> converters)\n\t\t{\n\t\t    _settings = settings;\n\t\t    _converters = converters;\n\t\t}\n\n\t    public JsonSerializer InnerSerializer()\n\t    {\n\t        return buildSerializer(false);\n\t    }\n\n\t    private JsonSerializer buildSerializer(bool includeMetadata)\n\t    {\n\t        var jsonSerializer = JsonSerializer.Create(_settings);\n\n            if (includeMetadata)\n            {\n                jsonSerializer.TypeNameHandling = TypeNameHandling.All;\n            }\n\t        \n\t\t\tjsonSerializer.Converters.AddRange(_converters);\n\t\t\t\n\t\t\treturn jsonSerializer;\n\t\t}\n\n\t\tpublic string Serialize(object target, bool includeMetadata = false)\n\t\t{\n\t\t\tvar stringWriter = new StringWriter();\n\t\t\tvar writer = new JsonTextWriter(stringWriter);\n\n\t\t\tvar serializer = buildSerializer(includeMetadata);\n\t\t\tserializer.Serialize(writer, target);\n\n\t\t\treturn stringWriter.ToString();\n\t\t}\n\n\t\tpublic T Deserialize<T>(string input)\n\t\t{\n\t\t\tvar serializer = buildSerializer(true);\n\t\t\treturn serializer.Deserialize<T>(new JsonTextReader(new StringReader(input)));\n\t\t}\n\n\t    public T Deserialize<T>(Stream stream)\n\t    {\n\t        return buildSerializer(false).Deserialize<T>(new JsonTextReader(new StreamReader(stream)));\n\t    }\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/Basic/AssemblyScanner.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Reflection;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Localization.Basic\n{\n    public interface ILocalizedProperties\n    {\n        IEnumerable<PropertyInfo> FindProperties();\n        IEnumerable<StringToken> FindTokens();\n    }\n\n    public class AssemblyScanner\n    {\n        private readonly ILocalizationStorage _storage;\n        private readonly CultureInfo _culture;\n        private readonly Lazy<ILocalizationDataProvider> _provider;\n\n        public AssemblyScanner(ILocalizationStorage storage, CultureInfo culture)\n        {\n            DefaultCulture = new CultureInfo(\"en-US\");\n\n            _storage = storage;\n            _culture = culture;\n\n            _provider = new Lazy<ILocalizationDataProvider>(() =>\n            {\n                var missingHandler = new LocalizationMissingHandler(_storage, DefaultCulture);\n                var factory = new LocalizationProviderFactory(_storage, missingHandler,\n                                                new LocalizationCache());\n\n                return factory.BuildProvider(_culture);\n            });\n        }\n\n        public CultureInfo DefaultCulture { get; set; }\n\n        public void ScanAssembly(Assembly assembly)\n        {\n            assembly\n                .GetExportedTypes()\n                .Where(x => x.CanBeCastTo<StringToken>())\n                .Each(ScanStringTokenType);\n\n            assembly\n                .GetExportedTypes()\n                .Where(x => x.IsConcreteTypeOf<ILocalizedProperties>())\n                .Each(type => ScanProperties(type.Create<ILocalizedProperties>()));\n        }\n\n        public void ScanStringTokenType(Type type)\n        {\n            type\n                .GetFields(BindingFlags.Public | BindingFlags.Static)\n                .Where(field => field.FieldType.CanBeCastTo<StringToken>())\n                .Each(field =>\n                {\n                    var token = field.GetValue(null).As<StringToken>();\n                    _provider.Value.GetTextForKey(token);\n                });\n\n        }\n\n        public void ScanProperties(ILocalizedProperties properties)\n        {\n            properties.FindProperties().Each(prop => _provider.Value.GetHeader(prop));\n\n            properties.FindTokens().Each(x => _provider.Value.GetTextForKey(x));\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/Basic/ILocalizationCache.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\n\nnamespace FubuMVC.Core.Localization.Basic\n{\n    public interface ILocalizationCache\n    {\n        ILocaleCache CacheFor(CultureInfo culture, Func<IEnumerable<LocalString>> finder);\n        void LoadCaches(Action<Action<CultureInfo, ILocaleCache>> loader);\n        void Clear();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/Basic/ILocalizationProviderFactory.cs",
    "content": "using System;\nusing System.Globalization;\n\nnamespace FubuMVC.Core.Localization.Basic\n{\n    public interface ILocalizationProviderFactory\n    {\n        void LoadAll(Action<string> tracer);\n        ILocalizationDataProvider BuildProvider(CultureInfo culture);\n        void ApplyToLocalizationManager();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/Basic/ILocalizationStorage.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\n\nnamespace FubuMVC.Core.Localization.Basic\n{\n    \n\n    public interface ILocalizationStorage\n    {\n        void WriteMissing(string key, string text, CultureInfo culture);\n\n        void LoadAll(Action<string> tracer, Action<CultureInfo, IEnumerable<LocalString>> callback);\n\n        IEnumerable<LocalString> Load(CultureInfo culture);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/Basic/InMemoryLocalizationStorage.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing FubuCore.Util;\n\nnamespace FubuMVC.Core.Localization.Basic\n{\n    public class InMemoryLocalizationStorage : ILocalizationStorage\n    {\n        private readonly Cache<CultureInfo, IList<LocalString>> _cache = new Cache<CultureInfo, IList<LocalString>>(x => new List<LocalString>());\n        private readonly Cache<CultureInfo, IList<LocalString>> _missing = new Cache<CultureInfo, IList<LocalString>>(x => new List<LocalString>());\n        \n\n        public void Add(CultureInfo culture, string key, string text)\n        {\n            _cache[culture].Add(new LocalString(key, text));\n        }\n\n        public void Add(CultureInfo culture, string valuesText)\n        {\n            _cache[culture].AddRange(LocalString.ReadAllFrom(valuesText));\n        }\n\n        public void WriteMissing(string key, string text, CultureInfo culture)\n        {\n            _missing[culture].Add(new LocalString(key, text));\n        }\n\n        public void LoadAll(Action<string> tracer, Action<CultureInfo, IEnumerable<LocalString>> callback)\n        {\n            _cache.Each(callback);\n        }\n\n        public IEnumerable<LocalString> Load(CultureInfo culture)\n        {\n            return _cache[culture];\n        }\n\n        public IEnumerable<LocalString> RecordedMissingKeysFor(CultureInfo culture)\n        {\n            return _missing[culture];\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/Basic/LocalizationCache.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Threading;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Localization.Basic\n{\n    public class LocalizationCache : ILocalizationCache\n    {\n        private readonly Dictionary<string, ILocaleCache> _locales = new Dictionary<string, ILocaleCache>();\n        private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();\n\n        public ILocaleCache CacheFor(CultureInfo culture, Func<IEnumerable<LocalString>> finder)\n        {\n            var cache = initialRead(culture);\n            if (cache == null)\n            {\n                _lock.Write(() =>\n                {\n                    if (!_locales.ContainsKey(culture.Name))\n                    {\n                        var data = finder();\n                        cache = new ThreadSafeLocaleCache(culture, data);\n                        _locales.Add(culture.Name, cache);\n                    }\n                    else\n                    {\n                        cache = _locales[culture.Name];\n                    }\n                });\n            }\n\n            return cache;\n        }\n\n        public void LoadCaches(Action<Action<CultureInfo, ILocaleCache>> loader)\n        {\n            _lock.Write(() =>\n            {\n                _locales.Clear();\n\n                loader((culture, cache) => _locales.Add(culture.Name, cache));\n            });\n        }\n\n        private ILocaleCache initialRead(CultureInfo culture)\n        {\n            return _lock.Read(() => _locales.ContainsKey(culture.Name) ? _locales[culture.Name] : null);\n        }\n\n        public void Clear()\n        {\n            _lock.Write(() => _locales.Clear());\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/Basic/LocalizationMissingHandler.cs",
    "content": "using System.Globalization;\nusing System.Linq;\nusing System.Text.RegularExpressions;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Localization.Basic\n{\n    public class LocalizationMissingHandler : ILocalizationMissingHandler\n    {\n        private readonly ILocalizationStorage _storage;\n        private readonly CultureInfo _defaultCulture;\n\n        public LocalizationMissingHandler(ILocalizationStorage storage, CultureInfo defaultCulture)\n        {\n            _storage = storage;\n            _defaultCulture = defaultCulture;\n        }\n\n        public string FindMissingText(StringToken key, CultureInfo culture)\n        {\n            var defaultValue = culture.Name + \"_\" + key.ToLocalizationKey();\n            if (key.DefaultValue.IsNotEmpty() && culture.Equals(_defaultCulture))\n            {\n                defaultValue = key.DefaultValue;\n            }\n\n            _storage.WriteMissing(key.ToLocalizationKey().ToString(), defaultValue, culture);\n\n            return defaultValue;\n        }\n\n        public string FindMissingProperty(PropertyToken property, CultureInfo culture)\n        {\n            var defaultValue = culture.Equals(_defaultCulture)\n                                   ? property.Header ?? property.DefaultHeaderText(culture) ?? BreakUpCamelCase(property.PropertyName)\n                                   : property.DefaultHeaderText(culture) ?? culture.Name + \"_\" + property.PropertyName;\n\n            _storage.WriteMissing(property.StringTokenKey, defaultValue, culture);\n\n            return defaultValue;\n        }\n\n        public static string BreakUpCamelCase(string fieldName)\n        {\n            var patterns = new[]\n                {\n                    \"([a-z])([A-Z])\",\n                    \"([0-9])([a-zA-Z])\",\n                    \"([a-zA-Z])([0-9])\"\n                };\n            var output = patterns.Aggregate(fieldName,\n                (current, pattern) => Regex.Replace(current, pattern, \"$1 $2\", RegexOptions.IgnorePatternWhitespace));\n            return output.Replace('_', ' ');\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/Basic/LocalizationProvider.cs",
    "content": "using System.Globalization;\nusing System.Reflection;\n\nnamespace FubuMVC.Core.Localization.Basic\n{\n    public class LocalizationProvider : ILocalizationDataProvider\n    {\n        private readonly ILocaleCache _localeCache;\n        private readonly ILocalizationMissingHandler _missingHandler;\n\n        public LocalizationProvider(ILocaleCache localeCache, ILocalizationMissingHandler missingHandler)\n        {\n            _localeCache = localeCache;\n            _missingHandler = missingHandler;\n        }\n\n        public CultureInfo Culture\n        {\n            get { return _localeCache.Culture; }\n        }\n\n        public string GetTextForKey(StringToken key)\n        {\n            var localizationKey = key.ToLocalizationKey();\n            return _localeCache\n                .Retrieve(localizationKey, () => _missingHandler.FindMissingText(key, _localeCache.Culture));\n        }\n\n        public string GetHeader(PropertyInfo property)\n        {\n            return GetHeader(new PropertyToken(property));\n        }\n\n        public string GetHeader(PropertyToken property)\n        {\n            var localizationKey = new LocalizationKey(property.StringTokenKey);\n            return _localeCache\n                .Retrieve(localizationKey, () => _missingHandler.FindMissingProperty(property, _localeCache.Culture));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/Basic/LocalizationProviderFactory.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Threading;\nusing FubuCore.Util;\n\nnamespace FubuMVC.Core.Localization.Basic\n{\n    public class LocalizationProviderFactory : ILocalizationProviderFactory\n    {\n        private readonly ILocalizationStorage _storage;\n        private readonly ILocalizationMissingHandler _missingHandler;\n        private readonly ILocalizationCache _cache;\n        private readonly Cache<CultureInfo, ILocalizationDataProvider> _providers;\n\n\n        public LocalizationProviderFactory(ILocalizationStorage storage, ILocalizationMissingHandler missingHandler, ILocalizationCache cache)\n        {\n            _storage = storage;\n            _missingHandler = missingHandler;\n            _cache = cache;\n\n            _providers = new Cache<CultureInfo, ILocalizationDataProvider>(culture => BuildProvider(culture));\n        }\n\n        public void LoadAll(Action<string> tracer)\n        {\n            _cache.LoadCaches(loader =>\n            {\n                _storage.LoadAll(tracer, (c, keys) =>\n                {\n                    loader(c, new ThreadSafeLocaleCache(c, keys));\n                });\n            });\n        }\n\n        public ILocalizationDataProvider BuildProvider(CultureInfo culture)\n        {\n            return new LocalizationProvider(_cache.CacheFor(culture, () => _storage.Load(culture)), _missingHandler);\n        }\n\n        public ILocalizationDataProvider SelectProviderByThread()\n        {\n            return _providers[Thread.CurrentThread.CurrentUICulture];\n        }\n\n        public void ApplyToLocalizationManager()\n        {\n            LocalizationManager.RegisterProvider(SelectProviderByThread);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/Basic/XmlDirectoryLocalizationStorage.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Xml;\nusing FubuCore;\nusing FubuCore.Configuration;\nusing FubuCore.Util;\n\nnamespace FubuMVC.Core.Localization.Basic\n{\n    public class XmlDirectoryLocalizationStorage : ILocalizationStorage\n    {\n        public const string MissingLocaleConfigFile = \"missing.locale.config\";\n        private const string Key = \"key\";\n        private const string RootElement = \"fubu-localization\";\n        private const string Missing = \"missing\";\n        private static readonly string LeafElement;\n        private readonly IEnumerable<string> _directories;\n        private readonly IFileSystem _fileSystem = new FileSystem();\n        private readonly string _missingLocaleFile;\n        private readonly object _missingLocker = new object();\n\n        static XmlDirectoryLocalizationStorage()\n        {\n            LeafElement = \"string\";\n        }\n\n        public XmlDirectoryLocalizationStorage(IEnumerable<string> directories)\n        {\n            _directories = directories;\n\n            _missingLocaleFile = directories.First().AppendPath(MissingLocaleConfigFile);\n        }\n\n        public void WriteMissing(string key, string text, CultureInfo culture)\n        {\n            lock (_missingLocker)\n            {\n                var document = getMissingKeysDocument();\n\n                var xpath = \"{0}[@{1}='{2}']\".ToFormat(Missing, Key, key);\n                if (document.DocumentElement.SelectSingleNode(xpath) != null)\n                {\n                    return;\n                }\n                    \n                document.DocumentElement.AddElement(Missing)\n                    .WithAtt(Key, key)\n                    .WithAtt(\"culture\", culture.Name)\n                    .InnerText = text;\n\n                document.Save(_missingLocaleFile);\n            }\n        }\n\n        private XmlDocument getMissingKeysDocument()\n        {\n            return _missingLocaleFile.XmlFromFileWithRoot(\"missing-localization\");\n        }\n\n        public void LoadAll(Action<string> tracer, Action<CultureInfo, IEnumerable<LocalString>> callback)\n        {\n            var fileSet = new FileSet{\n                DeepSearch = false,\n                Include = \"*.locale.config\",\n                Exclude = \"missing.locale.config\"\n            };\n\n            var files = _directories\n                .SelectMany(dir => _fileSystem.FindFiles(dir, fileSet))\n                .Where(file => !Path.GetFileName(file).StartsWith(\"missing.\"));\n\n            files\n                .GroupBy(CultureFor)\n                .Each(group =>\n                {\n                    var strings = group.SelectMany(f =>\n                    {\n                        tracer(\"Reading localization data from \" + f);\n                        return LoadFrom(f);\n                    });\n                    callback(group.Key, strings);\n                });\n        }\n\n        public IEnumerable<LocalString> Load(CultureInfo culture)\n        {\n            // Just not going to worry about duplicates here\n            var filename = GetFileName(culture);\n            return _directories\n                .Select(x => x.AppendPath(filename))\n                .Where(file => _fileSystem.FileExists(file))\n                .SelectMany(LoadFrom);\n        }\n\n        public bool HasMissingLocalizationKeys()\n        {\n            var document = getMissingKeysDocument();\n            return document.DocumentElement.SelectNodes(Missing).Count > 0;\n        }\n\n\n        public static void Write(string directory, CultureInfo culture, IEnumerable<LocalString> strings)\n        {\n            var filename = GetFileName(culture);\n            var file = directory.AppendPath(filename);\n\n            Write(file, strings);\n        }\n\n        public static void Write(string file, IEnumerable<LocalString> strings)\n        {\n            var document = new XmlDocument();\n            var root = document.WithRoot(RootElement);\n\n            strings.OrderBy(x => x.value).Each(\n                x => { root.AddElement(LeafElement).WithAtt(Key, x.value).InnerText = x.display; });\n\n            document.Save(file);\n        }\n\n        public string MissingLocaleFile\n        {\n            get { return _missingLocaleFile; }\n        }\n\n        public void MergeAllMissing()\n        {\n\n            var cache = new Cache<string, IList<LocalString>> (key => new List<LocalString>());\n            var document = getMissingKeysDocument();\n            foreach (XmlElement element in document.DocumentElement.SelectNodes(Missing))\n            {\n                var culture = element.GetAttribute(\"culture\");\n                cache[culture].Add(toLocalString(element));\n            }\n\n            cache.Each(writeMissingKeys);\n\n            var emptyMissing = new XmlDocument();\n            emptyMissing.WithRoot(Missing);\n            emptyMissing.Save(_missingLocaleFile);\n        }\n\n        private void writeMissingKeys(string culture, IEnumerable<LocalString> missingStrings)\n        {\n            var filename = GetFileName(culture);\n            var file = _directories.First().AppendPath(filename);\n\n            Console.WriteLine(\"Writing new to \" + file);\n\n            var existingStrings = LoadFrom(file);\n            var newStrings = missingStrings.ToList();\n            newStrings.RemoveAll(x => existingStrings.Any(s => s.value == x.value));\n\n            // TODO -- come from behind and move this out into some kind of observer\n            var length = newStrings.Max(x => x.value.Length) + 5;\n            newStrings.Each(x =>\n            {\n                Console.WriteLine(\"{0} = {1}\", x.value.PadLeft(length), x.display);\n            });\n\n            Console.WriteLine();\n            Console.WriteLine();\n\n            Write(file, existingStrings.Union(newStrings));\n        }\n\n        \n        private static LocalString toLocalString(XmlElement element)\n        {\n            return new LocalString(element.GetAttribute(Key), element.InnerText);\n        }\n\n        public static IEnumerable<LocalString> LoadFrom(string file)\n        {\n            var document = file.XmlFromFileWithRoot(RootElement);\n\n            foreach (XmlElement element in document.DocumentElement.SelectNodes(LeafElement))\n            {\n                yield return toLocalString(element);\n            }\n        }\n\n        public static string GetFileName(CultureInfo culture)\n        {\n            var name = culture.Name;\n            return GetFileName(name);\n        }\n\n        public static string GetFileName(string cultureName)\n        {\n            return \"{0}.locale.config\".ToFormat(cultureName);\n        }\n\n        public static CultureInfo CultureFor(string filename)\n        {\n            var cultureName = Path.GetFileName(filename).Split('.').First();\n            return new CultureInfo(cultureName);\n            \n        }\n\n        public IEnumerable<string> Directories\n        {\n            get { return _directories; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/BasicLocalizationServices.cs",
    "content": "using System.Globalization;\nusing FubuMVC.Core.Localization.Basic;\nusing FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.Localization\n{\n    public class BasicLocalizationServices : ServiceRegistry\n    {\n        public BasicLocalizationServices()\n        {\n            SetServiceIfNone(new CultureInfo(\"en-US\"));\n            SetServiceIfNone<ICurrentCultureContext>(new CurrentCultureContext\n            {\n                CurrentCulture = new CultureInfo(\"en-US\"),\n                CurrentUICulture = new CultureInfo(\"en-US\")\n            });\n\n            SetServiceIfNone<ILocalizationCache, LocalizationCache>().Singleton();\n            SetServiceIfNone<ILocalizationMissingHandler, LocalizationMissingHandler>();\n            SetServiceIfNone<ILocalizationProviderFactory, LocalizationProviderFactory>();\n            SetServiceIfNone<ILocalizationStorage, PackageAwareXmlLocalizationStorage>();\n\n            AddService<IActivator, SpinUpLocalizationCaches>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/CurrentCultureContext.cs",
    "content": "﻿using System.Globalization;\nusing System.Threading;\n\nnamespace FubuMVC.Core.Localization\n{\n    public class CurrentCultureContext : ICurrentCultureContext\n    {\n        public CultureInfo CurrentCulture\n        {\n            get { return Thread.CurrentThread.CurrentCulture; }\n            set { Thread.CurrentThread.CurrentCulture = value; }\n        }\n\n        public CultureInfo CurrentUICulture\n        {\n            get { return Thread.CurrentThread.CurrentUICulture; }\n            set { Thread.CurrentThread.CurrentUICulture = value; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/HeaderTextAttribute.cs",
    "content": "using System;\n\nnamespace FubuMVC.Core.Localization\n{\n    [AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]\n    public class HeaderTextAttribute : Attribute\n    {\n        public HeaderTextAttribute(string text)\n        {\n            Text = text;\n        }\n\n        private string _culture = \"en-US\";\n\n        public string Culture\n        {\n            get\n            {\n                return _culture;\n            }\n            set\n            {\n                _culture = value;\n            }\n        }\n\n        public string Text { get; private set; }\n        public string DefaultText { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/HtmlTagExtensions.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing FubuMVC.Core.View;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.Localization\n{\n    public static class HtmlTagExtensions\n    {\n        public static HtmlTag Text(this HtmlTag tag, StringToken token)\n        {\n            return tag.Text(token == null ? string.Empty : token.ToString());\n        }\n\n        public static HtmlTag Attr(this HtmlTag tag, string attName, StringToken token)\n        {\n            return tag.Attr(attName, token.ToString());\n        }\n\n        /// <summary>\n        ///   Just returns the localized header text for a property of the view model\n        /// </summary>\n        /// <typeparam name = \"T\"></typeparam>\n        /// <param name = \"page\"></param>\n        /// <param name = \"expression\"></param>\n        /// <returns></returns>\n        public static string HeaderText<T>(this IFubuPage<T> page, Expression<Func<T, object>> expression)\n            where T : class\n        {\n            return LocalizationManager.GetHeader(expression);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/ICurrentCultureContext.cs",
    "content": "﻿using System.Globalization;\n\nnamespace FubuMVC.Core.Localization\n{\n    public interface ICurrentCultureContext\n    {\n        CultureInfo CurrentCulture { get; set; }\n        CultureInfo CurrentUICulture { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/ILocaleCache.cs",
    "content": "using System;\nusing System.Globalization;\n\nnamespace FubuMVC.Core.Localization\n{\n    // SAMPLE: ILocaleCache\n    public interface ILocaleCache\n    {\n        void Append(LocalizationKey key, string value);\n        string Retrieve(LocalizationKey key, Func<string> missing);\n        CultureInfo Culture { get; }\n    }\n    // ENDSAMPLE\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/ILocaleCacheContext.cs",
    "content": "﻿namespace FubuMVC.Core.Localization\n{\n    public interface ILocaleCacheContext\n    {\n        ILocaleCache Cache { get; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/ILocalizationDataProvider.cs",
    "content": "using System.Globalization;\nusing System.Reflection;\n\nnamespace FubuMVC.Core.Localization\n{\n    public interface ILocalizationDataProvider\n    {\n        CultureInfo Culture { get; }\n        string GetTextForKey(StringToken key);\n        string GetHeader(PropertyInfo property);\n        string GetHeader(PropertyToken property);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/ILocalizationMissingHandler.cs",
    "content": "using System.Globalization;\n\nnamespace FubuMVC.Core.Localization\n{\n    // SAMPLE: MissingHandler\n    public interface ILocalizationMissingHandler\n    {\n        string FindMissingText(StringToken key, CultureInfo culture);\n        string FindMissingProperty(PropertyToken property, CultureInfo culture);\n    }\n    // ENDSAMPLE\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/IStringTokenWithParams.cs",
    "content": "﻿namespace FubuMVC.Core.Localization\n{\n    public interface IStringTokenWithParams\n    {\n        string ToRawString();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/LocalString.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Localization\n{\n    public class LocalString : IComparable<LocalString>, IComparable\n    {\n        private string _value;\n\n        public static LocalString ReadFrom(string line)\n        {\n            var parts = line.Trim().Split('=');\n            if (parts.Length != 2)\n            {\n                throw new ArgumentException(\"LocalString must be expressed as 'value=display', '{0}' is invalid\".ToFormat(line));\n            }\n\n            return new LocalString(parts.First(), parts.Last());\n        }\n\n        public static IEnumerable<LocalString> ReadAllFrom(string text)\n        {\n            return text.ReadLines()\n                .Select(x => x.Trim())\n                .Where(x => x.IsNotEmpty())\n                .Select(ReadFrom);\n        }\n\n        public LocalString(string value)\n        {\n            this.value = value;\n            display = value;\n        }\n\n        public LocalString(string value, string display)\n        {\n            _value = value;\n            this.display = display;\n        }\n\n        public LocalString()\n        {\n        }\n\n        public LocalString(Type type)\n            : this(type.Name)\n        {\n\n        }\n\n        public LocalString(StringToken token)\n        {\n            value = token.Key;\n            display = token.ToString();\n        }\n\n        public string value\n        {\n            get { return _value; }\n            set { _value = value; }\n        }\n        public string display { get; set; }\n\n        public bool Equals(LocalString obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            return Equals(obj.value, value) && Equals(obj.display, display);\n        }\n\n        public int CompareTo(LocalString other)\n        {\n            if (other == null) return 1;\n            if (other.display == null && display == null) return 0;\n            if (display == null) return -1;\n\n            return display.CompareTo(other.display);\n        }\n\n        public int CompareTo(object obj)\n        {\n            return display.CompareTo(((LocalString)obj).display);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof(LocalString)) return false;\n            return Equals((LocalString)obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (value != null ? value.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"{0}={1}\", _value, display);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/LocalizationExtensions.cs",
    "content": "namespace FubuMVC.Core.Localization\n{\n    public static class LocalizationExtensions\n    {\n        public static LocalizationKey ToLocalizationKey(this PropertyToken propertyInfo)\n        {\n            return new LocalizationKey(propertyInfo.PropertyName, propertyInfo.ParentTypeName);\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/LocalizationKey.cs",
    "content": "﻿using System;\nusing System.Reflection;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Localization\n{\n    public class LocalizationKey\n    {\n        private readonly string _key1;\n        private readonly string _key2;\n\n        public LocalizationKey(string key1)\n            : this(key1, string.Empty)\n        {\n        }\n\n        public LocalizationKey(string key1, string key2)\n        {\n            _key1 = key1;\n            _key2 = key2 ?? string.Empty;\n        }\n\n        public LocalizationKey(PropertyInfo property)\n        {\n            _key1 = property.Name;\n            _key2 = property.DeclaringType.FullName;\n        }\n\n        public bool Equals(LocalizationKey other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n\n            return string.Equals(_key1, other._key1, StringComparison.OrdinalIgnoreCase) &&\n                   string.Equals(_key2, other._key2, StringComparison.OrdinalIgnoreCase);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof(LocalizationKey)) return false;\n            return Equals((LocalizationKey)obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return (_key1.ToLower().GetHashCode() * 397) ^ _key2.ToLower().GetHashCode();\n            }\n        }\n\n        public override string ToString()\n        {\n            return _key2.IsEmpty()\n                ? _key1\n                : _key1 + \"-\" + _key2;\n        }\n\n        public string Key1 { get { return _key1; } }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/LocalizationManager.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.Localization\n{\n    public static class LocalizationManager\n    {\n        private const string PluralSufix = \"_PLURAL\";\n\n        private static Func<ILocalizationDataProvider> LocalizationDataProvider;\n\n        public static ILocalizationDataProvider CurrentProvider()\n        {\n            return LocalizationDataProvider();\n        }\n\n        static LocalizationManager()\n        {\n            Stub();\n        }\n\n        public static string ToHeader(this PropertyInfo property)\n        {\n            return GetHeader(property);\n        }\n\n        public static string ToHeader(this Accessor property)\n        {\n            return GetHeader(property.InnerProperty);\n        }\n\n        public static void RegisterProvider(Func<ILocalizationDataProvider> provider)\n        {\n            LocalizationDataProvider = provider;\n        }\n\n        public static void Stub()\n        {\n            Stub(\"en-US\");\n        }\n        \n        public static void Stub(string culture)\n        {\n            Stub(new NulloLocalizationDataProvider(new CultureInfo(culture)));\n        }\n\n        public static void Stub(ILocalizationDataProvider dataProvider)\n        {\n            LocalizationDataProvider = () => dataProvider;\n        }\n\n        public static string GetTextForKey(StringToken token)\n        {\n            return LocalizationDataProvider().GetTextForKey(token);\n        }\n\n        public static string GetText(PropertyInfo property)\n        {\n            return LocalizationDataProvider().GetHeader(property);\n        }\n\n        public static string GetText<T>(Expression<Func<T, object>> expression)\n        {\n            PropertyInfo propertyInfo = ReflectionHelper.GetProperty(expression);\n            return GetHeader(propertyInfo);\n        }\n\n        public static LocalString GetLocalString(LambdaExpression expression)\n        {\n            var propertyInfo = ReflectionHelper.GetProperty(expression);\n            return new LocalString { display = GetHeader(propertyInfo), value = propertyInfo.Name };\n        }\n\n        public static string GetText(Type type)\n        {\n            return LocalizationDataProvider().GetTextForKey(KeyFromType(type));\n        }\n\n        public static StringToken KeyFromType(Type type)\n        {\n            return StringToken.FromKeyString(type.Name);\n        }\n\n        public static string GetHeader(PropertyInfo property)\n        {\n            return LocalizationDataProvider().GetHeader(property);\n        }\n\n        public static string GetHeader(PropertyToken token)\n        {\n            return LocalizationDataProvider().GetHeader(token);\n        }\n\n        public static string GetHeader<T>(Expression<Func<T, object>> expression)\n        {\n            PropertyInfo propertyInfo = ReflectionHelper.GetProperty(expression);\n            return GetHeader(propertyInfo);\n        }\n\n        public static string GetTextForType(string name)\n        {\n            return LocalizationDataProvider().GetTextForKey(StringToken.FromKeyString(name));\n        }\n\n        public static string GetPluralTextForType(Type type)\n        {\n            return GetPluralTextForType(type.Name);\n        }\n\n        public static string GetPluralTextForType(string type)\n        {\n            return LocalizationDataProvider()\n                    .GetTextForKey(StringToken.FromKeyString(type + PluralSufix));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/LocalizationSettings.cs",
    "content": "﻿using System.Globalization;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.Localization\n{\n    public class LocalizationSettings : IFeatureSettings, DescribesItself\n    {\n        public LocalizationSettings()\n        {\n            DefaultCulture = CultureInfo.CurrentCulture;\n        }\n\n        public bool Enabled { get; set; }\n        public CultureInfo DefaultCulture { get; set; }\n\n        void IFeatureSettings.Apply(FubuRegistry registry)\n        {\n            if (!Enabled) return;\n            \n            registry.Services.IncludeRegistry<BasicLocalizationServices>();\n            if (DefaultCulture != null)\n            {\n                registry.Services.ReplaceService(DefaultCulture);\n            }\n        }\n\n        public void Describe(Description description)\n        {\n            description.ShortDescription = \"Localization Configuration\";\n            description.Properties[nameof(DefaultCulture)] = DefaultCulture.ToString();\n            description.Properties[nameof(Enabled)] = Enabled.ToString();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/NulloLocalizationDataProvider.cs",
    "content": "﻿using System.Globalization;\nusing System.Reflection;\nusing System.Threading;\n\nnamespace FubuMVC.Core.Localization\n{\n    public class NulloLocalizationDataProvider : ILocalizationDataProvider\n    {\n        public NulloLocalizationDataProvider(CultureInfo culture)\n        {\n            Culture = culture;\n        }\n\n        public NulloLocalizationDataProvider()\n            : this(Thread.CurrentThread.CurrentUICulture)\n        {\n        }\n\n        public CultureInfo Culture { get; set; }\n\n        public string GetTextForKey(StringToken key)\n        {\n            return key.DefaultValue ?? Culture.Name + \"_\" + key.Key;\n        }\n\n        public string GetTextForListValue(string listName, string key)\n        {\n            return Culture.Name + \"_\" + listName + \"-\" + key;\n        }\n\n        public string GetDefaultText(PropertyToken property)\n        {\n            return Culture.Name + \"_\" + property.PropertyName;\n        }\n\n        public string GetHeader(PropertyInfo property)\n        {\n            return Culture.Name + \"_\" + property.Name;\n        }\n\n        public string GetHeader(PropertyToken property)\n        {\n            return Culture.Name + \"_\" + property.PropertyName;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/PackageAwareXmlLocalizationStorage.cs",
    "content": "using FubuMVC.Core.Localization.Basic;\nusing FubuMVC.Core.Runtime.Files;\n\nnamespace FubuMVC.Core.Localization\n{\n    public class PackageAwareXmlLocalizationStorage : XmlDirectoryLocalizationStorage\n    {\n        public PackageAwareXmlLocalizationStorage(IFubuApplicationFiles files) : base(new []{files.RootPath})\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/PropertyToken.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing FubuCore;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.Localization\n{\n    public class PropertyToken\n    {\n        public static PropertyToken For<T>(Expression<Func<T, object>> expression)\n        {\n            var property = ReflectionHelper.GetProperty(expression);\n\n            return new PropertyToken(property);\n        }\n\n        private readonly IDictionary<string, string> _defaultHeaders = new Dictionary<string, string>();\n        private string _header;\n\n        public PropertyToken()\n        {\n        }\n\n        public PropertyToken(string parentType, string propertyName)\n        {\n            ParentTypeName = parentType;\n            PropertyName = propertyName;\n        }\n\n        public PropertyToken(PropertyInfo property)\n        {\n            if (property == null)\n            {\n                throw new ArgumentNullException(\"property\");\n            }\n\n            property.ForAttribute<HeaderTextAttribute>(att =>\n            {\n                if (att.Culture.IsEmpty())\n                {\n                    _header = att.Text;\n                }\n                else\n                {\n                    _defaultHeaders.Add(att.Culture, att.Text);\n                }\n            });\n\n            ParentType = property.DeclaringType;\n            ParentTypeName = property.DeclaringType.FullName;\n            PropertyName = property.Name;\n        }\n\n        public string DefaultHeaderText(CultureInfo culture)\n        {\n            if (_defaultHeaders.ContainsKey(culture.Name))\n            {\n                return _defaultHeaders[culture.Name];\n            }\n\n            return null;\n        }\n\n        public string Header\n        {\n            get { return _header; }\n        }\n\n        public string ParentTypeName { get; set; }\n        public Type ParentType { get; set; }\n        public string PropertyName { get; set; }\n\n        public bool Equals(PropertyToken obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            return Equals(obj.ParentTypeName, ParentTypeName) && Equals(obj.PropertyName, PropertyName);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof(PropertyToken)) return false;\n            return Equals((PropertyToken)obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((ParentTypeName != null ? ParentTypeName.GetHashCode() : 0) * 397) ^\n                       (PropertyName != null ? PropertyName.GetHashCode() : 0);\n            }\n        }\n\n        public override string ToString()\n        {\n            return LocalizationManager.GetHeader(this);\n        }\n\n        public string FindDefaultHeader(CultureInfo culture)\n        {\n            if (ParentType == null) return null;\n\n            PropertyInfo property = ParentType.GetProperty(PropertyName);\n            string header = null;\n\n            property.ForAttribute<HeaderTextAttribute>(att =>\n            {\n                if (att.Culture == culture.Name)\n                {\n                    header = att.Text;\n                }\n            });\n\n            return header;\n        }\n        \n        // SAMPLE: PropertyTokenKey\n        public virtual string StringTokenKey\n        {\n            get\n            {\n                return \"{0}:{1}:Header\".ToFormat(ParentTypeName, PropertyName);\n            }\n        }\n        // ENDSAMPLE\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/SpinUpLocalizationCaches.cs",
    "content": "using FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Localization.Basic;\n\nnamespace FubuMVC.Core.Localization\n{\n    public class SpinUpLocalizationCaches : IActivator\n    {\n        private readonly ILocalizationProviderFactory _factory;\n\n        public SpinUpLocalizationCaches(ILocalizationProviderFactory factory)\n        {\n            _factory = factory;\n        }\n\n        public void Activate(IActivationLog log, IPerfTimer timer)\n        {\n            _factory.LoadAll(text => log.Trace(text));\n            _factory.ApplyToLocalizationManager();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/StringToken.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Localization\n{\n\n    public class StringToken\n    {\n        private readonly string _defaultValue;\n        private string _key;\n        private readonly Lazy<LocalizationKey> _localizationKey;\n\n        private static readonly IList<Type> _latchedTypes = new List<Type>();\n\n        protected static void fillKeysOnFields(Type tokenType)\n        {\n            if (_latchedTypes.Contains(tokenType)) return;\n\n            tokenType.GetFields(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public)\n                .Where(x => x.FieldType.CanBeCastTo<StringToken>())\n                .Each(field =>\n                {\n                    var token = field.GetValue(null).As<StringToken>();\n                    if (token._key == null) // leave it checking the field, unless you just really enjoy stack overflow exceptions\n                    {\n                        token.Key = field.Name;\n                    }\n                });\n                \n\n            _latchedTypes.Add(tokenType);\n        }\n\n        protected StringToken(string key, string defaultValue, string localizationNamespace = null, bool namespaceByType = false)\n        {\n            _key = key;\n            _defaultValue = defaultValue;\n            _localizationKey = new Lazy<LocalizationKey>(() => buildKey(GetType(), localizationNamespace, namespaceByType));\n        }\n\n        public string Key\n        {\n            get\n            {\n                if (_key.IsEmpty())\n                {\n                    fillKeysOnFields(GetType());\n                }\n                \n                return _key;\n            }\n            protected set { _key = value; }\n        }\n\n        public string DefaultValue\n        {\n            get { return _defaultValue; }\n        }\n\n        public static StringToken FromKeyString(string key)\n        {\n            return new StringToken(key, null);\n        }\n\n        public static StringToken FromKeyString(string key, string defaultValue)\n        {\n            return new StringToken(key, defaultValue);\n        }\n\n        public static StringToken FromType<T>()\n        {\n            return FromType(typeof (T));\n        }\n\n        public static StringToken FromType(Type type)\n        {\n            return new StringToken(type.Name, type.Name);\n        }\n\n        // SAMPLE: RenderingTokens\n        public override string ToString()\n        {\n            return ToString(true);\n        }\n\n        /// <summary>\n        ///   Conditionally render the string based on a condition. Convenient if you want to avoid a bunch of messy script tags in the views.\n        /// </summary>\n        /// <param name = \"condition\"></param>\n        /// <returns></returns>\n        public string ToString(bool condition)\n        {\n            return condition ? LocalizationManager.GetTextForKey(this) : string.Empty;\n        }\n\n        public string ToFormat(params object[] args)\n        {\n            return string.Format(ToString(), args);\n        }\n        // ENDSAMPLE\n\n        public bool Equals(StringToken obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n\n            return Equals(obj.ToLocalizationKey().ToString(), ToLocalizationKey().ToString());\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj is StringToken) return Equals((StringToken) obj);\n\n            return false;\n        }\n\n        public override int GetHashCode()\n        {\n            return ToLocalizationKey().ToString().GetHashCode();\n        }\n\n        public static implicit operator string(StringToken token)\n        {\n            return token.ToString();\n        }\n\n        protected virtual LocalizationKey buildKey(Type type, string localizationNamespace, bool namespaceByType)\n        {\n            var localizationNs = localizationNamespace ?? (namespaceByType ? string.Join(\".\", GetTypeHierarchy(type).Select(x => x.Name)) : null);\n            if (_key == null)\n            {\n                fillKeysOnFields(type);\n            }\n\n            return localizationNs.IsNotEmpty()\n                ? new LocalizationKey(localizationNs + \":\" + _key) \n                : new LocalizationKey(_key);\n        }\n\n        private static IEnumerable<Type> GetTypeHierarchy(Type type)\n        {\n            var types = new List<Type> { type };\n            while (type.DeclaringType != null)\n            {\n                types.Add(type.DeclaringType);\n                type = type.DeclaringType;\n            }\n\n            types.Reverse();\n            return types;\n        }\n\n        public LocalizationKey ToLocalizationKey()\n        {\n            return _localizationKey.Value;\n        }\n\n        public static StringToken Find(Type tokenType, string key)\n        {\n            var fields = tokenType.GetFields(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public)\n                .Where(x => x.FieldType.CanBeCastTo<StringToken>());\n\n            foreach (var fieldInfo in fields)\n            {\n                var token = fieldInfo.GetValue(null).As<StringToken>();\n                if (token.Key == key)\n                {\n                    return token;\n                }\n            }\n\n            return null;\n        }\n\n        public static StringToken Find<T>(string key) where T : StringToken\n        {\n            return Find(typeof (T), key);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Localization/StringToken`1.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.Localization\n{\n    public class StringToken<T> : StringToken\n    {\n        public StringToken(string defaultValue) : this(null, defaultValue, namespaceByType: true)\n        {\n        }\n\n        protected StringToken(string key, string defaultValue, string localizationNamespace = null, bool namespaceByType = false) : base(key, defaultValue, localizationNamespace, namespaceByType)\n        {\n        }\n\n        protected override LocalizationKey buildKey(Type type, string localizationNamespace, bool namespaceByType)\n        {\n            return base.buildKey(typeof(T), localizationNamespace, namespaceByType);\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/Localization/StringToken`2.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Text;\nusing System.Web;\nusing System.Web.UI;\n\nnamespace FubuMVC.Core.Localization\n{\n    public class StringToken<T, TParams> : StringToken<T>, IStringTokenWithParams\n    {\n        public StringToken(string defaultValue) : base(defaultValue)\n        {\n        }\n\n        protected StringToken(string key, string defaultValue, string localizationNamespace = null, bool namespaceByType = false) : base(key, defaultValue, localizationNamespace, namespaceByType)\n        {\n        }\n\n        public string FormatTokenWith(TParams tokenModel)\n        {\n            return HenriFormatter.HenriFormat(base.ToString(), tokenModel);\n        }\n\n        public string ToRawString()\n        {\n            return base.ToString();\n        }\n\n        public override string ToString()\n        {\n            throw new Exception(\"You must not call ToString() directly. Use either FormatTokenWith(tokenModel) or ToRawString()\");\n        }\n\n        private class HenriFormatter\n        {\n            private static string OutExpression(object source, string expression)\n            {\n                string format = \"\";\n\n                int colonIndex = expression.IndexOf(':');\n                if (colonIndex > 0)\n                {\n                    format = expression.Substring(colonIndex + 1);\n                    expression = expression.Substring(0, colonIndex);\n                }\n\n                try\n                {\n                    if (String.IsNullOrEmpty(format))\n                    {\n                        return (DataBinder.Eval(source, expression) ?? \"\").ToString();\n                    }\n                    return DataBinder.Eval(source, expression, \"{0:\" + format + \"}\") ?? \"\";\n                }\n                catch (HttpException)\n                {\n                    throw new FormatException();\n                }\n            }\n\n            public static string HenriFormat(string format, object source)\n            {\n                if (format == null)\n                {\n                    throw new ArgumentNullException(\"format\");\n                }\n\n                StringBuilder result = new StringBuilder(format.Length * 2);\n\n                using (var reader = new StringReader(format))\n                {\n                    StringBuilder expression = new StringBuilder();\n                    int @char = -1;\n\n                    State state = State.OutsideExpression;\n                    do\n                    {\n                        switch (state)\n                        {\n                            case State.OutsideExpression:\n                                @char = reader.Read();\n                                switch (@char)\n                                {\n                                    case -1:\n                                        state = State.End;\n                                        break;\n                                    case '{':\n                                        state = State.OnOpenBracket;\n                                        break;\n                                    case '}':\n                                        state = State.OnCloseBracket;\n                                        break;\n                                    default:\n                                        result.Append((char)@char);\n                                        break;\n                                }\n                                break;\n                            case State.OnOpenBracket:\n                                @char = reader.Read();\n                                switch (@char)\n                                {\n                                    case -1:\n                                        throw new FormatException();\n                                    case '{':\n                                        result.Append('{');\n                                        state = State.OutsideExpression;\n                                        break;\n                                    default:\n                                        expression.Append((char)@char);\n                                        state = State.InsideExpression;\n                                        break;\n                                }\n                                break;\n                            case State.InsideExpression:\n                                @char = reader.Read();\n                                switch (@char)\n                                {\n                                    case -1:\n                                        throw new FormatException();\n                                    case '}':\n                                        result.Append(OutExpression(source, expression.ToString()));\n                                        expression.Length = 0;\n                                        state = State.OutsideExpression;\n                                        break;\n                                    default:\n                                        expression.Append((char)@char);\n                                        break;\n                                }\n                                break;\n                            case State.OnCloseBracket:\n                                @char = reader.Read();\n                                switch (@char)\n                                {\n                                    case '}':\n                                        result.Append('}');\n                                        state = State.OutsideExpression;\n                                        break;\n                                    default:\n                                        throw new FormatException();\n                                }\n                                break;\n                            default:\n                                throw new InvalidOperationException(\"Invalid state.\");\n                        }\n                    } while (state != State.End);\n                }\n\n                return result.ToString();\n            }\n\n            private enum State\n            {\n                OutsideExpression,\n                OnOpenBracket,\n                InsideExpression,\n                OnCloseBracket,\n                End\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/Localization/ThreadSafeLocaleCache.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Threading;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Localization\n{\n    public class ThreadSafeLocaleCache : ILocaleCache\n    {\n        private readonly CultureInfo _culture;\n        private readonly IDictionary<LocalizationKey, string> _data;\n        private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();\n\n        public ThreadSafeLocaleCache(CultureInfo culture, IEnumerable<LocalString> strings)\n        {\n            _data = new Dictionary<LocalizationKey, string>();\n            strings.Each(s =>\n            {\n\t\t\t\tvar localizationKey = new LocalizationKey(s.value);\n\t\t\t\tif (_data.ContainsKey(localizationKey))\n\t\t\t\t{\n\t\t\t\t\tthrow new ArgumentException(\"Could not add localization key '{0}' to the cache as it already exists.\".ToFormat(s.value));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t_data.Add(localizationKey, s.display);\n            });\n\n            _culture = culture;\n        }\n\n        public ThreadSafeLocaleCache(CultureInfo culture, IDictionary<LocalizationKey, string> data)\n        {\n            _culture = culture;\n            _data = data;\n        }\n\n        public CultureInfo Culture { get { return _culture; } }\n\n        public void Append(LocalizationKey key, string value)\n        {\n            _lock.Write(() =>\n            {\n                if (_data.ContainsKey(key))\n                {\n                    _data[key] = value;\n                }\n                else\n                {\n                    _data.Add(key, value);\n                }\n            });\n        }\n\n        public string Retrieve(LocalizationKey key, Func<string> missing)\n        {\n            var text = initialRead(key);\n\n            if (text == null)\n            {\n                text = missing();\n                Append(key, text);\n            }\n\n            return text;\n        }\n\n        private string initialRead(LocalizationKey key)\n        {\n            return _lock.Read(() => !_data.ContainsKey(key) ? null : _data[key]);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/AddAfter.cs",
    "content": "using FubuCore;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public class AddAfter : IMenuPlacementStrategy\n    {\n        public string FormatDescription(string matcherDescription, StringToken nodeKey)\n        {\n            return \"Insert '{0}' after '{1}'\".ToFormat(nodeKey.ToLocalizationKey(), matcherDescription);\n        }\n\n        public void Apply(IMenuNode dependency, MenuNode node)\n        {\n            dependency.AddAfter(node);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/AddBefore.cs",
    "content": "using FubuCore;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public class AddBefore : IMenuPlacementStrategy\n    {\n        public string FormatDescription(string matcherDescription, StringToken nodeKey)\n        {\n            return \"Insert '{0}' before '{1}'\".ToFormat(nodeKey.ToLocalizationKey(), matcherDescription);\n        }\n\n        public void Apply(IMenuNode dependency, MenuNode node)\n        {\n            dependency.AddBefore(node);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/AddChild.cs",
    "content": "using FubuCore;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public class AddChild : IMenuPlacementStrategy\n    {\n        public string FormatDescription(string parent, StringToken key)\n        {\n            return \"Add '{0}' to menu '{1}'\".ToFormat(key.ToLocalizationKey(), parent);\n        }\n\n        public void Apply(IMenuNode dependency, MenuNode node)\n        {\n            dependency.AddChild(node);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/AuthorizedContextualMenu.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public class AuthorizedContextualMenu<T> : IContextualMenu<T>\n    {\n        private readonly IEndpointService _endpoints;\n        private readonly IEnumerable<IContextualAction<T>> _actions;\n\n        public AuthorizedContextualMenu(IEndpointService endpoints, IEnumerable<IContextualAction<T>> actions)\n        {\n            _endpoints = endpoints;\n            _actions = actions;\n        }\n\n        public MenuItemToken BuildMenuItem(T target, IContextualAction<T> definition)\n        {\n            var endpoint = definition.FindEndpoint(_endpoints, target);\n\n            var menuItemState = determineAvailability(target, endpoint, definition);\n\n            return new MenuItemToken{\n                Key = definition.Key,\n                MenuItemState = menuItemState,\n                Text = definition.Text(),\n\t\t\t\tCategory = definition.Category,\n\t\t\t\tDescription = definition.Description(),\n                Url = endpoint.Url\n            };\n        }\n\n        private static MenuItemState determineAvailability(T target, Endpoint endpoint, IContextualAction<T> definition)\n        {\n            var authorized = endpoint.IsAuthorized ? MenuItemState.Available : definition.UnauthorizedState;\n            var available = definition.IsAvailable(target);\n            return MenuItemState.Least(authorized, available);\n        }\n\n        public IEnumerable<MenuItemToken> MenuItemsFor(T target)\n        {\n            return _actions.Select(x => BuildMenuItem(target, x));\n        }\n\n        public IEnumerable<MenuItemToken> MenuItemsFor(T target, string category)\n        {\n            return _actions.Where(x => x.Category == category).Select(x => BuildMenuItem(target, x));\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/ByName.cs",
    "content": "using FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public class ByName : IStringTokenMatcher\n    {\n        private readonly string _name;\n\n        public ByName(string name)\n        {\n            _name = name;\n        }\n\n        public bool Matches(StringToken token)\n        {\n            return token.ToLocalizationKey().ToString() == _name || token.Key == _name;\n        }\n\n        public StringToken DefaultKey()\n        {\n            return new NavigationKey(_name);\n        }\n\n        public string Description\n        {\n            get { return ToString(); }\n        }\n\n        public bool Equals(ByName other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return Equals(other._name, _name);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (ByName)) return false;\n            return Equals((ByName) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (_name != null ? _name.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Match by name: {0}\", _name);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/IContextualAction.cs",
    "content": "﻿using FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public interface IContextualAction<in T>\n    {\n        string Key { get; }\n        string Category { get; }\n        MenuItemState UnauthorizedState { get; }\n        string Text();\n\t\tstring Description();\n        MenuItemState IsAvailable(T target);\n        Endpoint FindEndpoint(IEndpointService endpoints, T target);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/IContextualMenu.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Navigation\n{\n    \n\n    public interface IContextualMenu<T>\n    {\n        IEnumerable<MenuItemToken> MenuItemsFor(T target);\n        IEnumerable<MenuItemToken> MenuItemsFor(T target, string category);\n    }\n\n    public static class ContextualMenuExtensions\n    {\n        public static IEnumerable<MenuItemToken> MenuItemsFor<T>(this IContextualMenu<T> menu, T target,\n                                                                 StringToken name)\n        {\n            return menu.MenuItemsFor(target, name.Key);\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/IMenuPlacementStrategy.cs",
    "content": "using FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public interface IMenuPlacementStrategy\n    {\n        string FormatDescription(string matcherDescription, StringToken nodeKey);\n        void Apply(IMenuNode dependency, MenuNode node);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/IMenuRegistration.cs",
    "content": "using FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public interface IMenuRegistration\n    {\n        bool DependsOn(StringToken token);\n        string Description { get; }\n\n        StringToken Key { get; }\n\n        void Configure(NavigationGraph graph);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/IMenuStateService.cs",
    "content": "namespace FubuMVC.Core.Navigation\n{\n    public interface IMenuStateService\n    {\n        MenuItemState DetermineStateFor(MenuNode node);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/INavigationService.cs",
    "content": "using System.Collections.Generic;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public interface INavigationService\n    {\n        IEnumerable<MenuItemToken> MenuFor(StringToken key);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/IStringTokenMatcher.cs",
    "content": "using FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public interface IStringTokenMatcher\n    {\n        bool Matches(StringToken token);\n        StringToken DefaultKey();\n\n        string Description { get; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/Literal.cs",
    "content": "using FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public class Literal : IStringTokenMatcher\n    {\n        private readonly StringToken _token;\n\n        public Literal(StringToken token)\n        {\n            _token = token;\n        }\n\n        public bool Matches(StringToken token)\n        {\n            return _token.Equals(token);\n        }\n\n        public StringToken DefaultKey()\n        {\n            return _token;\n        }\n\n        public string Description\n        {\n            get { return ToString(); }\n        }\n\n        public bool Equals(Literal other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return Equals(other._token, _token);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (Literal)) return false;\n            return Equals((Literal) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (_token != null ? _token.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"By token: {0}\", _token.ToLocalizationKey().ToString());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/MenuChain.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public class MenuChain : Chain<MenuNode, MenuChain>, IMenuNode\n    {\n        private readonly StringToken _key;\n\n        public MenuChain(string title) : this(new NavigationKey(title))\n        {\n        }\n\n        public MenuChain(StringToken key)\n        {\n            _key = key;\n        }\n\n        public StringToken Key\n        {\n            get { return _key; }\n        }\n\n        void IMenuNode.AddChild(MenuNode node)\n        {\n            AddToEnd(node);\n        }\n\n        public IEnumerable<BehaviorChain> AllChains()\n        {\n            foreach (var node in AllNodes())\n            {\n                if (node.BehaviorChain != null)\n                {\n                    yield return node.BehaviorChain;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Find \n        /// </summary>\n        /// <param name=\"key\"></param>\n        /// <returns></returns>\n        public MenuNode FindByKey(StringToken key)\n        {\n            return AllNodes().FirstOrDefault(x => x.Key == key);\n        }\n\n        public IEnumerable<MenuNode> AllNodes()\n        {\n            foreach (var node in this)\n            {\n                yield return node;\n\n                foreach (var child in node.FindAllChildren())\n                {\n                    yield return child;\n                }\n            }\n        }\n\n        public override string ToString()\n        {\n            return \"MenuChain:  \" + _key.ToLocalizationKey();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/MenuItemAttribute.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuCore;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Navigation\n{\n    [AttributeUsage(AttributeTargets.Method)]\n    public class MenuItemAttribute : Attribute\n    {\n        private readonly StringToken _title;\n\n        public MenuItemAttribute(string title)\n        {\n            _title = new NavigationKey(title);\n        }\n\n        public MenuItemAttribute(string key, string defaultText)\n        {\n            _title = new NavigationKey(key, defaultText);\n        }\n\n        /// <summary>\n        /// Add this menu item to another menu item or node\n        /// </summary>\n        /// <example>\"Log Out\" or \"MyNavigationKey:LogOut\" if you need to refer to a StringToken</example>\n        public string AddChildTo { get; set; }\n\n        /// <summary>\n        /// Add this menu item after another menu item or node\n        /// </summary>\n        /// <example>\"Log Out\" or \"MyNavigationKey:LogOut\" if you need to refer to a StringToken</example>\n        public string AddAfter { get; set; }\n\n        /// <summary>\n        /// Add this menu item before another menu item or node\n        /// </summary>\n        /// <example>\"Log Out\" or \"MyNavigationKey:LogOut\" if you need to refer to a StringToken</example>\n        public string AddBefore { get; set; }\n\n        public IEnumerable<IMenuRegistration> ToMenuRegistrations(BehaviorChain chain)\n        {\n            if (AddChildTo.IsNotEmpty())\n            {\n                yield return new MenuRegistration(new AddChild() ,new ByName(AddChildTo), MenuNode.ForChain(Title, chain));\n            }\n\n            if (AddAfter.IsNotEmpty())\n            {\n                yield return new MenuRegistration(new AddAfter(),new ByName(AddAfter), MenuNode.ForChain(Title, chain));\n            }\n\n            if (AddBefore.IsNotEmpty())\n            {\n                yield return new MenuRegistration(new AddBefore(),new ByName(AddBefore), MenuNode.ForChain(Title, chain));\n            }\n        }\n\n        public StringToken Title\n        {\n            get { return _title; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/MenuItemAttributeConfigurator.cs",
    "content": "using System.Collections.Generic;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public class MenuItemAttributeConfigurator : IConfigurationAction\n    {\n        public void Configure(BehaviorGraph graph)\n        {\n            var navigationGraph = graph.Settings.Get<NavigationGraph>();\n            graph.Actions().Each(\n                action => action.ForAttributes<MenuItemAttribute>(att => Configure(action, att, navigationGraph)));\n        }\n\n        public void Configure(ActionCall action, MenuItemAttribute att, NavigationGraph graph)\n        {\n            var registrations = att.ToMenuRegistrations(action.ParentChain());\n            graph.AddRegistrations(registrations);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/MenuItemState.cs",
    "content": "﻿using System.Linq;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public class MenuItemState\n    {\n        public static MenuItemState Hidden = new MenuItemState(\"Hidden\", 0, false, false);\n        public static MenuItemState Disabled = new MenuItemState(\"Disabled\", 1, true, false);\n        public static MenuItemState Available = new MenuItemState(\"Available\", 2, true, true);\n        public static MenuItemState Active = new MenuItemState(\"Active\", 3, true, true);\n        private readonly string _name;\n        private readonly int _level;\n        private readonly bool _isShown;\n        private readonly bool _isEnabled;\n\n        private MenuItemState(string name, int level, bool isShown, bool isEnabled)\n        {\n            _name = name;\n            _level = level;\n            _isShown = isShown;\n            _isEnabled = isEnabled;\n        }\n\n        public bool IsShown\n        {\n            get { return _isShown; }\n        }\n\n        public bool IsEnabled\n        {\n            get { return _isEnabled; }\n        }\n\n        public string Name\n        {\n            get { return _name; }\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"MenuItemState: {0}\", _name);\n        }\n\n        public static MenuItemState Least(params MenuItemState[] states)\n        {\n            return states.OrderBy(x => x._level).FirstOrDefault() ?? Available;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/MenuItemToken.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Navigation\n{\n    [Serializable]\n    public class MenuItemToken\n    {\n        public MenuItemToken()\n        {\n            Url = string.Empty;\n            Children = new MenuItemToken[0];\n\t\t\tData = new Dictionary<string, object>();\n        }\n\n        public bool EnabledAndShown()\n        {\n            return MenuItemState.IsEnabled && MenuItemState.IsShown;\n        }\n\n        public MenuItemToken[] Children { get; set; }\n\n        public string Key { get; set; }\n        public string Text { get; set; }\n        public string Url { get; set; }\n\t\tpublic string Description { get; set; }\n\t\tpublic string Category { get; set; }\n        public MenuItemState MenuItemState { get; set; }\n\t\tpublic IDictionary<string, object> Data { get; set; } \n\n        public string IconUrl { get; set; }\n\n\t\tpublic void Set(string key, object value)\n\t\t{\n\t\t\tData.Add(key, value);\n\t\t}\n\n\t\tpublic void Value<T>(string key, Action<T> continuation)\n\t\t{\n\t\t\tif (!Has(key)) return;\n\n\t\t\tcontinuation(Get<T>(key));\n\t\t}\n\n\t\tpublic T Get<T>(string key)\n\t\t{\n\t\t\treturn Data.Get<T>(key);\n\t\t}\n\n\t\tpublic bool Has(string key)\n\t\t{\n\t\t\treturn Data.ContainsKey(key);\n\t\t}\n\n        public bool Equals(MenuItemToken other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return Equals(other.Key, Key) && Equals(other.Text, Text) && Equals(other.Url, Url) && Equals(other.MenuItemState, MenuItemState);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (MenuItemToken)) return false;\n            return Equals((MenuItemToken) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                int result = (Key != null ? Key.GetHashCode() : 0);\n                result = (result*397) ^ (Text != null ? Text.GetHashCode() : 0);\n                result = (result*397) ^ (Url != null ? Url.GetHashCode() : 0);\n                result = (result*397) ^ (MenuItemState != null ? MenuItemState.GetHashCode() : 0);\n                return result;\n            }\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Key: {0}, Text: {1}, Url: {2}, MenuItemState: {3} Description: {4}\", Key, Text, Url, MenuItemState, Description);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/MenuNode.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\nusing System.Runtime.CompilerServices;\nusing FubuCore;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.Runtime.Conditionals;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public interface IMenuNode : INode<MenuNode>\n    {\n        StringToken Key { get; }\n        void AddChild(MenuNode node);\n\n        IEnumerable<BehaviorChain> AllChains();\n        IEnumerable<MenuNode> AllNodes();\n    }\n\n    public class MenuNode : Node<MenuNode, MenuChain>, IMenuNode\n    {\n        private readonly Func<IChainResolver, BehaviorChain> _finder;\n        private readonly StringToken _key;\n        private readonly MenuNodeType _type;\n        private BehaviorChain _chain;\n        private Type _hideConditionalType = typeof (Never);\n        private string _icon;\n        private Type _isEnabledConditionType = typeof (Always);\n        private MenuItemState _unauthorizedState = MenuItemState.Hidden;\n\t    private readonly IDictionary<string, object> _data = new Dictionary<string, object>();\n\n        public MenuNode(StringToken key)\n        {\n            _key = key;\n            _type = MenuNodeType.Node;\n\n            Children = new MenuChain(key);\n        }\n\n        public MenuNode(StringToken key, Func<IChainResolver, BehaviorChain> finder)\n            : this(key)\n        {\n            _type = MenuNodeType.Leaf;\n            _finder = finder;\n        }\n\n        /// <summary>\n        ///   Sets what state this menu item would be if the authorization\n        ///   fails for the user.\n        /// </summary>\n        public MenuItemState UnauthorizedState\n        {\n            get { return _unauthorizedState ?? MenuItemState.Hidden; }\n            set { _unauthorizedState = value; }\n        }\n\n        public StringToken Key\n        {\n            get { return _key; }\n        }\n\n        public void AddChild(MenuNode node)\n        {\n            Children.AddToEnd(node);\n        }\n\n        public IEnumerable<BehaviorChain> AllChains()\n        {\n            if (_chain != null)\n            {\n                yield return _chain;\n            }\n\n            foreach (var child in Children)\n            {\n                if (child.BehaviorChain != null)\n                {\n                    yield return child.BehaviorChain;\n                }\n            }\n        }\n\n        public IEnumerable<MenuNode> AllNodes()\n        {\n            yield return this;\n\n            foreach (var child in Children)\n            {\n                yield return child;\n            }\n        }\n\n        public MenuNodeType Type\n        {\n            get { return _type; }\n        }\n\n        public Type HideIfConditional\n        {\n            get { return _hideConditionalType; }\n        }\n\n        public BehaviorChain BehaviorChain\n        {\n            get { return _chain; }\n        }\n\n        public object UrlInput { get; set; }\n\n        public MenuChain Children { get; private set; }\n\n\t\tpublic string Category { get; set; }\n\n        public MenuNode IsEnabledBy<T>() where T : IConditional\n        {\n            return IsEnabledBy(typeof (T));\n        }\n\n\t\t/// <summary>\n\t\t/// Apply key/value pairs\n\t\t/// </summary>\n\t\t/// <param name=\"key\"></param>\n\t\t/// <returns></returns>\n\t\t[IndexerName(\"Data\")]\n\t\tpublic object this[string key]\n\t\t{\n\t\t\tget { return _data[key]; }\n\t\t\tset { _data[key] = value; }\n\t\t}\n\n\t\tpublic T Get<T>(string key)\n\t\t{\n\t\t\treturn _data.Get<T>(key);\n\t\t}\n\n\n        public MenuNode IsEnabledBy(Type value)\n        {\n            if (!value.CanBeCastTo<IConditional>())\n            {\n                throw new ArgumentOutOfRangeException(\"Only types that implement IConditional may be used here\");\n            }\n\n            _isEnabledConditionType = value;\n\n            return this;\n        }\n\n        public MenuNode HideIf<T>() where T : IConditional\n        {\n            return HideIf(typeof (T));\n        }\n\n        public MenuNode HideIf(Type conditionalType)\n        {\n            if (!conditionalType.CanBeCastTo<IConditional>())\n            {\n                throw new ArgumentOutOfRangeException(\"Only types that implement IConditional may be used here\");\n            }\n\n            _hideConditionalType = conditionalType;\n\n            return this;\n        }\n\n\n        public Type IsEnabledBy()\n        {\n            return _isEnabledConditionType;\n        }\n\n        public void Resolve(IChainResolver resolver)\n        {\n            if (_finder == null) return;\n\n            _chain = _finder(resolver);\n\n\n            if (_chain == null)\n            {\n                throw new InvalidOperationException(\"Unable to find the requested behavior chain for menu \" + Key);\n            }\n        }\n\n        public IEnumerable<MenuNode> FindAllChildren()\n        {\n            foreach (var node in Children)\n            {\n                yield return node;\n\n                foreach (var child in node.FindAllChildren())\n                {\n                    yield return child;\n                }\n            }\n        }\n\n        public static MenuNode ForChain(string key, BehaviorChain chain)\n        {\n            return ForChain(new NavigationKey(key), chain);\n        }\n\n        public static MenuNode ForChain(StringToken key, BehaviorChain chain)\n        {\n            return new MenuNode(key, r => chain){\n                _chain = chain\n            };\n        }\n\n        public static MenuNode ForInput<T>(StringToken key, T input = null) where T : class\n        {\n            return new MenuNode(key, r => r.FindUniqueByType(typeof (T), category: \"GET\")){\n                UrlInput = input\n            };\n        }\n\n\t\tpublic static MenuNode ForInput<T>(StringToken key, Action<MenuNode> configure) where T : class\n\t\t{\n\t\t\tvar node = ForInput<T>(key);\n\t\t\tconfigure(node);\n\n\t\t\treturn node;\n\t\t}\n\n        public static MenuNode ForInput<T>(string title, T input = null) where T : class\n        {\n            return ForInput<T>(new NavigationKey(title), input: input);\n        }\n\n        public static MenuNode ForAction<T>(StringToken key, Expression<Action<T>> method)\n        {\n            return new MenuNode(key, r => r.Find(method, category: \"GET\"));\n        }\n\n\t\tpublic static MenuNode ForAction<T>(StringToken key, Expression<Action<T>> method, Action<MenuNode> configure)\n\t\t{\n\t\t\tvar node = ForAction(key, method);\n\t\t\tconfigure(node);\n\n\t\t\treturn node;\n\t\t}\n\n        public static MenuNode ForAction<T>(string title, Expression<Action<T>> method)\n        {\n            return ForAction(new NavigationKey(title), method);\n        }\n\n        public static MenuNode ForCreatorOf<T>(StringToken key)\n        {\n            var type = typeof (T);\n            return ForCreatorOf(key, type);\n        }\n\n        public static MenuNode ForCreatorOf(StringToken key, Type type)\n        {\n            return new MenuNode(key, r => r.FindCreatorOf(type));\n        }\n\n        public static MenuNode ForCreatorOf<T>(string key)\n        {\n            return ForCreatorOf<T>(new NavigationKey(key));\n        }\n\n        public static MenuNode ForCreatorOf(string key, Type type)\n        {\n            return ForCreatorOf(new NavigationKey(key), type);\n        }\n\n        public static MenuNode Node(StringToken key)\n        {\n            return new MenuNode(key);\n        }\n\n        public static MenuNode Node(string key)\n        {\n            return Node(new NavigationKey(key));\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"MenuNode: {0}\", _key);\n        }\n\n        public string Icon()\n        {\n            return _icon;\n        }\n\n        public MenuNode Icon(string icon)\n        {\n            _icon = icon;\n            return this;\n        }\n\n\t\tpublic void ForData(Action<string, object> action)\n\t\t{\n\t\t\t_data.Each((pair) => action(pair.Key, pair.Value));\n\t\t}\n\n\t    public bool Has(string key)\n\t    {\n\t\t    return _data.ContainsKey(key);\n\t    }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/MenuNodeType.cs",
    "content": "namespace FubuMVC.Core.Navigation\n{\n    public enum MenuNodeType\n    {\n        Leaf,\n        Node\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/MenuRegistration.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public class MenuRegistration : IMenuRegistration\n    {\n        private readonly IMenuPlacementStrategy _strategy;\n        private readonly IStringTokenMatcher _matcher;\n        private readonly MenuNode _node;\n\n        public MenuRegistration(IMenuPlacementStrategy strategy, IStringTokenMatcher matcher, MenuNode node)\n        {\n            _strategy = strategy;\n            _matcher = matcher;\n            _node = node;\n        }\n\n        public bool DependsOn(StringToken token)\n        {\n            return _matcher.Matches(token);\n        }\n\n        public string Description\n        {\n            get { return _strategy.FormatDescription(_matcher.Description, _node.Key); }\n        }\n\n        public StringToken Key\n        {\n            get { return _node.Key; }\n        }\n\n        public IMenuPlacementStrategy Strategy\n        {\n            get { return _strategy; }\n        }\n\n        public void Configure(NavigationGraph graph)\n        {\n            var dependency = graph.AllNodes().FirstOrDefault(node => _matcher.Matches(node.Key));\n            \n            // code was like this for debugging\n            if (dependency == null)\n            {\n                dependency = graph.MenuFor(_matcher.DefaultKey());\n            }\n\n            \n\n            _strategy.Apply(dependency, _node);\n        }\n\n        public IStringTokenMatcher Matcher\n        {\n            get { return _matcher; }\n        }\n\n        public MenuNode Node\n        {\n            get { return _node; }\n        }\n\n        public override string ToString()\n        {\n            return Description;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/MenuStateService.cs",
    "content": "using FubuMVC.Core.Http;\nusing FubuMVC.Core.Runtime.Conditionals;\nusing FubuMVC.Core.Security.Authorization;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public class MenuStateService : IMenuStateService\n    {\n        private readonly IChainAuthorizor _authorizor;\n        private readonly ICurrentChain _current;\n        private readonly IConditionalService _conditionals;\n\n        public MenuStateService(IChainAuthorizor authorizor, ICurrentChain current, IConditionalService conditionals)\n        {\n            _authorizor = authorizor;\n            _current = current;\n            _conditionals = conditionals;\n        }\n\n        public virtual MenuItemState DetermineStateFor(MenuNode node)\n        {\n            if (node.BehaviorChain == null)\n            {\n                return MenuItemState.Available;\n            }\n\n            var rights = _authorizor.Authorize(node.BehaviorChain, node.UrlInput);\n            if (rights != AuthorizationRight.Allow)\n            {\n                return node.UnauthorizedState;\n            }\n\n            if (_current.OriginatingChain == node.BehaviorChain)\n            {\n                return MenuItemState.Active;\n            }\n\n            if (_conditionals.IsTrue(node.HideIfConditional))\n            {\n                return MenuItemState.Hidden;\n            }\n\n            if (_conditionals.IsTrue(node.IsEnabledBy()))\n            {\n                return MenuItemState.Available;\n            }\n\n            return MenuItemState.Disabled;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/NavigationGraph.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.DependencyAnalysis;\nusing FubuCore.Util;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Registration.Querying;\n\nnamespace FubuMVC.Core.Navigation\n{\n    \n    public interface IMenuResolver\n    {\n        MenuChain MenuFor(StringToken key);\n    }\n\n    public class MenuResolverCache : IMenuResolver\n    {\n        private readonly Lazy<NavigationGraph> _inner; \n\n        public MenuResolverCache(IChainResolver resolver, NavigationGraph graph)\n        {\n            _inner = new Lazy<NavigationGraph>(() => {\n                graph.Compile();\n                graph.AllNodes().OfType<MenuNode>().Each(x =>\n                {\n                    try\n                    {\n                        x.Resolve(resolver);\n                    }\n                    catch (Exception ex)\n                    {\n                        throw new FubuException(4001, ex, \"Failed to resolve a BehaviorChain for navigation element \" + x.Key);\n                    }\n\n                });\n\n                return graph;\n            });\n        }\n\n        public MenuChain MenuFor(StringToken key)\n        {\n            return _inner.Value.MenuFor(key);\n        }\n    }\n\n    public class NavigationGraph\n    {\n        private readonly Cache<StringToken, MenuChain> _chains = new Cache<StringToken, MenuChain>(key => new MenuChain(key));\n\n        private readonly IList<IMenuRegistration> _registrations = new List<IMenuRegistration>();\n\n        public NavigationGraph()\n        {\n        }\n\n        public NavigationGraph(Action<NavigationRegistry> configure)\n        {\n            var registry = new NavigationRegistry();\n            configure(registry);\n\n            registry.Configure(this);\n        }\n\n        public void AddRegistration(IMenuRegistration registration)\n        {\n            _registrations.Add(registration);\n        }\n\n        public void Compile()\n        {\n            Func<IMenuRegistration, IEnumerable<string>> dependencyFinder = r =>\n            {\n                return _registrations.Where(x => r.DependsOn(x.Key)).Select(x => x.Description);\n            };\n\n            var graph = new DependencyGraph<IMenuRegistration>(r => r.Description, dependencyFinder);\n            _registrations.Each(graph.RegisterItem);\n            \n            graph.Ordered().Each(x =>\n            {\n                x.Configure(this);\n            });\n\n            _registrations.Clear();\n        }\n\n        public IMenuNode FindNode(StringToken key)\n        {\n            return AllNodes().FirstOrDefault(x => x.Key.Equals(key));\n        }\n\n        public MenuChain MenuFor(StringToken key)\n        {\n            return _chains[key];\n        }\n\n        public IEnumerable<IMenuNode> AllNodes()\n        {\n            foreach (var chain in _chains)\n            {\n                yield return chain;\n\n                foreach (var node in chain.AllNodes())\n                {\n                    yield return node;\n                }\n            }\n        }\n\n        public IEnumerable<MenuChain> AllMenus()\n        {\n            return _chains;\n        }\n\n        public MenuChain MenuFor(string key)\n        {\n            return MenuFor(new NavigationKey(key));\n        }\n\n        public void AddRegistrations(IEnumerable<IMenuRegistration> registrations)\n        {\n            _registrations.AddRange(registrations);\n        }\n\n        public void AddChildNode(StringToken parent, MenuNode node)\n        {\n            var registration = new MenuRegistration(new AddChild(), new Literal(parent), node);\n            _registrations.Add(registration);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/NavigationKey.cs",
    "content": "using FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public class NavigationKey : StringToken\n    {\n        public NavigationKey(string text) : base(text, text, namespaceByType:true)\n        {\n        }\n\n        public NavigationKey(string key, string defaultText) : base(key, defaultText, namespaceByType:true)\n        {\n            \n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/NavigationRegistry.cs",
    "content": "using System.Collections.Generic;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public class NavigationRegistry : IConfigurationAction\n    {\n        private readonly IList<IMenuRegistration> _registrations = new List<IMenuRegistration>();\n        private StringToken _lastKey;\n\n        public void Configure(BehaviorGraph graph)\n        {\n            graph.Settings.Alter<NavigationGraph>(Configure);\n        }\n\n        internal void Configure(NavigationGraph graph)\n        {\n            graph.AddRegistrations(_registrations);\n        }\n\n        public AddExpression ForMenu(string title)\n        {\n            return ForMenu(new NavigationKey(title));\n        }\n\n        public AddExpression ForMenu(StringToken key)\n        {\n            _lastKey = key;\n\n            return new AddExpression(this);\n        }\n\n        public AddExpression Add\n        {\n            get\n            {\n                return new AddExpression(this);\n            }\n            set\n            {\n                // do nothing\n            }\n        }\n\n        public InsertAfterExpression InsertAfter\n        {\n            get\n            {\n                return new InsertAfterExpression(this);\n            }\n        }\n\n        public InsertBeforeExpression InsertBefore\n        {\n            get\n            {\n                return new InsertBeforeExpression(this);\n            }\n        }\n\n\n\n        public class AddExpression\n        {\n            private readonly NavigationRegistry _parent;\n\n            public AddExpression(NavigationRegistry parent)\n            {\n                _parent = parent;\n            }\n\n            public static AddExpression operator +(AddExpression original, MenuNode node)\n            {\n                original._parent.addToLastKey(node);\n\n                return original;\n            }\n        }\n\n        public class InsertBeforeExpression\n        {\n            private readonly NavigationRegistry _registry;\n\n            public InsertBeforeExpression(NavigationRegistry registry)\n            {\n                _registry = registry;\n            }\n\n            public MenuNode this[StringToken parentKey]\n            {\n                set\n                {\n                    var registration = new MenuRegistration(new AddBefore(), new Literal(parentKey), value);\n                    _registry._registrations.Add(registration);\n                }\n            }\n\n            public MenuNode this[string parentKey]\n            {\n                set\n                {\n                    var registration = new MenuRegistration(new AddBefore(), new ByName(parentKey), value);\n                    _registry._registrations.Add(registration);\n                }\n            }\n        }\n\n        public class InsertAfterExpression\n        {\n            private readonly NavigationRegistry _registry;\n\n            public InsertAfterExpression(NavigationRegistry registry)\n            {\n                _registry = registry;\n            }\n\n            public MenuNode this[StringToken parentKey]\n            {\n                set\n                {\n                    var registration = new MenuRegistration(new AddAfter(), new Literal(parentKey), value);\n                    _registry._registrations.Add(registration);\n                }\n            }\n\n            public MenuNode this[string parentKey]\n            {\n                set\n                {\n                    var registration = new MenuRegistration(new AddAfter(), new ByName(parentKey), value);\n                    _registry._registrations.Add(registration);\n                }\n            }\n        }\n\n        private void addToLastKey(MenuNode node)\n        {\n            var key = _lastKey;\n            _registrations.Add(new MenuRegistration(new AddChild(), new Literal(key), node));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/NavigationRegistryExtension.cs",
    "content": "﻿namespace FubuMVC.Core.Navigation\n{\n    public class NavigationRegistryExtension : IFubuRegistryExtension\n    {\n        public void Configure(FubuRegistry registry)\n        {\n            registry.Policies.Global.Add<MenuItemAttributeConfigurator>();\n\n            registry.Services.IncludeRegistry<NavigationServiceRegistry>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/NavigationService.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Assets;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Urls;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public class NavigationService : INavigationService\n    {\n\t    private readonly IChainUrlResolver _urlResolver;\n        private readonly IMenuStateService _stateService;\n        private readonly IAssetTagBuilder _urls;\n\n        private readonly IMenuResolver _navigation;\n\n        public NavigationService(IMenuResolver navigation, IChainUrlResolver urlResolver, IMenuStateService stateService, IAssetTagBuilder urls)\n\t\t{\n            _navigation = navigation;\n            _urlResolver = urlResolver;\n            _stateService = stateService;\n            _urls = urls;\n        }\n\n        public IEnumerable<MenuItemToken> MenuFor(StringToken key)\n        {\n            var chain = _navigation.MenuFor(key);\n            return chain.Select(BuildToken);\n        }\n\n\n        // TODO -- this could really use some more end to end testing\n        public MenuItemToken BuildToken(MenuNode node)\n        {\n            var token = new MenuItemToken {\n                Children = node.Children.Select(BuildToken).ToArray(),\n                Key = node.Key.Key,\n                Text = node.Key.ToString(),\n                Category = node.Category,\n                MenuItemState = _stateService.DetermineStateFor(node)\n            };\n\n            if (node.Icon().IsNotEmpty())\n            {\n                token.IconUrl = _urls.FindImageUrl(node.Icon());\n            }\n\n            if (node.Type == MenuNodeType.Leaf)\n            {\n\t            token.Url = _urlResolver.UrlFor(node.UrlInput, node.BehaviorChain);\n            }\n\n\t\t\tnode.ForData(token.Set);\n\n            return token;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Navigation/NavigationServiceRegistry.cs",
    "content": "using FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.Navigation\n{\n    public class NavigationServiceRegistry : ServiceRegistry\n    {\n        public NavigationServiceRegistry()\n        {\n            SetServiceIfNone<INavigationService, NavigationService>();\n            SetServiceIfNone<IMenuStateService, MenuStateService>();\n            SetServiceIfNone<IMenuResolver, MenuResolverCache>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/AccessorProjection.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq.Expressions;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Urls;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public interface IAccessorProjection\r\n    {\r\n        void ApplyNaming(IAccessorNaming naming);\r\n    }\r\n\r\n    public class AccessorProjection<T, TValue> : IProjection<T>, IAccessorProjection\r\n    {\r\n        private readonly Accessor _accessor;\r\n        private ISingleValueProjection<T> _inner;\r\n\r\n        public AccessorProjection(Accessor accessor)\r\n        {\r\n            _accessor = accessor;\r\n\r\n            if (typeof(TValue).CanBeCastTo<IProjectMyself>())\r\n            {\r\n                _inner = typeof (SelfProjectingValueProjector<,>)\r\n                    .CloseAndBuildAs<ISingleValueProjection<T>>(accessor, typeof (T), typeof (TValue));\r\n            }\r\n            else\r\n            {\r\n                _inner = new SingleValueProjection<T>(_accessor.Name, c => c.Values.ValueFor(_accessor));\r\n            }\r\n        }\r\n\r\n        void IAccessorProjection.ApplyNaming(IAccessorNaming naming)\r\n        {\r\n            _inner.AttributeName = naming.Name(_accessor);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Use an IValueProjector strategy to override how the projection is done for a complex object\r\n        /// </summary>\r\n        /// <typeparam name=\"TProjector\"></typeparam>\r\n        /// <returns></returns>\r\n        public AccessorProjection<T, TValue> ProjectWith<TProjector>() where TProjector : IValueProjector<TValue>, new()\r\n        {\r\n            return ProjectWith(new TProjector());\r\n        } \r\n\r\n        /// <summary>\r\n        /// Use an IValueProjector strategy to override how the projection is performed for a complex object\r\n        /// </summary>\r\n        /// <param name=\"projector\"></param>\r\n        /// <returns></returns>\r\n        public AccessorProjection<T, TValue> ProjectWith(IValueProjector<TValue> projector)\r\n        {\r\n            _inner = new ExternallyFormattedValueProjector<T, TValue>(_accessor, projector)\r\n            {\r\n                AttributeName = Name()\r\n            };\r\n\r\n            return this;\r\n\r\n        } \r\n\r\n        /// <summary>\r\n        /// Helper method to build AccessorProjection objects individually\r\n        /// </summary>\r\n        /// <param name=\"expression\"></param>\r\n        /// <returns></returns>\r\n        public static AccessorProjection<T, TValue> For(Expression<Func<T, TValue>> expression)\r\n        {\r\n            return new AccessorProjection<T, TValue>(ReflectionHelper.GetAccessor(expression));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Overrides the attribute name in the projection for this accessor\r\n        /// </summary>\r\n        /// <param name=\"value\"></param>\r\n        /// <returns></returns>\r\n        public AccessorProjection<T, TValue> Name(string value)\r\n        {\r\n            _inner.AttributeName = value;\r\n            return this;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Applies the IDisplayFormatter formatting to this individual \r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public AccessorProjection<T, TValue> Formatted()\r\n        {\r\n            _inner = new SingleValueProjection<T>(_inner.AttributeName, context => context.FormattedValueOf(_accessor));\r\n\r\n            return this;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Use a Func to transform the property value to another value in the projection\r\n        /// </summary>\r\n        /// <param name=\"formatting\"></param>\r\n        /// <returns></returns>\r\n        public AccessorProjection<T, TValue> FormattedBy(Func<TValue, object> formatting)\r\n        {\r\n            _inner = new SingleValueProjection<T>(_inner.AttributeName, context =>\r\n            {\r\n                var raw = context.Values.ValueFor(_accessor);\r\n                if (raw == null)\r\n                {\r\n                    return null;\r\n                }\r\n\r\n                return formatting((TValue)raw);\r\n            });\r\n\r\n            return this;\r\n        }\r\n\r\n        /// <summary>\r\n        /// \r\n        /// </summary>\r\n        /// <param name=\"inputBuilder\"></param>\r\n        /// <returns></returns>\r\n        public AccessorProjection<T, TValue> WriteUrlFor(Func<TValue, object> inputBuilder)\r\n        {\r\n            return WriteUrlFor((urls, value) =>\r\n            {\r\n                var inputModel = inputBuilder(value);\r\n                return urls.UrlFor(inputModel);\r\n            });\r\n        }\r\n\r\n        /// <summary>\r\n        /// Writes the Url that accesses the value of this accessor as the input\r\n        /// </summary>\r\n        /// <param name=\"urlFinder\"></param>\r\n        /// <returns></returns>\r\n        public AccessorProjection<T, TValue> WriteUrlFor(Func<IUrlRegistry, TValue, string> urlFinder)\r\n        {\r\n            _inner = new SingleValueProjection<T>(_inner.AttributeName, context =>\r\n            {\r\n                var raw = context.Values.ValueFor(_accessor);\r\n                if (raw == null)\r\n                {\r\n                    return string.Empty;\r\n                }\r\n\r\n                return urlFinder(context.Urls, (TValue)raw);\r\n            });\r\n\r\n            return this;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Retrieve the attribute name used in the projection\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public string Name()\r\n        {\r\n            return _inner.AttributeName;\r\n        }\r\n\r\n        void IProjection<T>.Write(IProjectionContext<T> context, IMediaNode node)\r\n        {\r\n            _inner.Write(context, node);\r\n        }\r\n\r\n        IEnumerable<Accessor> IProjection<T>.Accessors()\r\n        {\r\n            yield return _accessor;\r\n        }\r\n    }\r\n\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/AdaptiveAccessorProjection.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Http;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public class AdaptiveAccessorProjection<T> : IProjection<T>, IAccessorProjection\r\n    {\r\n        private readonly Accessor _accessor;\r\n        private string _name;\r\n\r\n        public AdaptiveAccessorProjection(Accessor accessor)\r\n        {\r\n            _accessor = accessor;\r\n            _name = _accessor.Name;\r\n        }\r\n\r\n        public void Write(IProjectionContext<T> context, IMediaNode node)\r\n        {\r\n            var value = context.Values.ValueFor(_accessor);\r\n            if (value == null)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var childNode = node.AddChild(_name);\r\n            var runner = typeof (ChildRunner<>).CloseAndBuildAs<IChildRunner>(value, value.GetType());\r\n            runner.Project(context, childNode, node, _name);\r\n\r\n        }\r\n\r\n        public IEnumerable<Accessor> Accessors()\r\n        {\r\n            yield return _accessor;\r\n        }\r\n\r\n        void IAccessorProjection.ApplyNaming(IAccessorNaming naming)\r\n        {\r\n            _name = naming.Name(_accessor);\r\n        }\r\n\r\n        public AdaptiveAccessorProjection<T> Name(string name)\r\n        {\r\n            _name = name;\r\n            return this;\r\n        }\r\n\r\n\r\n    }\r\n\r\n    public interface IChildRunner\r\n    {\r\n        void Project<T>(IProjectionContext<T> context, IMediaNode childNode, IMediaNode parentNode, string nodeName);\r\n    }\r\n\r\n    public class ChildRunner<TValue> : IChildRunner\r\n    {\r\n        private readonly TValue _value;\r\n\r\n        public ChildRunner(TValue value)\r\n        {\r\n            _value = value;\r\n        }\r\n\r\n        public void Project<T>(IProjectionContext<T> context, IMediaNode childNode, IMediaNode parentNode, string nodeName)\r\n        {\r\n            var connegGraph = context.Service<ConnegSettings>().Graph;\r\n            var projectionType = connegGraph.WriterTypesFor(typeof (TValue))\r\n                .FirstOrDefault(x => x.CanBeCastTo<IProjection<TValue>>() && x.IsConcreteWithDefaultCtor());\r\n\r\n            var childContext = context.ContextFor(_value);\r\n\r\n            if (projectionType == null)\r\n            {\r\n                parentNode.SetAttribute(nodeName, _value);\r\n            }\r\n            else\r\n            {\r\n                var projection = Activator.CreateInstance(projectionType).As<IProjection<TValue>>();\r\n                projection.Write(childContext, childNode);\r\n            }\r\n\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/ChildProjection.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq.Expressions;\r\nusing FubuCore.Reflection;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public class ChildProjection<TParent, TChild> : Projection<TChild>, IProjection<TParent>, IAccessorProjection where TChild : class\r\n    {\r\n        private readonly Accessor _accessor;\r\n        private string _name;\r\n        private readonly Func<IProjectionContext<TParent>, TChild> _source;\r\n\r\n        public ChildProjection(string name, Func<IProjectionContext<TParent>, TChild> source, DisplayFormatting formatting)\r\n            : base(formatting)\r\n        {\r\n            _source = source;\r\n            _name = name;\r\n        }\r\n\r\n        public ChildProjection(Expression<Func<TParent, TChild>> expression, DisplayFormatting formatting)\r\n            : base(formatting)\r\n        {\r\n            _accessor = ReflectionHelper.GetAccessor(expression);\r\n            _source = c => c.Values.ValueFor(_accessor) as TChild;\r\n            _name = _accessor.Name;\r\n        }\r\n\r\n        void IAccessorProjection.ApplyNaming(IAccessorNaming naming)\r\n        {\r\n            _name = naming.Name(_accessor);\r\n            Naming = naming;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Replace the node name in the projected values for this nested child\r\n        /// </summary>\r\n        /// <param name=\"name\"></param>\r\n        /// <returns></returns>\r\n        public ChildProjection<TParent, TChild> Name(string name)\r\n        {\r\n            _name = name;\r\n            return this;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Define a projection inline for the TChild object\r\n        /// </summary>\r\n        /// <param name=\"configuration\"></param>\r\n        /// <returns></returns>\r\n        public ChildProjection<TParent, TChild> Configure(Action<Projection<TChild>> configuration)\r\n        {\r\n            configuration(this);\r\n            return this;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Explicit mapping of the TChild objects into the media structure.  This is the anything goes, last resort option\r\n        /// </summary>\r\n        /// <param name=\"explicitWriting\"></param>\r\n        /// <returns></returns>\r\n        public ChildProjection<TParent, TChild> With(Action<IProjectionContext<TChild>, IMediaNode> explicitWriting)\r\n        {\r\n            return Configure(x => x.WriteWith(explicitWriting));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Mix in a predefined projection for TChild.  Use this to either reuse a projection or to break up complex\r\n        /// nested definitions\r\n        /// </summary>\r\n        /// <typeparam name=\"TProjection\"></typeparam>\r\n        /// <returns></returns>\r\n        public ChildProjection<TParent, TChild> With<TProjection>() where TProjection : IProjection<TChild>, new()\r\n        {\r\n            Include<TProjection>();\r\n            return this;\r\n        }\r\n\r\n        IEnumerable<Accessor> IProjection<TParent>.Accessors()\r\n        {\r\n            if (_accessor != null) yield return _accessor;\r\n        }\r\n\r\n        void IProjection<TParent>.Write(IProjectionContext<TParent> context, IMediaNode node)\r\n        {\r\n            var value = _source(context);\r\n            if (value == null) return;\r\n\r\n            var childNode = node.AddChild(_name);\r\n\r\n            var childContext = context.ContextFor(value);\r\n\r\n            write(childContext, childNode);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/DelegatingProjection.cs",
    "content": "using System.Collections.Generic;\r\nusing FubuCore.Reflection;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    /// <summary>\r\n    /// Used internally.\r\n    /// </summary>\r\n    /// <typeparam name=\"T\"></typeparam>\r\n    /// <typeparam name=\"TProjection\"></typeparam>\r\n    public class DelegatingProjection<T, TProjection> : IProjection<T> where TProjection : IProjection<T>, new()\r\n    {\r\n        public void Write(IProjectionContext<T> context, IMediaNode node)\r\n        {\r\n            new TProjection().Write(context, node);\r\n        }\r\n\r\n        public IEnumerable<Accessor> Accessors()\r\n        {\r\n            return new TProjection().Accessors();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/DictionaryMediaNode.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing FubuMVC.Core.Resources.Hypermedia;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public class DictionaryMediaNode : IMediaNode\r\n    {\r\n        private readonly IDictionary<string, object> _values;\r\n\r\n        public DictionaryMediaNode()\r\n            : this(new Dictionary<string, object>())\r\n        {\r\n        }\r\n\r\n        public DictionaryMediaNode(IDictionary<string, object> values)\r\n        {\r\n            _values = values;\r\n        }\r\n\r\n        public IDictionary<string, object> Values\r\n        {\r\n            get { return _values; }\r\n        }\r\n\r\n        public IMediaNode AddChild(string name)\r\n        {\r\n            var dictionary = new Dictionary<string, object>();\r\n            SetAttribute(name, dictionary);\r\n\r\n            return new DictionaryMediaNode(dictionary);\r\n        }\r\n\r\n        public void SetAttribute(string name, object value)\r\n        {\r\n            if (_values.ContainsKey(name))\r\n            {\r\n                _values[name] = value;\r\n            }\r\n            else\r\n            {\r\n                _values.Add(name, value);\r\n            }\r\n        }\r\n\r\n        public void WriteLinks(IEnumerable<Link> links)\r\n        {\r\n            throw new NotSupportedException();\r\n        }\r\n\r\n        public IMediaNodeList AddList(string nodeName, string leafName)\r\n        {\r\n            var list = new DictionaryMediaNodeList();\r\n            SetAttribute(nodeName, list.List);\r\n\r\n            return list;\r\n        }\r\n\r\n        public static IDictionary<string, object> Write(Action<IMediaNode> configuration)\r\n        {\r\n            var node = new DictionaryMediaNode();\r\n            configuration(node);\r\n\r\n            return node.Values;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/DictionaryMediaNodeList.cs",
    "content": "using System.Collections.Generic;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public class DictionaryMediaNodeList : IMediaNodeList\r\n    {\r\n        private readonly IList<IDictionary<string, object>> _list;\r\n\r\n        public DictionaryMediaNodeList() : this(new List<IDictionary<string, object>>())\r\n        {\r\n        }\r\n\r\n        public DictionaryMediaNodeList(IList<IDictionary<string, object>> list)\r\n        {\r\n            _list = list;\r\n        }\r\n\r\n        public IList<IDictionary<string, object>> List\r\n        {\r\n            get { return _list; }\r\n        }\r\n\r\n        public IMediaNode Add()\r\n        {\r\n            var node = new DictionaryMediaNode();\r\n            _list.Add(node.Values);\r\n\r\n            return node;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/DisplayFormatting.cs",
    "content": "namespace FubuMVC.Core.Projections\r\n{\r\n    public enum DisplayFormatting\r\n    {\r\n        UseDisplayFormatting,\r\n        RawValues\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/EnumerableProjection.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq.Expressions;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n\r\n    public class EnumerableProjection<TParent, TChild> : IProjection<TParent>\r\n    {\r\n        public Func<IProjectionContext<TParent>, IProjection<TChild>> ProjectionSource;\r\n        public Func<IProjectionContext<TParent>, IEnumerable<TChild>> ElementSource;\r\n        public string NodeName;\r\n        public string LeafName = typeof(TChild).Name;\r\n\r\n        public static EnumerableProjection<TParent, TChild> For(Expression<Func<TParent, IEnumerable<TChild>>> expression)\r\n        {\r\n            var accessor = ReflectionHelper.GetAccessor(expression);\r\n\r\n            return new EnumerableProjection<TParent, TChild>\r\n            {\r\n                ElementSource = c => c.Values.ValueFor(accessor).As<IEnumerable<TChild>>(),\r\n                NodeName = accessor.Name,\r\n                Accessor = accessor\r\n            };\r\n        }\r\n\r\n        public Accessor Accessor { get; set; }\r\n\r\n        IEnumerable<Accessor> IProjection<TParent>.Accessors()\r\n        {\r\n            yield return Accessor;\r\n        }\r\n\r\n        public void UseProjection<TProjection>() where TProjection : IProjection<TChild>, new()\r\n        {\r\n            ProjectionSource = c => new TProjection();\r\n        }\r\n\r\n        public void DefineProjection(Action<Projection<TChild>> configure)\r\n        {\r\n            ProjectionSource = c =>\r\n            {\r\n                var projection = new Projection<TChild>(DisplayFormatting.RawValues);\r\n                configure(projection);\r\n\r\n                return projection;\r\n            };\r\n        }\r\n\r\n        public void Write(IProjectionContext<TParent> context, IMediaNode node)\r\n        {\r\n            var list = node.AddList(NodeName, LeafName ?? NodeName);\r\n            var elements = ElementSource(context);\r\n\r\n            var projection = ProjectionSource(context);\r\n            elements.Each(element =>\r\n            {\r\n                var childNode = list.Add();\r\n                var childContext = context.ContextFor(element);\r\n                projection.Write(childContext, childNode);\r\n            });\r\n        }\r\n\r\n\r\n\r\n\r\n    }\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/ExternallyFormattedValueProjector.cs",
    "content": "using System.Collections.Generic;\r\nusing FubuCore.Reflection;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    /// <summary>\r\n    /// Used internally\r\n    /// </summary>\r\n    /// <typeparam name=\"TParent\"></typeparam>\r\n    /// <typeparam name=\"T\"></typeparam>\r\n    public class ExternallyFormattedValueProjector<TParent, T> : ISingleValueProjection<TParent>\r\n    {\r\n        private readonly Accessor _accessor;\r\n        private readonly IValueProjector<T> _projector;\r\n\r\n        public ExternallyFormattedValueProjector(Accessor accessor, IValueProjector<T> projector)\r\n        {\r\n            _accessor = accessor;\r\n            _projector = projector;\r\n            AttributeName = _accessor.Name;\r\n        }\r\n\r\n        public void Write(IProjectionContext<TParent> context, IMediaNode node)\r\n        {\r\n            var value = context.Values.ValueFor(_accessor);\r\n            if (value != null)\r\n            {\r\n                _projector.Project(AttributeName, (T)value, node);\r\n            }\r\n        }\r\n\r\n        public string AttributeName { get; set; }\r\n\r\n        IEnumerable<Accessor> IProjection<TParent>.Accessors()\r\n        {\r\n            yield return _accessor;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/IMediaNode.cs",
    "content": "using System.Collections.Generic;\r\nusing FubuMVC.Core.Resources.Hypermedia;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public interface IMediaNode\r\n    {\r\n        IMediaNode AddChild(string name);\r\n        void SetAttribute(string name, object value);\r\n\r\n        void WriteLinks(IEnumerable<Link> links);\r\n            \r\n        IMediaNodeList AddList(string nodeName, string leafName);\r\n    }\r\n\r\n    public static class MediaNodeExtensions\r\n    {\r\n        public static IMediaNodeList AddList(this IMediaNode node, string name)\r\n        {\r\n            return node.AddList(name, name);\r\n        }\r\n    }\r\n\r\n    public interface IMediaNodeList\r\n    {\r\n        IMediaNode Add();\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/IProjectMyself.cs",
    "content": "﻿namespace FubuMVC.Core.Projections\r\n{\r\n    /// <summary>\r\n    /// Used to make a DTO class type control its own projection for\r\n    /// \"special\" one off type behavior\r\n    /// </summary>\r\n    public interface IProjectMyself\r\n    {\r\n        void Project(string attributeName, IMediaNode node);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/IProjection.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Resources.Conneg;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public interface IProjection<T>\r\n    {\r\n        void Write(IProjectionContext<T> context, IMediaNode node);\r\n\r\n        IEnumerable<Accessor> Accessors();\r\n    }\r\n\r\n    public class LambdaProjection<T> : IProjection<T>\r\n    {\r\n        private readonly Action<IProjectionContext<T>, IMediaNode> _writer;\r\n\r\n        public LambdaProjection(Action<IProjectionContext<T>, IMediaNode> writer)\r\n        {\r\n            _writer = writer;\r\n        }\r\n\r\n        public void Write(IProjectionContext<T> context, IMediaNode node)\r\n        {\r\n            _writer(context, node);\r\n        }\r\n\r\n        public IEnumerable<Accessor> Accessors()\r\n        {\r\n            yield break;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/IProjectionContext.cs",
    "content": "using FubuCore.Formatting;\r\nusing FubuMVC.Core.Urls;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public interface IProjectionContext<T>\r\n    {\r\n        /// <summary>\r\n        /// Access to the underlying service locator of the running application\r\n        /// </summary>\r\n        /// <typeparam name=\"TService\"></typeparam>\r\n        /// <returns></returns>\r\n        TService Service<TService>();\r\n        IUrlRegistry Urls { get; }\r\n        IDisplayFormatter Formatter { get; }\r\n\r\n        IProjectionContext<TChild> ContextFor<TChild>(TChild child);\r\n\r\n        IValues<T> Values { get; }\r\n        T Subject { get; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/IProjectionRunner.cs",
    "content": "using System.Collections.Generic;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public interface IProjectionRunner\r\n    {\r\n        void Run<T>(IProjection<T> projection, T subject, IMediaNode node);\r\n        void Run<T, TProjection>(T subject, IMediaNode node) where TProjection : IProjection<T>;\r\n        void Run<T>(IProjection<T> projection, IValues<T> values, IMediaNode node);\r\n        void Run<T, TProjection>(IValues<T> values, IMediaNode node) where TProjection : IProjection<T>;\r\n    }\r\n\r\n    public class ProjectionRunner : IProjectionRunner\r\n    {\r\n        private readonly IServiceLocator _services;\r\n\r\n        public ProjectionRunner(IServiceLocator services)\r\n        {\r\n            _services = services;\r\n        }\r\n\r\n        public void Run<T>(IProjection<T> projection, T subject, IMediaNode node)\r\n        {\r\n            Run(projection, new SimpleValues<T>(subject), node);\r\n        }\r\n\r\n        public void Run<T, TProjection>(T subject, IMediaNode node) where TProjection : IProjection<T>\r\n        {\r\n            var projection = _services.GetInstance<TProjection>();\r\n            Run(projection, subject, node);\r\n        }\r\n\r\n        public void Run<T>(IProjection<T> projection, IValues<T> values, IMediaNode node)\r\n        {\r\n            var context = new ProjectionContext<T>(_services, values);\r\n            projection.Write(context, node);\r\n        }\r\n\r\n        public void Run<T, TProjection>(IValues<T> values, IMediaNode node) where TProjection : IProjection<T>\r\n        {\r\n            var projection = _services.GetInstance<TProjection>();\r\n            Run(projection, values, node);\r\n        }\r\n    }\r\n\r\n    public interface IProjectionRunner<T>\r\n    {\r\n        void Run(IProjection<T> projection, T subject, IMediaNode node);\r\n        void Run<TProjection>(T subject, IMediaNode node) where TProjection : IProjection<T>;\r\n        void Run(IProjection<T> projection, IValues<T> values, IMediaNode node);\r\n        void Run<TProjection>(IValues<T> values, IMediaNode node) where TProjection : IProjection<T>;\r\n\r\n        IDictionary<string, object> ProjectToJson(IProjection<T> projection, IValues<T> values);\r\n        IDictionary<string, object> ProjectToJson<TProjection>(IValues<T> values) where TProjection : IProjection<T>;\r\n        IDictionary<string, object> ProjectToJson<TProjection>(T subject) where TProjection : IProjection<T>;\r\n    }\r\n\r\n    public class ProjectionRunner<T> : IProjectionRunner<T>\r\n    {\r\n        private readonly IProjectionRunner _runner;\r\n\r\n        public ProjectionRunner(IProjectionRunner runner)\r\n        {\r\n            _runner = runner;\r\n        }\r\n\r\n        public void Run(IProjection<T> projection, T subject, IMediaNode node)\r\n        {\r\n            _runner.Run(projection, subject, node);\r\n        }\r\n\r\n        public void Run<TProjection>(T subject, IMediaNode node) where TProjection : IProjection<T>\r\n        {\r\n            _runner.Run<T, TProjection>(subject, node);\r\n        }\r\n\r\n        public void Run(IProjection<T> projection, IValues<T> values, IMediaNode node)\r\n        {\r\n            _runner.Run(projection, values, node);\r\n        }\r\n\r\n        public void Run<TProjection>(IValues<T> values, IMediaNode node) where TProjection : IProjection<T>\r\n        {\r\n            _runner.Run<T, TProjection>(values, node);\r\n        }\r\n\r\n        public IDictionary<string, object> ProjectToJson(IProjection<T> projection, IValues<T> values)\r\n        {\r\n            return DictionaryMediaNode.Write(node => Run(projection, values, node));\r\n        }\r\n\r\n        public IDictionary<string, object> ProjectToJson<TProjection>(IValues<T> values) where TProjection : IProjection<T>\r\n        {\r\n            return DictionaryMediaNode.Write(node => Run<TProjection>(values, node));\r\n        }\r\n\r\n        public IDictionary<string, object> ProjectToJson<TProjection>(T subject) where TProjection : IProjection<T>\r\n        {\r\n            return ProjectToJson<TProjection>(new SimpleValues<T>(subject));\r\n        }\r\n    }\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/ISingleValueProjection.cs",
    "content": "namespace FubuMVC.Core.Projections\r\n{\r\n    public interface ISingleValueProjection<T> : IProjection<T>\r\n    {\r\n        string AttributeName { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/IValueProjector.cs",
    "content": "namespace FubuMVC.Core.Projections\r\n{\r\n    public interface IValueProjector<T>\r\n    {\r\n        void Project(string attributeName, T value, IMediaNode node);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/IValueSource.cs",
    "content": "namespace FubuMVC.Core.Projections\r\n{\r\n    public interface IValueSource<T>\r\n    {\r\n        IValues<T> FindValues();\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/IValueStream.cs",
    "content": "using System.Collections.Generic;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public interface IValueStream<T>\r\n    {\r\n        IEnumerable<IValues<T>> Elements { get; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/IValues.cs",
    "content": "using FubuCore.Reflection;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public interface IValues<T>\r\n    {\r\n        T Subject { get; }\r\n        object ValueFor(Accessor accessor);\r\n        \r\n    }\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/Projection.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Json;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing FubuMVC.Core.Runtime;\r\nusing HtmlTags;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n\r\n    public interface IAccessorNaming\r\n    {\r\n        string Name(Accessor accessor);\r\n    }\r\n\r\n    public class NormalNaming : IAccessorNaming\r\n    {\r\n        public string Name(Accessor accessor)\r\n        {\r\n            return accessor.Name;\r\n        }\r\n    }\r\n\r\n    public class CamelCaseNaming : IAccessorNaming\r\n    {\r\n        public string Name(Accessor accessor)\r\n        {\r\n            char[] text = accessor.Name.ToCharArray();\r\n            text[0] = CultureInfo.CurrentCulture.TextInfo.ToLower(text[0]);\r\n\r\n            return new string(text);\r\n        }\r\n    }\r\n\r\n    public class Projection<T> : IProjection<T>, IMediaWriter<T>, DescribesItself\r\n    {\r\n        private DisplayFormatting _formatting;\r\n        private readonly IList<IProjection<T>> _values = new List<IProjection<T>>();\r\n        private IAccessorNaming _naming = new NormalNaming();\r\n\r\n        public IAccessorNaming Naming\r\n        {\r\n            get\r\n            {\r\n                return _naming;\r\n            }\r\n            set\r\n            {\r\n                _naming = value ?? new NormalNaming();\r\n                _values.OfType<IAccessorProjection>().Each(x => x.ApplyNaming(_naming));\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Uses raw value formatting\r\n        /// </summary>\r\n        public Projection()\r\n            : this(DisplayFormatting.RawValues)\r\n        {\r\n        }\r\n\r\n        public Projection(DisplayFormatting formatting)\r\n        {\r\n            _formatting = formatting;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create a new Projection with the same formatting but\r\n        /// filtered data\r\n        /// </summary>\r\n        /// <param name=\"filter\"></param>\r\n        /// <returns></returns>\r\n        public Projection<T> Filter(Func<Accessor, bool> filter)\r\n        {\r\n            var values = _values.Where(x => x.Accessors().All(filter));\r\n            var projection = new Projection<T>(_formatting);\r\n            projection._values.AddRange(values);\r\n\r\n            return projection;\r\n        }\r\n\r\n        IEnumerable<Accessor> IProjection<T>.Accessors()\r\n        {\r\n            return _values.SelectMany(x => x.Accessors());\r\n        }\r\n\r\n        public DisplayFormatting Formatting\r\n        {\r\n            get { return _formatting; }\r\n            set { _formatting = value; }\r\n        }\r\n\r\n        void IProjection<T>.Write(IProjectionContext<T> context, IMediaNode node)\r\n        {\r\n            write(context, node);\r\n        }\r\n\r\n        protected void write(IProjectionContext<T> context, IMediaNode node)\r\n        {\r\n            _values.Each(x => x.Write(context, node));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Project a single value from a property on the subject.  Uses the\r\n        /// accessor name as the node name by default\r\n        /// </summary>\r\n        /// <typeparam name=\"TValue\"></typeparam>\r\n        /// <param name=\"expression\"></param>\r\n        /// <returns></returns>\r\n        public AccessorProjection<T, TValue> Value<TValue>(Expression<Func<T, TValue>> expression)\r\n        {\r\n            var accessor = ReflectionHelper.GetAccessor(expression);\r\n            var value = new AccessorProjection<T, TValue>(accessor);\r\n            if (_formatting == DisplayFormatting.UseDisplayFormatting)\r\n            {\r\n                value.Formatted();\r\n            }\r\n\r\n            value.Name(Naming.Name(accessor));\r\n\r\n            _values.Add(value);\r\n\r\n            return value;\r\n        }\r\n\r\n        public AdaptiveAccessorProjection<T> AdaptiveValue(Expression<Func<T, object>> expression)\r\n        {\r\n            var accessor = ReflectionHelper.GetAccessor(expression);\r\n            var projection = new AdaptiveAccessorProjection<T>(accessor);\r\n\r\n            _values.Add(projection);\r\n\r\n            return projection;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Mix in an existing Projection definition into this one\r\n        /// </summary>\r\n        /// <typeparam name=\"TProjection\"></typeparam>\r\n        public void Include<TProjection>() where TProjection : IProjection<T>, new()\r\n        {\r\n            _values.Add(new DelegatingProjection<T, TProjection>());\r\n        }\r\n\r\n        /// <summary>\r\n        /// Project a child node for a complex object represented by a property\r\n        /// on the subject T type\r\n        /// </summary>\r\n        /// <typeparam name=\"TChild\"></typeparam>\r\n        /// <param name=\"expression\"></param>\r\n        /// <returns></returns>\r\n        public ChildProjection<T, TChild> Child<TChild>(Expression<Func<T, TChild>> expression) where TChild : class\r\n        {\r\n            var child = new ChildProjection<T, TChild>(expression, _formatting);\r\n            child.As<IAccessorProjection>().ApplyNaming(_naming);\r\n\r\n            _values.Add(child);\r\n\r\n            return child;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Project special leafs or nodes that don't fall into any of the \r\n        /// simple Property/Value patterns \r\n        /// </summary>\r\n        /// <param name=\"attributeName\"></param>\r\n        /// <returns></returns>\r\n        public SingleLineExpression ForAttribute(string attributeName)\r\n        {\r\n            return new SingleLineExpression(attributeName, this);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Explicitly write values to the projected media\r\n        /// </summary>\r\n        /// <param name=\"writer\"></param>\r\n        public void WriteWith(Action<IProjectionContext<T>, IMediaNode> writer)\r\n        {\r\n            _values.Add(new LambdaProjection<T>(writer));\r\n        }\r\n\r\n        public class SingleLineExpression\r\n        {\r\n            private readonly string _attributeName;\r\n            private readonly Projection<T> _parent;\r\n\r\n            public SingleLineExpression(string attributeName, Projection<T> parent)\r\n            {\r\n                _attributeName = attributeName;\r\n                _parent = parent;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Specify the source of the data to be added to the projection for simple\r\n            /// key/value pairs\r\n            /// </summary>\r\n            /// <param name=\"source\"></param>\r\n            public void Use(Func<IProjectionContext<T>, object> source)\r\n            {\r\n                var projection = new SingleValueProjection<T>(_attributeName, source);\r\n                _parent._values.Add(projection);\r\n            }\r\n\r\n            /// <summary>\r\n            /// Specify the source of the data to be added to the projection.  Use this when\r\n            /// you may need to add extra formatting to the raw value\r\n            /// </summary>\r\n            /// <typeparam name=\"TValue\"></typeparam>\r\n            /// <param name=\"expression\"></param>\r\n            /// <returns></returns>\r\n            public PropertyExpression<TValue> ValueFrom<TValue>(Expression<Func<T, TValue>> expression)\r\n            {\r\n                return new PropertyExpression<TValue>(this, ReflectionHelper.GetAccessor(expression));\r\n            }\r\n\r\n            public class PropertyExpression<TValue>\r\n            {\r\n                private readonly SingleLineExpression _parent;\r\n                private readonly Accessor _accessor;\r\n\r\n                public PropertyExpression(SingleLineExpression parent, Accessor accessor)\r\n                {\r\n                    _parent = parent;\r\n                    _accessor = accessor;\r\n                }\r\n\r\n                /// <summary>\r\n                /// Explicit formatting logic\r\n                /// </summary>\r\n                /// <param name=\"source\"></param>\r\n                public void Use(Func<TValue, string> source)\r\n                {\r\n                    _parent.Use(context => {\r\n                        var raw = context.Values.ValueFor(_accessor);\r\n                        if (raw == null)\r\n                        {\r\n                            return string.Empty;\r\n                        }\r\n\r\n                        return source((TValue) raw);\r\n                    });\r\n                }\r\n            }\r\n\r\n            /// <summary>\r\n            /// Write a nested object to the projected media using the data returned by the \"source\"\r\n            /// argument.  \r\n            /// </summary>\r\n            /// <typeparam name=\"TChild\"></typeparam>\r\n            /// <param name=\"source\"></param>\r\n            /// <returns></returns>\r\n            public ChildProjection<T, TChild> WriteChild<TChild>(Func<IProjectionContext<T>, TChild> source)\r\n                where TChild : class\r\n            {\r\n                var child = new ChildProjection<T, TChild>(_attributeName, source, _parent._formatting);\r\n                _parent._values.Add(child);\r\n\r\n                return child;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Write a nested enumeration of nodes to the media based on the data returned by\r\n            /// the \"source\" argument.\r\n            /// </summary>\r\n            /// <typeparam name=\"TElement\"></typeparam>\r\n            /// <param name=\"source\"></param>\r\n            /// <returns></returns>\r\n            public EnumerableExpression<TElement> WriteEnumerable<TElement>(\r\n                Func<IProjectionContext<T>, IEnumerable<TElement>> source)\r\n            {\r\n                var enumerable = new EnumerableProjection<T, TElement>\r\n                {\r\n                    ElementSource = source,\r\n                    NodeName = _attributeName\r\n                };\r\n\r\n                _parent._values.Add(enumerable);\r\n\r\n                return new EnumerableExpression<TElement>(enumerable);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Write a nested enumeration of nodes to the media based on the value of the property\r\n        /// determined by the \"expression\" argument\r\n        /// </summary>\r\n        /// <typeparam name=\"TChild\"></typeparam>\r\n        /// <param name=\"expression\"></param>\r\n        /// <returns></returns>\r\n        public EnumerableExpression<TChild> Enumerable<TChild>(Expression<Func<T, IEnumerable<TChild>>> expression)\r\n        {\r\n            var enumerable = EnumerableProjection<T, TChild>.For(expression);\r\n            _values.Add(enumerable);\r\n\r\n            return new EnumerableExpression<TChild>(enumerable);\r\n        }\r\n\r\n        public class EnumerableExpression<TChild>\r\n        {\r\n            private readonly EnumerableProjection<T, TChild> _enumerable;\r\n\r\n            public EnumerableExpression(EnumerableProjection<T, TChild> enumerable)\r\n            {\r\n                _enumerable = enumerable;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Override the node name for the enumeration in the output media\r\n            /// </summary>\r\n            /// <param name=\"nodeName\"></param>\r\n            /// <returns></returns>\r\n            public EnumerableExpression<TChild> NodeName(string nodeName)\r\n            {\r\n                _enumerable.NodeName = nodeName;\r\n                return this;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Override the node name for each element of the enumeration within the output media\r\n            /// </summary>\r\n            /// <param name=\"leafName\"></param>\r\n            /// <returns></returns>\r\n            public EnumerableExpression<TChild> LeafName(string leafName)\r\n            {\r\n                _enumerable.LeafName = leafName;\r\n                return this;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Mix in a pre-built projection for each element in the enumeration\r\n            /// </summary>\r\n            /// <typeparam name=\"TProjection\"></typeparam>\r\n            /// <returns></returns>\r\n            public EnumerableExpression<TChild> UseProjection<TProjection>()\r\n                where TProjection : IProjection<TChild>, new()\r\n            {\r\n                _enumerable.UseProjection<TProjection>();\r\n                return this;\r\n            }\r\n\r\n            public EnumerableExpression<TChild> DefineProjection(Action<Projection<TChild>> configuration)\r\n            {\r\n                _enumerable.DefineProjection(configuration);\r\n                return this;\r\n            }\r\n        }\r\n\r\n        Task IMediaWriter<T>.Write(string mimeType, IFubuRequestContext request, T resource)\r\n        {\r\n            var node = new DictionaryMediaNode();\r\n            var context = new ProjectionContext<T>(request.Services, new SimpleValues<T>(resource));\r\n\r\n            write(context, node);\r\n\r\n            var serializer = request.Services.GetInstance<IJsonSerializer>();\r\n            return request.Writer.Write(mimeType, serializer.Serialize(node.Values, false));\r\n        }\r\n\r\n        public virtual IEnumerable<string> Mimetypes\r\n        {\r\n            get { yield return MimeType.Json.Value; }\r\n        }\r\n\r\n        void DescribesItself.Describe(Description description)\r\n        {\r\n            description.Title = GetType().Name;\r\n            description.ShortDescription = \"Projection of \" + typeof (T).FullName;\r\n        }\r\n\r\n        public void CamelCaseAttributeNames()\r\n        {\r\n            Naming = new CamelCaseNaming();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/ProjectionContext.cs",
    "content": "using System;\r\nusing FubuCore;\r\nusing FubuCore.Formatting;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Urls;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public class ProjectionContext<T> : IProjectionContext<T>\r\n    {\r\n        private readonly IServiceLocator _services;\r\n        private readonly IValues<T> _values;\r\n        private readonly Lazy<IUrlRegistry> _urls;\r\n        private readonly Lazy<IDisplayFormatter> _formatter;\r\n\r\n        public ProjectionContext(IServiceLocator services, IValues<T> values)\r\n        {\r\n            _services = services;\r\n            _values = values;\r\n\r\n            _urls = new Lazy<IUrlRegistry>(() => services.GetInstance<IUrlRegistry>());\r\n            _formatter = new Lazy<IDisplayFormatter>(() => services.GetInstance<IDisplayFormatter>());\r\n        }\r\n\r\n        public ProjectionContext(IServiceLocator services, T subject) : this(services, new SimpleValues<T>(subject))\r\n        {\r\n        }\r\n\r\n        private ProjectionContext(IServiceLocator services, IValues<T> values, Lazy<IUrlRegistry> urls, Lazy<IDisplayFormatter> formatter)\r\n        {\r\n            _services = services;\r\n            _values = values;\r\n            _urls = urls;\r\n            _formatter = formatter;\r\n        }\r\n\r\n        public IValues<T> Values\r\n        {\r\n            get { return _values; }\r\n        }\r\n\r\n        public T Subject\r\n        {\r\n            get { return _values.Subject; }\r\n        }\r\n\r\n        public TService Service<TService>()\r\n        {\r\n            return _services.GetInstance<TService>();\r\n        }\r\n\r\n        public IUrlRegistry Urls\r\n        {\r\n            get { return _urls.Value; }\r\n        }\r\n\r\n        public IDisplayFormatter Formatter\r\n        {\r\n            get { return _formatter.Value; }\r\n        }\r\n\r\n        public IProjectionContext<TChild> ContextFor<TChild>(TChild child)\r\n        {\r\n            return new ProjectionContext<TChild>(_services, new SimpleValues<TChild>(child), _urls, _formatter);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/ProjectionContextExtensions.cs",
    "content": "using System;\r\nusing System.Linq.Expressions;\r\nusing FubuCore.Reflection;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public static class ProjectionContextExtensions\r\n    {\r\n        public static string FormattedValueOf<T>(this IProjectionContext<T> context, Accessor accessor)\r\n        {\r\n            return context.Formatter.GetDisplayForValue(accessor, context.Values.ValueFor(accessor));\r\n        }\r\n\r\n        public static string FormattedValueOf<T>(this IProjectionContext<T> context, Expression<Func<T, object>> expression)\r\n        {\r\n            return context.FormattedValueOf(expression.ToAccessor());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/SelfProjectingValueProjector.cs",
    "content": "using System.Collections.Generic;\r\nusing FubuCore.Reflection;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public class SelfProjectingValueProjector<TParent, T> : ISingleValueProjection<TParent> where T : class, IProjectMyself\r\n    {\r\n        private readonly Accessor _accessor;\r\n\r\n        public SelfProjectingValueProjector(Accessor accessor)\r\n        {\r\n            _accessor = accessor;\r\n            AttributeName = accessor.Name;\r\n        }\r\n\r\n        public void Write(IProjectionContext<TParent> context, IMediaNode node)\r\n        {\r\n            var value = context.Values.ValueFor(_accessor) as T;\r\n            if (value != null)\r\n            {\r\n                value.Project(AttributeName, node);\r\n            }\r\n        }\r\n\r\n        IEnumerable<Accessor> IProjection<TParent>.Accessors()\r\n        {\r\n            yield return _accessor;\r\n        }\r\n\r\n        public string AttributeName { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/SimpleValues.cs",
    "content": "using FubuCore.Reflection;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public class SimpleValues<T> : IValues<T>\r\n    {\r\n        private readonly T _subject;\r\n\r\n        public SimpleValues(T subject)\r\n        {\r\n            _subject = subject;\r\n        }\r\n\r\n        public object ValueFor(Accessor accessor)\r\n        {\r\n            return accessor.GetValue(_subject);\r\n        }\r\n\r\n        public T Subject\r\n        {\r\n            get { return _subject; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/SingleValueProjection.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing FubuCore.Reflection;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public class SingleValueProjection<T> : ISingleValueProjection<T>\r\n    {\r\n        public string AttributeName { get; set; }\r\n        public Func<IProjectionContext<T>, object> Source { get; private set; }\r\n\r\n        public SingleValueProjection(string attributeName, Func<IProjectionContext<T>, object> source)\r\n        {\r\n            AttributeName = attributeName;\r\n            Source = source;\r\n        }\r\n\r\n        public void Write(IProjectionContext<T> context, IMediaNode node)\r\n        {\r\n            var value = Source(context);\r\n            node.SetAttribute(AttributeName, value);\r\n        }\r\n\r\n        public IEnumerable<Accessor> Accessors()\r\n        {\r\n            // It's indeterminate anyway\r\n            yield break;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/ValueSource.cs",
    "content": "using FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public class ValueSource<T> : IValueSource<T> where T : class\r\n    {\r\n        private readonly IFubuRequest _request;\r\n\r\n        public ValueSource(IFubuRequest request)\r\n        {\r\n            _request = request;\r\n        }\r\n\r\n        public IValues<T> FindValues()\r\n        {\r\n            var target = _request.Get<T>();\r\n            return new SimpleValues<T>(target);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Projections/ValuesExtensions.cs",
    "content": "using System;\r\nusing System.Linq.Expressions;\r\nusing FubuCore.Reflection;\r\n\r\nnamespace FubuMVC.Core.Projections\r\n{\r\n    public static class ValuesExtensions\r\n    {\r\n        public static object ValueFor<T>(this IValues<T> values, Expression<Func<T, object>> expression)\r\n        {\r\n            return values.ValueFor(expression.ToAccessor());\r\n        }\r\n\r\n        public static IValues<T> ToValues<T>(this T subject)\r\n        {\r\n            return new SimpleValues<T>(subject);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/ReflectionExtensions.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Text;\r\n\r\nnamespace FubuMVC.Core\r\n{\r\n    public static class ReflectionExtensions\r\n    {\r\n        /// <summary>\r\n        /// You must use this extension method in place of MethodInfo.Equals(MethodInfo) \r\n        /// because MethodInfo.Equals is a liar.\r\n        /// </summary>\r\n        /// <param name=\"method1\"></param>\r\n        /// <param name=\"method2\"></param>\r\n        /// <returns></returns>\r\n        public static bool Matches(this MethodInfo method1, MethodInfo method2)\r\n        {\r\n            if (method1.DeclaringType != method2.DeclaringType || method1.Name != method2.Name)\r\n                return false;\r\n            var parameters = method1.GetParameters();\r\n            if (parameters.Count() != method2.GetParameters().Count()) \r\n                return false;\r\n            for (int i = 0; i < parameters.Count(); i++)\r\n            {\r\n                if (!Matches(parameters[i], method2.GetParameters()[i])) \r\n                    return false;\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Equivalency check for ParameterInfo objects\r\n        /// </summary>\r\n        /// <param name=\"parameter1\"></param>\r\n        /// <param name=\"parameter2\"></param>\r\n        /// <returns></returns>\r\n        public static bool Matches(this ParameterInfo parameter1, ParameterInfo parameter2)\r\n        {\r\n            return parameter1.Name == parameter2.Name && parameter1.ParameterType == parameter2.ParameterType;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Core/Registration/AccessorRulesExpression.cs",
    "content": "﻿using System;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public class AccessorRulesExpression<T> : IAccessorRulesExpression\r\n    {\r\n        private readonly Action<object> _registration;\r\n\r\n        public AccessorRulesExpression(Action<object> registration)\r\n        {\r\n            _registration = registration;\r\n        }\r\n\r\n        public IAccessorRulesExpression Add(object rule)\r\n        {\r\n            _registration(rule);\r\n            return this;\r\n        }\r\n\r\n        public IAccessorRulesExpression Add<TRule>() where TRule : new()\r\n        {\r\n            return Add(new TRule());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/ActionMethodFilter.cs",
    "content": "using System;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuCore.Util;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public class ActionMethodFilter : CompositeFilter<MethodInfo>\r\n    {\r\n        public ActionMethodFilter()\r\n        {\r\n            Excludes += method => method.DeclaringType == typeof(object);\r\n            Excludes += method => method.DeclaringType == typeof(MarshalByRefObject);\r\n            Excludes += method => method.Name == ReflectionHelper.GetMethod<IDisposable>(x => x.Dispose()).Name;\r\n            Excludes += method => method.ContainsGenericParameters;\r\n            Excludes += method => method.GetParameters().Any(x => x.ParameterType.IsSimple());\r\n            Excludes += method => method.IsSpecialName;\r\n        }\r\n\r\n        public static ActionMethodFilter Flyweight = new ActionMethodFilter();\r\n\r\n        public void IgnoreMethodsDeclaredBy<T>()\r\n        {\r\n            Excludes += x => x.DeclaringType == typeof (T);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/ActionSource.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core.Registration.DSL;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing System.Linq;\r\nusing StructureMap;\r\nusing StructureMap.Graph.Scanning;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public class ActionSource : IActionSource, DescribesItself\r\n    {\r\n        private readonly AppliesToExpression _applies = new AppliesToExpression();\r\n        private readonly List<Assembly> _assemblies = new List<Assembly>(); \r\n        private readonly StringWriter _description = new StringWriter();\r\n\r\n        public static bool IsCandidate(MethodInfo method)\r\n        {\r\n            if (method.DeclaringType.Equals(typeof(object))) return false;\r\n\r\n            int parameterCount = method.GetParameters() == null ? 0 : method.GetParameters().Length;\r\n            if (parameterCount > 1) return false;\r\n\r\n            if (method.GetParameters().Any(x => x.ParameterType.IsSimple())) return false;\r\n            \r\n            bool hasOutput = method.ReturnType != typeof (void);\r\n\r\n            if (hasOutput && !method.ReturnType.IsClass) return false;\r\n\r\n            \r\n\r\n            if (hasOutput) return true;\r\n\r\n            return parameterCount == 1;\r\n        }\r\n\r\n        private readonly ActionMethodFilter _methodFilters;\r\n        private readonly CompositeFilter<Type> _typeFilters = new CompositeFilter<Type>();\r\n        private readonly CompositeFilter<ActionCall> _callFilters = new CompositeFilter<ActionCall>();\r\n\r\n        public ActionSource()\r\n        {\r\n            _description.WriteLine(\"Public methods that follow the 1 in/1 out, 0 in/ 1 out, or 1 in/ 0 out pattern\");\r\n\r\n            _methodFilters = new ActionMethodFilter();\r\n        }\r\n\r\n        public AppliesToExpression Applies\r\n        {\r\n            get { return _applies; }\r\n        }\r\n\r\n\r\n        Task<ActionCall[]> IActionSource.FindActions(Assembly applicationAssembly)\r\n        {\r\n            var assemblies = _applies.Assemblies.Any() ? _applies.Assemblies : new Assembly[]{applicationAssembly};\r\n            return TypeRepository.FindTypes(assemblies, TypeClassification.Concretes, _typeFilters.Matches)\r\n                .ContinueWith(x => x.Result.SelectMany(actionsFromType).ToArray());\r\n        }\r\n\r\n        private IEnumerable<ActionCall> actionsFromType(Type type)\r\n        {\r\n            return type.PublicInstanceMethods()\r\n                .Where(_methodFilters.Matches)\r\n                .Where(IsCandidate)\r\n                .Select(m => buildAction(type, m))\r\n                .Where(_callFilters.Matches);\r\n        }\r\n\r\n        protected virtual ActionCall buildAction(Type type, MethodInfo method)\r\n        {\r\n            return new ActionCall(type, method);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Find Actions on classes whose name ends on 'Controller'\r\n        /// </summary>\r\n        public void IncludeClassesSuffixedWithController()\r\n        {\r\n            _description.WriteLine(\"Public classes that are suffixed by 'Controller'\");\r\n            IncludeTypesNamed(x => x.EndsWith(\"Controller\"));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Find Actions on classes whose name ends with 'Endpoint'\r\n        /// </summary>\r\n        public void IncludeClassesSuffixedWithEndpoint()\r\n        {\r\n            _description.WriteLine(\"Public class that are suffixed by 'Endpoint' or 'Endpoints'\");\r\n            IncludeTypesNamed(x => x.EndsWith(\"Endpoint\", StringComparison.OrdinalIgnoreCase) || x.EndsWith(\"Endpoints\", StringComparison.OrdinalIgnoreCase));\r\n        }\r\n\r\n        public void IncludeTypesNamed(Expression<Func<string, bool>> filter)\r\n        {\r\n            _description.WriteLine(\"Classes that match \" + filter.ToString());\r\n\r\n            var typeParam = Expression.Parameter(typeof(Type), \"type\"); // type =>\r\n            var nameProp = Expression.Property(typeParam, \"Name\");  // type.Name\r\n            var invokeFilter = Expression.Invoke(filter, nameProp); // filter(type.Name)\r\n            var lambda = Expression.Lambda<Func<Type, bool>>(invokeFilter, typeParam); // type => filter(type.Name)\r\n\r\n            IncludeTypes(lambda);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Find Actions on types that match on the provided filter\r\n        /// </summary>\r\n        public void IncludeTypes(Expression<Func<Type, bool>> filter)\r\n        {\r\n            _description.WriteLine(\"Public class that match \" + filter.ToString());\r\n\r\n            _typeFilters.Includes += filter;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Find Actions on concrete types assignable to T\r\n        /// </summary>\r\n        public void IncludeTypesImplementing<T>()\r\n        {\r\n            _description.WriteLine(\"Where types are concrete types that implement the {0} interface\".ToFormat(typeof(T).FullName));\r\n            IncludeTypes(type => !type.IsOpenGeneric() && type.IsConcreteTypeOf<T>());\r\n        }\r\n\r\n        /// <summary>\r\n        /// Actions that match on the provided filter will be added to the runtime. \r\n        /// </summary>\r\n        public void IncludeMethods(Expression<Func<MethodInfo, bool>> filter)\r\n        {\r\n            _description.WriteLine(\"Methods matching \" + filter.ToString());\r\n            _methodFilters.Includes += filter;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Exclude types that match on the provided filter for finding Actions\r\n        /// </summary>\r\n        public void ExcludeTypes(Expression<Func<Type, bool>> filter)\r\n        {\r\n            _description.WriteLine(\"Exclude types matching \" + filter.ToString());\r\n            _typeFilters.Excludes += filter;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Actions that match on the provided filter will NOT be added to the runtime. \r\n        /// </summary>\r\n        public void ExcludeMethods(Expression<Func<MethodInfo, bool>> filter)\r\n        {\r\n            _description.WriteLine(\"Exclude methods matching \" + filter);\r\n            _methodFilters.Excludes += filter;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Ignore any methods that are declared by a super type or interface T\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        public void IgnoreMethodsDeclaredBy<T>()\r\n        {\r\n            _description.WriteLine(\"Exclude methods declared by type \" + typeof(T).FullName);\r\n            _methodFilters.IgnoreMethodsDeclaredBy<T>();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Exclude any types that are not concrete\r\n        /// </summary>\r\n        public void ExcludeNonConcreteTypes()\r\n        {\r\n            _description.WriteLine(\"Excludes non-concrete types\");\r\n            _typeFilters.Excludes += type => !type.IsConcrete();\r\n        }\r\n\r\n        void DescribesItself.Describe(Description description)\r\n        {\r\n            var list = new BulletList\r\n            {\r\n                Name = \"Assemblies\"\r\n            };\r\n\r\n            _assemblies.Each(assem => {\r\n                list.Children.Add(new Description\r\n                {\r\n                    Title = assem.FullName\r\n                });\r\n            });\r\n\r\n            description.Title = \"Action Source\";\r\n            description.BulletLists.Add(list);\r\n            description.LongDescription = _description.ToString();\r\n\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/ActionSourceAggregator.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\nusing FubuMVC.Core.Registration.Conventions;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.ServiceBus.Web;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public class ActionSourceAggregator : IChainSource\r\n    {\r\n        private readonly Assembly _applicationAssembly;\r\n        public readonly IList<IActionSource> Sources = new List<IActionSource>{new EndpointActionSource(), new SendsMessageActionSource()}; \r\n\r\n        public ActionSourceAggregator(Assembly applicationAssembly)\r\n        {\r\n            _applicationAssembly = applicationAssembly;\r\n\r\n            \r\n        }\r\n\r\n        public Task<BehaviorChain[]> BuildChains(BehaviorGraph graph, IPerfTimer timer)\r\n        {\r\n            var urlPolicies = graph.Settings.Get<UrlPolicies>();\r\n\r\n            var actions = Sources.Select(x => x.FindActions(graph.ApplicationAssembly));\r\n\r\n            return Task.WhenAll(actions).ContinueWith(t =>\r\n            {\r\n                return t.Result.SelectMany(x => x).Distinct()\r\n                    .Select(call => call.BuildChain(urlPolicies)).ToArray();\r\n            });\r\n        }\r\n\r\n        public Assembly ApplicationAssembly\r\n        {\r\n            get { return _applicationAssembly; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/ActionlessViewChainSource.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Urls;\nusing StructureMap.Graph.Scanning;\n\nnamespace FubuMVC.Core.Registration\n{\n    public class ActionlessViewChainSource : IChainSource\n    {\n        public Task<BehaviorChain[]> BuildChains(BehaviorGraph graph, IPerfTimer timer)\n        {\n            var types = TypeRepository.FindTypes(graph.ApplicationAssembly,\n                TypeClassification.Closed | TypeClassification.Concretes, t => t.HasAttribute<ViewSubjectAttribute>());\n\n            return types.ContinueWith(t =>\n            {\n                return t.Result.Select(type =>\n                {\n                    var chain = ChainForType(type);\n                    chain.Tags.Add(\"ActionlessView\");\n                    chain.UrlCategory.Category = Categories.VIEW;\n\n                    return chain;\n                }).ToArray();\n            });\n        }\n\n        public static BehaviorChain ChainForType(Type type)\n        {\n            if (type.HasAttribute<UrlPatternAttribute>())\n            {\n                var route = type.GetAttribute<UrlPatternAttribute>().BuildRoute(type);\n                return new RoutedChain(route, type, type);\n            }\n            var chain = BehaviorChain.ForResource(type);\n            chain.IsPartialOnly = true;\n\n            return chain;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/AddImplementationsServiceRegistrationConvention.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public class AddImplementationsServiceRegistrationConvention : IServiceRegistrationConvention\r\n    {\r\n        private readonly Type _pluginType;\r\n\r\n        public AddImplementationsServiceRegistrationConvention(Type pluginType)\r\n        {\r\n            _pluginType = pluginType;\r\n        }\r\n\r\n        public void Register(IEnumerable<Type> matchedTypes, ServiceRegistry services)\r\n        {\r\n            matchedTypes\r\n                .Where(t => _pluginType.IsAssignableFrom(t) && t.IsClass && !t.IsAbstract)\r\n                .Each(t => services.AddType(_pluginType, t));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/AssemblyFinder.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing FubuCore;\nusing FubuCore.Binding;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Core.Registration\n{\n    public static class AssemblyFinder\n    {\n        public static IEnumerable<Assembly> FindModuleAssemblies(IActivationDiagnostics diagnostics)\n        {\n            return FindAssemblies(file =>\n            {\n                diagnostics.LogFor(typeof(FubuRuntime)).Trace(\"Unable to load assembly from file \" + file);\n            }).Where(x => x.HasAttribute<FubuModuleAttribute>()).ToArray();\n        }\n\n        public static IEnumerable<Assembly> FindDependentAssemblies()\n        {\n            return FindAssemblies(file => { }).Where(x => x.GetReferencedAssemblies().Any(assem => assem.Name == \"FubuMVC.Core\"));\n        }\n\n        public static IEnumerable<Assembly> FindAssemblies(Action<string> logFailure)\n        {\n            var assemblyPath = AppDomain.CurrentDomain.BaseDirectory;\n            var binPath = FindBinPath();\n            if (StringExtensions.IsNotEmpty(binPath))\n            {\n                assemblyPath = assemblyPath.AppendPath(binPath);\n            }\n\n\n            var files = new FileSystem().FindFiles(assemblyPath, FileSet.Deep(\"*.dll;*.exe\"));\n            foreach (var file in files)\n            {\n                var name = Path.GetFileNameWithoutExtension(file);\n                Assembly assembly = null;\n\n                try\n                {\n                    assembly = AppDomain.CurrentDomain.Load(name);\n                }\n                catch (Exception)\n                {\n                    logFailure(file);\n                }\n\n                if (assembly != null) yield return assembly;\n            }\n        }\n\n        public static string FindBinPath()\n        {\n            var binPath = AppDomain.CurrentDomain.SetupInformation.PrivateBinPath;\n            if (binPath.IsNotEmpty())\n            {\n                return Path.IsPathRooted(binPath)\n                    ? binPath\n                    : AppDomain.CurrentDomain.SetupInformation.ApplicationBase.AppendPath(binPath);\n            }\n\n            return null;\n        }\n\n\n        public static IEnumerable<Assembly> FindAssemblies(Func<Assembly, bool> filter,\n            Action<string> onDirectoryFound = null)\n        {\n            if (onDirectoryFound == null)\n            {\n                onDirectoryFound = dir => { };\n            }\n\n            return FindAssemblies(file => { }).Where(filter);\n        }\n\n        /// <summary>\n        ///   Finds the currently executing assembly.\n        /// </summary>\n        /// <returns></returns>\n        public static Assembly FindTheCallingAssembly()\n        {\n            var trace = new StackTrace(false);\n\n            var thisAssembly = Assembly.GetExecutingAssembly().GetName().Name;\n            var fubuCore = typeof (IObjectResolver).Assembly.GetName().Name;\n\n            Assembly callingAssembly = null;\n            for (var i = 0; i < trace.FrameCount; i++)\n            {\n                var frame = trace.GetFrame(i);\n                var assembly = frame.GetMethod().DeclaringType.Assembly;\n                var name = assembly.GetName().Name;\n\n                if (name != thisAssembly && name != fubuCore && name != \"mscorlib\" &&\n                    name != \"Serenity\" && name != \"System.Core\")\n                {\n                    callingAssembly = assembly;\n                    break;\n                }\n            }\n\n            return callingAssembly;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/BehaviorGraph.cs",
    "content": "using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.ServiceBus.Configuration;\r\nusing FubuMVC.Core.ServiceBus.Polling;\r\nusing StructureMap;\r\nusing StructureMap.Configuration.DSL;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public interface IChainImporter\r\n    {\r\n        void Import(IEnumerable<BehaviorChain> chains);\r\n    }\r\n\r\n\r\n    /// <summary>\r\n    ///   The complete behavior model of a fubu application\r\n    /// </summary>\r\n    public class BehaviorGraph : IChainImporter\r\n    {\r\n        private readonly List<BehaviorChain> _chains = new List<BehaviorChain>();\r\n\r\n        private readonly SettingsCollection _settings;\r\n\r\n        public IRoutePolicy RoutePolicy = new StandardRoutePolicy();\r\n\r\n        public BehaviorGraph(SettingsCollection settings) \r\n        {\r\n            _settings = settings;\r\n            Routes = new RouteCollection(this);\r\n        }\r\n\r\n        public BehaviorGraph() : this(new SettingsCollection())\r\n        {\r\n            _settings.Replace(SessionStateRequirement.RequiresSessionState);\r\n\r\n        }\r\n\r\n        public Assembly ApplicationAssembly { get; set; }\r\n        public IEnumerable<Assembly> PackageAssemblies { get; set; }\r\n\r\n        public IEnumerable<Assembly> AllAssemblies()\r\n        {\r\n            if (ApplicationAssembly != null) yield return ApplicationAssembly;\r\n\r\n            if (PackageAssemblies != null)\r\n            {\r\n                foreach (var packageAssembly in PackageAssemblies)\r\n                {\r\n                    yield return packageAssembly;\r\n                }\r\n            }\r\n        } \r\n\r\n        private string _version;\r\n\r\n        public string Version\r\n        {\r\n            get\r\n            {\r\n                return _version.IsEmpty()\r\n                    ? (ApplicationAssembly == null ? string.Empty : ApplicationAssembly.GetName().Version.ToString())\r\n                    : _version;\r\n            }\r\n            set { _version = value; }\r\n        }\r\n\r\n\r\n        public SettingsCollection Settings\r\n        {\r\n            get { return _settings; }\r\n        }\r\n\r\n        public readonly RouteCollection Routes;\r\n\r\n\r\n        public IEnumerable<HandlerChain> Handlers\r\n        {\r\n            get { return _chains.OfType<HandlerChain>(); }\r\n        }\r\n\r\n        public IEnumerable<PollingJobChain> PollingJobs\r\n        {\r\n            get { return _chains.OfType<PollingJobChain>(); }\r\n        } \r\n\r\n        /// <summary>\r\n        ///   All the BehaviorChain's\r\n        /// </summary>\r\n        public IEnumerable<BehaviorChain> Chains\r\n        {\r\n            get { return _chains; }\r\n        }\r\n\r\n        void IChainImporter.Import(IEnumerable<BehaviorChain> chains)\r\n        {\r\n            chains.Each(AddChain);\r\n        }\r\n\r\n        internal Registry ToStructureMapRegistry()\r\n        {\r\n            var registry = new Registry();\r\n            _chains.OfType<IContainerModel>().Each(x => registry.For<IActionBehavior>().AddInstance(x.ToInstance()));\r\n\r\n            return registry;\r\n        }\r\n\r\n\r\n        public static BehaviorGraph BuildFrom(FubuRegistry registry, IPerfTimer timer = null)\r\n        {\r\n            return BehaviorGraphBuilder.Build(registry, timer ?? new PerfTimer(), new Assembly[0], new ActivationDiagnostics(), FubuApplicationFiles.ForDefault());\r\n        }\r\n\r\n        public static BehaviorGraph BuildFrom<T>(IPerfTimer timer = null) where T : FubuRegistry, new()\r\n        {\r\n            return BehaviorGraphBuilder.Build(new T(), timer ?? new PerfTimer(), new Assembly[0], new ActivationDiagnostics(), FubuApplicationFiles.ForDefault());\r\n        }\r\n\r\n        public static BehaviorGraph BuildFrom(Action<FubuRegistry> configure, IPerfTimer timer = null)\r\n        {\r\n            var registry = new FubuRegistry();\r\n            configure(registry);\r\n\r\n            return BehaviorGraphBuilder.Build(registry, timer ?? new PerfTimer(), new Assembly[0], new ActivationDiagnostics(), FubuApplicationFiles.ForDefault());\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        ///   Finds the matching BehaviorChain for the given IRouteDefinition.  If no\r\n        ///   BehaviorChain exists, one is created and added to the BehaviorGraph\r\n        /// </summary>\r\n        /// <param name = \"route\"></param>\r\n        /// <returns></returns>\r\n        public BehaviorChain ChainFor(IRouteDefinition route)\r\n        {\r\n            var chain = _chains.OfType<RoutedChain>().FirstOrDefault(x => x.Route == route);\r\n            if (chain == null)\r\n            {\r\n                chain = new RoutedChain(route);\r\n                _chains.Fill(chain);\r\n            }\r\n\r\n            return chain;\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        ///   All of the actions in all of the BehaviorChains\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public IEnumerable<ActionCall> Actions()\r\n        {\r\n            return allActions().ToList();\r\n        }\r\n\r\n        /// <summary>\r\n        ///   An enumeration of all the \"FirstCall's\" in the\r\n        ///   BehaviorGraph across all BehaviorChains\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public IEnumerable<ActionCall> FirstActions()\r\n        {\r\n            foreach (var chain in _chains)\r\n            {\r\n                var call = chain.FirstCall();\r\n                if (call != null)\r\n                {\r\n                    yield return call;\r\n                }\r\n            }\r\n        }\r\n\r\n        private IEnumerable<ActionCall> allActions()\r\n        {\r\n            foreach (var chain in _chains)\r\n            {\r\n                foreach (var call in chain.Calls)\r\n                {\r\n                    yield return call;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Finds the *first* BehaviorChain that contains an\r\n        ///   ActionCall for the Method designated by the expression\r\n        /// </summary>\r\n        /// <typeparam name = \"T\"></typeparam>\r\n        /// <param name = \"expression\"></param>\r\n        /// <returns></returns>\r\n        public BehaviorChain ChainFor<T>(Expression<Action<T>> expression)\r\n        {\r\n            var call = ActionCall.For(expression);\r\n            return _chains.Where(x => x.Calls.Contains(call)).FirstOrDefault();\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Finds the *first* BehaviorChain that contains an\r\n        ///   ActionCall for the Method designated by the expression\r\n        /// </summary>\r\n        /// <typeparam name = \"T\"></typeparam>\r\n        /// <param name = \"expression\"></param>\r\n        /// <returns></returns>\r\n        public BehaviorChain ChainFor<T>(Expression<Func<T, object>> expression)\r\n        {\r\n            var call = ActionCall.For(expression);\r\n            var chains = _chains.Where(x => x.Calls.Contains(call));\r\n            if (chains.Count() > 1)\r\n            {\r\n                throw new FubuException(1020,\r\n                    \"More than one behavior chain contains this ActionCall.  You will have to use a more specific search\");\r\n            }\r\n\r\n            return chains.FirstOrDefault();\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Writes a summary of the BehaviorGraph to Trace\r\n        /// </summary>\r\n        public void Describe()\r\n        {\r\n            _chains.Each(x => Trace.WriteLine(x.ToString()));\r\n        }\r\n\r\n        public void AddChain(BehaviorChain chain)\r\n        {\r\n            _chains.Add(chain);\r\n        }\r\n\r\n        public void AddChains(IEnumerable<BehaviorChain> chains)\r\n        {\r\n            _chains.AddRange(chains);\r\n        }\r\n\r\n        public void RemoveChain(BehaviorChain chain)\r\n        {\r\n            _chains.Remove(chain);\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        ///   Adds a new blank BehaviorChain to the BehaviorGraph\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public BehaviorChain AddChain()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            AddChain(chain);\r\n\r\n            return chain;\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Finds the single BehaviorChain with the designated inputType.\r\n        ///   Behaviors.Single(x => x.InputType() == inputType)\r\n        /// </summary>\r\n        /// <param name = \"inputType\"></param>\r\n        /// <returns></returns>\r\n        public BehaviorChain ChainFor(Type inputType)\r\n        {\r\n            return Chains.FirstOrDefault(x => x.InputType() == inputType);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Find the first BehaviorChain with InputType() == typeof(T)\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <returns></returns>\r\n        public BehaviorChain ChainFor<T>()\r\n        {\r\n            return ChainFor(typeof (T));\r\n        }\r\n\r\n        public BehaviorChain FindHomeChain()\r\n        {\r\n            return Chains.OfType<RoutedChain>().FirstOrDefault(x => x.Route.Pattern == string.Empty);\r\n        }\r\n\r\n        public static BehaviorGraph BuildEmptyGraph()\r\n        {\r\n            return BuildFrom(new FubuRegistry());\r\n        }\r\n\r\n        public BehaviorChain FindChain(int key)\r\n        {\r\n            return Chains.FirstOrDefault(x => x.Key == key);\r\n        }\r\n    }\r\n\r\n    public class RouteCollection : IEnumerable<RoutedChain>\r\n    {\r\n        private readonly BehaviorGraph _graph;\r\n\r\n        public RouteCollection(BehaviorGraph graph)\r\n        {\r\n            _graph = graph;\r\n        }\r\n\r\n        IEnumerator IEnumerable.GetEnumerator()\r\n        {\r\n            return GetEnumerator();\r\n        }\r\n\r\n        public IEnumerator<RoutedChain> GetEnumerator()\r\n        {\r\n            return _graph.Chains.OfType<RoutedChain>().GetEnumerator();\r\n        }\r\n\r\n        public IEnumerable<RoutedChain> Gets\r\n        {\r\n            get { return this.Where(x => x.Route.RespondsToMethod(\"GET\")); }\r\n        }\r\n\r\n\r\n        public IEnumerable<RoutedChain> Posts\r\n        {\r\n            get { return this.Where(x => x.Route.RespondsToMethod(\"POST\")); }\r\n        }\r\n\r\n\r\n        public IEnumerable<RoutedChain> Puts\r\n        {\r\n            get { return this.Where(x => x.Route.RespondsToMethod(\"PUT\")); }\r\n        }\r\n\r\n\r\n        public IEnumerable<RoutedChain> Deletes\r\n        {\r\n            get { return this.Where(x => x.Route.RespondsToMethod(\"DELETE\")); }\r\n        }\r\n\r\n\r\n        public IEnumerable<RoutedChain> Heads\r\n        {\r\n            get { return this.Where(x => x.Route.RespondsToMethod(\"HEAD\")); }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Union of routed chains that respond to GET or HEAD\r\n        /// </summary>\r\n        public IEnumerable<RoutedChain> Resources\r\n        {\r\n            get { return Gets.Union(Heads); }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Union of routed chains that respond to POST, PUT, or DELETE\r\n        /// </summary>\r\n        public IEnumerable<RoutedChain> Commands\r\n        {\r\n            get { return Posts.Union(Puts).Union(Deletes); }\r\n        } \r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/BehaviorGraphBuilder.cs",
    "content": "using System.Collections.Generic;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.Assets;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Diagnostics.Runtime;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Runtime.Files;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Events;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.Runtime.Delayed;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing FubuMVC.Core.UI;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.View;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.Registration\n{\n    internal static class BehaviorGraphBuilder\n    {\n        public static BehaviorGraph Build(FubuRegistry registry, IPerfTimer perfTimer,\n            IEnumerable<Assembly> packageAssemblies, IActivationDiagnostics diagnostics, IFubuApplicationFiles files)\n        {\n            var featureLoader = new FeatureLoader();\n            featureLoader.LookForFeatures();\n\n            if (registry.Mode.InDevelopment())\n            {\n                registry.AlterSettings<DiagnosticsSettings>(_ => _.TraceLevel = TraceLevel.Verbose);\n                registry.AlterSettings<AssetSettings>(_ => _.SetupForDevelopment());\n            }\n\n            \n            \n\n            var graph = new BehaviorGraph\n            {\n                ApplicationAssembly = registry.ApplicationAssembly,\n                PackageAssemblies = packageAssemblies\n            };\n\n            var accessorRules = AccessorRulesCompiler.Compile(graph, perfTimer);\n            var validationCompilation = ValidationCompiler.Compile(graph, perfTimer, registry);\n\n\n\n            var config = registry.Config;\n\n            perfTimer.Record(\"Applying Settings\", () => applySettings(config, graph, diagnostics, files));\n\n            perfTimer.Record(\"Enable built in polling jobs\", () => enableBuiltInJobs(graph));\n            perfTimer.Record(\"Applying Feature Settings\", () => featureLoader.ApplyAll(graph.Settings, registry).Wait(30.Seconds()).AssertFinished());\n\n\n            config.Add(new ActionlessViewChainSource());\n            perfTimer.Record(\"Local Application BehaviorGraph\", () => config.BuildLocal(graph, perfTimer));\n\n            perfTimer.Record(\"Explicit Configuration\", () => config.Global.Explicits.RunActions(graph));\n            perfTimer.Record(\"Global Policies\", () => config.Global.Policies.RunActions(graph));\n\n            perfTimer.Record(\"Inserting Conneg and Authorization Nodes\",\n                () => insertConnegAndAuthorizationNodes(graph));\n\n            perfTimer.Record(\"Applying Global Reorderings\", () => config.ApplyGlobalReorderings(graph));\n\n\n            if (registry.Mode.InDevelopment() || graph.Settings.Get<DiagnosticsSettings>().TraceLevel != TraceLevel.None)\n            {\n                perfTimer.Record(\"Applying Tracing\", () => ApplyTracing.Configure(graph));\n            }\n\n\n            Task.WaitAll(new Task[] { accessorRules, validationCompilation}, 30.Seconds()).AssertFinished();\n\n            new AutoImportModelNamespacesConvention().Configure(graph);\n\n            return graph;\n        }\n\n        private static void enableBuiltInJobs(BehaviorGraph graph)\n        {\n            if (graph.Settings.Get<TransportSettings>().Enabled)\n            {\n                var jobs = graph.Settings.Get<PollingJobSettings>();\n\n                jobs.AddJob(PollingJobChain.For<DelayedEnvelopeProcessor, TransportSettings>(x => x.DelayMessagePolling));\n                jobs.AddJob(PollingJobChain.For<ExpiringListenerCleanup, TransportSettings>(x => x.ListenerCleanupPolling));\n\n                if (!jobs.HasJob<HealthMonitorPollingJob>())\n                {\n                    jobs.AddJob(PollingJobChain.For<HealthMonitorPollingJob, HealthMonitoringSettings>(x => x.Interval));\n                }\n                \n                jobs.AddJob(PollingJobChain.For<SubscriptionRefreshJob, TransportSettings>(x => x.SubscriptionRefreshPolling));\n            }\n        }\n\n\n        private static void insertConnegAndAuthorizationNodes(BehaviorGraph graph)\n        {\n            graph.Chains.Each(x => x.InsertNodes(graph.Settings.Get<ConnegSettings>()));\n        }\n\n        private static void applySettings(ConfigGraph config, BehaviorGraph graph, IActivationDiagnostics diagnostics, IFubuApplicationFiles files)\n        {\n            // Might come back to this.\n            config.Imports.Each(x => x.InitializeSettings(graph));\n            config.Settings.Each(x => x.Alter(graph.Settings));\n\n            var viewSettings = graph.Settings.Get<ViewEngineSettings>();\n\n\n            var views = viewSettings.BuildViewBag(graph, diagnostics, files);\n\n            var conneg = graph.Settings.Get<ConnegSettings>();\n            \n\n            conneg.ReadConnegGraph(graph);\n            conneg.StoreViews(views);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/ConfigGraph.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Registration.Conventions;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Registration.Services;\nusing FubuMVC.Core.Security.Authorization;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Registration;\nusing FubuMVC.Core.UI;\nusing StructureMap;\nusing StructureMap.Configuration.DSL;\n\nnamespace FubuMVC.Core.Registration\n{\n    public class PolicyGraph\n    {\n        public readonly ConfigurationActionSet Policies = new ConfigurationActionSet();\n        public readonly ConfigurationActionSet Explicits = new ConfigurationActionSet();\n\n        public readonly ConfigurationActionSet Reordering = new ConfigurationActionSet();\n    }\n\n    /// <summary>\n    /// Holds and tracks all the IConfigurationAction's used to construct the BehaviorGraph of an application\n    /// </summary>\n    public class ConfigGraph\n    {\n        private readonly Assembly _applicationAssembly;\n\n        private readonly IList<RegistryImport> _imports = new List<RegistryImport>();\n        private readonly IList<Registry> _services = new List<Registry>();\n\n        private readonly ActionSourceAggregator _actionSourceAggregator;\n        private readonly HandlerGraphSource _handlers = new HandlerGraphSource();\n        private readonly IList<IChainSource> _sources = new List<IChainSource>();\n\n        public readonly PolicyGraph Global = new PolicyGraph();\n        public readonly PolicyGraph Local = new PolicyGraph();\n\n        public readonly IList<ISettingsAlteration> Settings = new List<ISettingsAlteration>();\n\n        public readonly ServiceRegistry ApplicationServices = new ServiceRegistry();\n\n        public ConfigGraph(Assembly applicationAssembly)\n        {\n            _applicationAssembly = applicationAssembly;\n            _actionSourceAggregator = new ActionSourceAggregator(_applicationAssembly);\n\n            _sources.Add(_actionSourceAggregator);\n            _sources.Add(_handlers);\n        }\n\n        public Assembly ApplicationAssembly\n        {\n            get { return _applicationAssembly; }\n        }\n\n        public IEnumerable<RegistryImport> Imports\n        {\n            get { return _imports; }\n        }\n\n        public void AddImport(RegistryImport import)\n        {\n            if (HasImported(import.Registry)) return;\n\n            _imports.Add(import);\n        }\n\n        // Tested through the FubuRegistry.BuildLocal()\n        public bool HasImported(FubuRegistry registry)\n        {\n            if (_imports.Any(x => x.Registry.GetType() == registry.GetType()))\n            {\n                return true;\n            }\n\n            if (_imports.Any(x => x.Registry.Config.HasImported(registry)))\n            {\n                return true;\n            }\n\n            return false;\n        }\n\n        public IEnumerable<RegistryImport> UniqueImports()\n        {\n            var children = allChildrenImports().ToList();\n\n            return _imports.Where(x => !children.Contains(x));\n        }\n\n        private IEnumerable<RegistryImport> allChildrenImports()\n        {\n            foreach (var import in _imports)\n            {\n                foreach (var action in import.Registry.Config._imports)\n                {\n                    yield return action;\n\n                    foreach (\n                        var descendentAction in\n                            _imports.SelectMany(x => x.Registry.Config.allChildrenImports()))\n                    {\n                        yield return descendentAction;\n                    }\n                }\n            }\n        }\n\n        public HandlerGraphSource Handlers\n        {\n            get { return _handlers; }\n        }\n\n        public ActionSourceAggregator Actions\n        {\n            get { return _actionSourceAggregator; }\n        }\n\n        public void Add(IChainSource source)\n        {\n            _sources.Add(source);\n        }\n\n        public void Add(Registry services)\n        {\n            _services.Add(services);\n        }\n\n        public void Add(IHandlerSource source)\n        {\n            _handlers.HandlerSources.Add(source);\n        }\n\n        public void Add(IActionSource source)\n        {\n            _actionSourceAggregator.Sources.Add(source);\n        }\n\n        public IEnumerable<Registry> AllServiceRegistrations()\n        {\n            foreach (var import in UniqueImports())\n            {\n                foreach (var log in import.Registry.Config.AllServiceRegistrations())\n                {\n                    yield return log;\n                }\n            }\n\n            foreach (var registry in _services)\n            {\n                yield return registry;\n            }\n        }\n\n        public IEnumerable<IChainSource> Sources\n        {\n            get { return _sources; }\n        }\n\n        public void ApplyGlobalReorderings(BehaviorGraph graph)\n        {\n            Global.Reordering.RunActions(graph);\n\n            GlobalReorderingRules().Each(x => x.Configure(graph));\n        }\n\n        public IEnumerable<IConfigurationAction> GlobalReorderingRules()\n        {\n            yield return new OutputBeforeAjaxContinuationPolicy();\n\n            yield return new ReorderBehaviorsPolicy\n            {\n                CategoryMustBeAfter = BehaviorCategory.Authorization,\n                CategoryMustBeBefore = BehaviorCategory.Authentication\n            };\n\n            yield return new ReorderBehaviorsPolicy\n            {\n                WhatMustBeBefore = x => x is ExceptionHandlerNode,\n                WhatMustBeAfter = x => true\n            };\n        }\n\n        public void RegisterServices(string mode, IContainer container, BehaviorGraph graph)\n        {\n            graph.Settings.Register(ApplicationServices);\n\n            container.Configure(_ =>\n            {\n                DefaultServices(mode).Each(_.AddRegistry);\n                AllServiceRegistrations().Each(_.AddRegistry);\n\n                _.AddRegistry(ApplicationServices);\n\n                _.For<BehaviorGraph>().Use(graph);\n\n                _.AddRegistry(graph.ToStructureMapRegistry());\n            });\n        }\n\n        public static IEnumerable<ServiceRegistry> DefaultServices(string mode)\n        {\n            yield return new ModelBindingServicesRegistry();\n            yield return new SecurityServicesRegistry();\n            yield return new HttpStandInServiceRegistry();\n            yield return new CoreServiceRegistry(mode);\n            yield return new UIServiceRegistry();\n        }\n\n        public void BuildLocal(BehaviorGraph graph, IPerfTimer timer)\n        {\n            // Local policies will ONLY apply to chains built by this ConfigGraph,\n            // and not to chains that are built by imports\n\n            var imports = UniqueImports().Select(x => x.BuildChains(graph, timer)).ToArray();\n\n            var chainSources =\n                Sources.Select(\n                    source => source.BuildChains(graph, timer)).ToArray();\n\n\n            Task.WaitAll(chainSources, 30.Seconds()).AssertFinished();\n\n            chainSources.Each(x => graph.AddChains(x.Result));\n\n            Local.Explicits.RunActions(graph);\n            Local.Policies.RunActions(graph);\n            Local.Reordering.RunActions(graph);\n\n            Task.WaitAll(imports, 30.Seconds()).AssertFinished();\n\n            imports.Each(x => graph.AddChains(x.Result));\n        }\n\n        public void ImportGlobals(ConfigGraph config)\n        {\n            Global.Explicits.Import(config.Global.Explicits);\n            Global.Policies.Import(config.Global.Policies);\n            Global.Reordering.Import(config.Global.Reordering);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/ConfigurationActionSet.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.Registration\n{\n    public class ConfigurationActionSet\n    {\n        private readonly IList<IConfigurationAction> _actions = new List<IConfigurationAction>();\n\n        public IEnumerable<IConfigurationAction> Actions\n        {\n            get { return _actions; }\n        }\n\n        public void Fill(IConfigurationAction action)\n        {\n            Type actionType = action.GetType();\n\n\n            if (TypeIsUnique(actionType) && _actions.Any(x => x.GetType() == actionType))\n            {\n                return;\n            }\n\n            _actions.Fill(action);\n        }\n\n        public static bool TypeIsUnique(Type type)\n        {\n            if (type.HasAttribute<CanBeMultiplesAttribute>()) return false;\n\n            // If it does not have any non-default constructors\n            if (type.GetConstructors().Any(x => x.GetParameters().Any()))\n            {\n                return false;\n            }\n\n            if (type.GetProperties().Any(x => x.CanWrite))\n            {\n                return false;\n            }\n\n            return true;\n        }\n\n        public virtual void RunActions(BehaviorGraph graph)\n        {\n            _actions.Each(x => x.Configure(graph));\n        }\n\n        public void Import(ConfigurationActionSet others)\n        {\n            others._actions.Each(Fill);\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/ConnectImplementationsServiceRegistrationConvention.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public class ConnectImplementationsServiceRegistrationConvention : IServiceRegistrationConvention\r\n    {\r\n        private readonly Type _openType;\r\n\r\n        public ConnectImplementationsServiceRegistrationConvention(Type openType)\r\n        {\r\n            _openType = openType;\r\n        }\r\n\r\n        public void Register(IEnumerable<Type> matchedTypes, ServiceRegistry services)\r\n        {\r\n            matchedTypes\r\n                .Where(t => t.Closes(_openType) && t.IsClass && !t.IsAbstract)\r\n                .Each(t => services.AddType(_openType, t));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Conventions/DefaultRouteConventionBasedUrlPolicy.cs",
    "content": "﻿using FubuCore.Descriptions;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\n\r\nnamespace FubuMVC.Core.Registration.Conventions\r\n{\r\n    [Title(\"Method named HomeEndpoint.Index() is the default route if none is explicitly registered\")]\r\n    public class DefaultRouteConventionBasedUrlPolicy : IUrlPolicy\r\n    {\r\n        private const string DefaultHomeControllerConvention = \"HomeEndpoint\";\r\n        private const string DefaultHomeMethodConvention = \"Index\";\r\n\r\n        public bool Matches(ActionCall call)\r\n        {\r\n            return call.Method.DeclaringType.Name == DefaultHomeControllerConvention &&\r\n                   call.Method.Name == DefaultHomeMethodConvention;\r\n        }\r\n\r\n        public IRouteDefinition Build(ActionCall call)\r\n        {\r\n            return call.ToRouteDefinition();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Conventions/DefaultUrlPolicy.cs",
    "content": "using System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Web.Routing;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing FubuMVC.Core.Resources.PathBased;\r\n\r\nnamespace FubuMVC.Core.Registration.Conventions\r\n{\r\n    [Description(\"Default Url Policy\")]\r\n    public class DefaultUrlPolicy : IUrlPolicy\r\n    {\r\n        public bool Matches(ActionCall call)\r\n        {\r\n            return true;\r\n        }\r\n\r\n        public IRouteDefinition Build(ActionCall call)\r\n        {\r\n            var className = call.HandlerType.Name.ToLower()\r\n                .Replace(\"endpoints\", \"\")\r\n                .Replace(\"endpoint\", \"\")\r\n                \r\n                .Replace(\"controller\", \"\");\r\n\r\n            RouteDefinition route = null;\r\n            if (RouteDefinition.VERBS.Any(x => x.EqualsIgnoreCase(call.Method.Name)))\r\n            {\r\n                route = new RouteDefinition(className);\r\n                route.AddHttpMethodConstraint(call.Method.Name.ToUpper());\r\n            }\r\n            else\r\n            {\r\n                route = new RouteDefinition(\"{0}/{1}\".ToFormat(className, call.Method.Name.ToLowerInvariant()));\r\n            }\r\n\r\n            if (call.InputType() != null)\r\n            {\r\n                if (call.InputType().CanBeCastTo<ResourcePath>())\r\n                {\r\n                    ResourcePath.AddResourcePathInputs(route);\r\n                }\r\n                else\r\n                {\r\n                    AddBasicRouteInputs(call, route);\r\n                }\r\n            }\r\n\r\n            return route;\r\n        }\r\n\r\n        public static void AddBasicRouteInputs(ActionCall call, RouteDefinition route)\r\n        {\r\n            call.InputType()\r\n                .GetProperties()\r\n                .Where(x => x.HasAttribute<RouteInputAttribute>())\r\n                .Each(prop => route.Append(\"{\" + prop.Name + \"}\"));\r\n\r\n            route.ApplyInputType(call.InputType());\r\n        }\r\n\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Conventions/IUrlPolicy.cs",
    "content": "using FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\n\r\nnamespace FubuMVC.Core.Registration.Conventions\r\n{\r\n    public interface IUrlPolicy\r\n    {\r\n        bool Matches(ActionCall call);\r\n        IRouteDefinition Build(ActionCall call);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Conventions/MethodToUrlBuilder.cs",
    "content": "using System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing FubuMVC.Core.Resources.PathBased;\r\n\r\nnamespace FubuMVC.Core.Registration.Conventions\r\n{\r\n    // TODO -- look at making this little monster faster.\r\n    [Description(\"The get_*, post_*, put_*, delete_* url convention\")]\r\n    public class MethodToUrlBuilder : IUrlPolicy\r\n    {\r\n        public bool Matches(ActionCall call)\r\n        {\r\n            return Matches(call.Method.Name);\r\n        }\r\n\r\n        public IRouteDefinition Build(ActionCall call)\r\n        {\r\n            var route = call.ToRouteDefinition();\r\n            Alter(route, call);\r\n\r\n            return route;\r\n        }\r\n\r\n        public static bool Matches(string methodName)\r\n        {\r\n            return methodName.Contains(\"_\");\r\n        }\r\n\r\n        public static void Alter(IRouteDefinition route, ActionCall call)\r\n        {\r\n            var properties = call.HasInput\r\n                ? new TypeDescriptorCache().GetPropertiesFor(call.InputType()).Keys\r\n                : new string[0];\r\n\r\n            Alter(route, call.Method.Name, properties);\r\n\r\n            if (call.HasInput)\r\n            {\r\n                route.ApplyInputType(call.InputType());\r\n\r\n                if (call.InputType().CanBeCastTo<ResourcePath>())\r\n                {\r\n\r\n                     ResourcePath.AddResourcePathInputs(route);\r\n                }\r\n            }\r\n        }\r\n\r\n        public static void Alter(IRouteDefinition route, string methodName, IEnumerable<string> properties)\r\n        {\r\n            var parts = AddHttpConstraints(route, methodName);\r\n\r\n            for (var i = 0; i < parts.Count; i++)\r\n            {\r\n                var part = parts[i];\r\n                if (properties.Contains(part))\r\n                {\r\n                    parts[i] = \"{\" + part + \"}\";\r\n                }\r\n                else\r\n                {\r\n                    parts[i] = part.ToLower();\r\n                }\r\n            }\r\n\r\n            if (parts.Any())\r\n            {\r\n                route.Append(parts.Join(\"/\").Replace('^', '_'));\r\n            }\r\n        }\r\n\r\n        public static List<string> AddHttpConstraints(IRouteDefinition route, string methodName)\r\n        {\r\n            var parts = methodName.Replace(\"___\", \"-\").Replace(\"__\", \"_^\").Split('_').ToList();\r\n\r\n            var method = parts.First().ToUpper();\r\n            if (RouteDefinition.VERBS.Contains(method))\r\n            {\r\n                route.AddHttpMethodConstraint(method);\r\n                parts.RemoveAt(0);\r\n            }\r\n            return parts;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Conventions/OutputBeforeAjaxContinuationPolicy.cs",
    "content": "using System;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Ajax;\r\nusing System.Linq;\r\nusing System.Collections.Generic;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Resources.Conneg;\r\n\r\nnamespace FubuMVC.Core.Registration.Conventions\r\n{\r\n    public class OutputBeforeAjaxContinuationPolicy : IConfigurationAction\r\n    {\r\n        public void Configure(BehaviorGraph graph)\r\n        {\r\n            graph.Chains\r\n                .Where(x => x.ResourceType().CanBeCastTo<AjaxContinuation>() && !x.IsAsynchronous())\r\n                .ToList()\r\n                .Each(Modify);\r\n\r\n            \r\n        }\r\n\r\n        // TODO -- got to be a smarter way to do this.\r\n        public static void Modify(BehaviorChain chain)\r\n        {\r\n            // Not everything is hard\r\n            var output = chain.Output.As<BehaviorNode>();\r\n            output.Remove();\r\n\r\n            if (chain.OfType<InputNode>().Any())\r\n            {\r\n                chain.Input.As<BehaviorNode>().AddAfter(output);\r\n            }\r\n            else\r\n            {\r\n                chain.FirstCall().AddBefore(output);\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Conventions/ReorderBehaviorsPolicy.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Core.Registration.Conventions\r\n{\r\n    [Title(\"Behavior Ordering Rule\")]\r\n    [CanBeMultiples]\r\n    public class ReorderBehaviorsPolicy : IConfigurationAction\r\n    {\r\n        public Func<BehaviorNode, bool> WhatMustBeBefore { get; set; }\r\n        public Func<BehaviorNode, bool> WhatMustBeAfter { get; set; }\r\n\r\n        private string _beforeDescription = \"Before\";\r\n        private string _afterDescription = \"After\";\r\n\r\n        public override string ToString()\r\n        {\r\n            return \"Reordering, what must be before: {0}, and what must be after {1}\".ToFormat(_beforeDescription,\r\n                _afterDescription);\r\n        }\r\n\r\n        public void Configure(BehaviorGraph graph)\r\n        {\r\n            graph.Chains.SelectMany(x => x).Where(WhatMustBeAfter).ToList().Each(shouldBeAfter =>\r\n            {\r\n                shouldBeAfter.ForFollowingBehavior(new BehaviorSearch(WhatMustBeBefore){\r\n                    OnFound = shouldBeAfter.AddBefore\r\n                });\r\n            });\r\n        }\r\n\r\n        public BehaviorCategory CategoryMustBeBefore\r\n        {\r\n            set\r\n            {\r\n                WhatMustBeBefore = node => node.Category == value;\r\n                _beforeDescription = \"Category \" + value;\r\n            }\r\n        }\r\n\r\n        public BehaviorCategory CategoryMustBeAfter\r\n        {\r\n            set\r\n            {\r\n                WhatMustBeAfter = node => node.Category == value;\r\n                _afterDescription = \"Category \" + value;\r\n            }\r\n        }\r\n\r\n        public ReorderBehaviorsPolicy ThisNodeMustBeBefore<T>() where T : BehaviorNode\r\n        {\r\n            WhatMustBeBefore = node => node is T;\r\n            _beforeDescription = \"Node \" + typeof (T).FullName;\r\n\r\n            return this;\r\n        }\r\n\r\n        public ReorderBehaviorsPolicy ThisNodeMustBeAfter<T>() where T : BehaviorNode\r\n        {\r\n            WhatMustBeAfter = node => node is T;\r\n            _afterDescription = \"Node \" + typeof(T).FullName;\r\n\r\n            return this;\r\n        }\r\n\r\n        public static Func<BehaviorNode, bool> FuncForWrapper(Type wrapperType)\r\n        {\r\n            return node => node is Wrapper && node.As<Wrapper>().BehaviorType == wrapperType;\r\n        }\r\n\r\n        public void ThisWrapperBeBefore<T>() where T : IActionBehavior\r\n        {\r\n            WhatMustBeBefore = FuncForWrapper(typeof (T));\r\n            _beforeDescription = \"Behavior \" + typeof (T).FullName;\r\n        }\r\n\r\n        public void ThisWrapperMustBeAfter<T>() where T : IActionBehavior\r\n        {\r\n            WhatMustBeAfter = FuncForWrapper(typeof(T));\r\n            _afterDescription = \"Behavior \" + typeof(T).FullName;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Conventions/UrlPatternAttributePolicy.cs",
    "content": "using FubuCore.Descriptions;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\n\r\nnamespace FubuMVC.Core.Registration.Conventions\r\n{\r\n    [Title(\"Explicitly definined route via the [UrlPattern]\")]\r\n    public class UrlPatternAttributePolicy : IUrlPolicy\r\n    {\r\n        public bool Matches(ActionCall call)\r\n        {\r\n            return call.HasAttribute<UrlPatternAttribute>();\r\n        }\r\n\r\n        public IRouteDefinition Build(ActionCall call)\r\n        {\r\n            return call.Method.GetAttribute<UrlPatternAttribute>().BuildRoute(call.InputType());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Conventions/UrlPolicies.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\n\r\nnamespace FubuMVC.Core.Registration.Conventions\r\n{\r\n    public class UrlPolicies\r\n    {\r\n        public readonly IList<IUrlPolicy> Policies = new List<IUrlPolicy>\r\n        {\r\n            new UrlPatternAttributePolicy(),\r\n            new DefaultRouteConventionBasedUrlPolicy(),\r\n            new MethodToUrlBuilder(),\r\n            new DefaultUrlPolicy()\r\n        };\r\n\r\n        public IRouteDefinition BuildRoute(ActionCall call)\r\n        {\r\n            var policy = Policies.First(x => x.Matches(call));\r\n            return policy.Build(call);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/CoreServiceRegistry.cs",
    "content": "using FubuCore;\nusing FubuCore.Binding;\nusing FubuCore.Configuration;\nusing FubuCore.Conversion;\nusing FubuCore.Dates;\nusing FubuCore.Formatting;\nusing FubuCore.Logging;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Assets;\nusing FubuMVC.Core.Assets.JavascriptRouting;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Diagnostics;\nusing FubuMVC.Core.Diagnostics.Assets;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Http.Compression;\nusing FubuMVC.Core.Http.Cookies;\nusing FubuMVC.Core.Http.Owin.Middleware;\nusing FubuMVC.Core.Json;\nusing FubuMVC.Core.Projections;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Runtime.Aggregation;\nusing FubuMVC.Core.Runtime.Conditionals;\nusing FubuMVC.Core.Runtime.SessionState;\nusing FubuMVC.Core.Urls;\nusing FubuMVC.Core.View;\n\nnamespace FubuMVC.Core.Registration\n{\n    /// <summary>\n    /// The core runtime service registry for a FubuMVC application\n    /// </summary>\n    public class CoreServiceRegistry : ServiceRegistry\n    {\n        public CoreServiceRegistry(string mode)\n        {\n            AddService<IDeactivator, MiddlewareDeactivator>();\n\n            SetServiceIfNone<IAggregator, Aggregator>();\n\n            SetServiceIfNone<IRequestData, FubuMvcRequestData>();\n\n            For<AppReloaded>().Use(new AppReloaded());\n\n            SetServiceIfNone<IDiagnosticAssets, DiagnosticAssetsCache>().Singleton();\n\n            // HAck alert. Inconsistent usage in the app, so you're stuck with this.\n            var stringifier = new Stringifier();\n            For<Stringifier>().Use(stringifier);\n            For<IStringifier>().Use(stringifier);\n\n            AddService(new TypeDescriptorCache());\n\n            SetServiceIfNone<IConditionalService, ConditionalService>();\n            SetServiceIfNone<IOutputWriter, OutputWriter>();\n\n            SetServiceIfNone<IUrlRegistry, UrlRegistry>();\n            SetServiceIfNone<IChainUrlResolver, ChainUrlResolver>();\n\n            SetServiceIfNone<IFlash, FlashProvider>();\n            SetServiceIfNone<IRequestDataProvider, RequestDataProvider>();\n\n            SetServiceIfNone<IFubuRequest, FubuRequest>();\n            SetServiceIfNone<IPartialFactory, PartialFactory>();\n            SetServiceIfNone<IContinuationProcessor, ContinuationProcessor>();\n\n            SetServiceIfNone<IDisplayFormatter, DisplayFormatter>();\n            SetServiceIfNone<IChainResolver, ChainResolutionCache>().Singleton();\n\n            SetServiceIfNone<IEndpointService, EndpointService>();\n\n\n            SetServiceIfNone<ITypeDescriptorCache, TypeDescriptorCache>().Singleton();\n\n            SetServiceIfNone<ISessionState, SimpleSessionState>();\n\n\n            SetServiceIfNone<IFubuRequestContext, FubuRequestContext>();\n            SetServiceIfNone<IFileSystem, FileSystem>();\n\n\n            SetServiceIfNone<IObjectConverter, ObjectConverter>();\n\n            SetServiceIfNone<IResourceNotFoundHandler, DefaultResourceNotFoundHandler>();\n\n\n            SetServiceIfNone<ILogger, Logger>();\n            AddService<ILogModifier, LogRecordModifier>();\n\n            SetServiceIfNone<IClock, Clock>().Singleton();\n            SetServiceIfNone<ITimeZoneContext, MachineTimeZoneContext>();\n            SetServiceIfNone<ISystemTime, SystemTime>();\n\n            SetServiceIfNone<IExceptionHandlingObserver, ExceptionHandlingObserver>();\n\n            SetServiceIfNone<IPartialInvoker, PartialInvoker>();\n\n            AddService<IHttpContentEncoding, GZipHttpContentEncoding>();\n            AddService<IHttpContentEncoding, DeflateHttpContentEncoding>();\n            SetServiceIfNone<IHttpContentEncoders, HttpContentEncoders>();\n\n            SetServiceIfNone<ICookies, Cookies>();\n\n            if (mode.InDevelopment())\n            {\n                SetServiceIfNone<IAssetTagBuilder, DevelopmentModeAssetTagBuilder>();\n            }\n            else\n            {\n                SetServiceIfNone<IAssetTagBuilder, AssetTagBuilder>();\n            }\n\n            SetServiceIfNone<IJavascriptRouteData, JavascriptRouteData>();\n\n            For(typeof (IValues<>)).Use(typeof (SimpleValues<>));\n            For(typeof (IValueSource<>)).Use(typeof (ValueSource<>));\n\n            SetServiceIfNone<IProjectionRunner, ProjectionRunner>();\n            For(typeof (IProjectionRunner<>)).Use(typeof (ProjectionRunner<>));\n\n            SetServiceIfNone<IProjectionRunner, ProjectionRunner>();\n\n            SetServiceIfNone<ISettingsProvider, SettingsProvider>();\n            AddService<ISettingsSource>(new AppSettingsSettingSource(SettingCategory.environment));\n\n            SetServiceIfNone<IAssetFinder, AssetFinderCache>().Singleton();\n\n            SetServiceIfNone<IClientMessageCache, ClientMessageCache>().Singleton();\n\n            SetServiceIfNone<IJsonSerializer, NewtonSoftJsonSerializer>();\n\n            SetServiceIfNone<IPartialInvoker, PartialInvoker>();\n            AddService<IActivator>(typeof(DisplayConversionRegistryActivator));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/DSL/ActionCallCandidateExpression.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing FubuCore;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core.ServiceBus.Web;\r\n\r\nnamespace FubuMVC.Core.Registration.DSL\r\n{\r\n    public class ActionCallCandidateExpression\r\n    {\r\n        private readonly ConfigGraph _configuration;\r\n\r\n        public ActionCallCandidateExpression(ConfigGraph configuration)\r\n        {\r\n            _configuration = configuration;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Find Actions on classes that end on 'Controller' from the main application assembly\r\n        /// </summary>\r\n        public ActionCallCandidateExpression IncludeClassesSuffixedWithController()\r\n        {\r\n            return FindBy(x => x.IncludeClassesSuffixedWithController());\r\n        }\r\n\r\n        /// <summary>\r\n        /// Create an adhoc policy for discovering actions \r\n        /// </summary>\r\n        /// <param name=\"configuration\"></param>\r\n        public ActionCallCandidateExpression FindBy(Action<ActionSource> configuration)\r\n        {\r\n            var source = new ActionSource();\r\n            configuration(source);\r\n\r\n            return FindWith(source);\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Find actions on the specified type\r\n        /// </summary>\r\n        public ActionCallCandidateExpression IncludeType<T>()\r\n        {\r\n            return FindWith(new SingleTypeActionSource(typeof (T), new ActionMethodFilter()));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Find actions through an <see cref=\"IActionSource\"/> instance.\r\n        /// </summary>\r\n        public ActionCallCandidateExpression FindWith<T>() where T : IActionSource, new()\r\n        {\r\n            return FindWith(new T());\r\n        }\r\n\r\n        /// <summary>\r\n        /// Find actions with the provided <see cref=\"IActionSource\"/> instance.\r\n        /// </summary>\r\n        public ActionCallCandidateExpression FindWith(IActionSource actionSource)\r\n        {\r\n            _configuration.Add(actionSource);\r\n            return this;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds actions in concrete classes that are suffixed with either \"Endpoint\" or\r\n        /// \"Endpoints\" in the main application assembly\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public ActionCallCandidateExpression IncludeClassesSuffixedWithEndpoint()\r\n        {\r\n            return FindWith(new EndpointActionSource());\r\n        }\r\n\r\n        public ActionCallCandidateExpression DisableDefaultActionSource()\r\n        {\r\n            _configuration.Actions.Sources.RemoveAll(x => x is EndpointActionSource || x is SendsMessageActionSource);\r\n            return this;\r\n        }\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/DSL/AppliesToExpression.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing FubuMVC.Core.Services;\r\n\r\nnamespace FubuMVC.Core.Registration.DSL\r\n{\r\n    public class AppliesToExpression\r\n    {\r\n        private readonly IList<Assembly> _assemblies = new List<Assembly>();\r\n\r\n        internal IEnumerable<Assembly> Assemblies\r\n        {\r\n            get { return _assemblies; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Include the calling assembly (i.e., the assembly of your code calling this method)\r\n        /// </summary>\r\n        public void ToThisAssembly()\r\n        {\r\n            ToAssembly(AssemblyFinder.FindTheCallingAssembly());\r\n        }\r\n\r\n        /// <summary>\r\n        /// Include the given assembly\r\n        /// </summary>\r\n        public void ToAssembly(Assembly assembly)\r\n        {\r\n            _assemblies.Add(assembly);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Include the assembly containing the provided type\r\n        /// </summary>\r\n        public void ToAssemblyContainingType<T>()\r\n        {\r\n            ToAssemblyContainingType(typeof (T));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Include the assembly containing the provided type\r\n        /// </summary>\r\n        public void ToAssemblyContainingType(Type type)\r\n        {\r\n            ToAssembly(type.Assembly);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Include the assembly identified by the provided name.\r\n        /// All restrictions known from <see cref=\"Assembly.Load(string)\"/> apply.\r\n        /// </summary>\r\n        public void ToAssembly(string assemblyName)\r\n        {\r\n            var assembly = Assembly.Load(assemblyName);\r\n            ToAssembly(assembly);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/DSL/Feature.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.Registration.DSL\n{\n    public class Feature<TSettings, TEnabled> where TSettings : class, new()\n    {\n        protected readonly FubuRegistry _parent;\n        private readonly Action<TSettings, TEnabled> _onEnabled;\n\n        public Feature(FubuRegistry parent, Action<TSettings, TEnabled> onEnabled)\n        {\n            _parent = parent;\n            _onEnabled = onEnabled;\n        }\n\n        public void Enable(TEnabled enabled)\n        {\n            _parent.AlterSettings<TSettings>(settings => _onEnabled(settings, enabled));\n        }\n\n        public void Configure(Action<TSettings> configure)\n        {\n            _parent.AlterSettings(configure);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/DSL/FeatureExpression.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Security.AntiForgery;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.ServerSentEvents;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing FubuMVC.Core.ServiceBus.Sagas;\nusing FubuMVC.Core.Validation.Web;\n\nnamespace FubuMVC.Core.Registration.DSL\n{\n    public class FeatureExpression\n    {\n        private readonly FubuRegistry _parent;\n\n        public FeatureExpression(FubuRegistry parent)\n        {\n            _parent = parent;\n        }\n\n        /// <summary>\n        /// Configure the onboard diagnostics behavior\n        /// </summary>\n        public Feature<DiagnosticsSettings, TraceLevel> Diagnostics\n        {\n            get\n            {\n                return new Feature<DiagnosticsSettings, TraceLevel>(_parent, (settings, level) => settings.TraceLevel = level);\n            }\n        }\n\n        /// <summary>\n        /// Configure and enable the built in authentication features\n        /// </summary>\n        public Feature<AuthenticationSettings, bool> Authentication\n        {\n            get\n            {\n                return new Feature<AuthenticationSettings, bool>(_parent, (settings, enabled) => settings.Enabled = enabled);\n            }\n        }\n\n        /// <summary>\n        /// Configure and enable the built in localization features\n        /// </summary>\n        public Feature<LocalizationSettings, bool> Localization\n        {\n            get\n            {\n                return new Feature<LocalizationSettings, bool>(_parent, (settings, enabled) => settings.Enabled = enabled);\n            }\n        }\n\n        /// <summary>\n        /// Configure and enable the built in anti-forgery functionality\n        /// </summary>\n        public Feature<AntiForgerySettings, bool> AntiForgery\n        {\n            get\n            {\n                return new Feature<AntiForgerySettings, bool>(_parent, (settings, enabled) => settings.Enabled = enabled);\n            }\n        }\n\n        /// <summary>\n        /// Enable the Server Sent Events feature\n        /// </summary>\n        public Feature<ServerSentEventsSettings, bool> ServerSentEvents\n        {\n            get\n            {\n                return new Feature<ServerSentEventsSettings, bool>(_parent, (x, enabled) => x.Enabled = enabled);\n            }\n        }\n\n        public Feature<ValidationSettings, bool> Validation\n        {\n            get\n            {\n                return new Feature<ValidationSettings, bool>(_parent, (x, enabled) => x.Enabled = enabled);\n            }\n        } \n\n    }\n\n    public class ServiceBusFeature : Feature<TransportSettings, bool>\n    {\n        public ServiceBusFeature(FubuRegistry parent)\n            : base(parent, (settings, enabled) => settings.Enabled = enabled)\n        {\n        }\n\n        /// <summary>\n        /// Enable the in memory transport\n        /// </summary>\n        public void EnableInMemoryTransport(Uri replyUri = null)\n        {\n            Configure(x =>\n            {\n                x.InMemoryTransport = InMemoryTransportMode.Enabled;\n                if (replyUri != null)\n                {\n                    x.InMemoryReplyUri = replyUri;\n                }\n            });\n        }\n\n\n        public void SagaStorage<T>() where T : ISagaStorage, new()\n        {\n            Configure(x => x.SagaStorageProviders.Add(new T()));\n        }\n\n        public void DefaultSerializer<T>() where T : IMessageSerializer, new()\n        {\n            _parent.AlterSettings<ChannelGraph>(graph => graph.DefaultContentType = new T().ContentType);\n        }\n\n        public void DefaultContentType(string contentType)\n        {\n            _parent.AlterSettings<ChannelGraph>(graph => graph.DefaultContentType = contentType);\n        }\n\n\n\n        public HealthMonitoringExpression HealthMonitoring\n        {\n            get\n            {\n                return new HealthMonitoringExpression(_parent);\n            }\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/DSL/ModelsExpression.cs",
    "content": "using System;\r\nusing System.Reflection;\r\nusing FubuCore.Binding;\r\n\r\nnamespace FubuMVC.Core.Registration.DSL\r\n{\r\n    public class ModelsExpression\r\n    {\r\n        private readonly ServiceRegistry _registry;\r\n\r\n        public ModelsExpression(ServiceRegistry registry)\r\n        {\r\n            _registry = registry;\r\n        }\r\n\r\n        public ModelsExpression ConvertUsing<T>() where T : IConverterFamily\r\n        {\r\n            _registry.AddService<IConverterFamily, T>();\r\n            return this;\r\n        }\r\n\r\n        public ModelsExpression BindPropertiesWith<T>() where T : IPropertyBinder\r\n        {\r\n            _registry.AddService<IPropertyBinder, T>();\r\n            return this;\r\n        }\r\n\r\n        public ModelsExpression BindModelsWith<T>() where T : IModelBinder\r\n        {\r\n            _registry.AddService<IModelBinder, T>();\r\n            return this;\r\n        }\r\n\r\n        public ModelsExpression IgnoreProperties(Func<PropertyInfo, bool> filter)\r\n        {\r\n            var binder = new IgnorePropertyBinder(filter);\r\n            _registry.AddService<IPropertyBinder>(binder);\r\n\r\n            return this;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/DSL/PoliciesExpression.cs",
    "content": "using System;\r\nusing FubuCore.Formatting;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Registration.DSL\r\n{\r\n    public class PoliciesExpression\r\n    {\r\n        private readonly ConfigGraph _graph;\r\n\r\n        public PoliciesExpression(ConfigGraph configuration) \r\n        {\r\n            _graph = configuration;\r\n        }\r\n\r\n        public PolicyAdderExpression Global\r\n        {\r\n            get\r\n            {\r\n                return new PolicyAdderExpression(_graph.Global);\r\n            }\r\n        }\r\n\r\n        public PolicyAdderExpression Local\r\n        {\r\n            get\r\n            {\r\n                return new PolicyAdderExpression(_graph.Local);\r\n            }\r\n        }\r\n\r\n        public void StringConversions<T>() where T : DisplayConversionRegistry, new()\r\n        {\r\n            var conversions = new T();\r\n\r\n            addStringConversions(conversions);\r\n        }\r\n\r\n\r\n        private void addStringConversions(DisplayConversionRegistry conversions)\r\n        {\r\n            _graph.ApplicationServices.For<DisplayConversionRegistry>().Add(conversions);\r\n        }\r\n\r\n        public void StringConversions(Action<DisplayConversionRegistry> configure)\r\n        {\r\n            var conversions = new DisplayConversionRegistry();\r\n            configure(conversions);\r\n\r\n            addStringConversions(conversions);\r\n        }\r\n\r\n        public void ChainSource<T>() where T : IChainSource, new()\r\n        {\r\n            _graph.Add(new T());\r\n        }\r\n\r\n        public void ChainSource(IChainSource source)\r\n        {\r\n            _graph.Add(source);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/DSL/PolicyAdderExpression.cs",
    "content": "using System;\r\nusing FubuMVC.Core.Http.Compression;\r\nusing FubuMVC.Core.Registration.Conventions;\r\n\r\nnamespace FubuMVC.Core.Registration.DSL\r\n{\r\n    public interface IConfigGraph\r\n    {\r\n        void Add(IConfigurationAction action);\r\n        void Reorder(IConfigurationAction action);\r\n\r\n    }\r\n\r\n    public class PolicyAdderExpression\r\n    {\r\n        public readonly static HttpContentEncodingFilter DefaultFilter = new HttpContentEncodingFilter(new HttpContentEncoders(new IHttpContentEncoding[] { new GZipHttpContentEncoding(), new DeflateHttpContentEncoding() }));\r\n\r\n\r\n        protected PolicyGraph Configuration;\r\n\r\n        public PolicyAdderExpression(PolicyGraph configuration)\r\n        {\r\n            Configuration = configuration;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Apply a new behavior re-ordering rule in order to force behaviors to a certain order.\r\n        /// For example, force Authentication behaviors to always be before Authorization behaviors\r\n        /// </summary>\r\n        /// <param name=\"configure\"></param>\r\n        /// <returns></returns>\r\n        public PolicyAdderExpression Reorder(Action<ReorderBehaviorsPolicy> configure)\r\n        {\r\n            var policy = new ReorderBehaviorsPolicy();\r\n            configure(policy);\r\n\r\n            Configuration.Reordering.Fill(policy);\r\n\r\n            return this;\r\n        }\r\n\r\n        public PolicyAdderExpression Add<T>() where T : IConfigurationAction, new()\r\n        {\r\n            return Add(new T());\r\n        }\r\n\r\n        public PolicyAdderExpression Add<T>(Action<T> configure)\r\n            where T : IConfigurationAction, new()\r\n        {\r\n            var action = new T();\r\n            configure(action);\r\n\r\n            return Add(action);\r\n        }\r\n\r\n        public PolicyAdderExpression Configure(Action<BehaviorGraph> configuration)\r\n        {\r\n            var action = new LambdaConfigurationAction(configuration);\r\n            return Add(action);\r\n        }\r\n\r\n\r\n        public PolicyAdderExpression Add(IConfigurationAction action)\r\n        {\r\n            Configuration.Policies.Fill(action);\r\n\r\n            return this;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/DSL/TypeMethodPolicy.cs",
    "content": "using System;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing FubuCore.Reflection;\r\nusing FubuCore.Util;\r\n\r\nnamespace FubuMVC.Core.Registration.DSL\r\n{\r\n    public class TypeMethodPolicy<T>\r\n    {\r\n        private readonly CompositeFilter<MethodInfo> _filter;\r\n\r\n        public TypeMethodPolicy(CompositeFilter<MethodInfo> filter)\r\n        {\r\n            _filter = filter;\r\n        }\r\n\r\n        public void Include(Expression<Action<T>> expression)\r\n        {\r\n            MethodInfo method = ReflectionHelper.GetMethod(expression);\r\n            _filter.Includes += m => m.Name == method.Name;\r\n        }\r\n\r\n        public void IncludeMethods(Expression<Func<MethodInfo, bool>> filter)\r\n        {\r\n            _filter.Includes += filter;\r\n        }\r\n\r\n        public void Exclude(Expression<Action<T>> expression)\r\n        {\r\n            MethodInfo method = ReflectionHelper.GetMethod(expression);\r\n            _filter.Excludes += m => m.Name == method.Name;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/EndpointActionSource.cs",
    "content": "namespace FubuMVC.Core.Registration\r\n{\r\n    public class EndpointActionSource : ActionSource\r\n    {\r\n        public EndpointActionSource()\r\n        {\r\n            IncludeClassesSuffixedWithEndpoint();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/FeatureLoader.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing StructureMap.Graph.Scanning;\n\nnamespace FubuMVC.Core.Registration\n{\n    public class FeatureLoader\n    {\n        private Task<IEnumerable<Type>> _types;\n\n        public void LookForFeatures()\n        {\n            _types = TypeRepository\n                .FindTypes(\n                    GetType().Assembly,\n                    TypeClassification.Concretes | TypeClassification.Closed,\n                    x => x.CanBeCastTo<IFeatureSettings>()\n                );\n        }\n\n        public Task ApplyAll(SettingsCollection settings, FubuRegistry registry)\n        {\n            return\n                _types.ContinueWith(\n                    t => { t.Result.Each(type => settings.Get(type).As<IFeatureSettings>().Apply(registry)); });\n        }\n\n        public interface IFeature\n        {\n            void Apply(SettingsCollection settings, FubuRegistry registry);\n        }\n\n        public class Feature<T> : IFeature where T : class, IFeatureSettings\n        {\n            public void Apply(SettingsCollection settings, FubuRegistry registry)\n            {\n                settings.Get<T>().As<IFeatureSettings>().Apply(registry);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/FilterAttribute.cs",
    "content": "using System;\r\nusing System.Reflection;\r\nusing System.Runtime.Serialization;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuCore;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    /// <summary>\r\n    /// Can be used to add one-off ActionFilter's to a single method or action class.\r\n    /// Can only be used with classes that have exactly one public method\r\n    /// </summary>\r\n    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]\r\n    public class FilterAttribute : ModifyChainAttribute\r\n    {\r\n        private readonly Type _filterType;\r\n        private readonly MethodInfo _method;\r\n\r\n        public FilterAttribute(Type filterType)\r\n        {\r\n            _filterType = filterType;\r\n            _method = DetermineMethod(filterType);\r\n        }\r\n\r\n        public override void Alter(ActionCallBase call)\r\n        {\r\n            var filter = new ActionFilter(_filterType, _method);\r\n            call.AddBefore(filter);\r\n        }\r\n\r\n        public static MethodInfo DetermineMethod(Type type)\r\n        {\r\n            var methods = type.GetMethods().Where(m => m.DeclaringType != typeof (object)).ToList();\r\n            if (methods.Count() != 1)\r\n            {\r\n                throw new InvalidActionFilterTypeException(type);\r\n            }\r\n\r\n            return methods.Single();\r\n        }\r\n    }\r\n\r\n    [Serializable]\r\n    public class InvalidActionFilterTypeException : Exception\r\n    {\r\n        public InvalidActionFilterTypeException(Type filterType) : base(\"Type {0} cannot be used.  Only types with one single public method can be used with the [Filter(type)] attribute\".ToFormat(filterType.FullName))\r\n        {\r\n        }\r\n\r\n        protected InvalidActionFilterTypeException(SerializationInfo info, StreamingContext context) : base(info, context)\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/FubuExtensionFinder.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Core.Registration\n{\n    /// <summary>\n    /// Helper class to find and apply concrete IFubuRegistryExtension classes in Bottle assemblies\n    /// </summary>\n    public static class FubuExtensionFinder\n    {\n        public static IEnumerable<IImporter> FindAllExtensions(this Assembly assembly, IActivationDiagnostics diagnostics)\n        {\n            // Yeah, it really does have to be this way\n            // TODO -- use TypeRepository here.\n            var log = diagnostics.LogFor(assembly);\n            return assembly.GetExportedTypes().Where(isExtension).Select(type => typeof(Importer<>).CloseAndBuildAs<IImporter>(log,type));\n        }\n\n\n        private static bool isExtension(Type type)\n        {\n            return type.CanBeCastTo<IFubuRegistryExtension>()\n                   && !type.IsOpenGeneric()\n                   && type.IsConcreteWithDefaultCtor()\n                   && !type.HasAttribute<DoNotAutoImportAttribute>();\n        }\n\n\n        public interface IImporter\n        {\n            void Apply(FubuRegistry registry);\n        }\n\n        public class Importer<T> : IImporter where T : IFubuRegistryExtension, new()\n        {\n            private readonly IActivationLog _log;\n\n            public Importer(IActivationLog log)\n            {\n                _log = log;\n            }\n\n            public void Apply(FubuRegistry registry)\n            {\n                _log.Trace(\"Applying extension \" + typeof(T).FullName);\n                registry.Import<T>();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/IAccessorRulesExpression.cs",
    "content": "﻿namespace FubuMVC.Core.Registration\r\n{\r\n    public interface IAccessorRulesExpression\r\n    {\r\n        IAccessorRulesExpression Add(object rule);\r\n        IAccessorRulesExpression Add<T>() where T : new();\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/IAccessorRulesRegistration.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\nusing StructureMap.Graph.Scanning;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public interface IAccessorRulesRegistration\r\n    {\r\n        void AddRules(AccessorRules rules);\r\n    }\r\n\r\n    public static class AccessorRulesCompiler\r\n    {\r\n        public static bool IsAccessorRule(Type type)\r\n        {\r\n            return type.IsConcreteWithDefaultCtor() && type.CanBeCastTo<IAccessorRulesRegistration>();\r\n        }\r\n\r\n        public static Task Compile(BehaviorGraph graph, IPerfTimer timer)\r\n        {\r\n            return TypeRepository.FindTypes(graph.AllAssemblies(),\r\n                TypeClassification.Concretes | TypeClassification.Closed, IsAccessorRule)\r\n                .ContinueWith(t =>\r\n                {\r\n                    var rules = new AccessorRules();\r\n                    t.Result.Distinct()                        \r\n                        .Select(x => Activator.CreateInstance(x).As<IAccessorRulesRegistration>())\r\n                        .Each(x => x.AddRules(rules));\r\n\r\n                    graph.Settings.Replace(rules);\r\n                });\r\n\r\n\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/IActionSource.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Reflection;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    /// <summary>\r\n    /// Implementations of this contract inspect a given <see cref=\"TypePool\"/>\r\n    /// and provide any number of <see cref=\"ActionCall\"/> instances.\r\n    /// </summary>\r\n    public interface IActionSource\r\n    {\r\n        Task<ActionCall[]> FindActions(Assembly applicationAssembly);\r\n    }\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/IChainSource.cs",
    "content": "using System.Threading.Tasks;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\nusing FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public interface IChainSource\r\n    {\r\n        Task<BehaviorChain[]> BuildChains(BehaviorGraph graph, IPerfTimer timer);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/IConfigurationAction.cs",
    "content": "using System;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public interface IConfigurationAction\r\n    {\r\n        void Configure(BehaviorGraph graph);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/IFeatureSettings.cs",
    "content": "﻿\nnamespace FubuMVC.Core.Registration\n{\n    public interface IFeatureSettings\n    {\n        void Apply(FubuRegistry registry);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/IServiceRegistrationConvention.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n\tpublic interface IServiceRegistrationConvention\r\n\t{\r\n\t\tvoid Register(IEnumerable<Type> matchedTypes, ServiceRegistry services);\r\n\t}\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/ISettingsAlteration.cs",
    "content": "﻿namespace FubuMVC.Core.Registration\r\n{\r\n    public interface ISettingsAlteration\r\n    {\r\n        void Alter(SettingsCollection settings);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/LambdaConfigurationAction.cs",
    "content": "using System;\r\nusing FubuCore.Descriptions;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    [Title(\"Explicit configuration action\")]\r\n    public class LambdaConfigurationAction : IConfigurationAction\r\n    {\r\n        private readonly Action<BehaviorGraph> _action;\r\n\r\n        public LambdaConfigurationAction(Action<BehaviorGraph> action)\r\n        {\r\n            _action = action;\r\n        }\r\n\r\n        public void Configure(BehaviorGraph graph)\r\n        {\r\n            _action(graph);\r\n        }\r\n    }\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/ModifyChainAttribute.cs",
    "content": "using System;\r\nusing FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public abstract class ModifyChainAttribute : Attribute\r\n    {\r\n        public abstract void Alter(ActionCallBase call);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/ActionCall.cs",
    "content": "using System;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Registration.Conventions;\r\nusing FubuMVC.Core.Registration.Routes;\r\n\r\nnamespace FubuMVC.Core.Registration.Nodes\r\n{\r\n    /// <summary>\r\n    /// A Fubu-specific representation of a method that can be treated as \r\n    /// Action. Such a method must adhere to a number of rules e.g. the one-model-in one-model-out pattern.\r\n    /// If you are unsure whether you method is eligible, you can instantiate an ActionCall and\r\n    /// call <see cref=\"ActionCallBase.Validate\"/>\r\n    /// </summary>\r\n    public class ActionCall : ActionCallBase, IMayHaveInputType, IMayHaveResourceType, DescribesItself\r\n    {\r\n        \r\n        public ActionCall(Type handlerType, MethodInfo method) : base(handlerType, method)\r\n        {\r\n        }\r\n\r\n        public override BehaviorCategory Category => BehaviorCategory.Call;\r\n\r\n\r\n        public static ActionCall For<T>(Expression<Action<T>> expression)\r\n        {\r\n            var method = ReflectionHelper.GetMethod(expression);\r\n            return new ActionCall(typeof (T), method);\r\n        }\r\n\r\n        public static ActionCall For<T>(Expression<Func<T, object>> expression)\r\n        {\r\n            var method = ReflectionHelper.GetMethod(expression);\r\n            return new ActionCall(typeof(T), method);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This method creates an ActionCall for an action type with only\r\n        /// one public method.  This method will throw an exception for\r\n        /// any actionType with more than one public method\r\n        /// </summary>\r\n        /// <param name=\"actionType\"></param>\r\n        /// <returns></returns>\r\n        public static ActionCall For(Type actionType)\r\n        {\r\n            try\r\n            {\r\n                var method = actionType.GetMethods().Single(x => x.DeclaringType != typeof(object));\r\n                return new ActionCall(actionType, method);\r\n            }\r\n            catch (InvalidOperationException)\r\n            {\r\n                throw new ArgumentOutOfRangeException(\"Only actions with one and only one public method can be used in this method\");\r\n            }\r\n        }\r\n\r\n        public static ActionCall ForOpenType(Type openType, params Type[] parameterTypes)\r\n        {\r\n            var closedType = openType.MakeGenericType(parameterTypes);\r\n            return For(closedType);\r\n        }\r\n\r\n        public IRouteDefinition ToRouteDefinition()\r\n        {\r\n            if (!HasInput) return RouteDefinition.Empty();\r\n\r\n            try\r\n            {\r\n                Type defType = typeof (RouteInput<>).MakeGenericType(InputType());\r\n                var input = (IRouteInput)Activator.CreateInstance(defType, string.Empty);\r\n\r\n                RouteBuilder.PopulateQuerystringParameters(InputType(), input);\r\n\r\n                return input.Parent;\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                throw new FubuException(1001, e, \"Could not create a RouteInput<> for {0}\",\r\n                                        InputType().AssemblyQualifiedName);\r\n            }\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return $\"Call {Description}\";\r\n        }\r\n\r\n        public bool Equals(ActionCall other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return other.HandlerType.FullName.Equals(HandlerType.FullName) && other.Method.Matches(Method);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof (ActionCall)) return false;\r\n            return Equals((ActionCall) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                return ((HandlerType?.FullName.GetHashCode() ?? 0)*397) ^\r\n                       (Method?.Name.GetHashCode() ?? 0);\r\n            }\r\n        }\r\n\r\n\r\n\r\n        public IRouteDefinition BuildRouteForPattern(string pattern)\r\n        {\r\n            return HasInput\r\n               ? RouteBuilder.Build(InputType(), pattern)\r\n               : new RouteDefinition(pattern);\r\n        }\r\n\r\n        public BehaviorChain BuildChain(UrlPolicies urlPolicies)\r\n        {\r\n            var chain = buildChain(urlPolicies);\r\n\r\n            chain.AddToEnd(this);\r\n\r\n            ForAttributes<ModifyChainAttribute>(att => att.Alter(this));\r\n\r\n            return chain;\r\n        }\r\n\r\n        private BehaviorChain buildChain(UrlPolicies urlPolicies)\r\n        {\r\n            if (HasAttribute<FubuPartialAttribute>() || Method.Name.EndsWith(\"Partial\"))\r\n            {\r\n                return new BehaviorChain\r\n                {\r\n                    IsPartialOnly = true\r\n                };\r\n            }\r\n\r\n            var route = urlPolicies.BuildRoute(this);\r\n\r\n            return new RoutedChain(route, InputType(), ResourceType());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/ActionCallBase.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Continuations;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Registration.Nodes\r\n{\r\n    public abstract class ActionCallBase : BehaviorNode, DescribesItself, IModifiesChain\r\n    {\r\n        public Type HandlerType { get; protected set; }\r\n        public MethodInfo Method { get; protected set; }\r\n\r\n        public bool HasInput\r\n        {\r\n            get { return Method.GetParameters().Length > 0; }\r\n        }\r\n\r\n        public bool HasOutput\r\n        {\r\n            get { return Method.ReturnType != typeof (void); }\r\n        }\r\n\r\n        public ActionCallBase(Type handlerType, MethodInfo method)\r\n        {\r\n            Next = null;\r\n\r\n\r\n            setHandlerAndMethod(handlerType, method);\r\n        }\r\n\r\n        protected ActionCallBase()\r\n        {\r\n        }\r\n\r\n        protected void setHandlerAndMethod(Type handlerType, MethodInfo method)\r\n        {\r\n            HandlerType = handlerType;\r\n            Method = method;\r\n        }\r\n\r\n        public bool IsAsync => Method.ReturnType.CanBeCastTo<Task>();\r\n\r\n        public override string Description => \"{0}.{1}({2}) : {3}\".ToFormat(HandlerType.Name, Method.Name, getInputParameters(),\r\n            HasOutput ? Method.ReturnType.Name : \"void\");\r\n\r\n        private string getInputParameters()\r\n        {\r\n            if (! HasInput) return \"\";\r\n\r\n            return Method.GetParameters().Select(p => \"{0} {1}\".ToFormat(p.ParameterType.Name, p.Name)).Join(\", \");\r\n        }\r\n\r\n        public bool Returns<T>()\r\n        {\r\n            return OutputType().CanBeCastTo<T>();\r\n        }\r\n\r\n        protected override IConfiguredInstance buildInstance()\r\n        {\r\n            Validate();\r\n\r\n            var invocationType = typeof(ActionInvocation<>).MakeGenericType(HandlerType);\r\n            var invocation = Activator.CreateInstance(invocationType, Method);\r\n\r\n            var instance = new ConfiguredInstance(typeof(ActionInvoker<>), HandlerType);\r\n            instance.Dependencies.Add(invocationType, invocation);\r\n\r\n\r\n            return instance;\r\n        }\r\n\r\n        public void Validate()\r\n        {\r\n            if (HasOutput && Method.ReturnType.IsValueType)\r\n            {\r\n                throw new FubuException(1004,\r\n                    \"The return type of action '{0}' is a value type (struct). It must be void (no return type) or a reference type (class).\",\r\n                    Description);\r\n            }\r\n\r\n            var parameters = Method.GetParameters();\r\n            if (parameters != null && parameters.Length > 1)\r\n            {\r\n                throw new FubuException(1005,\r\n                    \"Action '{0}' has more than one input parameter. An action must either have no input parameters, or it must have one that is a reference type (class).\",\r\n                    Description);\r\n            }\r\n\r\n            if (HasInput && InputType().IsValueType)\r\n            {\r\n                throw new FubuException(1006,\r\n                    \"The type of the input parameter of action '{0}' is a value type (struct). An action must either have no input parameters, or it must have one that is a reference type (class).\",\r\n                    Description);\r\n            }\r\n        }\r\n\r\n\r\n        private Type getOutputTypeOrVoidTaskResult()\r\n        {\r\n            var genericArguments = Method.ReturnType.GetGenericArguments();\r\n            if (genericArguments.Length == 0)\r\n                return Method.ReturnType;\r\n            return genericArguments.First();\r\n        }\r\n\r\n        public Type OutputType()\r\n        {\r\n            if (Method.ReturnType == typeof (void)) return null;\r\n\r\n            return Method.ReturnType.CanBeCastTo<Task>()\r\n                ? getOutputTypeOrVoidTaskResult()\r\n                : Method.ReturnType;\r\n        }\r\n\r\n        public Type InputType()\r\n        {\r\n            return HasInput ? Method.GetParameters().First().ParameterType : null;\r\n        }\r\n\r\n\r\n        public Type ResourceType()\r\n        {\r\n            return OutputType();\r\n        }\r\n\r\n\r\n        void DescribesItself.Describe(Description description)\r\n        {\r\n            var shortTitle = \"{0}.{1}()\".ToFormat(HandlerType.Name, Method.Name);\r\n\r\n            description.Title = shortTitle;\r\n            description.Properties[\"Handler Type\"] = HandlerType.FullName;\r\n            description.Properties[\"Assembly\"] = HandlerType.Assembly.GetName().Name;\r\n            description.Properties[\"Method\"] = Method.Name;\r\n\r\n\r\n            if (InputType() != null)\r\n            {\r\n                description.Properties[\"Input Type\"] = InputType().FullName;\r\n            }\r\n\r\n            if (ResourceType() != null)\r\n            {\r\n                description.Properties[\"Resource Type\"] = ResourceType().FullName;\r\n            }\r\n        }\r\n\r\n\r\n        public void Modify(BehaviorChain chain)\r\n        {\r\n            var outputType = OutputType();\r\n\r\n\r\n            if (outputType == null) return;\r\n\r\n            if (outputType.CanBeCastTo<FubuContinuation>() || outputType.CanBeCastTo<IRedirectable>())\r\n            {\r\n                AddAfter(new ContinuationNode());\r\n            }\r\n        }\r\n\r\n        public void ForAttributes<T>(Action<T> action) where T : Attribute\r\n        {\r\n            HandlerType.ForAttribute(action);\r\n            Method.ForAttribute(action);\r\n            if (HasInput)\r\n            {\r\n                InputType().ForAttribute(action);\r\n            }\r\n        }\r\n\r\n        public bool HasAttribute<T>() where T : Attribute\r\n        {\r\n            return HandlerType.HasAttribute<T>() || Method.HasAttribute<T>() || (HasInput && InputType().HasAttribute<T>());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/ActionFilter.cs",
    "content": "﻿using System;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing FubuCore.Reflection;\r\n\r\nnamespace FubuMVC.Core.Registration.Nodes\r\n{\r\n    public class ActionFilter : ActionCallBase\r\n    {\r\n        public static ActionFilter For<T>(Expression<Func<T, object>> method)\r\n        {\r\n            return new ActionFilter(typeof(T), ReflectionHelper.GetMethod(method));\r\n        }\r\n\r\n        public ActionFilter(Type handlerType, MethodInfo method) : base(handlerType, method)\r\n        {\r\n        }\r\n\r\n        public override BehaviorCategory Category\r\n        {\r\n            get { return BehaviorCategory.Process; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/BehaviorCategory.cs",
    "content": "namespace FubuMVC.Core.Registration.Nodes\r\n{\r\n    /// <summary>\r\n    /// The known categories of <see cref=\"BehaviorNode\"/> instances.\r\n    /// </summary>\r\n    public enum BehaviorCategory\r\n    {\r\n        Call,\r\n        Output,\r\n        Wrapper,\r\n        Authentication,\r\n        Authorization,\r\n        Process,\r\n        Cache,\r\n        Conditional,\r\n        Instrumentation,\r\n        Transaction,\r\n        Compression\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/BehaviorChain.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Continuations;\r\nusing FubuMVC.Core.Diagnostics.Instrumentation;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration.Conventions;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Security.Authorization;\r\nusing FubuMVC.Core.Urls;\r\nusing FubuMVC.Core.View;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Registration.Nodes\r\n{\r\n    /// <summary>\r\n    ///   BehaviorChain is a configuration model for a single endpoint in a \r\n    ///   FubuMVC system.  Models route information, the behaviors, and \r\n    ///   authorization rules\r\n    ///   system\r\n    /// </summary>\r\n    public class BehaviorChain : Chain<BehaviorNode, BehaviorChain>, IContainerModel, ISubject\r\n    {\r\n        public const string NoTracing = \"NoTracing\";\r\n\r\n        private readonly IList<IBehaviorInvocationFilter> _filters = new List<IBehaviorInvocationFilter>();\r\n        private readonly Lazy<InputNode> _input;\r\n        private Lazy<OutputNode> _output;\r\n\r\n        private readonly Lazy<AuthorizationNode> _authorization =\r\n            new Lazy<AuthorizationNode>(() => new AuthorizationNode());\r\n\r\n        public BehaviorChain()\r\n        {\r\n            UrlCategory = new UrlCategory();\r\n\r\n            _output = new Lazy<OutputNode>(() =>\r\n            {\r\n                var outputType = ResourceType();\r\n                if (outputType == null || outputType == typeof (void))\r\n                    throw new InvalidOperationException(\r\n                        \"Cannot use the OutputNode if the BehaviorChain does not have at least one Action with output\");\r\n\r\n                return new OutputNode(outputType);\r\n            });\r\n\r\n            _input = new Lazy<InputNode>(() =>\r\n            {\r\n                var inputType = InputType();\r\n                if (inputType == null)\r\n                    throw new InvalidOperationException(\r\n                        \"Cannot use the InputNode if the BehaviorChain does not have at least one behavior that requires an input type\");\r\n\r\n                return new InputNode(inputType);\r\n            });\r\n        }\r\n\r\n        public readonly PerformanceHistory Performance = new PerformanceHistory();\r\n\r\n        public int Key\r\n        {\r\n            get { return Title().GetHashCode(); }\r\n        }\r\n\r\n        public bool IsAsynchronous()\r\n        {\r\n            return Calls.Any(x => x.IsAsync);\r\n        }\r\n\r\n        public IOutputNode Output\r\n        {\r\n            get { return _output.Value; }\r\n        }\r\n\r\n        public IInputNode Input\r\n        {\r\n            get { return _input.Value; }\r\n        }\r\n\r\n\r\n        protected internal virtual void InsertNodes(ConnegSettings settings)\r\n        {\r\n            if (HasResourceType() && !ResourceType().CanBeCastTo<FubuContinuation>())\r\n            {\r\n                var outputNode = _output.Value;\r\n                outputNode.UseSettings(settings);\r\n\r\n                AddToEnd(outputNode);\r\n            }\r\n\r\n            if (_authorization.IsValueCreated && Authorization.HasRules())\r\n            {\r\n                Prepend(_authorization.Value);\r\n            }\r\n\r\n            if (InputType() != null)\r\n            {\r\n                _input.Value.UseSettings(settings);\r\n                Prepend(_input.Value);\r\n            }\r\n\r\n            this.OfType<IModifiesChain>().ToArray().Each(x => x.Modify(this));\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Ordered list of IBehaviorInvocationFilter's that can be used\r\n        ///   to apply guard conditions at runtime *before* the behaviors\r\n        ///   are created\r\n        /// </summary>\r\n        public IEnumerable<IBehaviorInvocationFilter> Filters\r\n        {\r\n            get { return _filters; }\r\n        }\r\n\r\n        public void AddFilter(IBehaviorInvocationFilter filter)\r\n        {\r\n            _filters.Add(filter);\r\n        }\r\n\r\n        public Guid UniqueId\r\n        {\r\n            get { return Top == null ? Guid.Empty : Top.UniqueId; }\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Marks what package or FubuRegistry created this BehaviorChain\r\n        ///   for the sake of diagnostics\r\n        /// </summary>\r\n        public string Origin { get; set; }\r\n\r\n        /// <summary>\r\n        ///   All the ActionCall nodes in this chain\r\n        /// </summary>\r\n        public IEnumerable<ActionCall> Calls\r\n        {\r\n            get { return this.OfType<ActionCall>(); }\r\n        }\r\n\r\n        /// <summary>\r\n        ///   All the Output nodes in this chain\r\n        /// </summary>\r\n        public IEnumerable<BehaviorNode> Outputs\r\n        {\r\n            get { return this.Where(x => x.Category == BehaviorCategory.Output); }\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        ///   Marking a BehaviorChain as \"PartialOnly\" means that no\r\n        ///   Route will be generated and registered for this BehaviorChain.  \r\n        ///   Set this property to true if you only want this BehaviorChain\r\n        ///   to apply to partial requests.\r\n        /// </summary>\r\n        public bool IsPartialOnly { get; set; }\r\n\r\n\r\n        /// <summary>\r\n        ///   Model of the authorization rules for this BehaviorChain\r\n        /// </summary>\r\n        public IAuthorizationNode Authorization\r\n        {\r\n            get { return _authorization.Value; }\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Categorizes this BehaviorChain for the IUrlRegistry and \r\n        ///   IEndpointService UrlFor(***, category) methods\r\n        /// </summary>\r\n        public UrlCategory UrlCategory { get; private set; }\r\n\r\n\r\n        public virtual string Category\r\n        {\r\n            get { return UrlCategory == null ? null : UrlCategory.Category; }\r\n        }\r\n\r\n\r\n        Instance IContainerModel.ToInstance()\r\n        {\r\n            return Top.As<IContainerModel>().ToInstance();\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        ///   Tests whether or not this chain has any output nodes\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public bool HasOutput()\r\n        {\r\n            return (Top == null ? false : Top.HasAnyOutputBehavior()) ||\r\n                   (_output.IsValueCreated && _output.Value.Media().Any());\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        ///   What type of resource is rendered by this chain\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public Type ResourceType()\r\n        {\r\n            if (_output.IsValueCreated)\r\n            {\r\n                return _output.Value.ResourceType;\r\n            }\r\n\r\n            return this.OfType<IMayHaveResourceType>().Reverse().FirstValue(x => x.ResourceType());\r\n        }\r\n\r\n        /// <summary>\r\n        ///   The first ActionCall in this BehaviorChain.  Can be null.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public ActionCall FirstCall()\r\n        {\r\n            return Calls.FirstOrDefault();\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Returns the *last* ActionCall in this\r\n        ///   BehaviorChain.  May be null.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public ActionCall LastCall()\r\n        {\r\n            return Calls.LastOrDefault();\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Returns the InputType of the very first\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public Type InputType()\r\n        {\r\n            var calls = this.OfType<IMayHaveInputType>();\r\n            if (calls.Any())\r\n            {\r\n                return calls.FirstValue(x => x.InputType());\r\n            }\r\n\r\n            // This is for chains with an actionless view\r\n            if (HasOutput())\r\n            {\r\n                return ResourceType();\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Creates a new BehaviorChain for an action method\r\n        /// </summary>\r\n        /// <typeparam name = \"T\"></typeparam>\r\n        /// <param name = \"expression\"></param>\r\n        /// <returns></returns>\r\n        public static BehaviorChain For<T>(Expression<Action<T>> expression)\r\n        {\r\n            var call = ActionCall.For(expression);\r\n            return call.BuildChain(new UrlPolicies());\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Checks to see if a Wrapper node of the requested behaviorType anywhere in the chain\r\n        ///   regardless of position\r\n        /// </summary>\r\n        /// <param name = \"behaviorType\"></param>\r\n        /// <returns></returns>\r\n        public bool IsWrappedBy(Type behaviorType)\r\n        {\r\n            return this.Where(x => x is Wrapper).Cast<Wrapper>().Any(x => x.BehaviorType == behaviorType);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return Title();\r\n        }\r\n\r\n        public bool HasReaders()\r\n        {\r\n            return _input.IsValueCreated && _input.Value.Readers().Any();\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Allows you to explicitly force this BehaviorChain to the given\r\n        ///   resource type.  This may be useful when the resource type cannot\r\n        ///   be derived from the existing nodes.  Actionless view endpoints are\r\n        ///   an example in the internals of this usage.\r\n        /// </summary>\r\n        /// <param name = \"type\"></param>\r\n        public void ResourceType(Type type)\r\n        {\r\n            _output = new Lazy<OutputNode>(() => new OutputNode(type));\r\n            if (_output.Value.ResourceType != type)\r\n            {\r\n                throw new ApplicationException(\"wouldn't really happen but I wanted to force the Lazy to evaluate\");\r\n            }\r\n        }\r\n\r\n        public bool HasResourceType()\r\n        {\r\n            var resourceType = ResourceType();\r\n            return resourceType != null && !resourceType.CanBeCastTo<Task>() && resourceType != typeof (void);\r\n        }\r\n\r\n        /// <summary>\r\n        /// General purpose tagging for behavior chains\r\n        /// </summary>\r\n        public readonly IList<string> Tags = new List<string>();\r\n\r\n        public bool IsTagged(string tag)\r\n        {\r\n            return Tags.Any(x => x.EqualsIgnoreCase(tag));\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Does this chain match by either UrlCategory or by Http method?\r\n        /// </summary>\r\n        /// <param name = \"categoryOrHttpMethod\"></param>\r\n        /// <returns></returns>\r\n        public virtual bool MatchesCategoryOrHttpMethod(string categoryOrHttpMethod)\r\n        {\r\n            if (categoryOrHttpMethod == Categories.DEFAULT) return true;\r\n\r\n            if (categoryOrHttpMethod.EqualsIgnoreCase(Category)) return true;\r\n\r\n            return IsTagged(categoryOrHttpMethod);\r\n        }\r\n\r\n        public static BehaviorChain ForResource(Type resourceType)\r\n        {\r\n            var chain = new BehaviorChain();\r\n            chain._output = new Lazy<OutputNode>(() => new OutputNode(resourceType));\r\n            if (chain._output.Value.ResourceType != resourceType) throw new Exception(\"Just forcing this to evaluate\");\r\n\r\n            return chain;\r\n        }\r\n\r\n        public virtual string Title()\r\n        {\r\n            var title = \"Partial: \";\r\n\r\n\r\n            if (Calls.Any())\r\n            {\r\n                title += Calls.Select(x => x.Description).Join(\", \");\r\n                return title;\r\n            }\r\n\r\n            if (Tags.Contains(\"ActionlessView\"))\r\n            {\r\n                var views =\r\n                    Output.Media()\r\n                        .OfType<IViewWriter>()\r\n                        .Select(x => Description.For(x.View).Title);\r\n                return \"View for: \" + ResourceType().FullName;\r\n            }\r\n\r\n            if (HasOutput() && Output.Media().Any())\r\n            {\r\n                return Output.Media().Select(x => Description.For(x).Title).Join(\", \");\r\n            }\r\n\r\n            if (InputType() != null)\r\n            {\r\n                return \"Handler for \" + InputType().FullName;\r\n            }\r\n\r\n            return \"BehaviorChain \" + UniqueId;\r\n        }\r\n\r\n        Guid ISubject.Id\r\n        {\r\n            get { return UniqueId; }\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return Title().GetHashCode();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/BehaviorExtensions.cs",
    "content": "using System.Collections.Generic;\r\n\r\nnamespace FubuMVC.Core.Registration.Nodes\r\n{\r\n    public static class BehaviorExtensions\r\n    {\r\n        public static void Configure(this List<IConfigurationAction> actions, BehaviorGraph graph)\r\n        {\r\n            actions.Each(x => x.Configure(graph));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns true if the <paramref name=\"action\"/> is defined by the FubuMVC framework itself. Returns false if the <paramref name=\"action\"/> is defined in user code.\r\n        /// </summary>\r\n        /// <param name=\"action\"></param>\r\n        /// <returns></returns>\r\n        public static bool IsInternalFubuAction(this ActionCall action)\r\n        {\r\n            return action.HandlerType.Assembly.Equals(typeof(ActionCall).Assembly);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/BehaviorNode.cs",
    "content": "using System;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Diagnostics.Instrumentation;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Registration.Nodes\r\n{\r\n    /// <summary>\r\n    ///   BehaviorNode models a single Behavior in the FubuMVC configuration model\r\n    /// </summary>\r\n    public abstract class BehaviorNode : Node<BehaviorNode, BehaviorChain>, IContainerModel, ISubject\r\n    {\r\n        protected BehaviorNode()\r\n        {\r\n            UniqueId = Guid.NewGuid();\r\n        }\r\n\r\n        public virtual Guid UniqueId { get; protected set; }\r\n\r\n        Instance IContainerModel.ToInstance()\r\n        {\r\n            var instance = toInstance();\r\n            instance.Name = UniqueId.ToString();\r\n\r\n            return instance.As<Instance>();\r\n        }\r\n\r\n        protected IConfiguredInstance toInstance()\r\n        {\r\n            var instance = buildInstance();\r\n\r\n            if (Next != null)\r\n            {\r\n                var next = Next.As<IContainerModel>().ToInstance();\r\n                instance.Dependencies.Add(typeof(IActionBehavior), next);\r\n            }\r\n\r\n            return instance;\r\n        }\r\n\r\n        protected abstract IConfiguredInstance buildInstance();\r\n\r\n        public Type BehaviorType\r\n        {\r\n            get { return buildInstance().PluggedType; }\r\n        }\r\n\r\n        public abstract BehaviorCategory Category { get; }\r\n\r\n        public virtual string Description\r\n        {\r\n            get { return GetType().GetFullName(); }\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Carry out an action on any following or \"inner\" BehaviorNodes\r\n        ///   meeting a given criteria.\r\n        /// </summary>\r\n        /// <param name = \"search\"></param>\r\n        public void ForFollowingBehavior(BehaviorSearch search)\r\n        {\r\n            var follower = this.FirstOrDefault(search.Matching);\r\n            if (follower != null)\r\n            {\r\n                search.OnFound(follower);\r\n            }\r\n            else\r\n            {\r\n                search.OnMissing();\r\n            }\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        ///   Tests whether or not there are *any* output nodes\r\n        ///   after this BehaviorNode\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public bool HasAnyOutputBehavior()\r\n        {\r\n            return this.Any(x => x.Category == BehaviorCategory.Output);\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Shortcut to put a \"wrapping\" behavior immediately in front\r\n        ///   of this BehaviorNode.  Equivalent to AddBefore(Wrapper.For[T]())\r\n        /// </summary>\r\n        public Wrapper WrapWith<T>() where T : IActionBehavior\r\n        {\r\n            return WrapWith(typeof (T));\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        ///   Shortcut to put a \"wrapping\" behavior immediately in front of \r\n        ///   this BehaviorNode.  Equivalent to AddBefore(new Wrapper(behaviorType))\r\n        /// </summary>\r\n        public Wrapper WrapWith(Type behaviorType, params Type[] parameterTypes)\r\n        {\r\n            if (behaviorType.IsOpenGeneric())\r\n            {\r\n                behaviorType = behaviorType.MakeGenericType(parameterTypes);\r\n            }\r\n\r\n            if (!behaviorType.CanBeCastTo<IActionBehavior>())\r\n            {\r\n                throw new FubuException(1010, \"Type {0} does not implement IActionBehavior and cannot be used here\");\r\n            }\r\n\r\n            var wrapper = new Wrapper(behaviorType);\r\n            AddBefore(wrapper);\r\n\r\n            return wrapper;\r\n        }\r\n\r\n        string ISubject.Title()\r\n        {\r\n            return Description;\r\n        }\r\n\r\n        Guid ISubject.Id\r\n        {\r\n            get { return UniqueId; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/BehaviorSearch.cs",
    "content": "using System;\r\n\r\nnamespace FubuMVC.Core.Registration.Nodes\r\n{\r\n\r\n    public class BehaviorSearch\r\n    {\r\n        public BehaviorSearch(Func<BehaviorNode, bool> matching)\r\n        {\r\n            Matching = matching;\r\n\r\n            OnFound = n => { };\r\n            OnMissing = () => { };\r\n        }\r\n\r\n        public Func<BehaviorNode, bool> Matching { get; set; }\r\n        public Action<BehaviorNode> OnFound { get; set; }\r\n        public Action OnMissing { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/Chain.cs",
    "content": "using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Registration.Nodes\r\n{\r\n    public interface INode<T>\r\n    {\r\n        void AddAfter(T node);\r\n        void AddBefore(T node);\r\n\r\n    }\r\n\r\n    public abstract class Chain<T, TChain> : INode<T>, IEnumerable<T> \r\n        where T : Node<T, TChain> \r\n        where TChain : Chain<T, TChain>\r\n    {\r\n        private T _top;\r\n\r\n\r\n        /// <summary>\r\n        ///   Adds a new Node to the very end of this behavior chain\r\n        /// </summary>\r\n        /// <param name = \"node\"></param>\r\n        public void AddToEnd(T node)\r\n        {\r\n            if (Top == null)\r\n            {\r\n                SetTop(node);\r\n                return;\r\n            }\r\n\r\n            Top.AddToEnd(node);\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Adds a new Node of type T to the very end of this\r\n        ///   behavior chain\r\n        /// </summary>\r\n        /// <typeparam name = \"T\"></typeparam>\r\n        /// <typeparam name=\"TNode\"></typeparam>\r\n        /// <returns></returns>\r\n        public TNode AddToEnd<TNode>() where TNode : T, new()\r\n        {\r\n            var node = new TNode();\r\n            AddToEnd(node);\r\n            return node;\r\n        }\r\n\r\n        public IEnumerator<T> GetEnumerator()\r\n        {\r\n            if (Top == null) yield break;\r\n\r\n            yield return Top;\r\n\r\n            foreach (var node in Top)\r\n            {\r\n                yield return node;\r\n            }\r\n        }\r\n\r\n        IEnumerator IEnumerable.GetEnumerator()\r\n        {\r\n            return GetEnumerator();\r\n        }\r\n\r\n\r\n        internal void SetTop(T node)\r\n        {\r\n            if (node == null)\r\n            {\r\n                _top = null;\r\n            }\r\n            else\r\n            {\r\n                node.Previous = null;\r\n\r\n                if (_top != null)\r\n                {\r\n                    _top.Chain = null;\r\n                }\r\n\r\n                _top = node;\r\n                node.Chain = this.As<TChain>();\r\n            }\r\n        }\r\n\r\n        public void InsertFirst(T node)\r\n        {\r\n            var previousTop = _top;\r\n\r\n            SetTop(node);\r\n\r\n            if (previousTop != null)\r\n            {\r\n                _top.Next = previousTop;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// The outermost Node in the chain\r\n        /// </summary>\r\n        public T Top\r\n        {\r\n            get { return _top; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets the specified Node as the outermost node\r\n        /// in this chain\r\n        /// </summary>\r\n        /// <param name=\"node\"></param>\r\n        public void Prepend(T node)\r\n        {\r\n            var next = Top;\r\n            SetTop(node);\r\n\r\n            if (next != null)\r\n            {\r\n                Top.Next = next;\r\n            }\r\n        }\r\n\r\n\r\n        void INode<T>.AddAfter(T node)\r\n        {\r\n            AddToEnd(node);\r\n        }\r\n\r\n        void INode<T>.AddBefore(T node)\r\n        {\r\n            throw new NotSupportedException();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/ContinuationNode.cs",
    "content": "using System;\r\nusing FubuMVC.Core.Continuations;\r\n\r\nnamespace FubuMVC.Core.Registration.Nodes\r\n{\r\n    public class ContinuationNode : Wrapper\r\n    {\r\n        public ContinuationNode() : base(typeof(ContinuationHandler))\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/IContainerModel.cs",
    "content": "using StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Registration.Nodes\r\n{\r\n    public interface IContainerModel\r\n    {\r\n        Instance ToInstance();\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/IMayHaveInputType.cs",
    "content": "using System;\r\n\r\nnamespace FubuMVC.Core.Registration.Nodes\r\n{\r\n    public interface IMayHaveInputType\r\n    {\r\n        Type InputType();\r\n    }\r\n\r\n    public interface IMayHaveResourceType\r\n    {\r\n        Type ResourceType();\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/IModifiesChain.cs",
    "content": "﻿namespace FubuMVC.Core.Registration.Nodes\r\n{\r\n    public interface IModifiesChain\r\n    {\r\n        void Modify(BehaviorChain chain);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/Node.cs",
    "content": "using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Registration.Nodes\r\n{\r\n    public abstract class Node<T, TChain> : INode<T>, IEnumerable<T> \r\n        where T : Node<T, TChain> \r\n        where TChain : Chain<T, TChain>\r\n    {\r\n        private T _next;\r\n\r\n        /// <summary>\r\n        ///   Retrieves the Chain that contains this\r\n        ///   Node.  Does a recursive search up the chain\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public TChain ParentChain()\r\n        {\r\n            if (Chain != null) return Chain;\r\n\r\n            if (Previous == null) return null;\r\n\r\n            return Previous.ParentChain();\r\n        }\r\n\r\n        internal TChain Chain { get; set; }\r\n\r\n        /// <summary>\r\n        ///   The next or \"inner\" Node\r\n        /// </summary>\r\n        public T Next\r\n        {\r\n            get { return _next; }\r\n            internal set\r\n            {\r\n                if (ReferenceEquals(value, this))\r\n                {\r\n                    throw new InvalidOperationException(\"Cannot set Node.Next to itself unless you just like StackOverflowExceptions\");\r\n                }\r\n\r\n                _next = value;\r\n                \r\n                if (value != null) value.Previous = this.As<T>();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        ///   The previous or \"outer\" Node in this chain\r\n        /// </summary>\r\n        public T Previous { get; internal set; }\r\n\r\n        /// <summary>\r\n        ///   From innermost to outermost, iterates through the Nodes\r\n        ///   before this Node in the Chain\r\n        /// </summary>\r\n        public IEnumerable<T> PreviousNodes\r\n        {\r\n            get\r\n            {\r\n                if (Previous == null) yield break;\r\n\r\n                yield return Previous;\r\n\r\n                foreach (var node in Previous.PreviousNodes)\r\n                {\r\n                    yield return node;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Inserts the Node \"node\" immediately after this Node.\r\n        ///   Any previously following Nodes will be attached after \"node\"\r\n        /// </summary>\r\n        /// <param name = \"node\"></param>\r\n        public void AddAfter(T node)\r\n        {\r\n            var next = Next;\r\n            Next = node;\r\n            node.Next = next;\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Inserts the Node \"newNode\" directly ahead of this BehaviorNode\r\n        ///   in the Chain.  All other ordering is preserved\r\n        /// </summary>\r\n        /// <param name = \"newNode\"></param>\r\n        public void AddBefore(T newNode)\r\n        {\r\n            if (PreviousNodes.Contains(newNode)) return;\r\n\r\n            newNode.Remove();\r\n\r\n            if (Previous != null)\r\n            {\r\n                Previous.Next = newNode;\r\n            }\r\n\r\n            if (Previous == null && Chain != null)\r\n            {\r\n                Chain.Prepend(newNode);\r\n            }\r\n\r\n            newNode.Next = this.As<T>();\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Adds a new Node to the very end of this BehaviorChain\r\n        /// </summary>\r\n        public void AddToEnd(T node)\r\n        {\r\n            // Do not append any duplicates\r\n            if (this.Contains(node)) return;\r\n\r\n            var last = this.LastOrDefault() ?? this;\r\n            last.Next = node;\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Removes only this BehaviorNode from the BehaviorChain.  Any following nodes\r\n        ///   would be attached to the previous BehaviorNode\r\n        /// </summary>\r\n        public void Remove()\r\n        {\r\n            if (Next != null)\r\n            {\r\n                Next.Previous = Previous;\r\n            }\r\n\r\n            if (Previous == null && Chain != null)\r\n            {\r\n                Chain.SetTop(Next);\r\n            }\r\n\r\n            if (Previous != null)\r\n            {\r\n                Previous.Next = Next;\r\n            }\r\n\r\n            Previous = null;\r\n            Next = null;\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Swaps out this BehaviorNode for the given BehaviorNode\r\n        /// </summary>\r\n        public void ReplaceWith(T newNode)\r\n        {\r\n            newNode.Next = Next;\r\n\r\n            if (Previous != null)\r\n            {\r\n                Previous.Next = newNode;\r\n            }\r\n            else if (Chain != null)\r\n            {\r\n                Chain.SetTop(newNode);\r\n            }\r\n\r\n            Previous = null;\r\n            Next = null;\r\n        }\r\n\r\n        IEnumerator IEnumerable.GetEnumerator()\r\n        {\r\n            return GetEnumerator();\r\n        }\r\n\r\n        public IEnumerator<T> GetEnumerator()\r\n        {\r\n            if (Next != null)\r\n            {\r\n                yield return Next;\r\n\r\n                foreach (T node in Next)\r\n                {\r\n                    yield return node;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Moves this node to the very beginning of the chain\r\n        /// </summary>\r\n        public void MoveToFront()\r\n        {\r\n            var chain = ParentChain();\r\n            if (chain == null)\r\n            {\r\n                return;\r\n            }\r\n\r\n            Remove();\r\n            chain.InsertFirst((T) this);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/Process.cs",
    "content": "using System;\r\nusing FubuMVC.Core.Behaviors;\r\n\r\nnamespace FubuMVC.Core.Registration.Nodes\r\n{\r\n    public class Process : Wrapper\r\n    {\r\n        public new static Process For<T>() where T : IActionBehavior\r\n        {\r\n            return new Process(typeof(T));\r\n        }\r\n\r\n        public Process(Type behaviorType) : base(behaviorType)\r\n        {\r\n        }\r\n\r\n        public override BehaviorCategory Category\r\n        {\r\n            get { return BehaviorCategory.Process; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/RoutedChain.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration.Routes;\r\n\r\nnamespace FubuMVC.Core.Registration.Nodes\r\n{\r\n    public class RoutedChain : BehaviorChain\r\n    {\r\n        private readonly IList<IRouteDefinition> _additionalRoutes = new List<IRouteDefinition>();\r\n\r\n        /// <summary>\r\n        ///   Creates a new BehaviorChain for an action method\r\n        /// </summary>\r\n        /// <typeparam name = \"T\"></typeparam>\r\n        /// <param name = \"expression\"></param>\r\n        /// <returns></returns>\r\n        public static RoutedChain For<T>(Expression<Action<T>> expression, string url)\r\n        {\r\n            var call = ActionCall.For(expression);\r\n            var chain = new RoutedChain(new RouteDefinition(url), call.InputType(), call.ResourceType());\r\n            chain.AddToEnd(call);\r\n\r\n            return chain;\r\n        }\r\n\r\n        public BehaviorNode Authentication { get; set; }\r\n\r\n        public RoutedChain(string pattern) : this(new RouteDefinition(pattern))\r\n        {\r\n            \r\n        }\r\n\r\n        public RoutedChain(IRouteDefinition route)\r\n        {\r\n            if (route == null)\r\n            {\r\n                throw new ArgumentNullException(\"route\");\r\n            }\r\n\r\n            \r\n            Route = route;\r\n        }\r\n\r\n        public RoutedChain(IRouteDefinition route, Type inputType, Type resourceType) : this(route)\r\n        {\r\n            if (inputType != null)\r\n            {\r\n                route.ApplyInputType(inputType);\r\n            }\r\n\r\n            if (resourceType != null)\r\n            {\r\n                ResourceType(resourceType);\r\n            }\r\n        }\r\n\r\n        protected internal override void InsertNodes(ConnegSettings settings)\r\n        {\r\n            base.InsertNodes(settings);\r\n            if (Authentication != null)\r\n            {\r\n                InsertFirst(Authentication);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Models how the Route for this BehaviorChain will be generated\r\n        /// </summary>\r\n        public IRouteDefinition Route { get; protected set; }\r\n\r\n        /// <summary>\r\n        /// Collection of additional routes (aliases) that will be generated for this BehaviorChain.\r\n        /// </summary>\r\n        public IEnumerable<IRouteDefinition> AdditionalRoutes\r\n        {\r\n            get { return _additionalRoutes; }\r\n        }\r\n\r\n\r\n\r\n        public int Rank\r\n        {\r\n            get { return IsPartialOnly || Route == null ? 0 : Route.Rank; }\r\n        }\r\n\r\n        public string RouteName { get; set; }\r\n        \r\n\r\n        /// <summary>\r\n        /// Adds the specified route as an additional route for this BehaviorChain to respond to.\r\n        /// </summary>\r\n        /// <param name=\"route\"></param>\r\n        public void AddRouteAlias(IRouteDefinition route)\r\n        {\r\n            _additionalRoutes.Fill(route);\r\n        }\r\n\r\n        public string GetRoutePattern()\r\n        {\r\n            if (Route == null) return null;\r\n\r\n            return Route.Pattern;\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Does this chain match by either UrlCategory or by Http method?\r\n        /// </summary>\r\n        /// <param name = \"categoryOrHttpMethod\"></param>\r\n        /// <returns></returns>\r\n        public override bool MatchesCategoryOrHttpMethod(string categoryOrHttpMethod)\r\n        {\r\n            if (UrlCategory.Category.IsNotEmpty() &&\r\n                UrlCategory.Category.Equals(categoryOrHttpMethod, StringComparison.OrdinalIgnoreCase)) return true;\r\n\r\n            if (Route == null) return false;\r\n\r\n            return Route.AllowedHttpMethods.Select(x => x.ToUpper()).Contains(categoryOrHttpMethod.ToUpper());\r\n        }\r\n\r\n        /// <summary>\r\n        ///   Prepends the prefix to the route definition\r\n        /// </summary>\r\n        /// <param name = \"prefix\"></param>\r\n        public void PrependToUrl(string prefix)\r\n        {\r\n            if (Route != null)\r\n            {\r\n                Route.Prepend(prefix);\r\n            }\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var description = Route.Pattern;\r\n            if (Route.AllowedHttpMethods.Any())\r\n            {\r\n                description += \" (\" + Route.AllowedHttpMethods.Join(\", \") + \")\";\r\n            }\r\n\r\n            return description;\r\n        }\r\n\r\n\r\n        public override string Title()\r\n        {\r\n            var url = GetRoutePattern();\r\n            if (url.IsEmpty()) return \"(home)\";\r\n\r\n            if (Route.AllowedHttpMethods.Any())\r\n            {\r\n                return Route.AllowedHttpMethods.Select(x => x.ToUpper()).Join(\"|\") + \": \" + url;\r\n            }\r\n            \r\n            return url;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/UrlCategory.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace FubuMVC.Core.Registration.Nodes\r\n{\r\n    /// <summary>\r\n    /// Categorizes a BehaviorChain endpoint for IUrlRegistry,\r\n    /// IEndpointService, and IAuthorizationPreviewService.  \r\n    /// Especially useful when there is multiple BehaviorChain's\r\n    /// in the system with the same input model\r\n    /// </summary>\r\n    public class UrlCategory\r\n    {\r\n        public UrlCategory()\r\n        {\r\n            Creates = new List<Type>();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Url category.  Examples are \"New\", \"Find\", \"View\", \"Edit\"\r\n        /// </summary>\r\n        public string Category { get; set; }\r\n\r\n        /// <summary>\r\n        /// Registers this behavior chain for calls to \r\n        /// IUrlRegistry.UrlForNew(type) methods\r\n        /// </summary>\r\n        public IList<Type> Creates { get; private set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Nodes/Wrapper.cs",
    "content": "using System;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuCore;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Registration.Nodes\r\n{\r\n    public class Wrapper : BehaviorNode, DescribesItself\r\n    {\r\n        private readonly ConstructorInstance _instance;\r\n\r\n        public Wrapper(Type behaviorType)\r\n        {\r\n            if (!behaviorType.CanBeCastTo<IActionBehavior>())\r\n            {\r\n                throw new ArgumentOutOfRangeException(\"behaviorType\", \"Only types that can be cast to IActionBehavior may be used here\");\r\n            }\r\n\r\n            _instance = new ConstructorInstance(behaviorType);\r\n        }\r\n\r\n        /// <summary>\r\n        /// The type of the wrapping behavior appliec\r\n        /// </summary>\r\n        public Type Type\r\n        {\r\n            get\r\n            {\r\n                return _instance.ReturnedType;\r\n            }\r\n        }\r\n\r\n        public override BehaviorCategory Category { get { return BehaviorCategory.Wrapper; } }\r\n\r\n        public static Wrapper For<T>() where T : IActionBehavior\r\n        {\r\n            return new Wrapper(typeof (T));\r\n        }\r\n\r\n\r\n        protected override IConfiguredInstance buildInstance()\r\n        {\r\n            return _instance;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return \"Wrapped by \" + Type.FullName;\r\n        }\r\n\r\n        void DescribesItself.Describe(Description description)\r\n        {\r\n            description.Title = BehaviorType.Name;\r\n            description.ShortDescription = BehaviorType.FullName;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/OverridesFor.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq.Expressions;\r\nusing FubuCore.Reflection;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public class OverridesFor<T> : IAccessorRulesRegistration\r\n    {\r\n        private readonly IList<Action<AccessorRules>> _registrations = new List<Action<AccessorRules>>();\r\n\r\n        public AccessorRulesExpression<T> Property(Expression<Func<T, object>> expression)\r\n        {\r\n            var accessor = expression.ToAccessor();\r\n            Action<object> registration = o => _registrations.Add(r => r.Add(accessor, o));\r\n\r\n            return new AccessorRulesExpression<T>(registration);\r\n        }\r\n\r\n        void IAccessorRulesRegistration.AddRules(AccessorRules rules)\r\n        {\r\n            _registrations.Each(x => x(rules));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/PerfTimerExtensions.cs",
    "content": "using System;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Core.Registration\n{\n    public static class PerfTimerExtensions\n    {\n        public static Task RecordTask(this IPerfTimer timer, string description, Action action)\n        {\n            return Task.Factory.StartNew(() => timer.Record(description, action));\n        }\n\n        public static Task<T> RecordTask<T>(this IPerfTimer timer, string description, Func<T> func)\n        {\n            return Task.Factory.StartNew(() => {\n                return timer.Record<T>(description, func);\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Querying/ChainInterrogator.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Core.Registration.Querying\r\n{\r\n    public abstract class ChainInterrogator<T> where T : class\r\n    {\r\n        private readonly IChainResolver _resolver;\r\n\r\n        protected ChainInterrogator(IChainResolver resolver)\r\n        {\r\n            _resolver = resolver;\r\n        }\r\n\r\n        protected IChainResolver resolver\r\n        {\r\n            get { return _resolver; }\r\n        }\r\n\r\n        protected abstract T createResult(object model, BehaviorChain chain);\r\n        protected T findAnswerFromResolver(object model, Func<IChainResolver, BehaviorChain> finder)\r\n        {\r\n            var chain = finder(resolver);\r\n            return createResult(model, chain);\r\n        }\r\n\r\n        protected T For(object model, string categoryOrMethod = null)\r\n        {\r\n            if (model == null)\r\n            {\r\n                throw new ArgumentNullException(\"model\");\r\n            }\r\n\r\n            return findAnswerFromResolver(model, r => r.FindUnique(model, categoryOrMethod));\r\n        }\r\n\r\n        protected T For(Type handlerType, MethodInfo method, string categoryOrHttpMethod = null)\r\n        {\r\n            return findAnswerFromResolver(null, r =>\r\n            {\r\n                var chain = r.Find(handlerType, method, categoryOrHttpMethod);\r\n                if (chain == null)\r\n                {\r\n                    throw new FubuException(2108, \"No behavior chain registered for {0}.{1}()\", handlerType.FullName, method.Name);\r\n                }\r\n\r\n                return chain;\r\n            });\r\n        }\r\n\r\n        protected bool hasNew(Type entityType)\r\n        {\r\n            return resolver.FindCreatorOf(entityType) != null;\r\n        }\r\n\r\n        protected T forNew(Type entityType)\r\n        {\r\n            return findAnswerFromResolver(null, r =>\r\n            {\r\n                var chain = r.FindCreatorOf(entityType);\r\n\r\n                if (chain == null)\r\n                {\r\n                    throw new FubuException(2109, \"No 'new' route exists for type {0}\", entityType.FullName);\r\n                }\r\n\r\n                return chain;\r\n            });\r\n        }\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Querying/ChainResolutionCache.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing FubuCore;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Urls;\r\n\r\nnamespace FubuMVC.Core.Registration.Querying\r\n{\r\n    public class ChainResolutionCache : IChainResolver\r\n    {\r\n        private readonly Cache<ChainSearch, Func<BehaviorChain>> _results = new Cache<ChainSearch, Func<BehaviorChain>>();\r\n        private readonly Cache<Type, BehaviorChain> _creators = new Cache<Type, BehaviorChain>();\r\n\r\n        private readonly BehaviorGraph _behaviorGraph;\r\n\r\n        public ChainResolutionCache(BehaviorGraph behaviorGraph)\r\n        {\r\n            _behaviorGraph = behaviorGraph;\r\n\r\n            _results.OnMissing = find;\r\n\r\n            _creators.OnMissing = type =>\r\n            {\r\n                return behaviorGraph.Chains.OfType<RoutedChain>().SingleOrDefault(x => x.UrlCategory.Creates.Contains(type));\r\n            };\r\n        }\r\n\r\n        private Func<BehaviorChain> find(ChainSearch search)\r\n        {\r\n            var candidates = search.FindCandidates(_behaviorGraph);\r\n\r\n            var count = candidates.Count();\r\n            switch (count)\r\n            {\r\n                case 1:\r\n                    var chain = candidates.Single();\r\n                    return () => chain;\r\n\r\n                case 0:\r\n                    return () =>\r\n                    {\r\n                        if (!search.Required)\r\n                        {\r\n                            return null;\r\n                        }\r\n                        throw new FubuException(2104, \"No behavior chains are registered matching criteria:  \" + search);\r\n                    };\r\n\r\n                default:\r\n                    var message = \"More than one behavior chain matching criteria:  \" + search;\r\n                    message += \"\\nMatches:\";\r\n\r\n                    candidates.Each(x =>\r\n                    {\r\n                        message += \"\\n\" + x;\r\n                    });\r\n\r\n                    return () =>\r\n                    {\r\n                        throw new FubuException(2108, message);\r\n                    };\r\n            }\r\n        }\r\n\r\n        public BehaviorChain Find(ChainSearch search)\r\n        {\r\n            return _results[search]();\r\n        }\r\n\r\n        public BehaviorChain Find(Type handlerType, MethodInfo method, string category = null)\r\n        {\r\n            return Find(ChainSearch.ForMethod(handlerType, method, category));\r\n        }\r\n\r\n        public BehaviorChain FindUnique(object model, string category = null)\r\n        {\r\n            if (model == null)\r\n            {\r\n                throw new ArgumentNullException(\"model\");\r\n            }\r\n\r\n            var modelType = model.GetType();\r\n\r\n            var search = new ChainSearch\r\n            {\r\n                Type = modelType, TypeMode = TypeSearchMode.InputModelOnly, CategoryOrHttpMethod = category\r\n            };\r\n\r\n            return Find(search);\r\n        }\r\n\r\n        public BehaviorChain FindUniqueByType(Type modelType, string category = null)\r\n        {\r\n            return Find(ChainSearch.ByUniqueInputType(modelType, category));\r\n        }\r\n\r\n        public BehaviorChain FindCreatorOf(Type type)\r\n        {\r\n            return _creators[type];\r\n        }\r\n\r\n        public void RootAt(string baseUrl)\r\n        {\r\n            _behaviorGraph.Chains.OfType<RoutedChain>().Each(x =>\r\n            {\r\n                x.Route.RootUrlAt(baseUrl);\r\n                x.AdditionalRoutes.Each(r => r.RootUrlAt(baseUrl));\r\n            });\r\n        }\r\n\r\n        public void ClearAll()\r\n        {\r\n            _results.ClearAll();\r\n            _creators.ClearAll();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Querying/ChainSearch.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Urls;\r\nusing System.Linq;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Registration.Querying\r\n{\r\n    public class ChainSearch\r\n    {\r\n        public static ChainSearch ByUniqueInputType(Type modelType, string categoryOrHttpMethod = null, bool required = true)\r\n        {\r\n            return new ChainSearch\r\n            {\r\n                Type = modelType,\r\n                TypeMode = TypeSearchMode.Any,\r\n                CategoryOrHttpMethod = categoryOrHttpMethod,\r\n                Required = required\r\n            };\r\n        }\r\n\r\n        public static ChainSearch ForMethod(Type handlerType, MethodInfo method, string categoryOrHttpMethod = null)\r\n        {\r\n            var search = new ChainSearch\r\n            {\r\n                Type = handlerType,\r\n                TypeMode = TypeSearchMode.HandlerOnly,\r\n                MethodName = method == null ? null : method.Name,\r\n                CategoryOrHttpMethod = categoryOrHttpMethod\r\n            };\r\n\r\n            if (method == null)\r\n            {\r\n                search.TypeMode = TypeSearchMode.Any;\r\n            }\r\n\r\n            return search;\r\n        }\r\n\r\n        public static ChainSearch ForMethod<T>(Expression<Action<T>> expression,\r\n                                               string categoryOrHttpMethod = null)\r\n        {\r\n            MethodInfo method = ReflectionHelper.GetMethod(expression);\r\n            return ForMethod(typeof (T), method, categoryOrHttpMethod);\r\n        }\r\n\r\n        public Type Type;\r\n        public string CategoryOrHttpMethod = Categories.DEFAULT;\r\n        public CategorySearchMode CategoryMode = CategorySearchMode.Relaxed;\r\n        public TypeSearchMode TypeMode = TypeSearchMode.Any;\r\n        public string MethodName;\r\n        public bool Required = true;\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Type: {0}, CategoryOrHttpMethod: {1}, CategoryMode: {2}, TypeMode: {3}, MethodName: {4}\", Type.FullName, CategoryOrHttpMethod ?? \"None\", CategoryMode, TypeMode, MethodName);\r\n        }\r\n\r\n        public bool Equals(ChainSearch other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other.Type, Type) && Equals(other.CategoryOrHttpMethod, CategoryOrHttpMethod) && Equals(other.CategoryMode, CategoryMode) && Equals(other.TypeMode, TypeMode) && Equals(other.MethodName, MethodName);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof (ChainSearch)) return false;\r\n            return Equals((ChainSearch) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                int result = (Type != null ? Type.GetHashCode() : 0);\r\n                result = (result*397) ^ (CategoryOrHttpMethod != null ? CategoryOrHttpMethod.GetHashCode() : 0);\r\n                result = (result*397) ^ CategoryMode.GetHashCode();\r\n                result = (result*397) ^ TypeMode.GetHashCode();\r\n                result = (result*397) ^ (MethodName != null ? MethodName.GetHashCode() : 0);\r\n                return result;\r\n            }\r\n        }\r\n\r\n\r\n        public IEnumerable<BehaviorChain> FindCandidates(BehaviorGraph graph)\r\n        {\r\n            foreach (var level in FindCandidatesByType(graph))\r\n            {\r\n                var candidates = FindForCategory(level);\r\n                if (candidates.Any()) return candidates;\r\n            }\r\n\r\n            return new BehaviorChain[0];\r\n        }\r\n\r\n\r\n        public IEnumerable<IEnumerable<BehaviorChain>> FindCandidatesByType(BehaviorGraph graph)\r\n        {\r\n            Func<IEnumerable<BehaviorChain>, IEnumerable<BehaviorChain>> methodFilter = chains => chains;\r\n            if (MethodName.IsNotEmpty())\r\n            {\r\n                methodFilter = chains => chains.Where(c => c.Calls.Any(x => x.Method.Name == MethodName));\r\n            }\r\n\r\n\r\n            if (TypeMode == TypeSearchMode.Any || TypeMode == TypeSearchMode.InputModelOnly)\r\n            {\r\n                // TODO -- it's right here.  Need to use anything that has input\r\n                yield return methodFilter(graph.Chains.Where(chain => chain.InputType() == Type));\r\n            }\r\n\r\n            if (TypeMode == TypeSearchMode.Any || TypeMode == TypeSearchMode.HandlerOnly)\r\n            {\r\n                yield return methodFilter(graph.Chains.Where(x => x.Calls.Any(c => c.HandlerType == Type)));\r\n            }\r\n\r\n            if (TypeMode == TypeSearchMode.Any || TypeMode == TypeSearchMode.ResourceModelOnly)\r\n            {\r\n                yield return methodFilter(graph.Chains.Where(x => x.Calls.Any(c => c.ResourceType() == Type)));\r\n            }\r\n        }\r\n\r\n        public IEnumerable<BehaviorChain> FindForCategory(IEnumerable<BehaviorChain> chains)\r\n        {\r\n            if (CategoryMode == CategorySearchMode.Strict)\r\n            {\r\n                var category = CategoryOrHttpMethod ?? Categories.DEFAULT;\r\n                return chains.Where(x => x.MatchesCategoryOrHttpMethod(category));\r\n            }\r\n\r\n            if (chains.Count() == 1)\r\n            {\r\n                return chains;\r\n            }\r\n\r\n            if (CategoryOrHttpMethod == null)\r\n            {\r\n                var candidates = chains.Where(x => x.MatchesCategoryOrHttpMethod(Categories.DEFAULT));\r\n                if (candidates.Count() > 0) return candidates;\r\n\r\n                return chains.Where(x => x.Category.IsEmpty());\r\n            }\r\n            else\r\n            {\r\n                return chains.Where(x => x.MatchesCategoryOrHttpMethod(CategoryOrHttpMethod));\r\n            }\r\n\r\n\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Querying/IChainResolver.cs",
    "content": "﻿using System;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Core.Registration.Querying\r\n{\r\n    public interface IChainResolver\r\n    {\r\n        BehaviorChain Find(Type handlerType, MethodInfo method, string category = null);\r\n\r\n        BehaviorChain FindUnique(object model, string category = null);\r\n        BehaviorChain FindUniqueByType(Type modelType, string category = null);\r\n        \r\n        BehaviorChain FindCreatorOf(Type type);\r\n\r\n        void RootAt(string baseUrl);\r\n\r\n        BehaviorChain Find(ChainSearch search);\r\n    }\r\n\r\n    public static class ChainResolverExtensions\r\n    {\r\n        public static BehaviorChain Find<T>(this IChainResolver resolver, Expression<Action<T>> expression, string category = null)\r\n        {\r\n            return resolver.Find(typeof (T), ReflectionHelper.GetMethod(expression), category);\r\n        }\r\n    }\r\n\r\n    public enum CategorySearchMode\r\n    {\r\n        /// <summary>\r\n        /// Only match if the category of the chains explicitly matches the search criteria\r\n        /// </summary>\r\n        Strict,\r\n\r\n        /// <summary>\r\n        /// If only one chain is found for all the other criteria, it's okay\r\n        /// to ignore the exact match on Category\r\n        /// </summary>\r\n        Relaxed\r\n    }\r\n\r\n    public enum TypeSearchMode\r\n    {\r\n        Any,\r\n        InputModelOnly,\r\n        HandlerOnly,\r\n        ResourceModelOnly\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/RegistryImport.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Registration\n{\n    public class RegistryImport : IChainSource\n    {\n        private BehaviorGraph _behaviorGraph;\n        public string Prefix { get; set; }\n        public FubuRegistry Registry { get; set; }\n\n        public void InitializeSettings(BehaviorGraph parentGraph)\n        {\n            _behaviorGraph = new BehaviorGraph(parentGraph.Settings)\n            {\n                ApplicationAssembly = Registry.ApplicationAssembly\n            };\n\n            Registry.Config.Imports.Each(x => x.InitializeSettings(parentGraph));\n\n            Registry.Config.Settings.Each(x => x.Alter(_behaviorGraph.Settings));\n        }\n\n        public Task<BehaviorChain[]> BuildChains(BehaviorGraph graph, IPerfTimer timer)\n        {\n            return Task.Factory.StartNew(() =>\n            {\n                return timer.Record(\"Building Imported Chains for \" + Registry, () =>\n                {\n                    Registry.Config.BuildLocal(_behaviorGraph, timer);\n                    if (Prefix.IsNotEmpty())\n                    {\n                        _behaviorGraph.Chains.OfType<RoutedChain>().Each(x => x.Route.Prepend(Prefix));\n                    }\n\n                    return _behaviorGraph.Chains.ToArray();\n                });\n            });\n        }\n\n        public bool Equals(RegistryImport other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return Equals(other.Prefix, Prefix) && Equals(other.Registry.GetType(), Registry.GetType());\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (RegistryImport)) return false;\n            return Equals((RegistryImport) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((Prefix != null ? Prefix.GetHashCode() : 0)*397) ^\n                       (Registry.GetType() != null ? Registry.GetType().GetHashCode() : 0);\n            }\n        }\n\n\n        public override string ToString()\n        {\n            return string.Format(\"Registry: {0}\", Registry);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Routes/FuncBuilder.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\n\r\nnamespace FubuMVC.Core.Registration.Routes\r\n{\r\n    public class FuncBuilder\r\n    {\r\n        public static object ToFunc(Type concreteType, MethodInfo method)\r\n        {\r\n            var objects = new MethodCallObjects(concreteType, method);\r\n\r\n            Type openType = objects.ParameterCount == 2 ? typeof (Func<,>) : typeof (Func<,,>);\r\n            return objects.BuildForOpenType(openType);\r\n        }\r\n\r\n        public static object ToAction(Type concreteType, MethodInfo method)\r\n        {\r\n            var objects = new MethodCallObjects(concreteType, method);\r\n\r\n            Type openType = objects.ParameterCount == 1 ? typeof (Action<>) : typeof (Action<,>);\r\n            return objects.BuildForOpenType(openType);\r\n        }\r\n\r\n        private static ParameterExpression toInput(ParameterInfo parameter)\r\n        {\r\n            return Expression.Parameter(parameter.ParameterType, parameter.Name);\r\n        }\r\n\r\n        #region Nested type: MethodCallObjects\r\n\r\n        public class MethodCallObjects\r\n        {\r\n            private readonly IList<Type> _parameterTypes = new List<Type>();\r\n\r\n            public MethodCallObjects(Type concreteType, MethodInfo method)\r\n            {\r\n                ParameterExpression objectParameter = Expression.Parameter(concreteType, \"x\");\r\n\r\n                Parameters = method.GetParameters().Select(x => toInput(x)).ToList();\r\n                MethodCall = Expression.Call(objectParameter, method, Parameters.ToArray());\r\n\r\n                Parameters.Insert(0, objectParameter);\r\n\r\n                _parameterTypes = new List<Type>();\r\n                _parameterTypes.Add(concreteType);\r\n                _parameterTypes.AddRange(method.GetParameters().Select(x => x.ParameterType));\r\n\r\n                _parameterTypes.Add(method.ReturnType);\r\n\r\n\r\n                _parameterTypes.Remove(typeof (void));\r\n            }\r\n\r\n            public IList<ParameterExpression> Parameters { get; private set; }\r\n            public MethodCallExpression MethodCall { get; private set; }\r\n            public Type[] ParameterTypes { get { return _parameterTypes.ToArray(); } }\r\n\r\n            public int ParameterCount { get { return _parameterTypes.Count; } }\r\n\r\n            public object BuildForOpenType(Type openType)\r\n            {\r\n                Type delegateType = openType.MakeGenericType(ParameterTypes);\r\n\r\n                LambdaExpression newExp = Expression.Lambda(delegateType, MethodCall, Parameters);\r\n\r\n                return newExp.Compile();\r\n            }\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Routes/IMakeMyOwnUrl.cs",
    "content": "namespace FubuMVC.Core.Registration.Routes\r\n{\r\n    public interface IMakeMyOwnUrl\r\n    {\r\n        string ToUrlPart(string basePattern);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Routes/IRankMeLast.cs",
    "content": "namespace FubuMVC.Core.Registration.Routes\r\n{\r\n\tpublic interface IRankMeLast { }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Routes/IRouteDefinition.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Web.Routing;\r\n\r\nnamespace FubuMVC.Core.Registration.Routes\r\n{\r\n    // TODO -- add Xml comments here, this is publicly facing\r\n    public interface IRouteDefinition\r\n    {\r\n        string Pattern { get; }\r\n        int Rank { get; }\r\n        IRouteInput Input { get; }\r\n        IList<string> AllowedHttpMethods { get; }\r\n\r\n        Route ToRoute();\r\n\r\n        void Append(string patternPart);\r\n\r\n        void RemoveLastPatternPart();\r\n\r\n        void Prepend(string prefix);\r\n\r\n        void RootUrlAt(string baseUrl);\r\n\r\n        void ApplyInputType(Type inputType);\r\n\r\n        string CreateUrlFromInput(object input);\r\n        void AddHttpMethodConstraint(string method);\r\n        void RegisterRouteCustomization(Action<Route> action);\r\n\r\n        SessionStateRequirement SessionStateRequirement { get; set; }\r\n\r\n        bool RespondsToMethod(string method);\r\n    }\r\n\r\n    public static class RouteDefinitionExtensions\r\n    {\r\n        public static void ConstrainToHttpMethods(this IRouteDefinition routeDef, params string[] methods)\r\n        {\r\n            methods.Each(routeDef.AddHttpMethodConstraint);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Routes/IRouteInput.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Reflection;\r\nusing System.Web.Routing;\r\n\r\nnamespace FubuMVC.Core.Registration.Routes\r\n{\r\n    public interface IRouteInput\r\n    {\r\n        List<RouteParameter> RouteParameters { get; }\r\n        List<RouteParameter> QueryParameters { get; }\r\n        Type InputType { get; }\r\n        int Rank { get; }\r\n        RouteDefinition Parent { get; set; }\r\n        string CreateUrlFromInput(object input);\r\n        string CreateUrlFromParameters(RouteParameters parameters);\r\n        void AlterRoute(Route route);\r\n        void AddQueryInputs(IEnumerable<RouteParameter> inputs);\r\n        void AddQueryInput(PropertyInfo property);\r\n        void AddRouteInput(RouteParameter parameter, bool appendToUrl);\r\n        RouteParameter RouteInputFor(string routeKey);\r\n        RouteParameter QueryInputFor(string querystringKey);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Routes/IRoutePolicy.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Web.Routing;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Registration.Routes\n{\n    public interface IRoutePolicy\n    {\n        IList<RouteBase> BuildRoutes(BehaviorGraph graph, IServiceFactory factory);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Routes/RouteBuilder.cs",
    "content": "using System;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Text.RegularExpressions;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\n\r\nnamespace FubuMVC.Core.Registration.Routes\r\n{\r\n    public class RouteBuilder\r\n    {\r\n        const string propertyFindingPattern =\r\n            @\"\r\n\\{              # start variable\r\n\\*?             # optional greedy token\r\n(?<varname>\\w+) # capture 1 or more word characters as the variable name\r\n(:              # optional section beginning with a colon\r\n(?<default>\\w+) # capture 1 or more word characters as the default value\r\n)?              # end optional section\r\n\\}              # end variable\";\r\n\r\n        public static RouteDefinition Build<T>(string pattern)\r\n        {\r\n            var parent = new RouteDefinition(pattern);\r\n            Type inputType = typeof (T);\r\n\r\n            parent.ApplyInputType(inputType);\r\n\r\n            return parent;\r\n        }\r\n\r\n        public static IRouteDefinition Build(Type inputType, string pattern)\r\n        {\r\n            var parent = new RouteDefinition(pattern);\r\n            Type routeType = typeof (RouteInput<>).MakeGenericType(inputType);\r\n            var input = Activator.CreateInstance(routeType, parent) as IRouteInput;\r\n\r\n            populateRoute(pattern, inputType, input);\r\n            parent.Input = input;\r\n\r\n            return parent;\r\n        }\r\n\r\n        private static void populateRoute(string pattern, Type inputType, IRouteInput input)\r\n        {\r\n            parse(pattern, (propName, defaultValue) =>\r\n            {\r\n                PropertyInfo property = inputType.GetProperty(propName);\r\n                if (property == null)\r\n                    throw new FubuException(1002, \"Url pattern \\\"{0}\\\" refers to non-existent property {1} on {2}.\",\r\n                                            pattern, propName, inputType.FullName);\r\n                var parameter = new RouteParameter(new SingleProperty(property))\r\n                {\r\n                    DefaultValue = defaultValue\r\n                };\r\n\r\n                input.AddRouteInput(parameter, false);\r\n            });\r\n            \r\n            // Populate the remaining QueryString parameters\r\n            PopulateQuerystringParameters(inputType, input);\r\n        }\r\n\r\n        public static void PopulateQuerystringParameters(Type inputType, IRouteInput input)\r\n        {\r\n            var props = inputType.GetProperties();\r\n            foreach (var propertyInfo in props)\r\n            {\r\n                PropertyInfo info = propertyInfo;\r\n                if (propertyInfo.HasAttribute<QueryStringAttribute>()\r\n                    && !input.RouteParameters.Any(p => p.Name == info.Name))\r\n                {\r\n                    input.AddQueryInput(propertyInfo);\r\n                }\r\n            }\r\n        }\r\n\r\n\r\n        private static void parse(string template, Action<string, string> callback)\r\n        {\r\n\r\n\r\n            foreach (\r\n                Match match in Regex.Matches(template, propertyFindingPattern, RegexOptions.IgnorePatternWhitespace))\r\n            {\r\n                string defaultValue = match.Groups[\"default\"].Success ? match.Groups[\"default\"].Value : null;\r\n                callback(match.Groups[\"varname\"].Value, defaultValue);\r\n            }\r\n        }\r\n\r\n        public static int PatternRank(string pattern)\r\n        {\r\n            return Regex.Matches(pattern, propertyFindingPattern, RegexOptions.IgnorePatternWhitespace).Count;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Routes/RouteDefinition.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text.RegularExpressions;\r\nusing System.Web.Routing;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core.Resources.PathBased;\r\n\r\nnamespace FubuMVC.Core.Registration.Routes\r\n{\r\n    public class RouteDefinition : IRouteDefinition, DescribesItself\r\n    {\r\n        public static readonly IEnumerable<string> VERBS = new List<string>\r\n        {\r\n            \"POST\",\r\n            \"GET\",\r\n            \"PUT\",\r\n            \"DELETE\",\r\n            \"HEAD\"\r\n        };\r\n\r\n        public static readonly string HTTP_METHOD_CONSTRAINT = \"HttpMethods\";\r\n        private readonly IList<Action<Route>> _alterations = new List<Action<Route>>();\r\n\r\n        private readonly Cache<string, IRouteConstraint> _constraints = new Cache<string, IRouteConstraint>();\r\n        private readonly IList<string> _httpMethods = new List<string>();\r\n        private IRouteInput _input;\r\n        private string _pattern;\r\n\r\n        public RouteDefinition(string pattern)\r\n        {\r\n            _pattern = pattern;\r\n        }\r\n\r\n\r\n        public string PatternWithoutDefaultValues\r\n        {\r\n            get\r\n            {\r\n                const string capture = @\":\\w+\";\r\n                var pattern = _pattern;\r\n                var routeUrl = Regex.Matches(pattern, capture, RegexOptions.IgnorePatternWhitespace)\r\n                    .Cast<Match>()\r\n                    .Aggregate(pattern, (current, match) => current.Replace(match.Value, string.Empty));\r\n\r\n\r\n                return routeUrl;\r\n            }\r\n        }\r\n\r\n        public void RegisterRouteCustomization(Action<Route> action)\r\n        {\r\n            _alterations.Add(action);\r\n        }\r\n\r\n        public SessionStateRequirement SessionStateRequirement { get; set; }\r\n\r\n\r\n        public IRouteInput Input\r\n        {\r\n            get { return _input; }\r\n            set\r\n            {\r\n                if (value != null)\r\n                {\r\n                    value.Parent = this;\r\n                }\r\n\r\n                _input = value;\r\n            }\r\n        }\r\n\r\n        public void ApplyInputType(Type inputType)\r\n        {\r\n            if (inputType.CanBeCastTo<ResourcePath>()) return;\r\n\r\n            Input = RouteBuilder.Build(inputType, Pattern).Input;\r\n        }\r\n\r\n        public string CreateUrlFromInput(object input)\r\n        {\r\n            if (input is IMakeMyOwnUrl)\r\n            {\r\n                return input.As<IMakeMyOwnUrl>().ToUrlPart(Pattern);\r\n            }\r\n\r\n\r\n            if (input == null)\r\n            {\r\n                return Pattern;\r\n            }\r\n\r\n            if (Input == null)\r\n            {\r\n                throw new InvalidOperationException(\"Cannot call this method if the RouteDefinition has not input type\");\r\n            }\r\n\r\n            return Input.CreateUrlFromInput(input);\r\n        }\r\n\r\n        public void RootUrlAt(string baseUrl)\r\n        {\r\n            Prepend(baseUrl);\r\n        }\r\n\r\n        public virtual Route ToRoute()\r\n        {\r\n            var route = new Route(PatternWithoutDefaultValues, null, getConstraints(), null);\r\n            if (Input != null)\r\n            {\r\n                Input.AlterRoute(route);\r\n            }\r\n\r\n            _alterations.Each(x => x(route));\r\n\r\n            return route;\r\n        }\r\n\r\n        public void Append(string patternPart)\r\n        {\r\n            _pattern += \"/\" + patternPart;\r\n            _pattern = _pattern.Replace(\"//\", \"/\").TrimStart('/');\r\n        }\r\n\r\n        public string Pattern\r\n        {\r\n            get { return _pattern; }\r\n        }\r\n\r\n        public void RemoveLastPatternPart()\r\n        {\r\n            var parts = Pattern.Split('/');\r\n            var newParts = parts.Take(parts.Length - 1).ToArray();\r\n            _pattern = newParts.Join(\"/\");\r\n        }\r\n\r\n        public virtual int Rank\r\n        {\r\n            get\r\n            {\r\n                if (Input != null && Input.InputType != null && Input.InputType.CanBeCastTo<IRankMeLast>())\r\n                {\r\n                    return int.MaxValue;\r\n                }\r\n\r\n                return RouteBuilder.PatternRank(_pattern);\r\n            }\r\n        }\r\n\r\n\r\n        public void AddHttpMethodConstraint(string method)\r\n        {\r\n            _httpMethods.Fill(method.ToUpper());\r\n        }\r\n\r\n        public bool RespondsToMethod(string method)\r\n        {\r\n            return _httpMethods.Any() ? _httpMethods.Contains(method.ToUpper()) : true;\r\n        }\r\n\r\n        public IList<string> AllowedHttpMethods\r\n        {\r\n            get { return _httpMethods; }\r\n        }\r\n\r\n        public void Prepend(string prefix)\r\n        {\r\n            if (prefix.IsEmpty()) return;\r\n\r\n            // Apparently this is necessary\r\n            if (_pattern.StartsWith(prefix)) return;\r\n\r\n            _pattern = prefix.TrimEnd('/') + \"/\" + _pattern;\r\n        }\r\n\r\n        public IEnumerable<string> GetHttpMethodConstraints()\r\n        {\r\n            return _httpMethods.OrderBy(x => x);\r\n        }\r\n\r\n        protected RouteValueDictionary getConstraints()\r\n        {\r\n            var dictionary = new RouteValueDictionary();\r\n            if (_httpMethods.Any())\r\n            {\r\n                dictionary.Add(HTTP_METHOD_CONSTRAINT, new HttpMethodConstraint(_httpMethods.ToArray()));\r\n            }\r\n\r\n            _constraints.Each(dictionary.Add);\r\n\r\n            return dictionary.Any() ? dictionary : null;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            // TODO -- need to account for the input?\r\n            return string.Format(\"{0}\", _pattern);\r\n        }\r\n\r\n        void DescribesItself.Describe(Description description)\r\n        {\r\n            description.Title = \"Route:  \" + Pattern;\r\n            if (_input != null) description.Children[\"Input\"] = Description.For(_input);\r\n\r\n            if (_constraints.Any())\r\n            {\r\n                description.AddList(\"Constraints\", _constraints);\r\n            }\r\n\r\n            description.Properties[\"Http Verbs\"] = AllowedHttpMethods.Any() ? AllowedHttpMethods.Join(\", \") : \"Any\";\r\n\r\n            description.Properties[\"SessionStateRequirement\"] = SessionStateRequirement == null\r\n                ? \"Default\"\r\n                : SessionStateRequirement.ToString();\r\n        }\r\n\r\n\r\n        protected bool Equals(RouteDefinition other)\r\n        {\r\n            return string.Equals(_pattern, other._pattern, StringComparison.OrdinalIgnoreCase)\r\n                   && _constraints.SequenceEqual(other._constraints)\r\n                   && GetHttpMethodConstraints().SequenceEqual(other.GetHttpMethodConstraints());\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != this.GetType()) return false;\r\n            return Equals((RouteDefinition) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                var hashCode = _constraints.GetHashCode();\r\n                hashCode = (hashCode*397) ^ _httpMethods.GetHashCode();\r\n                hashCode = (hashCode*397) ^ _pattern.GetHashCode();\r\n                return hashCode;\r\n            }\r\n        }\r\n\r\n        public static IRouteDefinition Empty()\r\n        {\r\n            return new RouteDefinition(string.Empty);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Routes/RouteInput.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing System.Web.Routing;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Reflection;\r\n\r\nnamespace FubuMVC.Core.Registration.Routes\r\n{\r\n    public class RouteInput<T> : IRouteInput, DescribesItself\r\n    {\r\n        private RouteDefinition _parent;\r\n        private readonly List<RouteParameter> _queryParameters = new List<RouteParameter>();\r\n        private readonly List<RouteParameter> _routeParameters = new List<RouteParameter>();\r\n\r\n\r\n        public RouteInput(RouteDefinition parent)\r\n        {\r\n            _parent = parent;\r\n        }\r\n\r\n        public RouteInput(string pattern) : this(new RouteDefinition(pattern))\r\n        {\r\n            _parent.Input = this;\r\n        }\r\n\r\n        public RouteDefinition Parent\r\n        {\r\n            get { return _parent; }\r\n            set { _parent = value; }\r\n        }\r\n\r\n        public List<RouteParameter> RouteParameters\r\n        {\r\n            get { return _routeParameters; }\r\n        }\r\n\r\n        public List<RouteParameter> QueryParameters\r\n        {\r\n            get { return _queryParameters; }\r\n        }\r\n\r\n        public Type InputType\r\n        {\r\n            get { return typeof(T); }\r\n        }\r\n\r\n        public int Rank\r\n        {\r\n            get { return _routeParameters.Count; }\r\n        }\r\n\r\n        public virtual string CreateUrlFromInput(object input)\r\n        {\r\n            var url = _parent.Pattern;\r\n\r\n            if (_routeParameters.Any(x => !x.CanSubstitute(input)))\r\n            {\r\n                throw new FubuException(\r\n                    2107,\r\n                    \"Input model type '{0}' for route '{1}' requires a value for property '{2}', but no value was provided when creating the url and the route definition does not have a default value for this property.\",\r\n                    InputType.Name,\r\n                    _parent.Pattern,\r\n                    _routeParameters.First(x => x.DefaultValue == null).Name);\r\n            }\r\n\r\n            url = fillRouteValues(url, input);\r\n\r\n            var queryParameters = _queryParameters.Where(x => x.HasValue(input));\r\n            if (queryParameters.Any())\r\n            {\r\n                url = url + \"?\" + queryParameters.Select(x => x.ToQueryString(input)).Join(\"&\");\r\n            }\r\n\r\n            return url;\r\n        }\r\n\r\n        public string CreateUrlFromParameters(RouteParameters parameters)\r\n        {\r\n            var url = _parent.Pattern;\r\n\r\n            if (parameters == null)\r\n            {\r\n                throw new FubuException(2107, \"RouteParameters cannot be null\");\r\n            }\r\n\r\n            if (_routeParameters.Any(x => !x.IsSatisfied(parameters)))\r\n            {\r\n                throw new FubuException(\r\n                    2107,\r\n                    \"Missing required parameters for route {0}, got '{1}'\",\r\n                    _parent.Pattern,\r\n                    parameters.AllNames.Join(\", \"));\r\n            }\r\n\r\n            _routeParameters.Each(input => url = input.Substitute(parameters, url));\r\n            url = fillQueryInputs(url, input => input.ToQueryString(parameters));\r\n\r\n            return url;\r\n        }\r\n\r\n        public string CreateTemplate(object input, Func<object, object>[] hash)\r\n        {\r\n            var url = _parent.Pattern;\r\n\r\n            _routeParameters.Where(x => x.CanTemplate(input))\r\n                .Each(r => url = r.Substitute((T)input, url));\r\n\r\n            if (hash != null)\r\n                hash.Each(func =>\r\n                {\r\n                    var name = func.Method.GetParameters()[0].Name;\r\n                    var rawValue = func(null);\r\n                    url = url.Replace(\"{\" + name + \"}\", rawValue.ToString().UrlEncoded());\r\n                });\r\n\r\n            return fillQueryInputs(url, i => i.ToQueryString(input));\r\n        }\r\n\r\n\r\n\r\n        public void AlterRoute(Route route)\r\n        {\r\n            var defaults = new RouteValueDictionary();\r\n\r\n            _routeParameters\r\n                .Where(r => r.DefaultValue != null)\r\n                .Each(input => defaults.Add(input.Name, input.DefaultValue));\r\n\r\n            route.Defaults = defaults;\r\n        }\r\n\r\n        private string fillQueryInputs(string url, Func<RouteParameter, string> getQuerystring)\r\n        {\r\n            if (_queryParameters.Count == 0) return url;\r\n\r\n            return url + \"?\" + _queryParameters.Select(getQuerystring).Join(\"&\");\r\n        }\r\n\r\n        private string fillRouteValues(string url, object input)\r\n        {\r\n            if (_routeParameters.Count == 0) return url;\r\n\r\n            _routeParameters.Each(r => { url = r.Substitute((T)input, url); });\r\n\r\n            return url;\r\n        }\r\n\r\n        public void AddRouteInput(Expression<Func<T, object>> expression)\r\n        {\r\n            var accessor = ReflectionHelper.GetAccessor(expression);\r\n            var input = new RouteParameter(accessor);\r\n\r\n            if (_routeParameters.Any(x => x.Name == input.Name)) return;\r\n\r\n            _routeParameters.Add(input);\r\n        }\r\n\r\n        public void AddQueryInputs(IEnumerable<RouteParameter> inputs)\r\n        {\r\n            _queryParameters.AddRange(inputs);\r\n        }\r\n\r\n        public void AddQueryInput(Expression<Func<T, object>> expression)\r\n        {\r\n            var accessor = ReflectionHelper.GetAccessor(expression);\r\n            var input = new RouteParameter(accessor);\r\n\r\n            _queryParameters.Add(input);\r\n        }\r\n\r\n        public void AddQueryInput(PropertyInfo property)\r\n        {\r\n            Accessor accessor = new SingleProperty(property);\r\n            var input = new RouteParameter(accessor);\r\n\r\n            _queryParameters.Fill(input);\r\n        }\r\n\r\n        public void AddRouteInput(RouteParameter parameter, bool appendToUrl)\r\n        {\r\n            if (_routeParameters.Any(x => x.Name == parameter.Name)) return;\r\n\r\n            if (appendToUrl)\r\n            {\r\n                _parent.Append(\"{\" + parameter.Name + \"}\");\r\n            }\r\n\r\n            _routeParameters.Add(parameter);\r\n        }\r\n\r\n        public RouteParameter RouteInputFor(string routeKey)\r\n        {\r\n            return _routeParameters.Single(x => x.Name == routeKey);\r\n        }\r\n\r\n        public RouteParameter QueryInputFor(string querystringKey)\r\n        {\r\n            return _queryParameters.Single(x => x.Name == querystringKey);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return \"{0} --> {1}\".ToFormat(_parent.Pattern, typeof(T).FullName);\r\n        }\r\n\r\n        void DescribesItself.Describe(Description description)\r\n        {\r\n            description.Title = \"RouteInput for \" + typeof (T).Name;\r\n            description.ShortDescription =\r\n                \"Responsible for binding property values of an existing model {0} to a url pattern\".ToFormat(\r\n                    typeof (T).Name);\r\n\r\n            description.Properties[\"InputType\"] = typeof (T).FullName;\r\n\r\n            if (_routeParameters.Any())\r\n            {\r\n                description.AddList(\"Route Inputs\", _routeParameters);\r\n            }\r\n\r\n            if (_queryParameters.Any())\r\n            {\r\n                description.AddList(\"Query Inputs\", _queryParameters);\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Routes/RouteParameter.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text.RegularExpressions;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Reflection;\r\n\r\nnamespace FubuMVC.Core.Registration.Routes\r\n{\r\n    public class RouteParameter : DescribesItself\r\n    {\r\n        // Use the first property to get the name\r\n        // use the full blown accessor to get the value\r\n\r\n        private readonly Accessor _accessor;\r\n        private readonly Regex _regex;\r\n        private readonly Regex _regexGreedy;\r\n\r\n        public RouteParameter(Accessor accessor)\r\n        {\r\n            _accessor = accessor;\r\n            accessor.ForAttribute<RouteInputAttribute>(x => DefaultValue = x.DefaultValue);\r\n\r\n            _regex = new Regex(@\"{\\*?\" + Name + @\"(?:\\:.*?)?}\", RegexOptions.Compiled);\r\n            _regexGreedy = new Regex(@\"{\\*\" + Name + @\"(?:\\:.*?)?}\", RegexOptions.Compiled);\r\n        }\r\n\r\n        public string Name { get { return _accessor.Name; } }\r\n\r\n        public object DefaultValue { get; set; }\r\n\r\n        public bool CanSubstitute(object inputModel)\r\n        {\r\n            return GetRawValue(inputModel) != null;\r\n        }\r\n\r\n        public string Substitute(object input, string url)\r\n        {\r\n            object rawValue = GetRawValue(input);\r\n            string parameterValue = rawValue.ToString();\r\n            return substitute(url, parameterValue);\r\n        }\r\n\r\n        private string substitute(string url, string parameterValue)\r\n        {\r\n            var encodedValue = _regexGreedy.IsMatch(url) ? encodeParameterValue(parameterValue) : parameterValue.UrlEncoded();\r\n            return _regex.Replace(url, encodedValue);\r\n        }\r\n\r\n        private static string encodeParameterValue(string parameterValue)\r\n        {\r\n            var values = parameterValue.Split('/');\r\n            return values.Length > 0 ? values.Select(x => x.UrlEncoded()).Join(\"/\") : values.UrlEncoded();\r\n        }\r\n\r\n        public string Substitute(RouteParameters parameters, string url)\r\n        {\r\n            return substitute(url, parameters[_accessor.Name] ?? DefaultValue.ToString());\r\n        }\r\n\r\n        public bool CanTemplate(object inputModel)\r\n        {\r\n            object rawValue = GetRawValue(inputModel);\r\n            if (rawValue != null)\r\n            {\r\n                return _accessor.PropertyType.IsValueType\r\n                           ? !rawValue.Equals(Activator.CreateInstance(_accessor.PropertyType))\r\n                           : true;\r\n\r\n            }\r\n            return false;\r\n        }\r\n\r\n        // virtual so you can override w/ different behavior\r\n        public virtual string ToQueryString(object input)\r\n        {\r\n            object rawValue = GetRawValue(input);\r\n\r\n            return makeQueryString(rawValue);\r\n        }\r\n\r\n        private string makeQueryString(object rawValue)\r\n        {\r\n            if (rawValue == null || string.Empty.Equals(rawValue))\r\n            {\r\n                return Name.UrlEncoded() + \"=\";\r\n            }\r\n\r\n            return Name.UrlEncoded() + \"=\" + rawValue.ToString().UrlEncoded();\r\n        }\r\n\r\n        public string ToQueryString(RouteParameters parameters)\r\n        {\r\n            return makeQueryString(parameters[Name]);\r\n        }\r\n\r\n        private object GetRawValue(object input)\r\n        {\r\n            object rawValue = input == null\r\n                                  ? DefaultValue\r\n                                  : _accessor.GetValue(input);\r\n\r\n            return rawValue ?? DefaultValue;\r\n        }\r\n\r\n        public bool IsSatisfied(RouteParameters routeParameters)\r\n        {\r\n            return routeParameters.Has(_accessor.Name) || DefaultValue != null;\r\n        }\r\n\r\n        public bool HasValue(object input)\r\n        {\r\n            var raw = _accessor.GetValue(input);\r\n            return raw != null;\r\n        }\r\n\r\n        public bool Equals(RouteParameter other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other._accessor, _accessor);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof (RouteParameter)) return false;\r\n            return Equals((RouteParameter) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return (_accessor != null ? _accessor.GetHashCode() : 0);\r\n        }\r\n\r\n        void DescribesItself.Describe(Description description)\r\n        {\r\n            description.Title = _accessor.ToString();\r\n\r\n            if (DefaultValue != null)\r\n            {\r\n                description.Properties[\"DefaultValue\"] = DefaultValue.ToString();\r\n            }\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            if (DefaultValue != null) return string.Format(\"Accessor: {0}, DefaultValue: {1}\", _accessor, DefaultValue);\r\n\r\n            return \"Accessor: {0}\".ToFormat(_accessor);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Routes/RouteParameters.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq.Expressions;\r\nusing FubuCore.Reflection;\r\nusing FubuCore.Util;\r\n\r\nnamespace FubuMVC.Core.Registration.Routes\r\n{\r\n    public class RouteParameters\r\n    {\r\n        private readonly Cache<string, string> _parameters = new Cache<string, string>(key => null);\r\n\r\n        public string this[string name]\r\n        {\r\n            get { return _parameters[name]; }\r\n            set { _parameters[name] = value; }\r\n        }\r\n\r\n        public IEnumerable<string> AllNames\r\n        {\r\n            get { return _parameters.GetAllKeys(); }\r\n        }\r\n\r\n        public bool Has(string name)\r\n        {\r\n            return _parameters.Has(name);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return \"parameters:  \" + _parameters.GetAllKeys().Join(\", \");\r\n        }\r\n    }\r\n\r\n    public class RouteParameters<T> : RouteParameters\r\n    {\r\n        public string this[Expression<Func<T, object>> expression]\r\n        {\r\n            get { return this[expression.ToAccessor().Name]; }\r\n            set { this[expression.ToAccessor().Name] = value; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Routes/SessionStateRequirement.cs",
    "content": "namespace FubuMVC.Core.Registration.Routes\r\n{\r\n    public class SessionStateRequirement\r\n    {\r\n        private readonly string _text;\r\n\r\n        public static readonly SessionStateRequirement RequiresSessionState = new SessionStateRequirement(\"RequiresSessionState\");\r\n        public static readonly SessionStateRequirement DoesNotUseSessionState = new SessionStateRequirement(\"DoesNotUseSessionState\");\r\n\r\n        private SessionStateRequirement(string text)\r\n        {\r\n            _text = text;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return _text;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Routes/StandardRoutePolicy.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Web.Routing;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Runtime.Handlers;\n\nnamespace FubuMVC.Core.Registration.Routes\n{\n    \n\n    public class StandardRoutePolicy : IRoutePolicy\n    {\n        public IList<RouteBase> BuildRoutes(BehaviorGraph graph, IServiceFactory factory)\n        {\n            var defaultSessionRequirement = graph.Settings.Get<SessionStateRequirement>();\n            var orderedEnumerable = graph\n                .Chains.OfType<RoutedChain>()\n                .SelectMany(toRoutes)\n                .OrderBy(x => x.Route.Rank);\n\n            return orderedEnumerable\n                .Select(x => buildRoute(factory, defaultSessionRequirement, x.Chain, x.Route))\n                .ToList();\n        }\n\n        public class ChainRoute\n        {\n            public RoutedChain Chain;\n            public IRouteDefinition Route;\n\n            public override string ToString()\n            {\n                return string.Format(\"Chain: {0}, Route: {1}\", Chain, Route.Pattern);\n            }\n        }\n\n\n        private IEnumerable<ChainRoute> toRoutes(RoutedChain chain)\n        {\n            yield return new ChainRoute {Chain = chain, Route = chain.Route};\n\n            foreach (var additionalRoute in chain.AdditionalRoutes)\n            {\n                yield return new ChainRoute {Chain = chain, Route = additionalRoute};\n            }\n        }\n\n\n        private RouteBase buildRoute(IServiceFactory factory, SessionStateRequirement defaultSessionRequirement,\n                                    BehaviorChain chain, IRouteDefinition routeDefinition)\n        {\n            var requiresSession = routeDefinition.SessionStateRequirement ?? defaultSessionRequirement;\n\n            var route = routeDefinition.ToRoute();\n            var handlerSource = DetermineHandlerSource(requiresSession, chain);\n            var invoker = DetermineInvoker(factory, chain);\n\n            route.RouteHandler = new FubuRouteHandler(invoker, handlerSource);\n\n            return route;\n        }\n\n        public static IBehaviorInvoker DetermineInvoker(IServiceFactory factory, BehaviorChain chain)\n        {\n            return new BehaviorInvoker(factory, chain);\n        }\n\n        public static IHttpHandlerSource DetermineHandlerSource(SessionStateRequirement sessionStateRequirement, BehaviorChain chain)\n        {\n            return sessionStateRequirement == SessionStateRequirement.RequiresSessionState\n                       ? (IHttpHandlerSource)new AsynchronousHttpHandlerSource()\n                       : new SessionlessAsynchronousHttpHandlerSource();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/ServiceRegistry.cs",
    "content": "using System;\r\nusing FubuCore.Reflection;\r\nusing StructureMap;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public class ServiceRegistry : Registry\r\n    {\r\n        /// <summary>\r\n        /// Sets the instanceault implementation of a service if there is no\r\n        /// previous registration\r\n        /// </summary>\r\n        /// <typeparam name=\"TService\"></typeparam>\r\n        /// <typeparam name=\"TImplementation\"></typeparam>\r\n        public SmartInstance<TImplementation, TService> SetServiceIfNone<TService, TImplementation>()\r\n            where TImplementation : TService\r\n        {\r\n            return For<TService>().UseIfNone<TImplementation>();\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Sets the instanceault implementation of a service if there is no\r\n        /// previous registration\r\n        /// </summary>\r\n        public void SetServiceIfNone(Type type, Instance instance)\r\n        {\r\n            For(type).Configure(x => x.Fallback = instance);\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Sets the instanceault implementation of a service if there is no\r\n        /// previous registration\r\n        /// </summary>\r\n        /// <typeparam name=\"TService\"></typeparam>\r\n        /// <param name=\"value\"></param>\r\n        public ObjectInstance SetServiceIfNone<TService>(TService value)\r\n        {\r\n            return For<TService>().UseIfNone(value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Sets the instanceault implementation of a service if there is no\r\n        /// previous registration\r\n        /// </summary>\r\n        /// <param name=\"interfaceType\"></param>\r\n        /// <param name=\"concreteType\"></param>\r\n        /// <returns></returns>\r\n        public Instance SetServiceIfNone(Type interfaceType, Type concreteType)\r\n        {\r\n            var instance = new ConfiguredInstance(concreteType);\r\n            For(interfaceType).Configure(x => x.Fallback = instance);\r\n            return instance;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Registers an *additional* implementation of a service.  Actual behavior varies by actual\r\n        /// IoC container\r\n        /// </summary>\r\n        /// <typeparam name=\"TService\"></typeparam>\r\n        /// <typeparam name=\"TImplementation\"></typeparam>\r\n        /// <returns></returns>\r\n        public Instance AddService<TService, TImplementation>() where TImplementation : TService\r\n        {\r\n            return For<TService>().Add<TImplementation>();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Registers an *additional* implementation of a service.  Actual behavior varies by actual\r\n        /// IoC container\r\n        /// </summary>\r\n        /// <typeparam name=\"TService\"></typeparam>\r\n        /// <param name=\"implementation\"></param>\r\n        /// <returns></returns>\r\n        public Instance AddService<TService>(Type implementationType)\r\n        {\r\n            var instance = new ConfiguredInstance(implementationType);\r\n\r\n            For<TService>().AddInstance(instance);\r\n\r\n            return instance;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Registers a instanceault implementation for a service.  Overwrites any existing\r\n        /// registration\r\n        /// </summary>\r\n        /// <typeparam name=\"TService\"></typeparam>\r\n        /// <typeparam name=\"TImplementation\"></typeparam>\r\n        public SmartInstance<TImplementation, TService> ReplaceService<TService, TImplementation>()\r\n            where TImplementation : TService\r\n        {\r\n            return For<TService>().ClearAll().Use<TImplementation>();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Registers a instanceault implementation for a service.  Overwrites any existing\r\n        /// registration\r\n        /// </summary>\r\n        /// <typeparam name=\"TService\"></typeparam>\r\n        /// <param name=\"value\"></param>\r\n        public ObjectInstance<TService, TService> ReplaceService<TService>(TService value) where TService : class\r\n        {\r\n            return For<TService>().ClearAll().Use(value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Registers an *additional* implementation of a service.  Actual behavior varies by actual\r\n        /// IoC container\r\n        /// </summary>\r\n        /// <typeparam name=\"TService\"></typeparam>\r\n        /// <param name=\"value\"></param>\r\n        public void AddService<TService>(TService value) where TService : class\r\n        {\r\n            For<TService>().Add(value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes any registrations for type T\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        public void AddService(Type type, Instance instance)\r\n        {\r\n            For(type).Add(instance);\r\n        }\r\n\r\n\r\n        public static bool ShouldBeSingleton(Type type)\r\n        {\r\n            if (type == null) return false;\r\n\r\n            return type.Name.EndsWith(\"Cache\") || type.HasAttribute<SingletonAttribute>();\r\n        }\r\n\r\n        public void ReplaceService(Type type, Instance @default)\r\n        {\r\n            For(type).ClearAll();\r\n            For(type).Use(@default);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/Services/ModelBindingServicesRegistry.cs",
    "content": "using FubuCore.Binding;\r\nusing FubuCore.Binding.InMemory;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.AspNet;\r\nusing FubuMVC.Core.Resources.PathBased;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Registration.Services\r\n{\r\n    public class ModelBindingServicesRegistry : ServiceRegistry\r\n    {\r\n        public ModelBindingServicesRegistry()\r\n        {\r\n            AddService<IModelBinder>(new CurrentMimeTypeModelBinder());\r\n            AddService<IModelBinder, ResourcePathBinder>();\r\n            SetServiceIfNone<ISetterBinder, SetterBinder>();\r\n\r\n            SetServiceIfNone<IObjectResolver, ObjectResolver>();\r\n\r\n            // STrictly a standin for testing purposes\r\n            SetServiceIfNone<IBindingContext, BindingContext>();\r\n\r\n            AddService<IConverterFamily, AspNetObjectConversionFamily>();\r\n            SetServiceIfNone<IBindingLogger, NulloBindingLogger>();\r\n\r\n            AddService<IConverterFamily, AspNetPassthroughConverter>();\r\n\r\n            AddService<IPropertyBinder, CurrentRequestFullUrlPropertyBinder>();\r\n            AddService<IPropertyBinder, CurrentRequestRelativeUrlPropertyBinder>();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/SettingAlteration.cs",
    "content": "﻿using System;\r\nusing FubuCore.Descriptions;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public class SettingAlteration<T> : ISettingsAlteration, DescribesItself where T : class\r\n    {\r\n        private readonly Action<T> _alteration;\r\n\r\n        public SettingAlteration(Action<T> alteration)\r\n        {\r\n            _alteration = alteration;\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Alter \" + typeof (T).Name;\r\n        }\r\n\r\n        public void Alter(SettingsCollection settings)\r\n        {\r\n            settings.Alter(_alteration);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/SettingReplacement.cs",
    "content": "using FubuCore.Descriptions;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public class SettingReplacement<T> : ISettingsAlteration, DescribesItself where T : class\r\n    {\r\n        private readonly T _settings;\r\n\r\n        public SettingReplacement(T settings)\r\n        {\r\n            _settings = settings;\r\n        }\r\n\r\n        public void Alter(SettingsCollection settings)\r\n        {\r\n            settings.Replace(_settings);\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Replace the settings for \" + typeof (T).Name;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/SettingsCollection.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Configuration;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core.ServiceBus;\r\nusing FubuMVC.Core.ServiceBus.Configuration;\r\nusing FubuMVC.Core.ServiceBus.Polling;\r\nusing FubuMVC.Core.ServiceBus.ScheduledJobs;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public class SettingsCollection\r\n    {\r\n        public static readonly Lazy<ISettingsProvider> SettingsProvider =\r\n            new Lazy<ISettingsProvider>(() => new AppSettingsProvider(ObjectResolver.Basic()));\r\n\r\n        private readonly Cache<Type, object> _settings = new Cache<Type, object>();\r\n\r\n        public SettingsCollection()\r\n        {\r\n            _settings.OnMissing = buildDefault;\r\n\r\n            warmUp<ChannelGraph>();\r\n            warmUp<PollingJobSettings>();\r\n            warmUp<ScheduledJobGraph>();\r\n            warmUp<TransportSettings>();\r\n        }\r\n\r\n        private void warmUp<T>() where T : class\r\n        {\r\n            Alter<T>(x => { });\r\n        }\r\n\r\n        private static object buildDefault(Type type)\r\n        {\r\n            return SettingsProvider.Value.SettingsFor(type);\r\n        }\r\n\r\n        public T Get<T>() where T : class\r\n        {\r\n            return _settings[typeof (T)].As<T>();\r\n        }\r\n\r\n\r\n        public void Alter<T>(Action<T> alteration) where T : class\r\n        {\r\n            alteration(Get<T>());\r\n        }\r\n\r\n        public void Replace<T>(T settings) where T : class\r\n        {\r\n            _settings[typeof (T)] = settings;\r\n        }\r\n\r\n\r\n        public bool HasExplicit<T>()\r\n        {\r\n            return _settings.Has(typeof (T));\r\n        }\r\n\r\n        public void Register(ServiceRegistry registry)\r\n        {\r\n            _settings.Each((t, o) =>\r\n            {\r\n                var registrar = typeof (Registrar<>).CloseAndBuildAs<IRegistrar>(o, t);\r\n                registrar.Register(registry);\r\n            });\r\n        }\r\n\r\n        public interface IRegistrar\r\n        {\r\n            void Register(ServiceRegistry registry);\r\n        }\r\n\r\n        public class Registrar<T> : IRegistrar where T : class\r\n        {\r\n            private readonly T _settings;\r\n\r\n            public Registrar(T settings)\r\n            {\r\n                _settings = settings;\r\n            }\r\n\r\n            public void Register(ServiceRegistry registry)\r\n            {\r\n                registry.For<T>().ClearAll().Use(_settings);\r\n            }\r\n        }\r\n\r\n        public object Get(Type type)\r\n        {\r\n            return _settings[type];\r\n        }\r\n    }\r\n\r\n\r\n    public static class TaskExtensions\r\n    {\r\n        public static T Result<T>(this Task<T> task)\r\n        {\r\n            task.Wait(30.Seconds()).AssertFinished();\r\n            return task.Result;\r\n        }\r\n\r\n        public static void AssertFinished(this bool waited)\r\n        {\r\n            if (!waited)\r\n            {\r\n                throw new TimeoutException(\"Task operation timed out\");\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/SingleTypeActionSource.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Threading.Tasks;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public class SingleTypeActionSource : IActionSource, DescribesItself\r\n    {\r\n        private readonly Type _actionType;\r\n        private readonly ActionMethodFilter _methodFilter;\r\n\r\n        public SingleTypeActionSource(Type actionType, ActionMethodFilter methodFilter)\r\n        {\r\n            _actionType = actionType;\r\n            _methodFilter = methodFilter;\r\n        }\r\n\r\n        public Task<ActionCall[]> FindActions(Assembly applicationAssembly)\r\n        {\r\n            return Task.Factory.StartNew(() =>\r\n            {\r\n                return _actionType.PublicInstanceMethods().Where(_methodFilter.Matches)\r\n                    .Select(method => new ActionCall(_actionType, method)).ToArray();\r\n            });\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Type: \" + _actionType.FullName;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Registration/TypeRegistrationExtensions.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Reflection;\r\n\r\nnamespace FubuMVC.Core.Registration\r\n{\r\n    public static class TypeRegistrationExtensions\r\n    {\r\n        // TODO -- move to FubuCore\r\n        public static IEnumerable<MethodInfo> PublicInstanceMethods(this Type type)\r\n        {\r\n            return type.GetMethods(BindingFlags.Instance | BindingFlags.Public);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/AjaxContinuations.cs",
    "content": "using FubuCore;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Resources.Conneg\n{\n    public class AjaxContinuations : ConnegRule, DescribesItself\n    {\n        protected override DoNext applyInputs(IInputNode node, BehaviorChain chain, ConnegSettings settings)\n        {\n            if (!chain.ResourceType().CanBeCastTo<AjaxContinuation>()) return DoNext.Continue;\n\n            node.Add(typeof(ModelBindingReader<>));\n            node.Add(settings.FormatterFor(MimeType.Json));\n\n            return DoNext.Stop;\n        }\n\n        protected override DoNext applyOutputs(IOutputNode node, BehaviorChain chain, ConnegSettings settings)\n        {\n            if (!chain.ResourceType().CanBeCastTo<AjaxContinuation>()) return DoNext.Continue;\n       \n            node.Add(typeof(AjaxContinuationWriter<>));\n\n            return DoNext.Stop;\n        }\n\n        public void Describe(Description description)\n        {\n            description.ShortDescription =\n                \"If any action returns AjaxContinuation or a subtype, accept Json or HTTP form posts and only output Json with the AjaxContinuationWriter\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/ConnegGraph.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Json;\r\nusing FubuMVC.Core.Registration;\r\nusing StructureMap.Graph.Scanning;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    public class ConnegGraph\r\n    {\r\n        public readonly IList<Type> Writers = new List<Type>();\r\n        public readonly IList<Type> Readers = new List<Type>{typeof(AggregatedQueryReader)};\r\n\r\n        public static Task<ConnegGraph> Build(BehaviorGraph behaviorGraph)\r\n        {\r\n            var graph = new ConnegGraph();\r\n\r\n            var writers = TypeRepository.FindTypes(behaviorGraph.AllAssemblies(),\r\n                TypeClassification.Concretes | TypeClassification.Closed, x => x.Closes(typeof (IMediaWriter<>)))\r\n                .ContinueWith(t => graph.Writers.AddRange(t.Result));\r\n\r\n            var readers = TypeRepository.FindTypes(behaviorGraph.AllAssemblies(),\r\n                TypeClassification.Concretes | TypeClassification.Closed, x => x.Closes(typeof(IReader<>)))\r\n                .ContinueWith(t => graph.Readers.AddRange(t.Result));\r\n\r\n            return Task.WhenAll(writers, readers).ContinueWith(t => graph);\r\n        }\r\n\r\n        public IEnumerable<Type> ReaderTypesFor(Type inputType)\r\n        {\r\n            var matchingInterface = typeof (IReader<>).MakeGenericType(inputType);\r\n\r\n            return Readers.Where(x => x.CanBeCastTo(matchingInterface));\r\n        }\r\n\r\n        public IEnumerable<Type> WriterTypesFor(Type resourceType)\r\n        {\r\n            var matchingInterface = typeof (IMediaWriter<>).MakeGenericType(resourceType);\r\n\r\n            return Writers.Where(x => x.CanBeCastTo(matchingInterface));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/ConnegRule.cs",
    "content": "using FubuMVC.Core.Http;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Resources.Conneg\n{\n    public abstract class ConnegRule : Node<ConnegRule, ConnegRules>\n    {\n        public void ApplyInputs(IInputNode node, BehaviorChain chain, ConnegSettings settings)\n        {\n            if (applyInputs(node, chain, settings) == DoNext.Continue && Next != null)\n            {\n                Next.ApplyInputs(node, chain, settings);\n            }\n        }\n\n        protected virtual DoNext applyInputs(IInputNode node, BehaviorChain chain, ConnegSettings settings)\n        {\n            return DoNext.Continue;\n        }\n\n        public void ApplyOutputs(IOutputNode node, BehaviorChain chain, ConnegSettings settings)\n        {\n            if (applyOutputs(node, chain, settings) == DoNext.Continue && Next != null)\n            {\n                Next.ApplyOutputs(node, chain, settings);\n            }\n        }\n\n        protected virtual DoNext applyOutputs(IOutputNode node, BehaviorChain chain, ConnegSettings settings)\n        {\n            return DoNext.Continue;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/ConnegRules.cs",
    "content": "﻿using FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Resources.Conneg\n{\n    public class ConnegRules : Chain<ConnegRule, ConnegRules>\n    {\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/CustomReadersAndWriters.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Resources.Conneg\n{\n    public class CustomReadersAndWriters : ConnegRule, DescribesItself\n    {\n        protected override DoNext applyInputs(IInputNode node, BehaviorChain chain, ConnegSettings settings)\n        {\n            var graph = settings.Graph ?? new ConnegGraph();\n            graph.ReaderTypesFor(node.InputType()).Each(type => node.Add(Activator.CreateInstance((Type) type).As<IReader>()));\n\n            return DoNext.Continue;\n        }\n\n        protected override DoNext applyOutputs(IOutputNode node, BehaviorChain chain, ConnegSettings settings)\n        {\n            var graph = settings.Graph ?? new ConnegGraph();\n            graph.WriterTypesFor(node.ResourceType).Each(type => node.Add((IMediaWriter) Activator.CreateInstance(type)));\n\n            return DoNext.Continue;\n        }\n\n        public void Describe(Description description)\n        {\n            description.ShortDescription =\n                \"Applies any custom readers and writers found in the loaded assemblies to a chain based on the Input and Resource types\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/DefaultReadersAndWriters.cs",
    "content": "using FubuCore.Descriptions;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Resources.Conneg\n{\n    public class DefaultReadersAndWriters : ConnegRule, DescribesItself\n    {\n        protected override DoNext applyInputs(IInputNode node, BehaviorChain chain, ConnegSettings settings)\n        {\n            node.Add(typeof(ModelBindingReader<>));\n            node.Add(settings.FormatterFor(MimeType.Json));\n            node.Add(settings.FormatterFor(MimeType.Xml));\n\n            return DoNext.Continue;\n        }\n\n        protected override DoNext applyOutputs(IOutputNode node, BehaviorChain chain, ConnegSettings settings)\n        {\n            node.Add(settings.FormatterFor(MimeType.Json));\n            node.Add(settings.FormatterFor(MimeType.Xml));\n\n            return DoNext.Continue;\n        }\n\n        public void Describe(Description description)\n        {\n            description.ShortDescription =\n                \"Accept Json, Xml, and HTTP form posts, writes Json or Xml with Json being the default in both cases\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/DefaultResourceNotFoundHandler.cs",
    "content": "﻿using System.Net;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    public class DefaultResourceNotFoundHandler : IResourceNotFoundHandler\r\n    {\r\n        private readonly IOutputWriter _writer;\r\n\r\n        public DefaultResourceNotFoundHandler(IOutputWriter writer)\r\n        {\r\n            _writer = writer;\r\n        }\r\n\r\n        public void HandleResourceNotFound<T>()\r\n        {\r\n            _writer.Write(MimeType.Html, \"Resource Not Found\");\r\n        }\r\n    }\r\n\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/FormatterReader.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Formatters;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n\r\n    public class FormatterReader<T> : IReader<T>, DescribesItself\r\n    {\r\n        private readonly IFormatter _formatter;\r\n\r\n        public FormatterReader(IFormatter formatter)\r\n        {\r\n            _formatter = formatter;\r\n        }\r\n\r\n        public async Task<T> Read(string mimeType, IFubuRequestContext context)\r\n        {\r\n            var model = await _formatter.Read<T>(context).ConfigureAwait(false);\r\n\r\n            context.Services.GetInstance<IBindingContext>().BindProperties(model);\r\n\r\n            return model;\r\n        }\r\n\r\n        public IEnumerable<string> Mimetypes => _formatter.MatchingMimetypes;\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            var formatter = Description.For(_formatter);\r\n            description.ShortDescription = null;\r\n            description.Title = \"Reading with \" + formatter.Title;\r\n            description.Children[\"Formatter\"] = formatter;\r\n        }\r\n\r\n        public IFormatter Formatter => _formatter;\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/FormatterWriter.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Formatters;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    public class FormatterWriter<T> : IMediaWriter<T>, DescribesItself \r\n    {\r\n        private readonly IFormatter _formatter;\r\n\r\n        public FormatterWriter(IFormatter formatter)\r\n        {\r\n            _formatter = formatter;\r\n        }\r\n\r\n        public Task Write(string mimeType, IFubuRequestContext context, T resource)\r\n        {\r\n            return _formatter.Write(context, resource, mimeType);\r\n        }\r\n\r\n        public IEnumerable<string> Mimetypes => _formatter.MatchingMimetypes;\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            var formatterDescription = Description.For(_formatter);\r\n            description.ShortDescription = null;\r\n            description.Title = \"Write with formatter '{0}'\".ToFormat(formatterDescription.Title);\r\n            description.Children[\"Formatter\"] = formatterDescription;\r\n        }\r\n\r\n        public IFormatter Formatter => _formatter;\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/HtmlStringWriter.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    public class HtmlStringWriter<T> : IMediaWriter<T>, DescribesItself\r\n    {\r\n        public Task Write(string mimeType, IFubuRequestContext context, T resource)\r\n        {\r\n            return context.Writer.WriteHtml(resource.ToString());\r\n        }\r\n\r\n        public IEnumerable<string> Mimetypes\r\n        {\r\n            get { yield return MimeType.Html.Value; }\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Write output model ToString() as text/html\";\r\n            description.ShortDescription = null;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/HtmlTagsRule.cs",
    "content": "using FubuCore;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Registration.Nodes;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.Resources.Conneg\n{\n    public class HtmlTagsRule : ConnegRule, DescribesItself\n    {\n        protected override DoNext applyOutputs(IOutputNode node, BehaviorChain chain, ConnegSettings settings)\n        {\n            if (chain.ResourceType().CanBeCastTo<HtmlTag>() || chain.ResourceType().CanBeCastTo<HtmlDocument>())\n            {\n                node.Add(typeof(HtmlStringWriter<>));\n                return DoNext.Stop;\n            }\n\n            return DoNext.Continue;\n        }\n\n        public void Describe(Description description)\n        {\n            description.ShortDescription =\n                \"If an action returns a model type that inherits from either HtmlTag or HtmlDocument, the chain will only output HTML\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/IMediaWriter.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    public interface IMediaWriter\r\n    {\r\n        IEnumerable<string> Mimetypes { get; }\r\n    }\r\n\r\n    public interface IMediaWriter<T> : IMediaWriter\r\n    {\r\n        Task Write(string mimeType, IFubuRequestContext context, T resource);\r\n        \r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/IOutputNode.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Formatters;\r\nusing FubuMVC.Core.View;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    public interface IOutputNode\r\n    {\r\n        /// <summary>\r\n        /// Add an IFormatter strategy for writing with an optional condition\r\n        /// </summary>\r\n        /// <param name=\"formatter\"></param>\r\n        void Add(IFormatter formatter);\r\n\r\n        /// <summary>\r\n        /// Add a media writer and optional condition by an open type\r\n        /// of IMediaWriter<T> where T is the resource type\r\n        /// </summary>\r\n        /// <param name=\"mediaWriterType\"></param>\r\n        void Add(Type mediaWriterType);\r\n\r\n        /// <summary>\r\n        /// Explicitly register an IMediaWriter<T> where T is the resource type\r\n        /// </summary>\r\n        /// <param name=\"writer\"></param>\r\n        void Add(IMediaWriter writer);\r\n\r\n        /// <summary>\r\n        /// All the explicitly configured Media.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        IEnumerable<IMediaWriter> Media();\r\n\r\n        IEnumerable<IMediaWriter<T>> Media<T>();\r\n\r\n        OutputChoice<T> ChooseOutput<T>(string accepts);\r\n\r\n        /// <summary>\r\n        /// All the possible mimetypes for the explicitly added writers\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        IEnumerable<string> MimeTypes();\r\n\r\n        /// <summary>\r\n        /// Is there at least one writer for this mimetype\r\n        /// </summary>\r\n        /// <param name=\"mimeType\"></param>\r\n        /// <returns></returns>\r\n        bool Writes(MimeType mimeType);\r\n\r\n        /// <summary>\r\n        /// Is there at least one writer for this mimetype?\r\n        /// </summary>\r\n        /// <param name=\"mimeType\"></param>\r\n        /// <returns></returns>\r\n        bool Writes(string mimeType);\r\n\r\n        /// <summary>\r\n        /// Remove all existing writers\r\n        /// </summary>\r\n        void ClearAll();\r\n\r\n        Type ResourceType { get; }\r\n\r\n        /// <summary>\r\n        /// Use this if you want to override the handling for \r\n        /// the resource not being found on a chain by chain\r\n        /// basis\r\n        /// </summary>\r\n        Instance ResourceNotFound { get; set; }\r\n\r\n        bool HasView();\r\n\r\n\r\n        IViewToken DefaultView();\r\n\r\n        /// <summary>\r\n        /// Use the specified type T as the resource not found handler strategy\r\n        /// for only this chain\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        void UseForResourceNotFound<T>() where T : IResourceNotFoundHandler;\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/IReader.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    public interface IReader\r\n    {\r\n        IEnumerable<string> Mimetypes { get; }\r\n    }\r\n\r\n    public interface IReader<T> : IReader\r\n    {\r\n        Task<T> Read(string mimeType, IFubuRequestContext context);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/IResourceNotFoundHandler.cs",
    "content": "﻿namespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    public interface IResourceNotFoundHandler\r\n    {\r\n        void HandleResourceNotFound<T>();\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/InputBehavior.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    public class InputBehavior<T> : BasicBehavior where T : class\r\n    {\r\n        private readonly IFubuRequestContext _context;\r\n        private readonly IInputNode _readers;\r\n\r\n        public InputBehavior(IFubuRequestContext context, IInputNode readers) : base(PartialBehavior.Executes)\r\n        {\r\n            _context = context;\r\n            _readers = readers;\r\n        }\r\n\r\n        // SAMPLE: input-behavior-mechanics\r\n        protected override async Task<DoNext> performInvoke()\r\n        {\r\n            // Might already be there from a different way\r\n            if (_context.Models.Has<T>()) return DoNext.Continue;\r\n\r\n            \r\n            var contentType = _context.Request.GetHeader(HttpRequestHeader.ContentType).FirstOrDefault() ??\r\n                              MimeType.HttpFormMimetype;\r\n            if (contentType.Contains(\";\"))\r\n            {\r\n                var parts = contentType.ToDelimitedArray(';');\r\n\r\n                // TODO -- Do something with the charset someday\r\n                contentType = parts.First();\r\n                /*\r\n                if (parts.Last().Contains(\"charset\"))\r\n                {\r\n                    Charset = parts.Last().Split('=').Last();\r\n                }\r\n                 */\r\n            }\r\n\r\n\r\n\r\n            // Choose the first reader that says it\r\n            // can read the mimetype from the \r\n            // 'content-type' header in the request\r\n            var reader = _readers.SelectReader(contentType) as IReader<T>;\r\n\r\n            \r\n\r\n            if (reader == null)\r\n            {\r\n                // If we don't find a matching Reader for the\r\n                // content-type of the request, this request fails\r\n                // with an HTTP 415 return code\r\n                failWithInvalidMimeType();\r\n                return DoNext.Stop;\r\n            }\r\n\r\n            _context.Logger.DebugMessage(() => new ReaderChoice(contentType, reader));\r\n\r\n            // Use the selected reader\r\n            var target = await reader.Read(contentType, _context).ConfigureAwait(false);\r\n            _context.Models.Set(target);\r\n\r\n            return DoNext.Continue;\r\n        }\r\n\r\n        // ENDSAMPLE\r\n\r\n        private void failWithInvalidMimeType()\r\n        {\r\n            _context.Writer.WriteResponseCode(HttpStatusCode.UnsupportedMediaType);\r\n            _context.Writer.Write(MimeType.Text, \"415:  Unsupported Media Type\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/InputNode.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Web.Caching;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Formatters;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n\r\n    public interface IInputNode : IMayHaveInputType\r\n    {\r\n        /// <summary>\r\n        /// Returns \r\n        /// </summary>\r\n        IEnumerable<IReader> Readers();\r\n\r\n        /// <summary>\r\n        /// The mimetypes that can be read\r\n        /// </summary>\r\n        IEnumerable<string> Mimetypes { get; }\r\n\r\n        /// <summary>\r\n        /// Explicitly add reader for an IFormatter\r\n        /// </summary>\r\n        /// <param name=\"formatter\"></param>\r\n        void Add(IFormatter formatter);\r\n\r\n        /// <summary>\r\n        /// Explicitly add a reader by type.  Type must\r\n        /// be an open generic type that closes to IReader<T>\r\n        /// </summary>\r\n        /// <param name=\"readerType\"></param>\r\n        void Add(Type readerType);\r\n\r\n        /// <summary>\r\n        /// Explicitly add an IReader.  Must implement IReader<T>\r\n        /// where T is the resource type of this chain\r\n        /// </summary>\r\n        /// <param name=\"reader\"></param>\r\n        void Add(IReader reader);\r\n\r\n        /// <summary>\r\n        /// Remove all explicit readers\r\n        /// </summary>\r\n        void ClearAll();\r\n\r\n        /// <summary>\r\n        /// Is there a reader for this mimetype?\r\n        /// </summary>\r\n        /// <param name=\"mimeType\"></param>\r\n        /// <returns></returns>\r\n        bool CanRead(MimeType mimeType);\r\n\r\n        /// <summary>\r\n        /// Is there a reader for this mimetype?\r\n        /// </summary>\r\n        /// <param name=\"mimeType\"></param>\r\n        /// <returns></returns>\r\n        bool CanRead(string mimeType);\r\n\r\n        /// <summary>\r\n        /// Selects the first reader that matches the contentType\r\n        /// </summary>\r\n        /// <param name=\"contentType\"></param>\r\n        /// <returns></returns>\r\n        IReader SelectReader(string contentType);\r\n    }\r\n\r\n    public class InputNode : BehaviorNode, IInputNode, DescribesItself\r\n    {\r\n        private readonly Type _inputType;\r\n        private readonly IList<IReader> _readers = new List<IReader>();\r\n        private ConnegSettings _settings;\r\n        private readonly Lazy<IEnumerable<IReader>> _allReaders;\r\n        private readonly Cache<string, IReader> _readersSelection;\r\n\r\n        public InputNode(Type inputType)\r\n        {\r\n            _inputType = inputType;\r\n\r\n            _allReaders = new Lazy<IEnumerable<IReader>>(() => {\r\n                var settings = _settings ?? new ConnegSettings();\r\n\r\n                settings.ApplyRules(this);\r\n\r\n                return _readers;\r\n            });\r\n\r\n            _readersSelection = new Cache<string, IReader>(contentType =>\r\n            {\r\n                return Readers().FirstOrDefault(x => x.Mimetypes.Contains(contentType));\r\n            });\r\n        }\r\n\r\n        public IReader SelectReader(string contentType)\r\n        {\r\n            return _readersSelection[contentType];\r\n        }\r\n\r\n        public IEnumerable<IReader> Readers()\r\n        {\r\n            return _allReaders.Value;\r\n        }\r\n\r\n        public void Add(IFormatter formatter)\r\n        {\r\n            var reader = typeof (FormatterReader<>).CloseAndBuildAs<IReader>(formatter, _inputType);\r\n            _readers.Add(reader);\r\n        }\r\n\r\n        public void Add(Type readerType)\r\n        {\r\n            if (!readerType.Closes(typeof (IReader<>)))\r\n            {\r\n                throw new ArgumentOutOfRangeException(\"readerType\", \"readerType must close IReader<T> where T is the input type for this chain\");\r\n            }\r\n\r\n            var reader = readerType.CloseAndBuildAs<IReader>(_inputType);\r\n            _readers.Add(reader);\r\n        }\r\n\r\n        public void Add(IReader reader)\r\n        {\r\n            var readerType = typeof (IReader<>).MakeGenericType(_inputType);\r\n            if (!reader.GetType().CanBeCastTo(readerType))\r\n            {\r\n                throw new ArgumentOutOfRangeException(\"reader\", \"reader must be of type \" + readerType.GetFullName());\r\n            }\r\n\r\n            _readers.Add(reader);\r\n        }\r\n\r\n        public override BehaviorCategory Category\r\n        {\r\n            get { return BehaviorCategory.Process; }\r\n        }\r\n\r\n        protected override IConfiguredInstance buildInstance()\r\n        {\r\n            var instance = new ConfiguredInstance(typeof (InputBehavior<>), _inputType);\r\n            instance.Dependencies.Add(typeof(IInputNode), this);\r\n\r\n            return instance;\r\n        }\r\n\r\n\r\n        public void ClearAll()\r\n        {\r\n            _readers.Clear();\r\n        }\r\n\r\n        public IEnumerable<string> Mimetypes\r\n        {\r\n            get\r\n            {\r\n                return _allReaders.Value.SelectMany(x => x.Mimetypes);\r\n            }\r\n        }\r\n\r\n        public IEnumerable<IReader> Explicits\r\n        {\r\n            get\r\n            {\r\n                return _readers;\r\n            }\r\n        }\r\n\r\n        public bool CanRead(MimeType mimeType)\r\n        {\r\n            return Mimetypes.Contains(mimeType.ToString());\r\n        }\r\n\r\n        public bool CanRead(string mimeType)\r\n        {\r\n            return Mimetypes.Contains(mimeType);\r\n        }\r\n\r\n        public Type InputType()\r\n        {\r\n            return _inputType;\r\n        }\r\n\r\n        void DescribesItself.Describe(Description description)\r\n        {\r\n            description.Title = \"Conneg Input\";\r\n            description.ShortDescription =\r\n                \"Performs content negotiation and model resolution from the request for the type \" + InputType().Name;\r\n\r\n            description.AddList(\"Readers\", _readers);\r\n        }\r\n\r\n\r\n        public void UseSettings(ConnegSettings settings)\r\n        {\r\n            _settings = settings;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/MediaProcessingException.cs",
    "content": "using System;\r\nusing System.Runtime.Serialization;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    [Serializable]\r\n    public class MediaProcessingException : Exception\r\n    {\r\n        public MediaProcessingException(string message) : base(message)\r\n        {\r\n        }\r\n\r\n        protected MediaProcessingException(SerializationInfo info, StreamingContext context) : base(info, context)\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/ModelBindingReader.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    public class ModelBindingReader<T> : IReader<T>, DescribesItself where T : class\r\n    {\r\n        public Task<T> Read(string mimeType, IFubuRequestContext context)\r\n        {\r\n            context.Models.Clear(typeof(T));\r\n            return Task.FromResult(context.Models.Get<T>());\r\n        }\r\n\r\n        public IEnumerable<string> Mimetypes\r\n        {\r\n            get\r\n            {\r\n                yield return MimeType.HttpFormMimetype;\r\n                yield return MimeType.MultipartMimetype;\r\n            }\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Read {0} by model binding against the request data\".ToFormat(typeof (T).Name);\r\n            description.ShortDescription = \"Read {0} by model binding against the request data\".ToFormat(typeof(T).Name);\r\n        }\r\n\r\n        public Type ModelType => typeof (T);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/NoMatchingWriter.cs",
    "content": "using FubuCore.Descriptions;\r\nusing FubuCore.Logging;\r\nusing FubuMVC.Core.Http;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    public class NoMatchingWriter : LogRecord, DescribesItself\r\n    {\r\n        private readonly CurrentMimeType _mimeType;\r\n\r\n        public NoMatchingWriter(CurrentMimeType mimeType)\r\n        {\r\n            _mimeType = mimeType;\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"No writers matched the runtime conditions and accept-type: \" + _mimeType.AcceptTypes;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/NoWritersMatch.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Logging;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    public class NoWritersMatch : LogRecord, DescribesItself\r\n    {\r\n        public static NoWritersMatch For<T>(string acceptType, IEnumerable<IMediaWriter<T>> candidates)\r\n        {\r\n            var match = new NoWritersMatch{\r\n                WriterList = candidates.Select(writer =>\r\n                {\r\n                    return Description.For(writer).Title;\r\n                }).Join(\", \")\r\n            };\r\n\r\n            match.MimeType = acceptType;\r\n\r\n            return match;\r\n        }\r\n\r\n        public string MimeType { get; set; }\r\n        public string WriterList { get; set; }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Conditions were not met for any available writers for mimetype \" + MimeType;\r\n            description.ShortDescription = \"Candidate writers:  \" + WriterList;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/OutputBehavior.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Headers;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    // This is mostly tested through integration tests\r\n    public class OutputBehavior<T> : IActionBehavior where T : class\r\n    {\r\n        private readonly IFubuRequestContext _context;\r\n        private readonly IOutputNode _media;\r\n        private readonly IResourceNotFoundHandler _notFoundHandler;\r\n\r\n        public OutputBehavior(IFubuRequestContext context, IOutputNode media, IResourceNotFoundHandler notFoundHandler) \r\n        {\r\n            _context = context;\r\n            _media = media;\r\n            _notFoundHandler = notFoundHandler;\r\n        }\r\n\r\n        public IActionBehavior InsideBehavior { get; set; }\r\n\r\n\r\n\r\n        public async Task Invoke()\r\n        {\r\n            if (InsideBehavior != null)\r\n            {\r\n                await InsideBehavior.Invoke().ConfigureAwait(false);\r\n            }\r\n\r\n            await Write().ConfigureAwait(false);\r\n        }\r\n\r\n        public async Task InvokePartial()\r\n        {\r\n            if (InsideBehavior != null)\r\n            {\r\n                await InsideBehavior.InvokePartial().ConfigureAwait(false);\r\n            }\r\n\r\n            if (shouldWriteInPartial())\r\n            {\r\n                await Write().ConfigureAwait(false);\r\n            }\r\n        }\r\n\r\n        private bool shouldWriteInPartial()\r\n        {\r\n            if (!_context.Models.Has<OutputPartialBehavior>()) return true;\r\n\r\n            return _context.Models.Get<OutputPartialBehavior>() == OutputPartialBehavior.Write;\r\n        }\r\n\r\n        // SAMPLE: output-behavior-mechanics\r\n        public virtual async Task Write()\r\n        {\r\n            // If the resource is NOT found, return \r\n            // invoke the 404 handler\r\n            var resource = _context.Models.Get<T>();\r\n            if (resource == null)\r\n            {\r\n                _context.Writer.WriteResponseCode(HttpStatusCode.NotFound);\r\n                _notFoundHandler.HandleResourceNotFound<T>();\r\n\r\n                return;\r\n            }\r\n\r\n            // Resolve our CurrentMimeType object from the \r\n            // HTTP request that we use to represent\r\n            // the mimetypes of the current request\r\n            var mimeTypes = _context.Models.Get<CurrentMimeType>();\r\n\r\n            await WriteResource(mimeTypes, resource).ConfigureAwait(false);\r\n\r\n            // Write any output headers exposed by the IHaveHeaders\r\n            // interface on the resource type\r\n            WriteHeaders();\r\n        }\r\n\r\n        public Task WriteResource(CurrentMimeType mimeTypes, T resource)\r\n        {\r\n            // Select the appropriate media writer\r\n            // based on the mimetype and other runtime\r\n            // conditions\r\n            var media = _media.ChooseOutput<T>(mimeTypes.AcceptTypes.Raw);\r\n\r\n            if (media == null)\r\n            {\r\n                // If no matching media can be found, write HTTP 406\r\n                _context.Writer.WriteResponseCode(HttpStatusCode.NotAcceptable);\r\n                return _context.Writer.Write(MimeType.Text, \"406:  Not acceptable\");\r\n            }\r\n            else\r\n            {\r\n                _context.Logger.DebugMessage(() => new WriterChoice(media.MimeType, media.Writer));\r\n\r\n                // Write the media based on a matching media type\r\n                return media.Writer.Write(media.MimeType, _context, resource);\r\n            }\r\n        }\r\n\r\n        // ENDSAMPLE\r\n\r\n        public IEnumerable<IMediaWriter<T>> Media => _media.Media<T>();\r\n\r\n        public void WriteHeaders()\r\n        {\r\n            _context.Models.Find<IHaveHeaders>()\r\n                .SelectMany(x => x.Headers)\r\n                .Each(x => x.Write(_context.Writer));\r\n        }\r\n\r\n\r\n\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/OutputNode.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Web.Caching;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Conditionals;\r\nusing FubuMVC.Core.Runtime.Formatters;\r\nusing FubuMVC.Core.View;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    public class OutputChoice<T>\r\n    {\r\n        public IMediaWriter<T> Writer;\r\n        public string MimeType;\r\n    }\r\n\r\n    public class OutputNode : BehaviorNode, IMayHaveResourceType, DescribesItself, IOutputNode\r\n    {\r\n        private readonly Type _resourceType;\r\n        private readonly IList<IMediaWriter> _media = new List<IMediaWriter>();\r\n        private ConnegSettings _settings;\r\n\r\n        private readonly Lazy<IEnumerable<IMediaWriter>> _allMedia; \r\n        private readonly Cache<string, object> _choices = new Cache<string, object>();\r\n\r\n        public OutputNode(Type resourceType)\r\n        {\r\n            if (resourceType == typeof (void))\r\n            {\r\n                throw new ArgumentOutOfRangeException(\"Void is not a valid resource type\");\r\n            }\r\n\r\n            if (resourceType == null)\r\n            {\r\n                throw new ArgumentNullException(\"resourceType\");\r\n            }\r\n\r\n            _resourceType = resourceType;\r\n\r\n            _allMedia = new Lazy<IEnumerable<IMediaWriter>>(() => {\r\n                var settings = _settings ?? new ConnegSettings();\r\n\r\n                settings.ApplyRules(this);\r\n\r\n                return _media;\r\n            });\r\n        }\r\n\r\n        private OutputChoice<T> chooseOutput<T>(string accepts)\r\n        {\r\n            if (!_allMedia.Value.Any()) return null;\r\n\r\n            var mimeTypes = new MimeTypeList(accepts);\r\n\r\n            foreach (var acceptType in mimeTypes)\r\n            {\r\n                var candidate = _allMedia.Value.FirstOrDefault(x => x.Mimetypes.Contains(acceptType));\r\n                if (candidate != null)\r\n                {\r\n                    return new OutputChoice<T>\r\n                    {\r\n                        MimeType = acceptType,\r\n                        Writer = (IMediaWriter<T>) candidate\r\n                    };\r\n                }\r\n            }\r\n\r\n            if (mimeTypes.DefaultIfEmpty(\"*/*\").Contains(\"*/*\"))\r\n            {\r\n                var media = _allMedia.Value.FirstOrDefault();\r\n                return new OutputChoice<T>()\r\n                {\r\n                    MimeType = media.Mimetypes.First(),\r\n                    Writer = (IMediaWriter<T>) media\r\n                };\r\n            }\r\n\r\n            return null;\r\n        } \r\n\r\n        public OutputChoice<T> ChooseOutput<T>(string accepts)\r\n        {\r\n            _choices.Fill(accepts, chooseOutput<T>);\r\n            return (OutputChoice<T>) _choices[accepts];\r\n        } \r\n\r\n        public void Add(IFormatter formatter)\r\n        {\r\n            var writer = typeof (FormatterWriter<>).CloseAndBuildAs<object>(formatter, _resourceType).As<IMediaWriter>();\r\n            addWriter(writer);\r\n        }\r\n\r\n        private void addWriter(IMediaWriter writer)\r\n        {\r\n            _media.Add(writer);\r\n        }\r\n\r\n        public void Add(Type mediaWriterType)\r\n        {\r\n            if (!mediaWriterType.IsOpenGeneric() || !mediaWriterType.Closes(typeof (IMediaWriter<>)) || !mediaWriterType.IsConcreteWithDefaultCtor())\r\n            {\r\n                throw new ArgumentOutOfRangeException(\"mediaWriterType\", \"mediaWriterType must implement IMediaWriter<T> and have a default constructor\");\r\n            }\r\n\r\n            var writerType = mediaWriterType.MakeGenericType(_resourceType);\r\n            \r\n\r\n            var writer = Activator.CreateInstance(writerType).As<IMediaWriter>();\r\n            \r\n            addWriter(writer);\r\n        }\r\n\r\n        public void Add(IMediaWriter writer)\r\n        {\r\n            var writerType = typeof(IMediaWriter<>).MakeGenericType(_resourceType);\r\n            if (!writerType.IsInstanceOfType(writer))\r\n            {\r\n                throw new ArgumentOutOfRangeException(\"writer\", \"writer must implement \" + writerType.GetFullName());\r\n            }\r\n\r\n            addWriter(writer);\r\n        }\r\n\r\n\r\n\r\n        public IEnumerable<IMediaWriter> Media()\r\n        {\r\n            return _allMedia.Value;\r\n        }\r\n\r\n        public IEnumerable<IMediaWriter> Explicits\r\n        {\r\n            get\r\n            {\r\n                return _media;\r\n            }\r\n        } \r\n\r\n        public IEnumerable<IMediaWriter<T>> Media<T>()\r\n        {\r\n            return Media().OfType<IMediaWriter<T>>();\r\n        }\r\n\r\n        public override BehaviorCategory Category\r\n        {\r\n            get { return BehaviorCategory.Output; }\r\n        }\r\n\r\n        public bool HasView()\r\n        {\r\n            return _media.Any(x => x.Mimetypes.Contains(MimeType.Html.Value));\r\n        }\r\n\r\n        public IViewToken DefaultView()\r\n        {\r\n            return\r\n                _media\r\n                    .OfType<IViewWriter>()\r\n                    .Select(x => x.View)\r\n                    .FirstOrDefault();\r\n        }\r\n\r\n        public Type ResourceType\r\n        {\r\n            get { return _resourceType; }\r\n        }\r\n\r\n        public override string Description\r\n        {\r\n            get { return ToString(); }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Use this if you want to override the handling for \r\n        /// the resource not being found on a chain by chain\r\n        /// basis\r\n        /// </summary>\r\n        public Instance ResourceNotFound { get; set; }\r\n\r\n        /// <summary>\r\n        /// Use the specified type T as the resource not found handler strategy\r\n        /// for only this chain\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        public void UseForResourceNotFound<T>() where T : IResourceNotFoundHandler\r\n        {\r\n            ResourceNotFound = new SmartInstance<T>();\r\n        }\r\n\r\n        #region DescribesItself Members\r\n\r\n        void DescribesItself.Describe(Description description)\r\n        {\r\n            description.Title = \"Conneg Output\";\r\n            description.ShortDescription = \"Render the output for resource \" + ResourceType.Name;\r\n\r\n            description.AddList(\"Media\", _media);\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region IMayHaveResourceType Members\r\n\r\n        Type IMayHaveResourceType.ResourceType()\r\n        {\r\n            return ResourceType;\r\n        }\r\n\r\n        #endregion\r\n\r\n\r\n        protected override IConfiguredInstance buildInstance()\r\n        {\r\n            var instance = new ConfiguredInstance(typeof (OutputBehavior<>), _resourceType);\r\n            instance.Dependencies.Add(typeof(IOutputNode), this);\r\n\r\n            if (ResourceNotFound != null)\r\n            {\r\n                instance.Dependencies.Add(typeof(IResourceNotFoundHandler), ResourceNotFound);\r\n            }\r\n\r\n            return instance;\r\n        }\r\n\r\n\r\n        public void ClearAll()\r\n        {\r\n            _media.Clear();\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return _media.Select(x => x.ToString()).Join(\", \");\r\n        }\r\n\r\n        public IEnumerable<string> MimeTypes()\r\n        {\r\n            return _allMedia.Value.SelectMany(x => x.Mimetypes).Distinct();\r\n        }\r\n\r\n        public bool Writes(MimeType mimeType)\r\n        {\r\n            return MimeTypes().Contains(mimeType.ToString());\r\n        }\r\n\r\n        public bool Writes(string mimeType)\r\n        {\r\n            return MimeTypes().Contains(mimeType);\r\n        }\r\n\r\n        public void UseSettings(ConnegSettings settings)\r\n        {\r\n            _settings = settings;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/OutputNodeExtensions.cs",
    "content": "﻿using System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.View;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    public static class OutputNodeExtensions\r\n    {\r\n        public static bool Writes(this IMediaWriter media, MimeType mimeType)\r\n        {\r\n            return media.Mimetypes.Contains(mimeType.Value);\r\n        }\r\n\r\n        public static void AddView(this IOutputNode node, IViewToken token)\r\n        {\r\n            var writer = typeof (ViewWriter<>).CloseAndBuildAs<IMediaWriter>(token, node.ResourceType);\r\n\r\n            node.Add(writer);\r\n        }\r\n\r\n        public static IViewToken ViewFor(this IOutputNode node)\r\n        {\r\n            var media = node.Media().OfType<IViewWriter>().FirstOrDefault();\r\n            return media == null ? null : media.View;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/OutputPartialBehavior.cs",
    "content": "namespace FubuMVC.Core.Resources.Conneg\n{\n    public class OutputPartialBehavior\n    {\n        public static readonly OutputPartialBehavior Write = new OutputPartialBehavior();\n        public static readonly OutputPartialBehavior None = new OutputPartialBehavior();\n\n        private OutputPartialBehavior() { }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/ReaderChoice.cs",
    "content": "using FubuCore;\nusing FubuCore.Descriptions;\nusing FubuCore.Logging;\n\nnamespace FubuMVC.Core.Resources.Conneg\n{\n    public class ReaderChoice : LogRecord, DescribesItself\n    {\n        private readonly string _mimeType;\n        private readonly Description _reader;\n\n        public ReaderChoice(string mimeType, object reader)\n        {\n            _mimeType = mimeType;\n            if (reader != null) _reader = Description.For(reader);\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = _reader == null\n                ? \"Unable to select a reader for content-type '{0}'\".ToFormat(_mimeType)\n                : \"Selected reader '{0}' for content-type '{1}'\".ToFormat(_reader.Title, _mimeType);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/StringOutput.cs",
    "content": "using FubuCore.Descriptions;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Resources.Conneg\n{\n    public class StringOutput : ConnegRule, DescribesItself\n    {\n        protected override DoNext applyOutputs(IOutputNode node, BehaviorChain chain, ConnegSettings settings)\n        {\n            if (chain.ResourceType() == typeof (string))\n            {\n                node.Add(new StringWriter());\n\n                return DoNext.Stop;\n            }\n\n            return base.applyOutputs(node, chain, settings);\n        }\n\n        public void Describe(Description description)\n        {\n            description.ShortDescription = \"If an action returns a .Net string, the chain will only render text/plain\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/StringWriter.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    public class StringWriter : IMediaWriter<string>\r\n    {\r\n        public Task Write(string mimeType, IFubuRequestContext context, string resource)\r\n        {\r\n            return context.Writer.Write(mimeType, resource);\r\n        }\r\n\r\n        public IEnumerable<string> Mimetypes\r\n        {\r\n            get\r\n            {\r\n                yield return MimeType.Text.Value;\r\n                yield return MimeType.Html.Value;\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/ViewAttachment.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Resources.Conneg\n{\n    public class ViewAttachment : ConnegRule\n    {\n        protected override DoNext applyOutputs(IOutputNode node, BehaviorChain chain, ConnegSettings settings)\n        {\n            var candidates = settings.Views.Where(x => x.ViewModel == node.ResourceType).ToArray();\n            if (candidates.Count() == 1)\n            {\n                if (!node.HasView())\n                {\n                    node.AddView(candidates.Single());\n                }\n            }\n\n            return DoNext.Continue;\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Conneg/WriterChoice.cs",
    "content": "using FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Logging;\r\n\r\nnamespace FubuMVC.Core.Resources.Conneg\r\n{\r\n    public class WriterChoice : LogRecord, DescribesItself\r\n    {\r\n        private readonly string _mimeType;\r\n        private readonly Description _writer;\r\n\r\n        public WriterChoice(string mimeType, object writer)\r\n        {\r\n            _mimeType = mimeType;\r\n            _writer = Description.For(writer);\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Selected writer '{0}'\".ToFormat(_writer.Title);\r\n\r\n            if (_writer.HasExplicitShortDescription())\r\n            {\r\n                description.Properties[\"Writer\"] = _writer.ShortDescription;\r\n            }\r\n            \r\n            description.Properties[\"Mimetype\"] = _mimeType;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Hypermedia/ILinkCreator.cs",
    "content": "using FubuMVC.Core.Urls;\r\n\r\nnamespace FubuMVC.Core.Resources.Hypermedia\r\n{\r\n    public interface ILinkCreator\r\n    {\r\n        Link CreateLink(IUrlRegistry urls);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Hypermedia/ILinkModifier.cs",
    "content": "namespace FubuMVC.Core.Resources.Hypermedia\r\n{\r\n    public interface ILinkModifier\r\n    {\r\n        void Modify(Link link);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Hypermedia/ILinkSource.cs",
    "content": "using System.Collections.Generic;\r\nusing FubuMVC.Core.Projections;\r\nusing FubuMVC.Core.Urls;\r\n\r\nnamespace FubuMVC.Core.Resources.Hypermedia\r\n{\r\n    public interface ILinkSource<T>\r\n    {\r\n        IEnumerable<Link> LinksFor(IValues<T> target, IUrlRegistry urls);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Hypermedia/Link.cs",
    "content": "namespace FubuMVC.Core.Resources.Hypermedia\r\n{\r\n    public class Link\r\n    {\r\n        public Link(string url)\r\n        {\r\n            Url = url;\r\n        }\r\n\r\n        public string Url { get; private set; }\r\n        public string Rel { get; set; }\r\n        public string Title { get; set; }\r\n\r\n        public string ContentType { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Hypermedia/LinkExpression.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing FubuMVC.Core.Urls;\r\n\r\nnamespace FubuMVC.Core.Resources.Hypermedia\r\n{\r\n    public class LinkExpression : ILinkModifier, ILinkCreator\r\n    {\r\n        private readonly IList<Action<Link>> _modifications = new List<Action<Link>>();\r\n        private readonly Func<IUrlRegistry, string> _source;\r\n\r\n        public LinkExpression()\r\n        {\r\n        }\r\n\r\n        public LinkExpression(Func<IUrlRegistry, string> source)\r\n        {\r\n            _source = source;\r\n        }\r\n\r\n        private Action<Link> modify\r\n        {\r\n            set { _modifications.Add(value); }\r\n        }\r\n\r\n        public Link CreateLink(IUrlRegistry urls)\r\n        {\r\n            var url = _source(urls);\r\n            var link = new Link(url);\r\n            _modifications.Each(x => x(link));\r\n\r\n            return link;\r\n        }\r\n\r\n        void ILinkModifier.Modify(Link link)\r\n        {\r\n            _modifications.Each(x => x(link));\r\n        }\r\n\r\n\r\n        public LinkExpression Rel(string rel)\r\n        {\r\n            modify = link => link.Rel = rel;\r\n            return this;\r\n        }\r\n\r\n        public LinkExpression Title(object title)\r\n        {\r\n            modify = link => link.Title = title.ToString();\r\n            return this;\r\n        }\r\n\r\n        public LinkExpression ContentType(string mimeType)\r\n        {\r\n            modify = link => link.ContentType = mimeType;\r\n            return this;\r\n        }\r\n\r\n        // TODO -- use the forthcoming FubuCore extension method\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Hypermedia/LinkSource.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection.Emit;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Projections;\r\nusing FubuMVC.Core.Urls;\r\n\r\nnamespace FubuMVC.Core.Resources.Hypermedia\r\n{\r\n    public class LinkSource<T> : ILinkSource<T>\r\n    {\r\n        private readonly LinkExpression _linkExpression = new LinkExpression();\r\n        private readonly Func<IValues<T>, IUrlRegistry, string> _urlSource;\r\n        private Func<IValues<T>, bool> _filter = t => true;\r\n\r\n        public LinkSource(Func<IValues<T>, IUrlRegistry, string> urlSource)\r\n        {\r\n            _urlSource = urlSource;\r\n        }\r\n\r\n        IEnumerable<Link> ILinkSource<T>.LinksFor(IValues<T> target, IUrlRegistry urls)\r\n        {\r\n            if (!_filter(target))\r\n            {\r\n                yield break;\r\n            }\r\n\r\n            var url = _urlSource(target, urls);\r\n            var link = new Link(url);\r\n            _linkExpression.As<ILinkModifier>().Modify(link);\r\n\r\n            yield return link;\r\n        }\r\n\r\n\r\n        public LinkSource<T> Rel(string rel)\r\n        {\r\n            _linkExpression.Rel(rel);\r\n            return this;\r\n        }\r\n\r\n        public LinkSource<T> Title(object title)\r\n        {\r\n            _linkExpression.Title(title);\r\n            return this;\r\n        }\r\n\r\n        public LinkSource<T> If(Func<IValues<T>, bool> filter)\r\n        {\r\n            _filter = filter;\r\n            return this;\r\n        }\r\n\r\n        public LinkSource<T> IfSubjectMatches(Func<T, bool> filter)\r\n        {\r\n            return If(t => filter(t.Subject));\r\n        }\r\n\r\n        public LinkSource<T> IfEquals(Expression<Func<T, object>> property, object value)\r\n        {\r\n            var accessor = property.ToAccessor();\r\n\r\n            return If(t =>\r\n            {\r\n                var subjectValue = t.ValueFor(accessor);\r\n                return value.Equals(subjectValue);\r\n            });\r\n        }\r\n\r\n        public LinkSource<T> IfNotEquals(Expression<Func<T, object>> property, object value)\r\n        {\r\n            var accessor = property.ToAccessor();\r\n\r\n            return If(t =>\r\n            {\r\n                var subjectValue = t.ValueFor(accessor);\r\n                return !value.Equals(subjectValue);\r\n            });\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/Hypermedia/LinksSource.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Projections;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing FubuMVC.Core.Urls;\r\n\r\nnamespace FubuMVC.Core.Resources.Hypermedia\r\n{\r\n    public class LinksSource<T> : ILinkSource<T>\r\n    {\r\n        private readonly IList<ILinkSource<T>> _sources = new List<ILinkSource<T>>();\r\n\r\n        IEnumerable<Link> ILinkSource<T>.LinksFor(IValues<T> target, IUrlRegistry urls)\r\n        {\r\n            return _sources.SelectMany(x => x.LinksFor(target, urls));\r\n        }\r\n\r\n        public LinkSource<T> ToSubject()\r\n        {\r\n            return To(v => v);\r\n        }\r\n\r\n        public LinkSource<T> ToSubject(Expression<Func<T, object>> identifierProperty)\r\n        {\r\n            var accessor = identifierProperty.ToAccessor();\r\n\r\n            return To((values, urls) =>\r\n            {\r\n                var parameters = new RouteParameters<T>();\r\n                parameters[accessor.Name] = values.ValueFor(accessor).ToString();\r\n\r\n                return urls.UrlFor(typeof (T), parameters);\r\n            });\r\n        }\r\n\r\n        /// <summary>\r\n        /// Uses a RouteParameter<TInputType> object with the same named properties\r\n        /// as the T type to construct a Url.  Very useful when the value stream\r\n        /// you're using doesn't have the actual target type (i.e. NH projections)\r\n        /// </summary>\r\n        /// <typeparam name=\"TInputType\"></typeparam>\r\n        /// <param name=\"properties\"></param>\r\n        /// <returns></returns>\r\n        public LinkSource<T> ToInput<TInputType>(params Expression<Func<T, object>>[] properties)\r\n        {\r\n            var accessors = properties.Select(x => x.ToAccessor());\r\n\r\n            return To((values, urls) =>\r\n            {\r\n                var parameters = new RouteParameters<TInputType>();\r\n                accessors.Each(a =>\r\n                {\r\n                    parameters[a.Name] = values.ValueFor(a).ToString();\r\n                });\r\n\r\n                return urls.UrlFor(parameters);\r\n            });\r\n        }\r\n\r\n        public LinkSource<T> To(Func<T, object> subject)\r\n        {\r\n            return To((values, urls) =>\r\n            {\r\n                var urlSubject = subject(values.Subject);\r\n                return urls.UrlFor(urlSubject);\r\n            });\r\n        }\r\n\r\n        public LinkSource<T> To(Func<IValues<T>, IUrlRegistry, string> urlSource)\r\n        {\r\n            var source = new LinkSource<T>(urlSource);\r\n            _sources.Add(source);\r\n\r\n            return source;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/PathBased/ResourcePath.cs",
    "content": "using System;\r\nusing System.Web.Routing;\r\nusing FubuMVC.Core.Registration.Routes;\r\n\r\nnamespace FubuMVC.Core.Resources.PathBased\r\n{\r\n    public class ResourcePath : IMakeMyOwnUrl, IRankMeLast\r\n    {\r\n        public static readonly string UrlSuffix =\r\n            \"{Part0}/{Part1}/{Part2}/{Part3}/{Part4}/{Part5}/{Part6}/{Part7}/{Part8}/{Part9}\";\r\n\r\n        private readonly string _path;\r\n\r\n        public ResourcePath(string path)\r\n        {\r\n            _path = path;\r\n        }\r\n\r\n        public string Path\r\n        {\r\n            get { return _path; }\r\n        }\r\n\r\n        public virtual string ToUrlPart(string basePattern)\r\n        {\r\n            var baseUrl = basePattern.Contains(UrlSuffix) ? basePattern.Replace(UrlSuffix, \"\") : basePattern;\r\n            return (baseUrl.TrimEnd('/') + \"/\" + _path.TrimStart('/')).Trim('/');\r\n        }\r\n\r\n        public static void AddResourcePathInputs(IRouteDefinition route)\r\n        {\r\n            route.Append(UrlSuffix);\r\n\r\n\r\n            route.RegisterRouteCustomization(r =>\r\n            {\r\n                if (r.Defaults == null)\r\n                {\r\n                    r.Defaults = new RouteValueDictionary();\r\n                }\r\n\r\n                r.Defaults.Add(\"Part0\", null);\r\n                r.Defaults.Add(\"Part1\", null);\r\n                r.Defaults.Add(\"Part2\", null);\r\n                r.Defaults.Add(\"Part3\", null);\r\n                r.Defaults.Add(\"Part4\", null);\r\n                r.Defaults.Add(\"Part5\", null);\r\n                r.Defaults.Add(\"Part6\", null);\r\n                r.Defaults.Add(\"Part7\", null);\r\n                r.Defaults.Add(\"Part8\", null);\r\n                r.Defaults.Add(\"Part9\", null);\r\n            });\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Resources/PathBased/ResourcePathBinder.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing FubuCore;\r\nusing FubuCore.Binding;\r\nusing FubuMVC.Core.Http;\r\n\r\nnamespace FubuMVC.Core.Resources.PathBased\r\n{\r\n    [Description(\"Binds models that inherit from ResourcePath for n-deep paths\")]\r\n    public class ResourcePathBinder : IModelBinder\r\n    {\r\n        public bool Matches(Type type)\r\n        {\r\n            return type.CanBeCastTo<ResourcePath>();\r\n        }\r\n\r\n        public void BindProperties(Type type, object instance, IBindingContext context)\r\n        {\r\n            throw new NotSupportedException();\r\n        }\r\n\r\n        public object Bind(Type type, IBindingContext context)\r\n        {\r\n            var path = FindPath(context.Service<IRequestData>());\r\n            var instance = Activator.CreateInstance(type, path);\r\n\r\n            // Setting additional properties\r\n            // TODO -- have this delegate to a new method on BindingContext instead\r\n            context.BindProperties(instance);    // START HERE AFTER BASEBALL\r\n\r\n            return instance;\r\n        }\r\n\r\n        public static string FindPath(IRequestData dictionary)\r\n        {\r\n            var routeData = dictionary.ValuesFor(RequestDataSource.Route);\r\n            var list = new List<string>();\r\n\r\n            for (var i = 0; i < 10; i++)\r\n            {\r\n                routeData.Value(\"Part\" + i, o =>\r\n                {\r\n                    if (o.RawValue != null) list.Add(o.RawValue.ToString());\r\n                });\r\n            }\r\n\r\n            return list.Join(\"/\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Aggregation/AggregateRequest.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.Runtime.Aggregation\n{\n    public class AggregateRequest\n    {\n        private readonly IList<Func<IAggregatorSource, Task<object>>> _sources = new List<Func<IAggregatorSource, Task<object>>>();\n\n        internal async Task<IEnumerable<object>> Aggregate(IAggregatorSource source)\n        {\n            var answers = new object[_sources.Count];\n\n            for (int i = 0; i < _sources.Count; i++)\n            {\n                answers[i] = await _sources[i](source).ConfigureAwait(false);\n            }\n\n\n            return answers.Where(x => x != null).ToArray();\n        }\n\n        public void Resource<T>()\n        {\n            _sources.Add(x => x.ForResource(typeof(T)));\n        }\n\n        public void Input<T>()\n        {\n            _sources.Add(x => x.ForInputType(typeof(T)));\n        }\n\n        public void Query<T>(T input)\n        {\n            _sources.Add(x => x.ForQuery(input));\n        }\n\n        public void Action<T>(Expression<Func<T, object>> expression)\n        {\n            _sources.Add(x => x.ForAction(expression));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Aggregation/AggregatedQuery.cs",
    "content": "using System.Collections.Generic;\n\nnamespace FubuMVC.Core.Runtime.Aggregation\n{\n    public class AggregatedQuery\n    {\n        private readonly List<ClientQuery> _queries = new List<ClientQuery>();\n\n        public ClientQuery[] queries\n        {\n            get { return _queries.ToArray(); }\n            set\n            {\n                _queries.Clear();\n                if (value != null) _queries.AddRange(value);\n            }\n        }\n\n        public void AddQuery<T>(T input)\n        {\n            _queries.Add(new ClientQuery\n            {\n                query = input,\n                type = typeof(T).GetMessageName()\n            });\n        }\n\n        public void Resource<T>()\n        {\n            _queries.Add(new ClientQuery{type = typeof(T).GetMessageName()});\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Aggregation/AggregationResponse.cs",
    "content": "namespace FubuMVC.Core.Runtime.Aggregation\n{\n    public class AggregationResponse\n    {\n        public ClientResponse[] responses { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Aggregation/Aggregator.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing System.Threading.Tasks;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Registration.Querying;\r\n\r\nnamespace FubuMVC.Core.Runtime.Aggregation\r\n{\r\n    public class Aggregator : IAggregatorSource, IAggregator\r\n    {\r\n        private readonly IPartialInvoker _invoker;\r\n        private readonly IChainResolver _resolver;\r\n        private readonly IClientMessageCache _messageTypes;\r\n\r\n        public Aggregator(IPartialInvoker invoker, IChainResolver resolver, IClientMessageCache messageTypes)\r\n        {\r\n            _invoker = invoker;\r\n            _resolver = resolver;\r\n            _messageTypes = messageTypes;\r\n        }\r\n\r\n        public async Task<AggregationResponse> QueryAggregate(AggregatedQuery request)\r\n        {\r\n            var responses = new ClientResponse[request.queries.Length];\r\n            for (int i = 0; i < request.queries.Length; i++)\r\n            {\r\n                responses[i] = await ExecuteQuery(request.queries[i]).ConfigureAwait(false);\r\n            }\r\n\r\n            return new AggregationResponse\r\n            {\r\n                responses = responses\r\n            };\r\n        }\r\n\r\n        public async Task<ClientResponse> ExecuteQuery(ClientQuery query)\r\n        {\r\n            var chain = _messageTypes.FindChain(query.type);\r\n            var output = await _invoker.InvokeFast(chain, query.query).ConfigureAwait(false);\r\n\r\n            return new ClientResponse\r\n            {\r\n                request = query.type,\r\n                type = chain.ResourceType().GetMessageName(),\r\n                result = output,\r\n                correlationId = query.correlationId\r\n            };\r\n        }\r\n\r\n        public Task<IEnumerable<object>> Fetch(AggregateRequest request)\r\n        {\r\n            return request.Aggregate(this);\r\n        }\r\n\r\n        public Task<IEnumerable<object>> Fetch(Action<AggregateRequest> configure)\r\n        {\r\n            var request = new AggregateRequest();\r\n            configure(request);\r\n\r\n            return Fetch(request);\r\n        }\r\n\r\n        public Task<object> ForInputType(Type inputType)\r\n        {\r\n            var chain = _resolver.FindUniqueByType(inputType);\r\n            return _invoker.InvokeFast(chain, null);\r\n        }\r\n\r\n        public Task<object> ForQuery<T>(T query)\r\n        {\r\n            var chain = _resolver.FindUniqueByType(typeof (T));\r\n            return _invoker.InvokeFast(chain, query);\r\n        }\r\n\r\n        public Task<object> ForResource(Type resourceType)\r\n        {\r\n            var chain =\r\n                _resolver.Find(new ChainSearch {Type = resourceType, TypeMode = TypeSearchMode.ResourceModelOnly});\r\n\r\n            return _invoker.InvokeFast(chain, null);\r\n        }\r\n\r\n        public Task<object> ForAction<T>(Expression<Func<T, object>> expression)\r\n        {\r\n            var chain = _resolver.Find(typeof (T), ReflectionHelper.GetMethod(expression));\r\n            return _invoker.InvokeFast(chain, null);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Aggregation/ClientMessageCache.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Runtime.Aggregation\n{\n    public class ClientMessageCache : IClientMessageCache\n    {\n        private readonly Cache<string, BehaviorChain> _chains = new Cache<string, BehaviorChain>();\n\n        public ClientMessageCache(BehaviorGraph graph)\n        {\n            graph.Chains.Where(x => BehaviorChainExtensions.IsAggregatedChain(x)).Each(x =>\n            {\n                if (x.InputType().IsClientMessage())\n                {\n                    _chains[x.InputType().GetMessageName()] = x;\n                }\n                else\n                {\n                    _chains[x.ResourceType().GetMessageName()] = x;\n                }\n            });\n        }\n\n        public BehaviorChain FindChain(string messageName)\n        {\n            if (!_chains.Has(messageName))\n            {\n                throw new ArgumentOutOfRangeException(\"No client message with name '{0}' exists in the system\".ToFormat(messageName));\n            }\n\n            return _chains[messageName];\n        }\n\n        public IEnumerable<ClientMessagePath> AllClientMessages()\n        {\n            var list = new List<ClientMessagePath>();\n            _chains.Each((name, chain) =>\n            {\n                list.Add(new ClientMessagePath\n                {\n                    Message = name,\n                    InputType = chain.InputType(),\n                    ResourceType = chain.ResourceType(),\n                    Chain = chain\n                });\n            });\n\n            return list;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Aggregation/ClientMessagePath.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Runtime.Aggregation\n{\n    public class ClientMessagePath\n    {\n        public string Message { get; set; }\n        public Type InputType { get; set; }\n        public Type ResourceType { get; set; }\n        public BehaviorChain Chain { get; set; }\n\n        protected bool Equals(ClientMessagePath other)\n        {\n            return string.Equals(Message, other.Message) && Equals(InputType, other.InputType) && Equals(ResourceType, other.ResourceType);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((ClientMessagePath) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                var hashCode = (Message != null ? Message.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (InputType != null ? InputType.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (ResourceType != null ? ResourceType.GetHashCode() : 0);\n                return hashCode;\n            }\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Message: {0}, InputType: {1}, ResourceType: {2}\", Message, InputType, ResourceType);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Aggregation/ClientQuery.cs",
    "content": "﻿namespace FubuMVC.Core.Runtime.Aggregation\n{\n    public class ClientQuery\n    {\n        public string type { get; set; }\n        public object query { get; set; }\n        public string correlationId { get; set; }\n    }\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Aggregation/ClientResponse.cs",
    "content": "namespace FubuMVC.Core.Runtime.Aggregation\n{\n    public class ClientResponse\n    {\n        public string type { get; set; }\n        public string request { get; set; }\n        public object result { get; set; }\n        public string correlationId { get; set; }\n    }\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Aggregation/IAggregator.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.Runtime.Aggregation\n{\n    public interface IAggregator\n    {\n        Task<IEnumerable<object>> Fetch(AggregateRequest request);\n        Task<IEnumerable<object>> Fetch(Action<AggregateRequest> configure);\n        Task<AggregationResponse> QueryAggregate(AggregatedQuery request);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Aggregation/IAggregatorSource.cs",
    "content": "using System;\nusing System.Linq.Expressions;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.Runtime.Aggregation\n{\n    public interface IAggregatorSource\n    {\n        Task<object> ForInputType(Type inputType);\n        Task<object> ForQuery<T>(T query);\n        Task<object> ForResource(Type resourceType);\n        Task<object> ForAction<T>(Expression<Func<T, object>> expression);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Aggregation/IClientMessageCache.cs",
    "content": "using System.Collections.Generic;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Runtime.Aggregation\n{\n    public interface IClientMessageCache\n    {\n        BehaviorChain FindChain(string messageName);\n        IEnumerable<ClientMessagePath> AllClientMessages();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/AjaxAwareJsonSerializer.cs",
    "content": "﻿using System.ComponentModel;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Json;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    [Description(\"Ajax aware Json serialization with the built in JavaScriptSerializer\")]\r\n    public class AjaxAwareJsonSerializer : NewtonsoftJsonFormatter\r\n    {\r\n        public override Task Write<T>(IFubuRequestContext context, T resource, string mimeType)\r\n        {\r\n            var rawJsonOutput = serializeData(context, resource);\r\n            if (context.Request.IsAjaxRequest())\r\n            {\r\n                return context.Writer.Write(MimeType.Json.ToString(), rawJsonOutput);\r\n            }\r\n            else\r\n            {\r\n                // For proper jquery.form plugin support of file uploads\r\n                // See the discussion on the File Uploads sample at http://malsup.com/jquery/form/#code-samples\r\n                var html = \"<html><body><textarea rows=\\\"10\\\" cols=\\\"80\\\">\" + rawJsonOutput +\r\n                           \"</textarea></body></html>\";\r\n                return context.Writer.Write(MimeType.Html.ToString(), html);\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/AspNetPassthroughConverter.cs",
    "content": "using System.ComponentModel;\r\nusing System.Reflection;\r\nusing System.Web;\r\nusing FubuCore.Binding;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    [Title(\"ASP.Net Passthrough\")]\r\n    [Description(\"Simply passes through any ASP.Net objects through without doing any conversion\")]\r\n    public class AspNetPassthroughConverter : IConverterFamily\r\n    {\r\n        public bool Matches(PropertyInfo property)\r\n        {\r\n            return property.PropertyType.IsInNamespace(typeof (HttpPostedFileBase).Namespace);\r\n        }\r\n\r\n        public ValueConverter Build(IValueConverterRegistry registry, PropertyInfo property)\r\n        {\r\n            return typeof (PassthroughConverter<>).CloseAndBuildAs<ValueConverter>(property.PropertyType);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/BehaviorInvoker.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Logging;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Diagnostics.Instrumentation;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public class BehaviorInvoker : IBehaviorInvoker\r\n    {\r\n        private readonly IServiceFactory _factory;\r\n        private readonly BehaviorChain _chain;\r\n\r\n        public BehaviorInvoker(IServiceFactory factory, BehaviorChain chain)\r\n        {\r\n            _factory = factory;\r\n            _chain = chain;\r\n        }\r\n\r\n        public async Task Invoke(TypeArguments arguments, IDictionary<string, object> routeValues)\r\n        {\r\n            var currentChain = new CurrentChain(_chain, routeValues);\r\n            arguments.Set(typeof(ICurrentChain), currentChain);\r\n\r\n            if (arguments.Has(typeof (IChainExecutionLog)))\r\n            {\r\n                arguments.Get<IChainExecutionLog>().RootChain = _chain;\r\n            }\r\n\r\n            if (_chain.Filters.Any(filter => filter.Filter(arguments) == DoNext.Stop))\r\n            {\r\n                return;\r\n            }\r\n\r\n            IActionBehavior behavior = null;\r\n\r\n            if (arguments.Has(typeof (IChainExecutionLog)))\r\n            {\r\n                arguments.Get<IChainExecutionLog>().Trace(\"Building the Behaviors\", () =>\r\n                {\r\n                    behavior = _factory.BuildBehavior(arguments, _chain.UniqueId);\r\n                });\r\n            }\r\n            else\r\n            {\r\n                behavior = _factory.BuildBehavior(arguments, _chain.UniqueId);\r\n            }\r\n\r\n            try\r\n            {\r\n                await behavior.Invoke().ConfigureAwait(false);\r\n            }\r\n            finally\r\n            {\r\n                var disposable = behavior as IDisposable;\r\n                disposable?.Dispose();\r\n            }\r\n        }\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Conditionals/Always.cs",
    "content": "using FubuCore.Descriptions;\r\n\r\nnamespace FubuMVC.Core.Runtime.Conditionals\r\n{\r\n    [Title(\"Always\")]\r\n    public class Always : IConditional\r\n    {\r\n        private Always()\r\n        {\r\n        }\r\n\r\n        public bool ShouldExecute(IFubuRequestContext context)\r\n        {\r\n            return true;\r\n        }\r\n\r\n        public static readonly Always Flyweight = new Always();\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Conditionals/IConditional.cs",
    "content": "namespace FubuMVC.Core.Runtime.Conditionals\r\n{\r\n    public interface IConditional\r\n    {\r\n        bool ShouldExecute(IFubuRequestContext context);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Conditionals/IConditionalService.cs",
    "content": "﻿using System;\r\nusing FubuCore;\r\nusing FubuCore.Util;\r\n\r\nnamespace FubuMVC.Core.Runtime.Conditionals\r\n{\r\n    public interface IConditionalService\r\n    {\r\n        bool IsTrue(Type type);\r\n    }\r\n\r\n    public class ConditionalService : IConditionalService\r\n    {\r\n        private readonly Cache<Type, bool> _conditions;\r\n\r\n        public ConditionalService(IServiceLocator services, IFubuRequestContext context)\r\n        {\r\n            _conditions = new Cache<Type, bool>(type =>\r\n            {\r\n                var condition = services.GetInstance(type).As<IConditional>();\r\n\r\n                return condition.ShouldExecute(context);\r\n            });\r\n        }\r\n\r\n        public bool IsTrue(Type type)\r\n        {\r\n            if (type == typeof(Always))\r\n            {\r\n                return true;\r\n            }\r\n\r\n            if (type == typeof(Never))\r\n            {\r\n                return false;\r\n            }\r\n\r\n            if (!type.CanBeCastTo<IConditional>())\r\n            {\r\n                throw new ArgumentOutOfRangeException(\"Only types that implement IConditional may be used here\");\r\n            }\r\n\r\n            return _conditions[type];\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Conditionals/IsAjaxRequest.cs",
    "content": "using FubuCore.Binding;\r\n\r\nnamespace FubuMVC.Core.Runtime.Conditionals\r\n{\r\n    public class IsAjaxRequest : LambdaConditional<IRequestData>\r\n    {\r\n        public IsAjaxRequest()\r\n            : base(x => x.IsAjaxRequest())\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Conditionals/IsNotAjaxRequest.cs",
    "content": "using FubuCore.Binding;\r\n\r\nnamespace FubuMVC.Core.Runtime.Conditionals\r\n{\r\n    public class IsNotAjaxRequest : LambdaConditional<IRequestData>\r\n    {\r\n        public IsNotAjaxRequest() : base(x => !x.IsAjaxRequest())\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Conditionals/LambdaConditional.cs",
    "content": "using System;\r\n\r\nnamespace FubuMVC.Core.Runtime.Conditionals\r\n{\r\n    public class LambdaConditional : IConditional\r\n    {\r\n        private readonly Func<bool> _condition;\r\n\r\n        public LambdaConditional(Func<bool> condition)\r\n        {\r\n            _condition = condition;\r\n        }\r\n\r\n        public bool ShouldExecute(IFubuRequestContext context)\r\n        {\r\n            return _condition();\r\n        }\r\n    }\r\n\r\n    public class LambdaConditional<T> : IConditional\r\n    {\r\n        private readonly Func<T, bool> _condition;\r\n\r\n        public LambdaConditional(Func<T, bool> condition)\r\n        {\r\n            _condition = condition;\r\n        }\r\n\r\n        public bool ShouldExecute(IFubuRequestContext context)\r\n        {\r\n            return _condition(context.Services.GetInstance<T>());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Conditionals/Never.cs",
    "content": "using FubuCore.Descriptions;\r\n\r\nnamespace FubuMVC.Core.Runtime.Conditionals\r\n{\r\n    [Title(\"Never\")]\r\n    public class Never : IConditional\r\n    {\r\n        public bool ShouldExecute(IFubuRequestContext context)\r\n        {\r\n            return false;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/DiagnosticPartialFactory.cs",
    "content": "using System;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Runtime\n{\n    public class DiagnosticPartialFactory : IPartialFactory\n    {\n        private readonly IChainExecutionLog _log;\n        private readonly PartialFactory _factory;\n\n        public DiagnosticPartialFactory(IChainExecutionLog log, PartialFactory factory)\n        {\n            _log = log;\n            _factory = factory;\n        }\n\n        public IActionBehavior BuildBehavior(BehaviorChain chain)\n        {\n            var behavior = _factory.BuildBehavior(chain);\n            return new PartialLoggingBehavior(_log, chain, behavior);\n        }\n\n        public IActionBehavior BuildPartial(BehaviorChain chain)\n        {\n            var behavior = _factory.BuildPartial(chain);\n            return new PartialLoggingBehavior(_log, chain, behavior);\n        }\n\n        public class PartialLoggingBehavior : WrappingBehavior\n        {\n            private readonly IChainExecutionLog _log;\n            private readonly BehaviorChain _chain;\n\n            public PartialLoggingBehavior(IChainExecutionLog log, BehaviorChain chain, IActionBehavior inner) \n            {\n                _log = log;\n                _chain = chain;\n                Inner = inner;\n            }\n\n            protected override async Task invoke(Func<Task> func)\n            {\n                _log.StartSubject(_chain);\n                try\n                {\n                    await func().ConfigureAwait(false);\n                }\n                finally\n                {\n                    _log.FinishSubject();\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/EndpointService.cs",
    "content": "using System;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.Security.Authorization;\nusing FubuMVC.Core.Urls;\n\nnamespace FubuMVC.Core.Runtime\n{\n    /// <summary>\n    /// Combines the functionality of IUrlRegistry and IAuthorizationPreviewService to both resolve Url's and \n    /// test authorization rules for a behavior chain / endpoint in the system\n    /// </summary>\n    public interface IEndpointService\n    {\n        /// <summary>\n        /// Find an Endpoint for the given input model and category or http method\n        /// </summary>\n        /// <param name=\"model\"></param>\n        /// <param name=\"categoryOrHttpMethod\"></param>\n        /// <returns></returns>\n        Endpoint EndpointFor(object model, string categoryOrHttpMethod = null);\n\n        /// <summary>\n        /// Find an Endpoint for the given handler type, method, and category/http method\n        /// </summary>\n        /// <typeparam name=\"TController\"></typeparam>\n        /// <param name=\"expression\"></param>\n        /// <param name=\"categoryOrHttpMethod\"></param>\n        /// <returns></returns>\n        Endpoint EndpointFor<TController>(Expression<Action<TController>> expression, string categoryOrHttpMethod = null);\n\n        /// <summary>\n        /// Finds the endpoint that would create a new instance of entityType\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <returns></returns>\n        Endpoint EndpointForNew<T>();\n\n        /// <summary>\n        /// Finds the endpoint that would create a new instance of entityType\n        /// </summary>\n        /// <param name=\"entityType\"></param>\n        /// <returns></returns>\n        Endpoint EndpointForNew(Type entityType);\n        bool HasNewEndpoint<T>();\n        bool HasNewEndpoint(Type type);\n\n        /// <summary>\n        /// Find an Endpoint for the given handler type, method, and category or http method\n        /// </summary>\n        /// <param name=\"handlerType\"></param>\n        /// <param name=\"method\"></param>\n        /// <param name=\"categoryOrHttpMethod\"></param>\n        /// <returns></returns>\n        Endpoint EndpointFor(Type handlerType, MethodInfo method, string categoryOrHttpMethod = null);\n    }\n\n    public class Endpoint\n    {\n        public string Url { get; set; }\n        public bool IsAuthorized { get; set; }\n\n        public BehaviorChain Chain { get; set; }\n\n        public bool Equals(Endpoint other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return Equals(other.Url, Url) && other.IsAuthorized.Equals(IsAuthorized);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (Endpoint)) return false;\n            return Equals((Endpoint) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((Url != null ? Url.GetHashCode() : 0)*397) ^ IsAuthorized.GetHashCode();\n            }\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Url: {0}, IsAuthorized: {1}\", Url, IsAuthorized);\n        }\n    }\n\n    public class EndpointService : ChainInterrogator<Endpoint>, IEndpointService\n    {\n        private readonly IChainAuthorizor _authorizor;\n\t    private readonly IChainUrlResolver _urlResolver;\n\n        public EndpointService(IChainAuthorizor authorizor, IChainResolver resolver, IChainUrlResolver urlResolver)\n            : base(resolver)\n        {\n\t        _authorizor = authorizor;\n\t        _urlResolver = urlResolver;\n        }\n\n\t    public Endpoint EndpointFor(object model, string categoryOrHttpMethod = null)\n        {\n            return For(model, categoryOrHttpMethod);\n        }\n\n        public Endpoint EndpointFor<TController>(Expression<Action<TController>> expression,\n                                                 string categoryOrHttpMethod = null)\n        {\n            return EndpointFor(typeof (TController), ReflectionHelper.GetMethod(expression), categoryOrHttpMethod);\n        }\n\n        public Endpoint EndpointForNew<T>()\n        {\n            return EndpointForNew(typeof (T));\n        }\n\n        public Endpoint EndpointForNew(Type entityType)\n        {\n            return forNew(entityType);\n        }\n\n        public bool HasNewEndpoint<T>()\n        {\n            return HasNewEndpoint(typeof (T));\n        }\n\n        public bool HasNewEndpoint(Type type)\n        {\n            return hasNew(type);\n        }\n\n        public Endpoint EndpointFor(Type handlerType, MethodInfo method, string categoryOrHttpMethod = null)\n        {\n            return For(handlerType, method, categoryOrHttpMethod);\n        }\n\n        protected override Endpoint createResult(object model, BehaviorChain chain)\n        {\n\t        var url = _urlResolver.UrlFor(model, chain);\n            return new Endpoint{\n                IsAuthorized = _authorizor.Authorize(chain, model) == AuthorizationRight.Allow,\n                Url = url,\n                Chain = chain\n            };\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/ExceptionHandlingObserver.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace FubuMVC.Core.Runtime\n{\n    public class ExceptionHandlingObserver : IExceptionHandlingObserver\n    {\n        private readonly IList<Exception> _handled = new List<Exception>();\n\n        public void RecordHandled(Exception exception)\n        {\n            _handled.Add(exception);\n        }\n\n        public bool WasObserved(Exception exception)\n        {\n            return _handled.Contains(exception);\n        }\n    }\n\n    public interface IExceptionHandlingObserver\n    {\n        void RecordHandled(Exception exception);\n        bool WasObserved(Exception exception);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Files/ChangeSet.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\n\nnamespace FubuMVC.Core.Runtime.Files\n{\n    public class ChangeSet\n    {\n        public readonly List<IFubuFile> Changed = new List<IFubuFile>();\n        public readonly List<IFubuFile> Added = new List<IFubuFile>();\n        public readonly List<string> Deleted = new List<string>();\n\n        public ChangeSet Adds(params IFubuFile[] files)\n        {\n            Added.AddRange(files);\n            return this;\n        }\n\n        public ChangeSet Changes(params IFubuFile[] files)\n        {\n            Changed.AddRange(files);\n            return this;\n        }\n\n        public ChangeSet Deletes(params IFubuFile[] files)\n        {\n            Deleted.AddRange(files.Select(x => x.RelativePath));\n            return this;\n        }\n\n        public bool HasChanges()\n        {\n            return Changed.Any() || Added.Any() || Deleted.Any();\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"changed: {0}, added: {1}, deleted: {2}\", Changed.Select(x => x.RelativePath).Join(\", \"), Added.Select(x => x.RelativePath).Join(\", \"), Deleted.Join(\", \"));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Files/FileChangeWatcher.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Timers;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Runtime.Files\n{\n    public class FileChangeWatcher : IDisposable\n    {\n        private readonly FileSet _fileSet;\n        private readonly IChangeSetHandler _handler;\n        private readonly Timer _timer;\n        private readonly FubuApplicationFiles _files;\n        private TrackedSet _tracking;\n        private bool _latched;\n\n\n        public FileChangeWatcher(string root, FileSet fileSet, IChangeSetHandler handler)\n        {\n            _files = new FubuApplicationFiles(root);\n            _fileSet = fileSet;\n            _handler = handler;\n            _timer = new Timer\n            {\n                AutoReset = false\n            };\n\n            Root = root;\n\n            _timer.Elapsed += _timer_Elapsed;\n        }\n\n        public string Root { get; private set; }\n\n        public IEnumerable<string> CurrentFiles\n        {\n            get\n            {\n                if (_tracking == null) return Enumerable.Empty<string>();\n\n                return _tracking.Files.Select(x => _files.RootPath.AppendPath(x));\n            }\n        }\n\n        private void _timer_Elapsed(object sender, ElapsedEventArgs e)\n        {\n            if (!_latched)\n            {\n                processChanges();\n            }\n\n            _timer.Start();\n        }\n\n        private void processChanges()\n        {\n            var files = findFiles();\n            var changes = _tracking.DetectChanges(files);\n            if (!changes.HasChanges())\n            {\n                return;\n            }\n\n            if (ChangeBuffer > 0)\n            {\n                var checkpoint = new TrackedSet(files);\n                var count = 0;\n                while (count < 3)\n                {\n                    files = findFiles();\n                    if (checkpoint.DetectChanges(files).HasChanges())\n                    {\n                        checkpoint = new TrackedSet(files);\n                        count++;\n                    }\n                    else\n                    {\n                        break;\n                    }\n                }\n            }\n\n\n            if (!_latched)\n            {\n                try\n                {\n                    _tracking = new TrackedSet(files);\n                    _handler.Handle(changes);\n                }\n                catch (Exception ex)\n                {\n                    Console.WriteLine(ex);\n                }\n            }\n        }\n\n\n        private IFubuFile[] findFiles()\n        {\n            return _files.FindFiles(_fileSet).ToArray();\n        }\n\n\n        /// <summary>\n        /// Time in milliseconds that the polling watcher should wait for additional changes\n        /// </summary>\n        public int ChangeBuffer = 100;\n\n        public double PollingInterval { get; set; }\n\n\n        public bool Enabled { get; private set; }\n\n        public void Latch(Action action)\n        {\n            _latched = true;\n            try\n            {\n                action();\n            }\n            finally\n            {\n                _latched = false;\n            }\n        }\n\n        public void Start()\n        {\n            _tracking = new TrackedSet(findFiles());\n            _timer.Enabled = Enabled = true;\n        }\n\n        public void Stop()\n        {\n            Enabled = false;\n            _timer.Enabled = false;\n        }\n\n        public void Dispose()\n        {\n            _timer.Dispose();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Files/FubuApplicationFiles.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuCore.Util;\r\n\r\nnamespace FubuMVC.Core.Runtime.Files\r\n{\r\n    public class FubuApplicationFiles : IFubuApplicationFiles\r\n    {\r\n        private readonly string _root;\r\n        private readonly Cache<string, IFubuFile> _files;\r\n        private readonly static IFileSystem _fileSystem = new FileSystem();\r\n\r\n        public FubuApplicationFiles(string root)\r\n        {\r\n            _root = root.ToFullPath();\r\n            _files = new Cache<string, IFubuFile>(findFile);\r\n        }\r\n\r\n        /// <summary>\r\n        /// The root physical path of this FubuMVC Application\r\n        /// </summary>\r\n        public string RootPath\r\n        {\r\n            get { return _root; }\r\n        }\r\n\r\n        // I'm okay with this finding nulls\r\n\r\n        public IEnumerable<IFubuFile> FindFiles(FileSet fileSet)\r\n        {\r\n            return _fileSystem.FindFiles(_root, fileSet).Select(file =>\r\n            {\r\n                var fubuFile = new FubuFile(file)\r\n                {\r\n                    RelativePath = file.PathRelativeTo(_root).Replace(\"\\\\\", \"/\")\r\n                };\r\n\r\n                if (fubuFile.RelativePath.IsEmpty())\r\n                {\r\n                    throw new ArgumentException(\"Not able to determine a relative path for \" + file);\r\n                }\r\n\r\n                return fubuFile;\r\n            });\r\n        }\r\n\r\n\r\n        public IFubuFile Find(string relativeName)\r\n        {\r\n            return _files[relativeName.Replace(\"\\\\\", \"/\")];\r\n        }\r\n\r\n        public void AssertHasFile(string relativeName)\r\n        {\r\n            relativeName = relativeName.Replace(\"\\\\\", \"/\");\r\n            var file = findFile(relativeName);\r\n            if (file == null)\r\n            {\r\n                var files = FindFiles(FileSet.Deep(\"*\")).Select(x => x.Path);\r\n\r\n                var description = \"Could not find \" + relativeName;\r\n                files.Each(x => description += \"\\n\" + x);\r\n\r\n                throw new ApplicationException(description);\r\n            }\r\n        }\r\n\r\n        private IFubuFile findFile(string name)\r\n        {\r\n            if (name.IsEmpty()) return null;\r\n\r\n            var fileSet = new FileSet{\r\n                DeepSearch = true,\r\n                Include = name\r\n            };\r\n\r\n            return FindFiles(fileSet).FirstOrDefault();\r\n        }\r\n\r\n        public static IFubuApplicationFiles ForDefault()\r\n        {\r\n            return new FubuApplicationFiles(FubuRuntime.DefaultApplicationPath());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Files/FubuFile.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Runtime.Files\r\n{\r\n    public class FubuFile : IFubuFile\r\n    {\r\n        private string _relativePath;\r\n\r\n        public FubuFile(string path)\r\n        {\r\n            Path = path;\r\n            if (!System.IO.Path.IsPathRooted(path))\r\n            {\r\n                RelativePath = path;\r\n            }\r\n        }\r\n\r\n        public string Path { get; private set; }\r\n\r\n        public string RelativePath\r\n        {\r\n            get { return _relativePath; }\r\n            set { _relativePath = value.IsEmpty() ? string.Empty : value.Replace('\\\\', '/'); }\r\n        }\r\n\r\n        public string ReadContents()\r\n        {\r\n            return new FileSystem().ReadStringFromFile(Path);\r\n        }\r\n\r\n        public void ReadContents(Action<Stream> action)\r\n        {\r\n            using (var stream = new FileStream(Path, FileMode.Open, FileAccess.Read))\r\n            {\r\n                action(stream);\r\n            }\r\n        }\r\n\r\n        public void ReadLines(Action<string> read)\r\n        {\r\n            new FileSystem().ReadTextFile(Path, read);\r\n        }\r\n\r\n        public long Length()\r\n        {\r\n            return new FileInfo(Path).Length;\r\n        }\r\n\r\n        public string Etag()\r\n        {\r\n            var length = Length();\r\n            var lastModified = LastModified();\r\n\r\n            var hash = lastModified.ToFileTimeUtc() ^ length;\r\n\r\n            return Convert.ToString(hash, 16);\r\n        }\r\n\r\n        public DateTime LastModified()\r\n        {\r\n            var last = new FileInfo(Path).LastWriteTimeUtc;\r\n            return new DateTime(last.Year, last.Month, last.Day, last.Hour, last.Minute, last.Second, last.Kind);\r\n        }\r\n\r\n        protected bool Equals(FubuFile other)\r\n        {\r\n            return string.Equals(RelativePath, other.RelativePath);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != this.GetType()) return false;\r\n            return Equals((FubuFile) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return (RelativePath != null ? RelativePath.GetHashCode() : 0);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"RelativePath: {0}\", RelativePath);\r\n        }\r\n\r\n        public static IFubuFile Load(string relativePath)\r\n        {\r\n            return new FubuApplicationFiles(FubuRuntime.DefaultApplicationPath()).Find(relativePath);\r\n        }\r\n    }\r\n\r\n    public static class FubuFileExtensions\r\n    {\r\n        public static DateTime ExactLastWriteTime(this IFubuFile file)\r\n        {\r\n            return new FileInfo(file.Path).LastWriteTimeUtc;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Files/IChangeSetHandler.cs",
    "content": "namespace FubuMVC.Core.Runtime.Files\n{\n    public interface IChangeSetHandler\n    {\n        void Handle(ChangeSet changes);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Files/IFubuApplicationFiles.cs",
    "content": "using System.Collections.Generic;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Runtime.Files\r\n{\r\n    /// <summary>\r\n    /// Provides an abstraction to find files across the main application\r\n    /// </summary>\r\n    public interface IFubuApplicationFiles\r\n    {\r\n        /// <summary>\r\n        /// Tells you the directory of the main application\r\n        /// </summary>\r\n        /// <value></value>\r\n        string RootPath { get; }\r\n\r\n        /// <summary>\r\n        /// Find files by FileSet across the application\r\n        /// </summary>\r\n        /// <param name=\"fileSet\"></param>\r\n        /// <returns></returns>\r\n        IEnumerable<IFubuFile> FindFiles(FileSet fileSet);\r\n\r\n        /// <summary>\r\n        /// Finds a file by relative name across the application\r\n        /// </summary>\r\n        /// <param name=\"relativeName\"></param>\r\n        /// <returns></returns>\r\n        IFubuFile Find(string relativeName);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Files/IFubuFile.cs",
    "content": "using System;\r\nusing System.IO;\r\n\r\nnamespace FubuMVC.Core.Runtime.Files\r\n{\r\n    public interface IFubuFile\r\n    {\r\n        string Path { get; }\r\n\r\n        /// <summary>\r\n        /// Path relative to the containing content folder\r\n        /// </summary>\r\n        string RelativePath { get; set; }\r\n\r\n        /// <summary>\r\n        /// Read the contents of this IFubuFile\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        string ReadContents();\r\n\r\n        /// <summary>\r\n        /// Read the contents of this IFubuFile from a stream\r\n        /// </summary>\r\n        /// <param name=\"action\"></param>\r\n        void ReadContents(Action<Stream> action);\r\n\r\n        /// <summary>\r\n        /// Reads the text of this file and calls read on \r\n        /// ever line of the file\r\n        /// </summary>\r\n        /// <param name=\"read\"></param>\r\n        void ReadLines(Action<string> read);\r\n\r\n\r\n        /// <summary>\r\n        /// The size in bytes of this file\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        long Length();\r\n\r\n\r\n        /// <summary>\r\n        /// Quoted ETag string value determined by the last modified time\r\n        /// and length \r\n        /// </summary>\r\n        /// <returns></returns>\r\n        string Etag();\r\n\r\n        /// <summary>\r\n        /// The last modified time of this file\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        DateTime LastModified();\r\n\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Files/TrackedSet.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.Util;\n\nnamespace FubuMVC.Core.Runtime.Files\n{\n    public class TrackedSet\n    {\n        private readonly Cache<string, DateTime> _files = new Cache<string, DateTime>();\n\n        public TrackedSet(IEnumerable<IFubuFile> files)\n        {\n            files.Each(x => _files[x.RelativePath] = x.ExactLastWriteTime());\n        }\n\n        public IEnumerable<string> Files\n        {\n            get { return _files.GetAllKeys(); }\n        }\n\n        public ChangeSet DetectChanges(IEnumerable<IFubuFile> files)\n        {\n            var changeSet = new ChangeSet();\n\n            var dict = files.ToDictionary(x => x.RelativePath);\n            var deleted = _files.GetAllKeys().Where(x => !dict.ContainsKey(x));\n            changeSet.Deleted.AddRange(deleted);\n\n            \n            changeSet.Added.AddRange(files.Where(x => !_files.Has(x.RelativePath)));\n\n\n            var changed = files.Where(x => _files.Has(x.RelativePath) && _files[x.RelativePath] != x.ExactLastWriteTime());\n            changeSet.Changed.AddRange(changed);\n\n            return changeSet;\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Formatters/IFormatter.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Core.Runtime.Formatters\r\n{\r\n    public interface IFormatter\r\n    {\r\n        IEnumerable<string> MatchingMimetypes { get; }\r\n        Task Write<T>(IFubuRequestContext context, T target, string mimeType);\r\n        Task<T> Read<T>(IFubuRequestContext context);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Formatters/XmlFormatter.cs",
    "content": "using System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing System.Xml;\r\nusing System.Xml.Serialization;\r\nusing FubuCore.Descriptions;\r\n\r\nnamespace FubuMVC.Core.Runtime.Formatters\r\n{\r\n    // See the integration tests for conneg\r\n    [Title(\"Xml Serialization\")]\r\n    [Description(\"Wrapper around the built in XmlSerializer\")]\r\n    public class XmlFormatter : IFormatter\r\n    {\r\n        public Task Write<T>(IFubuRequestContext context, T target, string mimeType)\r\n        {\r\n            var serializer = new XmlSerializer(typeof (T));\r\n            return context.Writer.Write(mimeType, async stream =>\r\n            {\r\n                var stringWriter = new StringWriter();\r\n\r\n                var xmlWriter = new XmlTextWriter(stringWriter)\r\n                {\r\n                    Formatting = Formatting.None,\r\n                };\r\n\r\n\r\n                serializer.Serialize(xmlWriter, target);\r\n\r\n                var writer = new StreamWriter(stream) {AutoFlush = true};\r\n\r\n                await writer.WriteAsync(stringWriter.ToString()).ConfigureAwait(false);\r\n            });\r\n        }\r\n\r\n        public async Task<T> Read<T>(IFubuRequestContext context)\r\n        {\r\n            var serializer = new XmlSerializer(typeof (T));\r\n            var reader = new StreamReader(context.Request.Input, true);\r\n\r\n            var xml = await reader.ReadToEndAsync().ConfigureAwait(false);\r\n\r\n            return (T) serializer.Deserialize(new XmlTextReader(new StringReader(xml)));\r\n        }\r\n\r\n        public IEnumerable<string> MatchingMimetypes\r\n        {\r\n            get\r\n            {\r\n                yield return \"text/xml\";\r\n                yield return \"application/xml\";\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/FubuRequest.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Logging;\r\nusing FubuCore.Util;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public class FubuRequest : IFubuRequest\r\n    {\r\n        private readonly ILogger _logger;\r\n        private readonly Cache<Type, BindResult> _values = new Cache<Type, BindResult>();\r\n\r\n        // SAMPLE: auto-resolving-within-ifuburequest\r\n        public FubuRequest(IRequestData data, IObjectResolver resolver, ILogger logger)\r\n        {\r\n            _logger = logger;\r\n            _values.OnMissing = (type => resolver.BindModel(type, data));\r\n        }\r\n        // ENDSAMPLE\r\n\r\n        public T Get<T>() where T : class\r\n        {\r\n            return _values[typeof (T)].Value as T;\r\n        }\r\n\r\n        public object Get(Type type)\r\n        {\r\n            return _values[type].Value;\r\n        }\r\n\r\n        public virtual void Set<T>(T target) where T : class\r\n        {\r\n            Set(typeof (T), target);\r\n        }\r\n\r\n        public void Set(Type type, object target)\r\n        {\r\n            _logger.DebugMessage(() => new SetValueReport{\r\n                Type = type,\r\n                Value = target\r\n            });\r\n\r\n            if (_values.Has(type) && ReferenceEquals(_values[type].Value, target))\r\n            {\r\n                return;\r\n            }\r\n\r\n            _values[type] = new BindResult{\r\n                Value = target,\r\n                Problems = new List<ConvertProblem>()\r\n            };\r\n        }\r\n\r\n        public IEnumerable<ConvertProblem> ProblemsFor<T>()\r\n        {\r\n            return _values[typeof (T)].Problems;\r\n        }\r\n\r\n        public IEnumerable<T> Find<T>() where T : class\r\n        {\r\n            return _values.GetAll().Select(x => x.Value).OfType<T>();\r\n        }\r\n\r\n        public bool Has<T>()\r\n        {\r\n            return _values.Has(typeof (T));\r\n        }\r\n\r\n        public bool Has(Type type)\r\n        {\r\n            return _values.Has(type);\r\n        }\r\n\r\n        public virtual void SetObject(object input)\r\n        {\r\n            if (input == null) throw new ArgumentNullException();\r\n\r\n            Set(input.GetType(), input);\r\n        }\r\n\r\n        public void Clear(Type getType)\r\n        {\r\n            if (_values.Has(getType))\r\n            {\r\n                _values.Remove(getType);\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/FullChainSwitcher.cs",
    "content": "using System;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public class FullChainSwitcher : IActionBehavior\r\n    {\r\n        private readonly ICurrentChain _chainStack;\r\n        private readonly BehaviorChain _targetChain;\r\n\r\n        public FullChainSwitcher(IActionBehavior inner,\r\n                                 ICurrentChain chainStack,\r\n                                 BehaviorChain targetChain)\r\n        {\r\n            Inner = inner;\r\n            _chainStack = chainStack;\r\n            _targetChain = targetChain;\r\n        }\r\n\r\n        public IActionBehavior Inner { get; private set; }\r\n\r\n        public Task Invoke()\r\n        {\r\n            throw new InvalidOperationException(\"Not valid unless being used with partial invocation.\");\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            _chainStack.Pop();\r\n            _chainStack.Push(_targetChain);\r\n            return Inner.InvokePartial();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Handlers/AsynchronousHttpHandler.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Web.SessionState;\r\nusing FubuCore.Binding;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Runtime.Handlers\r\n{\r\n    public class AsynchronousHttpHandler : SessionlessAsynchronousHttpHandler, IRequiresSessionState\r\n    {\r\n        public AsynchronousHttpHandler(IBehaviorInvoker invoker, TypeArguments arguments, IDictionary<string, object> routeData) : base(invoker, arguments, routeData)\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Handlers/AsynchronousHttpHandlerSource.cs",
    "content": "using System.Web;\r\nusing System.Web.Routing;\r\nusing FubuCore.Binding;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Runtime.Handlers\r\n{\r\n    public class AsynchronousHttpHandlerSource : IHttpHandlerSource\r\n    {\r\n        public IHttpHandler Build(IBehaviorInvoker invoker, TypeArguments arguments, RouteValueDictionary routeValues)\r\n        {\r\n            return new AsynchronousHttpHandler(invoker, arguments, routeValues);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Handlers/FubuRouteHandler.cs",
    "content": "using System.Web;\r\nusing System.Web.Routing;\r\nusing FubuMVC.Core.Http.AspNet;\r\n\r\nnamespace FubuMVC.Core.Runtime.Handlers\r\n{\r\n    public class FubuRouteHandler : IFubuRouteHandler\r\n    {\r\n        private readonly IBehaviorInvoker _invoker;\r\n        private readonly IHttpHandlerSource _handlerSource;\r\n\r\n        public FubuRouteHandler(IBehaviorInvoker invoker, IHttpHandlerSource handlerSource)\r\n        {\r\n            _invoker = invoker;\r\n            _handlerSource = handlerSource;\r\n        }\r\n\r\n        public IHttpHandler GetHttpHandler(RequestContext requestContext)\r\n        {\r\n            var arguments = new AspNetServiceArguments(requestContext);\r\n            return _handlerSource.Build(_invoker, arguments, requestContext.RouteData.Values);\r\n        }\r\n\r\n        public IBehaviorInvoker Invoker\r\n        {\r\n            get { return _invoker; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Handlers/IHttpHandlerSource.cs",
    "content": "using System.Web;\r\nusing System.Web.Routing;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Runtime.Handlers\r\n{\r\n    public interface IHttpHandlerSource\r\n    {\r\n        IHttpHandler Build(IBehaviorInvoker invoker, TypeArguments arguments, RouteValueDictionary routeValues);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Handlers/SessionLessFubuHttpHandler.cs",
    "content": "using System.Collections.Generic;\nusing System.Web;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.Runtime.Handlers\n{\n    public class SessionLessFubuHttpHandler : IHttpHandler\n    {\n        private readonly IBehaviorInvoker _invoker;\n        private readonly TypeArguments _arguments;\n        private readonly IDictionary<string, object> _routeData;\n\n        public SessionLessFubuHttpHandler(IBehaviorInvoker invoker, TypeArguments arguments, IDictionary<string, object> routeData)\n        {\n            _invoker = invoker;\n            _arguments = arguments;\n            _routeData = routeData;\n        }\n\n        public void ProcessRequest(System.Web.HttpContext context)\n        {\n            var requestCompletion = new RequestCompletion();\n            requestCompletion.Start(() => _invoker.Invoke(_arguments, _routeData, requestCompletion));\n        }\n\n        public bool IsReusable => false;\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Handlers/SessionlessAsynchronousHttpHandler.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing System.Web;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Runtime.Handlers\r\n{\r\n    public class SessionlessAsynchronousHttpHandler : IHttpAsyncHandler\r\n    {\r\n        private readonly IBehaviorInvoker _invoker;\r\n        private readonly TypeArguments _arguments;\r\n        private readonly IDictionary<string, object> _routeData;\r\n\r\n        public SessionlessAsynchronousHttpHandler(IBehaviorInvoker invoker, TypeArguments arguments, IDictionary<string, object> routeData)\r\n        {\r\n            _invoker = invoker;\r\n            _arguments = arguments;\r\n            _routeData = routeData;\r\n        }\r\n\r\n        public void ProcessRequest(System.Web.HttpContext context)\r\n        {\r\n            throw new InvalidOperationException(\"Synchronous requests are not supported with this handler\");\r\n        }\r\n\r\n        public bool IsReusable => false;\r\n\r\n        public IAsyncResult BeginProcessRequest(System.Web.HttpContext context, AsyncCallback cb, object extraData)\r\n        {\r\n            return _invoker.Invoke(_arguments, _routeData);\r\n        }\r\n\r\n        public void EndProcessRequest(IAsyncResult result)\r\n        {\r\n            var task = (Task) result;\r\n            task.Wait(); //This won't really block because the request is already complete\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Handlers/SessionlessAsynchronousHttpHandlerSource.cs",
    "content": "using System.Web;\r\nusing System.Web.Routing;\r\nusing FubuCore.Binding;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Runtime.Handlers\r\n{\r\n    public class SessionlessAsynchronousHttpHandlerSource : IHttpHandlerSource\r\n    {\r\n        public IHttpHandler Build(IBehaviorInvoker invoker, TypeArguments arguments, RouteValueDictionary routeValues)\r\n        {\r\n            return new SessionlessAsynchronousHttpHandler(invoker, arguments, routeValues);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Handlers/SessionlessSynchronousHttpHandlerSource.cs",
    "content": "using System.Web;\nusing System.Web.Routing;\nusing FubuCore.Binding;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.Runtime.Handlers\n{\n    public class SessionlessSynchronousHttpHandlerSource : IHttpHandlerSource\n    {\n        public IHttpHandler Build(IBehaviorInvoker invoker, TypeArguments arguments, RouteValueDictionary routeValues)\n        {\n            return new SessionLessFubuHttpHandler(invoker, arguments, routeValues);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Handlers/SynchronousFubuHttpHandler.cs",
    "content": "using System.Collections.Generic;\nusing System.Web.SessionState;\nusing FubuCore.Binding;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.Runtime.Handlers\n{\n    public class SynchronousFubuHttpHandler : SessionLessFubuHttpHandler, IRequiresSessionState\n    {\n        public SynchronousFubuHttpHandler(IBehaviorInvoker invoker, TypeArguments arguments, IDictionary<string, object> routeData) : base(invoker, arguments, routeData)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Handlers/SynchronousHttpHandlerSource.cs",
    "content": "using System.Web;\nusing System.Web.Routing;\nusing FubuCore.Binding;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.Runtime.Handlers\n{\n    public class SynchronousHttpHandlerSource : IHttpHandlerSource\n    {\n        public IHttpHandler Build(IBehaviorInvoker invoker, TypeArguments arguments, RouteValueDictionary routeValues)\n        {\n            return new SynchronousFubuHttpHandler(invoker, arguments, routeValues);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/HeaderValueAttribute.cs",
    "content": "using System.Linq;\r\nusing System.Net;\r\nusing System.Reflection;\r\nusing FubuCore.Binding;\r\nusing FubuMVC.Core.Http;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public class HeaderValueAttribute : BindingAttribute\r\n    {\r\n        private readonly string _headerName;\r\n\r\n        public HeaderValueAttribute(string headerName)\r\n        {\r\n            _headerName = headerName;\r\n        }\r\n\r\n        public HeaderValueAttribute(HttpRequestHeader header)\r\n        {\r\n            _headerName = HttpRequestHeaders.HeaderNameFor(header);\r\n        }\r\n\r\n        public override void Bind(PropertyInfo property, IBindingContext context)\r\n        {\r\n            var value = context.Service<IHttpRequest>().GetHeader(_headerName).FirstOrDefault();\r\n            property.SetValue(context.Object, value, null);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/IApplicationObserver.cs",
    "content": "namespace FubuMVC.Core.Runtime\r\n{\r\n    public interface IApplicationObserver\r\n    {\r\n        // Refresh the browser\r\n        void RefreshContent();\r\n\r\n        // Tear down and reload the entire AppDomain\r\n        void RecycleAppDomain();\r\n\r\n        // Restart the FubuMVC application\r\n        // without restarting the \r\n        // AppDomain\r\n        void RecycleApplication();\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/IBehaviorInvocationFilter.cs",
    "content": "using FubuCore.Binding;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public interface IBehaviorInvocationFilter\r\n    {\r\n        DoNext Filter(TypeArguments arguments);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/IBehaviorInvoker.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public interface IBehaviorInvoker\r\n    {\r\n        Task Invoke(TypeArguments arguments, IDictionary<string, object> routeValues);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/IExceptionHandler.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.Runtime\n{\n    public interface IExceptionHandler\n    {\n        bool ShouldHandle(Exception exception);\n        void Handle(Exception exception);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/IFubuRequest.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing FubuCore.Binding;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    // SAMPLE: ifuburequest\r\n    /// <summary>\r\n    /// Primary model bag scoped per request.  IFubuRequest is the primary way to share state between behaviors\r\n    /// in a running behavior chain\r\n    /// </summary>\r\n    public interface IFubuRequest\r\n    {\r\n        /// <summary>\r\n        /// Find a model of the exact type T.  If there is not already a known instance of T, IFubuRequest will attempt to\r\n        /// use model binding against the current request data to resolve a T\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <returns></returns>\r\n        T Get<T>() where T : class;\r\n\r\n        /// <summary>\r\n        /// Find a model of the exact type.  If there is not already a known instance of T, IFubuRequest will attempt to\r\n        /// use model binding against the current request data to resolve a T\r\n        /// </summary>\r\n        /// <param name=\"type\"></param>\r\n        /// <returns></returns>\r\n    \t    object Get(Type type);\r\n\r\n        /// <summary>\r\n        /// Stores a value of type T in the FubuRequest\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"target\"></param>\r\n        void Set<T>(T target) where T : class;\r\n\r\n        /// <summary>\r\n        /// Stores a value of type T in the FubuRequest\r\n        /// </summary>\r\n        /// <param name=\"type\"></param>\r\n        /// <param name=\"target\"></param>\r\n        void Set(Type type, object target);\r\n        \r\n        /// <summary>\r\n        /// Find any and all binding conversion problems\r\n        /// found while model binding the current\r\n        /// value of the type T\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <returns></returns>\r\n        IEnumerable<ConvertProblem> ProblemsFor<T>();\r\n\r\n        /// <summary>\r\n        /// Attempts to find all the existing objects in this FubuRequest that can be cast to\r\n        /// type T.  Can return an empty enumerable.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <returns></returns>\r\n        IEnumerable<T> Find<T>() where T : class;\r\n\r\n        /// <summary>\r\n        /// Has an object of type T already been resolved?\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <returns></returns>\r\n        bool Has<T>();\r\n\r\n        /// <summary>\r\n        /// Has an object of this type already been resolved?\r\n        /// </summary>\r\n        /// <param name=\"type\"></param>\r\n        /// <returns></returns>\r\n        bool Has(Type type);\r\n\r\n        /// <summary>\r\n        /// Stores the object as object.GetType()\r\n        /// </summary>\r\n        /// <param name=\"input\"></param>\r\n        void SetObject(object input);\r\n\r\n        /// <summary>\r\n        /// Removes any object stored as Type type\r\n        /// </summary>\r\n        /// <param name=\"type\"></param>\r\n        void Clear(Type type);\r\n    }\r\n    // ENDSAMPLE\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/IFubuRequestContext.cs",
    "content": "﻿using FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Http;\n\nnamespace FubuMVC.Core.Runtime\n{\n    public interface IFubuRequestContext\n    {\n        IServiceLocator Services { get; }\n        IHttpRequest Request { get; }\n        IFubuRequest Models { get; }\n        IOutputWriter Writer { get; }\n        ILogger Logger { get; }\n    }\n\n    public static class FubuRequestContextExtensions\n    {\n        public static T Service<T>(this IFubuRequestContext context)\n        {\n            return context.Services.GetInstance<T>();\n        }\n    }\n\n    public class FubuRequestContext : IFubuRequestContext\n    {\n        private readonly IServiceLocator _services;\n        private readonly IHttpRequest _request;\n        private readonly IFubuRequest _models;\n        private readonly IOutputWriter _writer;\n        private readonly ILogger _logger;\n\n        public FubuRequestContext(IServiceLocator services, IHttpRequest request, IFubuRequest models, IOutputWriter writer, ILogger logger)\n        {\n            _services = services;\n            _request = request;\n            _models = models;\n            _writer = writer;\n            _logger = logger;\n        }\n\n        public IServiceLocator Services\n        {\n            get { return _services; }\n        }\n\n        public IHttpRequest Request\n        {\n            get { return _request; }\n        }\n\n        public IFubuRequest Models\n        {\n            get { return _models; }\n        }\n\n        public IOutputWriter Writer\n        {\n            get { return _writer; }\n        }\n\n        public ILogger Logger\n        {\n            get { return _logger; }\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/IFubuRouteHandler.cs",
    "content": "﻿using System.Web.Routing;\n\nnamespace FubuMVC.Core.Runtime\n{\n    public interface IFubuRouteHandler : IRouteHandler\n    {\n        IBehaviorInvoker Invoker { get; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/IOutputState.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    internal interface IOutputState\r\n    {\r\n        Task Write(string contentType, string renderedOutput);\r\n        Task Write(string contentType, Func<Stream, Task> action);\r\n\r\n        void AppendHeader(string header, string value);\r\n\r\n        // TODO -- this should be async someday\r\n        void WriteFile(string contentType, string localFilePath, string displayName);\r\n\r\n        // TODO -- this should be async someday\r\n        void Flush();\r\n\r\n\r\n        Task Write(string renderedOutput);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/IOutputWriter.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Net;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Caching;\r\nusing Cookie = FubuMVC.Core.Http.Cookies.Cookie;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    // SAMPLE: ioutputwriter\r\n    /// <summary>\r\n    /// Primary abstraction to write to the Http response\r\n    /// </summary>\r\n    public interface IOutputWriter\r\n    {\r\n        /// <summary>\r\n        /// Write the contents of a file to the Http response body with the Content-Type header and display name header\r\n        /// </summary>\r\n        /// <param name=\"contentType\"></param>\r\n        /// <param name=\"localFilePath\"></param>\r\n        /// <param name=\"displayName\"></param>\r\n        void WriteFile(string contentType, string localFilePath, string displayName);\r\n\r\n        /// <summary>\r\n        /// Write string content to the response body with the designated contentType mimetype (e.g., \"text/html\")\r\n        /// </summary>\r\n        /// <param name=\"contentType\"></param>\r\n        /// <param name=\"renderedOutput\"></param>\r\n        Task Write(string contentType, string renderedOutput);\r\n\r\n        /// <summary>\r\n        /// Writes string content to the response body\r\n        /// </summary>\r\n        /// <param name=\"renderedOutput\"></param>\r\n        Task Write(string renderedOutput);\r\n\r\n        /// <summary>\r\n        /// Writes a 302 redirect to the url to the request \r\n        /// </summary>\r\n        /// <param name=\"url\"></param>\r\n        void RedirectToUrl(string url);\r\n\r\n        /// <summary>\r\n        /// Appends a Set-Cookie header to the response\r\n        /// </summary>\r\n        /// <param name=\"cookie\"></param>\r\n        void AppendCookie(Cookie cookie);\r\n\r\n        /// <summary>\r\n        /// Appends the named header value to the response\r\n        /// </summary>\r\n        /// <param name=\"key\"></param>\r\n        /// <param name=\"value\"></param>\r\n        void AppendHeader(string key, string value);\r\n\r\n        /// <summary>\r\n        /// Writes to the response body as a stream\r\n        /// </summary>\r\n        /// <param name=\"contentType\"></param>\r\n        /// <param name=\"output\"></param>\r\n        Task Write(string contentType, Func<Stream, Task> output);\r\n\r\n        /// <summary>\r\n        /// Writes a response code back to the response\r\n        /// </summary>\r\n        /// <param name=\"status\"></param>\r\n        /// <param name=\"description\"></param>\r\n        void WriteResponseCode(HttpStatusCode status, string description = null);\r\n\r\n        /// <summary>\r\n        /// Sets the IOutputWriter to \"record\" mode in caching scenarios\r\n        /// </summary>\r\n        /// <param name=\"action\"></param>\r\n        /// <returns></returns>\r\n        Task<IRecordedOutput> Record(Func<Task> inner);\r\n\r\n        /// <summary>\r\n        /// Replays all recorded output\r\n        /// </summary>\r\n        /// <param name=\"output\"></param>\r\n        void Replay(IRecordedOutput output);\r\n\r\n\r\n        /// <summary>\r\n        /// Flushes all output to the Http response\r\n        /// </summary>\r\n        void Flush();\r\n    }\r\n    // ENDSAMPLE\r\n\r\n   \r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/IPartialFactory.cs",
    "content": "using FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public interface IPartialFactory\r\n    {\r\n        IActionBehavior BuildBehavior(BehaviorChain chain);\r\n        IActionBehavior BuildPartial(BehaviorChain chain);\r\n        \r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/IPartialInvoker.cs",
    "content": "﻿using System.Threading.Tasks;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Runtime\n{\n    public interface IPartialInvoker\n    {\n        Task<string> Invoke<T>(string categoryOrHttpMethod = null) where T : class;\n        Task<string> InvokeObject(object model, bool withModelBinding = false, string categoryOrHttpMethod = null);\n\n        Task<string> InvokeAsHtml(object model);\n\n        /// <summary>\n        /// Invokes a partial request with the conneg output disabled for\n        /// the partial request\n        /// </summary>\n        /// <param name=\"chain\"></param>\n        /// <param name=\"input\"></param>\n        Task<object> InvokeFast(BehaviorChain chain, object input = null);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/IServiceFactory.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing FubuMVC.Core.Behaviors;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public interface IServiceFactory : IDisposable\r\n    {\r\n        IActionBehavior BuildBehavior(TypeArguments arguments, Guid behaviorId);\r\n\r\n        T Build<T>(TypeArguments arguments);\r\n\r\n        T Get<T>();\r\n        IEnumerable<T> GetAll<T>();\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/ISessionState.cs",
    "content": "using System.Web;\r\nusing FubuCore.Util;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public interface ISessionState\r\n    {\r\n        T Get<T>() where T : class;\r\n        T Get<T>(string key) where T : class;\r\n\r\n        void Remove<T>();\r\n        void Remove(string key);\r\n\r\n        void Set<T>(T value);\r\n        void Set<T>(string key, T value);\r\n    }\r\n\r\n    public class BasicSessionState : ISessionState\r\n    {\r\n        private readonly Cache<string, object> _objects = new Cache<string, object>(t => null);\r\n\r\n        private string getKey<T>()\r\n        {\r\n            return typeof (T).FullName;\r\n        }\r\n\r\n        public T Get<T>() where T : class\r\n        {\r\n            return Get<T>(getKey<T>());\r\n        }\r\n\r\n        public T Get<T>(string key) where T : class\r\n        {\r\n            return (T)_objects[key];\r\n        }\r\n\r\n        public void Remove<T>()\r\n        {\r\n            Remove(getKey<T>());\r\n        }\r\n\r\n        public void Remove(string key)\r\n        {\r\n            _objects.Remove(key);\r\n        }\r\n\r\n        public void Set<T>(string key, T value)\r\n        {\r\n            _objects[key] = value;\r\n        }\r\n\r\n        public void Set<T>(T value)\r\n        {\r\n            Set(getKey<T>(), value);\r\n        }\r\n    }\r\n\r\n\r\n    public class SimpleSessionState : ISessionState\r\n    {\r\n        private readonly HttpSessionStateBase _session;\r\n\r\n        public SimpleSessionState(HttpContextBase httpContext)\r\n        {\r\n            _session = httpContext.Session;\r\n        }\r\n\r\n        private string getKey<T>()\r\n        {\r\n            return typeof(T).FullName;\r\n        }\r\n\r\n        public T Get<T>() where T : class\r\n        {\r\n            return Get<T>(getKey<T>());\r\n        }\r\n\r\n        public T Get<T>(string key) where T : class\r\n        {\r\n            return _session[key] as T;\r\n        }\r\n\r\n        public void Remove<T>()\r\n        {\r\n            Remove(getKey<T>());\r\n        }\r\n\r\n        public void Remove(string key)\r\n        {\r\n            _session.Remove(key);\r\n        }\r\n\r\n        public void Set<T>(string key, T value)\r\n        {\r\n            _session[key] = value;\r\n        }\r\n\r\n        public void Set<T>(T value)\r\n        {\r\n            Set(getKey<T>(), value);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/IgnoredRoute.cs",
    "content": "using System.Web.Routing;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public class IgnoredRoute : Route\r\n    {\r\n        public IgnoredRoute(string url)\r\n            : base(url, new StopRoutingHandler())\r\n        {\r\n        }\r\n\r\n        public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary routeValues)\r\n        {\r\n            return null;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/InMemoryFubuRequest.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Util;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n\r\n    public class InMemoryFubuRequest : IFubuRequest\r\n    {\r\n        private readonly Cache<Type, object> _cache = new Cache<Type, object>(onMissing => null);\r\n\r\n        public T Get<T>() where T : class\r\n        {\r\n            return _cache[typeof (T)] as T;\r\n        }\r\n\r\n        public object Get(Type type)\r\n        {\r\n            return _cache[type];\r\n        }\r\n\r\n        public void Set<T>(T target) where T : class\r\n        {\r\n            _cache[typeof (T)] = target;\r\n        }\r\n\r\n        public void Set(Type type, object target)\r\n        {\r\n            _cache[type] = target;\r\n        }\r\n\r\n        public IEnumerable<ConvertProblem> ProblemsFor<T>()\r\n        {\r\n            return new ConvertProblem[0];\r\n        }\r\n\r\n        public IEnumerable<T> Find<T>() where T : class\r\n        {\r\n            return _cache.GetAll().OfType<T>();\r\n        }\r\n\r\n        public bool Has<T>()\r\n        {\r\n            return _cache.Has(typeof(T));\r\n        }\r\n\r\n        public bool Has(Type type)\r\n        {\r\n            return _cache.Has(type);\r\n        }\r\n\r\n        public void SetObject(object input)\r\n        {\r\n            if (input == null) throw new ArgumentNullException();\r\n\r\n            _cache[input.GetType()] = input;\r\n        }\r\n\r\n        public void Clear(Type getType)\r\n        {\r\n            if (_cache.Has(getType))\r\n            {\r\n                _cache.Remove(getType);\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/InMemoryOutputWriter.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Net;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing System.Web;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core.Caching;\r\nusing Cookie = FubuMVC.Core.Http.Cookies.Cookie;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public class InMemoryOutputWriter : IOutputWriter\r\n    {\r\n        private readonly StringBuilder _builder = new StringBuilder();\r\n        private readonly StringWriter _writer;\r\n        private readonly MemoryStream _output = new MemoryStream();\r\n        private readonly Cache<string, string> _headers = new Cache<string, string>();\r\n\r\n        public InMemoryOutputWriter()\r\n        {\r\n            _writer = new StringWriter(_builder);\r\n        }\r\n\r\n        public void WriteFile(string contentType, string localFilePath, string displayName)\r\n        {\r\n        }\r\n\r\n        public Task Write(string contentType, string renderedOutput)\r\n        {\r\n            ContentType = contentType;\r\n            _writer.WriteLine(renderedOutput);\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        public Task Write(string renderedOutput)\r\n        {\r\n            _writer.WriteLine(renderedOutput);\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        public string ContentType { get; set; }\r\n\r\n        public Task<IRecordedOutput> Record(Func<Task> inner)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n\r\n        public void Replay(IRecordedOutput output)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void Flush()\r\n        {\r\n        }\r\n\r\n        public void RedirectToUrl(string url)\r\n        {\r\n        }\r\n\r\n        public void AppendCookie(Cookie cookie)\r\n        {\r\n        }\r\n\r\n        public void AppendHeader(string key, string value)\r\n        {\r\n            _headers[key] = value;\r\n        }\r\n\r\n        public Cache<string, string> Headers\r\n        {\r\n            get { return _headers; }\r\n        }\r\n\r\n        public Task Write(string contentType, Func<Stream, Task> output)\r\n        {\r\n            ContentType = contentType;\r\n            return output(_output);\r\n        }\r\n\r\n        public void WriteResponseCode(HttpStatusCode status, string description = null)\r\n        {\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return _builder.ToString();\r\n        }\r\n\r\n        public Stream OutputStream()\r\n        {\r\n            _output.Position = 0;\r\n            return _output;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/LambdaActivator.cs",
    "content": "using System;\nusing FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Core.Runtime\n{\n    public class LambdaActivator : IActivator\n    {\n        private readonly string _description;\n        private readonly Action _action;\n\n        public LambdaActivator(string description, Action action)\n        {\n            _description = description;\n            _action = action;\n        }\n\n        public void Activate(IActivationLog log, IPerfTimer timer)\n        {\n            _action();\n        }\n\n        public override string ToString()\n        {\n            return _description;\n        }\n    }\n\n    public class LambdaActivator<T> : LambdaActivator\n    {\n        public LambdaActivator(T service, string description, Action<T> action) : base(description, () => action(service))\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Logging/FileOutputReport.cs",
    "content": "using System;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Logging;\r\n\r\nnamespace FubuMVC.Core.Runtime.Logging\r\n{\r\n    public class FileOutputReport : LogRecord, IHaveContentType, DescribesItself\r\n    {\r\n        public string ContentType { get; set;}\r\n        public string LocalFilePath;\r\n        public string DisplayName;\r\n\r\n        public bool Equals(FileOutputReport other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other.ContentType, ContentType) && Equals(other.LocalFilePath, LocalFilePath) && Equals(other.DisplayName, DisplayName);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof(FileOutputReport)) return false;\r\n            return Equals((FileOutputReport)obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                int result = (ContentType != null ? ContentType.GetHashCode() : 0);\r\n                result = (result * 397) ^ (LocalFilePath != null ? LocalFilePath.GetHashCode() : 0);\r\n                result = (result * 397) ^ (DisplayName != null ? DisplayName.GetHashCode() : 0);\r\n                return result;\r\n            }\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Wrote file \" + LocalFilePath;\r\n            description.Properties[\"ContentType\"] = ContentType;\r\n            description.Properties[\"LocalFilePath\"] = LocalFilePath;\r\n            description.Properties[\"DisplayName\"] = DisplayName;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"ContentType: {0}, LocalFilePath: {1}, DisplayName: {2}\", ContentType, LocalFilePath, DisplayName);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Logging/FinishedRecordingOutput.cs",
    "content": "using System;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Logging;\r\nusing FubuMVC.Core.Caching;\r\n\r\nnamespace FubuMVC.Core.Runtime.Logging\r\n{\r\n    [Title(\"Finished recording output\")]\r\n    public class FinishedRecordingOutput : LogRecord, DescribesItself\r\n    {\r\n        private readonly RecordedOutput _output;\r\n\r\n        public FinishedRecordingOutput(RecordedOutput output)\r\n        {\r\n            _output = output;\r\n        }\r\n\r\n        public RecordedOutput Output\r\n        {\r\n            get { return _output; }\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.AddList(\"Writes\", _output.Outputs);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Logging/HttpStatusReport.cs",
    "content": "using System;\r\nusing System.Net;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Logging;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Runtime.Logging\r\n{\r\n    public class HttpStatusReport : LogRecord, DescribesItself\r\n    {\r\n        public HttpStatusCode Status { get; set; }\r\n        public string Description { get; set; }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof(HttpStatusReport)) return false;\r\n            return Equals((HttpStatusReport)obj);\r\n        }\r\n\r\n        public bool Equals(HttpStatusReport other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other.Status, Status);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return Status.GetHashCode();\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Wrote Http Status Code as {0} {1}\".ToFormat(Status.As<int>(), Description);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Logging/OutputReport.cs",
    "content": "using System;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Logging;\r\n\r\nnamespace FubuMVC.Core.Runtime.Logging\r\n{\r\n    public class OutputReport : LogRecord, IHaveContentType, DescribesItself\r\n    {\r\n        public string ContentType { get; private set; }\r\n        public string Contents { get; private set; }\r\n\r\n        public OutputReport(string contents)\r\n        {\r\n            Contents = contents;\r\n        }\r\n\r\n        public OutputReport(string contentType, string contents)\r\n        {\r\n            ContentType = contentType;\r\n            Contents = contents;\r\n        }\r\n\r\n        public bool Equals(OutputReport other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other.ContentType, ContentType) && Equals(other.Contents, Contents);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof(OutputReport)) return false;\r\n            return Equals((OutputReport)obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                return ((ContentType != null ? ContentType.GetHashCode() : 0) * 397) ^ (Contents != null ? Contents.GetHashCode() : 0);\r\n            }\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Output as \" + ContentType;\r\n            description.LongDescription = Contents;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"ContentType: {0}, Contents: {1}\", ContentType, Contents);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Logging/RedirectReport.cs",
    "content": "using System;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Logging;\r\n\r\nnamespace FubuMVC.Core.Runtime.Logging\r\n{\r\n    public class RedirectReport : LogRecord, DescribesItself\r\n    {\r\n        public string Url { get; private set; }\r\n\r\n        public RedirectReport(string url)\r\n        {\r\n            Url = url;\r\n        }\r\n\r\n        public bool Equals(RedirectReport other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other.Url, Url);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof(RedirectReport)) return false;\r\n            return Equals((RedirectReport)obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return (Url != null ? Url.GetHashCode() : 0);\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Redirected the browser to \" + Url;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Url: {0}\", Url);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Logging/ReplayRecordedOutput.cs",
    "content": "using System;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Logging;\r\nusing FubuMVC.Core.Caching;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Core.Runtime.Logging\r\n{\r\n    public class ReplayRecordedOutput : LogRecord, IHaveContentType, DescribesItself\r\n    {\r\n        private readonly IRecordedOutput _output;\r\n\r\n        public ReplayRecordedOutput(IRecordedOutput output)\r\n        {\r\n            _output = output;\r\n        }\r\n\r\n        public bool Equals(ReplayRecordedOutput other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other._output, _output);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof (ReplayRecordedOutput)) return false;\r\n            return Equals((ReplayRecordedOutput) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return (_output != null ? _output.GetHashCode() : 0);\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Replaying recorded output\";\r\n            description.AddList(\"Outputs\", _output.Outputs);\r\n        }\r\n\r\n        public string ContentType\r\n        {\r\n            get { return _output.ContentType; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Logging/SetHeaderValue.cs",
    "content": "using System;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Logging;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Runtime.Logging\r\n{\r\n    public class SetHeaderValue : LogRecord, DescribesItself\r\n    {\r\n        public string Key { get; set; }\r\n        public string Value { get; set; }\r\n\r\n        public SetHeaderValue(string key, string value)\r\n        {\r\n            Key = key;\r\n            Value = value;\r\n        }\r\n\r\n        public bool Equals(SetHeaderValue other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other.Key, Key) && Equals(other.Value, Value);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof (SetHeaderValue)) return false;\r\n            return Equals((SetHeaderValue) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                return ((Key != null ? Key.GetHashCode() : 0)*397) ^ (Value != null ? Value.GetHashCode() : 0);\r\n            }\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Set header {0} = {1}\".ToFormat(Key, Value);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Key: {0}, Value: {1}\", Key, Value);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Logging/StartedRecordingOutput.cs",
    "content": "using FubuCore.Descriptions;\r\nusing FubuCore.Logging;\r\n\r\nnamespace FubuMVC.Core.Runtime.Logging\r\n{\r\n    [Title(\"Starting to record output\")]\r\n    public class StartedRecordingOutput : LogRecord\r\n    {\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Logging/WriteCookieReport.cs",
    "content": "using System;\r\nusing System.Web;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Logging;\r\nusing FubuCore;\r\nusing Cookie = FubuMVC.Core.Http.Cookies.Cookie;\r\n\r\nnamespace FubuMVC.Core.Runtime.Logging\r\n{\r\n    public class WriteCookieReport : LogRecord, DescribesItself\r\n    {\r\n        private readonly Cookie _cookie;\r\n\r\n        public WriteCookieReport(Cookie cookie)\r\n        {\r\n            _cookie = cookie;\r\n        }\r\n\r\n        public Cookie Cookie\r\n        {\r\n            get { return _cookie; }\r\n        }\r\n\r\n        public bool Equals(WriteCookieReport other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other._cookie, _cookie);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof(WriteCookieReport)) return false;\r\n            return Equals((WriteCookieReport)obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return (_cookie != null ? _cookie.GetHashCode() : 0);\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Wrote cookie {0} to response\".ToFormat(_cookie);\r\n            description.ShortDescription = _cookie.ToString();\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Cookie: {0}\", _cookie);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/Logging/WriteToStreamReport.cs",
    "content": "using FubuCore.Descriptions;\r\nusing FubuCore.Logging;\r\n\r\nnamespace FubuMVC.Core.Runtime.Logging\r\n{\r\n    public class WriteToStreamReport : LogRecord, IHaveContentType, DescribesItself\r\n    {\r\n        private readonly string _contentType;\r\n\r\n        public WriteToStreamReport(string contentType)\r\n        {\r\n            _contentType = contentType;\r\n        }\r\n\r\n        public string ContentType\r\n        {\r\n            get { return _contentType; }\r\n        }\r\n\r\n        public bool Equals(WriteToStreamReport other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other._contentType, _contentType);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof (WriteToStreamReport)) return false;\r\n            return Equals((WriteToStreamReport) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return (_contentType != null ? _contentType.GetHashCode() : 0);\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Wrote content as \" + _contentType;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"ContentType: {0}\", _contentType);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/MimeType.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Net.Mime;\r\nusing FubuCore.Util;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public class MimeType\r\n    {\r\n        public static readonly string HttpFormMimetype = \"application/x-www-form-urlencoded\";\r\n        public static readonly string MultipartMimetype = \"multipart/form-data\";\r\n\r\n\r\n        // This *must* go before the code below\r\n        private static readonly Cache<string, MimeType> _mimeTypes =\r\n            new Cache<string, MimeType>(key => new MimeType(key));\r\n\r\n        \r\n        \r\n        public static readonly MimeType Html = New(MediaTypeNames.Text.Html, \".htm\", \".html\");\r\n        public static readonly MimeType Json = New(\"application/json\");\r\n        public static readonly MimeType Text = New(MediaTypeNames.Text.Plain, \".txt\");\r\n        public static readonly MimeType Javascript = New(\"application/javascript\", \".js\", \".coffee\");\r\n        public static readonly MimeType Css = New(\"text/css\", \".css\");\r\n\r\n        public static readonly MimeType Gif = New(\"image/gif\", \".gif\");\r\n        public static readonly MimeType Png = New(\"image/png\", \".png\");\r\n        public static readonly MimeType Jpg = New(\"image/jpeg\", \".jpg\", \".jpeg\");\r\n        public static readonly MimeType Bmp = New(\"image/bmp\", \".bmp\", \".bm\");\r\n        public static readonly MimeType Unknown = New(\"dunno\");\r\n        public static readonly MimeType EventStream = New(\"text/event-stream\");\r\n\r\n        public static readonly MimeType Xml = New(\"application/xml\", \".xml\");\r\n        public static readonly MimeType Any = New(\"*/*\");\r\n        public static readonly MimeType TrueTypeFont = New(\"application/octet-stream\", \".ttf\");\r\n        public static readonly MimeType WebOpenFont = New(\"application/font-woff\", \".woff\");\r\n        public static readonly MimeType WebOpenFont2 = New(\"application/font-woff2\", \".woff2\");\r\n        public static readonly MimeType EmbeddedOpenType = New(\"application/vnd.ms-fontobject\", \".eot\");\r\n        public static readonly MimeType Svg = New(\"image/svg+xml\", \".svg\");\r\n\r\n        private readonly IList<string> _extensions = new List<string>();\r\n        private readonly string _mimeType;\r\n\r\n        private MimeType(string mimeType)\r\n        {\r\n            _mimeType = mimeType;\r\n        }\r\n\r\n        public string Value\r\n        {\r\n            get { return _mimeType; }\r\n        }\r\n\r\n        public static MimeType New(string mimeTypeValue, params string[] extensions)\r\n        {\r\n            var mimeType = new MimeType(mimeTypeValue);\r\n            extensions.Each(mimeType.AddExtension);\r\n            _mimeTypes[mimeTypeValue] = mimeType;\r\n\r\n            return mimeType;\r\n        }\r\n\r\n        public void AddExtension(string extension)\r\n        {\r\n            _extensions.Fill(extension);\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return _mimeType;\r\n        }\r\n\r\n        public static IEnumerable<MimeType> All()\r\n        {\r\n            return _mimeTypes.GetAll();\r\n        }\r\n\r\n        public static MimeType MimeTypeByValue(string mimeTypeValue)\r\n        {\r\n            return _mimeTypes[mimeTypeValue];\r\n        }\r\n\r\n        public bool HasExtension(string extension)\r\n        {\r\n            return _extensions.Contains(extension);\r\n        }\r\n\r\n        public string DefaultExtension()\r\n        {\r\n            return _extensions.FirstOrDefault();\r\n        }\r\n\r\n        public static MimeType MimeTypeByFileName(string name)\r\n        {\r\n            var extension = Path.GetExtension(name);\r\n\r\n            return _mappingFromExtension[extension];\r\n        }\r\n\r\n        public IEnumerable<string> Extensions\r\n        {\r\n            get { return _extensions; }\r\n        }\r\n\r\n        private static readonly Cache<string, MimeType> _mappingFromExtension;\r\n\r\n        static MimeType()\r\n        {\r\n            _fileExtensions.Each(pair => _mimeTypes[pair.Value].AddExtension(pair.Key));\r\n\r\n            _mappingFromExtension = new Cache<string, MimeType>(extension => {\r\n                return _mimeTypes.GetAll().FirstOrDefault(x => x.HasExtension(extension));\r\n            });\r\n        }\r\n\r\n        private static readonly Dictionary<string, string> _fileExtensions =\r\n            new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)\r\n            {\r\n                {\".323\", \"text/h323\"},\r\n                {\".3g2\", \"video/3gpp2\"},\r\n                {\".3gp2\", \"video/3gpp2\"},\r\n                {\".3gp\", \"video/3gpp\"},\r\n                {\".3gpp\", \"video/3gpp\"},\r\n                {\".aac\", \"audio/aac\"},\r\n                {\".aaf\", \"application/octet-stream\"},\r\n                {\".aca\", \"application/octet-stream\"},\r\n                {\".accdb\", \"application/msaccess\"},\r\n                {\".accde\", \"application/msaccess\"},\r\n                {\".accdt\", \"application/msaccess\"},\r\n                {\".acx\", \"application/internet-property-stream\"},\r\n                {\".adt\", \"audio/vnd.dlna.adts\"},\r\n                {\".adts\", \"audio/vnd.dlna.adts\"},\r\n                {\".afm\", \"application/octet-stream\"},\r\n                {\".ai\", \"application/postscript\"},\r\n                {\".aif\", \"audio/x-aiff\"},\r\n                {\".aifc\", \"audio/aiff\"},\r\n                {\".aiff\", \"audio/aiff\"},\r\n                {\".application\", \"application/x-ms-application\"},\r\n                {\".art\", \"image/x-jg\"},\r\n                {\".asd\", \"application/octet-stream\"},\r\n                {\".asf\", \"video/x-ms-asf\"},\r\n                {\".asi\", \"application/octet-stream\"},\r\n                {\".asm\", \"text/plain\"},\r\n                {\".asr\", \"video/x-ms-asf\"},\r\n                {\".asx\", \"video/x-ms-asf\"},\r\n                {\".atom\", \"application/atom+xml\"},\r\n                {\".au\", \"audio/basic\"},\r\n                {\".avi\", \"video/x-msvideo\"},\r\n                {\".axs\", \"application/olescript\"},\r\n                {\".bas\", \"text/plain\"},\r\n                {\".bcpio\", \"application/x-bcpio\"},\r\n                {\".bin\", \"application/octet-stream\"},\r\n                {\".bmp\", \"image/bmp\"},\r\n                {\".c\", \"text/plain\"},\r\n                {\".cab\", \"application/vnd.ms-cab-compressed\"},\r\n                {\".calx\", \"application/vnd.ms-office.calx\"},\r\n                {\".cat\", \"application/vnd.ms-pki.seccat\"},\r\n                {\".cdf\", \"application/x-cdf\"},\r\n                {\".chm\", \"application/octet-stream\"},\r\n                {\".class\", \"application/x-java-applet\"},\r\n                {\".clp\", \"application/x-msclip\"},\r\n                {\".cmx\", \"image/x-cmx\"},\r\n                {\".cnf\", \"text/plain\"},\r\n                {\".cod\", \"image/cis-cod\"},\r\n                {\".cpio\", \"application/x-cpio\"},\r\n                {\".cpp\", \"text/plain\"},\r\n                {\".crd\", \"application/x-mscardfile\"},\r\n                {\".crl\", \"application/pkix-crl\"},\r\n                {\".crt\", \"application/x-x509-ca-cert\"},\r\n                {\".csh\", \"application/x-csh\"},\r\n                {\".css\", \"text/css\"},\r\n                {\".csv\", \"application/octet-stream\"},\r\n                {\".cur\", \"application/octet-stream\"},\r\n                {\".dcr\", \"application/x-director\"},\r\n                {\".deploy\", \"application/octet-stream\"},\r\n                {\".der\", \"application/x-x509-ca-cert\"},\r\n                {\".dib\", \"image/bmp\"},\r\n                {\".dir\", \"application/x-director\"},\r\n                {\".disco\", \"text/xml\"},\r\n                {\".dlm\", \"text/dlm\"},\r\n                {\".doc\", \"application/msword\"},\r\n                {\".docm\", \"application/vnd.ms-word.document.macroEnabled.12\"},\r\n                {\".docx\", \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"},\r\n                {\".dot\", \"application/msword\"},\r\n                {\".dotm\", \"application/vnd.ms-word.template.macroEnabled.12\"},\r\n                {\".dotx\", \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\"},\r\n                {\".dsp\", \"application/octet-stream\"},\r\n                {\".dtd\", \"text/xml\"},\r\n                {\".dvi\", \"application/x-dvi\"},\r\n                {\".dvr-ms\", \"video/x-ms-dvr\"},\r\n                {\".dwf\", \"drawing/x-dwf\"},\r\n                {\".dwp\", \"application/octet-stream\"},\r\n                {\".dxr\", \"application/x-director\"},\r\n                {\".eml\", \"message/rfc822\"},\r\n                {\".emz\", \"application/octet-stream\"},\r\n                {\".eot\", \"application/vnd.ms-fontobject\"},\r\n                {\".eps\", \"application/postscript\"},\r\n                {\".etx\", \"text/x-setext\"},\r\n                {\".evy\", \"application/envoy\"},\r\n                {\".fdf\", \"application/vnd.fdf\"},\r\n                {\".fif\", \"application/fractals\"},\r\n                {\".fla\", \"application/octet-stream\"},\r\n                {\".flr\", \"x-world/x-vrml\"},\r\n                {\".flv\", \"video/x-flv\"},\r\n                {\".gif\", \"image/gif\"},\r\n                {\".gtar\", \"application/x-gtar\"},\r\n                {\".gz\", \"application/x-gzip\"},\r\n                {\".h\", \"text/plain\"},\r\n                {\".hdf\", \"application/x-hdf\"},\r\n                {\".hdml\", \"text/x-hdml\"},\r\n                {\".hhc\", \"application/x-oleobject\"},\r\n                {\".hhk\", \"application/octet-stream\"},\r\n                {\".hhp\", \"application/octet-stream\"},\r\n                {\".hlp\", \"application/winhlp\"},\r\n                {\".hqx\", \"application/mac-binhex40\"},\r\n                {\".hta\", \"application/hta\"},\r\n                {\".htc\", \"text/x-component\"},\r\n                {\".htm\", \"text/html\"},\r\n                {\".html\", \"text/html\"},\r\n                {\".htt\", \"text/webviewhtml\"},\r\n                {\".hxt\", \"text/html\"},\r\n                {\".ical\", \"text/calendar\"},\r\n                {\".icalendar\", \"text/calendar\"},\r\n                {\".ico\", \"image/x-icon\"},\r\n                {\".ics\", \"text/calendar\"},\r\n                {\".ief\", \"image/ief\"},\r\n                {\".ifb\", \"text/calendar\"},\r\n                {\".iii\", \"application/x-iphone\"},\r\n                {\".inf\", \"application/octet-stream\"},\r\n                {\".ins\", \"application/x-internet-signup\"},\r\n                {\".isp\", \"application/x-internet-signup\"},\r\n                {\".IVF\", \"video/x-ivf\"},\r\n                {\".jar\", \"application/java-archive\"},\r\n                {\".java\", \"application/octet-stream\"},\r\n                {\".jck\", \"application/liquidmotion\"},\r\n                {\".jcz\", \"application/liquidmotion\"},\r\n                {\".jfif\", \"image/pjpeg\"},\r\n                {\".jpb\", \"application/octet-stream\"},\r\n                {\".jpe\", \"image/jpeg\"},\r\n                {\".jpeg\", \"image/jpeg\"},\r\n                {\".jpg\", \"image/jpeg\"},\r\n                {\".js\", \"application/javascript\"},\r\n                {\".jsx\", \"text/jsx\"},\r\n                {\".latex\", \"application/x-latex\"},\r\n                {\".lit\", \"application/x-ms-reader\"},\r\n                {\".lpk\", \"application/octet-stream\"},\r\n                {\".lsf\", \"video/x-la-asf\"},\r\n                {\".lsx\", \"video/x-la-asf\"},\r\n                {\".lzh\", \"application/octet-stream\"},\r\n                {\".m13\", \"application/x-msmediaview\"},\r\n                {\".m14\", \"application/x-msmediaview\"},\r\n                {\".m1v\", \"video/mpeg\"},\r\n                {\".m2ts\", \"video/vnd.dlna.mpeg-tts\"},\r\n                {\".m3u\", \"audio/x-mpegurl\"},\r\n                {\".m4a\", \"audio/mp4\"},\r\n                {\".m4v\", \"video/mp4\"},\r\n                {\".man\", \"application/x-troff-man\"},\r\n                {\".manifest\", \"application/x-ms-manifest\"},\r\n                {\".map\", \"text/plain\"},\r\n                {\".mdb\", \"application/x-msaccess\"},\r\n                {\".mdp\", \"application/octet-stream\"},\r\n                {\".me\", \"application/x-troff-me\"},\r\n                {\".mht\", \"message/rfc822\"},\r\n                {\".mhtml\", \"message/rfc822\"},\r\n                {\".mid\", \"audio/mid\"},\r\n                {\".midi\", \"audio/mid\"},\r\n                {\".mix\", \"application/octet-stream\"},\r\n                {\".mmf\", \"application/x-smaf\"},\r\n                {\".mno\", \"text/xml\"},\r\n                {\".mny\", \"application/x-msmoney\"},\r\n                {\".mov\", \"video/quicktime\"},\r\n                {\".movie\", \"video/x-sgi-movie\"},\r\n                {\".mp2\", \"video/mpeg\"},\r\n                {\".mp3\", \"audio/mpeg\"},\r\n                {\".mp4\", \"video/mp4\"},\r\n                {\".mp4v\", \"video/mp4\"},\r\n                {\".mpa\", \"video/mpeg\"},\r\n                {\".mpe\", \"video/mpeg\"},\r\n                {\".mpeg\", \"video/mpeg\"},\r\n                {\".mpg\", \"video/mpeg\"},\r\n                {\".mpp\", \"application/vnd.ms-project\"},\r\n                {\".mpv2\", \"video/mpeg\"},\r\n                {\".ms\", \"application/x-troff-ms\"},\r\n                {\".msi\", \"application/octet-stream\"},\r\n                {\".mso\", \"application/octet-stream\"},\r\n                {\".mvb\", \"application/x-msmediaview\"},\r\n                {\".mvc\", \"application/x-miva-compiled\"},\r\n                {\".nc\", \"application/x-netcdf\"},\r\n                {\".nsc\", \"video/x-ms-asf\"},\r\n                {\".nws\", \"message/rfc822\"},\r\n                {\".ocx\", \"application/octet-stream\"},\r\n                {\".oda\", \"application/oda\"},\r\n                {\".odc\", \"text/x-ms-odc\"},\r\n                {\".ods\", \"application/oleobject\"},\r\n                {\".oga\", \"audio/ogg\"},\r\n                {\".ogg\", \"video/ogg\"},\r\n                {\".ogv\", \"video/ogg\"},\r\n                {\".ogx\", \"application/ogg\"},\r\n                {\".one\", \"application/onenote\"},\r\n                {\".onea\", \"application/onenote\"},\r\n                {\".onetoc\", \"application/onenote\"},\r\n                {\".onetoc2\", \"application/onenote\"},\r\n                {\".onetmp\", \"application/onenote\"},\r\n                {\".onepkg\", \"application/onenote\"},\r\n                {\".osdx\", \"application/opensearchdescription+xml\"},\r\n                {\".otf\", \"font/otf\"},\r\n                {\".p10\", \"application/pkcs10\"},\r\n                {\".p12\", \"application/x-pkcs12\"},\r\n                {\".p7b\", \"application/x-pkcs7-certificates\"},\r\n                {\".p7c\", \"application/pkcs7-mime\"},\r\n                {\".p7m\", \"application/pkcs7-mime\"},\r\n                {\".p7r\", \"application/x-pkcs7-certreqresp\"},\r\n                {\".p7s\", \"application/pkcs7-signature\"},\r\n                {\".pbm\", \"image/x-portable-bitmap\"},\r\n                {\".pcx\", \"application/octet-stream\"},\r\n                {\".pcz\", \"application/octet-stream\"},\r\n                {\".pdf\", \"application/pdf\"},\r\n                {\".pfb\", \"application/octet-stream\"},\r\n                {\".pfm\", \"application/octet-stream\"},\r\n                {\".pfx\", \"application/x-pkcs12\"},\r\n                {\".pgm\", \"image/x-portable-graymap\"},\r\n                {\".pko\", \"application/vnd.ms-pki.pko\"},\r\n                {\".pma\", \"application/x-perfmon\"},\r\n                {\".pmc\", \"application/x-perfmon\"},\r\n                {\".pml\", \"application/x-perfmon\"},\r\n                {\".pmr\", \"application/x-perfmon\"},\r\n                {\".pmw\", \"application/x-perfmon\"},\r\n                {\".png\", \"image/png\"},\r\n                {\".pnm\", \"image/x-portable-anymap\"},\r\n                {\".pnz\", \"image/png\"},\r\n                {\".pot\", \"application/vnd.ms-powerpoint\"},\r\n                {\".potm\", \"application/vnd.ms-powerpoint.template.macroEnabled.12\"},\r\n                {\".potx\", \"application/vnd.openxmlformats-officedocument.presentationml.template\"},\r\n                {\".ppam\", \"application/vnd.ms-powerpoint.addin.macroEnabled.12\"},\r\n                {\".ppm\", \"image/x-portable-pixmap\"},\r\n                {\".pps\", \"application/vnd.ms-powerpoint\"},\r\n                {\".ppsm\", \"application/vnd.ms-powerpoint.slideshow.macroEnabled.12\"},\r\n                {\".ppsx\", \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\"},\r\n                {\".ppt\", \"application/vnd.ms-powerpoint\"},\r\n                {\".pptm\", \"application/vnd.ms-powerpoint.presentation.macroEnabled.12\"},\r\n                {\".pptx\", \"application/vnd.openxmlformats-officedocument.presentationml.presentation\"},\r\n                {\".prf\", \"application/pics-rules\"},\r\n                {\".prm\", \"application/octet-stream\"},\r\n                {\".prx\", \"application/octet-stream\"},\r\n                {\".ps\", \"application/postscript\"},\r\n                {\".psd\", \"application/octet-stream\"},\r\n                {\".psm\", \"application/octet-stream\"},\r\n                {\".psp\", \"application/octet-stream\"},\r\n                {\".pub\", \"application/x-mspublisher\"},\r\n                {\".qt\", \"video/quicktime\"},\r\n                {\".qtl\", \"application/x-quicktimeplayer\"},\r\n                {\".qxd\", \"application/octet-stream\"},\r\n                {\".ra\", \"audio/x-pn-realaudio\"},\r\n                {\".ram\", \"audio/x-pn-realaudio\"},\r\n                {\".rar\", \"application/octet-stream\"},\r\n                {\".ras\", \"image/x-cmu-raster\"},\r\n                {\".rf\", \"image/vnd.rn-realflash\"},\r\n                {\".rgb\", \"image/x-rgb\"},\r\n                {\".rm\", \"application/vnd.rn-realmedia\"},\r\n                {\".rmi\", \"audio/mid\"},\r\n                {\".roff\", \"application/x-troff\"},\r\n                {\".rpm\", \"audio/x-pn-realaudio-plugin\"},\r\n                {\".rtf\", \"application/rtf\"},\r\n                {\".rtx\", \"text/richtext\"},\r\n                {\".scd\", \"application/x-msschedule\"},\r\n                {\".sct\", \"text/scriptlet\"},\r\n                {\".sea\", \"application/octet-stream\"},\r\n                {\".setpay\", \"application/set-payment-initiation\"},\r\n                {\".setreg\", \"application/set-registration-initiation\"},\r\n                {\".sgml\", \"text/sgml\"},\r\n                {\".sh\", \"application/x-sh\"},\r\n                {\".shar\", \"application/x-shar\"},\r\n                {\".sit\", \"application/x-stuffit\"},\r\n                {\".sldm\", \"application/vnd.ms-powerpoint.slide.macroEnabled.12\"},\r\n                {\".sldx\", \"application/vnd.openxmlformats-officedocument.presentationml.slide\"},\r\n                {\".smd\", \"audio/x-smd\"},\r\n                {\".smi\", \"application/octet-stream\"},\r\n                {\".smx\", \"audio/x-smd\"},\r\n                {\".smz\", \"audio/x-smd\"},\r\n                {\".snd\", \"audio/basic\"},\r\n                {\".snp\", \"application/octet-stream\"},\r\n                {\".spc\", \"application/x-pkcs7-certificates\"},\r\n                {\".spl\", \"application/futuresplash\"},\r\n                {\".spx\", \"audio/ogg\"},\r\n                {\".src\", \"application/x-wais-source\"},\r\n                {\".ssm\", \"application/streamingmedia\"},\r\n                {\".sst\", \"application/vnd.ms-pki.certstore\"},\r\n                {\".stl\", \"application/vnd.ms-pki.stl\"},\r\n                {\".sv4cpio\", \"application/x-sv4cpio\"},\r\n                {\".sv4crc\", \"application/x-sv4crc\"},\r\n                {\".svg\", \"image/svg+xml\"},\r\n                {\".svgz\", \"image/svg+xml\"},\r\n                {\".swf\", \"application/x-shockwave-flash\"},\r\n                {\".t\", \"application/x-troff\"},\r\n                {\".tar\", \"application/x-tar\"},\r\n                {\".tcl\", \"application/x-tcl\"},\r\n                {\".tex\", \"application/x-tex\"},\r\n                {\".texi\", \"application/x-texinfo\"},\r\n                {\".texinfo\", \"application/x-texinfo\"},\r\n                {\".tgz\", \"application/x-compressed\"},\r\n                {\".thmx\", \"application/vnd.ms-officetheme\"},\r\n                {\".thn\", \"application/octet-stream\"},\r\n                {\".tif\", \"image/tiff\"},\r\n                {\".tiff\", \"image/tiff\"},\r\n                {\".toc\", \"application/octet-stream\"},\r\n                {\".tr\", \"application/x-troff\"},\r\n                {\".trm\", \"application/x-msterminal\"},\r\n                {\".ts\", \"video/vnd.dlna.mpeg-tts\"},\r\n                {\".tsv\", \"text/tab-separated-values\"},\r\n                {\".ttf\", \"application/octet-stream\"},\r\n                {\".tts\", \"video/vnd.dlna.mpeg-tts\"},\r\n                {\".txt\", \"text/plain\"},\r\n                {\".u32\", \"application/octet-stream\"},\r\n                {\".uls\", \"text/iuls\"},\r\n                {\".ustar\", \"application/x-ustar\"},\r\n                {\".vbs\", \"text/vbscript\"},\r\n                {\".vcf\", \"text/x-vcard\"},\r\n                {\".vcs\", \"text/plain\"},\r\n                {\".vdx\", \"application/vnd.ms-visio.viewer\"},\r\n                {\".vml\", \"text/xml\"},\r\n                {\".vsd\", \"application/vnd.visio\"},\r\n                {\".vss\", \"application/vnd.visio\"},\r\n                {\".vst\", \"application/vnd.visio\"},\r\n                {\".vsto\", \"application/x-ms-vsto\"},\r\n                {\".vsw\", \"application/vnd.visio\"},\r\n                {\".vsx\", \"application/vnd.visio\"},\r\n                {\".vtx\", \"application/vnd.visio\"},\r\n                {\".wav\", \"audio/wav\"},\r\n                {\".wax\", \"audio/x-ms-wax\"},\r\n                {\".wbmp\", \"image/vnd.wap.wbmp\"},\r\n                {\".wcm\", \"application/vnd.ms-works\"},\r\n                {\".wdb\", \"application/vnd.ms-works\"},\r\n                {\".webm\", \"video/webm\"},\r\n                {\".wks\", \"application/vnd.ms-works\"},\r\n                {\".wm\", \"video/x-ms-wm\"},\r\n                {\".wma\", \"audio/x-ms-wma\"},\r\n                {\".wmd\", \"application/x-ms-wmd\"},\r\n                {\".wmf\", \"application/x-msmetafile\"},\r\n                {\".wml\", \"text/vnd.wap.wml\"},\r\n                {\".wmlc\", \"application/vnd.wap.wmlc\"},\r\n                {\".wmls\", \"text/vnd.wap.wmlscript\"},\r\n                {\".wmlsc\", \"application/vnd.wap.wmlscriptc\"},\r\n                {\".wmp\", \"video/x-ms-wmp\"},\r\n                {\".wmv\", \"video/x-ms-wmv\"},\r\n                {\".wmx\", \"video/x-ms-wmx\"},\r\n                {\".wmz\", \"application/x-ms-wmz\"},\r\n                {\".woff\", \"application/font-woff\"},\r\n                {\".woff2\", \"application/font-woff2\"},\r\n                {\".wps\", \"application/vnd.ms-works\"},\r\n                {\".wri\", \"application/x-mswrite\"},\r\n                {\".wrl\", \"x-world/x-vrml\"},\r\n                {\".wrz\", \"x-world/x-vrml\"},\r\n                {\".wsdl\", \"text/xml\"},\r\n                {\".wtv\", \"video/x-ms-wtv\"},\r\n                {\".wvx\", \"video/x-ms-wvx\"},\r\n                {\".x\", \"application/directx\"},\r\n                {\".xaf\", \"x-world/x-vrml\"},\r\n                {\".xaml\", \"application/xaml+xml\"},\r\n                {\".xap\", \"application/x-silverlight-app\"},\r\n                {\".xbap\", \"application/x-ms-xbap\"},\r\n                {\".xbm\", \"image/x-xbitmap\"},\r\n                {\".xdr\", \"text/plain\"},\r\n                {\".xht\", \"application/xhtml+xml\"},\r\n                {\".xhtml\", \"application/xhtml+xml\"},\r\n                {\".xla\", \"application/vnd.ms-excel\"},\r\n                {\".xlam\", \"application/vnd.ms-excel.addin.macroEnabled.12\"},\r\n                {\".xlc\", \"application/vnd.ms-excel\"},\r\n                {\".xlm\", \"application/vnd.ms-excel\"},\r\n                {\".xls\", \"application/vnd.ms-excel\"},\r\n                {\".xlsb\", \"application/vnd.ms-excel.sheet.binary.macroEnabled.12\"},\r\n                {\".xlsm\", \"application/vnd.ms-excel.sheet.macroEnabled.12\"},\r\n                {\".xlsx\", \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"},\r\n                {\".xlt\", \"application/vnd.ms-excel\"},\r\n                {\".xltm\", \"application/vnd.ms-excel.template.macroEnabled.12\"},\r\n                {\".xltx\", \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\"},\r\n                {\".xlw\", \"application/vnd.ms-excel\"},\r\n                {\".xml\", \"text/xml\"},\r\n                {\".xof\", \"x-world/x-vrml\"},\r\n                {\".xpm\", \"image/x-xpixmap\"},\r\n                {\".xps\", \"application/vnd.ms-xpsdocument\"},\r\n                {\".xsd\", \"text/xml\"},\r\n                {\".xsf\", \"text/xml\"},\r\n                {\".xsl\", \"text/xml\"},\r\n                {\".xslt\", \"text/xml\"},\r\n                {\".xsn\", \"application/octet-stream\"},\r\n                {\".xtp\", \"application/octet-stream\"},\r\n                {\".xwd\", \"image/x-xwindowdump\"},\r\n                {\".z\", \"application/x-compress\"},\r\n                {\".zip\", \"application/x-zip-compressed\"},\r\n            };\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/NormalState.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Caching;\r\nusing FubuMVC.Core.Http;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public class NormalState : IOutputState\r\n    {\r\n        private readonly IHttpResponse _response;\r\n        private readonly IFileSystem _fileSystem;\r\n\r\n        public NormalState(IHttpResponse response, IFileSystem fileSystem)\r\n        {\r\n            _response = response;\r\n            _fileSystem = fileSystem;\r\n        }\r\n\r\n        public Task Write(string contentType, string renderedOutput)\r\n        {\r\n            _response.WriteContentType(contentType);\r\n            return _response.Write(renderedOutput);\r\n        }\r\n\r\n        public Task Write(string contentType, Func<Stream, Task> action)\r\n        {\r\n            _response.WriteContentType(contentType);\r\n            return _response.Write((Func<Stream, Task>) action);\r\n        }\r\n\r\n        public void AppendHeader(string header, string value)\r\n        {\r\n            _response.AppendHeader(header, value);\r\n        }\r\n\r\n        public void WriteFile(string contentType, string localFilePath, string displayName)\r\n        {\r\n            var record = WriteFileRecord.Create(_fileSystem, localFilePath, contentType, displayName);\r\n            record.Replay(_response);\r\n        }\r\n\r\n        public void Flush()\r\n        {\r\n            _response.Flush();\r\n        }\r\n\r\n        public Task Write(string renderedOutput)\r\n        {\r\n            return _response.Write(renderedOutput);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/OutputWriter.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Net;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuCore.Logging;\r\nusing FubuMVC.Core.Caching;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Runtime.Logging;\r\nusing Cookie = FubuMVC.Core.Http.Cookies.Cookie;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public interface IHaveContentType\r\n    {\r\n        string ContentType { get; }\r\n    }\r\n\r\n    public class OutputWriter : IOutputWriter\r\n    {\r\n        private readonly IHttpResponse _response;\r\n        private readonly IFileSystem _fileSystem;\r\n        private readonly ILogger _logger;\r\n        private readonly Stack<IOutputState> _outputStates = new Stack<IOutputState>(); \r\n\r\n        public OutputWriter(IHttpResponse response, IFileSystem fileSystem, ILogger logger)\r\n        {\r\n            _response = response;\r\n            _fileSystem = fileSystem;\r\n            _logger = logger;\r\n\r\n            normalWriting();\r\n        }\r\n\r\n        public virtual IHttpResponse Response => _response;\r\n\r\n        IOutputState CurrentState => _outputStates.Peek();\r\n\r\n        private void normalWriting()\r\n        {\r\n            var state = new NormalState(_response, _fileSystem);\r\n            _outputStates.Push(state);\r\n        }\r\n\r\n        public void WriteFile(string contentType, string localFilePath, string displayName)\r\n        {\r\n            _logger.DebugMessage(() => new FileOutputReport{\r\n                ContentType = contentType,\r\n                DisplayName = displayName,\r\n                LocalFilePath = localFilePath\r\n            });\r\n\r\n            CurrentState.WriteFile(contentType, localFilePath, displayName);\r\n        }\r\n\r\n        public virtual async Task<IRecordedOutput> Record(Func<Task> inner)\r\n        {\r\n            _logger.DebugMessage(() => new StartedRecordingOutput());\r\n\r\n            var output = new RecordedOutput(_fileSystem);\r\n            _outputStates.Push(output);\r\n\r\n            try\r\n            {\r\n                await inner().ConfigureAwait(false);\r\n            }\r\n            finally\r\n            {\r\n                _outputStates.Pop();\r\n            \r\n                _logger.DebugMessage(() => new FinishedRecordingOutput(output));\r\n            }\r\n\r\n            return output;\r\n        }\r\n\r\n        public void Replay(IRecordedOutput output)\r\n        {\r\n            _logger.DebugMessage(() => new ReplayRecordedOutput(output));\r\n\r\n            // We're routing the replay thru IOutputWriter to \r\n            // make unit testing easier, I think it gives a cleaner\r\n            // dependency graph, and it makes request tracing work.\r\n            output.Replay(Response);\r\n        }\r\n\r\n        // Keep this virtual for testing\r\n        public virtual void Flush()\r\n        {\r\n            _logger.Debug(() => \"Flushed content to the Http output\");\r\n\r\n            CurrentState.Flush();\r\n        }\r\n\r\n        public virtual Task Write(string contentType, string renderedOutput)\r\n        {\r\n            _logger.DebugMessage(() => new OutputReport(contentType, renderedOutput));\r\n\r\n            return CurrentState.Write(contentType, renderedOutput);\r\n        }\r\n\r\n        public Task Write(string renderedOutput)\r\n        {\r\n            _logger.DebugMessage(() => new OutputReport(renderedOutput));\r\n\r\n            return CurrentState.Write(renderedOutput);\r\n        }\r\n\r\n        public virtual void RedirectToUrl(string url)\r\n        {\r\n            _logger.DebugMessage(() => new RedirectReport(url));\r\n\r\n            Response.Redirect(url);\r\n        }\r\n\r\n\r\n        public virtual void AppendCookie(Cookie cookie)\r\n        {\r\n            _logger.DebugMessage(() => new WriteCookieReport(cookie));\r\n\r\n            CurrentState.AppendHeader(HttpResponseHeaders.SetCookie, cookie.ToString());\r\n        }\r\n\r\n        public void AppendHeader(string key, string value)\r\n        {\r\n            _logger.DebugMessage(() => new SetHeaderValue(key, value));\r\n\r\n            CurrentState.AppendHeader(key, value);\r\n        }\r\n\r\n        public Task Write(string contentType, Func<Stream, Task> output)\r\n        {\r\n            _logger.DebugMessage(() => new WriteToStreamReport(contentType));\r\n            \r\n            return CurrentState.Write(contentType, output);\r\n        }\r\n\r\n        public void WriteResponseCode(HttpStatusCode status, string description = null)\r\n        {\r\n            _logger.DebugMessage(() => new HttpStatusReport{\r\n                Description = description,\r\n                Status = status\r\n            });\r\n\r\n            Response.WriteResponseCode(status, description);\r\n        }\r\n\r\n        public void Dispose()\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/OutputWriterExtensions.cs",
    "content": "using System.Net;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Http;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public static class OutputWriterExtensions\r\n    {\r\n        public static Task WriteHtml(this IOutputWriter writer, string content)\r\n        {\r\n            return writer.Write(MimeType.Html.ToString(), content);\r\n        }\r\n\r\n        public static Task WriteHtml(this IOutputWriter writer, object content)\r\n        {\r\n            return writer.Write(MimeType.Html.ToString(), content?.ToString() ?? string.Empty);\r\n        }\r\n\r\n        public static Task Write(this IOutputWriter writer, MimeType mimeType, string contents)\r\n        {\r\n            return writer.Write(mimeType.Value, contents);\r\n        }\r\n\r\n        // TODO -- this probably needs to be async\r\n        public static void WriteFile(this IOutputWriter writer, MimeType contentType, string localFilePath, string displayName)\r\n        {\r\n            writer.WriteFile(contentType.Value, localFilePath, displayName);\r\n        }\r\n\r\n        public static void AppendHeader(this IOutputWriter writer, HttpResponseHeader header, string value)\r\n        {\r\n            writer.AppendHeader(HttpResponseHeaders.HeaderNameFor(header), value);\r\n        }\r\n\r\n        public static void ContentType(this IOutputWriter writer, MimeType mimeType)\r\n        {\r\n            writer.AppendHeader(HttpResponseHeader.ContentType, mimeType.Value);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/PartialChainSwitcher.cs",
    "content": "using System;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public class PartialChainSwitcher : IActionBehavior\r\n    {\r\n        private readonly ICurrentChain _chainStack;\r\n        private readonly BehaviorChain _targetChain;\r\n\r\n        public PartialChainSwitcher(IActionBehavior inner, ICurrentChain chainStack, BehaviorChain targetChain)\r\n        {\r\n            Inner = inner;\r\n            _chainStack = chainStack;\r\n            _targetChain = targetChain;\r\n        }\r\n\r\n        public IActionBehavior Inner { get; private set; }\r\n\r\n        public Task Invoke()\r\n        {\r\n            throw new InvalidOperationException(\"Not valid unless being used with partial invocation.\");\r\n        }\r\n\r\n        public async Task InvokePartial()\r\n        {\r\n            _chainStack.Push(_targetChain);\r\n            try\r\n            {\r\n                await Inner.InvokePartial().ConfigureAwait(false);\r\n            }\r\n            finally\r\n            {\r\n                _chainStack.Pop();\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/PartialFactory.cs",
    "content": "using FubuCore;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public class PartialFactory : IPartialFactory\r\n    {\r\n        private readonly ICurrentChain _currentChain;\r\n        private readonly IServiceLocator _services;\r\n\r\n        public PartialFactory(IServiceLocator services, ICurrentChain currentChain)\r\n        {\r\n            _services = services;\r\n            _currentChain = currentChain;\r\n        }\r\n\r\n        public IActionBehavior BuildBehavior(BehaviorChain chain)\r\n        {\r\n            var behavior = _services.GetInstance<IActionBehavior>(chain.UniqueId.ToString());\r\n            return new FullChainSwitcher(behavior, _currentChain, chain);\r\n        }\r\n\r\n        public IActionBehavior BuildPartial(BehaviorChain chain)\r\n        {\r\n            var behavior = _services.GetInstance<IActionBehavior>(chain.UniqueId.ToString());\r\n            return new PartialChainSwitcher(behavior, _currentChain, chain);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/PartialInvoker.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Security.Authorization;\nusing FubuMVC.Core.Urls;\n\nnamespace FubuMVC.Core.Runtime\n{\n    public class PartialInvoker : IPartialInvoker\n    {\n        private readonly IPartialFactory _factory;\n        private readonly IFubuRequest _request;\n        private readonly IAuthorizationPreviewService _authorization;\n        private readonly IOutputWriter _writer;\n        private readonly ISetterBinder _setterBinder;\n        private readonly IChainResolver _resolver;\n\n        public PartialInvoker(IPartialFactory factory, IFubuRequest request, IAuthorizationPreviewService authorization, IOutputWriter writer, ISetterBinder setterBinder, IChainResolver resolver)\n        {\n            _factory = factory;\n            _request = request;\n            _authorization = authorization;\n            _writer = writer;\n            _setterBinder = setterBinder;\n            _resolver = resolver;\n        }\n\n        public async Task<string> Invoke<T>(string categoryOrHttpMethod = null) where T : class\n        {\n            var output = string.Empty;\n            var input = _request.Get<T>();\n            if (_authorization.IsAuthorized(input, categoryOrHttpMethod))\n            {\n                output = await invokeWrapped(typeof(T), categoryOrHttpMethod).ConfigureAwait(false);\n            }\n            return output;\n        }\n\n        public async Task<string> InvokeObject(object model, bool withModelBinding = false, string categoryOrHttpMethod = null)\n        {\n            var output = string.Empty;\n            if (_authorization.IsAuthorized(model))\n            {\n                var requestType = model.GetType();\n                if (withModelBinding)\n                {\n                    _setterBinder.BindProperties(requestType, model);\n                }\n                _request.Set(requestType, model);\n                output = await invokeWrapped(requestType, categoryOrHttpMethod).ConfigureAwait(false);\n            }\n            return output;\n        }\n\n        public Task<string> InvokeAsHtml(object model)\n        {\n            var current = _request.Get<CurrentMimeType>();\n            _request.Set(new CurrentMimeType(MimeType.HttpFormMimetype, MimeType.Html.Value));\n\n            try\n            {\n                return InvokeObject(model);\n            }\n            finally\n            {\n                _request.Set(current);\n            }\n        }\n\n        public async Task<object> InvokeFast(BehaviorChain chain, object input = null)\n        {\n            _request.Set(OutputPartialBehavior.None);\n            if (input != null)\n            {\n                _request.Set(chain.InputType(), input);\n            }\n\n            try\n            {\n                var partial = _factory.BuildPartial(chain);\n                await partial.InvokePartial().ConfigureAwait(false);\n\n                // TODO -- how to detect authorization failures here?\n                var resourceType = chain.ResourceType();\n                return _request.Has(resourceType) ? _request.Get(resourceType) : null;\n            }\n            finally\n            {\n                _request.Set(OutputPartialBehavior.Write);\n            }\n        }\n\n        private async Task<string> invokeWrapped(Type requestType, string categoryOrHttpMethod = null)\n        {\n            var chain = _resolver.FindUniqueByType(requestType, category: categoryOrHttpMethod ?? Categories.VIEW);\n            var partial = _factory.BuildPartial(chain);\n\n            var output = await _writer.Record(() => partial.InvokePartial()).ConfigureAwait(false);\n\n            output.Headers().Each(x => _writer.AppendHeader(x.Name, x.Value));\n            return output.GetText();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/PortFinder.cs",
    "content": "using System;\nusing System.Net;\nusing System.Net.Sockets;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Runtime\n{\n    public static class PortFinder\n    {\n        public static int FindPort(int start)\n        {\n            for (int i = start; i < start + 50; i++)\n            {\n                if (tryPort(i)) return i;\n            }\n\n            throw new InvalidOperationException(\"Could not find a port to bind to\");\n        }\n\n        private static bool tryPort(int port)\n        {\n            var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);\n            var endpoint = new IPEndPoint(IPAddress.Any, port);\n\n            try\n            {\n                socket.Bind(endpoint);\n                return true;\n            }\n            catch (Exception)\n            {\n                return false;\n            }\n            finally\n            {\n                socket.SafeDispose();\n            }\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/SessionState/CookieFlashProvider.cs",
    "content": "using System;\nusing System.Text;\nusing System.Web;\nusing FubuCore.Dates;\nusing FubuMVC.Core.Http.Cookies;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.Runtime.SessionState\n{\n    public class CookieFlashProvider : IFlash\n    {\n        public const string FlashKey = \"fubuFlash\";\n\n        private readonly IOutputWriter _writer;\n        private readonly ICookies _cookies;\n        private readonly ISystemTime _systemTime;\n\n        public CookieFlashProvider(IOutputWriter writer, ICookies cookies, ISystemTime systemTime)\n        {\n            _writer = writer;\n            _cookies = cookies;\n            _systemTime = systemTime;\n        }\n\n        public void Flash(object flashObject)\n        {\n            var json = ToJson(flashObject);\n            var cookie = new Cookie(FlashKey, json)\n            {\n                Path = \"/\",\n                Expires = _systemTime.UtcNow().AddDays(1)\n            };\n\n            _writer.AppendCookie(cookie);\n        }\n\n        public T Retrieve<T>()\n        {\n            if (!_cookies.Has(FlashKey))\n            {\n                return default(T);\n            }\n\n            var json = _cookies.GetValue(FlashKey);\n            json = FromBase64String(HttpUtility.UrlDecode(json));\n\n            var cookie = new Cookie(FlashKey)\n            {\n                Path = \"/\",\n                Expires = _systemTime.UtcNow().AddYears(-1)\n            };\n\n            _writer.AppendCookie(cookie);\n\n            return JsonUtil.Get<T>(json);\n        }\n\n        public virtual string ToJson(object flashObject)\n        {\n            var value = ToBase64String(JsonUtil.ToJson(flashObject));\n            return HttpUtility.UrlEncode(value);\n        }\n\n        public static string ToBase64String( string input)\n        {\n            return Convert.ToBase64String(Encoding.UTF8.GetBytes(input));\n        }\n\n        public static string FromBase64String(string input)\n        {\n            var bytes = Convert.FromBase64String(input);\n            return Encoding.UTF8.GetString(bytes);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/SessionState/IFlash.cs",
    "content": "using HtmlTags;\n\nnamespace FubuMVC.Core.Runtime.SessionState\n{\n    public interface IFlash\n    {\n        void Flash(object flashObject);\n        T Retrieve<T>();\n    }\n\n    public class FlashProvider : IFlash\n    {\n        public const string FLASH_KEY = \"fubuFlash\";\n\n        public FlashProvider()\n        {\n        }\n\n        public FlashProvider(ISessionState sessionState)\n        {\n            Session = sessionState;\n        }\n\n        public ISessionState Session { get; set; }\n\n        public void Flash(object flashObject)\n        {\n            string json = JsonUtil.ToJson(flashObject);\n            Session.Set(FLASH_KEY, json);\n        }\n\n        public T Retrieve<T>()\n        {\n            var json = Session.Get<string>(FLASH_KEY);\n            Session.Remove(FLASH_KEY);\n\n            return (json != null)\n                       ? JsonUtil.Get<T>(json)\n                       : default(T);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/SessionState/IRequestDataProvider.cs",
    "content": "using System.Collections.Generic;\nusing System.Reflection;\nusing System.Web;\n\nnamespace FubuMVC.Core.Runtime.SessionState\n{\n    public interface IRequestDataProvider\n    {\n        void Store<TFlashModel>(TFlashModel flashModel) where TFlashModel : class;\n        TFlashModel Load<TFlashModel>() where TFlashModel : class, new();\n        void Clear();\n    }\n\n    public class RequestDataProvider : IRequestDataProvider\n    {\n        public const string REQUESTDATA_PREFIX_KEY = \"fubuRequestData__\";\n        private readonly HttpContextBase _httpContext;\n\n        public RequestDataProvider(HttpContextBase httpContext)\n        {\n            _httpContext = httpContext;\n        }\n\n\n        public void Store<TFlashModel>(TFlashModel flashModel) where TFlashModel : class\n        {\n            if (_httpContext.Session == null) return;\n\n            Clear();\n\n            typeof (TFlashModel)\n                .GetProperties()\n                .Each(property => StorePropertyValue(property, flashModel));\n        }\n\n        public TFlashModel Load<TFlashModel>() where TFlashModel : class, new()\n        {\n            if (_httpContext.Session == null) return null;\n\n            var flashModel = new TFlashModel();\n\n            typeof (TFlashModel).GetProperties()\n                .Each(property => LoadPropertyValue(property, flashModel));\n\n            return flashModel;\n        }\n\n        public void Clear()\n        {\n            if (_httpContext.Session == null || _httpContext.Session.Keys == null) return;\n\n            var keysToBeRemoved = new List<string>();\n            _httpContext.Session.Keys.Each(key =>\n            {\n                if (key.ToString().StartsWith(REQUESTDATA_PREFIX_KEY))\n                    keysToBeRemoved.Add(key.ToString());\n            });\n\n            keysToBeRemoved.ForEach(key => _httpContext.Session.Remove(key));\n        }\n\n\n        private void StorePropertyValue(PropertyInfo propertyInfo, object flashModel)\n        {\n            object value = propertyInfo.GetValue(flashModel, new object[] {});\n            string key = REQUESTDATA_PREFIX_KEY + propertyInfo.Name;\n            _httpContext.Session.Add(key, value);\n        }\n\n        private void LoadPropertyValue<TFlashModel>(PropertyInfo propertyInfo, TFlashModel flashModel)\n            where TFlashModel : class\n        {\n            string key = REQUESTDATA_PREFIX_KEY + propertyInfo.Name;\n            object value = _httpContext.Session[key];\n\n            if (value == null)\n                throw new KeyNotFoundException(string.Format(\"THere was no data found for property {0} in {1}\",\n                                                             propertyInfo.Name, typeof (TFlashModel).FullName));\n\n            propertyInfo.SetValue(flashModel, value, new object[] {});\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/SetValueReport.cs",
    "content": "using System;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Logging;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public class SetValueReport : LogRecord, DescribesItself\r\n    {\r\n        public SetValueReport(object value)\r\n        {\r\n            Type = value.GetType();\r\n            Value = value;\r\n        }\r\n\r\n        public SetValueReport()\r\n        {\r\n        }\r\n\r\n        public Type Type { get; set; }\r\n        public object Value { get; set; }\r\n\r\n        public static SetValueReport For<T>(T value)\r\n        {\r\n            return new SetValueReport{\r\n                Type = typeof (T),\r\n                Value = value\r\n            };\r\n        }\r\n\r\n        public bool Equals(SetValueReport other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other.Type, Type) && Equals(other.Value, Value);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof (SetValueReport)) return false;\r\n            return Equals((SetValueReport) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                return ((Type != null ? Type.GetHashCode() : 0)*397) ^ (Value != null ? Value.GetHashCode() : 0);\r\n            }\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = \"Setting value of {0} in IFubuRequest\".ToFormat(Type.Name);\r\n            description.Properties[\"Value\"] = Value.ToString();\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Type: {0}, Value: {1}\", Type, Value);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/SetterBinder.cs",
    "content": "using System;\r\nusing FubuCore.Binding;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    public class SetterBinder : ISetterBinder\r\n    {\r\n        private readonly StandardModelBinder _binder;\r\n        private readonly IBindingContext _context;\r\n\r\n        public SetterBinder(StandardModelBinder binder, IBindingContext context)\r\n        {\r\n            _binder = binder;\r\n            _context = context;\r\n        }\r\n\r\n        public void BindProperties<T>(T target)\r\n        {\r\n            BindProperties(typeof(T), target);\r\n        }\r\n\r\n        public void BindProperties(Type type, object target)\r\n        {\r\n            _binder.BindProperties(type, target, _context);\r\n        }\r\n    }\r\n\r\n    public interface ISetterBinder\r\n    {\r\n        void BindProperties<T>(T target);\r\n        void BindProperties(Type type, object target);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Runtime/UnknownExtensionException.cs",
    "content": "using System;\r\nusing System.Runtime.Serialization;\r\n\r\nnamespace FubuMVC.Core.Runtime\r\n{\r\n    [Serializable]\r\n    public class UnknownExtensionException : Exception\r\n    {\r\n        public UnknownExtensionException(string extension) : base(\"No mimetype registered or known for extension \" + extension)\r\n        {\r\n        }\r\n\r\n        protected UnknownExtensionException(SerializationInfo info, StreamingContext context) : base(info, context)\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/AntiForgeryBehavior.cs",
    "content": "﻿using System.Net;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Security.AntiForgery\n{\n    public class AntiForgeryBehavior : BasicBehavior\n    {\n        private readonly IOutputWriter _outputWriter;\n        private readonly string _salt;\n        private readonly IAntiForgeryValidator _validator;\n\n        public AntiForgeryBehavior(string salt, IAntiForgeryValidator validator, IOutputWriter outputWriter)\n            : base(PartialBehavior.Executes)\n        {\n            _salt = salt;\n            _validator = validator;\n            _outputWriter = outputWriter;\n        }\n\n        protected override Task<DoNext> performInvoke()\n        {\n            if (_validator.Validate(_salt))\n            {\n                return Task.FromResult(DoNext.Continue);\n            }\n\n            _outputWriter.WriteResponseCode(HttpStatusCode.InternalServerError);\n            return Task.FromResult(DoNext.Stop);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/AntiForgeryData.cs",
    "content": "using System;\nusing System.Security.Principal;\n\nnamespace FubuMVC.Core.Security.AntiForgery\n{\n    public class AntiForgeryData\n    {\n        private DateTime _creationDate = DateTime.UtcNow;\n        private string _salt;\n        private string _username;\n        private string _value;\n\n        public AntiForgeryData()\n        {\n        }\n\n        public AntiForgeryData(AntiForgeryData token)\n        {\n            CreationDate = token.CreationDate;\n            Salt = token.Salt;\n            Username = token.Username;\n            Value = token.Value;\n        }\n\n        public string Salt\n        {\n            get { return _salt ?? string.Empty; }\n            set { _salt = value; }\n        }\n\n        public string Value\n        {\n            get { return _value ?? string.Empty; }\n            set { _value = value; }\n        }\n\n        public string Username\n        {\n            get { return _username ?? string.Empty; }\n            set { _username = value; }\n        }\n\n        public DateTime CreationDate\n        {\n            get { return _creationDate; }\n            set { _creationDate = value; }\n        }\n\n        public void SetUser(IPrincipal user)\n        {\n            Username = GetUsername(user);\n        }\n\n        public static string GetUsername(IPrincipal user)\n        {\n            if (user != null)\n            {\n                IIdentity identity = user.Identity;\n                if (identity != null && identity.IsAuthenticated)\n                {\n                    return identity.Name;\n                }\n            }\n\n            return String.Empty;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/AntiForgeryNode.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing FubuMVC.Core.Registration.Nodes;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.Security.AntiForgery\n{\n    [Description(\"Applies XSS anti forgery checks against this BehaviorChain\")]\n    public class AntiForgeryNode : BehaviorNode\n    {\n        private readonly string _salt;\n\n        public AntiForgeryNode(string salt)\n        {\n            if (salt == null) throw new ArgumentNullException(\"salt\");\n\n            _salt = salt;\n        }\n\n        public override BehaviorCategory Category\n        {\n            get { return BehaviorCategory.Wrapper; }\n        }\n\n        protected override IConfiguredInstance buildInstance()\n        {\n            var instance = new SmartInstance<AntiForgeryBehavior>();\n            instance.Ctor<string>().Is(_salt);\n\n            return instance;\n        }\n\n        public string Salt\n        {\n            get { return _salt; }\n        }\n\n        public bool Equals(AntiForgeryNode other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return Equals(other._salt, _salt);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (AntiForgeryNode)) return false;\n            return Equals((AntiForgeryNode) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (_salt != null ? _salt.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Salt: {0}\", _salt);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/AntiForgeryPolicy.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Security.AntiForgery\n{\n    [Description(\"Adds anti-forgery protection to to matching chains\")]\n    public class AntiForgeryPolicy : IConfigurationAction\n    {\n        public void Configure(BehaviorGraph graph)\n        {\n            var antiForgerySettings = graph.Settings.Get<AntiForgerySettings>();\n            graph.Chains.OfType<RoutedChain>().Where(antiForgerySettings.Matches)\n                .Each(x => x.Prepend(new AntiForgeryNode(x.InputType().FullName)));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/AntiForgeryService.cs",
    "content": "using System.Threading;\nusing System.Web;\nusing FubuCore;\nusing FubuMVC.Core.Http.Cookies;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Runtime.Files;\n\nnamespace FubuMVC.Core.Security.AntiForgery\n{\n    public class AntiForgeryService : IAntiForgeryService\n    {\n        private readonly IOutputWriter _outputWriter;\n        private readonly IFubuApplicationFiles _fubuApplicationFiles;\n        private readonly ICookies _cookies;\n        private readonly IAntiForgerySerializer _serializer;\n        private readonly IAntiForgeryTokenProvider _tokenProvider;\n\n        public AntiForgeryService(IOutputWriter outputWriter,\n                                  IAntiForgeryTokenProvider tokenProvider,\n                                  IAntiForgerySerializer serializer,\n                                  IFubuApplicationFiles fubuApplicationFiles,\n                                  ICookies cookies)\n        {\n            _outputWriter = outputWriter;\n            _tokenProvider = tokenProvider;\n            _serializer = serializer;\n            _fubuApplicationFiles = fubuApplicationFiles;\n            _cookies = cookies;\n        }\n\n        public AntiForgeryData SetCookieToken(string path, string domain)\n        {\n            var applicationPath = _fubuApplicationFiles.RootPath;\n            AntiForgeryData token = GetCookieToken();\n            string name = _tokenProvider.GetTokenName(applicationPath);\n            string cookieValue = _serializer.Serialize(token);\n\n            var newCookie = new Cookie(name, HttpUtility.UrlEncode(cookieValue)) {HttpOnly = true, Domain = domain};\n            if (!string.IsNullOrEmpty(path))\n            {\n                newCookie.Path = path;\n            }\n            _outputWriter.AppendCookie(newCookie);\n\n            return token;\n        }\n\n        public FormToken GetFormToken(AntiForgeryData token, string salt)\n        {\n            var formToken = new AntiForgeryData(token)\n            {\n                Salt = salt,\n                Username = AntiForgeryData.GetUsername(Thread.CurrentPrincipal)\n            };\n            string tokenString = _serializer.Serialize(formToken);\n\n            return new FormToken\n            {\n                Name = _tokenProvider.GetTokenName(),\n                TokenString = tokenString\n            };\n        }\n\n        public AntiForgeryData GetCookieToken()\n        {\n            var applicationPath = _fubuApplicationFiles.RootPath;\n            string name = _tokenProvider.GetTokenName(applicationPath);\n            Cookie cookie = _cookies.Get(name);\n            AntiForgeryData cookieToken = null;\n            if (cookie != null)\n            {\n                try\n                {\n                    cookieToken = _serializer.Deserialize(HttpUtility.UrlDecode(cookie.Value));\n                }\n                catch (FubuException)\n                {\n                    // TODO -- log this.  Need a generic tracing mechanism\n                }\n            }\n\n            return cookieToken ?? _tokenProvider.GenerateToken();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/AntiForgeryServiceRegistry.cs",
    "content": "using FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.Security.AntiForgery\n{\n    public class AntiForgeryServiceRegistry : ServiceRegistry\n    {\n        public AntiForgeryServiceRegistry()\n        {\n            SetServiceIfNone<IAntiForgeryValidator, AntiForgeryValidator>();\n            SetServiceIfNone<IAntiForgeryEncoder, MachineKeyAntiForgeryEncoder>();\n            SetServiceIfNone<IAntiForgerySerializer, BinaryAntiForgerySerializer>();\n            SetServiceIfNone<IAntiForgeryTokenProvider, AntiForgeryTokenProvider>();\n            SetServiceIfNone<IAntiForgeryService, AntiForgeryService>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/AntiForgerySettings.cs",
    "content": "﻿using System;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Security.AntiForgery\n{\n    public class AntiForgerySettings : IFeatureSettings, DescribesItself\n    {\n        public bool Enabled { get; set; }\n\n        public Func<RoutedChain, bool> Matches = c => c.MatchesCategoryOrHttpMethod(\"POST\") && c.InputType() != null;\n\n\n        public string Path { get; set; }\n        public string Domain { get; set; }\n\n        void IFeatureSettings.Apply(FubuRegistry registry)\n        {\n            if (!Enabled) return;\n\n            registry.Services.IncludeRegistry<AntiForgeryServiceRegistry>();\n            registry.Policies.Local.Add<AntiForgeryPolicy>();\n        }\n\n        public void Describe(Description description)\n        {\n            description.Properties[nameof(Enabled)] = Enabled.ToString();\n            description.Properties[nameof(Path)] = Path;\n            description.Properties[nameof(Domain)] = Domain;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/AntiForgeryTokenAttribute.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Security.AntiForgery\n{\n    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]\n    public class AntiForgeryTokenAttribute : ModifyChainAttribute\n    {\n        public AntiForgeryTokenAttribute()\n        {\n            Salt = Guid.NewGuid().ToString();\n        }\n\n        public string Salt { get; set; }\n\n        public override void Alter(ActionCallBase call)\n        {\n            call.AddBefore(new AntiForgeryNode(Salt));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/AntiForgeryTokenFubuPageExtensions.cs",
    "content": "﻿using FubuMVC.Core.View;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.Security.AntiForgery\n{\n    public static class AntiForgeryTokenFubuPageExtensions\n    {\n        public static HtmlTag AntiForgeryToken(this IFubuPage page, string salt)\n        {\n            var settings = page.Get<AntiForgerySettings>();\n            return AntiForgeryToken(page, salt, settings.Path, settings.Domain);\n        }\n\n        public static HtmlTag AntiForgeryToken(this IFubuPage page, string salt, string path, string domain)\n        {\n            var antiForgeryService = page.Get<IAntiForgeryService>();\n            AntiForgeryData cookieToken = antiForgeryService.SetCookieToken(path, domain);\n            FormToken formToken = antiForgeryService.GetFormToken(cookieToken, salt);\n\n            return new HiddenTag().Name(formToken.Name).Value(formToken.TokenString);\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/AntiForgeryTokenProvider.cs",
    "content": "﻿using System;\nusing System.Security.Cryptography;\nusing System.Text;\n\nnamespace FubuMVC.Core.Security.AntiForgery\n{\n    public class AntiForgeryTokenProvider : IAntiForgeryTokenProvider\n    {\n        private const string AntiForgeryTokenFieldName = \"__RequestVerificationToken\";\n        private const int TokenLength = 0x10;\n        private readonly RNGCryptoServiceProvider _rngc = new RNGCryptoServiceProvider();\n\n        public string GetTokenName()\n        {\n            return GetTokenName(null);\n        }\n\n        public string GetTokenName(string appPath)\n        {\n            if (String.IsNullOrEmpty(appPath))\n            {\n                return AntiForgeryTokenFieldName;\n            }\n            return AntiForgeryTokenFieldName + \"_\" + Base64EncodedPath(appPath);\n        }\n\n        public AntiForgeryData GenerateToken()\n        {\n            string tokenString = GenerateRandomTokenString();\n            return new AntiForgeryData\n            {\n                Value = tokenString\n            };\n        }\n\n        public string Base64EncodedPath(string appPath)\n        {\n            byte[] rawBytes = Encoding.UTF8.GetBytes(appPath);\n            string base64String = Convert.ToBase64String(rawBytes);\n\n            return base64String.Replace('+', '.').Replace('/', '-').Replace('=', '_');\n        }\n\n        private string GenerateRandomTokenString()\n        {\n            var tokenBytes = new byte[TokenLength];\n            _rngc.GetBytes(tokenBytes);\n\n            string token = Convert.ToBase64String(tokenBytes);\n            return token;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/AntiForgeryValidator.cs",
    "content": "using System;\nusing System.Threading;\nusing System.Web;\nusing FubuCore;\nusing FubuCore.Binding;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Http.Cookies;\nusing FubuMVC.Core.Runtime.Files;\n\nnamespace FubuMVC.Core.Security.AntiForgery\n{\n    public class AntiForgeryValidator : IAntiForgeryValidator\n    {\n        private readonly ICookies _cookies;\n        private readonly IFubuApplicationFiles _fubuApplicationFiles;\n        private readonly IRequestData _requestData;\n        private readonly IAntiForgerySerializer _serializer;\n        private readonly IAntiForgeryTokenProvider _tokenProvider;\n\n        public AntiForgeryValidator(IAntiForgeryTokenProvider tokenProvider, IAntiForgerySerializer serializer,\n            ICookies cookies, IFubuApplicationFiles fubuApplicationFiles,\n            IRequestData requestData)\n        {\n            _tokenProvider = tokenProvider;\n            _serializer = serializer;\n            _cookies = cookies;\n            _fubuApplicationFiles = fubuApplicationFiles;\n            _requestData = requestData;\n        }\n\n        public bool Validate(string salt)\n        {\n            var applicationPath = _fubuApplicationFiles.RootPath;\n            var fieldName = _tokenProvider.GetTokenName();\n            var cookieName = _tokenProvider.GetTokenName(applicationPath);\n\n            var cookie = _cookies.Get(cookieName);\n            if (cookie == null || string.IsNullOrEmpty(cookie.Value))\n            {\n                return false;\n            }\n\n            var cookieToken = _serializer.Deserialize(HttpUtility.UrlDecode(cookie.Value));\n\n            var formValue = _requestData.ValuesFor(RequestDataSource.Header).Get(fieldName) as string\n                            ??\n                            _requestData.ValuesFor(RequestDataSource.Request).Get(fieldName) as string;\n\n            if (formValue.IsEmpty())\n            {\n                return false;\n            }\n\n            var formToken = _serializer.Deserialize(formValue);\n\n            if (!string.Equals(cookieToken.Value, formToken.Value, StringComparison.Ordinal))\n            {\n                return false;\n            }\n\n            var currentUsername = AntiForgeryData.GetUsername(Thread.CurrentPrincipal);\n\n            if (!string.Equals(formToken.Username, currentUsername, StringComparison.OrdinalIgnoreCase))\n            {\n                return false;\n            }\n\n            if (!string.Equals(salt ?? string.Empty, formToken.Salt, StringComparison.Ordinal))\n            {\n                return false;\n            }\n\n            return true;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/BinaryAntiForgerySerializer.cs",
    "content": "using System;\nusing System.IO;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Security.AntiForgery\n{\n    public class BinaryAntiForgerySerializer : IAntiForgerySerializer\n    {\n        private readonly IAntiForgeryEncoder _encoder;\n\n        public BinaryAntiForgerySerializer(IAntiForgeryEncoder encoder)\n        {\n            _encoder = encoder;\n        }\n\n        public virtual AntiForgeryData Deserialize(string serializedToken)\n        {\n            try\n            {\n                using (var stream = new MemoryStream(_encoder.Decode(serializedToken)))\n                using (var reader = new BinaryReader(stream))\n                {\n                    return new AntiForgeryData\n                    {\n                        Salt = reader.ReadString(),\n                        Value = reader.ReadString(),\n                        CreationDate = new DateTime(reader.ReadInt64()),\n                        Username = reader.ReadString()\n                    };\n                }\n            }\n            catch (Exception ex)\n            {\n                throw new FubuException(5001, ex, \"Failed to deserialize AntiForgery Token\");\n            }\n        }\n\n        public virtual string Serialize(AntiForgeryData token)\n        {\n            using (var stream = new MemoryStream())\n            using (var writer = new BinaryWriter(stream))\n            {\n                writer.Write(token.Salt);\n                writer.Write(token.Value);\n                writer.Write(token.CreationDate.Ticks);\n                writer.Write(token.Username);\n\n                return _encoder.Encode(stream.ToArray());\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/FormToken.cs",
    "content": "﻿namespace FubuMVC.Core.Security.AntiForgery\n{\n    public class FormToken\n    {\n        public string Name { get; set; }\n        public string TokenString { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/IAntiForgeryEncoder.cs",
    "content": "namespace FubuMVC.Core.Security.AntiForgery\n{\n    public interface IAntiForgeryEncoder\n    {\n        byte[] Decode(string value);\n        string Encode(byte[] bytes);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/IAntiForgerySerializer.cs",
    "content": "﻿namespace FubuMVC.Core.Security.AntiForgery\n{\n    public interface IAntiForgerySerializer\n    {\n        AntiForgeryData Deserialize(string serializedToken);\n        string Serialize(AntiForgeryData token);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/IAntiForgeryService.cs",
    "content": "﻿namespace FubuMVC.Core.Security.AntiForgery\n{\n    public interface IAntiForgeryService\n    {\n        AntiForgeryData SetCookieToken(string path, string domain);\n        FormToken GetFormToken(AntiForgeryData token, string salt);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/IAntiForgeryTokenProvider.cs",
    "content": "namespace FubuMVC.Core.Security.AntiForgery\n{\n    public interface IAntiForgeryTokenProvider\n    {\n        string GetTokenName();\n        string GetTokenName(string appPath);\n        AntiForgeryData GenerateToken();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/IAntiForgeryValidator.cs",
    "content": "﻿namespace FubuMVC.Core.Security.AntiForgery\n{\n    public interface IAntiForgeryValidator\n    {\n        bool Validate(string salt);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/AntiForgery/MachineKeyAntiForgeryEncoder.cs",
    "content": "using System;\nusing System.Text;\nusing System.Web.Security;\n\nnamespace FubuMVC.Core.Security.AntiForgery\n{\n    public class MachineKeyAntiForgeryEncoder : IAntiForgeryEncoder\n    {\n        public byte[] Decode(string value)\n        {\n#pragma warning disable 618\n            return MachineKey.Decode(Base64ToHex(value), MachineKeyProtection.All);\n#pragma warning restore 618\n        }\n\n        public string Encode(byte[] bytes)\n        {\n#pragma warning disable 618\n            return HexToBase64(MachineKey.Encode(bytes, MachineKeyProtection.All).ToUpperInvariant());\n#pragma warning restore 618\n        }\n\n        private static string Base64ToHex(string base64)\n        {\n            var builder = new StringBuilder(base64.Length*4);\n            foreach (byte b in Convert.FromBase64String(base64))\n            {\n                builder.Append(HexDigit(b >> 4));\n                builder.Append(HexDigit(b & 0x0F));\n            }\n            string result = builder.ToString();\n            return result;\n        }\n\n        private static char HexDigit(int value)\n        {\n            return (char) (value > 9 ? value + '7' : value + '0');\n        }\n\n        private static int HexValue(char digit)\n        {\n            return digit > '9' ? digit - '7' : digit - '0';\n        }\n\n        private static string HexToBase64(string hex)\n        {\n            int size = hex.Length/2;\n            var bytes = new byte[size];\n            for (int idx = 0; idx < size; idx++)\n            {\n                bytes[idx] = (byte) ((HexValue(hex[idx*2]) << 4) + HexValue(hex[idx*2 + 1]));\n            }\n            string result = Convert.ToBase64String(bytes);\n            return result;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/AjaxAuthenticationRedirect.cs",
    "content": "﻿using System.Net;\nusing FubuCore.Binding;\nusing FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Urls;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n\tpublic class AjaxAuthenticationRedirect : IAuthenticationRedirect\n\t{\n\t\tprivate readonly IRequestData _data;\n\t\tprivate readonly IOutputWriter _outputWriter;\n\t\tprivate readonly IUrlRegistry _urls;\n\n\t\tpublic AjaxAuthenticationRedirect(IRequestData data, IOutputWriter outputWriter, IUrlRegistry urls)\n\t\t{\n\t\t\t_data = data;\n\t\t\t_outputWriter = outputWriter;\n\t\t\t_urls = urls;\n\t\t}\n\n\t\tpublic bool Applies()\n\t\t{\n\t\t\treturn _data.IsAjaxRequest();\n\t\t}\n\n\t\tpublic FubuContinuation Redirect()\n\t\t{\n\t\t\tvar continuation = BuildAjaxContinuation();\n\n\t\t    _outputWriter.Write(MimeType.Json, JsonUtil.ToJson(continuation.ToDictionary()));\n\n\t\t    return FubuContinuation.EndWithStatusCode(HttpStatusCode.Unauthorized);\n\t\t}\n\n\t    public AjaxContinuation BuildAjaxContinuation()\n\t    {\n\t        var url = _urls.UrlFor(new LoginRequest(), \"GET\");\n\t        var continuation = new AjaxContinuation {Success = false, NavigatePage = url};\n\t        return continuation;\n\t    }\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/ApplyAuthenticationPolicy.cs",
    "content": "using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Security.Authorization;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    [Description(\"Applies the built in Authentication to chains\")]\n    public class ApplyAuthenticationPolicy : IConfigurationAction\n    {\n        public void Configure(BehaviorGraph graph)\n        {\n            var settings = graph.Settings.Get<AuthenticationSettings>();\n\n            graph.Chains.OfType<RoutedChain>()\n                .Where(x => !settings.ShouldBeExcluded(x))\n                .Each(x => x.Prepend(new AuthenticationFilterNode()));\n        }\n\n        public static bool IsMarkedAsNotAuthenticated(RoutedChain chain)\n        {\n            return chain.Calls.Any(ActionIsExempted);\n        }\n\n        public static bool ActionIsExempted(ActionCall call)\n        {\n            if (call.HasAttribute<NotAuthenticatedAttribute>()) return true;\n\n            if (IsPassThrough(call)) return true;\n\n            if (call.InputType() != null && call.InputType().HasAttribute<NotAuthenticatedAttribute>())\n            {\n                return true;\n            }\n\n            return false;\n        }\n\n        public static bool IsPassThrough(ActionCall call)\n        {\n            if (call.HasAttribute<PassThroughAuthenticationAttribute>()) return true;\n\n            if (call.InputType() != null && call.InputType().HasAttribute<PassThroughAuthenticationAttribute>())\n            {\n                return true;\n            }\n\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Auditing/AuditMessage.cs",
    "content": "namespace FubuMVC.Core.Security.Authentication.Auditing\n{\n    public class AuditMessage\n    {\n        public string UserName { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Auditing/ILoginAuditor.cs",
    "content": "﻿namespace FubuMVC.Core.Security.Authentication.Auditing\n{\n    public interface ILoginAuditor\n    {\n        void Audit(LoginRequest request); // This is responsible for storing login status\n\n        void ApplyHistory(LoginRequest request);\n        void Audit<T>(T log) where T : AuditMessage;\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Auditing/LoginFailure.cs",
    "content": "namespace FubuMVC.Core.Security.Authentication.Auditing\n{\n    public class LoginFailure : AuditMessage\n    {\n        // TODO -- add IP address & probably other stuff\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Auditing/LoginSuccess.cs",
    "content": "namespace FubuMVC.Core.Security.Authentication.Auditing\n{\n    public class LoginSuccess : AuditMessage\n    {\n        // TODO -- add IP address & probably other stuff\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Auditing/NulloLoginAuditor.cs",
    "content": "using System.Diagnostics;\n\nnamespace FubuMVC.Core.Security.Authentication.Auditing\n{\n    public class NulloLoginAuditor : ILoginAuditor\n    {\n        public void Audit(LoginRequest request)\n        {\n            Debug.WriteLine(request);\n        }\n\n        public void ApplyHistory(LoginRequest request)\n        {\n            // do nothing\n        }\n\n        public void Audit<T>(T log) where T : AuditMessage\n        {\n            Debug.WriteLine(log);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/AuthResult.cs",
    "content": "using FubuMVC.Core.Continuations;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public class AuthResult\n    {\n        public bool Success;\n        public FubuContinuation Continuation;\n\n        public bool IsDeterministic()\n        {\n            return Success || Continuation != null;\n        }\n\n        public static AuthResult Failed()\n        {\n            return new AuthResult{Success = false};\n        }\n\n        public static AuthResult Successful()\n        {\n            return new AuthResult{Success = true};\n        }\n\n        public override string ToString()\n        {\n            if (Continuation != null) return string.Format(\"Success: {0}, Continuation: {1}\", Success, Continuation);\n\n            return \"Success: \" + Success;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/AuthenticationChain.cs",
    "content": "using FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public class AuthenticationChain : Chain<AuthenticationNode, AuthenticationChain>\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/AuthenticationFilter.cs",
    "content": "using FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Security.Authorization;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public class AuthenticationFilter\n    {\n        private readonly IAuthenticationService _authentication;\n        private readonly ICurrentChain _currentChain;\n        private readonly SecuritySettings _settings;\n        private readonly IAuthenticationRedirector _redirector;\n\n        public AuthenticationFilter(IAuthenticationRedirector redirector, IAuthenticationService authentication, ICurrentChain currentChain, SecuritySettings settings)\n        {\n            _redirector = redirector;\n            _authentication = authentication;\n            _currentChain = currentChain;\n            _settings = settings;\n        }\n\n        public FubuContinuation Authenticate()\n        {\n            if (!_settings.AuthenticationEnabled) return FubuContinuation.NextBehavior();\n\n            if (_currentChain.IsInPartial()) return FubuContinuation.NextBehavior();\n\n            var result = _authentication.TryToApply();\n            if (result.Continuation != null) return result.Continuation;\n\n            return result.Success ? FubuContinuation.NextBehavior() : _redirector.Redirect();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/AuthenticationFilterNode.cs",
    "content": "using System.Reflection;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public class AuthenticationFilterNode : ActionCallBase\n    {\n        public new static MethodInfo Method = ReflectionHelper.GetMethod<AuthenticationFilter>(x => x.Authenticate());\n\n        public AuthenticationFilterNode() : base(typeof (AuthenticationFilter), Method)\n        {\n        }\n\n        public override BehaviorCategory Category\n        {\n            get { return BehaviorCategory.Authentication; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/AuthenticationIsConfigured.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public class AuthenticationIsConfigured : IActivator\n    {\n        private readonly IEnumerable<IAuthenticationStrategy> _strategies;\n\n        public AuthenticationIsConfigured(IEnumerable<IAuthenticationStrategy> strategies)\n        {\n            _strategies = strategies;\n        }\n\n        public void Activate(IActivationLog log, IPerfTimer timer)\n        {\n            if (!_strategies.Any())\n            {\n                log.MarkFailure(\"There are no IAuthenticationStrategy services registered.  Either register an IAuthenticationStrategy or remove FubuMVC.Authentication from your application\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/AuthenticationNode.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuMVC.Core.Registration.Nodes;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public class AuthenticationNode : Node<AuthenticationNode, AuthenticationChain>, IContainerModel\n    {\n        private readonly Type _authType;\n\n        public AuthenticationNode(Type authType)\n        {\n            if (!authType.CanBeCastTo<IAuthenticationStrategy>())\n            {\n                throw new ArgumentOutOfRangeException(\"authType\", \"authType must be assignable to IAuthenticationStrategy\");\n            }\n\n            _authType = authType;\n        }\n\n        public Type AuthType\n        {\n            get { return _authType; }\n        }\n\n        Instance IContainerModel.ToInstance()\n        {\n            var instance = new ConfiguredInstance(_authType);\n\n            configure(instance);\n\n            return instance;\n        }\n\n        protected virtual void configure(IConfiguredInstance instance)\n        {\n            // Nothing\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/AuthenticationRedirector.cs",
    "content": "using System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Continuations;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public class AuthenticationRedirector : IAuthenticationRedirector\n    {\n        private readonly RedirectLibrary _library;\n        private readonly IServiceLocator _services;\n\n        public AuthenticationRedirector(RedirectLibrary library, IServiceLocator services)\n        {\n            _library = library;\n            _services = services;\n        }\n\n        public FubuContinuation Redirect()\n        {\n            var redirector = _library.GetRedirectTypes()\n                                     .Select(x =>  _services.GetInstance(x).As<IAuthenticationRedirect>())\n                                     .FirstOrDefault(x => x.Applies());\n\n            return redirector.Redirect();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/AuthenticationService.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Security.Authentication.Auditing;\nusing FubuMVC.Core.Security.Authentication.Cookies;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public class AuthenticationService : IAuthenticationService\n    {\n        private readonly ILogger _logger;\n        private readonly IEnumerable<IAuthenticationStrategy> _strategies;\n        private readonly ILoginAuditor _auditor;\n        private readonly ILoginCookies _cookies;\n\n        public AuthenticationService(\n            ILogger logger,\n            IEnumerable<IAuthenticationStrategy> strategies,\n            ILoginAuditor auditor,\n            ILoginCookies cookies)\n        {\n            if (!strategies.Any())\n            {\n                throw new ArgumentOutOfRangeException(\"strategies\", \"There must be at least one IAuthenticationStrategy\");\n            }\n\n            _logger = logger;\n            _strategies = strategies;\n            _auditor = auditor;\n            _cookies = cookies;\n        }\n\n        public AuthResult TryToApply()\n        {\n            foreach (var strategy in _strategies)\n            {\n                var result = strategy.TryToApply();\n                _logger.DebugMessage(new TriedToApplyStrategy { Result = result, Strategy = strategy });\n                \n                if (result.IsDeterministic())\n                {\n                    return result;\n                }\n            }\n\n            _logger.DebugMessage(new NonDeterministicResult());\n            return new AuthResult{Success = false};\n        }\n\n        public bool Authenticate(LoginRequest request)\n        {\n            return Authenticate(request, _strategies);\n        }\n\n        public bool Authenticate(LoginRequest request, IEnumerable<IAuthenticationStrategy> strategies)\n        {\n            _auditor.ApplyHistory(request);\n            var authResult = strategies.Any(x => x.Authenticate(request));\n            _auditor.Audit(request);\n            return authResult;\n        }\n\n        public void SetRememberMeCookie(LoginRequest request)\n        {\n            if (request.RememberMe && request.UserName.IsNotEmpty())\n            {\n                _cookies.User.Value = request.UserName;\n            }\n        }\n    }\n\n    public class NonDeterministicResult : LogTopic\n    {\n        public override string ToString()\n        {\n            return \"No authentication strategies were able to make a deterministic authentication result\";\n        }\n    }\n\n    public class TriedToApplyStrategy : LogTopic, DescribesItself\n    {\n        public AuthResult Result { get; set; }\n        public IAuthenticationStrategy Strategy { get; set; }\n\n        public override string ToString()\n        {\n            return \"Authentication returned {0}\".ToFormat(Result);\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = \"Trying to apply strategy {0}\".ToFormat(Strategy);\n            description.ShortDescription = ToString();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/AuthenticationServiceRegistry.cs",
    "content": "using System.Web.Caching;\nusing FubuCore.Util;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Security.Authentication.Auditing;\nusing FubuMVC.Core.Security.Authentication.Cookies;\nusing FubuMVC.Core.Security.Authentication.Membership;\nusing FubuMVC.Core.Security.Authentication.Tickets;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public class AuthenticationServiceRegistry : ServiceRegistry\n    {\n        public AuthenticationServiceRegistry()\n        {\n            SetServiceIfNone<IAuthenticationSession, TicketAuthenticationSession>();\n\n            // TODO -- Break out the \"Basic\" stuff into a separate registry\n            SetServiceIfNone<IPrincipalContext, ThreadPrincipalContext>();\n            SetServiceIfNone<ITicketSource, CookieTicketSource>();\n            SetServiceIfNone<IEncryptor, Encryptor>();\n            SetServiceIfNone<ILoginCookies, BasicFubuLoginCookies>();\n            SetServiceIfNone<ILoginCookieService, LoginCookieService>();\n            SetServiceIfNone<ILoginSuccessHandler, LoginSuccessHandler>();\n            SetServiceIfNone<ILogoutSuccessHandler, LogoutSuccessHandler>();\n            SetServiceIfNone<IAuthenticationRedirector, AuthenticationRedirector>();\n            SetServiceIfNone<IAuthenticationService, AuthenticationService>();\n            SetServiceIfNone<IPasswordHash, PasswordHash>();\n            SetServiceIfNone<ILockedOutRule, LockedOutRule>();\n\n            AddService<IActivator, AuthenticationIsConfigured>();\n\n            SetServiceIfNone<ILoginAuditor, NulloLoginAuditor>();\n\n            SetServiceIfNone<IMembershipRepository, InMemoryMembershipRepository>().Singleton();\n        }\n    }\n\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/AuthenticationSettings.cs",
    "content": "using System;\nusing System.Linq;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.Diagnostics;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Security.Authentication.Endpoints;\nusing FubuMVC.Core.Security.Authentication.Membership;\nusing FubuMVC.Core.Security.Authentication.Saml2;\nusing FubuMVC.Core.Security.Authentication.Saml2.Validation;\nusing FubuMVC.Core.Security.Authorization;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public class AuthenticationSettings : IFeatureSettings, DescribesItself\n    {\n        private Func<RoutedChain, bool> _exclusions = c => false;\n\n        public AuthenticationSettings()\n        {\n            ExpireInMinutes = 180;\n            SlidingExpiration = true;\n\n            MaximumNumberOfFailedAttempts = 3;\n            CooloffPeriodInMinutes = 60;\n            MembershipEnabled = MembershipStatus.Enabled;\n\n            Strategies = new AuthenticationChain();\n        }\n\n        public void Describe(Description description)\n        {\n            description.ShortDescription = \"Authentication Configuration for the Running Application\";\n            description.Properties[nameof(Enabled)] = Enabled.ToString();\n            description.Properties[nameof(ExcludeDiagnostics)] = ExcludeDiagnostics.ToString();\n            description.Properties[nameof(ExpireInMinutes)] = ExpireInMinutes.ToString();\n            description.Properties[nameof(SlidingExpiration)] = SlidingExpiration.ToString();\n            description.Properties[nameof(MaximumNumberOfFailedAttempts)] = MaximumNumberOfFailedAttempts.ToString();\n            description.Properties[nameof(MembershipEnabled)] = MembershipEnabled.ToString();\n            description.Properties[nameof(NeverExpires)] = NeverExpires.ToString();\n\n            description.AddChild(\"Saml2\", Saml2);\n\n            description.AddList(\"Strategies\", Strategies);\n        }\n\n        public Saml Saml2 { get; set; } = new Saml();\n\n\n        public bool ExcludeDiagnostics { get; set; }\n\n\n        public bool Enabled { get; set; }\n\n        /// <summary>\n        ///     Register and orders the IAuthenticationStrategy's applied to this\n        ///     FubuMVC application\n        /// </summary>\n        public AuthenticationChain Strategies { get; }\n\n        public Func<RoutedChain, bool> ExcludeChains\n        {\n            get { return _exclusions; }\n            set\n            {\n                if (value == null)\n                {\n                    _exclusions = c => false;\n                }\n\n\n                _exclusions = value;\n            }\n        }\n\n        public MembershipStatus MembershipEnabled { get; set; }\n\n\n        public bool SlidingExpiration { get; set; }\n        public int ExpireInMinutes { get; set; }\n\n        public int MaximumNumberOfFailedAttempts { get; set; }\n        public int CooloffPeriodInMinutes { get; set; }\n\n        // *should* only be for testing\n        public bool NeverExpires { get; set; }\n\n        public bool ShouldBeExcluded(RoutedChain chain)\n        {\n            if (chain.Calls.Any(x => x.HasAttribute<NotAuthenticatedAttribute>())) return true;\n            if (chain.Calls.Any(x => x.HasAttribute<PassThroughAuthenticationAttribute>())) return true;\n\n            if (ExcludeDiagnostics && chain is DiagnosticChain) return true;\n\n            return _exclusions(chain);\n        }\n\n        void IFeatureSettings.Apply(FubuRegistry registry)\n        {\n            if (!Enabled) return;\n\n            registry.Actions.IncludeType<LoginController>();\n            registry.Actions.IncludeType<LogoutController>();\n\n            registry.Services.IncludeRegistry<AuthenticationServiceRegistry>();\n\n            registry.Policies.Global.Add(new ApplyAuthenticationPolicy());\n\n            if (MembershipEnabled == MembershipStatus.Enabled)\n            {\n                if (!Strategies.OfType<MembershipNode>().Any())\n                {\n                    Strategies.InsertFirst(new MembershipNode());\n                }\n            }\n\n            if (Saml2.Enabled)\n            {\n                Strategies.InsertFirst(new AuthenticationNode(typeof(SamlAuthenticationStrategy)));\n                registry.Services.IncludeRegistry<Saml2ServicesRegistry>();\n\n\n                if (Saml2.RequireSignature)\n                {\n                    registry.Services.AddService<ISamlValidationRule, SignatureIsRequired>();\n                }\n\n                if (Saml2.RequireCertificate)\n                {\n                    registry.Services.AddService<ISamlValidationRule, CertificateValidation>();\n                }\n\n                if (Saml2.EnforceConditionalTimeSpan)\n                {\n                    registry.Services.AddService<ISamlValidationRule, ConditionTimeFrame>();\n                }\n            }\n\n            foreach (IContainerModel strategy in Strategies)\n            {\n                var instance = strategy.ToInstance();\n\n                registry.Services.AddService(typeof (IAuthenticationStrategy), instance);\n            }\n\n\n        }\n\n        public class Saml : DescribesItself\n        {\n            public Saml()\n            {\n                RequireCertificate = true;\n                RequireSignature = true;\n                EnforceConditionalTimeSpan = true;\n            }\n\n            public bool RequireSignature { get; set; }\n            public bool RequireCertificate { get; set; }\n            public bool EnforceConditionalTimeSpan { get; set; }\n\n            public bool Enabled { get; set; }\n            public void Describe(Description description)\n            {\n                description.ShortDescription = \"Saml2 Configuration\";\n                description.Properties[nameof(Enabled)] = Enabled.ToString();\n                description.Properties[nameof(RequireCertificate)] = RequireCertificate.ToString();\n                description.Properties[nameof(RequireSignature)] = RequireSignature.ToString();\n                description.Properties[nameof(EnforceConditionalTimeSpan)] = EnforceConditionalTimeSpan.ToString();\n            }\n        }\n\n\n    }\n\n\n\n    public enum MembershipStatus\n    {\n        Enabled,\n        Disabled\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/BasicAuthentication.cs",
    "content": "using FubuCore;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public class BasicAuthentication : IAuthenticationStrategy\n    {\n        private readonly IAuthenticationSession _session;\n        private readonly IPrincipalContext _context;\n        private readonly IPrincipalBuilder _builder;\n        private readonly ICredentialsAuthenticator _authenticator;\n        private readonly ILockedOutRule _lockedOutRule;\n\n        public BasicAuthentication(IAuthenticationSession session, IPrincipalContext context, IPrincipalBuilder builder, ICredentialsAuthenticator authenticator, ILockedOutRule lockedOutRule)\n        {\n            _session = session;\n            _context = context;\n            _builder = builder;\n            _authenticator = authenticator;\n            _lockedOutRule = lockedOutRule;\n        }\n\n        public AuthResult TryToApply()\n        {\n            string userName = _session.PreviouslyAuthenticatedUser();\n            if (userName.IsNotEmpty())\n            {\n                _session.MarkAccessed();\n                var principal = _builder.Build(userName);\n                _context.Current = principal;\n\n                return new AuthResult{Success = true};\n            }\n\n            return new AuthResult{Success = false};;\n        }\n\n        public bool Authenticate(LoginRequest request)\n        {\n            if (_lockedOutRule.IsLockedOut(request) == LoginStatus.LockedOut)\n            {\n                request.Status = LoginStatus.LockedOut;\n            }\n            else if (_authenticator.AuthenticateCredentials(request))\n            {\n                request.Status = LoginStatus.Succeeded;\n                _session.MarkAuthenticated(request.UserName);\n            }\n            else\n            {\n                request.Status = LoginStatus.Failed;\n                request.NumberOfTries++;\n\n                _lockedOutRule.ProcessFailure(request);\n            }\n\n            return request.Status == LoginStatus.Succeeded;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Cookies/BasicFubuLoginCookies.cs",
    "content": "using FubuCore.Dates;\nusing FubuMVC.Core.Http.Cookies;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Security.Authentication.Cookies\n{\n    public class BasicFubuLoginCookies : ILoginCookies\n    {\n        public static readonly string FubuRemember = \"FubuRememberMe\";\n\n        private readonly ICookies _cookies;\n        private readonly ISystemTime _time;\n        private readonly IOutputWriter _writer;\n\n        public BasicFubuLoginCookies(ISystemTime time, ICookies cookies, IOutputWriter writer)\n        {\n            _time = time;\n            _cookies = cookies;\n            _writer = writer;\n        }\n\n        public ICookieValue User\n        {\n            get { return new CookieValue(FubuRemember, _time, _cookies, _writer); }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Cookies/CookieSettings.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.Security.Authentication.Cookies\n{\n    public class CookieSettings\n    {\n        public static readonly string DefaultCookieName = \"FubuAuthTicket\";\n\n        public CookieSettings()\n        {\n            Name = DefaultCookieName;\n            ExpirationInDays = 30;\n            Path = \"/\";\n        }\n\n        public string Name { get; set; }\n        public string Path { get; set; }\n        public string Domain { get; set; }\n\n        public bool Secure { get; set; }\n        public bool HttpOnly { get; set; }\n\n        public int ExpirationInDays { get; set; }\n\n        public DateTime ExpirationFor(DateTime date)\n        {\n            return date.AddDays(ExpirationInDays);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Cookies/CookieTicketSource.cs",
    "content": "using System;\nusing System.Web;\nusing FubuCore.Dates;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Http.Cookies;\nusing FubuMVC.Core.Security.Authentication.Tickets;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.Security.Authentication.Cookies\n{\n    public class CookieTicketSource : ITicketSource\n    {\n        private readonly ISystemTime _systemTime;\n        private readonly IEncryptor _encryptor;\n        private readonly ILoginCookieService _cookies;\n        private readonly ILogger _logger;\n\n        public CookieTicketSource(ISystemTime systemTime, IEncryptor encryptor, ILoginCookieService cookies, ILogger logger)\n        {\n            _systemTime = systemTime;\n            _encryptor = encryptor;\n            _cookies = cookies;\n            _logger = logger;\n        }\n\n        public AuthenticationTicket CurrentTicket()\n        {\n            try\n            {\n                var cookie = _cookies.Current();\n                if (cookie != null)\n                {\n                    var json = DecodeJson(cookie);\n                    return JsonUtil.Get<AuthenticationTicket>(json);\n                }\n\n                return null;\n            }\n            catch (Exception ex)\n            {\n                _logger.Error(\"failed while trying to retrieve the user cookie\", ex);\n                return null;\n            }\n        }\n\n        public string EncodeJson(AuthenticationTicket ticket)\n        {\n            var value = _encryptor.Encrypt(JsonUtil.ToJson(ticket));\n            return HttpUtility.UrlEncode(value);\n        }\n\n        public string DecodeJson(Cookie cookie)\n        {\n            var json = cookie.Value;\n            var value = HttpUtility.UrlDecode(json);\n\n            return _encryptor.Decrypt(value);\n        }\n\n        public void Persist(AuthenticationTicket ticket)\n        {\n            var cookie = _cookies.CreateCookie(_systemTime);\n            cookie.Value = EncodeJson(ticket);\n\n            _cookies.Update(cookie);\n        }\n\n        public void Delete()\n        {\n            var cookie = _cookies.CreateCookie(_systemTime);\n            cookie.Expires = _systemTime.UtcNow().AddYears(-1);\n\n            _cookies.Update(cookie);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Cookies/ILoginCookieService.cs",
    "content": "﻿using FubuCore.Dates;\nusing FubuMVC.Core.Http.Cookies;\n\nnamespace FubuMVC.Core.Security.Authentication.Cookies\n{\n    public interface ILoginCookieService\n    {\n        Cookie Current();\n        Cookie CreateCookie(ISystemTime clock);\n\n        void Update(Cookie cookie);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Cookies/ILoginCookies.cs",
    "content": "using FubuMVC.Core.Http.Cookies;\n\nnamespace FubuMVC.Core.Security.Authentication.Cookies\n{\n    public interface ILoginCookies\n    {\n        ICookieValue User { get; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Cookies/LoginCookieService.cs",
    "content": "using FubuCore;\nusing FubuCore.Dates;\nusing FubuMVC.Core.Http.Cookies;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Security.Authentication.Cookies\n{\n    public class LoginCookieService : ILoginCookieService\n    {\n        private readonly CookieSettings _settings;\n        private readonly ICookies _cookies;\n        private readonly IOutputWriter _writer;\n\n        public LoginCookieService(CookieSettings settings, ICookies cookies, IOutputWriter writer)\n        {\n            _settings = settings;\n            _cookies = cookies;\n            _writer = writer;\n        }\n\n        public Cookie Current()\n        {\n            return _cookies.Get(_settings.Name);\n        }\n\n        public Cookie CreateCookie(ISystemTime clock)\n        {\n            var cookie = new Cookie(_settings.Name)\n            {\n                HttpOnly = _settings.HttpOnly,\n                Secure = _settings.Secure,\n                Domain = _settings.Domain\n            };\n\n            if(_settings.Path.IsNotEmpty())\n            {\n                cookie.Path = _settings.Path;\n            }\n\n            cookie.Expires = _settings.ExpirationFor(clock.UtcNow());\n\n            return cookie;\n        }\n\n        public void Update(Cookie cookie)\n        {\n            _writer.AppendCookie(cookie);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/DefaultAuthenticationRedirect.cs",
    "content": "using FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Http;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n\tpublic class DefaultAuthenticationRedirect : IAuthenticationRedirect\n\t{\n\t\tprivate readonly IHttpRequest _currentRequest;\n\n\t\tpublic DefaultAuthenticationRedirect(IHttpRequest currentRequest)\n\t\t{\n\t\t\t_currentRequest = currentRequest;\n\t\t}\n\n\t\tpublic bool Applies()\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic FubuContinuation Redirect()\n\t\t{\n\t\t\treturn FubuContinuation.RedirectTo(new LoginRequest\n\t\t\t{\n\t\t\t\tUrl = _currentRequest.RelativeUrl()\n\t\t\t}, \"GET\");\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/DefaultLoginRequestWriter.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Security.Authentication.Endpoints;\nusing FubuMVC.Core.UI;\nusing FubuMVC.Core.Urls;\nusing FubuMVC.Core.View;\nusing HtmlTags;\nusing HtmlTags.Extended.Attributes;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public class DefaultLoginRequestWriter : IMediaWriter<LoginRequest>\n    {\n        public virtual HtmlDocument BuildView(IUrlRegistry urls, IOutputWriter writer, LoginRequest request)\n        {\n            // TODO -- Revisit all of this when we get HTML conventions everywhere\n            var view = new HtmlDocument();\n            var form = new FormTag(urls.UrlFor<LoginRequest>(\"POST\"));\n            form.Append(new HtmlTag(\"legend\").Text(LoginKeys.Login));\n\n            if (request.Message.IsNotEmpty())\n            {\n                form.Append(new HtmlTag(\"p\").Text(request.Message).Style(\"color\", \"red\"));\n            }\n\n            form.Append(new TextboxTag(\"UserName\", request.UserName));\n            form.Append(new TextboxTag(\"Password\", request.Password));\n            form.Append(new CheckboxTag(request.RememberMe).Name(\"RememberMe\"));\n\n\n            form.Append(new DivTag().Text(request.Message).Id(\"login-message\"));\n            \n\n\n            form.Append(new HiddenTag().Name(\"Url\").Attr(\"value\", request.Url));\n\n            form.Append(new HtmlTag(\"input\").Attr(\"type\", \"submit\").Attr(\"value\", LoginKeys.Login).Id(\"login-submit\"));\n\n            view.Add(form);\n\n            return view;\n        }\n\n        public Task Write(string mimeType, IFubuRequestContext context, LoginRequest resource)\n        {\n            return context.Writer.Write(mimeType, BuildView(context.Service<IUrlRegistry>(), context.Writer, resource).ToString());\n        }\n\n        public IEnumerable<string> Mimetypes\n        {\n            get { yield return MimeType.Html.Value; }\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Endpoints/LoginController.cs",
    "content": "using FubuCore;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Security.Authentication.Cookies;\nusing FubuMVC.Core.Security.Authorization;\n\nnamespace FubuMVC.Core.Security.Authentication.Endpoints\n{\n    public class LoginController\n    {\n        private readonly ILoginCookies _cookies;\n        private readonly ILoginSuccessHandler _handler;\n        private readonly ILockedOutRule _lockedOutRule;\n        private readonly IAuthenticationService _service;\n\n        public LoginController(ILoginCookies cookies, IAuthenticationService service, ILoginSuccessHandler handler,\n                               ILockedOutRule lockedOutRule)\n        {\n            _cookies = cookies;\n            _service = service;\n            _handler = handler;\n            _lockedOutRule = lockedOutRule;\n        }\n\n        [NotAuthenticated]\n        public FubuContinuation post_login(LoginRequest request)\n        {\n            bool authenticated = _service.Authenticate(request);\n\n            _service.SetRememberMeCookie(request);\n\n            if (authenticated)\n            {\n                return _handler.LoggedIn(request);\n            }\n\n            return FubuContinuation.TransferTo(request, \"GET\");\n        }\n\n        [NotAuthenticated]\n        public LoginRequest get_login(LoginRequest request)\n        {\n            if (request.Status == LoginStatus.NotAuthenticated)\n            {\n                request.Status = _lockedOutRule.IsLockedOut(request);\n            }\n\n            _service.SetRememberMeCookie(request);\n\n            if (request.UserName.IsEmpty())\n            {\n                string remembered = _cookies.User.Value;\n\n                if (remembered.IsNotEmpty())\n                {\n                    request.UserName = remembered;\n                    request.RememberMe = true;\n                }\n            }\n\n            if (request.Status == LoginStatus.LockedOut)\n            {\n                request.Message = LoginKeys.LockedOut.ToString();\n            }\n            else if (request.Status == LoginStatus.Failed && request.Message.IsEmpty())\n            {\n                request.Message = LoginKeys.Unknown.ToString();\n            }\n\n            return request;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Endpoints/LoginKeys.cs",
    "content": "using FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Security.Authentication.Endpoints\n{\n    public class LoginKeys : StringToken\n    {\n        public static readonly LoginKeys LockedOut = new LoginKeys(\"This user is locked out because of too many failed login attempts. Try back later.\");\n        public static readonly LoginKeys Failed = new LoginKeys(\"Incorrect credentials.  Attempt {0} of {1}\");\n        public static readonly LoginKeys Unknown = new LoginKeys(\"The credentials supplied are incorrect\");\n        public static readonly LoginKeys Login = new LoginKeys(\"Login\");\n\n        public static readonly LoginKeys LoginWithWindows = new LoginKeys(\"Login with Windows\");\n\n        public static readonly LoginKeys YourUsername = new LoginKeys(\"Your email...\");\n        public static readonly LoginKeys YourPassword = new LoginKeys(\"Your password...\");\n        public static readonly LoginKeys RememberMe = new LoginKeys(\"Remember me on this device\");\n\t\tpublic static readonly LoginKeys ForgotPassword = new LoginKeys(\"Forgot your password?\");\n\t\tpublic static readonly LoginKeys ResetPassword = new LoginKeys(\"Reset it here\");\n\n        protected LoginKeys(string defaultValue)\n            : base(null, defaultValue, namespaceByType: true)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Endpoints/LogoutController.cs",
    "content": "using FubuMVC.Core.Continuations;\n\nnamespace FubuMVC.Core.Security.Authentication.Endpoints\n{\n    public class LogoutController\n    {\n        private readonly IAuthenticationSession _session;\n        private readonly ILogoutSuccessHandler _logoutSuccessHandler;\n\n        public LogoutController(IAuthenticationSession session, ILogoutSuccessHandler logoutSuccessHandler)\n        {\n            _session = session;\n            _logoutSuccessHandler = logoutSuccessHandler;\n        }\n\n        [UrlPattern(\"logout\")]\n        public FubuContinuation Logout(LogoutRequest request)\n        {\n            _session.ClearAuthentication();\n            return _logoutSuccessHandler.LoggedOut();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/IAuthenticationRedirect.cs",
    "content": "﻿using FubuMVC.Core.Continuations;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n\tpublic interface IAuthenticationRedirect\n\t{\n\t\tbool Applies();\n\t\tFubuContinuation Redirect();\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/IAuthenticationRedirector.cs",
    "content": "using FubuMVC.Core.Continuations;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public interface IAuthenticationRedirector\n    {\n        FubuContinuation Redirect();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/IAuthenticationService.cs",
    "content": "using System.Collections.Generic;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public interface IAuthenticationService\n    {\n        AuthResult TryToApply();\n        bool Authenticate(LoginRequest request);\n        bool Authenticate(LoginRequest request, IEnumerable<IAuthenticationStrategy> strategies);\n        void SetRememberMeCookie(LoginRequest request);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/IAuthenticationSession.cs",
    "content": "namespace FubuMVC.Core.Security.Authentication\n{\n    public interface IAuthenticationSession\n    {\n        void MarkAccessed();\n        string PreviouslyAuthenticatedUser();\n        void MarkAuthenticated(string userName);\n        void ClearAuthentication();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/IAuthenticationStrategy.cs",
    "content": "namespace FubuMVC.Core.Security.Authentication\n{\n    public interface IAuthenticationStrategy\n    {\n        AuthResult TryToApply();\n        bool Authenticate(LoginRequest request);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/ICredentialsAuthenticator.cs",
    "content": "namespace FubuMVC.Core.Security.Authentication\n{\n    public interface ICredentialsAuthenticator\n    {\n        bool AuthenticateCredentials(LoginRequest request);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/ILockedOutRule.cs",
    "content": "﻿using FubuCore.Dates;\nusing FubuMVC.Core.Security.Authentication.Endpoints;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public interface ILockedOutRule\n    {\n        LoginStatus IsLockedOut(LoginRequest request);\n        void ProcessFailure(LoginRequest request);\n    }\n\n    public class LockedOutRule : ILockedOutRule\n    {\n        private readonly AuthenticationSettings _settings;\n        private readonly ISystemTime _systemTime;\n\n        public LockedOutRule(AuthenticationSettings settings, ISystemTime systemTime)\n        {\n            _settings = settings;\n            _systemTime = systemTime;\n        }\n\n        public LoginStatus IsLockedOut(LoginRequest request)\n        {\n            if (request.NumberOfTries >= _settings.MaximumNumberOfFailedAttempts)\n            {\n                return LoginStatus.LockedOut;\n            }\n\n            if (request.LockedOutUntil != null)\n            {\n                if (request.LockedOutUntil.Value > _systemTime.UtcNow())\n                {\n                    return LoginStatus.LockedOut;\n                }\n            }\n\n            return LoginStatus.NotAuthenticated;\n        }\n\n        public void ProcessFailure(LoginRequest request)\n        {\n            if (request.LockedOutUntil != null && request.LockedOutUntil.Value <= _systemTime.UtcNow())\n            {\n                request.LockedOutUntil = null;\n            }\n\n            if (IsLockedOut(request) == LoginStatus.LockedOut)\n            {\n                request.Status = LoginStatus.LockedOut;\n                request.Message = LoginKeys.LockedOut.ToString();\n                request.NumberOfTries = 0; // This is important for the unlocking later\n\n                if (request.LockedOutUntil == null)\n                {\n                    request.LockedOutUntil = _systemTime.UtcNow().AddMinutes(_settings.CooloffPeriodInMinutes);\n                }\n            }\n            else\n            {\n                request.Message = LoginKeys.Failed.ToFormat(request.NumberOfTries,\n                                                            _settings.MaximumNumberOfFailedAttempts);\n            }\n        }\n\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/ILoginSuccessHandler.cs",
    "content": "﻿using FubuMVC.Core.Continuations;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public interface ILoginSuccessHandler\n    {\n        FubuContinuation LoggedIn(LoginRequest request);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/ILogoutSuccessHandler.cs",
    "content": "﻿using FubuMVC.Core.Continuations;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public interface ILogoutSuccessHandler\n    {\n        FubuContinuation LoggedOut();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/IPasswordHash.cs",
    "content": "﻿namespace FubuMVC.Core.Security.Authentication\n{\n    public interface IPasswordHash\n    {\n        string CreateHash(string password);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/IPrincipalBuilder.cs",
    "content": "using System.Security.Principal;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public interface IPrincipalBuilder\n    {\n        IPrincipal Build(string userName);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/IPrincipalContext.cs",
    "content": "using System.Security.Principal;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public interface IPrincipalContext\n    {\n        IPrincipal Current\n        {\n            get; set;\n        }\n    }\n\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/LoginRequest.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core.Security.Authorization;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    [NotAuthenticated]\n    public class LoginRequest\n    {\n        private readonly Cache<string, string> _properties = new Cache<string, string>();\n        private string _userName;\n\n        public LoginRequest()\n        {\n            Status = LoginStatus.NotAuthenticated;\n        }\n\n        [QueryString]\n        public string Url { get; set; }\n\n        [QueryString]\n        public string ReturnUrl\n        {\n            set { Url = value; }\n            get { return Url; }\n        }\n\n        public string UserName\n        {\n            get { return _userName; }\n            set { _userName = value == null ? null : value.ToLowerInvariant(); }\n        }\n\n        public string Password { get; set; }\n        public int NumberOfTries { get; set; }\n\n        public LoginStatus Status { get; set; }\n\n        public string Message { get; set; }\n        public bool RememberMe { get; set; }\n\n        public DateTime? LockedOutUntil { get; set; }\n\n        public string Get(string key)\n        {\n            return _properties[key];\n        }\n\n        public void Set(string key, string value)\n        {\n            _properties[key] = value;\n        }\n\n        public bool HasCredentials()\n        {\n            return UserName.IsNotEmpty() && Password.IsNotEmpty();\n        }\n\n        protected bool Equals(LoginRequest other)\n        {\n            return string.Equals(Url, other.Url);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != GetType()) return false;\n            return Equals((LoginRequest) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Url != null ? Url.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Login request for UserName: {0}, Status: {1}, NumberOfTries: {2}, Message: {3}\",\n                                 _userName, Status, NumberOfTries, Message);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/LoginStatus.cs",
    "content": "namespace FubuMVC.Core.Security.Authentication\n{\n    public enum LoginStatus\n    {\n        NotAuthenticated,\n        Failed,\n        Succeeded,\n        LockedOut\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/LoginSuccessHandler.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core.Continuations;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public class LoginSuccessHandler : ILoginSuccessHandler\n    {\n        public FubuContinuation LoggedIn(LoginRequest request)\n        {\n            string url = request.Url;\n            if (url.IsEmpty())\n            {\n                url = \"~/\";\n            }\n\n            return FubuContinuation.RedirectTo(url);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/LogoutRequest.cs",
    "content": "using FubuMVC.Core.Security.Authorization;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    [NotAuthenticated]\n    public class LogoutRequest{}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/LogoutSuccessHandler.cs",
    "content": "﻿using FubuMVC.Core.Continuations;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public class LogoutSuccessHandler : ILogoutSuccessHandler\n    {\n        public FubuContinuation LoggedOut()\n        {\n            return FubuContinuation.RedirectTo(new LoginRequest(), \"GET\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Membership/FubuPrincipal.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Security.Principal;\n\nnamespace FubuMVC.Core.Security.Authentication.Membership\n{\n    public class FubuPrincipal : IPrincipal\n    {\n        private readonly IUserInfo _user;\n        private readonly Func<string, bool> _isInRole;\n\n        public FubuPrincipal(IUserInfo user) : this(user, role => user.Roles.Contains(role))\n        {\n        }\n\n        public FubuPrincipal(IUserInfo user, Func<string, bool> isInRole)\n        {\n            if (user == null) throw new ArgumentNullException(\"user\");\n\n            _user = user;\n            _isInRole = isInRole;\n            Identity = new GenericIdentity(user.UserName);\n        }\n\n        public IUserInfo User\n        {\n            get { return _user; }\n        }\n\n        public T Get<T>() where T : class\n        {\n            return _user.Get<T>();\n        }\n\n        public static FubuPrincipal Current\n        {\n            get\n            {\n                var context = new ThreadPrincipalContext();\n                return context.Current as FubuPrincipal;\n            }\n        }\n\n        public bool IsInRole(string role)\n        {\n            return _isInRole(role);\n        }\n\n        public IIdentity Identity { get; private set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Membership/IMembershipRepository.cs",
    "content": "﻿namespace FubuMVC.Core.Security.Authentication.Membership\n{\n    public interface IMembershipRepository\n    {\n        bool MatchesCredentials(LoginRequest request);\n        IUserInfo FindByName(string username);\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Membership/InMemoryMembershipRepository.cs",
    "content": "﻿using FubuCore.Util;\n\nnamespace FubuMVC.Core.Security.Authentication.Membership\n{\n    public class InMemoryMembershipRepository : IMembershipRepository\n    {\n        private readonly Cache<string,UserInfo> _users = new Cache<string, UserInfo>(name => new UserInfo{UserName = name}); \n\n        public bool MatchesCredentials(LoginRequest request)\n        {\n            return _users[request.UserName].Password == request.Password;\n        }\n\n        public IUserInfo FindByName(string username)\n        {\n            return _users[username];\n        }\n\n        public void Add(UserInfo user)\n        {\n            _users[user.UserName] = user;\n        }\n\n        public void Clear()\n        {\n            _users.ClearAll();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Membership/MembershipAuthentication.cs",
    "content": "﻿using System;\nusing System.Runtime.Serialization;\nusing System.Security.Principal;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Security.Authentication.Membership\n{\n    public class MembershipAuthentication : IAuthenticationStrategy, IPrincipalBuilder, ICredentialsAuthenticator\n    {\n        private readonly IMembershipRepository _membership;\n        private readonly BasicAuthentication _inner;\n\n        public MembershipAuthentication(IAuthenticationSession session, IPrincipalContext context, IMembershipRepository membership, ILockedOutRule lockedOutRule)\n        {\n            _membership = membership;\n            _inner = new BasicAuthentication(session, context, this, this, lockedOutRule);\n        }\n\n        public AuthResult TryToApply()\n        {\n            return _inner.TryToApply();\n        }\n\n        public bool Authenticate(LoginRequest request)\n        {\n            return _inner.Authenticate(request);\n        }\n\n        public bool AuthenticateCredentials(LoginRequest request)\n        {\n            if (request.UserName.IsEmpty()) return false;\n\n            return _membership.MatchesCredentials(request);\n        }\n\n        public IMembershipRepository Membership\n        {\n            get { return _membership; }\n        }\n\n        public IPrincipal Build(string userName)\n        {\n            var user = _membership.FindByName(userName);\n            if (user == null)\n            {\n                throw new UnknownUserException(userName);\n            }\n\n            return new FubuPrincipal(user);\n        }\n    }\n\n    [Serializable]\n    public class UnknownUserException : Exception\n    {\n        public UnknownUserException(string user) : base(\"User {0} cannot be found\".ToFormat(user))\n        {\n        }\n\n        protected UnknownUserException(SerializationInfo info, StreamingContext context) : base(info, context)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Membership/MembershipNode.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.Security.Authentication.Membership\n{\n    public class MembershipNode : AuthenticationNode\n    {\n        private readonly Type _membershipType;\n\n        public MembershipNode() : this(null)\n        {\n        }\n\n        public MembershipNode(Type membershipType) : base(typeof (MembershipAuthentication))\n        {\n            if (membershipType != null && !membershipType.CanBeCastTo<IMembershipRepository>())\n            {\n                throw new ArgumentOutOfRangeException(\"membershipType\",\n                                                      \"membershipType has to be assignable to IMembershipRepository\");\n            }\n\n            _membershipType = membershipType;\n        }\n\n        public Type MembershipType\n        {\n            get { return _membershipType; }\n        }\n\n        protected override void configure(IConfiguredInstance instance)\n        {\n            if (_membershipType != null)\n            {\n                instance.Dependencies.Add(typeof(IMembershipRepository), new ConfiguredInstance(_membershipType));\n            }\n        }\n\n        public static MembershipNode For<T>() where T : IMembershipRepository\n        {\n            return new MembershipNode(typeof (T));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Membership/UserInfo.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuCore.Util;\n\nnamespace FubuMVC.Core.Security.Authentication.Membership\n{\n    public interface IUserInfo\n    {\n        string UserName { get; }\n        IEnumerable<string> Roles { get; }\n\n        T Get<T>() where T : class;\n    }\n\n    public class UserInfo : IUserInfo\n    {\n        private readonly IList<string> _roles = new List<string>();\n        private readonly Cache<Type, object> _values = new Cache<Type, object>();\n\n        public string Password { get; set; }\n        public string UserName { get; set; }\n\n        public IEnumerable<string> Roles\n        {\n            get { return _roles; }\n            set\n            {\n                _roles.Clear();\n                _roles.AddRange(value);\n            }\n        }\n\n        public T Get<T>() where T : class\n        {\n            return _values[typeof (T)] as T;\n        }\n        \n        public void Set<T>(T value) where T : class\n        {\n            _values[typeof (T)] = value;\n        }\n\n        public void AddRoles(params string[] roles)\n        {\n            roles.Each(r => _roles.Fill(r));\n        }\n\n        public bool Matches(LoginRequest request)\n        {\n            return UserName == request.UserName && Password == request.Password;\n        }\n\n        protected bool Equals(UserInfo other)\n        {\n            return string.Equals(UserName, other.UserName);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((UserInfo) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (UserName != null ? UserName.GetHashCode() : 0);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/PassThroughAuthenticationAttribute.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n\tpublic class PassThroughAuthenticationAttribute : ModifyChainAttribute\n\t{\n\t    public override void Alter(ActionCallBase call)\n\t    {\n\t        var chain = call.ParentChain();\n\n            chain.Prepend(ActionFilter.For<PassThroughAuthenticationFilter>(a => a.Filter()));\n\t    }\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/PassThroughAuthenticationFilter.cs",
    "content": "﻿using FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Http;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n\tpublic class PassThroughAuthenticationFilter\n\t{\n\t\tprivate readonly IAuthenticationService _authentication;\n\t\tprivate readonly ICurrentChain _currentChain;\n\n\t\tpublic PassThroughAuthenticationFilter(IAuthenticationService authentication, ICurrentChain currentChain)\n\t\t{\n\t\t\t_authentication = authentication;\n\t\t\t_currentChain = currentChain;\n\t\t}\n\n\t\tpublic FubuContinuation Filter()\n\t\t{\n\t\t\tif (!_currentChain.IsInPartial())\n\t\t\t{\n\t\t\t\t_authentication.TryToApply();\n\t\t\t}\n\n\t\t\treturn FubuContinuation.NextBehavior();\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/PasswordHash.cs",
    "content": "﻿using System;\nusing System.Security.Cryptography;\nusing System.Web.Security;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    /// <summary>\n    /// Salted password hashing with PBKDF2-SHA1.\n    /// Author: havoc AT defuse.ca\n    /// www: http://crackstation.net/hashing-security.htm\n    /// Compatibility: .NET 3.0 and later.\n    /// </summary>\n    public class PasswordHash : IPasswordHash\n    {\n        // The following constants may be changed without breaking existing hashes.\n        public const int SALT_BYTES = 24;\n        public const int HASH_BYTES = 24;\n        public const int PBKDF2_ITERATIONS = 1000;\n\n        public const int ITERATION_INDEX = 0;\n        public const int SALT_INDEX = 1;\n        public const int PBKDF2_INDEX = 2;\n\n        /// <summary>\n        /// Creates a salted PBKDF2 hash of the password.\n        /// </summary>\n        /// <param name=\"password\">The password to hash.</param>\n        /// <returns>The hash of the password.</returns>\n        public string CreateHash(string password)\n        {\n\n#pragma warning disable 618\n            return FormsAuthentication.HashPasswordForStoringInConfigFile(password, \"sha1\");\n#pragma warning restore 618\n            // Generate a random salt\n//            RNGCryptoServiceProvider csprng = new RNGCryptoServiceProvider();\n//            byte[] salt = new byte[SALT_BYTES];\n//            csprng.GetBytes(salt);\n//\n//            // Hash the password and encode the parameters\n//            byte[] hash = PBKDF2(password, salt, PBKDF2_ITERATIONS, HASH_BYTES);\n//            return PBKDF2_ITERATIONS + \":\" +\n//                   Convert.ToBase64String(salt) + \":\" +\n//                   Convert.ToBase64String(hash);\n        }\n\n        /// <summary>\n        /// Validates a password given a hash of the correct one.\n        /// </summary>\n        /// <param name=\"password\">The password to check.</param>\n        /// <param name=\"goodHash\">A hash of the correct password.</param>\n        /// <returns>True if the password is correct. False otherwise.</returns>\n        public static bool ValidatePassword(string password, string goodHash)\n        {\n            // Extract the parameters from the hash\n            char[] delimiter = { ':' };\n            string[] split = goodHash.Split(delimiter);\n            int iterations = Int32.Parse(split[ITERATION_INDEX]);\n            byte[] salt = Convert.FromBase64String(split[SALT_INDEX]);\n            byte[] hash = Convert.FromBase64String(split[PBKDF2_INDEX]);\n\n            byte[] testHash = PBKDF2(password, salt, iterations, hash.Length);\n            return SlowEquals(hash, testHash);\n        }\n\n        /// <summary>\n        /// Compares two byte arrays in length-constant time. This comparison\n        /// method is used so that password hashes cannot be extracted from\n        /// on-line systems using a timing attack and then attacked off-line.\n        /// </summary>\n        /// <param name=\"a\">The first byte array.</param>\n        /// <param name=\"b\">The second byte array.</param>\n        /// <returns>True if both byte arrays are equal. False otherwise.</returns>\n        private static bool SlowEquals(byte[] a, byte[] b)\n        {\n            uint diff = (uint)a.Length ^ (uint)b.Length;\n            for (int i = 0; i < a.Length && i < b.Length; i++)\n                diff |= (uint)(a[i] ^ b[i]);\n            return diff == 0;\n        }\n\n        /// <summary>\n        /// Computes the PBKDF2-SHA1 hash of a password.\n        /// </summary>\n        /// <param name=\"password\">The password to hash.</param>\n        /// <param name=\"salt\">The salt.</param>\n        /// <param name=\"iterations\">The PBKDF2 iteration count.</param>\n        /// <param name=\"outputBytes\">The length of the hash to generate, in bytes.</param>\n        /// <returns>A hash of the password.</returns>\n        private static byte[] PBKDF2(string password, byte[] salt, int iterations, int outputBytes)\n        {\n            Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password, salt);\n            pbkdf2.IterationCount = iterations;\n            return pbkdf2.GetBytes(outputBytes);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/RedirectLibrary.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    [MarkedForTermination]\n    public class RedirectLibrary\n    {\n        private readonly IList<Type> _redirectTypes = new List<Type>();\n\n        public void Add<T>() where T : IAuthenticationRedirect\n        {\n            _redirectTypes.Add(typeof(T));\n        }\n\n        public IEnumerable<Type> GetRedirectTypes()\n        {\n            foreach (var redirectType in _redirectTypes)\n            {\n                yield return redirectType;\n            }\n\n            yield return typeof (AjaxAuthenticationRedirect);\n            yield return typeof (DefaultAuthenticationRedirect);\n        } \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/AudienceRestriction.cs",
    "content": "﻿using System.Linq;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public class AudienceRestriction : ICondition\n    {\n        public string[] Audiences { get; set; }\n\n        public void Add(string audience)\n        {\n            if (Audiences == null)\n            {\n                Audiences = new[] {audience};\n            }\n            else\n            {\n                Audiences = Audiences.Union(new[] {audience}).ToArray();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/AuthenticationStatement.cs",
    "content": "﻿using System;\nusing System.Xml;\nusing FubuMVC.Core.Security.Authentication.Saml2.Xml;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public class AuthenticationStatement : ReadsSamlXml\n    {\n        public AuthenticationStatement()\n        {\n\n        }\n\n        public AuthenticationStatement(XmlDocument document)\n        {\n            var element = document.FindChild(AuthnStatement);\n            if (element == null) return;\n\n            Instant = element.ReadAttribute<DateTimeOffset>(AuthnInstant);\n            SessionIndex = element.ReadAttribute<string>(SessionIndexAtt);\n            SessionNotOnOrAfter = element.ReadAttribute<DateTimeOffset>(SessionNotOnOrAfterAtt);\n\n            var context = element.FindChild(AuthnContext, AssertionXsd);\n            DeclarationReference = context.ReadChildText<Uri>(AuthnContextDeclRef);\n            ClassReference = context.ReadChildText<Uri>(AuthnContextClassRef);\n        }\n\n        public DateTimeOffset Instant { get; set; }\n        public string SessionIndex { get; set; }\n        public DateTimeOffset? SessionNotOnOrAfter { get; set; }\n\n        // TODO -- support AuthenticatingAuthority\n        public Uri ClassReference { get; set; }\n        public Uri DeclarationReference { get; set; }\n\n        // TODO -- support declaration\n        //public string Declaration { get; set; }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/BasicSamlResponseHandler.cs",
    "content": "﻿using System.Linq;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Continuations;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    /// <summary>\n    /// Abstract class to implement for basic saml response handling\n    /// </summary>\n    public abstract class BasicSamlResponseHandler : ISamlResponseHandler\n    {\n        private readonly ILogger _logger;\n\n        protected BasicSamlResponseHandler(ILogger logger)\n        {\n            _logger = logger;\n        }\n\n        public abstract bool CanHandle(SamlResponse response);\n\n\n        public void Handle(ISamlDirector director, SamlResponse response)\n        {\n            validate(response);\n            if (response.Errors.Any())\n            {\n                _logger.InfoMessage(() => new SamlAuthenticationFailed(response));\n                director.FailedUser(failedContinuation(response)); // just let it go to the login page\n            }\n            else\n            {\n                _logger.InfoMessage(() => new SamlAuthenticationSucceeded(response));\n                var persistedUsername = createLocalUser(response);\n                director.SuccessfulUser(persistedUsername, successfulContinuation(response));\n            }\n        }\n\n        protected virtual FubuContinuation successfulContinuation(SamlResponse response)\n        {\n            return null;\n        }\n\n        protected virtual FubuContinuation failedContinuation(SamlResponse response)\n        {\n            return null;\n        }\n\n        protected abstract string createLocalUser(SamlResponse response);\n        protected virtual void validate(SamlResponse response)\n        {\n            // Nothing\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Certificates/BasicSamlCertificateRepository.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Certificates\n{\n    public class BasicSamlCertificateRepository : ISamlCertificateRepository\n    {\n        private readonly IEnumerable<SamlCertificate> _issuers;\n\n        public BasicSamlCertificateRepository(IEnumerable<SamlCertificate> issuers)\n        {\n            _issuers = issuers;\n        }\n\n        public SamlCertificate Find(string samlIssuer)\n        {\n            return _issuers.FirstOrDefault(x => x.Issuer.Equals(samlIssuer, StringComparison.OrdinalIgnoreCase));\n        }\n\n        public IEnumerable<SamlCertificate> AllKnownCertificates()\n        {\n            return _issuers;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Certificates/CertificateLoader.cs",
    "content": "﻿using System;\nusing System.Runtime.Serialization;\nusing System.Security.Cryptography.X509Certificates;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Certificates\n{\n    public class CertificateLoader : ICertificateLoader\n    {\n        public X509Certificate2 Load(string thumbprint)\n        {\n            var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);\n\n            try\n            {\n                store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);\n                // TODO -- should the FindType be editable?\n                var certs = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);\n\n                if (certs.Count == 0)\n                {\n                    throw new UnknownCertificateException(thumbprint);\n                }\n\n                return certs[0];\n            }\n            finally\n            {\n                store.Close();\n            }\n        }\n    }\n\n    [Serializable]\n    public class UnknownCertificateException : Exception\n    {\n        public UnknownCertificateException(string thumbprint) : base(\"Unable to load certificate {0} by thumbprint\".ToFormat(thumbprint))\n        {\n        }\n\n        protected UnknownCertificateException(SerializationInfo info, StreamingContext context) : base(info, context)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Certificates/CertificateService.cs",
    "content": "﻿using System.Linq;\nusing System.Security.Cryptography.X509Certificates;\nusing FubuMVC.Core.Security.Authentication.Saml2.Validation;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Certificates\n{\n    public class CertificateService : ICertificateService\n    {\n        private readonly ICertificateLoader _loader;\n        private readonly ISamlCertificateRepository _repository;\n\n        public CertificateService(ICertificateLoader loader, ISamlCertificateRepository repository)\n        {\n            _loader = loader;\n            _repository = repository;\n        }\n\n        public SamlValidationKeys Validate(SamlResponse response)\n        {\n            if (!MatchesIssuer(response)) return SamlValidationKeys.CannotMatchIssuer;\n\n            return response.Certificates.Any(x => x.IsVerified)\n                       ? SamlValidationKeys.ValidCertificate\n                       : SamlValidationKeys.NoValidCertificates;\n        }\n\n        public X509Certificate2 LoadCertificate(string issuer)\n        {\n            var samlCertificate = _repository.Find(issuer);\n\n            if (samlCertificate == null) return null;\n\n            return _loader.Load(samlCertificate.Thumbprint);\n        }\n\n        // virtual for testing\n        public virtual bool MatchesIssuer(SamlResponse response)\n        {\n            var samlCertificate = _repository.Find(response.Issuer);\n            if (samlCertificate == null) return false;\n\n            return response.Certificates.Any(x => samlCertificate.Matches(x));\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Certificates/ICertificate.cs",
    "content": "﻿namespace FubuMVC.Core.Security.Authentication.Saml2.Certificates\n{\n    public interface ICertificate\n    {\n        string Issuer { get; }\n        string SerialNumber { get; }\n        bool IsVerified { get; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Certificates/ICertificateLoader.cs",
    "content": "﻿using System.Security.Cryptography.X509Certificates;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Certificates\n{\n    public interface ICertificateLoader\n    {\n        X509Certificate2 Load(string thumbprint);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Certificates/ICertificateService.cs",
    "content": "﻿using System.Security.Cryptography.X509Certificates;\nusing FubuMVC.Core.Security.Authentication.Saml2.Validation;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Certificates\n{\n    public interface ICertificateService\n    {\n        SamlValidationKeys Validate(SamlResponse response);\n        X509Certificate2 LoadCertificate(string issuer);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Certificates/ISamlCertificateRepository.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Certificates\n{\n    public interface ISamlCertificateRepository\n    {\n        SamlCertificate Find(string samlIssuer);\n        IEnumerable<SamlCertificate> AllKnownCertificates();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Certificates/InMemoryCertificate.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Certificates\n{\n    public class InMemoryCertificate : ICertificate\n    {\n        public InMemoryCertificate()\n        {\n            Issuer = Guid.NewGuid().ToString();\n            SerialNumber = Guid.NewGuid().ToString();\n        }\n\n        public string Issuer { get; set; }\n        public string SerialNumber { get; set; }\n\n        public bool IsVerified { get; set; }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Certificates/InMemoryCertificateLoader.cs",
    "content": "﻿using System.Linq;\nusing System.Security.Cryptography.X509Certificates;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Certificates\n{\n    public class InMemoryCertificateLoader : ICertificateLoader\n    {\n        private readonly X509Certificate2[] _certificates;\n\n        public InMemoryCertificateLoader(params X509Certificate2[] certificates)\n        {\n            _certificates = certificates;\n        }\n\n        public X509Certificate2 Load(string thumbprint)\n        {\n            return _certificates.FirstOrDefault(x => x.Thumbprint == thumbprint);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Certificates/SamlCertificate.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Certificates\n{\n    public class SamlCertificate\n    {\n        public string SerialNumber { get; set; }\n        public string CertificateIssuer { get; set; }\n        public string Issuer { get; set; }\n        public string Thumbprint { get; set; }\n\n\n        public bool Matches(ICertificate certificate)\n        {\n            return certificate.SerialNumber == SerialNumber &&\n                   certificate.Issuer == CertificateIssuer;\n        }\n\n        public SamlCertificate()\n        {\n        }\n\n        public SamlCertificate(string text)\n        {\n            var parts = text.ToDelimitedArray();\n\n            Issuer = parts[0];\n            CertificateIssuer = parts[1];\n            SerialNumber = parts[2];\n            Thumbprint = parts[3];\n        }\n\n        public override string ToString()\n        {\n            return new string[] {Issuer.ToString(), CertificateIssuer, SerialNumber, Thumbprint}.Join(\",\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Certificates/X509CertificateWrapper.cs",
    "content": "﻿using System.Security.Cryptography.X509Certificates;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Certificates\n{\n    public class X509CertificateWrapper : ICertificate\n    {\n        private readonly X509Certificate2 _inner;\n\n        public X509CertificateWrapper(X509Certificate2 inner)\n        {\n            _inner = inner;\n            \n        }\n\n        public string Issuer\n        {\n            get { return _inner.Issuer; }\n        }\n\n        public string SerialNumber { get { return _inner.SerialNumber; } }\n\n        public bool IsVerified\n        {\n            get { return _inner.Verify(); }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/ConditionGroup.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Xml;\nusing FubuMVC.Core.Security.Authentication.Saml2.Xml;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public class ConditionGroup : ReadsSamlXml\n    {\n        // Can be multiples -- if multiples, has to be AND/ALL\n\n        public ConditionGroup()\n        {\n        }\n\n        public ConditionGroup(XmlElement element)\n        {\n            NotBefore = element.ReadAttribute<DateTimeOffset>(NotBeforeAtt);\n            NotOnOrAfter = element.ReadAttribute<DateTimeOffset>(NotOnOrAfterAtt);\n\n            // TODO -- couple other kinds of conditions here\n            readAudiences(element).Each(Add);\n        }\n\n        private IEnumerable<AudienceRestriction> readAudiences(XmlElement conditions)\n        {\n            return conditions\n                .Children(AudienceRestriction, AssertionXsd)\n                .Select(elem =>\n                {\n                    var audiences = elem.Children(Audience, AssertionXsd).Select(x => x.InnerText).ToArray();\n                    return new AudienceRestriction\n                    {\n                        Audiences = audiences\n                    };\n                });\n        }\n\n        public DateTimeOffset NotBefore { get; set; }\n        public DateTimeOffset NotOnOrAfter { get; set; }\n\n        public ICondition[] Conditions\n        {\n            get { return _conditions.ToArray(); }\n            set\n            {\n                _conditions.Clear();\n                _conditions.AddRange(value);\n            }\n        }\n        private readonly IList<ICondition> _conditions = new List<ICondition>();\n\n        public void Add(ICondition condition)\n        {\n            _conditions.Add(condition);\n        }\n\n        public void RestrictToAudience(string uri)\n        {\n            var restriction = new AudienceRestriction();\n            restriction.Add(uri);\n\n            Add(restriction);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Encryption/AssertionXmlDecryptor.cs",
    "content": "﻿using System;\nusing System.Security.Cryptography;\nusing System.Security.Cryptography.X509Certificates;\nusing System.Security.Cryptography.Xml;\nusing System.Xml;\nusing FubuCore;\nusing FubuMVC.Core.Security.Authentication.Saml2.Xml;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Encryption\n{\n    public class AssertionXmlDecryptor : ReadsSamlXml, IAssertionXmlDecryptor\n    {\n        public void Decrypt(XmlDocument document, X509Certificate2 encryptionCert)\n        {\n            var assertion = document.FindChild(EncryptedAssertion);\n            if (assertion == null) return; // Not encrypted, shame on them.\n\n            var data = document.EncryptedChild(\"EncryptedData\");\n            var keyElement = assertion.EncryptedChild(\"EncryptedKey\");\n\n            var encryptedData = new EncryptedData();\n            encryptedData.LoadXml(data);\n\n            var encryptedKey = new EncryptedKey();\n            encryptedKey.LoadXml(keyElement);\n\n            var encryptedXml = new EncryptedXml(document);\n\n            // Get encryption secret key used by decrypting with the encryption certificate's private key\n            var secretKey = GetSecretKey(encryptedKey, encryptionCert.PrivateKey);\n\n            // Seed the decryption algorithm with secret key and then decrypt\n            var algorithm = GetSymmetricBlockEncryptionAlgorithm(encryptedData.EncryptionMethod.KeyAlgorithm);\n            algorithm.Key = secretKey;\n            var decryptedBytes = encryptedXml.DecryptData(encryptedData, algorithm);\n\n            // Put decrypted xml elements back into the document in place of the encrypted data\n            encryptedXml.ReplaceData(assertion, decryptedBytes);\n        }\n\n        public static SymmetricAlgorithm GetSymmetricBlockEncryptionAlgorithm(string algorithmUri)\n        {\n            switch (algorithmUri)\n            {\n                case EncryptedXml.XmlEncTripleDESUrl:\n                    return new TripleDESCryptoServiceProvider();\n                case EncryptedXml.XmlEncDESUrl:\n                    return new DESCryptoServiceProvider();\n                case EncryptedXml.XmlEncAES128Url:\n                    return new RijndaelManaged { KeySize = 128 };\n                case EncryptedXml.XmlEncAES192Url:\n                    return new RijndaelManaged { KeySize = 192 };\n                case EncryptedXml.XmlEncAES256Url:\n                    return new RijndaelManaged();\n                default:\n                    throw new Exception(\"Unrecognized symmetric encryption algorithm URI '{0}'\".ToFormat(algorithmUri));\n            }\n        }\n\n        public static byte[] GetSecretKey(EncryptedKey encryptedKey, AsymmetricAlgorithm privateKey)\n        {\n            var keyAlgorithm = encryptedKey.EncryptionMethod.KeyAlgorithm;\n            var asymmetricAlgorithm = GetAsymmetricKeyTransportAlgorithm(keyAlgorithm);\n            asymmetricAlgorithm.FromXmlString(privateKey.ToXmlString(true));\n            \n            var useOaep = keyAlgorithm == EncryptedXml.XmlEncRSAOAEPUrl;\n            return asymmetricAlgorithm.Decrypt(encryptedKey.CipherData.CipherValue, useOaep);\n        }\n\n        public static RSACryptoServiceProvider GetAsymmetricKeyTransportAlgorithm(string algorithmUri)\n        {\n            switch (algorithmUri)\n            {\n                case EncryptedXml.XmlEncRSA15Url:\n                case EncryptedXml.XmlEncRSAOAEPUrl:\n                    return new RSACryptoServiceProvider();\n                default:\n                    throw new Exception(\"Unrecognized asymmetric encryption algorithm URI '{0}'\".ToFormat(algorithmUri));\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Encryption/AssertionXmlEncryptor.cs",
    "content": "﻿using System.Security.Cryptography;\nusing System.Security.Cryptography.X509Certificates;\nusing System.Security.Cryptography.Xml;\nusing System.Text;\nusing System.Xml;\nusing FubuMVC.Core.Security.Authentication.Saml2.Xml;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Encryption\n{\n    public class AssertionXmlEncryptor : ReadsSamlXml, IAssertionXmlEncryptor\n    {\n        public void Encrypt(XmlDocument document, X509Certificate2 certificate)\n        {\n            var element = document.FindChild(AssertionElem);\n            var encryptedXml = new EncryptedXml {Encoding = Encoding.UTF8};\n            \n            // TODO -- make this pluggable with settings?\n            //Create the Symmetric Key for encrypting\n            var key = new RijndaelManaged\n            {\n                KeySize = 128,\n                Mode = CipherMode.CBC,\n                Padding = PaddingMode.None\n            };\n\n            var encryptedData = ToEncryptedData(encryptedXml, element, key);\n            var encryptedKey = ToEncryptedKey(certificate, key);\n\n            var wrapper = document.CreateElement(EncryptedAssertion, AssertionXsd);\n            wrapper.AppendChild(document.ImportNode(encryptedData.GetXml(), true));\n            wrapper.AppendChild(document.ImportNode(encryptedKey.GetXml(), true));\n\n            element.ParentNode.ReplaceChild(wrapper, element);\n        }\n\n        private static EncryptedData ToEncryptedData(EncryptedXml encryptedXml, XmlElement element, RijndaelManaged key)\n        {\n            var encryptedElement = encryptedXml.EncryptData(element, key, false);\n\n            var encryptedData = new EncryptedData\n            {\n                Type = EncryptedXml.XmlEncElementUrl,\n                EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncAES128Url),\n                Id = null,\n                CipherData = new CipherData(encryptedElement)\n            };\n            return encryptedData;\n        }\n\n        public static EncryptedKey ToEncryptedKey(X509Certificate2 certificate, SymmetricAlgorithm key)\n        {\n            var provider = new RSACryptoServiceProvider();\n            provider.FromXmlString(certificate.PublicKey.Key.ToXmlString(false));\n            var secretKey = provider.Encrypt(key.Key, false);\n            \n            var encryptedKey = new EncryptedKey\n            {\n                EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncRSA15Url),\n                CipherData = new CipherData(secretKey)\n            };\n\n            encryptedKey.KeyInfo.AddClause(new KeyInfoName(\"encryption\"));\n            \n            return encryptedKey;\n        }\n\n\n        public void Decrypt(XmlDocument document, X509Certificate2 encryptionCert)\n        {\n            var assertion = document.FindChild(EncryptedAssertion);\n            if (assertion == null) return; // Not encrypted, shame on them.\n\n            var data = document.EncryptedChild(\"EncryptedData\");\n            var keyElement = assertion.EncryptedChild(\"EncryptedKey\");\n\n            var encryptedData = new EncryptedData();\n            encryptedData.LoadXml(data);\n\n            var encryptedKey = new EncryptedKey();\n            encryptedKey.LoadXml(keyElement);\n            var encryptedXml = new EncryptedXml(document);\n\n            // Get encryption secret key used by decrypting with the encryption certificate's private key\n            var secretKey = AssertionXmlDecryptor.GetSecretKey(encryptedKey, encryptionCert.PrivateKey);\n\n            // Seed the decryption algorithm with secret key and then decrypt\n            var algorithm = AssertionXmlDecryptor.GetSymmetricBlockEncryptionAlgorithm(encryptedData.EncryptionMethod.KeyAlgorithm);\n            algorithm.Key = secretKey;\n            var decryptedBytes = encryptedXml.DecryptData(encryptedData, algorithm);\n\n            // Put decrypted xml elements back into the document in place of the encrypted data\n            encryptedXml.ReplaceData(assertion, decryptedBytes);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Encryption/IAssertionXmlDecryptor.cs",
    "content": "﻿using System.Security.Cryptography.X509Certificates;\nusing System.Xml;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Encryption\n{\n    public interface IAssertionXmlDecryptor\n    {\n        void Decrypt(XmlDocument document, X509Certificate2 encryptionCert);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Encryption/IAssertionXmlEncryptor.cs",
    "content": "﻿using System.Security.Cryptography.X509Certificates;\nusing System.Xml;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Encryption\n{\n    public interface IAssertionXmlEncryptor\n    {\n        void Encrypt(XmlDocument document, X509Certificate2 certificate);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Encryption/ISamlResponseXmlSigner.cs",
    "content": "﻿using System.Security.Cryptography.X509Certificates;\nusing System.Xml;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Encryption\n{\n    public interface ISamlResponseXmlSigner\n    {\n        void ApplySignature(SamlResponse response ,X509Certificate2 certificate, XmlDocument document);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Encryption/SamlResponseReader.cs",
    "content": "﻿using System;\nusing System.Text;\nusing System.Xml;\nusing FubuMVC.Core.Security.Authentication.Saml2.Certificates;\nusing FubuMVC.Core.Security.Authentication.Saml2.Xml;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Encryption\n{\n    public interface ISamlResponseReader\n    {\n        SamlResponse Read(string responseText);\n    }\n\n    public class SamlResponseReader : ReadsSamlXml, ISamlResponseReader\n    {\n        private readonly ICertificateService _certificates;\n        private readonly IAssertionXmlDecryptor _decryptor;\n\n        public SamlResponseReader(ICertificateService certificates, IAssertionXmlDecryptor decryptor)\n        {\n            _certificates = certificates;\n            _decryptor = decryptor;\n        }\n\n        public SamlResponse Read(string responseText)\n        {\n            var bytes = Convert.FromBase64String(responseText);\n            var xml = Encoding.UTF8.GetString(bytes);\n            var document = new XmlDocument();\n            document.LoadXml(xml);\n\n            var reader = new SamlResponseXmlReader(document);\n            var certificate = _certificates.LoadCertificate(reader.ReadIssuer());\n\n            _decryptor.Decrypt(document, certificate);\n\n            return reader.Read();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Encryption/SamlResponseWriter.cs",
    "content": "﻿using System;\nusing System.Text;\nusing FubuMVC.Core.Security.Authentication.Saml2.Certificates;\nusing FubuMVC.Core.Security.Authentication.Saml2.Xml;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Encryption\n{\n    public interface ISamlResponseWriter\n    {\n        string Write(SamlResponse response);\n    }\n\n    public class SamlResponseWriter : ReadsSamlXml, ISamlResponseWriter\n    {\n        private readonly ICertificateService _certificates;\n        private readonly ISamlResponseXmlSigner _xmlSigner;\n        private readonly IAssertionXmlEncryptor _encryptor;\n\n        public SamlResponseWriter(ICertificateService certificates, ISamlResponseXmlSigner xmlSigner, IAssertionXmlEncryptor encryptor)\n        {\n            _certificates = certificates;\n            _xmlSigner = xmlSigner;\n            _encryptor = encryptor;\n        }\n\n        public string Write(SamlResponse response)\n        {\n            if (response.Status == null) throw new ArgumentOutOfRangeException(\"SamlResponse must have a Status\");\n\n            var xml = new SamlResponseXmlWriter(response).Write();\n            var certificate = _certificates.LoadCertificate(response.Issuer);\n\n            _xmlSigner.ApplySignature(response, certificate, xml);\n            _encryptor.Encrypt(xml, certificate);\n\n            var rawXml = xml.OuterXml;\n\n            return Convert.ToBase64String(Encoding.UTF8.GetBytes(rawXml));\n        }\n    \n    }\n\n    // TODO -- need some tests around this\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Encryption/SamlResponseXmlSigner.cs",
    "content": "﻿using System.Security.Cryptography.X509Certificates;\nusing System.Security.Cryptography.Xml;\nusing System.Xml;\nusing FubuMVC.Core.Security.Authentication.Saml2.Xml;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Encryption\n{\n    public class SamlResponseXmlSigner : ReadsSamlXml, ISamlResponseXmlSigner\n    {\n        public void ApplySignature(SamlResponse response, X509Certificate2 certificate, XmlDocument document)\n        {\n            var keyInfo = new KeyInfo();\n            keyInfo.AddClause(new KeyInfoX509Data(certificate));\n\n            var signedXml = new SignedXml(document)\n            {\n                SigningKey = certificate.PrivateKey,\n                KeyInfo = keyInfo\n            };\n\n            var reference = new Reference(AssertionIdPrefix + response.Id);\n            reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());\n            signedXml.AddReference(reference);\n            signedXml.ComputeSignature();\n\n            var xml = signedXml.GetXml();\n\n            document.FindChild(AssertionElem).AppendChild(xml);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/EnvironmentTestExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public static class EnvironmentTestExtensions\n    {\n        public static T VerifyRegistration<T>(this IServiceLocator services, IActivationLog log)\n        {\n            try\n            {\n                var service = services.GetInstance<T>();\n                log.Trace(\"Using {0} for {1}\", service.GetType().FullName, typeof(T).FullName);\n\n                return service;\n            }\n            catch (Exception ex)\n            {\n                log.MarkFailure(\"Could not resolve \" + typeof(T).FullName);\n                log.MarkFailure(ex);\n\n                return default(T);\n            }\n        }\n\n        public static IEnumerable<T> VerifyAnyRegistrations<T>(this IServiceLocator services, IActivationLog log)\n        {\n            try\n            {\n                var holder = services.GetInstance<Holder<T>>();\n                holder.List.Each(x => {\n                    log.Trace(\"Using {0} for {1}\", x.GetType().FullName, typeof(T).FullName);\n                });\n\n\n                if (!holder.List.Any())\n                {\n                    log.MarkFailure(\"No implementations of {0} are registered\", typeof(T).FullName);\n                }\n\n                return holder.List;\n            }\n            catch (Exception ex)\n            {\n                log.MarkFailure(\"Could not resolve the list of \" + typeof(T).FullName);\n                log.MarkFailure(ex);\n\n                return Enumerable.Empty<T>();\n            }\n        }\n\n        public class Holder<T>\n        {\n            private readonly IEnumerable<T> _list;\n\n            public Holder(IEnumerable<T> list)\n            {\n                _list = list;\n            }\n\n            public IEnumerable<T> List\n            {\n                get { return _list; }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/ICondition.cs",
    "content": "﻿namespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public interface ICondition\n    {\n        \n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/ISamlDirector.cs",
    "content": "﻿using FubuMVC.Core.Continuations;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public interface ISamlDirector\n    {\n        void SuccessfulUser(string username, FubuContinuation redirection = null);\n        void FailedUser(FubuContinuation redirection = null);\n\n        AuthResult Result();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/ISamlResponseHandler.cs",
    "content": "﻿using System.Linq;\nusing FubuCore.Logging;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public interface ISamlResponseHandler\n    {\n        bool CanHandle(SamlResponse response);\n        void Handle(ISamlDirector director, SamlResponse response);\n    }\n\n    public class SamlAuthenticationSucceeded : LogRecord\n    {\n        public SamlAuthenticationSucceeded()\n        {\n        }\n\n        public SamlAuthenticationSucceeded(SamlResponse response)\n        {\n            Name = response.Subject.Name.Value;\n            Issuer = response.Issuer;\n            SamlId = response.Id;\n        }\n\n        public string Name { get; set; }\n\n        public string Issuer { get; set; }\n\n        public string SamlId { get; set; }\n    }\n\n    public class SamlAuthenticationFailed : LogRecord\n    {\n        public SamlAuthenticationFailed()\n        {\n        }\n\n        public SamlAuthenticationFailed(SamlResponse response)\n        {\n            Errors = response.Errors.Select(x => x.Message).ToArray();\n            Name = response.Subject.Name.Value;\n            Issuer = response.Issuer;\n            SamlId = response.Id;\n        }\n\n        public string Name { get; set; }\n        public string[] Errors { get; set; }\n\n        public string Issuer { get; set; }\n\n        public string SamlId { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/ISamlResponseRedirector.cs",
    "content": "﻿using HtmlTags;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public interface ISamlResponseRedirector\n    {\n        HtmlDocument WriteRedirectionHtml(SamlResponse response);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/NameFormat.cs",
    "content": "﻿namespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public class NameFormat : UriEnum<NameFormat>\n    {\n        public readonly static NameFormat Persistent = new NameFormat(\"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent\");\n        public readonly static NameFormat Transient = new NameFormat(\"urn:oasis:names:tc:SAML:2.0:nameid-format:transient\");\n        public readonly static NameFormat EmailAddress = new NameFormat(\"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\");\n        public readonly static NameFormat EntityIdentifier = new NameFormat(\"urn:oasis:names:tc:SAML:2.0:nameid-format:entity\");\n        public readonly static NameFormat Kerboros = new NameFormat(\"urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos\");\n        public readonly static NameFormat WindowsDomainQualifiedName = new NameFormat(\"urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName\");\n        public readonly static NameFormat X509SubjectName = new NameFormat(\"urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName\");\n        public readonly static NameFormat Unspecified = new NameFormat(\"urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified\");\n\n        private NameFormat(string uri, string description = null) : base(uri, description)\n        {\n        }\n\n        public static NameFormat Get(string uriString)\n        {\n            return get(uriString);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Saml2ServicesRegistry.cs",
    "content": "﻿using FubuMVC.Core.Registration;\nusing FubuMVC.Core.Security.Authentication.Saml2.Certificates;\nusing FubuMVC.Core.Security.Authentication.Saml2.Encryption;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public class Saml2ServicesRegistry : ServiceRegistry\n    {\n        public Saml2ServicesRegistry()\n        {\n            SetServiceIfNone<ISamlDirector, SamlDirector>();\n            SetServiceIfNone<ISamlResponseReader, SamlResponseReader>();\n            SetServiceIfNone<ISamlResponseWriter, SamlResponseWriter>();\n            SetServiceIfNone<ICertificateService, CertificateService>();\n            SetServiceIfNone<IAssertionXmlDecryptor, AssertionXmlDecryptor>();\n            SetServiceIfNone<ICertificateLoader, CertificateLoader>();\n            SetServiceIfNone<ISamlResponseRedirector, SamlResponseRedirector>();\n            SetServiceIfNone<ISamlResponseXmlSigner, SamlResponseXmlSigner>();\n            SetServiceIfNone<IAssertionXmlEncryptor, AssertionXmlEncryptor>();\n\n            AddService<IActivator, Saml2VerificationActivator>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Saml2VerificationActivator.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuCore;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Security.Authentication.Saml2.Certificates;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public class Saml2VerificationActivator : IActivator\n    {\n        private readonly IServiceLocator _services;\n\n        public Saml2VerificationActivator(IServiceLocator services)\n        {\n            _services = services;\n\n        }\n\n        public void Activate(IActivationLog log, IPerfTimer timer)\n        {\n            var repository = _services.VerifyRegistration<ISamlCertificateRepository>(log);\n            _services.VerifyRegistration<IPrincipalBuilder>(log);\n            _services.VerifyAnyRegistrations<ISamlResponseHandler>(log);\n\n            if (repository != null)\n            {\n                checkCertificates(repository, log);\n            }\n        }\n\n\n        private void checkCertificates(ISamlCertificateRepository repository, IActivationLog log)\n        {\n            var loader = _services.GetInstance<ICertificateLoader>();\n\n            repository.AllKnownCertificates().Each(samlCertificate => {\n                try\n                {\n                    var certificate = loader.Load(samlCertificate.Thumbprint);\n                    if (certificate == null)\n                    {\n                        log.MarkFailure(\"Could not load Certificate for Issuer \" + samlCertificate.Issuer);\n                    }\n                }\n                catch (Exception ex)\n                {\n                    log.MarkFailure(\"Could not load Certificate for Issuer \" + samlCertificate.Issuer);\n                    log.MarkFailure(ex);\n                }\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/SamlAuthenticationStrategy.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.Binding;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Security.Authentication.Saml2.Encryption;\nusing FubuMVC.Core.Security.Authentication.Saml2.Validation;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public class SamlAuthenticationStrategy : IAuthenticationStrategy\n    {\n        public const string SamlResponseKey = \"SAMLResponse\";\n        public static readonly AuthResult DoesNotApply = new AuthResult{Success = false};\n\n        private readonly IRequestData _requestData;\n        private readonly ISamlDirector _director;\n        private readonly ISamlResponseReader _reader;\n        private readonly IEnumerable<ISamlValidationRule> _rules;\n        private readonly ILogger _logger;\n        private readonly IEnumerable<ISamlResponseHandler> _strategies;\n\n        public SamlAuthenticationStrategy(IRequestData requestData, ISamlDirector director, ISamlResponseReader reader, IEnumerable<ISamlValidationRule> rules, ILogger logger, IEnumerable<ISamlResponseHandler> strategies)\n        {\n            _requestData = requestData;\n            _director = director;\n            _reader = reader;\n            _rules = rules;\n            _logger = logger;\n            _strategies = strategies;\n        }\n\n        public AuthResult TryToApply()\n        {\n            AuthResult result = AuthResult.Failed();\n\n            _requestData.Value(SamlResponseKey, v => {\n                try\n                {\n                    var xml = v.RawValue as string;\n                    ProcessSamlResponseXml(xml);\n                }\n                catch (Exception e)\n                {\n                    _logger.Error(\"Saml Response handling failed\", e);\n                    _director.FailedUser();\n                }\n\n                result = _director.Result();\n            });\n\n            return result;\n        }\n\n        public virtual void ProcessSamlResponseXml(string xml)\n        {\n            var response = _reader.Read(xml);\n\n            _rules.Each(x => x.Validate(response));\n\n            var handler = _strategies.FirstOrDefault(x => x.CanHandle(response));\n            if (handler == null)\n            {\n                _logger.InfoMessage(() => new SamlAuthenticationFailed(response));\n                _director.FailedUser();\n            }\n            else\n            {\n                handler.Handle(_director, response);\n            }\n        }\n\n        public bool Authenticate(LoginRequest request)\n        {\n            return false;\n        }\n    }\n\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/SamlDirector.cs",
    "content": "﻿using FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Security.Authentication.Saml2.Validation;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public class SamlDirector : ISamlDirector\n    {\n        private readonly IPrincipalBuilder _principalBuilder;\n        private readonly IAuthenticationSession _session;\n        private readonly IPrincipalContext _context;\n        private readonly AuthResult _result;\n\n\n        public SamlDirector(IPrincipalBuilder principalBuilder, IAuthenticationSession session, IPrincipalContext context)\n        {\n            _principalBuilder = principalBuilder;\n            _session = session;\n            _context = context;\n            _result = new AuthResult\n            {\n                Success = false,\n                Continuation =\n                    FubuContinuation.RedirectTo(new LoginRequest\n                    {\n                        Message = SamlValidationKeys.UnableToValidationSamlResponse\n                    }, \"GET\")\n            };\n        }\n\n        public void SuccessfulUser(string username, FubuContinuation redirection = null)\n        {\n            _result.Success = true;\n            _result.Continuation = redirection ?? FubuContinuation.NextBehavior();\n\n            var principal = _principalBuilder.Build(username);\n            _context.Current = principal;\n            _session.MarkAuthenticated(username);\n        }\n\n        public void FailedUser(FubuContinuation redirection = null)\n        {\n            _result.Success = false;\n            if (redirection != null) _result.Continuation = redirection;\n        }\n\n        public AuthResult Result()\n        {\n            return _result;\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/SamlError.cs",
    "content": "﻿using FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public class SamlError\n    {\n        public SamlError()\n        {\n        }\n\n        public SamlError(StringToken token)\n        {\n            Key = token.Key;\n            Message = token.ToString();\n        }\n\n        public string Key;\n        public string Message;\n\n        protected bool Equals(SamlError other)\n        {\n            return string.Equals(Key, other.Key) && string.Equals(Message, other.Message);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((SamlError) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((Key != null ? Key.GetHashCode() : 0)*397) ^ (Message != null ? Message.GetHashCode() : 0);\n            }\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Key: {0}, Message: {1}\", Key, Message);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/SamlName.cs",
    "content": "﻿using System.Xml;\nusing FubuMVC.Core.Security.Authentication.Saml2.Xml;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public class SamlName : ReadsSamlXml\n    {\n        public SamlName()\n        {\n            Type = SamlNameType.NameID;\n            Format = NameFormat.Unspecified;\n        }\n\n        public SamlName(XmlElement element)\n        {\n            // TODO -- read BaseID\n            // TODO -- read EncryptedID\n\n\n            // TODO -- add NameQualifier as URI\n            // TODO -- add SPNameQualifier as URI\n\n            var name = element.FindChild(NameID, AssertionXsd);\n            if (name != null)\n            {\n                Type = SamlNameType.NameID;\n                Value = name.InnerText;\n                Format = NameFormat.Get(name.GetAttribute(FormatAtt)) ?? NameFormat.Unspecified;\n            }\n        }\n\n        public NameFormat Format { get; set; }\n        public SamlNameType Type { get; set; }\n        public string Value { get; set; }\n\n        protected bool Equals(SamlName other)\n        {\n            return Equals(Format, other.Format) && Type == other.Type && string.Equals(Value, other.Value);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((SamlName) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                var hashCode = (Format != null ? Format.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (int) Type;\n                hashCode = (hashCode*397) ^ (Value != null ? Value.GetHashCode() : 0);\n                return hashCode;\n            }\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Format: {0}, Type: {1}, Value: {2}\", Format, Type, Value);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/SamlNameType.cs",
    "content": "﻿namespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public enum SamlNameType\n    {\n        NameID,\n        BaseID,\n        EncryptedID\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/SamlResponse.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Security.Authentication.Saml2.Certificates;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public class SamlResponse\n    {\n        private readonly IDictionary<string, object> _attributes =\n            new Dictionary<string, object>();\n\n        private readonly IList<SamlError> _errors = new List<SamlError>(); \n\n        public SamlResponse()\n        {\n            Attributes = new DictionaryKeyValues<object>(_attributes);\n            Subject = new Subject();\n        }\n\n        public void LogError(SamlError error)\n        {\n            _errors.Add(error);\n        }\n\n        public void LogError(StringToken message)\n        {\n            _errors.Add(new SamlError(message));\n        }\n\n        public IEnumerable<SamlError> Errors\n        {\n            get { return _errors; }\n        } \n\n        public IEnumerable<AudienceRestriction> AudienceRestrictions\n        {\n            get\n            {\n                if (Conditions == null) return new AudienceRestriction[0];\n\n                return Conditions.Conditions.OfType<AudienceRestriction>();\n            }\n        } \n\n        public SamlStatus Status { get; set; }\n        public string Issuer { get; set; }\n        public IEnumerable<ICertificate> Certificates { get; set; }\n        public SignatureStatus Signed { get; set; }\n\n        public AuthenticationStatement Authentication { get; set; }\n\n        public Uri Destination { get; set; }\n        public string Id { get; set; }\n        public DateTimeOffset IssueInstant { get; set; }\n\n        public Subject Subject { get; set; }\n\n        // valid if no conditions\n        public ConditionGroup Conditions { get; set; }\n\n        public IKeyValues<object> Attributes { get; private set; }\n\n        public void AddAttribute(string key, string value)\n        {\n            if (_attributes.ContainsKey(key))\n            {\n                object existing = _attributes[key];\n                if (existing is string)\n                {\n                    var list = new List<string> {existing as string, value};\n                    _attributes[key] = list;\n                }\n\n                else\n                {\n                    existing.As<IList<string>>().Add(value);\n                }\n            }\n            else\n            {\n                _attributes.Add(key, value);\n            }\n        }\n\n        public void AddAudienceRestriction(string audience)\n        {\n            if (Conditions == null)\n            {\n                Conditions = new ConditionGroup();\n            }\n\n            var restriction = Conditions.Conditions.OfType<AudienceRestriction>().FirstOrDefault();\n            if (restriction == null)\n            {\n                restriction = new AudienceRestriction();\n                Conditions.Add(restriction);\n            }\n\n            restriction.Add(audience);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/SamlResponseRedirectionDocument.cs",
    "content": "﻿using HtmlTags;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public class SamlResponseRedirectionDocument : HtmlDocument\n    {\n        public SamlResponseRedirectionDocument(string response, string destination)\n        {\n            Title = \"Saml2 Response Redirection\";\n\n            var form = new FormTag(destination);\n\n            Push(form);\n\n            var hiddenTag = new HiddenTag().Attr(\"name\", SamlAuthenticationStrategy.SamlResponseKey)\n                                           .Attr(\"value\", response);\n\n            Add(hiddenTag);\n\n            Pop();\n\n            AddJavaScript(\"window.onload = function () { document.forms[0].submit(); }\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/SamlResponseRedirector.cs",
    "content": "﻿using FubuMVC.Core.Security.Authentication.Saml2.Encryption;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public class SamlResponseRedirector : ISamlResponseRedirector\n    {\n        private readonly ISamlResponseWriter _writer;\n\n        public SamlResponseRedirector(ISamlResponseWriter writer)\n        {\n            _writer = writer;\n        }\n\n        public HtmlDocument WriteRedirectionHtml(SamlResponse response)\n        {\n            var responseString = _writer.Write(response);\n\n            return new SamlResponseRedirectionDocument(responseString, response.Destination.ToString());\n        } \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/SamlResponseSettings.cs",
    "content": "﻿namespace FubuMVC.Core.Security.Authentication.Saml2\n{\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/SamlStatus.cs",
    "content": "﻿namespace FubuMVC.Core.Security.Authentication.Saml2\n{\n\n\n    public class SamlStatus : UriEnum<SamlStatus>\n    {\n        public static readonly SamlStatus Success = new SamlStatus(\"urn:oasis:names:tc:SAML:2.0:status:Success\", \"The request succeeded\");\n        public static readonly SamlStatus RequesterError = new SamlStatus(\"urn:oasis:names:tc:SAML:2.0:status:Requester\", \"The request could not be performed due to an error on the part of the requester.\");\n        public static readonly SamlStatus ResponderError = new SamlStatus(\"urn:oasis:names:tc:SAML:2.0:status:Responder\", \"The request could not be performed due to an error on the part of the SAML responder or SAML authority.\");\n        public static readonly SamlStatus VersionMismatch = new SamlStatus(\"urn:oasis:names:tc:SAML:2.0:status:VersionMismatch\", \"The SAML responder could not process the request because the version of the request message was incorrect.\");\n\n        private SamlStatus(string uri, string description) : base(uri, description)\n        {\n        }\n\n        /*\n\n\n\n\n\n\n\nThe following second-level status codes are referenced at various places in this specification. Additional second-level status codes MAY be defined in future versions of the SAML specification. System entities are free to define more specific status codes by defining appropriate URI references.\nurn:oasis:names:tc:SAML:2.0:status:AuthnFailed\nThe responding provider was unable to successfully authenticate the principal.\nurn:oasis:names:tc:SAML:2.0:status:InvalidAttrNameOrValue Unexpected or invalid content was encountered within a <saml:Attribute> or\n<saml:AttributeValue> element. urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy\nThe responding provider cannot or will not support the requested name identifier policy.\nurn:oasis:names:tc:SAML:2.0:status:NoAuthnContext\nThe specified authentication context requirements cannot be met by the responder.\nurn:oasis:names:tc:SAML:2.0:status:NoAvailableIDP\nUsed by an intermediary to indicate that none of the supported identity provider <Loc> elements in an\n<IDPList> can be resolved or that none of the supported identity providers are available. urn:oasis:names:tc:SAML:2.0:status:NoPassive\nIndicates the responding provider cannot authenticate the principal passively, as has been requested.\nurn:oasis:names:tc:SAML:2.0:status:NoSupportedIDP\n\nurn:oasis:names:tc:SAML:2.0:status:PartialLogout\nUsed by a session authority to indicate to a session participant that it was not able to propagate logout to all other session participants.\nurn:oasis:names:tc:SAML:2.0:status:ProxyCountExceeded\nIndicates that a responding provider cannot authenticate the principal directly and is not permitted to proxy the request further.\nurn:oasis:names:tc:SAML:2.0:status:RequestDenied\nThe SAML responder or SAML authority is able to process the request but has chosen not to respond. This status code MAY be used when there is concern about the security context of the request message or the sequence of request messages received from a particular requester.\nurn:oasis:names:tc:SAML:2.0:status:RequestUnsupported\nThe SAML responder or SAML authority does not support the request.\nurn:oasis:names:tc:SAML:2.0:status:RequestVersionDeprecated\nThe SAML responder cannot process any requests with the protocol version specified in the request.\nurn:oasis:names:tc:SAML:2.0:status:RequestVersionTooHigh\nThe SAML responder cannot process the request because the protocol version specified in the request message is a major upgrade from the highest protocol version supported by the responder.\nurn:oasis:names:tc:SAML:2.0:status:RequestVersionTooLow\nThe SAML responder cannot process the request because the protocol version specified in the request message is too low.\nurn:oasis:names:tc:SAML:2.0:status:ResourceNotRecognized\nThe resource value provided in the request message is invalid or unrecognized.\nurn:oasis:names:tc:SAML:2.0:status:TooManyResponses\nThe response message would contain more elements than the SAML responder is able to return.\nurn:oasis:names:tc:SAML:2.0:status:UnknownAttrProfile\nAn entity that has no knowledge of a particular attribute profile has been presented with an attribute drawn from that profile.\nurn:oasis:names:tc:SAML:2.0:status:UnknownPrincipal\nThe responding provider does not recognize the principal specified or implied by the request.\nurn:oasis:names:tc:SAML:2.0:status:UnsupportedBinding\nThe SAML responder cannot properly fulfill the request using the protocol binding specified in the request.\n         */\n\n        public static SamlStatus Get(string text)\n        {\n            return get(text);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/SignatureStatus.cs",
    "content": "﻿using FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public class SignatureStatus : StringToken\n    {\n        public static readonly SignatureStatus NotSigned = new SignatureStatus(\"The SamlResponse was not signed\");\n        public static readonly SignatureStatus InvalidSignature = new SignatureStatus(\"The SamlResponse signature was invalid\");\n        public static readonly SignatureStatus Signed = new SignatureStatus(\"The SamlResponse signature is valid\");\n        \n\n        protected SignatureStatus(string defaultValue) : base(null, defaultValue, namespaceByType:true)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Subject.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Xml;\nusing FubuMVC.Core.Security.Authentication.Saml2.Xml;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    // TODO -- add Method!\n    public class Subject : ReadsSamlXml\n    {\n        public Subject()\n        {\n        }\n\n        public Subject(XmlElement element)\n        {\n            Name = new SamlName(element);\n            Confirmations = buildConfirmations(element).ToArray();\n        }\n\n        private IEnumerable<SubjectConfirmation> buildConfirmations(XmlElement element)\n        {\n            foreach (XmlElement confirmationElement in element.GetElementsByTagName(SubjectConfirmation, AssertionXsd))\n            {\n                yield return new SubjectConfirmation(confirmationElement);\n            }\n        } \n\n        public SamlName Name { get; set; }\n    \n        // can have multiple confirmations\n\n        private readonly IList<SubjectConfirmation> _confirmations = new List<SubjectConfirmation>(); \n\n        public SubjectConfirmation[] Confirmations\n        {\n            get { return _confirmations.ToArray(); }\n            set\n            {\n                _confirmations.Clear();\n                _confirmations.AddRange(value);\n            }\n        }\n\n        public void Add(SubjectConfirmation confirmation)\n        {\n            _confirmations.Add(confirmation);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/SubjectConfirmation.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Xml;\nusing FubuMVC.Core.Security.Authentication.Saml2.Xml;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public class SubjectConfirmation : ReadsSamlXml\n    {\n        private readonly IList<SubjectConfirmationData> _data = new List<SubjectConfirmationData>();\n\n        public SubjectConfirmation()\n        {\n        }\n\n        public SubjectConfirmation(XmlElement element)\n        {\n            Method = element.GetAttribute(MethodAtt).ToUri();\n            Name = new SamlName(element);\n            ConfirmationData = buildData(element).ToArray();\n        }\n\n        public Uri Method { get; set; }\n\n        public SamlName Name { get; set; }\n\n        public SubjectConfirmationData[] ConfirmationData\n        {\n            get { return _data.ToArray(); }\n            set\n            {\n                _data.Clear();\n                _data.AddRange(value);\n            }\n        }\n\n        private IEnumerable<SubjectConfirmationData> buildData(XmlElement element)\n        {\n            foreach (XmlElement dataElement in element.GetElementsByTagName(SubjectConfirmationData, AssertionXsd))\n            {\n                yield return new SubjectConfirmationData(dataElement);\n            }\n        }\n\n        protected bool Equals(SubjectConfirmation other)\n        {\n            return Equals(Method, other.Method) && Equals(Name, other.Name) &&\n                   ConfirmationData.SequenceEqual(other.ConfirmationData);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != GetType()) return false;\n            return Equals((SubjectConfirmation) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                int hashCode = (Method != null ? Method.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (Name != null ? Name.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (ConfirmationData != null ? ConfirmationData.GetHashCode() : 0);\n                return hashCode;\n            }\n        }\n\n        public void Add(SubjectConfirmationData data)\n        {\n            _data.Add(data);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/SubjectConfirmationData.cs",
    "content": "﻿using System;\nusing System.Xml;\nusing FubuMVC.Core.Security.Authentication.Saml2.Xml;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public class SubjectConfirmationData : ReadsSamlXml\n    {\n        public SubjectConfirmationData()\n        {\n        }\n\n        public SubjectConfirmationData(XmlElement element)\n        {\n            NotOnOrAfter = element.ReadAttribute<DateTimeOffset>(NotOnOrAfterAtt);\n            Recipient = element.ReadAttribute<Uri>(RecipientAtt);\n        }\n\n        //public DateTimeOffset? NotBefore { get; set; }\n        public DateTimeOffset? NotOnOrAfter { get; set; }\n        public Uri Recipient { get; set; }\n        //public string InResponseTo { get; set; }\n        //public string Address { get; set; }\n\n        // Change this to IValueSource I think.  You could have custom attributes\n        // or custom elements\n        //public IDictionary<string, string> Attributes { get; set; }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/UriEnum.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Security.Authentication.Saml2.Xml;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2\n{\n    public interface UriValue\n    {\n        Uri Uri { get; }\n    }\n\n    public abstract class UriEnum<T> : UriValue where T : UriValue\n    {\n        private readonly Uri _uri;\n        private readonly string _description;\n        private static readonly IList<T> _all = new List<T>();\n\n        protected UriEnum(string uri, string description = null)\n        {\n            _uri = uri.ToUri();\n            _description = description;\n\n            _all.Add(this.As<T>());\n        }\n\n        public Uri Uri\n        {\n            get { return _uri; }\n        }\n\n        public string Description\n        {\n            get { return _description; }\n        }\n\n        protected static T get(string uriString)\n        {\n            return _all.FirstOrDefault(x => x.Uri == uriString.ToUri());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Validation/AudienceValidationRule.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Validation\n{\n    /// <summary>\n    /// The Saml2 spec considers the audience to be \"Any\", so we do too\n    /// </summary>\n    public class AudienceValidationRule : ISamlValidationRule\n    {\n        private readonly string[] _audiences;\n\n        public AudienceValidationRule(string audience)\n        {\n            _audiences = new []{audience};\n        }\n\n        public AudienceValidationRule(params string[] audiences)\n        {\n            _audiences = audiences;\n        }\n\n        public IEnumerable<string> Audiences\n        {\n            get { return _audiences; }\n        }\n\n        public void Validate(SamlResponse response)\n        {\n            var restrictions = response.AudienceRestrictions;\n            if (!restrictions.Any()) return;\n\n            if (!_audiences.Any(x => restrictions.Any(r => r.Audiences.Contains(x))))\n            {\n                response.LogError(new SamlError(SamlValidationKeys.AudiencesDoNotMatch));\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Validation/CertificateValidation.cs",
    "content": "﻿using FubuMVC.Core.Security.Authentication.Saml2.Certificates;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Validation\n{\n    public class CertificateValidation : ISamlValidationRule\n    {\n        private readonly ICertificateService _service;\n\n        public CertificateValidation(ICertificateService service)\n        {\n            _service = service;\n        }\n\n        public void Validate(SamlResponse response)\n        {\n            var key = _service.Validate(response);\n            if (key != SamlValidationKeys.ValidCertificate)\n            {\n                response.LogError(key);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Validation/ConditionTimeFrame.cs",
    "content": "﻿using FubuCore.Dates;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Validation\n{\n    public class ConditionTimeFrame : ISamlValidationRule\n    {\n        private readonly ISystemTime _systemTime;\n\n        public ConditionTimeFrame(ISystemTime systemTime)\n        {\n            _systemTime = systemTime;\n        }\n\n        public void Validate(SamlResponse response)\n        {\n            var now = _systemTime.UtcNow();\n            if (now < response.Conditions.NotBefore || now >= response.Conditions.NotOnOrAfter)\n            {\n                response.LogError(SamlValidationKeys.TimeFrameDoesNotMatch);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Validation/ISamlValidationRule.cs",
    "content": "﻿namespace FubuMVC.Core.Security.Authentication.Saml2.Validation\n{\n    public interface ISamlValidationRule\n    {\n        void Validate(SamlResponse response);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Validation/SamlValidationKeys.cs",
    "content": "﻿using FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Validation\n{\n    public class SamlValidationKeys : StringToken\n    {\n        public static readonly SamlValidationKeys TimeFrameDoesNotMatch = new SamlValidationKeys(\"Outside the valid time frame of this Saml Response\");\n        public static readonly SamlValidationKeys CannotMatchIssuer = new SamlValidationKeys(\"The certificate does not match the issuer\");\n        public static readonly SamlValidationKeys NoValidCertificates = new SamlValidationKeys(\"No valid certificates were found\");\n        public static readonly SamlValidationKeys ValidCertificate = new SamlValidationKeys(\"The certificate was valid\");\n        public static readonly SamlValidationKeys AudiencesDoNotMatch = new SamlValidationKeys(\"Invalid audience for this application\");\n        public static readonly SamlValidationKeys UnableToValidationSamlResponse = new SamlValidationKeys(\"Unable to authenticate this Saml response\");\n\n\n        protected SamlValidationKeys(string defaultValue) : base(null, defaultValue, namespaceByType:true)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Validation/SignatureIsRequired.cs",
    "content": "﻿namespace FubuMVC.Core.Security.Authentication.Saml2.Validation\n{\n    public class SignatureIsRequired : ISamlValidationRule\n    {\n        public void Validate(SamlResponse response)\n        {\n            if (response.Signed != SignatureStatus.Signed)\n            {\n                response.LogError(new SamlError(response.Signed));\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Xml/ReadsSamlXml.cs",
    "content": "﻿namespace FubuMVC.Core.Security.Authentication.Saml2.Xml\n{\n    public class ReadsSamlXml\n    {\n        public const string AssertionXsd = \"urn:oasis:names:tc:SAML:2.0:assertion\";\n        public const string AssertionPrefix = \"saml2\";\n        public const string ProtocolXsd = \"urn:oasis:names:tc:SAML:2.0:protocol\";\n        public const string ProtocolPrefix = \"samlp\";\n        public const string EncryptedXsd = \"http://www.w3.org/2001/04/xmlenc#\";\n\n        protected const string ID = \"ID\";\n        protected const string ResponseIdPrefix = \"SamlResponse-\";\n        protected const string AssertionIdPrefix = \"SamlAssertion-\";\n        protected const string Destination = \"Destination\";\n        protected const string IssueInstant = \"IssueInstant\";\n        protected const string StatusCode = \"StatusCode\";\n        protected const string ValueAtt = \"Value\";\n        protected const string AttributeStatement = \"AttributeStatement\";\n        protected const string NameAtt = \"Name\";\n        protected const string AttributeValue = \"AttributeValue\";\n        protected const string Attribute = \"Attribute\";\n        protected const string Signature = \"Signature\";\n        protected const string Issuer = \"Issuer\";\n        protected const string ConditionsElem = \"Conditions\";\n        protected const string Subject = \"Subject\";\n        protected const string NameID = \"NameID\";\n        protected const string SubjectConfirmation = \"SubjectConfirmation\";\n        protected const string SubjectConfirmationData = \"SubjectConfirmationData\";\n        protected const string MethodAtt = \"Method\";\n\n        protected const string NotOnOrAfterAtt = \"NotOnOrAfter\";\n        protected const string RecipientAtt = \"Recipient\";\n        protected const string NotBeforeAtt = \"NotBefore\";\n        protected const string AudienceRestriction = \"AudienceRestriction\";\n        protected const string Audience = \"Audience\";\n        protected const string FormatAtt = \"Format\";\n\n        protected const string AuthnStatement = \"AuthnStatement\";\n        protected const string AuthnInstant = \"AuthnInstant\";\n        protected const string SessionIndexAtt = \"SessionIndex\";\n        protected const string SessionNotOnOrAfterAtt = \"SessionNotOnOrAfter\";\n        protected const string AuthnContext = \"AuthnContext\";\n        protected const string AuthnContextDeclRef = \"AuthnContextDeclRef\";\n        protected const string AuthnContextClassRef = \"AuthnContextClassRef\";\n        protected const string NameFormatAtt = \"NameFormat\";\n        protected const string AssertionElem = \"Assertion\";\n        protected const string EncryptedAssertion = \"EncryptedAssertion\";\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Xml/SamlBasicExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Xml;\nusing FubuCore;\nusing FubuCore.Conversion;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Xml\n{\n    public static class SamlBasicExtensions\n    {\n        private static readonly IObjectConverter converter = new ObjectConverter();\n\n        public static IEnumerable<XmlElement> Children(this XmlElement element, string name, string xsd)\n        {\n            foreach (XmlNode node in element.GetElementsByTagName(name, SamlResponseXmlReader.AssertionXsd))\n            {\n                yield return (XmlElement) node;\n            }\n        }\n\n        public static XmlElement FindChild(this XmlElement element, string name, string xsd = SamlResponseXmlReader.AssertionXsd)\n        {\n            var children = element.GetElementsByTagName(name, xsd);\n            return (XmlElement) (children.Count > 0 ? children[0] : null);\n        }\n\n        public static XmlElement FindChild(this XmlDocument document, string name, string xsd = SamlResponseXmlReader.AssertionXsd)\n        {\n            var element = document.DocumentElement;\n            var children = element.GetElementsByTagName(name, xsd);\n            return (XmlElement)(children.Count > 0 ? children[0] : null);\n        }\n\n        public static XmlElement EncryptedChild(this XmlDocument document, string name)\n        {\n            return document.FindChild(name, SamlResponseXmlReader.EncryptedXsd);\n        }\n\n        public static XmlElement EncryptedChild(this XmlElement element, string name)\n        {\n            return element.FindChild(name, SamlResponseXmlReader.EncryptedXsd);\n        }\n\n        public static Uri ToUri(this string uri)\n        {\n            if (uri.IsEmpty()) return null;\n\n            return new Uri(uri);\n        }\n\n        public static T ToEnumValue<T>(this string text)\n        {\n            return (T) Enum.Parse(typeof (T), text);\n        }\n\n        public static SamlStatus ToSamlStatus(this string text)\n        {\n            return SamlStatus.Get(text);\n        }\n\n        public static T ReadAttribute<T>(this XmlElement element, string attribute) \n        {\n            return element.HasAttribute(attribute) ? converter.FromString<T>(element.GetAttribute(attribute)) : default(T);\n        }\n\n        public static T ReadChildText<T>(this XmlElement element, string child)\n        {\n            var childElement = element.FindChild(child);\n            if (childElement == null) return default(T);\n\n            return converter.FromString<T>(childElement.InnerText);\n        }\n\n        public static XmlElement Attr(this XmlElement element, string name, string value)\n        {\n            element.SetAttribute(name, value);\n            return element;\n        }\n\n        public static XmlElement Attr(this XmlElement element, string name, Uri value)\n        {\n            element.SetAttribute(name, value.ToString());\n            return element;\n        }\n\n        public static XmlElement Attr(this XmlElement element, string name, DateTimeOffset? value)\n        {\n            if (value == null) return element;\n\n            element.SetAttribute(name, XmlConvert.ToString(value.Value));\n            return element;\n        }\n\n        public static XmlElement Text(this XmlElement element, string text)\n        {\n            element.InnerText = text;\n            return element;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Xml/SamlResponseXmlReader.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Security.Cryptography.X509Certificates;\nusing System.Security.Cryptography.Xml;\nusing System.Xml;\nusing FubuMVC.Core.Security.Authentication.Saml2.Certificates;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Xml\n{\n    public class SamlResponseXmlReader : ReadsSamlXml\n    {\n        private readonly XmlDocument _document;\n        private readonly XmlElement _root;\n\n        public SamlResponseXmlReader(string xml)\n        {\n            _document = new XmlDocument();\n            _document.LoadXml(xml);\n            _root = _document.DocumentElement;\n        }\n\n        public SamlResponseXmlReader(XmlDocument document)\n        {\n            _document = document;\n            _root = _document.DocumentElement;\n        }\n\n        private XmlElement find(string elementName, string xsd)\n        {\n            var elements = _document.GetElementsByTagName(elementName, xsd);\n            return (XmlElement) (elements.Count > 0 ? elements[0] : null);\n        }\n\n        private string findText(string elementName, string xsd)\n        {\n            var element = find(elementName, xsd);\n            return element == null ? null : element.InnerText;\n        }\n\n        // This assumes signing cert is embedded in the signature\n        private void readSignaturesAndCertificates(SamlResponse response)\n        {\n            var element = find(Signature, \"http://www.w3.org/2000/09/xmldsig#\");\n            if (element == null)\n            {\n                response.Signed = SignatureStatus.NotSigned;\n                return;\n            }\n\n            var signedXml = new SignedXml(_document);\n            signedXml.LoadXml(element);\n\n            response.Signed = signedXml.CheckSignature()\n                                  ? SignatureStatus.Signed\n                                  : SignatureStatus.InvalidSignature;\n\n            response.Certificates = signedXml\n                .KeyInfo.OfType<KeyInfoX509Data>()\n                .SelectMany(x => {\n                    return x.Certificates.OfType<X509Certificate2>()\n                    .Select(cert => new X509CertificateWrapper(cert));\n                });\n        }\n\n        public string ReadIssuer()\n        {\n            return findText(Issuer, AssertionXsd);\n        }\n\n        public SamlResponse Read()\n        {\n            var response = new SamlResponse\n            {\n                Id = _root.GetAttribute(ID),\n                Destination = _root.GetAttribute(Destination).ToUri(),\n                IssueInstant = _root.ReadAttribute<DateTimeOffset>(IssueInstant),\n                Issuer = ReadIssuer(),\n                Status = readStatusCode(),\n                Conditions = new ConditionGroup(find(ConditionsElem, AssertionXsd)),\n                Subject = new Subject(find(Subject, AssertionXsd)),\n                Authentication = new AuthenticationStatement(_document)\n            };\n\n            readSignaturesAndCertificates(response);\n            readAttributes(response);\n\n            return response;\n        }\n\n        // TODO -- test payload w/o attributes\n        private void readAttributes(SamlResponse response)\n        {\n            XmlElement attributes = find(AttributeStatement, AssertionXsd);\n            if (attributes == null) return;\n\n            foreach (XmlElement attElement in attributes.GetElementsByTagName(Attribute, AssertionXsd))\n            {\n                string key = attElement.GetAttribute(NameAtt);\n                foreach (XmlElement valueElement in attElement.GetElementsByTagName(AttributeValue, AssertionXsd))\n                {\n                    response.AddAttribute(key, valueElement.InnerText);\n                }\n            }\n        }\n\n\n        private SamlStatus readStatusCode()\n        {\n            return find(StatusCode, ProtocolXsd).GetAttribute(ValueAtt).ToSamlStatus();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Xml/SamlResponseXmlWriter.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Xml;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Xml\n{\n    public class SamlResponseXmlWriter : ReadsSamlXml\n    {\n        private readonly SamlResponse _response;\n        private XmlDocument _document;\n        private readonly XmlElement _root;\n        private XmlElementStack _assertion;\n\n        public SamlResponseXmlWriter(SamlResponse response)\n        {\n            _response = response;\n\n            var nameTable = new NameTable();\n            var namespaceManager = new XmlNamespaceManager(nameTable);\n            namespaceManager.AddNamespace(\"saml2\", AssertionXsd);\n            namespaceManager.AddNamespace(\"samlp\", ProtocolXsd);\n\n            _document = new XmlDocument(nameTable);\n            _root = _document.CreateElement(\"Response\", ProtocolXsd);\n            _document.AppendChild(_root);\n\n            _root.SetAttribute(\"Version\", \"2.0\");\n        }\n\n        private XmlElementStack start(string name, string xsd = AssertionXsd, string prefix = AssertionPrefix)\n        {\n            var stack = new XmlElementStack(_document, xsd, prefix);\n            stack.Push(name);\n\n            return stack;\n        }\n\n        public XmlDocument Write()\n        {\n            writeRootAttributes();\n            writeStatusCode();\n            writeIssuer();\n\n            writeAssertion();\n            writeSubject();\n            writeConditions();\n            writeAuthenticationStatement();\n            writeAttributes();\n\n            return _document;\n        }\n\n        private void writeAttributes()\n        {\n            var root = _assertion.Child(AttributeStatement);\n            var keys = _response.Attributes.GetKeys();\n\n            keys.Each(key => {\n                var attributeElement = root.Child(Attribute)\n                    .Attr(NameAtt, key)\n                    .Attr(NameFormatAtt, \"urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified\".ToUri());\n                \n                \n                var value = _response.Attributes.Get(key);\n\n                // TODO -- need to get a UT on this.\n                var enumerable = value as IEnumerable<string>;\n                if (enumerable != null)\n                {\n                    enumerable.Each(x => {\n                        attributeElement.Add(AttributeValue, null, \"saml2\").InnerText = x;\n                    });\n                }\n                else\n                {\n                    attributeElement.Add(AttributeValue, null, \"saml2\").InnerText = value as string;\n                }\n            });\n        }\n\n        private void writeAuthenticationStatement()\n        {\n            var authXmlStack = _assertion.Child(AuthnStatement);\n            var statement = _response.Authentication;\n            authXmlStack.Attr(AuthnInstant, statement.Instant);\n            authXmlStack.Attr(SessionIndexAtt, statement.SessionIndex);\n            if (statement.SessionNotOnOrAfter != null)\n            {\n                authXmlStack.Attr(SessionNotOnOrAfterAtt, statement.SessionNotOnOrAfter.Value);\n            }\n\n            authXmlStack.Push(AuthnContext);\n            if (statement.DeclarationReference != null)\n            {\n                authXmlStack.Add(AuthnContextDeclRef).Text(statement.DeclarationReference.ToString());\n            }\n            if (statement.ClassReference != null)\n            {\n                authXmlStack.Add(AuthnContextClassRef).Text(statement.ClassReference.ToString());\n            }\n        }\n\n        private void writeConditions()\n        {\n            var conditions = _assertion.Child(ConditionsElem)\n                      .Attr(NotBeforeAtt, _response.Conditions.NotBefore)\n                      .Attr(NotOnOrAfterAtt, _response.Conditions.NotOnOrAfter);\n\n            _response.Conditions.Conditions.OfType<AudienceRestriction>().Each(x => {\n                var restriction = conditions.Child(AudienceRestriction);\n                x.Audiences.Each(a => restriction.Add(Audience).Text(a.ToString()));\n            });\n        }\n\n        private void writeAssertion()\n        {\n            _assertion = start(AssertionElem)\n                .Attr(ID, AssertionIdPrefix + _response.Id)\n                .Attr(IssueInstant, _response.IssueInstant);\n\n            _assertion.Push(Issuer).InnerText = _response.Issuer.ToString();\n\n            _assertion.Pop();\n        }\n\n        private void writeSubject()\n        {\n            var subject = _assertion.Child(Subject);\n            var subjectName = _response.Subject.Name;\n\n            // TODO -- going to need more \n            //                              .Attr(\"Format\", \"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent\")\n            //                              .Attr(\"NameQualifier\", _response.Issuer);\n            subject.Add(subjectName.Type.ToString())\n                      .Text(subjectName.Value)\n                      .Attr(FormatAtt, subjectName.Format.Uri);\n\n            _response.Subject.Confirmations.Each(confirmation => {\n                subject.Push(SubjectConfirmation).Attr(MethodAtt, confirmation.Method);\n                \n                var confirmationName = confirmation.Name;\n                if(confirmationName != null)\n                {\n                    subject.Add(confirmationName.Type.ToString())\n                          .Text(confirmationName.Value)\n                          .Attr(FormatAtt, confirmationName.Format.Uri);\n                }\n\n                confirmation.ConfirmationData.Each(data => {\n                   subject.Add(SubjectConfirmationData)\n                              .Attr(NotOnOrAfterAtt, data.NotOnOrAfter)\n                              .Attr(RecipientAtt, data.Recipient);\n                });\n\n                subject.Pop();\n            });\n        }\n\n        private void writeIssuer()\n        {\n            start(Issuer).Text(_response.Issuer.ToString());\n        }\n\n        private void writeStatusCode()\n        {\n            if (_response.Status == null)\n            {\n                throw new InvalidOperationException(\"Status is missing\");\n            }\n\n            start(\"Status\", ProtocolXsd, ProtocolPrefix)\n                .Push(\"StatusCode\")\n                .Attr(\"Value\", _response.Status.Uri)\n                .Attr(\"Version\", \"2.0\");\n        }\n\n        private void writeRootAttributes()\n        {\n            _root.SetAttribute(ID, ResponseIdPrefix+_response.Id);\n            _root.SetAttribute(Destination, _response.Destination.ToString());\n            _root.SetAttribute(IssueInstant, XmlConvert.ToString(_response.IssueInstant));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Saml2/Xml/XmlElementStack.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Xml;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Security.Authentication.Saml2.Xml\n{\n    public class XmlElementStack : ReadsSamlXml\n    {\n        private readonly string _xsd;\n        private readonly Stack<XmlElement> _elements = new Stack<XmlElement>();\n        private readonly XmlDocument _document;\n        private string _prefix;\n\n        public XmlElementStack(XmlDocument document, string xsd, string prefix)\n        {\n            _document = document;\n            _xsd = xsd;\n            _prefix = prefix;\n            \n            _elements.Push(_document.DocumentElement);\n        }\n\n        public XmlElementStack(XmlElement starting, string xsd, string prefix)\n        {\n            _document = starting.OwnerDocument;\n            _elements.Push(starting);\n            _xsd = xsd;\n            _prefix = prefix;\n        }\n\n        public XmlElement Current\n        {\n            get { return _elements.Peek(); }\n        }\n\n        public XmlElement Push(string name, string xsd = null, string prefix = null)\n        {\n            var element = Add(name, xsd, prefix);\n\n            _elements.Push(element);\n\n            return element;\n        }\n\n        public XmlElementStack Child(string name, string xsd = null, string prefix = null)\n        {\n            var element = Add(name, xsd, prefix);\n            return new XmlElementStack(element, xsd ?? _xsd, prefix ?? _prefix);\n        }\n\n        public void Pop()\n        {\n            _elements.Pop();\n        }\n\n        public XmlElement Add(string name, string xsd = null, string prefix = null)\n        {\n            var element = _document.CreateElement(prefix ?? _prefix, name, xsd ?? _xsd);\n            Current.AppendChild(element);\n\n            return element;\n        }\n\n        public XmlElementStack Text(string text)\n        {\n            Current.InnerText = text;\n            return this;\n        }\n\n        public XmlElementStack Attr(string name, string value)\n        {\n            if (value.IsNotEmpty())\n            {\n                Current.Attr(name, value);\n            }\n            return this;\n        }\n\n        public XmlElementStack Attr(string name, DateTimeOffset value)\n        {\n            Current.Attr(name, XmlConvert.ToString(value));\n\n            return this;\n        }\n\n        public XmlElementStack Attr(string name, Uri value)\n        {\n            if (value != null)\n            {\n                Current.Attr(name, value.ToString());\n            }\n\n            return this;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/ThreadPrincipalContext.cs",
    "content": "using System.Security.Principal;\nusing System.Threading;\nusing System.Web;\n\nnamespace FubuMVC.Core.Security.Authentication\n{\n    public class ThreadPrincipalContext : IPrincipalContext\n    {\n        private IPrincipal _principal;\n\n        public IPrincipal Current\n        {\n            get { return _principal; }\n            set\n            {\n                _principal = value;\n                Thread.CurrentPrincipal = value;\n                if (HttpContext.Current != null)\n                {\n                    HttpContext.Current.User = value;\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Tickets/AuthenticationTicket.cs",
    "content": "using System;\n\nnamespace FubuMVC.Core.Security.Authentication.Tickets\n{\n    public class AuthenticationTicket\n    {\n        public DateTime LastAccessed { get; set; }\n        public DateTime Expiration { get; set; }\n        public string UserName { get; set;}\n        public string UserData { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Tickets/Encryption.cs",
    "content": "using System;\nusing System.IO;\nusing System.Security.Cryptography;\nusing System.Text;\n\nnamespace FubuMVC.Core.Security.Authentication.Tickets\n{\n    public class EncryptionSettings\n    {\n        public EncryptionSettings()\n        {\n            Password = \"something\";\n            \n        \n        }\n\n        public string Password { get; set; }\n    }\n\n    public interface IEncryptor\n    {\n        string Decrypt(string cipherText);\n        string Encrypt(string clearText);\n    }\n\n    public class Encryptor : IEncryptor\n    {\n        private readonly EncryptionSettings _settings;\n\n        public Encryptor(EncryptionSettings settings)\n        {\n            _settings = settings;\n        }\n\n\n        private static readonly byte[] _salt = new byte[]{\n            0x45, 0xF1, 0x61, 0x6e, 0x20, 0x00, 0x65, 0x64, 0x76, 0x65, 0x64, 0x03,\n            0x76\n        };\n\n        public string Decrypt(string cipherText)\n        {\n            var cipherBytes = Convert.FromBase64String(cipherText);\n            var pdb = new Rfc2898DeriveBytes(_settings.Password, _salt);\n            var decryptedData = Decrypt(cipherBytes, pdb.GetBytes(32), pdb.GetBytes(16));\n            return Encoding.Unicode.GetString(decryptedData);\n        }\n\n        public static byte[] Decrypt(byte[] cipherData, byte[] key, byte[] iv)\n        {\n            var stream = new MemoryStream();\n            CryptoStream cryptoStream = null;\n            try\n            {\n                var rijndael = Rijndael.Create();\n                rijndael.Key = key;\n                rijndael.IV = iv;\n                cryptoStream = new CryptoStream(stream, rijndael.CreateDecryptor(), CryptoStreamMode.Write);\n                cryptoStream.Write(cipherData, 0, cipherData.Length);\n                cryptoStream.FlushFinalBlock();\n                return stream.ToArray();\n            }\n            catch\n            {\n                return null;\n            }\n            finally\n            {\n                if (cryptoStream != null) cryptoStream.Close();\n            }\n        }\n\n        public string Encrypt(string clearText)\n        {\n            var clearBytes = Encoding.Unicode.GetBytes(clearText);\n            var rfc2898DeriveBytes = new Rfc2898DeriveBytes(_settings.Password, _salt);\n            var encryptedData = encrypt(clearBytes, rfc2898DeriveBytes.GetBytes(32), rfc2898DeriveBytes.GetBytes(16));\n            return Convert.ToBase64String(encryptedData);\n        }\n\n\n        private static byte[] encrypt(byte[] clearData, byte[] key, byte[] iv)\n        {\n            var ms = new MemoryStream();\n            CryptoStream cs = null;\n            try\n            {\n                var alg = Rijndael.Create();\n                alg.Key = key;\n                alg.IV = iv;\n                cs = new CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write);\n                cs.Write(clearData, 0, clearData.Length);\n                cs.FlushFinalBlock();\n                return ms.ToArray();\n            }\n            catch\n            {\n                return null;\n            }\n            finally\n            {\n                cs.Close();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Tickets/IAuthenticationTicketEncryptor.cs",
    "content": "namespace FubuMVC.Core.Security.Authentication.Tickets\n{\n    public interface IAuthenticationTicketEncryptor\n    {\n        string Encrypt(AuthenticationTicket ticket);\n        AuthenticationTicket Decrypt(string text);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Tickets/ITicketSource.cs",
    "content": "namespace FubuMVC.Core.Security.Authentication.Tickets\n{\n    public interface ITicketSource\n    {\n        AuthenticationTicket CurrentTicket();\n        void Persist(AuthenticationTicket ticket);\n        void Delete();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Tickets/TicketAuthenticationSession.cs",
    "content": "using System.Diagnostics;\nusing FubuCore.Dates;\n\nnamespace FubuMVC.Core.Security.Authentication.Tickets\n{\n    public class TicketAuthenticationSession : IAuthenticationSession\n    {\n        private readonly ITicketSource _source;\n        private readonly ISystemTime _systemTime;\n        private readonly AuthenticationSettings _settings;\n\n        public TicketAuthenticationSession(ITicketSource source, ISystemTime systemTime, AuthenticationSettings settings)\n        {\n            _source = source;\n            _systemTime = systemTime;\n            _settings = settings;\n        }\n\n        public void MarkAccessed()\n        {\n            var current = _source.CurrentTicket();\n            current.LastAccessed = _systemTime.UtcNow();\n\n            _source.Persist(current);\n        }\n\n        public string PreviouslyAuthenticatedUser()\n        {\n            var current = _source.CurrentTicket();\n            if (current == null) return null;\n\n            if (IsExpired(current))\n            {\n                _source.Delete();\n                return null;\n            }\n\n            return current.UserName;\n        }\n\n        public virtual bool IsExpired(AuthenticationTicket ticket)\n        {\n            var now = _systemTime.UtcNow();\n            Debug.WriteLine(\"'Now' is \" + now);\n\n            return _settings.SlidingExpiration\n                       ? now.Subtract(ticket.LastAccessed).TotalMinutes >= _settings.ExpireInMinutes\n                       : now >=\n                         ticket.Expiration;\n        }\n\n        public void MarkAuthenticated(string userName)\n        {\n            var ticket = new AuthenticationTicket{\n                UserName = userName,\n                LastAccessed = _systemTime.UtcNow()\n            };\n\n            if (_settings.SlidingExpiration)\n            {\n                ticket.Expiration = _systemTime.UtcNow().AddMinutes(_settings.ExpireInMinutes);\n            }\n\n            _source.Persist(ticket);\n        }\n\n        public void ClearAuthentication()\n        {\n            _source.Delete();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Windows/ApplyWindowsAuthentication.cs",
    "content": "﻿namespace FubuMVC.Core.Security.Authentication.Windows\n{\n    public class ApplyWindowsAuthentication : IFubuRegistryExtension\n    {\n        public void Configure(FubuRegistry registry)\n        {\n            registry.Actions.FindWith<WindowsActionSource>();\n            registry.Services.IncludeRegistry<WindowsAuthenticationServiceRegistry>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Windows/AspNetWindowsAuthenticationContext.cs",
    "content": "﻿using System;\nusing System.Security.Principal;\nusing System.Web;\n\nnamespace FubuMVC.Core.Security.Authentication.Windows\n{\n    public class AspNetWindowsAuthenticationContext : IWindowsAuthenticationContext\n    {\n        private readonly HttpContextBase _context;\n\n        public AspNetWindowsAuthenticationContext(HttpContextBase context)\n        {\n            _context = context;\n        }\n\n        public WindowsPrincipal Current()\n        {\n            var identity = _context.User.Identity as WindowsIdentity;\n            if (identity == null)\n            {\n                throw new InvalidOperationException(\"User identity must be a WindowsIdentity\");\n            }\n\n            return identity == null ? null : new WindowsPrincipal(identity);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Windows/DefaultWindowsPrincipalHandler.cs",
    "content": "﻿using System.Security.Principal;\n\nnamespace FubuMVC.Core.Security.Authentication.Windows\n{\n    public class DefaultWindowsPrincipalHandler : IWindowsPrincipalHandler\n    {\n        public bool Authenticated(IPrincipal principal)\n        {\n            return true;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Windows/IWindowsAuthentication.cs",
    "content": "﻿using System.Security.Principal;\nusing FubuMVC.Core.Continuations;\n\nnamespace FubuMVC.Core.Security.Authentication.Windows\n{\n    public interface IWindowsAuthentication\n    {\n        FubuContinuation Authenticate(WindowsSignInRequest request, WindowsPrincipal principal);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Windows/IWindowsAuthenticationContext.cs",
    "content": "﻿using System.Security.Principal;\n\nnamespace FubuMVC.Core.Security.Authentication.Windows\n{\n    // This is probably going to vary by the host (i.e., ASP.NET vs. Self Host vs. OWIN). Good luck w/ OWIN.\n    public interface IWindowsAuthenticationContext\n    {\n        WindowsPrincipal Current();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Windows/IWindowsPrincipalHandler.cs",
    "content": "﻿using System.Security.Principal;\n\nnamespace FubuMVC.Core.Security.Authentication.Windows\n{\n    public interface IWindowsPrincipalHandler\n    {\n        bool Authenticated(IPrincipal principal);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Windows/SuccessfulWindowsAuthentication.cs",
    "content": "﻿using FubuMVC.Core.Security.Authentication.Auditing;\n\nnamespace FubuMVC.Core.Security.Authentication.Windows\n{\n    public class SuccessfulWindowsAuthentication : AuditMessage\n    {\n        public string User { get; set; }\n\n        protected bool Equals(SuccessfulWindowsAuthentication other)\n        {\n            return string.Equals(User, other.User);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((SuccessfulWindowsAuthentication) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (User != null ? User.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"User: {0}\", User);\n        }\n    }\n\n    public class FailedWindowsAuthentication : AuditMessage\n    {\n        public string User { get; set; }\n\n        protected bool Equals(FailedWindowsAuthentication other)\n        {\n            return string.Equals(User, other.User);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((FailedWindowsAuthentication) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (User != null ? User.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Failed windows authentication with: {0}\", User);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Windows/WindowsActionSource.cs",
    "content": "﻿using System.ComponentModel;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Security.Authentication.Windows\n{\n    [Description(\"Adds an endpoint for windows authentication\")]\n    public class WindowsActionSource : IActionSource\n    {\n        Task<ActionCall[]> IActionSource.FindActions(Assembly applicationAssembly)\n        {\n            return Task.FromResult(new[] {ActionCall.For<WindowsController>(x => x.Login(null))});\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Windows/WindowsAuthentication.cs",
    "content": "﻿using System.Security.Principal;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Security.Authentication.Auditing;\n\nnamespace FubuMVC.Core.Security.Authentication.Windows\n{\n    public class WindowsAuthentication : IWindowsAuthentication\n    {\n        private readonly IAuthenticationSession _session;\n        private readonly IWindowsPrincipalHandler _handler;\n        private readonly ILoginAuditor _auditor;\n\n        public WindowsAuthentication(IAuthenticationSession session, IWindowsPrincipalHandler handler, ILoginAuditor auditor)\n        {\n            _session = session;\n            _handler = handler;\n            _auditor = auditor;\n        }\n\n\n        public FubuContinuation Authenticate(WindowsSignInRequest request, WindowsPrincipal principal)\n        {\n            if (_handler.Authenticated(principal))\n            {\n                _session.MarkAuthenticated(principal.Identity.Name);\n                _auditor.Audit(new SuccessfulWindowsAuthentication{User = principal.Identity.Name});\n                \n                return FubuContinuation.RedirectTo(request.Url);\n            }\n            else\n            {\n                _auditor.Audit(new FailedWindowsAuthentication{User = principal.Identity.Name});\n\n                return FubuContinuation.RedirectTo(new LoginRequest {Url = request.Url}, \"GET\");\n            }\n\n            \n            \n\n            \n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Windows/WindowsAuthenticationServiceRegistry.cs",
    "content": "﻿using FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.Security.Authentication.Windows\n{\n    public class WindowsAuthenticationServiceRegistry : ServiceRegistry\n    {\n        public WindowsAuthenticationServiceRegistry()\n        {\n            SetServiceIfNone<IWindowsAuthenticationContext, AspNetWindowsAuthenticationContext>();\n            SetServiceIfNone<IWindowsPrincipalHandler, DefaultWindowsPrincipalHandler>();\n            SetServiceIfNone<IWindowsAuthentication, WindowsAuthentication>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Windows/WindowsController.cs",
    "content": "﻿using FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Security.Authorization;\n\nnamespace FubuMVC.Core.Security.Authentication.Windows\n{\n    [NotAuthenticated]\n    public class WindowsController\n    {\n        private readonly IWindowsAuthenticationContext _context;\n        private readonly IWindowsAuthentication _strategy;\n\n        public WindowsController(IWindowsAuthenticationContext context, IWindowsAuthentication strategy)\n        {\n            _context = context;\n            _strategy = strategy;\n        }\n\n        [UrlPattern(\"login/windows\")]\n        public FubuContinuation Login(WindowsSignInRequest request)\n        {\n            var principal = _context.Current();\n            return _strategy.Authenticate(request, principal);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authentication/Windows/WindowsSignInRequest.cs",
    "content": "﻿using FubuCore;\n\nnamespace FubuMVC.Core.Security.Authentication.Windows\n{\n    public class WindowsSignInRequest\n    {\n        private string _url;\n\n        [QueryString]\n        public string Url\n        {\n            get\n            {\n                if (_url.IsEmpty())\n                {\n                    _url = \"~/\";\n                }\n\n                return _url;\n            }\n            set { _url = value; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/AllowRole.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Property, AllowMultiple = false)]\n    public class AllowRoleAttribute : ModifyChainAttribute\n    {\n        private readonly string[] _roles;\n\n        public AllowRoleAttribute(params string[] roles)\n        {\n            _roles = roles;\n        }\n\n        public string[] Roles\n        {\n            get { return _roles; }\n        }\n\n        public override void Alter(ActionCallBase call)\n        {\n            var authorizationNode = call.ParentChain().Authorization;\n            _roles.Each(r => authorizationNode.AddRole(r));\n        }\n    }\n\n    /// <summary>\n    /// Users with the designated role are allowed to access this resource\n    /// </summary>\n    public class AllowRole : IAuthorizationPolicy\n    {\n        private readonly string _role;\n\n        public AllowRole(string role)\n        {\n            _role = role;\n        }\n\n        public AuthorizationRight RightsFor(IFubuRequestContext request)\n        {\n            return PrincipalRoles.IsInRole(_role) ? AuthorizationRight.Allow : AuthorizationRight.None;\n        }\n\n        public string Role\n        {\n            get { return _role; }\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Allow for role: {0}\", _role);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/AlwaysAllowPolicy.cs",
    "content": "﻿using FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public class AlwaysAllowPolicy : IAuthorizationPolicy\n    {\n        public AuthorizationRight RightsFor(IFubuRequestContext request)\n        {\n            return AuthorizationRight.Allow;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/AlwaysDenyPolicy.cs",
    "content": "﻿using FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public class AlwaysDenyPolicy : IAuthorizationPolicy\n    {\n        public AuthorizationRight RightsFor(IFubuRequestContext request)\n        {\n            return AuthorizationRight.Deny;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/AuthorizationBehavior.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    // Mostly tested through integration tests now\n    public class AuthorizationBehavior : WrappingBehavior\n    {\n        // More on this interface below\n        private readonly IAuthorizationNode _authorization;\n        private readonly IFubuRequestContext _context;\n        private readonly IAuthorizationFailureHandler _failureHandler;\n        private readonly SecuritySettings _settings;\n\n        public AuthorizationBehavior(IAuthorizationNode authorization, IFubuRequestContext context, IAuthorizationFailureHandler failureHandler, SecuritySettings settings)\n        {\n            _authorization = authorization;\n            _context = context;\n            _failureHandler = failureHandler;\n            _settings = settings;\n        }\n\n        public IEnumerable<IAuthorizationPolicy> Policies => _authorization.Policies;\n\n        protected override async Task invoke(Func<Task> func)\n        {\n            if (!_settings.AuthorizationEnabled)\n            {\n                await func().ConfigureAwait(false);\n                return;\n            }\n\n            var access = _authorization.IsAuthorized(_context);\n\n            // If authorized, continue to the next behavior in the \n            // chain (filters, controller actions, views, etc.)\n            if (access == AuthorizationRight.Allow)\n            {\n                await func().ConfigureAwait(false);\n            }\n            else\n            {\n                // If authorization fails, hand off to the failure handler\n                // and stop the inner behaviors from executing\n                var continuation = _failureHandler.Handle();\n                _context.Service<IContinuationProcessor>().Continue(continuation, Inner); \n            }\n\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/AuthorizationByService.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public class AuthorizationByService<T> : IAuthorizationPolicy where T : class\n    {\n        private readonly Func<T, AuthorizationRight> _func;\n\n        public AuthorizationByService(Func<T, AuthorizationRight> func)\n        {\n            _func = func;\n        }\n\n        public AuthorizationByService(Func<T, bool> filter) : this(x => filter(x) ? AuthorizationRight.Allow : AuthorizationRight.Deny)\n        {\n        }\n\n        public AuthorizationRight RightsFor(IFubuRequestContext request)\n        {\n            return _func(request.Service<T>());\n        }\n    }\n\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/AuthorizationCheckPolicy.cs",
    "content": "﻿using FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public class AuthorizationCheckPolicy<T> : IAuthorizationPolicy where T : IAuthorizationCheck\n    {\n        public AuthorizationRight RightsFor(IFubuRequestContext request)\n        {\n            return request.Service<T>().Check();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/AuthorizationNode.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Runtime;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    [Description(\"Authorization checks for this endpoint\")]\n    public class AuthorizationNode : BehaviorNode, IAuthorizationNode\n    {\n        private readonly IList<IAuthorizationPolicy> _policies = new List<IAuthorizationPolicy>();\n        private Instance _failure;\n\n        public override BehaviorCategory Category\n        {\n            get { return BehaviorCategory.Authorization; }\n        }\n\n        protected override IConfiguredInstance buildInstance()\n        {\n            var instance = new SmartInstance<AuthorizationBehavior>();\n            instance.Ctor<IAuthorizationNode>().Is(this);\n\n            if (_failure != null)\n            {\n                instance.Ctor<IAuthorizationFailureHandler>().Is(_failure);\n            }\n\n            return instance;\n        }\n\n        public void FailureHandler<T>() where T : IAuthorizationFailureHandler\n        {\n            _failure = new SmartInstance<T>();\n        }\n\n        public void FailureHandler(IAuthorizationFailureHandler handler)\n        {\n            _failure = new ObjectInstance(handler);\n        }\n\n        public Instance FailureHandler()\n        {\n            return _failure;\n        }\n\n        public void FailureHandler(Type handlerType)\n        {\n            _failure = new ConfiguredInstance(handlerType);\n        }\n\n        public AuthorizationRight IsAuthorized(IFubuRequestContext context)\n        {\n            if (!_policies.Any()) return AuthorizationRight.Allow;\n\n            return AuthorizationRight.Combine(_policies.Select(x => x.RightsFor(context)));\n        }\n\n        public IEnumerable<IAuthorizationPolicy> Policies\n        {\n            get { return _policies; }\n        }\n\n        public void AddPolicies(IEnumerable<IAuthorizationPolicy> authorizationPolicies)\n        {\n            _policies.AddRange(authorizationPolicies);\n        }\n\n        /// <summary>\n        /// Adds an authorization rule based on membership in a given role\n        /// on the principal\n        /// </summary>\n        /// <param name=\"roleName\"></param>\n        /// <returns></returns>\n        public AllowRole AddRole(string roleName)\n        {\n            if (AllowedRoles().Contains(roleName)) return null;\n\n            var allow = new AllowRole(roleName);\n\n            _policies.Add(allow);\n\n            return allow;\n        }\n\n        /// <summary>\n        /// Adds an authorization policy to this behavior chain\n        /// </summary>\n        /// <param name=\"policy\"></param>\n        public void AddPolicy(IAuthorizationPolicy policy)\n        {\n            _policies.Add(policy);\n        }\n\n        /// <summary>\n        /// Add either an IAuthorizationPolicy or IAuthorizationCheck to \n        /// this chain by concrete type\n        /// </summary>\n        /// <param name=\"type\"></param>\n        public void Add(Type type)\n    {\n        if (type.CanBeCastTo<IAuthorizationPolicy>() && type.IsConcreteWithDefaultCtor())\n        {\n            var policy = Activator.CreateInstance(type).As<IAuthorizationPolicy>();\n            AddPolicy(policy);\n        }\n        else if (type.CanBeCastTo<IAuthorizationCheck>())\n        {\n            var policyType = typeof (AuthorizationCheckPolicy<>).MakeGenericType(type);\n            Add(policyType);\n        }\n        else\n        {\n            throw new ArgumentOutOfRangeException(\"Type {0} is not a concrete type of {1} with a default ctor or a type of {2}\".ToFormat(type.FullName, typeof(IAuthorizationPolicy).FullName, typeof(IAuthorizationCheck)));\n            \n        }\n\n            \n    }\n\n        /// <summary>\n        /// List of all roles that have privileges to this BehaviorChain endpoint\n        /// </summary>\n        /// <returns></returns>\n        public IEnumerable<string> AllowedRoles()\n        {\n            return _policies.OfType<AllowRole>().Select(x => x.Role);\n        }\n\n        /// <summary>\n        /// Simple boolean test of whether or not this BehaviorChain has any\n        /// authorization rules\n        /// </summary>\n        /// <returns></returns>\n        public bool HasRules()\n        {\n            return _policies.Any();\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/AuthorizationPolicyExecutor.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public interface IAuthorizationPolicyExecutor\n    {\n        AuthorizationRight IsAuthorized(IFubuRequestContext context, IEnumerable<IAuthorizationPolicy> policies);\n        AuthorizationRight DetermineRights(IFubuRequestContext context, IEnumerable<IAuthorizationPolicy> policies);\n    }\n\n    public class AuthorizationPolicyExecutor : IAuthorizationPolicyExecutor\n    {\n        private readonly ILogger _logger;\n\n        public AuthorizationPolicyExecutor(ILogger logger)\n        {\n            _logger = logger;\n        }\n\n        public virtual AuthorizationRight IsAuthorized(IFubuRequestContext context,\n            IEnumerable<IAuthorizationPolicy> policies)\n        {\n            var result = DetermineRights(context, policies);\n            _logger.DebugMessage(() => new AuthorizationResult(result));\n\n            return result;\n        }\n\n        public AuthorizationRight DetermineRights(IFubuRequestContext context, IEnumerable<IAuthorizationPolicy> policies)\n        {\n            \n\n        // Check every authorization policy for this endpoint\n            var rights = policies.Select(policy => {\n                var policyRights = policy.RightsFor(context);\n\n                _logger.DebugMessage(() => new AuthorizationPolicyResult(policy, policyRights));\n\n                return policyRights;\n            });\n\n            // Combine the results\n            var result = AuthorizationRight.Combine(rights);\n            return result;\n        }\n    }\n\n    public class AuthorizationResult : LogRecord, DescribesItself\n    {\n        private readonly AuthorizationRight _rights;\n\n        public AuthorizationResult(AuthorizationRight rights)\n        {\n            _rights = rights;\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = \"Authorization result was '{0}'\".ToFormat(_rights.Name);\n        }\n\n        public AuthorizationRight Rights\n        {\n            get { return _rights; }\n        }\n\n        public bool Equals(AuthorizationResult other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return Equals(other._rights, _rights);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (AuthorizationResult)) return false;\n            return Equals((AuthorizationResult) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (_rights != null ? _rights.GetHashCode() : 0);\n        }\n    }\n\n    public class AuthorizationPolicyResult : LogRecord, DescribesItself\n    {\n        private readonly AuthorizationRight _rights;\n        private readonly Description _policy;\n\n        public AuthorizationPolicyResult(IAuthorizationPolicy policy, AuthorizationRight rights)\n        {\n            _rights = rights;\n            _policy = Description.For(policy);\n        }\n\n        public AuthorizationRight Rights\n        {\n            get { return _rights; }\n        }\n\n        public Description Policy\n        {\n            get { return _policy; }\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = \"Policy '{0}' returned authorization right '{1}'\".ToFormat(_policy.Title, _rights.Name);\n            description.Children[\"Policy\"] = _policy;\n            description.Properties[\"Rights\"] = _rights.Name;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/AuthorizationPreviewService.cs",
    "content": "using System;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Registration.Querying;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public class AuthorizationPreviewService : ChainInterrogator<AuthorizationRight>, IAuthorizationPreviewService\n    {\n        private readonly IChainAuthorizor _authorizor;\n\n        public AuthorizationPreviewService(IChainResolver resolver, IChainAuthorizor authorizor) : base(resolver)\n        {\n            _authorizor = authorizor;\n        }\n\n        protected override AuthorizationRight createResult(object model, BehaviorChain chain)\n        {\n            return _authorizor.Authorize(chain, model);\n        }\n\n        public bool IsAuthorized(object model)\n        {\n            return For(model) == AuthorizationRight.Allow;\n        }\n\n        public bool IsAuthorized(object model, string category)\n        {\n            return For(model, category) == AuthorizationRight.Allow;\n        }\n\n        public bool IsAuthorized<TController>(Expression<Action<TController>> expression)\n        {\n            return IsAuthorized(typeof (TController), ReflectionHelper.GetMethod(expression));\n        }\n\n        public bool IsAuthorizedForNew<T>()\n        {\n            return IsAuthorizedForNew(typeof (T));\n        }\n\n        public bool IsAuthorizedForNew(Type entityType)\n        {\n            return forNew(entityType) == AuthorizationRight.Allow;\n        }\n\n        public bool IsAuthorized(Type handlerType, MethodInfo method)\n        {\n            return For(handlerType, method) == AuthorizationRight.Allow;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/AuthorizationRight.cs",
    "content": "using System.Collections.Generic;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public class AuthorizationRight\n    {\n        private readonly int _precedence;\n        private readonly string _name;\n\n        private AuthorizationRight(int precedence, string name)\n        {\n            _precedence = precedence;\n            _name = name;\n        }\n\n        public int Precedence\n        {\n            get { return _precedence; }\n        }\n\n        public string Name\n        {\n            get { return _name; }\n        }\n\n        public static AuthorizationRight None = new AuthorizationRight(3, \"None\");\n        public static AuthorizationRight Allow = new AuthorizationRight(2, \"Allow\");\n        public static AuthorizationRight Deny = new AuthorizationRight(1, \"Deny\");\n\n        public static AuthorizationRight Combine(IEnumerable<AuthorizationRight> rights)\n        {\n            AuthorizationRight answer = None;\n\n            foreach (var right in rights)\n            {\n                if (right == Deny) return right;\n\n                if (right.Precedence < answer.Precedence)\n                {\n                    answer = right;\n                }\n            }\n\n            return answer;\n        }\n\n        public static AuthorizationRight CombineRights(params AuthorizationRight[] rights)\n        {\n            return Combine(rights);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"AuthorizationRight: {0}\", _name);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/AuthorizedByAttribute.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuCore;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]\n    public class AuthorizationFailureAttribute : ModifyChainAttribute\n    {\n        private Type _type;\n\n        public AuthorizationFailureAttribute(Type failureHandler)\n        {\n            if (!failureHandler.CanBeCastTo<IAuthorizationFailureHandler>())\n            {\n                throw new ArgumentOutOfRangeException(\"failureHandler\", \"Must be a concrete type of IAuthorizationFailureHandler\");\n            }\n\n            _type = failureHandler;\n        }\n\n        public override void Alter(ActionCallBase call)\n        {\n            call.ParentChain().Authorization.FailureHandler(_type);\n        }\n    }\n\n    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]\n    public class AuthorizedByAttribute : ModifyChainAttribute\n    {\n        private readonly Type[] _types;\n\n        public AuthorizedByAttribute(params Type[] types)\n        {\n            _types = types;\n\n        }\n\n        public Type[] Types\n        {\n            get { return _types; }\n        }\n\n        public override void Alter(ActionCallBase call)\n        {\n            var authorizationNode = call.ParentChain().Authorization;\n\n            Types.Each(authorizationNode.Add);\n        }\n\n        public static Type RuleTypeFor(Type inputType, Type attributeType)\n        {\n            if (attributeType.CanBeCastTo<IAuthorizationPolicy>()) return attributeType;\n\n            throw new ArgumentOutOfRangeException(\"attributeType\", \"attributeType must implement either IAuthorizationPolicy or IAuthorizationRule<> for the input type\");\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/ChainAuthorizor.cs",
    "content": "using FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public class ChainAuthorizor : IChainAuthorizor\n    {\n        private readonly IFubuRequestContext _context;\n\n        public ChainAuthorizor(IFubuRequestContext context)\n        {\n            _context = context;\n        }\n\n        public AuthorizationRight Authorize(BehaviorChain chain, object model)\n        {\n            if (model != null)\n            {\n                _context.Models.Set(model.GetType(), model);\n            }\n\n            return chain.Authorization.IsAuthorized(_context);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/DefaultAuthorizationFailureHandler.cs",
    "content": "﻿using System.Net;\nusing FubuMVC.Core.Continuations;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public class DefaultAuthorizationFailureHandler : IAuthorizationFailureHandler\n    {\n        public FubuContinuation Handle()\n        {\n            return FubuContinuation.EndWithStatusCode(HttpStatusCode.Forbidden);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/IAuthenticationContext.cs",
    "content": "namespace FubuMVC.Core.Security.Authorization\n{\n    public interface IAuthenticationContext\n    {\n        void ThisUserHasBeenAuthenticated(string username, bool rememberMe);\n        void SignOut();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/IAuthorizationCheck.cs",
    "content": "﻿namespace FubuMVC.Core.Security.Authorization\n{\n    public interface IAuthorizationCheck\n    {\n        AuthorizationRight Check();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/IAuthorizationFailureHandler.cs",
    "content": "﻿using FubuMVC.Core.Continuations;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public interface IAuthorizationFailureHandler\n    {\n        FubuContinuation Handle();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/IAuthorizationNode.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.Runtime;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public interface IAuthorizationNode\n    {\n        /// <summary>\n        /// Adds an authorization rule based on membership in a given role\n        /// on the principal\n        /// </summary>\n        /// <param name=\"roleName\"></param>\n        /// <returns></returns>\n        AllowRole AddRole(string roleName);\n\n        /// <summary>\n        /// List of all roles that have privileges to this BehaviorChain endpoint\n        /// </summary>\n        /// <returns></returns>\n        IEnumerable<string> AllowedRoles();\n\n        /// <summary>\n        /// Simple boolean test of whether or not this BehaviorChain has any\n        /// authorization rules\n        /// </summary>\n        /// <returns></returns>\n        bool HasRules();\n\n\n        /// <summary>\n        /// Adds an authorization policy to this behavior chain\n        /// </summary>\n        /// <param name=\"policy\"></param>\n        void AddPolicy(IAuthorizationPolicy policy);\n\n\n        AuthorizationRight IsAuthorized(IFubuRequestContext context);\n        IEnumerable<IAuthorizationPolicy> Policies { get; }\n        void AddPolicies(IEnumerable<IAuthorizationPolicy> authorizationPolicies);\n        void FailureHandler<T>() where T : IAuthorizationFailureHandler;\n        void FailureHandler(IAuthorizationFailureHandler handler);\n        Instance FailureHandler();\n        void FailureHandler(Type handlerType);\n\n        /// <summary>\n        /// Add either an IAuthorizationPolicy or IAuthorizationCheck to \n        /// this chain by concrete type\n        /// </summary>\n        /// <param name=\"type\"></param>\n        void Add(Type type);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/IAuthorizationPolicy.cs",
    "content": "﻿using FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public interface IAuthorizationPolicy\n    {\n        AuthorizationRight RightsFor(IFubuRequestContext request);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/IAuthorizationPreviewService.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing System.Reflection;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public interface IAuthorizationPreviewService\n    {\n        bool IsAuthorized(object model);\n        bool IsAuthorized(object model, string category);\n        bool IsAuthorized<TController>(Expression<Action<TController>> expression);\n\n        bool IsAuthorizedForNew<T>();\n        bool IsAuthorizedForNew(Type entityType);\n        \n        bool IsAuthorized(Type handlerType, MethodInfo method);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/IChainAuthorizor.cs",
    "content": "using FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public interface IChainAuthorizor\n    {\n        AuthorizationRight Authorize(BehaviorChain chain, object model);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/IPrincipalFactory.cs",
    "content": "using System.Security.Principal;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public interface IPrincipalFactory\n    {\n        IPrincipal CreatePrincipal(IIdentity identity);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/ISecurityContext.cs",
    "content": "using System.Security.Principal;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public interface ISecurityContext\n    {\n        IIdentity CurrentIdentity { get; }\n        IPrincipal CurrentUser { get; set; }\n        bool IsAuthenticated();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/MustBeAuthenticated.cs",
    "content": "﻿using System.ComponentModel;\nusing System.Security.Principal;\nusing System.Threading;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public class MustBeAuthenticatedAttribute : ModifyChainAttribute\n    {\n        public override void Alter(ActionCallBase call)\n        {\n            call.ParentChain().Authorization.AddPolicy(new MustBeAuthenticated());\n        }\n    }\n\n    /// <summary>\n    /// The user must be authenticated\n    /// </summary>\n    public class MustBeAuthenticated : IAuthorizationPolicy\n    {\n        public AuthorizationRight RightsFor(IFubuRequestContext request)\n        {\n            var principal = Thread.CurrentPrincipal;\n            return DetermineRights(principal);\n        }\n\n        public static AuthorizationRight DetermineRights(IPrincipal principal)\n        {\n            if (principal == null || principal.Identity == null) return AuthorizationRight.Deny;\n\n            return principal.Identity.IsAuthenticated\n                ? AuthorizationRight.Allow\n                : AuthorizationRight.Deny;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/NotAuthenticatedAttribute.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Property, AllowMultiple = false)]\n    public class NotAuthenticatedAttribute : Attribute\n    {\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/PrincipalRoles.cs",
    "content": "﻿using System.Linq;\nusing System.Security.Principal;\nusing System.Threading;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public static class PrincipalRoles\n    {\n        private static IPrincipal _stubbedPrincipal;\n\n        public static IPrincipal Current\n        {\n            get\n            {\n                return _stubbedPrincipal ?? (System.Web.HttpContext.Current == null ? Thread.CurrentPrincipal : System.Web.HttpContext.Current.User);\n            }\n\n            set { _stubbedPrincipal = value; }\n        }\n\n        public static bool IsInRole(params string[] roles)\n        {\n            var principal = Current;\n            return roles.Any(r => principal.IsInRole(r));\n        }\n\n        public static void SetCurrentRolesForTesting(params string[] roles)\n        {\n            var principal = new GenericPrincipal(new GenericIdentity(\"somebody\"), roles);\n            Thread.CurrentPrincipal = principal;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/RequireRole.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public class RequireRoleAttribute : ModifyChainAttribute\n    {\n        private readonly string[] _roles;\n\n        public RequireRoleAttribute(params string[] roles)\n        {\n            _roles = roles;\n        }\n\n        public override void Alter(ActionCallBase call)\n        {\n            var chain = call.ParentChain();\n            _roles.Each(role => chain.Authorization.AddPolicy(new RequireRole(role)));\n        }\n    }\n\n    /// <summary>\n    /// Enforces that a user *must* have the designated role to have access\n    /// to this resource\n    /// </summary>\n    public class RequireRole : IAuthorizationPolicy\n    {\n        private readonly string _role;\n\n        public RequireRole(string role)\n        {\n            _role = role;\n        }\n\n        public AuthorizationRight RightsFor(IFubuRequestContext request)\n        {\n            return PrincipalRoles.IsInRole(_role) ? AuthorizationRight.Allow : AuthorizationRight.Deny;\n        }\n\n        public string Role\n        {\n            get { return _role; }\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Require role: {0}\", _role);\n        }\n\n        protected bool Equals(RequireRole other)\n        {\n            return string.Equals(_role, other._role);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((RequireRole) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (_role != null ? _role.GetHashCode() : 0);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/SecurityServicesRegistry.cs",
    "content": "using FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public class SecurityServicesRegistry : ServiceRegistry\n    {\n        public SecurityServicesRegistry()\n        {\n            SetServiceIfNone<IAuthorizationFailureHandler, DefaultAuthorizationFailureHandler>();\n\n\n            SetServiceIfNone<ISecurityContext, WebSecurityContext>();\n            SetServiceIfNone<IAuthenticationContext, WebAuthenticationContext>();\n\n            SetServiceIfNone<IAuthorizationPreviewService, AuthorizationPreviewService>();\n\n            SetServiceIfNone<IAuthorizationPolicyExecutor, AuthorizationPolicyExecutor>();\n            SetServiceIfNone<IChainAuthorizor, ChainAuthorizor>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/Authorization/SecuritySettings.cs",
    "content": "﻿using System.Diagnostics;\n\nnamespace FubuMVC.Core.Security.Authorization\n{\n    public class SecuritySettings\n    {\n        public SecuritySettings()\n        {\n            Reset();\n        }\n\n        public bool AuthorizationEnabled { get; set; }\n        public bool AuthenticationEnabled { get; set; }\n\n        public void Reset()\n        {\n            AuthorizationEnabled = AuthenticationEnabled = true;\n        }\n\n        public void Disable()\n        {\n            AuthenticationEnabled = AuthorizationEnabled = false;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/WebAuthenticationContext.cs",
    "content": "using System;\nusing System.Web.Security;\nusing FubuMVC.Core.Security.Authorization;\n\nnamespace FubuMVC.Core.Security\n{\n    public class WebAuthenticationContext : IAuthenticationContext\n    {\n        public Action<string, bool> SetAuthCookieFunc = FormsAuthentication.SetAuthCookie;\n        public Action SignOutFunc = FormsAuthentication.SignOut;\n\n\n        public void ThisUserHasBeenAuthenticated(string username, bool rememberMe)\n        {\n            SetAuthCookieFunc(username, rememberMe);\n        }\n\n        public void SignOut()\n        {\n            SignOutFunc();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Security/WebSecurityContext.cs",
    "content": "using System.Security.Principal;\nusing System.Web;\nusing FubuMVC.Core.Security.Authorization;\n\nnamespace FubuMVC.Core.Security\n{\n    public class WebSecurityContext : ISecurityContext\n    {\n        private readonly HttpContextBase _context;\n\n        public WebSecurityContext(HttpContextBase httpContext)\n        {\n            _context = httpContext;\n        }\n\n\n        public bool IsAuthenticated()\n        {\n            return _context.Request.IsAuthenticated;\n        }\n\n        public IIdentity CurrentIdentity { get { return _context.User.Identity; } }\n\n        public IPrincipal CurrentUser { get { return _context.User; } set { _context.User = value; } }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/AspNetShutDownDetector.cs",
    "content": "﻿using System;\nusing System.Web.Hosting;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    // TODO: Move to more appropriate location.\n    public interface IAspNetShutDownDetector : IRegisteredObject, IDisposable\n    {\n        void Register(Action onShutdown);\n    }\n\n    public class AspNetShutDownDetector : IAspNetShutDownDetector\n    {\n        private Action _onShutdown;\n\n        public void Register(Action onShutdown)\n        {\n            _onShutdown = onShutdown;\n            HostingEnvironment.RegisterObject(this);\n        }\n\n        public void Stop(bool immediate)\n        {\n            try\n            {\n                if (_onShutdown != null)\n                    _onShutdown();\n            }\n            catch\n            {\n                // Swallow the exception as Stop should never throw\n                // TODO: Log exceptions\n            }\n            finally\n            {\n                Dispose();\n            }\n        }\n\n        public void Dispose()\n        {\n            HostingEnvironment.UnregisterObject(this);\n            _onShutdown = null;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/Channel.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public class Channel<TTopic> : IChannel<TTopic> where TTopic : Topic\n    {\n        private readonly IEventQueue<TTopic> _queue;\n        private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);\n        \n        private readonly IList<QueuedRequest> _outstandingRequests = new List<QueuedRequest>();\n        private bool _isConnected;\n\n        public Channel(IEventQueue<TTopic> queue)\n        {\n            _queue = queue;\n            _isConnected = true;\n        }\n\n        public void Flush()\n        {\n            _lock.Write(() =>\n            {\n                _outstandingRequests.Each(x => x.Source.SetResult(Enumerable.Empty<IServerEvent>()));\n                _outstandingRequests.Clear();\n\n                _isConnected = false;\n            });\n        }\n\n        public Task<IEnumerable<IServerEvent>> FindEvents(TTopic topic)\n        {\n            var source = new TaskCompletionSource<IEnumerable<IServerEvent>>();\n\n            if (!FindEventsReadLockOnly(topic, source))\n                FindEventsWithWriteLock(topic, source);\n\n            return source.Task;\n        }\n\n        public void Write(Action<IEventQueue<TTopic>> action)\n        {\n            _lock.Write(() =>\n            {\n                action(_queue);\n                publishToListeners();\n            });\n        }\n\n        public bool IsConnected()\n        {\n            return _isConnected;\n        }\n\n        private bool FindEventsReadLockOnly(TTopic topic, TaskCompletionSource<IEnumerable<IServerEvent>> source)\n        {\n            return _lock.Read(() =>\n            {\n                if (!_isConnected)\n                {\n                    source.SetResult(Enumerable.Empty<IServerEvent>());\n                    return true;\n                }\n\n                var events = _queue.FindQueuedEvents(topic);\n\n                if (!events.Any())\n                    return false;\n\n                source.SetResult(events);\n                return true;\n            });\n        }\n\n        private void FindEventsWithWriteLock(TTopic topic, TaskCompletionSource<IEnumerable<IServerEvent>> source)\n        {\n            _lock.Write(() =>\n            {\n                if (!FindEventsReadLockOnly(topic, source))\n                {\n                    _outstandingRequests.Add(new QueuedRequest(source, topic));\n                }\n            });\n        }\n\n        private void publishToListeners()\n        {\n            _outstandingRequests.Each(x =>\n            {\n                var events = _queue.FindQueuedEvents(x.Topic);\n                x.Source.SetResult(events);\n            });\n\n            _outstandingRequests.Clear();\n        }\n\n        public class QueuedRequest\n        {\n            public QueuedRequest(TaskCompletionSource<IEnumerable<IServerEvent>> source, TTopic topic)\n            {\n                Source = source;\n                Topic = topic;\n            }\n\n            public TaskCompletionSource<IEnumerable<IServerEvent>> Source { get; private set; }\n            public TTopic Topic { get; private set; }\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/ChannelWriter.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Http.Compression;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    [DoNotCompress]\n    public class ChannelWriter<T> where T : Topic\n    {\n        private readonly IHttpRequest _connectivity;\n        private readonly IServerEventWriter _writer;\n        private readonly ITopicChannelCache _cache;\n        private readonly IChannelInitializer<T> _channelInitializer;\n        private IChannel<T> _channel;\n        private T _topic;\n\n        private TaskCompletionSource<bool> _liveConnection;\n\n        public ChannelWriter(IHttpRequest connectivity, IServerEventWriter writer, ITopicChannelCache cache, IChannelInitializer<T> channelInitializer)\n        {\n            _connectivity = connectivity;\n            _writer = writer;\n            _cache = cache;\n            _channelInitializer = channelInitializer;\n        }\n\n        public Task Write(T topic)\n        {\n            _liveConnection = new TaskCompletionSource<bool>();\n            _topic = topic;\n            ITopicChannel<T> topicChannel;\n\n            if (!_cache.TryGetChannelFor(_topic, out topicChannel))\n            {\n                _liveConnection.SetResult(false);\n                return _liveConnection.Task;\n            }\n\n            _channel = topicChannel.Channel;\n\n            writeEvents(_channelInitializer.GetInitializationEvents(topic));\n\n            FindEvents();\n            return _liveConnection.Task;\n        }\n\n        public void FindEvents()\n        {\n            if (!_connectivity.IsClientConnected() || !_channel.IsConnected())\n            {\n                _liveConnection.SetResult(false);\n                return;\n            }\n\n            var task = _channel.FindEvents(_topic);\n\n            OnFaulted(task);\n            handleFoundEvents(task);\n        }\n\n        private void handleFoundEvents(Task<IEnumerable<IServerEvent>> task)\n        {\n            var continuation = task.ContinueWith(x =>\n            {\n                if (x.IsFaulted) return;\n\n                if (!_connectivity.IsClientConnected())\n                {\n                    _liveConnection.SetResult(false);\n                    return;\n                }\n\n                writeEvents(x.Result);\n                FindEvents();\n            }); // Intentionally not attached to parent to prevent stack overflow exceptions.\n\n            OnFaulted(continuation);\n        }\n\n        private void writeEvents(IEnumerable<IServerEvent> events)\n        {\n            var lastSuccessfulMessage = events\n                .TakeWhile(y => {\n                    if (_connectivity.IsClientConnected())\n                    {\n                        return _writer.Write(y);\n                    }\n\n                    return false;\n                })\n                .LastOrDefault();\n\n            if (lastSuccessfulMessage != null)\n            {\n                _topic.LastEventId = lastSuccessfulMessage.Id;\n            }\n        }\n\n        private void OnFaulted(Task task)\n        {\n            task.ContinueWith(x =>\n            {\n                try\n                {\n                    var aggregateException = x.Exception.Flatten();\n                    _liveConnection.SetException(aggregateException.InnerExceptions);\n                }\n                finally\n                {\n                    _liveConnection.SetResult(false);\n                }\n            }, TaskContinuationOptions.OnlyOnFaulted);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/DefaultEventQueueFactory.cs",
    "content": "namespace FubuMVC.Core.ServerSentEvents\n{\n    public class DefaultEventQueueFactory<T> : IEventQueueFactory<T> where T : Topic\n    {\n        public IEventQueue<T> BuildFor(T topic)\n        {\n            return new EventQueue<T>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/EventPublisher.cs",
    "content": "using System;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public class EventPublisher : IEventPublisher\n    {\n        private readonly ITopicChannelCache _cache;\n\n        public EventPublisher(ITopicChannelCache cache)\n        {\n            _cache = cache;\n        }\n\n        public void WriteTo<T>(T topic, params IServerEvent[] events) where T : Topic\n        {\n            _cache.ChannelFor(topic).WriteEvents(topic, events);\n        }\n\n        public void WriteTo<T, TQueue>(T topic, Action<TQueue> write) where T : Topic where TQueue : class\n        {\n            var channel = _cache.ChannelFor(topic).Channel;\n            channel.Write(q => (q as TQueue).CallIfNotNull(write));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/EventQueue.cs",
    "content": "using System.Collections.Generic;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public class EventQueue<T> : IEventQueue<T> where T : Topic\n    {\n        private readonly ServerEventList<IServerEvent> _events = new ServerEventList<IServerEvent>();\n\n        public void Clear()\n        {\n            _events.AllEvents.Clear();\n        }\n\n        public IList<IServerEvent> AllEvents\n        {\n            get { return _events.AllEvents; }\n        }\n\n        public IEnumerable<IServerEvent> FindQueuedEvents(T topic)\n        {\n            return _events.FindQueuedEvents(topic);\n        }\n\n        public void Write(params IServerEvent[] events)\n        {\n            _events.Add(events);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/EventQueueFactory.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuCore.Util;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public class EventQueueFactory : IEventQueueFactory\n    {\n        private readonly Cache<Type, object> _factories;\n\n        public EventQueueFactory(IServiceLocator serviceLocator)\n        {\n            _factories = new Cache<Type, object>(type => serviceLocator.GetInstance(typeof (IEventQueueFactory<>).MakeGenericType(type)));\n        }\n\n        public IEventQueue<T> BuildFor<T>(T topic) where T : Topic\n        {\n            var factory = (IEventQueueFactory<T>) _factories[typeof (T)];\n            return factory.BuildFor(topic);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/IChannel.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public interface IChannel\n    {\n        void Flush();\n    }\n\n    public interface IChannel<in T> : IChannel where T : Topic\n    {\n        Task<IEnumerable<IServerEvent>> FindEvents(T topic);\n        void Write(Action<IEventQueue<T>> action);\n        bool IsConnected();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/IChannelInitializer.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public interface IChannelInitializer<T> where T : Topic\n    {\n        IEnumerable<IServerEvent> GetInitializationEvents(T Topic);\n    }\n\n    public class DefaultChannelInitializer<T> : IChannelInitializer<T> where T : Topic\n    {\n        public IEnumerable<IServerEvent> GetInitializationEvents(T Topic)\n        {\n            return Enumerable.Empty<IServerEvent>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/IEventPublisher.cs",
    "content": "using System;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public interface IEventPublisher\n    {\n        void WriteTo<T>(T topic, params IServerEvent[] events) where T : Topic;\n\n        void WriteTo<T, TQueue>(T topic, Action<TQueue> write)\n            where T : Topic\n            where TQueue : class;\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/IEventQueue.cs",
    "content": "using System.Collections.Generic;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public interface IEventQueue<in T> where T : Topic\n    {\n        IEnumerable<IServerEvent> FindQueuedEvents(T topic);\n        void Write(params IServerEvent[] events);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/IEventQueueFactory.cs",
    "content": "namespace FubuMVC.Core.ServerSentEvents\n{\n    public interface IEventQueueFactory\n    {\n        IEventQueue<T> BuildFor<T>(T topic) where T : Topic;\n    }\n\n    public interface IEventQueueFactory<in T> where T : Topic\n    {\n        IEventQueue<T> BuildFor(T topic);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/IServerEvent.cs",
    "content": "namespace FubuMVC.Core.ServerSentEvents\n{\n    public interface IServerEvent\n    {\n        string Id { get; }\n        string Event { get; }\n        int? Retry { get; }\n        object Data { get; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/IServerEventWriter.cs",
    "content": "namespace FubuMVC.Core.ServerSentEvents\n{\n    public interface IServerEventWriter\n    {\n        bool WriteData(object data, string id = null, string @event = null, int? retry = null);\n        bool Write(IServerEvent @event);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/ITopicChannelCache.cs",
    "content": "using System;\nusing System.Collections.Generic;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public interface ITopicChannelCache\n    {\n        ITopicChannel<T> ChannelFor<T>(T topic) where T : Topic;\n        bool TryGetChannelFor<T>(T topic, out ITopicChannel<T> channel) where T : Topic;\n        void ClearAll();\n        bool IsDisposed { get; }\n\n        void SpinUpTopics<T>(Func<IEnumerable<T>> topics) where T : Topic;\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/NulloShutdownDetector.cs",
    "content": "using System;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public class NulloShutdownDetector : IAspNetShutDownDetector\n    {\n        public void Stop(bool immediate)\n        {\n        }\n\n        public void Dispose()\n        {\n        }\n\n        public void Register(Action onShutdown)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/ServerEvent.cs",
    "content": "namespace FubuMVC.Core.ServerSentEvents\n{\n    public class ServerEvent : IServerEvent\n    {\n        public ServerEvent(string id, string data)\n        {\n            Id = id;\n            Data = data;\n        }\n\n        public object Data { get; private set; }\n        public string Id { get; private set; }\n        public string Event { get; set; }\n        public int? Retry { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/ServerEventList.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public class ServerEventList<T> where T : IServerEvent\n    {\n        private readonly IList<T> _events = new List<T>();\n\n        public IList<T> AllEvents\n        {\n            get { return _events; }\n        }\n\n        public void Add(IEnumerable<T> events)\n        {\n            _events.AddRange(events);\n        }\n\n        public void Add(T @event)\n        {\n            _events.Add(@event);\n        }\n\n\n        public IEnumerable<T> FindQueuedEvents(Topic topic)\n        {\n            if (topic == null || topic.LastEventId.IsEmpty())\n            {\n                return _events.ToList();\n            }\n\n            if (!_events.Any() || _events.Last().Id == topic.LastEventId) return Enumerable.Empty<T>();\n\n            var lastEvent = _events.FirstOrDefault(x => x.Id == topic.LastEventId);\n            if (lastEvent == null)\n            {\n                return _events.ToList();\n            }\n\n            var index = _events.IndexOf(lastEvent);\n            return _events.Skip(index + 1).ToList();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/ServerEventWriter.cs",
    "content": "using System;\nusing System.Text;\nusing System.Web;\nusing FubuCore;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n\tpublic class ServerEventWriter : IServerEventWriter\n    {\n        public readonly string Data = \"data: \";\n        public readonly string Event = \"event: \";\n        public readonly string Id = \"id: \";\n        public readonly string Retry = \"retry: \";\n\n        private readonly IOutputWriter _writer;\n        private bool _first = true;\n\n        public ServerEventWriter(IOutputWriter writer)\n        {\n        \t_writer = writer;\n        }\n\n        public bool WriteData(object data, string id = null, string @event = null, int? retry = null)\n        {\n            if (_first)\n            {\n                _writer.ContentType(MimeType.EventStream);\n                _first = false;\n            }\n\n            var builder = new StringBuilder();\n            \n            if (@event.IsNotEmpty())\n            {\n                builder.Append(Id);\n                builder.Append(id);\n                builder.Append(\"/\");\n                builder.Append(@event);\n                builder.Append(\"\\n\");\n            }\n            else\n            {\n                writeProp(builder, Id, id);\n            }\n            \n            writeProp(builder, Retry, retry);\n\t\t\twriteProp(builder, Data, data);\n            builder.Append(\"\\n\");\n\n            _writer.Write(builder.ToString());\n\n            try\n            {\n                _writer.Flush();\n                return true;\n            }\n            // It is possible to receive this exception if the client connection has been lost.\n            catch (HttpException)\n            {\n                return false;\n            }\n\t\t\t// Another connectivity issue\n\t\t\tcatch(AccessViolationException)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n        }\n\n        public bool Write(IServerEvent @event)\n        {\n            return WriteData(@event.Data, @event.Id, @event.Event, @event.Retry);\n        }\n\n        private static void writeProp(StringBuilder builder, string flag, object text)\n        {\n            if (text == null) return;\n\n            builder.Append(flag);\n            builder.Append(text.ToString());\n            builder.Append(\"\\n\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/ServerSentEventRegistry.cs",
    "content": "using System;\nusing FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public class ServerSentEventRegistry : ServiceRegistry\n    {\n        public ServerSentEventRegistry()\n        {\n            SetServiceIfNone<IEventPublisher, EventPublisher>();\n            SetServiceIfNone<IEventQueueFactory, EventQueueFactory>();\n            For(typeof (IEventQueueFactory<>)).Use(typeof (DefaultEventQueueFactory<>));\n\n            For(typeof (IChannelInitializer<>)).Use(typeof (DefaultChannelInitializer<>));\n\n            SetServiceIfNone<IServerEventWriter, ServerEventWriter>();\n            SetServiceIfNone<ITopicChannelCache, TopicChannelCache>().Singleton();\n            if (Type.GetType(\"Mono.Runtime\") == null)\n            {\n                SetServiceIfNone<IAspNetShutDownDetector, AspNetShutDownDetector>();\n            }\n            else\n            {\n                SetServiceIfNone<IAspNetShutDownDetector, NulloShutdownDetector>();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/ServerSentEventsSettings.cs",
    "content": "﻿using FubuCore.Descriptions;\nusing FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public class ServerSentEventsSettings : IFeatureSettings, DescribesItself\n    {\n        public bool Enabled { get; set; }\n\n        void IFeatureSettings.Apply(FubuRegistry registry)\n        {\n            if (Enabled)\n            {\n                registry.Services.IncludeRegistry<ServerSentEventRegistry>();\n\n                registry.Policies.ChainSource<TopicChainSource>();\n            }\n        }\n\n        public void Describe(Description description)\n        {\n            description.Properties[nameof(Enabled)] = Enabled.ToString();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/SseTopicChain.cs",
    "content": "using System;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Registration.Conventions;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Registration.Routes;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public class SseTopicChain : RoutedChain\n    {\n        private static string WriteMethod = ReflectionHelper.GetMethod<ChannelWriter<Topic>>(x => x.Write(null))\n            .Name;\n\n        public static IRouteDefinition ToRoute(Type topicType)\n        {\n            var url = \"_events/\" + topicType.Name.ToLower().Replace(\"topic\", \"\");\n            var routeDefinition = RouteBuilder.Build(topicType, url);   \n            return routeDefinition;\n        }\n\n        public SseTopicChain(Type topicType) : base(ToRoute(topicType))\n        {\n            var handlerType = typeof(ChannelWriter<>).MakeGenericType(topicType);\n            var method = handlerType.GetMethod(WriteMethod);\n\n            var action = new ActionCall(handlerType, method);\n\n            DefaultUrlPolicy.AddBasicRouteInputs(action, (RouteDefinition) Route);\n\n            AddToEnd(action);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/Topic.cs",
    "content": "using FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public class Topic\n    {\n        [HeaderValue(\"Last-Event-ID\")]\n        public string LastEventId { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/TopicChainSource.cs",
    "content": "using System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing StructureMap.Graph.Scanning;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public class TopicChainSource : IChainSource\n    {\n        public Task<BehaviorChain[]> BuildChains(BehaviorGraph graph, IPerfTimer timer)\n        {\n            var types = TypeRepository.FindTypes(graph.AllAssemblies(), TypeClassification.Concretes,\n                type => type.CanBeCastTo<Topic>());\n\n            return\n                types.ContinueWith(\n                    t => { return t.Result.Select(x => new SseTopicChain(x).As<BehaviorChain>()).ToArray(); });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/TopicChannel.cs",
    "content": "namespace FubuMVC.Core.ServerSentEvents\n{\n    public interface ITopicChannel<T> where T : Topic\n    {\n        IChannel<T> Channel { get; }\n        IEventQueue<T> Queue { get; }\n        void WriteEvents(T topic, params IServerEvent[] events);\n    }\n\n    public class TopicChannel<T> : ITopicChannel<T> where T : Topic\n    {\n        public TopicChannel(IEventQueue<T> queue)\n        {\n            Channel = new Channel<T>(queue);\n            Queue = queue;\n        }\n\n        public IChannel<T> Channel { get; private set;}\n        public IEventQueue<T> Queue { get; private set;}\n\n        public void WriteEvents(T topic, params IServerEvent[] events)\n        {\n            Channel.Write(q => q.Write(events));\n        }\n\n        public void Flush()\n        {\n            Channel.Flush();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/TopicChannelCache.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing FubuCore;\nusing FubuCore.Util;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public class TopicChannelCache : ITopicChannelCache, IDisposable\n    {\n        private readonly IAspNetShutDownDetector _shutdownDetector;\n        private readonly Cache<Type, ITopicFamily> _families;\n        private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);\n\n        public bool IsDisposed { get; private set; }\n\n        public TopicChannelCache(IServiceLocator services, IAspNetShutDownDetector shutdownDetector)\n        {\n            _families = new Cache<Type, ITopicFamily>(type =>\n            {\n                var familyType = typeof (TopicFamily<>).MakeGenericType(type);\n                return (ITopicFamily) services.GetInstance(familyType);\n            });\n\n            _shutdownDetector = shutdownDetector;\n            _shutdownDetector.Register(DisposeAction);\n        }\n\n        public ITopicChannel<T> ChannelFor<T>(T topic) where T : Topic\n        {\n            return _lock.Read(() =>\n            {\n                if (IsDisposed)\n                    throw new ObjectDisposedException(\"TopicChannelCache\");\n\n                return _families[typeof (T)].As<TopicFamily<T>>().ChannelFor(topic);\n            });\n        }\n\n        public bool TryGetChannelFor<T>(T topic, out ITopicChannel<T> channel) where T : Topic\n        {\n            try\n            {\n                channel = ChannelFor(topic);\n                return true;\n            }\n            catch(Exception)\n            {\n                channel = null;\n                return false;\n            }\n        }\n\n        public void ClearAll()\n        {\n            _lock.Write(() =>\n            {\n                _families.Each(x => x.Flush());\n\n                _families.ClearAll();\n            });\n        }\n\n        public void SpinUpTopics<T>(Func<IEnumerable<T>> topics) where T : Topic\n        {\n            _lock.Write(() =>\n            {\n                if (IsDisposed)\n                    throw new ObjectDisposedException(\"TopicChannelCache\");\n\n                var family = _families[typeof (T)].As<TopicFamily<T>>();\n                topics().Each(family.SpinUpChannel);\n            });\n        }\n\n        public void Dispose()\n        {\n            _shutdownDetector.Dispose();\n            DisposeAction();\n        }\n\n        private void DisposeAction()\n        {\n            _lock.Write(() =>\n            {\n                IsDisposed = true;\n                ClearAll();\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServerSentEvents/TopicFamily.cs",
    "content": "using FubuCore.Util;\n\nnamespace FubuMVC.Core.ServerSentEvents\n{\n    public interface ITopicFamily\n    {\n        void Flush();\n    }\n\n    public class TopicFamily<T> : ITopicFamily where T : Topic\n    {\n        private readonly Cache<T, TopicChannel<T>> _channels = new Cache<T, TopicChannel<T>>();\n\n        public TopicFamily(IEventQueueFactory<T> factory)\n        {\n            _channels.OnMissing = topic =>\n            {\n                var queue = factory.BuildFor(topic);\n\n                return new TopicChannel<T>(queue);\n            };\n        }\n\n        public TopicChannel<T> ChannelFor(T topic)\n        {\n            return _channels[topic];\n        }\n\n        public void SpinUpChannel(T topic)\n        {\n            _channels.FillDefault(topic);\n        }\n\n        public void Flush()\n        {\n            _channels.Each(x => x.Flush());\n            _channels.ClearAll();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Configuration/ByTaskScheduleMaker.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing FubuMVC.Core.ServiceBus.Scheduling;\n\nnamespace FubuMVC.Core.ServiceBus.Configuration\n{\n    public class ByTaskScheduleMaker<T> : SchedulerMaker<T>\n    {\n        public ByTaskScheduleMaker(Expression<Func<T, int>> expression) : base(expression)\n        {\n        }\n\n        protected override IScheduler buildScheduler(int threadCount)\n        {\n            return new TaskScheduler(threadCount);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Configuration/ByThreadScheduleMaker.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing FubuMVC.Core.ServiceBus.Scheduling;\n\nnamespace FubuMVC.Core.ServiceBus.Configuration\n{\n    public class ByThreadScheduleMaker<T> : SchedulerMaker<T>\n    {\n        public ByThreadScheduleMaker(Expression<Func<T, int>> expression) : base(expression)\n        {\n        }\n\n        protected override IScheduler buildScheduler(int threadCount)\n        {\n            return new ThreadScheduler(threadCount);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Configuration/ChannelGraph.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuCore.Reflection;\nusing FubuCore.Util;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\n\nnamespace FubuMVC.Core.ServiceBus.Configuration\n{\n    public class ChannelGraph : IEnumerable<ChannelNode>, IDisposable\n    {\n        private readonly Cache<string, ChannelNode> _channels =\n            new Cache<string, ChannelNode>(key => new ChannelNode {Key = key});\n\n        private readonly Cache<string, Uri> _replyChannels =\n            new Cache<string, Uri>();\n\n        public ChannelGraph()\n        {\n            DefaultContentType = new XmlMessageSerializer().ContentType;\n\n            _replyChannels.OnMissing = name =>\n            {\n                var channels = _channels.Where(x => x.Protocol() == name).ToArray();\n\n                var incoming = channels.FirstOrDefault(x => x.Incoming);\n\n\n                if (incoming != null) return incoming.Uri;\n\n                if (channels.Any())\n                {\n                    var existing = channels.Select(x => $\"{x.Uri} Incoming = {x.Incoming}\").Join(\", \");\n                    throw new ArgumentOutOfRangeException($\"No known reply channel for protocol '{name}', existing channels are {existing}\");\n                }\n                else\n                {\n                    throw new ArgumentOutOfRangeException($\"No known channels for protocol '{name}'\");\n                }\n\n\n                \n            };\n        }\n\n        private string _nodeId;\n\n        public string NodeId\n        {\n            get\n            {\n                if (_nodeId.IsEmpty())\n                {\n                    return Name + \"@\" + System.Environment.MachineName;\n                }\n\n                return _nodeId;\n            }\n            set\n            {\n                _nodeId = value;\n            }\n        }\n\n\n        /// <summary>\n        /// Used to identify the instance of the running FT node\n        /// </summary>\n        public string Name { get; set; }\n\n        /// <summary>\n        /// The default content type to use for serialization if none is specified at\n        /// either the message or channel level\n        /// </summary>\n        public string DefaultContentType { get; set; }\n\n        public bool HasChannels => _channels.Any();\n\n        public ChannelNode ControlChannel { get; set; }\n\n        public ChannelNode ChannelFor<T>(Expression<Func<T, Uri>> property)\n        {\n            return ChannelFor(ReflectionHelper.GetAccessor(property));\n        }\n\n        public ChannelNode ChannelFor(string name)\n        {\n            return _channels.FirstOrDefault(x => x.SettingAddress.Name == name);\n        }\n\n        public ChannelNode ChannelFor(Accessor accessor)\n        {\n            var key = ToKey(accessor);\n            var channel = _channels[key];\n            channel.SettingAddress = accessor;\n\n            return channel;\n        }\n\n        public IEnumerable<Uri> ReplyUriList()\n        {\n            return _replyChannels;\n        } \n\n        public Uri ReplyChannelFor(string protocol)\n        {\n            return _replyChannels[protocol];\n        }\n\n        public void AddReplyChannel(string protocol, Uri uri)\n        {\n            _replyChannels[protocol] = uri;\n        }\n\n        public IEnumerable<ChannelNode> NodesForProtocol(string protocol)\n        {\n            return _channels.Where(x => x.Protocol() != null && x.Protocol().EqualsIgnoreCase(protocol))\n                .Distinct()\n                .ToArray();\n        }\n\n\n        // leave it virtual for testing\n        public virtual void ReadSettings(IServiceLocator services)\n        {\n            _channels.Each(x => x.ReadSettings(services));\n        }\n\n        public virtual void StartReceiving(IHandlerPipeline pipeline, ILogger logger)\n        {\n            _channels.Where(x => x.Incoming).Each(node => node.StartReceiving(pipeline, logger, this));\n        }\n\n        public static string ToKey(Accessor accessor)\n        {\n            return accessor.OwnerType.Name.Replace(\"Settings\", \"\") + \":\" + accessor.Name;\n        }\n\n        public static string ToKey<T>(Expression<Func<T, object>> property)\n        {\n            return ToKey(property.ToAccessor());\n        }\n\n        public IEnumerator<ChannelNode> GetEnumerator()\n        {\n            return _channels.GetEnumerator();\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return GetEnumerator();\n        }\n\n        public void Add(ChannelNode replyNode)\n        {\n            _channels[replyNode.Key] = replyNode;\n        }\n\n        private bool _wasDisposed;\n\n        public void Dispose()\n        {\n            if (_wasDisposed) return;\n\n            _channels.Each(x => x.Dispose());\n\n            _wasDisposed = true;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Configuration/ChannelNode.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Core.ServiceBus.Runtime.Routing;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing FubuMVC.Core.ServiceBus.Scheduling;\n\nnamespace FubuMVC.Core.ServiceBus.Configuration\n{\n    public enum ChannelMode\n    {\n        /// <summary>\n        /// If supported by the transport, this opts into guaranteed delivery mechanics for this channel\n        /// </summary>\n        DeliveryGuaranteed,\n\n        /// <summary>\n        /// If supported by the transport, this opts into a faster \"fire and forget\" mechanism for sending and receiving messages. Use this option for control channels.\n        /// </summary>\n        DeliveryFastWithoutGuarantee\n    }\n\n    public class ChannelNode : IDisposable\n    {\n        public Accessor SettingAddress\n        {\n            get { return _settingAddress; }\n            set\n            {\n                if (value.PropertyType != typeof (Uri))\n                {\n                    throw new ArgumentOutOfRangeException(\"SettingAddress\", \"Can only be a Uri property\");\n                }\n                _settingAddress = value;\n            }\n        }\n\n        public readonly IList<IEnvelopeModifier> Modifiers = new List<IEnvelopeModifier>(); \n\n        public readonly IList<ISettingsAware> SettingsRules = new List<ISettingsAware>(); \n\n        public string Key { get; set; }\n\n        public IScheduler Scheduler = TaskScheduler.Default();\n        public bool Incoming = false;\n\n        public IList<IRoutingRule> Rules = new List<IRoutingRule>();\n        private Accessor _settingAddress;\n\n        public Uri Uri { get; set; }\n        public IChannel Channel { get; set; }\n\n        \n\n        public bool Publishes(Type type)\n        {\n            return Rules.Any(x => x.Matches(type));\n        }\n        \n        public void ReadSettings(IServiceLocator services)\n        {\n            var settings = services.GetInstance(SettingAddress.OwnerType);\n            Uri = (Uri) SettingAddress.GetValue(settings);\n\n            SettingsRules.Each(x => x.ApplySettings(settings, this));\n        }\n\n        public string Protocol()\n        {\n            return Uri != null ? Uri.Scheme : null;\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Channel: {0}\", Key);\n        }\n\n        public void Dispose()\n        {\n            // TODO -- going to come back and try to make the scheduler \"drain\"\n            Channel.Dispose();\n            Scheduler.Dispose();\n        }\n\n        public void StartReceiving(IHandlerPipeline pipeline, ILogger logger, ChannelGraph graph)\n        {\n            if (Channel == null) throw new InvalidOperationException(\"Cannot receive on node {0} without a matching channel\".ToFormat(SettingAddress));\n            var receiver = new Receiver(pipeline, graph, this);\n            StartReceiving(receiver, logger);\n        }\n\n        public void StartReceiving(IReceiver receiver, ILogger logger)\n        {\n            Scheduler.Start(() =>\n            {\n                int exceptionCount = 0;\n                var receivingState = ReceivingState.CanContinueReceiving;\n                while (receivingState == ReceivingState.CanContinueReceiving)\n                {\n                    try\n                    {\n                        receivingState = Channel.Receive(receiver);\n                        exceptionCount = 0;\n                    }\n                    catch (Exception ex)\n                    {\n                        logger.InfoMessage(new ReceiveFailed { ChannelKey = Key, Exception = ex });\n                        logger.Error(\"Error in receive loop\", ex);\n                        if (++exceptionCount > 9)\n                        {\n                            // We're probably stuck getting the same error forever, let the process crash.\n                            throw new ReceiveFailureException(\n                                \"Received repeated errors while listening for messages on channel: \" + Key,\n                                ex);\n                        }\n                    }\n                }\n            });\n            \n        }\n\n        // virtual for testing of course\n        public virtual IHeaders Send(Envelope envelope, IEnvelopeSerializer serializer, Uri replyUri = null)\n        {\n            var clone = EnvelopeForSending(envelope, serializer, replyUri);\n\n            Channel.Send(clone.Data, clone.Headers);\n\n            return clone.Headers;\n        }\n\n        public Envelope EnvelopeForSending(Envelope envelope, IEnvelopeSerializer serializer, Uri replyUri)\n        {\n            var clone = envelope.Clone();\n\n            // Must be done in this order!\n            Modifiers.Each(x => x.Modify(clone));\n            serializer.Serialize(clone, this);\n\n            clone.Headers[Envelope.DestinationKey] = Uri.ToString();\n            clone.Headers[Envelope.ChannelKey] = Key;\n\n            if (replyUri != null)\n            {\n                clone.Headers[Envelope.ReplyUriKey] = replyUri.ToString();\n            }\n\n            return clone;\n        }\n\n        private string _defaultContentType;\n        private IMessageSerializer _defaultSerializer;\n\n        public IMessageSerializer DefaultSerializer\n        {\n            get { return _defaultSerializer; }\n            set\n            {\n                _defaultContentType = null;\n                _defaultSerializer = value;\n            }\n        }\n\n        public string DefaultContentType\n        {\n            get\n            {\n                return _defaultContentType;\n            }\n            set\n            {\n                _defaultSerializer = null;\n                _defaultContentType = value;\n            }\n        }\n\n        public ChannelMode Mode { get; set; } = ChannelMode.DeliveryGuaranteed;\n    }\n\n    \n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Configuration/FubuTransportRegistry.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Registration;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Routing;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Configuration;\nusing FubuMVC.Core.ServiceBus.Scheduling;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\n\nnamespace FubuMVC.Core.ServiceBus.Configuration\n{\n\n    public class FubuTransportRegistry<T> : FubuRegistry\n    {\n        protected FubuTransportRegistry()\n        {\n            ServiceBus.Enable(true);\n\n            AlterSettings<TransportSettings>(x => x.SettingTypes.Fill(typeof (T)));\n\n            // TODO -- what is this? Why are we doing this?\n            AlterSettings<ChannelGraph>(graph =>\n            {\n                if (InMemoryTransport.DefaultSettings == typeof (T))\n                {\n                    InMemoryTransport.DefaultChannelGraph = graph;\n                }\n            });\n        }\n\n        public ScheduledJobExpression<T> ScheduledJob\n        {\n            get { return new ScheduledJobExpression<T>(this); }\n        }\n\n\n        public static FubuTransportRegistry<T> Empty()\n        {\n            return new FubuTransportRegistry<T>();\n        }\n\n\n        public ChannelExpression Channel(Expression<Func<T, Uri>> expression)\n        {\n            return new ChannelExpression(this, expression);\n        }\n\n        public class ChannelExpression\n        {\n            private readonly FubuTransportRegistry<T> _parent;\n            private readonly Accessor _accessor;\n\n            public ChannelExpression(FubuTransportRegistry<T> parent, Expression<Func<T, Uri>> expression)\n            {\n                _parent = parent;\n                _accessor = ReflectionHelper.GetAccessor(expression);\n            }\n\n            private Action<ChannelNode> alter\n            {\n                set\n                {\n                    _parent.AlterSettings<ChannelGraph>(graph =>\n                    {\n                        var node = graph.ChannelFor(_accessor);\n                        value(node);\n                    });\n                }\n            }\n\n            public ChannelExpression UseAsControlChannel()\n            {\n                _parent.AlterSettings<ChannelGraph>(graph =>\n                {\n                    var node = graph.ChannelFor(_accessor);\n                    graph.ControlChannel = node;\n\n                    node.Incoming = true;\n                });\n\n                return this;\n            }\n\n            /// <summary>\n            /// Require this channel to be guaranteed delivery\n            /// </summary>\n            /// <returns></returns>\n            public ChannelExpression DeliveryGuaranteed()\n            {\n                alter = node => node.Mode = ChannelMode.DeliveryGuaranteed;\n                return this;\n            }\n\n            /// <summary>\n            /// Opt out of guaranteed delivery for a faster, but unsafe transport. Suitable for control queues\n            /// </summary>\n            /// <returns></returns>\n            public ChannelExpression DeliveryFastWithoutGuarantee()\n            {\n                alter = node => node.Mode = ChannelMode.DeliveryFastWithoutGuarantee;\n                return this;\n            }\n\n            /// <summary>\n            /// Alter the sending and receiving mode of this channel\n            /// </summary>\n            /// <param name=\"mode\"></param>\n            /// <returns></returns>\n            public ChannelExpression Mode(ChannelMode mode)\n            {\n                alter = node => node.Mode = mode;\n                return this;\n            }\n\n            /// <summary>\n            /// Add an IEnvelopeModifier that will apply to only this channel\n            /// </summary>\n            /// <typeparam name=\"TModifier\"></typeparam>\n            /// <returns></returns>\n            public ChannelExpression ModifyWith<TModifier>() where TModifier : IEnvelopeModifier, new()\n            {\n                return ModifyWith(new TModifier());\n            }\n\n            /// <summary>\n            /// Add an IEnvelopeModifier that will apply to only this channel\n            /// </summary>\n            /// <param name=\"modifier\"></param>\n            /// <returns></returns>\n            public ChannelExpression ModifyWith(IEnvelopeModifier modifier)\n            {\n                alter = node => node.Modifiers.Add(modifier);\n\n                return this;\n            }\n\n            public ChannelExpression DefaultSerializer<TSerializer>() where TSerializer : IMessageSerializer, new()\n            {\n                alter = node => node.DefaultSerializer = new TSerializer();\n                return this;\n            }\n\n            public ChannelExpression DefaultContentType(string contentType)\n            {\n                alter = node => node.DefaultContentType = contentType;\n                return this;\n            }\n\n            public ChannelExpression ReadIncoming(IScheduler scheduler = null)\n            {\n                alter = node =>\n                {\n                    var defaultScheduler = node.Scheduler;\n                    node.Incoming = true;\n                    node.Scheduler = scheduler ?? defaultScheduler;\n                };\n                return this;\n            }\n\n            public ChannelExpression ReadIncoming(SchedulerMaker<T> schedulerMaker)\n            {\n                alter = node =>\n                {\n                    node.Incoming = true;\n                    node.SettingsRules.Add(schedulerMaker);\n                };\n                return this;\n            }\n\n\n            public ChannelExpression AcceptsMessagesInNamespaceContainingType<TMessageType>()\n            {\n                alter = node => node.Rules.Add(NamespaceRule.For<TMessageType>());\n                return this;\n            }\n\n            public ChannelExpression AcceptsMessagesInNamespace(string @namespace)\n            {\n                alter = node => node.Rules.Add(new NamespaceRule(@namespace));\n                return this;\n            }\n\n            public ChannelExpression AcceptsMessagesInAssemblyContainingType<TMessageType>()\n            {\n                alter = node => node.Rules.Add(AssemblyRule.For<TMessageType>());\n                return this;\n            }\n\n            public ChannelExpression AcceptsMessagesInAssembly(string assemblyName)\n            {\n                var assembly = Assembly.Load(assemblyName);\n\n                alter = node => node.Rules.Add(new AssemblyRule(assembly));\n                return this;\n            }\n\n            public ChannelExpression AcceptsMessage<TMessage>()\n            {\n                alter = node => node.Rules.Add(new SingleTypeRoutingRule<TMessage>());\n                return this;\n            }\n\n            public ChannelExpression AcceptsMessage(Type messageType)\n            {\n                alter =\n                    node => node.Rules.Add(typeof (SingleTypeRoutingRule<>).CloseAndBuildAs<IRoutingRule>(messageType));\n                return this;\n            }\n\n            public ChannelExpression AcceptsMessages(Expression<Func<Type, bool>> filter)\n            {\n                alter = node => node.Rules.Add(new LambdaRoutingRule(filter));\n                return this;\n            }\n\n            public ChannelExpression AcceptsMessagesMatchingRule<TRule>() where TRule : IRoutingRule, new()\n            {\n                alter = node => node.Rules.Add(new TRule());\n                return this;\n            }\n        }\n\n        public ByThreadScheduleMaker<T> ByThreads(Expression<Func<T, int>> property)\n        {\n            return new ByThreadScheduleMaker<T>(property);\n        }\n\n        public ByTaskScheduleMaker<T> ByTasks(Expression<Func<T, int>> property)\n        {\n            return new ByTaskScheduleMaker<T>(property);\n        }\n\n        public SubscriptionExpression SubscribeAt(Expression<Func<T, Uri>> receiving)\n        {\n            return new SubscriptionExpression(this, receiving);\n        }\n\n        public SubscriptionExpression SubscribeLocally()\n        {\n            return new SubscriptionExpression(this, null);\n        }\n\n        public class SubscriptionExpression\n        {\n            private readonly FubuTransportRegistry<T> _parent;\n            private readonly Expression<Func<T, Uri>> _receiving;\n\n            public SubscriptionExpression(FubuTransportRegistry<T> parent, Expression<Func<T, Uri>> receiving)\n            {\n                _parent = parent;\n                _receiving = receiving;\n\n                parent.Services.AddType(typeof (ISubscriptionRequirement), typeof (SubscriptionRequirements<T>));\n            }\n\n            /// <summary>\n            /// Specify the publishing source of the events you want to subscribe to\n            /// </summary>\n            /// <param name=\"sourceProperty\"></param>\n            /// <returns></returns>\n            public TypeSubscriptionExpression ToSource(Expression<Func<T, Uri>> sourceProperty)\n            {\n                var requirement = _receiving == null\n                    ? (ISubscriptionRequirement<T>) new LocalSubscriptionRequirement<T>(sourceProperty)\n                    : new GroupSubscriptionRequirement<T>(sourceProperty, _receiving);\n\n                _parent.Services.AddService(requirement);\n\n                return new TypeSubscriptionExpression(requirement);\n            }\n\n            public class TypeSubscriptionExpression\n            {\n                private readonly ISubscriptionRequirement<T> _requirement;\n\n                public TypeSubscriptionExpression(ISubscriptionRequirement<T> requirement)\n                {\n                    _requirement = requirement;\n                }\n\n                public TypeSubscriptionExpression ToMessage<TMessage>()\n                {\n                    _requirement.AddType(typeof (TMessage));\n\n                    return this;\n                }\n\n                public TypeSubscriptionExpression ToMessage(Type messageType)\n                {\n                    _requirement.AddType(messageType);\n                    return this;\n                }\n            }\n        }\n    }\n\n    public class NulloHandlerSource : IHandlerSource\n    {\n        public Task<HandlerCall[]> FindCalls(Assembly applicationAssembly)\n        {\n            return Task.FromResult(new HandlerCall[0]);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Configuration/HandlerChain.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\n\nnamespace FubuMVC.Core.ServiceBus.Configuration\n{\n    public class HandlerChain : BehaviorChain, IMayHaveInputType\n    {\n        public readonly IList<IErrorHandler> ErrorHandlers = new List<IErrorHandler>();\n        public int MaximumAttempts = 1;\n\n        public HandlerChain()\n        {\n        }\n\n        public HandlerChain(IEnumerable<HandlerCall> calls) : this()\n        {\n            calls.Each(AddToEnd);\n        }\n\n        public void ReadAttributes()\n        {\n            this.OfType<HandlerCall>().ToArray().Each(call =>\n            {\n                call.ForAttributes<ModifyChainAttribute>(att => att.Alter(call));\n            });\n        }\n\n        public virtual bool IsPollingJob()\n        {\n            return false;\n        }\n\n        internal protected override void InsertNodes(ConnegSettings settings)\n        {\n            // do nothing.\n        }\n\n        public ContinuationExpression OnException<T>() where T : Exception\n        {\n            return new OnExceptionExpression<T>(this);\n        }\n\n        public interface ThenContinueExpression\n        {\n            ContinuationExpression Then { get; }\n        }\n\n        public interface ContinuationExpression\n        {\n            ThenContinueExpression Retry();\n            ThenContinueExpression Requeue();\n            ThenContinueExpression MoveToErrorQueue();\n            ThenContinueExpression RetryLater(TimeSpan delay);\n            ThenContinueExpression ContinueWith(IContinuation continuation);\n            ThenContinueExpression ContinueWith<TContinuation>() where TContinuation : IContinuation, new();\n            ThenContinueExpression RespondWithMessage(Func<Exception, Envelope, object> messageFunc);\n        }\n\n        public class OnExceptionExpression<T> : ContinuationExpression, ThenContinueExpression where T : Exception\n        {\n            private readonly HandlerChain _parent;\n            private readonly Lazy<ErrorHandler> _handler; \n\n            public OnExceptionExpression(HandlerChain parent)\n            {\n                _parent = parent;\n\n                _handler = new Lazy<ErrorHandler>(() => {\n                    var handler = new ErrorHandler();\n                    handler.AddCondition(new ExceptionTypeMatch<T>());\n                    _parent.ErrorHandlers.Add(handler);\n\n                    return handler;\n                });\n            }\n\n            public ThenContinueExpression Retry()\n            {\n                return ContinueWith(new RetryNowContinuation());\n            }\n\n            public ThenContinueExpression Requeue()\n            {\n                return ContinueWith(new RequeueContinuation());\n            }\n\n            public ThenContinueExpression MoveToErrorQueue()\n            {\n                var handler = new MoveToErrorQueueHandler<T>();\n                _handler.Value.AddContinuation(handler);\n\n                return this;\n            }\n\n            public ThenContinueExpression RetryLater(TimeSpan delay)\n            {\n                return ContinueWith(new DelayedRetryContinuation(delay));\n            }\n\n            public ThenContinueExpression ContinueWith(IContinuation continuation)\n            {\n                _handler.Value.AddContinuation(continuation);\n\n                return this;\n            }\n\n            public ThenContinueExpression ContinueWith<TContinuation>() where TContinuation : IContinuation, new()\n            {\n                return ContinueWith(new TContinuation());\n            }\n\n            ContinuationExpression ThenContinueExpression.Then\n            {\n                get\n                {\n                    return this;\n                }\n            }\n\n            public ThenContinueExpression RespondWithMessage(Func<Exception, Envelope, object> messageFunc)\n            {\n                var handler = new RespondWithMessageHandler<T>(messageFunc);\n\n                _handler.Value.AddContinuation(handler);\n\n                return this;\n            }\n        }\n\n        public bool IsAsync\n        {\n            get\n            {\n                return this.OfType<HandlerCall>().Any(x => x.IsAsync);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Configuration/HandlerChainPolicy.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.ServiceBus.Configuration\n{\n    /// <summary>\n    /// Base class for creating policies against HandlerChain's\n    /// </summary>\n    public abstract class HandlerChainPolicy : IConfigurationAction\n    {\n        public void Configure(BehaviorGraph graph)\n        {\n            graph.Chains.OfType<HandlerChain>().Where(Matches).Each(Configure);\n        }\n\n        /// <summary>\n        /// Override this for the alteration to each HandlerChain\n        /// </summary>\n        /// <param name=\"handlerChain\"></param>\n        public abstract void Configure(HandlerChain handlerChain);\n\n        /// <summary>\n        /// Override this to control the applicability of this policy to \n        /// each chain.  Default is to always apply\n        /// </summary>\n        /// <param name=\"chain\"></param>\n        /// <returns></returns>\n        public virtual bool Matches(HandlerChain chain)\n        {\n            return true;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Configuration/HandlerGraph.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\n\nnamespace FubuMVC.Core.ServiceBus.Configuration\n{\n    public class HandlerGraph : IEnumerable<HandlerChain>\n    {\n        private readonly IDictionary<Type, HandlerChain> _chains = new Dictionary<Type, HandlerChain>(); \n        private readonly IList<HandlerCall> _stagedCalls = new List<HandlerCall>();\n\n        public void Add(IEnumerable<HandlerCall> calls)\n        {\n            calls.Each(Add);\n        }\n\n        public void Add(HandlerCall call)\n        {\n            _stagedCalls.Add(call);\n\n            var inputType = call.InputType();\n            if (inputType.IsConcrete())\n            {\n                if (_chains.ContainsKey(inputType))\n                {\n                    call.AddClone(_chains[inputType]);\n                }\n                else\n                {\n                    var chain = new HandlerChain();\n                    _chains.Add(inputType, chain);\n                    call.AddClone(chain);\n                }\n            }\n        }\n\n        public void Compile()\n        {\n            _stagedCalls.Each(call => {\n                var matching = _chains.Values.Where(x => call.CouldHandleOtherMessageType(x.InputType()));\n                matching.Each(call.AddClone);\n            });\n\n            _chains.Each(pair => pair.Value.ReadAttributes());\n        }\n\n        public HandlerChain ChainFor(Type inputType)\n        {\n            return _chains.ContainsKey(inputType) ? _chains[inputType] : null;\n        }\n\n        public HandlerChain ChainFor<TInputType>()\n        {\n            return ChainFor(typeof (TInputType));\n        }\n\n        public IEnumerator<HandlerChain> GetEnumerator()\n        {\n            return _chains.Values.GetEnumerator();\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return GetEnumerator();\n        }\n\n        public void Import(HandlerGraph other)\n        {\n            _stagedCalls.Fill(other._stagedCalls);\n\n            other._chains.Values.Each(chain => {\n                var inputType = chain.InputType();\n                if (_chains.ContainsKey(inputType))\n                {\n                    var original = _chains[inputType];\n\n                    chain.ToArray().Each(original.AddToEnd);\n                }\n                else\n                {\n                    _chains.Add(inputType, chain);\n                }\n            });\n        }\n\n        public void ApplyPolicies(ConfigurationActionSet actions)\n        {\n            var graph = new BehaviorGraph();\n            _chains.Values.Each(graph.AddChain);\n\n            actions.RunActions(graph);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Configuration/HandlerGraphSource.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Registration;\n\nnamespace FubuMVC.Core.ServiceBus.Configuration\n{\n    // TODO -- add perf timings\n    public class HandlerGraphSource : IChainSource\n    {\n        public readonly IList<IHandlerSource> HandlerSources = new List<IHandlerSource>{new DefaultHandlerSource()};\n\n        public Task<BehaviorChain[]> BuildChains(BehaviorGraph graph, IPerfTimer timer)\n        {\n            var finders = HandlerSources.Select(x => x.FindCalls(graph.ApplicationAssembly)).ToArray();\n            return Task.WhenAll(finders).ContinueWith(all =>\n            {\n                var handlers = new HandlerGraph();\n\n                var allCalls = all.Result.SelectMany(x => x).Distinct();\n\n                handlers.Add(allCalls);\n\n                handlers.Compile();\n\n                return handlers.OfType<BehaviorChain>().ToArray();\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Configuration/HealthMonitoringExpression.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Monitoring;\nusing FubuMVC.Core.ServiceBus.Polling;\n\nnamespace FubuMVC.Core.ServiceBus.Configuration\n{\n    public class HealthMonitoringExpression\n    {\n        private readonly FubuRegistry _parent;\n\n        public HealthMonitoringExpression(FubuRegistry parent)\n        {\n            _parent = parent;\n        }\n\n        public HealthMonitoringExpression ScheduledExecution(ScheduledExecution scheduledExecution)\n        {\n            _parent.AlterSettings<PollingJobSettings>(x =>\n            {\n                x.AddJob<HealthMonitorPollingJob, HealthMonitoringSettings>(settings => settings.Interval)\n                    .ScheduledExecution = scheduledExecution;\n            });\n            return this;\n        }\n\n        /// <summary>\n        /// Seeds the random interval for health monitoring to a range of seconds\n        /// </summary>\n        /// <param name=\"seconds\"></param>\n        /// <returns></returns>\n        public HealthMonitoringExpression IntervalSeed(int seconds)\n        {\n            _parent.AlterSettings<HealthMonitoringSettings>(x => x.Seed = seconds);\n            return this;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Configuration/ISettingsAware.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Configuration\n{\n    public interface ISettingsAware\n    {\n        void ApplySettings(object settings, ChannelNode node);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Configuration/SchedulerMaker.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.ServiceBus.Scheduling;\n\nnamespace FubuMVC.Core.ServiceBus.Configuration\n{\n    public abstract class SchedulerMaker<T> : ISettingsAware\n    {\n        private readonly Expression<Func<T, int>> _expression;\n\n        public SchedulerMaker(Expression<Func<T, int>> expression)\n        {\n            _expression = expression;\n        }\n\n        void ISettingsAware.ApplySettings(object settings, ChannelNode node)\n        {\n            int threadCount = (int) ReflectionHelper.GetAccessor(_expression).GetValue(settings);\n            node.Scheduler = buildScheduler(threadCount);\n        }\n\n        protected abstract IScheduler buildScheduler(int threadCount);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Configuration/UriExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace FubuMVC.Core.ServiceBus.Configuration\n{\n    public static class UriExtensions\n    {\n        private static HashSet<string> _localhosts = new HashSet<string>(new[] { \"localhost\", \"127.0.0.1\" }, StringComparer.OrdinalIgnoreCase);\n\n        public static Uri NormalizeLocalhost(this Uri uri)\n        {\n            if (_localhosts.Contains(uri.Host))\n            {\n                return new UriBuilder(uri) { Host = System.Environment.MachineName }.Uri;\n            }\n            return uri;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/IMessagingSession.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics\n{\n    public interface IMessagingSession\n    {\n        void ClearAll();\n        void Record(MessageRecord record);\n        IEnumerable<MessageLog> TopLevelMessages();\n        IEnumerable<MessageLog> AllMessages();\n        IEnumerable<MessageRecord> All();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/MessageHistoryTableTag.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics\n{\n    public class MessageHistoryTableTag : TableTag\n    {\n        public MessageHistoryTableTag(MessageLog log)\n        {\n            AddClass(\"table\");\n\n            Style(\"width\", \"inherit\");\n            Style(\"margin-top\", \"50px\");\n\n            AddHeaderRow(tr => {\n                tr.Header(log.Description).Attr(\"colspan\", \"5\").Style(\"text-align\", \"left\");\n            });\n\n            AddHeaderRow(tr => {\n                tr.Header(\"Node\").Style(\"text-align\", \"left\");\n                tr.Header(\"Timestamp\").Style(\"text-align\", \"left\");\n                tr.Header(\"Message\").Style(\"text-align\", \"left\").Style(\"width\", \"200px\");\n                tr.Header(\"Header = \").Style(\"text-align\", \"right\");\n                tr.Header(\"Value\").Style(\"text-align\", \"left\");\n            });\n\n           \n\n            log.Records().Each(rec => {\n                var headers = rec.Headers.IsNotEmpty()  ? rec.Headers.Split(';').ToArray() : new string[0];\n                \n\n                AddBodyRow(tr => {\n                    tr.Cell(rec.Node).Attr(\"valign\", \"top\").Style(\"padding-right\", \"30px\");\n                    tr.Cell(rec.Timestamp.ToLongTimeString()).Style(\"padding-right\", \"30px\").Attr(\"valign\", \"top\").Attr(\"nowrap\", \"true\");\n                    tr.Cell(rec.Message).Attr(\"valign\", \"top\").Style(\"padding-right\", \"30px\");\n                    \n                    if (headers.Any())\n                    {\n                        var count = headers.Count().ToString();\n                        tr.Children.Each(x => x.Attr(\"rowspan\", count));\n\n                        string headerValue = headers.First();\n                        writeHeaderValue(headerValue, tr);\n                    }\n                });\n\n                for (int i = 1; i < headers.Count(); i++)\n                {\n                    AddBodyRow(tr => writeHeaderValue(headers[i], tr));\n                }\n\n                if (rec.ExceptionText.IsNotEmpty())\n                {\n                    AddBodyRow(tr => {\n                        var cell = tr.Cell();\n                        cell.Attr(\"colspan\", \"5\");\n\n\n                        cell.Add(\"pre\").Text(rec.ExceptionText).Style(\"background-color\", \"#FFFFAA\");\n                    });\n                }\n            });\n        }\n\n        private static void writeHeaderValue(string headerValue, TableRowTag tr)\n        {\n            var parts = headerValue.Split('=');\n            tr.Cell(parts.First() + \" = \").Attr(\"valign\", \"top\").Style(\"text-align\", \"right\").Attr(\"nowrap\", \"true\");\n            tr.Cell(parts.Last()).Attr(\"valign\", \"top\").Attr(\"nowrap\", \"true\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/MessageLog.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics\n{\n    public class MessageLog : MessageRecordNode\n    {\n        private readonly IList<MessageLog> _children = new List<MessageLog>();\n        private readonly IList<MessageRecord> _records = new List<MessageRecord>(); \n\n        public string Id { get; set; }\n        public string Type { get; set; }\n\n        public string Description\n        {\n            get { return \"Message {0} ({1})\".ToFormat(Id, Type); }\n        }\n\n        public IEnumerable<MessageRecord> Records()\n        {\n            return _records.OrderBy(x => x.Timestamp);\n        }\n\n        public void AddChild(MessageLog child)\n        {\n            _children.Fill(child);\n            child.Parent = this;\n        }\n\n        public MessageLog Parent { get; set; }\n\n\n        protected bool Equals(MessageLog other)\n        {\n            return Id.Equals(other.Id);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != GetType()) return false;\n            return Equals((MessageLog) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return Id.GetHashCode();\n        }\n\n        private IEnumerable<MessageRecordNode> allRecordNodes()\n        {\n            foreach (var child in _children)\n            {\n                yield return child;\n            }\n\n            foreach (var record in _records)\n            {\n                yield return record;\n            }\n        } \n\n        public override HtmlTag ToLeafTag()\n        {\n            var tag = new HtmlTag(\"li\").Text(Description);\n            var root = tag.Add(\"ol\");\n\n            allRecordNodes()\n                .OrderBy(x => x.Timestamp)\n                .Select(x => x.ToLeafTag())\n                .Each(x => root.Append(x));\n\n            return tag;\n        }\n\n        public void Record(MessageRecord record)\n        {\n            if (Type.IsEmpty() && record.Type.IsNotEmpty())\n            {\n                Type = record.Type;\n            }\n\n            _records.Add(record);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/MessageRecord.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics\n{\n    public class MessageRecord : MessageRecordNode\n    {\n        private Type _messageType;\n        public string Id;\n        public string Message;\n        public string Node;\n        public string ParentId;\n        public string Type;\n        public string Headers;\n        public string ExceptionText;\n\n        public MessageRecord()\n        {\n        }\n\n        public MessageRecord(EnvelopeToken envelope)\n        {\n            Id = envelope.CorrelationId;\n            ParentId = envelope.ParentId;\n            if (envelope.Message != null)\n            {\n                _messageType = envelope.Message.GetType();\n                Type = _messageType.FullName;\n            }\n\n            Headers = envelope.Headers.Keys().Select(x => \"{0}={1}\".ToFormat(x, envelope.Headers[x])).Join(\";\");\n        }\n\n        public bool IsPollingJobRelated()\n        {\n            return _messageType != null && _messageType.Closes(typeof(JobRequest<>));\n        }\n\n        public override HtmlTag ToLeafTag()\n        {\n            return new HtmlTag(\"li\").Text(\"{0}: {1}\".ToFormat(Node, Message));\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"{0} from {2}, Message: {1}, Headers: {3}\", Id, Message, Node, Headers);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/MessageRecordListener.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.Services.Messaging.Tracking;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics\n{\n\n    public class MessageRecordListener : ILogListener\n    {\n        private readonly IMessagingSession _session;\n\n        public MessageRecordListener(IMessagingSession session)\n        {\n            _session = session;\n        }\n\n        public bool ListensFor(Type type)\n        {\n            return type.CanBeCastTo<MessageLogRecord>();\n        }\n\n        public void DebugMessage(object message)\n        {\n            var log = message.As<MessageLogRecord>();\n            var record = log.ToRecord();\n\n            if (record.IsPollingJobRelated()) return;\n\n            MessageHistory.Record(log);\n\n            _session.Record(record);\n        }\n\n        public void InfoMessage(object message)\n        {\n            DebugMessage(message); // same difference here\n        }\n\n        public void Debug(string message)\n        {\n        }\n\n        public void Info(string message)\n        {\n        }\n\n        public void Error(string message, Exception ex)\n        {\n        }\n\n        public void Error(object correlationId, string message, Exception ex)\n        {\n            _session.Record(new MessageRecord\n            {\n                Id = correlationId.ToString(),\n                Message = \"Error logged\",\n                ExceptionText = ex.ToString()\n            });\n        }\n\n        public bool IsDebugEnabled\n        {\n            get\n            {\n                return true;\n            }\n        }\n\n        public bool IsInfoEnabled\n        {\n            get\n            {\n                return true;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/MessageRecordNode.cs",
    "content": "﻿using System;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics\n{\n    public abstract class MessageRecordNode\n    {\n        public DateTime Timestamp = DateTime.Now; // Yes, use local time because it's meant to be read by humans\n\n        public abstract HtmlTag ToLeafTag();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/MessagingSession.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.Services.Messaging;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics\n{\n    public class MessagingSession : IMessagingSession, IListener<MessageRecord>\n    {\n        private readonly IList<MessageRecord> _all = new List<MessageRecord>();\n        private readonly ChannelGraph _graph;\n\n        private readonly ConcurrentCache<string, MessageLog> _histories =\n            new ConcurrentCache<string, MessageLog>(id => new MessageLog {Id = id});\n\n        public MessagingSession(ChannelGraph graph)\n        {\n            _graph = graph;\n        }\n\n        public void Receive(MessageRecord message)\n        {\n            Record(message);\n        }\n\n        public void ClearAll()\n        {\n            _histories.ClearAll();\n            _all.Clear();\n        }\n\n        public void Record(MessageRecord record)\n        {\n            if (record == null) return;\n\n            if (_all.Contains(record)) return;\n            _all.Add(record);\n\n            // Important, don't override what's already there\n            if (record.Node.IsEmpty())\n            {\n                record.Node = _graph.NodeId;\n            }\n\n            // Letting the remote AppDomain's know about it.\n            GlobalMessageTracking.SendMessage(record);\n\n            var history = _histories[record.Id];\n            history.Record(record);\n\n            if (record.ParentId.IsNotEmpty() && record.ParentId != Guid.Empty.ToString())\n            {\n                var parent = _histories[record.ParentId];\n                parent.AddChild(history); // this is idempotent, so we're all good\n            }\n        }\n\n        public IEnumerable<MessageLog> TopLevelMessages()\n        {\n            return _histories.Where(x => x.Parent == null).OrderBy(x => x.Timestamp);\n        }\n\n        public IEnumerable<MessageLog> AllMessages()\n        {\n            return _histories.OrderBy(x => x.Timestamp);\n        }\n\n        public IEnumerable<MessageRecord> All()\n        {\n            return AllMessages().SelectMany(x => x.Records());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/Visualization/ChannelGraphFubuDiagnostics.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics.Visualization\n{\n    public class ChannelGraphFubuDiagnostics\n    {\n        private readonly ChannelGraph _graph;\n        private readonly ISubscriptionCache _cache;\n        private readonly IEnumerable<ITransport> _transports;\n        private readonly IEnumerable<IMessageSerializer> _serializers;\n\n        public ChannelGraphFubuDiagnostics(ChannelGraph graph, ISubscriptionCache cache, IEnumerable<ITransport> transports, IEnumerable<IMessageSerializer> serializers)\n        {\n            _graph = graph;\n            _cache = cache;\n            _transports = transports;\n            _serializers = serializers;\n        }\n\n        [System.ComponentModel.Description(\"Transports and Channels:Visualizes the active model of all the channels and transports in this application\")]\n        public HtmlTag get_channels()\n        {\n            var div = new HtmlTag(\"div\");\n\n            var header = \"Channels and Transports for Node \\\"{0}\\\", Id \\\"{1}\\\"\".ToFormat(_graph.Name, _graph.NodeId);\n\n            div.Add(\"h1\").Text(header);\n            div.Add(\"br\");\n\n            div.Add(\"h3\").Text(\"Transports\");\n            div.Append(new TransportsTag(_transports));\n\n            div.Add(\"h3\").Text(\"Serializers\");\n            div.Append(new SerializersTag(_serializers));\n\n            div.Add(\"h3\").Text(\"Channels\");\n            div.Append(new ChannelsTableTag(_graph));\n\n            div.Add(\"h3\").Text(\"Subscriptions\");\n            div.Append(new SubscriptionsTableTag(_cache.ActiveSubscriptions));\n\n            return div;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/Visualization/ChannelsTableTag.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics.Visualization\n{\n    public class ChannelsTableTag : TableTag\n    {\n        public ChannelsTableTag(ChannelGraph graph)\n        {\n            AddClass(\"table\");\n            AddClass(\"channels\");\n\n            AddHeaderRow(row => {\n                row.Header(\"Description\");\n                row.Header(\"Incoming Scheduler\");\n                row.Header(\"Routing Rules\");\n                row.Header(\"Serialization Default\");\n                row.Header(\"Modifiers\");\n            });\n\n            graph.OrderBy(x => x.Key).Each(channel => {\n                AddBodyRow(row => addRow(row, channel));\n            });\n        }\n\n        private void addRow(TableRowTag row, ChannelNode channel)\n        {\n            addDescriptionCell(row, channel);\n\n            addSchedulers(row, channel);\n\n            addRoutingRules(row, channel);\n\n            addSerialization(row, channel);\n\n            addModifiers(row, channel);\n        }\n\n        private void addModifiers(TableRowTag row, ChannelNode channel)\n        {\n            var cell = row.Cell().AddClass(\"modifiers\");\n            if (channel.Modifiers.Any())\n            {\n                cell.Add(\"ul\", ul => { channel.Modifiers.Each(x => ul.Add(\"li\").Text(x.ToString())); });\n            }\n            else\n            {\n                cell.Text(\"None\");\n            }\n        }\n\n        private void addSerialization(TableRowTag row, ChannelNode channel)\n        {\n            var cell = row.Cell().AddClass(\"serialization\");\n            if (channel.DefaultContentType.IsNotEmpty())\n            {\n                cell.Text(channel.DefaultContentType);\n            }\n            else if (channel.DefaultSerializer != null)\n            {\n                cell.Text(channel.DefaultSerializer.ToString());\n            }\n            else\n            {\n                cell.Text(\"None\");\n            }\n        }\n\n        private static void addRoutingRules(TableRowTag row, ChannelNode channel)\n        {\n            var cell = row.Cell().AddClass(\"routing-rules\");\n            if (channel.Rules.Any())\n            {\n                cell.Add(\"ul\", ul => { channel.Rules.Each(x => ul.Add(\"li\").Text(x.Describe())); });\n            }\n            else\n            {\n                cell.Text(\"None\");\n            }\n        }\n\n        private static void addSchedulers(TableRowTag row, ChannelNode channel)\n        {\n            var cell = row.Cell();\n            if (channel.Incoming)\n            {\n                var description = Description.For(channel.Scheduler);\n                cell.Append(new DescriptionBodyTag(description));\n            }\n            else\n            {\n                cell.Text(\"None\");\n            }\n        }\n\n        private static void addDescriptionCell(TableRowTag row, ChannelNode channel)\n        {\n            var cell = row.Cell();\n            cell.Add(\"h5\").Text(channel.Key);\n            cell.Add(\"div/i\").Text(channel.Uri.ToString());\n            if (channel.DefaultContentType != null)\n                cell.Add(\"div\").Text(\"Default Content Type: \" + channel.DefaultContentType);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/Visualization/ChildDescriptionTag.cs",
    "content": "﻿using FubuCore.Descriptions;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics.Visualization\n{\n    public class ChildDescriptionTag : HtmlTag\n    {\n        public ChildDescriptionTag(string name, Description child)\n            : base(\"div\")\n        {\n            AddClass(\"desc-child\");\n\n            Add(\"div\", title =>\n            {\n                title.AddClass(\"desc-child-title\");\n                title.Add(\"b\").Text(name);\n                title.Add(\"i\").Text(child.Title);\n            });\n\n            Add(\"div\").AddClass(\"desc-child-body\").Append(new DescriptionBodyTag(child));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/Visualization/DescriptionBodyTag.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics.Visualization\n{\n    public class DescriptionBodyTag : HtmlTag\n    {\n        public DescriptionBodyTag(Description description)\n            : base(\"div\")\n        {\n            AddClass(\"description-body\");\n\n            addDescriptionText(description);\n\n            writeProperties(description);\n\n            writeChildren(description);\n\n            description.BulletLists.Each(writeBulletList);\n        }\n\n        private void writeBulletList(BulletList list)\n        {\n            Add(\"div\").AddClass(\"desc-list-name\").Text(list.Label ?? list.Name);\n            list.Children.Each(writeBulletItem);\n        }\n\n        private void writeBulletItem(Description bullet)\n        {\n            Add(\"div\").AddClass(\"desc-bullet-item-title\").Text(bullet.Title);\n            Add(\"div\").AddClass(\"desc-bullet-item-body\").Append(new DescriptionBodyTag(bullet));\n        }\n\n        private void writeChildren(Description description)\n        {\n            description.Children.Each((name, child) => Append(new ChildDescriptionTag(name, child)));\n        }\n\n        private void writeProperties(Description description)\n        {\n            if (description.Properties.Any())\n            {\n                var table = new TableTag();\n                table.AddClass(\"desc-properties\");\n\n                description.Properties.Each((key, value) =>\n                {\n                    table.AddBodyRow(row =>\n                    {\n                        row.Header(key);\n                        row.Cell(value);\n                    });\n                });\n\n                Append(table);\n            }\n\n\n        }\n\n        private void addDescriptionText(Description description)\n        {\n            if (description.HasExplicitShortDescription())\n            {\n                Add(\"p\").AddClass(\"short-desc\").Text(description.ShortDescription);\n            }\n\n            if (description.LongDescription.IsNotEmpty())\n            {\n                Add(\"p\").AddClass(\"long-desc\").Text(description.LongDescription);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/Visualization/DescriptionPropertyTag.cs",
    "content": "﻿using HtmlTags;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics.Visualization\n{\n    public class DescriptionPropertyTag : HtmlTag\n    {\n        public DescriptionPropertyTag(string key, string value)\n            : base(\"div\")\n        {\n            AddClass(\"desc-prop\");\n            Add(\"b\").Text(key);\n            Add(\"span\").Text(value);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/Visualization/FubuDiagnosticsConfiguration.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Diagnostics.Visualization\n{\n    public class FubuDiagnosticsConfiguration\n    {\n        public string Url = \"transport\";\n        public string Title = \"FubuTransportation\";\n        public string Description = \"Visualization of FubuTransportation services\";\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/Visualization/HtmlTagExtensions.cs",
    "content": "﻿using HtmlTags;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics.Visualization\n{\n    public static class HtmlTagExtensions\n    {\n        public static LiteralTag ToLiteral(this object target)\n        {\n            return new LiteralTag(target.ToString());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/Visualization/MessagesFubuDiagnostics.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics.Visualization\n{\n    public class MessagesFubuDiagnostics\n    {\n        private readonly BehaviorGraph _graph;\n\n        public MessagesFubuDiagnostics(BehaviorGraph graph, ChannelGraph channels)\n        {\n            _graph = graph;\n        }\n\n        [Description(\"Message Handlers:A representation of all the message types and handlers for this FubuTransportation node\")]\n        public Dictionary<string, object>[] get_messages()\n        {\n            return _graph.Handlers.Where(x => !x.IsPollingJob()).OrderBy(x => x.InputType().Name).Select(chain =>\n            {\n                var calls = chain.OfType<HandlerCall>().Select(x => x.Description).Join(\", \");\n\n                return new Dictionary<string, object>\n                {\n                    {\"message_type\", chain.InputType().Name},\n                    {\"full_name\", chain.InputType().FullName},\n                    {\"hash\", chain.Key},\n                    {\"handlers\", calls}\n                };\n            }).ToArray();\n\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/Visualization/ScheduledJobsFubuDiagnostics.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\nusing FubuMVC.Core.Urls;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics.Visualization\n{\n    public class ScheduledJobsFubuDiagnostics\n    {\n        private readonly IUrlRegistry _urls;\n        private readonly ISchedulePersistence _persistence;\n        private readonly ChannelGraph _graph;\n        private readonly ScheduledJobGraph _jobs;\n        private readonly IScheduledJobController _controller;\n\n        public ScheduledJobsFubuDiagnostics(IUrlRegistry urls, ISchedulePersistence persistence, ChannelGraph graph, ScheduledJobGraph jobs, IScheduledJobController controller)\n        {\n            _urls = urls;\n            _persistence = persistence;\n            _graph = graph;\n            _jobs = jobs;\n            _controller = controller;\n        }\n\n        [System.ComponentModel.Description(\"Schedules:Scheduled Job Monitor\")]\n        public HtmlTag get_scheduled_jobs()\n        {\n            var tag = new HtmlTag(\"div\");\n            tag.Add(\"h1\").Text(\"Scheduled Jobs Monitor\");\n            tag.Add(\"p\").Text(\"at {0} -- reload the page to refresh the data\".ToFormat(DateTime.Now));\n\n            var schedule = _persistence.FindAll(_graph.Name);\n            tag.Append(new ScheduledJobTable(_urls, schedule));\n\n            return tag;\n        }\n\n        [System.ComponentModel.Description(\"Scheduled Job History\")]\n        public HtmlTag get_job_details_Job(ScheduledJobRequest request)\n        {\n            var schedule = _persistence.Find(_graph.Name, request.Job);\n\n            var tag = new HtmlTag(\"div\");\n            tag.Add(\"h2\").Text(\"Recent Execution History for \" + request.Job);\n\n            var job = _jobs.Jobs.FirstOrDefault(x => JobStatus.GetKey(x.JobType) == request.Job);\n            if (job != null)\n            {\n                var descriptionTag = new DescriptionBodyTag(Description.For(job));\n                tag.Append(descriptionTag);\n                tag.Append(\"hr\");\n                tag.Append(\"h4\").Text(\"History\");\n            }\n\n            var history = _persistence.FindHistory(_graph.Name, request.Job);\n            tag.Append(new ScheduledJobHistoryTable(history));\n\n            return tag;\n        }\n\n        public FubuContinuation get_jobs_execute_Name(RunJobRequest request)\n        {\n            var job = _jobs.Jobs.FirstOrDefault(x => x.JobType.Name.EqualsIgnoreCase(request.Name));\n            if (job != null)\n            {\n                _controller.ExecuteNow(job);\n            }\n\n            return FubuContinuation.RedirectTo<ScheduledJobsFubuDiagnostics>(_ => _.get_scheduled_jobs());\n        }\n    }\n\n    public class RunJobRequest\n    {\n        public string Name { get; set; }\n    }\n\n    public class ScheduledJobRequest\n    {\n        public string Job { get; set; }\n    }\n\n    public class ScheduledJobHistoryTable : TableTag\n    {\n        public readonly string Script = @\"\n\n\";\n\n        public ScheduledJobHistoryTable(IEnumerable<JobExecutionRecord> records)\n        {\n            AddClass(\"table\");\n\n            AddHeaderRow(row => {\n                row.Header(\"Finished\");\n                row.Header(\"Node\");\n                row.Header(\"Success\");\n                row.Header(\"Duration (ms)\");\n                row.Header(\"Attempt #\");\n                row.Header(\"Exception\");\n            });\n\n            records.OrderByDescending(x => x.Finished).Each(record => {\n                AddBodyRow(row => addRecord(record, row));\n            });  \n        }\n\n        private void addRecord(JobExecutionRecord record, TableRowTag row)\n        {\n            row.Cell(record.Finished.ToLocalTime().ToString()).Style(\"vertical-align\", \"top\");\n            row.Cell(record.Executor).Style(\"vertical-align\", \"top\");\n            row.Cell(record.Success ? \"Success\" : \"Failed\").Style(\"vertical-align\", \"top\");\n            row.Cell(record.Duration.ToString()).Attr(\"align\", \"right\").Style(\"vertical-align\", \"top\");\n            row.Cell(record.Attempts.ToString()).Attr(\"align\", \"right\").Style(\"vertical-align\", \"top\");\n            if (record.ExceptionText.IsEmpty())\n            {\n                row.Cell(\"None\");\n            }\n            else\n            {\n                row.Cell().Add(\"pre\").Text(record.ExceptionText).Style(\"font-size\", \"xx-small\");\n            }\n        }\n    }\n\n    public class ScheduledJobTable : TableTag\n    {\n        public ScheduledJobTable(IUrlRegistry urls, IEnumerable<JobStatusDTO> statusList)\n        {\n            AddClass(\"table\");\n\n            AddHeaderRow(row => {\n                row.Header(\"Job\");\n                row.Header(\"Next Time (Estimate)\");\n                row.Header(\"Status\"); // show on node\n                row.Header(\"Last Execution\");\n                row.Header(\"Execute\");\n            });\n\n\n\n            statusList.Each(job => {\n                AddBodyRow(row => addJobRow(row, job, urls));\n            });\n        }\n\n        private void addJobRow(TableRowTag row, JobStatusDTO job, IUrlRegistry urls)\n        {\n            row.Cell().Add(\"a\").Text(job.JobKey).Attr(\"href\", urls.UrlFor(new ScheduledJobRequest{Job = job.JobKey}));\n            row.Cell(job.NextTime.HasValue ? job.NextTime.Value.ToLocalTime().ToString() : \"Not scheduled\");\n            row.Cell(job.GetStatusDescription());\n            row.Cell(job.GetLastExecutionDescription());\n\n            var url = urls.UrlFor(new RunJobRequest {Name = job.JobKey});\n\n            row.Cell().Add(\"button\").Text(\"Execute\").Attr(\"data-url\", url).AddClass(\"button\").AddClass(\"executor\").Attr(\"onclick\", \"if (window.confirm('Ok to run this job?')) window.location='\" + url + \"'\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/Visualization/SerializersTag.cs",
    "content": "using System.Collections.Generic;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics.Visualization\n{\n    public class SerializersTag : TableTag\n    {\n        public SerializersTag(IEnumerable<IMessageSerializer> serializers)\n        {\n            AddClass(\"table\");\n\n            AddHeaderRow(row => {\n                                    row.Header(\"Serializer\");\n                                    row.Header(\"Description\");\n                                    row.Header(\"Content Type\");\n            });\n\n            serializers.Each(x => {\n                                      var description = Description.For(x);\n                                      AddBodyRow(row =>\n                                      {\n                                          row.Cell(description.Title).AddClass(\"title\");\n                                          row.Cell().AddClass(\"description\").Text(description.ShortDescription);\n                                          row.Cell(x.ContentType);\n                                      });\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/Visualization/SubscriptionsFubuDiagnostics.cs",
    "content": "﻿using FubuCore.Descriptions;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics.Visualization\n{\n    public class SubscriptionsFubuDiagnostics\n    {\n        private readonly ISubscriptionPersistence _persistence;\n\n        public SubscriptionsFubuDiagnostics(ISubscriptionPersistence persistence)\n        {\n            _persistence = persistence;\n        }\n\n        [System.ComponentModel.Description(\"Subscriptions:Visualizes the persisted subscriptions in this active node\")]\n        public HtmlTag get_subscriptions()\n        {\n            var div = new HtmlTag(\"div\");\n\n            div.Add(\"h3\").Text(\"Subscription Persistence\");\n            div.Append( new DescriptionBodyTag(Description.For(_persistence)));\n\n            div.Add(\"h3\").Text(\"Nodes\");\n            div.Append(new TransportNodeTableTag(_persistence.AllNodes()));\n\n            div.Add(\"h3\").Text(\"Subscriptions\");\n            div.Append(new SubscriptionStorageTableTag(_persistence.AllSubscriptions()));\n\n            return div;\n        }\n    }\n\n    public class SubscriptionsViewModel\n    {\n        public DescriptionBodyTag Persistence { get; set; }\n        public TransportNodeTableTag Nodes { get; set; }\n        public SubscriptionStorageTableTag Subscriptions { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/Visualization/SubscriptionsTableTag.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics.Visualization\n{\n    public class SubscriptionsTableTag : TableTag\n    {\n        public SubscriptionsTableTag(IEnumerable<Subscription> subscriptions)\n        {\n            AddClass(\"table\");\n            AddClass(\"subscriptions\");\n\n            AddHeaderRow(row => {\n                row.Header(\"Receiver\");\n                row.Header(\"Message Type\");\n            });\n\n            subscriptions.OrderBy(x => x.MessageType).ThenBy(x => x.Receiver.ToString()).Each(addSubscription);\n        }\n\n        private void addSubscription(Subscription s)\n        {\n            AddBodyRow(row => {\n                row.Cell(s.Receiver.ToString());\n                row.Cell(s.MessageType);\n            });\n        }\n    }\n\n    public class SubscriptionStorageTableTag : TableTag\n    {\n        public SubscriptionStorageTableTag(IEnumerable<Subscription> subscriptions)\n        {\n            AddClass(\"table\");\n            AddClass(\"subscriptions\");\n\n            AddHeaderRow(row => {\n                row.Header(\"Id\");\n                row.Header(\"Source\");\n                row.Header(\"Receiver\");\n                row.Header(\"Message Type\");\n                row.Header(\"Node Name\");\n                row.Header(\"Role\");\n            });\n\n            subscriptions.OrderBy(x => x.MessageType).ThenBy(x => x.Receiver.ToString()).Each(addSubscription);\n        }\n\n        private void addSubscription(Subscription s)\n        {\n            AddBodyRow(row => {\n                row.Cell(s.Id.ToString());\n                row.Cell(s.Source.ToString());\n                row.Cell(s.Receiver.ToString());\n                row.Cell(s.MessageType);\n                row.Cell(s.NodeName);\n                row.Cell(s.Role.ToString());\n            });\n        }\n    }\n\n    public class TransportNodeTableTag : TableTag\n    {\n        public TransportNodeTableTag(IEnumerable<TransportNode> nodes)\n        {\n            AddClass(\"table\");\n            AddClass(\"nodes\");\n\n            AddHeaderRow(row => {\n                row.Header(\"Id\");\n                row.Header(\"Machine\");\n                row.Header(\"Node Name\");\n                row.Header(\"Addresses\");\n            });\n\n            nodes.OrderBy(x => x.MachineName).ThenBy(x => x.NodeName).Each(addNode);\n        }\n\n        private void addNode(TransportNode transportNode)\n        {\n            AddBodyRow(row => {\n                row.Cell(transportNode.Id.ToString());\n                row.Cell(transportNode.MachineName);\n                row.Cell(transportNode.NodeName);\n                row.Cell(transportNode.ControlChannel.ToString());\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/Visualization/TasksFubuDiagnostics.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing FubuCore.Util;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics.Visualization\n{\n\n    public class TasksFubuDiagnostics\n    {\n        private readonly ISubscriptionRepository _repository;\n        private readonly IPersistentTaskController _tasks;\n\n        public TasksFubuDiagnostics(ISubscriptionRepository repository, IPersistentTaskController tasks)\n        {\n            _repository = repository;\n            _tasks = tasks;\n        }\n\n        [Description(\"Tasks:Permanent Tasks\")]\n        public HtmlTag get_tasks()\n        {\n            var peers = _repository.FindPeers();\n            var cache = new Cache<Uri, TransportNode>();\n            peers.Each(peer => peer.OwnedTasks.Each(x => cache[x] = peer));\n\n            \n            var tag = new HtmlTag(\"div\");\n            tag.Add(\"h1\").Text(\"Task Assignements\");\n\n\n            var table = new TableTag();\n            tag.Append(table);\n            \n            table.AddClass(\"table\");\n\n            table.AddHeaderRow(row => {\n                row.Header(\"Task\");\n                row.Header(\"Assigned to\");\n                row.Header(\"Control Channel\");\n            });\n\n            var tasks = _tasks.PermanentTasks().Union(_tasks.ActiveTasks()).ToArray();\n            tasks.Each(uri => {\n                table.AddBodyRow(row => addRow(row, uri, cache));\n            });\n\n            return tag;\n        }\n\n        private void addRow(TableRowTag row, Uri uri, Cache<Uri, TransportNode> peers)\n        {\n            row.Cell(uri.ToString());\n            if (peers.Has(uri))\n            {\n                var peer = peers[uri];\n                row.Cell(peer.Id);\n                row.Cell(peer.ControlChannel.ToString());\n            }\n            else\n            {\n                row.Cell(\"None\");\n                row.Cell();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Diagnostics/Visualization/TransportsTag.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.ServiceBus.Diagnostics.Visualization\n{\n    public class TransportsTag : TableTag\n    {\n        public TransportsTag(IEnumerable<ITransport> transports)\n        {\n            AddClass(\"table\");\n            AddClass(\"transports\");\n\n            transports.Each(x => {\n                var description = Description.For(x);\n\n                AddBodyRow(row => {\n                    row.Cell(description.Title).AddClass(\"title\");\n                    row.Cell().AddClass(\"description\").Text(description.ShortDescription);\n                });\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ErrorHandling/Always.cs",
    "content": "﻿using System;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.ServiceBus.ErrorHandling\n{\n    [Title(\"Always\")]\n    public class Always : IExceptionMatch\n    {\n        public bool Matches(Envelope envelope, Exception ex)\n        {\n            return true;\n        }\n\n        public override string ToString()\n        {\n            return \"Always\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ErrorHandling/DelayedRetryContinuation.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\n\nnamespace FubuMVC.Core.ServiceBus.ErrorHandling\n{\n    public class DelayedRetryContinuation : IContinuation,DescribesItself\n    {\n        private readonly TimeSpan _delay;\n\n        public DelayedRetryContinuation(TimeSpan delay)\n        {\n            _delay = delay;\n        }\n\n        public void Execute(Envelope envelope, IEnvelopeContext context)\n        {\n            envelope.Callback.MoveToDelayedUntil(context.SystemTime.UtcNow().Add(_delay));\n        }\n\n        public TimeSpan Delay\n        {\n            get { return _delay; }\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = \"Retry in {0} seconds\".ToFormat(_delay.TotalSeconds);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ErrorHandling/ErrorHandler.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\n\nnamespace FubuMVC.Core.ServiceBus.ErrorHandling\n{\n    public class ErrorHandler : IErrorHandler, IExceptionMatch, DescribesItself\n    {\n        public static readonly RequeueContinuation Requeue = new RequeueContinuation();\n\n        private readonly IList<IExceptionMatch> _conditions = new List<IExceptionMatch>(); \n\n       \n        private readonly IList<IContinuationSource> _sources = new List<IContinuationSource>(); \n\n        public void AddContinuation(IContinuation continuation)\n        {\n            _sources.Add(new ContinuationSource(continuation));\n        }\n\n        public IContinuation Continuation(Envelope envelope, Exception ex)\n        {\n            var count = _sources.Count;\n            switch (count)\n            {\n                case 0:\n                    return Requeue;\n\n                case 1:\n                    return _sources.Single().DetermineContinuation(envelope, ex);\n\n                default:\n                    return new CompositeContinuation(_sources.Select(x => x.DetermineContinuation(envelope, ex)).ToArray());\n            }\n        }\n\n        public void AddCondition(IExceptionMatch condition)\n        {\n            _conditions.Add(condition);\n        }\n\n        public void AddContinuation(IContinuationSource source)\n        {\n            _sources.Add(source);\n        }\n\n        public IList<IContinuationSource> Sources\n        {\n            get { return _sources; }\n        }\n\n        public IEnumerable<IExceptionMatch> Conditions\n        {\n            get { return _conditions; }\n        }\n\n        public IContinuation DetermineContinuation(Envelope envelope, Exception ex)\n        {\n            return Matches(envelope, ex) ? Continuation(envelope, ex) : null;\n        }\n\n        public bool Matches(Envelope envelope, Exception ex)\n        {\n            if (!_conditions.Any()) return true;\n\n            return _conditions.All(x => x.Matches(envelope, ex));\n        }\n\n\n        public void Describe(Description description)\n        {\n            description.Title = _conditions.Any() \n                ? _conditions.Select(x => Description.For(x).Title).Join(\" and \") \n                : \"Always\";\n\n            if (_sources.Count > 1)\n            {\n                description.AddList(\"Continuations\", _sources);\n            }\n            else if (_sources.Count == 1)\n            {\n                description.ShortDescription = Description.For(_sources.Single()).ShortDescription;\n            }\n        }\n    }\n\n    public class ContinuationSource : IContinuationSource, DescribesItself\n    {\n        private readonly IContinuation _continuation;\n\n        public ContinuationSource(IContinuation continuation)\n        {\n            _continuation = continuation;\n        }\n\n        public IContinuation DetermineContinuation(Envelope envelope, Exception ex)\n        {\n            return _continuation;\n        }\n\n        public void Describe(Description description)\n        {\n            if (_continuation is DescribesItself)\n            {\n                _continuation.As<DescribesItself>().Describe(description);\n            }\n            else\n            {\n                description.ShortDescription = _continuation.ToString();\n            }\n        }\n    }\n\n    public interface IContinuationSource\n    {\n        IContinuation DetermineContinuation(Envelope envelope, Exception ex);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ErrorHandling/ErrorReport.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\n\nnamespace FubuMVC.Core.ServiceBus.ErrorHandling\n{\n    [Serializable]\n    public class ErrorReport\n    {\n        public const string ExceptionDetected = \"Exception Detected\";\n\n        public ErrorReport(Envelope envelope, Exception ex)\n        {\n            Headers = envelope.Headers.ToDictionary();\n            ExceptionText = ex.ToString();\n            ExceptionMessage = ex.Message;\n            ExceptionType = ex.GetType().FullName;\n            Explanation = ExceptionDetected;\n            RawData = envelope.Data;\n            Message = envelope.Message;\n        }\n\n        [NonSerialized] public object Message; // leave it like this please\n\n        public byte[] RawData { get; set; }\n\n        public IDictionary<string, string> Headers { get; set; }\n\n        public string Explanation { get; set; }\n\n        public string ExceptionType { get; set; }\n        public string ExceptionMessage { get; set; }\n        public string ExceptionText { get; set; }\n\n        protected bool Equals(ErrorReport other)\n        {\n            return Equals(Message, other.Message) && string.Equals(ExceptionText, other.ExceptionText);\n        }\n\n        public byte[] Serialize()\n        {\n            using (var stream = new MemoryStream())\n            {\n                new BinarySerializer().Serialize(this, stream);\n                stream.Position = 0;\n                return stream.ReadAllBytes();\n            }\n\n\n        }\n\n        public static ErrorReport Deserialize(byte[] data)\n        {\n            var stream = new MemoryStream(data);\n\n            return (ErrorReport) new BinarySerializer().Deserialize(stream);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((ErrorReport) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((Message != null ? Message.GetHashCode() : 0)*397) ^ (ExceptionText != null ? ExceptionText.GetHashCode() : 0);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ErrorHandling/ExceptionHandlerBehavior.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\n\nnamespace FubuMVC.Core.ServiceBus.ErrorHandling\n{\n    public class ExceptionHandlerBehavior : IActionBehavior\n    {\n        private readonly IActionBehavior _behavior;\n        private readonly Envelope _envelope;\n        private readonly IInvocationContext _context;\n        private readonly ILogger _logger;\n        private readonly IFubuRequest _request;\n\n        public ExceptionHandlerBehavior(IActionBehavior behavior, HandlerChain chain, Envelope envelope, IInvocationContext context, ILogger logger, IFubuRequest request)\n        {\n            _behavior = behavior;\n            Chain = chain;\n            _envelope = envelope;\n            _context = context;\n            _logger = logger;\n            _request = request;\n        }\n\n        public async Task Invoke()\n        {\n            try\n            {\n                await _behavior.Invoke().ConfigureAwait(false);\n            }\n            catch (Exception ex)\n            {\n                var message = _request.Get(Chain.InputType());\n\n                if (message == null)\n                {\n                    _logger.Error(_envelope.CorrelationId, ex);\n                }\n                else\n                {\n                    _logger.Error(_envelope.CorrelationId, \"Error trying to process \" + message, ex);\n                }\n\n                _context.Continuation = DetermineContinuation(ex);\n            }\n        }\n\n        public IContinuation DetermineContinuation(Exception ex)\n        {\n            if (_envelope.Attempts >= Chain.MaximumAttempts)\n            {\n                return new MoveToErrorQueue(ex);\n            }\n\n            return tryToDetermineContinuation(ex)\n                   ?? new MoveToErrorQueue(ex);\n        }\n\n        private IContinuation tryToDetermineContinuation(Exception ex)\n        {\n            var aggregate = ex as AggregateException;\n            if (aggregate != null)\n            {\n                var exceptions = aggregate.Flatten().InnerExceptions;\n                return exceptions.FirstValue(tryToDetermineContinuation);\n            }\n            \n            return Chain.ErrorHandlers.FirstValue(x => x.DetermineContinuation(_envelope, ex));\n        }\n\n        public HandlerChain Chain { get; }\n\n        public Task InvokePartial()\n        {\n            return _behavior.InvokePartial();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ErrorHandling/ExceptionHandlerNode.cs",
    "content": "﻿using FubuCore.Descriptions;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.ServiceBus.ErrorHandling\n{\n    public class ExceptionHandlerNode : BehaviorNode, DescribesItself\n    {\n        private readonly HandlerChain _chain;\n\n        public ExceptionHandlerNode(HandlerChain chain)\n        {\n            _chain = chain;\n        }\n\n        public new HandlerChain Chain\n        {\n            get { return _chain; }\n        }\n\n        protected override IConfiguredInstance buildInstance()\n        {\n            var instance = new SmartInstance<ExceptionHandlerBehavior>();\n            instance.Ctor<HandlerChain>().Is(_chain);\n\n            return instance;\n        }\n\n        public override BehaviorCategory Category\n        {\n            get { return BehaviorCategory.Wrapper; }\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = \"Error Handling\";\n            description.AddList(\"Policies\", _chain.ErrorHandlers);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ErrorHandling/ExceptionMatch.cs",
    "content": "﻿using System;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.ServiceBus.ErrorHandling\n{\n    public class ExceptionMatch : IExceptionMatch, DescribesItself\n    {\n        private readonly Func<Exception, bool> _filter;\n        private readonly string _description;\n\n        public ExceptionMatch(Func<Exception, bool> filter, string description)\n        {\n            _filter = filter;\n            _description = description;\n        }\n\n        public bool Matches(Envelope envelope, Exception ex)\n        {\n            return _filter(ex);\n        }\n\n        public string Description\n        {\n            get { return _description; }\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = _description;\n            description.ShortDescription = string.Empty;\n        }\n\n        public override string ToString()\n        {\n            return _description;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ErrorHandling/ExceptionMatchExpression.cs",
    "content": "﻿using System;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServiceBus.ErrorHandling\n{\n    public class ExceptionMatchExpression\n    {\n        private readonly Action<IExceptionMatch> _registration;\n\n        public ExceptionMatchExpression(Action<IExceptionMatch> registration)\n        {\n            _registration = registration;\n        }\n\n        public ExceptionMatchExpression Matching(Func<Exception, bool> filter, string description)\n        {\n            var match = new ExceptionMatch(filter, description);\n            _registration(match);\n\n            return this;\n        }\n\n        public ExceptionMatchExpression MessageContains(string text)\n        {\n            return Matching(ex => ex.Message.ToLowerInvariant().Contains(text.ToLowerInvariant()),\n                            \"Exception message contains '{0}'\".ToFormat(text));\n        }\n\n        public ExceptionMatchExpression IsType<T>() where T : Exception\n        {\n            return Matching(t => t is T, \"Exception type is \" + typeof (T).FullName);\n        }\n\n        // TODO -- more options?  By namespace/assembly ????\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ErrorHandling/ExceptionTypeMatch.cs",
    "content": "﻿using System;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.ServiceBus.ErrorHandling\n{\n    public class ExceptionTypeMatch<T> : IExceptionMatch, DescribesItself where T : Exception\n    {\n        public bool Matches(Envelope envelope, Exception ex)\n        {\n            return ex is T;\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = ToString();\n            description.ShortDescription = string.Empty;\n        }\n\n        public override string ToString()\n        {\n            return \"If the exception is \" + typeof(T).Name;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ErrorHandling/IErrorHandler.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\n\nnamespace FubuMVC.Core.ServiceBus.ErrorHandling\n{\n    public interface IErrorHandler\n    {\n        IContinuation DetermineContinuation(Envelope envelope, Exception ex);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ErrorHandling/IExceptionMatch.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.ServiceBus.ErrorHandling\n{\n    public interface IExceptionMatch\n    {\n        bool Matches(Envelope envelope, Exception ex);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ErrorHandling/MoveToErrorQueue.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\n\nnamespace FubuMVC.Core.ServiceBus.ErrorHandling\n{\n    [Description(\"Moves the message envelope to the error queue for the current transport\")]\n    public class MoveToErrorQueue : IContinuation\n    {\n        private readonly Exception _exception;\n\n        public MoveToErrorQueue(Exception exception)\n        {\n            _exception = exception;\n        }\n\n        public Exception Exception\n        {\n            get { return _exception; }\n        }\n\n        public void Execute(Envelope envelope, IEnvelopeContext context)\n        {\n            context.SendFailureAcknowledgement(envelope, \"Moved message {0} to the Error Queue.\\n{1}\".ToFormat(envelope.CorrelationId, _exception));\n\n            var report = new ErrorReport(envelope, _exception);\n            envelope.Callback.MoveToErrors(report);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ErrorHandling/MoveToErrorQueueHandler.cs",
    "content": "﻿using System;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\n\nnamespace FubuMVC.Core.ServiceBus.ErrorHandling\n{\n    public class MoveToErrorQueueHandler<T> : IErrorHandler, IContinuationSource, DescribesItself where T : Exception\n    {\n        public IContinuation DetermineContinuation(Envelope envelope, Exception ex)\n        {\n            if (ex is T) return new MoveToErrorQueue(ex);\n\n            return null;\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = \"Move to error queue if the exception is \" + typeof (T).Name;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ErrorHandling/RequeueContinuation.cs",
    "content": "﻿using System.ComponentModel;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\n\nnamespace FubuMVC.Core.ServiceBus.ErrorHandling\n{\n    [Description(\"Requeue the envelope locally\")]\n    public class RequeueContinuation : IContinuation\n    {\n        public void Execute(Envelope envelope, IEnvelopeContext context)\n        {\n            envelope.Callback.Requeue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ErrorHandling/RespondWithMessageContinuation.cs",
    "content": "﻿using System.ComponentModel;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\n\nnamespace FubuMVC.Core.ServiceBus.ErrorHandling\n{\n    [Description(\"Sends a custom response back to the message sender on failure\")]\n    public class RespondWithMessageContinuation : IContinuation\n    {\n        private readonly object _message;\n\n        public RespondWithMessageContinuation(object message)\n        {\n            _message = message;\n        }\n\n        public object Message\n        {\n            get { return _message; }\n        }\n\n        public void Execute(Envelope envelope, IEnvelopeContext context)\n        {\n            context.SendOutgoingMessages(envelope, new[] { Message });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ErrorHandling/RespondWithMessageHandler.cs",
    "content": "﻿using System;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\n\nnamespace FubuMVC.Core.ServiceBus.ErrorHandling\n{\n    public class RespondWithMessageHandler<T> : IContinuationSource, DescribesItself where T : Exception\n    {\n        private readonly Func<T, Envelope, object> _messageFunc;\n\n        public RespondWithMessageHandler(Func<Exception, Envelope, object> messageFunc)\n        {\n            _messageFunc = messageFunc;\n        }\n\n        public IContinuation DetermineContinuation(Envelope envelope, Exception ex)\n        {\n            var exception = ex as T;\n            if (exception == null)\n                return null;\n\n            var message = _messageFunc(exception, envelope);\n            return new RespondWithMessageContinuation(message);\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = \"Respond to sender with a custom message if exception is \" + typeof(T).Name;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ErrorHandling/RetryNowContinuation.cs",
    "content": "﻿using System.ComponentModel;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\n\nnamespace FubuMVC.Core.ServiceBus.ErrorHandling\n{\n    [Description(\"Retry the message through the handler chain without being re-queued\")]\n    public class RetryNowContinuation : IContinuation\n    {\n        public void Execute(Envelope envelope, IEnvelopeContext context)\n        {\n            context.Retry(envelope);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/EventAggregator.cs",
    "content": "﻿using System;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Events;\n\nnamespace FubuMVC.Core.ServiceBus\n{\n    public class EventAggregator : IEventAggregator\n    {\n        private readonly Lazy<ILogger> _logger;\n        private readonly ConcurrentDictionary<object, object> _listeners = new ConcurrentDictionary<object, object>();\n\n        public EventAggregator(Func<ILogger> logger, IEnumerable<IListener> listeners)\n        {\n            _logger = new Lazy<ILogger>(logger);\n            foreach (var listener in listeners)\n            {\n                addListener(listener);\n            }\n        }\n\n        private void addListener(object listener)\n        {\n            _listeners.AddOrUpdate(listener, listener, (a, b) => listener);\n        }\n\n        public virtual void SendMessage<T>(T message)\n        {\n            Task.Factory.StartNew(() => sendMessageToListeners(message));\n        }\n\n        protected void sendMessageToListeners<T>(T message)\n        {\n            //Performance critical, keep this way\n            foreach (var kvp in _listeners)\n            {\n                var listener = kvp.Key as IListener<T>;\n                if (listener == null)\n                {\n                    continue;\n                }\n                try\n                {\n                    listener.Handle(message);\n                }\n                catch (Exception e)\n                {\n                    _logger.Value.Error(\n                        \"Failed while trying to process event {0} with listener {1}\".ToFormat(message, listener), e);\n                }\n            }\n        }\n\n        public void SendMessage<T>() where T : new()\n        {\n            SendMessage(new T());\n        }\n\n        public void AddListener(object listener)\n        {\n            _listeners.AddOrUpdate(listener, listener, (a, b) => b);\n        }\n\n        public void RemoveListener(object listener)\n        {\n            _listeners.TryRemove(listener, out listener);\n        }\n\n        public IEnumerable<object> Listeners\n        {\n            get { return _listeners.Select(x => x.Key).ToArray(); }\n        }\n\n        public void PruneExpiredListeners(DateTime currentTime)\n        {\n            var items = new List<object>();\n            foreach (var listener in _listeners)\n            {\n                var key = listener.Key;\n                if (key.IsExpired(currentTime))\n                {\n                    items.Add(key);\n                }\n            }\n            foreach (var listener in items)\n            {\n                RemoveListener(listener);\n            }\n        }\n\n        public void AddListeners(params object[] listeners)\n        {\n            foreach (var listener in listeners)\n            {\n                addListener(listener);\n            }\n        }\n\n        public bool HasListener(object listener)\n        {\n            return _listeners.ContainsKey(listener);\n        }\n\n        public void RemoveAllListeners()\n        {\n            _listeners.Clear();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Events/ExpiringListenerCleanup.cs",
    "content": "﻿using System.Threading;\nusing FubuCore.Dates;\nusing FubuMVC.Core.ServiceBus.Polling;\n\nnamespace FubuMVC.Core.ServiceBus.Events\n{\n    public class ExpiringListenerCleanup : IJob\n    {\n        private readonly IEventAggregator _events;\n        private readonly ISystemTime _systemTime;\n\n        public ExpiringListenerCleanup(IEventAggregator events, ISystemTime systemTime)\n        {\n            _events = events;\n            _systemTime = systemTime;\n        }\n\n        public void Execute(CancellationToken cancellation)\n        {\n            _events.PruneExpiredListeners(_systemTime.UtcNow());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Events/ExpiringListenerExtensions.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.ServiceBus.Events\n{\n    public static class ExpiringListenerExtensions\n    {\n        public static bool IsExpired(this object o, DateTime currentTime)\n        {\n            var expiring = o as IExpiringListener;\n\n            if (expiring == null) return false;\n\n            return expiring.IsExpired || (expiring.ExpiresAt.HasValue && expiring.ExpiresAt.Value <= currentTime);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Events/IEventAggregator.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServiceBus.Events\n{\n    public interface IEventAggregator\n    {\n        // Sending messages\n        void SendMessage<T>(T message);\n        void SendMessage<T>() where T : new();\n\n        // Explicit registration\n        void AddListener(object listener);\n        void RemoveListener(object listener);\n\n        IEnumerable<object> Listeners { get; }\n\n        void PruneExpiredListeners(DateTime currentTime);\n    }\n\n\n    public static class EventAggregatorExtensions\n    {\n        public static void RouteMessage(this IEventAggregator events, object message)\n        {\n            typeof(Sender<>).CloseAndBuildAs<ISender>(events, message.GetType())\n                .Send(message);\n        }\n\n        internal interface ISender\n        {\n            void Send(object o);\n        }\n\n        internal class Sender<T> : ISender\n        {\n            private readonly IEventAggregator _events;\n\n            public Sender(IEventAggregator events)\n            {\n                _events = events;\n            }\n\n            public void Send(object o)\n            {\n                _events.SendMessage((T) o);\n            }\n        }\n    }\n\n    \n\n    \n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Events/IExpiringListener.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.ServiceBus.Events\n{\n    public interface IExpiringListener\n    {\n        bool IsExpired { get; }\n        DateTime? ExpiresAt { get; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Events/IListener.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Events\n{\n    public interface IListener<T>\n    {\n        void Handle(T message);\n    }\n\n    /// <summary>\n    /// Marker interface for types that will listen to the EventAggregator \n    /// at application start up time\n    /// </summary>\n    public interface IListener\n    {\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Events/SynchronousEventAggregator.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuCore.Logging;\n\nnamespace FubuMVC.Core.ServiceBus.Events\n{\n    public class SynchronousEventAggregator : EventAggregator\n    {\n        public SynchronousEventAggregator(Func<ILogger> logger, IEnumerable<IListener> listeners) : base(logger, listeners)\n        {\n        }\n\n        public override void SendMessage<T>(T message)\n        {\n            sendMessageToListeners(message);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/FubuTransportServiceRegistry.cs",
    "content": "﻿using FubuCore.Logging;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Events;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Cascading;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing FubuMVC.Core.ServiceBus.TestSupport;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.ServiceBus\n{\n    public class FubuTransportServiceRegistry : ServiceRegistry\n    {\n        public FubuTransportServiceRegistry(string mode)\n        {\n            var eventAggregatorDef =mode.InTesting()\n                ? new SmartInstance<SynchronousEventAggregator>()\n                : (Instance)new SmartInstance<EventAggregator>();\n\n            eventAggregatorDef.SetLifecycleTo<SingletonLifecycle>();\n            SetServiceIfNone(typeof(IEventAggregator), eventAggregatorDef);\n\n\n\n            var stateCacheDef = new SmartInstance<SagaStateCacheFactory>();\n            stateCacheDef.Singleton();\n            SetServiceIfNone(typeof(ISagaStateCacheFactory), stateCacheDef);\n\n            SetServiceIfNone<IChainInvoker, ChainInvoker>();\n            SetServiceIfNone<IEnvelopeSender, EnvelopeSender>();\n\n            ForSingletonOf<IMessageSerializer>().Use<XmlMessageSerializer>();\n            AddService<IMessageSerializer, JsonMessageSerializer>();\n\n            AddService<IActivator, ServiceBusActivator>();\n\n            SetServiceIfNone<IServiceBus, ServiceBus>();\n\n            SetServiceIfNone<IEnvelopeSerializer, EnvelopeSerializer>();\n            SetServiceIfNone<IHandlerPipeline, HandlerPipeline>();\n\n\n            AddService<ILogListener, EventAggregationListener>();\n\n            if (mode.InTesting())\n            {\n                var def = new SmartInstance<MessagingSession>();\n                def.Singleton();\n                SetServiceIfNone(typeof(IMessagingSession), def);\n                AddService<ILogListener, MessageRecordListener>();\n            }\n\n\n            if (mode.InTesting())\n            {\n                AddService<IActivator, TransportCleanupActivator>();\n            }\n\n            AddService<IEnvelopeHandler, DelayedEnvelopeHandler>();\n            AddService<IEnvelopeHandler, ResponseEnvelopeHandler>();\n            AddService<IEnvelopeHandler, ChainExecutionEnvelopeHandler>();\n            AddService<IEnvelopeHandler, NoSubscriberHandler>();\n\n            SetServiceIfNone<IMessageExecutor, MessageExecutor>();\n            SetServiceIfNone<IOutgoingSender, OutgoingSender>();\n\n\n\n            subscriptions();\n        }\n\n        private void subscriptions()\n        {\n            var subscriberDef = new SmartInstance<SubscriptionCache>();\n            subscriberDef.Singleton();\n            SetServiceIfNone(typeof (ISubscriptionCache), subscriberDef);\n\n            SetServiceIfNone<ISubscriptionRepository, SubscriptionRepository>();\n\n            SetServiceIfNone<ISubscriptionPersistence>(new InMemorySubscriptionPersistence());\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/IFubuTransportActivator.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus\n{\n    public interface IFubuTransportActivator\n    {\n        void Activate();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/IServiceBus.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServiceBus\n{\n    public class RequestOptions\n    {\n        public TimeSpan Timeout = 10.Minutes();\n        public Uri Destination = null;\n    }\n\n    public interface IServiceBus\n    {\n        /// <summary>\n        /// Loosely-coupled Request/Reply pattern\n        /// </summary>\n        /// <typeparam name=\"TResponse\"></typeparam>\n        /// <param name=\"request\"></param>\n        /// <param name=\"options\">Override the timeout and destination</param>\n        /// <returns></returns>\n        Task<TResponse> Request<TResponse>(object request, RequestOptions options = null);\n\n        void Send<T>(T message);\n\n        /// <summary>\n        /// Send to a specific destination rather than running the routing rules\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"destination\">The destination to send to</param>\n        /// <param name=\"message\"></param>\n        void Send<T>(Uri destination, T message);\n\n        /// <summary>\n        /// Invoke consumers for the relevant messages managed by the current\n        /// service bus instance. This happens immediately and on the current thread.\n        /// Error actions will not be executed and the message consumers will not be retried\n        /// if an error happens.\n        /// </summary>\n        void Consume<T>(T message);\n\n        void DelaySend<T>(T message, DateTime time);\n        void DelaySend<T>(T message, TimeSpan delay);\n\n        /// <summary>\n        /// Send a message and await an acknowledgement that the \n        /// message has been processed\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"message\"></param>\n        /// <returns></returns>\n        Task SendAndWait<T>(T message);\n\n        /// <summary>\n        /// Send a message to a specific destination and await an acknowledgment\n        /// that the message has been processed.\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"destination\">The destination to send to</param>\n        /// <param name=\"message\"></param>\n        /// <returns></returns>\n        Task SendAndWait<T>(Uri destination, T message);\n\n        /// <summary>\n        /// Unsubscribes from any messages this node was locally subscribed to.\n        /// </summary>\n        Task RemoveSubscriptionsForThisNodeAsync();\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/InMemory/ISagaStateCache.cs",
    "content": "﻿using System;\nusing FubuCore.Util;\n\nnamespace FubuMVC.Core.ServiceBus.InMemory\n{\n    public interface ISagaStateCacheFactory\n    {\n        ISagaStateCache<T> FindCache<T>() where T : class;\n    }\n\n    public class SagaStateCacheFactory : ISagaStateCacheFactory\n    {\n        private readonly ConcurrentCache<Type, object> _cache = new ConcurrentCache<Type, object>(type => {\n            var cacheType = typeof (SagaStateCache<>).MakeGenericType(type);\n            return Activator.CreateInstance(cacheType);\n        });\n\n        public ISagaStateCache<T> FindCache<T>() where T : class\n        {\n            return (ISagaStateCache<T>) _cache[typeof (T)];\n        }\n    }\n\n    public interface ISagaStateCache<T> where T : class\n    {\n        void Store(Guid correlationId, T state);\n        T Find(Guid correlationId);\n        void Delete(Guid correlationId);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/InMemory/InMemoryChannel.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\n\nnamespace FubuMVC.Core.ServiceBus.InMemory\n{\n    public class InMemoryChannel : IChannel\n    {\n        public static readonly string Protocol = \"memory\";\n        private readonly InMemoryQueue _queue;\n\n        public InMemoryChannel(Uri address)\n        {\n            Address = address;\n            _queue = InMemoryQueueManager.QueueFor(Address);\n        }\n\n        public void Dispose()\n        {\n            _queue.Dispose();\n        }\n\n        public Uri Address { get; private set; }\n        public ReceivingState Receive(IReceiver receiver)\n        {\n            _queue.Receive(receiver);\n            return ReceivingState.StopReceiving;\n        }\n\n        public void Send(byte[] data, IHeaders headers)\n        {\n            var envelope = new EnvelopeToken\n            {\n                Data = data,\n                Headers = headers\n            };\n\n            _queue.Enqueue(envelope);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/InMemory/InMemoryQueue.cs",
    "content": "﻿using System;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.Serialization.Formatters.Binary;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\n\nnamespace FubuMVC.Core.ServiceBus.InMemory\n{\n    public class InMemoryQueue : IDisposable\n    {\n        private readonly Uri _uri;\n        private BlockingCollection<byte[]> _queue = InitializeQueue();\n        private readonly BinaryFormatter _formatter;\n        private bool _disposed;\n\n        public InMemoryQueue(Uri uri)\n        {\n            _uri = uri;\n            _formatter = new BinaryFormatter();\n        }\n\n        public Uri Uri\n        {\n            get { return _uri; }\n        }\n\n        public void Enqueue(EnvelopeToken envelope)\n        {\n            using (var stream = new MemoryStream())\n            {\n                _formatter.Serialize(stream, envelope);\n\n                stream.Position = 0;\n                var bytes = stream.ReadAllBytes();\n\n                _queue.Add(bytes);\n            }\n        }\n\n        public IEnumerable<EnvelopeToken> Peek()\n        {\n            return _queue.ToArray().Select(x => _formatter.Deserialize(new MemoryStream(x)).As<EnvelopeToken>());\n        }\n\n        public void Clear()\n        {\n            var oldQueue = _queue;\n            _queue = InitializeQueue();\n            oldQueue.CompleteAdding();\n        }\n\n        public void Dispose()\n        {\n            _disposed = true;\n            _queue.CompleteAdding();\n        }\n\n        public void EnsureReady()\n        {\n            // InMemoryQueues are shared across multiple channels, so they might need to be reset.\n            _disposed = false;\n            if (_queue.IsAddingCompleted)\n            {\n                _queue = InitializeQueue();\n            }\n        }\n\n        public void Receive(IReceiver receiver)\n        {\n            while (!_disposed)\n            {\n                foreach (var data in _queue.GetConsumingEnumerable())\n                {\n                    using (var stream = new MemoryStream(data))\n                    {\n                        var token = _formatter.Deserialize(stream).As<EnvelopeToken>();\n\n                        var callback = new InMemoryCallback(this, token);\n\n                        receiver.Receive(token.Data, token.Headers, callback);\n                    }\n                }\n            }\n        }\n\n        private static BlockingCollection<byte[]> InitializeQueue()\n        {\n            return new BlockingCollection<byte[]>(new ConcurrentBag<byte[]>());\n        }\n    }\n\n    public class InMemoryCallback : IMessageCallback\n    {\n        private readonly InMemoryQueue _parent;\n        private readonly EnvelopeToken _token;\n\n        public InMemoryCallback(InMemoryQueue parent, EnvelopeToken token)\n        {\n            _parent = parent;\n            _token = token;\n        }\n\n        public void MarkSuccessful()\n        {\n            // nothing\n        }\n\n        public void MarkFailed(Exception ex)\n        {\n            Debug.WriteLine(\"Message was marked as failed!\");\n        }\n\n        public void MoveToDelayedUntil(DateTime time)\n        {\n            //TODO leverage delayed message cache?\n            _token.ExecutionTime = time;\n            InMemoryQueueManager.AddToDelayedQueue(_token);\n        }\n\n        // TODO -- make it fancier later and copy envelope headers\n        public void MoveToErrors(ErrorReport report)\n        {\n            var uri = (_parent.Uri.ToString() + \"errors\").ToUri();\n            InMemoryQueueManager.QueueFor(uri).Enqueue(new EnvelopeToken\n            {\n                Message = report\n            });\n        }\n\n        public void Requeue()\n        {\n            _parent.Enqueue(_token);\n        }\n\n        public void Send(Envelope envelope)\n        {\n            // nothing\n        }\n\n        public bool SupportsSend { get; } = false;\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/InMemory/InMemoryQueueManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.ServiceBus.InMemory\n{\n\n    public static class InMemoryQueueManager\n    {\n        public static readonly Uri DelayedUri = \"memory://localhost/delayed\".ToUri();\n\n        private static readonly Cache<Uri, InMemoryQueue> _queues = new Cache<Uri,InMemoryQueue>(x => new InMemoryQueue(x));\n        private static readonly IList<EnvelopeToken> _delayed = new List<EnvelopeToken>(); \n        private static readonly ReaderWriterLockSlim _delayedLock = new ReaderWriterLockSlim();\n    \n        public static void ClearAll()\n        {\n            _delayedLock.Write(() => {\n                _delayed.Clear();\n            });\n\n            \n            _queues.Each(x => x.Clear());\n        }\n\n        public static void Remove(InMemoryQueue queue)\n        {\n            _queues.Remove(queue.Uri);\n        }\n\n        public static void AddToDelayedQueue(EnvelopeToken envelope)\n        {\n            _delayedLock.Write(() => {\n                _delayed.Add(envelope);\n            });\n        }\n\n        public static IEnumerable<EnvelopeToken> DequeueDelayedEnvelopes(DateTime currentTime)\n        {\n            var delayed = _delayedLock.Read(() => {\n                return _delayed.Where(x => new Envelope(x.Headers).ExecutionTime.Value <= currentTime).ToArray();\n            });\n\n            var list = new List<EnvelopeToken>();\n\n            foreach (EnvelopeToken token in delayed)\n            {\n                _delayedLock.Write(() => {\n                    try\n                    {\n                        _delayed.Remove(token);\n\n                        var envelope = new Envelope(token.Headers);\n                        _queues[envelope.ReceivedAt].Enqueue(token);\n\n                        list.Add(token);\n                    }\n                    catch (Exception ex)\n                    {\n                        Debug.WriteLine(ex);\n                    }\n                });\n\n            }\n\n            return list;\n        } \n\n        public static InMemoryQueue QueueFor(Uri uri)\n        {\n            var queue = _queues[uri];\n            queue.EnsureReady();\n            return queue;\n        }\n\n        public static IEnumerable<EnvelopeToken> DelayedEnvelopes()\n        {\n            return _delayedLock.Read(() => {\n                return _delayed.ToArray();\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/InMemory/InMemorySagaRepository.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Sagas;\n\nnamespace FubuMVC.Core.ServiceBus.InMemory\n{\n    public class InMemorySagaRepository<TState, TMessage> : ISagaRepository<TState, TMessage> where TState : class\n    {\n        private readonly Func<TMessage, Guid> _messageGetter;\n        private readonly Func<TState, Guid> _stateGetter;\n        private readonly ISagaStateCacheFactory _cacheFactory;\n\n        public static InMemorySagaRepository<TState, TMessage> Create()\n        {\n            var types = new SagaTypes\n            {\n                StateType = typeof (TState),\n                MessageType = typeof (TMessage)\n            };\n\n            return new InMemorySagaRepository<TState, TMessage>((Func<TMessage, Guid>) types.ToCorrelationIdFunc(), (Func<TState, Guid>) types.ToSagaIdFunc(), new SagaStateCacheFactory());\n        } \n\n        public InMemorySagaRepository(Func<TMessage, Guid> messageGetter, Func<TState, Guid> stateGetter, ISagaStateCacheFactory cacheFactory)\n        {\n            _messageGetter = messageGetter;\n            _stateGetter = stateGetter;\n            _cacheFactory = cacheFactory;\n        }\n\n        private ISagaStateCache<TState> cache\n        {\n            get { return _cacheFactory.FindCache<TState>(); }\n        } \n\n        public void Save(TState state, TMessage message)\n        {\n            cache.Store(_stateGetter(state), state);\n        }\n\n        public TState Find(TMessage message)\n        {\n            var correlationId = _messageGetter(message);\n            return cache.Find(correlationId);\n        }\n\n        public void Delete(TState state, TMessage message)\n        {\n            var id = _stateGetter(state);\n            cache.Delete(id);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/InMemory/InMemorySagaStorage.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Sagas;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.ServiceBus.InMemory\n{\n    public class InMemorySagaStorage : ISagaStorage\n    {\n        public Instance RepositoryFor(SagaTypes sagaTypes)\n        {\n            if (sagaTypes.StateType.GetProperty(SagaTypes.Id) == null)\n            {\n                return null;\n            }\n\n            var instance = new ConfiguredInstance(typeof (InMemorySagaRepository<,>), sagaTypes.StateType, sagaTypes.MessageType);\n            instance.Dependencies.Add(typeof(Func<,>).MakeGenericType(sagaTypes.StateType, typeof(Guid)), sagaTypes.ToSagaIdFunc());\n            instance.Dependencies.Add(typeof(Func<,>).MakeGenericType(sagaTypes.MessageType, typeof(Guid)), sagaTypes.ToCorrelationIdFunc());\n\n\n            return instance;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/InMemory/InMemoryTransport.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Scheduling;\n\nnamespace FubuMVC.Core.ServiceBus.InMemory\n{\n    [Description(\"A simple in memory transport suitable for automated testing or development\")]\n    [Title(\"In Memory Transport\")]\n    public class InMemoryTransport : TransportBase, ITransport\n    {\n        internal static Type DefaultSettings { get; set; }\n        internal static ChannelGraph DefaultChannelGraph { get; set; }\n\n        private readonly TransportSettings _settings;\n\n        public InMemoryTransport(TransportSettings settings)\n        {\n            _settings = settings;\n        }\n\n        public InMemoryTransport() : this(new TransportSettings())\n        {\n        }\n\n        public void Dispose()\n        {\n            // nothing\n        }\n\n        public override string Protocol\n        {\n            get { return InMemoryChannel.Protocol; }\n        }\n\n        public IChannel BuildDestinationChannel(Uri destination)\n        {\n            return new InMemoryChannel(destination);\n        }\n\n        public IEnumerable<EnvelopeToken> ReplayDelayed(DateTime currentTime)\n        {\n            return InMemoryQueueManager.DequeueDelayedEnvelopes(currentTime);\n        }\n\n        public void ClearAll()\n        {\n            InMemoryQueueManager.ClearAll();\n        }\n\n        protected override IChannel buildChannel(ChannelNode channelNode)\n        {\n            return new InMemoryChannel(channelNode.Uri);\n        }\n\n        protected override void seedQueues(IEnumerable<ChannelNode> channels)\n        {\n\n        }\n\n        protected override Uri getReplyUri(ChannelGraph graph)\n        {\n            var uri = _settings.InMemoryReplyUri ?? ReplyUriForGraph(graph);\n            var replyNode = new ChannelNode\n            {\n                Uri = uri,\n                Incoming = true,\n                Scheduler = new ThreadScheduler(3)\n            };\n\n            replyNode.Key = replyNode.Key ?? \"{0}:{1}\".ToFormat(Protocol, \"replies\");\n            replyNode.Channel = buildChannel(replyNode);\n\n            graph.Add(replyNode);\n\n            return uri;\n        }\n\n        public static Uri ReplyUriForGraph(ChannelGraph graph)\n        {\n            return \"{0}://localhost/{1}/replies\".ToFormat(InMemoryChannel.Protocol, graph.Name ?? \"node\").ToUri();\n        }\n\n        public static T ToInMemory<T>() where T : new()\n        {\n            var type = typeof (T);\n            var settings = ToInMemory(type);\n\n            return (T) settings;\n        }\n\n        public static object ToInMemory(Type type)\n        {\n            var settings = Activator.CreateInstance(type);\n\n            AllChannelsAreInMemory(type, settings);\n\n            return settings;\n        }\n\n        public static void AllChannelsAreInMemory(Type type, object settings)\n        {\n            type.GetProperties().Where(x => x.CanWrite && x.PropertyType == typeof (Uri)).Each(prop =>\n            {\n                var accessor = new SingleProperty(prop);\n                var uri = GetUriForProperty(accessor);\n\n                accessor.SetValue(settings, uri);\n            });\n        }\n\n        private static Uri GetUriForProperty(SingleProperty accessor)\n        {\n            var channelGraph = DefaultChannelGraph;\n            if (channelGraph != null && accessor.DeclaringType != DefaultSettings)\n            {\n                // A default graph has been set via SetupForInMemoryTesting, so\n                // sync the URIs for the channels that match.\n                var channel = Enumerable.FirstOrDefault<ChannelNode>(channelGraph, x =>\n                {\n                    string channelName = x.Key.Split(':')[1];\n                    return channelName == accessor.Name;\n                });\n\n                if (channel != null)\n                    return channel.Uri;\n            }\n\n            string uri = \"{0}://{1}/{2}\".ToFormat(InMemoryChannel.Protocol, accessor.OwnerType.Name.Replace(\"Settings\", \"\"),\n                accessor.Name).ToLower();\n            return new Uri(uri);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/InMemory/SagaStateCache.cs",
    "content": "﻿using System;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\n\nnamespace FubuMVC.Core.ServiceBus.InMemory\n{\n    public class SagaStateCache<T> : ISagaStateCache<T> where T : class\n    {\n        private readonly IDictionary<Guid, T> _cache = new ConcurrentDictionary<Guid, T>();\n\n        public void Store(Guid correlationId, T state)\n        {\n            _cache[correlationId] = state;\n        }\n\n        public T Find(Guid correlationId)\n        {\n            T state;\n            return _cache.TryGetValue(correlationId, out state) ? state : null;\n        }\n\n        public void Delete(Guid correlationId)\n        {\n            _cache.Remove(correlationId);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Logging/ChainExecutionFinished.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.TestSupport;\nusing FubuMVC.Core.Services.Messaging.Tracking;\n\nnamespace FubuMVC.Core.ServiceBus.Logging\n{\n    public class ChainExecutionFinished : MessageLogRecord\n    {\n        // TODO -- add a decent ToString()\n\n        public Guid ChainId { get; set; }\n        public EnvelopeToken Envelope { get; set; }\n        public long ElapsedMilliseconds { get; set; }\n\n        public override string ToString()\n        {\n            return \"Chain finished for {0} at {1}\".ToFormat(Envelope.Message, Envelope.ReceivedAt);\n        }\n\n        public override MessageRecord ToRecord()\n        {\n            return new MessageRecord(Envelope)\n            {\n                Message = \"Finished Chain Execution\"\n            };\n        }\n\n        public override MessageTrack ToMessageTrack()\n        {\n            var track = MessageTrack.ForReceived(this, Envelope.CorrelationId);\n            track.Type = track.FullName = MessageTrackType;\n\n            return track;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Logging/ChainExecutionStarted.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.TestSupport;\nusing FubuMVC.Core.Services.Messaging.Tracking;\n\nnamespace FubuMVC.Core.ServiceBus.Logging\n{\n    public class ChainExecutionStarted : MessageLogRecord\n    {\n        public Guid ChainId { get; set; }\n        public EnvelopeToken Envelope { get; set; }\n\n        public override string ToString()\n        {\n            return \"Chain execution started for chain {0} / envelope {1}\".ToFormat(ChainId, Envelope);\n        }\n\n        public override MessageRecord ToRecord()\n        {\n            return new MessageRecord(Envelope)\n            {\n                Message = \"Chain execution started\"\n            };\n        }\n\n        public override MessageTrack ToMessageTrack()\n        {\n            MessageTrack track = MessageTrack.ForSent(this, Envelope.CorrelationId);\n            track.Type = track.FullName = MessageTrackType;\n\n            return track;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Logging/EnvelopeContinuationChosen.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.Services.Messaging.Tracking;\n\nnamespace FubuMVC.Core.ServiceBus.Logging\n{\n    public class EnvelopeContinuationChosen : MessageLogRecord\n    {\n        public EnvelopeToken Envelope;\n        public Type HandlerType;\n        public Type ContinuationType;\n\n        public override MessageRecord ToRecord()\n        {\n            return new MessageRecord(Envelope)\n            {\n                Message = \"Chose continuation {0} from handler {1}\".ToFormat(ContinuationType.Name, HandlerType.Name)\n            };\n        }\n\n        public override MessageTrack ToMessageTrack()\n        {\n            return null;\n        }\n\n        protected bool Equals(EnvelopeContinuationChosen other)\n        {\n            return Equals(Envelope, other.Envelope) && Equals(HandlerType, other.HandlerType) && Equals(ContinuationType, other.ContinuationType);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((EnvelopeContinuationChosen) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                var hashCode = (Envelope != null ? Envelope.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (HandlerType != null ? HandlerType.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (ContinuationType != null ? ContinuationType.GetHashCode() : 0);\n                return hashCode;\n            }\n        }\n\n\n\n        public override string ToString()\n        {\n            return \"Chose continuation {0} for envelope {1}\".ToFormat(ContinuationType, Envelope);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Logging/EnvelopeReceived.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.Services.Messaging.Tracking;\n\nnamespace FubuMVC.Core.ServiceBus.Logging\n{\n    public class EnvelopeReceived : MessageLogRecord\n    {\n        public EnvelopeToken Envelope { get; set; }\n\n        protected bool Equals(EnvelopeReceived other)\n        {\n            return Equals(Envelope, other.Envelope);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((EnvelopeReceived) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Envelope != null ? Envelope.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Envelope received for {0} from {1} at {2}\", Envelope.Message, Envelope.ReplyUri, Envelope.ReceivedAt);\n        }\n\n        public override MessageRecord ToRecord()\n        {\n            return new MessageRecord(Envelope)\n            {\n                Message = \"Envelope Received\"\n            };\n        }\n\n        public override MessageTrack ToMessageTrack()\n        {\n            return null;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Logging/EnvelopeSent.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.Services.Messaging.Tracking;\n\nnamespace FubuMVC.Core.ServiceBus.Logging\n{\n    public class EnvelopeSent : MessageLogRecord\n    {\n        public EnvelopeSent()\n        {\n        }\n\n        public EnvelopeSent(EnvelopeToken envelope, ChannelNode node)\n        {\n            Envelope = envelope;\n\n            Uri = node.Uri;\n            Key = node.Key;\n        }\n\n        public EnvelopeToken Envelope { get; set; }\n        public Uri Uri { get; set; }\n        public string Key { get; set; }\n\n        protected bool Equals(EnvelopeSent other)\n        {\n            return Equals(Envelope, other.Envelope) && Equals(Uri, other.Uri) && string.Equals(Key, other.Key);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((EnvelopeSent) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                var hashCode = (Envelope != null ? Envelope.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (Uri != null ? Uri.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (Key != null ? Key.GetHashCode() : 0);\n                return hashCode;\n            }\n        }\n\n        public override MessageRecord ToRecord()\n        {\n            return new MessageRecord(Envelope)\n            {\n                Message = \"Envelope Sent\"\n            };\n        }\n\n        public override MessageTrack ToMessageTrack()\n        {\n            return  new MessageTrack\n            {\n                Type = \"OutstandingEnvelope\",\n                Id = Envelope.CorrelationId,\n                FullName = \"{0}@{1}\".ToFormat(Envelope.CorrelationId, Uri),\n                Status = MessageTrack.Sent\n            };\n        }\n\n        public override string ToString()\n        {\n            return $\"Sent {Envelope} to {Uri} ({Key})\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Logging/EventAggregationListener.cs",
    "content": "﻿using System;\nusing System.Reflection;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Events;\n\nnamespace FubuMVC.Core.ServiceBus.Logging\n{\n    public class EventAggregationListener : ILogListener\n    {\n        private readonly IEventAggregator _events;\n        private readonly TransportSettings _settings;\n\n        public EventAggregationListener(IEventAggregator events, TransportSettings settings)\n        {\n            _events = events;\n            _settings = settings;\n        }\n\n        public bool ListensFor(Type type)\n        {\n            return type.Assembly.GetName().Name == Assembly.GetExecutingAssembly().GetName().Name;\n        }\n\n        public void DebugMessage(object message)\n        {\n            _events.RouteMessage(message);\n        }\n\n        public void InfoMessage(object message)\n        {\n            _events.RouteMessage(message);\n        }\n\n        public void Debug(string message)\n        {\n            // no-op\n        }\n\n        public void Info(string message)\n        {\n            // no-op\n        }\n\n        public void Error(string message, Exception ex)\n        {\n\n        }\n\n        public void Error(object correlationId, string message, Exception ex)\n        {\n\n        }\n\n        public bool IsDebugEnabled { get { return _settings.DebugEnabled; } }\n        public bool IsInfoEnabled { get { return true; } }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Logging/MessageFailed.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.Services.Messaging.Tracking;\n\nnamespace FubuMVC.Core.ServiceBus.Logging\n{\n    public class MessageFailed : MessageLogRecord\n    {\n        public EnvelopeToken Envelope { get; set; }\n        public Exception Exception { get; set; }\n\n        protected bool Equals(MessageFailed other)\n        {\n            return Equals(Envelope, other.Envelope) && Equals(Exception, other.Exception);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((MessageFailed) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((Envelope != null ? Envelope.GetHashCode() : 0)*397) ^ (Exception != null ? Exception.GetHashCode() : 0);\n            }\n        }\n\n        public override MessageRecord ToRecord()\n        {\n            return new MessageRecord(Envelope)\n            {\n                Message = \"Message failed!\",\n                ExceptionText = Exception.ToString()\n            };\n        }\n\n        public override MessageTrack ToMessageTrack()\n        {\n            return new MessageTrack\n            {\n                Type = \"OutstandingEnvelope\",\n                Id = Envelope.CorrelationId,\n                FullName = \"{0}@{1}\".ToFormat(Envelope.CorrelationId, Envelope.Destination),\n                Status = MessageTrack.Received\n            };\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Message failed: {0}\", Envelope);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Logging/MessageLogRecord.cs",
    "content": "﻿using FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.Services.Messaging.Tracking;\n\nnamespace FubuMVC.Core.ServiceBus.Logging\n{\n    public abstract class MessageLogRecord : LogRecord\n    {\n        public static readonly string MessageTrackType = \"Handler Chain Execution\";\n\n        public abstract MessageRecord ToRecord();\n\n        public abstract MessageTrack ToMessageTrack();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Logging/MessageSuccessful.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.Services.Messaging.Tracking;\n\nnamespace FubuMVC.Core.ServiceBus.Logging\n{\n    public class MessageSuccessful : MessageLogRecord\n    {\n        public EnvelopeToken Envelope { get; set; }\n\n        protected bool Equals(MessageSuccessful other)\n        {\n            return Equals(Envelope, other.Envelope);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((MessageSuccessful) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Envelope != null ? Envelope.GetHashCode() : 0);\n        }\n\n        public override MessageRecord ToRecord()\n        {\n            return new MessageRecord(Envelope)\n            {\n                Message = \"Message succeeded\"\n            };\n        }\n\n        public override MessageTrack ToMessageTrack()\n        {\n            return new MessageTrack\n            {\n                Type = \"OutstandingEnvelope\",\n                Id = Envelope.CorrelationId,\n                FullName = \"{0}@{1}\".ToFormat(Envelope.CorrelationId, Envelope.Destination),\n                Status = MessageTrack.Received\n            };\n        }\n\n        public override string ToString()\n        {\n            return $\"Message {Envelope} succeeded at {Envelope.ReceivedAt}\";\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Logging/NoHandlerForMessage.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.Services.Messaging.Tracking;\n\nnamespace FubuMVC.Core.ServiceBus.Logging\n{\n    public class NoHandlerForMessage : MessageLogRecord\n    {\n        public EnvelopeToken Envelope { get; set; }\n\n        protected bool Equals(NoHandlerForMessage other)\n        {\n            return Equals(Envelope, other.Envelope);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((NoHandlerForMessage) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Envelope != null ? Envelope.GetHashCode() : 0);\n        }\n\n        public override MessageRecord ToRecord()\n        {\n            return new MessageRecord(Envelope)\n            {\n                Message = \"No Handler for Message\"\n            };\n        }\n\n        public override MessageTrack ToMessageTrack()\n        {\n            return null;\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"No handler for message: {0}\", Envelope);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Logging/ReceiveFailed.cs",
    "content": "﻿using System;\nusing FubuCore.Descriptions;\nusing FubuCore.Logging;\n\nnamespace FubuMVC.Core.ServiceBus.Logging\n{\n    public class ReceiveFailed : LogRecord, DescribesItself\n    {\n        /// <summary>\n        ///     The Key of the ChannelNode that had the receive failure.\n        /// </summary>\n        public string ChannelKey { get; set; }\n\n        public Exception Exception { get; set; }\n\n\n        protected bool Equals(ReceiveFailed other)\n        {\n            return string.Equals(ChannelKey, other.ChannelKey) && Equals(Exception, other.Exception);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != GetType()) return false;\n            return Equals((ReceiveFailed)obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((ChannelKey != null ? ChannelKey.GetHashCode() : 0) * 397)\n                       ^ (Exception != null ? Exception.GetHashCode() : 0);\n            }\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = ToString();\n            description.ShortDescription = Exception.Message;\n            description.LongDescription = Exception.ToString();\n        }\n\n        public override string ToString()\n        {\n            return \"Receive failed on Channel: \" + ChannelKey;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/HealthMonitorPollingJob.cs",
    "content": "﻿using System.Threading;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Polling;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class HealthMonitorPollingJob : IJob\n    {\n        private readonly IPersistentTaskController _controller;\n\n        public HealthMonitorPollingJob(IPersistentTaskController controller)\n        {\n            _controller = controller;\n        }\n\n        public void Execute(CancellationToken cancellation)\n        {\n            _controller.EnsureTasksHaveOwnership().Wait(2.Minutes());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/HealthMonitoringSettings.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuCore.Descriptions;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class HealthMonitoringSettings : DescribesItself\n    {\n        private bool _initial = true;\n\n        public void Describe(Description description)\n        {\n            description.Properties[nameof(MinSeconds)] = MinSeconds.ToString();\n            description.Properties[nameof(MaxSeconds)] = MaxSeconds.ToString();\n            description.Properties[nameof(TakeOwnershipMessageTimeout)] = TakeOwnershipMessageTimeout.ToString();\n            description.Properties[nameof(HealthCheckMessageTimeout)] = HealthCheckMessageTimeout.ToString();\n            description.Properties[nameof(DeactivationMessageTimeout)] = DeactivationMessageTimeout.ToString();\n            description.Properties[nameof(TaskAvailabilityCheckTimeout)] = TaskAvailabilityCheckTimeout.ToString();\n            description.Properties[nameof(TaskActivationTimeout)] = TaskActivationTimeout.ToString();\n        }\n\n        public int Seed\n        {\n            set { Random = new Random(value * 1000); }\n        }\n\n        public Random Random = new Random(60000);\n\n        public int MinSeconds = 30;\n        public int MaxSeconds = 60;\n\n        public TimeSpan TakeOwnershipMessageTimeout = 30.Seconds();\n        public TimeSpan HealthCheckMessageTimeout = 30.Seconds();\n        public TimeSpan DeactivationMessageTimeout = 30.Seconds();\n        public TimeSpan TaskAvailabilityCheckTimeout = 10.Seconds();\n        public TimeSpan TaskActivationTimeout = 30.Seconds();\n\n        public double Interval\n        {\n            get\n            {\n                if (_initial)\n                {\n                    _initial = false;\n                    return 100;\n                }\n                \n                return Random.Next(MinSeconds, MaxSeconds) * 1000;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/HealthStatus.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public enum HealthStatus\n    {\n        Active,\n        Unknown,\n        Error,\n        Inactive,\n        Timedout\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/IPersistentTask.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public interface IPersistentTask\n    {\n        Uri Subject { get; }\n        void AssertAvailable();\n        void Activate();\n        void Deactivate();\n        bool IsActive { get; }\n\n        Task<ITransportPeer> SelectOwner(IEnumerable<ITransportPeer> peers);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/IPersistentTaskController.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public interface IPersistentTaskController\n    {\n        Task<HealthStatus> CheckStatus(Uri subject);\n        Task<bool> Deactivate(Uri subject);\n        Task EnsureTasksHaveOwnership();\n        Task<OwnershipStatus> TakeOwnership(Uri subject);\n        Task<TaskHealthResponse> CheckStatusOfOwnedTasks();\n        IEnumerable<Uri> ActiveTasks();\n        IEnumerable<Uri> PermanentTasks();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/IPersistentTaskSource.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public interface IPersistentTaskSource\n    {\n        string Protocol { get; }\n        IEnumerable<Uri> PermanentTasks();\n\n        IPersistentTask CreateTask(Uri uri);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/IPersistentTasks.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public interface IPersistentTasks\n    {\n        IPersistentTask FindTask(Uri subject);\n        IPersistentTaskAgent FindAgent(Uri subject);\n        string NodeId { get; }\n\n        Task Reassign(Uri subject, IList<ITransportPeer> availablePeers, IList<ITransportPeer> deactivations);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/ITaskMonitoringSource.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public interface ITaskMonitoringSource\n    {\n        IEnumerable<ITransportPeer> BuildPeers();\n\n        IEnumerable<Uri> LocallyOwnedTasksAccordingToPersistence();\n\n        IPersistentTaskAgent BuildAgentFor(IPersistentTask task);\n\n        void RemoveOwnershipFromThisNode(IEnumerable<Uri> subjects);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/ITaskRouter.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public interface ITaskRouter\n    {\n        Task<ITransportPeer> SelectOwner(Uri subject, IEnumerable<ITransportPeer> peers);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/ITransportPeer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public interface ITransportPeer\n    {\n        Task<OwnershipStatus> TakeOwnership(Uri subject);\n\n        Task<TaskHealthResponse> CheckStatusOfOwnedTasks();\n\n        void RemoveOwnershipFromNode(IEnumerable<Uri> subjects);\n\n        IEnumerable<Uri> CurrentlyOwnedSubjects();\n\n        string NodeId { get; }\n        string MachineName { get; }\n        Uri ControlChannel { get; }\n        Task<bool> Deactivate(Uri subject);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/LogMessages.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Logging;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    [Serializable]\n    public abstract class PersistentTaskMessage : LogRecord\n    {\n        public PersistentTaskMessage(Uri subject)\n        {\n            Subject = subject;\n        }\n\n        public PersistentTaskMessage()\n        {\n        }\n\n        public Uri Subject { get; set; }\n        public string NodeId { get; set; }\n        public string Machine { get; set; }\n\n        protected bool Equals(PersistentTaskMessage other)\n        {\n            return Equals(Subject, other.Subject);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((PersistentTaskMessage) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Subject != null ? Subject.GetHashCode() : 0);\n        }\n    }\n\n    public class TaskActivationFailure : PersistentTaskMessage\n    {\n        public TaskActivationFailure(Uri subject) : base(subject)\n        {\n        }\n\n        public TaskActivationFailure()\n        {\n        }\n    }\n\n    public class TaskActivationTimeoutFailure : PersistentTaskMessage\n    {\n        public TaskActivationTimeoutFailure(Uri subject) : base(subject)\n        {\n        }\n\n        public TaskActivationTimeoutFailure()\n        {\n        }\n\n        public override string ToString()\n        {\n            return \"Task Activation for {0} timed out on node {1}\".ToFormat(Subject, NodeId);\n        }\n    }\n\n    public class TryingToAssignOwnership : PersistentTaskMessage\n    {\n        public TryingToAssignOwnership(Uri subject, string toNode) : base(subject)\n        {\n            ToNode = toNode;\n        }\n\n        public TryingToAssignOwnership()\n        {\n        }\n\n        public string ToNode { get; set; }\n\n        public override string ToString()\n        {\n            return \"Trying to assign ownership of task {0} to node {1} from node {2}\"\n                .ToFormat(Subject, ToNode, NodeId);\n        }\n    }\n\n    public class TakeOwnershipRequestReceived : PersistentTaskMessage\n    {\n        public TakeOwnershipRequestReceived(Uri subject, Uri @from) : base(subject)\n        {\n            From = @from;\n        }\n\n        public TakeOwnershipRequestReceived()\n        {\n        }\n\n        public Uri From { get; set; }\n        public OwnershipStatus Status { get; set; }\n\n\n        public override string ToString()\n        {\n            return \"Received a request to take ownership of {0} from {1} on node {2} finished with a response of {3}\"\n                .ToFormat(Subject, From, NodeId, Status);\n        }\n    }\n\n    public class TookOwnershipOfPersistentTask : PersistentTaskMessage\n    {\n        public TookOwnershipOfPersistentTask()\n        {\n        }\n\n        public TookOwnershipOfPersistentTask(Uri subject) : base(subject)\n        {\n        }\n\n        public override string ToString()\n        {\n            return \"Took ownership of task {0} on node {1}\".ToFormat(Subject, NodeId);\n        }\n    }\n\n    public class FailedToActivatePersistentTask : PersistentTaskMessage\n    {\n        public FailedToActivatePersistentTask(Uri subject) : base(subject)\n        {\n        }\n\n        public FailedToActivatePersistentTask()\n        {\n        }\n\n        public override string ToString()\n        {\n            return \"Failed to activate task {0} on node {1}\".ToFormat(Subject, NodeId);\n        }\n    }\n\n    public class StoppedTask : PersistentTaskMessage\n    {\n        public StoppedTask(Uri subject) : base(subject)\n        {\n        }\n\n        public StoppedTask()\n        {\n        }\n\n        public override string ToString()\n        {\n            return \"Stopping task {0} on node {1}\".ToFormat(Subject, NodeId);\n        }\n    }\n\n    public class FailedToStopTask : PersistentTaskMessage\n    {\n        public FailedToStopTask(Uri subject) : base(subject)\n        {\n        }\n\n        public FailedToStopTask()\n        {\n        }\n    }\n\n    public class TaskAvailabilityFailed : PersistentTaskMessage\n    {\n        public TaskAvailabilityFailed(Uri subject) : base(subject)\n        {\n        }\n\n        public string ExceptionText { get; set; }\n\n        public string ExceptionType { get; set; }\n\n        public TaskAvailabilityFailed()\n        {\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Task availability failed for {0} on node {1} with exception type {2}\", Subject, NodeId,\n                ExceptionType);\n        }\n    }\n\n    public class ReassigningTask : PersistentTaskMessage\n    {\n        public ReassigningTask(Uri subject, IEnumerable<ITransportPeer> deactivations) : base(subject)\n        {\n            CurrentNodes = deactivations.Select(x => x.NodeId).ToArray();\n        }\n\n        public string[] CurrentNodes { get; set; }\n\n        public ReassigningTask()\n        {\n        }\n\n        public override string ToString()\n        {\n            if (CurrentNodes.Any())\n            {\n                return \"Re-assigning task {0} from node {1}, was on node(s) {2}\"\n                    .ToFormat(Subject, NodeId, CurrentNodes.Join(\", \"));\n            }\n\n            return \"Assigning task {0} from node {1}\".ToFormat(Subject, NodeId);\n        }\n    }\n\n\n    public class UnknownTask : PersistentTaskMessage\n    {\n        public UnknownTask(Uri subject, string context) : base(subject)\n        {\n            Context = context;\n        }\n\n        public string Context { get; set; }\n\n        public UnknownTask()\n        {\n        }\n    }\n\n    public class TaskAssignment : PersistentTaskMessage\n    {\n        public string AssignedTo { get; set; }\n\n        public TaskAssignment(Uri subject, string assignedTo) : base(subject)\n        {\n            AssignedTo = assignedTo;\n        }\n\n        public TaskAssignment()\n        {\n        }\n    }\n\n    public class UnableToAssignOwnership : PersistentTaskMessage\n    {\n        public UnableToAssignOwnership(Uri subject) : base(subject)\n        {\n        }\n\n        public UnableToAssignOwnership()\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/MonitoringControlHandler.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Threading.Tasks;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    // Mostly tested through PersistentTaskController and/or integration tests\n    public class MonitoringControlHandler\n    {\n        private readonly ILogger _logger;\n        private readonly Envelope _envelope;\n        private readonly ChannelGraph _graph;\n        private readonly IPersistentTaskController _controller;\n\n        public MonitoringControlHandler(ILogger logger, Envelope envelope, ChannelGraph graph, IPersistentTaskController controller)\n        {\n            _logger = logger;\n            _envelope = envelope;\n            _graph = graph;\n            _controller = controller;\n        }\n\n        public async Task<TaskHealthResponse> Handle(TaskHealthRequest request)\n        {\n            Debug.WriteLine($\"Received message {request} from {_envelope.ReplyUri}\");\n\n            try\n            {\n                var response = await _controller.CheckStatusOfOwnedTasks().ConfigureAwait(false);\n\n                response.AddMissingSubjects(request.Subjects);\n\n                Debug.WriteLine($\"Responding from node {_graph.NodeId} with {response} from health request from {_envelope.ReplyUri}\");\n\n                return response;\n            }\n            catch (Exception)\n            {\n                return TaskHealthResponse.ErrorFor(request.Subjects);\n            }\n        }\n\n        public async Task<TaskDeactivationResponse> Handle(TaskDeactivation deactivation)\n        {\n            var status = await _controller.Deactivate(deactivation.Subject).ConfigureAwait(false);\n\n            return new TaskDeactivationResponse {Subject = deactivation.Subject, Success = status};\n        }\n\n        public async Task<TakeOwnershipResponse> Handle(TakeOwnershipRequest request)\n        {\n            var status = await _controller.TakeOwnership(request.Subject).ConfigureAwait(false);\n\n            var response = new TakeOwnershipResponse\n            {\n                NodeId = _graph.NodeId,\n                Status = status,\n                Subject = request.Subject\n            };\n\n            _logger.InfoMessage(() => new TakeOwnershipRequestReceived(request.Subject, _envelope.ReplyUri)\n            {\n                Status = response.Status\n            });\n\n            return response;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/MonitoringServiceRegistry.cs",
    "content": "﻿using FubuCore.Logging;\nusing FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class MonitoringServiceRegistry : ServiceRegistry\n    {\n        public MonitoringServiceRegistry()\n        {\n            AddService<ILogModifier, PersistentTaskMessageModifier>();\n            SetServiceIfNone<IPersistentTaskController, PersistentTaskController>().Singleton();\n            SetServiceIfNone<ITaskMonitoringSource, TaskMonitoringSource>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/OrderedAssignment.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class OrderedAssignment\n    {\n        private readonly Uri _subject;\n        private readonly ITransportPeer[] _peers;\n        private int _index;\n\n        public OrderedAssignment(Uri subject, IEnumerable<ITransportPeer> peers)\n        {\n            _subject = subject;\n            _peers = peers.ToArray();\n            _index = 0;\n        }\n\n        public async Task<ITransportPeer> SelectOwner()\n        {\n            Debug.WriteLine($\"Trying to assign a new task owner for {_subject} with available peers {_peers.Select(x => x.NodeId).Join(\", \")}\");\n\n            return await tryToSelect().ConfigureAwait(false);\n        }\n\n        private async Task<ITransportPeer> tryToSelect()\n        {\n            var transportPeer = _peers[_index++];\n\n            try\n            {\n                var status = await transportPeer.TakeOwnership(_subject).ConfigureAwait(false);\n\n                if (status == OwnershipStatus.AlreadyOwned || status == OwnershipStatus.OwnershipActivated)\n                {\n                    return transportPeer;\n                }\n            }\n            catch (Exception e)\n            {\n                Debug.WriteLine(e);\n                // TODO -- maybe log this one?\n            }\n\n            if (_index >= _peers.Length) return null;\n\n            return await tryToSelect().ConfigureAwait(false);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/OwnershipStatus.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public enum OwnershipStatus\n    {\n        OwnershipActivated,\n        Exception,\n        AlreadyOwned,\n        UnknownSubject,\n        TimedOut\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/PersistentTaskAgent.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    // Error handling and logging is handled in PersistentTaskController\n    public interface IPersistentTaskAgent\n    {\n        Uri Subject { get; }\n        bool IsActive { get; }\n        Task<HealthStatus> AssertAvailable();\n        Task<OwnershipStatus> Activate();\n        Task<bool> Deactivate();\n        Task<ITransportPeer> AssignOwner(IEnumerable<ITransportPeer> peers);\n    }\n\n    public class PersistentTaskAgent : IPersistentTaskAgent\n    {\n        private readonly IPersistentTask _task;\n        private readonly HealthMonitoringSettings _settings;\n        private readonly ILogger _logger;\n        private readonly ISubscriptionRepository _repository;\n        private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();\n\n        public PersistentTaskAgent(IPersistentTask task, HealthMonitoringSettings settings, ILogger logger, ISubscriptionRepository repository)\n        {\n            _task = task;\n            _settings = settings;\n            _logger = logger;\n            _repository = repository;\n        }\n\n        public Uri Subject => _task.Subject;\n\n        public Task<HealthStatus> AssertAvailable()\n        {\n            return Task.Factory.StartNew(() => {\n                var status =\n                        TimeoutRunner.Run(_settings.TaskAvailabilityCheckTimeout, () => _task.AssertAvailable(),\n                            ex => {\n                                _logger.Error(Subject, \"Availability test failed for \" + Subject, ex);\n                                _logger.InfoMessage(() => new TaskAvailabilityFailed(Subject)\n                                {\n                                    ExceptionText = ex.ToString(),\n                                    ExceptionType = ex.GetType().Name\n                                });\n                            });\n\n                switch (status)\n                {\n                    case Completion.Exception:\n                        \n                        return HealthStatus.Error;\n\n                    case Completion.Success:\n                        return HealthStatus.Active;\n\n                    case Completion.Timedout:\n                        _logger.InfoMessage(() => new TaskAvailabilityFailed(Subject){ExceptionType = \"Timedout\"});\n                        return HealthStatus.Timedout;\n\n                    default:\n                        throw new ArgumentOutOfRangeException($\"status\", \"Status \" + status + \" should not be possible here\");\n                }\n            }, TaskCreationOptions.AttachedToParent);\n        }\n\n        public Task<OwnershipStatus> Activate()\n        {\n            return Task.Factory.StartNew(\n                activate,\n                TaskCreationOptions.AttachedToParent\n                );\n        }\n\n        private OwnershipStatus activate()\n        {\n            Action activation = () => _lock.Write(() => _task.Activate());\n\n            var status = TimeoutRunner.Run(_settings.TaskActivationTimeout, activation, ex => {\n                _logger.Error(Subject, \"Failed to take ownership of task \" + Subject, ex);\n                _logger.InfoMessage(() => new TaskActivationFailure(Subject));\n            });\n\n            switch (status)\n            {\n                 case Completion.Success:\n                    _logger.InfoMessage(() => new TookOwnershipOfPersistentTask(Subject));\n                    _repository.AddOwnershipToThisNode(Subject);\n                    return OwnershipStatus.OwnershipActivated;\n            \n                case Completion.Timedout:\n                    _logger.InfoMessage(() => new TaskActivationTimeoutFailure(Subject));\n                    return OwnershipStatus.TimedOut;\n\n                default:\n                    return OwnershipStatus.Exception;\n            }\n        }\n\n        public Task<bool> Deactivate()\n        {\n            return Task.Factory.StartNew(\n                deactivate,\n                TaskCreationOptions.AttachedToParent);\n        }\n\n        private bool deactivate()\n        {\n            try\n            {\n                _lock.Write(() => _task.Deactivate());\n                return true;\n            }\n            catch (Exception ex)\n            {\n                _logger.Error(Subject, \"Failed to stop task \" + Subject, ex);\n                _logger.InfoMessage(() => new FailedToStopTask(Subject));\n\n                return false;\n            }\n            finally\n            {\n                _repository.RemoveOwnershipFromThisNode(Subject);\n            }\n        }\n\n        public bool IsActive\n        {\n            get\n            {\n                return _lock.Read(() => _task.IsActive);\n            }\n        }\n\n        public Task<ITransportPeer> AssignOwner(IEnumerable<ITransportPeer> peers)\n        {\n            return _task.SelectOwner(peers);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/PersistentTaskController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuCore.Util;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class PersistentTaskController : ITransportPeer, IPersistentTasks, IPersistentTaskController\n    {\n        private readonly ChannelGraph _graph;\n        private readonly ILogger _logger;\n        private readonly ITaskMonitoringSource _factory;\n\n        private readonly ConcurrentCache<string, IPersistentTaskSource> _sources\n            = new ConcurrentCache<string, IPersistentTaskSource>();\n\n        private readonly ConcurrentCache<Uri, IPersistentTaskAgent> _agents =\n            new ConcurrentCache<Uri, IPersistentTaskAgent>();\n\n        public override string ToString()\n        {\n            return $\"PersistentTaskController: {NodeId}\";\n        }\n\n        private readonly Uri[] _permanentTasks;\n\n\n        public PersistentTaskController(ChannelGraph graph, ILogger logger, ITaskMonitoringSource factory, IList<IPersistentTaskSource> sources)\n        {\n            _graph = graph;\n            _logger = logger;\n            _factory = factory;\n            sources.Each(x => _sources[x.Protocol] = x);\n\n            _agents.OnMissing = uri => {\n                var persistentTask = FindTask(uri);\n                return persistentTask == null ? null : _factory.BuildAgentFor(persistentTask);\n            };\n\n            _permanentTasks = sources.SelectMany(x => x.PermanentTasks()).ToArray();\n        }\n\n        public async Task<HealthStatus> CheckStatus(Uri subject)\n        {\n            var agent = _agents[subject];\n\n            return agent == null ? HealthStatus.Unknown : await checkStatus(agent).ConfigureAwait(false);\n        }\n\n        private static async Task<HealthStatus> checkStatus(IPersistentTaskAgent agent)\n        {\n            return agent.IsActive \n                ? await agent.AssertAvailable().ConfigureAwait(false) \n                : HealthStatus.Inactive;\n        }\n\n\n        public IPersistentTask FindTask(Uri subject)\n        {\n            if (!_sources.Has(subject.Scheme)) return null;\n\n            var source = _sources[subject.Scheme];\n\n            return source?.CreateTask(subject);\n        }\n\n        public IPersistentTaskAgent FindAgent(Uri subject)\n        {\n            return _agents[subject];\n        }\n\n        public async Task<bool> Deactivate(Uri subject)\n        {\n            var agent = _agents[subject];\n            if (agent == null)\n            {\n                _logger.Info(\"Task '{0}' is not recognized by this node\".ToFormat(subject));\n\n                return false;\n            }\n\n            return await agent.Deactivate().ConfigureAwait(false);\n        }\n\n\n        public async Task EnsureTasksHaveOwnership()\n        {\n            var healthChecks = AllPeers().Select(async x =>\n            {\n                var status = await x.CheckStatusOfOwnedTasks().ConfigureAwait(false);\n                return new { Peer = x, Response = status };\n            }).ToArray();\n\n            var checks = await Task.WhenAll(healthChecks).ConfigureAwait(false);\n\n\n            var planner = new TaskHealthAssignmentPlanner(_permanentTasks);\n            foreach (var check in checks)\n            {\n                planner.Add(check.Peer, check.Response);\n            }\n\n\n            var corrections = planner.ToCorrectionTasks(this);\n\n            await Task.WhenAll(corrections).ConfigureAwait(false);\n\n            _logger.Info(() => \"Finished running task health monitoring on node \" + NodeId);\n        }\n\n\n        public IEnumerable<ITransportPeer> AllPeers()\n        {\n            yield return this;\n            foreach (var peer in _factory.BuildPeers())\n            {\n                yield return peer;\n            }\n        }\n\n        public async Task<OwnershipStatus> TakeOwnership(Uri subject)\n        {\n            _logger.InfoMessage(() => new TryingToAssignOwnership(subject, NodeId));\n\n            var agent = _agents[subject];\n            if (agent == null)\n            {\n                return OwnershipStatus.UnknownSubject;\n            }\n\n            if (agent.IsActive)\n            {\n                return OwnershipStatus.AlreadyOwned;\n            }\n\n\n            return await agent.Activate().ConfigureAwait(false);\n        }\n\n        public async Task<TaskHealthResponse> CheckStatusOfOwnedTasks()\n        {\n            var subjects = CurrentlyOwnedSubjects().ToArray();\n\n            if (!subjects.Any())\n            {\n                return TaskHealthResponse.Empty();\n            }\n\n            var checks = subjects\n                .Select(async subject =>\n                {\n                    var status = await CheckStatus(subject).ConfigureAwait(false);\n                    \n                    return new PersistentTaskStatus(subject, status);\n                })\n                .ToArray();\n\n            var statusList = await Task.WhenAll(checks).ConfigureAwait(false);\n\n            return new TaskHealthResponse\n            {\n                Tasks = statusList.ToArray()\n            };\n        }\n\n        public void RemoveOwnershipFromNode(IEnumerable<Uri> subjects)\n        {\n            _factory.RemoveOwnershipFromThisNode(subjects);\n        }\n\n        public IEnumerable<Uri> ActiveTasks()\n        {\n            return _agents.Where(x => x.IsActive).Select(x => x.Subject).ToArray();\n        }\n\n        public IEnumerable<Uri> PermanentTasks()\n        {\n            return _permanentTasks;\n        }\n\n        public IEnumerable<Uri> CurrentlyOwnedSubjects()\n        {\n            var activeTasks = _agents.Where(x => x.IsActive).Select(x => x.Subject);\n            return\n                _factory.LocallyOwnedTasksAccordingToPersistence().Union(activeTasks).ToArray();\n        }\n\n        public string NodeId => _graph.NodeId;\n\n        public async Task Reassign(Uri subject, IList<ITransportPeer> availablePeers, IList<ITransportPeer> deactivations)\n        {\n            Debug.WriteLine($\"Reassigning task {subject}, available peers {availablePeers.Select(x => x.NodeId).Join(\", \")}\");\n\n            await Task.WhenAll(deactivations.Select(x => x.Deactivate(subject))).ConfigureAwait(false);\n\n            _logger.InfoMessage(() => new ReassigningTask(subject, deactivations));\n\n            var agent = _agents[subject];\n            if (agent == null)\n            {\n                _logger.InfoMessage(() => new UnknownTask(subject, \"Trying to reassign a persistent task\"));\n                return;\n            }\n\n            try\n            {\n                var owner = await agent.AssignOwner(availablePeers).ConfigureAwait(false);\n                if (owner == null)\n                {\n                    _logger.InfoMessage(() => new UnableToAssignOwnership(subject));\n                }\n            }\n            catch (Exception e)\n            {\n                _logger.Error(subject, \"Failed while trying to assign ownership\", e);\n            }\n        }\n\n        string ITransportPeer.MachineName => System.Environment.MachineName;\n\n        // TODO -- think this should be explicitly set later\n        public Uri ControlChannel => _graph.ReplyUriList().FirstOrDefault();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/PersistentTaskMessageModifier.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class PersistentTaskMessageModifier : ILogModifier\n    {\n        private readonly ChannelGraph _graph;\n\n        public PersistentTaskMessageModifier(ChannelGraph graph)\n        {\n            _graph = graph;\n        }\n\n        public bool Matches(Type logType)\n        {\n            return logType.CanBeCastTo<PersistentTaskMessage>();\n        }\n\n        public void Modify(object log)\n        {\n            var message = log.As<PersistentTaskMessage>();\n\n            message.Machine = System.Environment.MachineName;\n            message.NodeId = _graph.NodeId;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/PersistentTaskStatus.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class PersistentTaskStatus\n    {\n        public PersistentTaskStatus()\n        {\n        }\n\n        public PersistentTaskStatus(Uri subject, HealthStatus status)\n        {\n            Subject = subject;\n            Status = status;\n        }\n\n        public Uri Subject { get; set; }\n        public HealthStatus Status { get; set; }\n\n        protected bool Equals(PersistentTaskStatus other)\n        {\n            return Equals(Subject, other.Subject) && Status == other.Status;\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((PersistentTaskStatus) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((Subject != null ? Subject.GetHashCode() : 0)*397) ^ (int) Status;\n            }\n        }\n\n        public override string ToString()\n        {\n            return $\"Subject: {Subject}, Status: {Status}\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/TakeOwnershipRequest.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class TakeOwnershipRequest\n    {\n        public TakeOwnershipRequest(Uri subject)\n        {\n            Subject = subject;\n        }\n\n        public TakeOwnershipRequest()\n        {\n        }\n\n        public Uri Subject { get; set; }\n\n        protected bool Equals(TakeOwnershipRequest other)\n        {\n            return Equals(Subject, other.Subject);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((TakeOwnershipRequest) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Subject != null ? Subject.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return $\"TakeOwnershipRequest for subject: {Subject}\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/TakeOwnershipResponse.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class TakeOwnershipResponse\n    {\n        public Uri Subject { get; set; }\n        public OwnershipStatus Status { get; set; }\n        public string NodeId { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/TaskAssignmentStatus.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class TaskAssignmentStatus\n    {\n        public Uri Subject { get; private set; }\n\n        public TaskAssignmentStatus(Uri subject)\n        {\n            Subject = subject;\n        }\n\n        public IList<ITransportPeer> ValidOwners = new List<ITransportPeer>();\n        public IList<ITransportPeer> InvalidOwners = new List<ITransportPeer>();\n\n        public IEnumerable<Task> ToTasks(IPersistentTasks tasks, IList<ITransportPeer> availablePeers)\n        {\n            switch (ValidOwners.Count)\n            {\n                case 0:\n                    yield return tasks.Reassign(Subject, availablePeers, InvalidOwners);\n                    break;\n\n                case 1:\n                    foreach (var transportPeer in InvalidOwners)\n                    {\n                        yield return transportPeer.Deactivate(Subject);\n                    }\n                    break;\n\n                default:\n                    yield return tasks.Reassign(Subject, availablePeers, InvalidOwners.Union(ValidOwners).ToList());\n                    break;\n            }\n        }\n\n\n        public void ReadPeerStatus(ITransportPeer peer, HealthStatus status)\n        {\n            if (status == HealthStatus.Active)\n            {\n                ValidOwners.Add(peer);\n            }\n            else\n            {\n                InvalidOwners.Add(peer);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/TaskDeactivation.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class TaskDeactivation\n    {\n        public TaskDeactivation()\n        {\n        }\n\n        public TaskDeactivation(Uri subject)\n        {\n            Subject = subject;\n        }\n\n        public Uri Subject { get; set; }\n\n        protected bool Equals(TaskDeactivation other)\n        {\n            return Equals(Subject, other.Subject);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((TaskDeactivation) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Subject != null ? Subject.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return $\"Deactivate Task: {Subject}\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/TaskDeactivationResponse.cs",
    "content": "using System;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class TaskDeactivationResponse\n    {\n        public Uri Subject { get; set; }\n        public bool Success { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/TaskHealthAssignmentPlanner.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore.Util;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class TaskHealthAssignmentPlanner\n    {\n        private readonly IList<ITransportPeer> _availablePeers = new List<ITransportPeer>();\n\n        private readonly Cache<Uri, TaskAssignmentStatus> _status\n            = new Cache<Uri, TaskAssignmentStatus>(x => new TaskAssignmentStatus(x));\n\n        private readonly Cache<ITransportPeer, List<Uri>> _removals = new Cache<ITransportPeer, List<Uri>>(_ => new List<Uri>());\n\n        public TaskHealthAssignmentPlanner(IEnumerable<Uri> permanentTasks)\n        {\n            foreach (var task in permanentTasks)\n            {\n                _status.FillDefault(task);\n            }\n\n        }\n\n        public void Add(ITransportPeer peer, TaskHealthResponse response)\n        {\n            var subjects = response.AllSubjects().ToArray();\n\n            if (response.ResponseFailed)\n            {\n                Debug.WriteLine(\"Failed to detect available peer: \" + peer.NodeId);\n                _removals[peer].AddRange(subjects);\n            }\n            else\n            {\n                Debug.WriteLine(\"Detected an available peer: \" + peer.NodeId);\n                _availablePeers.Add(peer);\n\n                response.Tasks.Each(x => _status[x.Subject].ReadPeerStatus(peer, x.Status));\n            }\n        }\n\n        public IEnumerable<Task> ToCorrectionTasks(IPersistentTasks tasks)\n        {\n            if (_removals.Any())\n            {\n                yield return RemoveUnavailableOwnership();\n            }\n\n            foreach (var taskStatus in _status)\n            {\n                foreach (var task in taskStatus.ToTasks(tasks, _availablePeers))\n                {\n                    yield return task;\n                }\n            }\n        }\n\n        public Task RemoveUnavailableOwnership()\n        {\n            return\n                Task.Factory.StartNew(\n                    () => {\n                        _removals.Each((node, subjects) => node.RemoveOwnershipFromNode(subjects));\n                    });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/TaskHealthRequest.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class TaskHealthRequest\n    {\n        public Uri[] Subjects { get; set; }\n\n        protected bool Equals(TaskHealthRequest other)\n        {\n            return Subjects.SequenceEqual(other.Subjects);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((TaskHealthRequest) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Subjects != null ? Subjects.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return $\"TaskHealthRequest: {Subjects.Select(x => x.ToString()).Join(\", \")}\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/TaskHealthResponse.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class TaskHealthResponse\n    {\n        public PersistentTaskStatus[] Tasks { get; set; }\n        public bool ResponseFailed { get; set; }\n\n        public void AddMissingSubjects(IEnumerable<Uri> subjects)\n        {\n            var tasks = Tasks ?? new PersistentTaskStatus[0];\n\n            var fills = subjects.Where(x => tasks.All(_ => _.Subject != x))\n                .Select(x => new PersistentTaskStatus(x, HealthStatus.Inactive));\n\n            Tasks = tasks.Union(fills).ToArray();\n        }\n\n        public static TaskHealthResponse ErrorFor(IEnumerable<Uri> enumerable)\n        {\n            return new TaskHealthResponse\n            {\n                Tasks = enumerable.Select(x => new PersistentTaskStatus(x, HealthStatus.Error)).ToArray(),\n                ResponseFailed = true\n            };\n        }\n\n        public static TaskHealthResponse Empty()\n        {\n            return new TaskHealthResponse\n            {\n                Tasks = new PersistentTaskStatus[0]\n            };\n        }\n\n        public override string ToString()\n        {\n            return \"Health Check \" + Tasks.Select(x => \"{0}: {1}\".ToFormat(x.Subject, x.Status)).Join(\", \");\n        }\n\n        public IEnumerable<Uri> AllSubjects()\n        {\n            return (Tasks ?? new PersistentTaskStatus[0]).Select(x => x.Subject);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/TaskMonitoringSource.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class TaskMonitoringSource : ITaskMonitoringSource\n    {\n        private readonly HealthMonitoringSettings _settings;\n        private readonly ILogger _logger;\n        private readonly IServiceBus _serviceBus;\n        private readonly ISubscriptionRepository _repository;\n\n        public TaskMonitoringSource(HealthMonitoringSettings settings, ILogger logger, IServiceBus serviceBus, ISubscriptionRepository repository)\n        {\n            _settings = settings;\n            _logger = logger;\n            _serviceBus = serviceBus;\n            _repository = repository;\n        }\n\n        public bool HasAnyPeers()\n        {\n            return _repository.FindPeers().Any();\n        }\n\n        private TransportPeer toPeer(TransportNode node)\n        {\n            return new TransportPeer(_settings, node, _repository, _serviceBus, _logger);\n        }\n\n        public IEnumerable<ITransportPeer> BuildPeers()\n        {\n            return _repository.FindPeers().Select(toPeer).ToArray();\n        }\n\n        public IEnumerable<Uri> LocallyOwnedTasksAccordingToPersistence()\n        {\n            return _repository.FindLocal().OwnedTasks;\n        }\n\n        public IPersistentTaskAgent BuildAgentFor(IPersistentTask task)\n        {\n            return new PersistentTaskAgent(task, _settings, _logger, _repository);\n        }\n\n        public void RemoveOwnershipFromThisNode(IEnumerable<Uri> subjects)\n        {\n            _repository.RemoveOwnershipFromThisNode(subjects);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/TaskOwner.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class TaskOwner\n    {\n        public string Owner { get; set; }\n        public Uri Id { get; set; }\n\n        protected bool Equals(TaskOwner other)\n        {\n            return string.Equals(Owner, other.Owner) && Equals(Id, other.Id);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((TaskOwner) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((Owner != null ? Owner.GetHashCode() : 0)*397) ^ (Id != null ? Id.GetHashCode() : 0);\n            }\n        }\n\n        public override string ToString()\n        {\n            return $\"Owner: {Owner}, Id: {Id}\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Monitoring/TransportPeer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\n\nnamespace FubuMVC.Core.ServiceBus.Monitoring\n{\n    public class TransportPeer : ITransportPeer\n    {\n        private readonly HealthMonitoringSettings _settings;\n        private readonly TransportNode _node;\n        private readonly ISubscriptionRepository _subscriptions;\n        private readonly IServiceBus _serviceBus;\n        private readonly ILogger _logger;\n\n        public TransportPeer(HealthMonitoringSettings settings, TransportNode node, ISubscriptionRepository subscriptions, IServiceBus serviceBus, ILogger logger)\n        {\n            _settings = settings;\n            _node = node;\n            _subscriptions = subscriptions;\n            _serviceBus = serviceBus;\n            _logger = logger;\n\n            if (_node.ControlChannel == null && !_node.Addresses.Any())\n            {\n                throw new ArgumentOutOfRangeException(nameof(node), \"The TransportNode must have at least one reply Uri\");\n            }\n        }\n\n        public async Task<OwnershipStatus> TakeOwnership(Uri subject)\n        {\n            _logger.InfoMessage(() => new TryingToAssignOwnership(subject, NodeId));\n\n            try\n            {\n                var response = await _serviceBus.Request<TakeOwnershipResponse>(new TakeOwnershipRequest(subject), new RequestOptions\n                {\n                    Destination = ControlChannel,\n                    Timeout = _settings.TakeOwnershipMessageTimeout\n                }).ConfigureAwait(false);\n\n                if (response == null)\n                {\n                    Debug.WriteLine($\"TakeOwnership message for task {subject} to node {_node.Id} timed out.\");\n                    return OwnershipStatus.TimedOut;\n                }\n\n                Debug.WriteLine($\"TakeOwnership message for task {subject} to node {_node.Id} returned status {response.Status}\");\n\n                return response.Status;\n            }\n            catch (Exception e)\n            {\n                _logger.Error(subject, \"Unable to send the TakeOwnership message to node \" + _node.NodeName, e);\n                return OwnershipStatus.Exception;\n            }\n        }\n\n        public async Task<TaskHealthResponse> CheckStatusOfOwnedTasks()\n        {\n            var subjects = CurrentlyOwnedSubjects().ToArray();\n\n            if (!subjects.Any())\n            {\n                return TaskHealthResponse.Empty();\n            }\n\n            var request = new TaskHealthRequest\n            {\n                Subjects = subjects\n            };\n\n\n            try\n            {\n                var response = await _serviceBus.Request<TaskHealthResponse>(request, new RequestOptions\n                {\n                    Destination = ControlChannel,\n                    Timeout = _settings.HealthCheckMessageTimeout\n                }).ConfigureAwait(false);\n\n                if (response == null)\n                {\n                    _logger.Info(() => \"Persistent task health status timedout for node \" + NodeId);\n                    return TaskHealthResponse.ErrorFor(subjects);\n                }\n\n                response.AddMissingSubjects(subjects);\n\n                return response;\n            }\n            catch (Exception e)\n            {\n                _logger.Error(NodeId, \"Could not retrieve persistent status checks\", e);\n\n                return TaskHealthResponse.ErrorFor(subjects);\n            }\n        }\n\n        public void RemoveOwnershipFromNode(IEnumerable<Uri> subjects)\n        {\n            _subscriptions.RemoveOwnershipFromNode(NodeId, subjects);\n        }\n\n        public IEnumerable<Uri> CurrentlyOwnedSubjects()\n        {\n            return _node.OwnedTasks;\n        }\n\n\n        public string NodeId => _node.Id;\n\n        public string MachineName => _node.MachineName;\n\n        public Uri ControlChannel => _node.ControlChannel;\n\n        public async Task<bool> Deactivate(Uri subject)\n        {\n            _logger.Info(() => \"Requesting a deactivation of task {0} at node {1}\".ToFormat(subject, NodeId));\n\n            try\n            {\n                var response = await _serviceBus.Request<TaskDeactivationResponse>(new TaskDeactivation(subject), new RequestOptions\n                {\n                    Destination = ControlChannel,\n                    Timeout = _settings.DeactivationMessageTimeout\n                }).ConfigureAwait(false);\n\n                _subscriptions.RemoveOwnershipFromNode(NodeId, subject);\n\n                return true;\n\n            }\n            catch (Exception e)\n            {\n                _logger.Error(subject, \"Failed while trying to deactivate a remote task\", e);\n\n                _subscriptions.RemoveOwnershipFromNode(NodeId, subject);\n\n                return false;\n            }\n        }\n\n        public override string ToString()\n        {\n            return $\"Remote TransportPeer: {NodeId}\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/NotHandlerAttribute.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.ServiceBus\n{\n    [AttributeUsage(AttributeTargets.Method)]\n    public class NotHandlerAttribute : Attribute\n    {\n         \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/DefaultTimer.cs",
    "content": "﻿using System;\nusing System.Timers;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public class DefaultTimer : ITimer\n    {\n        private readonly Timer _timer;\n        private Action _callback;\n\n        public DefaultTimer()\n        {\n            _timer = new Timer { AutoReset = false };\n            _timer.Elapsed += elapsedHandler;\n        }\n\n        public bool Enabled { get; private set; }\n\n        public double Interval\n        {\n            get\n            {\n                return _timer.Interval;\n            }\n            set\n            {\n                _timer.Interval = value;\n            }\n        }\n\n        public void Start(Action callback, double interval)\n        {\n            _callback = callback;\n            _timer.Interval = interval;\n\n            _timer.Start();\n            Enabled = true;\n        }\n\n        public void Stop()\n        {\n            Enabled = false;\n            _timer.Stop();\n        }\n\n        public void Restart()\n        {\n            _timer.Start();\n            Enabled = true;\n        }\n\n        public void Dispose()\n        {\n            _timer.Dispose();\n        }\n\n        private void elapsedHandler(object sender, ElapsedEventArgs eventArgs)\n        {\n            if (!Enabled) return;\n            if (_callback == null) return;\n\n            _callback();\n\n            // Callback could take a while, recheck Enabled\n            if (Enabled)\n            {\n                // TODO -- harden this w/ errors?  Or handle it in the chains?\n                _timer.Start();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/IJob.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public interface IJob\n    {\n        void Execute(CancellationToken cancellation);\n    }\n\n    public class JobTimeout\n    {\n        private readonly TimeSpan _timeout;\n\n        public JobTimeout(TimeSpan timeout)\n        {\n            _timeout = timeout;\n        }\n\n        public TimeSpan Timeout\n        {\n            get { return _timeout; }\n        }\n\n        public async Task Execute(IJob job)\n        {\n            var source = new CancellationTokenSource(_timeout);\n            var cancellation = new CancellationToken();\n            var task = Task.Factory.StartNew(() => job.Execute(source.Token), source.Token);\n            var timeout = Task.Delay(_timeout, cancellation);\n            if (await Task.WhenAny(task, timeout) == task)\n            {\n                await task;\n            }\n            else\n            {\n                var marker = new TaskCompletionSource<object>();\n                marker.SetException(new TimeoutException(\"Timed out after \" + _timeout));\n\n                await marker.Task;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/IPollingJob.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public interface IPollingJob : IDisposable\n    {\n        bool IsRunning();\n        void Start();\n        void RunNow();\n        void Stop();\n\n        Type JobType { get; }\n        ScheduledExecution ScheduledExecution { get; }\n        PollingJobChain Chain { get; }\n        double Interval { get; }\n        Task WaitForJobToExecute();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/IPollingJobLogger.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public interface IPollingJobLogger\n    {\n        void Stopping(Type jobType);\n        void Starting(Guid id, IJob job);\n        void Successful(Guid id, IJob job);\n        void Failed(Guid id, IJob job, Exception ex);\n        void FailedToSchedule(Type jobType, Exception exception);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/IPollingJobs.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public interface IPollingJobs : IEnumerable<IPollingJob>\n    {\n        bool IsActive<T>() where T : IJob;\n        bool IsActive(Type jobType);\n        void Activate<T>() where T : IJob;\n        void Activate(Type type);\n        Task WaitForJobToExecute<T>() where T : IJob;\n        Task ExecuteJob<T>() where T : IJob;\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/ITimer.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public interface ITimer : IDisposable\n    {\n        void Start(Action callback, double interval);\n        void Restart();\n        void Stop();\n\n        bool Enabled { get; }\n        double Interval { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/JobRequest.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Polling\n{\n    public class JobRequest<T> where T : IJob{}\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/JobRunner.cs",
    "content": "﻿using System;\nusing System.Threading;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public class JobRunner<T> where T : IJob\n    {\n        private readonly T _job;\n        private readonly IPollingJobLogger _logger;\n\n        public JobRunner(T job, IPollingJobLogger logger)\n        {\n            _job = job;\n            _logger = logger;\n        }\n\n        public void Run(JobRequest<T> request)\n        {\n            var id = Guid.NewGuid();\n\n            _logger.Starting(id, _job);\n\n            try\n            {\n                _job.Execute(new CancellationToken());\n                _logger.Successful(id, _job);\n            }\n            catch (Exception e)\n            {\n                _logger.Failed(id, _job, e);\n                throw;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/PollingJob.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Threading.Tasks;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public class PollingJob<TJob, TSettings> : DescribesItself, IPollingJob where TJob : IJob\n    {\n        private readonly IServiceBus _bus;\n        private readonly IPollingJobLogger _logger;\n        private readonly TSettings _settings;\n        private readonly ITimer _timer;\n        private readonly Expression<Func<TSettings, double>> _intervalSource;\n        private readonly PollingJobLatch _latch;\n        private readonly Func<TSettings, double> _intervalFunc; \n        private readonly IList<TaskCompletionSource<object>> _waiters = new List<TaskCompletionSource<object>>(); \n        private readonly object _waiterLock = new object();\n\n        public PollingJob(IServiceBus bus, IPollingJobLogger logger, TSettings settings,\n            PollingJobChain chain, PollingJobLatch latch)\n        {\n            _bus = bus;\n            _logger = logger;\n            _settings = settings;\n            _timer = new DefaultTimer();\n            _intervalSource = (Expression<Func<TSettings, double>>)chain.IntervalSource;\n            ScheduledExecution = chain.ScheduledExecution;\n            _latch = latch;\n\n            _intervalFunc = _intervalSource.Compile();\n            Chain = chain;\n        }\n\n        public PollingJobChain Chain { get; }\n\n        public ScheduledExecution ScheduledExecution { get; }\n\n        public Task WaitForJobToExecute()\n        {\n            lock (_waiterLock)\n            {\n                var source = new TaskCompletionSource<object>();\n                _waiters.Add(source);\n                return source.Task;\n            }\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = \"Polling Job for \" + typeof(TJob).Name;\n            typeof(TJob).ForAttribute<DescriptionAttribute>(att => description.ShortDescription = att.Description);\n            description.Properties[\"Interval\"] = Interval + \" ms\";\n            description.Properties[\"Config\"] = _intervalSource.ToString();\n            description.Properties[\"Scheduled Execution\"] = ScheduledExecution.ToString();\n        }\n\n        public double Interval => _intervalFunc(_settings);\n\n        public bool IsRunning()\n        {\n            return _timer.Enabled;\n        }\n\n        public void Start()\n        {\n            if (ScheduledExecution == ScheduledExecution.RunImmediately)\n            {\n                RunNow();\n            }\n\n            _timer.Start(RunNow, Interval);\n            \n        }\n\n        public void RunNow()\n        {\n            if (_latch.Latched) return;\n\n            TaskCompletionSource<object>[] waiters = null;\n\n            lock (_waiterLock)\n            {\n                waiters = _waiters.ToArray();\n                 _waiters.Clear();\n            }\n\n            try\n            {\n                _bus.Consume(new JobRequest<TJob>());\n                waiters.Each(x => x.SetResult(new object()));\n            }\n            catch (Exception e)\n            {\n                _waiters.Each(x => x.SetException(e));\n\n                // VERY unhappy with the code below, but I cannot determine\n                // why the latching doesn't work cleanly in the NUnit console runner\n                if (_latch.Latched || e.Message.Contains(\"Could not find an Instance named\")) return;\n\n                if (!_latch.Latched)\n                {\n                    _logger.FailedToSchedule(typeof(TJob), e);\n                }\n            }\n            finally\n            {\n                _timer.Interval = Interval;\n            }\n        }\n\n        public void Stop()\n        {\n            _logger.Stopping(typeof(TJob));\n            _timer.Stop();\n        }\n\n        public Type JobType => typeof (TJob);\n\n        public void Dispose()\n        {\n            Stop();\n            _timer.Dispose();\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/PollingJobActivator.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public class PollingJobActivator : IActivator\n    {\n        private readonly IPollingJobs _jobs;\n        private readonly ChannelGraph _channels;\n\n        public PollingJobActivator(IPollingJobs jobs, ChannelGraph channels)\n        {\n            _jobs = jobs;\n            _channels = channels;\n        }\n\n        public void Activate(IActivationLog log, IPerfTimer timer)\n        {\n            _jobs.Where(x => x.ScheduledExecution != ScheduledExecution.Disabled).Each(x => {\n                try\n                {\n                    log.Trace($\"Starting {x.JobType.GetFullName()} on node {_channels.NodeId}\");\n                    Debug.WriteLine($\"Starting {x.JobType.GetFullName()} on node {_channels.NodeId}\");\n\n                    x.Start();\n                }\n                catch (Exception ex)\n                {\n                    log.MarkFailure(ex);\n                }\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/PollingJobChain.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public class PollingJobChain : HandlerChain\n    {\n        public Type JobType { get; private set; }\n        public Type SettingType { get; private set; }\n        public Expression IntervalSource { get; private set; }\n        public ScheduledExecution ScheduledExecution { get; set; }\n\n        public PollingJobChain(Type jobType, Type settingType, Expression intervalSource)\n        {\n            if (jobType == null) throw new ArgumentNullException(\"jobType\");\n            if (settingType == null) throw new ArgumentNullException(\"settingType\");\n            if (intervalSource == null) throw new ArgumentNullException(\"intervalSource\");\n\n            ScheduledExecution = ScheduledExecution.WaitUntilInterval;\n            JobType = jobType;\n            SettingType = settingType;\n            IntervalSource = intervalSource;\n\n            Tags.Add(NoTracing);\n\n            var handlerType = typeof (JobRunner<>).MakeGenericType(JobType);\n            var method = handlerType.GetMethod(\"Run\");\n            AddToEnd(new HandlerCall(handlerType, method));\n        }\n\n        public override string Title()\n        {\n            return \"Polling Job: \" + JobType.Name;\n        }\n\n        public override bool IsPollingJob()\n        {\n            return true;\n        }\n\n        public Instance ToInstance()\n        {\n            var instance = new ConfiguredInstance(typeof (PollingJob<,>), JobType, SettingType);\n            instance.Dependencies.Add(typeof (PollingJobChain), this);\n\n            return instance;\n        }\n\n        public static PollingJobChain For<TJob, TSettings>(Expression<Func<TSettings, double>> intervalSource)\n            where TJob : IJob\n        {\n            return new PollingJobChain(typeof (TJob), typeof (TSettings), intervalSource);\n        }\n    }\n\n    public enum ScheduledExecution\n    {\n        WaitUntilInterval,\n        RunImmediately,\n        Disabled\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/PollingJobDeactivator.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public class PollingJobLatch\n    {\n        public bool Latched;\n    }\n\n    public class PollingJobDeactivator : IDeactivator\n    {\n        private readonly IPollingJobs _jobs;\n        private readonly PollingJobLatch _latch;\n\n        public PollingJobDeactivator(IPollingJobs jobs, PollingJobLatch latch)\n        {\n            _jobs = jobs;\n            _latch = latch;\n        }\n\n        public void Deactivate(IActivationLog log)\n        {\n            _latch.Latched = true;\n\n            _jobs.Each(x => {\n                try\n                {\n                    x.Dispose();\n                }\n                catch (Exception ex)\n                {\n                    log.MarkFailure(ex);\n                }\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/PollingJobExpression.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public class PollingJobExpression\n    {\n        private readonly FubuRegistry _parent;\n\n        public PollingJobExpression(FubuRegistry parent)\n        {\n            _parent = parent;\n        }\n\n        public IntervalExpression<TJob> RunJob<TJob>() where TJob : IJob\n        {\n            return new IntervalExpression<TJob>(this);\n        }\n\n        public class IntervalExpression<TJob> where TJob : IJob\n        {\n            private readonly PollingJobExpression _parent;\n\n            public IntervalExpression(PollingJobExpression parent)\n            {\n                _parent = parent;\n            }\n\n            public ScheduledExecutionExpression ScheduledAtInterval<TSettings>(\n                Expression<Func<TSettings, double>> intervalInMillisecondsProperty)\n            {\n                _parent._parent.AlterSettings<PollingJobSettings>(x => x.AddJob<TJob, TSettings>(intervalInMillisecondsProperty));\n\n                return new ScheduledExecutionExpression(_parent._parent);\n            }\n\n            public class ScheduledExecutionExpression\n            {\n                private readonly FubuRegistry _registry;\n\n                public ScheduledExecutionExpression(FubuRegistry registry)\n                {\n                    _registry = registry;\n                }\n\n                private ScheduledExecution schedule\n                {\n                    set\n                    {\n                        _registry.AlterSettings<PollingJobSettings>(x => x.JobFor<TJob>().ScheduledExecution = value);\n                    }\n                }\n\n                public void RunImmediately()\n                {\n                    schedule = ScheduledExecution.RunImmediately;\n                }\n\n                public void Disabled()\n                {\n                    schedule = ScheduledExecution.Disabled;\n                }\n\n                public void WaitForFirstInterval()\n                {\n                    schedule = ScheduledExecution.WaitUntilInterval;\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/PollingJobFailed.cs",
    "content": "﻿using System;\nusing FubuCore.Logging;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public class PollingJobFailed : LogRecord\n    {\n        public string Description { get; set; }\n        public Exception Exception { get; set; }\n        public Guid JobRun { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/PollingJobLogger.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuCore.Logging;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public class PollingJobLogger : IPollingJobLogger\n    {\n        private readonly ILogger _logger;\n\n        public PollingJobLogger(ILogger logger)\n        {\n            _logger = logger;\n        }\n\n        public void Stopping(Type jobType)\n        {\n            _logger.DebugMessage(() => new PollingJobStopped { JobType = jobType });\n        }\n\n        public void Starting(Guid id, IJob job)\n        {\n            _logger.InfoMessage(() => new PollingJobStarted { Description = job.ToString(), JobRun = id });\n        }\n\n        public void Successful(Guid id, IJob job)\n        {\n            _logger.InfoMessage(() => new PollingJobSuccess { Description = job.ToString(), JobRun = id });\n        }\n\n        public void Failed(Guid id, IJob job, Exception ex)\n        {\n            _logger.Error(\"Job {0}\".ToFormat(job), ex);\n            _logger.InfoMessage(() => new PollingJobFailed { Description = job.ToString(), Exception = ex, JobRun = id });\n\n        }\n\n        public void FailedToSchedule(Type jobType, Exception exception)\n        {\n            _logger.Error(\"Job {0} could not be Scheduled to run\".ToFormat(jobType.FullName), exception);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/PollingJobSettings.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Threading.Tasks;\nusing FubuCore.Descriptions;\nusing FubuCore.Util;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    [Description(\"See the polling jobs diagnostic screen\")]\n    public class PollingJobSettings : IFeatureSettings, IChainSource\n    {\n        private readonly Cache<Type, PollingJobChain> _jobs =\n            new Cache<Type, PollingJobChain>();\n\n        public IEnumerable<PollingJobChain> Jobs => _jobs;\n\n        public Task<BehaviorChain[]> BuildChains(BehaviorGraph graph, IPerfTimer timer)\n        {\n            var chains = Jobs.OfType<BehaviorChain>().ToArray();\n            return Task.FromResult(chains);\n        }\n\n        void IFeatureSettings.Apply(FubuRegistry registry)\n        {\n            Jobs.Select(x => x.ToInstance())\n                .Each(x => registry.Services.AddService(typeof(IPollingJob), x));\n\n            registry.Policies.ChainSource(this);\n        }\n\n        public PollingJobChain JobFor<T>() where T : IJob\n        {\n            return _jobs[typeof(T)];\n        }\n\n        public bool HasJob<T>()\n        {\n            return _jobs.Has(typeof(T));\n        }\n\n        public PollingJobChain AddJob<TJob, TSettings>(Expression<Func<TSettings, double>> intervalSource)\n            where TJob : IJob\n        {\n            var definition = PollingJobChain.For<TJob, TSettings>(intervalSource);\n            _jobs[typeof(TJob)] = definition;\n\n            return definition;\n        }\n\n        public void AddJob(PollingJobChain jobChain)\n        {\n            _jobs[jobChain.JobType] = jobChain;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/PollingJobStarted.cs",
    "content": "﻿using System;\nusing FubuCore.Logging;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public class PollingJobStarted : LogRecord\n    {\n        public string Description { get; set; }\n        public Guid JobRun { get; set; }\n\n\n        public override string ToString()\n        {\n            return \"PollingJob Started: \" + Description;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/PollingJobStopped.cs",
    "content": "﻿using System;\nusing FubuCore.Logging;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public class PollingJobStopped : LogRecord\n    {\n        public Type JobType { get; set; }\n\n        public override string ToString()\n        {\n            return \"PollingJob Stopped: \" + JobType.FullName;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/PollingJobSuccess.cs",
    "content": "﻿using System;\nusing FubuCore.Logging;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public class PollingJobSuccess : LogRecord\n    {\n        public string Description { get; set; }\n        public Guid JobRun { get; set; }\n\n        protected bool Equals(PollingJobSuccess other)\n        {\n            return string.Equals(Description, other.Description);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((PollingJobSuccess) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Description != null ? Description.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return \"PollingJob Success: \" + Description;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/PollingJobs.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing StructureMap;\n\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    [Singleton]\n    public class PollingJobs : IPollingJobs\n    {\n        private readonly IEnumerable<IPollingJob> _jobs;\n\n        public PollingJobs(IEnumerable<IPollingJob> jobs)\n        {\n            _jobs = jobs;\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return GetEnumerator();\n        }\n\n        public IEnumerator<IPollingJob> GetEnumerator()\n        {\n            return _jobs.GetEnumerator();\n        }\n\n        public bool IsActive<T>() where T : IJob\n        {\n            return IsActive(typeof (T));\n        }\n\n        public IPollingJob For(Type jobType)\n        {\n            return _jobs.FirstOrDefault(x => x.JobType == jobType);\n        }\n\n        public bool IsActive(Type jobType)\n        {\n            var job = For(jobType);\n            return job == null ? false : job.IsRunning();\n        }\n\n        public void Activate<T>() where T : IJob\n        {\n            Activate(typeof(T));\n        }\n\n        public void Activate(Type type)\n        {\n            var job = For(type);\n            if (job != null) job.Start();\n        }\n\n        public Task WaitForJobToExecute<T>() where T : IJob\n        {\n            var job = For(typeof(T));\n            if (job == null) throw new ArgumentOutOfRangeException(\"T\", \"Unknown job type \" + typeof(T).GetFullName());\n\n            return job.WaitForJobToExecute();\n        }\n\n        public Task ExecuteJob<T>() where T : IJob\n        {\n            var job = For(typeof(T));\n            if (job == null) throw new ArgumentOutOfRangeException(\"T\", \"Unknown job type \" + typeof(T).GetFullName());\n\n            return Task.Factory.StartNew(() => {\n                job.RunNow();\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Polling/PollingServicesRegistry.cs",
    "content": "﻿using FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.ServiceBus.Polling\n{\n    public class PollingServicesRegistry : ServiceRegistry\n    {\n        public PollingServicesRegistry()\n        {\n            SetServiceIfNone<ITimer, DefaultTimer>();\n            AddService<IDeactivator, PollingJobDeactivator>();\n            SetServiceIfNone<IPollingJobLogger, PollingJobLogger>();\n\n            SetServiceIfNone<IPollingJobs, PollingJobs>().Singleton();\n\n\n            For<PollingJobLatch>().Singleton();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ReceiveFailureException.cs",
    "content": "﻿using System;\nusing System.Runtime.Serialization;\n\nnamespace FubuMVC.Core.ServiceBus\n{\n    [Serializable]\n    public class ReceiveFailureException : Exception\n    {\n        public ReceiveFailureException(string message, Exception innerException) : base(message, innerException)\n        {\n        }\n\n        protected ReceiveFailureException(SerializationInfo info, StreamingContext context) : base(info, context)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/RecordingServiceBus.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.ServiceBus\n{\n    /// <summary>\n    /// This is a Recording Stub implementation of IServiceBus suitable for\n    /// unit testing\n    /// </summary>\n    public class RecordingServiceBus : IServiceBus\n    {\n        public readonly IList<object> Sent = new List<object>();\n        public readonly IList<object> Consumed = new List<object>();\n        public readonly IList<object> Await = new List<object>();\n        public readonly IList<DelayedMessage> DelayedSent = new List<DelayedMessage>();\n        public readonly IList<SentDirectlyToMessage> SentDirectlyTo = new List<SentDirectlyToMessage>(); \n\n        public Task<TResponse> Request<TResponse>(object request, RequestOptions options)\n        {\n            throw new NotSupportedException();\n        }\n\n        public void Send<T>(Uri destination, T message)\n        {\n            SentDirectlyTo.Add(new SentDirectlyToMessage {Destination = destination, Message = message});\n        }\n\n        public void Send<T>(T message)\n        {\n            Sent.Add(message);\n        }\n\n        public void Consume<T>(T message)\n        {\n            Consumed.Add(message);\n        }\n\n        public void DelaySend<T>(T message, DateTime time)\n        {\n            DelayedSent.Add(new DelayedMessage\n            {\n                Message = message,\n                Time = time\n            });\n        }\n\n        public void DelaySend<T>(T message, TimeSpan delay)\n        {\n            DelayedSent.Add(new DelayedMessage\n            {\n                Message = message,\n                Delay = delay\n            });\n        }\n\n        public Task SendAndWait<T>(T message)\n        {\n            Sent.Add(message);\n            return Task.Factory.StartNew(() => Await.Add(message));\n        }\n\n\n        public Task SendAndWait<T>(Uri destination, T message)\n        {\n            SentDirectlyTo.Add(new SentDirectlyToMessage { Destination = destination, Message = message });\n            return Task.Factory.StartNew(() => Await.Add(message));\n        }\n\n        public Task RemoveSubscriptionsForThisNodeAsync()\n        {\n            return Task.FromResult(false);\n        }\n\n        public class DelayedMessage\n        {\n            public TimeSpan Delay;\n            public DateTime Time;\n            public object Message;\n        }\n\n        public class SentDirectlyToMessage\n        {\n            public Uri Destination;\n            public object Message;\n        }\n    }\n\n\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Registration/DefaultHandlerSource.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Registration\n{\n    public class DefaultHandlerSource : HandlerSource\n    {\n        public DefaultHandlerSource()\n        {\n            UseThisAssembly();\n            IncludeClassesSuffixedWithConsumer();\n            IncludeClassesSuffixedWithHandler();\n            IncludeClassesMatchingSagaConvention();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Registration/ExplicitTypeHandlerSource.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\n\nnamespace FubuMVC.Core.ServiceBus.Registration\n{\n    public class ExplicitTypeHandlerSource : IHandlerSource\n    {\n        private readonly IList<Type> _types = new List<Type>();\n\n        public ExplicitTypeHandlerSource(params Type[] types)\n        {\n            _types.Fill(types);\n        }\n\n        public Task<HandlerCall[]> FindCalls(Assembly applicationAssembly)\n        {\n            return Task.Factory.StartNew(() =>\n            {\n                return _types.SelectMany(type =>\n                {\n                    return type.GetMethods().Where(HandlerCall.IsCandidate)\n                        .Select(method => new HandlerCall(type, method));\n                }).ToArray();\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Registration/FuncBuilder.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing System.Reflection;\n\nnamespace FubuMVC.Core.ServiceBus.Registration\n{\n    public static class FuncBuilder\n    {\n        public static object CompileSetter(PropertyInfo property)\n        {\n            ParameterExpression target = Expression.Parameter(property.ReflectedType, \"target\");\n            ParameterExpression arg = Expression.Parameter(property.PropertyType);\n            MethodInfo method = property.GetSetMethod();\n\n            MethodCallExpression callSetMethod = Expression.Call(target, method, arg);\n\n            LambdaExpression lambda = Expression.Lambda(typeof(Action<,>)\n                .MakeGenericType(property.ReflectedType, property.PropertyType), callSetMethod, target, arg);\n\n            return lambda.Compile();\n        }\n\n        public static object CompileGetter(PropertyInfo property)\n        {\n            ParameterExpression target = Expression.Parameter(property.ReflectedType, \"target\");\n            MethodInfo method = property.GetGetMethod();\n\n            MethodCallExpression callGetMethod = Expression.Call(target, method);\n\n            LambdaExpression lambda = Expression.Lambda(typeof(Func<,>)\n                .MakeGenericType(property.ReflectedType, property.PropertyType), callGetMethod, target);\n\n            return lambda.Compile();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Registration/HandlerSource.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuCore.Util;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Sagas;\nusing StructureMap.Graph.Scanning;\n\nnamespace FubuMVC.Core.ServiceBus.Registration\n{\n    public class HandlerSource : IHandlerSource, DescribesItself\n    {\n        private readonly List<Assembly> _assemblies = new List<Assembly>();\n        private readonly StringWriter _description = new StringWriter();\n\n        private readonly ActionMethodFilter _methodFilters;\n        private readonly CompositeFilter<Type> _typeFilters = new CompositeFilter<Type>();\n        private readonly CompositeFilter<HandlerCall> _callFilters = new CompositeFilter<HandlerCall>();\n\n        public HandlerSource()\n        {\n            _description.WriteLine(\"Public methods that follow the 1 in/1 out, 0 in/ 1 out, or 1 in/ 0 out pattern\");\n\n            _methodFilters = new ActionMethodFilter();\n            _methodFilters.Excludes += m => m.HasAttribute<NotHandlerAttribute>();\n        }\n\n        public void UseAssembly(Assembly assembly)\n        {\n            if (assembly == null) return;\n\n            _assemblies.Add(assembly);\n        }\n\n        public void UseThisAssembly()\n        {\n            UseAssembly(AssemblyFinder.FindTheCallingAssembly());\n        }\n\n        Task<HandlerCall[]> IHandlerSource.FindCalls(Assembly applicationAssembly)\n        {\n            if (applicationAssembly == null) throw new ArgumentNullException(\"applicationAssembly\");\n\n            var types = _assemblies.Any()\n                ? TypeRepository.FindTypes(_assemblies, TypeClassification.Concretes, _typeFilters.Matches)\n                : TypeRepository.FindTypes(applicationAssembly, TypeClassification.Concretes, _typeFilters.Matches);\n\n            return types.ContinueWith(x =>\n            {\n                return x.Result.SelectMany(actionsFromType).ToArray();\n            });\n        }\n\n        private IEnumerable<HandlerCall> actionsFromType(Type type)\n        {\n            return type.PublicInstanceMethods()\n                       .Where(_methodFilters.Matches)\n                       .Where(HandlerCall.IsCandidate)\n                       .Select(m => buildHandler(type, m))\n                       .Where(_callFilters.Matches);\n        }\n\n        protected virtual HandlerCall buildHandler(Type type, MethodInfo method)\n        {\n            return new HandlerCall(type, method);\n        }\n\n        /// <summary>\n        /// Find Handlers on classes whose name ends on 'Consumer'\n        /// </summary>\n        public void IncludeClassesSuffixedWithConsumer()\n        {\n            IncludeClassesSuffixedWith(\"Consumer\");\n        }\n\n        /// <summary>\n        /// Find Handlers from classes whose name ends with 'Consumer'\n        /// </summary>\n        public void IncludeClassesSuffixedWithHandler()\n        {\n            IncludeClassesSuffixedWith(\"Handler\");\n        }\n\n        /// <summary>\n        /// Find Handlers from concrete classes whose names ends with the suffix\n        /// </summary>\n        /// <param name=\"suffix\"></param>\n        public void IncludeClassesSuffixedWith(string suffix)\n        {\n            _description.WriteLine(\"Public classes that are suffixed by '{0}'\".ToFormat(suffix));\n            IncludeTypesNamed(x => x.EndsWith(suffix));\n        }\n\n        /// <summary>\n        /// Find Handlers suffixed with 'Saga' that have public properties of 'State' and 'IsCompleted'\n        /// </summary>\n        public void IncludeClassesMatchingSagaConvention()\n        {\n            _description.WriteLine(\"Public classes suffixed with Saga that have public properties of 'State' and 'IsCompleted'\");\n            IncludeTypes(x => StatefulSagaConvention.IsSagaHandler(x));\n        }\n\n        public void IncludeTypesNamed(Expression<Func<string, bool>> filter)\n        {\n            _description.WriteLine(\"Classes that match \" + filter.ToString());\n\n            var typeParam = Expression.Parameter(typeof(Type), \"type\"); // type =>\n            var nameProp = Expression.Property(typeParam, \"Name\");  // type.Name\n            var invokeFilter = Expression.Invoke(filter, nameProp); // filter(type.Name)\n            var lambda = Expression.Lambda<Func<Type, bool>>(invokeFilter, typeParam); // type => filter(type.Name)\n\n            IncludeTypes(lambda);\n        }\n\n        /// <summary>\n        /// Find Handlers on types that match on the provided filter\n        /// </summary>\n        public void IncludeTypes(Expression<Func<Type, bool>> filter)\n        {\n            _description.WriteLine(\"Public class that match \" + filter.ToString());\n\n            _typeFilters.Includes += filter;\n        }\n\n        /// <summary>\n        /// Find Handlers on concrete types assignable to T\n        /// </summary>\n        public void IncludeTypesImplementing<T>()\n        {\n            _description.WriteLine(\"Where types are concrete types that implement the {0} interface\".ToFormat(typeof(T).FullName));\n            IncludeTypes(type => !type.IsOpenGeneric() && type.IsConcreteTypeOf<T>());\n        }\n\n        /// <summary>\n        /// Handlers that match on the provided filter will be added to the runtime. \n        /// </summary>\n        public void IncludeMethods(Expression<Func<MethodInfo, bool>> filter)\n        {\n            _description.WriteLine(\"Methods matching \" + filter.ToString());\n            _methodFilters.Includes += filter;\n        }\n\n\n\n        /// <summary>\n        /// Exclude types that match on the provided filter for finding Handlers\n        /// </summary>\n        public void ExcludeTypes(Expression<Func<Type, bool>> filter)\n        {\n            _description.WriteLine(\"Exclude types matching \" + filter.ToString());\n            _typeFilters.Excludes += filter;\n        }\n\n        /// <summary>\n        /// Handlers that match on the provided filter will NOT be added to the runtime. \n        /// </summary>\n        public void ExcludeMethods(Expression<Func<MethodInfo, bool>> filter)\n        {\n            _description.WriteLine(\"Exclude methods matching \" + filter);\n            _methodFilters.Excludes += filter;\n        }\n\n        /// <summary>\n        /// Ignore any methods that are declared by a super type or interface T\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        public void IgnoreMethodsDeclaredBy<T>()\n        {\n            _description.WriteLine(\"Exclude methods declared by type \" + typeof(T).FullName);\n            _methodFilters.IgnoreMethodsDeclaredBy<T>();\n        }\n\n        /// <summary>\n        /// Exclude any types that are not concrete\n        /// </summary>\n        public void ExcludeNonConcreteTypes()\n        {\n            _description.WriteLine(\"Excludes non-concrete types\");\n            _typeFilters.Excludes += type => !type.IsConcrete();\n        }\n\n        void DescribesItself.Describe(Description description)\n        {\n            var list = new BulletList\n            {\n                Name = \"Assemblies\"\n            };\n\n            _assemblies.Each(assem =>\n            {\n                list.Children.Add(new Description\n                {\n                    Title = assem.FullName\n                });\n            });\n\n            description.Title = \"Handler Source\";\n            description.BulletLists.Add(list);\n            description.LongDescription = _description.ToString();\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Registration/IHandlerSource.cs",
    "content": "﻿using System.Reflection;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\n\nnamespace FubuMVC.Core.ServiceBus.Registration\n{\n    public interface IHandlerSource\n    {\n        Task<HandlerCall[]> FindCalls(Assembly applicationAssembly);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Registration/Nodes/HandlerCall.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.ServiceBus.Registration.Nodes\n{\n    public class HandlerCall : ActionCallBase, IMayHaveInputType\n    {\n        public static Task CascadeAsync<T>(Task<T> task, IInvocationContext context)\n        {\n            return task.ContinueWith(t => context.EnqueueCascading(t.Result), TaskContinuationOptions.NotOnFaulted);\n        }\n\n        public static bool IsCandidate(MethodInfo method)\n        {\n            if (method.DeclaringType.Equals(typeof(object))) return false;\n\n            var parameterCount = method.GetParameters() == null ? 0 : method.GetParameters().Length;\n            if (parameterCount != 1) return false;\n\n            if (method.IsSpecialName && (method.Name.StartsWith(\"get_\") || method.Name.StartsWith(\"set_\")))\n                return false;\n\n            bool hasOutput = method.ReturnType != typeof(void);\n            return !hasOutput || !method.ReturnType.IsValueType;\n        }\n\n        public static HandlerCall For(Type openType, Type closedType, string methodName)\n        {\n            var fullType = openType.MakeGenericType(closedType);\n            var method = fullType.GetMethod(methodName);\n\n            if (method == null) throw new ArgumentException(\"Could not find method named '{0}' in type {1}\".ToFormat(methodName, fullType.GetFullName()));\n\n            return new HandlerCall(fullType, method);\n        }\n\n        public static HandlerCall For<T>(Expression<Action<T>> method)\n        {\n            return new HandlerCall(typeof(T), ReflectionHelper.GetMethod(method));\n        }\n\n        public HandlerCall(Type handlerType, MethodInfo method)\n            : base(handlerType, method)\n        {\n            if (!IsCandidate(method))\n            {\n                throw new ArgumentOutOfRangeException(\"method\", method, \"The method has to have exactly one input\");\n            }\n        }\n\n        public HandlerCall Clone()\n        {\n            return new HandlerCall(HandlerType, Method);\n        }\n\n        public override BehaviorCategory Category => BehaviorCategory.Call;\n\n        protected override IConfiguredInstance buildInstance()\n        {\n            var invocationType = typeof(HandlerInvocation<>).MakeGenericType(HandlerType);\n            var invocation = Activator.CreateInstance(invocationType, Method);\n\n            var instance = new ConfiguredInstance(typeof(HandlerInvoker<>), HandlerType);\n            instance.Dependencies.Add(invocationType, invocation);\n\n            return instance;\n        }\n\n        public bool CouldHandleOtherMessageType(Type inputType)\n        {\n            if (inputType == InputType()) return false;\n\n            return inputType.CanBeCastTo(InputType());\n        }\n\n        public void AddClone(HandlerChain chain)\n        {\n            chain.AddToEnd(Clone());\n        }\n\n        public override string ToString()\n        {\n            return \"Handler: \" + Description;\n        }\n\n        public bool Equals(HandlerCall other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return other.HandlerType == HandlerType && other.Method.Matches(Method);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof(HandlerCall)) return false;\n            return Equals((HandlerCall)obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((HandlerType != null ? HandlerType.GetHashCode() : 0) * 397) ^\n                       (Method != null ? Method.GetHashCode() : 0);\n            }\n        }\n\n\n    }\n\n    public class HandlerInvocation<THandler>\n    {\n        private static MethodInfo FubuRequestFind = typeof(IFubuRequest).GetMethod(nameof(IFubuRequest.Find));\n\n        private static MethodInfo CascadeAsync = typeof(HandlerCall).GetMethod(nameof(HandlerCall.CascadeAsync),\n            BindingFlags.Public | BindingFlags.Static);\n\n        private static MethodInfo EnqueueCascading =\n            typeof(IInvocationContext).GetMethod(nameof(IInvocationContext.EnqueueCascading));\n\n        private static MethodInfo FirstOrDefault =\n            typeof(Enumerable)\n                .GetMethods().FirstOrDefault(x => x.Name == nameof(Enumerable.FirstOrDefault) && x.GetParameters().Length == 1);\n\n        private readonly Func<THandler, IFubuRequest, IInvocationContext, Task> _action;\n\n\n\n        public HandlerInvocation(MethodInfo method)\n        {\n            var request = Expression.Parameter(typeof(IFubuRequest), \"request\");\n            var context = Expression.Parameter(typeof(IInvocationContext), \"context\");\n            var handler = Expression.Parameter(typeof(THandler), \"handler\");\n\n            var inputs = method.GetParameters().Select(param => buildExpressionForParameter(request, param));\n\n            Expression body = Expression.Call(handler, method, inputs);\n\n            if (method.ReturnType != typeof(Task) && method.ReturnType.CanBeCastTo<Task>())\n            {\n                var outputType = method.ReturnType.GetGenericArguments().Single();\n                var cascade = CascadeAsync.MakeGenericMethod(outputType);\n                body = Expression.Call(null, cascade, body, context);\n            }\n            else if (method.ReturnType != typeof(void) && method.ReturnType != typeof(Task))\n            {\n                body = Expression.Call(context, EnqueueCascading, body);\n            }\n\n            if (!body.Type.CanBeCastTo<Task>())\n            {\n                var returnStatement = Expression.Constant(Task.CompletedTask);\n                body = Expression.Block(body, returnStatement);\n            }\n\n            var lambda = Expression\n                .Lambda<Func<THandler, IFubuRequest, IInvocationContext, Task>>(body, handler, request, context);\n\n            _action = lambda.Compile();\n        }\n\n        private Expression buildExpressionForParameter(ParameterExpression request, ParameterInfo parameter)\n        {\n            var method = FubuRequestFind.MakeGenericMethod(parameter.ParameterType);\n\n            var inner =  Expression.Call(request, method);\n\n            var firstMethod = FirstOrDefault.MakeGenericMethod(parameter.ParameterType);\n\n            return Expression.Call(null, firstMethod, inner);\n        }\n\n        public Task Invoke(THandler handler, IFubuRequest request, IInvocationContext context)\n        {\n            return _action(handler, request, context);\n        }\n    }\n\n    public class HandlerInvoker<THandler> : BasicBehavior\n    {\n        private readonly IFubuRequest _request;\n        private readonly THandler _handler;\n        private readonly IInvocationContext _context;\n        private readonly HandlerInvocation<THandler> _invocation;\n\n        public HandlerInvoker(IFubuRequest request, THandler handler, IInvocationContext context, HandlerInvocation<THandler> invocation) : base(PartialBehavior.Executes)\n        {\n            _request = request;\n            _handler = handler;\n            _context = context;\n            _invocation = invocation;\n        }\n\n        protected override async Task<DoNext> performInvoke()\n        {\n            await _invocation.Invoke(_handler, _request, _context).ConfigureAwait(false);\n\n            return DoNext.Continue;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Acknowledgement.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Runtime\n{\n    public class Acknowledgement\n    {\n        public string CorrelationId { get; set; }\n\n        protected bool Equals(Acknowledgement other)\n        {\n            return string.Equals(CorrelationId, other.CorrelationId);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((Acknowledgement) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (CorrelationId != null ? CorrelationId.GetHashCode() : 0);\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Cascading/DelayedResponse.cs",
    "content": "using System;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Cascading\n{\n    public class DelayedResponse : ISendMyself\n    {\n        private readonly object _outgoing;\n        private readonly DateTime _time;\n        private readonly TimeSpan _delay;\n\n        public DelayedResponse(object outgoing, TimeSpan delay) : this(outgoing, DateTime.UtcNow.Add(delay))\n        {\n            _delay = delay;\n        }\n\n        public DelayedResponse(object outgoing, DateTime time)\n        {\n            _outgoing = outgoing;\n            _time = time;\n        }\n\n        public object Outgoing\n        {\n            get { return _outgoing; }\n        }\n\n        public DateTime Time\n        {\n            get { return _time; }\n        }\n\n        public TimeSpan Delay\n        {\n            get { return _delay; }\n        }\n\n        public Envelope CreateEnvelope(Envelope original)\n        {\n            var outgoing = original.ForResponse(_outgoing);\n            outgoing.ExecutionTime = Time;\n\n            return outgoing;\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Execute {0} at time: {1}\", _outgoing, _time);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Cascading/IImmediateContinuation.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Cascading\n{\n    public interface IImmediateContinuation\n    {\n        object[] Actions();\n    }\n\n    public class ImmediateContinuation : IImmediateContinuation\n    {\n        private readonly IList<object> _actions = new List<object>();\n\n        public ImmediateContinuation(params object[] actions)\n        {\n            _actions.AddRange(actions);\n        }\n\n        public object[] Actions()\n        {\n            return _actions.ToArray();\n        }\n\n        public ImmediateContinuation With(params object[] actions)\n        {\n            _actions.AddRange(actions);\n\n            return this;\n        }\n    }\n\n    public static class ContinueImmediately\n    {\n        public static ImmediateContinuation With(params object[] actions)\n        {\n            return new ImmediateContinuation(actions);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Cascading/IOutgoingSender.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Cascading\n{\n    public interface IOutgoingSender\n    {\n        void SendOutgoingMessages(Envelope original, IEnumerable<object> cascadingMessages);\n        void SendFailureAcknowledgement(Envelope original, string message);\n\n        void Send(Envelope envelope);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Cascading/ISendMyself.cs",
    "content": "namespace FubuMVC.Core.ServiceBus.Runtime.Cascading\n{\n    public interface ISendMyself\n    {\n        Envelope CreateEnvelope(Envelope original);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Cascading/OutgoingSender.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing FubuCore;\nusing FubuCore.Logging;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Cascading\n{\n    public class OutgoingSender : IOutgoingSender\n    {\n        private readonly IEnvelopeSender _sender;\n        private readonly ILogger _logger;\n\n        public OutgoingSender(IEnvelopeSender sender, ILogger logger)\n        {\n            _sender = sender;\n            _logger = logger;\n        }\n\n        public void SendOutgoingMessages(Envelope original, IEnumerable<object> cascadingMessages)\n        {\n            if (original.AckRequested)\n            {\n                sendAcknowledgement(original);\n            }\n\n            cascadingMessages.Each(o => SendOutgoingMessage(original, o));\n        }\n\n        public void SendFailureAcknowledgement(Envelope original, string message)\n        {\n            if (original.AckRequested || original.ReplyRequested.IsNotEmpty())\n            {\n                var envelope = new Envelope\n                {\n                    ParentId = original.CorrelationId,\n                    Destination = original.ReplyUri,\n                    ResponseId = original.CorrelationId,\n                    Message = new FailureAcknowledgement()\n                    {\n                        CorrelationId = original.CorrelationId, \n                        Message = message\n                    },\n                    Callback = original.Callback\n                };\n\n                Send(envelope);\n            }\n        }\n\n        public void Send(Envelope envelope)\n        {\n            try\n            {\n                if (envelope.Callback != null && envelope.Callback.SupportsSend)\n                {\n                    _sender.Send(envelope, envelope.Callback);\n                }\n                else\n                {\n                    _sender.Send(envelope);\n                }\n\n\n            }\n            catch (Exception e)\n            {\n                // TODO -- we really, really have to do something here\n                _logger.Error(envelope.OriginalId, \"Failure while trying to send a cascading message\", e);\n            }\n        }\n\n        private void sendAcknowledgement(Envelope original)\n        {\n            var envelope = new Envelope\n            {\n                ParentId = original.CorrelationId,\n                Destination = original.ReplyUri,\n                ResponseId = original.CorrelationId,\n                Message = new Acknowledgement {CorrelationId = original.CorrelationId}\n            };\n\n            Send(envelope);\n        }\n\n        public void SendOutgoingMessage(Envelope original, object o)\n        {\n            var cascadingEnvelope = o is ISendMyself\n                ? o.As<ISendMyself>().CreateEnvelope(original)\n                : original.ForResponse(o);\n\n            cascadingEnvelope.Callback = original.Callback;\n\n            Send(cascadingEnvelope);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Cascading/Respond.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Cascading\n{\n    public class Respond : ISendMyself\n    {\n        private readonly object _message;\n        private readonly IList<Action<Envelope, Envelope>> _actions = new List<Action<Envelope, Envelope>>();\n        private string _description = string.Empty;\n        private bool _sentToSender;\n\n        public static Respond With(object message)\n        {\n            return new Respond(message);\n        }\n\n        private Respond(object message)\n        {\n            if (message == null) throw new ArgumentNullException(\"message\");\n            _description = \"Respond '{0}'\".ToFormat(message);\n\n            _message = message;\n        }\n\n        private Action<Envelope, Envelope> alter\n        {\n            set\n            {\n                _actions.Add(value);\n            }\n        }\n\n        public Respond WithHeader(string key, string value)\n        {\n            alter = (_, e) => e.Headers[key] = value;\n            _description += \"; {0}='{1}'\".ToFormat(key, value);\n\n            return this;\n        }\n\n        public Respond ToSender()\n        {\n            alter = (old, @new) => @new.Destination = old.ReplyUri;\n            _description += \"; respond to sender\";\n\n            _sentToSender = true;\n\n            return this;\n        }\n\n        public void AssertWasSentBackToSender()\n        {\n            if (!_sentToSender)\n            {\n                throw new Exception(\"Was NOT sent back to the sender\");\n            }\n        }\n\n        public Respond To(Uri destination)\n        {\n            alter = (_, e) => e.Destination = destination;\n            _description += \"; Destination=\" + destination;\n\n            return this;\n        }\n\n        public Respond DelayedUntil(DateTime time)\n        {\n            alter = (_, e) => e.ExecutionTime = time.ToUniversalTime();\n            _description += \"; Delayed until \" + time.ToUniversalTime();\n\n            return this;\n        }\n\n        public Respond DelayedBy(TimeSpan timeSpan)\n        {\n            return DelayedUntil(DateTime.UtcNow.Add(timeSpan));\n        }\n\n        public Respond Altered(Action<Envelope> alteration)\n        {\n            alter = (_, e) => alteration(e);\n            return this;\n        }\n\n        public Envelope CreateEnvelope(Envelope original)\n        {\n            var envelope = original.ForResponse(_message);\n\n            _actions.Each(x => x(original, envelope));\n\n            return envelope;\n        }\n\n        public override string ToString()\n        {\n            return _description;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Cascading/RespondToSender.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Runtime.Cascading\n{\n    public class RespondToSender : ISendMyself\n    {\n        private readonly object _outgoing;\n\n        public RespondToSender(object outgoing)\n        {\n            _outgoing = outgoing;\n        }\n\n        public Envelope CreateEnvelope(Envelope original)\n        {\n            var response = original.ForResponse(_outgoing);\n            response.Destination = original.ReplyUri;\n\n            return response;\n        }\n\n        public object Outgoing\n        {\n            get { return _outgoing; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Cascading/SendDirectlyTo.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Cascading\n{\n    public class SendDirectlyTo : ISendMyself\n    {\n        private readonly Uri _destination;\n        private readonly object _message;\n\n        public SendDirectlyTo(Uri destination, object message)\n        {\n            _destination = destination;\n            _message = message;\n        }\n\n        public Envelope CreateEnvelope(Envelope original)\n        {\n            var envelope = original.ForSend(_message);\n            envelope.Destination = _destination;\n            return envelope;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Delayed/DelayedEnvelopeAddedBackToQueue.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.Services.Messaging.Tracking;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Delayed\n{\n    public class DelayedEnvelopeAddedBackToQueue : MessageLogRecord\n    {\n        public EnvelopeToken Envelope { get; set; }\n\n        protected bool Equals(DelayedEnvelopeAddedBackToQueue other)\n        {\n            return Equals(Envelope, other.Envelope);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((DelayedEnvelopeAddedBackToQueue) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Envelope != null ? Envelope.GetHashCode() : 0);\n        }\n\n        public override MessageRecord ToRecord()\n        {\n            return new MessageRecord(Envelope)\n            {\n                Message = \"Envelope added back to the queue\"\n            };\n        }\n\n        public override MessageTrack ToMessageTrack()\n        {\n            return null;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Delayed/DelayedEnvelopeProcessor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Threading;\nusing FubuCore.Dates;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Polling;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Delayed\n{\n    public class DelayedEnvelopeProcessor : IJob\n    {\n        private readonly ILogger _logger;\n        private readonly ISystemTime _systemTime;\n        private readonly IEnumerable<ITransport> _transports;\n\n        public DelayedEnvelopeProcessor(ILogger logger, ISystemTime systemTime, IEnumerable<ITransport> transports)\n        {\n            _logger = logger;\n            _systemTime = systemTime;\n            _transports = transports;\n        }\n\n        public void Execute(CancellationToken cancellation)\n        {\n            var currentTime = _systemTime.UtcNow();\n\n            _transports.Each(transport => {\n                DequeuFromTransport(transport, currentTime);\n            });\n        }\n\n        public void DequeuFromTransport(ITransport transport, DateTime currentTime)\n        {\n            try\n            {\n                var envelopes = transport.ReplayDelayed(currentTime);\n                envelopes.Each(x => _logger.InfoMessage(() => new DelayedEnvelopeAddedBackToQueue {Envelope = x}));\n            }\n            catch (Exception e)\n            {\n                _logger.Error(\"Error while trying to dequeue delayed messages from \" + transport.ToString(), e);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Delayed/DelayedEnvelopeReceived.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.Services.Messaging.Tracking;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Delayed\n{\n    public class DelayedEnvelopeReceived : MessageLogRecord\n    {\n        public EnvelopeToken Envelope { get; set; }\n\n        protected bool Equals(DelayedEnvelopeReceived other)\n        {\n            return Equals(Envelope, other.Envelope);\n        }\n\n        public override MessageRecord ToRecord()\n        {\n            return new MessageRecord(Envelope)\n            {\n                Message = \"Delayed envelope received\"\n            };\n        }\n\n        public override MessageTrack ToMessageTrack()\n        {\n            return null;\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((DelayedEnvelopeReceived) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Envelope != null ? Envelope.GetHashCode() : 0);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Delayed/DelayedMessageCache.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing FubuCore;\nusing StructureMap;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Delayed\n{\n    public interface IDelayedMessageCache<TIdentifier>\n    {\n        void Add(TIdentifier messageId, DateTime time);\n        IEnumerable<TIdentifier> AllMessagesBefore(DateTime time);\n    }\n\n    [Singleton]\n    public class DelayedMessageCache<TIdentifier> : IDelayedMessageCache<TIdentifier>\n    {\n        private readonly IList<DelayedMessage> _delayedMessages = new List<DelayedMessage>();\n        private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();\n\n        public void Add(TIdentifier messageId, DateTime time)\n        {\n            _lock.Write(() => _delayedMessages.Add(new DelayedMessage{MessageId = messageId, ReceiveAt = time}));\n        }\n        \n        public IEnumerable<TIdentifier> AllMessagesBefore(DateTime time)\n        {\n            var readyToPlayMessages = _lock.Read<IList<DelayedMessage>>(() => \n                _delayedMessages.Where(x => x.ReceiveAt <= time).ToArray());\n\n            if (readyToPlayMessages.Any())\n            {\n                _lock.Write(() => readyToPlayMessages.Each(x => _delayedMessages.Remove(x)));\n            }\n\n            return readyToPlayMessages.Select(x => x.MessageId).ToArray();\n        }\n\n        private class DelayedMessage\n        {\n            public DateTime ReceiveAt;\n            public TIdentifier MessageId;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Envelope.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuCore;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime\n{\n    public class Envelope : HeaderWrapper\n    {\n        public static readonly string OriginalIdKey = \"original-id\";\n        public static readonly string IdKey = \"id\";\n        public static readonly string ParentIdKey = \"parent-id\";\n        public static readonly string ContentTypeKey = HttpResponseHeaders.ContentType;\n        public static readonly string SourceKey = \"source\";\n        public static readonly string ChannelKey = \"channel\";\n        public static readonly string ReplyRequestedKey = \"reply-requested\";\n        public static readonly string ResponseIdKey = \"response\";\n        public static readonly string DestinationKey = \"destination\";\n        public static readonly string ReplyUriKey = \"reply-uri\";\n        public static readonly string ExecutionTimeKey = \"time-to-send\";\n        public static readonly string ReceivedAtKey = \"received-at\";\n        public static readonly string AttemptsKey = \"attempts\";\n        public static readonly string AckRequestedKey = \"ack-requested\";\n        public static readonly string MessageTypeKey = \"message-type\";\n\n        public byte[] Data;\n\n        [NonSerialized]\n        private Lazy<object> _message;\n\n        /// <summary>\n        /// Used internally for logging\n        /// </summary>\n        [NonSerialized] internal ChainExecutionLog Log;\n            \n        public object Message\n        {\n            get { return _message == null ? null : _message.Value; }   \n            set\n            {\n                if (value == null)\n                {\n                    _message = null;\n                }\n                else\n                {\n                    _message = new Lazy<object>(() => value);\n                }\n            }\n        }\n\n        public void UseSerializer(IEnvelopeSerializer serializer)\n        {\n            _message = new Lazy<object>(() => serializer.Deserialize(this));\n        }\n\n\n        [NonSerialized] private IMessageCallback _callback;\n        public int Attempts\n        {\n            get { return Headers.Has(AttemptsKey) ? int.Parse(Headers[AttemptsKey]) : 0; }\n            set { Headers[AttemptsKey] = value.ToString(); }\n        }\n\n        // TODO -- do routing slip tracking later\n\n        public Envelope(IHeaders headers)\n        {\n            Headers = headers;\n\n            if (CorrelationId.IsEmpty())\n            {\n                CorrelationId = Guid.NewGuid().ToString();\n            }\n            \n        }\n\n        public Envelope() : this(new NameValueHeaders())\n        {\n\n        }\n\n        public Envelope(byte[] data, IHeaders headers, IMessageCallback callback) : this(headers)\n        {\n            Data = data;\n            Callback = callback;\n        }\n\n        public IMessageCallback Callback\n        {\n            get { return _callback; }\n            set { _callback = value; }\n        }\n\n        public bool MatchesResponse(object message)\n        {\n            return message.GetType().Name == ReplyRequested;\n        }\n\n        // TODO -- this is where the routing slip is going to come into place\n        \n        public virtual Envelope ForResponse(object message)\n        {\n            var child = ForSend(message);\n\n            if (MatchesResponse(message))\n            {\n                child.Headers[ResponseIdKey] = CorrelationId;\n                child.Destination = ReplyUri;\n            }\n\n            return child;\n        }\n\n        public virtual Envelope ForSend(object message)\n        {\n            var child = new Envelope\n            {\n                Message = message,\n                OriginalId = OriginalId ?? CorrelationId,\n                ParentId = CorrelationId\n            };\n            return child;\n        }\n\n        public override string ToString()\n        {\n            var id = ResponseId.IsNotEmpty()\n                ? \"{0} in response to {1}\".ToFormat(CorrelationId, ResponseId) : CorrelationId;\n\n            if (Message != null)\n            {\n                return string.Format(\"Envelope for message {0} ({1}) w/ Id {2}\", Message, Message.GetType().Name, id);\n            }\n            else\n            {\n                return \"Envelope w/ Id {0}\".ToFormat(id);\n            }\n        }\n\n        public Envelope Clone()\n        {\n            var clone = new Envelope\n            {\n                Message = Message\n            };\n\n            Headers.Keys().Each(key => clone.Headers[key] = Headers[key]);\n\n            return clone;\n        }\n\n        public EnvelopeToken ToToken()\n        {\n            return new EnvelopeToken\n            {\n                Data = Data,\n                Headers = Headers,\n                MessageSource = _message\n            };\n\n            \n        }\n\n        protected bool Equals(Envelope other)\n        {\n            return Equals(Data, other.Data) && Equals(Message, other.Message) && Equals(_callback, other._callback) && Equals(Headers, other.Headers);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((Envelope) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                var hashCode = (Data != null ? Data.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (_message != null ? _message.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (_callback != null ? _callback.GetHashCode() : 0);\n                return hashCode;\n            }\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/EnvelopeModifier.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Runtime\n{\n    public abstract class EnvelopeModifier<T> : IEnvelopeModifier where T : class\n    {\n        public void Modify(Envelope envelope)\n        {\n            var target = envelope.Message as T;\n            if (target != null)\n            {\n                Modify(envelope, target);\n            }\n        }\n\n        public abstract void Modify(Envelope envelope, T target);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/EnvelopeSender.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime\n{\n    public class EnvelopeSender : IEnvelopeSender\n    {\n        private readonly ISubscriptionCache _router;\n        private readonly IEnvelopeSerializer _serializer;\n        private readonly ILogger _logger;\n        private readonly IEnumerable<IEnvelopeModifier> _modifiers;\n\n        public EnvelopeSender(ISubscriptionCache router, IEnvelopeSerializer serializer, ILogger logger, IEnumerable<IEnvelopeModifier> modifiers)\n        {\n            _router = router;\n            _serializer = serializer;\n            _logger = logger;\n            _modifiers = modifiers;\n        }\n\n        public string Send(Envelope envelope)\n        {\n            prepareEnvelopeForSending(envelope);\n\n            var channels = _router.FindDestinationChannels(envelope).ToArray();\n\n            if (!channels.Any())\n            {\n                throw new Exception(\"No channels match this message ({0})\".ToFormat(envelope));\n            }\n\n            channels.Each(x => {\n                try\n                {\n                    sendToChannel(envelope, x);\n                }\n                catch (Exception e)\n                {\n                    _logger.Error(envelope.CorrelationId, \"Failed trying to send message {0} to channel {1}\".ToFormat(envelope, x.Uri), e);\n                    throw;\n                }\n            });\n\n            return envelope.CorrelationId;\n        }\n\n        private void prepareEnvelopeForSending(Envelope envelope)\n        {\n            envelope.Headers[Envelope.MessageTypeKey] = envelope.Message.GetType().FullName;\n\n            _modifiers.Each(x => x.Modify(envelope));\n        }\n\n        public string Send(Envelope envelope, IMessageCallback callback)\n        {\n            prepareEnvelopeForSending(envelope);\n\n            var channels = _router.FindDestinationChannels(envelope).ToArray();\n\n            if (!channels.Any())\n            {\n                throw new Exception(\"No channels match this message ({0})\".ToFormat(envelope));\n            }\n\n            channels\n                .Select(x => x.EnvelopeForSending(envelope, _serializer, envelope.ReplyUri))\n                .Each(callback.Send);\n\n            return envelope.CorrelationId;\n        }\n\n        /*\n         * Changes\n         * 1.) Do serialization within sendToChannel\n         * 2.) do the cloning *outside* of sendToChannel\n         * 3.) Make envelopeserializer smart enough not to replace the contents if it needs to\n         */\n\n        private void sendToChannel(Envelope envelope, ChannelNode node)\n        {\n            var replyUri = _router.ReplyUriFor(node);\n\n            var headers = node.Send(envelope, _serializer, replyUri: replyUri);\n            _logger.InfoMessage(() => new EnvelopeSent(new EnvelopeToken\n            {\n                Headers = headers,\n                Message = envelope.Message\n            }, node));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/EnvelopeToken.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.Runtime.Delayed;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime\n{\n    [Serializable]\n    public class EnvelopeToken : HeaderWrapper\n    {\n        public EnvelopeToken()\n        {\n            Headers = new NameValueHeaders();\n            CorrelationId = Guid.NewGuid().ToString();\n        }\n\n        public byte[] Data;\n        public Lazy<object> MessageSource\n        {\n            set\n            {\n                _message = value;\n            }\n        }\n\n        [NonSerialized]\n        private Lazy<object> _message;\n\n        public object Message\n        {\n            get { return _message == null ? null : _message.Value; }\n            set\n            {\n                _message = new Lazy<object>(() => value);\n            }\n        }\n\n        public bool IsPollingJobRelated()\n        {\n            return Message == null ? false : Message.GetType().Closes(typeof (JobRequest<>));\n        }\n\n        public bool IsDelayedEnvelopePollingJobRelated()\n        {\n            return Message == null ? false : Message.GetType() == typeof(JobRequest<DelayedEnvelopeProcessor>);\n        }\n\n        protected bool Equals(EnvelopeToken other)\n        {\n            return Equals(Data, other.Data) && Equals(Headers, other.Headers);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((EnvelopeToken)obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                var hashCode = (Data != null ? Data.GetHashCode() : 0);\n                hashCode = (hashCode * 397) ^ (_message != null ? _message.GetHashCode() : 0);\n                hashCode = (hashCode * 397) ^ (Headers != null ? Headers.GetHashCode() : 0);\n                return hashCode;\n            }\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"{0} from {1}\", Message, ReplyUri);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/FailureAcknowledgement.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Runtime\n{\n    public class FailureAcknowledgement\n    {\n        public string CorrelationId { get; set; }\n        public string Message { get; set; }\n\n        protected bool Equals(FailureAcknowledgement other)\n        {\n            return string.Equals(CorrelationId, other.CorrelationId) && string.Equals(Message, other.Message);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((FailureAcknowledgement) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((CorrelationId != null ? CorrelationId.GetHashCode() : 0)*397) ^ (Message != null ? Message.GetHashCode() : 0);\n            }\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Failure acknowledgement for {0} / '{1}'\", CorrelationId, Message);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/HeaderWrapper.cs",
    "content": "﻿using System;\nusing System.Globalization;\nusing System.Xml;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime\n{\n    [Serializable]\n    public class HeaderWrapper\n    {\n        public Uri Source\n        {\n            get { return Headers[Envelope.SourceKey].ToUri(); }\n            set { Headers[Envelope.SourceKey] = value == null ? null : value.ToString(); }\n        }\n\n        public Uri ReplyUri\n        {\n            get { return Headers[Envelope.ReplyUriKey].ToUri(); }\n            set { Headers[Envelope.ReplyUriKey] = value == null ? null : value.ToString(); }\n        }\n\n        public string ContentType\n        {\n            get { return Headers[Envelope.ContentTypeKey]; }\n            set { Headers[Envelope.ContentTypeKey] = value; }\n        }\n\n        public string OriginalId\n        {\n            get { return Headers[Envelope.OriginalIdKey]; }\n            set { Headers[Envelope.OriginalIdKey] = value; }\n        }\n\n        public string ParentId\n        {\n            get { return Headers[Envelope.ParentIdKey]; }\n            set { Headers[Envelope.ParentIdKey] = value; }\n        }\n\n        public string ResponseId\n        {\n            get { return Headers[Envelope.ResponseIdKey]; }\n            set { Headers[Envelope.ResponseIdKey] = value; }\n        }\n\n        public Uri Destination\n        {\n            get { return Headers[Envelope.DestinationKey].ToUri(); }\n            set { Headers[Envelope.DestinationKey] = value == null ? null : value.ToString(); }\n        }\n\n        public Uri ReceivedAt\n        {\n            get { return Headers[Envelope.ReceivedAtKey].ToUri(); }\n            set { Headers[Envelope.ReceivedAtKey] = value == null ? null : value.ToString(); }\n        }\n\n        public IHeaders Headers { get; set; }\n\n        public string CorrelationId\n        {\n            get\n            {\n                return Headers[Envelope.IdKey];\n            }\n            set { Headers[Envelope.IdKey] = value; }\n        }\n\n        public string ReplyRequested\n        {\n            get\n            {\n                return Headers[Envelope.ReplyRequestedKey];\n            }\n            set { Headers[Envelope.ReplyRequestedKey] = value; }\n        }\n\n        public bool AckRequested\n        {\n            get { return Headers.Has(Envelope.AckRequestedKey) ? Headers[Envelope.AckRequestedKey].EqualsIgnoreCase(\"true\") : false; }\n            set\n            {\n                if (value)\n                {\n                    Headers[Envelope.AckRequestedKey] = \"true\";\n                }\n                else\n                {\n                    Headers.Remove(Envelope.AckRequestedKey);\n                }\n            }\n        }\n\n        public DateTime? ExecutionTime\n        {\n            get { return Headers.Has(Envelope.ExecutionTimeKey) ? XmlConvert.ToDateTime(Headers[Envelope.ExecutionTimeKey], XmlDateTimeSerializationMode.Utc) : (DateTime?)null; }\n            set\n            {\n                if (value == null)\n                {\n                    Headers.Remove(Envelope.ExecutionTimeKey);\n                }\n                else\n                {\n                    Headers[Envelope.ExecutionTimeKey] = value.Value.ToUniversalTime().ToString(\"yyyy-MM-ddTHH:mm:ss.fffffff\", CultureInfo.InvariantCulture);\n                }\n                \n            }\n        }\n\n        public bool IsDelayed(DateTime utcNow)\n        {\n            if (!Headers.Has(Envelope.ExecutionTimeKey)) return false;\n\n            return ExecutionTime.Value > utcNow;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Headers/DictionaryHeaders.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.Linq;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Headers\n{\n    [Serializable]\n    public class DictionaryHeaders : IHeaders\n    {\n        private readonly IDictionary<string, string> _inner;\n\n        public DictionaryHeaders() : this(new Dictionary<string, string>())\n        {\n        }\n\n        public DictionaryHeaders(IDictionary<string, string> inner)\n        {\n            _inner = inner;\n        }\n\n        public IDictionary<string, string> ToDictionary()\n        {\n            return new Dictionary<string, string>(_inner);\n        }\n\n        public string this[string key]\n        {\n            get { return _inner.ContainsKey(key) ? _inner[key] : null; }\n            set\n            {\n                if (_inner.ContainsKey(key))\n                {\n                    _inner[key] = value;\n                }\n                else\n                {\n                    _inner.Add(key, value);\n                }\n            }\n        }\n\n        public IEnumerable<string> Keys()\n        {\n            return _inner.Keys;\n        }\n\n        public NameValueCollection ToNameValues()\n        {\n            var values = new NameValueCollection();\n            _inner.Each(x => values[x.Key] = x.Value);\n\n            return values;\n        }\n\n        public bool Has(string key)\n        {\n            return _inner.ContainsKey(key);\n        }\n\n        public void Remove(string key)\n        {\n            if (Has(key))\n            {\n                _inner.Remove(key);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Headers/IHeaders.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.Runtime.CompilerServices;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Headers\n{\n    public interface IHeaders\n    {\n        [IndexerName(\"Items\")] // VB.Net guys might wanna use this.  Stranger things have happened\n        string this[string key] { get; set; }\n\n        IEnumerable<string> Keys();\n\n        NameValueCollection ToNameValues();\n\n        IDictionary<string, string> ToDictionary();\n\n        bool Has(string key);\n        void Remove(string key);\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Headers/NameValueHeaders.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.Linq;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Headers\n{\n    [Serializable]\n    public class NameValueHeaders : IHeaders\n    {\n        private readonly NameValueCollection _inner;\n\n        public NameValueHeaders() : this(new NameValueCollection())\n        {\n        }\n\n        public NameValueHeaders(NameValueCollection inner)\n        {\n            _inner = inner;\n        }\n\n        public string this[string key]\n        {\n            get { return _inner[key]; }\n            set { _inner[key] = value; }\n        }\n\n        public IEnumerable<string> Keys()\n        {\n            return _inner.AllKeys;\n        }\n\n        public NameValueCollection ToNameValues()\n        {\n            return _inner;\n        }\n\n        public IDictionary<string, string> ToDictionary()\n        {\n            return _inner.AllKeys.ToArray().ToDictionary(key => key, key => _inner[key]);\n        }\n\n        public bool Has(string key)\n        {\n            return _inner.AllKeys.Contains(key);\n        }\n\n        public void Remove(string key)\n        {\n            if (Has(key))\n            {\n                _inner.Remove(key);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/IChannel.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime\n{\n    public interface IChannel : IDisposable\n    {\n        Uri Address { get; }\n        ReceivingState Receive(IReceiver receiver);\n        void Send(byte[] data, IHeaders headers);\n    }\n\n    public enum ReceivingState\n    {\n        CanContinueReceiving,\n        StopReceiving\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/IEnvelopeModifier.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Runtime\n{\n    public interface IEnvelopeModifier\n    {\n        void Modify(Envelope envelope);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/IEnvelopeSender.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime.Invocation;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime\n{\n    public interface IEnvelopeSender\n    {\n        string Send(Envelope envelope);\n        string Send(Envelope envelope, IMessageCallback callback);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/IReceiver.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime.Headers;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime\n{\n    public interface IReceiver\n    {\n        void Receive(byte[] data, IHeaders headers, IMessageCallback callback);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/ITransport.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime\n{\n    public interface ITransport : IDisposable\n    {\n        void OpenChannels(ChannelGraph graph);\n        string Protocol { get; }\n\n        /// <summary>\n        /// This is mostly for the cases where we have\n        /// to register new channels at runtime through\n        /// dynamic subscriptions or reply channels\n        /// </summary>\n        /// <param name=\"node\"></param>\n        /// <returns></returns>\n        IChannel BuildDestinationChannel(Uri destination);\n\n        IEnumerable<EnvelopeToken> ReplayDelayed(DateTime currentTime);\n\n        void ClearAll();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/Batching/BatchConsumer.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation.Batching\n{\n    public abstract class BatchConsumer<T> where T : IBatchMessage\n    {\n        private readonly IMessageExecutor _executor;\n\n        public BatchConsumer(IMessageExecutor executor)\n        {\n            _executor = executor;\n        }\n\n        public void Handle(T batch)\n        {\n            BatchStart(batch);\n\n            batch.Messages.Each(x => _executor.Execute(x));\n\n            BatchFinish(batch);\n        }\n\n        [NotHandler]\n        public virtual void BatchStart(T batch){}\n\n        [NotHandler]\n        public virtual void BatchFinish(T batch){}\n    }\n\n\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/Batching/BatchMessage.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation.Batching\n{\n    public abstract class BatchMessage : IBatchMessage\n    {\n        private readonly IList<object> _messages = new List<object>();\n\n        public BatchMessage()\n        {\n        }\n\n        public BatchMessage(params object[] messages)\n        {\n            _messages.AddRange(messages);\n        }\n\n        public object[] Messages\n        {\n            get { return _messages.ToArray(); }\n            set\n            {\n                _messages.Clear();\n                _messages.AddRange(value);\n            }\n        }\n\n        public void Add(object message)\n        {\n            if (message == null) throw new ArgumentNullException(\"message\");\n\n            _messages.Add(message);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/Batching/IBatchMessage.cs",
    "content": "namespace FubuMVC.Core.ServiceBus.Runtime.Invocation.Batching\n{\n    public interface IBatchMessage\n    {\n        object[] Messages { get; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/ChainExecutionEnvelopeHandler.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public class ChainExecutionEnvelopeHandler : IEnvelopeHandler\n    {\n        private readonly IChainInvoker _invoker;\n\n        public ChainExecutionEnvelopeHandler(IChainInvoker invoker)\n        {\n            _invoker = invoker;\n        }\n\n        public async Task<IContinuation> Handle(Envelope envelope)\n        {\n            try\n            {\n                var chain = _invoker.FindChain(envelope);\n                if (chain == null)\n                {\n                    return null;\n                }\n\n                return await ExecuteChain(envelope, chain).ConfigureAwait(false);\n\n            }\n            catch (EnvelopeDeserializationException ex)\n            {\n                return new DeserializationFailureContinuation(ex);\n            }\n        }\n\n        public async Task<IContinuation> ExecuteChain(Envelope envelope, HandlerChain chain)\n        {\n            try\n            {\n                var context = await _invoker.ExecuteChain(envelope, chain).ConfigureAwait(false);\n                return context.Continuation ?? new ChainSuccessContinuation(context);\n            }\n            catch (EnvelopeDeserializationException ex)\n            {\n                return new DeserializationFailureContinuation(ex);\n            }\n            catch (Exception ex)\n            {\n                // TODO -- might be nice to capture the Chain\n                return new ChainFailureContinuation(ex);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/ChainExecutionWatcher.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Logging;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public class ChainExecutionWatcher : IDisposable\n    {\n        private readonly ILogger _logger;\n        private readonly HandlerChain _chain;\n        private readonly Envelope _envelope;\n        private readonly Stopwatch _stopwatch = new Stopwatch();\n\n        public ChainExecutionWatcher(ILogger logger, HandlerChain chain, Envelope envelope)\n        {\n            _logger = logger;\n            _chain = chain;\n            _envelope = envelope;\n\n            _logger.DebugMessage(() => new ChainExecutionStarted\n            {\n                ChainId = chain.UniqueId,\n                Envelope = envelope.ToToken()\n            });\n\n            _stopwatch.Start();\n        }\n\n        public void Dispose()\n        {\n            _stopwatch.Stop();\n\n            _logger.DebugMessage(() => new ChainExecutionFinished\n            {\n                ChainId = _chain.UniqueId,\n                ElapsedMilliseconds = _stopwatch.ElapsedMilliseconds,\n                Envelope = _envelope.ToToken()\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/ChainFailureContinuation.cs",
    "content": "﻿using System;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.ServiceBus.Logging;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public class ChainFailureContinuation : IContinuation, DescribesItself\n    {\n        private readonly Exception _exception;\n\n        public ChainFailureContinuation(Exception exception)\n        {\n            _exception = exception;\n        }\n\n        public void Execute(Envelope envelope, IEnvelopeContext context)\n        {\n            context.SendFailureAcknowledgement(envelope, \"Chain execution failed\");\n            envelope.Callback.MarkFailed(_exception);\n            context.InfoMessage(() => new MessageFailed {Envelope = envelope.ToToken(), Exception = _exception});\n            if (envelope.Message == null)\n            {\n                context.Error(envelope.CorrelationId, \"Error trying to execute a message of type \" + envelope.Headers[Envelope.MessageTypeKey], _exception);\n            }\n            else\n            {\n                context.Error(envelope.CorrelationId, envelope.Message.ToString(), _exception);\n            }\n        }\n\n        public Exception Exception\n        {\n            get { return _exception; }\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = \"The chain execution failed for this message\";\n            description.ShortDescription = _exception.GetType().Name;\n            description.LongDescription = Exception.ToString();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/ChainInvoker.cs",
    "content": "﻿using System;\nusing System.Runtime.Serialization;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Runtime.Cascading;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public class ChainInvoker : IChainInvoker\n    {\n        private readonly IServiceFactory _factory;\n        private readonly IChainResolver _chainResolver;\n        private readonly ILogger _logger;\n        private readonly IOutgoingSender _sender;\n        private readonly Func<IHandlerPipeline> _pipeline;\n\n        public ChainInvoker(IServiceFactory factory, IChainResolver chainResolver, ILogger logger, IOutgoingSender sender, Func<IHandlerPipeline> pipeline)\n        {\n            _factory = factory;\n            _chainResolver = chainResolver;\n            _logger = logger;\n            _sender = sender;\n            _pipeline = pipeline;\n        }\n\n        public void Invoke(Envelope envelope)\n        {\n            var chain = FindChain(envelope);\n\n            ExecuteChain(envelope, chain);\n        }\n\n        public void InvokeNow<T>(T message)\n        {\n            var envelope = new Envelope { Message = message };\n            envelope.Callback = new InlineMessageCallback(message, _sender);\n            _pipeline().InvokeNow(envelope);\n        }\n\n        public virtual HandlerChain FindChain(Envelope envelope)\n        {\n            var messageType = envelope.Message.GetType();\n            return _chainResolver.Find(ChainSearch.ByUniqueInputType(messageType, required: false)).As<HandlerChain>();\n        }\n\n\n        public async Task<IInvocationContext> ExecuteChain(Envelope envelope, HandlerChain chain)\n        {\n            if (envelope.Log != null)\n            {\n                envelope.Log.RootChain = chain;\n                envelope.Log.StartSubject(chain);\n            }\n\n            using (new ChainExecutionWatcher(_logger, chain, envelope))\n            {\n                var context = new InvocationContext(envelope, chain);\n                var behavior = _factory.BuildBehavior(context, chain.UniqueId);\n\n                try\n                {\n                    await behavior.Invoke().ConfigureAwait(false);\n                }\n                finally\n                {\n                    (behavior as IDisposable)?.SafeDispose();\n\n                    envelope.Log?.FinishSubject();\n                }\n\n                return context;\n            }\n        }\n    }\n\n    public class InlineMessageCallback : IMessageCallback\n    {\n        private readonly object _message;\n        private readonly IOutgoingSender _sender;\n\n        public InlineMessageCallback(object message, IOutgoingSender sender)\n        {\n            _message = message;\n            _sender = sender;\n        }\n\n        public void MarkSuccessful()\n        {\n        }\n\n        public void MarkFailed(Exception ex)\n        {\n            throw new InlineMessageException(\"Failed while invoking an inline message\", ex);\n        }\n\n        public void MoveToDelayedUntil(DateTime time)\n        {\n            _sender.Send(new Envelope\n            {\n                Message = _message,\n                ExecutionTime = time\n            });\n        }\n\n        public void MoveToErrors(ErrorReport report)\n        {\n            // TODO -- need a general way to log errors against an ITransport\n        }\n\n        public void Requeue()\n        {\n            _sender.Send(new Envelope\n            {\n                Message = _message\n            });\n        }\n\n        public void Send(Envelope envelope)\n        {\n            // nohting\n        }\n\n        public bool SupportsSend { get; } = false;\n    }\n\n    [Serializable]\n    public class InlineMessageException : Exception\n    {\n        public InlineMessageException(string message, Exception innerException) : base(message, innerException)\n        {\n        }\n\n        protected InlineMessageException(SerializationInfo info, StreamingContext context) : base(info, context)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/ChainSuccessContinuation.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Logging;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    [Description(\"The handler chain was successful, dequeues the envelope\")]\n    public class ChainSuccessContinuation : IContinuation\n    {\n        private readonly IInvocationContext _context;\n\n        public ChainSuccessContinuation(IInvocationContext context)\n        {\n            _context = context;\n        }\n\n        public void Execute(Envelope envelope, IEnvelopeContext context)\n        {\n            try\n            {\n                context.SendOutgoingMessages(envelope, _context.OutgoingMessages());\n\n                envelope.Callback.MarkSuccessful();\n\n                var message = new MessageSuccessful { Envelope = envelope.ToToken() };\n                if (!message.Envelope.IsDelayedEnvelopePollingJobRelated())\n                    context.InfoMessage(message);\n            }\n            catch (Exception ex)\n            {\n                context.SendFailureAcknowledgement(envelope, \"Sending cascading message failed: \" + ex.Message);\n                context.Error(envelope.CorrelationId, ex.Message, ex);\n                envelope.Callback.MoveToErrors(new ErrorReport(envelope, ex));\n            }\n        }\n\n        public IInvocationContext Context\n        {\n            get { return _context; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/CompositeContinuation.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing FubuCore;\nusing FubuCore.Descriptions;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public class CompositeContinuation : IContinuation, IEnumerable<IContinuation>, DescribesItself\n    {\n        private readonly IList<IContinuation> _continuations = new List<IContinuation>();\n\n        public CompositeContinuation(params IContinuation[] continuations)\n        {\n            _continuations.AddRange(continuations);\n        }\n\n        public void Execute(Envelope envelope, IEnvelopeContext context)\n        {\n            _continuations.Each(x => {\n                try\n                {\n                    x.Execute(envelope, context);\n                }\n                catch (Exception e)\n                {\n                    context.Error(envelope.CorrelationId, \"Failed trying to run continuation {0} as part of error handling\".ToFormat(x), e);\n                }\n            });\n        }\n\n        public void Add(IContinuation child)\n        {\n            _continuations.Add(child);\n        }\n\n\n        public IEnumerator<IContinuation> GetEnumerator()\n        {\n            return _continuations.GetEnumerator();\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return GetEnumerator();\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = \"Composite Continuation\";\n            description.AddList(\"Continuations\", _continuations);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/DelayedEnvelopeHandler.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing FubuCore.Dates;\nusing FubuMVC.Core.ServiceBus.Runtime.Delayed;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    [Description(\"DelayedResponse Message Handler\")]\n    public class DelayedEnvelopeHandler : SimpleEnvelopeHandler\n    {\n        private readonly ISystemTime _systemTime;\n\n        public DelayedEnvelopeHandler(ISystemTime systemTime)\n        {\n            _systemTime = systemTime;\n        }\n\n        public override bool Matches(Envelope envelope)\n        {\n            return envelope.IsDelayed(_systemTime.UtcNow());\n        }\n\n        public override void Execute(Envelope envelope, IEnvelopeContext context)\n        {\n            try\n            {\n                envelope.Callback.MoveToDelayedUntil(envelope.ExecutionTime.Value);\n                context.InfoMessage(() => new DelayedEnvelopeReceived { Envelope = envelope.ToToken() });\n            }\n            catch (Exception e)\n            {\n                envelope.Callback.MarkFailed(e);\n                context.Error(envelope.CorrelationId, \"Failed to move delayed message to the delayed message queue\", e);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/DeserializationFailureContinuation.cs",
    "content": "﻿using System.ComponentModel;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    [Description(\"Automatically moves the message to the error queue\")]\n    public class DeserializationFailureContinuation : IContinuation\n    {\n        private readonly EnvelopeDeserializationException _exception;\n\n        public DeserializationFailureContinuation(EnvelopeDeserializationException exception)\n        {\n            _exception = exception;\n        }\n\n        public EnvelopeDeserializationException Exception\n        {\n            get { return _exception; }\n        }\n\n        public void Execute(Envelope envelope, IEnvelopeContext context)\n        {\n            envelope.Message = null; // Prevent the error from throwing again.\n            context.SendFailureAcknowledgement(envelope, \"Deserialization failed\");\n            context.Error(envelope.CorrelationId, _exception.Message, _exception);\n            envelope.Callback.MoveToErrors(new ErrorReport(envelope, _exception));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/EnvelopeContext.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.Dates;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Runtime.Cascading;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public class EnvelopeContext : IEnvelopeContext\n    {\n        private readonly ISystemTime _systemTime;\n        private readonly IChainInvoker _invoker;\n        private readonly IHandlerPipeline _pipeline;\n\n        public EnvelopeContext(ILogger logger, ISystemTime systemTime, IChainInvoker invoker, IOutgoingSender outgoing, IHandlerPipeline pipeline)\n        {\n            this.logger = logger;\n            _systemTime = systemTime;\n            _invoker = invoker;\n            Outgoing = outgoing;\n            _pipeline = pipeline;\n        }\n\n        protected IOutgoingSender Outgoing { get; }\n\n        public void SendOutgoingMessages(Envelope original, IEnumerable<object> cascadingMessages)\n        {\n            var doNowActions = cascadingMessages.OfType<IImmediateContinuation>().SelectMany(x => x.Actions());\n            var cascading = cascadingMessages.Where(x => !(x is IImmediateContinuation));\n\n            Outgoing.SendOutgoingMessages(original, cascading);\n\n            doNowActions.Each(message => {\n                try\n                {\n                    _invoker.InvokeNow(message);\n                }\n                catch (Exception e)\n                {\n                    logger.Error(\"Failed while trying to invoke a cascading message:\\n\" + message.ToString(), e);\n                }\n            });\n        }\n\n        protected ILogger logger { get; }\n\n        public void SendFailureAcknowledgement(Envelope original, string message)\n        {\n            Outgoing.SendFailureAcknowledgement(original, message);\n        }\n\n        public ISystemTime SystemTime\n        {\n            get { return _systemTime; }\n        }\n\n        public virtual void InfoMessage<T>(Func<T> func) where T : class, LogTopic\n        {\n            logger.InfoMessage(func);\n        }\n\n        public virtual void DebugMessage<T>(Func<T> func) where T : class, LogTopic\n        {\n            logger.DebugMessage(func);\n        }\n\n        public virtual void InfoMessage<T>(T message) where T : LogTopic\n        {\n            logger.InfoMessage(message);\n        }\n\n        public virtual void Error(string correlationId, string message, Exception exception)\n        {\n            logger.Error(correlationId, message, exception);\n        }\n\n        public void Retry(Envelope envelope)\n        {\n            _pipeline.Invoke(envelope, this);\n        }\n\n        public virtual void Dispose()\n        {\n            // Nothing\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/EnvelopeLifecycle.cs",
    "content": "using StructureMap;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public class EnvelopeLifecycle<T> : IEnvelopeLifecycle where T : IEnvelopeContext\n    {\n        private readonly IContainer _container;\n\n        // I don't care that this code is StructureMap specific right now\n        // we'll deal w/ this later\n        public EnvelopeLifecycle(IContainer container)\n        {\n            _container = container;\n        }\n\n        public IEnvelopeContext StartNew(IHandlerPipeline pipeline, Envelope envelope)\n        {\n            return _container.With(pipeline).With(envelope).GetInstance<T>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/HandlerPipeline.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public class HandlerPipeline : IHandlerPipeline\n    {\n        private readonly IEnvelopeSerializer _serializer;\n        private readonly IEnvelopeLifecycle _lifecycle;\n        private readonly IList<IEnvelopeHandler> _handlers = new List<IEnvelopeHandler>();\n\n        public HandlerPipeline(IEnvelopeSerializer serializer, IEnvelopeLifecycle lifecycle, IEnumerable<IEnvelopeHandler> handlers)\n        {\n            _serializer = serializer;\n            _lifecycle = lifecycle;\n            _handlers.AddRange(handlers);\n        }\n\n        public IList<IEnvelopeHandler> Handlers => _handlers;\n\n        // virtual for testing as usual\n        public virtual async Task<IContinuation> FindContinuation(Envelope envelope, IEnvelopeContext context)\n        {\n            foreach (var handler in _handlers)\n            {\n                var continuation = await handler.Handle(envelope).ConfigureAwait(false);\n                if (continuation != null)\n                {\n                    context.DebugMessage(() => new EnvelopeContinuationChosen\n                    {   \n                        ContinuationType = continuation.GetType(),\n                        HandlerType = handler.GetType(),\n                        Envelope = envelope.ToToken()\n                    });\n\n                    return continuation;\n                }\n            }\n\n            // TODO - add rules for what to do when we have no handler\n            context.DebugMessage(() => new EnvelopeContinuationChosen\n            {\n                ContinuationType = typeof(MoveToErrorQueue),\n                HandlerType = typeof(HandlerPipeline),\n                Envelope = envelope.ToToken()\n            });\n\n            return new MoveToErrorQueue(new NoHandlerException(envelope.Message.GetType()));\n        }\n\n        public virtual async Task Invoke(Envelope envelope, IEnvelopeContext context)\n        {\n            envelope.Attempts++; // needs to be done here.\n            IContinuation continuation = null;\n\n            try\n            {\n                continuation = await FindContinuation(envelope, context).ConfigureAwait(false);\n                continuation.Execute(envelope, context);\n            }\n            catch (EnvelopeDeserializationException ex)\n            {\n                new DeserializationFailureContinuation(ex).Execute(envelope, context);\n            }\n            catch (AggregateException e)\n            {\n                e.Flatten().InnerExceptions.Each(ex =>\n                {\n                    envelope.Callback.MarkFailed(e);\n                    var message = \"Failed while invoking message {0} with continuation {1}\".ToFormat(envelope.Message ?? envelope,\n                        (object)continuation ?? \"could not find continuation\");\n\n                    context.Error(envelope.CorrelationId, message, e);\n                });\n            }\n            catch (Exception e)\n            {\n                envelope.Callback.MarkFailed(e); // TODO -- watch this one.\n                var message = \"Failed while invoking message {0} with continuation {1}\".ToFormat(envelope.Message ?? envelope,\n                    (object)continuation ?? \"could not find continuation\");\n                context.Error(envelope.CorrelationId, message, e);\n            }\n        }\n\n        public async Task Receive(Envelope envelope)\n        {\n            envelope.UseSerializer(_serializer);\n            using (var context = _lifecycle.StartNew(this, envelope))\n            {\n                context.InfoMessage(() => new EnvelopeReceived { Envelope = envelope.ToToken() });\n\n                // TODO -- this needs to change in all likelihood\n                await Invoke(envelope, context).ConfigureAwait(false);\n            }\n\n\n        }\n\n        public async Task InvokeNow(Envelope envelope)\n        {\n            using (var context = _lifecycle.StartNew(this, envelope))\n            {\n                await Invoke(envelope, context).ConfigureAwait(false);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/IChainInvoker.cs",
    "content": "﻿using System.Threading.Tasks;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public interface IChainInvoker\n    {\n        void Invoke(Envelope envelope);\n        void InvokeNow<T>(T message);\n        Task<IInvocationContext> ExecuteChain(Envelope envelope, HandlerChain chain);\n        HandlerChain FindChain(Envelope envelope);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/IContinuation.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public interface IContinuation\n    {\n        void Execute(Envelope envelope, IEnvelopeContext context);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/IEnvelopeContext.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuCore.Dates;\nusing FubuCore.Logging;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public interface IEnvelopeContext : IDisposable\n    {\n        void SendOutgoingMessages(Envelope original, IEnumerable<object> cascadingMessages);\n        void SendFailureAcknowledgement(Envelope original, string message);\n        ISystemTime SystemTime { get; }\n        void InfoMessage<T>(Func<T> func) where T : class, LogTopic;\n        void DebugMessage<T>(Func<T> func) where T : class, LogTopic;\n        void InfoMessage<T>(T message) where T : LogTopic;\n\n        void Error(string correlationId, string message, Exception exception);\n        void Retry(Envelope envelope);\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/IEnvelopeHandler.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public interface IEnvelopeHandler\n    {\n        Task<IContinuation> Handle(Envelope envelope);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/IEnvelopeLifecycle.cs",
    "content": "namespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public interface IEnvelopeLifecycle\n    {\n        IEnvelopeContext StartNew(IHandlerPipeline pipeline, Envelope envelope);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/IHandlerPipeline.cs",
    "content": "﻿using System.Threading.Tasks;\nusing FubuCore.Logging;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public interface IHandlerPipeline\n    {\n        Task Invoke(Envelope envelope, IEnvelopeContext context);\n        Task Receive(Envelope envelope);\n        Task InvokeNow(Envelope envelope);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/IInvocationContext.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    /// <summary>\n    /// Models a queue of outgoing messages as a result of the current message so you don't even try to \n    /// send replies until the original message succeeds\n    /// Plus giving you the ability to set the correlation identifiers\n    /// </summary>\n    public interface IInvocationContext\n    {\n        /// <summary>\n        /// Register a message to be sent via the service bus\n        /// as a result of the current message succeeding\n        /// </summary>\n        /// <param name=\"message\"></param>\n        void EnqueueCascading(object message);\n\n        IEnumerable<object> OutgoingMessages();\n        Envelope Envelope { get; }\n\n        IContinuation Continuation { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/IMessageCallback.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public interface IMessageCallback\n    {\n        void MarkSuccessful();\n        void MarkFailed(Exception ex);\n\n        void MoveToDelayedUntil(DateTime time);\n        void MoveToErrors(ErrorReport report);\n        void Requeue();\n        void Send(Envelope envelope);\n\n        bool SupportsSend { get; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/IMessageExecutor.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    /// <summary>\n    /// Executes the handler chains for a message in context\n    /// with the current message\n    /// </summary>\n    public interface IMessageExecutor\n    {\n        /// <summary>\n        /// Consumes and executes the message within the same\n        /// request and transaction context as the currently\n        /// Executing handler. Throws exception if no consumer\n        /// found.\n        /// </summary>\n        /// <param name=\"message\"></param>\n        void Execute(object message);\n\n        /// <summary>\n        /// Consumes and executes the message within the same\n        /// request and transaction context as the currently\n        /// Executing handler for messages with a consumer;\n        /// when no consumer is found, the onNoConsumer\n        /// action is executed\n        /// </summary>\n        /// <param name=\"message\"></param>\n        /// <param name=\"onNoConsumer\"></param>\n        /// <returns>Returns true if consumer was found, false\n        /// if no consumer found</returns>\n        bool TryExecute(object message, Action<object> onNoConsumer);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/InvocationContext.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public class InvocationContext : TypeArguments, IInvocationContext\n    {\n        private static readonly IDictionary<string, object> _emptyDictionary = new Dictionary<string, object>();\n\n        private readonly IList<object> _messages = new List<object>();\n\n        public InvocationContext(Envelope envelope, HandlerChain chain)\n        {\n            if (envelope == null) throw new ArgumentNullException(nameof(envelope));\n\n            if (envelope.Log != null)\n            {\n                Set(typeof(IChainExecutionLog), envelope.Log);\n            }\n\n            var currentChain = new CurrentChain(chain, _emptyDictionary);\n            Set(typeof(ICurrentChain), currentChain);\n            \n            Envelope = envelope;\n            var inputType = envelope.Message.GetType();\n            var request = new InMemoryFubuRequest();\n            request.Set(inputType, Envelope.Message);\n            \n            Set(typeof(IFubuRequest), request);\n            Set(typeof(IInvocationContext), this);\n            Set(typeof(Envelope), envelope);\n        }\n\n        public Envelope Envelope { get; }\n\n        public IContinuation Continuation { get; set; }\n\n        public void EnqueueCascading(object message)\n        {\n            if (message == null) return;\n\n            var enumerable = message as IEnumerable<object>;\n            if (enumerable == null)\n            {\n                _messages.Add(message);\n            }\n            else\n            {\n                _messages.AddRange(enumerable);\n            }\n        }\n\n        public IEnumerable<object> OutgoingMessages()\n        {\n            return _messages;\n        }\n\n        protected bool Equals(InvocationContext other)\n        {\n            return Equals(Envelope, other.Envelope);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((InvocationContext) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Envelope != null ? Envelope.GetHashCode() : 0);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/MessageExecutor.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.Services.Messaging.Tracking;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    // Tested only through integration tests\n    public class MessageExecutor : IMessageExecutor\n    {\n        private readonly IPartialFactory _factory;\n        private readonly IFubuRequest _request;\n        private readonly IChainResolver _resolver;\n        private readonly ILogger _logger;\n        private readonly Envelope _envelope;\n\n        public MessageExecutor(IPartialFactory factory, IFubuRequest request, IChainResolver resolver, ILogger logger, Envelope envelope)\n        {\n            _factory = factory;\n            _request = request;\n            _resolver = resolver;\n            _logger = logger;\n            _envelope = envelope;\n        }\n\n        public bool TryExecute(object message, Action<object> onNoConsumer)\n        {\n            var inputType = message.GetType();\n\n            var chain = _resolver.FindUniqueByType(inputType);\n\n            if (chain == null)\n            {\n                if (onNoConsumer != null) onNoConsumer(message);\n                return false;\n            }\n\n            Execute(message);\n            return true;\n        }\n\n        public virtual void Execute(object message)\n        {\n            var inputType = message.GetType();\n            _request.Set(inputType, message);\n\n            var chain = _resolver.FindUniqueByType(inputType);\n\n            if (chain == null)\n            {\n                throw new NoHandlerException(inputType);\n            }\n\n            try\n            {\n                _factory.BuildPartial(chain).InvokePartial();\n                _logger.DebugMessage(() => new InlineMessageProcessed\n                {\n                    Envelope = _envelope,\n                    Message = message\n                });\n            }\n            catch (Exception e)\n            {\n                _logger.Error(_envelope.CorrelationId, \"Failed processing inline message \" + message, e);\n                throw;\n            }\n\n            _request.Clear(inputType);\n        }\n    }\n\n    public class InlineMessageProcessed : MessageLogRecord\n    {\n        public object Message { get; set; }\n        public Envelope Envelope { get; set; }\n        public override MessageRecord ToRecord()\n        {\n            return new MessageRecord()\n            {\n                Message = \"Inline message processed: \" + Message,\n                Id = Envelope.CorrelationId,\n                ParentId = Envelope.ParentId,\n                Headers = \"{0}={1}\".ToFormat(Envelope.MessageTypeKey, Message.GetType().FullName)\n            };\n        }\n\n        public override MessageTrack ToMessageTrack()\n        {\n            return null;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/NoHandlerException.cs",
    "content": "﻿using System;\nusing System.Runtime.Serialization;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    [Serializable]\n    public class NoHandlerException : Exception\n    {\n        public NoHandlerException(Type messageType)\n            : base(\"No registered handler for message type \" + messageType.FullName)\n        {\n        }\n\n        protected NoHandlerException(SerializationInfo info, StreamingContext context) : base(info, context)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/NoSubscriberHandler.cs",
    "content": "﻿using System.ComponentModel;\nusing FubuMVC.Core.ServiceBus.Logging;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    [Description(\"Policies for handling messages that have no registered handlers\")]\n    public class NoSubscriberHandler : SimpleEnvelopeHandler\n    {\n        public override bool Matches(Envelope envelope)\n        {\n            return true;\n        }\n\n        public override void Execute(Envelope envelope, IEnvelopeContext context)\n        {\n            context.SendFailureAcknowledgement(envelope, \"No subscriber\");\n            envelope.Callback.MarkSuccessful();\n            context.InfoMessage(() => new NoHandlerForMessage{Envelope = envelope.ToToken()});\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/ProductionDiagnosticEnvelopeContext.cs",
    "content": "using System;\nusing FubuCore.Dates;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.ServiceBus.Runtime.Cascading;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public class ProductionDiagnosticEnvelopeContext : EnvelopeContext\n    {\n        private readonly Envelope _envelope;\n        private readonly IExecutionLogger _executionLogger;\n        protected readonly ChainExecutionLog _log;\n\n        public ProductionDiagnosticEnvelopeContext(ILogger logger, ISystemTime systemTime, IChainInvoker invoker, IOutgoingSender outgoing, IHandlerPipeline pipeline, Envelope envelope, IExecutionLogger executionLogger) : base(logger, systemTime, invoker, outgoing, pipeline)\n        {\n            _envelope = envelope;\n            _executionLogger = executionLogger;\n            _log = new ChainExecutionLog();\n\n            _envelope.Log = _log;\n        }\n\n        public sealed override void Dispose()\n        {\n            _log.MarkFinished();\n            _executionLogger.Record(_log, _envelope);\n        }\n\n        public sealed override void Error(string correlationId, string message, Exception exception)\n        {\n            _log.LogException(exception);\n            base.Error(correlationId, message, exception);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/ResponseEnvelopeHandler.cs",
    "content": "﻿using System.ComponentModel;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Logging;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    [Description(\"Publishes the response to the Event Aggregator and removes the message from the queue\")]\n    public class ResponseEnvelopeHandler : SimpleEnvelopeHandler\n    {\n        public override bool Matches(Envelope envelope)\n        {\n            return envelope.ResponseId.IsNotEmpty();\n        }\n\n        public override void Execute(Envelope envelope, IEnvelopeContext context)\n        {\n            context.InfoMessage(() => new MessageSuccessful { Envelope = envelope.ToToken() });\n            envelope.Callback.MarkSuccessful();\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/SimpleEnvelopeHandler.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public abstract class SimpleEnvelopeHandler : IEnvelopeHandler, IContinuation\n    {\n        public Task<IContinuation> Handle(Envelope envelope)\n        {\n            return Matches(envelope) ? Task.FromResult<IContinuation>(this) : Task.FromResult<IContinuation>(null);\n        }\n\n        public abstract bool Matches(Envelope envelope);\n\n        public abstract void Execute(Envelope envelope, IEnvelopeContext context);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Invocation/VerboseDiagnosticEnvelopeContext.cs",
    "content": "using System;\nusing FubuCore.Dates;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.ServiceBus.Runtime.Cascading;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Invocation\n{\n    public class VerboseDiagnosticEnvelopeContext : ProductionDiagnosticEnvelopeContext\n    {\n        public VerboseDiagnosticEnvelopeContext(ILogger logger, ISystemTime systemTime, IChainInvoker invoker, IOutgoingSender outgoing, IHandlerPipeline pipeline, Envelope envelope, IExecutionLogger executionLogger) : base(logger, systemTime, invoker, outgoing, pipeline, envelope, executionLogger)\n        {\n        }\n\n        public override void InfoMessage<T>(Func<T> func)\n        {\n            var message = func();\n            _log.Log(message);\n            logger.InfoMessage(message);\n        }\n\n        public override void DebugMessage<T>(Func<T> func)\n        {\n            var message = func();\n            _log.Log(message);\n            logger.DebugMessage(message);\n        }\n\n        public override void InfoMessage<T>(T message)\n        {\n            _log.Log(message);\n            base.InfoMessage(message);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Receiver.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime\n{\n    public class Receiver : IReceiver\n    {\n        private readonly IHandlerPipeline _pipeline;\n        private readonly ChannelGraph _graph;\n        private readonly ChannelNode _node;\n        private readonly Uri _address;\n\n        public Receiver(IHandlerPipeline pipeline, ChannelGraph graph, ChannelNode node)\n        {\n            _pipeline = pipeline;\n            _graph = graph;\n            _node = node;\n            _address = node.Channel.Address;\n        }\n\n        public void Receive(byte[] data, IHeaders headers, IMessageCallback callback)\n        {\n            if (data == null) throw new ArgumentNullException(\"data\");\n            if (headers == null) throw new ArgumentNullException(\"headers\");\n            if (callback == null) throw new ArgumentNullException(\"callback\");\n\n            var envelope = new Envelope(data, headers, callback)\n            {\n                ReceivedAt = _address\n            };\n\n            envelope.ContentType = envelope.ContentType ?? _node.DefaultContentType ?? _graph.DefaultContentType;\n            \n            _pipeline.Receive(envelope);\n        }\n\n        protected bool Equals(Receiver other)\n        {\n            return Equals(_pipeline, other._pipeline) && Equals(_graph, other._graph) && Equals(_node, other._node);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((Receiver) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                var hashCode = (_pipeline != null ? _pipeline.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (_graph != null ? _graph.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (_node != null ? _node.GetHashCode() : 0);\n                return hashCode;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/ReplyListener.cs",
    "content": "﻿using System;\nusing System.Runtime.Serialization;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.ServiceBus.Events;\nusing FubuMVC.Core.ServiceBus.Logging;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime\n{\n    public class ReplyListener<T> : IListener<EnvelopeReceived>,IExpiringListener\n    {\n        private readonly IEventAggregator _events;\n        private readonly TaskCompletionSource<T> _completion;\n        private readonly string _originalId;\n        private Task _timeout;\n\n        public ReplyListener(IEventAggregator events, string originalId, TimeSpan timeout)\n        {\n            _events = events;\n            _completion = new TaskCompletionSource<T>();\n            ExpiresAt = DateTime.UtcNow.Add(timeout);\n            _originalId = originalId;\n\n            var listener = this;\n\n            _timeout = Task.Delay(timeout).ContinueWith(t => {\n                if (!_completion.Task.IsCompleted && !_completion.Task.IsFaulted)\n                {\n                    _completion.SetException(new TimeoutException());\n                }\n            });\n\n            _completion.Task.ContinueWith(x => _events.RemoveListener(listener));\n        }\n\n        public Task<T> Completion\n        {\n            get { return _completion.Task; }\n        }\n\n        public void Handle(EnvelopeReceived message)\n        {\n            if (Matches(message.Envelope))\n            {\n                _completion.SetResult((T) message.Envelope.Message);\n                _events.RemoveListener(this);\n\n                IsExpired = true;\n            }\n\n            var ack = message.Envelope.Message as FailureAcknowledgement;\n            if (ack != null && ack.CorrelationId == _originalId)\n            {\n                _completion.SetException(new ReplyFailureException(ack.Message));\n                _events.RemoveListener(this);\n\n                IsExpired = true;\n            }\n        }\n\n        public bool Matches(EnvelopeToken envelope)\n        {\n            return envelope.Message is T && envelope.ResponseId == _originalId;\n        }\n\n        protected bool Equals(ReplyListener<T> other)\n        {\n            return string.Equals(_originalId, other._originalId);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((ReplyListener<T>) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (_originalId != null ? _originalId.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Reply watcher for {0} with Id {1}\",typeof(T).FullName, _originalId);\n        }\n\n        public bool IsExpired { get; private set; }\n        public DateTime? ExpiresAt { get; private set; }\n    }\n\n    [Serializable]\n    public class ReplyFailureException : Exception\n    {\n        public ReplyFailureException(string message) : base(message)\n        {\n        }\n\n        protected ReplyFailureException(SerializationInfo info, StreamingContext context) : base(info, context)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Routing/AssemblyRule.cs",
    "content": "using System;\nusing System.Reflection;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Routing\n{\n    public class AssemblyRule : IRoutingRule\n    {\n        private readonly Assembly _assembly;\n\n        public AssemblyRule(Assembly assembly)\n        {\n            _assembly = assembly;\n        }\n\n        public bool Matches(Type type)\n        {\n            return _assembly.Equals(type.Assembly);\n        }\n\n        public string Describe()\n        {\n            return \"Messages in Assembly \" + _assembly.GetName().Name;\n        }\n\n        public static AssemblyRule For<T>()\n        {\n            return new AssemblyRule(typeof(T).Assembly);\n        }\n\n        protected bool Equals(AssemblyRule other)\n        {\n            return Equals(_assembly, other._assembly);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((AssemblyRule) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (_assembly != null ? _assembly.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Contained in assembly {0}\", _assembly.GetName().Name);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Routing/IRoutingRule.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Routing\n{\n    public interface IRoutingRule\n    {\n        bool Matches(Type type);\n        string Describe();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Routing/LambdaRoutingRule.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Routing\n{\n    public class LambdaRoutingRule : IRoutingRule\n    {\n        private readonly Func<Type, bool> _filter;\n        private readonly Expression<Func<Type, bool>> _expression;\n\n        public LambdaRoutingRule(Expression<Func<Type, bool>> filter)\n        {\n            _filter = filter.Compile();\n            _expression = filter;\n        }\n\n        public bool Matches(Type type)\n        {\n            return _filter(type);\n        }\n\n        public string Describe()\n        {\n            return \"Messages matching \" + _expression.ToString();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Routing/NamespaceRule.cs",
    "content": "using System;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Routing\n{\n    public class NamespaceRule : IRoutingRule\n    {\n        private readonly string _ns;\n\n        public NamespaceRule(string @namespace)\n        {\n            _ns = @namespace;\n        }\n\n        public bool Matches(Type type)\n        {\n            return type.IsInNamespace(_ns);\n        }\n\n        public string Describe()\n        {\n            return \"Messages from namespace \" + _ns;\n        }\n\n        public static NamespaceRule For<T>()\n        {\n            return new NamespaceRule(typeof(T).Namespace);\n        }\n\n        protected bool Equals(NamespaceRule other)\n        {\n            return string.Equals(_ns, other._ns);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((NamespaceRule) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (_ns != null ? _ns.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Contained in namespace {0}\", _ns);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Routing/SingleTypeRoutingRule.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Routing\n{\n    public class SingleTypeRoutingRule<T> : IRoutingRule\n    {\n        public bool Matches(Type type)\n        {\n            return type == typeof (T);\n        }\n\n        public string Describe()\n        {\n            return typeof(T).Name;\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Serializers/BasicJsonMessageSerializer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing FubuCore;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Serializers\n{\n    /// <summary>\n    /// Low performance Json serializer strictly for Testing!  \n    /// </summary>\n    public class BasicJsonMessageSerializer : IMessageSerializer\n    {\n        public void Serialize(object message, Stream stream)\n        {\n            var json = JsonUtil.ToJson(message);\n            var dictionary = JsonUtil.Get(json).As<IDictionary<string, object>>();\n            dictionary.Add(\"_type_\", message.GetType().AssemblyQualifiedName);\n\n            var writer = new StreamWriter(stream);\n            writer.Write(JsonUtil.ToJson(dictionary));\n            writer.Flush();\n        }\n\n        public object Deserialize(Stream message)\n        {\n            var reader = new StreamReader(message);\n            var json = reader.ReadToEnd();\n            var dictionary = JsonUtil.Get(json).As<IDictionary<string,object>>();\n            var type = Type.GetType((string) dictionary[\"_type_\"]);\n\n\n            var invoker = typeof (Invoker<>).CloseAndBuildAs<IInvoker>(type);\n            return invoker.Invoke(json);\n        }\n\n        public interface IInvoker\n        {\n            object Invoke(string json);\n        }\n\n        public class Invoker<T> : IInvoker\n        {\n            public object Invoke(string json)\n            {\n                return JsonUtil.Get<T>(json);\n            }\n        }\n\n        public string ContentType\n        {\n            get { return \"application/json\"; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Serializers/BinarySerializer.cs",
    "content": "﻿using System.IO;\nusing System.Runtime.Serialization.Formatters.Binary;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Serializers\n{\n    public class BinarySerializer : IMessageSerializer\n    {\n        public void Serialize(object message, Stream stream)\n        {\n            var serializer = new BinaryFormatter();\n            serializer.Serialize(stream, message);\n        }\n\n        public object Deserialize(Stream message)\n        {\n            return new BinaryFormatter().Deserialize(message);\n        }\n\n        public string ContentType\n        {\n            get { return \"binary/octet-stream\"; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Serializers/EnvelopeDeserializationException.cs",
    "content": "﻿using System;\nusing System.Runtime.Serialization;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Serializers\n{\n    [Serializable]\n    public class EnvelopeDeserializationException : Exception\n    {\n        public EnvelopeDeserializationException(string message) : base(message)\n        {\n        }\n\n        public EnvelopeDeserializationException(string message, Exception innerException) : base(message, innerException)\n        {\n        }\n\n        public EnvelopeDeserializationException(SerializationInfo info, StreamingContext context) : base(info, context)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Serializers/EnvelopeSerializer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Serializers\n{\n    public interface IEnvelopeSerializer\n    {\n        object Deserialize(Envelope envelope);\n        void Serialize(Envelope envelope, ChannelNode node);\n    }\n\n    public class EnvelopeSerializer : IEnvelopeSerializer\n    {\n        private readonly ChannelGraph _graph;\n        private readonly IEnumerable<IMessageSerializer> _serializers;\n\n        public EnvelopeSerializer(ChannelGraph graph, IEnumerable<IMessageSerializer> serializers)\n        {\n            _graph = graph;\n            _serializers = serializers;\n        }\n\n        // TODO -- take in ChannelNode here!\n        public object Deserialize(Envelope envelope)\n        {\n            if (envelope.Data == null) throw new EnvelopeDeserializationException(\"No data on this envelope to deserialize\");\n\n\n            var serializer = SelectSerializer(envelope, null);\n            \n            using (var stream = new MemoryStream(envelope.Data))\n            {\n                try\n                {\n                    return serializer.Deserialize(stream);\n                }\n                catch (Exception ex)\n                {\n                    throw new EnvelopeDeserializationException(\"Message serializer has failed\", ex);\n                }\n            }\n        }\n\n        private IMessageSerializer findSerializer(string contentType)\n        {\n            var serializer = _serializers.FirstOrDefault(x => x.ContentType.EqualsIgnoreCase(contentType));\n\n\n            if (serializer == null)\n            {\n                throw new EnvelopeDeserializationException(\"Unknown content-type '{0}'\".ToFormat(contentType));\n            }\n\n            return serializer;\n        }\n\n        public IMessageSerializer SelectSerializer(Envelope envelope, ChannelNode node)\n        {\n            if (envelope.ContentType.IsNotEmpty())\n            {\n                return findSerializer(envelope.ContentType);\n            }\n\n            if (node.DefaultSerializer != null)\n            {\n                return node.DefaultSerializer;\n            }\n\n            if (node.DefaultContentType.IsNotEmpty())\n            {\n                return findSerializer(node.DefaultContentType);\n            }\n\n            return findSerializer(_graph.DefaultContentType);\n        }\n\n        public void Serialize(Envelope envelope, ChannelNode node)\n        {\n            if (envelope.Message == null) throw new InvalidOperationException(\"No message on this envelope to serialize\");\n\n            var serializer = SelectSerializer(envelope, node);\n            if (envelope.ContentType.IsEmpty())\n            {\n                envelope.ContentType = serializer.ContentType;\n            }\n\n            using (var stream = new MemoryStream())\n            {\n                serializer.Serialize(envelope.Message, stream);\n                stream.Position = 0;\n\n                envelope.Data = stream.ReadAllBytes();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Serializers/IMessageSerializer.cs",
    "content": "﻿using System.IO;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Serializers\n{\n    public interface IMessageSerializer\n    {\n        void Serialize(object message, Stream stream);\n        object Deserialize(Stream message);\n\n        // TODO -- might need to change this to multiple mimetypes just like Conneg\n        string ContentType { get; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Serializers/JsonMessageSerializer.cs",
    "content": "﻿using System.IO;\nusing Newtonsoft.Json;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Serializers\n{\n    public class JsonMessageSerializer : IMessageSerializer\n    {\n        private readonly JsonSerializer _serializer;\n\n        public JsonMessageSerializer(TransportSettings settings)\n        {\n            _serializer = JsonSerializer.Create(settings.JsonMessageSerializerSettings);\n        }\n\n        public void Serialize(object message, Stream stream)\n        {\n            var writer = new StreamWriter(stream);\n            _serializer.Serialize(writer, message);\n            writer.Flush();\n        }\n\n        public object Deserialize(Stream message)\n        {\n            var reader = new JsonTextReader(new StreamReader(message));\n            return _serializer.Deserialize(reader);\n        }\n\n        public string ContentType\n        {\n            get { return \"application/json\"; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/Serializers/XmlMessageSerializer.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing System.Runtime.Serialization;\nusing System.Text;\nusing System.Xml;\nusing System.Xml.Linq;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime.Serializers\n{\n    //TODO: This needs a fair amount of rework with semantic model from registry to feed in\n    //the various serialization behaviors\n    public class XmlMessageSerializer : IMessageSerializer\n    {\n        private readonly Reflection reflection;\n\n        public XmlMessageSerializer()\n        {\n            reflection = new Reflection();\n        }\n\n        public void Serialize(object message, Stream messageStream)\n        {\n            var messages = message as object[] ?? new object[] {message};\n\n            var namespaces = GetNamespaces(message);\n            var messagesElement = new XElement(namespaces[\"esb\"] + \"messages\");\n            var xml = new XDocument(messagesElement);\n\n            foreach (var m in messages)\n            {\n                if (m == null)\n                    continue;\n\n                try\n                {\n                    WriteObject(reflection.GetNameForXml(m.GetType()), m, messagesElement, namespaces);\n                }\n                catch (Exception e)\n                {\n                    throw new SerializationException(\"Could not serialize \" + m.GetType() + \".\", e);\n                }\n            }\n\n            messagesElement.Add(\n                namespaces.Select(x => new XAttribute(XNamespace.Xmlns + x.Key, x.Value))\n                );\n\n            var streamWriter = new StreamWriter(messageStream);\n            var writer = XmlWriter.Create(streamWriter, new XmlWriterSettings\n            {\n                Indent = true,\n                Encoding = Encoding.UTF8\n            });\n            if (writer == null)\n                throw new InvalidOperationException(\"Could not create xml writer from stream\");\n\n            xml.WriteTo(writer);\n            writer.Flush();\n            streamWriter.Flush();\n        }\n\n        private void WriteObject(string name, object value, XContainer parent, IDictionary<string, XNamespace> namespaces)\n        {\n            //TODO custom value converter IValueConverter<T> from RSB\n            //TODO custom serializer ICustomElementSerializer from RSB\n            if (ShouldPutAsString(value))\n            {\n                var elementName = GetXmlNamespace(namespaces, value.GetType()) + name;\n                parent.Add(new XElement(elementName, FormatAsString(value)));\n            }\n            else if (value is byte[])\n            {\n                var elementName = GetXmlNamespace(namespaces, typeof(byte[])) + name;\n                parent.Add(new XElement(elementName, Convert.ToBase64String((byte[])value)));\n            }\n            else if (ShouldTreatAsDictionary(value.GetType()))\n            {\n                XElement list = GetContentWithNamespace(value, namespaces, name);\n                parent.Add(list);\n                foreach (dynamic keyValuePair in ((IEnumerable)value))\n                {\n                    var entry = new XElement(\"entry\");\n                    object keyProp = keyValuePair.Key;\n                    if (keyProp == null)\n                        continue;\n                    WriteObject(\"Key\", keyProp, entry, namespaces);\n\n                    object propVal = keyValuePair.Value;\n                    if (propVal != null)\n                    {\n                        WriteObject(\"Value\", propVal, entry, namespaces);\n                    }\n\n                    list.Add(entry);\n                }\n            }\n            else if (value is IEnumerable)\n            {\n                XElement list = GetContentWithNamespace(value, namespaces, name);\n                parent.Add(list);\n                foreach (var item in ((IEnumerable)value))\n                {\n                    if (item == null)\n                        continue;\n\n                    WriteObject(\"value\", item, list, namespaces);\n                }\n            }\n            else\n            {\n                XElement content = GetContentWithNamespace(value, namespaces, name);\n                foreach (var property in value.GetType().GetProperties())\n                {\n                    var propVal = property.GetValue(value, new object[]{});\n                    if (propVal == null)\n                        continue;\n                    WriteObject(property.Name, propVal, content, namespaces);\n                }\n                content = ApplyMessageSerializationBehaviorIfNecessary(value.GetType(), content);\n                parent.Add(content);\n            }\n        }\n\n        private static bool ShouldTreatAsDictionary(Type type)\n        {\n            if (type.IsGenericType == false)\n                return false;\n\n            var genericArguments = type.GetGenericArguments();\n            if (genericArguments.Length != 2)\n                return false;\n\n            var interfaceType = typeof(IDictionary<,>).MakeGenericType(genericArguments);\n            if (interfaceType.IsAssignableFrom(type) == false)\n                return false;\n\n            return true;\n        }\n\n        private XElement ApplyMessageSerializationBehaviorIfNecessary(Type messageType, XElement element)\n        {\n            //TODO apply serialization behavior\n            return element;\n        }\n\n        private XElement ApplyMessageDeserializationBehaviorIfNecessary(Type messageType, XElement element)\n        {\n            //TODO rework the serialization behavior\n            return element;\n        }\n\n        private XNamespace GetXmlNamespace(IDictionary<string, XNamespace> namespaces, Type type)\n        {\n            var ns = reflection.GetNamespacePrefixForXml(type);\n            XNamespace xmlNs;\n            if (namespaces.TryGetValue(ns, out xmlNs) == false)\n            {\n                namespaces[ns] = xmlNs = reflection.GetNamespaceForXml(type);\n            }\n            return xmlNs;\n        }\n\n        private bool HaveCustomSerializer(Type type)\n        {\n            //TODO rework the custom serialization\n            return false;\n        }\n\n        private XElement GetContentWithNamespace(object value, IDictionary<string, XNamespace> namespaces, string name)\n        {\n            var type = value.GetType();\n            var xmlNsAlias = reflection.GetNamespacePrefixForXml(type);\n            XNamespace xmlNs;\n            if (namespaces.TryGetValue(xmlNsAlias, out xmlNs) == false)\n            {\n                namespaces[xmlNsAlias] = xmlNs = reflection.GetNamespaceForXml(type);\n            }\n\n            return new XElement(xmlNs + name);\n        }\n\n        private static bool ShouldPutAsString(object value)\n        {\n            return value is ValueType || value is string || value is Uri;\n        }\n\n        public static object FromString(Type type, string value)\n        {\n            if (type == typeof(string))\n                return value;\n\n            if (type == typeof(Uri))\n                return new Uri(value);\n\n            if (type.IsPrimitive)\n                return Convert.ChangeType(value, type, CultureInfo.InvariantCulture);\n\n            if (type == typeof(Guid))\n                return new Guid(value);\n\n            if (type == typeof(DateTime))\n                return DateTime.Parse(value, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);\n\n            if (type == typeof(DateTimeOffset))\n                return XmlConvert.ToDateTimeOffset(value);\n\n            if (type == typeof(TimeSpan))\n                return XmlConvert.ToTimeSpan(value);\n\n            if (type.IsEnum)\n                return Enum.Parse(type, value);\n\n            if (type == typeof(decimal))\n                return decimal.Parse(value, CultureInfo.InvariantCulture);\n\n            throw new SerializationException(\"Don't know how to deserialize type: \" + type + \" from '\" + value + \"'\");\n        }\n\n        private static string FormatAsString(object value)\n        {\n            if (value == null)\n                return string.Empty;\n            if (value is bool)\n                return value.ToString().ToLower();\n            if (value is string)\n                return value as string;\n            if (value is Uri)\n                return value.ToString();\n\n            if (value is DateTime)\n                return ((DateTime)value).ToString(\"o\", CultureInfo.InvariantCulture);\n\n            if (value is DateTimeOffset)\n                return XmlConvert.ToString((DateTimeOffset)value);\n\n            if (value is TimeSpan)\n            {\n                var ts = (TimeSpan)value;\n                return string.Format(\"P0Y0M{0}DT{1}H{2}M{3}S\", ts.Days, ts.Hours, ts.Minutes, ts.Seconds);\n            }\n            if (value is Guid)\n                return ((Guid)value).ToString();\n\n            if (value is decimal)\n                return ((decimal)value).ToString(CultureInfo.InvariantCulture);\n\n            if (value is double)\n                return ((double)value).ToString(CultureInfo.InvariantCulture);\n\n            if (value is float)\n                return ((float)value).ToString(CultureInfo.InvariantCulture);\n\n            return value.ToString();\n        }\n\n        private IDictionary<string, XNamespace> GetNamespaces(object message)\n        {\n            var messages = message as object[] ?? new []{message};\n\n            var namespaces = new Dictionary<string, XNamespace>\n            {\n                {\"esb\", \"http://servicebus.fubutransportation.com/2013/07/19/esb\"},\n            };\n            foreach (var msg in messages)\n            {\n                if (msg == null)\n                    continue;\n                var type = msg.GetType();\n                namespaces[reflection.GetNamespacePrefixForXml(type)] = reflection.GetNamespaceForXml(type);\n            }\n            return namespaces;\n        }\n\n        public object Deserialize(Stream message)\n        {\n            var document = XDocument.Load(XmlReader.Create(message));\n            if (document.Root == null)\n                throw new SerializationException(\"document doesn't have root element\");\n\n            if (document.Root.Name.LocalName != \"messages\")\n                throw new SerializationException(\"message doesn't have root element named 'messages'\");\n\n            var msgs = new List<object>();\n            foreach (var element in document.Root.Elements())\n            {\n                var type = reflection.GetTypeFromXmlNamespace(element.Name.NamespaceName);\n                if (type == null)\n                {\n                    throw new SerializationException(\"Cannot find root message type: \" + element.Name.Namespace);\n                }\n                var msg = ReadObject(type, element);\n                msgs.Add(msg);\n            }\n\n            if (msgs.Count == 1)\n            {\n                return msgs.Single();\n            }\n\n            return msgs.ToArray();\n        }\n\n        public string ContentType { \n            get { return \"application/xml\"; }\n        }\n\n        private object ReadObject(Type type, XElement element)\n        {\n            if (type == null)\n                throw new ArgumentNullException(\"type\");\n\n            element = ApplyMessageDeserializationBehaviorIfNecessary(type, element);\n\n            if (false)//LoadCustomValueConvertor(type) != null)\n            {\n                //var convertorType = reflection.GetGenericTypeOf(typeof(IValueConvertor<>), type);\n                //var convertor = _serviceLocator.Resolve(convertorType);\n                //return reflection.InvokeFromElement(convertor, element);\n            }\n            if (HaveCustomSerializer(type))\n            {\n                //var customSerializer = _customElementSerializers.First(s => s.CanSerialize(type));\n                //return customSerializer.FromElement(type, element);\n            }\n            if (type == typeof(byte[]))\n            {\n                return Convert.FromBase64String(element.Value);\n            }\n            if (CanParseFromString(type))\n            {\n                return FromString(type, element.Value);\n            }\n            if (ShouldTreatAsDictionary(type))\n            {\n                return ReadDictionary(type, element);\n            }\n            if (typeof(IEnumerable).IsAssignableFrom(type))\n            {\n                return ReadList(type, element);\n            }\n            object instance = reflection.CreateInstance(type);\n            foreach (var prop in element.Elements())\n            {\n                var property = prop;\n                reflection.Set(instance,\n                    prop.Name.LocalName,\n                    typeFromProperty =>\n                    {\n                        var propType = reflection.GetTypeFromXmlNamespace(property.Name.NamespaceName);\n                        return ReadObject(propType ?? typeFromProperty, property);\n                    });\n            }\n            return instance;\n        }\n\n        private static bool CanParseFromString(Type type)\n        {\n            if (type.IsPrimitive)\n                return true;\n\n            if (type == typeof(string))\n                return true;\n\n            if (type == typeof(Uri))\n                return true;\n\n            if (type == typeof(DateTime))\n                return true;\n\n            if (type == typeof(DateTimeOffset))\n                return true;\n\n            if (type == typeof(TimeSpan))\n                return true;\n\n            if (type == typeof(Guid))\n                return true;\n\n            if (type.IsEnum)\n                return true;\n\n            if (type == typeof(decimal))\n                return true;\n\n            return false;\n        }\n\n        private object ReadList(Type type, XContainer element)\n        {\n            object instance;\n            Type elementType;\n            if (type.IsArray)\n            {\n                instance = reflection.CreateInstance(type, element.Elements().Count());\n                elementType = type.GetElementType();\n            }\n            else\n            {\n                instance = reflection.CreateInstance(type);\n                elementType = type.GetGenericArguments()[0];\n            }\n            int index = 0;\n            var array = instance as Array;\n            foreach (var value in element.Elements())\n            {\n                var itemType = reflection.GetTypeFromXmlNamespace(value.Name.NamespaceName);\n                object o = ReadObject(itemType ?? elementType, value);\n                if (array != null)\n                    array.SetValue(o, index);\n                else\n                {\n                    dynamic dynamicInstance = instance;\n                    dynamic dynamicO = o;\n                    dynamicInstance.Add(dynamicO);\n                }\n\n                index += 1;\n            }\n            return instance;\n        }\n\n        private object ReadDictionary(Type type, XContainer element)\n        {\n            dynamic instance = reflection.CreateInstance(type);\n            var genericArguments = type.GetGenericArguments();\n            var keyType = genericArguments[0];\n            var valueType = genericArguments[1];\n            foreach (var entry in element.Elements())\n            {\n                var elements = entry.Elements().ToArray();\n                var itemKeyType = reflection.GetTypeFromXmlNamespace(elements[0].Name.NamespaceName);\n                dynamic key = ReadObject(itemKeyType ?? keyType, elements[0]);\n\n                dynamic value = null;\n                if (elements.Length > 1)\n                {\n                    var itemValueType = reflection.GetTypeFromXmlNamespace(elements[1].Name.NamespaceName);\n                    value = ReadObject(itemValueType ?? valueType, elements[1]);\n                }\n\n                instance.Add(key, value);\n            }\n            return instance;\n        }\n\n        //TODO nuke this\n        private class Reflection\n        {\n            private readonly IDictionary<Type, string> typeToWellKnownTypeName;\n            private readonly IDictionary<string, Type> wellKnownTypeNameToType;\n\n            public Reflection()\n            {\n                wellKnownTypeNameToType = new Dictionary<string, Type>();\n                typeToWellKnownTypeName = new Dictionary<Type, string>\n                {\n                    {typeof (string), typeof (string).FullName},\n                    {typeof (int), typeof (int).FullName},\n                    {typeof (byte), typeof (byte).FullName},\n                    {typeof (bool), typeof (bool).FullName},\n                    {typeof (DateTime), typeof (DateTime).FullName},\n                    {typeof (TimeSpan), typeof (TimeSpan).FullName},\n                    {typeof (decimal), typeof (decimal).FullName},\n                    {typeof (float), typeof (float).FullName},\n                    {typeof (double), typeof (double).FullName},\n                    {typeof (char), typeof (char).FullName},\n                    {typeof (Guid), typeof (Guid).FullName},\n                    {typeof (Uri), typeof (Uri).FullName},\n                    {typeof (short), typeof (short).FullName},\n                    {typeof (long), typeof (long).FullName},\n                    {typeof (byte[]), \"binary\"}\n                };\n                foreach (var pair in typeToWellKnownTypeName)\n                {\n                    wellKnownTypeNameToType.Add(pair.Value, pair.Key);\n                }\n            }\n\n            public Type GetTypeFromXmlNamespace(string xmlNamespace)\n            {\n                Type value;\n                if (wellKnownTypeNameToType.TryGetValue(xmlNamespace, out value))\n                    return value;\n                if (xmlNamespace.StartsWith(\"array_of_\"))\n                {\n                    return GetTypeFromXmlNamespace(xmlNamespace.Substring(\"array_of_\".Length));\n                }\n                return Type.GetType(xmlNamespace);\n            }\n\n            public string GetNameForXml(Type type)\n            {\n                var typeName = type.Name;\n                typeName = typeName.Replace('[', '_').Replace(']', '_');\n                var indexOf = typeName.IndexOf('`');\n                if (indexOf == -1)\n                    return typeName;\n                typeName = typeName.Substring(0, indexOf) + \"_of_\";\n                foreach (var argument in type.GetGenericArguments())\n                {\n                    typeName += GetNamespacePrefixForXml(argument) + \"_\";\n                }\n                return typeName.Substring(0, typeName.Length - 1);\n            }\n\n            public string GetNamespacePrefixForXml(Type type)\n            {\n                string value;\n                if (typeToWellKnownTypeName.TryGetValue(type, out value))\n                    return value;\n                if (type.IsArray)\n                    return \"array_of_\" + GetNamespacePrefixForXml(type.GetElementType());\n\n                if (type.Namespace == null && type.Name.StartsWith(\"<>\"))\n                    throw new InvalidOperationException(\"Anonymous types are not supported\");\n\n                if (type.Namespace == null) //global types?\n                {\n                    return type.Name\n                        .ToLowerInvariant();\n                }\n                var typeName = type.Namespace.Split('.')\n                              .Last().ToLowerInvariant() + \".\" + type.Name.ToLowerInvariant();\n                var indexOf = typeName.IndexOf('`');\n                if (indexOf == -1)\n                    return typeName;\n                typeName = typeName.Substring(0, indexOf) + \"_of_\";\n                foreach (var argument in type.GetGenericArguments())\n                {\n                    typeName += GetNamespacePrefixForXml(argument) + \"_\";\n                }\n                return typeName.Substring(0, typeName.Length - 1);\n            }\n\n\n            public string GetNamespaceForXml(Type type)\n            {\n                string value;\n                if (typeToWellKnownTypeName.TryGetValue(type, out value))\n                    return value;\n\n                Assembly assembly = type.Assembly;\n                string fullName = assembly.FullName;\n                if (type.IsGenericType)\n                {\n                    var builder = new StringBuilder();\n                    int startOfGenericName = type.FullName.IndexOf('[');\n                    builder.Append(type.FullName.Substring(0, startOfGenericName))\n                        .Append(\"[\")\n                        .Append(String.Join(\",\",\n                                        type.GetGenericArguments()\n                                            .Select(t => \"[\" + GetNamespaceForXml(t) + \"]\")\n                                            .ToArray()))\n                        .Append(\"], \");\n                    if (assembly.GlobalAssemblyCache)\n                    {\n                        builder.Append(fullName);\n                    }\n                    else\n                    {\n                        builder.Append(fullName.Split(',')[0]);\n                    }\n                    return builder.ToString();\n                }\n\n                if (assembly.GlobalAssemblyCache == false)\n                {\n                    return type.FullName + \", \" + fullName.Split(',')[0];\n                }\n                return type.AssemblyQualifiedName;\n            }\n\n            public object CreateInstance(Type type, params object[] args)\n            {\n                return Activator.CreateInstance(type,\n                                                BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance,\n                                                null, args, null);\n            }\n\n            public void Set(object instance, string name, Func<Type, object> generateValue)\n            {\n                Type type = instance.GetType();\n                PropertyInfo property = type.GetProperty(name);\n                if (property == null || property.CanWrite == false)\n                {\n                    return;\n                }\n                object value = generateValue(property.PropertyType);\n                property.SetValue(instance, value, null);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/TransportActivator.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime\n{\n\n    public class TransportActivator : IActivator\n    {\n        private readonly ChannelGraph _graph;\n        private readonly IServiceLocator _services;\n        private readonly IHandlerPipeline _pipeline;\n        private readonly ILogger _logger;\n        private readonly IEnumerable<ITransport> _transports;\n        private readonly IEnumerable<IFubuTransportActivator> _fubuTransportActivators;\n\n        public TransportActivator(ChannelGraph graph, IServiceLocator services, IHandlerPipeline pipeline, ILogger logger, IEnumerable<ITransport> transports, IEnumerable<IFubuTransportActivator> fubuTransportActivators)\n        {\n            _graph = graph;\n            _services = services;\n            _pipeline = pipeline;\n            _logger = logger;\n            _transports = transports;\n            _fubuTransportActivators = fubuTransportActivators;\n        }\n\n        public void Activate(IActivationLog log, IPerfTimer timer)\n        {\n            _graph.ReadSettings(_services);\n            OpenChannels();\n            _graph.StartReceiving(_pipeline, _logger);\n            ExecuteActivators();\n        }\n\n        // virtual for testing\n        public virtual void ExecuteActivators()\n        {\n            _fubuTransportActivators.Each(x => x.Activate());\n        }\n\n        // virtual for testing\n        public virtual void OpenChannels()\n        {\n            try\n            {\n                _transports.Each(x => x.OpenChannels(_graph));\n\n                var missingChannels = _graph.Where(x => x.Channel == null);\n                if (missingChannels.Any())\n                {\n                    throw new InvalidOrMissingTransportException(_transports, missingChannels);\n                }\n            }\n            catch (InvalidOrMissingTransportException)\n            {\n                throw;\n            }\n            catch (Exception e)\n            {\n                throw new InvalidOrMissingTransportException(e, _transports, _graph);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/TransportBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime\n{\n    public abstract class TransportBase\n    {\n        public abstract string Protocol { get; }\n\n        public void OpenChannels(ChannelGraph graph)\n        {\n            var nodes = graph.NodesForProtocol(Protocol).ToArray();\n\n            if (Disabled(nodes)) return;\n\n            nodes.OrderByDescending(x => x.Incoming).Each(x => x.Channel = buildChannel(x));\n            seedQueues(nodes);\n\n            graph.AddReplyChannel(Protocol, getReplyUri(graph));\n        }\n\n        public virtual bool Disabled(IEnumerable<ChannelNode> nodes)\n        {\n            return false;\n        }\n\n        protected abstract Uri getReplyUri(ChannelGraph graph);\n\n        protected abstract IChannel buildChannel(ChannelNode channelNode);\n\n        protected abstract void seedQueues(IEnumerable<ChannelNode> channels);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Runtime/UnknownChannelException.cs",
    "content": "﻿using System;\nusing System.Runtime.Serialization;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServiceBus.Runtime\n{\n    [Serializable]\n    public class UnknownChannelException : Exception\n    {\n        public UnknownChannelException(Uri uri) : base(\"Unknown destination '{0}'\".ToFormat(uri))\n        {\n        }\n\n        protected UnknownChannelException(SerializationInfo info, StreamingContext context) : base(info, context)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Sagas/ISagaRepository.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Sagas\n{\n    public interface ISagaRepository<TState, TMessage>\n    {\n        // Want the message in the signature so the Id doesn't have\n        // to be duplicated\n        void Save(TState state, TMessage message);\n        TState Find(TMessage message);\n        void Delete(TState state, TMessage message);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Sagas/ISagaStorage.cs",
    "content": "﻿using StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.ServiceBus.Sagas\n{\n    public interface ISagaStorage\n    {\n        /// <summary>\n        /// Can be null!\n        /// </summary>\n        /// <param name=\"sagaTypes\"></param>\n        /// <returns></returns>\n        Instance RepositoryFor(SagaTypes sagaTypes);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Sagas/IStatefulSaga.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Sagas\n{\n    public interface IStatefulSaga<TState>\n    {\n        TState State { get; set; }\n        bool IsCompleted();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Sagas/SagaBehavior.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.ServiceBus.Sagas\n{\n    public class SagaBehavior<TState, TMessage, THandler> : WrappingBehavior where THandler : IStatefulSaga<TState>\n                                                                             where TMessage : class\n                                                                             where TState : class\n    {\n        private readonly IFubuRequest _request;\n        private readonly ISagaRepository<TState, TMessage> _repository;\n        private readonly THandler _handler;\n\n        public SagaBehavior(IFubuRequest request, ISagaRepository<TState, TMessage> repository, THandler handler)\n        {\n            _request = request;\n            _repository = repository;\n            _handler = handler;\n        }\n\n        protected override async Task invoke(Func<Task> func)\n        {\n            var message = _request.Find<TMessage>().FirstOrDefault();\n            if (message == null)\n            {\n                throw new Exception($\"Message of type {typeof(TMessage)} is required.\");\n            }\n\n            _handler.State = _repository.Find(message);\n\n            await func().ConfigureAwait(false);\n\n            if (_handler.State == null) return;\n\n            if (_handler.IsCompleted())\n            {\n                _repository.Delete(_handler.State, message);\n            }\n            else\n            {\n                _repository.Save(_handler.State, message);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Sagas/SagaRepositoryUnresolvableException.cs",
    "content": "﻿using System;\nusing System.Runtime.Serialization;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServiceBus.Sagas\n{\n    [Serializable]\n    public class SagaRepositoryUnresolvableException : Exception\n    {\n        public SagaRepositoryUnresolvableException(SagaTypes sagaTypes) : base(\"Unable to determine a saga repository for {0}.  Does the saga type have a property Id:Guid and the message type a property of CorrelationId:Guid?\".ToFormat(sagaTypes))\n        {\n        }\n\n        protected SagaRepositoryUnresolvableException(SerializationInfo info, StreamingContext context) : base(info, context)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Sagas/SagaTypes.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Registration;\n\nnamespace FubuMVC.Core.ServiceBus.Sagas\n{\n    public class SagaTypes\n    {\n        public const string CorrelationId = \"CorrelationId\";\n        public const string Id = \"Id\";\n\n        public Type HandlerType;\n        public Type MessageType;\n        public Type StateType;\n\n        public object ToCorrelationIdFunc()\n        {\n            var property = MessageType.GetProperty(CorrelationId);\n\n            if (property == null)\n            {\n                return typeof (EmptyGuidMaker<>).CloseAndBuildAs<EmptyGuid>(MessageType).GetEmptyFunc();\n            }\n\n            return FuncBuilder.CompileGetter(property);\n        }\n\n        public object ToSagaIdFunc()\n        {\n            var property = StateType.GetProperty(Id);\n\n            return FuncBuilder.CompileGetter(property);\n        }\n\n        public bool MatchesStateIdAndMessageCorrelationIdIdiom()\n        {\n            return MessageType.GetProperty(CorrelationId) != null && StateType.GetProperty(Id) != null;\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"HandlerType: {0}, MessageType: {1}, StateType: {2}\", HandlerType, MessageType, StateType);\n        }\n\n        public interface EmptyGuid\n        {\n            object GetEmptyFunc();\n        }\n\n        public class EmptyGuidMaker<T> : EmptyGuid\n        {\n            public object GetEmptyFunc()\n            {\n                Func<T, Guid> func = x => Guid.Empty;\n\n                return func;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Sagas/StatefulSagaConvention.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.ServiceBus.Sagas\n{\n    [Description(\"Adds saga handling to handler actions that implement IStatefulSaga<T>\")]\n    public class StatefulSagaConvention : IConfigurationAction\n    {\n        public void Configure(BehaviorGraph graph)\n        {\n            var sagaHandlers = graph.Chains.SelectMany(x => x).OfType<HandlerCall>()\n                                    .Where(IsSagaHandler)\n                                    .ToArray();\n\n            var settings = graph.Settings.Get<TransportSettings>();\n\n            sagaHandlers.Each(call => {\n                var types = ToSagaTypes(call);\n\n                var sagaNode = new StatefulSagaNode(types)\n                {\n                    Repository = DetermineSagaRepositoryInstance(settings, types)\n                };\n\n                call.AddBefore(sagaNode);\n            });\n        }\n\n\n        public static bool IsSagaHandler(HandlerCall call)\n        {\n            var handlerType = call.HandlerType;\n            return IsSagaHandler(handlerType);\n        }\n\n        public static bool IsSagaHandler(Type handlerType)\n        {\n            return handlerType.Closes(typeof (IStatefulSaga<>));\n        }\n\n        public static bool IsSagaChain(BehaviorChain chain)\n        {\n            if (chain is HandlerChain)\n            {\n                return chain.OfType<HandlerCall>().Any(IsSagaHandler);\n            }\n\n            return false;\n        }\n\n        public static Instance DetermineSagaRepositoryInstance(TransportSettings settings, SagaTypes sagaTypes)\n        {\n            var def = settings.SagaStorageProviders.FirstValue(x => x.RepositoryFor(sagaTypes))\n                      ?? new InMemorySagaStorage().RepositoryFor(sagaTypes);\n\n            if (def == null)\n            {\n                throw new SagaRepositoryUnresolvableException(sagaTypes);\n            }\n\n            return def;\n        }\n\n        public static SagaTypes ToSagaTypes(HandlerCall call)\n        {\n            return new SagaTypes\n            {\n                HandlerType = call.HandlerType,\n                MessageType = call.InputType(),\n                StateType = call.HandlerType.FindInterfaceThatCloses(typeof(IStatefulSaga<>)).GetGenericArguments().Single()\n            };\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Sagas/StatefulSagaNode.cs",
    "content": "﻿using System;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.Registration.Nodes;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.ServiceBus.Sagas\n{\n    public class StatefulSagaNode : BehaviorNode, DescribesItself\n    {\n        private readonly SagaTypes _types;\n\n        public StatefulSagaNode(SagaTypes types)\n        {\n            _types = types;\n        }\n\n        public Instance Repository { get; set; }\n\n        public override BehaviorCategory Category\n        {\n            get { return BehaviorCategory.Wrapper; }\n        }\n\n        public Type StateType\n        {\n            get { return _types.StateType; }\n        }\n\n        public Type MessageType\n        {\n            get { return _types.MessageType; }\n        }\n\n\n        protected override IConfiguredInstance buildInstance()\n        {\n            if (Repository == null)\n            {\n                throw new InvalidOperationException(\n                    \"You must specify a SagaRepository\");\n            }\n\n            if (Repository == null)\n            {\n                throw new InvalidOperationException(\n                    \"something descriptive here saying you don't know how to do the repo for the saga\");\n            }\n\n            \n\n            var instance = new ConfiguredInstance(typeof (SagaBehavior<,,>), _types.StateType, _types.MessageType, _types.HandlerType);\n            var repositoryType = typeof (ISagaRepository<,>).MakeGenericType(_types.StateType, _types.MessageType);\n\n            instance.Dependencies.Add(repositoryType, Repository);\n\n            return instance;\n\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = \"Stateful Saga Node\";\n            description.ShortDescription = \"Applies saga state loading and persistence within this chain\";\n            description.Properties[\"State Type\"] = StateType.FullName;\n            description.Properties[\"Message Type\"] = MessageType.FullName;\n            description.AddChild(\"Repository\", Repository);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Configuration/ApplyScheduledJobRouting.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Configuration\n{\n    // Tested with integration tests only\n    [Description(\"Applies routing rules to scheduled jobs\")]\n    public class ApplyScheduledJobRouting : IConfigurationAction\n    {\n        public void Configure(BehaviorGraph graph)\n        {\n            var jobs = graph.Settings.Get<ScheduledJobGraph>();\n            var channels = graph.Settings.Get<ChannelGraph>();\n\n            if (jobs.Jobs.Any(x => x.Channel == null) && jobs.DefaultChannel == null)\n            {\n                var missing = jobs.Jobs.Where(x => x.Channel == null);\n                var message =\n                    \"No channel configured for jobs {0} and no default Scheduled job channel configured\".ToFormat(\n                        missing.Select(x => x.JobType.GetFullName()).Join(\", \"));\n\n                throw new InvalidOperationException(message);\n            }\n\n            jobs.Jobs.Where(x => x.Channel == null).Each(x => x.Channel = jobs.DefaultChannel);\n\n            jobs.Jobs.Each(job => {\n                var accessor = job.Channel ?? jobs.DefaultChannel;\n                var channel = channels.ChannelFor(accessor);\n                if (channel == null)\n                {\n                    throw new InvalidOperationException(\"Nonexistent Channel '{0}' configured for Scheduled job {1}\".ToFormat(accessor, job.JobType.GetFullName()));\n                }\n\n                channel.Rules.Add(job.ToRoutingRule());\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Configuration/ScheduledJobExpression.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Configuration\n{\n    public class ScheduledJobExpression<T>\n    {\n        private readonly FubuRegistry _parent;\n\n        public ScheduledJobExpression(FubuRegistry parent)\n        {\n            _parent = parent;\n        }\n\n        public ScheduleExpression<TJob> RunJob<TJob>() where TJob : IJob\n        {\n            return new ScheduleExpression<TJob>(this);\n        }\n\n\n        public ScheduledJobExpression<T> DefaultJobChannel(Expression<Func<T, object>> channel)\n        {\n            _parent.AlterSettings<ScheduledJobGraph>(x => x.DefaultChannel = channel.ToAccessor());\n            return this;\n        } \n\n        public class ScheduleExpression<TJob> where TJob : IJob\n        {\n            private readonly ScheduledJobExpression<T> _parent;\n\n            public ScheduleExpression(ScheduledJobExpression<T> parent)\n            {\n                _parent = parent;\n            }\n\n\n\n            public ChannelExpression ScheduledBy<TScheduler>() where TScheduler : IScheduleRule, new()\n            {\n                return ScheduledBy(new TScheduler());\n            }\n\n            public ChannelExpression ScheduledBy(IScheduleRule rule)\n            {\n                var job = new ScheduledJob<TJob>(rule);\n\n                _parent._parent.AlterSettings<ScheduledJobGraph>(x => x.Jobs.Add(job));\n\n                return new ChannelExpression(job);\n            }\n\n            public class ChannelExpression \n            {\n                private readonly ScheduledJob<TJob> _job;\n\n                public ChannelExpression(ScheduledJob<TJob> job)\n                {\n                    _job = job;\n                }\n\n                public ChannelExpression Channel(Expression<Func<T, object>> channel)\n                {\n                    _job.Channel = channel.ToAccessor();\n                    return this;\n                }\n\n                public ChannelExpression Timeout(TimeSpan timeout)\n                {\n                    _job.Timeout = timeout;\n                    return this;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Disable the automatic startup of scheduled jobs. Valuable for testing\n        /// </summary>\n        /// <param name=\"shouldActivate\"></param>\n        /// <returns></returns>\n        public ScheduledJobExpression<T> ActivatedOnStartup(bool shouldActivate)\n        {\n            _parent.ServiceBus.HealthMonitoring.ScheduledExecution(shouldActivate ? ScheduledExecution.RunImmediately : ScheduledExecution.Disabled);\n            return this;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Configuration/ScheduledJobHandlerCall.cs",
    "content": "﻿using System.Reflection;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Configuration\n{\n    public class ScheduledJobHandlerCall<T> : HandlerCall where T : IJob\n    {\n        private static MethodInfo method()\n        {\n            return ReflectionHelper.GetMethod<ScheduledJobRunner<T>>(x => x.Execute(null));\n        }\n\n        public ScheduledJobHandlerCall()\n            : base(typeof(ScheduledJobRunner<T>), method())\n        {\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Configuration/ScheduledJobHandlerSource.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Registration;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Messages;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Configuration\n{\n    public class ScheduledJobHandlerSource : IHandlerSource\n    {\n        private readonly Type[] _jobTypes;\n\n        public ScheduledJobHandlerSource(Type[] jobTypes)\n        {\n            _jobTypes = jobTypes;\n        }\n\n        public Task<HandlerCall[]> FindCalls(Assembly applicationAssembly)\n        {\n            return Task.Factory.StartNew(() => _jobTypes.SelectMany(handlersForJob).ToArray());\n        }\n\n        private IEnumerable<HandlerCall> handlersForJob(Type jobType)\n        {\n            yield return typeof (ScheduledJobHandlerCall<>).CloseAndBuildAs<HandlerCall>(jobType);\n            yield return HandlerCall.For(typeof (SchedulingHandler<>), jobType, \"Reschedule\");\n        } \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Configuration/ScheduledJobRoutingRule.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.Runtime.Routing;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Configuration\n{\n    public class ScheduledJobRoutingRule<T> : IRoutingRule where T : IJob\n    {\n        public bool Matches(Type type)\n        {\n            return type == typeof (ExecuteScheduledJob<T>) || type == typeof(RescheduleRequest<T>);\n        }\n\n        public string Describe()\n        {\n            return \"Executes Scheduled job: \" + typeof (T).GetFullName();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Configuration/ScheduledJobServicesRegistry.cs",
    "content": "﻿using FubuCore.Logging;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Configuration\n{\n    public class ScheduledJobServicesRegistry : ServiceRegistry\n    {\n        public ScheduledJobServicesRegistry()\n        {\n            SetServiceIfNone<IScheduledJobController, ScheduledJobController>().Singleton();\n            SetServiceIfNone<IJobTimer, JobTimer>().Singleton();\n\n            SetServiceIfNone<ISchedulePersistence>(new InMemorySchedulePersistence());\n\n            SetServiceIfNone<IScheduleStatusMonitor, ScheduleStatusMonitor>();\n\n            AddService<IPersistentTaskSource, ScheduledJobPersistentTask>();\n            AddService<ILogModifier, ScheduledJobRecordModifier>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Execution/EveryDayAtSpecificTime.cs",
    "content": "using System;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Execution\n{\n    public class EveryDayAtSpecificTime : IScheduleRule\n    {\n        private readonly int _hour;\n        private readonly int _minute;\n\n        public EveryDayAtSpecificTime(int hour, int minute)\n        {\n            _hour = hour;\n            _minute = minute;\n        }\n\n        public DateTimeOffset ScheduleNextTime(DateTimeOffset currentTime, JobExecutionRecord lastExecution)\n        {\n            var localTime = currentTime.ToLocalTime();\n            var oneAmToday = new DateTime(localTime.Year, localTime.Month, localTime.Day, _hour, _minute, 0, 0, DateTimeKind.Local);\n            var nextScheduledTime = oneAmToday;\n\n            if (localTime.Hour > _hour || (localTime.Hour == _hour && localTime.Minute >= _minute))\n            {\n                // Switch to tomorrow\n                nextScheduledTime = oneAmToday.AddDays(1);\n            }\n\n            return nextScheduledTime.ToUniversalTime();\n        }\n    }\n\n    /*\n    public class EveryDayAt1Am : EveryDayAtSpecificTime\n    {\n        public EveryDayAt1Am() : base(hour: 01, minute: 00)\n        {}\n    }\n    */\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Execution/ExecuteScheduledJob.cs",
    "content": "using FubuMVC.Core.ServiceBus.Polling;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Execution\n{\n    public class ExecuteScheduledJob<T> where T : IJob\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Execution/IJobExecutor.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Polling;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Execution\n{\n    public interface IJobExecutor\n    {\n        void Execute<T>(TimeSpan timeout) where T : IJob;\n        void Schedule<T>(IScheduledJob<T> job, DateTimeOffset nextTime) where T : IJob;\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Execution/IScheduleRule.cs",
    "content": "using System;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Execution\n{\n    public interface IScheduleRule\n    {\n        DateTimeOffset ScheduleNextTime(DateTimeOffset currentTime, JobExecutionRecord lastExecution);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Execution/IScheduledJobController.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Polling;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Execution\n{\n    public interface IScheduledJobController\n    {\n        void Activate();\n        bool IsActive();\n        void Deactivate();\n        void Reschedule<T>(RescheduleRequest<T> request) where T : IJob;\n        void PerformHealthChecks();\n\n        void ExecuteNow(IScheduledJob job);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Execution/JobTimer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing FubuCore;\nusing FubuCore.Dates;\nusing FubuCore.Logging;\nusing FubuCore.Util;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\nusing Timer = System.Timers.Timer;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Execution\n{\n    public interface IJobTimer\n    {\n        void Schedule(Type type, DateTimeOffset time, Action action);\n        void ClearAll();\n        IEnumerable<ITimedExecution> Status();\n\n        ITimedExecution StatusFor(Type jobType);\n\n        DateTimeOffset Now();\n    }\n\n    public interface ITimerCallback\n    {\n        void Reschedule(DateTimeOffset next);\n        void Complete();\n        DateTimeOffset Now();\n    }\n\n    public class JobTimer : IJobTimer\n    {\n        private readonly ISystemTime _systemTime;\n        private readonly ILogger _logger;\n        private readonly Cache<Type, TimedExecution> _executions = new Cache<Type, TimedExecution>();\n\n        public JobTimer(ISystemTime systemTime, ILogger logger)\n        {\n            _systemTime = systemTime;\n            _logger = logger;\n        }\n\n        public void Schedule(Type type, DateTimeOffset time, Action action)\n        {\n            removeExisting(type);\n\n            createNewTimedExecution(type, time, action);\n        }\n\n        private void createNewTimedExecution(Type type, DateTimeOffset time, Action action)\n        {\n            var interval = time.Subtract(_systemTime.UtcNow()).TotalMilliseconds;\n            if (interval < 0) interval = 0;\n\n\n            _executions[type] = new TimedExecution(_logger, type, time, interval, action);\n        }\n\n        private void removeExisting(Type type)\n        {\n            if (_executions.Has(type))\n            {\n                var execution = _executions[type];\n                execution.SafeDispose();\n                _executions.Remove(type);\n            }\n        }\n\n        public void ClearAll()\n        {\n            _executions.ToArray().Each(x => x.SafeDispose());\n            _executions.ClearAll();\n        }\n\n        public IEnumerable<ITimedExecution> Status()\n        {\n            return _executions;\n        }\n\n        public ITimedExecution StatusFor(Type jobType)\n        {\n            return _executions.FirstOrDefault(x => x.Type == jobType);\n        }\n\n        public DateTimeOffset Now()\n        {\n            return _systemTime.UtcNow();\n        }\n\n        /// <summary>\n        /// Only usable for very controlled testing!!!\n        /// </summary>\n        /// <param name=\"jobType\"></param>\n        /// <param name=\"timeout\"></param>\n        public void WaitForJob(Type jobType, TimeSpan timeout)\n        {\n            _executions[jobType].WaitForCompletion(timeout);\n        }\n    }\n\n    public interface ITimedExecution\n    {\n        JobExecutionStatus Status { get; }\n        Type Type { get; }\n        DateTimeOffset ExpectedTime { get; }\n    }\n\n    public class TimedExecution : IDisposable, ITimedExecution\n    {\n        private readonly Type _type;\n        private readonly DateTimeOffset _expectedTime;\n        private readonly Timer _timer;\n        private readonly ManualResetEvent _finished = new ManualResetEvent(false);\n\n        public TimedExecution(ILogger logger, Type type, DateTimeOffset expectedTime, double millisecondsToWait,\n            Action action)\n        {\n            if (millisecondsToWait <= 0) millisecondsToWait = 1;\n\n            Status = JobExecutionStatus.Scheduled;\n            _type = type;\n            _expectedTime = expectedTime;\n\n            _timer = new Timer {AutoReset = false, Interval = millisecondsToWait};\n            _timer.Elapsed += (sender, args) => {\n                Status = JobExecutionStatus.Executing;\n                try\n                {\n                    action();\n                }\n                catch (Exception e)\n                {\n                    logger.Error(\"Trying to execute Scheduled job \" + type.GetFullName(), e);\n                }\n\n                _finished.Set();\n            };\n\n            _timer.Enabled = true;\n        }\n\n        public void WaitForCompletion(TimeSpan timeout)\n        {\n            _finished.WaitOne(timeout);\n        }\n\n        public JobExecutionStatus Status { get; private set; }\n\n        public Type Type\n        {\n            get { return _type; }\n        }\n\n        public DateTimeOffset ExpectedTime\n        {\n            get { return _expectedTime; }\n        }\n\n        public void Dispose()\n        {\n            _timer.Dispose();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Execution/ScheduledJobController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Execution\n{\n    public class ScheduledJobController : IDisposable, IJobExecutor, IScheduledJobController\n    {\n        private readonly ScheduledJobGraph _jobs;\n        private readonly IJobTimer _timer;\n        private readonly IScheduleStatusMonitor _statusMonitor;\n        private readonly IServiceBus _serviceBus;\n        private readonly ILogger _logger;\n        private bool _active;\n\n        public ScheduledJobController(\n            ScheduledJobGraph jobs,\n            IJobTimer timer,\n            IScheduleStatusMonitor statusMonitor,\n            IServiceBus serviceBus,\n            ILogger logger)\n        {\n            _jobs = jobs;\n            _timer = timer;\n            _statusMonitor = statusMonitor;\n            _serviceBus = serviceBus;\n            _logger = logger;\n        }\n\n        public void Activate()\n        {\n            _logger.Info(() => \"Activating all scheduled jobs\");\n            _timer.ClearAll();\n\n            _statusMonitor.Persist(schedule => {\n                _jobs.DetermineSchedule(_timer.Now(), this, schedule);\n\n                schedule.Active().Each(status => {\n                    var job = _jobs.FindJob(status.JobType);\n                    job.Initialize(_timer.Now(), this, schedule);\n                });\n            });\n\n            _active = true;\n        }\n\n        public bool IsActive()\n        {\n            return _active;\n        }\n\n        public void Deactivate()\n        {\n            Dispose();\n        }\n\n        public void Reschedule<T>(RescheduleRequest<T> request) where T : IJob\n        {\n            var job = _jobs.FindJob<T>();\n            if (job != null)\n            {\n                Schedule(job, request.NextTime);\n            }\n        }\n\n        public void PerformHealthChecks()\n        {\n            var jobsToReschedule = _jobs.Jobs.Where(x => x.ShouldReschedule(_timer.Now(), _timer)).ToArray();\n            if (jobsToReschedule.Any())\n            {\n                _statusMonitor.Persist(schedule =>\n                {\n                    jobsToReschedule.Each(job =>\n                    {\n                        _logger.Info(() => \"Forcing a re-schedule of job \" + job.JobType.GetFullName());\n                        job.Initialize(_timer.Now(), this, schedule);\n                    });\n                });\n            }\n        }\n\n        public void ExecuteNow(IScheduledJob job)\n        {\n            job.Execute(this);\n        }\n\n        public void Dispose()\n        {\n            _active = false;\n            _timer.ClearAll();\n        }\n\n\n        public void Execute<T>(TimeSpan timeout) where T : IJob\n        {\n            _serviceBus.Send(new ExecuteScheduledJob<T>());\n        }\n\n        public void Schedule<T>(IScheduledJob<T> job, DateTimeOffset nextTime) where T : IJob\n        {\n            _statusMonitor.MarkScheduled<T>(nextTime);\n            _timer.Schedule(typeof (T), nextTime, () => job.Execute(this));\n\n            _logger.InfoMessage(() => new ScheduledJobScheduled(typeof (T), nextTime));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Execution/ScheduledJobLogRecords.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Execution\n{\n    public abstract class ScheduledJobRecord : LogRecord\n    {\n        public ScheduledJobRecord(IJob job)\n        {\n            JobKey = JobStatus.GetKey(job.GetType());\n        }\n\n        public string JobKey { get; set; }\n        public string NodeId { get; set; }\n    }\n\n    public class ScheduledJobScheduled : LogRecord\n    {\n        public ScheduledJobScheduled(Type jobType, DateTimeOffset next)\n        {\n            JobKey = JobStatus.GetKey(jobType);\n            ScheduledTime = next;\n        }\n\n        public string JobKey { get; set; }\n        public DateTimeOffset ScheduledTime { get; set; }\n\n        public override string ToString()\n        {\n            return \"Scheduled job {0} Scheduled to start at {1}\"\n                .ToFormat(JobKey, ScheduledTime.ToLocalTime());\n        }\n    }\n\n\n\n    public class ScheduledJobStarted : ScheduledJobRecord\n    {\n        public ScheduledJobStarted(IJob job) : base(job)\n        {\n        }\n\n        public override string ToString()\n        {\n            return \"Scheduled job {0} started on node {1} at {2}\".ToFormat(JobKey, NodeId, Time.ToLocalTime());\n        }\n    }\n\n    public class ScheduledJobSucceeded : ScheduledJobRecord\n    {\n        public ScheduledJobSucceeded(IJob job) : base(job)\n        {\n        }\n\n        public override string ToString()\n        {\n            return \"Scheduled job {0} succeeded on Node {1} at {2}\".ToFormat(JobKey, NodeId, Time.ToLocalTime());\n        }\n    }\n\n    public class ScheduledJobFailed : ScheduledJobRecord\n    {\n        public ScheduledJobFailed(IJob job, Exception ex) : base(job)\n        {\n            Exception = ex;\n        }\n\n        public Exception Exception { get; set; }\n\n        public override string ToString()\n        {\n            return \"Scheduled job {0} failed with exception {1} on node {2} at {3}\"\n                .ToFormat(JobKey, Exception, NodeId, Time.ToLocalTime());\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Execution/ScheduledJobRecordModifier.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Execution\n{\n    public class ScheduledJobRecordModifier : ILogModifier\n    {\n        private readonly ChannelGraph _graph;\n\n        public ScheduledJobRecordModifier(ChannelGraph graph)\n        {\n            _graph = graph;\n        }\n\n        public bool Matches(Type logType)\n        {\n            return logType.CanBeCastTo<ScheduledJobRecord>();\n        }\n\n        public void Modify(object log)\n        {\n            log.As<ScheduledJobRecord>().NodeId = _graph.NodeId;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Execution/ScheduledJobRunner.cs",
    "content": "using System.Threading.Tasks;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Execution\n{\n    public class ScheduledJobRunner<T> where T : IJob\n    {\n        private readonly T _job;\n        private readonly IScheduleStatusMonitor _monitor;\n        private readonly IScheduledJob<T> _scheduledJob;\n        private readonly Envelope _envelope;\n\n        public ScheduledJobRunner(T job, IScheduleStatusMonitor monitor, IScheduledJob<T> scheduledJob,\n            Envelope envelope)\n        {\n            _job = job;\n            _monitor = monitor;\n            _scheduledJob = scheduledJob;\n            _envelope = envelope;\n        }\n\n        public Task<RescheduleRequest<T>> Execute(ExecuteScheduledJob<T> request)\n        {\n            var tracker = _monitor.TrackJob(_envelope.Attempts, _job);\n            return _scheduledJob.ToTask(_job, tracker);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/IScheduledJob.cs",
    "content": "using System;\nusing System.Threading.Tasks;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.Runtime.Routing;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs\n{\n    public interface IScheduledJob\n    {\n        Type JobType { get; }\n        void Initialize(DateTimeOffset now, IJobExecutor executor, JobSchedule schedule);\n        Accessor Channel { get; set; }\n        TimeSpan Timeout { get;}\n        IRoutingRule ToRoutingRule();\n        bool ShouldReschedule(DateTimeOffset now, IJobTimer timer);\n\n        void Execute(IJobExecutor executor);\n    }\n\n    public interface IScheduledJob<T> : IScheduledJob where T : IJob\n    {\n        Task<RescheduleRequest<T>> ToTask(IJob job, IJobRunTracker tracker);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/JobKeyAttribute.cs",
    "content": "using System;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs\n{\n    [AttributeUsage(AttributeTargets.Class)]\n    public class JobKeyAttribute : Attribute\n    {\n        private readonly string _key;\n\n        public JobKeyAttribute(string key)\n        {\n            _key = key;\n        }\n\n        public string Key\n        {\n            get { return _key; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Messages/SchedulingHandler.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Messages\n{\n\n    public class SchedulingHandler<T> where T : IJob\n    {\n        private readonly IScheduledJobController _controller;\n\n        public SchedulingHandler(IScheduledJobController controller)\n        {\n            _controller = controller;\n        }\n\n        public void Reschedule(RescheduleRequest<T> request)\n        {\n            _controller.Reschedule(request);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Persistence/ISchedulePersistence.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence\n{\n    public interface ISchedulePersistence\n    {\n        IEnumerable<JobStatusDTO> FindAll(string nodeName);\n        IEnumerable<JobStatusDTO> FindAllActive(string nodeName);\n        void Persist(IEnumerable<JobStatusDTO> statuses);\n        void Persist(JobStatusDTO status);\n\n        JobStatusDTO Find(string nodeName, string jobKey);\n\n        void RecordHistory(string nodeName, string jobKey, JobExecutionRecord record);\n        IEnumerable<JobExecutionRecord> FindHistory(string nodeName, string jobKey);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Persistence/IScheduleStatusMonitor.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Polling;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence\n{\n    public interface IScheduleStatusMonitor\n    {\n        void Persist(Action<JobSchedule> scheduling);\n\n        void MarkScheduled<T>(DateTimeOffset nextTime);\n        IJobRunTracker TrackJob<T>(int attempts, T job) where T : IJob;\n    }\n\n    public interface IJobRunTracker\n    {\n        void Success(DateTimeOffset nextTime);\n        void Failure(Exception ex);\n        DateTimeOffset Now();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Persistence/InMemorySchedulePersistence.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.Util;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence\n{\n    public class InMemorySchedulePersistence : ISchedulePersistence\n    {\n        private readonly Cache<string, JobStatusDTO> _statusCache = new Cache<string, JobStatusDTO>(id => {\n            var parts = id.Split('/');\n            return new JobStatusDTO {JobKey = parts.Last(), NodeName = parts.First()};\n        }); \n\n        private readonly Cache<string, ScheduledRunHistory> _history = new Cache<string, ScheduledRunHistory>(id => new ScheduledRunHistory()); \n\n        public IEnumerable<JobStatusDTO> FindAllActive(string nodeName)\n        {\n            return _statusCache.Where(x => x.NodeName == nodeName && x.Status != JobExecutionStatus.Inactive);\n        }\n\n        public IEnumerable<JobStatusDTO> FindAll(string nodeName)\n        {\n            return _statusCache.Where(x => x.NodeName == nodeName);\n        }\n\n        public void Persist(IEnumerable<JobStatusDTO> statuses)\n        {\n            statuses.Each(x => {\n                _statusCache[x.Id] = x;\n            });\n        }\n\n        public void Persist(JobStatusDTO status)\n        {\n            if (_statusCache.Has(status.Id) && status.LastExecution == null)\n            {\n                status.LastExecution = _statusCache[status.Id].LastExecution;\n            }\n\n            _statusCache[status.Id] = status;\n        }\n\n        public JobStatusDTO Find(string nodeName, string jobKey)\n        {\n            return _statusCache[JobStatusDTO.ToId(nodeName, jobKey)];\n        }\n\n        public void RecordHistory(string nodeName, string jobKey, JobExecutionRecord record)\n        {\n            var id = ScheduledRunHistory.ToId(nodeName, jobKey);\n            _history[id].Append(record, 100);\n\n        }\n\n        public IEnumerable<JobExecutionRecord> FindHistory(string nodeName, string jobKey)\n        {\n            var id = ScheduledRunHistory.ToId(nodeName, jobKey);\n            return _history[id].Records;\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Persistence/JobExecutionRecord.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence\n{\n    public class JobExecutionRecord\n    {\n        public const string ExceptionSeparator = \"\\n-----------------------------\\n\";\n        public long Duration { get; set; }\n        public DateTimeOffset Finished { get; set; }\n        public bool Success { get; set; }\n        public string ExceptionText { get; set; }\n        public int Attempts { get; set; }\n        public string Executor { get; set; }\n\n\n        public override string ToString()\n        {\n            if (Success)\n            {\n                return \"Succeeded at {0} on node '{1}' in {2} milliseconds\"\n                    .ToFormat(Finished.ToLocalTime(), Executor, Duration);\n            }\n\n            return \"Failed at {0} on node {1} in {2} milliseconds\"\n                .ToFormat(Finished.ToLocalTime(), Executor, Duration);\n        }\n\n        protected bool Equals(JobExecutionRecord other)\n        {\n            return Duration.Equals(other.Duration) && Finished.Equals(other.Finished) && Success.Equals(other.Success);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((JobExecutionRecord) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                var hashCode = Duration.GetHashCode();\n                hashCode = (hashCode*397) ^ Finished.GetHashCode();\n                hashCode = (hashCode*397) ^ Success.GetHashCode();\n                return hashCode;\n            }\n        }\n\n        public void ReadException(Exception exception)\n        {\n            if (exception is AggregateException)\n            {\n                ExceptionText = exception.As<AggregateException>()\n                    .InnerExceptions.Select(x => x.ToString())\n                    .Join(ExceptionSeparator);\n            }\n            else\n            {\n                ExceptionText = exception.ToString();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Persistence/JobExecutionStatus.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence\n{\n    public enum JobExecutionStatus\n    {\n        Scheduled,\n        Executing,\n        Completed,\n        Inactive,\n        Failed\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Persistence/JobSchedule.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.Util;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence\n{\n    public class JobSchedule : IEnumerable<JobStatus>\n    {\n        private readonly Cache<Type, JobStatus> _status =\n            new Cache<Type, JobStatus>(x => new JobStatus(x));\n\n\n        public JobSchedule()\n        {\n        }\n\n        public JobSchedule(IEnumerable<JobStatus> all)\n        {\n            all.Each(x => _status[x.JobType] = x);\n        }\n\n        public JobStatus Find(Type jobType)\n        {\n            return _status[jobType];\n        }\n\n        public JobStatus Schedule(Type jobType, DateTimeOffset nextTime)\n        {\n            var status = _status[jobType];\n            status.NextTime = nextTime;\n\n            return status;\n        }\n\n        public void RemoveObsoleteJobs(IEnumerable<Type> jobTypes)\n        {\n            _status.Where(x => !jobTypes.Contains(x.JobType)).Each(x => {\n                x.Status = JobExecutionStatus.Inactive;\n                x.NextTime = null;\n            });\n        }\n\n        public IEnumerator<JobStatus> GetEnumerator()\n        {\n            return _status.GetEnumerator();\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return GetEnumerator();\n        }\n\n        public IEnumerable<JobStatus> Active()\n        {\n            return _status.Where(x => x.Status != JobExecutionStatus.Inactive);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Persistence/JobStatus.cs",
    "content": "using System;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence\n{\n    public class JobStatus \n    {\n        public static JobStatus For<T>(DateTimeOffset nextTime)\n        {\n            return new JobStatus(typeof (T), nextTime);\n        }\n\n        public JobStatus(Type jobType)\n        {\n            JobType = jobType;\n        }\n\n        public JobStatus(Type jobType, DateTimeOffset nextTime)\n        {\n            JobType = jobType;\n            NextTime = nextTime;\n        }\n\n        public JobExecutionStatus Status { get; set; }\n\n        public Type JobType { get; set; }\n        public DateTimeOffset? NextTime { get; set; }\n        public JobExecutionRecord LastExecution { get; set; }\n\n        protected bool Equals(JobStatus other)\n        {\n            return string.Equals(JobType, other.JobType) && NextTime.Equals(other.NextTime);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((JobStatus) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((JobType != null ? JobType.GetHashCode() : 0)*397) ^ NextTime.GetHashCode();\n            }\n        }\n\n        public JobStatusDTO ToDTO(string nodeName)\n        {\n            return new JobStatusDTO\n            {\n                NodeName = nodeName,\n                JobKey = GetKey(JobType),\n                LastExecution = LastExecution,\n                NextTime = NextTime,\n                Status = Status\n            };\n        }\n\n        public static string GetKey(Type jobType)\n        {\n            return jobType.HasAttribute<JobKeyAttribute>() \n                ? jobType.GetAttribute<JobKeyAttribute>().Key \n                : jobType.Name;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Persistence/JobStatusDTO.cs",
    "content": "﻿using System;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence\n{\n    public class JobStatusDTO\n    {\n        public static string ToId(string node, string jobKey)\n        {\n            return node + \"/\" + jobKey;\n        }\n\n        public string JobKey { get; set; }\n\n        public string Id\n        {\n            get\n            {\n                return ToId(NodeName, JobKey);\n            }\n        }\n\n        public DateTimeOffset? NextTime { get; set; }\n        public JobExecutionRecord LastExecution { get; set; }\n        public string NodeName { get; set; }\n        public JobExecutionStatus Status { get; set; }\n        public string Executor { get; set; }\n\n        public DateTimeOffset? Started { get; set; }\n\n        protected bool Equals(JobStatusDTO other)\n        {\n            return string.Equals(NodeName, other.NodeName) && string.Equals(JobKey, other.JobKey);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((JobStatusDTO) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((NodeName != null ? NodeName.GetHashCode() : 0)*397) ^ (JobKey != null ? JobKey.GetHashCode() : 0);\n            }\n        }\n\n        public string GetStatusDescription()\n        {\n            if (Executor.IsNotEmpty()) return \"{0} on Node '{1}'\".ToFormat(Status, Executor);\n\n            return Status.ToString();\n        }\n\n        public string GetLastExecutionDescription()\n        {\n            if (LastExecution == null) return \"None\";\n\n            return LastExecution.ToString();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Persistence/JobStatusExtensions.cs",
    "content": "using System.Collections.Generic;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence\n{\n    public static class JobStatusExtensions\n    {\n        public static JobSchedule ToSchedule(this IEnumerable<JobStatus> statuses)\n        {\n            return new JobSchedule(statuses);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Persistence/ScheduleStatusMonitor.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Dates;\nusing FubuCore.Logging;\nusing FubuCore.Util;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence\n{\n    public class ScheduleStatusMonitor : IScheduleStatusMonitor\n    {\n        private readonly ChannelGraph _channels;\n        private readonly ISchedulePersistence _persistence;\n        private readonly ILogger _logger;\n        private readonly ISystemTime _systemTime;\n        private readonly Cache<string, Type> _jobTypes = new Cache<string, Type>(x => null);\n\n        public ScheduleStatusMonitor(ChannelGraph channels, ScheduledJobGraph jobs, ISchedulePersistence persistence,\n            ILogger logger, ISystemTime systemTime)\n        {\n            _channels = channels;\n            _persistence = persistence;\n            _logger = logger;\n            _systemTime = systemTime;\n\n            jobs.Jobs.Each(j => {\n                var key = JobStatus.GetKey(j.JobType);\n                _jobTypes[key] = j.JobType;\n            });\n        }\n\n\n        public void Persist(Action<JobSchedule> scheduling)\n        {\n            var schedule = _persistence.FindAll(_channels.Name).Select(ToStatus)\n                .Where(x => x.JobType != null).ToSchedule();\n\n            scheduling(schedule);\n\n            _persistence.Persist(schedule.Select(x => x.ToDTO(_channels.Name)).ToArray());\n        }\n\n        public JobStatus ToStatus(JobStatusDTO dto)\n        {\n            return new JobStatus(_jobTypes[dto.JobKey])\n            {\n                Status = dto.Status,\n                LastExecution = dto.LastExecution,\n                NextTime = dto.NextTime\n            };\n        }\n\n        private void modifyStatus<T>(Action<JobStatusDTO> change, string failureMessage)\n        {\n            var jobKey = JobStatus.GetKey(typeof (T));\n            try\n            {\n                var status = _persistence.Find(_channels.Name, jobKey);\n                if (status == null)\n                {\n                    _logger.Info(() => \"Unable to find a persisted record of Job {0} on channel {1}, creating a new one\".ToFormat(jobKey, _channels.Name));\n                    status = new JobStatusDTO {NodeName = _channels.Name, JobKey = jobKey};\n                }\n\n                status.Started = null;\n\n                var current = status.LastExecution;\n\n                change(status);\n\n                _persistence.Persist(status);\n\n                if (status.LastExecution != null && !ReferenceEquals(current, status.LastExecution))\n                {\n                    _persistence.RecordHistory(_channels.Name, jobKey, status.LastExecution);\n                }\n            }\n            catch (Exception e)\n            {\n                var id = JobStatusDTO.ToId(_channels.Name, jobKey);\n                _logger.Error(id, failureMessage, e);\n            }\n        }\n\n        public void MarkScheduled<T>(DateTimeOffset nextTime)\n        {\n            modifyStatus<T>(_ => {\n                _.Status = JobExecutionStatus.Scheduled;\n                _.NextTime = nextTime;\n            }, \"Trying to mark a scheduled job as scheduled\");\n        }\n\n        public void MarkExecuting<T>()\n        {\n            modifyStatus<T>(_ => {\n                _.Started = _systemTime.UtcNow();\n                _.Status = JobExecutionStatus.Executing;\n                _.Executor = _channels.NodeId;\n            }, \"Trying to mark a scheduled job as executing\");\n        }\n\n        public void MarkCompletion<T>(JobExecutionRecord record)\n        {\n            record.Executor = _channels.NodeId;\n\n            modifyStatus<T>(_ => {\n                _.Status = record.Success ? JobExecutionStatus.Completed : JobExecutionStatus.Failed;\n                _.LastExecution = record;\n                _.Executor = null;\n            }, \"Trying to mark a scheduled job as completed\");\n        }\n\n        \n\n        public IJobRunTracker TrackJob<T>(int attempts, T job) where T : IJob\n        {\n            _logger.InfoMessage(() => new ScheduledJobStarted(job));\n\n            return new JobRunTracker<T>(_channels.NodeId, this, job, attempts);\n        }\n\n        public class JobRunTracker<T> : IJobRunTracker where T : IJob\n        {\n            private readonly string _nodeId;\n            private readonly ScheduleStatusMonitor _parent;\n            private readonly T _job;\n            private readonly int _attempts;\n            private readonly Stopwatch _stopwatch = new Stopwatch();\n\n            public JobRunTracker(string nodeId, ScheduleStatusMonitor parent, T job, int attempts)\n            {\n                _nodeId = nodeId;\n                _parent = parent;\n                _job = job;\n                _attempts = attempts;\n                _stopwatch.Start();\n            }\n\n            private JobExecutionRecord toExecutionRecord()\n            {\n                _stopwatch.Stop();\n\n                return new JobExecutionRecord\n                {\n                    Executor = _nodeId,\n                    Attempts = _attempts,\n                    Duration = _stopwatch.ElapsedMilliseconds,\n                    Finished = _parent._systemTime.UtcNow()\n                };\n            }\n\n            public void Success(DateTimeOffset nextTime)\n            {\n                var record = toExecutionRecord();\n                record.Success = true;\n\n                _parent._logger.InfoMessage(() => new ScheduledJobSucceeded(_job));\n\n                _parent.modifyStatus<T>(_ =>\n                {\n                    _.Status = JobExecutionStatus.Completed;\n                    _.LastExecution = record;\n                    _.NextTime = nextTime;\n                    _.Executor = null;\n                }, \"Trying to mark a scheduled job as completed\");\n            }\n\n            public void Failure(Exception ex)\n            {\n                var record = toExecutionRecord();\n                record.Success = false;\n                record.ReadException(ex);\n\n                _parent._logger.Error(\"Scheduled job {0} failed\".ToFormat(_job), ex);\n                _parent._logger.InfoMessage(() => new ScheduledJobFailed(_job, ex));\n\n                _parent.MarkCompletion<T>(record);\n            }\n\n            public DateTimeOffset Now()\n            {\n                return _parent._systemTime.UtcNow();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/Persistence/ScheduledRunHistory.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence\n{\n    public class ScheduledRunHistory\n    {\n        public static string ToId(string node, string job)\n        {\n            return \"History-\" + JobStatusDTO.ToId(node, job);\n        }\n\n        public string JobKey { get; set; }\n        public string NodeName { get; set; }\n\n        public string Id\n        {\n            get\n            {\n                return ToId(NodeName, JobKey);\n            }\n        }\n        private readonly Queue<JobExecutionRecord> _records = new Queue<JobExecutionRecord>();\n\n        public JobExecutionRecord[] Records\n        {\n            get\n            {\n                return _records.ToArray();\n            }\n            set\n            {\n                _records.Clear();\n                if (value != null)\n                {\n                    value.Each(x => _records.Enqueue(x));\n                }\n            }\n        }\n\n        public void Append(JobExecutionRecord record, int maxRecords)\n        {\n            _records.Enqueue(record);\n            while (_records.Count > maxRecords)\n            {\n                _records.Dequeue();\n            }\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/RescheduleRequest.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Polling;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs\n{\n    public class RescheduleRequest<T> where T : IJob\n    {\n        public DateTimeOffset NextTime { get; set; }\n\n        protected bool Equals(RescheduleRequest<T> other)\n        {\n            return NextTime.Equals(other.NextTime);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((RescheduleRequest<T>) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return NextTime.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Reschedule job {0} to {1}\", typeof(T).GetFullName(), NextTime);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/ScheduledJob.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.Runtime.Routing;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Configuration;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs\n{\n    public class ScheduledJob<T> : IScheduledJob<T>, DescribesItself where T : IJob\n    {\n        public ScheduledJob(IScheduleRule scheduler)\n        {\n            Scheduler = scheduler;\n            Timeout = 5.Minutes();\n            MaximumTimeBeforeRescheduling = 15.Minutes();\n        }\n\n        public TimeSpan MaximumTimeBeforeRescheduling { get; set; }\n\n        // This will be completely tested through integration\n        // tests only\n        void IScheduledJob.Execute(IJobExecutor executor)\n        {\n            executor.Execute<T>(Timeout);\n        }\n\n        public Task<RescheduleRequest<T>> ToTask(IJob job, IJobRunTracker tracker)\n        {\n            var timeout = new JobTimeout(Timeout);\n            return timeout.Execute(job).ContinueWith(t => {\n                if (t.IsFaulted)\n                {\n                    tracker.Failure(t.Exception);\n                    throw t.Exception;\n                }\n                \n                var nextTime = Scheduler.ScheduleNextTime(tracker.Now(), LastExecution);\n                tracker.Success(nextTime);\n\n                return new RescheduleRequest<T>\n                {\n                    NextTime = nextTime\n                };\n            });\n        }\n\n        public Accessor Channel { get; set; }\n        public TimeSpan Timeout { get; set; }\n\n        IRoutingRule IScheduledJob.ToRoutingRule()\n        {\n            return new ScheduledJobRoutingRule<T>();\n        }\n\n        public Type JobType\n        {\n            get { return typeof (T); }\n        }\n\n        public IScheduleRule Scheduler { get; private set; }\n        public JobExecutionRecord LastExecution { get; set; }\n\n        void IScheduledJob.Initialize(DateTimeOffset now, IJobExecutor executor, JobSchedule schedule)\n        {\n            var status = schedule.Find(JobType);\n            LastExecution = status.LastExecution;\n\n            var next = Scheduler.ScheduleNextTime(now, LastExecution);\n\n            schedule.Schedule(JobType, next);\n\n            executor.Schedule(this, next);\n        }\n\n        public bool ShouldReschedule(DateTimeOffset now, IJobTimer timer)\n        {\n            var execution = timer.StatusFor(typeof (T));\n            if (execution == null) return true;\n\n            if (execution.Status == JobExecutionStatus.Scheduled)\n            {\n                return false;\n            }\n\n            var age = now.Subtract(execution.ExpectedTime);\n            return age > MaximumTimeBeforeRescheduling;\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = \"Job Type: \" + typeof (T).GetFullName();\n            description.ShortDescription = typeof (T).GetFullName();\n            typeof(T).ForAttribute<DescriptionAttribute>(_ => {\n                description.ShortDescription = _.Description;\n            });\n\n            if (Channel != null) description.Properties[\"Channel\"] = Channel.Name;\n            description.Properties[\"Maximum Time Before Rescheduling\"] = MaximumTimeBeforeRescheduling.ToString();\n            description.AddChild(\"Scheduler\", Scheduler);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/ScheduledJobGraph.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Configuration;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs\n{\n    public class ScheduledJobGraph : IFeatureSettings\n    {\n        public ScheduledJobGraph()\n        {\n            MaxJobExecutionRecordsToKeepInHistory = 50;\n        }\n\n\n        public readonly IList<IScheduledJob> Jobs = new List<IScheduledJob>();\n        public Accessor DefaultChannel { get; set; }\n\n        public int MaxJobExecutionRecordsToKeepInHistory { get; set; }\n\n        public void DetermineSchedule(DateTimeOffset now, IJobExecutor executor, JobSchedule schedule)\n        {\n            // Make sure that all existing jobs are schedules\n            Jobs.Each(x => x.Initialize(now, executor, schedule));\n\n            var types = Jobs.Select(x => x.JobType).ToArray();\n            schedule.RemoveObsoleteJobs(types);\n        }\n\n        public IScheduledJob FindJob(Type jobType)\n        {\n            return Jobs.FirstOrDefault(x => x.JobType == jobType);\n        }\n\n        public IScheduledJob<T> FindJob<T>() where T : IJob\n        {\n            return Jobs.OfType<IScheduledJob<T>>().FirstOrDefault();\n        }\n\n        void IFeatureSettings.Apply(FubuRegistry registry)\n        {\n            registry.Config.Add(new ScheduledJobHandlerSource(Jobs.Select(x => x.JobType).ToArray()));\n\n            Jobs.Each(x =>\n            {\n                Type jobType = typeof(IScheduledJob<>).MakeGenericType(x.JobType);\n                registry.Services.AddService(jobType, new ObjectInstance(x));\n\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ScheduledJobs/ScheduledJobPersistentTask.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\n\nnamespace FubuMVC.Core.ServiceBus.ScheduledJobs\n{\n    public class ScheduledJobPersistentTask : IPersistentTaskSource, IPersistentTask\n    {\n        private readonly IScheduledJobController _controller;\n        public static readonly Uri Uri = \"scheduled://jobs\".ToUri();\n\n        public ScheduledJobPersistentTask(IScheduledJobController controller)\n        {\n            _controller = controller;\n        }\n\n        public string Protocol => Uri.Scheme;\n\n        public IEnumerable<Uri> PermanentTasks()\n        {\n            yield return Uri;\n        }\n\n        public IPersistentTask CreateTask(Uri uri)\n        {\n            if (uri != Uri) throw new ArgumentOutOfRangeException(\"uri\",\"Only '{0}' is allowed in this method\".ToFormat(uri));\n\n            return this;\n        }\n\n        public Uri Subject => Uri;\n\n        public void AssertAvailable()\n        {\n            _controller.PerformHealthChecks();\n        }\n\n        public void Activate()\n        {\n            _controller.Activate();\n        }\n\n        public void Deactivate()\n        {\n            _controller.Deactivate();\n        }\n\n        public bool IsActive => _controller.IsActive();\n\n        public Task<ITransportPeer> SelectOwner(IEnumerable<ITransportPeer> peers)\n        {\n            var ordered = peers.OrderBy(x => x.ControlChannel.ToString());\n            var completion = new OrderedAssignment(Uri, ordered);\n\n            return completion.SelectOwner();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Scheduling/IScheduler.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.ServiceBus.Scheduling\n{\n    public interface IScheduler : IDisposable\n    {\n        void Start(Action action);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Scheduling/TaskScheduler.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServiceBus.Scheduling\n{\n    public class TaskScheduler : IScheduler\n    {\n        private readonly Task[] _tasks;\n        private bool _stopped = true;\n\n        public TaskScheduler(int taskCount)\n        {\n            _tasks = new Task[taskCount];\n        }\n\n        public int TaskCount {get { return _tasks.Length; }}\n        public IEnumerable<Task> Tasks { get { return _tasks.Where(x => x != null).ToArray(); } } \n\n        public void Start(Action action)\n        {\n            _stopped = false;\n            for (int i = 0; i < TaskCount; i++)\n            {\n                var task = Task.Factory.StartNew(action, TaskCreationOptions.LongRunning);\n                _tasks[i] = task;\n            }\n        }\n\n        public void Dispose()\n        {\n            if (_stopped)\n                return;\n\n            _stopped = true;\n            Task.WaitAll(_tasks, 5.Seconds());\n        }\n\n        public static IScheduler Default()\n        {\n            return new TaskScheduler(1);\n        }\n\n        public override string ToString()\n        {\n            return \"TaskScheduler Count: \" + _tasks.Length;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Scheduling/ThreadScheduler.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServiceBus.Scheduling\n{\n    public class ThreadScheduler : IScheduler\n    {\n        private readonly Thread[] _threads;\n        private bool _stopped = true;\n\n        public int ThreadCount { get { return _threads.Length; }}\n\n        public IEnumerable<Thread> Threads {get { return _threads.Where(x => x != null).ToArray(); }}\n\n        public ThreadScheduler(int threadCount)\n        {\n            _threads = new Thread[threadCount];\n        }\n\n        public void Start(Action action)\n        {\n            _stopped = false;\n            for (int i = 0; i < ThreadCount; ++i)\n            {\n                var thread = new Thread(() => action())\n                {\n                    IsBackground = true,\n                    Name = \"FubuMVC Receiving Thread\",\n                };\n                thread.Start();\n                _threads[i] = thread;\n            }\n        }\n\n        public static IScheduler Default()\n        {\n            return new ThreadScheduler(1);\n        }\n\n        public void Dispose()\n        {\n            if (_stopped)\n                return;\n\n            _stopped = true;\n\n            foreach (var thread in _threads)\n            {\n                if (!thread.Join(5.Seconds().Milliseconds))\n                {\n                    thread.Abort();\n                }\n            }\n        }\n\n        public override string ToString()\n        {\n            return \"ThreadScheduler Count: \" + _threads.Length;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ServiceBus.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Dates;\nusing FubuMVC.Core.ServiceBus.Events;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\n\nnamespace FubuMVC.Core.ServiceBus\n{\n    public class ServiceBus : IServiceBus\n    {\n        private readonly IEnvelopeSender _sender;\n        private readonly IEventAggregator _events;\n        private readonly IChainInvoker _invoker;\n        private readonly ISystemTime _systemTime;\n        private readonly ISubscriptionRepository _subscriptionRepository;\n\n        public ServiceBus(IEnvelopeSender sender, IEventAggregator events, IChainInvoker invoker, ISystemTime systemTime, ISubscriptionRepository subscriptionRepository)\n        {\n            _sender = sender;\n            _events = events;\n            _invoker = invoker;\n            _systemTime = systemTime;\n            _subscriptionRepository = subscriptionRepository;\n        }\n\n        // The destination override is tested as part of the monitoring integration\n        public Task<TResponse> Request<TResponse>(object request, RequestOptions options = null)\n        {\n            options = options ?? new RequestOptions();\n\n            var envelope = new Envelope\n            {\n                Message = request,\n                ReplyRequested = typeof(TResponse).Name\n            };\n\n            if (options.Destination != null)\n            {\n                envelope.Destination = options.Destination;\n            }\n\n            var listener = new ReplyListener<TResponse>(_events, envelope.CorrelationId, options.Timeout);\n            _events.AddListener(listener);\n\n            _sender.Send(envelope);\n\n            return listener.Completion;\n        }\n\n        public void Send<T>(T message)\n        {\n            _sender.Send(new Envelope {Message = message});\n        }\n\n        public void Send<T>(Uri destination, T message)\n        {\n            _sender.Send(new Envelope {Message = message, Destination = destination});\n        }\n\n        public void Consume<T>(T message)\n        {\n            _invoker.InvokeNow(message);\n        }\n\n        public void DelaySend<T>(T message, DateTime time)\n        {\n            _sender.Send(new Envelope\n            {\n                Message = message,\n                ExecutionTime = time.ToUniversalTime()\n            });\n        }\n\n        public void DelaySend<T>(T message, TimeSpan delay)\n        {\n            DelaySend(message, _systemTime.UtcNow().Add(delay));\n        }\n\n        public Task SendAndWait<T>(T message)\n        {\n            return GetSendAndWaitTask(message);\n        }\n\n        public Task SendAndWait<T>(Uri destination, T message)\n        {\n            return GetSendAndWaitTask(message, destination);\n        }\n\n        private Task GetSendAndWaitTask<T>(T message, Uri destination = null)\n        {\n            var envelope = new Envelope\n            {\n                Message = message,\n                AckRequested = true,\n                Destination = destination\n            };\n\n            var listener = new ReplyListener<Acknowledgement>(_events, envelope.CorrelationId, 10.Minutes());\n            _events.AddListener(listener);\n\n            _sender.Send(envelope);\n\n            return listener.Completion;\n        }\n\n        public async Task RemoveSubscriptionsForThisNodeAsync()\n        {\n            var subscriptions = _subscriptionRepository.LoadSubscriptions(SubscriptionRole.Subscribes);\n            if (!subscriptions.Any())\n                return;\n\n            subscriptions = _subscriptionRepository.RemoveLocalSubscriptions();\n            var tasks = subscriptions.GroupBy(x => x.Source)\n                .Select(x => SendAndWait(x.Key, new SubscriptionsRemoved { Receiver = x.First().Receiver }));\n            await Task.WhenAll(tasks).ConfigureAwait(false);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/ServiceBusActivator.cs",
    "content": "﻿using FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\n\nnamespace FubuMVC.Core.ServiceBus\n{\n    public class ServiceBusActivator : IActivator, IDeactivator\n    {\n        private readonly TransportActivator _transports;\n        private readonly SubscriptionActivator _subscriptions;\n        private readonly IScheduledJobController _scheduledJobs;\n        private readonly PollingJobActivator _pollingJobs;\n        private readonly TransportSettings _settings;\n        private readonly ChannelGraph _graph;\n\n        public ServiceBusActivator(TransportActivator transports, SubscriptionActivator subscriptions, IScheduledJobController scheduledJobs, PollingJobActivator pollingJobs, TransportSettings settings, ChannelGraph graph)\n        {\n            _transports = transports;\n            _subscriptions = subscriptions;\n            _scheduledJobs = scheduledJobs;\n            _pollingJobs = pollingJobs;\n            _settings = settings;\n            _graph = graph;\n        }\n\n        public void Activate(IActivationLog log, IPerfTimer timer)\n        {\n            if (!_settings.Enabled)\n            {\n                log.Trace(\"Skipping activation because FubuTranportation is disabled.\");\n                return;\n            }\n\n            timer.Record(\"Activating Transports and Starting Listening\", () => _transports.Activate(log, timer));\n            timer.Record(\"Activating Subscriptions\", () => _subscriptions.Activate(log, timer));\n            timer.Record(\"Activating Polling Jobs\", () => _pollingJobs.Activate(log, timer));\n        }\n\n        public void Deactivate(IActivationLog log)\n        {\n            if(_settings.Enabled) return;\n\n            log.Trace(\"Shutting down the scheduled jobs\");\n            _scheduledJobs.Deactivate();\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/StringExtensions.cs",
    "content": "﻿using System;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServiceBus\n{\n    public static class StringExtensions\n    {\n         public static Uri ToUri(this string uriString)\n         {\n             return uriString.IsEmpty() ? null : new Uri(uriString);\n         }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/GroupSubscriptionRequirement.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    public class GroupSubscriptionRequirement<T> : ISubscriptionRequirement<T>\n    {\n        private readonly Accessor _source;\n        private readonly Accessor _receiver;\n        private readonly IList<Type> _messageTypes = new List<Type>(); \n\n        public GroupSubscriptionRequirement(Expression<Func<T, Uri>> sourceProperty, Expression<Func<T, Uri>> receiverProperty)\n        {\n            _source = ReflectionHelper.GetAccessor(sourceProperty);\n            _receiver = ReflectionHelper.GetAccessor(receiverProperty);\n        }\n\n        public IEnumerable<Subscription> Determine(T settings, ChannelGraph graph)\n        {\n            var source = _source.GetValue(settings).As<Uri>();\n            if (source == null) throw new InvalidOperationException(\"No Uri established for {0}.{1}\".ToFormat(typeof(T).Name, _source.Name));\n\n            var receiver = _receiver.GetValue(settings).As<Uri>();\n            if (receiver == null) throw new InvalidOperationException(\"No Uri established for {0}.{1}\".ToFormat(typeof(T).Name, _receiver.Name));\n\n            foreach (var messageType in _messageTypes)\n            {\n                yield return new Subscription(messageType)\n                {\n                    NodeName = graph.Name,\n                    Receiver = receiver,\n                    Source = source\n                };\n            }\n\n\n        }\n\n        public void AddType(Type type)\n        {\n            _messageTypes.Add(type);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/ISubscriptionCache.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    public interface ISubscriptionCache\n    {\n        void ClearAll();\n\n        IEnumerable<ChannelNode> FindDestinationChannels(Envelope envelope);\n\n        Uri ReplyUriFor(ChannelNode destination);\n\n        /// <summary>\n        /// Called internally\n        /// </summary>\n        /// <param name=\"subscriptions\"></param>\n        void LoadSubscriptions(IEnumerable<Subscription> subscriptions);\n\n        IEnumerable<Subscription> ActiveSubscriptions { get; }\n\n        string NodeName { get; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/ISubscriptionPersistence.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    public interface ISubscriptionPersistence\n    {\n        IEnumerable<Subscription> LoadSubscriptions(string name, SubscriptionRole role);\n        void Persist(IEnumerable<Subscription> subscriptions);\n        void Persist(Subscription subscription);\n\n        IEnumerable<TransportNode> NodesForGroup(string name);\n        void Persist(params TransportNode[] nodes);\n\n        IEnumerable<TransportNode> AllNodes();\n        IEnumerable<Subscription> AllSubscriptions();\n        TransportNode LoadNode(string nodeId);\n\n        void Alter(string id, Action<TransportNode> alteration);\n        void DeleteSubscriptions(IEnumerable<Subscription> subscriptions);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/ISubscriptionRepository.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    // TODO -- rename to ITransportNodeRepository\n    public interface ISubscriptionRepository\n    {\n        void PersistSubscriptions(params Subscription[] requirements);\n        IEnumerable<Subscription> LoadSubscriptions(SubscriptionRole role);\n        IEnumerable<TransportNode> FindPeers();\n        void PersistPublishing(params Subscription[] subscriptions);\n\n        void Persist(params TransportNode[] nodes);\n\n        TransportNode FindLocal();\n        TransportNode FindPeer(string nodeId);\n\n        void AddOwnershipToThisNode(Uri subject);\n        void AddOwnershipToThisNode(IEnumerable<Uri> subjects);\n        void RemoveOwnershipFromThisNode(Uri subject);\n        void RemoveOwnershipFromNode(string nodeId, Uri subject);\n        void RemoveOwnershipFromNode(string nodeId, IEnumerable<Uri> subjects);\n        void RemoveOwnershipFromThisNode(IEnumerable<Uri> subjects);\n        IEnumerable<Subscription> RemoveLocalSubscriptions();\n        void RemoveSubscriptionsForReceiver(Uri receiver);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/ISubscriptionRequirement.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    public interface ISubscriptionRequirement\n    {\n        IEnumerable<Subscription> DetermineRequirements();\n    }\n\n    public interface ISubscriptionRequirement<T>\n    {\n        IEnumerable<Subscription> Determine(T settings, ChannelGraph graph);\n        void AddType(Type type);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/InMemorySubscriptionPersistence.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing FubuCore;\nusing FubuCore.Util;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    public class InMemorySubscriptionPersistence : ISubscriptionPersistence\n    {\n        private readonly Cache<Guid, Subscription> _subscriptions = new Cache<Guid, Subscription>();\n        private readonly IList<TransportNode> _nodes = new List<TransportNode>();\n        private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();\n\n\n        public void ClearAll()\n        {\n            _lock.Write(() =>\n            {\n                _subscriptions.ClearAll();\n                _nodes.Clear();\n            });\n        }\n\n        public IEnumerable<Subscription> LoadSubscriptions(string name, SubscriptionRole role)\n        {\n            return _lock.Read(() => {\n                return _subscriptions.Where(x => x.NodeName.EqualsIgnoreCase(name) && x.Role == role).ToArray();\n            });\n        }\n\n        public void Persist(IEnumerable<Subscription> subscriptions)\n        {\n            _lock.Write(() => subscriptions.Each(persist));\n        }\n\n        public void Persist(Subscription subscription)\n        {\n            _lock.Write(() => persist(subscription));\n        }\n\n        private void persist(Subscription subscription)\n        {\n            if (subscription.Id == Guid.Empty)\n            {\n                subscription.Id = Guid.NewGuid();\n            }\n\n            _subscriptions[subscription.Id] = subscription;\n        }\n\n        public IEnumerable<TransportNode> NodesForGroup(string name)\n        {\n            return _lock.Read(() => {\n                return _nodes.Where(x => x.NodeName.EqualsIgnoreCase(name));\n            });\n        }\n\n        public void Persist(params TransportNode[] nodes)\n        {\n            _lock.Write(() => {\n                nodes.Each(node =>\n                {\n                    if (node.Id.IsEmpty())\n                    {\n                        throw new ArgumentException(\"An Id string is required\", nameof(node));\n                    }\n\n                    _nodes.Fill(node);\n                });\n            });\n        }\n\n        public IEnumerable<TransportNode> AllNodes()\n        {\n            return _lock.Read(() => _nodes.ToArray());\n        }\n\n        public IEnumerable<Subscription> AllSubscriptions()\n        {\n            return _lock.Read(() => _subscriptions.ToArray());\n        }\n\n        public TransportNode LoadNode(string nodeId)\n        {\n            return _lock.Read(() => {\n                return _nodes.FirstOrDefault(x => x.Id == nodeId);\n            });\n        }\n\n        public void Alter(string id, Action<TransportNode> alteration)\n        {\n            _lock.Write(() => {\n                var node = _nodes.FirstOrDefault(x => x.Id == id);\n                alteration(node);\n            });\n        }\n\n        public void DeleteSubscriptions(IEnumerable<Subscription> subscriptions)\n        {\n            _lock.Write(() => subscriptions.Each(x => _subscriptions.Remove(x.Id)));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/InvalidOrMissingTransportException.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.Serialization;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    [Serializable]\n    public class InvalidOrMissingTransportException : Exception\n    {\n        public static string ToMessage(IEnumerable<ITransport> transports, IEnumerable<ChannelNode> nodes)\n        {\n            return \"Missing channel Uri configuration or unknown transport types\\nAvailable transports are \" +\n                   transports.Select(x => x.ToString()).Join(\", \") + \" and the invalid nodes are \\n\" +\n                   nodes.Select(x => { return \"Node '{0}'@{1}; \".ToFormat(x.Key, x.Uri); }).Join(\"\\n\");\n        }\n\n        public static string ToMessage(Exception ex, IEnumerable<ITransport> transports, IEnumerable<ChannelNode> nodes)\n        {\n            return ex.Message + \"\\nAvailable transports are \" + transports.Select(x => x.ToString()).Join(\", \") +\n                   \" and the nodes are \\n\" +\n                   nodes.Select(x => { return \"Node '{0}'@{1}, Incoming={2}; \".ToFormat(x.Key, x.Uri, x.Incoming); })\n                       .Join(\"\\n\");\n        }\n\n        public InvalidOrMissingTransportException(Exception ex, IEnumerable<ITransport> transports,\n            IEnumerable<ChannelNode> nodes)\n            : base(ToMessage(ex, transports, nodes), ex)\n        {\n        }\n\n        public InvalidOrMissingTransportException(IEnumerable<ITransport> transports, IEnumerable<ChannelNode> nodes)\n            : base(ToMessage(transports, nodes))\n        {\n        }\n\n        protected InvalidOrMissingTransportException(SerializationInfo info, StreamingContext context)\n            : base(info, context)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/LocalSubscriptionRequirement.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    public class LocalSubscriptionRequirement<T> : ISubscriptionRequirement<T>\n    {\n        private readonly IList<Type> _messageTypes = new List<Type>();\n        private readonly Accessor _accessor;\n\n        public LocalSubscriptionRequirement(Expression<Func<T, Uri>> sourceProperty)\n        {\n            _accessor = ReflectionHelper.GetAccessor(sourceProperty);\n        }\n\n        public IEnumerable<Subscription> Determine(T settings, ChannelGraph graph)\n        {\n            var source = _accessor.GetValue(settings).As<Uri>();\n            if (source == null) throw new InvalidOperationException(\"No Uri established for {0}.{1}\".ToFormat(typeof(T).Name, _accessor.Name));\n\n            var receiver = graph.ReplyChannelFor(source.Scheme);\n\n            foreach (var messageType in _messageTypes)\n            {\n                yield return new Subscription(messageType)\n                {\n                    NodeName = graph.Name,\n                    Receiver = receiver,\n                    Source = source\n                };\n            }\n        }\n\n        public void AddType(Type type)\n        {\n            _messageTypes.Add(type);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/Subscription.cs",
    "content": "﻿using System;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    public class Subscription\n    {\n        public static Subscription For<T>()\n        {\n            return new Subscription(typeof (T));\n        }\n\n        public Subscription(Type messageType)\n        {\n            MessageType = messageType.GetFullName();\n        }\n\n        public Subscription()\n        {\n        }\n\n        public Guid Id { get; set; }\n        public Uri Source { get; set; }\n        public Uri Receiver { get; set; }\n        public string MessageType { get; set; }\n        public string NodeName { get; set; }\n        public SubscriptionRole Role { get; set; }\n\n\n        public Subscription Clone()\n        {\n           var clone = (Subscription) this.MemberwiseClone();\n            clone.Id = Guid.Empty;\n\n            return clone;\n        }\n\n        public Subscription SourcedFrom(Uri uri)\n        {\n            Source = uri;\n            return this;\n        }\n\n        public Subscription ReceivedBy(Uri uri)\n        {\n            Receiver = uri;\n            return this;\n        }\n\n        protected bool Equals(Subscription other)\n        {\n            return Equals(Source, other.Source) && Equals(Receiver, other.Receiver) && string.Equals(MessageType, other.MessageType) && string.Equals(NodeName, other.NodeName) && string.Equals(Role, other.Role);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((Subscription) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                var hashCode = (Source != null ? Source.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (Receiver != null ? Receiver.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (MessageType != null ? MessageType.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (NodeName != null ? NodeName.GetHashCode() : 0);\n                return hashCode;\n            }\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Source: {0}, Receiver: {1}, MessageType: {2}, NodeName: {3}\", Source, Receiver, MessageType, NodeName);\n        }\n\n        public bool Matches(Type inputType)\n        {\n            return inputType.GetFullName() == MessageType;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/SubscriptionActivator.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    // Tested through Storyteller tests\n    public class SubscriptionActivator : IActivator\n    {\n        private readonly ISubscriptionRepository _repository;\n        private readonly IEnvelopeSender _sender;\n        private readonly ISubscriptionCache _cache;\n        private readonly IEnumerable<ISubscriptionRequirement> _requirements;\n        private readonly ChannelGraph _graph;\n        private readonly TransportSettings _settings;\n\n        public SubscriptionActivator(ISubscriptionRepository repository, IEnvelopeSender sender, ISubscriptionCache cache, IEnumerable<ISubscriptionRequirement> requirements, ChannelGraph graph,\n            TransportSettings settings)\n        {\n            _repository = repository;\n            _sender = sender;\n            _cache = cache;\n            _requirements = requirements;\n            _graph = graph;\n            _settings = settings;\n        }\n\n        public void Activate(IActivationLog log, IPerfTimer timer)\n        {\n            if (!_graph.HasChannels) return;\n\n            log.Trace(\"Determining subscriptions for node \" + _cache.NodeName);\n\n            // assuming that there are no automaticly persistent tasks\n            // upon startup\n            _repository.Persist(new TransportNode(_graph));\n\n            var requirements = determineStaticRequirements(log);\n\n\n            if (requirements.Any())\n            {\n                log.Trace(\"Found static subscription requirements:\");\n                requirements.Each(x => log.Trace(x.ToString()));\n            }\n            else\n            {\n                log.Trace(\"No static subscriptions found from registry\");\n            }\n\n            _repository.PersistSubscriptions(requirements);\n\n            var subscriptions = _repository.LoadSubscriptions(SubscriptionRole.Publishes);\n            _cache.LoadSubscriptions(subscriptions);\n\n            sendSubscriptions();\n        }\n\n        private Subscription[] determineStaticRequirements(IActivationLog log)\n        {\n            var requirements = _requirements.SelectMany(x => x.DetermineRequirements()).ToArray();\n            traceLoadedRequirements(log, requirements);\n            return requirements;\n        }\n\n        private void sendSubscriptions()\n        {\n            _repository.LoadSubscriptions(SubscriptionRole.Subscribes)\n                .GroupBy(x => x.Source)\n                .Each(group => sendSubscriptionsToSource(@group.Key, @group));\n        }\n\n        private static void traceLoadedRequirements(IActivationLog log, Subscription[] requirements)\n        {\n            log.Trace(\"Found subscription requirements:\");\n            requirements.Each(x => log.Trace(x.ToString()));\n        }\n\n        private void sendSubscriptionsToSource(Uri destination, IEnumerable<Subscription> subscriptions)\n        {\n            var envelope = new Envelope\n            {\n                Message = new SubscriptionRequested\n                {\n                    Subscriptions = subscriptions.ToArray()\n                },\n                Destination = destination\n            };\n\n            _sender.Send(envelope);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/SubscriptionCache.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    public class SubscriptionCache : ISubscriptionCache, IDisposable\n    {\n        private readonly ChannelGraph _graph;\n        private readonly IEnumerable<ITransport> _transports;\n        private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();\n        private readonly IDictionary<Type, IList<ChannelNode>> _routes = new Dictionary<Type, IList<ChannelNode>>();\n        private readonly Cache<Uri, ChannelNode> _volatileNodes;\n        private readonly IList<Subscription> _subscriptions = new List<Subscription>();\n\n        public SubscriptionCache(ChannelGraph graph, IEnumerable<ITransport> transports)\n        {\n            if (!transports.Any())\n            {\n                throw new Exception(\n                    \"No transports are registered.  FubuMVC's ServiceBus cannot function without at least one ITransport\");\n            }\n\n            _graph = graph;\n            _transports = transports;\n\n            _volatileNodes = new Cache<Uri, ChannelNode>(uri =>\n            {\n                var transport = _transports.FirstOrDefault(x => x.Protocol == uri.Scheme);\n                if (transport == null)\n                {\n                    throw new UnknownChannelException(uri);\n                }\n\n                var node = new ChannelNode { Uri = uri, Key = uri.ToString() };\n                node.Channel = transport.BuildDestinationChannel(node.Uri);\n\n                return node;\n            });\n        }\n\n        public void ClearAll()\n        {\n            _lock.Write(() =>\n            {\n                _routes.Clear();\n                _subscriptions.Clear();\n\n                _volatileNodes.Each(x => x.Dispose());\n                _volatileNodes.ClearAll();\n            });\n        }\n\n        public IEnumerable<ChannelNode> FindDestinationChannels(Envelope envelope)\n        {\n            if (envelope.Destination != null)\n            {\n                var uri = envelope.Destination;\n                var destination = findDestination(uri);\n\n                return new [] { destination };\n            }\n\n            var inputType = envelope.Message.GetType();\n            return _lock.MaybeWrite(() => _routes[inputType],\n                () => !_routes.ContainsKey(inputType),\n                () =>\n                {\n                    var nodes = FindSubscribingChannelsFor(inputType);\n                    _routes.Add(inputType, new List<ChannelNode>(nodes));\n                });\n        }\n\n        /// <summary>\n        /// Called internally\n        /// </summary>\n        /// <param name=\"subscriptions\"></param>\n        public void LoadSubscriptions(IEnumerable<Subscription> subscriptions)\n        {\n            _lock.Write(() =>\n            {\n                RemoveCachedRoutesForChangedSubscriptions(subscriptions);\n\n                _subscriptions.Clear();\n                _subscriptions.AddRange(subscriptions);\n            });\n        }\n\n        private void RemoveCachedRoutesForChangedSubscriptions(IEnumerable<Subscription> subscriptions)\n        {\n            _routes.Keys.ToList().Each(type =>\n            {\n                // This list of subscriptions is generally pretty small (less than 100),\n                // so multiple enumerations over the collection shouldn't be a big deal.\n                var existingSubscriptions = _subscriptions.Where(x => x.Matches(type));\n                var newSubscriptions = subscriptions.Where(x => x.Matches(type));\n                var differences = new HashSet<Subscription>(existingSubscriptions);\n                differences.SymmetricExceptWith(newSubscriptions);\n                if (differences.Any())\n                {\n                    _routes.Remove(type);\n                }\n            });\n        }\n\n        public IEnumerable<ChannelNode> FindSubscribingChannelsFor(Type inputType)\n        {\n            var staticNodes = _graph.Where(x => x.Publishes(inputType));\n\n            var subscriptions = _subscriptions.Where(x => x.Matches(inputType));\n            var dynamicNodes = subscriptions.Select(x => findDestination(x.Receiver));\n\n            return staticNodes.Union(dynamicNodes).Distinct();\n\n\n        }\n\n\n        private ChannelNode findDestination(Uri uri)\n        {\n            return _graph.FirstOrDefault(x => x.Uri == uri) ?? _volatileNodes[uri];\n        }\n\n        public void Dispose()\n        {\n            _graph.Dispose();\n        }\n\n\n        public Uri ReplyUriFor(ChannelNode destination)\n        {\n            return _graph.ReplyChannelFor(destination.Protocol());\n        }\n\n\n        public IEnumerable<Subscription> ActiveSubscriptions\n        {\n            get\n            {\n                return _lock.Read(() => {\n                    return _subscriptions.ToArray();\n                });\n            }\n        }\n\n        public string NodeName\n        {\n            get { return _graph.Name; }\n        }\n\n        // For testing\n        public IDictionary<Type, IList<ChannelNode>> CachedRoutes\n        {\n            get { return _routes; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/SubscriptionRefreshJob.cs",
    "content": "﻿using System.Threading;\nusing FubuMVC.Core.ServiceBus.Polling;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    public class SubscriptionRefreshJob : IJob\n    {\n        private readonly SubscriptionsHandler _handler;\n\n        public SubscriptionRefreshJob(SubscriptionsHandler handler)\n        {\n            _handler = handler;\n        }\n\n        public void Execute(CancellationToken cancellation)\n        {\n            _handler.ReloadSubscriptions();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/SubscriptionRepository.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    public class SubscriptionRepository : ISubscriptionRepository\n    {\n        private readonly ChannelGraph _graph;\n        private readonly ISubscriptionPersistence _persistence;\n\n        public SubscriptionRepository(ChannelGraph graph, ISubscriptionPersistence persistence)\n        {\n            _graph = graph;\n            _persistence = persistence;\n        }\n\n        public void PersistSubscriptions(params Subscription[] requirements)\n        {\n            persist(requirements, SubscriptionRole.Subscribes);\n        }\n\n        private void persist(Subscription[] requirements, SubscriptionRole subscriptionRole)\n        {\n            requirements.Each(x => {\n                x.NodeName = _graph.Name;\n                x.Role = subscriptionRole;\n            });\n\n            var existing = _persistence.LoadSubscriptions(_graph.Name, subscriptionRole);\n            var newReqs = requirements.Where(x => !existing.Contains(x)).ToArray();\n\n            newReqs.Each(x => x.Id = Guid.NewGuid());\n            _persistence.Persist(newReqs);\n        }\n\n        public void PersistPublishing(params Subscription[] subscriptions)\n        {\n            persist(subscriptions, SubscriptionRole.Publishes);\n        }\n\n        public void Persist(params TransportNode[] nodes)\n        {\n            _persistence.Persist(nodes);\n        }\n\n        public TransportNode FindLocal()\n        {\n            return _persistence.LoadNode(_graph.NodeId);\n        }\n\n        public TransportNode FindPeer(string nodeId)\n        {\n            return _persistence.LoadNode(nodeId);\n        }\n\n        public void AddOwnershipToThisNode(Uri subject)\n        {\n            _persistence.Alter(_graph.NodeId, node => node.AddOwnership(subject));\n        }\n\n        public void AddOwnershipToThisNode(IEnumerable<Uri> subjects)\n        {\n            _persistence.Alter(_graph.NodeId, node => node.AddOwnership(subjects));\n        }\n\n        public void RemoveOwnershipFromThisNode(Uri subject)\n        {\n            Debug.WriteLine(\"Removing persisted ownership of {0} from node {1}\", subject, _graph.NodeId);\n\n            _persistence.Alter(_graph.NodeId, node => node.RemoveOwnership(subject));\n        }\n\n        public void RemoveOwnershipFromNode(string nodeId, Uri subject)\n        {\n            _persistence.Alter(nodeId, node => node.RemoveOwnership(subject));\n        }\n\n        public void RemoveOwnershipFromNode(string nodeId, IEnumerable<Uri> subjects)\n        {\n            _persistence.Alter(nodeId, node => subjects.Each(node.RemoveOwnership));\n        }\n\n        public void RemoveOwnershipFromThisNode(IEnumerable<Uri> subjects)\n        {\n            _persistence.Alter(_graph.NodeId, node => subjects.Each(node.RemoveOwnership));\n        }\n\n        public IEnumerable<Subscription> RemoveLocalSubscriptions()\n        {\n            var subscriptions = LoadSubscriptions(SubscriptionRole.Subscribes).ToList();\n            if (!subscriptions.Any())\n                return Enumerable.Empty<Subscription>();\n\n            var protocol = subscriptions.First().Source.Scheme;\n            var uri = _graph.ReplyChannelFor(protocol);\n            var localSubscriptions = subscriptions.Where(x => x.Receiver == uri).ToList();\n\n            _persistence.DeleteSubscriptions(localSubscriptions);\n            return localSubscriptions;\n        }\n\n        public void RemoveSubscriptionsForReceiver(Uri receiver)\n        {\n            var subscriptions = LoadSubscriptions(SubscriptionRole.Publishes)\n                .Where(x => x.Receiver == receiver)\n                .ToList();\n            if (!subscriptions.Any())\n                return;\n\n            _persistence.DeleteSubscriptions(subscriptions);\n        }\n\n        public IEnumerable<Subscription> LoadSubscriptions(SubscriptionRole role)\n        {\n            return _persistence.LoadSubscriptions(_graph.Name, role);\n        }\n\n        public IEnumerable<TransportNode> FindPeers()\n        {\n            return _persistence.NodesForGroup(_graph.Name).Where(x => x.Id != _graph.NodeId);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/SubscriptionRequested.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    /// <summary>\n    /// Sent to peer groups\n    /// </summary>\n    public class SubscriptionRequested\n    {\n        private readonly IList<Subscription> _subscriptions = new List<Subscription>();\n\n        public Subscription[] Subscriptions\n        {\n            get { return _subscriptions.ToArray(); }\n            set\n            {\n                _subscriptions.Clear();\n                if (value != null) _subscriptions.AddRange(value);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/SubscriptionRequirements.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    public class SubscriptionRequirements<T> : ISubscriptionRequirement\n    {\n        private readonly T _settings;\n        private readonly ChannelGraph _graph;\n        private readonly IList<ISubscriptionRequirement<T>> _requirements;\n\n        public SubscriptionRequirements(T settings, ChannelGraph graph, IList<ISubscriptionRequirement<T>> requirements)\n        {\n            _settings = settings;\n            _graph = graph;\n            _requirements = requirements;\n        }\n\n        public IEnumerable<Subscription> DetermineRequirements()\n        {\n            return _requirements.SelectMany(x => x.Determine(_settings, _graph));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/SubscriptionRole.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    public enum SubscriptionRole\n    {\n        Publishes,\n        Subscribes\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/SubscriptionsChanged.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    /// <summary>\n    /// Sent to \"peer\" nodes as a \"coat check\" message to refill subscriptions\n    /// </summary>\n    public class SubscriptionsChanged\n    {\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/SubscriptionsHandler.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    public class SubscriptionsHandler\n    {\n        private readonly ISubscriptionRepository _repository;\n        private readonly ISubscriptionCache _cache;\n        private readonly IEnvelopeSender _sender;\n\n        public SubscriptionsHandler(ISubscriptionRepository repository, ISubscriptionCache cache, IEnvelopeSender sender)\n        {\n            _repository = repository;\n            _cache = cache;\n            _sender = sender;\n        }\n\n        public void Handle(SubscriptionsChanged message)\n        {\n            ReloadSubscriptions();\n        }\n\n        public virtual void ReloadSubscriptions()\n        {\n            var subscriptions = _repository.LoadSubscriptions(SubscriptionRole.Publishes);\n            _cache.LoadSubscriptions(subscriptions);\n        }\n\n        public void Handle(SubscriptionRequested message)\n        {\n            _repository.PersistPublishing(message.Subscriptions);\n            \n            // Reload here!\n            Handle(new SubscriptionsChanged());\n\n            UpdatePeers();\n        }\n\n        public virtual void UpdatePeers()\n        {\n            var peers = _repository.FindPeers();\n            peers.Each(SendSubscriptionChangedToPeer);\n        }\n\n        public virtual void SendSubscriptionChangedToPeer(TransportNode node)\n        {\n            var envelope = new Envelope\n            {\n                Message = new SubscriptionsChanged(),\n                Destination = node.ControlChannel\n            };\n\n            _sender.Send(envelope);\n        }\n\n        public void Handle(SubscriptionsRemoved message)\n        {\n            _repository.RemoveSubscriptionsForReceiver(message.Receiver);\n            ReloadSubscriptions();\n            UpdatePeers();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/SubscriptionsRemoved.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    public class SubscriptionsRemoved\n    {\n        public Uri Receiver { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Subscriptions/TransportNode.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Core.ServiceBus.Subscriptions\n{\n    public class TransportNode\n    {\n        private readonly IList<Uri> _addresses = new List<Uri>();\n\n        public TransportNode()\n        {\n        }\n\n        public TransportNode(ChannelGraph graph)\n        {\n            NodeName = graph.Name;\n\n\n            Addresses = graph.ReplyUriList().ToArray();\n\n            ControlChannel = graph.ControlChannel?.Uri ?? Addresses.FirstOrDefault();\n\n            if (!Addresses.Any())\n            {\n                throw new InvalidOperationException(\"At least one reply channel is required\");\n            }\n            \n            MachineName = System.Environment.MachineName;\n            Id = graph.NodeId;\n        }\n\n        public string Id { get; set; }\n        public string MachineName { get; set; }\n        public string NodeName { get; set; }\n\n        private readonly IList<Uri> _ownedTasks = new List<Uri>();\n\n        public void AddOwnership(Uri subject)\n        {\n            _ownedTasks.Fill(subject);\n        }\n\n        public void AddOwnership(IEnumerable<Uri> subjects)\n        {\n            _ownedTasks.Fill(subjects);\n        }\n\n        public void RemoveOwnership(Uri subject)\n        {\n            _ownedTasks.Remove(subject);\n        }\n\n        public Uri[] OwnedTasks\n        {\n            get\n            {\n                return _ownedTasks.ToArray();\n            }\n            set\n            {\n                _ownedTasks.Clear();\n                if (value != null) _ownedTasks.AddRange(value);\n            }\n        }\n\n        public Uri[] Addresses\n        {\n            get\n            {\n                return _addresses.ToArray();\n            }\n            set\n            {\n                _addresses.Clear();\n                if (value != null) _addresses.AddRange(value);\n            }\n        }\n        \n        public Uri ControlChannel { get; set; }\n\n        protected bool Equals(TransportNode other)\n        {\n            return string.Equals(Id, other.Id);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((TransportNode) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Id != null ? Id.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return $\"Id: {Id}, MachineName: {MachineName}, NodeName: {NodeName}\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/SystemLevelHandlers.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\n\nnamespace FubuMVC.Core.ServiceBus\n{\n    // needs to be done AFTER authentication, so this is good\n    public class SystemLevelHandlers : IChainSource\n    {\n        public Task<BehaviorChain[]> BuildChains(BehaviorGraph graph, IPerfTimer timer)\n        {\n            return Task.Factory.StartNew(() =>\n            {\n                return timer.Record(\"Building System Level Handler Chains\", () => buildChains(graph).ToArray());\n            });\n        }\n\n        private static IEnumerable<BehaviorChain> buildChains(BehaviorGraph graph)\n        {\n            var handlers = new HandlerGraph\n            {\n                HandlerCall.For<SubscriptionsHandler>(x => x.Handle(new SubscriptionRequested())),\n                HandlerCall.For<SubscriptionsHandler>(x => x.Handle(new SubscriptionsChanged())),\n                HandlerCall.For<SubscriptionsHandler>(x => x.Handle(new SubscriptionsRemoved())),\n#pragma warning disable CS4014\n                HandlerCall.For<MonitoringControlHandler>(x => x.Handle(new TakeOwnershipRequest())),\n                HandlerCall.For<MonitoringControlHandler>(x => x.Handle(new TaskHealthRequest())),\n                HandlerCall.For<MonitoringControlHandler>(x => x.Handle(new TaskDeactivation()))\n#pragma warning restore CS4014\n            };\n\n\n            handlers.Compile();\n\n            // TODO -- need to apply [ModifyChainAttribute]'s here. See GH-958\n\n            return handlers;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/TaskExtensions.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace FubuMVC.Core.ServiceBus\n{\n    public static class TaskExtensions\n    {\n        public static Task<T> ToCompletionTask<T>(this T value)\n        {\n            var completion = new TaskCompletionSource<T>();\n            completion.SetResult(value);\n\n            return completion.Task;\n        }\n\n        public static Task ToFaultedTask(this Exception ex)\n        {\n            var completion = new TaskCompletionSource<object>();\n            completion.SetException(ex);\n\n            return completion.Task;\n        }\n\n        public static async Task TimeoutAfter(this Task task, TimeSpan timeout)\n        {\n            var cancellation = new CancellationTokenSource();\n            var delayed = Task.Delay(timeout, cancellation.Token);\n\n            if (task == await Task.WhenAny(task, delayed))\n            {\n                cancellation.Cancel();\n                await task;\n            }\n            else\n            {\n                throw new TimeoutException();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/TestSupport/ClearAllTransports.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.TestSupport\n{\n    public class ClearAllTransports { }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/TestSupport/TransportCleanup.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing FubuMVC.Core.Services.Messaging;\n\nnamespace FubuMVC.Core.ServiceBus.TestSupport\n{\n    public class TransportCleanup : IListener<ClearAllTransports>\n    {\n        private readonly IEnumerable<ITransport> _transports;\n        private readonly ISubscriptionCache _subscriptions;\n\n        public TransportCleanup(IEnumerable<ITransport> transports, ISubscriptionCache subscriptions)\n        {\n            _transports = transports;\n            _subscriptions = subscriptions;\n        }\n\n        public void Receive(ClearAllTransports message)\n        {\n            // Debug tracing will get written out into the Storyteller \n            // output\n            ClearAll();\n        }\n\n        public void ClearAll()\n        {\n            _transports.Each(x => {\n                x.ClearAll();\n            });\n            _subscriptions.ClearAll();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/TestSupport/TransportCleanupActivator.cs",
    "content": "﻿using FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Core.ServiceBus.TestSupport\n{\n    public class TransportCleanupActivator : IActivator\n    {\n        private readonly TransportCleanup _cleanup;\n\n        public TransportCleanupActivator(TransportCleanup cleanup)\n        {\n            _cleanup = cleanup;\n        }\n\n        public void Activate(IActivationLog log, IPerfTimer timer)\n        {\n            log.Trace(\"Adding TransportCleanup to the remote EventAggregator\");\n            Services.Messaging.GlobalMessageTracking.Messaging.AddListener(_cleanup);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/TimeoutRunner.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing FubuCore;\n\nnamespace FubuMVC.Core.ServiceBus\n{\n    public enum Completion\n    {\n        Success,\n        Timedout,\n        Exception\n    }\n\n    public static class TimeoutRunner\n    {\n        public static Completion Run(TimeSpan timeout, Action action, Action<Exception> onError)\n        {\n            var returnValue = Completion.Success;\n\n            var reset = new ManualResetEvent(false);\n            var started = new ManualResetEvent(false);\n\n            var thread = new Thread(() => {\n                try\n                {\n                    started.Set();\n                    action();\n                    reset.Set();\n                    returnValue = Completion.Success;\n                }\n                catch (ThreadAbortException ex)\n                {\n                    returnValue = Completion.Timedout;\n                    onError(ex);\n                }\n                catch (Exception ex)\n                {\n                    returnValue = Completion.Exception;\n                    onError(ex);\n                    reset.Set();\n                }\n            });\n\n            thread.Start();\n            started.WaitOne(1.Minutes()); // This is for making tests more reliable\n\n            if (!reset.WaitOne(timeout))\n            {\n                thread.Abort();\n                returnValue = Completion.Timedout;\n            }\n\n            return returnValue;\n        }\n\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/TransportSettings.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Conventions;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Sagas;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Configuration;\nusing FubuMVC.Core.ServiceBus.Web;\nusing Newtonsoft.Json;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.ServiceBus\n{\n    public enum InMemoryTransportMode\n    {\n        Disabled,\n        Enabled,\n        AllInMemory\n    }\n\n    public class TransportSettings : IFeatureSettings, DescribesItself\n    {\n        public readonly IList<ISagaStorage> SagaStorageProviders;\n        public readonly IList<Type> SettingTypes = new List<Type>();\n\n        public TransportSettings()\n        {\n            SagaStorageProviders = new List<ISagaStorage>();\n            DebugEnabled = false;\n            DelayMessagePolling = 5000;\n            ListenerCleanupPolling = 60000;\n            SubscriptionRefreshPolling = 60000;\n            Enabled = false;\n            InMemoryTransport = InMemoryTransportMode.Disabled;\n            JsonMessageSerializerSettings = new JsonSerializerSettings\n            {\n                TypeNameHandling = TypeNameHandling.All,\n                PreserveReferencesHandling = PreserveReferencesHandling.Objects\n            };\n        }\n\n        public void Describe(Description description)\n        {\n            description.Properties[nameof(Enabled)] = Enabled.ToString();\n            description.Properties[\"Debugging Tracing Enabled\"] = DebugEnabled.ToString();\n            description.Properties[nameof(DelayMessagePolling)] = $\"{DelayMessagePolling} ms\";\n            description.Properties[nameof(ListenerCleanupPolling)] = $\"{ListenerCleanupPolling} ms\";\n            description.Properties[nameof(SubscriptionRefreshPolling)] = $\"{SubscriptionRefreshPolling} ms\";\n            description.Properties[nameof(InMemoryTransport)] = InMemoryTransport.ToString();\n\n            var jsonSettings = new Description();\n            description.Children[\"Json Serializer Settings\"] = jsonSettings;\n            jsonSettings.Properties[nameof(JsonMessageSerializerSettings.TypeNameHandling)] = JsonMessageSerializerSettings.TypeNameHandling.ToString();\n            jsonSettings.Properties[nameof(JsonMessageSerializerSettings.PreserveReferencesHandling)] = JsonMessageSerializerSettings.PreserveReferencesHandling.ToString();\n            jsonSettings.Properties[nameof(JsonMessageSerializerSettings.ReferenceLoopHandling)] = JsonMessageSerializerSettings.ReferenceLoopHandling.ToString();\n        }\n\n        public bool Enabled { get; set; }\n\n        public InMemoryTransportMode InMemoryTransport { get; set; }\n\n        public Uri InMemoryReplyUri { get; set; }\n\n        public bool DebugEnabled { get; set; }\n        public double DelayMessagePolling { get; set; }\n        public double ListenerCleanupPolling { get; set; }\n        public double SubscriptionRefreshPolling { get; set; }\n\n        public JsonSerializerSettings JsonMessageSerializerSettings { get; set; }\n\n        void IFeatureSettings.Apply(FubuRegistry registry)\n        {\n            if (!Enabled) return;\n\n            registry.Actions.FindWith<SendsMessageActionSource>();\n            registry.Policies.Global.Add<SendsMessageConvention>();\n\n            registry.Policies.Global.Add<ApplyScheduledJobRouting>();\n            registry.Services.IncludeRegistry<ScheduledJobServicesRegistry>();\n            registry.Services.IncludeRegistry<MonitoringServiceRegistry>();\n            registry.Policies.ChainSource<SystemLevelHandlers>();\n            registry.Services.IncludeRegistry(new FubuTransportServiceRegistry(registry.Mode));\n            registry.Services.IncludeRegistry<PollingServicesRegistry>();\n            registry.Policies.Global.Add<StatefulSagaConvention>();\n\n            // Just forcing it to get spun up.\n            registry.AlterSettings<ChannelGraph>(x => {});\n            registry.Handlers.Include<SystemLevelHandlers>();\n\n            registry.Configure(graph =>\n            {\n                graph.Handlers.Each(chain =>\n                {\n                    // Apply the error handling node\n                    chain.InsertFirst(new ExceptionHandlerNode(chain));\n\n                    // Hate how we're doing this, but disable tracing\n                    // on the polling job requests here.\n                    if (chain.InputType().Closes(typeof (JobRequest<>)))\n                    {\n                        chain.Tags.Add(BehaviorChain.NoTracing);\n                    }\n                });\n            });\n\n            if (InMemoryTransport == InMemoryTransportMode.AllInMemory)\n            {\n                registry.Services.For<ITransport>().ClearAll();\n                registry.Services.AddService<ITransport, InMemoryTransport>();\n\n                SettingTypes.Each(settingType =>\n                {\n                    var settings = InMemory.InMemoryTransport.ToInMemory(settingType);\n                    registry.Services.ReplaceService(settingType, new ObjectInstance(settings));\n                });\n            }\n\n            if (InMemoryTransport != InMemoryTransportMode.Disabled)\n            {\n                registry.Services.AddService<ITransport, InMemoryTransport>();\n            }\n\n            registry.Policies.Global.Add<ReorderBehaviorsPolicy>(x =>\n            {\n                x.ThisNodeMustBeBefore<StatefulSagaNode>();\n                x.ThisNodeMustBeAfter<HandlerCall>();\n            });\n        }\n\n        \n\n        public interface SetInMemory\n        {\n            void SetToInMemory(FubuRegistry registry);\n        }\n\n        public class SetInMemory<T> : SetInMemory where T : class, new()\n        {\n            public void SetToInMemory(FubuRegistry registry)\n            {\n                registry.AlterSettings<T>(x => InMemory.InMemoryTransport.AllChannelsAreInMemory(typeof(T), x));\n            }\n        }\n\n\n    }\n\n    \n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/TypeExtensions.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.ServiceBus\n{\n    public static class TypeExtensions\n    {\n        public static bool HasProperty(this Type type, string name)\n        {\n            return type.GetProperty(name) != null;\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Web/ISendMessages.cs",
    "content": "﻿namespace FubuMVC.Core.ServiceBus.Web\n{\n    /// <summary>\n    /// Strictly a marker interface to denote that this class\n    /// should be exposed \n    /// published to the service bus the results of its methods\n    /// </summary>\n    public interface ISendMessages\n    {\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Web/SendMessageBehavior.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.ServiceBus.Web\n{\n    public class SendMessageBehavior<T> : BasicBehavior, IMayHaveResourceType where T : class\n    {\n        private readonly IFubuRequest _request;\n        private readonly IServiceBus _serviceBus;\n        private readonly ILogger _logger;\n\n        public SendMessageBehavior(IFubuRequest request, IServiceBus serviceBus, ILogger logger)\n            : base(PartialBehavior.Executes)\n        {\n            _request = request;\n            _serviceBus = serviceBus;\n            _logger = logger;\n        }\n\n        protected override Task<DoNext> performInvoke()\n        {\n            try\n            {\n                var message = _request.Get<T>();\n                _serviceBus.Send(message);\n\n                _request.Set(AjaxContinuation.Successful());\n            }\n            catch (Exception e)\n            {\n                _request.Set(new AjaxContinuation\n                {\n                    Success = false\n                });\n\n                _logger.Error(\"Error trying to publish message of type \" + typeof(T).FullName, e);\n            }\n\n            return Task.FromResult(DoNext.Continue);\n        }\n\n        public Type ResourceType()\n        {\n            return typeof(AjaxContinuation);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Web/SendsMessage.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.ServiceBus.Web\n{\n    public class SendsMessage : Process\n    {\n        private readonly Type _eventType;\n\n        public SendsMessage(ActionCall transform) : base(typeof(SendMessageBehavior<>).MakeGenericType(transform.ResourceType()))\n        {\n            _eventType = transform.ResourceType();\n        }\n\n        public Type EventType\n        {\n            get { return _eventType; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Web/SendsMessageActionSource.cs",
    "content": "﻿using System.ComponentModel;\nusing System.Linq;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing StructureMap.Graph.Scanning;\n\nnamespace FubuMVC.Core.ServiceBus.Web\n{\n    [Description(\"Finds actions for classes that implement ISendMessages\")]\n    public class SendsMessageActionSource : IActionSource\n    {\n        public Task<ActionCall[]> FindActions(Assembly applicationAssembly)\n        {\n            return TypeRepository.FindTypes(applicationAssembly,\n                TypeClassification.Concretes | TypeClassification.Closed, t => t.CanBeCastTo<ISendMessages>())\n                .ContinueWith(t =>\n                {\n                    return t.Result.SelectMany(type =>\n                    {\n                        var methods = type.GetMethods(BindingFlags.Public | BindingFlags.Instance)\n                            .Where(ActionSource.IsCandidate);\n\n                        return methods.Select(method => new ActionCall(type, method));\n                    }).ToArray();\n                });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/ServiceBus/Web/SendsMessageConvention.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.ServiceBus.Web\n{\n    [Description(\"Attaches an AjaxContinuation response for ISendMessages routes\")]\n    public class SendsMessageConvention : IConfigurationAction\n    {\n        public void Configure(BehaviorGraph graph)\n        {\n            var transformers = graph.FirstActions().Where(x => x.HandlerType.CanBeCastTo<ISendMessages>());\n            transformers.Each(x => {\n                x.AddAfter(new SendsMessage(x));\n                var chain = x.ParentChain();\n                chain.ResourceType(typeof (AjaxContinuation));\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/ApplicationLoaderFinder.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.Services\n{\n    public static class ApplicationLoaderFinder\n    {\n        public static IApplicationLoader FindLoader(string bootstrapperType)\n        {\n            if (bootstrapperType.IsNotEmpty())\n            {\n                var type = Type.GetType(bootstrapperType);\n                return BuildApplicationLoader(type);\n            }\n\n            var candidates = FindLoaderTypes();\n            if (candidates.Count() == 1)\n            {\n                return BuildApplicationLoader(candidates.Single());\n            }\n            if (candidates.Any())\n            {\n                throw new Exception(\n                    \"Found multiple candidates, you may need to specify an explicit selection in the bottle-service.config file.  \\nCandidates found are \" +\n                    candidates.Select(x => x.AssemblyQualifiedName).Join(\",\\n\"));\n            }\n            \n            Console.WriteLine(\"Found no loaders or application sources\");\n\n            throw new Exception(\"Could not find any service loader candidates\");\n\n        }\n\n        public static IEnumerable<Type> FindLoaderTypes()\n        {\n            var list = new List<Type>();\n\n            AssemblyFinder.FindAssemblies(a => !a.IsDynamic && a.GetName().Name != \"FubuMVC.Core\").Each(assem => {\n                try\n                {\n                    list.AddRange(assem.GetExportedTypes().Where(IsLoaderTypeCandidate));\n                }\n                catch (Exception)\n                {\n                    \n                    Console.WriteLine(\"Unable to find exported types for assembly \" + assem.FullName);\n                }\n            });\n\n            return list;\n        } \n\n        public static bool IsLoaderTypeCandidate(Type type)\n        {\n            if (type.IsOpenGeneric()) return false;\n\n            if (!type.IsConcreteWithDefaultCtor()) return false;\n\n            if (type.CanBeCastTo<FubuRegistry>()) return true;\n\n            return type.CanBeCastTo<IApplicationLoader>();\n        }\n\n        public static IApplicationLoader BuildApplicationLoader(Type type)\n        {\n            var loaderType = DetermineLoaderType(type);\n\n            return Activator.CreateInstance(loaderType).As<IApplicationLoader>();\n        }\n\n        public static Type DetermineLoaderType(Type type)\n        {\n            if (type.CanBeCastTo<IApplicationLoader>()) return type;\n\n            if (type.CanBeCastTo<FubuRegistry>()) return typeof (FubuRegistryLoader<>).MakeGenericType(type);\n\n            throw new ArgumentOutOfRangeException(\"type\", \"Only IApplicationLoader types can be used here\");\n             \n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/FubuRegistryLoader.cs",
    "content": "using System;\nusing System.Collections.Generic;\n\nnamespace FubuMVC.Core.Services\n{\n    public class FubuRegistryLoader<T> : IApplicationLoader where T : FubuRegistry, new()\n    {\n        public IDisposable Load(Dictionary<string, string> properties)\n        {\n            var registry = new T();\n            if (properties.ContainsKey(\"Mode\"))\n            {\n                registry.Mode = properties[\"Mode\"];\n            }\n\n            return registry.ToRuntime();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/IApplicationLoader.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace FubuMVC.Core.Services\n{\n    public interface IApplicationLoader\n    {\n        IDisposable Load(Dictionary<string, string> properties);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/JasperServiceConfiguration.cs",
    "content": "using System.Xml.Serialization;\n\nnamespace FubuMVC.Core.Services\n{\n    [XmlType(\"service\")]\n    public class JasperServiceConfiguration\n    {\n        public const string FILE = \"jasper-service.config\";\n\n        public JasperServiceConfiguration()\n        {\n            Name = \"JasperService\";\n            DisplayName = \"JasperService\";\n            Description = \"JasperService\";\n\n\t\t\t// Hides command line output so only turn this on when running as a service\n\t        UseEventLog = false;\n        }\n\n        public string Name { get; set; }\n        public string DisplayName { get; set; }\n        public string Description { get; set; }\n\t\tpublic bool UseEventLog { get; set; }\n        public string BootstrapperType { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/JasperServiceRuntime.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace FubuMVC.Core.Services\n{\n    /// <summary>\n    /// Strictly used within the main Program\n    /// </summary>\n    public class JasperServiceRuntime\n    {\n        private bool _shutdownLatched;\n        private readonly JasperServiceConfiguration _configuration;\n        private readonly Lazy<IApplicationLoader> _runner;\n        private IDisposable _shutdown;\n\n        public JasperServiceRuntime(JasperServiceConfiguration configuration)\n        {\n            _configuration = configuration;\n            _runner = new Lazy<IApplicationLoader>(bootstrap);\n        }\n\n        private IApplicationLoader Runner\n        {\n            get { return _runner.Value; }\n        }\n\n        private IApplicationLoader bootstrap()\n        {\n            return ApplicationLoaderFinder.FindLoader(_configuration.BootstrapperType);\n        }\n\n        public void Start()\n        {\n            Console.WriteLine(\"Starting application from \" + Runner);\n            _shutdown = Runner.Load(new Dictionary<string, string>());\n        }\n\n        public void Stop()\n        {\n            if (_shutdownLatched) return;\n            _shutdownLatched = true;\n\n            _shutdown.Dispose();\n        }\n    }\n\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/JsonSerialization.cs",
    "content": "﻿using System.IO;\nusing Newtonsoft.Json;\n\nnamespace FubuMVC.Core.Services\n{\n    public static class JsonSerialization\n    {\n        public static string ToJson(object o, bool indentedFormatting = false)\n        {\n            var serializer = new JsonSerializer { TypeNameHandling = TypeNameHandling.All };\n\n            if (indentedFormatting)\n            {\n                serializer.Formatting = Formatting.Indented;\n            }\n\n            var writer = new StringWriter();\n            serializer.Serialize(writer, o);\n\n            return writer.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/Services/Messaging/GlobalMessageTracking.cs",
    "content": "﻿using System;\nusing System.Collections.Concurrent;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Services.Messaging.Tracking;\n\nnamespace FubuMVC.Core.Services.Messaging\n{\n    public static class GlobalMessageTracking\n    {\n        private static readonly BlockingCollection<object> _messages;\n        private static IRemoteListener _remoteListener;\n        private static CancellationTokenSource _cancellationSource;\n        private static readonly IMessagingHub _messaging = new MessagingHub();\n\n        static GlobalMessageTracking()\n        {\n            _messages = new BlockingCollection<object>(new ConcurrentQueue<object>());\n        }\n\n        public static IMessagingHub Messaging => _messaging;\n\n        public static void Start(IRemoteListener remoteListener)\n        {\n            _remoteListener = remoteListener;\n\n            _cancellationSource = new CancellationTokenSource();\n            Task.Factory.StartNew(read, _cancellationSource.Token);\n        }\n\n        private static void read()\n        {\n            foreach (object o in _messages.GetConsumingEnumerable(_cancellationSource.Token))\n            {\n                // TODO -- should this be async as well?  Or assume that the remote listener will handle it?\n                var json = JsonSerialization.ToJson(o);\n                _remoteListener.Send(json);\n\n                // TODO -- send to a local messaging hub?\n            }\n        }\n\n        public static void Stop()\n        {\n            _cancellationSource?.Cancel();\n        }\n\n        public static void SendMessage(string category, string message)\n        {\n            SendMessage(new ServiceMessage\n            {\n                Category = category,\n                Message = message\n            });\n        }\n\n        public static void SendMessage<T>(T message)\n        {\n            try\n            {\n                _messages.Add(message);\n                _messaging.Send(message);\n            }\n            catch (Exception e)\n            {\n                // THIS IS IMPORTANT, NO FAILURES CAN POSSIBLY GET OUT HERE\n                Console.WriteLine(e);\n            }\n        }\n\n        public static void ReceivedMessage(object message)\n        {\n            SendMessage(MessageTrack.ForReceived(message));\n        }\n\n        public static void SentMessage(object message)\n        {\n            SendMessage(MessageTrack.ForSent(message));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Messaging/IListener.cs",
    "content": "﻿namespace FubuMVC.Core.Services.Messaging\n{\n    public interface IListener\n    {\n        void Receive<T>(T message);\n    }\n\n    public interface IListener<T>\n    {\n        void Receive(T message);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Messaging/IMessagingHub.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace FubuMVC.Core.Services.Messaging\n{\n    public interface IMessagingHub\n    {\n        IEnumerable<object> Listeners { get; }\n        void AddListener(object listener);\n        void RemoveListener(object listener);\n        void Send<T>(T message);\n        void SendJson(string json);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Messaging/IRemoteListener.cs",
    "content": "﻿namespace FubuMVC.Core.Services.Messaging\n{\n    public interface IRemoteListener\n    {\n        void Send(string json);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Messaging/MessageWaitCondition.cs",
    "content": "﻿using System;\nusing System.Threading;\n\nnamespace FubuMVC.Core.Services.Messaging\n{\n    public class MessageWaitCondition<T> : IListener<T>\n    {\n        private readonly Func<T, bool> _filter;\n        private T _received;\n        private readonly ManualResetEvent _reset;\n\n        public MessageWaitCondition(Func<T, bool> filter)\n        {\n            _filter = filter;\n\n            _reset = new ManualResetEvent(false);\n        }\n\n        public T Wait(int wait = 5000)\n        {\n            _reset.WaitOne(wait);\n\n            return _received;\n        }\n\n        public T Received\n        {\n            get { return _received; }\n        }\n\n        public void Receive(T message)\n        {\n            if (_filter(message))\n            {\n                _received = message;\n                _reset.Set();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Messaging/MessagingHub.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading;\nusing FubuCore;\nusing Newtonsoft.Json;\n\nnamespace FubuMVC.Core.Services.Messaging\n{\n    public class MessagingHub : IMessagingHub\n    {\n        private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();\n        private readonly IList<object> _listeners = new List<object>();\n        private readonly JsonSerializer _jsonSerializer = new JsonSerializer()\n        {\n            TypeNameHandling = TypeNameHandling.All\n        };\n\n        public IEnumerable<object> Listeners\n        {\n            get\n            {\n                return _lock.Read(() => {\n                    return _listeners.ToArray();\n                });\n                \n            }\n        }\n\n        public void AddListener(object listener)\n        {\n            _lock.Write(() => {\n                _listeners.Fill(listener);\n            });\n            \n        }\n\n        public void RemoveListener(object listener)\n        {\n            _lock.Write(() => {\n                _listeners.Remove(listener);\n            });\n            \n        }\n\n        public void Send<T>(T message)\n        {\n            _listeners.OfType<IListener<T>>().ToArray().Each(x => x.Receive(message));\n            _listeners.OfType<IListener>().ToArray().Each(x => x.Receive(message));\n        }\n\n        public void SendJson(string json)\n        {\n            var o = _jsonSerializer.Deserialize(new JsonTextReader(new StringReader(json)));\n            typeof(Sender<>).CloseAndBuildAs<ISender>(o.GetType())\n                            .Send(o, this);\n        }\n\n        public interface ISender\n        {\n            void Send(object o, MessagingHub listeners);\n        }\n\n        public class Sender<T> : ISender\n        {\n            public void Send(object o, MessagingHub listeners)\n            {\n                listeners.Send(o.As<T>());\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Messaging/MessagingHubExtensions.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.Services.Messaging\n{\n    public static class MessagingHubExtensions\n    {\n        public static T WaitForMessage<T>(this IMessagingHub hub, Func<T, bool> filter, Action action, int wait = 5000)\n        {\n            var condition = new MessageWaitCondition<T>(filter);\n            hub.AddListener(condition);\n            action();\n\n            try\n            {\n                return condition.Wait(wait);\n            }\n            finally\n            {\n                hub.RemoveListener(condition);\n            }\n        }\n\n        public static T WaitForMessage<T>(this IMessagingHub hub, Action action, int wait = 5000)\n        {\n            Func<T, bool> filter = x => true;\n            return hub.WaitForMessage(filter, action, wait);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Messaging/RemoteListener.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.Services.Messaging\n{\n    public class RemoteListener : MarshalByRefObject, IRemoteListener\n    {\n        private readonly IMessagingHub _messagingHub;\n\n        public RemoteListener(IMessagingHub messagingHub)\n        {\n            _messagingHub = messagingHub;\n        }\n\n        public void Send(string json)\n        {\n            try\n            {\n                _messagingHub.SendJson(json);\n            }\n            catch (Exception e)\n            {\n                Console.WriteLine(\"Remote messaging failed:\");\n                Console.WriteLine(e);\n            }\n        }\n\n        /// <summary>\n        /// Really only for testing\n        /// </summary>\n        /// <param name=\"message\"></param>\n        public void SendObject(object message)\n        {\n            try\n            {\n                var json = JsonSerialization.ToJson(message);\n                Send(json);\n            }\n            catch (Exception e)\n            {\n                Console.WriteLine(\"Remote json sending failed:\");\n                Console.WriteLine(e);\n            }\n        }\n\n        public override object InitializeLifetimeService()\n        {\n            return null;\n        }\n\n        public T WaitForMessage<T>(Func<T, bool> filter, Action action, int wait = 5000)\n        {\n            return _messagingHub.WaitForMessage(filter, action, wait);\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Messaging/ServiceMessage.cs",
    "content": "﻿namespace FubuMVC.Core.Services.Messaging\n{\n    public class ServiceMessage\n    {\n        public string Category { get; set; }\n        public string Message { get; set; }\n\n        protected bool Equals(ServiceMessage other)\n        {\n            return string.Equals(Category, other.Category) && string.Equals(Message, other.Message);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((ServiceMessage) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((Category != null ? Category.GetHashCode() : 0)*397) ^ (Message != null ? Message.GetHashCode() : 0);\n            }\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Category: {0}, Message: {1}\", Category, Message);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Messaging/Tracking/AllMessagesComplete.cs",
    "content": "﻿namespace FubuMVC.Core.Services.Messaging.Tracking\n{\n    public class AllMessagesComplete\n    {\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Messaging/Tracking/MessageHistory.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Threading;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.Services.Remote;\n\nnamespace FubuMVC.Core.Services.Messaging.Tracking\n{\n    public static class MessageHistory\n    {\n        private static readonly IList<MessageTrack> _sent = new List<MessageTrack>();\n        private static readonly IList<MessageTrack> _received = new List<MessageTrack>();\n        private static readonly IList<MessageTrack> _outstanding = new List<MessageTrack>();\n\n        private static readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();\n        private static MessageTrackListener _listener;\n\n        private static readonly IList<IMessagingHub> _hubs = new List<IMessagingHub>();\n\n        static MessageHistory()\n        {\n            ClearAll();\n        }\n\n\n        public static void ConnectRemoteListeners(params RemoteServiceRunner[] runners)\n        {\n            ClearAll();\n\n            var hubs = runners.Select(x => x.Messaging).ToArray();\n            hubs.Each(x => x.AddListener(_listener));\n            _hubs.AddRange(hubs);\n        }\n\n        /// <summary>\n        /// This completely resets MessageHistory tracking and will disconnect\n        /// any remote listeners\n        /// </summary>\n        public static void ClearAll()\n        {\n            ClearHistory();\n\n            if (_listener != null)\n            {\n                _hubs.Each(x =>\n                {\n                    if (_listener != null) x.RemoveListener(_listener);\n                });\n            }\n\n            _hubs.Clear();\n\n            _hubs.Add(GlobalMessageTracking.Messaging);\n\n            _listener = new MessageTrackListener();\n            GlobalMessageTracking.Messaging.AddListener(_listener);\n        }\n\n        public static void ClearHistory()\n        {\n            _lock.Write(() =>\n            {\n                _sent.Clear();\n                _received.Clear();\n                _outstanding.Clear();\n            });\n        }\n\n\n        public static void Record(MessageLogRecord record)\n        {\n            var messageTrack = record.ToMessageTrack();\n            if (messageTrack != null) Record(messageTrack);\n        }\n\n        public static void Record(MessageTrack track)\n        {\n            _lock.Write(() =>\n            {\n                Debug.WriteLine(\"Track: \" + track);\n\n\n                if (track.Status == MessageTrack.Sent)\n                {\n                    _sent.Add(track);\n                    _outstanding.Add(track);\n                }\n                else\n                {\n                    _received.Add(track);\n                    _outstanding.Remove(track);\n                }\n            });\n\n            _lock.Read(() =>\n            {\n                if (!_outstanding.Any())\n                {\n                    GlobalMessageTracking.SendMessage(new AllMessagesComplete());\n                }\n\n                return true;\n            });\n        }\n\n        public static void AssertFinished()\n        {\n            if (_outstanding.Any())\n            {\n                var writer = new StringWriter();\n\n                writer.WriteLine(\"There are outstanding messages that did not complete in time!\");\n                writer.WriteLine(\"Outstanding message tracks:\");\n                _outstanding.Each(x => writer.WriteLine(x));\n\n                writer.WriteLine();\n                writer.WriteLine(\"Sent\");\n                _sent.Each(x => writer.WriteLine(x));\n\n                writer.WriteLine();\n                writer.WriteLine(\"Received\");\n                _sent.Each(x => writer.WriteLine(x));\n            }\n        }\n\n        public static IEnumerable<MessageTrack> Received()\n        {\n            return _lock.Read(() => _received.ToArray());\n        }\n\n        public static IEnumerable<MessageTrack> Outstanding()\n        {\n            return _lock.Read(() => _outstanding.ToArray());\n        }\n\n        public static IEnumerable<MessageTrack> All()\n        {\n            return _lock.Read(() => _sent.Union(_received).ToList());\n        }\n\n        public static bool WaitForWorkToFinish(Action action, int timeoutMilliseconds = 5000)\n        {\n            ClearHistory();\n            action();\n            return Wait.Until(() => !Outstanding().Any() && All().Any(), timeoutInMilliseconds: timeoutMilliseconds);\n        }\n\n\n        public class MessageTrackListener : IListener<MessageTrack>\n        {\n            public void Receive(MessageTrack message)\n            {\n                Record(message);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Messaging/Tracking/MessageTrack.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Services.Messaging.Tracking\n{\n    public class MessageTrack\n    {\n        public static readonly string Sent = \"Sent\";\n        public static readonly string Received = \"Received\";\n\n\n\n        public static MessageTrack ForSent(object message, string id = null)\n        {\n            var track = derive(message, id);\n            track.Status = Sent;\n            return track;\n        }\n\n        private static MessageTrack derive(object message, string id)\n        {\n            var messageType = message.GetType();\n            var track = new MessageTrack\n            {\n                Description = message.ToString(),\n                FullName = messageType.FullName,\n                Type = messageType.Name,\n                Timestamp = DateTime.UtcNow,\n                Id = id\n            };\n\n            if (id.IsEmpty())\n            {\n                autodetermineId(message, messageType, track);\n            }\n\n            return track;\n        }\n\n        private static void autodetermineId(object message, Type messageType, MessageTrack track)\n        {\n            var property = messageType.GetProperties().FirstOrDefault(x => x.Name.EqualsIgnoreCase(\"Id\"));\n            if (property != null)\n            {\n                var rawValue = property.GetValue(message, null);\n                if (rawValue != null)\n                {\n                    track.Id = rawValue.ToString();\n                }\n            }\n        }\n\n        public static MessageTrack ForReceived(object message, string id = null)\n        {\n            var track = derive(message, id);\n            track.Status = Received;\n            return track;\n        }\n\n        public string FullName { get; set; }\n        public string Type { get; set; }\n        public DateTime Timestamp { get; set; }\n        public string Id { get; set; }\n        public string Description { get; set; }\n\n        public string Status { get; set; }\n\n        public override string ToString()\n        {\n            return $\"{nameof(Type)}: {Type}, {nameof(Id)}: {Id}, {nameof(Description)}: {Description}, {nameof(Status)}: {Status}\";\n        }\n\n        protected bool Equals(MessageTrack other)\n        {\n            return string.Equals(FullName, other.FullName) && string.Equals(Id, other.Id);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((MessageTrack) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((FullName != null ? FullName.GetHashCode() : 0)*397) ^ (Id != null ? Id.GetHashCode() : 0);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Remote/AppDomainFileChangeWatcher.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.Runtime.Files;\n\nnamespace FubuMVC.Core.Services.Remote\n{\n    public class AppDomainFileChangeWatcher : IDisposable, IChangeSetHandler\n    {\n        private readonly Action _callback;\n        private FileChangeWatcher _watcher;\n\n        public AppDomainFileChangeWatcher(Action callback)\n        {\n            _callback = callback;\n        }\n\n        public string Exclude { get; set; }\n\n        public void WatchBinariesAt(string directory)\n        {\n            Console.WriteLine(\"Watching for binary and config file changes at \" + directory);\n\n            var fileSet = FileSet.Deep(\"*.dll;*.config;*.exe\");\n            if (Exclude.IsNotEmpty())\n            {\n                fileSet.Exclude = Exclude;\n            }\n\n            _watcher = new FileChangeWatcher(directory, fileSet, this)\n            {\n                ChangeBuffer = 500\n            };\n\n\n\n            _watcher.Start();\n        }\n\n\n        public void Dispose()\n        {\n            _watcher.Dispose();\n        }\n\n        void IChangeSetHandler.Handle(ChangeSet changes)\n        {\n            Console.WriteLine(\"Detected binary file changes at {0}: {1}\", _watcher.Root, changes);\n            _callback();\n        }\n\n        public void StopWatching()\n        {\n            _watcher.Stop();\n        }\n\n        public void StartWatching()\n        {\n            _watcher.Start();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Remote/AssemblyCopyMode.cs",
    "content": "﻿namespace FubuMVC.Core.Services.Remote\n{\n    public enum AssemblyCopyMode\n    {\n        Once,\n        Always,\n        SemVerCompatible\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Remote/AssemblyRequirement.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Reflection;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Services.Remote\n{\n    public class AssemblyRequirement\n    {\n        private readonly static FileSystem fileSystem = new FileSystem();\n        private readonly Assembly _assembly;\n        private readonly AssemblyCopyMode _copyMode;\n\n        public AssemblyRequirement(string name)\n            : this(name, AssemblyCopyMode.Once)\n        {\n        }\n\n        public AssemblyRequirement(string name, AssemblyCopyMode copyMode)\n        {\n            _copyMode = copyMode;\n            _assembly = Assembly.Load(name);\n        }\n\n        public AssemblyRequirement(Assembly assembly)\n            : this(assembly, AssemblyCopyMode.Once)\n        {\n        }\n\n        public AssemblyRequirement(Assembly assembly, AssemblyCopyMode copyMode)\n        {\n            _copyMode = copyMode;\n            _assembly = assembly;\n        }\n\n        public bool ShouldCopyFile(string fileName, string directory)\n        {\n            if (!fileSystem.FileExists(fileName)) return true;\n\n            if (_copyMode == AssemblyCopyMode.Always) return true;\n\n            if (_copyMode == AssemblyCopyMode.SemVerCompatible && Path.GetExtension(fileName) == \".dll\")\n            {\n                var sourceVersion = _assembly.GetName().Version;\n                var currentVersion = AssemblyVersionOf(fileName);\n\n                if (!IsSemVerCompatible(sourceVersion, currentVersion))\n                {\n                    var template = \"The versions of {0} in the source {1} ({2}) and destination directory {3} ({4}) are incompatible\";\n                    throw new Exception(template.ToFormat(_assembly.GetName().Name, _assembly.Location, sourceVersion.ToString(), directory, currentVersion.ToString()));\n                }\n            }\n\n            return false;\n        }\n\n        public void Move(string directory)\n        {\n            var location = _assembly.Location;\n            var fileName = Path.GetFileName(location);\n\n            var filePath = directory.AppendPath(fileName);\n            if (ShouldCopyFile(filePath, directory))\n            {\n                Console.WriteLine(\"Copying {0} to {1}\", location, directory);\n                fileSystem.CopyToDirectory(location, directory);\n            }\n\n\n            var pdb = Path.GetFileNameWithoutExtension(fileName) + \".pdb\";\n            var pdbPath = directory.AppendPath(Path.GetFileName(pdb));\n            if (fileSystem.FileExists(pdb) && ShouldCopyFile(pdbPath, directory))\n            {\n                fileSystem.CopyToDirectory(location.ParentDirectory().AppendPath(pdb), directory);\n            }\n        }\n\n        public static bool IsSemVerCompatible(string source, string destination)\n        {\n            \n            var sourceVersion = Version.Parse(source);\n            var destinationVersion = Version.Parse(destination);\n\n            return IsSemVerCompatible(sourceVersion, destinationVersion);\n        }\n\n        public static bool IsSemVerCompatible(Version sourceVersion, Version destinationVersion)\n        {\n            if (sourceVersion.Major != destinationVersion.Major)\n            {\n                return false;\n            }\n\n            return (sourceVersion.Minor <= destinationVersion.Minor);\n        }\n\n        public static Version AssemblyVersionOf(string filePath)\n        {\n            return Assembly.LoadFrom(filePath).GetName().Version;\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Remote/RemoteDomainExpression.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core.Services.Messaging;\n\nnamespace FubuMVC.Core.Services.Remote\n{\n    public interface IAssemblyMover\n    {\n        void MoveAssemblies(AppDomainSetup setup);\n    }\n\n    public class RemoteDomainExpression : IAssemblyMover\n    {\n        private readonly static FileSystem fileSystem = new FileSystem();\n        private readonly MessagingHub _listeners = new MessagingHub();\n        private readonly IList<AssemblyRequirement> _requirements = new List<AssemblyRequirement>(); \n\n        private readonly AppDomainSetup _setup = new AppDomainSetup\n        {\n            ApplicationName = \"Bottle-Services-AppDomain\",\n            ShadowCopyFiles = \"true\",\n            ConfigurationFile = \"BottleServiceRunner.exe.config\",\n            ApplicationBase = \".\".ToFullPath()\n        };\n\n        public readonly Cache<string, string> Properties = new Cache<string, string>(key => null);\n\n        public AppDomainSetup Setup\n        {\n            get { return _setup; }\n        }\n\n        public void UseParallelServiceDirectory(string directory)\n        {\n            var path = FubuRuntime.DefaultApplicationPath();\n\n            ServiceDirectory = path.ParentDirectory().AppendPath(directory);\n        }\n\n        public string ServiceDirectory\n        {\n            get { return _setup.ApplicationBase; }\n            set\n            {\n                _setup.ApplicationBase = value;\n\n                if (fileSystem.DirectoryExists(value, \"bin\"))\n                {\n                    _setup.PrivateBinPath = \"bin\";\n                }\n\n                if (fileSystem.DirectoryExists(value, \"bin\", \"Release\"))\n                {\n                    _setup.PrivateBinPath = \"bin\".AppendPath(\"Release\");\n                }\n                else if (fileSystem.DirectoryExists(value, \"bin\", \"Debug\"))\n                {\n                    _setup.PrivateBinPath = \"bin\".AppendPath(\"Debug\");\n                }\n\n                if (fileSystem.FileExists(value.AppendPath(\"App.config\")))\n                {\n                    _setup.ConfigurationFile = value.ToFullPath().AppendPath(\"App.config\");\n                }\n                else if (fileSystem.FileExists(value.AppendPath(\"Web.config\")))\n                {\n                    _setup.ConfigurationFile = value.ToFullPath().AppendPath(\"Web.config\");\n                }\n                // Now check for other cased files for when the fs is case sensitive.\n                if (fileSystem.FileExists(value.AppendPath(\"app.config\")))\n                {\n                    _setup.ConfigurationFile = value.ToFullPath().AppendPath(\"app.config\");\n                }\n                else if (fileSystem.FileExists(value.AppendPath(\"web.config\")))\n                {\n                    _setup.ConfigurationFile = value.ToFullPath().AppendPath(\"web.config\");\n                }\n            }\n        }\n\n        /// <summary>\n        /// Use to force the selection of bin/Debug or bin/Release for the private bin path of the remote AppDomain\n        /// </summary>\n        public string BuildProfile\n        {\n            set\n            {\n                if (fileSystem.DirectoryExists(_setup.ApplicationBase, \"bin\", value))\n                {\n                    _setup.PrivateBinPath = \"bin\".AppendPath(value);\n                }\n            }\n        }\n\n        public MessagingHub Listeners\n        {\n            get { return _listeners; }\n        }\n\n        public string BootstrapperName { get; set; }\n\n        /// <summary>\n        /// This is primarily used in development and testing scenarios to remotely run\n        /// a service in a parallel project.\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"compileTarget\"></param>\n        public void LoadAssemblyContainingType<T>(string compileTarget = \"Debug\")\n        {\n            string assemblyName = typeof (T).Assembly.GetName().Name;\n            string domainPath = AppDomain.CurrentDomain.BaseDirectory.ParentDirectory().ParentDirectory().ParentDirectory()\n                                   .AppendPath(assemblyName, \"bin\", compileTarget);\n\n            _setup.ApplicationBase = domainPath;\n        }\n\n        /// <summary>\n        /// Sets the AssemblyCopyMode of each required assembly unless explicitly set in the RequireAssemblyXYZ Methods\n        /// </summary>\n        public AssemblyCopyMode AssemblyCopyMode { get; set; }\n\n        public void RequireAssembly(string name, AssemblyCopyMode copyMode)\n        {\n            _requirements.Add(new AssemblyRequirement(name, copyMode));\n        }\n\n        public void RequireAssembly(string name)\n        {\n            RequireAssembly(name, AssemblyCopyMode);\n        }\n\n        public void RequireAssemblyContainingType<T>()\n        {\n            RequireAssemblyContainingType<T>(AssemblyCopyMode);\n        }\n\n        public void RequireAssemblyContainingType<T>(AssemblyCopyMode copyMode)\n        {\n            _requirements.Add(new AssemblyRequirement(typeof(T).Assembly, copyMode));\n        }\n\n        void IAssemblyMover.MoveAssemblies(AppDomainSetup setup)\n        {\n            var binaryPath = setup.ApplicationBase;\n            if (setup.PrivateBinPath.IsNotEmpty())\n            {\n                if (Path.IsPathRooted(setup.PrivateBinPath))\n                {\n                    binaryPath = setup.PrivateBinPath;\n                }\n                else\n                {\n                    binaryPath = setup.ApplicationBase.AppendPath(setup.PrivateBinPath);\n                }\n            }\n\n            _requirements.Each(x => x.Move(binaryPath));\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Remote/RemoteServiceRunner.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Services.Messaging;\n\nnamespace FubuMVC.Core.Services.Remote\n{\n    public class RemoteServiceRunner : IDisposable, IListener<ServiceStarted>\n    {\n        private AppDomain _domain;\n        private readonly IMessagingHub _messagingHub = new MessagingHub();\n        private RemoteServicesProxy _proxy;\n        private RemoteListener _remoteListener;\n        private readonly IList<ServiceStarted> _started = new List<ServiceStarted>();\n        private readonly RemoteDomainExpression _expression;\n\n        public RemoteServiceRunner(Action<RemoteDomainExpression> configure)\n        {\n            var expression = new RemoteDomainExpression();\n            configure(expression);\n\n            _expression = expression;\n\n            _messagingHub.AddListener(this);\n\n            startUpAppDomain(expression);\n        }\n\n        private void startUpAppDomain(RemoteDomainExpression expression)\n        {\n            AppDomainSetup setup = expression.Setup;\n            _domain = AppDomain.CreateDomain(expression.Setup.ApplicationName, null, setup);\n\n            expression.As<IAssemblyMover>().MoveAssemblies(setup);\n\n            Type proxyType = typeof (RemoteServicesProxy);\n            _proxy = (RemoteServicesProxy)\n                _domain.CreateInstanceAndUnwrap(proxyType.Assembly.FullName, proxyType.FullName);\n\n            _remoteListener = new RemoteListener(_messagingHub);\n\n            _proxy.Start(expression.BootstrapperName, expression.Properties.ToDictionary().As<Dictionary<string, string>>(),\n                _remoteListener);\n        }\n\n        /// <summary>\n        /// Simple way to launch and control a remote AppDomain assuming there is only one IApplicationLoader\n        /// in all the assemblies in the new AppDomain.\n        /// </summary>\n        /// <param name=\"path\"></param>\n        /// <param name=\"binPath\"></param>\n        /// <param name=\"configFile\"></param>\n        public RemoteServiceRunner(string path, string binPath = null, string configFile = null) : this(x => {\n            x.ServiceDirectory = path;\n            if (binPath.IsNotEmpty())\n            {\n                x.Setup.PrivateBinPath = binPath;\n            }\n\n            if (configFile.IsNotEmpty())\n            {\n                x.Setup.ConfigurationFile = configFile;\n            }\n        })\n        {\n            \n        }\n\n        public IEnumerable<ServiceStarted> Started\n        {\n            get { return _started; }\n        }\n\n        public IMessagingHub Messaging\n        {\n            get { return _messagingHub; }\n        }\n\n        public void Dispose()\n        {\n            try\n            {\n                shutdownAppDomain();\n            }\n            catch (Exception e)\n            {\n                Console.WriteLine(\"Problem trying to shutdown a remote AppDomain:\");\n                Console.WriteLine(e);\n            }\n        }\n\n        private void shutdownAppDomain()\n        {\n            _proxy.Shutdown();\n            AppDomain.Unload(_domain);\n\n\n            _proxy = null;\n            _domain = null;\n        }\n\n        void IListener<ServiceStarted>.Receive(ServiceStarted message)\n        {\n            _started.Add(message);\n        }\n\n        public void WaitForServiceToStart<T>() where T : IActivator\n        {\n            Wait.Until(() => _started.Any(x => x.ActivatorTypeName == typeof (T).AssemblyQualifiedName));\n        }\n\n        public void SendRemotely<T>(T message)\n        {\n            string json = JsonSerialization.ToJson(message);\n            _proxy.SendJson(json);\n        }\n\n        public T WaitForMessage<T>(Action action = null, int wait = 5000)\n        {\n            return WaitForMessage<T>(t => true, action, wait);\n        }\n\n        public T WaitForMessage<T>(Func<T, bool> filter, Action action = null, int wait = 5000)\n        {\n            if (action == null)\n            {\n                action = () => { };\n            }\n\n            return _remoteListener.WaitForMessage(filter, action, wait);\n        }\n\n        public static RemoteServiceRunner For<T>(Action<RemoteDomainExpression> configure = null)\n        {\n            ApplicationLoaderFinder.DetermineLoaderType(typeof (T));\n\n            if (configure == null)\n            {\n                configure = x => { };\n            }\n\n            return new RemoteServiceRunner(x => {\n                configure(x);\n                x.BootstrapperName = typeof (T).AssemblyQualifiedName;\n            });\n        }\n\n        public void Recycle()\n        {\n            shutdownAppDomain();\n            startUpAppDomain(_expression);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Remote/RemoteServicesProxy.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.Services.Messaging;\n\nnamespace FubuMVC.Core.Services.Remote\n{\n    public class LoaderStarted\n    {\n        public string LoaderTypeName { get; set; }\n    }\n\n    public class RemoteServicesProxy : MarshalByRefObject\n    {\n        private IDisposable _shutdown;\n\n        public void Start(string bootstrapperName, MarshalByRefObject remoteListener)\n        {\n            Start(bootstrapperName, new Dictionary<string, string>(), remoteListener);\n        }\n\n        public void Start(string bootstrapperName, Dictionary<string, string> properties, MarshalByRefObject remoteListener)\n        {\n            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;\n\n            //var domainSetup = AppDomain.CurrentDomain.SetupInformation;\n            \n            // TODO -- what the hell here? This is bad bad bad.\n            //System.Environment.CurrentDirectory = domainSetup.ApplicationBase;\n             \n            // TODO -- need to handle exceptions gracefully here\n            GlobalMessageTracking.Start((IRemoteListener) remoteListener);\n\n            var loader = ApplicationLoaderFinder.FindLoader(bootstrapperName);\n            _shutdown = loader.Load(properties);\n\n            GlobalMessageTracking.SendMessage(new LoaderStarted\n            {\n                LoaderTypeName = _shutdown.GetType().FullName\n            });\n        }\n\n        void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)\n        {\n            Console.WriteLine(\"An an unhandled exception occurred at the remote AppDomain hosted at \" + AppDomain.CurrentDomain.BaseDirectory);\n            Console.WriteLine(e.ExceptionObject.ToString());\n        }\n\n        public void Shutdown()\n        {\n            GlobalMessageTracking.Stop();\n            if (_shutdown != null) _shutdown.Dispose();\n        }\n\n        public override object InitializeLifetimeService()\n        {\n            return null;\n        }\n\n        public void SendJson(string json)\n        {\n            GlobalMessageTracking.Messaging.SendJson(json);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Remote/ServiceStarted.cs",
    "content": "﻿namespace FubuMVC.Core.Services.Remote\n{\n    public class ServiceStarted\n    {\n        public string ActivatorTypeName { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Services/Wait.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Threading;\n\nnamespace FubuMVC.Core.Services\n{\n    public static class Wait\n    {\n        public static bool Until(Func<bool> condition, int millisecondPolling = 500, int timeoutInMilliseconds = 5000)\n        {\n            if (condition()) return true;\n\n            var clock = new Stopwatch();\n            clock.Start();\n\n            while (clock.ElapsedMilliseconds < timeoutInMilliseconds)\n            {\n                Thread.Yield();\n                Thread.Sleep(millisecondPolling);\n\n                if (condition()) return true;\n            }\n\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/AppSettingProviderRegistry.cs",
    "content": "using FubuCore;\nusing FubuCore.Binding;\nusing FubuCore.Binding.InMemory;\nusing FubuCore.Configuration;\nusing FubuCore.Conversion;\nusing FubuCore.Reflection;\nusing StructureMap;\n\nnamespace FubuMVC.Core.StructureMap\n{\n    public class AppSettingProviderRegistry : Registry\n    {\n        public AppSettingProviderRegistry()\n        {\n            For<ISettingsProvider>().Use<AppSettingsProvider>();\n            For<IObjectResolver>().Use<ObjectResolver>();\n            For<IServiceLocator>().Use<StructureMapServiceLocator>();\n            For<ITypeDescriptorCache>().Use<TypeDescriptorCache>();\n            For<IBindingLogger>().Use<NulloBindingLogger>();\n            For<IObjectConverter>().Use<ObjectConverter>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/ContainerExtensions.cs",
    "content": "using System;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Runtime;\nusing StructureMap;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.StructureMap\n{\n    public static class ContainerExtensions\n    {\n        public static void Activate<T>(this Registry registry, string description, Action<T> activation)\n        {\n            registry.For<IActivator>().Add<LambdaActivator<T>>()\n                .Ctor<string>().Is(description)\n                .Ctor<Action<T>>().Is(activation);\n        }\n\n        public static void Activate(this Registry registry, string description, Action activation)\n        {\n            registry.For<IActivator>().Add<LambdaActivator>()\n                .Ctor<string>().Is(description)\n                .Ctor<Action>().Is(activation);\n        }\n\n        public static Instance FindDependencyDefinitionFor<T>(this IConfiguredInstance instance)\n        {\n            var dependency = instance.Dependencies.FirstOrDefault(x => x.Type == typeof (T));\n            return dependency == null ? null : dependency.Dependency as Instance;\n        }\n\n        public static T FindDependencyValueFor<T>(this IConfiguredInstance instance) where T : class\n        {\n            var dependency = instance.Dependencies.FirstOrDefault(x => x.Type == typeof(T));\n\n\n            if (dependency == null) return null;\n\n            if (dependency.Dependency is ObjectInstance)\n            {\n                return dependency.Dependency.As<ObjectInstance>().Object as T;\n            }\n\n            return dependency.Dependency as T;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/Diagnostics/AssemblyDTO.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing StructureMap.Query;\n\nnamespace FubuMVC.Core.StructureMap.Diagnostics\n{\n    public class AssemblyDTO\n    {\n        public AssemblyDTO(Assembly assembly, IEnumerable<InstanceRef> instances)\n        {\n            name = assembly.GetName().Name + \".dll\";\n\n            var matching = instances.Where(x => x.MatchesAssembly(assembly)).ToArray();\n            count = matching.Length;\n\n            namespaces = matching.SelectMany(x => x.Namespaces(assembly))\n                .Distinct()\n                .OrderBy(x => x)\n                .Select(ns => {\n                    return new Namespace\n                    {\n                        name = ns,\n                        count = matching.Count(x => x.MatchesNamespace(ns))\n                    };\n                }).ToArray();\n        }\n\n        public AssemblyDTO()\n        {\n        }\n\n        public string name;\n        public int count;\n        public Namespace[] namespaces;\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/Diagnostics/BuildPlanRequest.cs",
    "content": "﻿namespace FubuMVC.Core.StructureMap.Diagnostics\n{\n    public class BuildPlanRequest\n    {\n        public string Name { get; set; }\n        public string PluginType { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/Diagnostics/InstanceDTO.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing StructureMap.Query;\n\nnamespace FubuMVC.Core.StructureMap.Diagnostics\n{\n    public class InstanceDTO\n    {\n        public InstanceDTO()\n        {\n        }\n\n        public InstanceDTO(InstanceRef model)\n        {\n            name = model.Name;\n            lifecycle = model.Lifecycle.GetType().Name.Replace(\"Lifecycle\", \"\");\n            returnedType = model.ReturnedType.GetFullName();\n            description = model.Description;\n            hasBeenCreated = model.ObjectHasBeenCreated();\n            pluginType = model.PluginType.GetFullName();\n\n            Guid ignored;\n            if (Guid.TryParse(name, out ignored))\n            {\n                name = \"(guid)\";\n            }\n\n            key = \"{0}/{1}\".ToFormat(model.PluginType.GetFullName(), model.Name);\n        }\n\n        public string name { get; set; }\n        public string lifecycle { get; set; }\n        public string returnedType { get; set; }\n        public string description { get; set; }\n        public bool hasBeenCreated { get; set; }\n        public string pluginType { get; set; }\n        public string key { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/Diagnostics/Namespace.cs",
    "content": "﻿namespace FubuMVC.Core.StructureMap.Diagnostics\n{\n    public class Namespace\n    {\n        public string name;\n        public int count;\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/Diagnostics/PluginTypeDTO.cs",
    "content": "﻿using System.Linq;\nusing FubuCore;\nusing StructureMap.Query;\n\nnamespace FubuMVC.Core.StructureMap.Diagnostics\n{\n    public class PluginTypeDTO\n    {\n        public PluginTypeDTO()\n        {\n        }\n\n        public PluginTypeDTO(IPluginTypeConfiguration configuration)\n        {\n            profile = configuration.ProfileName;\n            pluginType = configuration.PluginType.GetFullName();\n            lifecycle = configuration.Lifecycle.GetType().Name.Replace(\"Lifecycle\", \"\");\n\n            if (configuration.Default != null)\n            {\n                defaultInstance = new InstanceDTO(configuration.Default);\n\n                others = configuration.Instances.Where(x => x.Name != configuration.Default.Name)\n                    .Select(x => new InstanceDTO(x))\n                    .ToArray();\n            }\n            else\n            {\n                others = configuration.Instances.Select(x => new InstanceDTO(x))\n                    .ToArray();\n            }\n\n            if (configuration.MissingNamedInstance != null)\n            {\n                missingName = new InstanceDTO(configuration.MissingNamedInstance);\n            }\n\n            if (configuration.Fallback != null)\n            {\n                fallback = new InstanceDTO(configuration.Fallback);\n            }\n        }\n\n        public string profile { get; set; }\n        public string pluginType { get; set; }\n        public string lifecycle { get; set; }\n\n        public InstanceDTO[] others { get; set; }\n\n        public InstanceDTO defaultInstance { get; set; }\n        public InstanceDTO missingName { get; set; }\n        public InstanceDTO fallback { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/Diagnostics/SearchOption.cs",
    "content": "﻿using System;\nusing System.Reflection;\nusing FubuCore;\n\nnamespace FubuMVC.Core.StructureMap.Diagnostics\n{\n    public class SearchOption\n    {\n        public SearchOption()\n        {\n        }\n\n        public SearchOption(Assembly assembly)\n        {\n            value = display = assembly.GetName().Name;\n            type = \"Assembly\";\n        }\n\n        public static SearchOption ForNamespace(string ns)\n        {\n            return new SearchOption\n            {\n                type = \"Namespace\",\n                value = ns,\n                display = ns\n            };\n        }\n\n        public static SearchOption ForReturnedType(Type returnedType)\n        {\n            return new SearchOption\n            {\n                type = \"Returned-Type\",\n                value = returnedType.GetFullName(),\n                display = returnedType.Name\n            };\n        }\n\n        public static SearchOption ForPluginType(Type pluginType)\n        {\n            return new SearchOption\n            {\n                type = \"Plugin-Type\",\n                value = pluginType.GetFullName(),\n                display = pluginType.Name\n            };\n        }\n\n        public string display;\n        public string value;\n        public string type;\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/Diagnostics/SearchOptions.cs",
    "content": "﻿namespace FubuMVC.Core.StructureMap.Diagnostics\n{\n    public class SearchOptions\n    {\n        public AssemblyDTO[] assemblies;\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/Diagnostics/SettingsFubuDiagnostics.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Diagnostics;\nusing FubuMVC.Core.Runtime;\nusing HtmlTags;\nusing StructureMap;\n\nnamespace FubuMVC.Core.StructureMap.Diagnostics\n{\n    public class SettingsFubuDiagnostics\n    {\n        private readonly IContainer _container;\n\n        public SettingsFubuDiagnostics(IServiceFactory facility)\n        {\n            if (facility is StructureMapServiceFactory)\n            {\n                _container = facility.As<StructureMapServiceFactory>().Container;\n            }\n            else\n            {\n                _container = new Container();\n            }\n        }\n\n        public Dictionary<string, object> get_settings()\n        {\n            var types = settingTypes();\n\n            var settings = types.Select(x => _container.GetInstance(x)).Select(x => new SettingType(x)).ToArray();\n\n            return new Dictionary<string, object> {{\"settings\", settings}};\n        }\n\n        private IEnumerable<Type> settingTypes()\n        {\n            return _container.Model.PluginTypes\n                .Where(x => x.PluginType.IsConcrete() && x.PluginType.Name.EndsWith(\"Settings\"))\n                .Select(x => x.PluginType)\n                .OrderBy(x => x.Name);\n        }\n\n        public SettingVisualization get_setting_Name(SettingSearch search)\n        {\n            var type = settingTypes().FirstOrDefault(x => x.FullName == search.Name);\n            var setting = _container.GetInstance(type);\n\n            return new SettingVisualization(setting);\n        }\n    }\n\n    public class SettingSearch\n    {\n        private string _name;\n\n        public string Name\n        {\n            get { return _name; }\n            set { _name = value.Replace(\"_\", \".\"); }\n        }\n    }\n\n    public class SettingVisualization\n    {\n        public string title;\n        public string type;\n        public string body;\n\n\n        public SettingVisualization()\n        {\n        }\n\n        public SettingVisualization(object settings)\n        {\n            var description = Description.For(settings);\n            title = description.Title;\n\n\n            if (settings.GetType().HasAttribute<SerializableAttribute>())\n            {\n                type = \"json\";\n                body = JsonUtil.ToJson(settings);\n            }\n            else\n            {\n                type = \"html\";\n                body = new DescriptionBodyTag(description).ToString();\n            }\n        }\n    }\n\n    public class SettingType\n    {\n        public SettingType()\n        {\n        }\n\n        public SettingType(object settings)\n        {\n            type = settings.GetType().FullName;\n            name = settings.GetType().Name;\n            description = Description.For(settings).Title;\n        }\n\n        public string name;\n        public string description;\n        public string type;\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/Diagnostics/StructureMapExtensions.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Reflection;\nusing StructureMap.Query;\n\nnamespace FubuMVC.Core.StructureMap.Diagnostics\n{\n    public static class StructureMapExtensions\n    {\n        public static bool MatchesAssembly(this InstanceRef instance, Assembly assembly)\n        {\n            return instance.ReturnedType.Assembly == assembly || instance.PluginType.Assembly == assembly;\n        }\n\n        public static bool MatchesNamespace(this InstanceRef instance, string ns)\n        {\n            return instance.ReturnedType.Namespace == ns || instance.PluginType.Namespace == ns;\n        }\n\n        public static IEnumerable<string> Namespaces(this InstanceRef instance, Assembly assembly)\n        {\n            if (instance.PluginType.Assembly == assembly)\n            {\n                yield return instance.PluginType.Namespace;\n            }\n\n            if (instance.ReturnedType.Assembly == assembly)\n            {\n                yield return instance.ReturnedType.Namespace;\n            }\n        } \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/Diagnostics/StructureMapFubuDiagnostics.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Runtime;\nusing StructureMap;\nusing StructureMap.Query;\n\nnamespace FubuMVC.Core.StructureMap.Diagnostics\n{\n\n    public class StructureMapFubuDiagnostics\n    {\n        private readonly IContainer _container;\n\n        public StructureMapFubuDiagnostics(IServiceFactory facility)\n        {\n            if (facility is StructureMapServiceFactory)\n            {\n                _container = facility.As<StructureMapServiceFactory>().Container;\n            }\n            else\n            {\n                _container = new Container();\n            }\n        }\n\n        private IEnumerable<InstanceRef> instances()\n        {\n            foreach (var pluginType in _container.Model.PluginTypes)\n            {\n                foreach (var instanceRef in pluginType.Instances)\n                {\n                    yield return instanceRef;\n                }\n\n                if (pluginType.MissingNamedInstance != null) yield return pluginType.MissingNamedInstance;\n\n                if (pluginType.Fallback != null) yield return pluginType.Fallback;\n            }\n        }\n\n        public SearchResults get_search_Type_Value(StructureMapSearch search)\n        {\n            var results = new SearchResults\n            {\n                search = search,\n                pluginTypes = new PluginTypeDTO[0],\n                instances = new InstanceDTO[0]\n            };\n\n            switch (search.Type)\n            {\n                case \"Assembly\":\n                    var assemblyName = search.Value.Replace(\".dll\", \"\");\n\n                    results.pluginTypes =\n                        _container.Model.PluginTypes.Where(x => x.PluginType.Assembly.GetName().Name == assemblyName)\n                            .Select(x => new PluginTypeDTO(x)).ToArray();\n\n                    break;\n\n                case \"Plugin-Type\":\n                    results.pluginTypes = _container.Model\n                        .PluginTypes.Where(x => x.PluginType.GetFullName() == search.Value)\n                        .Select(x => new PluginTypeDTO(x))\n                        .ToArray();\n\n\n                    break;\n\n                case \"Namespace\":\n                    results.pluginTypes = _container.Model\n                        .PluginTypes.Where(x => x.PluginType.Namespace == search.Value)\n                        .Select(x => new PluginTypeDTO(x))\n                        .ToArray();\n                    break;\n\n                case \"Returned-Type\":\n                    results.instances = instances().Where(x => x.ReturnedType.GetFullName() == search.Value)\n                        .Select(x => new InstanceDTO(x)).ToArray();\n\n                    break;\n\n                default:\n                    throw new NotImplementedException(\"DOES NOT COMPUTE\");\n            }\n\n            return results;\n        }\n\n        public string get_whatdoihave()\n        {\n            return _container.WhatDoIHave();\n        }\n\n        public string get_build_plan_PluginType_Name(BuildPlanRequest request)\n        {\n            var instance = instances().FirstOrDefault(x => x.Name.EqualsIgnoreCase(request.Name) && x.PluginType.GetFullName() == request.PluginType);\n            return instance == null\n                ? \"Cannot find an Instance named '{0}' for PluginType {1}\".ToFormat(request.Name, request.PluginType)\n                : instance.DescribeBuildPlan();\n        }\n\n\n\n        public SearchOptions get_summary()\n        {\n            var options = instances().ToArray();\n            var pluginTypes = options.Select(x => x.PluginType).Distinct().ToArray();\n            var returnedTypes = options.Select(x => x.ReturnedType).Distinct().Where(x => x != typeof (object)).ToArray();\n\n            var assemblies =\n                pluginTypes.Select(x => x.Assembly).Union(returnedTypes.Select(x => x.Assembly)).Distinct().ToArray();\n\n            return new SearchOptions\n            {\n                assemblies =\n                    assemblies.OrderBy(x => x.GetName().Name).Select(assem => new AssemblyDTO(assem, options)).ToArray()\n            };\n        }\n\n        public SearchOption[] get_search_options()\n        {\n            return findOptions().ToArray();\n        }\n\n        private IEnumerable<SearchOption> findOptions()\n        {\n            var options = instances().ToArray();\n            var pluginTypes = options.Select(x => x.PluginType).Distinct().ToArray();\n            var returnedTypes = options.Select(x => x.ReturnedType).Where(x => x != typeof (object)).ToArray();\n\n            var assemblies =\n                pluginTypes.Select(x => x.Assembly).Union(returnedTypes.Select(x => x.Assembly)).Distinct().ToArray();\n\n            foreach (var assembly in assemblies)\n            {\n                yield return new SearchOption(assembly);\n            }\n\n            foreach (var pluginType in pluginTypes)\n            {\n                yield return SearchOption.ForPluginType(pluginType);\n            }\n\n            foreach (var returnedType in returnedTypes)\n            {\n                yield return SearchOption.ForReturnedType(returnedType);\n            }\n\n            var namespaces = pluginTypes.Union(returnedTypes).Select(x => x.Namespace).Distinct();\n            foreach (var ns in namespaces)\n            {\n                yield return SearchOption.ForNamespace(ns);\n            }\n        }\n    }\n\n    public class SearchResults\n    {\n        public PluginTypeDTO[] pluginTypes { get; set; }\n        public InstanceDTO[] instances { get; set; }\n        public StructureMapSearch search { get; set; }\n    }\n\n    public class StructureMapSearch\n    {\n        public string Type { get; set; }\n        public string Value { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/IContainerExtension.cs",
    "content": "﻿using StructureMap;\n\nnamespace FubuMVC.Core.StructureMap\n{\n    // TODO -- this needs to be in SM3 itself\n    public interface IContainerExtension\n    {\n        void Extend(IContainer container);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/NestedStructureMapContainerBehavior.cs",
    "content": "using System;\nusing System.Diagnostics;\nusing System.Threading.Tasks;\nusing FubuCore.Binding;\nusing FubuMVC.Core.Behaviors;\nusing StructureMap;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.StructureMap\n{\n    public class NestedStructureMapContainerBehavior : IActionBehavior, IDisposable\n    {\n        private readonly TypeArguments _arguments;\n        private readonly Guid _behaviorId;\n        private readonly IContainer _container;\n        private IContainer _nested;\n\n        public NestedStructureMapContainerBehavior(IContainer container, TypeArguments arguments, Guid behaviorId)\n        {\n            _container = container;\n            _arguments = arguments;\n            _behaviorId = behaviorId;\n        }\n\n        public Task Invoke()\n        {\n            var behavior = StartInnerBehavior();\n\n            return behavior.Invoke();\n        }\n\n        public IActionBehavior StartInnerBehavior()\n        {\n            _nested = _container.GetNestedContainer(_arguments);\n\n            var behavior = _nested.GetInstance<IActionBehavior>(_behaviorId.ToString());\n            return behavior;\n        }\n\n        public Task InvokePartial()\n        {\n            // This should never be called\n            throw new NotSupportedException();\n        }\n\n        public void Dispose()\n        {\n            _nested.Dispose();\n        }\n    }\n\n\n    public static class ServiceArgumentsExtensions\n    {\n        public static ExplicitArguments ToExplicitArgs(this ServiceArguments arguments)\n        {\n            var explicits = new ExplicitArguments();\n            arguments.EachService((type, o) => explicits.Set(type, o));\n\n            return explicits;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/Settings/SettingPolicy.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing StructureMap.Graph;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.StructureMap.Settings\n{\n    public class SettingPolicy : IFamilyPolicy\n    {\n        public PluginFamily Build(Type type)\n        {\n            if (type.Name.EndsWith(\"Settings\") && type.IsConcreteWithDefaultCtor())\n            {\n                var family = new PluginFamily(type);\n                var instance = buildInstanceForType(type);\n                family.SetDefault(instance);\n\n                return family;\n            }\n\n            return null;\n        }\n\n        public bool AppliesToHasFamilyChecks\n        {\n            get { return true; }\n        }\n\n\n        private static Instance buildInstanceForType(Type type)\n        {\n            var instanceType = typeof (SettingsInstance<>).MakeGenericType(type);\n            var instance = Activator.CreateInstance(instanceType).As<Instance>();\n            return instance;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/SettingsScanner.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Configuration;\nusing StructureMap;\nusing StructureMap.Graph;\nusing StructureMap.Graph.Scanning;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.StructureMap\n{\n    public class SettingsScanner : IRegistrationConvention\n    {\n        public static readonly Func<Type, bool> DefaultFilter =\n            type => type.Name.EndsWith(\"Settings\") && !type.IsInterface;\n\n        private readonly Func<Type, bool> _filter;\n\n        public SettingsScanner()\n            : this(DefaultFilter)\n        {\n        }\n\n        public SettingsScanner(Func<Type, bool> filter)\n        {\n            _filter = filter;\n        }\n\n        public void ScanTypes(TypeSet types, Registry registry)\n        {\n            types.FindTypes(TypeClassification.Concretes | TypeClassification.Closed)\n                .Where(_filter)\n                .Each(type => Process(type, registry));\n        }\n\n        public void Process(Type type, Registry graph)\n        {\n            var instanceType = typeof(SettingsInstance<>).MakeGenericType(type);\n            var instance = Activator.CreateInstance(instanceType).As<Instance>();\n            graph.For(type).Add(instance).Singleton();\n        }\n    }\n\n    public class SettingsInstance<T> : LambdaInstance<T> where T : class, new()\n    {\n        public SettingsInstance() : base(\"Building {0} from application settings\".ToFormat(typeof(T).FullName), c => c.GetInstance<ISettingsProvider>().SettingsFor<T>())\n        {\n            LifecycleIs<SingletonLifecycle>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/StructureMapServiceFactory.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuCore.Binding;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Runtime;\nusing StructureMap;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Core.StructureMap\n{\n    public class StructureMapServiceFactory : IServiceFactory, IDisposable\n    {\n        private readonly Stack<IContainer> _containers = new Stack<IContainer>();\n\n        public StructureMapServiceFactory(IContainer container)\n        {\n            if (container == null) throw new ArgumentNullException(nameof(container));\n\n            _containers.Push(container);\n        }\n\n        public IContainer Container => _containers.Peek();\n\n        public virtual IActionBehavior BuildBehavior(TypeArguments arguments, Guid behaviorId)\n        {\n            return new NestedStructureMapContainerBehavior(Container, arguments, behaviorId);\n        }\n\n        public T Build<T>(TypeArguments arguments)\n        {\n            var explicitArguments = new ExplicitArguments();\n            foreach (var pair in arguments.Defaults)\n            {\n                explicitArguments.Set(pair.Key, pair.Value);\n            }\n\n            return Container.GetInstance<T>(explicitArguments);\n        }\n\n        public T Get<T>()\n        {\n            return Container.GetInstance<T>();\n        }\n\n        public IEnumerable<T> GetAll<T>()\n        {\n            return Container.GetAllInstances<T>();\n        }\n\n\n        public void Dispose()\n        {\n            _containers.Each(x => x.Dispose());\n        }\n\n        /// <summary>\n        /// Creates a new StructureMap child container and makes that the new active container\n        /// </summary>\n        public void StartNewScope()\n        {\n            var child = Container.CreateChildContainer();\n            _containers.Push(child);\n        }\n\n        /// <summary>\n        /// Tears down any active child container and pops it out of the active container stack\n        /// </summary>\n        public void TeardownScope()\n        {\n            if (_containers.Count >= 2)\n            {\n                var child = _containers.Pop();\n                child.Dispose();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/StructureMap/StructureMapServiceLocator.cs",
    "content": "using System;\nusing FubuCore;\nusing StructureMap;\n\nnamespace FubuMVC.Core.StructureMap\n{\n    public class StructureMapServiceLocator : IServiceLocator\n    {\n        private readonly IContainer _container;\n\n        public StructureMapServiceLocator(IContainer container)\n        {\n            _container = container;\n        }\n\n        public object GetInstance(Type type)\n        {\n            return _container.GetInstance(type);\n        }\n\n        public IContainer Container { get { return _container; } }\n\n\n        public TService GetInstance<TService>()\n        {\n            return _container.GetInstance<TService>();\n        }\n        \n        public TService GetInstance<TService>(string name)\n        {\n            return _container.GetInstance<TService>(name);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/AuthorizationOnPageExtensions.cs",
    "content": "﻿using FubuMVC.Core.Security;\nusing FubuMVC.Core.Security.Authorization;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.UI\n{\n    public static class AuthorizationOnPageExtensions\n    {\n        public static T ReadOnlyIfNotAuthorized<T>(this T tag) where T : HtmlTag\n        {\n            if (!tag.Authorized() && tag.TagName() == \"a\")\n            {\n                tag.Authorized(true);\n                tag.TagName(\"span\");\n            }\n\n            return tag;\n        }\n\n        public static HtmlTag RequiresAccessTo(this HtmlTag tag, params string[] roleName)\n        {\n            return tag.Authorized(tag.Authorized() && PrincipalRoles.IsInRole(roleName));\n        }\n\n\n\n        public static HtmlTag ReadOnly(this HtmlTag tag)\n        {\n            return ReadOnly(tag, true);\n        }\n\n        public static HtmlTag ReadOnly(this HtmlTag tag, bool condition)\n        {\n            if (condition)\n            {\n                tag.Attr(\"disabled\", \"disabled\");\n            }\n            return tag;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/DefaultHtmlConventions.cs",
    "content": "using FubuMVC.Core.Runtime;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.UI.Elements.Builders;\nusing FubuMVC.Core.UI.Forms;\nusing FubuMVC.Localization;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI\n{\n    public class DefaultHtmlConventions : HtmlConventionRegistry\n    {\n        public DefaultHtmlConventions()\n        {\n            Editors.BuilderPolicy<CheckboxBuilder>();\n\n            Editors.Always.BuildBy<TextboxBuilder>();\n\n            Editors.Modifier<AddNameModifier>();\n\n            Displays.Always.BuildBy<SpanDisplayBuilder>();\n\n            Labels.Always.BuildBy<LabelBuilder>();\n\n            Templates.Displays.Always.BuildBy<TemplateSpanBuilder>();\n            Templates.Editors.Always.BuildBy<TemplateTextboxBuilder>();\n\n            Templates.Displays.Always.ModifyWith<DataFldModifier>();\n            Templates.Editors.Always.ModifyWith<DataFldModifier>();\n\n            FieldChrome<DefinitionListFieldChrome>();\n\n            Forms.Add(new FormTagBuilder());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/ElementCategoryExpression.cs",
    "content": "using System;\nusing FubuMVC.Core.UI.Elements;\nusing HtmlTags;\nusing HtmlTags.Conventions;\nusing FubuCore;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.UI\n{\n    public class ElementCategoryExpression\n    {\n        private readonly BuilderSet<ElementRequest> _set;\n\n        public ElementCategoryExpression(BuilderSet<ElementRequest> set)\n        {\n            _set = set;\n        }\n\n        public void Add(Func<ElementRequest, bool> filter, IElementBuilder builder)\n        {\n            _set.Add(filter, builder);\n        }\n\n        public void Add(IElementBuilderPolicy policy)\n        {\n            _set.Add(policy);\n        }\n\n        public void Add(IElementModifier modifier)\n        {\n            _set.Add(modifier);\n        }\n\n        public void BuilderPolicy<T>() where T : IElementBuilderPolicy, new()\n        {\n            Add(new T());\n        }\n\n        public void Modifier<T>() where T : IElementModifier, new()\n        {\n            Add(new T());\n        }\n\n        public ElementActionExpression Always\n        {\n            get\n            {\n                return new ElementActionExpression(_set, req => true, \"Always\");\n            }\n        }\n\n        public ElementActionExpression If(Func<ElementRequest, bool> matches, string description = null)\n        {\n            return new ElementActionExpression(_set, matches, description);\n        }\n\n        public ElementActionExpression IfPropertyIs<T>()\n        {\n            return If(req => req.Accessor.PropertyType == typeof(T), \"Property type is \" + typeof(T).Name);\n        }\n\n        public ElementActionExpression IfPropertyTypeIs(Func<Type, bool> matches, string description = null)\n        {\n            return If(def => matches(def.Accessor.PropertyType), description);\n        }\n\n        public ElementActionExpression IfPropertyHasAttribute<T>() where T : Attribute\n        {\n            return If(req => req.Accessor.HasAttribute<T>(), \"Accessor has attribute [{0}]\".ToFormat(typeof (T).Name));\n        }\n\n        public void AddClassForAttribute<T>(string className) where T : Attribute\n        {\n            IfPropertyHasAttribute<T>().AddClass(className);\n        }\n\n        public void ModifyForAttribute<T>(Action<HtmlTag, T> modification, string description = null) where T : Attribute\n        {\n            IfPropertyHasAttribute<T>().ModifyWith(req =>\n            {\n                var att = req.Accessor.GetAttribute<T>();\n                modification(req.CurrentTag, att);\n            }, description);\n        }\n\n        public void ModifyForAttribute<T>(Action<HtmlTag> modification, string description = null) where T : Attribute\n        {\n            ModifyForAttribute<T>((tag, att) => modification(tag), description);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/ElementConventionsFubuPageExtensions.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.View;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.UI\n{\n    public static class ElementConventionsFubuPageExtensions\n    {\n        public static IElementGenerator<T> Tags<T>(this IFubuPage<T> page) where T : class\n        {\n            return page.Get<IElementGenerator<T>>();\n        }\n\n        /// <summary>\n        ///   Builds a tag that accepts user input for a property of the page's view model\n        /// </summary>\n        /// <typeparam name = \"T\">The model type of the strongly typed view</typeparam>\n        /// <param name = \"page\">The view</param>\n        /// <param name = \"expression\">An expression that specifies a property on the model</param>\n        /// <returns></returns>\n        public static HtmlTag InputFor<T>(this IFubuPage<T> page, Expression<Func<T, object>> expression)\n            where T : class\n        {\n            return page.Tags().InputFor(expression, model: page.Model);\n        }\n\n        /// <summary>\n        ///   Builds a tag that accepts user input for a property on a model retrieved from the <see cref = \"IFubuRequest\" />\n        /// </summary>\n        /// <typeparam name = \"T\">The type to retrieve from the request</typeparam>\n        /// <param name = \"page\">The view</param>\n        /// <param name = \"expression\">An expression that specifies a property on the retrieved type instance</param>\n        /// <returns></returns>\n        public static HtmlTag InputFor<T>(this IFubuPage page, Expression<Func<T, object>> expression) where T : class\n        {\n            return page.Get<IElementGenerator<T>>().InputFor(expression);\n        }\n\n        /// <summary>\n        ///   Builds a tag that accepts user input tag for a property on a provided model instance\n        /// </summary>\n        /// <typeparam name = \"T\">The type of the given model</typeparam>\n        /// <param name = \"page\">The view</param>\n        /// <param name = \"model\">The model used to provide values for the tag</param>\n        /// <param name = \"expression\">An expression that specifies a property on the provided model</param>\n        /// <returns></returns>\n        public static HtmlTag InputFor<T>(this IFubuPage page, T model, Expression<Func<T, object>> expression)\n            where T : class\n        {\n            return page.Get<IElementGenerator<T>>().InputFor(expression, model: model);\n        }\n\n\n        /// <summary>\n        ///   Builds a tag that displays the name of a property on the page's view model\n        /// </summary>\n        /// <typeparam name = \"T\">The model type of the strongly typed view</typeparam>\n        /// <param name = \"page\">The view</param>\n        /// <param name = \"expression\">An expression that specifies a property on the model</param>\n        /// <returns></returns>\n        public static HtmlTag LabelFor<T>(this IFubuPage<T> page, Expression<Func<T, object>> expression)\n            where T : class\n        {\n            return page.Get<IElementGenerator<T>>().LabelFor(expression, model:page.Model);\n        }\n\n        /// <summary>\n        ///   Builds a tag that displays the name of a property on a model retrieved from the <see cref = \"IFubuRequest\" />\n        /// </summary>\n        /// <typeparam name = \"T\">The type to retrieve from the request</typeparam>\n        /// <param name = \"page\">The view</param>\n        /// <param name = \"expression\">An expression that specifies a property on the retrieved type instance</param>\n        /// <returns></returns>\n        public static HtmlTag LabelFor<T>(this IFubuPage page, Expression<Func<T, object>> expression) where T : class\n        {\n            return page.Get<IElementGenerator<T>>().LabelFor(expression);\n        }\n\n\n        /// <summary>\n        ///   Builds a tag that displays the name of a property on a model retrieved from the <see cref = \"IFubuRequest\" />\n        /// </summary>\n        /// <typeparam name = \"T\">The type to retrieve from the request</typeparam>\n        /// <param name = \"page\">The view</param>\n        /// <param name = \"model\">The model used to provide values for the tag</param>\n        /// <param name = \"expression\">An expression that specifies a property on the retrieved type instance</param>\n        /// <returns></returns>\n        public static HtmlTag LabelFor<T>(this IFubuPage page, T model, Expression<Func<T, object>> expression)\n           where T : class\n        {\n            return page.Get<IElementGenerator<T>>().LabelFor(expression, model: model);\n        }\n\n        /// <summary>\n        ///   Builds a tag that displays the current value of a property on the page's view model\n        /// </summary>\n        /// <typeparam name = \"T\">The model type of the strongly typed view</typeparam>\n        /// <param name = \"page\">The view</param>\n        /// <param name = \"expression\">An expression that specifies a property on the model</param>\n        /// <returns></returns>\n        public static HtmlTag DisplayFor<T>(this IFubuPage<T> page, Expression<Func<T, object>> expression)\n            where T : class\n        {\n            return page.Get<IElementGenerator<T>>().DisplayFor(expression, model: page.Model);\n        }\n\n        /// <summary>\n        ///   Builds a tag that displays the current value of a property on a model retrieved from the <see cref = \"IFubuRequest\" />\n        /// </summary>\n        /// <typeparam name = \"T\">The type to retrieve from the request</typeparam>\n        /// <param name = \"page\">The view</param>\n        /// <param name = \"expression\">An expression that specifies a property on the retrieved type instance</param>\n        /// <returns></returns>\n        public static HtmlTag DisplayFor<T>(this IFubuPage page, Expression<Func<T, object>> expression)\n            where T : class\n        {\n            return page.Get<IElementGenerator<T>>().DisplayFor(expression);\n        }\n\n        /// <summary>\n        ///   Builds a tag that displays the current value of a property on a given model\n        /// </summary>\n        /// <typeparam name = \"T\">The type of the given model</typeparam>\n        /// <param name = \"page\">The view</param>2\n        /// <param name = \"model\">The model used to provide values for the tag</param>\n        /// <param name = \"expression\">An expression that specifies a property on the provided model</param>\n        /// <returns></returns>\n        public static HtmlTag DisplayFor<T>(this IFubuPage page, T model, Expression<Func<T, object>> expression)\n            where T : class\n        {\n            return page.Get<IElementGenerator<T>>().DisplayFor(expression, model:model);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/AccessorDef.cs",
    "content": "using System;\nusing System.Linq.Expressions;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.UI.Elements\n{\n    public class AccessorDef\n    {\n        public Accessor Accessor { get; set; }\n        public Type ModelType { get; set; }\n\n        public static AccessorDef For<T>(Expression<Func<T, object>> expression)\n        {\n            return new AccessorDef\n                   {\n                       Accessor = expression.ToAccessor(),\n                       ModelType = typeof(T)\n                   };\n        }\n\n        public bool Equals(AccessorDef other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return Equals(other.Accessor, Accessor) && Equals(other.ModelType, ModelType);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof(AccessorDef)) return false;\n            return Equals((AccessorDef)obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((Accessor != null ? Accessor.GetHashCode() : 0) * 397) ^\n                       (ModelType != null ? ModelType.GetHashCode() : 0);\n            }\n        }\n\n        public bool Is<T>()\n        {\n            return Accessor.PropertyType.Equals(typeof(T));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/AccessorOverrideElementBuilderPolicy.cs",
    "content": "﻿using System;\nusing FubuCore.Reflection;\nusing HtmlTags.Conventions;\nusing System.Linq;\n\nnamespace FubuMVC.Core.UI.Elements\n{\n    public class AccessorOverrideElementBuilderPolicy : IElementBuilderPolicy\n    {\n        private readonly AccessorRules _rules;\n        private readonly string _category;\n        private readonly string _profile;\n\n        public AccessorOverrideElementBuilderPolicy(AccessorRules rules, string category, string profile)\n        {\n            _rules = rules;\n            _category = category;\n            _profile = profile;\n        }\n\n        public bool Matches(ElementRequest subject)\n        {\n            return _rules.AllRulesFor<IElementTagOverride>(subject.Accessor).Any(x => x.Category == _category && x.Profile == _profile);\n        }\n\n        public ITagBuilder<ElementRequest> BuilderFor(ElementRequest subject)\n        {\n            return\n                _rules.AllRulesFor<IElementTagOverride>(subject.Accessor)\n                      .First(x => x.Category == _category && x.Profile == _profile)\n                      .Builder();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/AccessorOverridesClasses.cs",
    "content": "﻿using System;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI.Elements\n{\n    public class AccessorOverrideBuilderPolicy : IElementBuilderPolicy\n    {\n        public bool Matches(ElementRequest subject)\n        {\n            var overrides = subject.Get<FubuCore.Reflection.AccessorRules>();\n\n\n            throw new NotImplementedException();\n        }\n\n        public ITagBuilder<ElementRequest> BuilderFor(ElementRequest subject)\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/Builders/AddClassForAttributeModifier.cs",
    "content": "using System;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuCore;\n\nnamespace FubuMVC.Core.UI.Elements.Builders\n{\n    public class AddClassForAttributeModifier<T> : IElementModifier, DescribesItself where T : Attribute\n    {\n        private readonly string _className;\n\n        public AddClassForAttributeModifier(string className)\n        {\n            _className = className;\n        }\n\n        public bool Matches(ElementRequest token)\n        {\n            return token.Accessor.HasAttribute<T>();\n        }\n\n        public void Modify(ElementRequest request)\n        {\n            request.CurrentTag.AddClass(_className);\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = \"Adds class '{0}' if the accessor is decorated with attribute [{1}]\"\n                .ToFormat(_className, typeof (T).Name);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/Builders/AddClassModifier.cs",
    "content": "using FubuCore.Descriptions;\nusing FubuCore;\n\nnamespace FubuMVC.Core.UI.Elements.Builders\n{\n    public class AddClassModifier : IElementModifier, DescribesItself\n    {\n        private readonly string _className;\n\n        public AddClassModifier(string className)\n        {\n            _className = className;\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = \"Add class '{0}' to the element\".ToFormat(_className);\n        }\n\n        public bool Matches(ElementRequest token)\n        {\n            return true;\n        }\n\n        public void Modify(ElementRequest request)\n        {\n            request.CurrentTag.AddClass(_className);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/Builders/AddNameModifier.cs",
    "content": "using System.ComponentModel;\n\nnamespace FubuMVC.Core.UI.Elements.Builders\n{\n    [Description(\"Adds @name=[Accessor name] to any input elements to facilitate model binding\")]\n    public class AddNameModifier : IElementModifier\n    {\n        public bool Matches(ElementRequest token)\n        {\n            return true;\n        }\n\n        public void Modify(ElementRequest request)\n        {\n            var tag = request.CurrentTag;\n            if (tag.IsInputElement() && !tag.HasAttr(\"name\"))\n            {\n                tag.Attr(\"name\", request.ElementId);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/Builders/CheckboxBuilder.cs",
    "content": "using System.ComponentModel;\nusing HtmlTags;\nusing FubuCore;\n\nnamespace FubuMVC.Core.UI.Elements.Builders\n{\n    [Description(\"Builds an html checkbox for a boolean value\")]\n    public class CheckboxBuilder : ElementTagBuilder\n    {\n        public override bool Matches(ElementRequest subject)\n        {\n            return subject.Accessor.PropertyType == typeof(bool);\n        }\n\n        public override HtmlTag Build(ElementRequest request)\n        {\n            return new CheckboxTag(request.RawValue.As<bool>());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/Builders/ConditionalElementBuilder.cs",
    "content": "using System;\nusing FubuCore.Descriptions;\nusing HtmlTags;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI.Elements.Builders\n{\n    // Tested through HtmlConventionRegistry\n    public class ConditionalElementBuilder : IElementBuilderPolicy, DescribesItself, ITagBuilder<ElementRequest>\n    {\n        private readonly Func<ElementRequest, bool> _filter;\n        private readonly IElementBuilder _inner;\n\n        public ConditionalElementBuilder(Func<ElementRequest, bool> filter, IElementBuilder inner)\n        {\n            _filter = filter;\n            _inner = inner;\n        }\n\n        public string ConditionDescription { get; set; }\n        public bool Matches(ElementRequest subject)\n        {\n            return _filter(subject);\n        }\n\n        public ITagBuilder<ElementRequest> BuilderFor(ElementRequest subject)\n        {\n            return this;\n        }\n\n        public HtmlTag Build(ElementRequest request)\n        {\n            return _inner.Build(request);\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = \"Conditional Modification\";\n            description.Properties[\"Condition\"] = ConditionDescription ?? \"User defined condition\";\n            description.Children[\"BuilderPolicy\"] = Description.For(_inner);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/Builders/ConditionalElementModifier.cs",
    "content": "using System;\nusing FubuCore.Descriptions;\n\nnamespace FubuMVC.Core.UI.Elements.Builders\n{\n    // Tested through HtmlConventionRegistry\n    public class ConditionalElementModifier : IElementModifier, DescribesItself\n    {\n        private readonly Func<ElementRequest, bool> _filter;\n        private readonly IElementModifier _inner;\n\n        public ConditionalElementModifier(Func<ElementRequest, bool> filter, IElementModifier inner)\n        {\n            _filter = filter;\n            _inner = inner;\n        }\n\n        public string ConditionDescription { get; set; }\n\n\n\n        public bool Matches(ElementRequest token)\n        {\n            return _filter(token);\n        }\n\n        public void Modify(ElementRequest request)\n        {\n            _inner.Modify(request);\n        }\n\n        public void Describe(Description description)\n        {\n            description.Title = \"Conditional Modification\";\n            description.Properties[\"Condition\"] = ConditionDescription ?? \"User defined condition\";\n            description.Children[\"Modifier\"] = Description.For(_inner);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/Builders/DataFldModifier.cs",
    "content": "using System.ComponentModel;\n\nnamespace FubuMVC.Core.UI.Elements.Builders\n{\n    [Description(\"Adds a @data-fld attribute for the field name to aid in automated testing scenarios\")]\n    public class DataFldModifier : IElementModifier\n    {\n        public bool Matches(ElementRequest token)\n        {\n            return true;\n        }\n\n        public void Modify(ElementRequest request)\n        {\n            request.OriginalTag.Attr(\"data-fld\", request.ElementId);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/Builders/DefaultLabelBuilder.cs",
    "content": "using System.ComponentModel;\nusing System.Linq;\nusing System.Text.RegularExpressions;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.UI.Elements.Builders\n{\n    [Description(\"Builds a <label> element using the accessor name as the text and sets @for to the display id\")]\n    public class DefaultLabelBuilder : IElementBuilder\n    {\n        public bool Matches(ElementRequest subject)\n        {\n            return true;\n        }\n\n        public HtmlTag Build(ElementRequest request)\n        {\n            return new HtmlTag(\"label\").Attr(\"for\", request.ElementId).Text(BreakUpCamelCase(request.Accessor.Name));   \n        }\n\n        public static string BreakUpCamelCase(string fieldName)\n        {\n            var patterns = new[]\n                {\n                    \"([a-z])([A-Z])\",\n                    \"([0-9])([a-zA-Z])\",\n                    \"([a-zA-Z])([0-9])\"\n                };\n            var output = patterns.Aggregate(fieldName,\n                (current, pattern) => Regex.Replace(current, pattern, \"$1 $2\", RegexOptions.IgnorePatternWhitespace));\n            return output.Replace('_', ' ');\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/Builders/LambdaElementBuilder.cs",
    "content": "using System;\nusing FubuCore.Descriptions;\nusing HtmlTags;\nusing HtmlTags.Conventions;\nusing FubuCore;\n\nnamespace FubuMVC.Core.UI.Elements.Builders\n{\n    //Tested through HtmlConventionRegistry tests\n    public class LambdaElementBuilder : TagBuilder<ElementRequest>, DescribesItself\n    {\n        private readonly Func<ElementRequest, bool> _matcher;\n        private readonly Func<ElementRequest, HtmlTag> _build;\n\n        public LambdaElementBuilder(Func<ElementRequest, HtmlTag> build) : this(x => true,build)\n        {\n            ConditionDescription = \"Always\";\n        }\n\n        public LambdaElementBuilder(Func<ElementRequest, bool> matcher, Func<ElementRequest, HtmlTag> build)\n        {\n            _matcher = matcher;\n            _build = build;\n        }\n\n        public string ConditionDescription { get; set; }\n        public string BuilderDescription { get; set; }\n\n\n        public void Describe(Description description)\n        {\n            description.Title = \"User Defined BuilderPolicy\";\n\n            if (ConditionDescription.IsNotEmpty())\n            {\n                description.Properties[\"Condition\"] = ConditionDescription;\n            }\n\n            if (BuilderDescription.IsNotEmpty())\n            {\n                description.Properties[\"BuilderPolicy\"] = BuilderDescription;\n            }\n        }\n\n\n        public override bool Matches(ElementRequest subject)\n        {\n            return _matcher(subject);\n        }\n\n        public override HtmlTag Build(ElementRequest request)\n        {\n            return _build(request);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/Builders/LambdaElementModifier.cs",
    "content": "using System;\nusing FubuCore.Descriptions;\nusing HtmlTags.Conventions;\nusing FubuCore;\n\nnamespace FubuMVC.Core.UI.Elements.Builders\n{\n    // Tested through HtmlConventionRegistry\n    public class LambdaElementModifier : LambdaTagModifier<ElementRequest>, IElementModifier, DescribesItself\n    {\n        public LambdaElementModifier(Func<ElementRequest, bool> matcher, Action<ElementRequest> modify) : base(matcher, modify)\n        {\n        }\n\n        public LambdaElementModifier(Action<ElementRequest> modify) : base(modify)\n        {\n        }\n\n        public string ConditionDescription { get; set; }\n        public string ModifierDescription { get; set; }\n\n\n        public void Describe(Description description)\n        {\n            description.Title = \"User Defined Modifier\";\n\n            if (ConditionDescription.IsNotEmpty())\n            {\n                description.Properties[\"Condition\"] = ConditionDescription;\n            }\n\n            if (ModifierDescription.IsNotEmpty())\n            {\n                description.Properties[\"Modifier\"] = ModifierDescription;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/Builders/SpanDisplayBuilder.cs",
    "content": "using System.ComponentModel;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.UI.Elements.Builders\n{\n    [Description(\"Builds a <span>[accessor value]</span> element using IDisplayFormatter\")]\n    public class SpanDisplayBuilder : IElementBuilder\n    {\n        public HtmlTag Build(ElementRequest request)\n        {\n            return new HtmlTag(\"span\").Text(request.StringValue()).Id(request.ElementId);\n        }\n    }\n    \n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/Builders/TemplateSpanBuilder.cs",
    "content": "using System.ComponentModel;\nusing FubuMVC.Core.View;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.UI.Elements.Builders\n{\n    [Description(\"Builds a span element for mustache style templates\")]\n    public class TemplateSpanBuilder : IElementBuilder\n    {\n        public bool Matches(ElementRequest subject)\n        {\n            return true;\n        }\n\n        public HtmlTag Build(ElementRequest request)\n        {\n            return new HtmlTag(\"span\").MustacheText(request.ElementId);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/Builders/TemplateTextboxBuilder.cs",
    "content": "using System.ComponentModel;\nusing FubuMVC.Core.View;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.UI.Elements.Builders\n{\n    [Description(\"Builds a textbox element for mustache style templates\")]\n    public class TemplateTextboxBuilder : IElementBuilder\n    {\n        public bool Matches(ElementRequest subject)\n        {\n            return true;\n        }\n\n        public HtmlTag Build(ElementRequest request)\n        {\n            return new TextboxTag(request.ElementId, request.ElementId.Mustached());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/Builders/TextboxBuilder.cs",
    "content": "using System.ComponentModel;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.UI.Elements.Builders\n{\n    [Description(\"Builds an html textbox with the value equal to the string representation of the accessor value\")]\n    public class TextboxBuilder : IElementBuilder\n    {\n        public bool Matches(ElementRequest subject)\n        {\n            return true;\n        }\n\n        public HtmlTag Build(ElementRequest request)\n        {\n            return new TextboxTag().Attr(\"value\", (request.RawValue ?? string.Empty).ToString());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/DefaultElementNamingConvention.cs",
    "content": "using System;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.UI.Elements\n{\n    public class DefaultElementNamingConvention : IElementNamingConvention\n    {\n        public string GetName(Type modelType, Accessor accessor)\n        {\n            return accessor.Name;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/DotNotationElementNamingConvention.cs",
    "content": "using System;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.UI.Elements\n{\n    public class DotNotationElementNamingConvention : IElementNamingConvention\n    {\n        public static Func<string, bool> IsCollectionIndexer = x => x.StartsWith(\"[\") && x.EndsWith(\"]\");\n\n        public string GetName(Type modelType, Accessor accessor)\n        {\n            return accessor.PropertyNames\n                .Aggregate((x, y) =>\n                {\n                    var formatString = IsCollectionIndexer(y)\n                                           ? \"{0}{1}\"\n                                           : \"{0}.{1}\";\n                    return formatString.ToFormat(x, y);\n                });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/ElementConstants.cs",
    "content": "namespace FubuMVC.Core.UI.Elements\n{\n    public static class ElementConstants\n    {\n        public static readonly string Label = \"Label\";\n        public static readonly string Display = \"Display\";\n        public static readonly string Editor = \"Editor\";\n\n        public static readonly string Templates = \"Templates\";\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/ElementGenerator.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.UI.Forms;\nusing HtmlTags;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI.Elements\n{\n    public class ElementGenerator<T> : IElementGenerator<T> where T : class\n    {\n        private readonly ITagGenerator<ElementRequest> _tags;\n        private Lazy<T> _model;\n\n        public ElementGenerator(ITagGeneratorFactory factory, IFubuRequest request) : this(factory.GeneratorFor<ElementRequest>(), request)\n        {\n        }\n\n        private ElementGenerator(ITagGenerator<ElementRequest> tags, IFubuRequest request)\n        {\n            _tags = tags;\n            _model = new Lazy<T>(() => {\n                return request.Get<T>();\n            });\n        }\n\n        /// <summary>\n        /// Probably only useful for testing\n        /// </summary>\n        /// <param name=\"library\"></param>\n        /// <param name=\"activators\"></param>\n        /// <returns></returns>\n        public static ElementGenerator<T> For(HtmlConventionLibrary library, IEnumerable<ITagRequestActivator> activators = null)\n        {\n            var tags = new TagGenerator<ElementRequest>(library.For<ElementRequest>(),\n                                                        new TagRequestBuilder(activators ?? new ITagRequestActivator[0]), new ActiveProfile());\n\n            return new ElementGenerator<T>(tags, new InMemoryFubuRequest());\n        } \n\n        public HtmlTag LabelFor(Expression<Func<T, object>> expression, string profile = null, T model = null)\n        {\n            return build(expression, ElementConstants.Label, profile, model);\n        }\n\n        public HtmlTag InputFor(Expression<Func<T, object>> expression, string profile = null, T model = null)\n        {\n            return build(expression, ElementConstants.Editor, profile, model);\n        }\n\n        public HtmlTag DisplayFor(Expression<Func<T, object>> expression, string profile = null, T model = null)\n        {\n            return build(expression, ElementConstants.Display, profile, model);\n        }\n\n        public T Model\n        {\n            get { return _model.Value; }\n            set { _model = new Lazy<T>(() => value); }\n        }\n\n        public ElementRequest GetRequest(Expression<Func<T, object>> expression, T model = null)\n        {\n            return new ElementRequest(expression.ToAccessor())\n            {\n                Model = model ?? Model\n            };\n        }\n\n        private HtmlTag build(Expression<Func<T, object>> expression, string category, string profile = null, T model = null)\n        {\n            ElementRequest request = GetRequest(expression, model);\n            return _tags.Build(request, category, profile);\n        }\n\n        private HtmlTag build(ElementRequest request, string category, string profile = null, T model = null)\n        {\n            request.Model = model ?? Model;\n            return _tags.Build(request, category, profile: profile);\n        }\n\n        // Below methods are tested through the IFubuPage.Show/Edit method tests\n        public HtmlTag LabelFor(ElementRequest request, string profile = null, T model = null)\n        {\n            return build(request, ElementConstants.Label, profile, model);\n        }\n\n        public HtmlTag InputFor(ElementRequest request, string profile = null, T model = null)\n        {\n            return build(request, ElementConstants.Editor, profile, model);\n        }\n\n        public HtmlTag DisplayFor(ElementRequest request, string profile = null, T model = null)\n        {\n            return build(request, ElementConstants.Display, profile, model);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/ElementIdActivator.cs",
    "content": "namespace FubuMVC.Core.UI.Elements\n{\n    public class ElementIdActivator : TagRequestActivator<ElementRequest>\n    {\n        private readonly IElementNamingConvention _naming;\n\n        public ElementIdActivator(IElementNamingConvention naming)\n        {\n            _naming = naming;\n        }\n\n        public override void Activate(ElementRequest request)\n        {\n            request.ElementId = string.IsNullOrEmpty(request.ElementId)\n                ? _naming.GetName(request.HolderType(), request.Accessor)\n                : request.ElementId;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/ElementOverridesExtensions.cs",
    "content": "﻿using FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.UI.Elements\n{\n    public static class ElementOverridesExtensions\n    {\n         public static IAccessorRulesExpression InputBuilder<T>(\n             this IAccessorRulesExpression expression, string profile = null) where T : IElementBuilder, new()\n         {\n             var @override = new ElementTagOverride<T>(ElementConstants.Editor, profile);\n             return expression.Add(@override);\n         }\n\n         public static IAccessorRulesExpression DisplayBuilder<T>(\n             this IAccessorRulesExpression expression, string profile = null) where T : IElementBuilder, new()\n         {\n             var @override = new ElementTagOverride<T>(ElementConstants.Display, profile);\n             return expression.Add(@override);\n         }\n\n         public static IAccessorRulesExpression LabelBuilder<T>(\n             this IAccessorRulesExpression expression, string profile = null) where T : IElementBuilder, new()\n         {\n             var @override = new ElementTagOverride<T>(ElementConstants.Label, profile);\n             return expression.Add(@override);\n         }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/ElementRequest.cs",
    "content": "using System;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing FubuCore;\nusing FubuCore.Formatting;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.UI.Security;\nusing HtmlTags;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI.Elements\n{\n    public class ElementRequest : TagRequest, IServiceLocatorAware\n    {\n        private bool _hasFetched;\n        private object _rawValue;\n        private IServiceLocator _services;\n\n        public static ElementRequest For(object model, PropertyInfo property)\n        {\n            return new ElementRequest(new SingleProperty(property)){\n                Model = model\n            };\n        }\n\n        public static ElementRequest For<T>(Expression<Func<T, object>> expression)\n        {\n            return new ElementRequest(expression.ToAccessor());\n        }\n\n        public static ElementRequest For<T>(T model, Expression<Func<T, object>> expression)\n        {\n            return new ElementRequest(expression.ToAccessor()){\n                Model = model\n            };\n        }\n\n        public ElementRequest(Accessor accessor)\n        {\n            Accessor = accessor;\n        }\n\n        public object RawValue\n        {\n            get\n            {\n                if (!_hasFetched)\n                {\n                    _rawValue = Model == null ? null : Accessor.GetValue(Model);\n                    _hasFetched = true;\n                }\n\n                return _rawValue;\n            }\n        }\n\n        public string ElementId { get; set; }\n        public object Model { get; set; }\n        public Accessor Accessor { get; private set; }\n\n        public AccessorDef ToAccessorDef()\n        {\n            return new AccessorDef\n                   {\n                       Accessor = Accessor,\n                       ModelType = HolderType()\n                   };\n        }\n\n\n        public Type HolderType()\n        {\n            if (Model == null)\n            {\n                return Accessor.DeclaringType;\n            }\n\n            var resolver = _services == null ? new TypeResolver() : Get<ITypeResolver>();\n\n            return Model == null ? null : resolver.ResolveType(Model);\n        }\n\n        public T Get<T>()\n        {\n            return _services.GetInstance<T>();\n        }\n\n        // virtual for mocking\n        public virtual HtmlTag BuildForCategory(string category, string profile = null)\n        {\n            return Get<ITagGenerator<ElementRequest>>().Build(this, category, profile);\n        }\n\n        public T Value<T>()\n        {\n            return (T)RawValue;\n        }\n\n        public string StringValue()\n        {\n            return Get<IDisplayFormatter>().GetDisplay(new GetStringRequest(Accessor, RawValue, _services));\n        }\n\n        public bool ValueIsEmpty()\n        {\n            return RawValue == null || string.Empty.Equals(RawValue);\n        }\n\n        public void ForValue<T>(Action<T> action)\n        {\n            if (ValueIsEmpty()) return;\n\n            action((T)RawValue);\n        }\n\n        public virtual AccessRight AccessRights()\n        {\n            return Get<IFieldAccessService>().RightsFor(this);\n        }\n\n        public void Attach(IServiceLocator locator)\n        {\n            _services = locator;\n        }\n\n        public override object ToToken()\n        {\n            return new ElementRequest(Accessor);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/ElementRequestActivator.cs",
    "content": "using FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.UI.Elements\n{\n    public class ElementRequestActivator : ElementIdActivator\n    {\n        private readonly IFubuRequest _request;\n\n        public ElementRequestActivator(IFubuRequest request, IElementNamingConvention naming)\n            : base(naming)\n        {\n            _request = request;\n        }\n\n        public override void Activate(ElementRequest request)\n        {\n            base.Activate(request);\n            if (request.Model == null)\n            {\n                request.Model = _request.Get(request.HolderType());\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/IElementBuilder.cs",
    "content": "using HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI.Elements\n{\n    public interface IElementBuilder : ITagBuilder<ElementRequest>\n    {\n        \n    }\n\n    public interface IElementBuilderPolicy : ITagBuilderPolicy<ElementRequest>\n    {\n        \n    }\n\n    public abstract class ElementTagBuilder : TagBuilder<ElementRequest>, IElementBuilderPolicy, IElementBuilder\n    {\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/IElementGenerator.cs",
    "content": "using System;\nusing System.Linq.Expressions;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.UI.Elements\n{\n    public interface IElementGenerator<T> where T : class\n    {\n        T Model { get; set; }\n        HtmlTag LabelFor(Expression<Func<T, object>> expression, string profile = null, T model = null);\n        HtmlTag InputFor(Expression<Func<T, object>> expression, string profile = null, T model = null);\n        HtmlTag DisplayFor(Expression<Func<T, object>> expression, string profile = null, T model = null);\n\n        HtmlTag LabelFor(ElementRequest request, string profile = null, T model = null);\n        HtmlTag InputFor(ElementRequest request, string profile = null, T model = null);\n        HtmlTag DisplayFor(ElementRequest request, string profile = null, T model = null);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/IElementModifier.cs",
    "content": "using HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI.Elements\n{\n    public interface IElementModifier : ITagModifier<ElementRequest>\n    {\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/IElementNamingConvention.cs",
    "content": "using System;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.UI.Elements\n{\n    public interface IElementNamingConvention\n    {\n        string GetName(Type modelType, Accessor accessor);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/IElementTagOverride.cs",
    "content": "﻿using FubuMVC.Core.UI.Elements.Builders;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI.Elements\n{\n    public interface IElementTagOverride\n    {\n        string Category { get; } \n        string Profile { get; }\n        IElementBuilder Builder();\n    }\n\n    public class ElementTagOverride<T> : IElementTagOverride where T : IElementBuilder, new()\n    {\n        public ElementTagOverride(string category, string profile)\n        {\n            Category = category ?? TagConstants.Default;\n            Profile = profile ?? TagConstants.Default;\n        }\n\n        public string Category { get; private set; }\n        public string Profile { get; private set; }\n        public IElementBuilder Builder()\n        {\n            return new T();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Elements/TagRequestActivator.cs",
    "content": "using System;\nusing HtmlTags.Conventions;\nusing FubuCore;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.UI.Elements\n{\n    public abstract class TagRequestActivator<T> : ITagRequestActivator where T : TagRequest\n    {\n        // TODO -- move this to HtmlTags\n\n        public bool Matches(Type requestType)\n        {\n            return requestType.CanBeCastTo<T>();\n        }\n\n        public void Activate(TagRequest request)\n        {\n            Activate(request.As<T>());\n        }\n\n        public abstract void Activate(T request);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Forms/DefinitionListFieldChrome.cs",
    "content": "using System.Collections.Generic;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.UI.Forms\n{\n    public class DefinitionListFieldChrome : IFieldChrome\n    {\n        private readonly HtmlTag _dt = new HtmlTag(\"dt\");\n        private readonly HtmlTag _dd = new HtmlTag(\"dd\");\n        private readonly HtmlTag _bodyHolder;\n\n        public DefinitionListFieldChrome()\n        {\n            _bodyHolder = _dd;\n        }\n\n        public HtmlTag DtTag { get { return _dt; } }\n        public HtmlTag DdTag { get { return _dd; } }\n\n        public HtmlTag LabelTag \n        { \n            get { return _dt.FirstChild() ?? _dt; }\n            set { _dt.ReplaceChildren(value); } \n        }\n\n        public HtmlTag BodyTag \n        { \n            get { return _bodyHolder.FirstChild(); }\n            set { _bodyHolder.ReplaceChildren(value); } \n        }\n\n        public IEnumerable<HtmlTag> AllTags()\n        {\n            yield return _dt;\n            yield return _bodyHolder;\n        }\n\n        public string Render()\n        {\n            return string.Format(\"{0}\\n{1}\", _dt, _bodyHolder);\n            \n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Forms/FormLineExpression.cs",
    "content": "\nusing System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\nusing System.Web;\nusing FubuMVC.Core.Security;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.UI.Security;\nusing HtmlTags;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Security.Authorization;\n\nnamespace FubuMVC.Core.UI.Forms\n{\n    public class FormLineExpression<T> : ITagSource, IHtmlString where T : class\n    {\n        private readonly IElementGenerator<T> _tags;\n        private readonly IFieldChrome _chrome;\n        private bool _isVisible = true;\n        private readonly ElementRequest _request;\n        private AccessRight _editable = AccessRight.ReadOnly;\n        private AccessRight _rights = AccessRight.All;\n\n        private readonly HashSet<string> _groupByCssClasses =\n            new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);\n        private readonly IList<Action<IFieldChrome, ElementRequest>> _alterations \n            = new List<Action<IFieldChrome, ElementRequest>>();\n\n\n\n\n        public FormLineExpression(IFieldChrome chrome, IElementGenerator<T> tags, Expression<Func<T, object>> expression)\n            : this(chrome, tags, new ElementRequest(expression.ToAccessor()))\n        {\n\n        }\n\n        public FormLineExpression(IFieldChrome chrome, IElementGenerator<T> tags, ElementRequest request)\n        {\n            _tags = tags;\n            _chrome = chrome;\n            _request = request;\n\n            _chrome.LabelTag = tags.LabelFor(request);\n\n            AlterLayout(x => GroupByCssClasses.Each(c =>\n            {\n                x.LabelTag.AddClass(c);\n                x.BodyTag.AddClass(c);\n            }));\n        }\n\n\n\n        public HashSet<string> GroupByCssClasses\n        {\n            get { return _groupByCssClasses; }\n        }\n\n        public FormLineExpression<T> AlterLabel(Action<HtmlTag> alter)\n        {\n            alter(_chrome.LabelTag);\n            return this;\n        }\n\n        public FormLineExpression<T> GroupByClass(string cssClass)\n        {\n            GroupByCssClasses.Add(cssClass);\n            return this;\n        }\n\n        public FormLineExpression<T> AlterBody(Action<HtmlTag> alter)\n        {\n            return AlterLayout((l, r) => alter(l.BodyTag));\n        }\n\n        public FormLineExpression<T> AlterLayout(Action<IFieldChrome> alter)\n        {\n            return AlterLayout((l, r) => alter(l));\n        }\n\n        public FormLineExpression<T> AlterLayout(Action<IFieldChrome, ElementRequest> alter)\n        {\n            _alterations.Add(alter);\n\n            return this;\n        }\n\n        public FormLineExpression<T> Label(HtmlTag tag)\n        {\n            _chrome.LabelTag = tag;\n            return this;\n        }\n\n        public FormLineExpression<T> Editable(bool condition)\n        {\n            _editable = condition ? AccessRight.All : AccessRight.ReadOnly;\n\n            return this;\n        }\n\n        public AccessRight Access()\n        {\n            return _rights;            \n        }\n\n        public FormLineExpression<T> Access(AccessRight rights)\n        {\n            _rights = rights;\n            return this;\n        }\n\n        public AccessRight Editable()\n        {\n            return _editable;\n        }\n\n        public FormLineExpression<T> EditableForRole(params string[] roles)\n        {\n            return Editable(PrincipalRoles.IsInRole(roles));\n        }\n\n        public FormLineExpression<T> Visible(bool condition)\n        {\n            _isVisible = condition;\n            return this;\n        }\n\n        public FormLineExpression<T> LabelId(string id)\n        {\n            _chrome.LabelTag.Id(id);\n            return this;\n        }\n\n        public FormLineExpression<T> BodyId(string id)\n        {\n            return AlterBody(tag => tag.Id(id));\n        }\n\n        public void Compile()\n        {\n            createBodyTag();\n        }\n\n        private void createBodyTag()\n        {\n            if(isEditable())\n            {\n                _chrome.BodyTag = _tags.InputFor(_request);\n            }\n            else\n            {\n                _chrome.BodyTag = _tags.DisplayFor(_request);\n            }\n            _alterations.Each(a => a(_chrome, _request));\n        }\n\n        private bool isEditable()\n        {\n            return _editable.Write && _rights.Write;\n        }\n\n        public override string ToString()\n        {\n            if (!isVisible()) return string.Empty;\n\n            createBodyTag();\n\n            return _chrome.Render();\n        }\n\n        public string ToHtmlString()\n        {\n            return ToString();\n        }\n\n        private bool isVisible()\n        {\n            return _isVisible && _rights.Read;\n        }\n\n        public FormLineExpression<T> AddClassToBody(string className)\n        {\n            AlterBody(t => t.AddClass(className));\n            return this;\n        }\n\n        public FormLineExpression<T> DisplayIfEmpty(object token)\n        {\n            return DisplayIfEmpty(token.ToString());\n        }\n\n        public FormLineExpression<T> DisplayIfEmpty(string text)\n        {\n            AlterLayout((layout, request) =>\n            {\n                if (request.ValueIsEmpty())\n                {\n                    layout.BodyTag.Text(text);\n                }\n            });\n\n            return this;\n        }\n\n        IEnumerable<HtmlTag> ITagSource.AllTags()\n        {\n            if (!isVisible()) return new HtmlTag[0];\n\n            createBodyTag();\n\n            return _chrome.AllTags();\n        }\n\n        public FormLineExpression<T> NoAutoComplete()\n        {\n            AlterBody(x => x.Attr(\"autocomplete\", \"off\"));\n            return this;\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/UI/Forms/FormRequest.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.Urls;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI.Forms\n{\n    public class FormRequest : TagRequest, IServiceLocatorAware \n    {\n        private readonly ChainSearch _search;\n        private readonly object _input;\n        private readonly bool _closeTag;\n        private IServiceLocator _services;\n\n        public FormRequest(ChainSearch search, object input) : this(search, input, false) { }\n\n        public FormRequest(ChainSearch search, object input, bool closeTag)\n        {\n            _search = search;\n            _input = input;\n            _closeTag = closeTag;\n        }\n\n        public ChainSearch Search\n        {\n            get { return _search; }\n        }\n\n        public object Input\n        {\n            get { return _input; }\n        }\n\n        public bool CloseTag\n        {\n            get { return _closeTag; }\n        }\n\n        public string Url { get; set; }\n        public BehaviorChain Chain { get; set; }  \n\n        public override object ToToken()\n        {\n            return new FormRequest(_search, _input);\n        }\n\n        public void Attach(IServiceLocator locator)\n        {\n            _services = locator;\n            var resolver = locator.GetInstance<IChainResolver>();\n            var urlResolver = locator.GetInstance<IChainUrlResolver>();\n            Chain = resolver.Find(Search);\n\n            if (Chain == null)\n            {\n                throw new FubuException(333, \"No chain matches this search:  \" + Search);\n            }\n\n            if (!(Chain is RoutedChain))\n            {\n                throw new FubuException(334, \"Cannot post to this endpoint because there is no route\");\n            }\n\n            Url = urlResolver.UrlFor(_input, Chain);\n        }\n\n        public IServiceLocator Services\n        {\n            get { return _services; }\n        }\n\n        protected bool Equals(FormRequest other)\n        {\n            return Equals(_search, other._search) && Equals(_input, other._input);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((FormRequest) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((_search != null ? _search.GetHashCode() : 0)*397) ^ (_input != null ? _input.GetHashCode() : 0);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Forms/FormTagBuilder.cs",
    "content": "﻿using HtmlTags;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI.Forms\n{\n    public class FormTagBuilder : TagBuilder<FormRequest>\n    {\n        public override bool Matches(FormRequest subject)\n        {\n            return true;\n        }\n\n        public override HtmlTag Build(FormRequest request)\n        {\n            var tag = new FormTag(request.Url);\n\n            if (!request.CloseTag)\n            {\n                tag.NoClosingTag();\n            }\n\n            return tag;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Forms/IFieldChrome.cs",
    "content": "using HtmlTags;\n\nnamespace FubuMVC.Core.UI.Forms\n{\n    public interface IFieldChrome : ITagSource\n    {\n        HtmlTag LabelTag { get; set; }\n        HtmlTag BodyTag { get; set; }\n        string Render();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Forms/TableRowFieldChrome.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.UI.Forms\n{\n    public class TableRowFieldChrome : IFieldChrome\n    {\n        public IEnumerable<HtmlTag> AllTags()\n        {\n            yield return new HtmlTag(\"tr\", tr => {\n                tr.Add(\"td\").Append(LabelTag);\n                tr.Add(\"td\").Append(BodyTag);\n            });\n        }\n\n        public HtmlTag LabelTag { get; set; }\n        public HtmlTag BodyTag { get; set; }\n        public string Render()\n        {\n            return AllTags().Single().ToString();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/FubuHtmlDocument.cs",
    "content": "using System;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Urls;\nusing FubuMVC.Core.View;\nusing HtmlTags;\nusing System.Collections.Generic;\n\nnamespace FubuMVC.Core.UI\n{\n    public class FubuHtmlDocument : HtmlDocument, IFubuPage\n    {\n        private readonly IServiceLocator _services;\n\n        public FubuHtmlDocument(IServiceLocator services)\n        {\n            _services = services;\n            ElementPrefix = string.Empty;\n        }\n\n        public string ElementPrefix { get; set; }\n        public IServiceLocator ServiceLocator { get; set; }\n\n        public T Get<T>()\n        {\n            return _services.GetInstance<T>();\n        }\n\n        public T GetNew<T>()\n        {\n            return Get<T>();\n        }\n\n        public void Write(object content)\n        {\n            Get<IOutputWriter>().WriteHtml(content);\n        }\n\n        public IUrlRegistry Urls\n        {\n            get { return _services.GetInstance<IUrlRegistry>(); }\n        }\n\n        public void Add(Func<FubuHtmlDocument, HtmlTag> func)\n        {\n            Add(func(this));\n        }\n\n        public void Add(Func<FubuHtmlDocument, ITagSource> source)\n        {\n            source(this).AllTags().Each(Add);\n        }\n    }\n\n    public class FubuHtmlDocument<T> : FubuHtmlDocument, IFubuPage<T> where T : class\n    {\n        private readonly IFubuRequest _request;\n        private T _model;\n\n        public FubuHtmlDocument(IServiceLocator services, IFubuRequest request) : base(services)\n        {\n            _request = request;\n        }\n\n        public T Model\n        {\n            get\n            {\n                if (_model == null)\n                {\n                    _model = _request.Get<T>();\n                }\n                \n                return _model;\n            }\n            set { _model = value; }\n        }\n\n        public void ShowProp(Expression<Func<T, object>> property)\n        {\n            throw new NotImplementedException();\n            //Add(this.Show(property));\n        }\n\n        public void Add(Func<FubuHtmlDocument<T>, HtmlTag> func)\n        {\n            Add(func(this));\n        }\n\n        public void Add(Func<FubuHtmlDocument<T>, ITagSource> source)\n        {\n            source(this).AllTags().Each(Add);\n        }\n\n        public object GetModel()\n        {\n            return Model;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/FubuPageFormExtensions.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing System.Web;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.UI.Forms;\nusing FubuMVC.Core.View;\nusing HtmlTags;\nusing FubuCore;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI\n{\n    public static class FubuPageFormExtensions\n    {\n        public static HtmlTag FormFor(this IFubuPage page)\n        {\n            return new FormTag().NoClosingTag();\n        }\n\n        public static HtmlTag FormFor(this IFubuPage page, string url)\n        {\n            url = page.Get<IHttpRequest>().ToFullUrl(url);\n            return new FormTag(url).NoClosingTag();\n        }\n\n        public static HtmlTag FormFor<TInputModel>(this IFubuPage page) where TInputModel : new()\n        {\n            var search = ChainSearch.ByUniqueInputType(typeof (TInputModel), \"POST\");\n            return page.FormFor(search, new TInputModel());\n        }\n\n        public static HtmlTag FormFor<TInputModel>(this IFubuPage page, Action<HtmlTag> configure) where TInputModel : new()\n        {\n            var search = ChainSearch.ByUniqueInputType(typeof (TInputModel), \"POST\");\n            return page.FormFor(search, new TInputModel(), configure);\n        }\n\n        public static HtmlTag FormFor<TInputModel>(this IFubuPage page, TInputModel model)\n        {\n            return page.FormFor(ChainSearch.ByUniqueInputType(model.GetType(), \"POST\"), model);\n        }\n\n        public static HtmlTag FormFor<TController>(this IFubuPage view, Expression<Action<TController>> expression)\n        {\n            var search = ChainSearch.ForMethod(expression, \"POST\");\n            return view.FormFor(search, null);\n        }\n\n        public static HtmlTag FormFor(this IFubuPage view, object input)\n        {\n            if (input is string)\n            {\n                return view.FormFor(input.As<string>());\n            }\n\n            var search = ChainSearch.ByUniqueInputType(input.GetType(), \"POST\");\n            return view.FormFor(search, input);\n        }\n\n        public static HtmlTag FormFor(this IFubuPage view, ChainSearch search, object input)\n        {\n            var request = new FormRequest(search, input);\n\n            return view.Get<ITagGeneratorFactory>().GeneratorFor<FormRequest>().Build(request);\n        }\n\n        public static HtmlTag FormFor(this IFubuPage view, ChainSearch search, object input, Action<HtmlTag> configure)\n        {\n            if (configure == null)\n            {\n                throw new ArgumentNullException(\"No form configuration provided\", \"configure\");\n            }\n\n            var request = new FormRequest(search, input, true);\n            var tag = view.Get<ITagGeneratorFactory>().GeneratorFor<FormRequest>().Build(request);\n            configure(tag);\n            return tag;\n        }\n\n        public static IHtmlString EndForm(this IFubuPage page)\n        {\n            return new HtmlString(\"</form>\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/HtmlConventionCollator.cs",
    "content": "﻿using System.Threading.Tasks;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation.Web;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI\n{\n    public class HtmlConventionCollator\n    {\n        public static void BuildHtmlConventionLibrary(HtmlConventionLibrary library, AccessorRules rules)\n        {\n            library.Import(new DefaultHtmlConventions().Library);\n\n            var visitor = new Visitor(rules);\n\n            library.For<ElementRequest>().AcceptVisitor(visitor);\n        }\n\n        public class Visitor : ITagLibraryVisitor<ElementRequest>\n        {\n            private readonly AccessorRules _rules;\n            private string _category;\n\n            public Visitor(AccessorRules rules)\n            {\n                _rules = rules;\n            }\n\n            public void Category(string name, TagCategory<ElementRequest> category)\n            {\n                _category = name;\n            }\n\n            public void BuilderSet(string profile, BuilderSet<ElementRequest> builders)\n            {\n                var policy = new AccessorOverrideElementBuilderPolicy(_rules, _category, profile);\n                builders.InsertFirst(policy);\n            }\n        }\n         \n        public static HtmlConventionLibrary BuildHtmlConventions(BehaviorGraph graph)\n        {\n            var validation = graph.Settings.Get<ValidationSettings>();\n\n            var rules = graph.Settings.Get<AccessorRules>();\n            var library = graph.Settings.Get<HtmlConventionLibrary>();\n\n\n            if (validation.Enabled)\n            {\n                library.Import(new ValidationHtmlConventions().Library);\n            }\n\n            BuildHtmlConventionLibrary(library, rules);\n\n            return library;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/HtmlConventionRegistry.cs",
    "content": "using System;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.UI.Elements.Builders;\nusing FubuMVC.Core.UI.Forms;\nusing HtmlTags;\nusing HtmlTags.Conventions;\nusing FubuCore;\n\nnamespace FubuMVC.Core.UI\n{\n    public class HtmlConventionRegistry : ProfileExpression, IFubuRegistryExtension\n    {\n        private readonly HtmlConventionLibrary _library;\n        private readonly Lazy<ProfileExpression> _templates; \n\n        public HtmlConventionRegistry() : this(new HtmlConventionLibrary()){}\n\n        private HtmlConventionRegistry(HtmlConventionLibrary library) : base(library, TagConstants.Default)\n        {\n            _library = library;\n            _templates = new Lazy<ProfileExpression>(() => new ProfileExpression(_library, ElementConstants.Templates));\n        }\n\n        public HtmlConventionLibrary Library\n        {\n            get { return _library; }\n        }\n\n        public void Profile(string profileName, Action<ProfileExpression> configure)\n        {\n            var expression = new ProfileExpression(_library, profileName);\n            configure(expression);\n        }\n\n        public ProfileExpression Templates\n        {\n            get { return _templates.Value; }\n        }\n\n        void IFubuRegistryExtension.Configure(FubuRegistry registry)\n        {\n            registry.AlterSettings<HtmlConventionLibrary>(library => library.Import(_library));\n        }\n\n        public TagLibrary<FormRequest> Forms\n        {\n            get { return _library.For<FormRequest>(); }\n        } \n    }\n\n    public class ElementActionExpression\n    {\n        private readonly BuilderSet<ElementRequest> _set;\n        private readonly Func<ElementRequest, bool> _filter;\n        private readonly string _filterDescription;\n\n        public ElementActionExpression(BuilderSet<ElementRequest> set, Func<ElementRequest, bool> filter, string filterDescription)\n        {\n            _set = set;\n            _filter = filter;\n            _filterDescription = filterDescription.IsNotEmpty() ? filterDescription : \"User Defined\";\n        }\n\n        public void BuildBy(IElementBuilder builder)\n        {\n            var conditionalBuilder = new ConditionalElementBuilder(_filter, builder){\n                ConditionDescription = _filterDescription\n            };\n\n            _set.Add(conditionalBuilder);\n        }\n\n        public void BuildBy<T>() where T : IElementBuilder, new()\n        {\n            BuildBy(new T());\n        }\n\n        public void BuildBy(Func<ElementRequest, HtmlTag> tagBuilder, string description = null)\n        {\n            var builder = new LambdaElementBuilder(_filter, tagBuilder){\n                ConditionDescription = _filterDescription,\n                BuilderDescription = description ?? \"User Defined\"\n            };\n\n            _set.Add(builder);\n        }\n\n        public void ModifyWith(IElementModifier modifier)\n        {\n            var conditionalModifier = new ConditionalElementModifier(_filter, modifier){\n                ConditionDescription = _filterDescription\n            };\n\n            _set.Add(conditionalModifier);\n        }\n\n        public void ModifyWith<T>() where T : IElementModifier, new()\n        {\n            ModifyWith(new T());\n        }\n\n        public void ModifyWith(Action<ElementRequest> modification, string description = null)\n        {\n            var modifier = new LambdaElementModifier(_filter, modification){\n                ConditionDescription = _filterDescription,\n                ModifierDescription = description ?? \"User Defined\"\n            };\n\n            _set.Add(modifier);\n        }\n\n        public void Attr(string attName, object value)\n        {\n            ModifyWith(req => req.CurrentTag.Attr(attName, value), \"Set @{0} = '{1}'\".ToFormat(attName, value));\n        }\n\n        public void AddClass(string className)\n        {\n            ModifyWith(req => req.CurrentTag.AddClass(className), \"Add class '{0}'\".ToFormat(className));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/LabelBuilder.cs",
    "content": "using FubuMVC.Core.Localization;\nusing FubuMVC.Core.UI.Elements;\nusing HtmlTags;\n\nnamespace FubuMVC.Localization\n{\n    public class LabelBuilder : ElementTagBuilder\n    {\n    \tpublic override bool Matches(ElementRequest subject)\n    \t{\n    \t\treturn true;\n    \t}\n\n    \tpublic override HtmlTag Build(ElementRequest request)\n        {\n            string header = LocalizationManager.GetHeader(request.Accessor.InnerProperty);\n            return new HtmlTag(\"label\").Attr(\"for\", request.ElementId).Text(header);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/ProfileExpression.cs",
    "content": "using FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.UI.Forms;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI\n{\n    public class ProfileExpression\n    {\n        private readonly HtmlConventionLibrary _library;\n        private readonly string _profileName;\n\n        public ProfileExpression(HtmlConventionLibrary library, string profileName)\n        {\n            _library = library;\n            _profileName = profileName;\n        }\n\n        private BuilderSet<ElementRequest> buildersFor(string category)\n        {\n            return _library.For<ElementRequest>().Category(category).Profile(_profileName);\n        }\n\n        public ElementCategoryExpression Labels\n        {\n            get\n            {\n                return new ElementCategoryExpression(buildersFor(ElementConstants.Label));\n            }\n        }\n\n        public ElementCategoryExpression Displays\n        {\n            get\n            {\n                return new ElementCategoryExpression(buildersFor(ElementConstants.Display));\n            }\n        }\n\n        public ElementCategoryExpression Editors\n        {\n            get\n            {\n                return new ElementCategoryExpression(buildersFor(ElementConstants.Editor));\n            }\n        }\n\n        //public void BuilderPolicy<T>(ITagBuilder<T> builder) where T : TagRequest\n        //{\n\n        //}\n\n        //public void Modifier<T>(ITagModifier<T> modifier) where T : TagRequest\n        //{\n            \n        //}\n        public void FieldChrome<T>() where T : IFieldChrome, new()\n        {\n            _library.RegisterService<IFieldChrome, T>(_profileName);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Security/AccessRight.cs",
    "content": "using System;\nusing System.Linq;\nusing FubuCore;\n\nnamespace FubuMVC.Core.UI.Security\n{\n    [Serializable]\n    public class AccessRight : IComparable<AccessRight>, IEquatable<AccessRight>\n    {\n        private readonly bool _read;\n        private readonly bool _write;\n        private readonly int _permissiveness;\n        private readonly string _name;\n\n        private AccessRight(bool read, bool write, int permissiveness, string name)\n        {\n            _read = read;\n            _write = write;\n            _permissiveness = permissiveness;\n            _name = name;\n        }\n\n        public int Permissiveness\n        {\n            get { return _permissiveness; }\n        }\n\n        public bool Read\n        {\n            get { return _read; }\n        }\n\n        public bool Write\n        {\n            get { return _write; }\n        }\n\n        public string Name\n        {\n            get { return _name; }\n        }\n\n        public static readonly AccessRight All = new AccessRight(true, true, 1, \"All\");\n        public static readonly AccessRight ReadOnly = new AccessRight(true, false, 2, \"ReadOnly\");\n        public static readonly AccessRight None = new AccessRight(false, false, 3, \"None\");\n\n        public static AccessRight operator +(AccessRight first, AccessRight second)\n        {\n            return first.Permissiveness <= second.Permissiveness ? first : second;\n        }\n\n        public static bool operator >(AccessRight first, AccessRight second)\n        {\n            return first.Permissiveness < second.Permissiveness;\n        }\n        \n        public static bool operator >=(AccessRight first, AccessRight second)\n        {\n            return first.Permissiveness <= second.Permissiveness;\n        }\n\n        public static bool operator <(AccessRight first, AccessRight second)\n        {\n            return first.Permissiveness > second.Permissiveness;\n        }\n\n        public static bool operator <=(AccessRight first, AccessRight second)\n        {\n            return first.Permissiveness >= second.Permissiveness;\n        }\n\n        public bool Equals(AccessRight other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            return ReferenceEquals(this, other);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            return ReferenceEquals(this, obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return _permissiveness;\n        }\n\n        public static AccessRight Least(params AccessRight[] rights)\n        {\n            if (!rights.Any()) return None;\n            return rights.Min();\n        }\n\n        public static AccessRight Most(params AccessRight[] rights)\n        {\n            if (!rights.Any()) return None;\n            return rights.Max();\n        }\n\n        public int CompareTo(AccessRight other)\n        {\n            return Permissiveness.CompareTo(other.Permissiveness) * -1;\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Read: {0}, Write: {1}\", _read, _write);\n        }\n\n        public static AccessRight For(string name)\n        {\n            if (name == null) throw new ArgumentNullException(\"name\");\n            if (name.EqualsIgnoreCase(All.Name)) return All;\n            if (name.EqualsIgnoreCase(ReadOnly.Name)) return ReadOnly;\n            if (name.EqualsIgnoreCase(None.Name)) return None;\n            throw new ArgumentOutOfRangeException(\"name\", name, \"All, ReadOnly, and None are the only valid options\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Security/AccessRightExtensions.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\n\nnamespace FubuMVC.Core.UI.Security\n{\n    public static class AccessRightExtensions\n    {\n        public static AccessRight Most(this IEnumerable<AccessRight> rights)\n        {\n            return AccessRight.Most(rights.ToArray());\n        }\n\n        public static AccessRight Least(this IEnumerable<AccessRight> rights)\n        {\n            return AccessRight.Least(rights.ToArray());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Security/DegradingAccessElementBuilder.cs",
    "content": "using FubuMVC.Core.UI.Elements;\nusing HtmlTags;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI.Security\n{\n    public class DegradingAccessElementBuilder : ITagBuilder<ElementRequest>\n    {\n        public bool Matches(ElementRequest subject)\n        {\n            return true;\n        }\n\n        public HtmlTag Build(ElementRequest request)\n        {\n            var rights = request.AccessRights();\n            if (rights.Write) return null;\n\n            // The second span won't be rendered\n            return rights.Read \n                       ? request.BuildForCategory(ElementConstants.Display) \n                       : new HtmlTag(\"span\").Authorized(false);\n        }\n\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Security/FieldAccessRightsExecutor.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.UI.Elements;\n\nnamespace FubuMVC.Core.UI.Security\n{\n    public interface IFieldAccessRightsExecutor\n    {\n        AccessRight RightsFor(ElementRequest request, IEnumerable<IFieldAccessRule> securityRules, IEnumerable<IFieldAccessRule> logicRules);\n    }\n\n    public class FieldAccessRightsExecutor : IFieldAccessRightsExecutor\n    {\n        public virtual AccessRight RightsFor(ElementRequest request, IEnumerable<IFieldAccessRule> securityRules, IEnumerable<IFieldAccessRule> logicRules)\n        {\n            var securityRights = getSecurityRights(request, securityRules);\n            var logicRights = getLogicRights(request, logicRules);\n\n            return AccessRight.Least(logicRights, securityRights);\n        }\n\n        protected AccessRight getLogicRights(ElementRequest request, IEnumerable<IFieldAccessRule> logicRules)\n        {\n            if (!logicRules.Any()) return AccessRight.All;\n\n            return logicRules.Select(x => x.RightsFor(request)).Least();\n        }\n\n        protected AccessRight getSecurityRights(ElementRequest request, IEnumerable<IFieldAccessRule> securityRules)\n        {\n            if (!securityRules.Any()) return AccessRight.All;\n\n            return securityRules.Select(x => x.RightsFor(request)).Most();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Security/FieldAccessService.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.UI.Elements;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI.Security\n{\n    public class FieldAccessService : IFieldAccessService\n    {\n        private readonly IFieldAccessRightsExecutor _accessRightsExecutor;\n        private readonly ITypeResolver _types;\n        private readonly IServiceLocator _services;\n        private readonly List<IFieldAccessRule> _rules = new List<IFieldAccessRule>();\n\n        public FieldAccessService(IFieldAccessRightsExecutor accessRightsExecutor, IEnumerable<IFieldAccessRule> rules, ITypeResolver types, IServiceLocator services)\n        {\n            _accessRightsExecutor = accessRightsExecutor;\n            _types = types;\n            _services = services;\n            _rules.AddRange(rules);\n        }\n\n        public AccessRight RightsFor(ElementRequest request)\n        {\n            attachServices(request);\n\n            var matchingRules = _rules.Where(x => x.Matches(request.Accessor));\n            var authorizationRules = matchingRules.Where(x => x.Category == FieldAccessCategory.Authorization);\n            var logicRules = matchingRules.Where(x => x.Category == FieldAccessCategory.LogicCondition);\n            return _accessRightsExecutor.RightsFor(request, authorizationRules, logicRules);\n        }\n\n        public AccessRight RightsFor(object target, PropertyInfo property)\n        {\n            var accessor = new SingleProperty(property, _types.ResolveType(target));\n\n            var request = new ElementRequest(accessor){\n                Model = target,\n\n            };\n\n            attachServices(request);\n\n            return RightsFor(request);\n        }\n\n        private void attachServices(ElementRequest request)\n        {\n            request.As<IServiceLocatorAware>().Attach(_services);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Security/FieldAccessServiceExtensions.cs",
    "content": "using System;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.UI.Security\n{\n    public static class FieldAccessServiceExtensions\n    {\n        public static AccessRight RightsFor<T>(this IFieldAccessService fieldAccessService, T model, Expression<Func<T, object>> expression)\n        {\n            return fieldAccessService.RightsFor(model, expression.ToAccessor().InnerProperty);\n        }\n\n        public static bool HasRights<T>(this IFieldAccessService fieldAccessService, T model, Expression<Func<T, object>> expression, AccessRight requiredRights)\n        {\n            return fieldAccessService.RightsFor(model, expression.ToAccessor().InnerProperty) >= requiredRights;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Security/IFieldAccessRule.cs",
    "content": "using FubuCore.Reflection;\nusing FubuMVC.Core.UI.Elements;\n\nnamespace FubuMVC.Core.UI.Security\n{\n    public enum FieldAccessCategory\n    {\n        LogicCondition,\n        Authorization\n    }\n\n    public interface IFieldAccessRule\n    {\n        AccessRight RightsFor(ElementRequest request);\n        bool Matches(Accessor accessor);\n        FieldAccessCategory Category { get; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/Security/IFieldAccessService.cs",
    "content": "using System.Reflection;\nusing FubuMVC.Core.UI.Elements;\n\nnamespace FubuMVC.Core.UI.Security\n{\n    public interface IFieldAccessService\n    {\n        AccessRight RightsFor(ElementRequest request);\n        AccessRight RightsFor(object target, PropertyInfo property);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/ServiceLocatorTagRequestActivator.cs",
    "content": "using System;\nusing FubuCore;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI\n{\n    public class ServiceLocatorTagRequestActivator : ITagRequestActivator\n    {\n        private readonly IServiceLocator _services;\n\n        public ServiceLocatorTagRequestActivator(IServiceLocator services)\n        {\n            _services = services;\n        }\n\n        public bool Matches(Type requestType)\n        {\n            return requestType.CanBeCastTo<IServiceLocatorAware>();\n        }\n\n        public void Activate(TagRequest request)\n        {\n            request.As<IServiceLocatorAware>().Attach(_services);\n        }\n    }\n\n    public interface IServiceLocatorAware\n    {\n        void Attach(IServiceLocator locator);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/ShowEditFieldExpressions.cs",
    "content": "using System;\nusing System.Linq.Expressions;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.UI.Forms;\nusing FubuMVC.Core.UI.Security;\nusing FubuMVC.Core.View;\nusing FubuCore.Reflection;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI\n{\n    public static class ShowEditFieldExpressions\n    {\n        public static FormLineExpression<T> Show<T>(this IFubuPage<T> page, Expression<Func<T, object>> expression) where T : class\n        {\n            return page.Get<FormLineExpressionBuilder<T>>().Build(expression);\n        }\n\n        public static FormLineExpression<T> Edit<T>(this IFubuPage<T> page, Expression<Func<T, object>> expression) where T : class\n        {\n            return page.Show(expression).Editable(true);\n        }\n    }\n\n    public class FormLineExpressionBuilder<T> where T : class\n    {\n        private readonly IElementGenerator<T> _generator;\n        private readonly HtmlConventionLibrary _library;\n        private readonly ActiveProfile _profile;\n        private readonly IFieldAccessService _fieldAccessService;\n        private readonly IFubuRequest _request;\n\n        public FormLineExpressionBuilder(IElementGenerator<T> generator, HtmlConventionLibrary library, ActiveProfile profile, IFieldAccessService fieldAccessService, IFubuRequest request)\n        {\n            _generator = generator;\n            _library = library;\n            _profile = profile;\n            _fieldAccessService = fieldAccessService;\n            _request = request;\n        }\n\n        public FormLineExpression<T> Build(Expression<Func<T, object>> expression, T model = null)\n        {\n            var request = new ElementRequest(expression.ToAccessor()) {Model = model ?? _request.Get<T>()};\n\n            var accessRight = _fieldAccessService.RightsFor(request);\n            var chrome = _library.Get<IFieldChrome>(_profile.Name);\n\n            return new FormLineExpression<T>(chrome, _generator, request).Access(accessRight);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UI/UIServiceRegistry.cs",
    "content": "using FubuMVC.Core.Registration;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.UI.Security;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.UI\n{\n    public class UIServiceRegistry : ServiceRegistry\n    {\n        public UIServiceRegistry()\n        {\n            SetServiceIfNone<IFieldAccessService, FieldAccessService>();\n            SetServiceIfNone<IFieldAccessRightsExecutor, FieldAccessRightsExecutor>();\n\n            SetServiceIfNone<IElementNamingConvention, DefaultElementNamingConvention>();\n\n\n\n            For(typeof (IElementGenerator<>)).Use(typeof (ElementGenerator<>));\n            For(typeof(ITagGenerator<>)).Use(typeof(TagGenerator<>));\n\n\n            AddService<ITagRequestActivator, ElementRequestActivator>();\n            AddService<ITagRequestActivator, ServiceLocatorTagRequestActivator>();\n\n            SetServiceIfNone<ITagGeneratorFactory, TagGeneratorFactory>();\n\n            SetServiceIfNone<ITagRequestBuilder, TagRequestBuilder>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/UrlContext.cs",
    "content": "using System;\r\nusing System.Linq;\r\nusing System.Web;\r\nusing System.Web.Hosting;\r\n\r\nnamespace FubuMVC.Core\r\n{\r\n    using FubuCore;\r\n\r\n    /// <summary>\r\n    /// Helper class for url string manipulation\r\n    /// </summary>\r\n    public static class UrlContext\r\n    {\r\n        static UrlContext()\r\n        {\r\n            Reset();\r\n        }\r\n\r\n        private static Func<string, string, string> _combine { get; set; }\r\n        private static Func<string, string> _toAbsolute { get; set; }\r\n        private static Func<string, bool> _isAbsolute { get; set; }\r\n        private static Func<string, string> _mapPath { get; set; }\r\n\r\n        public static void Reset()\r\n        {\r\n            if (HttpRuntime.AppDomainAppVirtualPath != null)\r\n            {\r\n                Live();\r\n                return;\r\n            }\r\n\r\n            Stub(\"\");\r\n        }\r\n\r\n        public static void Stub()\r\n        {\r\n            Stub(\"\");\r\n        }\r\n\r\n        public static void Stub(string usingFakeUrl)\r\n        {\r\n            _combine = (basePath, subPath) =>\r\n            {\r\n                var root = basePath.TrimEnd('/');\r\n                if (root.Length > 0) root += '/';\r\n                return root + subPath.TrimStart('/');\r\n            };\r\n            _isAbsolute = path => path.StartsWith(\"/\");\r\n            _toAbsolute = path => _isAbsolute(path) ? path : _combine(usingFakeUrl, path.Replace(\"~\", \"\"));\r\n            _mapPath = virtPath => _toAbsolute(virtPath).Replace(\"~\", \"\").Replace(\"//\", \"/\").Replace(\"/\", \"\\\\\");\r\n        }\r\n\r\n        public static void Live()\r\n        {\r\n            _combine = VirtualPathUtility.Combine;\r\n            _toAbsolute = VirtualPathUtility.ToAbsolute;\r\n            _isAbsolute = VirtualPathUtility.IsAbsolute;\r\n            _mapPath = HostingEnvironment.MapPath;\r\n        }\r\n\r\n        public static string ToAbsoluteUrl(this string url)\r\n        {\r\n            if (Uri.IsWellFormedUriString(url, UriKind.Absolute)) return url;\r\n            if (url.IsEmpty()) url = \"~/\";\r\n            // When running on WebDev.WebServer (and possibly IIS 6) VirtualPathUtility chokes when the url contains a querystring\r\n            var urlParts = url.Split(new[] { '?' }, 2);\r\n            var baseUrl = urlParts[0];\r\n            if (!_isAbsolute(baseUrl))\r\n            {\r\n                baseUrl = _combine(\"~\", baseUrl);\r\n            }\r\n\r\n            var absoluteUrl = _toAbsolute(baseUrl);\r\n            if (urlParts.Length > 1) absoluteUrl += (\"?\" + urlParts[1]);\r\n            return absoluteUrl;\r\n        }\r\n\r\n\r\n\r\n        public static string ToPhysicalPath(this string webRelativePath)\r\n        {\r\n            if (!_isAbsolute(webRelativePath))\r\n            {\r\n                webRelativePath = _combine(\"~\", webRelativePath);\r\n            }\r\n            return _mapPath(webRelativePath);\r\n        }\r\n\r\n        public static string WithQueryStringValues(this string querystring, params object[] values)\r\n        {\r\n            return querystring.ToFormat(values.Select(value => value.ToString().UrlEncoded()).ToArray());\r\n        }\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/UrlStringExtensions.cs",
    "content": "using System;\r\nusing System.Web;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Core\r\n{\r\n    using FubuCore;\r\n\r\n    public static class UrlStringExtensions\r\n    {\r\n        public static string HtmlAttributeEncode(this string unEncoded)\r\n        {\r\n            return HttpUtility.HtmlAttributeEncode(unEncoded);\r\n        }\r\n\r\n        public static string HtmlEncode(this string unEncoded)\r\n        {\r\n            return HttpUtility.HtmlEncode(unEncoded);\r\n        }\r\n\r\n        public static string HtmlDecode(this string encoded)\r\n        {\r\n            return HttpUtility.HtmlDecode(encoded);\r\n        }\r\n\r\n        public static string UrlEncode(this string unEncoded)\r\n        {\r\n            return HttpUtility.UrlEncode(unEncoded);\r\n        }\r\n\r\n        public static string UrlDecode(this string encoded)\r\n        {\r\n            return HttpUtility.UrlDecode(encoded);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts url to an absolute url rooted at applicationUrl.  Does nothing if\r\n        /// url is already an absolute url\r\n        /// </summary>\r\n        /// <param name=\"url\"></param>\r\n        /// <param name=\"applicationUrl\"></param>\r\n        /// <returns></returns>\r\n        public static string ToAbsoluteUrl(this string url, string applicationUrl)\r\n        {\r\n            \r\n\r\n            if (!Uri.IsWellFormedUriString(applicationUrl, UriKind.Absolute))\r\n            {\r\n                throw new ArgumentOutOfRangeException(\"applicationUrl\", \"applicationUrl must be an absolute url\");\r\n            }\r\n\r\n            if (url.Contains(\"://\")) return url;\r\n\r\n            \r\n            url = url ?? string.Empty;\r\n            url = url.TrimStart('~', '/').TrimStart('/');\r\n\r\n            if (Uri.IsWellFormedUriString(url, UriKind.Absolute)) return url;\r\n\r\n            return (applicationUrl.TrimEnd('/') + \"/\" + url).TrimEnd('/');\r\n        }\r\n\r\n        public static string ToServerQualifiedUrl(this string relativeUrl, string serverBasedUrl)\r\n        {\r\n            var baseUri = new Uri(serverBasedUrl);\r\n            return new Uri(baseUri, relativeUrl.ToAbsoluteUrl(serverBasedUrl)).ToString();\r\n        }\r\n\r\n        public static string UrlEncoded(this object target)\r\n        {\r\n            //properly encoding URI: http://blogs.msdn.com/yangxind/default.aspx\r\n            return target != null ? Uri.EscapeDataString(target.ToString()) : string.Empty;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Urls/Categories.cs",
    "content": "namespace FubuMVC.Core.Urls\r\n{\r\n    public static class Categories\r\n    {\r\n        public static readonly string VIEW = \"View\";\r\n        public static readonly string DEFAULT = \"None\";\r\n        public static readonly string EDIT = \"Edit\";\r\n        public static readonly string NEW = \"New\";\r\n        public static readonly string NONE = \"None\";\r\n        public static readonly string FIND = \"FIND\";\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Urls/IChainUrlResolver.cs",
    "content": "﻿using System;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\n\r\nnamespace FubuMVC.Core.Urls\r\n{\r\n\t// TODO -- Change UrlRegistry and EndpointService to use this\r\n\t// TODO -- Change the NavigationService in FubuMVC.Navigation to use this\r\n\t// TODO -- This is going to break Serenity\r\n\r\n\tpublic interface IChainUrlResolver\r\n\t{\r\n\t\tstring UrlFor(object model, BehaviorChain chain);\r\n\t\tstring UrlFor(BehaviorChain chain, RouteParameters parameters);\r\n\t}\r\n\r\n\tpublic class ChainUrlResolver : IChainUrlResolver\r\n\t{\r\n\t\tprivate readonly IHttpRequest _httpRequest;\r\n\r\n\t\tpublic ChainUrlResolver(IHttpRequest httpRequest)\r\n\t\t{\r\n\t\t\t_httpRequest = httpRequest;\r\n\t\t}\r\n\r\n\t\tpublic string UrlFor(object model, BehaviorChain chain)\r\n\t\t{\r\n\t\t\tvar url = chain.As<RoutedChain>().Route.CreateUrlFromInput(model);\r\n\t\t\treturn _httpRequest.ToFullUrl(url);\r\n\t\t}\r\n\r\n\t\tpublic string UrlFor(BehaviorChain chain, RouteParameters parameters)\r\n\t\t{\r\n            var url = chain.As<RoutedChain>().Route.Input.CreateUrlFromParameters(parameters);\r\n\r\n\t\t\treturn _httpRequest.ToFullUrl(url);\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Urls/IUrlRegistry.cs",
    "content": "using System;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing FubuMVC.Core.Registration.Routes;\r\n\r\nnamespace FubuMVC.Core.Urls\r\n{\r\n    public interface IUrlRegistry\r\n    {\r\n        /// <summary>\r\n        /// Finds the url by input model and uses the \"model\" input to fill any\r\n        /// substitutions in the route pattern\r\n        /// </summary>\r\n        /// <param name=\"model\"></param>\r\n        /// <param name=\"categoryOrHttpMethod\"></param>\r\n        /// <returns></returns>\r\n        string UrlFor(object model, string categoryOrHttpMethod = null);\r\n        \r\n        /// <summary>\r\n        /// Finds the url for a route by input model type first, then handler type.  Will throw an exception\r\n        /// if more than one possible behavior chain is found for the type and category/http method\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"categoryOrHttpMethod\"></param>\r\n        /// <returns></returns>\r\n        string UrlFor<T>(string categoryOrHttpMethod = null) where T : class;\r\n        \r\n        /// <summary>\r\n        /// Find the url for a behavior chain with the designated handlerType, method, and optionally a category\r\n        /// or Http method\r\n        /// </summary>\r\n        /// <param name=\"handlerType\"></param>\r\n        /// <param name=\"method\"></param>\r\n        /// <param name=\"categoryOrHttpMethodOrHttpMethod\"></param>\r\n        /// <returns></returns>\r\n        string UrlFor(Type handlerType, MethodInfo method = null, string categoryOrHttpMethodOrHttpMethod = null);\r\n        \r\n        \r\n        /// <summary>\r\n        /// Find the url for a behavior chain with the designated handlerType, method, and optionally a category\r\n        /// or Http method\r\n        /// </summary>\r\n        /// <typeparam name=\"TController\"></typeparam>\r\n        /// <param name=\"expression\"></param>\r\n        /// <param name=\"categoryOrHttpMethod\"></param>\r\n        /// <returns></returns>\r\n        string UrlFor<TController>(Expression<Action<TController>> expression, string categoryOrHttpMethod = null);\r\n\r\n        /// <summary>\r\n        /// Finds the url for the behavior chain that would create the designated type.  Matches against\r\n        /// BehaviorChain.UrlCategory.Creates list\r\n        /// </summary>\r\n        /// <param name=\"entityType\"></param>\r\n        /// <returns></returns>\r\n        string UrlForNew(Type entityType);\r\n\r\n        /// <summary>\r\n        /// Tests whether or not there is an endpoint in the system for creating new entities of the entityType\r\n        /// </summary>\r\n        /// <param name=\"type\"></param>\r\n        /// <returns></returns>\r\n        bool HasNewUrl(Type type);\r\n\r\n        /// <summary>\r\n        /// Resolve a url for a model type, but using a RouteParameters object to define route substitutions.\r\n        /// </summary>\r\n        /// <param name=\"modelType\"></param>\r\n        /// <param name=\"parameters\"></param>\r\n        /// <param name=\"categoryOrHttpMethod\"></param>\r\n        /// <returns></returns>\r\n        string UrlFor(Type modelType, RouteParameters parameters, string categoryOrHttpMethod = null);\r\n    }\r\n\r\n    public static class UrlRegistryExtensions\r\n    {\r\n\r\n        /// <summary>\r\n        /// Finds the url for the behavior chain that would create the designated type.  Matches against\r\n        /// BehaviorChain.UrlCategory.Creates list\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"registry\"></param>\r\n        /// <returns></returns>\r\n        public static string UrlForNew<T>(this IUrlRegistry registry)\r\n        {\r\n            return registry.UrlForNew(typeof (T));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Tests whether or not there is an endpoint in the system for creating new entities of the entityType\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"registry\"></param>\r\n        /// <returns></returns>\r\n        public static bool HasNewUrl<T>(this IUrlRegistry registry)\r\n        {\r\n            return registry.HasNewUrl(typeof(T));\r\n        }\r\n        \r\n        /// <summary>\r\n        /// Resolve a url for a model type, but using a RouteParameters object to define route substitutions.\r\n        /// </summary>\r\n        /// <typeparam name=\"TInput\"></typeparam>\r\n        /// <param name=\"registry\"></param>\r\n        /// <param name=\"parameters\"></param>\r\n        /// <returns></returns>\r\n        public static string UrlFor<TInput>(this IUrlRegistry registry, RouteParameters parameters)\r\n        {\r\n            return registry.UrlFor(typeof(TInput), parameters);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Resolve a url for a model type, but using a RouteParameters object to define route substitutions.\r\n        /// </summary>\r\n        /// <typeparam name=\"TInput\"></typeparam>\r\n        /// <param name=\"urls\"></param>\r\n        /// <param name=\"category\"></param>\r\n        /// <param name=\"parameters\"></param>\r\n        /// <returns></returns>\r\n        public static string UrlFor<TInput>(this IUrlRegistry urls, string category, RouteParameters parameters)\r\n        {\r\n            return urls.UrlFor(typeof(TInput), parameters, category);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Inline way to resolve a url for an input model type by defining the RouteParameters object by\r\n        /// expressions\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"registry\"></param>\r\n        /// <param name=\"configure\"></param>\r\n        /// <returns></returns>\r\n        public static string UrlFor<T>(this IUrlRegistry registry, Action<RouteParameters<T>> configure)\r\n        {\r\n            var parameters = new RouteParameters<T>();\r\n            configure(parameters);\r\n\r\n            return registry.UrlFor<T>(parameters);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Inline way to resolve a url for an input model type by defining the RouteParameters object by\r\n        /// expressions\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        /// <param name=\"registry\"></param>\r\n        /// <param name=\"configure\"></param>\r\n        /// <returns></returns>\r\n        public static string UrlFor<T>(this IUrlRegistry registry, string category, Action<RouteParameters<T>> configure)\r\n        {\r\n            var parameters = new RouteParameters<T>();\r\n            configure(parameters);\r\n\r\n            return registry.UrlFor(typeof(T), parameters, category);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Urls/StubUrlRegistry.cs",
    "content": "using System;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Registration.Routes;\r\n\r\nnamespace FubuMVC.Core.Urls\r\n{\r\n    /// <summary>\r\n    /// This is just to have a predictable stub for unit testing\r\n    /// </summary>\r\n    public class StubUrlRegistry : IUrlRegistry\r\n    {\r\n\r\n        public string UrlFor<TInput>(string categoryOrHttpMethod) where TInput : class\r\n        {\r\n            var url = \"url for \" + typeof(TInput).Name;\r\n\r\n            if (categoryOrHttpMethod.IsNotEmpty())\r\n            {\r\n                url += \"/\" + categoryOrHttpMethod;\r\n            }\r\n\r\n            return url;\r\n        }\r\n\r\n        public string UrlFor(object model, string category = null)\r\n        {\r\n            if (category.IsEmpty())\r\n            {\r\n                return \"url for {0}\".ToFormat(model);\r\n            }\r\n\r\n            return \"url for {0}, category {1}\".ToFormat(model, category);\r\n        }\r\n\r\n        public string UrlFor(Type modelType, RouteParameters parameters)\r\n        {\r\n            return \"url for {0} with parameters {1}\".ToFormat(modelType.FullName, parameters);\r\n        }\r\n\r\n        public string UrlFor(Type modelType, RouteParameters parameters, string categoryOrHttpMethod)\r\n        {\r\n            return \"url for {0}/{1} with parameters {2}\".ToFormat(modelType.FullName, categoryOrHttpMethod, parameters);\r\n        }\r\n\r\n        public string BaseAddress { get { return \"http://localhost\"; } }\r\n\r\n        public string UrlFor<TController>(Expression<Action<TController>> expression, string categoryOrHttpMethod)\r\n        {\r\n            return UrlFor(typeof(TController), ReflectionHelper.GetMethod(expression), categoryOrHttpMethod);\r\n        }\r\n\r\n        public string UrlForNew(Type entityType)\r\n        {\r\n            return \"url for new \" + entityType.FullName;\r\n        }\r\n\r\n        public bool HasNewUrl(Type type)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n\r\n        public string UrlFor(Type handlerType, MethodInfo method, string categoryOrHttpMethodOrHttpMethod)\r\n        {\r\n            if (categoryOrHttpMethodOrHttpMethod.IsNotEmpty())\r\n            {\r\n                return \"url for {0}.{1}()/{2}\".ToFormat(handlerType.FullName, method.Name, categoryOrHttpMethodOrHttpMethod);\r\n            }\r\n\r\n            if (method == null)\r\n            {\r\n                return \"url for \" + handlerType.Name;\r\n            }\r\n\r\n            return \"url for {0}.{1}()\".ToFormat(handlerType.FullName, method.Name);\r\n        }\r\n\r\n    }\r\n\r\n    public class ValidStubUrlRegistry : IUrlRegistry\r\n    {\r\n\r\n        public string UrlFor(object model, string category = null)\r\n        {\r\n            var url = \"http://somewhere.com/\" + model.ToString();\r\n            if (category.IsNotEmpty())\r\n            {\r\n                url += \"/\" + category;\r\n            }\r\n\r\n            return url;\r\n        }\r\n\r\n        public string UrlFor<TInput>(string categoryOrHttpMethod) where TInput : class\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public string UrlForNew(Type entityType)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public bool HasNewUrl(Type type)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n\r\n        public string UrlFor(Type handlerType, MethodInfo method, string categoryOrHttpMethodOrHttpMethod)\r\n        {\r\n            var url = \"http://somewhere.com/\" + handlerType.Name + \"/\" + method.Name;\r\n            if (categoryOrHttpMethodOrHttpMethod.IsNotEmpty())\r\n            {\r\n                url += \"/\" + categoryOrHttpMethodOrHttpMethod;\r\n            }\r\n\r\n            return url;\r\n        }\r\n\r\n\r\n        public string UrlFor(Type modelType, RouteParameters parameters, string categoryOrHttpMethod = null)\r\n        {\r\n            var url = \"http://something.com/{0}/{1}\".ToFormat(modelType.Name, parameters);\r\n\r\n            if (categoryOrHttpMethod.IsNotEmpty())\r\n            {\r\n                url += \"/\" + categoryOrHttpMethod;\r\n            }\r\n\r\n            return url;\r\n        }\r\n\r\n\r\n        public string UrlFor<TController>(Expression<Action<TController>> expression, string categoryOrHttpMethod)\r\n        {\r\n            return UrlFor(typeof(TController), ReflectionHelper.GetMethod(expression), categoryOrHttpMethod);\r\n        }\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Urls/UrlRegistry.cs",
    "content": "using System;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Querying;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.Urls\r\n{\r\n    public class UrlRegistry : ChainInterrogator<string>, IUrlRegistry\r\n    {\r\n\t    private readonly IChainUrlResolver _urlResolver;\r\n\t    private readonly IHttpRequest _httpRequest;\r\n\r\n        public UrlRegistry(IChainResolver resolver, IChainUrlResolver urlResolver, IHttpRequest httpRequest)\r\n            : base(resolver)\r\n        {\r\n\t        _urlResolver = urlResolver;\r\n\t        _httpRequest = httpRequest;\r\n        }\r\n\r\n        public string UrlFor<TInput>(string categoryOrHttpMethod = null) where TInput : class\r\n        {\r\n            var type = typeof (TInput);\r\n            try\r\n            {\r\n                if (type.IsConcreteWithDefaultCtor())\r\n                {\r\n                    var model = Activator.CreateInstance(type);\r\n                    return For(model, categoryOrHttpMethod);\r\n                }\r\n            }\r\n\r\n\r\n            catch (FubuException) // Yeah, I know\r\n            {\r\n                return For(type, null, categoryOrHttpMethod);\r\n            }\r\n\r\n            return For(type, null, categoryOrHttpMethod);\r\n        }\r\n\r\n        public string UrlFor(object model, string category = null)\r\n        {\r\n            return For(model, category);\r\n        }\r\n\r\n        public string UrlFor(Type modelType, RouteParameters parameters, string categoryOrHttpMethod = null)\r\n        {\r\n            var chain = resolver.FindUniqueByType(modelType, categoryOrHttpMethod);\r\n\t        return _urlResolver.UrlFor(chain, parameters);\r\n        }\r\n\r\n        public string UrlFor(Type handlerType, MethodInfo method, string categoryOrHttpMethod = null)\r\n        {\r\n            return For(handlerType, method, categoryOrHttpMethod);\r\n        }\r\n\r\n        public string UrlFor<TController>(Expression<Action<TController>> expression, string categoryOrHttpMethod)\r\n        {\r\n            return UrlFor(typeof(TController), ReflectionHelper.GetMethod(expression), categoryOrHttpMethod);\r\n        }\r\n\r\n        public string UrlForNew(Type entityType)\r\n        {\r\n            return forNew(entityType);\r\n        }\r\n\r\n\r\n        public bool HasNewUrl(Type type)\r\n        {\r\n            return resolver.FindCreatorOf(type) != null;\r\n        }\r\n\r\n        protected override string createResult(object model, BehaviorChain chain)\r\n        {\r\n\t        return _urlResolver.UrlFor(model, chain);\r\n        }\r\n\r\n        public string UrlFor<TInput>(RouteParameters parameters)\r\n        {\n            return UrlFor(typeof (TInput), parameters);\n        }\r\n\r\n        public string UrlFor<TInput>(RouteParameters parameters, string categoryOrHttpMethod = null)\r\n        {\r\n            var modelType = typeof (TInput);\r\n            return UrlFor(modelType, parameters, categoryOrHttpMethod);\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        ///   This is only for automated testing scenarios.  Do NOT use in real\r\n        ///   scenarios\r\n        /// </summary>\r\n        /// <param name = \"baseUrl\"></param>\r\n        public void RootAt(string baseUrl)\r\n        {\r\n            resolver.RootAt(baseUrl);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/ClassValidationRules.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation\n{\n    public interface IFieldConditionalExpression\n    {\n        void If(IFieldRuleCondition condition);\n        void If<T>() where T : IFieldRuleCondition, new();\n    }\n\n    public interface IRuleRegistrationExpression : IFieldConditionalExpression\n    {\n    }\n\n    public interface IFieldValidationExpression : IFieldConditionalExpression\n    {\n        IFieldValidationExpression Rule(IFieldValidationRule rule);\n        IFieldValidationExpression Rule<T>() where T : IFieldValidationRule, new();\n    }\n\n    public class ClassValidationRules<T> : IValidationRegistration, IValidationSource where T : class\n    {\n        private readonly IList<RuleRegistrationExpression> _rules = new List<RuleRegistrationExpression>();\n        private readonly IList<IValidationRule> _classRules = new List<IValidationRule>();\n\n        public RuleRegistrationExpression Require(params Expression<Func<T, object>>[] properties)\n        {\n            var accessors = properties.Select(x => x.ToAccessor());\n            var expression = new RuleRegistrationExpression(a => new RequiredFieldRule(), accessors);\n\n            _rules.Add(expression);\n\n            return expression;\n        }\n\n        public FieldValidationExpression Property(Expression<Func<T, object>> property)\n        {\n            var accessor = property.ToAccessor();\n            if (accessor.DeclaringType.IsInterface)\n            {\n                var myProperty = typeof (T).GetProperty(accessor.Name);\n                if (myProperty != null)\n                {\n                    accessor = new SingleProperty(myProperty);\n                }\n            }\n\n            return new FieldValidationExpression(this, accessor);\n        }\n\n        public void Register<TClassRule>() where TClassRule : IValidationRule, new()\n        {\n            _classRules.Add(new TClassRule());\n        }\n\n        public void Register<TClassRule>(TClassRule rule) where TClassRule : IValidationRule\n        {\n            _classRules.Add(rule);\n        }\n\n        void IValidationRegistration.Register(ValidationGraph graph)\n        {\n            _rules.Each(r => r.Register(graph.Fields));\n            graph.RegisterSource(this);\n        }\n\n        IEnumerable<IValidationRule> IValidationSource.RulesFor(Type type)\n        {\n            return type == typeof(T)\n                ? _classRules\n                : Enumerable.Empty<IValidationRule>();\n        }\n\n\n        public class RuleRegistrationExpression : IRuleRegistrationExpression\n        {\n            private Func<Accessor, IFieldValidationRule> _ruleSource;\n            private readonly IEnumerable<Accessor> _accessors;\n\n            public RuleRegistrationExpression(Func<Accessor, IFieldValidationRule> ruleSource, Accessor accessor)\n                : this(ruleSource, new[] { accessor })\n            {\n            }\n\n            public RuleRegistrationExpression(Func<Accessor, IFieldValidationRule> ruleSource, IEnumerable<Accessor> accessors)\n            {\n                _ruleSource = ruleSource;\n                _accessors = accessors;\n            }\n\n            public void If(IFieldRuleCondition condition)\n            {\n                var innerSource = _ruleSource;\n                _ruleSource = a => new ConditionalFieldRule<T>(condition, innerSource(a));\n            }\n\n            public void If<TCondition>() where TCondition : IFieldRuleCondition, new()\n            {\n                If(new TCondition());\n            }\n\n            public void If(Func<T, bool> condition)\n            {\n                If(FieldRuleCondition.For(condition));\n            }\n\n            public void If(Func<T, ValidationContext, bool> condition)\n            {\n                If(FieldRuleCondition.For(condition));\n            }\n\n            internal void Register(IFieldRulesRegistry registration)\n            {\n                _accessors.Each(a => registration.Register(typeof(T), a, _ruleSource(a)));\n            } \n        }\n\n        public class FieldValidationExpression : IFieldValidationExpression\n        {\n            private readonly ClassValidationRules<T> _parent;\n            private readonly Accessor _accessor;\n            private RuleRegistrationExpression _lastRule;\n\n            public FieldValidationExpression(ClassValidationRules<T> parent, Accessor accessor)\n            {\n                _parent = parent;\n                _accessor = accessor;\n            }\n\n            public void If(IFieldRuleCondition condition)\n            {\n                _lastRule.If(condition);\n            }\n\n            public void If<TCondition>() where TCondition : IFieldRuleCondition, new()\n            {\n                If(new TCondition());\n            }\n\n            public void If(Func<T, bool> condition)\n            {\n                If(FieldRuleCondition.For(condition));\n            }\n\n            public void If(Func<T, ValidationContext, bool> condition)\n            {\n                If(FieldRuleCondition.For(condition));\n            }\n\n            public void IfValid()\n            {\n                If<IsValid>();\n            }\n\n            public FieldValidationExpression MaximumLength(int length)\n            {\n                return register(new MaximumLengthRule(length));\n            }\n\n\t\t\tpublic FieldValidationExpression MaximumLength(int length, StringToken token)\n\t\t\t{\n\t\t\t\treturn register(new MaximumLengthRule(length, token));\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression MaximumLength(int length, ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new MaximumLengthRule(length) { Mode = mode});\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression MaximumLength(int length, StringToken token, ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new MaximumLengthRule(length, token) { Mode = mode });\n\t\t\t}\n\n            public FieldValidationExpression GreaterThanZero()\n            {\n                return register(new GreaterThanZeroRule());\n            }\n\n\t\t\tpublic FieldValidationExpression GreaterThanZero(StringToken token)\n\t\t\t{\n\t\t\t\treturn register(new GreaterThanZeroRule(token));\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression GreaterThanZero(ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new GreaterThanZeroRule { Mode = mode });\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression GreaterThanZero(StringToken token, ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new GreaterThanZeroRule(token) { Mode = mode });\n\t\t\t}\n\n            public FieldValidationExpression GreaterOrEqualToZero()\n            {\n                return register(new GreaterOrEqualToZeroRule());\n            }\n\n\t\t\tpublic FieldValidationExpression GreaterOrEqualToZero(StringToken token)\n\t\t\t{\n\t\t\t\treturn register(new GreaterOrEqualToZeroRule(token));\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression GreaterOrEqualToZero(ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new GreaterOrEqualToZeroRule { Mode = mode});\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression GreaterOrEqualToZero(StringToken token, ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new GreaterOrEqualToZeroRule(token) { Mode = mode });\n\t\t\t}\n\n            public FieldValidationExpression Required()\n            {\n                return register(new RequiredFieldRule());\n            }\n\n\t\t\tpublic FieldValidationExpression Required(StringToken token)\n\t\t\t{\n\t\t\t\treturn register(new RequiredFieldRule(token));\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression Required(ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new RequiredFieldRule { Mode = mode});\n\t\t\t}\n\t\t\t\n\t\t\tpublic FieldValidationExpression Required(StringToken token, ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new RequiredFieldRule(token) { Mode = mode});\n\t\t\t}\n\n            public FieldValidationExpression Email()\n            {\n                return register(new EmailFieldRule());\n            }\n\n\t\t\tpublic FieldValidationExpression Email(StringToken token)\n\t\t\t{\n\t\t\t\treturn register(new EmailFieldRule(token));\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression Email(ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new EmailFieldRule { Mode = mode});\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression Email(StringToken token, ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new EmailFieldRule(token) { Mode = mode});\n\t\t\t}\n\n            public FieldValidationExpression MinimumLength(int length)\n            {\n                return register(new MinimumLengthRule(length));\n            }\n\n\t\t\tpublic FieldValidationExpression MinimumLength(int length, StringToken token)\n\t\t\t{\n\t\t\t\treturn register(new MinimumLengthRule(length, token));\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression MinimumLength(int length, ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new MinimumLengthRule(length) { Mode = mode});\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression MinimumLength(int length, StringToken token, ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new MinimumLengthRule(length, token) { Mode = mode});\n\t\t\t}\n\n            public FieldValidationExpression MinValue(IComparable bounds)\n            {\n                return register(new MinValueFieldRule(bounds));\n            }\n\n\t\t\tpublic FieldValidationExpression MinValue(IComparable bounds, StringToken token)\n\t\t\t{\n\t\t\t\treturn register(new MinValueFieldRule(bounds, token));\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression MinValue(IComparable bounds, ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new MinValueFieldRule(bounds) { Mode = mode });\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression MinValue(IComparable bounds, StringToken token, ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new MinValueFieldRule(bounds, token) { Mode = mode});\n\t\t\t}\n\n            public FieldValidationExpression RangeLength(int min, int max)\n            {\n                return register(new RangeLengthFieldRule(min, max));\n            }\n\n\t\t\tpublic FieldValidationExpression RangeLength(int min, int max, StringToken token)\n\t\t\t{\n\t\t\t\treturn register(new RangeLengthFieldRule(min, max, token));\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression RangeLength(int min, int max, ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new RangeLengthFieldRule(min, max) { Mode = mode});\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression RangeLength(int min, int max, StringToken token, ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new RangeLengthFieldRule(min, max, token) { Mode = mode});\n\t\t\t}\n\n            public FieldValidationExpression MaxValue(IComparable bounds)\n            {\n                return register(new MaxValueFieldRule(bounds));\n            }\n\n\t\t\tpublic FieldValidationExpression MaxValue(IComparable bounds, StringToken token)\n\t\t\t{\n\t\t\t\treturn register(new MaxValueFieldRule(bounds, token));\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression MaxValue(IComparable bounds, ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new MaxValueFieldRule(bounds) { Mode = mode});\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression MaxValue(IComparable bounds, StringToken token, ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new MaxValueFieldRule(bounds, token) { Mode = mode});\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression RegEx(string expression)\n\t\t\t{\n\t\t\t\treturn register(new RegularExpressionFieldRule(expression));\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression RegEx(string expression, StringToken token)\n\t\t\t{\n\t\t\t\treturn register(new RegularExpressionFieldRule(expression, token));\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression RegEx(string expression, ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new RegularExpressionFieldRule(expression) { Mode = mode});\n\t\t\t}\n\n\t\t\tpublic FieldValidationExpression RegEx(string expression, StringToken token, ValidationMode mode)\n\t\t\t{\n\t\t\t\treturn register(new RegularExpressionFieldRule(expression, token) { Mode = mode});\n\t\t\t}\n\n\t\t\tpublic FieldEqualityRuleExpression Matches(Expression<Func<T, object>> property)\n\t\t\t{\n\t\t\t\tvar rule = new FieldEqualityRule(_accessor, property.ToAccessor());\n\t\t\t\t_parent.Register(rule);\n\t\t\t\treturn new FieldEqualityRuleExpression(rule);\n\t\t\t}\n\n            private FieldValidationExpression register(IFieldValidationRule rule)\n            {\n                _lastRule = new RuleRegistrationExpression(a => rule, _accessor);\n                _parent._rules.Add(_lastRule);\n\n                return this;\n            }\n\n            public IFieldValidationExpression Rule(IFieldValidationRule rule)\n            {\n                return register(rule);\n            }\n\n            public IFieldValidationExpression Rule<TRule>() where TRule : IFieldValidationRule, new()\n            {\n                return Rule(new TRule());\n            }\n        }\n\n\t\tpublic class FieldEqualityRuleExpression\n\t\t{\n\t\t\tprivate readonly FieldEqualityRule _rule;\n\n\t\t\tpublic FieldEqualityRuleExpression(FieldEqualityRule rule)\n\t\t\t{\n\t\t\t\t_rule = rule;\n\t\t\t}\n\n\t\t\tpublic FieldEqualityRuleExpression UseToken(StringToken token)\n\t\t\t{\n\t\t\t\t_rule.Token = token;\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tpublic FieldEqualityRuleExpression ReportErrorsOn(Expression<Func<T, object>> property)\n\t\t\t{\n\t\t\t\t_rule.ReportMessagesFor(property.ToAccessor());\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/CollectionLengthAttribute.cs",
    "content": "using System.Collections.Generic;\nusing System.Reflection;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class CollectionLengthAttribute : FieldValidationAttribute\n    {\n        private readonly int _length;\n\n        public CollectionLengthAttribute(int length)\n        {\n            _length = length;\n        }\n\n        public int Length\n        {\n            get { return _length; }\n        }\n\n        public override IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property)\n        {\n            yield return new CollectionLengthRule(_length);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/ContinueValidationAttribute.cs",
    "content": "using System.Collections.Generic;\nusing System.Reflection;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class ContinueValidationAttribute : FieldValidationAttribute\n    {\n        public override IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property)\n        {\n            yield return new ContinuationFieldRule();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/CoreExtensions.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.Linq;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Validation\n{\n    public static class CoreExtensions\n    {\n        public static void Fill<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, TValue value)\n        {\n            if (dictionary.ContainsKey(key))\n            {\n                dictionary[key] = value;\n                return;\n            }\n\n            dictionary.Add(key, value);\n        }\n\n        public static int Count(this IEnumerable source)\n        {\n            if (source == null)\n            {\n                throw new ArgumentNullException(\"source\");\n            }\n\n            var collection = source as ICollection;\n            if (collection != null)\n            {\n                return collection.Count;\n            }\n\n            var num = 0;\n            var enumerator = source.GetEnumerator();\n            while (enumerator.MoveNext())\n            {\n                ++num;\n            }\n\n            return num;\n        }\n\n        public static bool IsEqualTo<T>(this IEnumerable<T> actual, IEnumerable<T> expected)\n        {\n            var actualList = actual.ToArray();\n            var expectedList = expected.ToArray();\n\n            if (actualList.Length != expectedList.Length)\n            {\n                return false;\n            }\n\n            for (var i = 0; i < actualList.Length; ++i)\n            {\n                if (!actualList[i].Equals(expectedList[i]))\n                {\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        public static bool IsEnumerable(this Type type)\n        {\n            return !type.IsString() && typeof (IEnumerable).IsAssignableFrom(type);\n        }\n\n        public static void Each(this NameValueCollection collection, Action<string, string> action)\n        {\n            collection.AllKeys.Each(key => action(key, collection[key]));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/EmailAttribute.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Reflection;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class EmailAttribute : FieldValidationAttribute\n    {\n        public override IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property)\n        {\n            yield return new EmailFieldRule();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/FieldEqualityRule.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation\n{\n\tpublic class FieldEqualityRule : IValidationRule, DescribesItself\n\t{\n\t\tpublic static readonly string Field1 = \"field1\";\n\t\tpublic static readonly string Field2 = \"field2\";\n\n\t\tprivate readonly Accessor _property1;\n\t\tprivate readonly Accessor _property2;\n\t\tprivate readonly Type _type;\n\n\t\tprivate readonly IList<Accessor> _accessors = new List<Accessor>();\n\n\t\tpublic FieldEqualityRule(Accessor property1, Accessor property2)\n\t\t\t: this(property1, property2, ValidationKeys.FieldEquality)\n\t\t{\n\t\t}\n\n\t\tpublic FieldEqualityRule(Accessor property1, Accessor property2, StringToken token)\n\t\t{\n\t\t\t_property1 = property1;\n\t\t\t_property2 = property2;\n\n\t\t\tif (_property1.PropertyType != _property2.PropertyType)\n\t\t\t{\n\t\t\t\tthrow new InvalidOperationException(\"Property types do not match\");\n\t\t\t}\n\t\t\t\n\t\t\t_type = _property1.PropertyType;\n\n\t\t\tToken = token;\n\t\t}\n\n\t\tpublic Accessor Property1 { get { return _property1; } }\n\t\tpublic Accessor Property2 { get { return _property2; } }\n\n\t\tpublic StringToken Token { get; set; }\n\n\t\tpublic void ReportMessagesFor(Accessor accessor)\n\t\t{\n\t\t\tif (!_property1.Equals(accessor) && !_property2.Equals(accessor))\n\t\t\t{\n\t\t\t\tthrow new ArgumentOutOfRangeException(\"accessor\", \"Property does not exist in the expression\");\n\t\t\t}\n\n\t\t\t_accessors.Fill(accessor);\n\t\t}\n\n\t\tpublic void Validate(ValidationContext context)\n\t\t{\n\t\t\tvar value1 = _property1.GetValue(context.Target);\n\t\t\tvar value2 = _property2.GetValue(context.Target);\n\n\t\t\tif (value1 == null && value2 == null) return;\n\n\t\t\tif (_type == typeof(string))\n\t\t\t{\n\t\t\t\tvar str1 = value1 as string;\n\t\t\t\tvar str2 = value2 as string;\n\n\t\t\t\tif (str1.IsEmpty() && str2.IsEmpty())\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (Equals(value1, value2))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_accessors.Each(x =>\n\t\t\t{\n\t\t\t\tvar values = new[]\n\t\t\t\t{\n\t\t\t\t\tTemplateValue.For(Field1, _property1.Name),\n\t\t\t\t\tTemplateValue.For(Field2, _property2.Name)\n\t\t\t\t};\n\n\t\t\t\tcontext\n\t\t\t\t\t.Notification\n\t\t\t\t\t.RegisterMessage(x, Token, values);\n\t\t\t});\n\t\t}\n\n\t\tprivate IDictionary<string, object> localizedProperty(Accessor accessor)\n\t\t{\n\t\t\tvar values = new Dictionary<string, object>();\n\t\t\tvalues.Add(\"field\", accessor.Name);\n\t\t\tvalues.Add(\"label\", LocalizationManager.GetHeader(accessor.InnerProperty));\n\t\t\treturn values;\n\t\t}\n\n\t\tpublic IDictionary<string, object> ToValues()\n\t\t{\n\t\t\tvar values = new Dictionary<string, object>();\n\t\t\tvalues.Add(\"property1\", localizedProperty(_property1));\n\t\t\tvalues.Add(\"property2\", localizedProperty(_property2));\n\n\t\t\tvalues.Add(\"message\", Token.ToString());\n\n\t\t\tvalues.Add(\"targets\", _accessors.Select(x => x.Name));\n\n\t\t\treturn values;\n\t\t}\n\n\t\tpublic void Describe(Description description)\n\t\t{\n\t\t\tdescription.ShortDescription = \"{0}.{1} must equal {0}.{2}\".ToFormat(_property1.DeclaringType, _property1.Name, _property2.Name);\n\t\t}\n\n\t\tpublic static FieldEqualityRule For<T>(Expression<Func<T, object>> property1, Expression<Func<T, object>> property2)\n\t\t{\n\t\t\treturn new FieldEqualityRule(property1.ToAccessor(), property2.ToAccessor());\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/AttributeFieldValidationSource.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public class AttributeFieldValidationSource : IFieldValidationSource\n    {\n        public IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property)\n        {\n            return property.GetAllAttributes<FieldValidationAttribute>()\n                .SelectMany(x => x.RulesFor(property));\n        }\n\n        public void AssertIsValid()\n        {\n            \n        }\n\n        public override bool Equals(object obj)\n        {\n            return obj is AttributeFieldValidationSource;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/ClassFieldValidationRules.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuCore.Util;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n\tpublic class ClassFieldValidationRules : IValidationRule, DescribesItself\n\t{\n\t\tprivate readonly Cache<Accessor, IList<IFieldValidationRule>> _rules =\n\t\t\tnew Cache<Accessor, IList<IFieldValidationRule>>(a => new List<IFieldValidationRule>());\n\n\t\tpublic void Validate(ValidationContext context)\n\t\t{\n\t\t\t_rules.Each((accessor, rules) => rules.Each(rule => rule.Validate(accessor, context)));\n\t\t}\n\n\t\tpublic void AddRule(Accessor accessor, IFieldValidationRule rule)\n\t\t{\n\t\t\t_rules[accessor].Add(rule);\n\t\t}\n\n\t\tpublic void AddRules(Accessor accessor, IEnumerable<IFieldValidationRule> rules)\n\t\t{\n\t\t\t_rules[accessor].AddRange(rules);\n\t\t}\n\n\t\tpublic bool HasRule<T>(Accessor accessor) where T : IFieldValidationRule\n\t\t{\n\t\t\treturn _rules[accessor].Any(x => x is T);\n\t\t}\n\n\t\tpublic IEnumerable<IFieldValidationRule> RulesFor(Accessor accessor)\n\t\t{\n\t\t\treturn _rules[accessor];\n\t\t}\n\n\t\tpublic IEnumerable<IFieldValidationRule> RulesFor<T>(Expression<Func<T, object>> property)\n\t\t{\n\t\t\treturn _rules[property.ToAccessor()];\n\t\t}\n\n\t\tpublic void ForRule<T>(Accessor accessor, Action<T> continuation) where T : IFieldValidationRule\n\t\t{\n\t\t\t_rules[accessor].OfType<T>().Each(continuation);\n\t\t}\n\n\t\tpublic void Describe(Description description)\n\t\t{\n\t\t\tvar items = new List<FieldRuleListItem>();\n\t\t\t_rules.Each((accessor, rules) =>\n\t\t\t{\n\t\t\t\titems.AddRange(rules.Select(rule => new FieldRuleListItem {Accessor = accessor, Rule = rule}));\n\t\t\t});\n\n\t\t\tvar list = description.AddList(\"FieldRules\", items);\n\t\t\tlist.Label = \"Field Validation Rules\";\n\t\t\tlist.IsOrderDependent = true;\n\t\t}\n\n\t\tpublic class FieldRuleListItem : DescribesItself\n\t\t{\n\t\t\tpublic Accessor Accessor { get; set; }\n\t\t\tpublic IFieldValidationRule Rule { get; set; }\n\n\t\t\tpublic void Describe(Description description)\n\t\t\t{\n\t\t\t\tdescription.Title = \"{0}: {1}\".ToFormat(Accessor.Name, Rule.GetType().Name);\n\t\t\t\tif (Rule.GetType().CanBeCastTo<DescribesItself>())\n\t\t\t\t{\n\t\t\t\t\tRule.As<DescribesItself>().Describe(description);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/CollectionLengthRule.cs",
    "content": "﻿using FubuCore;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public class CollectionLengthRule : IFieldValidationRule, DescribesItself\n    {\n\t    private readonly int _length;\n        public static readonly string LENGTH = \"min\";\n\n        public CollectionLengthRule(int length)\n\t\t\t: this(length, ValidationKeys.CollectionLength)\n        {\n        }\n\n\t    public CollectionLengthRule(int length, StringToken token)\n\t    {\n\t\t    _length = length;\n\n\t\t    Token = token;\n\t    }\n\n\t\tpublic StringToken Token { get; set; }\n\n\t    public ValidationMode Mode { get; set; }\n\n\t\tpublic int Length\n\t\t{\n\t\t\tget { return _length; }\n\t\t}\n\n        public void Validate(Accessor accessor, ValidationContext context)\n        {\n            var enumerable = accessor.GetValue(context.Target) as System.Collections.IEnumerable;\n            if (enumerable == null || enumerable.Count() != _length)\n            {\n                context.Notification.RegisterMessage(accessor, Token, TemplateValue.For(LENGTH, _length));\n            }\n        }\n\n\t\tpublic override bool Equals(object obj)\n\t\t{\n\t\t\tif (ReferenceEquals(null, obj)) return false;\n\t\t\tif (ReferenceEquals(this, obj)) return true;\n\t\t\tif (obj.GetType() != GetType()) return false;\n\t\t\treturn Equals((CollectionLengthRule)obj);\n\t\t}\n\n\t\tprotected bool Equals(CollectionLengthRule other)\n\t\t{\n\t\t\treturn _length == other._length && Token.Equals(other.Token);\n\t\t}\n\n\t\tpublic override int GetHashCode()\n\t\t{\n\t\t\tunchecked\n\t\t\t{\n\t\t\t\treturn (_length * 397) ^ Token.GetHashCode();\n\t\t\t}\n\t\t}\n\n\t    public void Describe(Description description)\n\t    {\n\t\t    description.ShortDescription = \"Length: {0}; Message: {1}\".ToFormat(_length, Token);\n\t    }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/ConditionalFieldRule.cs",
    "content": "﻿using FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    [IgnoreClientLocalization]\n    public class ConditionalFieldRule<T> : IFieldValidationRule, DescribesItself\n        where T : class\n    {\n        private readonly IFieldRuleCondition _condition;\n        private readonly IFieldValidationRule _inner;\n\n        public ConditionalFieldRule(IFieldRuleCondition condition, IFieldValidationRule inner)\n        {\n            _condition = condition;\n            _inner = inner;\n        }\n\n        public void Validate(Accessor accessor, ValidationContext context)\n        {\n            if(_condition.Matches(accessor, context))\n            {\n                _inner.Validate(accessor, context);\n            }\n        }\n\n        public IFieldRuleCondition Condition\n        {\n            get { return _condition; }\n        }\n\n\t    public StringToken Token\n\t    {\n\t\t\tget { return _inner.Token; }\n\t\t\tset { _inner.Token = value; }\n\t    }\n\n\t    public ValidationMode Mode\n\t    {\n\t\t    get { return _inner.Mode; }\n\t\t\tset { _inner.Mode = value; }\n\t    }\n\n        public IFieldValidationRule Inner\n        {\n            get { return _inner; }\n        }\n\n        public void Describe(Description description)\n        {\n            description.AddChild(\"If\", Condition);\n            description.AddChild(\"Then\", Inner);\n        }\n\n        public bool Equals(ConditionalFieldRule<T> other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return Equals(other._inner, _inner);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (ConditionalFieldRule<T>)) return false;\n            return Equals((ConditionalFieldRule<T>) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return _inner.GetHashCode();\n        }\n\n        public static bool operator ==(ConditionalFieldRule<T> left, ConditionalFieldRule<T> right)\n        {\n            return Equals(left, right);\n        }\n\n        public static bool operator !=(ConditionalFieldRule<T> left, ConditionalFieldRule<T> right)\n        {\n            return !Equals(left, right);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/ContinuationFieldRule.cs",
    "content": "using FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public class ContinuationFieldRule : IFieldValidationRule\n    {\n\t    public StringToken Token { get; set; }\n\n\t\tpublic ValidationMode Mode { get; set; }\n\n\t    public void Validate(Accessor accessor, ValidationContext context)\n        {\n            context.ContinueValidation(accessor);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/EmailFieldRule.cs",
    "content": "﻿using System.Text.RegularExpressions;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public class EmailFieldRule : IFieldValidationRule, DescribesItself\n    {\n\t    private static readonly Regex EmailExpression = new Regex(@\"^(?:[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`\\{\\|\\}\\~]+\\.)*[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`\\{\\|\\}\\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!\\.)){0,61}[a-zA-Z0-9]?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\\[(?:(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\.){3}(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\]))$\", RegexOptions.Compiled);\n\n\t    public EmailFieldRule()\n\t\t\t: this(ValidationKeys.Email)\n\t    {\n\t    }\n\n\t    public EmailFieldRule(StringToken token)\n\t    {\n\t\t    Token = token;\n\t    }\n\n\t    public StringToken Token { get; set; }\n\n\t\tpublic ValidationMode Mode { get; set; }\n\n        public void Validate(Accessor accessor, ValidationContext context)\n        {\n            var email = context.GetFieldValue<string>(accessor);\n\n\t         if(email.IsEmpty()) return;\n\n            if(!EmailExpression.IsMatch(email))\n            {\n                context.Notification.RegisterMessage(accessor, Token);\n            }\n        }\n\n\t\tpublic override bool Equals(object obj)\n\t\t{\n\t\t\tif (ReferenceEquals(null, obj)) return false;\n\t\t\tif (ReferenceEquals(this, obj)) return true;\n\t\t\tif (obj.GetType() != GetType()) return false;\n\t\t\treturn Equals((EmailFieldRule)obj);\n\t\t}\n\n\t\tprotected bool Equals(EmailFieldRule other)\n\t\t{\n\t\t\treturn Token.Equals(other.Token);\n\t\t}\n\n\t\tpublic override int GetHashCode()\n\t\t{\n\t\t\treturn Token.GetHashCode();\n\t\t}\n\n\t    public void Describe(Description description)\n\t    {\n\t\t    description.ShortDescription = Token.ToString();\n\t    }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/FieldRuleSource.cs",
    "content": "using System;\nusing System.Collections.Generic;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public class FieldRuleSource : IValidationSource\n    {\n        private readonly IFieldRulesRegistry _registry;\n\n        public FieldRuleSource(IFieldRulesRegistry registry)\n        {\n            _registry = registry;\n        }\n\n        public IEnumerable<IValidationRule> RulesFor(Type type)\n        {\n            yield return _registry.RulesFor(type);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/FieldRulesRegistry.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing FubuCore.Reflection;\nusing FubuCore.Util;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public class FieldRulesRegistry : IFieldRulesRegistry\n    {\n        private readonly IList<IFieldValidationSource> _sources = new List<IFieldValidationSource>();\n        private readonly ITypeDescriptorCache _properties;\n\n        private readonly Cache<Type, ClassFieldValidationRules> _typeRules = new Cache<Type, ClassFieldValidationRules>();\n\n        private FieldRulesRegistry(ITypeDescriptorCache properties)\n        {\n            _properties = properties;\n            _typeRules.OnMissing = findRules;\n        }\n\n        public FieldRulesRegistry(IEnumerable<IFieldValidationSource> sources, ITypeDescriptorCache properties)\n        {\n            _sources.Fill(new AttributeFieldValidationSource());\n            _sources.Fill(sources);\n\n            _properties = properties;\n            _typeRules.OnMissing = findRules;\n        }\n\n        private ClassFieldValidationRules findRules(Type type)\n        {\n            var classRules = new ClassFieldValidationRules();\n\n            _properties.ForEachProperty(type, property =>\n            {\n                var accessor = new SingleProperty(property);\n                var rules = _sources.SelectMany(x => x.RulesFor(property)).Distinct();\n                classRules.AddRules(accessor, rules);\n            });\n\n            return classRules;\n        }\n\n\t    public void FindWith(IFieldValidationSource source)\n\t    {\n\t\t    _sources.Fill(source);\n\t    }\n\n\t    public ClassFieldValidationRules RulesFor<T>()\n        {\n            return _typeRules[typeof (T)];\n        }\n\n        public ClassFieldValidationRules RulesFor(Type type)\n        {\n            return _typeRules[type];\n        }\n\n        public bool HasRule<T>(Accessor accessor) where T : IFieldValidationRule\n        {\n            return RulesFor(accessor.OwnerType).HasRule<T>(accessor);\n        }\n\n        public void ForRule<T>(Accessor accessor, Action<T> continuation) where T : IFieldValidationRule\n        {\n            RulesFor(accessor.OwnerType).ForRule<T>(accessor, continuation);\n        }\n\n        public void Register(Type type, Accessor accessor, IFieldValidationRule rule)\n        {\n            RulesFor(type).AddRule(accessor, rule);\n        }\n\n        /// <summary>\n        /// Convenience method to quickly examine all the validation rules\n        /// for a given type and accessor\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"expression\"></param>\n        /// <returns></returns>\n        public IEnumerable<IFieldValidationRule> RulesFor<T>(Expression<Func<T, object>> expression)\n        {\n            return RulesFor<T>().RulesFor(expression.ToAccessor());\n        }\n\n        public static FieldRulesRegistry BasicRegistry()\n        {\n            return new FieldRulesRegistry(new IFieldValidationSource[0], new TypeDescriptorCache());\n        }\n\n        /// <summary>\n        /// Mostly used for testing to avoid the default setup and start with an empty slate.\n        /// </summary>\n        /// <param name=\"sources\"></param>\n        /// <returns></returns>\n        public static FieldRulesRegistry Explicit(IEnumerable<IFieldValidationSource> sources)\n        {\n            var registry = new FieldRulesRegistry(new TypeDescriptorCache());\n            registry._sources.Fill(sources);\n\n            return registry;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/FieldValidationAttribute.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Reflection;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    [AttributeUsage(AttributeTargets.Property, AllowMultiple = true, Inherited = true)]\n    public abstract class FieldValidationAttribute : Attribute, IFieldValidationSource\n    {\n        public abstract IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property);\n\n        public void AssertIsValid()\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/FieldValidationRuleExtensions.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public static class FieldValidationRuleExtensions\n    {\n        public static Notification ValidateProperty<T>(this IFieldValidationRule rule, T target,\n                                               Expression<Func<T, object>> property)\n        {\n            var notification = new Notification(typeof (T));\n            var accessor = property.ToAccessor();\n            var context = new ValidationContext(null, notification, target);\n\n            rule.Validate(accessor, context);\n\n            return notification;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/GreaterOrEqualToZeroRule.cs",
    "content": "﻿using System;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public class GreaterOrEqualToZeroRule : IFieldValidationRule, DescribesItself\n    {\n\t    public GreaterOrEqualToZeroRule()\n\t\t\t: this(ValidationKeys.GreaterThanOrEqualToZero)\n\t    {\n\t    }\n\n\t    public GreaterOrEqualToZeroRule(StringToken token)\n\t    {\n\t\t    Token = token;\n\t    }\n\n\t    public StringToken Token { get; set; }\n\n\t\tpublic ValidationMode Mode { get; set; }\n\n        public void Validate(Accessor accessor, ValidationContext context)\n        {\n            var rawValue = accessor.GetValue(context.Target);\n            if (rawValue != null)\n            {\n                var value = Convert.ToDouble(rawValue);\n                if (value < 0)\n                {\n                    context.Notification.RegisterMessage(accessor, Token);\n                }\n            }\n        }\n\n        public bool Equals(GreaterOrEqualToZeroRule other)\n        {\n\t        return Token.Equals(other.Token);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (GreaterOrEqualToZeroRule)) return false;\n            return Equals((GreaterOrEqualToZeroRule) obj);\n        }\n\n        public override int GetHashCode()\n        {\n\t        return Token.GetHashCode();\n        }\n\n\t    public void Describe(Description description)\n\t    {\n\t\t    description.ShortDescription = Token.ToString();\n\t    }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/GreaterThanZeroRule.cs",
    "content": "﻿using System;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public class GreaterThanZeroRule : IFieldValidationRule, DescribesItself\n    {\n\t    public GreaterThanZeroRule()\n\t\t\t: this(ValidationKeys.GreaterThanZero)\n\t    {\n\t    }\n\n\t    public GreaterThanZeroRule(StringToken token)\n\t    {\n\t\t    Token = token;\n\t    }\n\n\t    public StringToken Token { get; set; }\n\n\t\tpublic ValidationMode Mode { get; set; }\n\n        public void Validate(Accessor accessor, ValidationContext context)\n        {\n            var rawValue = accessor.GetValue(context.Target);\n            if (rawValue == null) return;\n\n            var value = Convert.ToDecimal(rawValue);\n            if (value <= 0)\n            {\n                context.Notification.RegisterMessage(accessor, Token);\n            }\n        }\n\n        public bool Equals(GreaterThanZeroRule other)\n        {\n\t        return Token.Equals(other.Token);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (GreaterThanZeroRule)) return false;\n            return Equals((GreaterThanZeroRule) obj);\n        }\n\n        public override int GetHashCode()\n        {\n\t        return Token.GetHashCode();\n        }\n\n\t    public void Describe(Description description)\n\t    {\n\t\t    description.ShortDescription = Token.ToString();\n\t    }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/IFieldRuleCondition.cs",
    "content": "﻿using System;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public interface IFieldRuleCondition\n    {\n        bool Matches(Accessor accessor, ValidationContext context);\n    }\n\n    public static class FieldRuleCondition\n    {\n        public static LambdaFieldRuleCondition<T> For<T>(Func<T, bool> condition) where T : class\n        {\n            return new LambdaFieldRuleCondition<T>(condition);\n        }\n\n        public static LambdaFieldRuleCondition<T> For<T>(Func<T, ValidationContext, bool> condition) where T : class\n        {\n            return new LambdaFieldRuleCondition<T>(condition);\n        }\n    }\n\n    public class LambdaFieldRuleCondition<T> : IFieldRuleCondition where T : class\n    {\n        private readonly Func<T, ValidationContext, bool> _condition;\n\n        public LambdaFieldRuleCondition(Func<T, bool> condition)\n            : this((target, context) => condition(target))\n        {\n        }\n\n        public LambdaFieldRuleCondition(Func<T, ValidationContext, bool> condition)\n        {\n            _condition = condition;\n        }\n\n        public bool Matches(Accessor accessor, ValidationContext context)\n        {\n            var target = context.Target as T;\n            return target != null && _condition(target, context);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/IFieldRulesRegistry.cs",
    "content": "﻿using System;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n\t// SAMPLE: IFieldRulesRegistry\n    public interface IFieldRulesRegistry\n    {\n        bool HasRule<T>(Accessor accessor) where T : IFieldValidationRule;\n        void ForRule<T>(Accessor accessor, Action<T> continuation) where T : IFieldValidationRule;\n\n        void Register(Type type, Accessor accessor, IFieldValidationRule rule);\n\n\t    void FindWith(IFieldValidationSource source);\n\n        ClassFieldValidationRules RulesFor<T>();\n        ClassFieldValidationRules RulesFor(Type type);\n    }\n\t// ENDSAMPLE\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/IFieldValidationQuery.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public interface IFieldValidationQuery\n    {\n        IEnumerable<IFieldValidationRule> RulesFor<T>(Expression<Func<T, object>> property);\n        IEnumerable<IFieldValidationRule> RulesFor(Type type, Accessor accessor);\n        bool HasRule<T>(Type type, Accessor accessor) where T : IFieldValidationRule;\n        void ForRule<T>(Type type, Accessor accessor, Action<T> continuation) where T : IFieldValidationRule;\n    }\n\n    public class FieldValidationQuery : IFieldValidationQuery\n    {\n        private readonly IFieldRulesRegistry _registry;\n\n        public FieldValidationQuery(IFieldRulesRegistry registry)\n        {\n            _registry = registry;\n        }\n\n        public IEnumerable<IFieldValidationRule> RulesFor<T>(Expression<Func<T, object>> property)\n        {\n            return RulesFor(typeof(T), property.ToAccessor());\n        }\n\n        public IEnumerable<IFieldValidationRule> RulesFor(Type type, Accessor accessor)\n        {\n            var chain = accessor as PropertyChain;\n            if (chain == null)\n            {\n                return _registry.RulesFor(type).RulesFor(accessor);\n            }\n\n            if(chainHasValidationContinuedProperties(chain))\n            {\n                var prop = chain.InnerProperty;\n                return _registry.RulesFor(prop.ReflectedType).RulesFor(new SingleProperty(prop));\n            }\n\n            return new IFieldValidationRule[0];\n        }\n\n        private bool chainHasValidationContinuedProperties(PropertyChain chain)\n        {\n            if (chain.ValueGetters.Any(x => !(x is PropertyValueGetter))) return false;\n\n            var propertyValueGetters = chain.ValueGetters.OfType<PropertyValueGetter>().Reverse().Skip(1).Reverse();\n\n            return propertyValueGetters.All(x => {\n                var accessor = new SingleProperty(x.PropertyInfo);\n                return HasRule<ContinuationFieldRule>(accessor.DeclaringType, accessor);\n            });\n        }\n\n        public bool HasRule<T>(Type type, Accessor accessor) where T : IFieldValidationRule\n        {\n            return getRules<T>(type, accessor).Any();\n        }\n\n        public void ForRule<T>(Type type, Accessor accessor, Action<T> continuation) where T : IFieldValidationRule\n        {\n            getRules<T>(type, accessor)\n                .Each(continuation);\n        }\n\n        private IEnumerable<T> getRules<T>(Type type, Accessor accessor)\n            where T : IFieldValidationRule\n        {\n            return RulesFor(type, accessor)\n                .OfType<T>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/IFieldValidationRule.cs",
    "content": "﻿using FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n\t// SAMPLE: IFieldValidationRule\n\tpublic interface IFieldValidationRule\n\t{\n\t\tStringToken Token { get; set; }\n\n\t\t// This really only matters for UI purposes but it needs to be a first-class citizen\n\t\tValidationMode Mode { get; set; }\n\n\t\tvoid Validate(Accessor accessor, ValidationContext context);\n\t}\n\t// ENDSAMPLE\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/IFieldValidationSource.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Reflection;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public interface IFieldValidationSource\n    {\n        IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property);\n        void AssertIsValid();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/IgnoreClientLocalizationAttribute.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    /// <summary>\n    /// Marks an <see cref=\"IFieldValidationRule\"/> to be ignored for client-side localization attributes.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]\n    public class IgnoreClientLocalizationAttribute : Attribute\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/IsValid.cs",
    "content": "﻿using System.Linq;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public class IsValid : IFieldRuleCondition\n    {\n        public bool Matches(Accessor accessor, ValidationContext context)\n        {\n            return !context.Notification.MessagesFor(accessor).Any();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/LambdaFieldValidationSource.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Reflection;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public class LambdaFieldValidationSource : IFieldValidationSource\n    {\n        private readonly Func<PropertyInfo, IFieldValidationRule> _ruleSource;\n        private Func<PropertyInfo, bool> _filter;\n\n        public LambdaFieldValidationSource(IFieldValidationRule rule)\n        {\n            _ruleSource = prop => rule;\n        }\n\n        public LambdaFieldValidationSource(Func<PropertyInfo, IFieldValidationRule> ruleSource)\n        {\n            _ruleSource = ruleSource;\n        }\n\n        IEnumerable<IFieldValidationRule> IFieldValidationSource.RulesFor(PropertyInfo property)\n        {\n            if (!_filter(property))\n            {\n                yield break;\n            }\n\n            yield return _ruleSource(property);\n        }\n\n        void IFieldValidationSource.AssertIsValid()\n        {\n            if (_filter == null) throw new FubuValidationException(\"Missing filter on validation convention\");\n        }\n\n        public void If(Func<PropertyInfo, bool> filter)\n        {\n            _filter = filter;\n        }\n\n        public void IfPropertyType<T>()\n        {\n            If(prop => prop.PropertyType == typeof (T));\n        }\n\n        public void IfPropertyType(Func<Type, bool> filter)\n        {\n            If(prop => filter(prop.PropertyType));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/MaxValueFieldRule.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public class MaxValueFieldRule : IFieldValidationRule, DescribesItself\n    {\n        private readonly IComparable _bounds;\n\n        public MaxValueFieldRule(IComparable bounds)\n            : this(bounds, ValidationKeys.MaxValue)\n        {\n        }\n\n        public MaxValueFieldRule(IComparable bounds, StringToken token)\n        {\n            _bounds = bounds;\n            Token = token;\n        }\n\n        public StringToken Token { get; set; }\n\n        public ValidationMode Mode { get; set; }\n\n        public IComparable Bounds { get { return _bounds; } }\n\n        public void Validate(Accessor accessor, ValidationContext context)\n        {\n            var value = accessor.GetValue(context.Target);\n            if (_bounds.CompareTo(value) < 0)\n            {\n                context.Notification.RegisterMessage(accessor, Token, TemplateValue.For(\"bounds\", _bounds));\n            }\n        }\n\n        protected bool Equals(MaxValueFieldRule other)\n        {\n            return _bounds.Equals(other._bounds) && Token.Equals(other.Token);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != GetType()) return false;\n            return Equals((MaxValueFieldRule)obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return (_bounds.GetHashCode() * 397) ^ Token.GetHashCode();\n            }\n        }\n\n        public void Describe(Description description)\n        {\n            description.ShortDescription = \"Bounds: {0}; Message: {1}\".ToFormat(_bounds, Token);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/MaximumLengthRule.cs",
    "content": "﻿using FubuCore;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public class MaximumLengthRule : IFieldValidationRule, DescribesItself\n    {\n        public static readonly string LENGTH = \"length\";\n        private readonly int _length;\n\n        public MaximumLengthRule(int length)\n\t\t\t: this(length, ValidationKeys.MaxLength)\n        {\n        }\n\n\t    public MaximumLengthRule(int length, StringToken token)\n\t    {\n\t\t    _length = length;\n\n\t\t    Token = token;\n\t    }\n\n\t    public StringToken Token { get; set; }\n\n\t\tpublic ValidationMode Mode { get; set; }\n\n        public int Length\n        {\n            get { return _length; }\n        }\n\n        public void Validate(Accessor accessor, ValidationContext context)\n        {\n            var rawValue = accessor.GetValue(context.Target);\n            if (rawValue != null && rawValue.ToString().Length > Length)\n            {\n                context.Notification.RegisterMessage(accessor, Token, TemplateValue.For(LENGTH, _length));\n            }\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (MaximumLengthRule)) return false;\n            return Equals((MaximumLengthRule) obj);\n        }\n\n\t\tprotected bool Equals(MaximumLengthRule other)\n\t\t{\n\t\t\treturn _length.Equals(other._length) && Token.Equals(other.Token);\n\t\t}\n\n        public override int GetHashCode()\n        {\n\t\t\tunchecked\n\t\t\t{\n\t\t\t\treturn (_length * 397) ^ Token.GetHashCode();\n\t\t\t}\n        }\n\n\t    public void Describe(Description description)\n\t    {\n\t\t\tdescription.ShortDescription = \"Length: {0}; Message: {1}\".ToFormat(_length, Token);\n\t    }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/MinValueFieldRule.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public class MinValueFieldRule : IFieldValidationRule\n    {\n        private readonly IComparable _bounds;\n\n        public MinValueFieldRule(IComparable bounds)\n\t\t\t: this(bounds, ValidationKeys.MinValue)\n        {\n        }\n\n\t\tpublic MinValueFieldRule(IComparable bounds, StringToken token)\n\t    {\n\t\t    _bounds = bounds;\n\t\t    Token = token;\n\t    }\n\n\t    public StringToken Token { get; set; }\n\n\t\tpublic ValidationMode Mode { get; set; }\n\n        public IComparable Bounds { get { return _bounds; }}\n\n        public void Validate(Accessor accessor, ValidationContext context)\n        {\n            var value = accessor.GetValue(context.Target);\n            if(_bounds.CompareTo(value) > 0)\n            {\n                context.Notification.RegisterMessage(accessor, Token, TemplateValue.For(\"bounds\", _bounds));\n            }\n        }\n\n\t\tprotected bool Equals(MinValueFieldRule other)\n\t\t{\n\t\t\treturn _bounds.Equals(other._bounds) && Token.Equals(other.Token);\n\t\t}\n\n\t\tpublic override bool Equals(object obj)\n\t\t{\n\t\t\tif (ReferenceEquals(null, obj)) return false;\n\t\t\tif (ReferenceEquals(this, obj)) return true;\n\t\t\tif (obj.GetType() != GetType()) return false;\n\t\t\treturn Equals((MinValueFieldRule)obj);\n\t\t}\n\n\t\tpublic override int GetHashCode()\n\t\t{\n\t\t\tunchecked\n\t\t\t{\n\t\t\t\treturn (_bounds.GetHashCode() * 397) ^ Token.GetHashCode();\n\t\t\t}\n\t\t}\n\n\t\tpublic void Describe(Description description)\n\t\t{\n\t\t\tdescription.ShortDescription = \"Bounds: {0}; Message: {1}\".ToFormat(_bounds, Token);\n\t\t}\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/MinimumLengthRule.cs",
    "content": "using FubuCore;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public class MinimumLengthRule : IFieldValidationRule, DescribesItself\n    {\n\t    public static readonly string LENGTH = \"length\";\n        private readonly int _length;\n\n        public MinimumLengthRule(int length)\n\t\t\t: this(length, ValidationKeys.MinLength)\n        {\n        }\n\n\t    public MinimumLengthRule(int length, StringToken token)\n\t    {\n\t\t    _length = length;\n\n\t\t    Token = token;\n\t    }\n\n\t    public StringToken Token { get; set; }\n\n\t\tpublic ValidationMode Mode { get; set; }\n\n        public int Length\n        {\n            get { return _length; }\n        }\n\n        public void Validate(Accessor accessor, ValidationContext context)\n        {\n            var value = context.GetFieldValue<string>(accessor);\n            if (value != null && value.Length < Length)\n            {\n                context.Notification.RegisterMessage(accessor, Token, TemplateValue.For(LENGTH, _length));\n            }\n        }\n\n\t\tprotected bool Equals(MinimumLengthRule other)\n\t\t{\n\t\t\treturn _length == other._length && Token.Equals(other.Token);\n\t\t}\n\n\t\tpublic override bool Equals(object obj)\n\t\t{\n\t\t\tif (ReferenceEquals(null, obj)) return false;\n\t\t\tif (ReferenceEquals(this, obj)) return true;\n\t\t\tif (obj.GetType() != GetType()) return false;\n\t\t\treturn Equals((MinimumLengthRule)obj);\n\t\t}\n\n\t\tpublic override int GetHashCode()\n\t\t{\n\t\t\tunchecked\n\t\t\t{\n\t\t\t\treturn (_length * 397) ^ Token.GetHashCode();\n\t\t\t}\n\t\t}\n\n\t    public void Describe(Description description)\n\t    {\n\t\t\tdescription.ShortDescription = \"Length: {0}; Message: {1}\".ToFormat(_length, Token);\n\t    }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/RangeLengthFieldRule.cs",
    "content": "using System.Collections.Generic;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public class RangeLengthFieldRule : IFieldValidationRule, DescribesItself\n    {\n\t    private readonly int _min;\n        private readonly int _max;\n\n        public RangeLengthFieldRule(int min, int max)\n\t\t\t: this(min, max, ValidationKeys.RangeLength)\n        {\n        }\n\n\t    public RangeLengthFieldRule(int min, int max, StringToken token)\n\t    {\n\t\t    _min = min;\n\t\t    _max = max;\n\t\t    Token = token;\n\t    }\n\n\t    public StringToken Token { get; set; }\n\n\t\tpublic ValidationMode Mode { get; set; }\n\n        public void Validate(Accessor accessor, ValidationContext context)\n        {\n            var value = context.GetFieldValue<string>(accessor) ?? string.Empty;\n            var length = value.Length;\n\n            if(length < _min || length > _max)\n            {\n                var min = TemplateValue.For(\"min\", _min);\n                var max = TemplateValue.For(\"max\", _max);\n\n                context.Notification.RegisterMessage(accessor, Token, min, max);\n            }\n        }\n\n        public IDictionary<string, object> ToValues()\n        {\n            return new Dictionary<string, object>\n                   {\n                       { \"min\", _min }, { \"max\", _max }\n                   };\n        }\n\n\t\tprotected bool Equals(RangeLengthFieldRule other)\n\t\t{\n\t\t\treturn _min == other._min && _max == other._max && Token.Equals(other.Token);\n\t\t}\n\n\t\tpublic override bool Equals(object obj)\n\t\t{\n\t\t\tif (ReferenceEquals(null, obj)) return false;\n\t\t\tif (ReferenceEquals(this, obj)) return true;\n\t\t\tif (obj.GetType() != GetType()) return false;\n\t\t\treturn Equals((RangeLengthFieldRule)obj);\n\t\t}\n\n\t\tpublic override int GetHashCode()\n\t\t{\n\t\t\tunchecked\n\t\t\t{\n\t\t\t\tint hashCode = _min;\n\t\t\t\thashCode = (hashCode * 397) ^ _max;\n\t\t\t\thashCode = (hashCode * 397) ^ Token.GetHashCode();\n\t\t\t\treturn hashCode;\n\t\t\t}\n\t\t}\n\n\t    public void Describe(Description description)\n\t    {\n\t\t    description.ShortDescription = \"Min: {0}; Max: {1}; Message: {2}\".ToFormat(_min, _max, Token);\n\t    }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/RegularExpressionFieldRule.cs",
    "content": "﻿using System.Text.RegularExpressions;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n\tpublic class RegularExpressionFieldRule : IFieldValidationRule\n\t{\n\t\tpublic RegularExpressionFieldRule(string expression)\n\t\t\t: this(expression, ValidationKeys.RegEx)\n\t\t{\n\t\t}\n\n\t\tpublic RegularExpressionFieldRule(string expression, StringToken token)\n\t\t{\n\t\t\tExpression = new Regex(expression);\n\t\t\tToken = token;\n\t\t}\n\n\t\tpublic Regex Expression { get; private set; }\n\t\tpublic StringToken Token { get; set; }\n\t\tpublic ValidationMode Mode { get; set; }\n\n\t\tpublic void Validate(Accessor accessor, ValidationContext context)\n\t\t{\n\t\t\tvar value = context.GetFieldValue<string>(accessor);\n\t\t\tif (value.IsEmpty())\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!Expression.IsMatch(value))\n\t\t\t{\n\t\t\t\tcontext.Notification.RegisterMessage(accessor, Token);\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Fields/RequiredFieldRule.cs",
    "content": "﻿using FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation.Fields\n{\n    public class RequiredFieldRule : IFieldValidationRule, DescribesItself\n    {\n\t    public RequiredFieldRule()\n\t\t\t: this(ValidationKeys.Required)\n\t    {\n\t    }\n\n\t    public RequiredFieldRule(StringToken token)\n\t    {\n\t\t    Token = token;\n\t    }\n\n\t\tpublic StringToken Token { get; set; }\n\n\t\tpublic ValidationMode Mode { get; set; }\n\n        public void Validate(Accessor accessor, ValidationContext context)\n        {\n            var rawValue = accessor.GetValue(context.Target);\n\n            if (rawValue == null || string.Empty.Equals(rawValue))\n            {\n                context.Notification.RegisterMessage(accessor, Token);\n            }\n        }\n\n        public bool Equals(RequiredFieldRule other)\n        {\n            return Token.Equals(other.Token);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (RequiredFieldRule)) return false;\n            return Equals((RequiredFieldRule) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return Token.GetHashCode();\n        }\n\n\t    public void Describe(Description description)\n\t    {\n\t\t    description.ShortDescription = Token.ToString();\n\t    }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/FubuValidationException.cs",
    "content": "using System;\nusing System.Runtime.Serialization;\n\nnamespace FubuMVC.Core.Validation\n{\n    [Serializable]\n    public class FubuValidationException : Exception\n    {\n        public FubuValidationException()\n        {\n        }\n\n        public FubuValidationException(string message) : base(message)\n        {\n        }\n\n        public FubuValidationException(string message, Exception innerException) : base(message, innerException)\n        {\n        }\n\n        protected FubuValidationException(SerializationInfo info, StreamingContext context) : base(info, context)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/GreaterOrEqualToZeroAttribute.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Reflection;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class GreaterOrEqualToZeroAttribute : FieldValidationAttribute\n    {\n        public override IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property)\n        {\n            yield return new GreaterOrEqualToZeroRule();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/GreaterThanZeroAttribute.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Reflection;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class GreaterThanZeroAttribute : FieldValidationAttribute\n    {\n        public override IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property)\n        {\n            yield return new GreaterThanZeroRule();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/IValidated.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Validation\n{\n\t// SAMPLE: IValidated\n    public interface IValidated\n    {\n        void Validate(ValidationContext context);\n    }\n\t// ENDSAMPLE\n\n    public class SelfValidatingClassRule : IValidationRule\n    {\n        private readonly Type _type;\n\n        public SelfValidatingClassRule(Type type)\n        {\n            _type = type;\n        }\n\n        public void Validate(ValidationContext context)\n        {\n            context.Target.As<IValidated>().Validate(context);\n        }\n\n        public override bool Equals(object obj)\n        {\n            var rule = obj as SelfValidatingClassRule;\n            if (rule == null) return false;\n\n            return Equals(rule);\n        }\n\n        public override string ToString()\n        {\n            return \"Self Validating Rule: {0}.Validate\".ToFormat(_type.Name);\n        }\n\n        public bool Equals(SelfValidatingClassRule other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return other._type == _type;\n        }\n\n        public override int GetHashCode()\n        {\n            return (_type != null ? _type.GetHashCode() : 0);\n        }\n    }\n\n\t// SAMPLE: SelfValidatingClassRuleSource\n    public class SelfValidatingClassRuleSource : IValidationSource\n    {\n        public IEnumerable<IValidationRule> RulesFor(Type type)\n        {\n            if (type.CanBeCastTo<IValidated>())\n            {\n                yield return new SelfValidatingClassRule(type);\n            }\n        }\n\n        public override bool Equals(object obj)\n        {\n            return obj is SelfValidatingClassRuleSource;\n        }\n    }\n\t// ENDSAMPLE\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/IValidationRegistration.cs",
    "content": "namespace FubuMVC.Core.Validation\n{\n    public interface IValidationRegistration\n    {\n        void Register(ValidationGraph graph);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/IValidationRule.cs",
    "content": "namespace FubuMVC.Core.Validation\n{\n\t// SAMPLE: IValidationRule\n    public interface IValidationRule\n    {\n        void Validate(ValidationContext context);\n    }\n\t// ENDSAMPLE\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/IValidationSource.cs",
    "content": "using System;\nusing System.Collections.Generic;\n\nnamespace FubuMVC.Core.Validation\n{\n\t// SAMPLE: IValidationSource\n    public interface IValidationSource\n    {\n        IEnumerable<IValidationRule> RulesFor(Type type);\n    }\n\t// ENDSAMPLE\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/IValidator.cs",
    "content": "namespace FubuMVC.Core.Validation\n{\n\t// SAMPLE: IValidator\n    public interface IValidator\n    {\n        Notification Validate(object target);\n        void Validate(object target, Notification notification);\n\n        ValidationContext ContextFor(object target, Notification notification);\n    }\n\t// ENDSAMPLE\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/MaxValueAttribute.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Reflection;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class MaxValueAttribute : FieldValidationAttribute\n    {\n        private readonly IComparable _bounds;\n\n        public MaxValueAttribute(int bounds)\n        {\n            _bounds = bounds;\n        }\n\n        public MaxValueAttribute(double bounds)\n        {\n            _bounds = bounds;\n        }\n\n        public MaxValueAttribute(decimal bounds)\n        {\n            _bounds = bounds;\n        }\n\n        public MaxValueAttribute(float bounds)\n        {\n            _bounds = bounds;\n        }\n\n        public override IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property)\n        {\n            yield return new MaxValueFieldRule(_bounds);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/MaximumStringLengthAttribute.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Reflection;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class MaximumStringLengthAttribute : FieldValidationAttribute\n    {\n        private readonly int _length;\n\n        public MaximumStringLengthAttribute(int length)\n        {\n            _length = length;\n        }\n\n        public int Length\n        {\n            get { return _length; }\n        }\n\n        public override IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property)\n        {\n            yield return new MaximumLengthRule(_length);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/MinValueAttribute.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Reflection;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class MinValueAttribute : FieldValidationAttribute\n    {\n        private readonly IComparable _bounds;\n\n        public MinValueAttribute(int bounds)\n        {\n            _bounds = bounds;\n        }\n\n        public MinValueAttribute(double bounds)\n        {\n            _bounds = bounds;\n        }\n\n        public MinValueAttribute(decimal bounds)\n        {\n            _bounds = bounds;\n        }\n\n        public MinValueAttribute(float bounds)\n        {\n            _bounds = bounds;\n        }\n\n        public override IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property)\n        {\n            yield return new MinValueFieldRule(_bounds);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/MinimumStringLengthAttribute.cs",
    "content": "using System.Collections.Generic;\nusing System.Reflection;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class MinimumStringLengthAttribute : FieldValidationAttribute\n    {\n        private readonly int _length;\n\n        public MinimumStringLengthAttribute(int length)\n        {\n            _length = length;\n        }\n\n        public int Length\n        {\n            get { return _length; }\n        }\n\n        public override IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property)\n        {\n            yield return new MinimumLengthRule(_length);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Notification.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation\n{\n    [Serializable]\n    public class Notification\n    {\n        private readonly IList<NotificationMessage> _messages = new List<NotificationMessage>();\n        public const string FIELD = \"field\";\n\n        public Notification()\n        {\n        }\n\n        public Notification(Type targetType)\n            : this()\n        {\n            TargetType = targetType;\n        }\n\n        public ValidationError[] ToValidationErrors()\n        {\n            return AllMessages.SelectMany(x => x.ToValidationErrors()).ToArray();\n        }\n\n        public Type TargetType { get; private set; }\n\n        public IEnumerable<NotificationMessage> AllMessages\n        {\n            get { return _messages; }\n        }\n\n        public NotificationMessage RegisterMessage<T>(Expression<Func<T, object>> property, StringToken message, params TemplateValue[] values)\n        {\n            return RegisterMessage(property.ToAccessor(), message, values);\n        }\n\n        public NotificationMessage RegisterMessage(Accessor accessor, StringToken notificationMessage, params TemplateValue[] values)\n        {\n            var message = new NotificationMessage(notificationMessage, values);\n            RegisterMessage(accessor, message);\n\n            return message;\n        }\n\n        public NotificationMessage RegisterMessage(PropertyInfo property, StringToken notificationMessage, params TemplateValue[] values)\n        {\n            return RegisterMessage(new SingleProperty(property), notificationMessage, values);\n        }\n\n        public void RegisterMessage<T>(Expression<Func<T, object>> property, string message)\n        {\n            var notificationMessage = new NotificationMessage(message);\n            var accessor = property.ToAccessor();\n            notificationMessage.AddAccessor(accessor);\n            _messages.Fill(notificationMessage);\n        }\n\n        public void RegisterMessage(Accessor accessor, NotificationMessage notificationMessage)\n        {\n            notificationMessage.AddAccessor(accessor);\n            notificationMessage.AddSubstitution(TemplateValue.For(FIELD, LocalizationManager.GetText(accessor.InnerProperty)));\n            \n            _messages.Fill(notificationMessage);\n        }\n\n        public void AddChild(Accessor accessor, Notification childNotification)\n        {\n            _messages.AddRange(childNotification.AllMessages.Select(x => x.Prepend(accessor)));\n        }\n\n        public IEnumerable<NotificationMessage> MessagesFor(Accessor accessor)\n        {\n            return _messages.Where(x => x.Accessors.Contains(accessor));\n        }\n\n        public IEnumerable<NotificationMessage> MessagesFor<T>(Expression<Func<T, object>> property)\n        {\n            return MessagesFor(property.ToAccessor());\n        }\n\n        public bool IsValid()\n        {\n            return !AllMessages.Any();\n        }\n\n        public static Notification Valid()\n        {\n            return new Notification();\n        }\n\n        public static Notification Invalid()\n        {\n            var notification = new Notification();\n            notification.RegisterMessage(ValidationKeys.Required);\n\n            return notification;\n        }\n\n\n        public void RegisterMessage(NotificationMessage message)\n        {\n            _messages.Add(message);\n        }\n\n        public NotificationMessage RegisterMessage(StringToken stringToken)\n        {\n            var message = new NotificationMessage(stringToken);\n            RegisterMessage(message);\n\n            return message;\n        }\n\n        public NotificationMessage RegisterMessage(string text)\n        {\n            var message = new NotificationMessage(text);\n            RegisterMessage(message);\n\n            return message;\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/NotificationMessage.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation\n{\n    [Serializable]\n    public class NotificationMessage\n    {\n        private readonly List<Accessor> _accessors = new List<Accessor>();\n        private readonly Template _template;\n        private readonly Lazy<string> _message;\n\n        public NotificationMessage(StringToken stringToken, params TemplateValue[] values)\n        {\n            StringToken = stringToken;\n\n            _template = new Template(stringToken, values);\n            _message = new Lazy<string>(() => _template.Render());\n        }\n\n        public NotificationMessage(string message)\n        {\n            _message = new Lazy<string>(() => message);\n        }\n\n        public StringToken StringToken { get; private set; }\n\n        public Accessor[] Accessors\n        {\n            get { return _accessors.ToArray(); }\n        }\n\n        public string GetMessage()\n        {\n            return _message.Value;\n        }\n\n        public void AddAccessor(Accessor accessor)\n        {\n            _accessors.Fill(accessor);\n        }\n\n        public NotificationMessage AddSubstitution(string key, string value)\n        {\n            return AddSubstitution(TemplateValue.For(key, value));\n        }\n\n        public NotificationMessage AddSubstitution(TemplateValue value)\n        {\n            if (_template == null) throw new InvalidOperationException(\"This NotificationMessage has no template\");\n\n            _template.Values.Add(value);\n            return this;\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof(NotificationMessage)) return false;\n            return Equals((NotificationMessage)obj);\n        }\n\n        public bool Equals(NotificationMessage other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n\n            return _template.Equals(other._template) && Accessors.IsEqualTo(other.Accessors);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                var result = (Accessors != null ? Accessors.GetHashCode() : 0);\n                result = (result * 397) ^ (GetMessage() != null ? GetMessage().GetHashCode() : 0);\n                return result;\n            }\n        }\n\n        public override string ToString()\n        {\n            return Accessors.Select(x => x.Name).Join(\", \") + \":  \" + GetMessage();\n        }\n\n        public NotificationMessage Prepend(Accessor accessor)\n        {\n            var prependedAccessors = _accessors.Select(x => x.Prepend(accessor)).ToList();\n            var message = new NotificationMessage(StringToken, _template.Values.ToArray());\n            message._accessors.AddRange(prependedAccessors);\n\n            return message;\n        }\n\n        public IEnumerable<ValidationError> ToValidationErrors()\n        {\n            var message = GetMessage();\n            if (_accessors.Any())\n            {\n                return _accessors.Select(a => new ValidationError(a.Name, a.ToHeader(), message));\n            }\n\n            return new[] { new ValidationError(string.Empty, message) };\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/RangeLengthAttribute.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Reflection;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class RangeLengthAttribute : FieldValidationAttribute\n    {\n        private readonly int _min;\n        private readonly int _max;\n\n        public RangeLengthAttribute(int min, int max)\n        {\n            _min = min;\n            _max = max;\n        }\n\n        public int Min\n        {\n            get { return _min; }\n        }\n\n        public override IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property)\n        {\n            yield return new RangeLengthFieldRule(_min, _max);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/RegularExpressionAttribute.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Reflection;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation\n{\n\tpublic class RegularExpressionAttribute : FieldValidationAttribute\n\t{\n\t\tpublic RegularExpressionAttribute(string expression)\n\t\t{\n\t\t\tExpression = expression;\n\t\t}\n\n\t\tpublic string Expression { get; private set; }\n\n\t\tpublic override IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property)\n\t\t{\n\t\t\tyield return new RegularExpressionFieldRule(Expression);\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/RequiredAttribute.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Reflection;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class RequiredAttribute : FieldValidationAttribute\n    {\n        public override IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property)\n        {\n            yield return new RequiredFieldRule();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/TemplateExtensions.cs",
    "content": "namespace FubuMVC.Core.Validation\n{\n    public static class TemplateExtensions\n    {\n        public static string AsTemplateField(this string value)\n        {\n            return \"{\" + value + \"}\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/TemplateValue.cs",
    "content": "﻿using System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class Template\n    {\n        private readonly StringToken _template;\n        private readonly TemplateValueCollection _values;\n\n        public Template(StringToken template, params TemplateValue[] values)\n        {\n            _template = template;\n            _values = new TemplateValueCollection(values);\n        }\n\n        public TemplateValueCollection Values { get { return _values; } }\n\n        public string Render()\n        {\n            return TemplateParser.Parse(_template, _values.ToDictionary());\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (Template)) return false;\n            return Equals((Template) obj);\n        }\n\n        public bool Equals(Template other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return Equals(other._template, _template) && Equals(other._values, _values);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return (_template.GetHashCode()*397) ^ _values.GetHashCode();\n            }\n        }\n    }\n\n    public class TemplateValue\n    {\n        private readonly string _key;\n        private readonly string _value;\n\n        public TemplateValue(string key, string value)\n        {\n            _key = key;\n            _value = value;\n        }\n\n        public string Key\n        {\n            get { return _key; }\n        }\n\n        public string Value\n        {\n            get { return _value; }\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (TemplateValue)) return false;\n            return Equals((TemplateValue) obj);\n        }\n\n        public bool Equals(TemplateValue other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return Equals(other._key, _key) && Equals(other._value, _value);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return (_key.GetHashCode()*397) ^ _value.GetHashCode();\n            }\n        }\n\n        public static TemplateValue For(string key, string value)\n        {\n            return new TemplateValue(key, value);\n        }\n\n        public static TemplateValue For(string key, object value)\n        {\n            return For(key, value.ToString());\n        }\n    }\n\n    public class TemplateValueCollection : IEnumerable<TemplateValue>\n    {\n        private readonly IList<TemplateValue> _values = new List<TemplateValue>();\n\n        public TemplateValueCollection()\n        {\n        }\n\n        public TemplateValueCollection(IEnumerable<TemplateValue> values)\n        {\n            _values.AddRange(values);\n        }\n\n        public void Add(TemplateValue value)\n        {\n            _values.Fill(value);\n        }\n\n        public IEnumerator<TemplateValue> GetEnumerator()\n        {\n            return _values.GetEnumerator();\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return GetEnumerator();\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (TemplateValueCollection)) return false;\n            return Equals((TemplateValueCollection) obj);\n        }\n\n        public bool Equals(TemplateValueCollection other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n\n            return _values.SequenceEqual(other._values);\n        }\n\n        public override int GetHashCode()\n        {\n            return _values.GetHashCode();\n        }\n\n        public static TemplateValueCollection For(params TemplateValue[] values)\n        {\n            return new TemplateValueCollection(values);\n        }\n\n        public IDictionary<string, string> ToDictionary()\n        {\n            var values = new Dictionary<string, string>();\n            _values.Each(x => values.Fill(x.Key, x.Value));\n\n            return values;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/ValidationAttribute.cs",
    "content": "﻿using System;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.Validation\n{\n    public abstract class ValidationAttribute : Attribute\n    {\n        public abstract IValidationRule CreateRule(Accessor accessor);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/ValidationCompiler.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Registration;\nusing StructureMap.Graph.Scanning;\n\nnamespace FubuMVC.Core.Validation\n{\n    public static class ValidationCompiler\n    {\n        public static bool IsValidationRegistration(Type type)\n        {\n            return type.IsConcreteWithDefaultCtor() && type.CanBeCastTo<IValidationRegistration>();\n        }\n\n        public static Task Compile(BehaviorGraph graph, IPerfTimer timer, FubuRegistry registry)\n        {\n            return TypeRepository.FindTypes(graph.AllAssemblies(),\n                TypeClassification.Concretes | TypeClassification.Closed, IsValidationRegistration)\n                .ContinueWith(t =>\n                {\n                        t.Result.Distinct()\n                        .Each(type => registry.Services.For(typeof(IValidationRegistration)).Add(type));\n                });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/ValidationContext.cs",
    "content": "using System;\nusing System.ComponentModel;\nusing FubuCore;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class ValidationContext\n    {\n        private readonly Notification _notification;\n        private readonly IValidator _provider;\n        private readonly object _target;\n        private ITypeResolver _resolver;\n        private IServiceLocator _services;\n\n        public ValidationContext(IValidator provider, Notification notification, object target)\n        {\n            if (target == null) throw new ArgumentNullException(\"target\");\n            if (notification == null) throw new ArgumentNullException(\"notification\");\n\n            _provider = provider;\n            _notification = notification;\n            _target = target;\n        }\n\n        public Type TargetType { get; set; }\n\n        public IValidator Provider\n        {\n            get { return _provider; }\n        }\n\n        public Notification Notification\n        {\n            get { return _notification; }\n        }\n\n        public object Target\n        {\n            get { return _target; }\n        }\n\n        public ITypeResolver Resolver\n        {\n            get { return _resolver ?? new TypeResolver(); }\n            set { _resolver = value; }\n        }\n\n        public IServiceLocator ServiceLocator\n        {\n            get\n            {\n                if(_services == null)\n                {\n                    _services = new InMemoryServiceLocator();\n                }\n\n                return _services;\n            }\n            set { _services = value; }\n        }\n\n        public T GetFieldValue<T>(Accessor accessor)\n        {\n            var rawValue = accessor.GetValue(_target);\n            \n            if (rawValue == null) return default(T);\n            if (rawValue.GetType() == typeof (T)) return (T) rawValue;\n\n            var converter = TypeDescriptor.GetConverter(typeof (T));\n            return (T) converter.ConvertFrom(rawValue);\n        }\n\n        \n        public void ContinueValidation(Accessor accessor)\n        {\n            var childTarget = accessor.GetValue(_target);\n            if (childTarget == null) return;\n\n            var childNotification = Provider.Validate(childTarget);\n            Notification.AddChild(accessor, childNotification);\n        }\n\n        public T Service<T>()\n        {\n            return ServiceLocator.GetInstance<T>();\n        }\n\n        /// <summary>\n        /// Mostly used for testing.\n        /// </summary>\n        /// <param name=\"target\"></param>\n        /// <returns></returns>\n        public static ValidationContext For(object target)\n        {\n            var provider = Validator.BasicValidator();\n            var notification = new Notification(target.GetType());\n\n            return new ValidationContext(provider, notification, target);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/ValidationError.cs",
    "content": "namespace FubuMVC.Core.Validation\n{\n    public class ValidationError\n    {\n        public ValidationError()\n        {\n        }\n\n        public ValidationError(string field, string message)\n            : this(field, field, message)\n        {\n            \n        }\n\n        public ValidationError(string field, string label, string message)\n        {\n            this.field = field;\n            this.label = label;\n            this.message = message;\n        }\n\n        public string field { get; set; }\n        public string message { get; set; }\n        public string label { get; set; }\n\n        public bool Equals(ValidationError other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return Equals(other.field, field) && Equals(other.message, message);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (ValidationError)) return false;\n            return Equals((ValidationError) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((field != null ? field.GetHashCode() : 0)*397) ^ (message != null ? message.GetHashCode() : 0);\n            }\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"field: {0}, message: {1}\", field, message);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/ValidationGraph.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuCore.Reflection;\nusing FubuCore.Util;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation\n{\n\t// Add a new JS source...\n\t// Then add the field equality JS rule\n\n    public class ValidationGraph\n    {\n        private readonly IList<IValidationSource> _sources = new List<IValidationSource>();\n        private readonly IFieldValidationQuery _fieldQuery;\n        private readonly IFieldRulesRegistry _fieldRegistry;\n        private readonly Cache<Type, ValidationPlan> _plans; \n\n        public ValidationGraph(IFieldRulesRegistry fieldRegistry, IEnumerable<IValidationSource> sources)\n        {\n            _fieldRegistry = fieldRegistry;\n            _fieldQuery = new FieldValidationQuery(fieldRegistry);\n\n            _sources.Fill(new FieldRuleSource(fieldRegistry));\n            _sources.Fill(new SelfValidatingClassRuleSource());\n            _sources.Fill(sources);\n\n            _plans = new Cache<Type, ValidationPlan>(type => ValidationPlan.For(type, this));\n        }\n\n        public IEnumerable<IValidationSource> Sources\n        {\n            get { return _sources; }\n        }\n\n        public IFieldRulesRegistry Fields\n        {\n            get { return _fieldRegistry; }\n        }\n\n        public IFieldValidationQuery Query()\n        {\n            return _fieldQuery;\n        }\n\n        /// <summary>\n        /// Convenience method for querying against IFieldValidationRules.\n        /// </summary>\n        /// <param name=\"type\"></param>\n        /// <param name=\"accessor\"></param>\n        /// <returns></returns>\n        public IEnumerable<IFieldValidationRule> FieldRulesFor(Type type, Accessor accessor)\n        {\n            return Query().RulesFor(type, accessor);\n        }\n\n        public void RegisterSource(IValidationSource source)\n        {\n            _sources.Fill(source);\n        }\n\n        public ValidationPlan PlanFor(Type type)\n        {\n            return _plans[type];\n        }\n\n        public void Import(IValidationRegistration registration)\n        {\n            registration.Register(this);\n        }\n\n        public static ValidationGraph BasicGraph()\n        {\n            return new ValidationGraph(FieldRulesRegistry.BasicRegistry(), new IValidationSource[0]);\n        }\n\n        public static ValidationGraph For(IFieldRulesRegistry registry)\n        {\n            return new ValidationGraph(registry, new IValidationSource[0]);\n        }\n\n        /// <summary>\n        /// Mostly used for testing. Sets up a ValidationGraph for a given source.\n        /// </summary>\n        /// <param name=\"source\"></param>\n        /// <returns></returns>\n        public static ValidationGraph For(IValidationSource source)\n        {\n            return new ValidationGraph(FieldRulesRegistry.BasicRegistry(), new[] { source });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/ValidationKeys.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class ValidationKeys : StringToken\n    {\n        public static readonly ValidationKeys InvalidFormat = new ValidationKeys(\"Data is formatted incorrectly\");\n        public static readonly ValidationKeys Required = new ValidationKeys(\"Required Field\");\n        public static readonly ValidationKeys CollectionLength = new ValidationKeys(\"Must be exactly {0} element(s)\".ToFormat(CollectionLengthRule.LENGTH.AsTemplateField()));\n        public static readonly ValidationKeys MaxLength = new ValidationKeys(\"Maximum length exceeded. Must be less than or equal to {0}\".ToFormat(MaximumLengthRule.LENGTH.AsTemplateField()));\n        public static readonly ValidationKeys MinLength = new ValidationKeys(\"Minimum length not met. Must be greater than or equal to {0}\".ToFormat(MinimumLengthRule.LENGTH.AsTemplateField()));\n        public static readonly ValidationKeys GreaterThanZero = new ValidationKeys(\"Value must be greater than zero\");\n        public static readonly ValidationKeys GreaterThanOrEqualToZero = new ValidationKeys(\"Value must be greater than or equal to zero\");\n        public static readonly ValidationKeys Email = new ValidationKeys(\"Invalid email address\");\n\n\t\tpublic static readonly ValidationKeys RegEx = new ValidationKeys(\"Invalid format\");\n\n\t\tpublic static readonly ValidationKeys FieldEquality = new ValidationKeys(\"{0} must equal {1}\".ToFormat(FieldEqualityRule.Field1.AsTemplateField(), FieldEqualityRule.Field2.AsTemplateField()));\n\n        public static readonly ValidationKeys MinValue = new ValidationKeys(\"Value must be greater than or equal to {bounds}\");\n        public static readonly ValidationKeys MaxValue = new ValidationKeys(\"Value must be less than or equal to {bounds}\");\n\n        public static readonly ValidationKeys RangeLength = new ValidationKeys(\"Value must be between {min} and {max} characters\");\n\n        public static readonly ValidationKeys Summary = new ValidationKeys(\"There are errors with the information you provided.\");\n\n        public ValidationKeys(string text)\n            : base(null, text, namespaceByType: true)\n        {   \n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/ValidationMode.cs",
    "content": "namespace FubuMVC.Core.Validation\n{\n\tpublic class ValidationMode\n\t{\n\t\tpublic static readonly ValidationMode Live = new ValidationMode(\"live\");\n\t\tpublic static readonly ValidationMode Triggered = new ValidationMode(\"triggered\");\n\n\t\tprivate readonly string _mode;\n\n\t\tpublic ValidationMode(string mode)\n\t\t{\n\t\t\t_mode = mode;\n\t\t}\n\n\t\tpublic string Mode\n\t\t{\n\t\t\tget { return _mode; }\n\t\t}\n\n\t\tpublic override string ToString()\n\t\t{\n\t\t\treturn _mode;\n\t\t}\n\n\t\tprotected bool Equals(ValidationMode other)\n\t\t{\n\t\t\treturn string.Equals(_mode, other._mode);\n\t\t}\n\n\t\tpublic override bool Equals(object obj)\n\t\t{\n\t\t\tif (ReferenceEquals(null, obj)) return false;\n\t\t\tif (ReferenceEquals(this, obj)) return true;\n\t\t\tif (obj.GetType() != this.GetType()) return false;\n\t\t\treturn Equals((ValidationMode) obj);\n\t\t}\n\n\t\tpublic override int GetHashCode()\n\t\t{\n\t\t\treturn _mode.GetHashCode();\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/ValidationPlan.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class ValidationPlan : DescribesItself\n    {\n        private readonly Type _type;\n        private readonly IEnumerable<ValidationStep> _steps;\n        private readonly Lazy<ClassFieldValidationRules> _fieldRules;\n\n        public ValidationPlan(Type type, IEnumerable<ValidationStep> steps)\n        {\n            _type = type;\n            _steps = steps;\n\n            _fieldRules = new Lazy<ClassFieldValidationRules>(() => _steps.SelectMany(step => step.Rules).OfType<ClassFieldValidationRules>().SingleOrDefault());\n        }\n\n        public IEnumerable<ValidationStep> Steps { get { return _steps; }} \n\n        public virtual void Execute(ValidationContext context)\n        {\n            _steps.Each(step => step.Execute(context));\n        }\n\n        public ClassFieldValidationRules FieldRules\n        {\n            get { return _fieldRules.Value ?? new ClassFieldValidationRules(); }\n        }\n\n\t\tpublic IEnumerable<T> FindRules<T>()\n\t\t\twhere T : IValidationRule\n\t\t{\n\t\t\treturn _steps.SelectMany(x => x.FindRules<T>());\n\t\t}\n\n        public void Describe(Description description)\n        {\n            var list = description.AddList(\"ValidationSteps\", _steps);\n            list.Label = \"Validation Steps\";\n            list.IsOrderDependent = true;\n        }\n\n        public override string ToString()\n        {\n            return \"Validate {0}\".ToFormat(_type.Name);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (ValidationPlan)) return false;\n            return Equals((ValidationPlan) obj);\n        }\n\n        public bool Equals(ValidationPlan other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return other._type == _type && _steps.SequenceEqual(other._steps);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return (_type.GetHashCode()*397) ^ _steps.GetHashCode();\n            }\n        }\n\n\t\tpublic static ValidationPlan For(Type type, ValidationGraph graph)\n\t\t{\n\t\t\tvar steps = new List<ValidationStep>();\n\t\t\tgraph.Sources.Each(source =>\n\t\t\t{\n\t\t\t\tvar rules = source.RulesFor(type);\n\t\t\t\tif (!rules.Any()) return;\n\n\t\t\t\tsteps.Add(new ValidationStep(type, source.GetType(), rules));\n\t\t\t});\n\n\t\t\treturn new ValidationPlan(type, steps);\n\t\t}\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/ValidationScenario.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Reflection;\nusing FubuCore;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class ValidationScenario<T>\n    {\n        private ValidationScenario(ScenarioDefinition definition)\n        {\n            var validator = new Validator(new TypeResolver(), definition.Graph(), definition.Services);\n\n            Model = definition.Model;\n            Notification = validator.Validate(Model);\n        }\n\n        public T Model { get; set; }\n\n        public Notification Notification { get; set; }\n\n        public static ValidationScenario<T> For(Action<ScenarioDefinition> configuration)\n        {\n            var scenario = new ScenarioDefinition();\n            configuration(scenario);\n\n            return new ValidationScenario<T>(scenario);\n        }\n\n        public class ScenarioDefinition\n        {\n            private readonly IList<IValidationRule> _rules = new List<IValidationRule>();\n            private readonly IList<IValidationSource> _sources;\n            private readonly InMemoryServiceLocator _services = new InMemoryServiceLocator();\n            private readonly IList<IFieldValidationRule> _fieldRules = new List<IFieldValidationRule>();\n            private readonly IFieldRulesRegistry _fieldRegistry;\n\n\n            public ScenarioDefinition()\n            {\n                _sources = new List<IValidationSource> { new ConfiguredValidationSource(_rules) };\n\n                var fieldSource = new PassThruFieldValidationSource(_fieldRules);\n                _fieldRegistry = FieldRulesRegistry.Explicit(new IFieldValidationSource[] {fieldSource});\n            }\n\n            public T Model { get; set; }\n            \n            public IServiceLocator Services\n            {\n                get { return _services; }\n            }\n\n            public void Service<TService>(TService service)\n            {\n                _services.Add(service);\n            }\n\n            public void ValidationSource<TSource>(TSource source)\n                where TSource : IValidationSource\n            {\n                _sources.Add(source);\n            }\n\n            public void Rule<TRule>(TRule rule)\n                where TRule : IValidationRule\n            {\n                _rules.Add(rule);\n            }\n\n            public void FieldRule<TRule>(TRule rule)\n                where TRule : IFieldValidationRule\n            {\n                _fieldRules.Add(rule);\n            }\n\n            public ValidationGraph Graph()\n            {\n                return new ValidationGraph(_fieldRegistry, _sources);\n            }\n        }\n\n        public class PassThruFieldValidationSource : IFieldValidationSource\n        {\n            private readonly IEnumerable<IFieldValidationRule> _rules;\n\n            public PassThruFieldValidationSource(IEnumerable<IFieldValidationRule> rules)\n            {\n                _rules = rules;\n            }\n\n            public IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property)\n            {\n                return _rules;\n            }\n\n            public void AssertIsValid()\n            {\n            }\n        }\n    }\n\n    /// <summary>\n    /// Used for testing only\n    /// </summary>\n    public class ConfiguredValidationSource : IValidationSource\n    {\n        private readonly Func<Type, bool> _predicate; \n        private readonly IEnumerable<IValidationRule> _rules;\n\n        public ConfiguredValidationSource(IEnumerable<IValidationRule> rules)\n            : this(type => true, rules)\n        {\n        }\n\n        public ConfiguredValidationSource(Func<Type, bool> predicate, IEnumerable<IValidationRule> rules)\n        {\n            _predicate = predicate;\n            _rules = rules;\n        }\n\n        public IEnumerable<IValidationRule> RulesFor(Type type)\n        {\n            if(_predicate(type))\n            {\n                return _rules;\n            }\n\n            return new IValidationRule[0];\n        }\n\n        public static ConfiguredValidationSource For(params IValidationRule[] rules)\n        {\n            return new ConfiguredValidationSource(rules);\n        }\n\n        public static ConfiguredValidationSource For(Type type, params IValidationRule[] rules)\n        {\n            return new ConfiguredValidationSource(x => x == type, rules);\n        }\n\n        public static ConfiguredValidationSource For(Func<Type, bool> predicate, params IValidationRule[] rules)\n        {\n            return new ConfiguredValidationSource(predicate, rules);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/ValidationStep.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Descriptions;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class ValidationStep : DescribesItself\n    {\n        private readonly Type _type;\n        private readonly Type _source;\n        private readonly IEnumerable<IValidationRule> _rules;\n\n        public ValidationStep(Type type, Type source, IEnumerable<IValidationRule> rules)\n        {\n            _type = type;\n            _source = source;\n            _rules = rules;\n        }\n\n        public Type Type\n        {\n            get { return _type; }\n        }\n\n        public Type Source { get { return _source; } }\n\n        public IEnumerable<IValidationRule> Rules\n        {\n            get { return _rules; }\n        }\n\n\t\tpublic IEnumerable<T> FindRules<T>()\n\t\t\twhere T : IValidationRule\n\t\t{\n\t\t\treturn _rules.OfType<T>();\n\t\t}\n\n        public void Execute(ValidationContext context)\n        {\n            // TODO -- Could push a logging mechanism into the context\n            _rules.Each(x => x.Validate(context));\n        }\n\n        void DescribesItself.Describe(Description description)\n        {\n            var list = description.AddList(\"ValidationRules\", _rules);\n            list.Label = \"Validation Rules\";\n            list.IsOrderDependent = true;\n        }\n\n        public override string ToString()\n        {\n            return \"Validate {0} from {1}\".ToFormat(_type.Name, _source.Name);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (ValidationStep)) return false;\n            return Equals((ValidationStep) obj);\n        }\n\n        public bool Equals(ValidationStep other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return other._type == _type && other._source == _source && _rules.SequenceEqual(other._rules);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                int result = _type.GetHashCode();\n                result = (result*397) ^ _source.GetHashCode();\n                result = (result*397) ^ _rules.GetHashCode();\n                return result;\n            }\n        }\n\n\t\tpublic static ValidationStep FromSource(Type type, IValidationSource source)\n\t\t{\n\t\t\treturn new ValidationStep(type, source.GetType(), source.RulesFor(type));\n\t\t}\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Validator.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Validation\n{\n    public class Validator : IValidator\n    {\n        private readonly ITypeResolver _typeResolver;\n        private readonly ValidationGraph _graph;\n        private readonly IServiceLocator _services;\n\n        public Validator(ITypeResolver typeResolver, ValidationGraph graph, IServiceLocator services)\n        {\n            _typeResolver = typeResolver;\n            _graph = graph;\n            _services = services;\n        }\n\n        public Notification Validate(object target)\n        {\n            var validatedType = _typeResolver.ResolveType(target);\n            var notification = new Notification(validatedType);\n            Validate(target, notification);\n            return notification;\n        }\n\n        public void Validate(object target, Notification notification)\n        {\n            var validatedType = _typeResolver.ResolveType(target);\n            var context = ContextFor(target, notification);\n\n            _graph.PlanFor(validatedType).Execute(context);\n        }\n\n        public ValidationContext ContextFor(object target, Notification notification)\n        {\n            var validatedType = _typeResolver.ResolveType(target);\n            return new ValidationContext(this, notification, target)\n            {\n                TargetType = validatedType,\n                Resolver = _typeResolver,\n                ServiceLocator = _services\n            };\n        }\n\n        public static IValidator BasicValidator()\n        {\n            return new Validator(new TypeResolver(), ValidationGraph.BasicGraph(), new InMemoryServiceLocator());\n        }\n\n        public static Notification ValidateObject(object target)\n        {\n            return BasicValidator().Validate(target);\n        }\n\n        public static IEnumerable<NotificationMessage> ValidateField(object target, string propertyName)\n        {\n            var notification = ValidateObject(target);\n            return notification.AllMessages.Where(x => x.Accessors.Any(a => a.Name == propertyName));\n        }\n            \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/AccessorRulesExtensions.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n    // This is all covered by ST\n    public static class AccessorRulesExtensions\n    {\n\t    public static void MaximumLength(this IAccessorRulesExpression expression, int length)\n        {\n            expression.Add(new MaximumLengthRule(length));\n        }\n\n\t\tpublic static void MaximumLength(this IAccessorRulesExpression expression, int length, StringToken message)\n\t\t{\n\t\t\texpression.Add(new MaximumLengthRule(length, message));\n\t\t}\n\n\t\tpublic static void MaximumLength(this IAccessorRulesExpression expression, int length, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new MaximumLengthRule(length) { Mode = mode });\n\t\t}\n\n\t\tpublic static void MaximumLength(this IAccessorRulesExpression expression, int length, StringToken message, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new MaximumLengthRule(length, message) { Mode = mode});\n\t\t}\n\n        public static void GreaterThanZero(this IAccessorRulesExpression expression)\n        {\n            expression.Add(new GreaterThanZeroRule());\n        }\n\n\t\tpublic static void GreaterThanZero(this IAccessorRulesExpression expression, StringToken message)\n\t\t{\n\t\t\texpression.Add(new GreaterThanZeroRule(message));\n\t\t}\n\n\t\tpublic static void GreaterThanZero(this IAccessorRulesExpression expression, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new GreaterThanZeroRule { Mode = mode });\n\t\t}\n\n\t\tpublic static void GreaterThanZero(this IAccessorRulesExpression expression, StringToken message, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new GreaterThanZeroRule(message) { Mode = mode });\n\t\t}\n\n        public static void GreaterOrEqualToZero(this IAccessorRulesExpression expression)\n        {\n            expression.Add(new GreaterOrEqualToZeroRule());\n        }\n\n\t\tpublic static void GreaterOrEqualToZero(this IAccessorRulesExpression expression, StringToken message)\n\t\t{\n\t\t\texpression.Add(new GreaterOrEqualToZeroRule(message));\n\t\t}\n\n\t\tpublic static void GreaterOrEqualToZero(this IAccessorRulesExpression expression, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new GreaterOrEqualToZeroRule { Mode = mode });\n\t\t}\n\n\t\tpublic static void GreaterOrEqualToZero(this IAccessorRulesExpression expression, StringToken message, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new GreaterOrEqualToZeroRule(message) { Mode = mode });\n\t\t}\n\n        public static void Required(this IAccessorRulesExpression expression)\n        {\n            expression.Add(new RequiredFieldRule());\n        }\n\n\t\tpublic static void Required(this IAccessorRulesExpression expression, StringToken message)\n\t\t{\n\t\t\texpression.Add(new RequiredFieldRule(message));\n\t\t}\n\n\t\tpublic static void Required(this IAccessorRulesExpression expression, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new RequiredFieldRule { Mode = mode });\n\t\t}\n\n\t\tpublic static void Required(this IAccessorRulesExpression expression, StringToken message, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new RequiredFieldRule(message) { Mode = mode });\n\t\t}\n\n        public static void Email(this IAccessorRulesExpression expression)\n        {\n            expression.Add(new EmailFieldRule());\n        }\n\n\t\tpublic static void Email(this IAccessorRulesExpression expression, StringToken message)\n\t\t{\n\t\t\texpression.Add(new EmailFieldRule(message));\n\t\t}\n\n\t\tpublic static void Email(this IAccessorRulesExpression expression, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new EmailFieldRule { Mode = mode });\n\t\t}\n\n\t\tpublic static void Email(this IAccessorRulesExpression expression, StringToken message, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new EmailFieldRule(message) { Mode = mode });\n\t\t}\n\n        public static void MinimumLength(this IAccessorRulesExpression expression, int length)\n        {\n            expression.Add(new MinimumLengthRule(length));\n        }\n\n\t\tpublic static void MinimumLength(this IAccessorRulesExpression expression, int length, StringToken message)\n\t\t{\n\t\t\texpression.Add(new MinimumLengthRule(length, message));\n\t\t}\n\n\t\tpublic static void MinimumLength(this IAccessorRulesExpression expression, int length, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new MinimumLengthRule(length) { Mode = mode });\n\t\t}\n\n\t\tpublic static void MinimumLength(this IAccessorRulesExpression expression, int length, StringToken message, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new MinimumLengthRule(length, message) { Mode = mode });\n\t\t}\n\n        public static void MinValue(this IAccessorRulesExpression expression, IComparable bounds)\n        {\n            expression.Add(new MinValueFieldRule(bounds));\n        }\n\n\t\tpublic static void MinValue(this IAccessorRulesExpression expression, IComparable bounds, StringToken message)\n\t\t{\n\t\t\texpression.Add(new MinValueFieldRule(bounds, message));\n\t\t}\n\n\t\tpublic static void MinValue(this IAccessorRulesExpression expression, IComparable bounds, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new MinValueFieldRule(bounds) { Mode = mode });\n\t\t}\n\n\t\tpublic static void MinValue(this IAccessorRulesExpression expression, IComparable bounds, StringToken message, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new MinValueFieldRule(bounds, message) { Mode = mode });\n\t\t}\n\n        public static void RangeLength(this IAccessorRulesExpression expression, int min, int max)\n        {\n            expression.Add(new RangeLengthFieldRule(min, max));\n        }\n\n\t\tpublic static void RangeLength(this IAccessorRulesExpression expression, int min, int max, StringToken message)\n\t\t{\n\t\t\texpression.Add(new RangeLengthFieldRule(min, max, message));\n\t\t}\n\n\t\tpublic static void RangeLength(this IAccessorRulesExpression expression, int min, int max, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new RangeLengthFieldRule(min, max) { Mode = mode });\n\t\t}\n\n\t\tpublic static void RangeLength(this IAccessorRulesExpression expression, int min, int max, StringToken message, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new RangeLengthFieldRule(min, max, message) { Mode = mode });\n\t\t}\n\n        public static void MaxValue(this IAccessorRulesExpression expression, IComparable bounds)\n        {\n            expression.Add(new MaxValueFieldRule(bounds));\n        }\n\n\t\tpublic static void MaxValue(this IAccessorRulesExpression expression, IComparable bounds, StringToken message)\n\t\t{\n\t\t\texpression.Add(new MaxValueFieldRule(bounds, message));\n\t\t}\n\n\t\tpublic static void MaxValue(this IAccessorRulesExpression expression, IComparable bounds, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new MaxValueFieldRule(bounds) { Mode = mode });\n\t\t}\n\n\t\tpublic static void MaxValue(this IAccessorRulesExpression expression, IComparable bounds, StringToken message, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(new MaxValueFieldRule(bounds, message) { Mode = mode });\n\t\t} \n\n\t\tpublic static void ValidationMode(this IAccessorRulesExpression expression, ValidationMode mode)\n\t\t{\n\t\t\texpression.Add(mode);\n\t\t}\n\n\t\tpublic static void LiveValidation(this IAccessorRulesExpression expression)\n\t\t{\n\t\t\texpression.ValidationMode(Validation.ValidationMode.Live);\n\t\t}\n\n\t\tpublic static void TriggeredValidation(this IAccessorRulesExpression expression)\n\t\t{\n\t\t\texpression.ValidationMode(Validation.ValidationMode.Triggered);\n\t\t}\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/AccessorRulesFieldSource.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Reflection;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n    public class AccessorRulesFieldSource : IFieldValidationSource\n    {\n        private readonly AccessorRules _rules;\n\n        public AccessorRulesFieldSource(AccessorRules rules)\n        {\n            _rules = rules;\n        }\n\n        public IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property)\n        {\n            return _rules.AllRulesFor<IFieldValidationRule>(new SingleProperty(property));\n        }\n\n        public void AssertIsValid()\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/AccessorRulesValidationModePolicy.cs",
    "content": "﻿using FubuCore;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n\tpublic class AccessorRulesValidationModePolicy : IValidationModePolicy\n\t{\n\t\tpublic bool Matches(IServiceLocator services, Accessor accessor)\n\t\t{\n\t\t\treturn DetermineMode(services, accessor) != null;\n\t\t}\n\n\t\tpublic ValidationMode DetermineMode(IServiceLocator services, Accessor accessor)\n\t\t{\n\t\t\tvar rules = services.GetInstance<AccessorRules>();\n\t\t\treturn rules.FirstRule<ValidationMode>(accessor);\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/AjaxContinuationResolver.cs",
    "content": "using System.Collections.Generic;\nusing FubuMVC.Core.Ajax;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n    public interface IAjaxContinuationResolver\n    {\n        AjaxContinuation Resolve(Notification notification);\n    }\n\n    public interface IAjaxContinuationModifier\n    {\n        void Modify(AjaxContinuation continuation, Notification notification);\n    }\n\n     public class AjaxContinuationResolver : IAjaxContinuationResolver\n    {\n        private readonly IEnumerable<IAjaxContinuationModifier> _modifiers;\n\n        public AjaxContinuationResolver(IEnumerable<IAjaxContinuationModifier> modifiers)\n        {\n            _modifiers = modifiers;\n        }\n\n        public AjaxContinuation Resolve(Notification notification)\n        {\n            var continuation = AjaxValidation.BuildContinuation(notification);\n            _modifiers.Each(x => x.Modify(continuation, notification));\n\n            return continuation;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/AjaxValidation.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuMVC.Core.Ajax;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n    public class AjaxValidation\n    {\n         public static AjaxContinuation BuildContinuation(Notification notification)\n         {\n             var continuation = new AjaxContinuation();\n             continuation.Success = notification.IsValid();\n             notification\n                 .ToValidationErrors()\n                 .Each(e => continuation\n                                .Errors\n                                .Add(new AjaxError\n                                {\n                                    field = e.field,\n                                    label = e.label,\n                                    message = e.message\n                                }));\n\n             return continuation;\n         }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/AjaxValidationBehavior.cs",
    "content": "using System.Threading.Tasks;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n    public class AjaxValidationBehavior<T> : BasicBehavior where T : class\n    {\n        private readonly IValidationFilter<T> _filter;\n        private readonly IFubuRequest _request;\n        private readonly IAjaxValidationFailureHandler _failure;\n\n        public AjaxValidationBehavior(IValidationFilter<T> filter, IFubuRequest request, IAjaxValidationFailureHandler failure)\n            : base(PartialBehavior.Ignored)\n        {\n            _filter = filter;\n            _request = request;\n            _failure = failure;\n        }\n\n        protected override Task<DoNext> performInvoke()\n        {\n            var input = _request.Get<T>();\n            var notification = _filter.Validate(input);\n\n            if (notification.IsValid())\n            {\n                return Task.FromResult(DoNext.Continue);\n            }\n\n            _failure.Handle(notification);\n            return Task.FromResult(DoNext.Stop);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/AjaxValidationNode.cs",
    "content": "using System;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n    public class AjaxValidationNode : Wrapper, IHaveValidation\n    {\n        public AjaxValidationNode(ActionCall call)\n            : base(typeof(AjaxValidationBehavior<>).MakeGenericType(call.InputType()))\n        {\n\t        InputType = call.InputType();\n        \tValidation = ValidationNode.Default();\n        }\n\n\t\tpublic Type InputType { get; private set; }\n        public ValidationNode Validation { get; private set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/FubuMvcValidationServices.cs",
    "content": "using FubuMVC.Core.Registration;\nusing FubuMVC.Core.Validation.Web.Remote;\nusing FubuMVC.Core.Validation.Web.UI;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n    public class FubuMvcValidationServices : ServiceRegistry\n    {\n        public FubuMvcValidationServices()\n        {\n            SetServiceIfNone<IAjaxContinuationResolver, AjaxContinuationResolver>();\n            SetServiceIfNone<IModelBindingErrors, ModelBindingErrors>();\n            SetServiceIfNone<IAjaxValidationFailureHandler, AjaxValidationFailureHandler>();\n            SetServiceIfNone<IValidationTargetResolver, ValidationTargetResolver>();\n            SetServiceIfNone<IRuleRunner, RuleRunner>();\n            For(typeof(IValidationFilter<>)).Use(typeof(ValidationFilter<>));\n            SetServiceIfNone<IFieldValidationModifier, FieldValidationModifier>();\n\n            // Order is kind of important here\n\n            AddService<IActivator, RemoteRuleGraphActivator>();\n            AddService<IValidationAnnotationStrategy, CssValidationAnnotationStrategy>();\n\t\t\tAddService<IValidationAnnotationStrategy, LocalizationAnnotationStrategy>();\n\n            For<IRemoteRuleQuery>().Use<RemoteRuleQuery>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/FubuValidationServiceRegistry.cs",
    "content": "using System.Collections.Generic;\nusing System.Reflection;\nusing FubuCore;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web.Remote;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n    public class FubuValidationServiceRegistry : ServiceRegistry\n    {\n        public FubuValidationServiceRegistry()\n        {\n            For(typeof (IValidationFilter<>)).Use(typeof (ValidationFilter<>));\n            Scan(_ =>\n            {\n                _.Assembly(Assembly.GetExecutingAssembly());\n                _.IncludeNamespace(typeof(IModelBindingErrors).Namespace);\n                _.WithDefaultConventions();\n            });\n\n\n            SetServiceIfNone<ITypeResolver, TypeResolver>();\n            SetServiceIfNone<IValidator, Validator>();\n\n            AddService<IFieldValidationSource, AccessorRulesFieldSource>();\n\n            // Done explicitly now in BehaviorGraphBuilder\n            ForConcreteType<ValidationGraph>().Configure.Singleton().OnCreation(\"Apply all the validation registrations\", (context, graph) =>\n            {\n                var registrations = context.GetAllInstances<IValidationRegistration>();\n                registrations.Each(x => x.Register(graph));\n            });\n\n            ForSingletonOf<IFieldRulesRegistry>().Use<FieldRulesRegistry>();\n            ForConcreteType<RemoteRuleGraph>().Configure.Singleton();\n\n\n\n            For<IFieldValidationQuery>().Use<FieldValidationQuery>();\n\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/IAjaxValidationFailureHandler.cs",
    "content": "﻿using FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n    public interface IAjaxValidationFailureHandler\n    {\n        void Handle(Notification notification);\n    }\n\n    public class AjaxValidationFailureHandler : IAjaxValidationFailureHandler\n    {\n        private readonly IAjaxContinuationResolver _resolver;\n        private readonly IOutputWriter _output;\n        private readonly IFubuRequest _request;\n        private readonly ValidationSettings _settings;\n\n        public AjaxValidationFailureHandler(IAjaxContinuationResolver resolver, IOutputWriter output, IFubuRequest request, ValidationSettings settings)\n        {\n            _resolver = resolver;\n            _output = output;\n            _request = request;\n            _settings = settings;\n        }\n\n        public void Handle(Notification notification)\n        {\n            var continuation = _resolver.Resolve(notification);\n            \n            _output.WriteResponseCode(_settings.StatusCode);\n\n            _request.Set(continuation);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/IHaveValidation.cs",
    "content": "﻿namespace FubuMVC.Core.Validation.Web\n{\n\tpublic interface IHaveValidation\n\t{\n\t\tValidationNode Validation { get; }\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/IValidationModePolicy.cs",
    "content": "﻿using FubuCore;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n\tpublic interface IValidationModePolicy\n\t{\n\t\tbool Matches(IServiceLocator services, Accessor accessor);\n\t\tValidationMode DetermineMode(IServiceLocator services, Accessor accessor);\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/ModelBindingErrors.cs",
    "content": "using System.Collections.Generic;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n    public interface IModelBindingErrors\n    {\n        void AddAnyErrors<T>(Notification notification);\n    }\n\n    public class ModelBindingErrors : IModelBindingErrors\n    {\n        private readonly IFubuRequest _request;\n\n        public ModelBindingErrors(IFubuRequest request)\n        {\n            _request = request;\n        }\n\n        public void AddAnyErrors<T>(Notification notification)\n        {\n            var problems = _request.ProblemsFor<T>();\n            problems.Each(problem =>\n            {\n                notification.RegisterMessage(problem.Property, ValidationKeys.InvalidFormat);\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/NotValidatedAttribute.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n\t[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]\n\tpublic class NotValidatedAttribute : Attribute\n\t{\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/Remote/IRemoteFieldValidationRule.cs",
    "content": "﻿using FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web.Remote\n{\n    public interface IRemoteFieldValidationRule : IFieldValidationRule\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/Remote/IRemoteRuleFilter.cs",
    "content": "using System;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web.Remote\n{\n    public interface IRemoteRuleFilter\n    {\n        bool Matches(IFieldValidationRule rule);\n    }\n\n    public class RemoteRuleAttributeFilter : IRemoteRuleFilter\n    {\n        public bool Matches(IFieldValidationRule rule)\n        {\n            return rule.GetType().HasAttribute<RemoteAttribute>();\n        }\n    }\n\n    public class RemoteFieldValidationRuleFilter : IRemoteRuleFilter\n    {\n        public bool Matches(IFieldValidationRule rule)\n        {\n            return rule is IRemoteFieldValidationRule;\n        }\n    }\n\n    public class LambdaRemoteRuleFilter : IRemoteRuleFilter\n    {\n        private readonly Func<IFieldValidationRule, bool> _filter;\n\n        public LambdaRemoteRuleFilter(Func<IFieldValidationRule, bool> filter)\n        {\n            _filter = filter;\n        }\n\n        public bool Matches(IFieldValidationRule rule)\n        {\n            return _filter(rule);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/Remote/IRemoteRuleQuery.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Validation.Fields;\nusing StructureMap;\n\nnamespace FubuMVC.Core.Validation.Web.Remote\n{\n    public interface IRemoteRuleQuery\n    {\n        bool IsRemote(IFieldValidationRule rule);\n    }\n\n    public class RemoteRuleQuery : IRemoteRuleQuery\n    {\n        private readonly IEnumerable<IRemoteRuleFilter> _filters;\n\n        [DefaultConstructor]\n        public RemoteRuleQuery(ValidationSettings settings)\n        {\n            _filters = settings.Filters;\n        }\n\n        public RemoteRuleQuery(IEnumerable<IRemoteRuleFilter> filters)\n        {\n            _filters = filters;\n        }\n\n        public bool IsRemote(IFieldValidationRule rule)\n        {\n            return _filters.Any(x => x.Matches(rule));\n        }\n\n        public static RemoteRuleQuery Basic()\n        {\n            return new RemoteRuleQuery(new IRemoteRuleFilter[] { new RemoteRuleAttributeFilter(), new RemoteFieldValidationRuleFilter() });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/Remote/IRuleRunner.cs",
    "content": "namespace FubuMVC.Core.Validation.Web.Remote\n{\n    public interface IRuleRunner\n    {\n        Notification Run(RemoteFieldRule remote, string value);\n    }\n\n    public class RuleRunner : IRuleRunner\n    {\n        private readonly IValidator _validator;\n        private readonly IValidationTargetResolver _resolver;\n\n        public RuleRunner(IValidator validator, IValidationTargetResolver resolver)\n        {\n            _validator = validator;\n            _resolver = resolver;\n        }\n\n        public Notification Run(RemoteFieldRule remote, string value)\n        {\n            var target = _resolver.Resolve(remote.Accessor, value);\n            var context = _validator.ContextFor(target, new Notification(target.GetType()));\n\n            remote.Rule.Validate(remote.Accessor, context);\n\n            return context.Notification;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/Remote/IValidationTargetResolver.cs",
    "content": "using System.Collections.Generic;\nusing FubuCore.Binding;\nusing FubuCore.Binding.Values;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.Validation.Web.Remote\n{\n    public interface IValidationTargetResolver\n    {\n        object Resolve(Accessor accessor, string value);\n    }\n\n    public class ValidationTargetResolver : IValidationTargetResolver\n    {\n        private readonly IObjectResolver _resolver;\n\n        public ValidationTargetResolver(IObjectResolver resolver)\n        {\n            _resolver = resolver;\n        }\n\n        public object Resolve(Accessor accessor, string value)\n        {\n            var values = new Dictionary<string, string> { {accessor.Name, value} };\n            return _resolver.BindModel(accessor.OwnerType, new FlatValueSource(values)).Value;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/Remote/RemoteAttribute.cs",
    "content": "using System;\n\nnamespace FubuMVC.Core.Validation.Web.Remote\n{\n    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]\n    public class RemoteAttribute : Attribute\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/Remote/RemoteFieldRule.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web.Remote\n{\n    public class RemoteFieldRule\n    {\n\t\tprivate readonly IFieldValidationRule _rule;\n        private readonly Accessor _accessor;\n\n        public RemoteFieldRule(IFieldValidationRule rule, Accessor accessor)\n        {\n\t        _rule = rule;\n            _accessor = accessor;\n        }\n\n        public Accessor Accessor\n        {\n            get { return _accessor; }\n        }\n\n\t    public IFieldValidationRule Rule\n\t    {\n\t\t\tget { return _rule; }\n\t    }\n\n        public Type Type\n        {\n            get { return _rule.GetType(); }\n        }\n\n        public string ToHash()\n        {\n\t\t\treturn \"RuleType={0}&Type={1}&Accessor={2}\".ToFormat(Type.FullName, _accessor.OwnerType.FullName, _accessor.Name).ToHash();\n        }\n\n\t\tpublic bool Matches(string hash)\n\t\t{\n\t\t\treturn ToHash().Equals(hash);\n\t\t}\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (RemoteFieldRule)) return false;\n            return Equals((RemoteFieldRule) obj);\n        }\n\n        public bool Equals(RemoteFieldRule other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return _rule.Equals(other._rule) && Equals(other._accessor, _accessor);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return (Type.GetHashCode()*397) ^ _accessor.GetHashCode();\n            }\n        }\n\n        public static RemoteFieldRule For(Accessor accessor, IFieldValidationRule rule)\n        {\n            return new RemoteFieldRule(rule, accessor);\n        }\n\n\t\tpublic static RemoteFieldRule For<T>(Accessor accessor)\n\t\t\twhere T : IFieldValidationRule, new()\n\t\t{\n\t\t\treturn new RemoteFieldRule(new T(), accessor);\n\t\t}\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/Remote/RemoteRuleGraph.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.Reflection;\nusing FubuCore.Util;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web.Remote\n{\n    public class RemoteRuleGraph\n    {\n        private readonly Cache<Accessor, IList<RemoteFieldRule>> _rules;\n        private readonly Cache<string, RemoteFieldRule> _lookup;\n\n        public RemoteRuleGraph()\n        {\n            _rules = new Cache<Accessor, IList<RemoteFieldRule>>(x => new List<RemoteFieldRule>());\n            _lookup = new Cache<string, RemoteFieldRule>(hash =>\n\t        {\n\t\t        return _rules.SelectMany(r => r).SingleOrDefault(r => r.Matches(hash));\n\t        });\n        }\n\n        public RemoteFieldRule RegisterRule(Accessor accessor, IFieldValidationRule rule)\n        {\n            var remote = RemoteFieldRule.For(accessor, rule);\n            _rules[accessor].Fill(remote);\n\n            return remote;\n        }\n\n        public IEnumerable<RemoteFieldRule> RulesFor(Accessor accessor)\n        {\n            return _rules[accessor];\n        }\n\n        public RemoteFieldRule RuleFor(string hash)\n        {\n            return _lookup[hash];\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/Remote/RemoteRuleGraphActivator.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Validation.Web.Remote\n{\n    // TODO -- get rid of this\n    public class RemoteRuleGraphActivator : IActivator\n    {\n        private readonly ValidationGraph _graph;\n        private readonly RemoteRuleGraph _remoteGraph;\n        private readonly BehaviorGraph _behaviorGraph;\n        private readonly IRemoteRuleQuery _remotes;\n        private readonly ITypeDescriptorCache _properties;\n\n        public RemoteRuleGraphActivator(ValidationGraph graph, RemoteRuleGraph remoteGraph, BehaviorGraph behaviorGraph, IRemoteRuleQuery remotes, ITypeDescriptorCache properties)\n        {\n            _graph = graph;\n            _remoteGraph = remoteGraph;\n            _behaviorGraph = behaviorGraph;\n            _remotes = remotes;\n            _properties = properties;\n        }\n\n        public void Activate(IActivationLog log, IPerfTimer timer)\n        {\n            // Find the input models that have remote rules\n            // \"Bake\" them into the remote graph\n            _behaviorGraph\n                .Actions()\n                .Each(FillRules);\n        }\n\n        public void FillRules(ActionCall call)\n        {\n            var input = call.InputType();\n            if (input == null) return;\n\n            _properties.ForEachProperty(input, property =>\n            {\n                var accessor = new SingleProperty(property);\n                var rules = _graph\n                    .Query()\n                    .RulesFor(input, accessor)\n                    .Where(rule => _remotes.IsRemote(rule));\n\n                rules.Each(rule => _remoteGraph.RegisterRule(accessor, rule));\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/Remote/ValidateField.cs",
    "content": "using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authorization;\n\nnamespace FubuMVC.Core.Validation.Web.Remote\n{\n    public class ValidateField\n    {\n        public string Hash { get; set; }\n        public string Value { get; set; }\n    }\n\n    public class ValidateFieldEndpoint\n    {\n        private readonly RemoteRuleGraph _graph;\n        private readonly IRuleRunner _rules;\n        private readonly IAjaxContinuationResolver _continuation;\n\n        public ValidateFieldEndpoint(RemoteRuleGraph graph, IRuleRunner rules, IAjaxContinuationResolver continuation)\n        {\n            _graph = graph;\n            _rules = rules;\n            _continuation = continuation;\n        }\n\n        [PassThroughAuthentication]\n        [UrlPattern(\"_validation/remote\")]\n        public AjaxContinuation Validate(ValidateField field)\n        {\n            var rule = _graph.RuleFor(field.Hash);\n            var notification = _rules.Run(rule, field.Value);\n\n            return _continuation.Resolve(notification);\n        }\n    }\n    \n    [Description(\"Remote Validation Rules\")]\n    public class RemoteRulesSource : IActionSource\n    {\n        Task<ActionCall[]> IActionSource.FindActions(Assembly applicationAssembly)\n        {\n            var actionCall = ActionCall.For<ValidateFieldEndpoint>(x => x.Validate(null));\n            return Task.FromResult(new[] {actionCall});\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/RemoteRuleExpression.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web.Remote;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n    public class RemoteRuleExpression\n    {\n        private readonly IList<IRemoteRuleFilter> _filters = new List<IRemoteRuleFilter>();\n\n        public RemoteRuleExpression(IList<IRemoteRuleFilter> filters)\n        {\n            _filters = filters;\n        }\n\n        public RemoteRuleExpression FindWith<T>() where T : IRemoteRuleFilter, new()\n        {\n            return FindWith(new T());\n        }\n\n        public RemoteRuleExpression Include<T>() where T : IFieldValidationRule\n        {\n            return IncludeIfType(type => type == typeof (T));\n        }\n\n        public RemoteRuleExpression IncludeIf(Func<IFieldValidationRule, bool> predicate)\n        {\n            return FindWith(new LambdaRemoteRuleFilter(predicate));\n        }\n\n        public RemoteRuleExpression IncludeIfType(Func<Type, bool> predicate)\n        {\n            return FindWith(new LambdaRemoteRuleFilter(rule => predicate(rule.GetType())));\n        }\n\n        public RemoteRuleExpression FindWith(IRemoteRuleFilter filter)\n        {\n            _filters.Fill(filter);\n            return this;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/CssValidationAnnotationStrategy.cs",
    "content": "﻿using System;\nusing FubuCore.Util;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public class CssValidationAnnotationStrategy : IValidationAnnotationStrategy\n    {\n        private static readonly Cache<Type, string> Classes = new Cache<Type, string>();\n\n        static CssValidationAnnotationStrategy()\n        {\n            defineClass<RequiredFieldRule>(\"required\");\n            defineClass<GreaterThanZeroRule>(\"greater-than-zero\");\n            defineClass<GreaterOrEqualToZeroRule>(\"greater-equal-zero\");\n            defineClass<EmailFieldRule>(\"email\");\n        }\n\n        private static void defineClass<T>(string css)\n        {\n            Classes[typeof (T)] = css;\n        }\n\n        public bool Matches(IFieldValidationRule rule)\n        {\n            return Classes.Has(rule.GetType());\n        }\n\n        public void Modify(ElementRequest request, IFieldValidationRule rule)\n        {\n            var tag = request.CurrentTag;\n            tag.AddClass(Classes[rule.GetType()]);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/DateElementModifier.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuCore.Dates;\nusing FubuMVC.Core.UI.Elements;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public class DateElementModifier : InputElementModifier\n    {\n        public override bool Matches(ElementRequest token)\n        {\n            var type = token.Accessor.PropertyType;\n            return type.CanBeCastTo<DateTime>() || type.CanBeCastTo<Date>();\n        }\n\n        protected override void modify(ElementRequest request)\n        {\n            request.CurrentTag.AddClass(\"date\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/DefaultValidationSummaryWriter.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Runtime;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    [Description(\"Writes the default html partial for the Validation Summary\")]\n    public class DefaultValidationSummaryWriter : IMediaWriter<ValidationSummary>\n    {\n        public virtual HtmlTag BuildSummary()\n        {\n            return new HtmlTag(\"div\")\n                .AddClasses(\"alert\", \"alert-error\", \"validation-container\")\n                .Append(new HtmlTag(\"p\").Text(ValidationKeys.Summary))\n                .Append(new HtmlTag(\"ul\").AddClass(\"validation-summary\"))\n                .Style(\"display\", \"none\");\n        }\n\n        public Task Write(string mimeType, IFubuRequestContext context, ValidationSummary resource)\n        {\n            return context.Writer.WriteHtml(BuildSummary());\n        }\n\n        public IEnumerable<string> Mimetypes\n        {\n            get\n            {\n                yield return MimeType.Html.Value;\n                yield return MimeType.HttpFormMimetype;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/ElementLocalizationMessages.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public class ElementLocalizationMessages\n\t{\n\t\tprivate readonly IDictionary<string, string> _messages = new Dictionary<string, string>();\n\t\t\n\t\tpublic IDictionary<string, string> Messages { get { return _messages; } }\n\n\t\tpublic void Add(IFieldValidationRule rule)\n\t\t{\n\t\t\tvar key = RuleAliases.AliasFor(rule);\n\t\t\t_messages.Fill(key, rule.Token.ToString());\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/FieldEqualityFormModifier.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.UI.Forms;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n\tpublic class FieldEqualityFormModifier : ITagModifier<FormRequest>\n\t{\n\t\tpublic const string FieldEquality = \"field-equality\";\n\n\t\tpublic bool Matches(FormRequest token)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Modify(FormRequest request)\n\t\t{\n\t\t\tvar validation = request.Chain.ValidationNode();\n\t\t\tif (validation.IsEmpty())\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar graph = request.Services.GetInstance<ValidationGraph>();\n\t\t\tvar plan = graph.PlanFor(request.Input.GetType());\n\t\t\tvar rules = plan.FindRules<FieldEqualityRule>();\n\n\t\t\tif (!rules.Any())\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar data = buildValues(rules);\n\t\t\trequest.CurrentTag.Data(FieldEquality, data);\n\t\t}\n\n\t\tprivate IDictionary<string, object> buildValues(IEnumerable<FieldEqualityRule> rules)\n\t\t{\n\t\t\treturn new Dictionary<string, object> {{\"rules\", rules.Select(x => x.ToValues())}};\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/FieldOptions.cs",
    "content": "﻿using System.Linq;\nusing FubuCore;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n\tpublic class FieldOptions\n\t{\n\t\tpublic FieldOptions()\n\t\t{\n\t\t\trules = new FieldRuleOptions[0];\n\t\t}\n\n\t\tpublic string field { get; set; }\n\t\tpublic string mode { get; set; }\n\t\tpublic FieldRuleOptions[] rules { get; set; }\n\n\t\tpublic override string ToString()\n\t\t{\n\t\t\treturn \"{0} ({1})\".ToFormat(field, mode);\n\t\t}\n\n\t\tprotected bool Equals(FieldOptions other)\n\t\t{\n\t\t\treturn string.Equals(field, other.field) && string.Equals(mode, other.mode)\n\t\t\t\t&& rules.SequenceEqual(other.rules);\n\t\t}\n\n\t\tpublic override bool Equals(object obj)\n\t\t{\n\t\t\tif (ReferenceEquals(null, obj)) return false;\n\t\t\tif (ReferenceEquals(this, obj)) return true;\n\t\t\tif (obj.GetType() != this.GetType()) return false;\n\t\t\treturn Equals((FieldOptions) obj);\n\t\t}\n\n\t\tpublic override int GetHashCode()\n\t\t{\n\t\t\tunchecked\n\t\t\t{\n\t\t\t\treturn (field.GetHashCode()*397) ^ mode.GetHashCode();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic class FieldRuleOptions\n\t{\n\t\tpublic string rule { get; set; }\n\t\tpublic string mode { get; set; }\n\n\t\tpublic override string ToString()\n\t\t{\n\t\t\treturn \"{0} ({1})\".ToFormat(rule, mode);\n\t\t}\n\n\t\tprotected bool Equals(FieldRuleOptions other)\n\t\t{\n\t\t\treturn string.Equals(rule, other.rule) && string.Equals(mode, other.mode);\n\t\t}\n\n\t\tpublic override bool Equals(object obj)\n\t\t{\n\t\t\tif (ReferenceEquals(null, obj)) return false;\n\t\t\tif (ReferenceEquals(this, obj)) return true;\n\t\t\tif (obj.GetType() != this.GetType()) return false;\n\t\t\treturn Equals((FieldRuleOptions)obj);\n\t\t}\n\n\t\tpublic override int GetHashCode()\n\t\t{\n\t\t\tunchecked\n\t\t\t{\n\t\t\t\treturn (rule.GetHashCode() * 397) ^ mode.GetHashCode();\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/FieldValidationElementModifier.cs",
    "content": "using System.Collections.Generic;\nusing FubuMVC.Core.UI.Elements;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public class FieldValidationElementModifier : InputElementModifier\n    {\n        protected override void modify(ElementRequest request)\n        {\n            var rules = request.Get<ValidationGraph>().FieldRulesFor(request.HolderType(), request.Accessor);\n            var modifier = request.Get<IFieldValidationModifier>();\n\n            rules.Each(x => modifier.ModifyFor(x, request));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/FormValidationModifier.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core.UI.Forms;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public class FormValidationModifier : ITagModifier<FormRequest>\n    {\n        public bool Matches(FormRequest token)\n        {\n            return true;\n        }\n\n        public void Modify(FormRequest request)\n        {\n            var validation = request.Chain.ValidationNode();\n            if (validation.IsEmpty())\n            {\n                return;\n            }\n\n            var node = validation.As<IValidationNode>();\n            node.Modify(request);\n\n            var options = ValidationOptions.For(request);\n            request.CurrentTag.Data(ValidationOptions.Data, options);\n\n            request.CurrentTag.AddClass(\"validated-form\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/FormValidationSummaryModifier.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.UI.Forms;\nusing HtmlTags;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public class FormValidationSummaryModifier : ITagModifier<FormRequest>\n    {\n        public bool Matches(FormRequest token)\n        {\n\t        return true;\n        }\n\n        public void Modify(FormRequest request)\n        {\n\t\t\tif (!request.Chain.ValidationNode().Contains(RenderingStrategies.Summary))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n            var summary = request.Services.GetInstance<IPartialInvoker>().Invoke<ValidationSummary>().GetAwaiter().GetResult();\n            request.CurrentTag.InsertFirst(new LiteralTag(summary));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/IFieldValidationModifier.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public interface IFieldValidationModifier\n    {\n        void ModifyFor(IFieldValidationRule rule, ElementRequest request);\n    }\n\n    public class FieldValidationModifier : IFieldValidationModifier\n    {\n        private readonly IEnumerable<IValidationAnnotationStrategy> _strategies;\n\n        public FieldValidationModifier(IEnumerable<IValidationAnnotationStrategy> strategies)\n        {\n            _strategies = strategies;\n        }\n\n        public void ModifyFor(IFieldValidationRule rule, ElementRequest request)\n        {\n            _strategies\n                .Where(x => x.Matches(rule))\n                .Each(x => x.Modify(request, rule));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/IRenderingStrategy.cs",
    "content": "﻿using FubuMVC.Core.UI.Forms;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public interface IRenderingStrategy\n    {\n        void Modify(FormRequest request);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/IValidationAnnotationStrategy.cs",
    "content": "using FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public interface IValidationAnnotationStrategy\n    {\n        bool Matches(IFieldValidationRule rule);\n        void Modify(ElementRequest request, IFieldValidationRule rule);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/InputElementModifier.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public abstract class InputElementModifier : IElementModifier\n    {\n        public virtual bool Matches(ElementRequest token)\n        {\n            return true;\n        }\n\n        public void Modify(ElementRequest request)\n        {\n            var tag = request.CurrentTag;\n            if (tag == null || !tag.IsInputElement())\n            {\n                return;\n            }\n\n            modify(request);\n        }\n\n\n        public void ForRule<T>(ElementRequest request, Action<T> continuation) where T : IFieldValidationRule\n        {\n            var graph = request.Get<ValidationGraph>();\n            graph.Query().ForRule(request.HolderType(), request.Accessor, continuation);\n        }\n\n        protected abstract void modify(ElementRequest request);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/LocalizationAnnotationStrategy.cs",
    "content": "﻿using FubuCore.Reflection;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public class LocalizationAnnotationStrategy : IValidationAnnotationStrategy\n    {\n        public const string LocalizationKey = \"localization\";\n\n        public bool Matches(IFieldValidationRule rule)\n        {\n            // TODO -- We might need to make this smarter\n            return rule.Token != null && !rule.GetType().HasAttribute<IgnoreClientLocalizationAttribute>();\n        }\n\n        public void Modify(ElementRequest request, IFieldValidationRule rule)\n        {\n            var messages = request.CurrentTag.Data(LocalizationKey) as ElementLocalizationMessages;\n            if (messages == null)\n            {\n                messages = new ElementLocalizationMessages();\n                request.CurrentTag.Data(LocalizationKey, messages);\n            }\n\n            messages.Add(rule);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/LocalizationLabelModifier.cs",
    "content": "﻿using FubuMVC.Core.Localization;\nusing FubuMVC.Core.UI.Elements;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public class LocalizationLabelModifier : InputElementModifier\n    {\n        public const string LocalizedLabelKey = \"localized-label\";\n\n        protected override void modify(ElementRequest request)\n        {\n            var label = LocalizationManager.GetHeader(request.Accessor.InnerProperty);\n            request.CurrentTag.Data(LocalizedLabelKey, label);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/MaxValueModifier.cs",
    "content": "﻿using FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public class MaxValueModifier : InputElementModifier\n    {\n        protected override void modify(ElementRequest request)\n        {\n            ForRule<MaxValueFieldRule>(request, rule => request.CurrentTag.Data(\"max\", rule.Bounds));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/MaximumLengthModifier.cs",
    "content": "﻿using FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public class MaximumLengthModifier : InputElementModifier\n    {\n        protected override void modify(ElementRequest request)\n        {\n            ForRule<MaximumLengthRule>(request, rule => request.CurrentTag.Attr(\"maxlength\", rule.Length));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/MinValueModifier.cs",
    "content": "using FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public class MinValueModifier : InputElementModifier\n    {\n        protected override void modify(ElementRequest request)\n        {\n            ForRule<MinValueFieldRule>(request, rule => request.CurrentTag.Data(\"min\", rule.Bounds));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/MinimumLengthModifier.cs",
    "content": "﻿using FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public class MinimumLengthModifier : InputElementModifier\n    {\n        protected override void modify(ElementRequest request)\n        {\n            ForRule<MinimumLengthRule>(request, rule => request.CurrentTag.Data(\"minlength\", rule.Length));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/NotificationSerializationModifier.cs",
    "content": "﻿using FubuMVC.Core.Runtime;\nusing FubuMVC.Core.UI.Forms;\nusing HtmlTags.Conventions;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n\tpublic class NotificationSerializationModifier : ITagModifier<FormRequest>\n\t{\n\t\tpublic bool Matches(FormRequest token)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tpublic void Modify(FormRequest request)\n\t\t{\n\t\t\tvar validation = request.Chain.ValidationNode();\n\t\t\tif (validation.IsEmpty()) return;\n\n\t\t\tvar notification = request.Services.GetInstance<IFubuRequest>().Get<Notification>();\n\t\t\tif (notification.IsValid()) return;\n\n\t\t\tvar continuation = request.Services.GetInstance<IAjaxContinuationResolver>().Resolve(notification);\n\t\t\tcontinuation.ValidationOrigin(ValidationOrigin.Server);\n\t\t\trequest.CurrentTag.Data(\"validation-results\", continuation.ToDictionary());\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/NumberElementModifier.cs",
    "content": "using FubuCore;\nusing FubuMVC.Core.UI.Elements;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public class NumberElementModifier : InputElementModifier\n    {\n        public override bool Matches(ElementRequest token)\n        {\n            return token.Accessor.PropertyType.IsNumeric();\n        }\n\n        protected override void modify(ElementRequest request)\n        {\n            request.CurrentTag.AddClass(\"number\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/RangeLengthModifier.cs",
    "content": "﻿using FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public class RangeLengthModifier : InputElementModifier\n    {\n        protected override void modify(ElementRequest request)\n        {\n            ForRule<RangeLengthFieldRule>(request, rule => request.CurrentTag.Data(\"rangelength\", rule.ToValues()));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/RegularExpressionModifier.cs",
    "content": "﻿using FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n\tpublic class RegularExpressionModifier : InputElementModifier\n\t{\n\t\tprotected override void modify(ElementRequest request)\n\t\t{\n\t\t\tForRule<RegularExpressionFieldRule>(request, rule => request.CurrentTag.Data(\"regex\", rule.Expression.ToString()));\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/RemoteValidationElementModifier.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Urls;\nusing FubuMVC.Core.Validation.Web.Remote;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public class RemoteValidationElementModifier : InputElementModifier\n    {\n        protected override void modify(ElementRequest request)\n        {\n            var graph = request.Get<RemoteRuleGraph>();\n            var rules = graph.RulesFor(request.Accessor);\n            var data = new RemoteValidationDef\n            {\n                rules = rules.Select(x => x.ToHash()).ToArray(),\n                url = request.Get<IUrlRegistry>().RemoteRule()\n            };\n\n            if (!data.rules.Any())\n            {\n                return;\n            }\n\n            request.CurrentTag.Data(\"remote-rule\", data);\n        }\n    }\n\n    public class RemoteValidationDef\n    {\n        public string url { get; set; }\n        public string[] rules { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/RenderingStrategies.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.UI.Forms;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public class RenderingStrategies : IRenderingStrategy\n\t{\n\t\tpublic static readonly RenderingStrategies Summary = new RenderingStrategies(\"Summary\", x => x.CurrentTag.Data(\"validation-summary\", true));\n\t\tpublic static readonly RenderingStrategies Highlight = new RenderingStrategies(\"Highlight\", x => x.CurrentTag.Data(\"validation-highlight\", true));\n\t\tpublic static readonly RenderingStrategies Inline = new RenderingStrategies(\"Inline\", x => x.CurrentTag.Data(\"validation-inline\", true));\n\n\t\tprivate readonly string _name;\n\t\tprivate readonly Action<FormRequest> _modify;\n\n\t\tpublic RenderingStrategies(string name, Action<FormRequest> modify)\n\t\t{\n\t\t\t_name = name;\n\t\t\t_modify = modify;\n\t\t}\n\n\t\tpublic string Name { get { return _name; } }\n\n\t\tpublic void Modify(FormRequest request)\n\t\t{\n\t\t\t_modify(request);\n\t\t}\n\n\t\tpublic override string ToString()\n\t\t{\n\t\t\treturn \"Rendering Strategy: {0}\".ToFormat(_name);\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/RuleAliases.cs",
    "content": "﻿using System;\nusing FubuCore.Util;\nusing FubuMVC.Core.Validation.Fields;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n\tpublic class RuleAliases\n\t{\n\t\tprivate static readonly Cache<Type, string> Aliases = new Cache<Type, string>(createRuleAlias);\n\n\t\tprivate static string createRuleAlias(Type type)\n\t\t{\n\t\t\t// RequiredFieldRule => required\n\t\t\treturn type.Name.Replace(\"Field\", \"\").Replace(\"Rule\", \"\").ToLower();\n\t\t}\n\n\t\tpublic static void RegisterAlias<T>(string alias)\n\t\t\twhere T : IFieldValidationRule\n\t\t{\n\t\t\tvar type = typeof (T);\n\t\t\tif (Aliases.Has(type))\n\t\t\t{\n\t\t\t\tAliases.Remove(type);\n\t\t\t}\n\n\t\t\tAliases.Fill(type, alias);\n\t\t}\n\n\t\tpublic static string AliasFor(IFieldValidationRule rule)\n\t\t{\n\t\t\treturn AliasFor(rule.GetType());\n\t\t}\n\n\t\tpublic static string AliasFor(Type type)\n\t\t{\n\t\t\treturn Aliases[type];\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/ValidationOptions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.UI.Forms;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    public class ValidationOptions\n    {\n        public const string Data = \"validation-options\";\n\n        private int _elementTimeout = ValidationNode.DefaultTimeout;\n        private readonly IList<FieldOptions> _fields = new List<FieldOptions>();\n\n        public FieldOptions[] fields { get { return _fields.ToArray(); } }\n\n        public int elementTimeout { get { return _elementTimeout; } }\n\n        protected bool Equals(ValidationOptions other)\n        {\n            return _fields.SequenceEqual(other._fields);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((ValidationOptions)obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return _fields.GetHashCode();\n        }\n\n        public static ValidationOptions For(FormRequest request)\n        {\n            var services = request.Services;\n            var type = services.GetInstance<ITypeResolver>().ResolveType(request.Input);\n            var cache = services.GetInstance<ITypeDescriptorCache>();\n            var options = new ValidationOptions();\n            var node = request.Chain.ValidationNode();\n\n            if (node == null)\n            {\n                return options;\n            }\n\n            options._elementTimeout = node.ElementTimeout;\n\n            cache.ForEachProperty(type, property =>\n            {\n                var accessor = new SingleProperty(property);\n\n                fillFields(options, node, services, accessor, request.Input == null ? property.DeclaringType : request.Input.GetType());\n            });\n\n            return options;\n        }\n\n        private static void fillFields(ValidationOptions options, IValidationNode node, IServiceLocator services, Accessor accessor, Type type)\n        {\n            var mode = node.DetermineMode(services, accessor);\n            var field = new FieldOptions\n            {\n                field = accessor.Name,\n                mode = mode.Mode\n            };\n\n            var graph = services.GetInstance<ValidationGraph>();\n            var rules = graph.FieldRulesFor(type, accessor);\n            var ruleOptions = new List<FieldRuleOptions>();\n\n            rules.Each(rule =>\n            {\n                var ruleMode = rule.Mode ?? mode;\n                ruleOptions.Add(new FieldRuleOptions\n                {\n                    rule = RuleAliases.AliasFor(rule),\n                    mode = ruleMode.Mode\n                });\n            });\n\n            field.rules = ruleOptions.ToArray();\n\n            options._fields.Add(field);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/UI/ValidationSummarySource.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Validation.Web.UI\n{\n    [Description(\"Validation Summary Endpoint\")]\n    public class ValidationSummarySource : IActionSource\n    {\n        public class ValidationSummaryController\n        {\n            public ValidationSummary Summary(ValidationSummary summary)\n            {\n                return new ValidationSummary();\n            }\n        }\n\n        Task<ActionCall[]> IActionSource.FindActions(Assembly applicationAssembly)\n        {\n            var actionCall = ActionCall.For<ValidationSummaryController>(x => x.Summary(null));\n            return Task.FromResult(new[] {actionCall});\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/ValidationActionFilter.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n\tpublic class ValidationActionFilter : ActionFilter, IHaveValidation\n\t{\n\t\tpublic ValidationActionFilter(Type handlerType, MethodInfo method) : base(handlerType, method)\n\t\t{\n            Validation = ValidationNode.Default();\n\t\t}\n\n        public ValidationNode Validation { get; private set; }\n\n\t\tpublic static ActionFilter ValidationFor<T>(Expression<Func<T, object>> method)\n\t\t{\n\t\t\treturn new ValidationActionFilter(typeof(T), ReflectionHelper.GetMethod<T>(method));\n\t\t}\n\t}\n\n    public class ValidationActionFilter<T>\n    {\n        private readonly IValidationFilter<T> _filter;\n        private readonly IFubuRequest _request;\n\n        public ValidationActionFilter(IValidationFilter<T> filter, IFubuRequest request)\n        {\n            _filter = filter;\n            _request = request;\n        }\n\n        public FubuContinuation Validate(T input)\n        {\n            var notification = _filter.Validate(input);\n            if(notification.IsValid())\n            {\n                return FubuContinuation.NextBehavior();\n            }\n\n            _request.Set(notification);\n            return FubuContinuation.TransferTo(input, categoryOrHttpMethod: \"GET\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/ValidationAjaxExtensions.cs",
    "content": "﻿using FubuMVC.Core.Ajax;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n\tpublic class ValidationOrigin\n\t{\n\t\tpublic static readonly string Client = \"client\";\n\t\tpublic static readonly string Server = \"server\";\n\t}\n\n\tpublic static class ValidationAjaxExtensions\n\t{\n\t\tprivate const string OriginKey = \"validationOrigin\";\n\n\t\tpublic static AjaxContinuation ValidationOrigin(this AjaxContinuation continuation, string origin)\n\t\t{\n\t\t\tcontinuation[OriginKey] = origin;\n\t\t\treturn continuation;\n\t\t}\n\n\t\tpublic static string ValidationOrigin(this AjaxContinuation continuation)\n\t\t{\n\t\t\tif (continuation.HasData(OriginKey))\n\t\t\t{\n\t\t\t\treturn continuation[OriginKey].ToString();\n\t\t\t}\n\n\t\t\treturn Web.ValidationOrigin.Server;\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/ValidationBehaviorChainExtensions.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n\tpublic static class ValidationBehaviorChainExtensions\n\t{\n\t\t public static ValidationNode ValidationNode(this BehaviorChain chain)\n\t\t {\n\t\t\t var node = chain.OfType<IHaveValidation>().SingleOrDefault();\n             if (node != null)\n             {\n                 return node.Validation;\n             }\n\n\t\t     return Web.ValidationNode.Empty();\n\t\t }\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/ValidationFilter.cs",
    "content": "namespace FubuMVC.Core.Validation.Web\n{\n    public interface IValidationFilter<T>\n    {\n        Notification Validate(T input);\n    }\n\n    public class ValidationFilter<T> : IValidationFilter<T>\n    {\n        private readonly IValidator _validator;\n        private readonly IModelBindingErrors _errors;\n\n        public ValidationFilter(IValidator validator, IModelBindingErrors errors)\n        {\n            _validator = validator;\n            _errors = errors;\n        }\n\n        public Notification Validate(T input)\n        {\n            var notification = _validator.Validate(input);\n            \n            _errors.AddAnyErrors<T>(notification);\n\n            return notification;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/ValidationHtmlConventions.cs",
    "content": "using FubuMVC.Core.UI;\nusing FubuMVC.Core.Validation.Web.UI;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n    public class ValidationHtmlConventions : HtmlConventionRegistry\n    {\n        public ValidationHtmlConventions()\n        {\n            Editors.Add(new FieldValidationElementModifier());\n            Editors.Add(new RemoteValidationElementModifier());\n            Editors.Add(new DateElementModifier());\n            Editors.Add(new NumberElementModifier());\n            Editors.Add(new MaximumLengthModifier());\n            Editors.Add(new MinimumLengthModifier());\n            Editors.Add(new RangeLengthModifier());\n            Editors.Add(new MinValueModifier());\n            Editors.Add(new MaxValueModifier());\n            Editors.Add(new LocalizationLabelModifier());\n            Editors.Add(new RegularExpressionModifier());\n\n            Forms.Add(new FormValidationSummaryModifier());\n            Forms.Add(new FormValidationModifier());\n            Forms.Add(new FieldEqualityFormModifier());\n            Forms.Add(new NotificationSerializationModifier());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/ValidationModeAttributePolicy.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuCore.Reflection;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n\t[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property, AllowMultiple = false)]\n\tpublic class ValidationModeAttribute : Attribute\n\t{\n\t\tprivate readonly ValidationMode _mode;\n\n\t\tprotected ValidationModeAttribute(ValidationMode mode)\n\t\t{\n\t\t\t_mode = mode;\n\t\t}\n\n\t\tpublic ValidationMode Mode\n\t\t{\n\t\t\tget { return _mode; }\n\t\t}\n\t}\n\n\tpublic class LiveValidationAttribute : ValidationModeAttribute\n\t{\n\t\tpublic LiveValidationAttribute()\n\t\t\t: base(ValidationMode.Live)\n\t\t{\n\t\t}\n\t}\n\n\tpublic class TriggeredValidationAttribute : ValidationModeAttribute\n\t{\n\t\tpublic TriggeredValidationAttribute()\n\t\t\t: base(ValidationMode.Triggered)\n\t\t{\n\t\t}\n\t}\n\n\tpublic class ValidationModeAttributePolicy : IValidationModePolicy\n\t{\n\t\tpublic bool Matches(IServiceLocator services, Accessor accessor)\n\t\t{\n\t\t\treturn accessor.HasAttribute<ValidationModeAttribute>()\n\t\t\t\t|| accessor.OwnerType.HasAttribute<ValidationModeAttribute>();\n\t\t}\n\n\t\tpublic ValidationMode DetermineMode(IServiceLocator services, Accessor accessor)\n\t\t{\n\t\t\tif (accessor.OwnerType.HasAttribute<ValidationModeAttribute>())\n\t\t\t{\n\t\t\t\treturn accessor.OwnerType.GetAttribute<ValidationModeAttribute>().Mode;\n\t\t\t}\n\n\t\t\treturn accessor.GetAttribute<ValidationModeAttribute>().Mode;\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/ValidationNode.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.UI.Forms;\nusing FubuMVC.Core.Validation.Web.UI;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n    public interface IValidationNode\n    {\n        void Modify(FormRequest request);\n\n        ValidationMode DetermineMode(IServiceLocator services, Accessor accessor);\n    }\n\n    public class ValidationNode : IValidationNode, IEnumerable<IRenderingStrategy>\n    {\n        public const int DefaultTimeout = 500;\n\n        private ValidationMode _mode;\n        private readonly IList<IRenderingStrategy> _strategies = new List<IRenderingStrategy>();\n        private readonly IList<IValidationModePolicy> _policies = new List<IValidationModePolicy>();\n\n        public ValidationNode()\n        {\n            DefaultMode(ValidationMode.Live);\n\n            ElementTimeout = DefaultTimeout;\n\n            RegisterPolicy(new ValidationModeAttributePolicy());\n            RegisterPolicy(new AccessorRulesValidationModePolicy());\n        }\n\n        public int ElementTimeout { get; set; }\n\n        public ValidationMode Mode\n        {\n            get { return _mode; }\n        }\n\n        public void DefaultMode(ValidationMode mode)\n        {\n            _mode = mode;\n        }\n\n        public bool IsEmpty()\n        {\n            return !_strategies.Any();\n        }\n\n        void IValidationNode.Modify(FormRequest request)\n        {\n            Each(x => x.Modify(request));\n        }\n\n        ValidationMode IValidationNode.DetermineMode(IServiceLocator services, Accessor accessor)\n        {\n            var policy = _policies.LastOrDefault(x => x.Matches(services, accessor));\n            if (policy != null)\n            {\n                return policy.DetermineMode(services, accessor);\n            }\n\n            return _mode;\n        }\n\n        public void RegisterStrategy(IRenderingStrategy strategy)\n        {\n            _strategies.Fill(strategy);\n        }\n\n        public void RegisterPolicy(IValidationModePolicy policy)\n        {\n            _policies.Fill(policy);\n        }\n\n        public void Each(Action<IRenderingStrategy> action)\n        {\n            _strategies.Each(action);\n        }\n\n        public void Clear()\n        {\n            _strategies.Clear();\n        }\n\n        public IEnumerator<IRenderingStrategy> GetEnumerator()\n        {\n            return _strategies.GetEnumerator();\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != GetType()) return false;\n            return Equals((ValidationNode)obj);\n        }\n\n        protected bool Equals(ValidationNode other)\n        {\n            return _strategies.SequenceEqual(other._strategies);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return (_strategies.GetHashCode() * 397);\n            }\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return GetEnumerator();\n        }\n\n        public static ValidationNode Empty()\n        {\n            return new ValidationNode();\n        }\n\n        public static ValidationNode Default()\n        {\n            var validation = new ValidationNode();\n\n            validation.RegisterStrategy(RenderingStrategies.Summary);\n            validation.RegisterStrategy(RenderingStrategies.Highlight);\n\n            return validation;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/ValidationNodeModification.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n\tpublic class ValidationNodeModification\n\t{\n\t\tprivate readonly Func<BehaviorChain, bool> _filter;\n\t\tprivate readonly Action<ValidationNode> _action;\n\n\t\tpublic ValidationNodeModification(Func<BehaviorChain, bool> filter, Action<ValidationNode> action)\n\t\t{\n\t\t\t_filter = filter;\n\t\t\t_action = action;\n\t\t}\n\n\t\tpublic bool Matches(BehaviorChain chain)\n\t\t{\n\t\t\treturn _filter(chain);\n\t\t}\n\n\t\tpublic void Modify(BehaviorChain chain)\n\t\t{\n\t\t\t_action(chain.ValidationNode());\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/ValidationPolicy.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n    public class ValidationPolicy : IConfigurationAction\n    {\n        public void Configure(BehaviorGraph graph)\n        {\n            var settings = graph.Settings.Get<ValidationSettings>();\n            var filter = settings.As<IApplyValidationFilter>();\n\n            graph\n                .Actions()\n                .Where(call => filter.Filter(call.ParentChain()))\n                .Each(call => ApplyValidation(call, settings));\n        }\n\n        public static void ApplyValidation(ActionCall call, ValidationSettings settings)\n        {\n            BehaviorNode node;\n            if(call.ResourceType().CanBeCastTo<AjaxContinuation>())\n            {\n                node = new AjaxValidationNode(call);\n            }\n            else\n            {\n                var builder = typeof (LoFiValidationNodeBuilder<>).CloseAndBuildAs<IValidationNodeBuilder>(call.InputType());\n                node = builder.BuildNode();\n            }\n\n\t\t\tcall.AddBefore(node);\n\t\t\tsettings.Modify(call.ParentChain());\n        }\n\n        public interface IValidationNodeBuilder\n        {\n            BehaviorNode BuildNode();\n        }\n\n        public class LoFiValidationNodeBuilder<T> : IValidationNodeBuilder where T : class\n        {\n            public BehaviorNode BuildNode()\n            {\n\t\t\t\treturn ValidationActionFilter.ValidationFor<ValidationActionFilter<T>>(x => x.Validate(null));\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/ValidationSettings.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing FubuCore;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Validation.Web.Remote;\nusing FubuMVC.Core.Validation.Web.UI;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n    public interface IApplyValidationFilter\n    {\n        bool Filter(BehaviorChain chain);\n    }\n\n    public interface IFormActivationFilter\n    {\n        bool ShouldActivate(BehaviorChain chain);\n    }\n\n    public class ValidationSettings : ValidationSettingsRegistry, IApplyValidationFilter, IFormActivationFilter, IFeatureSettings\n    {\n        private readonly IList<IRemoteRuleFilter> _remoteFilters = new List<IRemoteRuleFilter>();\n\n        public ValidationSettings()\n        {\n            FailAjaxRequestsWith(HttpStatusCode.BadRequest);\n\n            Remotes\n                    .FindWith<RemoteRuleAttributeFilter>()\n                    .FindWith<RemoteFieldValidationRuleFilter>();\n        }\n\n        public HttpStatusCode StatusCode { get; private set; }\n        public RemoteRuleExpression Remotes => new RemoteRuleExpression(_remoteFilters);\n        public IEnumerable<IRemoteRuleFilter> Filters => _remoteFilters;\n\n        public Func<BehaviorChain, bool> ExcludeFormActivation { get; set; } = chain => false;\n\n        public Func<BehaviorChain, bool> Where { get; set; } =\n            chain => chain is RoutedChain && chain.As<RoutedChain>().MatchesCategoryOrHttpMethod(\"POST\") && chain.InputType() != null && !chain.Calls.Any(x => x.HasAttribute<NotValidatedAttribute>());\n        \n        public void Import<T>()\n            where T : ValidationSettingsRegistry, new()\n        {\n            var registry = new T();\n            registry.Modifications.Each(addModification);\n        }\n\n        public void FailAjaxRequestsWith(HttpStatusCode statusCode)\n        {\n            StatusCode = statusCode;\n        }\n\n        public bool Filter(BehaviorChain chain)\n        {\n            return Where(chain);\n        }\n\n        bool IFormActivationFilter.ShouldActivate(BehaviorChain chain)\n        {\n            return Where(chain) && !ExcludeFormActivation(chain);\n        }\n\n        public void Modify(BehaviorChain chain)\n        {\n            Modifications\n                .Where(x => x.Matches(chain))\n                .Each(x => x.Modify(chain));\n        }\n\n        public bool Enabled { get; set; }\n\n        public void Apply(FubuRegistry registry)\n        {\n            registry.Services.IncludeRegistry<FubuValidationServiceRegistry>();\n\n            if (!Enabled) return;\n\n            registry.Services.IncludeRegistry<FubuMvcValidationServices>();\n            registry.Actions.FindWith<RemoteRulesSource>();\n            registry.Actions.FindWith<ValidationSummarySource>();\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/ValidationSettingsRegistry.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n\tpublic class ValidationSettingsRegistry\n\t{\n\t\tprivate readonly IList<ValidationNodeModification> _modifications = new List<ValidationNodeModification>(); \n\n\n\t\tpublic void ForChainsMatching(Func<BehaviorChain, bool> filter, Action<ValidationNode> action)\n\t\t{\n\t\t\taddModification(new ValidationNodeModification(filter, action));\n\t\t}\n\n\t\tpublic void ForInputType<T>(Action<ValidationNode> action)\n\t\t{\n\t\t\tForChainsMatching(chain => chain is RoutedChain && chain.InputType() != null, action);\n\t\t}\n\t\t\n\t\tpublic void ForInputTypesMatching(Func<Type, bool> filter, Action<ValidationNode> action)\n\t\t{\n\t\t\tForChainsMatching(chain => chain.InputType() != null && filter(chain.InputType()), action);\n\t\t}\n\n\t\tprotected void addModification(ValidationNodeModification modification)\n\t\t{\n\t\t\t_modifications.Add(modification);\n\t\t}\n\n\t\tinternal IEnumerable<ValidationNodeModification> Modifications { get { return _modifications; } }\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/ValidationSummary.cs",
    "content": "﻿namespace FubuMVC.Core.Validation.Web\n{\n    public class ValidationSummary\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/Validation/Web/ValidationUrlRegistryExtensions.cs",
    "content": "﻿using FubuMVC.Core.Urls;\nusing FubuMVC.Core.Validation.Web.Remote;\n\nnamespace FubuMVC.Core.Validation.Web\n{\n    public static class ValidationUrlRegistryExtensions\n    {\n        public static string RemoteRule(this IUrlRegistry urls)\n        {\n            return urls.UrlFor(new ValidateField());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/Attachment/ViewBag.cs",
    "content": "using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Web.UI;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core.View.Model;\r\n\r\nnamespace FubuMVC.Core.View.Attachment\r\n{\r\n    /// <summary>\r\n    /// Represent a collection of <see cref=\"IViewToken\"/>s.\r\n    /// </summary>\r\n    public class ViewBag : IEnumerable<IViewToken>\r\n    {\r\n        private readonly IEnumerable<IViewToken> _views;\r\n\r\n        private readonly Cache<Type, IEnumerable<IViewToken>> _viewsByType\r\n            = new Cache<Type, IEnumerable<IViewToken>>();\r\n\r\n        public static ViewBag Empty()\r\n        {\r\n            return new ViewBag(new IViewToken[0]);\r\n        }\r\n\r\n        public ViewBag(IEnumerable<IViewToken> views)\r\n        {\r\n            _views = views;\r\n            _viewsByType.OnMissing = type => _views.Where(x => x.ViewModel == type);\r\n        }\r\n\r\n        public IEnumerable<IViewToken> ViewsFor(Type viewModelType)\r\n        {\r\n            return _viewsByType[viewModelType];\r\n        }\r\n\r\n        public IEnumerable<T> Templates<T>() where T : ITemplateFile\r\n        {\r\n            return _views.OfType<T>();\r\n        }\r\n\r\n        public IEnumerator<IViewToken> GetEnumerator()\r\n        {\r\n            return _views.GetEnumerator();\r\n        }\r\n\r\n        IEnumerator IEnumerable.GetEnumerator()\r\n        {\r\n            return GetEnumerator();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/AuthorizationOnPageExtensions.cs",
    "content": "﻿using FubuMVC.Core.Security.Authorization;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.View\n{\n    public static class AuthorizationOnPageExtensions\n    {\n        public static T ReadOnlyIfNotAuthorized<T>(this T tag) where T : HtmlTag\n        {\n            if (!tag.Authorized() && tag.TagName() == \"a\")\n            {\n                tag.Authorized(true);\n                tag.TagName(\"span\");\n            }\n\n            return tag;\n        }\n\n        public static HtmlTag RequiresAccessTo(this HtmlTag tag, params string[] roleName)\n        {\n            return tag.Authorized(tag.Authorized() && PrincipalRoles.IsInRole(roleName));\n        }\n\n\n\n        public static HtmlTag ReadOnly(this HtmlTag tag)\n        {\n            return ReadOnly(tag, true);\n        }\n\n        public static HtmlTag ReadOnly(this HtmlTag tag, bool condition)\n        {\n            if (condition)\n            {\n                tag.Attr(\"disabled\", \"disabled\");\n            }\n            return tag;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/AutoImportModelNamespacesConvention.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Linq;\nusing FubuMVC.Core.Registration;\n\nnamespace FubuMVC.Core.View\n{\n    [Description(\"Auto import view model namespaces into the views\")]\n    public class AutoImportModelNamespacesConvention : IConfigurationAction\n    {\n        public void Configure(BehaviorGraph graph)\n        {\n            var settings = graph.Settings.Get<CommonViewNamespaces>();\n            graph.Actions().Each(a =>\n            {\n                if (a.HasInput)\n                {\n                    AddImport(settings, () => a.InputType().Namespace);\n                }\n                if (a.HasOutput)\n                {\n                    AddImport(settings, () => a.OutputType().Namespace);\n                }\n            });\r\n\r\n            var viewEngines = graph.Settings.Get<ViewEngineSettings>();\r\n            viewEngines.Facilities.Each(x => x.ReadSharedNamespaces(settings));\r\n        }\n\n        private void AddImport(CommonViewNamespaces commonViewNamespaces, Func<string> namespaceSelector)\n        {\n            var modelNamespace = namespaceSelector();\n            if (!commonViewNamespaces.IgnoredNamespacesForAutoImport.Any(modelNamespace.StartsWith))\n            {\n                commonViewNamespaces.Add(modelNamespace);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/CommonViewNamespaces.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Web;\r\nusing FubuCore;\r\nusing HtmlTags;\r\n\r\nnamespace FubuMVC.Core.View\r\n{\r\n    public class CommonViewNamespaces\r\n    {\r\n        private readonly IList<string> _namespaces = new List<string>();\r\n        private readonly IList<string> _namespacesNotAutoImported = new List<string>();\r\n\r\n        public CommonViewNamespaces()\r\n        {\r\n            Add(typeof(VirtualPathUtility).Namespace); // System.Web\r\n            AddForType<string>(); // System\r\n            AddForType<FileSet>(); // FubuCore\r\n            AddForType<ParallelQuery>(); // System.Linq\r\n            AddForType<HtmlTag>(); // HtmlTags \r\n            AddForType<IViewToken>();\r\n        }\r\n\r\n        public void AddForType<T>()\r\n        {\r\n            _namespaces.Fill(typeof(T).Namespace);\r\n        }\r\n\r\n        public void DontAutoImportWhenNamespaceStartsWith(string namespacePrefix)\r\n        {\r\n            _namespacesNotAutoImported.Add(namespacePrefix);\r\n        }\r\n\r\n        public void Add(string @namespace)\r\n        {\r\n            _namespaces.Fill(@namespace);\r\n        }\r\n\r\n        public IEnumerable<string> Namespaces\r\n        {\r\n            get { return _namespaces; }\r\n        }\r\n\r\n        public IEnumerable<string> IgnoredNamespacesForAutoImport\r\n        {\r\n            get { return _namespacesNotAutoImported; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/DisplayConversionRegistryActivator.cs",
    "content": "using System.Collections.Generic;\nusing FubuCore.Formatting;\nusing FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Core.View\n{\n    // TODO -- get rid of this maybe?  Bring into BehaviorGraphBuilder?\n    public class DisplayConversionRegistryActivator : IActivator\n    {\n        private readonly IEnumerable<DisplayConversionRegistry> _registries;\n        private readonly Stringifier _stringifier;\n\n        public DisplayConversionRegistryActivator(IEnumerable<DisplayConversionRegistry> registries, Stringifier stringifier)\n        {\n            _registries = registries;\n            _stringifier = stringifier;\n        }\n\n        public void Activate(IActivationLog log, IPerfTimer timer)\n        {\n            _registries.Each(r =>\n            {\n                log.Trace(\"Adding \" + r);\n                r.Configure(_stringifier);\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/FubuHtmlDocument.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Urls;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.View\n{\n    public class FubuHtmlDocument : HtmlDocument, IFubuPage\n    {\n        private readonly IServiceLocator _services;\n\n        public FubuHtmlDocument(IServiceLocator services)\n        {\n            _services = services;\n            ElementPrefix = string.Empty;\n        }\n\n        public string ElementPrefix { get; set; }\n        public IServiceLocator ServiceLocator { get; set; }\n\n        public T Get<T>()\n        {\n            return _services.GetInstance<T>();\n        }\n\n        public T GetNew<T>()\n        {\n            return Get<T>();\n        }\n\n        public void Write(object content)\n        {\n            Get<IOutputWriter>().WriteHtml(content);\n        }\n\n        public IUrlRegistry Urls\n        {\n            get { return _services.GetInstance<IUrlRegistry>(); }\n        }\n\n        public void Add(Func<FubuHtmlDocument, HtmlTag> func)\n        {\n            Add(func(this));\n        }\n\n        public void Add(Func<FubuHtmlDocument, ITagSource> source)\n        {\n            source(this).AllTags().Each(Add);\n        }\n    }\n\n    public class FubuHtmlDocument<T> : FubuHtmlDocument, IFubuPage<T> where T : class\n    {\n        private readonly IFubuRequest _request;\n        private T _model;\n\n        public FubuHtmlDocument(IServiceLocator services, IFubuRequest request) : base(services)\n        {\n            _request = request;\n        }\n\n        public T Model\n        {\n            get\n            {\n                if (_model == null)\n                {\n                    _model = _request.Get<T>();\n                }\n                \n                return _model;\n            }\n            set { _model = value; }\n        }\n\n        public void ShowProp(Expression<Func<T, object>> property)\n        {\n            throw new NotImplementedException();\n            //Add(this.Show(property));\n        }\n\n        public void Add(Func<FubuHtmlDocument<T>, HtmlTag> func)\n        {\n            Add(func(this));\n        }\n\n        public void Add(Func<FubuHtmlDocument<T>, ITagSource> source)\n        {\n            source(this).AllTags().Each(Add);\n        }\n\n        public object GetModel()\n        {\n            return Model;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/FubuPageExtensions.cs",
    "content": "using System;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Runtime;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.View\n{\n    public static class FubuPageExtensions\n    {\n        public static bool InDevelopment(this IFubuPage page)\n        {\n            return page.Get<FubuRuntime>().Mode.InDevelopment();\n        }\n\n        public static string Version(this IFubuPage page)\n        {\n            return page.Get<BehaviorGraph>().Version;\n        }\n\n        /// <summary>\n        /// Generic html helper to create an authorization aware link.  Typically, you would only use\n        /// this method as a helper for more specific html helpers\n        /// </summary>\n        /// <param name=\"page\"></param>\n        /// <param name=\"finder\"></param>\n        /// <returns></returns>\n        public static HtmlTag AuthorizedLinkTo(this IFubuPage page, Func<IEndpointService, Endpoint> finder)\n        {\n            var endpoints = page.Get<IEndpointService>();\n            Endpoint endpoint = finder(endpoints);\n\n            return new LinkTag(string.Empty, endpoint.Url)\n                .Authorized(endpoint.IsAuthorized);\n        }\n\n        /// <summary>\n        /// Creates a link tag for the endpoint that accepts type T as the input.  This method is authorization aware.\n        /// </summary>\n        /// <typeparam name=\"TInputModel\"></typeparam>\n        /// <param name=\"page\"></param>\n        /// <returns></returns>\n        public static HtmlTag LinkTo<TInputModel>(this IFubuPage page) where TInputModel : class, new()\n        {\n            return page.LinkTo(new TInputModel());\n        }\n\n        /// <summary>\n        /// Creates a link tag for the input message.  This handler is authorization aware.\n        /// </summary>\n        /// <param name=\"page\"></param>\n        /// <param name=\"inputModel\"></param>\n        /// <returns></returns>\n        public static HtmlTag LinkTo(this IFubuPage page, object inputModel)\n        {\n            if (inputModel == null)\n            {\n                return new HtmlTag(\"a\").Authorized(false);\n            }\n\n            return page.AuthorizedLinkTo(x => x.EndpointFor(inputModel, \"GET\"));\n        }\n\n        /// <summary>\n        /// Creates a link tag pointing to the controller/endpoint method.  Nothing is output\n        /// if the user is not authorized to view this resource\n        /// </summary>\n        /// <typeparam name=\"TController\"></typeparam>\n        /// <param name=\"page\"></param>\n        /// <param name=\"actionExpression\"></param>\n        /// <returns></returns>\n        public static HtmlTag LinkTo<TController>(this IFubuPage page, Expression<Action<TController>> actionExpression)\n        {\n            return page.AuthorizedLinkTo(x => x.EndpointFor(actionExpression, \"GET\"));\n        }\n\n        /// <summary>\n        /// Creates a link tag pointing to the endpoint that is marked as \n        /// creating type T\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"page\"></param>\n        /// <returns></returns>\n        public static HtmlTag LinkToNew<T>(this IFubuPage page)\n        {\n            return page.AuthorizedLinkTo(x => x.EndpointForNew<T>());\n        }\n\n        /// <summary>\n        /// Generates a json variable to the url for the \"input\" object like:\n        /// var [variable] = '[IUrlRegistry.UrlFor(input)]';\n        /// </summary>\n        /// <param name=\"page\"></param>\n        /// <param name=\"variable\"></param>\n        /// <param name=\"input\"></param>\n        /// <param name=\"categoryOrHttpMethod\">Default is \"GET\"</param>\n        /// <returns></returns>\n        public static string LinkVariable(this IFubuPage page, string variable, object input, string categoryOrHttpMethod = \"GET\")\n        {\n            string url = page.Urls.UrlFor(input, categoryOrHttpMethod);\n            return \"var {0} = '{1}';\".ToFormat(variable, url);\n        }\n\n        /// <summary>\n        /// Creates a json variable to the url for the input type T\n        /// var [variable] = '[IUrlRegistry.UrlFor<T>()]'\n        /// </summary>\n        /// <typeparam name=\"TInput\"></typeparam>\n        /// <param name=\"page\"></param>\n        /// <param name=\"variable\"></param>\n        /// <returns></returns>\n        public static string LinkVariable<TInput>(this IFubuPage page, string variable, string categoryOrHttpMethod = \"GET\") where TInput : new()\n        {\n            return page.LinkVariable(variable, new TInput(), categoryOrHttpMethod);\n        }\n\n\n        /// <summary>\n        /// Exercises the IElementNamingConvention to determine the element name for an expression\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"page\"></param>\n        /// <param name=\"expression\"></param>\n        /// <returns></returns>\n        public static string ElementNameFor<T>(this IFubuPage<T> page, Expression<Func<T, object>> expression)\n            where T : class\n        {\n            return expression.ToAccessor().Name;\n        }\n\n        /// <summary>\n        /// Explicit helper to generate an <input type=\"text\"></input> html element for \n        /// a property on the current view model\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"page\"></param>\n        /// <param name=\"expression\"></param>\n        /// <returns></returns>\n        public static TextboxTag TextBoxFor<T>(this IFubuPage<T> page, Expression<Func<T, object>> expression)\n            where T : class\n        {\n            string name = ElementNameFor(page, expression);\n            var value = page.Model.ValueOrDefault(expression);\n            return new TextboxTag(name, (value == null) ? \"\" : value.ToString());\n        }\n\n        /// <summary>\n        /// Generates an html element like:  <span>[text]</span>\n        /// </summary>\n        /// <param name=\"page\"></param>\n        /// <param name=\"text\"></param>\n        /// <returns></returns>\n        public static HtmlTag Span(this IFubuPage page, string text)\n        {\n            return new HtmlTag(\"span\").Text(text);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/HtmlTagExtensions.cs",
    "content": "using System;\nusing System.Linq;\nusing FubuCore;\nusing HtmlTags;\n\nnamespace FubuMVC.Core.View\n{\n    public static class HtmlTagExtensions\n    {\n\n        // TODO -- get almost all of this into HtmlTAgs\n        public static HtmlTag ForChild(this ITagSource parent, string tagName)\n        {\n            return parent.AllTags().First(child => child.TagName().EqualsIgnoreCase(tagName));\n        }\n\n        public static T TextIfEmpty<T>(this T tag, string defaultText) where T : HtmlTag\n        {\n            if (tag.TagName().EqualsIgnoreCase(\"input\")) throw new InvalidOperationException(\"You are attempting to set the inner text on an INPUT tag. If you wanted a textarea, call MultilineMode() first.\");\n            if (tag.Text().IsEmpty())\n            {\n                tag.Text(defaultText);\n            }\n\n            return tag;\n        }\n\n\n        // TODO - get this into HtmlTAgs itself\n        public static HtmlTag Name(this HtmlTag tag, string name)\n        {\n            return tag.Attr(\"name\", name);\n        }\n\n        // TODO - get this into HtmlTAgs itself\n        public static HtmlTag Value(this HtmlTag tag, string value)\n        {\n            return tag.Attr(\"value\", value);\n        }\n\n        public static string Mustached(this string key)\n        {\n            return \"{{\" + key + \"}}\";\n        }\n\n        public static HtmlTag MustacheAttr(this HtmlTag tag, string attributeName, string key)\n        {\n            return tag.Attr(attributeName, key.Mustached());\n        }\n\n        public static HtmlTag MustacheValue(this HtmlTag tag, string key)\n        {\n            return tag.Value(key.Mustached());\n        }\n\n        public static HtmlTag MustacheText(this HtmlTag tag, string key)\n        {\n            return tag.Text(key.Mustached());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/IFubuView.cs",
    "content": "using FubuCore;\r\nusing FubuMVC.Core.Urls;\r\n\r\nnamespace FubuMVC.Core.View\r\n{\r\n    public interface IFubuPage\r\n    {\r\n        string ElementPrefix { get; set; }\r\n        IServiceLocator ServiceLocator { get; set; }\r\n        IUrlRegistry Urls { get; }\r\n        T Get<T>();\r\n        T GetNew<T>();\r\n        void Write(object content);\r\n    }\r\n\r\n    public interface IFubuPageWithModel : IFubuPage\r\n    {\r\n        object GetModel();\r\n    }\r\n\r\n    public interface IFubuPage<TViewModel> : IFubuPageWithModel where TViewModel : class\r\n    {\r\n        TViewModel Model { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/IViewFacility.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.View.Model;\r\n\r\nnamespace FubuMVC.Core.View\r\n{\r\n    /// <summary>\r\n    /// Implement this contract to provide a service which allows to obatin\r\n    /// <see cref=\"IViewToken\"/>s based on a <see cref=\"TypePool\"/> and the\r\n    /// relevant <see cref=\"BehaviorGraph\"/>\r\n    /// </summary>\r\n    public interface IViewFacility\r\n    {\r\n        void Fill(ViewEngineSettings settings, BehaviorGraph graph, IPerfTimer timer, IFubuApplicationFiles files);\r\n        IEnumerable<IViewToken> AllViews();\r\n\r\n        ITemplateFile FindInShared(string viewName);\r\n        ViewEngineSettings Settings { get; set; }\r\n\r\n        Type TemplateType { get; }\r\n\r\n        void AttachViewModels(ViewTypePool types, ITemplateLogger logger);\r\n\r\n        void ReadSharedNamespaces(CommonViewNamespaces namespaces);\r\n        void AttachLayouts(ViewEngineSettings settings);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/IViewToken.cs",
    "content": "using System;\r\nusing FubuMVC.Core.View.Model;\r\n\r\nnamespace FubuMVC.Core.View\r\n{\r\n    public interface IViewToken\r\n    {\r\n        string Namespace { get; }\r\n        Type ViewModel { get;  }\r\n\r\n        string Name();\r\n        void AttachViewModels(ViewTypePool types, ITemplateLogger logger);\r\n\r\n        string FilePath { get; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/ImageTag.cs",
    "content": "﻿using HtmlTags;\n\nnamespace FubuMVC.Core.View\n{\n    // TODO -- move this to HtmlTags!!!!!\n    public class ImageTag : HtmlTag\n    {\n        public ImageTag(string url)\n            : base(\"img\")\n        {\n            Attr(\"src\", url);\n        }\n\n        public ImageTag Width(int width)\n        {\n            Style(\"width\", width + \"px\");\n            return this;\n        }\n\n        public ImageTag Height(int height)\n        {\n            Style(\"height\", height + \"px\");\n            return this;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/Model/ITemplateFile.cs",
    "content": "using System;\r\nusing FubuMVC.Core.View.Rendering;\r\n\r\nnamespace FubuMVC.Core.View.Model\r\n{\r\n    // TODO -- look to see how much of this can be thinned down\r\n    public interface ITemplateFile : IViewToken\r\n    {\r\n        string ViewPath { get; }\r\n\r\n        Parsing Parsing { get; }\r\n\r\n        string RelativePath();\r\n        string DirectoryPath();\r\n        string RelativeDirectoryPath();\r\n\r\n        bool IsPartial();\r\n\r\n        ITemplateFile Master { get; set; }\r\n\r\n        IRenderableView GetView();\r\n        IRenderableView GetPartialView();\r\n\r\n        void AttachLayouts(string defaultLayoutName, IViewFacility facility, ITemplateFolder folder);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/Model/Parsing.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Core.View.Model\r\n{\r\n    public class Parsing\r\n    {\r\n        public Parsing()\r\n        {\r\n            Namespaces = Enumerable.Empty<string>();\r\n        }\r\n\r\n        public string ViewModelType { get; set; }\r\n        public string Master { get; set; }\r\n        public IEnumerable<string> Namespaces { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/Model/Template.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.View.Rendering;\r\n\r\nnamespace FubuMVC.Core.View.Model\r\n{\r\n    public abstract class Template : ITemplateFile\r\n    {\r\n        private readonly Lazy<Parsing> _parsing;\r\n        private ITemplateFile _master;\r\n\r\n        public Template(IFubuFile file, IFubuApplicationFiles files)\r\n        {\r\n            _file = file;\r\n\r\n\r\n            _parsing = new Lazy<Parsing>(() => createParsing(files));\r\n\r\n\r\n            _relativeDirectoryPath = _file.RelativePath.ParentDirectory().Replace('\\\\', '/');\r\n        }\r\n\r\n        public Parsing Parsing\r\n        {\r\n            get { return _parsing.Value; }\r\n        }\r\n\r\n        protected abstract Parsing createParsing(IFubuApplicationFiles files);\r\n\r\n        public string FilePath\r\n        {\r\n            get { return _file.Path; }\r\n        }\r\n\r\n\r\n        public string ViewPath\r\n        {\r\n            get { return _file.RelativePath; }\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return FilePath;\r\n        }\r\n\r\n        public string RelativePath()\r\n        {\r\n            return _file.RelativePath;\r\n        }\r\n\r\n        public string DirectoryPath()\r\n        {\r\n            return Path.GetDirectoryName(FilePath);\r\n        }\r\n\r\n        private readonly string _relativeDirectoryPath;\r\n        private readonly IFubuFile _file;\r\n\r\n        public string RelativeDirectoryPath()\r\n        {\r\n            return _relativeDirectoryPath;\r\n        }\r\n\r\n        public string Name()\r\n        {\r\n            return Path.GetFileNameWithoutExtension(FilePath);\r\n        }\r\n\r\n\r\n        public virtual bool IsPartial()\r\n        {\r\n            return Path.GetFileName(FilePath).StartsWith(\"_\");\r\n        }\r\n\r\n        public string Namespace\r\n        {\r\n            get\r\n            {\r\n                if (ViewModel == null) return string.Empty;\r\n\r\n                var nspace = ViewModel.Assembly.GetName().Name;\r\n                var relativePath = RelativePath();\r\n                var relativeNamespace = Path.GetDirectoryName(relativePath);\r\n\r\n                if (relativeNamespace.IsNotEmpty())\r\n                {\r\n                    nspace += \".\" + relativeNamespace.Replace(Path.DirectorySeparatorChar, '.');\r\n                }\r\n\r\n                return nspace;\r\n            }\r\n        }\r\n\r\n        public Type ViewModel { get; set; }\r\n\r\n\r\n        // Tested through integration tests\r\n        public void AttachViewModels(ViewTypePool types, ITemplateLogger logger)\r\n        {\r\n            if (IsPartial()) return;\r\n\r\n            var typeName = Parsing.ViewModelType;\r\n            if (typeName.IsEmpty()) return;\r\n\r\n            ViewModel = types.FindTypeByName(typeName, message => logger.Log(this, message));\r\n        }\r\n\r\n        public ITemplateFile Master\r\n        {\r\n            get { return _master; }\r\n            set\r\n            {\r\n                if (value != null && ReferenceEquals(value, this)) return;\r\n\r\n                if (value != null && value.GetType() != GetType())\r\n                {\r\n                    throw new ArgumentOutOfRangeException(\"value\",\r\n                        \"Mismatch in template types between {0} and {1}\".ToFormat(value.GetType().FullName,\r\n                            GetType().FullName));\r\n                }\r\n\r\n                // This prevents Stackoverflow problems\r\n                if (value != null && value.Parsing.Master == Name()) return;\r\n\r\n\r\n                _master = value;\r\n            }\r\n        }\r\n\r\n        public string ProfileName { get; set; }\r\n\r\n        public abstract IRenderableView GetView();\r\n        public abstract IRenderableView GetPartialView();\r\n\r\n        public void AttachLayouts(string defaultLayoutName, IViewFacility facility, ITemplateFolder folder)\r\n        {\r\n            if (IsPartial()) return;\r\n            if (Master != null) return;\r\n\r\n            if (Parsing.Master == string.Empty) return;\r\n\r\n            var layoutName = Parsing.Master.IsEmpty() ? defaultLayoutName : Parsing.Master;\r\n\r\n            if (layoutName.EqualsIgnoreCase(\"none\")) return;\r\n\r\n            if (layoutName == Name()) return;\r\n\r\n\r\n            Master = folder.FindRecursivelyInShared(layoutName)\r\n                     ?? facility.FindInShared(layoutName);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/Model/TemplateLogger.cs",
    "content": "﻿using System;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\n\r\nnamespace FubuMVC.Core.View.Model\r\n{\r\n    public interface ITemplateLogger\r\n    {\r\n        void Log(ITemplateFile template, string format, params object[] args);\r\n        void Log(ITemplateFile template, string text);\r\n    }\r\n\r\n    public class NulloLogger : ITemplateLogger\r\n    {\r\n        public void Log(ITemplateFile template, string format, params object[] args) { }\r\n        public void Log(ITemplateFile template, string text) { }\r\n    }\r\n\r\n    public class TemplateLogger : ITemplateLogger\r\n    {\r\n        private readonly IActivationDiagnostics _diagnostics;\r\n\r\n        public TemplateLogger(IActivationDiagnostics diagnostics)\r\n        {\r\n            _diagnostics = diagnostics;\r\n        }\r\n\r\n        public void Log(ITemplateFile template, string format, params object[] args)\r\n        {\r\n            formatTrace(template, format, args);\r\n        }\r\n\r\n        public void Log(ITemplateFile template, string text)\r\n        {\r\n            trace(template, text);\r\n        }\r\n\r\n        public static ITemplateLogger Default(IActivationDiagnostics diagnostics)\r\n        {\r\n            return new TemplateLogger(diagnostics);\r\n        }\r\n\r\n        private IActivationLog getPackageLogger(ITemplateFile template)\r\n        {\r\n            return _diagnostics.LogFor(template);\r\n        }\r\n\r\n        private void formatTrace(ITemplateFile template, string format, object[] args)\r\n        {\r\n            getPackageLogger(template).Trace(format, args);\r\n        }\r\n\r\n        private void trace(ITemplateFile template, string text)\r\n        {\r\n            getPackageLogger(template).Trace(text);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/Model/ViewCollection.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Runtime.Files;\n\nnamespace FubuMVC.Core.View.Model\n{\n    // Tested through integration tests only\n    public class ViewCollection<T> where T : class, ITemplateFile\n    {\n        private readonly ViewFacility<T> _facility;\n        private readonly IFubuApplicationFiles _files;\n        private readonly Func<IFubuFile, T> _builder;\n        private readonly ViewEngineSettings _settings;\n        private readonly FileSet _match;\n        private readonly IList<ViewFolder<T>> _folders = new List<ViewFolder<T>>();\n        private readonly ViewFolder<T> _top;\n\n        public ViewCollection(ViewFacility<T> facility, IFubuApplicationFiles files, Func<IFubuFile, T> builder, ViewEngineSettings settings, FileSet match)\n        {\n            if (match == null) throw new ArgumentNullException(\"match\");\n            _facility = facility;\n            _files = files;\n            _builder = builder;\n            _settings = settings;\n            _match = match;\n\n            _top = buildFolder(_files.RootPath);\n        }\n\n\n        private ViewFolder<T> buildFolder(string path)\n        {\n            var applicationPath = _files.RootPath;\n            var views = ViewEngineSettings.FileSystem.FindFiles(path, _match).Select(x =>\n            {\n                return new FubuFile(x)\n                {\n                    RelativePath = x.PathRelativeTo(applicationPath)\n                };\n            })\n                .Select(_builder).Where(x => !_settings.IsExcluded(x));\n\n            var folder = new ViewFolder<T>(path) {IsShared = _settings.IsSharedFolder(path)};\n            folder.RelativePath = string.Empty;\n            folder.Views.AddRange(views);\n\n            _folders.Add(folder);\n\n\n            ViewEngineSettings.FileSystem.ChildDirectoriesFor(path).Where(x => !_settings.FolderShouldBeIgnored(x)).Each(child =>\n            {\n                var childFolder = buildFolder(child);\n                childFolder.Parent = folder;\n                childFolder.RelativePath = (folder.RelativePath + \"/\" + childFolder.Name).TrimStart('/');\n\n                if (childFolder.IsShared)\n                {\n                    folder.LayoutFolders.Add(childFolder);\n                }\n            });\n\n            return folder;\n        }\n\n        public void AttachLayouts(string applicationLayoutName)\n        {\n            _folders.Each(x => x.AttachLayouts(applicationLayoutName, _facility));\n        }\n\n        public void AttachViewModels(ViewTypePool types, ITemplateLogger logger)\n        {\n            AllViews().Each(x => x.AttachViewModels(types, logger));\n        }\n\n        public IEnumerable<T> AllViews()\n        {\n            return _folders.SelectMany(x => x.Views);\n        }\n\n        public T FindInShared(string viewName)\n        {\n            return _top.FindInShared(viewName);\n        }\n\n        public IEnumerable<string> SharedPaths()\n        {\n            return _folders.Where(x => x.IsShared).Select(x => x.RelativePath);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/Model/ViewFacility.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Runtime.Files;\r\n\r\nnamespace FubuMVC.Core.View.Model\r\n{\r\n    public abstract class ViewFacility<T> : IViewFacility, IFubuRegistryExtension where T : class, ITemplateFile\r\n    {\r\n        private List<T> _views = new List<T>();\r\n        private ViewCollection<T> _bottle;\r\n\r\n        public abstract Func<IFubuFile, T> CreateBuilder(SettingsCollection settings, IFubuApplicationFiles files);\r\n\r\n        public abstract FileSet FindMatching(SettingsCollection settings);\r\n\r\n        public void Configure(FubuRegistry registry)\r\n        {\r\n            registry.AlterSettings<ViewEngineSettings>(x => x.AddFacility(this));\r\n            registerServices(registry.Services);\r\n\r\n            registry.AlterSettings<CommonViewNamespaces>(addNamespacesForViews);\r\n\r\n            registry.AlterSettings<AssetSettings>(registerWatchSettings);\r\n        }\r\n\r\n        protected abstract void registerWatchSettings(AssetSettings settings);\r\n\r\n        protected abstract void addNamespacesForViews(CommonViewNamespaces namespaces);\r\n\r\n        protected abstract void registerServices(ServiceRegistry services);\r\n\r\n        public virtual void Fill(ViewEngineSettings settings, BehaviorGraph graph, IPerfTimer timer, IFubuApplicationFiles files)\r\n        {\r\n            var builder = CreateBuilder(graph.Settings, files);\r\n            var match = FindMatching(graph.Settings);\r\n\r\n            // HAS TO BE SHALLOW\r\n            match.DeepSearch = false;\r\n\r\n            _bottle = new ViewCollection<T>(this, files, builder, settings, match);\r\n\r\n            _views = _bottle.AllViews().ToList();\r\n        }\r\n\r\n        protected virtual void precompile(BehaviorGraph graph)\r\n        {\r\n            // do nothing\r\n        }\r\n\r\n\r\n        public void AttachViewModels(ViewTypePool types, ITemplateLogger logger)\r\n        {\r\n            _bottle.AttachViewModels(types, logger);\r\n        }\r\n\r\n        public abstract void ReadSharedNamespaces(CommonViewNamespaces namespaces);\r\n\r\n        public void AttachLayouts(ViewEngineSettings settings)\r\n        {\r\n            _bottle.AttachLayouts(settings.ApplicationLayoutName);\r\n        }\r\n\r\n        public ViewEngineSettings Settings { get; set; }\r\n\r\n        public Type TemplateType\r\n        {\r\n            get { return typeof (T); }\r\n        }\r\n\r\n        public IEnumerable<IViewToken> AllViews()\r\n        {\r\n            return _views.OfType<IViewToken>();\r\n        }\r\n\r\n        public IEnumerable<T> AllTemplates()\r\n        {\r\n            return _views;\r\n        }\r\n\r\n        public ITemplateFile FindInShared(string viewName)\r\n        {\r\n            return _bottle.FindInShared(viewName);\r\n        }\r\n\r\n        public T FindPartial(T template, string name)\r\n        {\r\n            var partialName = \"_\" + name;\r\n\r\n            return AllViews().FirstOrDefault(x => x.Name() == partialName) as T;\r\n        }\r\n\r\n        public IEnumerable<string> SharedPaths()\r\n        {\r\n            return _bottle.SharedPaths();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/Model/ViewFolder.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.View.Model\r\n{\r\n    public interface ITemplateFolder\r\n    {\r\n        ITemplateFile FindRecursivelyInShared(string viewName);\r\n        ITemplateFolder Parent { get; }\r\n    }\r\n\r\n    public class ViewFolder<T> : ITemplateFolder where T : class, ITemplateFile\r\n    {\r\n        private readonly string _name;\r\n        private readonly string _path;\r\n        public ViewFolder<T> Parent;\r\n        public readonly IList<ViewFolder<T>> LayoutFolders = new List<ViewFolder<T>>(); \r\n        public bool IsShared;\r\n        public readonly IList<T> Views = new List<T>();\r\n\r\n\r\n        public ViewFolder(string path)\r\n        {\r\n            _name = System.IO.Path.GetFileNameWithoutExtension(path);\r\n            _path = path;\r\n        }\r\n\r\n        public string Path\r\n        {\r\n            get { return _path; }\r\n        }\r\n\r\n        public string Name\r\n        {\r\n            get { return _name; }\r\n        }\r\n\r\n        public void AttachLayouts(string defaultLayoutName, ViewFacility<T> facility)\r\n        {\r\n            Views.Each(x => x.AttachLayouts(defaultLayoutName, facility, this));\r\n        }\r\n\r\n        public T FindInShared(string viewName)\r\n        {\r\n            return LayoutFolders.SelectMany(x => x.Views).FirstOrDefault(x => x.Name() == viewName);\r\n        }\r\n\r\n        public ITemplateFile FindRecursivelyInShared(string viewName)\r\n        {\r\n            var shared = FindInShared(viewName);\r\n            if (shared == null && Parent != null)\r\n            {\r\n                if (IsShared && Parent != null && Parent.Parent != null)\r\n                {\r\n                    return Parent.Parent.As<ITemplateFolder>().FindRecursivelyInShared(viewName);\r\n                }\r\n\r\n                return Parent.As<ITemplateFolder>().FindRecursivelyInShared(viewName);\r\n            }\r\n\r\n            return shared;\r\n        }\r\n\r\n        ITemplateFolder ITemplateFolder.Parent\r\n        {\r\n            get { return IsShared ? Parent.Parent : Parent; }\r\n        }\r\n\r\n        public string RelativePath { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/Model/ViewTypePool.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.View.Registration;\r\nusing StructureMap.Graph.Scanning;\r\n\r\nnamespace FubuMVC.Core.View.Model\r\n{\r\n    public class ViewTypePool\r\n    {\r\n        private readonly BehaviorGraph _graph;\r\n\r\n        public ViewTypePool(BehaviorGraph graph)\r\n        {\r\n            _graph = graph;\r\n        }\r\n\r\n\r\n        public Type FindTypeByName(string typeFullName, Action<string> log)\r\n        {\r\n            if (GenericParser.IsGeneric(typeFullName))\r\n            {\r\n                var genericParser = new GenericParser(_graph.AllAssemblies());\r\n                return genericParser.Parse(typeFullName);\r\n            }\r\n\r\n            return findClosedTypeByFullName(typeFullName, log);\r\n        }\r\n\r\n        private Type findClosedTypeByFullName(string typeFullName, Action<string> log)\r\n        {\r\n\r\n\r\n            var types =\r\n                TypeRepository.FindTypes(_graph.AllAssemblies().Concat(new [] { Assembly.GetExecutingAssembly() }),\r\n                    TypeClassification.Closed | TypeClassification.Concretes, x => x.FullName == typeFullName).Result();\r\n\r\n            var typeCount = types.Count();\r\n\r\n            if (typeCount == 1)\r\n            {\r\n                return types.First();\r\n            }\r\n\r\n            log(\"Unable to set view model type : {0}\".ToFormat(typeFullName));\r\n\r\n            if (typeCount > 1)\r\n            {\r\n                var candidates = types.Select(x => x.AssemblyQualifiedName).Join(\", \");\r\n                log(\"Type ambiguity on: {0}\".ToFormat(candidates));\r\n            }\r\n\r\n            return null;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/PartialExpressionExtensions.cs",
    "content": "using System.Web;\nusing FubuMVC.Core.Runtime;\n\nnamespace FubuMVC.Core.View\n{\n    public static class PartialExpressionExtensions\n    {\n        public static IHtmlString Partial<TInputModel>(this IFubuPage page, string categoryOrHttpMethod = null) where TInputModel : class\n        {\n            return new HtmlString(InvokePartial<TInputModel>(page, null, categoryOrHttpMethod));\n        }\n\n        public static IHtmlString PartialFor(this IFubuPage page, object input, bool withModelBinding = false, string categoryOrHttpMethod = null)\n        {\n\n            return new HtmlString(page.Get<IPartialInvoker>().InvokeAsHtml(input).GetAwaiter().GetResult());\n        }\n\n        public static IHtmlString Partial<TInputModel>(this IFubuPage page, TInputModel model, bool withModelBinding = false, string categoryOrHttpMethod = null) where TInputModel : class\n        {\n            if (typeof(TInputModel) == typeof(object))\n            {\n                return new HtmlString(page.Get<IPartialInvoker>().InvokeAsHtml(model).GetAwaiter().GetResult());\n            }\n\n\n            page.Get<IFubuRequest>().Set(model);\n            return new HtmlString(InvokePartial<TInputModel>(page, categoryOrHttpMethod));\n        }\n\n        public static string InvokePartial<TInputModel>(IFubuPage page, string prefix, string categoryOrHttpMethod = null) where TInputModel : class\n        {\n            return page.Get<IPartialInvoker>().Invoke<TInputModel>(categoryOrHttpMethod).GetAwaiter().GetResult();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/Registration/GenericParser.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Core.View.Registration\r\n{\r\n    public interface IGenericParser\r\n    {\r\n        Type Parse(string typeName);\r\n        IEnumerable<string> ParseErrors { get; }\r\n    }\r\n\r\n    public class GenericParser : IGenericParser\r\n    {\r\n        private readonly IEnumerable<Assembly> _assemblies;\r\n        private readonly List<string> _parseErrors = new List<string>();\r\n\r\n        public IEnumerable<string> ParseErrors\r\n        {\r\n            get { return _parseErrors; }\r\n        }\r\n\r\n        public GenericParser(IEnumerable<Assembly> assemblies)\r\n        {\r\n            _assemblies = assemblies;\r\n        }\r\n\r\n        public GenericTypeDefinition parseTypeName(string typeName)\r\n        {\r\n            var leftGenericDelimiter = typeName.IndexOf('<');\r\n            var rightGenericDelimiter = typeName.IndexOf('>');\r\n\r\n            var genericArgumentsNames = typeName.Substring(leftGenericDelimiter + 1, rightGenericDelimiter - leftGenericDelimiter - 1);\r\n            var genericArguments = genericArgumentsNames.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries).ToArray();\r\n\r\n            var openTypeName = typeName.Substring(0, leftGenericDelimiter);\r\n            var openTypeNameWithArgCount = openTypeName + \"`\" + genericArguments.Length;\r\n\r\n            return new GenericTypeDefinition\r\n            {\r\n                OpenTypeName = openTypeNameWithArgCount,\r\n                ArgumentTypeNames = genericArguments\r\n            };\r\n        }\r\n\r\n        public Type Parse(string typeName)\r\n        {\r\n            if (!IsGeneric(typeName))\r\n            {\r\n                _parseErrors.Add(\"Type {0} does not appear to be generic.\".ToFormat(typeName));\r\n                return null;\r\n            }\r\n\r\n            var typeDefinition = parseTypeName(typeName);\r\n\r\n            var openType = findOpenType(typeDefinition);\r\n\r\n            var genericArgumentTypes = findGenericArgumentTypes(typeDefinition);\r\n\r\n            if (_parseErrors.Count > 0)\r\n                return null;\r\n\r\n            return openType.MakeGenericType(genericArgumentTypes.ToArray());\r\n        }\r\n\r\n        public Type findOpenType(GenericTypeDefinition typeDefinition)\r\n        {\r\n            var openTypes = findTypes(typeDefinition.OpenTypeName).ToArray();\r\n\r\n            if (openTypes.Count() < 1)\r\n            {\r\n                _parseErrors.Add(\"No generic type matching {0} was found.\".ToFormat(typeDefinition.OpenTypeName));\r\n                return null;\r\n            }\r\n            if (openTypes.Count() > 1)\r\n            {\r\n                var candidates = openTypes.Select(x => x.AssemblyQualifiedName).Join(\", \");\r\n                _parseErrors.Add(\"More than one generic types matching {0} was found. Type ambiguity on: {1}\".ToFormat(typeDefinition.OpenTypeName, candidates));\r\n                return null;\r\n            }\r\n\r\n            return openTypes.First();\r\n        }\r\n\r\n        public IEnumerable<Type> findGenericArgumentTypes(GenericTypeDefinition typeDefinition)\r\n        {\r\n            var genericArguments = new List<Type>();\r\n            foreach (var argumentTypeName in typeDefinition.ArgumentTypeNames)\r\n            {\r\n                var argumentTypes = findTypes(argumentTypeName).ToArray();\r\n\r\n                if (argumentTypes.Count() < 1)\r\n                {\r\n                    _parseErrors.Add(\"No generic argument type matching {0} was found.\".ToFormat(argumentTypeName));\r\n                    return null;\r\n                }\r\n                if (argumentTypes.Count() > 1)\r\n                {\r\n                    var candidates = argumentTypes.Select(x => x.AssemblyQualifiedName).Join(\", \");\r\n                    _parseErrors.Add(\"More than one generic argument types matching {0} was found. Type ambiguity on: {1}\".ToFormat(argumentTypeName, candidates));\r\n                    return null;\r\n                }\r\n\r\n                genericArguments.Add(argumentTypes.First());\r\n            }\r\n\r\n            return genericArguments;\r\n        }\r\n\r\n        private IEnumerable<Type> findTypes(string typeName)\r\n        {\r\n            var types = _assemblies.Select(assembly => assembly.GetType(typeName));\r\n\r\n            return types.Where(type => type != null);\r\n        }\r\n\r\n        public static bool IsGeneric(string typeName)\r\n        {\r\n            return typeName.IndexOf('<') != -1;\r\n        }\r\n    }\r\n\r\n    public class GenericTypeDefinition\r\n    {\r\n        public string OpenTypeName { get; set; }\r\n        public IEnumerable<string> ArgumentTypeNames { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/Rendering/IRenderableView.cs",
    "content": "﻿using FubuMVC.Core.Runtime;\r\n\r\nnamespace FubuMVC.Core.View.Rendering\r\n{\r\n    public interface IRenderableView //: IFubuPage\r\n    {\r\n        void Render(IFubuRequestContext context);\r\n\r\n        IFubuPage Page { get; } \r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/ViewEngineSettings.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Runtime.Conditionals;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.View.Attachment;\r\nusing FubuMVC.Core.View.Model;\r\n\r\nnamespace FubuMVC.Core.View\r\n{\r\n    [Title(\"View Engine Registration and Settings\")]\r\n    public class ViewEngineSettings : DescribesItself\r\n    {\r\n        public static readonly IFileSystem FileSystem = new FileSystem();\r\n\r\n        private readonly IList<Func<IViewToken, bool>> _excludes = new List<Func<IViewToken, bool>>();\r\n        private readonly List<IViewFacility> _facilities = new List<IViewFacility>();\r\n        private readonly IList<ViewTokenPolicy> _viewPolicies = new List<ViewTokenPolicy>();\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.ShortDescription = \"Registers active View Engines and governs the behavior of view attachment\";\r\n\r\n            description.Properties[\"Shared Layout Folders\"] = SharedLayoutFolders.Join(\", \");\r\n            description.Properties[\"Application Layout Name\"] = ApplicationLayoutName;\r\n\r\n            description.AddList(\"Facilities\", _facilities);\r\n            if (_viewPolicies.Any())\r\n            {\r\n                description.AddList(\"Policies\", _viewPolicies);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// List of folder names that should be treated as shared layout folders of views.\r\n        /// Default is [\"Shared\"]\r\n        /// </summary>\r\n        public readonly IList<string> SharedLayoutFolders = new List<string> {\"Shared\"};\r\n\r\n        /// <summary>\r\n        /// The name of the default layout file for the application.\r\n        /// The default is \"Application\"\r\n        /// </summary>\r\n        public string ApplicationLayoutName = \"Application\";\r\n\r\n        /// <summary>\r\n        /// All of the registered view engines in this application\r\n        /// </summary>\r\n        public IEnumerable<IViewFacility> Facilities\r\n        {\r\n            get { return _facilities; }\r\n        }\r\n\r\n        public Task<ViewBag> BuildViewBag(BehaviorGraph graph, IActivationDiagnostics diagnostics, IFubuApplicationFiles files)\r\n        {\r\n            return diagnostics.Timer.RecordTask(\"Building the View Bag\", () =>\r\n            {\r\n                var viewFinders = _facilities.Select(x =>\r\n                {\r\n                    return Task.Factory.StartNew(() =>\r\n                    {\r\n                        x.Fill(this, graph, diagnostics.Timer, files);\r\n                        return x.AllViews();\r\n                    });\r\n                });\r\n\r\n                var views = viewFinders.SelectMany(x => x.Result).ToList();\r\n                _viewPolicies.Each(x => x.Alter(views));\r\n\r\n                var logger = TemplateLogger.Default(diagnostics);\r\n                var types = new ViewTypePool(graph);\r\n\r\n                // Attaching the view models\r\n\r\n                _facilities.Each(x => x.AttachViewModels(types, logger));\r\n\r\n                _facilities.Each(x => x.AttachLayouts(this));\r\n\r\n                return new ViewBag(views);\r\n            });\r\n        }\r\n\r\n        public bool IsExcluded(IViewToken token)\r\n        {\r\n            return _excludes.Any(x => x(token));\r\n        }\r\n\r\n        public bool IsSharedFolder(string folder)\r\n        {\r\n            return SharedLayoutFolders.Contains(Path.GetFileNameWithoutExtension(folder));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Programmatically add a new view facility.  This method is generally called\r\n        /// by each Bottle and should not be necessary by users\r\n        /// </summary>\r\n        /// <param name=\"facility\"></param>\r\n        public void AddFacility(IViewFacility facility)\r\n        {\r\n            var typeOfFacility = facility.GetType();\r\n            if (_facilities.Any(f => f.GetType() == typeOfFacility)) return;\r\n\r\n            facility.Settings = this;\r\n\r\n            _facilities.Add(facility);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Add a new ViewTokenPolicy to alter or configure the behavior of a view\r\n        /// at configuation time\r\n        /// </summary>\r\n        /// <param name=\"policy\"></param>\r\n        public void AddPolicy(ViewTokenPolicy policy)\r\n        {\r\n            _viewPolicies.Add(policy);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Exclude discovered views from being used with the view attachment.  Helpful for being able\r\n        /// to run FubuMVC simultaneously with ASP.Net MVC or some other web framework in the same\r\n        /// application\r\n        /// </summary>\r\n        /// <param name=\"filter\"></param>\r\n        public void ExcludeViews(Func<IViewToken, bool> filter)\r\n        {\r\n            _excludes.Add(filter);\r\n        }\r\n\r\n        public T FindPartial<T>(T template, string name) where T : class, ITemplateFile\r\n        {\r\n            var facility = _facilities.Single(x => x.TemplateType == typeof (T)).As<ViewFacility<T>>();\r\n            return facility.FindPartial(template, name);\r\n        }\r\n\r\n\r\n        private readonly string[] _ignoredFolders = {\"bin\", \"obj\", \"fubu-content\", \"node_modules\", \"debug\", \"release\"};\r\n\r\n        public bool FolderShouldBeIgnored(string folder)\r\n        {\r\n            var segment = folder.Replace('\\\\', '/').Trim('/').Split('/').Last();\r\n\r\n            return _ignoredFolders.Any(x => x.EqualsIgnoreCase(segment));\r\n        }\r\n\r\n\r\n\r\n    }\r\n\r\n    /// <summary>\r\n    /// Used to create a policy altering views represented by an IViewToken\r\n    /// </summary>\r\n    public class ViewTokenPolicy : DescribesItself\r\n    {\r\n        private readonly Action<IViewToken> _alteration;\r\n        private readonly string _description;\r\n        private readonly Func<IViewToken, bool> _filter;\r\n\r\n        public ViewTokenPolicy(Func<IViewToken, bool> filter, Action<IViewToken> alteration, string description)\r\n        {\r\n            _filter = filter;\r\n            _alteration = alteration;\r\n            _description = description;\r\n        }\r\n\r\n        #region DescribesItself Members\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = _description;\r\n        }\r\n\r\n        #endregion\r\n\r\n        public void Alter(IEnumerable<IViewToken> views)\r\n        {\r\n            views.Where(_filter).Each(_alteration);\r\n        }\r\n\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"ViewTokenPolicy: {0}\", _description);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/View/ViewWriter.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.View.Model;\r\nusing FubuMVC.Core.View.Rendering;\r\nusing HtmlTags.Conventions;\r\n\r\nnamespace FubuMVC.Core.View\r\n{\r\n    public interface IViewWriter\r\n    {\r\n        IViewToken View { get; }\r\n    }\r\n\r\n    public class ViewWriter<T> : IMediaWriter<T>, IViewWriter, DescribesItself where T : class\r\n    {\r\n        private readonly ITemplateFile _view;\r\n\r\n        public ViewWriter(ITemplateFile view)\r\n        {\r\n            _view = view;\r\n        }\r\n\r\n        public IViewToken View => _view;\r\n\r\n        public Task Write(string mimeType, IFubuRequestContext context, T resource)\r\n        {\r\n            var view = BuildView(context);\r\n            view.Page.ServiceLocator = context.Services;\r\n            view.Page.As<IFubuPage<T>>().Model = resource;\r\n            view.Render(context);\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n\r\n        public IEnumerable<string> Mimetypes\r\n        {\r\n            get { yield return MimeType.Html.Value; }\r\n        }\r\n\r\n        public IRenderableView BuildView(IFubuRequestContext context)\r\n        {\r\n            if (context.Request.IsAjaxRequest() || context.Services.GetInstance<ICurrentChain>().IsInPartial())\r\n            {\r\n                return _view.GetPartialView();\r\n            }\r\n\r\n            return _view.GetView();\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = Description.For(_view).Title;\r\n            description.ShortDescription = null;\r\n            description.AddChild(\"View\", _view);\r\n        }\r\n    }\r\n\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Core/fubu-diagnostics/FubuDiagnostics.js",
    "content": "﻿var FubuDiagnostics = {}"
  },
  {
    "path": "src/FubuMVC.Core/fubu-diagnostics/bootstrap.overrides.css",
    "content": "﻿h2 {\n    line-height: inherit !important;\n}\n\n.container-fluid > .sidebar {\n    width: 280px;\n}\n\n.container-fluid > .content {\n    margin-left: 300px;\n}\n\n.container-fluid > .sidebar > .well > .form-stacked {\n    padding-left: 0;\n}\n\nfooter\n{\n\tmargin-top: 20px;\n\tpadding-top: 8px;\n}\n\n#diagnostic-menu .nav > li > a\n{\n\tpadding-top: 18px !important;\n}\n\n#Content\n{\n\tmin-height: 600px;\n\ttop: 70px;\n}\n\ntable.details th\n{\n\ttext-align:right;\n}\n\ntable.details th span\n{\n\tpadding-right: 8px;\n}\n\nspan.http-status-description\n{\n\tmargin-left: 8px;\n\tfont-style:italic;\n\tfont-weight: lighter;\n\tfont-size: smaller;\n}\n\nspan.http-status-code\n{\n\tfont-weight: 700;\n}\n\n.duration-cell\n{\n\ttext-align: right;\n}\n\n.request-time\n{\n\ttext-align: right;\n}\n\nspan.node-trace-duration\n{\n\tfloat:right;\n\ttext-align:right;\n}\n\n#request-header\n{\n\tpadding-bottom: 10px;\n\tpadding-top: 10px;\n}\n\na.external {\n    background: url(/_content/images/external.png) center right no-repeat;\n    padding-right: 13px;\n}\n\n.info-link\n{\n\tfont-size: small;\n}\n\n/* Description stuff */\ntable.desc-properties th\n{\n\ttext-align: right;\n\tpadding-right: 8px;\n\twidth: auto;\n}\n\ntable.desc-properties th, table.desc-properties td\n{\n\tpadding-top: 2px;\n\tpadding-bottom: 2px;\n}\n\n\n.desc-child-title b\n{\n\tpadding-right: 5px;\n\tcolor: Orange;\n}\n\n.desc-child-body\n{\n\tpadding-left:3px;\n\tborder-left: thin solid orange;\n\t\n\tmargin-left: 20px;\n\tmargin-bottom: 15px;\n\t\n}\n\n.desc-list-name\n{\n\tfont-weight: bold;\n\t\n}\n\n.desc-bullet-item-title\n{\n\tcolor: Blue;\n\tmargin-left:20px;\n\tfont-style: italic;\n}\n\n.desc-bullet-item-body\n{\n\tpadding-left:3px;\n\tborder-left: thin solid blue;\n\t\n\tmargin-left: 40px;\n\tmargin-bottom:15px;\n}\n\nspan.exception\n{\n\tcolor: Red;\n\tfont-weight: bold;\n\tmargin-left: 20px;\n}\n\ndiv.exception-report pre\n{\n\tbackground-color: #FFFFAA !important;\n}\n\nli.exception div.node-trace-container\n{\n\tcolor: Red;\n\tfont-weight: bold;\n}\n\n\nli.gray div.node-trace-container\n{\n\tcolor: Gray;\n\ttext-decoration: line-through;\n}\n\ntd.number {\n    text-align: right !important;\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/fubu-diagnostics/master.css",
    "content": "\n#Content {\n    min-height: 600px;\n}\nh1, h2, h3, h4\n{\n    color: #504E4E;\n}\n\nh2\n{\n    font-size: 2.2em;\n    font-weight: bold;\n}\n\nh3.subheader, h4.subheader\n{\n    font-style: italic;\n    padding-left: 10px;\n}\n\n.clear\n{\n    clear: both;\n}\n\n.jqgrow:hover\n{\n    cursor: pointer;\n}\n\n.filter-container h4, .filter-container .filter\n{\n    float: left;\n    margin-right: 10px;\n}\n\n.filter-container h4, .filter-container .ui-button-text\n{\n    font-weight: bold;\n    font-size: 12px;\n    line-height: 1;\n}\n\n.filter-container\n{\n    margin-bottom: 10px;\n}\n\n#filter-dialog button\n{\n    width: 100%;\n}\n\n#filter-dialog select, #filter-dialog input[type=\"text\"]\n{\n    font-size: 12px;\n    padding: 5px;\n    line-height: 1.4em;\n    float: left;\n    margin-top: 0;\n    margin-right: 5px;\n    color: #333;\n}\n\n#filter-dialog input[type=\"text\"]\n{\n    width: 345px;\n    margin-right: 0px;\n}\n\n.ui-widget p\n{\n    margin: 0;\n    padding: 10px;\n}\n\n.dashboard-notice\n{\n    margin-bottom: 10px;\n}\n\n.dashboard-notice .ui-state-highlight\n{\n    padding: 10px;\n}\n\n.qtip-text\n{\n\tdisplay:none;\n}\n\nspan.drilldown\n{\n\tdisplay:inline-block;\n\tcursor:pointer;\n}\n\n/*pre\n{\n    font-size: 12px;\n    padding: 0;\n    margin: 0;\n    background: #f0f0f0;\n    border-left: 1px solid #ccc;\n    border-bottom: 1px solid #ccc;\n    line-height: 20px;\n    width: 800px;\n    text-align: left;\n    overflow: auto; \n    overflow-y: hidden;\n}\n\npre code\n{\n    margin: 0 0 0 40px;\n    padding: 15px 0;\n    display: block;\n}\n\npre.blk\n{\n    background: url(\"../Images/pre_code_bg_blk.gif\") repeat-y scroll left top transparent;\n    border: medium none;\n    color: #FFFFFF;\n}\n\npre.blk > code\n{\n    background: none;\n    color: #fff;\n}*/\n\n.model-binding .grid\n{\n    border: 1px solid #9D9D9D;\n    width: 80%;\n}\n\np\n{\n    margin-top: 15px;\n}\n\n.ui-state-notice, .ui-widget-content .ui-state-notice\n{\n    background: #FFEE7D;\n}\n\n.sidebar .notification\n{\n    padding: 10px;\n    background: #EAF2F5;\n}\n\n.sidebar .notification p\n{\n    margin: 0;\n    padding: 0;\n}\n\n.sidebar .notification p a\n{\n    font-weight: bold;\n}\n\n.grid pre\n{\n    width: auto;\n}\n\n.hint\n{\n    margin-top: -2px;\n    font-style: italic;\n    padding-left: 10px;\n}\n\n.topbar h3 a, .topbar .brand\n{\n    padding-left: 8px;\n    padding-top: 0;\n    padding-bottom: 0;\n}\n\n.alert-message p {\n    margin-top: 0;\n}\n\n.alert-message a, .alert-message a:hover, .alert-message a:active {\n    color: #fff;\n}\n\nfooter {\n    background: #333;\n}\nfooter p {\n    color: #BFBFBF;\n}\nfooter small {\n    float: right;\n}\nfooter dt, footer dd {\n    color: #BFBFBF;\n}\nfooter p span {\n    float: left;\n    margin-right: 10px;\n}\n\n.section-subtitle {\n\tmargin-left: 10px !important;\n}\n\ntable.details{\n\twidth: auto;\n}\n\n\n.typeahead,\n.tt-query,\n.tt-hint {\n  width: 396px;\n  height: 30px;\n  padding: 8px 12px;\n  font-size: 24px;\n  line-height: 30px;\n  border: 2px solid #ccc;\n  -webkit-border-radius: 8px;\n     -moz-border-radius: 8px;\n          border-radius: 8px;\n  outline: none;\n}\n\n.typeahead {\n  background-color: #fff;\n}\n\n.typeahead:focus {\n  border: 2px solid #0097cf;\n}\n\n.tt-query {\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.tt-hint {\n  color: #999\n}\n\n.tt-dropdown-menu {\n  width: 422px;\n  margin-top: 12px;\n  padding: 8px 0;\n  background-color: #fff;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-border-radius: 8px;\n     -moz-border-radius: 8px;\n          border-radius: 8px;\n  -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);\n     -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);\n          box-shadow: 0 5px 10px rgba(0,0,0,.2);\n}\n\n.tt-suggestion {\n  padding: 3px 20px;\n  font-size: 18px;\n  line-height: 24px;\n}\n\n.tt-suggestion.tt-cursor {\n  color: #fff;\n  background-color: #0097cf;\n\n}\n\n.tt-suggestion p {\n  margin: 0;\n}\n\npre.text-display{\n\toverflow-x:scroll;\n\tfont-size: small;\n\tposition: absolute;\n}\n"
  },
  {
    "path": "src/FubuMVC.Core/paket.references",
    "content": "FubuCore\nHtmlTags\nNewtonsoft.Json\nstructuremap"
  },
  {
    "path": "src/FubuMVC.Guides.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 11.00\r\n# Visual Studio 2010\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"FubuMVC.GuideApp\", \"FubuMVC.GuideApp\\FubuMVC.GuideApp.csproj\", \"{059A7BB2-E74F-4155-9250-CC9D31B6A7A2}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"QuickStart\", \"QuickStart\\QuickStart.csproj\", \"{66A9D435-DC25-4DE1-99A8-003C54B0111B}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{49ADE702-591B-4644-81C6-F7F9BF4C7518}\"\r\n\tProjectSection(SolutionItems) = preProject\r\n\t\t..\\rakefile.rb = ..\\rakefile.rb\r\n\tEndProjectSection\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{059A7BB2-E74F-4155-9250-CC9D31B6A7A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{059A7BB2-E74F-4155-9250-CC9D31B6A7A2}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{059A7BB2-E74F-4155-9250-CC9D31B6A7A2}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{059A7BB2-E74F-4155-9250-CC9D31B6A7A2}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{66A9D435-DC25-4DE1-99A8-003C54B0111B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{66A9D435-DC25-4DE1-99A8-003C54B0111B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{66A9D435-DC25-4DE1-99A8-003C54B0111B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{66A9D435-DC25-4DE1-99A8-003C54B0111B}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/AboutEndpointIntegrationTester.cs",
    "content": "﻿using System.Diagnostics;\r\nusing System.Threading;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Diagnostics;\r\nusing FubuMVC.Core.Http.Hosting;\r\nusing HtmlTags;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting\r\n{\r\n    [TestFixture]\r\n    public class AboutEndpointIntegrationTester\r\n    {\r\n        private FubuRuntime server;\r\n\r\n        [TestFixtureSetUp]\r\n        public void SetUp()\r\n        {\r\n            server = FubuRuntime.Basic(_ =>\r\n            {\r\n                _.Mode = \"development\";\r\n                _.HostWith<Katana>();\r\n            });\r\n        }\r\n\r\n        [TestFixtureTearDown]\r\n        public void TearDown()\r\n        {\r\n            server.SafeDispose();\r\n        }\r\n\r\n        [Test]\r\n        public void can_get_The_about_page_smoke_test()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<AboutFubuDiagnostics>(x => x.get_about());\r\n                _.ContentShouldContain(\"Assemblies\");\r\n            });\r\n        }\r\n\r\n    }\r\n\r\n\r\n    public class ReloadingEndpoint\r\n    {\r\n        private readonly AppReloaded _reloaded;\r\n        private readonly FubuRuntime _runtime;\r\n\r\n        public ReloadingEndpoint(AppReloaded reloaded, FubuRuntime runtime)\r\n        {\r\n            _reloaded = reloaded;\r\n            _runtime = runtime;\r\n        }\r\n\r\n        public HtmlDocument get_reloaded()\r\n        {\r\n            var document = new HtmlDocument();\r\n            document.Title = \"Manual Test Harness for reloading\";\r\n            document.Add(\"h1\").Text(\"Loaded at \" + _reloaded.Timestamp);\r\n\r\n            document.Add(new AutoReloadingTag(_runtime.Mode));\r\n\r\n            return document;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Aggregation/aggregator_integration_tester.cs",
    "content": "﻿using System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Json;\nusing FubuMVC.Core.Runtime.Aggregation;\nusing Shouldly;\nusing HtmlTags;\nusing Newtonsoft.Json;\nusing NUnit.Framework;\nusing StructureMap;\n\nnamespace FubuMVC.IntegrationTesting.Aggregation\n{\n    [TestFixture]\n    public class aggregator_integration_tester\n    {\n        [Test]\n        public void aggregate_can_use_a_query()\n        {\n            TestHost.Scenario(_ =>\n            {\n                _.Get.Action<AggregationEndpoint>(x => x.get_aggregation());\n\n                var json = _.Response.Body.ReadAsText();\n                var values = JsonUtil.Get<string[]>(json);\n\n                values.ShouldContain(\"Resource1: Jeremy Maclin\");\n            });\n        }\n\n        [Test]\n        public void aggregate_by_resource_type()\n        {\n            TestHost.Scenario(_ =>\n            {\n                _.Get.Action<AggregationEndpoint>(x => x.get_aggregation());\n\n                var json = _.Response.Body.ReadAsText();\n                var values = JsonUtil.Get<string[]>(json);\n\n                values.ShouldContain(\"I am Resource2\");\n            });\n        }\n\n\n        [Test]\n        public void aggregate_selection_by_input_type()\n        {\n            TestHost.Scenario(_ =>\n            {\n                _.Get.Action<AggregationEndpoint>(x => x.get_aggregation());\n\n                var json = _.Response.Body.ReadAsText();\n                var values = JsonUtil.Get<string[]>(json);\n\n                values.ShouldContain(\"Resource3 from input type 2\");\n            });\n        }\n\n        [Test]\n        public void aggregate_selection_by_method()\n        {\n            TestHost.Scenario(_ =>\n            {\n                _.Get.Action<AggregationEndpoint>(x => x.get_aggregation());\n\n                var json = _.Response.Body.ReadAsText();\n                var values = JsonUtil.Get<string[]>(json);\n\n                values.ShouldContain(\"Resource4 from an action identified by expression\");\n            });\n        }\n\n\n        [Test]\n        public void can_still_call_a_data_action_independently()\n        {\n            TestHost.Scenario(_ =>\n            {\n                _.Get.Input(new AggregationEndpoint.Query1 {Name = \"Joe\"});\n\n                var json = _.Response.Body.ReadAsText();\n\n                var resource = JsonUtil.Get<AggregationEndpoint.Resource1>(json);\n                resource.Name.ShouldBe(\"Joe\");\n            });\n        }\n\n        [Test]\n        public void client_message_cache_knows_its_chains()\n        {\n            var cache = TestHost.Service<IClientMessageCache>();\n            cache.AllClientMessages()\n                .ShouldHaveTheSameElementsAs(\n                    new ClientMessagePath\n                    {\n                        Message = \"query-1\",\n                        InputType = typeof (AggregationEndpoint.Query1),\n                        ResourceType = typeof (AggregationEndpoint.Resource1)\n                    },\n                    new ClientMessagePath\n                    {\n                        Message = \"resource-2\",\n                        InputType = null,\n                        ResourceType = typeof (AggregationEndpoint.Resource2)\n                    },\n                    new ClientMessagePath\n                    {\n                        Message = \"input-2\",\n                        InputType = typeof (AggregationEndpoint.Input2),\n                        ResourceType = typeof (AggregationEndpoint.Resource3)\n                    },\n                    new ClientMessagePath\n                    {\n                        Message = \"resource-4\",\n                        InputType = null,\n                        ResourceType = typeof (AggregationEndpoint.Resource4)\n                    }\n                );\n        }\n\n        [Test]\n        public void find_chain_by_message_type()\n        {\n            var cache = TestHost.Service<IClientMessageCache>();\n            cache.FindChain(\"query-1\").InputType().ShouldBe(typeof (AggregationEndpoint.Query1));\n            cache.FindChain(\"resource-4\").ResourceType().ShouldBe(typeof (AggregationEndpoint.Resource4));\n        }\n\n        [Test]\n        public void aggregated_request_with_an_input_type()\n        {\n            var container = TestHost.Service<IContainer>();\n\n            using (var nested = container.GetNestedContainer())\n            {\n                var aggregator = nested.GetInstance<Aggregator>();\n\n\n                var response = aggregator.ExecuteQuery(new ClientQuery\n                {\n                    query = new AggregationEndpoint.Query1 {Name = \"Justin Houston\"},\n                    type = typeof (AggregationEndpoint.Query1).GetMessageName()\n                }).GetAwaiter().GetResult();\n\n                response.request.ShouldBe(\"query-1\");\n                response.type.ShouldBe(\"resource-1\");\n                response.result.ShouldBeOfType<AggregationEndpoint.Resource1>()\n                    .Name.ShouldBe(\"Justin Houston\");\n            }\n        }\n\n        [Test]\n        public void aggregate_request_through_the_initial_endpoint()\n        {\n            var container = TestHost.Service<IContainer>();\n\n            using (var nested = container.GetNestedContainer())\n            {\n                var aggregator = nested.GetInstance<Aggregator>();\n\n                var query = new AggregatedQuery();\n                query.AddQuery(new AggregationEndpoint.Query1 {Name = \"Jeremy Maclin\"});\n                query.Resource<AggregationEndpoint.Resource2>();\n                query.AddQuery(new AggregationEndpoint.Input2());\n                query.Resource<AggregationEndpoint.Resource4>();\n\n                var aggregatedResponse = aggregator.QueryAggregate(query).GetAwaiter().GetResult();\n\n                aggregatedResponse.responses[0].result.ShouldBeOfType<AggregationEndpoint.Resource1>()\n                    .Name.ShouldBe(\"Jeremy Maclin\");\n\n                aggregatedResponse.responses[1].result.ShouldBeOfType<AggregationEndpoint.Resource2>();\n                aggregatedResponse.responses[2].result.ShouldBeOfType<AggregationEndpoint.Resource3>();\n                aggregatedResponse.responses[3].result.ShouldBeOfType<AggregationEndpoint.Resource4>();\n            }\n        }\n\n        [Test]\n        public void use_aggregated_query_reader()\n        {\n            var query = new AggregatedQuery();\n            query.AddQuery(new AggregationEndpoint.Query1 {Name = \"Jeremy Maclin\"});\n            query.Resource<AggregationEndpoint.Resource2>();\n            query.AddQuery(new AggregationEndpoint.Input2());\n            query.Resource<AggregationEndpoint.Resource4>();\n\n            var json = JsonUtil.ToJson(query);\n\n            var messageTypes = TestHost.Service<IClientMessageCache>();\n\n            var readQuery = new AggregatedQueryReader().Read(new JsonSerializer(), messageTypes, json);\n\n            readQuery.ShouldNotBeNull();\n            readQuery.queries[0].type.ShouldBe(\"query-1\");\n            readQuery.queries[0].query.ShouldBeOfType<AggregationEndpoint.Query1>()\n                .Name.ShouldBe(\"Jeremy Maclin\");\n\n            readQuery.queries[1].type.ShouldBe(\"resource-2\");\n            readQuery.queries[2].type.ShouldBe(\"input-2\");\n            readQuery.queries[3].query.ShouldBeNull();\n        }\n\n        [Test]\n        public void run_aggregated_query_through_http_endpoint()\n        {\n            var query = new AggregatedQuery();\n            query.AddQuery(new AggregationEndpoint.Query1 {Name = \"Jeremy Maclin\"});\n            query.Resource<AggregationEndpoint.Resource2>();\n            query.AddQuery(new AggregationEndpoint.Input2());\n            query.Resource<AggregationEndpoint.Resource4>();\n\n            TestHost.Scenario(_ =>\n            {\n                _.Post.Json(query);\n\n                _.StatusCodeShouldBeOk();\n                _.ContentTypeShouldBe(\"application/json\");\n\n                var json = _.Response.Body.ReadAsText();\n\n                var response =\n                    new JsonSerializer().Deserialize<AggregationResponse>(new JsonTextReader(new StringReader(json)));\n\n                response.responses.Count().ShouldBe(4);\n                response.responses.Select(x => x.type)\n                    .ShouldHaveTheSameElementsAs(\"resource-1\", \"resource-2\", \"resource-3\", \"resource-4\");\n            });\n        }\n\n        [Test]\n        public void passes_corellation_id_through_http_endpoint()\n        {\n            var data = JsonUtil.ToJson(new\n            {\n                queries = new[]\n                {\n                    new\n                    {\n                        type = \"query-1\",\n                        query = new\n                        {\n                            name = \"Joe\"\n                        },\n                        correlationId = \"123\"\n                    }\n                }\n            });\n\n            var messageTypes = TestHost.Service<IClientMessageCache>();\n\n            var readQuery = new AggregatedQueryReader().Read(new JsonSerializer(), messageTypes, data);\n\n            TestHost.Scenario(_ =>\n            {\n                _.Post.Json(readQuery);\n\n                _.StatusCodeShouldBeOk();\n                _.ContentTypeShouldBe(\"application/json\");\n\n                var json = _.Response.Body.ReadAsText();\n\n                var response =\n                    new JsonSerializer().Deserialize<AggregationResponse>(new JsonTextReader(new StringReader(json)));\n\n                response.responses.Count().ShouldBe(1);\n                response.responses[0].correlationId.ShouldBe(\"123\");\n            });\n        }\n\n        [Test]\n        public void reads_corellation_id_in_aggregated_query_reader()\n        {\n            var json = JsonUtil.ToJson(new\n            {\n                queries = new[]\n                {\n                    new\n                    {\n                        type = \"query-1\",\n                        query = new\n                        {\n                            name = \"Joe\"\n                        },\n                        correlationId = \"123\"\n                    }\n                }\n            });\n\n            var messageTypes = TestHost.Service<IClientMessageCache>();\n\n            var readQuery = new AggregatedQueryReader().Read(new JsonSerializer(), messageTypes, json);\n\n            readQuery.ShouldNotBeNull();\n            readQuery.queries[0].type.ShouldBe(\"query-1\");\n            readQuery.queries[0].query.ShouldBeOfType<AggregationEndpoint.Query1>()\n                .Name.ShouldBe(\"Joe\");\n            readQuery.queries[0].correlationId.ShouldBe(\"123\");\n        }\n\n        [Test]\n        public void reads_query_without_corellation_id_in_aggregated_query_reader()\n        {\n            var json = JsonUtil.ToJson(new\n            {\n                queries = new[]\n                {\n                    new\n                    {\n                        type = \"query-1\",\n                        query = new\n                        {\n                            name = \"Joe\"\n                        }\n                    }\n                }\n            });\n\n            var messageTypes = TestHost.Service<IClientMessageCache>();\n\n            var readQuery = new AggregatedQueryReader().Read(new JsonSerializer(), messageTypes, json);\n\n            readQuery.ShouldNotBeNull();\n            readQuery.queries[0].type.ShouldBe(\"query-1\");\n            readQuery.queries[0].query.ShouldBeOfType<AggregationEndpoint.Query1>()\n                .Name.ShouldBe(\"Joe\");\n            readQuery.queries[0].correlationId.ShouldBeNull();\n        }\n    }\n\n    public class AggregationEndpoint\n    {\n        private readonly IAggregator _aggregator;\n\n        public AggregationEndpoint(IAggregator aggregator)\n        {\n            _aggregator = aggregator;\n        }\n\n        public Resource1 get_query1_Name(Query1 query)\n        {\n            return new Resource1 {Name = query.Name};\n        }\n\n        public Resource2 get_second_resource()\n        {\n            return new Resource2();\n        }\n\n        public Resource3 get_third_resource(Input2 input)\n        {\n            return new Resource3();\n        }\n\n        public Resource4 get_fourth_resource()\n        {\n            return new Resource4();\n        }\n\n        public Task<AggregationResponse> post_aggregated_query(AggregatedQuery query)\n        {\n            return _aggregator.QueryAggregate(query);\n        }\n\n        public async Task<string[]> get_aggregation()\n        {\n            // The call to IAggregator.Fetch() will return an array\n            // of objects. My assumption now is that you'd do this in\n            // the main endpoint method, tack the data store data on\n            // to the view model sent to the main spark view, and\n            // render it to the view with a page helper there.\n            // This is so common now that I think we put a json variable\n            // helper into FubuMVC.Core.\n            return (await _aggregator.Fetch(_ =>\n            {\n                // By an input query\n                _.Query(new Query1 {Name = \"Jeremy Maclin\"});\n\n                // By the resource type\n                _.Resource<Resource2>();\n\n                // By the input type as a marker\n                _.Input<Input2>();\n\n                // By action method\n                _.Action<AggregationEndpoint>(x => x.get_fourth_resource());\n            }).ConfigureAwait(false))\n                .Select(x => x.ToString())\n                .ToArray();\n        }\n\n        [ClientMessage]\n        public class Input1\n        {\n\n        }\n\n        [ClientMessage]\n        public class Resource2\n        {\n            public override string ToString()\n            {\n                return \"I am Resource2\";\n            }\n        }\n\n        [ClientMessage]\n        public class Input2\n        {\n        }\n\n        [ClientMessage]\n        public class Resource3\n        {\n            public override string ToString()\n            {\n                return \"Resource3 from input type 2\";\n            }\n        }\n\n        [ClientMessage]\n        public class Resource4\n        {\n            public override string ToString()\n            {\n                return \"Resource4 from an action identified by expression\";\n            }\n        }\n\n        [ClientMessage]\n        public class Query1\n        {\n            public string Name { get; set; }\n        }\n\n        [ClientMessage]\n        public class Resource1\n        {\n            public string Name { get; set; }\n\n            public override string ToString()\n            {\n                return \"Resource1: \" + Name;\n            }\n        }\n    }\n\n}\n\n"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Ajax/AjaxContinuationProcessingTester.cs",
    "content": "using System.Threading.Tasks;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Ajax;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Runtime;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Ajax\r\n{\r\n    [TestFixture]\r\n    public class AjaxContinuationProcessingTester\r\n    {\r\n        [Test]\r\n        public void send_message_that_gets_through_the_first_behavior_and_is_handled_by_the_last()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.Json(new CharacterInput\r\n                {\r\n                    CharacterClass = \"Ninja\",\r\n                    Race = \"Troll\"\r\n                });\r\n\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentShouldBe(\"{\\\"success\\\":true,\\\"refresh\\\":false}\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void send_message_that_gets_caught_by_validation_behavior()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.Json(new CharacterInput\r\n                {\r\n                    CharacterClass = \"Paladin\",\r\n                    Race = \"Ogre\"\r\n                });\r\n\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentShouldBe(\r\n                    \"{\\\"success\\\":false,\\\"refresh\\\":false,\\\"errors\\\":[{\\\"category\\\":null,\\\"field\\\":\\\"Character\\\",\\\"label\\\":null,\\\"message\\\":\\\"Ogres cannot be Paladins!\\\"}]}\");\r\n            });\r\n        }\r\n    }\r\n\r\n    public class CharacterValidator : BasicBehavior\r\n    {\r\n        private readonly IFubuRequest _request;\r\n\r\n        public CharacterValidator(IFubuRequest request) : base(PartialBehavior.Executes)\r\n        {\r\n            _request = request;\r\n        }\r\n\r\n        protected override Task<DoNext> performInvoke()\r\n        {\r\n            var input = _request.Get<CharacterInput>();\r\n            if (input.Race == \"Ogre\" && input.CharacterClass == \"Paladin\")\r\n            {\r\n                var continuation = new AjaxContinuation();\r\n                continuation.Errors.Add(new AjaxError {field = \"Character\", message = \"Ogres cannot be Paladins!\"});\r\n                _request.Set(continuation);\r\n\r\n                return Task.FromResult(DoNext.Stop);\r\n            }\r\n\r\n            return Task.FromResult(DoNext.Continue);\r\n        }\r\n    }\r\n\r\n    public class AjaxEndpoint\r\n    {\r\n        [WrapWith(typeof (CharacterValidator))]\r\n        public AjaxContinuation post_save_character(CharacterInput input)\r\n        {\r\n            return AjaxContinuation.Successful();\r\n        }\r\n    }\r\n\r\n    public class CharacterInput\r\n    {\r\n        public int Level { get; set; }\r\n        public string CharacterClass { get; set; }\r\n        public string Race { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Assets/AssetIntegrationContext.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.Http.Hosting;\r\nusing FubuMVC.Core.Http.Scenarios;\r\nusing FubuMVC.IntegrationTesting.Views;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Assets\r\n{\r\n    public class AssetIntegrationContext\r\n    {\r\n        public static readonly string Folder = \"Assets\" + Guid.NewGuid();\r\n        public static readonly IFileSystem fileSystem = new FileSystem();\r\n        public static readonly string Application = \"Application\";\r\n        private readonly string _directory;\r\n        private readonly IList<ContentStream> _streams = new List<ContentStream>();\r\n        private FubuRuntime _host;\r\n        private readonly string _applicationDirectory;\r\n        protected Scenario Scenario;\r\n        private Lazy<AssetGraph> _allAssets;\r\n\r\n        public string Mode = null;\r\n\r\n        public AssetIntegrationContext()\r\n        {\r\n            _applicationDirectory = _directory = Folder.AppendPath(Application).ToFullPath();\r\n        }\r\n\r\n        [TestFixtureSetUp]\r\n        public void FixtureSetUp()\r\n        {\r\n            fileSystem.DeleteDirectory(Folder);\r\n            fileSystem.CreateDirectory(Folder);\r\n\r\n            fileSystem.CreateDirectory(Folder.AppendPath(Application));\r\n\r\n            _streams.Each(x => x.DumpContents());\r\n\r\n            var registry = determineRegistry();\r\n            registry.Mode = Mode;\r\n            \r\n            registry.RootPath = _applicationDirectory;\r\n\r\n            var runtime = registry.ToRuntime();\r\n\r\n            _host = runtime;\r\n\r\n            _allAssets = new Lazy<AssetGraph>(() => { return runtime.Get<IAssetFinder>().FindAll(); });\r\n        }\r\n\r\n        private FubuRegistry determineRegistry()\r\n        {\r\n            var registryType = GetType().GetNestedTypes().FirstOrDefault(x => x.IsConcreteTypeOf<FubuRegistry>());\r\n            return registryType == null ? new FubuRegistry() : Activator.CreateInstance(registryType).As<FubuRegistry>();\r\n        }\r\n\r\n        [TestFixtureTearDown]\r\n        public void FixtureTeardown()\r\n        {\r\n            _host.SafeDispose();\r\n            fileSystem.DeleteDirectory(Folder);\r\n        }\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            Scenario = new Scenario(_host);\r\n        }\r\n\r\n        [TearDown]\r\n        public void TearDown()\r\n        {\r\n            Scenario.As<IDisposable>().Dispose();\r\n        }\r\n\r\n        public AssetGraph AllAssets\r\n        {\r\n            get { return _allAssets.Value; }\r\n        }\r\n\r\n        protected ContentStream File(string name)\r\n        {\r\n            var stream = new ContentStream(_directory, name, \"\");\r\n\r\n            _streams.Add(stream);\r\n\r\n            return stream;\r\n        }\r\n\r\n        public IAssetTagBuilder TagBuilder()\r\n        {\r\n            return _host.Get<IAssetTagBuilder>();\r\n        }\r\n\r\n\r\n        public IAssetFinder Assets\r\n        {\r\n            get { return _host.Get<IAssetFinder>(); }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Assets/FindingAndResolving/Adding_CDN_Assets.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Core.Assets;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Assets.FindingAndResolving\r\n{\r\n    [TestFixture, Explicit(\"Flaky on CI. Betting it's file system crap\")]\r\n    public class Adding_CDN_Assets_to_AssetGraph : AssetIntegrationContext\r\n    {\r\n        public Adding_CDN_Assets_to_AssetGraph()\r\n        {\r\n            File(\"foo.js\");\r\n            File(\"bar.js\");\r\n            File(\"fubar.1.2.js\");\r\n        }\r\n\r\n        public class MyRegistry : FubuRegistry\r\n        {\r\n            public MyRegistry()\r\n            {\r\n                AlterSettings<AssetSettings>(x => { x.CdnAssets.Add(new CdnAsset {Url = \"http://server.com/bar.js\"}); });\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void cdn_registration_with_file_name()\r\n        {\r\n            var cdn = new CdnAsset {File = \"fubar.1.2.js\", Url = \"http://server/fubar.js\"};\r\n            var asset = AllAssets.RegisterCdnAsset(cdn);\r\n\r\n            asset.Filename.ShouldBe(\"fubar.1.2.js\");\r\n            asset.File.ShouldNotBeNull(); // just seeing that we match up on existing\r\n            asset.CdnUrl.ShouldBe(\"http://server/fubar.js\");\r\n            asset.Url.ShouldBe(\"fubar.1.2.js\");\r\n        }\r\n\r\n        [Test]\r\n        public void cdn_registration_flows_from_settings_to_graph()\r\n        {\r\n            var asset = Assets.FindAsset(\"bar.js\");\r\n            asset.CdnUrl.ShouldBe(\"http://server.com/bar.js\");\r\n        }\r\n\r\n        [Test]\r\n        public void add_cdn_that_does_not_match()\r\n        {\r\n            var asset = AllAssets.RegisterCdnAsset(new CdnAsset {Url = \"http://cdn.server.com/jquery.js\"});\r\n            asset.CdnUrl.ShouldBe(\"http://cdn.server.com/jquery.js\");\r\n            asset.FallbackTest.ShouldBeNull();\r\n            asset.File.ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void add_cdn_that_does_match()\r\n        {\r\n            var cdn = new CdnAsset\r\n            {\r\n                Url = \"http://cdn.server.com/foo.js\",\r\n                Fallback = \"something == null\"\r\n            };\r\n\r\n            var asset = AllAssets.RegisterCdnAsset(cdn);\r\n            asset.File.ShouldNotBeNull();\r\n            asset.FallbackTest.ShouldBe(\"something == null\");\r\n            asset.CdnUrl.ShouldBe(\"http://cdn.server.com/foo.js\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Assets/FindingAndResolving/Asset_graph_building_and_resolving_with_defaults.cs",
    "content": "﻿using System.Linq;\r\nusing FubuMVC.Core.Runtime;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Assets.FindingAndResolving\r\n{\r\n    [TestFixture]\r\n    public class Asset_graph_building_and_resolving_with_defaults : AssetIntegrationContext\r\n    {\r\n        public Asset_graph_building_and_resolving_with_defaults()\r\n        {\r\n            File(\"MyLib.js\").Write(\"alert(1);\");\r\n            File(\"Folder1/Lib2.js\").Write(\"alert(2);\");\r\n\r\n            File(\"Content/styles/MyStyles.css\").Write(\"/* good styles */\");\r\n\r\n            File(\"image.bmp\");\r\n\r\n\r\n            // These 2 are NOT assets\r\n            File(\"foo.txt\");\r\n            File(\"bar.spark\");\r\n\r\n            File(\"image.jpg\");\r\n            File(\"Content/scripts/bottle1.js\");\r\n            File(\"Content/scripts/folder1/bottle1A.js\");\r\n            File(\"bottle2.js\");\r\n\r\n            // Duplicated from the application, but the app wins\r\n            File(\"MyLib.js\").Write(\"alert(1);\");\r\n\r\n            File(\"BottleB.css\");\r\n\r\n            // To prove that the one in the app wins\r\n            File(\"bottle2.js\");\r\n            File(\"image.gif\");\r\n        }\r\n\r\n        [Test]\r\n        public void all_relative_paths_are_canonical()\r\n        {\r\n            AllAssets.Assets.All(x => !x.File.RelativePath.Contains('\\\\'))\r\n                .ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void finds_js_files()\r\n        {\r\n            AllAssets.Assets.Any(x => x.Url == \"MyLib.js\").ShouldBeTrue();\r\n            AllAssets.Assets.Any(x => x.Url == \"bottle2.js\").ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void finds_css_files()\r\n        {\r\n            AllAssets.Assets.Any(x => x.Url == \"Content/styles/MyStyles.css\").ShouldBeTrue();\r\n            AllAssets.Assets.Any(x => x.Url == \"BottleB.css\").ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void finds_image_files()\r\n        {\r\n            AllAssets.Assets.Any(x => x.Url == \"image.bmp\").ShouldBeTrue();\r\n            AllAssets.Assets.Any(x => x.Url == \"image.gif\").ShouldBeTrue();\r\n            AllAssets.Assets.Any(x => x.Url == \"image.jpg\").ShouldBeTrue();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void file_construction_in_the_application_root()\r\n        {\r\n            var asset = Assets.FindAsset(\"MyLib.js\");\r\n            asset.ShouldNotBeNull();\r\n\r\n            asset.Url.ShouldBe(\"MyLib.js\");\r\n            asset.MimeType.ShouldBeTheSameAs(MimeType.Javascript);\r\n            asset.Filename.ShouldBe(\"MyLib.js\");\r\n        }\r\n\r\n        [Test]\r\n        public void file_construction_in_a_child_folder_of_the_application()\r\n        {\r\n            var asset = Assets.FindAsset(\"Content/styles/MyStyles.css\");\r\n            asset.ShouldNotBeNull();\r\n\r\n            asset.Url.ShouldBe(\"Content/styles/MyStyles.css\");\r\n            asset.MimeType.ShouldBeTheSameAs(MimeType.Css);\r\n            asset.Filename.ShouldBe(\"MyStyles.css\");\r\n        }\r\n\r\n        [Test]\r\n        public void search_by_filename_only()\r\n        {\r\n            Assets.FindAsset(\"bottle1.js\").Url.ShouldBe(\"Content/scripts/bottle1.js\");\r\n            Assets.FindAsset(\"bottle1.js\").Url.ShouldBe(\"Content/scripts/bottle1.js\");\r\n            Assets.FindAsset(\"bottle1.js\").Url.ShouldBe(\"Content/scripts/bottle1.js\");\r\n            Assets.FindAsset(\"bottle1.js\").Url.ShouldBe(\"Content/scripts/bottle1.js\");\r\n        }\r\n\r\n        [Test]\r\n        public void search_by_full_path()\r\n        {\r\n            Assets.FindAsset(\"Content/scripts/bottle1.js\")\r\n                .Url.ShouldBe(\"Content/scripts/bottle1.js\");\r\n        }\r\n\r\n        [Test]\r\n        public void search_by_part_of_the_path()\r\n        {\r\n            Assets.FindAsset(\"folder1/bottle1A.js\")\r\n                .Url.ShouldBe(\"Content/scripts/folder1/bottle1A.js\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Assets/FindingAndResolving/aliasing_assets.cs",
    "content": "﻿using System;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Assets;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Assets.FindingAndResolving\r\n{\r\n    [TestFixture]\r\n    public class aliasing_assets : AssetIntegrationContext\r\n    {\r\n        public aliasing_assets()\r\n        {\r\n            File(\"Folder1/Foo.js\");\r\n            File(\"Folder1/Bar.js\");\r\n        }\r\n\r\n        public class MyRegistry : FubuRegistry\r\n        {\r\n            public MyRegistry()\r\n            {\r\n                AlterSettings<AssetSettings>(x =>\r\n                {\r\n                    x.Aliases.Add(\"foo\", \"Foo.js\");\r\n                    x.Aliases.Add(\"bar\", \"Foo.js\");\r\n                });\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void asset_graph_stores_aliases()\r\n        {\r\n            Assets.FindAsset(\"bar\").Url.ShouldBe(\"Folder1/Foo.js\");\r\n        }\r\n\r\n        [Test]\r\n        public void alias_is_not_found_sad_path()\r\n        {\r\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(\r\n                () => { AllAssets.As<AssetGraph>().StoreAlias(\"bar\", \"nonexistent.js\"); })\r\n                .Message.ShouldContain(\"No asset file named 'nonexistent.js' can be found\");\r\n        }\r\n\r\n        [Test]\r\n        public void aliases_are_applied_at_bootstrapping_time()\r\n        {\r\n            Assets.FindAsset(\"foo\").Url.ShouldBe(\"Folder1/Foo.js\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Assets/JavascriptRouting.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Net;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Ajax;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.Assets.JavascriptRouting;\r\nusing FubuMVC.Core.Http.Hosting;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing FubuMVC.Core.View;\r\nusing HtmlTags;\r\nusing NUnit.Framework;\r\nusing StructureMap;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Assets\r\n{\r\n    [TestFixture]\r\n    public class JavascriptRouting\r\n    {\r\n        [Test]\r\n        public void can_write_the_javascript_routes_for_all_methods()\r\n        {\r\n            using (var host = FubuRuntime.Basic())\r\n            {\r\n                host.Scenario(x =>\r\n                {\r\n                    x.Get.Action<JavascriptRoutesEndpoint>(e => e.get_js_router());\r\n\r\n\r\n                    x.ContentShouldContain(\"myRoutes = {\");\r\n\r\n\r\n                    x.ContentShouldContain(\"\\\"m1\\\":{\\\"name\\\":\\\"m1\\\",\\\"method\\\":\\\"GET\\\",\\\"url\\\":\\\"/js/method1/{Name}\\\"\");\r\n\r\n\r\n                    x.ContentShouldContain(\"\\\"m2\\\":{\\\"name\\\":\\\"m2\\\",\\\"method\\\":\\\"GET\\\",\\\"url\\\":\\\"/js/method2\\\"}\");\r\n                    x.ContentShouldContain(\"\\\"m3\\\":{\\\"name\\\":\\\"m3\\\",\\\"method\\\":\\\"POST\\\",\\\"url\\\":\\\"/js/method3\\\"}\");\r\n                    x.ContentShouldContain(\"\\\"m4\\\":{\\\"name\\\":\\\"m4\\\",\\\"method\\\":\\\"PUT\\\",\\\"url\\\":\\\"/js/method3\\\"}\");\r\n                    x.ContentShouldContain(\"\\\"m5\\\":{\\\"name\\\":\\\"m5\\\",\\\"method\\\":\\\"DELETE\\\",\\\"url\\\":\\\"/js/method3\\\"}\");\r\n\r\n                    x.StatusCodeShouldBe(HttpStatusCode.OK);\r\n                });\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void can_swap_out_the_javascript_route_data()\r\n        {\r\n\r\n            using (var host = FubuRuntime.Basic(x => x.Services.For<IJavascriptRouteData>().Use<FakeJavascriptRouteData>()))\r\n            {\r\n                host.Scenario(x =>\r\n                {\r\n                    x.Get.Action<JavascriptRoutesEndpoint>(e => e.get_js_router());\r\n\r\n\r\n                    x.ContentShouldContain(\"myRoutes = {\");\r\n\r\n\r\n                    x.ContentShouldContain(\r\n                        \"\\\"m1\\\":{\\\"name\\\":\\\"m1\\\",\\\"method\\\":\\\"GET\\\",\\\"url\\\":\\\"/fake/js/method1/{Name}\\\"\");\r\n\r\n\r\n                    x.ContentShouldContain(\"\\\"m2\\\":{\\\"name\\\":\\\"m2\\\",\\\"method\\\":\\\"GET\\\",\\\"url\\\":\\\"/fake/js/method2\\\"}\");\r\n                    x.ContentShouldContain(\"\\\"m3\\\":{\\\"name\\\":\\\"m3\\\",\\\"method\\\":\\\"POST\\\",\\\"url\\\":\\\"/fake/js/method3\\\"}\");\r\n\r\n\r\n                    x.StatusCodeShouldBe(HttpStatusCode.OK);\r\n                });\r\n            }\r\n        }\r\n\r\n        public class FakeJavascriptRouteData : IJavascriptRouteData\r\n        {\r\n            public string ToUrl(RoutedChain chain)\r\n            {\r\n                return (\"/fake/\" + chain.GetRoutePattern()).Replace(\"//\", \"/\");\r\n            }\r\n\r\n            public IEnumerable<RouteParameter> ToParameters(RoutedChain chain)\r\n            {\r\n                return new RouteParameter[0];\r\n            }\r\n        }\r\n    }\r\n\r\n    public class MyJsRouter : JavascriptRouter\r\n    {\r\n        public MyJsRouter()\r\n        {\r\n            Get(\"m1\").InputType<Method1Input>();\r\n            Get(\"m2\").Action<JavascriptRoutesEndpoint>(x => x.get_js_method2());\r\n            Post(\"m3\").InputType<Method1Input>();\r\n            Put(\"m4\").InputType<Method1Input>();\r\n            Delete(\"m5\").InputType<Method1Input>();\r\n        }\r\n    }\r\n\r\n    public class JavascriptRoutesEndpoint\r\n    {\r\n        private readonly FubuHtmlDocument _document;\r\n\r\n        public JavascriptRoutesEndpoint(FubuHtmlDocument document)\r\n        {\r\n            _document = document;\r\n        }\r\n\r\n        public HtmlDocument get_js_router()\r\n        {\r\n            _document.Add(x => x.JavascriptRoutes<MyJsRouter>(\"myRoutes\"));\r\n\r\n            return _document;\r\n        }\r\n\r\n        public string get_js_method1_Name(Method1Input input)\r\n        {\r\n            return \"something\";\r\n        }\r\n\r\n        public string get_js_method2()\r\n        {\r\n            return \"2\";\r\n        }\r\n\r\n        public AjaxContinuation post_js_method3(Method1Input input)\r\n        {\r\n            return AjaxContinuation.Successful();\r\n        }\r\n\r\n        public AjaxContinuation put_js_method3(Method1Input input)\r\n        {\r\n            return AjaxContinuation.Successful();\r\n        }\r\n\r\n        public AjaxContinuation delete_js_method3(Method1Input input)\r\n        {\r\n            return AjaxContinuation.Successful();\r\n        }\r\n    }\r\n\r\n    public class Method1Input\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Assets/Tag_building_in_development_mode.cs",
    "content": "﻿using System.Net;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.View;\r\nusing HtmlTags;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Assets\r\n{\r\n    [TestFixture]\r\n    public class Tag_building_in_development_mode : AssetIntegrationContext\r\n    {\r\n        public Tag_building_in_development_mode()\r\n        {\r\n            Mode = \"development\";\r\n\r\n            File(\"content/scripts/script1.js\");\r\n\r\n            File(\"content/styles/styles1.css\");\r\n\r\n            File(\"content/images/image1.bmp\");\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void request_an_image_that_cannot_be_found()\r\n        {\r\n            Scenario.Get.Action<MissingAssetsEndpoint>(x => x.get_missing_image());\r\n\r\n            Scenario.StatusCodeShouldBe(HttpStatusCode.InternalServerError);\r\n            Scenario.ContentShouldContain(\"Requested image 'missing_image.bmp' cannot be found\".HtmlEncode());\r\n        }\r\n\r\n        [Test]\r\n        public void request_a_script_that_cannot_be_found()\r\n        {\r\n            Scenario.Get.Action<MissingAssetsEndpoint>(x => x.get_missing_script());\r\n\r\n            Scenario.StatusCodeShouldBe(HttpStatusCode.InternalServerError);\r\n            Scenario.ContentShouldContain(\r\n                \"Requested script(s) 'nonexistent.js', 'random.js' cannot be found\".HtmlEncode());\r\n        }\r\n\r\n        [Test]\r\n        public void request_a_stylesheet_that_cannot_be_found()\r\n        {\r\n            Scenario.Get.Action<MissingAssetsEndpoint>(x => x.get_missing_stylesheet());\r\n\r\n            Scenario.StatusCodeShouldBe(HttpStatusCode.InternalServerError);\r\n            Scenario.ContentShouldContain(\r\n                \"Requested stylesheets(s) 'nonexistent.css', 'weird.css' cannot be found\".HtmlEncode());\r\n        }\r\n    }\r\n\r\n    public class MissingAssetsEndpoint\r\n    {\r\n        private readonly FubuHtmlDocument _document;\r\n\r\n        public MissingAssetsEndpoint(FubuHtmlDocument document)\r\n        {\r\n            _document = document;\r\n        }\r\n\r\n        public HtmlDocument get_missing_image()\r\n        {\r\n            _document.Add(x => x.Image(\"missing_image.bmp\"));\r\n\r\n            return _document;\r\n        }\r\n\r\n        public HtmlDocument get_missing_script()\r\n        {\r\n            _document.Add(x => x.Script(\"nonexistent.js\", \"random.js\", \"script1.js\"));\r\n\r\n            return _document;\r\n        }\r\n\r\n        public HtmlDocument get_missing_stylesheet()\r\n        {\r\n            _document.Head.Append(_document.Css(\"nonexistent.css\", \"weird.css\"));\r\n\r\n            return _document;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Assets/Tag_building_in_production_mode.cs",
    "content": "﻿using System.Net;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.View;\r\nusing HtmlTags;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Assets\r\n{\r\n    [TestFixture]\r\n    public class Tag_building_in_production_mode : AssetIntegrationContext\r\n    {\r\n        public Tag_building_in_production_mode()\r\n        {\r\n            File(\"content/scripts/script1.js\");\r\n\r\n            File(\"content/styles/styles1.css\");\r\n\r\n            File(\"content/images/image1.bmp\");\r\n        }\r\n\r\n        [Test]\r\n        public void run_with_existing_assets()\r\n        {\r\n            Scenario.Get.Action<TagBuildingEndpoint>(x => x.get_page_with_assets());\r\n\r\n            Scenario.ContentShouldContain(\r\n                \"<link href=\\\"/content/styles/styles1.css\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\" />\");\r\n            Scenario.ContentShouldContain(\"<script type=\\\"text/javascript\\\" src=\\\"/content/scripts/script1.js\\\">\");\r\n            Scenario.ContentShouldContain(\"<img src=\\\"/content/images/image1.bmp\\\" />\");\r\n\r\n            Scenario.StatusCodeShouldBe(HttpStatusCode.OK);\r\n        }\r\n\r\n        [Test]\r\n        public void non_existent_assets_show_up_with_the_supplied_url()\r\n        {\r\n            Scenario.Get.Action<TagBuildingEndpoint>(x => x.get_page_with_assets());\r\n\r\n            Scenario.ContentShouldContain(\"</script><script type=\\\"text/javascript\\\" src=\\\"/nonexistent.js\\\"></script>\");\r\n            Scenario.ContentShouldContain(\"<link href=\\\"/nonexistent.css\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\" />\");\r\n\r\n            Scenario.ContentShouldContain(\"<img src=\\\"/image2.bmp\\\" />\");\r\n        }\r\n\r\n        [Test]\r\n        public void get_page_with_optional_assets()\r\n        {\r\n            Scenario.Get.Action<TagBuildingEndpoint>(x => x.get_page_with_optional_assets());\r\n            Scenario.StatusCodeShouldBe(HttpStatusCode.OK);\r\n\r\n            // these exist and should be written out\r\n            Scenario.ContentShouldContain(\r\n                \"<link href=\\\"/content/styles/styles1.css\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\" />\");\r\n            Scenario.ContentShouldContain(\"<script type=\\\"text/javascript\\\" src=\\\"/content/scripts/script1.js\\\">\");\r\n\r\n            // these don't, so don't do anything with them\r\n            Scenario.ContentShouldNotContain(\r\n                \"</script><script type=\\\"text/javascript\\\" src=\\\"nonexistent.js\\\"></script>\");\r\n            Scenario.ContentShouldNotContain(\"<link href=\\\"nonexistent.css\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\" />\");\r\n        }\r\n    }\r\n\r\n    public class TagBuildingEndpoint\r\n    {\r\n        private readonly FubuHtmlDocument _document;\r\n\r\n        public TagBuildingEndpoint(FubuHtmlDocument document)\r\n        {\r\n            _document = document;\r\n        }\r\n\r\n        public HtmlDocument get_page_with_assets()\r\n        {\r\n            _document.Head.Append(_document.Css(\"styles1.css\", \"nonexistent.css\"));\r\n\r\n            _document.Add(x => x.Image(\"image1.bmp\"));\r\n            _document.Add(x => x.Image(\"image2.bmp\"));\r\n\r\n            _document.Push(\"footer\");\r\n            _document.Add(x => x.Script(\"script1.js\", \"nonexistent.js\"));\r\n\r\n            return _document;\r\n        }\r\n\r\n\r\n        public HtmlDocument get_page_with_optional_assets()\r\n        {\r\n            _document.Head.Append(_document.OptionalCss(\"styles1.css\", \"nonexistent.css\"));\r\n\r\n\r\n            _document.Push(\"footer\");\r\n            _document.Add(x => x.OptionalScript(\"script1.js\", \"nonexistent.js\"));\r\n\r\n            return _document;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Assets/Tag_building_with_required_scripts.cs",
    "content": "﻿using System.Linq;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Assets\r\n{\r\n    [TestFixture]\r\n    public class Tag_building_with_required_scripts : AssetIntegrationContext\r\n    {\r\n        public Tag_building_with_required_scripts()\r\n        {\r\n            File(\"script1.js\");\r\n            File(\"script2.js\");\r\n            File(\"script3.js\");\r\n            File(\"script4.js\");\r\n            File(\"script5.js\");\r\n            File(\"script6.js\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_write_the_scripts_that_are_queued()\r\n        {\r\n            var builder = TagBuilder();\r\n\r\n            builder.RequireScript(\"script1.js\", \"script2.js\");\r\n\r\n            builder.BuildScriptTags(new[] {\"script3.js\"}).Select(x => x.Attr(\"src\"))\r\n                .ShouldHaveTheSameElementsAs(\"/script1.js\", \"/script2.js\", \"/script3.js\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_not_write_the_same_script_twice()\r\n        {\r\n            var builder = TagBuilder();\r\n\r\n            builder.RequireScript(\"script1.js\", \"script2.js\");\r\n\r\n            builder.BuildScriptTags(new[] {\"script3.js\"}).Select(x => x.Attr(\"src\"))\r\n                .ShouldHaveTheSameElementsAs(\"/script1.js\", \"/script2.js\", \"/script3.js\");\r\n\r\n            builder.RequireScript(\"script3.js\");\r\n            builder.BuildScriptTags(new[] {\"script1.js\", \"script3.js\"}).Any()\r\n                .ShouldBeFalse();\r\n\r\n            builder.BuildScriptTags(new[] {\"script1.js\", \"script2.js\"}).Any()\r\n                .ShouldBeFalse();\r\n\r\n            builder.RequireScript(\"script1.js\");\r\n\r\n            builder.BuildScriptTags(new[] {\"script1.js\"}).Any()\r\n                .ShouldBeFalse();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Assets/asset_writing_headers_are_configurable.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.Http;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Assets\r\n{\r\n    [TestFixture]\r\n    public class asset_writing_headers_are_configurable : AssetIntegrationContext\r\n    {\r\n        public asset_writing_headers_are_configurable()\r\n        {\r\n            File(\"Foo.js\").WriteLine(\"var x = 0;\");\r\n        }\r\n\r\n        public class MyRegistry : FubuRegistry\r\n        {\r\n            public MyRegistry()\r\n            {\r\n                AlterSettings<AssetSettings>(x =>\r\n                {\r\n                    x.Headers[HttpGeneralHeaders.CacheControl] = () => \"Foo!\";\r\n                    x.Headers[HttpGeneralHeaders.Expires] = () => \"Bar!\";\r\n                });\r\n            }\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void writes_the_headers_and_content()\r\n        {\r\n            Scenario.Get.Url(\"/Foo.js\");\r\n\r\n            Scenario.ContentShouldContain(\"var x = 0;\");\r\n\r\n            Scenario.Header(HttpGeneralHeaders.CacheControl).SingleValueShouldEqual(\"Foo!\");\r\n            Scenario.Header(HttpGeneralHeaders.Expires).SingleValueShouldEqual(\"Bar!\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Assets/asset_writing_in_development.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Core.Http;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Assets\r\n{\r\n    [TestFixture]\r\n    public class asset_writing_in_development : AssetIntegrationContext\r\n    {\r\n        public asset_writing_in_development()\r\n        {\r\n            Mode = \"development\";\r\n            File(\"Foo.js\").WriteLine(\"var x = 0;\");\r\n        }\r\n\r\n        [Test]\r\n        public void doesn_not_writes_the_headers_and_content()\r\n        {\r\n            Scenario.Get.Url(\"/Foo.js\");\r\n\r\n            Scenario.ContentShouldContain(\"var x = 0;\");\r\n\r\n            Scenario.Header(HttpGeneralHeaders.CacheControl).ShouldNotBeWritten();\r\n            Scenario.Header(HttpGeneralHeaders.Expires).ShouldNotBeWritten();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Assets/asset_writing_in_production.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Core.Http;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Assets\r\n{\r\n    [TestFixture]\r\n    public class asset_writing_in_production : AssetIntegrationContext\r\n    {\r\n        public asset_writing_in_production()\r\n        {\r\n            Mode = null;\r\n            File(\"Foo.js\").WriteLine(\"var x = 0;\");\r\n        }\r\n\r\n        [Test]\r\n        public void writes_the_headers_and_content()\r\n        {\r\n            Scenario.Get.Url(\"/Foo.js\");\r\n\r\n            Scenario.ContentShouldContain(\"var x = 0;\");\r\n\r\n            Scenario.Header(HttpGeneralHeaders.CacheControl).SingleValueShouldEqual(\"private, max-age=86400\");\r\n            Scenario.Header(HttpGeneralHeaders.Expires).ShouldHaveOneNonNullValue();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Assets/can_write_font_related_assets_Issue_764.cs",
    "content": "﻿using NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Assets\r\n{\r\n    [TestFixture]\r\n    public class can_write_font_related_assets_Issue_764\r\n    {\r\n        [Test]\r\n        public void read_WOFF_file()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"content/styles/fonts/286692_2_0.woff\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentTypeShouldBe(\"application/font-woff\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void read_WOFF2_file()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"content/styles/fonts/woff2_font.woff2\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentTypeShouldBe(\"application/font-woff2\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void read_EOT_file()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"content/styles/fonts/286692_0_0.eot\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentTypeShouldBe(\"application/vnd.ms-fontobject\");\r\n            });\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void read_SVG_file()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"content/styles/fonts/286692_0_0.svg\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentTypeShouldBe(\"image/svg+xml\");\r\n            });\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void read_TTF_file()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"content/styles/fonts/286692_0_0.ttf\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentTypeShouldBe(\"application/octet-stream\");\r\n            });\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Assets/determine_the_public_asset_folder.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.Http.Hosting;\r\nusing FubuMVC.Core.View;\r\nusing HtmlTags;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Assets\r\n{\r\n    [TestFixture]\r\n    public class determine_the_public_asset_folder\r\n    {\r\n\r\n        [Test]\r\n        public void public_folder_only()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.AlterSettings<AssetSettings>(x =>\r\n            {\r\n                x.Mode = SearchMode.PublicFolderOnly;\r\n                x.Version = null;\r\n            });\r\n\r\n            using (var runtime = registry.ToRuntime())\r\n            {\r\n                runtime.Scenario(_ =>\r\n                {\r\n                    _.Get.Action<PublicAssetFolderEndpoint>(x => x.get_public_asset_folder());\r\n\r\n                    _.ContentShouldContain(\"*/public*\");\r\n                });\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void public_folder_and_version()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.AlterSettings<AssetSettings>(x =>\r\n            {\r\n                x.Mode = SearchMode.PublicFolderOnly;\r\n                x.Version = \"1.0.1\";\r\n            });\r\n\r\n            using (var runtime = registry.ToRuntime())\r\n            {\r\n                runtime.Scenario(_ =>\r\n                {\r\n                    _.Get.Action<PublicAssetFolderEndpoint>(x => x.get_public_asset_folder());\r\n\r\n                    _.ContentShouldContain(\"*/public/1.0.1*\");\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    public class PublicAssetFolderEndpoint\r\n    {\r\n        private readonly FubuHtmlDocument _document;\r\n\r\n        public PublicAssetFolderEndpoint(FubuHtmlDocument document)\r\n        {\r\n            _document = document;\r\n        }\r\n\r\n        public HtmlDocument get_public_asset_folder()\r\n        {\r\n            var folder = _document.PublicAssetFolder();\r\n            _document.Add(\"p\").Text(\"*\" + folder + \"*\");\r\n\r\n            return _document;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Async/AsyncRouteIntegrationTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Http.Hosting;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Async\r\n{\r\n    [TestFixture]\r\n    public class AsyncRouteIntegrationTester\r\n    {\r\n        private FubuRuntime _server;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            var registry = new FubuRegistry(x =>\r\n            {\r\n                x.Actions.IncludeType<AsyncAction>();\r\n                x.Policies.Local.Add<EarlyReturnConvention>();\r\n                x.HostWith<Katana>();\r\n            });\r\n\r\n            _server = registry.ToRuntime();\r\n        }\r\n\r\n        [TearDown]\r\n        public void TearDown()\r\n        {\r\n            _server.Dispose();\r\n        }\r\n\r\n        [Test]\r\n        public void when_invoke_chain_with_earlyReturnBehavior_then_httpResponse_should_complete()\r\n        {\r\n            var responseTask = Task.Factory.StartNew(() => _server.Scenario(x =>\r\n            {\r\n                x.Get.Action<AsyncAction>(_ => _.AsyncCall());\r\n            }));\r\n\r\n            responseTask.Wait(TimeSpan.FromSeconds(10)).ShouldBeTrue();\r\n        }\r\n    }\r\n\r\n    public class AsyncAction\r\n    {\r\n        public Task<object> AsyncCall()\r\n        {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    public class EarlyReturnConvention : IConfigurationAction\r\n    {\r\n        public void Configure(BehaviorGraph graph)\r\n        {\r\n            graph.Actions().Each(x => x.AddBefore(Wrapper.For<EarlyReturnBehavior>()));\r\n        }\r\n    }\r\n\r\n    public class EarlyReturnBehavior : IActionBehavior\r\n    {\r\n        public IActionBehavior Inner { get; set; }\r\n\r\n        public Task Invoke()\r\n        {\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            return Task.CompletedTask;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Authorization/end_to_end_authorization_tester.cs",
    "content": "﻿using System.Net;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Continuations;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Security.Authorization;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Authorization\r\n{\r\n    [TestFixture]\r\n    public class end_to_end_authorization_tester\r\n    {\r\n        [TearDown]\r\n        public void TearDown()\r\n        {\r\n            TestHost.Service<SecuritySettings>().Reset();\r\n        }\r\n\r\n        [Test]\r\n        public void call_an_endpoint_that_is_not_authorized_and_get_the_403()\r\n        {\r\n            AuthorizationCheck.IsAuthorized = false;\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<AuthorizedEndpoint>(x => x.get_authorized_text());\r\n                _.StatusCodeShouldBe(HttpStatusCode.Forbidden);\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void call_an_endpoint_that_is_authorized_with_authorization_disabled()\r\n        {\r\n            AuthorizationCheck.IsAuthorized = false;\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Security.AuthorizationEnabled = false;\r\n                _.Get.Action<AuthorizedEndpoint>(x => x.get_authorized_text());\r\n\r\n\r\n                _.StatusCodeShouldBeOk();\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void call_an_endpoint_that_is_authorized_successfully_and_get_The_200_response()\r\n        {\r\n            AuthorizationCheck.IsAuthorized = true;\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<AuthorizedEndpoint>(x => x.get_authorized_text());\r\n                _.StatusCodeShouldBeOk();\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void call_an_endpoint_that_is_not_authorized_with_a_special_auth_failure_handler()\r\n        {\r\n            AuthorizationCheck.IsAuthorized = false;\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<AuthorizedEndpoint>(x => x.get_authorized_text_special());\r\n\r\n                _.StatusCodeShouldBe(HttpStatusCode.Redirect);\r\n                _.Header(HttpResponseHeaders.Location).SingleValueShouldEqual(\"/403\");\r\n            });\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void custom_auth_handler()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.Services.ReplaceService<IAuthorizationFailureHandler, CustomAuthHandler>();\r\n\r\n            AuthorizationCheck.IsAuthorized = false;\r\n            using (var server = registry.ToRuntime())\r\n            {\r\n                server.Scenario(_ =>\r\n                {\r\n                    _.Get.Action<AuthorizedEndpoint>(x => x.get_authorized_text());\r\n                    _.StatusCodeShouldBe(HttpStatusCode.Redirect);\r\n                    _.Header(HttpResponseHeaders.Location).SingleValueShouldEqual(\"/403\");\r\n                });\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void use_custom_auth_handler_on_only_one_endpoint()\r\n        {\r\n            var registry = new FubuRegistry();\r\n\r\n            registry.Configure(\r\n                x =>\r\n                {\r\n                    x.ChainFor<AuthorizedEndpoint>(_ => _.get_authorized_text())\r\n                        .Authorization.FailureHandler<CustomAuthHandler>();\r\n                });\r\n\r\n            AuthorizationCheck.IsAuthorized = false;\r\n            using (var server = registry.ToRuntime())\r\n            {\r\n                server.Scenario(_ =>\r\n                {\r\n                    _.Get.Action<AuthorizedEndpoint>(x => x.get_authorized_text());\r\n\r\n                    _.StatusCodeShouldBe(HttpStatusCode.Redirect);\r\n                    _.Header(HttpResponseHeaders.Location).SingleValueShouldEqual(\"/403\");\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    public class CustomAuthHandler : IAuthorizationFailureHandler\r\n    {\r\n        public FubuContinuation Handle()\r\n        {\r\n            return FubuContinuation.RedirectTo<AuthFailureEndpoint>(x => x.get_403());\r\n        }\r\n    }\r\n\r\n\r\n    public class AuthFailureEndpoint\r\n    {\r\n        private readonly IOutputWriter _writer;\r\n\r\n        public AuthFailureEndpoint(IOutputWriter writer)\r\n        {\r\n            _writer = writer;\r\n        }\r\n\r\n        public string get_403()\r\n        {\r\n            _writer.WriteResponseCode(HttpStatusCode.Forbidden, \"No further may you go\");\r\n            return \"you are forbidden!\";\r\n        }\r\n    }\r\n\r\n    public static class AuthorizationCheck\r\n    {\r\n        public static bool IsAuthorized;\r\n    }\r\n\r\n    public class AuthorizationCheckPolicy : IAuthorizationPolicy\r\n    {\r\n        public AuthorizationRight RightsFor(IFubuRequestContext request)\r\n        {\r\n            return AuthorizationCheck.IsAuthorized ? AuthorizationRight.Allow : AuthorizationRight.Deny;\r\n        }\r\n    }\r\n\r\n    [AuthorizedBy(typeof (AuthorizationCheckPolicy))]\r\n    public class AuthorizedEndpoint\r\n    {\r\n        public string get_authorized_text()\r\n        {\r\n            return \"Hello\";\r\n        }\r\n\r\n        [AuthorizationFailure(typeof (CustomAuthHandler))]\r\n        public string get_authorized_text_special()\r\n        {\r\n            return \"Hola\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Auto_Import_Model_Namespaces.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Core.View;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting\r\n{\r\n    [TestFixture]\r\n    public class Auto_Import_Model_Namespaces\r\n    {\r\n        [Test]\r\n        public void has_all_the_namespaces_for_the_input_and_output_models()\r\n        {\r\n            using (var runtime = FubuRuntime.Basic())\r\n            {\r\n                var namespaces = runtime.Get<CommonViewNamespaces>();\r\n                namespaces.Namespaces.ShouldContain(\"Red.Testing\");\r\n                namespaces.Namespaces.ShouldContain(\"Green.Testing\");\r\n                namespaces.Namespaces.ShouldContain(\"Blue.Testing\");\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nnamespace Red.Testing\r\n{\r\n    public class Model1\r\n    {\r\n    }\r\n\r\n    public class RedModelEndpoint\r\n    {\r\n        public void post_red_model(Model1 model)\r\n        {\r\n        }\r\n    }\r\n}\r\n\r\nnamespace Green.Testing\r\n{\r\n    public class Model1\r\n    {\r\n    }\r\n\r\n    public class GreenModelEndpoint\r\n    {\r\n        public void post_Green_model(Model1 model)\r\n        {\r\n        }\r\n    }\r\n}\r\n\r\nnamespace Blue.Testing\r\n{\r\n    public class Model1\r\n    {\r\n    }\r\n\r\n    public class BlueModelEndpoint\r\n    {\r\n        public void post_Blue_model(Model1 model)\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/CommandLine/Running/RemoteFubuMvcBootstrapperTester.cs",
    "content": "﻿using System;\nusing Fubu.Running;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.IntegrationTesting.CommandLine.Running\n{\n    [TestFixture]\n    public class RemoteFubuMvcBootstrapperTester : InteractionContext<RemoteFubuMvcBootstrapper>\n    {\n        private StartApplication startMessage;\n\n        protected override void beforeEach()\n        {\n            startMessage = new StartApplication\n            {\n                PhysicalPath = Environment.CurrentDirectory,\n                ApplicationName = null,\n                PortNumber = 5500\n            };\n        }\n\n        private void theFoundTypesAre(params Type[] types)\n        {\n            MockFor<IFubuRegistryFinder>().Stub(x => x.Find())\n                                               .Return(types);\n        }\n\n        private void shouldHaveStartedApp<T>() where T : FubuRegistry\n        {\n            MockFor<IFubuMvcApplicationActivator>()\n                .AssertWasCalled(x => x.Initialize(typeof(T), startMessage));\n        }\n\n        [Test]\n        public void start_application_with_no_found_applications()\n        {\n            theFoundTypesAre();\n\n            ClassUnderTest.Receive(startMessage);\n\n            var message = lastMessage<InvalidApplication>();\n\n            message.Message.ShouldBe(\"Could not find any instance of FubuRegistry in any assembly in this directory\");\n        }\n\n        [Test]\n        public void start_application_with_a_known_application()\n        {\n            startMessage.ApplicationName = typeof (App1).Name;\n\n            theFoundTypesAre(typeof(App1), typeof(App2));\n\n            ClassUnderTest.Receive(startMessage);\n\n            shouldHaveStartedApp<App1>();\n        }\n\n        [Test]\n        public void start_application_with_no_known_app_and_multiple_apps_to_choose_from()\n        {\n            theFoundTypesAre(typeof(App1), typeof(App2), typeof(App3));\n\n            ClassUnderTest.Receive(startMessage);\n\n            var message = lastMessage<InvalidApplication>();\n            message.Message.ShouldBe(\"Unable to determine the FubuMVC Application\");\n            message.Applications.ShouldHaveTheSameElementsAs(\"App1\", \"App2\", \"App3\");\n        }\n\n        [Test]\n        public void start_application_with_no_known_app_but_there_is_only_one_type()\n        {\n            theFoundTypesAre(typeof(App3));\n\n            startMessage.ApplicationName = null;\n\n            ClassUnderTest.Receive(startMessage);\n\n            shouldHaveStartedApp<App3>();\n        }\n\n        private T lastMessage<T>() where T : new()\n        {\n            var calls = MockFor<IMessaging>()\n                .GetArgumentsForCallsMadeOn(x => x.Send(new T()), x => x.IgnoreArguments());\n\n            return calls[0][0].As<T>();\n        }\n\n        [Test]\n        public void no_application_types()\n        {\n            theFoundTypesAre();\n\n            ClassUnderTest.Receive(startMessage);\n\n            lastMessage<InvalidApplication>()\n                .Message.ShouldBe(\"Could not find any instance of FubuRegistry in any assembly in this directory\");\n        }\n\n        [Test]\n        public void could_not_find_named_application()\n        {\n            theFoundTypesAre(typeof(App1), typeof(App2));\n\n            startMessage.ApplicationName = \"random\";\n\n            ClassUnderTest.Receive(startMessage);\n\n            var invalidApplication = lastMessage<InvalidApplication>();\n            invalidApplication\n                .Message.ShouldBe(\"Could not find an application named 'random'\");\n        \n            invalidApplication.Applications.ShouldHaveTheSameElementsAs(\"App1\", \"App2\");\n        }\n    }\n\n    public class App1 : FubuRegistry\n    {\n\n    }\n\n    public class App2 : FubuRegistry\n    {\n\n    }\n\n    public class App3 : FubuRegistry\n    {\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/CommandLine/Running/StartApplicationTester.cs",
    "content": "﻿using Fubu.Running;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.IntegrationTesting.CommandLine.Running\n{\n    [TestFixture]\n    public class StartApplicationTester\n    {\n        [Test]\n        public void use_web_sockets_address_sets_the_injection_text()\n        {\n            var start = new StartApplication();\n            start.AutoRefreshWebSocketsAddress = \"ws:foo\";\n\n            start.HtmlHeadInjectedText.ShouldContain(\"ws:foo\");\n            start.HtmlHeadInjectedText.ShouldContain(\"<script\");\n            start.HtmlHeadInjectedText.ShouldContain(\"</script>\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/CommandLine/usage_graph_smoke_tester.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.CommandLine;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.IntegrationTesting.CommandLine\n{\n    [TestFixture]\n    public class usage_graph_smoke_tester\n    {\n        [Test]\n        public void all_commands_usage_graph_works()\n        {\n            var factory = new CommandFactory();\n            factory.RegisterCommands(typeof(IFubuCommand).Assembly);\n\n            factory.AllCommandTypes().Each(t =>\n            {\n\n                try\n                {\n                    var usageGraph = new UsageGraph(t);\n                    usageGraph.WriteUsages(\"fubu\");\n\n                    usageGraph.Usages.Any().ShouldBeTrue();\n\n                }\n                catch (Exception e)\n                {\n                    throw new ApplicationException(\"Command type:  \" + t.FullName, e);\n                }\n            });\n        }\n\n        [Test]\n        public void vdir()\n        {\n            new UsageGraph(typeof(CreateVdirCommand)).WriteUsages(\"fubu\");\n        }\n\n        public class FakeInput{}\n        class CreateVdirCommand : FubuCommand<FakeInput>\n        {\n            public override bool Execute(FakeInput input)\n            {\n                return true;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Conneg/AjaxInputModelBindingIntegrationTester.cs",
    "content": "﻿using System;\nusing System.Net;\nusing System.Reflection;\nusing FubuCore.Binding;\nusing FubuMVC.Core;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.IntegrationTesting.Conneg\n{\n    [TestFixture]\n    public class AjaxInputModelBindingIntegrationTester \n    {\n\n        [Test]\n        public void The_answer_should_be_model_bound_when_posting_json()\n        {\n            var theInput = new JsonInput\n            {\n                GoodThing1 = \"Obiwan\",\n                GoodThing2 = \"Han Solo\"\n            };\n\n            var output = TestHost.Scenario(_ =>\n            {\n                _.Post.Json(theInput);\n                _.StatusCodeShouldBeOk();\n\n             \n            })\n            .Body.ReadAsJson<JsonInput>();\n\n            output.GoodThing1.ShouldBe(\"Obiwan\");\n            output.GoodThing2.ShouldBe(\"Han Solo\");\n            output.TheAnswerToLifeTheUniverseAndEverything.ShouldBe(42);\n        }\n\n        [Test]\n        public void The_answer_should_be_model_bound_when_posting_xml()\n        {\n            var theInput = new XmlInput\n            {\n                BadThing1 = \"Vader\",\n                BadThing2 = \"Jabba\"\n            };\n\n            var output = TestHost.Scenario(_ =>\n            {\n                _.Post.Xml(theInput);\n            }).Body.ReadAsXml<XmlInput>();\n\n            output.BadThing1.ShouldBe(\"Vader\");\n            output.BadThing2.ShouldBe(\"Jabba\");\n            output.TheAnswerToLifeTheUniverseAndEverything.ShouldBe(42);\n        }\n\n        [Test]\n        public void The_answer_should_be_overwritten_by_binding_even_if_already_supplied_in_json_input()\n        {\n            var theInput = new JsonInput\n            {\n                GoodThing1 = \"Obiwan\",\n                GoodThing2 = \"Han Solo\",\n                TheAnswerToLifeTheUniverseAndEverything = 7\n            };\n\n            var output = TestHost.Scenario(_ =>\n            {\n                _.Post.Json(theInput);\n            }).Body.ReadAsJson<JsonInput>();\n\n            output.TheAnswerToLifeTheUniverseAndEverything.ShouldBe(42);\n        }\n\n        [Test]\n        public void The_answer_should_be_overwritten_by_binding_even_if_already_supplied_in_xml_input()\n        {\n            var theInput = new XmlInput\n            {\n                BadThing1 = \"Vader\",\n                BadThing2 = \"Jabba\",\n                TheAnswerToLifeTheUniverseAndEverything = 13\n            };\n\n            var output = TestHost.Scenario(_ =>\n            {\n                _.Post.Xml(theInput);\n            }).Body.ReadAsXml<XmlInput>();\n\n            output.TheAnswerToLifeTheUniverseAndEverything.ShouldBe(42);\n        }\n    }\n\n\n    public class JsonEndpoint\n    {\n        public JsonInput Json(JsonInput input)\n        {\n            return input;\n        }\n    }\n\n\n    public class XmlEndpoint\n    {\n        public XmlInput Xml(XmlInput input)\n        {\n            return input;\n        }\n    }\n\n\n    public interface IAjaxInput\n    {\n    }\n\n\n    public class JsonInput : IAjaxInput\n    {\n        public string GoodThing1 { get; set; }\n        public string GoodThing2 { get; set; }\n\n        public int TheAnswerToLifeTheUniverseAndEverything { get; set; }\n    }\n\n\n    public class XmlInput : IAjaxInput\n    {\n        public string BadThing1 { get; set; }\n        public string BadThing2 { get; set; }\n\n        public int TheAnswerToLifeTheUniverseAndEverything { get; set; }\n    }\n\n\n    public class TheAnswerBinder : IPropertyBinder\n    {\n        public bool Matches(PropertyInfo property)\n        {\n            return (property.PropertyType == typeof (int) &&\n                    property.Name.StartsWith(\"TheAnswer\", StringComparison.InvariantCultureIgnoreCase));\n        }\n\n        public void Bind(PropertyInfo property, IBindingContext context)\n        {\n            property.SetValue(context.Object, 42);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Conneg/ConnegFixture.cs",
    "content": "﻿using System;\nusing System.Net;\nusing FubuCore;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Runtime;\nusing Serenity.Fixtures;\nusing StoryTeller;\nusing StoryTeller.Grammars.Tables;\n\nnamespace FubuMVC.IntegrationTesting.Conneg\n{\n    public class ConnegFixture : SerenityFixture\n    {\n        public ConnegFixture()\n        {\n            Title = \"Content Negotiation\";\n        }\n\n        [ExposeAsTable(\"Conneg Behavior for an Endpoint with the Default Configuration\")]\n        public void DefaultConnegRules(\n            [Default(\"NULL\")] string QueryString, \n            [Header(\"Send As\"), SelectionValues(\"Json\", \"Xml\", \"Form Post\")] string format,\n            [Default(\"*/*\")] string Accepts,\n            out string ContentType,\n            [Default(\"200\")] out int ResponseCode\n            )\n        {\n            DisableAllSecurity();\n\n            var input = new XmlJsonHtmlMessage\n            {\n                Id = Guid.NewGuid()\n            };\n\n            var response = Runtime.Scenario(_ =>\n            {\n                var url = \"send/mixed\";\n                if (QueryString.IsNotEmpty())\n                {\n                    url = url.AppendUrl(QueryString);\n                }\n\n                _.Security.Disable();\n                _.IgnoreStatusCode();\n                _.Post.Url(url);\n\n                _.Request.Accepts(Accepts);\n\n                switch (format)\n                {\n                    case \"Json\":\n                        _.Request.Body.JsonInputIs(input);\n                        _.Request.ContentType(\"application/json\");\n                        break;\n\n                    case \"Xml\":\n                        _.Request.Body.XmlInputIs(input);\n                        _.Request.ContentType(\"application/xml\");\n                        break;\n\n                    case \"Form Post\":\n                        _.Request.Body.WriteFormData(input);\n                        _.Request.ContentType(MimeType.HttpFormMimetype);\n                        break;\n\n                    default:\n                        throw new ArgumentException(\"format\");\n                }\n            });\n\n\n            StoryTellerAssert.Fail(response.StatusCode == 500, () => response.Body.ReadAsText());\n\n            ContentType = response.ContentType();\n            ResponseCode = response.StatusCode;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Conneg/Conneg_Can_Choose_Output_Media_Based_on_Mimetypes.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Net;\r\nusing System.Xml;\r\nusing System.Xml.Serialization;\r\nusing FubuMVC.Core.Json;\r\nusing FubuMVC.Core.Runtime;\r\nusing Newtonsoft.Json;\r\nusing Shouldly;\r\nusing HtmlTags;\r\nusing NUnit.Framework;\r\nusing Formatting = System.Xml.Formatting;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Conneg\r\n{\r\n    [Obsolete(\"Remove this after the ST specs are done\")]\r\n    [TestFixture]\r\n    public class conneg_with_endpoint_that_accepts_all_formatters_and_form_posts\r\n    {\r\n        private readonly XmlJsonHtmlMessage input;\r\n        private readonly string expectedJson;\r\n        private readonly string expectedXml;\r\n\r\n        public conneg_with_endpoint_that_accepts_all_formatters_and_form_posts()\r\n        {\r\n            input = new XmlJsonHtmlMessage\r\n            {\r\n                Id = Guid.NewGuid()\r\n            };\r\n\r\n            expectedJson = TestHost.Service<IJsonSerializer>().Serialize(input);\r\n\r\n            var writer = new StringWriter();\r\n            var xmlWriter = new XmlTextWriter(writer)\r\n            {\r\n                Formatting = Formatting.None\r\n            };\r\n            new XmlSerializer(typeof (XmlJsonHtmlMessage)).Serialize(xmlWriter, input);\r\n            expectedXml = writer.ToString();\r\n        }\r\n\r\n        [Test]\r\n        public void requesting_an_unsupported_media_type_returns_406()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                \r\n                _.Post.Json(input).Accepts(\"random/format\");\r\n                _.StatusCodeShouldBe(HttpStatusCode.NotAcceptable);\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void send_no_accept_header_but_treat_like_anything_is_accepted()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.Json(input);\r\n                _.ContentTypeShouldBe(MimeType.Json);\r\n                _.Response.Body.ReadAsJson<XmlJsonHtmlMessage>()\r\n                    .Id.ShouldBe(input.Id);\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void send_json_expecting_json()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.Json(input).ContentType(\"text/json\").Accepts(\"text/json\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentTypeShouldBe(\"text/json\");\r\n                _.ContentShouldBe(expectedJson);\r\n            });\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.Json(input).ContentType(\"application/json\").Accepts(\"application/json\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentTypeShouldBe(\"application/json\");\r\n                _.ContentShouldBe(expectedJson);\r\n            });\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.Json(input).ContentType(\"application/json\").Accepts(\"application/json,text/xml\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentTypeShouldBe(\"application/json\");\r\n                _.ContentShouldBe(expectedJson);\r\n            });\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.Json(input).ContentType(\"text/json\").Accepts(\"text/json,text/xml\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentTypeShouldBe(\"text/json\");\r\n                _.ContentShouldBe(expectedJson);\r\n            });\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void send_the_request_as_http_form_expect_json_back()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.FormData(input).Accepts(\"text/json\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentTypeShouldBe(\"text/json\");\r\n                _.ContentShouldBe(expectedJson);\r\n            });\r\n            \r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.FormData(input).Accepts(\"application/json\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentTypeShouldBe(\"application/json\");\r\n                _.ContentShouldBe(expectedJson);\r\n            });\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void send_the_request_as_http_form_expect_xml_back()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.FormData(input).Accepts(\"text/xml\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentTypeShouldBe(\"text/xml\");\r\n                _.ContentShouldBe(expectedXml);\r\n            });\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.FormData(input).Accepts(\"application/xml\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentTypeShouldBe(\"application/xml\");\r\n                _.ContentShouldBe(expectedXml);\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void uses_json_for_global_accept()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.Json(input).ContentType(\"text/json\").Accepts(\"*/*\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentTypeShouldBe(\"application/json\");\r\n                _.ContentShouldBe(expectedJson);\r\n            });\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.Json(input).ContentType(\"text/json\").Accepts(\"something/weird,*/*\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentTypeShouldBe(\"application/json\");\r\n                _.ContentShouldBe(expectedJson);\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void will_accept_xml_as_an_input()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.Xml(input);\r\n                _.Request.Accepts(\"text/xml\");\r\n\r\n                _.ContentTypeShouldBe(\"text/xml\");\r\n                _.ContentShouldBe(expectedXml);\r\n            });\r\n        }\r\n    }\r\n\r\n\r\n    public class ConnegEndpoints\r\n    {\r\n        public XmlJsonHtmlMessage post_send_mixed(XmlJsonHtmlMessage message)\r\n        {\r\n            return message;\r\n        }\r\n\r\n        public XmlAndJsonOnlyMessage post_send_xmlorjson(XmlAndJsonOnlyMessage message)\r\n        {\r\n            return message;\r\n        }\r\n    }\r\n\r\n    public interface ConnegMessage\r\n    {\r\n        Guid Id { get; set; }\r\n    }\r\n\r\n    public class XmlJsonHtmlMessage : ConnegMessage\r\n    {\r\n        public Guid Id { get; set; }\r\n    }\r\n\r\n    public class XmlAndJsonOnlyMessage : ConnegMessage\r\n    {\r\n        public Guid Id { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Conneg/Conneg_can_be_corrected_with_querystring_parameters_for_JSON_and_XML.cs",
    "content": "﻿using System;\r\nusing FubuMVC.Core.Runtime;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Conneg\r\n{\r\n    [Obsolete(\"Remove this after the ST specs are done\")]\r\n    [TestFixture]\r\n    public class Conneg_can_be_corrected_with_querystring_parameters_for_JSON_and_XML\r\n    {\r\n        [Test]\r\n        public void force_to_json_with_querystring()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"conneg/override/Foo?Format=Json\").Accepts(\"text\");\r\n                _.Response.Body.ReadAsJson<OverriddenResponse>()\r\n                    .Name.ShouldBe(\"Foo\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void force_to_xml_with_querystring()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"conneg/override/Foo?Format=Xml\").Accepts(\"text/html\");\r\n                _.ContentTypeShouldBe(MimeType.Xml);\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void force_to_json_with_querystring_2()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"conneg/override/Foo?format=JSON\").Accepts(\"text/html\");\r\n\r\n                _.ContentTypeShouldBe(MimeType.Json);\r\n                _.Response.Body.ReadAsJson<OverriddenResponse>()\r\n                    .Name.ShouldBe(\"Foo\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void force_to_xml_with_querystring_2()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"conneg/override/Foo?format=xml\").Accepts(\"text/html\");\r\n                _.ContentTypeShouldBe(MimeType.Xml);\r\n            });\r\n        }\r\n    }\r\n\r\n\r\n    public class OverriddenConnegEndpoint\r\n    {\r\n        public OverriddenResponse get_conneg_override_Name(OverriddenResponse response)\r\n        {\r\n            return response;\r\n        }\r\n    }\r\n\r\n    public class OverriddenResponse\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Conneg/Custom_mimetype_correction_policy_usage.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Runtime;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Conneg\r\n{\r\n    [TestFixture]\r\n    public class Custom_mimetype_correction_policy_usage\r\n    {\r\n        [Test]\r\n        public void use_the_custom_mimetype_correction()\r\n        {\r\n            TestHost.Scenario<RegistryWithCustomMimetypeCorrection>(_ =>\r\n            {\r\n                _.Get.Input(new OverriddenResponse {Name = \"Foo\"});\r\n                _.Request.Accepts(\"text/html\");\r\n\r\n                _.ContentTypeShouldBe(MimeType.Json);\r\n            });\r\n        }\r\n    }\r\n\r\n    public class RegistryWithCustomMimetypeCorrection : FubuRegistry\r\n    {\r\n        public RegistryWithCustomMimetypeCorrection()\r\n        {\r\n            AlterSettings<ConnegSettings>(x => { x.Corrections.Add(new AlwaysJson()); });\r\n        }\r\n    }\r\n\r\n\r\n    public class AlwaysJson : IMimetypeCorrection\r\n    {\r\n        public void Correct(CurrentMimeType mimeType, IHttpRequest request, BehaviorChain chain)\r\n        {\r\n            mimeType.AcceptTypes = new MimeTypeList(MimeType.Json);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Conneg/OutputFromAnActionThatReturnsStrings.cs",
    "content": "using FubuMVC.Core;\r\nusing FubuMVC.Core.Runtime;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Conneg\r\n{\r\n    [TestFixture]\r\n    public class OutputFromAnActionThatReturnsStrings \r\n    {\r\n\r\n        [Test]\r\n        public void action_that_returns_a_string_should_be_formatted_as_plain_text()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<StringWritingEndpoints>(x => x.SayHello());\r\n                _.ContentTypeShouldBe(MimeType.Text);\r\n                _.ContentShouldBe(\"Hello.\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void action_that_returns_a_string_from_a_method_that_should_be_html()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<StringWritingEndpoints>(x => x.SayHelloWithHtml()).Accepts(\"text/html\");\r\n                _.ContentTypeShouldBe(MimeType.Html);\r\n                _.ContentShouldBe(\"<h1>Hello</h1>\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void action_marked_with_html_endpoint_should_be_written_as_html()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<StringWritingEndpoints>(x => x.DifferentKindOfName()).Accepts(\"text/html\");\r\n                _.ContentTypeShouldBe(MimeType.Html);\r\n                _.ContentShouldBe(\"different\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void action_marked_with_html_endpoint_that_returns_string_still_returns_text_when_text_is_requested()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<StringWritingEndpoints>(x => x.DifferentKindOfName()).Accepts(\"text/plain\");\r\n                _.ContentTypeShouldBe(MimeType.Text);\r\n                _.ContentShouldBe(\"different\");\r\n            });\r\n        }\r\n    }\r\n\r\n\r\n    public class StringWritingEndpoints\r\n    {\r\n        public string SayHello()\r\n        {\r\n            return \"Hello.\";\r\n        }\r\n\r\n        public string SayHelloWithHtml()\r\n        {\r\n            return \"<h1>Hello</h1>\";\r\n        }\r\n\r\n        public string DifferentKindOfName()\r\n        {\r\n            return \"different\";\r\n        }\r\n\r\n        public Something AsHtml()\r\n        {\r\n            return new Something();\r\n        }\r\n    }\r\n\r\n    public class Something\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Conneg/Output_from_Actions_that_return_HtmlTags.cs",
    "content": "using FubuMVC.Core.Runtime;\r\nusing HtmlTags;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Conneg\r\n{\r\n    [TestFixture]\r\n    public class Output_from_Actions_that_return_HtmlTags\r\n    {\r\n        [Test]\r\n        public void getting_text_from_an_HtmlTag_action()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<HtmlTagEndpoints>(x => x.get_tag());\r\n                _.ContentTypeShouldBe(MimeType.Html);\r\n                _.ContentShouldBe(new HtmlTagEndpoints().get_tag().ToString());\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void getting_text_from_an_HtmlDocument_action()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<HtmlTagEndpoints>(x => x.get_document());\r\n                _.ContentTypeShouldBe(MimeType.Html);\r\n                _.ContentShouldBe(new HtmlTagEndpoints().get_document().ToString());\r\n            });\r\n        }\r\n    }\r\n\r\n    public class HtmlTagEndpoints\r\n    {\r\n        public HtmlTag get_tag()\r\n        {\r\n            return new HtmlTag(\"div\").Text(\"hello.\");\r\n        }\r\n\r\n        public HtmlDocument get_document()\r\n        {\r\n            return new HtmlDocument\r\n            {\r\n                Title = \"This is a document\"\r\n            };\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Conneg/Output_from_actions_that_return_ajax_continuations.cs",
    "content": "using FubuMVC.Core;\r\nusing FubuMVC.Core.Ajax;\r\nusing FubuMVC.Core.Runtime;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Conneg\r\n{\r\n    [TestFixture]\r\n    public class Output_from_actions_that_return_ajax_continuations \r\n    {\r\n\r\n        [Test]\r\n        public void get_output_from_continuation()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.Json(new AjaxInput\r\n                {\r\n                    Message = \"something\"\r\n                });\r\n\r\n                _.ContentShouldBe(\"{\\\"success\\\":true,\\\"refresh\\\":false,\\\"message\\\":\\\"something\\\"}\");\r\n                _.ContentTypeShouldBe(MimeType.Json);\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void get_output_from_custom_continuation()\r\n        {\r\n            var specialInput = new SpecialInput {Name = \"somebody\"};\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.Json(specialInput);\r\n                _.ContentShouldBe(\"{\\\"success\\\":false,\\\"refresh\\\":false,\\\"name\\\":\\\"somebody\\\"}\");\r\n                _.ContentTypeShouldBe(MimeType.Json);\r\n            });\r\n        }\r\n    }\r\n\r\n    public class AjaxContinuationEndpoints\r\n    {\r\n        public AjaxContinuation post_input(AjaxInput input)\r\n        {\r\n            return new AjaxContinuation\r\n            {\r\n                Success = true,\r\n                Message = input.Message\r\n            };\r\n        }\r\n\r\n        public MySpecialContinuation post_special(SpecialInput input)\r\n        {\r\n            return new MySpecialContinuation\r\n            {\r\n                Name = input.Name\r\n            };\r\n        }\r\n    }\r\n\r\n    public class SpecialInput\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    public class MySpecialContinuation : AjaxContinuation\r\n    {\r\n        public string Name\r\n        {\r\n            get { return this[\"name\"] as string; }\r\n            set { this[\"name\"] = value; }\r\n        }\r\n    }\r\n\r\n    public class AjaxInput\r\n    {\r\n        public string Message { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Conneg/Resource_cannot_be_found_handling.cs",
    "content": "﻿using System.Net;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Conneg\r\n{\r\n    [TestFixture]\r\n    public class Resource_cannot_be_found_handling \r\n    {\r\n        [Test]\r\n        public void the_resource_not_found_handler_should_kick_in()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<MissingResourceEndpoint>(x => x.get_missing());\r\n                _.StatusCodeShouldBe(HttpStatusCode.NotFound);\r\n            });\r\n        }\r\n    }\r\n\r\n    public class MissingResourceEndpoint\r\n    {\r\n        public MissingResource get_missing()\r\n        {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    public class MissingResource\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Conneg/Using_custom_media_readers_and_writers.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Net;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Hosting;\r\nusing FubuMVC.Core.Projections;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.ServiceBus;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Conneg\r\n{\r\n    [TestFixture]\r\n    public class Using_custom_media_readers_and_writers\r\n    {\r\n        [Test]\r\n        public void use_a_custom_media_reader()\r\n        {\r\n            using (var host = FubuRuntime.Basic())\r\n            {\r\n                host.Scenario(x =>\r\n                {\r\n                    x.Post.Input<SomeInput>();\r\n\r\n                    x.Request\r\n                        .AppendHeader(\"x-name\", \"Jeremy\")\r\n                        .ContentType(\"some/input\")\r\n                        .Accepts(\"some/output\");\r\n\r\n                    x.ContentShouldContain(\"The name is Jeremy\");\r\n                    x.StatusCodeShouldBe(HttpStatusCode.OK);\r\n                });\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void use_a_custom_projection_as_a_writer()\r\n        {\r\n            using (var host = FubuRuntime.Basic())\r\n            {\r\n                host.Scenario(x =>\r\n                {\r\n                    x.Post.Input<SomeInput>();\r\n                    x.Request\r\n                        .AppendHeader(\"x-name\", \"Jeremy\")\r\n                        .ContentType(\"some/input\")\r\n                        .Accepts(\"some/json\");\r\n\r\n                    x.ContentShouldContain(\"{\\\"Name\\\":\\\"Jeremy\\\"}\");\r\n                    x.StatusCodeShouldBe(HttpStatusCode.OK);\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    public class SomeProjection : Projection<SomeResource>\r\n    {\r\n        public SomeProjection()\r\n        {\r\n            Value(x => x.Name);\r\n        }\r\n\r\n        public override IEnumerable<string> Mimetypes\r\n        {\r\n            get { yield return \"some/json\"; }\r\n        }\r\n    }\r\n\r\n    public class SomeSpecialEndpoint\r\n    {\r\n        public SomeResource post_some_input(SomeInput input)\r\n        {\r\n            return new SomeResource {Name = input.Name};\r\n        }\r\n    }\r\n\r\n    public class SomeReader : IReader<SomeInput>\r\n    {\r\n        public IEnumerable<string> Mimetypes\r\n        {\r\n            get { yield return \"some/input\"; }\r\n        }\r\n\r\n        public Task<SomeInput> Read(string mimeType, IFubuRequestContext context)\r\n        {\r\n            return new SomeInput {Name = context.Request.GetSingleHeader(\"x-name\")}.ToCompletionTask();\r\n        }\r\n    }\r\n\r\n    public class SomeWriter : IMediaWriter<SomeResource>\r\n    {\r\n        public Task Write(string mimeType, IFubuRequestContext context, SomeResource resource)\r\n        {\r\n            return context.Writer.Write(mimeType, \"The name is \" + resource.Name);\r\n        }\r\n\r\n        public IEnumerable<string> Mimetypes\r\n        {\r\n            get { yield return \"some/output\"; }\r\n        }\r\n    }\r\n\r\n    public class SomeInput\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    public class SomeResource\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Continuations/can_use_continuations_on_a_partial.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Core.Continuations;\r\nusing FubuMVC.Core.Registration;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Continuations\r\n{\r\n    [TestFixture]\r\n    public class can_use_continuations_on_a_partial\r\n    {\r\n        [Test]\r\n        public void transfer_in_a_partial()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Input(new FullInput {Redirect = false});\r\n                _.ContentShouldBe(\"original\");\r\n            });\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Input(new FullInput {Redirect = true});\r\n                _.ContentShouldBe(\"transferred\");\r\n            });\r\n        }\r\n    }\r\n\r\n    public class PartialInput\r\n    {\r\n        public bool Redirect { get; set; }\r\n    }\r\n\r\n    public class FullInput\r\n    {\r\n        public bool Redirect { get; set; }\r\n    }\r\n\r\n    public class PartialFilter\r\n    {\r\n        public FubuContinuation FilterInput(PartialInput input)\r\n        {\r\n            if (input.Redirect)\r\n            {\r\n                return FubuContinuation.TransferTo<PartialEndpoints>(x => x.get_filtered_transferred());\r\n            }\r\n\r\n            return FubuContinuation.NextBehavior();\r\n        }\r\n    }\r\n\r\n    public class PartialEndpoints\r\n    {\r\n        [Filter(typeof (PartialFilter))]\r\n        public FubuContinuation get_full_method_Redirect(FullInput input)\r\n        {\r\n            return FubuContinuation.TransferTo(new PartialInput {Redirect = input.Redirect});\r\n        }\r\n\r\n        [FubuPartial]\r\n        public string get_filtered_partial(PartialInput input)\r\n        {\r\n            return \"original\";\r\n        }\r\n\r\n        [FubuPartial]\r\n        public string get_filtered_transferred()\r\n        {\r\n            return \"transferred\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Continuations/redirects_with_the_get.cs",
    "content": "﻿using System.Net;\r\nusing FubuMVC.Core.Continuations;\r\nusing FubuMVC.Core.Http;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Continuations\r\n{\r\n    [TestFixture]\r\n    public class redirects_with_the_get\r\n    {\r\n        [Test]\r\n        public void the_FubuContinuation_Redirect_uses_GET_by_default()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<RedirectedEndpoint>(x => x.get_redirect());\r\n\r\n                _.StatusCodeShouldBe(HttpStatusCode.Redirect);\r\n                _.Header(HttpResponseHeaders.Location).SingleValueShouldEqual(\"/redirect/correct\");\r\n                _.ContentShouldContain(\"The document has moved\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void FubuContinuation_Redirect_honors_the_explicit_METHOD()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<RedirectedEndpoint>(x => x.get_redirect_explicit());\r\n\r\n                _.StatusCodeShouldBe(HttpStatusCode.Redirect);\r\n                _.Header(HttpResponseHeaders.Location).SingleValueShouldEqual(\"/redirect/wrong\");\r\n                _.ContentShouldContain(\"The document has moved\");\r\n            });\r\n        }\r\n    }\r\n\r\n    public class RedirectRequest\r\n    {\r\n    }\r\n\r\n    public class RedirectedEndpoint\r\n    {\r\n        public FubuContinuation get_redirect()\r\n        {\r\n            return FubuContinuation.RedirectTo<RedirectRequest>();\r\n        }\r\n\r\n        public FubuContinuation get_redirect_explicit()\r\n        {\r\n            return FubuContinuation.RedirectTo<RedirectRequest>(\"POST\");\r\n        }\r\n\r\n        public string get_redirect_correct(RedirectRequest request)\r\n        {\r\n            return \"Right!\";\r\n        }\r\n\r\n        public string post_redirect_wrong(RedirectRequest request)\r\n        {\r\n            return \"Wrong!\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Diagnostics/can_bring_up_the_diagnostics_home_page.cs",
    "content": "﻿using NUnit.Framework;\n\nnamespace FubuMVC.IntegrationTesting.Diagnostics\n{\n    [TestFixture]\n    public class can_bring_up_the_diagnostics_home_page\n    {\n        [Test]\n        public void get_the_200_in_normal_mode()\n        {\n            TestHost.Scenario(_ =>\n            {\n                _.Get.Url(\"_fubu\");\n                _.StatusCodeShouldBeOk();\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Diagnostics/end_to_end_execution_log_tracing_for_http_requests.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Services;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.IntegrationTesting.Diagnostics\n{\n    [TestFixture]\n    public class end_to_end_execution_log_tracing_for_http_requests\n    {\n        [Test]\n        public void see_the_trace_messages_going_through()\n        {\n            using (var runtime = FubuRuntime.Basic(_ => _.Features.Diagnostics.Enable(TraceLevel.Production)))\n            {\n                var id1 = runtime.Scenario(_ =>\n                {\n                    _.Get.Action<DiagnosticEndpoints>(x => x.get_message1());\n                }).RequestId();\n\n                var id2 = runtime.Scenario(_ =>\n                {\n                    _.Get.Action<DiagnosticEndpoints>(x => x.get_message1());\n                }).RequestId();\n\n                var id3 = runtime.Scenario(_ =>\n                {\n                    _.Get.Action<DiagnosticEndpoints>(x => x.get_message2());\n                }).RequestId();\n\n                var id4 = runtime.Scenario(_ =>\n                {\n                    _.Get.Action<DiagnosticEndpoints>(x => x.get_message2());\n                }).RequestId();\n\n                var id5 = runtime.Scenario(_ =>\n                {\n                    _.Get.Action<DiagnosticEndpoints>(x => x.get_message2());\n                }).RequestId();\n\n                var history = runtime.Get<IChainExecutionHistory>();\n\n                var success = Wait.Until(() => history.RecentReports().Count() == 5);\n                success.ShouldBeTrue();\n\n                history.Find(Guid.Parse(id1)).ShouldNotBeNull();\n                history.Find(Guid.Parse(id2)).ShouldNotBeNull();\n                history.Find(Guid.Parse(id3)).ShouldNotBeNull();\n                history.Find(Guid.Parse(id4)).ShouldNotBeNull();\n                history.Find(Guid.Parse(id5)).ShouldNotBeNull();\n\n                Wait.Until(() =>\n                {\n                    return runtime.Behaviors.ChainFor<DiagnosticEndpoints>(x => x.get_message1())\n                        .Performance.HitCount == 2;\n                }).ShouldBeTrue();\n\n                Wait.Until(() =>\n                {\n                    return runtime.Behaviors.ChainFor<DiagnosticEndpoints>(x => x.get_message2())\n                        .Performance.HitCount == 3;\n                }).ShouldBeTrue();\n\n\n            }\n        }\n\n        [Test]\n        public void log_partial_execution()\n        {\n            using (var runtime = FubuRuntime.Basic(_ => _.Features.Diagnostics.Enable(TraceLevel.Verbose)))\n            {\n                var id = runtime.Scenario(_ =>\n                {\n                    _.Get.Url(\"with/partial\");\n                }).RequestId();\n\n                var history = runtime.Get<IChainExecutionHistory>();\n\n                Wait.Until(() => history.RecentReports().Any()).ShouldBeTrue();\n\n                var log = history.Find(Guid.Parse(id));\n\n                log.ShouldNotBeNull();\n\n                var chain = runtime.Behaviors.ChainFor<DiagnosticEndpoints>(x => x.get_response1(null));\n                log.Activity.Nested.Single().Nested.Single(x => x.Subject is BehaviorChain).Subject.ShouldBe(chain);\n            }\n        }\n    }\n\n    public class DiagnosticEndpoints\n    {\n        private readonly IPartialInvoker _invoker;\n\n        public DiagnosticEndpoints(IPartialInvoker invoker)\n        {\n            _invoker = invoker;\n        }\n\n        public string get_message1()\n        {\n            return \"Message1\";\n        }\n\n        public string get_response1(Request1 request)\n        {\n            return request.Name;\n        }\n\n        public Task<string> get_with_partial()\n        {\n            return _invoker.InvokeAsHtml(new Request1 {Name = \"Tamba Hali\"});\n        }\n\n        public class Request1\n        {\n            public string Name { get; set; }\n        }\n\n        public class Response1\n        {\n            public string Name { get; set; }\n        }\n\n        public string get_message2()\n        {\n            return \"Message2\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Diagnostics/serving_up_embedded_diagnostic_assets.cs",
    "content": "﻿using NUnit.Framework;\n\nnamespace FubuMVC.IntegrationTesting.Diagnostics\n{\n    [TestFixture]\n    public class serving_up_embedded_diagnostic_assets\n    {\n        [Test]\n        public void can_deliver_up_embedded_diagnostic_asset()\n        {\n            TestHost.Scenario(_ =>\n            {\n                _.Get.Url(\"_fubu/asset/version/bootstrap.min.css\");\n                _.StatusCodeShouldBeOk();\n\n                _.ContentTypeShouldBe(\"text/css\");\n                _.ContentShouldContain(\"Licensed under MIT\");\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/DifferentEndpoint.cs",
    "content": "﻿using HtmlTags;\n\nnamespace FubuMVC.IntegrationTesting\n{\n\n    public class DifferentEndpoint\n    {\n        public HtmlDocument get_different_Name(DifferentInput input)\n        {\n            var document = new HtmlDocument();\n            document.Title = \"A different page\";\n            document.Add(\"h1\").Text(\"Page for \" + input.Name);\n\n            return document;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/DifferentInput.cs",
    "content": "﻿namespace FubuMVC.IntegrationTesting\n{\n    public class DifferentInput\n    {\n        public string Name { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Downloads/DownloadFileConventionIntegratedTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.Downloads;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.IntegrationTesting.Downloads\n{\n    [TestFixture]\n    public class DownloadFileConventionIntegratedTester\n    {\n        #region Setup/Teardown\n\n        [SetUp]\n        public void SetUp()\n        {\n            graph = BehaviorGraph.BuildFrom(x =>\n            {\n                x.Actions.IncludeType<DownloadTestController>();\n\n                x.Policies.Local.Add<DownloadFileConvention>();\n            });\n        }\n\n        #endregion\n\n        private BehaviorGraph graph;\n\n        [Test]\n        public void should_apply_download_behavior_convention()\n        {\n            BehaviorNode behavior = graph.ChainFor<DownloadTestController>(x => x.Download()).Calls.First().Next;\n            var outputNode = behavior.ShouldBeOfType<DownloadFileNode>();\n            outputNode.BehaviorType.ShouldBe(typeof(DownloadFileBehavior));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Downloads/DownloadTestController.cs",
    "content": "﻿using FubuMVC.Core.Downloads;\n\nnamespace FubuMVC.IntegrationTesting.Downloads\n{\n    public class DownloadTestController\n    {\n        public DownloadFileModel Download()\n        {\n            return null;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/EndpointServiceIntegratedSmokeTester.cs",
    "content": "﻿using System.Linq;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Runtime;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting\r\n{\r\n    [TestFixture]\r\n    public class EndpointServiceIntegratedSmokeTester\r\n    {\r\n        [Test]\r\n        public void chain_is_on_the_endpoint()\r\n        {\r\n            var runtime = FubuRuntime.For<SomeRegistry>();\r\n            var endpoint = runtime.Get<IEndpointService>().EndpointFor<SomeEndpoint>(x => x.get_hello());\r\n\r\n            endpoint.Chain.Calls.Single().HandlerType.ShouldBe(typeof (SomeEndpoint));\r\n        }\r\n    }\r\n\r\n    public class SomeRegistry : FubuRegistry\r\n    {\r\n    }\r\n\r\n    public class SomeEndpoint\r\n    {\r\n        public string get_hello()\r\n        {\r\n            return \"Hello.\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Files/1.txt",
    "content": "﻿content from 1.txt"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/FixieConvention.cs",
    "content": "﻿using FubuMVC.Tests;\n\nnamespace FubuMVC.IntegrationTesting\n{\n    // Leave this here\n    public class FixieConvention : CustomConvention\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/Basic/ServiceBusActionFixture.cs",
    "content": "﻿using System.Linq;\nusing StoryTeller;\nusing StoryTeller.Grammars.Tables;\nusing MessageHistory = FubuMVC.Core.Services.Messaging.Tracking.MessageHistory;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Basic\n{\n    [Hidden]\n    public class ServiceBusActionFixture : Fixture\n    {\n        public ServiceBusActionFixture()\n        {\n            AddSelectionValues(\"Channels\", ServiceBusNodes.Channels.Select(x => x.Name).ToArray());\n            AddSelectionValues(\"Messages\", ServiceBusNodes.MessageTypes.Select(x => x.Name).ToArray());\n        }\n\n\n        [ExposeAsTable(\"Send messages\")]\n        public void Send(string Key, [SelectionList(\"Channels\")]string Node, [SelectionList(\"Messages\")]string Message)\n        {\n            MessageHistory.WaitForWorkToFinish(() =>\n            {\n                Context.State.Retrieve<ServiceBusNodes>().Send(Key, Node, Message);\n            });\n\n            MessageHistory.AssertFinished();\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/Basic/ServiceBusFixture.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing StoryTeller;\nusing StoryTeller.Grammars.Sets;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Basic\n{\n    public class ServiceBusFixture : Fixture\n    {\n\n        private ServiceBusNodes _nodes;\n\n\n        public ServiceBusFixture()\n        {\n            Title = \"Basic Service Bus\";\n        }\n\n        public override void SetUp()\n        {\n            TestMessageRecorder.Clear();\n            _nodes = new ServiceBusNodes();\n            Context.State.Store(_nodes);\n        }\n\n        public override void TearDown()\n        {\n            _nodes.AddTracing(Context);\n            _nodes.ClearAll();\n        }\n\n        public IGrammar ActiveNode()\n        {\n            return Embed<ServiceBusNodeFixture>(\"Active Node\");\n        }\n\n        public IGrammar Actions()\n        {\n            return Embed<ServiceBusActionFixture>(\"Send messages\");\n        }\n\n        public IGrammar MessagesProcessedShouldBe()\n        {\n            Action<ObjectComparison<ProcessedMessage>> configure = _ =>\n            {\n                _.Compare(x => x.Key);\n                _.Compare(x => x.Node).SelectionList(\"Channels\");\n                _.Compare(x => x.Type).SelectionList(\"Messages\");\n                //_.Compare(x => x.Handler).DefaultValue(\"None\");\n            };\n\n            return VerifySetOf(processed).Titled(\"The messages processed should be\").Comparisons(configure);\n\n        }\n\n        private IEnumerable<ProcessedMessage> processed()\n        {\n\n\n            return TestMessageRecorder.AllProcessed.Select(x =>\n            {\n                var name = x.ReceivedAt.ToString().Split('/').Last();\n\n                return new ProcessedMessage\n                {\n                    Key = x.Message.Key,\n                    Node = name.Capitalize(),\n                    Type = x.Message.GetType().Name,\n                    Handler = x.Description\n                };\n            }).Distinct();\n        }\n    }\n\n    public class ProcessedMessage\n    {\n        public string Key { get; set; }\n        public string Type { get; set; }\n        public string Node { get; set; }\n        public string Handler { get; set; }\n\n        protected bool Equals(ProcessedMessage other)\n        {\n            return string.Equals(Key, other.Key) && string.Equals(Type, other.Type) && string.Equals(Node, other.Node);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((ProcessedMessage) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                var hashCode = (Key != null ? Key.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (Type != null ? Type.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (Node != null ? Node.GetHashCode() : 0);\n                return hashCode;\n            }\n        }\n    }\n\n    public class NodeRegistry : FubuTransportRegistry<HarnessSettings>\n    {\n        public NodeRegistry(string node, HarnessSettings settings)\n        {\n            ReplaceSettings(settings);\n\n            NodeId = NodeName = node;\n            Mode = \"testing\";\n\n            Handlers.FindBy(source =>\n            {\n                source.UseAssembly(typeof(Message).Assembly);\n            });\n\n\n        }\n\n        public void AddReply(Type messageType, Type replyType)\n        {\n            var handlerType = typeof (RequestResponseHandler<,>)\n                .MakeGenericType(messageType, replyType);\n\n            Handlers.Include(handlerType);\n        }\n    }\n\n\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/Basic/ServiceBusNodeFixture.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime.Routing;\nusing StoryTeller;\nusing StoryTeller.Grammars.Tables;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Basic\n{\n    [Hidden]\n    public class ServiceBusNodeFixture : Fixture\n    {\n        private NodeRegistry _registry;\n\n        public ServiceBusNodeFixture()\n        {\n            Title = \"Active Service Bus Node\";\n\n            AddSelectionValues(\"Channels\", ServiceBusNodes.Channels.Select(x => x.Name).ToArray());\n            AddSelectionValues(\"Messages\", ServiceBusNodes.MessageTypes.Select(x => x.Name).ToArray());\n        }\n\n        public override void TearDown()\n        {\n            Context.State.Retrieve<ServiceBusNodes>().Start(_registry);\n        }\n\n        [FormatAs(\"Node {name} listens to {channels}\")]\n        public void NodeName([SelectionList(\"Channels\")]string name, string[] channels)\n        {\n            _registry = Context.State.Retrieve<ServiceBusNodes>().CreateNew(name);\n            channels.Each(channelName =>\n            {\n                var prop = ServiceBusNodes.Channels.First(x => x.Name == name);\n                _registry.AlterSettings<ChannelGraph>(graph =>\n                {\n                    var channel = graph.ChannelFor(new SingleProperty(prop));\n                    channel.Incoming = true;\n                });\n            });\n        }\n\n\n\n        [ExposeAsTable(\"Publishes\")]\n        public void Publishes([SelectionList(\"Channels\")] string Channel, [SelectionList(\"Messages\")] string Message)\n        {\n            _registry.AlterSettings<ChannelGraph>(graph =>\n            {\n                var prop = ServiceBusNodes.Channels.First(x => x.Name == Channel);\n                var channel = graph.ChannelFor(new SingleProperty(prop));\n                var messageType = ServiceBusNodes.FindMessageType(Message);\n                channel.Rules.Add(new LambdaRoutingRule(type => type == messageType));\n            });\n        }\n\n        [ExposeAsTable(\"Messages with Replies\")]\n        public void Replies([SelectionList(\"Messages\")] string Message, [SelectionList(\"Messages\")] string Reply)\n        {\n            _registry.AddReply(ServiceBusNodes.FindMessageType(Message), ServiceBusNodes.FindMessageType(Reply));\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/Basic/ServiceBusNodes.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Diagnostics;\nusing Serenity.ServiceBus;\nusing StoryTeller;\nusing StructureMap;\nusing TestMessages.ScenarioSupport;\nusing MessageHistory = FubuMVC.Core.Services.Messaging.Tracking.MessageHistory;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Basic\n{\n    public class ServiceBusNodes\n    {\n        public static int Port = 2480;\n\n        private static readonly Type[] _messageTypes = typeof (Message).Assembly.GetExportedTypes()\n            .Where(x => x.CanBeCastTo<Message>() && x != typeof (Message))\n            .ToArray();\n\n        private readonly Cache<string, FubuRuntime> _runtimes = new Cache<string, FubuRuntime>();\n\n        public static readonly IEnumerable<PropertyInfo> Channels\n            = typeof (HarnessSettings).GetProperties().Where(x => x.PropertyType == typeof (Uri)).ToArray();\n\n        private readonly HarnessSettings _settings;\n\n        public ServiceBusNodes()\n        {\n            _settings = new HarnessSettings();\n\n            Channels.Each(prop =>\n            {\n                Port++;\n\n                var name = prop.Name;\n                var uri = new Uri(\"lq.tcp://localhost:\" + Port + \"/\" + name.ToLower());\n                prop.SetValue(_settings, uri);\n            });\n        }\n\n        public static Type[] MessageTypes\n        {\n            get { return _messageTypes; }\n        }\n\n        public static Type FindMessageType(string message)\n        {\n            return _messageTypes.First(x => x.Name == message);\n        }\n\n        public void ClearAll()\n        {\n            MessageHistory.ClearAll();\n            _runtimes.Each(x => x.SafeDispose());\n            _runtimes.ClearAll();\n        }\n\n\n        public void Send(string key, string node, string messageName)\n        {\n            var runtime = _runtimes[node];\n            var messageType = FindMessageType(messageName);\n\n            var sender =\n                runtime.Get<IContainer>()\n                    .ForGenericType(typeof (Sender<>))\n                    .WithParameters(messageType)\n                    .GetInstanceAs<ISender>();\n\n\n            sender.SendNew(key);\n        }\n\n        public void AddTracing(ISpecContext context)\n        {\n            _runtimes.Each((name, runtime) =>\n            {\n                var provider = new MessageContextualInfoProvider(runtime.Get<IMessagingSession>())\n                {\n                    ShortTitle = name,\n                    Title = name + \" Messaging\"\n                };\n                context.Reporting.Log(provider);\n            });\n        }\n\n        public NodeRegistry CreateNew(string node)\n        {\n            return new NodeRegistry(node, _settings);\n        }\n\n        public void Start(NodeRegistry current)\n        {\n            var runtime = current.ToRuntime();\n            _runtimes[current.NodeName] = runtime;\n        }\n    }\n\n    public interface ISender\n    {\n        void SendNew(string key);\n    }\n\n    public class Sender<T> : ISender where T : Message, new()\n    {\n        private readonly IServiceBus _bus;\n\n        public Sender(IServiceBus bus)\n        {\n            _bus = bus;\n        }\n\n        public void SendNew(string key)\n        {\n            var message = new T\n            {\n                Key = key\n            };\n            _bus.Send(message);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/BatchMessageFixture.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus;\nusing Serenity.ServiceBus;\nusing ServiceNode;\nusing StoryTeller;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus\n{\n    public class BatchMessageFixture : Fixture\n    {\n        public BatchMessageFixture()\n        {\n            Title = \"Batch Message Mechanics\";\n        }\n\n        public IGrammar SendBatch()\n        {\n            return Embed<DefineBatchMessageFixture>(\"Send a batch of messages\");\n        }\n\n        public IGrammar TheRecordedMessagesAre()\n        {\n            return\n                VerifyStringList(() => TextFileWriter.Read())\n                    .Titled(\"The recorded message log from the service should be\");\n        }\n    }\n\n    [Hidden]\n    public class DefineBatchMessageFixture : FubuTransportActFixture\n    {\n        private MessageBatch _batch;\n\n        protected override void setup()\n        {\n            _batch = new MessageBatch();\n        }\n\n        [FormatAs(\"Description is {description}\")]\n        public void DescriptionIs(string description)\n        {\n            _batch.Description = description;\n        }\n\n        [FormatAs(\"Add color {color}\")]\n        public void SendColor(string color)\n        {\n            _batch.Add(new ColorMessage {Color = color});\n        }\n\n        [FormatAs(\"Add direction {direction}\")]\n        public void SendDirection(string direction)\n        {\n            _batch.Add(new DirectionMessage {Direction = direction});\n        }\n\n        [FormatAs(\"Add state {state}\")]\n        public void SendState(string state)\n        {\n            _batch.Add(new StateMessage {State = state});\n        }\n\n        [FormatAs(\"Add team {team}\")]\n        public void SendTeam(string team)\n        {\n            _batch.Add(new TeamMessage {Team = team});\n        }\n\n        protected override void teardown()\n        {\n            Retrieve<IServiceBus>().Send(_batch);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/Monitoring/FakePersistentTask.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing OpenQA.Selenium.Safari.Internal;\nusing StoryTeller;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Monitoring\n{\n    public class FakePersistentTask : IPersistentTask\n    {\n        public Exception ActivationException = null;\n        public Exception AssertAvailableException = null;\n        public Exception DeactivateException = null;\n\n        public FakePersistentTask(Uri subject)\n        {\n            Subject = subject;\n        }\n\n        public void IsFullyFunctional()\n        {\n            Timesout = false;\n            ActivationException = AssertAvailableException = null;\n        }\n\n        public IEnumerable<string> PreferredNodes { get; set; } = new string[0];\n\n        public Uri Subject { get; private set; }\n\n        public void AssertAvailable()\n        {\n            if (Timesout)\n            {\n                Debug.WriteLine(\"Trying to timeout task \" + Subject);\n                Thread.Sleep(1.Minutes());\n            }\n            Thread.Sleep(10);\n            if (AssertAvailableException != null) throw AssertAvailableException;\n        }\n\n        public void Activate()\n        {\n            Thread.Sleep(10);\n            if (Timesout)\n            {\n                Thread.Sleep(1.Minutes());\n            }\n            if (ActivationException != null) throw ActivationException;\n\n            IsActive = true;\n        }\n\n        public void Deactivate()\n        {\n            if (DeactivateException != null) throw DeactivateException;\n\n            IsActive = false;\n        }\n\n        public bool IsActive { get; set; }\n\n        public Task<ITransportPeer> SelectOwner(IEnumerable<ITransportPeer> peers)\n        {\n            var ordered = PreferredNodes.Select(x => peers.FirstOrDefault(_ => _.NodeId == x))\n                .Where(x => x != null);\n\n            StoryTellerAssert.Fail(!ordered.Any(), \"No preferred nodes established for this test node\");\n\n            var assignment = new OrderedAssignment(Subject, ordered);\n\n            return assignment.SelectOwner();\n        }\n\n        public void IsFullyFunctionalAndActive()\n        {\n            IsFullyFunctional();\n            IsActive = true;\n        }\n\n        public void IsActiveButNotFunctional(Exception exception)\n        {\n            IsActive = true;\n            AssertAvailableException = exception;\n        }\n\n        public void IsNotActive()\n        {\n            IsActive = false;\n        }\n\n        public void SetState(string state, ISubscriptionPersistence persistence, string nodeId)\n        {\n            Timesout = false;\n\n            switch (state)\n            {\n                case MonitoredNode.HealthyAndFunctional:\n                    IsFullyFunctionalAndActive();\n                    persistence.Alter(nodeId, node => node.AddOwnership(Subject));\n\n                    break;\n\n                case MonitoredNode.ThrowsExceptionOnStartupOrHealthCheck:\n                    ActivationException = new DivideByZeroException();\n                    AssertAvailableException = new HandshakeException();\n                    break;\n\n                case MonitoredNode.TimesOutOnStartupOrHealthCheck:\n                    Timesout = true;\n                    break;\n\n                case MonitoredNode.IsInactive:\n                    IsFullyFunctional();\n                    IsActive = false;\n                    break;\n            }\n        }\n\n        public bool Timesout { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/Monitoring/FakePersistentTaskSource.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.Util;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Monitoring;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Monitoring\n{\n    public class FakePersistentTaskSource : IPersistentTaskSource\n    {\n        private readonly Cache<Uri, FakePersistentTask> _tasks\n            = new Cache<Uri, FakePersistentTask>();\n\n        public FakePersistentTaskSource(string protocol)\n        {\n            Protocol = protocol;\n            _tasks.OnMissing = uri => new FakePersistentTask(uri);\n        }\n\n        public FakePersistentTask this[string name]\n        {\n            get { return _tasks[name.ToUri()]; }\n        }\n\n        public FakePersistentTask this[Uri subject]\n        {\n            get { return _tasks[subject]; }\n        }\n\n        public string Protocol { get; private set; }\n\n        public IEnumerable<FakePersistentTask> FakeTasks()\n        {\n            return _tasks;\n        }\n\n        public IEnumerable<Uri> PermanentTasks()\n        {\n            return _tasks.Select(x => x.Subject);\n        }\n\n        public IPersistentTask CreateTask(Uri uri)\n        {\n            return _tasks[uri];\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/Monitoring/MonitoredNode.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuCore.Util;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing FubuMVC.LightningQueues;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Monitoring\n{\n    public class MonitoredNode : FubuTransportRegistry<MonitoringSettings>, IDisposable\n    {\n        public static readonly Random Random = new Random(100);\n\n        public const string HealthyAndFunctional = \"Healthy and Functional\";\n        public const string TimesOutOnStartupOrHealthCheck = \"Times out on startup or health check\";\n        public const string ThrowsExceptionOnStartupOrHealthCheck = \"Throws exception on startup or health check\";\n        public const string IsInactive = \"Is inactive\";\n\n        private readonly IList<Uri> _initialTasks = new List<Uri>();\n\n        private readonly Cache<string, FakePersistentTaskSource> _sources =\n            new Cache<string, FakePersistentTaskSource>(scheme => new FakePersistentTaskSource(scheme));\n\n        public static readonly InMemorySubscriptionPersistence SubscriptionPersistence = new InMemorySubscriptionPersistence();\n\n        public MonitoredNode(string nodeId, Uri incoming, PersistentTaskMessageListener listener)\n        {\n            Mode = \"Testing\";\n\n            AlterSettings<MonitoringSettings>(x => x.Incoming = incoming);\n            NodeName = \"Monitoring\";\n            NodeId = nodeId;\n\n            Id = nodeId;\n\n            Channel(x => x.Incoming)\n                .DeliveryFastWithoutGuarantee()\n                .ReadIncoming()\n                .UseAsControlChannel();\n\n            ScheduledJob.ActivatedOnStartup(false);\n\n            Services.AddService<ILogListener>(listener);\n\n            AlterSettings<HealthMonitoringSettings>(_ =>\n            {\n                _.TakeOwnershipMessageTimeout = 10.Seconds();\n                _.HealthCheckMessageTimeout = 1.Seconds();\n                _.DeactivationMessageTimeout = 3.Seconds();\n                _.TaskAvailabilityCheckTimeout = 5.Seconds();\n            });\n        }\n\n        public FakePersistentTask TaskFor(string uriString)\n        {\n            return TaskFor(uriString.ToUri());\n        }\n\n        public FakePersistentTask TaskFor(Uri uri)\n        {\n            return _sources[uri.Scheme][uri];\n        }\n\n        public string Id { get; }\n\n        public void Startup(bool monitoringEnabled)\n        {\n            AlterSettings<LightningQueueSettings>(x => x.DisableIfNoChannels = true);\n\n            _sources.Each(x => Services.AddService<IPersistentTaskSource>(x));\n\n            Services.For<ISubscriptionPersistence>().Use(SubscriptionPersistence);\n            ServiceBus.HealthMonitoring\n                .ScheduledExecution(monitoringEnabled\n                    ? ScheduledExecution.WaitUntilInterval\n                    : ScheduledExecution.Disabled)\n                .IntervalSeed(3);\n\n            Runtime = ToRuntime();\n            var controller = Runtime.Get<IPersistentTaskController>();\n\n            if (Runtime.Get<ISubscriptionPersistence>() != SubscriptionPersistence)\n            {\n                throw new Exception(\"No, wrong persistence somehow!\");\n            }\n\n            _initialTasks.Each(subject => controller.TakeOwnership(subject).Wait(1.Seconds()));\n        }\n\n        void IDisposable.Dispose()\n        {\n            Runtime.Dispose();\n        }\n\n        public void AddTask(Uri subject, IEnumerable<string> preferredNodes)\n        {\n            TaskFor(subject).PreferredNodes = preferredNodes;\n        }\n\n        public Task ActivateTask(Uri subject)\n        {\n            return Runtime.Get<IPersistentTaskController>().TakeOwnership(subject);\n        }\n\n        public void AddInitialTask(Uri subject)\n        {\n            _initialTasks.Add(subject);\n        }\n\n        public IEnumerable<TaskState> AssignedTasks()\n        {\n            var controller = Runtime.Get<IPersistentTaskController>();\n            return controller.ActiveTasks().Select(uri => new TaskState {Node = Id, Task = uri});\n        }\n\n        public Task WaitForHealthCheck()\n        {\n            var jobs = Runtime.Get<IPollingJobs>();\n            if (jobs.IsActive<HealthMonitorPollingJob>())\n            {\n                return jobs.WaitForJobToExecute<HealthMonitorPollingJob>();\n            }\n\n            return jobs.ExecuteJob<HealthMonitorPollingJob>();\n        }\n\n        public void Shutdown()\n        {\n            Runtime.Dispose();\n        }\n\n        public FubuRuntime Runtime { get; private set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/Monitoring/MonitoredNodeGroup.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing Serenity.ServiceBus;\nusing StoryTeller;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Monitoring\n{\n    public class MonitoredNodeGroup : IEnumerable<MonitoredNode>, IDisposable\n    {\n        private readonly Cache<string, MonitoredNode> _nodes = new Cache<string, MonitoredNode>();\n        private readonly System.Collections.Generic.IList<Action<MonitoredNode>> _configurations =\n            new System.Collections.Generic.List<Action<MonitoredNode>>();\n\n        private readonly PersistentTaskMessageListener _listener = new PersistentTaskMessageListener();\n\n        public void Add(string nodeId, Uri incoming)\n        {\n            var node = new MonitoredNode(nodeId, incoming, _listener);\n            _nodes[nodeId] = node;\n        }\n\n        public void AddTask(Uri subject, string initialNode,\n            System.Collections.Generic.IEnumerable<string> preferredNodes)\n        {\n            _configurations.Add(node => node.AddTask(subject, preferredNodes));\n\n            if (!initialNode.EqualsIgnoreCase(\"none\"))\n            {\n                _nodes[initialNode].AddInitialTask(subject);\n            }\n        }\n\n        public bool MonitoringEnabled { get; set; }\n\n        public System.Collections.Generic.IEnumerable<PersistentTaskMessage> LoggedEvents()\n        {\n            return _listener.LoggedEvents().Where(x => x.Subject.Scheme != \"scheduled\").ToArray();\n        }\n\n        public MonitoredNode NodeFor(string id)\n        {\n            return _nodes[id];\n        }\n\n        public void Startup()\n        {\n            _nodes.Each(node =>\n            {\n                _configurations.Each(x => x(node));\n                node.Startup(MonitoringEnabled);\n            });\n        }\n\n        public void Dispose()\n        {\n            _nodes.Each(x => x.SafeDispose());\n        }\n\n        public void SetTaskState(Uri subject, string node, string state)\n        {\n            var task = _nodes[node].TaskFor(subject);\n            task.SetState(state, MonitoredNode.SubscriptionPersistence, node);\n        }\n\n        public System.Collections.Generic.IEnumerable<TaskState> AssignedTasks()\n        {\n            return _nodes.SelectMany(x => x.AssignedTasks()).Where(x => x.Task.Scheme != \"scheduled\");\n        }\n\n        public System.Collections.Generic.IEnumerable<TaskState> PersistedTasks()\n        {\n            return\n                MonitoredNode.SubscriptionPersistence.AllNodes()\n                    .SelectMany(\n                        node => { return node.OwnedTasks.Select(x => new TaskState {Node = node.Id, Task = x}); })\n                    .Where(x => x.Task.Scheme != \"scheduled\");\n        }\n\n        public void WaitForAllHealthChecks()\n        {\n            var tasks =\n                _nodes.Select(\n                    x =>\n                    {\n                        return\n                            Task.Delay(MonitoredNode.Random.Next(25, 200))\n                                .ContinueWith(t => x.WaitForHealthCheck())\n                                .Unwrap();\n                    });\n\n            Task.WaitAll(tasks.ToArray(), 15.Seconds());\n        }\n\n        public void ShutdownNode(string node)\n        {\n            _nodes[node].Shutdown();\n            _nodes.Remove(node);\n        }\n\n        public System.Collections.Generic.IEnumerable<TransportNode> GetPersistedNodes()\n        {\n            return MonitoredNode.SubscriptionPersistence.NodesForGroup(\"Monitoring\");\n        }\n\n        public void WaitForHealthChecksOn(string node)\n        {\n            _nodes[node].WaitForHealthCheck().Wait(120.Seconds());\n        }\n\n        public void AddLogs(ISpecContext context)\n        {\n            _nodes.Each(node =>\n            {\n                var session = node.Runtime.Get<IMessagingSession>();\n\n                var provider = new MessageContextualInfoProvider(session) {Title = node.Id, ShortTitle = node.Id};\n\n                context.Reporting.Log(node.Id, provider.ToHtml(), node.Id);\n            });\n        }\n\n        public IEnumerator<MonitoredNode> GetEnumerator()\n        {\n            return _nodes.GetEnumerator();\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return GetEnumerator();\n        }\n    }\n\n    public class TaskState\n    {\n        public Uri Task { get; set; }\n        public string Node { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/Monitoring/MonitoringFixture.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing HtmlTags;\nusing Serenity.ServiceBus;\nusing StoryTeller;\nusing StoryTeller.Grammars.Tables;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Monitoring\n{\n    public class MonitoringFixture : FubuTransportActFixture\n    {\n        private MonitoredNodeGroup _nodes;\n\n        public MonitoringFixture()\n        {\n            Title = \"Health Monitoring, Failover, and Task Assignment\";\n\n            this[\"Context\"] = Embed<MonitoringSetupFixture>(\"If the nodes and tasks are\");\n        }\n\n        protected override void setup()\n        {\n            _nodes = new MonitoredNodeGroup();\n            Context.State.Store(_nodes);\n        }\n\n        protected override void teardown()\n        {\n            var messages = _nodes.LoggedEvents().ToArray();\n            var table = new TableTag();\n\n            table.AddClasses(\"table\", \"table-striped\");\n            table.AddHeaderRow(_ =>\n            {\n                _.Header(\"Node\");\n                _.Header(\"Subject\");\n                _.Header(\"Type\");\n                _.Header(\"Message\");\n            });\n\n            messages.Each(message =>\n            {\n                table.AddBodyRow(_ =>\n                {\n                    _.Cell(message.NodeId);\n                    _.Cell(message.Subject.ToString());\n                    _.Cell(message.GetType().Name);\n                    _.Cell(message.ToString());\n                });\n            });\n\n\n            Context.Reporting.Log(\"Monitored Node Group\", table.ToString());\n\n            _nodes.AddLogs(Context);\n\n            _nodes.Dispose();\n        }\n\n        [ExposeAsTable(\"If the task state is\")]\n        public void TaskStateIs(\n            Uri Task,\n            string Node,\n            [SelectionValues(MonitoredNode.HealthyAndFunctional, MonitoredNode.TimesOutOnStartupOrHealthCheck,\n                MonitoredNode.ThrowsExceptionOnStartupOrHealthCheck, MonitoredNode.IsInactive)] string State)\n        {\n            _nodes.SetTaskState(Task, Node, State);\n        }\n\n        [FormatAs(\"After the health checks run on all nodes\")]\n        public void AfterTheHealthChecksRunOnAllNodes()\n        {\n            _nodes.WaitForAllHealthChecks();\n\n            waitForTheMessageProcessingToFinish();\n        }\n\n        [FormatAs(\"Task {task} was not reassigned\")]\n        public bool TaskWasNotReassigned(Uri task)\n        {\n            var events = _nodes.LoggedEvents().OfType<ReassigningTask>()\n                .Where(x => x.Subject == task);\n\n            if (events.Any())\n            {\n                StoryTellerAssert.Fail(\"Task {0} was reassigned: \" + events.Select(x => x.ToString()).Join(\"\\n\"));\n            }\n\n            return true;\n        }\n\n        [FormatAs(\"After the health checks run on node {node}\")]\n        public void AfterTheHealthChecksRunOnNode(string node)\n        {\n            _nodes.WaitForHealthChecksOn(node);\n\n            waitForTheMessageProcessingToFinish();\n        }\n\n        [FormatAs(\"Node {Node} drops offline\")]\n        public void NodeDropsOffline(string Node)\n        {\n            _nodes.ShutdownNode(Node);\n        }\n\n        public IGrammar TheTaskAssignmentsShouldBe()\n        {\n            return VerifySetOf(() =>\n            {\n                return _nodes.AssignedTasks();\n            })\n                .Titled(\"The task assignments should be\")\n                .MatchOn(x => x.Task, x => x.Node);\n        }\n\n        public IGrammar ThePersistedAssignmentsShouldBe()\n        {\n            return VerifySetOf(() => _nodes.PersistedTasks())\n                .Titled(\"The persisted task assignments should be\")\n                .MatchOn(x => x.Task, x => x.Node);\n        }\n\n        public IGrammar ThePersistedNodesShouldBe()\n        {\n            return VerifySetOf(() => _nodes.GetPersistedNodes())\n                .Titled(\"The persisted nodes should be\")\n                .MatchOn(x => x.Id, x => x.ControlChannel);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/Monitoring/MonitoringSettings.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Monitoring\n{\n    public class MonitoringSettings\n    {\n        public Uri Incoming { get; set; } \n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/Monitoring/MonitoringSetupFixture.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing StoryTeller;\nusing StoryTeller.Grammars.Tables;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Monitoring\n{\n    public class MonitoringSetupFixture : Fixture\n    {\n        private MonitoredNodeGroup _nodes;\n\n        public MonitoringSetupFixture()\n        {\n            Title = \"If the nodes within a cluster are\";\n        }\n\n        public override void SetUp()\n        {\n            _nodes = Context.State.Retrieve<MonitoredNodeGroup>();\n\n            // Really important to do this!\n            MonitoredNode.SubscriptionPersistence.ClearAll();\n        }\n\n        public override void TearDown()\n        {\n            _nodes.Startup();\n\n            var nodes = MonitoredNode.SubscriptionPersistence.AllNodes().Select(x => x.ToString()).Join(\", \");\n            Debug.WriteLine($\"The active transport nodes are {nodes}\");\n\n            foreach (var node in _nodes)\n            {\n                var source = node.Runtime.Get<ITaskMonitoringSource>()\n                    .As<TaskMonitoringSource>();\n\n                var peers = source.BuildPeers();\n\n                Debug.WriteLine($\"For node {node.Id}, the available peers are {peers.Select(x => x.NodeId).Join(\", \")}\");\n            }\n\n\n        }\n\n        [FormatAs(\"The Health Monitoring job is enabled in all nodes\")]\n        public void HealthMonitoringIsEnabled()\n        {\n            _nodes.MonitoringEnabled = true;\n        }\n\n\n        [FormatAs(\"The Health Monitoring job is initially disabled in all nodes\")]\n        public void HealthMonitoringIsDisabled()\n        {\n            _nodes.MonitoringEnabled = false;\n        }\n\n        [ExposeAsTable(\"The nodes in this group are\")]\n        public void TheNodesAre([Header(\"Node Id\")] string id, [Header(\"Incoming Uri\")] Uri incoming)\n        {\n            _nodes.Add(id, incoming);\n        }\n\n        [ExposeAsTable(\"The permanent tasks are\")]\n        public void TheTasksAre([Header(\"Task Uri\")] Uri task, [Header(\"Initial Assigned Node\")] string node,\n            [Header(\"Preferred Nodes in Order\")] string[] nodes)\n        {\n            _nodes.AddTask(task, node, nodes);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/Monitoring/PersistentTaskMessageListener.cs",
    "content": "﻿using System;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Monitoring;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Monitoring\n{\n    public class PersistentTaskMessageListener : ILogListener\n    {\n        private readonly ConcurrentBag<PersistentTaskMessage> _messages = new ConcurrentBag<PersistentTaskMessage>();\n\n        public bool ListensFor(Type type)\n        {\n            return type.CanBeCastTo<PersistentTaskMessage>();\n        }\n\n        public void DebugMessage(object message)\n        {\n            _messages.Add((PersistentTaskMessage) message);\n        }\n\n        public void InfoMessage(object message)\n        {\n            _messages.Add((PersistentTaskMessage)message);\n        }\n\n        public void Debug(string message)\n        {\n            Console.WriteLine(message);\n        }\n\n        public void Info(string message)\n        {\n            Console.WriteLine(message);\n        }\n\n        public void Error(string message, Exception ex)\n        {\n            Console.WriteLine(message);\n            Console.WriteLine(ex);\n        }\n\n        public void Error(object correlationId, string message, Exception ex)\n        {\n            Console.WriteLine(correlationId);\n            Console.WriteLine(message);\n\n            Console.WriteLine(ex);\n        }\n\n        public bool IsDebugEnabled\n        {\n            get\n            {\n                return true;\n            }\n        }\n\n        public bool IsInfoEnabled\n        {\n            get\n            {\n                return true;\n            }\n        }\n\n        public IEnumerable<PersistentTaskMessage> LoggedEvents()\n        {\n            return _messages.ToArray().OrderBy(x => x.Time);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/RunningNode.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing FubuMVC.LightningQueues;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus\n{\n    public class RunningNode\n    {\n        private readonly Uri _replyUri;\n\n        public static readonly HarnessSettings Settings\n            = InMemoryTransport.ToInMemory<HarnessSettings>();\n\n        public static Cache<string, InMemorySubscriptionPersistence> Subscriptions =\n            new Cache<string, InMemorySubscriptionPersistence>(name => new InMemorySubscriptionPersistence());\n\n        private readonly Type _registryType;\n        private readonly string _contents;\n        private FubuRuntime _runtime;\n        private InMemorySubscriptionPersistence _persistence;\n\n        public string Name { get; set; }\n\n        public RunningNode(string typeName, Uri replyUri)\n        {\n            _replyUri = replyUri;\n\n\n            _registryType =\n                Assembly.GetExecutingAssembly()\n                    .ExportedTypes.Where(x => x.IsConcreteTypeOf<FubuRegistry>())\n                    .FirstOrDefault(x => x.Name.EqualsIgnoreCase(typeName));\n\n            var file =\n                new FileSystem().FindFiles(AppDomain.CurrentDomain.BaseDirectory.ParentDirectory().ParentDirectory(),\n                    FileSet.Deep(_registryType.Name + \".cs\")).FirstOrDefault();\n\n            if (file != null)\n            {\n                _contents = new FileSystem().ReadStringFromFile(file);\n            }\n        }\n\n        public void Start()\n        {\n            var registry = Activator.CreateInstance(_registryType).As<FubuRegistry>();\n\n            _persistence = Subscriptions[registry.NodeName];\n            registry.Services.ReplaceService<ISubscriptionPersistence>(_persistence);\n            registry.Services.ReplaceService(Settings);\n\n            registry.AlterSettings<LightningQueueSettings>(x => x.Disabled = true);\n\n            registry.ServiceBus.EnableInMemoryTransport(_replyUri);\n\n            _runtime = registry.ToRuntime();\n        }\n\n        public InMemorySubscriptionPersistence Persistence\n        {\n            get { return _persistence; }\n        }\n\n        public IEnumerable<Subscription> LoadedSubscriptions()\n        {\n            return _runtime.Get<ISubscriptionCache>()\n                .ActiveSubscriptions;\n        }\n\n        public IEnumerable<Subscription> PersistedSubscriptions(SubscriptionRole role = SubscriptionRole.Publishes)\n        {\n            return _runtime.Get<ISubscriptionRepository>().LoadSubscriptions(role);\n        }\n\n\n        public void Dispose()\n        {\n            _runtime.Dispose();\n        }\n\n        public string Contents\n        {\n            get { return _contents; }\n        }\n\n        public IEnumerable<TransportNode> PersistedNodes()\n        {\n            return _runtime.Get<ISubscriptionPersistence>()\n                .NodesForGroup(_runtime.Get<ChannelGraph>().Name);\n        }\n\n        public void RemoveSubscriptions()\n        {\n            _runtime.Get<IServiceBus>().RemoveSubscriptionsForThisNodeAsync().Wait();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/SendAndAwaitFixture.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus;\nusing ServiceNode;\nusing StoryTeller;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus\n{\n    public class SendAndAwaitFixture : Fixture\n    {\n        private Task _task;\n\n        public SendAndAwaitFixture()\n        {\n            Title = \"Send and Await an Acknowledgement\";\n        }\n\n        [FormatAs(\"Send a message that we expect to succeed and wait for the ack\")]\n        public void SendMessageSuccessfully()\n        {\n            _task = Retrieve<IServiceBus>().SendAndWait(new SimpleMessage());\n        }\n\n        [FormatAs(\"Send a message that will fail with an AmbiguousMatchException exception\")]\n        public void SendMessageUnsuccessfully()\n        {\n            _task = Retrieve<IServiceBus>().SendAndWait(new ServiceNode.ErrorMessage());\n        }\n\n        [FormatAs(\"The acknowledgement was received within {seconds} seconds\")]\n        public bool AckIsReceived(int seconds)\n        {\n            var sw = Stopwatch.StartNew();\n            try\n            {\n                _task.Wait(seconds.Seconds());\n            }\n            catch (Exception)\n            {\n            }\n            sw.Stop();\n            return sw.Elapsed.Seconds < seconds;\n        }\n\n        [FormatAs(\"The acknowledgement was successful\")]\n        public bool AckWasSuccessful()\n        {\n            StoryTellerAssert.Fail(_task.IsFaulted, () => _task.Exception.ToString());\n\n            return true;\n        }\n\n        [FormatAs(\"The acknowledgment failed and contained the message {message}\")]\n        public bool TheAckFailedWithMessage(string message)\n        {\n            StoryTellerAssert.Fail(_task.Exception == null, \"The task exception is null\");\n\n            StoryTellerAssert.Fail(!_task.Exception.InnerExceptions.First().ToString().Contains(message), \"The actual exception text was:\\n\" + _task.Exception.ToString());\n\n            return true;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/Subscriptions/HasGlobalSubscriptionsRegistry.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Configuration;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Subscriptions\n{\n    public class HasGlobalSubscriptionsRegistry : FubuTransportRegistry<HarnessSettings>\n    {\n        public HasGlobalSubscriptionsRegistry()\n        {\n            NodeName = \"GlobalSubscriber\";\n            Channel(x => x.Website1).ReadIncoming();\n\n            SubscribeAt(x => x.Website1)\n                .ToSource(x => x.Service1)\n                .ToMessage<OneMessage>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/Subscriptions/HasLocalSubscriptionsRegistry.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Configuration;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Subscriptions\n{\n    public class HasLocalSubscriptionsRegistry : FubuTransportRegistry<HarnessSettings>\n    {\n        public HasLocalSubscriptionsRegistry()\n        {\n            NodeName = \"LocalSubscriber\";\n            Channel(x => x.Website1).ReadIncoming();\n\n            SubscribeLocally()\n                .ToSource(x => x.Service1)\n                .ToMessage<OneMessage>()\n                .ToMessage<TwoMessage>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/Subscriptions/PublishingRegistry.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Configuration;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Subscriptions\n{\n    public class PublishingRegistry : FubuTransportRegistry<HarnessSettings>\n    {\n        public PublishingRegistry()\n        {\n            NodeName = \"Publishing\";\n            Channel(x => x.Service1).ReadIncoming();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Fixtures/ServiceBus/Subscriptions/SubscriptionsFixture.cs",
    "content": "﻿using System.Linq;\nusing System.Reflection;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing FubuMVC.Core.Services.Messaging.Tracking;\nusing HtmlTags;\nusing StoryTeller;\n\nnamespace FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Subscriptions\n{\n    public class SubscriptionsFixture : Fixture\n    {\n        private readonly Cache<string, RunningNode> _nodes = new Cache<string, RunningNode>();\n        private RunningNode _node;\n\n        public SubscriptionsFixture()\n        {\n            AddSelectionValues(\"FubuTransportRegistries\",\n                Assembly.GetExecutingAssembly()\n                    .ExportedTypes.Where(x => x.IsConcreteTypeOf<FubuRegistry>())\n                    .Select(x => x.Name)\n                    .ToArray());\n        }\n\n        public override void SetUp()\n        {\n            RunningNode.Subscriptions.ClearAll();\n            MessageHistory.ClearAll();\n            InMemoryQueueManager.ClearAll();\n        }\n\n        public override void TearDown()\n        {\n            _nodes.Each(x => x.Dispose());\n        }\n\n        [FormatAs(\"Load a node {Key} from {Registry} with reply Uri {ReplyUri}\")]\n        public void LoadNode(string Key, [SelectionList(\"FubuTransportRegistries\")] string Registry, string ReplyUri)\n        {\n            MessageHistory.WaitForWorkToFinish(() =>\n            {\n                var node = new RunningNode(Registry, ReplyUri.ToUri());\n                node.Start();\n\n                _nodes[Key] = node;\n\n                Context.Reporting.Log(\"RunningNode: \" + Key, new CodeTag(Key, node.Contents).ToString());\n            });\n        }\n\n        [FormatAs(\"For node {Key}\")]\n        public void ForNode(string Key)\n        {\n            _node = _nodes[Key];\n        }\n\n        public IGrammar TheActiveSubscriptionsAre()\n        {\n            return VerifySetOf(() => _node.LoadedSubscriptions())\n                .Titled(\"The active subscriptions for publishing are\")\n                .MatchOn(x => x.NodeName, x => x.MessageType, x => x.Source, x => x.Receiver);\n        }\n\n        public IGrammar ThePersistedSubscriptionsAre()\n        {\n            return VerifySetOf(() => _node.PersistedSubscriptions())\n                .Titled(\"The persisted subscriptions for publishing are\")\n                .MatchOn(x => x.NodeName, x => x.MessageType, x => x.Source, x => x.Receiver);\n        }\n\n        public IGrammar TheLocalSubscriptionsAre()\n        {\n            return VerifySetOf(() => _node.PersistedSubscriptions(SubscriptionRole.Subscribes))\n                .Titled(\"The persisted roles for subscribing are\")\n                .MatchOn(x => x.NodeName, x => x.MessageType, x => x.Source, x => x.Receiver);\n        }\n\n        public IGrammar ThePersistedTransportNodesAre()\n        {\n            return VerifySetOf(() => _node.PersistedNodes().Select(x => new TransportNodeItem(x)))\n                .Titled(\"The persisted transport nodes are\")\n                .MatchOn(x => x.NodeName, x => x.Address);\n        }\n\n        [FormatAs(\"Node {Key} removes local subscriptions\")]\n        public void NodeRemovesLocalSubscritpions(string Key)\n        {\n            _nodes[Key].RemoveSubscriptions();\n        }\n    }\n\n    public class TransportNodeItem\n    {\n        public TransportNodeItem(TransportNode node)\n        {\n            NodeName = node.NodeName;\n            Address = node.Addresses.FirstOrDefault(x => x.Scheme == InMemoryChannel.Protocol).ToString();\n        }\n\n        public string NodeName { get; set; }\n        public string Address { get; set; }\n    }\n\n\n    public class CodeTag : HtmlTag\n    {\n        public CodeTag(string name, string code) : base(\"h4\")\n        {\n            Text(name);\n            Next = new HtmlTag(\"pre\", tag =>\n            {\n                tag.Style(\"border\", \"thin solid black\");\n                tag.Style(\"padding\", \"5px\");\n                tag.Text(code);\n                tag.Next = new HtmlTag(\"hr\");\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/FubuMVC.IntegrationTesting.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{022C7B24-4417-493F-9F70-E3F4035FBEDA}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>FubuMVC.IntegrationTesting</RootNamespace>\r\n    <AssemblyName>FubuMVC.IntegrationTesting</AssemblyName>\r\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <TargetFrameworkProfile />\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <PlatformTarget>AnyCPU</PlatformTarget>\r\n    <Prefer32Bit>false</Prefer32Bit>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <Prefer32Bit>false</Prefer32Bit>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"Accessibility\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Drawing\" />\r\n    <Reference Include=\"System.Web\" />\r\n    <Reference Include=\"System.Web.Extensions\" />\r\n    <Reference Include=\"System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL\">\r\n      <HintPath>..\\packages\\Microsoft.AspNet.Razor\\lib\\net40\\System.Web.Razor.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"AboutEndpointIntegrationTester.cs\" />\r\n    <Compile Include=\"Aggregation\\aggregator_integration_tester.cs\" />\r\n    <Compile Include=\"Ajax\\AjaxContinuationProcessingTester.cs\" />\r\n    <Compile Include=\"Assets\\AssetIntegrationContext.cs\" />\r\n    <Compile Include=\"Assets\\asset_writing_headers_are_configurable.cs\" />\r\n    <Compile Include=\"Assets\\asset_writing_in_development.cs\" />\r\n    <Compile Include=\"Assets\\asset_writing_in_production.cs\" />\r\n    <Compile Include=\"Assets\\can_write_font_related_assets_Issue_764.cs\" />\r\n    <Compile Include=\"Assets\\determine_the_public_asset_folder.cs\" />\r\n    <Compile Include=\"Assets\\FindingAndResolving\\Adding_CDN_Assets.cs\" />\r\n    <Compile Include=\"Assets\\FindingAndResolving\\aliasing_assets.cs\" />\r\n    <Compile Include=\"Assets\\FindingAndResolving\\Asset_graph_building_and_resolving_with_defaults.cs\" />\r\n    <Compile Include=\"Assets\\JavascriptRouting.cs\" />\r\n    <Compile Include=\"Assets\\Tag_building_in_development_mode.cs\" />\r\n    <Compile Include=\"Assets\\Tag_building_in_production_mode.cs\" />\r\n    <Compile Include=\"Assets\\Tag_building_with_required_scripts.cs\" />\r\n    <Compile Include=\"Async\\AsyncRouteIntegrationTester.cs\" />\r\n    <Compile Include=\"Authorization\\end_to_end_authorization_tester.cs\" />\r\n    <Compile Include=\"can_register_and_use_OWIN_middleware_from_a_package.cs\" />\r\n    <Compile Include=\"CommandLine\\Running\\RemoteFubuMvcBootstrapperTester.cs\" />\r\n    <Compile Include=\"CommandLine\\Running\\StartApplicationTester.cs\" />\r\n    <Compile Include=\"CommandLine\\usage_graph_smoke_tester.cs\" />\r\n    <Compile Include=\"Conneg\\AjaxInputModelBindingIntegrationTester.cs\" />\r\n    <Compile Include=\"Conneg\\ConnegFixture.cs\" />\r\n    <Compile Include=\"Conneg\\Conneg_can_be_corrected_with_querystring_parameters_for_JSON_and_XML.cs\" />\r\n    <Compile Include=\"Conneg\\Conneg_Can_Choose_Output_Media_Based_on_Mimetypes.cs\" />\r\n    <Compile Include=\"Conneg\\Custom_mimetype_correction_policy_usage.cs\" />\r\n    <Compile Include=\"Conneg\\OutputFromAnActionThatReturnsStrings.cs\" />\r\n    <Compile Include=\"Conneg\\Output_from_actions_that_return_ajax_continuations.cs\" />\r\n    <Compile Include=\"Conneg\\Output_from_Actions_that_return_HtmlTags.cs\" />\r\n    <Compile Include=\"Conneg\\Resource_cannot_be_found_handling.cs\" />\r\n    <Compile Include=\"Conneg\\Using_custom_media_readers_and_writers.cs\" />\r\n    <Compile Include=\"Continuations\\can_use_continuations_on_a_partial.cs\" />\r\n    <Compile Include=\"Continuations\\redirects_with_the_get.cs\" />\r\n    <Compile Include=\"debugger.cs\" />\r\n    <Compile Include=\"Diagnostics\\can_bring_up_the_diagnostics_home_page.cs\" />\r\n    <Compile Include=\"Diagnostics\\end_to_end_execution_log_tracing_for_http_requests.cs\" />\r\n    <Compile Include=\"Diagnostics\\serving_up_embedded_diagnostic_assets.cs\" />\r\n    <Compile Include=\"DifferentInput.cs\" />\r\n    <Compile Include=\"Downloads\\DownloadFileConventionIntegratedTester.cs\" />\r\n    <Compile Include=\"Downloads\\DownloadTestController.cs\" />\r\n    <Compile Include=\"EndpointServiceIntegratedSmokeTester.cs\" />\r\n    <Compile Include=\"FixieConvention.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\Basic\\ServiceBusActionFixture.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\Basic\\ServiceBusNodeFixture.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\Basic\\ServiceBusNodes.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\BatchMessageFixture.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\Monitoring\\FakePersistentTask.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\Monitoring\\FakePersistentTaskSource.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\Monitoring\\MonitoredNode.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\Monitoring\\MonitoredNodeGroup.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\Monitoring\\MonitoringFixture.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\Monitoring\\MonitoringSettings.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\Monitoring\\MonitoringSetupFixture.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\Monitoring\\PersistentTaskMessageListener.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\RunningNode.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\SendAndAwaitFixture.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\Basic\\ServiceBusFixture.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\Subscriptions\\HasGlobalSubscriptionsRegistry.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\Subscriptions\\HasLocalSubscriptionsRegistry.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\Subscriptions\\PublishingRegistry.cs\" />\r\n    <Compile Include=\"Fixtures\\ServiceBus\\Subscriptions\\SubscriptionsFixture.cs\" />\r\n    <Compile Include=\"FubuRegistry_using_parallel_folder_spec.cs\" />\r\n    <Compile Include=\"HelloWorld.cs\" />\r\n    <Compile Include=\"DifferentEndpoint.cs\" />\r\n    <Compile Include=\"Http\\Hosting\\KatanaTester.cs\" />\r\n    <Compile Include=\"Http\\partial_invocations.cs\" />\r\n    <Compile Include=\"Http\\reading_and_writing_http_headers_and_responses_with_OWIN.cs\" />\r\n    <Compile Include=\"Http\\compression_testing.cs\" />\r\n    <Compile Include=\"Json\\IntegratedJsonBindingTester.cs\" />\r\n    <Compile Include=\"map_files_are_whitelisted.cs\" />\r\n    <Compile Include=\"Owin\\binding_against_form_data.cs\" />\r\n    <Compile Include=\"Owin\\binding_against_querystring_values.cs\" />\r\n    <Compile Include=\"Owin\\binding_against_request_cookies.cs\" />\r\n    <Compile Include=\"Owin\\handling_501_responses.cs\" />\r\n    <Compile Include=\"Owin\\handling_async_routes.cs\" />\r\n    <Compile Include=\"Owin\\handling_a_404.cs\" />\r\n    <Compile Include=\"Owin\\Middleware\\HtmlHeadInjectionMiddlewareTester.cs\" />\r\n    <Compile Include=\"Owin\\Owin_url_resolution_tester.cs\" />\r\n    <Compile Include=\"Owin\\passing_the_FubuMode_into_the_OWIN_host.cs\" />\r\n    <Compile Include=\"Owin\\reading_and_writing_json_and_xml_thru_conneg.cs\" />\r\n    <Compile Include=\"Owin\\reading_querystring_values.cs\" />\r\n    <Compile Include=\"Owin\\reading_request_headers.cs\" />\r\n    <Compile Include=\"Owin\\reading_route_data.cs\" />\r\n    <Compile Include=\"Owin\\specifying_environment_key_values_for_owin.cs\" />\r\n    <Compile Include=\"Owin\\using_custom_middleware.cs\" />\r\n    <Compile Include=\"Owin\\writing_a_file_to_output.cs\" />\r\n    <Compile Include=\"Owin\\writing_a_non_default_status_code.cs\" />\r\n    <Compile Include=\"Owin\\writing_response_headers.cs\" />\r\n    <Compile Include=\"Owin\\writing_string_output.cs\" />\r\n    <Compile Include=\"Packaging\\assembly_marked_as_FubuModule_is_added_as_a_package.cs\" />\r\n    <Compile Include=\"Partials\\invoke_as_html_in_endpoint.cs\" />\r\n    <Compile Include=\"performance_timing_smoke_tester.cs\" />\r\n    <Compile Include=\"Projections\\adaptive_property_type_projection_Tester.cs\" />\r\n    <Compile Include=\"Projections\\end_to_end_json_serialization.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"QuitEndpoint.cs\" />\r\n    <Compile Include=\"Runtime\\Files\\FileChangeWatcher_integration_tester.cs\" />\r\n    <Compile Include=\"ScheduledJobs\\ScheduledJobIntegrationTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\authenticated_request_against_an_authenticated_route.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationHarness.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\SampleController.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\unauthenticated_ajax_request_against_an_authenticated_route.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\unauthenticated_request_against_an_authenticated_route.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\unauthenticated_request_against_an_unauthenticated_route.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AuthorizationPreviewServiceIntegratedTester.cs\" />\r\n    <Compile Include=\"Serenity\\App\\AppErrorEndpoint.cs\" />\r\n    <Compile Include=\"Serenity\\BrowserType_selection_tester.cs\" />\r\n    <Compile Include=\"Serenity\\Fixtures\\JavascriptErrorFixture.cs\" />\r\n    <Compile Include=\"Serenity\\Fixtures\\OpenScreenFixture.cs\" />\r\n    <Compile Include=\"Serenity\\SerenitySystemTester.cs\" />\r\n    <Compile Include=\"Serenity\\WaitTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ChainInvokerIntegrationTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Delayed_Processing_Job_Registration_Tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\end_to_end_diagnostics_specs.cs\" />\r\n    <Compile Include=\"ServiceBus\\Messages.cs\" />\r\n    <Compile Include=\"ServiceBus\\PerformanceTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Publishing\\PublishingConfigurationIntegrationTester.cs\" />\r\n    <Compile Include=\"StaticFiles\\reading_static_file_content_with_katana.cs\" />\r\n    <Compile Include=\"Routing\\end_to_end_route_alias_tester.cs\" />\r\n    <Compile Include=\"Samples\\ConnegSamples.cs\" />\r\n    <Compile Include=\"Samples\\FubuContinuationSamples.cs\" />\r\n    <Compile Include=\"Samples\\IFubuRequestUsage.cs\" />\r\n    <Compile Include=\"TestHost.cs\" />\r\n    <Compile Include=\"TestSystem.cs\" />\r\n    <Compile Include=\"UI\\ElementConventionsFubuPageExtensions_FullStackTester_DefaultConventions.cs\" />\r\n    <Compile Include=\"UI\\ElementConventions_for_Partials_in_Loop_Tester.cs\" />\r\n    <Compile Include=\"UI\\Explicit_accessor_overrides_integration_tester.cs\" />\r\n    <Compile Include=\"UI\\FormRequestConventionsIntegrationTester.cs\" />\r\n    <Compile Include=\"UI\\FubuPageExtensions_FullStack_Tester.cs\" />\r\n    <Compile Include=\"UI\\indexer_owner_type_bug_tester.cs\" />\r\n    <Compile Include=\"Using_a_custom_routing_policy.cs\" />\r\n    <Compile Include=\"Auto_Import_Model_Namespaces.cs\" />\r\n    <Compile Include=\"Views\\LayoutAttachment\\Explicit_declaration_of_master_layout_spark.cs\" />\r\n    <Compile Include=\"Views\\Spark\\Activation.cs\" />\r\n    <Compile Include=\"Views\\Spark\\can_use_namespaces_from_common_view_namespaces.cs\" />\r\n    <Compile Include=\"Views\\Spark\\modifies_the_WatchSettings.cs\" />\r\n    <Compile Include=\"Views\\Spark\\Rendering\\FubuSparkViewDecoratorTester.cs\" />\r\n    <Compile Include=\"Views\\Spark\\Rendering\\FubuSparkViewTester.cs\" />\r\n    <Compile Include=\"Views\\Spark\\Simple_rendering_with_precompilation.cs\" />\r\n    <Compile Include=\"Views\\Spark\\Partials.cs\" />\r\n    <Compile Include=\"Views\\Spark\\Partials_do_not_get_layout.cs\" />\r\n    <Compile Include=\"Views\\Spark\\Simple_rendering.cs\" />\r\n    <Compile Include=\"Views\\Spark\\SparkEngineSettingsTester.cs\" />\r\n    <Compile Include=\"Views\\Spark\\SparkModel\\Policies\\StubTemplate.cs\" />\r\n    <Compile Include=\"Views\\Spark\\Three_Pass_Rendering_And_Bindings.cs\" />\r\n    <Compile Include=\"Views\\ViewIntegrationContext.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\r\n      <Project>{E18FD922-0E7A-49CD-B89F-473826077B9D}</Project>\r\n      <Name>FubuMVC.Core</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\FubuMVC.LightningQueues\\FubuMVC.LightningQueues.csproj\">\r\n      <Project>{f151167c-4736-4c67-9697-7876574c05d0}</Project>\r\n      <Name>FubuMVC.LightningQueues</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\FubuMVC.Spark\\FubuMVC.Spark.csproj\">\r\n      <Project>{9d6bf559-6461-4eac-bb16-f976ff43e8da}</Project>\r\n      <Name>FubuMVC.Spark</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\FubuMVC.Tests\\FubuMVC.Tests.csproj\">\r\n      <Project>{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}</Project>\r\n      <Name>FubuMVC.Tests</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Fubu\\Fubu.csproj\">\r\n      <Project>{90dbe31c-948d-47af-8c17-0056511a7313}</Project>\r\n      <Name>Fubu</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\OwinBottle\\OwinBottle.csproj\">\r\n      <Project>{60b6139b-6bda-4860-a475-9675d47888f7}</Project>\r\n      <Name>OwinBottle</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Serenity\\Serenity.csproj\">\r\n      <Project>{900a0419-3579-4dae-85be-71a3e4b34239}</Project>\r\n      <Name>Serenity</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\ServiceNode\\ServiceNode.csproj\">\r\n      <Project>{c71136ae-8197-4a9a-aa5f-9102f657c502}</Project>\r\n      <Name>ServiceNode</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\TestMessages\\TestMessages.csproj\">\r\n      <Project>{3735a25a-28b6-4da3-a4cf-7606538e0155}</Project>\r\n      <Name>TestMessages</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\TestPackage1\\TestPackage1.csproj\">\r\n      <Project>{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}</Project>\r\n      <Name>TestPackage1</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"lmdb.dll\" />\r\n    <Content Include=\"phantomjs.exe\">\r\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r\n    </Content>\r\n    <Content Include=\"Serenity\\App\\errors.js\" />\r\n    <Content Include=\"Specs\\Content Negotiation\\Default_Conneg_Rules.xml\" />\r\n    <Content Include=\"Specs\\Diagnostics\\Open_Core_Diagnostic_Pages.xml\" />\r\n    <Content Include=\"Specs\\Diagnostics\\Open_Service_Bus_Diagnostic_Pages.xml\" />\r\n    <Content Include=\"Specs\\Diagnostics\\Open_StructureMap_Diagnostics_Screens.xml\" />\r\n    <Content Include=\"Specs\\Serenity\\Collect_Javascript_Errors.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\HealthMonitoring\\An_inactive_task_should_get_reassigned.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\HealthMonitoring\\Assign_on_order_of_preference_when_some_nodes_are_down.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\HealthMonitoring\\Assign_on_order_of_preference_when_some_nodes_fail.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\HealthMonitoring\\Assign_on_order_or_preference_when_some_nodes_timeout_on_activation.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\HealthMonitoring\\A_running_task_goes_down_and_gets_reassigned.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\HealthMonitoring\\A_running_task_times_out_on_health_checks_and_gets_reassigned.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\HealthMonitoring\\Do_not_reassign_a_task_that_is_running.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\HealthMonitoring\\Mixed_assigned_and_unassigned_tasks.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\HealthMonitoring\\Node_goes_down_and_its_jobs_get_reassigned.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\HealthMonitoring\\Reassign_a_job_running_on_multiple_nodes.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\HealthMonitoring\\Reassign_a_single_dormant_task.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\HealthMonitoring\\Simple_assignment_of_dormant_tasks.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\Basics\\Batch Messages\\All_messages_in_a_batch_are_processed.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\Basics\\SendAndAwait\\SendAndAwait_Happy_Path.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\Basics\\SendAndAwait\\SendAndAwait_Sad_Path_Exception_reporting.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\Subscriptions\\2nd_publisher_with_global_subscriptions_is_brought_online.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\Subscriptions\\Multiple_nodes_of_global_subscriptions_does_not_duplicate_entries.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\Subscriptions\\Multiple_publishers_all_get_new_subscriptions.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\Subscriptions\\Remove_local_subscriptions.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\Subscriptions\\Simple_global_subscriptions_from_one_node_to_another.xml\" />\r\n    <Content Include=\"Specs\\ServiceBus\\Subscriptions\\Simple_local_subscription.xml\" />\r\n    <None Include=\"FubuTestApplication.application.config\">\r\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r\n    </None>\r\n    <Content Include=\"content\\images\\grid\\cd_run.gif\" />\r\n    <Content Include=\"content\\images\\grid\\dirty.gif\" />\r\n    <Content Include=\"content\\images\\grid\\down.gif\" />\r\n    <Content Include=\"content\\images\\grid\\find.gif\" />\r\n    <Content Include=\"content\\images\\grid\\first.png\" />\r\n    <Content Include=\"content\\images\\grid\\folder.png\" />\r\n    <Content Include=\"content\\images\\grid\\grid-blue-ft.gif\" />\r\n    <Content Include=\"content\\images\\grid\\grid-blue-hd.gif\" />\r\n    <Content Include=\"content\\images\\grid\\headerbg.gif\" />\r\n    <Content Include=\"content\\images\\grid\\headerleft.gif\" />\r\n    <Content Include=\"content\\images\\grid\\headerright.gif\" />\r\n    <Content Include=\"content\\images\\grid\\ico-close.gif\" />\r\n    <Content Include=\"content\\images\\grid\\last.png\" />\r\n    <Content Include=\"content\\images\\grid\\line3.gif\" />\r\n    <Content Include=\"content\\images\\grid\\minus.gif\" />\r\n    <Content Include=\"content\\images\\grid\\next.png\" />\r\n    <Content Include=\"content\\images\\grid\\nochild.gif\" />\r\n    <Content Include=\"content\\images\\grid\\off-first.png\" />\r\n    <Content Include=\"content\\images\\grid\\off-last.png\" />\r\n    <Content Include=\"content\\images\\grid\\off-next.png\" />\r\n    <Content Include=\"content\\images\\grid\\off-prev.png\" />\r\n    <Content Include=\"content\\images\\grid\\plus.gif\" />\r\n    <Content Include=\"content\\images\\grid\\prev.png\" />\r\n    <Content Include=\"content\\images\\grid\\refresh.gif\" />\r\n    <Content Include=\"content\\images\\grid\\resize.gif\" />\r\n    <Content Include=\"content\\images\\grid\\row_add.gif\" />\r\n    <Content Include=\"content\\images\\grid\\row_delete.gif\" />\r\n    <Content Include=\"content\\images\\grid\\row_edit.gif\" />\r\n    <Content Include=\"content\\images\\grid\\sort_asc.gif\" />\r\n    <Content Include=\"content\\images\\grid\\sort_desc.gif\" />\r\n    <Content Include=\"content\\images\\grid\\spacer.gif\" />\r\n    <Content Include=\"content\\images\\grid\\tab_close-on.gif\" />\r\n    <Content Include=\"content\\images\\grid\\tree_leaf.gif\" />\r\n    <Content Include=\"content\\images\\grid\\tree_minus.gif\" />\r\n    <Content Include=\"content\\images\\grid\\tree_plus.gif\" />\r\n    <Content Include=\"content\\images\\grid\\up.gif\" />\r\n    <Content Include=\"content\\images\\icon-add.png\" />\r\n    <Content Include=\"content\\scripts\\jqDnR.js\" />\r\n    <Content Include=\"content\\scripts\\jqModal.js\" />\r\n    <Content Include=\"content\\scripts\\jquery-1.4.2.js\" />\r\n    <Content Include=\"content\\scripts\\jquery.searchFilter.js\" />\r\n    <Content Include=\"content\\scripts\\JsonXml.js\" />\r\n    <Content Include=\"content\\scripts\\Script1.js\" />\r\n    <Content Include=\"content\\scripts\\Script2.js\" />\r\n    <Content Include=\"content\\scripts\\Script3.js\" />\r\n    <Content Include=\"content\\scripts\\Script4.js\" />\r\n    <Content Include=\"content\\scripts\\sub\\Script1.js\" />\r\n    <Content Include=\"content\\scripts\\ui.multiselect.js\" />\r\n    <Content Include=\"content\\styles\\ellipsis-xbl.xml\" />\r\n    <Content Include=\"content\\styles\\redmond\\images\\ui-bg_flat_0_aaaaaa_40x100.png\" />\r\n    <Content Include=\"content\\styles\\redmond\\images\\ui-bg_flat_55_fbec88_40x100.png\" />\r\n    <Content Include=\"content\\styles\\redmond\\images\\ui-bg_glass_75_d0e5f5_1x400.png\" />\r\n    <Content Include=\"content\\styles\\redmond\\images\\ui-bg_glass_85_dfeffc_1x400.png\" />\r\n    <Content Include=\"content\\styles\\redmond\\images\\ui-bg_glass_95_fef1ec_1x400.png\" />\r\n    <Content Include=\"content\\styles\\redmond\\images\\ui-bg_gloss-wave_55_5c9ccc_500x100.png\" />\r\n    <Content Include=\"content\\styles\\redmond\\images\\ui-bg_inset-hard_100_f5f8f9_1x100.png\" />\r\n    <Content Include=\"content\\styles\\redmond\\images\\ui-bg_inset-hard_100_fcfdfd_1x100.png\" />\r\n    <Content Include=\"content\\styles\\redmond\\images\\ui-icons_217bc0_256x240.png\" />\r\n    <Content Include=\"content\\styles\\redmond\\images\\ui-icons_2e83ff_256x240.png\" />\r\n    <Content Include=\"content\\styles\\redmond\\images\\ui-icons_469bdd_256x240.png\" />\r\n    <Content Include=\"content\\styles\\redmond\\images\\ui-icons_6da8d5_256x240.png\" />\r\n    <Content Include=\"content\\styles\\redmond\\images\\ui-icons_cd0a0a_256x240.png\" />\r\n    <Content Include=\"content\\styles\\redmond\\images\\ui-icons_d8e7f3_256x240.png\" />\r\n    <Content Include=\"content\\styles\\redmond\\images\\ui-icons_f9bd01_256x240.png\" />\r\n    <Content Include=\"content\\styles\\redmond\\jquery-ui-1.8.9.custom.css\" />\r\n    <Content Include=\"content\\styles\\redmond\\jquery.ui.accordion.css\" />\r\n    <Content Include=\"content\\styles\\redmond\\jquery.ui.all.css\" />\r\n    <Content Include=\"content\\styles\\redmond\\jquery.ui.autocomplete.css\" />\r\n    <Content Include=\"content\\styles\\redmond\\jquery.ui.base.css\" />\r\n    <Content Include=\"content\\styles\\redmond\\jquery.ui.button.css\" />\r\n    <Content Include=\"content\\styles\\redmond\\jquery.ui.core.css\" />\r\n    <Content Include=\"content\\styles\\redmond\\jquery.ui.datepicker.css\" />\r\n    <Content Include=\"content\\styles\\redmond\\jquery.ui.dialog.css\" />\r\n    <Content Include=\"content\\styles\\redmond\\jquery.ui.progressbar.css\" />\r\n    <Content Include=\"content\\styles\\redmond\\jquery.ui.resizable.css\" />\r\n    <Content Include=\"content\\styles\\redmond\\jquery.ui.selectable.css\" />\r\n    <Content Include=\"content\\styles\\redmond\\jquery.ui.slider.css\" />\r\n    <Content Include=\"content\\styles\\redmond\\jquery.ui.tabs.css\" />\r\n    <Content Include=\"content\\styles\\redmond\\jquery.ui.theme.css\" />\r\n    <Content Include=\"content\\styles\\ui.multiselect.css\" />\r\n    <Content Include=\"Files\\1.txt\" />\r\n    <Content Include=\"public\\1.0.1\\d.js\" />\r\n    <Content Include=\"public\\1.0.1\\e.js\" />\r\n    <Content Include=\"public\\1.0.1\\f.js\" />\r\n    <Content Include=\"public\\javascript\\a.js\" />\r\n    <Content Include=\"public\\javascript\\b.js\" />\r\n    <Content Include=\"public\\javascript\\c.js\" />\r\n    <Content Include=\"ReadMe.txt\">\r\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r\n    </Content>\r\n    <Content Include=\"Sample.js\" />\r\n    <Content Include=\"Test.txt\">\r\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r\n    </Content>\r\n    <None Include=\"test.map\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\r\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\r\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"LightningDB;System.AppContext;System.Dynamic.Runtime;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Runtime.InteropServices.WindowsRuntime;System.Runtime.Serialization.Primitives;System.Runtime.WindowsRuntime;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\r\n  </Target>\r\n  <PropertyGroup>\r\n    <PreBuildEvent>\r\n    </PreBuildEvent>\r\n  </PropertyGroup>\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Castle.Core\">\r\n          <HintPath>..\\..\\packages\\Castle.Core\\lib\\net35\\Castle.Core.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Castle.Core\">\r\n          <HintPath>..\\..\\packages\\Castle.Core\\lib\\net40-client\\Castle.Core.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Castle.Core\">\r\n          <HintPath>..\\..\\packages\\Castle.Core\\lib\\net45\\Castle.Core.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v4.0'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Castle.Core\">\r\n          <HintPath>..\\..\\packages\\Castle.Core\\lib\\sl4\\Castle.Core.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Castle.Core\">\r\n          <HintPath>..\\..\\packages\\Castle.Core\\lib\\sl5\\Castle.Core.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Fixie\">\r\n          <HintPath>..\\..\\packages\\Fixie\\lib\\net45\\Fixie.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <ItemGroup>\r\n    <Reference Include=\"FubuCore\">\r\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\r\n      <Private>True</Private>\r\n      <Paket>True</Paket>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"HtmlTags\">\r\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"LightningDB\">\r\n          <HintPath>..\\..\\packages\\LightningDB\\lib\\net45\\LightningDB.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"LightningDB\">\r\n          <HintPath>..\\..\\packages\\LightningDB\\lib\\netstandard1.3\\LightningDB.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"LightningQueues\">\r\n          <HintPath>..\\..\\packages\\LightningQueues\\lib\\net46\\LightningQueues.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"LightningQueues\">\r\n          <HintPath>..\\..\\packages\\LightningQueues\\lib\\netstandard1.3\\LightningQueues.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.CompilerServices.AsyncTargetingPack.Net4\">\r\n          <HintPath>..\\..\\packages\\Microsoft.CompilerServices.AsyncTargetingPack\\lib\\net40\\Microsoft.CompilerServices.AsyncTargetingPack.Net4.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.CompilerServices.AsyncTargetingPack.Net45\">\r\n          <HintPath>..\\..\\packages\\Microsoft.CompilerServices.AsyncTargetingPack\\lib\\net45\\Microsoft.CompilerServices.AsyncTargetingPack.Net45.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.CompilerServices.AsyncTargetingPack.Silverlight5\">\r\n          <HintPath>..\\..\\packages\\Microsoft.CompilerServices.AsyncTargetingPack\\lib\\sl50\\Microsoft.CompilerServices.AsyncTargetingPack.Silverlight5.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Owin\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Owin\\lib\\net45\\Microsoft.Owin.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Owin.Host.HttpListener\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Owin.Host.HttpListener\\lib\\net45\\Microsoft.Owin.Host.HttpListener.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Owin.Hosting\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Owin.Hosting\\lib\\net45\\Microsoft.Owin.Hosting.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Win32.Primitives\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net20\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net35\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net40\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\netstandard1.0\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0') Or ($(TargetFrameworkProfile) == 'Profile5') Or ($(TargetFrameworkProfile) == 'Profile6') Or ($(TargetFrameworkProfile) == 'Profile14') Or ($(TargetFrameworkProfile) == 'Profile19') Or ($(TargetFrameworkProfile) == 'Profile24') Or ($(TargetFrameworkProfile) == 'Profile37') Or ($(TargetFrameworkProfile) == 'Profile42') Or ($(TargetFrameworkProfile) == 'Profile47') Or ($(TargetFrameworkProfile) == 'Profile92') Or ($(TargetFrameworkProfile) == 'Profile102') Or ($(TargetFrameworkProfile) == 'Profile136') Or ($(TargetFrameworkProfile) == 'Profile147') Or ($(TargetFrameworkProfile) == 'Profile158') Or ($(TargetFrameworkProfile) == 'Profile225') Or ($(TargetFrameworkProfile) == 'Profile240') Or ($(TargetFrameworkProfile) == 'Profile255') Or ($(TargetFrameworkProfile) == 'Profile328') Or ($(TargetFrameworkProfile) == 'Profile336') Or ($(TargetFrameworkProfile) == 'Profile344')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net40+sl5+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'MonoAndroid') Or ($(TargetFrameworkIdentifier) == 'MonoTouch') Or ($(TargetFrameworkIdentifier) == 'Xamarin.iOS') Or ($(TargetFrameworkIdentifier) == 'Xamarin.Mac') Or ($(TargetFrameworkProfile) == 'Profile7') Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile32') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile78') Or ($(TargetFrameworkProfile) == 'Profile111') Or ($(TargetFrameworkProfile) == 'Profile151') Or ($(TargetFrameworkProfile) == 'Profile157') Or ($(TargetFrameworkProfile) == 'Profile259')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Nowin\">\r\n          <HintPath>..\\..\\packages\\Nowin\\lib\\net45\\Nowin.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Owin\">\r\n          <HintPath>..\\..\\packages\\Owin\\lib\\net40\\Owin.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Raven.Abstractions\">\r\n          <HintPath>..\\..\\packages\\RavenDB.Client\\lib\\net40\\Raven.Abstractions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"Raven.Client.Lightweight\">\r\n          <HintPath>..\\..\\packages\\RavenDB.Client\\lib\\net40\\Raven.Client.Lightweight.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"System.ComponentModel.Composition\">\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Raven.Abstractions\">\r\n          <HintPath>..\\..\\packages\\RavenDB.Client\\lib\\net45\\Raven.Abstractions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"Raven.Client.Lightweight\">\r\n          <HintPath>..\\..\\packages\\RavenDB.Client\\lib\\net45\\Raven.Client.Lightweight.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Raven.Client.Silverlight\">\r\n          <HintPath>..\\..\\packages\\RavenDB.Client\\lib\\sl50\\Raven.Client.Silverlight.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0' Or $(TargetFrameworkVersion) == 'v3.5' Or $(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Rhino.Mocks\">\r\n          <HintPath>..\\..\\packages\\RhinoMocks\\lib\\net\\Rhino.Mocks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"ThoughtWorks.Selenium.Core\">\r\n          <HintPath>..\\..\\packages\\Selenium.RC\\lib\\net35\\ThoughtWorks.Selenium.Core.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"ThoughtWorks.Selenium.Core\">\r\n          <HintPath>..\\..\\packages\\Selenium.RC\\lib\\net40\\ThoughtWorks.Selenium.Core.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"WebDriver.Support\">\r\n          <HintPath>..\\..\\packages\\Selenium.Support\\lib\\net35\\WebDriver.Support.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"WebDriver.Support\">\r\n          <HintPath>..\\..\\packages\\Selenium.Support\\lib\\net40\\WebDriver.Support.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"WebDriver\">\r\n          <HintPath>..\\..\\packages\\Selenium.WebDriver\\lib\\net35\\WebDriver.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"WebDriver\">\r\n          <HintPath>..\\..\\packages\\Selenium.WebDriver\\lib\\net40\\WebDriver.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Selenium.WebDriverBackedSelenium\">\r\n          <HintPath>..\\..\\packages\\Selenium.WebDriverBackedSelenium\\lib\\net35\\Selenium.WebDriverBackedSelenium.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Selenium.WebDriverBackedSelenium\">\r\n          <HintPath>..\\..\\packages\\Selenium.WebDriverBackedSelenium\\lib\\net40\\Selenium.WebDriverBackedSelenium.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Shouldly\">\r\n          <HintPath>..\\..\\packages\\Shouldly\\lib\\net35\\Shouldly.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Shouldly\">\r\n          <HintPath>..\\..\\packages\\Shouldly\\lib\\net40\\Shouldly.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Spark\">\r\n          <HintPath>..\\..\\packages\\Spark\\lib\\NET35\\Spark.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Spark\">\r\n          <HintPath>..\\..\\packages\\Spark\\lib\\NET40\\Spark.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StoryTeller\">\r\n          <HintPath>..\\..\\packages\\Storyteller\\lib\\net45\\StoryTeller.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.AppContext\">\r\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Buffers\">\r\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ComponentModel\">\r\n          <HintPath>..\\..\\packages\\System.ComponentModel\\ref\\netstandard1.0\\System.ComponentModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Console\">\r\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tools\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Dynamic.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.0\\System.Dynamic.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Dynamic.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.3\\System.Dynamic.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Calendars\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression.ZipFile\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Http\">\r\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"mscorlib\">\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Core\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\net45\\System.Reactive.Core.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Core\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\net46\\System.Reactive.Core.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Core\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netcore451\\System.Reactive.Core.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Core\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netcoreapp1.0\\System.Reactive.Core.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Core\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netstandard1.0\\System.Reactive.Core.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Core\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netstandard1.1\\System.Reactive.Core.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Core\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netstandard1.3\\System.Reactive.Core.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Core\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\wpa81\\System.Reactive.Core.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Interfaces\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Interfaces\\lib\\net45\\System.Reactive.Interfaces.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Interfaces\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Interfaces\\lib\\netstandard1.0\\System.Reactive.Interfaces.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\net45\\System.Reactive.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\net46\\System.Reactive.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\netstandard1.0\\System.Reactive.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2'))\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\netstandard1.1\\System.Reactive.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\netstandard1.3\\System.Reactive.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.PlatformServices\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\net45\\System.Reactive.PlatformServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.PlatformServices\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\net46\\System.Reactive.PlatformServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.PlatformServices\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netcore451\\System.Reactive.PlatformServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.PlatformServices\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netcoreapp1.0\\System.Reactive.PlatformServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.PlatformServices\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netstandard1.0\\System.Reactive.PlatformServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.PlatformServices\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netstandard1.3\\System.Reactive.PlatformServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.PlatformServices\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\wpa81\\System.Reactive.PlatformServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Windows.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Windows.Threading\\lib\\net45\\System.Reactive.Windows.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"WindowsBase\">\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Windows.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Windows.Threading\\lib\\netcore451\\System.Reactive.Windows.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.Windows.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.Windows.Threading\\lib\\wpa81\\System.Reactive.Windows.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.WindowsRuntime\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.WindowsRuntime\\lib\\netcore451\\System.Reactive.WindowsRuntime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reactive.WindowsRuntime\">\r\n          <HintPath>..\\..\\packages\\System.Reactive.WindowsRuntime\\lib\\wpa81\\System.Reactive.WindowsRuntime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Resources.ResourceManager\">\r\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Handles\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices.WindowsRuntime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.WindowsRuntime\\ref\\netstandard1.0\\System.Runtime.InteropServices.WindowsRuntime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Loader\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Numerics\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.0\\System.Runtime.Serialization.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.3\\System.Runtime.Serialization.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.WindowsRuntime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.WindowsRuntime\\ref\\netstandard1.2\\System.Runtime.WindowsRuntime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Cng\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Csp\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Thread\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Thread\\ref\\netstandard1.3\\System.Threading.Thread.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.ThreadPool\">\r\n          <HintPath>..\\..\\packages\\System.Threading.ThreadPool\\ref\\netstandard1.3\\System.Threading.ThreadPool.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Timer\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Import Project=\"..\\..\\packages\\JetBrains.Profiler.Kernel.Windows.Api\\build\\JetBrains.Profiler.Kernel.Windows.Api.Targets\" Condition=\"Exists('..\\..\\packages\\JetBrains.Profiler.Kernel.Windows.Api\\build\\JetBrains.Profiler.Kernel.Windows.Api.Targets')\" Label=\"Paket\" />\r\n</Project>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/FubuRegistry_using_parallel_folder_spec.cs",
    "content": "﻿using FubuMVC.Core;\nusing NUnit.Framework;\n\nnamespace FubuMVC.IntegrationTesting\n{\n    [TestFixture]\n    public class FubuRegistry_using_parallel_folder_spec\n    {\n        [Test]\n        public void use_parallel_folder()\n        {\n            using (var runtime = FubuRuntime.Basic(_ => _.UseParallelDirectory(\"AssemblyPackage\")))\n            {\n                runtime.Scenario(_ =>\n                {\n                    _.Get.Url(\"/JavaScript1.js\");\n                    _.StatusCodeShouldBeOk();\n\n                    // There's a file in the AssemblyPackage project called JavaScript1.js\n                    // with this line\n                    _.ContentShouldContain(\"var answer = 42;\");\n                });\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/FubuTestApplication.application.config",
    "content": "﻿ApplicationSettings.RootUrl=http://localhost/fubu-testing\r\nApplicationSettings.Name=FubuTestApplication"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/HelloWorld.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Http.Hosting;\nusing HtmlTags;\nusing NUnit.Framework;\n\nnamespace FubuMVC.IntegrationTesting\n{\n    // This little endpoint class handles\n    // the root url of the application\npublic class HomeEndpoint\n{\n    public string Index()\n    {\n        return \"Hello, World\";\n    }\n}\n\n    [TestFixture]\n    public class RunHelloWorld\n    {\n        [Test]\n        public void start_and_run()\n        {\n            // Bootstrap a basic FubuMVC applications\n            // with just the default policies and services\nusing (var runtime = FubuRuntime.Basic())\n{\n    // Execute the home route and verify\n    // the response\n    runtime.Scenario(_ =>\n    {\n        _.Get.Url(\"/\");\n\n        _.StatusCodeShouldBeOk();\n        _.ContentShouldBe(\"Hello, World\");\n        _.ContentTypeShouldBe(\"text/plain\");\n    });\n}\n        }\n    }\n\n    public class ExampleRegistry : FubuRegistry\n    {\n        public ExampleRegistry()\n        {\n            // Turn on some opt in features\n            Features.Localization.Enable(true);\n            Features.Diagnostics.Enable(TraceLevel.Production);\n\n            // Change the application mode if you want\n            Mode = \"development\";\n\n            // Have the application use an embedded \n            // Katana host at port 5501\n            HostWith<Katana>(5501);\n\n            // Register services with the IoC container\n            // using a superset of StructureMap's\n            // Registry DSL\n            Services.AddService<IActivator, MyActivator>();\n        \n            // For testing purposes, you may want \n            // to bootstrap the application from an external\n            // testing library, in which case, you'd want\n            // to override where FubuMVC looks for static\n            // asset files like JS or CSS files\n            UseParallelDirectory(\"MyApp\");\n            // or\n            RootPath = \"some other path\";\n        }\n    }\n\n    public static class BootstrappingExample\n    {\n        public static void Start()\n        {\n            using (var server = FubuRuntime.For<ExampleRegistry>())\n            {\n                // do stuff with the application\n                // or wait for some kind of signal\n                // that you should shut it off\n            }\n\n\n\n\n            var runtime = FubuRuntime.Basic(_ =>\n            {\n                _.Features.Diagnostics.Enable(TraceLevel.Verbose);\n\n                // I'm opting for NOWIN hosting this time\n                // and letting FubuMVC try to pick an open\n                // port starting from 5500\n                _.HostWith<NOWIN>();\n            });\n        }\n    }\n\n    public class MyActivator : IActivator\n    {\n        public void Activate(IActivationLog log, IPerfTimer timer)\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Http/Hosting/KatanaTester.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.Http.Hosting;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.IntegrationTesting.Http.Hosting\n{\n    [TestFixture]\n    public class KatanaTester\n    {\n        [Test]\n        public void failing_to_host()\n        {\n            Exception<HostingFailedException>.ShouldBeThrownBy(() => FubuRuntime.For<BadKatanaRegistry>()).Message.ShouldContain(\"65536\");\n        }\n    }\n\n    public class BadKatanaRegistry : FubuRegistry\n    {\n        public BadKatanaRegistry()\n        {\n            HostWith<Katana>(65536);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Http/compression_testing.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Core.Http;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Http\r\n{\r\n    [TestFixture]\r\n    public class compression_testing\r\n    {\r\n        [Test]\r\n        public void retrieves_the_gzip_compressed_content()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Input<CompressedInput>();\r\n\r\n                _.Request.AppendHeader(HttpRequestHeaders.AcceptEncoding, \"gzip\");\r\n\r\n                _.Header(HttpGeneralHeaders.ContentEncoding).SingleValueShouldEqual(\"gzip\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void retrieves_the_deflate_compressed_content()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Input<CompressedInput>();\r\n\r\n                _.Request.AppendHeader(HttpRequestHeaders.AcceptEncoding, \"deflate\");\r\n\r\n                _.Header(HttpGeneralHeaders.ContentEncoding).SingleValueShouldEqual(\"deflate\");\r\n            });\r\n        }\r\n    }\r\n\r\n    public class CompressedInput\r\n    {\r\n    }\r\n\r\n    public class CompressionEndpoint\r\n    {\r\n        [CompressContent]\r\n        public string get_compressed_content(CompressedInput input)\r\n        {\r\n            return \"Hello, World!\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Http/partial_invocations.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Http.Cookies;\r\nusing FubuMVC.Core.Registration.Querying;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing FubuMVC.Core.Runtime;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Http\r\n{\r\n    [TestFixture]\r\n    public class partial_invocations\r\n    {\r\n        [Test]\r\n        public void add_their_cookies_to_the_parent_request()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Input<NonPartialInput>();\r\n                _.Response.Cookies().Count().ShouldBe(1);\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void fast_invocation()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<PartialInvocationEndpoints>(x => x.get_fast_partial());\r\n                _.ContentShouldBe(\"The name was Malcolm Reynolds\");\r\n            });\r\n        }\r\n    }\r\n\r\n    public class PartialInvocationEndpoints\r\n    {\r\n        private readonly IPartialInvoker _partialInvoker;\r\n        private readonly IOutputWriter _outputWriter;\r\n        private readonly IFubuRequest _request;\r\n        private readonly IChainResolver _resolver;\r\n\r\n        public PartialInvocationEndpoints(IPartialInvoker partialInvoker, IOutputWriter outputWriter, IFubuRequest request,\r\n            IChainResolver resolver)\r\n        {\r\n            _partialInvoker = partialInvoker;\r\n            _outputWriter = outputWriter;\r\n            _request = request;\r\n            _resolver = resolver;\r\n        }\r\n\r\n        public Task<string> get_invokes_a_partial(NonPartialInput input)\r\n        {\r\n            return _partialInvoker.InvokeObject(new PartialInput());\r\n        }\r\n\r\n        public string get_is_a_partial(PartialInput input)\r\n        {\r\n            _outputWriter.AppendCookie(new Cookie(\"key\", \"value\"));\r\n            return \"I am some partial text!\";\r\n        }\r\n\r\n        public string get_fast_partial()\r\n        {\r\n            var input = new FastInput {Name = \"Malcolm Reynolds\"};\r\n            _request.Set(input);\r\n\r\n            var chain = _resolver.FindUniqueByType(typeof (FastInput));\r\n            var output = _partialInvoker.InvokeFast(chain, input).GetAwaiter().GetResult().As<FastOutput>();\r\n\r\n            return \"The name was \" + output.Name;\r\n        }\r\n\r\n        public FastOutput FastPartial(FastInput input)\r\n        {\r\n            return new FastOutput {Name = input.Name};\r\n        }\r\n    }\r\n\r\n    public class FastInput\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    public class FastOutput\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    public class NonPartialInput\r\n    {\r\n    }\r\n\r\n    public class PartialInput\r\n    {\r\n    }\r\n\r\n    public class FastOutputWriter : IMediaWriter<FastOutput>\r\n    {\r\n        public Task Write(string mimeType, IFubuRequestContext context, FastOutput resource)\r\n        {\r\n            throw new NotImplementedException(\"I should not be called\");\r\n        }\r\n\r\n        public IEnumerable<string> Mimetypes\r\n        {\r\n            get\r\n            {\r\n                yield return MimeType.Html.Value;\r\n                yield return MimeType.Json.Value;\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Http/reading_and_writing_http_headers_and_responses_with_OWIN.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Headers;\r\nusing FubuMVC.Core.Runtime;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Http\r\n{\r\n    [TestFixture]\r\n    public class reading_and_writing_http_headers_and_responses_with_OWIN\r\n    {\r\n        [Test]\r\n        public void read_values_from_the_response()\r\n        {\r\n            var request = new OwinRequest\r\n            {\r\n                Headers = new[] {new Header(\"x_a\", \"1\"), new Header(\"x_b\", \"2\")},\r\n                StatusCode = 201,\r\n                StatusDescription = \"Weird\"\r\n            };\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.Json(request);\r\n\r\n                _.StatusCodeShouldBe(HttpStatusCode.Created);\r\n\r\n                var response = _.Response.Body.ReadAsJson<OwinResponse>();\r\n                response.Description.ShouldBe(request.StatusDescription);\r\n                response.StatusCode.ShouldBe(request.StatusCode);\r\n\r\n                request.Headers.Each(x => { response.ResponseHeaders.ShouldContain(x); });\r\n            });\r\n        }\r\n    }\r\n\r\n    public class ResponseEndpoints\r\n    {\r\n        private readonly IOutputWriter _writer;\r\n        private readonly IHttpResponse _response;\r\n\r\n        public ResponseEndpoints(IOutputWriter writer, IHttpResponse response)\r\n        {\r\n            _writer = writer;\r\n            _response = response;\r\n        }\r\n\r\n        public OwinResponse post_fake_response(OwinRequest request)\r\n        {\r\n            _writer.WriteResponseCode((HttpStatusCode) Enum.ToObject(typeof (HttpStatusCode), request.StatusCode),\r\n                request.StatusDescription);\r\n\r\n            if (request.Headers != null)\r\n            {\r\n                request.Headers.Each(x => x.Write(_writer));\r\n            }\r\n\r\n            return new OwinResponse\r\n            {\r\n                Description = _response.StatusDescription,\r\n                StatusCode = _response.StatusCode,\r\n                ResponseHeaders = _response.AllHeaders().ToArray()\r\n            };\r\n        }\r\n    }\r\n\r\n    public class OwinRequest\r\n    {\r\n        public int StatusCode { get; set; }\r\n        public string StatusDescription { get; set; }\r\n        public Header[] Headers { get; set; }\r\n    }\r\n\r\n    public class OwinResponse\r\n    {\r\n        public Header[] ResponseHeaders { get; set; }\r\n        public int StatusCode { get; set; }\r\n        public string Description { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Json/IntegratedJsonBindingTester.cs",
    "content": "﻿using System;\nusing System.Reflection;\nusing FubuCore.Binding;\nusing FubuCore.Dates;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Http.Hosting;\nusing FubuMVC.Core.Json;\nusing Newtonsoft.Json.Linq;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.IntegrationTesting.Json\n{\n    [TestFixture]\n    public class IntegratedJsonBindingTester\n    {\n        [Test]\n        public void deserializes_the_json_and_uses_the_property_binders()\n        {\n            var recorder = new Recorder();\n\n            var now = DateTime.Today;\n            var time = MockRepository.GenerateStub<ISystemTime>();\n            time.Stub(x => x.UtcNow()).Return(now);\n\n            using (var server = new IntegrationJsonBindingRegistry(recorder, time).ToRuntime())\n            {\n                server.Scenario(_ =>\n                {\n                    _.Post.Input<IntegratedJsonBindingTarget>().ContentType(\"application/json\");\n                    _.Request.Body.JsonInputIs(\n                        \"{Name:'Josh',Child:{ChildName:'Joel'},DynamicData:{test:{name:'nested'}}}\");\n\n                    _.StatusCodeShouldBeOk();\n                });\n\n\n                Recorder.Target.Name.ShouldBe(\"Josh\");\n                Recorder.Target.Child.ChildName.ShouldBe(\"Joel\");\n                Recorder.Target.Child.CurrentTime.ShouldBe(now);\n\n                var child = Recorder.Target.DynamicData.Value<JObject>(\"test\");\n                child[\"name\"].ToString().ShouldBe(\"nested\");\n            }\n        }\n\n\n        public class Recorder\n        {\n            public static IntegratedJsonBindingTarget Target { get; private set; }\n\n            public void Record(IntegratedJsonBindingTarget target)\n            {\n                Target = target;\n            }\n        }\n\n\n        public class IntegrationJsonBindingRegistry : FubuRegistry\n        {\n            public IntegrationJsonBindingRegistry(Recorder recorder, ISystemTime time)\n            {\n                Services.For<Recorder>().Use(recorder);\n\n                Actions.IncludeType<IntegratedJsonBindingEndpoint>();\n                Models.BindPropertiesWith<CurrentTimePropertyBinder>();\n\n                Services.ReplaceService(time);\n            }\n        }\n\n        public class IntegratedJsonBindingEndpoint\n        {\n            private readonly Recorder _recorder;\n\n            public IntegratedJsonBindingEndpoint(Recorder recorder)\n            {\n                _recorder = recorder;\n            }\n\n            [JsonBinding]\n            public AjaxContinuation post_integration(IntegratedJsonBindingTarget target)\n            {\n                _recorder.Record(target);\n                return AjaxContinuation.Successful();\n            }\n        }\n\n\n        public class IntegratedJsonBindingTarget\n        {\n            public string Name { get; set; }\n            public IntegratedChild Child { get; set; }\n            public JObject DynamicData { get; set; }\n        }\n\n        public class IntegratedChild\n        {\n            public string ChildName { get; set; }\n            public DateTime CurrentTime { get; set; }\n        }\n\n        public class CurrentTimePropertyBinder : IPropertyBinder\n        {\n            public bool Matches(PropertyInfo property)\n            {\n                return property.Name == \"CurrentTime\";\n            }\n\n            public void Bind(PropertyInfo property, IBindingContext context)\n            {\n                var now = context.Service<ISystemTime>().UtcNow();\n                property.SetValue(context.Object, now, null);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/Middleware/HtmlHeadInjectionMiddlewareTester.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Http.Owin.Middleware;\r\nusing HtmlTags;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin.Middleware\r\n{\r\n    [TestFixture]\r\n    public class HtmlHeadInjectionMiddlewareTester\r\n    {\r\n\r\n        [Test]\r\n        public void can_inject_the_right_html_on_GET_for_html_text()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.AlterSettings<OwinSettings>(x =>\r\n            {\r\n                x.AddMiddleware<HtmlHeadInjectionMiddleware>().Arguments.Set(new InjectionOptions\r\n                {\r\n                    Content = e => new HtmlTag(\"script\").Attr(\"foo\", \"bar\").ToString()\r\n                });\r\n            });\r\n\r\n            using (var server = registry.ToRuntime())\r\n            {\r\n                server.Scenario(_ =>\r\n                {\r\n                    _.Get.Action<SimpleHtmlEndpoint>(x => x.get_html_content());\r\n\r\n                    _.ContentShouldContain(\"<script foo=\\\"bar\\\"></script></head>\");\r\n                });\r\n\r\n                server.Scenario(_ =>\r\n                {\r\n                    _.Get.Action<SimpleHtmlEndpoint>(x => x.get_text_content());\r\n\r\n                    _.ContentShouldNotContain(\"<script foo=\\\"bar\\\"></script></head>\");\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    public class SimpleHtmlEndpoint\r\n    {\r\n        public HtmlDocument get_html_content()\r\n        {\r\n            var document = new HtmlDocument();\r\n            document.Title = \"Some Html\";\r\n\r\n            return document;\r\n        }\r\n\r\n        public string get_text_content()\r\n        {\r\n            return \"some text\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/Owin_url_resolution_tester.cs",
    "content": "﻿using FubuMVC.Core.Urls;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    [TestFixture]\r\n    public class Owin_url_resolution_tester\r\n    {\r\n        [Test]\r\n        public void no_longer_puts_localhost_in_the_resolved_url()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<UrlEndpoints>(x => x.get_green());\r\n\r\n                _.ContentShouldBe(\"/green\");\r\n            });\r\n        }\r\n    }\r\n\r\n    public class UrlEndpoints\r\n    {\r\n        private readonly IUrlRegistry _urls;\r\n\r\n        public UrlEndpoints(IUrlRegistry urls)\r\n        {\r\n            _urls = urls;\r\n        }\r\n\r\n        public string get_green()\r\n        {\r\n            return _urls.UrlFor<UrlEndpoints>(x => x.get_green());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/binding_against_form_data.cs",
    "content": "using FubuMVC.Core.Runtime;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    [TestFixture]\r\n    public class binding_against_form_data\r\n    {\r\n        [Test]\r\n        public void can_bind_to_form_post_data()\r\n        {\r\n            var formInput = new FormInput\r\n            {\r\n                Color = \"Orange\",\r\n                Direction = \"South\"\r\n            };\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.FormData(formInput);\r\n\r\n                _.ContentShouldBe(formInput.ToString());\r\n            });\r\n        }\r\n\r\n        // The following is really a test against Scenario\r\n        [Test]\r\n        public void can_bind_to_form_post_data_defined_explicitly()\r\n        {\r\n            var formInput = new FormInput\r\n            {\r\n                Color = \"Orange\",\r\n                Direction = \"South\"\r\n            };\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.Input(formInput);\r\n                _.Request.ContentType(MimeType.HttpFormMimetype);\r\n\r\n                _.Request.Form[\"Color\"] = \"Orange\";\r\n                _.Request.Form[\"Direction\"] = \"South\";\r\n\r\n                _.ContentShouldBe(formInput.ToString());\r\n            });\r\n        }\r\n    }\r\n\r\n    public class FormBindingEndpoint\r\n    {\r\n        public string post_form_values(FormInput input)\r\n        {\r\n            return input.ToString();\r\n        }\r\n    }\r\n\r\n    public class FormInput\r\n    {\r\n        public string Color { get; set; }\r\n        public string Direction { get; set; }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Color: {0}, Direction: {1}\", Color, Direction);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/binding_against_querystring_values.cs",
    "content": "using FubuMVC.Core;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    [TestFixture]\r\n    public class binding_against_querystring_values\r\n    {\r\n        [Test]\r\n        public void can_bind_against_querystring_parameters()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                var model = new QueryStringModel\r\n                {\r\n                    Color = \"Green\",\r\n                    Direction = \"South\"\r\n                };\r\n\r\n                _.Get.Input(model);\r\n                _.ContentShouldBe(model.ToString());\r\n            });\r\n\r\n        }\r\n    }\r\n\r\n    public class QueryStringEndpoint\r\n    {\r\n        public string get_querystring_data(QueryStringModel model)\r\n        {\r\n            return model.ToString();\r\n        }\r\n    }\r\n\r\n    public class QueryStringModel\r\n    {\r\n        [QueryString]\r\n        public string Color { get; set; }\r\n\r\n        [QueryString]\r\n        public string Direction { get; set; }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Color: {0}, Direction: {1}\", Color, Direction);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/binding_against_request_cookies.cs",
    "content": "using FubuMVC.Core.Http.Cookies;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    [TestFixture]\r\n    public class binding_against_request_cookies\r\n    {\r\n        [Test]\r\n        public void can_bind_to_request_cookies()\r\n        {\r\n            var model = new CookieModel\r\n            {\r\n                Color = \"Green\",\r\n                Direction = \"South\"\r\n            };\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Input(model);\r\n\r\n                _.Request.AppendCookie(new Cookie(\"Color\", \"Green\"));\r\n                _.Request.AppendCookie(new Cookie(\"Direction\", \"South\"));\r\n\r\n                _.ContentShouldBe(model.ToString());\r\n            });\r\n        }\r\n    }\r\n\r\n    public class CookieBindingEndpoint\r\n    {\r\n        public string get_cookie_data(CookieModel input)\r\n        {\r\n            return input.ToString();\r\n        }\r\n    }\r\n\r\n    public class CookieModel\r\n    {\r\n        public string Color { get; set; }\r\n        public string Direction { get; set; }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Color: {0}, Direction: {1}\", Color, Direction);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/handling_501_responses.cs",
    "content": "using System;\r\nusing System.Net;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    [TestFixture]\r\n    public class handling_501_responses\r\n    {\r\n        [Test]\r\n        public void handle_the_exception_with_a_501_and_the_exception_message()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<ExceptionEndpoint>(x => x.get_exception());\r\n                _.StatusCodeShouldBe(HttpStatusCode.InternalServerError);\r\n                _.ContentShouldContain(\"I did not like this\");\r\n            });\r\n        }\r\n    }\r\n\r\n    public class ExceptionEndpoint\r\n    {\r\n        public string get_exception()\r\n        {\r\n            throw new ApplicationException(\"I did not like this\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/handling_a_404.cs",
    "content": "using System.Net;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    [TestFixture]\r\n    public class handling_a_404\r\n    {\r\n        [Test]\r\n        public void get_response_for_non_existent_route()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"nonexistent\");\r\n                _.StatusCodeShouldBe(HttpStatusCode.NotFound);\r\n            });\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/handling_async_routes.cs",
    "content": "﻿using System;\r\nusing System.Net;\r\nusing System.Threading.Tasks;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    public class handling_async_routes\r\n    {\r\n        [Test]\r\n        public void async_route_should_render()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<AsyncEndpoint>(x => x.get_async());\r\n                _.ContentShouldBe(\"Hello\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void async_route_with_error_should_have_501_and_exception_message()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<AsyncEndpoint>(x => x.get_async_error());\r\n\r\n                _.StatusCodeShouldBe(HttpStatusCode.InternalServerError);\r\n                _.ContentShouldContain(\"Error in async method\");\r\n            });\r\n        }\r\n    }\r\n\r\n    public class AsyncEndpoint\r\n    {\r\n        public Task<string> get_async()\r\n        {\r\n            return Task<string>.Factory.StartNew(() => \"Hello\");\r\n        }\r\n\r\n        public Task<string> get_async_error()\r\n        {\r\n            return Task<string>.Factory.StartNew(() => { throw new InvalidOperationException(\"Error in async method\"); });\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/passing_the_FubuMode_into_the_OWIN_host.cs",
    "content": "﻿using System.Net;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Http.Hosting;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Urls;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    [TestFixture]\r\n    public class passing_the_FubuMode_into_the_OWIN_host\r\n    {\r\n        [Test]\r\n        public void the_mode_is_passed_in()\r\n        {\r\n            // THIS HAS TO BE A KATANA TEST. \r\n            using (var server = FubuRuntime.Basic(_ =>\r\n            {\r\n                _.Mode = \"ReallyRandom\";\r\n                _.HostWith<Katana>();\r\n            }))\r\n            {\r\n\r\n                var url = server.BaseAddress.AppendUrl(server.Get<IUrlRegistry>().UrlFor<OwinAppModeEndpoint>(x => x.get_owin_mode()));\r\n                \r\n\r\n                var client = new WebClient();\r\n                client.DownloadString(url).ShouldBe(\"reallyrandom\");\r\n            }\r\n        }\r\n    }\r\n\r\n    public class OwinAppModeEndpoint\r\n    {\r\n        private readonly OwinContext _environment;\r\n\r\n        public OwinAppModeEndpoint(OwinContext environment)\r\n        {\r\n            _environment = environment;\r\n        }\r\n\r\n        public string get_owin_mode()\r\n        {\r\n            return (_environment.Environment[OwinConstants.AppMode] as string) ?? \"Not found at all\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/reading_and_writing_json_and_xml_thru_conneg.cs",
    "content": "using NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    [TestFixture]\r\n    public class reading_and_writing_json_and_xml_thru_conneg\r\n    {\r\n        [Test]\r\n        public void read_and_write_json()\r\n        {\r\n            var message = new Message\r\n            {\r\n                Color = \"Blue\",\r\n                Direction = \"East\"\r\n            };\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.Json(message).ContentType(\"text/json\").Accepts(\"text/json\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentTypeShouldBe(\"text/json\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void read_and_write_xml()\r\n        {\r\n            var message = new Message\r\n            {\r\n                Color = \"Blue\",\r\n                Direction = \"East\"\r\n            };\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Post.Xml(message).Accepts(\"text/xml\").ContentType(\"text/xml\");\r\n                _.ContentTypeShouldBe(\"text/xml\");\r\n\r\n\r\n                _.Response.Body.ReadAsXml<Message>().ShouldBe(message);\r\n            });\r\n        }\r\n    }\r\n\r\n    public class ConnegEndpoint\r\n    {\r\n        public Message post_message(Message message)\r\n        {\r\n            return message;\r\n        }\r\n    }\r\n\r\n    public class Message\r\n    {\r\n        public string Color { get; set; }\r\n        public string Direction { get; set; }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Color: {0}, Direction: {1}\", Color, Direction);\r\n        }\r\n\r\n        public bool Equals(Message other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other.Color, Color) && Equals(other.Direction, Direction);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof (Message)) return false;\r\n            return Equals((Message) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                return ((Color != null ? Color.GetHashCode() : 0)*397) ^\r\n                       (Direction != null ? Direction.GetHashCode() : 0);\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/reading_querystring_values.cs",
    "content": "﻿using FubuCore;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    [TestFixture]\r\n    public class reading_querystring_values\r\n    {\r\n        [Test]\r\n        public void read_querystring_values_from_current_request()\r\n        {\r\n            TestHost.BehaviorGraph.ChainFor<ReadingQuerystringEndpoint>(x => x.get_querystring_Key(null))\r\n                .As<RoutedChain>()\r\n                .GetRoutePattern().ShouldBe(\"querystring/{Key}\");\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"/querystring/Foo?Foo=Bar&A=1&B=2\");\r\n                _.ContentShouldBe(\"Bar\");\r\n            });\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"/querystring/A?Foo=Bar&A=1&B=2\");\r\n                _.ContentShouldBe(\"1\");\r\n            });\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"/querystring/B?Foo=Bar&A=1&B=2\");\r\n                _.ContentShouldBe(\"2\");\r\n            });\r\n        }\r\n    }\r\n\r\n    public class ReadingQuerystringEndpoint\r\n    {\r\n        private readonly IHttpRequest _request;\r\n\r\n        public ReadingQuerystringEndpoint(IHttpRequest request)\r\n        {\r\n            _request = request;\r\n        }\r\n\r\n        public string get_querystring_Key(QuerystringRequest request)\r\n        {\r\n            return _request.QueryString[request.Key];\r\n        }\r\n    }\r\n\r\n    public class QuerystringRequest\r\n    {\r\n        public string Key { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/reading_request_headers.cs",
    "content": "using System.Linq;\r\nusing FubuMVC.Core.Http;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    [TestFixture]\r\n    public class reading_request_headers\r\n    {\r\n        [Test]\r\n        public void read_build_in_header()\r\n        {\r\n            var message = new HeaderRequest\r\n            {\r\n                Name = HttpRequestHeaders.IfNoneMatch\r\n            };\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Input(message);\r\n                _.Request.AppendHeader(HttpRequestHeaders.IfNoneMatch, \"A\");\r\n\r\n                _.ContentShouldBe(\"A\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void read_custom_header()\r\n        {\r\n            var message = new HeaderRequest\r\n            {\r\n                Name = \"x-1\"\r\n            };\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Input(message);\r\n                _.Request.AppendHeader(\"x-1\", \"A\");\r\n\r\n                _.ContentShouldBe(\"A\");\r\n            });\r\n        }\r\n    }\r\n\r\n    public class RequestHeadersEndpoint\r\n    {\r\n        private readonly IHttpRequest _headers;\r\n\r\n        public RequestHeadersEndpoint(IHttpRequest headers)\r\n        {\r\n            _headers = headers;\r\n        }\r\n\r\n        public string get_header_Name(HeaderRequest request)\r\n        {\r\n            return _headers.GetHeader(request.Name).FirstOrDefault();\r\n        }\r\n    }\r\n\r\n    public class HeaderRequest\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/reading_route_data.cs",
    "content": "using FubuCore;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    [TestFixture]\r\n    public class reading_route_data\r\n    {\r\n        [Test]\r\n        public void bind_data_against_routing_data()\r\n        {\r\n            var input = new RouteInput\r\n            {\r\n                Name = \"Jeremy\",\r\n                Age = 38\r\n            };\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Input(input);\r\n                _.ContentShouldBe(\"Name=Jeremy, Age=38\");\r\n            });\r\n        }\r\n    }\r\n\r\n    public class ReadingRouteEndpoint\r\n    {\r\n        public string get_routing_data_Name_Age(RouteInput input)\r\n        {\r\n            return \"Name={0}, Age={1}\".ToFormat(input.Name, input.Age);\r\n        }\r\n    }\r\n\r\n    public class RouteInput\r\n    {\r\n        public string Name { get; set; }\r\n        public int Age { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/specifying_environment_key_values_for_owin.cs",
    "content": "﻿using System.Net;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Http.Hosting;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    [TestFixture]\r\n    public class specifying_environment_key_values_for_owin\r\n    {\r\n        [Test]\r\n        public void can_inject_environment_keys_from_the_fubu_registry()\r\n        {\r\n            using (var server = FubuRuntime\r\n                .For<OverriddenEnvironmentRegistry>())\r\n            {\r\n                using (var client = new WebClient())\r\n                {\r\n                    client.DownloadString(server.BaseAddress.AppendUrl(\"/environment/Foo\")).ShouldBe(\"1\");\r\n                    client.DownloadString(server.BaseAddress.AppendUrl(\"/environment/Bar\")).ShouldBe(\"2\");\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public class OverriddenEnvironmentRegistry : FubuRegistry\r\n    {\r\n        public OverriddenEnvironmentRegistry()\r\n        {\r\n            HostWith<Katana>();\r\n\r\n            AlterSettings<OwinSettings>(x =>\r\n            {\r\n                x.EnvironmentData[\"Foo\"] = \"1\";\r\n                x.EnvironmentData[\"Bar\"] = \"2\";\r\n\r\n                x.Properties.Add(\"foo.Bar\", \"3\");\r\n            });\r\n        }\r\n    }\r\n\r\n    public class OwinEnvironmentEndpoint\r\n    {\r\n        private readonly OwinContext _context;\r\n\r\n        public OwinEnvironmentEndpoint(OwinContext context)\r\n        {\r\n            _context = context;\r\n        }\r\n\r\n        public string get_environment_Key(KeyRequest request)\r\n        {\r\n            return _context.Environment.Get<string>(request.Key) ?? \"not found\";\r\n        }\r\n    }\r\n\r\n    public class KeyRequest\r\n    {\r\n        public string Key { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/using_custom_middleware.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Http.Hosting;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Http.Owin.Middleware;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    using AppFunc = Func<IDictionary<string, object>, Task>;\r\n\r\n    [TestFixture]\r\n    public class using_custom_middleware\r\n    {\r\n        private FubuRuntime serverFor(Action<OwinSettings> action)\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.AlterSettings(action);\r\n            registry.HostWith<Katana>();\r\n\r\n            return registry.ToRuntime();\r\n        }\r\n\r\n        [Test]\r\n        public void can_add_a_single_OWIN_middleware()\r\n        {\r\n            using (var server = serverFor(x => { x.AddMiddleware<JamesBondMiddleware>(); }))\r\n            {\r\n                server.Scenario(_ =>\r\n                {\r\n                    _.Get.Action<MiddleWareInterceptedEndpoint>(x => x.get_middleware_result());\r\n                    _.Header(\"James\").SingleValueShouldEqual(\"Bond\");\r\n                });\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void use_anonymous_AppFunc_as_middleware()\r\n        {\r\n            AppFunc sillyHeader =\r\n                dict =>\r\n                {\r\n                    return Task.Factory.StartNew(() => new OwinHttpResponse(dict).AppendHeader(\"silly\", \"string\"));\r\n                };\r\n\r\n            using (var server = serverFor(x => { x.AddMiddleware(sillyHeader); }))\r\n            {\r\n                server.Scenario(_ =>\r\n                {\r\n                    _.Get.Action<MiddleWareInterceptedEndpoint>(x => x.get_middleware_result());\r\n                    _.Header(\"silly\").SingleValueShouldEqual(\"string\");\r\n\r\n                    _.ContentShouldContain(\"I'm okay\");\r\n                });\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void use_anonymous_wrapping_Func_AppFunc_AppFunc_as_middleware()\r\n        {\r\n            Func<AppFunc, AppFunc> middleware = inner =>\r\n            {\r\n                return dict =>\r\n                {\r\n                    var response = new OwinHttpResponse(dict);\r\n\r\n                    response.Write(\"1-\");\r\n                    response.Flush();\r\n                    return inner(dict).ContinueWith(t =>\r\n                    {\r\n                        response.Write(\"-2\");\r\n                        response.Flush();\r\n                    });\r\n                };\r\n            };\r\n\r\n            using (var server = serverFor(x => x.AddMiddleware(middleware)))\r\n            {\r\n                server.Scenario(_ =>\r\n                {\r\n                    _.Get.Action<MiddleWareInterceptedEndpoint>(x => x.get_middleware_result());\r\n                    _.ContentShouldBe(\"1-I'm okay-2\");\r\n                });\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void disposes_any_disposable_middleware_on_shutdown()\r\n        {\r\n            MiddlewareNode<SpecialDisposableMiddleware> node = null;\r\n\r\n            using (var server = serverFor(x => { node = x.AddMiddleware<SpecialDisposableMiddleware>(); }))\r\n            {\r\n                server.Scenario(_ =>\r\n                {\r\n                    _.Get.Action<MiddleWareInterceptedEndpoint>(x => x.get_middleware_result());\r\n                    _.ContentShouldContain(\"I'm okay\");\r\n                });\r\n            }\r\n\r\n            node.Middleware.IWasDisposed.ShouldBeTrue();\r\n        }\r\n    }\r\n\r\n    public class SpecialDisposableMiddleware : IOwinMiddleware, IDisposable\r\n    {\r\n        private readonly AppFunc _inner;\r\n        public bool IWasDisposed;\r\n\r\n        public SpecialDisposableMiddleware(AppFunc inner)\r\n        {\r\n            _inner = inner;\r\n        }\r\n\r\n        public Task Invoke(IDictionary<string, object> environment)\r\n        {\r\n            return _inner(environment);\r\n        }\r\n\r\n        public void Dispose()\r\n        {\r\n            IWasDisposed = true;\r\n        }\r\n    }\r\n\r\n    public class MiddleWareInterceptedEndpoint\r\n    {\r\n        public string get_middleware_result()\r\n        {\r\n            return \"I'm okay\";\r\n        }\r\n    }\r\n\r\n\r\n    public class JamesBondMiddleware : IOwinMiddleware\r\n    {\r\n        private readonly Func<IDictionary<string, object>, Task> _inner;\r\n\r\n        public JamesBondMiddleware(Func<IDictionary<string, object>, Task> inner)\r\n        {\r\n            _inner = inner;\r\n        }\r\n\r\n        public Task Invoke(IDictionary<string, object> environment)\r\n        {\r\n            var writer = new OwinHttpResponse(environment);\r\n            writer.AppendHeader(\"James\", \"Bond\");\r\n\r\n            return _inner(environment);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/writing_a_file_to_output.cs",
    "content": "using FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    [TestFixture]\r\n    public class writing_a_file_to_output\r\n    {\r\n        [Test]\r\n        public void can_write_the_contents_of_a_file_to_the_output()\r\n        {\r\n            var fileInput = new FileInput\r\n            {\r\n                Name = \"Test.txt\"\r\n            };\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Input(fileInput);\r\n\r\n                _.ContentTypeShouldBe(\"text/plain\");\r\n                _.ContentShouldContain(\"Some text here\");\r\n            });\r\n        }\r\n    }\r\n\r\n    public class FileWriterEndpoint\r\n    {\r\n        private readonly IOutputWriter _writer;\r\n        private readonly IFubuApplicationFiles _files;\r\n\r\n        public FileWriterEndpoint(IOutputWriter writer, IFubuApplicationFiles files)\r\n        {\r\n            _writer = writer;\r\n            _files = files;\r\n        }\r\n\r\n        public void get_file_contents_Name(FileInput input)\r\n        {\r\n            var file = _files.Find(input.Name);\r\n            _writer.WriteFile(MimeType.Text, file.Path, input.Name);\r\n        }\r\n    }\r\n\r\n    public class FileInput\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/writing_a_non_default_status_code.cs",
    "content": "using System.Net;\r\nusing FubuMVC.Core.Runtime;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    [TestFixture]\r\n    public class writing_a_non_default_status_code\r\n    {\r\n        [Test]\r\n        public void can_write_a_different_status_code()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<StatusCodeEndpoint>(x => x.get_not_modified());\r\n                _.StatusCodeShouldBe(HttpStatusCode.NotModified);\r\n            });\r\n        }\r\n    }\r\n\r\n    public class StatusCodeEndpoint\r\n    {\r\n        private readonly IOutputWriter _writer;\r\n\r\n        public StatusCodeEndpoint(IOutputWriter writer)\r\n        {\r\n            _writer = writer;\r\n        }\r\n\r\n        public string get_not_modified()\r\n        {\r\n            _writer.WriteResponseCode(HttpStatusCode.NotModified, \"No changes here\");\r\n\r\n            return \"Nothing to see here\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/writing_response_headers.cs",
    "content": "using FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Cookies;\r\nusing FubuMVC.Core.Runtime;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    [TestFixture]\r\n    public class writing_response_headers\r\n    {\r\n        [Test]\r\n        public void can_write_extension_headers()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<ResponseHeadersEndpoint>(x => x.get_response_headers());\r\n\r\n                _.Header(\"x-1\").SingleValueShouldEqual(\"a\");\r\n                _.Header(\"x-2\").SingleValueShouldEqual(\"b\");\r\n            });\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void can_write_built_in_response_headers()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<ResponseHeadersEndpoint>(x => x.get_response_headers());\r\n\r\n                _.Header(HttpResponseHeaders.KeepAlive).SingleValueShouldEqual(\"True\");\r\n                _.Header(HttpResponseHeaders.Server).SingleValueShouldEqual(\"Server1\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void can_write_etag()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<ResponseHeadersEndpoint>(x => x.get_etag());\r\n\r\n                _.Header(HttpResponseHeaders.ETag).SingleValueShouldEqual(\"123456\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void can_write_content_headers()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<ResponseHeadersEndpoint>(x => x.get_content_headers());\r\n\r\n                _.Header(HttpResponseHeaders.ContentMd5).SingleValueShouldEqual(\"A\");\r\n                _.Header(HttpResponseHeaders.ContentDisposition).SingleValueShouldEqual(\"B\");\r\n                _.Header(HttpGeneralHeaders.ContentLocation).SingleValueShouldEqual(\"C\");\r\n                _.Header(HttpGeneralHeaders.Allow).SingleValueShouldEqual(\"D\");\r\n                _.Header(HttpGeneralHeaders.ContentEncoding).SingleValueShouldEqual(\"UTF-16\");\r\n                _.Header(HttpResponseHeaders.ContentLength).SingleValueShouldEqual(\"19\");\r\n                _.Header(HttpGeneralHeaders.ContentLanguage).SingleValueShouldEqual(\"jp-JP\");\r\n                _.Header(HttpGeneralHeaders.ContentRange).SingleValueShouldEqual(\"E\");\r\n                _.Header(HttpGeneralHeaders.Expires).SingleValueShouldEqual(\"5\");\r\n                _.Header(HttpGeneralHeaders.LastModified).SingleValueShouldEqual(\"12345\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void can_write_multiple_cookies()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<ResponseHeadersEndpoint>(x => x.get_multiple_cookies());\r\n\r\n                _.Response.CookieFor(\"Foo\").Value.ShouldBe(\"1\");\r\n                _.Response.CookieFor(\"Foo\").Value.ShouldBe(\"1\");\r\n            });\r\n        }\r\n    }\r\n\r\n    public class ResponseHeadersEndpoint\r\n    {\r\n        private readonly IOutputWriter _writer;\r\n\r\n        public ResponseHeadersEndpoint(IOutputWriter writer)\r\n        {\r\n            _writer = writer;\r\n        }\r\n\r\n        public string get_response_headers()\r\n        {\r\n            _writer.AppendHeader(\"x-1\", \"a\");\r\n            _writer.AppendHeader(\"x-2\", \"b\");\r\n\r\n            _writer.AppendHeader(HttpResponseHeaders.KeepAlive, true.ToString());\r\n            _writer.AppendHeader(HttpResponseHeaders.Server, \"Server1\");\r\n\r\n            return \"Nothing to see here\";\r\n        }\r\n\r\n        public string get_content_headers()\r\n        {\r\n            _writer.AppendHeader(HttpResponseHeaders.ContentMd5, \"A\");\r\n            _writer.AppendHeader(HttpResponseHeaders.ContentDisposition, \"B\");\r\n            _writer.AppendHeader(HttpGeneralHeaders.ContentLocation, \"C\");\r\n            _writer.AppendHeader(HttpGeneralHeaders.Allow, \"D\");\r\n            _writer.AppendHeader(HttpGeneralHeaders.ContentEncoding, \"UTF-16\");\r\n            _writer.AppendHeader(HttpResponseHeaders.ContentLength, \"Nothing to see here\".Length.ToString());\r\n            _writer.AppendHeader(HttpGeneralHeaders.ContentLanguage, \"jp-JP\");\r\n            _writer.AppendHeader(HttpGeneralHeaders.ContentRange, \"E\");\r\n            _writer.AppendHeader(HttpGeneralHeaders.Expires, \"5\");\r\n            _writer.AppendHeader(HttpGeneralHeaders.LastModified, \"12345\");\r\n\r\n\r\n            return \"Nothing to see here\";\r\n        }\r\n\r\n        public string get_multiple_cookies()\r\n        {\r\n            _writer.AppendCookie(new Cookie(\"Foo\", \"1\"));\r\n            _writer.AppendCookie(new Cookie(\"Bar\", \"2\"));\r\n\r\n            return \"Just look at the cookies\";\r\n        }\r\n\r\n        public string get_etag()\r\n        {\r\n            _writer.AppendHeader(HttpResponseHeaders.ETag, \"123456\");\r\n\r\n            return \"Nothing to see here\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Owin/writing_string_output.cs",
    "content": "using NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Owin\r\n{\r\n    [TestFixture]\r\n    public class writing_string_output\r\n    {\r\n        [Test]\r\n        public void can_write_strings_to_the_output()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<StringEndpoint>(x => x.get_hello());\r\n                _.ContentTypeShouldBe(\"text/plain\");\r\n                _.ContentShouldBe(\"Hello.\");\r\n            });\r\n        }\r\n    }\r\n\r\n    public class StringEndpoint\r\n    {\r\n        public string get_hello()\r\n        {\r\n            return \"Hello.\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Packaging/assembly_marked_as_FubuModule_is_added_as_a_package.cs",
    "content": "using System.Linq;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Packaging\r\n{\r\n    [TestFixture]\r\n    public class assembly_marked_as_FubuModule_is_added_as_a_package \r\n    {\r\n        [Test]\r\n        public void has_endpoints_from_AssemblyPackage()\r\n        {\r\n            TestHost.Runtime.Behaviors.Chains.Where(x => x.Calls.Any(_ => _.HandlerType.Assembly.GetName().Name == \"AssemblyPackage\"))\r\n                .Any().ShouldBeTrue();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Partials/invoke_as_html_in_endpoint.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing FubuMVC.Core.Runtime;\r\nusing HtmlTags;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Partials\r\n{\r\n    [TestFixture]\r\n    public class invoke_as_html_in_endpoint\r\n    {\r\n        [Test]\r\n        public void get_the_partial_as_html_if_requested()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Input(new InputModel2 {Name = \"Jeremy\"});\r\n\r\n                _.Request.Accepts(\"text/json\");\r\n\r\n                // Heinous\r\n                _.ContentShouldContain(\"div\");\r\n                _.ContentShouldContain(\"/div\");\r\n                _.ContentShouldContain(\"Jeremy\");\r\n            });\r\n        }\r\n    }\r\n\r\n    // \"{\"Text\":\"{\"Name\":\"Jeremy\"}\"}\r\n    //  {\"Text\":\"{\\\"Name\\\":\\\"Jeremy\\\"}\"}\r\n\r\n    public class InvokerEndpoint\r\n    {\r\n        private readonly IPartialInvoker _invoker;\r\n\r\n        public InvokerEndpoint(IPartialInvoker invoker)\r\n        {\r\n            _invoker = invoker;\r\n        }\r\n\r\n        public async Task<OutputModel> get_inner_json_Name(InputModel model)\r\n        {\r\n            return new OutputModel\r\n            {\r\n                Text = await _invoker.InvokeObject(new PartialModel {Name = model.Name}).ConfigureAwait(false)\r\n            };\r\n        }\r\n\r\n        public async Task<OutputModel> get_inner_html_Name(InputModel2 model)\r\n        {\r\n            return new OutputModel\r\n            {\r\n                Text = await _invoker.InvokeAsHtml(new PartialModel {Name = model.Name}).ConfigureAwait(false)\r\n            };\r\n        }\r\n\r\n        public PartialModel partial(PartialModel model)\r\n        {\r\n            return model;\r\n        }\r\n    }\r\n\r\n    public class OutputModel\r\n    {\r\n        public string Text { get; set; }\r\n    }\r\n\r\n    public class InputModel\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    public class InputModel2 : InputModel\r\n    {\r\n    }\r\n\r\n    public class PartialModel\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    public class PartialModelWriter : IMediaWriter<PartialModel>\r\n    {\r\n        public Task Write(string mimeType, IFubuRequestContext context, PartialModel resource)\r\n        {\r\n            var html = new DivTag().Text(resource.Name).ToString();\r\n            return context.Writer.Write(MimeType.Html.Value, html);\r\n        }\r\n\r\n        public IEnumerable<string> Mimetypes\r\n        {\r\n            get { yield return MimeType.Html.Value; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Projections/adaptive_property_type_projection_Tester.cs",
    "content": "﻿using FubuMVC.Core.Projections;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Projections\r\n{\r\n    [TestFixture]\r\n    public class adaptive_property_type_projection_Tester\r\n    {\r\n        [Test]\r\n        public void use_adaptive_projection_of_child_properties()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<MyAdaptiveEndpoint>(x => x.get_adaptive_projection_foo());\r\n                _.ContentShouldBe(\"{\\\"subject\\\":{\\\"foo\\\":\\\"Shaver\\\"},\\\"data\\\":\\\"some data\\\"}\");\r\n            });\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<MyAdaptiveEndpoint>(x => x.get_adaptive_projection_bar());\r\n                _.ContentShouldBe(\"{\\\"subject\\\":{\\\"bar\\\":\\\"Kentucky Headhunters\\\"},\\\"data\\\":\\\"some data\\\"}\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void projection_adaptively_when_value_is_null()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<MyAdaptiveEndpoint>(x => x.get_adaptive_projection_null());\r\n                _.ContentShouldBe(\"{\\\"data\\\":\\\"some data\\\"}\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void projects_using_default_serialization_if_projection_cannot_be_found()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<MyAdaptiveEndpoint>(x => x.get_adaptive_projection_baz());\r\n                _.ContentShouldBe(\"{\\\"subject\\\":{\\\"BazName\\\":\\\"Screamin Cheetah Wheelies\\\"},\\\"data\\\":\\\"some data\\\"}\");\r\n            });\r\n        }\r\n    }\r\n\r\n\r\n    public class MyBaz\r\n    {\r\n        public string BazName { get; set; }\r\n    }\r\n\r\n    public class MyAdaptiveEndpoint\r\n    {\r\n        public MyAdaptiveModel get_adaptive_projection_null()\r\n        {\r\n            return new MyAdaptiveModel\r\n            {\r\n                Data = \"some data\",\r\n                Subject = null\r\n            };\r\n        }\r\n\r\n        public MyAdaptiveModel get_adaptive_projection_foo()\r\n        {\r\n            return new MyAdaptiveModel\r\n            {\r\n                Data = \"some data\",\r\n                Subject = new MyFoo {FooName = \"Shaver\"}\r\n            };\r\n        }\r\n\r\n        public MyAdaptiveModel get_adaptive_projection_bar()\r\n        {\r\n            return new MyAdaptiveModel\r\n            {\r\n                Data = \"some data\",\r\n                Subject = new MyBar\r\n                {\r\n                    BarName = \"Kentucky Headhunters\"\r\n                }\r\n            };\r\n        }\r\n\r\n        public MyAdaptiveModel get_adaptive_projection_baz()\r\n        {\r\n            return new MyAdaptiveModel\r\n            {\r\n                Data = \"some data\",\r\n                Subject = new MyBaz\r\n                {\r\n                    BazName = \"Screamin Cheetah Wheelies\"\r\n                }\r\n            };\r\n        }\r\n    }\r\n\r\n    public class MyAdaptiveProjection : Projection<MyAdaptiveModel>\r\n    {\r\n        public MyAdaptiveProjection()\r\n        {\r\n            AdaptiveValue(x => x.Subject).Name(\"subject\");\r\n            Value(x => x.Data).Name(\"data\");\r\n        }\r\n    }\r\n\r\n    public class MyAdaptiveModel\r\n    {\r\n        public object Subject { get; set; }\r\n        public object Data { get; set; }\r\n    }\r\n\r\n    public class MyFooProjection : Projection<MyFoo>\r\n    {\r\n        public MyFooProjection()\r\n        {\r\n            Value(x => x.FooName).Name(\"foo\");\r\n        }\r\n    }\r\n\r\n    public class MyBarProjection : Projection<MyBar>\r\n    {\r\n        public MyBarProjection()\r\n        {\r\n            Value(x => x.BarName).Name(\"bar\");\r\n        }\r\n    }\r\n\r\n    public class MyFoo\r\n    {\r\n        public string FooName { get; set; }\r\n    }\r\n\r\n    public class MyBar\r\n    {\r\n        public string BarName { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Projections/end_to_end_json_serialization.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Http.Hosting;\r\nusing FubuMVC.Core.Projections;\r\nusing FubuMVC.Core.Runtime;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Projections\r\n{\r\n    [TestFixture]\r\n    public class end_to_end_json_serialization\r\n    {\r\n        private FubuRuntime _host;\r\n\r\n        [TestFixtureSetUp]\r\n        public void FixtureSetUp()\r\n        {\r\n            _host = FubuRuntime\r\n                .For<JsonSerializationFubuRegistry>();\r\n        }\r\n\r\n        [TestFixtureTearDown]\r\n        public void FixtureTearDown()\r\n        {\r\n            _host.SafeDispose();\r\n        }\r\n\r\n        [Test]\r\n        public void getting_large_json_data()\r\n        {\r\n            _host.Scenario(x =>\r\n            {\r\n                x.Get.Action<JsonSerializationEndpoint>(y => y.get_large());\r\n                x.Request.Accepts(\"application/json\");\r\n\r\n                x.ContentShouldContain(\"{\\\"guids\\\":[\");\r\n                x.ContentTypeShouldBe(MimeType.Json);\r\n                x.StatusCodeShouldBeOk();\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void getting_small_json_data()\r\n        {\r\n            _host.Scenario(x =>\r\n            {\r\n                x.Get.Action<JsonSerializationEndpoint>(y => y.get_small());\r\n                x.Request.Accepts(\"application/json\");\r\n\r\n                x.ContentShouldContain(\"{\\\"guids\\\":[\");\r\n                x.ContentTypeShouldBe(MimeType.Json);\r\n                x.StatusCodeShouldBeOk();\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void posting_large_json_data()\r\n        {\r\n            _host.Scenario(x =>\r\n            {\r\n                var guids = new List<Guid>();\r\n                for (var i = 0; i < 60000; i++)\r\n                {\r\n                    guids.Add(Guid.NewGuid());\r\n                }\r\n                var input = new LargeInput\r\n                {\r\n                    Guids = guids,\r\n                    ExpectedCount = 60000\r\n                };\r\n                x.Post.Json(input);\r\n\r\n                x.ContentShouldBe(\"{\\\"successful\\\":true}\");\r\n                x.ContentTypeShouldBe(MimeType.Json);\r\n                x.StatusCodeShouldBeOk();\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void posting_small_json_data()\r\n        {\r\n            _host.Scenario(x =>\r\n            {\r\n                var guids = new List<Guid>();\r\n                for (var i = 0; i < 10; i++)\r\n                {\r\n                    guids.Add(Guid.NewGuid());\r\n                }\r\n                var input = new SmallInput\r\n                {\r\n                    ExpectedCount = 10,\r\n                    Guids = guids\r\n                };\r\n                x.Post.Json(input);\r\n\r\n                x.ContentShouldBe(\"{\\\"successful\\\":true}\");\r\n                x.ContentTypeShouldBe(MimeType.Json);\r\n                x.StatusCodeShouldBeOk();\r\n            });\r\n        }\r\n    }\r\n\r\n    public class JsonSerializationFubuRegistry : FubuRegistry\r\n    {\r\n        public JsonSerializationFubuRegistry()\r\n        {\r\n            Actions.IncludeType<JsonSerializationEndpoint>();\r\n        }\r\n    }\r\n\r\n    public interface IJsonTestData\r\n    {\r\n        List<Guid> Guids { get; set; }\r\n    }\r\n\r\n    public class JsonTestData : IJsonTestData\r\n    {\r\n        public List<Guid> Guids { get; set; }\r\n    }\r\n\r\n    public class SmallInput : IJsonTestData\r\n    {\r\n        public List<Guid> Guids { get; set; }\r\n        public int ExpectedCount { get; set; }\r\n    }\r\n\r\n    public class LargeInput : IJsonTestData\r\n    {\r\n        public List<Guid> Guids { get; set; }\r\n        public int ExpectedCount { get; set; }\r\n    }\r\n\r\n    public class JsonSuccess\r\n    {\r\n        public bool Successful { get; set; }\r\n    }\r\n\r\n    public class JsonSerializationEndpoint\r\n    {\r\n        public JsonTestData get_small()\r\n        {\r\n            var guids = new List<Guid>();\r\n            for (var i = 0; i < 10; i++)\r\n            {\r\n                guids.Add(Guid.NewGuid());\r\n            }\r\n            return new JsonTestData\r\n            {\r\n                Guids = guids\r\n            };\r\n        }\r\n\r\n        public JsonTestData get_large()\r\n        {\r\n            var guids = new List<Guid>();\r\n            for (var i = 0; i < 60000; i++)\r\n            {\r\n                guids.Add(Guid.NewGuid());\r\n            }\r\n            return new JsonTestData\r\n            {\r\n                Guids = guids\r\n            };\r\n        }\r\n\r\n        public JsonSuccess post_small(SmallInput input)\r\n        {\r\n            return new JsonSuccess\r\n            {\r\n                Successful = input.Guids.Count.Equals(input.ExpectedCount)\r\n            };\r\n        }\r\n\r\n        public JsonSuccess post_large(LargeInput input)\r\n        {\r\n            return new JsonSuccess\r\n            {\r\n                Successful = input.Guids.Count.Equals(input.ExpectedCount)\r\n            };\r\n        }\r\n    }\r\n\r\n    public class JsonTestDataProjection : Projection<JsonTestData>\r\n    {\r\n        public JsonTestDataProjection()\r\n        {\r\n            Value(x => x.Guids).Name(\"guids\");\r\n        }\r\n    }\r\n\r\n    public class JsonSuccessProjection : Projection<JsonSuccess>\r\n    {\r\n        public JsonSuccessProjection()\r\n        {\r\n            Value(x => x.Successful).Name(\"successful\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n\r\n[assembly: AssemblyTitle(\"FubuMVC.IntegrationTesting\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"Microsoft\")]\r\n[assembly: AssemblyCopyright(\"Copyright © Microsoft 2010\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n\r\n[assembly: Guid(\"074d4b55-3fed-451c-a084-f423fb32cd93\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Build and Revision Numbers \r\n// by using the '*' as shown below:\r\n// [assembly: AssemblyVersion(\"1.0.*\")]\r\n\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/QuitEndpoint.cs",
    "content": "namespace FubuMVC.IntegrationTesting\n{\n    public class QuitEndpoint\n    {\n        public string get_quit()\n        {\n            TestHost.Finish.Set();\n\n            return \"Quitting\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Raven/CompiledIndexCache/-1354846411.NmZfttBALVdhNllEGRGpXw%3d%3d.debug.dll.cs",
    "content": "using Raven.Abstractions;\nusing Raven.Database.Linq;\nusing System.Linq;\nusing System.Collections.Generic;\nusing System.Collections;\nusing System;\nusing Raven.Database.Linq.PrivateExtensions;\nusing Lucene.Net.Documents;\nusing System.Globalization;\nusing System.Text.RegularExpressions;\nusing Raven.Database.Indexing;\n\n\npublic class Index_Auto_2fAudits_2fByTimestampSortByTimestamp : Raven.Database.Linq.AbstractViewGenerator\n{\n\tpublic Index_Auto_2fAudits_2fByTimestampSortByTimestamp()\n\t{\n\t\tthis.ViewText = @\"from doc in docs.Audits\nselect new { Timestamp = doc.Timestamp }\";\n\t\tthis.ForEntityNames.Add(\"Audits\");\n\t\tthis.AddMapDefinition(docs => \n\t\t\tfrom doc in docs\n\t\t\twhere string.Equals(doc[\"@metadata\"][\"Raven-Entity-Name\"], \"Audits\", System.StringComparison.InvariantCultureIgnoreCase)\n\t\t\tselect new {\n\t\t\t\tTimestamp = doc.Timestamp,\n\t\t\t\t__document_id = doc.__document_id\n\t\t\t});\n\t\tthis.AddField(\"Timestamp\");\n\t\tthis.AddField(\"__document_id\");\n\t\tthis.AddQueryParameterForMap(\"Timestamp\");\n\t\tthis.AddQueryParameterForMap(\"__document_id\");\n\t\tthis.AddQueryParameterForReduce(\"Timestamp\");\n\t\tthis.AddQueryParameterForReduce(\"__document_id\");\n\t}\n}\n"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Raven/CompiledIndexCache/-1354846411.NmZfttBALVdhNllEGRGpXw%3d%3d.nodebug.dll.cs",
    "content": "using Raven.Abstractions;\nusing Raven.Database.Linq;\nusing System.Linq;\nusing System.Collections.Generic;\nusing System.Collections;\nusing System;\nusing Raven.Database.Linq.PrivateExtensions;\nusing Lucene.Net.Documents;\nusing System.Globalization;\nusing System.Text.RegularExpressions;\nusing Raven.Database.Indexing;\n\n\npublic class Index_Auto_2fAudits_2fByTimestampSortByTimestamp : Raven.Database.Linq.AbstractViewGenerator\n{\n\tpublic Index_Auto_2fAudits_2fByTimestampSortByTimestamp()\n\t{\n\t\tthis.ViewText = @\"from doc in docs.Audits\nselect new { Timestamp = doc.Timestamp }\";\n\t\tthis.ForEntityNames.Add(\"Audits\");\n\t\tthis.AddMapDefinition(docs => \n\t\t\tfrom doc in docs\n\t\t\twhere string.Equals(doc[\"@metadata\"][\"Raven-Entity-Name\"], \"Audits\", System.StringComparison.InvariantCultureIgnoreCase)\n\t\t\tselect new {\n\t\t\t\tTimestamp = doc.Timestamp,\n\t\t\t\t__document_id = doc.__document_id\n\t\t\t});\n\t\tthis.AddField(\"Timestamp\");\n\t\tthis.AddField(\"__document_id\");\n\t\tthis.AddQueryParameterForMap(\"Timestamp\");\n\t\tthis.AddQueryParameterForMap(\"__document_id\");\n\t\tthis.AddQueryParameterForReduce(\"Timestamp\");\n\t\tthis.AddQueryParameterForReduce(\"__document_id\");\n\t}\n}\n"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Raven/CompiledIndexCache/28836275.ubctx5GMO15QKgNk6Y5%2bYA%3d%3d.debug.dll.cs",
    "content": "using Raven.Abstractions;\nusing Raven.Database.Linq;\nusing System.Linq;\nusing System.Collections.Generic;\nusing System.Collections;\nusing System;\nusing Raven.Database.Linq.PrivateExtensions;\nusing Lucene.Net.Documents;\nusing System.Globalization;\nusing System.Text.RegularExpressions;\nusing Raven.Database.Indexing;\n\n\npublic class Index_Auto_2fUsers_2fByPasswordAndUserName : Raven.Database.Linq.AbstractViewGenerator\n{\n\tpublic Index_Auto_2fUsers_2fByPasswordAndUserName()\n\t{\n\t\tthis.ViewText = @\"from doc in docs.Users\nselect new { UserName = doc.UserName, Password = doc.Password }\";\n\t\tthis.ForEntityNames.Add(\"Users\");\n\t\tthis.AddMapDefinition(docs => \n\t\t\tfrom doc in docs\n\t\t\twhere string.Equals(doc[\"@metadata\"][\"Raven-Entity-Name\"], \"Users\", System.StringComparison.InvariantCultureIgnoreCase)\n\t\t\tselect new {\n\t\t\t\tUserName = doc.UserName,\n\t\t\t\tPassword = doc.Password,\n\t\t\t\t__document_id = doc.__document_id\n\t\t\t});\n\t\tthis.AddField(\"UserName\");\n\t\tthis.AddField(\"Password\");\n\t\tthis.AddField(\"__document_id\");\n\t\tthis.AddQueryParameterForMap(\"UserName\");\n\t\tthis.AddQueryParameterForMap(\"Password\");\n\t\tthis.AddQueryParameterForMap(\"__document_id\");\n\t\tthis.AddQueryParameterForReduce(\"UserName\");\n\t\tthis.AddQueryParameterForReduce(\"Password\");\n\t\tthis.AddQueryParameterForReduce(\"__document_id\");\n\t}\n}\n"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Raven/CompiledIndexCache/28836275.ubctx5GMO15QKgNk6Y5%2bYA%3d%3d.nodebug.dll.cs",
    "content": "using Raven.Abstractions;\nusing Raven.Database.Linq;\nusing System.Linq;\nusing System.Collections.Generic;\nusing System.Collections;\nusing System;\nusing Raven.Database.Linq.PrivateExtensions;\nusing Lucene.Net.Documents;\nusing System.Globalization;\nusing System.Text.RegularExpressions;\nusing Raven.Database.Indexing;\n\n\npublic class Index_Auto_2fUsers_2fByPasswordAndUserName : Raven.Database.Linq.AbstractViewGenerator\n{\n\tpublic Index_Auto_2fUsers_2fByPasswordAndUserName()\n\t{\n\t\tthis.ViewText = @\"from doc in docs.Users\nselect new { UserName = doc.UserName, Password = doc.Password }\";\n\t\tthis.ForEntityNames.Add(\"Users\");\n\t\tthis.AddMapDefinition(docs => \n\t\t\tfrom doc in docs\n\t\t\twhere string.Equals(doc[\"@metadata\"][\"Raven-Entity-Name\"], \"Users\", System.StringComparison.InvariantCultureIgnoreCase)\n\t\t\tselect new {\n\t\t\t\tUserName = doc.UserName,\n\t\t\t\tPassword = doc.Password,\n\t\t\t\t__document_id = doc.__document_id\n\t\t\t});\n\t\tthis.AddField(\"UserName\");\n\t\tthis.AddField(\"Password\");\n\t\tthis.AddField(\"__document_id\");\n\t\tthis.AddQueryParameterForMap(\"UserName\");\n\t\tthis.AddQueryParameterForMap(\"Password\");\n\t\tthis.AddQueryParameterForMap(\"__document_id\");\n\t\tthis.AddQueryParameterForReduce(\"UserName\");\n\t\tthis.AddQueryParameterForReduce(\"Password\");\n\t\tthis.AddQueryParameterForReduce(\"__document_id\");\n\t}\n}\n"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/ReadMe.txt",
    "content": ""
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Routing/end_to_end_route_alias_tester.cs",
    "content": "﻿using FubuMVC.Core;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.IntegrationTesting.Routing\n{\n    [TestFixture]\n    public class end_to_end_route_alias_tester \n    {\n        [Test]\n        public void call_the_aliased_route()\n        {\n            TestHost.Scenario(_ =>\n            {\n                _.Get.Url(\"/something/completely/different\");\n                _.ContentShouldBe(\"Hey there\");\n            });\n        }\n    }\n\n    public class AliasedEndpoint\n    {\n        [UrlAlias(\"something/completely/different\")]\n        public string get_aliased_route()\n        {\n            return \"Hey there\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Runtime/Files/FileChangeWatcher_integration_tester.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Linq;\nusing System.Threading;\nusing FubuCore;\nusing FubuMVC.Core.Runtime.Files;\nusing FubuMVC.Core.Services;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.IntegrationTesting.Runtime.Files\n{\n    [TestFixture, Explicit(\"Too slow to be in the CI build\")]\n    public class FileChangeWatcher_integration_tester : IChangeSetHandler\n    {\n        private string theDirectory;\n        private ChangeSet LastChanges;\n\n        [SetUp]\n        public void SetUp()\n        {\n            LastChanges = null;\n\n            theDirectory = Guid.NewGuid().ToString().ToFullPath();\n            Directory.CreateDirectory(theDirectory);\n        }\n\n        [TearDown]\n        public void TearDown()\n        {\n            try\n            {\n                Directory.Delete(theDirectory);\n            }\n            catch (Exception)\n            {\n                // don't blow up on this\n            }\n        }\n\n        private void write(string file, string contents)\n        {\n            new FileSystem().WriteStringToFile(theDirectory.AppendPath(file), contents);\n        }\n\n        [Test]\n        public void see_adds()\n        {\n            write(\"foo.txt\", \"1\");\n            write(\"bar.txt\", \"2\");\n            write(\"baz.txt\", \"3\");\n\n            using (var watcher = new FileChangeWatcher(theDirectory, FileSet.Shallow(\"*.txt\"), this))\n            {\n                watcher.Start();\n\n                write(\"new.txt\", \"I am new\");\n\n                Wait.Until(() => LastChanges != null).ShouldBeTrue();\n\n                LastChanges.Added.Single().RelativePath.ShouldBe(\"new.txt\");\n            }\n        }\n\n        [Test]\n        public void see_changes()\n        {\n            write(\"foo.txt\", \"1\");\n            write(\"bar.txt\", \"2\");\n            write(\"baz.txt\", \"3\");\n\n            using (var watcher = new FileChangeWatcher(theDirectory, FileSet.Shallow(\"*.txt\"), this))\n            {\n                watcher.Start();\n\n                write(\"foo.txt\", \"different\");\n                write(\"baz.txt\", \"different\");\n\n                Wait.Until(() => LastChanges != null).ShouldBeTrue();\n\n                LastChanges.Changed.OrderBy(x => x.RelativePath).Select(x => x.RelativePath)\n                    .ShouldHaveTheSameElementsAs(\"baz.txt\", \"foo.txt\");\n            }\n        }\n\n        [Test]\n        public void no_changes()\n        {\n            write(\"foo.txt\", \"1\");\n            write(\"bar.txt\", \"2\");\n            write(\"baz.txt\", \"3\");\n\n            using (var watcher = new FileChangeWatcher(theDirectory, FileSet.Shallow(\"*.txt\"), this))\n            {\n                watcher.Start();\n\n                Thread.Sleep(2000);\n\n                LastChanges.ShouldBeNull();\n            }\n        }\n\n        [Test]\n        public void see_deletes()\n        {\n            write(\"foo.txt\", \"1\");\n            write(\"bar.txt\", \"2\");\n            write(\"baz.txt\", \"3\");\n\n            using (var watcher = new FileChangeWatcher(theDirectory, FileSet.Shallow(\"*.txt\"), this))\n            {\n                watcher.Start();\n\n                File.Delete(theDirectory.AppendPath(\"foo.txt\"));\n                File.Delete(theDirectory.AppendPath(\"baz.txt\"));\n\n                Wait.Until(() => LastChanges != null).ShouldBeTrue();\n\n                LastChanges.Deleted.OrderBy(x => x)\n                    .ShouldHaveTheSameElementsAs(\"baz.txt\", \"foo.txt\");\n            }\n        }\n\n        void IChangeSetHandler.Handle(ChangeSet changes)\n        {\n            LastChanges = changes;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Sample.js",
    "content": "﻿// This is some sample data in a static file"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Samples/ConnegSamples.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Ajax;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Json;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Conditionals;\r\nusing FubuMVC.Core.ServiceBus;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Samples\r\n{\r\n    // SAMPLE: endpoint-with-input-and-resource\r\n    public class ConnegEndpoint\r\n    {\r\n        public ResourceModel get_resource(InputMessage message)\r\n        {\r\n            return new ResourceModel();\r\n        }\r\n    }\r\n\r\n    // ENDSAMPLE\r\n\r\n    public class ResourceModel\r\n    {\r\n    }\r\n\r\n    // SAMPLE: custom-reader\r\n    public class InputMessage\r\n    {\r\n    }\r\n\r\n\r\n    public class SpecialContentMediaReader : IReader<InputMessage>\r\n    {\r\n        public IEnumerable<string> Mimetypes\r\n        {\r\n            get { yield return \"special/format\"; }\r\n        }\r\n\r\n        public Task<InputMessage> Read(string mimeType, IFubuRequestContext context)\r\n        {\r\n            // read the body of the http request from IHttpRequest\r\n            // read header information and route information from\r\n            // IHttpRequest\r\n\r\n            return new InputMessage().ToCompletionTask();\r\n        }\r\n    }\r\n\r\n    // ENDSAMPLE\r\n\r\n    // SAMPLE: custom-writer\r\n    public class SomeResource\r\n    {\r\n        public string Color { get; set; }\r\n    }\r\n\r\n    public class SpecialContentMediaWriter : IMediaWriter<SomeResource>\r\n    {\r\n        private readonly IOutputWriter _writer;\r\n\r\n        // As usual, all IMediaWriter<> objects\r\n        // are resolved from you IoC continer and\r\n        // you can have dependencies injected into\r\n        // your constructor\r\n        public SpecialContentMediaWriter(IOutputWriter writer)\r\n        {\r\n            _writer = writer;\r\n        }\r\n\r\n\r\n        // This signature is necessary because we are assuming\r\n        // that some Writer's will be able to produce representations\r\n        // for multiple mimetype's\r\n        public Task Write(string mimeType, IFubuRequestContext context, SomeResource resource)\r\n        {\r\n            if (mimeType == \"special/format\")\r\n            {\r\n                return writeSpecial(resource);\r\n            }\r\n            else\r\n            {\r\n                return writeJson(resource);\r\n            }\r\n        }\r\n\r\n        private Task writeJson(SomeResource resource)\r\n        {\r\n            // use the IOutputWriter to output the resource\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private Task writeSpecial(SomeResource resource)\r\n        {\r\n            _writer.Write(\"special/format\", resource.ToString());\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        public IEnumerable<string> Mimetypes\r\n        {\r\n            get\r\n            {\r\n                // You can use custom mimetypes\r\n                // if you want to be one of the\r\n                // ReSTful cool kids\r\n                yield return \"special/format\";\r\n\r\n                yield return \"text/json\";\r\n            }\r\n        }\r\n    }\r\n\r\n    // ENDSAMPLE\r\n\r\n\r\n\r\n    // SAMPLE: writer-attribute-for-one-off\r\n    // A formal version of this attribute will be in v1.3\r\n    public class WriterAttribute : ModifyChainAttribute\r\n    {\r\n        private readonly Type[] _types;\r\n\r\n        public WriterAttribute(params Type[] types)\r\n        {\r\n            _types = types;\r\n        }\r\n\r\n        public override void Alter(ActionCallBase call)\r\n        {\r\n            var outputNode = call.ParentChain().Output;\r\n            _types.Each(t => outputNode.Add(t));\r\n        }\r\n    }\r\n\r\n    // ENDSAMPLE\r\n\r\n    // SAMPLE: reader-attribute-for-one-off\r\n    // A formal version of this attribute will be in v1.3\r\n    public class ReaderAttribute : ModifyChainAttribute\r\n    {\r\n        private readonly Type[] _types;\r\n\r\n        public ReaderAttribute(params Type[] types)\r\n        {\r\n            _types = types;\r\n        }\r\n\r\n        public override void Alter(ActionCallBase call)\r\n        {\r\n            var inputNode = call.ParentChain().Input;\r\n\r\n            _types.Each(inputNode.Add);\r\n        }\r\n    }\r\n\r\n    // ENDSAMPLE\r\n\r\n\r\n    public static class ConnegManipulation\r\n    {\r\n        // SAMPLE: conneg-manipulation\r\n        public static void MessWithConneg(BehaviorChain chain)\r\n        {\r\n            // Remove all readers\r\n            chain.Input.ClearAll();\r\n\r\n            // Accept 'application/x-www-form-urlencoded' with model binding\r\n            chain.Input.Add(typeof (ModelBindingReader<>));\r\n\r\n            // Add basic Json reading\r\n            chain.Input.Add(new NewtonsoftJsonFormatter());\r\n\r\n            // Query whether or not the chain uses the basic Json reading\r\n            var readsJson = chain.Input.CanRead(MimeType.Json);\r\n\r\n            // Add a completely custom Reader\r\n            chain.Input\r\n                .Add(new SpecialContentMediaReader());\r\n\r\n            // Are there any Readers?\r\n            chain.HasReaders();\r\n\r\n            // Is there any output?\r\n            chain.HasOutput();\r\n\r\n            // Remove all writers\r\n            chain.Output.ClearAll();\r\n        }\r\n\r\n\r\n        // ENDSAMPLE\r\n\r\n        // SAMPLE: add-conditions-to-writer\r\n        // This method is just an example of how you can add \r\n        // runtime conditions to an existing WriterNode\r\n        // hanging off of BehaviorChain.Output.Writers\r\n\r\n\r\n        // TODO -- need to redo this\r\n\r\n        // IConditional services are resolved from the IoC\r\n        // container, so you can declare dependencies\r\n        // in the constructor function\r\n        public class MyRuntimeCondition : IConditional\r\n        {\r\n            public bool ShouldExecute(IFubuRequestContext context)\r\n            {\r\n                // apply your own runtime logic\r\n                return false;\r\n            }\r\n        }\r\n\r\n        // ENDSAMPLE\r\n    }\r\n\r\n\r\n    public class JsonInput\r\n    {\r\n    }\r\n\r\n    public class ConnegSampleEndpoints\r\n    {\r\n        // Because JsonInput implements the FubuMVC.Core.JsonMessage \r\n        // marker interface, this endpoint will be configured as\r\n        // \"Asymmetric Json\"\r\n        public AjaxContinuation post_json_input(JsonInput input)\r\n        {\r\n            return AjaxContinuation.Successful();\r\n        }\r\n    }\r\n\r\n\r\n    // SAMPLE: spoofing-current-mimetype\r\n\r\n    // The actual custom behavior\r\n    public class CorrectMimetypeForAjaxBehavior : WrappingBehavior\r\n    {\r\n        private readonly IHttpRequest _httpRequest;\r\n        private readonly IFubuRequest _fubuRequest;\r\n\r\n        public CorrectMimetypeForAjaxBehavior(IHttpRequest httpRequest, IFubuRequest fubuRequest)\r\n        {\r\n            _httpRequest = httpRequest;\r\n            _fubuRequest = fubuRequest;\r\n        }\r\n\r\n        protected override Task invoke(Func<Task> func)\r\n        {\r\n            // Just let the normal model binding do its thing here,\r\n            // but \"correct\" anything that is missing\r\n            var mimetype = _fubuRequest.Get<CurrentMimeType>();\r\n\r\n            if (!mimetype.AcceptTypes.Any() && _httpRequest.IsAjaxRequest())\r\n            {\r\n                mimetype.AcceptTypes = new MimeTypeList(\"application/json\");\r\n            }\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n    }\r\n\r\n    // ENDSAMPLE\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Samples/FubuContinuationSamples.cs",
    "content": "﻿using System;\r\nusing System.Net;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Continuations;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Samples\r\n{\r\n    public class DirectorEndpoint\r\n    {\r\n        // SAMPLE: continuation-usage\r\n        public FubuContinuation get_directions()\r\n        {\r\n            var customer = determineCustomer();\r\n            return customer.IsSpecial()\r\n                ? FubuContinuation.RedirectTo(new SpecialCustomer {Id = customer.Id})\r\n                : FubuContinuation.RedirectTo(new NormalCustomer {Id = customer.Id});\r\n        }\r\n\r\n        // ENDSAMPLE\r\n\r\n        private Customer determineCustomer()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class NormalCustomer\r\n    {\r\n        public Guid Id { get; set; }\r\n    }\r\n\r\n    public class SpecialCustomer\r\n    {\r\n        public Guid Id { get; set; }\r\n    }\r\n\r\n    public class Customer\r\n    {\r\n        public bool IsSpecial()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Guid Id { get; set; }\r\n    }\r\n\r\n\r\n    [TestFixture]\r\n    public class NumberEndpointTester\r\n    {\r\n        [Test]\r\n        public void try_out_continuations()\r\n        {\r\n            // SAMPLE: fubucontinuation-in-action\r\n\r\n            // Proceed as normal through the chain\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Input(new Number {Value = 1});\r\n                _.ContentShouldBe(\"The number is 1\");\r\n            });\r\n\r\n            // 5 is special, \"jump the tracks\" and execute\r\n            // a different chain inline\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Input(new Number {Value = 5});\r\n                _.ContentShouldBe(\"Five is a special number!\");\r\n            });\r\n\r\n            // You are not authorized to specify a number greater\r\n            // than 10\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Input(new Number {Value = 11});\r\n                _.StatusCodeShouldBe(HttpStatusCode.Unauthorized);\r\n            });\r\n\r\n            // Negative numbers are invalid, so we'll redirect\r\n            // the user to another page instead\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Input(new Number {Value = -1});\r\n                _.StatusCodeShouldBe(HttpStatusCode.Redirect);\r\n                _.Header(HttpResponseHeaders.Location).SingleValueShouldEqual(\"/invalid\");\r\n            });\r\n\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Input(new Number {Value = 2});\r\n                _.ContentShouldBe(\"The doubled number is 4\");\r\n            });\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Input(new Number {Value = 4});\r\n                _.StatusCodeShouldBe(HttpStatusCode.Redirect);\r\n                _.Header(HttpResponseHeaders.Location).SingleValueShouldEqual(\"/doubled/8\");\r\n            });\r\n            // ENDSAMPLE\r\n        }\r\n    }\r\n\r\n\r\n    // SAMPLE: NumberFilter\r\n    public class NumberFilter\r\n    {\r\n        public FubuContinuation Filter(Number number)\r\n        {\r\n            // Issue an HTTP 302 to /invalid\r\n            if (number.Value < 0)\r\n                return FubuContinuation.RedirectTo<NumberEndpoint>(x => x.get_invalid());\r\n\r\n            // Render the DoubleNumber{Value=4} resource instead\r\n            if (number.Value == 2)\r\n                return FubuContinuation.TransferTo(new DoubleNumber {Value = 4});\r\n\r\n            // Issue an HTTP 302 to /doubled/8\r\n            if (number.Value == 4)\r\n                return FubuContinuation.RedirectTo(new DoubleNumber {Value = 8});\r\n\r\n            // Execute a different chain instead\r\n            if (number.Value == 5)\r\n                return FubuContinuation.TransferTo<NumberEndpoint>(x => x.get_special());\r\n\r\n            // HTTP 403 and don't proceed any farther\r\n            if (number.Value > 10)\r\n                return FubuContinuation.EndWithStatusCode(HttpStatusCode.Unauthorized);\r\n\r\n            return FubuContinuation.NextBehavior();\r\n        }\r\n    }\r\n\r\n    // ENDSAMPLE\r\n\r\n    // SAMPLE: filter-testing\r\n    [TestFixture]\r\n    public class NumberFilterTester\r\n    {\r\n        [Test]\r\n        public void just_go_on_if_not_a_special_number()\r\n        {\r\n            new NumberFilter()\r\n                .Filter(new Number {Value = 1})\r\n                .AssertWasContinuedToNextBehavior();\r\n        }\r\n\r\n        [Test]\r\n        public void stop_if_greater_than_10()\r\n        {\r\n            new NumberFilter()\r\n                .Filter(new Number {Value = 11})\r\n                .AssertWasEndedWithStatusCode(HttpStatusCode.Unauthorized);\r\n        }\r\n\r\n        [Test]\r\n        public void redirect_if_a_negative_number()\r\n        {\r\n            new NumberFilter()\r\n                .Filter(new Number {Value = -1})\r\n                .AssertWasRedirectedTo<NumberEndpoint>(x => x.get_invalid());\r\n        }\r\n\r\n        [Test]\r\n        public void transfer_to_special_if_5()\r\n        {\r\n            new NumberFilter()\r\n                .Filter(new Number {Value = 5})\r\n                .AssertWasTransferedTo<NumberEndpoint>(x => x.get_special());\r\n        }\r\n\r\n        [Test]\r\n        public void transfer_if_2()\r\n        {\r\n            new NumberFilter()\r\n                .Filter(new Number {Value = 2})\r\n                .AssertWasTransferedTo(new DoubleNumber {Value = 4});\r\n        }\r\n\r\n        [Test]\r\n        public void redirect_if_4()\r\n        {\r\n            new NumberFilter()\r\n                .Filter(new Number {Value = 4})\r\n                .AssertWasRedirectedTo(new DoubleNumber {Value = 8});\r\n        }\r\n    }\r\n\r\n    // ENDSAMPLE\r\n\r\n    // SAMPLE: NumberEndpoint\r\n    public class NumberEndpoint\r\n    {\r\n        [Filter(typeof (NumberFilter))]\r\n        public string get_number_Value(Number number)\r\n        {\r\n            return \"The number is \" + number.Value;\r\n        }\r\n\r\n        public string get_doubled_Value(DoubleNumber number)\r\n        {\r\n            return \"The doubled number is \" + number.Value;\r\n        }\r\n\r\n        public string get_special()\r\n        {\r\n            return \"Five is a special number!\";\r\n        }\r\n\r\n        public string get_invalid()\r\n        {\r\n            return \"The number is invalid!\";\r\n        }\r\n    }\r\n\r\n    public class Number\r\n    {\r\n        public int Value { get; set; }\r\n    }\r\n\r\n    public class DoubleNumber\r\n    {\r\n        public int Value { get; set; }\r\n\r\n        // Note that I had to implement an Equals()\r\n        // method on DoubleNumber for the testing to work\r\n        protected bool Equals(DoubleNumber other)\r\n        {\r\n            return Value == other.Value;\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != this.GetType()) return false;\r\n            return Equals((DoubleNumber) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return Value;\r\n        }\r\n    }\r\n\r\n    // ENDSAMPLE\r\n\r\n\r\n    // SAMPLE: redirectable\r\n    public class RedirectingNumber : Number\r\n    {\r\n    }\r\n\r\n    public class RedirectableEndpoint\r\n    {\r\n        public RedirectableNumber get_redirectable(RedirectingNumber number)\r\n        {\r\n            return new RedirectableNumber\r\n            {\r\n                Number = number.Value,\r\n                RedirectTo = number.Value < 0\r\n                    ? FubuContinuation.TransferTo<NumberEndpoint>(x => x.get_invalid())\r\n                    : null\r\n            };\r\n        }\r\n    }\r\n\r\n    public class RedirectableNumber : IRedirectable\r\n    {\r\n        public int Number { get; set; }\r\n        public FubuContinuation RedirectTo { get; set; }\r\n    }\r\n\r\n    // ENDSAMPLE\r\n\r\n    // SAMPLE: offline-filter\r\n    public class OfflineFilter\r\n    {\r\n        private readonly IOfflineDetector _detector;\r\n\r\n        // You can use constructor injection from your\r\n        // IoC container for dependencies\r\n        public OfflineFilter(IOfflineDetector detector)\r\n        {\r\n            _detector = detector;\r\n        }\r\n\r\n        // ActionFilter methods can accept an input message\r\n        public FubuContinuation Filter()\r\n        {\r\n            return _detector.IsOffline()\r\n                ? FubuContinuation.RedirectTo<OfflineEndpoint>(x => x.get_offline())\r\n                : FubuContinuation.NextBehavior();\r\n        }\r\n    }\r\n\r\n    public interface IOfflineDetector\r\n    {\r\n        bool IsOffline();\r\n    }\r\n\r\n    public class OfflineEndpoint\r\n    {\r\n        public string get_offline()\r\n        {\r\n            return \"We're offline for maintenance for some reason\";\r\n        }\r\n    }\r\n\r\n    // ENDSAMPLE\r\n\r\n\r\n\r\n    // SAMPLE: continuation-up-the-stack\r\n    public class TransactionalBehavior : WrappingBehavior\r\n    {\r\n        protected override Task invoke(Func<Task> func)\r\n        {\r\n            using (var tx = start())\r\n            {\r\n                // Call the inner behavior, which itself may\r\n                // be executing a FubuContinuation.TransferTo()\r\n                func();\r\n                tx.Commit();\r\n            }\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private Transaction start()\r\n        {\r\n            return new Transaction();\r\n        }\r\n    }\r\n\r\n    // ENDSAMPLE\r\n\r\n    public class Transaction : IDisposable\r\n    {\r\n        public void Dispose()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void Commit()\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Samples/IFubuRequestUsage.cs",
    "content": "﻿using System.Threading.Tasks;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.ServiceBus;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Samples\r\n{\r\n    // SAMPLE: passing-state-with-ifuburequest\r\n    public class PrivateMessage\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    public class MyFirstBehavior : BasicBehavior\r\n    {\r\n        private readonly IFubuRequest _request;\r\n\r\n        // As usual with FubuMVC, IFubuRequest is generally\r\n        // going to be resolved from the IoC container\r\n        // through constructor injection\r\n        public MyFirstBehavior(IFubuRequest request) : base(PartialBehavior.Executes)\r\n        {\r\n            _request = request;\r\n        }\r\n\r\n        protected override Task<DoNext> performInvoke()\r\n        {\r\n            // create the PrivateMessage object\r\n            var message = createPrivateMessage();\r\n\r\n            // store the PrivateMessage in \r\n            // IFubuRequest where other Behavior's\r\n            // could find it later\r\n            _request.Set(message);\r\n\r\n            return DoNext.Continue.ToCompletionTask();\r\n        }\r\n\r\n        private static PrivateMessage createPrivateMessage()\r\n        {\r\n            return new PrivateMessage {Name = \"Han Solo\"};\r\n        }\r\n    }\r\n\r\n    public class MySecondBehavior : BasicBehavior\r\n    {\r\n        private readonly IFubuRequest _request;\r\n        private readonly IOutputWriter _writer;\r\n\r\n        public MySecondBehavior(IFubuRequest request, IOutputWriter writer)\r\n            : base(PartialBehavior.Executes)\r\n        {\r\n            _request = request;\r\n            _writer = writer;\r\n        }\r\n\r\n        protected override Task<DoNext> performInvoke()\r\n        {\r\n            // Extract the PrivateMessage to render.\r\n            var message = _request.Get<PrivateMessage>();\r\n            _writer.Write(MimeType.Text, message.Name);\r\n\r\n            return DoNext.Continue.ToCompletionTask();\r\n        }\r\n    }\r\n\r\n    // ENDSAMPLE\r\n\r\n    public static class FubuRequestSamples\r\n    {\r\n        public static void UsingInMemoryFubuRequest()\r\n        {\r\n            // SAMPLE: using-in-memory-fubu-request\r\n            var request = new InMemoryFubuRequest();\r\n            request.Set(new PrivateMessage {Name = \"Darth Vader\"});\r\n            // ENDSAMPLE\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/ScheduledJobs/ScheduledJobIntegrationTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Configuration;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\nusing FubuMVC.Tests.ServiceBus;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.IntegrationTesting.ScheduledJobs\n{\n    [TestFixture]\n    public class ScheduledJobIntegrationTester\n    {\n        private FubuRuntime theRuntime;\n\n        [TestFixtureSetUp]\n        public void SetUp()\n        {\n            AJob.Reset();\n            BJob.Reset();\n            CJob.Reset();\n\n            theRuntime = FubuRuntime.For<ScheduledJobRegistry>()\n                \n                ;\n        }\n\n        [TestFixtureTearDown]\n        public void Teardown()\n        {\n            theRuntime.Dispose();\n        }\n\n        [Test]\n        public void the_scheduled_job_chains_are_present()\n        {\n            var graph = theRuntime.Get<BehaviorGraph>();\n            var chains = graph.Chains.Where(x => x.InputType() != null && x.InputType().Closes(typeof (ExecuteScheduledJob<>)));\n\n            chains.ShouldHaveCount(3);\n        }\n\n        [Test]\n        public void the_chains_for_rescheduling_a_job_are_present()\n        {\n            var graph = theRuntime.Get<BehaviorGraph>();\n            var chains = graph.Chains.Where(x => x.InputType() != null && x.InputType().Closes(typeof(RescheduleRequest<>)));\n\n            chains.ShouldHaveCount(3);\n        }\n\n        [Test]\n        public void registration_of_scheduled_jobs_can_capture_channel_names()\n        {\n            var graph = theRuntime.Get<ScheduledJobGraph>();\n            graph.DefaultChannel.Name.ShouldBe(\"Downstream\");\n            graph.FindJob(typeof (AJob)).Channel.Name.ShouldBe(\"Upstream\");\n        }\n\n        [Test]\n        public void explicitly_register_a_routing_rule_for_a_scheduled_job()\n        {\n            var graph = theRuntime.Get<ChannelGraph>();\n            graph.ChannelFor<BusSettings>(x => x.Upstream).ShouldExecuteJob<AJob>();\n        }\n\n        [Test]\n        public void jobs_are_registered_in_the_container()\n        {\n            theRuntime.Get<IScheduledJob<AJob>>().ShouldNotBeNull();\n            theRuntime.Get<IScheduledJob<BJob>>().ShouldNotBeNull();\n            theRuntime.Get<IScheduledJob<CJob>>().ShouldNotBeNull();\n        }\n\n        [Test]\n        public void use_the_default_channel_for_scheduled_jobs_if_none_is_explicitly_set()\n        {\n            var graph = theRuntime.Get<ChannelGraph>();\n            graph.ChannelFor<BusSettings>(x => x.Downstream)\n                .ShouldExecuteJob<BJob>()\n                .ShouldExecuteJob<CJob>();\n        }\n\n        [Test]\n        public void can_override_the_default_timeout()\n        {\n            var graph = theRuntime.Get<ScheduledJobGraph>();\n            graph.FindJob(typeof (BJob))\n                .Timeout.ShouldBe(11.Minutes());\n        }\n\n    }\n\n    public static class ChannelGraphExtensions\n    {\n        public static ChannelNode ShouldExecuteJob<T>(this ChannelNode node) where T : IJob\n        {\n            node.Rules.OfType<ScheduledJobRoutingRule<T>>().ShouldHaveCount(1);\n            return node;\n        }\n    }\n\n    public class ScheduledJobRegistry : FubuTransportRegistry<BusSettings>\n    {\n        public ScheduledJobRegistry()\n        {\n            AlterSettings<BusSettings>(x =>\n            {\n                x.Downstream = new Uri(\"lq.tcp://localhost:2233/scheduled_jobs_downstream\");\n                x.Upstream = new Uri(\"lq.tcp://localhost:2233/scheduled_jobs_upstream\");\n            });\n\n            Channel(x => x.Downstream).ReadIncoming();\n\n            ScheduledJob.DefaultJobChannel(x => x.Downstream);\n            ScheduledJob.RunJob<AJob>().ScheduledBy<DummyScheduleRule>().Channel(x => x.Upstream);\n            ScheduledJob.RunJob<BJob>().ScheduledBy<DummyScheduleRule>().Timeout(11.Minutes());\n            ScheduledJob.RunJob<CJob>().ScheduledBy<DummyScheduleRule>();\n        }\n    }\n\n    public class AJob : IJob\n    {\n        public static int Executed = 0;\n\n        public void Execute(CancellationToken cancellation) { ++Executed; }\n        public static void Reset() { Executed = 0; }\n    }\n\n    public class BJob : IJob\n    {\n        public static int Executed = 0;\n\n        public void Execute(CancellationToken cancellation) { ++Executed; }\n        public static void Reset() { Executed = 0; }\n    }\n\n    public class CJob : IJob\n    {\n        public static int Executed = 0;\n\n        public void Execute(CancellationToken cancellation) { ++Executed; }\n        public static void Reset() { Executed = 0; }\n    }\n\n    public class DummyScheduleRule : IScheduleRule\n    {\n        private readonly DateTimeOffset _nextTime;\n\n        public DummyScheduleRule()\n        {\n            _nextTime = DateTimeOffset.UtcNow.AddDays(1);\n        }\n\n        public DummyScheduleRule(DateTimeOffset nextTime)\n        {\n            _nextTime = nextTime;\n        }\n\n        public DateTimeOffset ScheduleNextTime(DateTimeOffset currentTime, JobExecutionRecord lastExecution)\n        {\n            return _nextTime;\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Security/Authentication/AuthenticationHarness.cs",
    "content": "using System;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Http.Scenarios;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Membership;\nusing FubuMVC.Core.Urls;\nusing NUnit.Framework;\nusing StructureMap;\n\nnamespace FubuMVC.IntegrationTesting.Security.Authentication\n{\n    public class AuthenticationHarness\n    {\n        private IContainer theContainer;\n        private FubuRuntime server;\n\n        protected virtual void configure(FubuRegistry registry)\n        {\n            registry.Actions.IncludeType<SampleController>();\n\n\n            registry.AlterSettings<AuthenticationSettings>(\n                _ => _.Strategies.AddToEnd(MembershipNode.For<InMemoryMembershipRepository>()));\n        }\n\n        public BehaviorGraph BehaviorGraph\n        {\n            get { return Container.GetInstance<BehaviorGraph>(); }\n        }\n\n        [SetUp]\n        public void AuthenticationSetup()\n        {\n            var registry = new FubuRegistry();\n            configure(registry);\n\n            registry.Features.Authentication.Enable(true);\n\n            server = registry.ToRuntime();\n            theContainer = server.Get<IContainer>();\n\n            beforeEach();\n        }\n\n        public void Scenario(Action<Scenario> scenario)\n        {\n            server.Scenario(scenario);\n        }\n\n        [TearDown]\n        public void TearDown()\n        {\n            server.Dispose();\n        }\n\n        protected virtual void beforeEach()\n        {\n        }\n\n\n        public IContainer Container\n        {\n            get { return theContainer; }\n        }\n\n        public IUrlRegistry Urls\n        {\n            get { return theContainer.GetInstance<IUrlRegistry>(); }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Security/Authentication/SampleController.cs",
    "content": "using FubuMVC.Core.Security.Authorization;\n\nnamespace FubuMVC.IntegrationTesting.Security.Authentication\n{\n    public class TargetModel { }\n\n    [NotAuthenticated]\n    public class PublicModel\n    {\n        public string Message { get; set; }\n    }\n\n    public class SampleController\n    {\n        public TargetModel get_some_authenticated_route(TargetModel target)\n        {\n            return target;\n        }\n\n        public string get_say_Message(PublicModel request)\n        {\n            return request.Message;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Security/Authentication/authenticated_request_against_an_authenticated_route.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Caching;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Security.Authentication.Cookies;\nusing FubuMVC.Core.Security.Authentication.Tickets;\nusing Shouldly;\nusing NUnit.Framework;\nusing Cookie = FubuMVC.Core.Http.Cookies.Cookie;\n\nnamespace FubuMVC.IntegrationTesting.Security.Authentication\n{\n    [TestFixture]\n    public class authenticated_request_against_an_authenticated_route : AuthenticationHarness\n    {\n\n\n        [Test]\n        public void login_with_default_credentials_and_retrieve_a_resource()\n        {\n            // create the auth ticket\n            var now = DateTime.Now;\n            var ticket = new AuthenticationTicket\n            {\n                Expiration = now.AddDays(1),\n                LastAccessed = now,\n                UserName = \"fubu\"\n            };\n\n            var writer = new CookieWriter();\n            Container\n                .With(typeof (IOutputWriter), writer)\n                .GetInstance<CookieTicketSource>()\n                .Persist(ticket);\n\n            var cookie = writer.Cookie;\n\n            Scenario(_ =>\n            {\n                _.Get.Input<TargetModel>();\n                _.Request.Accepts(\"text/json\").ContentType(MimeType.HttpFormMimetype);\n\n                _.Request.AppendCookie(cookie);\n\n                _.StatusCodeShouldBeOk();\n            });\n/*\n            var response = endpoints.GetByInput(new TargetModel(), acceptType: \"text/json\", configure: r => {\n                var cookies = new CookieContainer();\n                cookies.Add(new System.Net.Cookie\n                {\n                    Domain = \"localhost\",\n                    Path = cookie.Path,\n                    Expires = now.AddDays(1),\n                    Name = cookie.States.Single().Name,\n                    Value = cookie.Value\n                });\n\n                r.CookieContainer = cookies;\n                r.AllowAutoRedirect = false;\n            });\n\n            response.StatusCode.ShouldBe(HttpStatusCode.OK);\n            */\n             }\n\n        #region Nested Type: CookieWriter\n\n        public class CookieWriter : IOutputWriter\n        {\n            public Cookie Cookie { get; set; }\n\n            public void Dispose()\n            {\n                throw new NotImplementedException();\n            }\n\n            public void WriteFile(string contentType, string localFilePath, string displayName)\n            {\n                throw new NotImplementedException();\n            }\n\n            public Task Write(string contentType, string renderedOutput)\n            {\n                throw new NotImplementedException();\n            }\n\n            public Task Write(string renderedOutput)\n            {\n                throw new NotImplementedException();\n            }\n\n            public void RedirectToUrl(string url)\n            {\n                throw new NotImplementedException();\n            }\n\n            public void AppendCookie(Cookie cookie)\n            {\n                Cookie = cookie;\n            }\n\n            public void AppendHeader(string key, string value)\n            {\n                throw new NotImplementedException();\n            }\n\n            public Task Write(string contentType, Func<Stream, Task> output)\n            {\n                throw new NotImplementedException();\n            }\n\n            public void WriteResponseCode(HttpStatusCode status, string description = null)\n            {\n                throw new NotImplementedException();\n            }\n\n            public Task<IRecordedOutput> Record(Func<Task> inner)\n            {\n                throw new NotImplementedException();\n            }\n\n            public void Replay(IRecordedOutput output)\n            {\n                throw new NotImplementedException();\n            }\n\n            public void Flush()\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        #endregion\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Security/Authentication/unauthenticated_ajax_request_against_an_authenticated_route.cs",
    "content": "using System.Net;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Security.Authentication;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.IntegrationTesting.Security.Authentication\n{\n    [TestFixture]\n    public class unauthenticated_ajax_request_against_an_authenticated_route : AuthenticationHarness\n    {\n        [Test]\n        public void execute()\n        {\n            Scenario(_ =>\n            {\n                _.Get.Input<TargetModel>();\n                _.Request.ContentType(MimeType.HttpFormMimetype).Accepts(\"application/json\");\n\n                _.Request.AppendHeader(AjaxExtensions.XRequestedWithHeader, AjaxExtensions.XmlHttpRequestValue);\n\n\n                _.StatusCodeShouldBe(HttpStatusCode.Unauthorized);\n\n                var continuation = _.Response.Body.ReadAsJson<AjaxContinuation>();\n\n                continuation.Success.ShouldBeFalse();\n                var loginUrl = Urls.UrlFor(new LoginRequest\n                {\n                    Url = null\n                }, \"GET\");\n\n                loginUrl.ShouldEndWith(continuation.NavigatePage);\n            }\n                );\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Security/Authentication/unauthenticated_request_against_an_authenticated_route.cs",
    "content": "﻿using System.Net;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Security.Authentication;\nusing NUnit.Framework;\n\nnamespace FubuMVC.IntegrationTesting.Security.Authentication\n{\n    [TestFixture]\n    public class unauthenticated_request_against_an_authenticated_route : AuthenticationHarness\n    {\n        [Test]\n        public void redirects_to_login()\n        {\n            var loginUrl = Urls.UrlFor(new LoginRequest {Url = \"some/authenticated/route\"}, \"GET\");\n\n            Scenario(_ =>\n            {\n                _.Get.Input(new TargetModel());\n                _.Request.Accepts(\"text/html\");\n\n                _.StatusCodeShouldBe(HttpStatusCode.Redirect);\n                _.Header(HttpResponseHeaders.Location).SingleValueShouldEqual(loginUrl);\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Security/Authentication/unauthenticated_request_against_an_unauthenticated_route.cs",
    "content": "using NUnit.Framework;\n\nnamespace FubuMVC.IntegrationTesting.Security.Authentication\n{\n    [TestFixture]\n    public class unauthenticated_request_against_an_unauthenticated_route : AuthenticationHarness\n    {\n        [Test]\n        public void nothing_happens()\n        {\n            var model = new PublicModel {Message = \"Test\"};\n\n            Scenario(_ =>\n            {\n                _.Get.Input(model);\n                _.StatusCodeShouldBeOk();\n                _.ContentShouldBe(model.Message);\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Security/Authorization/AuthorizationPreviewServiceIntegratedTester.cs",
    "content": "using System;\nusing System.Security.Principal;\nusing System.Threading;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Security.Authorization;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.IntegrationTesting.Security.Authorization\n{\n    [TestFixture]\n    public class AuthorizationPreviewServiceIntegratedTester\n    {\n        private FubuRuntime _runtime;\n\n        [TearDown]\n        public void TearDown()\n        {\n            if (_runtime != null)\n            {\n                _runtime.Dispose();\n            }\n        }\n\n        private AuthorizationPreviewService withAuthorizationRules(Action<BehaviorGraph> configure)\n        {\n            var registry = new FubuRegistry();\n\n\n            registry.Actions.IncludeType<OneController>();\n            registry.Actions.IncludeType<TwoController>();\n\n            registry.Configure(configure);\n\n\n            _runtime = registry.ToRuntime();\n\n\n            return _runtime.Get<AuthorizationPreviewService>();\n        }\n\n\n        private void userHasRoles(params string[] roles)\n        {\n            var principal = new GenericPrincipal(new GenericIdentity(\"somebody\"), roles);\n            Thread.CurrentPrincipal = principal;\n        }\n\n        [Test]\n        public void positive_case_by_model_only()\n        {\n            userHasRoles(\"a\");\n            withAuthorizationRules(\n                graph => { graph.ChainFor<OneController>(x => x.M1(null)).Authorization.AddRole(\"a\"); })\n                .IsAuthorized(new Model1())\n                .ShouldBeTrue();\n        }\n\n\n        [Test]\n        public void positive_case_by_model_only_when_there_are_no_authorization_rules_on_a_chain()\n        {\n            userHasRoles(\"a\");\n            withAuthorizationRules(graph => { }).IsAuthorized(new Model1()).ShouldBeTrue();\n        }\n\n        [Test]\n        public void negative_case_by_model_only()\n        {\n            userHasRoles(\"a\");\n            var service =\n                withAuthorizationRules(\n                    graph => { graph.ChainFor<OneController>(x => x.M1(null)).Authorization.AddRole(\"not a\"); });\n\n            service.IsAuthorized(new Model1()).ShouldBeFalse();\n        }\n\n        [Test]\n        public void positive_by_model_only_with_multiple_roles()\n        {\n            userHasRoles(\"b\", \"c\");\n            withAuthorizationRules(graph =>\n            {\n                graph.ChainFor<OneController>(x => x.M1(null)).Authorization.AddRole(\"a\");\n                graph.ChainFor<OneController>(x => x.M1(null)).Authorization.AddRole(\"b\");\n            }).IsAuthorized(new Model1()).ShouldBeTrue();\n        }\n\n        [Test]\n        public void positive_by_model_and_category()\n        {\n            userHasRoles(\"a\");\n\n            var service =\n                withAuthorizationRules(\n                    graph => { graph.ChainFor<OneController>(x => x.M4(null)).Authorization.AddRole(\"a\"); });\n\n            service.IsAuthorized(new UrlModel(), \"different\").ShouldBeTrue();\n        }\n\n\n        [Test]\n        public void negative_by_model_and_category()\n        {\n            userHasRoles(\"a\");\n\n            var service =\n                withAuthorizationRules(\n                    graph => { graph.ChainFor<OneController>(x => x.M4(null)).Authorization.AddRole(\"not a\"); });\n\n            service.IsAuthorized(new UrlModel(), \"different\").ShouldBeFalse();\n        }\n\n        [Test]\n        public void positive_by_controller_method_expression()\n        {\n            userHasRoles(\"a\");\n\n            var service =\n                withAuthorizationRules(\n                    graph => { graph.ChainFor<OneController>(x => x.M2()).Authorization.AddRole(\"a\"); });\n\n            service.IsAuthorized<OneController>(x => x.M2()).ShouldBeTrue();\n        }\n\n\n        [Test]\n        public void negative_by_controller_method_expression()\n        {\n            userHasRoles(\"a\");\n\n            var service =\n                withAuthorizationRules(\n                    graph => { graph.ChainFor<OneController>(x => x.M2()).Authorization.AddRole(\"not a\"); });\n\n            service.IsAuthorized<OneController>(x => x.M2()).ShouldBeFalse();\n        }\n\n        [Test]\n        public void positive_for_new_entity()\n        {\n            userHasRoles(\"a\");\n\n            var service =\n                withAuthorizationRules(\n                    graph => { graph.ChainFor<TwoController>(x => x.M2()).Authorization.AddRole(\"a\"); });\n\n            service.IsAuthorizedForNew(typeof (UrlModel)).ShouldBeTrue();\n        }\n\n\n        [Test]\n        public void negative_for_new_entity()\n        {\n            userHasRoles(\"a\");\n\n            var service =\n                withAuthorizationRules(\n                    graph => { graph.ChainFor<TwoController>(x => x.M2()).Authorization.AddRole(\"not a\"); });\n\n            service.IsAuthorizedForNew(typeof (UrlModel)).ShouldBeFalse();\n        }\n\n    }\n\n\n    public class OneController\n    {\n        [UrlPattern(\"find/{Name}\")]\n        public void MethodWithPattern(ModelWithInputs inputs)\n        {\n        }\n\n        public void A(Model6 input)\n        {\n        }\n\n        public void B(Model7 input)\n        {\n        }\n\n        public void M1(Model1 input)\n        {\n        }\n\n        public Model1 M2()\n        {\n            return null;\n        }\n\n        //public void M3() { }\n\n        public void M5(Model3 input)\n        {\n        }\n\n        [UrlRegistryCategory(\"different\")]\n        public void M4(UrlModel model)\n        {\n        }\n    }\n\n    public class TwoController\n    {\n        //public void M1() { }\n\n        [UrlForNew(typeof (UrlModel))]\n        public Model4 M2()\n        {\n            throw new NotImplementedException();\n        }\n\n        //public void M3() { }\n        public void M4(UrlModel model)\n        {\n        }\n    }\n\n    public class ModelWithInputs\n    {\n        public string Name { get; set; }\n    }\n\n    public class Model1\n    {\n    }\n\n    public class Model2\n    {\n    }\n\n    public class Model3\n    {\n    }\n\n    public class Model4\n    {\n    }\n\n    public class Model5\n    {\n    }\n\n    public class Model6\n    {\n    }\n\n    public class Model7\n    {\n    }\n\n    public class ModelWithNoChain\n    {\n    }\n\n    public class ModelWithoutNewUrl\n    {\n    }\n\n\n    public class UrlModel\n    {\n        public string Name { get; set; }\n        public int Age { get; set; }\n    }\n\n    public class SubclassUrlModel : UrlModel\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Serenity/App/AppErrorEndpoint.cs",
    "content": "﻿using FubuMVC.Core.Assets;\nusing FubuMVC.Core.View;\nusing HtmlTags;\n\nnamespace FubuMVC.IntegrationTesting.Serenity.App\n{\n    public class AppErrorEndpoint\n    {\n        private readonly FubuHtmlDocument _document;\n\n        public AppErrorEndpoint(FubuHtmlDocument document)\n        {\n            _document = document;\n        }\n\n        public HtmlDocument get_javascript_error()\n        {\n            _document.Title = \"Javascript Error\";\n            _document.Body.Append(_document.Script(\"errors.js\"));\n\n            return _document;\n        } \n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Serenity/App/errors.js",
    "content": "﻿console.error(\"you stink!\");"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Serenity/BrowserType_selection_tester.cs",
    "content": "﻿using FubuCore;\nusing NUnit.Framework;\nusing Serenity;\nusing Shouldly;\nusing StoryTeller;\nusing StoryTeller.Engine;\n\nnamespace FubuMVC.IntegrationTesting.Serenity\n{\n    [TestFixture]\n    public class BrowserType_selection_tester\n    {\n\n        [Test]\n        public void select_with_no_profile_or_default_should_be_chrome()\n        {\n            Project.CurrentProject = new Project{Profile = null};\n            BrowserFactory.DetermineBrowserType(null)\n                .ShouldBe(BrowserType.Chrome);\n\n        }\n\n        [Test]\n        public void select_with_no_profile_and_a_default()\n        {\n            Project.CurrentProject = new Project { Profile = null };\n            BrowserFactory.DetermineBrowserType(BrowserType.Firefox)\n                .ShouldBe(BrowserType.Firefox);\n        }\n\n        [Test]\n        public void profile_wins()\n        {\n            Project.CurrentProject = new Project { Profile = \"phantom\" };\n\n            BrowserFactory.DetermineBrowserType(null)\n                .ShouldBe(BrowserType.Phantom);\n\n            BrowserFactory.DetermineBrowserType(BrowserType.Firefox)\n                .ShouldBe(BrowserType.Phantom);\n\n        }\n\n        [Test]\n        public void build_for_a_system_all_defaults()\n        {\n            Project.CurrentProject = new Project { Profile = null };\n            using (var system = new SerenitySystem())\n            {\n                system.As<ISystem>().Warmup().Wait();\n\n                system.Runtime.Get<IBrowserLifecycle>()\n                    .ShouldBeOfType<ChromeBrowser>();\n            }\n        }\n\n        [Test]\n        public void build_for_a_system_with_default()\n        {\n            Project.CurrentProject = new Project { Profile = null };\n            using (var system = new SerenitySystem{DefaultBrowser = BrowserType.Firefox})\n            {\n                system.As<ISystem>().Warmup().Wait();\n\n                system.Runtime.Get<IBrowserLifecycle>()\n                    .ShouldBeOfType<FirefoxBrowser>();\n            }\n        }\n\n        [Test]\n        public void build_with_system_for_profile()\n        {\n            Project.CurrentProject = new Project { Profile = \"phantom/katana\" };\n            using (var system = new SerenitySystem { DefaultBrowser = BrowserType.Firefox })\n            {\n                system.As<ISystem>().Warmup().Wait();\n\n                system.Runtime.Get<IBrowserLifecycle>()\n                    .ShouldBeOfType<PhantomBrowser>();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Serenity/Fixtures/JavascriptErrorFixture.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.IntegrationTesting.Serenity.App;\nusing Serenity.Fixtures;\nusing StoryTeller;\n\nnamespace FubuMVC.IntegrationTesting.Serenity.Fixtures\n{\n    public class JavascriptErrorFixture : ScreenFixture\n    {\n        public JavascriptErrorFixture()\n        {\n            Title = \"In a page with a javascript error\";\n        }\n\n        protected override void beforeRunning()\n        {\n            DisableAllSecurity();\n            Navigation.NavigateTo<AppErrorEndpoint>(x => x.get_javascript_error());\n        }\n\n        [FormatAs(\"The page should have a javascript error with the text {text}\")]\n        public bool HasError(string text)\n        {\n            var errorsInBrowser = JavascriptErrorsInBrowser();\n\n            StoryTellerAssert.Fail(!errorsInBrowser.Any(), \"There were no javascript errors detected in the browser\");\n\n            StoryTellerAssert.Fail(!errorsInBrowser.Any(x => x.Contains(text)), () =>\n            {\n                return \"The actual javascript errors were:\\n\" + errorsInBrowser.Join(\"\\n\");\n            });\n\n            return true;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Serenity/Fixtures/OpenScreenFixture.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing Serenity.Fixtures;\nusing StoryTeller;\nusing StoryTeller.Grammars.Tables;\n\nnamespace FubuMVC.IntegrationTesting.Serenity.Fixtures\n{\n    public class OpenScreenFixture : ScreenFixture\n    {\n        [ExposeAsTable(\"Open Screens without Error\")]\n        [FormatAs(\"Can open browser without error to {Url}\")]\n        public bool OpenScreens(string Url)\n        {\n            Navigation.NavigateToUrl(Url);\n\n            var errors = JavascriptErrorsInBrowser();\n            StoryTellerAssert.Fail(errors.Any(x => x.IsNotEmpty()), () =>\n            {\n                var text = \"JS errors detected: \" + errors.Join(\"; \");\n\n                return text;\n            });\n\n            return true;\n        }         \n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Serenity/SerenitySystemTester.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Security.Authorization;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\nusing Serenity;\nusing Shouldly;\nusing StoryTeller;\nusing StoryTeller.Engine;\nusing StructureMap;\n\nnamespace FubuMVC.IntegrationTesting.Serenity\n{\n    [TestFixture]\n    public class SerenitySystemTester\n    {\n        [Test]\n        public void warmup_will_create_a_fuburuntime()\n        {\n            using (var system = new SerenitySystem())\n            {\n                system.As<ISystem>().Warmup().Wait();\n\n                system.Runtime.ShouldNotBeNull();\n            }\n        }\n\n        [Test]\n        public void the_build_runtime_will_be_in_testing_mode()\n        {\n            using (var system = new SerenitySystem())\n            {\n                system.As<ISystem>().Warmup().Wait();\n\n                system.Runtime.Mode.InTesting().ShouldBeTrue();\n            }\n        }\n\n        [Test]\n        public void create_a_context_from_warmup_without_failure()\n        {\n            using (var system = new SerenitySystem())\n            {\n                system.As<ISystem>().Warmup();\n\n                system.As<ISystem>().CreateContext().ShouldBeOfType<SerenitySystem.SerenityContext>();\n            }\n        }\n\n        [Test]\n        public void create_a_context_without_warmup_without_failure()\n        {\n            using (var system = new SerenitySystem())\n            {\n                system.As<ISystem>().CreateContext().ShouldBeOfType<SerenitySystem.SerenityContext>();\n            }\n        }\n\n        [Test]\n        public void beforeAll_is_called_as_part_of_warmup()\n        {\n            using (var system = new FakeSerenitySystem())\n            {\n                system.BeforeAllWasCalled.ShouldBe(0);\n                system.As<ISystem>().Warmup().Wait();\n                system.BeforeAllWasCalled.ShouldBe(1);\n            }\n        }\n\n        [Test]\n        public void before_all_is_called_before_the_first_context_creation_without_warmup()\n        {\n            using (var system = new FakeSerenitySystem())\n            {\n                system.BeforeAllWasCalled.ShouldBe(0);\n                system.As<ISystem>().CreateContext();\n                system.BeforeAllWasCalled.ShouldBe(1);\n            }\n        }\n\n        [Test]\n        public void before_all_is_only_called_before_the_first_context_creation()\n        {\n            using (var system = new FakeSerenitySystem())\n            {\n                system.BeforeAllWasCalled.ShouldBe(0);\n                system.As<ISystem>().CreateContext();\n                system.BeforeAllWasCalled.ShouldBe(1);\n\n                system.As<ISystem>().CreateContext();\n                system.BeforeAllWasCalled.ShouldBe(1);\n\n                system.As<ISystem>().CreateContext();\n                system.BeforeAllWasCalled.ShouldBe(1);\n\n                system.As<ISystem>().CreateContext();\n                system.BeforeAllWasCalled.ShouldBe(1);\n            }\n        }\n\n        [Test]\n        public void before_each_is_called_as_part_of_creating_a_context()\n        {\n            using (var system = new FakeSerenitySystem())\n            {\n                system.As<ISystem>().CreateContext();\n                system.BeforeEachWasCalled.ShouldBe(1);\n\n                system.As<ISystem>().CreateContext();\n                system.BeforeEachWasCalled.ShouldBe(2);\n                system.As<ISystem>().CreateContext();\n                system.BeforeEachWasCalled.ShouldBe(3);\n\n            }\n        }\n\n        [Test]\n        public void each_call_to_before_each_gets_a_new_child_container()\n        {\n            using (var system = new FakeSerenitySystem())\n            {\n                system.As<ISystem>().CreateContext();\n                var scope1 = system.LastScope;\n\n                system.As<ISystem>().CreateContext();\n                var scope2 = system.LastScope;\n                \n                system.As<ISystem>().CreateContext();\n                var scope3 = system.LastScope;\n\n                scope1.ShouldNotBeTheSameAs(scope2);\n                scope1.ShouldNotBeTheSameAs(scope3);\n                scope2.ShouldNotBeTheSameAs(scope3);\n            \n                scope1.Role.ShouldBe(ContainerRole.ProfileOrChild);\n                scope2.Role.ShouldBe(ContainerRole.ProfileOrChild);\n                scope3.Role.ShouldBe(ContainerRole.ProfileOrChild);\n            }\n        }\n\n        [Test]\n        public void after_each_is_called_as_context_is_finished()\n        {\n            using (var system = new FakeSerenitySystem())\n            {\n                system.AfterEachWasCalled.ShouldBe(0);\n\n                var context1 = system.As<ISystem>().CreateContext();\n                var scope1 = system.LastScope;\n\n                var specContext = SpecContext.ForTesting();\n\n                context1.AfterExecution(specContext);\n\n                // uses the same scope for the spec\n                system.LastScope.ShouldBeTheSameAs(scope1);\n                system.LastContext.ShouldBeSameAs(specContext);\n                system.AfterEachWasCalled.ShouldBe(1);\n            }\n        }\n\n        [Test]\n        public void after_all_is_called_as_the_system_is_disposed_if_the_runtime_has_been_created()\n        {\n            var system = new FakeSerenitySystem();\n            system.As<ISystem>().CreateContext();\n            system.AfterAllWasCalled.ShouldBe(0);\n\n            system.SafeDispose();\n\n            system.AfterAllWasCalled.ShouldBe(1);\n        }\n\n        [Test]\n        public void can_retrieve_services_from_the_serenity_context()\n        {\n            // just some paranoia here\n            using (var system = new FakeSerenitySystem())\n            {\n                system.As<ISystem>().CreateContext().GetService<FubuRuntime>()\n                    .ShouldBeTheSameAs(system.Runtime);\n            }\n        }\n\n        [Test]\n        public void security_settings_are_reset_on_each_test_run()\n        {\n            using (var system = new SerenitySystem())\n            {\n                system.As<ISystem>().CreateContext();\n                system.Runtime.Get<SecuritySettings>().AuthenticationEnabled = false;\n\n                // okay, now create a new context and the settings should go back to everything\n                // being enabled\n                system.As<ISystem>().CreateContext();\n                system.Runtime.Get<SecuritySettings>().AuthenticationEnabled.ShouldBeTrue();\n\n            }\n        }\n\n        [Test]\n        public void can_create_a_navigation_driver_from_running_serenity_system_with_default_after_navigation()\n        {\n            using (var system = new FakeSerenitySystem())\n            {\n                system.As<ISystem>().Warmup().Wait();\n\n                system.Runtime.Get<NavigationDriver>()\n                    .AfterNavigation.ShouldBeOfType<NulloAfterNavigation>();\n\n            }\n        }\n\n        [Test]\n        public void can_create_a_navigation_driver_from_running_serenity_system_with_provided_after_navigation()\n        {\n            using (var system = new FakeSerenitySystem())\n            {\n                system.AfterNavigation<FakeAfterNavigation>();\n                system.As<ISystem>().Warmup().Wait();\n\n                system.Runtime.Get<NavigationDriver>()\n                    .AfterNavigation.ShouldBeOfType<FakeAfterNavigation>();\n\n            }\n        }\n    }\n\n    public class FakeAfterNavigation : IAfterNavigation\n    {\n        public void AfterNavigation(IWebDriver driver, string desiredUrl)\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n\n    internal class FakeSerenitySystem : SerenitySystem\n    {\n        public int BeforeAllWasCalled;\n        public int AfterAllWasCalled;\n        public int BeforeEachWasCalled;\n        public int AfterEachWasCalled;\n\n        public IContainer LastScope;\n        public ISpecContext LastContext;\n\n        protected override void beforeAll()\n        {\n            BeforeAllWasCalled++;\n        }\n\n        protected override void afterEach(IContainer scope, ISpecContext context)\n        {\n            AfterEachWasCalled++;\n            LastScope = scope;\n            LastContext = context;\n        }\n\n        protected override void beforeEach(IContainer scope)\n        {\n            BeforeEachWasCalled++;\n            LastScope = scope;\n        }\n\n        protected override void afterAll()\n        {\n            AfterAllWasCalled++;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Serenity/WaitTester.cs",
    "content": "﻿using System;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\nusing Serenity;\nusing Shouldly;\n\nnamespace FubuMVC.IntegrationTesting.Serenity\n{\n    [TestFixture]\n    public class WaitTester\n    {\n        [Test]\n        public void immediately_true()\n        {\n            Wait.Until(() => true).\n                ShouldBeTrue();\n        }\n\n        [Test]\n        public void always_going_to_be_false()\n        {\n            Wait.Until(() => false, timeoutInMilliseconds:20, millisecondPolling:5)\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void eventually_true()\n        {\n            int i = 0;\n\n            Wait.Until(() => {\n                i++;\n                return i > 4;\n            }, millisecondPolling:5)\n            .ShouldBeTrue();\n        }\n\n        [Test]\n        public void not_true_within_timeout()\n        {\n            int i = 0;\n\n            Wait.Until(() => {\n                i++;\n                return i > 4;\n            }, timeoutInMilliseconds: 50, millisecondPolling:20)\n            .ShouldBeFalse();\n\n            i.ShouldBeGreaterThan(1);\n        }\n\n        [Test]\n        public void immediately_true_many_conditions()\n        {\n            Wait.Until(new Func<bool>[]\n            {\n                () => true,\n                () => true,\n                () => true,\n                () => true\n            }).ShouldBeTrue();\n        }\n\n        [Test]\n        public void false_prevents_follow_on_conditions()\n        {\n            Wait.Until(new Func<bool>[]\n            {\n                () => true,\n                () => false,\n                () => { throw new Exception(\"Should never reach this exception\"); }\n            }, timeoutInMilliseconds: 1000).ShouldBeFalse();\n        }\n\n        [Test]\n        public void eventually_true_many_conditions()\n        {\n            var i = 0;\n\n            Wait.Until(new Func<bool>[]\n            {\n                () => { i++; return i > 2; },\n                () => { i++; return i > 4; },\n                () => { i++; return i > 6; },\n                () => { i++; return i > 8; },\n            }, millisecondPolling:5).ShouldBeTrue();\n        }\n\n        [Test]\n        public void not_true_within_timeout_many_conditions()\n        {\n            var i = 0;\n\n            Wait.Until(new Func<bool>[]\n            {\n                () => { i++; return i > 4; },\n                () => { i++; return i > 8; },\n                () => { i++; return i > 12; },\n                () => { i++; return i > 16; },\n            }, millisecondPolling:5, timeoutInMilliseconds:50).ShouldBeFalse();\n\n            i.ShouldBeGreaterThan(4);\n        }\n\n        [Test]\n        public void immediately_true_generic()\n        {\n            var obj = new object();\n            Wait.For(() => obj).ShouldBeTheSameAs(obj);\n        }\n\n        [Test]\n        public void throws_timeout_exception_generic()\n        {\n            var result = new object();\n            Exception<WebDriverTimeoutException>.ShouldBeThrownBy(() =>\n            {\n                result = Wait.For<object>(() => null, timeout: TimeSpan.FromMilliseconds(100));\n            });\n\n            result.ShouldNotBeNull();\n        }\n\n        [Test]\n        public void eventually_true_generic()\n        {\n            var i = 0;\n            var obj = new object();\n\n            Wait.For(() => {\n                i++;\n                return i > 4 ? obj : null;\n            }, pollingInterval:TimeSpan.FromMilliseconds(5)).ShouldBeTheSameAs(obj);\n\n            i.ShouldBeGreaterThan(4);\n        }\n\n        [Test]\n        public void not_true_within_timeout_generic()\n        {\n            var i = 0;\n            var result = new object();\n\n            Exception<WebDriverTimeoutException>.ShouldBeThrownBy(() =>\n            {\n                result = Wait.For(() =>\n                {\n                    i++;\n                    return i > 4 ? new object() : null;\n                }, timeout: TimeSpan.FromSeconds(1));\n            });\n\n            i.ShouldBeGreaterThan(1);\n            result.ShouldNotBeNull();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/ServiceBus/ChainInvokerIntegrationTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Core.Services.Messaging.Tracking;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.IntegrationTesting.ServiceBus\n{\n    [TestFixture, Explicit(\"Too flakey on CI\")]\n    public class ChainInvokerIntegrationTester\n    {\n        [Test]\n        public void invoking_a_chain_will_execute_completely_with_cascading_messages()\n        {\n            using (var runtime = FubuRuntime.For<ChainInvokerTransportRegistry>())\n            {\n                var recorder = runtime.Get<MessageRecorder>();\n\n                var invoker = runtime.Get<IChainInvoker>();\n\n                MessageHistory.WaitForWorkToFinish(() =>\n                {\n                    invoker.InvokeNow(new WebMessage { Text = \"I'm good\" });\n                });\n\n                // Should process all the cascading messages that bubble up\n                // and their cascaded messages\n                recorder.Messages.ShouldContain(\"I'm good\");\n                recorder.Messages.ShouldContain(\"I'm good-2\");\n                recorder.Messages.ShouldContain(\"I'm good-2-4\");\n                recorder.Messages.ShouldContain(\"I'm good-2-3\");\n                recorder.Messages.ShouldContain(\"Traced: I'm good\");\n            }\n        }\n\n        [Test]\n        public void invoking_a_chain_will_execute_with_failure_does_not_send_off_cascading_messages()\n        {\n            using (var runtime = FubuRuntime.For<ChainInvokerTransportRegistry>())\n            {\n                var recorder = runtime.Get<MessageRecorder>();\n\n                var invoker = runtime.Get<IChainInvoker>();\n\n\n                MessageHistory.WaitForWorkToFinish(() =>\n                {\n                    // The handler for WebMessage is rigged to throw exceptions\n                    // if it contains the text 'Bad'\n                    invoker.InvokeNow(new WebMessage { Text = \"Bad message\" });\n                });\n\n                // NO MESSAGES SHOULD GET OUT WITH THE ORIGINAL 'Bad Message'\n                recorder.Messages.Any(x => x.Contains(\"Bad message\")).ShouldBeFalse();\n\n                AssertCascadedMessages(recorder);\n            }\n        }\n\n        [Test]\n        public void invoking_a_chain_will_execute_completely_with_cascading_immediate_continuations()\n        {\n            using (var runtime = FubuRuntime.For<ChainInvokerTransportRegistry>())\n            {\n                var recorder = runtime.Get<MessageRecorder>();\n\n                var invoker = runtime.Get<IChainInvoker>();\n\n                MessageHistory.WaitForWorkToFinish(() =>\n                {\n                    invoker.InvokeNow(new TriggerImmediate { Text = \"First\", ContinueText = \"I'm good\" });\n                });\n\n                // Should process all the cascading messages that bubble up\n                // and their cascaded messages\n                recorder.Messages.ShouldContain(\"First\");\n                recorder.Messages.ShouldContain(\"I'm good\");\n                recorder.Messages.ShouldContain(\"I'm good-2\");\n                recorder.Messages.ShouldContain(\"I'm good-2-4\");\n                recorder.Messages.ShouldContain(\"I'm good-2-3\");\n                recorder.Messages.ShouldContain(\"Traced: I'm good\");\n            }\n        }\n\n        [Test]\n        public void invoking_a_chain_will_execute_completely_with_cascading_immediate_continuations_even_if_the_continuation_messages_fail()\n        {\n            using (var runtime = FubuRuntime.For<ChainInvokerTransportRegistry>())\n            {\n                var recorder = runtime.Get<MessageRecorder>();\n\n                var invoker = runtime.Get<IChainInvoker>();\n\n                MessageHistory.WaitForWorkToFinish(() =>\n                {\n                    invoker.InvokeNow(new TriggerImmediate { Text = \"First\", ContinueText = \"Bad message\" });\n                });\n\n                // Should process all the cascading messages that bubble up\n                // and their cascaded messages\n                recorder.Messages.ShouldContain(\"First\");\n\n                AssertCascadedMessages(recorder);\n            }\n        }\n\n        [Test]\n        public void invoking_a_chain_will_execute_completely_with_cascading_immediate_continuations_even_if_the_continuation_messages_fail_and_retry_immediately()\n        {\n            using (var runtime = FubuRuntime.For<ChainInvokerTransportRegistry>())\n            {\n                var recorder = runtime.Get<MessageRecorder>();\n\n                var invoker = runtime.Get<IChainInvoker>();\n\n                MessageHistory.WaitForWorkToFinish(() =>\n                {\n                    invoker.InvokeNow(new TriggerImmediate { Text = \"First\", ContinueText = \"Retry message\" });\n                });\n\n                // Should process all the cascading messages that bubble up\n                // and their cascaded messages\n                recorder.Messages.ShouldContain(\"First\");\n\n                AssertCascadedMessages(recorder);\n            }\n        }\n\n\n        private static void AssertCascadedMessages(MessageRecorder recorder)\n        {\n            // will succeed on the retry because we change the text in the handler.\n            // basically just proving that the interplay w/ exception handling behaviors\n            // and continuations within the invocation is working\n\n            recorder.Messages.ShouldContain(\"now it is good\");\n            recorder.Messages.ShouldContain(\"now it is good-2\");\n            recorder.Messages.ShouldContain(\"now it is good-2-4\");\n            recorder.Messages.ShouldContain(\"now it is good-2-3\");\n            recorder.Messages.ShouldContain(\"Traced: now it is good\");\n        }\n    }\n\n\n    public class ChainInvokerSettings\n    {\n        public ChainInvokerSettings()\n        {\n            Incoming = new Uri(\"lq.tcp://localhost:2300/chain_invoker\");\n        }\n\n        public Uri Incoming { get; set; }\n    }\n\n    public class ChainInvokerTransportRegistry : FubuTransportRegistry<ChainInvokerSettings>\n    {\n        public ChainInvokerTransportRegistry()\n        {\n            Mode = \"testing\";\n\n            Services.ForSingletonOf<MessageRecorder>();\n\n            AlterSettings<TransportSettings>(x =>\n            {\n                x.DebugEnabled = true;\n            });\n\n            Policies.Global.Add<ErrorHandlingPolicy>();\n\n            Channel(x => x.Incoming).AcceptsMessages(t => true).ReadIncoming();\n        }\n    }\n\n    public class ErrorHandlingPolicy : HandlerChainPolicy\n    {\n        public override void Configure(HandlerChain chain)\n        {\n            chain.MaximumAttempts = 3;\n            chain.OnException<DivideByZeroException>().Requeue();\n            chain.OnException<InvalidOperationException>().Retry();\n\n            chain.OnException<NotSupportedException>()\n                .MoveToErrorQueue()\n                .Then.RespondWithMessage((ex, env) => new ErrorMessage {Message = ex.Message});\n        }\n    }\n\n    public class ErrorMessage\n    {\n        public string Message { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/ServiceBus/Delayed_Processing_Job_Registration_Tester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing FubuCore.Dates;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.Runtime.Delayed;\nusing FubuMVC.Tests.ServiceBus;\nusing NUnit.Framework;\nusing Shouldly;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.IntegrationTesting.ServiceBus\n{\n    [TestFixture]\n    public class Delayed_Processing_Job_Registration_Tester\n    {\n        [Test]\n        public void the_delayed_processing_polling_job_is_registered()\n        {\n            using (var runtime = FubuRuntime.For<DelayedRegistry>())\n            {\n                runtime.Behaviors.Chains.Where(x => x.InputType() == typeof(JobRequest<DelayedEnvelopeProcessor>))\n                    .Each(x => Debug.WriteLine(x.Title()));\n\n                runtime.Get<IPollingJobs>().Any(x => x is PollingJob<DelayedEnvelopeProcessor, TransportSettings>)\n                    .ShouldBeTrue();\n            }\n        }\n    }\n\n    public class DelayedRegistry : FubuTransportRegistry<BusSettings>\n    {\n        public DelayedRegistry()\n        {\n            AlterSettings<BusSettings>(x => x.Downstream = new Uri(\"lq.tcp://localhost:2207/delayed\"));\n\n            Services.ReplaceService<ISystemTime>(new SettableClock());\n            Handlers.Include<SimpleHandler<OneMessage>>();\n            Channel(x => x.Downstream).ReadIncoming().AcceptsMessagesInAssemblyContainingType<OneMessage>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/ServiceBus/Messages.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.ServiceBus.Runtime.Cascading;\n\nnamespace FubuMVC.IntegrationTesting.ServiceBus\n{\n    public class WebMessage\n    {\n        public string Text { get; set; }\n\n        public void Assert()\n        {\n            if (Text.Contains(\"Bad\"))\n            {\n                Text = \"now it is good\";\n\n                throw new DivideByZeroException(\"it was Bad\");\n            }\n\n            if (Text.Contains(\"Retry\"))\n            {\n                Text = \"now it is good\";\n                throw new InvalidOperationException(\"triggering retry now\");\n            }\n        }\n    }\n\n    public class WebMessage2\n    {\n        public string Text { get; set; }\n    }\n\n    public class WebMessage3\n    {\n        public string Text { get; set; }\n    }\n\n    public class WebMessage4\n    {\n        public string Text { get; set; }\n    }\n\n    public class WebMessageTrace\n    {\n        public string Text { get; set; }\n    }\n\n    public class MessageRecorder\n    {\n        public IList<string> Messages = new List<string>();\n    }\n\n    public class TriggerImmediate\n    {\n        public string Text { get; set; }\n        public string ContinueText { get; set; }\n    }\n\n    public class NotSupportedMessage { }\n\n    public class WebMessageHandler\n    {\n        private readonly MessageRecorder _recorder;\n\n        public WebMessageHandler(MessageRecorder recorder)\n        {\n            _recorder = recorder;\n        }\n\n        public object Handle(TriggerImmediate message)\n        {\n            _recorder.Messages.Add(message.Text);\n\n            return ContinueImmediately.With(new WebMessage {Text = message.ContinueText});\n        }\n\n        public void Handle(WebMessageTrace trace)\n        {\n            _recorder.Messages.Add(trace.Text);\n        }\n\n        public void Handle(NotSupportedMessage message)\n        {\n            throw new NotSupportedException(\"I cannot do this\");\n        }\n\n        public WebMessageTrace Trace(WebMessage message)\n        {\n            return new WebMessageTrace {Text = \"Traced: \" + message.Text};\n        }\n\n        public WebMessage2 Handle(WebMessage message)\n        {\n            message.Assert();\n\n            _recorder.Messages.Add(message.Text);\n\n            return new WebMessage2\n            {\n                Text = message.Text + \"-2\"\n            };\n        }\n\n        public object[] Handle(WebMessage2 message)\n        {\n            _recorder.Messages.Add(message.Text);\n\n            return new[] {new WebMessage3 {Text = message.Text + \"-3\"}, new WebMessage3 {Text = message.Text + \"-4\"}};\n        }\n\n        public void Handle(WebMessage3 message)\n        {\n            _recorder.Messages.Add(message.Text);\n        }\n\n        public void Handle(WebMessage4 message)\n        {\n            _recorder.Messages.Add(message.Text);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/ServiceBus/PerformanceTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Polling;\n\nnamespace FubuMVC.IntegrationTesting.ServiceBus\n{\n    public class PerformanceTester\n    {\n        public static int Times = 1000;\n\n        public static void send_and_respond_roundtrip()\n        {\n            var waitHandle = new ManualResetEvent(false);\n            send_and_respond_roundtrip_helper()\n                .ContinueWith(x => waitHandle.Set());\n            waitHandle.WaitOne();\n        }\n\n        private static async Task send_and_respond_roundtrip_helper()\n        {\n            await perform_work<SingleEndpointTransportRegistry>(x => x.Send(new PingMessage()));\n        }\n\n        private static async Task perform_work<TRegistry>(Action<IServiceBus> actualWork) where TRegistry : FubuRegistry, new()\n        {\n            PongConsumer.Count = 0;\n            PongConsumer.ReceivedAll = new TaskCompletionSource<bool>();\n            using (var runtime = FubuRuntime.For<TRegistry>())\n            {\n                var bus = runtime.Get<IServiceBus>();\n                var tasks = new List<Task>();\n                for (var i = 0; i < Times; ++i)\n                {\n                    if (i == 10)\n                    {\n                        if (JetBrains.Profiler.Windows.Api.PerformanceProfiler.IsActive)\n                        {\n                            JetBrains.Profiler.Windows.Api.PerformanceProfiler.Begin();\n                            JetBrains.Profiler.Windows.Api.PerformanceProfiler.Start();\n                        }\n                    }\n                    var task = Task.Run(() =>\n                    {\n                        actualWork(bus);\n                    });\n                    tasks.Add(task);\n                }\n                await Task.WhenAll(tasks);\n                await PongConsumer.ReceivedAll.Task;\n                if (JetBrains.Profiler.Windows.Api.PerformanceProfiler.IsActive)\n                {\n                    JetBrains.Profiler.Windows.Api.PerformanceProfiler.Stop();\n                    JetBrains.Profiler.Windows.Api.PerformanceProfiler.EndSave();\n                }\n            }\n        }\n\n        public static void send_and_respond_roundtrip_separate_endpoints()\n        {\n            var waitHandle = new ManualResetEvent(false);\n            send_and_respond_roundtrip_separate_endpoints_helper()\n                .ContinueWith(x => waitHandle.Set());\n            waitHandle.WaitOne();\n        }\n\n        private static async Task send_and_respond_roundtrip_separate_endpoints_helper()\n        {\n            using (FubuRuntime.For<PongerTransportRegistry>())\n            {\n                await perform_work<PingerTransportRegistry>(x => x.Send(new PingMessage()));\n            }\n        }\n    }\n\n    public class PingerTransportRegistry : FubuTransportRegistry<PingPongSettings>\n    {\n        public PingerTransportRegistry()\n        {\n            ServiceBus.HealthMonitoring.ScheduledExecution(ScheduledExecution.Disabled);\n            Channel(x => x.Pinger)\n                .AcceptsMessage<PongMessage>()\n                .ReadIncoming();\n\n            Handlers.DisableDefaultHandlerSource();\n            Handlers.Include<PongConsumer>();\n            Channel(x => x.Ponger)\n                .AcceptsMessage<PingMessage>();\n        }\n    }\n\n    public class PongerTransportRegistry : FubuTransportRegistry<PingPongSettings>\n    {\n        public PongerTransportRegistry()\n        {\n            ServiceBus.HealthMonitoring.ScheduledExecution(ScheduledExecution.Disabled);\n            Channel(x => x.Ponger)\n                .AcceptsMessage<PingMessage>()\n                .ReadIncoming();\n\n            Handlers.DisableDefaultHandlerSource();\n            Handlers.Include<PingConsumer>();\n            Channel(x => x.Pinger)\n                .AcceptsMessage<PongMessage>();\n        }\n    }\n\n    public class PingPongSettings\n    {\n        public PingPongSettings()\n        {\n            Pinger = new Uri(\"lq.tcp://localhost:2200/pinger\");\n            Ponger = new Uri(\"lq.tcp://localhost:2201/ponger\");\n        }\n\n        public Uri Pinger { get; set; }\n        public Uri Ponger { get; set; }\n    }\n\n\n    public class SingleEndpointTransportRegistry : FubuTransportRegistry<SingleEndpointSettings>\n    {\n        public SingleEndpointTransportRegistry()\n        {\n            ServiceBus.HealthMonitoring.ScheduledExecution(ScheduledExecution.Disabled);\n            Handlers.DisableDefaultHandlerSource();\n            Handlers.Include<PingConsumer>();\n            Handlers.Include<PongConsumer>();\n            Channel(x => x.Pinger)\n                .AcceptsMessage<PingMessage>()\n                .AcceptsMessage<PongMessage>()\n                .ReadIncoming();\n        }\n    }\n\n    public class SingleEndpointSettings\n    {\n        public SingleEndpointSettings()\n        {\n            Pinger = new Uri(\"lq.tcp://localhost:2200/pinger\");\n        }\n\n        public Uri Pinger { get; set; }\n    }\n\n    public class PingMessage\n    {\n    }\n\n    public class PongMessage\n    {\n    }\n\n    public class PingConsumer\n    {\n        public PongMessage Consume(PingMessage message)\n        {\n            return new PongMessage();\n        }\n    }\n\n    public class PongConsumer\n    {\n        public static TaskCompletionSource<bool> ReceivedAll;\n        public static int Count;\n\n        public void Consume(PongMessage message)\n        {\n            var times = Interlocked.Increment(ref Count);\n            if(times == PerformanceTester.Times)\n                ReceivedAll.SetResult(true);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/ServiceBus/Publishing/PublishingConfigurationIntegrationTester.cs",
    "content": "﻿using System;\nusing System.Net;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Http.Hosting;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Web;\nusing FubuMVC.LightningQueues;\nusing FubuMVC.Tests.ServiceBus;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing StructureMap;\n\nnamespace FubuMVC.IntegrationTesting.ServiceBus.Publishing\n{\n    [TestFixture]\n    public class PublishingConfigurationIntegrationTester\n    {\n        private BehaviorGraph theGraph;\n        private BehaviorChain chain;\n        private FubuRuntime theRuntime;\n        private Container container;\n        private IServiceBus theServiceBus;\n\n        [SetUp]\n        public void SetUp()\n        {\n            container = new Container();\n            container.Inject(new TransportSettings\n            {\n                DelayMessagePolling = Int32.MaxValue,\n                ListenerCleanupPolling = Int32.MaxValue\n            });\n            theServiceBus = MockRepository.GenerateMock<IServiceBus>();\n\n            var registry = new FubuRegistry();\n            registry.ServiceBus.Enable(true);\n            registry.Actions.IncludeType<MessageOnePublisher>();\n            registry.StructureMap(container);\n            registry.AlterSettings<LightningQueueSettings>(x => x.DisableIfNoChannels = true);\n\n            theRuntime = registry.ToRuntime();\n            theGraph = theRuntime.Get<BehaviorGraph>();\n            chain = theGraph.ChainFor<MessageOnePublisher>(x => x.post_message1(null));\n\n            container.Inject(theServiceBus);\n        \n        }\n\n        [TearDown]\n        public void Teardown()\n        {\n            theRuntime.Dispose();\n        }\n\n        [Test]\n        public void end_to_end_test()\n        {\n            theRuntime.Scenario(_ =>\n            {\n                _.Post.Json(new Message1Input());\n                _.StatusCodeShouldBeOk();\n                _.ContentShouldContain(\"\\\"success\\\":true\");\n            });\n\n            theServiceBus.AssertWasCalled(x => x.Send(new Message1()), x => x.IgnoreArguments());\n        }\n\n        [Test]\n        public void should_find_the_IEventPublishers_loaded_into_memory()\n        {\n            chain.ShouldNotBeNull();\n            theGraph.ChainFor<MessageTwoPublisher>(x => x.post_message2(null))\n                .ShouldNotBeNull();\n        }\n\n        [Test]\n        public void input_type_should_be_the_input_type_of_the_publisher_method()\n        {\n            chain.InputType().ShouldBe(typeof(Message1Input));\n        }\n\n        [Test]\n        public void resource_type_should_be_AjaxContinuation()\n        {\n            chain.ResourceType().ShouldBe(typeof(AjaxContinuation));\n        }\n\n        [Test]\n        public void should_be_a_PublishEvent_node_directly_after_the_publishing_action()\n        {\n            // diagnostics are in here now.\n            chain.FirstCall().Next.ShouldBeOfType<SendsMessage>()\n                .EventType.ShouldBe(typeof(Message1));\n        }\n\n    }\n\n    public class MessageOnePublisher : ISendMessages\n    {\n        public Message1 post_message1(Message1Input input)\n        {\n            return new Message1();\n        }\n\n        \n    }\n\n    public class MessageTwoPublisher : ISendMessages\n    {\n        public Message2 post_message2(Message2Input input)\n        {\n            return new Message2();\n        }\n    }\n\n    public class Message1Input{}\n    public class Message2Input{}\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/ServiceBus/end_to_end_diagnostics_specs.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.LightningQueues;\nusing NUnit.Framework;\nusing Shouldly;\nusing TraceLevel = FubuMVC.Core.TraceLevel;\n\nnamespace FubuMVC.IntegrationTesting.ServiceBus\n{\n    [TestFixture]\n    public class end_to_end_diagnostics_specs\n    {\n        [Test]\n        public void see_tracing_logs_in_production_mode_happy_path()\n        {\n            var registry = new FubuRegistry();\n            registry.ServiceBus.Enable(true);\n            registry.Features.Diagnostics.Enable(TraceLevel.Production);\n            registry.ServiceBus.EnableInMemoryTransport();\n            registry.AlterSettings<LightningQueueSettings>(x => x.DisableIfNoChannels = true);\n\n            using (var runtime = registry.ToRuntime())\n            {\n                var bus = runtime.Get<IServiceBus>();\n\n                bus.Consume(new TracedInput());\n\n                var history = runtime.Get<IChainExecutionHistory>();\n\n                var log = history.RecentReports().Single(x => x.RootChain != null && x.RootChain.InputType() == typeof(TracedInput));\n\n                log.Steps.Any(x => x.Log is StringMessage).ShouldBeFalse();\n\n            }\n        }\n\n        [Test]\n        public void get_error_messages_in_production_mode()\n        {\n            var registry = new FubuRegistry();\n            registry.ServiceBus.Enable(true);\n            registry.Features.Diagnostics.Enable(TraceLevel.Production);\n            registry.ServiceBus.EnableInMemoryTransport();\n            registry.AlterSettings<LightningQueueSettings>(x => x.DisableIfNoChannels = true);\n\n            using (var runtime = registry.ToRuntime())\n            {\n                var bus = runtime.Get<IServiceBus>();\n\n                bus.Consume(new TracedInput { Fail = true });\n                \n\n                var history = runtime.Get<IChainExecutionHistory>();\n\n                var log = history.RecentReports().Single(x => x.RootChain != null && x.RootChain.InputType() == typeof(TracedInput));\n\n                log.Steps.Any(x => x.Log is ExceptionReport).ShouldBeTrue();\n                log.HadException.ShouldBeTrue();\n            }\n        }\n\n        [Test]\n        public void see_tracing_logs_in_verbose_mode_happy_path()\n        {\n            var registry = new FubuRegistry();\n            registry.ServiceBus.Enable(true);\n            registry.Features.Diagnostics.Enable(TraceLevel.Verbose);\n            registry.ServiceBus.EnableInMemoryTransport();\n            registry.AlterSettings<LightningQueueSettings>(x => x.DisableIfNoChannels = true);\n\n            using (var runtime = registry.ToRuntime())\n            {\n                var bus = runtime.Get<IServiceBus>();\n\n                bus.Consume(new TracedInput());\n\n                var history = runtime.Get<IChainExecutionHistory>();\n\n                var log = history.RecentReports().Single(x => x.RootChain != null && x.RootChain.InputType() == typeof(TracedInput));\n\n                log.Request[\"headers\"].ShouldBeOfType<Dictionary<string, string>>();\n                \n                log.Steps.Any().ShouldBeTrue();\n                log.Steps.Any(x => x.Log is StringMessage).ShouldBeTrue();\n\n                log.Steps.Each(x => Debug.WriteLine(x));\n            }\n        }\n    }\n\n    public class TracedInput\n    {\n        public bool Fail { get; set; }\n    }\n\n    public class TracedInputConsumer\n    {\n        private readonly ILogger _logger;\n\n        public TracedInputConsumer(ILogger logger)\n        {\n            _logger = logger;\n        }\n\n        public void Consume(TracedInput input)\n        {\n            _logger.Info(\"I got into TracedInputConsumer\");\n\n            Thread.Sleep(1.Seconds());\n            if (input.Fail)\n            {\n                throw new DivideByZeroException(\"You shall not pass!\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/Content Negotiation/Default_Conneg_Rules.xml",
    "content": "<Spec id=\"003e93ae-a8dc-44c7-9a83-b9c11e1efa0a\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"Default Conneg Rules\">\n  <Conneg id=\"0be124b2-ce8c-4875-b01f-f27c5e3463fc\">\n    <DefaultConnegRules>\n      <table id=\"70f40ac1-49c2-48d4-9449-8b808df50f78\">\n        <DefaultConnegRules-row QueryString=\"NULL\" format=\"Json\" Accepts=\"*/*\" ContentType=\"application/json\" ResponseCode=\"200\" />\n        <DefaultConnegRules-row QueryString=\"NULL\" format=\"Json\" Accepts=\"text/json\" ContentType=\"text/json\" ResponseCode=\"200\" />\n        <DefaultConnegRules-row QueryString=\"NULL\" format=\"Xml\" Accepts=\"*/*\" ContentType=\"application/json\" ResponseCode=\"200\" />\n        <DefaultConnegRules-row QueryString=\"NULL\" format=\"Xml\" Accepts=\"application/xml\" ContentType=\"application/xml\" ResponseCode=\"200\" />\n        <DefaultConnegRules-row QueryString=\"NULL\" format=\"Xml\" Accepts=\"text/xml\" ContentType=\"text/xml\" ResponseCode=\"200\" />\n        <DefaultConnegRules-row QueryString=\"NULL\" format=\"Form Post\" Accepts=\"*/*\" ContentType=\"application/json\" ResponseCode=\"200\" />\n        <DefaultConnegRules-row QueryString=\"NULL\" format=\"Json\" Accepts=\"random/format\" ContentType=\"text/plain\" ResponseCode=\"406\" />\n      </table>\n    </DefaultConnegRules>\n  </Conneg>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/Diagnostics/Open_Core_Diagnostic_Pages.xml",
    "content": "<Spec id=\"220b078f-8094-469b-a8c5-74fbe9374284\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"Open Core Diagnostic Pages\" lastUpdated=\"Friday, September 04, 2015\" expirationPeriod=\"0\">\n  <OpenScreen id=\"3c4fc528-dbcf-406e-859d-77efcde0a28d\">\n    <Comment id=\"60c46f2c-7800-4677-bf1f-8dd9db8f8029\">Open all the urls listed below. Any javascript errors from React.js rendering problems will be listed in the results if a screen fails.</Comment>\n    <OpenScreens>\n      <table id=\"2ca8e325-9b35-4088-b18b-6c7a96dfd247\">\n        <OpenScreens-row Url=\"_fubu\" />\n        <OpenScreens-row Url=\"_fubu#/fubumvc/model-binding\" />\n        <OpenScreens-row Url=\"_fubu#/fubumvc/endpoints\" />\n        <OpenScreens-row Url=\"_fubu#/fubumvc/requests\" />\n        <OpenScreens-row Url=\"_fubu#/fubumvc/package-loading\" />\n        <OpenScreens-row Url=\"_fubu#/fubumvc/client-messages\" />\n        <OpenScreens-row Url=\"_fubu#/appdomain\" />\n        <OpenScreens-row Url=\"_fubu#/assets\" />\n        <OpenScreens-row Url=\"_fubu#/settings\" />\n        <OpenScreens-row Url=\"_fubu#/settings/setting-details/FubuMVC.Core.Assets.AssetSettings\" />\n      </table>\n    </OpenScreens>\n  </OpenScreen>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/Diagnostics/Open_Service_Bus_Diagnostic_Pages.xml",
    "content": "<Spec id=\"376fa8fb-7c43-4e75-9ed8-3d95eabbe897\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"Open Service Bus Diagnostic Pages\" lastUpdated=\"Friday, September 04, 2015\" expirationPeriod=\"0\">\n  <OpenScreen id=\"3c4fc528-dbcf-406e-859d-77efcde0a28d\">\n    <Comment id=\"60c46f2c-7800-4677-bf1f-8dd9db8f8029\">Open all the urls listed below. Any javascript errors from React.js rendering problems will be listed in the results if a screen fails.</Comment>\n    <OpenScreens>\n      <table id=\"2ca8e325-9b35-4088-b18b-6c7a96dfd247\">\n        <OpenScreens-row Url=\"_fubu#/servicebus/channelgraph\" />\n        <OpenScreens-row Url=\"_fubu#/servicebus/subscriptions\" />\n        <OpenScreens-row Url=\"_fubu#/servicebus/message-handlers\" />\n        <OpenScreens-row Url=\"_fubu#/servicebus/persistent-tasks\" />\n      </table>\n    </OpenScreens>\n  </OpenScreen>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/Diagnostics/Open_StructureMap_Diagnostics_Screens.xml",
    "content": "<Spec id=\"e6dd7628-455c-4ce8-a30e-a1e4c76092fd\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"Open StructureMap Diagnostics Screens\" lastUpdated=\"Friday, September 04, 2015\" expirationPeriod=\"0\">\n  <OpenScreen id=\"3c4fc528-dbcf-406e-859d-77efcde0a28d\">\n    <Comment id=\"60c46f2c-7800-4677-bf1f-8dd9db8f8029\">Open all the urls listed below. Any javascript errors from React.js rendering problems will be listed in the results if a screen fails.</Comment>\n    <OpenScreens>\n      <table id=\"2ca8e325-9b35-4088-b18b-6c7a96dfd247\">\n        <OpenScreens-row Url=\"_fubu#/structuremap/summary\" />\n        <OpenScreens-row Url=\"_fubu#/structuremap/whatdoihave\" />\n        <OpenScreens-row Url=\"_fubu#/structuremap/search-results/Assembly/FubuCore.dll\" />\n        <OpenScreens-row Url=\"_fubu#/structuremap/search-results/Namespace/FubuCore\" />\n      </table>\n    </OpenScreens>\n  </OpenScreen>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/Serenity/Collect_Javascript_Errors.xml",
    "content": "<Spec id=\"d3baa3a5-498c-481a-bd0b-b249fa323713\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"Collect Javascript Errors\" lastUpdated=\"Thursday, September 03, 2015\" expirationPeriod=\"0\">\n  <JavascriptError id=\"45390032-e660-4587-a43e-0740ed274692\">\n    <HasError text=\"you stink!\" />\n  </JavascriptError>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/Basics/Batch Messages/All_messages_in_a_batch_are_processed.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"All messages in a batch are processed\" lifecycle=\"Regression\" retryAttemptNumber=\"0\">\n  <BatchMessage>\n    <SendBatch isStep=\"True\">\n      <DefineBatchMessage>\n        <DescriptionIs isStep=\"True\" description=\"The batch\" />\n        <SendColor isStep=\"True\" color=\"Red\" />\n        <SendDirection isStep=\"True\" direction=\"North\" />\n        <SendState isStep=\"True\" state=\"Texas\" />\n        <SendTeam isStep=\"True\" team=\"Chiefs\" />\n      </DefineBatchMessage>\n    </SendBatch>\n    <TheRecordedMessagesAre isStep=\"True\">\n      <Rows>\n        <row isStep=\"True\" expected=\"Starting: The batch\" />\n        <row isStep=\"True\" expected=\"Color: Red\" />\n        <row isStep=\"True\" expected=\"Direction: North\" />\n        <row isStep=\"True\" expected=\"State: Texas\" />\n        <row isStep=\"True\" expected=\"Team: Chiefs\" />\n        <row isStep=\"True\" expected=\"Finishing: The batch\" />\n      </Rows>\n    </TheRecordedMessagesAre>\n  </BatchMessage>\n</Test>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/Basics/Publishing_a_message_that_has_multiple_subscribers.xml",
    "content": "<Spec id=\"f5da15b1-0d4c-4567-af40-dad3925eb89d\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"Publishing a message that has multiple subscribers\" lastUpdated=\"Wednesday, September 23, 2015\" expirationPeriod=\"0\">\n  <ServiceBus id=\"3efa1d79-b7b0-46ff-b8f8-052aa7b26eb2\">\n    <ActiveNode>\n      <ServiceBusNode id=\"23555730-532a-4498-923c-a4e242db7a64\">\n        <NodeName name=\"Website1\" channels=\"Website1\" />\n        <Publishes>\n          <table id=\"ecb17d5f-82ee-464a-af57-592852edadc0\">\n            <Publishes-row Channel=\"Service1\" Message=\"OneMessage\" />\n            <Publishes-row Channel=\"Service3\" Message=\"OneMessage\" />\n          </table>\n        </Publishes>\n      </ServiceBusNode>\n    </ActiveNode>\n    <ActiveNode>\n      <ServiceBusNode id=\"50b6392f-d056-48ff-a802-0d3e6193f07d\">\n        <NodeName name=\"Service1\" channels=\"Service1\" />\n      </ServiceBusNode>\n    </ActiveNode>\n    <ActiveNode>\n      <ServiceBusNode id=\"4680f8d5-9282-48d5-bef6-0df915295dcc\">\n        <NodeName name=\"Service2\" channels=\"Service2\" />\n      </ServiceBusNode>\n    </ActiveNode>\n    <ActiveNode>\n      <ServiceBusNode id=\"c9b1c998-f52e-42a4-8776-c4cc1cc27ec1\">\n        <NodeName name=\"Service3\" channels=\"Service3\" />\n      </ServiceBusNode>\n    </ActiveNode>\n    <Actions>\n      <ServiceBusAction id=\"20bd2c80-54bb-423a-a380-bf0707a8389e\">\n        <Send>\n          <table id=\"6c12439f-19c2-4afa-a5b6-9c2a2a27073c\">\n            <Send-row Key=\"One\" Node=\"Website1\" Message=\"OneMessage\" />\n          </table>\n        </Send>\n      </ServiceBusAction>\n    </Actions>\n    <MessagesProcessedShouldBe>\n      <rows id=\"34f8dc6a-c528-4d47-9014-5c6c50a04dcb\">\n        <MessagesProcessedShouldBe-row Key=\"One\" Node=\"Service1\" Type=\"OneMessage\" />\n        <MessagesProcessedShouldBe-row Key=\"One\" Node=\"Service3\" Type=\"OneMessage\" />\n      </rows>\n    </MessagesProcessedShouldBe>\n  </ServiceBus>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/Basics/Publishing_a_message_using_publishing_rules.xml",
    "content": "<Spec id=\"8b660d24-345e-48d2-9627-14ece71eb019\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"Publishing a message using publishing rules\" lastUpdated=\"Wednesday, September 23, 2015\" expirationPeriod=\"0\">\n  <ServiceBus id=\"3efa1d79-b7b0-46ff-b8f8-052aa7b26eb2\">\n    <ActiveNode>\n      <ServiceBusNode id=\"23555730-532a-4498-923c-a4e242db7a64\">\n        <NodeName name=\"Website1\" channels=\"Website1\" />\n        <Publishes>\n          <table id=\"ecb17d5f-82ee-464a-af57-592852edadc0\">\n            <Publishes-row Channel=\"Service1\" Message=\"OneMessage\" />\n          </table>\n        </Publishes>\n      </ServiceBusNode>\n    </ActiveNode>\n    <ActiveNode>\n      <ServiceBusNode id=\"50b6392f-d056-48ff-a802-0d3e6193f07d\">\n        <NodeName name=\"Service1\" channels=\"Service1\" />\n      </ServiceBusNode>\n    </ActiveNode>\n    <Actions>\n      <ServiceBusAction id=\"20bd2c80-54bb-423a-a380-bf0707a8389e\">\n        <Send>\n          <table id=\"6c12439f-19c2-4afa-a5b6-9c2a2a27073c\">\n            <Send-row Key=\"One\" Node=\"Website1\" Message=\"OneMessage\" />\n          </table>\n        </Send>\n      </ServiceBusAction>\n    </Actions>\n    <MessagesProcessedShouldBe>\n      <rows id=\"34f8dc6a-c528-4d47-9014-5c6c50a04dcb\">\n        <MessagesProcessedShouldBe-row Key=\"One\" Node=\"Service1\" Type=\"OneMessage\" />\n      </rows>\n    </MessagesProcessedShouldBe>\n  </ServiceBus>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/Basics/SendAndAwait/SendAndAwait_Happy_Path.xml",
    "content": "<Spec id=\"58c5db69-890b-4f98-a4f7-ac079c19f001\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"SendAndAwait Happy Path\">\n  <SendAndAwait id=\"a99a506f-2679-4e11-a6cf-9390ba89dcc2\">\n    <SendMessageSuccessfully />\n    <AckIsReceived seconds=\"10\" />\n    <AckWasSuccessful />\n  </SendAndAwait>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/Basics/SendAndAwait/SendAndAwait_Sad_Path_Exception_reporting.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"SendAndAwait Sad Path Exception reporting\" lifecycle=\"Regression\">\n  <SendAndAwait>\n    <SendMessageUnsuccessfully isStep=\"True\" />\n    <AckIsReceived isStep=\"True\" seconds=\"10\" />\n    <TheAckFailedWithMessage isStep=\"True\" message=\"AmbiguousMatchException\" />\n  </SendAndAwait>\n</Test>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/Basics/Sending_a_message_that_results_in_replies.xml",
    "content": "<Spec id=\"737fa168-2876-414d-9537-514fa4cd6748\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"Sending a message that results in replies\" lastUpdated=\"Wednesday, September 23, 2015\" expirationPeriod=\"0\">\n  <ServiceBus id=\"3efa1d79-b7b0-46ff-b8f8-052aa7b26eb2\">\n    <ActiveNode>\n      <ServiceBusNode id=\"23555730-532a-4498-923c-a4e242db7a64\">\n        <NodeName name=\"Website1\" channels=\"Website1\" />\n        <Publishes>\n          <table id=\"ecb17d5f-82ee-464a-af57-592852edadc0\">\n            <Publishes-row Channel=\"Service1\" Message=\"OneMessage\" />\n          </table>\n        </Publishes>\n      </ServiceBusNode>\n    </ActiveNode>\n    <ActiveNode>\n      <ServiceBusNode id=\"50b6392f-d056-48ff-a802-0d3e6193f07d\">\n        <NodeName name=\"Service1\" channels=\"Service1\" />\n        <Publishes>\n          <table id=\"8de38665-931e-405b-a8ba-ce9c272091cd\">\n            <Publishes-row Channel=\"Service1\" Message=\"TwoMessage\" />\n            <Publishes-row Channel=\"Service1\" Message=\"ThreeMessage\" />\n          </table>\n        </Publishes>\n        <Replies>\n          <table id=\"4ad36b85-32af-46b5-b272-0896d68d69d9\">\n            <Replies-row Message=\"OneMessage\" Reply=\"TwoMessage\" />\n            <Replies-row Message=\"OneMessage\" Reply=\"ThreeMessage\" />\n          </table>\n        </Replies>\n      </ServiceBusNode>\n    </ActiveNode>\n    <Actions>\n      <ServiceBusAction id=\"20bd2c80-54bb-423a-a380-bf0707a8389e\">\n        <Send>\n          <table id=\"6c12439f-19c2-4afa-a5b6-9c2a2a27073c\">\n            <Send-row Key=\"One\" Node=\"Website1\" Message=\"OneMessage\" />\n          </table>\n        </Send>\n      </ServiceBusAction>\n    </Actions>\n    <MessagesProcessedShouldBe>\n      <rows id=\"34f8dc6a-c528-4d47-9014-5c6c50a04dcb\">\n        <MessagesProcessedShouldBe-row Key=\"One\" Node=\"Service1\" Type=\"OneMessage\" />\n        <MessagesProcessedShouldBe-row Key=\"One\" Node=\"Service1\" Type=\"TwoMessage\" />\n        <MessagesProcessedShouldBe-row Key=\"One\" Node=\"Service1\" Type=\"ThreeMessage\" />\n      </rows>\n    </MessagesProcessedShouldBe>\n  </ServiceBus>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/HealthMonitoring/A_running_task_goes_down_and_gets_reassigned.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"A running task goes down and gets reassigned\" lifecycle=\"Acceptance\" retryAttemptNumber=\"0\">\n  <Monitoring>\n    <Context isStep=\"True\">\n      <MonitoringSetup>\n        <TheNodesAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" id=\"Node1\" incoming=\"lq.tcp://localhost:1000/control\" />\n            <row isStep=\"True\" id=\"Node2\" incoming=\"lq.tcp://localhost:2000/control\" />\n            <row isStep=\"True\" id=\"Node3\" incoming=\"lq.tcp://localhost:3000/control\" />\n            <row isStep=\"True\" id=\"Node4\" incoming=\"lq.tcp://localhost:4000/control\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled isStep=\"True\" />\n        <TheTasksAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" task=\"foo://1\" node=\"Node4\" nodes=\"Node1, Node2, Node3, Node4\" />\n            <row isStep=\"True\" task=\"foo://2\" node=\"Node4\" nodes=\"Node2, Node1, Node3, Node4\" />\n            <row isStep=\"True\" task=\"foo://3\" node=\"NONE\" nodes=\"Node3, Node1, Node2, Node4\" />\n            <row isStep=\"True\" task=\"foo://4\" node=\"Node4\" nodes=\"Node4, Node1, Node2, Node3\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <Comment><![CDATA[The initial state should look like this]]></Comment>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node4\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node4\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <Comment><![CDATA[Now, Node4 drops offline and its owned tasks should be reassigned]]></Comment>\n    <TaskStateIs isStep=\"True\">\n      <table>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node4\" State=\"Throws exception on startup or health check\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node4\" State=\"Throws exception on startup or health check\" />\n      </table>\n    </TaskStateIs>\n    <AfterTheHealthChecksRunOnNode node=\"Node1\" isStep=\"True\" />\n    <ThePersistedAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node2\" />\n        <row isStep=\"True\" Task=\"foo://3\" Node=\"Node3\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node2\" />\n        <row isStep=\"True\" Task=\"foo://3\" Node=\"Node3\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n  </Monitoring>\n</Test>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/HealthMonitoring/A_running_task_times_out_on_health_checks_and_gets_reassigned.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"A running task times out on health checks and gets reassigned\" lifecycle=\"Acceptance\" retryAttemptNumber=\"0\">\n  <Monitoring>\n    <Context isStep=\"True\">\n      <MonitoringSetup>\n        <TheNodesAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" id=\"Node1\" incoming=\"lq.tcp://localhost:1000/control\" />\n            <row isStep=\"True\" id=\"Node2\" incoming=\"lq.tcp://localhost:2000/control\" />\n            <row isStep=\"True\" id=\"Node3\" incoming=\"lq.tcp://localhost:3000/control\" />\n            <row isStep=\"True\" id=\"Node4\" incoming=\"lq.tcp://localhost:4000/control\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled isStep=\"True\" />\n        <TheTasksAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" task=\"foo://1\" node=\"Node4\" nodes=\"Node1, Node2, Node3, Node4\" />\n            <row isStep=\"True\" task=\"foo://2\" node=\"Node4\" nodes=\"Node2, Node1, Node3, Node4\" />\n            <row isStep=\"True\" task=\"foo://3\" node=\"NONE\" nodes=\"Node3, Node1, Node2, Node4\" />\n            <row isStep=\"True\" task=\"foo://4\" node=\"Node4\" nodes=\"Node4, Node1, Node2, Node3\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <Comment><![CDATA[The initial state should look like this]]></Comment>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node4\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node4\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <Comment><![CDATA[Now, these two jobs will become unresponsive on Node4]]></Comment>\n    <TaskStateIs isStep=\"True\">\n      <table>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node4\" State=\"Times out on startup or health check\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node4\" State=\"Times out on startup or health check\" />\n      </table>\n    </TaskStateIs>\n    <AfterTheHealthChecksRunOnNode node=\"Node1\" isStep=\"True\" />\n    <ThePersistedAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node2\" />\n        <row isStep=\"True\" Task=\"foo://3\" Node=\"Node3\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node2\" />\n        <row isStep=\"True\" Task=\"foo://3\" Node=\"Node3\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n  </Monitoring>\n</Test>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/HealthMonitoring/An_inactive_task_should_get_reassigned.xml",
    "content": "<Spec id=\"aebe324b-5b97-4ba2-9160-5041beb9ed35\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"An inactive task should get reassigned\" lastUpdated=\"Tuesday, June 21, 2016\" expirationPeriod=\"0\">\n  <Monitoring id=\"f741d017-4e50-4178-b211-ccd6f57cf0a2\">\n    <Context>\n      <MonitoringSetup id=\"3c568b01-019c-42c4-bd91-e1b12db8d8a7\">\n        <TheNodesAre>\n          <table id=\"2537ee07-dda3-4a88-9d69-0e3b86cc20df\">\n            <row id=\"Node1\" incoming=\"lq.tcp://localhost:1000/control\" />\n            <row id=\"Node2\" incoming=\"lq.tcp://localhost:2000/control\" />\n            <row id=\"Node3\" incoming=\"lq.tcp://localhost:3000/control\" />\n            <row id=\"Node4\" incoming=\"lq.tcp://localhost:4000/control\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled />\n        <TheTasksAre>\n          <table id=\"aaa0e589-c4e2-403c-802f-f522961af5ff\">\n            <row task=\"foo://1\" node=\"Node4\" nodes=\"Node1, Node2, Node3, Node4\" />\n            <row task=\"foo://2\" node=\"Node4\" nodes=\"Node2, Node1, Node3, Node4\" />\n            <row task=\"foo://3\" node=\"NONE\" nodes=\"Node3, Node1, Node2, Node4\" />\n            <row task=\"foo://4\" node=\"Node4\" nodes=\"Node4, Node1, Node2, Node3\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <Comment id=\"4a1779b9-9394-4e19-a637-3b54772ea4ca\">The initial state should look like this</Comment>\n    <TheTaskAssignmentsShouldBe>\n      <rows id=\"23a4823a-da68-4f0e-9455-a57e9b43bba7\">\n        <row Task=\"foo://1\" Node=\"Node4\" />\n        <row Task=\"foo://2\" Node=\"Node4\" />\n        <row Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <Comment id=\"4bcac05c-33dc-434d-8bae-e2a026307707\">Now, Node4 drops offline and its owned tasks should be reassigned</Comment>\n    <TaskStateIs>\n      <table id=\"67941c06-125f-476b-a835-e0718e9b12c7\">\n        <row Task=\"foo://1\" Node=\"Node4\" State=\"Is inactive\" />\n        <row Task=\"foo://2\" Node=\"Node4\" State=\"Is inactive\" />\n      </table>\n    </TaskStateIs>\n    <AfterTheHealthChecksRunOnNode node=\"Node1\" />\n    <ThePersistedAssignmentsShouldBe>\n      <rows id=\"eff9dffe-8924-48f4-8eb1-5238953410e9\">\n        <row Task=\"foo://1\" Node=\"Node1\" />\n        <row Task=\"foo://2\" Node=\"Node2\" />\n        <row Task=\"foo://3\" Node=\"Node3\" />\n        <row Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n    <TheTaskAssignmentsShouldBe>\n      <rows id=\"f19376b6-afe2-4ebb-a874-73fa6fa69ed4\">\n        <row Task=\"foo://1\" Node=\"Node1\" />\n        <row Task=\"foo://2\" Node=\"Node2\" />\n        <row Task=\"foo://3\" Node=\"Node3\" />\n        <row Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n  </Monitoring>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/HealthMonitoring/Assign_on_order_of_preference_when_some_nodes_are_down.xml",
    "content": "<Spec id=\"cb1b865b-20ad-4c20-93f6-c07d76eedaf7\" maxRetries=\"0\" tags=\"\" lifecycle=\"Acceptance\" name=\"Assign on order of preference when some nodes are down\" lastUpdated=\"Tuesday, September 22, 2015\" expirationPeriod=\"0\">\n  <Monitoring id=\"176d5820-dd98-48a8-83c3-d28cd7120bbe\">\n    <Context>\n      <MonitoringSetup id=\"0c61fa53-8bb8-48e7-b06f-86ce3ba0301d\">\n        <TheNodesAre>\n          <table id=\"0d30d64b-7fa1-44f5-8912-0ace3e0caf0c\">\n            <row id=\"Node1\" incoming=\"lq.tcp://localhost:1000/control\" />\n            <row id=\"Node2\" incoming=\"lq.tcp://localhost:2000/control\" />\n            <row id=\"Node3\" incoming=\"lq.tcp://localhost:3000/control\" />\n            <row id=\"Node4\" incoming=\"lq.tcp://localhost:4000/control\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled />\n        <TheTasksAre>\n          <table id=\"c41a114a-4bbc-4921-b3e2-9c0e6fe82b52\">\n            <row task=\"foo://1\" node=\"NONE\" nodes=\"Node1, Node2, Node3, Node4\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <NodeDropsOffline Node=\"Node1\" />\n    <NodeDropsOffline Node=\"Node2\" />\n    <AfterTheHealthChecksRunOnNode node=\"Node3\" />\n    <ThePersistedNodesShouldBe>\n      <rows id=\"2260a68c-ed09-4c3f-b8d7-9600c740ab71\">\n        <row Id=\"Node1\" ControlChannel=\"lq.tcp://localhost:1000/control\" />\n        <row Id=\"Node2\" ControlChannel=\"lq.tcp://localhost:2000/control\" />\n        <row Id=\"Node3\" ControlChannel=\"lq.tcp://localhost:3000/control\" />\n        <row Id=\"Node4\" ControlChannel=\"lq.tcp://localhost:4000/control\" />\n      </rows>\n    </ThePersistedNodesShouldBe>\n    <TheTaskAssignmentsShouldBe>\n      <rows id=\"cda2c8be-f990-44a4-834a-939581fc90ea\">\n        <row Task=\"foo://1\" Node=\"Node3\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <ThePersistedAssignmentsShouldBe>\n      <rows id=\"602872b9-07e1-410b-89ab-d5a8590ea895\">\n        <row Task=\"foo://1\" Node=\"Node3\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n  </Monitoring>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/HealthMonitoring/Assign_on_order_of_preference_when_some_nodes_fail.xml",
    "content": "<Spec id=\"d0fa8772-7313-4120-9eec-979dd4f8dc84\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"Assign on order of preference when some nodes fail\" lastUpdated=\"Tuesday, September 22, 2015\" expirationPeriod=\"0\">\n  <Monitoring id=\"5a596292-14bb-4d5a-a98d-6b8654cf7cba\">\n    <Context>\n      <MonitoringSetup id=\"6b2a2542-be5a-443e-bbde-a1311329bb4e\">\n        <TheNodesAre>\n          <table id=\"e13076ed-6f37-4794-89e5-7d306e35424b\">\n            <TheNodesAre-row id=\"Node1\" incoming=\"lq.tcp://localhost:1000/control\" />\n            <TheNodesAre-row id=\"Node2\" incoming=\"lq.tcp://localhost:2000/control\" />\n            <TheNodesAre-row id=\"Node3\" incoming=\"lq.tcp://localhost:3000/control\" />\n            <TheNodesAre-row id=\"Node4\" incoming=\"lq.tcp://localhost:4000/control\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled />\n        <TheTasksAre>\n          <table id=\"b59559c5-ac20-4cbe-a9b3-a0c854e561fc\">\n            <TheTasksAre-row task=\"foo://1\" node=\"NONE\" nodes=\"Node1, Node2, Node3, Node4\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <TaskStateIs>\n      <table id=\"d416848e-bb00-4bfe-9172-98609b8fce32\">\n        <TaskStateIs-row Task=\"foo://1\" Node=\"Node1\" State=\"Throws exception on startup or health check\" />\n        <TaskStateIs-row Task=\"foo://1\" Node=\"Node2\" State=\"Throws exception on startup or health check\" />\n      </table>\n    </TaskStateIs>\n    <AfterTheHealthChecksRunOnNode node=\"Node1\" />\n    <ThePersistedNodesShouldBe>\n      <rows id=\"0ca7f8a1-2c8b-4a48-963b-3e2939ab677a\">\n        <ThePersistedNodesShouldBe-row Id=\"Node1\" ControlChannel=\"lq.tcp://localhost:1000/control\" />\n        <ThePersistedNodesShouldBe-row Id=\"Node2\" ControlChannel=\"lq.tcp://localhost:2000/control\" />\n        <ThePersistedNodesShouldBe-row Id=\"Node3\" ControlChannel=\"lq.tcp://localhost:3000/control\" />\n        <ThePersistedNodesShouldBe-row Id=\"Node4\" ControlChannel=\"lq.tcp://localhost:4000/control\" />\n      </rows>\n    </ThePersistedNodesShouldBe>\n    <TheTaskAssignmentsShouldBe>\n      <rows id=\"94c48f11-2166-4829-a008-e4d72803733d\">\n        <TheTaskAssignmentsShouldBe-row Task=\"foo://1\" Node=\"Node3\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <ThePersistedAssignmentsShouldBe>\n      <rows id=\"e705d101-bfc3-427b-ab10-c2832b628f48\">\n        <ThePersistedAssignmentsShouldBe-row Task=\"foo://1\" Node=\"Node3\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n  </Monitoring>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/HealthMonitoring/Assign_on_order_or_preference_when_some_nodes_timeout_on_activation.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Assign on order or preference when some nodes timeout on activation\" lifecycle=\"Acceptance\" retryAttemptNumber=\"0\">\n  <Monitoring>\n    <Context isStep=\"True\">\n      <MonitoringSetup>\n        <TheNodesAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" id=\"Node1\" incoming=\"lq.tcp://localhost:1000/control\" />\n            <row isStep=\"True\" id=\"Node2\" incoming=\"lq.tcp://localhost:2000/control\" />\n            <row isStep=\"True\" id=\"Node3\" incoming=\"lq.tcp://localhost:3000/control\" />\n            <row isStep=\"True\" id=\"Node4\" incoming=\"lq.tcp://localhost:4000/control\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled isStep=\"True\" />\n        <TheTasksAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" task=\"foo://1\" node=\"NONE\" nodes=\"Node1, Node2, Node3, Node4\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <TaskStateIs isStep=\"True\">\n      <table>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" State=\"Times out on startup or health check\" />\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node2\" State=\"Times out on startup or health check\" />\n      </table>\n    </TaskStateIs>\n    <AfterTheHealthChecksRunOnNode node=\"Node1\" isStep=\"True\" />\n    <ThePersistedNodesShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Id=\"Node1\" ControlChannel=\"lq.tcp://localhost:1000/control\" />\n        <row isStep=\"True\" Id=\"Node2\" ControlChannel=\"lq.tcp://localhost:2000/control\" />\n        <row isStep=\"True\" Id=\"Node3\" ControlChannel=\"lq.tcp://localhost:3000/control\" />\n        <row isStep=\"True\" Id=\"Node4\" ControlChannel=\"lq.tcp://localhost:4000/control\" />\n      </rows>\n    </ThePersistedNodesShouldBe>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node3\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <ThePersistedAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node3\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n  </Monitoring>\n</Test>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/HealthMonitoring/Do_not_reassign_a_task_that_is_running.xml",
    "content": "<Spec id=\"64cad02e-e059-4382-9370-b7717773555b\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"Do not reassign a task that is running\" lastUpdated=\"Tuesday, September 22, 2015\" expirationPeriod=\"0\">\n  <Monitoring id=\"74a93789-dbd2-4086-a8db-b4e917949394\">\n    <Context>\n      <MonitoringSetup id=\"b4681f11-c489-408a-a15a-e1d6b9cd36f0\">\n        <TheNodesAre>\n          <table id=\"767087fc-64bc-4f0d-9684-2618a967876f\">\n            <TheNodesAre-row id=\"Node1\" incoming=\"lq.tcp://localhost:1000/control\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled />\n        <TheTasksAre>\n          <table id=\"e14eb546-8c11-43e0-ad37-7bf460b0c6d4\">\n            <TheTasksAre-row task=\"foo://1\" node=\"NONE\" nodes=\"Node1\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <TaskStateIs>\n      <table id=\"27d3fe9a-e97e-4e45-924b-7dc6e0c182cf\">\n        <TaskStateIs-row Task=\"foo://1\" Node=\"Node1\" State=\"Healthy and Functional\" />\n      </table>\n    </TaskStateIs>\n    <AfterTheHealthChecksRunOnAllNodes />\n    <TaskWasNotReassigned task=\"foo://1\" />\n    <TheTaskAssignmentsShouldBe>\n      <rows id=\"2a78fab1-6b74-429c-b96c-b063326e1ccf\">\n        <TheTaskAssignmentsShouldBe-row Task=\"foo://1\" Node=\"Node1\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <ThePersistedAssignmentsShouldBe>\n      <rows id=\"c171265b-8654-4f06-bd82-f4d6424a6b67\">\n        <ThePersistedAssignmentsShouldBe-row Task=\"foo://1\" Node=\"Node1\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n  </Monitoring>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/HealthMonitoring/Mixed_assigned_and_unassigned_tasks.xml",
    "content": "<Spec id=\"664bd284-97ac-4702-a6ed-d691bfe9e923\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"Mixed assigned and unassigned tasks\" lastUpdated=\"Tuesday, June 21, 2016\" expirationPeriod=\"0\">\n  <Monitoring id=\"434cf5c1-5e53-4eec-9a98-d1ba0ebe7e1f\">\n    <Context>\n      <MonitoringSetup id=\"d775b39f-9e27-4f11-9e33-b66cd0b69dce\">\n        <TheNodesAre>\n          <table id=\"2c986b44-46d3-4321-8b01-029c22db3997\">\n            <row id=\"Node1\" incoming=\"lq.tcp://localhost:1000/control\" />\n            <row id=\"Node2\" incoming=\"lq.tcp://localhost:2000/control\" />\n            <row id=\"Node3\" incoming=\"lq.tcp://localhost:3000/control\" />\n            <row id=\"Node4\" incoming=\"lq.tcp://localhost:4000/control\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled />\n        <TheTasksAre>\n          <table id=\"20cec3ee-a17d-4402-a374-8ffa127e199f\">\n            <row task=\"foo://1\" node=\"Node4\" nodes=\"Node1, Node2, Node3, Node4\" />\n            <row task=\"foo://2\" node=\"Node4\" nodes=\"Node2, Node1, Node3, Node4\" />\n            <row task=\"foo://3\" node=\"NONE\" nodes=\"Node3, Node1, Node2, Node4\" />\n            <row task=\"foo://4\" node=\"NONE\" nodes=\"Node4, Node1, Node2, Node3\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <AfterTheHealthChecksRunOnNode node=\"Node1\" />\n    <ThePersistedAssignmentsShouldBe>\n      <rows id=\"a12348b9-3b2e-44af-b7ad-3c85010c9657\">\n        <row Task=\"foo://1\" Node=\"Node4\" />\n        <row Task=\"foo://2\" Node=\"Node4\" />\n        <row Task=\"foo://3\" Node=\"Node3\" />\n        <row Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n    <TheTaskAssignmentsShouldBe>\n      <rows id=\"968e34b5-b2af-45a1-80ad-7b4fb9572024\">\n        <row Task=\"foo://1\" Node=\"Node4\" />\n        <row Task=\"foo://2\" Node=\"Node4\" />\n        <row Task=\"foo://3\" Node=\"Node3\" />\n        <row Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n  </Monitoring>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/HealthMonitoring/Node_goes_down_and_its_jobs_get_reassigned.xml",
    "content": "<Spec id=\"b2a0a037-3031-4407-a354-6791b1cc7aa8\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"Node goes down and its jobs get reassigned\" lastUpdated=\"Tuesday, June 21, 2016\" expirationPeriod=\"0\">\n  <Monitoring id=\"a4035e95-b523-437f-980c-44125176ff8a\">\n    <Context>\n      <MonitoringSetup id=\"9b9d3724-5270-4768-a944-3a67701dd9bb\">\n        <TheNodesAre>\n          <table id=\"80f5cc43-8a0d-4093-82b9-1d53412a855c\">\n            <row id=\"Node1\" incoming=\"lq.tcp://localhost:1000/control\" />\n            <row id=\"Node2\" incoming=\"lq.tcp://localhost:2000/control\" />\n            <row id=\"Node3\" incoming=\"lq.tcp://localhost:3000/control\" />\n            <row id=\"Node4\" incoming=\"lq.tcp://localhost:4000/control\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled />\n        <TheTasksAre>\n          <table id=\"7606093d-4d11-46a8-bc11-95b46f0a05e1\">\n            <row task=\"foo://1\" node=\"Node4\" nodes=\"Node1, Node2, Node3, Node4\" />\n            <row task=\"foo://2\" node=\"Node4\" nodes=\"Node2, Node1, Node3, Node4\" />\n            <row task=\"foo://3\" node=\"NONE\" nodes=\"Node3, Node1, Node2, Node4\" />\n            <row task=\"foo://4\" node=\"NONE\" nodes=\"Node4, Node1, Node2, Node3\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <Comment id=\"7b2a50b2-b9da-4b7c-90e0-b5fc47a1359e\">The initial state should look like this</Comment>\n    <TheTaskAssignmentsShouldBe>\n      <rows id=\"40d8f1b1-d9e8-486d-ad78-704064db7206\">\n        <row Task=\"foo://1\" Node=\"Node4\" />\n        <row Task=\"foo://2\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <Comment id=\"bbc900dc-e778-4722-bcb0-c4b7ebb159e2\">Now, Node4 drops offline and its owned tasks should be reassigned</Comment>\n    <NodeDropsOffline Node=\"Node4\" />\n    <AfterTheHealthChecksRunOnNode node=\"Node1\" />\n    <ThePersistedAssignmentsShouldBe>\n      <rows id=\"04333873-b9da-41ec-a976-654b1c9ab202\">\n        <row Task=\"foo://1\" Node=\"Node1\" />\n        <row Task=\"foo://2\" Node=\"Node2\" />\n        <row Task=\"foo://3\" Node=\"Node3\" />\n        <row Task=\"foo://4\" Node=\"Node1\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n    <TheTaskAssignmentsShouldBe>\n      <rows id=\"043a24c3-ccb4-40e3-a6ab-4cd8f4f9ec2a\">\n        <row Task=\"foo://1\" Node=\"Node1\" />\n        <row Task=\"foo://2\" Node=\"Node2\" />\n        <row Task=\"foo://3\" Node=\"Node3\" />\n        <row Task=\"foo://4\" Node=\"Node1\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n  </Monitoring>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/HealthMonitoring/Reassign_a_job_running_on_multiple_nodes.xml",
    "content": "<Spec id=\"d901cebd-eee2-4a85-a7b4-8de978369425\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"Reassign a job running on multiple nodes\" lastUpdated=\"Tuesday, September 22, 2015\" expirationPeriod=\"0\">\n  <Monitoring id=\"dc15c3fc-72cd-47d7-873f-954f7758308e\">\n    <Context>\n      <MonitoringSetup id=\"3f85eb70-87cb-4d4a-a1ae-01005d80e79d\">\n        <TheNodesAre>\n          <table id=\"452ba8cf-ec49-4709-a304-904dfdf9184b\">\n            <TheNodesAre-row id=\"Node1\" incoming=\"lq.tcp://localhost:1000/control\" />\n            <TheNodesAre-row id=\"Node2\" incoming=\"lq.tcp://localhost:2000/control\" />\n            <TheNodesAre-row id=\"Node3\" incoming=\"lq.tcp://localhost:3000/control\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled />\n        <TheTasksAre>\n          <table id=\"d109107e-3c87-4fd5-8059-ce4a5b36d517\">\n            <TheTasksAre-row task=\"foo://1\" node=\"NONE\" nodes=\"Node1\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <TaskStateIs>\n      <table id=\"50e88e55-a737-4a86-83bd-dc0ec91ebc22\">\n        <TaskStateIs-row Task=\"foo://1\" Node=\"Node2\" State=\"Healthy and Functional\" />\n        <TaskStateIs-row Task=\"foo://1\" Node=\"Node3\" State=\"Healthy and Functional\" />\n      </table>\n    </TaskStateIs>\n    <AfterTheHealthChecksRunOnAllNodes />\n    <TheTaskAssignmentsShouldBe>\n      <rows id=\"4656774c-2528-4937-84a6-2cd37142ffc8\">\n        <TheTaskAssignmentsShouldBe-row Task=\"foo://1\" Node=\"Node1\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <ThePersistedAssignmentsShouldBe>\n      <rows id=\"c612c984-939a-4ff3-a735-9ec491f814dd\">\n        <ThePersistedAssignmentsShouldBe-row Task=\"foo://1\" Node=\"Node1\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n  </Monitoring>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/HealthMonitoring/Reassign_a_single_dormant_task.xml",
    "content": "<Spec id=\"32abf9bd-1976-4200-b8aa-1438b99012a2\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"Reassign a single dormant task\" lastUpdated=\"Tuesday, September 22, 2015\" expirationPeriod=\"0\">\n  <Monitoring id=\"26be7ecc-0f57-4004-aa80-bc48a37f8cd5\">\n    <Context>\n      <MonitoringSetup id=\"95524fd4-3e20-4425-9482-defa33cb413b\">\n        <TheNodesAre>\n          <table id=\"f31799ce-12ee-4360-bb80-dfb1bb11a072\">\n            <TheNodesAre-row id=\"Node1\" incoming=\"lq.tcp://localhost:1000/control\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled />\n        <TheTasksAre>\n          <table id=\"fbaf48da-bdc3-4999-8393-5ca5f733dce9\">\n            <TheTasksAre-row task=\"foo://1\" node=\"NONE\" nodes=\"Node1\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <AfterTheHealthChecksRunOnAllNodes />\n    <TheTaskAssignmentsShouldBe>\n      <rows id=\"1e5c4b49-6c72-41c5-94bd-00771fd2e891\">\n        <TheTaskAssignmentsShouldBe-row Task=\"foo://1\" Node=\"Node1\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <ThePersistedAssignmentsShouldBe>\n      <rows id=\"6a231b3b-cd6e-4d59-b842-c98b32326d24\">\n        <ThePersistedAssignmentsShouldBe-row Task=\"foo://1\" Node=\"Node1\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n  </Monitoring>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/HealthMonitoring/Simple_assignment_of_dormant_tasks.xml",
    "content": "<Spec id=\"75c2bddd-bcba-4e35-ac98-cf60e86a90ea\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"Simple assignment of dormant tasks\" lastUpdated=\"Tuesday, June 21, 2016\" expirationPeriod=\"0\">\n  <Monitoring id=\"2c035722-8bd8-462c-843b-059e643059eb\">\n    <Context>\n      <MonitoringSetup id=\"0f0b37d9-84a3-4680-92f7-e427bf1eea04\">\n        <TheNodesAre>\n          <table id=\"3d33e097-9510-49c9-b77b-a1be5d2bf608\">\n            <row id=\"Node1\" incoming=\"lq.tcp://localhost:1000/control\" />\n            <row id=\"Node2\" incoming=\"lq.tcp://localhost:2000/control\" />\n            <row id=\"Node3\" incoming=\"lq.tcp://localhost:3000/control\" />\n            <row id=\"Node4\" incoming=\"lq.tcp://localhost:4000/control\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled />\n        <TheTasksAre>\n          <table id=\"c33e3733-3506-45d1-8c58-fc769941c106\">\n            <row task=\"foo://1\" node=\"NONE\" nodes=\"Node1, Node2, Node3, Node4\" />\n            <row task=\"foo://2\" node=\"NONE\" nodes=\"Node2, Node1, Node3, Node4\" />\n            <row task=\"foo://3\" node=\"NONE\" nodes=\"Node3, Node1, Node2, Node4\" />\n            <row task=\"foo://4\" node=\"NONE\" nodes=\"Node4, Node1, Node2, Node3\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <AfterTheHealthChecksRunOnNode node=\"Node1\" />\n    <ThePersistedNodesShouldBe>\n      <rows id=\"4ebd35c3-00f4-40a3-8bf2-bfe07db33aac\">\n        <row Id=\"Node1\" ControlChannel=\"lq.tcp://localhost:1000/control\" />\n        <row Id=\"Node2\" ControlChannel=\"lq.tcp://localhost:2000/control\" />\n        <row Id=\"Node3\" ControlChannel=\"lq.tcp://localhost:3000/control\" />\n        <row Id=\"Node4\" ControlChannel=\"lq.tcp://localhost:4000/control\" />\n      </rows>\n    </ThePersistedNodesShouldBe>\n    <TheTaskAssignmentsShouldBe>\n      <rows id=\"8079e4b1-ac2e-4a00-bb79-4cb86496a095\">\n        <row Task=\"foo://1\" Node=\"Node1\" />\n        <row Task=\"foo://2\" Node=\"Node2\" />\n        <row Task=\"foo://3\" Node=\"Node3\" />\n        <row Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <ThePersistedAssignmentsShouldBe>\n      <rows id=\"2a5bdc01-f195-4757-bbdb-e82d14a48bf3\">\n        <row Task=\"foo://1\" Node=\"Node1\" />\n        <row Task=\"foo://2\" Node=\"Node2\" />\n        <row Task=\"foo://3\" Node=\"Node3\" />\n        <row Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n  </Monitoring>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/Subscriptions/2nd_publisher_with_global_subscriptions_is_brought_online.xml",
    "content": "<Spec id=\"2349b85e-1ff3-492a-891f-4ec93a19cc9b\" maxRetries=\"0\" tags=\"\" lifecycle=\"Acceptance\" name=\"2nd publisher with global subscriptions is brought online\" lastUpdated=\"Friday, September 11, 2015\" expirationPeriod=\"0\">\n  <Subscriptions id=\"47bff81e-ed23-45d8-9581-26f17e27acf5\">\n    <LoadNode Key=\"Publisher\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher1\" />\n    <LoadNode Key=\"Subscriber\" Registry=\"HasGlobalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber1\" />\n    <LoadNode Key=\"PublisherTwo\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher2\" />\n    <ForNode Key=\"PublisherTwo\" />\n    <TheActiveSubscriptionsAre>\n      <rows id=\"c98a2ef9-a908-4e4c-b226-d36ede7ce419\">\n        <TheActiveSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n    <ThePersistedSubscriptionsAre>\n      <rows id=\"51d6d0b6-3651-4b93-96b7-65b21f8f8c0f\">\n        <ThePersistedSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </ThePersistedSubscriptionsAre>\n    <ThePersistedTransportNodesAre>\n      <rows id=\"303a13ea-2fb5-4c81-9d7c-2d48ddbd0292\">\n        <ThePersistedTransportNodesAre-row NodeName=\"Publishing\" Address=\"memory://publisher1/\" />\n        <ThePersistedTransportNodesAre-row NodeName=\"Publishing\" Address=\"memory://publisher2/\" />\n      </rows>\n    </ThePersistedTransportNodesAre>\n  </Subscriptions>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/Subscriptions/Multiple_nodes_of_global_subscriptions_does_not_duplicate_entries.xml",
    "content": "<Spec id=\"98632634-0751-4ee5-965e-62fbf3d3ed99\" maxRetries=\"0\" tags=\"\" lifecycle=\"Acceptance\" name=\"Multiple nodes of global subscriptions does not duplicate entries\" lastUpdated=\"Friday, September 11, 2015\" expirationPeriod=\"0\">\n  <Subscriptions id=\"80b89102-9f37-461b-8802-51bf732d427a\">\n    <LoadNode Key=\"Publisher\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher1\" />\n    <LoadNode Key=\"Subscriber\" Registry=\"HasGlobalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber1\" />\n    <LoadNode Key=\"Subscriber\" Registry=\"HasGlobalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber2\" />\n    <LoadNode Key=\"Subscriber\" Registry=\"HasGlobalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber3\" />\n    <ForNode Key=\"Publisher\" />\n    <TheActiveSubscriptionsAre>\n      <rows id=\"10c63cf8-7a10-4443-9fb2-9a0facb606f6\">\n        <TheActiveSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n    <ThePersistedSubscriptionsAre>\n      <rows id=\"2bef7205-5dcb-4aec-8d80-88a8b0d5a342\">\n        <ThePersistedSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </ThePersistedSubscriptionsAre>\n    <ThePersistedTransportNodesAre>\n      <rows id=\"1c72c7f2-609e-46bc-8eb4-6a6363d6416a\">\n        <ThePersistedTransportNodesAre-row NodeName=\"Publishing\" Address=\"memory://publisher1/\" />\n      </rows>\n    </ThePersistedTransportNodesAre>\n    <ForNode Key=\"Subscriber\" />\n    <ThePersistedTransportNodesAre>\n      <rows id=\"452998f5-a5c6-4433-a161-d94b757eb5ad\">\n        <ThePersistedTransportNodesAre-row NodeName=\"GlobalSubscriber\" Address=\"memory://subscriber1/\" />\n        <ThePersistedTransportNodesAre-row NodeName=\"GlobalSubscriber\" Address=\"memory://subscriber2/\" />\n        <ThePersistedTransportNodesAre-row NodeName=\"GlobalSubscriber\" Address=\"memory://subscriber3/\" />\n      </rows>\n    </ThePersistedTransportNodesAre>\n  </Subscriptions>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/Subscriptions/Multiple_publishers_all_get_new_subscriptions.xml",
    "content": "<Spec id=\"ee67cd60-cdec-4d31-8db1-26938175fe49\" maxRetries=\"0\" tags=\"\" lifecycle=\"Acceptance\" name=\"Multiple publishers all get new subscriptions\" lastUpdated=\"Friday, September 11, 2015\" expirationPeriod=\"0\">\n  <Subscriptions id=\"cb0dc688-3408-41d4-ba77-7140e5570061\">\n    <LoadNode Key=\"Publisher\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher1\" />\n    <LoadNode Key=\"PublisherTwo\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher2\" />\n    <LoadNode Key=\"PublisherThree\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher3\" />\n    <LoadNode Key=\"Subscriber\" Registry=\"HasGlobalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber1\" />\n    <ForNode Key=\"Publisher\" />\n    <TheActiveSubscriptionsAre>\n      <rows id=\"a1fc2ea7-38e3-4419-85b8-b99261918745\">\n        <TheActiveSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n    <ForNode Key=\"PublisherTwo\" />\n    <TheActiveSubscriptionsAre>\n      <rows id=\"8780079d-33c4-4c0d-a8b2-704960d46b38\">\n        <TheActiveSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n    <ForNode Key=\"PublisherThree\" />\n    <TheActiveSubscriptionsAre>\n      <rows id=\"777007e5-c9ef-4103-bee4-e3a029eebf9b\">\n        <TheActiveSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n  </Subscriptions>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/Subscriptions/Remove_local_subscriptions.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Remove local subscriptions\" lifecycle=\"Regression\" retryAttemptNumber=\"0\">\n  <Subscriptions>\n    <LoadNode isStep=\"True\" Key=\"Publisher\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher1\" />\n    <LoadNode isStep=\"True\" Key=\"Subscriber\" Registry=\"HasLocalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber1\" />\n    <LoadNode isStep=\"True\" Key=\"SubscriberTwo\" Registry=\"HasLocalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber2\" />\n    <NodeRemovesLocalSubscritpions isStep=\"True\" Key=\"Subscriber\" />\n    <ForNode isStep=\"True\" Key=\"Publisher\" />\n    <TheActiveSubscriptionsAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n    <ThePersistedSubscriptionsAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n      </rows>\n    </ThePersistedSubscriptionsAre>\n    <ForNode isStep=\"True\" Key=\"Subscriber\" />\n    <Comment><![CDATA[The other \"LocalSubscriber\" node will still have its subscriptions.]]></Comment>\n    <TheLocalSubscriptionsAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"LocalSubscriber\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n        <row isStep=\"True\" NodeName=\"LocalSubscriber\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n      </rows>\n    </TheLocalSubscriptionsAre>\n  </Subscriptions>\n</Test>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/Subscriptions/Simple_global_subscriptions_from_one_node_to_another.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Simple global subscriptions from one node to another\" lifecycle=\"Regression\">\n  <Subscriptions>\n    <LoadNode isStep=\"True\" Key=\"Publisher\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher1\" />\n    <LoadNode isStep=\"True\" Key=\"Subscriber\" Registry=\"HasGlobalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber1\" />\n    <ForNode isStep=\"True\" Key=\"Publisher\" />\n    <TheActiveSubscriptionsAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n    <ThePersistedSubscriptionsAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </ThePersistedSubscriptionsAre>\n    <ThePersistedTransportNodesAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"Publishing\" Address=\"memory://publisher1/\" />\n      </rows>\n    </ThePersistedTransportNodesAre>\n    <ForNode isStep=\"True\" Key=\"Subscriber\" />\n    <ThePersistedTransportNodesAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"GlobalSubscriber\" Address=\"memory://subscriber1/\" />\n      </rows>\n    </ThePersistedTransportNodesAre>\n  </Subscriptions>\n</Test>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Specs/ServiceBus/Subscriptions/Simple_local_subscription.xml",
    "content": "<Spec id=\"23cb7ab9-8cf7-495f-948d-74d6f25ea26b\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"Simple local subscription\" lastUpdated=\"Friday, September 11, 2015\" expirationPeriod=\"0\">\n  <Subscriptions id=\"e106d4ee-cd91-46f9-9825-f71db932a72d\">\n    <LoadNode Key=\"Publisher\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher1\" />\n    <LoadNode Key=\"Subscriber\" Registry=\"HasLocalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber1\" />\n    <ForNode Key=\"Publisher\" />\n    <TheActiveSubscriptionsAre>\n      <rows id=\"3f92c373-df1e-4c21-ada6-e10589016794\">\n        <TheActiveSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber1\" />\n        <TheActiveSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber1\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n    <ThePersistedSubscriptionsAre>\n      <rows id=\"e6b2075d-4de3-453e-953a-79a8e5f22cb6\">\n        <ThePersistedSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber1\" />\n        <ThePersistedSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber1\" />\n      </rows>\n    </ThePersistedSubscriptionsAre>\n    <LoadNode Key=\"SubscriberTwo\" Registry=\"HasLocalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber2\" />\n    <ForNode Key=\"Publisher\" />\n    <TheActiveSubscriptionsAre>\n      <rows id=\"88e0a855-dda2-4e63-80f3-cc5075a7324c\">\n        <TheActiveSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber1\" />\n        <TheActiveSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber1\" />\n        <TheActiveSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n        <TheActiveSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n    <ThePersistedSubscriptionsAre>\n      <rows id=\"86dc595c-ed0e-4879-af2b-e78f26b4527a\">\n        <ThePersistedSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber1\" />\n        <ThePersistedSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber1\" />\n        <ThePersistedSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n        <ThePersistedSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuMVC.IntegrationTesting.Fixtures.ServiceBus.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n      </rows>\n    </ThePersistedSubscriptionsAre>\n  </Subscriptions>\n</Spec>"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/StaticFiles/reading_static_file_content_with_katana.cs",
    "content": "﻿using System.Net;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.IntegrationTesting.StaticFiles\r\n{\r\n    [TestFixture]\r\n    public class reading_static_file_content_with_katana\r\n    {\r\n        private readonly IFubuFile file = FubuFile.Load(\"Sample.js\");\r\n\r\n        [Test]\r\n        public void read_file_with_hit_on_etag()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"Sample.js\").Etag(file.Etag());\r\n                _.StatusCodeShouldBe(HttpStatusCode.NotModified);\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void can_return_the_HEAD_for_a_file()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Head.Url(\"Sample.js\");\r\n\r\n                _.Header(HttpResponseHeaders.ETag).SingleValueShouldEqual(\"\\\"\" + file.Etag() + \"\\\"\");\r\n\r\n                _.Response.LastModified().ShouldBe(file.LastModified());\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void can_return_the_text_of_a_txt_file()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"Sample.js\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentShouldContain(\"This is some sample data in a static file\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void can_return_the_text_of_a_txt_file_on_etag_miss()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"Sample.js\").Etag(file.Etag() + \"!!!\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentShouldContain(\"This is some sample data in a static file\");\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void get_304_on_if_modified_since_pass()\r\n        {\r\n            var lastModified = file.LastModified().ToUniversalTime().AddMinutes(10);\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"Sample.js\");\r\n                _.Request.AppendHeader(HttpRequestHeaders.IfModifiedSince, lastModified.ToString(\"R\"));\r\n\r\n                _.StatusCodeShouldBe(HttpStatusCode.NotModified);\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void get_the_file_on_if_modified_since_and_has_been_modified()\r\n        {\r\n            var ifModifiedSince = file.LastModified().ToUniversalTime().AddMinutes(-20);\r\n\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"Sample.js\");\r\n                _.Request.AppendHeader(HttpRequestHeaders.IfModifiedSince, ifModifiedSince.ToString(\"R\"));\r\n\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentShouldContain(\"This is some sample data in a static file\");\r\n            });\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Test.txt",
    "content": "﻿Some text here"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/TestHost.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Threading;\nusing FubuCore;\nusing FubuCore.Binding;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Diagnostics;\nusing FubuMVC.Core.Http.Owin;\nusing FubuMVC.Core.Http.Scenarios;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.IntegrationTesting.Conneg;\nusing Newtonsoft.Json;\nusing StoryTeller.Remotes.Messaging;\nusing TraceLevel = FubuMVC.Core.TraceLevel;\n\nnamespace FubuMVC.IntegrationTesting\n{\n    public static class TestHost\n    {\n        public static void tryit()\n        {\n            Runtime.Behaviors.Chains.Each(chain =>\n            {\n                var descriptions = chain.Select(x => Description.For(x).ToDictionary()).ToArray();\n\n                var json = JsonSerialization.ToIndentedJson(descriptions);\n                Debug.WriteLine(json);\n            });\n        }\n\n        private static readonly Lazy<FubuRuntime> _host =\n            new Lazy<FubuRuntime>(() =>\n            {\n\n\n                var registry = new FubuRegistry();\n\n                registry.Features.Diagnostics.Enable(TraceLevel.Verbose);\n\n                registry.Services.AddService<IPropertyBinder, TheAnswerBinder>();\n\n                var runtime = registry.ToRuntime();\n\n                AppDomain.CurrentDomain.DomainUnload += (s, e) => runtime.Dispose();\n\n\n\n                return runtime;\n            });\n\n        public static FubuRuntime Runtime\n        {\n            get { return _host.Value; }\n        }\n\n        public static ManualResetEvent Finish = new ManualResetEvent(false);\n\n        public static T Service<T>()\n        {\n            return _host.Value.Get<T>();\n        }\n\n        public static OwinHttpResponse Scenario(Action<Scenario> configuration)\n        {\n            return _host.Value.Scenario(configuration);\n        }\n\n        public static OwinHttpResponse GetByInput(object input)\n        {\n            OwinHttpResponse response = null;\n\n            Scenario(x =>\n            {\n                x.Get.Input(input);\n\n                response = x.Response;\n            });\n\n            return response;\n        }\n\n        public static OwinHttpResponse GetByAction<T>(Expression<Action<T>> expression)\n        {\n            OwinHttpResponse response = null;\n\n            Scenario(x =>\n            {\n                x.Get.Action(expression);\n\n                response = x.Response;\n            });\n\n            return response;\n        }\n\n        public static BehaviorGraph BehaviorGraph\n        {\n            get { return _host.Value.Behaviors; }\n        }\n\n        public static void Scenario<T>(Action<Scenario> configuration) where T : FubuRegistry, new()\n        {\n            using (var host = FubuRuntime.For<T>())\n            {\n                host.Scenario(configuration);\n            }\n        }\n\n        public static void Shutdown()\n        {\n            if (_host.IsValueCreated)\n            {\n                _host.Value.SafeDispose();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/TestSystem.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Http.Hosting;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Endpoints;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing NUnit.Framework;\nusing Serenity;\nusing ServiceNode;\nusing StoryTeller;\nusing StructureMap;\n\nnamespace FubuMVC.IntegrationTesting\n{\n    public class WebsiteRegistry : FubuTransportRegistry<TestBusSettings>\n    {\n        public WebsiteRegistry()\n        {\n            Channel(x => x.Website).ReadIncoming();\n            Channel(x => x.Service).AcceptsMessagesInAssemblyContainingType<ServiceRegistry>();\n\n            ServiceBus.HealthMonitoring.ScheduledExecution(ScheduledExecution.Disabled);\n\n\n            Features.Authentication.Configure(_ =>\n            {\n                _.ExcludeDiagnostics = true;\n                _.Enabled = true;\n            });\n\n            HostWith<Katana>(5555);\n\n            Configure(\n                graph =>\n                {\n                    graph.ChainFor<LoginController>(x => x.get_login(null)).Output.Add(new DefaultLoginRequestWriter());\n                });\n        }\n    }\n\n    public class MessageRecorder\n    {\n        public IList<string> Messages = new List<string>();\n    }\n\n    public class StorytellerRunner\n    {\n        [Test]\n        public void run_a_single_test()\n        {\n            using (var runner = new SpecRunner<TestSystem>())\n            {\n                runner.Run(\"ServiceBus/Basics/Publishing a message that has multiple subscribers\");\n\n                //runner.Run(\"ServiceBus/HealthMonitoring/A running task goes down and gets reassigned\");\n                //runner.Run(\"ServiceBus/HealthMonitoring/Assign on order of preference when some nodes are down\");\n                //runner.Run(\"ServiceBus/HealthMonitoring/Assign on order or preference when some nodes timeout on activation\");\n                //runner.Run(\"ServiceBus/HealthMonitoring/A running task times out on health checks and gets reassigned\");\n                runner.OpenResultsInBrowser();\n            }\n        }\n    }\n\n    public class TestSystem : SerenitySystem<WebsiteRegistry>\n    {\n        public TestSystem()\n        {\n            AddRemoteSubSystem(\"ServiceNode\", x =>\n            {\n                var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;\n                var profile = baseDirectory.Split(Path.PathSeparator).Last();\n\n                x.ServiceDirectory = baseDirectory.ParentDirectory().ParentDirectory().ParentDirectory()\n                    .AppendPath(\"ServiceNode\", \"bin\", profile);\n\n                x.UseParallelServiceDirectory(\"ServiceNode\");\n                x.Setup.ShadowCopyFiles = false.ToString();\n            });\n        }\n\n        public static void TryIt()\n        {\n            using (var runner = new SpecRunner<TestSystem>())\n            {\n                runner.Run(\"ServiceBus/Basics/Publishing a message that has multiple subscribers\");\n\n                //runner.Run(\"ServiceBus/HealthMonitoring/A running task goes down and gets reassigned\");\n                //runner.Run(\"ServiceBus/HealthMonitoring/Assign on order of preference when some nodes are down\");\n                //runner.Run(\"ServiceBus/HealthMonitoring/Assign on order or preference when some nodes timeout on activation\");\n                //runner.Run(\"ServiceBus/HealthMonitoring/A running task times out on health checks and gets reassigned\");\n                runner.OpenResultsInBrowser();\n            }\n        }\n\n        protected override void beforeEach(IContainer scope)\n        {\n            Retry.Twice(() => TextFileWriter.Clear());\n\n            Runtime.Get<MessageRecorder>().Messages.Clear();\n\n            var browser = scope.GetInstance<IBrowserLifecycle>();\n            if (browser.HasBeenStarted())\n            {\n                scope.GetInstance<NavigationDriver>().NavigateTo<LogoutRequest>();\n            }\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/UI/ElementConventionsFubuPageExtensions_FullStackTester_DefaultConventions.cs",
    "content": "﻿using System;\nusing System.Net;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.UI;\nusing FubuMVC.Core.View;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.IntegrationTesting.UI\n{\n    [TestFixture]\n    public class ElementConventionsFubuPageExtensions_FullStackTester_DefaultConventions : FubuPageExtensionContext\n    {\n        [Test]\n        public void input_for_default_conventions()\n        {\n            execute(page => {\n                page.Model.Name = \"Jeremy\";\n                return page.InputFor(x => x.Name);\n            });\n\n            theResult.ShouldBe(\"<input type=\\\"text\\\" value=\\\"Jeremy\\\" name=\\\"Name\\\" />\");\n        }\n\n        [Test]\n        public void input_for_a_completely_different_model()\n        {\n            execute(page => {\n                var model = new DifferentThing {Order = 123};\n\n                page.Get<IFubuRequest>().Set(model);\n\n                return page.InputFor<DifferentThing>(x => x.Order);\n            });\n\n            theResult.ShouldBe(\"<input type=\\\"text\\\" value=\\\"123\\\" name=\\\"Order\\\" />\");\n        }\n\n        [Test]\n        public void input_for_a_different_model()\n        {\n            execute(page => {\n                var model = new ConventionTarget {Name = \"Max\"};\n\n                return page.InputFor(model, x => x.Name);\n            });\n\n            theResult.ShouldBe(\"<input type=\\\"text\\\" value=\\\"Max\\\" name=\\\"Name\\\" />\");\n        }\n\n\n        [Test]\n        public void label_for_expression()\n        {\n            execute(page => page.LabelFor(x => x.Name));\n            theResult.ShouldBe(\"<label for=\\\"Name\\\">en-US_Name</label>\");\n\n            execute(page => page.LabelFor(x => x.MaximumLengthProp));\n            theResult.ShouldBe(\"<label for=\\\"MaximumLengthProp\\\">en-US_MaximumLengthProp</label>\");\n        }\n\n        [Test]\n        public void label_for_a_different_thing()\n        {\n            execute(page => page.LabelFor<DifferentThing>(x => x.Order));\n\n            theResult.ShouldBe(\"<label for=\\\"Order\\\">en-US_Order</label>\");\n        }\n\n\n        [Test]\n        public void display_for_default_conventions()\n        {\n            execute(page =>\n            {\n                page.Model.Name = \"Jeremy\";\n                return page.DisplayFor(x => x.Name);\n            });\n\n            theResult.ShouldBe(\"<span id=\\\"Name\\\">Jeremy</span>\");\n        }\n\n        [Test]\n        public void display_for_a_completely_different_model()\n        {\n            execute(page =>\n            {\n                var model = new DifferentThing { Order = 123 };\n\n                page.Get<IFubuRequest>().Set(model);\n\n                return page.DisplayFor<DifferentThing>(x => x.Order);\n            });\n\n            theResult.ShouldBe(\"<span id=\\\"Order\\\">123</span>\");\n        }\n\n        [Test]\n        public void display_for_a_different_model()\n        {\n            execute(page =>\n            {\n                var model = new ConventionTarget { Name = \"Max\" };\n\n                return page.DisplayFor(model, x => x.Name);\n            });\n\n            theResult.ShouldBe(\"<span id=\\\"Name\\\">Max</span>\");\n        }\n    }\n\n    public class DifferentThing\n    {\n        public int Order { get; set; }\n    }\n\n    [TestFixture]\n    public class FubuPageExtensionContext\n    {\n        [TestFixtureSetUp]\n        public void StartServer()\n        {\n\n            _server = FubuRuntime.Basic();\n        }\n\n        [TestFixtureTearDown]\n        public void StopServer()\n        {\n            _server.Dispose();\n        }\n\n        [SetUp]\n        public void SetUp()\n        {\n            theResult = string.Empty;\n        }\n\n\n        protected string theResult;\n        private FubuRuntime\n            _server;\n\n        public string BaseAddress\n        {\n            get { return _server.BaseAddress; }\n        }\n\n\n        protected void execute(Func<IFubuPage<ConventionTarget>, object> func)\n        {\n            ConventionEndpoint.Source = func;\n\n            var response = _server.Scenario(_ =>\n            {\n                _.Get.Action<ConventionEndpoint> (x => x.get_result());\n            });\n\n            theResult = response.Body.ReadAsText();\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/UI/ElementConventions_for_Partials_in_Loop_Tester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Net;\nusing System.Text;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.UI;\nusing FubuMVC.Core.View;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.IntegrationTesting.UI\n{\n    [TestFixture]\n    public class ElementConventions_for_Partials_in_Loop_Tester : FubuPageExtensionMultiplePartialContext\n    {\n        [Test]\n        public void DisplayFor_in_partials_in_a_for_each_loop()\n        {\n            execute(page => page.DisplayFor(x => x.Name));\n            theResult.ShouldBe(\n                \"<span id=\\\"Name\\\">Item1</span><span id=\\\"Name\\\">Item2</span><span id=\\\"Name\\\">Item3</span>\");\n        }\n\n\n        [Test]\n        public void InputFor_in_partials_in_a_for_each_loop()\n        {\n            execute(page => page.InputFor(x => x.Name));\n            theResult.ShouldBe(\n                \"<input type=\\\"text\\\" value=\\\"Item1\\\" name=\\\"Name\\\" /><input type=\\\"text\\\" value=\\\"Item2\\\" name=\\\"Name\\\" /><input type=\\\"text\\\" value=\\\"Item3\\\" name=\\\"Name\\\" />\");\n        }\n    }\n\n    [TestFixture]\n    public class FubuPageExtensionMultiplePartialContext\n    {\n        [TestFixtureSetUp]\n        public void StartServer()\n        {\n            _server = FubuRuntime.Basic();\n        }\n\n        [TestFixtureTearDown]\n        public void StopServer()\n        {\n            _server.Dispose();\n        }\n\n        [SetUp]\n        public void SetUp()\n        {\n            theResult = string.Empty;\n        }\n\n\n        protected string theResult;\n        private FubuRuntime _server;\n\n        public string BaseAddress\n        {\n            get { return _server.BaseAddress; }\n        }\n\n\n        protected void execute(Func<IFubuPage<PartialViewModel>, object> sourceModifier)\n        {\n            PartialConventionEndpoint.SourceModifier = sourceModifier;\n\n            var response = _server.Scenario(_ =>\n            {\n                _.Get.Action<PartialConventionEndpoint>(x => x.get_multiplepartialresult());\n            });\n\n            theResult = response.Body.ReadAsText().Replace(\"\\n\", \"\").Replace(\"\\r\", \"\");\n        }\n\n        public class PartialConventionEndpoint\n        {\n            private readonly IPartialInvoker _invoker;\n            private readonly IServiceLocator _locator;\n            private readonly IFubuRequest _request;\n\n            public static Func<IFubuPage<PartialViewModel>, object> SourceModifier = page => \"nothing\";\n\n            public PartialConventionEndpoint(IPartialInvoker invoker, IServiceLocator locator, IFubuRequest request)\n            {\n                _invoker = invoker;\n                _locator = locator;\n                _request = request;\n            }\n\n            public Task<string> get_multiplepartialresult()\n            {\n                return _invoker.Invoke<PartialInput>();\n            }\n\n            public string get_partial(PartialInput input)\n            {\n                var builder = new StringBuilder();\n                var partialModels = new[]\n                {\n                    new PartialViewModel {Name = \"Item1\"},\n                    new PartialViewModel {Name = \"Item2\"},\n                    new PartialViewModel {Name = \"Item3\"}\n                };\n\n                partialModels.Each(m =>\n                {\n                    _request.Set(m);\n                    var page = new Core.UI.FubuHtmlDocument<PartialViewModel>(_locator, _request);\n                    builder.AppendLine(SourceModifier(page).ToString());\n                    //builder.AppendLine();\n                });\n\n                return builder.ToString();\n            }\n        }\n\n        public class PartialInput\n        {\n        }\n\n        public class PartialViewModel\n        {\n            public string Name { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/UI/Explicit_accessor_overrides_integration_tester.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.UI;\nusing FubuMVC.Core.UI.Elements;\nusing HtmlTags;\nusing HtmlTags.Conventions;\nusing NUnit.Framework;\n\nnamespace FubuMVC.IntegrationTesting.UI\n{\n    [TestFixture]\n    public class Explicit_accessor_overrides_integration_tester\n    {\n        public class TestRegistry : FubuRegistry\n        {\n            public TestRegistry()\n            {\n                Actions.IncludeType<OverrideEndpoint>();\n\n                // The profile has to exist before accessors can work\n                Import<HtmlConventionRegistry>(\n                    x => { x.Profile(\"Green\", profile => { profile.Displays.Always.BuildBy<ComplexBuilder>(); }); });\n            }\n        }\n\n\n        [Test]\n        public void override_the_display_for_the_default()\n        {\n            TestHost.Scenario<TestRegistry>(_ =>\n            {\n                _.Get.Input(new OverrideRequest {Category = ElementConstants.Display});\n\n                _.ContentShouldBe(new BlueBuilder().Build(null).ToString());\n            });\n        }\n\n        [Test]\n        public void override_the_display_for_the_label()\n        {\n            TestHost.Scenario<TestRegistry>(_ =>\n            {\n                _.Get.Input(new OverrideRequest {Category = ElementConstants.Label});\n\n                _.ContentShouldBe(new SimpleBuilder().Build(null).ToString());\n            });\n        }\n\n        [Test]\n        public void override_the_display_for_the_input()\n        {\n            TestHost.Scenario<TestRegistry>(_ =>\n            {\n                _.Get.Input(new OverrideRequest {Category = ElementConstants.Editor});\n\n                _.ContentShouldBe(new ComplexBuilder().Build(null).ToString());\n            });\n        }\n\n        [Test]\n        public void override_display_by_profile()\n        {\n            TestHost.Scenario<TestRegistry>(_ =>\n            {\n                _.Get.Input(new OverrideRequest {Category = ElementConstants.Display, Profile = \"Green\"});\n\n                _.ContentShouldBe(new GreenBuilder().Build(null).ToString());\n            });\n        }\n    }\n\n    public class TestAccessorOverrides : OverridesFor<OverrideTarget>\n    {\n        public TestAccessorOverrides()\n        {\n            Property(x => x.Name)\n                .DisplayBuilder<BlueBuilder>()\n                .LabelBuilder<SimpleBuilder>()\n                .InputBuilder<ComplexBuilder>()\n                .DisplayBuilder<GreenBuilder>(\"Green\");\n        }\n    }\n\n    public class OverrideEndpoint\n    {\n        private readonly IElementGenerator<OverrideTarget> _generator;\n\n        public OverrideEndpoint(IElementGenerator<OverrideTarget> generator)\n        {\n            _generator = generator;\n        }\n\n        public HtmlTag get_target_Category_Profile(OverrideRequest request)\n        {\n            var elemRequest = ElementRequest.For<OverrideTarget>(x => x.Name);\n            if (request.Category == ElementConstants.Display)\n            {\n                return _generator.DisplayFor(elemRequest, request.Profile);\n            }\n\n            if (request.Category == ElementConstants.Label)\n            {\n                return _generator.LabelFor(elemRequest, request.Profile);\n            }\n\n            return _generator.InputFor(elemRequest, request.Profile);\n        }\n    }\n\n    public class OverrideRequest\n    {\n        public OverrideRequest()\n        {\n            Profile = TagConstants.Default;\n        }\n\n        public string Category { get; set; }\n        public string Profile { get; set; }\n    }\n\n\n    public class OverrideTarget\n    {\n        public string Name { get; set; }\n        public int Age { get; set; }\n    }\n\n    public class SimpleBuilder : IElementBuilder\n    {\n        public HtmlTag Build(ElementRequest request)\n        {\n            return new HtmlTag(\"div\").AddClass(\"simple\");\n        }\n    }\n\n    public class ComplexBuilder : IElementBuilder\n    {\n        public HtmlTag Build(ElementRequest request)\n        {\n            return new HtmlTag(\"div\").AddClass(\"complex\");\n        }\n    }\n\n    public class DifferentBuilder : IElementBuilder\n    {\n        public HtmlTag Build(ElementRequest request)\n        {\n            return new HtmlTag(\"div\").AddClass(\"different\");\n        }\n    }\n\n    public class GreenBuilder : IElementBuilder\n    {\n        public HtmlTag Build(ElementRequest request)\n        {\n            return new HtmlTag(\"div\").AddClass(\"green\");\n        }\n    }\n\n    public class BlueBuilder : IElementBuilder\n    {\n        public HtmlTag Build(ElementRequest request)\n        {\n            return new HtmlTag(\"div\").AddClass(\"blue\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/UI/FormRequestConventionsIntegrationTester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.UI;\nusing FubuMVC.Core.View;\nusing HtmlTags;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.IntegrationTesting.UI\n{\n    [TestFixture]\n    public class FormRequestConventionsIntegrationTester\n    {\n        private FubuRuntime _server;\n\n        [TestFixtureSetUp]\n        public void StartServer()\n        {\n            _server = FubuRuntime.Basic();\n        }\n\n        [TestFixtureTearDown]\n        public void StopServer()\n        {\n            _server.Dispose();\n        }\n\n        private void runPage()\n        {\n            _server.Scenario(_ =>\n            {\n                _.Get.Action<FormRequestEndpoint>(x => x.get_form_conventions());\n                _.StatusCodeShouldBeOk();\n            });\n        }\n\n        [Test]\n        public void by_model_input()\n        {\n            var input = new FormInput {Name = \"Scooby\"};\n            FormRequestEndpoint.Source = page => page.FormFor(input);\n\n            runPage();\n\n            FormRequestEndpoint.LastTag.ToString().ShouldBe(\"<form method=\\\"post\\\" action=\\\"/form/Scooby\\\">\");\n        }\n\n        [Test]\n        public void by_controller_method()\n        {\n            FormRequestEndpoint.Source = page => page.FormFor<FormRequestEndpoint>(x => x.post_update_target(null));\n\n            runPage();\n\n            FormRequestEndpoint.LastTag.ToString().ShouldBe(\"<form method=\\\"post\\\" action=\\\"/update/target\\\">\");\n        }\n\n        [Test]\n        public void by_model_type()\n        {\n            FormRequestEndpoint.Source = page => page.FormFor<PostedData>();\n\n            runPage();\n\n            FormRequestEndpoint.LastTag.ToString().ShouldBe(\"<form method=\\\"post\\\" action=\\\"/update/target\\\">\");\n        }\n    }\n\n\n    public class FormRequestEndpoint\n    {\n        private readonly Core.UI.FubuHtmlDocument<FormTagModel> _document;\n        public static Func<IFubuPage, HtmlTag> Source;\n\n        public FormRequestEndpoint(Core.UI.FubuHtmlDocument<FormTagModel> document)\n        {\n            _document = document;\n        }\n\n        public static HtmlTag Build(IFubuPage page)\n        {\n            LastTag = Source(page);\n            return LastTag;\n        }\n\n        public static HtmlTag LastTag { get; set; }\n\n        public HtmlDocument get_form_conventions()\n        {\n            LastTag = Source(_document);\n            _document.Add(LastTag);\n\n            return _document;\n        }\n\n        public AjaxContinuation post_update_target(PostedData data)\n        {\n            return AjaxContinuation.Successful();\n        }\n\n        public AjaxContinuation get_different(FormInput input)\n        {\n            return AjaxContinuation.Successful();\n        }\n\n        public AjaxContinuation post_form_Name(FormInput input)\n        {\n            return AjaxContinuation.Successful();\n        }\n    }\n\n    public class PostedData\n    {\n    }\n\n    public class FormTagModel\n    {\n    }\n\n    public class FormTagModelDocument : Core.UI.FubuHtmlDocument<FormTagModel>\n    {\n        public FormTagModelDocument(IServiceLocator services, IFubuRequest request) : base(services, request)\n        {\n            HtmlTag formTag = FormRequestEndpoint.Build(this);\n\n\n            Add(formTag);\n        }\n    }\n\n    public class FormInput\n    {\n        public string Name { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/UI/FubuPageExtensions_FullStack_Tester.cs",
    "content": "﻿using System;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Ajax;\r\nusing FubuMVC.Core.Security.Authorization;\r\nusing FubuMVC.Core.View;\r\nusing FubuMVC.Tests;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.IntegrationTesting.UI\r\n{\r\n    [TestFixture]\r\n    public class FubuPageExtension_with_default_conventions_tester \r\n    {\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theResult = string.Empty;\r\n        }\r\n\r\n\r\n        protected string theResult;\r\n\r\n        protected void execute(Func<IFubuPage<ConventionTarget>, object> func)\r\n        {\r\n            ConventionEndpoint.Source = func;\r\n\r\n            var response = TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Action<ConventionEndpoint>(x => x.get_result());\r\n                _.StatusCodeShouldBeOk();\r\n            });\r\n\r\n            theResult = response.Body.ReadAsText();\r\n        }\r\n\r\n        [Test]\r\n        public void authorized_link_to_positive_directly_against_endpoint_service()\r\n        {\r\n            execute(page =>\r\n            {\r\n                PrincipalRoles.SetCurrentRolesForTesting(\"Role1\");\r\n\r\n                return page.AuthorizedLinkTo(svc => svc.EndpointFor<ConventionEndpoint>(x => x.get_authorized_data()));\r\n            });\r\n\r\n            theResult.ShouldBe(\"<a href=\\\"/authorized/data\\\"></a>\");\r\n        }\r\n\r\n        [Test]\r\n        public void authorized_link_to_negative_directly_against_endpoint_service()\r\n        {\r\n            execute(page =>\r\n            {\r\n                PrincipalRoles.SetCurrentRolesForTesting(\"Role2\");\r\n\r\n                return page.AuthorizedLinkTo(svc => svc.EndpointFor<ConventionEndpoint>(x => x.get_authorized_data()));\r\n            });\r\n\r\n            theResult.ShouldBe(string.Empty);\r\n        }\r\n\r\n        [Test]\r\n        public void link_to_by_input_model_type()\r\n        {\r\n            execute(page => page.LinkTo<SpecificInput>());\r\n            theResult.ShouldBe(\"<a href=\\\"/specific/input\\\"></a>\");\r\n        }\r\n\r\n        [Test]\r\n        public void link_to_by_input_model_gets_full_pattern()\r\n        {\r\n            execute(page => page.LinkTo(new InputWithPattern {Name = \"Jeremy\"}));\r\n            theResult.ShouldBe(\"<a href=\\\"/input/Jeremy\\\"></a>\");\r\n        }\r\n\r\n        [Test]\r\n        public void link_to_by_input_model_that_passes_authorization()\r\n        {\r\n            execute(page =>\r\n            {\r\n                PrincipalRoles.SetCurrentRolesForTesting(\"Role1\");\r\n\r\n                return page.LinkTo(new SecuredInput {Name = \"Max\"});\r\n            });\r\n\r\n            theResult.ShouldBe(\"<a href=\\\"/secured/by/role/Max\\\"></a>\");\r\n        }\r\n\r\n        [Test]\r\n        public void link_to_by_input_model_that_does_not_pass_authorization()\r\n        {\r\n            execute(page =>\r\n            {\r\n                PrincipalRoles.SetCurrentRolesForTesting(\"Role2\");\r\n\r\n                return page.LinkTo(new SecuredInput {Name = \"Max\"});\r\n            });\r\n\r\n            theResult.ShouldBeEmpty();\r\n        }\r\n\r\n        [Test]\r\n        public void link_to_by_controller_name_and_expression()\r\n        {\r\n            execute(page => page.LinkTo<ConventionEndpoint>(x => x.get_result()));\r\n\r\n            theResult.ShouldBe(\"<a href=\\\"/result\\\"></a>\");\r\n        }\r\n\r\n        [Test]\r\n        public void link_to_new()\r\n        {\r\n            execute(page => page.LinkToNew<Foo>());\r\n\r\n            theResult.ShouldBe(\"<a href=\\\"/creates/foo\\\"></a>\");\r\n        }\r\n\r\n        [Test]\r\n        public void link_variable_simple()\r\n        {\r\n            execute(page => page.LinkVariable(\"foo\", new InputWithPattern {Name = \"Shiner\"}));\r\n\r\n            theResult.ShouldBe(\"var foo = '/input/Shiner';\");\r\n        }\r\n\r\n        [Test]\r\n        public void link_varuable_by_input_type()\r\n        {\r\n            execute(page => page.LinkVariable<SpecificInput>(\"foo\"));\r\n\r\n            theResult.ShouldBe(\"var foo = '/specific/input';\");\r\n        }\r\n\r\n        [Test]\r\n        public void element_name_for()\r\n        {\r\n            execute(page => page.ElementNameFor(x => x.NullableNow));\r\n\r\n            theResult.ShouldBe(\"NullableNow\");\r\n        }\r\n\r\n        [Test]\r\n        public void TextboxFor()\r\n        {\r\n            execute(page =>\r\n            {\r\n                page.Model.BigName = \"some big name\";\r\n\r\n                return page.TextBoxFor(x => x.BigName);\r\n            });\r\n\r\n            theResult.ShouldBe(\"<input type=\\\"text\\\" name=\\\"BigName\\\" value=\\\"some big name\\\" />\");\r\n        }\r\n    }\r\n\r\n    public class ConventionTarget\r\n    {\r\n        public int Age { get; set; }\r\n        public string Name { get; set; }\r\n        public bool Passed { get; set; }\r\n        public string BigName { get; set; }\r\n\r\n        public DateTime Now { get; set; }\r\n        public DateTime? NullableNow { get; set; }\r\n\r\n        [FakeRequired]\r\n        public string PropWithFakeReqired { get; set; }\r\n        public string PropWithNoAttributes { get; set; }\r\n\r\n        [FakeMaximumStringLength(25)]\r\n        public string MaximumLengthProp { get; set; }\r\n    }\r\n\r\n\r\n    public class ConventionEndpoint\r\n    {\r\n        private readonly FubuHtmlDocument<ConventionTarget> _document;\r\n        public static Func<IFubuPage<ConventionTarget>, object> Source = page => \"nothing\";\r\n\r\n        public ConventionEndpoint(FubuHtmlDocument<ConventionTarget> document)\r\n        {\r\n            _document = document;\r\n        }\r\n\r\n        public string get_result()\r\n        {\r\n            return Source(_document).ToString();\r\n        }\r\n\r\n        [AllowRole(\"Role1\")]\r\n        public string get_authorized_data()\r\n        {\r\n            return \"something\";\r\n        }\r\n\r\n        public string get_specific_input(SpecificInput input)\r\n        {\r\n            return \"Hello!\";\r\n        }\r\n\r\n        public string get_input_Name(InputWithPattern pattern)\r\n        {\r\n            return \"Hello\";\r\n        }\r\n\r\n        public AjaxContinuation post_input_Name(InputWithPattern patter)\r\n        {\r\n            return AjaxContinuation.Successful();\r\n        }\r\n\r\n        [AllowRole(\"Role1\")]\r\n        public string get_secured_by_role_Name(SecuredInput input)\r\n        {\r\n            return \"Hello\";\r\n        }\r\n\r\n        [UrlForNew(typeof (Foo))]\r\n        public string get_creates_foo()\r\n        {\r\n            return \"hello\";\r\n        }\r\n    }\r\n\r\n    public class Foo\r\n    {\r\n    }\r\n\r\n    public class SpecificInput\r\n    {\r\n    }\r\n\r\n    public class InputWithPattern\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    public class SecuredInput : InputWithPattern\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/UI/indexer_owner_type_bug_tester.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Net;\nusing FubuMVC.Core;\nusing FubuMVC.Core.UI;\nusing HtmlTags;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.IntegrationTesting.UI\n{\n    public class Child\n    {\n        public string Name { get; set; }\n    }\n\n    public class Parent\n    {\n        public IList<Child> Children { get; set; }\n    }\n\n    public class IndexerOwnerEndpoint\n    {\n        private readonly FubuHtmlDocument<Parent> _document;\n\n        public IndexerOwnerEndpoint(FubuHtmlDocument<Parent> document)\n        {\n            _document = document;\n        }\n\n        public HtmlDocument get_template_for_indexer()\n        {\n            _document.Add(_document.InputFor(new Parent(), x => x.Children[-1]));\n\n            return _document;\n        }\n    }\n\n    [TestFixture]\n    public class indexer_owner_type_bug_tester\n    {\n        [Test]\n        public void should_build_the_template_just_fine()\n        {\n            using (var server = FubuRuntime.Basic())\n            {\n                var response = server.Scenario(_ =>\n                {\n                    _.Get.Action<IndexerOwnerEndpoint>(x => x.get_template_for_indexer());\n                });\n\n\n                response.Body.ReadAsText()\n                    .ShouldContain(\"<input type=\\\"text\\\" value=\\\"\\\" name=\\\"Children[-1]\\\" />\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Using_a_custom_routing_policy.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Web.Routing;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing FubuMVC.Core.Runtime;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting\r\n{\r\n    [TestFixture]\r\n    public class Using_a_custom_routing_policy\r\n    {\r\n        [Test]\r\n        public void can_happily_plug_in_an_alternative_route_policy()\r\n        {\r\n            FakeRoutePolicy.IWasCalled = false;\r\n\r\n            var registry = new FubuRegistry();\r\n            registry.RoutePolicy<FakeRoutePolicy>();\r\n\r\n            using (var runtime = registry.ToRuntime())\r\n            {\r\n            }\r\n\r\n            FakeRoutePolicy.IWasCalled.ShouldBeTrue();\r\n        }\r\n    }\r\n\r\n    public class FakeRoutePolicy : IRoutePolicy\r\n    {\r\n        public static bool IWasCalled;\r\n\r\n        public IList<RouteBase> BuildRoutes(BehaviorGraph graph, IServiceFactory factory)\r\n        {\r\n            IWasCalled = true;\r\n            return new StandardRoutePolicy().BuildRoutes(graph, factory);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Views/LayoutAttachment/Explicit_declaration_of_master_layout_spark.cs",
    "content": "﻿using System.Linq;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Spark.SparkModel;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Views.LayoutAttachment\r\n{\r\n    [TestFixture, Explicit]\r\n    public class Explicit_declaration_of_master_layout_spark : ViewIntegrationContext\r\n    {\r\n        public Explicit_declaration_of_master_layout_spark()\r\n        {\r\n            SparkView(\"Shared/Application\").Write(\"Application content\");\r\n            SparkView(\"Shared/Special\").Write(@\"\r\n<use master='none' />\r\n\r\n\r\n\r\nSpecial content\");\r\n\r\n            SparkView<MyViewModel>(\"View1\").Write(\"<use master='Special'/>\");\r\n            SparkView<ViewModel2>(\"Folder1/View2\");\r\n            SparkView<ViewModel3>(\"Folder1/Folder2/View3\");\r\n            SparkView<ViewModel4>(\"Folder1/Folder2/View4\");\r\n        }\r\n\r\n        public class MyViewModelRegistry : FubuRegistry\r\n        {\r\n            public MyViewModelRegistry()\r\n            {\r\n                Actions.IncludeType<MyViewModelEndpoint>();\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void use_the_explicit_master_page_if_it_exists()\r\n        {\r\n            Scenario.Get.Input<MyViewModel>();\r\n\r\n            Scenario.ContentShouldContain(\"Special content\");\r\n            Scenario.ContentShouldNotContain(\"Application content\");\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void use_the_explicit_master_name_if_it_exists()\r\n        {\r\n            var view1 = Views.Templates<SparkTemplate>().FirstOrDefault(x => x.Name() == \"View1\");\r\n\r\n            view1.Master.ShouldNotBeNull();\r\n            view1.Master.Name().ShouldBe(\"Special\");\r\n\r\n            view1.Master.Master.ShouldBeNull();\r\n        }\r\n    }\r\n\r\n    public class MyViewModel\r\n    {\r\n    }\r\n\r\n    public class MyViewModelEndpoint\r\n    {\r\n        public MyViewModel get_my_view_model(MyViewModel input)\r\n        {\r\n            return input;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Views/Spark/Activation.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Core.View;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Views.Spark\r\n{\r\n    [TestFixture]\r\n    public class Activation : ViewIntegrationContext\r\n    {\r\n        public Activation()\r\n        {\r\n            SparkView<ActivationModel>(\"ActivationView\").Write(@\"\r\n\r\n<div>!{this.Get<IActivationRenderer>().Print(Model)}</div>\r\n\");\r\n        }\r\n\r\n        public class MyRegistry : FubuRegistry\r\n        {\r\n            public MyRegistry()\r\n            {\r\n                Actions.IncludeType<ActivationEndpoint>();\r\n                Actions.DisableDefaultActionSource();\r\n                Services.SetServiceIfNone<IActivationRenderer, ActivationRenderer>();\r\n\r\n                AlterSettings<CommonViewNamespaces>(x => x.AddForType<ActivationEndpoint>());\r\n            }\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void the_services_and_model_are_attached_while_running_the_view()\r\n        {\r\n            Scenario.Get.Action<ActivationEndpoint>(x => x.get_model());\r\n            Scenario.ContentShouldContain(\"the model is named Jeremy\");\r\n        }\r\n    }\r\n\r\n    public class ActivationEndpoint\r\n    {\r\n        public ActivationModel get_model()\r\n        {\r\n            return new ActivationModel {Name = \"Jeremy\"};\r\n        }\r\n    }\r\n\r\n    public class ActivationModel\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    public interface IActivationRenderer\r\n    {\r\n        string Print(ActivationModel model);\r\n    }\r\n\r\n    public class ActivationRenderer : IActivationRenderer\r\n    {\r\n        public string Print(ActivationModel model)\r\n        {\r\n            return \"the model is named \" + model.Name;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Views/Spark/Partials.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Views.Spark\r\n{\r\n    [TestFixture]\r\n    public class Partials : ViewIntegrationContext\r\n    {\r\n        public Partials()\r\n        {\r\n            SparkView<FullViewModel>(\"Full\").Write(@\"\r\n<p>The partial is below</p>\r\n\r\n!{this.Partial(Model.PartialModel)}\r\n\r\n<p>The partial is above</p>\r\n\");\r\n\r\n            SparkView<PartialInput>(\"Partial1\").Write(@\"\r\n<h1>My name is !{Model.Name}</h1>\r\n!{this.Partial(Model.NestedInput)}\r\n\");\r\n\r\n            SparkView<MoreInput>(\"Partial2\").Write(@\"\r\n<p>!{Model.Description}</p>\r\n\r\n\");\r\n        }\r\n\r\n        [Test]\r\n        public void pair_of_nested_partials()\r\n        {\r\n            Scenario.Get.Action<PartialSparkEndpoints>(x => x.get_partials());\r\n\r\n            Scenario.ContentShouldContain(\"<h1>My name is Shiner</h1>\");\r\n            Scenario.ContentShouldContain(\"<p>I am a 7 year old Labrador mix</p>\");\r\n        }\r\n    }\r\n\r\n    public class PartialSparkEndpoints\r\n    {\r\n        public FullViewModel get_partials()\r\n        {\r\n            return new FullViewModel\r\n            {\r\n                PartialModel = new PartialInput\r\n                {\r\n                    Name = \"Shiner\",\r\n                    NestedInput = new MoreInput\r\n                    {\r\n                        Description = \"I am a 7 year old Labrador mix\"\r\n                    }\r\n                }\r\n            };\r\n        }\r\n    }\r\n\r\n    [ViewSubject]\r\n    public class PartialInput\r\n    {\r\n        public string Name { get; set; }\r\n        public MoreInput NestedInput { get; set; }\r\n    }\r\n\r\n    [ViewSubject]\r\n    public class MoreInput\r\n    {\r\n        public string Description { get; set; }\r\n    }\r\n\r\n    public class FullViewModel\r\n    {\r\n        public PartialInput PartialModel { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Views/Spark/Partials_do_not_get_layout.cs",
    "content": "﻿using FubuMVC.Core.Continuations;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Views.Spark\r\n{\r\n    [TestFixture]\r\n    public class Partials_do_not_get_layout : ViewIntegrationContext\r\n    {\r\n        public Partials_do_not_get_layout()\r\n        {\r\n            SparkView<HelloPartialViewModel>(\"HelloPartialViewModel\").Write(@\"\r\n<use master='PartialLayout' />\r\n<p>In a partial</p>\n\n<content:head>\n  <script src='_/herp/derp.js'></script>\r\n</content:head>\r\n\");\r\n\r\n\r\n            SparkView(\"_NativePartial\").WriteLine(\"<div>Hello Native</div>\");\r\n\r\n            SparkView<UsesNativeViewModel>(\"UsesNative\").WriteLine(\"<NativePartial />\");\r\n\r\n            SparkView<UsesPartialViewModel>(\"UsesPartial\").Write(@\"\r\n<use namespace='FubuMVC.IntegrationTesting.Views.Spark' />\r\n<h1>Uses partial</h1>\r\n!{this.Partial(new HelloPartialInputModel())}\r\n\");\r\n\r\n\r\n            SparkView(\"Shared/Application\").Write(@\"\r\n\r\n<html>\r\n  <head>\r\n\t<use content='head' />\r\n  </head>\r\n  <body>\r\n      <h1>Default layout</h1>\r\n      <use content='view'/>\r\n  </body>\r\n</html>\r\n\");\r\n\r\n            SparkView(\"Shared/PartialLayout\").Write(@\"\r\n\r\n<html>\r\n<head>\r\n    <title>\r\n        <use content='title'>Default Title</use>\r\n    </title>\r\n    <asset name='styles' />\r\n    <use content='head' />\r\n</head>\r\n<body>\r\n    <h1>This layout means FAIL!</h1>\r\n    <use content='view' />\r\n</body>\r\n</html>\r\n\r\n\");\r\n        }\r\n\r\n        [Test]\r\n        public void does_not_apply_layout_when_invoked_as_partial()\r\n        {\r\n            Scenario.Get.Action<UsesPartialEndpoint>(x => x.Execute());\r\n\r\n            Scenario.ContentShouldContain(\"<h1>Uses partial</h1>\");\r\n            Scenario.ContentShouldContain(\"<h1>Default layout</h1>\");\r\n            Scenario.ContentShouldContain(\"<p>In a partial</p>\");\r\n\r\n            Scenario.ContentShouldNotContain(\"<h1>This layout means FAIL!</h1>\");\r\n        }\r\n\r\n        [Test]\r\n        public void invoking_action_normally_should_render_the_correct_layout()\r\n        {\r\n            Scenario.Get.Action<HelloPartialEndpoint>(x => x.Render());\r\n            Scenario.ContentShouldContain(\"<p>In a partial</p>\");\r\n            Scenario.ContentShouldContain(\"<h1>This layout means FAIL!</h1>\");\r\n        }\r\n\r\n        [Test]\r\n        public void native_partials_happy_path()\r\n        {\r\n            Scenario.Get.Action<UsesNativeEndpoint>(x => x.Render());\r\n\r\n            Scenario.ContentShouldContain(\"<div>Hello Native</div>\");\r\n        }\r\n\r\n        [Test, Explicit(\"This was broken in 2.0, but I'm not entirely sure that we care.\")]\r\n        public void partials_should_still_have_access_to_master_layout_content_areas()\r\n        {\r\n            Scenario.Get.Action<UsesPartialEndpoint>(x => x.Execute());\r\n\r\n            Scenario.ContentShouldContain(\"_/herp/derp.js\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_apply_layout_when_transfered_to()\r\n        {\r\n            Scenario.Get.Action<TransferToEndpoint>(x => x.Tranfer());\r\n            Scenario.ContentShouldContain(\"<p>In a partial</p>\");\r\n            Scenario.ContentShouldContain(\"<h1>This layout means FAIL!</h1>\");\r\n        }\r\n    }\r\n\r\n    public class HelloPartialEndpoint\r\n    {\r\n        public HelloPartialViewModel SayHelloPartial(HelloPartialInputModel input)\r\n        {\r\n            return new HelloPartialViewModel();\r\n        }\r\n\r\n        public HelloPartialViewModel Render()\r\n        {\r\n            return new HelloPartialViewModel();\r\n        }\r\n    }\r\n\r\n    public class HelloPartialInputModel\r\n    {\r\n    }\r\n\r\n    public class HelloPartialViewModel\r\n    {\r\n    }\r\n\r\n    public class UsesNativeEndpoint\r\n    {\r\n        public UsesNativeViewModel Render()\r\n        {\r\n            return new UsesNativeViewModel();\r\n        }\r\n    }\r\n\r\n    public class UsesNativeViewModel\r\n    {\r\n    }\r\n\r\n    public class UsesPartialEndpoint\r\n    {\r\n        public UsesPartialViewModel Execute()\r\n        {\r\n            return new UsesPartialViewModel();\r\n        }\r\n    }\r\n\r\n    public class UsesPartialViewModel\r\n    {\r\n    }\r\n\r\n    public class TransferToEndpoint\r\n    {\r\n        public FubuContinuation Tranfer()\r\n        {\r\n            return FubuContinuation.TransferTo(new HelloPartialInputModel());\r\n        }\r\n    }\r\n\r\n    public class RedirectToEndpoint\r\n    {\r\n        public FubuContinuation Redirect()\r\n        {\r\n            return FubuContinuation.RedirectTo<UsesPartialEndpoint>(x => x.Execute());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Views/Spark/Rendering/FubuSparkViewDecoratorTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing FubuCore;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Urls;\nusing FubuMVC.Spark.Rendering;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Spark;\n\nnamespace FubuMVC.IntegrationTesting.Views.Spark.Rendering\n{\n    [TestFixture]\n    public class FubuSparkViewDecoratorTester : InteractionContext<FubuSparkViewDecorator>\n    {\n        private IFubuSparkView _view;\n\n        protected override void beforeEach()\n        {\n            _view = MockFor<IFubuSparkView>();\n            _view.Stub(x => x.Content).PropertyBehavior();\n            _view.Stub(x => x.OnceTable).PropertyBehavior();\n            _view.Stub(x => x.Output).PropertyBehavior();\n            _view.Stub(x => x.Globals).PropertyBehavior();\n            _view.Stub(x => x.ElementPrefix).PropertyBehavior();\n            _view.Stub(x => x.GeneratedViewId).Return(Guid.NewGuid());\n            _view.Stub(x => x.ServiceLocator).PropertyBehavior();\n            _view.Stub(x => x.Urls).Return(MockFor<IUrlRegistry>());\n            _view.Stub(x => x.CacheService).PropertyBehavior();\n        }\n\n        [Test]\n        public void generatedviewid_is_forwarded_to_inner_view()\n        {\n            _view.GeneratedViewId.ShouldBe(ClassUnderTest.GeneratedViewId);\n        }\n\n        [Test]\n        public void content_is_forwarded_to_inner_view()\n        {\n            var content = new Dictionary<string, TextWriter> {{\"zone1\", new StringWriter()}};\n            ClassUnderTest.Content = content;\n            ClassUnderTest.Content\n                .ShouldBeTheSameAs(_view.Content)\n                .ShouldBeTheSameAs(content);\n        }\n\n        [Test]\n        public void once_table_is_forwarded_to_inner_view()\n        {\n            var onceTable = new Dictionary<string, string> {{\"once_key1\", \"once_value1\"}};\n            ClassUnderTest.OnceTable = onceTable;\n            ClassUnderTest.OnceTable\n                .ShouldBeTheSameAs(_view.OnceTable)\n                .ShouldBeTheSameAs(onceTable);\n        }\n\n        [Test]\n        public void globals_is_forwarded_to_inner_view()\n        {\n            var globals = new Dictionary<string, object> {{\"global_key1\", \"global_value1\"}};\n            ClassUnderTest.Globals = globals;\n            ClassUnderTest.Globals\n                .ShouldBeTheSameAs(_view.Globals)\n                .ShouldBeTheSameAs(globals);\n        }\n\n        [Test]\n        public void output_is_forwarded_to_inner_view()\n        {\n            var output = new StringWriter();\n            ClassUnderTest.Output = output;\n            ClassUnderTest.Output\n                .ShouldBeTheSameAs(_view.Output)\n                .ShouldBeTheSameAs(output);\n        }\n\n        [Test]\n        public void elementprefix_is_forwarded_to_inner_view()\n        {\n            const string elementPrefix = \"fubu\";\n            ClassUnderTest.ElementPrefix = elementPrefix;\n            ClassUnderTest.ElementPrefix\n                .ShouldBeTheSameAs(_view.ElementPrefix)\n                .ShouldBeTheSameAs(elementPrefix);\n        }\n\n        [Test]\n        public void servicelocator_is_forwarded_to_inner_view()\n        {\n            var serviceLocator = MockFor<IServiceLocator>();\n            ClassUnderTest.ServiceLocator = serviceLocator;\n            ClassUnderTest.ServiceLocator\n                .ShouldBeTheSameAs(_view.ServiceLocator)\n                .ShouldBeTheSameAs(serviceLocator);\n        }\n\n        [Test]\n        public void urls_is_forwarded_to_inner_view()\n        {\n            ClassUnderTest.Urls.ShouldBeTheSameAs(_view.Urls);\n        }\n\n        [Test]\n        public void get_is_forwarded_to_inner_view()\n        {\n            var guid = Guid.NewGuid();\n            _view.Stub(x => x.Get<string>()).Return(\"Hello World\");\n            _view.Stub(x => x.Get<Guid>()).Return(guid);\n            ClassUnderTest.Get<string>().ShouldBe(\"Hello World\");\n            ClassUnderTest.Get<Guid>().ShouldBe(guid);\n        }\n\n        [Test]\n        public void getnew_is_forwarded_to_inner_view()\n        {\n            var guid = Guid.NewGuid();\n            _view.Stub(x => x.GetNew<string>()).Return(\"Hello World\");\n            _view.Stub(x => x.GetNew<Guid>()).Return(guid);\n            ClassUnderTest.GetNew<string>().ShouldBe(\"Hello World\");\n            ClassUnderTest.GetNew<Guid>().ShouldBe(guid);\n        }\n\n        [Test]\n        public void render_is_forwarded_to_inner_view()\n        {\n            _view.Expect(x => x.Render(MockFor<IFubuRequestContext>()));\n            ClassUnderTest.Render(MockFor<IFubuRequestContext>());\n            _view.VerifyAllExpectations();\n        }\n\n        [Test]\n        public void render_wraps_execution_with_pre_and_post_render_delegates()\n        {\n            var callStack = new List<string>();\n\n            ClassUnderTest.PreRender += x => callStack.Add(\"Pre Render1\");\n            ClassUnderTest.PreRender += obj => callStack.Add(\"Pre Render2\");\n            ClassUnderTest.PostRender += x => callStack.Add(\"Post Render1\");\n            ClassUnderTest.PostRender += x => callStack.Add(\"Post Render2\");\n            _view.Stub(x => x.Render(MockFor<IFubuRequestContext>())).WhenCalled(x => callStack.Add(\"Render View\"));\n\n            ClassUnderTest.Render(MockFor<IFubuRequestContext>());\n\n            callStack.ShouldHaveCount(5)\n                .Join(\"|\")\n                .ShouldBe(\"Pre Render1|Pre Render2|Render View|Post Render1|Post Render2\");\n        }\n\n        [Test]\n        public void cache_service_is_forwarded_to_inner_view()\n        {\n            ClassUnderTest.CacheService = MockFor<ICacheService>();\n            ClassUnderTest.CacheService.ShouldBe(MockFor<ICacheService>());\n            ClassUnderTest.CacheService.ShouldBe(_view.CacheService);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Views/Spark/Rendering/FubuSparkViewTester.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Urls;\nusing FubuMVC.Spark.Rendering;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.IntegrationTesting.Views.Spark.Rendering\n{\n    public class MySparkView : FubuSparkView<PersonViewModel>\n    {\n        public override void Render()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override Guid GeneratedViewId\n        {\n            get { throw new NotImplementedException(); }\n        }\n    }\n\n    [TestFixture]\n    public class FubuSparkViewTester : InteractionContext<MySparkView>\n    {\n        private IServiceLocator _serviceLocator;\n        private IUrlRegistry _urlRegistry;\n\n        protected override void beforeEach()\n        {\n            _serviceLocator = MockFor<IServiceLocator>();\n            _urlRegistry = MockFor<IUrlRegistry>();\n\n            ClassUnderTest.ServiceLocator.ShouldBeNull();\n            ClassUnderTest.ServiceLocator = _serviceLocator;\n\n            _serviceLocator.Stub(x => x.GetInstance(typeof (IUrlRegistry))).Return(_urlRegistry);\n        }\n\n        [Test]\n        public void service_locator()\n        {\n            ClassUnderTest.ServiceLocator.ShouldBe(_serviceLocator);\n        }\n\n        [Test]\n        public void get_returns_a_cached_instance_from_the_service_locator()\n        {\n            var original = new ViewObject {Tag = \"original\"};\n            var latest = new ViewObject {Tag = \"latest\"};\n\n            _serviceLocator.Stub(x => x.GetInstance(typeof (ViewObject))).Return(original);\n            var first = ClassUnderTest.Get<ViewObject>();\n            _serviceLocator.BackToRecord(BackToRecordOptions.All);\n            _serviceLocator.Replay(); \n            _serviceLocator.Stub(x => x.GetInstance(typeof(ViewObject))).Return(latest);\n            var second = ClassUnderTest.Get<ViewObject>();\n\n            first.ShouldBe(original);\n            second.ShouldBe(original);\n            first.Tag.ShouldBe(original.Tag);\n        }\n\n        [Test]\n        public void get_new_uses_the_service_locator_always()\n        {\n            var original = new ViewObject { Tag = \"original\" };\n            var latest = new ViewObject { Tag = \"latest\" };\n\n            _serviceLocator.Stub(x => x.GetInstance(typeof(ViewObject))).Return(original);\n            var first = ClassUnderTest.GetNew<ViewObject>();\n            _serviceLocator.BackToRecord(BackToRecordOptions.All);\n            _serviceLocator.Replay();\n            _serviceLocator.Stub(x => x.GetInstance(typeof(ViewObject))).Return(latest);\n            var second = ClassUnderTest.GetNew<ViewObject>();\n\n            first.ShouldBe(original);\n            second.ShouldBe(latest);\n            first.Tag.ShouldBe(original.Tag);\n            second.Tag.ShouldBe(latest.Tag);\n        }\n\n        [Test]\n        public void site_resource()\n        {\n            ClassUnderTest.SiteResource = x => \"App/{0}\".ToFormat(x);\n            ClassUnderTest.SiteResource(\"Views/Home/Home.spark\").ShouldBe(\"App/Views/Home/Home.spark\");\n        }\n\n        [Test]\n        public void urls()\n        {\n            ClassUnderTest.Urls.ShouldBe(_urlRegistry);\n        }\n\n        [Test]\n        public void tag()\n        {\n            ClassUnderTest.Tag(\"div\").ShouldNotBeNull().TagName().ShouldBe(\"div\");\n        }\n\n        [Test]\n        public void h_uses_servicelocator_to_get_htmlencoder()\n        {\n            _serviceLocator.Expect(x => x.GetInstance(typeof (IHtmlEncoder))).Return(new DefaultHtmlEncoder());\n            ClassUnderTest.H(\"<div>\").ShouldBe(\"&lt;div&gt;\");\n            _serviceLocator.VerifyAllExpectations();\n        }\n\n        [Test]\n        public void html_does_not_encode_value()\n        {\n            const string encodedValue = \"&lt;div&gt;\";\n            var result = ClassUnderTest.HTML(encodedValue);\n            result.ToString().ShouldBe(encodedValue);\n            result.ToHtmlString().ShouldBe(encodedValue);\n        }\n\n        [Test]\n        public void html_handles_null_value()\n        {\n            var result = ClassUnderTest.HTML(null);\n            result.ToString().ShouldBe(null);\n            result.ToHtmlString().ShouldBe(null);\n        }\n\n        [Test]\n        public void set_model_using_request()\n        {\n            var request = MockFor<IFubuRequest>();\n            var model = new PersonViewModel {Name = \"Mr. FubuSpark\"};\n            request.Expect(x => x.Get<PersonViewModel>()).Return(model);\n            ClassUnderTest.SetModel(request);\n            ClassUnderTest.Model.ShouldBe(model);\n            request.VerifyAllExpectations();\n        }\n\n        [Test]\n        public void set_model_using_object_instance()\n        {\n            object model = new PersonViewModel { Name = \"Mr. FubuSpark\" };\n            ClassUnderTest.SetModel(model);\n            ClassUnderTest.Model.ShouldBe(model);\n        }\n\n        [Test]\n        public void set_model_using_model_instance()\n        {\n            var model = new PersonViewModel { Name = \"Mr. FubuSpark\" };\n            ClassUnderTest.SetModel(model);\n            ClassUnderTest.Model.ShouldBe(model);\n        }\n\n        [Test]\n        public void get_model_returns_the_view_model()\n        {\n            var model = new PersonViewModel { Name = \"Mr. FubuSpark\" };\n            ClassUnderTest.SetModel(model);\n            ClassUnderTest.GetModel().ShouldBe(model);\n        }\n\n    }\n\n    public class PersonViewModel\n    {\n        public string Name { get; set; }\n    }\n\n    public class ViewObject \n    {\n        public string Tag { get; set; }\n    }\n\n}\n"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Views/Spark/Simple_rendering.cs",
    "content": "﻿using FubuCore;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Views.Spark\r\n{\r\n    [TestFixture]\r\n    public class Simple_rendering : ViewIntegrationContext\r\n    {\r\n        public Simple_rendering()\r\n        {\r\n            SparkView<BreatheViewModel>(\"Breathe\")\r\n                .Write(@\"\r\n<p>This is real output</p>\r\n<h2>${Model.Text}</h2>\");\r\n        }\r\n\r\n        [Test]\r\n        public void can_render()\r\n        {\r\n            Scenario.Get.Input(new AirInputModel {TakeABreath = true});\r\n            Scenario.ContentShouldContain(\"<h2>Breathe in!</h2>\");\r\n        }\r\n    }\r\n\r\n    public class AirEndpoint\r\n    {\r\n        public AirViewModel TakeABreath(AirRequest request)\r\n        {\r\n            return new AirViewModel {Text = \"Take a {0} breath?\".ToFormat(request.Type)};\r\n        }\r\n\r\n        public BreatheViewModel get_breathe_TakeABreath(AirInputModel model)\r\n        {\r\n            var result = model.TakeABreath\r\n                ? new BreatheViewModel {Text = \"Breathe in!\"}\r\n                : new BreatheViewModel {Text = \"Exhale!\"};\r\n\r\n            return result;\r\n        }\r\n    }\r\n\r\n    public class AirRequest\r\n    {\r\n        public AirRequest()\r\n        {\r\n            Type = \"deep\";\r\n        }\r\n\r\n        public string Type { get; set; }\r\n    }\r\n\r\n    public class AirInputModel\r\n    {\r\n        public bool TakeABreath { get; set; }\r\n    }\r\n\r\n    public class AirViewModel\r\n    {\r\n        public string Text { get; set; }\r\n    }\r\n\r\n    public class BreatheViewModel : AirViewModel\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Views/Spark/Simple_rendering_with_precompilation.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Spark;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Views.Spark\r\n{\r\n    [TestFixture]\r\n    public class Simple_rendering_with_precompilation : ViewIntegrationContext\r\n    {\r\n        public Simple_rendering_with_precompilation()\r\n        {\r\n            SparkView<BreatheViewModel>(\"Breathe\")\r\n                .Write(@\"\r\n<p>This is real output</p>\r\n<h2>${Model.Text}</h2>\");\r\n        }\r\n\r\n        public class MyRegistry : FubuRegistry\r\n        {\r\n            public MyRegistry()\r\n            {\r\n                AlterSettings<SparkEngineSettings>(x => x.PrecompileViews = true);\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void can_render()\r\n        {\r\n            Scenario.Get.Input(new AirInputModel {TakeABreath = true});\r\n            Scenario.ContentShouldContain(\"<h2>Breathe in!</h2>\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Views/Spark/SparkEngineSettingsTester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Runtime.Files;\nusing FubuMVC.Spark;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.IntegrationTesting.Views.Spark\n{\n    [TestFixture]\n    public class SparkEngineSettingsTester : InteractionContext<SparkEngineSettings>\n    {\n        [Test]\n        public void includes_spark_views_and_bindings_by_default()\n        {\n            ClassUnderTest.Search.Include.Split(';')\n                .ShouldHaveTheSameElementsAs(\"*.spark\", \"*.shade\", \"bindings.xml\");\n        }\n\n        [Test]\n        public void uses_deep_search_by_default()\n        {\n            ClassUnderTest.Search.DeepSearch.ShouldBeTrue();\n        }\n\n        [Test]\n        public void excludes_bin_and_obj_by_default()\n        {\n            ClassUnderTest.Search.Exclude.Split(';')\n                .ShouldHaveTheSameElementsAs(\"bin/*.*\", \"obj/*.*\");\n        }\n\n        [Test]\n        public void ignores_excluded_folders()\n        {\n            var faf = FubuApplicationFiles.ForDefault();\n\n            ClassUnderTest.Search.AppendExclude(\"*A3.cshtml\");\n            ClassUnderTest.Search.AppendExclude(\"Templates/*.*\");\n\n            ClassUnderTest.Search.ExcludedFilesFor(faf.RootPath);\n            ClassUnderTest.Search.IncludedFilesFor(faf.RootPath);\n\n            var files = faf.FindFiles(ClassUnderTest.Search).ToArray();\n\n            files.ShouldNotContain(f => f.Path.EndsWith(\"A3.cshtml\"));\n            files.ShouldNotContain(f => f.Path.EndsWith(\"A4.cshtml\"));\n        }\n\n        [Test]\n        public void do_not_precompile_when_in_development_mode()\n        {\n            using (var runtime = FubuRuntime.Basic(_ => _.Mode = \"development\"))\n            {\n                runtime.Get<SparkEngineSettings>()\n                    .PrecompileViews.ShouldBeFalse();\n            }\n            \n        }\n\n        [Test]\n        public void explicitly_do_not_precompile_views()\n        {\n            using (var runtime = FubuRuntime.Basic(_ =>\n            {\n                _.Mode = \"production\";\n                _.AlterSettings<SparkEngineSettings>(x => x.PrecompileViews = false);\n            }))\n            {\n                runtime.Get<SparkEngineSettings>()\n                    .PrecompileViews.ShouldBeFalse();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Views/Spark/SparkModel/Policies/StubTemplate.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.View;\nusing FubuMVC.Core.View.Model;\nusing FubuMVC.Core.View.Rendering;\nusing FubuMVC.Spark.SparkModel;\n\nnamespace FubuMVC.IntegrationTesting.Views.Spark.SparkModel.Policies\n{\n    public class StubTemplate : ISparkTemplate\n    {\n        public string Origin\n        {\n            get; set;\n        }\n\n        public string FilePath\n        {\n            get;\n            set;\n        }\n\n        public string RootPath\n        {\n            get;\n            set;\n        }\n\n        public string ViewPath\n        {\n            get;\n            set;\n        }\n\n\n        public string Namespace { get; set; }\n        public Type ViewModel { get; set; }\n        public string ProfileName { get; set; }\n\n        public Parsing Parsing { get; private set; }\n\n        public string RelativePath()\n        {\n            throw new NotImplementedException();\n        }\n\n        public string DirectoryPath()\n        {\n            throw new NotImplementedException();\n        }\n\n        public string RelativeDirectoryPath()\n        {\n            throw new NotImplementedException();\n        }\n\n        public string Name()\n        {\n            throw new NotImplementedException();\n        }\n\n        public bool FromHost()\n        {\n            throw new NotImplementedException();\n        }\n\n        public bool IsPartial()\n        {\n            throw new NotImplementedException();\n        }\n\n        public bool HasViewModel()\n        {\n            throw new NotImplementedException();\n        }\n\n        public string FullName()\n        {\n            throw new NotImplementedException();\n        }\n\n        public void AttachViewModels(ViewTypePool types, ITemplateLogger logger)\n        {\n            throw new NotImplementedException();\n        }\n\n        public ITemplateFile Master { get; set; }\n        public IRenderableView GetView()\n        {\n            throw new NotImplementedException();\n        }\n\n        public IRenderableView GetPartialView()\n        {\n            throw new NotImplementedException();\n        }\n\n        public void AttachLayouts(string defaultLayoutName, IViewFacility facility, ITemplateFolder folder)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Views/Spark/Three_Pass_Rendering_And_Bindings.cs",
    "content": "﻿using NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Views.Spark\r\n{\r\n    [TestFixture]\r\n    public class Three_Pass_Rendering_And_Bindings : ViewIntegrationContext\r\n    {\r\n        public Three_Pass_Rendering_And_Bindings()\r\n        {\r\n            SparkView(\"Shared/_Sidebar\").Write(@\"\r\n<content name='head'>\r\n<script src='~/content/js/jquery-ui-accordian.js' once='jquery-accordian'></script>\r\n</content>\r\n<div id='sidebar'>Say hello: <SayHello /></div>\r\n\");\r\n\r\n            SparkView(\"Shared/Application\").Write(@\"\r\n<use master='Html'/>\r\n<use content='view'/>\r\n<Sidebar />\r\n\");\r\n\r\n            File(\"Shared/bindings.xml\").Write(@\"\r\n\r\n<bindings>\r\n  <element name='SayHello'>'Hello'</element>\r\n</bindings>\r\n\r\n\");\r\n\r\n            SparkView(\"Shared/Html\").Write(@\"\r\n\r\n<html>\r\n<head>\r\n<use content='head'/>\r\n</head>\r\n<body>\r\n<use content='view'/>\r\n<use content='tail'/>\r\n</body>\r\n</html>\r\n\");\r\n\r\n            SparkView<ThreePassModel>(\"ThreePassSample\").Write(\"<h1>${Model.Message}</h1>\");\r\n        }\r\n\r\n//\r\n//        [SetUp]\r\n//        public void SetUp()\r\n//        {\r\n//            theResult = new StringBuilder()\r\n//                .AppendLine(\"<html>\")\r\n//                .AppendLine(\"<head>\")\r\n//                .AppendLine(@\"<script src=\"\"/content/js/jquery-ui-accordian.js\"\"></script>\")\r\n//                .AppendLine(\"</head>\")\r\n//                .AppendLine(\"<body>\")\r\n//                .AppendLine(\"<h1>Three Pass Rendering Test!</h1>\")\r\n//                .AppendLine(@\"<div id=\"\"sidebar\"\">Say hello: Hello</div>\")\r\n//                .AppendLine(\"</body>\")\r\n//                .Append(\"</html>\").Replace(\"\\r\", string.Empty)\r\n//                .ToString();\r\n//        }\r\n\r\n        [Test, Explicit(\"Just too flakey.  Blaming the file system\")]\r\n        public void three_pass_renders_correctly()\r\n        {\r\n            Scenario.Get.Action<ThreePassEndpoint>(x => x.ThreePassSample(null));\r\n\r\n            Scenario.ContentShouldContain(\"<html>\");\r\n            Scenario.ContentShouldContain(\"<head>\");\r\n            Scenario.ContentShouldContain(@\"<script src=\"\"/content/js/jquery-ui-accordian.js\"\"></script>\");\r\n            Scenario.ContentShouldContain(\"</head>\");\r\n            Scenario.ContentShouldContain(\"<body>\");\r\n            Scenario.ContentShouldContain(\"<h1>Three Pass Rendering Test!</h1>\");\r\n            Scenario.ContentShouldContain(@\"<div id=\"\"sidebar\"\">Say hello: Hello</div>\");\r\n            Scenario.ContentShouldContain(\"</body>\");\r\n        }\r\n    }\r\n\r\n\r\n    public class ThreePassEndpoint\r\n    {\r\n        public ThreePassModel ThreePassSample(ThreePassModel input)\r\n        {\r\n            return input;\r\n        }\r\n    }\r\n\r\n    public class ThreePassModel\r\n    {\r\n        public ThreePassModel()\r\n        {\r\n            Message = \"Three Pass Rendering Test!\";\r\n        }\r\n\r\n        public string Message { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Views/Spark/can_use_namespaces_from_common_view_namespaces.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Core.View;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Views.Spark\r\n{\r\n    [TestFixture]\r\n    public class can_use_namespaces_from_common_view_namespaces : ViewIntegrationContext\r\n    {\r\n        public can_use_namespaces_from_common_view_namespaces()\r\n        {\r\n            SparkView<FakeFoo>(\"foo\").Write(@\"\r\n!{this.SomeFakeFoo()}\r\n\r\n\");\r\n        }\r\n\r\n        [Test]\r\n        public void happily_uses_the_namespaces_imported_automatically()\r\n        {\r\n            Scenario.Get.Input<FakeFoo>();\r\n            Scenario.ContentShouldContain(\"some fake foo stuff\");\r\n        }\r\n    }\r\n\r\n    public static class FakeFubuPageExtensions\r\n    {\r\n        public static string SomeFakeFoo(this IFubuPage page)\r\n        {\r\n            return \"some fake foo stuff\";\r\n        }\r\n    }\r\n\r\n    [UrlPattern(\"fake/foo\")]\r\n    public class FakeFoo\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Views/Spark/modifies_the_WatchSettings.cs",
    "content": "﻿using FubuMVC.Core.Assets;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Spark;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.IntegrationTesting.Views.Spark\n{\n    [TestFixture]\n    public class modifies_the_WatchSettings\n    {\n        [Test]\n        public void adds_spark_and_bindings_xml_file()\n        {\n            var graph = BehaviorGraph.BuildFrom(x => {\n                x.Import<SparkViewFacility>();\n            });\n\n            var settings = graph.Settings.Get<AssetSettings>();\n        \n            settings.ContentMatches.ShouldContain(\"*.spark\");\n            settings.ContentMatches.ShouldContain(\"bindings.xml\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/Views/ViewIntegrationContext.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Threading;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Scenarios;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.View.Attachment;\r\nusing FubuMVC.Core.View.Model;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting.Views\r\n{\r\n    public class ViewIntegrationContext\r\n    {\r\n        public static readonly string Folder = \"Views\" + Guid.NewGuid();\r\n        public static readonly IFileSystem fileSystem = new FileSystem();\r\n        public static readonly string Application = \"Application\";\r\n        private readonly string _applicationDirectory;\r\n        private readonly string _directory;\r\n        private readonly IList<ContentStream> _streams = new List<ContentStream>();\r\n        private FubuRuntime _host;\r\n        private Lazy<ViewBag> _views;\r\n        protected Scenario Scenario;\r\n\r\n        public ViewIntegrationContext()\r\n        {\r\n            _applicationDirectory = _directory = Folder.AppendPath(Application).ToFullPath();\r\n        }\r\n\r\n        protected IServiceLocator Services\r\n        {\r\n            get { return _host.Get<IServiceLocator>(); }\r\n        }\r\n\r\n        protected BehaviorGraph BehaviorGraph\r\n        {\r\n            get { return Services.GetInstance<BehaviorGraph>(); }\r\n        }\r\n\r\n        protected ViewBag Views\r\n        {\r\n            get { return _views.Value; }\r\n        }\r\n\r\n        [TestFixtureSetUp]\r\n        public void FixtureSetUp()\r\n        {\r\n            fileSystem.DeleteDirectory(Folder);\r\n            fileSystem.CreateDirectory(Folder);\r\n\r\n            fileSystem.CreateDirectory(Folder.AppendPath(Application));\r\n\r\n            _streams.Each(x => x.DumpContents());\r\n\r\n            Thread.Sleep(100); // let the file system cool off a bit first\r\n\r\n\r\n            var registry = determineRegistry();\r\n            registry.RootPath = _applicationDirectory;\r\n\r\n            _host = registry.ToRuntime();\r\n\r\n            _views = new Lazy<ViewBag>(() => { return _host.Get<ConnegSettings>().Views; });\r\n        }\r\n\r\n        private FubuRegistry determineRegistry()\r\n        {\r\n            var registryType = GetType().GetNestedTypes().FirstOrDefault(x => x.IsConcreteTypeOf<FubuRegistry>());\r\n            return registryType == null ? new FubuRegistry() : Activator.CreateInstance(registryType).As<FubuRegistry>();\r\n        }\r\n\r\n        [TestFixtureTearDown]\r\n        public void FixtureTeardown()\r\n        {\r\n            _host.SafeDispose();\r\n            fileSystem.DeleteDirectory(Folder);\r\n        }\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            Scenario = new Scenario(_host);\r\n\r\n            beforeEach();\r\n        }\r\n\r\n        protected virtual void beforeEach()\r\n        {\r\n        }\r\n\r\n        [TearDown]\r\n        public void TearDown()\r\n        {\r\n            Scenario.As<IDisposable>().Dispose();\r\n        }\r\n\r\n        protected ContentStream File(string name)\r\n        {\r\n            var stream = new ContentStream(_directory, name, \"\");\r\n\r\n            _streams.Add(stream);\r\n\r\n            return stream;\r\n        }\r\n\r\n\r\n        protected ContentStream SparkView<T>(string name)\r\n        {\r\n            var stream = new ContentStream(_directory, name, \".spark\");\r\n            stream.WriteLine(\"<viewdata model=\\\"{0}\\\" />\", typeof(T).FullName);\r\n\r\n            _streams.Add(stream);\r\n\r\n            return stream;\r\n        }\r\n\r\n        protected ContentStream SparkView(string name)\r\n        {\r\n            var stream = new ContentStream(_directory, name, \".spark\");\r\n\r\n            _streams.Add(stream);\r\n\r\n            return stream;\r\n        }\r\n\r\n        protected ITemplateFile ViewForModel<T>()\r\n        {\r\n            return Views.ViewsFor(typeof(T)).OfType<ITemplateFile>().FirstOrDefault();\r\n        }\r\n    }\r\n\r\n    public class ContentStream\r\n    {\r\n        private readonly string _path;\r\n        private readonly StringWriter _writer = new StringWriter();\r\n\r\n        public ContentStream(string folder, string name, string extension)\r\n        {\r\n            _path = Path.Combine(folder, name + extension);\r\n        }\r\n\r\n        public ContentStream WriteLine(string format, params object[] parameters)\r\n        {\r\n            _writer.WriteLine(format, parameters);\r\n            return this;\r\n        }\r\n\r\n        public void Write(string text)\r\n        {\r\n            _writer.WriteLine(text.Replace(\"'\", \"\\\"\").TrimStart());\r\n        }\r\n\r\n        public void DumpContents()\r\n        {\r\n            ViewIntegrationContext.fileSystem.WriteStringToFile(_path, _writer.ToString());\r\n        }\r\n    }\r\n\r\n    public class ViewModel1\r\n    {\r\n    }\r\n\r\n    public class ViewModel2\r\n    {\r\n    }\r\n\r\n    public class ViewModel3\r\n    {\r\n    }\r\n\r\n    public class ViewModel4\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/can_register_and_use_OWIN_middleware_from_a_package.cs",
    "content": "﻿using Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.IntegrationTesting\n{\n    [TestFixture]\n    public class can_register_and_use_OWIN_middleware_from_a_package \n    {\n        [Test]\n        public void should_use_a_custom_middleware_registered_from_a_bottle()\n        {\n            TestHost.Scenario(_ =>\n            {\n                _.Get.Action<OwinPackageEndpoint>(x => x.get_stuff_from_bottle());\n                _.Header(\"Slow-Moving\").SingleValueShouldEqual(\"Laser\");\n            });\n\n        }\n    }\n\n    public class OwinPackageEndpoint\n    {\n        public string get_stuff_from_bottle()\n        {\n            return \"Check the headers\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/debugger.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Reflection;\r\nusing System.Threading.Tasks;\r\nusing FubuCore.Dates;\r\nusing FubuMVC.Core;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting\r\n{\r\n    [TestFixture, Explicit]\r\n    public class debugger\r\n    {\r\n        [Test]\r\n        public void try_to_load_asset_fixture()\r\n        {\r\n            var assembly = Assembly.Load(\"WebDriver\");\r\n            assembly.GetExportedTypes().Each(x => Console.WriteLine(x.FullName));\r\n        }\r\n\r\n        [Test]\r\n        public void try_to_load_the_serenity_assembly()\r\n        {\r\n            var assembly = Assembly.Load(\"Serenity\");\r\n            assembly.GetExportedTypes().Each(x => Console.WriteLine(x.FullName));\r\n        }\r\n\r\n        [Test]\r\n        public void try_to_create_ISystemTime()\r\n        {\r\n            using (var runtime = FubuRuntime.Basic())\r\n            {\r\n                runtime.Get<ISystemTime>().ShouldBeOfType<SystemTime>();\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void make_it_fail()\r\n        {\r\n            using (var runtime = FubuRuntime.Basic())\r\n            {\r\n                runtime.Scenario(_ =>\r\n                {\r\n                    _.Get.Action<ErrorEndpoint>(x => x.get_error2());\r\n                });\r\n\r\n            }\r\n        }\r\n    }\r\n\r\n    public class SomeService : IDisposable\r\n    {\r\n        public void Dispose()\r\n        {\r\n            Console.WriteLine(\"I was disposed.\");\r\n        }\r\n    }\r\n\r\n    public class ErrorEndpoint\r\n    {\r\n        private readonly SomeService _service;\r\n\r\n        public ErrorEndpoint(SomeService service)\r\n        {\r\n            _service = service;\r\n        }\r\n\r\n        public string get_error1()\r\n        {\r\n            throw new DivideByZeroException();\r\n        }\r\n\r\n        public Task<string> get_error2()\r\n        {\r\n            return Task.Factory.StartNew(() =>\r\n            {\r\n                throw new DivideByZeroException();\r\n\r\n                return \"hello\";\r\n            });\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/map_files_are_whitelisted.cs",
    "content": "﻿using NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting\r\n{\r\n    [TestFixture]\r\n    public class map_files_are_whitelisted\r\n    {\r\n        [Test]\r\n        public void read_MAP_file()\r\n        {\r\n            TestHost.Scenario(_ =>\r\n            {\r\n                _.Get.Url(\"test.map\");\r\n                _.StatusCodeShouldBeOk();\r\n                _.ContentShouldContain(\"Some content in a .map file\");\r\n            });\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/paket.references",
    "content": "Castle.Core\nFixie\nFubuCore\nHtmlTags\nMicrosoft.CompilerServices.AsyncTargetingPack\nMicrosoft.Owin\nMicrosoft.Owin.Host.HttpListener\nMicrosoft.Owin.Hosting\nNewtonsoft.Json\nNowin\nOwin\nRavenDB.Client\nRhinoMocks\nSelenium.RC\nSelenium.Support\nSelenium.WebDriver\nSelenium.WebDriverBackedSelenium\nShouldly\nSpark\nStoryteller\nstructuremap\nLightningQueues\nLightningDB\nJetbrains.Profiler.Kernel.Windows.Api"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/performance_timing_smoke_tester.cs",
    "content": "﻿using System.Diagnostics;\r\nusing FubuMVC.Core;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.IntegrationTesting\r\n{\r\n    [TestFixture]\r\n    public class performance_timing_smoke_tester\r\n    {\r\n        [Test]\r\n        public void see_what_it_looks_like()\r\n        {\r\n            using (var runtime = FubuRuntime.Basic())\r\n            {\r\n                Debug.WriteLine(runtime.ActivationDiagnostics.Timer.DisplayTimings());\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/public/1.0.1/d.js",
    "content": "﻿"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/public/1.0.1/e.js",
    "content": "﻿"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/public/1.0.1/f.js",
    "content": "﻿"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/public/javascript/a.js",
    "content": "﻿"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/public/javascript/b.js",
    "content": "﻿"
  },
  {
    "path": "src/FubuMVC.IntegrationTesting/public/javascript/c.js",
    "content": "﻿"
  },
  {
    "path": "src/FubuMVC.LightningQueues/.package-manifest",
    "content": "<?xml version=\"1.0\"?>\n<package xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <Role>module</Role>\n  <Name>FubuTransportation.LightningQueues</Name>\n  <assembly>FubuTransportation.LightningQueues</assembly>\n  <ContentFileSet Include=\"*.*\" Exclude=\"*.cs;bin/*;obj/*;*.csproj*;packages.config;repositories.config;pak-*.zip;*.sln;data/*;config/*\">\n    <DeepSearch>true</DeepSearch>\n  </ContentFileSet>\n</package>"
  },
  {
    "path": "src/FubuMVC.LightningQueues/Diagnostics/ErrorMessageInputModel.cs",
    "content": "﻿namespace FubuMVC.LightningQueues.Diagnostics\n{\n    public class ErrorMessageInputModel : MessageInputModel\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues/Diagnostics/ErrorQueueMessageVisualization.cs",
    "content": "﻿namespace FubuMVC.LightningQueues.Diagnostics\n{\n    public class ErrorQueueMessageVisualization : QueueMessageVisualization\n    {\n        public ExceptionDetails ExceptionDetails { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues/Diagnostics/ExceptionDetails.cs",
    "content": "﻿namespace FubuMVC.LightningQueues.Diagnostics\n{\n    public class ExceptionDetails\n    {\n        public string Explanation { get; set; }\n        public string ExceptionType { get; set; }\n        public string ExceptionMessage { get; set; }\n        public string ExceptionText { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues/Diagnostics/LightningQueuesFubuDiagnostics.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing FubuMVC.Core.Services;\nusing LightningQueues;\n\nnamespace FubuMVC.LightningQueues.Diagnostics\n{\n    public class LightningQueuesFubuDiagnostics\n    {\n        private readonly IPersistentQueues _queues;\n        private readonly IQueueMessageRetrieval _queueMessageRetrieval;\n        private readonly IEnvelopeSerializer _serializer;\n\n        public LightningQueuesFubuDiagnostics(IPersistentQueues queues, IQueueMessageRetrieval queueMessageRetrieval,\n            IEnvelopeSerializer serializer)\n        {\n            _queues = queues;\n            _queueMessageRetrieval = queueMessageRetrieval;\n            _serializer = serializer;\n        }\n\n        public QueueManagersVisualization get_queues()\n        {\n            var visualization = new QueueManagersVisualization\n            {\n                QueueManagers = _queues.AllQueueManagers.Select(x => new QueueManagerModel(x)).ToList()\n            };\n\n            return visualization;\n        }\n\n\n        public QueueMessagesVisualization get_messages_Port_QueueName(MessagesInputModel input)\n        {\n            var request = new QueueMessageRetrievalRequest\n            {\n                Port = input.Port,\n                QueueName = input.QueueName\n            };\n\n            var messages = _queueMessageRetrieval.GetAllMessagesInQueue(request).Select(msg =>\n            {\n                var summary = new MessageSummary\n                {\n                    id = msg.Id.ToString(),\n                    sentat = msg.SentAt.ToString(),\n                    sourceinstanceid = msg.Id.SourceInstanceId.ToString(),\n                    headers = msg.Headers\n                };\n\n                if (msg is OutgoingMessage)\n                {\n                    summary.destination = msg.As<OutgoingMessage>().Destination.ToString();\n                }\n\n\n                return summary;\n            }).ToArray();\n\n            return new QueueMessagesVisualization\n            {\n                Port = input.Port,\n                QueueName = input.QueueName,\n                Messages = messages\n            };\n        }\n\n        public QueueMessageVisualization get_message_Port_QueueName_SourceInstanceId_MessageId(MessageInputModel input)\n        {\n            var messageId = MessageId.Parse($\"{input.SourceInstanceId}/{input.MessageId}\");\n\n            var message = retrieveMessage(messageId, input.Port, input.QueueName);\n\n            if (message == null)\n            {\n                return new QueueMessageVisualization {NotFound = true};\n            }\n\n            var model = new QueueMessageVisualization\n            {\n                MessageId = messageId,\n                QueueName = message.Queue,\n                SentAt = message.SentAt,\n                Headers = message.Headers,\n                Port = input.Port\n            };\n            try\n            {\n                object payload;\n                var envelope = message.ToEnvelope();\n                envelope.UseSerializer(_serializer);\n                if (input.QueueName == \"errors\")\n                {\n                    var errorReport = ErrorReport.Deserialize(message.Data);\n                    message = new Message\n                    {\n                        Data = errorReport.RawData,\n                        Headers = errorReport.Headers,\n                        Id = messageId,\n                        Queue = input.QueueName,\n                    };\n                    envelope = message.ToEnvelope();\n                    var originalMessage = _serializer.Deserialize(envelope);\n                    var errorSummary = new ErrorSummary\n                    {\n                        exceptiontype = errorReport.ExceptionType,\n                        exceptionmessage = errorReport.ExceptionMessage,\n                        exceptiontext = errorReport.ExceptionText,\n                        originalmessage = originalMessage\n                    };\n                    payload = errorSummary;\n                }\n                else\n                {\n                    payload = envelope.Message;\n                }\n\n\n                model.Payload = JsonSerialization.ToJson(payload, true);\n            }\n            catch (Exception)\n            {\n                model.Payload = \"Could not render as JSON\";\n            }\n\n            return model;\n        }\n\n\n        private Message retrieveMessage(MessageId messageId, int port, string queueName)\n        {\n            var request = new QueueMessageRetrievalRequest\n            {\n                Port = port,\n                QueueName = queueName,\n                MessageId = new MessageId\n                {\n                    MessageIdentifier = messageId.MessageIdentifier,\n                    SourceInstanceId = messageId.SourceInstanceId\n                }\n            };\n\n            return _queueMessageRetrieval.GetSingleMessageInQueue(request);\n        }\n    }\n\n    public class ErrorSummary\n    {\n        public string exceptiontype { get; set; }\n        public string exceptionmessage { get; set; }\n        public string exceptiontext { get; set; }\n        public object originalmessage { get; set; }\n    }\n\n    public class MessageSummary\n    {\n        public MessageSummary()\n        {\n            destination = \"n/a\";\n        }\n\n        public string id { get; set; }\n        public string sentat { get; set; }\n        public string sourceinstanceid { get; set; }\n        public IDictionary<string, string> headers { get; set; }\n        public string destination { get; set; }\n    }\n\n    public class QueueMessagesVisualization\n    {\n        public string QueueName { get; set; }\n        public MessageSummary[] Messages { get; set; }\n        public int Port { get; set; }\n    }\n\n    public class MessagesInputModel\n    {\n        public int Port { get; set; }\n        public string QueueName { get; set; }\n    }\n\n    public class QueueDto\n    {\n        public string QueueName { get; set; }\n        public int Port { get; set; }\n        public int NumberOfMessages { get; set; }\n    }\n\n    public class QueueManagersVisualization\n    {\n        public IList<QueueManagerModel> QueueManagers { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.LightningQueues/Diagnostics/MessageInputModel.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.LightningQueues.Diagnostics\n{\n    public class MessageInputModel\n    {\n        public string MessageId { get; set; }\n        public string SourceInstanceId { get; set; }\n        public int Port { get; set; }\n        public string QueueName { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.LightningQueues/Diagnostics/QueueManagerModel.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Reactive.Linq;\nusing LightningQueues;\nusing LightningQueues.Storage.LMDB;\n\nnamespace FubuMVC.LightningQueues.Diagnostics\n{\n    public class QueueManagerModel\n    {\n        public QueueManagerModel(Queue queueManager)\n        {\n            var lmdbStore = queueManager.Store as LmdbMessageStore;\n            Path = lmdbStore == null ? \"No path\" : lmdbStore.Environment.Path;\n            Port = queueManager.Endpoint.Port;\n            Queues = buildQueues(queueManager).ToArray();\n        }\n\n        public int Port { get; set; }\n        public string Path { get; set; }\n        public QueueDto[] Queues { get; set; }\n\n\n        private IEnumerable<QueueDto> buildQueues(Queue queues)\n        {\n            foreach (var queue in queues.Queues)\n            {\n                yield return new QueueDto\n                {\n                    Port = queues.Endpoint.Port,\n                    QueueName = queue,\n                    NumberOfMessages = queues.Store.PersistedMessages(queue).ToEnumerable().Count()\n                };\n            }\n            yield return new QueueDto\n            {\n                Port = queues.Endpoint.Port,\n                QueueName = \"outgoing\",\n                NumberOfMessages = queues.Store.PersistedOutgoingMessages().ToEnumerable().Count()\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.LightningQueues/Diagnostics/QueueMessageRetrieval.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reactive.Linq;\nusing LightningQueues;\n\nnamespace FubuMVC.LightningQueues.Diagnostics\n{\n    public class QueueMessageRetrieval : IQueueMessageRetrieval\n    {\n        private readonly IPersistentQueues _queues;\n\n        private static readonly IEnumerable<QueueMessagesRetrievalStrategy> MessageRetrievalStrategies =\n            new List<QueueMessagesRetrievalStrategy>\n            {\n                new QueueMessagesRetrievalStrategy\n                {\n                    CanHandle = req => req.QueueName == \"outgoing\",\n                    Execute = (req, queue) => queue.Store.PersistedOutgoingMessages().ToEnumerable().ToArray(),\n                    ExecuteForSingleMessage = (req, queue) => queue.Store.GetMessage(\"outgoing\", req.MessageId)\n                },\n                new QueueMessagesRetrievalStrategy\n                {\n                    CanHandle = _ => true,\n                    Execute = (req, queue) => queue.Store.PersistedMessages(req.QueueName).ToEnumerable().ToArray(),\n                    ExecuteForSingleMessage = (req, queue) => queue.Store.GetMessage(req.QueueName, req.MessageId)\n                }\n            };\n\n        public QueueMessageRetrieval(IPersistentQueues queues)\n        {\n            _queues = queues;\n        }\n\n        public IEnumerable<Message> GetAllMessagesInQueue(QueueMessageRetrievalRequest request)\n        {\n            return MessageRetrievalStrategies\n                .First(x => x.CanHandle(request))\n                .Execute(request, GetQueueManager(request));\n        }\n\n        public Message GetSingleMessageInQueue(QueueMessageRetrievalRequest request)\n        {\n            return MessageRetrievalStrategies\n                .First(x => x.CanHandle(request))\n                .ExecuteForSingleMessage(request, GetQueueManager(request));\n        }\n\n        private Queue GetQueueManager(QueueMessageRetrievalRequest request)\n        {\n            return _queues.AllQueueManagers.Single(x => x.Endpoint.Port == request.Port);\n        }\n\n        private class QueueMessagesRetrievalStrategy\n        {\n            public Func<QueueMessageRetrievalRequest, bool> CanHandle { get; set; }\n            public Func<QueueMessageRetrievalRequest, Queue, IEnumerable<Message>> Execute { get; set; }\n            public Func<QueueMessageRetrievalRequest, Queue, Message> ExecuteForSingleMessage { get; set; }\n        }\n    }\n\n    public interface IQueueMessageRetrieval\n    {\n        IEnumerable<Message> GetAllMessagesInQueue(QueueMessageRetrievalRequest request);\n        Message GetSingleMessageInQueue(QueueMessageRetrievalRequest request);\n    }\n\n    public class QueueMessageRetrievalRequest\n    {\n        public int Port { get; set; }\n        public string QueueName { get; set; }\n        public MessageId MessageId { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.LightningQueues/Diagnostics/QueueMessageVisualization.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing LightningQueues;\n\nnamespace FubuMVC.LightningQueues.Diagnostics\n{\n\n    public class QueueMessageVisualization\n    {\n        public MessageId MessageId { get; set; }\n        public string QueueName { get; set; }\n        public DateTime SentAt { get; set; }\n        public IDictionary<string, string> Headers { get; set; }\n        public string Payload { get; set; }\n\n        public bool NotFound { get; set; }\n        public int Port { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.LightningQueues/FubuLoggingAdapter.cs",
    "content": "using System;\nusing FubuCore.Logging;\n\nnamespace FubuMVC.LightningQueues\n{\n    public class FubuLoggingAdapter : global::LightningQueues.Logging.ILogger\n    {\n        private readonly ILogger _logger;\n\n        public FubuLoggingAdapter(ILogger logger)\n        {\n            _logger = logger;\n        }\n\n        public void Debug(string message)\n        {\n            _logger.Debug(message);\n        }\n\n        public void DebugFormat(string message, params object[] args)\n        {\n            _logger.Debug(message, args);\n        }\n\n        public void DebugFormat(string message, object arg1, object arg2)\n        {\n            _logger.Debug(string.Format(message, arg1, arg2));\n        }\n\n        public void DebugFormat(string message, object arg1)\n        {\n            _logger.Debug(string.Format(message, arg1));\n        }\n\n        public void Error(string message, Exception exception)\n        {\n            _logger.Error(message, exception);\n        }\n\n        public void Info(string message)\n        {\n            _logger.Info(message);\n        }\n\n        public void InfoFormat(string message, params object[] args)\n        {\n            _logger.Info(message, args);\n        }\n\n        public void InfoFormat(string message, object arg1, object arg2)\n        {\n            _logger.Info(message, arg1, arg2);\n        }\n\n        public void InfoFormat(string message, object arg1)\n        {\n            _logger.Info(message, arg1);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues/FubuMVC.LightningQueues.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{F151167C-4736-4C67-9697-7876574C05D0}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>FubuMVC.LightningQueues</RootNamespace>\n    <AssemblyName>FubuMVC.LightningQueues</AssemblyName>\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\CommonAssemblyInfo.cs\">\n      <Link>CommonAssemblyInfo.cs</Link>\n    </Compile>\n    <Compile Include=\"Diagnostics\\ErrorMessageInputModel.cs\" />\n    <Compile Include=\"Diagnostics\\ErrorQueueMessageVisualization.cs\" />\n    <Compile Include=\"Diagnostics\\ExceptionDetails.cs\" />\n    <Compile Include=\"Diagnostics\\LightningQueuesFubuDiagnostics.cs\" />\n    <Compile Include=\"Diagnostics\\MessageInputModel.cs\" />\n    <Compile Include=\"Diagnostics\\QueueManagerModel.cs\" />\n    <Compile Include=\"Diagnostics\\QueueMessageRetrieval.cs\" />\n    <Compile Include=\"Diagnostics\\QueueMessageVisualization.cs\" />\n    <Compile Include=\"FubuLoggingAdapter.cs\" />\n    <Compile Include=\"IPersistentQueues.cs\" />\n    <Compile Include=\"LightningQueuesChannel.cs\" />\n    <Compile Include=\"LightningQueueSettings.cs\" />\n    <Compile Include=\"LightningQueuesExtension.cs\" />\n    <Compile Include=\"LightningQueuesReplyChannel.cs\" />\n    <Compile Include=\"LightningQueuesTransport.cs\" />\n    <Compile Include=\"LightningUri.cs\" />\n    <Compile Include=\"PersistentQueues.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"TransactionCallback.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"LightningDB;System.AppContext;System.Dynamic.Runtime;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Runtime.InteropServices.WindowsRuntime;System.Runtime.WindowsRuntime;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <EmbeddedResource Include=\"..\\DiagnosticsHarness\\fubu-diagnostics\\lq.js\">\n      <Link>fubu-diagnostics\\lq.js</Link>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"Diagnostics\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"..\\..\\packages\\LightningDB\\runtimes\\win7-x86\\native\\lmdb.dll\">\n      <Link>x86\\lmdb.dll</Link>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"..\\..\\packages\\LightningDB\\runtimes\\win7-x64\\native\\lmdb.dll\">\n      <Link>x64\\lmdb.dll</Link>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"HtmlTags\">\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"LightningDB\">\n          <HintPath>..\\..\\packages\\LightningDB\\lib\\net45\\LightningDB.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"LightningDB\">\n          <HintPath>..\\..\\packages\\LightningDB\\lib\\netstandard1.3\\LightningDB.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"LightningQueues\">\n          <HintPath>..\\..\\packages\\LightningQueues\\lib\\net46\\LightningQueues.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"LightningQueues\">\n          <HintPath>..\\..\\packages\\LightningQueues\\lib\\netstandard1.3\\LightningQueues.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"LightningQueues.Storage.LMDB\">\n          <HintPath>..\\..\\packages\\LightningQueues.Storage.LMDB\\lib\\net46\\LightningQueues.Storage.LMDB.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"LightningQueues.Storage.LMDB\">\n          <HintPath>..\\..\\packages\\LightningQueues.Storage.LMDB\\lib\\netstandard1.3\\LightningQueues.Storage.LMDB.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Primitives\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0')\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net20\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net35\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net40\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net45\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v3.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl3\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl4\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v7.1' Or $(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl4-windowsphone71\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl5\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Owin\">\n          <HintPath>..\\..\\packages\\Owin\\lib\\net40\\Owin.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.AppContext\">\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Buffers\">\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.ComponentModel\">\n          <HintPath>..\\..\\packages\\System.ComponentModel\\ref\\netstandard1.0\\System.ComponentModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Console\">\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tools\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.0\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.3\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Calendars\">\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Extensions\">\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression\">\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression.ZipFile\">\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http\">\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Primitives\">\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\net45\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\net46\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netcore451\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netcoreapp1.0\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netstandard1.0\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netstandard1.1\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netstandard1.3\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\wpa81\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Interfaces\">\n          <HintPath>..\\..\\packages\\System.Reactive.Interfaces\\lib\\net45\\System.Reactive.Interfaces.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Interfaces\">\n          <HintPath>..\\..\\packages\\System.Reactive.Interfaces\\lib\\netstandard1.0\\System.Reactive.Interfaces.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\net45\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\net46\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\netstandard1.0\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2'))\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\netstandard1.1\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\netstandard1.3\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\net45\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\net46\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netcore451\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netcoreapp1.0\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netstandard1.0\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netstandard1.3\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\wpa81\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Windows.Threading\">\n          <HintPath>..\\..\\packages\\System.Reactive.Windows.Threading\\lib\\net45\\System.Reactive.Windows.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"WindowsBase\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Windows.Threading\">\n          <HintPath>..\\..\\packages\\System.Reactive.Windows.Threading\\lib\\netcore451\\System.Reactive.Windows.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Windows.Threading\">\n          <HintPath>..\\..\\packages\\System.Reactive.Windows.Threading\\lib\\wpa81\\System.Reactive.Windows.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.WindowsRuntime\">\n          <HintPath>..\\..\\packages\\System.Reactive.WindowsRuntime\\lib\\netcore451\\System.Reactive.WindowsRuntime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.WindowsRuntime\">\n          <HintPath>..\\..\\packages\\System.Reactive.WindowsRuntime\\lib\\wpa81\\System.Reactive.WindowsRuntime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Extensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Primitives\">\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Resources.ResourceManager\">\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Handles\">\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.WindowsRuntime\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.WindowsRuntime\\ref\\netstandard1.0\\System.Runtime.InteropServices.WindowsRuntime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Loader\">\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Numerics\">\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.WindowsRuntime\">\n          <HintPath>..\\..\\packages\\System.Runtime.WindowsRuntime\\ref\\netstandard1.2\\System.Runtime.WindowsRuntime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Cng\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Csp\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Thread\">\n          <HintPath>..\\..\\packages\\System.Threading.Thread\\ref\\netstandard1.3\\System.Threading.Thread.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.ThreadPool\">\n          <HintPath>..\\..\\packages\\System.Threading.ThreadPool\\ref\\netstandard1.3\\System.Threading.ThreadPool.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Timer\">\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/FubuMVC.LightningQueues/IPersistentQueues.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing LightningQueues;\n\nnamespace FubuMVC.LightningQueues\n{\n    public interface IPersistentQueues : IDisposable\n    {\n        IEnumerable<Queue> AllQueueManagers { get; }\n        void ClearAll();\n        Queue PersistentManagerFor(int port, bool incoming, int mapSize = 1024*1024*100, int maxDatabases = 5);\n        Queue NonPersistentManagerFor(int port, bool incoming);\n        Queue ManagerForReply();\n        void Start(IEnumerable<LightningUri> uriList);\n\n        void CreateQueue(LightningUri uri);\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues/LightningQueueSettings.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuCore.Descriptions;\n\nnamespace FubuMVC.LightningQueues\n{\n    public class LightningQueueSettings : DescribesItself\n    {\n        public LightningQueueSettings()\n        {\n            DefaultPort = 2020;\n            MaxDatabases = 5;\n            MapSize = 1024*1024*100;\n        }\n\n        public void Describe(Description description)\n        {\n            description.ShortDescription = \"Lightning Queues Configuration\";\n\n            description.Properties[nameof(DefaultPort)] = DefaultPort.ToString();\n            description.Properties[nameof(MaxDatabases)] = MaxDatabases.ToString();\n            description.Properties[nameof(MapSize)] = MapSize.ToString();\n        }\n\n        public bool Disabled { get; set; }\n        public int DefaultPort { get; set; } \n\n        /// <summary>\n        /// Setting this flag to \"true\" will disable\n        /// the LightningQueues transport if there\n        /// are no LightningQueues channels\n        /// </summary>\n        public bool DisableIfNoChannels { get; set; }\n\n        /// <summary>\n        /// The number of databases (queues) allowed for the lmdb storage, default is 5\n        /// </summary>\n        public int MaxDatabases { get; set; }\n\n        /// <summary>\n        /// The maximum map size in bytes for the underlying lmdb storage, default is 100 MB in bytes\n        /// </summary>\n        public int MapSize { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues/LightningQueuesChannel.cs",
    "content": "using System;\nusing System.Reactive.Disposables;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\nusing LightningQueues;\n\nnamespace FubuMVC.LightningQueues\n{\n    public class LightningQueuesChannel : IChannel\n    {\n        public static string MaxAttemptsHeader = \"max-delivery-attempts\";\n        public static string DeliverByHeader = \"deliver-by\";\n        private readonly string _queueName;\n        private readonly Queue _queueManager;\n        private IDisposable _disposable;\n\n        public static LightningQueuesChannel BuildPersistentChannel(LightningUri uri, IPersistentQueues queues, int mapSize, int maxDatabases, bool incoming)\n        {\n            var queueManager = queues.PersistentManagerFor(uri.Port, incoming, mapSize, maxDatabases);\n            return new LightningQueuesChannel(uri.Address, uri.QueueName, queueManager);\n        }\n\n        public static LightningQueuesChannel BuildNoPersistenceChannel(LightningUri uri, IPersistentQueues queues, bool incoming)\n        {\n            var queueManager = queues.NonPersistentManagerFor(uri.Port, incoming);\n            return new LightningQueuesChannel(uri.Address, uri.QueueName, queueManager);\n        }\n\n        public LightningQueuesChannel(Uri address, string queueName, Queue queueManager)\n        {\n            Address = address;\n            _queueName = queueName;\n            _queueManager = queueManager;\n            _disposable = Disposable.Empty;\n        }\n\n        public Uri Address { get; }\n\n        public ReceivingState Receive(IReceiver receiver)\n        {\n            _disposable = _queueManager.Receive(_queueName).Subscribe(message =>\n            {\n                Task.Run(() =>\n                {\n                    receiver.Receive(message.Message.Data, new DictionaryHeaders(message.Message.Headers),\n                        new TransactionCallback(message.QueueContext, message.Message));\n                });\n            });\n\n            return ReceivingState.StopReceiving;\n        }\n\n        public void Send(byte[] data, IHeaders headers)\n        {\n            _queueManager.Send(data, headers, Address, _queueName);\n        }\n\n\n        public void Dispose()\n        {\n            _disposable.Dispose();\n        }\n    }\n\n    public static class MessageExtensions\n    {\n        public static Envelope ToEnvelope(this Message message)\n        {\n            var envelope = new Envelope(new DictionaryHeaders(message.Headers))\n            {\n                Data = message.Data\n            };\n\n            return envelope;\n        }\n\n        public static EnvelopeToken ToToken(this Message message)\n        {\n            return new EnvelopeToken\n            {\n                Data = message.Data,\n                Headers = new DictionaryHeaders(message.Headers)\n            };\n        }\n\n        public static Message Copy(this Message message)\n        {\n            var copy = new Message\n            {\n                Data = message.Data,\n                Headers = message.Headers,\n            };\n\n            return copy;\n        }\n\n        public static DateTime ExecutionTime(this Message message)\n        {\n            return message.ToEnvelope().ExecutionTime.Value;\n        }\n\n        public static void TranslateHeaders(this OutgoingMessage messagePayload)\n        {\n            string headerValue;\n            messagePayload.Headers.TryGetValue(LightningQueuesChannel.MaxAttemptsHeader, out headerValue);\n            if (headerValue.IsNotEmpty())\n            {\n                messagePayload.MaxAttempts = int.Parse(headerValue);\n            }\n            messagePayload.Headers.TryGetValue(LightningQueuesChannel.DeliverByHeader, out headerValue);\n            if (headerValue.IsNotEmpty())\n            {\n                messagePayload.DeliverBy = DateTime.Parse(headerValue);\n            }\n        }\n\n        public static void Send(this Queue queueManager, byte[] data, IHeaders headers, Uri address, string queueName)\n        {\n            var messagePayload = new OutgoingMessage\n            {\n                Id = MessageId.GenerateRandom(),\n                Data = data,\n                Headers = headers.ToDictionary(),\n                SentAt = DateTime.UtcNow,\n                Destination = address,\n                Queue = queueName,\n            };\n            //TODO Maybe expose something to modify transport specific payloads?\n            messagePayload.TranslateHeaders();\n\n\n            queueManager.Send(messagePayload);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues/LightningQueuesExtension.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.LightningQueues.Diagnostics;\n\nnamespace FubuMVC.LightningQueues\n{\n    public class LightningQueuesExtension : IFubuRegistryExtension\n    {\n        public void Configure(FubuRegistry registry)\n        {\n            registry.Services.IncludeRegistry<LightningQueuesServiceRegistry>();\n        }\n    }\n\n    public class LightningQueuesServiceRegistry : ServiceRegistry\n    {\n        public LightningQueuesServiceRegistry()\n        {\n            AddService<ITransport, LightningQueuesTransport>();\n            AddService<IQueueMessageRetrieval, QueueMessageRetrieval>(); // For diagnostics\n            SetServiceIfNone<IPersistentQueues, PersistentQueues>().Singleton();\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.LightningQueues/LightningQueuesReplyChannel.cs",
    "content": "using System;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\nusing LightningQueues;\n\nnamespace FubuMVC.LightningQueues\n{\n    public class LightningQueuesReplyChannel : IChannel\n    {\n        private readonly Queue _queueManager;\n        private readonly string _queueName;\n\n        public LightningQueuesReplyChannel(Uri destination, Queue queueManager, string queueName)\n        {\n            _queueManager = queueManager;\n            _queueName = queueName;\n            Address = destination;\n        }\n\n        public void Dispose()\n        {\n        }\n\n        public Uri Address { get; private set; }\n        public ReceivingState Receive(IReceiver receiver)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void Send(byte[] data, IHeaders headers)\n        {\n            _queueManager.Send(data, headers, Address, _queueName);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues/LightningQueuesTransport.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace FubuMVC.LightningQueues\n{\n    public class LightningQueuesTransport : TransportBase, ITransport\n    {\n        private const string StaticLibraryName = \"lmdb.dll\";\n        private static readonly bool _exported = false;\n\n        static LightningQueuesTransport()\n        {\n            if (!_exported)\n            {\n                try\n                {\n                    var shouldWrite = true;\n                    var folder = Environment.Is64BitProcess ? \"x64\" : \"x86\";\n                    var assembly = Assembly.GetExecutingAssembly();\n                    byte[] resourceAssemblyBytes;\n\n                    string resourceName = $\"FubuMVC.LightningQueues.{folder}.{StaticLibraryName}\";\n\n                    var stream = assembly.GetManifestResourceStream(resourceName);\n                    using (var memoryStream = new MemoryStream())\n                    {\n                        stream.CopyTo(memoryStream);\n                        resourceAssemblyBytes = memoryStream.GetBuffer();\n                    }\n\n                    //var path = Path.GetDirectoryName(typeof(LightningQueuesTransport).Assembly.CodeBase).AppendPath(StaticLibraryName).Replace(@\"file:\\\", string.Empty);\n                    var path = Path.GetDirectoryName(new Uri(typeof(LightningQueuesTransport).Assembly.CodeBase).LocalPath)\n                        .AppendPath(StaticLibraryName);\n                    Console.WriteLine($\"Checking to see if {path} exists\");\n                    if (File.Exists(path))\n                    {\n                        var existingBytes = File.ReadAllBytes(path);\n                        shouldWrite = !resourceAssemblyBytes.SequenceEqual(existingBytes);\n                    }\n                    if (shouldWrite)\n                    {\n                        File.WriteAllBytes(path, resourceAssemblyBytes);\n                        Console.WriteLine($\"Successfully wrote resource {resourceName} to {path}\");\n                    }\n                }\n                catch (Exception e)\n                {\n                    Console.WriteLine(\"Unable to write the lmdb.dll file-->\\n\\n\" + e);\n                }\n                finally\n                {\n                    _exported = true;\n                }\n            }\n        }\n\n\n        public static readonly string ErrorQueueName = \"errors\";\n\n        private readonly IPersistentQueues _queues;\n        private readonly LightningQueueSettings _settings;\n\n        public LightningQueuesTransport(IPersistentQueues queues, LightningQueueSettings settings)\n        {\n            _queues = queues;\n            _settings = settings;\n        }\n\n        public void Dispose()\n        {\n            // IPersistentQueues is disposable\n        }\n\n        public override string Protocol => LightningUri.Protocol;\n\n        public override bool Disabled(IEnumerable<ChannelNode> nodes)\n        {\n            if (_settings.Disabled) return true;\n\n            if (!nodes.Any() && _settings.DisableIfNoChannels) return true;\n\n            return false;\n        }\n\n        public IChannel BuildDestinationChannel(Uri destination)\n        {\n            var lqUri = new LightningUri(destination);\n            return new LightningQueuesReplyChannel(destination, _queues.ManagerForReply(), lqUri.QueueName);\n        }\n\n        public IEnumerable<EnvelopeToken> ReplayDelayed(DateTime currentTime)\n        {\n            return Enumerable.Empty<EnvelopeToken>();\n        }\n\n        public void ClearAll()\n        {\n            _queues.ClearAll();\n        }\n\n        protected override IChannel buildChannel(ChannelNode channelNode)\n        {\n            var uri = new LightningUri(channelNode.Uri);\n            return channelNode.Mode == ChannelMode.DeliveryGuaranteed\n                ? LightningQueuesChannel.BuildPersistentChannel(uri, _queues, _settings.MapSize, _settings.MaxDatabases, channelNode.Incoming)\n                : LightningQueuesChannel.BuildNoPersistenceChannel(uri, _queues, channelNode.Incoming);\n        }\n\n\n        protected override void seedQueues(IEnumerable<ChannelNode> channels)\n        {\n            var groups = channels.Where(x => x.Incoming).GroupBy(x => x.Uri.Port).Where(x => x.Count() > 1);\n            foreach (var group in groups)\n            {\n                if (group.Select(x => x.Mode).Distinct().Count() > 1)\n                {\n                    throw new InvalidOperationException($\"The LightningQueues listener for port {group.Key} has mixed channel modes. Either make the modes be the same or use a different port number\");\n                }\n            }\n\n\n            _queues.Start(channels.Where(x => x.Incoming).Select(x => new LightningUri(x.Uri)));\n        }\n\n        protected override Uri getReplyUri(ChannelGraph graph)\n        {\n            var channelNode = graph.FirstOrDefault(x => x.Protocol() == LightningUri.Protocol && x.Incoming && x.Mode == ChannelMode.DeliveryGuaranteed)\n                ?? graph.FirstOrDefault(x => x.Protocol() == LightningUri.Protocol && x.Incoming && x.Mode == ChannelMode.DeliveryFastWithoutGuarantee);\n            if (channelNode == null)\n                throw new InvalidOperationException(\"You must have at least one incoming Lightning Queue channel for accepting replies\");\n\n            return channelNode.Channel.Address.ToLocalUri();\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.LightningQueues/LightningUri.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace FubuMVC.LightningQueues\n{\n    public class LightningUri\n    {\n        public static readonly string Protocol = \"lq.tcp\";\n\n        public LightningUri(string uriString) : this(new Uri(uriString))\n        {\n            \n        }\n\n        public LightningUri(Uri address)\n        {\n            if (address.Scheme != Protocol)\n            {\n                throw new ArgumentOutOfRangeException(\n                    $\"{address.Scheme} is the wrong protocol for a LightningQueue Uri.  Only {Protocol} is accepted\");\n            }\n\n            Address = address.ToMachineUri();\n            Port = address.Port;\n\n            QueueName = Address.Segments.Last();\n        }\n\n        public Uri Address { get; }\n\n        public int Port { get; }\n\n        public string QueueName { get; }\n    }\n\n    public static class UriExtensions\n    {\n        private static readonly HashSet<string> _locals = new HashSet<string>(new[]{\"localhost\", \"127.0.0.1\"}, StringComparer.OrdinalIgnoreCase);\n\n        public static LightningUri ToLightningUri(this Uri uri)\n        {\n            return new LightningUri(uri);\n        }\n\n        public static LightningUri ToLightningUri(this string uri)\n        {\n            return new LightningUri(uri);\n        }\n\n        public static Uri ToMachineUri(this Uri uri)\n        {\n            if (_locals.Contains(uri.Host))\n            {\n                return uri.ToLocalUri();\n            }\n            return uri;\n        }\n\n        public static Uri ToLocalUri(this Uri uri)\n        {\n            return new UriBuilder(uri) { Host = Environment.MachineName }.Uri;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues/PersistentQueues.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Reactive.Concurrency;\nusing System.Runtime.Serialization;\nusing FubuCore.Util;\nusing LightningDB;\nusing LightningQueues;\nusing FubuCore.Logging;\nusing LightningQueues.Storage;\nusing LightningQueues.Storage.LMDB;\n\nnamespace FubuMVC.LightningQueues\n{\n    public class PersistentQueues : IPersistentQueues\n    {\n        private readonly ILogger _logger;\n        public string QueuePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"fubutransportationqueues\");\n\n        private readonly Cache<int, Queue> _queueManagers;\n\n        public PersistentQueues(ILogger logger)\n        {\n            _logger = logger;\n            _queueManagers = new Cache<int, Queue>();\n        }\n\n        private Queue GetQueue(int port, bool persist, bool incoming, int mapSize = 1024*1024*100, int maxDatabases = 5)\n        {\n            if (!incoming)\n            {\n                //Shouldn't create one here because it shouldn't be listening\n                return _queueManagers.First();\n            }\n            if (_queueManagers.Has(port))\n            {\n                return _queueManagers[port];\n            }\n            return CreateQueue(port, persist, mapSize, maxDatabases);\n        }\n\n        private Queue CreateQueue(int port, bool persist, int mapSize = 1024*1024*100, int maxDatabases = 5)\n        {\n            var queueConfiguration = new QueueConfiguration()\n                .ReceiveMessagesAt(new IPEndPoint(IPAddress.Any, port))\n                .ScheduleQueueWith(TaskPoolScheduler.Default)\n                .LogWith(new FubuLoggingAdapter(_logger));\n\n            if (persist)\n            {\n                queueConfiguration.StoreWithLmdb(QueuePath + \".\" + port, new EnvironmentConfiguration { MaxDatabases = maxDatabases, MapSize = mapSize });\n            }\n            else\n            {\n                queueConfiguration.UseNoStorage();\n            }\n            var queue = queueConfiguration.BuildQueue();\n            _queueManagers.Fill(port, queue);\n            return queue;\n        }\n\n        public void Dispose()\n        {\n            _queueManagers.Each(x => x.Dispose());\n        }\n\n        public IEnumerable<Queue> AllQueueManagers => _queueManagers.GetAll();\n\n        public void ClearAll()\n        {\n            _queueManagers.Each(x => x.Store.ClearAllStorage());\n        }\n\n        public Queue PersistentManagerFor(int port, bool incoming, int mapSize = 1024*1024*100, int maxDatabases = 5)\n        {\n            return GetQueue(port, true, incoming, mapSize, maxDatabases);\n        }\n\n        public Queue NonPersistentManagerFor(int port, bool incoming)\n        {\n            return GetQueue(port, false, incoming);\n        }\n\n        public Queue ManagerForReply()\n        {\n            return _queueManagers.First();\n        }\n\n        public void Start(IEnumerable<LightningUri> uriList)\n        {\n            uriList.GroupBy(x => x.Port).Each(group =>\n            {\n                try\n                {\n                    string[] queueNames = group.Select(x => x.QueueName).ToArray();\n\n                    var queueManager = GetQueue(@group.Key, true, true);\n                    queueNames.Each(x => queueManager.CreateQueue(x));\n                    queueManager.CreateQueue(LightningQueuesTransport.ErrorQueueName);\n                    queueManager.Start();\n                }\n                catch (Exception e)\n                {\n                    throw new LightningQueueTransportException(new IPEndPoint(IPAddress.Any, group.Key), e);\n                }\n            });\n        }\n\n        public void CreateQueue(LightningUri uri)\n        {\n            GetQueue(uri.Port, true, true).CreateQueue(uri.QueueName);\n        }\n    }\n\n    [Serializable]\n    public class LightningQueueTransportException : Exception\n    {\n        public LightningQueueTransportException(IPEndPoint endpoint, Exception innerException) : base(\"Error trying to initialize LightningQueues queue manager at \" + endpoint, innerException)\n        {\n        }\n\n        protected LightningQueueTransportException(SerializationInfo info, StreamingContext context) : base(info, context)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing FubuMVC.Core;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n\n[assembly: AssemblyTitle(\"FubuMVC.LightningQueues\")]\n[assembly: FubuModule]"
  },
  {
    "path": "src/FubuMVC.LightningQueues/TransactionCallback.cs",
    "content": "using System;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing LightningQueues;\n\nnamespace FubuMVC.LightningQueues\n{\n    public class TransactionCallback : IMessageCallback\n    {\n        private readonly Message _message;\n        private readonly IQueueContext _context;\n\n        public TransactionCallback(IQueueContext context, Message message)\n        {\n            _context = context;\n            _message = message;\n        }\n\n        public void MarkSuccessful()\n        {\n            _context.SuccessfullyReceived();\n            _context.CommitChanges();\n        }\n\n        public void MarkFailed(Exception ex)\n        {\n            _context.ReceiveLater(DateTimeOffset.Now);\n            _context.CommitChanges();\n        }\n\n        public void MoveToDelayedUntil(DateTime time)\n        {\n            _context.ReceiveLater(time.ToUniversalTime() - DateTime.UtcNow);\n            _context.CommitChanges();\n        }\n\n        public void MoveToErrors(ErrorReport report)\n        {\n            var message = new Message\n            {\n                Id = _message.Id,\n                Data = report.Serialize(),\n                //Headers = report.Headers\n            };\n\n            message.Headers.Add(\"ExceptionType\", report.ExceptionType);\n            message.Queue = LightningQueuesTransport.ErrorQueueName;\n\n            _context.Enqueue(message);\n            MarkSuccessful();\n        }\n\n        public void Requeue()\n        {\n            var copy = _message.Copy();\n            copy.Id = MessageId.GenerateRandom();\n            copy.Queue = _message.Queue;\n            _context.Enqueue(copy);\n            MarkSuccessful();\n        }\n\n        public void Send(Envelope envelope)\n        {\n            var uri = new LightningUri(envelope.Destination);\n\n            var message = new OutgoingMessage\n            {\n                Id = MessageId.GenerateRandom(),\n                Data = envelope.Data,\n                Headers = envelope.Headers.ToDictionary(),\n                SentAt = DateTime.UtcNow,\n                Destination = envelope.Destination,\n                Queue = uri.QueueName\n            };\n\n            message.TranslateHeaders();\n\n            _context.Send(message);\n        }\n\n        public bool SupportsSend { get; } = true;\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.LightningQueues/paket.references",
    "content": "FubuCore\nHtmlTags\nLightningQueues\nNLog\nOwin\nstructuremap\nLightningQueues.Storage.LMDB\nSystem.Reactive\nSystem.Net.Sockets"
  },
  {
    "path": "src/FubuMVC.LightningQueues.Testing/FixieConvention.cs",
    "content": "﻿using FubuMVC.Tests;\n\nnamespace FubuMVC.LightningQueues.Testing\n{\n    // Brings in the same Fixie conventions we use in FubuMVC.Tests\n    public class FixieConvention : CustomConvention\n    {\n         \n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues.Testing/FubuMVC.LightningQueues.Testing.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{289E231C-190E-4595-BD10-4007CA10CEE2}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>FubuMVC.LightningQueues.Testing</RootNamespace>\n    <AssemblyName>FubuMVC.LightningQueues.Testing</AssemblyName>\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Transactions\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"FixieConvention.cs\" />\n    <Compile Include=\"FubuTransportRegistryActivationTester.cs\" />\n    <Compile Include=\"Full_end_to_end_delayed_message_processing_with_Lightning_Queues.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"Full_end_to_end_error_processing_with_LightningQueues.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"LightningQueuesIntegrationTester.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"LightningQueuesServiceRegistry_spec.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"LightningQueuesTransport_disabled_behavior_Tester.cs\" />\n    <Compile Include=\"LightningUriTester.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"PersistentQueueTester.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"throws_descriptive_exception_if_no_incoming_lq_channel.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"HeaderTranslationTester.cs\" />\n    <Compile Include=\"throws_descriptive_message_if_a_single_port_has_mixed_modes.cs\" />\n    <Compile Include=\"TransactionCallbackTester.cs\" />\n    <Compile Include=\"UriExtensionsTester.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\FubuMVC.Tests\\FubuMVC.Tests.csproj\">\n      <Project>{feb91f9f-ece2-480c-b39c-a44bbf1f7b01}</Project>\n      <Name>FubuMVC.Tests</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\FubuMVC.LightningQueues\\FubuMVC.LightningQueues.csproj\">\n      <Project>{f151167c-4736-4c67-9697-7876574c05d0}</Project>\n      <Name>FubuMVC.LightningQueues</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\TestMessages\\TestMessages.csproj\">\n      <Project>{3735a25a-28b6-4da3-a4cf-7606538e0155}</Project>\n      <Name>TestMessages</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"LightningDB;System.AppContext;System.Dynamic.Runtime;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Runtime.InteropServices.WindowsRuntime;System.Runtime.WindowsRuntime;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Fixie\">\n          <HintPath>..\\..\\packages\\Fixie\\lib\\net45\\Fixie.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"HtmlTags\">\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"LightningDB\">\n          <HintPath>..\\..\\packages\\LightningDB\\lib\\net45\\LightningDB.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"LightningDB\">\n          <HintPath>..\\..\\packages\\LightningDB\\lib\\netstandard1.3\\LightningDB.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"LightningQueues\">\n          <HintPath>..\\..\\packages\\LightningQueues\\lib\\net46\\LightningQueues.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"LightningQueues\">\n          <HintPath>..\\..\\packages\\LightningQueues\\lib\\netstandard1.3\\LightningQueues.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"LightningQueues.Storage.LMDB\">\n          <HintPath>..\\..\\packages\\LightningQueues.Storage.LMDB\\lib\\net46\\LightningQueues.Storage.LMDB.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"LightningQueues.Storage.LMDB\">\n          <HintPath>..\\..\\packages\\LightningQueues.Storage.LMDB\\lib\\netstandard1.3\\LightningQueues.Storage.LMDB.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Esent.Interop\">\n          <HintPath>..\\..\\packages\\ManagedEsent\\lib\\net40\\Esent.Interop.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore'\">\n      <ItemGroup>\n        <Reference Include=\"Esent.Interop.Wsa\">\n          <HintPath>..\\..\\packages\\ManagedEsent\\lib\\netcore45\\Esent.Interop.Wsa.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Primitives\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0')\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net20\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net35\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net40\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net45\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v3.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl3\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl4\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v7.1' Or $(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl4-windowsphone71\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl5\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Owin\">\n          <HintPath>..\\..\\packages\\Owin\\lib\\net40\\Owin.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0' Or $(TargetFrameworkVersion) == 'v3.5' Or $(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Rhino.Mocks\">\n          <HintPath>..\\..\\packages\\RhinoMocks\\lib\\net\\Rhino.Mocks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Shouldly\">\n          <HintPath>..\\..\\packages\\Shouldly\\lib\\net35\\Shouldly.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Shouldly\">\n          <HintPath>..\\..\\packages\\Shouldly\\lib\\net40\\Shouldly.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.AppContext\">\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Buffers\">\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.ComponentModel\">\n          <HintPath>..\\..\\packages\\System.ComponentModel\\ref\\netstandard1.0\\System.ComponentModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Console\">\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tools\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.0\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.3\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Calendars\">\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Extensions\">\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression\">\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression.ZipFile\">\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http\">\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Primitives\">\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\net45\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\net46\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netcore451\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netcoreapp1.0\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netstandard1.0\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netstandard1.1\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netstandard1.3\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\wpa81\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Interfaces\">\n          <HintPath>..\\..\\packages\\System.Reactive.Interfaces\\lib\\net45\\System.Reactive.Interfaces.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Interfaces\">\n          <HintPath>..\\..\\packages\\System.Reactive.Interfaces\\lib\\netstandard1.0\\System.Reactive.Interfaces.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\net45\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\net46\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\netstandard1.0\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2'))\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\netstandard1.1\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\netstandard1.3\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\net45\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\net46\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netcore451\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netcoreapp1.0\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netstandard1.0\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netstandard1.3\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\wpa81\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Windows.Threading\">\n          <HintPath>..\\..\\packages\\System.Reactive.Windows.Threading\\lib\\net45\\System.Reactive.Windows.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"WindowsBase\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Windows.Threading\">\n          <HintPath>..\\..\\packages\\System.Reactive.Windows.Threading\\lib\\netcore451\\System.Reactive.Windows.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Windows.Threading\">\n          <HintPath>..\\..\\packages\\System.Reactive.Windows.Threading\\lib\\wpa81\\System.Reactive.Windows.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.WindowsRuntime\">\n          <HintPath>..\\..\\packages\\System.Reactive.WindowsRuntime\\lib\\netcore451\\System.Reactive.WindowsRuntime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.WindowsRuntime\">\n          <HintPath>..\\..\\packages\\System.Reactive.WindowsRuntime\\lib\\wpa81\\System.Reactive.WindowsRuntime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Extensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Primitives\">\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Resources.ResourceManager\">\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Handles\">\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.WindowsRuntime\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.WindowsRuntime\\ref\\netstandard1.0\\System.Runtime.InteropServices.WindowsRuntime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Loader\">\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Numerics\">\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.WindowsRuntime\">\n          <HintPath>..\\..\\packages\\System.Runtime.WindowsRuntime\\ref\\netstandard1.2\\System.Runtime.WindowsRuntime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Cng\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Csp\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Thread\">\n          <HintPath>..\\..\\packages\\System.Threading.Thread\\ref\\netstandard1.3\\System.Threading.Thread.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.ThreadPool\">\n          <HintPath>..\\..\\packages\\System.Threading.ThreadPool\\ref\\netstandard1.3\\System.Threading.ThreadPool.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Timer\">\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/FubuMVC.LightningQueues.Testing/FubuTransportRegistryActivationTester.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing NUnit.Framework;\n\nnamespace FubuMVC.LightningQueues.Testing\n{\n    [TestFixture]\n    public class FubuTransportRegistryActivationTester\n    {\n        [Test]\n        public void should_start_when_transport_disabled()\n        {\n            var registry = new FubuRegistry();\n            registry.AlterSettings<TransportSettings>(x =>\n            {\n                x.Enabled = true;\n                x.InMemoryTransport = InMemoryTransportMode.Enabled;\n            });\n            registry.AlterSettings<LightningQueueSettings>(x => x.DisableIfNoChannels = true);\n            using (var application = registry.ToRuntime())\n            {\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues.Testing/Full_end_to_end_delayed_message_processing_with_Lightning_Queues.cs",
    "content": "﻿using System.Diagnostics;\nusing System.Linq;\nusing System.Threading;\nusing FubuCore;\nusing FubuCore.Dates;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Tests.ServiceBus;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Shouldly;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.LightningQueues.Testing\n{\n    [TestFixture]\n    public class Full_end_to_end_delayed_message_processing_with_Lightning_Queues\n    {\n        private FubuRuntime _runtime;\n        private IServiceBus theServiceBus;\n        private SettableClock theClock;\n        private OneMessage message1;\n        private OneMessage message2;\n        private OneMessage message3;\n        private OneMessage message4;\n\n        [TestFixtureSetUp]\n        public void SetUp()\n        {\n            // Need to do something about this.  Little ridiculous\n            var settings = new BusSettings\n            {\n                Downstream = \"lq.tcp://localhost:2050/downstream\".ToUri()\n            };\n\n\n            theClock = new SettableClock();\n\n\n            _runtime = FubuRuntime.For<DelayedRegistry>(_ =>\n            {\n                _.Services.ReplaceService(settings);\n                _.Services.ReplaceService<ISystemTime>(theClock);\n            });\n\n            theServiceBus = _runtime.Get<IServiceBus>();\n            //_runtime.Get<IPersistentQueues>().ClearAll();\n\n            message1 = new OneMessage();\n            message2 = new OneMessage();\n            message3 = new OneMessage();\n            message4 = new OneMessage();\n\n            Debug.WriteLine(\"The current Utc time is \" + theClock.UtcNow());\n\n            theServiceBus.DelaySend(message1, theClock.UtcNow().AddHours(1));\n            theServiceBus.DelaySend(message2, theClock.UtcNow().AddHours(1));\n            theServiceBus.DelaySend(message3, theClock.UtcNow().AddHours(2));\n            theServiceBus.DelaySend(message4, theClock.UtcNow().AddHours(2));\n        }\n\n        [Test, Explicit(\"This is being problematic. Going to replace w/ an ST spec\")]\n        public void things_are_received_at_the_right_times()\n        {\n            TestMessageRecorder.AllProcessed.Any().ShouldBeFalse();\n\n            Thread.Sleep(500);\n            TestMessageRecorder.AllProcessed.Any().ShouldBeFalse();\n\n            theClock.LocalNow(theClock.LocalTime().Add(61.Minutes()));\n\n            Wait.Until(() => TestMessageRecorder.HasProcessed(message1)).ShouldBeTrue();\n            Wait.Until(() => TestMessageRecorder.HasProcessed(message2)).ShouldBeTrue();\n\n            TestMessageRecorder.HasProcessed(message3).ShouldBeFalse();\n            TestMessageRecorder.HasProcessed(message4).ShouldBeFalse();\n\n            theClock.LocalNow(theClock.LocalTime().Add(61.Minutes()));\n\n            Wait.Until(() => TestMessageRecorder.HasProcessed(message3)).ShouldBeTrue();\n            Wait.Until(() => TestMessageRecorder.HasProcessed(message4)).ShouldBeTrue();\n\n            // If it's more than this, we got problems\n            TestMessageRecorder.AllProcessed.Count().ShouldBe(4);\n        }\n\n\n        [TestFixtureTearDown]\n        public void TearDown()\n        {\n            _runtime.Dispose();\n        }\n    }\n\n    public class DelayedRegistry : FubuTransportRegistry<BusSettings>\n    {\n        public DelayedRegistry()\n        {\n            Handlers.DisableDefaultHandlerSource();\n            ServiceBus.EnableInMemoryTransport();\n\n            // Need this to be fast for the tests\n            AlterSettings<TransportSettings>(x => x.DelayMessagePolling = 100);\n\n            Services.ReplaceService<ISystemTime>(new SettableClock());\n            Handlers.Include<SimpleHandler<OneMessage>>();\n            Channel(x => x.Downstream).ReadIncoming().AcceptsMessagesInAssemblyContainingType<OneMessage>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues.Testing/Full_end_to_end_error_processing_with_LightningQueues.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Reactive.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Tests.ServiceBus;\nusing FubuMVC.Tests.TestSupport;\nusing LightningQueues;\nusing NUnit.Framework;\nusing Shouldly;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.LightningQueues.Testing\n{\n    [TestFixture]\n    public class Full_end_to_end_error_processing_with_LightningQueues\n    {\n        private FubuRuntime _runtime;\n        private IServiceBus theServiceBus;\n        private Queue _queueManager;\n        private OneMessage message1;\n\n        [TestFixtureSetUp]\n        public void SetUp()\n        {\n            TestMessageRecorder.Clear();\n\n            // Need to do something about this.  Little ridiculous\n            var settings = new BusSettings\n            {\n                Downstream = \"lq.tcp://localhost:2040/downstream\".ToUri()\n            };\n            var lightningUri = settings.Downstream.ToLightningUri();\n\n\n            _runtime = FubuRuntime.For<ErrorRegistry>(x =>\n            {\n                x.Services.For<BusSettings>().Use(settings);\n            });\n\n\n            _runtime.Get<IPersistentQueues>().ClearAll();\n\n            theServiceBus = _runtime.Get<IServiceBus>();\n\n            _queueManager = _runtime.Get<IPersistentQueues>().PersistentManagerFor(lightningUri.Port, true);\n\n            message1 = new OneMessage();\n\n            theServiceBus.Send(message1);\n        }\n\n        [TestFixtureTearDown]\n        public void TearDown()\n        {\n            _runtime.Dispose();\n        }\n\n        [Test]\n        public async Task requeues_then_moves_to_error_queue()\n        {\n            Wait.Until(() => TestMessageRecorder.HasProcessed(message1)).ShouldBeTrue();\n\n            //todo need timeout\n            var messageContext = await _queueManager.Receive(LightningQueuesTransport.ErrorQueueName).FirstAsync();\n            var message = messageContext.Message;\n            message.ShouldNotBeNull();\n\n\n            var report = ErrorReport.Deserialize(message.Data);\n            message.Headers.Get(\"ExceptionType\").ShouldBe(\"System.InvalidOperationException\");\n            report.RawData.ShouldNotBeNull();\n        }\n    }\n\n    public class ErrorRegistry : FubuTransportRegistry<BusSettings>\n    {\n        public ErrorRegistry()\n        {\n            Mode = \"Development\";\n\n            Handlers.DisableDefaultHandlerSource();\n            Handlers.Include<ThrowingHandler<OneMessage>>();\n            Channel(x => x.Downstream)\n                .ReadIncoming(ByTasks(x => x.DownstreamCount))\n                .AcceptsMessagesInAssemblyContainingType<OneMessage>();\n            Policies.Global.Add<ErrorPolicy>();\n        }\n    }\n\n    public class ErrorPolicy : HandlerChainPolicy\n    {\n        public override void Configure(HandlerChain handlerChain)\n        {\n            handlerChain.MaximumAttempts = 5;\n            handlerChain.OnException<InvalidOperationException>()\n                .Requeue();\n        }\n    }\n\n    public class ThrowingHandler<T> where T : TestMessages.ScenarioSupport.Message\n    {\n        public void Handle(T message)\n        {\n            TestMessageRecorder.Processed(GetType().Name + TestMessageRecorder.AllProcessed.Count(), message);\n            throw new InvalidOperationException(\"blah\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues.Testing/HeaderTranslationTester.cs",
    "content": "﻿using System;\nusing LightningQueues;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.LightningQueues.Testing\n{\n    [TestFixture]\n    public class HeaderTranslationTester\n    {\n        [Test]\n        public void translates_max_attempts()\n        {\n            var message = new OutgoingMessage();\n            message.Headers.Add(LightningQueuesChannel.MaxAttemptsHeader, 1.ToString());\n            message.TranslateHeaders();\n            message.MaxAttempts.ShouldBe(1);\n        }\n\n        [Test]\n        public void translates_deliver_by()\n        {\n            var now = DateTime.Now;\n            var message = new OutgoingMessage();\n            message.Headers.Add(LightningQueuesChannel.DeliverByHeader, now.ToString(\"o\"));\n            message.TranslateHeaders();\n            message.DeliverBy.ShouldBe(now);\n        }\n\n        [Test]\n        public void empty_when_headers_arent_present()\n        {\n            var message = new OutgoingMessage();\n            message.TranslateHeaders();\n            message.MaxAttempts.ShouldBeNull();\n            message.DeliverBy.ShouldBeNull();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues.Testing/LightningQueuesIntegrationTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Delayed;\nusing FubuMVC.Tests.ServiceBus;\nusing FubuMVC.Tests.TestSupport;\nusing LightningQueues;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.LightningQueues.Testing\n{\n    [TestFixture]\n    public class LightningQueuesIntegrationTester\n    {\n        private void SetupTransport(string uri, ChannelMode mode)\n        {\n            graph = new ChannelGraph();\n            node = graph.ChannelFor<ChannelSettings>(x => x.Upstream);\n            node.Mode = mode;\n\n            node.Uri = new Uri(uri);\n            node.Incoming = true;\n\n            var delayedCache = new DelayedMessageCache<MessageId>();\n            queues = new PersistentQueues(new RecordingLogger());\n            queues.ClearAll();\n            transport = new LightningQueuesTransport(queues, new LightningQueueSettings());\n\n            transport.OpenChannels(graph);\n        }\n\n        [TearDown]\n        public void TearDown()\n        {\n            queues.Dispose();\n        }\n\n        private PersistentQueues queues;\n        private LightningQueuesTransport transport;\n        private ChannelGraph graph;\n        private ChannelNode node;\n\n        [Test]\n        public void registers_a_reply_queue_corrected_to_the_machine_name()\n        {\n            SetupTransport(\"lq.tcp://localhost:2032/upstream\", ChannelMode.DeliveryGuaranteed);\n\n            var uri = graph.ReplyChannelFor(LightningUri.Protocol);\n            uri.ShouldNotBeNull();\n\n            uri.Host.ToUpperInvariant().ShouldBe(Environment.MachineName.ToUpperInvariant());\n        }\n\n        [Test]\n        public void reply_uri_is_machine_specific_when_dns_address_is_used()\n        {\n            queues.Dispose();\n            SetupTransport(\"lq.tcp://www.foo.com:2032/upstream\", ChannelMode.DeliveryGuaranteed);\n\n            var uri = graph.ReplyChannelFor(LightningUri.Protocol);\n            uri.Host.ToUpperInvariant().ShouldBe(Environment.MachineName.ToUpperInvariant());\n        }\n\n        [Test]\n        public void send_a_message_and_get_it_back()\n        {\n            SetupTransport(\"lq.tcp://localhost:2032/upstream\", ChannelMode.DeliveryGuaranteed);\n\n            var envelope = new Envelope { Data = new byte[] { 1, 2, 3, 4, 5 } };\n            envelope.Headers[\"foo\"] = \"bar\";\n\n            var receiver = new RecordingReceiver();\n\n            node.StartReceiving(receiver, new RecordingLogger());\n\n            node.Channel.As<LightningQueuesChannel>().Send(envelope.Data, envelope.Headers);\n            Wait.Until(() => receiver.Received.Any());\n\n            graph.Dispose();\n            queues.Dispose();\n\n            receiver.Received.Any().ShouldBeTrue();\n\n            var actual = receiver.Received.Single();\n            actual.Data.ShouldBe(envelope.Data);\n            actual.Headers[\"foo\"].ShouldBe(\"bar\");\n        }\n\n\n        [Test]\n        public void send_a_message_and_get_it_back_non_persistent()\n        {\n            SetupTransport(\"lq.tcp://localhost:2032/upstream\", ChannelMode.DeliveryFastWithoutGuarantee);\n\n            var envelope = new Envelope { Data = new byte[] { 1, 2, 3, 4, 5 } };\n            envelope.Headers[\"foo\"] = \"bar\";\n\n            var receiver = new RecordingReceiver();\n\n            node.StartReceiving(receiver, new RecordingLogger());\n\n            node.Channel.As<LightningQueuesChannel>().Send(envelope.Data, envelope.Headers);\n            Wait.Until(() => receiver.Received.Any());\n\n            graph.Dispose();\n            queues.Dispose();\n\n            receiver.Received.Any().ShouldBeTrue();\n\n            var actual = receiver.Received.Single();\n            actual.Data.ShouldBe(envelope.Data);\n            actual.Headers[\"foo\"].ShouldBe(\"bar\");\n        }\n    }\n\n    public class ChannelSettings\n    {\n        public Uri Outbound { get; set; }\n        public Uri Downstream { get; set; }\n        public Uri Upstream { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues.Testing/LightningQueuesServiceRegistry_spec.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Delayed;\nusing FubuMVC.Tests;\nusing LightningQueues;\nusing NUnit.Framework;\nusing StructureMap;\n\nnamespace FubuMVC.LightningQueues.Testing\n{\n    [TestFixture]\n    public class LightningQueuesServiceRegistry_spec\n    {\n        [Test]\n        public void service_registrations()\n        {\n            var registry = new FubuRegistry();\n            registry.AlterSettings<LightningQueueSettings>(_ => _.DisableIfNoChannels = true);\n\n            using (var runtime = FubuRuntime.Basic())\n            {\n                var container = runtime.Get<IContainer>();\n\n                container.ShouldHaveRegistration<ITransport, LightningQueuesTransport>();\n                container.DefaultRegistrationIs<IPersistentQueues, PersistentQueues>();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues.Testing/LightningQueuesTransport_disabled_behavior_Tester.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.LightningQueues.Testing\n{\n    [TestFixture]\n    public class LightningQueuesTransport_disabled_behavior_Tester : InteractionContext<LightningQueuesTransport>\n    {\n        private LightningQueueSettings theSettings;\n\n        protected override void beforeEach()\n        {\n            theSettings = new LightningQueueSettings();\n            Services.Inject(theSettings);\n        }\n\n        [Test]\n        public void have_channels_and_not_set_to_disabled()\n        {\n            theSettings.DisableIfNoChannels = false;\n            theSettings.Disabled = false;\n\n            ClassUnderTest.Disabled(new ChannelNode[]{new ChannelNode(), })\n                .ShouldBeFalse();\n        }\n\n\n        [Test]\n        public void disable_if_settings_disabled_is_true()\n        {\n            theSettings.DisableIfNoChannels = false;\n            theSettings.Disabled = true;\n\n            ClassUnderTest.Disabled(new ChannelNode[] { new ChannelNode(), })\n                .ShouldBeTrue();\n        }\n\n        [Test]\n        public void not_disabled_if_disabling_on_no_channels_is_on_but_there_are_channels()\n        {\n            theSettings.DisableIfNoChannels = true;\n            theSettings.Disabled = false;\n\n            // You have a matching channel\n            ClassUnderTest.Disabled(new ChannelNode[] { new ChannelNode(), })\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void disable_if_there_are_no_channels()\n        {\n            theSettings.DisableIfNoChannels = true;\n            theSettings.Disabled = false;\n\n            // You have a matching channel\n            ClassUnderTest.Disabled(new ChannelNode[0])\n                .ShouldBeTrue();\n        }\n    }\n\n    [TestFixture]\n    public class Start_with_LightningQueues_module_but_no_channels\n    {\n        [Test]\n        public void do_not_blow_up()\n        {\n            var registry = new FubuRegistry();\n            registry.ServiceBus.Enable(true);\n            registry.ServiceBus.EnableInMemoryTransport();\n            registry.Services.For<LightningQueueSettings>().Use(new LightningQueueSettings\n            {\n                DisableIfNoChannels = true\n            });\n\n            using (var runtime = registry.ToRuntime())\n            {\n                // just looking for the absence of an exception here\n            }\n        }\n\n        [Test]\n        public void does_blow_up_if_not_opted_into_the_disable_behavior()\n        {\n            var registry = new FubuRegistry();\n            registry.ServiceBus.Enable(true);\n            registry.Services.For<LightningQueueSettings>().Use(new LightningQueueSettings\n            {\n                DisableIfNoChannels = false\n            });\n\n            Exception<FubuException>.ShouldBeThrownBy(() => {\n                using (var runtime = registry.ToRuntime())\n                {\n                }\n            });\n\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues.Testing/LightningUriTester.cs",
    "content": "﻿using System;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.LightningQueues.Testing\n{\n    [TestFixture]\n    public class LightningUriTester\n    {\n        private LightningUri theUri;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theUri = new LightningUri(\"lq.tcp://localhost:2424/some_queue\");\n        }\n\n        [Test]\n        public void blows_up_if_protocol_is_not_lightning_queues()\n        {\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(() => {\n                new LightningUri(\"foo://bar\");\n            });\n        }\n\n        [Test]\n        public void finds_the_port()\n        {\n            theUri.Port.ShouldBe(2424);\n        }\n\n        [Test]\n        public void parses_the_queue_name()\n        {\n            theUri.QueueName.ShouldBe(\"some_queue\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues.Testing/PersistentQueueTester.cs",
    "content": "﻿using System.Linq;\nusing FubuCore.Logging;\nusing LightningQueues.Storage;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.LightningQueues.Testing\n{\n    [TestFixture]\n    public class PersistentQueueTester\n    {\n        [Test]\n        public void creates_queues_when_started()\n        {\n            using (var queues = new PersistentQueues(new RecordingLogger()))\n            {\n                queues.ClearAll();\n                queues.Start(new LightningUri[]\n                {\n                    new LightningUri(\"lq.tcp://localhost:2424/some_queue\"),\n                    new LightningUri(\"lq.tcp://localhost:2424/other_queue\"),\n                    new LightningUri(\"lq.tcp://localhost:2424/third_queue\"),\n                });\n\n                queues.PersistentManagerFor(2424, true)\n                    .Queues.OrderBy(x => x).ShouldHaveTheSameElementsAs(LightningQueuesTransport.ErrorQueueName, \"other_queue\", \"some_queue\", \"third_queue\");\n            }\n        }\n\n        [Test]\n        public void creates_non_persistent_queues_when_started()\n        {\n            using (var queues = new PersistentQueues(new RecordingLogger()))\n            {\n                var queue = queues.NonPersistentManagerFor(2200, true);\n                queues.Start(new []\n                {\n                    new LightningUri(\"lq.tcp://localhost:2200/some_queue\"),\n                    new LightningUri(\"lq.tcp://localhost:2200/other_queue\"),\n                    new LightningUri(\"lq.tcp://localhost:2200/third_queue\"),\n                });\n\n                queue.Queues.OrderBy(x => x)\n                    .ShouldHaveTheSameElementsAs(LightningQueuesTransport.ErrorQueueName, \"other_queue\", \"some_queue\",\n                        \"third_queue\");\n                queue.Store.ShouldBeOfType<NoStorage>();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues.Testing/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"FubuMVC.LightningQueues.Testing\")]"
  },
  {
    "path": "src/FubuMVC.LightningQueues.Testing/TransactionCallbackTester.cs",
    "content": "﻿using System;\nusing System.Security.Cryptography.X509Certificates;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing LightningQueues;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.LightningQueues.Testing\n{\n    [TestFixture]\n    public class TransactionCallbackTester\n    {\n        [Test]\n        public void sending_on_callback_translates_headers()\n        {\n            var envelope = new Envelope\n            {\n                Destination = new Uri(\"lq.tcp://localhost/nowhere\")\n            };\n            envelope.Headers[LightningQueuesChannel.MaxAttemptsHeader] = \"1\";\n            var context = MockRepository.GenerateStub<IQueueContext>();\n            context.Stub(x => x.Send(null)).Callback((OutgoingMessage x) =>\n            {\n                x.MaxAttempts.ShouldBe(1);\n                return true;\n            });\n            var callback = new TransactionCallback(context, new Message());\n            callback.Send(envelope);\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.LightningQueues.Testing/UriExtensionsTester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.LightningQueues.Testing\n{\n    [TestFixture]\n    public class UriExtensionsTester\n    {\n        [Test]\n        public void uses_machinename_over_localhost()\n        {\n            var testUri = new Uri(\"lq.tcp://localhost:5150/blah/test?querystring=value\");\n            var uri = testUri.ToMachineUri();\n            uri.ToString().ShouldBe(\"lq.tcp://{0}:5150/blah/test?querystring=value\".ToFormat(Environment.MachineName.ToLower()));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues.Testing/paket.references",
    "content": "Fixie\nFubuCore\nHtmlTags\nLightningQueues\nManagedEsent\nNLog\nOwin\nRhinoMocks\nShouldly\nstructuremap\nLightningQueues.Storage.LMDB"
  },
  {
    "path": "src/FubuMVC.LightningQueues.Testing/throws_descriptive_exception_if_no_incoming_lq_channel.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Tests.ServiceBus;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.LightningQueues.Testing\n{\n    [TestFixture]\n    public class throws_descriptive_exception_if_no_incoming_lq_channel\n    {\n        [Test]\n        public void should_throw_invalid_transport_exception_because_there_are_no_incoming_lq_transports()\n        {\n            var message =\n                Exception<FubuException>.ShouldBeThrownBy(\n                    () => FubuRuntime.For<BadTransportRegistry>()).Message;\n\n            message.ShouldContain(\"You must have at least one incoming Lightning Queue channel for accepting replies\");\n        }\n    }\n\n    public class BadTransportRegistry : FubuTransportRegistry<BadTransportSettings>\n    {\n        public BadTransportRegistry()\n        {\n            Channel(x => x.Something).AcceptsMessage<Message1>();\n        }\n    }\n\n    public class BadTransportSettings\n    {\n        public Uri Something { get; set; }\n        public Uri Else { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.LightningQueues.Testing/throws_descriptive_message_if_a_single_port_has_mixed_modes.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Tests.ServiceBus;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.LightningQueues.Testing\n{\n    [TestFixture]\n    public class throws_descriptive_message_if_a_single_port_has_mixed_modes\n    {\n        [Test]\n        public void throws()\n        {\n            var registry = new SampleRegistry();\n\n            var outer = Exception<FubuException>.ShouldBeThrownBy(() =>\n            {\n                registry.ToRuntime();\n            });\n\n            \n            var expectedText = \"The LightningQueues listener for port 2222 has\\r\\n mixed channel modes. Either make the modes be the same or use a different port number\";\n\n            outer.ToString().Contains(expectedText);\n        }\n\n        public class SampleRegistry : FubuTransportRegistry<BusSettings>\n        {\n            public SampleRegistry()\n            {\n                AlterSettings<BusSettings>(x =>\n                {\n                    x.Downstream = \"lq.tcp://localhost:2222/downstream\".ToUri();\n                    x.Outbound = \"lq.tcp://localhost:2222/outbound\".ToUri();\n                });\n\n                Channel(x => x.Downstream).DeliveryGuaranteed();\n                Channel(x => x.Outbound).DeliveryFastWithoutGuarantee();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/CompleteReset.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Logging;\n\nnamespace FubuMVC.Marten\n{\n    public class CompleteReset : ICompleteReset\n    {\n        private readonly ILogger _logger;\n        private readonly IInitialState _initialState;\n        private readonly IPersistenceReset _persistence;\n        private readonly IEnumerable<IServiceReset> _serviceResets;\n\n        public CompleteReset(ILogger logger, IInitialState initialState, IPersistenceReset persistence, IEnumerable<IServiceReset> serviceResets)\n        {\n            _logger = logger;\n            _initialState = initialState;\n            _persistence = persistence;\n            _serviceResets = serviceResets;\n        }\n\n        private void trace(string text, params object[] args)\n        {\n            if (args.Any())\n            {\n                _logger.DebugMessage(() => new ResetMessage { Message = text.ToFormat(args) });\n            }\n            else\n            {\n                _logger.DebugMessage(() => new ResetMessage { Message = text });\n            }\n        }\n\n        public void ResetState()\n        {\n            _serviceResets.Each(x => {\n                                         trace(\"Stopping services with {0}\", x.GetType().Name);\n                                         x.Stop();\n            });\n\n            trace(\"Clearing persisted state\");\n            _persistence.ClearPersistedState();\n\n            // Think it's pretty likely that this changes\n            trace(\"Loading initial data\");\n            _initialState.Load();\n\n            _serviceResets.Each(x => {\n\n                                         trace(\"Starting services with {0}\", x.GetType().Name);\n                                         x.Start();\n            });\n        }\n\n        public void CommitChanges()\n        {\n            trace(\"Committing changes\");\n            _persistence.CommitAllChanges();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/ContainerExtensions.cs",
    "content": "using FubuCore.Binding;\nusing StructureMap;\n\nnamespace FubuMVC.Marten\n{\n    public static class ContainerExtensions\n    {\n        public static void Apply(this IContainer container, ServiceArguments arguments)\n        {\n            arguments.EachService(container.Inject);\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/Diagnostics/MartenFubuDiagnostics.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\n\nnamespace FubuMVC.Marten.Diagnostics\n{\n    public class MartenFubuDiagnostics\n    {\n        private readonly IChainExecutionHistory _history;\n\n        public MartenFubuDiagnostics(IChainExecutionHistory history)\n        {\n            _history = history;\n        }\n\n        public Dictionary<string, object>[] get_sessions()\n        {\n            return _history.RecentReports().Where(x => x.RootChain != null).Select(report =>\n            {\n                var dict = new Dictionary<string, object>();\n\n                dict.Add(\"chain\", report.RootChain.Title());\n                dict.Add(\"time\", report.Time);\n                dict.Add(\"hash\", report.RootChain.Title().GetHashCode());\n                dict.Add(\"execution_time\", report.ExecutionTime);\n                dict.Add(\"request\", report.Id);\n\n                var requestCount = report.Steps.Count(x => x.Log is CommandExecuted);\n\n                dict.Add(\"request_count\", requestCount);\n\n\n                return dict;\n            }).ToArray();\n        }\n\n        public Dictionary<string, object>[] get_session_Id(RequestCommands request)\n        {\n            var report = _history.Find(request.Id);\n            if (report == null) return new Dictionary<string, object>[0];\n\n            return report.Steps.Select(x => x.Log).OfType<CommandExecuted>().Select(cmd =>\n            {\n                var dict = new Dictionary<string, object> {{\"sql\", cmd.CommandText}, {\"args\", cmd.Args}};\n\n\n                if (cmd is CommandFailed)\n                {\n                    dict.Add(\"success\", false);\n                    dict.Add(\"error\", cmd.As<CommandFailed>().ExceptionText);\n                }\n                else\n                {\n                    dict.Add(\"success\", true);\n                }\n\n                return dict;\n            }).ToArray();\n\n        } \n\n        \n    }\n\n    public class RequestCommands\n    {\n        public Guid Id { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/FubuMVC.Marten.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>FubuMVC.Marten</RootNamespace>\n    <AssemblyName>FubuMVC.Marten</AssemblyName>\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\CommonAssemblyInfo.cs\">\n      <Link>CommonAssemblyInfo.cs</Link>\n    </Compile>\n    <Compile Include=\"CompleteReset.cs\" />\n    <Compile Include=\"ContainerExtensions.cs\" />\n    <Compile Include=\"Diagnostics\\MartenFubuDiagnostics.cs\" />\n    <Compile Include=\"ICompleteReset.cs\" />\n    <Compile Include=\"IInitialState.cs\" />\n    <Compile Include=\"IPersistenceReset.cs\" />\n    <Compile Include=\"IServiceReset.cs\" />\n    <Compile Include=\"ISessionBoundary.cs\" />\n    <Compile Include=\"ITransaction.cs\" />\n    <Compile Include=\"MartenExtension.cs\" />\n    <Compile Include=\"MartenPersistenceReset.cs\" />\n    <Compile Include=\"MartenStructureMapServices.cs\" />\n    <Compile Include=\"Membership\\Audit.cs\" />\n    <Compile Include=\"Membership\\Entity.cs\" />\n    <Compile Include=\"Membership\\LoginAuditPersistor.cs\" />\n    <Compile Include=\"Membership\\LoginFailureHistory.cs\" />\n    <Compile Include=\"Membership\\MembershipRepository.cs\" />\n    <Compile Include=\"Membership\\PersistedLoginAuditor.cs\" />\n    <Compile Include=\"Membership\\PersistedMembership.cs\" />\n    <Compile Include=\"Membership\\User.cs\" />\n    <Compile Include=\"NulloInitialState.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"ResetMessage.cs\" />\n    <Compile Include=\"SessionBoundary.cs\" />\n    <Compile Include=\"MartenTransaction.cs\" />\n    <Compile Include=\"TransactionalBehavior.cs\" />\n    <Compile Include=\"TransactionalBehaviorPolicy.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"Microsoft.Win32.Registry;System.AppContext;System.Diagnostics.Contracts;System.Diagnostics.Process;System.Diagnostics.StackTrace;System.Dynamic.Runtime;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Net.NameResolution;System.Net.NetworkInformation;System.Net.Security;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Runtime.Serialization.Primitives;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Security.Principal.Windows;System.Threading;System.Threading.Overlapped;System.Xml.XmlSerializer\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <EmbeddedResource Include=\"..\\DiagnosticsHarness\\fubu-diagnostics\\marten.js\">\n      <Link>fubu-diagnostics\\marten.js</Link>\n    </EmbeddedResource>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Baseline\">\n          <HintPath>..\\..\\packages\\Baseline\\lib\\net451\\Baseline.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Baseline\">\n          <HintPath>..\\..\\packages\\Baseline\\lib\\netstandard1.3\\Baseline.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Marten\">\n          <HintPath>..\\..\\packages\\Marten\\lib\\net46\\Marten.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"Marten\">\n          <HintPath>..\\..\\packages\\Marten\\lib\\netstandard1.3\\Marten.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Dataflow\">\n          <HintPath>..\\..\\packages\\Microsoft.Tpl.Dataflow\\lib\\portable-net45+win8+wpa81\\System.Threading.Tasks.Dataflow.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Primitives\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Registry\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Registry\\ref\\netstandard1.3\\Microsoft.Win32.Registry.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net20\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net35\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net40\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\netstandard1.0\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0') Or ($(TargetFrameworkProfile) == 'Profile5') Or ($(TargetFrameworkProfile) == 'Profile6') Or ($(TargetFrameworkProfile) == 'Profile14') Or ($(TargetFrameworkProfile) == 'Profile19') Or ($(TargetFrameworkProfile) == 'Profile24') Or ($(TargetFrameworkProfile) == 'Profile37') Or ($(TargetFrameworkProfile) == 'Profile42') Or ($(TargetFrameworkProfile) == 'Profile47') Or ($(TargetFrameworkProfile) == 'Profile92') Or ($(TargetFrameworkProfile) == 'Profile102') Or ($(TargetFrameworkProfile) == 'Profile136') Or ($(TargetFrameworkProfile) == 'Profile147') Or ($(TargetFrameworkProfile) == 'Profile158') Or ($(TargetFrameworkProfile) == 'Profile225') Or ($(TargetFrameworkProfile) == 'Profile240') Or ($(TargetFrameworkProfile) == 'Profile255') Or ($(TargetFrameworkProfile) == 'Profile328') Or ($(TargetFrameworkProfile) == 'Profile336') Or ($(TargetFrameworkProfile) == 'Profile344')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net40+sl5+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'MonoAndroid') Or ($(TargetFrameworkIdentifier) == 'MonoTouch') Or ($(TargetFrameworkIdentifier) == 'Xamarin.iOS') Or ($(TargetFrameworkIdentifier) == 'Xamarin.Mac') Or ($(TargetFrameworkProfile) == 'Profile7') Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile32') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile78') Or ($(TargetFrameworkProfile) == 'Profile111') Or ($(TargetFrameworkProfile) == 'Profile151') Or ($(TargetFrameworkProfile) == 'Profile157') Or ($(TargetFrameworkProfile) == 'Profile259')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.5'\">\n      <ItemGroup>\n        <Reference Include=\"Npgsql\">\n          <HintPath>..\\..\\packages\\Npgsql\\lib\\net45\\Npgsql.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Npgsql\">\n          <HintPath>..\\..\\packages\\Npgsql\\lib\\net451\\Npgsql.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"Npgsql\">\n          <HintPath>..\\..\\packages\\Npgsql\\lib\\netstandard1.3\\Npgsql.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Remotion.Linq\">\n          <HintPath>..\\..\\packages\\Remotion.Linq\\lib\\net45\\Remotion.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Remotion.Linq\">\n          <HintPath>..\\..\\packages\\Remotion.Linq\\lib\\netstandard1.0\\Remotion.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.AppContext\">\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Buffers\">\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Immutable\">\n          <HintPath>..\\..\\packages\\System.Collections.Immutable\\lib\\netstandard1.0\\System.Collections.Immutable.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.NonGeneric\">\n          <HintPath>..\\..\\packages\\System.Collections.NonGeneric\\ref\\netstandard1.3\\System.Collections.NonGeneric.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Specialized\">\n          <HintPath>..\\..\\packages\\System.Collections.Specialized\\ref\\netstandard1.3\\System.Collections.Specialized.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.ComponentModel\">\n          <HintPath>..\\..\\packages\\System.ComponentModel\\ref\\netstandard1.0\\System.ComponentModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ComponentModel.Primitives\">\n          <HintPath>..\\..\\packages\\System.ComponentModel.Primitives\\ref\\netstandard1.0\\System.ComponentModel.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.ComponentModel.TypeConverter\">\n          <HintPath>..\\..\\packages\\System.ComponentModel.TypeConverter\\ref\\netstandard1.0\\System.ComponentModel.TypeConverter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ComponentModel.TypeConverter\">\n          <HintPath>..\\..\\packages\\System.ComponentModel.TypeConverter\\ref\\netstandard1.5\\System.ComponentModel.TypeConverter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Console\">\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Data.Common\">\n          <HintPath>..\\..\\packages\\System.Data.Common\\ref\\net451\\System.Data.Common.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Data.Common\">\n          <HintPath>..\\..\\packages\\System.Data.Common\\ref\\netstandard1.2\\System.Data.Common.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile32') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile84') Or ($(TargetFrameworkProfile) == 'Profile151') Or ($(TargetFrameworkProfile) == 'Profile157')\">\n      <ItemGroup>\n        <Reference Include=\"System.Data.Common\">\n          <HintPath>..\\..\\packages\\System.Data.Common\\ref\\portable-net451+win8+wp8+wpa81\\System.Data.Common.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Contracts\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Contracts\\ref\\netstandard1.0\\System.Diagnostics.Contracts.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Process\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Process\\ref\\netstandard1.3\\System.Diagnostics.Process.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Process\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Process\\ref\\netstandard1.4\\System.Diagnostics.Process.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.StackTrace\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.StackTrace\\ref\\netstandard1.3\\System.Diagnostics.StackTrace.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tools\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.0\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.3\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Calendars\">\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Extensions\">\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression\">\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression.ZipFile\">\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Queryable\">\n          <HintPath>..\\..\\packages\\System.Linq.Queryable\\ref\\netstandard1.0\\System.Linq.Queryable.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.NameResolution\">\n          <HintPath>..\\..\\packages\\System.Net.NameResolution\\ref\\netstandard1.3\\System.Net.NameResolution.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.NetworkInformation\">\n          <HintPath>..\\..\\packages\\System.Net.NetworkInformation\\ref\\netstandard1.3\\System.Net.NetworkInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Primitives\">\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Security\">\n          <HintPath>..\\..\\packages\\System.Net.Security\\ref\\netstandard1.3\\System.Net.Security.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Extensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Metadata\">\n          <HintPath>..\\..\\packages\\System.Reflection.Metadata\\lib\\netstandard1.1\\System.Reflection.Metadata.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Primitives\">\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Resources.ResourceManager\">\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Handles\">\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Loader\">\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Numerics\">\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.0\\System.Runtime.Serialization.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.3\\System.Runtime.Serialization.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Claims\">\n          <HintPath>..\\..\\packages\\System.Security.Claims\\ref\\netstandard1.3\\System.Security.Claims.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Cng\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Csp\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Principal\">\n          <HintPath>..\\..\\packages\\System.Security.Principal\\ref\\netstandard1.0\\System.Security.Principal.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Principal.Windows\">\n          <HintPath>..\\..\\packages\\System.Security.Principal.Windows\\ref\\netstandard1.3\\System.Security.Principal.Windows.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Overlapped\">\n          <HintPath>..\\..\\packages\\System.Threading.Overlapped\\ref\\netstandard1.3\\System.Threading.Overlapped.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Dataflow\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Dataflow\\lib\\netstandard1.1\\System.Threading.Tasks.Dataflow.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Thread\">\n          <HintPath>..\\..\\packages\\System.Threading.Thread\\ref\\netstandard1.3\\System.Threading.Thread.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.ThreadPool\">\n          <HintPath>..\\..\\packages\\System.Threading.ThreadPool\\ref\\netstandard1.3\\System.Threading.ThreadPool.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Timer\">\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XmlDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XmlDocument\\ref\\netstandard1.3\\System.Xml.XmlDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XmlSerializer\">\n          <HintPath>..\\..\\packages\\System.Xml.XmlSerializer\\ref\\netstandard1.3\\System.Xml.XmlSerializer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/FubuMVC.Marten/ICompleteReset.cs",
    "content": "namespace FubuMVC.Marten\n{\n    public interface ICompleteReset\n    {\n        void ResetState();\n        void CommitChanges();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/IInitialState.cs",
    "content": "namespace FubuMVC.Marten\n{\n    public interface IInitialState\n    {\n        void Load();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/IPersistenceReset.cs",
    "content": "namespace FubuMVC.Marten\n{\n    public interface IPersistenceReset\n    {\n        void ClearPersistedState();\n        void CommitAllChanges();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/IServiceReset.cs",
    "content": "namespace FubuMVC.Marten\n{\n    public interface IServiceReset\n    {\n        void Stop();\n        void Start();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/ISessionBoundary.cs",
    "content": "using System;\nusing System.Threading.Tasks;\nusing Marten;\n\nnamespace FubuMVC.Marten\n{\n    public interface ISessionBoundary : IDisposable\n    {\n        IDocumentSession Session();\n\n        Task SaveChanges();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/ITransaction.cs",
    "content": "using System;\nusing FubuCore.Binding;\n\nnamespace FubuMVC.Marten\n{\n    public interface ITransaction\n    {\n        void Execute<T>(ServiceArguments arguments, Action<T> action) where T : class;\n\n        void Execute<T>(Action<T> action) where T : class;\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/MartenExtension.cs",
    "content": "﻿using FubuMVC.Core;\nusing Marten;\n\nnamespace FubuMVC.Marten\n{\n    public class MartenExtension : IFubuRegistryExtension\n    {\n        public void Configure(FubuRegistry registry)\n        {\n            registry.Services.IncludeRegistry<MartenStructureMapServices>();\n\n            if (registry.Mode.InDevelopment())\n            {\n                registry.Services.For<IMartenSessionLogger>().Use<CommandRecordingLogger>();\n            }\n\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/MartenPersistenceReset.cs",
    "content": "using Marten;\n\nnamespace FubuMVC.Marten\n{\n    public class MartenPersistenceReset : IPersistenceReset\n    {\n        private readonly IDocumentStore _store;\n\n        public MartenPersistenceReset(IDocumentStore store)\n        {\n            _store = store;\n        }\n\n        public void ClearPersistedState()\n        {\n            _store.Advanced.Clean.DeleteAllDocuments();\n        }\n\n        public void CommitAllChanges()\n        {\n            // No-op. Don't rememb er what this was for, shamefully.\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/MartenStructureMapServices.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuCore.Logging;\nusing Marten;\nusing Marten.Services;\nusing Npgsql;\nusing NpgsqlTypes;\nusing StructureMap;\n\nnamespace FubuMVC.Marten\n{\n    public class MartenStructureMapServices : Registry\n    {\n        public MartenStructureMapServices()\n        {\n            ForSingletonOf<IDocumentStore>().UseIfNone<DocumentStore>();\n            For<IQuerySession>().UseIfNone(\"Build a QuerySession with logging\", c =>\n            {\n                var session = c.GetInstance<IDocumentStore>().QuerySession();\n                session.Logger = c.GetInstance<IMartenSessionLogger>();\n\n                return session;\n            });\n\n            For<IDocumentSession>().UseIfNone(c => c.GetInstance<ISessionBoundary>().Session());\n            For<ISessionBoundary>().UseIfNone<SessionBoundary>();\n            For<ITransaction>().UseIfNone<MartenTransaction>();\n\n\n            ForSingletonOf<IPersistenceReset>().UseIfNone<MartenPersistenceReset>();\n            ForSingletonOf<ICompleteReset>().UseIfNone<CompleteReset>();\n            For<IInitialState>().UseIfNone<NulloInitialState>();\n            For<IMartenSessionLogger>().UseIfNone<NulloMartenLogger>();\n        }\n\n    }\n\n\n    public class CommandRecordingLogger : IMartenSessionLogger\n    {\n        private readonly ILogger _logger;\n\n        public CommandRecordingLogger(ILogger logger)\n        {\n            _logger = logger;\n        }\n\n        public void LogSuccess(NpgsqlCommand command)\n        {\n            CommandCount++;\n            _logger.InfoMessage(new CommandExecuted(command));\n        }\n\n        public void LogFailure(NpgsqlCommand command, Exception ex)\n        {\n            CommandCount++;\n            _logger.InfoMessage(new CommandFailed(command, ex));\n        }\n\n        public void RecordSavedChanges(IDocumentSession session, IChangeSet commit)\n        {\n            \n        }\n\n        public int CommandCount { get; private set; }\n\n        public void RecordSavedChanges(IDocumentSession session)\n        {\n            \n        }\n    }\n\n\n    public class CommandExecuted : LogTopic\n    {\n        public CommandExecuted(NpgsqlCommand command)\n        {\n            CommandText = command.CommandText;\n            Args = new Dictionary<string, object>();\n            command.Parameters.Each(param =>\n            {\n                if (param.NpgsqlDbType == NpgsqlDbType.Jsonb || param.NpgsqlDbType == NpgsqlDbType.Json)\n                {\n                    Args.Add(param.ParameterName, \"[Json Data]\");\n                }\n                else\n                {\n                    Args.Add(param.ParameterName, param.Value);\n                }\n            });\n        }\n\n        public Dictionary<string, object> Args { get; set; }\n\n        public string CommandText { get; set; }\n    }\n\n    public class CommandFailed : CommandExecuted\n    {\n        public CommandFailed(NpgsqlCommand command, Exception e) : base(command)\n        {\n            ExceptionText = e.ToString();\n        }\n\n        public string ExceptionText { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/MartenTransaction.cs",
    "content": "﻿using System;\nusing System.Data;\nusing FubuCore.Binding;\nusing Marten;\nusing StructureMap;\n\nnamespace FubuMVC.Marten\n{\n    public class MartenTransaction : ITransaction\n    {\n        private readonly IContainer _container;\n\n        public MartenTransaction(IContainer container)\n        {\n            _container = container;\n        }\n\n        public void Execute<T>(ServiceArguments arguments, Action<T> action) where T : class\n        {\n            using (var nested = _container.GetNestedContainer())\n            {\n                nested.Apply(arguments);\n\n                var service = nested.GetInstance<T>();\n                action(service);\n\n                nested.GetInstance<ISessionBoundary>().SaveChanges();\n            }\n        }\n\n        public void Execute<T>(Action<T> action) where T : class\n        {\n            using (var nested = _container.GetNestedContainer())\n            {\n                var service = nested.GetInstance<T>();\n                action(service);\n\n                nested.GetInstance<ISessionBoundary>().SaveChanges();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/Membership/Audit.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Security.Authentication.Auditing;\n\nnamespace FubuMVC.Marten.Membership\n{\n    public class Audit : Entity\n    {\n        public AuditMessage Message { get; set; }\n        public DateTime Timestamp { get; set; }\n\n        public string Type\n        {\n            get { return Message.GetType().Name; }\n            set\n            {\n                // no-op;\n            }\n        }\n\n        public string Username\n        {\n            get { return Message.UserName; }\n            set\n            {\n                // do nothing\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/Membership/Entity.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Marten.Membership\n{\n    public abstract class Entity\n    {\n        public Guid Id { get; set; }\n\n        public bool Equals(Entity other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return other.Id.Equals(Id) && other.GetType() == GetType();\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != GetType()) return false;\n            return Equals((Entity)obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return Id.GetHashCode();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/Membership/LoginAuditPersistor.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core.Security.Authentication;\nusing Marten;\n\nnamespace FubuMVC.Marten.Membership\n{\n    public class LoginAuditPersistor\n    {\n        private readonly IDocumentSession _session;\n\n        public LoginAuditPersistor(IDocumentSession session)\n        {\n            _session = session;\n        }\n\n        public void LogFailure(LoginRequest request, Audit audit)\n        {\n            if (request.UserName.IsEmpty()) return;\n\n            _session.Store(audit);\n\n            var history = _session.Load<LoginFailureHistory>(request.UserName) ?? new LoginFailureHistory\n            {\n                Id = request.UserName\n            };\n\n            history.Attempts = request.NumberOfTries;\n            history.LockedOutTime = request.LockedOutUntil;\n\n            _session.Store(history);\n        }\n\n        public void LogSuccess(LoginRequest request, Audit audit)\n        {\n            _session.Store(audit);\n\n            var history = _session.Load<LoginFailureHistory>(request.UserName);\n            if (history != null)\n            {\n                _session.Delete(history);\n            }\n        }\n\n        public void ApplyHistory(LoginRequest request)\n        {\n            if (request.UserName.IsEmpty()) return;\n            var history = _session.Load<LoginFailureHistory>(request.UserName);\n            if (history == null) return;\n\n            request.NumberOfTries = history.Attempts;\n            request.LockedOutUntil = history.LockedOutTime;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/Membership/LoginFailureHistory.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Marten.Membership\n{\n    public class LoginFailureHistory\n    {\n        public string Id { get; set; }\n        public int Attempts { get; set; }\n        public DateTime? LockedOutTime { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/Membership/MembershipRepository.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Membership;\nusing Marten;\n\nnamespace FubuMVC.Marten.Membership\n{\n    public class MembershipRepository<T> : IMembershipRepository where T : User\n    {\n        private readonly IDocumentSession _repository;\n        private readonly IPasswordHash _hash;\n\n        public MembershipRepository(IDocumentSession repository, IPasswordHash hash)\n        {\n            _repository = repository;\n            _hash = hash;\n        }\n\n        public bool MatchesCredentials(LoginRequest request)\n        {\n            var hashed = _hash.CreateHash(request.Password);\n            return _repository.Query<T>().SingleOrDefault(x => x.UserName == request.UserName && x.Password == hashed) != null;\n        }\n\n        public IUserInfo FindByName(string username)\n        {\n            return _repository.Query<T>().SingleOrDefault(x => x.UserName == username);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/Membership/PersistedLoginAuditor.cs",
    "content": "﻿using System;\nusing FubuCore.Dates;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Auditing;\nusing Marten;\n\nnamespace FubuMVC.Marten.Membership\n{\n    public class PersistedLoginAuditor : ILoginAuditor\n    {\n        private readonly ISystemTime _systemTime;\n        private readonly IDocumentSession _session;\n        private readonly ILogger _logger;\n        private readonly LoginAuditPersistor _persistor;\n\n        public PersistedLoginAuditor(ISystemTime systemTime, IDocumentSession session, ILogger logger, LoginAuditPersistor persistor)\n        {\n            _systemTime = systemTime;\n            _session = session;\n            _logger = logger;\n            _persistor = persistor;\n        }\n\n        public void Audit(LoginRequest request)\n        {\n            if (request.Status == LoginStatus.Succeeded)\n            {\n                logSuccess(request);\n            }\n            else\n            {\n                logFailure(request);\n            }\n        }\n\n        private void logFailure(LoginRequest request)\n        {\n            var audit = new Audit\n            {\n                Message = new LoginFailure {UserName = request.UserName},\n                Timestamp = _systemTime.UtcNow()\n            };\n            try\n            {\n\n                _persistor.LogFailure(request, audit);\n                _session.SaveChanges();\n            }\n            catch (Exception e)\n            {\n                _logger.Error(\"Failed during login request auditing\", e);\n            }\n\n        }\n\n\n        private void logSuccess(LoginRequest request)\n        {\n            var audit = new Audit\n            {\n                Message = new LoginSuccess {UserName = request.UserName},\n                Timestamp = _systemTime.UtcNow()\n            };\n\n            try\n            {\n\n                _persistor.LogSuccess(request, audit);\n                _session.SaveChanges();\n            }\n            catch (Exception e)\n            {\n                _logger.Error(\"Failed during login request auditing\", e);\n            }\n\n        }\n\n\n        public void ApplyHistory(LoginRequest request)\n        {\n            try\n            {\n\n                _persistor.ApplyHistory(request);\n                _session.SaveChanges();\n            }\n            catch (Exception e)\n            {\n                _logger.Error(\"Failed during login request auditing\", e);\n            }\n\n        }\n\n\n        public void Audit<T>(T log) where T : AuditMessage\n        {\n            persistAudit(log);\n        }\n\n        private void persistAudit(AuditMessage message)\n        {\n            var audit = new Audit\n            {\n                Message = message,\n                Timestamp = _systemTime.UtcNow()\n            };\n\n            try\n            {\n\n                _session.Store(audit);\n                _session.SaveChanges();\n            }\n            catch (Exception e)\n            {\n                _logger.Error(\"Failed during login request auditing\", e);\n            }\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/Membership/PersistedMembership.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Auditing;\nusing FubuMVC.Core.Security.Authentication.Membership;\n\nnamespace FubuMVC.Marten.Membership\n{\n    public class PersistedMembership<T> : IFubuRegistryExtension where T : User\n    {\n        public void Configure(FubuRegistry registry)\n        {\n            registry.Services.ReplaceService<IMembershipRepository, MembershipRepository<T>>();\n            registry.Services.SetServiceIfNone<IPasswordHash, PasswordHash>();\n            registry.Services.ReplaceService<ILoginAuditor, PersistedLoginAuditor>();\n\n            registry.AlterSettings<AuthenticationSettings>(x =>\n            {\n                x.Strategies.AddToEnd(new MembershipNode(typeof (MembershipRepository<T>)));\n\n                x.Strategies.OfType<MembershipNode>()\n                    .Where(node => node.MembershipType == typeof (MembershipAuthentication))\n                    .ToArray()\n                    .Each(node => node.Remove());\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/Membership/User.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Security.Authentication.Membership;\n\nnamespace FubuMVC.Marten.Membership\n{\n    public class User : UserInfo\n    {\n        public Guid Id { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/NulloInitialState.cs",
    "content": "namespace FubuMVC.Marten\n{\n    public class NulloInitialState : IInitialState\n    {\n        public void Load()\n        {\n            // nothing\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing FubuMVC.Core;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"FubuMVC.Marten\")]\n\n[assembly:FubuModule]\n"
  },
  {
    "path": "src/FubuMVC.Marten/ResetMessage.cs",
    "content": "using FubuCore.Logging;\n\nnamespace FubuMVC.Marten\n{\n    public class ResetMessage : LogTopic\n    {\n        public string Message { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/SessionBoundary.cs",
    "content": "using System.Threading.Tasks;\nusing Marten;\n\nnamespace FubuMVC.Marten\n{\n    public class SessionBoundary : ISessionBoundary\n    {\n        private readonly object _lock = new object();\n        private readonly IMartenSessionLogger _logger;\n        private readonly IDocumentStore _store;\n        private IDocumentSession _session;\n\n        public SessionBoundary(IDocumentStore store, IMartenSessionLogger logger)\n        {\n            _store = store;\n            _logger = logger;\n        }\n\n        public void Dispose()\n        {\n        }\n\n        public IDocumentSession Session()\n        {\n            if (_session == null)\n            {\n                lock (_lock)\n                {\n                    if (_session == null)\n                    {\n                        _session = _store.OpenSession();\n                        _session.Logger = _logger;\n                    }\n                }\n            }\n\n            return _session;\n        }\n\n        public async Task SaveChanges()\n        {\n            if (_session != null)\n            {\n                await _session.SaveChangesAsync().ConfigureAwait(false);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/TransactionalBehavior.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Behaviors;\n\nnamespace FubuMVC.Marten\n{\n    public class TransactionalBehavior : WrappingBehavior\n    {\n        private readonly ISessionBoundary _session;\n\n        public TransactionalBehavior(ISessionBoundary session)\n        {\n            _session = session;\n        }\n\n        protected override async Task invoke(Func<Task> func)\n        {\n            try\n            {\n                await func().ConfigureAwait(false);\n                await _session.SaveChanges().ConfigureAwait(false);\n            }\n            catch (Exception)\n            {\n                _session.Dispose();\n\n                throw;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/TransactionalBehaviorPolicy.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\n\nnamespace FubuMVC.Marten\n{\n    public class TransactionalBehaviorPolicy : IConfigurationAction\n    {\n        public void Configure(BehaviorGraph graph)\n        {\n            graph.Routes.Commands.Each(x => x.InsertFirst(Wrapper.For<TransactionalBehavior>()));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten/paket.references",
    "content": "FubuCore\nMarten\nStructureMap\nSystem.Data.Common"
  },
  {
    "path": "src/FubuMVC.Marten.Tests/ConnectionSource.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing FubuCore;\n\nnamespace FubuMVC.Marten.Tests\n{\n    public class ConnectionSource\n    {\n        public static readonly string EnvironmentKey = \"fubumvc.marten.tests\";\n\n        public static void SetConnectionString(string connectionString)\n        {\n            Environment.SetEnvironmentVariable(EnvironmentKey, connectionString);\n        }\n\n        public static string GetConnectionString()\n        {\n            var connectionString = Environment.GetEnvironmentVariable(EnvironmentKey);\n\n            if (connectionString.IsEmpty())\n            {\n                throw new Exception($\"You need to set the Environment variable {EnvironmentKey} to the connection string for your Postgresql schema\");\n            }\n\n            return connectionString;\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten.Tests/FixieConvention.cs",
    "content": "﻿using FubuMVC.Tests;\n\nnamespace FubuMVC.Marten.Tests\n{\n    // Pulls in the same convention we use in FubuMVC.Tests\n    public class FixieConvention : CustomConvention\n    {\n         \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Marten.Tests/FubuMVC.Marten.Tests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{32C9310D-75D0-4616-9017-42BDC6C3EFDA}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>FubuMVC.Marten.Tests</RootNamespace>\n    <AssemblyName>FubuMVC.Marten.Tests</AssemblyName>\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"ConnectionSource.cs\" />\n    <Compile Include=\"FixieConvention.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"wires_up_marten_into_fubumvc_app_Tests.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\FubuMVC.Marten\\FubuMVC.Marten.csproj\">\n      <Project>{1431a58d-34dc-4efb-9e3d-dc545d51be6a}</Project>\n      <Name>FubuMVC.Marten</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\FubuMVC.Tests\\FubuMVC.Tests.csproj\">\n      <Project>{feb91f9f-ece2-480c-b39c-a44bbf1f7b01}</Project>\n      <Name>FubuMVC.Tests</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"Microsoft.Win32.Registry;System.AppContext;System.Diagnostics.Contracts;System.Diagnostics.Process;System.Diagnostics.StackTrace;System.Dynamic.Runtime;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Net.NameResolution;System.Net.NetworkInformation;System.Net.Security;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Runtime.Serialization.Primitives;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Security.Principal.Windows;System.Threading;System.Threading.Overlapped;System.Xml.XmlSerializer\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Baseline\">\n          <HintPath>..\\..\\packages\\Baseline\\lib\\net451\\Baseline.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Baseline\">\n          <HintPath>..\\..\\packages\\Baseline\\lib\\netstandard1.3\\Baseline.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Fixie\">\n          <HintPath>..\\..\\packages\\Fixie\\lib\\net45\\Fixie.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Marten\">\n          <HintPath>..\\..\\packages\\Marten\\lib\\net46\\Marten.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"Marten\">\n          <HintPath>..\\..\\packages\\Marten\\lib\\netstandard1.3\\Marten.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Dataflow\">\n          <HintPath>..\\..\\packages\\Microsoft.Tpl.Dataflow\\lib\\portable-net45+win8+wpa81\\System.Threading.Tasks.Dataflow.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Primitives\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Registry\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Registry\\ref\\netstandard1.3\\Microsoft.Win32.Registry.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net20\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net35\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net40\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\netstandard1.0\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0') Or ($(TargetFrameworkProfile) == 'Profile5') Or ($(TargetFrameworkProfile) == 'Profile6') Or ($(TargetFrameworkProfile) == 'Profile14') Or ($(TargetFrameworkProfile) == 'Profile19') Or ($(TargetFrameworkProfile) == 'Profile24') Or ($(TargetFrameworkProfile) == 'Profile37') Or ($(TargetFrameworkProfile) == 'Profile42') Or ($(TargetFrameworkProfile) == 'Profile47') Or ($(TargetFrameworkProfile) == 'Profile92') Or ($(TargetFrameworkProfile) == 'Profile102') Or ($(TargetFrameworkProfile) == 'Profile136') Or ($(TargetFrameworkProfile) == 'Profile147') Or ($(TargetFrameworkProfile) == 'Profile158') Or ($(TargetFrameworkProfile) == 'Profile225') Or ($(TargetFrameworkProfile) == 'Profile240') Or ($(TargetFrameworkProfile) == 'Profile255') Or ($(TargetFrameworkProfile) == 'Profile328') Or ($(TargetFrameworkProfile) == 'Profile336') Or ($(TargetFrameworkProfile) == 'Profile344')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net40+sl5+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'MonoAndroid') Or ($(TargetFrameworkIdentifier) == 'MonoTouch') Or ($(TargetFrameworkIdentifier) == 'Xamarin.iOS') Or ($(TargetFrameworkIdentifier) == 'Xamarin.Mac') Or ($(TargetFrameworkProfile) == 'Profile7') Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile32') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile78') Or ($(TargetFrameworkProfile) == 'Profile111') Or ($(TargetFrameworkProfile) == 'Profile151') Or ($(TargetFrameworkProfile) == 'Profile157') Or ($(TargetFrameworkProfile) == 'Profile259')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.5'\">\n      <ItemGroup>\n        <Reference Include=\"Npgsql\">\n          <HintPath>..\\..\\packages\\Npgsql\\lib\\net45\\Npgsql.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Npgsql\">\n          <HintPath>..\\..\\packages\\Npgsql\\lib\\net451\\Npgsql.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"Npgsql\">\n          <HintPath>..\\..\\packages\\Npgsql\\lib\\netstandard1.3\\Npgsql.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Remotion.Linq\">\n          <HintPath>..\\..\\packages\\Remotion.Linq\\lib\\net45\\Remotion.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Remotion.Linq\">\n          <HintPath>..\\..\\packages\\Remotion.Linq\\lib\\netstandard1.0\\Remotion.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Shouldly\">\n          <HintPath>..\\..\\packages\\Shouldly\\lib\\net35\\Shouldly.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Shouldly\">\n          <HintPath>..\\..\\packages\\Shouldly\\lib\\net40\\Shouldly.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.AppContext\">\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Buffers\">\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Immutable\">\n          <HintPath>..\\..\\packages\\System.Collections.Immutable\\lib\\netstandard1.0\\System.Collections.Immutable.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.NonGeneric\">\n          <HintPath>..\\..\\packages\\System.Collections.NonGeneric\\ref\\netstandard1.3\\System.Collections.NonGeneric.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Specialized\">\n          <HintPath>..\\..\\packages\\System.Collections.Specialized\\ref\\netstandard1.3\\System.Collections.Specialized.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.ComponentModel\">\n          <HintPath>..\\..\\packages\\System.ComponentModel\\ref\\netstandard1.0\\System.ComponentModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ComponentModel.Primitives\">\n          <HintPath>..\\..\\packages\\System.ComponentModel.Primitives\\ref\\netstandard1.0\\System.ComponentModel.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.ComponentModel.TypeConverter\">\n          <HintPath>..\\..\\packages\\System.ComponentModel.TypeConverter\\ref\\netstandard1.0\\System.ComponentModel.TypeConverter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ComponentModel.TypeConverter\">\n          <HintPath>..\\..\\packages\\System.ComponentModel.TypeConverter\\ref\\netstandard1.5\\System.ComponentModel.TypeConverter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Console\">\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Data.Common\">\n          <HintPath>..\\..\\packages\\System.Data.Common\\ref\\net451\\System.Data.Common.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Data.Common\">\n          <HintPath>..\\..\\packages\\System.Data.Common\\ref\\netstandard1.2\\System.Data.Common.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile32') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile84') Or ($(TargetFrameworkProfile) == 'Profile151') Or ($(TargetFrameworkProfile) == 'Profile157')\">\n      <ItemGroup>\n        <Reference Include=\"System.Data.Common\">\n          <HintPath>..\\..\\packages\\System.Data.Common\\ref\\portable-net451+win8+wp8+wpa81\\System.Data.Common.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Contracts\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Contracts\\ref\\netstandard1.0\\System.Diagnostics.Contracts.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Process\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Process\\ref\\netstandard1.3\\System.Diagnostics.Process.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Process\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Process\\ref\\netstandard1.4\\System.Diagnostics.Process.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.StackTrace\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.StackTrace\\ref\\netstandard1.3\\System.Diagnostics.StackTrace.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tools\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.0\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.3\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Calendars\">\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Extensions\">\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression\">\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression.ZipFile\">\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Queryable\">\n          <HintPath>..\\..\\packages\\System.Linq.Queryable\\ref\\netstandard1.0\\System.Linq.Queryable.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.NameResolution\">\n          <HintPath>..\\..\\packages\\System.Net.NameResolution\\ref\\netstandard1.3\\System.Net.NameResolution.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.NetworkInformation\">\n          <HintPath>..\\..\\packages\\System.Net.NetworkInformation\\ref\\netstandard1.3\\System.Net.NetworkInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Primitives\">\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Security\">\n          <HintPath>..\\..\\packages\\System.Net.Security\\ref\\netstandard1.3\\System.Net.Security.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Extensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Metadata\">\n          <HintPath>..\\..\\packages\\System.Reflection.Metadata\\lib\\netstandard1.1\\System.Reflection.Metadata.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Primitives\">\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Resources.ResourceManager\">\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Handles\">\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Loader\">\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Numerics\">\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.0\\System.Runtime.Serialization.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.3\\System.Runtime.Serialization.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Claims\">\n          <HintPath>..\\..\\packages\\System.Security.Claims\\ref\\netstandard1.3\\System.Security.Claims.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Cng\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Csp\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Principal\">\n          <HintPath>..\\..\\packages\\System.Security.Principal\\ref\\netstandard1.0\\System.Security.Principal.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Principal.Windows\">\n          <HintPath>..\\..\\packages\\System.Security.Principal.Windows\\ref\\netstandard1.3\\System.Security.Principal.Windows.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Overlapped\">\n          <HintPath>..\\..\\packages\\System.Threading.Overlapped\\ref\\netstandard1.3\\System.Threading.Overlapped.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Dataflow\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Dataflow\\lib\\netstandard1.1\\System.Threading.Tasks.Dataflow.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Thread\">\n          <HintPath>..\\..\\packages\\System.Threading.Thread\\ref\\netstandard1.3\\System.Threading.Thread.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.ThreadPool\">\n          <HintPath>..\\..\\packages\\System.Threading.ThreadPool\\ref\\netstandard1.3\\System.Threading.ThreadPool.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Timer\">\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XmlDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XmlDocument\\ref\\netstandard1.3\\System.Xml.XmlDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XmlSerializer\">\n          <HintPath>..\\..\\packages\\System.Xml.XmlSerializer\\ref\\netstandard1.3\\System.Xml.XmlSerializer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/FubuMVC.Marten.Tests/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"FubuMVC.Marten.Tests\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Towers Watson\")]\n[assembly: AssemblyProduct(\"FubuMVC.Marten.Tests\")]\n[assembly: AssemblyCopyright(\"Copyright © Towers Watson 2016\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"32c9310d-75d0-4616-9017-42bdc6c3efda\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/FubuMVC.Marten.Tests/paket.references",
    "content": "FubuCore\nMarten\nStructureMap\nFixie\nShouldly\nNpgsql"
  },
  {
    "path": "src/FubuMVC.Marten.Tests/wires_up_marten_into_fubumvc_app_Tests.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core;\nusing Marten;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Marten.Tests\n{\n\n    public class MartenApp : FubuRegistry\n    {\n        public MartenApp()\n        {\n            AlterSettings<StoreOptions>(_ =>\n            {\n                _.Connection(ConnectionSource.GetConnectionString());\n                _.AutoCreateSchemaObjects = AutoCreate.All;\n            });\n\n            //Policies.Local.Add<TransactionalBehaviorPolicy>();\n        }\n    }\n\n    [TestFixture]\n    public class wires_up_marten_into_fubumvc_app_Tests\n    {\n        [Test, Explicit]\n        public void set_up_connection_string()\n        {\n            ConnectionSource.SetConnectionString(\"Host=localhost;Username=postgres;Password=jasper;Database=marten_test\");\n        }\n\n        [Test]\n        public void should_wire_up_document_store_into_application()\n        {\n            using (var runtime = FubuRuntime.For<MartenApp>())\n            {\n                var store = runtime.Get<IDocumentStore>();\n                store.Advanced.Clean.CompletelyRemoveAll();\n\n                using (var session = store.LightweightSession())\n                {\n                    session.Store(new User {Id = \"Jeremy\"}, new User {Id = \"Corey\"}, new User {Id = \"Jens\"});\n                    session.SaveChanges();\n                    session.Query<User>().Count().ShouldBe(3);\n                }\n            }\n        }\n\n        [Test]\n        public void command_logging_in_prod_mode()\n        {\n\n            using (var runtime = FubuRuntime.For<MartenApp>())\n            {\n                runtime.Get<IMartenSessionLogger>().ShouldBeOfType<NulloMartenLogger>();\n\n                runtime.Get<IDocumentSession>().Logger.ShouldNotBeOfType<CommandRecordingLogger>();\n                runtime.Get<IQuerySession>().Logger.ShouldNotBeOfType<CommandRecordingLogger>();\n\n\n            }\n        }\n\n        [Test]\n        public void command_logging_in_dev_mode()\n        {\n            var app = new MartenApp {Mode = \"Development\"};\n\n            using (var runtime = app.ToRuntime())\n            {\n                runtime.Get<IMartenSessionLogger>().ShouldBeOfType<CommandRecordingLogger>();\n\n                runtime.Get<IDocumentSession>().Logger.ShouldBeOfType<CommandRecordingLogger>();\n                runtime.Get<IQuerySession>().Logger.ShouldBeOfType<CommandRecordingLogger>();\n\n\n            }\n        }\n\n        [Test]\n        public void querysession_is_wired_up()\n        {\n            using (var runtime = FubuRuntime.For<MartenApp>())\n            {\n                var store = runtime.Get<IDocumentStore>();\n\n                store.Advanced.Clean.CompletelyRemoveAll();\n\n                using (var session = store.LightweightSession())\n                {\n                    session.Store(new User { Id = \"Jeremy\" }, new User { Id = \"Corey\" }, new User { Id = \"Jens\" });\n                    session.SaveChanges();\n                }\n\n                runtime.Scenario(_ =>\n                {\n                    _.Get.Url(\"\");\n                    _.ContentShouldBe(\"Corey, Jens, Jeremy\");\n                });\n            }\n        }\n\n        [Test]\n        public void documentsession_is_wired_up()\n        {\n            using (var runtime = FubuRuntime.For<MartenApp>())\n            {\n                var store = runtime.Get<IDocumentStore>();\n\n                store.Advanced.Clean.CompletelyRemoveAll();\n\n                using (var session = store.LightweightSession())\n                {\n                    session.Store(new User { Id = \"Jeremy\" }, new User { Id = \"Corey\" }, new User { Id = \"Jens\" });\n                    session.SaveChanges();\n                }\n\n                runtime.Scenario(_ =>\n                {\n                    _.Post.Json(new User {Id = \"Tim\"}).Accepts(\"text/plain\");\n                    _.ContentShouldBe(\"Corey, Jens, Jeremy, Tim\");\n                });\n            }\n        }\n\n        [Test]\n        public void use_the_transactional_behavior_policy()\n        {\n            var registry = new MartenApp();\n            registry.Policies.Local.Add<TransactionalBehaviorPolicy>();\n\n            using (var runtime = registry.ToRuntime())\n            {\n                var store = runtime.Get<IDocumentStore>();\n\n                store.Advanced.Clean.CompletelyRemoveAll();\n\n                using (var session = store.LightweightSession())\n                {\n                    session.Store(new User { Id = \"Jeremy\" }, new User { Id = \"Corey\" }, new User { Id = \"Jens\" });\n                    session.SaveChanges();\n                }\n\n                runtime.Scenario(_ =>\n                {\n                    _.Put.Json(new User {Id = \"Nieve\"}).Accepts(\"text/plain\");\n                });\n\n                using (var session = store.LightweightSession())\n                {\n                    session.Load<User>(\"Nieve\").ShouldNotBeNull();\n                }\n            }\n        }\n\n        [Test]\n        public void use_transaction()\n        {\n            using (var runtime = FubuRuntime.For<MartenApp>())\n            {\n                runtime.Get<IDocumentStore>().Advanced.Clean.CompletelyRemoveAll();\n\n                var tx = runtime.Get<ITransaction>();\n                tx.Execute<IDocumentSession>(session => session.Store(new User {Id = \"Hank\"}));\n\n                using (var session = runtime.Get<IQuerySession>())\n                {\n                    session.Load<User>(\"Hank\").ShouldNotBeNull();\n                }\n            }\n        }\n\n        [Test]\n        public void use_complete_reset()\n        {\n            using (var runtime = FubuRuntime.For<MartenApp>())\n            {\n                var store = runtime.Get<IDocumentStore>();\n                store.Advanced.Clean.CompletelyRemoveAll();\n\n                using (var session = store.LightweightSession())\n                {\n                    session.Store(new User { Id = \"Jeremy\" }, new User { Id = \"Corey\" }, new User { Id = \"Jens\" });\n                    session.SaveChanges();\n                    session.Query<User>().Count().ShouldBe(3);\n                }\n\n                runtime.Get<ICompleteReset>().ResetState();\n\n                using (var session = store.QuerySession())\n                {\n                    session.Query<User>().Any().ShouldBeFalse();\n                }\n            }\n        }\n    }\n\n    public class HomeEndpoint\n    {\n        private readonly IQuerySession _session;\n\n        public HomeEndpoint(IQuerySession session)\n        {\n            _session = session;\n        }\n\n        public string Index()\n        {\n            return _session.Query<User>().OrderBy(x => x.Id).ToArray().Select(x => x.Id).Join(\", \");\n        }\n\n\n    }\n\n    public class UpdateEndpoint\n    {\n        private readonly IDocumentSession _session;\n        private readonly HomeEndpoint _home;\n\n        public UpdateEndpoint(IDocumentSession session, HomeEndpoint home)\n        {\n            _session = session;\n            _home = home;\n        }\n\n        public string post_user(User user)\n        {\n            _session.Store(user);\n            _session.SaveChanges();\n\n            return _home.Index();\n        }\n\n        public string put_user(User user)\n        {\n            _session.Store(user);\n            return \"okay\";\n        }\n    }\n\n    public class User\n    {\n        public string Id;\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Razor/.package-manifest",
    "content": "﻿<?xml version=\"1.0\"?>\r\n<package xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <Name>FubuMVC.Razor</Name>\r\n  <assembly>FubuMVC.Razor</assembly>\r\n  <assembly>Razor</assembly>\r\n</package>"
  },
  {
    "path": "src/FubuMVC.Razor/Core/FubuCSharpCodeParser.cs",
    "content": "﻿using System;\nusing System.Globalization;\nusing System.Web.Razor.Generator;\nusing System.Web.Razor.Parser;\nusing System.Web.Razor.Text;\n\nnamespace FubuMVC.Razor.Core\n{\n    // from System.Web.Mvc\n    public class FubuCSharpCodeParser : CSharpCodeParser\n    {\n        private const string ModelKeyword = \"model\";\n        private const string GenericTypeFormatString = \"{0}<{1}>\";\n        private SourceLocation? _endInheritsLocation;\n        private bool _modelStatementFound;\n\n        public FubuCSharpCodeParser()\n        {\n            MapDirectives(ModelDirective, ModelKeyword);\n        }\n\n        protected override void InheritsDirective()\n        {\n            // Verify we're on the right keyword and accept\n            AssertDirective(SyntaxConstants.CSharp.InheritsKeyword);\n            AcceptAndMoveNext();\n            _endInheritsLocation = CurrentLocation;\n\n            InheritsDirectiveCore();\n            CheckForInheritsAndModelStatements();\n        }\n\n        private void CheckForInheritsAndModelStatements()\n        {\n            if (_modelStatementFound && _endInheritsLocation.HasValue)\n            {\n                Context.OnError(_endInheritsLocation.Value,\n                                String.Format(CultureInfo.CurrentCulture,\n                                              \"The 'inherits' keyword is not allowed when a '{0}' keyword is used.\",\n                                              ModelKeyword));\n            }\n        }\n\n        protected virtual void ModelDirective()\n        {\n            // Verify we're on the right keyword and accept\n            AssertDirective(ModelKeyword);\n            AcceptAndMoveNext();\n\n            SourceLocation endModelLocation = CurrentLocation;\n\n            BaseTypeDirective(\n                String.Format(CultureInfo.CurrentCulture,\n                              \"The '{0}' keyword must be followed by a type name on the same line.\", ModelKeyword),\n                CreateModelCodeGenerator);\n\n            if (_modelStatementFound)\n            {\n                Context.OnError(endModelLocation,\n                                String.Format(CultureInfo.CurrentCulture,\n                                              \"Only one '{0}' statement is allowed in a file.\",\n                                              ModelKeyword));\n            }\n\n            _modelStatementFound = true;\n\n            CheckForInheritsAndModelStatements();\n        }\n\n        private SpanCodeGenerator CreateModelCodeGenerator(string model)\n        {\n            return new SetModelTypeCodeGenerator(model, GenericTypeFormatString);\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Razor/Core/FubuCSharpRazorCodeLanguage.cs",
    "content": "﻿using System.Web.Razor;\nusing System.Web.Razor.Parser;\n\nnamespace FubuMVC.Razor.Core\n{\n    //from System.Web.Mvc\n    public class FubuCSharpRazorCodeLanguage : CSharpRazorCodeLanguage\n    {\n        public override ParserBase CreateCodeParser()\n        {\n            return new FubuCSharpCodeParser();\n        } \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Razor/Core/FubuVBCodeParser.cs",
    "content": "﻿using System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Web.Razor.Generator;\nusing System.Web.Razor.Parser;\nusing System.Web.Razor.Parser.SyntaxTree;\nusing System.Web.Razor.Text;\nusing System.Web.Razor.Tokenizer.Symbols;\n\nnamespace FubuMVC.Razor.Core\n{\n    // from System.Web.Mvc\n    public class FubuVBCodeParser : VBCodeParser\n    {\n        internal const string ModelTypeKeyword = \"ModelType\";\n        private const string GenericTypeFormatString = \"{0}(Of {1})\";\n        private SourceLocation? _endInheritsLocation;\n        private bool _modelStatementFound;\n\n        public FubuVBCodeParser()\n        {\n            MapDirective(ModelTypeKeyword, ModelTypeDirective);\n        }\n\n        protected override bool InheritsStatement()\n        {\n            // Verify we're on the right keyword and accept\n            Assert(VBKeyword.Inherits);\n            VBSymbol inherits = CurrentSymbol;\n            NextToken();\n            _endInheritsLocation = CurrentLocation;\n            PutCurrentBack();\n            PutBack(inherits);\n            EnsureCurrent();\n\n            bool result = base.InheritsStatement();\n            CheckForInheritsAndModelStatements();\n            return result;\n        }\n\n        private void CheckForInheritsAndModelStatements()\n        {\n            if (_modelStatementFound && _endInheritsLocation.HasValue)\n            {\n                Context.OnError(_endInheritsLocation.Value, String.Format(CultureInfo.CurrentCulture, \"The 'inherits' keyword is not allowed when a '{0}' keyword is used.\", ModelTypeKeyword));\n            }\n        }\n\n        protected virtual bool ModelTypeDirective()\n        {\n            AssertDirective(ModelTypeKeyword);\n\n            Span.CodeGenerator = SpanCodeGenerator.Null;\n            Context.CurrentBlock.Type = BlockType.Directive;\n\n            AcceptAndMoveNext();\n            SourceLocation endModelLocation = CurrentLocation;\n\n            if (At(VBSymbolType.WhiteSpace))\n            {\n                Span.EditHandler.AcceptedCharacters = AcceptedCharacters.None;\n            }\n\n            AcceptWhile(VBSymbolType.WhiteSpace);\n            Output(SpanKind.MetaCode);\n\n            if (_modelStatementFound)\n            {\n                Context.OnError(endModelLocation, String.Format(CultureInfo.CurrentCulture, \"Only one '{0}' statement is allowed in a file.\", ModelTypeKeyword));\n            }\n            _modelStatementFound = true;\n\n            if (EndOfFile || At(VBSymbolType.WhiteSpace) || At(VBSymbolType.NewLine))\n            {\n                Context.OnError(endModelLocation, \"The '{0}' keyword must be followed by a type name on the same line.\", ModelTypeKeyword);\n            }\n\n            // Just accept to a newline\n            AcceptUntil(VBSymbolType.NewLine);\n            if (!Context.DesignTimeMode)\n            {\n                // We want the newline to be treated as code, but it causes issues at design-time.\n                Optional(VBSymbolType.NewLine);\n            }\n\n            string baseType = String.Concat(Span.Symbols.Select(s => s.Content)).Trim();\n            Span.CodeGenerator = new SetModelTypeCodeGenerator(baseType, GenericTypeFormatString);\n\n            CheckForInheritsAndModelStatements();\n            Output(SpanKind.Code);\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Razor/Core/FubuVBRazorCodeLanguage.cs",
    "content": "﻿using System.Web.Razor;\nusing System.Web.Razor.Parser;\n\nnamespace FubuMVC.Razor.Core\n{\n    //from System.Web.Mvc\n    public class FubuVBRazorCodeLanguage : VBRazorCodeLanguage\n    {\n        public override ParserBase CreateCodeParser()\n        {\n            return new FubuVBCodeParser();\n        } \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Razor/Core/RazorCodeLanguageFactory.cs",
    "content": "﻿using System;\nusing System.Web.Razor;\n\nnamespace FubuMVC.Razor.Core\n{\n    public class RazorCodeLanguageFactory\n    {\n         public static RazorCodeLanguage Create(string extension)\n         {\n             RazorCodeLanguage language;\n             switch (extension)\n             {\n                 case \".cshtml\":\n                     language = new FubuCSharpRazorCodeLanguage();\n                     break;\n                 case \".vbhtml\":\n                     language = new VBRazorCodeLanguage();\n                     break;\n                 default:\n                     throw new ArgumentException(\"Invalid extension for Razor engine.\");\n             }\n             return language;\n         }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Razor/Core/SetModelTypeCodeGenerator.cs",
    "content": "﻿using System;\nusing System.Globalization;\nusing System.Web.Razor.Generator;\n\nnamespace FubuMVC.Razor.Core\n{\n    internal class SetModelTypeCodeGenerator : SetBaseTypeCodeGenerator\n    {\n        private readonly string _genericTypeFormat;\n\n        public SetModelTypeCodeGenerator(string modelType, string genericTypeFormat)\n            : base(modelType)\n        {\n            _genericTypeFormat = genericTypeFormat;\n            ModelType = modelType;\n        }\n\n        public string ModelType { get; private set; }\n\n        protected override string ResolveType(CodeGeneratorContext context, string baseType)\n        {\n            return String.Format(\n                CultureInfo.InvariantCulture,\n                _genericTypeFormat,\n                context.Host.DefaultBaseClass,\n                baseType);\n        }\n\n        public override bool Equals(object obj)\n        {\n            SetModelTypeCodeGenerator other = obj as SetModelTypeCodeGenerator;\n            return other != null &&\n                base.Equals(obj) &&\n                String.Equals(_genericTypeFormat, other._genericTypeFormat, StringComparison.Ordinal);\n        }\n\n        public override int GetHashCode()\n        {\n            return string.Format(\"{0}|{1}\", base.GetHashCode(), _genericTypeFormat).GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return \"Model:\" + BaseType;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Razor/FubuMVC.Razor.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{A88246A6-2A7A-4964-902E-A5A7FDAAA9D4}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>FubuMVC.Razor</RootNamespace>\r\n    <AssemblyName>FubuMVC.Razor</AssemblyName>\r\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <TargetFrameworkProfile />\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <Prefer32Bit>false</Prefer32Bit>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <Prefer32Bit>false</Prefer32Bit>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"System.Web\" />\r\n    <Reference Include=\"System.Xml\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"..\\CommonAssemblyInfo.cs\">\r\n      <Link>CommonAssemblyInfo.cs</Link>\r\n    </Compile>\r\n    <Compile Include=\"Core\\FubuVBCodeParser.cs\" />\r\n    <Compile Include=\"Core\\FubuVBRazorCodeLanguage.cs\" />\r\n    <Compile Include=\"Core\\FubuCSharpCodeParser.cs\" />\r\n    <Compile Include=\"Core\\FubuCSharpRazorCodeLanguage.cs\" />\r\n    <Compile Include=\"Core\\RazorCodeLanguageFactory.cs\" />\r\n    <Compile Include=\"Core\\SetModelTypeCodeGenerator.cs\" />\r\n    <Compile Include=\"RazorModel\\RazorTemplateGenerator.cs\" />\r\n    <Compile Include=\"RazorModel\\TemplateCompiler.cs\" />\r\n    <Compile Include=\"Rendering\\PositionTagged.cs\" />\r\n    <Compile Include=\"Rendering\\AttributeValue.cs\" />\r\n    <Compile Include=\"Rendering\\TemplateHelper.cs\" />\r\n    <Compile Include=\"TemplateFactoryCache.cs\" />\r\n    <Compile Include=\"RazorEngineSettings.cs\" />\r\n    <Compile Include=\"RazorViewExtensions.cs\" />\r\n    <Compile Include=\"Registration\\ViewParser.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"Rendering\\FubuRazorView.cs\" />\r\n    <Compile Include=\"Rendering\\IPartialRenderer.cs\" />\r\n    <Compile Include=\"RazorModel\\SpanExtensions.cs\" />\r\n    <Compile Include=\"RazorModel\\RazorTemplate.cs\" />\r\n    <Compile Include=\"RazorModel\\TemplateExtensions.cs\" />\r\n    <Compile Include=\"RazorViewFacility.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\".package-manifest\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\r\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\r\n      <Name>FubuMVC.Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\r\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\r\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\r\n  </Target>\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n  <ItemGroup>\r\n    <Reference Include=\"FubuCore\">\r\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\r\n      <Private>True</Private>\r\n      <Paket>True</Paket>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"HtmlTags\">\r\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Web.Razor\">\r\n          <HintPath>..\\..\\packages\\Microsoft.AspNet.Razor\\lib\\net40\\System.Web.Razor.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Win32.Primitives\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.AppContext\">\r\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Buffers\">\r\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Console\">\r\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tools\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Calendars\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression.ZipFile\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Http\">\r\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"mscorlib\">\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Resources.ResourceManager\">\r\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Handles\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Loader\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Numerics\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Cng\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Csp\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Timer\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n</Project>"
  },
  {
    "path": "src/FubuMVC.Razor/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\r\nusing FubuMVC.Core;\r\n\r\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"FubuMVC.Razor\")]\n\n\n\n[assembly: FubuModule]\n"
  },
  {
    "path": "src/FubuMVC.Razor/RazorEngineSettings.cs",
    "content": "using System;\r\nusing FubuCore;\r\nusing FubuMVC.Razor.Rendering;\r\n\r\nnamespace FubuMVC.Razor\r\n{\r\n    public class RazorEngineSettings\r\n    {\r\n        public RazorEngineSettings()\r\n        {\r\n            defaultSearch();\r\n            defaultTemplateType();\r\n        }\r\n\r\n        private void defaultTemplateType()\r\n        {\r\n            BaseTemplateType = typeof (FubuRazorView);\r\n        }\r\n\r\n        private void defaultSearch()\r\n        {\r\n            Search = new FileSet {DeepSearch = true};\r\n            Search.AppendInclude(\"*cshtml\");\r\n            Search.AppendInclude(\"*vbhtml\");\r\n            Search.AppendExclude(\"bin/*.*\");\r\n            Search.AppendExclude(\"obj/*.*\");\r\n        }\r\n\r\n        public void UseBaseTemplateType<TTemplate>() where TTemplate : FubuRazorView\r\n        {\r\n            BaseTemplateType = typeof (TTemplate);\r\n        }\r\n\r\n        public FileSet Search { get; private set; }\r\n\r\n        public Type BaseTemplateType { get; private set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Razor/RazorModel/RazorTemplate.cs",
    "content": "﻿using System;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.View.Model;\r\nusing FubuMVC.Core.View.Rendering;\r\nusing FubuMVC.Razor.Registration;\r\nusing FubuMVC.Razor.Rendering;\r\n\r\nnamespace FubuMVC.Razor.RazorModel\r\n{\r\n    public class RazorTemplate : Template\r\n    {\r\n        private readonly ITemplateFactory _factory;\r\n        private static readonly IViewParser ViewParser = new ViewParser();\r\n        private readonly Guid _generatedViewId = Guid.NewGuid();\r\n\r\n        public RazorTemplate(IFubuApplicationFiles files, IFubuFile file, ITemplateFactory factory) : base(file, files)\r\n        {\r\n            _factory = factory;\r\n        }\r\n\r\n        public Guid GeneratedViewId\r\n        {\r\n            get { return _generatedViewId; }\r\n        }\r\n\r\n\r\n        // TODO -- some commonality here between RazorTemplate and SparkTemplate!\r\n        protected override Parsing createParsing(IFubuApplicationFiles files)\r\n        {\r\n            var chunks = ViewParser.Parse(FilePath).ToList();\r\n\r\n            return new Parsing\r\n            {\r\n                Master = chunks.Master(),\r\n                ViewModelType = chunks.ViewModel(),\r\n                Namespaces = chunks.Namespaces()\r\n            };\r\n        }\r\n\r\n        public override IRenderableView GetView()\r\n        {\r\n            return CreateInstance();\r\n        }\r\n\r\n        public override IRenderableView GetPartialView()\r\n        {\r\n            return CreateInstance(true);\r\n        }\r\n\r\n        private IFubuRazorView CreateInstance(bool partialOnly = false)\r\n        {\r\n            var currentDescriptor = this;\r\n            var returnTemplate = _factory.GetView(currentDescriptor);\r\n            returnTemplate.OriginTemplate = this;\r\n            var currentTemplate = returnTemplate;\r\n\r\n            while (currentDescriptor.Master != null && !partialOnly)\r\n            {\r\n                currentDescriptor = currentDescriptor.Master.As<RazorTemplate>();\r\n\r\n                var layoutTemplate = _factory.GetView(currentDescriptor);\r\n                layoutTemplate.OriginTemplate = returnTemplate.OriginTemplate;\r\n                currentTemplate.UseLayout(layoutTemplate);\r\n                currentTemplate = layoutTemplate;\r\n            }\r\n\r\n            return returnTemplate;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Razor/RazorModel/RazorTemplateGenerator.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Razor;\nusing System.Web.Razor.Parser.SyntaxTree;\nusing FubuMVC.Core.View.Model;\n\nnamespace FubuMVC.Razor.RazorModel\n{\n    public interface IRazorTemplateGenerator\n    {\n        GeneratorResults GenerateCode(RazorTemplate descriptor, string className, RazorEngineHost host);\n    }\n\n    public class RazorTemplateGenerator : IRazorTemplateGenerator\n    {\n         public GeneratorResults GenerateCode(RazorTemplate descriptor, string className, RazorEngineHost host)\n         {\n             var engine = new RazorTemplateEngine(host);\n             GeneratorResults results;\n             using (var fileStream = new FileStream(descriptor.FilePath, FileMode.Open, FileAccess.Read))\n             using (var reader = new StreamReader(fileStream))\n             {\n                 results = engine.GenerateCode(reader, className, host.DefaultNamespace, descriptor.ViewPath);\n             }\n\n             if (!results.Success)\n             {\n                 throw CreateExceptionFromParserError(results.ParserErrors.Last(), descriptor.Name());\n             }\n             return results;\n         }\n\n         private static HttpParseException CreateExceptionFromParserError(RazorError error, string virtualPath)\n         {\n             return new HttpParseException(error.Message + Environment.NewLine, null, virtualPath, null, error.Location.LineIndex + 1);\n         }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Razor/RazorModel/SpanExtensions.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Web.Razor.Generator;\r\nusing System.Web.Razor.Parser.SyntaxTree;\r\nusing FubuMVC.Razor.Core;\r\n\r\nnamespace FubuMVC.Razor.RazorModel\r\n{\r\n    public static class SpanExtensions\r\n    {\r\n        public static string Master(this IEnumerable<Span> chunks)\r\n        {\r\n            return chunks.Select(x => x.CodeGenerator).OfType<SetLayoutCodeGenerator>().FirstValue(x => x.LayoutPath);\r\n        }\r\n\r\n        public static string ViewModel(this IEnumerable<Span> chunks)\r\n        {\r\n            return chunks.Select(x => x.CodeGenerator).OfType<SetModelTypeCodeGenerator>().FirstValue(x => x.ModelType);\r\n        }\r\n\r\n        public static IEnumerable<string> Namespaces(this IEnumerable<Span> chunks)\r\n        {\r\n            return chunks.Select(x => x.CodeGenerator).OfType<AddImportCodeGenerator>().Select(x => x.Namespace.Trim());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Razor/RazorModel/TemplateCompiler.cs",
    "content": "﻿using System;\nusing System.CodeDom;\nusing System.CodeDom.Compiler;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Web;\nusing System.Web.Razor;\nusing FubuCore;\n\nnamespace FubuMVC.Razor.RazorModel\n{\n    public interface ITemplateCompiler\n    {\n        Type Compile(string className, CodeCompileUnit codeCompileUnit, RazorEngineHost host);\n    }\n\n    public class TemplateCompiler : ITemplateCompiler\n    {\n        public Type Compile(string className, CodeCompileUnit codeCompileUnit, RazorEngineHost host)\n        {\n            var compilerParameters = new CompilerParameters {GenerateInMemory = true, CompilerOptions = \"/optimize\"};\n            AppDomain.CurrentDomain.GetAssemblies()\n                .Where(x => !x.IsDynamic)\n                .Each(x => compilerParameters.ReferencedAssemblies.Add(x.Location));\n\n            CompilerResults compilerResults;\n            using (var codeDomProvider = Activator.CreateInstance(host.CodeLanguage.CodeDomProviderType).As<CodeDomProvider>())\n            {\n                compilerResults = codeDomProvider.CompileAssemblyFromDom(compilerParameters, codeCompileUnit);\n                if (compilerResults.Errors.HasErrors)\n                {\n                    using (var sw = new StringWriter())\n                    using (var tw = new IndentedTextWriter(sw, \"    \"))\n                    {\n                        codeDomProvider.GenerateCodeFromCompileUnit(codeCompileUnit, tw, new CodeGeneratorOptions());\n                        var source = sw.ToString();\n                        throw CreateExceptionFromCompileError(compilerResults, source);\n                    }\n                }\n            }\n\n            var templateTypeName = \"{0}.{1}\".ToFormat(host.DefaultNamespace, className);\n            var templateType = compilerResults.CompiledAssembly.GetType(templateTypeName);\n            return templateType;\n        }\n\n        private static HttpCompileException CreateExceptionFromCompileError(CompilerResults compilerResults, string source)\n        {\n            var message = string.Join(\"{0}{0}\".ToFormat(Environment.NewLine), compilerResults\n                                                                                  .Errors\n                                                                                  .OfType<CompilerError>()\n                                                                                  .Where(x => !x.IsWarning)\n                                                                                  .Select(error =>\n                                                                                          \"Compile error at {0}{1}line {2}: {1}compile error: {3}: {4}\"\n                                                                                          .ToFormat(error.FileName,\n                                                                                                    Environment.NewLine,\n                                                                                                    error.Line,\n                                                                                                    error.ErrorNumber,\n                                                                                                    error.ErrorText))\n                                                                                  .ToArray());\n            return new HttpCompileException(\"{0}{1}{2}\".ToFormat(message, Environment.NewLine, source));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Razor/RazorModel/TemplateExtensions.cs",
    "content": "﻿using System.IO;\r\nusing FubuCore;\r\nusing FubuMVC.Core.View.Model;\r\n\r\nnamespace FubuMVC.Razor.RazorModel\r\n{\r\n    public static class TemplateExtensions\r\n    {\r\n        public static bool IsRazorView(this ITemplateFile template)\r\n        {\r\n            return template.FilePath.FileExtension().EqualsIgnoreCase(\".cshtml\")\r\n                   || template.FilePath.FileExtension().EqualsIgnoreCase(\".vbhtml\");\r\n        }\r\n\r\n        public static string FileExtension(this string fileName)\r\n        {\r\n            return Path.GetExtension(fileName);\r\n        }\r\n\r\n        public static long LastModified(this string fileName)\r\n        {\r\n            return File.GetLastWriteTimeUtc(fileName).Ticks;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Razor/RazorViewExtensions.cs",
    "content": "﻿using System.Web;\nusing FubuMVC.Razor.Rendering;\n\nnamespace FubuMVC.Razor\n{\n    public static class RazorViewExtensions\n    {\n         public static HtmlString RenderPartial(this IFubuRazorView view, string name)\n         {\n             return view.Get<IPartialRenderer>().Render(view, name);\n         }\n\n         public static HtmlString RenderPartial(this IFubuRazorView view, string name, object model)\n         {\n             return view.Get<IPartialRenderer>().Render(view, name, model);\n         }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Razor/RazorViewFacility.cs",
    "content": "using System;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.View;\r\nusing FubuMVC.Core.View.Model;\r\nusing FubuMVC.Razor.RazorModel;\r\nusing FubuMVC.Razor.Rendering;\r\n\r\nnamespace FubuMVC.Razor\r\n{\r\n    public class RazorViewFacility : ViewFacility<RazorTemplate>\r\n    {\r\n        public override Func<IFubuFile, RazorTemplate> CreateBuilder(SettingsCollection settings, IFubuApplicationFiles files)\r\n        {\r\n            var razorSettings = settings.Get<RazorEngineSettings>();\r\n            var namespaces = settings.Get<CommonViewNamespaces>();\r\n\r\n            var factory = new TemplateFactoryCache(namespaces, razorSettings, new TemplateCompiler(),\r\n                new RazorTemplateGenerator());\r\n\r\n            return file => new RazorTemplate(files, file, factory);\r\n        }\r\n\r\n        public override FileSet FindMatching(SettingsCollection settings)\r\n        {\r\n            return settings.Get<RazorEngineSettings>().Search;\r\n        }\r\n\r\n        protected override void registerServices(ServiceRegistry services)\r\n        {\r\n            services.SetServiceIfNone<IPartialRenderer, PartialRenderer>();\r\n        }\r\n\r\n        protected override void registerWatchSettings(AssetSettings settings)\r\n        {\r\n            settings.ContentMatches.Add(\"*.cshtml\");\r\n        }\r\n\r\n        protected override void addNamespacesForViews(CommonViewNamespaces namespaces)\r\n        {\r\n            namespaces.AddForType<RazorViewFacility>(); // FubuMVC.Razor\r\n            namespaces.AddForType<IPartialInvoker>(); // FubuMVC.Core.View\r\n        }\r\n\r\n        public override void ReadSharedNamespaces(CommonViewNamespaces namespaces)\r\n        {\r\n            // nothing\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Razor/Registration/GenericViewModelTypeFinder.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Spark.Registration\r\n{\r\n    public class GenericViewModelTypeFinder \r\n    {\r\n        public Type Parse(string typeName, IEnumerable<Assembly> assemblies)\r\n        {\r\n            if (!IsGeneric(typeName))\r\n                return findType(typeName, assemblies);\r\n\r\n            var leftGenericDelimiter = typeName.IndexOf('<');\r\n            var rightGenericDelimiter = typeName.IndexOf('>');\r\n                \r\n            var genericArguments = typeName.Substring(leftGenericDelimiter+1, rightGenericDelimiter - leftGenericDelimiter - 1);\r\n            var genericArgumentsCount = genericArguments.Split(',').Length;\r\n            var openTypeName = typeName.Substring(0, leftGenericDelimiter);\r\n            \r\n            var getTypeFriendlyName = \"{0}`{1}[{2}]\".ToFormat(openTypeName, genericArgumentsCount, genericArguments);\r\n\r\n            return findType(getTypeFriendlyName, assemblies);\r\n        }\r\n\r\n        private static Type findType(string typeName, IEnumerable<Assembly> assemblies)\r\n        {\r\n            return assemblies\r\n                .Select(assembly => assembly.GetType(typeName))\r\n                .FirstOrDefault(type => type != null);\r\n        }\r\n\r\n        public static bool IsGeneric(string typeName)\r\n        {\r\n            return typeName.IndexOf('<') != -1;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Razor/Registration/ViewParser.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Web.Razor;\r\nusing System.Web.Razor.Parser.SyntaxTree;\r\nusing FubuMVC.Razor.Core;\r\nusing FubuMVC.Razor.RazorModel;\r\n\r\nnamespace FubuMVC.Razor.Registration\r\n{\r\n    public class ViewParser : IViewParser\r\n    {\r\n        public IEnumerable<Span> Parse(string viewFile)\r\n        {\r\n            var codeLanguage = RazorCodeLanguageFactory.Create(viewFile.FileExtension());\r\n\r\n            using (var fileStream = new FileStream(viewFile, FileMode.Open, FileAccess.Read))\r\n            using (var reader = new StreamReader(fileStream))\r\n            {\r\n                var templateEngine = new RazorTemplateEngine(new RazorEngineHost(codeLanguage));\r\n                var parseResults = templateEngine.ParseTemplate(reader);\r\n                return parseResults.Document.Flatten();\r\n            }\r\n        }\r\n    }\r\n\r\n    public interface IViewParser\r\n    {\r\n        IEnumerable<Span> Parse(string viewFile);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Razor/Rendering/AttributeValue.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Razor.Rendering\n{\n    //from System.Web.Webpages\n    public class AttributeValue\n    {\n        public AttributeValue(PositionTagged<string> prefix, PositionTagged<object> value, bool literal)\n        {\n            Prefix = prefix;\n            Value = value;\n            Literal = literal;\n        }\n\n        public PositionTagged<string> Prefix { get; private set; }\n        public PositionTagged<object> Value { get; private set; }\n        public bool Literal { get; private set; }\n\n        public static AttributeValue FromTuple(Tuple<Tuple<string, int>, Tuple<object, int>, bool> value)\n        {\n            return new AttributeValue(value.Item1, value.Item2, value.Item3);\n        }\n\n        public static AttributeValue FromTuple(Tuple<Tuple<string, int>, Tuple<string, int>, bool> value)\n        {\n            return new AttributeValue(value.Item1, new PositionTagged<object>(value.Item2.Item1, value.Item2.Item2), value.Item3);\n        }\n\n        public static implicit operator AttributeValue(Tuple<Tuple<string, int>, Tuple<object, int>, bool> value)\n        {\n            return FromTuple(value);\n        }\n\n        public static implicit operator AttributeValue(Tuple<Tuple<string, int>, Tuple<string, int>, bool> value)\n        {\n            return FromTuple(value);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Razor/Rendering/FubuRazorView.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Net;\r\nusing System.Text;\r\nusing System.Web;\r\nusing FubuCore;\r\nusing FubuCore.CommandLine;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Urls;\nusing FubuMVC.Core.View;\nusing FubuMVC.Core.View.Rendering;\nusing FubuMVC.Razor.RazorModel;\nusing HtmlTags;\n\nnamespace FubuMVC.Razor.Rendering\n{\n    public abstract class FubuRazorView : IFubuRazorView\n    {\n        private readonly Cache<Type, object> _services = new Cache<Type, object>();\n        private readonly IDictionary<string, Action> _sections = new Dictionary<string, Action>();\n        private StringBuilder _output = new StringBuilder();\r\n        private IFubuRazorView _child;\r\n        private Action _renderAction;\r\n        private Func<string> _result;\r\n        private IServiceLocator _serviceLocator;\r\n\r\n        protected FubuRazorView()\n        {\n            _services.OnMissing = type => ServiceLocator.GetInstance(type);\r\n            _renderAction = RenderNoLayout;\r\n            _result = () => _output.ToString();\r\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public IServiceLocator ServiceLocator\r\n        {\r\n            get { return _child == null ? _serviceLocator : _child.ServiceLocator; }\r\n            set { _serviceLocator = value; }\r\n        }\r\n\r\n        public T Get<T>()\n        {\n            return (T)_services[typeof(T)];\n        }\r\n\r\n        public HttpContextBase Context\r\n        {\r\n            get\r\n            {\r\n                return this.Get<HttpContextBase>();\r\n            }\r\n        }\n\n\n        public T GetNew<T>()\n        {\n            return (T)ServiceLocator.GetInstance(typeof(T));\n        }\n\n        public IUrlRegistry Urls\n        {\n            get { return Get<IUrlRegistry>(); }\n        }\n\n        void IFubuRazorView.UseLayout(IFubuRazorView layout)\n        {\n            LayoutView = layout;\r\n            _renderAction = RenderWithLayout;\r\n            _result = () => layout.Result.ToString();\r\n        }\n\n        void IFubuRazorView.NoLayout()\r\n        {\r\n            _renderAction = RenderNoLayout;\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public abstract void Execute();\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        void IFubuRazorView.ExecuteLayout(IFubuRazorView child)\r\n        {\r\n            _child = child;\r\n            _renderAction();\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public string Layout { get; set; }\n\n        RazorTemplate IFubuRazorView.OriginTemplate { get; set; }\n\n        string IFubuPage.ElementPrefix { get; set; }\n\n        private void RenderNoLayout()\r\n        {\r\n            Execute();\r\n        }\n\n        private void RenderWithLayout()\r\n        {\r\n            Execute();\r\n            LayoutView.ExecuteLayout(this);\n        }\n\n        void IRenderableView.Render(IFubuRequestContext context)\r\n        {\r\n            _renderAction();\n            Get<IOutputWriter>().WriteHtml(this.As<IFubuRazorView>().Result);\n        }\r\n\r\n        public HtmlString RenderBody()\r\n        {\r\n            if(_child == null)\r\n                throw new InvalidUsageException(\"RenderBody must be called from a layout template\");\r\n\r\n            return new HtmlString(_child.CurrentOutput);\r\n        }\r\n\r\n        public HtmlString RenderSection(string name, bool required = true)\r\n        {\r\n            if (!_sections.ContainsKey(name))\r\n            {\r\n                if (_child == null)\r\n                {\r\n                    if(required) \r\n                        throw new InvalidUsageException(\"No section has been defined for required '{0}'\".ToFormat(name));\r\n                    return new HtmlString(string.Empty);\r\n                }\r\n                return _child.RenderSection(name, required);\r\n            }\r\n            Action section = _sections[name];\r\n\r\n            var current = _output;\r\n            _output = new StringBuilder();\r\n            var output = _output;\r\n            section();\r\n            _output = current;\r\n            return new HtmlString(output.ToString());\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public void DefineSection(string name, Action section)\r\n        {\r\n            _sections[name] = section;\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public IFubuPage Page { get { return this; } }\r\n\n        public HtmlTag Tag(string tagName)\n        {\n            return new HtmlTag(tagName);\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public void Write(object value)\r\n        {\r\n            if (value == null)\r\n                return;\r\n            if (value is IHtmlString)\r\n            {\r\n                WriteLiteral(value.ToString());\r\n            }\r\n            else\r\n            {\r\n                WriteLiteral(WebUtility.HtmlEncode(value.ToString()));\r\n            }\r\n        }\r\n\r\n        public virtual void Write(TemplateHelper helper)\r\n        {\r\n            if (helper == null)\r\n                return;\r\n\r\n            helper.WriteTo(_output);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public void WriteLiteralTo(TextWriter writer, string literal)\r\n        {\r\n            if (literal == null) \r\n                return;\r\n            writer.Write(literal);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public void WriteTo(TextWriter writer, object value)\r\n        {\r\n            if (value == null)\r\n                return;\r\n            if (value is IHtmlString)\r\n            {\r\n                writer.Write(value.ToString());\r\n            }\r\n            else\r\n            {\r\n                writer.Write(new HtmlString(value.ToString()));\r\n            }\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        protected void WriteAttribute(string name,  PositionTagged<string> start, PositionTagged<string> end, params AttributeValue[] args)\r\n        {\r\n            var totalArgWritten = 0;\r\n            foreach (var attributeValue in args)\r\n            {\r\n                if (attributeValue.Value.Value == null)\r\n                    continue;\r\n\r\n                totalArgWritten++;\r\n                if (totalArgWritten == 1)\r\n                    WriteLiteral(start.Value);\r\n                \r\n                Write(attributeValue.Prefix.Value);\r\n                Write(attributeValue.Value.Value);\r\n            }\r\n\r\n            if (totalArgWritten > 0)\r\n            {\r\n                WriteLiteral(end.Value);\r\n            }\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public void WriteAttributeTo(TextWriter writer, string name, PositionTagged<string> start, PositionTagged<string> end, params AttributeValue[] args)\r\n        {\r\n            var totalArgWritten = 0;\r\n            foreach (var attributeValue in args)\r\n            {\r\n                if (attributeValue.Value.Value == null)\r\n                    continue;\r\n\r\n                totalArgWritten++;\r\n                if (totalArgWritten == 1)\r\n                    WriteLiteralTo(writer, start.Value);\r\n                WriteTo(writer, attributeValue.Prefix.Value);\r\n                WriteTo(writer,attributeValue.Value.Value);\r\n            }\r\n\r\n            if (totalArgWritten > 0)\r\n            {\r\n                WriteLiteralTo(writer,end.Value);\r\n            }\r\n        }\r\n        \r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public void WriteLiteral(string value)\r\n        {\r\n            _output.Append(value);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public IFubuRazorView LayoutView { get; set; }\n\n        public HtmlString Raw(string rawContent)\r\n        {\r\n            return new HtmlString(rawContent);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        HtmlString IFubuRazorView.Result\r\n        {\r\n            get { return new HtmlString(_result()); }\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        string IFubuRazorView.CurrentOutput { get { return _output.ToString(); } }\r\n    }\n\n    public abstract class FubuRazorView<TViewModel> : FubuRazorView, IFubuPage<TViewModel> where TViewModel : class\n    {\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public void SetModel(IFubuRequest request)\r\n        {\r\n            var model = request.Has<TViewModel>() ? request.Get<TViewModel>() : request.Find<TViewModel>().FirstOrDefault();\r\n            SetModel(model);\r\n        }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public void SetModel(object model)\n        {\n            SetModel(model as TViewModel);\n        }\n\n        [EditorBrowsable(EditorBrowsableState.Never)]\n        public void SetModel(TViewModel model)\n        {\n            Model = model;\n        }\n\n        public TViewModel Model { get; set; }\r\n\r\n        [EditorBrowsable(EditorBrowsableState.Never)]\r\n        public object GetModel()\n        {\n            return Model;\n        }\n    }\n\n    public interface IFubuRazorView : IRenderableView, IFubuPage\n    {\r\n        HtmlString Result { get; }\n        IFubuRazorView LayoutView { get; }\n        void UseLayout(IFubuRazorView layout);\n        void NoLayout();\n        RazorTemplate OriginTemplate { get; set; }\r\n        string CurrentOutput { get; }\r\n        void Execute();\r\n        void ExecuteLayout(IFubuRazorView child);\r\n        HtmlString RenderBody();\r\n        HtmlString RenderSection(string name, bool required = true);\r\n        void DefineSection(string name, Action sectionAction);\r\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Razor/Rendering/IPartialRenderer.cs",
    "content": "﻿using System.Web;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core.View;\r\n\r\nnamespace FubuMVC.Razor.Rendering\r\n{\r\n    public interface IPartialRenderer\r\n    {\r\n        HtmlString Render(IFubuRazorView view, string name);\r\n        HtmlString Render(IFubuRazorView view, string name, object model);\r\n    }\r\n\r\n    public class PartialRenderer : IPartialRenderer\r\n    {\r\n        private readonly ViewEngineSettings _views;\r\n\r\n        public PartialRenderer(ViewEngineSettings views)\r\n        {\r\n            _views = views;\r\n        }\r\n\r\n        public HtmlString Render(IFubuRazorView view, string name)\r\n        {\r\n            var partialView = getPartialView(view, name);\r\n            partialView.Execute();\r\n            return new HtmlString(partialView.Result.ToString());\r\n        }\r\n\r\n        public HtmlString Render(IFubuRazorView view, string name, object model)\r\n        {\r\n            var partialView = getPartialView(view, name);\r\n            dynamic fubuPage = partialView;\r\n            dynamic dynamicModel = model;\r\n            fubuPage.Model = dynamicModel;\r\n            partialView.Execute();\r\n            return new HtmlString(partialView.Result.ToString());\r\n        }\r\n\r\n        private IFubuRazorView getPartialView(IFubuRazorView view, string name)\r\n        {\r\n            var template = _views.FindPartial(view.OriginTemplate, name);\r\n            return template.GetPartialView() as IFubuRazorView;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Razor/Rendering/PositionTagged.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\n\nnamespace FubuMVC.Razor.Rendering\n{\n    //from System.Web.Webpages\n    [DebuggerDisplay(\"({Position})\\\"{Value}\\\"\")]\n    public class PositionTagged<T>\n    {\n        public PositionTagged(T value, int offset)\n        {\n            Position = offset;\n            Value = value;\n        }\n\n        public int Position { get; private set; }\n        public T Value { get; private set; }\n\n        public override bool Equals(object obj)\n        {\n            PositionTagged<T> other = obj as PositionTagged<T>;\n            return other != null &&\n                   other.Position == Position &&\n                   Equals(other.Value, Value);\n        }\n\n        public override int GetHashCode()\n        {\n            return Position.GetHashCode() ^\n                Value.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return Value.ToString();\n        }\n\n        public static implicit operator T(PositionTagged<T> value)\n        {\n            return value.Value;\n        }\n\n        public static implicit operator PositionTagged<T>(Tuple<T, int> value)\n        {\n            return new PositionTagged<T>(value.Item1, value.Item2);\n        }\n\n        public static bool operator ==(PositionTagged<T> left, PositionTagged<T> right)\n        {\n            return Equals(left, right);\n        }\n\n        public static bool operator !=(PositionTagged<T> left, PositionTagged<T> right)\n        {\n            return !Equals(left, right);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Razor/Rendering/TemplateHelper.cs",
    "content": "﻿using System;\nusing System.IO;\nusing System.Text;\n\nnamespace FubuMVC.Razor.Rendering\n{\n    public class TemplateHelper\n    {\n        private readonly Action<TextWriter> _write;\n\n        public TemplateHelper(Action<TextWriter> write)\n        {\n            _write = write;\n        }\n\n        public override string ToString()\n        {\n            using (var writer = new StringWriter())\n            {\n                _write(writer);\n                return writer.ToString();\n            }\n        }\n\n        public void WriteTo(StringBuilder stringBuilder)\n        {\n            stringBuilder.Append(ToString());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Razor/TemplateFactoryCache.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Web.Razor;\nusing System.Web.Razor.Generator;\nusing System.Web.Razor.Parser;\nusing FubuCore;\nusing FubuCore.Util;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.View;\nusing FubuMVC.Core.View.Model;\nusing FubuMVC.Razor.Core;\nusing FubuMVC.Razor.RazorModel;\nusing FubuMVC.Razor.Rendering;\n\nnamespace FubuMVC.Razor\n{\n    public interface ITemplateFactory\n    {\n        IFubuRazorView GetView(RazorTemplate descriptor);\n    }\n\n    public class TemplateFactoryCache : ITemplateFactory\n    {\n        private readonly CommonViewNamespaces _commonViewNamespaces;\n        private readonly RazorEngineSettings _razorEngineSettings;\n        private readonly ITemplateCompiler _templateCompiler;\n        private readonly RazorTemplateGenerator _templateGenerator;\n        private readonly Cache<string, long> _lastModifiedCache;\n        private readonly IDictionary<string, Type> _cache;\n\n        public TemplateFactoryCache(CommonViewNamespaces commonViewNamespaces, \n            RazorEngineSettings razorEngineSettings, ITemplateCompiler templateCompiler, RazorTemplateGenerator templateGenerator)\n        {\n            _commonViewNamespaces = commonViewNamespaces;\n            _razorEngineSettings = razorEngineSettings;\n            _templateCompiler = templateCompiler;\n            _templateGenerator = templateGenerator;\n            _cache = new Dictionary<string, Type>();\n            _lastModifiedCache = new Cache<string, long>(name => name.LastModified());\n        }\n\n        public IFubuRazorView GetView(RazorTemplate descriptor)\n        {\n            Type viewType;\n            var filePath = descriptor.FilePath;\n            _cache.TryGetValue(filePath, out viewType);\n            var lastModified = filePath.LastModified();\n            if (viewType == null || (_lastModifiedCache[filePath] != lastModified))\n            {\n                viewType = getViewType(descriptor);\n                lock (_cache)\n                {\n                    _cache[filePath] = viewType;\n                    _lastModifiedCache[filePath] = lastModified;\n                }\n            }\n            return Activator.CreateInstance(viewType).As<IFubuRazorView>();\n        }\n\n        private Type getViewType(RazorTemplate descriptor)\n        {\n            var className = ParserHelpers.SanitizeClassName(descriptor.ViewPath);\n            var baseTemplateType = _razorEngineSettings.BaseTemplateType;\n            var generatedClassContext = new GeneratedClassContext(\"Execute\", \"Write\", \"WriteLiteral\", \"WriteTo\", \"WriteLiteralTo\",\n                                                                  \"FubuMVC.Razor.Rendering.TemplateHelper\", \"DefineSection\");\n            var codeLanguage = RazorCodeLanguageFactory.Create(descriptor.FilePath.FileExtension());\n            var host = new RazorEngineHost(codeLanguage)\n            {\n                DefaultBaseClass = baseTemplateType.FullName,\n                DefaultNamespace = \"FubuMVC.Razor.GeneratedTemplates\",\n                GeneratedClassContext = generatedClassContext\n            };\n            host.NamespaceImports.UnionWith(_commonViewNamespaces.Namespaces);\n\n            var results = _templateGenerator.GenerateCode(descriptor, className, host);\n\n            return _templateCompiler.Compile(className, results.GeneratedCode, host);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Razor/paket.references",
    "content": "FubuCore\nHtmlTags\nMicrosoft.AspNet.Razor\nstructuremap"
  },
  {
    "path": "src/FubuMVC.Spark/.package-manifest",
    "content": "﻿<?xml version=\"1.0\"?>\r\n<package xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <Name>FubuMVC.Spark</Name>\r\n  <assembly>FubuMVC.Spark</assembly>\r\n  <assembly>Spark</assembly>\r\n</package>"
  },
  {
    "path": "src/FubuMVC.Spark/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\nusing FubuMVC.Core;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"FubuMVC.Spark\")]\r\n[assembly: FubuModule]"
  },
  {
    "path": "src/FubuMVC.Spark/FubuMVC.Spark.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{9D6BF559-6461-4EAC-BB16-F976FF43E8DA}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>FubuMVC.Spark</RootNamespace>\r\n    <AssemblyName>FubuMVC.Spark</AssemblyName>\r\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <TargetFrameworkProfile />\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <Prefer32Bit>false</Prefer32Bit>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <Prefer32Bit>false</Prefer32Bit>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"System.Web\" />\r\n    <Reference Include=\"System.Xml\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"..\\CommonAssemblyInfo.cs\">\r\n      <Link>Properties\\CommonAssemblyInfo.cs</Link>\r\n    </Compile>\r\n    <Compile Include=\"AssemblyInfo.cs\" />\r\n    <Compile Include=\"PathExtensions.cs\" />\r\n    <Compile Include=\"Rendering\\FubuSparkViewDecorator.cs\" />\r\n    <Compile Include=\"Rendering\\FubuSparkViewExtensions.cs\" />\r\n    <Compile Include=\"Rendering\\IFubuSparkView.cs\" />\r\n    <Compile Include=\"Rendering\\IHtmlEncoder.cs\" />\r\n    <Compile Include=\"SparkEngineSettings.cs\" />\r\n    <Compile Include=\"SparkModel\\FubuPartialProvider.cs\" />\r\n    <Compile Include=\"SparkModel\\SharingAttachers.cs\" />\r\n    <Compile Include=\"SparkModel\\FubuBindingProvider.cs\" />\r\n    <Compile Include=\"SparkModel\\ChunkLoader.cs\" />\r\n    <Compile Include=\"SparkModel\\SparkFileReader.cs\" />\r\n    <Compile Include=\"SparkModel\\TemplateExtensions.cs\" />\r\n    <Compile Include=\"SparkModel\\TemplateViewFolder.cs\" />\r\n    <Compile Include=\"SparkModel\\SparkTemplate.cs\" />\r\n    <Compile Include=\"SparkModel\\WatchedSparkEntry.cs\" />\r\n    <Compile Include=\"SparkViewFacility.cs\" />\r\n    <Compile Include=\"Rendering\\FubuSparkView.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"Todo.txt\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\".package-manifest\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\r\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\r\n      <Name>FubuMVC.Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Folder Include=\"Registration\\\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\r\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\r\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\r\n  </Target>\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n  <ItemGroup>\r\n    <Reference Include=\"FubuCore\">\r\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\r\n      <Private>True</Private>\r\n      <Paket>True</Paket>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"HtmlTags\">\r\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Win32.Primitives\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Spark\">\r\n          <HintPath>..\\..\\packages\\Spark\\lib\\NET35\\Spark.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Spark\">\r\n          <HintPath>..\\..\\packages\\Spark\\lib\\NET40\\Spark.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.AppContext\">\r\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Buffers\">\r\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Console\">\r\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tools\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Calendars\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression.ZipFile\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Http\">\r\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"mscorlib\">\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Resources.ResourceManager\">\r\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Handles\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Loader\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Numerics\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Cng\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Csp\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Timer\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n</Project>"
  },
  {
    "path": "src/FubuMVC.Spark/PathExtensions.cs",
    "content": "using System.Text.RegularExpressions;\r\n\r\nnamespace FubuMVC.Spark\r\n{\r\n    public static class PathExtensions\r\n    {\r\n        private static readonly Regex _parseOriginRegex = new Regex(@\"_?([^\\\\/]+)[\\\\/]?\", RegexOptions.Compiled);\r\n\r\n        public static string GetOrigin(this string path)\r\n        {\r\n            var match = _parseOriginRegex.Match(path);\r\n            return match.Groups[1].Value;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Spark/Registration/GenericViewModelTypeFinder.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Spark.Registration\r\n{\r\n    public class GenericViewModelTypeFinder \r\n    {\r\n        public Type Parse(string typeName, IEnumerable<Assembly> assemblies)\r\n        {\r\n            if (!IsGeneric(typeName))\r\n                return findType(typeName, assemblies);\r\n\r\n            var leftGenericDelimiter = typeName.IndexOf('<');\r\n            var rightGenericDelimiter = typeName.IndexOf('>');\r\n                \r\n            var genericArguments = typeName.Substring(leftGenericDelimiter+1, rightGenericDelimiter - leftGenericDelimiter - 1);\r\n            var genericArgumentsCount = genericArguments.Split(',').Length;\r\n            var openTypeName = typeName.Substring(0, leftGenericDelimiter);\r\n            \r\n            var getTypeFriendlyName = \"{0}`{1}[{2}]\".ToFormat(openTypeName, genericArgumentsCount, genericArguments);\r\n\r\n            return findType(getTypeFriendlyName, assemblies);\r\n        }\r\n\r\n        private static Type findType(string typeName, IEnumerable<Assembly> assemblies)\r\n        {\r\n            return assemblies\r\n                .Select(assembly => assembly.GetType(typeName))\r\n                .FirstOrDefault(type => type != null);\r\n        }\r\n\r\n        public static bool IsGeneric(string typeName)\r\n        {\r\n            return typeName.IndexOf('<') != -1;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Spark/Rendering/FubuSparkView.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Threading.Tasks;\r\nusing System.Web;\r\nusing System.Web.UI.WebControls;\r\nusing FubuCore;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Urls;\r\nusing FubuMVC.Core.View;\r\nusing HtmlTags;\r\n\r\nusing Spark;\r\n\r\nnamespace FubuMVC.Spark.Rendering\r\n{\r\n    public abstract class FubuSparkView : SparkViewBase, IFubuSparkView\r\n    {\r\n        private readonly Cache<Type, object> _services = new Cache<Type, object>();\r\n\r\n        protected FubuSparkView()\r\n        {\r\n            _services.OnMissing = type => ServiceLocator.GetInstance(type);\r\n        }\r\n\r\n        public IServiceLocator ServiceLocator { get; set; }\r\n\r\n        public T Get<T>()\r\n        {\r\n            return (T)_services[typeof(T)];\r\n        }\r\n\r\n        public T GetNew<T>()\r\n        {\r\n            return (T)ServiceLocator.GetInstance(typeof(T));\r\n        }\r\n\r\n        public void Write(object content)\r\n        {\r\n            Output.Write(content);\r\n        }\r\n\r\n        public IUrlRegistry Urls\r\n        {\r\n            get { return Get<IUrlRegistry>(); }\r\n        }\r\n\r\n        public Func<string, string> SiteResource { get; set; }\r\n\r\n        string IFubuPage.ElementPrefix { get; set; }\r\n\r\n        public HtmlTag Tag(string tagName)\r\n        {\r\n            return new HtmlTag(tagName);\r\n        }\r\n\r\n        public string H(object value)\r\n        {\r\n            return Get<IHtmlEncoder>().Encode(value);\r\n        }\r\n\r\n        public HtmlString HTML(object value)\r\n        {\r\n            return new HtmlString(value?.ToString());\r\n        }\r\n\r\n        public IFubuPage Page => this;\r\n\r\n\r\n        public void Render(IFubuRequestContext context)\r\n        {\r\n            SiteResource = relative => context.Request.ToFullUrl(relative);\r\n\r\n            CacheService = context.Services.GetInstance<ICacheService>();\r\n\r\n            context.Writer.Write(MimeType.Html.Value, stream => {\r\n                var writer = new StreamWriter(stream);\r\n\r\n                Output = writer;\r\n\r\n                RenderView(writer);\r\n\r\n                writer.Flush();\r\n\r\n                return Task.CompletedTask;\r\n            });\r\n        }\r\n    }\r\n\r\n    public abstract class FubuSparkView<TViewModel> : FubuSparkView, IFubuPage<TViewModel> where TViewModel : class\r\n    {\r\n        public void SetModel(IFubuRequest request)\r\n        {\r\n            Model = request.Get<TViewModel>();\r\n        }\r\n\r\n        public void SetModel(object model)\r\n        {\r\n            SetModel(model as TViewModel);\r\n        }\r\n\r\n        public void SetModel(TViewModel model)\r\n        {\r\n            Model = model;\r\n        }\r\n\r\n        public TViewModel Model { get; set; }\r\n\r\n        public object GetModel()\r\n        {\r\n            return Model;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Spark/Rendering/FubuSparkViewDecorator.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing FubuCore;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Urls;\r\nusing FubuMVC.Core.View;\r\nusing Spark;\r\n\r\nnamespace FubuMVC.Spark.Rendering\r\n{\r\n    public class FubuSparkViewDecorator : IFubuSparkView\r\n    {\r\n        private readonly IFubuSparkView _view;\r\n        public FubuSparkViewDecorator(IFubuSparkView view)\r\n        {\r\n            _view = view;\r\n            PreRender = new CompositeAction<IFubuSparkView>();\r\n            PostRender = new CompositeAction<IFubuSparkView>();\r\n        }\r\n\r\n        public CompositeAction<IFubuSparkView> PreRender { get; set; }\r\n        public CompositeAction<IFubuSparkView> PostRender { get; set; }\r\n\r\n        public void Render(IFubuRequestContext context)\r\n        {\r\n            PreRender.Do(_view);\r\n            _view.Render(context);\r\n            PostRender.Do(_view);\r\n        }\r\n\r\n        public IFubuPage Page\r\n        {\r\n            get { return _view; }\r\n        }\r\n\r\n        public Guid GeneratedViewId\r\n        {\r\n            get { return _view.GeneratedViewId; }\r\n        }\r\n\r\n        public ICacheService CacheService\r\n        {\r\n            get { return _view.CacheService; }\r\n            set { _view.CacheService = value; }\r\n        }\r\n\r\n        public Dictionary<string, TextWriter> Content\r\n        {\r\n            get { return _view.Content; }\r\n            set { _view.Content = value; }\r\n        }\r\n\r\n        public Dictionary<string, string> OnceTable\r\n        {\r\n            get { return _view.OnceTable; }\r\n            set { _view.OnceTable = value; }\r\n        }\r\n\r\n        public Dictionary<string, object> Globals\r\n        {\r\n            get { return _view.Globals; }\r\n            set { _view.Globals = value; }\r\n        }\r\n\r\n        public TextWriter Output\r\n        {\r\n            get { return _view.Output; }\r\n            set { _view.Output = value; }\r\n        }\r\n\r\n        public string ElementPrefix\r\n        {\r\n            get { return _view.ElementPrefix; }\r\n            set { _view.ElementPrefix = value; }\r\n        }\r\n\r\n        public IServiceLocator ServiceLocator\r\n        {\r\n            get { return _view.ServiceLocator; }\r\n            set { _view.ServiceLocator = value; }\r\n        }\r\n\r\n        public IUrlRegistry Urls\r\n        {\r\n            get { return _view.Urls; }\r\n        }\r\n\r\n        public T Get<T>()\r\n        {\r\n            return _view.Get<T>();\r\n        }\r\n\r\n        public T GetNew<T>()\r\n        {\r\n            return _view.GetNew<T>();\r\n        }\r\n\r\n        public void Write(object content)\r\n        {\r\n            _view.Write(content);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Spark/Rendering/FubuSparkViewExtensions.cs",
    "content": "using System;\r\n\r\nnamespace FubuMVC.Spark.Rendering\r\n{\r\n    public static class FubuSparkViewExtensions\r\n    {\r\n        public static IFubuSparkView Modify(this IFubuSparkView view, Action<IFubuSparkView> modify)\r\n        {\r\n            modify(view);\r\n            return view;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Spark/Rendering/IFubuSparkView.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing FubuMVC.Core.View;\r\nusing FubuMVC.Core.View.Rendering;\r\nusing Spark;\r\n\r\nnamespace FubuMVC.Spark.Rendering\r\n{\r\n    public interface IFubuSparkView : IRenderableView, IFubuPage\r\n    {\r\n        Dictionary<string, TextWriter> Content { set; get; }\r\n        Dictionary<string, string> OnceTable { set; get; }\r\n        Dictionary<string, object> Globals { set; get; }\r\n        TextWriter Output { get; set; }\r\n        \r\n        Guid GeneratedViewId { get; }\r\n\r\n        ICacheService CacheService { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Spark/Rendering/IHtmlEncoder.cs",
    "content": "using System.Web;\r\n\r\nnamespace FubuMVC.Spark.Rendering\r\n{\r\n    public interface IHtmlEncoder\r\n    {\r\n        string Encode(object value);\r\n    }\r\n\r\n    public class DefaultHtmlEncoder : IHtmlEncoder\r\n    {\r\n        public string Encode(object value)\r\n        {\r\n            return HttpUtility.HtmlEncode(value);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Spark/SparkEngineSettings.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing Spark;\r\n\r\nnamespace FubuMVC.Spark\r\n{\r\n    [Title(\"Spark Engine Properties\")]\r\n    public class SparkEngineSettings : DescribesItself\r\n    {\r\n        private Func<bool> _precompileViews;\r\n\r\n        public SparkEngineSettings()\r\n        {\r\n            defaultSearch();\r\n\r\n            _precompileViews = () => false;\r\n            RetryViewLoadingCount = 5;\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.ShortDescription = \"Governs the behavior of the Spark View Engine Integration\";\r\n            description.Properties[\"Namespaces\"] = UseNamespaces.Join(\", \");\r\n            description.Properties[\"Search\"] = Search.ToString();\r\n            description.Properties[\"Precompile\"] = PrecompileViews.ToString();\r\n        }\r\n\r\n        private void defaultSearch()\r\n        {\r\n            Search = new FileSet {DeepSearch = true};\r\n            Search.AppendInclude(\"*{0}\".ToFormat(Constants.DotSpark));\r\n            Search.AppendInclude(\"*{0}\".ToFormat(Constants.DotShade));\r\n            Search.AppendInclude(\"bindings.xml\");\r\n            Search.AppendExclude(\"bin/*.*\");\r\n            Search.AppendExclude(\"obj/*.*\");\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// List of namespaces that will be applied as global namespaces to the SparkViewEngine\r\n        /// </summary>\r\n        public readonly IList<string> UseNamespaces = new List<string>();\r\n\r\n        /// <summary>\r\n        /// Adds a namespace to UseNamespaces\r\n        /// </summary>\r\n        /// <typeparam name=\"T\"></typeparam>\r\n        public void UseNamespaceIncludingType<T>()\r\n        {\r\n            UseNamespaces.Add(typeof (T).Name);\r\n        }\r\n\r\n        public FileSet Search { get; private set; }\r\n        public int RetryViewLoadingCount { get; set; }\r\n\r\n        /// <summary>\r\n        /// By default, FubuMVC.Spark will precompile views if FubuMode.InDevelopment() is false.\r\n        /// </summary>\r\n        public bool PrecompileViews\r\n        {\r\n            get { return _precompileViews(); }\r\n            set { _precompileViews = () => value; }\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Spark/SparkModel/ChunkLoader.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing Spark;\r\nusing Spark.Compiler;\r\nusing Spark.FileSystem;\r\nusing Spark.Parser;\r\nusing Spark.Parser.Syntax;\r\n\r\nnamespace FubuMVC.Spark.SparkModel\r\n{\r\n    public interface IChunkLoader\r\n    {\r\n        IEnumerable<Chunk> Load(ISparkTemplate template, IFubuApplicationFiles files);\r\n    }\r\n\r\n    public class ChunkLoader : IChunkLoader\r\n    {\r\n        private readonly Func<string, IViewFolder> _viewFolder;\r\n        private readonly Cache<string, ViewLoader> _loaders;\r\n        private readonly ISparkSyntaxProvider _syntaxProvider;\r\n\r\n\r\n        public ChunkLoader()\r\n        {\r\n            _viewFolder = path => new FileSystemViewFolder(path);\r\n            _syntaxProvider = new DefaultSyntaxProvider(ParserSettings.DefaultBehavior);\r\n\r\n            _loaders = new Cache<string, ViewLoader>(defaultLoaderByRoot);\r\n        }\r\n\r\n        public IEnumerable<Chunk> Load(ISparkTemplate template, IFubuApplicationFiles files)\r\n        {\r\n            if (template.RelativePath().IsEmpty())\r\n            {\r\n                throw new ArgumentOutOfRangeException(\"Invalid template path for file \" + template.FilePath);\r\n            }\r\n\r\n            try\r\n            {\r\n                var viewLoader = _loaders[files.RootPath];\r\n                var chunks = viewLoader.Load(template.RelativePath());\r\n                if (chunks == null)\r\n                {\r\n                    throw new Exception(\"Unable to parse file '{0}'\".ToFormat(template.RelativePath()));\r\n                }\r\n\r\n                return chunks.ToList();\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                if (e.Message.StartsWith(\"Unable to parse file\")) throw;\r\n\r\n                throw new Exception(\"Unable to parse file '{0}'\".ToFormat(template.RelativePath()), e);\r\n            }\r\n        }\r\n\r\n        private ViewLoader defaultLoaderByRoot(string root)\r\n        {\r\n            return new ViewLoader\r\n            {\r\n                SyntaxProvider = _syntaxProvider,\r\n                ViewFolder = _viewFolder(root)\r\n            };\r\n        }\r\n    }\r\n\r\n    public static class ChunkEnumerableExtensions\r\n    {\r\n        public static string Master(this IEnumerable<Chunk> chunks)\r\n        {\r\n            return chunks.OfType<UseMasterChunk>().FirstValue(x => x.Name);\r\n        }\r\n\r\n        public static string ViewModel(this IEnumerable<Chunk> chunks)\r\n        {\r\n            return chunks.OfType<ViewDataModelChunk>().FirstValue(x => x.TModel);\r\n        }\r\n\r\n        public static IEnumerable<string> Namespaces(this IEnumerable<Chunk> chunks)\r\n        {\r\n            return chunks.OfType<UseNamespaceChunk>().Select(x => x.Namespace.ToString());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Spark/SparkModel/FubuBindingProvider.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing Spark.Bindings;\r\n\r\nnamespace FubuMVC.Spark.SparkModel\r\n{\r\n    public class FubuBindingProvider : BindingProvider\r\n    {\r\n        private readonly SparkTemplate[] _bindingTemplates;\r\n\r\n        public FubuBindingProvider(SparkTemplate[] bindingTemplates)\r\n        {\r\n            _bindingTemplates = bindingTemplates;\r\n        }\r\n\r\n        public override IEnumerable<Binding> GetBindings(BindingRequest request)\r\n        {\r\n            var viewFolder = request.ViewFolder;\r\n            var bindings = new List<Binding>();\r\n\r\n\r\n            foreach (var binding in _bindingTemplates)\r\n            {\r\n                using (var stream = viewFolder.GetViewSource(binding.ViewPath).OpenViewStream())\r\n                using (var reader = new StreamReader(stream))\r\n                {\r\n                    bindings.AddRange(LoadStandardMarkup(reader));\r\n                }\r\n            }\r\n\r\n            return bindings;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Spark/SparkModel/FubuPartialProvider.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore.Util;\r\nusing Spark;\r\n\r\nnamespace FubuMVC.Spark.SparkModel\r\n{\r\n    public class FubuPartialProvider : IPartialProvider\r\n    {\r\n        private readonly Cache<string, IEnumerable<string>> _partialPathCache;\r\n\r\n        public FubuPartialProvider(SparkViewFacility facility)\r\n        {\r\n            var partialProvider = new DefaultPartialProvider();\r\n\r\n            var sharedPaths = facility.SharedPaths();\r\n\r\n            _partialPathCache = new Cache<string, IEnumerable<string>>(viewPath => sharedPaths.Union(partialProvider.GetPaths(viewPath)));\r\n\r\n        }\r\n\r\n        public IEnumerable<string> GetPaths(string viewPath)\r\n        {\r\n            return _partialPathCache[viewPath];\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Spark/SparkModel/SharingAttachers.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core.View.Model;\r\n\r\nnamespace FubuMVC.Spark.SparkModel\r\n{\r\n    public class BindingsAttacher \r\n    {\r\n \r\n        private const string FallbackBindingsName = \"bindings\";\r\n        public string BindingsName { get; set; }\r\n\r\n        public BindingsAttacher()\r\n        {\r\n            BindingsName = FallbackBindingsName;\r\n        }\r\n\r\n        public bool CanAttach()\r\n        {\r\n            throw new NotImplementedException();\r\n//            var descriptor = request.Template;\r\n//            \r\n//            return descriptor != null \r\n//                && descriptor.Bindings.Count() == 0;\r\n        }\r\n\r\n        public void Attach()\r\n        {\r\n            throw new NotImplementedException();\r\n//            var target = request.Template;\r\n//            var logger = request.Logger;\r\n//            var descriptor = target.Descriptor.As<SparkViewToken>();\r\n//\r\n//            _templateLocator.LocateBindings(BindingsName, target).Each(template =>\r\n//            {\r\n//                descriptor.AddBinding(template);\r\n//                var msg = \"Binding attached : {0}\".ToFormat(template.FilePath);\r\n//                logger.Log(target, msg);\r\n//            });\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Spark/SparkModel/SparkFileReader.cs",
    "content": "﻿using System;\r\nusing System.IO;\r\nusing System.Xml;\r\nusing FubuMVC.Core.View.Model;\r\n\r\nnamespace FubuMVC.Spark.SparkModel\r\n{\r\n    public class SparkFileReader\r\n    {\r\n        private readonly string _file;\r\n\r\n        public SparkFileReader(string file)\r\n        {\r\n            _file = file;\r\n        }\r\n\r\n        // <viewdata model=\"FubuMVC.Diagnostics.DashboardModel\" />\r\n\r\n        public Parsing Read()\r\n        {\r\n            var parsing = new Parsing();\r\n\r\n            using (var reader = new StreamReader(_file))\r\n            {\r\n                string line;\r\n                // Read and display lines from the file until the end of  \r\n                // the file is reached. \r\n                while ((line = reader.ReadLine()) != null)\r\n                {\r\n                    if (line.Contains(\"<viewdata\"))\r\n                    {\r\n                        var document = new XmlDocument();\r\n                        document.LoadXml(line.Trim());\r\n                        parsing.ViewModelType = document.DocumentElement.GetAttribute(\"model\");\r\n\r\n\r\n                    }\r\n                }\r\n            }\r\n\r\n\r\n            return parsing;\r\n\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Spark/SparkModel/SparkTemplate.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Threading;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.View.Model;\r\nusing FubuMVC.Core.View.Rendering;\r\nusing Spark;\r\n\r\nnamespace FubuMVC.Spark.SparkModel\r\n{\r\n    public interface ISparkTemplate : ITemplateFile {}\r\n\r\n    public class SparkTemplate : Template, ISparkTemplate, DescribesItself\r\n    {\r\n        private static readonly ChunkLoader Loader = new ChunkLoader();\r\n        private readonly Lazy<SparkViewDescriptor> _full;\r\n        private readonly Lazy<SparkViewDescriptor> _partial;\r\n        private readonly IList<ISparkTemplate> _bindings = new List<ISparkTemplate>();\r\n        private readonly WatchedSparkEntry _viewEntry;\r\n        private readonly WatchedSparkEntry _partialViewEntry;\r\n        private readonly SparkEngineSettings _settings;\r\n\r\n        public SparkTemplate(IFubuApplicationFiles files, IFubuFile file, ISparkViewEngine engine, SparkEngineSettings settings)\r\n            : base(file, files)\r\n        {\r\n            _settings = settings;\r\n            _full = new Lazy<SparkViewDescriptor>(() => createSparkDescriptor(true));\r\n            _partial = new Lazy<SparkViewDescriptor>(() => createSparkDescriptor(false));\r\n\r\n            _viewEntry = new WatchedSparkEntry(() => engine.CreateEntry(_full.Value));\r\n            _partialViewEntry = new WatchedSparkEntry(() => engine.CreateEntry(_partial.Value));\r\n        }\r\n\r\n        public override IRenderableView GetView()\r\n        {\r\n            return _viewEntry.Value.CreateInstance().As<IRenderableView>();\r\n        }\r\n\r\n        public override IRenderableView GetPartialView()\r\n        {\r\n            return _partialViewEntry.Value.CreateInstance().As<IRenderableView>();\r\n        }\r\n\r\n\r\n        protected override Parsing createParsing(IFubuApplicationFiles files)\r\n        {\r\n            if (RelativePath().IsEmpty())\r\n            {\r\n                return new Parsing\r\n                {\r\n                    Master = null,\r\n                    Namespaces = new String[0],\r\n                    ViewModelType = null\r\n                };\r\n            }\r\n\r\n            try\r\n            {\r\n                var chunk = Retry.Times(_settings.RetryViewLoadingCount, () => Loader.Load(this, files)).ToList();\r\n\r\n                return new Parsing\r\n                {\r\n                    Master = chunk.Master(),\r\n                    ViewModelType = chunk.ViewModel(),\r\n                    Namespaces = chunk.Namespaces()\r\n                };\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                throw new Exception(\"Failed while trying to parse template file \" + FilePath, e);\r\n            }\r\n        }\r\n\r\n        public void Precompile()\r\n        {\r\n            _viewEntry.Precompile();\r\n            _partialViewEntry.Precompile();\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return \"Spark Template File: \" + FilePath;\r\n        }\r\n\r\n        public void Describe(Description description)\r\n        {\r\n            description.Title = RelativePath();\r\n        }\r\n\r\n        public void AddBinding(ISparkTemplate template)\r\n        {\r\n            _bindings.Add(template);\r\n        }\r\n\r\n        public IEnumerable<ISparkTemplate> Bindings\r\n        {\r\n            get { return _bindings; }\r\n        }\r\n\r\n\r\n        public ISparkViewEntry ViewEntry\r\n        {\r\n            get { return _viewEntry.Value; }\r\n        }\r\n\r\n        public ISparkViewEntry PartialViewEntry\r\n        {\r\n            get { return _partialViewEntry.Value; }\r\n        }\r\n\r\n\r\n        private SparkViewDescriptor createSparkDescriptor(bool useMaster)\r\n        {\r\n            var sparkDescriptor = new SparkViewDescriptor().AddTemplate(ViewPath);\r\n            if (useMaster && Master != null)\r\n            {\r\n                appendMasterPage(sparkDescriptor, (ISparkTemplate)Master);\r\n            }\r\n\r\n            return sparkDescriptor;\r\n        }\r\n\r\n        private static void appendMasterPage(SparkViewDescriptor descriptor, ISparkTemplate template)\r\n        {\r\n            if (template == null)\r\n            {\r\n                return;\r\n            }\r\n\r\n            descriptor.AddTemplate(template.ViewPath);\r\n            appendMasterPage(descriptor, template.Master as ISparkTemplate);\r\n        }\r\n\r\n        internal static class Retry\r\n        {\r\n            public static T Times<T>(int times, Func<T> action)\r\n            {\r\n                if (times == 0)\r\n                    return action();\r\n\r\n                var count = 0;\r\n                while (count < times)\r\n                {\r\n                    try\r\n                    {\r\n                        return action();\r\n                    }\r\n                    catch (Exception)\r\n                    {\r\n                        if (count >= (times - 1))\r\n                        {\r\n                            throw;\r\n                        }\r\n\r\n                        count++;\r\n                        Thread.Sleep(100);\r\n                    }\r\n                }\r\n\r\n                throw new InvalidOperationException(\"Could not execute action\");\r\n            }\r\n        }\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Spark/SparkModel/TemplateExtensions.cs",
    "content": "﻿using System.IO;\r\nusing FubuCore;\r\nusing Spark;\r\n\r\nnamespace FubuMVC.Spark.SparkModel\r\n{\r\n    public static class TemplateExtensions\r\n    {\r\n        public static bool IsSparkView(this ISparkTemplate template)\r\n\t\t{\r\n            return Path.GetExtension(template.FilePath).EqualsIgnoreCase(Constants.DotSpark) || Path.GetExtension(template.FilePath).EqualsIgnoreCase(Constants.DotShade);\r\n        }\r\n\r\n        public static bool IsXml(this ISparkTemplate template)\r\n\t\t{\r\n            return Path.GetExtension(template.FilePath).EqualsIgnoreCase(\".xml\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Spark/SparkModel/TemplateViewFolder.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuCore.Util;\r\nusing Spark.FileSystem;\r\n\r\nnamespace FubuMVC.Spark.SparkModel\r\n{\r\n    public class TemplateViewFolder : IViewFolder\r\n    {\r\n        private readonly IEnumerable<ISparkTemplate> _templates;\r\n        private readonly Cache<string, IList<string>> _listViews;\r\n        private readonly Cache<string, bool> _hasView;\r\n        private readonly Cache<string, FileSystemViewFile> _getViewSource;\r\n\r\n        public TemplateViewFolder(IEnumerable<ISparkTemplate> templates)\r\n        {\r\n            _templates = templates;\r\n            _listViews = new Cache<string, IList<string>>(listViews);\r\n            _hasView = new Cache<string, bool>(hasView);\r\n            _getViewSource = new Cache<string, FileSystemViewFile>(getViewSource);\r\n        }\r\n\r\n        public IList<string> ListViews(string path)\r\n        {\r\n            return _listViews[path ?? string.Empty];\r\n        }\r\n\r\n        public bool HasView(string path)\r\n        {\r\n            return _hasView[path];\r\n        }\r\n\r\n        public IViewFile GetViewSource(string path)\r\n        {\r\n            return _getViewSource[path];\r\n        }\r\n\r\n        private IList<string> listViews(string path)\r\n        {\r\n            return _templates\r\n\t\t\t\t.Where(x => x.ViewPath.DirectoryPath() == path)\r\n\t\t\t\t.Select(x => x.ViewPath)\r\n\t\t\t\t.ToList();\r\n        }\r\n\r\n        private bool hasView(string path)\r\n        {\r\n            return _templates.Any(x => x.ViewPath == path.Replace('\\\\', '/'));\r\n        }\r\n\r\n        private FileSystemViewFile getViewSource(string path)\r\n        {\r\n            var template = _templates\r\n\t\t\t\t.Where(x => x.ViewPath == path.Replace('\\\\', '/') || x.FilePath == path || x.RelativeDirectoryPath() == path)\r\n\t\t\t\t.Select(x => new FileSystemViewFile(x.FilePath))\r\n\t\t\t\t.FirstOrDefault();\r\n\r\n            return template;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Spark/SparkModel/WatchedSparkEntry.cs",
    "content": "﻿using System;\r\nusing Spark;\r\n\r\nnamespace FubuMVC.Spark.SparkModel\r\n{\r\n    public class WatchedSparkEntry\r\n    {\r\n        private readonly Func<ISparkViewEntry> _source;\r\n        private ISparkViewEntry _entry;\r\n\r\n        public WatchedSparkEntry(Func<ISparkViewEntry> source)\r\n        {\r\n            _source = source;\r\n        }\r\n\r\n        public void Precompile()\r\n        {\r\n            if (_entry == null)\r\n            {\r\n                _entry = _source();\r\n            }\r\n        }\r\n\r\n        public ISparkViewEntry Value\r\n        {\r\n            get\r\n            {\r\n                if (_entry == null || !_entry.IsCurrent())\r\n                {\r\n                    _entry = _source();\r\n                }\r\n\r\n                return _entry;\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Spark/SparkViewFacility.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Runtime.InteropServices;\r\nusing System.Web;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.View;\r\nusing FubuMVC.Core.View.Model;\r\nusing FubuMVC.Spark.Rendering;\r\nusing FubuMVC.Spark.SparkModel;\r\nusing HtmlTags;\r\nusing Spark;\r\nusing Spark.Caching;\r\n\r\nnamespace FubuMVC.Spark\r\n{\r\n    public class SparkViewFacility : ViewFacility<SparkTemplate>\r\n    {\r\n        private readonly SparkViewEngine _engine;\r\n        private readonly SparkSettings _sparkSettings;\r\n\r\n        public SparkViewFacility()\r\n        {\r\n            _engine = new SparkViewEngine();\r\n            _sparkSettings = _engine.Settings.As<SparkSettings>();\r\n        }\r\n\r\n        protected override void registerWatchSettings(AssetSettings settings)\r\n        {\r\n            settings.ContentMatches.Add(\"*.spark\");\r\n            settings.ContentMatches.Add(\"bindings.xml\");\r\n        }\r\n\r\n        protected override void addNamespacesForViews(CommonViewNamespaces namespaces)\r\n        {\r\n\r\n        }\r\n\r\n        protected override void precompile(BehaviorGraph graph)\r\n        {\r\n            graph.Settings.Alter<SparkEngineSettings>(spark => {\r\n                if (spark.PrecompileViews)\r\n                {\r\n                    AllTemplates().Each(x => x.Precompile());\r\n                }\r\n            });\r\n        }\r\n\r\n        public override Func<IFubuFile, SparkTemplate> CreateBuilder(SettingsCollection settings, IFubuApplicationFiles files)\r\n        {\r\n            return file => new SparkTemplate(files, file, _engine, settings.Get<SparkEngineSettings>());\r\n        }\r\n\r\n        public override FileSet FindMatching(SettingsCollection settings)\r\n        {\r\n            return settings.Get<SparkEngineSettings>().Search;\r\n        }\r\n\r\n        public override void Fill(ViewEngineSettings settings, BehaviorGraph graph, IPerfTimer timer, IFubuApplicationFiles files)\r\n        {\r\n            configureNamespaces(graph);\r\n\r\n            base.Fill(settings, graph, timer, files);\r\n\r\n            var bindingTemplates = files\r\n                .FindFiles(FileSet.Shallow(\"Shared/bindings.xml\"))\r\n                .Select(x => new SparkTemplate(files, x, _engine, graph.Settings.Get<SparkEngineSettings>())).ToArray();\r\n\r\n            _engine.ViewFolder = new TemplateViewFolder(AllTemplates());\r\n            _engine.DefaultPageBaseType = typeof (FubuSparkView).FullName;\r\n            _engine.BindingProvider = new FubuBindingProvider(bindingTemplates);\r\n            _engine.PartialProvider = new FubuPartialProvider(this);\r\n        }\r\n\r\n        private void configureNamespaces(BehaviorGraph graph)\r\n        {\r\n            _sparkSettings.SetAutomaticEncoding(true);\r\n\r\n            _sparkSettings.AddAssembly(typeof (HtmlTag).Assembly)\r\n                .AddAssembly(typeof (IPartialInvoker).Assembly)\r\n                .AddNamespace(typeof (IPartialInvoker).Namespace)\r\n                .AddNamespace(typeof (VirtualPathUtility).Namespace) // System.Web\r\n                .AddNamespace(typeof (SparkViewFacility).Namespace) // FubuMVC.Spark\r\n                .AddNamespace(typeof (HtmlTag).Namespace); // HtmlTags\r\n\r\n            var engineSettings = graph.Settings.Get<SparkEngineSettings>();\r\n            engineSettings.UseNamespaces.Each(ns => _sparkSettings.AddNamespace(ns));\r\n        }\r\n\r\n        public override void ReadSharedNamespaces(CommonViewNamespaces namespaces)\r\n        {\r\n            namespaces.Namespaces.Each(x => _sparkSettings.AddNamespace(x));\r\n        }\r\n\r\n        protected override void registerServices(ServiceRegistry services)\r\n        {\r\n            // TODO -- this needs to change at some point\r\n            services.SetServiceIfNone<ICacheService>(new DefaultCacheService(HttpRuntime.Cache));\r\n\r\n            services.SetServiceIfNone<IHtmlEncoder, DefaultHtmlEncoder>();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Spark/Todo.txt",
    "content": "﻿Goal is to create a new Spark behavior that has:\n\n- Func<Stream> -- i.e., \"knows\" how to get the raw contents of a spark view.  We don't want it to knowing view name, file location, or anything about where it comes from.\n- InputType -- if any, should be a RenderSpark<T> where T is the input type.\n- Change BehaviorNode ToBehavioralNode() in IViewToken to take in the ActionCall (or input type most likely).\n\n- No usage of SparkSettings on DSL and view location should completely go away from runtime.\n- No global SparkSettings, ActionContext & ViewContext.\n\n- Scanning for Spark files:\n\n - Do a deep search for files in one pass, then untangle the namespaces and folders by rooting the file path at the top.\n - Discover *all* possible Spark view tokens by scanning the file system first.\n - Derive the \"namespace\" from its location from the root + use assembly name from view model for toplevel.  \n\nMate up ActionCall's and ViewTokens:\n\n- Use attachment scanning like the WebForms model.\n- The ViewAttacher business needs to work as is.\n\nIsolation of Spark files:\n\r\nExploded Packages in development mode - not reachable from host and other packages:\r\n\r\n~/fubu-content/pak1/WebContent/*\r\n~/fubu-content/pak2/WebContent/*\r\n~/fubu-content/pak3/WebContent/*\r\n\r\nLinked Package Projects via .fubu-manifest - not reachable from host and other packages:\r\n\r\n~/../Pak4/*\r\n~/../Pak5/*\r\n\r\nEverything under Host - not reachable from packages:\r\n\r\n~/*\r\n\r\nShared by everyone - reachable from packages (both modes) and host.\r\n\r\n~/ReservedName1"
  },
  {
    "path": "src/FubuMVC.Spark/paket.references",
    "content": "FubuCore\nHtmlTags\nSpark\nstructuremap"
  },
  {
    "path": "src/FubuMVC.Tests/AboutEndpointTester.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Core.Diagnostics;\r\nusing FubuMVC.Core.Registration;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class AboutEndpointTester\r\n    {\r\n        [Test]\r\n        public void no_about_endpoint_if_not_in_development_mode()\r\n        {\r\n            var graph = BehaviorGraph.BuildEmptyGraph();\r\n\r\n            graph.ChainFor<AboutFubuDiagnostics>(x => x.get_about())\r\n                .ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void adds_the_about_endpoint_if_in_development_mode()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x => x.Mode = \"development\");\r\n            graph.ChainFor<AboutFubuDiagnostics>(x => x.get_about())\r\n                .ShouldNotBeNull();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/AddressClasses.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    public class AddressViewModel\r\n    {\r\n        public Address Address { get; set; }\r\n        public bool ShouldShow { get; set; }\r\n        public IList<LocalityViewModel> Localities { get; set; }\r\n    }\r\n\r\n    public class LocalityViewModel\r\n    {\r\n        public string ZipCode { get; set; }\r\n        public string CountyName { get; set; }\r\n    }\r\n\r\n    public class Address\r\n    {\r\n        public Address()\r\n        {\r\n            StateOrProvince = string.Empty;\r\n            Country = string.Empty;\r\n            AddressType = string.Empty;\r\n        }\r\n\r\n        public int Order { get; set; }\r\n\r\n        public bool IsActive { get; set; }\r\n\r\n        [FakeRequired, FakeMaximumStringLength(100)]\r\n        public string AddressType { get; set; }\r\n\r\n        [FakeRequired, FakeMaximumStringLength(250)]\r\n        public string Address1 { get; set; }\r\n\r\n        public string Address2 { get; set; }\r\n\r\n        [FakeRequired, FakeMaximumStringLength(250)]\r\n        public string City { get; set; }\r\n\r\n        [FakeRequired]\r\n        public string StateOrProvince { get; set; }\r\n\r\n        [FakeRequired, FakeMaximumStringLength(100)]\r\n        public string Country { get; set; }\r\n\r\n        [FakeRequired, FakeMaximumStringLength(50)]\r\n        public string PostalCode { get; set; }\r\n\r\n        //[Required]\r\n        //public TimeZoneInfo TimeZone { get; set; }\r\n\r\n\r\n        public DateTime DateEntered { get; set; }\r\n\r\n        public ColorEnum Color { get; set; }\r\n        public Guid Guid { get; set; }\r\n    }\r\n\r\n    public class FakeRequiredAttribute : Attribute\r\n    {\r\n    }\r\n\r\n    public class FakeMaximumStringLength : Attribute\r\n    {\r\n        private readonly int _maxLength;\r\n\r\n        public FakeMaximumStringLength(int maxLength)\r\n        {\r\n            _maxLength = maxLength;\r\n        }\r\n\r\n        public int MaxLength { get { return _maxLength; } }\r\n    }\r\n\r\n    public enum ColorEnum\r\n    {\r\n        red, blue, green\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Ajax/AjaxContinuationPolicyIntegratedTester.cs",
    "content": "using System;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Ajax;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Formatters;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Ajax\r\n{\r\n    [TestFixture]\r\n    public class AjaxContinuationPolicyIntegratedTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theGraph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.IncludeType<Controller1>();\r\n            });\r\n        }\r\n\r\n        #endregion\r\n\r\n        private BehaviorGraph theGraph;\r\n\r\n        private BehaviorChain chainFor(Expression<Action<Controller1>> method)\r\n        {\r\n            return theGraph.ChainFor(method);\r\n        }\r\n\r\n\r\n        public class Input\r\n        {\r\n        }\r\n\r\n        public class Output\r\n        {\r\n        }\r\n\r\n        public class Controller1\r\n        {\r\n            public Output NoContinuation(Input input)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            public AjaxContinuation BasicContinuation(Input input)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            public MySpecialContinuation SpecialContinuation(Input input)\r\n            {\r\n                return null;\r\n            }\r\n        }\r\n\r\n        public class MySpecialContinuation : AjaxContinuation\r\n        {\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void should_be_a_behavior_on_actions_that_return_a_subclass_of_AjaxContinuation()\r\n        {\r\n            var outputNode = chainFor(x => x.SpecialContinuation(null))\r\n                .Output;\r\n\r\n\r\n            outputNode.Media().OfType<AjaxContinuationWriter<MySpecialContinuation>>()\r\n                .Any()\r\n                .ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void should_be_a_behavior_on_actions_that_return_the_AjaxContinuation()\r\n        {\r\n            chainFor(x => x.BasicContinuation(null)).Output.Media().OfType<AjaxContinuationWriter<AjaxContinuation>>()\r\n                .Any()\r\n                .ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void should_have_a_conneg_input_node_with_json_or_http_post_input()\r\n        {\r\n            var connegInput = chainFor(x => x.BasicContinuation(null)).Input;\r\n            connegInput.CanRead(MimeType.HttpFormMimetype).ShouldBeTrue();\r\n            connegInput.CanRead(MimeType.Json).ShouldBeTrue();\r\n        }\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Ajax/AjaxContinuationTester.cs",
    "content": "using System.Reflection.Emit;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Ajax;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Tests.Ajax\r\n{\r\n    [TestFixture]\r\n    public class AjaxContinuationTester\r\n    {\r\n        private AjaxContinuation theContinuation;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theContinuation = new AjaxContinuation();\r\n        }\r\n\r\n        [Test]\r\n        public void success_is_placed_into_the_dictionary()\r\n        {\r\n            theContinuation.Success = false;\r\n            theContinuation.ToDictionary()[\"success\"].As<bool>().ShouldBeFalse();\r\n\r\n            theContinuation.Success = true;\r\n            theContinuation.ToDictionary()[\"success\"].As<bool>().ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void refresh_is_placed_int_the_dictionary()\r\n        {\r\n            theContinuation.ShouldRefresh = false;\r\n            theContinuation.ToDictionary()[\"refresh\"].As<bool>().ShouldBeFalse();\r\n\r\n            theContinuation.ShouldRefresh = true;\r\n            theContinuation.ToDictionary()[\"refresh\"].As<bool>().ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void message_is_placed_into_the_dictionary_if_it_exists()\r\n        {\r\n            theContinuation.ToDictionary().ContainsKey(\"message\").ShouldBeFalse();\r\n\r\n            theContinuation.Message = \"something\";\r\n\r\n            theContinuation.ToDictionary()[\"message\"].ShouldBe(\"something\");\r\n        }\r\n\r\n        [Test]\r\n        public void errors_are_only_written_to_the_dictionary_if_they_exist()\r\n        {\r\n            theContinuation.ToDictionary().ContainsKey(\"errors\").ShouldBeFalse();\r\n\r\n            theContinuation.Errors.Add(new AjaxError(){message = \"bad!\"});\r\n\r\n            theContinuation.ToDictionary()[\"errors\"].ShouldBeOfType<AjaxError[]>()\r\n                .Single().message.ShouldBe(\"bad!\");\r\n        }\r\n        \r\n        [Test]\r\n        public void navigate_page_is_only_written_to_the_dictionary_if_it_exists()\r\n        {\r\n            theContinuation.ToDictionary().ContainsKey(\"navigatePage\").ShouldBeFalse();\r\n\r\n            theContinuation.NavigatePage = \"/test\";\r\n            theContinuation.ToDictionary()[\"navigatePage\"].ShouldBe(\"/test\");\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void Successful_builder_method()\r\n        {\r\n            var success = AjaxContinuation.Successful();\r\n        \r\n            success.Errors.Any().ShouldBeFalse();\r\n            success.Success.ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void ForMessage_builder_method()\r\n        {\r\n            var continuation = AjaxContinuation.ForMessage(\"some message\");\r\n\r\n            continuation.Success.ShouldBeFalse();\r\n            continuation.Message.ShouldBe(\"some message\");\r\n        }\r\n\r\n        [Test]\r\n        public void ForMessage_via_StringToken()\r\n        {\r\n            var token = new SomeMessage();\r\n            var continuation = AjaxContinuation.ForMessage(token);\r\n\r\n            continuation.Success.ShouldBeFalse();\r\n            continuation.Message.ShouldBe(token.ToString());\r\n        }\r\n\r\n        [Test]\r\n        public void has_data_should_return_false_if_the_key_is_not_present()\r\n        {\r\n            theContinuation.HasData(\"keyThatIsNotInData\").ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void has_data_should_return_true_if_the_key_is_present()\r\n        {\r\n            theContinuation[\"keyThatIsInData\"] = \"foo\";\r\n            theContinuation.HasData(\"keyThatIsInData\").ShouldBeTrue();\r\n        }\r\n    }\r\n\r\n    public class SomeMessage\r\n    {\r\n        public override string ToString()\r\n        {\r\n            return \"some message\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/AjaxExtensionsTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.Specialized;\r\nusing System.Web;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Binding.Values;\r\nusing FubuMVC.Core.Http.AspNet;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing FubuMVC.Core;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class AjaxExtensionsTester\r\n    {\r\n\r\n        private IDictionary<string, object> _ajaxRequestInput = new Dictionary<string, object> { { \"X-Requested-With\", \"XMLHttpRequest\" } };\r\n        private IDictionary<string, object> _nonAjaxRequestInput = new Dictionary<string, object> { { \"X-Requested-With\", \"some_value\" } };\r\n\r\n        [Test]\r\n        public void is_dictionary_input_an_ajax_request()\r\n        {\r\n            _ajaxRequestInput.IsAjaxRequest().ShouldBeTrue();\r\n            _nonAjaxRequestInput.IsAjaxRequest().ShouldBeFalse();\r\n        }\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/AppSettings/AppSettingsProviderIntegratedTester.cs",
    "content": "using FubuCore.Configuration;\nusing FubuMVC.StructureMap;\nusing FubuTestingSupport;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.AppSettings\n{\n    [TestFixture]\n    public class AppSettingsProviderIntegratedTester : InteractionContext<AppSettingsProvider>\n    {\n        protected override void beforeEach()\n        {\n            Container.Configure(x => x.AddRegistry<AppSettingProviderRegistry>());\n        }\n\n        [Test]\n        public void fetch_a_simple_object()\n        {\n            // This data is pulled from the FubuMVC.Tests.dll.config file\n            var settings = ClassUnderTest.SettingsFor<FakeSettings>();\n            settings.Name.ShouldEqual(\"Max\");\n            settings.Age.ShouldEqual(6);\n            settings.Active.ShouldBeTrue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/AppSettings/AppSettingsRequestDataTester.cs",
    "content": "using System;\nusing FubuCore.Configuration;\nusing FubuTestingSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.AppSettings\n{\n    [TestFixture]\n    public class AppSettingsRequestDataTester\n    {\n        #region Setup/Teardown\n\n        [SetUp]\n        public void SetUp()\n        {\n            data = new AppSettingsRequestData();\n        }\n\n        #endregion\n\n        private AppSettingsRequestData data;\n\n        [Test]\n        public void exercise_the_callback()\n        {\n            var callback = MockRepository.GenerateMock<Action<object>>();\n            data.Value(\"FakeSettings.Name\", callback);\n\n            callback.AssertWasCalled(x => x.Invoke(\"Max\"));\n        }\n\n        [Test]\n        public void simply_pull_data()\n        {\n            // It's hard coded in the FubuMVC.Tests.dll.config file\n            data.Value(\"FakeSettings.Name\").ShouldEqual(\"Max\");\n        }\n\n        [Test]\n        public void call_to_non_existing_key_does_nothing()\n        {\n            var callback = MockRepository.GenerateMock<Action<object>>();\n            data.Value(\"FakeSettings.Name_NonExisting\", callback).ShouldBeFalse();\n\n            callback.AssertWasNotCalled(x => x.Invoke(\"Max\"));\n        }\n\n        [Test]\n        public void has_any_prefixed_positive()\n        {\n            data.HasAnyValuePrefixedWith(\"FakeSettings.\").ShouldBeTrue();\n        }\n\n        [Test]\n        public void has_any_prefixed_negative()\n        {\n            data.HasAnyValuePrefixedWith(\"NonExistentKey\").ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/AppSettings/FakeSettings.cs",
    "content": "namespace FubuMVC.Tests.AppSettings\n{\n    public class FakeSettings\n    {\n        public string Name { get; set; }\n        public int Age { get; set; }\n        public bool Active { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Assets/AssetSettingsTester.cs",
    "content": "﻿using System;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin.Middleware.StaticFiles;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.Security;\r\nusing FubuMVC.Core.Security.Authorization;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Assets\r\n{\r\n    [TestFixture]\r\n    public class AssetSettingsTester\r\n    {\r\n        private IStaticFileRule theRule;\r\n        private static readonly string PublicFolder = AppDomain.CurrentDomain.BaseDirectory\r\n            .ParentDirectory().ParentDirectory().AppendPath(\"public\");\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theRule = new AssetSettings().As<IStaticFileRule>();\r\n        }\r\n\r\n        [Test]\r\n        public void public_folder_is_public()\r\n        {\r\n            new AssetSettings().PublicFolder.ShouldBe(\"public\");\r\n        }\r\n\r\n        [Test]\r\n        public void mode_is_anywhere_by_default()\r\n        {\r\n            new AssetSettings().Mode.ShouldBe(SearchMode.Anywhere);\r\n        }\r\n\r\n        [Test]\r\n        public void version_should_be_null_by_default()\r\n        {\r\n            new AssetSettings().Version.ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void exclusions_includes_node_modules()\r\n        {\r\n            var settings = new AssetSettings();\r\n            settings.Exclusions.ShouldStartWith(\"node_modules/*\");\r\n        }\r\n\r\n        [Test]\r\n        public void add_exclusions()\r\n        {\r\n            var settings = new AssetSettings();\r\n            settings.Exclude(\"something.js\");\r\n            settings.Exclude(\"node-content\");\r\n\r\n            settings.CreateAssetSearch().Exclude.ShouldBe(\"node_modules/*;something.js;node-content\");\r\n        }\r\n\r\n        [Test]\r\n        public void can_write_javascript_files()\r\n        {\r\n            theRule.IsAllowed(new FubuFile(\"foo.js\")).ShouldBe(AuthorizationRight.Allow);\r\n            theRule.IsAllowed(new FubuFile(\"foo.coffee\")).ShouldBe(AuthorizationRight.Allow);\r\n        }\r\n\r\n        [Test]\r\n        public void can_write_css()\r\n        {\r\n            theRule.IsAllowed(new FubuFile(\"bar.css\")).ShouldBe(AuthorizationRight.Allow);\r\n        }\r\n\r\n        [Test]\r\n        public void can_write_htm_or_html()\r\n        {\r\n            theRule.IsAllowed(new FubuFile(\"bar.htm\")).ShouldBe(AuthorizationRight.Allow);\r\n            theRule.IsAllowed(new FubuFile(\"bar.html\")).ShouldBe(AuthorizationRight.Allow);\r\n        }\r\n\r\n        [Test]\r\n        public void can_write_images()\r\n        {\r\n            theRule.IsAllowed(new FubuFile(\"bar.jpg\")).ShouldBe(AuthorizationRight.Allow);\r\n            theRule.IsAllowed(new FubuFile(\"bar.gif\")).ShouldBe(AuthorizationRight.Allow);\r\n            theRule.IsAllowed(new FubuFile(\"bar.tif\")).ShouldBe(AuthorizationRight.Allow);\r\n            theRule.IsAllowed(new FubuFile(\"bar.png\")).ShouldBe(AuthorizationRight.Allow);\r\n        }\r\n\r\n        [Test]\r\n        public void none_if_the_mime_type_is_not_recognized()\r\n        {\r\n            theRule.IsAllowed(new FubuFile(\"bar.nonexistent\")).ShouldBe(AuthorizationRight.None);\r\n        }\r\n\r\n        [Test]\r\n        public void none_if_not_an_asset_file_or_html()\r\n        {\r\n            theRule.IsAllowed(new FubuFile(\"bar.txt\")).ShouldBe(AuthorizationRight.None);\r\n        }\r\n\r\n        [Test]\r\n        public void default_static_file_rules()\r\n        {\r\n            new AssetSettings().StaticFileRules\r\n                .Select(x => x.GetType()).OrderBy(x => x.Name)\r\n                .ShouldHaveTheSameElementsAs(typeof (DenyConfigRule));\r\n        }\r\n\r\n        private AuthorizationRight forFile(string filename)\r\n        {\r\n            var file = new FubuFile(filename);\r\n            var owinSettings = new AssetSettings();\r\n            owinSettings.StaticFileRules.Add(new AssetSettings());\r\n\r\n            return owinSettings.DetermineStaticFileRights(file);\r\n        }\r\n\r\n        [Test]\r\n        public void assert_static_rights()\r\n        {\r\n            forFile(\"foo.txt\").ShouldBe(AuthorizationRight.None);\r\n            forFile(\"foo.config\").ShouldBe(AuthorizationRight.Deny);\r\n            forFile(\"foo.jpg\").ShouldBe(AuthorizationRight.Allow);\r\n            forFile(\"foo.css\").ShouldBe(AuthorizationRight.Allow);\r\n            forFile(\"foo.bmp\").ShouldBe(AuthorizationRight.Allow);\r\n        }\r\n\r\n        [Test]\r\n        public void headers_in_production_mode()\r\n        {\r\n            using (var runtime = FubuRuntime.Basic(_ => _.Mode = \"\"))\r\n            {\r\n                var settings = runtime.Get<AssetSettings>();\r\n                settings.Headers.GetAllKeys()\r\n                    .ShouldHaveTheSameElementsAs(HttpGeneralHeaders.CacheControl, HttpGeneralHeaders.Expires);\r\n\r\n                settings.Headers[HttpGeneralHeaders.CacheControl]().ShouldBe(\"private, max-age=86400\");\r\n                settings.Headers[HttpGeneralHeaders.Expires]().ShouldNotBeNull();\r\n            }\r\n\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void no_headers_in_development_mode()\r\n        {\r\n            using (var runtime = FubuRuntime.Basic(_ => _.Mode = \"development\"))\r\n            {\r\n                runtime.Get<AssetSettings>()\r\n                    .Headers.GetAllKeys().Any().ShouldBeFalse();\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void determine_the_public_folder_with_no_version()\r\n        {\r\n            new FileSystem().CreateDirectory(\r\n                PublicFolder.ToFullPath());\r\n\r\n            var settings = new AssetSettings\r\n            {\r\n                Version = null\r\n            };\r\n\r\n            settings.DeterminePublicFolder(FubuApplicationFiles.ForDefault())\r\n                .ShouldBe(PublicFolder);\r\n        }\r\n\r\n        [Test]\r\n        public void determine_the_public_folder_with_a_non_null_but_nonexistent_version()\r\n        {\r\n            new FileSystem().CreateDirectory(\r\n                PublicFolder.ToFullPath());\r\n\r\n            var settings = new AssetSettings\r\n            {\r\n                Version = Guid.NewGuid().ToString()\r\n            };\r\n\r\n            settings.DeterminePublicFolder(FubuApplicationFiles.ForDefault())\r\n                .ShouldBe(PublicFolder.ToFullPath());\r\n        }\r\n\r\n        [Test]\r\n        public void determine_the_public_folder_when_the_version_does_exist()\r\n        {\r\n            new FileSystem().CreateDirectory(\r\n                PublicFolder.ToFullPath());\r\n            var expectedPath = AppDomain.CurrentDomain.BaseDirectory\r\n                .ParentDirectory().ParentDirectory().AppendPath(\"public\", \"1.0.1\").ToFullPath();\r\n\r\n            new FileSystem().CreateDirectory(\r\n                expectedPath);\r\n\r\n            var settings = new AssetSettings\r\n            {\r\n                Version = \"1.0.1\"\r\n            };\r\n\r\n            settings.DeterminePublicFolder(FubuApplicationFiles.ForDefault())\r\n                .ShouldBe(expectedPath);\r\n        }\r\n\r\n        [Test]\r\n        public void default_allowable_mimetypes_includes_fonts()\r\n        {\r\n            var settings = new AssetSettings();\r\n            var search = settings.CreateAssetSearch();\r\n\r\n            search.Include.ShouldContain(\".svg\");\r\n            search.Include.ShouldContain(\".eot\");\r\n            search.Include.ShouldContain(\".ttf\");\r\n            search.Include.ShouldContain(\".woff\");\r\n            search.Include.ShouldContain(\".woff2\");\r\n        }\r\n\r\n        [Test]\r\n        public void template_destination_by_default_should_be_underscore_templates()\r\n        {\r\n            new AssetSettings().TemplateDestination.ShouldBe(\"_templates\");\r\n        }\r\n\r\n        [Test]\r\n        public void the_default_cultures_for_templates_is_only_en_US_because_MURICA()\r\n        {\r\n            new AssetSettings().TemplateCultures.ShouldHaveTheSameElementsAs(\"en-US\");\r\n        }\r\n\r\n        [Test]\r\n        public void default_content_files()\r\n        {\r\n            var settings = new AssetSettings();\r\n\r\n            settings.ContentMatches.ShouldContain(\".htm\");\r\n            settings.ContentMatches.ShouldContain(\".html\");\r\n            settings.ContentMatches.ShouldContain(\".txt\");\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_creating_the_default_search\r\n    {\r\n        private readonly FileSet search = new AssetSettings().CreateAssetSearch();\r\n\r\n        [Test]\r\n        public void exclude_should_include_node_modules()\r\n        {\r\n            search.Exclude.ShouldBe(\"node_modules/*\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_be_deep()\r\n        {\r\n            search.DeepSearch.ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void should_look_for_js_files()\r\n        {\r\n            search.Include.ShouldContain(\"*.js\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_look_for_css_files()\r\n        {\r\n            search.Include.ShouldContain(\"*.css\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_include_all_file_types_registered_as_images()\r\n        {\r\n            search.Include.ShouldContain(\"*.bmp\");\r\n            search.Include.ShouldContain(\"*.png\");\r\n            search.Include.ShouldContain(\"*.gif\");\r\n            search.Include.ShouldContain(\"*.jpg\");\r\n            search.Include.ShouldContain(\"*.jpeg\");\r\n        }\r\n\r\n        [Test]\r\n        public void find_files_for_public_folder_only()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.AlterSettings<AssetSettings>(x => { x.Mode = SearchMode.PublicFolderOnly; });\r\n\r\n            using (var runtime = registry.ToRuntime())\r\n            {\r\n                var graph = runtime.Get<IAssetFinder>().FindAll();\r\n                graph.Assets.OrderBy(x => x.Url).Select(x => x.Url)\r\n                    .ShouldHaveTheSameElementsAs(\"public/1.0.1/d.js\", \"public/1.0.1/e.js\", \"public/1.0.1/f.js\",\r\n                        \"public/javascript/a.js\", \"public/javascript/b.js\", \"public/javascript/c.js\");\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void find_files_for_public_folder_with_version()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.AlterSettings<AssetSettings>(x =>\r\n            {\r\n                x.Mode = SearchMode.PublicFolderOnly;\r\n                x.Version = \"1.0.1\";\r\n            });\r\n\r\n            using (var runtime = registry.ToRuntime())\r\n            {\r\n                var graph = runtime.Get<IAssetFinder>().FindAll();\r\n                graph.Assets.OrderBy(x => x.Url).Select(x => x.Url)\r\n                    .ShouldHaveTheSameElementsAs(\"public/1.0.1/d.js\", \"public/1.0.1/e.js\", \"public/1.0.1/f.js\");\r\n            }\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_creating_a_file_watcher_manifest\r\n    {\r\n        [Test]\r\n        public void set_the_public_folder_if_in_that_mode()\r\n        {\r\n            var settings = new AssetSettings\r\n            {\r\n                Mode = SearchMode.PublicFolderOnly,\r\n                PublicFolder = \"public\"\r\n            };\r\n\r\n            var manifest = settings.CreateFileWatcherManifest(FubuApplicationFiles.ForDefault());\r\n\r\n            manifest.PublicAssetFolder.ShouldBe(\r\n                AppDomain.CurrentDomain.BaseDirectory.ParentDirectory().ParentDirectory().AppendPath(\"public\").Replace('\\\\', '/'));\r\n        }\r\n\r\n        [Test]\r\n        public void no_public_folder_if_in_anywhere_mode()\r\n        {\r\n            var settings = new AssetSettings\r\n            {\r\n                Mode = SearchMode.Anywhere\r\n            };\r\n\r\n            settings.CreateFileWatcherManifest(FubuApplicationFiles.ForDefault()).PublicAssetFolder.ShouldBeEmpty();\r\n        }\r\n\r\n        [Test]\r\n        public void adds_content_extensions()\r\n        {\r\n            var settings = new AssetSettings();\r\n            settings.ContentMatches.Add(\".foo\");\r\n\r\n            var manifest = settings.CreateFileWatcherManifest(FubuApplicationFiles.ForDefault());\r\n\r\n            manifest.ContentMatches.ShouldContain(\".foo\");\r\n            manifest.ContentMatches.ShouldContain(\".htm\");\r\n            manifest.ContentMatches.ShouldContain(\".html\");\r\n        }\r\n\r\n        [Test]\r\n        public void adds_all_the_default_asset_extensions()\r\n        {\r\n            var settings = new AssetSettings();\r\n            var manifest = settings.CreateFileWatcherManifest(FubuApplicationFiles.ForDefault());\r\n\r\n            manifest.AssetExtensions.ShouldContain(\".js\");\r\n            manifest.AssetExtensions.ShouldContain(\".css\");\r\n            manifest.AssetExtensions.ShouldContain(\".jpeg\");\r\n            manifest.AssetExtensions.ShouldContain(\".jpg\");\r\n            manifest.AssetExtensions.ShouldContain(\".bmp\");\r\n        }\r\n\r\n        [Test]\r\n        public void adds_the_user_supplied_extensions()\r\n        {\r\n            var settings = new AssetSettings();\r\n            var manifest = settings.CreateFileWatcherManifest(FubuApplicationFiles.ForDefault());\r\n\r\n            manifest.AssetExtensions.ShouldContain(\".svg\");\r\n            manifest.AssetExtensions.ShouldContain(\".ttf\");\r\n            manifest.AssetExtensions.ShouldContain(\".eot\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Assets/JavascriptRouterTester.cs",
    "content": "﻿using System;\r\nusing System.Linq;\r\nusing FubuMVC.Core.Assets.JavascriptRouting;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Assets\r\n{\r\n    [TestFixture]\r\n    public class JavascriptRouterTester\r\n    {\r\n        [Test]\r\n        public void add_route_happy_path()\r\n        {\r\n            var chain = new RoutedChain(\"foo\");\r\n            chain.RouteName = \"bar\";\r\n            chain.Route.AddHttpMethodConstraint(\"PUT\");\r\n\r\n            var router = new MyJavascriptRouter();\r\n            router.Add(chain);\r\n\r\n            var route = router.Routes().Single();\r\n\r\n            route.Name.ShouldBe(\"bar\");\r\n            route.Method.ShouldBe(\"PUT\");\r\n            route.Finder(null).ShouldBeTheSameAs(chain);\r\n        }\r\n\r\n        [Test]\r\n        public void got_to_have_a_route_name()\r\n        {\r\n            var chain = new RoutedChain(\"foo\");\r\n            //chain.RouteName = \"bar\";\r\n            chain.Route.AddHttpMethodConstraint(\"PUT\");\r\n\r\n            var router = new MyJavascriptRouter();\r\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(() => {\r\n                router.Add(chain);\r\n            });\r\n            \r\n        }\r\n        \r\n        [Test]\r\n        public void got_to_have_at_least_one_http_method()\r\n        {\r\n            var chain = new RoutedChain(\"foo\");\r\n            chain.RouteName = \"bar\";\r\n            //chain.Route.AddHttpMethodConstraint(\"PUT\");\r\n\r\n            var router = new MyJavascriptRouter();\r\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(() =>\r\n            {\r\n                router.Add(chain);\r\n            });\r\n        }\r\n    }\r\n\r\n    public class MyJavascriptRouter : JavascriptRouter\r\n    {\r\n        \r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Assets/ScriptTagTester.cs",
    "content": "﻿using FubuCore;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Assets\r\n{\r\n    [TestFixture]\r\n    public class ScriptTagTester\r\n    {\r\n        private readonly FubuFile theFile;\r\n        private Asset theAsset;\r\n\r\n        public ScriptTagTester()\r\n        {\r\n            new FileSystem().WriteStringToFile(\"foo.js\", \"some stuff\");\r\n\r\n            theFile = new FubuFile(\"foo.js\");\r\n            theFile.RelativePath = \"foo.js\";\r\n        }\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theAsset = new Asset(theFile);\r\n        }\r\n\r\n        [Test]\r\n        public void happy_path_prod_mode()\r\n        {\r\n            new ScriptTag(null, x => x, theAsset).ToString()\r\n                .ShouldBe(\"<script type=\\\"text/javascript\\\" src=\\\"foo.js\\\"></script>\");\r\n        }\r\n\r\n        [Test]\r\n        public void uses_the_default_url_if_asset_is_null()\r\n        {\r\n            new ScriptTag(null, x => x, null, \"http://server/foo.js\")\r\n                .ToString()\r\n                .ShouldBe(\"<script type=\\\"text/javascript\\\" src=\\\"http://server/foo.js\\\"></script>\");\r\n        }\r\n\r\n        [Test]\r\n        public void happy_path_dev_mode()\r\n        {\r\n            new ScriptTag(\"development\", x => x, theAsset).ToString()\r\n                .ShouldBe(\"<script type=\\\"text/javascript\\\" src=\\\"foo.js?Etag={0}\\\"></script>\".ToFormat(theFile.Etag()));\r\n        }\r\n\r\n        [Test]\r\n        public void has_a_cdn_with_no_fallback()\r\n        {\r\n            theAsset.CdnUrl = \"http://cdn.me.com/foo.js\";\r\n\r\n            new ScriptTag(null, x => x, theAsset).ToString()\r\n                .ShouldBe(\"<script type=\\\"text/javascript\\\" src=\\\"http://cdn.me.com/foo.js\\\"></script>\");\r\n        }\r\n\r\n        [Test]\r\n        public void has_a_cdn_and_fallback()\r\n        {\r\n            theAsset.CdnUrl = \"http://cdn.me.com/foo.js\";\r\n            theAsset.FallbackTest = \"foo == null\";\r\n\r\n            var tag = new ScriptTag(null, x => x, theAsset);\r\n\r\n            tag.ToString().ShouldContain(\"<script>if (foo == null)\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Behaviors/BasicBehaviorTester.cs",
    "content": "using System.Threading.Tasks;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Tests.TestSupport;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Behaviors\r\n{\r\n    public abstract class non_partial_implementation_of_BasicBehavior : InteractionContext<TestBehavior>\r\n    {\r\n        protected IActionBehavior InnerBehavior;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            PartialBehaviorProvider provider = () => PartialBehavior.Ignored;\r\n            Container.Configure(x => x.For(typeof(PartialBehaviorProvider)).Use(provider));\r\n\r\n            InnerBehavior = MockFor<IActionBehavior>();\r\n            ClassUnderTest.InsideBehavior = InnerBehavior;\r\n        }\r\n    }\r\n\r\n    public abstract class partial_implementation_of_BasicBehavior : InteractionContext<TestBehavior>\r\n    {\r\n        protected IActionBehavior InnerBehavior;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            PartialBehaviorProvider provider = () => PartialBehavior.Executes;\r\n            Container.Configure(x => x.For(typeof(PartialBehaviorProvider)).Use(provider));\r\n\r\n\r\n            InnerBehavior = MockFor<IActionBehavior>();\r\n            ClassUnderTest.InsideBehavior = InnerBehavior;\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_calling_Invoke_on_non_partial : non_partial_implementation_of_BasicBehavior\r\n    {\r\n        protected override void beforeEach()\r\n        {\r\n            base.beforeEach();\r\n\r\n            InnerBehavior.Stub(x => x.Invoke()).Return(Task.CompletedTask);\r\n\r\n            ClassUnderTest.Invoke().Wait();\r\n        }\r\n\r\n        [Test]\r\n        public void it_should_call_the_overriden_performInvoke_and_afterInsideBehavior()\r\n        {\r\n            MockFor<IDoSomethingBeforeInnerBehavior>().AssertWasCalled(x => x.Do());\r\n            MockFor<IDoSomethingAfterInnerBehavior>().AssertWasCalled(x => x.Do());\r\n        }\r\n\r\n        [Test]\r\n        public void it_should_call_Invoke_on_the_inner_behavior()\r\n        {\r\n            InnerBehavior.AssertWasCalled(x => x.Invoke());\r\n            InnerBehavior.AssertWasNotCalled(x => x.InvokePartial());\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_calling_InvokePartial_on_non_partial : non_partial_implementation_of_BasicBehavior\r\n    {\r\n        protected override void beforeEach()\r\n        {\r\n            base.beforeEach();\r\n            ClassUnderTest.InvokePartial();\r\n        }\r\n\r\n        [Test]\r\n        public void it_should_not_call_the_overriden_performInvoke_nor_afterInsideBehavior()\r\n        {\r\n            MockFor<IDoSomethingBeforeInnerBehavior>().AssertWasNotCalled(x => x.Do());\r\n            MockFor<IDoSomethingAfterInnerBehavior>().AssertWasNotCalled(x => x.Do());\r\n        }\r\n\r\n        [Test]\r\n        public void it_should_call_InvokePartial_on_the_inner_behavior()\r\n        {\r\n            InnerBehavior.AssertWasCalled(x => x.InvokePartial());\r\n            InnerBehavior.AssertWasNotCalled(x => x.Invoke());\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_calling_Invoke_on_partial : partial_implementation_of_BasicBehavior\r\n    {\r\n        protected override void beforeEach()\r\n        {\r\n            base.beforeEach();\r\n\r\n            InnerBehavior.Stub(x => x.Invoke()).Return(Task.CompletedTask);\r\n\r\n            ClassUnderTest.Invoke().Wait();\r\n        }\r\n\r\n        [Test]\r\n        public void it_should_call_the_overriden_performInvoke_and_afterInsideBehavior()\r\n        {\r\n            MockFor<IDoSomethingBeforeInnerBehavior>().AssertWasCalled(x => x.Do());\r\n            MockFor<IDoSomethingAfterInnerBehavior>().AssertWasCalled(x => x.Do());\r\n        }\r\n\r\n        [Test]\r\n        public void it_should_call_Invoke_on_the_inner_behavior()\r\n        {\r\n            InnerBehavior.AssertWasCalled(x => x.Invoke());\r\n            InnerBehavior.AssertWasNotCalled(x => x.InvokePartial());\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_calling_InvokePartial_on_partial : partial_implementation_of_BasicBehavior\r\n    {\r\n        protected override void beforeEach()\r\n        {\r\n            base.beforeEach();\r\n\r\n\r\n            InnerBehavior.Stub(x => x.InvokePartial()).Return(Task.CompletedTask);\r\n\r\n            ClassUnderTest.InvokePartial().Wait();\r\n        }\r\n\r\n        [Test]\r\n        public void it_should_call_the_overriden_performInvoke_and_afterInsideBehavior()\r\n        {\r\n            MockFor<IDoSomethingBeforeInnerBehavior>().AssertWasCalled(x => x.Do());\r\n            MockFor<IDoSomethingAfterInnerBehavior>().AssertWasCalled(x => x.Do());\r\n        }\r\n\r\n        [Test]\r\n        public void it_should_call_InvokePartial_on_the_inner_behavior()\r\n        {\r\n            InnerBehavior.AssertWasCalled(x => x.InvokePartial());\r\n            InnerBehavior.AssertWasNotCalled(x => x.Invoke());\r\n        }\r\n    }\r\n\r\n    public interface IDoSomethingBeforeInnerBehavior { void Do(); }\r\n    public interface IDoSomethingAfterInnerBehavior { void Do(); }\r\n    public delegate PartialBehavior PartialBehaviorProvider();\r\n\r\n    public class TestBehavior : BasicBehavior\r\n    {\r\n        readonly IDoSomethingBeforeInnerBehavior _before;\r\n        readonly IDoSomethingAfterInnerBehavior _after;\r\n\r\n        public TestBehavior(IDoSomethingBeforeInnerBehavior before, IDoSomethingAfterInnerBehavior after,\r\n            PartialBehaviorProvider partialBehaviorProvider) : base(partialBehaviorProvider())\r\n        {\r\n            _before = before;\r\n            _after = after;\r\n        }\r\n\r\n        protected override Task<DoNext> performInvoke()\r\n        {\r\n            _before.Do();\r\n            return Task.FromResult(DoNext.Continue);\r\n        }\r\n\r\n        protected override Task afterInsideBehavior()\r\n        {\r\n            _after.Do();\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Behaviors/BehaviorTestContext.cs",
    "content": "using System;\r\nusing FubuMVC.Core.Behaviors;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Behaviors\r\n{\r\n    public abstract class BehaviorTestContext<BEHAVIOR>\r\n        where BEHAVIOR : IActionBehavior\r\n    {\r\n        protected BEHAVIOR _behavior;\r\n        protected TestController _controller;\r\n        protected object _input;\r\n        protected TestOutputModel _outputModel;\r\n\r\n        protected virtual BEHAVIOR CreateBehavior()\r\n        {\r\n            return Activator.CreateInstance<BEHAVIOR>();\r\n        }\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            _behavior = CreateBehavior();\r\n            _controller = new TestController();\r\n            _input = new TestInputModel();\r\n            _outputModel = new TestOutputModel();\r\n\r\n            beforeEach();\r\n        }\r\n\r\n        [TearDown]\r\n        public void TearDown()\r\n        {\r\n            afterEach();\r\n        }\r\n\r\n        protected virtual void beforeEach()\r\n        {\r\n        }\r\n\r\n        protected virtual void afterEach()\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Behaviors/Conditional/AlwaysTester.cs",
    "content": "using FubuMVC.Core.Runtime.Conditionals;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Behaviors.Conditional\r\n{\r\n    [TestFixture]\r\n    public class AlwaysTester\r\n    {\r\n        [Test]\r\n        public void should_execute_has_to_be_true()\r\n        {\r\n            Always.Flyweight.ShouldExecute(null).ShouldBeTrue();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Behaviors/ITargetController.cs",
    "content": "﻿using System;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Tests.Behaviors\r\n{\r\n    public interface ITargetController\r\n    {\r\n        Output ZeroInOneOut();\r\n        Task<Output> ZeroInOneOutAsync();\r\n        Output OneInOneOut(Input input);\r\n        void ZeroInZeroOut();\r\n        void OneInZeroOut(Input input);\r\n        Task OneInZeroOutAsync(Input input);\r\n    }\r\n\r\n    public class Input\r\n    {\r\n    }\r\n\r\n    public class Output\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Behaviors/InterceptExceptionBehaviorTester.cs",
    "content": "﻿using System;\r\nusing System.Net;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Behaviors;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Behaviors\r\n{\r\n\t[TestFixture]\r\n\tpublic class InterceptExceptionBehaviorTester \r\n\t{\r\n\t\t[Test]\r\n\t\tpublic void should_invoke_inside_behavior()\r\n\t\t{\r\n\t\t\tvar insideBehavior = new DoNothingBehavior();\r\n\t\t\tvar cut = new TestInterceptExceptionBehavior<ArgumentException>\r\n\t\t\t{\r\n\t\t\t\tInsideBehavior = insideBehavior\r\n\t\t\t};\r\n\r\n\t\t\tcut.Invoke();\r\n\r\n\t\t\tinsideBehavior.Invoked.ShouldBeTrue();\r\n\t\t}\r\n\r\n\t\t[Test]\r\n\t\tpublic void when_no_exception_is_thrown_none_should_be_handled()\r\n\t\t{\r\n\t\t\tvar insideBehavior = new DoNothingBehavior();\r\n\t\t\tvar cut = new TestInterceptExceptionBehavior<ArgumentException>\r\n\t\t\t{\r\n\t\t\t\tInsideBehavior = insideBehavior\r\n\t\t\t};\r\n\r\n\t\t\tcut.Invoke();\r\n\r\n\t\t\tcut.HandledException.ShouldBeNull();\r\n\t\t}\r\n\r\n\t\t[Test]\r\n\t\tpublic void invoke_should_throw_an_exception_when_no_inside_behavior_is_set()\r\n\t\t{\r\n\t\t\tvar interceptExceptionBehavior = new TestInterceptExceptionBehavior<ArgumentException>();\r\n\r\n            Exception<FubuAssertionException>.ShouldBeThrownBy(() => interceptExceptionBehavior.Invoke().Wait());\r\n\t\t}\r\n\r\n\t\t[Test]\r\n\t\tpublic void when_matching_exception_is_thrown_by_inside_behavior_it_should_be_handled()\r\n\t\t{\r\n\t\t\tvar cut = new TestInterceptExceptionBehavior<ArgumentException>\r\n\t\t\t          {\r\n\t\t\t          \tInsideBehavior = new ThrowingBehavior<ArgumentException>()\r\n\t\t\t          };\r\n\r\n\t\t\tcut.Invoke();\r\n\r\n\t\t\tcut.HandledException.ShouldBeOfType<ArgumentException>();\r\n\t\t}\r\n\r\n\t\t[Test]\r\n\t\tpublic void when_exception_should_not_be_handled_the_handle_method_should_not_be_invoked()\r\n\t\t{\r\n\t\t\tvar cut = new TestInterceptExceptionBehavior<ArgumentException>\r\n\t\t\t{\r\n\t\t\t\tInsideBehavior = new ThrowingBehavior<ArgumentException>()\r\n\t\t\t};\r\n\t\t\tcut.SetShouldHandle(false);\r\n\r\n\t\t\tException<ArgumentException>.ShouldBeThrownBy(() => cut.Invoke().Wait());\r\n\r\n\t\t\tcut.HandledException.ShouldBeNull();\r\n\t\t}\r\n\r\n\t\t[Test]\r\n\t\tpublic void when_non_matching_exception_is_thrown_should_handled_should_not_be_invoked()\r\n\t\t{\r\n\t\t\tvar cut = new TestInterceptExceptionBehavior<ArgumentException>\r\n\t\t\t{\r\n\t\t\t\tInsideBehavior = new ThrowingBehavior<WebException>()\r\n\t\t\t};\r\n\r\n\t\t\tcut.SetShouldHandle(false);\r\n\r\n\t\t\tException<WebException>.ShouldBeThrownBy(() => cut.Invoke().Wait());\r\n\r\n\t\t\tcut.HandledException.ShouldBeNull();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic class TestInterceptExceptionBehavior<T> : InterceptExceptionBehavior<T> \r\n\t\twhere T : Exception\r\n\t{\r\n\r\n\t\tprivate bool shouldHandle = true;\r\n\t\tpublic T HandledException { get; private set; }\r\n\t\t\t\r\n\t\tpublic void SetShouldHandle(bool value)\r\n\t\t{\r\n\t\t\tshouldHandle = value;\t\r\n\t\t}\r\n\r\n\t\tpublic override bool ShouldHandle(T exception)\r\n\t\t{\r\n\t\t\treturn shouldHandle;\r\n\t\t}\r\n\r\n\t\tpublic override void Handle(T exception)\r\n\t\t{\r\n\t\t\tHandledException = exception;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tpublic class ThrowingBehavior<T> : IActionBehavior\r\n\t\twhere T : Exception, new()\r\n\t{\r\n\t\tpublic Task Invoke()\r\n\t\t{\r\n\t\t\tthrow new T();\r\n\t\t}\r\n\r\n\t\tpublic Task InvokePartial()\r\n\t\t{\r\n\t\t\tthrow new T();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic class DoNothingBehavior : IActionBehavior\r\n\t{\r\n\t\tpublic bool Invoked { get; set; }\r\n\r\n\t\tpublic Task Invoke()\r\n\t\t{\r\n\t\t\tInvoked = true;\r\n\t\t    return Task.CompletedTask;\r\n\t\t}\r\n\r\n\t\tpublic Task InvokePartial()\r\n\t\t{\r\n\t\t\tInvoked = true;\r\n            return Task.CompletedTask;\r\n        }\r\n\t}\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Behaviors/RenderJsonpBehaviorTester.cs",
    "content": "using FubuCore.Binding;\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Tests.Runtime;\r\nusing FubuTestingSupport;\nusing HtmlTags;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Behaviors\n{\n    [TestFixture]\n    public class when_rendering_json_from_a_model_object : InteractionContext<JsonpAwareWriter>\n    {\n        private JsonOutput output;\n        private InMemoryRequestData requestData;\n        private InMemoryOutputWriter theOutputWriter;\n        \n        protected override void beforeEach()\n        {\n            output = new JsonOutput\n                         {\n                             Name = \"Max\",\n                             Age = 6\n                         };\n\n            requestData = new InMemoryRequestData();\n            Services.Inject<IRequestData>(requestData);\n\n            theOutputWriter = new InMemoryOutputWriter();\n            Services.Inject<IOutputWriter>(theOutputWriter);\n        }\n\n        [Test]\n        public void should_write_json_mimetype()\n        {\n            ClassUnderTest.Write(output);\n\n            theOutputWriter.ContentType.ShouldEqual(MimeType.Json.ToString());\n        }\n\n        [Test]\n        public void should_write_only_json_output_when_jsonp_request_parameter_is_not_present()\n        {\n            ClassUnderTest.Write(output);\n\n            var json = JsonUtil.ToJson(output);\n            theOutputWriter.ToString().TrimEnd().ShouldEqual(json);\n        }\n\n        [Test]\n        public void should_write_json_padded_output_when_jsonp_request_parameter_is_present()\n        {\n            const string padding = \"parseResult\";\n            requestData[JsonpAwareWriter.JsonPHttpRequest] = padding;\n            \n            ClassUnderTest.Write(output);\n\n            var expectedResult = padding + \"(\" + JsonUtil.ToJson(output) + \");\";\n            theOutputWriter.ToString().TrimEnd().ShouldEqual(expectedResult);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Bugs/DoubleRegistrationOfImports.cs",
    "content": "using System;\r\nusing System.Diagnostics;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing NUnit.Framework;\r\nusing System.Linq;\r\nusing Shouldly;\r\nusing System.Collections.Generic;\r\n\r\nnamespace FubuMVC.Tests.Bugs\r\n{\r\n    [TestFixture]\r\n    public class DoubleRegistrationOfImports\r\n    {\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            \r\n        }\r\n\r\n        [Test]\r\n        public void an_extension_is_only_applied_once()\r\n        {\r\n            OneExtension.Applied = TwoExtension.Applied = ThreeExtension.Applied = 0;\r\n\r\n            var graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Import<SubModule>();\r\n                x.Import<OneExtension>();\r\n                x.Import<TwoExtension>();\r\n                x.Import<ThreeExtension>();\r\n            });\r\n\r\n            OneExtension.Applied.ShouldBe(1);\r\n            TwoExtension.Applied.ShouldBe(1);\r\n            ThreeExtension.Applied.ShouldBe(1);\r\n        }\r\n\r\n        [Test]\r\n        public void a_fubu_package_registry_is_only_imported_once()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Import<SubModule>();\r\n                x.Import<OneExtension>();\r\n                x.Import<TwoExtension>();\r\n                x.Import<ThreeExtension>();\r\n            });\r\n\r\n            var actions = graph.Actions().Where(x => x.HandlerType == typeof (SomeClassWithActions));\r\n\r\n\r\n            actions.ShouldHaveCount(1);\r\n        }\r\n\r\n        [Test]\r\n        public void do_not_allow_second_import_to_be_processed()\r\n        {\r\n            // SubModule2 tries to import SubModule1 with the same url prefix\r\n            var graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Import<SubModule>();\r\n                x.Import<SubModule2>();\r\n            });\r\n\r\n            var actions = graph.Actions().Where(x => x.HandlerType == typeof(SomeClassWithActions));\r\n\r\n\r\n            actions.ShouldHaveCount(1);\r\n        }\r\n\r\n        [Test]\r\n        public void policies_will_only_be_applied_once()\r\n        {\r\n            SpecialPolicy.Applied = 0;\r\n\r\n            var graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Policies.Local.Add<SpecialPolicy>();\r\n                x.Import<OneExtension>();\r\n                x.Import<TwoExtension>();\r\n                x.Import<ThreeExtension>();\r\n            });\r\n\r\n            SpecialPolicy.Applied.ShouldBe(1);\r\n        }\r\n    }\r\n\r\n    public class SpecialPolicy : IConfigurationAction\r\n    {\r\n        public static int Applied;\r\n\r\n        public void Configure(BehaviorGraph graph)\r\n        {\r\n            Applied++;\r\n        }\r\n    }\r\n\r\n    public class SubModule2 : FubuPackageRegistry\r\n    {\r\n        public SubModule2()\r\n        {\r\n            Import<SubModule>();\r\n        }\r\n    }\r\n\r\n    public class SubModule : FubuPackageRegistry\r\n    {\r\n        public SubModule()\r\n        {\r\n            Actions.IncludeType<SomeClassWithActions>();\r\n            //Route(Guid.NewGuid().ToString()).Calls<SomeClassWithActions>(x => x.get_hello());\r\n        }\r\n    }\r\n\r\n    public class SomeClassWithActions\r\n    {\r\n        public string get_hello()\r\n        {\r\n            return \"Hello.\";\r\n        }\r\n    }\r\n\r\n    public class OneExtension : IFubuRegistryExtension\r\n    {\r\n        public static int Applied;\r\n\r\n        public void Configure(FubuRegistry registry)\r\n        {\r\n            registry.Policies.Local.Add<SpecialPolicy>();\r\n            registry.Import<SubModule>();\r\n\r\n            Applied++;\r\n        }\r\n    }\r\n\r\n    public class TwoExtension : IFubuRegistryExtension\r\n    {\r\n        public static int Applied;\r\n\r\n        public void Configure(FubuRegistry registry)\r\n        {\r\n            registry.Policies.Local.Add<SpecialPolicy>();\r\n            registry.Import<SubModule>();\r\n            Applied++;\r\n        }\r\n    }\r\n\r\n    public class ThreeExtension : IFubuRegistryExtension\r\n    {\r\n        public static int Applied;\r\n\r\n        public void Configure(FubuRegistry registry)\r\n        {\r\n            registry.Import<SubModule>();\r\n            registry.Import<TwoExtension>();\r\n            registry.Import<OneExtension>();\r\n\r\n            Applied++;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Bugs/FubuPackageRegistry_should_honor_the_url_prefix.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing NUnit.Framework;\r\nusing FubuCore;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Bugs\r\n{\r\n    [TestFixture]\r\n    public class FubuPackageRegistry_should_honor_the_url_prefix\r\n    {\r\n        [Test]\r\n        public void the_routes_from_FubuPackageRegistry_have_the_prefix()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            new SomePackageRegistry().As<IFubuRegistryExtension>().Configure(registry);\r\n\r\n            var graph = BehaviorGraph.BuildFrom(registry);\r\n\r\n            graph.ChainFor<SomeRandomClass>(x => x.get_some_data())\r\n                .As<RoutedChain>()\r\n                .GetRoutePattern().ShouldStartWith(\"mypak\");\r\n        }\r\n    }\r\n\r\n    public class SomePackageRegistry : FubuPackageRegistry\r\n    {\r\n        public SomePackageRegistry() : base(\"mypak\")\r\n        {\r\n            Actions.IncludeType<SomeRandomClass>();\r\n        }\r\n    }\r\n\r\n    public class SomeRandomClass\r\n    {\r\n        public string get_some_data()\r\n        {\r\n            return \"Hello\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Bugs/Issue101.cs",
    "content": "﻿using FubuCore;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Bugs\r\n{\r\n    [TestFixture]\r\n    public class Issue101\r\n    {\r\n        [Test]\r\n        public void should_throw_an_exception_if_the_result_is_not_unique()\r\n        {\r\n            var call1 = ActionCall.For<Issue101Endpoint>(x => x.get_hello());\r\n            var call2 = ActionCall.For<Issue101Endpoint>(x => x.get_hello());\r\n\r\n            var graph = new BehaviorGraph();\r\n            graph.AddChain().AddToEnd(call1);\r\n            graph.AddChain().AddToEnd(call2);\r\n\r\n            Exception<FubuException>.ShouldBeThrownBy(() => {\r\n                graph.ChainFor<Issue101Endpoint>(x => x.get_hello());\r\n            });\r\n        }\r\n    }\r\n\r\n    public class Issue101Endpoint\r\n    {\r\n        public string get_hello()\r\n        {\r\n            return \"Hello!\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Bugs/Issue504.cs",
    "content": "﻿using FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Bugs\r\n{\r\n    [TestFixture]\r\n    public class Issue504\r\n    {\r\n        [Test]\r\n        public void the_url_prefix_of_a_fubu_package_registry_should_be_respected()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.Import<FooPackageRegistry>();\r\n\r\n            var graph = BehaviorGraph.BuildFrom(registry);\r\n\r\n            graph.ChainFor<FooEndpointClass>(x => x.get_some_foo())\r\n                .As<RoutedChain>()\r\n                 .GetRoutePattern().ShouldBe(\"moar/some/foo\");\r\n        }\r\n    }\r\n\r\n    public class FooPackageRegistry : FubuPackageRegistry\r\n    {\r\n        public FooPackageRegistry() : base(\"moar\")\r\n        {\r\n            Actions.IncludeType<FooEndpointClass>();\r\n        }\r\n    }\r\n\r\n    public class FooEndpointClass\r\n    {\r\n        public string get_some_foo()\r\n        {\r\n            return \"what?\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Caching/RecordedOutputTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Xml;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Caching;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Headers;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\nusing Shouldly;\r\nusing FubuCore.Configuration;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Tests.Caching\r\n{\r\n    [TestFixture]\r\n    public class RecordedOutputTester\r\n    {\r\n        private IHttpResponse theHttpResponse;\r\n        private RecordedOutput theRecordedOutput;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theHttpResponse = MockRepository.GenerateMock<IHttpResponse>();\r\n            theRecordedOutput = new RecordedOutput(new FileSystem());\r\n        }\r\n\r\n        [Test]\r\n        public void get_headers()\r\n        {\r\n            theRecordedOutput.AppendHeader(\"a\", \"1\");\r\n            theRecordedOutput.AppendHeader(\"b\", \"2\");\r\n            theRecordedOutput.AppendHeader(\"c\", \"3\");\r\n\r\n            theRecordedOutput.Write(\"stuff\");\r\n            theRecordedOutput.Write(\"more stuff\");\r\n            theRecordedOutput.Write(\"other stuff\");\r\n\r\n            theRecordedOutput.Headers().ShouldHaveTheSameElementsAs(new Header(\"a\", \"1\"),new Header(\"b\", \"2\"),new Header(\"c\", \"3\"));\r\n        }\r\n\r\n        [Test]\r\n        public void the_replay_method_calls_all_the_recorded_outputs_in_order()\r\n        {            \r\n            var output1 = MockRepository.GenerateMock<IRecordedHttpOutput>();\r\n            var output2 = MockRepository.GenerateMock<IRecordedHttpOutput>();\r\n            var output3 = MockRepository.GenerateMock<IRecordedHttpOutput>();\r\n            var output4 = MockRepository.GenerateMock<IRecordedHttpOutput>();\r\n            var output5 = MockRepository.GenerateMock<IRecordedHttpOutput>();\r\n\r\n            addOutputs(output1, output2, output3, output4, output5);\r\n        \r\n            theRecordedOutput.Replay(theHttpResponse);\r\n\r\n            output1.AssertWasCalled(x => x.Replay(theHttpResponse));\r\n            output2.AssertWasCalled(x => x.Replay(theHttpResponse));\r\n            output3.AssertWasCalled(x => x.Replay(theHttpResponse));\r\n            output4.AssertWasCalled(x => x.Replay(theHttpResponse));\r\n            output5.AssertWasCalled(x => x.Replay(theHttpResponse));\r\n        }\r\n\r\n        [Test]\r\n        public void the_get_text_method_calls_relevant_outputs_in_order()\r\n        {\r\n            var output1 = MockRepository.GenerateMock<IRecordedHttpOutput>();\r\n            var output2 = MockRepository.GenerateMock<IRecordedHttpOutput, IRecordedTextOutput>();\r\n            var output3 = MockRepository.GenerateMock<IRecordedHttpOutput>();\r\n            var output4 = MockRepository.GenerateMock<IRecordedHttpOutput, IRecordedTextOutput>();\r\n\r\n            addOutputs(output1, output2, output3, output4);\r\n            theRecordedOutput.GetText();\r\n\r\n            output2.As<IRecordedTextOutput>().AssertWasCalled(x => x.WriteText(Arg<StringWriter>.Is.NotNull));\r\n            output4.As<IRecordedTextOutput>().AssertWasCalled(x => x.WriteText(Arg<StringWriter>.Is.NotNull));\r\n        }\r\n\r\n        [Test]\r\n        public void the_get_text_method_returns_empty_string_when_no_text()\r\n        {\r\n            var output = MockRepository.GenerateMock<IRecordedHttpOutput>();\r\n            \r\n            addOutputs(output);\r\n            \r\n            theRecordedOutput.GetText().ShouldBeEmpty();\r\n        }\r\n\r\n        [Test]\r\n        public void the_get_text_method_appends_text_output_in_order()\r\n        {            \r\n            addOutputs(new WriteTextOutput(\"hep\"), new WriteTextOutput(\"hey\"));\r\n            theRecordedOutput.GetText().ShouldBe(\"hephey\");\r\n        }\r\n\r\n        [Test]\r\n        public void write_stream()\r\n        {\r\n            var document = new XmlDocument();\r\n            document.WithRoot(\"root\");\r\n\r\n            theRecordedOutput.Write(\"text/xml\", stream =>\r\n            {\r\n                document.Save(stream);\r\n                return Task.CompletedTask;\r\n            });\r\n\r\n            theRecordedOutput.Outputs.First().ShouldBe(new SetContentType(\"text/xml\"));\r\n\r\n            var writeStream = theRecordedOutput.Outputs.Last().ShouldBeOfType<WriteStream>();\r\n\r\n            writeStream.ReadAll().ShouldBe(document.OuterXml);\r\n        }\r\n\r\n        [Test]\r\n        public void append_header_recording()\r\n        {\r\n            theRecordedOutput.AppendHeader(\"key\", \"value\");\r\n\r\n            theRecordedOutput.Outputs.ShouldHaveTheSameElementsAs(new Header(\"key\", \"value\"));\r\n        }\r\n\r\n        [Test]\r\n        public void write_textual_content_adds_the_correct_recordings()\r\n        {\r\n            theRecordedOutput.Write(\"text/json\", \"{}\");\r\n\r\n            theRecordedOutput.Outputs.ShouldHaveTheSameElementsAs(\r\n                new SetContentType(\"text/json\"),\r\n                new WriteTextOutput(\"{}\")\r\n                );\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void write_only_textual_content_adds_the_correct_recordings()\r\n        {\r\n            theRecordedOutput.Write(\"{}\");\r\n\r\n            theRecordedOutput.Outputs.ShouldHaveTheSameElementsAs(\r\n                new WriteTextOutput(\"{}\")\r\n                );\r\n        }\r\n\r\n        [Test]\r\n        public void SetContentType_replay_writes_the_content_type_to_the_HttpWriter()\r\n        {\r\n            var setContentType = new SetContentType(\"text/json\");\r\n            setContentType.Replay(theHttpResponse);\r\n\r\n            theHttpResponse.AssertWasCalled(x => x.WriteContentType(\"text/json\"));\r\n        }\r\n\r\n        [Test]\r\n        public void WriteTextOutput_replay_writes_the_text_to_the_HttpWriter()\r\n        {\r\n            var writeText = new WriteTextOutput(\"something\");\r\n            writeText.Replay(theHttpResponse);\r\n\r\n            theHttpResponse.AssertWasCalled(x => x.Write(\"something\"));\r\n        }\r\n\r\n        public void WriteTextOutput_writetext_writes_the_text_to_the_stringwriter()\r\n        {\r\n            var writer = new StringWriter();\r\n            var writeText = new WriteTextOutput(\"jambalay\");\r\n            writeText.WriteText(writer);\r\n            writer.ToString().ShouldBe(\"jambalay\");\r\n        }\r\n\r\n        [Test]\r\n        public void WriteStream_Replay_copies_to_a_stream()\r\n        {\r\n            var stream = new MemoryStream();\r\n            var writer = new StreamWriter(stream);\r\n            writer.WriteLine(\"Hello!\");\r\n            writer.Flush();\r\n\r\n            var writeStream = new WriteStream(stream);\r\n\r\n            var recordingWriter = new RecordingHttpResponse();\r\n\r\n            writeStream.Replay(recordingWriter).GetAwaiter().GetResult();\r\n\r\n            recordingWriter.AllText().Trim().ShouldBe(\"Hello!\");\r\n        }\r\n\r\n        [Test]\r\n        public void write_file()\r\n        {\r\n            new FileSystem().WriteStringToFile(\"text.txt\", \"some text\");\r\n\r\n            theRecordedOutput.WriteFile(\"text/plain\", \"text.txt\", \"This is cool\");\r\n\r\n            theRecordedOutput.Replay(theHttpResponse);\r\n\r\n            theHttpResponse.AssertWasCalled(x => x.WriteContentType(\"text/plain\"));\r\n            theHttpResponse.AssertWasCalled(x => x.AppendHeader(HttpResponseHeaders.ContentDisposition, \"attachment; filename=\\\"This is cool\\\"\"));\r\n            theHttpResponse.AssertWasCalled(x => x.AppendHeader(HttpResponseHeaders.ContentLength, \"9\"));\r\n\r\n            theHttpResponse.AssertWasCalled(x => x.WriteFile(\"text.txt\"));\r\n        }\r\n\r\n        private void addOutputs(params IRecordedHttpOutput[] outputs)\r\n        {\r\n            outputs.Each(theRecordedOutput.AddOutput);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ConfigurationActionSetTester.cs",
    "content": "﻿using System;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\nusing System.Linq;\r\nusing Rhino.Mocks;\r\nusing System.Collections.Generic;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class ConfigurationActionSetTester\r\n    {\r\n\r\n        [Test]\r\n        public void latches_duplicate_types_if_they_are_unique()\r\n        {\r\n            var policy1 = new UniquePolicy();\r\n            var policy2 = new UniquePolicy();\r\n\r\n            var actions = new ConfigurationActionSet();\r\n            actions.Fill(policy1);\r\n\r\n            // policy2 should be treated as a duplicate of policy1\r\n            actions.Fill(policy2);\r\n\r\n            actions.Actions.Single().ShouldBeTheSameAs(policy1);\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void will_not_double_register_actions_that_are_determined_to_be_equivalent()\r\n        {\r\n            var policy1 = new ConfiguredPolicy(\"foo\");\r\n            var policy2 = new ConfiguredPolicy(\"foo\");\r\n\r\n            policy1.ShouldBe(policy2);\r\n\r\n            var actions = new ConfigurationActionSet();\r\n            actions.Fill(policy1);\r\n\r\n            // policy2 should be treated as a duplicate of policy1\r\n            actions.Fill(policy2);\r\n\r\n            actions.Actions.Single().ShouldBeTheSameAs(policy1);\r\n        }\r\n\r\n        [Test]\r\n        public void can_register_actions_of_the_same_type_that_are_determined_to_not_be_equivalent()\r\n        {\r\n            var policy1 = new ConfiguredPolicy(\"foo\");\r\n            var policy2 = new ConfiguredPolicy(\"bar\");\r\n\r\n            policy1.ShouldNotBe(policy2);\r\n\r\n            var actions = new ConfigurationActionSet();\r\n            actions.Fill(policy1);\r\n\r\n            // policy2 should be treated as a duplicate of policy1\r\n            actions.Fill(policy2);\r\n\r\n            actions.Actions.ShouldHaveTheSameElementsAs(policy1, policy2);\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void type_is_unique_is_false_if_the_CanBeMultiplesAttribute_exists()\r\n        {\r\n            ConfigurationActionSet.TypeIsUnique(typeof(SimpleMultiplePolicy)).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void type_is_not_unique_if_there_are_any_constructors_with_parameters()\r\n        {\r\n            ConfigurationActionSet.TypeIsUnique(typeof(ConfiguredPolicy))\r\n                .ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void type_is_not_unique_if_there_are_any_settable_properties()\r\n        {\r\n            ConfigurationActionSet.TypeIsUnique(typeof(PropertiesPolicy))\r\n                .ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void type_is_unique_if_there_is_no_attribute_no_non_default_ctor_and_no_settable_properties()\r\n        {\r\n            ConfigurationActionSet.TypeIsUnique(typeof(UniquePolicy))\r\n                .ShouldBeTrue();\r\n        }\r\n    }\r\n\r\n    [CanBeMultiples]\r\n    public class SimpleMultiplePolicy : IConfigurationAction\r\n    {\r\n        public void Configure(BehaviorGraph graph)\r\n        {\r\n            throw new System.NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class UniquePolicy : IConfigurationAction\r\n    {\r\n        public void Configure(BehaviorGraph graph)\r\n        {\r\n            throw new System.NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class ConfiguredPolicy : IConfigurationAction\r\n    {\r\n        private readonly string _name;\r\n\r\n        public ConfiguredPolicy(string name)\r\n        {\r\n            _name = name;\r\n        }\r\n\r\n        protected bool Equals(ConfiguredPolicy other)\r\n        {\r\n            return string.Equals(_name, other._name);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != this.GetType()) return false;\r\n            return Equals((ConfiguredPolicy) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return (_name != null ? _name.GetHashCode() : 0);\r\n        }\r\n\r\n        public void Configure(BehaviorGraph graph)\r\n        {\r\n            throw new System.NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class PropertiesPolicy : IConfigurationAction\r\n    {\r\n        public void Configure(BehaviorGraph graph)\r\n        {\r\n            throw new System.NotImplementedException();\r\n        }\r\n\r\n        public string Name { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ContainerExtensions.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing Shouldly;\nusing StructureMap;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Tests\n{\n    public static class ContainerExtensions\n    {\n        public static IContainer DefaultRegistrationIs<T, TConcrete>(this IContainer container) where TConcrete : T\n        {\n            container.Model.DefaultTypeFor<T>().ShouldBe(typeof (TConcrete));\n            return container;\n        }\n\n        public static IContainer DefaultRegistrationIs(this IContainer container, Type pluginType, Type concreteType)\n        {\n            container.Model.DefaultTypeFor(pluginType).ShouldBe(concreteType);\n\n            return container;\n        }\n\n        public static IContainer DefaultRegistrationIs<T>(this IContainer container, T value) where T : class\n        {\n            container.Model.For<T>().Default.Get<T>().ShouldBeTheSameAs(value);\n\n            return container;\n        }\n\n        public static IContainer DefaultSingletonIs(this IContainer container, Type pluginType, Type concreteType)\n        {\n            container.DefaultRegistrationIs(pluginType, concreteType);\n            container.Model.For(pluginType).Default.Lifecycle.ShouldBeOfType<SingletonLifecycle>();\n\n            return container;\n        }\n\n        public static IContainer DefaultSingletonIs<T, TConcrete>(this IContainer container) where TConcrete : T\n        {\n            container.DefaultRegistrationIs<T, TConcrete>();\n            container.Model.For<T>().Default.Lifecycle.ShouldBeOfType<SingletonLifecycle>();\n\n            return container;\n        }\n\n        public static IContainer ShouldHaveRegistration<T, TConcrete>(this IContainer container)\n        {\n            var plugin = container.Model.For<T>();\n            plugin.Instances.Any(x => x.ReturnedType == typeof (TConcrete)).ShouldBeTrue();\n\n            return container;\n        }\n\n        public static IContainer ShouldNotHaveRegistration<T, TConcrete>(this IContainer container)\n        {\n            var plugin = container.Model.For<T>();\n            plugin.Instances.Any(x => x.ReturnedType == typeof(TConcrete)).ShouldBeFalse();\n\n            return container;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Continuations/ContinuationHandlerTester.cs",
    "content": "using System;\r\nusing System.Net;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Continuations;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Querying;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Urls;\r\nusing FubuMVC.Tests.Registration;\r\nusing FubuMVC.Tests.TestSupport;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Continuations\r\n{\r\n    [TestFixture]\r\n    public class ContinuationHandlerTester : InteractionContext<ContinuationHandler>\r\n    {\r\n        private StubUrlRegistry urls;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            urls = new StubUrlRegistry();\r\n            Services.Inject<IUrlRegistry>(urls);\r\n            ClassUnderTest.InsideBehavior = MockFor<IActionBehavior>();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void redirect_with_string_assumes_that_it_is_a_url()\r\n        {\r\n            ClassUnderTest.RedirectTo(\"some url\");\r\n\r\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.RedirectToUrl(\"some url\"));\r\n        }\r\n\r\n        [Test]\r\n        public void redirect_with_object_and_category()\r\n        {\r\n            var urlTarget = new UrlTarget();\r\n            ClassUnderTest.RedirectTo(urlTarget, \"POST\");\r\n\r\n            var expectedUrl = urls.UrlFor(urlTarget, \"POST\");\r\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.RedirectToUrl(expectedUrl));\r\n        }\r\n\r\n        [Test]\r\n        public void redirect_to_call_with_category()\r\n        {\r\n            var actionCall = ActionCall.For<FakeEndpoint>(x => x.SayHello());\r\n            ClassUnderTest.RedirectToCall(actionCall, \"POST\");\r\n            var expectedUrl = urls.UrlFor(typeof (FakeEndpoint), actionCall.Method, \"POST\");\r\n\r\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.RedirectToUrl(expectedUrl));\r\n        }\r\n\r\n        [Test]\r\n        public void transfer_to_with_category_and_input_model()\r\n        {\r\n            var foo = new Foo();\r\n            var theChain = new BehaviorChain();\r\n            MockFor<IChainResolver>().Stub(x => x.FindUnique(foo, \"POST\"))\r\n                .Return(theChain);\r\n\r\n            var theBehaviorBeingTransferedTo = MockRepository.GenerateMock<IActionBehavior>();\r\n\r\n            MockFor<IPartialFactory>().Stub(x => x.BuildBehavior(theChain)).Return(theBehaviorBeingTransferedTo);\r\n\r\n\r\n            ClassUnderTest.TransferTo(foo, \"POST\");\r\n\r\n            theBehaviorBeingTransferedTo.AssertWasCalled(x => x.InvokePartial());\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void transfer_to_with_category_and_action_call()\r\n        {\r\n            var actionCall = ActionCall.For<FakeEndpoint>(x => x.SayHello());\r\n\r\n            var theChain = new BehaviorChain();\r\n            MockFor<IChainResolver>().Stub(x => x.Find(actionCall.HandlerType, actionCall.Method, \"GET\"))\r\n                .Return(theChain);\r\n\r\n            var theBehaviorBeingTransferedTo = MockRepository.GenerateMock<IActionBehavior>();\r\n\r\n            MockFor<IPartialFactory>().Stub(x => x.BuildBehavior(theChain)).Return(theBehaviorBeingTransferedTo);\r\n\r\n            ClassUnderTest.TransferToCall(actionCall, \"GET\");\r\n\r\n            theBehaviorBeingTransferedTo.AssertWasCalled(x => x.InvokePartial());\r\n        }\r\n\r\n        public class FakeEndpoint\r\n        {\r\n            public string SayHello()\r\n            {\r\n                return \"Hello\";\r\n            }\r\n        }\r\n\r\n        public class UrlTarget\r\n        {\r\n            \r\n        }\r\n    }\r\n\r\n    public abstract class ContinuationHandlerContext : InteractionContext<ContinuationHandler>\r\n    {\r\n        protected IActionBehavior theInsideBehavior;\r\n\r\n        protected void ProcessContinuation(FubuContinuation continuation)\r\n        {\r\n            continuation.Process(ClassUnderTest);\r\n        }\r\n\r\n        protected override sealed void beforeEach()\r\n        {\r\n            theInsideBehavior = MockRepository.GenerateMock<IActionBehavior>();\r\n            ClassUnderTest.InsideBehavior = theInsideBehavior;\r\n\r\n            theContextIs();\r\n        }\r\n\r\n        protected abstract void theContextIs();\r\n    }\r\n\r\n    [TestFixture]\r\n    public class finding_the_fubu_continuation : InteractionContext<ContinuationHandler>\r\n    {\r\n        private InMemoryFubuRequest theRequest;\r\n        private FubuContinuation theContinuation;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            theRequest = new InMemoryFubuRequest();\r\n\r\n            theContinuation = FubuContinuation.EndWithStatusCode(HttpStatusCode.NotModified);\r\n            theRequest.Set(theContinuation);\r\n\r\n            Services.Inject<IFubuRequest>(theRequest);\r\n        }\r\n\r\n        [Test]\r\n        public void find_the_continuation_if_there_is_a_redirectable()\r\n        {\r\n            var redirectable = new StubRedirectable(){RedirectTo = FubuContinuation.NextBehavior()};\r\n            theRequest.Set(redirectable);\r\n\r\n            ClassUnderTest.FindContinuation().ShouldBeTheSameAs(redirectable.RedirectTo);\r\n        }\r\n\r\n        [Test]\r\n        public void if_the_redirectable_does_not_have_a_continuation_assume_NextBehavior()\r\n        {\r\n            theRequest.Set(new StubRedirectable{RedirectTo = null});\r\n\r\n            ClassUnderTest.FindContinuation().AssertWasContinuedToNextBehavior();\r\n        }\r\n\r\n        [Test]\r\n        public void find_the_continuation_without_the_presence_of_an_IRedirectable()\r\n        {\r\n            ClassUnderTest.FindContinuation().ShouldBeTheSameAs(theContinuation);\r\n        }\r\n\r\n        public class StubRedirectable : IRedirectable\r\n        {\r\n            public FubuContinuation RedirectTo\r\n            {\r\n                get; set;\r\n            }\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_ending_with_a_status_code : ContinuationHandlerContext\r\n    {\r\n        protected override void theContextIs()\r\n        {\r\n            ClassUnderTest.EndWithStatusCode(HttpStatusCode.NotModified);\r\n        }\r\n\r\n        [Test]\r\n        public void the_inside_behavior_should_not_be_invoked()\r\n        {\r\n            theInsideBehavior.AssertWasNotCalled(x => x.Invoke());\r\n        }\r\n\r\n        [Test]\r\n        public void the_status_code_should_be_written_to_the_output_writer()\r\n        {\r\n            MockFor<IOutputWriter>().WriteResponseCode(HttpStatusCode.NotModified);\r\n        }\r\n    }\r\n\r\n\r\n\r\n\r\n    [TestFixture]\r\n    public class when_the_continuation_redirects_to_a_destination_object : ContinuationHandlerContext\r\n    {\r\n        private InputModel input;\r\n        private string theUrl;\r\n\r\n        protected override void theContextIs()\r\n        {\r\n            input = new InputModel();\r\n            theUrl = \"some/path/1\";\r\n\r\n            MockFor<IUrlRegistry>().Expect(x => x.UrlFor(input, \"GET\")).Return(theUrl);\r\n\r\n            ProcessContinuation(FubuContinuation.RedirectTo(input));\r\n        }\r\n\r\n        [Test]\r\n        public void redirect_to_the_url_from_url_registry()\r\n        {\r\n            VerifyCallsFor<IUrlRegistry>();\r\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.RedirectToUrl(theUrl));\r\n        }\r\n\r\n        [Test]\r\n        public void should_not_invoke_the_inner_behavior()\r\n        {\r\n            theInsideBehavior.AssertWasNotCalled(x => x.Invoke());\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_the_continuation_redirects_to_a_string : ContinuationHandlerContext\r\n    {\r\n        private string theUrl;\r\n\r\n        protected override void theContextIs()\r\n        {\r\n            theUrl = \"some/path/1\";\r\n\r\n            ProcessContinuation(FubuContinuation.RedirectTo(theUrl));\r\n        }\r\n\r\n        [Test]\r\n        public void invokes_output_writer_with_the_new_url()\r\n        {\r\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.RedirectToUrl(theUrl));\r\n        }\r\n\r\n        [Test]\r\n        public void should_not_invoke_the_inner_behavior()\r\n        {\r\n            theInsideBehavior.AssertWasNotCalled(x => x.Invoke());\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_the_continuation_redirects_to_an_action_call : ContinuationHandlerContext\r\n    {\r\n        private string theUrl;\r\n        private ActionCall call;\r\n\r\n        protected override void theContextIs()\r\n        {\r\n            theUrl = \"some/path/1\";\r\n            call = ActionCall.For<ControllerTarget>(x => x.ZeroInOneOut());\r\n\r\n            MockFor<IUrlRegistry>().Expect(x => x.UrlFor(call.HandlerType, call.Method, \"GET\")).Return(theUrl);\r\n\r\n            ProcessContinuation(FubuContinuation.RedirectTo<ControllerTarget>(x => x.ZeroInOneOut()));\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void should_not_invoke_the_inner_behavior()\r\n        {\r\n            theInsideBehavior.AssertWasNotCalled(x => x.Invoke());\r\n        }\r\n\r\n        [Test]\r\n        public void should_redirect_to_the_url_for_the_specified_continuation()\r\n        {\r\n            VerifyCallsFor<IUrlRegistry>();\r\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.RedirectToUrl(theUrl));\r\n        }\r\n    }\r\n\r\n\r\n    [TestFixture]\r\n    public class when_transferring_to_a_destination_object : ContinuationHandlerContext\r\n    {\r\n        private IActionBehavior partial;\r\n        private InputModel input;\r\n        private BehaviorChain theChain;\r\n\r\n        protected override void theContextIs()\r\n        {\r\n            partial = MockRepository.GenerateMock<IActionBehavior>();\r\n\r\n\r\n\r\n            input = new InputModel();\r\n            theChain = new BehaviorChain();\r\n            MockFor<IChainResolver>().Stub(x => x.FindUnique(input)).Return(theChain);\r\n\r\n            MockFor<IPartialFactory>().Expect(x => x.BuildBehavior(theChain)).Return(partial);\r\n\r\n            ProcessContinuation(FubuContinuation.TransferTo(input));\r\n        }\r\n\r\n        [Test]\r\n        public void find_the_partial_behavior_by_the_destination_object()\r\n        {\r\n            VerifyCallsFor<IPartialFactory>();\r\n        }\r\n\r\n        [Test]\r\n        public void should_invoke_the_partial_behavior()\r\n        {\r\n            partial.AssertWasCalled(x => x.InvokePartial());\r\n        }\r\n\r\n        [Test]\r\n        public void should_not_invoke_the_inner_behavior()\r\n        {\r\n            theInsideBehavior.AssertWasNotCalled(x => x.Invoke());\r\n        }\r\n\r\n        [Test]\r\n        public void should_register_the_destination_object_into_the_fubu_request()\r\n        {\r\n            MockFor<IFubuRequest>().AssertWasCalled(x => x.SetObject(input));\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_transferring_to_an_action_call : ContinuationHandlerContext\r\n    {\r\n        private ActionCall call;\r\n        private IActionBehavior partial;\r\n        private BehaviorChain theChain;\r\n\r\n        protected override void theContextIs()\r\n        {\r\n            call = ActionCall.For<ControllerTarget>(x => x.ZeroInOneOut());\r\n            partial = MockRepository.GenerateMock<IActionBehavior>();\r\n\r\n            theChain = new BehaviorChain();\r\n            MockFor<IChainResolver>().Stub(x => x.Find(call.HandlerType, call.Method)).Return(theChain);\r\n\r\n            MockFor<IPartialFactory>().Expect(x => x.BuildBehavior(theChain)).Return(partial);\r\n\r\n            ProcessContinuation(FubuContinuation.TransferTo<ControllerTarget>(x => x.ZeroInOneOut()));\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void find_the_partial_behavior_by_the_destination_object()\r\n        {\r\n            VerifyCallsFor<IPartialFactory>();\r\n        }\r\n\r\n        [Test]\r\n        public void should_invoke_the_partial_behavior()\r\n        {\r\n            partial.AssertWasCalled(x => x.InvokePartial());\r\n        }\r\n\r\n        [Test]\r\n        public void should_not_invoke_the_inner_behavior()\r\n        {\r\n            theInsideBehavior.AssertWasNotCalled(x => x.Invoke());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Continuations/FubuContinuationTester.cs",
    "content": "using System;\r\nusing System.Net;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Continuations;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Querying;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Urls;\r\nusing FubuMVC.Tests.Registration;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Continuations\r\n{\r\n    [TestFixture]\r\n    public class FubuContinuationTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            director = MockRepository.GenerateMock<IContinuationDirector>();\r\n        }\r\n\r\n        #endregion\r\n\r\n        private IContinuationDirector director;\r\n\r\n        private void shouldFail(Action action)\r\n        {\r\n            Exception<FubuAssertionException>.ShouldBeThrownBy(action);\r\n        }\r\n\r\n        [Test]\r\n        public void Continue_just_continues()\r\n        {\r\n            FubuContinuation continuation = FubuContinuation.NextBehavior();\r\n            continuation.Type.ShouldBe(ContinuationType.NextBehavior);\r\n\r\n            continuation.Process(director);\r\n            director.AssertWasCalled(x => x.InvokeNextBehavior());\r\n        }\r\n\r\n        [Test]\r\n        public void end_with_status_code_calls_to_same_on_continuation_director()\r\n        {\r\n            var continuation = FubuContinuation.EndWithStatusCode(HttpStatusCode.NotModified);\r\n\r\n            continuation.Type.ShouldBe(ContinuationType.Stop);\r\n            continuation.Process(director);\r\n\r\n            director.AssertWasCalled(x => x.EndWithStatusCode(HttpStatusCode.NotModified));\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void assert_continued()\r\n        {\r\n            FubuContinuation continuation = FubuContinuation.NextBehavior();\r\n            continuation.AssertWasContinuedToNextBehavior();\r\n\r\n            shouldFail(() => continuation.AssertWasRedirectedTo(\"here\"));\r\n            shouldFail(() => continuation.AssertWasTransferedTo(\"here\"));\r\n            shouldFail(() => continuation.AssertWasTransferedTo<ControllerTarget>(x => x.OneInOneOut(null)));\r\n            shouldFail(() => continuation.AssertWasRedirectedTo<ControllerTarget>(x => x.OneInOneOut(null)));\r\n        }\r\n\r\n        [Test]\r\n        public void assert_redirect_to_a_method()\r\n        {\r\n            FubuContinuation continuation = FubuContinuation.RedirectTo<ControllerTarget>(x => x.OneInOneOut(null));\r\n            continuation.Type.ShouldBe(ContinuationType.Redirect);\r\n\r\n            continuation.AssertWasRedirectedTo<ControllerTarget>(x => x.OneInOneOut(null));\r\n\r\n            shouldFail(() => continuation.AssertWasRedirectedTo(\"here\"));\r\n            shouldFail(() => continuation.AssertWasTransferedTo(\"here\"));\r\n            shouldFail(() => continuation.AssertWasTransferedTo<ControllerTarget>(x => x.OneInZeroOut(null)));\r\n            shouldFail(() => continuation.AssertWasRedirectedTo<ControllerTarget>(x => x.OneInZeroOut(null)));\r\n            shouldFail(() => continuation.AssertWasContinuedToNextBehavior());\r\n        }\r\n\r\n        [Test]\r\n        public void assert_redirect_to_a_method_with_category()\r\n        {\r\n            FubuContinuation continuation = FubuContinuation.RedirectTo<ControllerTarget>(x => x.OneInOneOut(null));\r\n            continuation.Type.ShouldBe(ContinuationType.Redirect);\r\n\r\n            continuation.AssertWasRedirectedTo<ControllerTarget>(x => x.OneInOneOut(null));\r\n\r\n            shouldFail(() => continuation.AssertWasRedirectedTo(\"here\"));\r\n            shouldFail(() => continuation.AssertWasTransferedTo(\"here\"));\r\n            shouldFail(() => continuation.AssertWasTransferedTo<ControllerTarget>(x => x.OneInZeroOut(null)));\r\n            shouldFail(() => continuation.AssertWasRedirectedTo<ControllerTarget>(x => x.OneInZeroOut(null)));\r\n            shouldFail(() => continuation.AssertWasContinuedToNextBehavior());\r\n        }\r\n\r\n        [Test]\r\n        public void assert_redirect_to_a_target_via_equals()\r\n        {\r\n            var input = new InputModelWithEquals {Name = \"Luke\"};\r\n            FubuContinuation continuation = FubuContinuation.RedirectTo(input);\r\n\r\n            continuation.AssertWasRedirectedTo(new InputModelWithEquals {Name = \"Luke\"});\r\n\r\n            shouldFail(() => continuation.AssertWasRedirectedTo(new InputModelWithEquals()));\r\n            shouldFail(() => continuation.AssertWasTransferedTo(input));\r\n            shouldFail(() => continuation.AssertWasContinuedToNextBehavior());\r\n\r\n            shouldFail(() => continuation.AssertWasTransferedTo<ControllerTarget>(x => x.OneInOneOut(null)));\r\n            shouldFail(() => continuation.AssertWasRedirectedTo<ControllerTarget>(x => x.OneInOneOut(null)));\r\n        }\r\n\r\n        [Test]\r\n        public void assert_redirect_to_a_target_via_predicate()\r\n        {\r\n            var input = new InputModel { Name = \"Luke\", Age = 1 };\r\n            FubuContinuation continuation = FubuContinuation.RedirectTo(input);\r\n\r\n            continuation.AssertWasRedirectedTo<InputModel>(x => x.Name == input.Name);\r\n\r\n            shouldFail(() => continuation.AssertWasRedirectedTo(new InputModelWithEquals()));\r\n            shouldFail(() => continuation.AssertWasTransferedTo(input));\r\n            shouldFail(() => continuation.AssertWasContinuedToNextBehavior());\r\n\r\n            shouldFail(() => continuation.AssertWasTransferedTo<ControllerTarget>(x => x.OneInOneOut(null)));\r\n            shouldFail(() => continuation.AssertWasRedirectedTo<ControllerTarget>(x => x.OneInOneOut(null)));\r\n        }\r\n\r\n        [Test]\r\n        public void when_destination_null_redirect_to_throws()\r\n        {\r\n            var argNullEx = Exception< ArgumentNullException>.ShouldBeThrownBy(() => FubuContinuation.RedirectTo(null));\r\n            argNullEx.Message.ShouldContain(\"destination\");\r\n        }\r\n\r\n        [Test]\r\n        public void when_destination_null_transfer_to_throws()\r\n        {\r\n            var argNullEx = Exception<ArgumentNullException>.ShouldBeThrownBy(() => FubuContinuation.TransferTo(null));\r\n            argNullEx.Message.ShouldContain(\"destination\");\r\n        }\r\n\r\n        [Test]\r\n        public void assert_transfer_to_a_method()\r\n        {\r\n            FubuContinuation continuation = FubuContinuation.TransferTo<ControllerTarget>(x => x.OneInOneOut(null));\r\n\r\n            continuation.AssertWasTransferedTo<ControllerTarget>(x => x.OneInOneOut(null));\r\n\r\n            shouldFail(() => continuation.AssertWasRedirectedTo(\"here\"));\r\n            shouldFail(() => continuation.AssertWasTransferedTo(\"here\"));\r\n            shouldFail(() => continuation.AssertWasTransferedTo<ControllerTarget>(x => x.OneInZeroOut(null)));\r\n            shouldFail(() => continuation.AssertWasRedirectedTo<ControllerTarget>(x => x.OneInZeroOut(null)));\r\n            shouldFail(() => continuation.AssertWasContinuedToNextBehavior());\r\n        }\r\n\r\n        [Test]\r\n        public void assert_transfered_to_by_method_respects_category()\r\n        {\r\n            var continuation = FubuContinuation.TransferTo<ControllerTarget>(x => x.OneInOneOut(null), \"PUT\");\r\n\r\n            continuation.AssertWasTransferedTo<ControllerTarget>(x => x.OneInOneOut(null), \"PUT\");\r\n\r\n            shouldFail(() => continuation.AssertWasTransferedTo<ControllerTarget>(x => x.OneInOneOut(null), \"GET\"));\r\n            shouldFail(() => continuation.AssertWasTransferedTo<ControllerTarget>(x => x.OneInOneOut(null)));\r\n        }\r\n\r\n        [Test]\r\n        public void assert_transfer_by_destination_respects_category()\r\n        {\r\n            var input = new InputModel { Name = \"Luke\", Age = 1 };\r\n            var continuation = FubuContinuation.TransferTo(input, \"PUT\");\r\n\r\n            continuation.AssertWasTransferedTo(input, \"PUT\");\r\n\r\n            shouldFail(() => continuation.AssertWasTransferedTo(input));\r\n            shouldFail(() => continuation.AssertWasTransferedTo(input, \"GET\"));\r\n            \r\n        }\r\n\r\n        [Test]\r\n        public void assert_was_redirected_to_destination_respects_category()\r\n        {\r\n            var input = new InputModel { Name = \"Luke\", Age = 1 };\r\n            var continuation = FubuContinuation.RedirectTo(input, \"PUT\");\r\n\r\n            continuation.AssertWasRedirectedTo(input, \"PUT\");\r\n\r\n            shouldFail(() => continuation.AssertWasRedirectedTo(input));\r\n            shouldFail(() => continuation.AssertWasRedirectedTo(input, \"GET\"));\r\n        }\r\n\r\n        [Test]\r\n        public void assert_redirected_to_by_method_respects_category()\r\n        {\r\n            var continuation = FubuContinuation.RedirectTo<ControllerTarget>(x => x.OneInOneOut(null), \"PUT\");\r\n\r\n            continuation.AssertWasRedirectedTo<ControllerTarget>(x => x.OneInOneOut(null), \"PUT\");\r\n\r\n            shouldFail(() => continuation.AssertWasRedirectedTo<ControllerTarget>(x => x.OneInOneOut(null), \"GET\"));\r\n            shouldFail(() => continuation.AssertWasRedirectedTo<ControllerTarget>(x => x.OneInOneOut(null)));\r\n        }\r\n\r\n        [Test]\r\n        public void assert_transfer_to_a_target_via_equals()\r\n        {\r\n            var input = new InputModelWithEquals {Name = \"Luke\"};\r\n            FubuContinuation continuation = FubuContinuation.TransferTo(input);\r\n\r\n            continuation.AssertWasTransferedTo(new InputModelWithEquals {Name = \"Luke\"});\r\n\r\n            shouldFail(() => continuation.AssertWasTransferedTo(new InputModelWithEquals()));\r\n            shouldFail(() => continuation.AssertWasRedirectedTo(input));\r\n            shouldFail(() => continuation.AssertWasContinuedToNextBehavior());\r\n\r\n            shouldFail(() => continuation.AssertWasTransferedTo<ControllerTarget>(x => x.OneInOneOut(null)));\r\n            shouldFail(() => continuation.AssertWasRedirectedTo<ControllerTarget>(x => x.OneInOneOut(null)));\r\n        }\r\n\r\n        [Test]\r\n        public void assert_transfer_to_a_target_via_predicate()\r\n        {\r\n            var input = new InputModel {Name = \"Luke\", Age = 1};\r\n            FubuContinuation continuation = FubuContinuation.TransferTo(input);\r\n\r\n            continuation.AssertWasTransferedTo<InputModel>(x => x.Name == input.Name);\r\n\r\n            shouldFail(() => continuation.AssertWasTransferedTo(new InputModelWithEquals()));\r\n            shouldFail(() => continuation.AssertWasRedirectedTo(input));\r\n            shouldFail(() => continuation.AssertWasContinuedToNextBehavior());\r\n\r\n            shouldFail(() => continuation.AssertWasTransferedTo<ControllerTarget>(x => x.OneInOneOut(null)));\r\n            shouldFail(() => continuation.AssertWasRedirectedTo<ControllerTarget>(x => x.OneInOneOut(null)));\r\n        }\r\n\r\n        [Test]\r\n        public void redirect_to_a_method()\r\n        {\r\n            FubuContinuation continuation = FubuContinuation.RedirectTo<ControllerTarget>(x => x.OneInOneOut(null));\r\n\r\n            continuation.Type.ShouldBe(ContinuationType.Redirect);\r\n\r\n            continuation.Process(director);\r\n\r\n            ActionCall call = ActionCall.For<ControllerTarget>(x => x.OneInOneOut(null));\r\n\r\n            director.AssertWasCalled(x => x.RedirectToCall(call));\r\n        }\r\n\r\n        [Test]\r\n        public void redirect_to_a_method_with_category()\r\n        {\r\n            FubuContinuation continuation = FubuContinuation.RedirectTo<ControllerTarget>(x => x.OneInOneOut(null), \"PUT\");\r\n\r\n            continuation.Type.ShouldBe(ContinuationType.Redirect);\r\n\r\n            continuation.Process(director);\r\n\r\n            ActionCall call = ActionCall.For<ControllerTarget>(x => x.OneInOneOut(null));\r\n\r\n            director.AssertWasCalled(x => x.RedirectToCall(call, \"PUT\"));\r\n        }\r\n\r\n        [Test]\r\n        public void redirect_to_a_target()\r\n        {\r\n            var input = new InputModel();\r\n            FubuContinuation continuation = FubuContinuation.RedirectTo(input);\r\n\r\n            continuation.Type.ShouldBe(ContinuationType.Redirect);\r\n\r\n            continuation.Process(director);\r\n\r\n            director.AssertWasCalled(x => x.RedirectTo(input));\r\n        }\r\n\r\n        [Test]\r\n        public void redirect_to_a_target_with_category()\r\n        {\r\n            var input = new InputModel();\r\n            FubuContinuation continuation = FubuContinuation.RedirectTo(input, \"PUT\");\r\n\r\n            continuation.Type.ShouldBe(ContinuationType.Redirect);\r\n\r\n            continuation.Process(director);\r\n\r\n            director.AssertWasCalled(x => x.RedirectTo(input, \"PUT\"));\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void transfer_to_a_method()\r\n        {\r\n            FubuContinuation continuation = FubuContinuation.TransferTo<ControllerTarget>(x => x.OneInOneOut(null));\r\n\r\n            continuation.Type.ShouldBe(ContinuationType.Transfer);\r\n\r\n            continuation.Process(director);\r\n\r\n            ActionCall call = ActionCall.For<ControllerTarget>(x => x.OneInOneOut(null));\r\n\r\n            director.AssertWasCalled(x => x.TransferToCall(call));\r\n        }\r\n\r\n        [Test]\r\n        public void transfer_to_a_method_with_a_category()\r\n        {\r\n            FubuContinuation continuation = FubuContinuation.TransferTo<ControllerTarget>(x => x.OneInOneOut(null), \"PUT\");\r\n\r\n            continuation.Type.ShouldBe(ContinuationType.Transfer);\r\n\r\n            continuation.Process(director);\r\n\r\n            ActionCall call = ActionCall.For<ControllerTarget>(x => x.OneInOneOut(null));\r\n\r\n            director.AssertWasCalled(x => x.TransferToCall(call, \"PUT\"));\r\n        }\r\n\r\n        [Test]\r\n        public void transfer_to_a_target()\r\n        {\r\n            var input = new InputModel();\r\n            FubuContinuation continuation = FubuContinuation.TransferTo(input);\r\n\r\n            continuation.Type.ShouldBe(ContinuationType.Transfer);\r\n\r\n            continuation.Process(director);\r\n\r\n            director.AssertWasCalled(x => x.TransferTo(input));\r\n        }\r\n\r\n        [Test]\r\n        public void transfer_to_a_target_with_a_method()\r\n        {\r\n            var input = new InputModel();\r\n            FubuContinuation continuation = FubuContinuation.TransferTo(input, \"PUT\");\r\n\r\n            continuation.Type.ShouldBe(ContinuationType.Transfer);\r\n\r\n            continuation.Process(director);\r\n\r\n            director.AssertWasCalled(x => x.TransferTo(input, \"PUT\"));\r\n        }\r\n\r\n        [Test]\r\n        public void transfer_to_a_method_with_a_category_2()\r\n        {\r\n            FubuContinuation continuation = FubuContinuation.TransferTo<ControllerTarget>(x => x.OneInOneOut(null), \"PUT\");\r\n\r\n            continuation.Type.ShouldBe(ContinuationType.Transfer);\r\n\r\n            continuation.Process(director);\r\n\r\n            ActionCall call = ActionCall.For<ControllerTarget>(x => x.OneInOneOut(null));\r\n\r\n            director.AssertWasCalled(x => x.TransferToCall(call, \"PUT\"));\r\n        }\r\n\r\n        [Test]\r\n        public void transfer_to_null_throws()\r\n        {\r\n            var urlRegistry = MockRepository.GenerateStub<IUrlRegistry>();\r\n            var outputWriter = MockRepository.GenerateStub<IOutputWriter>();\r\n            var fubuRequest = MockRepository.GenerateStub<IFubuRequest>();\r\n            var partialFactory = MockRepository.GenerateStub<IPartialFactory>();\r\n            var resolver = MockRepository.GenerateStub<IChainResolver>();\r\n\r\n            var handler = new ContinuationHandler(urlRegistry, outputWriter, fubuRequest, partialFactory, resolver);\r\n\r\n            var exception =\r\n                Exception<ArgumentNullException>.ShouldBeThrownBy(() => handler.TransferTo(null)) as ArgumentNullException;\r\n            exception.ShouldNotBeNull();\r\n            exception.ParamName.ShouldBe(\"input\");\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void destination_returns_destination_object()\r\n        {\r\n            var destination = new object();\r\n            var continuation = FubuContinuation.TransferTo(destination);\r\n            continuation.Destination<object>().ShouldBe(destination);\r\n        }\r\n\r\n        [Test]\r\n        public void redirect_via_generic()\r\n        {\r\n            var continuation = FubuContinuation.RedirectTo<TestModel>();\r\n            continuation.AssertWasRedirectedTo<TestModel>(x => x.GetType() == typeof (TestModel));\r\n        }\r\n\r\n        [Test]\r\n        public void redirect_via_generic_with_a_method()\r\n        {\r\n            var continuation = FubuContinuation.RedirectTo<TestModel>(\"PUT\");\r\n            continuation.AssertWasRedirectedTo<TestModel>(x => x.GetType() == typeof(TestModel), \"PUT\");\r\n        }\r\n\r\n        [Test]\r\n        public void transfer_via_generic()\r\n        {\r\n            var continuation = FubuContinuation.TransferTo<TestModel>();\r\n            continuation.AssertWasTransferedTo<TestModel>(x => x.GetType() == typeof(TestModel));\r\n        }\r\n\r\n        [Test]\r\n        public void transfer_via_generic_with_a_method()\r\n        {\r\n            var continuation = FubuContinuation.TransferTo<TestModel>(\"PUT\");\r\n            continuation.AssertWasTransferedTo<TestModel>(x => x.GetType() == typeof(TestModel), \"PUT\");\r\n        }\r\n\r\n        [Test]\r\n        public void assert_exited_with_status_code()\r\n        {\r\n            var continuation = FubuContinuation.EndWithStatusCode(HttpStatusCode.NotModified);\r\n\r\n            continuation.AssertWasEndedWithStatusCode(HttpStatusCode.NotModified);\r\n\r\n\r\n            shouldFail(() => continuation.AssertWasEndedWithStatusCode(HttpStatusCode.UseProxy));\r\n        }\r\n\r\n        [Test]\r\n        public void assert_exited_with_status_code_negative()\r\n        {\r\n            var continuation = FubuContinuation.RedirectTo<TestModel>();\r\n\r\n            shouldFail(() => continuation.AssertWasEndedWithStatusCode(HttpStatusCode.NotModified));\r\n\r\n            \r\n        }\r\n\r\n        public class TestModel\r\n        {\r\n            \r\n        }\r\n    }\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Continuations/RedirectToMethodsTester.cs",
    "content": "using System.Net;\r\nusing FubuMVC.Core.Continuations;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Continuations\r\n{\r\n    [TestFixture]\r\n    public class RedirectToMethodsTester\r\n    {\r\n        [Test]\r\n        public void Stop()\r\n        {\r\n            Stop<StubRedirectable>.With(HttpStatusCode.NotModified)\r\n                .RedirectTo.AssertWasEndedWithStatusCode(HttpStatusCode.NotModified);\r\n        }\r\n\r\n        [Test]\r\n        public void Transfer_to_destination()\r\n        {\r\n            var destination = new Input1();\r\n\r\n            Transfer<StubRedirectable>.To(destination)\r\n                .RedirectTo.AssertWasTransferedTo(destination);\r\n        }\r\n\r\n        [Test]\r\n        public void Transfer_to_action()\r\n        {\r\n            Transfer<StubRedirectable>.To<ActionTarget>(x => x.Go(null))\r\n                .RedirectTo.AssertWasTransferedTo<ActionTarget>(x => x.Go(null));\r\n        }\r\n\r\n        [Test]\r\n        public void Redirect_to_destination()\r\n        {\r\n            var destination = new Input1();\r\n\r\n            Redirect<StubRedirectable>.To(destination)\r\n                .RedirectTo.AssertWasRedirectedTo(destination);\r\n        }\r\n\r\n        [Test]\r\n        public void Redirect_to_action()\r\n        {\r\n            Redirect<StubRedirectable>.To<ActionTarget>(x => x.Go(null))\r\n                .RedirectTo.AssertWasRedirectedTo<ActionTarget>(x => x.Go(null));\r\n        }\r\n\r\n\r\n        public class ActionTarget\r\n        {\r\n            public void Go(Input1 input){}\r\n        }\r\n        public class Input1{}\r\n\r\n        public class StubRedirectable : IRedirectable\r\n        {\r\n            public FubuContinuation RedirectTo\r\n            {\r\n                get;\r\n                set;\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/CustomExceptionsTester.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Runtime.Serialization.Formatters.Binary;\r\nusing FubuMVC.Core;\r\nusing NUnit.Framework;\r\nusing System.Linq;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class CustomExceptionsTester\r\n    {\r\n        [Test]\r\n        public void all_exceptions_should_be_marked_as_serializable()\r\n        {\r\n            const string failureMessage = @\"All custom exceptions must be marked as [Serializable]. The following Exceptions were found without the attribute: \r\n    {0}\r\n\r\nAdditionally, if the custom exception has properties, you may want individual tests that verify the data is properly serialized across a boundary.\";\r\n\r\n            var assembliesToCheck = AppDomain.CurrentDomain.GetAssemblies().Where(asm => asm.FullName.Contains(\"Fubu\") && !asm.FullName.Contains(\".Test\"));\r\n            var typesToCheck = assembliesToCheck.SelectMany(asm => asm.GetExportedTypes().Where(t => t.CanBeCastTo<Exception>()));\r\n            var notMarkedSerializable = typesToCheck.Where(t => !t.GetCustomAttributes(typeof (SerializableAttribute), false).Any()).ToArray();\r\n            if (notMarkedSerializable.Any())\r\n            {\r\n                Assert.Fail(failureMessage + \"\\n\" + String.Join(\"\\n\\t\", notMarkedSerializable.Select(t => t.FullName).ToArray()));\r\n            }\r\n        }\r\n\r\n        public static T TransferViaSerialization<T>(T instance)\r\n        {\r\n            var stream = new MemoryStream();\r\n            new BinaryFormatter().Serialize(stream, instance);\r\n            stream.Position = 0;\r\n\r\n            return (T)new BinaryFormatter().Deserialize(stream);\r\n        }\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/Assets/DiagnosticAssetsTester.cs",
    "content": "﻿using System.IO;\nusing System.Reflection;\nusing System.Text;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Diagnostics.Assets;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Runtime;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Diagnostics.Assets\n{\n    [TestFixture]\n    public class DiagnosticAssetsTester\n    {\n        private DiagnosticAssetsCache theAssets;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theAssets = new DiagnosticAssetsCache(new BehaviorGraph{PackageAssemblies = new Assembly[0]});\n        }\n\n        [Test]\n        public void reads_embedded_diagnostic_files_for_an_assembly()\n        {\n            theAssets.For(\"bootstrap.min.css\").ShouldNotBeNull();\n            theAssets.For(\"bootstrap.overrides.css\").ShouldNotBeNull();\n            theAssets.For(\"master.css\").ShouldNotBeNull();\n        }\n\n        [Test]\n        public void embedded_file_captures_the_mime_type()\n        {\n            var file = theAssets.For(\"master.css\");\n\n            file.ContentType.ShouldBe(MimeType.Css);\n        }\n\n\n        [Test]\n        public void embedded_file_captures_the_version()\n        {\n            var file = theAssets.For(\"master.css\");\n\n            file.Version.ShouldBe(typeof(IActionBehavior).Assembly.GetName().Version.ToString());\n        }\n\n        [Test]\n        public void embedded_file_can_read_contents()\n        {\n            var file = theAssets.For(\"master.css\");\n\n            var bytes = file.Contents();\n            var text = Encoding.Default.GetString(bytes);\n\n            text.ShouldContain(\".filter-container h4, .filter-container .filter\");\n            text.ShouldContain(\".filter-container h4, .filter-container .ui-button-text\");\n            text.ShouldContain(\"#filter-dialog button\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/Bootstrapping_Integration_Testing.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Diagnostics;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.StructureMap.Diagnostics;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Diagnostics\n{\n    [TestFixture]\n    public class Bootstrapping_Integration_Testing\n    {\n        private FubuRuntime runtime;\n\n        [TestFixtureSetUp]\n        public void SetUp()\n        {\n            runtime = FubuRuntime.Basic(_ => _.Mode = \"development\");\n\n            runtime.Get<FubuDiagnosticsEndpoint>().get__fubu();\n        }\n\n        [TestFixtureTearDown]\n        public void TearDown()\n        {\n            runtime.Dispose();\n        }\n\n        [Test]\n        public void find_the_routes_and_chains_from_extensions()\n        {\n            runtime.Behaviors.ChainFor<StructureMapFubuDiagnostics>(x => x.get_search_options())\n                .ShouldNotBeNull();\n\n            runtime.Behaviors.ChainFor<ModelBindingFubuDiagnostics>(x => x.get_binding_all())\n                .ShouldNotBeNull();\n        }\n\n        [Test]\n        public void got_all_the_routes_in_the_diagnostic_javascript_router()\n        {\n            var routes = runtime.Get<DiagnosticJavascriptRoutes>();\n            var names = routes.Routes().Select(x => x.Name).ToArray();\n\n            names.ShouldContain(\"StructureMap:summary\");\n            names.ShouldContain(\"Chain:chain_details_Hash\");\n            names.ShouldContain(\"Requests:requests\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/DiagnosticChainTester.cs",
    "content": "﻿using System.Linq;\r\nusing FubuMVC.Core.Diagnostics;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Diagnostics\r\n{\r\n    [TestFixture]\r\n    public class DiagnosticChainTester\r\n    {\r\n        [Test]\r\n        public void build_the_route()\r\n        {\r\n            DiagnosticChain.For<FakeFubuDiagnostics>(x => x.get_link())\r\n                .GetRoutePattern().ShouldBe(\"_fubu/fake/link\");\r\n        }\r\n\r\n        [Test]\r\n        public void chain_includes_the_call()\r\n        {\r\n            DiagnosticChain.For<FakeFubuDiagnostics>(x => x.get_link())\r\n                .Last()\r\n                .ShouldBeOfType<ActionCall>()\r\n                .Description\r\n                .ShouldBe(\"FakeFubuDiagnostics.get_link() : String\");\r\n        }\r\n    }\r\n\r\n    public class FakeQuery\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/DiagnosticSettings_TraceLevel_Registration_Tester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing FubuCore.Binding.InMemory;\nusing FubuCore.Logging;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Diagnostics;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Diagnostics.Runtime;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing Shouldly;\nusing NUnit.Framework;\nusing StructureMap;\nusing TraceLevel = FubuMVC.Core.TraceLevel;\n\nnamespace FubuMVC.Tests.Diagnostics\n{\n    [TestFixture]\n    public class DiagnosticsSettings_apply_authorization_Tester\n    {\n        [Test]\n        public void authorization_rules_from_settings_are_applied()\n        {\n            var authorizedGraph = BehaviorGraph.BuildFrom(r =>\n            {\n                r.Features.Diagnostics.Configure(x =>\n                {\n                    x.TraceLevel = TraceLevel.Verbose;\n                    x.RestrictToRole(\"admin\");\n                });\n            });\n\n            var notAuthorizedGraph = BehaviorGraph.BuildFrom(r =>\n            {\n                r.Features.Diagnostics.Enable(TraceLevel.Verbose);\n\n//                r.AlterSettings<DiagnosticsSettings>(x =>\n//                {\n//                    x.RestrictToRule(\"admin\");\n//                });\n            });\n\n            authorizedGraph.Chains.OfType<DiagnosticChain>()\n                .Each(x => x.Authorization.AllowedRoles().Single().ShouldBe(\"admin\"));\n\n            notAuthorizedGraph.Chains.OfType<DiagnosticChain>()\n                .Each(x => x.Authorization.HasRules().ShouldBeFalse());\n        }\n    }\n\n    [TestFixture]\n    public class DiagnosticSettings_TraceLevel_Registration_Tester\n    {\n        private void withTraceLevel(TraceLevel level, Action<IContainer> action)\n        {\n            var registry = new FubuRegistry();\n            registry.Features.Diagnostics.Enable(level);\n            \n\n            using (var runtime = registry.ToRuntime())\n            {\n                var container = runtime.Get<IContainer>();\n                action(container);\n            }\n        }\n\n        [Test]\n        public void default_in_memory_instrumentation_registrations()\n        {\n            withTraceLevel(TraceLevel.Production, c =>\n            {\n                c.DefaultSingletonIs<IExecutionLogStorage, InMemoryExecutionLogStorage>();\n\n                c.DefaultSingletonIs<IChainExecutionHistory, ChainExecutionHistory>();\n                c.DefaultSingletonIs<IPerformanceHistoryQueue, PerformanceHistoryQueue>();\n\n                \n            });\n        }\n\n        [Test]\n        public void verbose_registrations()\n        {\n            withTraceLevel(TraceLevel.Verbose, c =>\n            {\n                c.ShouldNotHaveRegistration<ILogListener, ProductionModeTraceListener>();\n\n                c.DefaultRegistrationIs<IBindingLogger, RecordingBindingLogger>();\n\n                c.DefaultSingletonIs<IExecutionLogger, VerboseExecutionLogger>();\n\n                c.ShouldHaveRegistration<ILogListener, ChainExecutionListener>();\n\n                c.DefaultRegistrationIs<IPartialFactory, DiagnosticPartialFactory>();\n\n                c.DefaultRegistrationIs<IChainExecutionLog, NulloChainExecutionLog>();\n\n                c.DefaultRegistrationIs<IEnvelopeLifecycle, EnvelopeLifecycle<VerboseDiagnosticEnvelopeContext>>();\n            });\n        }\n\n        [Test]\n        public void production_registration()\n        {\n            withTraceLevel(TraceLevel.Production, c =>\n            {\n                c.ShouldHaveRegistration<ILogListener, ProductionModeTraceListener>();\n\n                c.DefaultRegistrationIs<IBindingLogger, NulloBindingLogger>();\n\n                c.DefaultSingletonIs<IExecutionLogger, ProductionExecutionLogger>();\n\n                c.ShouldNotHaveRegistration<ILogListener, ChainExecutionListener>();\n\n                c.DefaultRegistrationIs<IPartialFactory, PartialFactory>();\n\n                c.DefaultRegistrationIs<IChainExecutionLog, NulloChainExecutionLog>();\n\n                c.DefaultRegistrationIs<IEnvelopeLifecycle, EnvelopeLifecycle<ProductionDiagnosticEnvelopeContext>>();\n            });\n        }\n\n        [Test]\n        public void trace_level_is_none_registration()\n        {\n            withTraceLevel(TraceLevel.None, c =>\n            {\n                c.ShouldNotHaveRegistration<ILogListener, ProductionModeTraceListener>();\n\n                c.DefaultRegistrationIs<IBindingLogger, NulloBindingLogger>();\n\n                c.DefaultSingletonIs<IExecutionLogger, NulloExecutionLogger>();\n\n                c.ShouldNotHaveRegistration<ILogListener, ChainExecutionListener>();\n\n                c.DefaultRegistrationIs<IPartialFactory, PartialFactory>();\n\n                c.DefaultRegistrationIs<IChainExecutionLog, NulloChainExecutionLog>();\n\n                c.DefaultRegistrationIs<IEnvelopeLifecycle, EnvelopeLifecycle<EnvelopeContext>>();\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/FakeFubuDiagnostics.cs",
    "content": "﻿namespace FubuMVC.Tests.Diagnostics\r\n{\r\n    public class FakeFubuDiagnostics\r\n    {\r\n        public string Index()\r\n        {\r\n            return null;\r\n        }\r\n\r\n        [System.ComponentModel.Description(\"A Title:A really good display of some important data\")]\r\n        public string get_link()\r\n        {\r\n            return \"is a link\";\r\n        }\r\n\r\n        [System.ComponentModel.Description(\"Simple Title\")]\r\n        public string get_simple()\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public string get_else()\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public string get_query_Name(FakeQuery query)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public string post_ask()\r\n        {\r\n            return null;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/HttpRequestSummaryTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuMVC.Core.Diagnostics;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Http.Owin;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Diagnostics\n{\n    [TestFixture]\n    public class HttpRequestSummaryTester\n    {\n        [Test]\n        public void map_from_execution_log_happy_path()\n        {\n            var log = new ChainExecutionLog();\n            log.Request.Add(OwinConstants.ResponseStatusCodeKey, 200);\n            log.Request.ResponseHeaders().Add(HttpResponseHeaders.ContentType, new []{\"text/plain\"});\n\n            var request = new OwinHttpRequest(log.Request);\n            request.HttpMethod(\"POST\");\n            request.FullUrl(\"http://server/foo\");\n\n            log.MarkFinished();\n\n            var summary = new HttpRequestSummary(log);\n\n            summary.id.ShouldBe(log.Id.ToString());\n            summary.time.ShouldBe(log.Time.ToHttpDateString());\n            summary.url.ShouldBe(\"/foo\");\n            summary.method.ShouldBe(\"POST\");\n            summary.status.ShouldBe(200);\n            summary.contentType.ShouldBe(\"text/plain\");\n            summary.duration.ShouldBe(log.ExecutionTime);\n        }\n\n        [Test]\n        public void map_from_execution_when_the_request_was_redirected()\n        {\n            var log = new ChainExecutionLog();\n            log.Request.Add(OwinConstants.ResponseStatusCodeKey, 302);\n            log.Request.ResponseHeaders().Add(HttpResponseHeaders.ContentType, new[] { \"text/plain\" });\n            log.Request.ResponseHeaders().Add(HttpResponseHeaders.Location, new[] { \"/new/place\" });\n\n\n            var request = new OwinHttpRequest(log.Request);\n            request.HttpMethod(\"GET\");\n            request.FullUrl(\"http://server/foo\");\n\n            log.MarkFinished();\n\n            var summary = new HttpRequestSummary(log);\n\n            summary.id.ShouldBe(log.Id.ToString());\n            summary.time.ShouldBe(log.Time.ToHttpDateString());\n            summary.url.ShouldBe(\"/foo\");\n            summary.method.ShouldBe(\"GET\");\n            summary.status.ShouldBe(302);\n            summary.contentType.ShouldBe(\"text/plain\");\n            summary.duration.ShouldBe(log.ExecutionTime);\n\n            summary.description.ShouldBe(\"/new/place\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/Instrumentation/ActivityTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Tests.View.FakeViews.Folder1;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Diagnostics.Instrumentation\n{\n    [TestFixture]\n    public class ActivityTester\n    {\n\n\n        [Test]\n        public void mark_end_and_duration()\n        {\n            var subject = MockRepository.GenerateMock<ISubject>();\n            var activity = new Activity(subject, 125);\n\n\n            activity.MarkEnd(200);\n\n            activity.Duration.ShouldBe(75);\n        }\n\n        [Test]\n        public void inner_time()\n        {\n            var subject = MockRepository.GenerateMock<ISubject>();\n            var activity = new Activity(subject, 125);\n\n            activity.MarkEnd(500);\n\n            activity.InnerTime.ShouldBe(500 - 125);\n        }\n\n        [Test]\n        public void inner_time_with_nesteds()\n        {\n            var subject = MockRepository.GenerateMock<ISubject>();\n            var activity = new Activity(subject, 125);\n\n            activity.MarkEnd(500);\n\n            var nested1 = new Activity(subject, 150);\n            nested1.MarkEnd(175);\n            var nested2 = new Activity(subject, 250);\n            nested2.MarkEnd(290);\n            activity.Nested.Add(nested1);\n            activity.Nested.Add(nested2);\n\n            activity.InnerTime.ShouldBe(500 - 125 - 25 - 40);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/Instrumentation/BehaviorTracerTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Tests.Registration;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Diagnostics.Instrumentation\n{\n    [TestFixture]\n    public class BehaviorTracerTester : InteractionContext<FubuMVC.Core.Diagnostics.Instrumentation.BehaviorTracer>\n    {\n        [Test]\n        public void when_the_inner_behavior_runs_cleanly()\n        {\n            var node = Wrapper.For<FakeBehavior>();\n            Services.Inject<BehaviorNode>(node);\n\n            var inner = MockFor<IActionBehavior>();\n            ClassUnderTest.Inner = inner;\n\n            ClassUnderTest.Invoke();\n\n            var log = MockFor<IChainExecutionLog>();\n            log.AssertWasCalled(x => x.StartSubject(node));\n\n            inner.AssertWasCalled(x => x.Invoke());\n\n            log.AssertWasCalled(x => x.FinishSubject());\n\n        }\n\n        [Test]\n        public void when_the_inner_behavior_throws_an_exception()\n        {\n            var node = Wrapper.For<FakeBehavior>();\n            Services.Inject<BehaviorNode>(node);\n\n            var ex = new DivideByZeroException();\n            var inner = MockFor<IActionBehavior>();\n            inner.Stub(x => x.Invoke()).Throw(ex);\n\n            ClassUnderTest.Inner = inner;\n\n            Exception<DivideByZeroException>.ShouldBeThrownBy(() =>\n            {\n                ClassUnderTest.Invoke().Wait();\n            });\n\n            \n\n            var log = MockFor<IChainExecutionLog>();\n            log.AssertWasCalled(x => x.StartSubject(node));\n\n            inner.AssertWasCalled(x => x.Invoke());\n            log.AssertWasCalled(x => x.LogException(ex));\n\n            log.AssertWasCalled(x => x.FinishSubject());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/Instrumentation/ChainExecutionHistoryTester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Diagnostics.Runtime;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Diagnostics.Instrumentation\n{\n    [TestFixture]\n    public class ChainExecutionHistoryTester\n    {\n        [Test]\n        public void only_cache_up_to_the_setting_limit()\n        {\n            var settings = new DiagnosticsSettings\n            {\n                MaxRequests = 10\n            };\n\n            var cache = new ChainExecutionHistory(settings);\n\n            cache.Store(new ChainExecutionLog());\n            cache.Store(new ChainExecutionLog());\n            cache.Store(new ChainExecutionLog());\n            cache.Store(new ChainExecutionLog());\n            cache.Store(new ChainExecutionLog());\n            cache.Store(new ChainExecutionLog());\n            cache.Store(new ChainExecutionLog());\n            cache.Store(new ChainExecutionLog());\n            cache.Store(new ChainExecutionLog());\n\n            cache.RecentReports().Count().ShouldBe(9);\n\n            cache.Store(new ChainExecutionLog());\n            cache.Store(new ChainExecutionLog());\n            cache.Store(new ChainExecutionLog());\n            cache.Store(new ChainExecutionLog());\n            cache.Store(new ChainExecutionLog());\n\n            cache.RecentReports().Count().ShouldBe(settings.MaxRequests);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/Instrumentation/ChainExecutionListenerTester.cs",
    "content": "using FubuCore.Logging;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Diagnostics.Instrumentation\n{\n    [TestFixture]\n    public class ChainExecutionListenerTester : InteractionContext<ChainExecutionListener>\n    {\n        private void assertMessageWasLogged(object message)\n        {\n            MockFor<IChainExecutionLog>().AssertWasCalled(x => x.Log(message));\n        }\n\n        [Test]\n        public void debugging_is_enabled()\n        {\n            ClassUnderTest.IsDebugEnabled.ShouldBeTrue();\n        }\n\n        [Test]\n        public void info_is_enabled()\n        {\n            ClassUnderTest.IsInfoEnabled.ShouldBeTrue();\n        }\n\n        [Test]\n        public void debug_message_delegates()\n        {\n            var message = new object();\n\n            ClassUnderTest.DebugMessage(message);\n\n            assertMessageWasLogged(message);\n        }\n\n        [Test]\n        public void debug_string_delegates()\n        {\n            ClassUnderTest.Debug(\"some stuff\");\n\n            assertMessageWasLogged(new StringMessage(\"some stuff\"));\n        }\n\n        [Test]\n        public void info_message_delegates()\n        {\n            var message = new object();\n\n            ClassUnderTest.InfoMessage(message);\n\n            assertMessageWasLogged(message);\n        }\n\n        [Test]\n        public void info_string_delegates()\n        {\n            ClassUnderTest.Info(\"some stuff\");\n\n            assertMessageWasLogged(new StringMessage(\"some stuff\"));\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/Instrumentation/ChainExecutionLogTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.Linq;\nusing System.Threading;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Http.Owin;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Diagnostics.Instrumentation\n{\n    [TestFixture]\n    public class ChainExecutionLogTester\n    {\n        [Test]\n        public void trace_on_parent()\n        {\n            var log = new StubbedChainExecutionLog();\n            log.RequestTime = 100;\n\n            log.Trace(\"The trace description\", () => log.RequestTime = 175);\n\n            var trace = log.Steps.Single().Log.ShouldBeOfType<Trace>();\n\n            trace.Description.ShouldBe(\"The trace description\");\n            trace.Duration.ShouldBe(75);\n        }\n\n        [Test]\n        public void logging_sets_the_request_time_and_activity_at_parent()\n        {\n            var log = new StubbedChainExecutionLog();\n            log.RequestTime = 111;\n\n            log.Log(new object());\n\n            log.Steps.Single().RequestTime.ShouldBe(111);\n            log.Steps.Single().Activity.ShouldBe(log.Activity);\n        }\n\n        [Test]\n        public void start_and_step_a_subject()\n        {\n            var subject1 = MockRepository.GenerateMock<ISubject>();\n            var subject2 = MockRepository.GenerateMock<ISubject>();\n\n            var log = new StubbedChainExecutionLog();\n            log.RequestTime = 111;\n            log.StartSubject(subject1);\n\n            log.RequestTime = 222;\n            log.StartSubject(subject2);\n\n            log.RequestTime = 333;\n            log.FinishSubject();\n\n            log.RequestTime = 444;\n            log.FinishSubject();\n\n            log.Activity.Nested[0].Subject.ShouldBe(subject1);\n            log.Activity.Nested[0].Start.ShouldBe(111);\n            log.Activity.Nested[0].End.ShouldBe(444);\n\n            log.Activity.Nested[0].Nested[0].Subject.ShouldBe(subject2);\n            log.Activity.Nested[0].Nested[0].Start.ShouldBe(222);\n            log.Activity.Nested[0].Nested[0].End.ShouldBe(333);\n        }\n\n        [Test]\n        public void deep_activity_logging()\n        {\n            var subject1 = MockRepository.GenerateMock<ISubject>();\n            var subject2 = MockRepository.GenerateMock<ISubject>();\n\n            var x1 = new Object();\n            var x2 = new Object();\n            var x3 = new Object();\n            var x4 = new Object();\n\n            var log = new StubbedChainExecutionLog();\n            log.RequestTime = 1;\n            log.Log(x1);\n\n            log.StartSubject(subject1);\n            log.RequestTime = 5;\n            log.Log(x2);\n\n            log.RequestTime = 10;\n            log.StartSubject(subject2);\n            log.Log(x3);\n\n            log.RequestTime = 15;\n            log.FinishSubject();\n            log.Log(x4);\n\n            var steps = log.Steps.OrderBy(x => x.RequestTime).ToArray();\n\n\n            steps[0].Activity.Subject.ShouldBe(log);\n            steps[1].Activity.Subject.ShouldBe(subject1);\n\n            steps[2].Log.ShouldBe(x3);\n            steps[2].Activity.Subject.ShouldBe(subject2);\n            steps[3].Activity.Subject.ShouldBe(subject1);\n        }\n\n\n        [Test]\n        public void log_exception_once()\n        {\n            var subject1 = MockRepository.GenerateMock<ISubject>();\n            var subject2 = MockRepository.GenerateMock<ISubject>();\n\n            var log = new StubbedChainExecutionLog();\n            log.StartSubject(subject1);\n            log.StartSubject(subject2);\n\n            var ex = new DivideByZeroException();\n\n            log.LogException(ex);\n\n            log.FinishSubject();\n            log.LogException(ex);\n\n            log.FinishSubject();\n            log.LogException(ex);\n\n\n\n            log.Steps.Select(x => x.Log).OfType<ExceptionReport>()\n                .Single().ExceptionText.ShouldBe(ex.ToString());\n        }\n\n        [Test]\n        public void has_exception()\n        {\n            var log = new StubbedChainExecutionLog();\n            log.HadException.ShouldBeFalse();\n\n            log.LogException(new NotImplementedException());\n        \n            log.HadException.ShouldBeTrue();\n        }\n\n        [Test]\n        public void record_headers_from_http_request()\n        {\n            var dict = new Dictionary<string, object>();\n            dict.Add(\"owin.RequestHeaders\", 1);\n            dict.Add(\"owin.RequestMethod\", 2);\n            dict.Add(\"owin.RequestPath\", 3);\n            dict.Add(\"owin.RequestPathBase\", 4);\n            dict.Add(\"owin.RequestProtocol\", 5);\n            dict.Add(\"owin.RequestQueryString\", 6);\n            dict.Add(\"owin.RequestScheme\", 7);\n            dict.Add(\"owin.ResponseHeaders\", 8);\n            dict.Add(\"owin.ResponseStatusCode\", 9);\n            dict.Add(\"owin.ResponseReasonPhrase\", 10);\n\n            var log = new ChainExecutionLog();\n\n            log.RecordHeaders(dict);\n\n            log.Request[\"owin.RequestHeaders\"].ShouldBe(1);\n            log.Request[\"owin.RequestMethod\"].ShouldBe(2);\n            log.Request[\"owin.RequestPath\"].ShouldBe(3);\n            log.Request[\"owin.RequestPathBase\"].ShouldBe(4);\n            log.Request[\"owin.RequestProtocol\"].ShouldBe(5);\n            log.Request[\"owin.RequestQueryString\"].ShouldBe(6);\n            log.Request[\"owin.RequestScheme\"].ShouldBe(7);\n            log.Request[\"owin.ResponseHeaders\"].ShouldBe(8);\n            log.Request[\"owin.ResponseStatusCode\"].ShouldBe(9);\n            log.Request[\"owin.ResponseReasonPhrase\"].ShouldBe(10);\n        }\n\n        [Test]\n        public void record_envelope_headers()\n        {\n            var envelope = new Envelope();\n            envelope.Headers[\"foo\"] = \"bar\";\n\n            var log = new ChainExecutionLog();\n            log.RecordHeaders(envelope);\n\n            log.Request[\"headers\"].As<IDictionary<string, string>>()[\"foo\"]\n                .ShouldBe(\"bar\");\n        }\n    }\n\n    public class StubbedChainExecutionLog : ChainExecutionLog\n    {\n        public StubbedChainExecutionLog() : base()\n        {\n        }\n\n        public double RequestTime { get; set; }\n\n        protected override double requestTime()\n        {\n            return RequestTime;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/Instrumentation/PerformanceHistoryTester.cs",
    "content": "﻿using FubuMVC.Core.Diagnostics.Instrumentation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Diagnostics.Instrumentation\n{\n    [TestFixture]\n    public class PerformanceHistoryTester\n    {\n        [Test]\n        public void read_increments_hit_count()\n        {\n            var history = new PerformanceHistory();\n\n            for (var i = 0; i < 10; i++)\n            {\n                history.Read(new StubRequestLog());\n                history.HitCount.ShouldBe(i + 1);\n            }\n        }\n\n        [Test]\n        public void read_stores_the_last_execution()\n        {\n            var history = new PerformanceHistory();\n            var log1 = new ChainExecutionLog();\n            var log2 = new ChainExecutionLog();\n\n            history.Read(log1);\n            history.LastExecution.ShouldBeTheSameAs(log1);\n\n            history.Read(log2);\n            history.LastExecution.ShouldBeTheSameAs(log2);\n        }\n\n        [Test]\n        public void read_increments_exception_count_correctly()\n        {\n            var history = new PerformanceHistory();\n            history.Read(new StubRequestLog{HadException = false});\n            history.ExceptionCount.ShouldBe(0);\n\n            history.Read(new StubRequestLog { HadException = true });\n            history.ExceptionCount.ShouldBe(1);\n\n            history.Read(new StubRequestLog { HadException = true });\n            history.ExceptionCount.ShouldBe(2);\n\n            history.Read(new StubRequestLog { HadException = false });\n            history.ExceptionCount.ShouldBe(2);\n        }\n\n        [Test]\n        public void increment_total_time()\n        {\n            var history = new PerformanceHistory();\n\n            history.Read(new StubRequestLog{ExecutionTime = 100});\n            history.Read(new StubRequestLog{ExecutionTime = 200});\n            history.Read(new StubRequestLog{ExecutionTime = 50});\n            history.Read(new StubRequestLog{ExecutionTime = 70});\n\n            history.TotalExecutionTime.ShouldBe(100 + 200 + 50 + 70);\n        }\n\n        [Test]\n        public void calculate_average()\n        {\n            var history = new PerformanceHistory();\n\n            history.Read(new StubRequestLog { ExecutionTime = 100 });\n            history.Read(new StubRequestLog { ExecutionTime = 200 });\n            history.Read(new StubRequestLog { ExecutionTime = 50 });\n            history.Read(new StubRequestLog { ExecutionTime = 70 });\n\n            history.Average.ShouldBe((100 + 200 + 50 + 70) / 4);\n        }\n\n        [Test]\n        public void no_hits_means_zero_exception_percentage_and_zero_average()\n        {\n            var history = new PerformanceHistory();\n            history.Average.ShouldBe(0);\n            history.ExceptionPercentage.ShouldBe(0);\n        }\n\n        [Test]\n        public void calculate_exception_percentage()\n        {\n            var history = new PerformanceHistory();\n            \n\n            history.Read(new StubRequestLog { ExecutionTime = 100 });\n            history.Read(new StubRequestLog { ExecutionTime = 200, HadException = true});\n            history.Read(new StubRequestLog { ExecutionTime = 50 });\n            history.Read(new StubRequestLog { ExecutionTime = 70, HadException = true});\n            history.Read(new StubRequestLog { ExecutionTime = 70 });\n\n            history.ExceptionPercentage.ShouldBe(40);\n        }\n\n        [Test]\n        public void track_min_time()\n        {\n            var history = new PerformanceHistory();\n\n            history.Read(new StubRequestLog { ExecutionTime = 100 });\n            history.MinTime.ShouldBe(100);\n\n            history.Read(new StubRequestLog { ExecutionTime = 200 });\n            history.MinTime.ShouldBe(100);\n\n            history.Read(new StubRequestLog { ExecutionTime = 50 });\n            history.MinTime.ShouldBe(50);\n\n            history.Read(new StubRequestLog { ExecutionTime = 70 });\n            history.MinTime.ShouldBe(50);\n        }\n\n        [Test]\n        public void track_max_time()\n        {\n            var history = new PerformanceHistory();\n\n            history.Read(new StubRequestLog { ExecutionTime = 100 });\n            history.MaxTime.ShouldBe(100);\n\n            history.Read(new StubRequestLog { ExecutionTime = 200 });\n            history.MaxTime.ShouldBe(200);\n\n            history.Read(new StubRequestLog { ExecutionTime = 50 });\n            history.MaxTime.ShouldBe(200);\n\n            history.Read(new StubRequestLog { ExecutionTime = 70 });\n            history.MaxTime.ShouldBe(200);\n        }\n    }\n\n    public class StubRequestLog : IRequestLog\n    {\n        public double ExecutionTime { get; set; }\n        public bool HadException { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/Instrumentation/ProductionExecutionLoggerTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Diagnostics.Instrumentation\n{\n    [TestFixture]\n    public class ProductionExecutionLoggerTester : InteractionContext<ProductionExecutionLogger>\n    {\n        [Test]\n        public void record()\n        {\n            var log = MockFor<IChainExecutionLog>();\n            var env = new Dictionary<string, object>();\n\n            ClassUnderTest.Record(log, env);\n\n            log.AssertWasCalled(x => x.RecordHeaders(env));\n            log.AssertWasNotCalled(x => x.RecordBody(env));\n\n            MockFor<IExecutionLogStorage>().AssertWasCalled(x => x.Store(log));\n        }\n\n        [Test]\n        public void record_for_envelope()\n        {\n            var log = MockFor<IChainExecutionLog>();\n            var envelope = new Envelope();\n\n            ClassUnderTest.Record(log, envelope);\n\n            log.AssertWasCalled(x => x.RecordHeaders(envelope));\n            log.AssertWasNotCalled(x => x.RecordBody(envelope));\n\n            MockFor<IExecutionLogStorage>().AssertWasCalled(x => x.Store(log));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/Instrumentation/VerboseExecutionLoggerTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Diagnostics.Instrumentation\n{\n    [TestFixture]\n    public class VerboseExecutionLoggerTester : InteractionContext<VerboseExecutionLogger>\n    {\n        [Test]\n        public void record()\n        {\n            var log = MockFor<IChainExecutionLog>();\n            var env = new Dictionary<string, object>();\n\n            ClassUnderTest.Record(log, env);\n\n            log.AssertWasCalled(x => x.RecordHeaders(env));\n            log.AssertWasCalled(x => x.RecordBody(env));\n        \n            MockFor<IExecutionLogStorage>().AssertWasCalled(x => x.Store(log));\n        }\n\n        [Test]\n        public void record_for_envelope()\n        {\n            var log = MockFor<IChainExecutionLog>();\n            var envelope = new Envelope();\n\n            ClassUnderTest.Record(log, envelope);\n\n            log.AssertWasCalled(x => x.RecordHeaders(envelope));\n            log.AssertWasCalled(x => x.RecordBody(envelope));\n\n            MockFor<IExecutionLogStorage>().AssertWasCalled(x => x.Store(log));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/InteractionContextExtensions.cs",
    "content": "using FubuCore.Logging;\nusing StructureMap.AutoMocking;\n\nnamespace FubuMVC.Tests.Diagnostics\n{\n    public static class InteractionContextExtensions\n    {\n        // TODO -- put this into FubuMVC.TestingSupport or whatever it's called\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/PerfTimerSmokeTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Diagnostics\n{\n    [TestFixture]\n    public class PerfTimerSmokeTester\n    {\n        [Test]\n        public void try_it_out()\n        {\n            var timer = new PerfTimer();\n            timer.Start(\"Watch me go!\");\n\n            Thread.Sleep(50);\n            timer.Mark(\"Here, here!\");\n\n            var t1 = Task.Factory.StartNew(() => {\n                timer.Record(\"#1\", () => {\n                    Thread.Sleep(25);\n                });\n            });\n\n            var t2 = Task.Factory.StartNew(() =>\n            {\n                timer.Record(\"#2\", () =>\n                {\n                    Thread.Sleep(80);\n                });\n            });\n\n            var t3 = Task.Factory.StartNew(() =>\n            {\n                timer.Record(\"#3\", () =>\n                {\n                    Thread.Sleep(40);\n                });\n            });\n\n            var t4 = Task.Factory.StartNew(() =>\n            {\n                timer.Record(\"#4\", () =>\n                {\n                    Thread.Sleep(5);\n                });\n            });\n\n            Task.WaitAll(t1, t2, t3, t4);\n\n            timer.Stop();\n\n            timer.DisplayTimings(x => x.Finished);\n        }\n\n\n    }\n\n\n\n    public class FakeActivator : IActivator\n    {\n        private readonly string _description;\n        private readonly int _time;\n\n        public FakeActivator(string description, int time)\n        {\n            _description = description;\n            _time = time;\n        }\n\n        public void Activate(IActivationLog log, IPerfTimer timer)\n        {\n            Thread.Sleep(_time);\n        }\n\n        public override string ToString()\n        {\n            return \"Activator: \"+_description;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/Routes/EndpointReportTester.cs",
    "content": "using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Diagnostics.Endpoints;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Urls;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Diagnostics.Routes\n{\n    [TestFixture]\n    public class EndpointReportTester\n    {\n        private Lazy<EndpointReport> _report;\n        private BehaviorChain theChain;\n        private StubUrlRegistry theUrls;\n        private RoutedChain theRoutedChain;\n        private Lazy<EndpointReport> _routedReport;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theChain = new BehaviorChain();\n            theRoutedChain = new RoutedChain(\"something\");\n            theUrls = new StubUrlRegistry();\n            _report = new Lazy<EndpointReport>(() => EndpointReport.ForChain(theChain));\n            _routedReport = new Lazy<EndpointReport>(() => EndpointReport.ForChain(theRoutedChain));\n        }\n\n        private EndpointReport theReport\n        {\n            get\n            {\n                return _report.Value;\n            }\n        }\n\n        private EndpointReport theRoutedReport\n        {\n            get\n            {\n                return _routedReport.Value;\n            }\n        }\n\n        [Test]\n        public void resource_type()\n        {\n            theChain.AddToEnd(ActionCall.For<FakeEndpoint>(x => x.get_something(null)));\n            theReport.ResourceType.ShouldBe(typeof (Output));\n        }\n\n        [Test]\n        public void input_model()\n        {\n            theChain.AddToEnd(ActionCall.For<FakeEndpoint>(x => x.get_something(null)));\n            theReport.InputModel.ShouldBe(typeof (Input));\n        }\n\n        [Test]\n        public void action_with_no_actions()\n        {\n            theReport.Action.Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void one_action()\n        {\n            theChain.AddToEnd(ActionCall.For<FakeEndpoint>(x => x.get_something(null)));\n            theReport.Action.Single().ShouldBe(\"FakeEndpoint.get_something(Input input) : Output\");\n        }\n\n        [Test]\n        public void multiple_actions()\n        {\n            theChain.AddToEnd(ActionCall.For<FakeEndpoint>(x => x.get_something(null)));\n            theChain.AddToEnd(ActionCall.For<FakeEndpoint>(x => x.get_another(null)));\n            theChain.AddToEnd(ActionCall.For<FakeEndpoint>(x => x.get_third(null)));\n\n            theReport.Action.ShouldHaveTheSameElementsAs(\n                \"FakeEndpoint.get_something(Input input) : Output\", \n                \"FakeEndpoint.get_another(Input input) : Output\", \n                \"FakeEndpoint.get_third(Input input) : Output\");\n        }\n\n        [Test]\n        public void constraints_with_no_route()\n        {\n            theReport.Constraints.ShouldBe(\"N/A\");\n        }\n\n        [Test]\n        public void constraints_with_a_route_but_no_constraints()\n        {\n            theRoutedChain.Route.AllowedHttpMethods.Any().ShouldBeFalse();\n\n            theRoutedReport.Constraints.ShouldBe(\"Any\");\n        }\n\n        [Test]\n        public void one_constraint()\n        {\n            theRoutedChain.Route.AddHttpMethodConstraint(\"GET\");\n\n            theRoutedReport.Constraints.ShouldBe(\"GET\");\n        }\n\n        [Test]\n        public void multiple_constraints()\n        {\n            theRoutedChain.Route.AddHttpMethodConstraint(\"POST\");\n            theRoutedChain.Route.AddHttpMethodConstraint(\"GET\");\n\n            theRoutedReport.Constraints.ShouldBe(\"GET, POST\");\n        }\n\n        [Test]\n        public void normal_route()\n        {\n\n            theRoutedReport.Title.ShouldBe(\"something\");\n        }\n\n        [Test]\n        public void url_category()\n        {\n            theRoutedChain.UrlCategory.Category = \"weird\";\n\n            theRoutedReport.UrlCategory.ShouldBe(\"weird\");\n        }\n\n        [Test]\n        public void wrappers_with_no_wrappers()\n        {\n            theReport.Wrappers.Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void multiple_wrappers()\n        {\n            theChain.AddToEnd(ActionCall.For<FakeEndpoint>(x => x.get_something(null)));\n            theChain.FirstCall().WrapWith(typeof (SimpleWrapper));\n            theChain.FirstCall().WrapWith(typeof (AnotherWrapper));\n\n            theReport.Wrappers.ShouldHaveTheSameElementsAs(\"SimpleWrapper\", \"AnotherWrapper\");\n        }\n\n        [Test]\n        public void input_with_no_InputNode_is_assumed_to_be_http_form()\n        {\n            theChain.Any(x => x is InputNode).ShouldBeFalse();\n\n            theReport.Accepts.Single().ShouldBe(MimeType.HttpFormMimetype);\n        }\n\n        public class SimpleWrapper : IActionBehavior\n        {\n            public Task Invoke()\n            {\n                throw new NotImplementedException();\n            }\n\n            public Task InvokePartial()\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        public class AnotherWrapper : IActionBehavior\n        {\n            public Task Invoke()\n            {\n                throw new NotImplementedException();\n            }\n\n            public Task InvokePartial()\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        public class Input{}\n        public class Output{}\n\n        public class FakeEndpoint\n        {\n            public Output get_something(Input input)\n            {\n                return null;\n            }\n\n            public Output get_another(Input input)\n            {\n                return null;\n            }\n\n            public Output get_third(Input input)\n            {\n                return null;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/Runtime/ApplyTracingIntegrationTesting.cs",
    "content": "using System.Linq;\nusing System.Threading.Tasks;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Diagnostics.Runtime\n{\n    [TestFixture]\n    public class ApplyTracingIntegrationTesting\n    {\n        private RoutedChain chain1;\n        private BehaviorChain chain2;\n\n        [SetUp]\n        public void SetUp()\n        {\n            var registry = new FubuRegistry();\n            registry.Configure(graph =>\n            {\n                chain1 = new RoutedChain(\"something\");\n                chain1.AddToEnd(Wrapper.For<SimpleBehavior>());\n                chain1.AddToEnd(Wrapper.For<DifferentBehavior>());\n                graph.AddChain(chain1);\n\n                chain2 = new BehaviorChain();\n                chain2.IsPartialOnly = true;\n                chain2.AddToEnd(Wrapper.For<SimpleBehavior>());\n                chain2.AddToEnd(Wrapper.For<DifferentBehavior>());\n                graph.AddChain(chain2);\n            });\n\n            registry.Features.Diagnostics.Enable(TraceLevel.Verbose);\n\n\n            BehaviorGraph.BuildFrom(registry);\n        }\n\n        [Test]\n        public void do_nothing_if_tracing_is_off()\n        {\n            var registry = new FubuRegistry();\n            registry.Features.Diagnostics.Enable(TraceLevel.None);\n            registry.Configure(graph =>\n            {\n                chain1 = new RoutedChain(\"something\");\n                chain1.AddToEnd(Wrapper.For<SimpleBehavior>());\n                chain1.AddToEnd(Wrapper.For<DifferentBehavior>());\n                graph.AddChain(chain1);\n\n                chain2 = new BehaviorChain();\n                chain2.IsPartialOnly = true;\n                chain2.AddToEnd(Wrapper.For<SimpleBehavior>());\n                chain2.AddToEnd(Wrapper.For<DifferentBehavior>());\n                graph.AddChain(chain2);\n            });\n\n\n            var notTracedGraph = BehaviorGraph.BuildFrom(registry);\n            notTracedGraph.Chains.SelectMany(x => x).Any(x => x is BehaviorTracerNode).ShouldBeFalse();\n        }\n\n        [Test]\n        public void full_chain()\n        {\n            chain1.ElementAt(0).ShouldBeOfType<BehaviorTracerNode>();\n            chain1.ElementAt(1).ShouldBeOfType<Wrapper>();\n            chain1.ElementAt(2).ShouldBeOfType<BehaviorTracerNode>();\n            chain1.ElementAt(3).ShouldBeOfType<Wrapper>();\n        }\n\n        [Test]\n        public void partial_chain_should_not_have_diagnostic_behavior()\n        {\n            chain2.ElementAt(0).ShouldBeOfType<BehaviorTracerNode>();\n            chain2.ElementAt(1).ShouldBeOfType<Wrapper>();\n            chain2.ElementAt(2).ShouldBeOfType<BehaviorTracerNode>();\n            chain2.ElementAt(3).ShouldBeOfType<Wrapper>();\n        }\n\n\n        public class SimpleBehavior : IActionBehavior\n        {\n            public Task Invoke()\n            {\n                return Task.CompletedTask;\n            }\n\n            public Task InvokePartial()\n            {\n                return Task.CompletedTask;\n            }\n        }\n\n        public class DifferentBehavior : SimpleBehavior\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/Runtime/BehaviorTracerNodeTester.cs",
    "content": "using System;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Registration.Nodes;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Diagnostics.Runtime\n{\n    [TestFixture]\n    public class BehaviorTracerNodeTester\n    {\n        private Wrapper inner;\n        private BehaviorChain chain;\n        private BehaviorTracerNode theNode;\n\n        [SetUp]\n        public void SetUp()\n        {\n            inner = Wrapper.For<SimpleBehavior>();\n            chain = new BehaviorChain();\n\n            chain.AddToEnd(inner);\n\n            theNode = new BehaviorTracerNode(inner);\n        }\n\n        [Test]\n        public void should_put_itself_before_the_inner_node()\n        {\n            theNode.Next.ShouldBeTheSameAs(inner);\n        }\n\n        [Test]\n        public void category_has_to_be_instrumentation()\n        {\n            theNode.Category.ShouldBe(BehaviorCategory.Instrumentation);\n        }\n\n\n        public class SimpleBehavior : IActionBehavior\n        {\n            public Task Invoke()\n            {\n                throw new NotImplementedException();\n            }\n\n            public Task InvokePartial()\n            {\n                throw new NotImplementedException();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/Runtime/BehaviorTracer_and_DiagnosticBehavior_construction_testing.cs",
    "content": "using System;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.StructureMap;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Tests.Diagnostics.Runtime\n{\n    [TestFixture]\n    public class BehaviorTracer_and_DiagnosticBehavior_construction_testing\n    {\n        private BehaviorChain theChain;\n        private Guid theOriginalGuid;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theChain = new BehaviorChain();\n            var action = ActionCall.For<Controller1>(x => x.Go(null));\n            theChain.AddToEnd(action);\n\n            theOriginalGuid = action.UniqueId;\n        }\n\n\n\n        [Test]\n        public void creating_an_object_def_for_full_tracing_should_wrap_with_a_behavior_tracer()\n        {\n            var node = new Wrapper(typeof (SimpleBehavior));\n            var instance = new BehaviorTracerNode(node).As<IContainerModel>().ToInstance().As<IConfiguredInstance>();\n\n            instance.PluggedType.ShouldBe(typeof (BehaviorTracer));\n            instance.FindDependencyDefinitionFor<IActionBehavior>()\n                .ReturnedType.ShouldBe(typeof (SimpleBehavior));\n        }\n\n\n        public class SimpleBehavior : IActionBehavior\n        {\n            public Task Invoke()\n            {\n                return Task.CompletedTask;\n            }\n\n            public Task InvokePartial()\n            {\n                return Task.CompletedTask;\n            }\n        }\n\n        public class DifferentBehavior : SimpleBehavior\n        {\n        }\n\n\n        public class Controller1\n        {\n            public void Go(Input1 input)\n            {\n            }\n\n            public class Input1\n            {\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/Runtime/Diagnostic_tracing_attachment_filtering_Tester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Diagnostics.Endpoints;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Registration;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Diagnostics.Runtime\n{\n    [TestFixture]\n    public class Diagnostic_tracing_attachment_filtering_Tester\n    {\n        #region Setup/Teardown\n\n        [SetUp]\n        public void setup()\n        {\n            theGraph = BehaviorGraph.BuildFrom(x =>\n            {\n                x.Mode = \"development\";\n\n                x.Actions.IncludeType<SomeEndpoints>();\n                x.Actions.IncludeType<OtherEndpoints>();\n                x.Actions.IncludeType<EndpointExplorerFubuDiagnostics>();\n\n                \n            });\n        }\n\n        #endregion\n\n        private BehaviorGraph theGraph;\n\n\n        [Test]\n        public void should_be_attached_to_normal_endpoints()\n        {\n            theGraph.ChainFor<SomeEndpoints>(x => x.M1(null)).First().ShouldBeOfType<BehaviorTracerNode>();\n            theGraph.ChainFor<SomeEndpoints>(x => x.M2(null)).First().ShouldBeOfType<BehaviorTracerNode>();\n        }\n\n\n        [Test]\n        public void should_not_attach_to_endpoints_marked_by_No_diagnostics_on_method()\n        {\n            theGraph.ChainFor<SomeEndpoints>(x => x.M3(null)).First().ShouldNotBeOfType<BehaviorTracerNode>();\n        }\n\n        [Test]\n        public void should_not_attach_to_endpoint_classes_marked_by_NoDiagnostics_on_class()\n        {\n            theGraph.ChainFor<OtherEndpoints>(x => x.M1(null)).First().ShouldNotBeOfType<BehaviorTracerNode>();\n            theGraph.ChainFor<OtherEndpoints>(x => x.M2(null)).First().ShouldNotBeOfType<BehaviorTracerNode>();\n        }\n\n\n        public class SomeEndpoints\n        {\n            public void M1(Input1 input){}\n            public void M2(Input2 input){}\n\n            [NoDiagnostics]\n            public void M3(Input3 input){}\n        }\n\n        [NoDiagnostics]\n        public class OtherEndpoints\n        {\n            public Output1 M1(Input1 input)\n            {\n                return null;\n            }\n\n            public Output2 M2(Input2 input)\n            {\n                return null;\n            }\n        }\n\n        public class Input1{}\n        public class Input2{}\n        public class Input3{}\n\n        public class Output1{}\n        public class Output2{}\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/Runtime/Tracing_is_not_applied_to_chains_that_are_tagged_no_tracing.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Diagnostics.Runtime\n{\n    [TestFixture]\n    public class Tracing_is_not_applied_to_chains_that_are_tagged_no_tracing\n    {\n        [Test]\n        public void not_applied_when_no_tracing_tag_is_on_the_chain()\n        {\n            using (var runtime = FubuRuntime.Basic(_ => _.Mode = \"development\"))\n            {\n                var graph = runtime.Get<BehaviorGraph>();\n\n                graph.ChainFor<NotTracedEndpoint>(x => x.get_nothing())\n                    .OfType<BehaviorTracerNode>()\n                    .Any()\n                    .ShouldBeFalse();\n\n\n                graph.ChainFor<NotTracedEndpoint>(x => x.get_something())\n                    .OfType<BehaviorTracerNode>()\n                    .Any()\n                    .ShouldBeFalse();\n\n                graph.ChainFor<SomeTracingEndpoint>(x => x.get_tracing_no())\n                    .OfType<BehaviorTracerNode>()\n                    .Any()\n                    .ShouldBeFalse();\n\n\n                graph.ChainFor<SomeTracingEndpoint>(x => x.get_tracing_yes())\n                    .OfType<BehaviorTracerNode>()\n                    .Any()\n                    .ShouldBeTrue();\n            }\n        }\n    }\n\n    [Tag(BehaviorChain.NoTracing)]\n    public class NotTracedEndpoint\n    {\n        public string get_nothing()\n        {\n            return \"nothing\";\n        }\n\n        public string get_something()\n        {\n            return \"something\";\n        }\n    }\n\n    public class SomeTracingEndpoint\n    {\n        public string get_tracing_yes()\n        {\n            return \"yes\";\n        }\n\n        [Tag(BehaviorChain.NoTracing)]\n        public string get_tracing_no()\n        {\n            return \"no\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/Visualization/Visualizers/ModelBindingLogEndpointTester.cs",
    "content": "using System;\nusing FubuCore.Binding;\nusing FubuCore.Binding.Logging;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.Diagnostics.Runtime;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Diagnostics.Visualization.Visualizers\n{\n    [TestFixture]\n    public class ModelBindingLogEndpointTester\n    {\n        private ModelBindingLog theLog;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theLog = new ModelBindingLog\n            {\n                Report = new BindingReport(typeof (FakeModel), new FakeModelBinder())\n            };\n        }\n    }\n\n    public class FakeModel\n    {\n        public string Name { get; set; }\n    }\n\n    [Title(\"Title of FakeModelBinder\")]\n    public class FakeModelBinder : IModelBinder\n    {\n        public bool Matches(Type type)\n        {\n            throw new NotImplementedException();\n        }\n\n        public object Bind(Type type, IBindingContext context)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Diagnostics/apply_authorization_rights_to_all_diagnostics_pages.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.Diagnostics;\nusing FubuMVC.Core.Diagnostics.Endpoints;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Diagnostics\n{\n    [TestFixture]\n    public class apply_authorization_rights_to_all_diagnostics_pages\n    {\n        [Test]\n        public void should_be_applied_to_all()\n        {\n            using (var runtime = FubuRuntime.For<AuthorizedRegistry>(_ => _.Mode = \"development\"))\n            {\n                runtime.Behaviors.ChainFor<FubuDiagnosticsEndpoint>(x => x.get__fubu()).Authorization.AllowedRoles().ShouldContain(\"admin\");\n                runtime.Behaviors.ChainFor<EndpointExplorerFubuDiagnostics>(x => x.get_endpoints()).Authorization.AllowedRoles().ShouldContain(\"admin\");\n            }\n        }\n    }\n\n    public class AuthorizedRegistry : FubuRegistry\n    {\n        public AuthorizedRegistry()\n        {\n            AlterSettings<DiagnosticsSettings>(x => x.RestrictToRole(\"admin\"));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/DiagnosticsSettingsTester.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Security.Authorization;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class DiagnosticsSettingsTester\r\n    {\r\n        [Test]\r\n        public void default_request_count_is_1000()\r\n        {\r\n            new DiagnosticsSettings()\r\n                .MaxRequests.ShouldBe(1000);\r\n        }\r\n\r\n        [Test]\r\n        public void add_role()\r\n        {\r\n            var settings = new DiagnosticsSettings();\r\n            settings.RestrictToRole(\"admin\");\r\n\r\n            settings.AuthorizationRights.Single().ShouldBeOfType<AllowRole>()\r\n                .Role.ShouldBe(\"admin\");\r\n        }\r\n\r\n        [Test]\r\n        public void the_default_trace_level_is_verbose()\r\n        {\r\n            new DiagnosticsSettings()\r\n                .TraceLevel.ShouldBe(TraceLevel.None);\r\n        }\r\n\r\n        [Test]\r\n        public void can_override()\r\n        {\r\n            var settings = new DiagnosticsSettings();\r\n            settings.SetIfNone(TraceLevel.Verbose);\r\n\r\n            settings.TraceLevel.ShouldBe(TraceLevel.Verbose);\r\n\r\n            settings.SetIfNone(TraceLevel.Production);\r\n\r\n            settings.TraceLevel.ShouldBe(TraceLevel.Verbose);\r\n        }\r\n\r\n        [Test]\r\n        public void level_is_verbose_in_development()\r\n        {\r\n            using (var runtime = FubuRuntime.Basic(_ => _.Mode = \"development\"))\r\n            {\r\n                runtime.Get<DiagnosticsSettings>()\r\n                    .TraceLevel.ShouldBe(TraceLevel.Verbose);\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void if_disabled_just_return_inner_app_func()\r\n        {\r\n            Func<IDictionary<string, object>, Task> inner = d => Task.Factory.StartNew(() => { });\r\n\r\n            var settings = new DiagnosticsSettings {TraceLevel = TraceLevel.None};\r\n            settings.WrapAppFunc(null, inner).ShouldBeSameAs(inner);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Docs/Introduction/Overview/HomeEndpoint.cs",
    "content": "﻿using System;\r\n\r\nnamespace FubuMVC.Tests.Docs.Introduction.Overview\r\n{\r\n    // SAMPLE: overview-homecontroller\r\n    // The suffix \"Endpoint\" is a default\r\n    // convention of FubuMVC.  \r\n    public class HomeEndpoint\r\n    {\r\n        // By returning \r\n        public HomeViewModel Index()\r\n        {\r\n            return new HomeViewModel();\r\n        }\r\n\r\n        public string get_hello()\r\n        {\r\n            return \"Hello!\";\r\n        }\r\n\r\n        public Response post_update(Request request)\r\n        {\r\n            return new Response();\r\n        }\r\n    }\r\n\r\n    public class Request{}\r\n    public class Response{}\r\n\r\n    public class HomeViewModel\r\n    {\r\n    }\r\n    // ENDSAMPLE\r\n\r\n    // SAMPLE: models\r\n    public class InputModel\r\n    {\r\n        public Guid Id { get; set; }\r\n    }\r\n\r\n    public class OutputModel\r\n    {\r\n        public string Statue { get; set; }\r\n    }\r\n\r\n    // 'ViewModel' just means an object that is\r\n    // consumed by a matching Spark or Razor view\r\n    public class ViewModel\r\n    {\r\n        public string Title { get; set; }\r\n        public string FirstName { get; set; }\r\n        public string LastName { get; set; }\r\n    }\r\n    // ENDSAMPLE\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Docs/Topics/Authorization/AuthorizationPolicyController.cs",
    "content": "﻿namespace FubuMVC.Tests.Docs.Topics.Authorization\r\n{\r\n    // SAMPLE: allowrole-samplecontroller\r\n    public class InventoryItemController\r\n    {\r\n        public void ChangeDescription(UpdateDescriptionRoleModel input)\r\n        {\r\n            //logic\r\n        }\r\n    }\r\n    // ENDSAMPLE\r\n\r\n    public class UpdateDescriptionRoleModel\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Docs/Topics/Authorization/Controller.cs",
    "content": "﻿using FubuMVC.Core.Security;\r\nusing FubuMVC.Core.Security.Authorization;\r\n\r\nnamespace FubuMVC.Tests.Docs.Topics.Authorization\r\n{\r\n    // SAMPLE: allowrole-attribute\r\n    [AllowRole(\"CanI\")]\r\n    public class Controller\r\n    {\r\n        [AllowRole(\"MayI\", \"AllowMe\")]\r\n        public void RestrictedAction(RestrictedInputModel input)\r\n        {\r\n            //logic\r\n        }\r\n    }\r\n    // ENDSAMPLE\r\n\r\n    public class RestrictedInputModel\r\n    {\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Docs/Topics/Authorization/ProductController.cs",
    "content": "﻿using FubuMVC.Core.Security;\r\nusing FubuMVC.Core.Security.Authorization;\r\n\r\nnamespace FubuMVC.Tests.Docs.Topics.Authorization\r\n{\r\n    // SAMPLE: authorization-authorizedby\r\n    public class ProductController\r\n    {\r\n        [AuthorizedBy(typeof(PurchasedProductPolicy))]\r\n        public void SaveReview(ReviewInputModel input)\r\n        {\r\n            //logic\r\n        }\r\n    }\r\n    // ENDSAMPLE\r\n\r\n    public class ReviewInputModel\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Docs/Topics/Authorization/PurchaseProductAuthorizationPolicy.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuMVC.Core.Registration;\r\n\r\nnamespace FubuMVC.Tests.Docs.Topics.Authorization\r\n{\r\n  // SAMPLE: authorization-convention\r\n  public class PurchasedProductAuthorizationPolicy : IConfigurationAction\r\n  {\r\n      public void Configure(BehaviorGraph graph)\r\n      {\r\n          graph.Actions()\r\n              .Where(x => x.Method.Name.EndsWith(\"Review\"))\r\n              .Each(x => x.ParentChain().Authorization.AddPolicy(new PurchasedProductPolicy()));\r\n      }\r\n  }\r\n  // ENDSAMPLE\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Docs/Topics/Authorization/PurchasedProductPolicy.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Security;\r\nusing FubuMVC.Core.Security.Authorization;\r\n\r\nnamespace FubuMVC.Tests.Docs.Topics.Authorization\r\n{\r\n    // SAMPLE: authorization-policy\r\n    public class PurchasedProductPolicy : IAuthorizationPolicy\r\n    {\r\n        public AuthorizationRight RightsFor(IFubuRequestContext request)\r\n        {\r\n            var customerId = request.Models.Get<Customer>().Id;\r\n            var productId = request.Models.Get<Product>().Id;\r\n\r\n            var hasPurchasedProduct = request.Service<IRepository>().Get<IPurchaseHistory>(customerId)\r\n                .Any(x => x.ContainsProduct(productId));\r\n\r\n            return !hasPurchasedProduct ? AuthorizationRight.Deny : AuthorizationRight.Allow;\r\n        }\r\n    }\r\n    // ENDSAMPLE\r\n\r\n    public class Customer\r\n    {\r\n        public object Id { get; set; }\r\n    }\r\n\r\n    public class Product\r\n    {\r\n        public object Id { get; set; }\r\n    }\r\n\r\n    public interface IRepository\r\n    {\r\n        IEnumerable<IPurchaseHistory> Get<T>(object customerId);\r\n    }\r\n\r\n    public interface IPurchaseHistory\r\n    {\r\n        bool ContainsProduct(object productId);\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Docs/Topics/Authorization/RoleModelAuthorizationPolicy.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuMVC.Core.Registration;\r\n\r\nnamespace FubuMVC.Tests.Docs.Topics.Authorization\r\n{\r\n\r\n    // SAMPLE: allowrole-rolemodel\r\n    public class RoleModelAuthorizationPolicy : IConfigurationAction\r\n    {\r\n        public void Configure(BehaviorGraph graph)\r\n        {\r\n            graph.Actions()\r\n                 .Where(x => x.HasInput && x.InputType().Name.EndsWith(\"RoleModel\"))\r\n                 .Each(x =>\r\n                 {\r\n                     var roleName = x.InputType().Name.Replace(\"RoleModel\", string.Empty);\r\n                     x.ParentChain().Authorization.AddRole(roleName);\r\n                 });\r\n        }\r\n    }\r\n    // ENDSAMPLE\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Downloads/when_downloading_a_file_with_force_browser_dialog.cs",
    "content": "﻿using FubuMVC.Core.Downloads;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Downloads\n{\n    [TestFixture]\n    public class when_downloading_a_file_with_force_browser_dialog : InteractionContext<DownloadFileBehavior>\n    {\n        private DownloadFileModel _output;\n\n        protected override void beforeEach()\n        {\n            _output = new DownloadFileModel\n            {\n                ContentType = \"image/jpeg\",\n                FileNameToDisplay = \"displayname\",\n                LocalFileName = \"filename.jpg\"\n            };\n\n            MockFor<IFubuRequest>().Expect(x => x.Get<DownloadFileModel>()).Return(_output);\n\n            ClassUnderTest.Invoke();\n        }\n\n        [Test]\n        public void should_set_content_type_correctly()\n        {\n            MockFor<IOutputWriter>().AssertWasCalled(w => w.WriteFile(\"image/jpeg\", \"filename.jpg\", \"displayname\"));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Downloads/when_downloading_a_file_without_forcing_browser_dialog.cs",
    "content": "﻿using FubuMVC.Core.Downloads;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Downloads\n{\n    [TestFixture]\n    public class when_downloading_a_file_without_forcing_browser_dialog : InteractionContext<DownloadFileBehavior>\n    {\n        private DownloadFileModel _output;\n\n        protected override void beforeEach()\n        {\n            _output = new DownloadFileModel\n            {\n                ContentType = \"image/jpeg\",\n                LocalFileName = \"filename.jpg\"\n            };\n\n            MockFor<IFubuRequest>().Expect(x => x.Get<DownloadFileModel>()).Return(_output);\n\n            ClassUnderTest.Invoke();\n        }\n\n        [Test]\n        public void should_set_content_type_correctly()\n        {\n            MockFor<IOutputWriter>().AssertWasCalled(w => w.WriteFile(\"image/jpeg\", \"filename.jpg\", null));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Environment/FileExistsTester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Environment;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Environment\n{\n    [TestFixture]\n    public class FileExistsTester\n    {\n        [Test]\n        public void positive_test()\n        {\n            new FileSystem().WriteStringToFile(\"file.txt\", \"anything\");\n\n            var log = new ActivationLog();\n\n            var requirement = new FileExists(\"file.txt\");\n\n            requirement.Check(log);\n\n            log.Success.ShouldBeTrue();\n            log.FullTraceText().ShouldContain(\"File 'file.txt' exists\");\n        }\n\n        [Test]\n        public void negative_test()\n        {\n            var log = new ActivationLog();\n\n            var file = Guid.NewGuid().ToString() + \".txt\";\n            var requirement = new FileExists(file);\n\n            requirement.Check(log);\n\n            log.Success.ShouldBeFalse();\n            log.FullTraceText().ShouldContain(\"File '{0}' does not exist!\".ToFormat(file));\n        }\n\n        [Test]\n        public void positive_test_with_generic()\n        {\n            new FileSystem().WriteStringToFile(\"file.txt\", \"anything\");\n            var settings = new FileSettings\n            {\n                File = \"file.txt\"\n            };\n\n            var log = new ActivationLog();\n\n            var requirement = new FileExists<FileSettings>(x => x.File, settings);\n\n            requirement.Check(log);\n\n            log.Success.ShouldBeTrue();\n            log.FullTraceText().ShouldContain(\"File 'file.txt' defined by FileSettings.File exists\");\n        }\n\n        [Test]\n        public void negative_test_with_settings()\n        {\n            var log = new ActivationLog();\n\n            var file = Guid.NewGuid().ToString() + \".txt\";\n            var settings = new FileSettings\n            {\n                File = file\n            };\n\n            var requirement = new FileExists<FileSettings>(x => x.File, settings);\n\n\n            requirement.Check(log);\n\n            log.Success.ShouldBeFalse();\n            log.FullTraceText().ShouldContain(\"File '{0}' defined by FileSettings.File does not exist!\".ToFormat(file));\n        }\n\n    }\n\n    public class FileSettings\n    {\n        public string File { get; set; }\n        public string Folder { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Environment/FolderExistsTester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Environment;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Environment\n{\n    [TestFixture]\n    public class FolderExistsTester\n    {\n        [Test]\n        public void positive_test()\n        {\n            new FileSystem().CreateDirectory(\"foo\");\n\n            var log = new ActivationLog();\n\n            var requirement = new FolderExists(\"foo\");\n\n            requirement.Check(log);\n\n            log.Success.ShouldBeTrue();\n            log.FullTraceText().ShouldContain(\"Folder 'foo' exists\");\n        }\n\n        [Test]\n        public void negative_test()\n        {\n            var log = new ActivationLog();\n\n            var folder = Guid.NewGuid().ToString();\n            var requirement = new FolderExists(folder);\n\n            requirement.Check(log);\n\n            log.Success.ShouldBeFalse();\n            log.FullTraceText().ShouldContain(\"Folder '{0}' does not exist!\".ToFormat(folder));\n        }\n\n        [Test]\n        public void positive_test_with_generic()\n        {\n            new FileSystem().CreateDirectory(\"foo\");\n            var settings = new FileSettings\n            {\n                Folder = \"foo\"\n            };\n\n            var log = new ActivationLog();\n\n            var requirement = new FolderExists<FileSettings>(x => x.Folder, settings);\n\n            requirement.Check(log);\n\n            log.Success.ShouldBeTrue();\n            log.FullTraceText().ShouldContain(\"Folder 'foo' defined by FileSettings.Folder exists\");\n        }\n\n        [Test]\n        public void negative_test_with_settings()\n        {\n            var log = new ActivationLog();\n\n            var folder = Guid.NewGuid().ToString();\n            var settings = new FileSettings\n            {\n                Folder = folder\n            };\n\n            var requirement = new FolderExists<FileSettings>(x => x.Folder, settings);\n\n\n            requirement.Check(log);\n\n            log.Success.ShouldBeFalse();\n            log.FullTraceText().ShouldContain(\"Folder '{0}' defined by FileSettings.Folder does not exist!\".ToFormat(folder));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/FakeHttpContext.cs",
    "content": "﻿using System.Web;\n\nnamespace FubuMVC.Tests\n{\n    public class FakeHttpContext : HttpContextBase\n    {\n         \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/FixieConventions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing Fixie;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing NUnit.Framework;\n\nnamespace NUnit.Framework\n{\n    public class TestFixtureAttribute : Attribute { }\n    public class TestAttribute : Attribute { }\n\n    public class ExplicitAttribute : Attribute\n    {\n        private readonly string _description;\n\n        public ExplicitAttribute()\n        {\n        }\n\n        public ExplicitAttribute(string description)\n        {\n            _description = description;\n        }\n\n        public string description\n        {\n            get { return _description; }\n        }\n    }\n    public class TestFixtureSetUpAttribute : Attribute { }\n    public class SetUpAttribute : Attribute { }\n    public class TearDownAttribute : Attribute { }\n    public class TestFixtureTearDownAttribute : Attribute { }\n\n    public static class Assert\n    {\n        public static void Fail(string message, params object[] parameters)\n        {\n            throw new Exception(message.ToFormat(parameters));\n        }\n\n\n    }\n}\n\nnamespace FubuMVC.Tests\n{\n\n    public class CustomConvention : Convention\n    {\n        public CustomConvention()\n        {\n            Classes\n                .HasOrInherits<TestFixtureAttribute>().Where(type => !type.HasAttribute<ExplicitAttribute>());\n\n            Methods\n                .HasOrInherits<TestAttribute>().Where(m => !m.HasAttribute<ExplicitAttribute>());\n\n            ClassExecution\n                    .CreateInstancePerClass()\n                    .SortCases((caseA, caseB) => String.Compare(caseA.Name, caseB.Name, StringComparison.Ordinal));\n\n            FixtureExecution\n                .Wrap<FixtureSetUpTearDown>();\n\n            CaseExecution\n                .Wrap<SetUpTearDown>();\n        }\n    }\n\n\n    class SetUpTearDown : CaseBehavior\n    {\n        public void Execute(Case @case, Action next)\n        {\n            @case.Class.InvokeAll<SetUpAttribute>(@case.Fixture.Instance);\n            next();\n            @case.Class.InvokeAll<TearDownAttribute>(@case.Fixture.Instance);\n        }\n    }\n\n    class FixtureSetUpTearDown : FixtureBehavior\n    {\n\n        public void Execute(Fixie.Fixture fixture, Action next)\n        {\n            fixture.Class.Type.InvokeAll<TestFixtureSetUpAttribute>(fixture.Instance);\n            next();\n            fixture.Class.Type.InvokeAll<TestFixtureTearDownAttribute>(fixture.Instance);\n        }\n    }\n\n    public static class BehaviorBuilderExtensions\n    {\n        public static void InvokeAll<TAttribute>(this Type type, object instance)\n            where TAttribute : Attribute\n        {\n            foreach (var method in Has<TAttribute>(type))\n            {\n                try\n                {\n                    method.Invoke(instance, null);\n                }\n                catch (TargetInvocationException exception)\n                {\n                    throw new PreservedException(exception.InnerException);\n                }\n            }\n        }\n\n        static IEnumerable<MethodInfo> Has<TAttribute>(Type type) where TAttribute : Attribute\n        {\n            return type.GetMethods(BindingFlags.Public | BindingFlags.Instance)\n                .Where(x => x.HasOrInherits<TAttribute>());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/FubuApplicationTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Diagnostics;\r\nusing FubuMVC.Core.Registration;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class FubuApplicationTester\r\n    {\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            var system = new FileSystem();\r\n            system.FindFiles(\".\".ToFullPath(), new FileSet\r\n            {\r\n                Include = \"*.asset.config;*.script.config\"\r\n            }).ToList().Each(system.DeleteFile);\r\n        }\r\n\r\n        [Test]\r\n        public void the_restarted_property_is_set()\r\n        {\r\n            var floor = DateTime.Now.AddSeconds(-5);\r\n            var ceiling = DateTime.Now.AddSeconds(5);\r\n\r\n\r\n            using (var runtime = FubuRuntime.Basic())\r\n            {\r\n                (floor < runtime.Restarted && runtime.Restarted < ceiling).ShouldBeTrue();\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void description_smoke_tester()\r\n        {\r\n            using (var runtime = FubuRuntime.Basic())\r\n            {\r\n                var description = FubuApplicationDescriber.WriteDescription(runtime.ActivationDiagnostics, runtime);\r\n\r\n                Console.WriteLine(description);\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void can_use_the_default_policies()\r\n        {\r\n            var application = FubuRuntime.Basic();\r\n            var graph = application.Get<BehaviorGraph>();\r\n\r\n            graph.ChainFor<TargetEndpoint>(x => x.get_hello()).ShouldNotBeNull();\r\n        }\r\n    }\r\n\r\n    public class TargetEndpoint\r\n    {\r\n        public string get_hello()\r\n        {\r\n            return \"Hello\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/FubuApplication_registers_the_FubuRuntime_in_bootstrap.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class FubuApplication_registers_the_FubuRuntime_in_bootstrap\r\n    {\r\n        [Test]\r\n        public void runtime_is_in_the_container_and_does_not_cause_a_stackoverflow_when_it_disposes()\r\n        {\r\n            using (var runtime = FubuRuntime.Basic())\r\n            {\r\n                runtime.Get<FubuRuntime>()\r\n                    .ShouldBeTheSameAs(runtime);\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/FubuBootstrapperIntegrationTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Web.Routing;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Handlers;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing StructureMap;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class FubuBootstrapperIntegrationTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            registry = new FubuRegistry(x => { x.Actions.IncludeType<TestController>(); });\r\n\r\n\r\n            container = new Container(x =>\r\n            {\r\n                x.For<ICurrentChain>().Use(new CurrentChain(null, null));\r\n                x.For<IHttpRequest>().Use(OwinHttpRequest.ForTesting());\r\n            });\r\n\r\n            registry.StructureMap(container);\r\n            registry.RootPath = AppDomain.CurrentDomain.BaseDirectory;\r\n\r\n            fubuRuntime = registry.ToRuntime();\r\n            routes = fubuRuntime\r\n                .Routes\r\n                .Where(r => !r.As<Route>().Url.StartsWith(\"_content\"))\r\n                .ToList();\r\n\r\n            container.Configure(x => x.For<IOutputWriter>().Use(new InMemoryOutputWriter()));\r\n        }\r\n\r\n        [TearDown]\r\n        public void TearDown()\r\n        {\r\n            fubuRuntime.Dispose();\r\n        }\r\n\r\n        #endregion\r\n\r\n        private FubuRegistry registry;\r\n        private Container container;\r\n        private IList<RouteBase> routes;\r\n        private FubuRuntime fubuRuntime;\r\n\r\n        [Test]\r\n        public void should_have_a_route_in_the_RouteCollection_with_a_Fubu_RouteHandler_for_each_route_in_the_registry()\r\n        {\r\n            routes.Each(x => x.ShouldBeOfType<Route>().RouteHandler.ShouldBeOfType<FubuRouteHandler>());\r\n        }\r\n\r\n        [Test]\r\n        public void should_have_registered_behaviors_in_the_container()\r\n        {\r\n            Debug.WriteLine(container.WhatDoIHave());\r\n\r\n            (container.Model.For<IActionBehavior>().Instances.Count() >= 6).ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void should_register_routes_in_order_of_the_number_of_their_inputs()\r\n        {\r\n            var urls = routes.OfType<Route>().Select(r => r.Url).Where(x => !x.Contains(\"hello\"));\r\n\r\n            // We're getting others in here because of the integration tests writing actionless views\r\n            var expected = new[]\r\n            {\r\n                \"area/sub2/prop\",\r\n                \"area/sub4/some_pattern\",\r\n                \"area/sub2/{Name}\",\r\n                \"area/sub/{Name}/{Age}\",\r\n                \"area/sub2/{Name}/{Age}\",\r\n                \"area/sub3/{Name}/{Age}\"\r\n            };\r\n\r\n            urls.Where(x => expected.Contains(x)).ShouldHaveTheSameElementsAs(\r\n                expected);\r\n        }\r\n\r\n        public class TestController\r\n        {\r\n            [UrlPattern(\"area/sub2/prop\")]\r\n            public TestOutputModel Index()\r\n            {\r\n                return new TestOutputModel();\r\n            }\r\n\r\n            [UrlPattern(\"area/sub/{Name}/{Age}\")]\r\n            public TestOutputModel SomeAction(TestInputModel value)\r\n            {\r\n                return new TestOutputModel\r\n                {\r\n                    Prop1 = value.Prop1\r\n                };\r\n            }\r\n\r\n            [UrlPattern(\"area/sub4/some_pattern\")]\r\n            public TestOutputModel SomeOtherAction(NotUsedModel not_used)\r\n            {\r\n                return new TestOutputModel();\r\n            }\r\n\r\n            [UrlPattern(\"area/sub2/{Name}/{Age}\")]\r\n            public TestOutputModel2 AnotherAction(TestInputModel value)\r\n            {\r\n                return new TestOutputModel2\r\n                {\r\n                    Prop1 = value.Prop1,\r\n                    Name = value.Name,\r\n                    Age = value.Age\r\n                };\r\n            }\r\n\r\n            [UrlPattern(\"area/sub3/{Name}/{Age}\")]\r\n            public TestOutputModel3 ThirdAction(TestInputModel value)\r\n            {\r\n                return new TestOutputModel3\r\n                {\r\n                    Prop1 = value.Prop1\r\n                };\r\n            }\r\n\r\n            [UrlPattern(\"area/sub2/{Name}\")]\r\n            public void RedirectAction(TestInputModel value)\r\n            {\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/FubuExtensionFinderTester.cs",
    "content": "﻿using System.Linq;\r\nusing System.Reflection;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\nusing FubuMVC.Core.Registration;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class FubuExtensionFinderTester\r\n    {\r\n        [Test]\r\n        public void do_not_import_extensions_marked_with_DoNotAutoImport()\r\n        {\r\n            var assembly = Assembly.GetExecutingAssembly();\r\n\r\n            var types = assembly.FindAllExtensions(new ActivationDiagnostics());\r\n\r\n            types.OfType<FubuExtensionFinder.Importer<GoodExtension>>().Any().ShouldBeTrue();\r\n            types.OfType<FubuExtensionFinder.Importer<NotAutoExtension>>().Any().ShouldBeFalse();\r\n\r\n        }\r\n    }\r\n\r\n    public class GoodExtension : IFubuRegistryExtension\r\n    {\r\n        public void Configure(FubuRegistry registry)\r\n        {\r\n            throw new System.NotImplementedException();\r\n        }\r\n    }\r\n\r\n    [DoNotAutoImport]\r\n    public class NotAutoExtension : IFubuRegistryExtension\r\n    {\r\n        public void Configure(FubuRegistry registry)\r\n        {\r\n            throw new System.NotImplementedException();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/FubuMVC.Tests.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>9.0.30729</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>FubuMVC.Tests</RootNamespace>\r\n    <AssemblyName>FubuMVC.Tests</AssemblyName>\r\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <TargetFrameworkProfile />\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\r\n    <Prefer32Bit>false</Prefer32Bit>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\r\n    <Prefer32Bit>false</Prefer32Bit>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"Fixie.TestDriven\">\r\n      <HintPath>..\\..\\packages\\Fixie\\lib\\net45\\Fixie.TestDriven.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Configuration\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"System.Runtime.Serialization\" />\r\n    <Reference Include=\"System.Security\" />\r\n    <Reference Include=\"System.ServiceModel\" />\r\n    <Reference Include=\"System.ServiceModel.Web\" />\r\n    <Reference Include=\"System.Web\" />\r\n    <Reference Include=\"System.Web.Abstractions\" />\r\n    <Reference Include=\"System.Web.Routing\" />\r\n    <Reference Include=\"System.Xml\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"..\\CommonAssemblyInfo.cs\">\r\n      <Link>Properties\\CommonAssemblyInfo.cs</Link>\r\n    </Compile>\r\n    <Compile Include=\"AboutEndpointTester.cs\" />\r\n    <Compile Include=\"AddressClasses.cs\" />\r\n    <Compile Include=\"AjaxExtensionsTester.cs\" />\r\n    <Compile Include=\"Ajax\\AjaxContinuationPolicyIntegratedTester.cs\" />\r\n    <Compile Include=\"Ajax\\AjaxContinuationTester.cs\" />\r\n    <Compile Include=\"Assets\\AssetSettingsTester.cs\" />\r\n    <Compile Include=\"Assets\\JavascriptRouterTester.cs\" />\r\n    <Compile Include=\"Assets\\ScriptTagTester.cs\" />\r\n    <Compile Include=\"Bugs\\DoubleRegistrationOfImports.cs\" />\r\n    <Compile Include=\"Bugs\\FubuPackageRegistry_should_honor_the_url_prefix.cs\" />\r\n    <Compile Include=\"Bugs\\Issue101.cs\" />\r\n    <Compile Include=\"Bugs\\Issue504.cs\" />\r\n    <Compile Include=\"client_message_mechanics_Tester.cs\" />\r\n    <Compile Include=\"ConfigurationActionSetTester.cs\" />\r\n    <Compile Include=\"ContainerExtensions.cs\" />\r\n    <Compile Include=\"deactivators_are_called_in_fuburuntime_dispose.cs\" />\r\n    <Compile Include=\"DiagnosticsSettingsTester.cs\" />\r\n    <Compile Include=\"Diagnostics\\apply_authorization_rights_to_all_diagnostics_pages.cs\" />\r\n    <Compile Include=\"Diagnostics\\Assets\\DiagnosticAssetsTester.cs\" />\r\n    <Compile Include=\"Diagnostics\\Bootstrapping_Integration_Testing.cs\" />\r\n    <Compile Include=\"Diagnostics\\DiagnosticChainTester.cs\" />\r\n    <Compile Include=\"Diagnostics\\DiagnosticSettings_TraceLevel_Registration_Tester.cs\" />\r\n    <Compile Include=\"Diagnostics\\FakeFubuDiagnostics.cs\" />\r\n    <Compile Include=\"Diagnostics\\HttpRequestSummaryTester.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\ActivityTester.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\BehaviorTracerTester.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\ChainExecutionHistoryTester.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\ChainExecutionListenerTester.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\ChainExecutionLogTester.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\PerformanceHistoryTester.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\ProductionExecutionLoggerTester.cs\" />\r\n    <Compile Include=\"Diagnostics\\Instrumentation\\VerboseExecutionLoggerTester.cs\" />\r\n    <Compile Include=\"Diagnostics\\InteractionContextExtensions.cs\" />\r\n    <Compile Include=\"Diagnostics\\PerfTimerSmokeTester.cs\" />\r\n    <Compile Include=\"Diagnostics\\Routes\\EndpointReportTester.cs\" />\r\n    <Compile Include=\"Diagnostics\\Runtime\\ApplyTracingIntegrationTesting.cs\" />\r\n    <Compile Include=\"Diagnostics\\Runtime\\BehaviorTracerNodeTester.cs\" />\r\n    <Compile Include=\"Diagnostics\\Runtime\\BehaviorTracer_and_DiagnosticBehavior_construction_testing.cs\" />\r\n    <Compile Include=\"Diagnostics\\Runtime\\Diagnostic_tracing_attachment_filtering_Tester.cs\" />\r\n    <Compile Include=\"Diagnostics\\Runtime\\Tracing_is_not_applied_to_chains_that_are_tagged_no_tracing.cs\" />\r\n    <Compile Include=\"Diagnostics\\Visualization\\Visualizers\\ModelBindingLogEndpointTester.cs\" />\r\n    <Compile Include=\"Docs\\Introduction\\Overview\\HomeEndpoint.cs\" />\r\n    <Compile Include=\"Docs\\Topics\\Authorization\\AuthorizationPolicyController.cs\" />\r\n    <Compile Include=\"Docs\\Topics\\Authorization\\Controller.cs\" />\r\n    <Compile Include=\"Docs\\Topics\\Authorization\\ProductController.cs\" />\r\n    <Compile Include=\"Docs\\Topics\\Authorization\\PurchasedProductPolicy.cs\" />\r\n    <Compile Include=\"Docs\\Topics\\Authorization\\PurchaseProductAuthorizationPolicy.cs\" />\r\n    <Compile Include=\"Docs\\Topics\\Authorization\\RoleModelAuthorizationPolicy.cs\" />\r\n    <Compile Include=\"Downloads\\when_downloading_a_file_without_forcing_browser_dialog.cs\" />\r\n    <Compile Include=\"Downloads\\when_downloading_a_file_with_force_browser_dialog.cs\" />\r\n    <Compile Include=\"Environment\\FileExistsTester.cs\" />\r\n    <Compile Include=\"Environment\\FolderExistsTester.cs\" />\r\n    <Compile Include=\"FixieConventions.cs\" />\r\n    <Compile Include=\"FubuApplication_registers_the_FubuRuntime_in_bootstrap.cs\" />\r\n    <Compile Include=\"FubuExtensionFinderTester.cs\" />\r\n    <Compile Include=\"Http\\Compression\\ContentCompressionExtensionTester.cs\" />\r\n    <Compile Include=\"Http\\Compression\\DeflateEncodingTester.cs\" />\r\n    <Compile Include=\"Http\\ConnegQuerystringTester.cs\" />\r\n    <Compile Include=\"Http\\ConnegSettingsTester.cs\" />\r\n    <Compile Include=\"Http\\Cookies\\CookieStateTester.cs\" />\r\n    <Compile Include=\"Http\\Cookies\\CookiesTester.cs\" />\r\n    <Compile Include=\"Http\\Cookies\\CookieTester.cs\" />\r\n    <Compile Include=\"Http\\Cookies\\CookieParserTester.cs\" />\r\n    <Compile Include=\"Http\\Cookies\\CookieValueSourceTester.cs\" />\r\n    <Compile Include=\"Http\\Cookies\\CookieValueTester.cs\" />\r\n    <Compile Include=\"Http\\Cookies\\SegmentTester.cs\" />\r\n    <Compile Include=\"Http\\CurrentHttpRequestExtensionsTester.cs\" />\r\n    <Compile Include=\"Http\\HeaderValueSourceTester.cs\" />\r\n    <Compile Include=\"Http\\Compression\\ContentEncodingTester.cs\" />\r\n    <Compile Include=\"Http\\Compression\\GZipEncodingTester.cs\" />\r\n    <Compile Include=\"Http\\Compression\\HttpContentEncodersTester.cs\" />\r\n    <Compile Include=\"Http\\Compression\\HttpContentEncodingFilterTester.cs\" />\r\n    <Compile Include=\"Http\\Hosting\\fuburuntime_scenario_support_Tester.cs\" />\r\n    <Compile Include=\"Http\\Owin\\CurrentHttpRequestExtensions_integration_with_OWIN_Tester.cs\" />\r\n    <Compile Include=\"Http\\Owin\\DictionaryExtensionsTester.cs\" />\r\n    <Compile Include=\"Http\\Owin\\FormRequestReaderTester.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\MiddlewareContinuationTester.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\StaticFiles\\DenyConfigRuleTester.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\StaticFiles\\StaticFileMiddlewareTester.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\StaticFiles\\WriteFileContinuationTester.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\StaticFiles\\WriteFileHeadContinuationTester.cs\" />\r\n    <Compile Include=\"Http\\Owin\\Middleware\\StaticFiles\\WriteStatusCodeContinuationTester.cs\" />\r\n    <Compile Include=\"Http\\Owin\\OwinHeaderSettingsTester.cs\" />\r\n    <Compile Include=\"Http\\Owin\\OwinHttpRequestTester.cs\" />\r\n    <Compile Include=\"Http\\Owin\\OwinCurrentHttpRequest_ClientConnectivityTester.cs\" />\r\n    <Compile Include=\"Http\\Owin\\OwinHttpResponseTester.cs\" />\r\n    <Compile Include=\"Http\\Owin\\OwinServiceArgumentsTester.cs\" />\r\n    <Compile Include=\"Http\\Owin\\OwinSettingsTester.cs\" />\r\n    <Compile Include=\"Http\\Owin\\OwnCurrentHttpRequestTester.cs\" />\r\n    <Compile Include=\"Http\\Owin\\OwnHttpWriterTester.cs\" />\r\n    <Compile Include=\"Http\\StreamExtensions.cs\" />\r\n    <Compile Include=\"Localization\\Basic\\AssemblyScannerTester.cs\" />\r\n    <Compile Include=\"Localization\\Basic\\LocalizationMissingHandlerTester.cs\" />\r\n    <Compile Include=\"Localization\\Basic\\LocalizationProviderFactoryIntegratedTester.cs\" />\r\n    <Compile Include=\"Localization\\ExampleKeys.cs\" />\r\n    <Compile Include=\"Localization\\fill_in_keys_on_string_token.cs\" />\r\n    <Compile Include=\"Localization\\LocalizationManagerTester.cs\" />\r\n    <Compile Include=\"Localization\\LocalStringTester.cs\" />\r\n    <Compile Include=\"Localization\\PropertyTokenTester.cs\" />\r\n    <Compile Include=\"Localization\\StringTokenStronglyTypedTester.cs\" />\r\n    <Compile Include=\"Localization\\StringTokenTester.cs\" />\r\n    <Compile Include=\"Localization\\StringTokenToLocalizationKeyTester.cs\" />\r\n    <Compile Include=\"Localization\\ThreadSafeLocaleCacheTester.cs\" />\r\n    <Compile Include=\"Localization\\XmlDirectoryLocalizationStorageTester.cs\" />\r\n    <Compile Include=\"Navigation\\AddAfterTester.cs\" />\r\n    <Compile Include=\"Navigation\\AddBeforeTester.cs\" />\r\n    <Compile Include=\"Navigation\\AddToMenuTester.cs\" />\r\n    <Compile Include=\"Navigation\\AdvancedNavigationRegistryInsertingTester.cs\" />\r\n    <Compile Include=\"Navigation\\AuthorizedContextualMenuTester.cs\" />\r\n    <Compile Include=\"Navigation\\ByNameTester.cs\" />\r\n    <Compile Include=\"Navigation\\Determining_MenuItemState_from_a_MenuNode.cs\" />\r\n    <Compile Include=\"Navigation\\LiteralTester.cs\" />\r\n    <Compile Include=\"Navigation\\MenuChainTester.cs\" />\r\n    <Compile Include=\"Navigation\\MenuItemAttributes_integrated_Tester.cs\" />\r\n    <Compile Include=\"Navigation\\MenuItemAttributeTester.cs\" />\r\n    <Compile Include=\"Navigation\\MenuItemStateTester.cs\" />\r\n    <Compile Include=\"Navigation\\MenuItemTokenTester.cs\" />\r\n    <Compile Include=\"Navigation\\MenuNodeTester.cs\" />\r\n    <Compile Include=\"Navigation\\MenuRegistrationTester.cs\" />\r\n    <Compile Include=\"Navigation\\NavigationGraphTester.cs\" />\r\n    <Compile Include=\"Navigation\\NavigationKeyTester.cs\" />\r\n    <Compile Include=\"Navigation\\NavigationRegistry_with_FubuRegistry_integration_testing.cs\" />\r\n    <Compile Include=\"Navigation\\NavigationServiceRegistry_specification.cs\" />\r\n    <Compile Include=\"Navigation\\NavigationServiceTester.cs\" />\r\n    <Compile Include=\"Registration\\ActionLessView_chain_source_specs.cs\" />\r\n    <Compile Include=\"Registration\\RouteCollectionTester.cs\" />\r\n    <Compile Include=\"Runtime\\Files\\ChangeSetTester.cs\" />\r\n    <Compile Include=\"Runtime\\Files\\StubFubuFile.cs\" />\r\n    <Compile Include=\"Runtime\\Files\\TrackedSetTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\bottle_configuration_integration_tester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Certificates\\BasicSamlCertificateIssuerRepositoryTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Certificates\\CertificateLoaderTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Certificates\\CertificateServiceTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Certificates\\SamlCertificateTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Encryption\\AssertionXmlDecryptorTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Encryption\\BigBangRoundTripWritingReadingAndEncryptionIntegratedTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\EnvironmentTestExtensionsTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\ObjectMother.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Saml2ServicesRegistry_specification.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlAuthenticationRegistryTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlDirectorTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlErrorTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlNameTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlResponseSettingsTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlResponseTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlResponseValidationRulesRegistrationTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\SamlStatusTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Validation\\AudienceValidationRuleTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Validation\\CertificateValidationTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Validation\\ConditionTimeFrameTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Validation\\SignatureIsRequiredTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Xml\\SamlResponseXmlReaderTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Saml2\\Xml\\SamlResponseXmlWriterTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Windows\\DefaultWindowsPrincipalHandlerTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Windows\\setup_with_windows_authentication.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Windows\\WindowsAuthenticationTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Windows\\WindowsControllerTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Windows\\WindowsSignInRequestTester.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\RequireRoleTester.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\ChannelTester.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\ChannelWriterTester.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\EventPublisherTester.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\EventQueryFactoryTester.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\ServerEventWriterTester.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\ServerSentEventExtensionIntegratedTester.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\ServicesRegistrationTester.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\SimpleEventQueueTester.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\TopicChannelCacheTester.cs\" />\r\n    <Compile Include=\"ServerSentEvents\\TopicFamilyTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\can_establish_a_control_queue.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingJobChainTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\CompositeContinuationConfigurationTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Serializers\\JsonMessageSerializerTester.cs\" />\r\n    <Compile Include=\"TestSupport\\GenericVoidMethod.cs\" />\r\n    <Compile Include=\"TestSupport\\InteractionContext.cs\" />\r\n    <Compile Include=\"Json\\ComplexType.cs\" />\r\n    <Compile Include=\"Json\\ComplexTypeConverter.cs\" />\r\n    <Compile Include=\"Json\\JObjectValuesTester.cs\" />\r\n    <Compile Include=\"Json\\NewtonSoftBindingReaderTester.cs\" />\r\n    <Compile Include=\"Json\\NewtonSoftJsonReaderTester.cs\" />\r\n    <Compile Include=\"Json\\ParentType.cs\" />\r\n    <Compile Include=\"Json\\when_deserializing_an_object.cs\" />\r\n    <Compile Include=\"Json\\when_serializing_an_object_without_metadata.cs\" />\r\n    <Compile Include=\"Json\\when_serializing_an_object_with_metadata.cs\" />\r\n    <Compile Include=\"Localization\\HtmlTagExtensionsTester.cs\" />\r\n    <Compile Include=\"Localization\\IntegratedBootstrappingTests.cs\" />\r\n    <Compile Include=\"Localization\\LocalizationBootstrappingTester.cs\" />\r\n    <Compile Include=\"Localization\\localization_is_disabled_by_default.cs\" />\r\n    <Compile Include=\"Localization\\SpinUpLocalizationCachesTester.cs\" />\r\n    <Compile Include=\"MockedFubuRequestContext.cs\" />\r\n    <Compile Include=\"Projections\\ChildProjectionTester.cs\" />\r\n    <Compile Include=\"Projections\\child_and_enumerable_children_sourced_by_services.cs\" />\r\n    <Compile Include=\"Projections\\DelegatingProjectionTester.cs\" />\r\n    <Compile Include=\"Projections\\DictionaryMediaNodeTester.cs\" />\r\n    <Compile Include=\"Projections\\EnumerableProjectionIntegratedTester.cs\" />\r\n    <Compile Include=\"Projections\\ExternallyFormattedValueProjectorTester.cs\" />\r\n    <Compile Include=\"Projections\\pascal_to_camel_casing_names_policy.cs\" />\r\n    <Compile Include=\"Projections\\ProjectionContextTester.cs\" />\r\n    <Compile Include=\"Projections\\ProjectionRunnerTester.cs\" />\r\n    <Compile Include=\"Projections\\ProjectMyself_handling_in_an_accessor_projection.cs\" />\r\n    <Compile Include=\"Projections\\SelfProjectingValueProjectorTester.cs\" />\r\n    <Compile Include=\"Projections\\SimpleValueSource.cs\" />\r\n    <Compile Include=\"Projections\\Using_a_custom_value_projector.cs\" />\r\n    <Compile Include=\"Projections\\ValueSourceTester.cs\" />\r\n    <Compile Include=\"ReflectionExtensionsTester.cs\" />\r\n    <Compile Include=\"Registration\\AccessOverridesFinderIntegratedTester.cs\" />\r\n    <Compile Include=\"Registration\\ActionFilterTester.cs\" />\r\n    <Compile Include=\"Registration\\Application_settings_alteration_wins_out_over_an_import.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\BehaviorGraphExtensions.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\DefaultRouteConventionBasedUrlPolicyTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\DefaultUrlPolicyTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\EndpointActionSourceTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\RegisterAllSettingsTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\UrlPatternAttributeOnViewModelPolicyTester.cs\" />\r\n    <Compile Include=\"Registration\\default_action_discovery.cs\" />\r\n    <Compile Include=\"Registration\\FilterAttributeTester.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\RoutedChainTester.cs\" />\r\n    <Compile Include=\"Registration\\OutputBeforeAjaxContinuationPolicyTester.cs\" />\r\n    <Compile Include=\"Registration\\Querying\\ChainResoluationCacheRootAt.cs\" />\r\n    <Compile Include=\"Registration\\Registration\\FubuPackageRegistry_Importing_Mechanics_Specs.cs\" />\r\n    <Compile Include=\"Registration\\SettingsCollectionTester.cs\" />\r\n    <Compile Include=\"Registration\\SettingsCollection_creates_with_the_app_setting_provider_Tester.cs\" />\r\n    <Compile Include=\"Registration\\when_importing_urls.cs\" />\r\n    <Compile Include=\"required_service_registrations.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\ConnegGraphTester.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\ReaderChoiceTester.cs\" />\r\n    <Compile Include=\"Resources\\Hypermedia\\LinkExpressionTester.cs\" />\r\n    <Compile Include=\"Resources\\Hypermedia\\LinkSourceTester.cs\" />\r\n    <Compile Include=\"Resources\\Hypermedia\\LinksSourceTester.cs\" />\r\n    <Compile Include=\"Resources\\PathBased\\RouteRankingIntegratedTester.cs\" />\r\n    <Compile Include=\"Runtime\\Conditionals\\ConditionalServiceTester.cs\" />\r\n    <Compile Include=\"Runtime\\Files\\FubuApplicationFilesSmokeTester.cs\" />\r\n    <Compile Include=\"Runtime\\Files\\FubuFileTester.cs\" />\r\n    <Compile Include=\"Runtime\\PartialChainSwitcherTester.cs\" />\r\n    <Compile Include=\"Runtime\\SimpleSessionStateTester.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\AntiForgeryBehaviorTester.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\AntiForgeryServiceTester.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\AntiForgerySettingsTester.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\AntiForgeryTokenAttributeTester.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\AntiForgeryTokenProviderTester.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\AntiForgeryValidatorTester.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\BinaryAntiForgerySerializerTester.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\Default_policy_applies_anti_forgery_to_post_routes.cs\" />\r\n    <Compile Include=\"Security\\AntiForgery\\MachineKeyAntiForgeryEncoderTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AjaxAuthenticationRedirectTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\ApplyAuthenticationPolicyTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationBootstrapperTests.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationFilterNodeTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationFilterTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationIsConfiguredTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationNodeTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationServiceRegistryTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationServiceTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthenticationSettingsTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\AuthResultTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\BasicAuthenticationTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Cookies\\CookieSettingsTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Cookies\\LoginCookieServiceTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\DefaultAuthenticationRedirectTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Endpoints\\LoginControllerTests.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Endpoints\\when_logging_out.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\FubuPrincipalTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\LockedOutRuleTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\LoginRequestTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\LoginSuccessHandlerTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\LogoutSuccessHandlerTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Membership\\MembershipAuthenticationTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Membership\\MembershipNodeTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Membership\\UserInfoTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\NotAuthenticatedModel.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\PassThroughAuthenticationFilterTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\pass_through_authentication_for_a_partial.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\register_membership_with_a_default_repository_if_none_exists.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Tickets\\EncryptionTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\Tickets\\TicketAuthenticationSessionTester.cs\" />\r\n    <Compile Include=\"Security\\Authentication\\when_redirecting_an_unauthenticated_ajax_request.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AlwaysAllowPolicyTester.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AlwaysDenyPolicyTester.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AuthorizationByServiceTester.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AuthorizationCheckPolicyTester.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\SecuritySettingsTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\ByTaskSchedulerMakerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\ChannelGraphTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\ChannelGraph_can_read_thread_and_task_counts_from_config.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\ChannelGraph_has_to_be_a_StructureMap_singleton.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\ChannelNodeTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\Configuring_envelope_modifier_by_channel.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\FubuTransportRegistryTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\FubuTransportRegistry_register_subscription_requirements_Tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\HandlerChainTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\HandlerChain_Exception_Handling_Rules_Registration_Tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\HandlerGraphTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Configuration\\UriExtensionsTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\MessageRecordListenerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Diagnostics\\MessageRecordTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Docs\\Basics\\ErrorHandlingSamples.cs\" />\r\n    <Compile Include=\"ServiceBus\\Docs\\Basics\\PubSubSamples.cs\" />\r\n    <Compile Include=\"ServiceBus\\Docs\\Basics\\ReceivingSamples.cs\" />\r\n    <Compile Include=\"ServiceBus\\Docs\\Basics\\SendingSamples.cs\" />\r\n    <Compile Include=\"ServiceBus\\Docs\\GettingStarted\\GettingStartedSettings.cs\" />\r\n    <Compile Include=\"ServiceBus\\Docs\\GettingStarted\\GettingStartedTransportRegistry.cs\" />\r\n    <Compile Include=\"ServiceBus\\Docs\\GettingStarted\\Handlers.cs\" />\r\n    <Compile Include=\"ServiceBus\\Docs\\Polling\\PollingJobSamples.cs\" />\r\n    <Compile Include=\"ServiceBus\\Docs\\Sagas\\SagaRepositorySample.cs\" />\r\n    <Compile Include=\"ServiceBus\\Docs\\Sagas\\SimpleSaga.cs\" />\r\n    <Compile Include=\"ServiceBus\\Docs\\Transports\\LightningQueuesSamples.cs\" />\r\n    <Compile Include=\"ServiceBus\\envelope_handlers_are_registered_in_the_right_order.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\CompositeContinuation_integration_testing.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\DelayedRetryContinuationTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\ErrorHandlerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\ErrorHandling_services_have_descriptions_for_diagnostics.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\ErrorReportTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\ExceptionHandlerBehaviorTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\ExceptionMatchingExpression_and_ExpressionMatch_Tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\ExceptionTypeMatchTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\MoveToErrorQueueHandlerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\MovetoErrorQueueTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\RequeueContinuationTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\RespondWithMessageContinuationTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\RespondWithMessageHandlerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\RetryNowContinuationTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ErrorHandling\\RetryNow_integration_testing.cs\" />\r\n    <Compile Include=\"ServiceBus\\Events\\EventAggregatorTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Events\\ExpiringListenerCleanupTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\FakeHandlers.cs\" />\r\n    <Compile Include=\"ServiceBus\\FubuTransportRegistry_application_of_policies_Tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\FubuTransportRegistry_default_handler_source_policies_spec.cs\" />\r\n    <Compile Include=\"ServiceBus\\FubuTransportRegistry_HandlerSource_registration_Tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\FubuTransportServiceRegistry_spec.cs\" />\r\n    <Compile Include=\"ServiceBus\\FullStackConfigurationIntegrationTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\IntegratedFubuTransportRegistryTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Logging\\EventAggregationListenerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\FakePersistentTask.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\FakePersistentTaskAgent.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\FakePersistentTasks.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\FakePersistentTaskSource.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\FakeTransportPeer.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\Monitoring_handlers_are_registered.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\Monitoring_health_polling_job_is_registered.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\OrderedAssignmentTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\PermanentTaskController\\CurrentlyOwnedSubjectsTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\PermanentTaskController\\PersistentTaskControllerContext.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\PermanentTaskController\\TakeOwnership_specs.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\PermanentTaskController\\when_checking_status.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\PermanentTaskController\\when_checking_the_status_of_owned_tasks.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\PermanentTaskController\\when_finding_a_task.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\PermanentTaskController\\when_stopping_a_task.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\PersistentTaskAgentTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\PersistentTaskMessageModifierTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\RiggedServiceBus.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\Service_registration_specs.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\TaskHealthResponseTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Monitoring\\TransportPeerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ObjectMother.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\DefaultTimerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\EnvelopeToken_is_polling_job_related_Tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\JobTimeoutTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingJobActivatorTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingJobIntegrationTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingJobRunImmediatelyIntegrationTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingJobTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Polling\\PollingServicesRegistry_spec.cs\" />\r\n    <Compile Include=\"ServiceBus\\Publishing\\EventPublisherTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\RecordingChannel.cs\" />\r\n    <Compile Include=\"ServiceBus\\RecordingEnvelopeSender.cs\" />\r\n    <Compile Include=\"ServiceBus\\RecordingReceiver.cs\" />\r\n    <Compile Include=\"ServiceBus\\RecordingServiceBusTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Registration\\FuncBuilderTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Registration\\HandlerSourceTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Registration\\Nodes\\HandlerCallTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Cascading\\DelayedResponseTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Cascading\\OutgoingSenderTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Cascading\\RespondTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Cascading\\RespondToSenderTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Cascading\\SendDirectlyToTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Delayed\\DelayedEnvelopeProcessorTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\EnvelopeModifierTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\EnvelopeSenderTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\EnvelopeTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\generic_handlers_are_called_for_messages_that_match.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Headers\\Headers_testing.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\ChainExecutionEnvelopeHandlerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\ChainFailureContinuationTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\ChainInvokerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\ChainSuccessContinuationTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\CompositeContinuationTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\DelayedEnvelopeHandlerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\DeserializationFailureContinuationTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\HandlerPipelineTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\InvocationContext.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\InvocationContextTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\multiple_handlers_for_one_message.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\NoSubscriberHandlerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\ResponseEnvelopeHandlerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\sending_a_message_with_no_consumer.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\simplest_possible_invocation.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\StubServiceFactory.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Invocation\\WhenInvokingWithNoHandlerForMessageType.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\ReceiverTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\ReplyListenerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Routing\\AssemblyRuleTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Routing\\LambdaRoutingRuleTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Routing\\NamespaceRuleTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Routing\\SingleTypeRoutingRuleTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Serializers\\BasicJsonMessageSerializerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Serializers\\BinarySerializerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Serializers\\EnvelopeSerializerIntegratedTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Serializers\\EnvelopeSerializerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Serializers\\XmlMessageSerializerRhinoMessageTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\Serializers\\XmlMessageSerializerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\when_requesting_a_response.cs\" />\r\n    <Compile Include=\"ServiceBus\\Runtime\\when_sending_with_the_expectation_of_a_response.cs\" />\r\n    <Compile Include=\"ServiceBus\\Sagas\\SagaBehaviorTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Sagas\\SagaIntegrationTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Sagas\\SagaTypesTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Sagas\\StatefulSagaConventionTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\EveryDayAtSpecificTimeJobSchedulerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\InMemorySchedulePersistenceTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\JobExecutionRecordTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\JobScheduleTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\JobStatusTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\JobTimerIntegratedTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\ScheduledJobController_integration_Tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\ScheduledJobGraphTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\ScheduledJobPersistentTaskTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\ScheduledJobTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\ScheduledStatusMonitorTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ScheduledJobs\\ScheduleRepositoryTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Scheduling\\TaskSchedulerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Scheduling\\ThreadSchedulerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ServiceBus_Consume_right_now_Mr_Tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ServiceBus_DelaySend_Tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ServiceBus_RemoveSubscriptions_Tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\ServiceBus_Send_to_destination_Tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\StubChannelNode.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\SubscriptionCache_clearing_tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\SubscriptionCache_replace_subscriptions_tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\SubscriptionCache_routing_with_subscription_Tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\SubscriptionHandler_is_registered_in_fubu_application_apps.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\SubscriptionRepositoryTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\SubscriptionsHandlerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\SubscriptionsIntegrationTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\Subscription_equality_tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\Subscription_matches_tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\TransportNodeTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\when_creating_grouped_subscriptions.cs\" />\r\n    <Compile Include=\"ServiceBus\\Subscriptions\\when_creating_local_subscriptions.cs\" />\r\n    <Compile Include=\"ServiceBus\\TestEnvelopeContext.cs\" />\r\n    <Compile Include=\"ServiceBus\\TestingSupportClasses.cs\" />\r\n    <Compile Include=\"ServiceBus\\TestSupport\\MessageHistory_Record_Tracking_Tester.cs\" />\r\n    <Compile Include=\"ServiceBus\\TimeoutRunnerTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\TransportActivatorTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\TransportSettingsTester.cs\" />\r\n    <Compile Include=\"ServiceBus\\TypeExtensionsTester.cs\" />\r\n    <Compile Include=\"Services\\ApplicationLoaderFinderTester.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\EventAggregatorTester.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\MessageWaitConditionTester.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\MessagingHubTester.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\RemoteListenerTester.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\Tracking\\MessageHistoryTester.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\Tracking\\MessageSentTester.cs\" />\r\n    <Compile Include=\"Services\\Messaging\\WaitTester.cs\" />\r\n    <Compile Include=\"Services\\Remote\\AssemblyRequirementTester.cs\" />\r\n    <Compile Include=\"Services\\Remote\\BigRemoteServicesIntegrationTester.cs\" />\r\n    <Compile Include=\"Services\\Remote\\RemoteDomainExpressionTester.cs\" />\r\n    <Compile Include=\"Runtime\\SessionState\\flashing_an_object.cs\" />\r\n    <Compile Include=\"Runtime\\SessionState\\retrieving_an_existing_item_from_flash.cs\" />\r\n    <Compile Include=\"Runtime\\SessionState\\retrieving_an_item_when_flash_is_empty.cs\" />\r\n    <Compile Include=\"Behaviors\\BasicBehaviorTester.cs\" />\r\n    <Compile Include=\"Behaviors\\Conditional\\AlwaysTester.cs\" />\r\n    <Compile Include=\"Behaviors\\InterceptExceptionBehaviorTester.cs\" />\r\n    <Compile Include=\"Behaviors\\ITargetController.cs\" />\r\n    <Compile Include=\"can_find_and_load_bottles_with_the_FubuModule_attribute.cs\" />\r\n    <Compile Include=\"FakeHttpContext.cs\" />\r\n    <Compile Include=\"FubuApplicationTester.cs\" />\r\n    <Compile Include=\"Http\\AspNet\\AspNetCurrentHttpRequestTester.cs\" />\r\n    <Compile Include=\"Http\\AspNet\\AspNetModelBindingTester.cs\" />\r\n    <Compile Include=\"Http\\AspNet\\AspNetServiceArgumentsTester.cs\" />\r\n    <Compile Include=\"Http\\CurrentChainTester.cs\" />\r\n    <Compile Include=\"Http\\CurrentMimeTypeModelBinderTester.cs\" />\r\n    <Compile Include=\"Http\\CurrentMimeTypeTester.cs\" />\r\n    <Compile Include=\"Http\\CurrentRequestFullUrlPropertyBinderTester.cs\" />\r\n    <Compile Include=\"Http\\CurrentRequestRelativeUrlPropertyBinderTester.cs\" />\r\n    <Compile Include=\"Http\\Headers\\HeaderTester.cs\" />\r\n    <Compile Include=\"Http\\Headers\\HttpHeaderValuesTester.cs\" />\r\n    <Compile Include=\"Http\\HttpRequestHeadersTester.cs\" />\r\n    <Compile Include=\"Http\\MimeTypeListTester.cs\" />\r\n    <Compile Include=\"Http\\RouteDataValuesTester.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\FormatterWriterTester.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\FormatterReaderTester.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\InputNodeTester.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\InputOutputNodePlacementIntegrationTester.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\OutputNodeIntegratedTester.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\StringWriterTester.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\HtmlStringWriterTester.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\OutputBehaviorTester.cs\" />\r\n    <Compile Include=\"Resources\\Conneg\\OutputNodeTester.cs\" />\r\n    <Compile Include=\"Registration\\ActionMethodFilterTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\actions_that_return_IDictionary_are_json.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\DefaultConnegOutputIsAppliedToAnyEndpointWithoutAnyPriorOutputTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\PartialOnlyConventionTester.cs\" />\r\n    <Compile Include=\"Registration\\Querying\\ChainSearchTester.cs\" />\r\n    <Compile Include=\"Runtime\\Formatters\\XmlFormatterTester.cs\" />\r\n    <Compile Include=\"CustomExceptionsTester.cs\" />\r\n    <Compile Include=\"FubuRegistryImportingTester.cs\" />\r\n    <Compile Include=\"Resources\\PathBased\\ResourcePathBinderTester.cs\" />\r\n    <Compile Include=\"Resources\\PathBased\\ResourcePathIntegratedUrlCreationTester.cs\" />\r\n    <Compile Include=\"Registration\\attaching_behaviors_to_action_calls.cs\" />\r\n    <Compile Include=\"Registration\\BehaviorNodeTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\AllowRoleAttributeTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\AuthorizedByAttributeConventionTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\MethodToUrlBuilderTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\PartialRegistrationConventionTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\RenderStatusCodeConventionTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\ReorderBehaviorsPolicyTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\UrlRegistryCategoryConventionTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\WrapWithAttributeConventionTester.cs\" />\r\n    <Compile Include=\"Registration\\DSL\\PoliciesExpressionTester.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\BehaviorChain_building_an_object_def.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\Behavior_node_ObjectDef_creation_Tester.cs\" />\r\n    <Compile Include=\"Registration\\Querying\\ChainResolverTester.cs\" />\r\n    <Compile Include=\"Registration\\RouteInputTester.cs\" />\r\n    <Compile Include=\"Registration\\system_policy_for_authorization.cs\" />\r\n    <Compile Include=\"Routing\\StandardRoutePolicyTester.cs\" />\r\n    <Compile Include=\"Runtime\\AspNetPassthroughConverterTester.cs\" />\r\n    <Compile Include=\"Runtime\\BasicSessionTester.cs\" />\r\n    <Compile Include=\"Runtime\\BehaviorInvokerTester.cs\" />\r\n    <Compile Include=\"Runtime\\HeaderValueAttributeTester.cs\" />\r\n    <Compile Include=\"Runtime\\must_be_descriptions_on_important_things.cs\" />\r\n    <Compile Include=\"Runtime\\OutputWriterTester.cs\" />\r\n    <Compile Include=\"Runtime\\MimeTypeTester.cs\" />\r\n    <Compile Include=\"Caching\\RecordedOutputTester.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AllowRoleTester.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AuthorizationBehaviorTester.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AuthorizationNodeTester.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AuthorizationRightTester.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\DefaultAuthorizationFailureHandlerTester.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\PrincipalRolesTester.cs\" />\r\n    <Compile Include=\"Security\\Authorization\\AuthorizationPolicyExecutorTester.cs\" />\r\n    <Compile Include=\"SpecificationExtensions.cs\" />\r\n    <Compile Include=\"StructureMap\\Internals\\AppSettingProviderRegistrySmokeTester.cs\" />\r\n    <Compile Include=\"StructureMap\\Internals\\StructureMapServiceLocatorTester.cs\" />\r\n    <Compile Include=\"StructureMap\\Internals\\StubActivator.cs\" />\r\n    <Compile Include=\"StructureMap\\Internals\\TestController.cs\" />\r\n    <Compile Include=\"StructureMap\\Internals\\UsesTheIsSingletonPropertyTester.cs\" />\r\n    <Compile Include=\"StructureMap\\Settings\\SettingIntegrationTester.cs\" />\r\n    <Compile Include=\"StructureMap\\using_child_containers_for_isolated_overrides.cs\" />\r\n    <Compile Include=\"TagAttributeTester.cs\" />\r\n    <Compile Include=\"TestSupport\\RhinoAutoMocker.cs\" />\r\n    <Compile Include=\"TestSupport\\RhinoMockRepositoryProxy.cs\" />\r\n    <Compile Include=\"TestSupport\\RhinoMocksAAAServiceLocator.cs\" />\r\n    <Compile Include=\"TestSupport\\SelfMockingServiceLocator.cs\" />\r\n    <Compile Include=\"TestSupport\\VoidMethod.cs\" />\r\n    <Compile Include=\"TestSupport\\Wait.cs\" />\r\n    <Compile Include=\"Validation\\ClassValidationRulesTester.cs\" />\r\n    <Compile Include=\"Validation\\ContinuationRuleTester.cs\" />\r\n    <Compile Include=\"Validation\\FieldEqualityRuleTester.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\attribute_scanning_tester.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\CollectionLengthRuleTester.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\ConditionalFieldRuleTester.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\EmailFieldRuleTester.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\FieldAccessRuleRegistryTester.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\FieldRulesRegistryTester.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\FieldValidationQueryTester.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\GreaterOrEqualtoZeroRuleTester.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\GreaterThanZeroRuleTester.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\LambdaFieldValidationSourceTester.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\MaximumLengthRuleTester.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\MaxValueFieldRuleTester.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\MinimumLengthRuleTester.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\MinValueFieldRuleTester.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\RangeLengthFieldRuleTester.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\RegularExpressionFieldRuleTester.cs\" />\r\n    <Compile Include=\"Validation\\Fields\\RequiredFieldRuleTester.cs\" />\r\n    <Compile Include=\"Validation\\intregated_rule_using_service_tester.cs\" />\r\n    <Compile Include=\"Validation\\IsValidTester.cs\" />\r\n    <Compile Include=\"Validation\\IValidatedRuleSourceTester.cs\" />\r\n    <Compile Include=\"Validation\\Models\\AddressModel.cs\" />\r\n    <Compile Include=\"Validation\\Models\\CompositeModel.cs\" />\r\n    <Compile Include=\"Validation\\Models\\ContactModel.cs\" />\r\n    <Compile Include=\"Validation\\Models\\ModelWithNoAttributes.cs\" />\r\n    <Compile Include=\"Validation\\Models\\SimpleModel.cs\" />\r\n    <Compile Include=\"Validation\\Models\\SiteModel.cs\" />\r\n    <Compile Include=\"Validation\\NotificationMessageTester.cs\" />\r\n    <Compile Include=\"Validation\\NotificationSnippets.cs\" />\r\n    <Compile Include=\"Validation\\NotificationTester.cs\" />\r\n    <Compile Include=\"Validation\\RuleSnippets.cs\" />\r\n    <Compile Include=\"Validation\\TemplateValueTester.cs\" />\r\n    <Compile Include=\"Validation\\ValidationCompilerTester.cs\" />\r\n    <Compile Include=\"Validation\\ValidationContextTester.cs\" />\r\n    <Compile Include=\"Validation\\ValidationGraphTester.cs\" />\r\n    <Compile Include=\"Validation\\ValidationPlanTester.cs\" />\r\n    <Compile Include=\"Validation\\ValidationStepTester.cs\" />\r\n    <Compile Include=\"Validation\\ValidatorTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\AccessorRulesFieldSourceTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\AccessorRulesValidationModePolicyTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\AjaxContinuationResolverTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\AjaxValidationActionFilterTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\AjaxValidationFailureHandlerTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\AjaxValidationTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Bugs\\defining_field_rules_on_a_base_class_is_not_catching_on_the_subclass.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ModelBindingErrorsTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\RemoteRuleExpressionTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\RemoteRuleGraphActivatorTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\RemoteFieldRuleTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\RemoteFieldValidationRuleFilterTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\RemoteRuleAttributeFilterTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\RemoteRuleGraphTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\RemoteRuleQueryTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\RuleRunnerTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\ValidateFieldEndpointTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\Remote\\ValidationTargetResolverTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\SampleInputModel.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\CssValidationAnnotationStrategyTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\DateElementModifierTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\DefaultValidationSummaryWriterTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\ElementLocalizationMessagesTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\FieldEqualityFormModifierTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\FieldValidationElementModifierTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\FieldValidationModifierTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\FormValidationModifierTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\FormValidationSummaryModifierTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\IntegratedValidationOptionsTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\LocalizationAnnotationStrategyTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\LocalizationLabelModifierTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\MaximumLengthModifierTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\MaxValueModifierTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\MinimumLengthModifierTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\MinValueModifierTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\NotificationSerializationModifierTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\NumberElementModifierTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\RangeLengthModifierTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\RegularExpressionModifierTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\RemoteValidationElementModifierTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\RenderingStrategyTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\ValidationElementModifierContext.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\ValidationElementModifierScenario.cs\" />\r\n    <Compile Include=\"Validation\\Web\\UI\\ValidationNodeTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationActionFilterTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationAjaxExtensionsTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationBehaviorChainExtensionsTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationConventionTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationFilterTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationModeAttributePolicyTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationNodeModificationTester.cs\" />\r\n    <Compile Include=\"Validation\\Web\\ValidationNodeTester.cs\" />\r\n    <Compile Include=\"View\\Attachment\\FakeViewToken.cs\" />\r\n    <Compile Include=\"View\\AuthorizationOnPageExtensionsTester.cs\" />\r\n    <Compile Include=\"View\\AuthorizedLinkExpressionsTester.cs\" />\r\n    <Compile Include=\"View\\FubuPageExtensionsTester.cs\" />\r\n    <Compile Include=\"View\\HtmlTagExtensionsTester.cs\" />\r\n    <Compile Include=\"UrlAliasAttributeTester.cs\" />\r\n    <Compile Include=\"UrlExtensionsTester.cs\" />\r\n    <Compile Include=\"Behaviors\\BehaviorTestContext.cs\" />\r\n    <Compile Include=\"Continuations\\ContinuationHandlerTester.cs\" />\r\n    <Compile Include=\"Continuations\\FubuContinuationTester.cs\" />\r\n    <Compile Include=\"FubuBootstrapperIntegrationTester.cs\" />\r\n    <Compile Include=\"FubuRegistryTester.cs\" />\r\n    <Compile Include=\"HtmlGenerationTestExtensions.cs\" />\r\n    <Compile Include=\"Registration\\BehaviorGraphTester.cs\">\r\n    </Compile>\r\n    <Compile Include=\"Registration\\Conventions\\ActionSourceTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\ContinuationHandlerConventionTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\CustomConventionIntegratedTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\HtmlTagAndDocumentHandlerConventionTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\OutputIntegratedAttachmentTester.cs\" />\r\n    <Compile Include=\"Registration\\Conventions\\TypeScanningIntegratedTester.cs\" />\r\n    <Compile Include=\"Registration\\Expressions\\ModelExpressionTester.cs\" />\r\n    <Compile Include=\"Registration\\Nodes\\BehaviorChainTester.cs\" />\r\n    <Compile Include=\"Registration\\Utilities\\ActionCallSpec.cs\" />\r\n    <Compile Include=\"Registration\\Utilities\\BehaviorSpec.cs\" />\r\n    <Compile Include=\"Registration\\FuncBuilderTester.cs\" />\r\n    <Compile Include=\"Registration\\ActionCallTester.cs\" />\r\n    <Compile Include=\"Registration\\RouteBuilderTester.cs\" />\r\n    <Compile Include=\"Registration\\Utilities\\BehaviorSpecCheck.cs\" />\r\n    <Compile Include=\"Registration\\WrapperTester.cs\" />\r\n    <Compile Include=\"Registration\\RouteDefinitionTester.cs\" />\r\n    <Compile Include=\"Runtime\\FubuRequestTester.cs\" />\r\n    <Compile Include=\"Runtime\\PartialFactoryTester.cs\" />\r\n    <Compile Include=\"Runtime\\SessionState\\FlashProviderTester.cs\" />\r\n    <Compile Include=\"Runtime\\SessionState\\RequestDataProviderTester.cs\" />\r\n    <Compile Include=\"TestController.cs\" />\r\n    <Compile Include=\"UrlPatternAttributeTester.cs\" />\r\n    <Compile Include=\"UrlStringExtensionsTester.cs\" />\r\n    <Compile Include=\"Urls\\BasicUrlRegistrationScanningIntegrationTester.cs\" />\r\n    <Compile Include=\"Urls\\ChainUrlResolverTester.cs\" />\r\n    <Compile Include=\"Urls\\UrlRegistryIntegrationTester.cs\" />\r\n    <Compile Include=\"View\\Attachment\\ViewExclusionTester.cs\" />\r\n    <Compile Include=\"View\\AutoImportModelNamespacesConventionTester.cs\" />\r\n    <Compile Include=\"View\\CommonViewNamespaces_is_registered.cs\" />\r\n    <Compile Include=\"View\\FakeViews\\Folder1\\A.aspx.cs\">\r\n      <DependentUpon>A.aspx</DependentUpon>\r\n      <SubType>ASPXCodeBehind</SubType>\r\n    </Compile>\r\n    <Compile Include=\"View\\FakeViews\\Folder1\\ViewModel3.aspx.cs\">\r\n      <DependentUpon>ViewModel3.aspx</DependentUpon>\r\n      <SubType>ASPXCodeBehind</SubType>\r\n    </Compile>\r\n    <Compile Include=\"View\\FakeViews\\ModelsAndControllers.cs\" />\r\n    <Compile Include=\"View\\OutputNodeExtensionsTester.cs\" />\r\n    <Compile Include=\"View\\Registration\\GenericParserTester.cs\" />\r\n    <Compile Include=\"View\\SimplePage.cs\" />\r\n    <Compile Include=\"View\\ViewEngineSettingsTester.cs\" />\r\n    <Compile Include=\"Security\\WebAuthenticationContextTester.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\AssemblyPackage\\AssemblyPackage.csproj\">\r\n      <Project>{99dba82a-e811-4da0-983c-12e8317f8642}</Project>\r\n      <Name>AssemblyPackage</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\r\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\r\n      <Name>FubuMVC.Core</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\SampleService\\SampleService.csproj\">\r\n      <Project>{eddd686c-2db1-411c-833f-abafcae5498d}</Project>\r\n      <Name>SampleService</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\TestMessages\\TestMessages.csproj\">\r\n      <Project>{3735a25a-28b6-4da3-a4cf-7606538e0155}</Project>\r\n      <Name>TestMessages</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\TestPackage1\\TestPackage1.csproj\">\r\n      <Project>{1f18d6eb-4d9c-407a-bd70-c5d525e377b6}</Project>\r\n      <Name>TestPackage1</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"public\\1.0.1\\d.js\" />\r\n    <Content Include=\"public\\1.0.1\\e.js\" />\r\n    <Content Include=\"public\\1.0.1\\f.js\" />\r\n    <Content Include=\"public\\javascript\\a.js\" />\r\n    <Content Include=\"public\\javascript\\b.js\" />\r\n    <Content Include=\"public\\javascript\\c.js\" />\r\n    <Content Include=\"Runtime\\Files\\Data\\a.txt\">\r\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r\n    </Content>\r\n    <Content Include=\"Runtime\\Files\\Data\\b.txt\">\r\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r\n    </Content>\r\n    <Content Include=\"Runtime\\Files\\Data\\c.txt\">\r\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r\n    </Content>\r\n    <Content Include=\"Runtime\\Files\\Data\\d.txt\">\r\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r\n    </Content>\r\n    <Content Include=\"sample.xml\">\r\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r\n    </Content>\r\n    <Content Include=\"View\\FakeViews\\Folder1\\A.aspx\" />\r\n    <Content Include=\"View\\FakeViews\\Folder1\\ViewModel3.aspx\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"FubuMVC.Tests.dll.config\">\r\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r\n      <SubType>Designer</SubType>\r\n    </None>\r\n    <None Include=\"ripple.dependencies.config\">\r\n      <SubType>Designer</SubType>\r\n    </None>\r\n    <None Include=\"cert1.cer\">\r\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r\n    </None>\r\n    <None Include=\"cert2.cer\">\r\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r\n    </None>\r\n    <None Include=\"cert2.pfx\">\r\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r\n    </None>\r\n    <None Include=\"cert2.pvk\">\r\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r\n    </None>\r\n    <None Include=\"StructureMap\\ripple.dependencies.config\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Folder Include=\"Diagnostics\\Shared\\\" />\r\n    <Folder Include=\"Docs\\Examples\\\" />\r\n    <Folder Include=\"Results\\\" />\r\n    <Folder Include=\"View\\FakeViews\\Folder1\\Folder2\\Folder3\\\" />\r\n    <Folder Include=\"View\\Model\\\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\r\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\r\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Dynamic.Runtime;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Runtime.Serialization.Primitives;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\r\n  </Target>\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n  <ItemGroup>\r\n    <Service Include=\"{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}\" />\r\n  </ItemGroup>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Fixie\">\r\n          <HintPath>..\\..\\packages\\Fixie\\lib\\net45\\Fixie.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <ItemGroup>\r\n    <Reference Include=\"FubuCore\">\r\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\r\n      <Private>True</Private>\r\n      <Paket>True</Paket>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"HtmlTags\">\r\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.CSharp\">\r\n          <HintPath>..\\..\\packages\\Microsoft.CSharp\\ref\\netstandard1.0\\Microsoft.CSharp.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Win32.Primitives\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net20\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net35\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net40\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\netstandard1.0\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0') Or ($(TargetFrameworkProfile) == 'Profile5') Or ($(TargetFrameworkProfile) == 'Profile6') Or ($(TargetFrameworkProfile) == 'Profile14') Or ($(TargetFrameworkProfile) == 'Profile19') Or ($(TargetFrameworkProfile) == 'Profile24') Or ($(TargetFrameworkProfile) == 'Profile37') Or ($(TargetFrameworkProfile) == 'Profile42') Or ($(TargetFrameworkProfile) == 'Profile47') Or ($(TargetFrameworkProfile) == 'Profile92') Or ($(TargetFrameworkProfile) == 'Profile102') Or ($(TargetFrameworkProfile) == 'Profile136') Or ($(TargetFrameworkProfile) == 'Profile147') Or ($(TargetFrameworkProfile) == 'Profile158') Or ($(TargetFrameworkProfile) == 'Profile225') Or ($(TargetFrameworkProfile) == 'Profile240') Or ($(TargetFrameworkProfile) == 'Profile255') Or ($(TargetFrameworkProfile) == 'Profile328') Or ($(TargetFrameworkProfile) == 'Profile336') Or ($(TargetFrameworkProfile) == 'Profile344')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net40+sl5+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'MonoAndroid') Or ($(TargetFrameworkIdentifier) == 'MonoTouch') Or ($(TargetFrameworkIdentifier) == 'Xamarin.iOS') Or ($(TargetFrameworkIdentifier) == 'Xamarin.Mac') Or ($(TargetFrameworkProfile) == 'Profile7') Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile32') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile78') Or ($(TargetFrameworkProfile) == 'Profile111') Or ($(TargetFrameworkProfile) == 'Profile151') Or ($(TargetFrameworkProfile) == 'Profile157') Or ($(TargetFrameworkProfile) == 'Profile259')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Newtonsoft.Json\">\r\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0' Or $(TargetFrameworkVersion) == 'v3.5' Or $(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Rhino.Mocks\">\r\n          <HintPath>..\\..\\packages\\RhinoMocks\\lib\\net\\Rhino.Mocks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Shouldly\">\r\n          <HintPath>..\\..\\packages\\Shouldly\\lib\\net35\\Shouldly.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Shouldly\">\r\n          <HintPath>..\\..\\packages\\Shouldly\\lib\\net40\\Shouldly.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.AppContext\">\r\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Buffers\">\r\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Console\">\r\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tools\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Dynamic.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.0\\System.Dynamic.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Dynamic.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.3\\System.Dynamic.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Calendars\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression.ZipFile\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Http\">\r\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"mscorlib\">\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Resources.ResourceManager\">\r\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Handles\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Loader\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Numerics\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.0\\System.Runtime.Serialization.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.3\\System.Runtime.Serialization.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Cng\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Csp\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Timer\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n</Project>"
  },
  {
    "path": "src/FubuMVC.Tests/FubuMVC.Tests.dll.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n<configuration>\r\n\r\n  <appSettings>\r\n    <add key=\"FakeSettings.Name\" value=\"Max\"/>\r\n    <add key=\"FakeSettings.Age\" value=\"6\"/>\r\n    <add key=\"FakeSettings.Active\" value=\"true\"/>\r\n    <add key=\"DiagnosticsSettings.TraceLevel\" value=\"None\"/>\r\n  </appSettings>\r\n</configuration>"
  },
  {
    "path": "src/FubuMVC.Tests/FubuRegistryImportingTester.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Net;\r\nusing System.Threading.Tasks;\r\nusing System.Web;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Caching;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Tests.Registration.Conventions;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Cookie = FubuMVC.Core.Http.Cookies.Cookie;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class FubuRegistryImportingTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            parent = new FubuRegistry();\r\n            import = new FubuRegistry();\r\n        }\r\n\r\n        #endregion\r\n\r\n        private FubuRegistry parent;\r\n        private FubuRegistry import;\r\n\r\n\r\n        public interface ISomething\r\n        {\r\n        }\r\n\r\n        public class Something : ISomething\r\n        {\r\n        }\r\n\r\n        public class DifferentSomething : ISomething\r\n        {\r\n        }\r\n\r\n        public class DifferentOutputWriter : IOutputWriter\r\n        {\r\n            public void WriteFile(string contentType, string localFilePath, string displayName)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public Task Write(string contentType, string renderedOutput)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public Task Write(string renderedOutput)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public void RedirectToUrl(string url)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public void AppendCookie(Cookie cookie)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public Task<IRecordedOutput> Record(Func<Task> inner)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public void Replay(IRecordedOutput output)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public void Flush()\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public void AppendHeader(string key, string value)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public Task Write(string contentType, Func<Stream, Task> output)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public void WriteResponseCode(HttpStatusCode status, string description = null)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        public class Action1\r\n        {\r\n            [UrlPattern(\"a/m1\")]\r\n            public string M1()\r\n            {\r\n                return \"Hello\";\r\n            }\r\n\r\n            [UrlPattern(\"a/m2\")]\r\n            public string M2()\r\n            {\r\n                return \"Bye\";\r\n            }\r\n        }\r\n\r\n        public class Action2\r\n        {\r\n            [UrlPattern(\"b/m1\")]\r\n            public string M1()\r\n            {\r\n                return \"Hello\";\r\n            }\r\n\r\n            [UrlPattern(\"b/m2\")]\r\n            public string M2()\r\n            {\r\n                return \"Bye\";\r\n            }\r\n        }\r\n\r\n        public class Wrapper : BasicBehavior\r\n        {\r\n            public Wrapper() : base(PartialBehavior.Ignored)\r\n            {\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void adds_chains_from_import_with_a_prefix()\r\n        {\r\n            import.Actions.IncludeType<Action1>();\r\n\r\n            parent.Import(import, \"import\");\r\n\r\n            var graph = BehaviorGraph.BuildFrom(parent);\r\n\r\n            graph.ChainFor<Action1>(x => x.M1()).As<RoutedChain>().GetRoutePattern().ShouldBe(\"import/a/m1\");\r\n            graph.ChainFor<Action1>(x => x.M2()).As<RoutedChain>().GetRoutePattern().ShouldBe(\"import/a/m2\");\r\n        }\r\n\r\n        [Test]\r\n        public void adds_chains_from_import_without_prefix()\r\n        {\r\n            import.Actions.IncludeType<Action1>();\r\n            parent.Import(import, string.Empty);\r\n\r\n            var graph = BehaviorGraph.BuildFrom(parent);\r\n\r\n            graph.ChainFor<Action1>(x => x.M1()).As<RoutedChain>().GetRoutePattern().ShouldBe(\"a/m1\");\r\n            graph.ChainFor<Action1>(x => x.M2()).As<RoutedChain>().GetRoutePattern().ShouldBe(\"a/m2\");\r\n        }\r\n\r\n        [Test]\r\n        public void apply_policy_to_import_only_applies_to_the_chains_in_the_imported_registry()\r\n        {\r\n            import.Actions.IncludeType<Action1>();\r\n\r\n            import.Policies.Local.Configure(g => g.WrapAllWith<Wrapper>());\r\n\r\n            parent.Import(import, \"import\");\r\n\r\n            parent.Actions.IncludeType<Action2>();\r\n\r\n            var graph = BehaviorGraph.BuildFrom(parent);\r\n\r\n            // Chains from the import should have the wrapper\r\n            var chain = graph.ChainFor<Action1>(x => x.M1());\r\n            chain.IsWrappedBy(typeof (Wrapper)).ShouldBeTrue();\r\n\r\n            graph.ChainFor<Action1>(x => x.M2()).IsWrappedBy(typeof (Wrapper)).ShouldBeTrue();\r\n\r\n\r\n            // Chains from the parent should not have the wrapper\r\n            graph.ChainFor<Action2>(x => x.M1()).IsWrappedBy(typeof (Wrapper)).ShouldBeFalse();\r\n            graph.ChainFor<Action2>(x => x.M2()).IsWrappedBy(typeof (Wrapper)).ShouldBeFalse();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void apply_policy_to_parent_only_applies_to_the_chains_in_the_imported_registry_and_the_parent()\r\n        {\r\n            import.Actions.IncludeType<Action1>();\r\n\r\n\r\n            parent.Import(import, \"import\");\r\n\r\n            parent.Actions.IncludeType<Action2>();\r\n\r\n            parent.Policies.Global.Configure(g => g.WrapAllWith<Wrapper>());\r\n\r\n            var graph = BehaviorGraph.BuildFrom(parent);\r\n\r\n            // Chains from the import should have the wrapper\r\n            graph.ChainFor<Action1>(x => x.M1()).IsWrappedBy(typeof (Wrapper)).ShouldBeTrue();\r\n            graph.ChainFor<Action1>(x => x.M2()).IsWrappedBy(typeof (Wrapper)).ShouldBeTrue();\r\n\r\n\r\n            // Chains from the parent should also have the wrapper\r\n            graph.ChainFor<Action2>(x => x.M1()).IsWrappedBy(typeof (Wrapper)).ShouldBeTrue();\r\n            graph.ChainFor<Action2>(x => x.M2()).IsWrappedBy(typeof (Wrapper)).ShouldBeTrue();\r\n        }\r\n\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/FubuRegistryTester.cs",
    "content": "using FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class FubuRegistryTester\r\n    {\r\n        [Test]\r\n        public void what_is_the_order()\r\n        {\r\n            new FubuRegistry();\r\n        }\r\n\r\n        [Test]\r\n        public void policies_are_only_registered_once()\r\n        {\r\n            FakePolicy.Count = 0;\r\n\r\n            BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Policies.Local.Add<FakePolicy>();\r\n                x.Policies.Local.Add<FakePolicy>();\r\n                x.Policies.Local.Add<FakePolicy>();\r\n                x.Policies.Local.Add<FakePolicy>();\r\n                x.Policies.Local.Add<FakePolicy>();\r\n                x.Policies.Local.Add<FakePolicy>();\r\n            });\r\n\r\n            FakePolicy.Count.ShouldBe(1);\r\n        }\r\n\r\n        [Test]\r\n        public void registries_may_only_be_registered_once()\r\n        {\r\n            FakeIncludeRegistry.Count = 0;\r\n\r\n            BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Import<FakeIncludeRegistry>(string.Empty);\r\n                x.Import<FakeIncludeRegistry>(string.Empty);\r\n                x.Import<FakeIncludeRegistry>(string.Empty);\r\n                x.Import<FakeIncludeRegistry>(string.Empty);\r\n            });\r\n\r\n            FakeIncludeRegistry.Count.ShouldBe(1);\r\n        }\r\n\r\n        [Test]\r\n        public void alter_settings_modifies_settings_object()\r\n        {\r\n            var registry = new FubuRegistry(r => r.AlterSettings<SettingsObject>(so => so.Touched = true));\r\n            \r\n            BehaviorGraph.BuildFrom(registry)\r\n                .Settings.Get<SettingsObject>().Touched.ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void replace_settings()\r\n        {\r\n            var settings1 = new SettingsObject();\r\n\r\n            var registry = new FubuRegistry();\r\n            registry.ReplaceSettings(settings1);\r\n\r\n            BehaviorGraph.BuildFrom(registry).Settings.Get<SettingsObject>()\r\n                .ShouldBeTheSameAs(settings1);\r\n\r\n\r\n        }\r\n    }\r\n\r\n    public class SettingsObject\r\n    {\r\n        public bool Touched { get; set; }\r\n    }\r\n\r\n    public class FakeIncludeRegistry : FubuRegistry\r\n    {\r\n        public static int Count;\r\n\r\n        public FakeIncludeRegistry()\r\n        {\r\n            Configure(x => Count++);\r\n        }\r\n    }\r\n\r\n    public class FakePolicy : IConfigurationAction\r\n    {\r\n        public static int Count;\r\n\r\n        public void Configure(BehaviorGraph graph)\r\n        {\r\n            Count++;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/HtmlGenerationTestExtensions.cs",
    "content": "using Shouldly;\r\nusing HtmlTags;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    public static class HtmlGenerationTestExtensions\r\n    {\r\n        public static HtmlTag ShouldHaveTagName(this HtmlTag tag, string tagName)\r\n        {\r\n            tag.TagName().ShouldBe(tagName);\r\n\r\n            return tag;\r\n        }\r\n\r\n        public static HtmlTag ShouldHaveClass(this HtmlTag tag, string className)\r\n        {\r\n            tag.HasClass(className).ShouldBeTrue();\r\n            return tag;\r\n        }\r\n\r\n        public static HtmlTag ShouldNotHaveClass(this HtmlTag tag, string className)\r\n        {\r\n            tag.HasClass(className).ShouldBeFalse();\r\n            return tag;\r\n        }\r\n\r\n        public static HtmlTag ShouldHaveAttribute(this HtmlTag tag, string key, string value)\r\n        {\r\n            tag.Attr(key).ShouldBe(value);\r\n            return tag;\r\n        }\r\n\r\n        public static HtmlTag ShouldBeTextbox(this HtmlTag tag)\r\n        {\r\n            tag.ShouldHaveTagName(\"input\");\r\n            tag.ShouldHaveAttribute(\"type\", \"text\");\r\n            return tag;\r\n        }\r\n\r\n        public static HtmlTag ShouldBeSelect(this HtmlTag tag)\r\n        {\r\n            tag.ShouldHaveTagName(\"select\");\r\n            return tag;\r\n        }\r\n\r\n        //public static HtmlTag ShouldHaveElement(this HtmlTag node, string elementName, string requiredAttributeName, string requiredAttributeValue)\r\n        //{\r\n        //    var element = node.AllChildNodes().FirstOrDefault(e =>\r\n        //    {\r\n        //        if (e.Name != elementName) return false;\r\n        //        var attribute = e.Attributes[requiredAttributeName];\r\n        //        if (attribute == null) return false;\r\n        //        return (attribute.Value == requiredAttributeValue);\r\n        //    });\r\n        //    if (element == null) Assert.Fail(\"Expected '{0}' to contain a {1} that has {2} = '{3}'.\", node.OuterHtml, elementName, requiredAttributeName, requiredAttributeValue);\r\n        //    return element;\r\n        //}\r\n\r\n        //public static HtmlTag ShouldHaveElementWithInnerText(this HtmlTag node, string elementName, string innerText)\r\n        //{\r\n        //    var element = node.AllChildNodes().FirstOrDefault(e => e.Name == elementName && e.InnerText.Trim() == innerText);\r\n        //    if (element == null) Assert.Fail(\"Expected '{0}' to contain a {1} that has innerText = '{2}'.\", node.OuterHtml, elementName, innerText);\r\n        //    return element;\r\n        //}\r\n\r\n        //public static HtmlTag ShouldHaveElement(this HtmlTag node, string elementName)\r\n        //{\r\n        //    var element = node.AllChildNodes().FirstOrDefault(child => child.Name == elementName);\r\n        //    if (element == null) Assert.Fail(\"Expected '{0}' to contain <{1}> element.\", node.OuterHtml, elementName);\r\n        //    return element;\r\n        //}\r\n\r\n        //public static HtmlTag ShouldBeElement(this HtmlTag node, string elementName)\r\n        //{\r\n        //    if (node.Name != elementName) Assert.Fail(\"Expected '{0}' to be <{1}> element.\", node.OuterHtml, elementName);\r\n        //    return node;\r\n        //}\r\n\r\n        //public static IEnumerable<HtmlTag> AllChildNodes(this HtmlTag node)\r\n        //{\r\n        //    foreach (var childNode in node.ChildNodes)\r\n        //    {\r\n        //        if (childNode.NodeType != HtmlTagType.Element) continue;\r\n        //        yield return childNode;\r\n        //        foreach (var child in childNode.AllChildNodes())\r\n        //        {\r\n        //            yield return child;\r\n        //        }\r\n        //    }\r\n        //}\r\n\r\n        //public static HtmlTag ShouldNotHaveElement(this HtmlTag node, Func<HtmlTag, bool> criteria)\r\n        //{\r\n        //    var element = node.AllChildNodes().FirstOrDefault(criteria);\r\n        //    if (element != null) Assert.Fail(\"Expected '{0}' to not have an element with specified the criteria.\", node.OuterHtml);\r\n        //    return element;\r\n        //}\r\n\r\n        //public static HtmlTag ShouldNotHaveElement(this HtmlTag node, string elementName)\r\n        //{\r\n        //    var element = node.AllChildNodes().FirstOrDefault(child => child.Name == elementName);\r\n        //    if (element != null) Assert.Fail(\"Unexpected '{0}' element.\", elementName);\r\n        //    return element;\r\n        //}\r\n\r\n        //public static HtmlTag ShouldHaveInnerText(this HtmlTag node, string innerText)\r\n        //{\r\n        //    node.InnerText.Trim().ShouldBe(innerText);\r\n        //    return node;\r\n        //}\r\n\r\n        //public static HtmlTag ShouldNotHaveAttribute(this HtmlTag node, string attributeName)\r\n        //{\r\n        //    var attribute = node.Attributes[attributeName];\r\n        //    if (attribute != null) Assert.Fail(\"Element has unexpected attribute '{0}' with value '{1}'\", attribute.Name, attribute.Value);\r\n        //    return node;\r\n        //}\r\n\r\n        //public static HtmlTag ShouldNotHaveAttributeValue(this HtmlTag node, string attributeName, string attributeValue)\r\n        //{\r\n        //    var attribute = node.Attributes[attributeName];\r\n        //    if (attribute != null && attribute.Value == attributeValue) Assert.Fail(\"Element has unexpected attribute '{0}' with value '{1}'\", attribute.Name, attribute.Value);\r\n        //    return node;\r\n        //}\r\n\r\n        //public static HtmlTag ShouldNotHaveCssClass(this HtmlTag node, string className)\r\n        //{\r\n        //    var attribute = node.Attributes[\"class\"];\r\n        //    if (attribute != null)\r\n        //    {\r\n        //        attribute.Value.Split(' ').ShouldNotContain(className);\r\n        //    }\r\n        //    return node;\r\n        //}\r\n\r\n\r\n        //public static HtmlTag ShouldHaveCssClass(this HtmlTag node, string className)\r\n        //{\r\n        //    var attribute = node.Attributes[\"class\"];\r\n\r\n        //    if (attribute == null) Assert.Fail(\"Element does not have any CSS classes\");\r\n        //    attribute.Value.Split(' ').ShouldContain(className);\r\n        //    return node;\r\n        //}\r\n\r\n        //public static HtmlAttribute ShouldHaveAttribute(this HtmlTag node, string attributeName)\r\n        //{\r\n        //    var attribute = node.Attributes[attributeName];\r\n        //    if (attribute == null) Assert.Fail(\"Element does not have attribute '{0}'\", attributeName);\r\n        //    return attribute;\r\n        //}\r\n\r\n\r\n        //public static HtmlTag ShouldHaveAttributeValue(this HtmlTag node, string attributeName, string attributeValue)\r\n        //{\r\n        //    node.ShouldHaveAttribute(attributeName).Value.ShouldBe(attributeValue);\r\n        //    return node;\r\n        //}\r\n\r\n        //public static HtmlTag ShouldHaveElement(this string s, string elementName)\r\n        //{\r\n        //    return s.ShouldRenderValidHtml().DocumentNode.ShouldHaveElement(elementName);\r\n        //}\r\n\r\n        //public static HtmlTag AsHtml(this string s)\r\n        //{\r\n        //    return s.ShouldRenderValidHtml().DocumentNode;\r\n        //}\r\n\r\n        //public static HtmlTag AsHtmlElement(this string s)\r\n        //{\r\n        //    var firstElement = s.AsHtml().FirstChild;\r\n        //    firstElement.ShouldNotBeNull();\r\n        //    return firstElement;\r\n        //}\r\n\r\n        //public static HtmlDocument ShouldRenderValidHtml(this string s)\r\n        //{\r\n        //    if (TestHelper.IsRunningInteractively())\r\n        //    {\r\n        //        Debug.WriteLine(s);\r\n        //    }\r\n        //    var doc = new HtmlDocument\r\n        //    {\r\n        //        OptionAutoCloseOnEnd = false,\r\n        //        OptionCheckSyntax = true,\r\n        //        OptionFixNestedTags = false\r\n        //    };\r\n        //    doc.LoadHtml(s);\r\n        //    if (doc.ParseErrors.Count > 0)\r\n        //    {\r\n        //        string errors = null;\r\n        //        foreach (var error in doc.ParseErrors)\r\n        //        {\r\n        //            var parseError = (HtmlParseError)error;\r\n        //            errors += (String.IsNullOrEmpty(parseError.Reason) ? parseError.Code.ToString() : parseError.Reason) + Environment.NewLine;\r\n        //        }\r\n        //        Assert.Fail(\"Invalid HTML: {0}{1}{2}\", s, Environment.NewLine, errors);\r\n        //    }\r\n        //    return doc;\r\n        //}\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/AspNet/AspNetCurrentHttpRequestTester.cs",
    "content": "﻿using System.Web;\r\nusing FubuMVC.Core.Http.AspNet;\r\nusing FubuMVC.Tests.TestSupport;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Http.AspNet\r\n{\r\n\r\n    [TestFixture]\r\n    public class AspNetCurrentHttpRequestTester : InteractionContext<AspNetHttpRequest>\r\n    {\r\n        [Test]\r\n        public void full_url_should_return_Request_Url_property_value()\r\n        {\r\n            var request = MockRepository.GenerateStub<HttpRequestBase>();\r\n            var expectedUri = \"https://foo.bar:999/baz?x=y\";\r\n            request.Stub(r => r.Url).Return(new System.Uri(expectedUri));\r\n            var currentRequest = new AspNetHttpRequest(request, MockFor<HttpResponseBase>());\r\n            currentRequest.FullUrl().ShouldBe(expectedUri);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/AspNet/AspNetModelBindingTester.cs",
    "content": "using System.Web;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http.AspNet\r\n{\r\n    [TestFixture]\r\n    public class AspNetModelBindingTester\r\n    {\r\n        private IValueConverterRegistry registry;\r\n\r\n        [TestFixtureSetUp]\r\n        public void SetUp()\r\n        {\r\n            using (var runtime = FubuRuntime.Basic())\r\n            {\r\n                registry = runtime.Get<BindingRegistry>();\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void can_find_a_converter_for_a_system_property()\r\n        {\r\n            var property = ReflectionHelper.GetProperty<ModelWithHttpPostedFileBase>(x => x.AcceptTypes);\r\n            registry.FindConverter(property).ShouldNotBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void can_find_a_converter_for_HttpPostedFileBase()\r\n        {\r\n            var property = ReflectionHelper.GetProperty<ModelWithHttpPostedFileBase>(x => x.File);\r\n            registry.FindConverter(property).ShouldNotBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void can_find_a_converter_for_HttpCookie()\r\n        {\r\n            var property = ReflectionHelper.GetProperty<ModelWithHttpPostedFileBase>(x => x.MyCookie);\r\n            registry.FindConverter(property).ShouldNotBeNull();\r\n        }\r\n\r\n\r\n        public class ModelWithHttpPostedFileBase\r\n        {\r\n            public HttpPostedFileBase File { get; set; }\r\n            public string File2 { get; set; }\r\n            public HttpCookie MyCookie { get; set; }\r\n\r\n            // this is a \"system\" property defined in AggregateDictionary\r\n            public string[] AcceptTypes { get; set; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/AspNet/AspNetServiceArgumentsTester.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Web;\r\nusing System.Web.Routing;\r\nusing FubuCore.Binding;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.AspNet;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Http.AspNet\r\n{\r\n    [TestFixture]\r\n    public class AspNetServiceArgumentsTester\r\n    {\r\n        private HttpContextBase theHttpContext;\r\n        private RequestContext theRequestContext;\r\n        private AspNetServiceArguments theArguments;\r\n        private HttpRequestBase theHttpRequest;\r\n        private HttpResponseBase theHttpResponse;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theHttpContext = MockRepository.GenerateMock<HttpContextBase>();\r\n            theRequestContext = new RequestContext(theHttpContext, new RouteData());\r\n\r\n            theHttpRequest = MockRepository.GenerateMock<HttpRequestBase>();\r\n            theHttpContext.Stub(x => x.Request).Return(theHttpRequest);\r\n\r\n            theHttpResponse = MockRepository.GenerateMock<HttpResponseBase>();\r\n            theHttpContext.Stub(x => x.Response).Return(theHttpResponse);\r\n\r\n            theHttpContext.Stub(x => x.Items).Return(new Dictionary<string, object>());\r\n\r\n            theArguments = new AspNetServiceArguments(theRequestContext);\r\n\r\n            \r\n        }\r\n\r\n        [Test]\r\n        public void registers_an_http_context_base()\r\n        {\r\n            theArguments.Get<HttpContextBase>().ShouldNotBeNull();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void should_register_the_http_context_base()\r\n        {\r\n            theArguments.Get<HttpContextBase>().ShouldBeTheSameAs(theHttpContext);\r\n        }\r\n\r\n        [Test]\r\n        public void should_register_a_current_request_implementation()\r\n        {\r\n            theArguments.Get<IHttpRequest>().ShouldBeOfType<AspNetHttpRequest>();\r\n        }\r\n\r\n        [Test]\r\n        public void should_register_an_HttpWriter()\r\n        {\r\n            theArguments.Get<IHttpResponse>().ShouldBeOfType<AspNetHttpResponse>();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/AspNet/SimpleKeyValueTester.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuMVC.Core.Http.AspNet;\r\nusing FubuTestingSupport;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http.AspNet\r\n{\r\n    [TestFixture]\r\n    public class SimpleKeyValueTester\r\n    {\r\n         \r\n        private IDictionary<string, object> _ajaxRequestInput = new Dictionary<string, object> { { \"X-Requested-With\", \"XMLHttpRequest\" } };\r\n        \r\n        [Test]\r\n        public void should_default_to_simple_contains()\r\n        {\r\n            var skv = new SimpleKeyValues((key) => _ajaxRequestInput[key], () => _ajaxRequestInput.Select(kvp => kvp.Key));\r\n\r\n            skv.Has(\"X-Requested-With\").ShouldBeTrue();\r\n            skv.Has(\"x-requested-with\").ShouldBeFalse();\r\n\r\n        }\r\n        [Test]\r\n        public void should_use_custom_compare()\r\n        {\r\n            var skv = new SimpleKeyValues((key) => _ajaxRequestInput[key], () => _ajaxRequestInput.Select(kvp => kvp.Key), (key,keys) => keys.Contains(key,StringComparer.InvariantCultureIgnoreCase));\r\n\r\n            skv.Has(\"X-Requested-With\").ShouldBeTrue();\r\n            skv.Has(\"x-requested-with\").ShouldBeTrue();\r\n\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Compression/ContentCompressionExtensionTester.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Http.Compression;\r\nusing FubuMVC.Core.Registration;\r\nusing Shouldly;\r\nusing HtmlTags;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http.Compression\r\n{\r\n    [TestFixture]\r\n    public class ContentCompressionExtensionTester\r\n    {\r\n        [Test]\r\n        public void compresses_by_default()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.IncludeType<MixedCompressionController>();\r\n\r\n                x.Policies.Local.Add<ApplyCompression>();\r\n            });\r\n\r\n            chainHasFilter<MixedCompressionController>(graph, x => x.get_compressed()).ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void excludes_class_level_do_not_compress_attribute()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.IncludeType<NoCompressionController>();\r\n                x.Policies.Local.Add<ApplyCompression>();\r\n            });\r\n\r\n            chainHasFilter<NoCompressionController>(graph, x => x.get_stuff()).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void mixing_and_matching_default_compression()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.IncludeType<MixedCompressionController>();\r\n                x.Policies.Local.Add<ApplyCompression>();\r\n            });\r\n\r\n            chainHasFilter<MixedCompressionController>(graph, x => x.get_compressed()).ShouldBeTrue();\r\n            chainHasFilter<MixedCompressionController>(graph, x => x.get_without_compression()).ShouldBeFalse();\r\n        }\r\n\r\n        private bool chainHasFilter<T>(BehaviorGraph graph, Expression<Func<T, object>> expression)\r\n        {\r\n            return graph\r\n                .ChainFor(expression)\r\n                .Filters\r\n                .Any(x => x.GetType() == typeof (HttpContentEncodingFilter));\r\n        }\r\n    }\r\n\r\n    [DoNotCompress]\r\n    public class NoCompressionController\r\n    {\r\n        public HtmlDocument get_stuff()\r\n        {\r\n            return new HtmlDocument();\r\n        }\r\n    }\r\n\r\n    public class MixedCompressionController\r\n    {\r\n        public HtmlDocument get_compressed()\r\n        {\r\n            return new HtmlDocument();\r\n        }\r\n\r\n        [DoNotCompress]\r\n        public HtmlDocument get_without_compression()\r\n        {\r\n            return new HtmlDocument();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Compression/ContentEncodingTester.cs",
    "content": "using FubuMVC.Core.Http.Compression;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http.Compression\r\n{\r\n    [TestFixture]\r\n    public class ContentEncodingTester\r\n    {\r\n        private ContentEncoding theEncoding;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theEncoding = ContentEncoding.GZip;\r\n        }\r\n\r\n        [Test]\r\n        public void equals()\r\n        {\r\n            theEncoding.ShouldBe(ContentEncoding.GZip);\r\n        }\r\n\r\n        [Test]\r\n        public void simple_match()\r\n        {\r\n            theEncoding.Matches(\"gzip\").ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void matches_case_insensitive()\r\n        {\r\n            theEncoding.Matches(\"GZip\").ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void matches_negative()\r\n        {\r\n            theEncoding.Matches(\"deflate\").ShouldBeFalse();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Compression/DeflateEncodingTester.cs",
    "content": "using System.IO;\r\nusing System.IO.Compression;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Http.Compression;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http.Compression\r\n{\r\n    [TestFixture]\r\n    public class DeflateEncodingTester\r\n    {\r\n        private DeflateHttpContentEncoding theEncoding;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theEncoding = new DeflateHttpContentEncoding();\r\n        }\r\n\r\n        [Test]\r\n        public void matches_gzip()\r\n        {\r\n            theEncoding.MatchingEncoding.ShouldBe(ContentEncoding.Deflate);\r\n        }\r\n\r\n        [Test]\r\n        public void compresses_the_stream_using_deflate()\r\n        {\r\n            var original = \"Testing...\".AsStream().As<MemoryStream>();\r\n            var compressed = theEncoding.Encode(original);\r\n\r\n            compressed.ShouldBeOfType<DeflateStream>();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Compression/GZipEncodingTester.cs",
    "content": "using System.IO;\r\nusing System.IO.Compression;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Http.Compression;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http.Compression\r\n{\r\n    [TestFixture]\r\n    public class GZipEncodingTester\r\n    {\r\n        private GZipHttpContentEncoding theEncoding;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theEncoding = new GZipHttpContentEncoding();\r\n        }\r\n\r\n        [Test]\r\n        public void matches_gzip()\r\n        {\r\n            theEncoding.MatchingEncoding.ShouldBe(ContentEncoding.GZip);\r\n        }\r\n\r\n        [Test]\r\n        public void compresses_the_stream()\r\n        {\r\n            var original = \"Testing...\".AsStream().As<MemoryStream>();\r\n            var compressed = theEncoding.Encode(original);\r\n\r\n            // Hit this hard w/ the integration tests\r\n            compressed.ShouldBeOfType<GZipStream>();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Compression/HttpContentEncodersTester.cs",
    "content": "using FubuMVC.Core.Http.Compression;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Http.Compression\r\n{\r\n    [TestFixture]\r\n    public class HttpContentEncodersTester\r\n    {\r\n        private IHttpContentEncoding e1;\r\n        private IHttpContentEncoding e2;\r\n        private HttpContentEncoders theEncoders;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            e1 = MockRepository.GenerateStub<IHttpContentEncoding>();\r\n            e2 = MockRepository.GenerateStub<IHttpContentEncoding>();\r\n\r\n            e1.Stub(x => x.MatchingEncoding).Return(ContentEncoding.GZip);\r\n            e2.Stub(x => x.MatchingEncoding).Return(ContentEncoding.Deflate);\r\n\r\n            theEncoders = new HttpContentEncoders(new[] { e1, e2 });\r\n        }\r\n\r\n        [Test]\r\n        public void simple_match_on_first()\r\n        {\r\n            theEncoders.MatchFor(\"gzip, deflate\").ShouldBe(e1);\r\n        }\r\n\r\n        [Test]\r\n        public void match_on_last()\r\n        {\r\n            theEncoders.MatchFor(\"unknown, deflate\").ShouldBe(e2);\r\n        }\r\n\r\n        [Test]\r\n        public void no_match_returns_passthrough()\r\n        {\r\n            theEncoders.MatchFor(\"unknown1, unknown2\").ShouldBeOfType<HttpContentEncoders.PassthroughEncoding>();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Compression/HttpContentEncodingFilterTester.cs",
    "content": "using FubuCore.Binding;\r\nusing FubuCore.Binding.Values;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Compression;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Tests.TestSupport;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Tests.Http.Compression\r\n{\r\n    [TestFixture]\r\n    public class HttpContentEncodingFilterTester : InteractionContext<HttpContentEncodingFilter>\r\n    {\r\n        private IHttpContentEncoding theEncoding;\r\n        private string theAcceptedEncoding;\r\n        private TypeArguments theArguments;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            theArguments = new TypeArguments();\r\n            theEncoding = MockFor<IHttpContentEncoding>();\r\n            theAcceptedEncoding = \"gzip, deflate, sdch\";\r\n\r\n            theEncoding.Stub(x => x.MatchingEncoding).Return(ContentEncoding.GZip);\r\n            MockFor<IHttpContentEncoders>().Stub(x => x.MatchFor(theAcceptedEncoding)).Return(theEncoding);\r\n\r\n            var request = new OwinHttpRequest();\r\n            request.AppendHeader(HttpRequestHeaders.AcceptEncoding, theAcceptedEncoding);\r\n\r\n\r\n\r\n            theArguments.Set(typeof(IHttpRequest), request);\r\n            theArguments.Set(typeof(IHttpResponse), MockFor<IHttpResponse>());\r\n\r\n            ClassUnderTest.Filter(theArguments).ShouldBe(DoNext.Continue);\r\n        }\r\n\r\n        [Test]\r\n        public void sets_the_encoding_in_the_http_writer()\r\n        {\r\n            MockFor<IHttpResponse>().AssertWasCalled(x => x.UseEncoding(theEncoding));\r\n        }\r\n\r\n        [Test]\r\n        public void sets_the_content_encoding_header()\r\n        {\r\n            MockFor<IHttpResponse>().AssertWasCalled(x => x.AppendHeader(HttpResponseHeaders.ContentEncoding, \"gzip\"));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/ConnegQuerystringTester.cs",
    "content": "﻿using System.Collections.Specialized;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Runtime;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http\r\n{\r\n    [TestFixture]\r\n    public class ConnegQuerystringTester\r\n    {\r\n        public readonly ConnegQuerystring theParameter\r\n            = new ConnegQuerystring(\"Format\", \"JSON\", MimeType.Json);\r\n\r\n        [Test]\r\n        public void no_querystring()\r\n        {\r\n            theParameter.Determine(new NameValueCollection())\r\n                .ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void exact_hit()\r\n        {\r\n            var values = new NameValueCollection();\r\n            values[theParameter.Key] = theParameter.Value;\r\n\r\n            theParameter.Determine(values)\r\n                .ShouldBe(theParameter.Mimetype);\r\n        }\r\n\r\n        [Test]\r\n        public void miss_on_value()\r\n        {\r\n            var values = new NameValueCollection();\r\n            values[theParameter.Key] = \"XML\";\r\n\r\n            theParameter.Determine(values)\r\n                .ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void case_insensitive_on_parameter()\r\n        {\r\n            var values = new NameValueCollection();\r\n            values[theParameter.Key.ToLower()] = theParameter.Value;\r\n\r\n            theParameter.Determine(values)\r\n                .ShouldBe(theParameter.Mimetype);\r\n        }\r\n\r\n        [Test]\r\n        public void case_insensitive_on_value()\r\n        {\r\n            var values = new NameValueCollection();\r\n            values[theParameter.Key] = theParameter.Value.ToLower();\r\n\r\n            theParameter.Determine(values)\r\n                .ShouldBe(theParameter.Mimetype);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/ConnegSettingsTester.cs",
    "content": "﻿using System.Linq;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Json;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Formatters;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http\r\n{\r\n    [TestFixture]\r\n    public class ConnegSettingsTester\r\n    {\r\n        private const string theOriginalMimetype = \"random/custom\";\r\n\r\n        [Test]\r\n        public void no_correction_with_no_querystring()\r\n        {\r\n            var request = OwinHttpRequest.ForTesting();\r\n            var mimeType = new CurrentMimeType(\"text/json\", theOriginalMimetype);\r\n\r\n            new ConnegSettings().InterpretQuerystring(mimeType, request);\r\n\r\n            mimeType.AcceptTypes.Single().ShouldBe(theOriginalMimetype);\r\n        }\r\n\r\n        [Test]\r\n        public void no_correction_with_wrong_querystring()\r\n        {\r\n            var request = OwinHttpRequest.ForTesting();\r\n            request.QueryString[\"Key\"] = \"Json\";\r\n\r\n            var mimeType = new CurrentMimeType(\"text/json\", theOriginalMimetype);\r\n\r\n            new ConnegSettings().InterpretQuerystring(mimeType, request);\r\n\r\n            mimeType.AcceptTypes.Single().ShouldBe(theOriginalMimetype);\r\n        }\r\n\r\n        [Test]\r\n        public void correct_to_json()\r\n        {\r\n            var request = OwinHttpRequest.ForTesting();\r\n            request.QueryString[\"Format\"] = \"Json\";\r\n\r\n            var mimeType = new CurrentMimeType(\"text/json\", theOriginalMimetype);\r\n\r\n            new ConnegSettings().InterpretQuerystring(mimeType, request);\r\n\r\n            mimeType.AcceptTypes.Single().ShouldBe(MimeType.Json.Value);\r\n        }\r\n\r\n        [Test]\r\n        public void correct_to_xml()\r\n        {\r\n            var request = OwinHttpRequest.ForTesting();\r\n            request.QueryString[\"Format\"] = \"XML\";\r\n\r\n            var mimeType = new CurrentMimeType(\"text/json\", theOriginalMimetype);\r\n\r\n            new ConnegSettings().InterpretQuerystring(mimeType, request);\r\n\r\n            mimeType.AcceptTypes.Single().ShouldBe(MimeType.Xml.Value);\r\n        }\r\n\r\n        [Test]\r\n        public void use_a_custom_querystring_parameter()\r\n        {\r\n            var request = OwinHttpRequest.ForTesting();\r\n            request.QueryString[\"Format\"] = \"Text\";\r\n\r\n            var settings = new ConnegSettings();\r\n            settings.QuerystringParameters.Add(new ConnegQuerystring(\"Format\", \"Text\", MimeType.Text));\r\n\r\n            var mimeType = new CurrentMimeType(\"text/json\", theOriginalMimetype);\r\n\r\n            settings.InterpretQuerystring(mimeType, request);\r\n\r\n            mimeType.AcceptTypes.Single().ShouldBe(MimeType.Text.Value);\r\n        }\r\n\r\n        [Test]\r\n        public void the_default_formatters_are_json_then_xml()\r\n        {\r\n            new ConnegSettings().Formatters.Select(x => x.GetType())\r\n                .ShouldHaveTheSameElementsAs(typeof(NewtonsoftJsonFormatter), typeof(XmlFormatter));\r\n        }\r\n\r\n        [Test]\r\n        public void find_formatter_by_mimetype()\r\n        {\r\n            new ConnegSettings().FormatterFor(MimeType.Json)\r\n                .ShouldBeOfType<NewtonsoftJsonFormatter>();\r\n\r\n            new ConnegSettings().FormatterFor(MimeType.Xml)\r\n                .ShouldBeOfType<XmlFormatter>();\r\n        }\r\n\r\n        [Test]\r\n        public void add_formatter_places_it_first()\r\n        {\r\n            var settings = new ConnegSettings();\r\n            settings.AddFormatter(new AjaxAwareJsonSerializer());\r\n\r\n            settings.FormatterFor(MimeType.Json)\r\n                .ShouldBeOfType<AjaxAwareJsonSerializer>();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Cookies/CookieParserTester.cs",
    "content": "﻿using System;\r\nusing FubuMVC.Core.Http.Cookies;\r\nusing NUnit.Framework;\r\nusing System.Linq;\r\nusing Shouldly;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Tests.Http.Cookies\r\n{\r\n    [TestFixture]\r\n    public class CookieParserTester\r\n    {\r\n        [Test]\r\n        public void one_simple_value()\r\n        {\r\n            var cookie = CookieParser.ToCookie(\"a=1\");\r\n            var state = cookie.States.Single();\r\n\r\n            state.Name.ShouldBe(\"a\");\r\n            state.Value.ShouldBe(\"1\");\r\n        }\r\n\r\n        [Test]\r\n        public void multiple_values()\r\n        {\r\n            var cookie = CookieParser.ToCookie(\"a=1; b=2\");\r\n            cookie.For(\"a\").Value.ShouldBe(\"1\");\r\n            cookie.For(\"b\").Value.ShouldBe(\"2\");\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void nested_values()\r\n        {\r\n            var cookie = CookieParser.ToCookie(\"a=1; b=b1=2&b2=3\");\r\n            cookie.For(\"a\").Value.ShouldBe(\"1\");\r\n\r\n            var state = cookie.For(\"b\");\r\n            state[\"b1\"].ShouldBe(\"2\");\r\n            state[\"b2\"].ShouldBe(\"3\");\r\n        }\r\n\r\n        [Test]\r\n        public void quoted_value_just_for_fun()\r\n        {\r\n            var cookie = CookieParser.ToCookie(\"a=\\\"some text\\\"\");\r\n            var state = cookie.States.Single();\r\n            state.Value.ShouldBe(\"some text\");\r\n        }\r\n\r\n        [Test]\r\n        public void sets_the_domain()\r\n        {\r\n            var cookie = CookieParser.ToCookie(\"a=1; domain=http://cnn.com\");\r\n\r\n            cookie.Domain.ShouldBe(\"http://cnn.com\");\r\n        }\r\n\r\n        [Test]\r\n        public void sets_the_domain_is_case_insensitive()\r\n        {\r\n            var cookie = CookieParser.ToCookie(\"a=1; Domain=http://cnn.com\");\r\n\r\n            cookie.Domain.ShouldBe(\"http://cnn.com\");\r\n        }\r\n\r\n        [Test]\r\n        public void set_The_max_age()\r\n        {\r\n            var cookie = CookieParser.ToCookie(\"a=1; domain=http://cnn.com; max-age=5\");\r\n            cookie.MaxAge.ShouldBe(5.Seconds());\r\n        }\r\n\r\n        [Test]\r\n        public void set_the_path()\r\n        {\r\n            var cookie = CookieParser.ToCookie(\"a=1; Domain=http://cnn.com; path=foo;\");\r\n\r\n            cookie.Path.ShouldBe(\"foo\");\r\n        }\r\n\r\n        [Test]\r\n        public void set_The_path_with_default_value()\r\n        {\r\n            var cookie = CookieParser.ToCookie(\"a=1; Domain=http://cnn.com; path=;\");\r\n\r\n            cookie.Path.ShouldBe(\"/\");\r\n        }\r\n\r\n        [Test]\r\n        public void set_The_path_with_default_value_2()\r\n        {\r\n            var cookie = CookieParser.ToCookie(\"a=1; Domain=http://cnn.com; path;\");\r\n\r\n            cookie.Path.ShouldBe(\"/\");\r\n        }\r\n\r\n        [Test]\r\n        public void set_secure()\r\n        {\r\n            var cookie = CookieParser.ToCookie(\"a=1; Domain=http://cnn.com; secure;\");\r\n            cookie.Secure.ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void set_secure_is_case_insensitive()\r\n        {\r\n            var cookie = CookieParser.ToCookie(\"a=1; Domain=http://cnn.com; Secure;\");\r\n            cookie.Secure.ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void do_not_set_secure()\r\n        {\r\n            var cookie = CookieParser.ToCookie(\"a=1; Domain=http://cnn.com;\");\r\n            cookie.Secure.ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void set_http_only()\r\n        {\r\n            var cookie = CookieParser.ToCookie(\"a=1; Domain=http://cnn.com; httponly;\");\r\n\r\n            cookie.HttpOnly.ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void set_http_only_is_case_insensitive()\r\n        {\r\n            var cookie = CookieParser.ToCookie(\"a=1; Domain=http://cnn.com; HttpOnly;\");\r\n\r\n            cookie.HttpOnly.ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void http_only_is_not_set_by_default()\r\n        {\r\n            var cookie = CookieParser.ToCookie(\"a=1; Domain=http://cnn.com;\");\r\n            cookie.HttpOnly.ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void expires_is_not_set_by_default()\r\n        {\r\n            var cookie = CookieParser.ToCookie(\"a=1; Domain=http://cnn.com;\");\r\n            cookie.Expires.ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void expires_smoke()\r\n        {\r\n            var date = DateTime.Today.AddHours(5).ToUniversalTime();\r\n\r\n            var cookie = CookieParser.ToCookie(\"a=1; Domain=http://cnn.com; expires=\" + date.ToString(\"dddd, d'-'MMM'-'yy H:m:s 'GMT'\"));\r\n\r\n            cookie.Expires.Value.ToLocalTime().TimeOfDay.ShouldBe(date.ToLocalTime().TimeOfDay);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Cookies/CookieStateTester.cs",
    "content": "﻿using FubuMVC.Core.Http.Cookies;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Http.Cookies\r\n{\r\n    [TestFixture]\r\n    public class CookieStateTester\r\n    {\r\n        [Test]\r\n        public void parse_with_one_value()\r\n        {\r\n            var state = CookieState.Parse(\"key\", \"1\");\r\n            state.Name.ShouldBe(\"key\");\r\n            state.Value.ShouldBe(\"1\");\r\n        }\r\n\r\n        [Test]\r\n        public void parse_with_multiple_values()\r\n        {\r\n            var state = CookieState.Parse(\"key\", \"a=1\");\r\n\r\n            state.Name.ShouldBe(\"key\");\r\n            state.Value.ShouldBeNull();\r\n\r\n            state[\"a\"].ShouldBe(\"1\");\r\n        }\r\n\r\n        [Test]\r\n        public void parse_with_multiple_values_2()\r\n        {\r\n            var state = CookieState.Parse(\"key\", \"a=1&b=2&c=3\");\r\n\r\n            state.Name.ShouldBe(\"key\");\r\n            state.Value.ShouldBeNull();\r\n\r\n            state[\"a\"].ShouldBe(\"1\");\r\n            state[\"b\"].ShouldBe(\"2\");\r\n            state[\"c\"].ShouldBe(\"3\");\r\n        }\r\n\r\n        [Test]\r\n        public void silly_with_works()\r\n        {\r\n            var state = new CookieState(\"key\").With(\"a\", \"1\").With(\"b\", \"2\");\r\n\r\n            state[\"a\"].ShouldBe(\"1\");\r\n            state[\"b\"].ShouldBe(\"2\");\r\n        }\r\n\r\n        private void roundtrips(string name, string text)\r\n        {\r\n            var state = CookieState.Parse(name, text);\r\n            state.ToString().ShouldBe(name + \"=\" + text);\r\n        }\r\n\r\n        [Test]\r\n        public void writing()\r\n        {\r\n            roundtrips(\"a\", \"1\");\r\n            roundtrips(\"a\", \"a1=1&a2=2&a3=3\");\r\n\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Cookies/CookieTester.cs",
    "content": "﻿using System;\r\nusing System.Globalization;\r\nusing FubuMVC.Core.Http.Cookies;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Tests.Http.Cookies\r\n{\r\n    [TestFixture]\r\n    public class CookieTester\r\n    {\r\n        [Test]\r\n        public void matches()\r\n        {\r\n            var cookie = new Cookie();\r\n            cookie.Matches(\"a\").ShouldBeFalse();\r\n\r\n            cookie.Add(new CookieState(\"something\"));\r\n\r\n            cookie.Matches(\"a\").ShouldBeFalse();\r\n            cookie.Matches(\"something\").ShouldBeTrue();\r\n\r\n            cookie.Add(new CookieState(\"Else\"));\r\n            cookie.Matches(\"something\").ShouldBeTrue();\r\n            cookie.Matches(\"else\").ShouldBeTrue();\r\n            cookie.Matches(\"a\").ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void to_string_smoke_testing()\r\n        {\r\n            roundTrip(\"a=1; b=2\");\r\n            roundTrip(\"a=1; b=b1=1&b2=2\");\r\n            roundTrip(\"a=1; b=b1=1&b2=2; httponly\");\r\n            roundTrip(\"a=1; b=b1=1&b2=2; secure; httponly\");\r\n            roundTrip(\"a=1; b=b1=1&b2=2; secure\");\r\n            roundTrip(\"a=1; domain=http://cnn.com\");\r\n            roundTrip(\"a=1; expires=Fri, 08 Aug 2014 22:30:58 GMT; path=/\");\r\n            roundTrip(\"a=1; max-age=5; domain=http://cnn.com\");\r\n            roundTrip(\"a=1; domain=http://cnn.com; path=foo\");\r\n            roundTrip(\"a=1; max-age=5; domain=http://cnn.com; path=foo; secure; httponly\");\r\n        }\r\n\r\n        [Test]\r\n        public void to_string_expires()\r\n        {\r\n            var cookie = new Cookie(\"something\");\r\n            cookie.Expires = DateTime.Today.AddHours(10);\r\n\r\n            cookie.ToString().ShouldContain(\"expires=\" + cookie.Expires.Value.ToString(\"r\", CultureInfo.InvariantCulture));\r\n\r\n            cookie.Path = \"/\";\r\n            cookie.ToString().ShouldContain(\"expires=\" + cookie.Expires.Value.ToString(\"r\", CultureInfo.InvariantCulture) + \";\");\r\n        }\r\n\r\n        [Test]\r\n        public void value_with_only_one_state_with_only_one_value()\r\n        {\r\n            var cookie = new Cookie(\"a\", \"2\");\r\n            cookie.Value.ShouldBe(\"2\");\r\n        }\r\n\r\n        [Test]\r\n        public void can_set_value_for_single_value_cookies()\r\n        {\r\n            var cookie = new Cookie(\"a\", \"2\");\r\n            cookie.Value.ShouldBe(\"2\");\r\n\r\n            cookie.Value = \"3\";\r\n\r\n            cookie.Value.ShouldBe(\"3\");\r\n\r\n            cookie.States.Single().Value.ShouldBe(\"3\");\r\n        }\r\n\r\n        [Test]\r\n        public void value_with_more_than_one_state()\r\n        {\r\n            var cookie = new Cookie(\"a\").Add(new CookieState(\"a1\", \"1\"));\r\n            cookie.Value.ShouldBeNull();\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void value_with_no_states()\r\n        {\r\n            var cookie = new Cookie(\"foo\");\r\n            cookie.Value.ShouldBeNull();\r\n        }\r\n\r\n\r\n\r\n        private void roundTrip(string text)\r\n        {\r\n            var cookie = CookieParser.ToCookie(text);\r\n            cookie.ToString().ShouldBe(text);\r\n        }\r\n\r\n        [Test]\r\n        public void get_value()\r\n        {\r\n            var cookie = new Cookie(\"foo\").Add(new CookieState(\"a\", \"1\")).Add(new CookieState(\"b\", \"2\"));\r\n\r\n            cookie.GetValue(\"a\").ShouldBe(\"1\");\r\n            cookie.GetValue(\"b\").ShouldBe(\"2\");\r\n        }\r\n\r\n\t\t[Test]\r\n\t\tpublic void split_values()\r\n\t\t{\r\n\t\t\tCookieParser.SplitValues(\"a=b;c=d;\").ShouldHaveTheSameElementsAs(\"a=b\", \"c=d\");\r\n\t\t}\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Cookies/CookieValueSourceTester.cs",
    "content": "﻿using FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Cookies;\r\nusing FubuMVC.Tests.TestSupport;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Http.Cookies\r\n{\r\n    [TestFixture]\r\n    public class CookieValueSourceTester : InteractionContext<CookieValueSource>\r\n    {\r\n        private ICookies inner;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            inner = MockFor<ICookies>();\r\n        }\r\n\r\n        [Test]\r\n        public void provenance_has_to_be_cookies()\r\n        {\r\n            ClassUnderTest.Provenance.ShouldBe(RequestDataSource.Cookie.ToString());\r\n        }\r\n\r\n        [Test]\r\n        public void has_delegates()\r\n        {\r\n            ClassUnderTest.Has(\"a\").ShouldBeFalse();\r\n\r\n\r\n            inner.Stub(x => x.Has(\"b\")).Return(true);\r\n\r\n            ClassUnderTest.Has(\"b\").ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void get_with_single_value()\r\n        {\r\n            var cookie = new Cookie(\"a\", \"1\");\r\n            cookie.Value.ShouldBe(\"1\");\r\n\r\n            inner.Stub(x => x.Get(\"a\")).Return(cookie);\r\n\r\n            ClassUnderTest.Get(\"a\").ShouldBe(\"1\");\r\n        }\r\n\r\n        [Test]\r\n        public void value_with_miss()\r\n        {\r\n            ClassUnderTest.Value(\"a\", v => {\r\n                Assert.Fail(\"should not be called\");\r\n            }).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void value_with_single_value_hit()\r\n        {\r\n            var cookie = new Cookie(\"a\", \"1\");\r\n            inner.Stub(x => x.Get(\"a\")).Return(cookie);\r\n\r\n            bool wasCalled = false;\r\n            ClassUnderTest.Value(\"a\", v => {\r\n                wasCalled = true;\r\n\r\n                v.RawKey.ShouldBe(\"a\");\r\n                v.RawValue.ShouldBe(\"1\");\r\n                v.Source.ShouldBe(ClassUnderTest.Provenance);\r\n            }).ShouldBeTrue();\r\n\r\n            wasCalled.ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void value_that_hits_but_not_deterministic()\r\n        {\r\n            var cookie = new Cookie(\"a\");\r\n            cookie.Value.ShouldBeNull();\r\n            inner.Stub(x => x.Get(\"a\")).Return(cookie);\r\n\r\n            ClassUnderTest.Value(\"a\", v =>\r\n            {\r\n                Assert.Fail(\"should not be called\");\r\n            }).ShouldBeFalse();\r\n        }\r\n\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Cookies/CookieValueTester.cs",
    "content": "﻿using System;\r\nusing System.IO;\r\nusing System.Net;\r\nusing System.Threading.Tasks;\r\nusing FubuCore.Dates;\r\nusing FubuMVC.Core.Caching;\r\nusing FubuMVC.Core.Http.Cookies;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Tests.TestSupport;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Cookie = FubuMVC.Core.Http.Cookies.Cookie;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Http.Cookies\r\n{\r\n    [TestFixture]\r\n    public class CookieValueTester : InteractionContext<CookieValue>\r\n    {\r\n        private ISystemTime time;\r\n        private ICookies cookies;\r\n        private RecordingOutputWriter writer;\r\n        private string theName;\r\n        private CookieValue theCookieValue;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            time = MockRepository.GenerateMock<ISystemTime>();\r\n            cookies = MockFor<ICookies>();\r\n            writer = new RecordingOutputWriter();\r\n\r\n            theName = \"some name\";\r\n\r\n            theCookieValue = new CookieValue(theName, time, cookies, writer);\r\n        }\r\n\r\n        [Test]\r\n        public void erase()\r\n        {\r\n            var now = DateTime.Today.AddHours(8).ToUniversalTime();\r\n            time.Stub(x => x.UtcNow()).Return(now);\r\n\r\n            theCookieValue.Erase();\r\n\r\n            writer.LastCookie.ShouldNotBeNull();\r\n            writer.LastCookie.Value.ShouldBe(\"BLANK\"); // has to do this to keep SelfHost from going wonky\r\n            writer.LastCookie.Expires.ShouldBe(new DateTimeOffset(now.AddYears(-1)));\r\n        }\r\n\r\n        [Test]\r\n        public void write_value()\r\n        {\r\n            var now = DateTime.Today.AddHours(8).ToUniversalTime();\r\n            time.Stub(x => x.UtcNow()).Return(now);\r\n\r\n            theCookieValue.Value = \"some value\";\r\n\r\n            writer.LastCookie.ShouldNotBeNull();\r\n            writer.LastCookie.Value.ShouldBe(\"some value\");\r\n            writer.LastCookie.Expires.ShouldBe(new DateTimeOffset(now.AddYears(1)));\r\n        }\r\n    }\r\n\r\n    public class RecordingOutputWriter : IOutputWriter\r\n    {\r\n        public Cookie LastCookie;\r\n\r\n        public void WriteFile(string contentType, string localFilePath, string displayName)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task Write(string contentType, string renderedOutput)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task Write(string renderedOutput)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void RedirectToUrl(string url)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void AppendCookie(Cookie cookie)\r\n        {\r\n            LastCookie = cookie;\r\n        }\r\n\r\n        public void AppendHeader(string key, string value)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task Write(string contentType, Func<Stream, Task> output)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void WriteResponseCode(HttpStatusCode status, string description = null)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task<IRecordedOutput> Record(Func<Task> inner)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void Replay(IRecordedOutput output)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void Flush()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    \r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Cookies/CookiesTester.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Collections.Specialized;\r\nusing System.IO;\r\nusing FubuCore.Binding.Values;\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Cookies;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Http.Cookies\n{\n\t[TestFixture]\n\tpublic class CookiesTester\n\t{\n\t\tprivate OwinHttpRequest theRequest;\n\t\tprivate Core.Http.Cookies.Cookies theCookies;\n\n\t\t[SetUp]\n\t\tpublic void SetUp()\n\t\t{\n\t\t\ttheRequest = OwinHttpRequest.ForTesting();\n\t\t\ttheCookies = new Core.Http.Cookies.Cookies(theRequest);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void single_cookie()\r\n\t\t{\r\n\t\t    theRequest.AppendHeader(HttpRequestHeaders.Cookie, \"a=123;\");\n\t\t\ttheCookies.Get(\"a\").Value.ShouldBe(\"123\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void multiple_cookies()\n\t\t{\r\n            theRequest.AppendHeader(HttpRequestHeaders.Cookie, \"a=123;b=456;\");\n\t\t\ttheCookies.Get(\"a\").Value.ShouldBe(\"123\");\n\t\t\ttheCookies.Get(\"b\").Value.ShouldBe(\"456\");\n\t\t}\n\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Cookies/SegmentTester.cs",
    "content": "﻿using System.Diagnostics;\r\nusing System.Web;\r\nusing FubuMVC.Core.Http.Cookies;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\nusing System.Linq;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Tests.Http.Cookies\r\n{\r\n    [TestFixture]\r\n    public class SegmentTester\r\n    {\r\n        [Test]\r\n        public void parse_with_unquoted_value()\r\n        {\r\n            var segment = new Segment(\"a=1\");\r\n\r\n            segment.Key.ShouldBe(\"a\");\r\n            segment.Value.ShouldBe(\"1\");\r\n        }\r\n\r\n        [Test]\r\n        public void parse_with_no_value_uses_defaults()\r\n        {\r\n            var segment = new Segment(\"a\");\r\n            segment.Key.ShouldBe(\"a\");\r\n            segment.Value.ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void parse_with_quoted_value()\r\n        {\r\n            var segment = new Segment(\"a=\\\"how are you doing\\\"\");\r\n\r\n            segment.Key.ShouldBe(\"a\");\r\n            segment.Value.ShouldBe(\"how are you doing\");\r\n        }\r\n\r\n        [Test]\r\n        public void only_splits_on_first_equals()\r\n        {\r\n            var segment = new Segment(\"TestCookie=a1=b1&a2=b2\");\r\n            segment.Key.ShouldBe(\"TestCookie\");\r\n\r\n            segment.Value.ShouldBe(\"a1=b1&a2=b2\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/CurrentChainTester.cs",
    "content": "using System.Collections.Generic;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Http\r\n{\r\n    [TestFixture]\r\n    public class CurrentChainTester\r\n    {\r\n        private BehaviorChain theChain;\r\n        private IDictionary<string, object> theRouteData;\r\n        private Dictionary<string, object> someDifferentRouteData;\r\n        private BehaviorChain theSecondChain;\r\n        private BehaviorChain theThirdChain;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theChain = new RoutedChain(new RouteDefinition(\"some/pattern/url\"));\r\n\r\n            theSecondChain = new RoutedChain(new RouteDefinition(\"some/other/pattern\"));\r\n\r\n            theThirdChain = new RoutedChain(new RouteDefinition(\"yet/another/pattern\"));\r\n\r\n            theRouteData = new Dictionary<string, object>{\r\n                {\"A\", \"1\"},\r\n                {\"B\", \"2\"},\r\n                {\"C\", \"3\"}\r\n            };\r\n\r\n            someDifferentRouteData = new Dictionary<string, object>{\r\n                {\"A\", \"1\"},\r\n                {\"B\", \"2\"},\r\n                {\"C\", \"33\"}\r\n            };\r\n\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void keeps_the_route_data()\r\n        {\r\n            var currentChain = new CurrentChain(theChain, theRouteData);\r\n            currentChain.RouteData.ShouldBeTheSameAs(theRouteData);\r\n        }\r\n\r\n        [Test]\r\n        public void is_in_partial_negative()\r\n        {\r\n            var currentChain = new CurrentChain(theChain, null);\r\n            currentChain.IsInPartial().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void is_in_partial_positive()\r\n        {\r\n            var currentChain = new CurrentChain(theChain, null);\r\n            currentChain.Push(theSecondChain);\r\n            currentChain.IsInPartial().ShouldBeTrue();\r\n\r\n            currentChain.Push(theThirdChain);\r\n            currentChain.IsInPartial().ShouldBeTrue();\r\n\r\n            currentChain.Pop();\r\n            currentChain.IsInPartial().ShouldBeTrue();\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void is_in_partial_negative_after_popping_the_last_child()\r\n        {\r\n            var currentChain = new CurrentChain(theChain, null);\r\n            currentChain.Push(theSecondChain);\r\n            currentChain.Push(theThirdChain);\r\n\r\n            currentChain.Pop();\r\n            currentChain.Pop();\r\n\r\n            currentChain.IsInPartial().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void the_initial_state_points_to_the_top_chain()\r\n        {\r\n            new CurrentChain(theChain, theRouteData).Current.ShouldBeTheSameAs(theChain);\r\n        }\r\n\r\n        [Test]\r\n        public void the_top_chain_is_always_the_originating_chain()\r\n        {\r\n            var currentChain = new CurrentChain(theChain, theRouteData);\r\n            currentChain.OriginatingChain.ShouldBeTheSameAs(theChain);\r\n\r\n            currentChain.Push(theSecondChain);\r\n            currentChain.OriginatingChain.ShouldBeTheSameAs(theChain);\r\n\r\n            currentChain.Pop();\r\n\r\n            currentChain.OriginatingChain.ShouldBeTheSameAs(theChain);\r\n        }\r\n\r\n        [Test]\r\n        public void push_and_pop_track_the_current_chain()\r\n        {\r\n            var currentChain = new CurrentChain(theChain, theRouteData);\r\n            currentChain.Push(theSecondChain);\r\n\r\n            currentChain.Current.ShouldBeTheSameAs(theSecondChain);\r\n\r\n            currentChain.Push(theThirdChain);\r\n            currentChain.Current.ShouldBeTheSameAs(theThirdChain);\r\n\r\n            currentChain.Pop();\r\n            currentChain.Current.ShouldBeTheSameAs(theSecondChain);\r\n\r\n            currentChain.Pop();\r\n            currentChain.Current.ShouldBeTheSameAs(theChain);\r\n        }\r\n\r\n        [Test]\r\n        public void the_resource_hash_is_deterministic_by_route_parameters()\r\n        {\r\n            var hash1 = new CurrentChain(theChain, theRouteData).ResourceHash();\r\n            var hash2 = new CurrentChain(theChain, theRouteData).ResourceHash();\r\n\r\n            hash1.ShouldBe(hash2);\r\n\r\n            var hash3 = new CurrentChain(theChain, someDifferentRouteData).ResourceHash();\r\n\r\n            hash1.ShouldNotBe(hash3);\r\n        }\r\n\r\n        [Test]\r\n        public void the_resource_hash_is_deterministic_by_pattern()\r\n        {\r\n            var hash1 = new CurrentChain(theChain, theRouteData).ResourceHash();\r\n            var hash2 = new CurrentChain(theSecondChain, theRouteData).ResourceHash();\r\n\r\n            hash1.ShouldNotBe(hash2);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/CurrentHttpRequestExtensionsTester.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http\r\n{\r\n    [TestFixture]\r\n    public class CurrentHttpRequestExtensionsTester\r\n    {\r\n        private OwinHttpRequest theRequest;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theRequest = new OwinHttpRequest();\r\n        }\r\n\r\n        [Test]\r\n        public void is_get()\r\n        {\r\n            theRequest.HttpMethod(\"get\");\r\n            theRequest.IsGet().ShouldBeTrue();\r\n\r\n            theRequest.HttpMethod(\"GET\");\r\n            theRequest.IsGet().ShouldBeTrue();\r\n\r\n            theRequest.HttpMethod(\"POST\");\r\n            theRequest.IsGet().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void is_head()\r\n        {\r\n            theRequest.HttpMethod(\"head\");\r\n            theRequest.IsHead().ShouldBeTrue();\r\n\r\n            theRequest.HttpMethod(\"HEAD\");\r\n            theRequest.IsHead().ShouldBeTrue();\r\n\r\n            theRequest.HttpMethod(\"POST\");\r\n            theRequest.IsHead().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void is_post()\r\n        {\r\n            theRequest.HttpMethod(\"post\");\r\n            theRequest.IsPost().ShouldBeTrue();\r\n\r\n            theRequest.HttpMethod(\"POST\");\r\n            theRequest.IsPost().ShouldBeTrue();\r\n\r\n            theRequest.HttpMethod(\"get\");\r\n            theRequest.IsPost().ShouldBeFalse();\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void is_put()\r\n        {\r\n            theRequest.HttpMethod(\"put\");\r\n            theRequest.IsPut().ShouldBeTrue();\r\n\r\n            theRequest.HttpMethod(\"PUT\");\r\n            theRequest.IsPut().ShouldBeTrue();\r\n\r\n            theRequest.HttpMethod(\"get\");\r\n            theRequest.IsPut().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void relative_url()\r\n        {\r\n            theRequest.RelativeUrl(\"\");\r\n            theRequest.ToRelativeContentUrl(\"/foo\")\r\n                .ShouldBe(\"foo\");\r\n\r\n            theRequest.RelativeUrl(\"/bar\");\r\n            theRequest.ToRelativeContentUrl(\"/foo\")\r\n                .ShouldBe(\"../foo\");\r\n\r\n            theRequest.RelativeUrl(\"/bar\");\r\n            theRequest.ToRelativeContentUrl(\"/bar/1\")\r\n                .ShouldBe(\"1\");\r\n\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void get_comma_separated_values_from_header()\r\n        {\r\n            new[] { \"v1\", \"v2, v3\", \"\\\"v4, b\\\"\", \"v5, v6\", \"v7\", }\r\n                .GetCommaSeparatedHeaderValues()\r\n                .ShouldHaveTheSameElementsAs(\"v1\", \"v2\", \"v3\", \"v4, b\", \"v5\", \"v6\", \"v7\");\r\n\r\n            new []{\"v1,v2, v3,\\\"v4, b\\\",v5, v6,v7\"}\r\n                .GetCommaSeparatedHeaderValues()\r\n                .ShouldHaveTheSameElementsAs(\"v1\", \"v2\", \"v3\", \"v4, b\", \"v5\", \"v6\", \"v7\");\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void etag_matches_with_no_values()\r\n        {\r\n            new string[0].EtagMatches(\"foo\")\r\n                .ShouldBe(EtagMatch.None);\r\n        }\r\n\r\n        [Test]\r\n        public void etag_matches_with_wildcard()\r\n        {\r\n            new string[] {\"a\", \"*\", \"b\"}\r\n                .EtagMatches(\"foo\")\r\n                .ShouldBe(EtagMatch.Yes);\r\n        }\r\n\r\n        [Test]\r\n        public void etag_matches_positive()\r\n        {\r\n            new string[] {\"a\", \"b\", \"foo\"}\r\n                .EtagMatches(\"foo\")\r\n                .ShouldBe(EtagMatch.Yes);\r\n        }\r\n\r\n        [Test]\r\n        public void etag_matches_negative()\r\n        {\r\n            new string[] { \"a\", \"b\", \"bar\" }\r\n                .EtagMatches(\"foo\")\r\n                .ShouldBe(EtagMatch.No);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/CurrentMimeTypeModelBinderTester.cs",
    "content": "using FubuMVC.Core.Http;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Http\r\n{\r\n    [TestFixture]\r\n    public class CurrentMimeTypeModelBinderTester\r\n    {\r\n        [Test]\r\n        public void matches_current_mime_type_only()\r\n        {\r\n            var binder = new CurrentMimeTypeModelBinder();\r\n            binder.Matches(GetType()).ShouldBeFalse();\r\n            binder.Matches(typeof(CurrentMimeType)).ShouldBeTrue();\r\n        }\r\n\r\n        // Actual bind needs to be done w/ e2e test\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/CurrentMimeTypeTester.cs",
    "content": "using System.Linq;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Runtime;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Http\r\n{\r\n    [TestFixture]\r\n    public class CurrentMimeTypeTester\r\n    {\r\n        [Test]\r\n        public void default_is_to_accept_anything()\r\n        {\r\n            new CurrentMimeType()\r\n                .AcceptTypes.Single()\r\n                .ShouldBe(MimeType.Any.ToString());\r\n        }\r\n\r\n        [Test]\r\n        public void feeding_in_null_for_contentType_defaults_to_HttpFormMimeType()\r\n        {\r\n            var currentMimeType = new CurrentMimeType(null, null);\r\n            currentMimeType.ContentType.ShouldBe(MimeType.HttpFormMimetype);\r\n        }\r\n\r\n        [Test]\r\n        public void is_smart_enough_to_pull_out_charset()\r\n        {\r\n            var currentMimeType = new CurrentMimeType(\"application/x-www-form-urlencoded; charset=UTF-8\", null);\r\n            currentMimeType.ContentType.ShouldBe(\"application/x-www-form-urlencoded\");\r\n            currentMimeType.Charset.ShouldBe(\"UTF-8\");\r\n        }\r\n\r\n        [Test]\r\n        public void accepts_html_negative()\r\n        {\r\n            var currentMimeType = new CurrentMimeType(\"application/x-www-form-urlencoded; charset=UTF-8\", null);\r\n            currentMimeType.AcceptsHtml().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void accepts_html_positive()\r\n        {\r\n            new CurrentMimeType(\"application/x-www-form-urlencoded; charset=UTF-8\", \"text/html\").AcceptsHtml().ShouldBeTrue();\r\n            new CurrentMimeType(\"application/x-www-form-urlencoded; charset=UTF-8\", \"text/json, text/html\").AcceptsHtml().ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void accepts_any_negative()\r\n        {\r\n            new CurrentMimeType(\"application/x-www-form-urlencoded; charset=UTF-8\", \"text/html\").AcceptsAny().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void accepts_any_positive()\r\n        {\r\n            new CurrentMimeType(\"application/x-www-form-urlencoded; charset=UTF-8\", \"text/html, */*\").AcceptsAny().ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void accepts_any_if_no_accept_header_specified()\r\n        {\r\n            new CurrentMimeType(\"application/x-www-form-urlencoded; charset=UTF-8\", null).AcceptsAny().ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void accepts_any_if_accept_header_is_all_spaces()\r\n        {\r\n            new CurrentMimeType(\"application/x-www-form-urlencoded; charset=UTF-8\", \"  \").AcceptsAny().ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void accepts_any_if_accept_header_is_empty()\r\n        {\r\n            new CurrentMimeType(\"application/x-www-form-urlencoded; charset=UTF-8\", string.Empty).AcceptsAny().ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void select_first_matching_no_matches()\r\n        {\r\n            new CurrentMimeType(\"application/x-www-form-urlencoded; charset=UTF-8\", \"text/html\")\r\n                .SelectFirstMatching(new[]{\"application/json\"}).ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void select_first_with_a_wild_card()\r\n        {\r\n            var currentMimeType = new CurrentMimeType(\"application/x-www-form-urlencoded; charset=UTF-8\", \"text/html, */*\");\r\n            currentMimeType\r\n                .SelectFirstMatching(new[]{\"text/json\", \"application/json\"})\r\n                .ShouldBe(\"text/json\");\r\n\r\n            currentMimeType\r\n                .SelectFirstMatching(new[] { \"application/json\", \"text/json\" })\r\n                .ShouldBe(\"application/json\");\r\n        \r\n        }\r\n\r\n        [Test]\r\n        public void select_first_when_one_does_match()\r\n        {\r\n            var currentMimeType = new CurrentMimeType(\"application/x-www-form-urlencoded; charset=UTF-8\", \"text/html, application/json, */*\");\r\n            currentMimeType\r\n                .SelectFirstMatching(new[] { \"text/json\", \"application/json\" })\r\n                .ShouldBe(\"application/json\"); \r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/CurrentRequestFullUrlPropertyBinderTester.cs",
    "content": "﻿using FubuCore.Binding.InMemory;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http\r\n{\r\n    [TestFixture]\r\n    public class CurrentRequestFullUrlPropertyBinderTester\r\n    {\r\n        private CurrentRequestFullUrlPropertyBinder binder;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            binder = new CurrentRequestFullUrlPropertyBinder();\r\n        }\r\n\r\n        [Test]\r\n        public void should_match_on_correct_property_name()\r\n        {\r\n            binder.Matches(ReflectionHelper.GetProperty<FullUrlModel>(f => f.FullUrl)).ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void should_not_match_on_other_name()\r\n        {\r\n            binder.Matches(ReflectionHelper.GetProperty<FullUrlModel>(f => f.Blah)).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void should_populate_fullurl_from_current_http_request()\r\n        {\r\n            var stubCurrentHttpRequest = OwinHttpRequest.ForTesting();\r\n            var model =\r\n                BindingScenario<FullUrlModel>.For(x => {\r\n                    x.BindPropertyWith<CurrentRequestFullUrlPropertyBinder>(f => f.FullUrl);\r\n                    x.Service<IHttpRequest>(stubCurrentHttpRequest);\r\n                })\r\n                    .Model;\r\n            model.FullUrl.ShouldBe(stubCurrentHttpRequest.FullUrl());\r\n        }\r\n\r\n        public class FullUrlModel\r\n        {\r\n            public string FullUrl { get; set; }\r\n            public string Blah { get; set; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/CurrentRequestRelativeUrlPropertyBinderTester.cs",
    "content": "﻿using FubuCore.Binding.InMemory;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Tests.Urls;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http\r\n{\r\n    [TestFixture]\r\n    public class CurrentRequestRelativeUrlPropertyBinderTester\r\n    {\r\n        private CurrentRequestRelativeUrlPropertyBinder binder;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            binder = new CurrentRequestRelativeUrlPropertyBinder();\r\n        }\r\n\r\n        [Test]\r\n        public void should_match_on_correct_property_name()\r\n        {\r\n            binder.Matches(ReflectionHelper.GetProperty<RelativeUrlModel>(f => f.RelativeUrl)).ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void should_not_match_on_other_name()\r\n        {\r\n            binder.Matches(ReflectionHelper.GetProperty<RelativeUrlModel>(f => f.Blah)).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void should_populate_relativeurl_from_current_http_request()\r\n        {\r\n\r\n            \r\n\r\n            var stubCurrentHttpRequest = OwinHttpRequest.ForTesting().FullUrl(\"http://server/foo\");\r\n                \r\n                \r\n                \r\n            var model =\r\n                BindingScenario<RelativeUrlModel>.For(x =>\r\n                                                          {\r\n                                                              x.BindPropertyWith<CurrentRequestRelativeUrlPropertyBinder>(f => f.RelativeUrl);\r\n                                                              x.Service<IHttpRequest>(stubCurrentHttpRequest);\r\n                                                          })\r\n                                                          .Model;\r\n            model.RelativeUrl.ShouldBe(stubCurrentHttpRequest.RelativeUrl());\r\n        }\r\n\r\n        public class RelativeUrlModel\r\n        {\r\n            public string RelativeUrl { get; set; }\r\n            public string Blah { get; set; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/HeaderValueSourceTester.cs",
    "content": "﻿using FubuCore.Binding.Values;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Tests.Urls;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\nusing System.Linq;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Http\r\n{\r\n    [TestFixture]\r\n    public class HeaderValueSourceTester\r\n    {\r\n        private OwinHttpRequest theRequest;\r\n        private HeaderValueSource theSource;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theRequest = new OwinHttpRequest();\r\n            theSource = new HeaderValueSource(theRequest);\r\n        }\r\n\r\n        [Test]\r\n        public void has()\r\n        {\r\n            theSource.Has(\"a\").ShouldBeFalse();\r\n\r\n            theRequest.AppendHeader(\"a\", \"1\");\r\n\r\n            theSource.Has(\"a\").ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void get_with_only_one_value()\r\n        {\r\n            theRequest.AppendHeader(\"a\", \"1\");\r\n            theSource.Get(\"a\").ShouldBe(\"1\");\r\n        }\r\n\r\n        [Test]\r\n        public void get_with_multiple_values()\r\n        {\r\n            theRequest.AppendHeader(\"a\", \"1\", \"2\", \"3\");\r\n\r\n            theSource.Get(\"a\").ShouldBe(new string[] { \"1\", \"2\", \"3\" });\r\n        }\r\n\r\n        [Test]\r\n        public void value_miss()\r\n        {\r\n            theSource.Value(\"a\", v => {\r\n                Assert.Fail(\"NOT SUPPOSED TO BE HERE!\");\r\n            }).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void value_hit_with_only_one_value()\r\n        {\r\n            theRequest.AppendHeader(\"a\", \"1\");\r\n            theSource.Value(\"a\", v => {\r\n                v.RawKey.ShouldBe(\"a\");\r\n                v.RawValue.ShouldBe(\"1\");\r\n                v.Source.ShouldBe(RequestDataSource.Header.ToString());\r\n            }).ShouldBeTrue();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void value_hit_with_only_multiple_values()\r\n        {\r\n            theRequest.AppendHeader(\"a\", \"1\", \"2\", \"3\");\r\n            theSource.Value(\"a\", v =>\r\n            {\r\n                v.RawKey.ShouldBe(\"a\");\r\n                v.RawValue.ShouldBe(new string[] { \"1\", \"2\", \"3\" });\r\n                v.Source.ShouldBe(RequestDataSource.Header.ToString());\r\n            }).ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void report_smoke_test()\r\n        {\r\n            theRequest.AppendHeader(\"a\", \"1\", \"2\", \"3\");\r\n            theRequest.AppendHeader(\"b\", \"4\", \"2\", \"3\");\r\n            theRequest.AppendHeader(\"c\", \"7\", \"2\", \"3\");\r\n\r\n            var report = MockRepository.GenerateMock<IValueReport>();\r\n            theSource.WriteReport(report);\r\n\r\n            report.AssertWasCalled(x => x.Value(\"a\", new string[] { \"1\", \"2\", \"3\" }));\r\n            report.AssertWasCalled(x => x.Value(\"b\", new string[] { \"4\", \"2\", \"3\" }));\r\n            report.AssertWasCalled(x => x.Value(\"c\", new string[] { \"7\", \"2\", \"3\" }));\r\n        }\r\n\r\n        [Test]\r\n        public void provenance()\r\n        {\r\n            // and yes, this *is* important\r\n            theSource.Provenance.ShouldBe(RequestDataSource.Header.ToString());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Headers/HeaderTester.cs",
    "content": "using System.Net;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Headers;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Http.Headers\r\n{\r\n    [TestFixture]\r\n    public class HeaderTester\r\n    {\r\n        [Test]\r\n        public void replay_writes_to_the_IHttpWriter()\r\n        {\r\n            var header = new Header(HttpResponseHeader.Warning, \"don't do it!\");\r\n\r\n            var writer = MockRepository.GenerateMock<IHttpResponse>();\r\n\r\n            header.Replay(writer);\r\n\r\n            writer.AssertWasCalled(x => x.AppendHeader(\"Warning\", \"don't do it!\"));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Headers/HttpHeaderValuesTester.cs",
    "content": "using FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Headers;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Http.Headers\r\n{\r\n    [TestFixture]\r\n    public class HttpHeaderValuesTester\r\n    {\r\n        [Test]\r\n        public void build_with_key_name_pair_in_ctor()\r\n        {\r\n            var values = new HttpHeaderValues(HttpResponseHeaders.Via, \"something\");\r\n\r\n            values[\"Via\"].ShouldBe(\"something\");\r\n            values.Headers.ShouldHaveTheSameElementsAs(new Header(\"Via\", \"something\"));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Hosting/fuburuntime_scenario_support_Tester.cs",
    "content": "﻿using System;\nusing System.Net;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Http.Scenarios;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Tests.ServiceBus.Docs.Basics;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Http.Hosting\n{\n    [TestFixture]\n    public class fuburuntime_scenario_support_Tester\n    {\n        private FubuRuntime host;\n\n        [TestFixtureSetUp]\n        public void SetUp()\n        {\n            host = FubuRuntime.Basic();\n        }\n\n        [TestFixtureTearDown]\n        public void TearDown()\n        {\n            host.SafeDispose();\n        }\n\n        [Test]\n        public void invoke_a_simple_string_endpoint()\n        {\n            host.Scenario(_ =>\n            {\n                _.Get.Url(\"memory/hello\");\n                _.ContentShouldBe(\"hello from the in memory host\");\n            });\n        }\n\n        private ScenarioAssertionException fails(Action<Scenario> configuration)\n        {\n            return Exception<ScenarioAssertionException>.ShouldBeThrownBy(() => { host.Scenario(configuration); });\n        }\n\n        [Test, Explicit]\n        public void examples()\n        {\nhost.Scenario(_ =>\n{\n    // Specify a GET request to the Url that runs an endpoint method:\n    _.Get.Action<InMemoryEndpoint>(e => e.get_memory_hello());\n\n    // Or specify a POST to the Url that would handle an input message:\n    _.Post\n\n        // This call serializes the input object to Json using the \n        // application's configured JSON serializer and setting\n        // the contents on the Request body\n        .Json(new HeaderInput {Key = \"Foo\", Value1 = \"Bar\"});\n\n    // Or specify a GET by an input object to get the route parameters\n    _.Get.Input(new InMemoryInput { Color = \"Red\" });\n});\n\n\n\nhost.Scenario(_ =>\n{\n    // set up a request here\n\n    // Read the response body as text\n    var bodyText = _.Response.Body.ReadAsText();\n\n    // Read the response body by deserializing Json\n    // into a .net type with the application's\n    // configured Json serializer\n    var output = _.Response.Body.ReadAsJson<MyResponse>();\n\n    // If you absolutely have to work with Xml...\n    var xml = _.Response.Body.ReadAsXml();\n});\n        }\n\n        [Test]\n        public void using_scenario_with_string_text_and_relative_url()\n        {\n            host.Scenario(x => { x.Get.Url(\"memory/hello\"); })\n                .Body.ReadAsText().ShouldBe(\"hello from the in memory host\");\n            ;\n        }\n\n        [Test]\n        public void using_scenario_with_controller_expression()\n        {\n            host.Scenario(x =>\n            {\n                x.Get.Action<InMemoryEndpoint>(e => e.get_memory_hello());\n            })\n                .Body.ReadAsText().ShouldBe(\"hello from the in memory host\");\n            ;\n        }\n\n        [Test]\n        public void using_scenario_with_input_model()\n        {\n            host.Scenario(x => { x.Get.Input(new InMemoryInput {Color = \"Red\"}); })\n                .Body.ReadAsText().ShouldBe(\"The color is Red\");\n            ;\n\n\n            host.Scenario(x => { x.Get.Input(new InMemoryInput {Color = \"Orange\"}); })\n                .Body.ReadAsText().ShouldBe(\"The color is Orange\");\n            ;\n        }\n\n\n        [Test]\n        public void using_scenario_with_input_model_as_marker()\n        {\n            host.Scenario(x => { x.Get.Input<MarkerInput>(); })\n                .Body.ReadAsText().ShouldBe(\"just the marker\");\n            ;\n        }\n\n        [Test]\n        public void using_scenario_with_ContentShouldContain_declaration_happy_path()\n        {\n            host.Scenario(x =>\n            {\n                x.Get.Input<MarkerInput>();\n                x.ContentShouldContain(\"just the marker\");\n            });\n        }\n\n\n        [Test]\n        public void using_scenario_with_ContentShouldContain_declaration_sad_path()\n        {\n            var ex = Exception<ScenarioAssertionException>.ShouldBeThrownBy(() =>\n            {\n                host.Scenario(x =>\n                {\n                    x.Get.Input<MarkerInput>();\n                    x.ContentShouldContain(\"wrong text\");\n                });\n            });\n\n            ex.Message.ShouldContain(\"The response body does not contain expected text \\\"wrong text\\\"\");\n        }\n\n        [Test]\n        public void using_scenario_with_ContentShouldNotContain_declaration_happy_path()\n        {\n            host.Scenario(x =>\n            {\n                x.Get.Input<MarkerInput>();\n                x.ContentShouldNotContain(\"some random stuff\");\n            });\n        }\n\n        [Test]\n        public void using_scenario_with_ContentShouldNotContain_declaration_sad_path()\n        {\n            var ex = Exception<ScenarioAssertionException>.ShouldBeThrownBy(() =>\n            {\n                host.Scenario(x =>\n                {\n                    x.Get.Input<MarkerInput>();\n                    x.ContentShouldNotContain(\"just the marker\");\n                });\n            });\n\n            ex.Message.ShouldContain(\"The response body should not contain text \\\"just the marker\\\"\");\n        }\n\n        [Test]\n        public void using_scenario_with_StatusCodeShouldBe_happy_path()\n        {\n            host.Scenario(x =>\n            {\n                x.Get.Input<MarkerInput>();\n                x.StatusCodeShouldBe(HttpStatusCode.OK);\n            });\n        }\n\n        [Test]\n        public void using_scenario_with_StatusCodeShouldBe_sad_path()\n        {\n            var ex = Exception<ScenarioAssertionException>.ShouldBeThrownBy(() =>\n            {\n                host.Scenario(x =>\n                {\n                    x.Get.Input<MarkerInput>();\n                    x.StatusCodeShouldBe(HttpStatusCode.InternalServerError);\n                });\n            });\n\n            ex.Message.ShouldContain(\"Expected status code 500 (InternalServerError), but was 200\");\n        }\n\n        [Test]\n        public void single_header_value_is_positive()\n        {\n            host.Scenario(x =>\n            {\n                x.Post.Json(new HeaderInput {Key = \"Foo\", Value1 = \"Bar\"}).Accepts(\"text/plain\");\n\n                x.Header(\"Foo\").ShouldHaveOneNonNullValue()\n                    .SingleValueShouldEqual(\"Bar\");\n            });\n        }\n\n        [Test]\n        public void single_header_value_is_negative_with_the_wrong_value()\n        {\n            var ex = Exception<ScenarioAssertionException>.ShouldBeThrownBy(() =>\n            {\n                host.Scenario(x =>\n                {\n                    x.Post.Json(new HeaderInput {Key = \"Foo\", Value1 = \"NotBar\"});\n                    x.Header(\"Foo\").ShouldHaveOneNonNullValue()\n                        .SingleValueShouldEqual(\"Bar\");\n                });\n            });\n\n            ex.Message.ShouldContain(\"Expected a single header value of 'Foo'='Bar', but the actual value was 'NotBar'\");\n        }\n\n        [Test]\n        public void single_header_value_is_negative_with_the_too_many_values()\n        {\n            var ex = Exception<ScenarioAssertionException>.ShouldBeThrownBy(() =>\n            {\n                host.Scenario(x =>\n                {\n                    x.Post.Json(new HeaderInput {Key = \"Foo\", Value1 = \"NotBar\", Value2 = \"AnotherBar\"});\n                    x.Header(\"Foo\").ShouldHaveOneNonNullValue()\n                        .SingleValueShouldEqual(\"Bar\");\n                });\n            });\n\n            ex.Message.ShouldContain(\n                \"Expected a single header value of 'Foo'='Bar', but the actual values were 'NotBar', 'AnotherBar'\");\n        }\n\n        [Test]\n        public void single_header_value_is_negative_because_there_are_no_values()\n        {\n            var ex = Exception<ScenarioAssertionException>.ShouldBeThrownBy(() =>\n            {\n                host.Scenario(x =>\n                {\n                    x.Post.Json(new HeaderInput {Key = \"Foo\"});\n                    x.Header(\"Foo\")\n                        .SingleValueShouldEqual(\"Bar\");\n                });\n            });\n\n            ex.Message.ShouldContain(\n                \"Expected a single header value of 'Foo'='Bar', but no values were found on the response\");\n        }\n\n        [Test]\n        public void should_have_on_non_null_header_value_happy_path()\n        {\n            host.Scenario(x =>\n            {\n                x.Post.Json(new HeaderInput {Key = \"Foo\", Value1 = \"Anything\"}).Accepts(\"text/plain\");\n                x.Header(\"Foo\").ShouldHaveOneNonNullValue();\n            });\n        }\n\n        [Test]\n        public void should_have_one_non_null_value_sad_path()\n        {\n            var ex = Exception<ScenarioAssertionException>.ShouldBeThrownBy(() =>\n            {\n                host.Scenario(x =>\n                {\n                    x.Post.Json(new HeaderInput {Key = \"Foo\"}).Accepts(\"text/plain\");\n                    x.Header(\"Foo\").ShouldHaveOneNonNullValue();\n                });\n            });\n\n            ex.Message.ShouldContain(\"Expected a single header value of 'Foo', but no values were found on the response\");\n        }\n\n        [Test]\n        public void should_have_on_non_null_value_sad_path_with_too_many_values()\n        {\n            var ex = Exception<ScenarioAssertionException>.ShouldBeThrownBy(() =>\n            {\n                host.Scenario(x =>\n                {\n                    x.Post.Json(new HeaderInput {Key = \"Foo\", Value1 = \"Bar1\", Value2 = \"Bar2\"});\n                    x.Header(\"Foo\").ShouldHaveOneNonNullValue();\n                });\n            });\n\n            ex.Message.ShouldContain(\n                \"Expected a single header value of 'Foo', but found multiple values on the response: 'Bar1', 'Bar2'\");\n        }\n\n        [Test]\n        public void header_should_not_be_written_happy_path()\n        {\n            host.Scenario(x =>\n            {\n                x.Post.Json(new HeaderInput {Key = \"Foo\"}).Accepts(\"text/plain\");\n                x.Header(\"Foo\").ShouldNotBeWritten();\n            });\n        }\n\n        [Test]\n        public void header_should_not_be_written_sad_path_with_values()\n        {\n            var ex = Exception<ScenarioAssertionException>.ShouldBeThrownBy(() =>\n            {\n                host.Scenario(x =>\n                {\n                    x.Post.Json(new HeaderInput {Key = \"Foo\", Value1 = \"Bar1\", Value2 = \"Bar2\"}).Accepts(\"plain/text\");\n                    x.Header(\"Foo\").ShouldNotBeWritten();\n                });\n            });\n\n            ex.Message.ShouldContain(\"Expected no value for header 'Foo', but found values 'Bar1', 'Bar2'\");\n        }\n\n        [Test]\n        public void exact_content_happy_path()\n        {\n            host.Scenario(x =>\n            {\n                x.Get.Action<InMemoryEndpoint>(_ => _.get_memory_hello());\n\n                x.ContentShouldBe(\"hello from the in memory host\");\n            });\n        }\n\n        [Test]\n        public void exact_content_sad_path()\n        {\n            var e = Exception<ScenarioAssertionException>.ShouldBeThrownBy(() =>\n            {\n                host.Scenario(x =>\n                {\n                    x.Get.Action<InMemoryEndpoint>(_ => _.get_memory_hello());\n\n                    x.ContentShouldBe(\"the wrong content\");\n                });\n            });\n\n            e.Message.ShouldContain(\"Expected the content to be 'the wrong content'\");\n        }\n\n        [Test]\n        public void content_type_should_be_happy_path()\n        {\n            host.Scenario(_ =>\n            {\n                _.Get.Action<InMemoryEndpoint>(x => x.get_memory_hello());\n\n                _.ContentTypeShouldBe(MimeType.Text);\n            });\n        }\n\n        [Test]\n        public void content_type_sad_path()\n        {\n            var ex = fails(_ =>\n            {\n                _.Get.Action<InMemoryEndpoint>(x => x.get_memory_hello());\n\n                _.ContentTypeShouldBe(\"text/json\");\n            });\n\n            ex.Message.ShouldContain(\n                \"Expected a single header value of 'Content-Type'='text/json', but the actual value was 'text/plain'\");\n        }\n\n        [Test]\n        public void happily_blows_up_on_an_unexpected_500()\n        {\n            var ex = fails(_ => { _.Get.Action<InMemoryEndpoint>(x => x.get_wrong_status_code()); });\n\n            ex.Message.ShouldContain(\"Expected status code 200 (Ok), but was 500\");\n            ex.Message.ShouldContain(\"the error text\");\n        }\n    }\n\n    public class InMemoryEndpoint\n    {\n        private readonly IOutputWriter _writer;\n\n        public InMemoryEndpoint(IOutputWriter writer)\n        {\n            _writer = writer;\n        }\n\n        public string get_wrong_status_code()\n        {\n            _writer.WriteResponseCode(HttpStatusCode.InternalServerError);\n\n            return \"the error text\";\n        }\n\n        public string post_header_values(HeaderInput input)\n        {\n            if (input.Value1.IsNotEmpty())\n            {\n                _writer.AppendHeader(input.Key, input.Value1);\n            }\n\n            if (input.Value2.IsNotEmpty())\n            {\n                _writer.AppendHeader(input.Key, input.Value2);\n            }\n\n            return \"it's all good\";\n        }\n\n        public string get_memory_hello()\n        {\n            return \"hello from the in memory host\";\n        }\n\n        public string get_memory_color_Color(InMemoryInput input)\n        {\n            return \"The color is \" + input.Color;\n        }\n\n        public string get_memory_marker_text(MarkerInput input)\n        {\n            return \"just the marker\";\n        }\n    }\n\n    public class HeaderInput\n    {\n        public string Key { get; set; }\n        public string Value1 { get; set; }\n        public string Value2 { get; set; }\n    }\n\n    public class InMemoryInput\n    {\n        public string Color { get; set; }\n    }\n\n    public class MarkerInput\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/HttpRequestHeadersTester.cs",
    "content": "using System;\r\nusing System.Diagnostics;\r\nusing System.Net;\r\nusing System.Reflection;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Http;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\nusing System.Collections.Generic;\r\n\r\nnamespace FubuMVC.Tests.Http\r\n{\r\n    [TestFixture]\r\n    public class HttpRequestHeadersTester\r\n    {\r\n        [Test]\r\n        public void smoke_test_of_the_name_lookup()\r\n        {\r\n            HttpRequestHeaders.HeaderNameFor(HttpRequestHeader.Warning)\r\n                .ShouldBe(\"Warning\");\r\n\r\n            HttpRequestHeaders.HeaderNameFor(HttpRequestHeader.IfNoneMatch)\r\n                .ShouldBe(\"If-None-Match\");\r\n        }\r\n\r\n        [Test]\r\n        public void naming_strategy_positive()\r\n        {\r\n            var propertyInfo = ReflectionHelper.GetProperty<ETagDto>(x => x.IfModifiedSince);\r\n            HttpRequestHeaders.HeaderDictionaryNameForProperty(propertyInfo.Name)\r\n                .ShouldBe(\"If-Modified-Since\");\r\n        }\r\n\r\n        [Test]\r\n        public void naming_strategy_negative_is_a_passthru()\r\n        {\r\n            // Not sure what a null will do to us in the model binding,\r\n            // so I'm having it return the property name\r\n            HttpRequestHeaders.HeaderDictionaryNameForProperty(\"something\")\r\n                .ShouldBe(\"something\");\r\n        }\r\n\r\n\r\n        public class ETagDto\r\n        {\r\n            public string IfMatch { get; set; }\r\n            public DateTime IfModifiedSince { get; set; }\r\n            public string IfNoneMatch { get; set; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/MimeTypeListTester.cs",
    "content": "using FubuMVC.Core.Http;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http\r\n{\r\n    [TestFixture]\r\n    public class MimeTypeListTester\r\n    {\r\n        [Test]\r\n        public void build_from_string()\r\n        {\r\n            var list = new MimeTypeList(\"text/json\");\r\n            list.ShouldHaveTheSameElementsAs(\"text/json\");\r\n        }\r\n\r\n        [Test]\r\n        public void build_with_multiple_mimetypes()\r\n        {\r\n            var list = new MimeTypeList(\"text/json,application/json\");\r\n            list.ShouldHaveTheSameElementsAs(\"text/json\", \"application/json\");\r\n        }\r\n\r\n        [Test]\r\n        public void  build_with_complex_mimetypes()\r\n        {\r\n            var list =\r\n                new MimeTypeList(\r\n                    \"application/xml,application/xhtml+xml,text/html;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5\");\r\n\r\n            list.ShouldHaveTheSameElementsAs(\"application/xml\", \"application/xhtml+xml\", \"text/html\", \"text/plain\", \"image/png\", \"*/*\");\r\n        }\r\n\r\n        [Test]\r\n        public void matches_positive()\r\n        {\r\n            var list = new MimeTypeList(\"text/json,application/json\");\r\n            list.Matches(\"text/json\").ShouldBeTrue();\r\n            list.Matches(\"application/json\").ShouldBeTrue();\r\n            list.Matches(\"text/json\", \"application/json\").ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void matches_negative()\r\n        {\r\n            var list = new MimeTypeList(\"text/json,application/json\");\r\n            list.Matches(\"weird\").ShouldBeFalse();\r\n            list.Matches(\"weird\", \"wrong\").ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void should_ignore_null()\r\n        {\r\n            var list = new MimeTypeList((string)null);\r\n            list.ShouldHaveCount(0);\r\n        }\r\n\r\n        [Test]\r\n        public void should_ignore_empty_string()\r\n        {\r\n            var list = new MimeTypeList(string.Empty);\r\n            list.ShouldHaveCount(0);\r\n        }\r\n\r\n        [Test]\r\n        public void should_ignore_whitespace_only_string()\r\n        {\r\n            var list = new MimeTypeList(\"    \");\r\n            list.ShouldHaveCount(0);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Owin/CurrentHttpRequestExtensions_integration_with_OWIN_Tester.cs",
    "content": "﻿using System;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http.Owin\r\n{\r\n    [TestFixture]\r\n    public class CurrentHttpRequestExtensions_integration_with_OWIN_Tester\r\n    {\r\n        [Test]\r\n        public void modified_since()\r\n        {\r\n            var time = new DateTime(2014, 1, 30, 12, 5, 6);\r\n\r\n            new OwinHttpRequest()\r\n                .IfModifiedSince(time)\r\n                .IfModifiedSince()\r\n                .ShouldBe(time.ToUniversalTime());\r\n        }\r\n\r\n        [Test]\r\n        public void un_modified_since()\r\n        {\r\n            var time = new DateTime(2014, 1, 30, 12, 5, 6);\r\n\r\n            new OwinHttpRequest()\r\n                .IfUnModifiedSince(time)\r\n                .IfUnModifiedSince()\r\n                .ShouldBe(time.ToUniversalTime());\r\n        }\r\n\r\n        [Test]\r\n        public void if_match()\r\n        {\r\n            new OwinHttpRequest().IfMatch(\"a,b, c\")\r\n                .IfMatch()\r\n                .ShouldHaveTheSameElementsAs(\"a\", \"b\", \"c\");\r\n        }\r\n\r\n        [Test]\r\n        public void if_none_match()\r\n        {\r\n            new OwinHttpRequest().IfNoneMatch(\"a,b, c\")\r\n                .IfNoneMatch()\r\n                .ShouldHaveTheSameElementsAs(\"a\", \"b\", \"c\");\r\n        }\r\n\r\n        [Test]\r\n        public void HttpMethodMatchesAny()\r\n        {\r\n            var request = new OwinHttpRequest().HttpMethod(\"POST\");\r\n\r\n            request.HttpMethodMatchesAny(\"get\", \"put\").ShouldBeFalse();\r\n            request.HttpMethodMatchesAny(\"get\").ShouldBeFalse();\r\n            request.HttpMethodMatchesAny(\"head\", \"PUT\").ShouldBeFalse();\r\n\r\n            request.HttpMethodMatchesAny(\"POST\").ShouldBeTrue();\r\n            request.HttpMethodMatchesAny(\"POST\", \"get\").ShouldBeTrue();\r\n            request.HttpMethodMatchesAny(\"post\", \"get\").ShouldBeTrue();\r\n            request.HttpMethodMatchesAny(\"Post\", \"get\").ShouldBeTrue();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Owin/DictionaryExtensionsTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuCore;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Http;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Http.Owin\n{\n    [TestFixture]\n    public class DictionaryExtensionsTester\n    {\n        [Test]\n        public void copy_multiple_keys_that_all_exist_in_source()\n        {\n            var source = new Dictionary<string, object>();\n            source.Add(\"a\", 1);\n            source.Add(\"b\", 2);\n            source.Add(\"c\", 3);\n\n            var destination = new Dictionary<string, object>();\n\n            source.CopyTo(destination, \"a\", \"b\", \"c\");\n\n            destination[\"a\"].ShouldBe(1);\n            destination[\"b\"].ShouldBe(2);\n            destination[\"c\"].ShouldBe(3);\n        }\n\n        [Test]\n        public void copy_multiple_keys_with_some_misses()\n        {\n            var source = new Dictionary<string, object>();\n            source.Add(\"a\", 1);\n            //source.Add(\"b\", 1);\n            source.Add(\"c\", 3);\n\n            var destination = new Dictionary<string, object>();\n\n            source.CopyTo(destination, \"a\", \"b\", \"c\");\n\n            destination[\"a\"].ShouldBe(1);\n            destination.ContainsKey(\"b\").ShouldBeFalse();\n            destination[\"c\"].ShouldBe(3);\n        }\n\n        [Test]\n        public void set_and_read_request_id()\n        {\n            var dict = new Dictionary<string, object>();\n            dict.RequestId().ShouldBeNull();\n\n            dict.RequestId(\"abc\");\n\n            dict.RequestId().ShouldBe(\"abc\");\n        }\n\n\n        [Test]\n        public void set_the_chain_execution_log()\n        {\n            var source = new Dictionary<string, object>();\n            source.Log().ShouldBeNull();\n\n            var log = new ChainExecutionLog();\n\n            source.Log(log);\n\n            source.RequestId().ShouldBe(log.Id.ToString());\n\n            source.Log().ShouldBeSameAs(log);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Owin/FormRequestReaderTester.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Collections.Specialized;\r\nusing System.IO;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Http.Owin.Readers;\r\nusing FubuMVC.Core.Runtime;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http.Owin\r\n{\r\n    [TestFixture]\r\n    public class FormRequestReaderTester\r\n    {\r\n        [Test]\r\n        public void can_parse_query_string_with_encoding()\r\n        {\r\n            runFormReader(\"Anesth=Moore%2C+Roy\")[\"Anesth\"].ShouldBe(\"Moore, Roy\");\r\n        }\r\n\r\n        [Test]\r\n        public void can_parse_field_values_in_query_string()\r\n        {\r\n            runFormReader(\"Moore%2C+Roy=Anesth\")[\"Moore, Roy\"].ShouldBe(\"Anesth\");\r\n        }\r\n\r\n        [Test]\r\n        public void can_parse_multiple_values()\r\n        {\r\n            var dict = runFormReader(\"a=1&b=2&c=3\");\r\n\r\n            dict[\"a\"].ShouldBe(\"1\");\r\n            dict[\"b\"].ShouldBe(\"2\");\r\n            dict[\"c\"].ShouldBe(\"3\");\r\n\r\n            dict.Count.ShouldBe(3);\r\n        }\r\n\r\n        private NameValueCollection runFormReader(string formPost)\r\n        {\r\n            var bytes = System.Text.Encoding.UTF8.GetBytes(formPost);\r\n            var stream = new MemoryStream(bytes);\r\n            var environment = new Dictionary<string, object>();\r\n            environment.Add(OwinConstants.MediaTypeKey, MimeType.HttpFormMimetype);\r\n            environment.Add(OwinConstants.RequestBodyKey, stream);\r\n            new FormReader().Read(environment);\r\n            var form = environment.Get<NameValueCollection>(OwinConstants.RequestFormKey);\r\n            return form;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Owin/Middleware/MiddlewareContinuationTester.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Http.Owin.Middleware;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http.Owin.Middleware\r\n{\r\n    [TestFixture]\r\n    public class MiddlewareContinuationTester\r\n    {\r\n        private static IDictionary<string, object> theEnvironment;\r\n\r\n        private static Task theInnerTask = Task.Factory.StartNew(() => { });\r\n        private Func<IDictionary<string, object>, Task> theInner = env => {\r\n            env.ShouldBeTheSameAs(theEnvironment);\r\n\r\n            return theInnerTask;\r\n        };\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theEnvironment = new Dictionary<string, object>();\r\n        }\r\n\r\n        [Test]\r\n        public void no_action_and_stop()\r\n        {\r\n            MiddlewareContinuation.StopHere()\r\n                .ToTask(theEnvironment, theInner)\r\n                .ShouldNotBeTheSameAs(theInnerTask);\r\n        }\r\n\r\n        [Test]\r\n        public void an_action_and_stop()\r\n        {\r\n            var wasCalled = false;\r\n\r\n            var task = MiddlewareContinuation.StopHere(() => {\r\n                wasCalled = true;\r\n                return Task.CompletedTask;\r\n            })\r\n                .ToTask(theEnvironment, theInner);\r\n\r\n            task.Wait();\r\n\r\n            wasCalled.ShouldBeTrue();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void an_action_and_continue()\r\n        {\r\n            var wasCalled = false;\r\n\r\n            MiddlewareContinuation.Continue(() => {\r\n                wasCalled = true;\r\n                return Task.CompletedTask;\r\n            })\r\n                .ToTask(theEnvironment, theInner).GetAwaiter().GetResult();\r\n\r\n            wasCalled.ShouldBeTrue();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Owin/Middleware/StaticFiles/DenyConfigRuleTester.cs",
    "content": "﻿using FubuMVC.Core.Http.Owin.Middleware.StaticFiles;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.Security;\r\nusing FubuMVC.Core.Security.Authorization;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http.Owin.Middleware.StaticFiles\r\n{\r\n    [TestFixture]\r\n    public class DenyConfigRuleTester\r\n    {\r\n        [Test]\r\n        public void deny_config_files_period()\r\n        {\r\n            var theRule = new DenyConfigRule();\r\n\r\n            theRule.IsAllowed(new FubuFile(\"foo.config\")).ShouldBe(AuthorizationRight.Deny);\r\n            theRule.IsAllowed(new FubuFile(\"web.config\")).ShouldBe(AuthorizationRight.Deny);\r\n            theRule.IsAllowed(new FubuFile(\"foo.asset.config\")).ShouldBe(AuthorizationRight.Deny);\r\n        }\r\n\r\n        [Test]\r\n        public void no_opinion_about_anything_else()\r\n        {\r\n            var theRule = new DenyConfigRule();\r\n\r\n            theRule.IsAllowed(new FubuFile(\"foo.txt\")).ShouldBe(AuthorizationRight.None);\r\n            theRule.IsAllowed(new FubuFile(\"foo.htm\")).ShouldBe(AuthorizationRight.None);\r\n            theRule.IsAllowed(new FubuFile(\"foo.jpg\")).ShouldBe(AuthorizationRight.None);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Owin/Middleware/StaticFiles/StaticFileMiddlewareTester.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Net;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Http.Owin.Middleware;\r\nusing FubuMVC.Core.Http.Owin.Middleware.StaticFiles;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http.Owin.Middleware.StaticFiles\r\n{\r\n    [TestFixture]\r\n    public class StaticFileMiddlewareTester\r\n    {\r\n        private OwinHttpRequest theRequest;\r\n        private StubFubuApplicationFiles theFiles = new StubFubuApplicationFiles();\r\n        private StaticFileMiddleware theMiddleware;\r\n        private OwinHttpResponse theResponse;\r\n \r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theRequest = new OwinHttpRequest();\r\n            theResponse = new OwinHttpResponse(theRequest.Environment);\r\n\r\n\r\n            theMiddleware = new StaticFileMiddleware(null, theFiles, new AssetSettings());\r\n        }\r\n\r\n        private void fileDoesNotExist(string path)\r\n        {\r\n            var file = theFiles.Find(path);\r\n            if (file != null)\r\n            {\r\n                File.Delete(file.Path);\r\n            }\r\n        }\r\n\r\n        private MiddlewareContinuation forMethodAndFile(string method, string path, string etag = null)\r\n        {\r\n            theRequest.HttpMethod(method);\r\n\r\n\r\n            if (theRequest.Environment.ContainsKey(OwinConstants.RequestPathKey))\r\n            {\r\n                theRequest.Environment[OwinConstants.RequestPathKey] = path;\r\n            }\r\n            else\r\n            {\r\n                theRequest.Environment.Add(OwinConstants.RequestPathKey, path);\r\n            }\r\n\r\n            return theMiddleware.Invoke(theRequest, theResponse);\r\n        }\r\n\r\n        [Test]\r\n        public void will_not_write_a_file_that_is_denied_even_if_it_exists()\r\n        {\r\n            theFiles.WriteFile(\"my.config\", \"some stuff\");\r\n        \r\n            forMethodAndFile(\"GET\", \"my.config\")\r\n                .AssertOnlyContinuesToTheInner();\r\n        }\r\n\r\n        [Test]\r\n        public void just_continue_if_not_GET_or_HEAD()\r\n        {\r\n            theFiles.WriteFile(\"anything.htm\", \"some content\");\r\n\r\n            forMethodAndFile(\"POST\", \"anything.htm\").AssertOnlyContinuesToTheInner();\r\n            forMethodAndFile(\"PUT\", \"anything.htm\").AssertOnlyContinuesToTheInner();\r\n        }\r\n\r\n        [Test]\r\n        public void GET_and_the_file_does_not_exist()\r\n        {\r\n            fileDoesNotExist(\"something.js\");\r\n\r\n            forMethodAndFile(\"GET\", \"something.js\")\r\n                .AssertOnlyContinuesToTheInner();\r\n        }\r\n\r\n        [Test]\r\n        public void HEAD_and_the_file_does_not_exist()\r\n        {\r\n            fileDoesNotExist(\"something.js\");\r\n\r\n            forMethodAndFile(\"HEAD\", \"something.js\")\r\n                .AssertOnlyContinuesToTheInner();\r\n        }\r\n\r\n        [Test]\r\n        public void file_exists_on_GET_request_no_headers_of_any_kind_should_write_file()\r\n        {\r\n            theFiles.WriteFile(\"/folder1/foo.htm\", \"hey you!\");\r\n\r\n            var continuation = forMethodAndFile(\"GET\", \"/folder1/foo.htm\")\r\n                .ShouldBeOfType<WriteFileContinuation>();\r\n\r\n            continuation.File.RelativePath\r\n                .ShouldBe(\"folder1/foo.htm\");\r\n        }\r\n\r\n        [Test]\r\n        public void file_exists_on_HEAD_request_when_file_exists()\r\n        {\r\n            theFiles.WriteFile(\"foo.css\", \"something grand\");\r\n\r\n            var continuation = forMethodAndFile(\"HEAD\", \"foo.css\")\r\n                .ShouldBeOfType<WriteFileHeadContinuation>();\r\n\r\n            continuation.Status.ShouldBe(HttpStatusCode.OK);\r\n            continuation.File.RelativePath.ShouldBe(\"foo.css\");\r\n        }\r\n\r\n        [Test]\r\n        public void file_exists_on_GET_but_miss_on_IfMatch_header()\r\n        {\r\n            var file = theFiles.WriteFile(\"foo.css\", \"some contents\");\r\n            var differentEtag = file.Etag() + \"!\"; // just to make it different\r\n\r\n            theRequest.AppendHeader(HttpRequestHeaders.IfMatch, differentEtag);\r\n\r\n            var continuation = forMethodAndFile(\"GET\", \"foo.css\")\r\n                .ShouldBeOfType<WriteStatusCodeContinuation>();\r\n\r\n            continuation.Status.ShouldBe(HttpStatusCode.PreconditionFailed);\r\n        }\r\n\r\n        [Test]\r\n        public void file_exists_on_GET_and_hit_on_IfMatch_header()\r\n        {\r\n            var file = theFiles.WriteFile(\"foo.css\", \"some contents\");\r\n\r\n            theRequest.AppendHeader(HttpRequestHeaders.IfMatch, file.Etag());\r\n\r\n            var continuation = forMethodAndFile(\"GET\", \"foo.css\")\r\n                .ShouldBeOfType<WriteFileContinuation>();\r\n\r\n            continuation.File.RelativePath.ShouldBe(\"foo.css\");\r\n        }\r\n\r\n        [Test]\r\n        public void file_exists_on_GET_but_miss_on_IfNoneMatch_header()\r\n        {\r\n            var file = theFiles.WriteFile(\"foo.css\", \"some contents\");\r\n            var differentEtag = file.Etag() + \"!\"; // just to make it different\r\n\r\n            theRequest.AppendHeader(HttpRequestHeaders.IfNoneMatch, differentEtag);\r\n\r\n            var continuation = forMethodAndFile(\"GET\", \"foo.css\")\r\n                .ShouldBeOfType<WriteFileContinuation>();\r\n\r\n            continuation.File.RelativePath.ShouldBe(\"foo.css\");\r\n        }\r\n\r\n        [Test]\r\n        public void file_exists_on_GET_and_hit_on_IfNoneMatch_header()\r\n        {\r\n            var file = theFiles.WriteFile(\"foo.css\", \"some contents\");\r\n\r\n            theRequest.AppendHeader(HttpRequestHeaders.IfNoneMatch, file.Etag());\r\n\r\n            var continuation = forMethodAndFile(\"GET\", \"foo.css\")\r\n                .ShouldBeOfType<WriteFileHeadContinuation>();\r\n\r\n            continuation.Status.ShouldBe(HttpStatusCode.NotModified);\r\n            continuation.File.RelativePath.ShouldBe(\"foo.css\");\r\n        }\r\n\r\n        [Test]\r\n        public void if_modified_since_is_false_on_a_good_request()\r\n        {\r\n            var file = theFiles.WriteFile(\"foo.css\", \"some contents\");\r\n\r\n            theRequest.IfModifiedSince(file.LastModified().AddDays(1));\r\n\r\n            var continuation = forMethodAndFile(\"GET\", \"foo.css\")\r\n                .ShouldBeOfType<WriteFileHeadContinuation>();\r\n\r\n            continuation.Status.ShouldBe(HttpStatusCode.NotModified);\r\n            continuation.File.RelativePath.ShouldBe(\"foo.css\");\r\n        }\r\n\r\n        [Test]\r\n        public void if_modified_since_is_true_on_a_good_request_should_write_the_file()\r\n        {\r\n            var file = theFiles.WriteFile(\"foo.css\", \"some contents\");\r\n\r\n            theRequest.IfModifiedSince(file.LastModified().AddDays(-1));\r\n\r\n            var continuation = forMethodAndFile(\"GET\", \"foo.css\")\r\n                .ShouldBeOfType<WriteFileContinuation>();\r\n\r\n            continuation.File.RelativePath.ShouldBe(\"foo.css\");\r\n        }\r\n\r\n        [Test]\r\n        public void if_un_modified_value_is_satisfied_so_write_the_file()\r\n        {\r\n            var file = theFiles.WriteFile(\"foo.css\", \"some contents\");\r\n\r\n            // the file has not been modified since the header time\r\n            theRequest.IfUnModifiedSince(file.LastModified().AddDays(1));\r\n\r\n            var continuation = forMethodAndFile(\"GET\", \"foo.css\")\r\n                .ShouldBeOfType<WriteFileContinuation>();\r\n\r\n            continuation.File.RelativePath.ShouldBe(\"foo.css\");\r\n        }\r\n\r\n        [Test]\r\n        public void if_un_modified_value_is_not_satisfied_write_the_file_head_with_412()\r\n        {\r\n            var file = theFiles.WriteFile(\"foo.css\", \"some contents\");\r\n\r\n            // the file *has* been modified since the header time\r\n            theRequest.IfUnModifiedSince(file.LastModified().AddDays(-1));\r\n\r\n            var continuation = forMethodAndFile(\"GET\", \"foo.css\")\r\n                .ShouldBeOfType<WriteStatusCodeContinuation>();\r\n\r\n            continuation.Status.ShouldBe(HttpStatusCode.PreconditionFailed);\r\n        }\r\n    }\r\n\r\n    public class StubFubuApplicationFiles : IFubuApplicationFiles\r\n    {\r\n        public FubuFile WriteFile(string relativePath, string contents)\r\n        {\r\n            var path = relativePath.TrimStart('/').Replace('/', Path.DirectorySeparatorChar).TrimStart('/');\r\n            new FileSystem().WriteStringToFile(path, contents);\r\n        \r\n            return new FubuFile(path);\r\n        }\r\n\r\n        public string RootPath\r\n        {\r\n            get { throw new System.NotImplementedException(); }\r\n        }\r\n\r\n        public IEnumerable<IFubuFile> FindFiles(FileSet fileSet)\r\n        {\r\n            throw new System.NotImplementedException();\r\n        }\r\n\r\n        public IFubuFile Find(string relativeName)\r\n        {\r\n            var path = System.Environment.CurrentDirectory.AppendPath(relativeName.Replace('/', Path.DirectorySeparatorChar));\r\n            \r\n            return File.Exists(path)\r\n                ? new FubuFile(path)\r\n                {\r\n                    RelativePath = relativeName\r\n                }\r\n                : null;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Owin/Middleware/StaticFiles/WriteFileContinuationTester.cs",
    "content": "﻿using System.Net;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin.Middleware.StaticFiles;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Http.Owin.Middleware.StaticFiles\r\n{\r\n    [TestFixture]\r\n    public class when_writing_a_file\r\n    {\r\n        private IHttpResponse theResponse;\r\n        private FubuFile theFile;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theResponse = MockRepository.GenerateMock<IHttpResponse>();\r\n\r\n            new FileSystem().WriteStringToFile(\"foo.txt\", \"some text\");\r\n            theFile = new FubuFile(\"foo.txt\");\r\n\r\n            new WriteFileContinuation(theResponse, theFile, new AssetSettings())\r\n                .Write(theResponse);\r\n        }\r\n\r\n\r\n        private void assertHeaderValueWasWritten(string key, string value)\r\n        {\r\n            theResponse.AssertWasCalled(x => x.AppendHeader(key, value));\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void should_write_ok_as_the_status_code()\r\n        {\r\n            theResponse.AssertWasCalled(x => x.WriteResponseCode(HttpStatusCode.OK));\r\n        }\r\n\r\n        [Test]\r\n        public void should_append_the_normal_file_headers()\r\n        {\r\n            // I'm saying this is enough to prove it's delegating\r\n            assertHeaderValueWasWritten(HttpResponseHeaders.ETag, theFile.Etag().Quoted());\r\n        }\r\n\r\n        [Test]\r\n        public void should_write_The_file_itself()\r\n        {\r\n            theResponse.AssertWasCalled(x => x.WriteFile(theFile.Path));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Owin/Middleware/StaticFiles/WriteFileHeadContinuationTester.cs",
    "content": "﻿using System.Net;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin.Middleware.StaticFiles;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Http.Owin.Middleware.StaticFiles\r\n{\r\n    [TestFixture]\r\n    public class WriteFileHeadContinuation_should_only_write_the_content_type_if_that_status_is_200\r\n    {\r\n        private FubuFile theFile;\r\n        private IHttpResponse theResponse;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            new FileSystem().WriteStringToFile(\"foo.txt\", \"some text\");\r\n            theFile = new FubuFile(\"foo.txt\");\r\n\r\n            theResponse = MockRepository.GenerateMock<IHttpResponse>();\r\n            \r\n        }\r\n\r\n        [Test]\r\n        public void do_write_content_length_for_200()\r\n        {\r\n            new WriteFileHeadContinuation(theResponse, theFile, HttpStatusCode.OK)\r\n                .Write(theResponse);\r\n\r\n            theResponse.AssertWasCalled(x => x.AppendHeader(HttpResponseHeaders.ContentLength, theFile.Length().ToString()));\r\n        }\r\n\r\n        [Test]\r\n        public void do_not_write_lenght_for_anything_but_200()\r\n        {\r\n            new WriteFileHeadContinuation(theResponse, theFile, HttpStatusCode.SeeOther)\r\n                .Write(theResponse);\r\n\r\n            theResponse.AssertWasNotCalled(x => x.AppendHeader(HttpResponseHeaders.ContentLength, theFile.Length().ToString()));\r\n        }\r\n    }\r\n\r\n\r\n    [TestFixture]\r\n    public class when_writing_the_file_headers\r\n    {\r\n        private FubuFile theFile;\r\n        private IHttpResponse theResponse;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            new FileSystem().WriteStringToFile(\"foo.txt\", \"some text\");\r\n            theFile = new FubuFile(\"foo.txt\");\r\n\r\n            theResponse = MockRepository.GenerateMock<IHttpResponse>();\r\n\r\n            WriteFileHeadContinuation.WriteHeaders(theResponse, theFile);\r\n        }\r\n\r\n        private void assertHeaderValueWasWritten(string key, string value)\r\n        {\r\n            theResponse.AssertWasCalled(x => x.AppendHeader(key, value));\r\n        }\r\n\r\n        [Test]\r\n        public void should_write_the_content_type()\r\n        {\r\n            assertHeaderValueWasWritten(HttpResponseHeaders.ContentType, \"text/plain\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_write_the_last_modified_header()\r\n        {\r\n            assertHeaderValueWasWritten(HttpResponseHeaders.LastModified, theFile.LastModified().ToString(\"r\"));\r\n        }\r\n\r\n        [Test]\r\n        public void should_write_the_quoted_etag()\r\n        {\r\n            assertHeaderValueWasWritten(HttpResponseHeaders.ETag, theFile.Etag().Quoted());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Owin/Middleware/StaticFiles/WriteStatusCodeContinuationTester.cs",
    "content": "﻿using System.Net;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin.Middleware.StaticFiles;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Http.Owin.Middleware.StaticFiles\r\n{\r\n    [TestFixture]\r\n    public class WriteStatusCodeContinuationTester\r\n    {\r\n        [Test]\r\n        public void writes_the_status_code_and_reason()\r\n        {\r\n            var writer = MockRepository.GenerateMock<IHttpResponse>();\r\n\r\n\r\n            var continuation = new WriteStatusCodeContinuation(writer, HttpStatusCode.Accepted, \"it's all good\");\r\n\r\n            continuation.Write(writer);\r\n\r\n            writer.AssertWasCalled(x => x.WriteResponseCode(HttpStatusCode.Accepted, \"it's all good\"));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Owin/OwinCurrentHttpRequest_ClientConnectivityTester.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Threading;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http.Owin\r\n{\r\n    [TestFixture]\r\n    public class OwinCurrentHttpRequest_ClientConnectivityTester\r\n    {\r\n        private CancellationToken theToken;\r\n        private OwinHttpRequest theConnectivity;\r\n        private CancellationTokenSource source;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            var dictionary = new Dictionary<string,object>();\r\n\r\n            source = new CancellationTokenSource();\r\n\r\n            theToken = source.Token;\r\n\r\n            dictionary.Add(OwinConstants.CallCancelledKey, theToken);\r\n\r\n            theConnectivity = new OwinHttpRequest(dictionary);\r\n        }\r\n\r\n        [Test]\r\n        public void the_call_is_connected_if_the_cancellation_token_is_not_signaled()\r\n        {\r\n            theConnectivity.IsClientConnected().ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void the_call_is_not_connected_if_the_token_has_been_signaled()\r\n        {\r\n            source.Cancel();\r\n            theConnectivity.IsClientConnected().ShouldBeFalse();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Owin/OwinHeaderSettingsTester.cs",
    "content": "﻿using FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http.Owin\r\n{\r\n    [TestFixture]\r\n    public class OwinHeaderSettingsTester\r\n    {\r\n        private OwinHeaderSettings theSettings;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theSettings = new OwinHeaderSettings();\r\n        }\r\n\r\n        [Test]\r\n        public void allow_multiple_defaults_to_true()\r\n        {\r\n            theSettings.AllowMultiple(HttpRequestHeaders.Authorization).ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void allow_multiple_returns_false_if_header_has_been_excluded()\r\n        {\r\n            theSettings.DoNotAllowMultipleValues(HttpRequestHeaders.ContentType);\r\n            theSettings.AllowMultiple(HttpRequestHeaders.ContentType).ShouldBeFalse();\r\n        }\r\n\r\n        [Test] // Keeps NOWIN happy\r\n        public void allow_multiple_defaults_to_false_for_content_length()\r\n        {\r\n            theSettings.AllowMultiple(HttpRequestHeaders.ContentLength).ShouldBeFalse();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Owin/OwinHttpRequestTester.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http.Owin\r\n{\r\n    [TestFixture]\r\n    public class OwinHttpRequestTester\r\n    {\r\n        private Dictionary<string, string[]> headers;\r\n        private OwinHttpRequest request;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            headers = new Dictionary<string, string[]>();\r\n\r\n            var dict = new Dictionary<string, object>();\r\n            dict.Add(OwinConstants.RequestHeadersKey, headers);\r\n\r\n            request = new OwinHttpRequest(dict);\r\n        }\r\n\r\n        [Test]\r\n        public void server_root_round_trip()\r\n        {\r\n            request.FullUrl(\"http://server/foo/bar\");\r\n            request.FullUrl().ShouldBe(\"http://server/foo/bar\");\r\n\r\n            request.RelativeUrl().ShouldBe(\"foo/bar\");\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void server_root_round_trip_with_querystring()\r\n        {\r\n            request.FullUrl(\"http://server/foo/bar?foo=bar\");\r\n            request.FullUrl().ShouldBe(\"http://server/foo/bar?foo=bar\");\r\n\r\n            request.RelativeUrl().ShouldBe(\"foo/bar?foo=bar\");\r\n        }\r\n\r\n        [Test]\r\n        public void has_negative()\r\n        {\r\n            request.HasHeader(\"a\").ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void has_positive()\r\n        {\r\n            headers.Add(\"a\", new string[]{\"1\", \"2\"});\r\n\r\n            request.HasHeader(\"a\").ShouldBeTrue();\r\n            request.HasHeader(\"A\").ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void get()\r\n        {\r\n            headers.Add(\"a\", new string[] { \"1\", \"2\" });\r\n            request.GetHeader(\"a\").ShouldHaveTheSameElementsAs(\"1\", \"2\");\r\n            request.GetHeader(\"A\").ShouldHaveTheSameElementsAs(\"1\", \"2\");\r\n        }\r\n\r\n        \r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Owin/OwinHttpResponseTester.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http.Owin\r\n{\r\n    [TestFixture]\r\n    public class OwinHttpResponseTester\r\n    {\r\n        [Test]\r\n        public void do_not_blow_up_when_there_are_no_headers()\r\n        {\r\n            new OwinHttpResponse().AllHeaders().Any().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void write_a_header_that_allows_multiple_values()\r\n        {\r\n            var settings = new OwinHeaderSettings();\r\n            var environment = new Dictionary<string, object>\r\n            {\r\n                {OwinConstants.HeaderSettings, settings}\r\n            };\r\n            var response = new OwinHttpResponse(environment);\r\n\r\n            response.AppendHeader(HttpGeneralHeaders.Allow, \"application/json\");\r\n            response.AppendHeader(HttpGeneralHeaders.Allow, \"text/json\");\r\n\r\n            var headers = environment.Get<IDictionary<string, string[]>>(OwinConstants.ResponseHeadersKey);\r\n            headers[HttpGeneralHeaders.Allow].ShouldHaveTheSameElementsAs(\"application/json\", \"text/json\");\r\n        }\r\n\r\n        [Test]\r\n        public void write_a_header_that_does_not_allow_multiple_values()\r\n        {\r\n            var settings = new OwinHeaderSettings();\r\n            var environment = new Dictionary<string, object>\r\n            {\r\n                {OwinConstants.HeaderSettings, settings}\r\n            };\r\n            var response = new OwinHttpResponse(environment);\r\n\r\n            settings.DoNotAllowMultipleValues(HttpRequestHeaders.ContentLength);\r\n\r\n            response.AppendHeader(HttpRequestHeaders.ContentLength, \"1234\");\r\n            response.AppendHeader(HttpRequestHeaders.ContentLength, \"1234\");\r\n\r\n            var headers = environment.Get<IDictionary<string, string[]>>(OwinConstants.ResponseHeadersKey);\r\n            headers[HttpRequestHeaders.ContentLength].ShouldHaveTheSameElementsAs(\"1234\");\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Owin/OwinServiceArgumentsTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Web.Routing;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Http.Owin;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Http.Owin\n{\n    [TestFixture]\n    public class OwinServiceArgumentsTester\n    {\n        [Test]\n        public void registers_the_environment_dictionary_itself()\n        {\n            var environment = new Dictionary<string, object>();\n\n            var routeData = new RouteData();\n\n            var arguments = new OwinServiceArguments(routeData, environment);\n\n            arguments.Get<IDictionary<string, object>>()\n                .ShouldBeSameAs(environment);\n        }\n\n        [Test]\n        public void register_the_execution_log_if_it_exists()\n        {\n            var log = new ChainExecutionLog();\n            var environment = new Dictionary<string, object>();\n            environment.Log(log);\n\n            var routeData = new RouteData();\n\n            var arguments = new OwinServiceArguments(routeData, environment);\n        \n            arguments.Get<IChainExecutionLog>()\n                .ShouldBeSameAs(log);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Owin/OwinSettingsTester.cs",
    "content": "﻿using System.Linq;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Http.Owin.Middleware;\r\nusing FubuMVC.Core.Http.Owin.Middleware.StaticFiles;\r\nusing HtmlTags;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Http.Owin\r\n{\r\n    [TestFixture]\r\n    public class OwinSettingsTester\r\n    {\r\n        [Test]\r\n        public void static_file_middle_ware_is_added_by_default()\r\n        {\r\n            var settings = new OwinSettings();\r\n\r\n            settings.Middleware.OfType<MiddlewareNode<StaticFileMiddleware>>()\r\n                .Count().ShouldBe(1);\r\n        }\r\n\r\n        [Test]\r\n        public void create_with_no_html_head_injection()\r\n        {\r\n            var settings = new OwinSettings();\r\n            settings.Middleware.OfType<MiddlewareNode<HtmlHeadInjectionMiddleware>>()\r\n                .Any().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void create_with_html_head_injection()\r\n        {\r\n            var html = new HtmlTag(\"script\").Attr(\"foo\", \"bar\").ToString();\r\n\r\n\r\n            using (var runtime = FubuRuntime.Basic(_ =>\r\n            {\r\n                _.Mode = \"development\";\r\n                _.AlterSettings<OwinSettings>(x =>\r\n                {\r\n                    x.AddMiddleware<HtmlHeadInjectionMiddleware>().Arguments.Set(new InjectionOptions\r\n                    {\r\n                        Content = c => html\r\n                    });\r\n                });\r\n            }))\r\n            {\r\n                var settings = runtime.Get<OwinSettings>();\r\n                settings.Middleware.OfType<MiddlewareNode<HtmlHeadInjectionMiddleware>>()\r\n                    .Any().ShouldBeTrue();\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Owin/OwnCurrentHttpRequestTester.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http.Owin\r\n{\r\n    [TestFixture]\r\n    public class OwinCurrentHttpRequest_FullUrl_Tester\r\n    {\r\n        private IDictionary<string, object> environment;\r\n        private IDictionary<string, string[]> headers;\r\n        private OwinHttpRequest request;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            environment = new Dictionary<string, object>();\r\n            headers = new Dictionary<string, string[]>();\r\n            environment.Add(OwinConstants.RequestHeadersKey, headers);\r\n            environment.Add(OwinConstants.RequestSchemeKey, \"https\");\r\n            \r\n            \r\n            setHeader(\"Host\", \"localhost\");\r\n            request = new OwinHttpRequest(environment);\r\n\r\n        }\r\n\r\n        private void setHeader(string header, string value)\r\n        {\r\n            headers[header] = new []{value};\r\n        }\r\n\r\n        [Test]\r\n        public void should_prepend_scheme()\r\n        {\r\n            request.FullUrl().ShouldStartWith(\"https://\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_support_host_without_port()\r\n        {\r\n            request.FullUrl().ShouldStartWith(\"https://localhost\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_support_host_with_port()\r\n        {\r\n            setHeader(\"Host\", \"localhost:8080\");\r\n            request.FullUrl().ShouldStartWith(\"https://localhost:8080\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_support_ip_address_with_port()\r\n        {\r\n            setHeader(\"Host\", \"127.0.0.1:8080\");\r\n            request.FullUrl().ShouldStartWith(\"https://127.0.0.1:8080\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_be_tolerant_of_invalid_host_format()\r\n        {\r\n            setHeader(\"Host\", \"localhost:  \");\r\n            request.FullUrl().ShouldStartWith(\"https://localhost\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_ignore_invalid_port()\r\n        {\r\n            setHeader(\"Host\", \"localhost:a\");\r\n            request.FullUrl().ShouldStartWith(\"https://localhost\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_use_path()\r\n        {\r\n            environment[OwinConstants.RequestPathKey] = \"/foo\";\r\n            request.FullUrl().ShouldBe(\"https://localhost/foo\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_support_querystring()\r\n        {\r\n            environment[OwinConstants.RequestQueryStringKey] = \"baz=foo\";\r\n            request.FullUrl().ShouldBe(\"https://localhost/?baz=foo\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_support_path_and_querystring()\r\n        {\r\n            environment[OwinConstants.RequestPathKey] = \"/foo\";\r\n            environment[OwinConstants.RequestQueryStringKey] = \"baz=foo\";\r\n            request.FullUrl().ShouldBe(\"https://localhost/foo?baz=foo\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/Owin/OwnHttpWriterTester.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Net;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Http.Owin\r\n{\r\n    [TestFixture]\r\n    public class OwnHttpWriterTester\r\n    {\r\n        private IDictionary<string, object> environment;\r\n        private OwinHttpResponse response;\r\n\r\n        [SetUp]\r\n        public void beforeEach()\r\n        {\r\n            environment = new Dictionary<string, object>();\r\n            environment.Add(OwinConstants.ResponseBodyKey, new MemoryStream());\r\n\r\n            response = new OwinHttpResponse(environment);\r\n        }\r\n\r\n        [Test]\r\n        public void can_write_multiple_values_for_the_same_header()\r\n        {\r\n            response.AppendHeader(\"X-1\", \"A\");\r\n            response.AppendHeader(\"X-1\", \"B\");\r\n\r\n            var dictionary = environment.Get<IDictionary<string, string[]>>(OwinConstants.ResponseHeadersKey);\r\n            dictionary\r\n                .Get(\"X-1\").ShouldHaveTheSameElementsAs(\"A\", \"B\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_set_response_code()\r\n        {\r\n            response.WriteResponseCode(HttpStatusCode.UseProxy);\r\n\r\n            environment[OwinConstants.ResponseStatusCodeKey].ShouldBe(HttpStatusCode.UseProxy.As<int>());\r\n        }\r\n\r\n        [Test]\r\n        public void should_set_response_code_and_description()\r\n        {\r\n            const string description = \"why u no make good request?\";\r\n            response.WriteResponseCode(HttpStatusCode.BadRequest, description);\r\n            environment[OwinConstants.ResponseStatusCodeKey].ShouldBe(HttpStatusCode.BadRequest.As<int>());\r\n            environment[OwinConstants.ResponseReasonPhraseKey].ShouldBe(description);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/RouteDataValuesTester.cs",
    "content": "using System.Web.Routing;\r\nusing FubuCore.Binding.Values;\r\nusing FubuMVC.Core.Http;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Http\r\n{\r\n    [TestFixture]\r\n    public class RouteDataValuesTester\r\n    {\r\n        private RouteDataValues theValues;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            var data = new RouteData();\r\n            data.Values.Add(\"a\", 1);\r\n            data.Values.Add(\"b\", 2);\r\n\r\n            theValues = new RouteDataValues(data);\r\n        }\r\n\r\n        [Test]\r\n        public void got_the_provenance()\r\n        {\r\n            theValues.Provenance.ShouldBe(RequestDataSource.Route.ToString());\r\n        }\r\n\r\n        [Test]\r\n        public void get_value()\r\n        {\r\n            theValues.Get(\"a\").ShouldBe(1);\r\n        }\r\n\r\n        [Test]\r\n        public void has()\r\n        {\r\n            theValues.Has(\"a\").ShouldBeTrue();\r\n            theValues.Has(\"b\").ShouldBeTrue();\r\n            theValues.Has(\"c\").ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void write_report()\r\n        {\r\n            var report = MockRepository.GenerateMock<IValueReport>();\r\n            theValues.WriteReport(report);\r\n\r\n            report.AssertWasCalled(x => x.Value(\"a\", 1));\r\n            report.AssertWasCalled(x => x.Value(\"b\", 2));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Http/StreamExtensions.cs",
    "content": "using System.IO;\r\n\r\nnamespace FubuMVC.Tests.Http\r\n{\r\n    public static class StreamExtensions\r\n    {\r\n        public static Stream AsStream(this string text)\r\n        {\r\n            var stream = new MemoryStream();\r\n            var writer = new StreamWriter(stream);\r\n\r\n            writer.Write(text);\r\n            writer.Flush();\r\n\r\n            stream.Position = 0;\r\n            return stream;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Json/ComplexType.cs",
    "content": "using FubuCore;\n\nnamespace FubuMVC.Tests.Json\n{\n\tpublic class ComplexType\n\t{\n\t\tpublic string Key { get; set; }\n\t\tpublic string Value { get; set; }\n\n\t\tpublic override string ToString()\n\t\t{\n\t\t\treturn \"{0}:{1}\".ToFormat(Key, Value);\n\t\t}\n\n\t\tpublic override bool Equals(object obj)\n\t\t{\n\t\t\tif (ReferenceEquals(null, obj)) return false;\n\t\t\tif (ReferenceEquals(this, obj)) return true;\n\t\t\tif (obj.GetType() != typeof (ComplexType)) return false;\n\t\t\treturn Equals((ComplexType) obj);\n\t\t}\n\n\t\tpublic bool Equals(ComplexType other)\n\t\t{\n\t\t\tif (ReferenceEquals(null, other)) return false;\n\t\t\tif (ReferenceEquals(this, other)) return true;\n\t\t\treturn Equals(other.Key, Key) && Equals(other.Value, Value);\n\t\t}\n\n\t\tpublic override int GetHashCode()\n\t\t{\n\t\t\tunchecked\n\t\t\t{\n\t\t\t\treturn (Key.GetHashCode()*397) ^ Value.GetHashCode();\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Json/ComplexTypeConverter.cs",
    "content": "using FubuCore.Conversion;\nusing FubuMVC.Core.Json;\n\nnamespace FubuMVC.Tests.Json\n{\n\tpublic class ComplexTypeConverter : FubuJsonConverter<ComplexType>\n\t{\n\t\tpublic ComplexTypeConverter(IObjectConverter converter) \n\t\t\t: base(converter)\n\t\t{\n\t\t}\n\n\t\tprotected override string toJsonValue(ComplexType value)\n\t\t{\n\t\t\treturn value.ToString();\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Json/JObjectValuesTester.cs",
    "content": "using System;\nusing System.Linq;\nusing FubuCore.Binding;\nusing FubuMVC.Core.Json;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Json\n{\n    [TestFixture]\n    public class JObjectValuesTester\n    {\n        private JObjectValues valuesFor(string json)\n        {\n            json = json.Replace(\"\\\"\", \"'\");\n\n\n            return new JObjectValues(json);\n        }\n\n        [Test]\n        public void has()\n        {\n            var values = valuesFor(\"{a:1, b:2, c:3}\");\n\n            values.Has(\"a\").ShouldBeTrue();\n            values.Has(\"b\").ShouldBeTrue();\n            values.Has(\"c\").ShouldBeTrue();\n            values.Has(\"d\").ShouldBeFalse();\n            values.Has(\"e\").ShouldBeFalse();\n        }\n\n        [Test]\n        public void get()\n        {\n            var values = valuesFor(\"{a:'1', b:2, c:3}\");\n\n            values.Get(\"a\").ShouldBe(\"1\");\n            values.Get(\"b\").ShouldBe(\"2\");\n            values.Get(\"c\").ShouldBe(\"3\");\n        }\n\n        [Test]\n        public void has_child()\n        {\n            var values = valuesFor(\"{child1:'1', child2:{a:'1', b:'2'}}\");\n\n            values.HasChild(\"child1\").ShouldBeFalse();\n            values.HasChild(\"child3\").ShouldBeFalse();\n\n            values.HasChild(\"child2\").ShouldBeTrue();\n        }\n\n        [Test]\n        public void get_child()\n        {\n            var values = valuesFor(\"{child1:'1', child2:{a:'1', b:'2'}}\");\n            var child = values.GetChild(\"child2\");\n\n            child.Get(\"a\").ShouldBe(\"1\");\n            child.Get(\"b\").ShouldBe(\"2\");\n        }\n\n        [Test]\n        public void get_children_with_no_children_is_an_empty_array()\n        {\n            var values = valuesFor(\"{child1:'1', child2:{a:'1', b:'2'}}\");\n            values.GetChildren(\"different\").Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void get_children_with_values()\n        {\n            var values = valuesFor(\"{children:[{a:'1'}, {a: '2'}, {a:'3'}]}\");\n\n            var children = values.GetChildren(\"children\");\n\n            children.Count().ShouldBe(3);\n            children.Select(x => x.Get(\"a\")).ShouldHaveTheSameElementsAs(\"1\", \"2\", \"3\");\n        }\n\n        [Test]\n        public void value_positive()\n        {\n            var values = valuesFor(\"{a:1, b:2, c:3}\");\n            var action = MockRepository.GenerateMock<Action<BindingValue>>();\n\n            values.Value(\"a\", action).ShouldBeTrue();\n\n            action.AssertWasCalled(x => x.Invoke(new BindingValue{\n                RawKey = \"a\",\n                RawValue = \"1\",\n                Source = values.Provenance\n            }));\n        }\n\n        [Test]\n        public void value_negative()\n        {\n            var values = valuesFor(\"{a:1, b:2, c:3}\");\n\n            values.Value(\"nonexistent\", v =>\n            {\n                Assert.Fail(\"Should not call me\");\n            }).ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Json/NewtonSoftBindingReaderTester.cs",
    "content": "using System.Diagnostics;\nusing System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Json;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Json\n{\n    [TestFixture]\n    public class NewtonsoftBindingReaderTester\n    {\n        private JsonTarget theResult;\n\n        [SetUp]\n        public void SetUp()\n        {\n            var json = \"{Name:'Max', Age:8, Nested:{Order:5}, Array:[{Order:0}, {Order:1}, {Order:2}]}\".Replace(\"'\", \"\\\"\");\n\n            JsonTargetEndpoint.LastTarget = null;\n\n            using (var server = FubuRuntime.Basic())\n            {\n                server.Scenario(_ => {\n                    _.Post.Input<JsonTarget>();\n                    _.Request.Body.JsonInputIs(json);\n                    _.Request.ContentType(\"text/json\");\n\n                });\n            }\n\n            theResult = JsonTargetEndpoint.LastTarget;\n        }\n\n\n\n        [Test]\n        public void can_read_basic_properties()\n        {\n            theResult.Name.ShouldBe(\"Max\");\n            theResult.Age.ShouldBe(8);\n        }\n\n        [Test]\n        public void can_read_nested_properties()\n        {\n            theResult.Nested.Order.ShouldBe(5);\n        }\n\n        [Test]\n        public void can_read_enumerable_properties()\n        {\n            theResult.Array.Select(x => x.Order)\n                .ShouldHaveTheSameElementsAs(0, 1, 2);\n        }\n    }\n\n    public class JsonTargetEndpoint\n    {\n        public static JsonTarget LastTarget;\n\n        [JsonBinding]\n        public string post_json_target(JsonTarget target)\n        {\n            LastTarget = target;\n\n            return \"ok\";\n        }\n    }\n\n    public class JsonTarget\n    {\n        public JsonTarget()\n        {\n            Debug.WriteLine(\"making a new one\");\n        }\n\n        public string Name { get; set;}\n        public int Age { get; set; }\n\n        public NestedJsonTarget Nested { get; set; }\n        public NestedJsonTarget[] Array { get; set; }\n    }\n\n    public class NestedJsonTarget\n    {\n        public int Order { get; set; }\n    }\n\n\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Json/NewtonSoftJsonReaderTester.cs",
    "content": "﻿using FubuMVC.Core.Json;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Json\n{\n\t[TestFixture]\n\tpublic class NewtonSoftJsonReaderTester : InteractionContext<NewtonSoftJsonReader>\n\t{\n\t\tprivate string theJson;\n\t\tprivate ParentType theTarget;\n\n\t\tprotected override void beforeEach()\n\t\t{\n\t\t\ttheJson = \"{something}\";\n\n\t\t\tServices.PartialMockTheClassUnderTest();\n\t\t\tClassUnderTest.Stub(x => x.GetInputText()).Return(theJson.ToCompletionTask());\n\n\t\t\ttheTarget = new ParentType { Name = \"Blah\", Child = new ComplexType { Value = \"123\", Key = \"x\"}};\n\n\t\t\tMockFor<IJsonSerializer>().Expect(x => x.Deserialize<ParentType>(theJson)).Return(theTarget);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void just_delegates_to_the_json_serializer()\n\t\t{\n\t\t\tClassUnderTest.Read<ParentType>().GetAwaiter().GetResult().ShouldBe(theTarget);\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Json/ParentType.cs",
    "content": "namespace FubuMVC.Tests.Json\n{\n\tpublic class ParentType\n\t{\n\t\tpublic string Name { get; set; }\n\t\tpublic ComplexType Child { get; set; }\n\n\t\tpublic override bool Equals(object obj)\n\t\t{\n\t\t\tif (ReferenceEquals(null, obj)) return false;\n\t\t\tif (ReferenceEquals(this, obj)) return true;\n\t\t\tif (obj.GetType() != typeof (ParentType)) return false;\n\t\t\treturn Equals((ParentType) obj);\n\t\t}\n\n\t\tpublic bool Equals(ParentType other)\n\t\t{\n\t\t\tif (ReferenceEquals(null, other)) return false;\n\t\t\tif (ReferenceEquals(this, other)) return true;\n\t\t\treturn Equals(other.Name, Name) && Equals(other.Child, Child);\n\t\t}\n\n\t\tpublic override int GetHashCode()\n\t\t{\n\t\t\tunchecked\n\t\t\t{\n\t\t\t\treturn (Name.GetHashCode()*397) ^ Child.GetHashCode();\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Json/when_deserializing_an_object.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuCore.Conversion;\nusing FubuMVC.Core.Json;\nusing Shouldly;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Serialization;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Json\n{\n\n    [TestFixture]\n     public class respects_the_injected_settings_in_serialization\n     {\n        [Test]\n        public void round_trip_with_camel_casing()\n        {\n            var settings = new JsonSerializerSettings\n            {\n                ContractResolver = new CamelCasePropertyNamesContractResolver()\n            };\n\n            var serializer = new NewtonSoftJsonSerializer(settings, new JsonConverter[0]);\n            var json = serializer.Serialize(new Target {Name = \"Jeremy\"});\n            json.ShouldBe(\"{\\\"name\\\":\\\"Jeremy\\\"}\");\n\n            var target2 = serializer.Deserialize<Target>(json);\n            target2.Name.ShouldBe(\"Jeremy\");\n        }    \n     }\n\n    public class Target\n    {\n        public string Name { get; set; }\n    }\n\n\n\t[TestFixture]\n\tpublic class when_deserializing_an_object\n\t{\n\t\tprivate NewtonSoftJsonSerializer theSerializer;\n\t\tprivate string theInput;\n\t\tprivate ParentType theObject;\n\n\t\t[SetUp]\n\t\tpublic void SetUp()\n\t\t{\n\t\t\tvar locator = new InMemoryServiceLocator();\n\t\t\tvar objectConverter = new ObjectConverter(locator, new ConverterLibrary(new[] {new StatelessComplexTypeConverter()}));\n\t\t\tlocator.Add<IObjectConverter>(objectConverter);\n\n\t\t\tvar converter = new ComplexTypeConverter(objectConverter);\n\n\t\t\ttheInput = \"{\\\"Name\\\":\\\"Test\\\",\\\"Child\\\":\\\"x:123\\\"}\";\n\t\t\ttheSerializer = new NewtonSoftJsonSerializer(new JsonSerializerSettings(), new[] { converter });\n\n\t\t\ttheObject = theSerializer.Deserialize<ParentType>(theInput);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void uses_the_object_converter()\n\t\t{\n\t\t\ttheObject.Name.ShouldBe(\"Test\");\n\t\t\ttheObject.Child.ShouldBe(new ComplexType {Key = \"x\", Value = \"123\"});\n\t\t}\n\t}\n\n\tpublic class StatelessComplexTypeConverter : StatelessConverter<ComplexType>\n\t{\n\t\tprotected override ComplexType convert(string text)\n\t\t{\n\t\t\tvar values = text.Split(new[] { \":\" }, StringSplitOptions.None);\n\t\t\treturn new ComplexType {Key = values[0], Value = values[1]};\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Json/when_serializing_an_object_with_metadata.cs",
    "content": "using FubuCore;\nusing FubuCore.Conversion;\nusing FubuMVC.Core.Json;\nusing Shouldly;\nusing Newtonsoft.Json;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Json\n{\n\t[TestFixture]\n\tpublic class when_serializing_an_object_with_metadata\n\t{\n\t\tprivate NewtonSoftJsonSerializer theSerializer;\n\t\tprivate ComplexTypeConverter theConverter;\n\t\tprivate ParentType theTarget;\n\t\tprivate string theResult;\n\n\t\t[SetUp]\n\t\tpublic void SetUp()\n\t\t{\n\t\t\ttheConverter = new ComplexTypeConverter(new ObjectConverter());\n\t\t\ttheSerializer = new NewtonSoftJsonSerializer(new JsonSerializerSettings(), new JsonConverter[] { theConverter });\n\n\t\t\ttheTarget = new ParentType\n\t\t\t            \t{\n\t\t\t            \t\tName = \"Test\",\n\t\t\t            \t\tChild = new ComplexType { Key = \"x\", Value = \"123\" }\n\t\t\t            \t};\n\n\t\t\ttheResult = theSerializer.Serialize(theTarget, true);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void uses_the_provided_converters()\n\t\t{\n\t\t\tvar targetType = typeof(ParentType);\n\t\t\tvar type = \"\\\"$type\\\":\\\"{0}, {1}\\\"\".ToFormat(targetType.FullName, targetType.Assembly.GetName().Name);\n\t\t\ttheResult.ShouldBe(\"{\" + type + \",\\\"Name\\\":\\\"Test\\\",\\\"Child\\\":\\\"x:123\\\"}\");\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Json/when_serializing_an_object_without_metadata.cs",
    "content": "﻿using FubuCore.Conversion;\nusing FubuMVC.Core.Json;\nusing Shouldly;\nusing Newtonsoft.Json;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Json\n{\n\t[TestFixture]\n\tpublic class when_serializing_an_object_without_metadata\n\t{\n\t\tprivate NewtonSoftJsonSerializer theSerializer;\n\t\tprivate ComplexTypeConverter theConverter;\n\t\tprivate ParentType theTarget;\n\t\tprivate string theResult;\n\n\t\t[SetUp]\n\t\tpublic void SetUp()\n\t\t{\n\t\t\ttheConverter = new ComplexTypeConverter(new ObjectConverter());\n\t\t\ttheSerializer = new NewtonSoftJsonSerializer(new JsonSerializerSettings(), new JsonConverter[] { theConverter });\n\n\t\t\ttheTarget = new ParentType\n\t\t\t            \t{\n\t\t\t            \t\tName = \"Test\",\n\t\t\t\t\t\t\t\tChild = new ComplexType { Key = \"x\", Value = \"123\" }\n\t\t\t            \t};\n\n\t\t\ttheResult = theSerializer.Serialize(theTarget);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void uses_the_provided_converters()\n\t\t{\n\t\t\ttheResult.ShouldBe(\"{\\\"Name\\\":\\\"Test\\\",\\\"Child\\\":\\\"x:123\\\"}\");\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/Basic/AssemblyScannerTester.cs",
    "content": "using System.Collections.Generic;\nusing System.Globalization;\nusing System.Reflection;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Localization.Basic;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Localization.Basic\n{\n    [TestFixture]\n    public class AssemblyScannerTester\n    {\n        private InMemoryLocalizationStorage theStorage;\n        private AssemblyScanner theScanner;\n        private CultureInfo theCulture;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theCulture = new CultureInfo(\"en-GB\");\n            theStorage = new InMemoryLocalizationStorage();\n            theScanner = new AssemblyScanner(theStorage, theCulture);\n\n            \n\n        }\n\n        [Test]\n        public void the_default_culture_should_be_en_US()\n        {\n            theScanner.DefaultCulture.ShouldBe(new CultureInfo(\"en-US\"));\n        }\n\n        [Test]\n        public void scan_string_token_class_that_is_all_missing_and_for_the_default_culture()\n        {\n            theScanner.DefaultCulture = theCulture;\n\n            theScanner.ScanStringTokenType(typeof(AssemblyScannerTokens));\n\n            theStorage.RecordedMissingKeysFor(theCulture).ShouldHaveTheSameElementsAs(LocalString.ReadAllFrom(@\"\n                A=a\n                B=b\n                C=c\n                D=d\n\"));\n        }\n\n\n        [Test]\n        public void scan_string_token_class_that_is_all_missing_for_a_different_culture_than_the_default()\n        {\n            theScanner.ScanStringTokenType(typeof(AssemblyScannerTokens));\n\n            theStorage.RecordedMissingKeysFor(theCulture).ShouldHaveTheSameElementsAs(LocalString.ReadAllFrom(@\"\n                A=en-GB_A\n                B=en-GB_B\n                C=en-GB_C\n                D=en-GB_D\n\"));\n        }\n\n        [Test]\n        public void scan_string_token_class_when_some_are_not_missing()\n        {\n            theStorage.Add(theCulture, \"A\", \"a-something\");\n            theStorage.Add(theCulture, \"C\", \"c-something\");\n\n            theScanner.DefaultCulture = theCulture;\n\n            theScanner.ScanStringTokenType(typeof(AssemblyScannerTokens));\n\n            theStorage.RecordedMissingKeysFor(theCulture).ShouldHaveTheSameElementsAs(LocalString.ReadAllFrom(@\"\n                B=b\n                D=d\n\"));\n        }\n\n        [Test]\n        public void scan_using_a_localized_property_implementation()\n        {\n            theScanner.DefaultCulture = theCulture;\n\n            theScanner.ScanProperties(new ScanningPolicy());\n\n            theStorage.RecordedMissingKeysFor(theCulture).ShouldHaveTheSameElementsAs(LocalString.ReadAllFrom(@\"\n                FubuLocalization.Tests.Basic.AssemblyScannerTester+ScanningTarget:Name:Header=Name\n                FubuLocalization.Tests.Basic.AssemblyScannerTester+ScanningTarget:Title:Header=Title\n                FubuLocalization.Tests.Basic.AssemblyScannerTester+ScanningTarget:Color:Header=Color\n                X=x\n                Y=y\n                Z=z\n\"));\n        }\n\n\n\n        public class ScanningPolicy : ILocalizedProperties\n        {\n            public IEnumerable<PropertyInfo> FindProperties()\n            {\n                yield return ReflectionHelper.GetProperty<ScanningTarget>(x => x.Name);\n                yield return ReflectionHelper.GetProperty<ScanningTarget>(x => x.Title);\n                yield return ReflectionHelper.GetProperty<ScanningTarget>(x => x.Color);\n            }\n\n            public IEnumerable<StringToken> FindTokens()\n            {\n                yield return StringToken.FromKeyString(\"X\", \"x\");\n                yield return StringToken.FromKeyString(\"Y\", \"y\");\n                yield return StringToken.FromKeyString(\"Z\", \"z\");\n            }\n        }\n\n        public class ScanningTarget\n        {\n            public string Name { get; set; }\n            public string Title { get; set; }\n            public string Color { get; set; }\n        }\n    }\n\n    public class AssemblyScannerTokens : StringToken\n    {\n        protected AssemblyScannerTokens(string key, string defaultValue) : base(key, defaultValue)\n        {\n        }\n\n        public static readonly StringToken A = FromKeyString(\"A\", \"a\");\n        public static readonly StringToken B = FromKeyString(\"B\", \"b\");\n        public static readonly StringToken C = FromKeyString(\"C\", \"c\");\n        public static readonly StringToken D = FromKeyString(\"D\", \"d\");\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/Basic/LocalizationMissingHandlerTester.cs",
    "content": "using System;\nusing System.Globalization;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Localization.Basic;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Localization.Basic\n{\n    [TestFixture]\n    public class LocalizationMissingHandlerTester : InteractionContext<LocalizationMissingHandler>\n    {\n        private CultureInfo theDefaultCulture = new CultureInfo(\"en-US\");\n\n        protected override void beforeEach()\n        {\n            Services.Inject(theDefaultCulture);\n        }\n\n        [Test]\n        public void find_missing_text_if_the_key_has_default_text_and_it_is_the_default_culture()\n        {\n            var token = StringToken.FromKeyString(\"KEY1\", \"the default text\");\n            \n            ClassUnderTest.FindMissingText(token, theDefaultCulture).ShouldBe(\"the default text\");\n\n            MockFor<ILocalizationStorage>().AssertWasCalled(x => x.WriteMissing(\"KEY1\", \"the default text\", theDefaultCulture));\n        }\n\n        [Test]\n        public void find_missing_text_if_the_key_does_not_have_default_text_and_it_is_the_default_culture()\n        {\n            var token = StringToken.FromKeyString(\"KEY1\");\n\n            ClassUnderTest.FindMissingText(token, theDefaultCulture).ShouldBe(\"en-US_KEY1\");\n\n            MockFor<ILocalizationStorage>().AssertWasCalled(x => x.WriteMissing(\"KEY1\", \"en-US_KEY1\", theDefaultCulture));\n        }\n\n        [Test]\n        public void find_missing_text_if_the_key_has_default_text_but_it_is_not_the_default_culture()\n        {\n            var token = StringToken.FromKeyString(\"KEY1\", \"the default text\");\n\n            var cultureInfo = new CultureInfo(\"fr-FR\");\n            ClassUnderTest.FindMissingText(token, cultureInfo)\n                .ShouldBe(\"fr-FR_KEY1\");\n\n            MockFor<ILocalizationStorage>().AssertWasCalled(x => x.WriteMissing(\"KEY1\", \"fr-FR_KEY1\", cultureInfo));\n        }\n\n        [Test]\n        public void find_missing_text_if_the_key_has_default_text_but_it_is_not_the_default_culture_for_a_token_with_namespace()\n        {\n            var token = new FakeToken(\"KEY1\", \"the default text\");\n\n            var cultureInfo = new CultureInfo(\"fr-FR\");\n            ClassUnderTest.FindMissingText(token, cultureInfo)\n                .ShouldBe(\"fr-FR_FakeToken:KEY1\");\n\n            MockFor<ILocalizationStorage>().AssertWasCalled(x => x.WriteMissing(\"FakeToken:KEY1\", \"fr-FR_FakeToken:KEY1\", cultureInfo));\n        }\n\n        private string findMissingProperty(Expression<Func<MissingHandlerTarget, object>> expression, CultureInfo culture)\n        {\n            var propertyInfo = ReflectionHelper.GetProperty(expression);\n            return ClassUnderTest.FindMissingProperty(new PropertyToken(propertyInfo), culture);\n        }\n\n        [Test]\n        public void find_missing_property_with_no_header_attribute_and_the_default_culture()\n        {\n            findMissingProperty(x => x.Name, theDefaultCulture).ShouldBe(\"Name\");\n        }\n\n        [Test]\n        public void find_missing_property_with_no_header_attribute_and_non_default_culture()\n        {\n            findMissingProperty(x => x.Name, new CultureInfo(\"fr-FR\")).ShouldBe(\"fr-FR_Name\");\n        }\n\n        [Test]\n        public void find_missing_property_with_header_attribute_that_is_not_marked_by_culture_and_default_culture()\n        {\n            findMissingProperty(x => x.Title, theDefaultCulture).ShouldBe(\"The title\");\n        }\n\n        [Test]\n        public void find_missing_property_with_header_attribute_that_is_not_marked_by_culture_and_a_non_default_culture()\n        {\n            findMissingProperty(x => x.Title, new CultureInfo(\"fr-FR\")).ShouldBe(\"fr-FR_Title\");\n        }\n\n        [Test]\n        public void find_missing_property_with_header_attribute_that_matches_the_culture()\n        {\n            findMissingProperty(x => x.AnotherTitle, new CultureInfo(\"en-GB\")).ShouldBe(\"Other title\");\n        }\n\n        [Test]\n        public void find_missing_property_with_header_attribute_that_does_not_match_the_culture()\n        {\n            findMissingProperty(x => x.AnotherTitle, theDefaultCulture).ShouldBe(\"Another Title\");\n        }\n\n        [Test]\n        public void should_write_the_missing_property_value_to_storage()\n        {\n            var defaultValue = findMissingProperty(x => x.Name, theDefaultCulture);\n\n\n            var key = \"{0}:Name:Header\".ToFormat(typeof (MissingHandlerTarget).FullName);\n        \n            MockFor<ILocalizationStorage>().AssertWasCalled(x => x.WriteMissing(key, defaultValue, theDefaultCulture));\n        }\n    }\n\n    public class MissingHandlerTarget\n    {\n        public string Name { get; set; }\n\n        [HeaderText(\"The title\")]\n        public string Title { get; set; }\n\n        [HeaderText(\"Other title\", Culture = \"en-GB\")]\n        public string AnotherTitle { get; set;}\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/Basic/LocalizationProviderFactoryIntegratedTester.cs",
    "content": "using System.Globalization;\nusing System.Threading;\nusing FubuCore;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Localization.Basic;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Localization.Basic\n{\n    [TestFixture]\n    public class LocalizationProviderFactoryIntegratedTester\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            var system = new FileSystem();\n            system.DeleteDirectory(\"localization1\");\n            system.DeleteDirectory(\"localization2\");\n            system.DeleteDirectory(\"localization3\");\n\n            system.CreateDirectory(\"localization1\");\n            system.CreateDirectory(\"localization2\");\n            system.CreateDirectory(\"localization3\");\n        }\n\n        // values = \"value=display\"\n        private void write(string directory, CultureInfo culture, string values)\n        {\n            XmlDirectoryLocalizationStorage.Write(directory, culture, LocalString.ReadAllFrom(values));\n        }\n\n        [Test]\n        public void load_all()\n        {\n            write(\"localization1\", new CultureInfo(\"en-US\"),\n                  @\"\n                a=us-a\n                b=us-b\n                f=us-f\n            \");\n\n            write(\"localization2\", new CultureInfo(\"en-US\"),\n                  @\"\n                c=us-c\n                d=us-d\n            \");\n\n            write(\"localization3\", new CultureInfo(\"en-US\"), @\"\n                e=us-e\n            \");\n\n            write(\"localization1\", new CultureInfo(\"en-GB\"),\n                  @\"\n                a=gb-a\n                b=gb-b\n                f=gb-f\n            \");\n\n            write(\"localization2\", new CultureInfo(\"en-GB\"),\n                  @\"\n                c=gb-c\n                d=gb-d\n            \");\n\n\n            var source = new XmlDirectoryLocalizationStorage(new[]{\"localization1\", \"localization2\", \"localization3\"});\n            var factory = new LocalizationProviderFactory(source, null, new LocalizationCache());\n            factory.LoadAll(x => { });\n\n            factory.BuildProvider(new CultureInfo(\"en-US\"))\n                .GetTextForKey(StringToken.FromKeyString(\"a\"))\n                .ShouldBe(\"us-a\");\n\n            factory.BuildProvider(new CultureInfo(\"en-US\"))\n                .GetTextForKey(StringToken.FromKeyString(\"e\"))\n                .ShouldBe(\"us-e\");\n\n            factory.BuildProvider(new CultureInfo(\"en-GB\"))\n                .GetTextForKey(StringToken.FromKeyString(\"a\"))\n                .ShouldBe(\"gb-a\");\n        }\n\n        [Test]\n        public void put_it_all_together()\n        {\n            write(\"localization1\", new CultureInfo(\"en-US\"),\n                  @\"\n                a=us-a\n                b=us-b\n                f=us-f\n            \");\n\n            write(\"localization2\", new CultureInfo(\"en-US\"),\n                  @\"\n                c=us-c\n                d=us-d\n            \");\n\n            write(\"localization3\", new CultureInfo(\"en-US\"), @\"\n                e=us-e\n            \");\n\n            write(\"localization1\", new CultureInfo(\"en-GB\"),\n                  @\"\n                a=gb-a\n                b=gb-b\n                f=gb-f\n            \");\n\n            write(\"localization2\", new CultureInfo(\"en-GB\"),\n                  @\"\n                c=gb-c\n                d=gb-d\n            \");\n\n\n            var source = new XmlDirectoryLocalizationStorage(new[] { \"localization1\", \"localization2\", \"localization3\" });\n            var factory = new LocalizationProviderFactory(source, new LocalizationMissingHandler(source, new CultureInfo(\"en-US\")), new LocalizationCache());\n            factory.LoadAll(x => { });\n            factory.ApplyToLocalizationManager();\n\n            var token = StringToken.FromKeyString(\"a\", \"Wrong!\");\n\n            Thread.CurrentThread.CurrentUICulture = new CultureInfo(\"en-US\");\n\n            token.ToString().ShouldBe(\"us-a\");\n\n            Thread.CurrentThread.CurrentUICulture = new CultureInfo(\"en-GB\");\n\n            token.ToString().ShouldBe(\"gb-a\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/ExampleKeys.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.Localization;\n\nnamespace FubuMVC.Tests.Localization\n{\n    // SAMPLE: ExampleKeys\n    \n    public class ExampleKeys : StringToken\n    {\n        public static readonly ExampleKeys InvalidFormat = new ExampleKeys(\"Data is formatted incorrectly\");\n        public static readonly ExampleKeys Required = new ExampleKeys(\"Required Field\");\n\n        public ExampleKeys(string text)\n            : base(null, text)\n        {\n        }\n    }\n\n    // ENDSAMPLE\n\n    // SAMPLE: ExampleNamespacing\n\n    public class ExampleNamespacing : StringToken\n    {\n        public static readonly ExampleNamespacing One = new ExampleNamespacing(\"One\");\n        public static readonly ExampleNamespacing Two = new ExampleNamespacing(\"Two\");\n\n        public ExampleNamespacing(string text)\n            : base(null, text, namespaceByType: true)\n        {\n        }\n    }\n\n    // ENDSAMPLE\n\n    public class ConventionalKeyUsage\n    {\n        // SAMPLE: FromKeyStringUsage\n        public static void GenerateTheToken()\n        {\n            var tokenWithNoDefaultValue = StringToken.FromKeyString(\"Literally any string imaginable\");\n            var tokenWithDefaultValue = StringToken.FromKeyString(\"Some:Namespaced:Key\", \"The default value\");\n        }\n        // ENDSAMPLE\n\n        public interface ICustomTemplate { }\n\n        // SAMPLE: ConventionalKeyUsage\n        public static StringToken TemplateHeader<T>()\n            where T : ICustomTemplate\n        {\n            var templateType = typeof (T);\n            var defaultValue = breakUpPascalCasing(templateType.Name);\n            var tokenKey = \"Template:{0}:Header\".ToFormat(templateType.FullName);\n\n            return StringToken.FromKeyString(tokenKey, defaultValue);\n        }\n        // ENDSAMPLE\n\n        private static string breakUpPascalCasing(string value)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/HtmlTagExtensionsTester.cs",
    "content": "﻿using FubuMVC.Core.Localization;\nusing FubuMVC.Core.UI;\nusing FubuMVC.Core.View;\nusing Shouldly;\nusing HtmlTags;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Localization\n{\n    [TestFixture]\n    public class HtmlTagExtensionsTester\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            LocalizationManager.Stub(\"en-US\");\n        }\n\n        [Test]\n        public void set_localized_tag_text_by_string_token()\n        {\n            var token = StringToken.FromKeyString(\"KEY\", \"the text of this string token\");\n            new HtmlTag(\"a\").Text(token)\n                .Text().ShouldBe(token.ToString());\n        }\n\n        [Test]\n        public void set_localized_attr_value_by_string_token()\n        {\n            var token = StringToken.FromKeyString(\"KEY\", \"the text of this string token\");\n\n            new HtmlTag(\"span\").Attr(\"title\", token)\n                .Attr(\"title\").ShouldBe(token.ToString());\n        }\n\n        [Test]\n        public void set_the_text_by_localized_StringToken()\n        {\n            var token = StringToken.FromKeyString(\"KEY\", \"the localized string\");\n            new HtmlTag(\"div\").TextIfEmpty(token)\n                .Text().ShouldBe(token.ToString());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/IntegratedBootstrappingTests.cs",
    "content": "﻿using System.Diagnostics;\nusing FubuMVC.Core;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Localization\n{\n    [TestFixture]\n    public class IntegratedBootstrappingTests\n    {\n        [Test]\n        public void smoke()\n        {\n            using (FubuRuntime.Basic(_ => _.Features.Localization.Enable(true)))\n            {\n                Debug.WriteLine(\"Ok, can load localization just fine\");  \n            } \n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/LocalStringTester.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.Localization;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Localization\n{\n    [TestFixture]\n    public class LocalStringTester\n    {\n        [Test]\n        public void two_instances_with_the_same_key_should_equal_each_other()\n        {\n            var x = new LocalString { value = \"foo\" };\n            var y = new LocalString { value = \"foo\" };\n\n            x.ShouldBe(y);\n            y.ShouldBe(x);\n        }\n\n        [Test]\n        public void two_instances_with_the_same_key_should_be_considered_the_same_for_hashing_purposes()\n        {\n            var x = new LocalString { value = \"foo\" };\n            var y = new LocalString { value = \"foo\" };\n\n            var dict = new Dictionary<LocalString, int> { { x, 0 } };\n\n            dict.ContainsKey(y).ShouldBeTrue();\n        }\n\n        [Test]\n        public void read_from_happy_path()\n        {\n            LocalString.ReadFrom(\"key=foo\").ShouldBe(new LocalString(\"key\", \"foo\"));\n            \n        }\n\n\n        [Test]\n        public void read_from_happy_path_trims()\n        {\n            LocalString.ReadFrom(\"     key=foo   \").ShouldBe(new LocalString(\"key\", \"foo\"));\n\n        }\n\n        [Test]\n        public void read_from_sad_path_fails_with_descriptive_error()\n        {\n            Exception<ArgumentException>.ShouldBeThrownBy(() =>\n            {\n                LocalString.ReadFrom(\"key:foo\");\n            }).Message.ShouldBe(\"LocalString must be expressed as 'value=display', 'key:foo' is invalid\");\n\n            \n        }\n\n        [Test]\n        public void read_all()\n        {\n            LocalString.ReadAllFrom(@\"\na=a-display\nb=b-display\nc=c-display\n\").ShouldHaveTheSameElementsAs(new LocalString(\"a\", \"a-display\"), new LocalString(\"b\", \"b-display\"), new LocalString(\"c\", \"c-display\"));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/LocalizationBootstrappingTester.cs",
    "content": "using System.Globalization;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Localization.Basic;\nusing FubuMVC.Core.Registration;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.Localization\n{\n    [TestFixture]\n    public class LocalizationBootstrappingTester\n    {\n        [Test]\n        public void service_registrations()\n        {\n            var registry = new FubuRegistry();\n            registry.Features.Localization.Enable(true);\n\n            using (var runtime = registry.ToRuntime())\n            {\n                var container = runtime.Get<IContainer>();\n\n                container.GetInstance<CultureInfo>().Name.ShouldBe(\"en-US\");\n                container.DefaultRegistrationIs<ICurrentCultureContext, CurrentCultureContext>();\n                container.DefaultRegistrationIs<ILocalizationMissingHandler, LocalizationMissingHandler>();\n                container.DefaultRegistrationIs<ILocalizationProviderFactory, LocalizationProviderFactory>();\n                container.DefaultSingletonIs<ILocalizationCache, LocalizationCache>();\n\n                container.ShouldHaveRegistration<IActivator, SpinUpLocalizationCaches>();\n            }\n        }\n\n\n        private BehaviorGraph graphWithBasicLocalizationAsIs;\n\n        [SetUp]\n        public void SetUp()\n        {\n            var registry = new FubuRegistry();\n            registry.Features.Localization.Enable(true);\n\n            graphWithBasicLocalizationAsIs = BehaviorGraph.BuildFrom(registry);\n        }\n\n\n        [Test]\n        public void register_a_non_default_culture_info()\n        {\n            var registry = new FubuRegistry();\n            registry.Features.Localization.Enable(true);\n            registry.Features.Localization.Configure(x => { x.DefaultCulture = new CultureInfo(\"en-CA\"); });\n\n            using (var runtime = registry.ToRuntime())\n            {\n                runtime.Get<CultureInfo>().Name.ShouldBe(\"en-CA\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/LocalizationManagerTester.cs",
    "content": "using System.Reflection;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Localization\n{\n    [TestFixture]\n    public class LocalizationManagerTester\n    {\n        private MockRepository _mocks;\n        private ILocalizationDataProvider _provider;\n\n        [SetUp]\n        public void SetUp()\n        {\n            _mocks = new MockRepository();\n            _provider = _mocks.StrictMock<ILocalizationDataProvider>();\n\n            LocalizationManager.Stub(_provider);\n        }\n\n        [TearDown]\n        public void TearDown()\n        {\n            LocalizationManager.Stub();\n        }\n\n        [Test]\n        public void GetText_for_property()\n        {\n            PropertyInfo property = ReflectionHelper.GetProperty<DummyEntity>(c => c.SimpleProperty);\n\n            using (_mocks.Record())\n            {\n                Expect.Call(_provider.GetHeader(property)).Return(\"TheText\");\n            }\n\n            using (_mocks.Playback())\n            {\n                LocalizationManager.GetText(property).ShouldBe(\"TheText\");\n            }\n        }\n\n        [Test]\n        public void GetText_for_property_by_expression()\n        {\n            PropertyInfo property = ReflectionHelper.GetProperty<DummyEntity>(c => c.SimpleProperty);\n\n            using (_mocks.Record())\n            {\n                Expect.Call(_provider.GetHeader(property)).Return(\"TheText\");\n            }\n\n            using (_mocks.Playback())\n            {\n                LocalizationManager.GetText<DummyEntity>(c => c.SimpleProperty).ShouldBe(\"TheText\");\n            }\n        }\n\n        [Test]\n        public void GetHeader_for_property()\n        {\n            PropertyInfo property = ReflectionHelper.GetProperty<DummyEntity>(c => c.SimpleProperty);\n            var theHeader = \"TheText\";\n\n            using (_mocks.Record())\n            {\n                Expect.Call(_provider.GetHeader(property)).Return(theHeader);\n            }\n\n            using (_mocks.Playback())\n            {\n                LocalizationManager.GetHeader(property).ShouldBe(theHeader);\n            }\n        }\n\n        [Test]\n        public void GetHeader_for_property_by_expression()\n        {\n            PropertyInfo property = ReflectionHelper.GetProperty<DummyEntity>(c => c.SimpleProperty);\n            var theHeader = \"TheText\";\n\n            using (_mocks.Record())\n            {\n                Expect.Call(_provider.GetHeader(property)).Return(theHeader);\n            }\n\n            using (_mocks.Playback())\n            {\n                LocalizationManager.GetHeader<DummyEntity>(c => c.SimpleProperty).ShouldBe(theHeader);\n            }\n        }\n\n        public class DummyEntity\n        {\n            public string SimpleProperty { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/PropertyTokenTester.cs",
    "content": "using System.Globalization;\nusing FubuMVC.Core.Localization;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Localization\n{\n    [TestFixture]\n    public class PropertyTokenTester\n    {\n        [Test]\n        public void find_default_header_for_the_attribute()\n        {\n            var token = new PropertyToken\n            {\n                ParentType = typeof(PropertyTokenTarget),\n                PropertyName = \"Name\"\n            };\n\n            token.FindDefaultHeader(new CultureInfo(\"en-US\")).ShouldBe(\"The Name\");\n            token.FindDefaultHeader(new CultureInfo(\"en-CA\")).ShouldBe(\"Different\");\n            token.FindDefaultHeader(new CultureInfo(\"ja-JP\")).ShouldBeNull();\n        }\n\n        [Test]\n        public void find_default_header_for_property_that_is_not_decorated_should_just_return_null()\n        {\n            var token = new PropertyToken\n            {\n                ParentType = typeof(PropertyTokenTarget),\n                PropertyName = \"NotDecorated\"\n            };\n\n            token.FindDefaultHeader(new CultureInfo(\"en-US\")).ShouldBeNull();\n        }\n    }\n\n    public class PropertyTokenTarget\n    {\n        [HeaderText(\"The Name\"), HeaderText(\"Different\", Culture = \"en-CA\")]\n        public string Name { get; set; }\n\n        public string NotDecorated { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/SpinUpLocalizationCachesTester.cs",
    "content": "using FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Localization.Basic;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Is = Rhino.Mocks.Constraints.Is;\n\nnamespace FubuMVC.Tests.Localization\n{\n    [TestFixture]\n    public class SpinUpLocalizationCachesTester : InteractionContext<SpinUpLocalizationCaches>\n    {\n        protected override void beforeEach()\n        {\n            ClassUnderTest.Activate(MockFor<IActivationLog>(), null);\n        }\n\n        [Test]\n        public void should_load_the_caches()\n        {\n            MockFor<ILocalizationProviderFactory>()\n                .AssertWasCalled(x => x.LoadAll(null), x => x.Constraints(Is.NotNull()));\n        }\n\n        [Test]\n        public void should_apply_the_factory_to_localization_manager()\n        {\n            MockFor<ILocalizationProviderFactory>().AssertWasCalled(x => x.ApplyToLocalizationManager());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/StringTokenStronglyTypedTester.cs",
    "content": "﻿using FubuMVC.Core.Localization;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Localization\n{\n    [TestFixture]\n    public class StringTokenStronglyTypedTester\n    {\n        [Test]\n        public void simple_localization()\n        {\n            var token = Loc.Basic;\n            var locKey = token.ToLocalizationKey();\n            locKey.Key1.ShouldBe(\"Loc:Basic\");\n            token.DefaultValue.ShouldBe(\"Basic_Trans\");\n        }\n\n        [Test]\n        public void nested_class_localization()\n        {\n            var token = Loc.Account.AccountName;\n            var locKey = token.ToLocalizationKey();\n\n            locKey.Key1.ShouldBe(\"Loc.Account:AccountName\");\n            token.DefaultValue.ShouldBe(\"Account_Trans\");\n        }\n\n        [Test]\n        public void parameter_localization()\n        {\n            var token = Loc.User.NameWithParams;\n            var locKey = token.ToLocalizationKey();\n\n            locKey.Key1.ShouldBe(\"Loc.User:NameWithParams\");\n            token.FormatTokenWith(new NameParams { LastName = \"Sir\" }).ShouldBe(\"Name_Sir\");\n        }\n\n        [Test]\n        public void parameter_localization_raw_key()\n        {\n            var token = Loc.User.NameWithParams;\n            token.ToRawString().ShouldBe(\"Name_{LastName}\");\n        }\n    }\n\n    public partial class Loc\n    {\n        public static readonly StringToken Basic = new StringToken<Loc>(\"Basic_Trans\");\n\n        public class User\n        {\n            public static readonly StringToken Name = new StringToken<User>(\"Name_Trans\");\n\n            public static readonly StringToken<User, NameParams> NameWithParams =\n                new StringToken<User, NameParams>(\"Name_{LastName}\");\n        }\n    }\n\n    public class NameParams\n    {\n        public string LastName { get; set; }\n    }\n\n    public partial class Loc\n    {\n        public class Account\n        {\n            public static readonly StringToken AccountName = new StringToken<Account>(\"Account_Trans\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/StringTokenTester.cs",
    "content": "using System.Collections.Generic;\nusing FubuMVC.Core.Localization;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Localization\n{\n    [TestFixture]\n    public class StringTokenTester\n    {\n        [Test]\n        public void equals_is_namespace_aware()\n        {\n            var token1 = StringToken.FromKeyString(\"something\");\n            var token2 = StringToken.FromKeyString(\"something\");\n            var token3 = StringToken.FromKeyString(\"else\");\n\n            // FakeToken is namespaced\n            var token4 = new FakeToken(\"something\");\n            var token5 = new FakeToken(\"something\");\n            var token6 = new FakeToken(\"else\");\n\n            token1.ShouldBe(token2);\n            token2.ShouldBe(token1);\n            token3.ShouldNotBe(token1);\n            token1.ShouldNotBe(token3);\n\n            token4.ShouldBe(token5);\n            token5.ShouldBe(token4);\n            token6.ShouldNotBe(token4);\n            token4.ShouldNotBe(token6);\n\n            // Namespace matters here\n            token1.ShouldNotBe(token4);\n            token3.ShouldNotBe(token6);\n        }\n\n        [Test]\n        public void GetHashCode_depends_on_the_localization_key()\n        {\n            var token1 = StringToken.FromKeyString(\"something\");\n            var token2 = StringToken.FromKeyString(\"something\");\n            var token3 = StringToken.FromKeyString(\"else\");\n\n            // FakeToken is namespaced\n            var token4 = new FakeToken(\"something\");\n            var token5 = new FakeToken(\"something\");\n            var token6 = new FakeToken(\"else\");\n\n            token1.GetHashCode().ShouldBe(token2.GetHashCode());\n            token2.GetHashCode().ShouldBe(token1.GetHashCode());\n            token3.GetHashCode().ShouldNotBe(token1.GetHashCode());\n            token1.GetHashCode().ShouldNotBe(token3.GetHashCode());\n\n            token4.GetHashCode().ShouldBe(token5.GetHashCode());\n            token5.GetHashCode().ShouldBe(token4.GetHashCode());\n            token6.GetHashCode().ShouldNotBe(token4.GetHashCode());\n            token4.GetHashCode().ShouldNotBe(token6.GetHashCode());\n\n            // Namespace matters here\n            token1.GetHashCode().ShouldNotBe(token4.GetHashCode());\n            token3.GetHashCode().ShouldNotBe(token6.GetHashCode());\n        }\n\n        [Test]\n        public void from_type_just_uses_type_name()\n        {\n            var token = StringToken.FromType<StringTokenTester>();\n            token.Key.ShouldBe(GetType().Name);\n            token.DefaultValue.ShouldBe(GetType().Name);\n        }\n\n        [Test]\n        public void from_type_just_uses_type_name_2()\n        {\n            var token = StringToken.FromType(GetType());\n            token.Key.ShouldBe(GetType().Name);\n            token.DefaultValue.ShouldBe(GetType().Name);\n        }\n\n        [Test]\n        public void two_instances_with_the_same_key_should_equal_equal_each_other()\n        {\n            var x = buildCommonToken();\n            var y = buildCommonToken();\n\n            x.ShouldBe(y);\n        }\n\n        [Test]\n        public void two_instances_with_the_same_key_should_be_considered_the_same_for_hashing_purposes()\n        {\n            var x = buildCommonToken();\n            var y = buildCommonToken();\n\n            var dict = new Dictionary<StringToken, int> { { x, 0 } };\n\n            dict.ContainsKey(y).ShouldBeTrue();\n        }\n\n        [Test]\n        public void should_render_to_string_from_localization_when_condition_is_true()\n        {\n            var mocks = new MockRepository();\n            var provider = mocks.StrictMock<ILocalizationDataProvider>();\n            var token = buildCommonToken();\n            const string retVal = \"TheText\";\n\n            LocalizationManager.Stub(provider);\n\n            using (mocks.Record())\n            {\n                Expect.Call(provider.GetTextForKey(token)).Return(retVal);\n            }\n\n            using (mocks.Playback())\n            {\n                token\n                    .ToString(true)\n                    .ShouldBe(retVal);\n            }\n        }\n\n        [Test]\n        public void should_render_to_string_as_empty_when_condition_is_false()\n        {\n            buildCommonToken()\n                .ToString(false)\n                .ShouldBe(string.Empty);\n        }\n\n        [Test]\n        public void should_implicitly_convert_to_string()\n        {\n            var mocks = new MockRepository();\n            var provider = mocks.StrictMock<ILocalizationDataProvider>();\n            var token = buildCommonToken();\n            const string retVal = \"TheText\";\n\n            LocalizationManager.Stub(provider);\n\n            using (mocks.Record())\n            {\n                Expect.Call(provider.GetTextForKey(token)).Return(retVal);\n            }\n\n            using (mocks.Playback())\n            {\n                string result = token;\n                result.ShouldBe(retVal);\n            }\n        }\n\n        private StringToken buildCommonToken()\n        {\n            const string key = \"test\";\n            return StringToken.FromKeyString(key, \"default\");\n        }\n\n        [Test]\n        public void find_by_type()\n        {\n            StringToken.Find(typeof (TargetKey), \"One\").ShouldBeTheSameAs(TargetKey.One);\n            StringToken.Find(typeof (TargetKey2), \"One\").ShouldBeTheSameAs(TargetKey2.One);\n        }\n\n    }\n\n    public class TargetKey : StringToken\n    {\n        public static readonly TargetKey One = new TargetKey(\"One\");\n        public static readonly TargetKey Two = new TargetKey(\"Two\");\n\n        protected TargetKey(string defaultValue) : base(null, defaultValue, namespaceByType:true)\n        {\n        }\n    }\n\n    public class TargetKey2 : StringToken\n    {\n        protected TargetKey2(string defaultValue)\n            : base(null, defaultValue, namespaceByType: true)\n        {\n        }\n\n        public static readonly TargetKey2 One = new TargetKey2(\"One\");\n        public static readonly TargetKey2 Two = new TargetKey2(\"Two\");\n    }\n\n    public class FakeToken : StringToken\n    {\n        public FakeToken(string key, string defaultValue = null) : base(key, defaultValue, namespaceByType:true)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/StringTokenToLocalizationKeyTester.cs",
    "content": "using FubuMVC.Core.Localization;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Localization\n{\n    [TestFixture]\n    public class StringTokenToLocalizationKeyTester\n    {\n        [Test]\n        public void localization_key_includes_the_namespace_if_it_exists()\n        {\n            NoNamespaceStringToken.Key1.ToLocalizationKey().Key1.ShouldBe(\"Key1\");\n        }\n\n        [Test]\n        public void localization_key_with_namespace()\n        {\n            StringTokenWithNamespace.Key1.ToLocalizationKey().Key1.ShouldBe(\"NS1:Key1\");\n        }\n    }\n\n    public class NoNamespaceStringToken : StringToken\n    {\n        public static readonly StringToken Key1 = new NoNamespaceStringToken(\"Key1\", \"something\");\n\n        protected NoNamespaceStringToken(string key, string defaultValue) : base(key, defaultValue)\n        {\n\n        }\n    }\n\n    public class StringTokenWithNamespace : StringToken\n    {\n        public static readonly StringToken Key1 = new StringTokenWithNamespace(\"Key1\", \"something\");\n\n        protected StringTokenWithNamespace(string key, string defaultValue) : base(key, defaultValue, \"NS1\")\n        {\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/ThreadSafeLocaleCacheTester.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing FubuMVC.Core.Localization;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Localization\n{\n    [TestFixture]\n    public class ThreadSafeLocaleCacheTester\n    {\n        private ThreadSafeLocaleCache cache;\n\n        [SetUp]\n        public void SetUp()\n        {\n            var dictionary = new Dictionary<LocalizationKey, string>()\n            {\n                {new LocalizationKey(\"a\"), \"a1\"},\n                {new LocalizationKey(\"b\"), \"b1\"},\n                {new LocalizationKey(\"c\"), \"c1\"},\n            };\n\n            cache = new ThreadSafeLocaleCache(new CultureInfo(\"en-US\"), dictionary);\n        }\n\n        [Test]\n        public void retrieve_a_key_that_can_be_found()\n        {\n            cache.Retrieve(new LocalizationKey(\"a\"), () =>\n            {\n                throw new AccessViolationException(\"Shouldn't call this\");\n            })\n            .ShouldBe(\"a1\");\n        }\n\n        [Test]\n        public void append_and_retrieve()\n        {\n            cache.Append(new LocalizationKey(\"d\"), \"d1\");\n            cache.Retrieve(new LocalizationKey(\"d\"), () =>\n            {\n                throw new AccessViolationException(\"Shouldn't call this\");\n            })\n            .ShouldBe(\"d1\");\n        }\n\n        [Test]\n        public void call_the_missing_function_if_the_key_cannot_be_found()\n        {\n            cache.Retrieve(new LocalizationKey(\"d\"), () => \"d1\").ShouldBe(\"d1\");\n\n            // call again should hit the cache\n            cache.Retrieve(new LocalizationKey(\"d\"), () =>\n            {\n                throw new AccessViolationException(\"Shouldn't call this\");\n            })\n            .ShouldBe(\"d1\");\n        }\n\n\t\t[Test]\n\t\tpublic void initializing_via_localstrings_with_duplicate_keys_should_throw()\n\t\t{\n\t\t\tconst string duplicatedkey = \"duplicatedkey\";\n\t\t\tvar localStrings = new[]\n            {\n                new LocalString(duplicatedkey, \"a1\"),\n                new LocalString(duplicatedkey, \"a2\")\n            };\n\n\t\t    Exception<ArgumentException>.ShouldBeThrownBy(() =>\n\t\t    {\n                new ThreadSafeLocaleCache(new CultureInfo(\"en-US\"), localStrings);\n            }).Message.ShouldContain(duplicatedkey);\n\n\n\t\t}\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/XmlDirectoryLocalizationStorageTester.cs",
    "content": "using System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Linq;\nusing System.Xml;\nusing FubuCore;\nusing FubuCore.Configuration;\nusing FubuCore.Util;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Localization.Basic;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Localization\n{\n    [TestFixture]\n    public class XmlDirectoryLocalizationStorageTester\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            var system = new FileSystem();\n            system.DeleteDirectory(\"localization1\");\n            system.DeleteDirectory(\"localization2\");\n            system.DeleteDirectory(\"localization3\");\n\n            system.CreateDirectory(\"localization1\");\n            system.CreateDirectory(\"localization2\");\n            system.CreateDirectory(\"localization3\");\n        }\n\n        // values = \"value=display\"\n        private void write(string directory, CultureInfo culture, string values)\n        {\n            XmlDirectoryLocalizationStorage.Write(directory, culture, LocalString.ReadAllFrom(values));\n        }\n\n        [Test]\n        public void GetFileName()\n        {\n            XmlDirectoryLocalizationStorage.GetFileName(new CultureInfo(\"en-US\"))\n                .ShouldBe(\"en-US.locale.config\");\n\n            XmlDirectoryLocalizationStorage.GetFileName(new CultureInfo(\"en-GB\"))\n                .ShouldBe(\"en-GB.locale.config\");\n        }\n\n        [Test]\n        public void save_and_load_local_strings()\n        {\n            var strings = new List<LocalString>{\n                new LocalString(\"a\", \"a-display\"),\n                new LocalString(\"b\", \"b-display\"),\n                new LocalString(\"c\", \"c-display\"),\n                new LocalString(\"d\", \"d-display\"),\n            };\n\n            XmlDirectoryLocalizationStorage.Write(\"locale.xml\", strings);\n\n            XmlDirectoryLocalizationStorage.LoadFrom(\"locale.xml\").ShouldHaveTheSameElementsAs(strings);\n        }\n\n        [Test]\n        public void save_and_load_local_strings_should_sort_on_key_for_easier_merges()\n        {\n            var strings = new List<LocalString>{\n                new LocalString(\"c\", \"c-display\"),\n                new LocalString(\"d\", \"d-display\"),\n                new LocalString(\"a\", \"a-display\"),\n                new LocalString(\"b\", \"b-display\"),\n            };\n\n            XmlDirectoryLocalizationStorage.Write(\"locale.xml\", strings);\n\n            XmlDirectoryLocalizationStorage.LoadFrom(\"locale.xml\").ShouldHaveTheSameElementsAs(strings.OrderBy(x => x.value));\n        }\n\n        [Test]\n        public void load_from_a_single_source()\n        {\n            write(\"localization1\", new CultureInfo(\"en-US\"), @\"\n                a=us-a\n                b=us-b\n                c=us-c\n\");\n\n            write(\"localization1\", new CultureInfo(\"en-GB\"), @\"\n                a=gb-a\n                b=gb-b\n                c=gb-c\n\");\n\n            var source = new XmlDirectoryLocalizationStorage(new string[]{\"localization1\"});\n\n            source.Load(new CultureInfo(\"en-US\")).ShouldHaveTheSameElementsAs(\n                new LocalString(\"a\", \"us-a\"),\n                new LocalString(\"b\", \"us-b\"),\n                new LocalString(\"c\", \"us-c\")\n                );\n\n            source.Load(new CultureInfo(\"en-GB\")).ShouldHaveTheSameElementsAs(\n                new LocalString(\"a\", \"gb-a\"),\n                new LocalString(\"b\", \"gb-b\"),\n                new LocalString(\"c\", \"gb-c\")\n                );\n\n        }\n\n        [Test]\n        public void load_from_a_multiple_directory()\n        {\n            write(\"localization1\", new CultureInfo(\"en-US\"), @\"\n                a=us-a\n                b=us-b\n                c=us-c\n\");\n\n            write(\"localization2\", new CultureInfo(\"en-US\"), @\"\n                d=us-d\n                e=us-e\n\");\n\n            var source = new XmlDirectoryLocalizationStorage(new string[] { \"localization1\", \"localization2\", \"localization3\" });\n\n            source.Load(new CultureInfo(\"en-US\")).ShouldHaveTheSameElementsAs(\n                new LocalString(\"a\", \"us-a\"),\n                new LocalString(\"b\", \"us-b\"),\n                new LocalString(\"c\", \"us-c\"),\n                new LocalString(\"d\", \"us-d\"),\n                new LocalString(\"e\", \"us-e\")\n                );\n\n        }\n\n        [Test]\n        public void write_missing_with_no_file_there()\n        {\n            var source = new XmlDirectoryLocalizationStorage(new string[] { \"localization1\", \"localization2\", \"localization3\" });\n\n            source.WriteMissing(\"a\", \"us-a\", new CultureInfo(\"en-US\"));\n\n            var document = new XmlDocument()\n                .FromFile(\"localization1\".AppendPath(XmlDirectoryLocalizationStorage.MissingLocaleConfigFile));\n\n            var element = document.DocumentElement.FirstChild.As<XmlElement>();\n            element.GetAttribute(\"culture\").ShouldBe(\"en-US\");\n            element.GetAttribute(\"key\").ShouldBe(\"a\");\n            element.InnerText.ShouldBe(\"us-a\");\n\n\n        }\n\n        [Test]\n        public void write_with_successive_missings()\n        {\n            var source = new XmlDirectoryLocalizationStorage(new string[] { \"localization1\", \"localization2\", \"localization3\" });\n\n            source.WriteMissing(\"a\", \"us-a\", new CultureInfo(\"en-US\"));\n            source.WriteMissing(\"b\", \"us-b\", new CultureInfo(\"en-US\"));\n\n            var document = new XmlDocument()\n                .FromFile(\"localization1\".AppendPath(XmlDirectoryLocalizationStorage.MissingLocaleConfigFile));\n\n            var element = document.DocumentElement.LastChild.As<XmlElement>();\n            element.GetAttribute(\"culture\").ShouldBe(\"en-US\");\n            element.GetAttribute(\"key\").ShouldBe(\"b\");\n            element.InnerText.ShouldBe(\"us-b\");\n        }\n\n        [Test]\n        public void do_not_double_dip_in_missing_when_writing()\n        {\n            var source = new XmlDirectoryLocalizationStorage(new string[] { \"localization1\", \"localization2\", \"localization3\" });\n\n            source.WriteMissing(\"a\", \"us-a\", new CultureInfo(\"en-US\"));\n            source.WriteMissing(\"a\", \"us-a\", new CultureInfo(\"en-US\"));\n            source.WriteMissing(\"a\", \"us-a\", new CultureInfo(\"en-US\"));\n            source.WriteMissing(\"a\", \"us-a\", new CultureInfo(\"en-US\"));\n            source.WriteMissing(\"a\", \"us-a\", new CultureInfo(\"en-US\"));\n\n            var document = new XmlDocument()\n                .FromFile(\"localization1\".AppendPath(XmlDirectoryLocalizationStorage.MissingLocaleConfigFile));\n\n            document.DocumentElement.ChildNodes.Count.ShouldBe(1);\n        }\n\n        [Test]\n        public void CultureFor()\n        {\n            XmlDirectoryLocalizationStorage.CultureFor(\"en-US.locale.config\").ShouldBe(new CultureInfo(\"en-US\"));\n            XmlDirectoryLocalizationStorage.CultureFor(\"en-CA.locale.config\").ShouldBe(new CultureInfo(\"en-CA\"));\n            XmlDirectoryLocalizationStorage.CultureFor(\"en-GB.locale.config\").ShouldBe(new CultureInfo(\"en-GB\"));\n        }\n\n        [Test]\n        public void load_all()\n        {\n            write(\"localization1\", new CultureInfo(\"en-US\"), @\"\n                a=us-a\n                b=us-b\n                f=us-f\n            \");\n\n            write(\"localization2\", new CultureInfo(\"en-US\"), @\"\n                c=us-c\n                d=us-d\n            \");\n\n            write(\"localization3\", new CultureInfo(\"en-US\"), @\"\n                e=us-e\n            \");\n\n            write(\"localization1\", new CultureInfo(\"en-GB\"), @\"\n                a=gb-a\n                b=gb-b\n                f=gb-f\n            \");\n\n            write(\"localization2\", new CultureInfo(\"en-GB\"), @\"\n                c=gb-c\n                d=gb-d\n            \");\n\n            var allKeys = new Cache<string, IList<LocalString>>(key => new List<LocalString>());\n\n            var source = new XmlDirectoryLocalizationStorage(new string[] { \"localization1\", \"localization2\", \"localization3\" });\n\n            source.LoadAll(text => Debug.WriteLine(text), (c, strings) => allKeys[c.Name].AddRange(strings));\n\n            allKeys[\"en-US\"].ShouldHaveTheSameElementsAs(LocalString.ReadAllFrom(@\"\n                a=us-a\n                b=us-b\n                f=us-f  \n                c=us-c\n                d=us-d\n                e=us-e\n\"));\n\n            allKeys[\"en-GB\"].ShouldHaveTheSameElementsAs(LocalString.ReadAllFrom(@\"\n                a=gb-a\n                b=gb-b\n                f=gb-f\n                c=gb-c\n                d=gb-d\n\"));\n\n        }\n\n\n\n        [Test]\n        public void merge_missing()\n        {\n            var source = new XmlDirectoryLocalizationStorage(new string[] { \"localization1\", \"localization2\", \"localization3\" });\n\n            write(\"localization1\", new CultureInfo(\"en-US\"), @\"\n                a=us-a\n                b=us-b\n                f=us-f\n\");\n\n            source.WriteMissing(\"c\", \"us-c\", new CultureInfo(\"en-US\"));\n            source.WriteMissing(\"d\", \"us-d\", new CultureInfo(\"en-US\"));\n            source.WriteMissing(\"a\", \"gb-A\", new CultureInfo(\"en-GB\"));\n\n            source.MergeAllMissing();\n\n            source.Load(new CultureInfo(\"en-US\")).ShouldHaveTheSameElementsAs(\n                LocalString.ReadAllFrom(@\"\n                    a=us-a\n                    b=us-b\n                    c=us-c\n                    d=us-d\n                    f=us-f\n                    \")\n                );\n\n            source.Load(new CultureInfo(\"en-GB\")).ShouldHaveTheSameElementsAs(new LocalString(\"a\", \"gb-A\"));\n\n            new XmlDocument().FromFile(\n                \"localization1\".AppendPath(XmlDirectoryLocalizationStorage.MissingLocaleConfigFile))\n                .DocumentElement.ChildNodes.Count.ShouldBe(0);\n\n        \n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/fill_in_keys_on_string_token.cs",
    "content": "using FubuMVC.Core.Localization;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Localization\n{\n    [TestFixture]\n    public class fill_in_keys_on_string_token\n    {\n        [Test]\n        public void all_keys_are_derived_from_the_field_name()\n        {\n            MyKeys.Key1.ToLocalizationKey().Key1.ShouldBe(\"MyKeys:Key1\");\n\n            MyKeys.Key1.Key.ShouldBe(\"Key1\");\n            MyKeys.Key2.Key.ShouldBe(\"Key2\");\n            MyKeys.Key3.Key.ShouldBe(\"Key3\");\n\n            MyKeys.Key1.DefaultValue.ShouldBe(\"Default1\");\n        }\n\n        [Test]\n        public void all_keys_are_derived_from_the_field_name_2()\n        {\n            MyKeys2.Key1.ToLocalizationKey().Key1.ShouldBe(\"MyKeys2:Key1\");\n\n            MyKeys2.Key1.Key.ShouldBe(\"Key1\");\n            MyKeys2.Key2.Key.ShouldBe(\"Key2\");\n            MyKeys2.Key3.Key.ShouldBe(\"Key3\");\n\n            MyKeys2.Key1.DefaultValue.ShouldBe(\"Default1\");\n        }\n    }\n\n    public class MyKeys : StringToken\n    {\n        public static readonly MyKeys Key1 = new MyKeys(\"Default1\");\n        public static readonly MyKeys Key2 = new MyKeys(\"Default2\");\n        public static readonly MyKeys Key3 = new MyKeys(\"Default3\");\n\n        public MyKeys(string defaultValue) : base(null, defaultValue, \"MyKeys\")\n        {\n        }\n    }\n\n    public class MyKeys2 : StringToken\n    {\n        public static readonly MyKeys2 Key1 = new MyKeys2(\"Default1\");\n        public static readonly MyKeys2 Key2 = new MyKeys2(\"Default2\");\n        public static readonly MyKeys2 Key3 = new MyKeys2(\"Default3\");\n\n        public MyKeys2(string defaultValue)\n            : base(null, defaultValue, namespaceByType:true)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Localization/localization_is_disabled_by_default.cs",
    "content": "﻿using FubuMVC.Core.Localization;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Localization\n{\n    [TestFixture]\n    public class localization_is_disabled_by_default\n    {\n        [Test]\n        public void default_value_is_disabled()\n        {\n            new LocalizationSettings().Enabled.ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/MockedFubuRequestContext.cs",
    "content": "﻿using FubuCore;\r\nusing FubuCore.Logging;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.StructureMap;\r\nusing Rhino.Mocks;\r\nusing StructureMap;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    public class MockedFubuRequestContext : FubuRequestContext\r\n    {\r\n        public MockedFubuRequestContext(IContainer container)\r\n            : base(\r\n                new StructureMapServiceLocator(container), container.GetInstance<IHttpRequest>(), container.GetInstance<IFubuRequest>(),\r\n                container.GetInstance<IOutputWriter>(), new RecordingLogger())\r\n        {\r\n            \r\n        }\r\n\r\n        public MockedFubuRequestContext()\r\n            : base(new InMemoryServiceLocator(), OwinHttpRequest.ForTesting(), new InMemoryFubuRequest(), MockRepository.GenerateMock<IOutputWriter>(), new RecordingLogger())\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/AddAfterTester.cs",
    "content": "using FubuCore;\nusing FubuMVC.Core.Navigation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class AddAfterTester\n    {\n        [Test]\n        public void format_description()\n        {\n            var key = new NavigationKey(\"something\");\n            new AddAfter().FormatDescription(\"parent\", key)\n                .ShouldBe(\"Insert '{0}' after 'parent'\".ToFormat(key.ToLocalizationKey()));\n        }\n\n        [Test]\n        public void apply()\n        {\n            var dependency = MenuNode.Node(\"something\");\n            dependency.AddAfter(MenuNode.Node(\"third\"));\n            var node = MenuNode.Node(\"else\");\n\n            new AddAfter().Apply(dependency, node);\n\n            dependency.Next.ShouldBeTheSameAs(node);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/AddBeforeTester.cs",
    "content": "using FubuCore;\nusing FubuMVC.Core.Navigation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class AddBeforeTester\n    {\n        [Test]\n        public void format_description()\n        {\n            var key = new NavigationKey(\"something\");\n            new AddBefore().FormatDescription(\"parent\", key)\n                .ShouldBe(\"Insert '{0}' before 'parent'\".ToFormat(key.ToLocalizationKey()));\n        }\n\n        [Test]\n        public void apply()\n        {\n            var dependency = MenuNode.Node(\"something\");\n            dependency.AddBefore(MenuNode.Node(\"third\"));\n            var node = MenuNode.Node(\"else\");\n\n            new AddBefore().Apply(dependency, node);\n\n            dependency.Previous.ShouldBeTheSameAs(node);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/AddToMenuTester.cs",
    "content": "using FubuCore;\nusing FubuMVC.Core.Navigation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class AddToMenuTester\n    {\n        [Test]\n        public void format_description()\n        {\n            var key = new NavigationKey(\"something\");\n            new AddChild().FormatDescription(\"parent\", key)\n                .ShouldBe(\"Add '{0}' to menu 'parent'\".ToFormat(key.ToLocalizationKey()));\n        }\n\n        [Test]\n        public void apply()\n        {\n            var dependency = new MenuChain(\"something\");\n            var node = MenuNode.Node(\"else\");\n\n            new AddChild().Apply(dependency, node);\n\n            dependency.Top.ShouldBeTheSameAs(node);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/AdvancedNavigationRegistryInsertingTester.cs",
    "content": "using System;\nusing System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Navigation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class AdvancedNavigationRegistryInsertingTester\n    {\n        private Lazy<NavigationGraph> _graph = null;\n        private NavigationRegistry registry;\n\n        [SetUp]\n        public void SetUp()\n        {\n            registry = new NavigationRegistry();\n            _graph = new Lazy<NavigationGraph>(() => {\n                NavigationGraph graph = null;\n\n                var r = new FubuRegistry();\n                r.Actions.IncludeType<Controller1>();\n                r.Policies.Global.Add(registry);\n\n                r.Import<NavigationRegistryExtension>();\n\n                using (var runtime = r.ToRuntime())\n                {\n                    runtime.Get<IMenuResolver>().MenuFor(new NavigationKey(\"Root\"));\n\n                    graph = runtime.Get<NavigationGraph>();\n                }\n\n                return graph;\n            });\n        }\n\n        private NavigationGraph theGraph\n        {\n            get\n            {\n                return _graph.Value;\n            }\n        }\n\n        [Test]\n        public void insert_after_by_string()\n        {\n            registry.ForMenu(\"Root\");\n            registry.Add += MenuNode.Node(\"One\");\n            registry.InsertAfter[\"One\"] = MenuNode.Node(\"Two\");\n\n            theGraph.MenuFor(\"Root\").Select(x => x.Key.Key)\n                .ShouldHaveTheSameElementsAs(\"One\", \"Two\");\n        }\n\n        [Test]\n        public void insert_after_by_token()\n        {\n            registry.ForMenu(\"Root\");\n            registry.Add += MenuNode.Node(FakeKeys.Key1);\n            registry.InsertAfter[FakeKeys.Key1] = MenuNode.Node(FakeKeys.Key2);\n\n            theGraph.MenuFor(\"Root\").Select(x => x.Key.Key)\n                .ShouldHaveTheSameElementsAs(\"Key1\", \"Key2\");\n        }\n\n        [Test]\n        public void insert_after_by_mixed()\n        {\n            registry.ForMenu(\"Root\");\n            registry.Add += MenuNode.Node(FakeKeys.Key1);\n            registry.InsertAfter[FakeKeys.Key1.ToLocalizationKey().ToString()] = MenuNode.Node(FakeKeys.Key2);\n\n            theGraph.MenuFor(\"Root\").Select(x => x.Key.Key)\n                .ShouldHaveTheSameElementsAs(\"Key1\", \"Key2\");\n        }\n\n        [Test]\n        public void insert_before_by_string()\n        {\n            registry.InsertBefore[\"Two\"] = MenuNode.Node(\"One\");\n\n            registry.ForMenu(\"Root\");\n            registry.Add += MenuNode.Node(\"Two\");\n\n            theGraph.MenuFor(\"Root\").Select(x => x.Key.Key)\n                .ShouldHaveTheSameElementsAs(\"One\", \"Two\");\n        }\n\n        [Test]\n        public void insert_before_by_token()\n        {\n            registry.InsertBefore[\"Two\"] = MenuNode.Node(FakeKeys.Key9);\n\n            registry.ForMenu(\"Root\");\n            registry.Add += MenuNode.Node(\"Two\");\n\n            theGraph.MenuFor(\"Root\").Select(x => x.Key.Key)\n                .ShouldHaveTheSameElementsAs(FakeKeys.Key9.Key, \"Two\");\n        }\n        \n        public class Controller1\n        {\n            public void One(Input1 input) { }\n\n            public void Two(Input1 input) { }\n\n            public void Three(Input1 input) { }\n\n            public void Four(Input1 input) { }\n\n\n            public class Input1 { }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/AuthorizedContextualMenuTester.cs",
    "content": "using FubuMVC.Core.Navigation;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class AuthorizedContextualMenuTester : InteractionContext<AuthorizedContextualMenu<ContextualObject>>\n    {\n        private IContextualAction<ContextualObject> definition;\n    \tprivate const string theCategory = \"the category\";\n    \tprivate const string theTextOfTheMenuItem = \"menu text\";\n\t\tprivate const string theDescriptionOfTheMenuItem = \"menu item description\";\n    \tprivate const string theUrl = \"the url\";\n    \tprivate const string theKey = \"the key\";\n    \tprivate ContextualObject theTarget;\n\n        protected override void beforeEach()\n        {\n            _token = null;\n            theTarget = new ContextualObject();\n\n            definition = MockFor<IContextualAction<ContextualObject>>();\n\n            definition.Stub(x => x.Category).Return(theCategory);\n            definition.Stub(x => x.Text()).Return(theTextOfTheMenuItem);\n\t\t\tdefinition.Stub(x => x.Description()).Return(theDescriptionOfTheMenuItem);\n\t\t\tdefinition.Stub(x => x.Key).Return(theKey);\n        }\n\n        private bool WouldBeAuthorized\n        {\n            set\n            {\n                definition.Expect(x => x.FindEndpoint(MockFor<IEndpointService>(), theTarget))\n                    .Return(new Endpoint(){\n                        IsAuthorized = value,\n                        Url = theUrl\n                    });\n            }\n        }\n\n        private MenuItemState AvailabilityAsDeterminedByTheStrategyIs\n        {\n            set\n            {\n                definition.Stub(x => x.IsAvailable(theTarget)).Return(value);\n            }\n        }\n\n        private MenuItemState UnAuthorizedStateIs\n        {\n            set\n            {\n                definition.Stub(x => x.UnauthorizedState).Return(value);\n            }\n        }\n\n        private MenuItemToken _token;\n        private MenuItemToken theResultingMenuItemToken\n        {\n            get\n            {\n                if (_token == null)\n                {\n                    _token = ClassUnderTest.BuildMenuItem(theTarget, definition);\n                }\n\n                return _token;\n            }\n        }\n\n        [Test]\n        public void should_get_the_key_from_the_inner_definition()\n        {\n            WouldBeAuthorized = true;\n            AvailabilityAsDeterminedByTheStrategyIs = MenuItemState.Available;\n\n            theResultingMenuItemToken.Key.ShouldBe(theKey);\n        }\n\n        [Test]\n        public void should_get_the_text_from_the_inner_definition()\n        {\n            WouldBeAuthorized = true;\n            AvailabilityAsDeterminedByTheStrategyIs = MenuItemState.Available;\n\n            theResultingMenuItemToken.Text.ShouldBe(theTextOfTheMenuItem);\n        }\n\n\t\t[Test]\n\t\tpublic void should_get_the_description_from_the_inner_definition()\n\t\t{\n\t\t\tWouldBeAuthorized = true;\n\t\t\tAvailabilityAsDeterminedByTheStrategyIs = MenuItemState.Available;\n\n\t\t\ttheResultingMenuItemToken.Description.ShouldBe(theDescriptionOfTheMenuItem);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void should_get_the_category_from_the_inner_definition()\n\t\t{\n\t\t\tWouldBeAuthorized = true;\n\t\t\tAvailabilityAsDeterminedByTheStrategyIs = MenuItemState.Available;\n\n\t\t\ttheResultingMenuItemToken.Category.ShouldBe(theCategory);\n\t\t}\n\n        [Test]\n        public void should_get_the_url_from_the_inner_definition()\n        {\n            WouldBeAuthorized = true;\n            AvailabilityAsDeterminedByTheStrategyIs = MenuItemState.Available;\n\n            theResultingMenuItemToken.Url.ShouldBe(theUrl);\n        }\n\n        [Test]\n        public void build_menu_state_when_the_authorization_succeeds_and_is_available()\n        {\n            WouldBeAuthorized = true;\n            AvailabilityAsDeterminedByTheStrategyIs = MenuItemState.Available;\n\n            theResultingMenuItemToken.MenuItemState.ShouldBe(MenuItemState.Available);\n        }\n\n        [Test]\n        public void build_menu_state_when_the_authorization_fails_and_the_inner_definition_says_unauthorized_endpoints_should_be_hidden()\n        {\n            WouldBeAuthorized = false;\n            AvailabilityAsDeterminedByTheStrategyIs = MenuItemState.Available;\n            UnAuthorizedStateIs = MenuItemState.Hidden;\n\n            theResultingMenuItemToken.MenuItemState.ShouldBe(MenuItemState.Hidden);\n        }\n\n        [Test]\n        public void build_menu_state_when_the_authorization_fails_and_the_inner_definition_says_unauthorized_endpoints_should_be_disabled()\n        {\n            WouldBeAuthorized = false;\n            AvailabilityAsDeterminedByTheStrategyIs = MenuItemState.Available;\n            UnAuthorizedStateIs = MenuItemState.Disabled;\n\n            theResultingMenuItemToken.MenuItemState.ShouldBe(MenuItemState.Disabled);\n        }\n\n        [Test]\n        public void build_menu_state_when_is_authorized_by_availibility_determinied_by_the_definition_is_disabled()\n        {\n            WouldBeAuthorized = true;\n            AvailabilityAsDeterminedByTheStrategyIs = MenuItemState.Disabled;\n\n            theResultingMenuItemToken.MenuItemState.ShouldBe(MenuItemState.Disabled);\n        }\n\n\n        [Test]\n        public void build_menu_state_when_is_authorized_by_availibility_determinied_by_the_definition_is_hidden()\n        {\n            WouldBeAuthorized = true;\n            AvailabilityAsDeterminedByTheStrategyIs = MenuItemState.Hidden;\n\n            theResultingMenuItemToken.MenuItemState.ShouldBe(MenuItemState.Hidden);\n        }\n\n    }\n\n    public class ContextualObject\n    {\n        public string Name { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/ByNameTester.cs",
    "content": "using FubuMVC.Core.Navigation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class ByNameTester\n    {\n        [Test]\n        public void matches_by_key_alone()\n        {\n            var key = new NavigationKey(\"something\");\n\n            var matcher = new ByName(\"something\");\n            matcher.Matches(key).ShouldBeTrue();\n        }\n\n        [Test]\n        public void matches_by_localizer_key()\n        {\n            var key = new NavigationKey(\"something\");\n\n            var matcher = new ByName(\"NavigationKey:something\");\n\n            matcher.Matches(key).ShouldBeTrue();\n        }\n\n        [Test]\n        public void negative_test_by_localization_key()\n        {\n            var key = new NavigationKey(\"something\");\n\n            var matcher = new ByName(\"OtherKey:something\");\n\n            matcher.Matches(key).ShouldBeFalse();\n        }\n\n        [Test]\n        public void negative_test_by_key_alone()\n        {\n            var key = new NavigationKey(\"something\");\n\n            var matcher = new ByName(\"else\");\n            matcher.Matches(key).ShouldBeFalse();\n        }\n\n        [Test]\n        public void default_key()\n        {\n            var matcher = new ByName(\"something\");\n            matcher.DefaultKey().ShouldBeOfType<NavigationKey>()\n                .Key.ShouldBe(\"something\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/Determining_MenuItemState_from_a_MenuNode.cs",
    "content": "using FubuMVC.Core.Http;\nusing FubuMVC.Core.Navigation;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Runtime.Conditionals;\nusing FubuMVC.Core.Security.Authorization;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class Determining_MenuItemState_from_a_MenuNode : InteractionContext<MenuStateService>\n    {\n        private MenuNode theNode;\n        private BehaviorChain theChain;\n\n        protected override void beforeEach()\n        {\n            theChain = new BehaviorChain();\n\n            theNode = new MenuNode(FakeKeys.Key1, r => theChain);\n            theNode.Resolve(null);\n            theNode.BehaviorChain.ShouldBeTheSameAs(theChain);\n            theNode.UrlInput = new object();\n        }\n\n        private void theRightsAre(AuthorizationRight right)\n        {\n            MockFor<IChainAuthorizor>().Stub(x => x.Authorize(theNode.BehaviorChain, theNode.UrlInput))\n                .Return(right);\n        }\n\n        [Test]\n        public void when_the_chain_is_not_authorized_with_the_default_unauthorized_state()\n        {\n            theRightsAre(AuthorizationRight.None);\n\n            ClassUnderTest.DetermineStateFor(theNode)\n                .ShouldBe(MenuItemState.Hidden);\n        }\n\n        [Test]\n        public void when_the_chain_is_not_authorized_with_the_default_unauthorized_state_2()\n        {\n            theRightsAre(AuthorizationRight.Deny);\n\n            ClassUnderTest.DetermineStateFor(theNode)\n                .ShouldBe(MenuItemState.Hidden);\n        }\n\n\n        [Test]\n        public void when_the_chain_is_not_authorized_and_the_unauthorized_state_is_disabled()\n        {\n            theRightsAre(AuthorizationRight.None);\n            theNode.UnauthorizedState = MenuItemState.Disabled;\n\n            ClassUnderTest.DetermineStateFor(theNode)\n                .ShouldBe(MenuItemState.Disabled);\n        }\n\n        [Test]\n        public void when_the_chain_is_not_authorized_and_the_unauthorized_state_is_disabled_2()\n        {\n            theRightsAre(AuthorizationRight.Deny);\n            theNode.UnauthorizedState = MenuItemState.Disabled;\n\n            ClassUnderTest.DetermineStateFor(theNode)\n                .ShouldBe(MenuItemState.Disabled);\n        }\n\n        [Test]\n        public void assuming_that_authorization_is_fine_state_should_be_active_if_this_is_the_currently_displayed_chain()\n        {\n            theRightsAre(AuthorizationRight.Allow);\n            MockFor<ICurrentChain>().Stub(x => x.OriginatingChain).Return(theNode.BehaviorChain);\n\n            ClassUnderTest.DetermineStateFor(theNode)\n                .ShouldBe(MenuItemState.Active);\n        }\n\n        [Test]\n        public void authenticated_but_not_the_current_chain_and_enabled_condition_returns_true()\n        {\n            theRightsAre(AuthorizationRight.Allow);\n            theNode.IsEnabledBy(typeof (FakeConditional));\n\n            MockFor<IConditionalService>().Stub(x => x.IsTrue(typeof (FakeConditional)))\n                .Return(true);\n\n            ClassUnderTest.DetermineStateFor(theNode)\n                .ShouldBe(MenuItemState.Available);\n        }\n\n        [Test]\n        public void authenticated_but_not_the_current_chain_and_hide_if_condition_returns_true()\n        {\n            theRightsAre(AuthorizationRight.Allow);\n            theNode.HideIf<FakeConditional>();\n\n            MockFor<IConditionalService>().Stub(x => x.IsTrue(typeof(FakeConditional)))\n                .Return(true);\n\n            ClassUnderTest.DetermineStateFor(theNode)\n                .ShouldBe(MenuItemState.Hidden);\n        }\n\n        [Test]\n        public void authenticated_but_not_the_current_chain_and_enabled_condition_returns_false()\n        {\n            theRightsAre(AuthorizationRight.Allow);\n            theNode.IsEnabledBy(typeof(FakeConditional));\n\n            MockFor<IConditionalService>().Stub(x => x.IsTrue(typeof(FakeConditional)))\n                .Return(false);\n\n            ClassUnderTest.DetermineStateFor(theNode)\n                .ShouldBe(MenuItemState.Disabled);\n        }\n\n        [Test]\n        public void when_the_menu_node_is_only_a_node_with_no_behavior_chain()\n        {\n            theNode = MenuNode.Node(\"Something\");\n\n            ClassUnderTest.DetermineStateFor(theNode)\n                .ShouldBe(MenuItemState.Available);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/LiteralTester.cs",
    "content": "using FubuMVC.Core.Navigation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class LiteralTester\n    {\n        [Test]\n        public void matches_positive()\n        {\n            var key = new NavigationKey(\"something\");\n\n            new Literal(key).Matches(key).ShouldBeTrue();\n        }\n\n        [Test]\n        public void matches_negative()\n        {\n            var key = new NavigationKey(\"something\");\n            new Literal(new NavigationKey(\"else\")).Matches(key).ShouldBeFalse();\n        }\n\n        [Test]\n        public void default_key()\n        {\n            var key = new NavigationKey(\"something\");\n            new Literal(key).DefaultKey().ShouldBeTheSameAs(key);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/MenuChainTester.cs",
    "content": "using System;\nusing FubuMVC.Core.Navigation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class MenuChainTester\n    {\n        [Test]\n        public void find_by_key_in_deep_structure()\n        {\n            var node1 = MenuNode.ForCreatorOf(FakeKeys.Key1, typeof(Address));\n            var node2 = MenuNode.ForCreatorOf(FakeKeys.Key2, typeof(Address));\n            var node3 = MenuNode.ForCreatorOf(FakeKeys.Key3, typeof(Address));\n            var node4 = MenuNode.ForCreatorOf(FakeKeys.Key4, typeof(Address));\n            var node5 = MenuNode.ForCreatorOf(FakeKeys.Key5, typeof(Address));\n            var node6 = MenuNode.ForCreatorOf(FakeKeys.Key6, typeof(Address));\n            var node7 = MenuNode.ForCreatorOf(FakeKeys.Key7, typeof(Address));\n            var node8 = MenuNode.ForCreatorOf(FakeKeys.Key8, typeof(Address));\n\n            node1.Children.AddToEnd(node2);\n            node1.Children.AddToEnd(node3);\n\n            node2.Children.AddToEnd(node4);\n            node4.Children.AddToEnd(node5);\n\n            node3.Children.AddToEnd(node6);\n            node3.Children.AddToEnd(node7);\n            node3.Children.AddToEnd(node8);\n\n            var node9 = new MenuNode(FakeKeys.Key9);\n            var node10 = new MenuNode(FakeKeys.Key10);\n\n            var chain = new MenuChain(FakeKeys.Chain1);\n            chain.AddToEnd(node1);\n\n            chain.FindByKey(FakeKeys.Key1).ShouldBeTheSameAs(node1);\n            chain.FindByKey(FakeKeys.Key2).ShouldBeTheSameAs(node2);\n            chain.FindByKey(FakeKeys.Key3).ShouldBeTheSameAs(node3);\n            chain.FindByKey(FakeKeys.Key4).ShouldBeTheSameAs(node4);\n            chain.FindByKey(FakeKeys.Key5).ShouldBeTheSameAs(node5);\n            chain.FindByKey(FakeKeys.Key6).ShouldBeTheSameAs(node6);\n            chain.FindByKey(FakeKeys.Key7).ShouldBeTheSameAs(node7);\n\n            chain.FindByKey(FakeKeys.Key9).ShouldBeNull();\n\n            chain.AddToEnd(node9);\n            chain.AddToEnd(node10);\n\n            chain.FindByKey(FakeKeys.Key9).ShouldBeTheSameAs(node9);\n            chain.FindByKey(FakeKeys.Key10).ShouldBeTheSameAs(node10);\n        }\n\n        [Test]\n        public void all_nodes_of_deep_structure()\n        {\n            var node1 = MenuNode.ForCreatorOf(FakeKeys.Key1, typeof(Address));\n            var node2 = MenuNode.ForCreatorOf(FakeKeys.Key2, typeof(Address));\n            var node3 = MenuNode.ForCreatorOf(FakeKeys.Key3, typeof(Address));\n            var node4 = MenuNode.ForCreatorOf(FakeKeys.Key4, typeof(Address));\n            var node5 = MenuNode.ForCreatorOf(FakeKeys.Key5, typeof(Address));\n            var node6 = MenuNode.ForCreatorOf(FakeKeys.Key6, typeof(Address));\n            var node7 = MenuNode.ForCreatorOf(FakeKeys.Key7, typeof(Address));\n            var node8 = MenuNode.ForCreatorOf(FakeKeys.Key8, typeof(Address));\n\n            node1.Children.AddToEnd(node2);\n            node1.Children.AddToEnd(node3);\n\n            node2.Children.AddToEnd(node4);\n            node4.Children.AddToEnd(node5);\n\n            node3.Children.AddToEnd(node6);\n            node3.Children.AddToEnd(node7);\n            node3.Children.AddToEnd(node8);\n\n            var node9 = new MenuNode(FakeKeys.Key9);\n            var node10 = new MenuNode(FakeKeys.Key10);\n\n            var chain = new MenuChain(FakeKeys.Chain1);\n            chain.AddToEnd(node1);\n\n            chain.AddToEnd(node9);\n            chain.AddToEnd(node10);\n\n            chain.AllNodes().ShouldHaveTheSameElementsAs(node1, node2, node4, node5, node3, node6, node7, node8, node9, node10);\n        }\n    }\n\n    public class Address\n    {\n        public Address()\n        {\n            StateOrProvince = string.Empty;\n            Country = string.Empty;\n            AddressType = string.Empty;\n        }\n\n        public int Order { get; set; }\n\n        public bool IsActive { get; set; }\n\n        [FakeRequired, FakeMaximumStringLength(100)]\n        public string AddressType { get; set; }\n\n        [FakeRequired, FakeMaximumStringLength(250)]\n        public string Address1 { get; set; }\n\n        public string Address2 { get; set; }\n\n        [FakeRequired, FakeMaximumStringLength(250)]\n        public string City { get; set; }\n\n        [FakeRequired]\n        public string StateOrProvince { get; set; }\n\n        [FakeRequired, FakeMaximumStringLength(100)]\n        public string Country { get; set; }\n\n        [FakeRequired, FakeMaximumStringLength(50)]\n        public string PostalCode { get; set; }\n\n        //[Required]\n        //public TimeZoneInfo TimeZone { get; set; }\n\n\n        public DateTime DateEntered { get; set; }\n\n        public ColorEnum Color { get; set; }\n        public Guid Guid { get; set; }\n    }\n\n    public class FakeRequiredAttribute : Attribute\n    {\n    }\n\n    public class FakeMaximumStringLength : Attribute\n    {\n        private readonly int _maxLength;\n\n        public FakeMaximumStringLength(int maxLength)\n        {\n            _maxLength = maxLength;\n        }\n\n        public int MaxLength { get { return _maxLength; } }\n    }\n\n    public enum ColorEnum\n    {\n        red, blue, green\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/MenuItemAttributeTester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core.Navigation;\nusing FubuMVC.Core.Registration.Nodes;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class MenuItemAttributeTester\n    {\n        private readonly BehaviorChain theChain = new BehaviorChain();\n\n        [Test]\n        public void title_as_just_text()\n        {\n            var key = new MenuItemAttribute(\"some title\").Title;\n            key.DefaultValue.ShouldBe(\"some title\");\n            key.Key.ShouldBe(\"some title\");\n            key.ShouldBeOfType<NavigationKey>();\n            \n        }\n\n        [Test]\n        public void title_as_key_and_default_text()\n        {\n            var key = new MenuItemAttribute(\"SomeTitle\", \"some title\").Title;\n            key.DefaultValue.ShouldBe(\"some title\");\n            key.Key.ShouldBe(\"SomeTitle\");\n            key.ShouldBeOfType<NavigationKey>();\n        }\n\n        [Test]\n        public void build_registration_for_add_before()\n        {\n            var registration = new MenuItemAttribute(\"something\"){\n                AddBefore = \"else\"\n            }.ToMenuRegistrations(theChain).Single().ShouldBeOfType<MenuRegistration>();\n            \n            \n            registration.Strategy.ShouldBeOfType<AddBefore>();\n        \n        \n            registration.Node.Resolve(null);\n            registration.Node.BehaviorChain.ShouldBeTheSameAs(theChain);\n\n            registration.Node.Key.ShouldBe(new NavigationKey(\"something\"));\n            registration.Matcher.ShouldBe(new ByName(\"else\"));\n        }\n\n        [Test]\n        public void build_registration_for_add_after()\n        {\n            var registration = new MenuItemAttribute(\"something\")\n            {\n                AddAfter = \"else\"\n            }.ToMenuRegistrations(theChain).Single().ShouldBeOfType<MenuRegistration>();\n\n            registration.Strategy.ShouldBeOfType<AddAfter>();\n            registration.Node.Resolve(null);\n            registration.Node.BehaviorChain.ShouldBeTheSameAs(theChain);\n\n            registration.Node.Key.ShouldBe(new NavigationKey(\"something\"));\n            registration.Matcher.ShouldBe(new ByName(\"else\"));\n        }\n\n        [Test]\n        public void build_registration_for_add_to()\n        {\n            var registration = new MenuItemAttribute(\"something\")\n            {\n                AddChildTo = \"else\"\n            }.ToMenuRegistrations(theChain).Single().ShouldBeOfType<MenuRegistration>();\n\n            registration.Strategy.ShouldBeOfType<AddChild>();\n            registration.Node.Resolve(null);\n            registration.Node.BehaviorChain.ShouldBeTheSameAs(theChain);\n\n            registration.Node.Key.ShouldBe(new NavigationKey(\"something\"));\n            registration.Matcher.ShouldBe(new ByName(\"else\"));\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/MenuItemAttributes_integrated_Tester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Navigation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class MenuItemAttributes_integrated_Tester\n    {\n\n        [Test]\n        public void puts_the_navigation_graph_in_the_right_order()\n        {\n            var registry = new FubuRegistry();\n            registry.Actions.IncludeType<Controller1>();\n\n            registry.Import<NavigationRegistryExtension>();\n\n            using (var runtime = registry.ToRuntime())\n            {\n                var resolver = runtime.Get<IMenuResolver>();\n\n                resolver.MenuFor(new NavigationKey(\"Root\")).AllNodes().Select(x => x.Key.Key)\n                    .ShouldHaveTheSameElementsAs(\"Three\", \"Two\", \"One\", \"Four\");\n\n                runtime.Get<NavigationGraph>()\n                    .FindNode(new NavigationKey(\"Two\")).ShouldBeOfType<MenuNode>().Previous.Key.Key.ShouldBe(\"Three\");\n\n            }\n\n\n        }\n\n        public class Controller1\n        {\n            [MenuItem(\"One\", AddChildTo = \"Two\")]\n            public void One(Input1 input){}\n\n            [MenuItem(\"Two\", AddChildTo = \"Root\")]\n            public void Two(Input1 input){}\n\n            [MenuItem(\"Three\", AddBefore = \"Two\")]\n            public void Three(Input1 input){}\n\n            [MenuItem(\"Four\", AddChildTo = \"Root\")]\n            public void Four(Input1 input) { }\n\n\n            public class Input1 { }\n        }\n    }\n\n    \n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/MenuItemStateTester.cs",
    "content": "using FubuMVC.Core.Navigation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class MenuItemStateTester\n    {\n        [Test]\n        public void least_method_empty_is_available()\n        {\n            MenuItemState.Least().ShouldBe(MenuItemState.Available);\n        }\n\n        [Test]\n        public void least_method_with_data()\n        {\n            MenuItemState.Least(MenuItemState.Available).ShouldBe(MenuItemState.Available);\n            MenuItemState.Least(MenuItemState.Hidden).ShouldBe(MenuItemState.Hidden);\n            MenuItemState.Least(MenuItemState.Disabled).ShouldBe(MenuItemState.Disabled);\n\n            MenuItemState.Least(MenuItemState.Hidden, MenuItemState.Available).ShouldBe(MenuItemState.Hidden);\n            MenuItemState.Least(MenuItemState.Hidden, MenuItemState.Available, MenuItemState.Disabled).ShouldBe(MenuItemState.Hidden);\n            MenuItemState.Least(MenuItemState.Disabled, MenuItemState.Available).ShouldBe(MenuItemState.Disabled);\n\n            MenuItemState.Least(MenuItemState.Hidden, MenuItemState.Disabled).ShouldBe(MenuItemState.Hidden);\n        }\n\n        [Test]\n        public void hidden_is_not_visible_and_disabled()\n        {\n            MenuItemState.Hidden.IsEnabled.ShouldBeFalse();\n            MenuItemState.Hidden.IsShown.ShouldBeFalse();\n        }\n\n        [Test]\n        public void disabled_is_visible_but_disabled()\n        {\n            MenuItemState.Disabled.IsEnabled.ShouldBeFalse();\n            MenuItemState.Disabled.IsShown.ShouldBeTrue();\n        }\n\n        [Test]\n        public void available_is_enabled_and_shown()\n        {\n            MenuItemState.Available.IsEnabled.ShouldBeTrue();\n            MenuItemState.Available.IsShown.ShouldBeTrue();\n        }\n\n        [Test]\n        public void active_is_enabled_and_shown()\n        {\n            MenuItemState.Active.IsEnabled.ShouldBeTrue();\n            MenuItemState.Active.IsShown.ShouldBeTrue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/MenuItemTokenTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Navigation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n\t[TestFixture]\n\tpublic class MenuItemTokenTester\n\t{\n\t\t[Test]\n\t\tpublic void get_data()\n\t\t{\n\t\t\tvar token = new MenuItemToken();\n\t\t\tvar value = Guid.NewGuid();\n\n\t\t\ttoken.Data.Add(\"Test\", value);\n\n\t\t\ttoken.Get<Guid>(\"Test\").ShouldBe(value);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void has_data()\n\t\t{\n\t\t\tvar token = new MenuItemToken();\n\t\t\tvar value = Guid.NewGuid();\n\n\t\t\ttoken.Data.Add(\"Test\", value);\n\n\t\t\ttoken.Has(\"Test\").ShouldBeTrue();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void value_continuation_for_existing_value()\n\t\t{\n\t\t\tvar token = new MenuItemToken();\n\t\t\tvar expected = Guid.NewGuid();\n\n\t\t\ttoken.Set(\"key\", expected);\n\n\t\t\ttoken.Value<Guid>(\"key\", x => x.ShouldBe(expected));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void value_continuation_for_non_existing_value()\n\t\t{\n\t\t\tvar token = new MenuItemToken();\n\t\t\tvar invoked = false;\n\n\t\t\ttoken.Value<Guid>(\"key\", x => invoked = true);\n\n\t\t\tinvoked.ShouldBeFalse();\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/MenuNodeTester.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Navigation;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.Registration.Routes;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Runtime.Conditionals;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class MenuNodeTester\n    {\n\t\t[Test]\n\t\tpublic void set_data()\n\t\t{\n\t\t\tvar node = new MenuNode(FakeKeys.Key9);\n\t\t\tvar value = Guid.NewGuid();\n\n\t\t\tnode[\"Test\"] = value;\n\t\t\tnode[\"Test\"].ShouldBe(value);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void get_data()\n\t\t{\n\t\t\tvar node = new MenuNode(FakeKeys.Key9);\n\t\t\tvar value = Guid.NewGuid();\n\n\t\t\tnode[\"Test\"] = value;\n\n\t\t\tnode.Get<Guid>(\"Test\").ShouldBe(value);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void has_data()\n\t\t{\n\t\t\tvar node = new MenuNode(FakeKeys.Key9);\n\t\t\tvar value = Guid.NewGuid();\n\n\t\t\tnode[\"Test\"] = value;\n\t\t\tnode.Has(\"Test\").ShouldBeTrue();\n\t\t}\n\n        [Test]\n        public void set_the_icon()\n        {\n            var node = new MenuNode(FakeKeys.Key9);\n            node.Icon(\"something.png\").ShouldBeTheSameAs(node);\n\n            node.Icon().ShouldBe(\"something.png\");\n        }\n\n        [Test]\n        public void un_authorized_state_is_hidden_by_default()\n        {\n            MenuNode.ForCreatorOf<Address>(StringToken.FromKeyString(\"something\"))\n                .UnauthorizedState.ShouldBe(MenuItemState.Hidden);\n        }\n\n        [Test]\n        public void positive_case_of_setting_is_enabled_type()\n        {\n            var node = MenuNode.ForCreatorOf<Address>(StringToken.FromKeyString(\"something\"));\n            node.IsEnabledBy(typeof (FakeConditional));\n\n            node.IsEnabledBy().ShouldBe(typeof (FakeConditional));\n        }\n\n        [Test]\n        public void negative_case_of_setting_is_enabled_type()\n        {\n            var node = MenuNode.ForCreatorOf<Address>(StringToken.FromKeyString(\"something\"));\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(() =>\n            {\n                node.IsEnabledBy(GetType());\n            });\n        }\n\n        [Test]\n        public void positive_case_of_setting_hide_if_type()\n        {\n            var node = MenuNode.ForCreatorOf<Address>(StringToken.FromKeyString(\"something\"));\n            node.HideIf(typeof(FakeConditional));\n\n            node.HideIfConditional.ShouldBe(typeof(FakeConditional));\n        }\n\n        [Test]\n        public void negative_case_of_setting_hide_if_type()\n        {\n            var node = MenuNode.ForCreatorOf<Address>(StringToken.FromKeyString(\"something\"));\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(() =>\n            {\n                node.HideIf(GetType());\n            });\n        }\n\n        [Test]\n        public void hide_if_is_never_by_default()\n        {\n            var node = MenuNode.ForCreatorOf<Address>(StringToken.FromKeyString(\"something\"));\n            node.HideIfConditional.ShouldBe(typeof (Never));\n        }\n\n        private void resolve(MenuNode node, Action<BehaviorGraph> configure)\n        {\n            var graph = new BehaviorGraph();\n            configure(graph);\n            var resolver = new ChainResolutionCache(graph);\n\n            node.Resolve(resolver);\n        }\n\n        [Test]\n        public void throws_if_the_chain_cannot_be_resolved_to_fail_fast()\n        {\n            var key = StringToken.FromKeyString(\"Something\");\n            var node = MenuNode.ForCreatorOf(key, typeof(Address));\n\n            Exception<InvalidOperationException>.ShouldBeThrownBy(() =>\n            {\n                resolve(node, g => { });\n            });\n\n            \n        }\n\n        [Test]\n        public void create_by_creator_of()\n        {\n            var key = StringToken.FromKeyString(\"Something\");\n            var node = MenuNode.ForCreatorOf(key, typeof (Address));\n\n            \n            var chain = new RoutedChain(\"something\");\n            chain.UrlCategory.Creates.Add(typeof(Address));\n\n            resolve(node, graph => graph.AddChain(chain));\n\n\n            node.BehaviorChain.ShouldBeTheSameAs(chain);\n        }\n\n        [Test]\n        public void create_for_action()\n        {\n            var key = StringToken.FromKeyString(\"Something\");\n            var node = MenuNode.ForAction<FakeController>(key, x => x.GetFake());\n\n            var chain1 = new RoutedChain(new RouteDefinition(\"something\"));\n            chain1.AddToEnd(ActionCall.For<FakeController>(x => x.GetFake()));\n            chain1.Route.AddHttpMethodConstraint(\"GET\");\n\n            var chain2 = new RoutedChain(new RouteDefinition(\"something\"));\n            chain2.AddToEnd(ActionCall.For<FakeController>(x => x.GetFake()));\n            chain2.Route.AddHttpMethodConstraint(\"POST\");\n\n            resolve(node, graph =>\n            {\n                graph.AddChain(chain1);\n                graph.AddChain(chain2);\n                graph.AddChain(new BehaviorChain());\n                graph.AddChain(new BehaviorChain());\n                graph.AddChain(new BehaviorChain());\n                graph.AddChain(new BehaviorChain());\n            });\n\n            node.BehaviorChain.ShouldBeTheSameAs(chain1);\n        }\n\n\t    [Test]\n\t    public void create_for_action_with_lambda()\n\t    {\n\t\t    var key = StringToken.FromKeyString(\"Something\");\n\t\t    var node = MenuNode.ForAction<FakeController>(key, x => x.GetFake(), x => x.Category = \"Test\");\n\n\t\t\tnode.Category.ShouldBe(\"Test\");\n\t    }\n\n\t    [Test]\n        public void create_for_input_where_it_is_null()\n        {\n            var key = StringToken.FromKeyString(\"Something\");\n            var node = MenuNode.ForInput<FakeInput>(key);\n\n            node.UrlInput.ShouldBeNull();\n\n            var chain1 = new RoutedChain(\"something\");\n            chain1.AddToEnd(ActionCall.For<FakeController>(x => x.FromInput(null)));\n            chain1.Route.AddHttpMethodConstraint(\"GET\");\n\n            var chain2 = new RoutedChain(\"something\");\n            chain2.AddToEnd(ActionCall.For<FakeController>(x => x.FromInput(null)));\n            chain2.Route.AddHttpMethodConstraint(\"POST\");\n\n            resolve(node, graph =>\n            {\n                graph.AddChain(chain1);\n                graph.AddChain(chain2);\n            });\n\n            node.BehaviorChain.ShouldBeTheSameAs(chain1);\n        }\n\n\t\t[Test]\n\t\tpublic void create_for_input_with_lamba()\n\t\t{\n\t\t\tvar key = StringToken.FromKeyString(\"Something\");\n\t\t\tvar node = MenuNode.ForInput<FakeInput>(key, x => x.Category = \"Test\");\n\n\t\t\tnode.Category.ShouldBe(\"Test\");\n\t\t}\n\n        [Test]\n        public void for_intput_with_model()\n        {\n            var key = StringToken.FromKeyString(\"Something\");\n            var input = new FakeInput(){Name = \"something\"};\n            var node = MenuNode.ForInput(key, input);\n\n            node.UrlInput.ShouldBeTheSameAs(input);\n\n            var chain1 = new RoutedChain(\"something\");\n            chain1.AddToEnd(ActionCall.For<FakeController>(x => x.FromInput(null)));\n            chain1.Route.AddHttpMethodConstraint(\"GET\");\n\n            var chain2 = new RoutedChain(\"something\");\n            chain2.AddToEnd(ActionCall.For<FakeController>(x => x.FromInput(null)));\n            chain2.Route.AddHttpMethodConstraint(\"POST\");\n\n            resolve(node, graph =>\n            {\n                graph.AddChain(chain1);\n                graph.AddChain(chain2);\n            });\n\n            node.BehaviorChain.ShouldBeTheSameAs(chain1);\n        }\n\n        [Test]\n        public void create_by_chain_by_itself()\n        {\n            var key = StringToken.FromKeyString(\"Something\");\n            var chain = new BehaviorChain();\n            var node = MenuNode.ForChain(key, chain);\n\n            node.BehaviorChain.ShouldBeTheSameAs(chain);\n        }\n\n        [Test]\n        public void menu_type_when_it_is_just_a_node()\n        {\n            var node = new MenuNode(FakeKeys.Key5);\n            node.Type.ShouldBe(MenuNodeType.Node);\n\n            // doesn't blow up;)\n            node.Resolve(null);\n        }\n\n        [Test]\n        public void menu_type_when_it_is_a_leaf()\n        {\n            var node = MenuNode.ForCreatorOf(FakeKeys.Key1, typeof (Address));\n            node.Type.ShouldBe(MenuNodeType.Leaf);\n        }\n\n        [Test]\n        public void find_all_children()\n        {\n            var node1 = MenuNode.ForCreatorOf(FakeKeys.Key1, typeof(Address));\n            var node2 = MenuNode.ForCreatorOf(FakeKeys.Key2, typeof(Address));\n            var node3 = MenuNode.ForCreatorOf(FakeKeys.Key3, typeof(Address));\n            var node4 = MenuNode.ForCreatorOf(FakeKeys.Key4, typeof(Address));\n            var node5 = MenuNode.ForCreatorOf(FakeKeys.Key5, typeof(Address));\n            var node6 = MenuNode.ForCreatorOf(FakeKeys.Key6, typeof(Address));\n            var node7 = MenuNode.ForCreatorOf(FakeKeys.Key7, typeof(Address));\n            var node8 = MenuNode.ForCreatorOf(FakeKeys.Key8, typeof(Address));\n\n            node1.Children.AddToEnd(node2);\n            node1.Children.AddToEnd(node3);\n\n            node2.Children.AddToEnd(node4);\n            node4.Children.AddToEnd(node5);\n\n            node3.Children.AddToEnd(node6);\n            node3.Children.AddToEnd(node7);\n            node3.Children.AddToEnd(node8);\n\n            node1.FindAllChildren().ShouldHaveTheSameElementsAs(node2, node4, node5, node3, node6, node7, node8);\n        }\n\n\n    }\n\n\n    public class FakeKeys : StringToken\n    {\n        public static readonly FakeKeys Key1 = new FakeKeys(\"1\");\n        public static readonly FakeKeys Key2 = new FakeKeys(\"2\");\n        public static readonly FakeKeys Key3 = new FakeKeys(\"3\");\n        public static readonly FakeKeys Key4 = new FakeKeys(\"4\");\n        public static readonly FakeKeys Key5 = new FakeKeys(\"5\");\n        public static readonly FakeKeys Key6 = new FakeKeys(\"6\");\n        public static readonly FakeKeys Key7 = new FakeKeys(\"7\");\n        public static readonly FakeKeys Key8 = new FakeKeys(\"8\");\n        public static readonly FakeKeys Key9 = new FakeKeys(\"9\");\n        public static readonly FakeKeys Key10 = new FakeKeys(\"10\");\n        public static readonly FakeKeys Key11 = new FakeKeys(\"11\");\n        public static readonly FakeKeys Chain1 = new FakeKeys(\"Chain1\");\n        public static readonly FakeKeys Chain2 = new FakeKeys(\"Chain2\");\n        public static readonly FakeKeys Chain3 = new FakeKeys(\"Chain3\");\n\n        protected FakeKeys(string defaultValue) : base(null, defaultValue, namespaceByType:true)\n        {\n        }\n    }\n\n    public class FakeController\n    {\n        public string GetFake()\n        {\n            return \"get fake\";\n        }\n\n        public string FromInput(FakeInput input)\n        {\n            return input.Name;\n        }\n    }\n\n    public class FakeInput\n    {\n        public string Name { get; set;}\n    }\n\n    public class FakeConditional : IConditional\n    {\n        public bool ShouldExecute(IFubuRequestContext context)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/MenuRegistrationTester.cs",
    "content": "using FubuMVC.Core.Navigation;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class MenuRegistrationTester : InteractionContext<MenuRegistration>\n    {\n        private MenuNode theNode;\n\n        protected override void beforeEach()\n        {\n            theNode = MenuNode.Node(\"something\");\n            Services.Inject(theNode);\n        }\n\n        [Test]\n        public void depends_on_positive()\n        {\n            var token = new NavigationKey(\"something\");\n\n            MockFor<IStringTokenMatcher>().Stub(x => x.Matches(token)).Return(true);\n\n            ClassUnderTest.DependsOn(token).ShouldBeTrue();\n        }\n\n        [Test]\n        public void depends_on_negative()\n        {\n            var token = new NavigationKey(\"something\");\n\n            MockFor<IStringTokenMatcher>().Stub(x => x.Matches(token)).Return(false);\n\n            ClassUnderTest.DependsOn(token).ShouldBeFalse();\n        }\n\n        [Test]\n        public void get_the_description()\n        {\n            var theStringTokenDescription = \"the string token description\";\n            MockFor<IStringTokenMatcher>().Stub(x => x.Description).Return(theStringTokenDescription);\n            MockFor<IMenuPlacementStrategy>().Stub(x => x.FormatDescription(theStringTokenDescription, theNode.Key))\n                .Return(\"some description\");\n\n            ClassUnderTest.Description.ShouldBe(\"some description\");\n        }\n\n        [Test]\n        public void configure_if_the_matcher_can_find_something()\n        {\n            var graph = new NavigationGraph();\n            graph.MenuFor(\"one\");\n            graph.MenuFor(\"two\");\n            var theChain = graph.MenuFor(\"three\");\n\n            MockFor<IStringTokenMatcher>().Stub(x => x.Matches(theChain.Key)).Return(true);\n\n            ClassUnderTest.Configure(graph);\n\n            MockFor<IMenuPlacementStrategy>().AssertWasCalled(x => x.Apply(theChain, theNode));\n        }\n\n        [Test]\n        public void configure_if_the_matcher_cannot_find_something_will_add_a_menu_chain_for_the_parent()\n        {\n            var graph = new NavigationGraph();\n            graph.MenuFor(\"one\");\n            graph.MenuFor(\"two\");\n\n            MockFor<IStringTokenMatcher>().Stub(x => x.DefaultKey()).Return(new NavigationKey(\"three\"));\n            \n            ClassUnderTest.Configure(graph);\n\n\n            var theChain = graph.MenuFor(\"three\");\n            MockFor<IMenuPlacementStrategy>().AssertWasCalled(x => x.Apply(theChain, theNode)); \n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/NavigationGraphTester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core.Navigation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class NavigationGraphTester\n    {\n        [Test]\n        public void add_node_and_parent_does_not_exist()\n        {\n            var graph = new NavigationGraph();\n\n            var node = MenuNode.Node(FakeKeys.Key1);\n\n            graph.AddChildNode(FakeKeys.Key2, node);\n\n            graph.Compile();\n\n            graph.MenuFor(FakeKeys.Key2).Top\n                .ShouldBeTheSameAs(node);\n        }\n\n        [Test]\n        public void add_node_to_another_node()\n        {\n            var graph = new NavigationGraph();\n            var parentNode = MenuNode.Node(FakeKeys.Key1);\n            graph.AddChildNode(FakeKeys.Key2, parentNode);\n\n\n            var childNode = MenuNode.Node(FakeKeys.Key3);\n\n            graph.AddChildNode(FakeKeys.Key1, childNode);\n\n            graph.Compile();\n\n            parentNode.Children.Top\n                .ShouldBeTheSameAs(childNode);\n        }\n\n    }\n\n    [TestFixture]\n    public class NavigationRegistryAndGraphTester\n    {\n        private NavigationGraph graph;\n\n        [SetUp]\n        public void SetUp()\n        {\n            graph = new NavigationGraph(x =>\n            {\n                x.ForMenu(FakeKeys.Key1);\n                x.Add += MenuNode.Node(FakeKeys.Key2);\n                x.Add += MenuNode.Node(FakeKeys.Key3);\n                x.Add += MenuNode.Node(FakeKeys.Key4);\n\n\n                x.ForMenu(FakeKeys.Key5);\n                x.Add += MenuNode.Node(FakeKeys.Key6);\n                x.Add += MenuNode.Node(FakeKeys.Key7);\n\n\n                x.ForMenu(FakeKeys.Key2);\n                x.Add += MenuNode.Node(FakeKeys.Key8);\n                x.Add += MenuNode.Node(FakeKeys.Key9);\n\n                x.ForMenu(FakeKeys.Key9);\n                x.Add += MenuNode.Node(FakeKeys.Key10);\n            });\n\n            graph.Compile();\n        }\n\n        [Test]\n        public void has_all_the_menu_chain_keys()\n        {\n            graph.AllMenus().Select(x => x.Key)\n                .ShouldHaveTheSameElementsAs(FakeKeys.Key1, FakeKeys.Key5);\n                \n        }\n\n        [Test]\n        public void has_all_the_nodes()\n        {\n            graph.MenuFor(FakeKeys.Key1).Select(x => x.Key).ShouldHaveTheSameElementsAs(FakeKeys.Key2, FakeKeys.Key3, FakeKeys.Key4);\n\n            var tokens = graph.AllNodes().Select(x => x.Key);\n\n            tokens\n                .ShouldHaveTheSameElementsAs(FakeKeys.Key1, FakeKeys.Key2, FakeKeys.Key8, FakeKeys.Key9, FakeKeys.Key10, FakeKeys.Key3, FakeKeys.Key4, FakeKeys.Key5, FakeKeys.Key6, FakeKeys.Key7);\n        }\n\n        [Test]\n        public void find_node()\n        {\n            graph.FindNode(FakeKeys.Key10).Key.ShouldBe(FakeKeys.Key10);\n            graph.FindNode(FakeKeys.Key8).Key.ShouldBe(FakeKeys.Key8);\n            graph.FindNode(FakeKeys.Key4).Key.ShouldBe(FakeKeys.Key4);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/NavigationKeyTester.cs",
    "content": "using FubuMVC.Core.Navigation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class NavigationKeyTester\n    {\n        [Test]\n        public void equals_works()\n        {\n            new NavigationKey(\"one\").ShouldBe(new NavigationKey(\"one\"));\n            new NavigationKey(\"two\").ShouldBe(new NavigationKey(\"two\"));\n            new NavigationKey(\"one\").ShouldNotBe(new NavigationKey(\"two\"));\n        }\n\n        [Test]\n        public void get_hash_code_is_predictable()\n        {\n            new NavigationKey(\"one\").GetHashCode().ShouldBe(new NavigationKey(\"one\").GetHashCode());\n            new NavigationKey(\"two\").GetHashCode().ShouldBe(new NavigationKey(\"two\").GetHashCode());\n            new NavigationKey(\"one\").GetHashCode().ShouldNotBe(new NavigationKey(\"two\").GetHashCode());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/NavigationRegistry_with_FubuRegistry_integration_testing.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Navigation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class NavigationRegistry_with_FubuRegistry_integration_testing\n    {\n        private FubuRegistry registry;\n        private FubuRuntime runtime;\n\n        [SetUp]\n        public void SetUp()\n        {\n            registry = new FubuRegistry();\n            runtime = null;\n        }\n\n        [TearDown]\n        public void TearDown()\n        {\n            if (runtime != null) runtime.Dispose();\n        }\n\n        private IMenuResolver resolver\n        {\n            get\n            {\n                if (runtime == null)\n                {\n                    runtime = registry.ToRuntime();\n                }\n\n                return runtime.Get<IMenuResolver>();\n            }\n        }\n\n        [Test]\n        public void navigation_method_on_fubu_registry_works()\n        {\n            registry.Import<NavigationRegistryExtension>();\n\n            registry.Policies.Global.Add<NavigationRegistry>(x => {\n                x.ForMenu(FakeKeys.Key1);\n                x.Add += MenuNode.Node(FakeKeys.Key2);\n                x.Add += MenuNode.Node(FakeKeys.Key3);\n            });\n\n            resolver.MenuFor(FakeKeys.Key1).Select(x => x.Key)\n                .ShouldHaveTheSameElementsAs(FakeKeys.Key2, FakeKeys.Key3);\n        }\n\n        [Test]\n        public void import_navigation_from_child_registry()\n        {\n            registry.Import<NavigationRegistryExtension>();\n\n            registry.Policies.Global.Add<NavigationRegistry>(x => {\n                x.ForMenu(FakeKeys.Key1);\n                x.Add += MenuNode.Node(FakeKeys.Key2);\n                x.Add += MenuNode.Node(FakeKeys.Key3);\n            });\n\n            registry.Import<ChildRegistry>();\n\n\n            resolver.MenuFor(FakeKeys.Key1).Select(x => x.Key)\n                .ShouldHaveTheSameElementsAs(FakeKeys.Key2, FakeKeys.Key3, FakeKeys.Key4, FakeKeys.Key5);\n\n            resolver.MenuFor(FakeKeys.Key6).Select(x => x.Key)\n                .ShouldHaveTheSameElementsAs(FakeKeys.Key7, FakeKeys.Key8);\n        }\n\n        [Test]\n        public void import_with_strings_instead_of_StringToken()\n        {\n            registry.Import<NavigationRegistryExtension>();\n\n            registry.Policies.Global.Add<NavigationRegistry>(x => {\n                x.ForMenu(\"Key1\");\n                x.Add += MenuNode.Node(\"Key2\");\n                x.Add += MenuNode.Node(\"Key3\");\n            });\n\n            registry.Import<ChildRegistry>();\n\n\n            resolver.MenuFor(new NavigationKey(\"Key1\")).Select(x => x.Key)\n                .ShouldHaveTheSameElementsAs(new NavigationKey(\"Key2\"), new NavigationKey(\"Key3\"));\n        }\n\n        public class ChildRegistry : FubuPackageRegistry\n        {\n            public ChildRegistry()\n            {\n                Policies.Global.Add<ChildNavigation>();\n            }\n        }\n\n        public class ChildNavigation : NavigationRegistry\n        {\n            public ChildNavigation()\n            {\n                ForMenu(FakeKeys.Key1);\n                Add += MenuNode.Node(FakeKeys.Key4);\n                Add += MenuNode.Node(FakeKeys.Key5);\n\n                ForMenu(FakeKeys.Key6);\n                Add += MenuNode.Node(FakeKeys.Key7);\n                Add += MenuNode.Node(FakeKeys.Key8);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/NavigationServiceRegistry_specification.cs",
    "content": "using FubuMVC.Core;\nusing FubuMVC.Core.Navigation;\nusing FubuMVC.Core.Registration;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class NavigationServiceRegistry_specification\n    {\n        private void registeredTypeIs<TService, TImplementation>()\n        {\n            var registry = new FubuRegistry();\n            registry.Import<NavigationRegistryExtension>();\n\n            using (var runtime = registry.ToRuntime())\n            {\n                var container = runtime.Get<IContainer>();\n\n                container.Model.For<TService>().Default.ReturnedType.ShouldBe(typeof(TImplementation));\n            }\n        }\n\n\n        [Test]\n        public void menu_state_service_is_registered()\n        {\n            registeredTypeIs<IMenuStateService, MenuStateService>();\n        }\n\n        [Test]\n        public void navigation_service_is_registered()\n        {\n            registeredTypeIs<INavigationService, NavigationService>();\n        }\n\n        [Test]\n        public void menu_resolver()\n        {\n            registeredTypeIs<IMenuResolver, MenuResolverCache>();\n\n            ServiceRegistry.ShouldBeSingleton(typeof(MenuResolverCache))\n                .ShouldBeTrue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Navigation/NavigationServiceTester.cs",
    "content": "using FubuMVC.Core.Assets;\nusing FubuMVC.Core.Navigation;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Registration.Routes;\nusing FubuMVC.Core.Urls;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Navigation\n{\n    [TestFixture]\n    public class when_building_a_MenuItemToken_for_a_single_node : InteractionContext<NavigationService>\n    {\n        private MenuNode theNode;\n        private RoutedChain theChain;\n        private StubUrlRegistry theUrls;\n\n\t    private string theIconUrl;\n\n        protected override void beforeEach()\n        {\n            theChain = new RoutedChain(new RouteDefinition(\"something\"){\n                Input = new RouteInput<FakeInput>(\"somepattern\")\n            });\n\n            Services.Inject(new BehaviorGraph());\n            \n\n            theNode = new MenuNode(FakeKeys.Key1, r => theChain);\n            theNode.Resolve(null);\n            theNode.BehaviorChain.ShouldBeTheSameAs(theChain);\n            theNode.UrlInput = new object();\n\n            theNode.Icon(\"some image\");\n\n            theNode.Children.AddToEnd(new MenuNode(FakeKeys.Key2));\n            theNode.Children.AddToEnd(new MenuNode(FakeKeys.Key3));\n            theNode.Children.AddToEnd(new MenuNode(FakeKeys.Key4));\n\n\t        theIconUrl = \"test.png\";\n\t        MockFor<IAssetTagBuilder>().Stub(x => x.FindImageUrl(theNode.Icon())).Return(theIconUrl);\n\n            theUrls = new StubUrlRegistry();\n            Services.Inject<IUrlRegistry>(theUrls);\n\n            MockFor<IMenuStateService>().Stub(x => x.DetermineStateFor(theNode))\n                .Return(MenuItemState.Available);\n\n\t\t\tMockFor<IChainUrlResolver>().Stub(x => x.UrlFor(theNode.UrlInput, theNode.BehaviorChain))\n                .Return(\"the full url\");\n        }\n\n\t\tprivate MenuItemToken theToken { get { return ClassUnderTest.BuildToken(theNode); } }\n\n        [Test]\n        public void will_resolve_the_asset_url_for_the_icon_if_it_exists()\n        {\n            theToken.IconUrl.ShouldBe(theIconUrl);\n        }\n\n        [Test]\n        public void has_state_from_the_state_service()\n        {\n            theToken.MenuItemState.ShouldBe(MenuItemState.Available);\n        }\n\n        [Test]\n        public void has_the_key()\n        {\n            theToken.Key.ShouldBe(theNode.Key.Key);\n        }\n\n        [Test]\n        public void has_the_text_from_the_StringTOken_on_the_node()\n        {\n            theToken.Text.ShouldBe(theNode.Key.ToString());\n        }\n\n        [Test]\n        public void has_the_url()\n        {\n            theToken.Url.ShouldBe(\"the full url\");\n        }\n\n        [Test]\n        public void has_children()\n        {\n            theToken.Children.ShouldHaveCount(3);\n        }\n\n\t\t[Test]\n\t\tpublic void no_category()\n\t\t{\n\t\t\ttheToken.Category.ShouldBeNull();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void sets_the_category()\n\t\t{\n\t\t\ttheNode.Category = \"test\";\n\t\t\ttheToken.Category.ShouldEndWith(theNode.Category);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void sets_the_data()\n\t\t{\n\t\t\ttheNode[\"k1\"] = \"value1\";\n\t\t\ttheNode[\"k2\"] = \"value2\";\n\n\t\t\ttheToken.Get<string>(\"k1\").ShouldBe(\"value1\");\n\t\t\ttheToken.Get<string>(\"k2\").ShouldBe(\"value2\");\n\n\t\t\tvar value = \"empty\";\n\t\t\ttheToken.Value<string>(\"k2\", x => value = x);\n\n\t\t\tvalue.ShouldBe(\"value2\");\n\t\t}\n    }\n\n    [TestFixture]\n    public class when_building_a_MenuItemToken_for_a_single_node_without_an_icon : InteractionContext<NavigationService>\n    {\n        private MenuNode theNode;\n        private BehaviorChain theChain;\n        private MenuItemToken theToken;\n        private StubUrlRegistry theUrls;\n\n        protected override void beforeEach()\n        {\n            theChain = new RoutedChain(new RouteDefinition(\"something\")\n            {\n                Input = new RouteInput<FakeInput>(\"somepattern\")\n            });\n\n            Services.Inject(new BehaviorGraph());\n\n            theNode = new MenuNode(FakeKeys.Key1, r => theChain);\n            theNode.Resolve(null);\n            theNode.BehaviorChain.ShouldBeTheSameAs(theChain);\n            theNode.UrlInput = new object();\n\n            theNode.Children.AddToEnd(new MenuNode(FakeKeys.Key2));\n            theNode.Children.AddToEnd(new MenuNode(FakeKeys.Key3));\n            theNode.Children.AddToEnd(new MenuNode(FakeKeys.Key4));\n\n\n            MockFor<IMenuStateService>().Stub(x => x.DetermineStateFor(theNode))\n                .Return(MenuItemState.Available);\n\n            MockFor<IChainUrlResolver>().Stub(x => x.UrlFor(theNode.UrlInput, theNode.BehaviorChain))\n                .Return(\"the full url\");\n\n            theToken = ClassUnderTest.BuildToken(theNode);\n        }\n\n        [Test]\n        public void icon_url_is_null()\n        {\n            theToken.IconUrl.ShouldBeNull();\n        }\n\n        [Test]\n        public void has_state_from_the_state_service()\n        {\n            theToken.MenuItemState.ShouldBe(MenuItemState.Available);\n        }\n\n        [Test]\n        public void has_the_key()\n        {\n            theToken.Key.ShouldBe(theNode.Key.Key);\n        }\n\n        [Test]\n        public void has_the_text_from_the_StringTOken_on_the_node()\n        {\n            theToken.Text.ShouldBe(theNode.Key.ToString());\n        }\n\n        [Test]\n        public void has_the_url()\n        {\n            theToken.Url.ShouldBe(\"the full url\");\n        }\n\n        [Test]\n        public void has_children()\n        {\n            theToken.Children.ShouldHaveCount(3);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Projections/ChildProjectionTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Projections;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Projections\r\n{\r\n    [TestFixture]\r\n    public class ChildProjectionTester\r\n    {\r\n        private Projection<Parent> theProjection;\r\n        private Parent theParent;\r\n        private Lazy<IDictionary<string, object>> _dictionary;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theProjection = new Projection<Parent>(DisplayFormatting.RawValues);\r\n            theParent = new Parent();\r\n\r\n            _dictionary = new Lazy<IDictionary<string, object>>(() =>\r\n            {\r\n                var runner = new ProjectionRunner(new InMemoryServiceLocator());\r\n                var node = new DictionaryMediaNode();\r\n\r\n                runner.Run(theProjection,theParent, node);\r\n\r\n                return node.Values;\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void accessors()\r\n        {\r\n            var projection = new ChildProjection<Parent, Child>(x => x.Child, DisplayFormatting.RawValues);\r\n            projection.As<IProjection<Parent>>().Accessors().Single().ShouldBe(ReflectionHelper.GetAccessor<Parent>(x => x.Child));\r\n        }\r\n\r\n        private IDictionary<string, object> theDictionary\r\n        {\r\n            get\r\n            {\r\n                return _dictionary.Value;\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void explicit_writing()\r\n        {\r\n            theParent.Child = new Child\r\n            {\r\n                Age = 38,\r\n                Name = \"Jeremy\"\r\n            };\r\n\r\n            theProjection.Child(x => x.Child).WriteWith((c, n) =>\r\n            {\r\n                n.SetAttribute(\"age\", c.Values.ValueFor(x => x.Age));\r\n                n.SetAttribute(\"name\", c.Values.ValueFor(x => x.Name));\r\n            });\r\n\r\n            var child = theDictionary.Child(\"Child\");\r\n            child[\"age\"].ShouldBe(38);\r\n            child[\"name\"].ShouldBe(\"Jeremy\");\r\n        }\r\n\r\n        [Test]\r\n        public void child_projection_when_the_child_is_null()\r\n        {\r\n            theParent.Child = null;\r\n            theProjection.Child(x => x.Child).Include<TheChildProjection>();\r\n\r\n            theDictionary.ContainsKey(\"Child\").ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void child_projection_when_the_child_is_not_null()\r\n        {\r\n            theParent.Child = new Child{\r\n                Age = 38,\r\n                Name = \"Jeremy\"\r\n            };\r\n\r\n            theProjection.Child(x => x.Child).Include<TheChildProjection>();\r\n\r\n            theDictionary.ContainsKey(\"Child\").ShouldBeTrue();\r\n\r\n            theDictionary.Child(\"Child\")[\"Age\"].ShouldBe(38);\r\n            theDictionary.Child(\"Child\")[\"Name\"].ShouldBe(\"Jeremy\");\r\n        }\r\n\r\n        [Test]\r\n        public void override_the_name_of_the_child()\r\n        {\r\n            theParent.Child = new Child\r\n            {\r\n                Age = 38,\r\n                Name = \"Jeremy\"\r\n            };\r\n\r\n            theProjection.Child(x => x.Child).Name(\"Different\").Include<TheChildProjection>();\r\n\r\n            theDictionary.ContainsKey(\"Different\").ShouldBeTrue();\r\n            theDictionary.ContainsKey(\"Child\").ShouldBeFalse();\r\n\r\n            theDictionary.Child(\"Different\")[\"Age\"].ShouldBe(38);\r\n            theDictionary.Child(\"Different\")[\"Name\"].ShouldBe(\"Jeremy\");\r\n        }\r\n\r\n        [Test]\r\n        public void define_the_child_projection_inline()\r\n        {\r\n            theProjection.Child(x => x.Child).Configure(x =>\r\n            {\r\n                x.Value(o => o.Name);\r\n            });\r\n\r\n            theParent.Child = new Child\r\n            {\r\n                Age = 38,\r\n                Name = \"Jeremy\"\r\n            };\r\n\r\n            theDictionary.ContainsKey(\"Child\").ShouldBeTrue();\r\n\r\n            theDictionary.Child(\"Child\").ContainsKey(\"Age\").ShouldBeFalse();\r\n            theDictionary.Child(\"Child\")[\"Name\"].ShouldBe(\"Jeremy\");\r\n        }\r\n\r\n\r\n        public class TheChildProjection : Projection<Child>\r\n        {\r\n            public TheChildProjection()\r\n                : base(DisplayFormatting.RawValues)\r\n            {\r\n                Value(x => x.Name);\r\n                Value(x => x.Age);\r\n            }\r\n        }\r\n\r\n        public class Parent\r\n        {\r\n            public Child Child { get; set; }\r\n        }\r\n\r\n        public class Child\r\n        {\r\n            public string Name { get; set; }\r\n            public int Age { get; set; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Projections/DelegatingProjectionTester.cs",
    "content": "using System.Collections.Generic;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Projections;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Projections\r\n{\r\n    [TestFixture]\r\n    public class DelegatingProjectionTester\r\n    {\r\n        [Test]\r\n        public void accessors()\r\n        {\r\n            var projection = new DelegatingProjection<ProjectionModel, FakeProjector>();\r\n            projection.Accessors().ShouldHaveTheSameElementsAs(new FakeProjector().Accessors());\r\n        }\r\n\r\n        [Test]\r\n        public void creates_and_delegates_to_another_projection()\r\n        {\r\n            var context = MockRepository.GenerateMock<IProjectionContext<ProjectionModel>>();\r\n\r\n            var projection = new DelegatingProjection<ProjectionModel, FakeProjector>();\r\n            var theNode = new DictionaryMediaNode();\r\n\r\n            projection.Write(context, theNode);\r\n\r\n            FakeProjector.theTarget.ShouldBeTheSameAs(context);\r\n            FakeProjector.theNode.ShouldBeTheSameAs(theNode);\r\n        }\r\n\r\n        [Test]\r\n        public void include_inside_a_projection()\r\n        {\r\n            var context = MockRepository.GenerateMock<IProjectionContext<ProjectionModel>>();\r\n\r\n            var projection = new Projection<ProjectionModel>(DisplayFormatting.RawValues);\r\n            projection.Include<FakeProjector>();\r\n\r\n            var theNode = new DictionaryMediaNode();\r\n\r\n            projection.As<IProjection<ProjectionModel>>().Write(context, theNode);\r\n\r\n            FakeProjector.theTarget.ShouldBeTheSameAs(context);\r\n            FakeProjector.theNode.ShouldBeTheSameAs(theNode);\r\n        }\r\n\r\n        public class ProjectionModel\r\n        {\r\n            public string Name { get; set; }\r\n            public int Count { get; set; }\r\n        }\r\n\r\n        public class FakeProjector : IProjection<ProjectionModel>\r\n        {\r\n            public static IProjectionContext<ProjectionModel> theTarget;\r\n            public static IMediaNode theNode;\r\n\r\n            public void Write(IProjectionContext<ProjectionModel> context, IMediaNode node)\r\n            {\r\n                theTarget = context;\r\n                theNode = node;\r\n            }\r\n\r\n            public IEnumerable<Accessor> Accessors()\r\n            {\r\n                yield return ReflectionHelper.GetAccessor<ProjectionModel>(x => x.Count);\r\n                yield return ReflectionHelper.GetAccessor<ProjectionModel>(x => x.Name);\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Projections/DictionaryMediaNodeTester.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Projections;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Projections\r\n{\r\n    [TestFixture]\r\n    public class DictionaryMediaNodeTester\r\n    {\r\n        private DictionaryMediaNode theNode;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theNode = new DictionaryMediaNode();\r\n        }\r\n\r\n        [Test]\r\n        public void set_an_attribute_writes_to_the_dictionary()\r\n        {\r\n            theNode.SetAttribute(\"key\", \"value\");\r\n\r\n            theNode.Values[\"key\"].ShouldBe(\"value\");\r\n        }\r\n\r\n        [Test]\r\n        public void add_child_adds_a_dictionary_to_the_dictionary()\r\n        {\r\n            theNode.AddChild(\"child\").SetAttribute(\"color\", \"red\");\r\n\r\n            theNode.Values[\"child\"].As<IDictionary<string, object>>()\r\n                [\"color\"].ShouldBe(\"red\");\r\n        }\r\n\r\n        [Test]\r\n        public void add_list_returns_a_node_list()\r\n        {\r\n            theNode.AddList(\"nodes\").ShouldBeOfType<DictionaryMediaNodeList>();\r\n        }\r\n\r\n        [Test]\r\n        public void add_children_to_a_list()\r\n        {\r\n            var list = theNode.AddList(\"nodes\");\r\n            list.Add().SetAttribute(\"animal\", \"Dolphin\");\r\n            list.Add().SetAttribute(\"animal\", \"Horse\");\r\n\r\n            var nodes = theNode.Values[\"nodes\"].As<IList<IDictionary<string, object>>>();\r\n            nodes.First()[\"animal\"].ShouldBe(\"Dolphin\");\r\n            nodes.Last()[\"animal\"].ShouldBe(\"Horse\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Projections/EnumerableProjectionIntegratedTester.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Xml;\r\nusing FubuCore;\r\nusing FubuCore.Configuration;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Projections;\r\nusing FubuMVC.Core.Resources.Hypermedia;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing StructureMap;\r\n\r\nnamespace FubuMVC.Tests.Projections\r\n{\r\n    [TestFixture]\r\n    public class EnumerableProjectionIntegratedTester\r\n    {\r\n        private Parent theParent;\r\n        private IProjectionRunner runner;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theParent = new Parent\r\n            {\r\n                Children = new[]\r\n                {\r\n                    new Child {Name = \"Jeremy\"},\r\n                    new Child {Name = \"Jessica\"},\r\n                    new Child {Name = \"Natalie\"}\r\n                }\r\n            };\r\n\r\n            var container = new Container();\r\n            var registry = new FubuRegistry();\r\n\r\n            using (var runtime = FubuRuntime.Basic())\r\n            {\r\n                runner = runtime.Get<IProjectionRunner>();\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void accessors()\r\n        {\r\n            var projection = EnumerableProjection<Parent, Child>.For(x => x.Children);\r\n            projection.As<IProjection<Parent>>()\r\n                .Accessors()\r\n                .Single()\r\n                .ShouldBe(ReflectionHelper.GetAccessor<Parent>(x => x.Children));\r\n        }\r\n\r\n        public XmlElement write(IProjection<Parent> projection)\r\n        {\r\n            var node = XmlNodeCentricMediaNode.ForRoot(\"root\");\r\n            runner.Run(projection, new SimpleValues<Parent>(theParent), node);\r\n\r\n            return node.Element;\r\n        }\r\n\r\n        [Test]\r\n        public void write_with_inline_projection()\r\n        {\r\n            var projection = new Projection<Parent>(DisplayFormatting.RawValues);\r\n            projection.Enumerable(x => x.Children).DefineProjection(p => { p.Value(x => x.Name).Name(\"name\"); });\r\n\r\n            var element = write(projection);\r\n\r\n            element.OuterXml.ShouldBe(\r\n                \"<root><Children><Child><name>Jeremy</name></Child><Child><name>Jessica</name></Child><Child><name>Natalie</name></Child></Children></root>\");\r\n        }\r\n\r\n        [Test]\r\n        public void write_with_precanned_child_projection_with_defaults()\r\n        {\r\n            var projection = new Projection<Parent>(DisplayFormatting.RawValues);\r\n            projection.Enumerable(x => x.Children).UseProjection<SimpleChildProjection>();\r\n\r\n            var element = write(projection);\r\n\r\n            element.OuterXml.ShouldBe(\r\n                \"<root><Children><Child><name>Jeremy</name></Child><Child><name>Jessica</name></Child><Child><name>Natalie</name></Child></Children></root>\");\r\n        }\r\n\r\n        [Test]\r\n        public void write_with_precanned_child_projection_overwrite_node()\r\n        {\r\n            var projection = new Projection<Parent>(DisplayFormatting.RawValues);\r\n            projection.Enumerable(x => x.Children).NodeName(\"children\").UseProjection<SimpleChildProjection>();\r\n\r\n            var element = write(projection);\r\n\r\n            element.OuterXml.ShouldBe(\r\n                \"<root><children><Child><name>Jeremy</name></Child><Child><name>Jessica</name></Child><Child><name>Natalie</name></Child></children></root>\");\r\n        }\r\n\r\n        [Test]\r\n        public void write_with_precanned_child_projection_overwrite_leaf_name()\r\n        {\r\n            var projection = new Projection<Parent>(DisplayFormatting.RawValues);\r\n            projection.Enumerable(x => x.Children).LeafName(\"child\").UseProjection<SimpleChildProjection>();\r\n\r\n            var element = write(projection);\r\n\r\n            element.OuterXml.ShouldBe(\r\n                \"<root><Children><child><name>Jeremy</name></child><child><name>Jessica</name></child><child><name>Natalie</name></child></Children></root>\");\r\n        }\r\n\r\n        public class Parent\r\n        {\r\n            public Child[] Children { get; set; }\r\n        }\r\n\r\n        public class SimpleChildProjection : Projection<Child>\r\n        {\r\n            public SimpleChildProjection()\r\n                : base(DisplayFormatting.RawValues)\r\n            {\r\n                Value(x => x.Name).Name(\"name\");\r\n            }\r\n        }\r\n\r\n        public class Child\r\n        {\r\n            public string Name { get; set; }\r\n        }\r\n    }\r\n\r\n    public class XmlNodeCentricMediaNode : XmlMediaNode\r\n    {\r\n        public XmlNodeCentricMediaNode(XmlElement element)\r\n            : base(element)\r\n        {\r\n        }\r\n\r\n        public static XmlNodeCentricMediaNode ForRoot(string rootElement)\r\n        {\r\n            return new XmlNodeCentricMediaNode(new XmlDocument().WithRoot(rootElement));\r\n        }\r\n\r\n        protected override IXmlMediaNode buildChildFor(XmlElement childElement)\r\n        {\r\n            return new XmlNodeCentricMediaNode(childElement);\r\n        }\r\n\r\n        public override void SetAttribute(string name, object value)\r\n        {\r\n            if (value != null) Element.AddElement(name).InnerText = value.ToString();\r\n        }\r\n    }\r\n\r\n    public abstract class XmlMediaNode : IXmlMediaNode\r\n    {\r\n        private readonly XmlElement _element;\r\n\r\n        protected XmlMediaNode(XmlElement element)\r\n        {\r\n            _element = element;\r\n            LinkWriter = AtomXmlLinkWriter.Flyweight;\r\n        }\r\n\r\n        public IMediaNode AddChild(string name)\r\n        {\r\n            var childElement = _element.AddElement(name);\r\n            var childNode = buildChildFor(childElement);\r\n            childNode.LinkWriter = LinkWriter;\r\n\r\n            return childNode;\r\n        }\r\n\r\n        public abstract void SetAttribute(string name, object value);\r\n\r\n        public void WriteLinks(IEnumerable<Link> links)\r\n        {\r\n            LinkWriter.Write(_element, links);\r\n        }\r\n\r\n        public IMediaNodeList AddList(string nodeName, string leafName)\r\n        {\r\n            var parentElement = _element.AddElement(nodeName);\r\n            return new XmlMediaNodeList(this, parentElement, leafName);\r\n        }\r\n\r\n        public XmlElement Element\r\n        {\r\n            get { return _element; }\r\n        }\r\n\r\n        public IXmlLinkWriter LinkWriter { get; set; }\r\n        protected abstract IXmlMediaNode buildChildFor(XmlElement childElement);\r\n\r\n        public override string ToString()\r\n        {\r\n            return _element.OuterXml;\r\n        }\r\n\r\n        public class XmlMediaNodeList : IMediaNodeList\r\n        {\r\n            private readonly XmlMediaNode _parentNode;\r\n            private readonly XmlElement _parentElement;\r\n            private readonly string _childElementName;\r\n\r\n            public XmlMediaNodeList(XmlMediaNode parentNode, XmlElement parentElement, string childElementName)\r\n            {\r\n                _parentNode = parentNode;\r\n                _parentElement = parentElement;\r\n                _childElementName = childElementName;\r\n            }\r\n\r\n            public IMediaNode Add()\r\n            {\r\n                var element = _parentElement.AddElement(_childElementName);\r\n                return _parentNode.buildChildFor(element);\r\n            }\r\n        }\r\n    }\r\n\r\n    public interface IXmlMediaNode : IMediaNode\r\n    {\r\n        XmlElement Element { get; }\r\n        IXmlLinkWriter LinkWriter { get; set; }\r\n    }\r\n\r\n    public interface IXmlLinkWriter\r\n    {\r\n        void Write(XmlElement parent, IEnumerable<Link> links);\r\n    }\r\n\r\n    public class AtomXmlLinkWriter : IXmlLinkWriter\r\n    {\r\n        public static readonly AtomXmlLinkWriter Flyweight = new AtomXmlLinkWriter();\r\n\r\n        public void Write(XmlElement parent, IEnumerable<Link> links)\r\n        {\r\n            links.Each(x => WriteLink(parent, x));\r\n        }\r\n\r\n        public void WriteLink(XmlElement parent, Link link)\r\n        {\r\n            var element = parent.AddElement(\"link\").WithAtt(\"href\", link.Url);\r\n\r\n\r\n            link.Title.IfNotNull(x => element.WithAtt(\"title\", x));\r\n            link.Rel.IfNotNull(x => element.WithAtt(\"rel\", x));\r\n            link.ContentType.IfNotNull(x => element.WithAtt(\"type\", x));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Projections/ExternallyFormattedValueProjectorTester.cs",
    "content": "﻿using System.Linq;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Projections;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Projections\r\n{\r\n    [TestFixture]\r\n    public class ExternallyFormattedValueProjectorTester\r\n    {\r\n        [Test]\r\n        public void accessors()\r\n        {\r\n            var accessor = ReflectionHelper.GetAccessor<ExternalFormatTarget>(x => x.Name);\r\n            var formatter = new ExternallyFormattedValueProjector<ExternalFormatTarget, string>(accessor, null);\r\n            formatter.As<IProjection<ExternalFormatTarget>>().Accessors().Single().ShouldBe(accessor);\r\n        }\r\n    }\r\n\r\n    public class ExternalFormatTarget\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Projections/ProjectMyself_handling_in_an_accessor_projection.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Projections;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Projections\r\n{\r\n    [TestFixture]\r\n    public class ProjectMyself_handling_in_an_accessor_projection\r\n    {\r\n        [Test]\r\n        public void should_just_use_IProjectMyself_Project_in_accessor_projection()\r\n        {\r\n            var projection = AccessorProjection<ComplexValueHolder, ComplexValue>.For(x => x.Value);\r\n            var target = new ComplexValueHolder\r\n            {\r\n                Value = new ComplexValue {Name = \"Jeremy\", Age = 38}\r\n            };\r\n\r\n            var context = new ProjectionContext<ComplexValueHolder>(new InMemoryServiceLocator(), target);\r\n\r\n            var node = new DictionaryMediaNode();\r\n            projection.As<IProjection<ComplexValueHolder>>().Write(context, node);\r\n\r\n            node.Values[\"Value\"].As<IDictionary<string, object>>()[\"Name\"].ShouldBe(\"Jeremy\");\r\n            node.Values[\"Value\"].As<IDictionary<string, object>>()[\"Age\"].ShouldBe(38);\r\n        }\r\n\r\n        [Test]\r\n        public void should_just_use_IProjectMyself_Project_in_accessor_projection_can_override_the_attribute_name()\r\n        {\r\n            var projection = AccessorProjection<ComplexValueHolder, ComplexValue>.For(x => x.Value);\r\n            projection.Name(\"different\");\r\n            \r\n            var target = new ComplexValueHolder\r\n            {\r\n                Value = new ComplexValue { Name = \"Jeremy\", Age = 38 }\r\n            };\r\n\r\n            var context = new ProjectionContext<ComplexValueHolder>(new InMemoryServiceLocator(), target);\r\n\r\n            var node = new DictionaryMediaNode();\r\n            projection.As<IProjection<ComplexValueHolder>>().Write(context, node);\r\n\r\n            node.Values[\"different\"].As<IDictionary<string, object>>()[\"Name\"].ShouldBe(\"Jeremy\");\r\n            node.Values[\"different\"].As<IDictionary<string, object>>()[\"Age\"].ShouldBe(38);\r\n        }\r\n    }\r\n\r\n\r\n    public class ComplexValueHolder\r\n    {\r\n        public ComplexValue Value { get; set; }\r\n    }\r\n\r\n    public class ComplexValue : IProjectMyself\r\n    {\r\n        public string Name { get; set; }\r\n        public int Age { get; set; }\r\n        public void Project(string attributeName, IMediaNode node)\r\n        {\r\n            var child = node.AddChild(attributeName);\r\n        \r\n            child.SetAttribute(\"Name\", Name);\r\n            child.SetAttribute(\"Age\", Age);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Projections/ProjectionContextTester.cs",
    "content": "using FubuCore;\r\nusing FubuCore.Formatting;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Projections;\r\nusing FubuMVC.Core.Urls;\r\nusing FubuMVC.Tests.TestSupport;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\nusing StructureMap.TypeRules;\r\n\r\nnamespace FubuMVC.Tests.Projections\r\n{\r\n    [TestFixture]\r\n    public class ProjectionContextTester : InteractionContext<ProjectionContext<ProjectionModel>>\r\n    {\r\n        [Test]\r\n        public void subject_delegates_to_the_inner_values()\r\n        {\r\n            var model = new ProjectionModel();\r\n            MockFor<IValues<ProjectionModel>>().Stub(x => x.Subject).Return(model);\r\n\r\n\r\n            ClassUnderTest.Subject.ShouldBeTheSameAs(model);\r\n        }\r\n\r\n        [Test]\r\n        public void formatted_value_of_extension_method_1()\r\n        {\r\n            var formatter = MockFor<IDisplayFormatter>();\r\n            MockFor<IServiceLocator>().Stub(x => x.GetInstance<IDisplayFormatter>()).Return(formatter);\r\n\r\n            var accessor = ReflectionHelper.GetAccessor<ProjectionModel>(x => x.Name);\r\n\r\n            var theRawValue = \"Jeremy\";\r\n            MockFor<IValues<ProjectionModel>>().Stub(x => x.ValueFor(accessor))\r\n                .Return(theRawValue);\r\n\r\n            var theFormattedValue = \"*Jeremy*\";\r\n            formatter.Stub(x => x.GetDisplayForValue(accessor, theRawValue)).Return(theFormattedValue);\r\n\r\n            ClassUnderTest.FormattedValueOf(accessor).ShouldBe(theFormattedValue);\r\n            ClassUnderTest.FormattedValueOf(x => x.Name).ShouldBe(theFormattedValue);\r\n        }\r\n\r\n\r\n\r\n        [Test]\r\n        public void value_for_delegates_to_the_inner_values()\r\n        {\r\n            var accessor = ReflectionHelper.GetAccessor<ProjectionModel>(x => x.Name);\r\n            MockFor<IValues<ProjectionModel>>().Stub(x => x.ValueFor(accessor))\r\n                .Return(\"Jeremy\");\r\n\r\n            ClassUnderTest.Values.ValueFor(accessor).ShouldBe(\"Jeremy\");\r\n        }\r\n\r\n        [Test]\r\n        public void getting_a_service_delegates_to_the_service_locator()\r\n        {\r\n            var stub = new StubUrlRegistry();\r\n            MockFor<IServiceLocator>().Stub(x => x.GetInstance<IUrlRegistry>()).Return(stub);\r\n\r\n            ClassUnderTest.Service<IUrlRegistry>().ShouldBeTheSameAs(stub);\r\n        }\r\n\r\n        [Test]\r\n        public void urls_are_pulled_from_the_service_locator_but_only_once()\r\n        {\r\n            var stub = new StubUrlRegistry();\r\n            MockFor<IServiceLocator>().Stub(x => x.GetInstance<IUrlRegistry>()).Return(stub);\r\n\r\n            ClassUnderTest.Urls.ShouldBeTheSameAs(stub);\r\n            ClassUnderTest.Urls.ShouldBeTheSameAs(stub);\r\n            ClassUnderTest.Urls.ShouldBeTheSameAs(stub);\r\n            ClassUnderTest.Urls.ShouldBeTheSameAs(stub);\r\n            ClassUnderTest.Urls.ShouldBeTheSameAs(stub);\r\n\r\n            MockFor<IServiceLocator>().AssertWasCalled(x => x.GetInstance<IUrlRegistry>(), x => x.Repeat.Once());\r\n        }\r\n\r\n        [Test]\r\n        public void display_formatter_is_pulled_from_the_service_locator_once()\r\n        {\r\n            var formatter = MockFor<IDisplayFormatter>();\r\n            MockFor<IServiceLocator>().Stub(x => x.GetInstance<IDisplayFormatter>()).Return(formatter);\r\n\r\n            ClassUnderTest.Formatter.ShouldBeTheSameAs(formatter);\r\n            ClassUnderTest.Formatter.ShouldBeTheSameAs(formatter);\r\n            ClassUnderTest.Formatter.ShouldBeTheSameAs(formatter);\r\n            ClassUnderTest.Formatter.ShouldBeTheSameAs(formatter);\r\n            ClassUnderTest.Formatter.ShouldBeTheSameAs(formatter);\r\n\r\n            MockFor<IServiceLocator>().AssertWasCalled(x => x.GetInstance<IDisplayFormatter>(), x => x.Repeat.Once());\r\n        }\r\n\r\n        [Test]\r\n        public void create_a_context_for_a_different_type()\r\n        {\r\n            var formatter = MockFor<IDisplayFormatter>();\r\n            MockFor<IServiceLocator>().Stub(x => x.GetInstance<IDisplayFormatter>()).Return(formatter);\r\n\r\n            var stub = new StubUrlRegistry();\r\n            MockFor<IServiceLocator>().Stub(x => x.GetInstance<IUrlRegistry>()).Return(stub);\r\n\r\n            var different = new DifferentTarget();\r\n\r\n            var context = ClassUnderTest.ContextFor(different);\r\n\r\n            context.Urls.ShouldBeTheSameAs(stub);\r\n            context.Formatter.ShouldBeTheSameAs(formatter);\r\n            context.Subject.ShouldBeTheSameAs(different);\r\n        }\r\n    }\r\n\r\n\r\n    public class ProjectionModel\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    public class DifferentTarget\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Projections/ProjectionRunnerTester.cs",
    "content": "using System.Collections.Generic;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Projections;\r\nusing FubuMVC.Tests.TestSupport;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Projections\r\n{\r\n\r\n\r\n    [TestFixture]\r\n    public class ProjectionRunnerTester : InteractionContext<ProjectionRunner>\r\n    {\r\n        private TargetProjection theProjection;\r\n        private Target theTarget;\r\n        private DictionaryMediaNode theNode;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            theProjection = new TargetProjection();\r\n            theTarget = new Target();\r\n\r\n            MockFor<IServiceLocator>().Stub(x => x.GetInstance<TargetProjection>())\r\n                .Return(theProjection);\r\n\r\n            theNode = new DictionaryMediaNode();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void run_by_the_projection_and_values()\r\n        {\r\n            ClassUnderTest.Run(theProjection, new SimpleValues<Target>(theTarget), theNode);\r\n\r\n            assertTheProjectionWasRun();\r\n        }\r\n\r\n        [Test]\r\n        public void run_by_the_projection_and_target()\r\n        {\r\n            ClassUnderTest.Run(theProjection, theTarget, theNode);\r\n\r\n            assertTheProjectionWasRun();\r\n        }\r\n\r\n        [Test]\r\n        public void run_by_the_projection_type()\r\n        {\r\n            ClassUnderTest.Run<Target, TargetProjection>(new SimpleValues<Target>(theTarget), theNode);\r\n\r\n            assertTheProjectionWasRun();\r\n        }\r\n\r\n        [Test]\r\n        public void run_by_the_projection_type_2()\r\n        {\r\n            ClassUnderTest.Run<Target, TargetProjection>(theTarget, theNode);\r\n\r\n            assertTheProjectionWasRun();\r\n        }\r\n\r\n        private void assertTheProjectionWasRun()\r\n        {\r\n            theProjection.TheNode.ShouldBeTheSameAs(theNode);\r\n            theProjection.TheTarget.ShouldBeTheSameAs(theTarget);\r\n        }\r\n\r\n\r\n        public class TargetProjection : IProjection<Target>\r\n        {\r\n            public Target TheTarget;\r\n            public IMediaNode TheNode;\r\n\r\n            public void Write(IProjectionContext<Target> context, IMediaNode node)\r\n            {\r\n                TheTarget = context.Subject;\r\n                TheNode = node;\r\n            }\r\n\r\n            public IEnumerable<Accessor> Accessors()\r\n            {\r\n                throw new System.NotImplementedException();\r\n            }\r\n        }\r\n\r\n        public class Target\r\n        {\r\n            \r\n        }\r\n    }\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Projections/SelfProjectingValueProjectorTester.cs",
    "content": "﻿using System.Linq;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Projections;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Projections\r\n{\r\n    [TestFixture]\r\n    public class SelfProjectingValueProjectorTester\r\n    {\r\n        [Test]\r\n        public void accessors()\r\n        {\r\n            var accessor = ReflectionHelper.GetAccessor<HoldsProjectsItself>(x => x.Itself);\r\n            var projection = new SelfProjectingValueProjector<HoldsProjectsItself, ProjectsItself>(accessor);\r\n\r\n            projection.As<IProjection<HoldsProjectsItself>>()\r\n                .Accessors()\r\n                .Single()\r\n                .ShouldBe(accessor);\r\n        }\r\n    }\r\n\r\n    public class ProjectsItself : IProjectMyself\r\n    {\r\n        public void Project(string attributeName, IMediaNode node)\r\n        {\r\n            throw new System.NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class HoldsProjectsItself\r\n    {\r\n        public ProjectsItself Itself { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Projections/SimpleValueSource.cs",
    "content": "using FubuCore.Reflection;\r\nusing FubuMVC.Core.Projections;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Projections\r\n{\r\n    [TestFixture]\r\n    public class SimpleValueSource\r\n    {\r\n        [Test]\r\n        public void retrieve_value_by_accessor()\r\n        {\r\n            var target = new SimpleValues<SimpleClass>(new SimpleClass{\r\n                Age = 37,\r\n                Name = \"Jeremy\"\r\n            });\r\n\r\n            var ageAccessor = ReflectionHelper.GetAccessor<SimpleClass>(x => x.Age);\r\n            var nameAccessor = ReflectionHelper.GetAccessor<SimpleClass>(x => x.Name);\r\n\r\n            target.ValueFor(ageAccessor).ShouldBe(37);\r\n            target.ValueFor(nameAccessor).ShouldBe(\"Jeremy\");\r\n        }\r\n    }\r\n\r\n    public class SimpleClass\r\n    {\r\n        public string Name { get; set; }\r\n        public int Age { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Projections/Using_a_custom_value_projector.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Projections;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Projections\r\n{\r\n    [TestFixture]\r\n    public class Using_a_custom_value_projector\r\n    {\r\n        [Test]\r\n        public void should_just_use_IValueProjector_when_overriden_in_accessor_projection()\r\n        {\r\n            var projection = AccessorProjection<CustomValueHolder, CustomValue>.For(x => x.Value);\r\n            projection.ProjectWith<CustomValueProjector>();\r\n\r\n            var target = new CustomValueHolder\r\n            {\r\n                Value = new CustomValue { Name = \"Jeremy\", Age = 38 }\r\n            };\r\n\r\n            var context = new ProjectionContext<CustomValueHolder>(new InMemoryServiceLocator(), target);\r\n\r\n            var node = new DictionaryMediaNode();\r\n            projection.As<IProjection<CustomValueHolder>>().Write(context, node);\r\n\r\n            node.Values[\"Value\"].As<IDictionary<string, object>>()[\"Name\"].ShouldBe(\"Jeremy\");\r\n            node.Values[\"Value\"].As<IDictionary<string, object>>()[\"Age\"].ShouldBe(38);\r\n        }\r\n\r\n        [Test]\r\n        public void should_just_use_IValueProjector_when_overriden_in_accessor_projection_and_can_override_the_attribute_name()\r\n        {\r\n            var projection = AccessorProjection<CustomValueHolder, CustomValue>.For(x => x.Value);\r\n            projection.ProjectWith<CustomValueProjector>();\r\n            projection.Name(\"different\");\r\n\r\n            var target = new CustomValueHolder\r\n            {\r\n                Value = new CustomValue { Name = \"Jeremy\", Age = 38 }\r\n            };\r\n\r\n            var context = new ProjectionContext<CustomValueHolder>(new InMemoryServiceLocator(), target);\r\n\r\n            var node = new DictionaryMediaNode();\r\n            projection.As<IProjection<CustomValueHolder>>().Write(context, node);\r\n\r\n            node.Values[\"different\"].As<IDictionary<string, object>>()[\"Name\"].ShouldBe(\"Jeremy\");\r\n            node.Values[\"different\"].As<IDictionary<string, object>>()[\"Age\"].ShouldBe(38);\r\n        }\r\n    }\r\n\r\n\r\n    public class CustomValueProjector : IValueProjector<CustomValue>\r\n    {\r\n        public void Project(string attributeName, CustomValue value, IMediaNode node)\r\n        {\r\n            var child = node.AddChild(attributeName);\r\n\r\n            child.SetAttribute(\"Name\", value.Name);\r\n            child.SetAttribute(\"Age\", value.Age);\r\n        }\r\n    }\r\n\r\n    public class CustomValueHolder\r\n    {\r\n        public CustomValue Value { get; set; }\r\n    }\r\n\r\n    public class CustomValue\r\n    {\r\n        public string Name { get; set; }\r\n        public int Age { get; set; }\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Tests/Projections/ValueSourceTester.cs",
    "content": "using FubuMVC.Core.Projections;\r\nusing FubuMVC.Core.Runtime;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Projections\r\n{\r\n    [TestFixture]\r\n    public class ValueSourceTester\r\n    {\r\n        [Test]\r\n        public void find_values_invokes_the_fubu_request()\r\n        {\r\n            var request = new InMemoryFubuRequest();\r\n            var address = new Address();\r\n\r\n            request.Set(address);\r\n\r\n            var source = new ValueSource<Address>(request);\r\n\r\n            source.FindValues().ShouldBeOfType<SimpleValues<Address>>()\r\n                .Subject.ShouldBeTheSameAs(address);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Projections/child_and_enumerable_children_sourced_by_services.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Projections;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Projections\r\n{\r\n    [TestFixture]\r\n    public class child_and_enumerable_children_sourced_by_services\r\n    {\r\n        private readonly Party theParty =\r\n            new Party\r\n            {\r\n                Name = \"Super boys\",\r\n                Land = \"Two Rivers\",\r\n                Leader = \"Rand Al'Thor\"\r\n            };\r\n\r\n        private IDictionary<string, object> project(Projection<Party> projection)\r\n        {\r\n            var node = new DictionaryMediaNode();\r\n            var services = new InMemoryServiceLocator();\r\n            services.Add(new HeroRepository());\r\n\r\n            var context = new ProjectionContext<Party>(services, theParty);\r\n\r\n            projection.As<IProjection<Party>>().Write(context, node);\r\n\r\n            return node.Values;\r\n        }\r\n\r\n        [Test]\r\n        public void inline_child()\r\n        {\r\n            var projection = new Projection<Party>();\r\n            projection.Value(x => x.Name);\r\n            projection\r\n                .ForAttribute(\"Leader\")\r\n                .WriteChild(x => x.Service<HeroRepository>().FindHero(x.Subject.Leader))\r\n                .Configure(x =>\r\n                {\r\n                    x.Value(o => o.FirstName);\r\n                    x.Value(o => o.LastName);\r\n                });\r\n\r\n            var values = project(projection);\r\n\r\n            var leader = values.Child(\"Leader\");\r\n            leader[\"FirstName\"].ShouldBe(\"Rand\");\r\n            leader[\"LastName\"].ShouldBe(\"Al'Thor\");\r\n        }\r\n\r\n        [Test]\r\n        public void use_predefined_projection_for_the_child()\r\n        {\r\n            var projection = new Projection<Party>();\r\n            projection.Value(x => x.Name);\r\n            projection\r\n                .ForAttribute(\"leader\")\r\n                .WriteChild(x => x.Service<HeroRepository>().FindHero(x.Subject.Leader))\r\n                .Include<HeroProjection>();\r\n\r\n            var values = project(projection);\r\n\r\n            var leader = values.Child(\"leader\");\r\n            leader[\"first\"].ShouldBe(\"Rand\");\r\n            leader[\"last\"].ShouldBe(\"Al'Thor\");\r\n        }\r\n\r\n        [Test]\r\n        public void use_inline_enumerable_found_by_service()\r\n        {\r\n            var projection = new Projection<Party>();\r\n            projection.Value(x => x.Name);\r\n            projection.ForAttribute(\"heros\").WriteEnumerable(x => x.Service<HeroRepository>().For(x.Subject.Land))\r\n                .DefineProjection(p =>\r\n                {\r\n                    p.Value(x => x.FirstName);\r\n                    p.Value(x => x.LastName);\r\n                });\r\n\r\n            var values = project(projection);\r\n            var heros = values.Children(\"heros\");\r\n            heros.Count().ShouldBe(3);\r\n            heros.ElementAt(1)[\"FirstName\"].ShouldBe(\"Mat\");\r\n            heros.ElementAt(2)[\"LastName\"].ShouldBe(\"Aybara\");\r\n        }\r\n\r\n        [Test]\r\n        public void use_pre_defined_projection_for_each_leaf_of_enumerable()\r\n        {\r\n            var projection = new Projection<Party>();\r\n            projection.Value(x => x.Name);\r\n            projection.ForAttribute(\"heros\").WriteEnumerable(x => x.Service<HeroRepository>().For(x.Subject.Land))\r\n                .UseProjection<HeroProjection>();\r\n\r\n            var values = project(projection);\r\n            var heros = values.Children(\"heros\");\r\n            heros.Count().ShouldBe(3);\r\n            heros.ElementAt(1)[\"first\"].ShouldBe(\"Mat\");\r\n            heros.ElementAt(2)[\"last\"].ShouldBe(\"Aybara\");\r\n        }\r\n    }\r\n\r\n    public class HeroProjection : Projection<Hero>\r\n    {\r\n        public HeroProjection()\r\n        {\r\n            Value(x => x.FirstName).Name(\"first\");\r\n            Value(x => x.LastName).Name(\"last\");\r\n        }\r\n    }\r\n\r\n    public class Party\r\n    {\r\n        public string Name { get; set; }\r\n        public string Leader { get; set; }\r\n        public string Land { get; set; }\r\n    }\r\n\r\n    public class Hero\r\n    {\r\n        public string FirstName { get; set; }\r\n        public string LastName { get; set; }\r\n    }\r\n\r\n    public class Land\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    public class HeroRepository\r\n    {\r\n        public IEnumerable<Hero> For(string land)\r\n        {\r\n            if (land == \"Andor\")\r\n            {\r\n                yield return new Hero { FirstName = \"Elayne\", LastName = \"Trakand\" };\r\n            }\r\n\r\n            if (land == \"Two Rivers\")\r\n            {\r\n                yield return new Hero { FirstName = \"Rand\", LastName = \"Al'Thor\" };\r\n                yield return new Hero { FirstName = \"Mat\", LastName = \"Cauthon\" };\r\n                yield return new Hero { FirstName = \"Perrin\", LastName = \"Aybara\" };\r\n            }\r\n        }\r\n\r\n        public Hero FindHero(string name)\r\n        {\r\n            var names = name.Split(' ');\r\n            return new Hero { FirstName = names.First(), LastName = names.Last() };\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Projections/pascal_to_camel_casing_names_policy.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Projections;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Projections\r\n{\r\n    [TestFixture]\r\n    public class pascal_to_camel_casing_names_policy\r\n    {\r\n        [Test]\r\n        public void with_the_camel_casing_correction()\r\n        {\r\n            var projection = new Projection<SomeTarget>();\r\n\r\n            projection.CamelCaseAttributeNames();\r\n            projection.Value(x => x.Name);\r\n            projection.Value(x => x.Age);\r\n            projection.Child(x => x.Child).Configure(_ => {\r\n                _.Value(x => x.Name);\r\n            });\r\n\r\n\r\n\r\n            var node = new DictionaryMediaNode();\r\n            var someTarget = new SomeTarget\r\n            {\r\n                Active = true,\r\n                Age = 40,\r\n                Name = \"Jeremy\",\r\n                Child =  new SomeChild{Name = \"Max\"}\r\n            };\r\n\r\n            projection.As<IProjection<SomeTarget>>().Write(new ProjectionContext<SomeTarget>(new InMemoryServiceLocator(), someTarget), node);\r\n\r\n            node.Values[\"name\"].ShouldBe(\"Jeremy\");\r\n            node.Values[\"age\"].ShouldBe(40);\r\n\r\n            node.Values[\"child\"].As<IDictionary<string, object>>()[\"name\"].ShouldBe(\"Max\");\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void with_the_normal_casing()\r\n        {\r\n            var projection = new Projection<SomeTarget>();\r\n\r\n            //projection.CamelCaseAttributeNames();\r\n            projection.Value(x => x.Name);\r\n            projection.Value(x => x.Age);\r\n            projection.Child(x => x.Child).Configure(_ =>\r\n            {\r\n                _.Value(x => x.Name);\r\n            });\r\n\r\n\r\n            var node = new DictionaryMediaNode();\r\n            var someTarget = new SomeTarget\r\n            {\r\n                Active = true,\r\n                Age = 40,\r\n                Name = \"Jeremy\",\r\n                Child = new SomeChild { Name = \"Max\" }\r\n            };\r\n\r\n            projection.As<IProjection<SomeTarget>>().Write(new ProjectionContext<SomeTarget>(new InMemoryServiceLocator(), someTarget), node);\r\n\r\n            node.Values[\"Name\"].ShouldBe(\"Jeremy\");\r\n            node.Values[\"Age\"].ShouldBe(40);\r\n\r\n            node.Values[\"Child\"].As<IDictionary<string, object>>()[\"Name\"].ShouldBe(\"Max\");\r\n\r\n        }\r\n    }\r\n\r\n    public class SomeTarget\r\n    {\r\n        public string Name { get; set; }\r\n        public int Age { get; set; }\r\n        public bool Active { get; set; }\r\n\r\n        public SomeChild Child { get; set; }\r\n    }\r\n\r\n    public class SomeChild\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ReflectionExtensionsTester.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class ReflectionExtensionsTester\r\n    {\r\n        private MethodInfo _method1;\r\n\r\n        [TestFixtureSetUp]\r\n        public void FixtureSetUp()\r\n        {\r\n            _method1 = ReflectionHelper.GetMethod<PureTestPurposes>(x => x.Bind(5));\r\n        }\r\n\r\n        [Test]\r\n        public void methods_from_different_types_should_not_match()\r\n        {\r\n            var method2 = ReflectionHelper.GetMethod<AnotherTestCase>(x => x.Bind(12));\r\n            _method1.Matches(method2).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void methods_with_different_names_should_not_match()\r\n        {\r\n            var method2 = ReflectionHelper.GetMethod<PureTestPurposes>(x => x.Bind2(20));\r\n            _method1.Matches(method2).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void methods_with_different_parameter_count_should_not_match()\r\n        {\r\n            var method2 = ReflectionHelper.GetMethod<PureTestPurposes>(x => x.SmartBind(20, \"Some format\"));\r\n            _method1.Matches(method2).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void method_should_match_itself()\r\n        {\r\n            _method1.Matches(_method1).ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void parameters_of_different_types_should_not_match()\r\n        {\r\n            var method = ReflectionHelper.GetMethod<PureTestPurposes>(x => x.SmartBind(20, \"Some format\"));\r\n            var intParameter = method.GetParameters().SingleOrDefault(p => p.Name == \"input\");\r\n            var stringParameter = method.GetParameters().SingleOrDefault(p => p.Name == \"format\");\r\n            intParameter.Matches(stringParameter).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void parameter_should_match_itself()\r\n        {\r\n            var parameter = _method1.GetParameters().SingleOrDefault(p => p.Name == \"input\");\r\n            parameter.Matches(parameter).ShouldBeTrue();\r\n        }\r\n    }\r\n\r\n    class PureTestPurposes\r\n    {\r\n        public void Bind(int input)\r\n        {\r\n            \r\n        }\r\n\r\n        public void Bind2(int input)\r\n        {\r\n            \r\n        }\r\n\r\n        public SomeResult SmartBind(int input, string format)\r\n        {\r\n            return new SomeResult();\r\n        }\r\n    }\r\n\r\n    class SomeResult\r\n    {\r\n         \r\n    }\r\n\r\n    class AnotherTestCase\r\n    {\r\n         public void Bind(int input)\r\n         {\r\n             \r\n         }\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/AccessOverridesFinderIntegratedTester.cs",
    "content": "﻿using AssemblyPackage;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing StructureMap;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class AccessOverridesFinderIntegratedTester\r\n    {\r\n        [Test]\r\n        public void accessor_rules_mechanics()\r\n        {\r\n            using (var runtime = FubuRuntime.Basic())\r\n            {\r\n                var container = runtime.Get<IContainer>();\r\n\r\n                container.DefaultRegistrationIs<AccessorRules, AccessorRules>();\r\n\r\n                var accessorRules = container.GetInstance<AccessorRules>();\r\n                \r\n                accessorRules\r\n                    .AllRulesFor<Target1, ColorRule>(x => x.Name)\r\n                    .ShouldHaveTheSameElementsAs(new ColorRule(\"orange\"));\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n    public class Target1Overrides : OverridesFor<Target1>\r\n    {\r\n        public Target1Overrides()\r\n        {\r\n            Property(x => x.Name).Add(new ColorRule(\"orange\"));\r\n            Property(x => x.Age).Add(new ColorRule(\"blue\"));\r\n        }\r\n    }\r\n\r\n    public class Target1\r\n    {\r\n        public string Name { get; set; }\r\n        public int Age { get; set; }\r\n    }\r\n\r\n    public class Target2\r\n    {\r\n        public string Name { get; set; }\r\n        public int Age { get; set; }\r\n    }\r\n\r\n    public interface IRule\r\n    {\r\n    }\r\n\r\n    public class ColorRule : IRule\r\n    {\r\n        private readonly string _color;\r\n\r\n        public ColorRule(string color)\r\n        {\r\n            _color = color;\r\n        }\r\n\r\n        public string Color\r\n        {\r\n            get { return _color; }\r\n        }\r\n\r\n        protected bool Equals(ColorRule other)\r\n        {\r\n            return string.Equals(_color, other._color);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != this.GetType()) return false;\r\n            return Equals((ColorRule) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return (_color != null ? _color.GetHashCode() : 0);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/ActionCallTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing FubuMVC.Tests.Registration.Conventions;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class ActionCallTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            action = ActionCall.For<ControllerTarget>(x => x.OneInZeroOut(null));\r\n        }\r\n\r\n        #endregion\r\n\r\n        private ActionCall action;\r\n\r\n        [Test]\r\n        public void append_to_descendent_when_next_is_not_null()\r\n        {\r\n            action = ActionCall.For<ControllerTarget>(x => x.OneInOneOut(null));\r\n            var wrapper = new Wrapper(typeof (FakeBehavior));\r\n            action.AddAfter(wrapper);\r\n\r\n            var next = new OutputNode(typeof (Model2));\r\n\r\n            action.AddToEnd(next);\r\n\r\n            action.Next.ShouldBeTheSameAs(wrapper);\r\n            wrapper.Next.ShouldBeTheSameAs(next);\r\n\r\n            action.ShouldHaveTheSameElementsAs(wrapper, next);\r\n        }\r\n\r\n        [Test]\r\n        public void append_when_next_is_null()\r\n        {\r\n            action = ActionCall.For<ControllerTarget>(x => x.OneInOneOut(null));\r\n            var next = new OutputNode(typeof (Model2));\r\n\r\n            action.AddToEnd(next);\r\n\r\n            action.Next.ShouldBeTheSameAs(next);\r\n        }\r\n\r\n        [Test]\r\n        public void enrich_puts_the_new_chain_node_directly_behind_the_call()\r\n        {\r\n            action = ActionCall.For<ControllerTarget>(x => x.OneInOneOut(null));\r\n            var next = new OutputNode(typeof (Model2));\r\n\r\n\r\n            action.AddToEnd(next);\r\n\r\n\r\n            var enricher = new Wrapper(typeof (StubBehavior));\r\n            action.AddAfter(enricher);\r\n\r\n            action.Next.ShouldBeTheSameAs(enricher);\r\n            enricher.Next.ShouldBeTheSameAs(next);\r\n        }\r\n\r\n        public class StubBehavior : IActionBehavior\r\n        {\r\n            public Task Invoke()\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public Task InvokePartial()\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void fail_to_build_an_action_by_type_for_a_type_with_more_than_one_method()\r\n        {\r\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(\r\n                () => { ActionCall.For(typeof (InvalidActionWithMultipleMethods)); });\r\n        }\r\n\r\n        [Test]\r\n        public void returns_T_should_tell_if_action_has_output_of_type()\r\n        {\r\n            action = ActionCall.For<ControllerTarget>(c => c.OneInOneOut(null));\r\n            action.Returns<Model2>().ShouldBeTrue();\r\n            action.Returns<object>().ShouldBeTrue();\r\n            action.Returns<Model1>().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void should_return_if_equal()\r\n        {\r\n            action.Equals(action).ShouldBeTrue();\r\n            action.Equals(null).ShouldBeFalse();\r\n            action.Equals((object) null).ShouldBeFalse();\r\n            action.Equals(\"\").ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void should_return_is_internal_fubu_action()\r\n        {\r\n            action.IsInternalFubuAction().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void successfully_build_an_action_from_a_handler_type()\r\n        {\r\n            var action = ActionCall.For(typeof (ValidActionWithOneMethod));\r\n            action.HandlerType.ShouldBe(typeof (ValidActionWithOneMethod));\r\n            action.Method.ShouldBe(typeof (ValidActionWithOneMethod).GetMethod(\"Go\"));\r\n        }\r\n\r\n        [Test]\r\n        public void to_definition_with_an_input_type()\r\n        {\r\n            ActionCall.For<ControllerTarget>(x => x.OneInOneOut(null))\r\n                .ToRouteDefinition()\r\n                .Input.ShouldBeOfType<RouteInput<Model1>>();\r\n        }\r\n\r\n        [Test]\r\n        public void to_definition_with_no_input_type()\r\n        {\r\n            var action = ActionCall.For<ControllerTarget>(x => x.ZeroInOneOut());\r\n            action.ToRouteDefinition().ShouldBeOfType<RouteDefinition>().Input.ShouldBeNull();\r\n        }\r\n\r\n    }\r\n\r\n    [TestFixture]\r\n    public class ActionCallValidationTester\r\n    {\r\n        [Test]\r\n        public void add_before_must_be_idempotent()\r\n        {\r\n            var action = ActionCall.For<ControllerTarget>(x => x.BogusMultiInput(null, null));\r\n            var newNode = new InputNode(typeof (Model1));\r\n\r\n            action.AddBefore(newNode);\r\n\r\n            action.PreviousNodes.Count().ShouldBe(1);\r\n\r\n            action.AddBefore(newNode);\r\n\r\n            action.PreviousNodes.Count().ShouldBe(1);\r\n        }\r\n\r\n        [Test]\r\n        public void do_not_append_a_duplicate_node()\r\n        {\r\n            var action = ActionCall.For<ControllerTarget>(x => x.BogusMultiInput(null, null));\r\n\r\n            // first one is ok\r\n            var newNode = new InputNode(typeof (InputModel));\r\n            action.AddToEnd(newNode);\r\n            action.Count().ShouldBe(1);\r\n\r\n            // try it again, the second should be ignored\r\n            action.AddToEnd(newNode);\r\n            action.Count().ShouldBe(1);\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void do_not_append_a_duplicate_node_2()\r\n        {\r\n            var action = ActionCall.For<ControllerTarget>(x => x.BogusMultiInput(null, null));\r\n\r\n            // first one is ok\r\n            var newNode = new InputNode(typeof (InputModel));\r\n            action.AddToEnd(newNode);\r\n            action.Count().ShouldBe(1);\r\n\r\n            action.AddToEnd(new Wrapper(typeof (Wrapper1)));\r\n\r\n            // try it again, the second should be ignored\r\n            action.AddToEnd(newNode);\r\n            action.Count().ShouldBe(2);\r\n            action.Count(x => x is InputNode).ShouldBe(1);\r\n        }\r\n\r\n        [Test]\r\n        public void should_not_throw_if_call_is_OMIOMO()\r\n        {\r\n            var action = ActionCall.For<ControllerTarget>(x => x.OneInOneOut(null));\r\n            action.Validate();\r\n        }\r\n\r\n        [Test]\r\n        public void should_not_throw_if_call_is_OMIZMO()\r\n        {\r\n            var action = ActionCall.For<ControllerTarget>(x => x.OneInZeroOut(null));\r\n            action.Validate();\r\n        }\r\n\r\n        [Test]\r\n        public void should_not_throw_if_call_is_ZMIOMO()\r\n        {\r\n            var action = ActionCall.For<ControllerTarget>(x => x.ZeroInOneOut());\r\n            action.Validate();\r\n        }\r\n\r\n        [Test]\r\n        public void should_throw_if_input_type_is_value_type()\r\n        {\r\n            var action = ActionCall.For<ControllerTarget>(x => x.BogusOneInput(9));\r\n            var ex = Exception<FubuException>.ShouldBeThrownBy(action.Validate).ShouldBeOfType<FubuException>();\r\n            ex.ErrorCode.ShouldBe(1006);\r\n        }\r\n\r\n        [Test]\r\n        public void should_throw_if_more_than_one_input_parameter()\r\n        {\r\n            var action = ActionCall.For<ControllerTarget>(x => x.BogusMultiInput(null, null));\r\n            var ex = Exception<FubuException>.ShouldBeThrownBy(action.Validate).ShouldBeOfType<FubuException>();\r\n            ex.ErrorCode.ShouldBe(1005);\r\n        }\r\n\r\n        [Test]\r\n        public void should_throw_if_return_type_is_value_type()\r\n        {\r\n            var action = ActionCall.For<ControllerTarget>(x => x.BogusReturn());\r\n            var ex = Exception<FubuException>.ShouldBeThrownBy(action.Validate).ShouldBeOfType<FubuException>();\r\n            ex.ErrorCode.ShouldBe(1004);\r\n        }\r\n    }\r\n\r\n    public class FakeNode : BehaviorNode\r\n    {\r\n        public override BehaviorCategory Category\r\n        {\r\n            get { return BehaviorCategory.Process; }\r\n        }\r\n\r\n        protected override IConfiguredInstance buildInstance()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n\r\n        public bool Equals(FakeNode other)\r\n        {\r\n            return !ReferenceEquals(null, other);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof (FakeNode)) return false;\r\n            return Equals((FakeNode) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n\r\n    public class FakeBehavior : IActionBehavior\r\n    {\r\n        public Task Invoke()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n\r\n    public class ValidActionWithOneMethod\r\n    {\r\n        public void Go()\r\n        {\r\n        }\r\n    }\r\n\r\n    public class InvalidActionWithMultipleMethods\r\n    {\r\n        public void Go()\r\n        {\r\n        }\r\n\r\n        public void Go2()\r\n        {\r\n        }\r\n    }\r\n\r\n    public class Model1\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    public class Model2\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    public class ControllerTarget\r\n    {\r\n        public string LastNameEntered;\r\n\r\n        public void ZeroInZeroOut()\r\n        {\r\n        }\r\n\r\n        public Task ZeroInTaskNoResultOut()\r\n        {\r\n            return new Task(() => { });\r\n        }\r\n\r\n        public Task<Model2> OneInTaskWithOutputOut(Model1 input)\r\n        {\r\n            return new Task<Model2>(() => new Model2\r\n            {\r\n                Name = input.Name\r\n            });\r\n        }\r\n\r\n        public Task<Model2> ZeroInTaskWithOutputOut()\r\n        {\r\n            return new Task<Model2>(() => new Model2\r\n            {\r\n                Name = \"ZeroInTaskWithOutputOut\"\r\n            });\r\n        }\r\n\r\n        public Task OneInTaskWithNoOutputOut(Model1 input)\r\n        {\r\n            return new Task(() => { LastNameEntered = input.Name; });\r\n        }\r\n\r\n        public Model1 ZeroInOneOut()\r\n        {\r\n            return new Model1\r\n            {\r\n                Name = \"ZeroInOneOut\"\r\n            };\r\n        }\r\n\r\n        public Model2 OneInOneOut(Model1 input)\r\n        {\r\n            return new Model2\r\n            {\r\n                Name = input.Name\r\n            };\r\n        }\r\n\r\n        public Model2 OneInOneOutPartial(Model1 input)\r\n        {\r\n            return new Model2\r\n            {\r\n                Name = input.Name\r\n            };\r\n        }\r\n\r\n        [FubuPartial]\r\n        public Model2 OneInOneOutWithPartialAttribute(Model1 input)\r\n        {\r\n            return new Model2\r\n            {\r\n                Name = input.Name\r\n            };\r\n        }\r\n\r\n        public void OneInZeroOut(Model1 input)\r\n        {\r\n            LastNameEntered = input.Name;\r\n        }\r\n\r\n        public bool BogusReturn()\r\n        {\r\n            return false;\r\n        }\r\n\r\n        public void BogusOneInput(int bogus)\r\n        {\r\n        }\r\n\r\n        public void BogusMultiInput(Model1 input1, Model2 input2)\r\n        {\r\n        }\r\n\r\n        public void GenericMethod<T>(List<T> list)\r\n        {\r\n        }\r\n\r\n        [Wonky]\r\n        public string get_wonky()\r\n        {\r\n            return \"I'm wonky\";\r\n        }\r\n    }\r\n\r\n    public class WonkyAttribute : ModifyChainAttribute\r\n    {\r\n        public override void Alter(ActionCallBase call)\r\n        {\r\n            call.ParentChain().InsertFirst(Wrapper.For<WonkyWrapper>());\r\n        }\r\n    }\r\n\r\n    public class WonkyWrapper : WrappingBehavior\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/ActionFilterTester.cs",
    "content": "﻿using FubuMVC.Core.Continuations;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class ActionFilterTester\r\n    {\r\n        private BehaviorGraph theGraph;\r\n\r\n        [TestFixtureSetUp]\r\n        public void SetUp()\r\n        {\r\n            theGraph = BehaviorGraph.BuildFrom(r => {\r\n                r.Actions.IncludeType<SomeEndpoint>();\r\n\r\n                r.Configure(g => {\r\n                    var chain = g.ChainFor<SomeEndpoint>(x => x.get_something(null));\r\n                    chain.Prepend(ActionFilter.For<SomeEndpoint>(x => x.Filter(null)));\r\n                });\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void the_filter_does_not_count_toward_input_or_resource_type()\r\n        {\r\n            var chain = theGraph.ChainFor<SomeEndpoint>(x => x.get_something(null));\r\n\r\n            chain.InputType().ShouldBe(typeof (RealInput));\r\n            chain.ResourceType().ShouldBe(typeof (RealOutput));\r\n        }\r\n\r\n        [Test]\r\n        public void still_get_the_continuation_director_behind_the_action_filter()\r\n        {\r\n            var chain = theGraph.ChainFor<SomeEndpoint>(x => x.get_something(null));\r\n            chain.FirstOrDefault(x => x is ActionFilter).Next\r\n                .ShouldBeOfType<ContinuationNode>();\r\n        }\r\n\r\n        [Test]\r\n        public void does_not_impact_a_normal_action_call()\r\n        {\r\n            var chain = theGraph.ChainFor<SomeEndpoint>(x => x.get_somewhere(null));\r\n            chain.ResourceType().ShouldBe(typeof (FubuContinuation));\r\n            chain.InputType().ShouldBe(typeof (RealInput));\r\n        }\r\n    }\r\n\r\n    public class SomeEndpoint\r\n    {\r\n        public RealOutput get_something(RealInput input)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public FubuContinuation get_somewhere(RealInput input)\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public FubuContinuation Filter(FilterInput input)\r\n        {\r\n            return FubuContinuation.NextBehavior();\r\n        }\r\n    }\r\n\r\n    public class FilterInput{}\r\n    public class RealInput{}\r\n    public class RealOutput{}\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/ActionLessView_chain_source_specs.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Urls;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Registration\n{\n    [TestFixture]\n    public class ActionLessView_chain_source_specs\n    {\n        [Test]\n        public void classes_marked_as_ViewSubject_are_partials()\n        {\n            using (var runtime = FubuRuntime.Basic())\n            {\n                runtime.Behaviors.ChainFor(typeof(FooSubject)).IsPartialOnly.ShouldBeTrue();\n                runtime.Behaviors.ChainFor(typeof(BarSubject)).IsPartialOnly.ShouldBeTrue();\n                runtime.Behaviors.ChainFor(typeof(BazSubject)).ShouldBeNull();\n\n                runtime.Behaviors.ChainFor(typeof(FooSubject)).OfType<OutputNode>().Any().ShouldBeTrue();\n                runtime.Behaviors.ChainFor(typeof(RouteSubject)).OfType<OutputNode>().Any().ShouldBeTrue();\n\n\n                runtime.Behaviors.ChainFor(typeof(BarSubject)).Tags.ShouldContain(\"ActionlessView\");\n                runtime.Behaviors.ChainFor(typeof(BarSubject)).UrlCategory.Category.ShouldBe(Categories.VIEW);\n\n                runtime.Behaviors.ChainFor(typeof (RouteSubject))\n                    .ShouldBeOfType<RoutedChain>()\n                    .GetRoutePattern().ShouldBe(\"route1/{Name}\");\n            }\n        }\n    }\n\n    [ViewSubject]\n    public class FooSubject { }\n\n    [ViewSubject]\n    public class BarSubject { }\n    public class BazSubject { }\n\n    [UrlPattern(\"route1/{Name}\")]\n    public class RouteSubject\n    {\n        public string Name { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/ActionMethodFilterTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Registration;\r\nusing NUnit.Framework;\r\nusing System.Linq;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class ActionMethodFilterTester\r\n    {\r\n        private List<MethodInfo> methods;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            var filter = new ActionMethodFilter();\r\n            methods = typeof(ActionMethodTarget).PublicInstanceMethods().Where(filter.Matches).ToList();\r\n        }\r\n\r\n        private bool contains(Expression<Action<ActionMethodTarget>> expression)\r\n        {\r\n            var method = ReflectionHelper.GetMethod(expression);\r\n            return methods.Any(x => x.Name == method.Name); // Never count on equality between reflection members\r\n        }\r\n\r\n        [Test]\r\n        public void does_not_include_object_methods()\r\n        {\r\n            contains(x => x.ToString()).ShouldBeFalse();\r\n            contains(x => x.GetHashCode()).ShouldBeFalse();\r\n            contains(x => x.Equals(null)).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void does_not_include_methods_from_marshal_by_ref_object()\r\n        {\r\n            contains(x => x.InitializeLifetimeService()).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void does_not_contain_the_dispose_method()\r\n        {\r\n            contains(x => x.Dispose()).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void does_not_contain_property_accessors()\r\n        {\r\n            methods.Any(x => x.Name.Contains(\"Name\")).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void does_contain_other_methods()\r\n        {\r\n            methods.Single().Name.ShouldBe(\"Good\");\r\n        }\r\n\r\n\r\n        public class ActionMethodTarget : MarshalByRefObject, IDisposable\r\n        {\r\n            public string Name { get; set; }\r\n            public void Dispose()\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public string Good() {\r\n                return \"hello\"; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Application_settings_alteration_wins_out_over_an_import.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class Application_settings_alteration_wins_out_over_an_import\r\n    {\r\n        [Test]\r\n        public void application_settings_wins()\r\n        {\r\n            var import = new FubuRegistry();\r\n            import.AlterSettings<FireflySettings>(o=> o.HowManyHaveYouCaught = 5);\r\n\r\n            var graph = BehaviorGraph.BuildFrom(x => {\r\n                x.AlterSettings<FireflySettings>(o => o.HowManyHaveYouCaught =11);\r\n\r\n                x.Import(import, string.Empty);\r\n            });\r\n\r\n            graph.Settings.Get<FireflySettings>()\r\n                .HowManyHaveYouCaught.ShouldBe(11);\r\n        }\r\n    }\r\n\r\n    public class FireflySettings\r\n    {\r\n        public int HowManyHaveYouCaught;\r\n    }\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/BehaviorGraphTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class BehaviorGraphTester\r\n    {\r\n        public class FakeController\r\n        {\r\n            public void Query(FakeInputModel model)\r\n            {\r\n            }\r\n        }\r\n\r\n        public class FakeInputModel\r\n        {\r\n        }\r\n\r\n        public class MyHomeController\r\n        {\r\n            public string ThisIsHome()\r\n            {\r\n                return string.Empty;\r\n            }\r\n\r\n            public string ThisIsAnotherAction(MyRequestModel request)\r\n            {\r\n                return string.Empty;\r\n            }\r\n\r\n            public string get_home()\r\n            {\r\n                return \"hello\";\r\n            }\r\n\r\n            public string get_other_home(MyOtherRequestModel model)\r\n            {\r\n                return \"hello\";\r\n            }\r\n        }\r\n\r\n        public class MyOtherRequestModel\r\n        {\r\n        }\r\n\r\n        public class MyRequestModel\r\n        {\r\n        }\r\n\r\n        [Test]\r\n        public void requires_session_state_is_true_by_default()\r\n        {\r\n            var graph = new BehaviorGraph();\r\n\r\n            graph.Settings.Get<SessionStateRequirement>().ShouldBe(SessionStateRequirement.RequiresSessionState);\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void find_home_is_not_set()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.DisableDefaultActionSource();\r\n                x.Actions.IncludeClassesSuffixedWithController();\r\n            });\r\n\r\n            graph.FindHomeChain().ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void should_remove_chain()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x => { x.Actions.IncludeClassesSuffixedWithController(); });\r\n\r\n            var chain = graph.ChainFor<MyHomeController>(x => x.ThisIsHome());\r\n            graph.RemoveChain(chain);\r\n\r\n            graph\r\n                .Chains\r\n                .ShouldNotContain(chain);\r\n        }\r\n\r\n        [Test]\r\n        public void explicit_version()\r\n        {\r\n            var graph = new BehaviorGraph();\r\n            graph.Version = \"2.3\";\r\n\r\n            graph.Version.ShouldBe(\"2.3\");\r\n        }\r\n\r\n        [Test]\r\n        public void derive_if_the_assembly_is_set()\r\n        {\r\n            var graph = new BehaviorGraph\r\n            {\r\n                ApplicationAssembly = Assembly.GetExecutingAssembly()\r\n            };\r\n\r\n\r\n            graph.Version.ShouldBe(Assembly.GetExecutingAssembly().GetName().Version.ToString());\r\n        }\r\n    }\r\n\r\n    public class WrappingBehavior : IActionBehavior\r\n    {\r\n        public Task Invoke()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class WrappingBehavior2 : IActionBehavior\r\n    {\r\n        public Task Invoke()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n\r\n    public class Action1\r\n    {\r\n        public void Go(ArgModel model)\r\n        {\r\n        }\r\n    }\r\n\r\n    public class Action2<T>\r\n    {\r\n        public void Go(ArgModel model)\r\n        {\r\n        }\r\n    }\r\n\r\n    public class ArgModel\r\n    {\r\n        public long Id { get; set; }\r\n    }\r\n\r\n    public class Foo\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/BehaviorNodeTester.cs",
    "content": "using System;\r\nusing System.Threading.Tasks;\r\nusing FubuCore.Binding;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Formatters;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class when_querying_a_behavior_node_for_has_after\r\n    {\r\n        private Wrapper node1;\r\n        private Wrapper node2;\r\n        private Wrapper node3;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            node1 = new Wrapper(typeof(FakeJsonBehavior));\r\n            node2 = new Wrapper(typeof(FakeJsonBehavior));\r\n            node3 = new Wrapper(typeof(FakeJsonBehavior));\r\n            node1.AddToEnd(node2);\r\n            node1.AddToEnd(node3);\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void find_the_follower_positive()\r\n        {\r\n            var found = MockRepository.GenerateMock<Action<BehaviorNode>>();\r\n            var missing = MockRepository.GenerateMock<Action>();\r\n            var search = new BehaviorSearch(n => ReferenceEquals(n, node3)){\r\n                OnFound = found,\r\n                OnMissing = missing\r\n            };\r\n\r\n            node1.ForFollowingBehavior(search);\r\n\r\n            found.AssertWasCalled(x => x.Invoke(node3));\r\n            missing.AssertWasNotCalled(x => x.Invoke());\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void find_the_follower_positive_2()\r\n        {\r\n            var found = MockRepository.GenerateMock<Action<BehaviorNode>>();\r\n            var missing = MockRepository.GenerateMock<Action>();\r\n            var search = new BehaviorSearch(n => ReferenceEquals(n, node3))\r\n            {\r\n                OnFound = found,\r\n                OnMissing = missing\r\n            };\r\n\r\n            node2.ForFollowingBehavior(search);\r\n\r\n            found.AssertWasCalled(x => x.Invoke(node3));\r\n            missing.AssertWasNotCalled(x => x.Invoke());\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void find_the_follower_negative()\r\n        {\r\n            var found = MockRepository.GenerateMock<Action<BehaviorNode>>();\r\n            var missing = MockRepository.GenerateMock<Action>();\r\n            var search = new BehaviorSearch(n => false)\r\n            {\r\n                OnFound = found,\r\n                OnMissing = missing\r\n            };\r\n\r\n            node1.ForFollowingBehavior(search);\r\n\r\n            found.AssertWasNotCalled(x => x.Invoke(null), x => x.IgnoreArguments());\r\n            missing.AssertWasCalled(x => x.Invoke());\r\n        }\r\n\r\n    }\r\n\r\n    public class FakeJsonBehavior : IActionBehavior\r\n    {\r\n        public FakeJsonBehavior(IFormatter writer, IFubuRequest request, IRequestData data)\r\n        {\r\n            Writer = writer;\r\n            Request = request;\r\n            Data = data;\r\n        }\r\n\r\n        public IFormatter Writer { get; set; }\r\n        public IFubuRequest Request { get; set; }\r\n        public IRequestData Data { get; set; }\r\n        public Task Invoke()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/ActionSourceTester.cs",
    "content": "using System;\r\nusing System.Reflection;\r\nusing AssemblyPackage;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class ActionSourceTester\r\n    {\r\n        private Lazy<BehaviorGraph> _graph;\r\n        private ActionSource source;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            source = new ActionSource();\r\n            _graph =\r\n                new Lazy<BehaviorGraph>(() => BehaviorGraph.BuildFrom(r =>\r\n                {\r\n                    r.Actions.DisableDefaultActionSource();\r\n                    r.Actions.FindWith(source);\r\n                }));\r\n        }\r\n\r\n        private BehaviorGraph theResultingGraph\r\n        {\r\n            get { return _graph.Value; }\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void uses_the_application_assembly_if_none_is_specified()\r\n        {\r\n            source.IncludeClassesSuffixedWithController();\r\n\r\n            theResultingGraph.ApplicationAssembly.GetName()\r\n                .Name.ShouldBe(Assembly.GetExecutingAssembly().GetName().Name);\r\n\r\n            theResultingGraph.ChainFor<OneController>(x => x.Query(null))\r\n                .ShouldNotBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void does_not_use_The_application_assembly_if_other_assemblies_are_specified()\r\n        {\r\n            source.Applies.ToAssemblyContainingType<AssemblyEndpoint>();\r\n\r\n            theResultingGraph.ChainFor<OneController>(x => x.Query(null))\r\n                .ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void does_find_actions_from_other_assemblies()\r\n        {\r\n            source.Applies.ToAssemblyContainingType<AssemblyEndpoint>();\r\n            source.IncludeClassesSuffixedWithEndpoint();\r\n\r\n            theResultingGraph.ChainFor<AssemblyEndpoint>(x => x.get_hello())\r\n                .ShouldNotBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void match_by_endpoint()\r\n        {\r\n            source.IncludeClassesSuffixedWithEndpoint();\r\n\r\n            theResultingGraph.ChainFor<OneEndpoint>(x => x.Report()).ShouldNotBeNull();\r\n            theResultingGraph.ChainFor<OneController>(x => x.Report()).ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void match_by_controller_suffix()\r\n        {\r\n            source.IncludeClassesSuffixedWithController();\r\n\r\n            theResultingGraph.ChainFor<OneEndpoint>(x => x.Report()).ShouldBeNull();\r\n            theResultingGraph.ChainFor<OneController>(x => x.Report()).ShouldNotBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void match_by_name()\r\n        {\r\n            source.IncludeTypesNamed(x => x.StartsWith(\"One\"));\r\n\r\n            theResultingGraph.ChainFor<OneEndpoint>(x => x.Report()).ShouldNotBeNull();\r\n            theResultingGraph.ChainFor<OneController>(x => x.Report()).ShouldNotBeNull();\r\n            theResultingGraph.ChainFor<TwoEndpoint>(x => x.Report()).ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void match_by_types()\r\n        {\r\n            source.IncludeTypes(x => x.Name.StartsWith(\"One\"));\r\n\r\n            theResultingGraph.ChainFor<OneEndpoint>(x => x.Report()).ShouldNotBeNull();\r\n            theResultingGraph.ChainFor<OneController>(x => x.Report()).ShouldNotBeNull();\r\n            theResultingGraph.ChainFor<TwoEndpoint>(x => x.Report()).ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void match_by_types_implementing()\r\n        {\r\n            source.IncludeTypesImplementing<IPattern>();\r\n\r\n            theResultingGraph.ChainFor<DifferentPatternClass>(x => x.Report())\r\n                .ShouldNotBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void include_methods()\r\n        {\r\n            source.IncludeClassesSuffixedWithController();\r\n            source.IncludeMethods(x => x.Name.StartsWith(\"Q\"));\r\n\r\n            theResultingGraph.ChainFor<OneController>(x => x.Query(null)).ShouldNotBeNull();\r\n            theResultingGraph.ChainFor<OneController>(x => x.Report()).ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void exclude_types()\r\n        {\r\n            source.IncludeClassesSuffixedWithController();\r\n            source.ExcludeTypes(x => x == typeof (TwoController));\r\n\r\n            theResultingGraph.ChainFor<OneController>(x => x.Query(null)).ShouldNotBeNull();\r\n            theResultingGraph.ChainFor<TwoController>(x => x.Query(null)).ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void exclude_methods()\r\n        {\r\n            source.IncludeClassesSuffixedWithController();\r\n            source.ExcludeMethods(x => x.Name.StartsWith(\"Q\"));\r\n\r\n            theResultingGraph.ChainFor<OneController>(x => x.Query(null)).ShouldBeNull();\r\n            theResultingGraph.ChainFor<OneController>(x => x.Report()).ShouldNotBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void ignore_methods_declared_by()\r\n        {\r\n            source.IncludeClassesSuffixedWithController();\r\n            source.IgnoreMethodsDeclaredBy<OneController>();\r\n\r\n            theResultingGraph.ChainFor<ChildController>(x => x.Report()).ShouldBeNull();\r\n            theResultingGraph.ChainFor<ChildController>(x => x.ChildQuery(null)).ShouldNotBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void exclude_non_concrete_types()\r\n        {\r\n            source.IncludeTypes(x => x.CanBeCastTo<IPattern>());\r\n            source.ExcludeNonConcreteTypes();\r\n\r\n            theResultingGraph.ChainFor<IPattern>(x => x.Query(null))\r\n                .ShouldBeNull();\r\n        }\r\n    }\r\n\r\n    public class SimpleInputModel\r\n    {\r\n    }\r\n\r\n    public class SimpleOutputModel\r\n    {\r\n    }\r\n\r\n    public class DifferentPatternClass : IPattern\r\n    {\r\n        public string Name { get; set; }\r\n\r\n        public void Go()\r\n        {\r\n        }\r\n\r\n        public SimpleOutputModel Report()\r\n        {\r\n            return new SimpleOutputModel();\r\n        }\r\n\r\n        public SimpleOutputModel Query(SimpleInputModel model)\r\n        {\r\n            return new SimpleOutputModel();\r\n        }\r\n\r\n        private void Go2()\r\n        {\r\n        }\r\n\r\n        public void Go<T>()\r\n        {\r\n        }\r\n    }\r\n\r\n    public interface IPattern\r\n    {\r\n        void Go();\r\n        SimpleOutputModel Report();\r\n        SimpleOutputModel Query(SimpleInputModel model);\r\n    }\r\n\r\n    public class OneEndpoint\r\n    {\r\n        public SimpleOutputModel Report()\r\n        {\r\n            return new SimpleOutputModel();\r\n        }\r\n    }\r\n\r\n    public class TwoEndpoint\r\n    {\r\n        public SimpleOutputModel Report()\r\n        {\r\n            return new SimpleOutputModel();\r\n        }\r\n    }\r\n\r\n    public class OneController : IPattern\r\n    {\r\n        public void Go()\r\n        {\r\n        }\r\n\r\n\r\n        public SimpleOutputModel Report()\r\n        {\r\n            return new SimpleOutputModel();\r\n        }\r\n\r\n        public SimpleOutputModel Query(SimpleInputModel model)\r\n        {\r\n            return new SimpleOutputModel();\r\n        }\r\n\r\n        public static void MethodThatShouldNotBeHere()\r\n        {\r\n        }\r\n    }\r\n\r\n    public class ChildController : OneController\r\n    {\r\n        public SimpleOutputModel ChildQuery(SimpleInputModel model)\r\n        {\r\n            return new SimpleOutputModel();\r\n        }\r\n    }\r\n\r\n    public class TwoController\r\n    {\r\n        public void Go()\r\n        {\r\n        }\r\n\r\n        public SimpleOutputModel Report()\r\n        {\r\n            return new SimpleOutputModel();\r\n        }\r\n\r\n        public SimpleOutputModel Query(SimpleInputModel model)\r\n        {\r\n            return new SimpleOutputModel();\r\n        }\r\n    }\r\n\r\n    public class ThreeController\r\n    {\r\n        public void Go()\r\n        {\r\n        }\r\n\r\n        public SimpleOutputModel Report()\r\n        {\r\n            return new SimpleOutputModel();\r\n        }\r\n\r\n        public SimpleOutputModel Query(SimpleInputModel model)\r\n        {\r\n            return new SimpleOutputModel();\r\n        }\r\n    }\r\n\r\n    public class TestActionCall : ActionCall\r\n    {\r\n        public TestActionCall(Type handlerType, MethodInfo method) : base(handlerType, method)\r\n        {\r\n        }\r\n\r\n        protected override IConfiguredInstance buildInstance()\r\n        {\r\n            return new SmartInstance<TestActionBehavior>();\r\n        }\r\n\r\n    }\r\n\r\n    public class TestActionBehavior : BasicBehavior\r\n    {\r\n        public TestActionBehavior(PartialBehavior partialBehavior) : base(partialBehavior)\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/AllowRoleAttributeTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq.Expressions;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Security;\r\nusing FubuMVC.Core.Security.Authorization;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class AllowRoleAttributeTester\r\n    {\r\n        private BehaviorGraph graph;\r\n\r\n        [TestFixtureSetUp]\r\n        public void SetUp()\r\n        {\r\n            graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions\r\n                .IncludeType<AllowRoleController>()\r\n                .IncludeType<AllowRoleController2>();\r\n            });\r\n        }\r\n\r\n        private IEnumerable<string> rolesFor<T>(Expression<Action<T>> method)\r\n        {\r\n            var chain = graph.ChainFor(method);\r\n            return chain.Authorization.AllowedRoles();\r\n        }\r\n\r\n        private void shouldBeNoRolesFor<T>(Expression<Action<T>> method)\r\n        {\r\n            graph.ChainFor(method).Top.Any(x => x is AuthorizationNode).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void should_be_no_roles_on_method_actions_with_no_attribute_when_the_controller_has_not_attributes()\r\n        {\r\n            shouldBeNoRolesFor<AllowRoleController>(x => x.M1());\r\n            shouldBeNoRolesFor<AllowRoleController>(x => x.M4());\r\n            shouldBeNoRolesFor<AllowRoleController>(x => x.M5());\r\n        }\r\n\r\n        [Test]\r\n        public void handle_one_role_for_a_method()\r\n        {\r\n            rolesFor<AllowRoleController>(x => x.M3()).ShouldHaveTheSameElementsAs(\"R3\");\r\n        }\r\n\r\n        [Test]\r\n        public void handle_multiple_roles_for_a_method()\r\n        {\r\n            rolesFor<AllowRoleController>(x => x.M2()).ShouldHaveTheSameElementsAs(\"R1\", \"R2\");\r\n        }\r\n\r\n        [Test]\r\n        public void roles_with_an_attribute_on_the_handler_class_itself()\r\n        {\r\n            rolesFor<AllowRoleController2>(x => x.M1()).ShouldHaveTheSameElementsAs(\"R1\", \"R2\");\r\n            rolesFor<AllowRoleController2>(x => x.M2()).ShouldHaveTheSameElementsAs(\"R1\", \"R2\");\r\n            rolesFor<AllowRoleController2>(x => x.M3()).ShouldHaveTheSameElementsAs(\"R1\", \"R2\");\r\n            rolesFor<AllowRoleController2>(x => x.M4()).ShouldHaveTheSameElementsAs(\"R1\", \"R2\");\r\n            rolesFor<AllowRoleController2>(x => x.M5()).ShouldHaveTheSameElementsAs(\"R1\", \"R2\");\r\n        }\r\n    }\r\n\r\n    public class AllowRoleController\r\n    {\r\n\r\n        public void M1(){}\r\n        [AllowRole(\"R1\", \"R2\")]\r\n        public void M2(){}\r\n\r\n        [AllowRole(\"R3\")]\r\n        public void M3(){}\r\n        public void M4(){}\r\n        public void M5(){}\r\n    }\r\n\r\n    [AllowRole(\"R1\", \"R2\")]\r\n    public class AllowRoleController2\r\n    {\r\n\r\n        public void M1() { }\r\n        public void M2() { }\r\n        public void M3() { }\r\n        public void M4() { }\r\n        public void M5() { }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/AuthorizedByAttributeConventionTester.cs",
    "content": "using System;\r\nusing System.Linq.Expressions;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Security;\r\nusing FubuMVC.Core.Security.Authorization;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class AuthorizedByAttributeConventionTester\r\n    {\r\n        private BehaviorGraph graph;\r\n\r\n        [TestFixtureSetUp]\r\n        public void SetUp()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.Actions.IncludeType<AuthorizedByAttributeConventionController>();\r\n\r\n            graph = BehaviorGraph.BuildFrom(registry);\r\n        }\r\n\r\n        private BehaviorChain chainFor(Expression<Action<AuthorizedByAttributeConventionController>> action)\r\n        {\r\n            return graph.ChainFor(action);\r\n        }\r\n\r\n        [Test]\r\n        public void get_policy_type_when_it_is_an_authorization_policy()\r\n        {\r\n            AuthorizedByAttribute.RuleTypeFor(typeof (Input1), typeof (AuthorizationRule1))\r\n                .ShouldBe(typeof (AuthorizationRule1));\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void no_authorization_rules_on_a_method_not_decorated_with_attributes()\r\n        {\r\n            chainFor(x => x.MethodWithNoAttributes()).Authorization.HasRules().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void authorization_rule_for_a_single_policy_on_a_method()\r\n        {\r\n            chainFor(x => x.MethodWithOnePolicy()).Authorization.Policies.Select(x => x.GetType())\r\n                .ShouldHaveTheSameElementsAs(typeof(AuthorizationRule1));\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void authorization_rules_for_multiple_policies_on_a_method()\r\n        {\r\n            chainFor(x => x.MethodWithMultiplePolicies()).Authorization.Policies.Select(x => x.GetType())\r\n                .ShouldHaveTheSameElementsAs(typeof(AuthorizationRule1), typeof(AuthorizationRule2));\r\n        }\r\n\r\n    }\r\n\r\n    [TestFixture]\r\n    public class AuthorizedByAttributeConventionAtTheClassLevel\r\n    {\r\n        private BehaviorGraph graph;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.Actions.IncludeType<AuthorizedController2>();\r\n\r\n            graph = BehaviorGraph.BuildFrom(registry);\r\n        }\r\n\r\n        private BehaviorChain chainFor(Expression<Action<AuthorizedController2>> action)\r\n        {\r\n            return graph.ChainFor(action);\r\n        }\r\n\r\n        [Test]\r\n        public void rules_should_be_picked_up_from_handler_type()\r\n        {\r\n            chainFor(x => x.MethodWithNoAttributes()).Authorization.Policies.Select(x => x.GetType())\r\n                .ShouldHaveTheSameElementsAs(typeof(AuthorizationRule2));\r\n        }\r\n\r\n        [Test]\r\n        public void rules_in_combination_of_method_and_handler_type()\r\n        {\r\n            var rules = chainFor(x => x.MethodWithOnePolicy()).Authorization.Policies.Select(x => x.GetType()).ToList();\r\n            rules\r\n                .ShouldHaveTheSameElementsAs(typeof(AuthorizationRule2), typeof(AuthorizationRule1));\r\n        }\r\n    }\r\n\r\n    [AuthorizedBy(typeof(AuthorizationRule2))]\r\n    public class AuthorizedController2\r\n    {\r\n        public void MethodWithNoAttributes() { }\r\n\r\n        [AuthorizedBy(typeof(AuthorizationRule1))]\r\n        public void MethodWithOnePolicy() { }\r\n\r\n        public void MethodWithOneRule(Input1 input)\r\n        {\r\n\r\n        }\r\n    }\r\n\r\n    public class AuthorizedByAttributeConventionController\r\n    {\r\n        public void MethodWithNoAttributes() { }\r\n\r\n        [AuthorizedBy(typeof(AuthorizationRule1))]\r\n        public void MethodWithOnePolicy(){}\r\n\r\n        [AuthorizedBy(typeof(AuthorizationRule1), typeof(AuthorizationRule2))]\r\n        public void MethodWithMultiplePolicies() { }\r\n\r\n        public void MethodWithOneRule(Input1 input)\r\n        {\r\n            \r\n        }\r\n\r\n        public void MethodWithMultipleRules(Input1 input)\r\n        {\r\n\r\n        }\r\n\r\n        [AuthorizedBy(typeof(AuthorizationRule1), typeof(AuthorizationRule2))]\r\n        public void MixedMethod(Input1 input)\r\n        {\r\n            \r\n        }\r\n    }\r\n\r\n    public class Input1{}\r\n    public class Input2{}\r\n\r\n\r\n\r\n    public class AuthorizationRule1 : IAuthorizationPolicy\r\n    {\r\n        public AuthorizationRight RightsFor(IFubuRequestContext request)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class AuthorizationRule2 : IAuthorizationPolicy\r\n    {\r\n        public AuthorizationRight RightsFor(IFubuRequestContext request)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class NotAnAuthorizationRule{}\r\n\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/BehaviorGraphExtensions.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Resources.Conneg;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    public static class BehaviorGraphExtensions\r\n    {\r\n        public static BehaviorChain AddChainForWriter<T>(this BehaviorGraph graph, object writer)\r\n        {\r\n            var chain = new BehaviorChain();\r\n            var node = new OutputNode(typeof (T));\r\n            node.Add((IMediaWriter) writer);\r\n\r\n            chain.AddToEnd(node);\r\n\r\n            graph.AddChain(chain);\r\n\r\n            return chain;\r\n        }\r\n\r\n        public static void WrapAllWith<T>(this BehaviorGraph graph) where T : IActionBehavior\r\n        {\r\n            graph.Chains.Each(x => x.WrapWith<T>());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/ContinuationHandlerConventionTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Continuations;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class ContinuationHandlerConventionTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.IncludeType<ContinuationHandlerController>();\r\n            });\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n        private BehaviorGraph graph;\r\n\r\n\r\n        public class ContinuationHandlerController\r\n        {\r\n            public string LastNameEntered;\r\n\r\n            public FubuContinuation GoNext()\r\n            {\r\n                return null;\r\n            }\r\n\r\n            public FubuContinuation GoAfter(Model1 input)\r\n            {\r\n                return null;\r\n            }\r\n\r\n\r\n            public Model1 ZeroInOneOut()\r\n            {\r\n                return new Model1\r\n                {\r\n                    Name = \"ZeroInOneOut\"\r\n                };\r\n            }\r\n\r\n            public Model2 OneInOneOut(Model1 input)\r\n            {\r\n                return new Model2\r\n                {\r\n                    Name = input.Name\r\n                };\r\n            }\r\n\r\n            public void OneInZeroOut(Model1 input)\r\n            {\r\n                LastNameEntered = input.Name;\r\n            }\r\n\r\n            public Redirectable RedirectedMethod()\r\n            {\r\n                return new Redirectable();\r\n            }\r\n\r\n            public class Redirectable : IRedirectable\r\n            {\r\n                public FubuContinuation RedirectTo { get; set; }\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void should_attach_continuation_handlers_to_actions_that_return_an_IRedirectable()\r\n        {\r\n            graph.ChainFor<ContinuationHandlerController>(x => x.RedirectedMethod())\r\n                .Any(x => x is ContinuationNode)\r\n                .ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void should_not_attach_continuation_handlers_to_actions_that_do_not_return_continuations()\r\n        {\r\n            graph.ChainFor<ContinuationHandlerController>(x => x.ZeroInOneOut()).Top.Any(x => x is ContinuationNode).\r\n                ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void\r\n            the_actions_that_return_continuations_should_have_a_continuation_handler_right_behind_the_action_in_the_chain\r\n            ()\r\n        {\r\n            graph.ChainFor<ContinuationHandlerController>(x => x.GoNext()).FirstCall().Next.ShouldBeOfType\r\n                <ContinuationNode>();\r\n            graph.ChainFor<ContinuationHandlerController>(x => x.GoAfter(null)).FirstCall().Next.ShouldBeOfType\r\n                <ContinuationNode>();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/CustomConventionIntegratedTester.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class CustomConventionIntegratedTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.IncludeType<JsonOutputAttachmentTesterController>();\r\n\r\n                x.Policies.Local.Add<TestCustomConvention>();\r\n            });\r\n        }\r\n\r\n        #endregion\r\n\r\n        private BehaviorGraph graph;\r\n\r\n        [Test]\r\n        public void should_apply_custom_conventions()\r\n        {\r\n            var behavior =\r\n                graph.ChainFor<JsonOutputAttachmentTesterController>(x => x.StringifyHtml()).Calls.First().Next;\r\n            behavior.ShouldBeOfType<OutputNode>();\r\n        }\r\n    }\r\n\r\n    public class TestCustomConvention : IConfigurationAction\r\n    {\r\n        public void Configure(BehaviorGraph graph)\r\n        {\r\n            graph.Actions().Each(call => call.AddToEnd(new OutputNode(typeof (object))));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/DefaultConnegOutputIsAppliedToAnyEndpointWithoutAnyPriorOutputTester.cs",
    "content": "using FubuMVC.Core;\r\nusing FubuMVC.Core.Json;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Formatters;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class DefaultConnegOutputIsAppliedToAnyEndpointWithoutAnyPriorOutputTester\r\n    {\r\n        public class SomeInput\r\n        {\r\n        }\r\n\r\n        public class SomeResource\r\n        {\r\n        }\r\n\r\n        public class SomeController\r\n        {\r\n            public SomeResource Go(SomeInput input)\r\n            {\r\n                return new SomeResource();\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void applies_conneg()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.Actions.IncludeType<SomeController>();\r\n\r\n            var chain = BehaviorGraph.BuildFrom(registry).ChainFor<SomeController>(x => x.Go(null));\r\n\r\n            chain.Output.Add(new NewtonsoftJsonFormatter());\r\n            chain.Output.Add(new XmlFormatter());\r\n\r\n            chain.Input.CanRead(MimeType.HttpFormMimetype).ShouldBeTrue();\r\n            chain.Input.CanRead(MimeType.Json).ShouldBeTrue();\r\n            chain.Input.CanRead(MimeType.Xml).ShouldBeTrue();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/DefaultRouteConventionBasedUrlPolicyTester.cs",
    "content": "using System.Reflection;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Conventions;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Runtime;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Registration.Conventions\n{\n    [TestFixture]\n    public class DefaultRouteConventionBasedUrlPolicyTester\n    {\n        private MethodInfo _method;\n        private DefaultRouteConventionBasedUrlPolicy _policy;\n\n        [SetUp]\n        public void SetUp()\n        {\n            _method = ReflectionHelper.GetMethod<TestController>(c => c.SomeAction(null));\n            _policy = new DefaultRouteConventionBasedUrlPolicy();\n        }\r\n\r\n        [Test]\r\n        public void integrated_test()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(r =>\r\n            {\r\n                r.Actions.IncludeType<HomeEndpoint>();\r\n            });\r\n\r\n            graph.ChainFor<HomeEndpoint>(x => x.Index()).As<RoutedChain>().Route.Pattern.ShouldBe(\"\");\r\n        }\n\n        [Test]\n        public void should_build_a_route_definition_from_the_action_call()\n        {\n            var call = new ActionCall(typeof(HomeEndpoint), _method);\n            _policy.Build(call).ShouldNotBeNull();\n        }\n\n        [Test]\n        public void should_match_the_home_endpoint_index_method()\n        {\n            var index = ReflectionHelper.GetMethod<HomeEndpoint>(c => c.Index());\n            var call = new ActionCall(typeof(HomeEndpoint), index);\n            _policy.Matches(call).ShouldBeTrue();\n        }\n\n        [Test]\n        public void should_not_match_another_method()\n        {\n            var anotherMethod = ReflectionHelper.GetMethod<HomeEndpoint>(c => c.Action());\n            var call = new ActionCall(typeof(HomeEndpoint), anotherMethod);\n            _policy.Matches(call).ShouldBeFalse();\n        }\n\n        [Test]\n        public void should_not_match_another_controller()\n        {\n            var anotherMethod = ReflectionHelper.GetMethod<AnotherEndpoint>(c => c.Index());\n            var call = new ActionCall(typeof(HomeEndpoint), anotherMethod);\n            _policy.Matches(call).ShouldBeFalse();\n        } \n\n        private class HomeEndpoint\n        {\n            public void Index(){}\n            public void Action(){}\n        }\n\n        private class AnotherEndpoint\n        {\n            public void Index() { }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/DefaultUrlPolicyTester.cs",
    "content": "﻿using System;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration.Conventions;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing FubuMVC.Core.Resources.PathBased;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class DefaultUrlPolicyTester\r\n    {\r\n\r\n        private IRouteDefinition routeFor<T>(Expression<Action<T>> expression)\r\n        {\r\n            var call = ActionCall.For(expression);\r\n            return new DefaultUrlPolicy().Build(call);\r\n        }\r\n\r\n        [Test]\r\n        public void build_route_for_endpoint_method()\r\n        {\r\n            var route = routeFor<SomethingEndpoint>(x => x.Go(null));\r\n            route.Pattern.ShouldBe(\"something/go/{Name}/{Age}\");\r\n\r\n            route.Input.QueryParameters.Single().Name.ShouldBe(\"Level\");\r\n\r\n            route.Input.RouteParameters.Select(x => x.Name)\r\n                .ShouldHaveTheSameElementsAs(\"Name\", \"Age\");\r\n        }\r\n\r\n        [Test]\r\n        public void build_route_for_endpoints_method()\r\n        {\r\n            var route = routeFor<SomethingEndpoints>(x => x.Go(null));\r\n            route.Pattern.ShouldBe(\"something/go/{Name}/{Age}\");\r\n\r\n            route.Input.QueryParameters.Single().Name.ShouldBe(\"Level\");\r\n\r\n            route.Input.RouteParameters.Select(x => x.Name)\r\n                .ShouldHaveTheSameElementsAs(\"Name\", \"Age\");\r\n        }\r\n\r\n        [Test]\r\n        public void build_route_for_controller_method()\r\n        {\r\n            var route = routeFor<SomethingController>(x => x.Go(null));\r\n            route.Pattern.ShouldBe(\"something/go/{Name}/{Age}\");\r\n\r\n            route.Input.QueryParameters.Single().Name.ShouldBe(\"Level\");\r\n\r\n            route.Input.RouteParameters.Select(x => x.Name)\r\n                .ShouldHaveTheSameElementsAs(\"Name\", \"Age\");\r\n        }\r\n\r\n        [Test]\r\n        public void build_route_for_Get_method()\r\n        {\r\n            var route = routeFor<SomethingEndpoint>(x => x.Get());\r\n            route.Pattern.ShouldBe(\"something\");\r\n            route.AllowedHttpMethods.Single().ShouldBe(\"GET\");\r\n        }\r\n\r\n        [Test]\r\n        public void build_route_for_get_method_with_input()\r\n        {\r\n            var route = routeFor<SomethingEndpoints>(x => x.Get(null));\r\n            route.Pattern.ShouldBe(\"something/{Name}/{Age}\");\r\n            route.AllowedHttpMethods.Single().ShouldBe(\"GET\");\r\n        }\r\n\r\n        [Test]\r\n        public void resource_path()\r\n        {\r\n            var route = routeFor<SomethingEndpoint>(x => x.Write(null));\r\n            route.Pattern.ShouldBe(\"something/write/\" + ResourcePath.UrlSuffix);\r\n        }\r\n\r\n\r\n        public class SomethingEndpoint\r\n        {\r\n            public void Go(SomeInput input)\r\n            {\r\n                \r\n            }\r\n\r\n            public string Write(ResourcePath path)\r\n            {\r\n                return \"anything\";\r\n            }\r\n\r\n            public string Get()\r\n            {\r\n                return \"Foo\";\r\n            }\r\n        }\r\n\r\n        public class SomethingEndpoints\r\n        {\r\n            public void Go(SomeInput input)\r\n            {\r\n\r\n            }\r\n\r\n            public string Get(SomeInput input)\r\n            {\r\n                return \"Bar\";\r\n            }\r\n        }\r\n\r\n        public class SomethingController\r\n        {\r\n            public void Go(SomeInput input)\r\n            {\r\n\r\n            }\r\n        }\r\n\r\n        public class SomeInput\r\n        {\r\n            [RouteInput]\r\n            public string Name { get; set; }\r\n            public string Direction { get; set; }\r\n            \r\n            [QueryString]\r\n            public int Level { get; set; }\r\n            \r\n            [RouteInput]\r\n            public int Age { get; set; }\r\n        }\r\n    }\r\n\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/EndpointActionSourceTester.cs",
    "content": "using System.Linq;\r\nusing System.Reflection;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Registration;\r\nusing HtmlTags;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class EndpointActionSourceTester\r\n    {\r\n        [Test]\r\n        public void only_finds_methods_that_follow_the_right_pattern_and_are_not_on_object()\r\n        {\r\n            var actions =\r\n                new EndpointActionSource().As<IActionSource>().FindActions(Assembly.GetExecutingAssembly()).Result();\r\n\r\n            var matching = actions.Where(x => x.HandlerType == typeof (HomeEndpoint)).Select(x => x.Description);\r\n            matching\r\n                .ShouldHaveTheSameElementsAs(\"HomeEndpoint.Index() : HtmlDocument\");\r\n        }\r\n\r\n        [Test]\r\n        public void finds_methods_case_insensitively()\r\n        {\r\n            var actions = new EndpointActionSource().As<IActionSource>().FindActions(Assembly.GetExecutingAssembly());\r\n\r\n            var matching =\r\n                actions.Result().Where(x => x.HandlerType == typeof (WeirdEndPoint)).Select(x => x.Description);\r\n\r\n            matching\r\n                .ShouldHaveTheSameElementsAs(\"WeirdEndPoint.get_something() : String\");\r\n        }\r\n    }\r\n\r\n    public class HomeEndpoint\r\n    {\r\n        public HtmlDocument Index()\r\n        {\r\n            return new HtmlDocument();\r\n        }\r\n    }\r\n\r\n    public class WeirdEndPoint\r\n    {\r\n        public string get_something()\r\n        {\r\n            return \"something\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/HtmlTagAndDocumentHandlerConventionTester.cs",
    "content": "using System.Linq;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Tests.Ajax;\r\nusing Shouldly;\r\nusing HtmlTags;\r\nusing NUnit.Framework;\r\nusing OutputNode = FubuMVC.Core.Resources.Conneg.OutputNode;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class HtmlTagAndDocumentHandlerConventionTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.IncludeType<TagController>();\r\n            });\r\n        }\r\n\r\n        #endregion\r\n\r\n        private BehaviorGraph graph;\r\n\r\n        [Test]\r\n        public void action_that_returns_HtmlDocument_should_output_to_html()\r\n        {\r\n            var outputNode = graph.ChainFor<TagController>(x => x.BuildDoc()).Outputs.First().ShouldBeOfType<OutputNode>();\r\n            outputNode\r\n                .ResourceType.ShouldBe(typeof(HtmlDocument));\r\n\r\n            outputNode.Writes(MimeType.Html).ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void action_that_returns_HtmlTag_should_output_to_html()\r\n        {\r\n            var outputNode =\r\n                graph.ChainFor<TagController>(x => x.BuildTag()).Outputs.First().ShouldBeOfType<OutputNode>();\r\n            outputNode.Writes(MimeType.Html).ShouldBeTrue();\r\n            outputNode.ResourceType.ShouldBe(typeof(HtmlTag));\r\n        }\r\n    }\r\n\r\n    public class TagController\r\n    {\r\n        public string GoSomewhere()\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public HtmlTag BuildTag()\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public HtmlDocument BuildDoc()\r\n        {\r\n            return null;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/MethodToUrlBuilderTester.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Conventions;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class MethodToUrlBuilderIntegratedTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.IncludeType<MethodAction>();\r\n            });\r\n\r\n            theChain = graph.ChainFor<MethodAction>(x => x.Get_cases_from_Start_to_End(null))\r\n                .As<RoutedChain>();\r\n        }\r\n\r\n        #endregion\r\n\r\n        private RoutedChain theChain;\r\n\r\n        [Test]\r\n        public void the_chain_has_the_http_method_constraint()\r\n        {\r\n            theChain.Route.AllowedHttpMethods.ShouldHaveTheSameElementsAs(\"GET\");\r\n        }\r\n\r\n        [Test]\r\n        public void the_chain_has_the_url_pattern()\r\n        {\r\n            theChain.Route.Pattern.ShouldBe(\"cases/from/{Start}/to/{End}\");\r\n        }\r\n\r\n        [Test]\r\n        public void the_route_has_route_input()\r\n        {\r\n            var input = theChain.Route.Input.ShouldBeOfType<RouteInput<MethodInput>>();\r\n            input.ShouldNotBeNull();\r\n\r\n            var parameters = new RouteParameters();\r\n            parameters[\"Start\"] = \"2\";\r\n            parameters[\"End\"] = \"5\";\r\n\r\n            input.CreateUrlFromParameters(parameters).ShouldBe(\"cases/from/2/to/5\");\r\n        }\r\n    }\r\n\r\n    public class MethodAction\r\n    {\r\n        public string Get_cases_from_Start_to_End(MethodInput input)\r\n        {\r\n            return \"stuff\";\r\n        }\r\n    }\r\n\r\n    public class MethodInput\r\n    {\r\n        public int Start { get; set; }\r\n        public int End { get; set; }\r\n    }\r\n\r\n\r\n    [TestFixture]\r\n    public class MethodToUrlBuilderTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theProperties = new List<string>();\r\n            theRoute = new RouteDefinition(\"\");\r\n        }\r\n\r\n        #endregion\r\n\r\n        private List<string> theProperties;\r\n        private RouteDefinition theRoute;\r\n\r\n        [Test]\r\n        public void allow_get_as_a_prefix()\r\n        {\r\n            MethodToUrlBuilder.Alter(theRoute, \"GetPath\", theProperties);\r\n\r\n            theRoute.Pattern.ShouldBe(\"getpath\");\r\n            theRoute.AllowedHttpMethods.Any().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void create_http_constraint_for_get()\r\n        {\r\n            MethodToUrlBuilder.Alter(theRoute, \"Get_path\", theProperties);\r\n\r\n            theRoute.Pattern.ShouldBe(\"path\");\r\n            theRoute.AllowedHttpMethods.ShouldHaveTheSameElementsAs(\"GET\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_http_constraint_for_post()\r\n        {\r\n            MethodToUrlBuilder.Alter(theRoute, \"post_path\", theProperties);\r\n\r\n            theRoute.Pattern.ShouldBe(\"path\");\r\n            theRoute.AllowedHttpMethods.ShouldHaveTheSameElementsAs(\"POST\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_http_constraint_for_put()\r\n        {\r\n            MethodToUrlBuilder.Alter(theRoute, \"Put_path\", theProperties);\r\n\r\n            theRoute.Pattern.ShouldBe(\"path\");\r\n            theRoute.AllowedHttpMethods.ShouldHaveTheSameElementsAs(\"PUT\");\r\n        }\r\n\r\n        [Test]\r\n        public void http_verb_only_should_not_modify_route()\r\n        {\r\n            const string originalRoute = \"base/route\";\r\n            theRoute.Append(originalRoute);\r\n\r\n            MethodToUrlBuilder.Alter(theRoute, \"get\", theProperties);\r\n\r\n            theRoute.Pattern.ShouldBe(originalRoute);\r\n            theRoute.AllowedHttpMethods.ShouldContain(\"GET\");\r\n        }\r\n\r\n        [Test]\r\n        public void matches_negative()\r\n        {\r\n            MethodToUrlBuilder.Matches(\"somethingelse\").ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void matches_positive()\r\n        {\r\n            MethodToUrlBuilder.Matches(\"get_this\").ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void multiple_substitutions()\r\n        {\r\n            theProperties.Add(\"Start\");\r\n            theProperties.Add(\"End\");\r\n\r\n            MethodToUrlBuilder.Alter(theRoute, \"cases_from_Start_to_End\", theProperties);\r\n\r\n            theRoute.Pattern.ShouldBe(\"cases/from/{Start}/to/{End}\");\r\n        }\r\n\r\n        [Test]\r\n        public void multiple_substitutions_and_folders_and_constraint()\r\n        {\r\n            theProperties.Add(\"Start\");\r\n            theProperties.Add(\"End\");\r\n\r\n            MethodToUrlBuilder.Alter(theRoute, \"get_cases_from_Start_to_End\", theProperties);\r\n\r\n            theRoute.Pattern.ShouldBe(\"cases/from/{Start}/to/{End}\");\r\n            theRoute.AllowedHttpMethods.ShouldContain(\"GET\");\r\n        }\r\n\r\n        [Test]\r\n        public void use_separator_and_substitution_for_matching_property()\r\n        {\r\n            theProperties.Add(\"Input1\");\r\n            MethodToUrlBuilder.Alter(theRoute, \"path_Input1_folder\", theProperties);\r\n\r\n            theRoute.Pattern.ShouldBe(\"path/{Input1}/folder\");\r\n        }\r\n\r\n        [Test]\r\n        public void use_separators_for_underscores_if_not_a_route_input()\r\n        {\r\n            MethodToUrlBuilder.Alter(theRoute, \"path_folder1_folder2\", theProperties);\r\n\r\n            theRoute.Pattern.ShouldBe(\"path/folder1/folder2\");\r\n        }\r\n\r\n        [Test]\r\n        public void two_underscores_in_a_row_are_considered_to_be_an_underscore()\r\n        {\r\n            MethodToUrlBuilder.Alter(theRoute, \"path_folder1__folder2\", theProperties);\r\n            theRoute.Pattern.ShouldBe(\"path/folder1/_folder2\");\r\n        }\r\n\r\n        [Test]\r\n        public void three_underscores_in_a_row_are_a_dash()\r\n        {\r\n            MethodToUrlBuilder.Alter(theRoute, \"path_folder1___folder2\", theProperties);\r\n            theRoute.Pattern.ShouldBe(\"path/folder1-folder2\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/OutputIntegratedAttachmentTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Formatters;\r\nusing FubuMVC.Tests.Behaviors;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing OutputNode = FubuMVC.Core.Resources.Conneg.OutputNode;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class OutputIntegratedAttachmentTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.IncludeType<JsonOutputAttachmentTesterController>();\r\n            });\r\n        }\r\n\r\n        #endregion\r\n\r\n        private BehaviorGraph graph;\r\n\r\n\r\n        private BehaviorChain chainFor(Expression<Action<JsonOutputAttachmentTesterController>> expression)\r\n        {\r\n            return graph.ChainFor(expression);\r\n        }\r\n\r\n        private BehaviorChain chainFor(Expression<Func<JsonOutputAttachmentTesterController, object>> expression)\r\n        {\r\n            return graph.ChainFor(expression);\r\n        }\r\n\r\n        [Test]\r\n        public void automatically_output_methds_that_are_decorated_with_JsonEndpoint_to_json()\r\n        {\r\n            var behavior =\r\n                graph.ChainFor<JsonOutputAttachmentTesterController>(x => x.Decorated()).Calls.First().Next;\r\n            behavior.ShouldBeOfType<OutputNode>().ResourceType.ShouldBe(typeof (ViewModel1));\r\n        }\r\n\r\n        [Test]\r\n        public void automatically_output_methods_that_return_string_as_text_if_there_is_not_output()\r\n        {\r\n            var behavior =\r\n                graph.ChainFor<JsonOutputAttachmentTesterController>(x => x.Stringify()).Calls.First().Next;\r\n\r\n            behavior.ShouldBeOfType<OutputNode>().Writes(MimeType.Text).ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void methods_that_do_not_take_in_a_json_message_should_not_have_a_json_deserialization_behavior()\r\n        {\r\n            chainFor(x => x.NotJson1(null)).Top.Any(x => x is InputNode).ShouldBeFalse();\r\n            chainFor(x => x.NotJson2(null)).Top.Any(x => x is InputNode).ShouldBeFalse();\r\n            chainFor(x => x.NotJson3(null)).Top.Any(x => x is InputNode).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void methods_that_return_a_json_message_should_output_json()\r\n        {\r\n            var chain = chainFor(x => x.OutputJson1());\r\n            chain.Output.Writes(MimeType.Json);\r\n\r\n            chainFor(x => x.OutputJson2()).Top.Any(x => x.GetType() == typeof (OutputNode)).ShouldBeTrue();\r\n            chainFor(x => x.OutputJson3()).Top.Any(x => x.GetType() == typeof (OutputNode)).ShouldBeTrue();\r\n        }\r\n\r\n    }\r\n\r\n    public class CrudReport\r\n    {\r\n    }\r\n\r\n    public class SpecialCrudReport : CrudReport\r\n    {\r\n    }\r\n\r\n    public class ContinuationClass\r\n    {\r\n    }\r\n\r\n    public class JsonOutputAttachmentTesterController\r\n    {\r\n        public CrudReport Report()\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public SpecialCrudReport Report2()\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public string Stringify()\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public string StringifyHtml()\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public ContinuationClass WhatNext()\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public Output Output()\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public HtmlTagOutput GetFake()\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public ViewModel1 Decorated()\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public void JsonInput1(Json1 json)\r\n        {\r\n        }\r\n\r\n        public void JsonInput2(Json2 json)\r\n        {\r\n        }\r\n\r\n        public void JsonInput3(Json3 json)\r\n        {\r\n        }\r\n\r\n        public void NotJson1(NotJson1 message)\r\n        {\r\n        }\r\n\r\n        public void NotJson2(NotJson2 message)\r\n        {\r\n        }\r\n\r\n        public void NotJson3(NotJson3 message)\r\n        {\r\n        }\r\n\r\n        public Json1 OutputJson1()\r\n        {\r\n            return new Json1();\r\n        }\r\n\r\n        public Json2 OutputJson2()\r\n        {\r\n            return new Json2();\r\n        }\r\n\r\n        public Json3 OutputJson3()\r\n        {\r\n            return new Json3();\r\n        }\r\n\r\n        public NotJson1 NotOutputJson1()\r\n        {\r\n            return new NotJson1();\r\n        }\r\n\r\n        public NotJson2 NotOutputJson2()\r\n        {\r\n            return new NotJson2();\r\n        }\r\n\r\n        public NotJson3 NotOutputJson3()\r\n        {\r\n            return new NotJson3();\r\n        }\r\n    }\r\n\r\n    public class ViewModel1\r\n    {\r\n        \r\n    }\r\n\r\n    public class Json1\r\n    {\r\n    }\r\n\r\n    public class Json2\r\n    {\r\n    }\r\n\r\n    public class Json3\r\n    {\r\n    }\r\n\r\n    public class NotJson1\r\n    {\r\n    }\r\n\r\n    public class NotJson2\r\n    {\r\n    }\r\n\r\n    public class NotJson3\r\n    {\r\n    }\r\n\r\n    public class HtmlTagOutput\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/PartialOnlyConventionTester.cs",
    "content": "using FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Conventions;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class PartialOnlyConventionTester\r\n    {\r\n\r\n        [Test]\r\n        public void integrated_with_fubu_registry()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.Actions.IncludeType<PartialController>();\r\n\r\n            var graph = BehaviorGraph.BuildFrom(registry);\r\n\r\n            graph.ChainFor<PartialController>(x => x.Go(null)).IsPartialOnly.ShouldBeFalse();\r\n            graph.ChainFor<PartialController>(x => x.GoPartial(null)).IsPartialOnly.ShouldBeTrue();\r\n        }\r\n\r\n\r\n        public class Input1{}\r\n\r\n        public class PartialController\r\n        {\r\n            public void Go(Input1 input){}\r\n            public void GoPartial(Input1 input){}\r\n        }\r\n\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/PartialRegistrationConventionTester.cs",
    "content": "using FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class PartialRegistrationConventionTester\r\n    {\r\n        private BehaviorGraph theGraph;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theGraph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.IncludeType<PartialsController>()\r\n                    .IncludeType<SomePartialsController>();\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void actions_from_a_handler_class_marked_with_the_FubuPartial_attribute()\r\n        {\r\n            theGraph.ChainFor<PartialsController>(x => x.A(null)).IsPartialOnly.ShouldBeTrue();\r\n            theGraph.ChainFor<PartialsController>(x => x.B(null)).IsPartialOnly.ShouldBeTrue();\r\n            theGraph.ChainFor<PartialsController>(x => x.C(null)).IsPartialOnly.ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void actions_marked_with_FubuPartial_should_be_partial_only()\r\n        {\r\n            theGraph.ChainFor<SomePartialsController>(x => x.A(null)).IsPartialOnly.ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void actions_not_marked_with_FubuPartial_are_not_partials()\r\n        {\r\n            theGraph.ChainFor<SomePartialsController>(x => x.B(null)).IsPartialOnly.ShouldBeFalse();\r\n            theGraph.ChainFor<SomePartialsController>(x => x.C(null)).IsPartialOnly.ShouldBeFalse();\r\n        }\r\n\r\n\r\n        [FubuPartial]\r\n        public class PartialsController\r\n        {\r\n            public void A(Model1 model){}\r\n            public void B(Model1 model){}\r\n            public void C(Model1 model){}\r\n        }\r\n\r\n        \r\n        public class SomePartialsController\r\n        {\r\n            [FubuPartial]\r\n            public void A(Model1 model) { }\r\n            public void B(Model1 model) { }\r\n            public void C(Model1 model) { }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/RegisterAllSettingsTester.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing NUnit.Framework;\r\nusing StructureMap;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class RegisterAllSettingsTester\r\n    {\r\n        [Test]\r\n        public void all_explicitly_changed_settings_should_get_registered_as_a_service()\r\n        {\r\n            var registry = new FubuRegistry();\r\n\r\n            var oneSettings = new OneSettings();\r\n            registry.ReplaceSettings(oneSettings);\r\n            var twoSettings = new TwoSettings();\r\n            registry.ReplaceSettings(twoSettings);\r\n            var threeSettings = new ThreeSettings();\r\n            registry.ReplaceSettings(threeSettings);\r\n\r\n            using (var runtime = registry.ToRuntime())\r\n            {\r\n                var container = runtime.Get<IContainer>();\r\n                container.DefaultRegistrationIs(oneSettings);\r\n                container.DefaultRegistrationIs(twoSettings);\r\n                container.DefaultRegistrationIs(threeSettings);\r\n            }\r\n        }\r\n    }\r\n\r\n    public class OneSettings\r\n    {\r\n    }\r\n\r\n    public class TwoSettings\r\n    {\r\n    }\r\n\r\n    public class ThreeSettings\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/RenderStatusCodeConventionTester.cs",
    "content": "using System;\r\nusing System.Net;\r\nusing FubuMVC.Core;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class RenderStatusCodeConventionTester\r\n    {\r\n        [Test, Explicit(\"Just for now\")]\r\n        public void just_redo_all_of_this()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n}\r\n\r\nnamespace RestfulStatusCodeServices\r\n{\r\n    public class InputMessage \r\n    {\r\n    }\r\n\r\n    public class RestfulService\r\n    {\r\n        public HttpStatusCode Action1(InputMessage message)\r\n        {\r\n            // perform the action\r\n            return HttpStatusCode.OK;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/ReorderBehaviorsPolicyTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Conventions;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n\r\n\r\n    [TestFixture]\r\n    public class ReorderBehaviorsPolicyTester\r\n    {\r\n        private BehaviorGraph graph;\r\n        private BehaviorChain lastChain;\r\n        private ReorderBehaviorsPolicy policy;\r\n        private IList<BehaviorNode> nodes;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            graph = new BehaviorGraph();\r\n            lastChain = graph.AddChain();\r\n            nodes = null;\r\n\r\n            policy = new ReorderBehaviorsPolicy();\r\n        }\r\n\r\n        private IList<BehaviorNode> orderedNodes\r\n        {\r\n            get\r\n            {\r\n                if (nodes == null)\r\n                {\r\n                    policy.Configure(graph);\r\n                    nodes = lastChain.ToList();\r\n                }\r\n\r\n                return nodes;\r\n            }\r\n        }\r\n\r\n        private void addWrapper<T>() where T : IActionBehavior\r\n        {\r\n            var wrapper = new Wrapper(typeof (T));\r\n            lastChain.AddToEnd(wrapper);\r\n        }\r\n\r\n        private void addNode<T>() where T : BehaviorNode, new()\r\n        {\r\n            var node = new T();\r\n            lastChain.AddToEnd(node);\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void do_nothing_to_a_chain_if_the_order_is_correct()\r\n        {\r\n            addNode<Node1>();\r\n            addNode<Node2>();\r\n            addNode<Node3>();\r\n\r\n            policy.ThisNodeMustBeAfter<Node3>();\r\n            policy.ThisNodeMustBeBefore<Node1>();\r\n\r\n            orderedNodes[0].ShouldBeOfType<Node1>();\r\n            orderedNodes[1].ShouldBeOfType<Node2>();\r\n            orderedNodes[2].ShouldBeOfType<Node3>();\r\n        }\r\n\r\n        [Test]\r\n        public void reorder_nodes_if_the_order_is_incorrect()\r\n        {\r\n            addNode<Node2>();\r\n            addNode<Node3>();\r\n            addNode<Node1>();\r\n\r\n            policy.ThisNodeMustBeAfter<Node2>();\r\n            policy.ThisNodeMustBeBefore<Node1>();\r\n\r\n            var nodes = orderedNodes;\r\n            nodes[0].ShouldBeOfType<Node1>();\r\n            nodes[1].ShouldBeOfType<Node2>();\r\n            nodes[2].ShouldBeOfType<Node3>();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void reorder_nodes_if_the_order_is_incorrect_2()\r\n        {\r\n            addNode<Node2>();\r\n            addNode<Node3>();\r\n            addNode<Node1>();\r\n\r\n            policy.ThisNodeMustBeAfter<Node3>();\r\n            policy.ThisNodeMustBeBefore<Node1>();\r\n\r\n            orderedNodes[0].ShouldBeOfType<Node2>();\r\n            orderedNodes[1].ShouldBeOfType<Node1>();\r\n            orderedNodes[2].ShouldBeOfType<Node3>();\r\n        }\r\n\r\n        [Test]\r\n        public void reorder_by_wrappers_positive()\r\n        {\r\n            addNode<Node1>();\r\n            addNode<Node2>();\r\n            addWrapper<Wrapper1>();\r\n\r\n            policy.ThisNodeMustBeAfter<Node1>();\r\n            policy.ThisWrapperBeBefore<Wrapper1>();\r\n\r\n            orderedNodes[0].ShouldBeOfType<Wrapper>().BehaviorType.ShouldBe(typeof (Wrapper1));\r\n            orderedNodes[1].ShouldBeOfType<Node1>();\r\n            orderedNodes[2].ShouldBeOfType<Node2>();\r\n        }\r\n\r\n        [Test]\r\n        public void reorder_by_wrappers_positive_2()\r\n        {\r\n            \r\n            addNode<Node2>();\r\n            addWrapper<Wrapper1>();\r\n            addNode<Node1>();\r\n\r\n            policy.ThisNodeMustBeBefore<Node1>();\r\n            policy.ThisWrapperMustBeAfter<Wrapper1>();\r\n\r\n            orderedNodes[0].ShouldBeOfType<Node2>();\r\n            orderedNodes[1].ShouldBeOfType<Node1>();\r\n            orderedNodes[2].ShouldBeOfType<Wrapper>().BehaviorType.ShouldBe(typeof(Wrapper1));\r\n            \r\n            \r\n        }\r\n\r\n\r\n        [Test]\r\n        public void reorder_by_wrappers_negative()\r\n        {\r\n            addWrapper<Wrapper1>();\r\n            addNode<Node1>();\r\n            addNode<Node2>();\r\n            \r\n\r\n            policy.ThisNodeMustBeAfter<Node1>();\r\n            policy.ThisWrapperBeBefore<Wrapper1>();\r\n\r\n            orderedNodes[0].ShouldBeOfType<Wrapper>().BehaviorType.ShouldBe(typeof(Wrapper1));\r\n            orderedNodes[1].ShouldBeOfType<Node1>();\r\n            orderedNodes[2].ShouldBeOfType<Node2>();\r\n        }\r\n\r\n\r\n    }\r\n\r\n    public class FakeBehavior : IActionBehavior\r\n    {\r\n        public Task Invoke()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class Node1 : BehaviorNode\r\n    {\r\n        public override BehaviorCategory Category\r\n        {\r\n            get { throw new NotImplementedException(); }\r\n        }\r\n\r\n        protected override IConfiguredInstance buildInstance()\r\n        {\r\n            return new SmartInstance<FakeBehavior>();\r\n        }\r\n    }\r\n\r\n    public class Node2 : BehaviorNode\r\n    {\r\n        public override BehaviorCategory Category\r\n        {\r\n            get { throw new NotImplementedException(); }\r\n        }\r\n\r\n        protected override IConfiguredInstance buildInstance()\r\n        {\r\n            return new SmartInstance<FakeBehavior>();\r\n        }\r\n\r\n    }\r\n\r\n    public class Node3 : BehaviorNode\r\n    {\r\n        public override BehaviorCategory Category\r\n        {\r\n            get { throw new NotImplementedException(); }\r\n        }\r\n\r\n        protected override IConfiguredInstance buildInstance()\r\n        {\r\n            return new SmartInstance<FakeBehavior>();\r\n        }\r\n\r\n    }\r\n\r\n    public class Wrapper1 : IActionBehavior\r\n    {\r\n        public Task Invoke()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class Wrapper2 : IActionBehavior\r\n    {\r\n        public Task Invoke()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n\r\n    public class Wrapper3 : IActionBehavior\r\n    {\r\n        public Task Invoke()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/TypeScanningIntegratedTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing FubuCore.Reflection;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.DSL;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Tests.Behaviors;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing TestPackage1.FakeControllers;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class TypeScanningIntegratedTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        [Test]\r\n        public void pick_up_behaviors_from_another_assembly()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.DisableDefaultActionSource();\r\n                x.Actions.FindBy(o =>\r\n                {\r\n                    o.Applies.ToAssemblyContainingType<ClassInAnotherAssembly>();\r\n                    o.IncludeTypesNamed(name => name.EndsWith(\"Controller\"));\r\n                });\r\n            });\r\n\r\n            graph.Chains.Count().ShouldBeGreaterThan(0);\r\n\r\n            graph.Chains\r\n                .Where(x => x.Calls.Any())\r\n                .Where(x => x.FirstCall().HandlerType.Assembly != typeof (BehaviorGraph).Assembly)\r\n                .Each(x =>\r\n                {\r\n                    x.Calls.First().HandlerType.Name.EndsWith(\"Controller\");\r\n                    x.Calls.First().HandlerType.Assembly.ShouldBe(typeof (ClassInAnotherAssembly).Assembly);\r\n                });\r\n        }\r\n\r\n        [Test]\r\n        public void pick_up_behaviors_from_this_assembly()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x => x.Actions.IncludeClassesSuffixedWithController());\r\n\r\n            graph.Chains.Count().ShouldBeGreaterThan(0);\r\n            graph.Chains.OfType<RoutedChain>().Where(x => x.Calls.Any()).Each(x => x.Calls.First().HandlerType.Name.EndsWith(\"Controller\"));\r\n        }\r\n\r\n        [Test]\r\n        public void TypeMethodPolicyTester()\r\n        {\r\n            var filter = new CompositeFilter<MethodInfo>();\r\n            var policy = new TypeMethodPolicy<IRouter>(filter);\r\n            policy.Include(x => x.Go());\r\n\r\n            filter.Matches(ReflectionHelper.GetMethod<Router1>(x => x.Go())).ShouldBeTrue();\r\n            filter.Matches(ReflectionHelper.GetMethod<Router1>(x => x.CanGo())).ShouldBeFalse();\r\n        }\r\n    }\r\n\r\n\r\n    public interface IMarker\r\n    {\r\n    }\r\n\r\n    public class ScannedMarkedClass : IMarker\r\n    {\r\n        public Output Go()\r\n        {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    public class SpecialScannedClass\r\n    {\r\n        public Output Go()\r\n        {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    public interface IRouter\r\n    {\r\n        void Go();\r\n        bool CanGo();\r\n    }\r\n\r\n    public class Router1 : IRouter\r\n    {\r\n        public void Go()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public bool CanGo()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class Router2 : IRouter\r\n    {\r\n        public void Go()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public bool CanGo()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class Router3 : IRouter\r\n    {\r\n        public void Go()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public bool CanGo()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/UrlPatternAttributeOnViewModelPolicyTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing FubuMVC.Core.Runtime;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class UrlPatternAttributeOnViewModelPolicyTester\r\n    {\r\n        [Test]\r\n        public void should_build_a_route_for_view_model_marked_with_UrlPattern()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Configure(g =>\r\n                {\r\n                    var c = new RoutedChain(new RouteDefinition(\"foo/{Name}\"), typeof (Foo), typeof (Foo));\r\n                    c.AddToEnd(new OutputNode(typeof (Foo)));\r\n\r\n                    g.AddChain(c);\r\n                });\r\n            });\r\n\r\n            var chain = graph.Chains.First(x => x.ResourceType() == typeof (Foo))\r\n                .As<RoutedChain>();\r\n            chain.Route.Pattern.ShouldBe(\"foo/{Name}\");\r\n\r\n            chain.Route.Input.ShouldBeOfType<RouteInput<Foo>>()\r\n                .RouteParameters.Single().Name.ShouldBe(\"Name\");\r\n        }\r\n    }\r\n\r\n    [UrlPattern(\"foo/{Name}\")]\r\n    public class Foo\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    public class FooWriter : IMediaWriter<Foo>\r\n    {\r\n        public Task Write(string mimeType, IFubuRequestContext context, Foo resource)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public IEnumerable<string> Mimetypes { get; private set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/UrlRegistryCategoryConventionTester.cs",
    "content": "using FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Conventions;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Querying;\r\nusing FubuMVC.Core.Urls;\r\nusing FubuMVC.Tests.Urls;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class UrlRegistryCategoryConventionTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [TestFixtureSetUp]\r\n        public void SetUp()\r\n        {\r\n\r\n            graph = BehaviorGraph.BuildFrom(x => {\r\n                x.Actions.IncludeType<UrlCategoryController1>();\r\n                x.Actions.IncludeType<UrlCategoryController2>();\r\n                x.Actions.IncludeType<UrlCategoryController3>();\r\n                    \r\n            });\r\n\r\n            var request = OwinHttpRequest.ForTesting().FullUrl(\"http://server/app\");\r\n\t\t\tvar urlResolver = new ChainUrlResolver(request);\r\n\r\n\t\t\tregistry = new UrlRegistry(new ChainResolutionCache(graph), urlResolver, request);\r\n        }\r\n\r\n        [Test]\r\n        public void action_that_has_no_attribute_on_either_class_or_method_should_have_no_category()\r\n        {\r\n            graph.ChainFor<UrlCategoryController3>(x => x.Go(null)).As<RoutedChain>().UrlCategory.Category.ShouldBeNull();\r\n            graph.ChainFor<UrlCategoryController3>(x => x.Comeback()).As<RoutedChain>().UrlCategory.Category.ShouldBeNull();\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void class_attribute_sets_the_category_if_there_is_no_method_level_attribute()\r\n        {\r\n            graph.ChainFor<UrlCategoryController1>(x => x.Go(null)).As<RoutedChain>().UrlCategory.Category.ShouldBe(\"admin\");\r\n        }\r\n\r\n        [Test]\r\n        public void method_attribute_has_precedence_over_class_attribute()\r\n        {\r\n            graph.ChainFor<UrlCategoryController1>(x => x.Comeback()).As<RoutedChain>().UrlCategory.Category.ShouldBe(\"public\");\r\n        }\r\n\r\n        [Test]\r\n        public void method_attribute_without_class_attribute()\r\n        {\r\n            graph.ChainFor<UrlCategoryController2>(x => x.DecoratedMethod()).As<RoutedChain>().UrlCategory.Category.ShouldBe(\"public\");\r\n        }\r\n        \r\n        [Test]\r\n        public void finds_and_registers_url_for_new_methods()\r\n        {\r\n            registry.HasNewUrl(typeof(UrlNewTarget)).ShouldBeTrue();\r\n            registry.UrlForNew(typeof(UrlNewTarget)).ShouldBe(\"/urlcategory1/createnewtarget\");\r\n            \r\n        }\r\n\r\n        #endregion\r\n\r\n        private BehaviorGraph graph;\r\n        private UrlRegistry registry;\r\n    }\r\n\r\n    public class UrlNewTarget\r\n    {\r\n        \r\n    }\r\n\r\n    \r\n\r\n    [UrlRegistryCategory(\"admin\")]\r\n    public class UrlCategoryController1\r\n    {\r\n        [UrlForNew(typeof(UrlNewTarget))]\r\n        public string CreateNewTarget()\r\n        {\r\n            return \"new one!\";\r\n        }\r\n\r\n        public void Go(InputModel model)\r\n        {\r\n        }\r\n\r\n        [UrlRegistryCategory(\"public\")]\r\n        public string Comeback()\r\n        {\r\n            return \"over here\";\r\n        }\r\n    }\r\n\r\n    public class UrlCategoryController2\r\n    {\r\n        public void Go()\r\n        {\r\n        }\r\n\r\n        [UrlRegistryCategory(\"public\")]\r\n        public string DecoratedMethod()\r\n        {\r\n            return \"decorated\";\r\n        }\r\n    }\r\n\r\n    public class UrlCategoryController3\r\n    {\r\n        public void Go(InputModel model)\r\n        {\r\n        }\r\n\r\n        public string Comeback()\r\n        {\r\n            return \"over here\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/WrapWithAttributeConventionTester.cs",
    "content": "using System.Diagnostics;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing System.Linq;\r\nusing System.Collections.Generic;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class WrapWithAttributeConventionTester\r\n    {\r\n        private BehaviorGraph graph;\r\n\r\n        [TestFixtureSetUp]\r\n        public void SetUp()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.Actions.IncludeType<WrapWithAttributeController>();\r\n            registry.Actions.DisableDefaultActionSource();\r\n\r\n            graph = BehaviorGraph.BuildFrom(registry);\r\n\r\n            graph.Chains.Count().ShouldBeGreaterThan(0);\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void should_have_a_call_in_each_behavior_chain()\r\n        {\r\n            int callCount = graph.Chains.OfType<RoutedChain>().SelectMany(x => x.Calls).Count();\r\n            callCount.ShouldBe(6);\r\n        }\r\n\r\n        [Test]\r\n        public void place_no_wrappers_on_actions_that_do_not_have_the_attribute()\r\n        {\r\n            graph.ChainFor<WrapWithAttributeController>(x => x.MethodWithNoAttributes()).First()\r\n                .ShouldNotBeOfType<Wrapper>();\r\n        }\r\n\r\n        [Test]\r\n        public void place_wrapper_on_action_with_a_single_attribute()\r\n        {\r\n            var chain = graph.ChainFor<WrapWithAttributeController>(x => x.MethodWithOneAttribute());\r\n            chain.First()\r\n                .ShouldBeOfType<Wrapper>().BehaviorType.ShouldBe(typeof(Wrapper1));\r\n        }\r\n\r\n        [Test]\r\n        public void place_wrapper_on_action_with_multiple_attributes()\r\n        {\r\n            var behaviors =\r\n                graph.ChainFor<WrapWithAttributeController>(x => x.MethodWithMultipleAttributes()).ToList();\r\n\r\n\r\n            behaviors[0].ShouldBeOfType<Wrapper>().BehaviorType.ShouldBe(typeof (Wrapper1));\r\n            behaviors[1].ShouldBeOfType<Wrapper>().BehaviorType.ShouldBe(typeof (Wrapper2));\r\n            behaviors[2].ShouldBeOfType<Wrapper>().BehaviorType.ShouldBe(typeof (Wrapper3));\r\n        }\r\n    }\r\n\r\n    public class WrapWithAttributeController\r\n    {\r\n        [WrapWith(typeof(Wrapper1))]\r\n        public void MethodWithOneAttribute() { }\r\n\r\n        [WrapWith(typeof(Wrapper1), typeof(Wrapper2), typeof(Wrapper3))]\r\n        public void MethodWithMultipleAttributes(){}\r\n        public void M3() { }\r\n        public void M4() { }\r\n        public void M5() { }\r\n        public void MethodWithNoAttributes() { }\r\n        \r\n        \r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Conventions/actions_that_return_IDictionary_are_json.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Runtime;\r\nusing NUnit.Framework;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Registration.Conventions\r\n{\r\n    [TestFixture]\r\n    public class actions_that_return_IDictionary_are_json\r\n    {\r\n        private BehaviorGraph theGraph;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theGraph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.IncludeType<MyController>();\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void methods_that_return_an_IDictionary_string_object_should_be_asymmetric_json()\r\n        {\r\n            var chain = theGraph.ChainFor<MyController>(x => x.ReturnsJson(null));\r\n            chain.Output.Writes(MimeType.Json).ShouldBeTrue();\r\n\r\n            var behaviorChain = theGraph.ChainFor<MyController>(x => x.ReturnOtherJson());\r\n            behaviorChain.Output.Writes(MimeType.Json).ShouldBeTrue();\r\n        }\r\n\r\n\r\n        public class Input1{}\r\n        public class MyController\r\n        {\r\n            public IDictionary<string, object> ReturnsJson(Input1 input)\r\n            {\r\n                return  new Dictionary<string, object>();\r\n            }\r\n\r\n            public IDictionary<string, object> ReturnOtherJson()\r\n            {\r\n                return new Dictionary<string, object>();\r\n            }\r\n\r\n            public Input1 NotJson()\r\n            {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/DSL/PoliciesExpressionTester.cs",
    "content": "using System;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Security.Authorization;\r\nusing FubuMVC.Tests.Registration.Conventions;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Tests.Registration.DSL\r\n{\r\n    [TestFixture]\r\n    public class when_applying_policies_for_wrappers_and_ordering\r\n    {\r\n        private BehaviorGraph graph;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.Actions.IncludeType<OrderingPolicyController>();\r\n\r\n            registry.Policies.Local.Configure(g => g.WrapAllWith<OPWrapper1>());\r\n\r\n            registry.Policies.Global.Reorder(policy => {\r\n                policy.ThisWrapperBeBefore<OPWrapper1>();\r\n                policy.CategoryMustBeAfter = BehaviorCategory.Authorization;\r\n            });\r\n\r\n            graph = BehaviorGraph.BuildFrom(registry);\r\n        }\r\n\r\n        \r\n        [Test]\r\n        public void move_behavior_before_authorization()\r\n        {\r\n            // Ordinarily, AuthorizationNode would be before any other behavior wrappers\r\n\r\n            var chain = graph.ChainFor<OrderingPolicyController>(x => x.M1());\r\n            chain.First().ShouldBeOfType<Wrapper>().BehaviorType.ShouldBe(typeof(OPWrapper1));\r\n            chain.ToList()[1].ShouldBeOfType<AuthorizationNode>();\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_defining_a_new_reordering_rule_inline\r\n    {\r\n        private BehaviorGraph graph;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.Actions.IncludeType<OrderingPolicyController>();\r\n\r\n            registry.Policies.Local.Configure(g => g.WrapAllWith<OPWrapper1>());\r\n\r\n            registry.Policies.Global.Reorder(x =>\r\n            {\r\n                x.ThisWrapperBeBefore<OPWrapper1>();\r\n                x.ThisNodeMustBeAfter<AuthorizationNode>();\r\n            });\r\n\r\n            graph = BehaviorGraph.BuildFrom(registry);\r\n        }\r\n\r\n        [Test]\r\n        public void move_behavior_before_authorization()\r\n        {\r\n            // Ordinarily, AuthorizationNode would be before any other behavior wrappers\r\n\r\n            var chain = graph.ChainFor<OrderingPolicyController>(x => x.M1());\r\n            chain.First().ShouldBeOfType<Wrapper>().BehaviorType.ShouldBe(typeof(OPWrapper1));\r\n            chain.ToList()[1].ShouldBeOfType<AuthorizationNode>();\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_adding_an_iconfigurationaction_without_specifying_configuration_type\r\n    {\r\n        [Test]\r\n        public void it_should_default_to_policy()\r\n        {\r\n            FakePolicy.Count = 0;\r\n            BehaviorGraph.BuildFrom(graph => \r\n                graph.Policies.Local.Add(new FakePolicy()));\r\n\r\n            FakePolicy.Count.ShouldBe(1);\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_adding_an_action_of_policy_without_specifying_configuration_type\r\n    {\r\n        [Test]\r\n        public void it_should_default_to_policy()\r\n        {\r\n            FakePolicy.Count = 0;\r\n            BehaviorGraph.BuildFrom(graph => \r\n                graph.Policies.Local.Add<FakePolicy>(x => x.NoOp()));\r\n\r\n            FakePolicy.Count.ShouldBe(1);\r\n        }\r\n    }\r\n\r\n    public class OrderingPolicyController\r\n    {\r\n        [WrapWith(typeof(OPWrapper2), typeof(OPWrapper3))]\r\n        [AllowRole(\"R1\")]\r\n        public void M1(){}\r\n        public void M2(){}\r\n        public void M3(){}\r\n        public void M4(){}\r\n        public void M5(){}\r\n    }\r\n\r\n    public class OPWrapper1 : IActionBehavior\r\n    {\r\n        public Task Invoke()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class OPWrapper2 : IActionBehavior\r\n    {\r\n        public Task Invoke()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class OPWrapper3 : IActionBehavior\r\n    {\r\n        public Task Invoke()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class FakePolicy : IConfigurationAction\r\n    {\r\n        public static int Count;\r\n\r\n        public void Configure(BehaviorGraph graph)\r\n        {\r\n            Count++;\r\n        }\r\n\r\n        public void NoOp() { }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Expressions/ModelExpressionTester.cs",
    "content": "using System;\r\nusing System.Reflection;\r\nusing FubuCore.Binding;\r\nusing FubuMVC.Core;\r\nusing NUnit.Framework;\r\nusing StructureMap;\r\n\r\nnamespace FubuMVC.Tests.Registration.Expressions\r\n{\r\n    [TestFixture]\r\n    public class ModelExpressionTester\r\n    {\r\n        public class ExampleConverter : IConverterFamily\r\n        {\r\n            public bool Matches(PropertyInfo prop)\r\n            {\r\n                return false;\r\n            }\r\n\r\n            public ValueConverter Build(IValueConverterRegistry registry, PropertyInfo prop)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        public class ExamplePropertyBinder : IPropertyBinder\r\n        {\r\n            public bool Matches(PropertyInfo property)\r\n            {\r\n                return false;\r\n            }\r\n\r\n            public void Bind(PropertyInfo property, IBindingContext context)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        public class ExampleModelBinder : IModelBinder\r\n        {\r\n            public bool Matches(Type type)\r\n            {\r\n                return false;\r\n            }\r\n\r\n            public void Bind(Type type, object instance, IBindingContext context)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public object Bind(Type type, IBindingContext context)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void can_register_custom_binding_services()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.Models\r\n                .BindModelsWith<ExampleModelBinder>()\r\n                .BindPropertiesWith<ExamplePropertyBinder>()\r\n                .ConvertUsing<ExampleConverter>();\r\n\r\n\r\n            using (var runtime = registry.ToRuntime())\r\n            {\r\n                var container = runtime.Get<IContainer>();\r\n                container.ShouldHaveRegistration<IConverterFamily, ExampleConverter>();\r\n                container.ShouldHaveRegistration<IPropertyBinder, ExamplePropertyBinder>();\r\n                container.ShouldHaveRegistration<IModelBinder, ExampleModelBinder>();\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/FilterAttributeTester.cs",
    "content": "﻿using FubuMVC.Core.Continuations;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class FilterAttributeTester\r\n    {\r\n        [Test]\r\n        public void one_method_is_valid()\r\n        {\r\n            FilterAttribute.DetermineMethod(typeof (ValidFilter))\r\n                           .Name.ShouldBe(\"Filter\");\r\n        }\r\n\r\n        [Test]\r\n        public void no_public_methods_are_invalid()\r\n        {\r\n            Exception<InvalidActionFilterTypeException>.ShouldBeThrownBy(() => {\r\n                FilterAttribute.DetermineMethod(typeof (InvalidFilter2));\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void multiple_public_methods_are_invalid()\r\n        {\r\n            Exception<InvalidActionFilterTypeException>.ShouldBeThrownBy(() =>\r\n            {\r\n                FilterAttribute.DetermineMethod(typeof(InvalidFilter));\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void private_methods_are_invalid()\r\n        {\r\n            Exception<InvalidActionFilterTypeException>.ShouldBeThrownBy(() =>\r\n            {\r\n                FilterAttribute.DetermineMethod(typeof(InvalidFilter3));\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void adds_the_filter_before_the_action_call()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x => {\r\n                x.Actions.IncludeType<FilterTargetEndpoint>();\r\n            });\r\n\r\n            var chain = graph.ChainFor<FilterTargetEndpoint>(x => x.get_hello());\r\n\r\n            var filter = chain.OfType<ActionFilter>().Single();\r\n            filter.HandlerType.ShouldBe(typeof (ValidFilter));\r\n            filter.Method.Name.ShouldBe(\"Filter\");\r\n\r\n            filter.Next.ShouldBeOfType<ContinuationNode>()\r\n                .Next.ShouldBeOfType<ActionCall>();\r\n        }\r\n    }\r\n\r\n    // SAMPLE: filter-attribute-usage\r\n    public class FilterTargetEndpoint\r\n    {\r\n        [Filter(typeof(ValidFilter))]\r\n        public string get_hello()\r\n        {\r\n            return \"Hello\";\r\n        }\r\n    }\r\n\r\n    // Note that the ValidFilter only has one method\r\n    // that returns a FubuContinuation\r\n    public class ValidFilter\r\n    {\r\n        public FubuContinuation Filter()\r\n        {\r\n            return FubuContinuation.NextBehavior();\r\n        }\r\n    }\r\n    // ENDSAMPLE\r\n\r\n    public class InvalidFilter\r\n    {\r\n        public FubuContinuation Filter()\r\n        {\r\n            return FubuContinuation.NextBehavior();\r\n        }\r\n\r\n        public FubuContinuation Filter2()\r\n        {\r\n            return FubuContinuation.NextBehavior();\r\n        }\r\n    }\r\n\r\n    public class InvalidFilter2\r\n    {\r\n        \r\n    }\r\n\r\n    public class InvalidFilter3\r\n    {\r\n        private FubuContinuation Filter()\r\n        {\r\n            return FubuContinuation.NextBehavior();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/FuncBuilderTester.cs",
    "content": "using System;\r\nusing System.Reflection;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class FuncBuilderTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            type = typeof (PropertyTarget);\r\n        }\r\n\r\n        #endregion\r\n\r\n        private Type type;\r\n\r\n        public class PropertyTarget\r\n        {\r\n            public string Name { get; set; }\r\n            public string LastCallToGo { get; set; }\r\n\r\n            public void OneInZeroOut(string name)\r\n            {\r\n                LastCallToGo = name;\r\n            }\r\n\r\n            public string ZeroInOneOut()\r\n            {\r\n                return \"Jeremy\";\r\n            }\r\n\r\n            public string OneInOneOut(int name)\r\n            {\r\n                return name.ToString();\r\n            }\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void one_in_one_out()\r\n        {\r\n            MethodInfo method = type.GetMethod(\"OneInOneOut\");\r\n            var func = FuncBuilder.ToFunc(type, method).ShouldBeOfType<Func<PropertyTarget, int, string>>();\r\n            func(new PropertyTarget(), 123).ShouldBe(\"123\");\r\n        }\r\n\r\n        [Test]\r\n        public void one_in_zero_out()\r\n        {\r\n            MethodInfo method = type.GetMethod(\"OneInZeroOut\");\r\n            var action = FuncBuilder.ToAction(type, method).ShouldBeOfType<Action<PropertyTarget, string>>();\r\n\r\n            var target = new PropertyTarget();\r\n\r\n            action(target, \"last name\");\r\n\r\n            target.LastCallToGo.ShouldBe(\"last name\");\r\n        }\r\n\r\n        [Test]\r\n        public void zero_in_one_out()\r\n        {\r\n            MethodInfo method = type.GetMethod(\"ZeroInOneOut\");\r\n            var func = FuncBuilder.ToFunc(type, method).ShouldBeOfType<Func<PropertyTarget, string>>();\r\n\r\n            var target = new PropertyTarget();\r\n\r\n            func(target).ShouldBe(target.ZeroInOneOut());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Nodes/BehaviorChainTester.cs",
    "content": "using System;\r\nusing System.Linq;\r\nusing FubuMVC.Core.Json;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing StructureMap.Pipeline;\r\nusing TestPackage1.FakeControllers;\r\n\r\nnamespace FubuMVC.Tests.Registration.Nodes\r\n{\r\n    public class StubNode : BehaviorNode\r\n    {\r\n        public override BehaviorCategory Category\r\n        {\r\n            get { return BehaviorCategory.Process; }\r\n        }\r\n\r\n        protected override IConfiguredInstance buildInstance()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_moving_a_node_to_first_in_the_chain\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theChain = new BehaviorChain();\r\n\r\n            node1 = new StubNode();\r\n            node2 = new StubNode();\r\n            node3 = new StubNode();\r\n\r\n            theChain.AddToEnd(node1);\r\n            theChain.AddToEnd(node2);\r\n            theChain.AddToEnd(node3);\r\n\r\n            theChain.ShouldHaveTheSameElementsAs(node1, node2, node3);\r\n        }\r\n\r\n        #endregion\r\n\r\n        private BehaviorChain theChain;\r\n        private StubNode node1;\r\n        private StubNode node2;\r\n        private StubNode node3;\r\n\r\n        [Test]\r\n        public void move_first_1()\r\n        {\r\n            node1.MoveToFront();\r\n\r\n            // No change, but I don't want it blowing up either\r\n            theChain.ShouldHaveTheSameElementsAs(node1, node2, node3);\r\n        }\r\n\r\n        [Test]\r\n        public void move_first_2()\r\n        {\r\n            node2.MoveToFront();\r\n\r\n            theChain.ShouldHaveTheSameElementsAs(node2, node1, node3);\r\n        }\r\n\r\n        [Test]\r\n        public void move_first_3()\r\n        {\r\n            node3.MoveToFront();\r\n\r\n            theChain.ShouldHaveTheSameElementsAs(node3, node1, node2);\r\n        }\r\n    }\r\n\r\n\r\n    [TestFixture]\r\n    public class BehaviorChainTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n        }\r\n\r\n        #endregion\r\n\r\n        [Test]\r\n        public void adding_a_node_to_the_end_sets_the_chain_on_the_node()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            var wrapper = new Wrapper(typeof (FakeJsonBehavior));\r\n\r\n            chain.AddToEnd(wrapper);\r\n\r\n            wrapper.ParentChain().ShouldBeTheSameAs(chain);\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void add_a_route_alias()\r\n        {\r\n            var chain = new RoutedChain(\"something/else\");\r\n            var alias = new RouteDefinition(\"something/else\");\r\n\r\n            chain.AddRouteAlias(alias);\r\n\r\n            chain.AdditionalRoutes.ShouldHaveTheSameElementsAs(alias);\r\n        }\r\n\r\n        [Test]\r\n        public void key()\r\n        {\r\n            var chain = new RoutedChain(\"something/else\");\r\n            chain.Key.ShouldBe(chain.Title().GetHashCode());\r\n        }\r\n\r\n        [Test]\r\n        public void append_with_no_behaviors()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            var wrapper = new Wrapper(typeof (FakeJsonBehavior));\r\n\r\n            chain.AddToEnd(wrapper);\r\n\r\n            chain.Top.ShouldBeTheSameAs(wrapper);\r\n        }\r\n\r\n        [Test]\r\n        public void appending_a_node_also_sets_the_previous()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            var wrapper = new Wrapper(typeof (FakeJsonBehavior));\r\n\r\n            chain.AddToEnd(wrapper);\r\n\r\n            wrapper.Previous.ShouldBeNull();\r\n\r\n            var wrapper2 = new Wrapper(typeof (FakeJsonBehavior));\r\n\r\n            wrapper.AddToEnd(wrapper2);\r\n\r\n            wrapper2.Previous.ShouldBeTheSameAs(wrapper);\r\n            wrapper.Previous.ShouldBeNull();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void appending_a_node_also_sets_the_previous_2()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            var wrapper = new Wrapper(typeof (FakeJsonBehavior));\r\n\r\n            chain.AddToEnd(wrapper);\r\n\r\n            wrapper.Previous.ShouldBeNull();\r\n            wrapper.ParentChain().ShouldBeTheSameAs(chain);\r\n\r\n            var wrapper2 = new Wrapper(typeof (FakeJsonBehavior));\r\n\r\n            chain.AddToEnd(wrapper2);\r\n\r\n            wrapper2.Previous.ShouldBeTheSameAs(wrapper);\r\n            wrapper.Previous.ShouldBeNull();\r\n            wrapper.ParentChain().ShouldBeTheSameAs(chain);\r\n        }\r\n\r\n        [Test]\r\n        public void building_input_node_without_an_input_type_blows_up()\r\n        {\r\n            Exception<InvalidOperationException>.ShouldBeThrownBy(() => { new BehaviorChain().Input.ShouldBeNull(); });\r\n        }\r\n\r\n        [Test]\r\n        public void building_output_node_without_an_output_type_blows_up()\r\n        {\r\n            Exception<InvalidOperationException>.ShouldBeThrownBy(() => { new BehaviorChain().Output.ShouldBeNull(); });\r\n        }\r\n\r\n        [Test]\r\n        public void calls_finds_all_calls_underneath_the_chain()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            var call = ActionCall.For<TestController>(x => x.AnotherAction(null));\r\n            var call2 = ActionCall.For<TestController>(x => x.AnotherAction(null));\r\n            chain.AddToEnd(call);\r\n            chain.AddToEnd(call2);\r\n\r\n            chain.Calls.Count().ShouldBe(2);\r\n            chain.Calls.Contains(call).ShouldBeTrue();\r\n            chain.Calls.Contains(call2).ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void find_the_chain_when_the_parent_is_null_should_be_null()\r\n        {\r\n            var node = new Wrapper(typeof (FakeJsonBehavior));\r\n            node.ParentChain().ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void find_the_parent_chain_when_the_chain_is_the_immediate_parent()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            var node = new Wrapper(typeof (FakeJsonBehavior));\r\n            chain.AddToEnd(node);\r\n            node.ParentChain().ShouldBeTheSameAs(chain);\r\n        }\r\n\r\n        [Test]\r\n        public void find_the_parent_from_deep_in_behavior_chain()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            var node = new Wrapper(typeof (FakeJsonBehavior));\r\n            chain.AddToEnd(node);\r\n\r\n            var node2 = new Wrapper(typeof (FakeJsonBehavior));\r\n            node.AddToEnd(node2);\r\n\r\n            var node3 = new Wrapper(typeof (FakeJsonBehavior));\r\n            node2.AddToEnd(node3);\r\n\r\n            node3.ParentChain().ShouldBeTheSameAs(chain);\r\n        }\r\n\r\n        [Test]\r\n        public void has_input_depends_on_the_input_node_now()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            chain.AddToEnd(ActionCall.For<OneController>(x => x.Query(null)));\r\n\r\n            chain.HasReaders().ShouldBeFalse();\r\n\r\n            chain.Input.Add(new NewtonsoftJsonFormatter());\r\n\r\n            chain.HasReaders().ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void has_input_initial()\r\n        {\r\n            new BehaviorChain().HasReaders()\r\n                .ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void has_output_depends_on_the_output_node_now()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            chain.AddToEnd(ActionCall.For<OneController>(x => x.Query(null)));\r\n\r\n            chain.HasOutput().ShouldBeFalse();\r\n\r\n            chain.Output.Add(new NewtonsoftJsonFormatter());\r\n\r\n            chain.HasOutput().ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void has_output_initial()\r\n        {\r\n            new BehaviorChain().HasOutput()\r\n                .ShouldBeFalse();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void insert_before_on_a_node()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            var wrapper = new Wrapper(typeof (FakeJsonBehavior));\r\n\r\n            chain.AddToEnd(wrapper);\r\n\r\n            var wrapper2 = new Wrapper(typeof (FakeJsonBehavior));\r\n\r\n            wrapper.AddBefore(wrapper2);\r\n\r\n            chain.Top.ShouldBeTheSameAs(wrapper2);\r\n            wrapper2.Next.ShouldBeTheSameAs(wrapper);\r\n\r\n            wrapper2.Previous.ShouldBeNull();\r\n            wrapper.Previous.ShouldBeTheSameAs(wrapper2);\r\n        }\r\n\r\n        [Test]\r\n        public void lazy_creation_of_the_input_node_after_having_an_action()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            chain.AddToEnd(ActionCall.For<OneController>(x => x.Query(null)));\r\n\r\n            var o1 = chain.Input;\r\n            var o2 = chain.Input;\r\n            var o3 = chain.Input;\r\n\r\n            o1.ShouldBeTheSameAs(o2);\r\n            o1.ShouldBeTheSameAs(o3);\r\n        }\r\n\r\n        [Test]\r\n        public void lazy_creation_of_the_output_node_after_having_an_action()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            chain.AddToEnd(ActionCall.For<OneController>(x => x.Query(null)));\r\n\r\n            var o1 = chain.Output;\r\n            var o2 = chain.Output;\r\n            var o3 = chain.Output;\r\n\r\n            o1.ShouldBeTheSameAs(o2);\r\n            o1.ShouldBeTheSameAs(o3);\r\n        }\r\n\r\n        [Test]\r\n        public void prepend_with_an_existing_top_behavior()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            var call = ActionCall.For<TestController>(x => x.AnotherAction(null));\r\n            chain.AddToEnd(call);\r\n\r\n            var wrapper = new Wrapper(typeof (FakeJsonBehavior));\r\n            chain.Prepend(wrapper);\r\n\r\n            chain.Top.ShouldBeTheSameAs(wrapper);\r\n            wrapper.Next.ShouldBeTheSameAs(call);\r\n        }\r\n\r\n        [Test]\r\n        public void prepend_with_no_behaviors()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            var wrapper = new Wrapper(typeof (FakeJsonBehavior));\r\n\r\n            chain.Prepend(wrapper);\r\n\r\n            chain.Top.ShouldBeTheSameAs(wrapper);\r\n        }\r\n\r\n        [Test]\r\n        public void removing_a_node_maintains_the_link_between_its_predecessor_and_successor()\r\n        {\r\n            var node1 = new Wrapper(typeof (FakeJsonBehavior));\r\n            var node2 = new Wrapper(typeof (FakeJsonBehavior));\r\n            var node3 = new Wrapper(typeof (FakeJsonBehavior));\r\n            node1.AddToEnd(node2);\r\n            node1.AddToEnd(node3);\r\n            node2.Remove();\r\n\r\n            node2.Previous.ShouldBeNull();\r\n            node2.Next.ShouldBeNull();\r\n            node1.Next.ShouldBeTheSameAs(node3);\r\n            node3.Previous.ShouldBeTheSameAs(node1);\r\n        }\r\n\r\n        [Test]\r\n        public void removing_a_node_without_a_predecessor_sets_its_successor_to_the_front()\r\n        {\r\n            var node1 = new Wrapper(typeof (FakeJsonBehavior));\r\n            var node2 = new Wrapper(typeof (FakeJsonBehavior));\r\n            node1.AddToEnd(node2);\r\n\r\n            node1.Remove();\r\n\r\n            node1.Previous.ShouldBeNull();\r\n            node1.Next.ShouldBeNull();\r\n            node2.Previous.ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void replacing_a_node_should_disconnect_the_node_being_replaced()\r\n        {\r\n            var node1 = new Wrapper(typeof (FakeJsonBehavior));\r\n            var node2 = new Wrapper(typeof (FakeJsonBehavior));\r\n            var node3 = new Wrapper(typeof (FakeJsonBehavior));\r\n            var newNode = new Wrapper(typeof (FakeJsonBehavior));\r\n            node1.AddToEnd(node2);\r\n            node1.AddToEnd(node3);\r\n            node2.ReplaceWith(newNode);\r\n\r\n            node2.Next.ShouldBeNull();\r\n            node2.Previous.ShouldBeNull();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void replacing_a_node_should_set_the_new_nodes_predecessor_and_successor()\r\n        {\r\n            var node1 = new Wrapper(typeof (FakeJsonBehavior));\r\n            var node2 = new Wrapper(typeof (FakeJsonBehavior));\r\n            var node3 = new Wrapper(typeof (FakeJsonBehavior));\r\n            var newNode = new Wrapper(typeof (FakeJsonBehavior));\r\n            node1.AddToEnd(node2);\r\n            node1.AddToEnd(node3);\r\n            node2.ReplaceWith(newNode);\r\n\r\n            newNode.Previous.ShouldBeTheSameAs(node1);\r\n            newNode.Next.ShouldBeTheSameAs(node3);\r\n            node1.Next.ShouldBeTheSameAs(newNode);\r\n            node3.Previous.ShouldBeTheSameAs(newNode);\r\n        }\r\n\r\n        [Test]\r\n        public void replacing_a_node_without_a_predecessor_should_set_the_new_node_to_the_front()\r\n        {\r\n            var node1 = new Wrapper(typeof (FakeJsonBehavior));\r\n            var node2 = new Wrapper(typeof (FakeJsonBehavior));\r\n            var newNode = new Wrapper(typeof (FakeJsonBehavior));\r\n            node1.AddToEnd(node2);\r\n            node1.ReplaceWith(newNode);\r\n\r\n            newNode.Previous.ShouldBeNull();\r\n            newNode.Next.ShouldBeTheSameAs(node2);\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class BehaviorChainMatchesCategoryOrHttpMethodTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theChain = new RoutedChain(\"something\");\r\n        }\r\n\r\n        #endregion\r\n\r\n        private RoutedChain theChain;\r\n\r\n        [Test]\r\n        public void negative_on_category()\r\n        {\r\n            theChain.UrlCategory.Category = \"else\";\r\n\r\n            theChain.MatchesCategoryOrHttpMethod(\"something\").ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void positive_on_category()\r\n        {\r\n            theChain.UrlCategory.Category = \"something\";\r\n\r\n            theChain.MatchesCategoryOrHttpMethod(\"something\").ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void postive_on_http_verb()\r\n        {\r\n            theChain.UrlCategory.Category = \"something\";\r\n            theChain.Route.AllowedHttpMethods.Add(\"POST\");\r\n            theChain.Route.AllowedHttpMethods.Add(\"GET\");\r\n\r\n            theChain.MatchesCategoryOrHttpMethod(\"PUT\").ShouldBeFalse();\r\n            theChain.MatchesCategoryOrHttpMethod(\"DELETE\").ShouldBeFalse();\r\n            theChain.MatchesCategoryOrHttpMethod(\"GET\").ShouldBeTrue();\r\n            theChain.MatchesCategoryOrHttpMethod(\"POST\").ShouldBeTrue();\r\n            theChain.MatchesCategoryOrHttpMethod(\"something\").ShouldBeTrue();\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class BehaviorChain_determination_of_the_input_type\r\n    {\r\n        [Test]\r\n        public void uses_the_first_may_have_input_with_non_null()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            chain.AddToEnd(new FakeInputNode(typeof (string)));\r\n\r\n            chain.InputType().ShouldBe(typeof (string));\r\n\r\n            chain.Prepend(new FakeInputNode(null));\r\n            chain.InputType().ShouldBe(typeof (string));\r\n\r\n            chain.Prepend(new FakeInputNode(typeof (int)));\r\n            chain.InputType().ShouldBe(typeof (int));\r\n        }\r\n    }\r\n\r\n\r\n    [TestFixture]\r\n    public class BehaviorChain_determination_of_the_resource_type\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theChain = new BehaviorChain();\r\n\r\n            strings = new FakeOutputNode(typeof (string));\r\n            none = new FakeOutputNode(null);\r\n            ints = new FakeOutputNode(typeof (int));\r\n        }\r\n\r\n        #endregion\r\n\r\n        private BehaviorChain theChain;\r\n        private FakeOutputNode strings;\r\n        private FakeOutputNode none;\r\n        private FakeOutputNode ints;\r\n\r\n        [Test]\r\n        public void gets_the_last_resource_type()\r\n        {\r\n            theChain.AddToEnd(none);\r\n            theChain.AddToEnd(strings);\r\n            theChain.AddToEnd(ints);\r\n\r\n            theChain.ResourceType().ShouldBe(typeof (int));\r\n        }\r\n\r\n        [Test]\r\n        public void gets_the_last_resource_type_2()\r\n        {\r\n            theChain.AddToEnd(strings);\r\n            theChain.AddToEnd(ints);\r\n            theChain.AddToEnd(none);\r\n\r\n            theChain.ResourceType().ShouldBe(typeof (int));\r\n        }\r\n\r\n        [Test]\r\n        public void has_resource_type()\r\n        {\r\n            theChain.HasResourceType().ShouldBeFalse();\r\n\r\n            // Void does not count\r\n            theChain.AddToEnd(ActionCall.For<FakeActions>(x => x.Go(null)));\r\n            theChain.HasResourceType().ShouldBeFalse();\r\n\r\n            theChain.AddToEnd(none);\r\n            theChain.HasResourceType().ShouldBeFalse();\r\n\r\n            theChain.AddToEnd(ints);\r\n            theChain.HasResourceType().ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void in_the_abscence_of_any_criteria_resource_type_is_null()\r\n        {\r\n            theChain.ResourceType().ShouldBeNull();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void override_the_resource_type()\r\n        {\r\n            theChain.ResourceType(typeof (DateTime));\r\n\r\n            theChain.ResourceType().ShouldBe(typeof (DateTime));\r\n\r\n            theChain.AddToEnd(strings);\r\n            theChain.AddToEnd(ints);\r\n            theChain.AddToEnd(none);\r\n\r\n            theChain.ResourceType().ShouldBe(typeof (DateTime));\r\n        }\r\n    }\r\n\r\n    public class FakeActions\r\n    {\r\n        public void Go(InputModel model)\r\n        {\r\n        }\r\n    }\r\n\r\n\r\n    public class FakeInputNode : BehaviorNode, IMayHaveInputType\r\n    {\r\n        private readonly Type _inputType;\r\n\r\n        public FakeInputNode(Type inputType)\r\n        {\r\n            _inputType = inputType;\r\n        }\r\n\r\n        public override BehaviorCategory Category\r\n        {\r\n            get { throw new NotImplementedException(); }\r\n        }\r\n\r\n        public Type InputType()\r\n        {\r\n            return _inputType;\r\n        }\r\n\r\n        protected override IConfiguredInstance buildInstance()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class FakeOutputNode : BehaviorNode, IMayHaveResourceType\r\n    {\r\n        private readonly Type _resourceType;\r\n\r\n        public FakeOutputNode(Type resourceType)\r\n        {\r\n            _resourceType = resourceType;\r\n        }\r\n\r\n        public override BehaviorCategory Category\r\n        {\r\n            get { throw new NotImplementedException(); }\r\n        }\r\n\r\n        public Type ResourceType()\r\n        {\r\n            return _resourceType;\r\n        }\r\n\r\n        protected override IConfiguredInstance buildInstance()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class BehaviorChain_tagging_behavior_Tester\r\n    {\r\n        [Test]\r\n        public void is_tagged()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            chain.Tags.Add(\"foo\");\r\n\r\n            chain.IsTagged(\"foo\").ShouldBeTrue();\r\n            chain.IsTagged(\"Foo\").ShouldBeTrue();\r\n            chain.IsTagged(\"bar\").ShouldBeFalse();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Nodes/BehaviorChain_building_an_object_def.cs",
    "content": "using System;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Tests.Registration.Nodes\r\n{\r\n    [TestFixture]\r\n    public class BehaviorChain_building_an_object_def\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theChain = new BehaviorChain();\r\n            var action = ActionCall.For<Controller1>(x => x.Go(null));\r\n            theChain.AddToEnd(action);\r\n\r\n            theOriginalGuid = action.UniqueId;\r\n        }\r\n\r\n        #endregion\r\n\r\n        private BehaviorChain theChain;\r\n        private Guid theOriginalGuid;\r\n\r\n        private Instance toObjectDef()\r\n        {\r\n            return theChain.As<IContainerModel>().ToInstance();\r\n        }\r\n\r\n        public class Controller1\r\n        {\r\n            public void Go(Input1 input)\r\n            {\r\n            }\r\n\r\n            #region Nested type: Input1\r\n\r\n            public class Input1\r\n            {\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        [Test]\r\n        public void the_unique_id_matches_the_top_id_in_no_diagnostic_mode()\r\n        {\r\n            toObjectDef().Name.ShouldBe(theOriginalGuid.ToString());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Nodes/Behavior_node_ObjectDef_creation_Tester.cs",
    "content": "using System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration.Nodes\r\n{\r\n    [TestFixture]\r\n    public class Behavior_node_ObjectDef_creation_Tester\r\n    {\r\n        public class SimpleBehavior : IActionBehavior\r\n        {\r\n            public Task Invoke()\r\n            {\r\n                return Task.CompletedTask;\r\n            }\r\n\r\n            public Task InvokePartial()\r\n            {\r\n                return Task.CompletedTask;\r\n            }\r\n        }\r\n\r\n        public class DifferentBehavior : SimpleBehavior\r\n        {\r\n        }\r\n\r\n        [Test]\r\n        public void creating_an_object_def_for_no_tracing()\r\n        {\r\n            var node = new Wrapper(typeof (SimpleBehavior));\r\n            node.As<IContainerModel>().ToInstance()\r\n                .ReturnedType.ShouldBe(typeof (SimpleBehavior));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Nodes/RoutedChainTester.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Tests.Registration.Nodes\r\n{\r\n    [TestFixture]\r\n    public class RoutedChainTester\r\n    {\r\n        [Test]\r\n        public void adds_the_authentication_node_if_it_exists()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.Actions.IncludeType<AuthenticatedEndpoint>();\r\n            registry.Configure(\r\n                graph => { graph.Chains.OfType<RoutedChain>().Each(x => x.Authentication = new AuthNode()); });\r\n\r\n            using (var runtime = registry.ToRuntime())\r\n            {\r\n                runtime.Behaviors.ChainFor<AuthenticatedEndpoint>(x => x.get_hello())\r\n                    .First().ShouldBeOfType<AuthNode>();\r\n            }\r\n\r\n\r\n            var chain = new RoutedChain(\"something\");\r\n            var auth = new AuthNode();\r\n            chain.Authentication = auth;\r\n        }\r\n    }\r\n\r\n    public class AuthenticatedEndpoint\r\n    {\r\n        public string get_hello()\r\n        {\r\n            return \"hello\";\r\n        }\r\n    }\r\n\r\n    public class FakeAuthBehavior : IActionBehavior\r\n    {\r\n        public Task Invoke()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class AuthNode : BehaviorNode\r\n    {\r\n        public override BehaviorCategory Category\r\n        {\r\n            get { return BehaviorCategory.Authentication; }\r\n        }\r\n\r\n        protected override IConfiguredInstance buildInstance()\r\n        {\r\n            return new SmartInstance<FakeAuthBehavior>();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/OutputBeforeAjaxContinuationPolicyTester.cs",
    "content": "using System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Ajax;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Conventions;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class OutputBeforeAjaxContinuationPolicyTester\r\n    {\r\n        [Test]\r\n        public void reorders_output_node_before_the_first_action()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.IncludeType<AjaxController>();\r\n            });\r\n\r\n            var chain = graph.ChainFor<AjaxController>(x => x.get_success());\r\n            chain.First().ShouldBeOfType<OutputNode>();\r\n            chain.Last().ShouldBeOfType<ActionCall>();\r\n        }\r\n\r\n        [Test]\r\n        public void does_not_reorder_async_continuation()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.IncludeType<AjaxController>();\r\n            });\r\n\r\n            var chain = graph.ChainFor<AjaxController>(x => x.get_async());\r\n\r\n            chain.FirstCall().Next.ShouldBeOfType<OutputNode>();\r\n        }\r\n\r\n        [Test]\r\n        public void modifies_a_chain()\r\n        {\r\n            var chain = new BehaviorChain();\r\n            var theAction = ActionCall.For<AjaxController>(x => x.get_success());\r\n            chain.AddToEnd(theAction);\r\n            chain.AddToEnd(chain.Output.As<OutputNode>());\r\n\r\n            OutputBeforeAjaxContinuationPolicy.Modify(chain);\r\n\r\n            chain.First().ShouldBeTheSameAs(chain.Output);\r\n            chain.Last().ShouldBeTheSameAs(theAction);\r\n        }\r\n\r\n        [Test]\r\n        public void chains_with_input()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.IncludeType<AjaxController>();\r\n            });\r\n\r\n            var chain = graph.ChainFor<AjaxController>(x => x.get_with_input(null));\r\n            var nodes = chain.ToList();\r\n            nodes[0].ShouldBeOfType<InputNode>();\r\n            nodes[1].ShouldBeOfType<OutputNode>();\r\n            nodes.Last().ShouldBeOfType<ActionCall>();\r\n        }\r\n\r\n        public class AjaxController\r\n        {\r\n            public Task<AjaxContinuation> get_async()\r\n            {\r\n                return Task.FromResult(new AjaxContinuation());\r\n            }\r\n\r\n            public AjaxContinuation get_success()\r\n            {\r\n                return AjaxContinuation.Successful();\r\n            }\r\n\r\n            public AjaxContinuation get_with_input(AjaxControllerInput input)\r\n            {\r\n                return AjaxContinuation.Successful();\r\n            }\r\n\r\n            public AjaxContinuation get_with_failures()\r\n            {\r\n                return new AjaxContinuation\r\n                {\r\n                    Success = false,\r\n                    Message = \"You stink!\"\r\n                };\r\n            }\r\n        }\r\n\r\n        public class AjaxControllerInput { }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Querying/ChainResoluationCacheRootAt.cs",
    "content": "using FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.Registration.Routes;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Registration.Querying\n{\n    [TestFixture]\n    public class ChainResoluationCacheRootAt \n    {\n        private ChainResolutionCache theCache;\n        private RouteDefinition theRouteDefinitionAlias;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theCache = new ChainResolutionCache(setupActions());\n        }\n\n        private BehaviorGraph setupActions()\n        {\n            var registry = new FubuRegistry();\n            registry.Actions.IncludeType<RouteAliasAction1>();\n\n            registry.Configure(x =>\n            {\n                theRouteDefinitionAlias = new RouteDefinition(\"{Client}/\");\n                theRouteDefinitionAlias.Input = MockRepository.GenerateMock<IRouteInput>();\n                theRouteDefinitionAlias.Input.Stub(_ => _.Rank).Return(5);\n\n                x.ChainFor<RouteAliasAction1>(_ => _.M1()).As<RoutedChain>().AddRouteAlias(theRouteDefinitionAlias);\n            });\n\n            return BehaviorGraph.BuildFrom(registry);\n        }\n\n        [Test]\n        public void roots_route_aliases()\n        {\n            theCache.RootAt(\"localhost\");\n            var route = theRouteDefinitionAlias.ToRoute();\n            route.Url.ShouldBe(\"localhost/{Client}/\");\n        }\n    }\n\n    public class RouteAliasAction1\n    {\n        [UrlAlias(\"prefixed/a/m1\")]\n        public void M1(){}\n        public void M2(){}\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Querying/ChainResolverTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Querying;\r\nusing FubuMVC.Core.Urls;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration.Querying\r\n{\r\n    [TestFixture]\r\n    public class ChainResolverTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [TestFixtureSetUp]\r\n        public void SetUp()\r\n        {\r\n            graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.IncludeType<ChainResolverController>();\r\n            });\r\n\r\n            _resolutionCache = new ChainResolutionCache(graph);\r\n        }\r\n\r\n        [SetUp]\r\n        public void CleanUp()\r\n        {\r\n            graph.Chains.OfType<RoutedChain>().Each(x => {\r\n                x.UrlCategory.Category = null;\r\n                x.UrlCategory.Creates.Clear();\r\n            });\r\n\r\n            _resolutionCache.ClearAll();\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n        private BehaviorGraph graph;\r\n        private ChainResolutionCache _resolutionCache;\r\n\r\n        [Test]\r\n        public void find_by_controller_action_failure_throws_2104()\r\n        {\r\n            Exception<FubuException>.ShouldBeThrownBy(\r\n                () => { _resolutionCache.Find<ControllerThatIsNotRegistered>(x => x.Go()); }).ErrorCode.ShouldBe(2104);\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_controller_action_success()\r\n        {\r\n            _resolutionCache.Find<ChainResolverController>(x => x.M1()).FirstCall().Method.Name.ShouldBe(\"M1\");\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_handler_type_and_method_positive_case()\r\n        {\r\n            var method = ReflectionHelper.GetMethod<ChainResolverController>(x => x.M7(null));\r\n            _resolutionCache.Find(typeof (ChainResolverController), method).FirstCall().Method.ShouldBe(method);\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_type_with_method_null_can_find_by_input_type()\r\n        {\r\n            _resolutionCache.Find(typeof (UniqueInput), null).FirstCall().Method.Name.ShouldBe(\"M9\");\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_input_model_and_category_fails_when_there_are_multiple_matching_chains()\r\n        {\r\n            var routedChain = graph.ChainFor<ChainResolverController>(x => x.M2(null))\r\n                .As<RoutedChain>();\r\n            routedChain\r\n                .UrlCategory.Category = Categories.NEW;\r\n\r\n            graph.ChainFor<ChainResolverController>(x => x.M3(null))\r\n                .As<RoutedChain>()\r\n                .UrlCategory.Category = Categories.NEW;\r\n\r\n            Exception<FubuException>.ShouldBeThrownBy(\r\n                () => { _resolutionCache.FindUnique(new ChainResolverInput1(), Categories.NEW).FirstCall(); }).ErrorCode\r\n                .ShouldBe(2108);\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_input_model_and_category_fails_when_there_are_no_matching_chains()\r\n        {\r\n            Exception<FubuException>.ShouldBeThrownBy(\r\n                () => { _resolutionCache.FindUnique(new ChainResolverInput1(), Categories.NEW).FirstCall(); }).ErrorCode\r\n                .ShouldBe(2104);\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_input_model_and_category_success()\r\n        {\r\n            graph.ChainFor<ChainResolverController>(x => x.M2(null))\r\n                .As<RoutedChain>()\r\n                .UrlCategory.Category = Categories.NEW;\r\n\r\n            graph.ChainFor<ChainResolverController>(x => x.M3(null))\r\n                .As<RoutedChain>()\r\n                .UrlCategory.Category = Categories.EDIT;\r\n\r\n            _resolutionCache.FindUnique(new ChainResolverInput1(), Categories.NEW).FirstCall().Method.Name.ShouldBe(\r\n                \"M2\");\r\n            _resolutionCache.FindUnique(new ChainResolverInput1(), Categories.EDIT).FirstCall().Method.Name.ShouldBe(\r\n                \"M3\");\r\n        }\r\n\r\n        [Test]\r\n        public void find_chain_by_http_method()\r\n        {\r\n            _resolutionCache.FindUniqueByType(typeof (ChainResolverInput4), \"POST\")\r\n                .FirstCall().Description.ShouldContain(\"post_input\");\r\n\r\n            _resolutionCache.FindUniqueByType(typeof (ChainResolverInput4), \"GET\")\r\n                .FirstCall().Description.ShouldContain(\"get_input\");\r\n        }\r\n\r\n        [Test]\r\n        public void find_creator_negative()\r\n        {\r\n            _resolutionCache.FindCreatorOf(typeof (Entity1)).ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void find_creator_positive()\r\n        {\r\n            var chain = graph.ChainFor<ChainResolverController>(x => x.M6(null));\r\n            chain.As<RoutedChain>().UrlCategory.Creates.Add(typeof(Entity1));\r\n            chain.As<RoutedChain>().UrlCategory.Creates.Add(typeof(Entity2));\r\n\r\n            _resolutionCache.FindCreatorOf(typeof (Entity1)).FirstCall().Method.Name.ShouldBe(\"M6\");\r\n            _resolutionCache.FindCreatorOf(typeof (Entity2)).FirstCall().Method.Name.ShouldBe(\"M6\");\r\n            _resolutionCache.FindCreatorOf(typeof (Entity3)).ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void find_unique_can_revert_to_using_the_DEFAULT_category_if_it_exists()\r\n        {\r\n            graph.ChainFor<ChainResolverController>(x => x.M3(null))\r\n                .As<RoutedChain>()\r\n                .UrlCategory.Category = Categories.DEFAULT;\r\n\r\n            _resolutionCache.FindUnique(new ChainResolverInput1()).FirstCall().Method.Name.ShouldBe(\"M3\");\r\n        }\r\n\r\n        [Test]\r\n        public void find_unique_can_succeed_with_multiple_options_if_all_but_one_are_categorized()\r\n        {\r\n            graph.ChainFor<ChainResolverController>(x => x.M2(null))\r\n                .As<RoutedChain>()\r\n                .UrlCategory.Category = Categories.NEW;\r\n\r\n            graph.ChainFor<ChainResolverController>(x => x.M3(null))\r\n                .As<RoutedChain>()\r\n                .UrlCategory.Category = Categories.EDIT;\r\n\r\n            _resolutionCache.FindUnique(new ChainResolverInput1()).FirstCall().Method.Name.ShouldBe(\"M4\");\r\n        }\r\n\r\n        [Test]\r\n        public void find_unique_failure_when_there_are_multiple_options()\r\n        {\r\n            Exception<FubuException>.ShouldBeThrownBy(() => { _resolutionCache.FindUnique(new ChainResolverInput1()); })\r\n                .ErrorCode.ShouldBe(2108);\r\n        }\r\n\r\n        [Test]\r\n        public void find_unique_for_an_unknown_input_type_throws_exception()\r\n        {\r\n            Exception<FubuException>.ShouldBeThrownBy(\r\n                () => { _resolutionCache.FindUnique(new InputModelThatDoesNotMatchAnyExistingBehaviors()); }).ErrorCode.\r\n                ShouldBe(2104);\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void find_unique_success()\r\n        {\r\n            _resolutionCache.FindUnique(new UniqueInput()).FirstCall().Method.Name.ShouldBe(\"M9\");\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void has_new_negative()\r\n        {\r\n            _resolutionCache.FindCreatorOf(typeof (Entity1)).ShouldBeNull();\r\n        }\r\n    }\r\n\r\n    public class InputModelThatDoesNotMatchAnyExistingBehaviors\r\n    {\r\n    }\r\n\r\n    public class ControllerThatIsNotRegistered\r\n    {\r\n        public void Go()\r\n        {\r\n        }\r\n    }\r\n\r\n    public class ChainResolverController\r\n    {\r\n        public void M1()\r\n        {\r\n        }\r\n\r\n        public void M2(ChainResolverInput1 input)\r\n        {\r\n        }\r\n\r\n        public void M3(ChainResolverInput1 input)\r\n        {\r\n        }\r\n\r\n        public void M4(ChainResolverInput1 input)\r\n        {\r\n        }\r\n\r\n        public void M5(ChainResolverInput2 input)\r\n        {\r\n        }\r\n\r\n        public void M6(ChainResolverInput2 input)\r\n        {\r\n        }\r\n\r\n        public void M7(ChainResolverInput2 input)\r\n        {\r\n        }\r\n\r\n        public void M8(ChainResolverInput3 input)\r\n        {\r\n        }\r\n\r\n        public void M9(UniqueInput input)\r\n        {\r\n        }\r\n\r\n        public void post_input(ChainResolverInput4 input)\r\n        {\r\n        }\r\n\r\n        public void get_input(ChainResolverInput4 input)\r\n        {\r\n        }\r\n    }\r\n\r\n    public class ChainResolverInput1\r\n    {\r\n    }\r\n\r\n    public class ChainResolverInput2\r\n    {\r\n    }\r\n\r\n    public class ChainResolverInput3\r\n    {\r\n    }\r\n\r\n    public class ChainResolverInput4\r\n    {\r\n    }\r\n\r\n    public class UniqueInput\r\n    {\r\n    }\r\n\r\n    public class ForwardedModel\r\n    {\r\n    }\r\n\r\n\r\n    public class Proxy<T>\r\n    {\r\n    }\r\n\r\n\r\n    public class Entity1\r\n    {\r\n    }\r\n\r\n    public class Entity2\r\n    {\r\n    }\r\n\r\n    public class Entity3\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Querying/ChainSearchTester.cs",
    "content": "using FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Querying;\r\nusing FubuMVC.Core.Urls;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Tests.Registration.Querying\r\n{\r\n    [TestFixture]\r\n    public class ChainSearchTester\r\n    {\r\n        [Test]\r\n        public void default_category_search_mode_is_relaxed()\r\n        {\r\n            new ChainSearch().CategoryMode.ShouldBe(CategorySearchMode.Relaxed);\r\n        }\r\n\r\n        [Test]\r\n        public void default_type_search_mode_should_be_any()\r\n        {\r\n            new ChainSearch().TypeMode.ShouldBe(TypeSearchMode.Any);\r\n        }\r\n\r\n        [Test]\r\n        public void search_can_be_optional()\r\n        {\r\n            ChainSearch.ByUniqueInputType(typeof(ChainSearch), required: false).Required.ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void default_search_is_required()\r\n        {\r\n            ChainSearch.ByUniqueInputType(typeof(ChainSearch)).Required.ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void the_category_is_default()\r\n        {\r\n            new ChainSearch().CategoryOrHttpMethod.ShouldBe(Categories.DEFAULT);\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_category_when_the_category_is_null_and_relaxed_search_and_only_one_chain()\r\n        {\r\n            var search = new ChainSearch{\r\n                CategoryMode = CategorySearchMode.Relaxed,\r\n                CategoryOrHttpMethod = null\r\n            };\r\n\r\n            var chains = new BehaviorChain[]{new BehaviorChain(),};\r\n\r\n            search.FindForCategory(chains).Single().ShouldBeTheSameAs(chains.Single());\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void find_by_category_when_the_category_is_null_and_relaxed_search_and_only_one_chain_2()\r\n        {\r\n            var search = new ChainSearch\r\n            {\r\n                CategoryMode = CategorySearchMode.Relaxed,\r\n                CategoryOrHttpMethod = null\r\n            };\r\n\r\n            var chain1 = new RoutedChain(\"something\");\r\n            chain1.UrlCategory.Category = Categories.DEFAULT;\r\n\r\n            var chains = new BehaviorChain[] { chain1, };\r\n\r\n            search.FindForCategory(chains).Single().ShouldBeTheSameAs(chains.Single());\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_null_category_with_multiple_chains_but_only_one_is_default()\r\n        {\r\n            var search = new ChainSearch\r\n            {\r\n                CategoryMode = CategorySearchMode.Relaxed,\r\n                CategoryOrHttpMethod = null\r\n            };\r\n\r\n            var chain1 = new RoutedChain(\"\"){\r\n                UrlCategory ={\r\n                    Category = null\r\n                }\r\n            };\r\n\r\n            var chain2 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = Categories.DEFAULT\r\n                }\r\n            };\r\n\r\n            var chains = new BehaviorChain[] { chain1, chain2};\r\n\r\n            search.FindForCategory(chains).Single().ShouldBeTheSameAs(chain2);\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_null_category_with_multiple_chains_but_only_one_is_default_2()\r\n        {\r\n            var search = new ChainSearch\r\n            {\r\n                CategoryMode = CategorySearchMode.Relaxed,\r\n                CategoryOrHttpMethod = null\r\n            };\r\n\r\n            var chain1 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = \"something\"\r\n                }\r\n            };\r\n\r\n            var chain2 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = Categories.DEFAULT\r\n                }\r\n            };\r\n\r\n            var chains = new BehaviorChain[] { chain1, chain2 };\r\n\r\n            search.FindForCategory(chains).Single().ShouldBeTheSameAs(chain2);\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_null_category_with_multiple_chains_but_only_one_is_default_3()\r\n        {\r\n            var search = new ChainSearch\r\n            {\r\n                CategoryMode = CategorySearchMode.Relaxed,\r\n                CategoryOrHttpMethod = null\r\n            };\r\n\r\n            var chain1 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = \"something\"\r\n                }\r\n            };\r\n\r\n            var chain2 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = Categories.DEFAULT\r\n                }\r\n            };\r\n\r\n            var chain3 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = Categories.DEFAULT\r\n                }\r\n            };\r\n\r\n            var chains = new BehaviorChain[] { chain1, chain2, chain3 };\r\n\r\n            search.FindForCategory(chains).ShouldHaveTheSameElementsAs(chain2, chain3);\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_null_category_with_multiple_chains_but_none_is_marked_default()\r\n        {\r\n            var search = new ChainSearch\r\n            {\r\n                CategoryMode = CategorySearchMode.Relaxed,\r\n                CategoryOrHttpMethod = null\r\n            };\r\n\r\n            var chain1 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = \"something\"\r\n                }\r\n            };\r\n\r\n            var chain2 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = \"else\"\r\n                }\r\n            };\r\n\r\n            var chain3 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = null\r\n                }\r\n            };\r\n\r\n            var chains = new BehaviorChain[] { chain1, chain2, chain3 };\r\n\r\n            search.FindForCategory(chains).ShouldHaveTheSameElementsAs(chain3);\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_null_category_with_multiple_chains_one_null_category_one_default_strict_category_search()\r\n        {\r\n            var search = new ChainSearch\r\n            {\r\n                CategoryMode = CategorySearchMode.Strict,\r\n                CategoryOrHttpMethod = null\r\n            };\r\n\r\n            var chain1 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = \"something\"\r\n                }\r\n            };\r\n\r\n            var chain2 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = Categories.DEFAULT\r\n                }\r\n            };\r\n\r\n            var chain3 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = null\r\n                }\r\n            };\r\n\r\n            var chains = new BehaviorChain[] { chain1, chain2, chain3 };\r\n\r\n            search.FindForCategory(chains).ShouldHaveTheSameElementsAs(chain3);\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_category_strict_with_multiple_chains_1()\r\n        {\r\n            var search = new ChainSearch\r\n            {\r\n                CategoryMode = CategorySearchMode.Strict,\r\n                CategoryOrHttpMethod = \"something\"\r\n            };\r\n\r\n            var chain1 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = \"something\"\r\n                }\r\n            };\r\n\r\n            var chain2 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = Categories.DEFAULT\r\n                }\r\n            };\r\n\r\n            var chain3 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = null\r\n                }\r\n            };\r\n\r\n            var chains = new BehaviorChain[] { chain1, chain2, chain3 };\r\n\r\n            search.FindForCategory(chains).ShouldHaveTheSameElementsAs(chain1);\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_category_strict_with_multiple_chains_by_method()\r\n        {\r\n            var search = new ChainSearch\r\n            {\r\n                CategoryMode = CategorySearchMode.Strict,\r\n                CategoryOrHttpMethod = \"POST\"\r\n            };\r\n\r\n            var chain1 = new RoutedChain(\"whatever\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = \"something\"\r\n                }\r\n            };\r\n\r\n            chain1.Route.AllowedHttpMethods.Add(\"POST\");\r\n\r\n            var chain2 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = Categories.DEFAULT\r\n                }\r\n            };\r\n\r\n            var chain3 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = null\r\n                }\r\n            };\r\n\r\n            var chains = new BehaviorChain[] { chain1, chain2, chain3 };\r\n\r\n            search.FindForCategory(chains).ShouldHaveTheSameElementsAs(chain1);\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_category_strict_with_multiple_chains_2()\r\n        {\r\n            var search = new ChainSearch\r\n            {\r\n                CategoryMode = CategorySearchMode.Strict,\r\n                CategoryOrHttpMethod = \"something\"\r\n            };\r\n\r\n            var chain1 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = \"different\"\r\n                }\r\n            };\r\n\r\n            var chain2 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = Categories.DEFAULT\r\n                }\r\n            };\r\n\r\n            var chain3 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = \"else\"\r\n                }\r\n            };\r\n\r\n            var chains = new BehaviorChain[] { chain1, chain2, chain3 };\r\n\r\n            search.FindForCategory(chains).Any().ShouldBeFalse();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void find_by_category_strict_with_only_one_chain_that_does_not_match_still_returns_nothing()\r\n        {\r\n            var search = new ChainSearch\r\n            {\r\n                CategoryMode = CategorySearchMode.Strict,\r\n                CategoryOrHttpMethod = \"something\"\r\n            };\r\n\r\n\r\n\r\n            var chain3 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = null\r\n                }\r\n            };\r\n\r\n            var chains = new BehaviorChain[] { chain3 };\r\n\r\n            search.FindForCategory(chains).Any().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_category_relaxed_with_only_one_chain()\r\n        {\r\n            var search = new ChainSearch\r\n            {\r\n                CategoryMode = CategorySearchMode.Relaxed,\r\n                CategoryOrHttpMethod = \"something\"\r\n            };\r\n\r\n\r\n            var chain3 = new RoutedChain(\"\")\r\n            {\r\n                UrlCategory =\r\n                {\r\n                    Category = null\r\n                }\r\n            };\r\n\r\n            var chains = new BehaviorChain[] { chain3 };\r\n\r\n            search.FindForCategory(chains).ShouldHaveTheSameElementsAs(chain3);\r\n        }\r\n\r\n\r\n\r\n    }\r\n\r\n    [TestFixture]\r\n    public class finding_behavior_chains_by_type_only\r\n    {\r\n        private BehaviorGraph theGraph;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theGraph = BehaviorGraph.BuildFrom<FakeRegistry>();\r\n        }\r\n\r\n        [Test]\r\n        public void find_candidates_by_input_model_only_when_its_strict()\r\n        {\r\n            new ChainSearch{\r\n                Type = typeof (SingleActionController),\r\n                TypeMode = TypeSearchMode.InputModelOnly\r\n            }.FindCandidatesByType(theGraph).Single().Any().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void find_candidates_by_type_fall_back_to_handler_type_if_possible()\r\n        {\r\n            var chains = new ChainSearch{\r\n                Type = typeof (SingleActionController),\r\n                TypeMode = TypeSearchMode.Any\r\n            }.FindCandidatesByType(theGraph).SelectMany(x => x);\r\n\r\n\r\n            chains.Single()\r\n                .FirstCall().Description.ShouldBe(\"SingleActionController.DoSomething(InputModel model) : void\");\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_handler_type_only()\r\n        {\r\n\r\n            new ChainSearch{\r\n                TypeMode = TypeSearchMode.HandlerOnly,\r\n                Type = typeof (SimpleInputModel)\r\n            }.FindCandidatesByType(theGraph).Single().Single().FirstCall().Description.ShouldBe(\"SimpleInputModel.DoSomething(InputModel2 model) : void\");\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_input_model_only()\r\n        {\r\n            var chainSearch = new ChainSearch\r\n                              {\r\n                                  TypeMode = TypeSearchMode.InputModelOnly,\r\n                                  Type = typeof(SimpleInputModel)\r\n                              };\r\n\r\n\r\n\r\n            chainSearch.FindCandidatesByType(theGraph).Single().Select(x => x.FirstCall().Description)\r\n            .ShouldHaveTheSameElementsAs(\"OneController.Query(SimpleInputModel model) : SimpleOutputModel\", \"TwoController.NotQuery(SimpleInputModel model) : SimpleOutputModel\");\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_any_looks_at_input_model_first_then_handler_type_second()\r\n        {\r\n            var candidates = new ChainSearch{\r\n                TypeMode = TypeSearchMode.Any,\r\n                Type = typeof (SimpleInputModel)\r\n            }.FindCandidatesByType(theGraph);\r\n\r\n            candidates.Count().ShouldBe(3);\r\n\r\n            candidates.First().Select(x => x.FirstCall().Description)\r\n                .ShouldHaveTheSameElementsAs(\"OneController.Query(SimpleInputModel model) : SimpleOutputModel\", \"TwoController.NotQuery(SimpleInputModel model) : SimpleOutputModel\");\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_any_looks_at_resource_model_first_then_handler_type_second()\r\n        {\r\n            var candidates = new ChainSearch\r\n            {\r\n                TypeMode = TypeSearchMode.ResourceModelOnly,\r\n                Type = typeof(SimpleOutputModel)\r\n            }.FindCandidatesByType(theGraph);\r\n\r\n            candidates.First().Select(x => x.FirstCall().Description)\r\n                .ShouldHaveTheSameElementsAs(\r\n                \"OneController.Report() : SimpleOutputModel\",\r\n                \"OneController.Query(SimpleInputModel model) : SimpleOutputModel\",\r\n                \"TwoController.Report() : SimpleOutputModel\",\r\n                \"TwoController.NotQuery(SimpleInputModel model) : SimpleOutputModel\"\r\n\r\n\r\n\r\n                );\r\n\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_method_if_it_exists()\r\n        {\r\n            var candidates = new ChainSearch\r\n            {\r\n                TypeMode = TypeSearchMode.Any,\r\n                Type = typeof(SimpleInputModel),\r\n                MethodName = \"DoSomething\"\r\n            }.FindCandidatesByType(theGraph).SelectMany(x => x);\r\n\r\n            candidates.Any(x => x.FirstCall().Description == \"SimpleInputModel.DoSomething(InputModel2 model) : void\")\r\n                .ShouldBeTrue();\r\n\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_method_if_it_exists_2()\r\n        {\r\n            var candidates = new ChainSearch\r\n            {\r\n                TypeMode = TypeSearchMode.Any,\r\n                Type = typeof(SimpleInputModel),\r\n                MethodName = \"Query\"\r\n            }.FindCandidatesByType(theGraph).SelectMany(x => x);\r\n\r\n\r\n\r\n            candidates.Select(x => x.FirstCall().Description)\r\n                .ShouldHaveTheSameElementsAs(\"OneController.Query(SimpleInputModel model) : SimpleOutputModel\");\r\n\r\n\r\n        }\r\n\r\n\r\n        public class FakeRegistry : FubuRegistry\r\n        {\r\n            public FakeRegistry()\r\n            {\r\n                Actions\r\n                    .IncludeType<OneController>()\r\n                    .IncludeType<SimpleInputModel>()\r\n                    .IncludeType<TwoController>()\r\n                    .IncludeType<SingleActionController>();\r\n            }\r\n        }\r\n\r\n\r\n        public class InputModel2{}\r\n        public class SimpleInputModel\r\n        {\r\n            public void DoSomething(InputModel2 model){}\r\n        }\r\n\r\n        public class SimpleOutputModel\r\n        {\r\n        }\r\n\r\n        public class OneController\r\n        {\r\n            public void Go()\r\n            {\r\n            }\r\n\r\n            public SimpleOutputModel Report()\r\n            {\r\n                return new SimpleOutputModel();\r\n            }\r\n\r\n            public SimpleOutputModel Query(SimpleInputModel model)\r\n            {\r\n                return new SimpleOutputModel();\r\n            }\r\n        }\r\n\r\n        public class TwoController\r\n        {\r\n            public void Go()\r\n            {\r\n            }\r\n\r\n            public SimpleOutputModel Report()\r\n            {\r\n                return new SimpleOutputModel();\r\n            }\r\n\r\n            public SimpleOutputModel NotQuery(SimpleInputModel model)\r\n            {\r\n                return new SimpleOutputModel();\r\n            }\r\n        }\r\n\r\n        public class InputModel1 { }\r\n\r\n        public class SingleActionController\r\n        {\r\n            public void DoSomething(InputModel model) { }\r\n        }\r\n    }\r\n\r\n\r\n}\r\n"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Registration/FubuPackageRegistry_Importing_Mechanics_Specs.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Tests.Registration.Conventions;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration.Registration\r\n{\r\n    [TestFixture]\r\n    public class FubuPackageRegistry_Importing_Mechanics_Specs\r\n    {\r\n        private FubuRuntime _runtime;\r\n        private BehaviorGraph behaviors;\r\n        private BehaviorChain appChain;\r\n        private BehaviorChain pakChain;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            _runtime = FubuRuntime.For<ApplicationRegistry>();\r\n            behaviors = _runtime.Get<BehaviorGraph>();\r\n\r\n            appChain = behaviors.ChainFor<ApplicationActions>(x => x.get_app_action());\r\n            pakChain = behaviors.ChainFor<PackageActions>(x => x.get_pak_action());\r\n        }\r\n\r\n        [TearDown]\r\n        public void TearDown()\r\n        {\r\n            _runtime.Dispose();\r\n        }\r\n\r\n        [Test]\r\n        public void the_application_service_registrations_win()\r\n        {\r\n            _runtime.Get<IAppService>().ShouldBeOfType<AppService>();\r\n        }\r\n\r\n        [Test]\r\n        public void local_policy_in_the_main_app_is_only_applied_to_endpoints_in_the_main_app()\r\n        {\r\n            appChain.IsWrappedBy(typeof(LocalAppWrapper)).ShouldBeTrue();\r\n            pakChain.IsWrappedBy(typeof(LocalAppWrapper)).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void local_policy_in_the_import_is_only_applied_to_endpoints_in_the_import()\r\n        {\r\n            appChain.IsWrappedBy(typeof(LocalPakWrapper)).ShouldBeFalse();\r\n            pakChain.IsWrappedBy(typeof(LocalPakWrapper)).ShouldBeTrue(); \r\n        }\r\n\r\n        [Test]\r\n        public void global_policy_applied_by_the_app_is_applied_to_all_chains()\r\n        {\r\n            appChain.IsWrappedBy(typeof(GlobalAppWrapper)).ShouldBeTrue();\r\n            pakChain.IsWrappedBy(typeof(GlobalAppWrapper)).ShouldBeTrue(); \r\n        }\r\n\r\n        [Test]\r\n        public void global_policy_applied_by_an_import_is_applied_to_all_chains()\r\n        {\r\n            appChain.IsWrappedBy(typeof(GlobalPakWrapper)).ShouldBeTrue();\r\n            pakChain.IsWrappedBy(typeof(GlobalPakWrapper)).ShouldBeTrue(); \r\n        }\r\n    }\r\n\r\n    public class LocalAppWrapper : FubuMVC.Core.Behaviors.WrappingBehavior\r\n    {\r\n        protected override Task invoke(Func<Task> func)\r\n        {\r\n            return Task.CompletedTask;\r\n        }\r\n    }\r\n\r\n    public class GlobalAppWrapper : FubuMVC.Core.Behaviors.WrappingBehavior\r\n    {\r\n        protected override Task invoke(Func<Task> func)\r\n        {\r\n            return Task.CompletedTask;\r\n        }\r\n    }\r\n\r\n    public class GlobalPakWrapper : FubuMVC.Core.Behaviors.WrappingBehavior\r\n    {\r\n        protected override Task invoke(Func<Task> func)\r\n        {\r\n            return Task.CompletedTask;\r\n        }\r\n    }\r\n\r\n    public class LocalPakWrapper : FubuMVC.Core.Behaviors.WrappingBehavior\r\n    {\r\n        protected override Task invoke(Func<Task> func)\r\n        {\r\n            return Task.CompletedTask;\r\n        }\r\n    }\r\n\r\n    public class ApplicationRegistry : FubuRegistry\r\n    {\r\n        public ApplicationRegistry()\r\n        {\r\n            Actions.IncludeType<ApplicationActions>();\r\n\r\n            Import<PackageRegistry>();\r\n\r\n\r\n            Policies.Local.Configure(graph =>\r\n            {\r\n                graph.WrapAllWith<LocalAppWrapper>();\r\n            });\r\n\r\n            Policies.Global.Configure(graph =>\r\n            {\r\n                graph.WrapAllWith<GlobalAppWrapper>();\r\n            });\r\n\r\n            Services.ReplaceService<IAppService, AppService>();\r\n        }\r\n    }\r\n\r\n    public class PackageRegistry : FubuPackageRegistry\r\n    {\r\n        public PackageRegistry()\r\n        {\r\n            Actions.IncludeType<PackageActions>();\r\n\r\n            Policies.Local.Configure(graph =>\r\n            {\r\n                graph.WrapAllWith<LocalPakWrapper>();\r\n            });\r\n\r\n            Policies.Global.Configure(x =>\r\n            {\r\n                x.WrapAllWith<GlobalPakWrapper>();\r\n            });\r\n\r\n            Services.ReplaceService<IAppService, PackageService>();\r\n\r\n            Services.AddService<IDeactivator, PackageDeactivator>();\r\n        }\r\n    }\r\n\r\n    public class PackageDeactivator : IDeactivator\r\n    {\r\n        public void Deactivate(IActivationLog log)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class PackageActions\r\n    {\r\n        public string get_pak_action()\r\n        {\r\n            return \"anything\";\r\n        }\r\n    }\r\n\r\n    public class ApplicationActions\r\n    {\r\n        public string get_app_action()\r\n        {\r\n            return \"anything\";\r\n        }\r\n    }\r\n\r\n    public interface IAppService{}\r\n    public class AppService : IAppService{}\r\n    public class PackageService : IAppService{}\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/RouteBuilderTester.cs",
    "content": "using System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class when_creating_the_route_for_an_input_from_a_good_pattern_with_no_defaults\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            thePattern = \"here/there/{Name}/{Age}\";\r\n            route = RouteBuilder.Build<InputModel>(thePattern);\r\n        }\r\n\r\n        #endregion\r\n\r\n        private IRouteDefinition route;\r\n        private string thePattern;\r\n\r\n        [Test]\r\n        public void has_a_route_input_for_each_property_in_the_pattern()\r\n        {\r\n            route.Input.RouteParameters.Select(x => x.Name).ShouldHaveTheSameElementsAs(\"Name\", \"Age\");\r\n        }\r\n\r\n        [Test]\r\n        public void set_the_pattern_correctly()\r\n        {\r\n            route.Pattern.ShouldBe(thePattern);\r\n        }\r\n\r\n        [Test]\r\n        public void rank()\r\n        {\r\n            RouteBuilder.PatternRank(\"{foo}/\").ShouldBe(1);\r\n            RouteBuilder.PatternRank(\"foo\").ShouldBe(0);\r\n            RouteBuilder.PatternRank(\"{foo}/to/{bar}\").ShouldBe(2);\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_creating_a_route_for_an_input_from_a_pattern_with_invalid_property_name\r\n    {\r\n        [Test]\r\n        public void should_throw_a_fubu_exception()\r\n        {\r\n            const string thePattern = \"here/there/{Name}/{DoesNotExist}\";\r\n\r\n            Exception<FubuException>.ShouldBeThrownBy(() => RouteBuilder.Build<InputModel>(thePattern));\r\n        }\r\n    }\r\n\r\n\r\n    [TestFixture]\r\n    public class when_creating_the_route_for_an_input_from_a_good_pattern_with_no_defaults_from_the_type\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            thePattern = \"here/there/{Name}/{Age}\";\r\n            route = RouteBuilder.Build(typeof (InputModel), thePattern);\r\n        }\r\n\r\n        #endregion\r\n\r\n        private IRouteDefinition route;\r\n        private string thePattern;\r\n\r\n        [Test]\r\n        public void has_a_route_input_for_each_property_in_the_pattern()\r\n        {\r\n            route.Input.RouteParameters.Select(x => x.Name).ShouldHaveTheSameElementsAs(\"Name\", \"Age\");\r\n        }\r\n\r\n        [Test]\r\n        public void set_the_pattern_correctly()\r\n        {\r\n            route.Pattern.ShouldBe(thePattern);\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_creating_the_route_for_an_input_from_a_good_pattern_with_defaults\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            thePattern = \"here/there/{Name:Josh}/{Age}\";\r\n            route = RouteBuilder.Build<InputModel>(thePattern);\r\n        }\r\n\r\n        #endregion\r\n\r\n        private string thePattern;\r\n        private IRouteDefinition route;\r\n\r\n        [Test]\r\n        public void pick_up_the_default_value_if_it_exists()\r\n        {\r\n            route.Input.RouteParameters.First(x => x.Name == \"Name\").DefaultValue.ShouldBe(\"Josh\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_have_a_null_default_for_input_that_has_no_default_in_the_pattern()\r\n        {\r\n            route.Input.RouteParameters.First(x => x.Name == \"Age\").DefaultValue.ShouldBeNull();\r\n        }\r\n    }\r\n\r\n    public class InputModel\r\n    {\r\n        public string Name { get; set; }\r\n        public int Age { get; set; }\r\n        public int Age2 { get; set; }\r\n    }\r\n\r\n    public class InputModelWithEquals\r\n    {\r\n        public string Name { get; set; }\r\n        public int Age { get; set; }\r\n\r\n        public bool Equals(InputModelWithEquals other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other.Name, Name) && other.Age == Age;\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof (InputModelWithEquals)) return false;\r\n            return Equals((InputModelWithEquals) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                return ((Name != null ? Name.GetHashCode() : 0)*397) ^ Age;\r\n            }\r\n        }\r\n\r\n        public static bool operator ==(InputModelWithEquals left, InputModelWithEquals right)\r\n        {\r\n            return Equals(left, right);\r\n        }\r\n\r\n        public static bool operator !=(InputModelWithEquals left, InputModelWithEquals right)\r\n        {\r\n            return !Equals(left, right);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/RouteCollectionTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.View;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Registration\n{\n    [TestFixture]\n    public class RouteCollectionTester\n    {\n        private readonly BehaviorGraph theGraph = BehaviorGraph.BuildFrom(_ =>\n        {\n            _.Actions.DisableDefaultActionSource();\n            _.Actions.IncludeType<FakeActions>();\n            _.AlterSettings<ViewEngineSettings>(x => x.ExcludeViews(t => true));\n        });\n\n        private void assertHasRoutes(IEnumerable<RoutedChain> chains, params int[] numbers)\n        {\n            chains.Where(x => x.HandlerTypeIs<FakeActions>())\n                .Select(x => int.Parse(x.GetRoutePattern())).OrderBy(x => x)\n                .ShouldHaveTheSameElementsAs(numbers);\n        }\n\n\n        [Test]\n        public void all_routes()\n        {\n            assertHasRoutes(theGraph.Routes, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);\n        }\n\n        [Test]\n        public void gets()\n        {\n            assertHasRoutes(theGraph.Routes.Gets, 2, 7);\n        }\n\n        [Test]\n        public void heads()\n        {\n            assertHasRoutes(theGraph.Routes.Heads, 1, 6);\n        }\n\n        [Test]\n        public void posts()\n        {\n            assertHasRoutes(theGraph.Routes.Posts, 3, 8);\n        }\n\n        [Test]\n        public void puts()\n        {\n            assertHasRoutes(theGraph.Routes.Puts, 5, 10);\n        }\n\n        [Test]\n        public void deletes()\n        {\n            assertHasRoutes(theGraph.Routes.Deletes, 4, 9);\n        }\n\n        [Test]\n        public void resources()\n        {\n            assertHasRoutes(theGraph.Routes.Resources, 1, 2, 6, 7);\n        }\n\n        [Test]\n        public void commands()\n        {\n            assertHasRoutes(theGraph.Routes.Commands, 3, 4, 5, 8, 9, 10);\n        }\n    }\n\n    public class FakeActions\n    {\n        public string head_1()\n        {\n            return \"1\";\n        }\n\n        public string get_2()\n        {\n            return \"1\";\n        }\n\n        public string post_3()\n        {\n            return \"1\";\n        }\n\n        public string delete_4()\n        {\n            return \"1\";\n        }\n\n        public string put_5()\n        {\n            return \"1\";\n        }\n\n        public string head_6()\n        {\n            return \"1\";\n        }\n\n        public string get_7()\n        {\n            return \"1\";\n        }\n\n        public string post_8()\n        {\n            return \"1\";\n        }\n\n        public string delete_9()\n        {\n            return \"1\";\n        }\n\n        public string put_10()\n        {\n            return \"1\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/RouteDefinitionTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Linq.Expressions;\r\nusing System.Text.RegularExpressions;\r\nusing System.Web.Routing;\r\nusing FubuCore;\r\nusing FubuCore.Descriptions;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing FubuMVC.Tests;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class RouteDefinitionTester\r\n    {\r\n        public class QueryStringTarget\r\n        {\r\n            [QueryString]\r\n            public string Name { get; set; }\r\n\r\n            [QueryString]\r\n            public string Age { get; set; }\r\n        }\r\n\r\n        public class SampleViewModel\r\n        {\r\n            public string InPath { get; set; }\r\n            public string AlsoInPath { get; set; }\r\n            public string InQueryString { get; set; }\r\n            public string AlsoInQueryString { get; set; }\r\n        }\r\n\r\n        public class SampleViewModelWithInputs\r\n        {\r\n            [RouteInput]\r\n            public string RequiredInput { get; set; }\r\n\r\n            [RouteInput(\"default\")]\r\n            public string OptionalInput { get; set; }\r\n        }\r\n\r\n        public class MyOwnUrlMaker : IMakeMyOwnUrl\r\n        {\r\n            private readonly string _part;\r\n\r\n            public MyOwnUrlMaker(string part)\r\n            {\r\n                _part = part;\r\n            }\r\n\r\n            public string ToUrlPart(string basePattern)\r\n            {\r\n                return basePattern + \"/\" + _part;\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void can_calculate_rank_without_input_if_there_are_substitutions()\r\n        {\r\n            var route = new RouteDefinition(\"{Client}/foo\");\r\n            route.Rank.ShouldBe(1);\r\n        }\r\n\r\n        [Test]\r\n        public void session_state_requirement_is_null_by_default_signifying_that_it_should_use_the_default()\r\n        {\r\n            new RouteDefinition(\"something\").SessionStateRequirement.ShouldBeNull(); // this actually matters\r\n        }\r\n\r\n        [Test]\r\n        public void get_route_pattern_with_querystring_parameters_when_there_are_no_values()\r\n        {\r\n            var route = RouteBuilder.Build(typeof (QueryStringTarget), \"route\");\r\n\r\n            route.CreateUrlFromInput(new QueryStringTarget())\r\n                .ShouldBe(\"route\");\r\n        }\r\n\r\n        [Test]\r\n        public void get_route_pattern_with_an_IMakeMyOwnUrl()\r\n        {\r\n            var maker = new MyOwnUrlMaker(\"something/else\");\r\n            var route = new RouteDefinition(\"folder\");\r\n\r\n            route.CreateUrlFromInput(maker).ShouldBe(\"folder/something/else\");\r\n        }\r\n\r\n        [Test]\r\n        public void by_default_input_type_returns_null()\r\n        {\r\n            var routeDefinition = new RouteDefinition(\"\");\r\n            routeDefinition.Input.ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void to_string_by_default_gets_pattern()\r\n        {\r\n            const string pattern = \"some/pattern\";\r\n            var routeDefinition = new RouteDefinition(pattern);\r\n            routeDefinition.ToString().ShouldBe(pattern);\r\n        }\r\n\r\n        [Test]\r\n        public void shouldd_not_add_duplicate_input()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"my/sample\");\r\n            url.AddRouteInput(x => x.InPath);\r\n            url.AddRouteInput(x => x.InPath);\r\n            url.AddRouteInput(new RouteParameter(ReflectionHelper.GetAccessor<SampleViewModel>(x=>x.InPath)), false);\r\n            url.RouteParameters.ShouldHaveCount(1);\r\n        }\r\n\r\n        [Test]\r\n        public void to_string_gets_pattern_and_type_full_name()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"my/sample\");\r\n            url.ToString().ShouldBe(\"{0} --> {1}\".ToFormat(url.Parent.Pattern, typeof(SampleViewModel).FullName));\r\n        }\r\n\r\n        [Test]\r\n        public void create_default_value_for_a_route()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"my/sample\");\r\n            url.AddRouteInput(x => x.InPath);\r\n            url.RouteInputFor(\"InPath\").DefaultValue = \"something\";\r\n            Route route = url.Parent.ToRoute();\r\n\r\n            route.Defaults[\"InPath\"].ShouldBe(\"something\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_two_default_values_for_a_route()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"my/sample\");\r\n            url.AddRouteInput(x => x.InPath);\r\n            url.AddRouteInput(x => x.AlsoInPath);\r\n            url.RouteInputFor(\"InPath\").DefaultValue = \"something\";\r\n            url.RouteInputFor(\"AlsoInPath\").DefaultValue = \"something else\";\r\n            Route route = url.Parent.ToRoute();\r\n\r\n            route.Defaults.Count().ShouldBe(2);\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void create_url_for_a_route_with_two_parameters()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"my/sample/{InPath}/{AlsoInPath}\");\r\n            url.AddRouteInput(x => x.InPath);\r\n            url.AddRouteInput(x => x.AlsoInPath);\r\n\r\n            url.Parent.ToRoute().Url.ShouldBe(\"my/sample/{InPath}/{AlsoInPath}\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_will_escape_the_url()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"test/edit/{InPath}\");\r\n            url.AddRouteInput(x => x.InPath);\r\n\r\n            url.CreateUrlFromInput(new SampleViewModel\r\n            {\r\n                InPath = \"some text\"\r\n            }).ShouldBe(\"test/edit/some%20text\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_will_escape_the_url_with_parameters()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"test/edit/{InPath}\");\r\n            url.AddRouteInput(x => x.InPath);\r\n\r\n            var parameters = new RouteParameters<SampleViewModel>();\r\n            parameters[x => x.InPath] = \"some text\";\r\n\r\n            url.CreateUrlFromParameters(parameters).ShouldBe(\"test/edit/some%20text\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_input_model()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"test/edit/{InPath}\");\r\n            url.AddRouteInput(x => x.InPath);\r\n\r\n            url.CreateUrlFromInput(new SampleViewModel\r\n            {\r\n                InPath = \"5\"\r\n            }).ShouldBe(\"test/edit/5\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_parameters()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"test/edit/{InPath}\");\r\n            url.AddRouteInput(x => x.InPath);\r\n\r\n            var parameters = new RouteParameters<SampleViewModel>();\r\n            parameters[x => x.InPath] = \"5\";\r\n\r\n            url.CreateUrlFromParameters(parameters).ShouldBe(\"test/edit/5\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_input_model_and_encoded_variable()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"test/edit/{InPath}\");\r\n            url.AddRouteInput(x => x.InPath);\r\n\r\n            url.CreateUrlFromInput(new SampleViewModel\r\n            {\r\n                InPath = \"abc/def&ghi=jkl\"\r\n            }).ShouldBe(\"test/edit/abc%2Fdef%26ghi%3Djkl\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_input_model_and_default_value_for_optional_input()\r\n        {\r\n            var url = new RouteInput<SampleViewModelWithInputs>(\"test/edit/{OptionalInput}\");\r\n            url.AddRouteInput(x => x.OptionalInput);\r\n\r\n            url\r\n                .CreateUrlFromInput(new SampleViewModelWithInputs\r\n                {\r\n                    OptionalInput = \"a\"\r\n                })\r\n                .ShouldEndWith(\"test/edit/a\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_input_model_and_default_value_for_optional_input_with_parameters()\r\n        {\r\n            var url = new RouteInput<SampleViewModelWithInputs>(\"test/edit/{OptionalInput}\");\r\n            url.AddRouteInput(x => x.OptionalInput);\r\n\r\n            var parameters = new RouteParameters<SampleViewModelWithInputs>();\r\n            parameters[x => x.OptionalInput] = \"a\";\r\n\r\n            url\r\n                .CreateUrlFromParameters(parameters)\r\n                .ShouldEndWith(\"test/edit/a\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_input_model_and_default_value_for_required_input()\r\n        {\r\n            var url = new RouteInput<SampleViewModelWithInputs>(\"test/edit/{RequiredInput}\");\r\n            url.AddRouteInput(x => x.RequiredInput);\r\n\r\n            url\r\n                .CreateUrlFromInput(new SampleViewModelWithInputs\r\n                {\r\n                    RequiredInput = \"a\"\r\n                })\r\n                .ShouldEndWith(\"test/edit/a\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_input_model_and_default_value_for_required_input_by_parameters()\r\n        {\r\n            var url = new RouteInput<SampleViewModelWithInputs>(\"test/edit/{RequiredInput}\");\r\n            url.AddRouteInput(x => x.RequiredInput);\r\n\r\n            var parameters = new RouteParameters<SampleViewModelWithInputs>();\r\n            parameters[x => x.RequiredInput] = \"a\";\r\n\r\n            url\r\n                .CreateUrlFromParameters(parameters)\r\n                .ShouldEndWith(\"test/edit/a\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_input_model_and_no_default_value_specified_for_optional_input()\r\n        {\r\n            var url = new RouteInput<SampleViewModelWithInputs>(\"test/edit/{OptionalInput}\");\r\n            url.AddRouteInput(x => x.OptionalInput);\r\n\r\n            url\r\n                .CreateUrlFromInput(new SampleViewModelWithInputs())\r\n                .ShouldEndWith(\"test/edit/default\");\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void create_url_with_input_model_and_no_default_value_specified_for_optional_input_by_parameters()\r\n        {\r\n            var url = new RouteInput<SampleViewModelWithInputs>(\"test/edit/{OptionalInput}\");\r\n            url.AddRouteInput(x => x.OptionalInput);\r\n\r\n            var parameters = new RouteParameters<SampleViewModelWithInputs>();\r\n\r\n            url\r\n                .CreateUrlFromParameters(parameters)\r\n                .ShouldEndWith(\"test/edit/default\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_input_model_and_no_default_value_specified_for_required_input()\r\n        {\r\n            var url = new RouteInput<SampleViewModelWithInputs>(\"test/edit/{RequiredInput}\");\r\n            url.AddRouteInput(x => x.RequiredInput);\r\n\r\n            Exception<FubuException>.ShouldBeThrownBy(() => url.CreateUrlFromInput(new SampleViewModelWithInputs()));\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_input_model_and_no_default_value_specified_for_required_input_by_parameters()\r\n        {\r\n            var url = new RouteInput<SampleViewModelWithInputs>(\"test/edit/{RequiredInput}\");\r\n            url.AddRouteInput(x => x.RequiredInput);\r\n\r\n            Exception<FubuException>.ShouldBeThrownBy(() => url.CreateUrlFromParameters(new RouteParameters()));\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_multiple_variables_in_path()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"test/edit/{InPath}/{AlsoInPath}\");\r\n            url.AddRouteInput(x => x.InPath);\r\n            url.AddRouteInput(x => x.AlsoInPath);\r\n\r\n            url.CreateUrlFromInput(new SampleViewModel\r\n            {\r\n                InPath = \"5\",\r\n                AlsoInPath = \"some text\"\r\n            }).ShouldBe(\"test/edit/5/some%20text\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_multiple_variables_in_path_by_parameters()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"test/edit/{InPath}/{AlsoInPath}\");\r\n            url.AddRouteInput(x => x.InPath);\r\n            url.AddRouteInput(x => x.AlsoInPath);\r\n\r\n            var parameters = new RouteParameters<SampleViewModel>();\r\n            parameters[x => x.InPath] = \"5\";\r\n            parameters[x => x.AlsoInPath] = \"some text\";\r\n\r\n            url.CreateUrlFromParameters(parameters).ShouldBe(\"test/edit/5/some%20text\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_encoded_variables_in_path_by_parameters()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"test/edit/{InPath}/{AlsoInPath}\");\r\n            url.AddRouteInput(x => x.InPath);\r\n            url.AddRouteInput(x => x.AlsoInPath);\r\n\r\n            var parameters = new RouteParameters<SampleViewModel>();\r\n            parameters[x => x.InPath] = \"5\";\r\n            parameters[x => x.AlsoInPath] = \"abc/def&ghi=jkl\";\r\n\r\n            url.CreateUrlFromParameters(parameters).ShouldBe(\"test/edit/5/abc%2Fdef%26ghi%3Djkl\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_multiple_variables_in_querystring()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"/my/sample/path\");\r\n            var props = new List<Expression<Func<SampleViewModel, object>>>\r\n                              {\r\n                                  x => x.InQueryString,\r\n                                  x => x.AlsoInQueryString\r\n                              };\r\n            var inputs = props.Select(x => new RouteParameter(ReflectionHelper.GetAccessor(x)));\r\n            url.AddQueryInputs(inputs);\r\n\r\n            url.CreateUrlFromInput(new SampleViewModel\r\n            {\r\n                InQueryString = \"query\",\r\n                AlsoInQueryString = \"alsoquery\"\r\n            })\r\n                .ShouldBe(\"/my/sample/path?InQueryString=query&AlsoInQueryString=alsoquery\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_null_input_model_and_no_default_value_specified_for_optional_input()\r\n        {\r\n            var url = new RouteInput<SampleViewModelWithInputs>(\"test/edit/{OptionalInput}\");\r\n            url.AddRouteInput(x => x.OptionalInput);\r\n\r\n            url\r\n                .CreateUrlFromInput(null)\r\n                .ShouldEndWith(\"test/edit/default\");\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void create_url_with_null_input_model_and_no_default_value_specified_for_optional_input_with_parameters()\r\n        {\r\n            var url = new RouteInput<SampleViewModelWithInputs>(\"test/edit/{OptionalInput}\");\r\n            url.AddRouteInput(x => x.OptionalInput);\r\n\r\n            var parameters = new RouteParameters<SampleViewModelWithInputs>();\r\n\r\n            url\r\n                .CreateUrlFromParameters(parameters)\r\n                .ShouldEndWith(\"test/edit/default\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_null_input_model_and_no_default_value_specified_for_required_input()\r\n        {\r\n            var url = new RouteInput<SampleViewModelWithInputs>(\"test/edit/{RequiredInput}\");\r\n            url.AddRouteInput(x => x.RequiredInput);\r\n\r\n            Exception<FubuException>.ShouldBeThrownBy(() => url.CreateUrlFromInput(null));\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_null_input_model_and_no_default_value_specified_for_required_input_with_parameters()\r\n        {\r\n            var url = new RouteInput<SampleViewModelWithInputs>(\"test/edit/{RequiredInput}\");\r\n            url.AddRouteInput(x => x.RequiredInput);\r\n\r\n            Exception<FubuException>.ShouldBeThrownBy(() => url.CreateUrlFromParameters(null));\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_querystring_and_inputmodel()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"test/edit/{InPath}\");\r\n            url.AddRouteInput(x => x.InPath);\r\n            url.AddQueryInput(x => x.InQueryString);\r\n\r\n            url.CreateUrlFromInput(new SampleViewModel\r\n            {\r\n                InPath = \"5\",\r\n                InQueryString = \"query\"\r\n            }).ShouldBe(\"test/edit/5?InQueryString=query\");\r\n        }\r\n\r\n        [Test]\r\n        public void will_not_use_query_string_if_there_is_no_value()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"test/edit/{InPath}\");\r\n            url.AddRouteInput(x => x.InPath);\r\n            url.AddQueryInput(x => x.InQueryString);\r\n\r\n            url.CreateUrlFromInput(new SampleViewModel\r\n            {\r\n                InPath = \"5\",\r\n                InQueryString = null\r\n            }).ShouldBe(\"test/edit/5\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_querystring_and_inputmodel_with_parameters()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"test/edit/{InPath}\");\r\n            url.AddRouteInput(x => x.InPath);\r\n            url.AddQueryInput(x => x.InQueryString);\r\n\r\n            var parameters = new RouteParameters<SampleViewModel>();\r\n            parameters[x => x.InPath] = \"5\";\r\n            parameters[x => x.InQueryString] = \"query\";\r\n\r\n            url.CreateUrlFromParameters(parameters).ShouldBe(\"test/edit/5?InQueryString=query\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_url_with_variables_in_querystring()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"/my/sample/path\");\r\n            url.AddQueryInput(x => x.InQueryString);\r\n\r\n            url.CreateUrlFromInput(new SampleViewModel\r\n            {\r\n                InQueryString = \"query\"\r\n            }).ShouldBe(\"/my/sample/path?InQueryString=query\");\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void create_url_with_variables_in_querystring_with_parameters()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"/my/sample/path\");\r\n            url.AddQueryInput(x => x.InQueryString);\r\n\r\n            var parameters = new RouteParameters<SampleViewModel>();\r\n            parameters[x => x.InQueryString] = \"query\";\r\n\r\n            url.CreateUrlFromParameters(parameters).ShouldBe(\"/my/sample/path?InQueryString=query\");\r\n        }\r\n\r\n        [Test]\r\n        public void does_not_create_default_for_a_simple_parameter()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"my/sample\");\r\n            url.AddRouteInput(x => x.InPath);\r\n            Route route = url.Parent.ToRoute();\r\n\r\n            route.Defaults.Count().ShouldBe(0);\r\n        }\r\n\r\n        [Test]\r\n        public void prepend_to_route()\r\n        {\r\n            var route = new RouteDefinition(\"my/sample\");\r\n            route.Prepend(\"area\");\r\n\r\n            route.Pattern.ShouldBe(\"area/my/sample\");\r\n        }\r\n\r\n        [Test]\r\n        public void prepend_to_route_takes_care_of_stupid_trailing_leading_slashes()\r\n        {\r\n            var route = new RouteDefinition(\"my/sample\");\r\n            route.Prepend(\"area/\");\r\n\r\n            route.Pattern.ShouldBe(\"area/my/sample\");\r\n        }\r\n\r\n        [Test]\r\n        public void route_input_should_substitute_method()\r\n        {\r\n            SingleProperty accessor = SingleProperty.Build<SampleViewModel>(x => x.InPath);\r\n            var viewModel = new SampleViewModel\r\n            {\r\n                InPath = \"5\"\r\n            };\r\n            var routeInput = new RouteParameter(accessor);\r\n\r\n            routeInput.Substitute(viewModel, \"test/edit/{InPath}\").ShouldBe(\"test/edit/5\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_have_one_default_value_for_a_route_and_does_not_include_querystring_in_route()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"my/sample\");\r\n            url.AddRouteInput(x => x.InPath);\r\n            url.AddQueryInput(x => x.InQueryString);\r\n            url.RouteInputFor(\"InPath\").DefaultValue = \"something\";\r\n            url.QueryInputFor(\"InQueryString\").DefaultValue = \"querysomething\";\r\n            Route route = url.Parent.ToRoute();\r\n\r\n            route.Defaults.Count().ShouldBe(1);\r\n        }\r\n\r\n        [Test]\r\n        public void should_have_one_default_value_for_route()\r\n        {\r\n            var url = new RouteInput<SampleViewModel>(\"my/sample\");\r\n            url.AddRouteInput(x => x.InPath);\r\n            url.AddRouteInput(x => x.AlsoInPath);\r\n            url.RouteInputFor(\"InPath\").DefaultValue = \"something\";\r\n            Route route = url.Parent.ToRoute();\r\n\r\n            route.Defaults.Count().ShouldBe(1);\r\n        }\r\n\r\n        [Test]\r\n        public void should_not_have_constraints_by_default()\r\n        {\r\n            var url = new RouteDefinition(\"my/sample\");\r\n            Route route = url.ToRoute();\r\n\r\n            route.Constraints.ShouldBeNull();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void no_http_method_constraints_on_startup()\r\n        {\r\n            var route = new RouteDefinition(\"something\");\r\n            route.GetHttpMethodConstraints().Any().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void add_http_method_constraint()\r\n        {\r\n            var route = new RouteDefinition(\"something\");\r\n            route.AddHttpMethodConstraint(\"get\");\r\n\r\n            route.GetHttpMethodConstraints().ShouldHaveTheSameElementsAs(\"GET\");\r\n        }\r\n\r\n        [Test]\r\n        public void add_http_method_constraint_multiple_times()\r\n        {\r\n            var route = new RouteDefinition(\"something\");\r\n            route.AddHttpMethodConstraint(\"get\");\r\n            route.AddHttpMethodConstraint(\"Get\");\r\n\r\n            route.GetHttpMethodConstraints().ShouldHaveTheSameElementsAs(\"GET\");\r\n        }\r\n\r\n        [Test]\r\n        public void add_multiple_http_constraints()\r\n        {\r\n            var route = new RouteDefinition(\"something\");\r\n            route.AddHttpMethodConstraint(\"get\");\r\n            route.AddHttpMethodConstraint(\"POST\");\r\n\r\n            route.GetHttpMethodConstraints().ShouldHaveTheSameElementsAs(\"GET\", \"POST\");\r\n        }\r\n\r\n        [Test]\r\n        public void add_multiple_http_method_constraint_multiple_times()\r\n        {\r\n            var route = new RouteDefinition(\"something\");\r\n            route.AddHttpMethodConstraint(\"get\");\r\n            route.AddHttpMethodConstraint(\"Get\");\r\n            route.AddHttpMethodConstraint(\"Post\");\r\n            route.AddHttpMethodConstraint(\"POST\");\r\n\r\n            route.GetHttpMethodConstraints().ShouldHaveTheSameElementsAs(\"GET\", \"POST\");\r\n        }\r\n\r\n        [Test]\r\n        public void create_route_with_no_http_constraints()\r\n        {\r\n            var route = new RouteDefinition(\"something\").ToRoute();\r\n            route.Constraints.ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void create_route_with_http_constraints()\r\n        {\r\n            var route = new RouteDefinition(\"something\");\r\n            route.AddHttpMethodConstraint(\"Get\");\r\n            route.AddHttpMethodConstraint(\"POST\");\r\n\r\n        \r\n            route.ToRoute().Constraints.Single().Value.ShouldBeOfType<HttpMethodConstraint>()\r\n                .AllowedMethods.ShouldHaveTheSameElementsAs(\"GET\", \"POST\");\r\n        }\r\n\r\n        [Test]\r\n        public void responds_to_get_with_no_constraints()\r\n        {\r\n            var route = new RouteDefinition(\"something\");\r\n            route.RespondsToMethod(\"GET\").ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void responds_to_get_if_GET_is_explicitly_allowed()\r\n        {\r\n            var route = new RouteDefinition(\"something\");\r\n            route.AddHttpMethodConstraint(\"Get\");\r\n            route.AddHttpMethodConstraint(\"POST\");\r\n            route.RespondsToMethod(\"GET\").ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void does_not_respond_to_get_if_http_methods_are_explicitly_defined_and_get_is_not_allowed()\r\n        {\r\n            var route = new RouteDefinition(\"something\");\r\n            route.AddHttpMethodConstraint(\"POST\");\r\n            route.RespondsToMethod(\"GET\").ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void default_value_syntax_for_urlpattern_produces_correct_route()\r\n        {\r\n            var parent = new RouteDefinition(\"my/sample/{InPath:hello}/{AlsoInPath:world}\");\r\n            parent.Input = new RouteInput<SampleViewModel>(parent);\r\n\r\n            var route = parent.ToRoute();\r\n\r\n            Regex.Match(route.Url, @\":\\w+\").Success.ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void describing_itself_session_state()\r\n        {\r\n            var route = new RouteDefinition(\"something\");\r\n            route.SessionStateRequirement.ShouldBeNull();\r\n\r\n            Description.For(route).Properties[\"SessionStateRequirement\"].ShouldBe(\"Default\");\r\n\r\n\r\n            route.SessionStateRequirement = SessionStateRequirement.RequiresSessionState;\r\n\r\n            Description.For(route).Properties[\"SessionStateRequirement\"].ShouldBe(\r\n                SessionStateRequirement.RequiresSessionState.ToString());\r\n        }\r\n\r\n        [Test]\r\n        public void describing_itself_gets_the_title()\r\n        {\r\n            Description.For(new RouteDefinition(\"something\")).Title.ShouldBe(\"Route:  something\");\r\n        }\r\n\r\n        [Test]\r\n        public void describe_itself_adds_child_for_RouteInput()\r\n        {\r\n            var route = RouteBuilder.Build(typeof (BigModel), \"big/{Name}/{State}\");\r\n\r\n            var description = Description.For(route);\r\n\r\n            description.Children[\"Input\"].Title.ShouldBe(Description.For(route.Input).Title);\r\n        }\r\n\r\n    }\r\n\r\n    public class BigModel\r\n    {\r\n        public string Name { get; set; }\r\n        public string State { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/RouteInputTester.cs",
    "content": "using FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class RouteInputTester\r\n    {\r\n        private RouteParameter _parameter;\r\n        public class FakeInput {public string Code { get; set; }}\r\n        \r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            _parameter = new RouteParameter(ReflectionHelper.GetAccessor<FakeInput>(x => x.Code));\r\n        }\r\n\r\n        [Test]\r\n        public void to_query_string_of_empty_value_returns_name()\r\n        {\r\n            _parameter.ToQueryString(new FakeInput()).ShouldBe(_parameter.Name + \"=\");\r\n        }\r\n\r\n        [Test]\r\n        public void to_query_string_fromwith_encoded_value()\r\n        {\r\n            _parameter.ToQueryString(new FakeInput { Code = \"abc/def&ghi=jkl\" }).ShouldBe(_parameter.Name + \"=abc%2Fdef%26ghi%3Djkl\");\r\n        }\r\n\r\n        [Test]\r\n        public void substitute_on_route_parameter()\r\n        {\r\n            var parameters = new RouteParameters<FakeInput>();\r\n            parameters[x => x.Code] = \"something\";\r\n            _parameter.Substitute(parameters, \"aaa/{Code}/aaa\").ShouldBe(\"aaa/something/aaa\");\r\n        }\r\n\r\n        [Test]\r\n        public void substitute_on_route_parameter_deals_with_html_encoding()\r\n        {\r\n            var parameters = new RouteParameters<FakeInput>();\r\n            parameters[x => x.Code] = \"something&else\";\r\n            _parameter.Substitute(parameters, \"aaa/{Code}/aaa\").ShouldBe(\"aaa/something%26else/aaa\");\r\n        }\r\n\r\n        [Test]\r\n        public void can_substitute_greedy_parameters()\r\n        {\r\n            var parameters = new RouteParameters<FakeInput>();\r\n            parameters[x => x.Code] = \"computers/laptop/i7/dell&ibm\";\r\n            _parameter.Substitute(parameters, \"product/category/{*Code}\").ShouldBe(\"product/category/computers/laptop/i7/dell%26ibm\");\r\n        }\r\n\r\n        [Test]\r\n        public void can_substitute_greedy_parameters_deals_with_html_encoding()\r\n        {\r\n            var parameters = new RouteParameters<FakeInput>();\r\n            parameters[x => x.Code] = \"laptop&apple\";\r\n            _parameter.Substitute(parameters, \"product/category/{*Code}\").ShouldBe(\"product/category/laptop%26apple\");\r\n        }\r\n\r\n        [Test]\r\n        public void is_satisfied_negative()\r\n        {\r\n            _parameter.IsSatisfied(new RouteParameters()).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void is_satisfied_positive()\r\n        {\r\n            var parameters = new RouteParameters<FakeInput>();\r\n            parameters[x => x.Code] = \"something\";\r\n\r\n            _parameter.IsSatisfied(parameters).ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void is_satisfied_with_a_default_value_but_nothing_in_the_parameters()\r\n        {\r\n            var parameters = new RouteParameters<FakeInput>();\r\n\r\n            _parameter.DefaultValue = \"something\";\r\n\r\n            _parameter.IsSatisfied(parameters).ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void to_query_string_from_route_parameter_with_no_values()\r\n        {\r\n            _parameter.ToQueryString(new RouteParameters()).ShouldBe(\"Code=\");\r\n        }\r\n\r\n        [Test]\r\n        public void to_query_string_from_route_parameter_with_a_value()\r\n        {\r\n            var parameters = new RouteParameters<FakeInput>();\r\n            parameters[x => x.Code] = \"something\";\r\n\r\n            _parameter.ToQueryString(parameters).ShouldBe(\"Code=something\");\r\n        }\r\n\r\n        [Test]\r\n        public void to_query_string_from_route_parameter_with_an_encoded_value()\r\n        {\r\n            var parameters = new RouteParameters<FakeInput>();\r\n            parameters[x => x.Code] = \"abc/def&ghi=jkl\";\r\n\r\n            _parameter.ToQueryString(parameters).ShouldBe(\"Code=abc%2Fdef%26ghi%3Djkl\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/SettingsCollectionTester.cs",
    "content": "using System.Threading;\r\nusing FubuMVC.Core.Registration;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n\r\n\r\n    [TestFixture]\r\n    public class SettingsCollection_without_a_parent_Tester\r\n    {\r\n        private SettingsCollection theSettings;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theSettings = new SettingsCollection();\r\n        }\r\n\r\n        [Test]\r\n        public void get_can_happily_create_the_default()\r\n        {\r\n            theSettings.Get<FakeSettings>().ShouldBe(new FakeSettings());\r\n        }\r\n\r\n        [Test]\r\n        public void can_completely_replace_the_settings()\r\n        {\r\n            theSettings.Replace(new FakeSettings {Name = \"Lindsey\", Hometown = \"San Antonio\"});\r\n\r\n            theSettings.Get<FakeSettings>().ShouldBe(new FakeSettings {Name = \"Lindsey\", Hometown = \"San Antonio\"});\r\n        }\r\n\r\n        [Test]\r\n        public void can_alter_the_settings_without_replacing_it()\r\n        {\r\n            var original = theSettings.Get<FakeSettings>();\r\n\r\n            theSettings.Alter<FakeSettings>(x =>\r\n            {\r\n                Thread.Sleep(500);\r\n                x.Name = \"Max\";\r\n            });\r\n\r\n            theSettings.Get<FakeSettings>().ShouldBeTheSameAs(original);\r\n            theSettings.Get<FakeSettings>().Name.ShouldBe(\"Max\");\r\n        }\r\n\r\n        [Test]\r\n        public void has_explicit_test()\r\n        {\r\n            theSettings.HasExplicit<FakeSettings>().ShouldBeFalse();\r\n\r\n            theSettings.Replace(new FakeSettings());\r\n\r\n            theSettings.HasExplicit<FakeSettings>().ShouldBeTrue();\r\n        }\r\n    }\r\n\r\n    public class FakeSettings\r\n    {\r\n        public string Name = \"Jeremy\";\r\n        public string Hometown = \"Jasper\";\r\n\r\n        public bool Equals(FakeSettings other)\r\n        {\r\n            if (ReferenceEquals(null, other)) return false;\r\n            if (ReferenceEquals(this, other)) return true;\r\n            return Equals(other.Name, Name) && Equals(other.Hometown, Hometown);\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (ReferenceEquals(null, obj)) return false;\r\n            if (ReferenceEquals(this, obj)) return true;\r\n            if (obj.GetType() != typeof (FakeSettings)) return false;\r\n            return Equals((FakeSettings) obj);\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            unchecked\r\n            {\r\n                return ((Name != null ? Name.GetHashCode() : 0)*397) ^ (Hometown != null ? Hometown.GetHashCode() : 0);\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/SettingsCollection_creates_with_the_app_setting_provider_Tester.cs",
    "content": "﻿using System;\r\nusing FubuCore.Configuration;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class SettingsCollection_creates_with_the_app_setting_provider_Tester\r\n    {\r\n        [Test]\r\n        public void pulls_value_from_config()\r\n        {\r\n            // look at FubuMVC.Tests.dll.config\r\n\r\n\r\n            AppSettingsProvider.GetValueFor<DiagnosticsSettings>(x => x.TraceLevel)\r\n                .ShouldBe(TraceLevel.None.ToString());\r\n\r\n            var collection = new SettingsCollection();\r\n            collection.Get<DiagnosticsSettings>()\r\n                .TraceLevel.ShouldBe(TraceLevel.None);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Utilities/ActionCallSpec.cs",
    "content": "using System;\r\nusing System.Linq.Expressions;\r\nusing System.Reflection;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Tests.Registration.Utilities\r\n{\r\n    public class ActionCallSpec : ChainedBehaviorSpec<ActionCall>\r\n    {\r\n        private readonly MethodInfo _method;\r\n        private readonly Type _type;\r\n\r\n        public ActionCallSpec(Type type, MethodInfo method)\r\n        {\r\n            _type = type;\r\n            _method = method;\r\n        }\r\n\r\n        public static ActionCallSpec For<T>(Expression<Func<T, object>> expression)\r\n        {\r\n            MethodInfo method = ReflectionHelper.GetMethod(expression);\r\n            return new ActionCallSpec(typeof (T), method);\r\n        }\r\n\r\n        public static ActionCallSpec For<T>(Expression<Action<T>> expression)\r\n        {\r\n            MethodInfo method = ReflectionHelper.GetMethod(expression);\r\n            return new ActionCallSpec(typeof (T), method);\r\n        }\r\n\r\n        protected override void doSpecificCheck(ActionCall call, BehaviorSpecCheck check)\r\n        {\r\n            if (call.HandlerType != _type)\r\n            {\r\n                check.RegisterError(\"type was \" + call.HandlerType.Name);\r\n            }\r\n\r\n            if (call.Method != _method)\r\n            {\r\n                check.RegisterError(\"method was \" + call.Method.Name);\r\n            }\r\n        }\r\n\r\n\r\n        public override string ToString()\r\n        {\r\n            return \"Call {0}.{1}\".ToFormat(_type.Name, _method.Name);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Utilities/BehaviorSpec.cs",
    "content": "using System;\r\nusing System.Linq.Expressions;\r\nusing FubuMVC.Core.Registration.Nodes;\r\n\r\nnamespace FubuMVC.Tests.Registration.Utilities\r\n{\r\n    public interface IBehaviorSpec\r\n    {\r\n        void Verify(BehaviorSpecCheck check, BehaviorNode node);\r\n    }\r\n\r\n    public abstract class BehaviorSpec<T> : IBehaviorSpec where T : BehaviorNode\r\n    {\r\n        public void Verify(BehaviorSpecCheck check, BehaviorNode node)\r\n        {\r\n            check.Write(ToString());\r\n\r\n            if (node == null)\r\n            {\r\n                check.RegisterError(\"was null\");\r\n                return;\r\n            }\r\n\r\n            var specific = node as T;\r\n            if (specific == null)\r\n            {\r\n                check.RegisterError(\"was \" + node.GetType().Name);\r\n                return;\r\n            }\r\n\r\n            specificChecks(specific, check);\r\n        }\r\n\r\n        public void Verify(BehaviorChain chain)\r\n        {\r\n            var check = new BehaviorSpecCheck();\r\n            Verify(check, chain.Top);\r\n\r\n\r\n            check.AssertBehaviors();\r\n        }\r\n\r\n        protected abstract void specificChecks(T call, BehaviorSpecCheck check);\r\n\r\n        protected void propagate(BehaviorSpecCheck check, IBehaviorSpec spec, BehaviorNode node)\r\n        {\r\n            if (spec == null && node != null)\r\n            {\r\n                check.RegisterError(\"unexpected node:  \" + node);\r\n            }\r\n\r\n            if (spec != null)\r\n            {\r\n                spec.Verify(check, node);\r\n            }\r\n        }\r\n    }\r\n\r\n    public abstract class ChainedBehaviorSpec<T> : BehaviorSpec<T> where T : BehaviorNode\r\n    {\r\n        public IBehaviorSpec Inner { get; set; }\r\n\r\n        protected override void specificChecks(T node, BehaviorSpecCheck check)\r\n        {\r\n            doSpecificCheck(node, check);\r\n            propagate(check, Inner, node.Next);\r\n        }\r\n\r\n        protected abstract void doSpecificCheck(T node, BehaviorSpecCheck check);\r\n\r\n        public ActionCallSpec Call<C>(Expression<Func<C, object>> expression)\r\n        {\r\n            ActionCallSpec call = ActionCallSpec.For(expression);\r\n            Inner = call;\r\n            return call;\r\n        }\r\n\r\n        public ActionCallSpec Call<C>(Expression<Action<C>> expression)\r\n        {\r\n            ActionCallSpec call = ActionCallSpec.For(expression);\r\n            Inner = call;\r\n            return call;\r\n        }\r\n\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/Utilities/BehaviorSpecCheck.cs",
    "content": "using System.IO;\r\nusing System.Text;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration.Utilities\r\n{\r\n    public class BehaviorSpecCheck\r\n    {\r\n        private readonly StringBuilder _builder = new StringBuilder();\r\n        private readonly StringWriter _writer;\r\n        private bool _hasErrors;\r\n        private int _level;\r\n\r\n        public BehaviorSpecCheck()\r\n        {\r\n            _writer = new StringWriter(_builder);\r\n        }\r\n\r\n        public void AssertBehaviors()\r\n        {\r\n            if (_hasErrors)\r\n            {\r\n                Assert.Fail(_builder.ToString());\r\n            }\r\n        }\r\n\r\n        public void Write(string description)\r\n        {\r\n            newLine();\r\n\r\n            _writer.Write(description);\r\n        }\r\n\r\n        private void newLine()\r\n        {\r\n            _writer.WriteLine();\r\n            for (int i = 0; i < _level; i++)\r\n            {\r\n                _writer.Write(\"  \");\r\n            }\r\n        }\r\n\r\n        public void RegisterError(string error)\r\n        {\r\n            _hasErrors = true;\r\n            newLine();\r\n            _writer.Write(\"  Error:  \" + error);\r\n        }\r\n\r\n        public void Increment()\r\n        {\r\n            _level++;\r\n        }\r\n\r\n        public void Decrement()\r\n        {\r\n            _level++;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/WrapperTester.cs",
    "content": "using System;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.StructureMap;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class WrapperTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            _wrapper = new Wrapper(typeof (NulloBehavior));\r\n        }\r\n\r\n        #endregion\r\n\r\n        private Wrapper _wrapper;\r\n\r\n        [Test]\r\n        public void can_get_the_concrete_behavior_type()\r\n        {\r\n            _wrapper.BehaviorType.ShouldBe(typeof (NulloBehavior));\r\n\r\n            _wrapper.BehaviorType.ShouldBe(typeof (NulloBehavior));\r\n        }\r\n\r\n        [Test]\r\n        public void build_an_object_def_for_the_type()\r\n        {\r\n            var def = _wrapper.As<IContainerModel>().ToInstance().As<IConfiguredInstance>();\r\n            def.Dependencies.Count().ShouldBe(0);\r\n\r\n            def.PluggedType.ShouldBe(typeof (NulloBehavior));\r\n        }\r\n\r\n        [Test]\r\n        public void ctor_blows_up_if_the_type_is_not_an_action_behavior()\r\n        {\r\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(() => { new Wrapper(GetType()); });\r\n        }\r\n\r\n        [Test]\r\n        public void put_a_dependency_into_the_object_def_for_the_inner_behavior()\r\n        {\r\n            _wrapper.AddAfter(Wrapper.For<FakeBehavior>());\r\n            var def = _wrapper.As<IContainerModel>().ToInstance().As<IConfiguredInstance>();\r\n\r\n            def.Dependencies.Count().ShouldBe(1);\r\n\r\n            def.FindDependencyDefinitionFor<IActionBehavior>().ReturnedType\r\n                .ShouldBe(typeof (FakeBehavior));\r\n\r\n      \r\n        }\r\n\r\n        [Test]\r\n        public void the_object_def_name_is_copied_from_the_unique_id_of_the_wrapper()\r\n        {\r\n            _wrapper.As<IContainerModel>().ToInstance().Name.ShouldBe(\r\n                _wrapper.UniqueId.ToString());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/attaching_behaviors_to_action_calls.cs",
    "content": "using System;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class attaching_behaviors_to_action_calls\r\n    {\r\n        private BehaviorGraph graph;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            graph = BehaviorGraph.BuildFrom(x => x.Actions.IncludeClassesSuffixedWithController());\r\n        }\r\n\r\n        [Test]\r\n        public void can_prepend_behaviors_in_front_of_an_action()\r\n        {\r\n            graph.Actions().Each(x => x.AddBefore(Wrapper.For<MyWrapper>()));\r\n\r\n            graph.Actions().Each(x =>\r\n            {\r\n                x.Previous.ShouldBeOfType<Wrapper>().BehaviorType.ShouldBe(typeof(MyWrapper));\r\n            });\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void can_prepend_behaviors_in_front_of_an_action_2()\r\n        {\r\n            graph.Actions().Each(x => x.WrapWith<MyWrapper>());\r\n\r\n            graph.Actions().Each(x =>\r\n            {\r\n                x.Previous.ShouldBeOfType<Wrapper>().BehaviorType.ShouldBe(typeof(MyWrapper));\r\n            });\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void can_prepend_behaviors_in_front_of_an_action_3()\r\n        {\r\n            graph.Actions().Each(x => x.WrapWith(typeof(MyWrapper)));\r\n\r\n            graph.Actions().Each(x =>\r\n            {\r\n                x.Previous.ShouldBeOfType<Wrapper>().BehaviorType.ShouldBe(typeof(MyWrapper));\r\n            });\r\n        }\r\n\r\n    }\r\n\r\n    public class MyWrapper : BasicBehavior\r\n    {\r\n        public MyWrapper()\r\n            : base(PartialBehavior.Executes)\r\n        {\r\n        }\r\n\r\n        protected override Task<DoNext> performInvoke()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/default_action_discovery.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing HtmlTags;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class default_action_discovery\r\n    {\r\n        [Test]\r\n        public void with_no_other_explicit_action_discovery()\r\n        {\r\n            var graph = BehaviorGraph.BuildEmptyGraph();\r\n\r\n\r\n            graph.ChainFor<MyEndpoint>(x => x.Go()).ShouldNotBeNull();\r\n            graph.ChainFor<MyEndpoints>(x => x.Go()).ShouldNotBeNull();\r\n            graph.ChainFor<MyEndpoints>(x => x.Go2()).ShouldNotBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void does_not_find_endpoints_with_an_explicit_action_discovery()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.DisableDefaultActionSource();\r\n                x.Actions.IncludeClassesSuffixedWithController();\r\n            });\r\n\r\n            graph.ChainFor<MyEndpoint>(x => x.Go()).ShouldBeNull();\r\n            graph.ChainFor<MyEndpoints>(x => x.Go()).ShouldBeNull();\r\n            graph.ChainFor<MyEndpoints>(x => x.Go2()).ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void does_not_find_endpoints_with_an_explicit_action_discovery_policy()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.DisableDefaultActionSource();\r\n                x.Actions.FindWith(new FakeActionSource());\r\n            });\r\n\r\n            graph.ChainFor<MyEndpoint>(x => x.Go()).ShouldBeNull();\r\n            graph.ChainFor<MyEndpoints>(x => x.Go()).ShouldBeNull();\r\n            graph.ChainFor<MyEndpoints>(x => x.Go2()).ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void will_find_endpoints_if_endpoint_is_explictly_specified_too()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x =>\r\n            {\r\n                x.Actions.FindWith(new FakeActionSource());\r\n                x.Actions.IncludeClassesSuffixedWithEndpoint();\r\n            });\r\n\r\n            graph.ChainFor<MyEndpoint>(x => x.Go()).ShouldNotBeNull();\r\n            graph.ChainFor<MyEndpoints>(x => x.Go()).ShouldNotBeNull();\r\n            graph.ChainFor<MyEndpoints>(x => x.Go2()).ShouldNotBeNull();\r\n        }\r\n    }\r\n\r\n    public class FakeActionSource : IActionSource\r\n    {\r\n        public Task<ActionCall[]> FindActions(Assembly applicationAssembly)\r\n        {\r\n            return Task.FromResult(new ActionCall[0]);\r\n        }\r\n    }\r\n\r\n    public class MyEndpoint\r\n    {\r\n        public HtmlTag Go()\r\n        {\r\n            return new HtmlTag(\"div\");\r\n        }\r\n    }\r\n\r\n    public class MyEndpoints\r\n    {\r\n        public HtmlTag Go()\r\n        {\r\n            return new HtmlTag(\"div\");\r\n        }\r\n\r\n        public HtmlTag Go2()\r\n        {\r\n            return new HtmlTag(\"div\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/system_policy_for_authorization.cs",
    "content": "using FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Security;\r\nusing FubuMVC.Core.Security.Authorization;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing System.Linq;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    [TestFixture]\r\n    public class when_using_the_default_authorization_policy\r\n    {\r\n        private BehaviorGraph graph;\r\n        private BehaviorChain goChain;\r\n        private BehaviorChain moveChain;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            var registry = new FubuRegistry(x => {\r\n                x.Actions.IncludeClassesSuffixedWithController();\r\n\r\n                x.Configure(g =>\r\n                {\r\n                    g.ChainFor<AuthorizedController>(c => c.Go(null)).Authorization.AddRole(\"RoleA\");\r\n                });\r\n            });\r\n\r\n            graph = BehaviorGraph.BuildFrom(registry);\r\n\r\n            goChain = graph.ChainFor<AuthorizedController>(x => x.Go(null));\r\n            moveChain = graph.ChainFor<AuthorizedController>(x => x.Move(null));\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void do_not_attach_the_authorization_node_if_there_are_no_authorization_rules_for_a_chain()\r\n        {\r\n            moveChain.Top.Any(x => x is AuthorizationNode).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void do_attach_the_authorization_node_if_there_is_an_explicit_authorization_rule_for_a_chain()\r\n        {\r\n            goChain.ShouldContain(goChain.Authorization.As<AuthorizationNode>());\r\n        }\r\n    }\r\n\r\n\r\n    public class AuthorizedController\r\n    {\r\n        public void Go(InputModel model)\r\n        {\r\n            \r\n        }\r\n\r\n        public void Move(InputModel model)\r\n        {\r\n            \r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Registration/when_importing_urls.cs",
    "content": "using System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Registration\r\n{\r\n    public class RegistryImportEndpoint\r\n    {\r\n        public string get_method1_Name_Age(RegistryImportInput input)\r\n        {\r\n            return \"Hi.\";\r\n        }\r\n\r\n        public string get_method2_Name_Age(RegistryImportInput input)\r\n        {\r\n            return \"Hi.\";\r\n        }\r\n\r\n        public string get_method3_Name_Age(RegistryImportInput input)\r\n        {\r\n            return \"Hi.\";\r\n        }\r\n\r\n        [FubuPartial]\r\n        public void GoPartial(RegistryImportInput input)\r\n        {\r\n            \r\n        }\r\n    }\r\n\r\n    public class RegistryImportInput\r\n    {\r\n        public string Name { get; set; }\r\n        public int Age { get; set; }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_importing_urls\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            registry1 = new FubuRegistry();\r\n            registry1.Actions.IncludeType<RegistryImportEndpoint>();\r\n\r\n            theImport = new RegistryImport\r\n            {\r\n                Prefix = \"area1\",\r\n                Registry = registry1\r\n            };\r\n\r\n            graph2 = BehaviorGraph.BuildFrom(x => {\r\n                x.Actions.IncludeType<TestController>();\r\n            });\r\n\r\n            theImport.InitializeSettings(graph2);\r\n            graph2.As<IChainImporter>().Import(theImport.BuildChains(graph2, new PerfTimer()).Result());\r\n        }\r\n\r\n        #endregion\r\n\r\n        private BehaviorGraph graph2;\r\n        private FubuRegistry registry1;\r\n        private RegistryImport theImport;\r\n\r\n        [Test]\r\n        public void should_have_all_the_routes_from_the_imported_graph()\r\n        {\r\n            graph2.Routes.Any(x => x.GetRoutePattern() == \"area1/method1/{Name}/{Age}\").ShouldBeTrue();\r\n            graph2.Routes.Any(x => x.GetRoutePattern() == \"area1/method2/{Name}/{Age}\").ShouldBeTrue();\r\n            graph2.Routes.Any(x => x.GetRoutePattern() == \"area1/method3/{Name}/{Age}\").ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void should_have_imported_the_behavior_chains_without_routes()\r\n        {\r\n            graph2.ChainFor<RegistryImportEndpoint>(x => x.GoPartial(null))\r\n                .ShouldNotBeNull();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Resources/Conneg/ConnegGraphTester.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Projections;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing FubuMVC.Core.Runtime;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Resources.Conneg\r\n{\r\n    [TestFixture]\r\n    public class ConnegGraphTester\r\n    {\r\n        private readonly ConnegGraph graph = ConnegGraph.Build(new BehaviorGraph { ApplicationAssembly = Assembly.GetExecutingAssembly() }).Result();\r\n\r\n        [Test]\r\n        public void build_conneg_graph_for_the_app_domain()\r\n        {;\r\n\r\n            graph.Writers.ShouldContain(typeof(Resource1Writer1));\r\n            graph.Writers.ShouldContain(typeof(Resource1Writer2));\r\n            graph.Writers.ShouldContain(typeof(Resource1Writer3));\r\n            graph.Writers.ShouldContain(typeof(Resource2Writer1));\r\n            graph.Writers.ShouldContain(typeof(Resource2Writer2));\r\n            graph.Writers.ShouldContain(typeof(Resource2Writer3));\r\n\r\n            graph.Readers.ShouldContain(typeof(Input1Reader1));\r\n            graph.Readers.ShouldContain(typeof(Input1Reader2));\r\n            graph.Readers.ShouldContain(typeof(Input2Reader));\r\n        }\r\n\r\n        [Test]\r\n        public void find_writers_for_resource_type()\r\n        {\r\n            graph.WriterTypesFor(typeof(Resource2)).ShouldHaveTheSameElementsAs(typeof(Resource2Writer1), typeof(Resource2Writer2), typeof(Resource2Writer3));\r\n        }\r\n\r\n        [Test]\r\n        public void find_readers_for_input_type()\r\n        {\r\n            graph.ReaderTypesFor(typeof (Input2)).Single()\r\n                .ShouldBe(typeof (Input2Reader));\r\n        }\r\n\r\n        \r\n    }\r\n\r\n    public class Input1{}\r\n    public class Input2{}\r\n\r\n    public class Resource1{}\r\n    public class Resource2{}\r\n\r\n\r\n    public class Resource1Writer1 : Projection<Resource1>{}\r\n    public class Resource1Writer2 : Projection<Resource1>{}\r\n    public class Resource1Writer3 : Projection<Resource1>{}\r\n    public class Resource2Writer1 : Projection<Resource2>{}\r\n    public class Resource2Writer2 : Projection<Resource2>{}\r\n    public class Resource2Writer3 : Projection<Resource2>{}\r\n\r\n\r\n    public class Input1Reader1 : IReader<Input1>\r\n    {\r\n        public IEnumerable<string> Mimetypes { get; private set; }\r\n        public Task<Input1> Read(string mimeType, IFubuRequestContext context)\r\n        {\r\n            throw new System.NotImplementedException();\r\n        }\r\n    }\r\n\r\n    public class Input1Reader2 : Input1Reader1{}\r\n\r\n\r\n    public class Input2Reader : IReader<Input2>\r\n    {\r\n        public IEnumerable<string> Mimetypes { get; private set; }\r\n        public Task<Input2> Read(string mimeType, IFubuRequestContext context)\r\n        {\r\n            throw new System.NotImplementedException();\r\n        }\r\n    }\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Resources/Conneg/FormatterReaderTester.cs",
    "content": "using FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Runtime.Formatters;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Resources.Conneg\n{\n    [TestFixture]\n    public class FormatterReaderTester : InteractionContext<FormatterReader<Address>>\n    {\n        private MockedFubuRequestContext theContext;\n\n        protected override void beforeEach()\n        {\n            theContext = new MockedFubuRequestContext(Services.Container);\n            Services.Inject<IFubuRequestContext>(theContext);\n        }\n\n        [Test]\n        public void delegates_to_its_formatter_for_mimetypes()\n        {\n            MockFor<IFormatter>().Stub(x => x.MatchingMimetypes)\n                .Return(new[]{\"text/json\", \"application/json\"});\n\n            ClassUnderTest.Mimetypes.ShouldHaveTheSameElementsAs(\"text/json\", \"application/json\");\n        }\n\n        [Test]\n        public void delegates_to_its_formatter_when_it_reads()\n        {\n            var address = new Address();\n\n            MockFor<IFormatter>().Stub(x => x.Read<Address>(theContext))\n                .Return(address.ToCompletionTask());\n\n            ClassUnderTest.Read(\"anything\", theContext).GetAwaiter().GetResult().ShouldBeTheSameAs(address);\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Resources/Conneg/FormatterWriterTester.cs",
    "content": "using FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Runtime.Formatters;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Resources.Conneg\n{\n    [TestFixture]\n    public class FormatterWriterTester : InteractionContext<FormatterWriter<Address>>\n    {\n        [Test]\n        public void delegates_to_its_formatter_for_mimetypes()\n        {\n            MockFor<IFormatter>().Stub(x => x.MatchingMimetypes)\n                .Return(new[]{\"text/json\", \"application/json\"});\n\n            ClassUnderTest.Mimetypes.ShouldHaveTheSameElementsAs(\"text/json\", \"application/json\");\n        }\n\n        [Test]\n        public void delegates_to_its_formatter_when_it_writes()\n        {\n            var address = new Address();\n\n            var context = new MockedFubuRequestContext();\n            ClassUnderTest.Write(\"something\", context, address);\n\n            MockFor<IFormatter>().AssertWasCalled(x => x.Write(context, address, \"something\"));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Resources/Conneg/HtmlStringWriterTester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Tests.TestSupport;\nusing HtmlTags;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Resources.Conneg\n{\n    [TestFixture]\n    public class HtmlStringWriterTester : InteractionContext<HtmlStringWriter<HtmlTag>>\n    {\n        private HtmlTag theTag;\n\n        protected override void beforeEach()\n        {\n            theTag = new HtmlTag(\"div\");\n        }\n\n        [Test]\n        public void the_only_mime_type_is_html()\n        {\n            ClassUnderTest.Mimetypes.Single()\n                .ShouldBe(MimeType.Html.Value);\n        }\n\n        [Test]\n        public void writing_should_write_the_to_string_of_the_target()\n        {\n            var context = new MockedFubuRequestContext(Services.Container);\n\n            ClassUnderTest.Write(MimeType.Html.Value, context, theTag);\n\n            context.Writer.AssertWasCalled(x => x.Write(MimeType.Html.Value, theTag.ToString()));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Resources/Conneg/InputNodeTester.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.Json;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Runtime;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Resources.Conneg\n{\n    [TestFixture]\n    public class InputNodeTester\n    {\n        [Test]\n        public void IMayHaveInputType_implementation()\n        {\n            var node = new InputNode(typeof (Address));\n            node.As<IMayHaveInputType>().InputType().ShouldBe(typeof (Address));\n        }\n\n        [Test]\n        public void ClearAll()\n        {\n            var node = new InputNode(typeof (Address));\n            node.Add(new NewtonsoftJsonFormatter());\n            node.Add(typeof (ModelBindingReader<>));\n\n            node.ClearAll();\n\n            node.Explicits.Any().ShouldBeFalse();\n        }\n\n\n        [Test]\n        public void add_reader_by_formatter()\n        {\n            var node = new InputNode(typeof (Address));\n            var formatter = new NewtonsoftJsonFormatter();\n            node.Add(formatter);\n\n            node.Explicits.Single()\n                .ShouldBeOfType<FormatterReader<Address>>()\n                .Formatter.ShouldBeTheSameAs(formatter);\n        }\n\n        [Test]\n        public void add_reader_by_type()\n        {\n            var node = new InputNode(typeof (Address));\n            node.Add(typeof (GenericReader<>));\n\n            node.Explicits.Single()\n                .ShouldBeOfType<GenericReader<Address>>();\n        }\n\n        [Test]\n        public void add_reader_by_type_sad_path()\n        {\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(() =>\n            {\n                new InputNode(typeof (Address))\n                    .Add(GetType());\n            });\n        }\n\n        [Test]\n        public void add_reader_by_instance_happy_path()\n        {\n            var node = new InputNode(typeof (InputTarget));\n            var reader = new SpecificReader();\n\n            node.Add(reader);\n\n            node.Explicits.Single().ShouldBeTheSameAs(reader);\n        }\n\n        [Test]\n        public void add_reader_by_instance_sad_path()\n        {\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(() =>\n            {\n                new InputNode(typeof (Address))\n                    .Add(new SpecificReader());\n            });\n        }\n    }\n\n\n    public class InputTarget\n    {\n    }\n\n    public class SpecificReader : IReader<InputTarget>\n    {\n        public IEnumerable<string> Mimetypes\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public Task<InputTarget> Read(string mimeType, IFubuRequestContext context)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void Write(string mimeType, OutputTarget resource)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Type ModelType\n        {\n            get { return typeof (InputTarget); }\n        }\n    }\n\n    public class GenericReader<T> : IReader<T>\n    {\n        public IEnumerable<string> Mimetypes\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public Task<T> Read(string mimeType, IFubuRequestContext context)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void Write(string mimeType, T resource)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Type ModelType\n        {\n            get { return typeof (T); }\n        }\n    }\n\n    public class FancyReader<T> : IReader<T>\n    {\n        public Task<T> Read(string mimeType, IFubuRequestContext context)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IEnumerable<string> Mimetypes\n        {\n            get { yield return \"fancy/Reader\"; }\n        }\n\n        public Type ModelType\n        {\n            get { return typeof (T); }\n        }\n    }\n\n    public class FakeAddressReader : IReader<Address>\n    {\n        public IEnumerable<string> Mimetypes\n        {\n            get { yield return \"fake/address\"; }\n        }\n\n        public Task<Address> Read(string mimeType, IFubuRequestContext context)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Type ModelType\n        {\n            get { return typeof (Address); }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Resources/Conneg/InputOutputNodePlacementIntegrationTester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Security.Authorization;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Resources.Conneg\n{\n    [TestFixture]\n    public class InputOutputNodePlacementIntegrationTester\n    {\n        private BehaviorGraph theGraph;\n\n        [SetUp]\n        public void SetUp()\n        {\n            var registry = new FubuRegistry();\n            registry.Actions.IncludeType<PlacementController>();\n\n            theGraph = BehaviorGraph.BuildFrom(registry);\n        }\n\n        [Test]\n        public void input_is_first_even_with_authorization()\n        {\n            theGraph.ChainFor<PlacementController>(x => x.post_payload(null))\n                .Top.ShouldBeOfType<InputNode>()\n                .Next.ShouldBeOfType<AuthorizationNode>();\n        }\n\n        [Test]\n        public void output_is_last()\n        {\n            theGraph.ChainFor<PlacementController>(x => x.post_payload(null))\n                .Last().ShouldBeOfType<OutputNode>();\n        }\n    }\n\n    public class PlacementController\n    {\n        public string SayHello()\n        {\n            return \"hello\";\n        }\n\n        [AllowRole(\"some role\")]\n        public PlacementPayload post_payload(PlacementPayload payload)\n        {\n            return payload;\n        } \n    }\n\n    public class PlacementPayload\n    {\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Resources/Conneg/OutputBehaviorTester.cs",
    "content": "using System.Net;\nusing FubuMVC.Core.Http.Headers;\nusing FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Resources.Conneg\n{\n    [TestFixture]\n    public class when_there_are_outputs_that_would_write_headers : InteractionContext<OutputBehavior<Address>>\n    {\n        protected override void beforeEach()\n        {\n            Services.Container.Configure(x => x.For<IFubuRequestContext>().Use<FubuRequestContext>());\n\n            var headers1 = new HttpHeaderValues();\n            headers1[\"a\"] = \"1\";\n            headers1[\"b\"] = \"2\";\n\n            var headers2 = new HttpHeaderValues();\n            headers2[\"c\"] = \"3\";\n            headers2[\"d\"] = \"4\";\n\n            MockFor<IFubuRequest>().Stub(x => x.Find<IHaveHeaders>()).Return(new IHaveHeaders[] {headers1, headers2});\n\n            ClassUnderTest.WriteHeaders();\n        }\n\n\n        [Test]\n        public void should_write_all_possible_headers()\n        {\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.AppendHeader(\"a\", \"1\"));\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.AppendHeader(\"b\", \"2\"));\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.AppendHeader(\"c\", \"3\"));\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.AppendHeader(\"d\", \"4\"));\n        }\n    }\n\n\n    [TestFixture]\n    public class when_the_resource_cannot_be_found : InteractionContext<OutputBehavior<OutputTarget>>\n    {\n        protected override void beforeEach()\n        {\n            Services.Container.Configure(x => x.For<IFubuRequestContext>().Use<FubuRequestContext>());\n            MockFor<IFubuRequest>().Stub(x => x.Get<OutputTarget>()).Return(null);\n\n\n            ClassUnderTest.Invoke();\n        }\n\n        [Test]\n        public void should_write_the_404_just_in_case()\n        {\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.WriteResponseCode(HttpStatusCode.NotFound));\n        }\n\n        [Test]\n        public void should_call_through_to_the_resource_not_found_handler()\n        {\n            MockFor<IResourceNotFoundHandler>().AssertWasCalled(x => x.HandleResourceNotFound<OutputTarget>());\n        }\n    }\n\n\n    public class OutputTarget\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Resources/Conneg/OutputNodeIntegratedTester.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Json;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Runtime.Formatters;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.Resources.Conneg\n{\n    [TestFixture]\n    public class OutputNodeIntegratedTester\n    {\n        private OutputBehavior<Address> theInputBehavior;\n\n        #region Setup/Teardown\n\n        [TestFixtureSetUp]\n        public void SetUp()\n        {\n            var node = new OutputNode(typeof (Address));\n            node.Add(new NewtonsoftJsonFormatter());\n            node.Add(new XmlFormatter());\n            node.Add(new FakeAddressWriter());\n\n            using (var runtime = FubuRuntime.Basic())\n            {\n                var container = runtime.Get<IContainer>();\n\n                container.Configure(x =>\n                {\n                    // Need a stand in value\n                    x.For<IHttpRequest>().Use(MockRepository.GenerateMock<IHttpRequest>());\n                });\n\n                theInputBehavior =\n                    container.GetInstance<OutputBehavior<Address>>(node.As<IContainerModel>().ToInstance());\n            }\n        }\n\n        [Test]\n        public void first_off_the_behavior_can_be_built()\n        {\n            theInputBehavior.ShouldNotBeNull();\n        }\n\n        [Test]\n        public void first_media_has_the_formatter()\n        {\n            theInputBehavior.Media.First()\n                .ShouldBeOfType<FormatterWriter<Address>>();\n        }\n\n        [Test]\n        public void second_media_has_the_xml_formatter()\n        {\n            theInputBehavior.Media.ElementAt(1).ShouldBeOfType<FormatterWriter<Address>>();\n        }\n\n        [Test]\n        public void third_media_is_the_specific_writer_with_the_conditional()\n        {\n            theInputBehavior.Media.ElementAt(2)\n                .ShouldBeOfType<FakeAddressWriter>();\n        }\n\n        #endregion\n    }\n\n\n    public class FancyWriter<T> : IMediaWriter<T>\n    {\n        public Task Write(string mimeType, IFubuRequestContext context, T resource)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IEnumerable<string> Mimetypes\n        {\n            get { yield return \"fancy/writer\"; }\n        }\n    }\n\n    public class FakeAddressWriter : IMediaWriter<Address>\n    {\n        public Task Write(string mimeType, IFubuRequestContext context, Address resource)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IEnumerable<string> Mimetypes\n        {\n            get { yield return \"fake/address\"; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Resources/Conneg/OutputNodeTester.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.Json;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Runtime.Formatters;\nusing FubuMVC.Core.StructureMap;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Tests.Resources.Conneg\n{\n    [TestFixture]\n    public class OutputNodeTester : IMediaWriter<string>\n    {\n        [Test]\n        public void ClearAll()\n        {\n            var node = new OutputNode(typeof (Address));\n            node.Add(new XmlFormatter());\n            node.Add(new NewtonsoftJsonFormatter());\n\n            node.ClearAll();\n\n            node.Explicits.Any().ShouldBeFalse();\n        }\n\n        public IEnumerable<string> Mimetypes { get; private set; }\n        public Task Write(string mimeType, IFubuRequestContext context, string resource)\n        {\n            throw new NotImplementedException();\n        }\n\n\n        [Test]\n        public void implements_the_IMayHaveResourceType_interface()\n        {\n            var node = new OutputNode(typeof (Address));\n            node.As<IMayHaveResourceType>().ResourceType().ShouldBe(node.ResourceType);\n        }\n\n        [Test]\n        public void add_a_custom_no_resource_handler()\n        {\n            var node = new OutputNode(typeof (Address));\n            node.UseForResourceNotFound<MyFakeResourceNotHandler>();\n\n            var def = node.As<IContainerModel>().ToInstance().As<IConfiguredInstance>();\n\n            def.FindDependencyDefinitionFor<IResourceNotFoundHandler>()\n                .ReturnedType.ShouldBe(typeof (MyFakeResourceNotHandler));\n        }\n\n        [Test]\n        public void no_custom_resource_not_found_handler()\n        {\n            var node = new OutputNode(typeof (Address));\n\n            var def = node.As<IContainerModel>().ToInstance().As<IConfiguredInstance>();\n\n            def.FindDependencyDefinitionFor<IResourceNotFoundHandler>()\n                .ShouldBeNull();\n        }\n\n        [Test]\n        public void add_writer_by_formatter_happy_path_no_condition()\n        {\n            var node = new OutputNode(typeof(Address));\n            var theFormatter = new NewtonsoftJsonFormatter();\n            node.Add(theFormatter);\n\n            node.Explicits.Single().ShouldBeOfType<FormatterWriter<Address>>();\n\n        }\n\n        [Test]\n        public void add_writer_with_explicit_condition()\n        {\n            var node = new OutputNode(typeof(Address));\n            var theFormatter = new NewtonsoftJsonFormatter();\n            node.Add(theFormatter);\n\n            node.Explicits.Single().ShouldBeOfType<FormatterWriter<Address>>();\n\n        }\n\n        [Test]\n        public void add_writer_happy_path_with_open_type()\n        {\n            var node = new OutputNode(typeof(Address)) {typeof (FooWriter<>)};\n\n            node.Explicits.Single().ShouldBeOfType<FooWriter<Address>>();\n        }\n\n        [Test]\n        public void add_writer_happy_path_with_open_type_and_explicit_condition()\n        {\n            var node = new OutputNode(typeof (Address));\n            node.Add(typeof(FooWriter<>));\n\n            node.Explicits.Single().ShouldBeOfType<FooWriter<Address>>();\n        }\n\n        [Test]\n        public void add_writer_sad_path()\n        {\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(() => {\n                var node = new OutputNode(typeof(Address));\n                node.Add(GetType());\n            });\n        }\n\n        [Test]\n        public void add_a_closed_writer_happy_path()\n        {\n            var writer = new SpecialWriter();\n            var node = new OutputNode(typeof (Address));\n            node.Add(writer);\n\n            var media = node.Explicits.Single().ShouldBeTheSameAs(writer);\n        }\n\n        [Test]\n        public void add_a_closed_writer_with_conditional()\n        {\n            var writer = new SpecialWriter();\n            var node = new OutputNode(typeof(Address));\n            node.Add(writer);\n\n            node.Explicits.Single().ShouldBeTheSameAs(writer);\n        }\n\n        [Test]\n        public void add_a_writer_by_object_sad_path()\n        {\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(() => {\n                new OutputNode(typeof(Address)).Add(this);\n            });\n        }\n    }\n\n    public class FooWriter<T> : IMediaWriter<T>\n    {\n        public Task Write(string mimeType, IFubuRequestContext context, T resource)\n        {\n            throw new System.NotImplementedException();\n        }\n\n        public IEnumerable<string> Mimetypes { get; private set; }\n    }\n\n    public class SpecialWriter : IMediaWriter<Address>\n    {\n        public Task Write(string mimeType, IFubuRequestContext context, Address resource)\n        {\n            throw new System.NotImplementedException();\n        }\n\n        public IEnumerable<string> Mimetypes { get; private set; }\n    }\n\n    public class MyFakeResourceNotHandler : IResourceNotFoundHandler\n    {\n        public void HandleResourceNotFound<T>()\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Resources/Conneg/ReaderChoiceTester.cs",
    "content": "using FubuCore.Descriptions;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Resources.Conneg\r\n{\r\n    [TestFixture]\r\n    public class ReaderChoiceTester\r\n    {\r\n        [Test]\r\n        public void get_the_description_if_the_reader_is_null()\r\n        {\r\n            var choice = new ReaderChoice(\"text/json\", null);\r\n\r\n            var description = Description.For(choice);\r\n\r\n            description.Title.ShouldBe(\"Unable to select a reader for content-type 'text/json'\");\r\n        }\r\n\r\n        [Test]\r\n        public void get_the_description_if_the_reader_is_not_null()\r\n        {\r\n            var choice = new ReaderChoice(\"text/json\", new ClassWithTitle());\r\n\r\n            var description = Description.For(choice);\r\n\r\n            description.Title.ShouldBe(\"Selected reader 'Some title' for content-type 'text/json'\");\r\n        }\r\n    }\r\n\r\n    [Title(\"Some title\")]\r\n    public class ClassWithTitle\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Resources/Conneg/StringWriterTester.cs",
    "content": "using FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Resources.Conneg\n{\n    [TestFixture]\n    public class StringWriterTester : InteractionContext<StringWriter>\n    {\n        [Test]\n        public void mime_type_is_only_text()\n        {\n            ClassUnderTest.Mimetypes\n                .ShouldHaveTheSameElementsAs(MimeType.Text.Value, MimeType.Html.Value);\n        }\n\n        [Test]\n        public void write()\n        {\n            var context = new MockedFubuRequestContext();\n            ClassUnderTest.Write(MimeType.Text.Value, context, \"some text\");\n            context.Writer.AssertWasCalled(x => x.Write(MimeType.Text.Value, \"some text\"));\n        }\n    }\n\n    \n}"
  },
  {
    "path": "src/FubuMVC.Tests/Resources/Hypermedia/LinkExpressionTester.cs",
    "content": "using FubuCore;\r\nusing FubuMVC.Core.Resources.Hypermedia;\r\nusing FubuMVC.Core.Urls;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Resources.Hypermedia\r\n{\r\n    [TestFixture]\r\n    public class LinkExpressionTester\r\n    {\r\n        [Test]\r\n        public void create_a_link()\r\n        {\r\n            var expression = new LinkExpression(x => x.UrlFor(new SomeLinkInput()))\r\n                .Rel(\"some rel\");\r\n            var urls = new StubUrlRegistry();\r\n\r\n            var link = expression.As<ILinkCreator>().CreateLink(urls);\r\n\r\n            link.Url.ShouldBe(urls.UrlFor(new SomeLinkInput()));\r\n\r\n            link.Rel.ShouldBe(\"some rel\");\r\n        }\r\n    }\r\n\r\n    public class SomeLinkInput\r\n    {\r\n        \r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Resources/Hypermedia/LinkSourceTester.cs",
    "content": "using System;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Projections;\r\nusing FubuMVC.Core.Resources.Hypermedia;\r\nusing FubuMVC.Core.Urls;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Resources.Hypermedia\r\n{\r\n    [TestFixture]\r\n    public class LinkSourceTester\r\n    {\r\n        private Site theSubject;\r\n        private SimpleValues<Site> theTarget;\r\n        private StubUrlRegistry theUrls;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theSubject = new Site();\r\n            theTarget = new SimpleValues<Site>(theSubject);\r\n            theUrls = new StubUrlRegistry();\r\n        }\r\n\r\n        [Test]\r\n        public void create_a_link_if_the_filter_passes()\r\n        {\r\n            var link = new LinkSource<Site>((t, urls) => \"http://site.com\")\r\n                .IfSubjectMatches(s => true);\r\n\r\n            link.As<ILinkSource<Site>>().LinksFor(theTarget, theUrls)\r\n                .Single()\r\n                .ShouldNotBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void do_not_create_a_link_if_the_filter_fails()\r\n        {\r\n            var link = new LinkSource<Site>((t, urls) => \"http://site.com\")\r\n                .IfSubjectMatches(s => false);\r\n\r\n            link.As<ILinkSource<Site>>().LinksFor(theTarget, theUrls)\r\n                .Any().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void do_not_create_a_link_if_the_filter_fails_by_target_matches()\r\n        {\r\n            theSubject.IsObsolete = true;\r\n\r\n            var link = new LinkSource<Site>((t, urls) => \"http://site.com\")\r\n                .IfSubjectMatches(s => !s.IsObsolete);\r\n\r\n            link.As<ILinkSource<Site>>().LinksFor(theTarget, theUrls)\r\n                .Any().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void do_not_create_a_link_if_the_filter_fails_by_IfEquals()\r\n        {\r\n            theSubject.Name = \"Jeremy\";\r\n\r\n            var link = new LinkSource<Site>((t, urls) => \"http://site.com\")\r\n                .IfEquals(x => x.Name, \"Chad\");\r\n\r\n            link.As<ILinkSource<Site>>().LinksFor(theTarget, theUrls)\r\n                .Any().ShouldBeFalse();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void do_create_a_link_if_the_filter_succeeds_by_IfEquals()\r\n        {\r\n            theSubject.Name = \"Jeremy\";\r\n\r\n            var link = new LinkSource<Site>((t, urls) => \"http://site.com\")\r\n                .IfEquals(x => x.Name, \"Jeremy\");\r\n\r\n            link.As<ILinkSource<Site>>().LinksFor(theTarget, theUrls)\r\n                .Any().ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void do_not_create_a_link_if_the_filter_fails_by_IfNotEquals()\r\n        {\r\n            theSubject.Name = \"Jeremy\";\r\n\r\n            var link = new LinkSource<Site>((t, urls) => \"http://site.com\")\r\n                .IfNotEquals(x => x.Name, \"Chad\");\r\n\r\n            link.As<ILinkSource<Site>>().LinksFor(theTarget, theUrls)\r\n                .Any().ShouldBeTrue();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void do_create_a_link_if_the_filter_succeeds_by_IfNotEquals()\r\n        {\r\n            theSubject.Name = \"Jeremy\";\r\n\r\n            var link = new LinkSource<Site>((t, urls) => \"http://site.com\")\r\n                .IfNotEquals(x => x.Name, \"Jeremy\");\r\n\r\n            link.As<ILinkSource<Site>>().LinksFor(theTarget, theUrls)\r\n                .Any().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void create_a_link_with_just_the_url_from_the_target()\r\n        {\r\n            var source = new LinkSource<Site>((t, urls) => \"http://site.com\");\r\n\r\n            var link = source.As<ILinkSource<Site>>().LinksFor(theTarget, theUrls)\r\n                .Single();\r\n\r\n            link.Url.ShouldBe(\"http://site.com\");\r\n            link.Rel.ShouldBeNull();\r\n            link.Title.ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void create_a_link_with_just_the_url_from_the_target_with_a_relationship_type()\r\n        {\r\n            var source = new LinkSource<Site>((t, urls) => \"http://site.com\")\r\n                .Rel(\"something\");\r\n\r\n            var link = source.As<ILinkSource<Site>>().LinksFor(theTarget, theUrls)\r\n                .Single();\r\n\r\n            link.Url.ShouldBe(\"http://site.com\");\r\n            link.Rel.ShouldBe(\"something\");\r\n            link.Title.ShouldBeNull();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void create_a_link_with_just_the_url_from_the_target_with_a_title()\r\n        {\r\n            var token = \"the title\";\r\n\r\n            var source = new LinkSource<Site>((t, urls) => \"http://site.com\")\r\n                .Rel(\"something\")\r\n                .Title(token);\r\n\r\n            var link = source.As<ILinkSource<Site>>().LinksFor(theTarget, theUrls)\r\n                .Single();\r\n\r\n            link.Url.ShouldBe(\"http://site.com\");\r\n            link.Title.ShouldBe(token.ToString());\r\n        }\r\n\r\n\r\n    }\r\n\r\n    public class Site\r\n    {\r\n        public Guid Id { get; set; }\r\n        public bool IsObsolete { get; set; }\r\n        public string Name { get; set; }\r\n\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"Site: {0}\", Name);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Resources/Hypermedia/LinksSourceTester.cs",
    "content": "using System;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Projections;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing FubuMVC.Core.Resources.Hypermedia;\r\nusing FubuMVC.Core.Urls;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Resources.Hypermedia\r\n{\r\n    [TestFixture]\r\n    public class LinksSourceTester\r\n    {\r\n        private Site theSubject;\r\n        private SimpleValues<Site> theTarget;\r\n        private ValidStubUrlRegistry theUrls;\r\n        private LinksSource<Site> theLinks;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theSubject = new Site(){Name = \"my site\", Id = Guid.NewGuid()};\r\n            theUrls = new ValidStubUrlRegistry();\r\n            theTarget = new SimpleValues<Site>(theSubject);\r\n\r\n            theLinks = new LinksSource<Site>();\r\n        }\r\n\r\n        [Test]\r\n        public void create_link_by_subject()\r\n        {\r\n            theLinks.ToSubject();\r\n\r\n            theLinks.As<ILinkSource<Site>>().LinksFor(theTarget, theUrls)\r\n                .Single().Url.ShouldBe(theUrls.UrlFor(theSubject));\r\n        }\r\n\r\n        [Test]\r\n        public void create_a_link_by_using_route_parameters()\r\n        {\r\n            theLinks.ToInput<SiteAction>(x => x.Name);\r\n\r\n            var parameters = new RouteParameters<SiteAction>();\r\n            parameters[\"Name\"] = theSubject.Name;\r\n\r\n            theLinks.As<ILinkSource<Site>>().LinksFor(theTarget, theUrls)\r\n                .Single().Url.ShouldBe(theUrls.UrlFor(parameters));\r\n        }\r\n\r\n        [Test]\r\n        public void create_link_by_transforming_the_subject()\r\n        {\r\n            theLinks.To(site => new SiteAction(site.Name));\r\n\r\n            theLinks.As<ILinkSource<Site>>().LinksFor(theTarget, theUrls)\r\n                .Single().Url.ShouldBe(theUrls.UrlFor(new SiteAction(theSubject.Name)));\r\n        }\r\n\r\n        [Test]\r\n        public void create_link_by_identifier()\r\n        {\r\n            theLinks.ToSubject(x => x.Id);\r\n\r\n            var parameters = new RouteParameters<Site>();\r\n            parameters[x => x.Id] = theSubject.Id.ToString();\r\n\r\n            theLinks.As<ILinkSource<Site>>().LinksFor(theTarget, theUrls)\r\n                .Single().Url.ShouldBe(theUrls.UrlFor(typeof(Site), parameters));\r\n        }\r\n\r\n        public class SiteAction\r\n        {\r\n            private readonly string _name;\r\n\r\n            public SiteAction(string name)\r\n            {\r\n                _name = name;\r\n            }\r\n\r\n            public override string ToString()\r\n            {\r\n                return string.Format(\"site action for {0}\", _name);\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Resources/PathBased/ResourcePathBinderTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Binding.InMemory;\r\nusing FubuCore.Reflection;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Resources.PathBased;\r\nusing FubuMVC.Tests.TestSupport;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing SpecificationExtensions = Shouldly.SpecificationExtensions;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Tests.Resources.PathBased\r\n{\r\n    [TestFixture]\r\n    public class ResourcePathBinderTester\r\n    {\r\n        private Dictionary<string, string> theRouteValues;\r\n        private StandardModelBinder theBinder;\r\n        private RequestData theRequestData;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theBinder = new StandardModelBinder(new BindingRegistry(), new TypeDescriptorCache());\r\n\r\n            theRequestData = new RequestData();\r\n\r\n            var otherDictionary = new Dictionary<string, string>();\r\n            for (int i = 0; i < 10; i++)\r\n            {\r\n                otherDictionary.Add(\"Part\" + i, Guid.NewGuid().ToString());\r\n            }  \r\n\r\n            theRequestData.AddValues(RequestDataSource.Request, new DictionaryKeyValues(otherDictionary));\r\n\r\n            \r\n            theRouteValues = new Dictionary<string, string>();\r\n\r\n            theRequestData.AddValues(RequestDataSource.Route.ToString(), new DictionaryKeyValues(theRouteValues));\r\n\r\n          \r\n        }\r\n\r\n        private ResourcePath findPathByBinding()\r\n        {\r\n            var locator = new SelfMockingServiceLocator();\r\n            locator.Stub<IRequestData>(theRequestData);\r\n            var context = new BindingContext(theRequestData, locator, new NulloBindingLogger());\r\n\r\n            return (ResourcePath)new ResourcePathBinder().Bind(typeof(ResourcePath), context);\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void matches_subclass_of_resource_path()\r\n        {\r\n            new ResourcePathBinder().Matches(typeof(SpecialPath))\r\n                .ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void matches_ResourcePath_itself()\r\n        {\r\n            new ResourcePathBinder().Matches(typeof(ResourcePath))\r\n                .ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void does_not_match_on_a_non_resource_path_class()\r\n        {\r\n            new ResourcePathBinder().Matches(GetType())\r\n                .ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void bind_with_one_part()\r\n        {\r\n            theRouteValues.Add(\"Part0\", \"file.js\");\r\n\r\n            findPathByBinding().Path.ShouldBe(\"file.js\");\r\n        }\r\n\r\n        [Test]\r\n        public void bind_with_two_parts()\r\n        {\r\n            \r\n            theRouteValues.Add(\"Part0\", \"f1\");\r\n            theRouteValues.Add(\"Part1\", \"file.js\");\r\n\r\n            findPathByBinding().Path.ShouldBe(\"f1/file.js\");\r\n        }\r\n\r\n        [Test]\r\n        public void bind_with_three_parts()\r\n        {\r\n\r\n            theRouteValues.Add(\"Part0\", \"f1\");\r\n            theRouteValues.Add(\"Part1\", \"f2\");\r\n            theRouteValues.Add(\"Part2\", \"file.js\");\r\n\r\n            findPathByBinding().Path.ShouldBe(\"f1/f2/file.js\");\r\n        }\r\n\r\n        [Test]\r\n        public void bind_with_four_parts()\r\n        {\r\n\r\n            theRouteValues.Add(\"Part0\", \"f1\");\r\n            theRouteValues.Add(\"Part1\", \"f2\");\r\n            theRouteValues.Add(\"Part2\", \"f3\");\r\n            theRouteValues.Add(\"Part3\", \"file.js\");\r\n\r\n            findPathByBinding().Path.ShouldBe(\"f1/f2/f3/file.js\");\r\n        }\r\n\r\n        [Test]\r\n        public void bind_with_eight_parts()\r\n        {\r\n\r\n            theRouteValues.Add(\"Part0\", \"f1\");\r\n            theRouteValues.Add(\"Part1\", \"f2\");\r\n            theRouteValues.Add(\"Part2\", \"f3\");\r\n            theRouteValues.Add(\"Part3\", \"f4\");\r\n            theRouteValues.Add(\"Part4\", \"f5\");\r\n            theRouteValues.Add(\"Part5\", \"f6\");\r\n            theRouteValues.Add(\"Part6\", \"f7\");\r\n            theRouteValues.Add(\"Part7\", \"f8\");\r\n            theRouteValues.Add(\"Part8\", \"file.js\");\r\n\r\n            findPathByBinding().Path.ShouldBe(\"f1/f2/f3/f4/f5/f6/f7/f8/file.js\");\r\n        }\r\n\r\n        public class SpecialPath : ResourcePath\r\n        {\r\n            public SpecialPath(string path) : base(path)\r\n            {\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Resources/PathBased/ResourcePathIntegratedUrlCreationTester.cs",
    "content": "using FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Resources.PathBased;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Resources.PathBased\r\n{\r\n\t[TestFixture]\r\n    public class ResourcePathIntegratedUrlCreationTester\r\n    {\r\n        public class Controller1\r\n        {\r\n            public string get_resource(ResourcePath path)\r\n            {\r\n                return null;\r\n            }\r\n\r\n\t\t\tpublic string get_special(SpecialResourcePath path)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            public string SayHello()\r\n            {\r\n                return null;\r\n            }\r\n        }\r\n\r\n        public class SpecialResourcePath : ResourcePath\r\n        {\r\n            public SpecialResourcePath(string path) : base(path)\r\n            {\r\n            }\r\n        }\r\n\r\n        [Test]\r\n        public void uses_the_resource_path_to_do_its_job()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.Actions.IncludeType<Controller1>();\r\n\r\n            BehaviorGraph.BuildFrom(registry).ChainFor<Controller1>(x => x.get_resource(null)).As<RoutedChain>().Route.CreateUrlFromInput(\r\n                new ResourcePath(\"something/else\"))\r\n                .ShouldBe(\"resource/something/else\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_append_the_url_suffix_onto_each_appropriate_route()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.Actions.IncludeType<Controller1>();\r\n\r\n            var graph = BehaviorGraph.BuildFrom(registry);\r\n\r\n            graph.ChainFor<Controller1>(x => x.get_resource(null))\r\n                .As<RoutedChain>()\r\n                .Route.Pattern.ShouldBe(\r\n                    \"resource/{Part0}/{Part1}/{Part2}/{Part3}/{Part4}/{Part5}/{Part6}/{Part7}/{Part8}/{Part9}\");\r\n\r\n            graph.ChainFor<Controller1>(x => x.get_special(null))\r\n                .As<RoutedChain>()\r\n                .Route.Pattern.ShouldBe(\r\n                    \"special/{Part0}/{Part1}/{Part2}/{Part3}/{Part4}/{Part5}/{Part6}/{Part7}/{Part8}/{Part9}\");\r\n\r\n        }\r\n\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Resources/PathBased/RouteRankingIntegratedTester.cs",
    "content": "using FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Resources.PathBased\r\n{\r\n\t[TestFixture]\r\n\tpublic class RouteRankingIntegratedTester\r\n\t{\r\n\t\tprivate BehaviorGraph _graph;\r\n\r\n\t\tpublic class Controller1\r\n\t\t{\r\n\t\t\tpublic string get_last_ranked(RankedLastRequest request)\r\n\t\t\t{\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tpublic string zero(NormalRequest request)\r\n\t\t\t{\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tpublic string one(OneInputRequest request)\r\n\t\t\t{\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tpublic string two(TwoInputsRequest request)\r\n\t\t\t{\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tpublic class RankedLastRequest : IRankMeLast  { }\r\n\t\tpublic class NormalRequest  { }\r\n\t\tpublic class OneInputRequest\r\n\t\t{\r\n\t\t\t[RouteInput]\r\n\t\t\tpublic string First { get; set; }\r\n\t\t}\r\n\r\n\t\tpublic class TwoInputsRequest\r\n\t\t{\r\n\t\t\t[RouteInput]\r\n\t\t\tpublic string First { get; set; }\r\n\t\t\t[RouteInput]\r\n\t\t\tpublic string Second { get; set; }\r\n\t\t}\r\n\r\n\t\t[TestFixtureSetUp]\r\n\t\tpublic void beforeAll()\r\n\t\t{\r\n\t\t\tvar registry = new FubuRegistry();\r\n\t\t\tregistry.Actions.IncludeType<Controller1>();\r\n\r\n\t\t\t_graph = BehaviorGraph.BuildFrom(registry);\r\n\t\t}\r\n\r\n\t\t[Test]\r\n\t\tpublic void rank_me_last_inputs_should_rank_highly()\r\n\t\t{\r\n\t\t\t_graph.ChainFor<Controller1>(x => x.get_last_ranked(null))\r\n                .As<RoutedChain>()\r\n\t\t\t      .Route.Rank.ShouldBe(int.MaxValue);\r\n\t\t}\r\n\r\n\t\t[Test]\r\n\t\tpublic void no_route_inputs_should_rank_zero()\r\n\t\t{\r\n\t\t\t_graph.ChainFor<Controller1>(x => x.zero(null))\r\n                .As<RoutedChain>()\r\n\t\t\t\t  .Route.Rank.ShouldBe(0);\r\n\t\t}\r\n\r\n\t\t[Test]\r\n\t\tpublic void one_route_input_should_as_one()\r\n\t\t{\r\n\t\t\t_graph.ChainFor<Controller1>(x => x.one(null))\r\n                .As<RoutedChain>()\r\n\t\t\t      .Route.Rank.ShouldBe(1);\r\n\t\t}\r\n\r\n\t\t[Test]\r\n\t\tpublic void two_route_inputs_should_as_one()\r\n\t\t{\r\n\t\t\t_graph.ChainFor<Controller1>(x => x.two(null))\r\n                .As<RoutedChain>()\r\n\t\t\t\t  .Route.Rank.ShouldBe(2);\r\n\t\t}\r\n\r\n\t}\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Routing/StandardRoutePolicyTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing System.Web.Routing;\r\nusing FubuCore;\r\nusing FubuCore.Binding;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Handlers;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Tests.Routing\r\n{\r\n    [TestFixture]\r\n    public class StandardRoutePolicyTester\r\n    {\r\n        private IEnumerable<Guid> _actionIds;\r\n        private IEnumerable<Route> _routes;\r\n        private IServiceFactory theFactory;\r\n\r\n        [TestFixtureSetUp]\r\n        public void SetUp()\r\n        {\r\n            theFactory = MockRepository.GenerateMock<IServiceFactory>();\r\n\r\n            var graph = setupActions();\r\n            _actionIds = graph.Actions().Select(x => x.ParentChain().UniqueId);\r\n            _routes = new StandardRoutePolicy().BuildRoutes(graph, theFactory).Cast<Route>();\r\n        }\r\n\r\n        [Test]\r\n        public void DetermineInvoker_for_asynchronous_actions()\r\n        {\r\n            var chain = BehaviorChain.For<Action3>(x => x.M1Async());\r\n            chain.IsAsynchronous().ShouldBeTrue();\r\n\r\n            StandardRoutePolicy.DetermineInvoker(theFactory, chain).ShouldBeOfType<BehaviorInvoker>();\r\n        }\r\n\r\n        [Test]\r\n        public void DetermineInvoker_for_synchronous_actions()\r\n        {\r\n            var chain = BehaviorChain.For<Action2>(x => x.M1());\r\n            chain.IsAsynchronous().ShouldBeFalse();\r\n\r\n            StandardRoutePolicy.DetermineInvoker(theFactory, chain).ShouldBeOfType<BehaviorInvoker>();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void DetermineHandlerSource_for_asynch_and_sessionless()\r\n        {\r\n            var chain = BehaviorChain.For<Action3>(x => x.M1Async());\r\n            chain.IsAsynchronous().ShouldBeTrue();\r\n\r\n            StandardRoutePolicy.DetermineHandlerSource(SessionStateRequirement.DoesNotUseSessionState, chain)\r\n                .ShouldBeOfType<SessionlessAsynchronousHttpHandlerSource>();\r\n        }\r\n\r\n        [Test]\r\n        public void DetermineHandlerSource_for_async_and_requires_session()\r\n        {\r\n            var chain = BehaviorChain.For<Action3>(x => x.M1Async());\r\n            chain.IsAsynchronous().ShouldBeTrue();\r\n\r\n            StandardRoutePolicy.DetermineHandlerSource(SessionStateRequirement.RequiresSessionState, chain)\r\n                .ShouldBeOfType<AsynchronousHttpHandlerSource>();\r\n        }\r\n        \r\n        [Test]\r\n        public void it_builds_routes_for_all_actions()\r\n        {\r\n            (_routes.Count() >= _actionIds.Count())\r\n                .ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void it_assigns_routehandler_on_route()\r\n        {\r\n            _routes.Each(r => r.RouteHandler.ShouldBeOfType<FubuRouteHandler>());\r\n        }\r\n\r\n        [Test]\r\n        public void builds_additional_routes_for_each_behavior_chain()\r\n        {\r\n\r\n\r\n            _routes.Any(x => x.Url.Equals(\"prefixed/a/m1\", StringComparison.OrdinalIgnoreCase)).ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void orders_additional_routes_by_rank_as_well()\r\n        {\r\n            _routes.Last().Url.ShouldBe(\"foo/{Name}\");\r\n        }\r\n\r\n        private BehaviorGraph setupActions()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.Actions.IncludeType<Action1>();\r\n            registry.Actions.IncludeType<Action2>();\r\n            registry.Actions.IncludeType<Action3>();\r\n            registry.Actions.DisableDefaultActionSource();\r\n\r\n            registry.Configure(x => {\r\n                var routeDefinition = new RouteDefinition(\"{Client}/\");\r\n                routeDefinition.Input = MockRepository.GenerateMock<IRouteInput>();\r\n                routeDefinition.Input.Stub(_ => _.Rank).Return(5);\r\n\r\n                x.ChainFor<Action1>(_ => _.M1()).As<RoutedChain>().AddRouteAlias(routeDefinition);\r\n            });\r\n\r\n            return BehaviorGraph.BuildFrom(registry);\r\n        }\r\n\r\n        public class ServiceFactory : IServiceFactory\r\n        {\r\n            private readonly IEnumerable<Guid> _behaviorIds;\r\n            public ServiceFactory(IEnumerable<Guid> behaviorIds) { _behaviorIds = behaviorIds; }\r\n\r\n            public IActionBehavior BuildBehavior(TypeArguments arguments, Guid behaviorId)\r\n            {\r\n                return _behaviorIds.Contains(behaviorId) ? new ActionBehavior(behaviorId) : null;\r\n            }\r\n\r\n            public T Build<T>(TypeArguments arguments)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public T Get<T>()\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public IEnumerable<T> GetAll<T>()\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public void Dispose()\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n        }\r\n        public class ActionBehavior : IActionBehavior\r\n        {\r\n            public ActionBehavior(Guid behaviorId) { BehaviorId = behaviorId; }\r\n            public Guid BehaviorId { get; private set; }\r\n\r\n            public Task Invoke()\r\n            {\r\n                return Task.CompletedTask;\r\n            }\r\n\r\n            public Task InvokePartial()\r\n            {\r\n                return Task.CompletedTask;\r\n            }\r\n        }\r\n\r\n        /*\r\n            registry.Route(\"a/m1\").Calls<Action1>(a => a.M1());\r\n            registry.Route(\"a/m2\").Calls<Action1>(a => a.M2());\r\n            registry.Route(\"b/m1\").Calls<Action2>(b => b.M1());\r\n            registry.Route(\"b/m2\").Calls<Action2>(b => b.M2());\r\n            registry.Route(\"c/m1async\").Calls<Action3>(b => b.M1Async());\r\n         */\r\n\r\n\r\n        public class Action1\r\n        {\r\n            [UrlAlias(\"prefixed/a/m1\")]\r\n            public void M1(){}\r\n            public void M2(){}\r\n        }\r\n        public class Action2\r\n        {\r\n            public void M1() { }\r\n            public void M2() { }\r\n\r\n            [UrlPattern(\"\")]\r\n            public void Home(){}\r\n        }\r\n\r\n\r\n\r\n        public class Action3\r\n        {\r\n            public Task<object> M1Async()\r\n            {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/AspNetPassthroughConverterTester.cs",
    "content": "using System;\r\nusing System.Linq.Expressions;\r\nusing System.Web;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core.Runtime;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Runtime\r\n{\r\n    [TestFixture]\r\n    public class AspNetPassthroughConverterTester\r\n    {\r\n        private bool matches(Expression<Func<FakeModel, object>> expression)\r\n        {\r\n            var property = ReflectionHelper.GetProperty(expression);\r\n            return new AspNetPassthroughConverter().Matches(property);\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void matches_positive()\r\n        {\r\n            matches(x => x.File).ShouldBeTrue();\r\n            matches(x => x.Cookie).ShouldBeTrue();\r\n            matches(x => x.Wrapper).ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void matches_negative()\r\n        {\r\n            matches(x => x.Name).ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void builds_a_pass_thru_converter()\r\n        {\r\n            var property = ReflectionHelper.GetProperty<FakeModel>(x => x.File);\r\n            new AspNetPassthroughConverter().Build(null, property)\r\n                .ShouldBeOfType<PassthroughConverter<HttpPostedFileBase>>();\r\n        }\r\n\r\n        public class FakeModel\r\n        {\r\n            public HttpPostedFileBase File { get; set; }\r\n            public HttpCookie Cookie { get; set; }\r\n            public HttpFileCollectionWrapper Wrapper { get; set; }\r\n\r\n            public string Name { get; set; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/BasicSessionTester.cs",
    "content": "using FubuMVC.Core.Runtime;\r\nusing FubuMVC.Tests.UI;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Runtime\r\n{\r\n    [TestFixture]\r\n    public class BasicSessionTester\r\n    {\r\n        [Test]\r\n        public void store_and_retrieve_objects()\r\n        {\r\n            var address = new Address();\r\n            var model = new AddressViewModel();\r\n\r\n            var session = new BasicSessionState();\r\n            session.Set(address);\r\n            session.Set(model);\r\n\r\n            session.Get<Address>().ShouldBeTheSameAs(address);\r\n            session.Get<AddressViewModel>().ShouldBeTheSameAs(model);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/BehaviorInvokerTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing FubuCore.Binding;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing FubuMVC.Core.Runtime;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\nusing Shouldly;\r\nusing StructureMap.Pipeline;\r\n\r\nnamespace FubuMVC.Tests.Runtime\r\n{\r\n    [TestFixture]\r\n    public class BehaviorInvokerTester\r\n    {\r\n        private IServiceFactory theFactory;\r\n        private BehaviorChain theChain;\r\n        private BehaviorInvoker theInvoker;\r\n        private IActionBehavior theBehavior;\r\n        private TypeArguments theArguments;\r\n        private Dictionary<string, object> theRouteData;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theFactory = MockRepository.GenerateMock<IServiceFactory>();\r\n            theChain = new RoutedChain(\"something\");\r\n\r\n            theRouteData = new Dictionary<string, object>();\r\n\r\n            theArguments = new TypeArguments();\r\n            theBehavior = MockRepository.GenerateMock<IActionBehavior>();\r\n\r\n            theFactory.Stub(x => x.BuildBehavior(theArguments, theChain.UniqueId))\r\n                .Return(theBehavior);\r\n\r\n            theInvoker = new BehaviorInvoker(theFactory, theChain);\r\n        }\r\n\r\n        [Test]\r\n        public void invoke_happy_path_calls_the_behavior()\r\n        {\r\n            theInvoker.Invoke(theArguments, theRouteData);\r\n            theBehavior.AssertWasCalled(x => x.Invoke());\r\n        }\r\n\r\n        [Test]\r\n        public void invoke_happy_path_will_put_the_current_chain_together()\r\n        {\r\n            theInvoker.Invoke(theArguments, theRouteData);\r\n            theArguments.Get<ICurrentChain>().ShouldBeOfType<CurrentChain>()\r\n                .ResourceHash().ShouldBe(new CurrentChain(theChain, theRouteData).ResourceHash());\r\n                \r\n        }\r\n\r\n        [Test]\r\n        public void invoke_happy_path_with_a_continuation_filter()\r\n        {\r\n            theChain.AddFilter(new StubBehaviorInvocationFilter(DoNext.Continue));\r\n\r\n            theInvoker.Invoke(theArguments, theRouteData);\r\n            theBehavior.AssertWasCalled(x => x.Invoke());\r\n        }\r\n\r\n        [Test]\r\n        public void invoke_happy_path_with_multiple_continuation_filter()\r\n        {\r\n            theChain.AddFilter(new StubBehaviorInvocationFilter(DoNext.Continue));\r\n            theChain.AddFilter(new StubBehaviorInvocationFilter(DoNext.Continue));\r\n            theChain.AddFilter(new StubBehaviorInvocationFilter(DoNext.Continue));\r\n\r\n            theInvoker.Invoke(theArguments, theRouteData);\r\n            theBehavior.AssertWasCalled(x => x.Invoke());\r\n        }\r\n\r\n        [Test]\r\n        public void invoke_with_a_filter_that_says_stop()\r\n        {\r\n            theChain.AddFilter(new StubBehaviorInvocationFilter(DoNext.Stop));\r\n\r\n            theInvoker.Invoke(theArguments, theRouteData);\r\n            theBehavior.AssertWasNotCalled(x => x.Invoke());\r\n        }\r\n\r\n        [Test]\r\n        public void invoke_with_a_filter_that_says_stop_2()\r\n        {\r\n            theChain.AddFilter(new StubBehaviorInvocationFilter(DoNext.Continue));\r\n            theChain.AddFilter(new StubBehaviorInvocationFilter(DoNext.Continue));\r\n            theChain.AddFilter(new StubBehaviorInvocationFilter(DoNext.Stop));\r\n\r\n            theInvoker.Invoke(theArguments, theRouteData);\r\n            theBehavior.AssertWasNotCalled(x => x.Invoke());\r\n        }\r\n    }\r\n\r\n    public class StubBehaviorInvocationFilter : IBehaviorInvocationFilter\r\n    {\r\n        private readonly DoNext _returnValue;\r\n\r\n        public StubBehaviorInvocationFilter(DoNext returnValue)\r\n        {\r\n            _returnValue = returnValue;\r\n        }\r\n\r\n        public DoNext Filter(TypeArguments arguments)\r\n        {\r\n            return _returnValue;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/Conditionals/ConditionalServiceTester.cs",
    "content": "﻿using System;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Conditionals;\r\nusing FubuMVC.Tests.TestSupport;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Behaviors.Conditional\r\n{\r\n    [TestFixture]\r\n    public class ConditionalServiceTester : InteractionContext<ConditionalService>\r\n    {\r\n        [Test]\r\n        public void throw_argument_out_of_range_if_passing_in_a_not_conditional_type()\r\n        {\r\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(() =>\r\n            {\r\n                ClassUnderTest.IsTrue(GetType());\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void always_is_true()\r\n        {\r\n            ClassUnderTest.IsTrue(typeof(Always))\r\n                .ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void never_is_false()\r\n        {\r\n            ClassUnderTest.IsTrue(typeof(Never))\r\n                .ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void is_true_positive()\r\n        {\r\n            MockFor<IServiceLocator>().Stub(x => x.GetInstance(typeof(Always)))\r\n                .Return(Always.Flyweight);\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void is_true_negative()\r\n        {\r\n            MockFor<IServiceLocator>().Stub(x => x.GetInstance(typeof(Never)))\r\n                .Return(new Never());\r\n        }\r\n\r\n        [Test]\r\n        public void is_true_test_is_memoized()\r\n        {\r\n            var condition = MockRepository.GenerateMock<IConditional>();\r\n            var context = MockFor<IFubuRequestContext>();\r\n\r\n            MockFor<IServiceLocator>().Stub(x => x.GetInstance(typeof(FakeConditional)))\r\n                .Return(condition);\r\n\r\n            condition.Stub(x => x.ShouldExecute(context)).Return(true);\r\n\r\n            ClassUnderTest.IsTrue(typeof(FakeConditional)).ShouldBeTrue();\r\n            ClassUnderTest.IsTrue(typeof(FakeConditional)).ShouldBeTrue();\r\n            ClassUnderTest.IsTrue(typeof(FakeConditional)).ShouldBeTrue();\r\n            ClassUnderTest.IsTrue(typeof(FakeConditional)).ShouldBeTrue();\r\n            ClassUnderTest.IsTrue(typeof(FakeConditional)).ShouldBeTrue();\r\n            ClassUnderTest.IsTrue(typeof(FakeConditional)).ShouldBeTrue();\r\n\r\n            condition.AssertWasCalled(x => x.ShouldExecute(context)\r\n            , x => x.Repeat.Once());\r\n        }\r\n    }\r\n\r\n    public class FakeConditional : IConditional\r\n    {\r\n        public bool ShouldExecute(IFubuRequestContext context)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/Files/ChangeSetTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Runtime.Files;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Runtime.Files\n{\n    [TestFixture]\n    public class ChangeSetTester\n    {\n\n        [Test]\n        public void has_changes_negative()\n        {\n            var set = new ChangeSet();\n\n            set.HasChanges().ShouldBeFalse();\n        }\n\n        [Test]\n        public void has_changes_positive_with_any_changed()\n        {\n            var set = new ChangeSet();\n            set.Changed.Add(new StubFubuFile(\"foo\", DateTime.Now));\n\n            set.HasChanges().ShouldBeTrue();\n        }\n\n        [Test]\n        public void has_changes_positive_with_any_deleted()\n        {\n            var set = new ChangeSet();\n            set.Deleted.Add(new StubFubuFile(\"foo\", DateTime.Now).RelativePath);\n\n            set.HasChanges().ShouldBeTrue();\n        }\n\n        [Test]\n        public void has_changes_positive_with_any_added()\n        {\n            var set = new ChangeSet();\n            set.Added.Add(new StubFubuFile(\"foo\", DateTime.Now));\n\n            set.HasChanges().ShouldBeTrue();\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/Files/Data/a.txt",
    "content": "﻿some text from a.txt"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/Files/Data/b.txt",
    "content": "﻿some text from a.txt"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/Files/Data/c.txt",
    "content": "﻿some text from a.txt"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/Files/Data/d.txt",
    "content": "﻿some text from a.txt"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/Files/FubuApplicationFilesSmokeTester.cs",
    "content": "using System;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Runtime.Files\r\n{\r\n    [TestFixture]\r\n    public class FubuApplicationFilesSmokeTester\r\n    {\r\n        private FubuApplicationFiles theFiles;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theFiles = new FubuApplicationFiles(AppDomain.CurrentDomain.BaseDirectory.ParentDirectory().ParentDirectory());\r\n        }\r\n\r\n        [Test]\r\n        public void find_file()\r\n        {\r\n            theFiles.AssertHasFile(\"Runtime/Files/Data/a.txt\");\r\n\r\n            var fubuFile = theFiles.Find(\"Runtime/Files/Data/a.txt\");\r\n            fubuFile.ShouldNotBeNull();\r\n\r\n            fubuFile.ReadContents()\r\n                .Trim().ShouldBe(\"some text from a.txt\");\r\n        }\r\n\r\n        [Test]\r\n        public void find_file_canonicizes_paths()\r\n        {\r\n            theFiles.AssertHasFile(\"Runtime\\\\Files\\\\Data\\\\a.txt\");\r\n\r\n            theFiles.Find(\"Runtime\\\\Files\\\\Data\\\\a.txt\").ReadContents()\r\n                .Trim().ShouldBe(\"some text from a.txt\");\r\n        }\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/Files/FubuFileTester.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\nusing Rhino.Mocks;\r\nusing FubuCore;\r\n\r\nnamespace FubuMVC.Tests.Runtime.Files\r\n{\r\n    [TestFixture]\r\n    public class FubuFileTester\r\n    {\r\n        [Test]\r\n        public void read_contents()\r\n        {\r\n            var file = new FubuFile(Path.Combine(\"Runtime\", \"Files\", \"Data\", \"a.txt\"));\r\n            file.ReadContents().Trim().ShouldBe(\"some text from a.txt\");\r\n        }\r\n\r\n        [Test]\r\n        public void read_lines()\r\n        {\r\n            var file = new FubuFile(Path.Combine(\"Runtime\", \"Files\", \"Data\", \"a.txt\"));\r\n            var action = MockRepository.GenerateMock<Action<string>>();\r\n\r\n            file.ReadLines(action);\r\n\r\n            action.AssertWasCalled(x => x.Invoke(\"some text from a.txt\"));\r\n        }\r\n\r\n        [Test]\r\n        public void read_contents_by_stream()\r\n        {\r\n            var wasCalled = false;\r\n            var file = new FubuFile(Path.Combine(\"Runtime\", \"Files\", \"Data\", \"a.txt\"));\r\n            file.ReadContents(stream =>\r\n            {\r\n                wasCalled = true;\r\n                stream.ReadAllText().ShouldBe(\"some text from a.txt\");\r\n            });\r\n\r\n            wasCalled.ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void length()\r\n        {\r\n            new FileSystem().WriteStringToFile(\"ghostbusters.txt\", \"Who you gonna call?\");\r\n\r\n            new FubuFile(\"ghostbusters.txt\")\r\n                .Length().ShouldBe(19);\r\n        }\r\n\r\n        [Test]\r\n        public void last_modified()\r\n        {\r\n            var now = DateTime.UtcNow;\r\n\r\n            new FileSystem().WriteStringToFile(\"ghostbusters.txt\", \"Who you gonna call?\");\r\n\r\n            var lastModified = new FubuFile(\"ghostbusters.txt\")\r\n                .LastModified();\r\n\r\n\r\n            (lastModified.ToFileTimeUtc() - now.ToFileTimeUtc())\r\n                .ShouldBeLessThan(1);\r\n        }\r\n\r\n        [Test]\r\n        public void etag_is_predictable()\r\n        {\r\n            new FileSystem().WriteStringToFile(\"ghostbusters.txt\", \"Who you gonna call?\");\r\n\r\n            var etag1 = new FubuFile(\"ghostbusters.txt\").Etag();\r\n            var etag2 = new FubuFile(\"ghostbusters.txt\").Etag();\r\n            var etag3 = new FubuFile(\"ghostbusters.txt\").Etag();\r\n\r\n            etag1.ShouldBe(etag2);\r\n            etag1.ShouldBe(etag3);\r\n        }\r\n\r\n        [Test]\r\n        public void etag_changes_on_file_changes()\r\n        {\r\n            new FileSystem().WriteStringToFile(\"ghostbusters.txt\", \"Who you gonna call?\");\r\n\r\n            var etag1 = new FubuFile(\"ghostbusters.txt\").Etag();\r\n\r\n            new FileSystem().WriteStringToFile(\"ghostbusters.txt\", \"He slimed me!\");\r\n\r\n            var etag2 = new FubuFile(\"ghostbusters.txt\").Etag();\r\n\r\n            etag1.ShouldNotBe(etag2);\r\n        }\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/Files/StubFubuFile.cs",
    "content": "using System;\nusing System.IO;\nusing FubuMVC.Core.Runtime.Files;\n\nnamespace FubuMVC.Tests.Runtime.Files\n{\n    public class StubFubuFile : IFubuFile\n    {\n        private readonly DateTime _lastModified;\n\n        public StubFubuFile(string path, DateTime lastModified)\n        {\n            Path = RelativePath = path;\n            _lastModified = lastModified;\n        }\n\n        public StubFubuFile ChangedVersion()\n        {\n            return new StubFubuFile(Path, LastModified().AddSeconds(5));\n        }\n\n        public string Path { get; private set; }\n        public string RelativePath { get; set; }\n        public string ReadContents()\n        {\n            throw new NotImplementedException();\n        }\n\n        public void ReadContents(Action<Stream> action)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void ReadLines(Action<string> read)\n        {\n            throw new NotImplementedException();\n        }\n\n        public long Length()\n        {\n            throw new NotImplementedException();\n        }\n\n        public string Etag()\n        {\n            throw new NotImplementedException();\n        }\n\n        public DateTime LastModified()\n        {\n            return _lastModified;\n        }\n\n        protected bool Equals(StubFubuFile other)\n        {\n            return string.Equals(Path, other.Path);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((StubFubuFile) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Path != null ? Path.GetHashCode() : 0);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/Files/TrackedSetTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Runtime.Files;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Runtime.Files\n{\n    [TestFixture]\n    public class TrackedSetTester\n    {\n        private readonly StubFubuFile file1 = new StubFubuFile(\"foo1\", DateTime.Now);\n        private readonly StubFubuFile file2 = new StubFubuFile(\"foo2\", DateTime.Now);\n        private readonly StubFubuFile file3 = new StubFubuFile(\"foo3\", DateTime.Now);\n        private readonly StubFubuFile file4 = new StubFubuFile(\"foo4\", DateTime.Now);\n        private readonly StubFubuFile file5 = new StubFubuFile(\"foo5\", DateTime.Now);\n        private readonly StubFubuFile file6 = new StubFubuFile(\"foo6\", DateTime.Now);\n        private readonly StubFubuFile file7 = new StubFubuFile(\"foo7\", DateTime.Now);\n\n        [Test]\n        public void store_files_and_test_for_changes_with_no_changes()\n        {\n            var files = new IFubuFile[] {file1, file2, file3, file4, file5, file6, file7};\n\n            var set = new TrackedSet(files);\n\n            set.DetectChanges(files).HasChanges().ShouldBeFalse();\n        }\n\n        [Test]\n        public void find_deletes()\n        {\n            var files = new IFubuFile[] { file1, file2, file3, file4, file5, file6, file7 };\n\n            var set = new TrackedSet(files);\n\n            var files2 = new IFubuFile[] { file1, file2, file3, file4, file5 };\n\n            set.DetectChanges(files2).Deleted.ShouldHaveTheSameElementsAs(file6.RelativePath, file7.RelativePath);\n\n        }\n\n        [Test]\n        public void find_adds()\n        {\n            var files = new IFubuFile[] { file1, file2, file3, file4, file5 };\n\n            var set = new TrackedSet(files);\n\n            var files2 = new IFubuFile[] { file1, file2, file3, file4, file5, file6, file7 };\n\n            set.DetectChanges(files2).Added.ShouldHaveTheSameElementsAs(file6, file7);\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/Formatters/XmlFormatterTester.cs",
    "content": "using FubuCore;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Formatters;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing StructureMap;\r\n\r\nnamespace FubuMVC.Tests.Runtime.Formatters\r\n{\r\n    [TestFixture]\r\n    public class XmlFormatterTester \r\n    {\r\n        private OwinHttpRequest theRequest;\r\n        private XmlFormatter theFormatter;\r\n        private InMemoryOutputWriter writer;\r\n        private MockedFubuRequestContext context;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theRequest = OwinHttpRequest.ForTesting();\r\n            writer = new InMemoryOutputWriter();\r\n\r\n            var container = new Container(x => {\r\n                x.For<IHttpRequest>().Use(theRequest);\r\n                x.For<IOutputWriter>().Use(writer);\r\n                x.For<IFubuRequest>().Use(new InMemoryFubuRequest());\r\n            });\r\n\r\n            context = new MockedFubuRequestContext(container);\r\n\r\n            theFormatter = new XmlFormatter();\r\n        }\r\n\r\n        [Test]\r\n        public void read_value()\r\n        {\r\n            var xmlInput = new XmlFormatterModel(){\r\n                FirstName = \"Jeremy\",\r\n                LastName = \"Miller\"\r\n            };\r\n\r\n            theRequest.Body.XmlInputIs(xmlInput);\r\n\r\n            var xmlOutput = theFormatter.Read<XmlFormatterModel>(context).GetAwaiter().GetResult();\r\n            xmlOutput.ShouldNotBeTheSameAs(xmlInput);\r\n\r\n            xmlOutput.FirstName.ShouldBe(xmlInput.FirstName);\r\n            xmlOutput.LastName.ShouldBe(xmlInput.LastName);\r\n        }\r\n\r\n    }\r\n\r\n    public class XmlFormatterModel\r\n    {\r\n        public string FirstName { get; set; }\r\n        public string LastName { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/FubuRequestTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Logging;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.StructureMap;\r\nusing FubuMVC.Tests.TestSupport;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Runtime\r\n{\r\n    [TestFixture]\r\n    public class when_trying_to_set_an_object_in_fubu_request : InteractionContext<FubuRequest>\r\n    {\r\n        private BindResult theResult;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            theResult = new BindResult\r\n            {\r\n                Problems = new List<ConvertProblem>\r\n                {\r\n                    new ConvertProblem(),\r\n                    new ConvertProblem()\r\n                },\r\n                Value = new BinderTarget()\r\n            };\r\n\r\n            MockFor<IObjectResolver>().Stub(x => x.BindModel(typeof (BinderTarget), MockFor<IRequestData>()))\r\n                .Return(theResult);\r\n\r\n            ClassUnderTest.Get<BinderTarget>().ShouldBeTheSameAs(theResult.Value);\r\n        }\r\n\r\n        [Test]\r\n        public void try_to_set_the_same_value_does_nothing()\r\n        {\r\n            ClassUnderTest.Set(theResult.Value.As<BinderTarget>());\r\n\r\n            ClassUnderTest.ProblemsFor<BinderTarget>().ShouldHaveTheSameElementsAs(theResult.Problems);\r\n        }\r\n    }\r\n\r\n\r\n    [TestFixture]\r\n    public class fetching_an_object_for_the_second_time_gets_the_same_object : InteractionContext<FubuRequest>\r\n    {\r\n        private object target;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            target = new BinderTarget();\r\n\r\n            MockFor<IObjectResolver>().Stub(x => x.BindModel(typeof (BinderTarget), MockFor<IRequestData>()))\r\n                .Return(new BindResult\r\n                {\r\n                    Value = target,\r\n                    Problems = new List<ConvertProblem>()\r\n                });\r\n        }\r\n\r\n        [Test]\r\n        public void the_object_is_only_created_once()\r\n        {\r\n            var request = ClassUnderTest;\r\n            var target1 = request.Get<BinderTarget>();\r\n\r\n            request.Get<BinderTarget>().ShouldBeTheSameAs(target1);\r\n            request.Get<BinderTarget>().ShouldBeTheSameAs(target1);\r\n            request.Get<BinderTarget>().ShouldBeTheSameAs(target1);\r\n        }\r\n    }\r\n\r\n\r\n    [TestFixture]\r\n    public class when_finding_something_by_a_base_class : InteractionContext<FubuRequest>\r\n    {\r\n        [Test]\r\n        public void inject_by_concrete_find_by_abstraction()\r\n        {\r\n            var request = ClassUnderTest;\r\n\r\n            var target = new BinderTarget();\r\n            request.Set(target);\r\n\r\n            request.Get<BinderTarget>().ShouldBeTheSameAs(target);\r\n\r\n\r\n            request.Find<BinderTargetBase>().First().ShouldBeTheSameAs(target);\r\n        }\r\n    }\r\n\r\n\r\n    [TestFixture]\r\n    public class when_clearing_a_type_from_the_request : InteractionContext<FubuRequest>\r\n    {\r\n        private BinderTarget _binderTarget;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            _binderTarget = new BinderTarget();\r\n            ClassUnderTest.Set(_binderTarget);\r\n        }\r\n\r\n        [Test]\r\n        public void should_not_do_anything_if_the_type_does_not_exist_in_the_request()\r\n        {\r\n            ClassUnderTest.Clear(typeof (when_clearing_a_type_from_the_request));\r\n            ClassUnderTest.Get(_binderTarget.GetType()).ShouldBeTheSameAs(_binderTarget);\r\n        }\r\n\r\n        [Test]\r\n        public void should_not_clear_a_subclass_type_when_instructed_to_clear_a_parent_type()\r\n        {\r\n            ClassUnderTest.Clear(typeof (BinderTargetBase));\r\n            ClassUnderTest.Get(_binderTarget.GetType()).ShouldBeTheSameAs(_binderTarget);\r\n        }\r\n\r\n        [Test]\r\n        public void should_remove_the_type_from_the_request_if_it_exists()\r\n        {\r\n            ClassUnderTest.Clear(_binderTarget.GetType());\r\n            Exception<NullReferenceException>.ShouldBeThrownBy(\r\n                () => ClassUnderTest.Get(_binderTarget.GetType()).ShouldBeNull());\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class setting_an_object_explicitly_registers_the_new_object : InteractionContext<FubuRequest>\r\n    {\r\n        private BinderTarget registered;\r\n        private FubuRequest request;\r\n        private RecordingLogger logs;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            logs = RecordLogging();\r\n\r\n            registered = new BinderTarget();\r\n            request = ClassUnderTest;\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void the_object_registered_by_set_object_is_always_returned_from_get()\r\n        {\r\n            request.SetObject(registered);\r\n\r\n            request.Get<BinderTarget>().ShouldBeTheSameAs(registered);\r\n            request.Get<BinderTarget>().ShouldBeTheSameAs(registered);\r\n            request.Get<BinderTarget>().ShouldBeTheSameAs(registered);\r\n\r\n            request.ProblemsFor<BinderTarget>().Count().ShouldBe(0);\r\n        }\r\n\r\n        [Test]\r\n        public void setting_the_object_records_a_SetValue_log()\r\n        {\r\n            request.SetObject(registered);\r\n\r\n            logs.DebugMessages.Single().ShouldBe(new SetValueReport(registered));\r\n        }\r\n\r\n        [Test]\r\n        public void the_object_registered_is_always_returned_from_get()\r\n        {\r\n            request.Set(registered);\r\n\r\n            request.Get<BinderTarget>().ShouldBeTheSameAs(registered);\r\n            request.Get<BinderTarget>().ShouldBeTheSameAs(registered);\r\n            request.Get<BinderTarget>().ShouldBeTheSameAs(registered);\r\n\r\n            request.ProblemsFor<BinderTarget>().Count().ShouldBe(0);\r\n        }\r\n\r\n        [Test]\r\n        public void trace_the_set_object_from_generic_set()\r\n        {\r\n            request.Set<BinderTargetBase>(registered);\r\n\r\n            logs.DebugMessages.Single().ShouldBe(SetValueReport.For<BinderTargetBase>(registered));\r\n        }\r\n    }\r\n\r\n\r\n    public class BinderTargetBase\r\n    {\r\n    }\r\n\r\n    public class BinderTarget : BinderTargetBase\r\n    {\r\n        public string Name { get; set; }\r\n        public int Age { get; set; }\r\n        public bool IsTrue { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/HeaderValueAttributeTester.cs",
    "content": "using System.Net;\r\nusing FubuCore.Binding.InMemory;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Runtime;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Runtime\r\n{\r\n    [TestFixture]\r\n    public class HeaderValueAttributeTester\r\n    {\r\n        [Test]\r\n        public void bind_by_header()\r\n        {\r\n            var headers = OwinHttpRequest.ForTesting();\r\n            headers.AppendHeader(\"Last-Event-ID\", \"something\");\r\n            headers.AppendHeader(HttpResponseHeaders.Warning, \"oh no!\");\r\n\r\n\r\n            var target = BindingScenario<HeaderValueTarget>.For(x => { x.Service<IHttpRequest>(headers); }).Model;\r\n\r\n            target.LastEventId.ShouldBe(\"something\");\r\n            target.Warning.ShouldBe(\"oh no!\");\r\n        }\r\n    }\r\n\r\n\r\n    public class HeaderValueTarget\r\n    {\r\n        [HeaderValue(\"Last-Event-ID\")]\r\n        public string LastEventId { get; set; }\r\n\r\n        [HeaderValue(HttpRequestHeader.Warning)]\r\n        public string Warning { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/MimeTypeTester.cs",
    "content": "using FubuMVC.Core.Runtime;\r\nusing NUnit.Framework;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Runtime\r\n{\r\n    [TestFixture]\r\n    public class MimeTypeTester\r\n    {\r\n        [Test]\r\n        public void find_default_extension_for_javascript()\r\n        {\r\n            MimeType.Javascript.DefaultExtension().ShouldBe(\".js\");\r\n        }\r\n\r\n        [Test]\r\n        public void find_default_extension_for_css()\r\n        {\r\n            MimeType.Css.DefaultExtension().ShouldBe(\".css\");\r\n        }\r\n\r\n        [Test]\r\n        public void find_default_extension_for_truetype_font()\r\n        {\r\n            MimeType.TrueTypeFont.DefaultExtension().ShouldBe(\".ttf\");\r\n        }\r\n\r\n        [Test]\r\n        public void determine_mime_type_from_name_for_js()\r\n        {\r\n            MimeType.MimeTypeByFileName(\"file.coffee.js\")\r\n                .ShouldBe(MimeType.Javascript);\r\n        }\r\n\r\n        [Test]\r\n        public void determine_mime_type_from_name_for_css()\r\n        {\r\n            MimeType.MimeTypeByFileName(\"style.css\")\r\n                .ShouldBe(MimeType.Css);\r\n        }\r\n\r\n        [Test]\r\n        public void determine_mime_type_from_name_for_truetype_font()\r\n        {\r\n            MimeType.MimeTypeByFileName(\"somefont.ttf\")\r\n                .ShouldBe(MimeType.TrueTypeFont);\r\n        }\r\n\r\n        [Test]\r\n        public void determine_mime_type_for_an_extension_that_has_been_added()\r\n        {\r\n            MimeType.Javascript.AddExtension(\".coffee\");\r\n            MimeType.Css.AddExtension(\".scss\");\r\n\r\n            MimeType.MimeTypeByFileName(\"file.coffee\").ShouldBe(MimeType.Javascript);\r\n            MimeType.MimeTypeByFileName(\"file.scss\").ShouldBe(MimeType.Css);\r\n        }\r\n\r\n        [Test]\r\n        public void can_return_null_for_a_totally_unrecognized_extension()\r\n        {\r\n            MimeType.MimeTypeByFileName(\"foo.657878XXXXXX\")\r\n                .ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void mimetype_from_extended_extension_set()\r\n        {\r\n            MimeType.MimeTypeByFileName(\"foo.323\")\r\n                .Value.ShouldBe(\"text/h323\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/OutputWriterTester.cs",
    "content": "using System;\r\nusing System.IO;\r\nusing System.Net;\r\nusing System.Web;\r\nusing FubuCore;\r\nusing FubuCore.Logging;\r\nusing FubuMVC.Core.Caching;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Logging;\r\nusing FubuMVC.Tests.TestSupport;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.ServiceBus;\r\nusing Cookie = FubuMVC.Core.Http.Cookies.Cookie;\r\n\r\nnamespace FubuMVC.Tests.Runtime\r\n{\r\n    [TestFixture]\r\n    public class OutputWriterTester : InteractionContext<OutputWriter>\r\n    {\r\n        private IHttpResponse theHttpResponse;\r\n        private RecordingLogger logs;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            theHttpResponse = MockFor<IHttpResponse>();\r\n\r\n            logs = RecordLogging();\r\n        }\r\n\r\n        [Test]\r\n        public void flush_delegates()\r\n        {\r\n            ClassUnderTest.Flush();\r\n            theHttpResponse.AssertWasCalled(x => x.Flush());\r\n        }\r\n\r\n        [Test]\r\n        public void redirect_to_a_url_delegates()\r\n        {\r\n            ClassUnderTest.RedirectToUrl(\"http://somewhere.com\");\r\n\r\n            theHttpResponse.AssertWasCalled(x => x.Redirect(\"http://somewhere.com\"));\r\n        }\r\n\r\n        [Test]\r\n        public void redirect_to_url_logs_the_redirection()\r\n        {\r\n            ClassUnderTest.RedirectToUrl(\"http://somewhere.com\");\r\n\r\n            logs.DebugMessages.Single().ShouldBe(new RedirectReport(\"http://somewhere.com\"));\r\n        }\r\n\r\n        [Test]\r\n        public void write_in_normal_mode_delegates_to_http_writer()\r\n        {\r\n            ClassUnderTest.Write(\"text/json\", \"{}\");\r\n\r\n            theHttpResponse.AssertWasCalled(x => x.Write(\"{}\"));\r\n            theHttpResponse.AssertWasCalled(x => x.WriteContentType(\"text/json\"));\r\n        }\r\n\r\n        [Test]\r\n        public void write_in_normal_mode_records_content_type_and_text()\r\n        {\r\n            ClassUnderTest.Write(\"text/json\", \"{}\");\r\n\r\n            logs.DebugMessages.Single().ShouldBe(new OutputReport(\"text/json\", \"{}\"));\r\n        }\r\n\r\n        [Test]\r\n        public void write_records_content_type_and_text()\r\n        {\r\n            ClassUnderTest.Write(\"Some text\");\r\n\r\n            logs.DebugMessages.Single().ShouldBe(new OutputReport(\"Some text\"));\r\n        }\r\n\r\n        [Test]\r\n        public void write_response_code_delegates()\r\n        {\r\n            ClassUnderTest.WriteResponseCode(HttpStatusCode.UseProxy);\r\n\r\n            theHttpResponse.AssertWasCalled(x => x.WriteResponseCode(HttpStatusCode.UseProxy));\r\n        }\r\n\r\n        [Test]\r\n        public void write_response_code_and_description_delegates()\r\n        {\r\n            const string description = \"why u no make good request?\";\r\n            ClassUnderTest.WriteResponseCode(HttpStatusCode.BadRequest, description);\r\n            theHttpResponse.AssertWasCalled(x => x.WriteResponseCode(HttpStatusCode.BadRequest, description));\r\n        }\r\n\r\n        [Test]\r\n        public void write_by_stream_delegates_to_the_http_writer_in_normal_mode()\r\n        {\r\n            Func<Stream, Task> action = stream => Task.CompletedTask;\r\n\r\n            theHttpResponse.Stub(x => x.Write(action)).Return(Task.CompletedTask);\r\n\r\n            ClassUnderTest.Write(\"text/json\",  action).GetAwaiter().GetResult();\r\n\r\n            theHttpResponse.AssertWasCalled(x => x.WriteContentType(\"text/json\"));\r\n            theHttpResponse.AssertWasCalled(x => x.Write((Func<Stream, Task>) action));\r\n        }\r\n\r\n        [Test]\r\n        public void append_header_writes_directly_to_the_ihttpwriter_in_normal_mode()\r\n        {\r\n            ClassUnderTest.AppendHeader(\"e-tag\", \"12345\");\r\n\r\n            theHttpResponse.AssertWasCalled(x => x.AppendHeader(\"e-tag\", \"12345\"));\r\n\r\n        }\r\n\r\n        [Test]\r\n        public void replay_logs()\r\n        {\r\n            var recording = MockRepository.GenerateMock<IRecordedOutput>();\r\n\r\n            ClassUnderTest.Replay(recording);\r\n\r\n            logs.DebugMessages.Single().ShouldBe(new ReplayRecordedOutput(recording));\r\n        }\r\n\r\n        [Test]\r\n        public void flushing_the_output_records_a_debug_message()\r\n        {\r\n            ClassUnderTest.Flush();\r\n\r\n            logs.DebugMessages.Single().ShouldBeOfType<StringMessage>()\r\n                .Message.ShouldBe(\"Flushed content to the Http output\");\r\n        }\r\n\r\n        [Test]\r\n        public void write_file_logs()\r\n        {\r\n            ClassUnderTest.WriteFile(MimeType.Jpg, \"file path\", \"some display\");\r\n\r\n            logs.DebugMessages.Single().ShouldBe(new FileOutputReport{\r\n                ContentType = MimeType.Jpg.Value,\r\n                DisplayName = \"some display\",\r\n                LocalFilePath = \"file path\"\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void writing_a_response_code_will_log()\r\n        {\r\n            const string description = \"why u no make good request?\";\r\n            ClassUnderTest.WriteResponseCode(HttpStatusCode.BadRequest, description);\r\n\r\n            logs.DebugMessages.Single().ShouldBe(new HttpStatusReport{\r\n                Description = description,\r\n                Status = HttpStatusCode.BadRequest\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void write_cookie()\r\n        {\r\n            var cookie = new Cookie(\"something\", \"else\");\r\n\r\n            ClassUnderTest.AppendCookie(cookie);\r\n\r\n            logs.DebugMessages.Single().ShouldBe(new WriteCookieReport(cookie));\r\n        }\r\n\r\n        [Test]\r\n        public void recording_writes_a_report()\r\n        {\r\n            ClassUnderTest.Record(() =>\r\n            {\r\n                ClassUnderTest.Write(\"some stuff\");\r\n                return Task.CompletedTask;\r\n            }).Wait();\r\n\r\n            logs.DebugMessages.Count().ShouldBe(3);\r\n            logs.DebugMessages.First().ShouldBeOfType<StartedRecordingOutput>();\r\n            logs.DebugMessages.ElementAt(1).ShouldBeOfType<OutputReport>().Contents.ShouldBe(\"some stuff\");\r\n            logs.DebugMessages.Last().ShouldBeOfType<FinishedRecordingOutput>();\r\n        }\r\n\r\n        [Test]\r\n        public void AppendHeader_records_any_values()\r\n        {\r\n            ClassUnderTest.AppendHeader(\"something\", \"a value\");\r\n\r\n            logs.DebugMessages.Single().ShouldBe(new SetHeaderValue(\"something\", \"a value\"));\r\n        }\r\n\r\n        [Test]\r\n        public void write_stream_logs()\r\n        {\r\n            Func<Stream, Task> action = stream => Task.CompletedTask;\r\n\r\n            theHttpResponse.Stub(x => x.Write(action)).Return(Task.CompletedTask);\r\n            \r\n            ClassUnderTest.Write(\"text/xml\", action).GetAwaiter().GetResult();\r\n\r\n            logs.DebugMessages.Single().ShouldBe(new WriteToStreamReport(\"text/xml\"));\r\n        }\r\n\r\n        [Test]\r\n        public void dispose_does_not_flush()\r\n        {\r\n            Services.PartialMockTheClassUnderTest();\r\n            ClassUnderTest.Dispose();\r\n            ClassUnderTest.AssertWasNotCalled(x => x.Flush());\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_writing_within_recorded_output_mode : InteractionContext<OutputWriter>\r\n    {\r\n        private string theContent;\r\n        private string theNestedContent;\r\n\r\n        private string theContentType;\r\n\r\n        private RecordedOutput theRecordedOutput;\r\n        private RecordedOutput theNestedOutput;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            theContent = \"some content\";\r\n            theNestedContent = \"nested content\";\r\n            theContentType = \"text/xml\";\r\n\r\n            theRecordedOutput = ClassUnderTest.Record(() =>\r\n            {\r\n                ClassUnderTest.Write(theContentType, theContent);\r\n                theNestedOutput = ClassUnderTest.Record(() =>\r\n                {\r\n                    ClassUnderTest.Write(theContentType, theNestedContent);\r\n                    return Task.CompletedTask;\r\n                }).GetAwaiter().GetResult().As<RecordedOutput>();\r\n\r\n                return Task.CompletedTask;\r\n\r\n            }).GetAwaiter().GetResult().As<RecordedOutput>();\r\n        }\r\n\r\n        [Test]\r\n        public void recorded_output_should_have_what_was_written()\r\n        {\r\n            theRecordedOutput.Outputs\r\n                .ShouldHaveTheSameElementsAs(new SetContentType(theContentType), new WriteTextOutput(theContent));\r\n        }\r\n\r\n        [Test]\r\n        public void should_not_have_written_directly_to_the_http_writer()\r\n        {\r\n            MockFor<IHttpResponse>().AssertWasNotCalled(x => x.Write(theContent));\r\n            MockFor<IHttpResponse>().AssertWasNotCalled(x => x.WriteContentType(theContentType));\r\n        }\r\n\r\n        [Test]\r\n        public void should_restore_to_normal_writing_after_recording()\r\n        {\r\n            ClassUnderTest.Write(theContentType, theContent);\r\n\r\n            MockFor<IHttpResponse>().AssertWasCalled(x => x.Write(theContent));\r\n            MockFor<IHttpResponse>().AssertWasCalled(x => x.WriteContentType(theContentType));\r\n        }\r\n\r\n        [Test]\r\n        public void should_nest_correctly_when_recording_1()\r\n        {\r\n            theNestedOutput.GetText().ShouldBe(theNestedContent);\r\n        }\r\n\r\n        [Test]\r\n        public void should_nest_correctly_when_recording_2()\r\n        {\r\n            ClassUnderTest.Record(() =>\r\n            {\r\n                ClassUnderTest.WriteHtml(\"Monty\");\r\n                var nested = ClassUnderTest.Record(() =>\r\n                {\r\n                    ClassUnderTest.WriteHtml(\"Python\");\r\n                    return Task.CompletedTask;\r\n                });\r\n                ClassUnderTest.WriteHtml(nested.GetAwaiter().GetResult().GetText());\r\n\r\n                return Task.CompletedTask;\r\n\r\n            }).GetAwaiter().GetResult().GetText().ShouldBe(\"MontyPython\");\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_writing_a_file_with_a_display_name : InteractionContext<OutputWriter>\r\n    {\r\n        private string theDisplayName;\r\n        private string theFilePath;\r\n        private string theContentType;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            theDisplayName = \"The title\";\r\n            theFilePath = \"location\";\r\n            theContentType = \"content type\";\r\n\r\n            MockFor<IFileSystem>().Stub(x => x.FileSizeOf(theFilePath)).Return(123);\r\n\r\n            ClassUnderTest.WriteFile(theContentType, theFilePath, theDisplayName);\r\n        }\r\n\r\n        [Test]\r\n        public void should_actually_you_know_write_the_file_itself()\r\n        {\r\n            MockFor<IHttpResponse>().AssertWasCalled(x => x.WriteFile(theFilePath));\r\n        }\r\n\r\n        [Test]\r\n        public void should_have_written_the_content_type()\r\n        {\r\n            MockFor<IHttpResponse>().AssertWasCalled(x => x.WriteContentType(theContentType));\r\n        }\r\n\r\n        [Test]\r\n        public void should_write_a_content_disposition_header_for_the_display()\r\n        {\r\n            MockFor<IHttpResponse>().AssertWasCalled(\r\n                x => x.AppendHeader(\"Content-Disposition\", \"attachment; filename=\\\"The title\\\"\"));\r\n        }\r\n\r\n        [Test]\r\n        public void should_write_header_for_content_length()\r\n        {\r\n            MockFor<IHttpResponse>().AssertWasCalled(x => x.AppendHeader(\"Content-Length\", \"123\"));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/PartialChainSwitcherTester.cs",
    "content": "using System;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Tests.Registration;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Runtime\n{\n    [TestFixture]\n    public class PartialChainSwitcherTester : InteractionContext<PartialChainSwitcher>\n    {\n        private BehaviorChain theTarget;\n        private ICurrentChain theChain;\n        private IActionBehavior theInner;\n\n        protected override void beforeEach()\n        {\n            theTarget = BehaviorChain.For<ControllerTarget>(x => x.ZeroInOneOut());\n            theChain = MockFor<ICurrentChain>();\n            theInner = MockFor<IActionBehavior>();\n\n            Container.Inject(theTarget);\n            ClassUnderTest.InvokePartial();\n        }\n\n        [Test]\n        public void invoke_partial_causes_chain_context_switch()\n        {\n            theChain.AssertWasCalled(x => x.Push(theTarget));\n            theInner.AssertWasCalled(x => x.InvokePartial());\n            theChain.AssertWasCalled(x => x.Pop());\n        }\n\n        [Test]\n        public void invoke_throws_an_exception()\n        {\n            Exception<InvalidOperationException>.ShouldBeThrownBy(() =>\n            {\n                ClassUnderTest.Invoke();\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/PartialFactoryTester.cs",
    "content": "using FubuCore.Binding;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Tests.Registration;\r\nusing FubuMVC.Tests.TestSupport;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Runtime\r\n{\r\n    [TestFixture]\r\n    public class PartialFactoryTester : InteractionContext<PartialFactory>\r\n    {\r\n        private BehaviorGraph graph;\r\n        private ServiceArguments args;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            graph = new BehaviorGraph();\r\n            Services.Inject(graph);\r\n            args = new ServiceArguments();\r\n            Services.Inject(args);\r\n        }\r\n\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/SessionState/FlashProviderTester.cs",
    "content": "using FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Runtime.SessionState;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.SessionState\n{\n    [TestFixture]\n    public class when_storing_flash : the_flash_provider\n    {\n        protected override void beforeEach()\n        {\n            var model = new TestInputModel\n            {\n                PropInt = 99\n            };\n            _flash.Flash(model);\n        }\n\n        [Test]\n        public void should_json_serialize_model()\n        {\n            _session.Get<string>(FlashProvider.FLASH_KEY).ShouldContain(\"\\\"PropInt\\\":99\");\n        }\n\n        [Test]\n        public void should_store_model_in_session()\n        {\n            _session.Get<string>(FlashProvider.FLASH_KEY).ShouldNotBeNull();\n        }\n    }\n\n    [TestFixture]\n    public class when_retrieving_empty_flash : the_flash_provider\n    {\n        [Test]\n        public void should_return_null()\n        {\n            _flash.Retrieve<TestInputModel>().ShouldBeNull();\n        }\n    }\n\n    [TestFixture]\n    public class when_retrieving_flash_data : the_flash_provider\n    {\n        protected override void beforeEach()\n        {\n            var model = new TestInputModel\n            {\n                PropInt = 99\n            };\n            _flash.Flash(model);\n        }\n\n        [Test]\n        public void should_clear_flash_data()\n        {\n            _flash.Retrieve<TestInputModel>();\n            _flash.Retrieve<TestInputModel>().ShouldBeNull();\n        }\n\n        [Test]\n        public void should_return_value()\n        {\n            _flash.Retrieve<TestInputModel>().PropInt.ShouldBe(99);\n        }\n    }\n\n    public abstract class the_flash_provider\n    {\n        protected FlashProvider _flash;\n        protected BasicSessionState _session;\n\n        [SetUp]\n        public void SetUp()\n        {\n            _session = new BasicSessionState();\n            _flash = new FlashProvider\n            {\n                Session = _session\n            };\n            beforeEach();\n        }\n\n        protected virtual void beforeEach()\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/SessionState/RequestDataProviderTester.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.Web;\nusing FubuMVC.Core.Runtime.SessionState;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.SessionState\n{\n    [TestFixture]\n    public class RequestDataProviderTester\n    {\n        #region Setup/Teardown\n\n        [SetUp]\n        public void Setup_Test()\n        {\n            _httpContext = MockRepository.GenerateMock<HttpContextBase>();\n            _sessionState = MockRepository.GenerateMock<HttpSessionStateBase>();\n\n            _flashViewModelForTesting = new FlashViewModelForTesting\n            {\n                Property1 = \"Property\",\n                Property2 = 10,\n                Property3 = true,\n            };\n        }\n\n        #endregion\n\n        private HttpContextBase _httpContext;\n        private HttpSessionStateBase _sessionState;\n        private RequestDataProvider _requestDataProvider;\n        private FlashViewModelForTesting _flashViewModelForTesting;\n\n        [Test]\n        public void Should_be_able_to_load_model_when_Session_is_not_null()\n        {\n            _httpContext.Stub(x => x.Session).Return(_sessionState);\n            _sessionState.Expect(c => c[RequestDataProvider.REQUESTDATA_PREFIX_KEY + \"Property1\"]).Return(\n                _flashViewModelForTesting.Property1);\n            _sessionState.Expect(c => c[RequestDataProvider.REQUESTDATA_PREFIX_KEY + \"Property2\"]).Return(\n                _flashViewModelForTesting.Property2);\n            _sessionState.Expect(c => c[RequestDataProvider.REQUESTDATA_PREFIX_KEY + \"Property3\"]).Return(\n                _flashViewModelForTesting.Property3);\n\n            var testing = new RequestDataProvider(_httpContext).Load<FlashViewModelForTesting>();\n\n            _httpContext.VerifyAllExpectations();\n            _sessionState.VerifyAllExpectations();\n\n            testing.Property1.ShouldBe(_flashViewModelForTesting.Property1);\n            testing.Property2.ShouldBe(_flashViewModelForTesting.Property2);\n            testing.Property3.ShouldBe(_flashViewModelForTesting.Property3);\n        }\n\n        [Test]\n        public void Should_be_able_to_store_model_when_Session_is_not_null()\n        {\n            _httpContext.Stub(x => x.Session).Return(_sessionState);\n            _sessionState.Expect(\n                c =>\n                c.Add(RequestDataProvider.REQUESTDATA_PREFIX_KEY + \"Property1\", _flashViewModelForTesting.Property1));\n            _sessionState.Expect(\n                c =>\n                c.Add(RequestDataProvider.REQUESTDATA_PREFIX_KEY + \"Property2\", _flashViewModelForTesting.Property2));\n            _sessionState.Expect(\n                c =>\n                c.Add(RequestDataProvider.REQUESTDATA_PREFIX_KEY + \"Property3\", _flashViewModelForTesting.Property3));\n\n            new RequestDataProvider(_httpContext).Store(_flashViewModelForTesting);\n\n            _httpContext.VerifyAllExpectations();\n            _sessionState.VerifyAllExpectations();\n        }\n\n        [Test]\n        public void Should_do_nothing_when_trying_to_set_the_SessionState_when_the_current_session_is_null()\n        {\n            _httpContext.Stub(x => x.Session).Return(null);\n\n            _requestDataProvider = new RequestDataProvider(_httpContext);\n\n            _requestDataProvider.Store(_flashViewModelForTesting);\n\n            _requestDataProvider.Load<FlashViewModelForTesting>().ShouldBeNull();\n\n            _httpContext.VerifyAllExpectations();\n        }\n\n        [Test]\n        public void Should_only_clear_all_flash_related_session_data()\n        {\n            _httpContext.Stub(x => x.Session).Return(_sessionState);\n            var nameObjectCollection = new NameObjectCollection\n            {\n                {RequestDataProvider.REQUESTDATA_PREFIX_KEY + \"Property1\", _flashViewModelForTesting.Property1},\n                {\"OtherData\", new object()},\n                {RequestDataProvider.REQUESTDATA_PREFIX_KEY + \"Property2\", _flashViewModelForTesting.Property3}\n            };\n            _sessionState.Stub(x => x.Keys).Return(nameObjectCollection.Keys);\n\n            new RequestDataProvider(_httpContext).Clear();\n\n            _sessionState.AssertWasCalled(x => x.Remove(RequestDataProvider.REQUESTDATA_PREFIX_KEY + \"Property1\"));\n            _sessionState.AssertWasNotCalled(x => x.Remove(\"OtherData\"));\n            _sessionState.AssertWasCalled(x => x.Remove(RequestDataProvider.REQUESTDATA_PREFIX_KEY + \"Property2\"));\n        }\n\n        [Test]\n        public void Should_return_should_throw_when_a_property_was_not_found_in_the_session()\n        {\n            Exception<KeyNotFoundException>.ShouldBeThrownBy(() =>\n            {\n                _httpContext.Stub(x => x.Session).Return(_sessionState);\n                _sessionState.Expect(c => c[RequestDataProvider.REQUESTDATA_PREFIX_KEY + \"Property1\"]).Return(\n                    _flashViewModelForTesting.Property1);\n\n                // Note kept here to show the difference this is commented out as part of the test\n                //_sessionState.Expect(c => c[RequestDataProvider.REQUESTDATA_PREFIX_KEY + \"Property2\"]).Return(_flashViewModelForTesting.Property2);\n\n                _sessionState.Expect(c => c[RequestDataProvider.REQUESTDATA_PREFIX_KEY + \"Property3\"]).Return(\n                    _flashViewModelForTesting.Property3);\n\n                new RequestDataProvider(_httpContext).Load<FlashViewModelForTesting>();\n            });\n\n\n        }\n    }\n\n    public class FlashViewModelForTesting\n    {\n        public string Property1 { get; set; }\n        public int Property2 { get; set; }\n        public bool Property3 { get; set; }\n    }\n\n    public class NameObjectCollection : NameObjectCollectionBase\n    {\n        public void Add(String key, Object value)\n        {\n            BaseAdd(key, value);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/SessionState/flashing_an_object.cs",
    "content": "using System;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Runtime.SessionState;\nusing FubuMVC.Tests.Http.Cookies;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Cookie = FubuMVC.Core.Http.Cookies.Cookie;\n\nnamespace FubuMVC.Tests.SessionState\n{\n    [TestFixture]\n    public class flashing_an_object : InteractionContext<CookieFlashProvider>\n    {\n        private RecordingOutputWriter theOutputWriter;\n        private string theJson;\n        private object theFlashObject;\n\n        protected override void beforeEach()\n        {\n            theOutputWriter = new RecordingOutputWriter();\n\n            theFlashObject = Guid.NewGuid();\n            theJson = \"test test test\";\n\n            Services.Inject<IOutputWriter>(theOutputWriter);\n            Services.PartialMockTheClassUnderTest();\n\n            ClassUnderTest.Stub(x => x.ToJson(theFlashObject)).Return(theJson);\n\n            ClassUnderTest.Flash(theFlashObject);\n        }\n\n        private Cookie theCookie { get { return theOutputWriter.LastCookie; } }\n\n        [Test]\n        public void writes_the_cookie()\n        {\n            theCookie.Matches(CookieFlashProvider.FlashKey).ShouldBeTrue();\n            theCookie.Value.ShouldBe(theJson);\n        }\n    }\n\n    public class FlashTarget\n    {\n        public string Name { get; set; }\n\n        protected bool Equals(FlashTarget other)\n        {\n            return string.Equals(Name, other.Name);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((FlashTarget) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return Name.GetHashCode();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/SessionState/retrieving_an_existing_item_from_flash.cs",
    "content": "using FubuMVC.Core.Http.Cookies;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Runtime.SessionState;\nusing FubuMVC.Tests.Http.Cookies;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.SessionState\n{\n    [TestFixture]\n    public class retrieving_an_existing_item_from_flash : InteractionContext<CookieFlashProvider>\n    {\n        private string theCookieValue;\n        private RecordingOutputWriter theOutputWriter;\n        private FlashTarget theTarget;\n\n        protected override void beforeEach()\n        {\n            theCookieValue = CookieFlashProvider.ToBase64String(\"{\\\"Name\\\":\\\"Joel\\\"}\");\n\n            theOutputWriter = new RecordingOutputWriter();\n\n            Services.Inject<IOutputWriter>(theOutputWriter);\n\n            MockFor<ICookies>().Stub(x => x.Has(CookieFlashProvider.FlashKey)).Return(true);\n            MockFor<ICookies>().Stub(x => x.GetValue(CookieFlashProvider.FlashKey)).Return(theCookieValue);\n\n            theTarget = ClassUnderTest.Retrieve<FlashTarget>();\n        }\n\n        private Cookie theCookie { get { return theOutputWriter.LastCookie; } }\n\n        [Test]\n        public void parses_the_json()\n        {\n            theTarget.ShouldBe(new FlashTarget {Name = \"Joel\"});\n        }\n\n        [Test]\n        public void removes_the_cookie()\n        {\n            theCookie.Matches(CookieFlashProvider.FlashKey).ShouldBeTrue();\n            theCookie.Expires.Value.Year.ShouldBeLessThan(LocalSystemTime.Year);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/SessionState/retrieving_an_item_when_flash_is_empty.cs",
    "content": "using FubuMVC.Core.Http.Cookies;\nusing FubuMVC.Core.Runtime.SessionState;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.SessionState\n{\n    [TestFixture]\n    public class retrieving_an_item_when_flash_is_empty : InteractionContext<CookieFlashProvider>\n    {\n        protected override void beforeEach()\n        {\n            MockFor<ICookies>().Stub(x => x.Has(CookieFlashProvider.FlashKey)).Return(false);\n        }\n\n        [Test]\n        public void returns_default_for_type()\n        {\n            ClassUnderTest.Retrieve<FlashTarget>().ShouldBeNull();\n            ClassUnderTest.Retrieve<int>().ShouldBe(default(int));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/SimpleSessionStateTester.cs",
    "content": "﻿using System.Linq;\r\nusing System.Web;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core.Runtime;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.Runtime\r\n{\r\n    [TestFixture]\r\n    public class SimpleSessionStateTester\r\n    {\r\n        private HttpContextBase theHttpContext;\r\n        private StubSession theHttpSession;\r\n        private SimpleSessionState theSessionState;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            theHttpContext = MockRepository.GenerateMock<HttpContextBase>();\r\n            theHttpSession = new StubSession();\r\n            theHttpContext.Stub(x => x.Session).Return(theHttpSession);\r\n\r\n            theSessionState = new SimpleSessionState(theHttpContext);\r\n        }\r\n\r\n        [Test]\r\n        public void gets_and_sets_an_object_by_type_name()\r\n        {\r\n            var target = new SimpleSessionTarget {Name = \"Test\"};\r\n            theSessionState.Set(target);\r\n            theSessionState.Get<SimpleSessionTarget>().ShouldBe(target);\r\n        }\r\n\r\n        [Test]\r\n        public void gets_and_sets_an_object_by_explicit_key()\r\n        {\r\n            var target = new SimpleSessionTarget { Name = \"Test\" };\r\n            var key = \"the key\";\r\n            theSessionState.Set(key, target);\r\n            theSessionState.Get<SimpleSessionTarget>(key).ShouldBe(target);\r\n        }\r\n\r\n        public class StubSession : HttpSessionStateBase\r\n        {\r\n            public readonly Cache<string,object> Objects = new Cache<string, object>(); \r\n\r\n            public override object this[string name]\r\n            {\r\n                get { return Objects[name]; }\r\n                set\r\n                {\r\n                    Objects[name] = value;\r\n                }\r\n            }\r\n        }\r\n\r\n        public class SimpleSessionTarget\r\n        {\r\n            public string Name { get; set; }\r\n\r\n            protected bool Equals(SimpleSessionTarget other)\r\n            {\r\n                return string.Equals(Name, other.Name);\r\n            }\r\n\r\n            public override bool Equals(object obj)\r\n            {\r\n                if (ReferenceEquals(null, obj)) return false;\r\n                if (ReferenceEquals(this, obj)) return true;\r\n                if (obj.GetType() != this.GetType()) return false;\r\n                return Equals((SimpleSessionTarget) obj);\r\n            }\r\n\r\n            public override int GetHashCode()\r\n            {\r\n                return Name.GetHashCode();\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Runtime/must_be_descriptions_on_important_things.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing FubuCore;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Conversion;\r\nusing FubuCore.Descriptions;\r\nusing FubuMVC.Core.Caching;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Conventions;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Formatters;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Runtime\r\n{\r\n    [TestFixture]\r\n    public class must_be_descriptions_on_important_things\r\n    {\r\n        [Test]\r\n        public void must_be_a_description_on_all_IActionSource_types()\r\n        {\r\n            var types = typeof (FubuRequest).Assembly.GetExportedTypes()\r\n                .Where(x => x.IsConcreteTypeOf<IActionSource>())\r\n                .Where(x => !Description.HasExplicitDescription(x));\r\n\r\n            types.Each(x => Console.WriteLine(x.Name));\r\n\r\n            types.Any().ShouldBeFalse();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void must_be_a_description_on_all_IUrlPolicy_types()\r\n        {\r\n            var types = typeof (FubuRequest).Assembly.GetExportedTypes()\r\n                .Where(x => x.IsConcreteTypeOf<IUrlPolicy>())\r\n                .Where(x => !Description.HasExplicitDescription(x));\r\n\r\n            types.Each(x => Console.WriteLine(x.Name));\r\n\r\n            types.Any().ShouldBeFalse();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void must_be_a_description_on_all_ValueConverters()\r\n        {\r\n            var types = typeof (FubuRequest).Assembly.GetExportedTypes()\r\n                .Where(x => x.IsConcreteTypeOf<ValueConverter>())\r\n                .Where(x => !Description.HasExplicitDescription(x));\r\n\r\n            types.Each(x => Console.WriteLine(x.Name));\r\n\r\n            types.Any().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void must_be_a_description_on_all_conversion_families()\r\n        {\r\n            var types = typeof (FubuRequest).Assembly.GetExportedTypes()\r\n                .Where(x => x.IsConcreteTypeOf<IConverterFamily>())\r\n                .Where(x => !Description.HasExplicitDescription(x));\r\n\r\n            types.Each(x => Console.WriteLine(x.Name));\r\n\r\n            types.Any().ShouldBeFalse();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void must_be_a_description_on_all_media_readers()\r\n        {\r\n            // IMediaWriter<T>\r\n            var types = typeof (FubuRequest).Assembly.GetExportedTypes()\r\n                .Where(\r\n                    x => x.IsConcrete() && x.IsOpenGeneric() && x.GetInterfaces().Any(t => t.Name.Contains(\"IReader\")))\r\n                .Where(x => !Description.HasExplicitDescription(x));\r\n\r\n            types.Each(x => Console.WriteLine(x.Name));\r\n\r\n            types.Any().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void must_be_a_description_on_all_media_writers()\r\n        {\r\n            // IMediaWriter<T>\r\n            var types = typeof (FubuRequest).Assembly.GetExportedTypes()\r\n                .Where(\r\n                    x =>\r\n                        x.IsConcrete() && x.IsOpenGeneric() &&\r\n                        x.GetInterfaces().Any(t => t.Name.Contains(\"IMediaWriter\")))\r\n                .Where(x => !Description.HasExplicitDescription(x));\r\n\r\n            types.Each(x => Console.WriteLine(x.Name));\r\n\r\n            types.Any().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void must_be_a_description_on_all_model_binders()\r\n        {\r\n            var types = typeof (FubuRequest).Assembly.GetExportedTypes()\r\n                .Where(x => x.IsConcreteTypeOf<IModelBinder>())\r\n                .Where(x => !Description.HasExplicitDescription(x));\r\n\r\n            types.Each(x => Console.WriteLine(x.Name));\r\n\r\n            types.Any().ShouldBeFalse();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void must_be_a_description_on_all_property_binders()\r\n        {\r\n            var types = typeof (FubuRequest).Assembly.GetExportedTypes()\r\n                .Where(x => x.IsConcreteTypeOf<IPropertyBinder>())\r\n                .Where(x => !Description.HasExplicitDescription(x));\r\n\r\n            types.Each(x => Console.WriteLine(x.Name));\r\n\r\n            types.Any().ShouldBeFalse();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void must_be_some_sort_of_description_on_every_BehaviorNode()\r\n        {\r\n            var types = typeof (FubuRequest).Assembly.GetExportedTypes()\r\n                .Where(x => x.IsConcreteTypeOf<BehaviorNode>())\r\n                .Where(x => !Description.HasExplicitDescription(x));\r\n\r\n            types.Each(x => Console.WriteLine(x.Name));\r\n\r\n            types.Any().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void must_be_some_sort_of_description_on_every_IFormatter()\r\n        {\r\n            var types = typeof (FubuRequest).Assembly.GetExportedTypes()\r\n                .Where(x => x.IsConcreteTypeOf<IFormatter>())\r\n                .Where(x => !Description.HasExplicitDescription(x));\r\n\r\n            types.Each(x => Console.WriteLine(x.Name));\r\n\r\n            types.Any().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void must_be_some_sort_of_description_on_every_IRecordedHttpOutput()\r\n        {\r\n            var types = typeof (FubuRequest).Assembly.GetExportedTypes()\r\n                .Where(x => x.IsConcreteTypeOf<IRecordedHttpOutput>())\r\n                .Where(x => !Description.HasExplicitDescription(x));\r\n\r\n            types.Each(x => Console.WriteLine(x.Name));\r\n\r\n            types.Any().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void must_be_some_sort_of_description_on_every_iconverter_family()\r\n        {\r\n            var types = typeof (FubuRequest).Assembly.GetExportedTypes()\r\n                .Where(x => x.IsConcreteTypeOf<IObjectConverterFamily>())\r\n                .Where(x => !Description.HasExplicitDescription(x));\r\n\r\n            types.Each(x => Console.WriteLine(x.Name));\r\n\r\n            types.Any().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void must_be_some_sort_of_description_on_every_iconverterstrategy()\r\n        {\r\n            var types = typeof (FubuRequest).Assembly.GetExportedTypes()\r\n                .Where(x => x.IsConcreteTypeOf<IConverterStrategy>())\r\n                .Where(x => !Description.HasExplicitDescription(x));\r\n\r\n            types.Each(x => Console.WriteLine(x.Name));\r\n\r\n            types.Any().ShouldBeFalse();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/AntiForgery/AntiForgeryBehaviorTester.cs",
    "content": "using System.Net;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Security.AntiForgery;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.AntiForgery\n{\n    [TestFixture]\n    public class when_validator_passes : InteractionContext<AntiForgeryBehavior>\n    {\n        protected override void beforeEach()\n        {\n            MockFor<IAntiForgeryValidator>().Stub(v => v.Validate(\"salt\")).Return(true);\n            Container.Configure(c => c.For<AntiForgeryBehavior>().Use<AntiForgeryBehavior>().Ctor<string>().Is(\"salt\"));\n            ClassUnderTest.InsideBehavior = MockFor<IActionBehavior>();\n            ClassUnderTest.Invoke();\n        }\n\n        [Test]\n        public void should_invoke_next()\n        {\n            ClassUnderTest.InsideBehavior.AssertWasCalled(b => b.Invoke());\n        }\n\n        [Test]\n        public void should_not_write_to_output()\n        {\n            MockFor<IOutputWriter>().AssertWasNotCalled(o => o.WriteResponseCode(HttpStatusCode.InternalServerError));\n        }\n    }\n\n    [TestFixture]\n    public class when_validator_fails : InteractionContext<AntiForgeryBehavior>\n    {\n        protected override void beforeEach()\n        {\n            MockFor<IAntiForgeryValidator>().Stub(v => v.Validate(\"salt\")).Return(false);\n            Container.Configure(c => c.For<AntiForgeryBehavior>().Use<AntiForgeryBehavior>().Ctor<string>().Is(\"salt\"));\n            ClassUnderTest.InsideBehavior = MockFor<IActionBehavior>();\n            ClassUnderTest.Invoke();\n        }\n\n        [Test]\n        public void should_not_invoke_next()\n        {\n            ClassUnderTest.InsideBehavior.AssertWasNotCalled(b => b.Invoke());\n        }\n\n        [Test]\n        public void should_not_write_to_output()\n        {\n            MockFor<IOutputWriter>().AssertWasCalled(o => o.WriteResponseCode(HttpStatusCode.InternalServerError));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/AntiForgery/AntiForgeryServiceTester.cs",
    "content": "using System.Web;\nusing FubuMVC.Core.Http.Cookies;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Runtime.Files;\nusing FubuMVC.Core.Security.AntiForgery;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.AntiForgery\n{\n    [TestFixture]\n    public class AntiForgeryServiceTester : InteractionContext<AntiForgeryService>\n    {\n        protected override void beforeEach()\n        {\n            MockFor<IFubuApplicationFiles>().Stub(r => r.RootPath).Return(\"Path\");\n            MockFor<ICookies>().Stub(r => r.Get(\"Cookies\")).Return(new Cookie());\n\n            MockFor<IAntiForgeryTokenProvider>().Stub(x => x.GetTokenName(\"Path\")).Return(\"CookieName\");\n\n            MockFor<IAntiForgerySerializer>()\n                .Stub(x => x.Serialize(default(AntiForgeryData))).IgnoreArguments().Return(\"Serialized!\");\n        }\n\n        [Test]\n        public void should_decode_the_cookie_value()\n        {\n            var cookie = new Cookie(\"CookieName\", HttpUtility.UrlEncode(\"Some Value11\"));\n            MockFor<ICookies>().Stub(r => r.Get(\"CookieName\")).Return(cookie);\n\n            ClassUnderTest.GetCookieToken();\n\n            MockFor<IAntiForgerySerializer>()\n                .AssertWasCalled(x => x.Deserialize(HttpUtility.UrlDecode(cookie.Value)));\n        }\n\n        [Test]\n        public void should_return_form_token_from_cookie_data()\n        {\n            MockFor<IAntiForgeryTokenProvider>().Stub(x => x.GetTokenName()).Return(\"FormName\");\n\n            var input = new AntiForgeryData\n            {\n                Username = \"CookieUser\",\n                Value = \"12345\"\n            };\n            FormToken formToken = ClassUnderTest.GetFormToken(input, \"Salty\");\n\n            formToken.Name.ShouldBe(\"FormName\");\n            formToken.TokenString.ShouldBe(\"Serialized!\");\n        }\n\n        [Test]\n        public void should_set_cookie()\n        {\n            MockFor<IOutputWriter>().Expect(o => o.AppendCookie(default(Cookie))).IgnoreArguments();\n\n            ClassUnderTest.SetCookieToken(null, null);\n\n            MockFor<IOutputWriter>().VerifyAllExpectations();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/AntiForgery/AntiForgerySettingsTester.cs",
    "content": "﻿using FubuMVC.Core.Security.AntiForgery;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.AntiForgery\n{\n    public class AntiForgerySettingsTester\n    {\n        [Test]\n        public void anti_forgery_is_disabled_by_default()\n        {\n            new AntiForgerySettings().Enabled.ShouldBeFalse();\n        } \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/AntiForgery/AntiForgeryTokenAttributeTester.cs",
    "content": "using FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Security.AntiForgery;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.AntiForgery\n{\n    [TestFixture]\n    public class AntiForgeryTokenAttributeTester\n    {\n\n\n        [Test]\n        public void should_put_an_anti_forgery_token_on_the_chain()\n        {\n            var registry = new FubuRegistry();\n            registry.Actions.IncludeType<Controller1>();\n\n            BehaviorGraph.BuildFrom(registry).ChainFor<Controller1>(x => x.MethodWithAF(null))\n                .FirstCall()\n                .Previous.ShouldBeOfType<AntiForgeryNode>()\n                .Salt.ShouldBe(\"abc\");\n                \n        }\n\n\n        public class Controller1\n        {\n            [AntiForgeryToken(Salt = \"abc\")]\n            public Output1 MethodWithAF(Input1 input)\n            {\n                return null;\n            }\n\n            public Output1 MethodWithoutAF(Input1 input)\n            {\n                return null;\n            }\n        }\n\n        public class Input1{}\n        public class Output1{}\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/AntiForgery/AntiForgeryTokenProviderTester.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Security.AntiForgery;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.AntiForgery\n{\n    [TestFixture]\n    public class AntiForgeryTokenProviderTester : InteractionContext<AntiForgeryTokenProvider>\n    {\n        [Test]\n        public void names_from_path_are_asp_compatible()\n        {\n            const string aspName = \"__RequestVerificationToken_Pz4-Pj8.Pz4-Pj8.Pz4-Pg__\";\n            //Token name for path:\n            const string original = \"?>?>?>?>?>?>?>?>\";\n            string name = ClassUnderTest.GetTokenName(original);\n\n            name.ShouldBe(aspName);\n        }\n\n\n        [Test]\n        public void names_without_path_are_asp_compatible()\n        {\n            const string aspName = \"__RequestVerificationToken\";\n            //Token name without path\n\n            string name = ClassUnderTest.GetTokenName();\n            name.ShouldBe(aspName);\n        }\n\n        [Test]\n        public void provided_tokens_are_correct_length()\n        {\n            AntiForgeryData token = ClassUnderTest.GenerateToken();\n\n            byte[] decodedValue = Convert.FromBase64String(token.Value);\n            decodedValue.Length.ShouldBe(16);\n        }\n\n        [Test]\n        public void provided_tokens_are_random()\n        {\n            var tokens = new List<string>();\n\n            Enumerable.Range(0, 1000000).Each(x => tokens.Add(ClassUnderTest.GenerateToken().Value));\n\n            tokens.Distinct().Count().ShouldBe(tokens.Count);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/AntiForgery/AntiForgeryValidatorTester.cs",
    "content": "using System;\nusing System.Security.Principal;\nusing System.Threading;\nusing FubuCore.Binding;\nusing FubuCore.Binding.Values;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Http.Cookies;\nusing FubuMVC.Core.Security.AntiForgery;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.AntiForgery\n{\n    [TestFixture]\n    public class AntiForgeryValidatorTester : InteractionContext<AntiForgeryValidator>\n    {\n        private AntiForgeryData _cookieToken;\n        private AntiForgeryData _formToken;\n        private ICookies _cookies;\n        private IValueSource _valueSource;\n        private IValueSource _headerSource;\n\n        protected override void beforeEach()\n        {\n            MockFor<IAntiForgeryTokenProvider>().Stub(x => x.GetTokenName()).Return(\"FormName\");\n            MockFor<IAntiForgeryTokenProvider>().Stub(x => x.GetTokenName(\"String\")).IgnoreArguments().Return(\n                \"CookieName\");\n\n            MockFor<IRequestData>().Stub(x => x.Value(\"ApplicationPath\")).Return(\"Path\");\n\n            _valueSource = MockFor<IValueSource>();\n            _headerSource = MockFor<IValueSource>();\n\n            MockFor<IRequestData>().Stub(x => x.ValuesFor(RequestDataSource.Request)).Return(_valueSource);\n            MockFor<IRequestData>().Stub(x => x.ValuesFor(RequestDataSource.Header)).Return(_headerSource);\n\n            _cookies = MockFor<ICookies>();\n\n            _formToken = new AntiForgeryData\n            {\n                CreationDate = new DateTime(2010, 12, 12),\n                Salt = \"Salty\",\n                Username = \"User\",\n                Value = \"12345\"\n            };\n\n            _cookieToken = new AntiForgeryData\n            {\n                CreationDate = new DateTime(2010, 12, 12),\n                Salt = \"Salty\",\n                Username = \"User\",\n                Value = \"12345\"\n            };\n            MockFor<IAntiForgerySerializer>().Stub(x => x.Deserialize(\"CookieValue\")).Return(_cookieToken);\n            MockFor<IAntiForgerySerializer>().Stub(x => x.Deserialize(\"FormValue\")).Return(_formToken);\n        }\n\n        private void SetupIdentity(bool authenticated, string name)\n        {\n            MockFor<IIdentity>().Stub(x => x.IsAuthenticated).Return(authenticated);\n            MockFor<IIdentity>().Stub(x => x.Name).Return(name);\n            Thread.CurrentPrincipal = new GenericPrincipal(MockFor<IIdentity>(), null);\n        }\n\n\n        [Test]\n        public void should_not_validate_with_incorrect_user()\n        {\n            SetupIdentity(true, \"DifferentUser\");\n            _cookies.Stub(x => x.Get(\"CookieName\")).Return(new Cookie(\"CookieName\", \"CookieValue\"));\n            _valueSource.Stub(x => x.Get(\"FormName\")).Return(\"FormValue\");\n            ClassUnderTest.Validate(\"Salty\").ShouldBeFalse();\n        }\n\n        [Test]\n        public void should_not_validate_with_nonmatching_token_values()\n        {\n            SetupIdentity(true, \"User\");\n            _cookies.Stub(x => x.Get(\"CookieName\")).Return(new Cookie(\"CookieName\", \"CookieValue\"));\n            _valueSource.Stub(x => x.Get(\"FormName\")).Return(\"FormValue\");\n\n            _formToken.Value = \"I don't match!\";\n\n            ClassUnderTest.Validate(\"Salty\").ShouldBeFalse();\n        }\n\n\n        [Test]\n        public void should_not_validate_with_unauthenticated_user()\n        {\n            SetupIdentity(false, \"User\");\n            _cookies.Stub(x => x.Get(\"CookieName\")).Return(new Cookie(\"CookieName\", \"CookieValue\"));\n            _valueSource.Stub(x => x.Get(\"FormName\")).Return(\"FormValue\");\n            ClassUnderTest.Validate(\"Salty\").ShouldBeFalse();\n        }\n\n        [Test]\n        public void should_not_validate_without_cookie_token()\n        {\n            SetupIdentity(true, \"User\");\n            _cookies.Stub(x => x.Get(\"CookieName\")).Return(null);\n            _valueSource.Stub(x => x.Get(\"FormName\")).Return(\"FormValue\");\n            ClassUnderTest.Validate(\"Salty\").ShouldBeFalse();\n        }\n\n        [Test]\n        public void should_not_validate_without_form_token()\n        {\n            SetupIdentity(true, \"User\");\n            _cookies.Stub(x => x.Get(\"CookieName\")).Return(new Cookie(\"CookieName\", \"CookieValue\"));\n            _valueSource.Stub(x => x.Get(\"FormName\")).Return(null);\n            ClassUnderTest.Validate(\"Salty\").ShouldBeFalse();\n        }\n\n        [Test]\n        public void should_validate_with_correct_request_data()\n        {\n            Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(\"User\"), null);\n            MockFor<IIdentity>().Stub(x => x.IsAuthenticated).Return(true);\n            MockFor<IIdentity>().Stub(x => x.Name).Return(\"User\");\n            _cookies.Stub(x => x.Get(\"CookieName\")).Return(new Cookie(\"CookieName\", \"CookieValue\"));\n            _valueSource.Stub(x => x.Get(\"FormName\")).Return(\"FormValue\");\n            ClassUnderTest.Validate(\"Salty\").ShouldBeTrue();\n        }\n\n        [Test]\n        public void should_validate_with_correct_request_data_from_header()\n        {\n            Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(\"User\"), null);\n            MockFor<IIdentity>().Stub(x => x.IsAuthenticated).Return(true);\n            MockFor<IIdentity>().Stub(x => x.Name).Return(\"User\");\n            _cookies.Stub(x => x.Get(\"CookieName\")).Return(new Cookie(\"CookieName\", \"CookieValue\"));\n            _headerSource.Stub(x => x.Get(\"FormName\")).Return(\"FormValue\");\n            ClassUnderTest.Validate(\"Salty\").ShouldBeTrue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/AntiForgery/BinaryAntiForgerySerializerTester.cs",
    "content": "using System;\nusing FubuMVC.Core.Security.AntiForgery;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.AntiForgery\n{\n    [TestFixture]\n    public class BinaryAntiForgerySerializerTester : InteractionContext<BinaryAntiForgerySerializer>\n    {\n        public class TestEncoder : IAntiForgeryEncoder\n        {\n            public byte[] Decode(string value)\n            {\n                return Convert.FromBase64String(value);\n            }\n\n            public string Encode(byte[] bytes)\n            {\n                return Convert.ToBase64String(bytes);\n            }\n        }\n\n        protected override void beforeEach()\n        {\n            Services.Inject(typeof (IAntiForgeryEncoder), new TestEncoder());\n        }\n\n\n        [Test]\n        public void deserialization_is_asp_compatible()\n        {\n            string aspSerialized = \"CFRoZSBTYWx0CVRoZSBWYWx1ZQBAik+Cb80IDFRoZSBVc2VybmFtZQ==\";\n\n            //Base64 Serialized version of:\n            var token = new AntiForgeryData\n            {\n                Salt = \"The Salt\",\n                Username = \"The Username\",\n                Value = \"The Value\",\n                CreationDate = new DateTime(2010, 12, 22),\n            };\n\n            AntiForgeryData deserialized = ClassUnderTest.Deserialize(aspSerialized);\n\n\n            deserialized.CreationDate.ShouldBe(token.CreationDate);\n            deserialized.Salt.ShouldBe(token.Salt);\n            deserialized.Username.ShouldBe(token.Username);\n            deserialized.Value.ShouldBe(token.Value);\n        }\n\n        [Test]\n        public void serialization_and_deserialization_match()\n        {\n            var token = new AntiForgeryData\n            {\n                CreationDate = new DateTime(2011, 1, 30),\n                Salt = \"Testing\",\n                Username = \"User\",\n                Value = \"12345\"\n            };\n            string serialized = ClassUnderTest.Serialize(token);\n            AntiForgeryData deserialized = ClassUnderTest.Deserialize(serialized);\n\n            deserialized.CreationDate.ShouldBe(token.CreationDate);\n            deserialized.Salt.ShouldBe(token.Salt);\n            deserialized.Username.ShouldBe(token.Username);\n            deserialized.Value.ShouldBe(token.Value);\n        }\n\n\n        [Test]\n        public void serialization_is_asp_compatible()\n        {\n            const string aspSerialized = \"CFRoZSBTYWx0CVRoZSBWYWx1ZQBAik+Cb80IDFRoZSBVc2VybmFtZQ==\";\n\n            //Base64 Serialized version of:\n            var token = new AntiForgeryData\n            {\n                Salt = \"The Salt\",\n                Username = \"The Username\",\n                Value = \"The Value\",\n                CreationDate = new DateTime(2010, 12, 22),\n            };\n\n            string deserialized = ClassUnderTest.Serialize(token);\n\n            deserialized.ShouldBe(aspSerialized);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/AntiForgery/Default_policy_applies_anti_forgery_to_post_routes.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Security.AntiForgery;\nusing Shouldly;\nusing HtmlTags;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.AntiForgery\n{\n    [TestFixture]\n    public class Default_policy_applies_anti_forgery_to_post_routes\n    {\n        [Test]\n        public void the_order_of_the_configuration_action_was_wrong()\n        {\n            var registry = new FubuRegistry();\n            registry.Actions.IncludeType<TestEndpoint>();\n            registry.Features.AntiForgery.Enable(true);\n\n            using (var runtime = registry.ToRuntime())\n            {\n                var graph = runtime.Get<BehaviorGraph>();\n\n                graph.ChainFor<TestEndpoint>(x => x.post_csrf(null))\n                    .OfType<AntiForgeryNode>().Any()\n                    .ShouldBeTrue();\n            }\n        }\n    }\n\n    public class TestEndpoint\n    {\n        public HtmlTag post_csrf(PostRequest request)\n        {\n            return new HtmlTag(\"h1\", h => h.Text(\"POST HOLA\"));\n        }\n\n        public HtmlTag get_csrf(GetRequest request)\n        {\n            return new HtmlTag(\"h1\", h => h.Text(\"GET HOLA\"));\n        }\n    }\n\n    public class GetResult\n    {\n    }\n\n    public class GetRequest\n    {\n    }\n\n    public class PostRequest\n    {\n    }\n\n    public class PostResult\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/AntiForgery/MachineKeyAntiForgeryEncoderTester.cs",
    "content": "using FubuMVC.Core.Security.AntiForgery;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.AntiForgery\n{\n    [TestFixture]\n    public class MachineKeyAntiForgeryEncoderTester : InteractionContext<MachineKeyAntiForgeryEncoder>\n    {\n        [Test]\n        public void encoding_and_decoding_match()\n        {\n            var input = new byte[] {1, 2, 3, 4, 5};\n            string encoded = ClassUnderTest.Encode(input);\n            byte[] decoded = ClassUnderTest.Decode(encoded);\n\n            decoded.ShouldBe(input);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/AjaxAuthenticationRedirectTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuCore.Binding;\nusing FubuCore.Util;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Security.Authentication;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n\t[TestFixture]\n\tpublic class AjaxAuthenticationRedirectTester\n\t{\n\t\tprivate AjaxAuthenticationRedirect theRedirect;\n\t\tprivate IRequestData theRequestData;\n\n\t\t[SetUp]\n\t\tpublic void SetUp()\n\t\t{\n\t\t\ttheRequestData = new InMemoryRequestData();\n\t\t\ttheRedirect = new AjaxAuthenticationRedirect(theRequestData, null, null);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void applies_to_ajax_requests_positive()\n\t\t{\n\t\t\tvar data = new Dictionary<string, string>();\n\t\t\tdata.Add(AjaxExtensions.XRequestedWithHeader, AjaxExtensions.XmlHttpRequestValue);\n\t\t\ttheRequestData.AddValues(\"test\", new DictionaryKeyValues(data));\n\n\t\t\ttheRedirect.Applies().ShouldBeTrue();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void applies_to_ajax_requests_negative()\n\t\t{\n\t\t\ttheRedirect.Applies().ShouldBeFalse();\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/ApplyAuthenticationPolicyTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Security.Authentication;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [TestFixture]\n    public class ApplyAuthenticationPolicyTester\n    {\n        [Test]\n        public void prepends_the_authentication_node()\n        {\n            var thePolicy = new ApplyAuthenticationPolicy();\n            \n            var chain = chainFor<TestAuthenticationEndpoint<AuthenticatedModel>>(x => x.get_something(null));\n            var graph = new BehaviorGraph();\n\n            graph.AddChain(chain);\n\n            thePolicy.Configure(graph);\n\n            chain.First().ShouldBeOfType<AuthenticationFilterNode>();\n        }\n\n        [Test]\n        public void uses_the_filter()\n        {\n            var thePolicy = new ApplyAuthenticationPolicy();\n\n            var chain = chainFor<TestAuthenticationEndpoint<AuthenticatedModel>>(x => x.get_something(null));\n            var graph = new BehaviorGraph();\n            graph.AddChain(chain);\n\n            // This is the filter set up that will explicitly exclude this chain\n            graph.Settings.Get<AuthenticationSettings>()\n                .ExcludeChains = x => typeof (AuthenticatedModel) == x.InputType();\n\n            thePolicy.Configure(graph);\n\n            chain.ShouldHaveTheSameElementsAs(chain.FirstCall());\n        }\n\n        private static BehaviorChain chainFor<T>(Expression<Func<T, object>> expression)\n        {\n            var chain = new RoutedChain(\"something\");\n            chain.AddToEnd(ActionCall.For(expression));\n            return chain;\n        }\n\n        private static BehaviorChain chainFor<T>(Expression<Action<T>> expression)\n        {\n            var chain = new BehaviorChain();\n            chain.AddToEnd(ActionCall.For(expression));\n            return chain;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/AuthResultTester.cs",
    "content": "﻿using FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Security.Authentication;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [TestFixture]\n    public class AuthResultTester\n    {\n        [Test]\n        public void is_not_deterministic_if_continuation_is_null_and_success_is_false()\n        {\n            new AuthResult\n            {\n                Continuation = null, Success = false\n            }.IsDeterministic().ShouldBeFalse();\n        }\n\n        [Test]\n        public void is_deterministic_if_success_is_true()\n        {\n            new AuthResult{Continuation = null, Success = true}.IsDeterministic().ShouldBeTrue();\n            new AuthResult{Continuation = FubuContinuation.NextBehavior(), Success = true}.IsDeterministic().ShouldBeTrue();\n\n        }\n\n        [Test]\n        public void is_deterministic_if_success_is_false_but_there_is_a_continuation()\n        {\n            new AuthResult{Continuation = FubuContinuation.RedirectTo(\"somewhere\")}\n                .IsDeterministic().ShouldBeTrue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/AuthenticationBootstrapperTests.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Security.Authentication;\nusing Shouldly;\nusing NUnit.Framework;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [TestFixture]\n    public class out_of_the_box_authentication_setup\n    {\n\n        [Test]\n        public void service_registrations()\n        {\n            var registry = new FubuRegistry();\n            registry.Actions.IncludeType<NothingEndpoint>(); // Have to do this to make it an isolated test\n            registry.Features.Authentication.Enable(true);\n\n            using (var runtime = registry.ToRuntime())\n            {\n                var container = runtime.Get<IContainer>();\n\n                var theGraphWithBasicAuthentication = runtime.Behaviors;\n\n                // This login endpoint was added\n                theGraphWithBasicAuthentication.Chains.Where(x => x.InputType() == typeof(LoginRequest))\n                    .Count().ShouldBe(2);\n\n                // The logout endpoint was added\n                theGraphWithBasicAuthentication.ChainFor(typeof(LogoutRequest)).ShouldNotBeNull();\n\n                container.DefaultRegistrationIs<ILoginSuccessHandler, LoginSuccessHandler>();\n                container.DefaultRegistrationIs<ILogoutSuccessHandler, LogoutSuccessHandler>();\n            }\n\n        }\n\n\n    }\n\n    public class NothingEndpoint\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/AuthenticationFilterNodeTester.cs",
    "content": "﻿using FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Security.Authentication;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [TestFixture]\n    public class AuthenticationFilterNodeTester\n    {\n        private AuthenticationFilterNode theNode;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theNode = new AuthenticationFilterNode();\n        }\n\n        [Test]\n        public void has_to_be_authentication()\n        {\n            theNode.Category.ShouldBe(BehaviorCategory.Authentication);\n        }\n\n        public class SomeDependency { }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/AuthenticationFilterTester.cs",
    "content": "using FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authorization;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [TestFixture]\n    public class when_authenticating_and_authentication_is_disabled : InteractionContext<AuthenticationFilter>\n    {\n        private FubuContinuation theResult;\n\n        protected override void beforeEach()\n        {\n            Services.Inject(new SecuritySettings\n            {\n                AuthenticationEnabled = false\n            });\n\n            theResult = ClassUnderTest.Authenticate();\n        }\n\n        [Test]\n        public void should_continue()\n        {\n            theResult.AssertWasContinuedToNextBehavior();\n        }\n\n        [Test]\n        public void should_not_actually_do_authentication()\n        {\n            MockFor<IAuthenticationService>().AssertWasNotCalled(x => x.TryToApply());\n        }\n    }\n\n\n    [TestFixture]\n    public class when_authenticating_and_there_is_not_a_previous_authentication_token : InteractionContext<AuthenticationFilter>\n    {\n        private FubuContinuation theResult;\n        private FubuContinuation theRedirect;\n\n        protected override void beforeEach()\n        {\n            MockFor<ICurrentChain>().Stub(x => x.IsInPartial()).Return(false);\n\n            MockFor<IAuthenticationService>().Stub(x => x.TryToApply())\n                .Return(new AuthResult{Success = false});\n\n            theRedirect = FubuContinuation.RedirectTo<LoginRequest>();\n\n            MockFor<IAuthenticationRedirector>().Stub(x => x.Redirect())\n                                                .Return(theRedirect);\n\n            theResult = ClassUnderTest.Authenticate();\n        }\n\n        [Test]\n        public void should_redirect_based_on_what_IAuthenticationRedirector_decides()\n        {\n            theResult.ShouldBeTheSameAs(theRedirect);\n        }\n    }\n\n    [TestFixture]\n    public class when_authenticating_and_there_is_a_previously_authenticated_user : InteractionContext<AuthenticationFilter>\n    {\n        private FubuContinuation theResult;\n\n        protected override void beforeEach()\n        {\n            MockFor<ICurrentChain>().Stub(x => x.IsInPartial()).Return(false);\n            MockFor<IAuthenticationService>().Stub(x => x.TryToApply())\n                .Return(new AuthResult{Success = true});\n\n            theResult = ClassUnderTest.Authenticate();\n        }\n\n        [Test]\n        public void should_continue()\n        {\n\t\t\ttheResult.AssertWasContinuedToNextBehavior();\n        }\n\n    }\n\n    [TestFixture]\n    public class when_authenticating_and_the_service_returns_a_continuation_on_success : InteractionContext<AuthenticationFilter>\n    {\n        private FubuContinuation theResult;\n        private FubuContinuation theContinuation;\n\n        protected override void beforeEach()\n        {\n            theContinuation = FubuContinuation.RedirectTo(\"somewhere\");\n\n            MockFor<ICurrentChain>().Stub(x => x.IsInPartial()).Return(false);\n            MockFor<IAuthenticationService>().Stub(x => x.TryToApply())\n                .Return(new AuthResult { Success = true, Continuation = theContinuation});\n\n            theResult = ClassUnderTest.Authenticate();\n        }\n\n        [Test]\n        public void should_continue_to_what_the_service_determined()\n        {\n            theResult.ShouldBeTheSameAs(theContinuation);\n        }\n    }\n\n    [TestFixture]\n    public class when_authenticating_and_the_service_returns_a_continuation_on_failure : InteractionContext<AuthenticationFilter>\n    {\n        private FubuContinuation theResult;\n        private FubuContinuation theContinuation;\n\n        protected override void beforeEach()\n        {\n            theContinuation = FubuContinuation.RedirectTo(\"somewhere\");\n\n            MockFor<ICurrentChain>().Stub(x => x.IsInPartial()).Return(false);\n            MockFor<IAuthenticationService>().Stub(x => x.TryToApply())\n                .Return(new AuthResult { Success = false, Continuation = theContinuation });\n\n            theResult = ClassUnderTest.Authenticate();\n        }\n\n        [Test]\n        public void should_continue_to_what_the_service_determined()\n        {\n            theResult.ShouldBeTheSameAs(theContinuation);\n        }\n    }\n\n    [TestFixture]\n    public class when_authenticating_in_a_partial_always_go_to_next : InteractionContext<AuthenticationFilter>\n    {\n        private FubuContinuation theResult;\n\n        protected override void beforeEach()\n        {\n            MockFor<ICurrentChain>().Stub(x => x.IsInPartial()).Return(true);\n\n            MockFor<IAuthenticationService>().Stub(x => x.TryToApply())\n                .Return(new AuthResult{Success = false});\n\n            theResult = ClassUnderTest.Authenticate();\n        }\n\n        [Test]\n        public void should_continue()\n        {\n            theResult.AssertWasContinuedToNextBehavior();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/AuthenticationIsConfiguredTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [TestFixture]\n    public class AuthenticationIsConfiguredTester : InteractionContext<AuthenticationIsConfigured>\n    {\n        [Test]\n        public void everything_is_wonderful_if_there_is_at_least_one_strategy()\n        {\n            Services.CreateMockArrayFor<IAuthenticationStrategy>(3);\n\n            var packageLog = MockFor<IActivationLog>();\n            ClassUnderTest.Activate(packageLog, null);\n\n            packageLog.AssertWasNotCalled(x => x.MarkFailure(\"text\"), x => x.IgnoreArguments());\n        }\n\n        [Test]\n        public void logs_an_error_if_there_are_no_IAuthenticationStrategys_registered()\n        {\n            Services.CreateMockArrayFor<IAuthenticationStrategy>(0);\n\n            var packageLog = MockFor<IActivationLog>();\n\n            var activator = new AuthenticationIsConfigured(Enumerable.Empty<IAuthenticationStrategy>());\n\n            activator.Activate(packageLog, null);\n\n            packageLog.AssertWasCalled(x => x.MarkFailure(\"There are no IAuthenticationStrategy services registered.  Either register an IAuthenticationStrategy or remove FubuMVC.Authentication from your application\"));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/AuthenticationNodeTester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Security.Authentication;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [TestFixture]\n    public class AuthenticationNodeTester\n    {\n        [Test]\n        public void whines_if_you_try_to_use_something_besides_IAuthenticatinoStrategy()\n        {\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(() => {\n                new AuthenticationNode(GetType());\n            });\n        }\n\n        [Test]\n        public void build_the_object_def_successfully()\n        {\n            new AuthenticationNode(typeof (BasicAuthentication))\n                .As<IContainerModel>().ToInstance()\n                .ReturnedType.ShouldBe(typeof(BasicAuthentication));\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/AuthenticationServiceRegistryTester.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Auditing;\nusing FubuMVC.Core.Security.Authentication.Cookies;\nusing FubuMVC.Core.Security.Authentication.Tickets;\nusing NUnit.Framework;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [TestFixture]\n    public class AuthenticationServiceRegistryTester\n    {\n        [Test]\n        public void services_are_registered()\n        {\n            var registry = new FubuRegistry();\n            registry.Features.Authentication.Enable(true);\n\n            using (var runtime = registry.ToRuntime())\n            {\n                var container = runtime.Get<IContainer>();\n                container.DefaultRegistrationIs<ILockedOutRule, LockedOutRule>();\n                container.DefaultRegistrationIs<IAuthenticationService, AuthenticationService>();\n                container.ShouldHaveRegistration<IActivator, AuthenticationIsConfigured>();\n\n                container.DefaultRegistrationIs<IAuthenticationSession, TicketAuthenticationSession>();\n                container.DefaultRegistrationIs<IPrincipalContext, ThreadPrincipalContext>();\n                container.DefaultRegistrationIs<ITicketSource, CookieTicketSource>();\n                container.DefaultRegistrationIs<ILoginCookieService, LoginCookieService>();\n                container.DefaultRegistrationIs<IEncryptor, Encryptor>();\n                container.DefaultRegistrationIs<ILoginCookies, BasicFubuLoginCookies>();\n                container.DefaultRegistrationIs<IAuthenticationRedirector, AuthenticationRedirector>();\n                container.DefaultRegistrationIs<ILoginAuditor, NulloLoginAuditor>();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/AuthenticationServiceTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Auditing;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [TestFixture]\n    public class AuthenticationServiceTester : InteractionContext<AuthenticationService>\n    {\n        private IAuthenticationStrategy[] theStrategies;\n\n        protected override void beforeEach()\n        {\n            theStrategies = Services.CreateMockArrayFor<IAuthenticationStrategy>(4);\n        }\n\n        [Test]\n        public void constructor_function_throws_exception_if_there_are_no_strategies()\n        {\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(() => {\n                new AuthenticationService(new RecordingLogger(), new IAuthenticationStrategy[0], null, null);\n            });\n        }\n\n        [Test]\n        public void stops_if_any_strategy_is_deterministic()\n        {\n            var result = new AuthResult {Continuation = FubuContinuation.RedirectTo(\"somewhere\"), Success = false};\n            theStrategies[0].Stub(x => x.TryToApply()).Return(result);\n\n            ClassUnderTest.TryToApply().ShouldBeTheSameAs(result);\n        }\n\n        [Test]\n        public void try_to_apply_fails_if_all_fail()\n        {\n            theStrategies.Each(x => x.Stub(o => o.TryToApply()).Return(AuthResult.Failed()));\n\n            ClassUnderTest.TryToApply().Success.ShouldBeFalse();\n        }\n\n\n        [Test]\n        public void try_to_apply_succeeds_if_any_succeeds()\n        {\n            theStrategies[0].Stub(x => x.TryToApply()).Return(AuthResult.Failed());\n            theStrategies[1].Stub(x => x.TryToApply()).Return(AuthResult.Failed());\n            theStrategies[2].Stub(x => x.TryToApply()).Return(AuthResult.Failed());\n            theStrategies[3].Stub(x => x.TryToApply()).Return(AuthResult.Successful());\n\n            ClassUnderTest.TryToApply().Success.ShouldBeTrue();\n        }\n\n        [Test]\n        public void authenticate_fails_if_all_fail()\n        {\n            var request = new LoginRequest();\n\n            theStrategies.Each(x => x.Stub(o => o.Authenticate(request)).Return(false));\n\n            ClassUnderTest.Authenticate(request).ShouldBeFalse();\n        }\n\n\n        [Test]\n        public void authenticate_succeeds_if_any_succeeds()\n        {\n            var request = new LoginRequest();\n\n            theStrategies[3].Stub(x => x.Authenticate(request)).Return(true);\n\n            ClassUnderTest.Authenticate(request).ShouldBeTrue();\n        }\n\n\n        [Test]\n        public void should_have_applied_history()\n        {\n            var request = new LoginRequest();\n            ClassUnderTest.Authenticate(request);\n            MockFor<ILoginAuditor>().AssertWasCalled(x => x.ApplyHistory(request));\n        }\n\n        [Test]\n        public void should_audit_the_request()\n        {\n            var request = new LoginRequest();\n            ClassUnderTest.Authenticate(request);\n            MockFor<ILoginAuditor>().AssertWasCalled(x => x.Audit(request));\n        }\n\n        [Test]\n        public void executes_strategies_sent_through_parameter()\n        {\n            var request = new LoginRequest();\n            IAuthenticationStrategy[] paramStrategies = Services.CreateMockArrayFor<IAuthenticationStrategy>(1);\n            ClassUnderTest.Authenticate(request, paramStrategies);\n            paramStrategies[0].AssertWasCalled(x => x.Authenticate(request));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/AuthenticationSettingsTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.Diagnostics;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Endpoints;\nusing FubuMVC.Core.Security.Authorization;\nusing HtmlTags;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [TestFixture]\n    public class AuthenticationSettingsTester\n    {\n        [Test]\n        public void disabled_by_default()\n        {\n            new AuthenticationSettings().Enabled.ShouldBeFalse();\n        }\n\n        [Test]\n        public void do_not_exclude_diagnostics_chains_by_default()\n        {\n            var chain = DiagnosticChain.For<AboutFubuDiagnostics>(_ => _.get_about());\n\n            new AuthenticationSettings().ShouldBeExcluded(chain)\n                .ShouldBeFalse();\n\n        }\n\n        [Test]\n        public void exclude_diagnostics_when_explicitly_chosen()\n        {\n            var chain = DiagnosticChain.For<AboutFubuDiagnostics>(_ => _.get_about());\n\n            new AuthenticationSettings\n            {\n                ExcludeDiagnostics = true\n            }.ShouldBeExcluded(chain)\n                .ShouldBeTrue();\n        }\n\n\n        [Test]\n        public void membership_status_is_enabled_by_default()\n        {\n            new AuthenticationSettings().MembershipEnabled\n                .ShouldBe(MembershipStatus.Enabled);\n        }\n\n        [Test]\n        public void excludes_is_always_false_with_no_exclusions()\n        {\n            var settings = new AuthenticationSettings();\n            settings.ShouldBeExcluded(new RoutedChain(\"foo\")).ShouldBeFalse();\n        }\n\n        [Test]\n        public void automatically_excludes_the_NotAuthenticated_attribute()\n        {\n            var chain = new RoutedChain(\"foo\");\n            chain.AddToEnd(ActionCall.For<AuthenticatedEndpoints>(x => x.get_notauthenticated()));\n\n            new AuthenticationSettings().ShouldBeExcluded(chain)\n                .ShouldBeTrue();\n        }\n\n        [Test]\n        public void apply_a_custom_exclusion()\n        {\n            var chain = new RoutedChain(\"foo\");\n            chain.AddToEnd(ActionCall.For<AuthenticatedEndpoints>(x => x.get_tag()));\n\n\n            var settings = new AuthenticationSettings();\n\n            settings.ShouldBeExcluded(chain).ShouldBeFalse();\n\n            settings.ExcludeChains = c => typeof (HtmlTag) == c.ResourceType();\n\n            settings.ShouldBeExcluded(chain).ShouldBeTrue();\n        }\n\n        [Test]\n        public void apply_a_custome_exclusion_and_it_does_not_apply_to_login_page()\n        {\n            var settings = new AuthenticationSettings();\n            var chain = new RoutedChain(\"foo\");\n            chain.AddToEnd(ActionCall.For<LoginController>(x => x.get_login(null)));\n            settings.ShouldBeExcluded(chain).ShouldBeTrue();\n\n            settings.ExcludeChains = c => c.Calls.Count() == 5; // just need a fake\n\n            settings.ShouldBeExcluded(chain).ShouldBeTrue();\n        }\n\n        [Test]\n        public void exclude_by_default_if_the_input_type_is_marked_as_NotAuthenticated()\n        {\n            var chain = new RoutedChain(\"bar\");\n            chain.AddToEnd(ActionCall.For<AuthenticatedEndpoints>(x => x.post_something(null)));\n\n\n            var settings = new AuthenticationSettings();\n\n            settings.ShouldBeExcluded(chain).ShouldBeTrue();\n        }\n\n        [Test]\n        public void exclude_by_default_actions_marked_as_pass_through()\n        {\n            var chain = new RoutedChain(\"foo\");\n            chain.AddToEnd(ActionCall.For<AuthenticatedEndpoints>(x => x.get_pass_through_authentication()));\n\n\n            var settings = new AuthenticationSettings();\n\n            settings.ShouldBeExcluded(chain).ShouldBeTrue();\n        }\n    }\n\n    public class AuthenticatedEndpoints\n    {\n        [NotAuthenticated]\n        public string get_notauthenticated()\n        {\n            return \"anything\";\n        }\n\n        public string get_authenticated()\n        {\n            return \"else\";\n        }\n\n        public HtmlTag get_tag()\n        {\n            return new HtmlTag(\"div\");\n        }\n\n        [PassThroughAuthentication]\n        public string get_pass_through_authentication()\n        {\n            return \"hello, everybody\";\n        }\n\n        public void post_something(NotAuthenticatedMessage message)\n        {\n        }\n    }\n\n    [NotAuthenticated]\n    public class NotAuthenticatedMessage\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/BasicAuthenticationTester.cs",
    "content": "﻿using System.Security.Principal;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [TestFixture]\n    public class when_successfully_trying_to_apply_authentication : InteractionContext<BasicAuthentication>\n    {\n        private string theUserName;\n        private IPrincipal thePrincipal;\n        private AuthResult theResult;\n\n        protected override void beforeEach()\n        {\n            theUserName = \"a user\";\n\n            MockFor<IAuthenticationSession>().Stub(x => x.PreviouslyAuthenticatedUser())\n                                             .Return(theUserName);\n\n            thePrincipal = MockFor<IPrincipal>();\n\n\n            MockFor<IPrincipalBuilder>().Stub(x => x.Build(theUserName))\n                                        .Return(thePrincipal);\n\n            theResult = ClassUnderTest.TryToApply();\n        }\n\n        [Test]\n        public void should_mark_the_session_as_accessed_for_sliding_expirations()\n        {\n            MockFor<IAuthenticationSession>().AssertWasCalled(x => x.MarkAccessed());\n        }\n\n        [Test]\n        public void should_set_the_principal_for_the_authenticated_user()\n        {\n            MockFor<IPrincipalContext>().AssertWasCalled(x => x.Current = thePrincipal);\n        }\n\n        [Test]\n        public void was_successful()\n        {\n            theResult.Success.ShouldBeTrue();\n        }\n    }\n\n    [TestFixture]\n    public class when_unsuccessfully_trying_to_apply_authentication : InteractionContext<BasicAuthentication>\n    {\n        private AuthResult theResult;\n\n        protected override void beforeEach()\n        {\n            MockFor<IAuthenticationSession>().Stub(x => x.PreviouslyAuthenticatedUser())\n                                             .Return(null);\n\n            theResult = ClassUnderTest.TryToApply();\n        }\n\n        [Test]\n        public void should_return_false_because_no_user_is_previously_authenticated()\n        {\n            theResult.Success.ShouldBeFalse();\n        }\n    }\n\n    [TestFixture]\n    public class when_the_authentication_fails : InteractionContext<BasicAuthentication>\n    {\n        private LoginRequest theLoginRequest;\n        private bool theResult;\n\n        protected override void beforeEach()\n        {\n            theLoginRequest = new LoginRequest\n            {\n                UserName = \"frank\",\n                Url = \"/where/i/wanted/to/go\",\n                NumberOfTries = 2\n            };\n\n            MockFor<ICredentialsAuthenticator>().Stub(x => x.AuthenticateCredentials(theLoginRequest))\n                                                .Return(false);\n\n            MockFor<ILockedOutRule>().Stub(x => x.IsLockedOut(theLoginRequest)).Return(LoginStatus.NotAuthenticated);\n\n            theResult = ClassUnderTest.Authenticate(theLoginRequest);\n        }\n\n        [Test]\n        public void should_NOT_mark_the_session_as_authenticated()\n        {\n            MockFor<IAuthenticationSession>().AssertWasNotCalled(x => x.MarkAuthenticated(theLoginRequest.UserName));\n        }\n\n        [Test]\n        public void should_increment_the_number_of_retries()\n        {\n            theLoginRequest.NumberOfTries.ShouldBe(3);\n        }\n\n        [Test]\n        public void should_mark_the_login_request_as_failed()\n        {\n            theLoginRequest.Status.ShouldBe(LoginStatus.Failed);\n        }\n\n        [Test]\n        public void the_result_was_not_successful()\n        {\n            theResult.ShouldBeFalse();\n        }\n    }\n\n\n    [TestFixture]\n    public class when_the_authentication_fails_because_the_user_is_locked_out : InteractionContext<BasicAuthentication>\n    {\n        private LoginRequest theLoginRequest;\n        private bool theResult;\n\n        protected override void beforeEach()\n        {\n            theLoginRequest = new LoginRequest\n            {\n                UserName = \"frank\",\n                Url = \"/where/i/wanted/to/go\",\n                NumberOfTries = 2\n            };\n\n            MockFor<ICredentialsAuthenticator>().Stub(x => x.AuthenticateCredentials(theLoginRequest))\n                                                .Return(false);\n\n            MockFor<ILockedOutRule>().Stub(x => x.IsLockedOut(theLoginRequest)).Return(LoginStatus.LockedOut);\n\n            theResult = ClassUnderTest.Authenticate(theLoginRequest);\n        }\n\n        [Test]\n        public void should_NOT_mark_the_session_as_authenticated()\n        {\n            MockFor<IAuthenticationSession>().AssertWasNotCalled(x => x.MarkAuthenticated(theLoginRequest.UserName));\n        }\n\n        [Test]\n        public void should_not_increment_the_number_of_retries()\n        {\n            theLoginRequest.NumberOfTries.ShouldBe(2);\n        }\n\n        [Test]\n        public void should_mark_the_login_request_as_locked_out()\n        {\n            theLoginRequest.Status.ShouldBe(LoginStatus.LockedOut);\n        }\n\n        [Test]\n        public void the_result_was_not_successful()\n        {\n            theResult.ShouldBeFalse();\n        }\n    }\n\n\n    [TestFixture]\n    public class when_authentication_succeeds : InteractionContext<BasicAuthentication>\n    {\n        private LoginRequest theLoginRequest;\n        private bool theResult;\n\n        protected override void beforeEach()\n        {\n            theLoginRequest = new LoginRequest\n            {\n                UserName = \"frank\",\n                Url = \"/where/i/wanted/to/go\"\n            };\n\n            MockFor<ICredentialsAuthenticator>().Stub(x => x.AuthenticateCredentials(theLoginRequest))\n                                                .Return(true);\n\n            MockFor<ILockedOutRule>().Stub(x => x.IsLockedOut(theLoginRequest)).Return(LoginStatus.NotAuthenticated);\n\n            theResult = ClassUnderTest.Authenticate(theLoginRequest);\n        }\n\n\n        [Test]\n        public void does_not_check_for_lockout_on_success()\n        {\n            MockFor<ILockedOutRule>().AssertWasNotCalled(x => x.ProcessFailure(theLoginRequest));\n        }\n\n\n        [Test]\n        public void should_mark_the_login_request_as_successful()\n        {\n            theLoginRequest.Status.ShouldBe(LoginStatus.Succeeded);\n        }\n\n        [Test]\n        public void should_mark_the_session_as_authenticated()\n        {\n            MockFor<IAuthenticationSession>().AssertWasCalled(x => x.MarkAuthenticated(theLoginRequest.UserName));\n        }\n\n        [Test]\n        public void the_return_value_should_be_true()\n        {\n            theResult.ShouldBeTrue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Cookies/CookieSettingsTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Security.Authentication.Cookies;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authentication.Cookies\n{\n    [TestFixture]\n    public class CookieSettingsTester\n    {\n        private CookieSettings theSettings;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theSettings = new CookieSettings();\n        }\n\n        [Test]\n        public void defaults_to_the_default_cookie_name()\n        {\n            theSettings.Name.ShouldBe(CookieSettings.DefaultCookieName);\n        }\n\n        [Test]\n        public void creates_the_expiration_date()\n        {\n            theSettings.ExpirationInDays = 90;\n            \n            var theDate = DateTime.Today;\n\n            theSettings.ExpirationFor(theDate).ShouldBe(theDate.AddDays(theSettings.ExpirationInDays));\n        }\n\n        [Test]\n        public void default_expiration_is_30_days()\n        {\n            theSettings.ExpirationInDays.ShouldBe(30);\n        }\n\n        [Test]\n        public void has_a_default_path()\n        {\n            theSettings.Path.ShouldBe(\"/\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Cookies/LoginCookieServiceTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore.Dates;\nusing FubuMVC.Core.Http.Cookies;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Security.Authentication.Cookies;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.Authentication.Cookies\n{\n    [TestFixture]\n    public class LoginCookieServiceTester : InteractionContext<LoginCookieService>\n    {\n        private CookieSettings theSettings;\n        private ISystemTime theSystemTime;\n        private DateTime today;\n\n        protected override void beforeEach()\n        {\n            theSettings = new CookieSettings();\n            theSystemTime = MockRepository.GenerateStub<ISystemTime>();\n\n            today = DateTime.Today;\n            theSystemTime.Stub(x => x.UtcNow()).Return(today);\n\n            Services.Inject(theSettings);\n        }\n\n        private Cookie theCookie { get { return ClassUnderTest.CreateCookie(theSystemTime); } }\n\n        [Test]\n        public void sets_the_name_from_the_settings()\n        {\n            theCookie.States.First().Name.ShouldBe(theSettings.Name);\n        }\n\n        [Test]\n        public void sets_the_domain_if_specified_in_the_settings()\n        {\n            theSettings.Domain = \"test.com\";\n            theCookie.Domain.ShouldBe(theSettings.Domain);\n        }\n\n        [Test]\n        public void sets_the_path_if_specified_in_the_settings()\n        {\n            theSettings.Path = \"/test\";\n            theCookie.Path.ShouldBe(theSettings.Path);\n        }\n\n        [Test]\n        public void does_not_set_the_path_if_not_specified_in_the_settings()\n        {\n            theSettings.Path = null;\n            theCookie.Path.ShouldBeNull();\n        }\n\n        [Test]\n        public void sets_the_secure_flag_from_the_settings()\n        {\n            theSettings.Secure = false;\n            theCookie.Secure.ShouldBeFalse();\n\n            theSettings.Secure = true;\n            theCookie.Secure.ShouldBeTrue();\n        }\n\n        [Test]\n        public void sets_the_httponly_flag_from_the_settings()\n        {\n            theSettings.HttpOnly = false;\n            theCookie.HttpOnly.ShouldBeFalse();\n\n            theSettings.HttpOnly = true;\n            theCookie.HttpOnly.ShouldBeTrue();\n        }\n\n        [Test]\n        public void sets_the_expiration_date()\n        {\n            var actual = theCookie.Expires.Value.UtcDateTime;\n            actual.ShouldBe(theSettings.ExpirationFor(today).ToUniversalTime());\n        }\n    }\n\n    [TestFixture]\n    public class when_getting_the_current_cookie : InteractionContext<LoginCookieService>\n    {\n        private Cookie theCookie;\n\n        protected override void beforeEach()\n        {\n            theCookie = new Cookie(CookieSettings.DefaultCookieName);\n\n            MockFor<ICookies>().Stub(x => x.Get(CookieSettings.DefaultCookieName)).Return(theCookie);\n        }\n\n        [Test]\n        public void finds_the_cookie_by_name_from_the_settings()\n        {\n            ClassUnderTest.Current().ShouldBeTheSameAs(theCookie);\n        }\n    }\n\n    [TestFixture]\n    public class when_updating_the_login_cookie : InteractionContext<LoginCookieService>\n    {\n        private Cookie theCookie;\n\n        protected override void beforeEach()\n        {\n            theCookie = new Cookie(\"Test\");\n            ClassUnderTest.Update(theCookie);\n        }\n\n        [Test]\n        public void adds_the_cookie_to_the_response()\n        {\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.AppendCookie(theCookie));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/DefaultAuthenticationRedirectTester.cs",
    "content": "﻿using FubuMVC.Core.Http;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n\t[TestFixture]\n\tpublic class DefaultAuthenticationRedirectTester : InteractionContext<DefaultAuthenticationRedirect>\n\t{\n\t\t[Test]\n\t\tpublic void always_matches()\n\t\t{\n\t\t\tClassUnderTest.Applies().ShouldBeTrue();\n\t\t}\n\n\t    [Test]\n\t    public void redirects_to_the_login_page()\n\t    {\n\t        var relativeUrl = \"/something\";\n\n\t        MockFor<IHttpRequest>().Stub(x => x.RelativeUrl())\n\t                                      .Return(relativeUrl);\n\n            ClassUnderTest.Redirect()\n                .AssertWasRedirectedTo(new LoginRequest\n                                       {\n                                           Url = relativeUrl\n                                       }, \"GET\");\n\t    }\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Endpoints/LoginControllerTests.cs",
    "content": "using System;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Http.Cookies;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Auditing;\nusing FubuMVC.Core.Security.Authentication.Cookies;\nusing FubuMVC.Core.Security.Authentication.Endpoints;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.Authentication.Endpoints\n{\n    public class StubLoginCookies : ILoginCookies\n    {\n        private readonly ICookieValue _user = MockRepository.GenerateMock<ICookieValue>();\n\n        public ICookieValue User\n        {\n            get { return _user; }\n        }\n    }\n\n    [TestFixture]\n    public class when_going_to_the_login_screen_with_a_remembered_user : InteractionContext<LoginController>\n    {\n        private StubLoginCookies theCookies;\n\n        protected override void beforeEach()\n        {\n            theCookies = new StubLoginCookies();\n            Services.Inject<ILoginCookies>(theCookies);\n\n            this.SetupAuthenticationService();\n        }\n\n        [Test]\n        public void does_nothing_if_there_is_no_remembered_user()\n        {\n            var request = new LoginRequest\n            {\n                UserName = null\n            };\n\n            theCookies.User.Stub(x => x.Value).Return(null);\n\n            ClassUnderTest.get_login(request);\n\n            request.UserName.ShouldBeNull();\n            request.RememberMe.ShouldBeFalse();\n        }\n\n        [Test]\n        public void should_not_set_the_remembered_user_name_if_there_is_already_a_different_name()\n        {\n            var request = new LoginRequest\n            {\n                UserName = \"josh\"\n            };\n\n            theCookies.User.Stub(x => x.Value).Return(\"jeremy\");\n\n            ClassUnderTest.get_login(request);\n\n            request.UserName.ShouldBe(\"josh\");\n            request.RememberMe.ShouldBeFalse();\n        }\n\n        [Test]\n        public void should_set_the_remembered_user_name_on_the_login_request_if_it_is_not_already_set()\n        {\n            var request = new LoginRequest\n            {\n                UserName = null\n            };\n\n            theCookies.User.Stub(x => x.Value).Return(\"jeremy\");\n\n            ClassUnderTest.get_login(request);\n\n            request.UserName.ShouldBe(\"jeremy\");\n            request.RememberMe.ShouldBeTrue();\n        }\n\n        [Test]\n        public void UserName_should_set_itself_on_the_post_route_if_remember_me_is_true()\n        {\n            const string username = \"fakeuser\";\n            var request = new LoginRequest\n            {\n                UserName = username,\n                RememberMe = true\n            };\n\n            ClassUnderTest.post_login(request);\n\n            theCookies.User.AssertWasCalled(x => x.Value = username);\n            request.UserName.ShouldBe(username);\n        }\n\n        [Test]\n        public void UserName_should_not_set_itself_on_the_post_route_if_remember_me_is_false()\n        {\n            const string username = \"fakeuser\";\n            var request = new LoginRequest\n            {\n                UserName = username,\n                RememberMe = false\n            };\n\n            ClassUnderTest.post_login(request);\n\n            theCookies.User.AssertWasNotCalled(x => x.Value = username);\n            theCookies.User.Value.ShouldNotBe(username);\n        }\n    }\n\n    [TestFixture]\n    public class LoginControllerTester : InteractionContext<LoginController>\n    {\n        private LoginRequest theRequest;\n        private AuthenticationSettings theSettings;\n\n        protected override void beforeEach()\n        {\n            LocalSystemTime = DateTime.Today.AddHours(10);\n\n            theSettings = new AuthenticationSettings();\n            Services.Inject(theSettings);\n\n            theRequest = new LoginRequest();\n            Services.Inject<ILoginCookies>(new StubLoginCookies());\n        }\n\n\n        [Test]\n        public void show_initial_screen_not_logged_out()\n        {\n            var request = new LoginRequest{Status = LoginStatus.NotAuthenticated};\n\n            ClassUnderTest.get_login(request).ShouldBeTheSameAs(request);\n\n            request.Message.ShouldBeNull();\n        }\n\n        [Test]\n        public void show_initial_screen_when_the_user_is_locked_out()\n        {\n            var request = new LoginRequest();\n\n            MockFor<ILockedOutRule>().Stub(x => x.IsLockedOut(request)).Return(LoginStatus.LockedOut);\n\n            ClassUnderTest.get_login(request);\n\n            request.Message.ShouldBe(LoginKeys.LockedOut.ToString());\n        }\n\n\n        [Test]\n        public void uses_the_unknown_message_when_no_message_is_set()\n        {\n            theRequest.Status = LoginStatus.Failed;\n\n            MockFor<ILockedOutRule>().Stub(x => x.IsLockedOut(theRequest)).Return(LoginStatus.NotAuthenticated);\n\n\n            ClassUnderTest.get_login(theRequest);\n\n            theRequest.Message.ShouldBe(LoginKeys.Unknown.ToString());\n        }\n\n        [Test]\n        public void leave_the_existing_message_if_failed()\n        {\n            theRequest.Status = LoginStatus.Failed;\n            theRequest.Message = \"Something bad\";\n\n            ClassUnderTest.get_login(theRequest);\n\n            theRequest.Message.ShouldBe(\"Something bad\");\n        }\n    }\n\n\n    [TestFixture]\n    public class when_running_in_a_get_that_is_not_locked_out : InteractionContext<LoginController>\n    {\n        private LoginRequest theLoginRequest;\n\n        protected override void beforeEach()\n        {\n            theLoginRequest = new LoginRequest();\n\n            MockFor<IHttpRequest>().Stub(x => x.HttpMethod()).Return(\"GET\");\n            MockFor<ILockedOutRule>().Stub(x => x.IsLockedOut(theLoginRequest)).Return(LoginStatus.NotAuthenticated);\n            MockFor<IFubuRequest>().Stub(x => x.Get<LoginRequest>()).Return(theLoginRequest);\n\n            Services.Inject<ILoginCookies>(new StubLoginCookies());\n\n            ClassUnderTest.get_login(theLoginRequest);\n        }\n\n        [Test]\n        public void the_status_is_still_not_authenticated()\n        {\n            theLoginRequest.Status.ShouldBe(LoginStatus.NotAuthenticated);\n        }\n\n        [Test]\n        public void should_not_even_try_to_authenticate()\n        {\n            MockFor<IAuthenticationService>().AssertWasNotCalled(x => x.Authenticate(null), x => x.IgnoreArguments());\n        }\n\n\n    }\n\n    [TestFixture]\n    public class when_running_in_a_get_that_is_locked_out : InteractionContext<LoginController>\n    {\n        private LoginRequest theLoginRequest;\n\n        protected override void beforeEach()\n        {\n            theLoginRequest = new LoginRequest();\n\n            MockFor<IHttpRequest>().Stub(x => x.HttpMethod()).Return(\"GET\");\n            MockFor<ILockedOutRule>().Stub(x => x.IsLockedOut(theLoginRequest))\n                .Return(LoginStatus.LockedOut);\n\n            Services.Inject<ILoginCookies>(new StubLoginCookies());\n\n            MockFor<IFubuRequest>().Stub(x => x.Get<LoginRequest>()).Return(theLoginRequest);\n\n            ClassUnderTest.get_login(theLoginRequest);\n        }\n\n        [Test]\n        public void the_status_should_be_locked_out()\n        {\n            theLoginRequest.Status.ShouldBe(LoginStatus.LockedOut);\n        }\n\n        [Test]\n        public void should_not_even_try_to_authenticate()\n        {\n            MockFor<IAuthenticationService>().AssertWasNotCalled(x => x.Authenticate(null), x => x.IgnoreArguments());\n        }\n\n\n    }\n\n    [TestFixture]\n    public class when_successfully_authenticating : InteractionContext<LoginController>\n    {\n        private LoginRequest theLoginRequest;\n        private FubuContinuation theContinuation;\n        private FubuContinuation successfulContinuation;\n\n        protected override void beforeEach()\n        {\n            theLoginRequest = new LoginRequest()\n            {\n                UserName = \"frank\",\n                Url = \"/where/i/wanted/to/go\"\n            };\n            MockFor<IFubuRequest>().Stub(x => x.Get<LoginRequest>()).Return(theLoginRequest);\n\n            this.SetupAuthenticationService();\n\n            successfulContinuation = FubuContinuation.RedirectTo(\"something\");\n            MockFor<ILoginSuccessHandler>().Stub(x => x.LoggedIn(theLoginRequest)).Return(successfulContinuation);\n\n            Services.Inject<ILoginCookies>(new StubLoginCookies());\n\n            theContinuation = ClassUnderTest.post_login(theLoginRequest);\n        }\n\n        [Test]\n        public void should_have_applied_history()\n        {\n            MockFor<ILoginAuditor>().AssertWasCalled(x => x.ApplyHistory(theLoginRequest));\n        }\n\n        [Test]\n        public void should_audit_the_request()\n        {\n            MockFor<ILoginAuditor>().AssertWasCalled(x => x.Audit(theLoginRequest));\n        }\n\n        [Test]\n        public void should_not_allow_the_inner_behavior_to_execute()\n        {\n            MockFor<IActionBehavior>().AssertWasNotCalled(x => x.Invoke());\n        }\n\n        [Test]\n        public void should_use_the_continuation_from_the_success_handler()\n        {\n            theContinuation.ShouldBeTheSameAs(successfulContinuation);\n        }\n    }\n\n    [TestFixture]\n    public class when_UNsuccessfully_authenticating : InteractionContext<LoginController>\n    {\n        private LoginRequest theLoginRequest;\n        private FubuContinuation theContinuation;\n\n        protected override void beforeEach()\n        {\n            theLoginRequest = new LoginRequest()\n            {\n                UserName = \"frank\",\n                Url = \"/where/i/wanted/to/go\",\n                NumberOfTries = 2\n            };\n            \n            MockFor<IFubuRequest>().Stub(x => x.Get<LoginRequest>()).Return(theLoginRequest);\n\n            this.SetupAuthenticationService(false);\n\n            theContinuation = ClassUnderTest.post_login(theLoginRequest);\n        }\n\n        [Test]\n        public void should_have_applied_history()\n        {\n            MockFor<ILoginAuditor>().AssertWasCalled(x => x.ApplyHistory(theLoginRequest));\n        }\n\n\n        [Test]\n        public void should_audit_the_request()\n        {\n            MockFor<ILoginAuditor>().AssertWasCalled(x => x.Audit(theLoginRequest));\n        }\n\n        [Test]\n        public void should_not_signal_the_success_handler()\n        {\n            MockFor<ILoginSuccessHandler>().AssertWasNotCalled(x => x.LoggedIn(theLoginRequest));\n        }\n\n        [Test]\n        public void should_proceed_to_the_login_page()\n        {\n            theContinuation.AssertWasTransferedTo(theLoginRequest, \"GET\");\n        }\n    }\n\n    public static class AuthenticationServiceHelper {\n\n        public static void SetupAuthenticationService(this InteractionContext<LoginController> context, bool authenticates = true)\n        {\n            var strategies = context.Services.CreateMockArrayFor<IAuthenticationStrategy>(1);\n            strategies[0].Stub(x => x.Authenticate(Arg<LoginRequest>.Is.Anything)).Return(authenticates);\n            var authService = new AuthenticationService(\n                context.MockFor<ILogger>(), \n                strategies, \n                context.MockFor<ILoginAuditor>(),\n                context.MockFor<ILoginCookies>());\n            context.Services.Inject(authService as IAuthenticationService);\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Endpoints/when_logging_out.cs",
    "content": "using System.Net;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Endpoints;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.Authentication.Endpoints\n{\n\t[TestFixture]\n\tpublic class when_logging_out : InteractionContext<LogoutController>\n\t{\n\t\tprivate FubuContinuation theContinuation;\n\t    private FubuContinuation expectedContinuation;\n\n\t    protected override void beforeEach()\n\t\t{\n\t\t    expectedContinuation = FubuContinuation.EndWithStatusCode(HttpStatusCode.Accepted);\n            MockFor<ILogoutSuccessHandler>().Stub(x => x.LoggedOut()).Return(expectedContinuation);\n\n\t\t\ttheContinuation = ClassUnderTest.Logout(null);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void should_clear_the_authentication()\n\t\t{\n\t\t\tMockFor<IAuthenticationSession>().AssertWasCalled(x => x.ClearAuthentication());\n\t\t}\n\n\t\t[Test]\n\t\tpublic void should_return_the_continuation_from_the_registered_logout_handler()\n\t\t{\n\t\t    theContinuation.ShouldBeTheSameAs(expectedContinuation);\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/FubuPrincipalTester.cs",
    "content": "﻿using System.Threading;\nusing FubuMVC.Core.Security.Authentication.Membership;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [TestFixture]\n    public class FubuPrincipalTester\n    {\n        [Test]\n        public void is_in_role_will_delegate()\n        {\n            var principal = new FubuPrincipal(new UserInfo{UserName = \"somebody\"}, role => role == \"A\");\n\n            principal.IsInRole(\"A\").ShouldBeTrue();\n            principal.IsInRole(\"B\").ShouldBeFalse();\n        }\n\n        [Test]\n        public void there_is_an_identity()\n        {\n            var principal = new FubuPrincipal(new UserInfo\n            {\n                UserName = \"something\"\n            }, role => role == \"A\");\n\n            principal.Identity.Name.ShouldBe(\"something\");\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/LockedOutRuleTester.cs",
    "content": "﻿using System;\nusing FubuCore.Dates;\nusing FubuMVC.Core.Security.Authentication;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [TestFixture]\n    public class LockedOutRuleTester\n    {\n        private AuthenticationSettings theSettings;\n        private SettableClock theSystemTime;\n        private LockedOutRule theRule;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theSettings = new AuthenticationSettings();\n            theSystemTime = new SettableClock();\n\n            theRule = new LockedOutRule(theSettings, theSystemTime);\n        }\n\n        [Test]\n        public void is_not_locked_out_if_the_maximum_number_of_attempts_was_reached_but_the_locked_out_time_has_expired()\n        {\n            var request = new LoginRequest();\n            request.LockedOutUntil = DateTime.Today.ToUniversalTime();\n\n            theSystemTime.LocalNow(DateTime.Today.AddMinutes(theSettings.CooloffPeriodInMinutes + 1));\n\n            theRule.IsLockedOut(request).ShouldBe(LoginStatus.NotAuthenticated);\n        }\n\n        [Test]\n        public void is_not_locked_out_with_less_than_the_maximum_attempts()\n        {\n            var request = new LoginRequest();\n            request.NumberOfTries = theSettings.MaximumNumberOfFailedAttempts - 1;\n\n            theRule.IsLockedOut(request).ShouldBe(LoginStatus.NotAuthenticated);\n        }\n\n        [Test]\n        public void is_locked_out_if_the_maximum_number_of_attempts_has_been_reached()\n        {\n            var request = new LoginRequest();\n            request.NumberOfTries = theSettings.MaximumNumberOfFailedAttempts;\n\n            theRule.IsLockedOut(request).ShouldBe(LoginStatus.LockedOut);\n        }\n\n        [Test]\n        public void is_locked_out_if_the_locked_out_time_is_not_expired()\n        {\n            theSettings.CooloffPeriodInMinutes = 20;\n\n            var request = new LoginRequest();\n            request.NumberOfTries = theSettings.MaximumNumberOfFailedAttempts;\n            request.LockedOutUntil = DateTime.Today.AddMinutes(10).ToUniversalTime();\n\n            theSystemTime.LocalNow(DateTime.Today);\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/LoginRequestTester.cs",
    "content": "using FubuMVC.Core.Security.Authentication;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [TestFixture]\n    public class LoginRequestTester\n    {\n        [Test]\n        public void status_is_not_authenticated_by_default()\n        {\n            new LoginRequest().Status.ShouldBe(LoginStatus.NotAuthenticated);\n        }\n\n        [Test]\n        public void setting_return_url_sets_url()\n        {\n            var loginRequest = new LoginRequest();\n            var testing_url = \"the/best/url\";\n            loginRequest.ReturnUrl = testing_url;\n            loginRequest.Url.ShouldBe(testing_url);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/LoginSuccessHandlerTester.cs",
    "content": "using FubuMVC.Core.Http;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [TestFixture]\n    public class LoginSuccessHandlerTester : InteractionContext<LoginSuccessHandler>\n    {\n        private LoginRequest theLoginRequest;\n\n        protected override void beforeEach()\n        {\n            MockFor<IHttpRequest>().Stub(x => x.HttpMethod()).Return(\"POST\");\n\n            theLoginRequest = new LoginRequest()\n            {\n                UserName = \"frank\",\n                Url = \"/where/i/wanted/to/go\"\n            };\n\n            \n        }\n\n        [Test]\n        public void should_redirect_the_browser_to_the_original_url()\n        {\n            ClassUnderTest.LoggedIn(theLoginRequest).AssertWasRedirectedTo(theLoginRequest.Url);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/LogoutSuccessHandlerTester.cs",
    "content": "﻿using FubuMVC.Core.Security.Authentication;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [TestFixture]\n    public class LogoutSuccessHandlerTester\n    {\n        [Test]\n        public void should_redirect_to_the_login_page()\n        {\n            new LogoutSuccessHandler().LoggedOut()\n                .AssertWasRedirectedTo(new LoginRequest(), \"GET\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Membership/MembershipAuthenticationTester.cs",
    "content": "﻿using FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Membership;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.Authentication.Membership\n{\n    [TestFixture]\n    public class MembershipAuthenticationTester : InteractionContext<MembershipAuthentication>\n    {\n        [Test]\n        public void authentication_is_a_straight_up_delegation_positive()\n        {\n            var request = new LoginRequest\n            {\n                UserName = \"foo\",\n                Password = \"bar\"\n            };\n            MockFor<IMembershipRepository>().Stub(x => x.MatchesCredentials(request))\n                                            .Return(true);\n\n\n            ClassUnderTest.AuthenticateCredentials(request).ShouldBeTrue();\n        }\n\n        [Test]\n        public void empty_user_name_is_automatically_negative()\n        {\n            ClassUnderTest.AuthenticateCredentials(new LoginRequest\n            {\n                UserName = null,\n                Password = \"something\"\n            }).ShouldBeFalse();\n\n            ClassUnderTest.AuthenticateCredentials(new LoginRequest\n            {\n                UserName = \"something\",\n                Password = null\n            }).ShouldBeFalse();\n        }\n\n        [Test]\n        public void authentication_is_a_straight_up_delegation_negative()\n        {\n            var request = new LoginRequest\n            {\n                UserName = \"foo\",\n                Password = \"bar\"\n            };\n            MockFor<IMembershipRepository>().Stub(x => x.MatchesCredentials(request))\n                                            .Return(false);\n\n\n            ClassUnderTest.AuthenticateCredentials(request).ShouldBeFalse();\n        }\n\n        [Test]\n        public void build_principal()\n        {\n            var user = new UserInfo\n            {\n                UserName = \"ralph\"\n\n            };\n\n            var model = new AuthenticatedModel();\n            user.Set(model);\n\n            MockFor<IMembershipRepository>().Stub(x => x.FindByName(user.UserName))\n                                            .Return(user);\n\n            var principal = ClassUnderTest.Build(user.UserName);\n\n            var fubuPrincipal = principal.ShouldBeOfType<FubuPrincipal>();\n            fubuPrincipal.Identity.Name.ShouldBe(user.UserName);\n\n            fubuPrincipal.Get<AuthenticatedModel>().ShouldBeTheSameAs(model);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Membership/MembershipNodeTester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Membership;\nusing FubuMVC.Core.StructureMap;\nusing Shouldly;\nusing NUnit.Framework;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Tests.Security.Authentication.Membership\n{\n    [TestFixture]\n    public class MembershipNodeTester\n    {\n        [Test]\n        public void can_only_take_in_a_membership_type()\n        {\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(() => {\n                new MembershipNode(GetType());\n            });\n        }\n\n        [Test]\n        public void can_build_the_instance_configuration()\n        {\n            var node = MembershipNode.For<FakeMembershipRepository>();\n\n            var def = node.As<IContainerModel>().ToInstance().As<IConfiguredInstance>();\n\n            def.FindDependencyDefinitionFor<IMembershipRepository>()\n                .ReturnedType.ShouldBe(typeof(FakeMembershipRepository));\n        }\n    }\n\n    public class FakeMembershipRepository : IMembershipRepository\n    {\n        public bool MatchesCredentials(LoginRequest request)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IUserInfo FindByName(string username)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Membership/UserInfoTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.Security.Authentication.Membership;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authentication.Membership\n{\n    [TestFixture]\n    public class UserInfoTester\n    {\n        [Test]\n        public void get_and_set()\n        {\n            var foo = new Foo {Name = \"Scooby\"};\n            var bar = new Bar {Level = 33};\n\n            var user = new UserInfo();\n            user.Set(foo);\n            user.Set(bar);\n\n            user.Get<Foo>().ShouldBeTheSameAs(foo);\n            user.Get<Bar>().ShouldBeTheSameAs(bar);\n        }\n\n        [Test]\n        public void add_roles()\n        {\n            var user = new UserInfo();\n            user.Roles.Any().ShouldBeFalse();\n\n            user.Roles = new string[]{\"A\", \"B\"};\n\n            user.AddRoles(\"C\");\n\n            user.Roles.ShouldHaveTheSameElementsAs(\"A\", \"B\", \"C\");\n        }\n    }\n\n    public class Foo\n    {\n        public string Name { get; set; }\n    }\n\n    public class Bar\n    {\n        public int Level { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/NotAuthenticatedModel.cs",
    "content": "using FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authorization;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [NotAuthenticated]\n    public class NotAuthenticatedModel\n    {\n    }\n\n    public class AuthenticatedModel\n    {\n        \n    }\n\n\t[PassThroughAuthentication]\n\tpublic class PassThroughModel\n\t{\n\t\t\n\t}\n\n    [NotAuthenticated]\n    public class NotAuthenticatedEndpoint\n    {\n        public AjaxContinuation get_something()\n        {\n            return AjaxContinuation.Successful();\n        }\n    }\n\n    public class TestAuthenticationEndpoint<T>\n    {\n        public AjaxContinuation get_something(T input)\n        {\n            return AjaxContinuation.Successful();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/PassThroughAuthenticationFilterTester.cs",
    "content": "﻿using FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n\t[TestFixture]\n\tpublic class PassThroughAuthenticationFilterTester : InteractionContext<PassThroughAuthenticationFilter>\n\t{\n\t\tprivate FubuContinuation theContinuation;\n\n\t\tprotected override void beforeEach()\n\t\t{\n\t\t\tMockFor<ICurrentChain>().Stub(x => x.IsInPartial()).Return(false);\n\t\t\ttheContinuation = ClassUnderTest.Filter();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void continues_to_the_next_behavior()\n\t\t{\n\t\t\ttheContinuation.AssertWasContinuedToNextBehavior();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void applies_authentication()\n\t\t{\n\t\t\tMockFor<IAuthenticationService>().AssertWasCalled(x => x.TryToApply());\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/Certificates/BasicSamlCertificateIssuerRepositoryTester.cs",
    "content": "﻿using FubuMVC.Core.Security.Authentication.Saml2.Certificates;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2.Certificates\n{\n    [TestFixture]\n    public class BasicSamlCertificateIssuerRepositoryTester\n    {\n        [Test]\n        public void find_by_issuer()\n        {\n            var issuers = new SamlCertificate[]\n            {\n                new SamlCertificate{Issuer = \"foo:bar1\"}, \n                new SamlCertificate{Issuer = \"foo:bar2\"}, \n                new SamlCertificate{Issuer = \"foo:bar3\"} \n            };\n\n            var repository = new BasicSamlCertificateRepository(issuers);\n            repository.Find(issuers[0].Issuer).ShouldBeTheSameAs(issuers[0]);\n            repository.Find(issuers[1].Issuer).ShouldBeTheSameAs(issuers[1]);\n            repository.Find(issuers[2].Issuer).ShouldBeTheSameAs(issuers[2]);\n        }\n\n        [Test]\n        public void find_all_known()\n        {\n            var issuers = new SamlCertificate[]\n            {\n                new SamlCertificate{Issuer = \"foo:bar1\"}, \n                new SamlCertificate{Issuer = \"foo:bar2\"}, \n                new SamlCertificate{Issuer = \"foo:bar3\"} \n            };\n\n            var repository = new BasicSamlCertificateRepository(issuers);\n\n            repository.AllKnownCertificates().ShouldHaveTheSameElementsAs(issuers);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/Certificates/CertificateLoaderTester.cs",
    "content": "﻿using System;\nusing System.Security.Cryptography.X509Certificates;\nusing FubuMVC.Core.Security.Authentication.Saml2.Certificates;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2.Certificates\n{\n    [TestFixture]\n    public class CertificateLoaderTester\n    {\n        private X509Certificate2 certificate2;\n\n        [SetUp]\n        public void SetUp()\n        {\n            var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);\n            store.Open(OpenFlags.ReadWrite);\n            \n            certificate2 = ObjectMother.Certificate2();\n            store.Add(certificate2);\n        }\n\n        [Test]\n        public void can_load()\n        {\n            var loader = new CertificateLoader();\n            loader.Load(certificate2.Thumbprint)\n                  .SerialNumber.ShouldBe(certificate2.SerialNumber);\n        }\n\n        [Test]\n        public void throws_unknown_certificate()\n        {\n            Exception<UnknownCertificateException>.ShouldBeThrownBy(() => {\n                new CertificateLoader().Load(Guid.NewGuid().ToString());\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/Certificates/CertificateServiceTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.Security.Authentication.Saml2;\nusing FubuMVC.Core.Security.Authentication.Saml2.Certificates;\nusing FubuMVC.Core.Security.Authentication.Saml2.Validation;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2.Certificates    \n{\n    [TestFixture]\n    public class CertificateServiceTester : InteractionContext<CertificateService>\n    {\n        [Test]\n        public void load_certificate_when_it_can_be_found()\n        {\n            var issuer = new SamlCertificate\n            {\n                Thumbprint = Guid.NewGuid().ToString(),\n                Issuer = \"foo:bar\"\n            };\n\n            var cert = ObjectMother.Certificate2();\n\n            MockFor<ICertificateLoader>().Stub(x => x.Load(issuer.Thumbprint))\n                                         .Return(cert);\n\n            MockFor<ISamlCertificateRepository>().Stub(x => x.Find(issuer.Issuer))\n                                                       .Return(issuer);\n\n            ClassUnderTest.LoadCertificate(issuer.Issuer)\n                          .ShouldBeTheSameAs(cert);\n        }\n\n        [Test]\n        public void returns_null_if_no_cert_can_be_found_for_that_issuer()\n        {\n            var issuer = new SamlCertificate\n            {\n                Thumbprint = Guid.NewGuid().ToString(),\n                Issuer = \"foo:bar\"\n            };\n\n\n            MockFor<ISamlCertificateRepository>().Stub(x => x.Find(issuer.Issuer))\n                                                       .Return(issuer);\n\n            ClassUnderTest.LoadCertificate(issuer.Issuer)\n                .ShouldBeNull();\n\n        }\n\n        [Test]\n        public void returns_null_if_no_saml_certificate_for_that_issuer()\n        {\n            ClassUnderTest.LoadCertificate(\"foo:bar\")\n                .ShouldBeNull();\n        }\n\n        [Test]\n        public void matches_issuer_only_has_to_match_once_single_cert()\n        {\n            var cert = ObjectMother.Certificate1();\n            var response = new SamlResponse\n            {\n                Issuer = \"this:guy\",\n                Certificates = new ICertificate[] {cert}\n            };\n\n            var samlCert = ObjectMother.SamlCertificateMatching(response.Issuer, cert);\n            MockFor<ISamlCertificateRepository>().Stub(x => x.Find(response.Issuer)).Return(samlCert);\n\n            ClassUnderTest.MatchesIssuer(response)\n                .ShouldBeTrue();\n        }\n\n        [Test]\n        public void does_not_match_issuer_if_all_strategies_fail()\n        {\n            var cert = ObjectMother.Certificate1();\n            var response = new SamlResponse\n            {\n                Issuer = \"this:guy\",\n                Certificates = new ICertificate[] { cert }\n            };\n\n            // The mock SamlCertificateRepository will return a null\n\n            ClassUnderTest.MatchesIssuer(response)\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void only_has_to_match_on_one_cert()\n        {\n            var certs = new ICertificate[]\n            {\n                new InMemoryCertificate(),\n                new InMemoryCertificate(),\n                new InMemoryCertificate(),\n                new InMemoryCertificate()\n            };\n\n            var response = new SamlResponse\n            {\n                Issuer = \"this:guy\",\n                Certificates = certs\n            };\n\n            var samlCert = ObjectMother.SamlCertificateMatching(response.Issuer, certs[3]);\n            MockFor<ISamlCertificateRepository>().Stub(x => x.Find(response.Issuer))\n                                                 .Return(samlCert);\n\n\n            ClassUnderTest.MatchesIssuer(response)\n                .ShouldBeTrue();\n        }\n\n        [Test]\n        public void fails_if_no_certs_match_any_of_the_matchers()\n        {\n            var certs = new ICertificate[]\n            {\n                new InMemoryCertificate(),\n                new InMemoryCertificate(),\n                new InMemoryCertificate(),\n                new InMemoryCertificate()\n            };\n\n            var response = new SamlResponse\n            {\n                Issuer = \"this:guy\",\n                Certificates = certs\n            };\n\n            // SamlCertificateRepository is returning nulls\n\n            ClassUnderTest.MatchesIssuer(response)\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void returns_CannotMatchIssuer_if_the_cert_does_not_match_the_issuers_we_are_aware_of()\n        {\n            Services.PartialMockTheClassUnderTest();\n\n            var response = new SamlResponse();\n\n            ClassUnderTest.Expect(x => x.MatchesIssuer(response)).Return(false);\n\n            ClassUnderTest.Validate(response)\n                          .ShouldBe(SamlValidationKeys.CannotMatchIssuer);\n        }\n\n        [Test]\n        public void return_certificate_is_not_valid_if_all_of_them_fail()\n        {\n            var response = new SamlResponse();\n            var certs = Services.CreateMockArrayFor<ICertificate>(3);\n            certs.Each(x => x.Stub(o => o.IsVerified).Return(false));\n            response.Certificates = certs;\n\n            Services.PartialMockTheClassUnderTest();\n            ClassUnderTest.Expect(x => x.MatchesIssuer(response)).Return(true);\n\n            ClassUnderTest.Validate(response)\n                          .ShouldBe(SamlValidationKeys.NoValidCertificates);\n        }\n\n        [Test]\n        public void return_verified_if_any_certificate_matches_and_is_verified()\n        {\n            var response = new SamlResponse();\n            var certs = Services.CreateMockArrayFor<ICertificate>(3);\n            certs[2].Stub(x => x.IsVerified).Return(true);\n            response.Certificates = certs;\n\n            Services.PartialMockTheClassUnderTest();\n            ClassUnderTest.Expect(x => x.MatchesIssuer(response)).Return(true);\n\n            ClassUnderTest.Validate(response)\n                          .ShouldBe(SamlValidationKeys.ValidCertificate);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/Certificates/SamlCertificateTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Security.Authentication.Saml2.Certificates;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2.Certificates\n{\n    [TestFixture]\n    public class SamlCertificateTester\n    {\n        public readonly InMemoryCertificate Certificate = new InMemoryCertificate();\n\n        [Test]\n        public void matches_on_both_serial_number_and_certificate_issuer()\n        {\n            new SamlCertificate\n            {\n                SerialNumber = Certificate.SerialNumber,\n                CertificateIssuer = Certificate.Issuer\n            }.Matches(Certificate).ShouldBeTrue();\n        }\n\n        [Test]\n        public void does_not_match_serial_number_matches_certificate_issuer_does_not()\n        {\n            new SamlCertificate\n            {\n                SerialNumber = Guid.NewGuid().ToString(),\n                CertificateIssuer = Certificate.Issuer\n            }.Matches(Certificate).ShouldBeFalse();\n        }\n\n        [Test]\n        public void does_not_match_certificate_issuer()\n        {\n            new SamlCertificate\n            {\n                SerialNumber = Certificate.SerialNumber,\n                CertificateIssuer = Guid.NewGuid().ToString()\n            }.Matches(Certificate).ShouldBeFalse();\n        }\n\n        [Test]\n        public void neither_matches()\n        {\n            new SamlCertificate\n            {\n                SerialNumber = Guid.NewGuid().ToString(),\n                CertificateIssuer = Guid.NewGuid().ToString()\n            }.Matches(Certificate).ShouldBeFalse();\n        }\n\n        [Test]\n        public void formats_and_load_via_string()\n        {\n            var cert1 = new SamlCertificate\n            {\n                Issuer = \"foo:bar1\",\n                SerialNumber = \"12345\",\n                CertificateIssuer = \"DN=Foo\",\n                Thumbprint = \"ab cd ef\"\n            };\n\n            var cert2 = new SamlCertificate(cert1.ToString());\n\n            cert2.ShouldNotBeTheSameAs(cert1);\n\n            cert2.Issuer.ShouldBe(cert1.Issuer);\n            cert2.SerialNumber.ShouldBe(cert1.SerialNumber);\n            cert2.CertificateIssuer.ShouldBe(cert1.CertificateIssuer);\n            cert2.Thumbprint.ShouldBe(cert1.Thumbprint);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/Encryption/AssertionXmlDecryptorTester.cs",
    "content": "﻿using System;\nusing System.Security.Cryptography;\nusing System.Security.Cryptography.Xml;\nusing FubuMVC.Core.Security.Authentication.Saml2.Encryption;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2.Encryption\n{\n    [TestFixture]\n    public class AssertionXmlDecryptorTester\n    {\n        [Test]\n        public void triple_des()\n        {\n            AssertionXmlDecryptor.GetSymmetricBlockEncryptionAlgorithm(EncryptedXml.XmlEncTripleDESUrl)\n                                 .ShouldBeOfType<TripleDESCryptoServiceProvider>();\n        }\n\n        [Test]\n        public void des_crypto()\n        {\n            AssertionXmlDecryptor.GetSymmetricBlockEncryptionAlgorithm(EncryptedXml.XmlEncDESUrl)\n                                 .ShouldBeOfType<DESCryptoServiceProvider>();\n        }\n\n        [Test]\n        public void rijndael_128()\n        {\n            AssertionXmlDecryptor.GetSymmetricBlockEncryptionAlgorithm(EncryptedXml.XmlEncAES128Url)\n                                 .ShouldBeOfType<RijndaelManaged>()\n                                 .KeySize.ShouldBe(128);\n        }\n\n        [Test]\n        public void rijndael_192()\n        {\n            AssertionXmlDecryptor.GetSymmetricBlockEncryptionAlgorithm(EncryptedXml.XmlEncAES192Url)\n                                 .ShouldBeOfType<RijndaelManaged>()\n                                 .KeySize.ShouldBe(192);\n        }\n\n        [Test]\n        public void rijndael_256()\n        {\n            AssertionXmlDecryptor.GetSymmetricBlockEncryptionAlgorithm(EncryptedXml.XmlEncAES256Url)\n                                 .ShouldBeOfType<RijndaelManaged>()\n                                 .KeySize.ShouldBe(256);\n        }\n\n        [Test]\n        public void unrecognized_encryption()\n        {\n            Exception<Exception>.ShouldBeThrownBy(() => {\n                AssertionXmlDecryptor.GetSymmetricBlockEncryptionAlgorithm(\"Nothing valid\");\n            }).Message.ShouldContain(\"Unrecognized symmetric encryption algorithm URI 'Nothing valid'\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/Encryption/BigBangRoundTripWritingReadingAndEncryptionIntegratedTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Security.Cryptography.X509Certificates;\nusing FubuMVC.Core.Security.Authentication.Saml2;\nusing FubuMVC.Core.Security.Authentication.Saml2.Certificates;\nusing FubuMVC.Core.Security.Authentication.Saml2.Encryption;\nusing FubuMVC.Core.Security.Authentication.Saml2.Validation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2.Encryption\n{\n    [TestFixture, Explicit(\"Not sure why it's wonky on the server\")]\n    public class BigBangRoundTripWritingReadingAndEncryptionIntegratedTester\n    {\n        private X509Certificate2 cert;\n        private SamlResponse samlResponse;\n        private SamlCertificate samlCert;\n        private SamlResponse readResponse;\n\n        [TestFixtureSetUp]\n        public void SetUp()\n        {\n            samlResponse = ObjectMother.Response();\n\n            samlResponse.ShouldNotBeNull();\n            samlResponse.Status.ShouldNotBeNull();\n\n            cert = ObjectMother.Certificate2();\n            samlCert = ObjectMother.SamlCertificateMatching(samlResponse.Issuer, new X509CertificateWrapper(cert));\n\n            var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);\n            store.Open(OpenFlags.ReadWrite);\n            store.Add(cert);\n\n            var certificates = new InMemoryCertificateService(samlCert, cert);\n\n            var xml = new SamlResponseWriter(certificates, new SamlResponseXmlSigner(), new AssertionXmlEncryptor()).Write(samlResponse);\n\n            readResponse = new SamlResponseReader(certificates, new AssertionXmlDecryptor()).Read(xml);\n        }\n\n        [Test]\n        public void can_round_trip_anything()\n        {\n            readResponse.ShouldNotBeNull();\n        }\n\n        [Test]\n        public void the_response_has_a_signature()\n        {\n            readResponse.Signed.ShouldBe(SignatureStatus.Signed);\n        }\n\n        [Test]\n        public void writes_the_issuer()\n        {\n            readResponse.Issuer.ShouldBe(samlResponse.Issuer);\n        }\n\n        [Test]\n        public void writes_the_status()\n        {\n            readResponse.Status.ShouldBe(samlResponse.Status);\n        }\n\n        [Test]\n        public void writes_the_Destination()\n        {\n            readResponse.Destination.ShouldBe(samlResponse.Destination);\n        }\n\n        [Test]\n        public void writes_the_Id()\n        {\n            readResponse.Id.ShouldBe(samlResponse.Id);\n        }\n\n        [Test]\n        public void writes_the_issue_instant()\n        {\n            readResponse.IssueInstant.ShouldBe(samlResponse.IssueInstant);\n        }\n\n        [Test]\n        public void writes_the_subject_name()\n        {\n            readResponse.Subject.Name.ShouldBe(samlResponse.Subject.Name);\n        }\n\n        [Test]\n        public void writes_the_subject_format()\n        {\n            readResponse.Subject.Name.Format\n                             .ShouldBe(samlResponse.Subject.Name.Format);\n        }\n\n        [Test]\n        public void writes_the_subject_confirmation_methods()\n        {\n            readResponse.Subject.Confirmations.Select(x => x.Method)\n                .ShouldHaveTheSameElementsAs(samlResponse.Subject.Confirmations.Select(x => x.Method));\n\n        }\n\n        [Test]\n        public void writes_the_subject_confirmation_data()\n        {\n            var secondConfirmationData = readResponse.Subject.Confirmations.First().ConfirmationData.First();\n            var originalConfirmationData = samlResponse.Subject.Confirmations.First().ConfirmationData.First();\n\n            secondConfirmationData.NotOnOrAfter.ShouldBe(originalConfirmationData.NotOnOrAfter);\n            secondConfirmationData.Recipient.ShouldBe(originalConfirmationData.Recipient);\n        }\n\n        [Test]\n        public void writes_the_condition_group_times()\n        {\n            readResponse.Conditions.NotBefore\n                             .ShouldBe(samlResponse.Conditions.NotBefore);\n\n            readResponse.Conditions.NotOnOrAfter\n                             .ShouldBe(samlResponse.Conditions.NotOnOrAfter);\n        }\n\n        [Test]\n        public void writes_the_audiences()\n        {\n            var secondAudiences = readResponse.Conditions.Conditions.OfType<AudienceRestriction>().Select(x => x.Audiences);\n            var originalAudiences =\n                samlResponse.Conditions.Conditions.OfType<AudienceRestriction>().Select(x => x.Audiences);\n\n\n            secondAudiences.ShouldHaveTheSameElementsAs(originalAudiences);\n        }\n\n        [Test]\n        public void writes_the_authentication_context_basic_properties()\n        {\n            readResponse.Authentication.Instant.ShouldBe(samlResponse.Authentication.Instant);\n            readResponse.Authentication.SessionIndex.ShouldBe(samlResponse.Authentication.SessionIndex);\n            readResponse.Authentication.SessionNotOnOrAfter.ShouldBe(samlResponse.Authentication.SessionNotOnOrAfter);\n        }\n\n        [Test]\n        public void writes_the_authentication_context_declaration_reference()\n        {\n            readResponse.Authentication.DeclarationReference\n                             .ShouldBe(samlResponse.Authentication.DeclarationReference);\n        }\n\n        [Test]\n        public void writes_the_attributes()\n        {\n            readResponse.Attributes.Get(\"ClientId\")\n                             .ShouldBe(\"000012345\");\n\n            readResponse.Attributes.Get(\"CustomerId\")\n                             .ShouldBe(\"001010111\");\n        }\n\n\n    }\n\n    public class InMemoryCertificateService : ICertificateService\n    {\n        private readonly SamlCertificate _certificate;\n        private readonly X509Certificate2 _realCertificate;\n\n        public InMemoryCertificateService(SamlCertificate certificate, X509Certificate2 realCertificate)\n        {\n            _certificate = certificate;\n            _realCertificate = realCertificate;\n        }\n\n        public SamlValidationKeys Validate(SamlResponse response)\n        {\n            if (response.Issuer == _certificate.Issuer) return SamlValidationKeys.ValidCertificate;\n\n            return SamlValidationKeys.CannotMatchIssuer;\n        }\n\n        public X509Certificate2 LoadCertificate(string issuer)\n        {\n            return _certificate.Issuer.Equals(issuer, StringComparison.OrdinalIgnoreCase) ? _realCertificate : null;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/EnvironmentTestExtensionsTester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Security.Authentication.Saml2;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2\n{\n    [TestFixture]\n    public class EnvironmentTestExtensionsTester\n    {\n        private IServiceLocator theServices;\n        private IActivationLog theLog;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theServices = MockRepository.GenerateMock<IServiceLocator>();\n            theLog = new ActivationLog();\n        }\n\n        [Test]\n        public void verify_test_extensions_everything_happy()\n        {\n            var theFoo = new Foo();\n            theServices.Stub(x => x.GetInstance<IFoo>())\n                       .Return(theFoo);\n\n            theServices.VerifyRegistration<IFoo>(theLog)\n                .ShouldBeTheSameAs(theFoo);\n\n            theLog.Success.ShouldBeTrue();\n            theLog.FullTraceText().ShouldContain(\"Using {0} for {1}\".ToFormat(typeof(Foo).FullName, typeof(IFoo).FullName));\n        }\n\n        [Test]\n        public void verify_test_extensions_failure()\n        {\n            var exception = new NotImplementedException();\n            theServices.Stub(x => x.GetInstance<IFoo>()).Throw(exception);\n\n            theServices.VerifyRegistration<IFoo>(theLog).ShouldBeNull();\n\n            theLog.Success.ShouldBeFalse();\n            theLog.FullTraceText().ShouldContain(exception.ToString());\n            theLog.FullTraceText().ShouldContain(\"Could not resolve \" + typeof(IFoo).FullName);\n        }\n\n        [Test]\n        public void verify_any_happy_path()\n        {\n            var theFoo = new Foo();\n            var services = new InMemoryServiceLocator();\n            services.Add(new EnvironmentTestExtensions.Holder<IFoo>(new IFoo[]{theFoo}));\n\n            services.VerifyAnyRegistrations<IFoo>(theLog);\n            theLog.Success.ShouldBeTrue();\n        }\n\n        [Test]\n        public void verify_any_empty()\n        {\n            var services = new InMemoryServiceLocator();\n            services.Add(new EnvironmentTestExtensions.Holder<IFoo>(new IFoo[0] ));\n\n            services.VerifyAnyRegistrations<IFoo>(theLog);\n            theLog.Success.ShouldBeFalse();\n            theLog.FullTraceText().ShouldContain(\"No implementations of {0} are registered\".ToFormat(typeof(IFoo).FullName));\n        }\n\n        [Test]\n        public void verify_any_blows_up()\n        {\n            var exception = new NotImplementedException();\n            theServices.Stub(x => x.GetInstance<EnvironmentTestExtensions.Holder<IFoo>>())\n                       .Throw(exception);\n\n            theServices.VerifyAnyRegistrations<IFoo>(theLog);\n\n            theLog.Success.ShouldBeFalse();\n            theLog.FullTraceText().ShouldContain(exception.ToString());\n        }\n    }\n\n    public interface IFoo\n    {\n        \n    }\n\n    public class Foo : IFoo{}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/ObjectMother.cs",
    "content": "﻿using System;\nusing System.Security;\nusing System.Security.Cryptography.X509Certificates;\nusing FubuCore;\nusing FubuMVC.Core.Security.Authentication.Saml2;\nusing FubuMVC.Core.Security.Authentication.Saml2.Certificates;\nusing FubuMVC.Core.Security.Authentication.Saml2.Xml;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2\n{\n    public static class ObjectMother\n    {\n        public static ICertificate Certificate1()\n        {\n            var cert = X509Certificate2.CreateFromCertFile(\"cert1.cer\");\n            return new X509CertificateWrapper(new X509Certificate2(cert));\n        }\n\n        public static X509Certificate2 Certificate2()\n        {\n            var cert = new X509Certificate2(\"cert2.pfx\", new SecureString(), X509KeyStorageFlags.Exportable);\n            return new X509Certificate2(cert);\n        }\n\n        public static SamlResponse Response()\n        {\n            var xml = new FileSystem().ReadStringFromFile(\"sample.xml\");\n            return new SamlResponseXmlReader(xml).Read();\n        }\n\n        public static SamlCertificate SamlCertificateMatching(string issuer, ICertificate certificate)\n        {\n            if (certificate == null) throw new ArgumentNullException(\"certificate\");\n            return new SamlCertificate\n            {\n                CertificateIssuer = certificate.Issuer,\n                SerialNumber = certificate.SerialNumber,\n                Issuer = issuer\n            };\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/Saml2ServicesRegistry_specification.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.Navigation;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Saml2;\nusing FubuMVC.Core.Security.Authentication.Saml2.Certificates;\nusing FubuMVC.Core.Security.Authentication.Saml2.Encryption;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2\n{\n    [TestFixture]\n    public class Saml2ServicesRegistry_specification\n    {\n        private void registeredTypeIs<TService, TImplementation>()\n        {\n            var registry = new FubuRegistry();\n            registry.Features.Authentication.Configure(x =>\n            {\n                x.Enabled = true;\n                x.Saml2.Enabled = true;\n            });\n\n            registry.Services.AddService<IPrincipalBuilder>(MockRepository.GenerateMock<IPrincipalBuilder>());\n            var samlCertificateRepository = MockRepository.GenerateMock<ISamlCertificateRepository>();\n            samlCertificateRepository.Stub(x => x.AllKnownCertificates()).Return(new SamlCertificate[0]);\n            registry.Services.SetServiceIfNone<ISamlCertificateRepository>(samlCertificateRepository);\n            registry.Services.SetServiceIfNone<IPrincipalBuilder>(MockRepository.GenerateMock<IPrincipalBuilder>());\n            registry.Services.AddService<ISamlResponseHandler>(MockRepository.GenerateMock<ISamlResponseHandler>());\n\n            using (var runtime = registry.ToRuntime())\n            {\n                var container = runtime.Get<IContainer>();\n\n                container.Model.For<TService>().Default.ReturnedType.ShouldBe(typeof(TImplementation));\n            }\n\n        }\n\n        [Test]\n        public void IAssertionXmlEncryptor()\n        {\n            registeredTypeIs<IAssertionXmlEncryptor, AssertionXmlEncryptor>();\n        }\n\n        [Test]\n        public void ISamlResponseXmlSigner()\n        {\n            registeredTypeIs<ISamlResponseXmlSigner, SamlResponseXmlSigner>();\n        }\n\n\n        [Test]\n        public void ISamlDirector()\n        {\n            registeredTypeIs<ISamlDirector, SamlDirector>();\n        }\n\n        [Test]\n        public void ISamlResponseReader()\n        {\n            registeredTypeIs<ISamlResponseReader, SamlResponseReader>();\n        }\n\n        [Test]\n        public void ISamlResponseRedirector()\n        {\n            registeredTypeIs<ISamlResponseRedirector, SamlResponseRedirector>();\n        }\n\n        [Test]\n        public void ISamlResponseWriter()\n        {\n            registeredTypeIs<ISamlResponseWriter, SamlResponseWriter>();\n        }\n\n        [Test]\n        public void ICertificateService()\n        {\n            registeredTypeIs<ICertificateService, CertificateService>();\n        }\n\n        [Test]\n        public void ICertificateLoader()\n        {\n            registeredTypeIs<ICertificateLoader, CertificateLoader>();\n        }\n\n        [Test]\n        public void IAssertionXmlDecryptor()\n        {\n            registeredTypeIs<IAssertionXmlDecryptor, AssertionXmlDecryptor>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/SamlAuthenticationRegistryTester.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing FubuCore.Binding;\r\nusing FubuCore.Logging;\r\nusing FubuMVC.Core.Security.Authentication;\r\nusing FubuMVC.Core.Security.Authentication.Saml2;\r\nusing FubuMVC.Core.Security.Authentication.Saml2.Encryption;\r\nusing FubuMVC.Core.Security.Authentication.Saml2.Validation;\r\nusing FubuMVC.Tests.TestSupport;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\nusing Shouldly;\r\n\r\nnamespace FubuMVC.Tests.Security.Authentication.Saml2\r\n{\r\n    [TestFixture]\r\n    public class when_trying_to_apply_with_no_saml : InteractionContext<SamlAuthenticationStrategy>\r\n    {\r\n        private InMemoryRequestData theRequestData;\r\n        private AuthResult theResult;\r\n\r\n        protected override void beforeEach()\r\n        {\r            theRequestData = new InMemoryRequestData();\r\n            Services.Inject<IRequestData>(theRequestData);\r\n\r\n            Services.PartialMockTheClassUnderTest();\r\n            ClassUnderTest.Expect(x => x.ProcessSamlResponseXml(\"anything\"))\r\n                          .IgnoreArguments().Repeat.Never();\r\n\r\n\r\n\r\n            theResult = ClassUnderTest.TryToApply();\r\n        }\r\n\r\n        [Test]\r\n        public void does_not_try_to_process_any_saml()\r\n        {\r\n            ClassUnderTest.VerifyAllExpectations();\r\n        }\r\n        \r\n        [Test]\r\n        public void the_result_is_just_false()\r\n        {\r\n            theResult.Continuation.ShouldBeNull();\r\n            theResult.Success.ShouldBeFalse();\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_try_to_apply_with_saml_response : InteractionContext<SamlAuthenticationStrategy>\r\n    {\r\n        private AuthResult theDirectoryResult;\r\n        private InMemoryRequestData theRequestData;\r\n        private string theResponseXml;\r\n        private AuthResult theResult;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            theDirectoryResult = new AuthResult();\r\n            MockFor<ISamlDirector>().Stub(x => x.Result()).Return(theDirectoryResult);\r\n\r\n\r\n            theResponseXml = \"<Response />\";\r\n\r\n            theRequestData = new InMemoryRequestData();\r\n            theRequestData[SamlAuthenticationStrategy.SamlResponseKey] = theResponseXml;\r\n            theRequestData.Value(SamlAuthenticationStrategy.SamlResponseKey).ShouldNotBeNull();\r\n\r\n            Services.Inject<IRequestData>(theRequestData);\r\n\r\n            Services.PartialMockTheClassUnderTest();\r\n            ClassUnderTest.Expect(x => x.ProcessSamlResponseXml(theResponseXml));\r\n\r\n            theResult = ClassUnderTest.TryToApply();\r\n        }\r\n\r\n        [Test]\r\n        public void should_have_processed_the_saml_xml()\r\n        {\r\n            ClassUnderTest.VerifyAllExpectations();\r\n        }\r\n\r\n        [Test]\r\n        public void should_return_the_result_from_the_director()\r\n        {\r\n            theResult.ShouldBeTheSameAs(theDirectoryResult);\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_try_to_apply_with_saml_response_and_saml_fails : InteractionContext<SamlAuthenticationStrategy>\r\n    {\r\n        private AuthResult theDirectoryResult;\r\n        private InMemoryRequestData theRequestData;\r\n        private string theResponseXml;\r\n        private AuthResult theResult;\r\n        private NotImplementedException theException;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            theDirectoryResult = new AuthResult();\r\n            MockFor<ISamlDirector>().Stub(x => x.Result()).Return(theDirectoryResult);\r\n\r\n\r\n            theResponseXml = \"<Response />\";\r\n\r\n            theRequestData = new InMemoryRequestData();\r\n            theRequestData[SamlAuthenticationStrategy.SamlResponseKey] = theResponseXml;\r\n            theRequestData.Value(SamlAuthenticationStrategy.SamlResponseKey).ShouldNotBeNull();\r\n\r\n            Services.Inject<IRequestData>(theRequestData);\r\n\r\n            Services.PartialMockTheClassUnderTest();\r\n\r\n            theException = new NotImplementedException();\r\n\r\n            ClassUnderTest.Expect(x => x.ProcessSamlResponseXml(theResponseXml)).Throw(theException);\r\n\r\n            theResult = ClassUnderTest.TryToApply();\r\n        }\r\n\r\n        [Test]\r\n        public void should_have_processed_the_saml_xml()\r\n        {\r\n            ClassUnderTest.VerifyAllExpectations();\r\n        }\r\n\r\n        [Test]\r\n        public void should_mark_the_authentication_attempt_as_a_failure()\r\n        {\r\n            MockFor<ISamlDirector>().AssertWasCalled(x => x.FailedUser());\r\n        }\r\n\r\n        [Test]\r\n        public void logs_teh_exception()\r\n        {\r\n            MockFor<ILogger>().AssertWasCalled(x => x.Error(\"Saml Response handling failed\", theException));\r\n        }\r\n\r\n        [Test]\r\n        public void should_return_the_result_from_the_director()\r\n        {\r\n            theResult.ShouldBeTheSameAs(theDirectoryResult);\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_processing_the_saml_xml : InteractionContext<SamlAuthenticationStrategy>\r\n    {\r\n        private ISamlValidationRule[] theRules;\r\n        private SamlResponse theResponse;\r\n        private string theXml;\r\n        private ISamlResponseHandler[] theHandlers;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            theRules = Services.CreateMockArrayFor<ISamlValidationRule>(5);\r\n\r\n            theResponse = new SamlResponse();\r\n            theXml = \"<Response />\";\r\n\r\n            MockFor<ISamlResponseReader>().Stub(x => x.Read(theXml)).Return(theResponse);\r\n\r\n            theHandlers = Services.CreateMockArrayFor<ISamlResponseHandler>(3);\r\n            theHandlers[2].Stub(x => x.CanHandle(theResponse)).Return(true);\r\n\r\n            ClassUnderTest.ProcessSamlResponseXml(theXml);\r\n        }\r\n\r\n        [Test]\r\n        public void should_run_all_the_validation_rules()\r\n        {\r\n            theRules.Each(rule => {\r\n                rule.AssertWasCalled(x => x.Validate(theResponse));\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void uses_the_first_saml_response_handler_that_matches()\r\n        {\r\n            var theDirector = MockFor<ISamlDirector>();\r\n\r\n            // The [2] handler matches via its CanHandle method, the others don't\r\n            theHandlers[2].AssertWasCalled(x => x.Handle(theDirector, theResponse));\r\n\r\n            theHandlers[0].AssertWasNotCalled(x => x.Handle(theDirector, theResponse));\r\n            theHandlers[1].AssertWasNotCalled(x => x.Handle(theDirector, theResponse));\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class when_processing_the_saml_xml_and_no_handler_matches : InteractionContext<SamlAuthenticationStrategy>\r\n    {\r\n        private ISamlValidationRule[] theRules;\r\n        private SamlResponse theResponse;\r\n        private string theXml;\r\n        private ISamlResponseHandler[] theHandlers;\r\n\r\n        protected override void beforeEach()\r\n        {\r\n            theRules = Services.CreateMockArrayFor<ISamlValidationRule>(5);\r\n\r\n            theResponse = new SamlResponse();\r\n            theXml = \"<Response />\";\r\n\r\n            MockFor<ISamlResponseReader>().Stub(x => x.Read(theXml)).Return(theResponse);\r\n\r\n            theHandlers = Services.CreateMockArrayFor<ISamlResponseHandler>(3);\r\n\r\n            ClassUnderTest.ProcessSamlResponseXml(theXml);\r\n        }\r\n\r\n        [Test]\r\n        public void should_run_all_the_validation_rules()\r\n        {\r\n            theRules.Each(rule =>\r\n            {\r\n                rule.AssertWasCalled(x => x.Validate(theResponse));\r\n            });\r\n        }\r\n\r\n        [Test]\r\n        public void fails_gracefully()\r\n        {\r\n            MockFor<ISamlDirector>().AssertWasCalled(x => x.FailedUser());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/SamlDirectorTester.cs",
    "content": "﻿using FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Membership;\nusing FubuMVC.Core.Security.Authentication.Saml2;\nusing FubuMVC.Core.Security.Authentication.Saml2.Validation;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2\n{\n    [TestFixture]\n    public class SamlDirectorTester : InteractionContext<SamlDirector>\n    {\n        [Test]\n        public void default_result()\n        {\n            var result = ClassUnderTest.Result();\n            result.Success.ShouldBeFalse();\n            result.Continuation.AssertWasRedirectedTo(new LoginRequest\n            {\n                Message = SamlValidationKeys.UnableToValidationSamlResponse.ToString()\n            },\"GET\");\n        }\n\n        [Test]\n        public void failed_with_no_continuation()\n        {\n            ClassUnderTest.FailedUser();\n\n            MockFor<IAuthenticationSession>().AssertWasNotCalled(x => x.MarkAuthenticated(\"anything\"), x => x.IgnoreArguments());\n\n            var result = ClassUnderTest.Result();\n            result.Success.ShouldBeFalse();\n            result.Continuation.AssertWasRedirectedTo(new LoginRequest\n            {\n                Message = SamlValidationKeys.UnableToValidationSamlResponse.ToString()\n            },\"GET\");\n        }\n\n        [Test]\n        public void failed_with_a_continuation()\n        {\n            var continuation = FubuContinuation.RedirectTo(\"something\");\n\n            ClassUnderTest.FailedUser(continuation);\n\n            var result = ClassUnderTest.Result();\n            result.Success.ShouldBeFalse();\n\n            result.Continuation.ShouldBeTheSameAs(continuation);\n        }\n\n\n    }\n\n    [TestFixture]\n    public class when_director_succceeds_with_no_continuation : InteractionContext<SamlDirector>\n    {\n        private const string theUserName = \"somebody\";\n        private FubuPrincipal principal;\n        private AuthResult theResult;\n\n        protected override void beforeEach()\n        {\n            principal = new FubuPrincipal(new UserInfo { UserName = theUserName });\n            MockFor<IPrincipalBuilder>().Stub(x => x.Build(theUserName)).Return(principal);\n\n            ClassUnderTest.SuccessfulUser(theUserName);\n\n            theResult = ClassUnderTest.Result();\n        }\n\n        [Test]\n        public void should_mark_the_session_as_authenticated()\n        {\n            MockFor<IAuthenticationSession>().AssertWasCalled(x => x.MarkAuthenticated(theUserName));\n        }\n\n        [Test]\n        public void should_have_set_the_principal()\n        {\n            MockFor<IPrincipalContext>().AssertWasCalled(x => x.Current = principal);\n        }\n\n        [Test]\n        public void the_result_is_successful()\n        {\n            theResult.Success.ShouldBeTrue();\n        }\n\n        [Test]\n        public void the_continuation_is_to_just_continue()\n        {\n            theResult.Continuation.AssertWasContinuedToNextBehavior();\n        }\n    }\n\n    [TestFixture]\n    public class when_director_succceeds_with_an_explicit_continuation : InteractionContext<SamlDirector>\n    {\n        private const string theUserName = \"somebody\";\n        private FubuPrincipal principal;\n        private AuthResult theResult;\n        private FubuContinuation theContinuation;\n\n        protected override void beforeEach()\n        {\n            principal = new FubuPrincipal(new UserInfo { UserName = theUserName });\n            MockFor<IPrincipalBuilder>().Stub(x => x.Build(theUserName)).Return(principal);\n\n            theContinuation = FubuContinuation.RedirectTo(\"something\");\n\n            ClassUnderTest.SuccessfulUser(theUserName, theContinuation);\n\n            theResult = ClassUnderTest.Result();\n        }\n\n        [Test]\n        public void should_mark_the_session_as_authenticated()\n        {\n            MockFor<IAuthenticationSession>().AssertWasCalled(x => x.MarkAuthenticated(theUserName));\n        }\n\n        [Test]\n        public void should_have_set_the_principal()\n        {\n            MockFor<IPrincipalContext>().AssertWasCalled(x => x.Current = principal);\n        }\n\n        [Test]\n        public void the_result_is_successful()\n        {\n            theResult.Success.ShouldBeTrue();\n        }\n\n        [Test]\n        public void uses_the_explicit_continuation()\n        {\n            theResult.Continuation.ShouldBeTheSameAs(theContinuation);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/SamlErrorTester.cs",
    "content": "﻿using FubuMVC.Core.Security.Authentication.Saml2;\nusing FubuMVC.Core.Security.Authentication.Saml2.Validation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2\n{\n    [TestFixture]\n    public class SamlErrorTester\n    {\n        [Test]\n        public void build_by_string_token()\n        {\n            var error = new SamlError(SamlValidationKeys.TimeFrameDoesNotMatch);\n            error.Key.ShouldBe(\"TimeFrameDoesNotMatch\");\n            error.Message.ShouldBe(SamlValidationKeys.TimeFrameDoesNotMatch.ToString());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/SamlNameTester.cs",
    "content": "﻿using FubuMVC.Core.Security.Authentication.Saml2;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2\n{\n    [TestFixture]\n    public class SamlNameTester\n    {\n        [Test]\n        public void NameID_by_default()\n        {\n            new SamlName().Type.ShouldBe(SamlNameType.NameID);\n        }\n\n        [Test]\n        public void format_is_unspecified_by_default()\n        {\n            new SamlName().Format.ShouldBe(NameFormat.Unspecified);\n        }\n\n        [Test]\n        public void name_format_can_find_itself()\n        {\n            NameFormat.Get(NameFormat.Persistent.Uri.ToString())\n                      .ShouldBeTheSameAs(NameFormat.Persistent);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/SamlResponseSettingsTester.cs",
    "content": "﻿using FubuCore.Reflection;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Saml2;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2\n{\n    [TestFixture]\n    public class SamlResponseSettingsTester\n    {\n        [Test]\n        public void require_certificate_is_true_by_default()\n        {\n            new AuthenticationSettings().Saml2.RequireCertificate.ShouldBeTrue();\n        }\n\n        [Test]\n        public void require_signature_is_true_by_default()\n        {\n            new AuthenticationSettings().Saml2.RequireCertificate.ShouldBeTrue();\n        }\n\n        [Test]\n        public void enforce_response_time_span_is_true_y_default()\n        {\n            new AuthenticationSettings().Saml2.EnforceConditionalTimeSpan.ShouldBeTrue();\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/SamlResponseTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuCore;\nusing FubuMVC.Core.Security.Authentication.Saml2;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2\n{\n    [TestFixture]\n    public class SamlResponseTester\n    {\n        [Test]\n        public void add_a_single_key_attribute()\n        {\n            var response = new SamlResponse();\n            response.AddAttribute(\"a\", \"1\");\n\n            response.Attributes.Get(\"a\").ShouldBe(\"1\");\n        }\n\n        [Test]\n        public void add_multiple_values_for_the_same_key()\n        {\n            var response = new SamlResponse();\n\n            response.AddAttribute(\"a\", \"1\");\n            response.AddAttribute(\"a\", \"2\");\n            response.AddAttribute(\"a\", \"3\");\n\n            response.Attributes.Get(\"a\").As<IEnumerable<string>>()\n                .ShouldHaveTheSameElementsAs(\"1\", \"2\", \"3\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/SamlResponseValidationRulesRegistrationTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Saml2;\nusing FubuMVC.Core.Security.Authentication.Saml2.Certificates;\nusing FubuMVC.Core.Security.Authentication.Saml2.Validation;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2\n{\n    [TestFixture]\n    public class SamlResponseValidationRulesRegistrationTester\n    {\n        [Test]\n        public void require_signatures_is_true()\n        {\n            using (var runtime = FubuRuntime.Basic(_ =>\n            {\n                enableSaml2(_);\n                _.Features.Authentication.Configure(x =>\n                {\n                    x.Saml2.RequireSignature = true;\n                });\n\n            }))\n            {\n                runtime.Get<IContainer>().Model.For<ISamlValidationRule>()\n                    .Instances\n                    .Select(x => x.ReturnedType)\n                    .ShouldContain(typeof(SignatureIsRequired));\n            }\n        }\n\n        [Test]\n        public void require_signatures_is_false()\n        {\n            using (var runtime = FubuRuntime.Basic(_ =>\n            {\n                enableSaml2(_);\n                _.Features.Authentication.Configure(x =>\n                {\n                    x.Saml2.RequireSignature = false;\n                });\n            }))\n            {\n                runtime.Get<IContainer>().Model.For<ISamlValidationRule>()\n                    .Instances\n                    .Select(x => x.ReturnedType)\n                    .ShouldNotContain(typeof(SignatureIsRequired));\n            }\n\n        }\n\n        [Test]\n        public void require_certificate_is_true()\n        {\n            using (var runtime = FubuRuntime.Basic(_ =>\n            {\n                enableSaml2(_);\n                _.Features.Authentication.Configure(x =>\n                {\n                    x.Saml2.RequireCertificate = true;\n                });\n\n            }))\n            {\n                runtime.Get<IContainer>().Model.For<ISamlValidationRule>()\n                    .Instances\n                    .Select(x => x.ReturnedType)\n                    .ShouldContain(typeof(CertificateValidation));\n            }\n        }\n\n        [Test]\n        public void require_certificate_is_false()\n        {\n            using (var runtime = FubuRuntime.Basic(_ =>\n            {\n                enableSaml2(_);\n                _.Features.Authentication.Configure(x =>\n                {\n                    x.Saml2.RequireCertificate = false;\n                });\n            }))\n            {\n                runtime.Get<IContainer>().Model.For<ISamlValidationRule>()\n                    .Instances\n                    .Select(x => x.ReturnedType)\n                    .ShouldNotContain(typeof(CertificateValidation));\n            }\n\n        }\n\n        [Test]\n        public void enforce_response_timespan_is_true()\n        {\n            using (var runtime = FubuRuntime.Basic(_ =>\n            {\n                enableSaml2(_);\n\n                _.Features.Authentication.Configure(x =>\n                {\n                    x.Saml2.EnforceConditionalTimeSpan = true;\n                });\n            }))\n            {\n                runtime.Get<IContainer>().Model.For<ISamlValidationRule>()\n                    .Instances\n                    .Select(x => x.ReturnedType)\n                    .ShouldContain(typeof(ConditionTimeFrame));\n            }\n        }\n\n        private static void enableSaml2(FubuRegistry _)\n        {\n            _.Features.Authentication.Configure(x =>\n            {\n                x.Enabled = true;\n                x.Saml2.Enabled = true;\n            });\n\n            var samlCertificateRepository = MockRepository.GenerateMock<ISamlCertificateRepository>();\n            samlCertificateRepository.Stub(x => x.AllKnownCertificates()).Return(new SamlCertificate[0]);\n\n            _.Services.SetServiceIfNone<IPrincipalBuilder>(MockRepository.GenerateMock<IPrincipalBuilder>());\n            _.Services.AddService<ISamlResponseHandler>(MockRepository.GenerateMock<ISamlResponseHandler>());\n            _.Services.SetServiceIfNone<ISamlCertificateRepository>(samlCertificateRepository);\n        }\n\n        [Test]\n        public void require_conditional_timespan_is_false()\n        {\n            using (var runtime = FubuRuntime.Basic(_ =>\n            {\n                enableSaml2(_);\n                _.Features.Authentication.Configure(x =>\n                {\n                    x.Saml2.EnforceConditionalTimeSpan = false;\n                });\n            }))\n            {\n                runtime.Get<IContainer>().Model.For<ISamlValidationRule>()\n                    .Instances\n                    .Select(x => x.ReturnedType)\n                    .ShouldNotContain(typeof(ConditionTimeFrame));\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/SamlStatusTester.cs",
    "content": "﻿using FubuMVC.Core.Security.Authentication.Saml2;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2\n{\n    [TestFixture]\n    public class SamlStatusTester\n    {\n        [Test]\n        public void can_read_saml_status()\n        {\n            SamlStatus.Get(SamlStatus.Success.Uri.ToString()).ShouldBeTheSameAs(SamlStatus.Success);\n            SamlStatus.Get(SamlStatus.RequesterError.Uri.ToString()).ShouldBeTheSameAs(SamlStatus.RequesterError);\n            SamlStatus.Get(SamlStatus.ResponderError.Uri.ToString()).ShouldBeTheSameAs(SamlStatus.ResponderError);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/Validation/AudienceValidationRuleTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.Security.Authentication.Saml2;\nusing FubuMVC.Core.Security.Authentication.Saml2.Validation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2.Validation\n{\n    [TestFixture]\n    public class AudienceValidationRuleTester\n    {\n        private SamlResponse response;\n        private AudienceValidationRule theRule;\n\n        [SetUp]\n        public void SetUp()\n        {\n            response = new SamlResponse();\n\n            theRule = new AudienceValidationRule(\"foo:bar\", \"bar:foo\");\n        }\n\n        [Test]\n        public void no_conditions_so_it_passes()\n        {\n            theRule.Validate(response);\n            response.Errors.Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void one_matching_audience_so_no_errors()\n        {\n            response.AddAudienceRestriction(theRule.Audiences.ElementAt(0));\n            response.AddAudienceRestriction(\"something:random\");\n\n            theRule.Validate(response);\n            response.Errors.Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void has_audiences_that_do_not_match()\n        {\n            response.AddAudienceRestriction(\"something:random\");\n\n            theRule.Validate(response);\n            response.Errors.Single().ShouldBe(new SamlError(SamlValidationKeys.AudiencesDoNotMatch));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/Validation/CertificateValidationTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.Security.Authentication.Saml2;\nusing FubuMVC.Core.Security.Authentication.Saml2.Certificates;\nusing FubuMVC.Core.Security.Authentication.Saml2.Validation;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2.Validation\n{\n    [TestFixture]\n    public class CertificateValidationTester : InteractionContext<CertificateValidation>\n    {\n        private SamlResponse response;\n\n        protected override void beforeEach()\n        {\n            response = new SamlResponse {Certificates = new ICertificate[] {ObjectMother.Certificate1()}};\n        }\n\n        private SamlValidationKeys theCertificateValidationReturns\n        {\n            set\n            {\n                MockFor<ICertificateService>().Stub(x => x.Validate(response))\n                                              .Return(value);\n            }\n        }\n\n        [Test]\n        public void logs_no_error_if_the_certificate_is_valid()\n        {\n\n            theCertificateValidationReturns = SamlValidationKeys.ValidCertificate;\n\n            ClassUnderTest.Validate(response);\n\n            response.Errors.Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void logs_error_if_certificate_does_not_match_issuer()\n        {\n            theCertificateValidationReturns = SamlValidationKeys.CannotMatchIssuer;\n            ClassUnderTest.Validate(response);\n\n            response.Errors.Single().ShouldBe(new SamlError(SamlValidationKeys.CannotMatchIssuer));\n        }\n\n        [Test]\n        public void logs_error_if_certificate_is_invalid()\n        {\n            theCertificateValidationReturns = SamlValidationKeys.NoValidCertificates;\n            ClassUnderTest.Validate(response);\n\n            response.Errors.Single().ShouldBe(new SamlError(SamlValidationKeys.NoValidCertificates));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/Validation/ConditionTimeFrameTester.cs",
    "content": "﻿using System.Linq;\nusing FubuCore;\nusing FubuCore.Dates;\nusing FubuMVC.Core.Security.Authentication.Saml2;\nusing FubuMVC.Core.Security.Authentication.Saml2.Validation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2.Validation\n{\n    [TestFixture]\n    public class ConditionTimeFrameTester\n    {\n        private SystemTime systemTime   ;\n        private ConditionTimeFrame theCondition;\n        // INVALID IS\n        // if (now < notBefore || now >= notOnOrAfter)\n\n        [SetUp]\n        public void SetUp()\n        {\n            systemTime = SystemTime.AtLocalTime(\"0800\".ToTime());\n            theCondition = new ConditionTimeFrame(systemTime);\n        }\n\n        [Test]\n        public void valid()\n        {\n            var response = new SamlResponse\n            {\n                Conditions = new ConditionGroup\n                {\n                    NotBefore = systemTime.UtcNow().AddMinutes(-5),\n                    NotOnOrAfter = systemTime.UtcNow().AddMinutes(5)\n                }\n            };\n\n            theCondition.Validate(response);\n            response.Errors.Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void invalid_because_it_is_before_the_not_before()\n        {\n            var response = new SamlResponse\n            {\n                Conditions = new ConditionGroup\n                {\n                    NotBefore = systemTime.UtcNow().AddMinutes(1),\n                    NotOnOrAfter = systemTime.UtcNow().AddMinutes(5)\n                }\n            };\n\n            theCondition.Validate(response);\n            response.Errors.Single().ShouldBe(new SamlError(SamlValidationKeys.TimeFrameDoesNotMatch));\n        }\n\n        [Test]\n        public void invalid_because_it_is_equal_to_the_after_time()\n        {\n            var response = new SamlResponse\n            {\n                Conditions = new ConditionGroup\n                {\n                    NotBefore = systemTime.UtcNow().AddMinutes(-1),\n                    NotOnOrAfter = systemTime.UtcNow()\n                }\n            };\n\n            new ConditionTimeFrame(systemTime).Validate(response);\n            response.Errors.Single().ShouldBe(new SamlError(SamlValidationKeys.TimeFrameDoesNotMatch));\n        }\n\n        [Test]\n        public void invalid_because_it_is_after_to_the_after_time()\n        {\n            var response = new SamlResponse\n            {\n                Conditions = new ConditionGroup\n                {\n                    NotBefore = systemTime.UtcNow().AddMinutes(-5),\n                    NotOnOrAfter = systemTime.UtcNow().AddMinutes(-1)\n                }\n            };\n\n            new ConditionTimeFrame(systemTime).Validate(response);\n            response.Errors.Single().ShouldBe(new SamlError(SamlValidationKeys.TimeFrameDoesNotMatch));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/Validation/SignatureIsRequiredTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.Security.Authentication.Saml2;\nusing FubuMVC.Core.Security.Authentication.Saml2.Validation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2.Validation\n{\n    [TestFixture]\n    public class SignatureIsRequiredTester\n    {\n        [Test]\n        public void no_errors_if_response_is_signed()\n        {\n            var response = new SamlResponse\n            {\n                Signed = SignatureStatus.Signed\n            };\n\n            new SignatureIsRequired().Validate(response);\n\n            response.Errors.Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void error_if_signature_is_missing()\n        {\n            var response = new SamlResponse\n            {\n                Signed = SignatureStatus.NotSigned\n            };\n\n            new SignatureIsRequired().Validate(response);\n\n            response.Errors.Single()\n                    .ShouldBe(new SamlError(SignatureStatus.NotSigned));\n        }\n\n        [Test]\n        public void error_if_signature_is_invalid()\n        {\n            var response = new SamlResponse\n            {\n                Signed = SignatureStatus.InvalidSignature\n            };\n\n            new SignatureIsRequired().Validate(response);\n\n            response.Errors.Single()\n                    .ShouldBe(new SamlError(SignatureStatus.InvalidSignature));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/Xml/SamlResponseXmlReaderTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Xml;\nusing FubuCore;\nusing FubuMVC.Core.Security.Authentication.Saml2;\nusing FubuMVC.Core.Security.Authentication.Saml2.Xml;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2.Xml\n{\n    [TestFixture]\n    public class SamlResponseXmlReaderTester\n    {\n        private SamlResponseXmlReader theReader;\n        private SamlResponse theResponse;\n\n        [SetUp]\n        public void SetUp()\n        {\n            var xml = new FileSystem().ReadStringFromFile(\"sample.xml\");\n            theReader = new SamlResponseXmlReader(xml);\n\n            theResponse = theReader.Read();\n        }\n\n        [Test]\n        public void reads_the_destination()\n        {\n            theResponse.Destination.ShouldBe(\"https://qa2.online.com/qa2/sso/saml\".ToUri());\n        }\n\n        [Test]\n        public void reads_the_id()\n        {\n            theResponse.Id.ShouldBe(\"A5092bc640a235880200023f80002aa33\");\n        }\n\n        [Test]\n        public void reads_the_issue_instant()\n        {\n            theResponse.IssueInstant.ShouldBe(XmlConvert.ToDateTimeOffset(\"2012-11-01T18:16:04Z\"));\n        }\n\n        [Test]\n        public void read_the_issuer()\n        {\n            theResponse.Issuer.ShouldBe(new Uri(\"urn:idp:fakecompany:nbpartgenoutbds20:uat\").ToString());\n        }\n\n        [Test]\n        public void read_the_status_of_the_response_if_it_is_success()\n        {\n            theResponse.Status.ShouldBe(SamlStatus.Success);\n        }\n\n        [Test]\n        public void can_read_the_condition_group_time_constraints()\n        {\n            theResponse.Conditions.NotBefore.ShouldBe(XmlConvert.ToDateTimeOffset(\"2012-11-01T18:13:04Z\"));\n            theResponse.Conditions.NotOnOrAfter.ShouldBe(XmlConvert.ToDateTimeOffset(\"2012-11-01T18:19:04Z\"));\n        }\n\n        [Test]\n        public void can_read_audience_restriction()\n        {\n            var audienceRestricution = theResponse.Conditions.Conditions\n                .Single()\n                .ShouldBeOfType<AudienceRestriction>();\n\n            audienceRestricution.Audiences.Single()\n                                .ShouldBe(new Uri(\"https://qa2.online.com/qa2/sso/saml\").ToString());\n        }\n\n        [Test]\n        public void can_read_the_subject_name()\n        {\n            theResponse.Subject.Name.ShouldBe(new SamlName\n            {\n                Type = SamlNameType.NameID,\n                Value = \"aa50045c6d0a233e7c20003d7d0000aa33\",\n                Format = NameFormat.Persistent\n            });\n        }\n\n        [Test]\n        public void can_read_the_subject_confirmation_method()\n        {\n            theResponse.Subject.Confirmations.Single()\n                       .Method.ShouldBe(\"urn:oasis:names:tc:SAML:2.0:cm:bearer\".ToUri());\n        }\n\n        [Test]\n        public void subject_confirmation_data()\n        {\n            var data = theResponse.Subject.Confirmations.Single()\n                                  .ConfirmationData.Single();\n\n            data.NotOnOrAfter.ShouldBe(XmlConvert.ToDateTimeOffset(\"2012-11-01T18:19:04Z\"));\n            data.Recipient.ShouldBe(\"https://qa2.online.com/qa2/sso/saml\".ToUri());\n\n        }\n\n        [Test]\n        public void has_the_attributes()\n        {\n            theResponse.Attributes.Get(\"ClientId\").ShouldBe(\"000012345\");\n            theResponse.Attributes.Get(\"CustomerId\").ShouldBe(\"001010111\");\n        }\n\n        [Test]\n        public void can_read_the_certificates()\n        {\n            theResponse.Certificates.Any().ShouldBeTrue();\n        }\n\n        [Test]\n        public void reads_the_basic_authentication_properties()\n        {\n            theResponse.Authentication.Instant.ShouldBe(XmlConvert.ToDateTimeOffset(\"2012-11-01T18:15:47Z\"));\n            theResponse.Authentication.SessionIndex.ShouldBe(\"21171a497ffc16b87b8179afd5f9b69fc3f8cd8c\");\n            theResponse.Authentication.SessionNotOnOrAfter.ShouldBe(XmlConvert.ToDateTimeOffset(\"2012-11-02T04:15:47Z\"));\n\n        }\n\n        [Test]\n        public void reads_the_authentication_context()\n        {\n            theResponse.Authentication.DeclarationReference\n                       .ShouldBe(\"urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport\".ToUri());\n        }\n        \n        [Test]\n        public void reads_the_authentication_class_context()\n        {\n            theResponse.Authentication.ClassReference\n                       .ShouldBe(\"urn:oasis:names:tc:SAML:2.0:ac:classes:Password\".ToUri());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/Xml/SamlResponseXmlWriterTester.cs",
    "content": "﻿using System.Diagnostics;\nusing System.Linq;\nusing System.Xml;\nusing FubuCore;\nusing FubuMVC.Core.Security.Authentication.Saml2;\nusing FubuMVC.Core.Security.Authentication.Saml2.Xml;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2.Xml \n{\n    [TestFixture]\n    public class SamlResponseXmlWriterTester\n    {\n        private SamlResponse theOriginalResponse;\n        private XmlDocument document;\n        private SamlResponse theSecondResponse;\n\n        // TODO -- try to verify this against the real spec XSD\n\n        [TestFixtureSetUp]\n        public void SetUp()\n        {\n            var xml = new FileSystem().ReadStringFromFile(\"sample.xml\");\n            theOriginalResponse = new SamlResponseXmlReader(xml).Read();\n\n            document = new SamlResponseXmlWriter(theOriginalResponse).Write();\n            \n            Debug.WriteLine(document.OuterXml);\n            \n            theSecondResponse = new SamlResponseXmlReader(document.OuterXml).Read();\n        }\n\n        [Test]\n        public void writes_the_assertion_element()\n        {\n            var assertion = document.DocumentElement.FindChild(\"Assertion\");\n            assertion.ShouldNotBeNull();\n            assertion.GetAttribute(\"ID\").ShouldBe(\"SamlAssertion-A5092bc640a235880200023f80002aa33\");\n            assertion.GetAttribute(\"IssueInstant\").ShouldBe(\"2012-11-01T18:16:04Z\");\n\n            var issuer = assertion.FirstChild;\n            issuer.Name.ShouldBe(\"saml2:Issuer\");\n            issuer.InnerText.ShouldBe(\"urn:idp:fakecompany:nbpartgenoutbds20:uat\");\n        }\n\n        [Test]\n        public void version_should_be_2_point_0()\n        {\n            document.DocumentElement.GetAttribute(\"Version\").ShouldBe(\"2.0\");\n        }\n\n        [Test]\n        public void writes_the_issuer()\n        {\n            theSecondResponse.Issuer.ShouldBe(theOriginalResponse.Issuer);\n        }\n\n        [Test]\n        public void writes_the_status()\n        {\n            theSecondResponse.Status.ShouldBe(theOriginalResponse.Status);\n        }\n\n        [Test]\n        public void writes_the_Destination()\n        {\n            theSecondResponse.Destination.ShouldBe(theOriginalResponse.Destination);\n        }\n\n        [Test]\n        public void writes_the_Id()\n        {\n            theSecondResponse.Id.ShouldBe(\"SamlResponse-\"+theOriginalResponse.Id);\n        }\n\n        [Test]\n        public void writes_the_issue_instant()\n        {\n            theSecondResponse.IssueInstant.ShouldBe(theOriginalResponse.IssueInstant);\n        }\n\n        [Test]\n        public void writes_the_subject_name()\n        {\n            theSecondResponse.Subject.Name.ShouldBe(theOriginalResponse.Subject.Name);\n        }\n\n        [Test]\n        public void writes_the_subject_format()\n        {\n            theSecondResponse.Subject.Name.Format\n                             .ShouldBe(theOriginalResponse.Subject.Name.Format);\n        }\n\n        [Test]\n        public void writes_the_subject_confirmation_methods()\n        {\n            theSecondResponse.Subject.Confirmations.Select(x => x.Method)\n                .ShouldHaveTheSameElementsAs(theOriginalResponse.Subject.Confirmations.Select(x => x.Method));\n\n        }\n        \n        [Test]\n        public void writes_the_subject_confirmation_name()\n        {\n            theSecondResponse.Subject.Confirmations.Select(x => x.Name)\n                .ShouldHaveTheSameElementsAs(theOriginalResponse.Subject.Confirmations.Select(x => x.Name));\n\n        }\n\n        [Test]\n        public void writes_the_subject_confirmation_data()\n        {\n            var secondConfirmationData = theSecondResponse.Subject.Confirmations.First().ConfirmationData.First();\n            var originalConfirmationData = theOriginalResponse.Subject.Confirmations.First().ConfirmationData.First();\n\n            secondConfirmationData.NotOnOrAfter.ShouldBe(originalConfirmationData.NotOnOrAfter);\n            secondConfirmationData.Recipient.ShouldBe(originalConfirmationData.Recipient);\n        }\n\n        [Test]\n        public void writes_the_condition_group_times()\n        {\n            theSecondResponse.Conditions.NotBefore\n                             .ShouldBe(theOriginalResponse.Conditions.NotBefore);\n\n            theSecondResponse.Conditions.NotOnOrAfter\n                             .ShouldBe(theOriginalResponse.Conditions.NotOnOrAfter);\n        }\n\n        [Test]\n        public void writes_the_audiences()\n        {\n            var secondAudiences = theSecondResponse.Conditions.Conditions.OfType<AudienceRestriction>().Select(x => x.Audiences);\n            var originalAudiences =\n                theOriginalResponse.Conditions.Conditions.OfType<AudienceRestriction>().Select(x => x.Audiences);\n\n\n            secondAudiences.ShouldHaveTheSameElementsAs(originalAudiences);\n        }\n\n        [Test]\n        public void writes_the_authentication_context_basic_properties()\n        {\n            theSecondResponse.Authentication.Instant.ShouldBe(theOriginalResponse.Authentication.Instant);\n            theSecondResponse.Authentication.SessionIndex.ShouldBe(theOriginalResponse.Authentication.SessionIndex);\n            theSecondResponse.Authentication.SessionNotOnOrAfter.ShouldBe(theOriginalResponse.Authentication.SessionNotOnOrAfter);\n        }\n\n        [Test]\n        public void writes_the_authentication_context_declaration_reference()\n        {\n            theSecondResponse.Authentication.DeclarationReference\n                             .ShouldBe(theOriginalResponse.Authentication.DeclarationReference);\n        }\n        \n        [Test]\n        public void writes_the_authentication_context_class_reference()\n        {\n            theSecondResponse.Authentication.ClassReference\n                             .ShouldBe(theOriginalResponse.Authentication.ClassReference);\n        }\n\n        [Test]\n        public void writes_the_attributes()\n        {\n            theSecondResponse.Attributes.Get(\"ClientId\")\n                             .ShouldBe(\"000012345\");\n\n            theSecondResponse.Attributes.Get(\"CustomerId\")\n                             .ShouldBe(\"001010111\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Saml2/bottle_configuration_integration_tester.cs",
    "content": "﻿using System.Linq;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Membership;\nusing FubuMVC.Core.Security.Authentication.Saml2;\nusing FubuMVC.Core.Security.Authentication.Saml2.Certificates;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.Security.Authentication.Saml2\n{\n    [TestFixture]\n    public class bottle_configuration_integration_tester\n    {\n        [Test]\n        public void register_with_basic_authentication_enabled()\n        {\n            var registry = new FubuRegistry();\n            registry.AlterSettings<AuthenticationSettings>(_ =>\n            {\n                _.Enabled = true;\n                _.Saml2.Enabled = true;\n            });\n\n            var samlCertificateRepository = MockRepository.GenerateMock<ISamlCertificateRepository>();\n            samlCertificateRepository.Stub(x => x.AllKnownCertificates()).Return(new SamlCertificate[0]);\n\n            registry.Services.SetServiceIfNone<IPrincipalBuilder>(MockRepository.GenerateMock<IPrincipalBuilder>());\n            registry.Services.AddService<ISamlResponseHandler>(MockRepository.GenerateMock<ISamlResponseHandler>());\n            registry.Services.SetServiceIfNone<ISamlCertificateRepository>(samlCertificateRepository);\n\n\n            using (var runtime = registry.ToRuntime())\n            {\n                var container = runtime.Get<IContainer>();\n                var strategies = container.GetAllInstances<IAuthenticationStrategy>();\n                strategies.First().ShouldBeOfType<SamlAuthenticationStrategy>();\n\n                strategies.Last().ShouldBeOfType<MembershipAuthentication>();\n            }\n\n\n\n        }\n\n        [Test]\n        public void register_with_basic_authentication_disabled()\n        {\n            var registry = new FubuRegistry();\n            registry.AlterSettings<AuthenticationSettings>(_ =>\n            {\n                _.Enabled = true;\n                _.Saml2.Enabled = true;\n            });\n\n            var samlCertificateRepository = MockRepository.GenerateMock<ISamlCertificateRepository>();\n            samlCertificateRepository.Stub(x => x.AllKnownCertificates()).Return(new SamlCertificate[0]);\n            registry.Services.SetServiceIfNone<ISamlCertificateRepository>(samlCertificateRepository);\n\n            registry.Services.SetServiceIfNone<IPrincipalBuilder>(MockRepository.GenerateMock<IPrincipalBuilder>());\n            registry.Services.AddService<ISamlResponseHandler>(MockRepository.GenerateMock<ISamlResponseHandler>());\n            \n\n\n            registry.AlterSettings<AuthenticationSettings>(x => {\n                x.MembershipEnabled = MembershipStatus.Disabled;\n            });\n\n            using (var runtime = registry.ToRuntime())\n            {\n                var container = runtime.Get<IContainer>();\n\n                var strategies = container.GetAllInstances<IAuthenticationStrategy>();\n                strategies.Single().ShouldBeOfType<SamlAuthenticationStrategy>();\n            }\n\n        }\n\n        [Test]\n        public void blows_up_with_no_saml_certificate_repository()\n        {\n            var registry = new FubuRegistry();\n            registry.AlterSettings<AuthenticationSettings>(_ =>\n            {\n                _.Enabled = true;\n                _.Saml2.Enabled = true;\n            });\n\n            var samlCertificateRepository = MockRepository.GenerateMock<ISamlCertificateRepository>();\n            samlCertificateRepository.Stub(r => r.AllKnownCertificates())\n                                     .Return(new SamlCertificate[0]);\n\n            registry.Services.SetServiceIfNone<IPrincipalBuilder>(MockRepository.GenerateMock<IPrincipalBuilder>());\n            registry.Services.AddService<ISamlResponseHandler>(MockRepository.GenerateMock<ISamlResponseHandler>());\n            //registry.Services.SetServiceIfNone<ISamlCertificateRepository>(samlCertificateRepository);\n\n\n\n\n            Exception<StructureMapConfigurationException>.ShouldBeThrownBy(() => {\n                                                                registry.ToRuntime();\n            });\n\n            \n\n        }\n\n        [Test]\n        public void blows_up_with_no_saml_handlers()\n        {\n            var registry = new FubuRegistry();\n\n            registry.AlterSettings<AuthenticationSettings>(_ =>\n            {\n                _.Enabled = true;\n                _.Saml2.Enabled = true;\n            });\n\n            var samlCertificateRepository = MockRepository.GenerateMock<ISamlCertificateRepository>();\n            samlCertificateRepository.Stub(r => r.AllKnownCertificates())\n                                     .Return(new SamlCertificate[0]);\n\n            registry.Services.SetServiceIfNone<IPrincipalBuilder>(MockRepository.GenerateMock<IPrincipalBuilder>());\n            //registry.Services.AddService<ISamlResponseHandler>(MockRepository.GenerateMock<ISamlResponseHandler>());\n            registry.Services.SetServiceIfNone<ISamlCertificateRepository>(samlCertificateRepository);\n\n\n\n\n            Exception<FubuException>.ShouldBeThrownBy(() => {\n                registry.ToRuntime();\n            });\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Tickets/EncryptionTester.cs",
    "content": "using FubuMVC.Core.Security.Authentication.Tickets;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authentication.Tickets\n{\n    [TestFixture]\n    public class EncryptionTester\n    {\n        private Encryptor theEncryptor;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theEncryptor = new Encryptor(new EncryptionSettings());\n        }\n\n        [Test]\n        public void is_predictable()\n        {\n            var plain = \"the rain in spain\";\n            var encrypted1 = theEncryptor.Encrypt(plain);\n            var encrypted2 = theEncryptor.Encrypt(plain);\n\n            encrypted1.ShouldNotBe(plain);\n\n            encrypted1.ShouldBe(encrypted2);\n        }\n\n        [Test]\n        public void can_round_trip()\n        {\n            var plain = \"the rain in spain\";\n            var encrypted1 = theEncryptor.Encrypt(plain);\n\n            theEncryptor.Decrypt(encrypted1).ShouldBe(plain);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Tickets/TicketAuthenticationSessionTester.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Tickets;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.Authentication.Tickets\n{\n    [TestFixture]\n    public class when_marking_authentication : InteractionContext<TicketAuthenticationSession>\n    {\n        private string theUserName;\n        private AuthenticationTicket theResultingTicket;\n        private AuthenticationSettings theSettings;\n\n        protected override void beforeEach()\n        {\n            theSettings = new AuthenticationSettings();\n            theSettings.ExpireInMinutes = 30;\n            Services.Inject(theSettings);\n\n            LocalSystemTime = DateTime.Today.AddHours(8);\n\n            theUserName = \"somebody\";\n\n            ClassUnderTest.MarkAuthenticated(theUserName);\n\n            theResultingTicket = MockFor<ITicketSource>().GetArgumentsForCallsMadeOn(x => x.Persist(null))\n                [0][0].As<AuthenticationTicket>();\n        }\n\n        [Test]\n        public void the_ticket_should_have_the_user_name()\n        {\n            theResultingTicket.UserName.ShouldBe(theUserName);\n        }\n\n        [Test]\n        public void last_accessed_should_be_now()\n        {\n            theResultingTicket.LastAccessed.ShouldBe(UtcSystemTime);\n        }\n\n        [Test]\n        public void expiration_is_now_plus_the_expiration_in_minutes_from_settings()\n        {\n            var expirationTime = UtcSystemTime.AddMinutes(30);\n            theResultingTicket.Expiration.ShouldBe(expirationTime);\n        }\n    }\n\n\n    [TestFixture]\n    public class TicketAuthenticationSession_IsExpired_Tester : InteractionContext<TicketAuthenticationSession>\n    {\n        private AuthenticationSettings theSettings;\n        private AuthenticationTicket theTicket;\n\n        protected override void beforeEach()\n        {\n            theSettings = new AuthenticationSettings();\n            Services.Inject(theSettings);\n\n            LocalSystemTime = DateTime.Today.AddHours(8);\n\n            theTicket = new AuthenticationTicket();\n        }\n\n        [Test]\n        public void absolute_expiration()\n        {\n            theSettings.SlidingExpiration = false;\n\n            theTicket.Expiration = UtcSystemTime.AddMinutes(1);\n            ClassUnderTest.IsExpired(theTicket).ShouldBeFalse();\n\n            theTicket.Expiration = UtcSystemTime;\n            ClassUnderTest.IsExpired(theTicket).ShouldBeTrue();\n\n            theTicket.Expiration = UtcSystemTime.AddMinutes(-1);\n            ClassUnderTest.IsExpired(theTicket).ShouldBeTrue();\n\n        }\n\n        [Test]\n        public void sliding_expiration()\n        {\n            theSettings.SlidingExpiration = true;\n            theSettings.ExpireInMinutes = 30;\n\n            theTicket.LastAccessed = UtcSystemTime;\n            ClassUnderTest.IsExpired(theTicket).ShouldBeFalse();\n\n            theTicket.LastAccessed = UtcSystemTime.AddMinutes(-10);\n            ClassUnderTest.IsExpired(theTicket).ShouldBeFalse();\n\n            theTicket.LastAccessed = UtcSystemTime.AddMinutes(-30);\n            ClassUnderTest.IsExpired(theTicket).ShouldBeTrue();\n\n            theTicket.LastAccessed = UtcSystemTime.AddMinutes(-40);\n            ClassUnderTest.IsExpired(theTicket).ShouldBeTrue();\n        }\n    }\n\n\n    [TestFixture]\n    public class finding_a_currently_authenticated_user_when_there_is_none : InteractionContext<TicketAuthenticationSession>\n    {\n        protected override void beforeEach()\n        {\n            MockFor<ITicketSource>().Stub(x => x.CurrentTicket()).Return(null);\n        }\n\n        [Test]\n        public void should_return_the_null()\n        {\n            ClassUnderTest.PreviouslyAuthenticatedUser().ShouldBeNull();\n        }\n    }\n\n\n    [TestFixture]\n    public class finding_a_currently_authenticated_user_that_is_not_expired : InteractionContext<TicketAuthenticationSession>\n    {\n        private AuthenticationTicket theTicket;\n\n        protected override void beforeEach()\n        {\n            theTicket = new AuthenticationTicket{\n                UserName = \"somebody\"\n            };\n            MockFor<ITicketSource>().Stub(x => x.CurrentTicket()).Return(theTicket); \n\n            Services.PartialMockTheClassUnderTest();\n\n            ClassUnderTest.Stub(x => x.IsExpired(theTicket)).Return(false);\n        }\n\n        [Test]\n        public void should_return_the_username_of_the_current_logged_in_user()\n        {\n            ClassUnderTest.PreviouslyAuthenticatedUser().ShouldBe(theTicket.UserName);\n        }\n    }\n\n    [TestFixture]\n    public class finding_a_currently_authenticated_user_that_is_expired : InteractionContext<TicketAuthenticationSession>\n    {\n        private AuthenticationTicket theTicket;\n\n        protected override void beforeEach()\n        {\n            theTicket = new AuthenticationTicket\n            {\n                UserName = \"somebody\"\n            };\n\n            MockFor<ITicketSource>().Stub(x => x.CurrentTicket()).Return(theTicket);\n\n            Services.PartialMockTheClassUnderTest();\n\n            ClassUnderTest.Stub(x => x.IsExpired(theTicket)).Return(true);\n        }\n\n        [Test]\n        public void should_return_the_null()\n        {\n            ClassUnderTest.PreviouslyAuthenticatedUser().ShouldBeNull();\n        }\n\n        [Test]\n        public void should_delete_the_existing_ticket()\n        {\n            ClassUnderTest.PreviouslyAuthenticatedUser();\n            MockFor<ITicketSource>().AssertWasCalled(x => x.Delete());\n        }\n    }\n\n\n    [TestFixture]\n    public class when_marking_a_ticket_as_accessed : InteractionContext<TicketAuthenticationSession>\n    {\n        private AuthenticationTicket theTicket;\n\n        protected override void beforeEach()\n        {\n            theTicket = new AuthenticationTicket();\n            LocalSystemTime = DateTime.Today.AddHours(8);\n\n            MockFor<ITicketSource>().Stub(x => x.CurrentTicket()).Return(theTicket);\n\n            ClassUnderTest.MarkAccessed();\n        }\n\n        [Test]\n        public void should_set_the_last_accessed_time_to_now()\n        {\n            theTicket.LastAccessed.ShouldBe(UtcSystemTime);\n        }\n\n        [Test]\n        public void should_persist_the_ticket()\n        {\n            MockFor<ITicketSource>().AssertWasCalled(x => x.Persist(theTicket));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Windows/DefaultWindowsPrincipalHandlerTester.cs",
    "content": "﻿using FubuMVC.Core.Security.Authentication.Windows;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Windows\n{\n    [TestFixture]\n    public class DefaultWindowsPrincipalHandlerTester\n    {\n        [Test]\n        public void authenticated_has_to_return_true()\n        {\n            new DefaultWindowsPrincipalHandler().Authenticated(null).ShouldBeTrue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Windows/WindowsAuthenticationTester.cs",
    "content": "﻿using System.Security.Principal;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Auditing;\nusing FubuMVC.Core.Security.Authentication.Windows;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.Authentication.Windows\n{\n    [TestFixture]\n    public class when_the_windows_authentication_is_successful : InteractionContext<WindowsAuthentication>\n    {\n        private FubuContinuation theContinuation;\n        private WindowsPrincipal thePrincipal;\n        private WindowsSignInRequest theRequest;\n\n        protected override void beforeEach()\n        {\n            thePrincipal = new WindowsPrincipal(WindowsIdentity.GetAnonymous());\n            theRequest = new WindowsSignInRequest();\n\n            MockFor<IWindowsPrincipalHandler>().Stub(x => x.Authenticated(thePrincipal))\n                                               .Return(true);\n\n            theContinuation = ClassUnderTest.Authenticate(theRequest, thePrincipal);\n        }\n\n        [Test]\n        public void should_be_auditing_the_success()\n        {\n            MockFor<ILoginAuditor>().AssertWasCalled(x => x.Audit(new SuccessfulWindowsAuthentication{User = thePrincipal.Identity.Name}));\n        }\n\n        [Test]\n        public void invokes_the_principal_handler()\n        {\n            MockFor<IWindowsPrincipalHandler>().AssertWasCalled(x => x.Authenticated(thePrincipal));\n        }\n\n        [Test]\n        public void redirects_the_redirect_url()\n        {\n            theContinuation.AssertWasRedirectedTo(theRequest.Url);\n        }\n\n        [Test]\n        public void marks_the_session_as_authenticated()\n        {\n            MockFor<IAuthenticationSession>().AssertWasCalled(x => x.MarkAuthenticated(thePrincipal.Identity.Name));\n        }\n    }\n\n\n    [TestFixture]\n    public class when_the_windows_authentication_fails : InteractionContext<WindowsAuthentication>\n    {\n        private FubuContinuation theContinuation;\n        private WindowsPrincipal thePrincipal;\n        private WindowsSignInRequest theRequest;\n\n        protected override void beforeEach()\n        {\n            thePrincipal = new WindowsPrincipal(WindowsIdentity.GetAnonymous());\n            theRequest = new WindowsSignInRequest\n            {\n                Url = \"some url\"\n            };\n\n            MockFor<IWindowsPrincipalHandler>().Stub(x => x.Authenticated(thePrincipal))\n                                               .Return(false);\n\n            theContinuation = ClassUnderTest.Authenticate(theRequest, thePrincipal);\n        }\n\n        [Test]\n        public void should_be_auditing_the_failure()\n        {\n            MockFor<ILoginAuditor>().AssertWasCalled(x => x.Audit(new FailedWindowsAuthentication { User = thePrincipal.Identity.Name }));\n        }\n\n        [Test]\n        public void invokes_the_principal_handler()\n        {\n            MockFor<IWindowsPrincipalHandler>().AssertWasCalled(x => x.Authenticated(thePrincipal));\n        }\n\n        [Test]\n        public void should_redirect_to_the_login_page()\n        {\n            theContinuation.AssertWasRedirectedTo(new LoginRequest{Url = theRequest.Url}, \"GET\");\n        }\n\n        [Test]\n        public void DOES_NOT_marks_the_session_as_authenticated()\n        {\n            MockFor<IAuthenticationSession>().AssertWasNotCalled(x => x.MarkAuthenticated(thePrincipal.Identity.Name));\n        }\n    }\n\n\n\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Windows/WindowsControllerTester.cs",
    "content": "﻿using System.Net;\nusing System.Security.Principal;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Security.Authentication.Windows;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Windows\n{\n    [TestFixture]\n    public class WindowsControllerTester : InteractionContext<WindowsController>\n    {\n        private WindowsPrincipal thePrincipal;\n        private FubuContinuation theContinuation;\n        private WindowsSignInRequest theRequest;\n\n        protected override void beforeEach()\n        {\n            thePrincipal = new WindowsPrincipal(WindowsIdentity.GetAnonymous());\n            theContinuation = FubuContinuation.EndWithStatusCode(HttpStatusCode.Accepted);\n            theRequest = new WindowsSignInRequest();\n\n            MockFor<IWindowsAuthenticationContext>().Stub(x => x.Current()).Return(thePrincipal);\n            MockFor<IWindowsAuthentication>().Stub(x => x.Authenticate(theRequest, thePrincipal)).Return(theContinuation);\n        }\n\n        [Test]\n        public void just_delegates_to_the_strategy()\n        {\n            ClassUnderTest.Login(theRequest).ShouldBe(theContinuation);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Windows/WindowsSignInRequestTester.cs",
    "content": "﻿using FubuMVC.Core.Security.Authentication.Windows;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Windows\n{\n    [TestFixture]\n    public class WindowsSignInRequestTester\n    {\n        private WindowsSignInRequest theRequest;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theRequest = new WindowsSignInRequest();\n        }\n\n        [Test]\n        public void url_defaults_to_root()\n        {\n            theRequest.Url.ShouldBe(\"~/\");\n\n        }\n\n        [Test]\n        public void uses_specified_url()\n        {\n            theRequest.Url = \"123\";\n            theRequest.Url.ShouldBe(\"123\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/Windows/setup_with_windows_authentication.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Security.Authentication.Windows;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authentication.Windows\n{\n    [TestFixture]\n    public class setup_with_windows_authentication\n    {\n        private BehaviorGraph theGraph;\n\n        [SetUp]\n        public void SetUp()\n        {\n            var registry = new FubuRegistry();\n            registry.Import<ApplyWindowsAuthentication>();\n\n            theGraph = BehaviorGraph.BuildFrom(registry);\n        }\n\n        [Test]\n        public void the_windows_action_call_is_registered()\n        {\n            theGraph.ChainFor<WindowsController>(x => x.Login(null)).ShouldNotBeNull();\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/pass_through_authentication_for_a_partial.cs",
    "content": "﻿using FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n\t[TestFixture]\n\tpublic class pass_through_authentication_for_a_partial : InteractionContext<PassThroughAuthenticationFilter>\n\t{\n\t\tprivate FubuContinuation theContinuation;\n\n\t\tprotected override void beforeEach()\n\t\t{\n\t\t\tMockFor<ICurrentChain>().Stub(x => x.IsInPartial()).Return(true);\n\t\t\ttheContinuation = ClassUnderTest.Filter();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void continues_to_the_next_behavior()\n\t\t{\n\t\t\ttheContinuation.AssertWasContinuedToNextBehavior();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void does_not_apply_to_authentication()\n\t\t{\n\t\t\tMockFor<IAuthenticationService>().AssertWasNotCalled(x => x.TryToApply());\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/register_membership_with_a_default_repository_if_none_exists.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Security.Authentication.Membership;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n    [TestFixture]\n    public class register_membership_with_a_default_repository_if_none_exists\n    {\n        [Test]\n        public void insert_membership_node_when_it_is_enabled_and_missing()\n        {\n            var graph = BehaviorGraph.BuildFrom(x =>\n            {\n                x.Features.Authentication.Configure(_ =>\n                {\n                    _.Enabled = true;\n                    _.MembershipEnabled = MembershipStatus.Enabled;\n                });\n            });\n\n            graph.Settings.Get<AuthenticationSettings>()\n                 .Strategies.Single().ShouldBeOfType<MembershipNode>();\n        }\n\n        [Test]\n        public void do_not_insert_membership_node_if_there_is_already_one()\n        {\n            var graph = BehaviorGraph.BuildFrom(x =>\n            {\n                x.Features.Authentication.Configure(_ =>\n                {\n                    _.Enabled = true;\n                    _.MembershipEnabled = MembershipStatus.Enabled;\n                    _.Strategies.InsertFirst(new MembershipNode());\n                });\n            });\n\n            var settings = graph.Settings.Get<AuthenticationSettings>();\n  \n            settings.Strategies.Count().ShouldBe(1);\n        }\n\n        [Test]\n        public void do_not_insert_memebership_node_if_membership_is_disabled()\n        {\n\n            var graph = BehaviorGraph.BuildFrom(x =>\n            {\n                x.Features.Authentication.Configure(_ =>\n                {\n                    _.Enabled = true;\n                    _.MembershipEnabled = MembershipStatus.Disabled;\n                });\n            });\n\n            var settings = graph.Settings.Get<AuthenticationSettings>();\n\n            settings.Strategies.Any().ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authentication/when_redirecting_an_unauthenticated_ajax_request.cs",
    "content": "using System.Collections.Generic;\nusing System.Net;\nusing FubuCore;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Security.Authentication;\nusing FubuMVC.Core.Urls;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.Authentication\n{\n\t[TestFixture]\n\tpublic class when_redirecting_an_unauthenticated_ajax_request : InteractionContext<AjaxAuthenticationRedirect>\n\t{\n\t\tprivate string theUrl;\n\t\tprivate IDictionary<string, object> theValues;\n\t    private FubuContinuation theContinuation;\n\n\t    protected override void beforeEach()\n\t\t{\n\t\t\ttheUrl = \"test/login\";\n\n\t\t\tMockFor<IUrlRegistry>().Stub(x => x.UrlFor(new LoginRequest(), \"GET\"))\n\t\t\t\t.Return(theUrl);\n\n\n\t        theValues = ClassUnderTest.BuildAjaxContinuation().ToDictionary();\n\t\t\ttheContinuation = ClassUnderTest.Redirect();\n\n\t\t}\n\n\t    [Test]\n\t    public void the_continuation_should_be_stop()\n\t    {\n            theContinuation.AssertWasEndedWithStatusCode(HttpStatusCode.Unauthorized);\n\t    }\n\n\t\t[Test]\n\t\tpublic void sets_the_navigate_page_property()\n\t\t{\n\t\t\ttheValues[\"navigatePage\"].ShouldBe(theUrl);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void sets_the_success_flag()\n\t\t{\n\t\t\ttheValues[\"success\"].As<bool>().ShouldBeFalse();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void writes_the_json_mimetype()\n\t\t{\n\t\t\tMockFor<IOutputWriter>()\n\t\t\t\t.GetArgumentsForCallsMadeOn(x => x.Write(MimeType.Json, null), x => x.IgnoreArguments())[0][0]\n\t\t\t\t.ShouldBe(MimeType.Json.Value);\n\t\t}\n\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authorization/AllowRoleTester.cs",
    "content": "using System.Linq;\nusing System.Security.Principal;\nusing System.Threading;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Security.Authorization;\nusing Rhino.Mocks;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authorization\n{\n    [TestFixture]\n    public class AllowRoleTester\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            var principal = new GenericPrincipal(new GenericIdentity(\"somebody\"), new string[] { \"a\", \"b\" });\n            Thread.CurrentPrincipal = principal;\n        }\n\n        [Test]\n        public void positive_test_for_a_role_that_is_in_the_current_principal()\n        {\n            new AllowRole(\"a\").RightsFor(null).ShouldBe(AuthorizationRight.Allow);\n        }\n\n        [Test]\n        public void negative_test_for_a_role_that_is_not_in_the_current_principal()\n        {\n            new AllowRole(\"not in principal\").RightsFor(null).ShouldBe(AuthorizationRight.None);\n        }\n    }\n\n    [TestFixture]\n    public class MustBeAuthenticatedTester\n    {\n        [Test]\n        public void no_principal_no_authorization()\n        {\n            MustBeAuthenticated.DetermineRights(null).ShouldBe(AuthorizationRight.Deny);\n        }\n\n        [Test]\n        public void not_authenticated_principal()\n        {\n            var principal = MockRepository.GenerateMock<IPrincipal>();\n            var identity = MockRepository.GenerateMock<IIdentity>();\n            identity.Stub(x => x.IsAuthenticated).Return(false);\n            principal.Stub(x => x.Identity).Return(identity);\n\n            MustBeAuthenticated.DetermineRights(principal).ShouldBe(AuthorizationRight.Deny);\n        }\n\n        [Test]\n        public void is_authenticated()\n        {\n            var principal = MockRepository.GenerateMock<IPrincipal>();\n            var identity = MockRepository.GenerateMock<IIdentity>();\n            identity.Stub(x => x.IsAuthenticated).Return(true);\n            principal.Stub(x => x.Identity).Return(identity);\n\n            MustBeAuthenticated.DetermineRights(principal).ShouldBe(AuthorizationRight.Allow);\n        }\n\n        [Test]\n        public void attribute_places_the_rule()\n        {\n            var chain = BehaviorChain.For<MustBeAuthenticatedTester>(x => x.Go());\n\n            chain.Authorization.Policies.Single()\n                .ShouldBeOfType<MustBeAuthenticated>();\n        }\n\n        [MustBeAuthenticated]\n        public string Go()\n        {\n            return \"ok\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authorization/AlwaysAllowPolicyTester.cs",
    "content": "﻿using FubuMVC.Core.Security.Authorization;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authorization\n{\n    [TestFixture]\n    public class AlwaysAllowPolicyTester\n    {\n        [Test]\n        public void it_is_just_allow()\n        {\n            new AlwaysAllowPolicy().RightsFor(null).ShouldBe(AuthorizationRight.Allow);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authorization/AlwaysDenyPolicyTester.cs",
    "content": "﻿using FubuMVC.Core.Security.Authorization;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authorization\n{\n    [TestFixture]\n    public class AlwaysDenyPolicyTester\n    {\n        [Test]\n        public void it_is_just_deny()\n        {\n            new AlwaysDenyPolicy().RightsFor(null)\n                .ShouldBe(AuthorizationRight.Deny);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authorization/AuthorizationBehaviorTester.cs",
    "content": "using FubuMVC.Core;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Security.Authorization;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.Authorization\n{\n    [TestFixture]\n    public class when_authorization_returns_allow : InteractionContext<AuthorizationBehavior>\n    {\n        protected override void beforeEach()\n        {\n            var request = MockFor<IFubuRequestContext>();\n\n            MockFor<SecuritySettings>().Reset();\n\n            MockFor<IAuthorizationNode>().Stub(x => x.IsAuthorized(request)).Return(AuthorizationRight.Allow);\n            ClassUnderTest.Inner = MockFor<IActionBehavior>();\n            ClassUnderTest.Invoke();\n        }\n\n        [Test]\n        public void should_call_into_the_next_behavior()\n        {\n            MockFor<IActionBehavior>().AssertWasCalled(x => x.Invoke());\n        }\n\n        [Test]\n        public void should_NOT_call_the_authorization_failure_handler()\n        {\n            MockFor<IAuthorizationFailureHandler>().AssertWasNotCalled(x => x.Handle());\n        }\n    }\n\n    [TestFixture]\n    public class when_authorization_is_disabled : InteractionContext<AuthorizationBehavior>\n    {\n        protected override void beforeEach()\n        {\n            Services.Inject(new SecuritySettings\n            {\n                AuthorizationEnabled = false\n            });\n\n            ClassUnderTest.Inner = MockFor<IActionBehavior>();\n            ClassUnderTest.Invoke();\n        }\n\n        [Test]\n        public void should_call_into_the_next_behavior()\n        {\n            MockFor<IActionBehavior>().AssertWasCalled(x => x.Invoke());\n        }\n\n        [Test]\n        public void should_NOT_call_the_authorization_failure_handler()\n        {\n            MockFor<IAuthorizationFailureHandler>().AssertWasNotCalled(x => x.Handle());\n        }\n\n        [Test]\n        public void should_NOT_call_into_authorization()\n        {\n            MockFor<IAuthorizationNode>().AssertWasNotCalled(x => x.IsAuthorized(null), _ => _.IgnoreArguments());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authorization/AuthorizationByServiceTester.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core.Security.Authorization;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authorization\n{\n    [TestFixture]\n    public class AuthorizationByServiceTester\n    {\n        [Test]\n        public void delegates_by_auth_rights_func()\n        {\n            var policy = new AuthorizationByService<AuthCheckingService>(x => x.Rights);\n\n            var context = new MockedFubuRequestContext();\n            context.Services.As<InMemoryServiceLocator>().Add(new AuthCheckingService\n            {\n                Rights = AuthorizationRight.Allow\n            });\n\n            policy.RightsFor(context).ShouldBe(AuthorizationRight.Allow);\n\n            context.Services.As<InMemoryServiceLocator>().Add(new AuthCheckingService\n            {\n                Rights = AuthorizationRight.Deny\n            });\n\n            policy.RightsFor(context).ShouldBe(AuthorizationRight.Deny);\n        }\n\n        [Test]\n        public void delegates_by_bool_func()\n        {\n            var policy = new AuthorizationByService<AuthCheckingService>(x => x.IsOk);\n\n            var context = new MockedFubuRequestContext();\n            context.Services.As<InMemoryServiceLocator>().Add(new AuthCheckingService\n            {\n                IsOk = true\n            });\n\n            policy.RightsFor(context).ShouldBe(AuthorizationRight.Allow);\n\n            context.Services.As<InMemoryServiceLocator>().Add(new AuthCheckingService\n            {\n                IsOk = false\n            });\n\n            policy.RightsFor(context).ShouldBe(AuthorizationRight.Deny);\n        }\n    }\n\n    public class AuthCheckingService\n    {\n        public bool IsOk = true;\n        public AuthorizationRight Rights = AuthorizationRight.Allow;\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authorization/AuthorizationCheckPolicyTester.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Security.Authorization;\nusing FubuMVC.Core.StructureMap;\nusing Shouldly;\nusing NUnit.Framework;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.Security.Authorization\n{\n    [TestFixture]\n    public class AuthorizationCheckPolicyTester\n    {\n        [Test]\n        public void delegate_to_the_check()\n        {\n            FakeCheck.Rights = AuthorizationRight.Allow;\n            FakeCheck.Created = 0;\n\n            var context = new FubuRequestContext(new StructureMapServiceLocator(new Container()), null, null,null,null);\n            var policy = new AuthorizationCheckPolicy<FakeCheck>();\n\n            policy.RightsFor(context).ShouldBe(AuthorizationRight.Allow);\n\n            FakeCheck.Rights = AuthorizationRight.Deny;\n\n            policy.RightsFor(context).ShouldBe(AuthorizationRight.Deny);\n\n            FakeCheck.Created.ShouldBe(2);\n        }\n    }\n\n    public class FakeCheck : IAuthorizationCheck\n    {\n        public static AuthorizationRight Rights = AuthorizationRight.Allow;\n        public static int Created;\n\n\n        public FakeCheck()\n        {\n            Created++;\n        }\n\n        public AuthorizationRight Check()\n        {\n            return Rights;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authorization/AuthorizationNodeTester.cs",
    "content": "using System;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Security.Authorization;\nusing FubuMVC.Core.StructureMap;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing StructureMap;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Tests.Security.Authorization\n{\n    [TestFixture]\n    public class AuthorizationNodeTester\n    {\n        [Test]\n        public void category_is_authorization()\n        {\n            new AuthorizationNode().Category.ShouldBe(BehaviorCategory.Authorization);\n        }\n\n        [Test]\n        public void no_rules()\n        {\n            new AuthorizationNode().HasRules().ShouldBeFalse();\n        }\n\n        [Test]\n        public void with_rules()\n        {\n            var node = new AuthorizationNode();\n            node.AddRole(\"Role A\");\n\n            node.HasRules().ShouldBeTrue();\n        }\n\n        private AuthorizationBehavior toBehavior(AuthorizationNode node)\n        {\n            AuthorizationBehavior behavior = null;\n            using (var runtime = FubuRuntime.Basic())\n            {\n                behavior = (AuthorizationBehavior) runtime.Get<IContainer>().GetInstance<IActionBehavior>(node.As<IContainerModel>().ToInstance());\n            }\n\n            return behavior;\n        }\n\n        [Test]\n        public void adding_a_role()\n        {\n            var node = new AuthorizationNode();\n            node.AddRole(\"RoleA\");\n\n            var authorizationBehavior = toBehavior(node);\n            authorizationBehavior.Policies.Count().ShouldBe(1);\n            authorizationBehavior.Policies.First().ShouldBeOfType<AllowRole>().Role.ShouldBe(\"RoleA\");\n        }\n\n        [Test]\n        public void adding_a_policy()\n        {\n            var node = new AuthorizationNode();\n            var policy = MockRepository.GenerateMock<IAuthorizationPolicy>();\n\n            node.AddPolicy(policy);\n\n            var authorizationBehavior = toBehavior(node);\n            authorizationBehavior.Policies.Single().ShouldBeTheSameAs(policy);\n        }\n\n\n        [Test]\n        public void adding_multiple_roles()\n        {\n            var node = new AuthorizationNode();\n            node.AddRole(\"RoleA\");\n            node.AddRole(\"RoleB\");\n            node.AddRole(\"RoleC\");\n\n            var authorizationBehavior = toBehavior(node);\n            authorizationBehavior.Policies.Count().ShouldBe(3);\n\n            authorizationBehavior.Policies.ToArray()[0].ShouldBeOfType<AllowRole>().Role.ShouldBe(\"RoleA\");\n            authorizationBehavior.Policies.ToArray()[1].ShouldBeOfType<AllowRole>().Role.ShouldBe(\"RoleB\");\n            authorizationBehavior.Policies.ToArray()[2].ShouldBeOfType<AllowRole>().Role.ShouldBe(\"RoleC\");\n        }\n\n\n        [Test]\n        public void use_no_custom_auth_failure_handler()\n        {\n            var node = new AuthorizationNode();\n            var def = node.As<IContainerModel>().ToInstance().As<IConfiguredInstance>();\n\n            def.FindDependencyDefinitionFor<IAuthorizationFailureHandler>().ShouldBeNull();\n        }\n\n        [Test]\n        public void use_custom_auth_failure_handler_by_type()\n        {\n            var node = new AuthorizationNode();\n            node.FailureHandler<FakeAuthHandler>();\n\n            var def = node.As<IContainerModel>().ToInstance().As<IConfiguredInstance>();\n\n            def.FindDependencyDefinitionFor<IAuthorizationFailureHandler>()\n                .ReturnedType.ShouldBe(typeof (FakeAuthHandler));\n        }\n\n        [Test]\n        public void use_custom_failure_handler_by_value()\n        {\n            var node = new AuthorizationNode();\n\n            var handler = new FakeAuthHandler();\n\n            node.FailureHandler(handler);\n\n            var def = node.As<IContainerModel>().ToInstance().As<IConfiguredInstance>();\n\n            def.FindDependencyValueFor<IAuthorizationFailureHandler>().ShouldBeTheSameAs(handler);\n        }\n\n        [Test]\n        public void add_type_for_a_policy()\n        {\n            var node = new AuthorizationNode();\n            node.Add(typeof (AlwaysAllowPolicy));\n\n            node.Policies.Single().ShouldBeOfType<AlwaysAllowPolicy>();\n        }\n\n        [Test]\n        public void add_type_for_check()\n        {\n            var node = new AuthorizationNode();\n            node.Add(typeof (FakeAuthCheck));\n\n            node.Policies.Single().ShouldBeOfType<AuthorizationCheckPolicy<FakeAuthCheck>>();\n        }\n\n        [Test]\n        public void invalid_add_type()\n        {\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(() => { new AuthorizationNode().Add(GetType()); });\n        }\n\n        [Test]\n        public void invalid_add_type_if_policy_type_has_args()\n        {\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(\n                () => { new AuthorizationNode().Add(typeof (PolicyWithArgs)); });\n        }\n    }\n\n    public class PolicyWithArgs : IAuthorizationPolicy\n    {\n        public PolicyWithArgs(int number)\n        {\n        }\n\n        public AuthorizationRight RightsFor(IFubuRequestContext request)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public class FakeAuthCheck : IAuthorizationCheck\n    {\n        public AuthorizationRight Check()\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public class FakeAuthHandler : IAuthorizationFailureHandler\n    {\n        public FubuContinuation Handle()\n        {\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authorization/AuthorizationPolicyExecutorTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Security.Authorization;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Security.Authorization\n{\n    [TestFixture]\n    public class when_executing_authorization_policies : InteractionContext<AuthorizationPolicyExecutor>\n    {\n        private IAuthorizationPolicy[] policies;\n        private AuthorizationRight _answer;\n\n        protected override void beforeEach()\n        {\n            var request = MockFor<IFubuRequestContext>();\n\n            RecordLogging();\n\n            policies = Services.CreateMockArrayFor<IAuthorizationPolicy>(3);\n            policies[0].Expect(x => x.RightsFor(request)).Return(AuthorizationRight.Allow).Repeat.Once();\n            policies[1].Expect(x => x.RightsFor(request)).Return(AuthorizationRight.None).Repeat.Once();\n            policies[2].Expect(x => x.RightsFor(request)).Return(AuthorizationRight.None).Repeat.Once();\n            _answer = ClassUnderTest.IsAuthorized(request, policies);\n        }\n\n        [Test]\n        public void should_log_the_combined_result()\n        {\n           RecordedLog().DebugMessages.OfType<AuthorizationResult>().Single().Rights.ShouldBe(_answer);\n        }\n\n        [Test]\n        public void should_log_the_result_of_each_policy()\n        {\n            var results = RecordedLog().DebugMessages.OfType<AuthorizationPolicyResult>();\n            results.Select(x => x.Rights.Name).ShouldHaveTheSameElementsAs(\"Allow\", \"None\", \"None\");\n        }\n\n        [Test]\n        public void should_query_all_authorization_policies_once()\n        {\n            policies[0].VerifyAllExpectations();\n            policies[1].VerifyAllExpectations();\n            policies[2].VerifyAllExpectations();\n        }\n\n        [Test]\n        public void should_return_the_combined_result_of_all_policies()\n        {\n            _answer.ShouldBe(AuthorizationRight.Allow);\n        }\n    }\n\n\n\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authorization/AuthorizationRightTester.cs",
    "content": "using FubuMVC.Core.Security.Authorization;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authorization\n{\n    [TestFixture]\n    public class AuthorizationRightTester\n    {\n        [Test]\n        public void combine_allow_beats_none()\n        {\n            AuthorizationRight.CombineRights(AuthorizationRight.Allow, AuthorizationRight.None)\n                .ShouldBe(AuthorizationRight.Allow);\n        }\n\n        [Test]\n        public void deny_trumps_all()\n        {\n            AuthorizationRight.CombineRights(AuthorizationRight.Allow, AuthorizationRight.Deny)\n                .ShouldBe(AuthorizationRight.Deny);\n\n            AuthorizationRight.CombineRights(AuthorizationRight.Allow, AuthorizationRight.Deny, AuthorizationRight.None)\n                .ShouldBe(AuthorizationRight.Deny);\n        }\n\n        [Test]\n        public void none_only_is_just_none()\n        {\n            AuthorizationRight.CombineRights(AuthorizationRight.None, AuthorizationRight.None)\n                .ShouldBe(AuthorizationRight.None);\n        }\n\n        [Test]\n        public void one_value_is_just_that_value()\n        {\n            AuthorizationRight.CombineRights(AuthorizationRight.None).ShouldBe(AuthorizationRight.None);\n            AuthorizationRight.CombineRights(AuthorizationRight.Allow).ShouldBe(AuthorizationRight.Allow);\n            AuthorizationRight.CombineRights(AuthorizationRight.Deny).ShouldBe(AuthorizationRight.Deny);\n        }\n\n        [Test]\n        public void empty_permissions_is_equivalent_to_none()\n        {\n            AuthorizationRight.CombineRights().ShouldBe(AuthorizationRight.None);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authorization/DefaultAuthorizationFailureHandlerTester.cs",
    "content": "using System.Net;\nusing FubuMVC.Core.Security.Authorization;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authorization\n{\n    [TestFixture]\n    public class DefaultAuthorizationFailureHandlerTester : InteractionContext<DefaultAuthorizationFailureHandler>\n    {\n        [Test]\n        public void should_set_the_status_code_to_forbidden()\n        {\n            ClassUnderTest.Handle().AssertWasEndedWithStatusCode(HttpStatusCode.Forbidden);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authorization/PrincipalRolesTester.cs",
    "content": "using System.Security.Principal;\nusing System.Threading;\nusing FubuMVC.Core.Security.Authorization;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authorization\n{\n    [TestFixture]\n    public class PrincipalRolesTester\n    {\n        [Test]\n        public void read_role_off_principal()\n        {\n            var principal = new GenericPrincipal(new GenericIdentity(\"somebody\"), new string[]{\"a\", \"b\"});\n            Thread.CurrentPrincipal = principal;\n\n            PrincipalRoles.Current.ShouldBeTheSameAs(principal);\n\n            PrincipalRoles.IsInRole(\"a\").ShouldBeTrue();\n            PrincipalRoles.IsInRole(\"c\").ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authorization/RequireRoleTester.cs",
    "content": "using System.Linq;\nusing System.Security.Principal;\nusing System.Threading;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Security.Authorization;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Security.Authorization\n{\n    [TestFixture]\n    public class RequireRoleTester\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            var principal = new GenericPrincipal(new GenericIdentity(\"somebody\"), new string[] { \"a\", \"b\" });\n            Thread.CurrentPrincipal = principal;\n        }\n\n        [Test]\n        public void positive_test_for_a_role_that_is_in_the_current_principal()\n        {\n            new RequireRole(\"a\").RightsFor(null).ShouldBe(AuthorizationRight.Allow);\n        }\n\n        [Test]\n        public void negative_test_for_a_role_that_is_not_in_the_current_principal()\n        {\n            new RequireRole(\"not in principal\").RightsFor(null).ShouldBe(AuthorizationRight.Deny);\n        }\n\n        [Test]\n        public void require_role_attribute()\n        {\n            var chain = BehaviorChain.For<RequireRoleTester>(x => x.Go());\n\n            chain.Authorization.HasRules().ShouldBeTrue();\n\n            chain.Authorization.Policies.OfType<RequireRole>()\n                .Select(x => x.Role).ShouldHaveTheSameElementsAs(\"a\", \"b\", \"c\");\n        }\n\n        [RequireRole(\"a\", \"b\", \"c\")]\n        public string Go()\n        {\n            return \"hello\";\n        }\n    }\n\n\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/Authorization/SecuritySettingsTester.cs",
    "content": "﻿using FubuCore.Reflection;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Security.Authorization;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Security.Authorization\n{\n    [TestFixture]\n    public class SecuritySettingsTester\n    {\n        [Test]\n        public void authentication_is_enabled_by_default()\n        {\n            new SecuritySettings().AuthenticationEnabled\n                .ShouldBeTrue();\n        }\n\n        [Test]\n        public void authorization_is_enabled_by_default()\n        {\n            new SecuritySettings().AuthorizationEnabled\n                .ShouldBeTrue();\n        }\n\n        [Test]\n        public void reset_sets_everything_to_enabled()\n        {\n            var settings = new SecuritySettings\n            {\n                AuthenticationEnabled = false,\n                AuthorizationEnabled = false\n            };\n\n            settings.Reset();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Security/WebAuthenticationContextTester.cs",
    "content": "using FubuMVC.Core.Security;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Web.Security\n{\n    [TestFixture]\n    public class WebAuthenticationContextTester\n    {\n        #region Setup/Teardown\n\n        [SetUp]\n        public void SetUp()\n        {\n            _actualUser = null;\n            _actualRememberMe = null;\n            _signOutCalled = false;\n\n            _authSvc = new WebAuthenticationContext\n            {\n                SetAuthCookieFunc = ((u, r) =>\n                {\n                    _actualUser = u;\n                    _actualRememberMe = r;\n                }),\n                SignOutFunc = () => { _signOutCalled = true; }\n            };\n        }\n\n        #endregion\n\n        private WebAuthenticationContext _authSvc;\n        private string _actualUser;\n        private bool? _actualRememberMe;\n        private bool _signOutCalled;\n\n        [Test]\n        public void should_set_the_forms_auth_token_with_the_rememberMe_setting()\n        {\n            string username = \"user\";\n\n            _authSvc.ThisUserHasBeenAuthenticated(username, true);\n\n            _actualUser.ShouldBe(username);\n            _actualRememberMe.Value.ShouldBeTrue();\n        }\n\n        [Test]\n        public void SignOut_should_signout_from_forms_auth()\n        {\n            _authSvc.SignOut();\n\n            _signOutCalled.ShouldBeTrue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServerSentEvents/ChannelTester.cs",
    "content": "using FubuMVC.Core.ServerSentEvents;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServerSentEvents\n{\n    [TestFixture]\n    public class ChannelTester\n    {\n        private EventQueue<FakeTopic> theQueue;\n        private Channel<FakeTopic> theChannel;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theQueue = new EventQueue<FakeTopic>();\n            theChannel = new Channel<FakeTopic>(theQueue);\n        }\n\n        [Test]\n        public void is_connected_at_startup_time()\n        {\n            theChannel.IsConnected().ShouldBeTrue();\n        }\n\n        [Test]\n        public void flush_clears_out_the_channel_and_sets_the_connection_to_false()\n        {\n            theChannel.Flush();\n            theChannel.IsConnected().ShouldBeFalse();\n        }\n\n        [Test]\n        public void multiple_listeners_get_the_events_when_new_events_are_written_to_the_channel()\n        {\n            var task1 = theChannel.FindEvents(null);\n            var task2 = theChannel.FindEvents(null);\n            var task3 = theChannel.FindEvents(null);\n\n            var e1 = new ServerEvent(\"1\", \"data-1\");\n            var e2 = new ServerEvent(\"2\", \"data-2\");\n            var e3 = new ServerEvent(\"3\", \"data-3\");\n\n            theChannel.Write(q =>\n            {\n                q.Write(e1, e2, e3);\n            });\n\n            task1.Result.ShouldHaveTheSameElementsAs(e1, e2, e3);\n            task2.Result.ShouldHaveTheSameElementsAs(e1, e2, e3);\n            task3.Result.ShouldHaveTheSameElementsAs(e1, e2, e3);\n        }\n\n        [Test]\n        public void multiple_listeners_at_different_places_in_their_queue()\n        {\n            var task1 = theChannel.FindEvents(new FakeTopic{LastEventId = \"1\"});\n            var task2 = theChannel.FindEvents(new FakeTopic{LastEventId = \"2\"});\n            var task3 = theChannel.FindEvents(null);\n\n            var e1 = new ServerEvent(\"1\", \"data-1\");\n            var e2 = new ServerEvent(\"2\", \"data-2\");\n            var e3 = new ServerEvent(\"3\", \"data-3\");\n\n            theChannel.Write(q =>\n            {\n                q.Write(e1, e2, e3);\n            });\n\n            task1.Result.ShouldHaveTheSameElementsAs(e2, e3);\n            task2.Result.ShouldHaveTheSameElementsAs(e3);\n            task3.Result.ShouldHaveTheSameElementsAs(e1, e2, e3);\n        }\n\n        [Test]\n        public void find_events_that_are_already_published()\n        {\n            var e1 = new ServerEvent(\"1\", \"data-1\");\n            var e2 = new ServerEvent(\"2\", \"data-2\");\n            var e3 = new ServerEvent(\"3\", \"data-3\");\n\n            theChannel.Write(q =>\n            {\n                q.Write(e1, e2, e3);\n            });\n\n            var task1 = theChannel.FindEvents(new FakeTopic { LastEventId = \"1\" });\n            var task2 = theChannel.FindEvents(new FakeTopic { LastEventId = \"2\" });\n            var task3 = theChannel.FindEvents(null);\n\n            task1.Result.ShouldHaveTheSameElementsAs(e2, e3);\n            task2.Result.ShouldHaveTheSameElementsAs(e3);\n            task3.Result.ShouldHaveTheSameElementsAs(e1, e2, e3);\n        }\n\n        [Test]\n        public void disconnected_channel_returns_empty_enumerable()\n        {\n            var e1 = new ServerEvent(\"1\", \"data-1\");\n            var e2 = new ServerEvent(\"2\", \"data-2\");\n            var e3 = new ServerEvent(\"3\", \"data-3\");\n\n            theChannel.Write(q =>\n            {\n                q.Write(e1, e2, e3);\n            });\n\n            theChannel.Flush();\n            theChannel.IsConnected().ShouldBeFalse();\n\n            var task = theChannel.FindEvents(null);\n\n            task.Wait(150).ShouldBeTrue();\n\n            task.Result.ShouldHaveCount(0);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServerSentEvents/ChannelWriterTester.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.IO;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Http.Cookies;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.ServerSentEvents;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServerSentEvents\n{\n    [TestFixture]\n    public class ChannelWriterTester\n    {\n        private IChannel<FakeTopic> theChannel;\n        private ChannelWriter<FakeTopic> theChannelWriter;\n        private RecordingServerEventWriter theWriter;\n        private IServerEvent e1;\n        private IServerEvent e2;\n        private IServerEvent e3;\n        private IServerEvent e4;\n        private IServerEvent e5;\n        private IServerEvent ie1;\n        private IServerEvent ie2;\n        private IServerEvent ie3;\n        private FakeTopic theTopic;\n        private IChannelInitializer<FakeTopic> theInitializer;\n        private ITopicChannelCache theCache;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theInitializer = new DefaultChannelInitializer<FakeTopic>();\n            theWriter = new RecordingServerEventWriter();\n\n            theCache = MockRepository.GenerateMock<ITopicChannelCache>();\n            ITopicChannel<FakeTopic> channel = new TopicChannel<FakeTopic>(new EventQueue<FakeTopic>());\n            theChannel = channel.Channel;\n            theTopic = new FakeTopic();\n\n            theCache.Stub(x => x.TryGetChannelFor(theTopic, out channel)).Return(true).OutRef(channel);\n\n            theChannelWriter = new ChannelWriter<FakeTopic>(theWriter, theWriter, theCache, theInitializer);\n\n            e1 = new ServerEvent(\"1\", \"data-1\");\n            e2 = new ServerEvent(\"2\", \"data-2\");\n            e3 = new ServerEvent(\"3\", \"data-3\");\n            e4 = new ServerEvent(\"4\", \"data-4\");\n            e5 = new ServerEvent(\"5\", \"data-5\");\n\n            ie1 = new ServerEvent(\"random1\", \"initialization data-1\");\n            ie2 = new ServerEvent(\"random2\", \"initialization data-2\");\n            ie3 = new ServerEvent(\"3\", \"initialization data-3\");\n        }\n\n        [Test]\n        public void simple_scenario_when_there_are_already_events_queued_up()\n        {\n            theChannel.Write(q => q.Write(e1, e2, e3));\n\n            theWriter.ConnectedTest = () => !theWriter.Events.Contains(e3);\n\n            var task = theChannelWriter.Write(theTopic);\n\n            task.Wait(150).ShouldBeTrue();\n\n            theWriter.Events.ShouldHaveTheSameElementsAs(e1, e2, e3);\n        }\n\n        [Test]\n        public void sends_initialization_events_then_all_other_events()\n        {\n            theChannel.Write(q => q.Write(e1, e2, e3));\n            theInitializer = new TestChannelInitializer(ie1, ie2);\n\n            theChannelWriter = new ChannelWriter<FakeTopic>(theWriter, theWriter, theCache, theInitializer);\n\n            theWriter.ConnectedTest = () => !theWriter.Events.Contains(e3);\n\n            var task = theChannelWriter.Write(theTopic);\n\n            task.Wait(150).ShouldBeTrue();\n\n            theWriter.Events.ShouldHaveTheSameElementsAs(ie1, ie2, e1, e2, e3);\n        }\n\n        [Test]\n        public void sends_initialization_events_then_events_following_last_initial_event_id()\n        {\n            theChannel.Write(q => q.Write(e1, e2, e3, e4, e5));\n            theInitializer = new TestChannelInitializer(ie1, ie2, ie3);\n\n            theChannelWriter = new ChannelWriter<FakeTopic>(theWriter, theWriter, theCache, theInitializer);\n\n            theWriter.ConnectedTest = () => !theWriter.Events.Contains(e5);\n\n            var task = theChannelWriter.Write(theTopic);\n\n            task.Wait(150).ShouldBeTrue();\n\n            theWriter.Events.ShouldHaveTheSameElementsAs(ie1, ie2, ie3, e4, e5);\n        }\n\n        [Test]\n        public void polls_for_new_events()\n        {\n            theChannel.Write(q => q.Write(e1, e2));\n\n            theWriter.ConnectedTest = () => !theWriter.Events.Contains(e5);\n\n            var task = theChannelWriter.Write(theTopic);\n\n            task.Wait(15);\n            theChannel.Write(q => q.Write(e3, e4));\n            task.Wait(15);\n            theChannel.Write(q => q.Write(e5));\n\n            task.Wait(150).ShouldBeTrue();\n\n            theWriter.Events.ShouldHaveTheSameElementsAs(e1, e2, e3, e4, e5);\n        }\n\n        [Test]\n        public void does_not_poll_when_the_client_is_initially_disconnected()\n        {\n            theWriter.ConnectedTest = () => false;\n\n            var task = theChannelWriter.Write(theTopic);\n\n            task.Wait(15).ShouldBeTrue();\n        }\n\n        [Test]\n        public void does_not_write_poll_results_if_the_client_has_disconnected()\n        {\n            var task = theChannelWriter.Write(theTopic);\n\n            task.Wait(150).ShouldBeFalse();\n\n            theWriter.ForceClientDisconnect();\n\n            theChannel.Write(q => q.Write(e1));\n\n            task.Wait(150).ShouldBeTrue();\n\n            theWriter.Events.ShouldHaveCount(0);\n        }\n\n        [Test]\n        public void does_not_poll_when_the_channel_is_initially_disconnected()\n        {\n            theChannel.Flush();\n\n            var task = theChannelWriter.Write(theTopic);\n\n            task.Wait(15).ShouldBeTrue();\n        }\n\n        [Test]\n        public void does_not_poll_when_the_channel_is_disconnected_after_initial_poll()\n        {\n            var task = theChannelWriter.Write(theTopic);\n\n            task.Wait(500).ShouldBeFalse();\n\n            theChannel.Flush();\n\n            task.Wait(150).ShouldBeTrue();\n            theWriter.Events.ShouldHaveCount(0);\n        }\n\n        [Test]\n        public void sets_last_event_id_to_last_successfully_written_message()\n        {\n            theWriter.FailOnNthWrite = 3;\n\n            theChannel.Write(q => q.Write(e1, e2, e3));\n\n            theWriter.ConnectedTest = () => !theWriter.Events.Contains(e2);\n\n            var task = theChannelWriter.Write(theTopic);\n\n            task.Wait(15).ShouldBeTrue();\n\n            theTopic.LastEventId.ShouldBe(e2.Id);\n        }\n\n        [Test]\n        public void parent_task_is_faulted_when_channel_initializer_fails()\n        {\n            theInitializer = new FailingTestChannelInitializer();\n            theChannelWriter = new ChannelWriter<FakeTopic>(theWriter, theWriter, theCache, theInitializer);\n\n            var testTask = new Task(() => theChannelWriter.Write(theTopic));\n\n            testTask.RunSynchronously();\n            testTask.IsFaulted.ShouldBeTrue();\n\n            var exceptions = testTask.Exception.Flatten().InnerExceptions;\n\n            exceptions.Count.ShouldBe(1);\n            exceptions[0].Message.ShouldBe(FailingTestChannelInitializer.ExceptionMessage);\n        }\n\n        [Test]\n        public void does_not_produce_stack_overflow_exception()\n        {\n            var parentTask = new Task(() => theChannelWriter.Write(theTopic));\n\n            parentTask.Start();\n\n            var startTime = DateTime.Now;\n            while (DateTime.Now - startTime < TimeSpan.FromSeconds(15))\n            {\n                theChannel.Write(q => q.Write(e1));\n                Thread.Sleep(2);\n            }\n\n            theWriter.ForceClientDisconnect();\n            theChannel.Flush();\n\n            parentTask.Wait(150).ShouldBeTrue();\n        }\n\n        [Test]\n        public void failure_to_acquire_channel_terminates_without_errors()\n        {\n            theWriter = new RecordingServerEventWriter();\n\n            var cache = MockRepository.GenerateMock<ITopicChannelCache>();\n            ITopicChannel<FakeTopic> channel = new TopicChannel<FakeTopic>(new EventQueue<FakeTopic>());\n            theChannel = channel.Channel;\n            theTopic = new FakeTopic();\n\n            cache.Stub(x => x.TryGetChannelFor(theTopic, out channel)).Return(false);\n\n            theChannelWriter = new ChannelWriter<FakeTopic>(theWriter, theWriter, cache, theInitializer);\n            var task = theChannelWriter.Write(theTopic);\n\n            task.Wait(150).ShouldBeTrue();\n        }\n    }\n\n    public class RecordingServerEventWriter : IServerEventWriter, IHttpRequest\n    {\n        private readonly IList<IServerEvent> _events = new List<IServerEvent>();\n        private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();\n\n        public int? FailOnNthWrite { get; set; }\n\n        public bool WriterThrows { get; set; }\n        public const string ExceptionMessage = \"Recording Server Event Writer Test Exception\";\n\n        public IList<IServerEvent> Events\n        {\n            get { return _lock.Read(() => _events.ToList()); }\n        }\n\n        public bool WriteData(object data, string id, string @event, int? retry)\n        {\n            throw new NotImplementedException();\n        }\n\n        public bool Write(IServerEvent @event)\n        {\n            if (WriterThrows)\n                throw new Exception(ExceptionMessage);\n\n            if (FailOnNthWrite.HasValue && FailOnNthWrite.Value == _lock.Read(() => _events.Count + 1))\n                return false;\n\n            _lock.Write(() => _events.Add(@event));\n            return true;\n        }\n\n        public Func<bool> ConnectedTest = () => true;\n\n        public IList<Action> QueuedActions = new List<Action>();\n\n        private long _forceDisconnect;\n\n        public bool IsClientConnected()\n        {\n            return ConnectedTest() && Interlocked.Read(ref _forceDisconnect) == 0;\n        }\n\n        public void ForceClientDisconnect()\n        {\n            Interlocked.Increment(ref _forceDisconnect);\n        }\n\n\n        string IHttpRequest.RawUrl()\n        {\n            throw new NotImplementedException();\n        }\n\n        string IHttpRequest.RelativeUrl()\n        {\n            throw new NotImplementedException();\n        }\n\n        string IHttpRequest.FullUrl()\n        {\n            throw new NotImplementedException();\n        }\n\n        string IHttpRequest.ToFullUrl(string url)\n        {\n            throw new NotImplementedException();\n        }\n\n        string IHttpRequest.HttpMethod()\n        {\n            throw new NotImplementedException();\n        }\n\n        bool IHttpRequest.HasHeader(string key)\n        {\n            throw new NotImplementedException();\n        }\n\n        IEnumerable<string> IHttpRequest.GetHeader(string key)\n        {\n            throw new NotImplementedException();\n        }\n\n        IEnumerable<string> IHttpRequest.AllHeaderKeys()\n        {\n            throw new NotImplementedException();\n        }\n\n        NameValueCollection IHttpRequest.QueryString\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        NameValueCollection IHttpRequest.Form\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        Stream IHttpRequest.Input\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        ICookies IHttpRequest.Cookies\n        {\n            get { throw new NotImplementedException(); }\n        }\n    }\n\n    public class TestChannelInitializer : IChannelInitializer<FakeTopic>\n    {\n        private readonly IServerEvent[] _initializationEvents;\n\n        public TestChannelInitializer(params IServerEvent[] initializationEvents)\n        {\n            _initializationEvents = initializationEvents;\n        }\n\n        public IEnumerable<IServerEvent> GetInitializationEvents(FakeTopic topic)\n        {\n            var last = _initializationEvents.LastOrDefault();\n\n            if (last != null)\n                topic.LastEventId = last.Id;\n\n            return _initializationEvents;\n        }\n    }\n\n    public class FailingTestChannelInitializer : IChannelInitializer<FakeTopic>\n    {\n        public const string ExceptionMessage = \"Intialization Exception\";\n\n        public IEnumerable<IServerEvent> GetInitializationEvents(FakeTopic Topic)\n        {\n            throw new Exception(ExceptionMessage);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServerSentEvents/EventPublisherTester.cs",
    "content": "using FubuMVC.Core.ServerSentEvents;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.ServerSentEvents\n{\n    [TestFixture]\n    public class EventPublisherTester : InteractionContext<EventPublisher>\n    {\n        [Test]\n        public void publish_a_server_event()\n        {\n            var @event = new ServerEvent(\"1\", \"some text\");\n            var topic = new FakeTopic{\n                Name = \"something\"\n            };\n\n            var theChannel = MockFor<ITopicChannel<FakeTopic>>();\n            MockFor<ITopicChannelCache>().Stub(x => x.ChannelFor(topic)).Return(theChannel);\n\n            ClassUnderTest.WriteTo(topic, @event);\n\n            theChannel.AssertWasCalled(x => x.WriteEvents(topic, @event));\n        }\n\n        [Test]\n        public void publish_against_a_different_interface()\n        {\n            var oddQueue = MockFor<IOddQueue>();\n            var @event = new ServerEvent(\"1\", \"some text\");\n            var topic = new FakeTopic\n            {\n                Name = \"something\"\n            };\n\n            var theChannel = new TopicChannel<FakeTopic>(oddQueue);\n            MockFor<ITopicChannelCache>().Stub(x => x.ChannelFor(topic)).Return(theChannel);\n\n            ClassUnderTest.WriteTo<FakeTopic, IOddQueue>(topic, x =>\n            {\n                x.WriteOddly(@event);\n            });\n\n            oddQueue.AssertWasCalled(x => x.WriteOddly(@event));\n        }\n\n        public interface IOddQueue : IEventQueue<FakeTopic>\n        {\n            void WriteOddly(IServerEvent @event);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServerSentEvents/EventQueryFactoryTester.cs",
    "content": "using FubuMVC.Core.ServerSentEvents;\nusing FubuMVC.Core.StructureMap;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.ServerSentEvents\n{\n    [TestFixture]\n    public class EventQueryFactoryTester\n    {\n        private IContainer _container;\n        private EventQueueFactory _factory;\n\n        [SetUp]\n        public void SetUp()\n        {\n            _container = new Container(x => x.For(typeof(IEventQueueFactory<>)).Use(typeof(DefaultEventQueueFactory<>)));\n            var services = new StructureMapServiceLocator(_container);\n            _factory = new EventQueueFactory(services);\n        }\n\n        [Test]\n        public void build_for_returns_a_simple_queue()\n        {\n            _factory.BuildFor(new FakeTopic()).ShouldBeOfType<EventQueue<FakeTopic>>();\n            _factory.BuildFor(new DifferentTopic()).ShouldBeOfType<EventQueue<DifferentTopic>>();\n            _factory.BuildFor(new DifferentTopic()).ShouldNotBeOfType<AlternateEventQueue<DifferentTopic>>();\n        }\n\n        [Test]\n        public void build_for_returns_alternate_queue()\n        {\n            _container.Configure(x => x.For<IEventQueueFactory<DifferentTopic>>().Use<AlternateEventQueueFactory>());\n\n            _factory.BuildFor(new FakeTopic()).ShouldBeOfType<EventQueue<FakeTopic>>();\n            _factory.BuildFor(new DifferentTopic()).ShouldBeOfType<AlternateEventQueue<DifferentTopic>>();\n        }\n    }\n\n    public class AlternateEventQueueFactory : IEventQueueFactory<DifferentTopic>\n    {\n        public IEventQueue<DifferentTopic> BuildFor(DifferentTopic topic)\n        {\n            return new AlternateEventQueue<DifferentTopic>();\n        }\n    }\n\n    public class AlternateEventQueue<T> : EventQueue<T> where T : Topic { }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServerSentEvents/ServerEventWriterTester.cs",
    "content": "using System;\nusing System.IO;\nusing System.Net;\nusing System.Threading.Tasks;\nusing System.Web;\nusing FubuMVC.Core.Caching;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.ServerSentEvents;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\nusing Cookie = FubuMVC.Core.Http.Cookies.Cookie;\n\nnamespace FubuMVC.Tests.ServerSentEvents\n{\n    [TestFixture]\n    public class ServerEventWriterTester : InteractionContext<ServerEventWriter>\n    {\n        [Test]\n        public void should_write_the_content_type_on_the_first_call_to_write_data()\n        {\n            ClassUnderTest.WriteData(\"something\");\n\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.ContentType(MimeType.EventStream));\n        }\n\n        [Test]\n        public void should_flush_after_each_write()\n        {\n            ClassUnderTest.WriteData(\"something\");\n\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.Flush());\n\n            ClassUnderTest.WriteData(\"else\");\n\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.Flush(), x => x.Repeat.Twice());\n\n        }\n\n        [Test]\n        public void only_writes_the_mimetype_once()\n        {\n            ClassUnderTest.WriteData(\"something\");\n            ClassUnderTest.WriteData(\"something\");\n            ClassUnderTest.WriteData(\"something\");\n            ClassUnderTest.WriteData(\"something\");\n            ClassUnderTest.WriteData(\"something\");\n            ClassUnderTest.WriteData(\"something\");\n\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.ContentType(MimeType.EventStream), x => x.Repeat.Once());\n        }\n\n        [Test]\n        public void returns_true_on_successful_write()\n        {\n            ClassUnderTest.WriteData(\"something\").ShouldBeTrue();\n        }\n\n        [Test]\n        public void returns_false_when_an_HttpException_occurs_on_flush()\n        {\n            MockFor<IOutputWriter>().Stub(x => x.Flush()).Throw(new HttpException());\n            ClassUnderTest.WriteData(\"something\").ShouldBeFalse();\n        }\n\n\t\t[Test]\n\t\tpublic void returns_false_when_an_AccessViolationException_occurs_on_flush()\n\t\t{\n\t\t\tMockFor<IOutputWriter>().Stub(x => x.Flush()).Throw(new AccessViolationException());\n\t\t\tClassUnderTest.WriteData(\"something\").ShouldBeFalse();\n\t\t}\n    }\n\n    [TestFixture]\n    public class ServerEventWriter_output_Tester\n    {\n        private RecordingOutputWriter output;\n        private ServerEventWriter writer;\n\n        [SetUp]\n        public void SetUp()\n        {\n            output = new RecordingOutputWriter();\n            writer = new ServerEventWriter(output);\n        }\n\n        [Test]\n        public void write_only_data_and_id()\n        {\n            writer.Write(new ServerEvent(\"the id\", \"the data\"));\n            output.Text.ShouldBe(\"id: the id\\ndata: the data\\n\\n\");\n        }\n\n        [Test]\n        public void write_with_id_data_and_event()\n        {\n            writer.Write(new ServerEvent(\"the id\", \"the data\"){Event = \"something\"});\n            output.Text.ShouldBe(\"id: the id/something\\ndata: the data\\n\\n\");  \n        }\n\n        [Test]\n        public void write_with_id_data_and_event_and_retry()\n        {\n            writer.Write(new ServerEvent(\"the id\", \"the data\") { Event = \"something\", Retry = 1000});\n            output.Text.ShouldBe(\"id: the id/something\\nretry: 1000\\ndata: the data\\n\\n\");\n        }\n    }\n\n    public class RecordingOutputWriter : IOutputWriter\n    {\n        private readonly StringWriter _writer = new StringWriter();\n\n        public string Text => _writer.ToString();\n\n        public Task Write(string renderedOutput)\n        {\n            _writer.Write(renderedOutput);\n\n            return Task.CompletedTask;\n        }\n\n        public void WriteFile(string contentType, string localFilePath, string displayName)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task Write(string contentType, string renderedOutput)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void RedirectToUrl(string url)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void AppendCookie(Cookie cookie)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void AppendCookie(HttpCookie cookie)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void AppendHeader(string key, string value)\n        {\n        }\n\n        public Task Write(string contentType, Func<Stream, Task> output)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void WriteResponseCode(HttpStatusCode status, string description)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<IRecordedOutput> Record(Func<Task> inner)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void Replay(IRecordedOutput output)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void Flush()\n        {\n        }\n\n        public void Dispose()\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServerSentEvents/ServerSentEventExtensionIntegratedTester.cs",
    "content": "using System.Diagnostics;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.ServerSentEvents;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.ServerSentEvents\n{\n\n    [TestFixture]\n    public class Can_build_from_container\n    {\n        [Test]\n        public void end_to_end()\n        {\n            var registry = new FubuRegistry();\n            registry.Features.ServerSentEvents.Enable(true);\n\n            using (var runtime = registry.ToRuntime())\n            {\n                var chain = runtime.Behaviors.ChainFor<ChannelWriter<FakeTopic>>(x => x.Write(null));\n                var container = runtime.Get<IContainer>();\n                container.GetInstance<IChannelInitializer<FakeTopic>>()\n                    .ShouldBeOfType<DefaultChannelInitializer<FakeTopic>>();\n\n                container.GetInstance<IActionBehavior>(chain.UniqueId.ToString());\n            }\n\n            \n        }\n    }\n\n    [TestFixture]\n    public class ServerSentEventExtensionIntegratedTester\n    {\n        private BehaviorGraph theGraph;\n\n        [SetUp]\n        public void SetUp()\n        {\n            var registry = new FubuRegistry();\n            registry.Features.ServerSentEvents.Enable(true);\n\n            theGraph = BehaviorGraph.BuildFrom(registry);\n        }\n\n        [Test]\n        public void should_have_an_endpoint_for_concrete_topic_class()\n        {\n            theGraph.ChainFor<ChannelWriter<FakeTopic>>(x => x.Write(null))\n                .ShouldNotBeNull();\n\n            theGraph.ChainFor<ChannelWriter<DifferentTopic>>(x => x.Write(null))\n                .ShouldNotBeNull();\n        }\n\n        [Test]\n        public void should_have_url_patter_for_the_topic_classes()\n        {\n            theGraph.ChainFor<ChannelWriter<FakeTopic>>(x => x.Write(null))\n                .As<SseTopicChain>()\n                .Route.Pattern.ShouldBe(\"_events/fake\");\n        }\n\n        [Test]\n        public void should_have_url_patter_for_the_topic_classes_with_route()\n        {\n            var route = theGraph\n                .ChainFor<ChannelWriter<DifferentTopic>>(x => x.Write(null))\n                .As<SseTopicChain>()\n                .Route;\n\n            route.Pattern.ShouldBe(\"_events/different/{Name}\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServerSentEvents/ServicesRegistrationTester.cs",
    "content": "using FubuMVC.Core;\nusing FubuMVC.Core.ServerSentEvents;\nusing NUnit.Framework;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.ServerSentEvents\n{\n    [TestFixture]\n    public class ServicesRegistrationTester\n    {\n        [Test]\n        public void register_services()\n        {\n            var registry = new FubuRegistry();\n            registry.Features.ServerSentEvents.Enable(true);\n\n            using (var runtime = registry.ToRuntime())\n            {\n                var container = runtime.Get<IContainer>();\n\n                container.DefaultRegistrationIs<IEventPublisher, EventPublisher>();\n                container.DefaultRegistrationIs<IServerEventWriter, ServerEventWriter>();\n                container.DefaultRegistrationIs(typeof (IEventQueueFactory<>), typeof (DefaultEventQueueFactory<>));\n\n                container.DefaultSingletonIs<ITopicChannelCache, TopicChannelCache>();\n            }\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServerSentEvents/SimpleEventQueueTester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core.ServerSentEvents;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServerSentEvents\n{\n    [TestFixture]\n    public class SimpleEventQueueTester\n    {\n        private EventQueue<FakeTopic> theQueue;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theQueue = new EventQueue<FakeTopic>();\n            theQueue.Write(new ServerEvent(\"2\", \"2\"));\n            theQueue.Write(new ServerEvent(\"1\", \"1\"));\n            \n            for (int i = 3; i < 8; i++)\n            {\n                theQueue.Write(new ServerEvent(i.ToString(), i.ToString()));\n            }    \n        }\n\n        [Test]\n        public void when_the_topic_has_no_last_event_return_everything_in_order()\n        {\n            theQueue.FindQueuedEvents(new FakeTopic{LastEventId = null}).Select(x => x.Id)\n                .ShouldHaveTheSameElementsAs(\"2\", \"1\", \"3\", \"4\", \"5\", \"6\", \"7\");\n\n            theQueue.FindQueuedEvents(new FakeTopic { LastEventId = string.Empty }).Select(x => x.Id)\n                .ShouldHaveTheSameElementsAs(\"2\", \"1\", \"3\", \"4\", \"5\", \"6\", \"7\");\n        }\n\n        [Test]\n        public void return_nothing_if_the_last_event_id_is_current()\n        {\n            theQueue.FindQueuedEvents(new FakeTopic(){LastEventId = \"7\"})\n                .Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void return_everything_if_the_event_id_does_not_match()\n        {\n            theQueue.FindQueuedEvents(new FakeTopic { LastEventId = \"random\" }).Select(x => x.Id)\n                .ShouldHaveTheSameElementsAs(\"2\", \"1\", \"3\", \"4\", \"5\", \"6\", \"7\");\n        }\n\n        [Test]\n        public void return_everything_if_the_topic_is_null()\n        {\n            theQueue.FindQueuedEvents(null).Select(x => x.Id)\n                .ShouldHaveTheSameElementsAs(\"2\", \"1\", \"3\", \"4\", \"5\", \"6\", \"7\");\n        }\n\n        [Test]\n        public void return_nothing_if_there_are_no_events()\n        {\n            theQueue.AllEvents.Clear();\n\n            theQueue.FindQueuedEvents(new FakeTopic() { LastEventId = null })\n                .Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void return_everything_following_if_the_last_topic_matches()\n        {\n            theQueue.FindQueuedEvents(new FakeTopic { LastEventId = \"1\" }).Select(x => x.Id)\n                .ShouldHaveTheSameElementsAs(\"3\", \"4\", \"5\", \"6\", \"7\");\n\n            theQueue.FindQueuedEvents(new FakeTopic { LastEventId = \"3\" }).Select(x => x.Id)\n                .ShouldHaveTheSameElementsAs(\"4\", \"5\", \"6\", \"7\");\n\n            theQueue.FindQueuedEvents(new FakeTopic { LastEventId = \"4\" }).Select(x => x.Id)\n                .ShouldHaveTheSameElementsAs(\"5\", \"6\", \"7\");\n\n            theQueue.FindQueuedEvents(new FakeTopic { LastEventId = \"6\" }).Select(x => x.Id)\n                .ShouldHaveTheSameElementsAs(\"7\");\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServerSentEvents/TopicChannelCacheTester.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuMVC.Core.ServerSentEvents;\nusing FubuMVC.Core.StructureMap;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServerSentEvents\n{\n    [TestFixture]\n    public class TopicChannelCacheTester : InteractionContext<TopicChannelCache>\n    {\n        private FakeAspNetShutDownDetector _shutdownDetector;\n\n        [SetUp]\n        protected override void  beforeEach()\n        {\n            _shutdownDetector = new FakeAspNetShutDownDetector();\n\n            Container.Configure(x =>\n            {\n                x.For(typeof (IEventQueueFactory<>)).Use(typeof (DefaultEventQueueFactory<>));\n                x.For<IServiceLocator>().Use<StructureMapServiceLocator>();\n                x.For<IAspNetShutDownDetector>().Use(_shutdownDetector);\n            });\n        }\n\n        [Test]\n        public void caches_against_a_single_topic_family()\n        {\n            var topic1 = new FakeTopic\n            {\n                Name = \"Tom\"\n            };\n\n            var topic2 = new FakeTopic\n            {\n                Name = \"Todd\"\n            };\n\n            ClassUnderTest.ChannelFor(topic1).ShouldNotBeNull();\n            ClassUnderTest.ChannelFor(topic1).ShouldBeTheSameAs(ClassUnderTest.ChannelFor(topic1));\n            ClassUnderTest.ChannelFor(topic1).ShouldBeTheSameAs(ClassUnderTest.ChannelFor(topic1));\n            ClassUnderTest.ChannelFor(topic1).ShouldBeTheSameAs(ClassUnderTest.ChannelFor(topic1));\n\n            ClassUnderTest.ChannelFor(topic2).ShouldBeTheSameAs(ClassUnderTest.ChannelFor(topic2));\n\n            ClassUnderTest.ChannelFor(topic1).ShouldNotBeTheSameAs(ClassUnderTest.ChannelFor(topic2));\n        }\n\n        [Test]\n        public void caches_against_a_multiple_topic_families()\n        {\n            // All relatives of mine from the same family.  In-law finally\n            // rebelled and named a child \"Parker\"\n            var topic1 = new FakeTopic\n            {\n                Name = \"Tom\"\n            };\n\n            var topic2 = new FakeTopic\n            {\n                Name = \"Todd\"\n            };\n\n            var topic3 = new DifferentTopic{\n                Name = \"Trevor\"\n            };\n\n            var topic4 = new DifferentTopic\n            {\n                Name = \"Trent\"\n            };\n\n            ClassUnderTest.ChannelFor(topic1).ShouldNotBeNull();\n            ClassUnderTest.ChannelFor(topic1).ShouldBeTheSameAs(ClassUnderTest.ChannelFor(topic1));\n            ClassUnderTest.ChannelFor(topic1).ShouldBeTheSameAs(ClassUnderTest.ChannelFor(topic1));\n            ClassUnderTest.ChannelFor(topic1).ShouldBeTheSameAs(ClassUnderTest.ChannelFor(topic1));\n\n            ClassUnderTest.ChannelFor(topic2).ShouldBeTheSameAs(ClassUnderTest.ChannelFor(topic2));\n\n            ClassUnderTest.ChannelFor(topic1).ShouldNotBeTheSameAs(ClassUnderTest.ChannelFor(topic2));\n\n            ClassUnderTest.ChannelFor(topic3).ShouldBeTheSameAs(ClassUnderTest.ChannelFor(topic3));\n\n            ClassUnderTest.ChannelFor(topic4).ShouldBeTheSameAs(ClassUnderTest.ChannelFor(topic4));\n\n            ClassUnderTest.ChannelFor(topic3).ShouldNotBeTheSameAs(ClassUnderTest.ChannelFor(topic4));\n        }\n\n        [Test]\n        public void disposes_on_asp_shutdown_event()\n        {\n            var topic1 = new FakeTopic\n            {\n                Name = \"Tom\"\n            };\n\n            var topic2 = new FakeTopic\n            {\n                Name = \"Todd\"\n            };\n\n            var channel1 = ClassUnderTest.ChannelFor(topic1);\n            var channel2 = ClassUnderTest.ChannelFor(topic2);\n\n            channel1.ShouldNotBeNull();\n            channel2.ShouldNotBeNull();\n\n            _shutdownDetector.Stop(true);\n\n            channel1.Channel.IsConnected().ShouldBeFalse();\n            channel2.Channel.IsConnected().ShouldBeFalse();\n\n            Exception<ObjectDisposedException>.ShouldBeThrownBy(() => ClassUnderTest.ChannelFor(topic1));\n            Exception<ObjectDisposedException>.ShouldBeThrownBy(() => ClassUnderTest.ChannelFor(topic2));\n        }\n    }\n\n    public class FakeAspNetShutDownDetector : IAspNetShutDownDetector\n    {\n        private Action _onShutdown;\n\n        public void Stop(bool immediate)\n        {\n            _onShutdown();\n        }\n\n        public void Dispose()\n        {\n            throw new NotImplementedException();\n        }\n\n        public void Register(Action onShutdown)\n        {\n            _onShutdown = onShutdown;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServerSentEvents/TopicFamilyTester.cs",
    "content": "using FubuMVC.Core;\nusing FubuMVC.Core.ServerSentEvents;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServerSentEvents\n{\n    [TestFixture]\n    public class TopicFamilyTester\n    {\n        [Test]\n        public void builds_and_caches_by_topic()\n        {\n            var factory = new DefaultEventQueueFactory<FakeTopic>();\n            var family = new TopicFamily<FakeTopic>(factory);\n\n            var topic1 = new FakeTopic{\n                Name = \"Tom\"\n            };\n\n            var topic2 = new FakeTopic\n            {\n                Name = \"Todd\"\n            };\n\n            family.ChannelFor(topic1).ShouldNotBeNull();\n            family.ChannelFor(topic1).ShouldBeTheSameAs(family.ChannelFor(topic1));\n            family.ChannelFor(topic1).ShouldBeTheSameAs(family.ChannelFor(topic1));\n            family.ChannelFor(topic1).ShouldBeTheSameAs(family.ChannelFor(topic1));\n            \n            family.ChannelFor(topic2).ShouldBeTheSameAs(family.ChannelFor(topic2));\n\n\n            family.ChannelFor(topic1).ShouldNotBeTheSameAs(family.ChannelFor(topic2));\n        }\n\n        [Test]\n        public void spin_up_pre_builds()\n        {\n            var factory = MockRepository.GenerateMock<IEventQueueFactory<FakeTopic>>();\n            var queue = new EventQueue<FakeTopic>();\n            var topic = new FakeTopic{\n                Name = \"Top\"\n            };\n\n            factory.Stub(x => x.BuildFor(topic)).Return(queue);\n\n            var family = new TopicFamily<FakeTopic>(factory);\n            family.SpinUpChannel(topic);\n\n            factory.AssertWasCalled(x => x.BuildFor(topic));\n        }\n    }\n\n    public class DifferentTopic : Topic\n    {\n        [RouteInput]\n        public string Name { get; set; }\n\n\n\n        public bool Equals(DifferentTopic other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return Equals(other.Name, Name);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (DifferentTopic)) return false;\n            return Equals((DifferentTopic) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Name != null ? Name.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Name: {0}\", Name);\n        }\n    }\n\n    public class FakeTopic : Topic\n    {\n        public string Name { get; set; }\n\n        public bool Equals(FakeTopic other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return Equals(other.Name, Name);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (FakeTopic)) return false;\n            return Equals((FakeTopic) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Name != null ? Name.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Name: {0}\", Name);\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Configuration/ByTaskSchedulerMakerTester.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Scheduling;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Configuration\n{\n    [TestFixture]\n    public class ByTask_and_ByThread_SchedulerMakerTester\n    {\n        [Test]\n        public void builds_a_schedule_by_task()\n        {\n            var settings = new ThreadSettings\n            {\n                Count = 5\n            };\n\n            var channelNode = new ChannelNode();\n            new ByTaskScheduleMaker<ThreadSettings>(x => x.Count)\n                .As<ISettingsAware>()\n                .ApplySettings(settings, channelNode);\n\n            channelNode.Scheduler.ShouldBeOfType<TaskScheduler>()\n                .TaskCount.ShouldBe(5);\n\n        }\n\n        [Test]\n        public void builds_a_schedule_by_threads()\n        {\n            var settings = new ThreadSettings\n            {\n                Count = 7\n            };\n\n            var channelNode = new ChannelNode();\n            new ByThreadScheduleMaker<ThreadSettings>(x => x.Count)\n                .As<ISettingsAware>()\n                .ApplySettings(settings, channelNode);\n\n            channelNode.Scheduler.ShouldBeOfType<ThreadScheduler>()\n                .ThreadCount.ShouldBe(7);\n\n        }\n\n\n        public class ThreadSettings\n        {\n            public int Count { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Configuration/ChannelGraphTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Configuration\n{\n    [TestFixture]\n    public class ChannelGraphTester\n    {\n        [Test]\n        public void the_default_content_type_should_be_xml_serialization()\n        {\n            new ChannelGraph().DefaultContentType.ShouldBe(new XmlMessageSerializer().ContentType);\n        }\n\n        [Test]\n        public void to_key_by_expression()\n        {\n            ChannelGraph.ToKey<ChannelSettings>(x => x.Outbound)\n                        .ShouldBe(\"Channel:Outbound\");\n        }\n\n        [Test]\n        public void channel_for_by_accessor()\n        {\n            var graph = new ChannelGraph();\n            var channelNode = graph.ChannelFor<ChannelSettings>(x => x.Outbound);\n            channelNode\n                 .ShouldBeTheSameAs(graph.ChannelFor<ChannelSettings>(x => x.Outbound));\n\n\n            channelNode.Key.ShouldBe(\"Channel:Outbound\");\n            channelNode.SettingAddress.Name.ShouldBe(\"Outbound\");\n\n        }\n\n        [Test]\n        public void reading_settings()\n        {\n            var channel = new ChannelSettings\n            {\n                Outbound = new Uri(\"channel://outbound\"),\n                Downstream = new Uri(\"channel://downstream\")\n            };\n\n            var bus = new BusSettings\n            {\n                Outbound = new Uri(\"bus://outbound\"),\n                Downstream = new Uri(\"bus://downstream\")\n            };\n\n            var services = new InMemoryServiceLocator();\n            services.Add(channel);\n            services.Add(bus);\n\n            var graph = new ChannelGraph();\n            graph.ChannelFor<ChannelSettings>(x => x.Outbound);\n            graph.ChannelFor<ChannelSettings>(x => x.Downstream);\n            graph.ChannelFor<BusSettings>(x => x.Outbound);\n            graph.ChannelFor<BusSettings>(x => x.Downstream);\n\n            graph.ReadSettings(services);\n\n            graph.ChannelFor<ChannelSettings>(x => x.Outbound)\n                 .Uri.ShouldBe(channel.Outbound);\n            graph.ChannelFor<ChannelSettings>(x => x.Downstream)\n                 .Uri.ShouldBe(channel.Downstream);\n            graph.ChannelFor<BusSettings>(x => x.Outbound)\n                .Uri.ShouldBe(bus.Outbound);\n            graph.ChannelFor<BusSettings>(x => x.Downstream)\n                .Uri.ShouldBe(bus.Downstream);\n        }\n\n        [Test, Explicit(\"Too flaky, too slow. Replace w/ ST tests?\")]\n        public void start_receiving()\n        {\n            using (var graph = new ChannelGraph())\n            {\n                var node1 = graph.ChannelFor<ChannelSettings>(x => x.Upstream);\n                var node2 = graph.ChannelFor<ChannelSettings>(x => x.Downstream);\n                var node3 = graph.ChannelFor<BusSettings>(x => x.Upstream);\n                var node4 = graph.ChannelFor<BusSettings>(x => x.Downstream);\n\n                node1.Incoming = true;\n                node2.Incoming = false;\n                node3.Incoming = true;\n                node4.Incoming = false;\n\n                graph.Each(x => x.Channel = new FakeChannel());\n\n                graph.StartReceiving(MockRepository.GenerateMock<IHandlerPipeline>(), new RecordingLogger());\n\n                node1.Channel.As<FakeChannel>().ReceivedCount.ShouldBeGreaterThan(0);\n                node2.Channel.As<FakeChannel>().ReceivedCount.ShouldBe(0);\n                node3.Channel.As<FakeChannel>().ReceivedCount.ShouldBeGreaterThan(0);\n                node4.Channel.As<FakeChannel>().ReceivedCount.ShouldBe(0);\n            }\n        }\n\n        public class FakeChannel : IChannel\n        {\n            public void Dispose()\n            {\n            }\n\n            public Uri Address { get; private set; }\n            public ReceivingState Receive(IReceiver receiver)\n            {\n                ReceivedCount++;\n                return ReceivingState.CanContinueReceiving;\n            }\n\n            public int ReceivedCount { get; set; }\n\n            public void Send(byte[] data, IHeaders headers)\n            {\n            }\n        }\n\n\n    }\n\n    public class ChannelSettings\n    {\n        public Uri Outbound { get; set; }\n        public Uri Downstream { get; set; }\n        public Uri Upstream { get; set; }\n\n        public int UpstreamCount { get; set; }\n        public int OutboundCount { get; set; }\n    }\n\n    public class BusSettings\n    {\n        public Uri Outbound { get; set; }\n        public Uri Downstream { get; set; }\n        public Uri Upstream { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Configuration/ChannelGraph_can_read_thread_and_task_counts_from_config.cs",
    "content": "﻿using System;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Scheduling;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.ServiceBus.Configuration\n{\n    [TestFixture]\n    public class ChannelGraph_can_read_thread_and_task_counts_from_config\n    {\n        private Container theContainer;\n        private FubuRuntime theRuntime;\n        private ChannelGraph theGraph;\n        private ConfiguredSettings theSettings;\n\n        [TestFixtureSetUp]\n        public void SetUp()\n        {\n            InMemoryQueueManager.ClearAll();\n\n            theSettings = new ConfiguredSettings\n            {\n                Upstream = \"memory://foo\".ToUri(),\n                Outbound = \"memory://bar\".ToUri()\n            };\n\n            theContainer = new Container(x => {\n                x.For<ConfiguredSettings>().Use(theSettings);\n            });\n\n            var registry = new ConfiguredFubuRegistry();\n            registry.StructureMap(theContainer);\n\n            theRuntime = registry.ToRuntime();\n\n            theGraph = theContainer.GetInstance<ChannelGraph>();\n        }\n\n        [TearDown]\n        public void TearDown()\n        {\n            theRuntime.Dispose();\n        }\n\n        [Test]\n        public void can_read_settings_to_create_task_schedulers()\n        {\n            theContainer.GetInstance<ConfiguredSettings>()\n                .ShouldBeTheSameAs(theSettings);\n\n            theContainer.GetInstance<ConfiguredSettings>()\n                .OutboundCount.ShouldBe(5);\n\n            theContainer.GetInstance<ConfiguredSettings>()\n                .UpstreamCount.ShouldBe(7);\n\n            theGraph.ChannelFor<ConfiguredSettings>(x => x.Outbound)\n                .Scheduler\n                .ShouldBeOfType<TaskScheduler>()\n                .TaskCount.ShouldBe(theSettings.OutboundCount);\n        }\n\n\n        [Test]\n        public void can_read_settings_to_create_thread_schedulers()\n        {\n            theGraph.ChannelFor<ConfiguredSettings>(x => x.Upstream)\n                .Scheduler\n                .ShouldBeOfType<ThreadScheduler>()\n                .ThreadCount.ShouldBe(theSettings.UpstreamCount);\n        }\n\n        public class ConfiguredFubuRegistry : FubuTransportRegistry<ConfiguredSettings>\n        {\n            public ConfiguredFubuRegistry()\n            {\n                ServiceBus.EnableInMemoryTransport();\n\n                Channel(x => x.Outbound).ReadIncoming(ByTasks(x => x.OutboundCount));\n                Channel(x => x.Upstream).ReadIncoming(ByThreads(x => x.UpstreamCount));\n            }\n        }\n\n        public class ConfiguredSettings\n        {\n            private static int count = 0;\n\n            public ConfiguredSettings()\n            {\n                UpstreamCount = 7;\n                OutboundCount = 5;\n\n                count++;\n\n                if (count > 1) throw new Exception(\"Where is this getting built?\");\n\n            }\n\n            public Uri Outbound { get; set; }\n            public Uri Downstream { get; set; }\n            public Uri Upstream { get; set; }\n\n            public int UpstreamCount { get; private set; }\n            public int OutboundCount { get; private set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Configuration/ChannelGraph_has_to_be_a_StructureMap_singleton.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.ServiceBus.Configuration\n{\n    [TestFixture]\n    public class ChannelGraph_has_to_be_a_StructureMap_singleton\n    {\n        [Test]\n        public void must_be_a_singleton()\n        {\n            using (var runtime = FubuRuntime.BasicBus()\n                )\n            {\n                var container = runtime.Get<IContainer>();\n\n                var graph1 = container.GetInstance<ChannelGraph>();\n                var graph2 = container.GetInstance<ChannelGraph>();\n                var graph3 = container.GetInstance<ChannelGraph>();\n                var graph4 = container.GetInstance<ChannelGraph>();\n\n                graph1.ShouldBeTheSameAs(graph2);\n                graph1.ShouldBeTheSameAs(graph3);\n                graph1.ShouldBeTheSameAs(graph4);\n            }\n\n           \n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Configuration/ChannelNodeTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore.Logging;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\nusing FubuMVC.Core.ServiceBus.Runtime.Routing;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing FubuMVC.Core.ServiceBus.Scheduling;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\nusing TestMessages;\nusing Is = Rhino.Mocks.Constraints.Is;\n\nnamespace FubuMVC.Tests.ServiceBus.Configuration\n{\n    [TestFixture]\n    public class ChannelNodeTester\n    {\n        [Test]\n        public void default_channel_mode_is_delivery_guaranteed()\n        {\n            var node = new ChannelNode();\n            node.Mode.ShouldBe(ChannelMode.DeliveryGuaranteed);\n        }\n\n        [Test]\n        public void no_publishing_rules_is_always_false()\n        {\n            var node = new ChannelNode();\n            node.Publishes(typeof(NewUser)).ShouldBeFalse();\n        }\n\n        [Test]\n        public void publishes_is_true_if_any_rule_passes()\n        {\n            var node = new ChannelNode();\n            for (int i = 0; i < 5; i++)\n            {\n                node.Rules.Add(MockRepository.GenerateMock<IRoutingRule>());\n            }\n\n            node.Rules[2].Stub(x => x.Matches(typeof (NewUser))).Return(true);\n\n            node.Publishes(typeof(NewUser)).ShouldBeTrue();\n        }\n\n        [Test]\n        public void publishes_is_false_if_no_rules_pass()\n        {\n            var node = new ChannelNode();\n            for (int i = 0; i < 5; i++)\n            {\n                node.Rules.Add(MockRepository.GenerateMock<IRoutingRule>());\n            }\n\n\n            node.Publishes(typeof(NewUser)).ShouldBeFalse();\n        }\n\n        [Test]\n        public void setting_address_has_to_be_a_Uri()\n        {\n            var node = new ChannelNode();\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(() => {\n                node.SettingAddress = ReflectionHelper.GetAccessor<FakeThing>(x => x.Name);\n            });\n        }\n\n        [Test]\n        public void setting_default_content_type_will_clear_the_serializer()\n        {\n            var node = new ChannelNode();\n            node.DefaultSerializer = new BinarySerializer();\n\n            node.DefaultContentType = \"application/xml\";\n\n            node.DefaultContentType.ShouldBe(\"application/xml\");\n            node.DefaultSerializer.ShouldBeNull();\n        }\n\n        [Test]\n        public void setting_the_default_serializer_will_clear_the_default_content_type()\n        {\n            var node = new ChannelNode\n            {\n                DefaultContentType = \"application/xml\"\n            };\n\n            node.DefaultSerializer = new BinarySerializer();\n\n            node.DefaultSerializer.ShouldBeOfType<BinarySerializer>();\n            node.DefaultContentType.ShouldBeNull();\n        }\n\n        public void start_receiving()\n        {\n            if (DateTime.Today > new DateTime(2013, 11, 21))\n            {\n                Assert.Fail(\"Jeremy needs to fix the structure so that this is possible\");\n            }\n\n            \n\n//            var invoker = MockRepository.GenerateMock<IHandlerPipeline>();\n//\n//            var node = new ChannelNode\n//            {\n//                Incoming = true,\n//                Channel = MockRepository.GenerateMock<IChannel>(),\n//                Scheduler = new FakeScheduler()\n//            };\n//\n//            var graph = new ChannelGraph();\n//\n//            var startingVisitor = new StartingChannelNodeVisitor(new Receiver(invoker, graph, node));\n//            startingVisitor.Visit(node);\n//            \n//\n//\n//            node.Channel.AssertWasCalled(x => x.Receive(new Receiver(invoker, graph, node)));\n        }\n\n        [Test]\n        public void ReceiveFailed_error_handling()\n        {\n            var node = new ChannelNode\n            {\n                Key = \"TestKey\",\n                Channel = new FakeChannel { StopAfter = 2 },\n                Scheduler = new FakeScheduler()\n            };\n\n            var logger = new RecordingLogger();\n            node.StartReceiving(new RecordingReceiver(), logger);\n\n            logger.ErrorMessages.ShouldHaveCount(1);\n            logger.InfoMessages.ShouldHaveCount(1);\n            var message = logger.InfoMessages.Cast<ReceiveFailed>().Single();\n            message.ChannelKey.ShouldBe(node.Key);\n            message.Exception.ShouldNotBeNull();\n        }\n\n        [Test]\n        public void continuous_receive_errors()\n        {\n            var logger = new RecordingLogger();\n            var receiver = new RecordingReceiver();\n            var channel = MockRepository.GenerateMock<IChannel>();\n            channel.Expect(x => x.Receive(receiver))\n                .Throw(new Exception(\"I failed\"));\n\n            var node = new ChannelNode\n            {\n                Channel = channel,\n                Scheduler = new FakeScheduler()\n            };\n\n            Exception<ReceiveFailureException>.ShouldBeThrownBy(() =>\n            {\n                node.StartReceiving(receiver, logger);\n            });\n\n        }\n\n        [Test]\n        public void doesnt_throw_if_receive_only_fails_intermittently()\n        {\n            var channel = new FakeChannel { StopAfter = 20 };\n            var node = new ChannelNode\n            {\n                Channel = channel,\n                Scheduler = new FakeScheduler()\n            };\n\n            var logger = new RecordingLogger();\n            var receiver = new RecordingReceiver();\n            node.StartReceiving(receiver, logger);\n\n            channel.HitCount.ShouldBe(20);\n        }\n\n        public class FakeChannel : IChannel\n        {\n            public int HitCount { get; private set; }\n            public int StopAfter { get; set; }\n\n            public ReceivingState Receive(IReceiver receiver)\n            {\n                if (++HitCount >= StopAfter)\n                    return ReceivingState.StopReceiving;\n\n                // Throw every other time\n                if (HitCount % 2 == 1)\n                    throw new Exception(\"I failed\");\n\n                return ReceivingState.CanContinueReceiving;\n            }\n\n            public Uri Address { get; private set; }\n            public void Send(byte[] data, IHeaders headers)\n            {\n            }\n\n            public void Dispose()\n            {\n            }\n        }\n    }\n\n    public class FakeScheduler : IScheduler\n    {\n        public void Dispose()\n        {\n            \n        }\n\n        public void Start(Action action)\n        {\n            action();\n        }\n    }\n\n    [TestFixture]\n    public class when_sending_an_envelope\n    {\n        private Envelope theEnvelope;\n        private RecordingChannel theChannel;\n        private ChannelNode theNode;\n        private IEnvelopeSerializer theSerializer;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theEnvelope = new Envelope()\n            {\n                Data = new byte[]{1,2,3,4},\n                \n            };\n\n            theSerializer = MockRepository.GenerateMock<IEnvelopeSerializer>();\n\n            theEnvelope.Headers[\"A\"] = \"1\";\n            theEnvelope.Headers[\"B\"] = \"2\";\n            theEnvelope.Headers[\"C\"] = \"3\";\n            theEnvelope.CorrelationId = Guid.NewGuid().ToString();\n\n            theChannel = new RecordingChannel();\n\n            theNode = new ChannelNode\n            {\n                Channel = theChannel,\n                Key = \"Foo\",\n                Uri = \"foo://bar\".ToUri()\n            };\n\n            theNode.Modifiers.Add(new HeaderSetter(\"D\", \"4\"));\n            theNode.Modifiers.Add(new HeaderSetter(\"E\", \"5\"));\n\n            theNode.Send(theEnvelope, theSerializer);\n        }\n\n        public class HeaderSetter : IEnvelopeModifier\n        {\n            private readonly string _key;\n            private readonly string _value;\n\n            public HeaderSetter(string key, string value)\n            {\n                _key = key;\n                _value = value;\n            }\n\n            public void Modify(Envelope envelope)\n            {\n                envelope.Headers[_key] = _value;\n            }\n        }\n\n        [Test]\n        public void should_serialize_the_envelope()\n        {\n            theSerializer.AssertWasCalled(x => x.Serialize(null, theNode), x => {\n                x.Constraints(Is.Matching<Envelope>(o => {\n                    o.CorrelationId.ShouldBe(theEnvelope.CorrelationId);\n                    o.ShouldNotBeTheSameAs(theEnvelope);\n\n\n                    return true;\n                }), Is.Same(theNode));\n            });\n        }\n\n        [Test]\n        public void should_have_applied_the_channel_specific_modifiers()\n        {\n            var sentHeaders = theChannel.Sent.Single().Headers;\n            sentHeaders[\"D\"].ShouldBe(\"4\");\n            sentHeaders[\"E\"].ShouldBe(\"5\");\n        }\n\n \n        [Test]\n        public void should_have_sent_a_copy_of_the_headers()\n        {\n            var sentHeaders = theChannel.Sent.Single().Headers;\n            sentHeaders.ShouldNotBeTheSameAs(theEnvelope.Headers);\n\n            sentHeaders[\"A\"].ShouldBe(\"1\");\n            sentHeaders[\"B\"].ShouldBe(\"2\");\n            sentHeaders[\"C\"].ShouldBe(\"3\");\n        }\n\n        [Test]\n        public void sends_the_channel_key()\n        {\n            var sentHeaders = theChannel.Sent.Single().Headers;\n            sentHeaders[Envelope.ChannelKey].ShouldBe(theNode.Key);\n        }\n\n        [Test]\n        public void sends_the_destination_as_a_header()\n        {\n            var sentHeaders = theChannel.Sent.Single().Headers;\n            sentHeaders[Envelope.DestinationKey].ToUri().ShouldBe(theNode.Uri);\n        }\n    }\n\n    public class FakeThing\n    {\n        public string Name { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Configuration/Configuring_envelope_modifier_by_channel.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Configuration\n{\n    [TestFixture]\n    public class Configuring_envelope_modifier_by_channel\n    {\n        [Test]\n        public void can_register_modifiers_by_channel()\n        {\n            using (var runtime = FubuRuntime.For<ModifyingChannelRegistry>())\n            {\n                var graph = runtime.Get<ChannelGraph>();\n\n                graph.ChannelFor<BusSettings>(x => x.Downstream).Modifiers.Single().ShouldBeOfType<FooModifier>();\n                graph.ChannelFor<BusSettings>(x => x.Upstream).Modifiers.Single().ShouldBeOfType<BarModifier>();\n                graph.ChannelFor<BusSettings>(x => x.Outbound).Modifiers.Any().ShouldBeFalse();\n            }\n        }\n    }\n\n    public class ModifyingChannelRegistry : FubuTransportRegistry<BusSettings>\n    {\n        public ModifyingChannelRegistry()\n        {\n            ServiceBus.Enable(true);\n            ServiceBus.EnableInMemoryTransport();\n\n            Services.ReplaceService(InMemoryTransport.ToInMemory<BusSettings>());\n\n            Channel(x => x.Downstream).ModifyWith<FooModifier>();\n\n            Channel(x => x.Upstream).ModifyWith(new BarModifier());\n\n            Channel(x => x.Outbound).ReadIncoming();\n        }\n    }\n\n    \n\n    public class FooModifier : IEnvelopeModifier\n    {\n        public void Modify(Envelope envelope)\n        {\n            \n        }\n    }\n\n    public class BarModifier : IEnvelopeModifier\n    {\n        public void Modify(Envelope envelope)\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Configuration/FubuTransportRegistryTester.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Configuration\n{\n    [TestFixture]\n    public class FubuTransportRegistryTester\n    {\n        [Test]\n        public void able_to_derive_the_node_name_from_fubu_transport_registry_name()\n        {\n            using (var runtime = FubuRuntime.For<CustomTransportRegistry>())\n            {\n                runtime.Get<ChannelGraph>().Name.ShouldBe(\"custom\");\n            }\n\n            using (var fubuRuntime = FubuRuntime.For<OtherRegistry>())\n            {\n                fubuRuntime.Get<ChannelGraph>().Name.ShouldBe(\"other\");\n            }\n        }\n\n        [Test]\n        public void can_set_the_node_name_programmatically()\n        {\n            var registry = new FubuRegistry {NodeName = \"MyNode\"};\n\n\n            using (var fubuRuntime = registry.ToRuntime())\n            {\n                fubuRuntime.Get<ChannelGraph>().Name.ShouldBe(\"MyNode\");\n            }\n        }\n    }\n\n    public class CustomTransportRegistry : FubuRegistry\n    {\n        public CustomTransportRegistry()\n        {\n            ServiceBus.Enable(true);\n            ServiceBus.EnableInMemoryTransport();\n        }\n    }\n\n    public class OtherRegistry : FubuRegistry\n    {\n        public OtherRegistry()\n        {\n            ServiceBus.Enable(true);\n            ServiceBus.EnableInMemoryTransport();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Configuration/FubuTransportRegistry_register_subscription_requirements_Tester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.ServiceBus.Configuration\n{\n    [TestFixture]\n    public class FubuTransportRegistry_register_subscription_requirements_Tester\n    {\n        private FubuRuntime runtime;\n        private Container container;\n        private readonly BusSettings theSettings = InMemoryTransport.ToInMemory<BusSettings>();\n\n        [TestFixtureSetUp]\n        public void SetUp()\n        {\n            container = new Container(x => {\n                x.For<BusSettings>().Use(theSettings);\n            });\n\n            var registry = new SubscribedRegistry();\n            registry.StructureMap(container);\n            runtime = registry.ToRuntime();\n        }\n\n        [TestFixtureTearDown]\n        public void TearDown()\n        {\n            runtime.Dispose();\n        }\n\n\n        [Test]\n        public void the_expected_subscriptions()\n        {\n            var graph = container.GetInstance<ChannelGraph>();\n\n            var actual = container.GetAllInstances<ISubscriptionRequirement>()\n                .SelectMany(x => x.DetermineRequirements()).ToArray();\n\n            var expected = new Subscription[]\n            {\n                new Subscription(typeof(Message1)){NodeName = \"SubscribedService\", Receiver = InMemoryTransport.ReplyUriForGraph(graph), Source = theSettings.Outbound},\n                new Subscription(typeof(Message3)){NodeName = \"SubscribedService\", Receiver = InMemoryTransport.ReplyUriForGraph(graph), Source = theSettings.Outbound},\n                new Subscription(typeof(Message2)){NodeName = \"SubscribedService\", Receiver = theSettings.Inbound, Source = theSettings.Upstream},\n                new Subscription(typeof(Message4)){NodeName = \"SubscribedService\", Receiver = theSettings.Inbound, Source = theSettings.Upstream},\n            };\n\n            actual.ShouldHaveTheSameElementsAs(expected);\n        }\n\n\n\n        public class SubscribedRegistry : FubuTransportRegistry<BusSettings>\n        {\n            public SubscribedRegistry()\n            {\n                ServiceBus.EnableInMemoryTransport();\n                NodeName = \"SubscribedService\";\n\n                Channel(x => x.Inbound).ReadIncoming();\n\n                SubscribeLocally()\n                    .ToSource(x => x.Outbound)\n                    .ToMessage<Message1>()\n                    .ToMessage<Message3>();\n\n                SubscribeAt(x => x.Inbound)\n                    .ToSource(x => x.Upstream)\n                    .ToMessage<Message2>()\n                    .ToMessage<Message4>();\n            }\n        }\n\n        public class BusSettings\n        {\n            public Uri Inbound { get; set; }\n            public Uri Outbound { get; set; }\n            public Uri Upstream { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Configuration/HandlerChainTester.cs",
    "content": "﻿using System.Threading.Tasks;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\nusing NUnit.Framework;\nusing Shouldly;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.Tests.ServiceBus.Configuration\n{\n    [TestFixture]\n    public class HandlerChainTester\n    {\n\n        [Test]\n        public void normal_handler_chains_are_not_polling_jobs()\n        {\n            new HandlerChain().IsPollingJob().ShouldBeFalse();\n        }\n\n        [Test]\n        public void the_default_number_of_maximum_attempts_is_1()\n        {\n            new HandlerChain().MaximumAttempts.ShouldBe(1);\n        }\n\n        [Test]\n        public void HandlerChain_cannot_be_marked_as_partial_only_because_it_knocks_out_diagnostic_tracing()\n        {\n            new HandlerChain().IsPartialOnly.ShouldBeFalse();\n        }\n\n\n        [Test]\n        public void is_async_negative()\n        {\n            var chain = new HandlerChain();\n            chain.IsAsync.ShouldBeFalse();\n        \n            chain.AddToEnd(HandlerCall.For<GreenHandler>(x => x.Handle(new Message1())));\n\n            chain.IsAsync.ShouldBeFalse();\n        \n        }\n\n        [Test]\n        public void is_async_positive()\n        {\n            var chain = new HandlerChain();\n            chain.IsAsync.ShouldBeFalse();\n\n            chain.AddToEnd(HandlerCall.For<GreenHandler>(x => x.Handle(new Message1())));\n            chain.AddToEnd(HandlerCall.For<AsyncHandler>(x => x.Go(null)));\n\n            chain.IsAsync.ShouldBeTrue();\n\n\n        }\n\n        public class AsyncHandler\n        {\n            public Task Go(Message message)\n            {\n                return null;\n            }\n\n            public Task<string> Other(Message message)\n            {\n                return null;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Configuration/HandlerChain_Exception_Handling_Rules_Registration_Tester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Configuration\n{\n    [TestFixture]\n    public class HandlerChain_Exception_Handling_Rules_Registration_Tester\n    {\n        [Test]\n        public void retry_now()\n        {\n            var chain = new HandlerChain();\n\n            chain.OnException<NotImplementedException>()\n                .Retry();\n\n            var handler = chain.ErrorHandlers.Single().ShouldBeOfType<ErrorHandler>();\n            handler.Conditions.Single().ShouldBeOfType<ExceptionTypeMatch<NotImplementedException>>();\n            handler.Continuation(null, null).ShouldBeOfType<RetryNowContinuation>();\n        }\n\n        [Test]\n        public void requeue()\n        {\n            var chain = new HandlerChain();\n\n            chain.OnException<NotSupportedException>()\n                .Requeue();\n\n            var handler = chain.ErrorHandlers.Single().ShouldBeOfType<ErrorHandler>();\n            handler.Conditions.Single().ShouldBeOfType<ExceptionTypeMatch<NotSupportedException>>();\n            handler.Continuation(null, null).ShouldBeOfType<RequeueContinuation>();\n        }\n\n        [Test]\n        public void move_to_error_queue()\n        {\n            var chain = new HandlerChain();\n\n            chain.OnException<NotSupportedException>()\n                .MoveToErrorQueue();\n\n            chain.ErrorHandlers.Single().As<ErrorHandler>().Sources.Single().ShouldBeOfType<MoveToErrorQueueHandler<NotSupportedException>>();\n        }\n\n        [Test]\n        public void retry_later()\n        {\n            var chain = new HandlerChain();\n\n            chain.OnException<NotSupportedException>()\n                .RetryLater(10.Minutes());\n\n            var handler = chain.ErrorHandlers.Single().ShouldBeOfType<ErrorHandler>();\n            handler.Conditions.Single().ShouldBeOfType<ExceptionTypeMatch<NotSupportedException>>();\n            handler.Continuation(null, null).ShouldBeOfType<DelayedRetryContinuation>()\n                .Delay.ShouldBe(10.Minutes());\n        }\n\n        [Test]\n        public void add_multiple_continuations()\n        {\n            var chain = new HandlerChain();\n\n            chain.OnException<NotSupportedException>()\n                .RetryLater(10.Minutes())\n                .Then\n                .ContinueWith<TellTheSenderHeSentSomethingWrong>();\n\n            var handler = chain.ErrorHandlers.Single().ShouldBeOfType<ErrorHandler>();\n            var continuation = handler.Continuation(null, null).ShouldBeOfType<CompositeContinuation>();\n            continuation.Select(x => x.GetType())\n                .ShouldHaveTheSameElementsAs(typeof(DelayedRetryContinuation), typeof(TellTheSenderHeSentSomethingWrong));\n\n        }\n\n        [Test]\n        public void respond_with_message()\n        {\n            var chain = new HandlerChain();\n\n            chain.OnException<NotImplementedException>()\n                .RespondWithMessage((ex, env) => new object());\n\n            chain.ErrorHandlers.Single().As<ErrorHandler>().Sources.Single().ShouldBeOfType<RespondWithMessageHandler<NotImplementedException>>();\n        }\n    }\n\n    public class TellTheSenderHeSentSomethingWrong : IContinuation\n    {\n        public void Execute(Envelope envelope, IEnvelopeContext context)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Configuration/HandlerGraphTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Configuration\n{\n    [TestFixture]\n    public class HandlerGraphTester\n    {\n        private HandlerGraph theGraph;\n        private HandlerCall concreteCall;\n        private HandlerCall concreteCall2;\n        private HandlerCall concreteCall3;\n        private HandlerCall concreteCall4;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theGraph = new HandlerGraph();\n\n            concreteCall = HandlerCall.For<ConcreteHandler>(x => x.M1(null));\n\n            concreteCall.Clone().ShouldBe(concreteCall);\n\n\n            concreteCall2 = HandlerCall.For<ConcreteHandler>(x => x.M2(null));\n            concreteCall3 = HandlerCall.For<ConcreteHandler>(x => x.M3(null));\n            concreteCall4 = HandlerCall.For<ConcreteHandler>(x => x.M4(null));\n        }\n\n        [Test]\n        public void add_a_handler_for_a_concrete_class_creates_a_new_chain()\n        {\n            theGraph.Add(concreteCall);\n\n            var call = theGraph.ChainFor(typeof (Input)).OfType<HandlerCall>().Single();\n            call.ShouldBe(concreteCall);\n            call.ShouldNotBeTheSameAs(concreteCall);\n        }\n\n        [Test]\n        public void add_a_second_handler_for_a_concrete_class_appends_to_the_chain()\n        {\n            theGraph.Add(concreteCall);\n            theGraph.Add(concreteCall2);\n            theGraph.Add(concreteCall3);\n\n            theGraph.ShouldHaveCount(1);\n\n            var calls = theGraph.ChainFor(typeof (Input)).OfType<HandlerCall>().ToArray();\n            calls.ShouldHaveCount(3);\n            var firstCall = calls.ElementAt(0).ShouldBeOfType<HandlerCall>();\n\n            firstCall.Equals(concreteCall).ShouldBeTrue();\n\n            calls.ElementAt(0).ShouldNotBeTheSameAs(concreteCall);\n\n            calls.ElementAt(1).Equals(concreteCall2).ShouldBeTrue();\n            calls.ElementAt(1).ShouldNotBeTheSameAs(concreteCall2);\n\n        }\n\n        [Test]\n        public void add_a_different_input_type_adds_a_second_chain()\n        {\n            theGraph.Add(concreteCall);\n            theGraph.Add(concreteCall2);\n            theGraph.Add(concreteCall4);\n            theGraph.Add(concreteCall3);\n\n            theGraph.ShouldHaveCount(2);\n\n            theGraph.Select(x => x.InputType())\n                .ShouldHaveTheSameElementsAs(typeof(Input), typeof(DifferentInput));\n        }\n\n        [Test]\n        public void interfaces_are_applied_correctly()\n        {\n            var general = HandlerCall.For<ConcreteHandler>(x => x.General(null));\n            var specific1 = HandlerCall.For<ConcreteHandler>(x => x.Specific1(null));\n            var specific2 = HandlerCall.For<ConcreteHandler>(x => x.Specific2(null));\n        \n            theGraph.Add(general);\n            theGraph.Add(specific1);\n            theGraph.Add(specific2);\n\n            theGraph.ShouldHaveCount(2);\n            theGraph.Compile();\n\n            theGraph.ShouldHaveCount(2);\n\n            theGraph.ChainFor(typeof (Concrete1)).Last().ShouldBeOfType<HandlerCall>()\n                    .InputType().ShouldBe(typeof (IMessage));\n\n            theGraph.ChainFor(typeof(Concrete2)).Last().ShouldBeOfType<HandlerCall>()\n                    .InputType().ShouldBe(typeof(IMessage));\n        }\n\n        [Test]\n        public void base_class_handlers_are_applied_correctly()\n        {\n            var baseHandler = HandlerCall.For<ConcreteHandler>(x => x.Base(null));\n            var derivedHandler = HandlerCall.For<ConcreteHandler>(x => x.Derived(null));\n\n            theGraph.Add(baseHandler);\n            theGraph.Add(derivedHandler);\n\n            theGraph.Compile();\n\n            theGraph.ShouldHaveCount(1);\n\n            theGraph.ChainFor(typeof(DerivedMessage)).Last().ShouldBeOfType<HandlerCall>()\n                .Equals(baseHandler).ShouldBeTrue();\n        }\n\n        [Test]\n        public void merging_adds_a_chain_for_all_new_message_type()\n        {\n            theGraph.Add(concreteCall);\n\n            var other = new HandlerGraph();\n            other.Add(concreteCall4);\n\n            theGraph.Import(other);\n\n            theGraph.Select(x => x.InputType())\n                .ShouldHaveTheSameElementsAs(typeof(Input), typeof(DifferentInput));\n        }\n\n        [Test]\n        public void merging_matching_chains_merges_the_handlers_for_the_same_message()\n        {\n            theGraph.Add(concreteCall);\n\n            var other = new HandlerGraph();\n            other.Add(concreteCall2);\n            other.Add(concreteCall3);\n\n            theGraph.Import(other);\n\n            theGraph.ShouldHaveCount(1);\n\n            var chain = theGraph.ChainFor(typeof (Input));\n            chain.ElementAt(0).Equals(concreteCall).ShouldBeTrue();\n            chain.ElementAt(1).Equals(concreteCall2).ShouldBeTrue();\n            chain.ElementAt(2).Equals(concreteCall3).ShouldBeTrue();\n\n        }\n\n        [Test]\n        public void applies_general_action_from_imported_graph()\n        {\n            var general = HandlerCall.For<ConcreteHandler>(x => x.General(null));\n            var specific1 = HandlerCall.For<ConcreteHandler>(x => x.Specific1(null));\n            var specific2 = HandlerCall.For<ConcreteHandler>(x => x.Specific2(null));\n        \n            theGraph.Add(specific1);\n\n            var other = new HandlerGraph();\n            other.Add(general);\n            other.Add(specific2);\n\n            theGraph.Import(other);\n\n            theGraph.Compile();\n\n            theGraph.ChainFor(typeof(Concrete1)).Last()\n                .Equals(general).ShouldBeTrue();\n\n            theGraph.ChainFor(typeof(Concrete2)).Last()\n                .Equals(general).ShouldBeTrue();\n\n\n        }\n\n        [Test]\n        public void compile_applies_modify_chain_attributes()\n        {\n            var specific1 = HandlerCall.For<ConcreteHandler>(x => x.Specific1(null));\n            var specific2 = HandlerCall.For<ConcreteHandler>(x => x.Specific2(null));\n\n            theGraph.Add(specific1);\n            theGraph.Add(specific2);\n\n            theGraph.Compile();\n\n            theGraph.ChainFor<Concrete1>().IsWrappedBy(typeof(BlueWrapper)).ShouldBeTrue();\n            theGraph.ChainFor<Concrete2>().IsWrappedBy(typeof(GreenWrapper)).ShouldBeTrue();\n        }\n    }\n\n    public class ConcreteHandler\n    {\n        public void M1(Input input){}\n        public void M2(Input input){}\n        public void M3(Input input){}\n\n        public void M4(DifferentInput input)\n        {\n        }\n\n        public void General(IMessage input){}\n\n        [WrapWith(typeof(BlueWrapper))]\n        public void Specific1(Concrete1 input){}\n\n        [WrapWith(typeof(GreenWrapper))]\n        public void Specific2(Concrete2 input){}\n\n        public void Base(BaseMesage message){}\n        public void Derived(DerivedMessage message){}\n    }\n\n    public interface IMessage{}\n    public class Concrete1 : IMessage{}\n    public class Concrete2 : IMessage{}\n\n    public abstract class BaseMesage\n    {\n    }\n\n    public class DerivedMessage : BaseMesage{}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Configuration/UriExtensionsTester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Configuration\n{\n    [TestFixture]\n    public class UriExtensionsTester\n    {\n        [Test]\n        public void can_handle_localhost_consistently()\n        {\n            var uri = new Uri(\"http://lOcAlHoSt/blahdee\");\n            var normalizedUri = uri.NormalizeLocalhost();\n\n            normalizedUri.ToString().ShouldBe(\"http://{0}/blahdee\".ToFormat(System.Environment.MachineName.ToLower()));\n        }\n\n        [Test]\n        public void can_handle_localhost_consistently_2()\n        {\n            var uri = new Uri(\"http://127.0.0.1/blahdee\");\n            var normalizedUri = uri.NormalizeLocalhost();\n            normalizedUri.ToString().ShouldBe(\"http://{0}/blahdee\".ToFormat(System.Environment.MachineName.ToLower()));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Diagnostics/MessageRecordListenerTester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Diagnostics\n{\n    [TestFixture]\n    public class MessageRecordListenerTester\n    {\n        [Test]\n        public void matches_on_message_record_types()\n        {\n            var listener = new MessageRecordListener(null);\n            listener.ListensFor(typeof(EnvelopeSent)).ShouldBeTrue();\n            listener.ListensFor(typeof(EnvelopeReceived)).ShouldBeTrue();\n            listener.ListensFor(typeof(ChainExecutionStarted)).ShouldBeTrue();\n            listener.ListensFor(typeof(ChainExecutionFinished)).ShouldBeTrue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Diagnostics/MessageRecordTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Diagnostics\n{\n    [TestFixture]\n    public class when_creating_a_message_record_from_envelope_token\n    {\n        private EnvelopeToken theToken;\n        private MessageRecord theRecord;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theToken = ObjectMother.EnvelopeWithMessage().ToToken();\n            theToken.ParentId = Guid.NewGuid().ToString();\n            theToken.Headers[\"A\"] = \"1\";\n            theToken.Headers[\"B\"] = \"2\";\n\n            theRecord = new MessageRecord(theToken);\n        }\n\n        [Test]\n        public void capture_the_correlation_id()\n        {\n            theRecord.Id.ShouldBe(theToken.CorrelationId);\n        }\n\n        [Test]\n        public void capture_the_parent_id()\n        {\n            theRecord.ParentId.ShouldBe(theToken.ParentId);\n        }\n\n        [Test]\n        public void capture_the_message_type()\n        {\n            theRecord.Type.ShouldBe(theToken.Message.GetType().FullName);\n        }\n\n        [Test]\n        public void capture_the_headers()\n        {\n            theRecord.Headers.ShouldContain(\"A=1\");\n            theRecord.Headers.ShouldContain(\"B=2\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Docs/Basics/ErrorHandlingSamples.cs",
    "content": "﻿using System;\nusing System.IO;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Tests.ServiceBus.Docs.Basics\n{\n    // SAMPLE: ErrorHandlingPolicySample\n    public class ErrorHandlingPolicy : HandlerChainPolicy\n    {\n        public override void Configure(HandlerChain handlerChain)\n        {\n            //when retrying, do so a maximum of 5 times\n            handlerChain.MaximumAttempts = 5;\n\n            //retry now\n            handlerChain.OnException<ConcurrencyException>()\n                .Retry();\n\n            //retry again 5 seconds from now\n            handlerChain.OnException<ConcurrencyException>()\n                .RetryLater(TimeSpan.FromSeconds(5));\n\n            //immediately move the error and original message to\n            //the error queue\n            handlerChain.OnException<FileNotFoundException>()\n                .MoveToErrorQueue();\n\n            //retries, but puts at the end of the line allowing other\n            //messages to be processed\n            handlerChain.OnException<Exception>()\n                .Requeue();\n        }\n    }\n    // ENDSAMPLE\n\n    // SAMPLE: ErrorHandlingTransportSample\n    public class TransportRegistryWithErrorPolicy : FubuRegistry\n    {\n        public TransportRegistryWithErrorPolicy()\n        {\n            //applies to all handler chains\n            Policies.Global.Add<ErrorHandlingPolicy>();\n\n            //applies policy only to chains created from this registry\n            Policies.Local.Add<ErrorHandlingPolicy>();\n        }\n    }\n    // ENDSAMPLE\n\n    public class ConcurrencyException : Exception\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Docs/Basics/PubSubSamples.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Tests.ServiceBus.Docs.Basics\n{\n    // SAMPLE: PubSubRoutingSample\n    public class AllEndpointsSettings\n    {\n        public Uri RemoteEndpoint { get; set; }\n        public Uri AnotherRemoteEndpoint { get; set; }\n        public Uri ThisEndpoint { get; set; }\n    }\n\n    public class RoutingSampleTransportRegistry : FubuTransportRegistry<AllEndpointsSettings>\n    {\n        public RoutingSampleTransportRegistry()\n        {\n            //route to remote endpoint all messages in this assembly\n            Channel(x => x.RemoteEndpoint)\n                .AcceptsMessagesInAssemblyContainingType<SampleMessage>();\n\n            //route all messages suffixed with Event to AnotherRemoteEndpoint\n            Channel(x => x.AnotherRemoteEndpoint)\n                .AcceptsMessages(x => x.Name.EndsWith(\"Event\"));\n\n            //Route messages suffixed with Command to ThisEndpoint\n            Channel(x => x.ThisEndpoint)\n                .AcceptsMessages(x => x.Name.EndsWith(\"Command\"))\n                //read messages from this 'Incoming' channel\n                .ReadIncoming();\n        }\n    }\n    // ENDSAMPLE\n\n    public class SampleMessage\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Docs/Basics/ReceivingSamples.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing FubuMVC.Core;\n\nnamespace FubuMVC.Tests.ServiceBus.Docs.Basics\n{\n    // SAMPLE: CustomHandlerNamingSample\n    public class CustomHandlerTransportRegistry : FubuRegistry\n    {\n        public CustomHandlerTransportRegistry()\n        {\n            Handlers.FindBy(x =>\n            {\n                //Define your own conventions here\n            });\n        }\n    }\n    // ENDSAMPLE\n\n    // SAMPLE: ReceivingSampleHandler\n    public class ReceivingSampleHandler\n    {\n        public void Handle(MyMessage message)\n        {\n            //do something\n        }\n\n        public async Task HandleAsync(MyMessage message)\n        {\n            await Task.Delay(100);\n            //do something\n        }\n\n        public MyResponse NameDoesntMatter(MyMessage message)\n        {\n            return new MyResponse();\n        }\n\n        public async Task<MyResponse> HandleWithResponseAsync(MyMessage message)\n        {\n            await Task.Delay(100);\n            return new MyResponse();\n        }\n    }\n    // ENDSAMPLE\n\n    public class MyMessage\n    {\n    }\n\n    public class MyResponse\n    {\n    }\n\n    // SAMPLE: ReceivingPolymorphismSample\n    public class LoginSucceededHandler\n    {\n        public void Handle(LoginSucceeded message)\n        {\n            //record success\n        }\n    }\n\n    public class LoginSuccededV2Handler\n    {\n        public void Handle(LoginSucceededV2 message)\n        {\n            //record time\n        }\n    }\n\n    public class LoginSucceeded\n    {\n        public string Username { get; set; }\n    }\n\n    public class LoginSucceededV2 : LoginSucceeded\n    {\n        public DateTime SucceededAt { get; set; }\n    }\n    // ENDSAMPLE\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Docs/Basics/SendingSamples.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Runtime.Cascading;\nusing FubuMVC.Core.ServiceBus.Web;\n\nnamespace FubuMVC.Tests.ServiceBus.Docs.Basics\n{\n    // SAMPLE: SendingSamples\n    public class SendingSamples\n    {\n        private readonly IServiceBus _bus;\n\n        public SendingSamples(IServiceBus bus)\n        {\n            _bus = bus;\n        }\n\n        public void FireAndForget()\n        {\n            _bus.Send(new MessageToSend());\n        }\n\n        public async Task SendWithAcknowledgement()\n        {\n            //Don't care about a specific response message, but rather acknowledgement\n            //that message was processed\n            await _bus.SendAndWait(new MessageToSend());\n        }\n\n        public void SendDelayedMessage()\n        {\n            _bus.DelaySend(new MessageToSend(), TimeSpan.FromMinutes(15));\n        }\n\n        public async Task<string> SendAndReply()\n        {\n            var response = await _bus.Request<Response>(new ExpectResponse());\n            return response.Message;\n        }\n    }\n    // ENDSAMPLE\n\n    public class ExpectResponse\n    {\n    }\n\n    public class Response\n    {\n        public string Message { get; set; }\n    }\n\n    public class NotResponding\n    {\n    }\n\n    public class MessageToSend\n    {\n    }\n\n    // SAMPLE: SendingFromHandlerSamples\n    public class SendingFromHandler\n    {\n        public RespondToSender HandleWithReply(ExpectResponse message)\n        {\n            //Send message only to the original sender\n            return new RespondToSender(new Response());\n        }\n\n        public Response HandleWithReplyOrPublish(MessageToSend message)\n        {\n            //Will reply to original sender if sender used bus.Request<Response>(message)\n            //Will also send message through routing rules in your TransportRegistry\n            return new Response();\n        }\n\n        public DelayedResponse HandleWithDelayedResponse(MessageToSend message)\n        {\n            //Route the message, but don't process it for 15 minutes\n            return new DelayedResponse(new Response(), TimeSpan.FromMinutes(15));\n        }\n\n        public IEnumerable<object> HandleAndSpawnMany(MessageToSend message)\n        {\n            yield return new RespondToSender(new Response());\n            yield return new NotResponding();\n            yield return new DelayedResponse(new NotResponding(), TimeSpan.FromMinutes(1));\n        }\n    }\n    // ENDSAMPLE\n\n    public class LoginInputModel\n    {\n    }\n\n    // SAMPLE: EndpointSendingSample\n    public class LoginEndpoint : ISendMessages\n    {\n        public MessageToSend post_my_route(LoginInputModel input)\n        {\n            //Send message using routing rules in TransportRegistry\n            return new MessageToSend();\n        }\n    }\n    // ENDSAMPLE\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Docs/GettingStarted/GettingStartedSettings.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus;\n\nnamespace FubuMVC.Tests.ServiceBus.Docs.GettingStarted\n{\n    // SAMPLE: GettingStartedSettings\n    public class GettingStartedSettings\n    {\n        public GettingStartedSettings()\n        {\n            //Defaulting to only in memory for sample\n            Uri = \"memory://gettingstarted\".ToUri();\n        }\n\n        public Uri Uri { get; set; }\n    }\n    // ENDSAMPLE\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Docs/GettingStarted/GettingStartedTransportRegistry.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace FubuMVC.Tests.ServiceBus.Docs.GettingStarted\n{\n    // SAMPLE: GettingStartedTransportRegistry\n    public class GettingStartedTransportRegistry : FubuTransportRegistry<GettingStartedSettings>\n    {\n        public GettingStartedTransportRegistry()\n        {\n            // You have to have at least one transport registered,\n            // so we're enabling the in memory transport for this sample;)\n            ServiceBus.EnableInMemoryTransport();\n\n            Channel(x => x.Uri)\n                //Routes messages in the in the getting started namespace to this channel\n                .AcceptsMessages(x => typeof(GettingStartedSettings).Namespace.Equals(x.Namespace))\n                .ReadIncoming();\n        }\n    }\n    // ENDSAMPLE\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Docs/GettingStarted/Handlers.cs",
    "content": "﻿using System;\n\nnamespace FubuMVC.Tests.ServiceBus.Docs.GettingStarted\n{\n    // SAMPLE: GettingStartedHandlers\n    public class StartPingHandler \n    {\n        public PingMessage Handle(StartPing start)\n        {\n            Console.WriteLine(\"Starting ping pong\");\n            return new PingMessage();\n        }\n\n        public void Handle(PongMessage pong)\n        {\n            Console.WriteLine(\"Received pong message\");\n        }\n    }\n\n    public class PingHandler\n    {\n        public PongMessage Handle(PingMessage ping)\n        {\n            Console.WriteLine(\"Received ping message\");\n            return new PongMessage();\n        }\n    }\n\n    public class PingMessage\n    {\n    }\n\n    public class StartPing\n    {\n    }\n\n    public class PongMessage\n    {\n    }\n    // ENDSAMPLE\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Docs/Polling/PollingJobSamples.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Polling;\n\nnamespace FubuMVC.Tests.ServiceBus.Docs.Polling\n{\n    // SAMPLE: PollingJobSamples\n    public class PollingJobSampleTransportRegistry : FubuRegistry\n    {\n        public PollingJobSampleTransportRegistry()\n        {\n            Polling.RunJob<PomodoroJob>().ScheduledAtInterval<PomodoroSettings>(x => x.Interval);\n        }\n    }\n\n    public class PomodoroJob : IJob\n    {\n        //Again, similar to message handlers this method is executed in a behavior chain\n        public void Execute(CancellationToken cancellation)\n        {\n            //Lock doors and shutdown all distractions, time to get work done\n        }\n    }\n\n    public class PomodoroSettings\n    {\n        public double Interval\n        {\n            get\n            {\n                return TimeSpan.FromMinutes(25).TotalMilliseconds;\n            }\n        }\n    }\n    // ENDSAMPLE\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Docs/Sagas/SagaRepositorySample.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Sagas;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Tests.ServiceBus.Docs.Sagas\n{\n    // SAMPLE: SagaRepositorySample\n    public class SagaRepositorySampleTransportRegistry : FubuRegistry\n    {\n        public SagaRepositorySampleTransportRegistry()\n        {\n            //if overriding the repository of a specific chain\n            Policies.Local.Add<AlternativeRepositoryPolicy>();\n\n            //or if globally overriding all saga persistence\n            ServiceBus.SagaStorage<AlternativeSagaStorage>();\n        }\n    }\n\n    public class AlternativeSagaStorage : ISagaStorage\n    {\n        public Instance RepositoryFor(SagaTypes sagaTypes)\n        {\n            //A good place if needing something like RavenDbSagaRepository\n            //The ObjectDef returned here will be a class that implements ISagaRepository\n            //InMemorySagaRepository is a good example of one to look at\n            return new ConfiguredInstance(typeof(SagaRepositorySample));\n        }\n    }\n\n    public class AlternativeRepositoryPolicy : HandlerChainPolicy\n    {\n        public override void Configure(HandlerChain handlerChain)\n        {\n            handlerChain.OfType<StatefulSagaNode>().Each(x =>\n            {\n                x.Repository = new ConfiguredInstance(typeof(SagaRepositorySample));\n            });\n        }\n\n        public override bool Matches(HandlerChain chain)\n        {\n            //You should apply condition to filter 'custom' repository to only the chain the needs it\n            return true;\n        }\n    }\n\n    public class SagaRepositorySample : ISagaRepository<DummyState, StartMessage>\n    {\n        public void Save(DummyState state, StartMessage message)\n        {\n            //Save changes to storage\n        }\n\n        public DummyState Find(StartMessage message)\n        {\n            //Passes the message for alternative lookup or key strategies.\n            //If the message has CorrelationId:Guid a custom saga repository is not necessary\n            //If state is found, the saga has already been started\n            return null;\n        }\n\n        public void Delete(DummyState state, StartMessage message)\n        {\n            //The saga was completed, now delete or expire the saga instance\n        }\n    }\n\n    public class StartMessage\n    {\n        public Guid CorrelationId { get; set; }\n    }\n\n    public class DummyState\n    {\n        public bool IsImportant { get; set; }\n    }\n    // ENDSAMPLE\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Docs/Sagas/SimpleSaga.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Sagas;\n\nnamespace FubuMVC.Tests.ServiceBus.Docs.Sagas\n{\n    // SAMPLE: OverviewSagaSample\n    public class SimpleSagaHandler : IStatefulSaga<SimpleSagaState>\n    {\n        public SimpleSagaState State { get; set; }\n\n        public bool IsCompleted()\n        {\n            return State.Switch == SwitchState.Exit;\n        }\n\n        public void Handle(StartCommand command)\n        {\n            State = new SimpleSagaState {Switch = SwitchState.Active};\n        }\n\n        public void Handle(PauseCommand command)\n        {\n            State.Switch = SwitchState.Paused;\n        }\n\n        public void Handle(ResumeCommand command)\n        {\n            if (State.Switch == SwitchState.Paused)\n            {\n                State.Switch = SwitchState.Paused;\n            }\n        }\n\n        public void Handle(EndCommand command)\n        {\n            State.Switch = SwitchState.Inactive;\n        }\n\n        public void Handle(ExitCommand command)\n        {\n            if (State.Switch == SwitchState.Inactive)\n            {\n                State.Switch = SwitchState.Exit;\n            }\n        }\n    }\n\n    public class SimpleSagaState\n    {\n        public SimpleSagaState()\n        {\n            Switch = SwitchState.Inactive;\n        }\n\n        public Guid Id { get; set; }\n        public SwitchState Switch { get; set; }\n    }\n\n    public enum SwitchState\n    {\n        Inactive,\n        Active,\n        Paused,\n        Exit\n    }\n\n    public class StartCommand\n    {\n        public Guid CorrelationId { get; set; }\n    }\n\n    public class PauseCommand\n    {\n        public Guid CorrelationId { get; set; }\n    }\n\n    public class ResumeCommand\n    {\n        public Guid CorrelationId { get; set; }\n    }\n\n    public class EndCommand\n    {\n        public Guid CorrelationId { get; set; }\n    }\n\n    public class ExitCommand\n    {\n        public Guid CorrelationId { get; set; }\n    }\n    // ENDSAMPLE\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Docs/Transports/LightningQueuesSamples.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Scheduling;\n\nnamespace FubuMVC.Tests.ServiceBus.Docs.Transports\n{\n    // SAMPLE: LQMultipleChannelsSample\n    public class LQSettings\n    {\n        public LQSettings()\n        {\n            BulkFile = new Uri(\"lq.tcp://localhost:2200/bulk_file_processing\");\n            RealTime = new Uri(\"lq.tcp://localhost:2200/real_time_message_processing\");\n        }\n\n        public Uri BulkFile { get; set; }\n        public Uri RealTime { get; set; }\n    }\n\n    public class MultipleChannelsLQTransport : FubuTransportRegistry<LQSettings>\n    {\n        public MultipleChannelsLQTransport()\n        {\n            Channel(x => x.BulkFile)\n                .ReadIncoming(); //Default is 1 task\n\n            Channel(x => x.RealTime)\n                .ReadIncoming(new TaskScheduler(6));\n        }\n    }\n    // ENDSAMPLE\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ErrorHandling/CompositeContinuation_integration_testing.cs",
    "content": "﻿using System;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ErrorHandling\n{\n    [TestFixture]\n    public class CompositeContinuation_integration_testing\n    {\n        [Test]\n        public void successfully_does_composite_continuations()\n        {\n            MessageThatThrowsHandler.ThrowsUntilAttemptNumber = 3;\n            MessageThatThrowsHandler.Attempts = 0;\n            MessageThatThrowsHandler.Successful = null;\n            CounterContinuation.Counter = 0;\n\n            using (var runtime = FubuRuntime.For<CountAndRetryOnExceptionRegistry>()\n                        \n                        )\n            {\n                var pipeline = runtime.Get<IHandlerPipeline>();\n                pipeline.InvokeNow(new Envelope {Message = new MessageThatThrows(), Callback = MockRepository.GenerateMock<IMessageCallback>()});\n            }\n\n            CounterContinuation.Counter.ShouldBe(2);\n            MessageThatThrowsHandler.Attempts.ShouldBe(3);\n            MessageThatThrowsHandler.Successful.ShouldNotBeNull();\n        }\n    }\n\n    public class CountAndRetryOnExceptionRegistry : FubuRegistry\n    {\n        public CountAndRetryOnExceptionRegistry()\n        {\n            ServiceBus.Enable(true);\n            ServiceBus.EnableInMemoryTransport();\n            Policies.Local.Add<CountAndRetryOnExceptionPolicy>();\n        }\n    }\n\n    public class CountAndRetryOnExceptionPolicy : HandlerChainPolicy\n    {\n        public override void Configure(HandlerChain handlerChain)\n        {\n            handlerChain.MaximumAttempts = 5;\n            handlerChain.OnException<UnauthorizedAccessException>()\n                .ContinueWith<CounterContinuation>()\n                .Then.Retry();\n        }\n    }\n\n    public class CounterContinuation : IContinuation\n    {\n        public static int Counter = 0;\n\n        public void Execute(Envelope envelope, IEnvelopeContext context)\n        {\n            ++Counter;\n        }\n    }\n\n    public class MessageThatThrows\n    {\n    }\n\n    public class MessageThatThrowsHandler\n    {\n        public static int ThrowsUntilAttemptNumber = 1;\n        public static int Attempts = 0;\n        public static MessageThatThrows Successful;\n\n        public void Consume(MessageThatThrows message)\n        {\n            ++Attempts;\n\n            if (Attempts < ThrowsUntilAttemptNumber)\n            {\n                throw new UnauthorizedAccessException();\n            }\n\n            Successful = message;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ErrorHandling/DelayedRetryContinuationTester.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.ServiceBus.ErrorHandling\n{\n    [TestFixture]\n    public class DelayedRetryContinuationTester\n    {\n        [Test]\n        public void do_as_a_delay_w_the_timespan_given()\n        {\n            var continuation = new DelayedRetryContinuation(5.Minutes());\n            var context = new TestEnvelopeContext();\n\n            var envelope = ObjectMother.Envelope();\n\n            continuation.Execute(envelope, context);\n\n            envelope.Callback.AssertWasCalled(x => x.MoveToDelayedUntil(context.SystemTime.UtcNow().AddMinutes(5)));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ErrorHandling/ErrorHandlerTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ErrorHandling\n{\n    [TestFixture]\n    public class ErrorHandlerTester\n    {\n        [Test]\n        public void continuation_is_move_to_error_queue_by_default()\n        {\n            new ErrorHandler().Continuation(null, null)\n                              .ShouldBeOfType<RequeueContinuation>();\n        }\n\n        [Test]\n        public void matches_with_no_rules_is_true()\n        {\n            new ErrorHandler().Matches(ObjectMother.Envelope(), new Exception())\n                              .ShouldBeTrue();\n        }\n\n        [Test]\n        public void if_there_are_conditions_all_conditions_must_be_true_to_match()\n        {\n            var exception = new Exception();\n            var envelope = ObjectMother.Envelope();\n\n            var matchingCondition1 = MockRepository.GenerateMock<IExceptionMatch>();\n            var matchingCondition2 = MockRepository.GenerateMock<IExceptionMatch>();\n            var matchingCondition3 = MockRepository.GenerateMock<IExceptionMatch>();\n            var conditionThatDoesNotMatch = MockRepository.GenerateMock<IExceptionMatch>();\n\n            matchingCondition1.Stub(x => x.Matches(envelope, exception)).Return(true);\n            matchingCondition2.Stub(x => x.Matches(envelope, exception)).Return(true);\n            matchingCondition3.Stub(x => x.Matches(envelope, exception)).Return(true);\n            conditionThatDoesNotMatch.Stub(x => x.Matches(envelope, exception)).Return(false);\n\n            var handler = new ErrorHandler();\n\n            handler.AddCondition(matchingCondition1);\n            handler.Matches(envelope, exception).ShouldBeTrue();\n\n            handler.AddCondition(matchingCondition2);\n            handler.Matches(envelope, exception).ShouldBeTrue();\n\n            handler.AddCondition(matchingCondition3);\n            handler.Matches(envelope, exception).ShouldBeTrue();\n\n            handler.AddCondition(conditionThatDoesNotMatch);\n            handler.Matches(envelope, exception).ShouldBeFalse();\n        }\n\n        [Test]\n        public void if_nothing_matches_do_not_return_a_continuation()\n        {\n            var exception = new Exception();\n            var envelope = ObjectMother.Envelope();\n\n            var conditionThatDoesNotMatch = MockRepository.GenerateMock<IExceptionMatch>();\n\n\n            var handler = new ErrorHandler();\n            handler.AddCondition(conditionThatDoesNotMatch);\n\n            handler.DetermineContinuation(envelope, exception)\n                   .ShouldBeNull();\n        }\n\n        [Test]\n        public void return_the_continuation_if_the_handler_matches()\n        {\n            var exception = new Exception();\n            var envelope = ObjectMother.Envelope();\n\n            var matchingCondition1 = MockRepository.GenerateMock<IExceptionMatch>();\n            matchingCondition1.Stub(x => x.Matches(envelope, exception)).Return(true);\n\n            var handler = new ErrorHandler();\n\n            handler.AddCondition(matchingCondition1);\n            handler.AddContinuation(MockRepository.GenerateMock<IContinuation>());\n\n            handler.Matches(envelope, exception).ShouldBeTrue();\n\n            handler.DetermineContinuation(envelope, exception)\n                   .ShouldBeTheSameAs(handler.Continuation(null, null));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ErrorHandling/ErrorHandling_services_have_descriptions_for_diagnostics.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ErrorHandling\n{\n    [TestFixture]\n    public class ErrorHandling_services_have_descriptions_for_diagnostics\n    {\n        [Test]\n        public void must_be_a_description_on_all_IErrorHandler_types()\n        {\n            IEnumerable<Type> types = typeof(IErrorHandler).Assembly.GetExportedTypes()\n                .Where(x => x.IsConcreteTypeOf<IErrorHandler>())\n                .Where(x => !Description.HasExplicitDescription(x));\n\n            types.Each(x => Debug.WriteLine(x.Name));\n\n            types.Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void must_be_a_description_on_all_IExceptionMatch_types()\n        {\n            IEnumerable<Type> types = typeof(IErrorHandler).Assembly.GetExportedTypes()\n                .Where(x => x.IsConcreteTypeOf<IExceptionMatch>())\n                .Where(x => !Description.HasExplicitDescription(x));\n\n            types.Each(x => Debug.WriteLine(x.Name));\n\n            types.Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void must_be_a_description_on_all_IContinuation_types()\n        {\n            IEnumerable<Type> types = typeof(IErrorHandler).Assembly.GetExportedTypes()\n                .Where(x => x.IsConcreteTypeOf<IContinuation>())\n                .Where(x => !Description.HasExplicitDescription(x));\n\n            types.Each(x => Debug.WriteLine(x.Name));\n\n            types.Any().ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ErrorHandling/ErrorReportTester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ErrorHandling\n{\n    [TestFixture]\n    public class when_creating_an_error_report_from_the_exception_and_envelope\n    {\n        Envelope envelope = ObjectMother.Envelope();\n        Exception exception  = new NotImplementedException();\n        private ErrorReport report;\n\n        [SetUp]\n        public void SetUp()\n        {\n            envelope.Message = new Message1();\n            report = new ErrorReport(envelope, exception);\n\n        }\n\n        [Test]\n        public void capture_the_exception_message()\n        {\n            report.ExceptionMessage.ShouldBe(exception.Message);\n        }\n\n        [Test]\n        public void capture_the_headers()\n        {\n            report.Headers.ShouldBe(envelope.Headers.ToDictionary());\n        }\n\n        [Test]\n        public void explanation_is_via_an_exception()\n        {\n            report.Explanation.ShouldBe(ErrorReport.ExceptionDetected);\n        }\n\n        [Test]\n        public void exception_stack_trace_is_captured()\n        {\n            report.ExceptionText.ShouldBe(exception.ToString());\n        }\n\n        [Test]\n        public void exception_type_is_captured()\n        {\n            report.ExceptionType.ShouldBe(exception.GetType().FullName);\n        }\n\n        [Test]\n        public void can_dehydrate_and_rehydrate_itself()\n        {\n            var data = report.Serialize();\n            var report2 = ErrorReport.Deserialize(data);\n\n            report2.Explanation.ShouldBe(report.Explanation);\n            report2.ExceptionMessage.ShouldBe(report.ExceptionMessage);\n            report2.ExceptionType.ShouldBe(report.ExceptionType);\n            report2.RawData.ShouldBe(report.RawData);\n\n            foreach (string key in report.Headers.Keys)\n            {\n                report2.Headers.Get(key).ShouldBe(report.Headers.Get(key));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ErrorHandling/ExceptionHandlerBehaviorTester.cs",
    "content": "﻿using System;\nusing System.Data;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ErrorHandling\n{\n    [TestFixture]\n    public class ExceptionHandlerBehaviorTester : InteractionContext<ExceptionHandlerBehavior>\n    {\n        private Envelope theEnvelope;\n        private HandlerChain theChain;\n\n        protected override void beforeEach()\n        {\n            theEnvelope = ObjectMother.Envelope();\n            theChain = new HandlerChain();\n            \n            Services.Inject(theEnvelope);\n            Services.Inject(theChain);\n        }\n\n        private void theInnerBehaviorThrows<T>() where T : Exception, new()\n        {\n            var ex = new T();\n\n            MockFor<IActionBehavior>().Expect(x => x.Invoke()).Throw(ex);\n        }\n\n        private void theInnerBehaviorThrowsAggregateExceptionWith<T1, T2, T3>()\n            where T1 : Exception, new()\n            where T2 : Exception, new()\n            where T3 : Exception, new()\n        {\n            var exception = new AggregateException(new T1(), new T2(), new T3());\n\n            MockFor<IActionBehavior>().Expect(x => x.Invoke()).Throw(exception);\n        }\n\n        private void theInnerBehaviorSucceeds()\n        {\n            MockFor<IActionBehavior>().Expect(x => x.Invoke()).Return(Task.CompletedTask);\n        }\n\n        private IContinuation theContinuationSetByTheErrorHandler()\n        {\n            var argumentsForCallsMadeOn = MockFor<IInvocationContext>().GetArgumentsForCallsMadeOn(x => x.Continuation = null);\n            return argumentsForCallsMadeOn\n                       [0][0] as IContinuation;\n        }\n\n        [Test]\n        public void do_nothing_if_the_inner_behavior_succeeds()\n        {\n            theInnerBehaviorSucceeds();\n\n            ClassUnderTest.Invoke().Wait();\n\n            MockFor<IInvocationContext>().AssertWasNotCalled(x => x.Continuation = null, x => x.IgnoreArguments());\n        }\n\n        [Test]\n        public void invoke_partial_just_delegates()\n        {\n            // hey, this has to work\n            ClassUnderTest.InvokePartial();\n\n            MockFor<IActionBehavior>().AssertWasCalled(x => x.InvokePartial());\n        }\n\n        [Test]\n        public void if_attempts_are_equal_to_the_max_and_there_is_a_failure_immediately_send_to_error_report()\n        {\n            theInnerBehaviorThrows<NotImplementedException>();\n\n            theEnvelope.Attempts = 2;\n            theChain.MaximumAttempts = 2;\n\n            ClassUnderTest.Invoke();\n\n            var continuation = theContinuationSetByTheErrorHandler()\n                .ShouldBeOfType<MoveToErrorQueue>();\n\n            continuation.Exception.ShouldBeOfType<NotImplementedException>();\n        }\n\n\n        [Test]\n        public void if_attempts_are_equal_to_the_max_and_there_is_a_failure_immediately_send_to_error_report_2()\n        {\n            theInnerBehaviorThrows<NotSupportedException>();\n\n            theEnvelope.Attempts = 2;\n            theChain.MaximumAttempts = 2;\n\n            ClassUnderTest.Invoke();\n\n            var continuation = theContinuationSetByTheErrorHandler()\n                .ShouldBeOfType<MoveToErrorQueue>();\n\n            continuation.Exception.ShouldBeOfType<NotSupportedException>();\n        }\n\n        [Test]\n        public void if_attempts_are_under_the_threshold_try_the_exception_rules()\n        {\n            theInnerBehaviorThrows<NotImplementedException>();\n\n            theEnvelope.Attempts = 1;\n            theChain.MaximumAttempts = 3;\n\n            var rule = new FakeExceptionRule<NotImplementedException>();\n            theChain.ErrorHandlers.Add(rule);\n\n            ClassUnderTest.Invoke();\n\n            theContinuationSetByTheErrorHandler().ShouldBeTheSameAs(rule.Continuation);\n        }\n\n        [Test]\n        public void chooses_the_first_non_null_continuation_from_an_error_handler()\n        {\n            var rule1 = new FakeExceptionRule<NotImplementedException>();\n            var rule2 = new FakeExceptionRule<NotSupportedException>();\n            var rule3 = new FakeExceptionRule<NotFiniteNumberException>();\n\n            theEnvelope.Attempts = 1;\n            theChain.MaximumAttempts = 3;\n\n            theChain.ErrorHandlers.Add(rule1);\n            theChain.ErrorHandlers.Add(rule2);\n            theChain.ErrorHandlers.Add(rule3);\n\n            theInnerBehaviorThrows<NotImplementedException>();\n\n            ClassUnderTest.Invoke();\n\n            theContinuationSetByTheErrorHandler().ShouldBeTheSameAs(rule1.Continuation);\n        }\n\n        [Test]\n        public void chooses_the_first_non_null_continuation_from_an_error_handler_2()\n        {\n            var rule1 = new FakeExceptionRule<NotImplementedException>();\n            var rule2 = new FakeExceptionRule<NotSupportedException>();\n            var rule3 = new FakeExceptionRule<NotFiniteNumberException>();\n\n            theEnvelope.Attempts = 1;\n            theChain.MaximumAttempts = 3;\n\n            theChain.ErrorHandlers.Add(rule1);\n            theChain.ErrorHandlers.Add(rule2);\n            theChain.ErrorHandlers.Add(rule3);\n\n            theInnerBehaviorThrows<NotSupportedException>();\n\n            ClassUnderTest.Invoke();\n\n            theContinuationSetByTheErrorHandler().ShouldBeTheSameAs(rule2.Continuation);\n        }\n\n        [Test]\n        public void chooses_the_first_non_null_continuation_from_an_error_handler_3()\n        {\n            var rule1 = new FakeExceptionRule<NotImplementedException>();\n            var rule2 = new FakeExceptionRule<NotSupportedException>();\n            var rule3 = new FakeExceptionRule<NotFiniteNumberException>();\n\n            theEnvelope.Attempts = 1;\n            theChain.MaximumAttempts = 3;\n\n            theChain.ErrorHandlers.Add(rule1);\n            theChain.ErrorHandlers.Add(rule2);\n            theChain.ErrorHandlers.Add(rule3);\n\n            theInnerBehaviorThrows<NotFiniteNumberException>();\n\n            ClassUnderTest.Invoke();\n\n            theContinuationSetByTheErrorHandler().ShouldBeTheSameAs(rule3.Continuation);\n        }\n\n        [Test]\n        public void none_of_the_rules_match_so_it_goes_to_the_error_queue()\n        {\n            var rule1 = new FakeExceptionRule<NotImplementedException>();\n            var rule2 = new FakeExceptionRule<NotSupportedException>();\n            var rule3 = new FakeExceptionRule<NotFiniteNumberException>();\n\n            theEnvelope.Attempts = 1;\n            theChain.MaximumAttempts = 3;\n\n            theChain.ErrorHandlers.Add(rule1);\n            theChain.ErrorHandlers.Add(rule2);\n            theChain.ErrorHandlers.Add(rule3);\n\n            theInnerBehaviorThrows<Exception>();\n\n            ClassUnderTest.Invoke();\n\n            var continuation = theContinuationSetByTheErrorHandler()\n                .ShouldBeOfType<MoveToErrorQueue>();\n\n            continuation.Exception.ShouldBeOfType<Exception>();\n        }\n\n        //==================Aggregate Exceptions================================\n        [Test]\n        public void if_attempts_are_under_the_threshold_try_the_exception_rules_with_aggregate()\n        {\n            theInnerBehaviorThrowsAggregateExceptionWith<NullReferenceException, NotImplementedException, NotSupportedException>();\n\n            theEnvelope.Attempts = 1;\n            theChain.MaximumAttempts = 3;\n\n            var rule = new FakeExceptionRule<NotImplementedException>();\n            theChain.ErrorHandlers.Add(rule);\n\n            ClassUnderTest.Invoke();\n\n            theContinuationSetByTheErrorHandler().ShouldBeTheSameAs(rule.Continuation);\n        }\n\n        [Test]\n        public void chooses_the_first_non_null_continuation_from_an_error_handler_for_the_first_matching_in_the_aggregate()\n        {\n            var rule1 = new FakeExceptionRule<NotImplementedException>();\n            var rule2 = new FakeExceptionRule<NotSupportedException>();\n            var rule3 = new FakeExceptionRule<NotFiniteNumberException>();\n\n            theEnvelope.Attempts = 1;\n            theChain.MaximumAttempts = 3;\n\n            theChain.ErrorHandlers.Add(rule1);\n            theChain.ErrorHandlers.Add(rule2);\n            theChain.ErrorHandlers.Add(rule3);\n\n            theInnerBehaviorThrowsAggregateExceptionWith<NullReferenceException, NotImplementedException, Exception>();\n\n\n            ClassUnderTest.Invoke();\n\n            theContinuationSetByTheErrorHandler().ShouldBeTheSameAs(rule1.Continuation);\n        }\n\n        [Test]\n        public void chooses_the_first_non_null_continuation_from_an_error_handler_for_the_first_matching_in_the_aggregate_2()\n        {\n            var rule1 = new FakeExceptionRule<NotImplementedException>();\n            var rule2 = new FakeExceptionRule<NotSupportedException>();\n            var rule3 = new FakeExceptionRule<NotFiniteNumberException>();\n\n            theEnvelope.Attempts = 1;\n            theChain.MaximumAttempts = 3;\n\n            theChain.ErrorHandlers.Add(rule1);\n            theChain.ErrorHandlers.Add(rule2);\n            theChain.ErrorHandlers.Add(rule3);\n\n            theInnerBehaviorThrowsAggregateExceptionWith<Exception, NullReferenceException, NotImplementedException>();\n\n\n            ClassUnderTest.Invoke();\n\n            theContinuationSetByTheErrorHandler().ShouldBeTheSameAs(rule1.Continuation);\n        }\n\n        [Test]\n        public void chooses_the_first_non_null_continuation_from_an_error_handler_2_for_aggregate()\n        {\n            var rule1 = new FakeExceptionRule<NotImplementedException>();\n            var rule2 = new FakeExceptionRule<NotSupportedException>();\n            var rule3 = new FakeExceptionRule<NotFiniteNumberException>();\n\n            theEnvelope.Attempts = 1;\n            theChain.MaximumAttempts = 3;\n\n            theChain.ErrorHandlers.Add(rule1);\n            theChain.ErrorHandlers.Add(rule2);\n            theChain.ErrorHandlers.Add(rule3);\n\n            theInnerBehaviorThrowsAggregateExceptionWith<Exception, ApplicationException, NotSupportedException>();\n\n            ClassUnderTest.Invoke();\n\n            theContinuationSetByTheErrorHandler().ShouldBeTheSameAs(rule2.Continuation);\n        }\n\n        [Test]\n        public void chooses_the_first_non_null_continuation_from_an_error_handler_3_with_aggregate()\n        {\n            var rule1 = new FakeExceptionRule<NotImplementedException>();\n            var rule2 = new FakeExceptionRule<NotSupportedException>();\n            var rule3 = new FakeExceptionRule<NotFiniteNumberException>();\n\n            theEnvelope.Attempts = 1;\n            theChain.MaximumAttempts = 3;\n\n            theChain.ErrorHandlers.Add(rule1);\n            theChain.ErrorHandlers.Add(rule2);\n            theChain.ErrorHandlers.Add(rule3);\n\n            theInnerBehaviorThrowsAggregateExceptionWith<Exception, NotFiniteNumberException, ApplicationException>();\n\n            ClassUnderTest.Invoke();\n\n            theContinuationSetByTheErrorHandler().ShouldBeTheSameAs(rule3.Continuation);\n        }\n\n        [Test]\n        public void none_of_the_rules_match_so_it_goes_to_the_error_queue_with_aggregate()\n        {\n            var rule1 = new FakeExceptionRule<NotImplementedException>();\n            var rule2 = new FakeExceptionRule<NotSupportedException>();\n            var rule3 = new FakeExceptionRule<NotFiniteNumberException>();\n\n            theEnvelope.Attempts = 1;\n            theChain.MaximumAttempts = 3;\n\n            theChain.ErrorHandlers.Add(rule1);\n            theChain.ErrorHandlers.Add(rule2);\n            theChain.ErrorHandlers.Add(rule3);\n\n            theInnerBehaviorThrowsAggregateExceptionWith<Exception, ApplicationException, DBConcurrencyException>();\n\n            ClassUnderTest.Invoke();\n\n            var continuation = theContinuationSetByTheErrorHandler()\n                .ShouldBeOfType<MoveToErrorQueue>();\n\n            continuation.Exception.ShouldBeOfType<AggregateException>();\n        }\n\n    }\n\n    public class FakeExceptionRule<T> : IErrorHandler where T : Exception\n    {\n        public readonly IContinuation Continuation = MockRepository.GenerateMock<IContinuation>();\n\n        public IContinuation DetermineContinuation(Envelope envelope, Exception ex)\n        {\n            return ex is T ? Continuation : null;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ErrorHandling/ExceptionMatchingExpression_and_ExpressionMatch_Tester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ErrorHandling\n{\n    [TestFixture]\n    public class ExceptionMatchingExpression_and_ExpressionMatch_Tester\n    {\n        private ExceptionMatch theMatch;\n        private ExceptionMatchExpression theExpression;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theExpression = new ExceptionMatchExpression(m => theMatch = m.As<ExceptionMatch>());\n        }\n\n        [Test]\n        public void message_contains()\n        {\n            var exception1 = new NotImplementedException(\"I don't like you\");\n            var exception2 = new NotImplementedException(\"It's all good\");\n\n            theExpression.MessageContains(\"like you\");\n\n            theMatch.Description.ShouldBe(\"Exception message contains 'like you'\");\n\n            theMatch.Matches(null, exception1).ShouldBeTrue();\n            theMatch.Matches(null, exception2).ShouldBeFalse();\n        }\n\n        [Test]\n        public void exception_type()\n        {\n            var exception1 = new NotImplementedException();\n            var exception2 = new NotSupportedException();\n\n            theExpression.IsType<NotImplementedException>();\n\n            theMatch.Description.ShouldBe(\"Exception type is \" + typeof (NotImplementedException).FullName);\n\n            theMatch.Matches(null, exception1).ShouldBeTrue();\n            theMatch.Matches(null, exception2).ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ErrorHandling/ExceptionTypeMatchTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ErrorHandling\n{\n    [TestFixture]\n    public class ExceptionTypeMatchTester\n    {\n        [Test]\n        public void matches_by_type()\n        {\n            var match = new ExceptionTypeMatch<NotImplementedException>();\n\n            // Hey, it's important that this code actually works\n            match.Matches(null, new NotImplementedException()).ShouldBeTrue();\n            match.Matches(null, new Exception()).ShouldBeFalse();\n            match.Matches(null, new NotSupportedException()).ShouldBeFalse();\n            match.Matches(null, new ApplicationException()).ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ErrorHandling/MoveToErrorQueueHandlerTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ErrorHandling\n{\n    [TestFixture]\n    public class MoveToErrorQueueHandlerTester\n    {\n        [Test]\n        public void do_nothing_if_it_is_not_the_right_exception()\n        {\n            var handler = new MoveToErrorQueueHandler<NotImplementedException>();\n            handler.DetermineContinuation(null, new Exception()).ShouldBeNull();\n            handler.DetermineContinuation(null, new ApplicationException()).ShouldBeNull();\n            handler.DetermineContinuation(null, new NotSupportedException()).ShouldBeNull();\n        }\n\n        [Test]\n        public void moves_to_the_error_queue_if_the_exception_matches()\n        {\n            var handler = new MoveToErrorQueueHandler<NotImplementedException>();\n            var ex = new NotImplementedException();\n\n            handler.DetermineContinuation(null, ex).ShouldBeOfType<MoveToErrorQueue>()\n                .Exception.ShouldBeTheSameAs(ex);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ErrorHandling/MovetoErrorQueueTester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ErrorHandling\n{\n    [TestFixture]\n    public class when_the_move_to_error_queue_continuation_executes\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            theEnvelope = ObjectMother.Envelope();\n            theException = new NotImplementedException();\n\n            theLogger = MockRepository.GenerateMock<ILogger>();\n\n            theContext = new TestEnvelopeContext();\n\n            new MoveToErrorQueue(theException).Execute(theEnvelope, theContext);\n        }\n\n        private Envelope theEnvelope;\n        private NotImplementedException theException;\n        private ILogger theLogger;\n        private TestEnvelopeContext theContext;\n\n        [Test]\n        public void should_add_a_new_error_report()\n        {\n            var report = theEnvelope.Callback.GetArgumentsForCallsMadeOn(x => x.MoveToErrors(null))\n                [0][0].As<ErrorReport>();\n\n            report.ExceptionText.ShouldBe(theException.ToString());\n        }\n\n        [Test]\n        public void should_send_a_failure_acknowledgement()\n        {\n            theContext.RecordedOutgoing.FailureAcknowledgementMessage\n                .ShouldBe(\"Moved message {0} to the Error Queue.\\n{1}\".ToFormat(theEnvelope.CorrelationId,\n                    theException));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ErrorHandling/RequeueContinuationTester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.ErrorHandling;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.ServiceBus.ErrorHandling\n{\n    [TestFixture]\n    public class RequeueContinuationTester\n    {\n        [Test]\n        public void executing_just_puts_it_back_in_line_at_the_back_of_the_queue()\n        {\n            var envelope = ObjectMother.Envelope();\n\n            new RequeueContinuation().Execute(envelope, new TestEnvelopeContext());\n\n            envelope.Callback.AssertWasCalled(x => x.Requeue());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ErrorHandling/RespondWithMessageContinuationTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ErrorHandling\n{\n    [TestFixture]\n    public class RespondWithMessageContinuationTester\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            _envelope = ObjectMother.Envelope();\n            _message = new object();\n            _context = new TestEnvelopeContext();\n\n            new RespondWithMessageContinuation(_message).Execute(_envelope, _context);\n        }\n\n        private Envelope _envelope;\n        private object _message;\n        private TestEnvelopeContext _context;\n\n        [Test]\n        public void should_send_the_message()\n        {\n            var message = _context.RecordedOutgoing.Outgoing.Single();\n            message.ShouldBeTheSameAs(_message);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ErrorHandling/RespondWithMessageHandlerTester.cs",
    "content": "﻿using System;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ErrorHandling\n{\n    [TestFixture]\n    public class RespondWithMessageHandlerTester\n    {\n        [Test]\n        public void describes_itself()\n        {\n            var handler = new RespondWithMessageHandler<Exception>(null);\n            var description = new Description();\n            handler.Describe(description);\n            description.Title.ShouldNotBeNull();\n        }\n\n        [Test]\n        public void returns_no_continuation_when_exception_does_not_match()\n        {\n            var handler = new RespondWithMessageHandler<NotImplementedException>(null);\n            handler.DetermineContinuation(null, new Exception()).ShouldBeNull();\n            handler.DetermineContinuation(null, new SystemException()).ShouldBeNull();\n            handler.DetermineContinuation(null, new NullReferenceException()).ShouldBeNull();\n        }\n\n        [Test]\n        public void responds_with_message_when_the_exception_matches()\n        {\n            var message = new object();\n            var handler = new RespondWithMessageHandler<Exception>((ex, env) => message);\n            handler.DetermineContinuation(null, new Exception())\n                .ShouldBeOfType<RespondWithMessageContinuation>()\n                .Message.ShouldBeTheSameAs(message);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ErrorHandling/RetryNowContinuationTester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.ServiceBus.ErrorHandling\n{\n    [TestFixture]\n    public class RetryNowContinuationTester\n    {\n        [Test]\n        public void just_calls_through_to_the_context_pipeline_to_do_it_again()\n        {\n            var continuation = new RetryNowContinuation();\n\n            var handlerPipeline = MockRepository.GenerateMock<IHandlerPipeline>();\n            var context = new TestEnvelopeContext(handlerPipeline);\n\n            var theEnvelope = ObjectMother.Envelope();\n            continuation.Execute(theEnvelope, context);\n\n            handlerPipeline.AssertWasCalled(x => x.Invoke(theEnvelope, context));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ErrorHandling/RetryNow_integration_testing.cs",
    "content": "﻿using System.Data;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ErrorHandling\n{\n    [TestFixture]\n    public class RetryNow_integration_testing\n    {\n        [Test]\n        public void successfully_retries_now()\n        {\n            MessageThatBombsHandler.Throws = 2;\n            MessageThatBombsHandler.Attempts = 0;\n            MessageThatBombsHandler.Successful = null;\n\n            using (var runtime = FubuRuntime.For<RetryNoOnDbConcurrencyRegistry>()\n                        \n                        )\n            {\n                var pipeline = runtime.Get<IHandlerPipeline>();\n                pipeline.InvokeNow(new Envelope {Message = new MessageThatBombs(), Callback = MockRepository.GenerateMock<IMessageCallback>()});\n            }\n\n            MessageThatBombsHandler.Successful.ShouldNotBeNull();\n            MessageThatBombsHandler.Attempts.ShouldBeGreaterThan(1);\n        }\n    }\n\n    public class RetryNoOnDbConcurrencyRegistry : FubuRegistry\n    {\n        public RetryNoOnDbConcurrencyRegistry()\n        {\n            ServiceBus.Enable(true);\n            ServiceBus.EnableInMemoryTransport();\n            Policies.Local.Add<RetryNowOnDbConcurrencyException>();\n        }\n    }\n\n\n    public class RetryNowOnDbConcurrencyException : HandlerChainPolicy\n    {\n        public override void Configure(HandlerChain handlerChain)\n        {\n            handlerChain.MaximumAttempts = 5;\n            handlerChain.OnException<DBConcurrencyException>()\n                .Retry();\n        }\n    }\n\n    public class MessageThatBombs\n    {\n    }\n\n    public class MessageThatBombsHandler\n    {\n        public static int Throws = 3;\n        public static int Attempts = 0;\n        public static MessageThatBombs Successful;\n\n        public void Consume(MessageThatBombs message)\n        {\n            Attempts++;\n\n            if (Attempts <= Throws)\n            {\n                throw new DBConcurrencyException();\n            }\n\n            Successful = message;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Events/EventAggregatorTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Events;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Events\n{\n    [TestFixture]\n    public class EventAggregatorTester\n    {\n        private EventAggregator events;\n        private StubMessage1Handler handler;\n        private RecordingLogger recordingLogger;\n\n        [SetUp]\n        public void SetUp()\n        {\n            recordingLogger = new RecordingLogger();\n\n            events = new EventAggregator(() => recordingLogger, new IListener[0]);\n\n            handler = new StubMessage1Handler();\n            events.AddListener(handler);\n        }\n\n        [Test]\n        public void simple_handlers_registered()\n        {\n            var theMessage = new Message1();\n            events.SendMessage(theMessage);\n\n            Wait.Until(() => handler.Message != null);\n\n            handler.Message.ShouldBeTheSameAs(theMessage);\n        }\n\n        [Test]\n        public void send_message_to_all_listeners_for_a_message_type()\n        {\n            var listener1 = new StubListener<Message1>();\n            var listener2 = new StubListener<Message1>();\n            var listener3 = new StubListener<Message1>();\n            var listener4 = new StubListener<Message2>();\n\n            events.AddListeners(listener1, listener2, listener3, this, listener4);\n\n            var message1 = new Message1();\n            var message2 = new Message2();\n\n            events.SendMessage(message1);\n            events.SendMessage(message2);\n\n            Wait.Until(\n                () =>\n                    listener1.LastMessage != null && listener2.LastMessage != null && listener3.LastMessage != null &&\n                    listener4.LastMessage != null);\n\n            listener1.LastMessage.ShouldBeTheSameAs(message1);\n            listener2.LastMessage.ShouldBeTheSameAs(message1);\n            listener3.LastMessage.ShouldBeTheSameAs(message1);\n\n            listener4.LastMessage.ShouldBeTheSameAs(message2);\n        }\n\n        [Test]\n        public void listeners_can_fail_one_at_a_time()\n        {\n            var listener1 = new StubListener<Message1>();\n            var listener2 = new StubListener<Message1>();\n            var listener3 = new StubListener<Message1>();\n            var listener4 = new StubListener<Message2>();\n\n            events.AddListeners(listener1, listener2, listener3, this, listener4);\n            events.AddListener(new ErrorCausingHandler());\n\n            var message1 = new Message1();\n            var message2 = new Message2();\n\n            events.SendMessage(message1);\n            events.SendMessage(message2);\n\n            Wait.Until(\n                () =>\n                    listener1.LastMessage != null && listener2.LastMessage != null && listener3.LastMessage != null &&\n                    listener4.LastMessage != null);\n\n            listener1.LastMessage.ShouldBeTheSameAs(message1);\n            listener2.LastMessage.ShouldBeTheSameAs(message1);\n            listener3.LastMessage.ShouldBeTheSameAs(message1);\n\n            listener4.LastMessage.ShouldBeTheSameAs(message2);\n        }\n\n        [Test]\n        public void exposes_all_the_listeners()\n        {\n            var listener1 = new StubListener<Message1>();\n            var listener2 = new StubListener<Message1>();\n            var listener3 = new StubListener<Message1>();\n            var listener4 = new StubListener<Message2>();\n\n            events.AddListeners(listener1, listener2, listener3, this, listener4);\n\n            var listeners = events.Listeners.ToArray();\n            var intersection = listeners.Intersect(new object[] {handler, this, listener1, listener2, listener3, listener4}).ToArray();\n            listeners.Length.ShouldBe(intersection.Length);\n        }\n\n        [Test]\n        public void send_message_that_creates_on_the_fly()\n        {\n            var listener1 = new StubListener<Message1>();\n            events.AddListener(listener1);\n\n            events.SendMessage<Message1>();\n\n            Wait.Until(() => listener1.LastMessage != null);\n\n\n            listener1.LastMessage.ShouldBeOfType<Message1>();\n        }\n\n        [Test]\n        public void remove_listener()\n        {\n            var listener1 = new StubListener<Message1>();\n            var listener2 = new StubListener<Message1>();\n            var listener3 = new StubListener<Message1>();\n            var listener4 = new StubListener<Message2>();\n\n            var listener5 = MockRepository.GenerateMock<IListener<Message1>>();\n            events.AddListeners(listener1, listener2, listener3, this, listener4, listener5);\n\n            var message1 = new Message1();\n\n\n            events.RemoveListener(listener5);\n            events.SendMessage(message1);\n\n            listener5.AssertWasNotCalled(x => x.Handle(message1));\n        }\n\n        [Test]\n        public void prune_expired_listeners_based_on_the_expired_property()\n        {\n            var listener1 = new StubListener<Message1>();\n            var listener2 = new StubListener<Message1>();\n            var listener3 = new StubListener<Message1>();\n            var listener4 = new StubListener<Message2>();\n\n            var listener5 = new ExpiringListener {IsExpired = true};\n            var listener6 = new ExpiringListener {IsExpired = true};\n            var listener7 = new ExpiringListener {IsExpired = false};\n\n            events.AddListeners(listener1, listener2, listener3, listener4, listener5, listener6, listener7);\n\n            events.PruneExpiredListeners(DateTime.Now);\n\n            // non-expiring listeners should be untouched\n            events.Listeners.ShouldContain(listener1);\n            events.Listeners.ShouldContain(listener2);\n            events.Listeners.ShouldContain(listener3);\n            events.Listeners.ShouldContain(listener4);\n\n            // expired expiring listeners should be removed\n            events.Listeners.ShouldNotContain(listener5);\n            events.Listeners.ShouldNotContain(listener6);\n\n            // not-expired expiring listener should not be removed\n            events.Listeners.ShouldContain(listener7);\n        }\n\n        [Test]\n        public void prune_expired_listeners_based_on_time()\n        {\n            var now = DateTime.Today.AddHours(5);\n\n            var listener1 = new StubListener<Message1>();\n            var listener2 = new StubListener<Message1>();\n            var listener3 = new StubListener<Message1>();\n            var listener4 = new StubListener<Message2>();\n\n            var listener5 = new ExpiringListener {ExpiresAt = now.AddMinutes(-1)};\n            var listener6 = new ExpiringListener {ExpiresAt = now.AddMinutes(-1)};\n            var listener7 = new ExpiringListener {ExpiresAt = now.AddMinutes(1)};\n\n            events.AddListeners(listener1, listener2, listener3, listener4, listener5, listener6, listener7);\n\n            events.PruneExpiredListeners(now);\n\n            // non-expiring listeners should be untouched\n            events.Listeners.ShouldContain(listener1);\n            events.Listeners.ShouldContain(listener2);\n            events.Listeners.ShouldContain(listener3);\n            events.Listeners.ShouldContain(listener4);\n\n            // expired expiring listeners should be removed\n            events.Listeners.ShouldNotContain(listener5);\n            events.Listeners.ShouldNotContain(listener6);\n\n            // not-expired expiring listener should not be removed\n\n            listener7.IsExpired(now).ShouldBeFalse();\n            events.Listeners.ShouldContain(listener7);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Events/ExpiringListenerCleanupTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Events;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Events\n{\n    [TestFixture]\n    public class ExpiringListenerCleanupTester : InteractionContext<ExpiringListenerCleanup>\n    {\n        [Test]\n        public void execute_prunes_for_the_current_time()\n        {\n            LocalSystemTime = DateTime.Today.AddHours(8);\n\n            ClassUnderTest.Execute(new CancellationToken());\n\n            MockFor<IEventAggregator>().AssertWasCalled(x => x.PruneExpiredListeners(UtcSystemTime));\n        }\n    }\n\n    [TestFixture]\n    public class Expiring_listener_polling_job_is_registered\n    {\n        [Test]\n        public void the_cleanup_job_is_registered()\n        {\n            using (var runtime = FubuRuntime.BasicBus()\n                )\n            {\n                runtime.Get<IPollingJobs>()\n                    .Any(x => x is PollingJob<ExpiringListenerCleanup, TransportSettings>)\n                    .ShouldBeTrue();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/FakeHandlers.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime.Cascading;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n\n    public interface ITargetHandler\n    {\n        string Message { get; set; }\n        Output OneInOneOut(Input input);\n        void OneInZeroOut(Input input);\n        object OneInManyOut(Input input);\n        void ZeroInZeroOut();\n\n        void ManyIn(Input i1, Input i2);\n\n        IImmediateContinuation ReturnsInterface(Input input);\n        bool ReturnsValueType(Input input);\n    }\n\n    public class Input\n    {\n    }\n\n    public class DifferentInput\n    {\n        \n    }\n\n    public class SpecialInput : Input\n    {\n\n    }\n\n    public class Output\n    {\n    }\n    \n    public interface IInput { }\n    public abstract class InputBase { }\n    public class Input1 : InputBase, IInput { }\n    public class Input2 { }\n\n    public class SomeHandler\n    {\n        public void Interface(IInput input) { }\n        public void BaseClass(InputBase input) { }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/FubuTransportRegistry_HandlerSource_registration_Tester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    [TestFixture]\n    public class FubuTransportRegistry_HandlerSource_registration_Tester\n    {\n        [Test]\n        public void can_register_a_handler_source_by_explicit_config()\n        {\n            using (var runtime = FubuRuntime.BasicBus(x =>\n            {\n                x.Handlers.DisableDefaultHandlerSource();\n                x.Handlers.FindBy(source =>\n                {\n                    source.UseThisAssembly();\n                    source.IncludeTypesNamed(name => name.Contains(\"FooHandler\"));\n                });\n            }))\n            {\n                var graph = runtime.Behaviors;\n\n\n                var handlers =\n                    graph.Chains.SelectMany(x => x.OfType<HandlerCall>())\n                        .Where(x => x.HandlerType.Assembly != typeof (HandlerCall).Assembly)\n                        .Select(x => x.HandlerType)\n                        .ToArray();\n\n\n                handlers.ShouldContain(typeof (MyFooHandler));\n                handlers.ShouldContain(typeof (MyOtherFooHandler));\n            }\n        }\n\n        [Test]\n        public void extra_handler_sources_are_additive()\n        {\n            using (var runtime = FubuRuntime.BasicBus(x => { x.Handlers.Include<RandomThing>(); }))\n            {\n                var graph = runtime.Behaviors;\n\n                var handlerTypes =\n                    graph.Chains.SelectMany(x => x.OfType<HandlerCall>()).Select(x => x.HandlerType).ToArray();\n                handlerTypes.ShouldContain(typeof (MyOtherConsumer));\n                handlerTypes.ShouldContain(typeof (MyFooHandler));\n                handlerTypes.ShouldContain(typeof (RandomThing));\n            }\n        }\n    }\n\n    public class RandomThing\n    {\n        public void Consume(Message1 message1)\n        {\n        }\n    }\n\n    public class MyFooHandler\n    {\n        public void Handle(Message1 message1)\n        {\n        }\n    }\n\n    public class MyOtherFooHandler\n    {\n        public void Handle(Message2 message2)\n        {\n        }\n    }\n\n    public class MissingCompletedSaga\n    {\n        public SuccessSagaState State { get; set; }\n    }\n\n    public class MissingStateSaga\n    {\n        public bool IsCompleted { get; set; }\n    }\n\n    public class SuccessMatchesTestSaga\n    {\n        public bool IsCompleted { get; set; }\n        public SuccessSagaState State { get; set; }\n    }\n\n    public class NoSagaSuffix\n    {\n        public bool IsCompleted { get; set; }\n        public SuccessSagaState State { get; set; }\n    }\n\n    public class SuccessSagaState\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/FubuTransportRegistry_application_of_policies_Tester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    [TestFixture]\n    public class FubuTransportRegistry_application_of_policies_Tester\n    {\n        [Test]\n        public void policies_can_be_applied_locally()\n        {\n            var graph = BehaviorGraph.BuildFrom(x =>\n            {\n                x.Handlers.DisableDefaultHandlerSource();\n\n                x.Import<BlueRegistry>();\n                x.Import<GreenRegistry>();\n                x.Policies.ChainSource<SystemLevelHandlers>(); // This would be here by extensions normally\n            });\n\n            var cache = new ChainResolutionCache(graph);\n\n            cache.FindUniqueByType(typeof (Message1)).IsWrappedBy(typeof (GreenWrapper)).ShouldBeTrue();\n            cache.FindUniqueByType(typeof (Message2)).IsWrappedBy(typeof (GreenWrapper)).ShouldBeTrue();\n            cache.FindUniqueByType(typeof (Message3)).IsWrappedBy(typeof (GreenWrapper)).ShouldBeTrue();\n\n            cache.FindUniqueByType(typeof (Message4)).IsWrappedBy(typeof (GreenWrapper)).ShouldBeFalse();\n            cache.FindUniqueByType(typeof (Message5)).IsWrappedBy(typeof (GreenWrapper)).ShouldBeFalse();\n            cache.FindUniqueByType(typeof (Message6)).IsWrappedBy(typeof (GreenWrapper)).ShouldBeFalse();\n\n            cache.FindUniqueByType(typeof (Message1)).IsWrappedBy(typeof (BlueWrapper)).ShouldBeFalse();\n            cache.FindUniqueByType(typeof (Message2)).IsWrappedBy(typeof (BlueWrapper)).ShouldBeFalse();\n            cache.FindUniqueByType(typeof (Message3)).IsWrappedBy(typeof (BlueWrapper)).ShouldBeFalse();\n\n            cache.FindUniqueByType(typeof (Message4)).IsWrappedBy(typeof (BlueWrapper)).ShouldBeTrue();\n            cache.FindUniqueByType(typeof (Message5)).IsWrappedBy(typeof (BlueWrapper)).ShouldBeTrue();\n            cache.FindUniqueByType(typeof (Message6)).IsWrappedBy(typeof (BlueWrapper)).ShouldBeTrue();\n        }\n\n        [Test]\n        public void global_policies_on_all_handlers()\n        {\n            var graph = BehaviorGraph.BuildFrom(x =>\n            {\n                x.Handlers.DisableDefaultHandlerSource();\n\n                x.Import<BlueRegistry>();\n                x.Import<GreenRegistry>();\n                x.Import<RedRegistry>();\n\n                x.Policies.ChainSource<SystemLevelHandlers>(); \n            });\n\n            graph.Chains.Any(x => x is HandlerChain).ShouldBeTrue();\n            graph.Chains.OfType<HandlerChain>()\n                .Each(chain => { chain.IsWrappedBy(typeof (RedWrapper)).ShouldBeTrue(); });\n        }\n\n        [Test]\n        public void does_not_apply_policies_to_fubumvc_handlers()\n        {\n            var graph = BehaviorGraph.BuildFrom(x =>\n            {\n                x.Handlers.DisableDefaultHandlerSource();\n\n                x.Import<BlueRegistry>();\n                x.Import<GreenRegistry>();\n                x.Import<RedRegistry>();\n\n                x.Policies.ChainSource<SystemLevelHandlers>(); \n            });\n\n            graph.ChainFor<SomethingEndpoint>(x => x.get_hello())\n                .IsWrappedBy(typeof (RedWrapper))\n                .ShouldBeFalse();\n        }\n    }\n\n    public class RedRegistry : FubuPackageRegistry\n    {\n        public RedRegistry()\n        {\n            Actions.DisableDefaultActionSource();\n\n            Actions.FindBy(x => x.ExcludeTypes(_ => true));\n            Policies.Global.Add<WrapPolicy<RedWrapper>>();\n        }\n    }\n\n    public class GreenRegistry : FubuPackageRegistry\n    {\n        public GreenRegistry()\n        {\n            Actions.DisableDefaultActionSource();\n\n            Actions.FindBy(x => x.ExcludeTypes(_ => true));\n            Handlers.DisableDefaultHandlerSource();\n            Handlers.Include<GreenHandler>();\n            Policies.Local.Add<WrapPolicy<GreenWrapper>>();\n        }\n    }\n\n    public class BlueRegistry : FubuPackageRegistry\n    {\n        public BlueRegistry()\n        {\n            Actions.FindBy(x => x.ExcludeTypes(_ => true));\n            Actions.DisableDefaultActionSource();\n\n            Handlers.DisableDefaultHandlerSource();\n            Handlers.Include<BlueHandler>();\n            Policies.Local.Add<WrapPolicy<BlueWrapper>>();\n        }\n    }\n\n    public class GreenHandler\n    {\n        public void Handle(Message1 message)\n        {\n        }\n\n        public void Handle(Message2 message)\n        {\n        }\n\n        public void Handle(Message3 message)\n        {\n        }\n    }\n\n    public class BlueHandler\n    {\n        public void Handle(Message4 message)\n        {\n        }\n\n        public void Handle(Message5 message)\n        {\n        }\n\n        public void Handle(Message6 message)\n        {\n        }\n    }\n\n    public class WrapPolicy<T> : HandlerChainPolicy where T : IActionBehavior\n    {\n        public override void Configure(HandlerChain handlerChain)\n        {\n            handlerChain.InsertFirst(new Wrapper(typeof (T)));\n        }\n    }\n\n    public class GreenWrapper : WrappingBehavior\n    {\n        protected override Task invoke(Func<Task> func)\n        {\n            return func();\n        }\n    }\n\n    public class BlueWrapper : WrappingBehavior\n    {\n        protected override Task invoke(Func<Task> func)\n        {\n            return func();\n        }\n    }\n\n    public class RedWrapper : WrappingBehavior\n    {\n        protected override Task invoke(Func<Task> func)\n        {\n            return func();\n        }\n    }\n\n    public class FakeBehavior4 : WrappingBehavior\n    {\n        protected override Task invoke(Func<Task> func)\n        {\n            return func();\n        }\n    }\n\n    public class SomethingEndpoint\n    {\n        public string get_hello()\n        {\n            return \"hello\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/FubuTransportRegistry_default_handler_source_policies_spec.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Registration;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    [TestFixture]\n    public class FubuTransportRegistry_default_handler_source_policies_spec\n    {\n        [Test]\n        public void should_automatically_pick_up_classes_suffixed_with_Handler()\n        {\n            using (var runtime = FubuRuntime.BasicBus())\n            {\n                runtime.Behaviors.ChainFor(typeof(Message1)).OfType<HandlerCall>().Any(x => x.HandlerType == typeof(MyNewHandler))\n                .ShouldBeTrue();\n            }\n\n        }\n\n        [Test]\n        public void should_automatically_pick_up_classes_suffixed_with_Consumer()\n        {\n            using (var runtime = FubuRuntime.BasicBus())\n            {\n                runtime.Behaviors.ChainFor(typeof(Message1)).OfType<HandlerCall>().Any(x => x.HandlerType == typeof(MyNewConsumer))\n                .ShouldBeTrue();\n            }\n        }\n\n        [Test]\n        public void default_handler_sources_are_not_used_if_a_custom_one_is_registered_and_disabled()\n        {\n            using (var runtime = FubuRuntime.BasicBus(r =>\n            {\n                r.Handlers.DisableDefaultHandlerSource();\n                r.Handlers.FindBy<MyFunkyHandlerSource>();\n            }))\n            {\n                runtime.Behaviors.ChainFor(typeof (Message1)).OfType<HandlerCall>().Select(x => x.HandlerType)\n                .Single().ShouldBe(typeof (MyFunkySpaceAgeProcessor));\n            }\n\n        }\n\n        [Test]\n        public void default_handler_sources_are_not_used_if_a_custom_one_is_registered_2_and_disabled()\n        {\n            using (var runtime = FubuRuntime.BasicBus(r =>\n            {\n                r.Handlers.FindBy(new MyFunkyHandlerSource());\n                r.Handlers.DisableDefaultHandlerSource();\n            }))\n            {\n                runtime.Behaviors.ChainFor(typeof(Message1)).OfType<HandlerCall>().Select(x => x.HandlerType)\n                .Single().ShouldBe(typeof(MyFunkySpaceAgeProcessor));\n            }\n\n\n        }\n\n        [Test]\n        public void can_override_the_default_handler_source_by_explicits_and_disabled()\n        {\n            using (var runtime = FubuRuntime.BasicBus(r =>\n            {\n                r.Handlers.FindBy(x => x.IncludeClassesSuffixedWithConsumer());\n\n                r.Handlers.DisableDefaultHandlerSource();\n            }))\n            {\n                var graph = runtime.Behaviors;\n                graph.ChainFor(typeof(Message1)).OfType<HandlerCall>().Any(x => x.HandlerType == typeof(MyNewConsumer))\n                    .ShouldBeTrue();\n\n                graph.ChainFor(typeof(Message1)).OfType<HandlerCall>().Any(x => x.HandlerType == typeof(MyNewHandler))\n                    .ShouldBeFalse();\n            }\n\n\n        }\n    }\n\n\n    public class MyFunkyHandlerSource : IHandlerSource\n    {\n        public Task<HandlerCall[]> FindCalls(Assembly applicationAssembly)\n        {\n            return Task.Factory.StartNew(() => new [] { HandlerCall.For<MyFunkySpaceAgeProcessor>(x => x.Go(null)) });\n\n            \n        }\n    }\n\n    public class MyFunkySpaceAgeProcessor\n    {\n        public void Go(Message1 message){}\n    }\n\n    public class MyNewHandler\n    {\n        public void Go(Message1 input){}\n    }\n\n    public class MyNewConsumer\n    {\n        public void Go(Message1 input){}\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/FubuTransportServiceRegistry_spec.cs",
    "content": "﻿using FubuCore.Logging;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Events;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Cascading;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing FubuMVC.Core.ServiceBus.TestSupport;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    [TestFixture]\n    public class FubuTransportServiceRegistry_spec\n    {\n        [Test]\n        public void service_registrations()\n        {\n            using (var runtime = FubuRuntime.BasicBus())\n            {\n                var c = runtime.Get<IContainer>();\n\n\n                c.DefaultSingletonIs<ISubscriptionCache, SubscriptionCache>();\n                c.DefaultSingletonIs<ISagaStateCacheFactory, SagaStateCacheFactory>();\n                c.DefaultSingletonIs<IEventAggregator, EventAggregator>();\n\n                c.DefaultRegistrationIs<IServiceBus, Core.ServiceBus.ServiceBus>();\n                c.DefaultRegistrationIs<IEnvelopeSender, EnvelopeSender>();\n                c.DefaultRegistrationIs<IEnvelopeSerializer, EnvelopeSerializer>();\n                c.DefaultRegistrationIs<IChainInvoker, ChainInvoker>();\n                c.DefaultRegistrationIs<IMessageSerializer, XmlMessageSerializer>();\n                c.DefaultRegistrationIs<IHandlerPipeline, HandlerPipeline>();\n                c.DefaultRegistrationIs<IMessageExecutor, MessageExecutor>();\n                c.DefaultRegistrationIs<IOutgoingSender, OutgoingSender>();\n                c.DefaultRegistrationIs<ISubscriptionRepository, SubscriptionRepository>();\n\n\n                c.ShouldHaveRegistration<IActivator, ServiceBusActivator>();\n                c.ShouldHaveRegistration<ILogListener, EventAggregationListener>();\n\n                c.ShouldNotHaveRegistration<IActivator, TransportCleanupActivator>();\n            }\n        }\n\n\n        [Test]\n        public void service_registrations_when_mode_is_testing()\n        {\n            using (var runtime = FubuRuntime.BasicBus(x => x.Mode = \"testing\"))\n            {\n                var c = runtime.Get<IContainer>();\n\n                c.DefaultRegistrationIs<IMessagingSession, MessagingSession>();\n                c.ShouldHaveRegistration<ILogListener, MessageRecordListener>();\n            }\n        }\n\n\n        [Test]\n        public void service_registrations_when_not_in_testing_mode()\n        {\n            using (var runtime = FubuRuntime.BasicBus())\n            {\n                var c = runtime.Get<IContainer>();\n\n                c.Model.HasImplementationsFor<IMessagingSession>().ShouldBeFalse();\n                c.ShouldNotHaveRegistration<ILogListener, MessageRecordListener>();\n            }\n        }\n\n        [Test]\n        public void synchronous_event_aggregator_is_used_in_testing_mode()\n        {\n            using (var runtime = FubuRuntime.Basic(_ =>\n            {\n                _.Mode = \"testing\";\n                _.ServiceBus.Configure(x =>\n                {\n                    x.Enabled = true;\n                    x.InMemoryTransport = InMemoryTransportMode.Enabled;\n                });\n            }))\n            {\n                runtime.Get<IContainer>().DefaultSingletonIs<IEventAggregator, SynchronousEventAggregator>();\n            }\n        }\n\n        [Test]\n        public void TransportCleanupActivator_is_registered_if_FubuTransport_testing_mode_is_on()\n        {\n            using (var runtime = FubuRuntime.Basic(_ =>\n            {\n                _.Mode = \"testing\";\n                _.ServiceBus.Configure(x =>\n                {\n                    x.Enabled = true;\n                    x.InMemoryTransport = InMemoryTransportMode.Enabled;\n                });\n            }))\n            {\n                runtime.Get<IContainer>().ShouldHaveRegistration<IActivator, TransportCleanupActivator>();\n            }\n        }\n\n\n        [Test]\n        public void use_synchronous_event_aggregator_if_in_testing_mode()\n        {\n            using (var runtime = FubuRuntime.BasicBus(x => x.Mode = \"testing\"))\n            {\n                var c = runtime.Get<IContainer>();\n\n                c.DefaultSingletonIs<IEventAggregator, SynchronousEventAggregator>();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/FullStackConfigurationIntegrationTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    [TestFixture]\n    public class FullStackConfigurationIntegrationTester\n    {\n        [Test]\n        public void has_all_the_chains_we_expect()\n        {\n            using (var runtime = FubuRuntime.For<MyFirstTransport>())\n            {\n\n                var graph = runtime.Get<BehaviorGraph>();\n\n                graph.Chains.Count(x => typeof (Foo1) == x.InputType()).ShouldBeGreaterThanOrEqualTo(1);\n                graph.Chains.Count(x => typeof(Foo2) == x.InputType()).ShouldBeGreaterThanOrEqualTo(1);\n                graph.Chains.Count(x => typeof(Foo3) == x.InputType()).ShouldBeGreaterThanOrEqualTo(1);\n                graph.Chains.Count(x => typeof(Foo4) == x.InputType()).ShouldBeGreaterThanOrEqualTo(1);\n            }\n        }\n\n        [Test]\n        public void has_all_the_chains_we_expect_through_FubuApplication()\n        {\n            using (var runtime = FubuRuntime.For<MyFirstTransport>())\n            {\n\n                var graph = runtime.Get<BehaviorGraph>();\n\n                graph.Chains.Count(x => typeof(Foo1) == x.InputType()).ShouldBeGreaterThanOrEqualTo(1);\n                graph.Chains.Count(x => typeof(Foo2) == x.InputType()).ShouldBeGreaterThanOrEqualTo(1);\n                graph.Chains.Count(x => typeof(Foo3) == x.InputType()).ShouldBeGreaterThanOrEqualTo(1);\n                graph.Chains.Count(x => typeof(Foo4) == x.InputType()).ShouldBeGreaterThanOrEqualTo(1);\n            }\n        }\n    }\n\n\n    public class MyFirstTransport : FubuRegistry\n    {\n        public MyFirstTransport()\n        {\n            ServiceBus.EnableInMemoryTransport();\n            ServiceBus.Enable(true);\n        }\n    }\n\n\n    public class MyConsumer\n    {\n        public void Foo1(Foo1 input) { }\n        public void Foo2(Foo2 input) { }\n        public void Foo3(Foo3 input) { }\n    }\n\n    public class MyOtherConsumer\n    {\n        public void Foo2(Foo2 input) { }\n        public void Foo3(Foo3 input) { }\n        public void Foo4(Foo4 input) { }\n    }\n\n    public class Foo1 { }\n    public class Foo2 { }\n    public class Foo3 { }\n    public class Foo4 { }\n\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/IntegratedFubuTransportRegistryTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime.Routing;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing FubuMVC.Core.ServiceBus.Scheduling;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    [TestFixture]\n    public class IntegratedFubuTransportRegistryTester\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            theRegistry = new BusRegistry();\n            _behaviors = new Lazy<BehaviorGraph>(() =>\n            {\n                return BehaviorGraph.BuildFrom(theRegistry);\n            });\n\n            _channels = new Lazy<ChannelGraph>(() => _behaviors.Value.Settings.Get<ChannelGraph>());\n        }\n\n        private BusRegistry theRegistry;\n        private Lazy<ChannelGraph> _channels;\n        private Lazy<BehaviorGraph> _behaviors;\n\n\n        public ChannelGraph theChannels\n        {\n            get { return _channels.Value; }\n        }\n\n        public ChannelNode channelFor(Expression<Func<BusSettings, Uri>> expression)\n        {\n            return theChannels.ChannelFor(expression);\n        }\n\n        [Test]\n        public void set_channel_to_listening()\n        {\n            theRegistry.Channel(x => x.Upstream).ReadIncoming();\n\n            channelFor(x => x.Upstream).Incoming.ShouldBeTrue();\n            channelFor(x => x.Downstream).Incoming.ShouldBeFalse();\n        }\n\n        [Test]\n        public void set_channel_to_listening_override_thread_count()\n        {\n            theRegistry.Channel(x => x.Upstream).ReadIncoming(new ThreadScheduler(5));\n\n            channelFor(x => x.Upstream).Incoming.ShouldBeTrue();\n            channelFor(x => x.Upstream).Scheduler.As<ThreadScheduler>().ThreadCount.ShouldBe(5);\n\n            channelFor(x => x.Downstream).Incoming.ShouldBeFalse();\n        }\n\n        [Test]\n        public void set_the_default_content_type_by_serializer_type()\n        {\n            theRegistry.ServiceBus.DefaultSerializer<BinarySerializer>();\n\n            theChannels.DefaultContentType.ShouldBe(new BinarySerializer().ContentType);\n        }\n\n        [Test]\n        public void set_the_default_content_type_by_string()\n        {\n            theRegistry.ServiceBus.DefaultContentType(\"application/json\");\n            theChannels.DefaultContentType.ShouldBe(\"application/json\");\n        }\n\n        [Test]\n        public void set_the_default_content_type_for_a_channel_by_serializer()\n        {\n            theRegistry.Channel(x => x.Outbound).DefaultSerializer<BinarySerializer>();\n            theRegistry.Channel(x => x.Downstream).DefaultSerializer<XmlMessageSerializer>();\n            theRegistry.Channel(x => x.Upstream).DefaultSerializer<BasicJsonMessageSerializer>();\n\n            channelFor(x => x.Outbound).DefaultSerializer.ShouldBeOfType<BinarySerializer>();\n            channelFor(x => x.Downstream).DefaultSerializer.ShouldBeOfType<XmlMessageSerializer>();\n            channelFor(x => x.Upstream).DefaultSerializer.ShouldBeOfType<BasicJsonMessageSerializer>();\n        }\n\n        [Test]\n        public void set_the_default_content_type_for_a_channel_by_string()\n        {\n            theRegistry.Channel(x => x.Outbound).DefaultContentType(\"application/json\");\n            channelFor(x => x.Outbound).DefaultContentType.ShouldBe(\"application/json\");\n        }\n\n        [Test]\n        public void add_namespace_publishing_rule()\n        {\n            theRegistry.Channel(x => x.Outbound).AcceptsMessagesInNamespaceContainingType<BusSettings>();\n\n            channelFor(x => x.Outbound).Rules.Single()\n                .ShouldBe(NamespaceRule.For<BusSettings>());\n\n            channelFor(x => x.Upstream).Rules.Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void add_namespace_publishing_rule_2()\n        {\n            theRegistry.Channel(x => x.Outbound).AcceptsMessagesInNamespace(typeof (BusSettings).Namespace);\n\n            channelFor(x => x.Outbound).Rules.Single()\n                .ShouldBe(NamespaceRule.For<BusSettings>());\n\n            channelFor(x => x.Upstream).Rules.Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void add_assembly_publishing_rule()\n        {\n            theRegistry.Channel(x => x.Outbound).AcceptsMessagesInAssemblyContainingType<BusSettings>();\n\n            channelFor(x => x.Outbound).Rules.Single()\n                .ShouldBe(AssemblyRule.For<BusSettings>());\n\n            channelFor(x => x.Upstream).Rules.Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void add_assembly_publishing_rule_2()\n        {\n            theRegistry.Channel(x => x.Outbound).AcceptsMessagesInAssembly(typeof (BusSettings).Assembly.GetName().Name);\n\n            channelFor(x => x.Outbound).Rules.Single()\n                .ShouldBe(AssemblyRule.For<BusSettings>());\n\n            channelFor(x => x.Upstream).Rules.Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void add_single_type_rule()\n        {\n            theRegistry.Channel(x => x.Outbound).AcceptsMessage<BusSettings>();\n            channelFor(x => x.Outbound).Rules.Single()\n                .ShouldBeOfType<SingleTypeRoutingRule<BusSettings>>();\n\n            channelFor(x => x.Upstream).Rules.Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void add_single_type_rule_2()\n        {\n            theRegistry.Channel(x => x.Outbound).AcceptsMessage(typeof (BusSettings));\n            channelFor(x => x.Outbound).Rules.Single()\n                .ShouldBeOfType<SingleTypeRoutingRule<BusSettings>>();\n\n            channelFor(x => x.Upstream).Rules.Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void add_adhoc_rule()\n        {\n            theRegistry.Channel(x => x.Outbound).AcceptsMessages(type => type == typeof (BusSettings));\n\n            var rule = channelFor(x => x.Outbound).Rules.Single();\n\n            rule.ShouldBeOfType<LambdaRoutingRule>();\n            rule.Matches(typeof (BusSettings)).ShouldBeTrue();\n            rule.Matches(GetType()).ShouldBeFalse();\n        }\n\n        [Test]\n        public void add_custom_rule()\n        {\n            theRegistry.Channel(x => x.Outbound).AcceptsMessagesMatchingRule<CustomRule>();\n\n            channelFor(x => x.Outbound).Rules.Single()\n                .ShouldBeOfType<CustomRule>();\n        }\n    }\n\n    public class BusSettings\n    {\n        public BusSettings()\n        {\n            DownstreamCount = 2;\n        }\n\n        public Uri Outbound { get; set; }\n        public Uri Downstream { get; set; }\n        public Uri Upstream { get; set; }\n        public int DownstreamCount { get; private set; }\n    }\n\n    public class CustomRule : IRoutingRule\n    {\n        public bool Matches(Type type)\n        {\n            throw new NotImplementedException();\n        }\n\n        public string Describe()\n        {\n            return \"Custom!\";\n        }\n    }\n\n    public class BusRegistry : FubuTransportRegistry<BusSettings>\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Logging/EventAggregationListenerTester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Events;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Logging\n{\n    [TestFixture]\n    public class EventAggregationListenerTester : InteractionContext<EventAggregationListener>\n    {\n        [Test]\n        public void listens_to_events_in_FubuTransportation()\n        {\n            ClassUnderTest.ListensFor(typeof(ChainExecutionFinished)).ShouldBeTrue();\n            ClassUnderTest.ListensFor(typeof(ChainExecutionStarted)).ShouldBeTrue();\n        }\n\n        [Test]\n        public void does_not_listen_to_events_outside_of_FubuTransportation()\n        {\n            ClassUnderTest.ListensFor(GetType()).ShouldBeFalse();\n        }\n\n        [Test]\n        public void send_debug_message()\n        {\n            var message = new ChainExecutionFinished();\n\n            ClassUnderTest.DebugMessage(message);\n\n            MockFor<IEventAggregator>().AssertWasCalled(x => x.SendMessage(message));\n        }\n\n\n        [Test]\n        public void send_info_message()\n        {\n            var message = new ChainExecutionFinished();\n\n            ClassUnderTest.InfoMessage(message);\n\n            MockFor<IEventAggregator>().AssertWasCalled(x => x.SendMessage(message));\n        }\n\n        [Test]\n        public void debug_disabled()\n        {\n            Services.Inject(new TransportSettings\n            {\n                DebugEnabled = false\n            });\n\n            ClassUnderTest.IsDebugEnabled.ShouldBeFalse();\n        }\n\n        [Test]\n        public void debug_enabled()\n        {\n            Services.Inject(new TransportSettings\n            {\n                DebugEnabled = true\n            });\n\n            ClassUnderTest.IsDebugEnabled.ShouldBeTrue();\n        }\n\n\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/FakePersistentTask.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Monitoring;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring\n{\n    public class FakePersistentTask : IPersistentTask\n    {\n        public Exception ActivationException = null;\n        public Exception AssertAvailableException = null;\n        public Exception DeactivateException = null;\n\n        public FakePersistentTask(Uri subject)\n        {\n            Subject = subject;\n        }\n\n        public void IsFullyFunctional()\n        {\n            Timesout = false;\n            ActivationException = AssertAvailableException = null;\n        }\n\n        public Uri Subject { get; private set; }\n\n        public void AssertAvailable()\n        {\n            if (Timesout) Thread.Sleep(1.Minutes());\n\n            Thread.Sleep(10);\n            if (AssertAvailableException != null) throw AssertAvailableException;\n        }\n\n        public void Activate()\n        {\n            Thread.Sleep(10);\n            if (ActivationException != null) throw ActivationException;\n\n            IsActive = true;\n        }\n\n        public void Deactivate()\n        {\n            Thread.Sleep(10);\n            if (DeactivateException != null) throw DeactivateException;\n\n            IsActive = false;\n        }\n\n        public bool IsActive { get; set; }\n\n        public Task<ITransportPeer> SelectOwner(IEnumerable<ITransportPeer> peers)\n        {\n            // TODO -- need to make this thing be attached to a parent\n            throw new NotImplementedException();\n        }\n\n        public void IsFullyFunctionalAndActive()\n        {\n            IsFullyFunctional();\n            IsActive = true;\n            Timesout = false;\n        }\n\n        public void IsActiveButNotFunctional(Exception exception)\n        {\n            IsActive = true;\n            AssertAvailableException = exception;\n            Timesout = false;\n        }\n\n        public void IsNotActive()\n        {\n            IsActive = false;\n        }\n\n        public bool Timesout { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/FakePersistentTaskAgent.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.ServiceBus.Monitoring;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring\n{\n    public class FakePersistentTaskAgent : IPersistentTaskAgent\n    {\n        public FakePersistentTaskAgent(Uri subject)\n        {\n            Subject = subject;\n        }\n\n        public Uri Subject { get; private set; }\n        public bool IsActive { get; private set; }\n        public Task<HealthStatus> AssertAvailable()\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<OwnershipStatus> Activate()\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<bool> Deactivate()\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<ITransportPeer> AssignOwner(IEnumerable<ITransportPeer> peers)\n        {\n            SelectedPeer = peers.FirstOrDefault(x => x.NodeId == PeerIdToSelect);\n            return SelectedPeer.TakeOwnership(Subject).ContinueWith(t => SelectedPeer);\n        }\n\n        public string PeerIdToSelect;\n        public ITransportPeer SelectedPeer;\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/FakePersistentTaskSource.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Monitoring;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring\n{\n    public class FakePersistentTaskSource : IPersistentTaskSource\n    {\n        private readonly Cache<string, FakePersistentTask> _tasks\n            = new Cache<string, FakePersistentTask>();\n\n        public FakePersistentTaskSource(string protocol)\n        {\n            Protocol = protocol;\n            _tasks.OnMissing = name => {\n                var uri = \"{0}://{1}\".ToFormat(Protocol, name).ToUri();\n                return new FakePersistentTask(uri);\n            };\n        }\n\n        public FakePersistentTask this[string name]\n        {\n            get { return _tasks[name]; }\n        }\n\n        public string Protocol { get; private set; }\n\n        public IEnumerable<FakePersistentTask> FakeTasks()\n        {\n            return _tasks;\n        } \n\n        public IEnumerable<Uri> PermanentTasks()\n        {\n            return _tasks.Select(x => x.Subject);\n        }\n\n        public IPersistentTask CreateTask(Uri uri)\n        {\n            var name = uri.Host;\n\n            return _tasks.Has(name) ? _tasks[name] : null;\n        }\n\n        public FakePersistentTask AddTask(string key)\n        {\n            return _tasks[key];\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/FakePersistentTasks.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing FubuCore.Util;\nusing FubuMVC.Core.ServiceBus.Monitoring;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring\n{\n    public class FakePersistentTasks : IPersistentTasks\n    {\n        public readonly Cache<Uri, FakePersistentTaskAgent> Agents =\n            new Cache<Uri, FakePersistentTaskAgent>(_ => new FakePersistentTaskAgent(_));\n\n        public IPersistentTask FindTask(Uri subject)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IPersistentTaskAgent FindAgent(Uri subject)\n        {\n            return Agents[subject];\n        }\n\n\n        public IEnumerable<Uri> PersistentSubjects { get; set; }\n\n        public string NodeId\n        {\n            get\n            {\n                return \"FakeNode\";\n            }\n        }\n\n        public Task Reassign(Uri subject, IList<ITransportPeer> availablePeers, IList<ITransportPeer> deactivations)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task Reassign(Uri subject, IEnumerable<ITransportPeer> availablePeers)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/FakeTransportPeer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore.Util;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Monitoring;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring\n{\n    public class FakeTransportPeer : ITransportPeer\n    {\n        public FakeTransportPeer(string nodeId, string machineName, Uri controlChannel)\n        {\n            NodeId = nodeId;\n            MachineName = machineName;\n            ControlChannel = controlChannel;\n        }\n\n        public readonly Cache<Uri, OwnershipStatus> OwnershipResults =\n            new Cache<Uri, OwnershipStatus>(_ => OwnershipStatus.OwnershipActivated);\n\n        public readonly Cache<Uri, HealthStatus> SubjectStatus =\n            new Cache<Uri, HealthStatus>(_ => HealthStatus.Inactive);\n\n        public Task<OwnershipStatus> TakeOwnership(Uri subject)\n        {\n            OwnedSubjects.Fill(subject);\n            return OwnershipResults[subject].ToCompletionTask();\n        }\n\n\n        public Task<TaskHealthResponse> CheckStatusOfOwnedTasks()\n        {\n            var response = new TaskHealthResponse\n            {\n                Tasks = OwnedSubjects.Select(uri => new PersistentTaskStatus\n                {\n                    Status = SubjectStatus[uri],\n                    Subject = uri\n                }).ToArray()\n            };\n\n            return response.ToCompletionTask();\n        }\n\n        public void RemoveOwnershipFromNode(IEnumerable<Uri> subjects)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IList<Uri> OwnedSubjects = new List<Uri>();\n\n        public IEnumerable<Uri> CurrentlyOwnedSubjects()\n        {\n            return OwnedSubjects;\n        }\n\n        public string NodeId { get; private set; }\n        public string MachineName { get; private set; }\n        public Uri ControlChannel { get; private set; }\n\n        public Task<bool> Deactivate(Uri subject)\n        {\n            OwnedSubjects.Remove(subject);\n\n            return Task.FromResult(true);\n        }\n\n        public void IsSuccessfullyRunning(Uri subject)\n        {\n            SubjectStatus[subject] = HealthStatus.Active;\n            OwnedSubjects.Fill(subject);\n            OwnershipResults[subject] = OwnershipStatus.OwnershipActivated;\n        }\n\n        public void OwnsButIsInState(Uri subject, HealthStatus status)\n        {\n            OwnedSubjects.Fill(subject);\n            SubjectStatus[subject] = status;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/Monitoring_handlers_are_registered.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring\n{\n    [TestFixture]\n    public class Monitoring_handlers_are_registered\n    {\n        [Test]\n        public void handler_calls_are_registered_by_default()\n        {\n            using (var runtime = FubuRuntime.BasicBus())\n            {\n                runtime.Behaviors.ChainFor<TakeOwnershipRequest>().ShouldNotBeNull();\n                runtime.Behaviors.ChainFor<TaskHealthRequest>().ShouldNotBeNull();\n                runtime.Behaviors.ChainFor<TaskDeactivation>().ShouldNotBeNull();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/Monitoring_health_polling_job_is_registered.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring\n{\n    [TestFixture]\n    public class Monitoring_health_polling_job_is_registered\n    {\n        [Test]\n        public void the_job_is_registered()\n        {\n            using (var runtime = FubuRuntime.BasicBus())\n            {\n                runtime.Get<IPollingJobs>().Any(x => x is PollingJob<HealthMonitorPollingJob, HealthMonitoringSettings>)\n                    .ShouldBeTrue();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/OrderedAssignmentTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring\n{\n    [TestFixture]\n    public class OrderedAssignmentTester\n    {\n        public ITransportPeer route(params RiggedTransportPeer[] peers)\n        {\n            var assignment = new OrderedAssignment(\"foo://1\".ToUri(), peers);\n            var task = assignment.SelectOwner();\n\n            task.Wait();\n\n            return task.Result;\n        }\n\n        [Test]\n        public void only_one_happy_path()\n        {\n            route(new RiggedTransportPeer(\"A\", OwnershipStatus.OwnershipActivated))\n                .NodeId.ShouldBe(\"A\");\n\n            route(new RiggedTransportPeer(\"B\", OwnershipStatus.AlreadyOwned))\n                .NodeId.ShouldBe(\"B\");\n        }\n\n        [Test]\n        public void selects_the_first_good_peer_in_order()\n        {\n            route(\n                new RiggedTransportPeer(\"A\", OwnershipStatus.OwnershipActivated),\n                new RiggedTransportPeer(\"B\", OwnershipStatus.OwnershipActivated),\n                new RiggedTransportPeer(\"C\", OwnershipStatus.OwnershipActivated)\n                )\n                .NodeId.ShouldBe(\"A\");\n        }\n\n        [Test]\n        public void passes_on_peer_that_does_not_know_the_subject()\n        {\n            route(\n                new RiggedTransportPeer(\"A\", OwnershipStatus.UnknownSubject),\n                new RiggedTransportPeer(\"B\", OwnershipStatus.OwnershipActivated),\n                new RiggedTransportPeer(\"C\", OwnershipStatus.OwnershipActivated)\n                )\n                .NodeId.ShouldBe(\"B\");\n        }\n\n        [Test]\n        public void passes_on_peer_that_fails_to_start_the_subject()\n        {\n            route(\n                new RiggedTransportPeer(\"A\", OwnershipStatus.Exception),\n                new RiggedTransportPeer(\"B\", OwnershipStatus.OwnershipActivated),\n                new RiggedTransportPeer(\"C\", OwnershipStatus.OwnershipActivated)\n                )\n                .NodeId.ShouldBe(\"B\");\n        }\n\n        [Test]\n        public void passes_on_peer_that_fails_to_start_the_subject_because_of_timeout()\n        {\n            route(\n                new RiggedTransportPeer(\"A\", OwnershipStatus.TimedOut),\n                new RiggedTransportPeer(\"B\", OwnershipStatus.OwnershipActivated),\n                new RiggedTransportPeer(\"C\", OwnershipStatus.OwnershipActivated)\n                )\n                .NodeId.ShouldBe(\"B\");\n        }\n\n        [Test]\n        public void returns_none_if_none_can_be_assigned()\n        {\n            route(\n                new RiggedTransportPeer(\"A\", OwnershipStatus.TimedOut),\n                new RiggedTransportPeer(\"B\", OwnershipStatus.Exception),\n                new RiggedTransportPeer(\"C\", OwnershipStatus.TimedOut)\n                ).ShouldBeNull();\n        }\n    }\n\n    public class RiggedTransportPeer : ITransportPeer\n    {\n        public RiggedTransportPeer(string nodeId, OwnershipStatus status)\n        {\n            NodeId = nodeId;\n            StatusToReturn = status;\n        }\n\n        public OwnershipStatus StatusToReturn = OwnershipStatus.Exception;\n\n        public Task<OwnershipStatus> TakeOwnership(Uri subject)\n        {\n            return Task.Factory.StartNew(() => {\n                Thread.Sleep(10);\n                return StatusToReturn;\n            });\n        }\n\n        public Task<TaskHealthResponse> CheckStatusOfOwnedTasks()\n        {\n            throw new NotImplementedException();\n        }\n\n        public void RemoveOwnershipFromNode(IEnumerable<Uri> subjects)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IEnumerable<Uri> CurrentlyOwnedSubjects()\n        {\n            throw new NotImplementedException();\n        }\n\n        public string NodeId { get; set; }\n        public string MachineName { get; private set; }\n        public Uri ControlChannel { get; private set; }\n        public Task<bool> Deactivate(Uri subject)\n        {\n            throw new NotImplementedException();\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"NodeId: {0}\", NodeId);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/PermanentTaskController/CurrentlyOwnedSubjectsTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.ServiceBus;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring.PermanentTaskController\n{\n    [TestFixture]\n    public class CurrentlyOwnedSubjectsTester : PersistentTaskControllerContext\n    {\n        [Test]\n        public void includes_both_active_subjects_and_subjects_persisted_as_owned()\n        {\n            Task(\"foo://1\").IsFullyFunctionalAndActive();\n            Task(\"foo://2\").IsFullyFunctionalAndActive();\n            Task(\"foo://3\").IsFullyFunctionalAndActive();\n\n            theCurrentNode.OwnedTasks = new[] { \"foo://1\".ToUri(), \"foo://2\".ToUri(), \"foo://4\".ToUri() };\n\n            theController.CurrentlyOwnedSubjects().OrderBy(x => x.ToString()).ShouldHaveTheSameElementsAs(\n                \"foo://1\".ToUri(), \"foo://2\".ToUri(),\"foo://3\".ToUri(), \"foo://4\".ToUri()\n                );\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/PermanentTaskController/PersistentTaskControllerContext.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuCore.Util;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring.PermanentTaskController\n{\n    [TestFixture]\n    public abstract class PersistentTaskControllerContext : ITaskMonitoringSource\n    {\n        protected RecordingLogger theLogger;\n        private Lazy<PersistentTaskController> _controller; \n\n        protected readonly Cache<string, ITransportPeer> peers =\n            new Cache<string, ITransportPeer>(name => MockRepository.GenerateMock<ITransportPeer>());\n\n        protected readonly Cache<string, FakePersistentTaskSource> sources = \n            new Cache<string, FakePersistentTaskSource>(protocol => new FakePersistentTaskSource(protocol));\n\n        protected TransportNode theCurrentNode;\n        protected ChannelGraph theGraph;\n        protected ISubscriptionRepository theSubscriptions;\n        protected HealthMonitoringSettings settings;\n\n        [SetUp]\n        public void SetUp()\n        {\n            peers.ClearAll();\n            sources.ClearAll();\n\n            theGraph = new ChannelGraph\n            {\n                NodeId = \"Test@Local\"\n            };\n\n            theGraph.AddReplyChannel(\"memory\", \"memory://1\".ToUri());\n\n            theCurrentNode = new TransportNode(theGraph);\n\n            theLogger = new RecordingLogger();\n\n            theSubscriptions = new SubscriptionRepository(theGraph, new InMemorySubscriptionPersistence());\n            theSubscriptions.Persist(theCurrentNode);\n\n            settings = new HealthMonitoringSettings\n            {\n                TaskAvailabilityCheckTimeout = 5.Seconds(),\n\n            };\n\n            _controller = new Lazy<PersistentTaskController>(() => {\n\n                var controller = new PersistentTaskController(theGraph, theLogger, this, sources.ToArray());\n\n                sources.SelectMany(x => x.FakeTasks()).Select(x => x.Subject)\n                    .Each(subject => controller.FindAgent(subject));\n\n                return controller;\n            });\n\n            theContextIs();\n        }\n\n        protected PersistentTaskController theController\n        {\n            get\n            {\n                return _controller.Value;\n            }\n        }\n\n        protected virtual void theContextIs()\n        {\n            \n        }\n\n        IEnumerable<ITransportPeer> ITaskMonitoringSource.BuildPeers()\n        {\n            return peers;\n        }\n\n        IEnumerable<Uri> ITaskMonitoringSource.LocallyOwnedTasksAccordingToPersistence()\n        {\n            return theCurrentNode.OwnedTasks;\n        }\n\n        public IPersistentTaskAgent BuildAgentFor(IPersistentTask task)\n        {\n            return new PersistentTaskAgent(task, settings, theLogger, theSubscriptions);\n        }\n\n        public void RemoveOwnershipFromThisNode(IEnumerable<Uri> subjects)\n        {\n            throw new NotImplementedException();\n        }\n\n\n        public FakePersistentTask Task(string uriString)\n        {\n            var uri = uriString.ToUri();\n\n            return sources[uri.Scheme][uri.Host];\n        }\n\n        protected void LoggedMessageForSubject<T>(string uriString) where T : PersistentTaskMessage\n        {\n            var hasIt = theLogger.InfoMessages.OfType<T>().Any(x => x.Subject == uriString.ToUri());\n            if (!hasIt)\n            {\n                Assert.Fail(\"Did not have expected log message of type {0} for subject {1}\".ToFormat(typeof(T).Name, uriString));\n            }\n        }\n\n        protected void AssertTasksAreActive(params string[] uriStrings)\n        {\n            var inactive = uriStrings.Select(Task).Where(x => !x.IsActive).Select(x => x.Subject.ToString());\n\n            if (inactive.Any())\n            {\n                Assert.Fail(\"Tasks {0} have not been activated\\n\" + inactive.Join(\", \"));\n            }\n        }\n\n        protected void TheOwnedTasksByTheCurrentNodeShouldBe(params string[] uriStrings)\n        {\n            theCurrentNode.OwnedTasks.OrderBy(x => x.ToString())\n                .ShouldHaveTheSameElementsAs(uriStrings.OrderBy(x => x).Select(x => x.ToUri()));\n        }\n\n        protected void ExceptionWasLogged(Exception ex)\n        {\n            theLogger.ErrorMessages.OfType<ErrorReport>().Any(x => x.ExceptionText.Contains(ex.ToString()));\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/PermanentTaskController/TakeOwnership_specs.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring.PermanentTaskController\n{\n    [TestFixture]\n    public class when_taking_ownership_successfully : PersistentTaskControllerContext\n    {\n        private const string theSubjectUriString = \"good://1\";\n        private Task<OwnershipStatus> theTask;\n\n        protected override void theContextIs()\n        {\n            Task(theSubjectUriString).IsFullyFunctional();\n            Task(theSubjectUriString).Timesout = false;\n\n            theTask = theController.TakeOwnership(theSubjectUriString.ToUri());\n\n            settings.TakeOwnershipMessageTimeout = 2.Minutes();\n\n            theTask.Wait();\n\n            var timeouts = theLogger.InfoMessages.OfType<TaskActivationTimeoutFailure>();\n\n            if (timeouts.Any())\n            {\n                Assert.Fail(\"Has timeouts somehow!\\n\" + timeouts.Select(x => x.ToString()).Join(\"\\n\"));\n            }\n        }\n\n        [Test]\n        public void should_return_OwnershipActivated()\n        {\n            theTask.Result.ShouldBe(OwnershipStatus.OwnershipActivated);\n        }\n\n        [Test]\n        public void activates_the_task()\n        {\n            Task(theSubjectUriString).IsActive.ShouldBeTrue();\n        }\n\n        [Test]\n        public void logs_the_activation()\n        {\n            LoggedMessageForSubject<TookOwnershipOfPersistentTask>(theSubjectUriString);\n        }\n\n        \n        [Test]\n        public void persists_the_new_ownership()\n        {\n            theCurrentNode.OwnedTasks.ShouldContain(theSubjectUriString.ToUri());\n        }\n    }\n\n    [TestFixture]\n    public class when_taking_ownership_unsuccessfully : PersistentTaskControllerContext\n    {\n        private const string theSubjectUriString = \"bad://1\";\n        private Task<OwnershipStatus> theTask;\n\n        protected override void theContextIs()\n        {\n            Task(theSubjectUriString).ActivationException = new DivideByZeroException();\n\n            theTask = theController.TakeOwnership(theSubjectUriString.ToUri());\n\n            theTask.Wait();\n        }\n\n        [Test]\n        public void should_return_Exception()\n        {\n            theTask.Result.ShouldBe(OwnershipStatus.Exception);\n        }\n\n\n        [Test]\n        public void logs_the_activation_failure()\n        {\n            LoggedMessageForSubject<TaskActivationFailure>(theSubjectUriString);\n        }\n\n        [Test]\n        public void does_not_persist_the_new_ownership()\n        {\n            theCurrentNode.OwnedTasks.ShouldNotContain(theSubjectUriString.ToUri());\n        }\n    }\n\n\n\n\n    [TestFixture]\n    public class when_trying_to_take_ownership_of_an_already_active_task : PersistentTaskControllerContext\n    {\n        private const string theSubjectUriString = \"good://1\";\n        private Task<OwnershipStatus> theTask;\n\n        protected override void theContextIs()\n        {\n            Task(theSubjectUriString).IsFullyFunctionalAndActive();\n\n            theTask = theController.TakeOwnership(theSubjectUriString.ToUri());\n\n            theTask.Wait();\n        }\n\n        [Test]\n        public void should_return_OwnershipActivated()\n        {\n            theTask.Result.ShouldBe(OwnershipStatus.AlreadyOwned);\n        }\n    }\n\n    [TestFixture]\n    public class when_trying_to_take_ownership_of_an_unknown_task : PersistentTaskControllerContext\n    {\n        [Test]\n        public void should_return_Unknown()\n        {\n            var task = theController.TakeOwnership(\"unknown://1\".ToUri());\n            task.Wait();\n            task.Result.ShouldBe(OwnershipStatus.UnknownSubject);\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/PermanentTaskController/when_checking_status.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring.PermanentTaskController\n{\n    [TestFixture]\n    public class when_checking_status : PersistentTaskControllerContext\n    {\n        protected override void theContextIs()\n        {\n            Task(\"running://1\").IsFullyFunctionalAndActive();\n            Task(\"stopped://1\").IsActive = false;\n            Task(\"error://1\").IsActiveButNotFunctional(new DivideByZeroException());\n            Task(\"timeout://1\").IsFullyFunctionalAndActive();\n            Task(\"timeout://1\").Timesout = true;\n\n            settings.TakeOwnershipMessageTimeout = 45.Seconds();\n            settings.TaskAvailabilityCheckTimeout = 45.Seconds();\n        }\n\n        private HealthStatus findStatus(string uriString)\n        {\n            var uri = uriString.ToUri();\n            var task = theController.CheckStatus(uri);\n            task.Wait();\n\n            return task.Result;\n        }\n\n        [Test]\n        public void check_the_status_of_a_task_that_times_out_in_its_availibility_check()\n        {\n            settings.TakeOwnershipMessageTimeout = 2.Seconds();\n            settings.TaskAvailabilityCheckTimeout = 2.Seconds();\n\n            findStatus(\"timeout://1\").ShouldBe(HealthStatus.Timedout);\n        }\n\n        [Test]\n        public void check_the_status_of_an_unknown_task()\n        {\n            findStatus(\"unknown://1\").ShouldBe(HealthStatus.Unknown);\n        }\n\n        [Test]\n        public void check_the_status_of_an_active_and_functional_task()\n        {\n            findStatus(\"running://1\").ShouldBe(HealthStatus.Active);\n        }\n\n        [Test]\n        public void check_the_status_of_an_inactive_task()\n        {\n            findStatus(\"stopped://1\").ShouldBe(HealthStatus.Inactive);\n        }\n\n        [Test]\n        public void check_the_status_of_an_active_task_that_has_errored_out()\n        {\n            findStatus(\"error://1\").ShouldBe(HealthStatus.Error);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/PermanentTaskController/when_checking_the_status_of_owned_tasks.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring.PermanentTaskController\n{\n    [TestFixture]\n    public class when_checking_the_status_of_owned_tasks : PersistentTaskControllerContext\n    {\n        /*\n         * check happy path\n         * throws exception\n         * unknown\n         * an active job that isn't reflected in ownership\n         * inactive\n         */\n\n        protected override void theContextIs()\n        {\n            settings.TakeOwnershipMessageTimeout = 2.Minutes();\n            settings.TaskActivationTimeout = 2.Minutes();\n            settings.TaskAvailabilityCheckTimeout = 1.Minutes();\n        }\n\n        [Test]\n        public void happy_path_checks_all_subjects()\n        {\n            Task(\"foo://1\").IsFullyFunctionalAndActive();\n            Task(\"foo://2\").IsFullyFunctionalAndActive();\n            Task(\"foo://3\").IsFullyFunctionalAndActive();\n\n            theCurrentNode.OwnedTasks = new[] {\"foo://1\".ToUri(), \"foo://2\".ToUri()};\n\n\n\n            var task = theController.CheckStatusOfOwnedTasks();\n            task.Wait();\n\n            task.Result.Tasks.ShouldHaveTheSameElementsAs(\n                new PersistentTaskStatus(\"foo://1\".ToUri(), HealthStatus.Active),\n                new PersistentTaskStatus(\"foo://2\".ToUri(), HealthStatus.Active),\n                new PersistentTaskStatus(\"foo://3\".ToUri(), HealthStatus.Active)\n                \n                );\n        }\n\n\n        [Test]\n        public void some_tasks_fail_the_assert_available_check()\n        {\n            Task(\"foo://1\").IsFullyFunctionalAndActive();\n            Task(\"foo://2\").IsActiveButNotFunctional(new DivideByZeroException());\n            Task(\"foo://3\").IsFullyFunctionalAndActive();\n\n            theCurrentNode.OwnedTasks = new[] {\"foo://1\".ToUri(), \"foo://2\".ToUri()};\n\n            var task = theController.CheckStatusOfOwnedTasks();\n            task.Wait();\n\n            task.Result.Tasks.ShouldHaveTheSameElementsAs(\n                new PersistentTaskStatus(\"foo://1\".ToUri(), HealthStatus.Active),\n                new PersistentTaskStatus(\"foo://2\".ToUri(), HealthStatus.Error),\n                new PersistentTaskStatus(\"foo://3\".ToUri(), HealthStatus.Active)\n                \n                );\n        }\n\n        [Test]\n        public void some_tasks_are_unknown()\n        {\n            Task(\"foo://1\").IsFullyFunctionalAndActive();\n            Task(\"foo://2\").IsActiveButNotFunctional(new DivideByZeroException());\n            //Task(\"foo://3\").IsNotActive();\n\n            theCurrentNode.OwnedTasks = new[] { \"foo://1\".ToUri(), \"foo://2\".ToUri(), \"foo://3\".ToUri() };\n\n            var task = theController.CheckStatusOfOwnedTasks();\n            task.Wait();\n\n            task.Result.Tasks.ShouldHaveTheSameElementsAs(\n                new PersistentTaskStatus(\"foo://1\".ToUri(), HealthStatus.Active),\n                new PersistentTaskStatus(\"foo://2\".ToUri(), HealthStatus.Error),\n                new PersistentTaskStatus(\"foo://3\".ToUri(), HealthStatus.Unknown)\n\n                );\n        }\n\n        [Test]\n        public void some_tasks_are_inactive()\n        {\n            Task(\"foo://1\").IsFullyFunctionalAndActive();\n            Task(\"foo://2\").IsActiveButNotFunctional(new DivideByZeroException());\n            Task(\"foo://3\").IsNotActive();\n\n            theCurrentNode.OwnedTasks = new[] { \"foo://1\".ToUri(), \"foo://2\".ToUri(), \"foo://3\".ToUri() };\n\n            var task = theController.CheckStatusOfOwnedTasks();\n            task.Wait();\n\n            task.Result.Tasks.ShouldHaveTheSameElementsAs(\n                new PersistentTaskStatus(\"foo://1\".ToUri(), HealthStatus.Active),\n                new PersistentTaskStatus(\"foo://2\".ToUri(), HealthStatus.Error),\n                new PersistentTaskStatus(\"foo://3\".ToUri(), HealthStatus.Inactive)\n\n                );\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/PermanentTaskController/when_finding_a_task.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring.PermanentTaskController\n{\n    [TestFixture]\n    public class when_finding_a_task : PersistentTaskControllerContext\n    {\n        private FakePersistentTask existingSubject1;\n        private FakePersistentTask existingSubject2;\n\n        protected override void theContextIs()\n        {\n            existingSubject1 = sources[\"foo\"].AddTask(\"a\");\n            sources[\"foo\"].AddTask(\"b\");\n            sources[\"bar\"].AddTask(\"c\");\n            existingSubject2 = sources[\"bar\"].AddTask(\"b\");\n        }\n\n        [Test]\n        public void happy_path()\n        {\n            theController.FindTask(existingSubject1.Subject)\n                .ShouldBeTheSameAs(existingSubject1);\n\n            theController.FindTask(existingSubject2.Subject)\n                .ShouldBeTheSameAs(existingSubject2);\n\n        }\n\n        [Test]\n        public void sad_path_unknown_protocol()\n        {\n            theController.FindTask(\"wrong://1\".ToUri())\n                .ShouldBeNull();\n        }\n\n        [Test]\n        public void sad_path_unknown_subject_for_the_task()\n        {\n            theController.FindTask(\"foo://wrong\".ToUri())\n                .ShouldBeNull();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/PermanentTaskController/when_stopping_a_task.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring.PermanentTaskController\n{\n    [TestFixture]\n    public class when_trying_to_stop_a_task_that_does_not_exist : PersistentTaskControllerContext\n    {\n        [Test]\n        public void should_denote_failure()\n        {\n            var task = theController.Deactivate(\"nonexistent://1\".ToUri());\n            task.Wait();\n\n            task.Result.ShouldBeFalse();\n\n        }\n    }\n\n    [TestFixture]\n    public class when_stopping_a_task_successfully : PersistentTaskControllerContext\n    {\n        private Task<bool> theTask;\n\n        protected override void theContextIs()\n        {\n            Task(\"running://1\").IsFullyFunctionalAndActive();\n\n            theTask = theController.Deactivate(\"running://1\".ToUri());\n            theTask.Wait();\n        }\n\n        [Test]\n        public void the_task_should_denote_success()\n        {\n            theTask.Result.ShouldBeTrue();\n        }\n\n        [Test]\n        public void should_stop_the_task()\n        {\n            Task(\"running://1\").IsActive.ShouldBeFalse();\n        }\n\n\n        [Test]\n        public void the_ownership_was_removed_and_persisted()\n        {\n            theCurrentNode.OwnedTasks.ShouldNotContain(\"running://1\".ToUri());\n            \n        }\n    }\n\n    [TestFixture]\n    public class when_stopping_a_task_unsuccessfully : PersistentTaskControllerContext\n    {\n        private Task<bool> theTask;\n\n        protected override void theContextIs()\n        {\n            Task(\"running://1\").IsFullyFunctionalAndActive();\n            Task(\"running://1\").DeactivateException = new DivideByZeroException();\n\n            theTask = theController.Deactivate(\"running://1\".ToUri());\n            theTask.Wait();\n        }\n\n        [Test]\n        public void the_task_should_denote_failure_by_returning_false()\n        {\n            theTask.Result.ShouldBeFalse();\n        }\n\n        [Test]\n        public void logged_the_failure_message()\n        {\n            LoggedMessageForSubject<FailedToStopTask>(\"running://1\");\n        }\n\n        [Test]\n        public void logged_the_exception()\n        {\n            theLogger.ErrorMessages.OfType<ErrorReport>()\n                .Any(x => x.ExceptionText.Contains(\"DivideByZeroException\"));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/PersistentTaskAgentTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring\n{\n    [TestFixture]\n    public class PersistentTaskAgentTester : InteractionContext<PersistentTaskAgent>\n    {\n        [Test]\n        public void assert_available_happy()\n        {\n            ClassUnderTest.AssertAvailable().Wait();\n\n            MockFor<IPersistentTask>().AssertWasCalled(x => x.AssertAvailable());\n        }\n\n        [Test]\n        public void assert_available_sad_path()\n        {\n            var ex = new DivideByZeroException();\n\n            MockFor<IPersistentTask>().Stub(x => x.AssertAvailable())\n                .Throw(ex);\n\n            var task = ClassUnderTest.AssertAvailable();\n\n                task.Wait();\n\n\n\n            task.Result.ShouldBe(HealthStatus.Error);\n        }\n\n        [Test]\n        public void activate_happy_path()\n        {\n            ClassUnderTest.Activate().Wait();\n            MockFor<IPersistentTask>().AssertWasCalled(x => x.Activate());\n        }\n\n        [Test]\n        public void deactivate_happy_path()\n        {\n            ClassUnderTest.Deactivate().Wait();\n            MockFor<IPersistentTask>().AssertWasCalled(x => x.Deactivate());\n        }\n\n        [Test]\n        public void assign_peers()\n        {\n            var peers = Services.CreateMockArrayFor<ITransportPeer>(4);\n\n            var peer = peers[2];\n\n            MockFor<IPersistentTask>().Stub(x => x.SelectOwner(peers))\n                .Return(peer.ToCompletionTask());\n\n            var task = ClassUnderTest.AssignOwner(peers);\n            task.Wait();\n\n            task.Result.ShouldBeTheSameAs(peer);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/PersistentTaskMessageModifierTester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring\n{\n    [TestFixture]\n    public class PersistentTaskMessageModifierTester\n    {\n        private readonly ChannelGraph theChannel = new ChannelGraph\n        {\n            NodeId = \"TheNodeId\",\n\n        };\n\n        [Test]\n        public void adds_the_machine_name_and_channel_node_id_to_the_message()\n        {\n            var modifier = new PersistentTaskMessageModifier(theChannel);\n            var message = new TaskActivationFailure(\"foo://1\".ToUri());\n            modifier.Modify(message);\n\n            message.NodeId.ShouldBe(theChannel.NodeId);\n            message.Machine.ShouldBe(System.Environment.MachineName);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/RiggedServiceBus.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.ServiceBus;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring\n{\n    public class RiggedServiceBus : IServiceBus\n    {\n        private readonly IList<RequestReplyExpectation> _expectations = new List<RequestReplyExpectation>();\n\n\n        public class RequestReplyExpectation : FromExpression, ReturnsExpression\n        {\n            public Uri Destination;\n            public object Message;\n            public object Response;\n\n            public ReturnsExpression AtDestination(Uri destination)\n            {\n                Destination = destination;\n                return this;\n            }\n\n            public void Returns(object response)\n            {\n                Response = response;\n            }\n\n            public void Throws(Exception ex)\n            {\n                Exception = ex;\n            }\n\n            public Exception Exception { get; set; }\n\n            public bool WasCalled { get; set; }\n\n            public override string ToString()\n            {\n                return string.Format(\"Expected message {0} to Destination: {1}\", Message, Destination);\n            }\n        }\n\n        public FromExpression ExpectMessage(object message)\n        {\n            var expectation = new RequestReplyExpectation\n            {\n                Message = message\n            };\n\n            _expectations.Add(expectation);\n\n            return expectation;\n        }\n\n        public interface FromExpression\n        {\n            ReturnsExpression AtDestination(Uri destination);\n        }\n\n        public interface ReturnsExpression\n        {\n            void Returns(object response);\n            void Throws(Exception ex);\n        }\n\n        public Task<TResponse> Request<TResponse>(object request, RequestOptions options = null)\n        {\n            var expectation =\n                _expectations.FirstOrDefault(x => x.Message.Equals(request) && x.Destination == options.Destination);\n\n            if (expectation == null)\n                Assert.Fail(\"No expectation for message {0} to destination {1}\", request, options.Destination);\n\n            var completion = new TaskCompletionSource<TResponse>();\n\n            if (expectation.Exception != null)\n            {\n                completion.SetException(expectation.Exception);\n            }\n            else\n            {\n                completion.SetResult((TResponse)expectation.Response);\n            }\n\n            expectation.WasCalled = true;\n            \n\n            return completion.Task;\n        }\n\n        public void AssertThatAllExpectedMessagesWereReceived()\n        {\n            var missing = _expectations.Where(x => !x.WasCalled);\n\n            if (missing.Any())\n            {\n                var message = missing.Select(x => x.ToString()).Join(\"\\n\");\n                Assert.Fail(message);\n            }\n        }\n\n        public void Send<T>(T message)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void Send<T>(Uri destination, T message)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void Consume<T>(T message)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void DelaySend<T>(T message, DateTime time)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void DelaySend<T>(T message, TimeSpan delay)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task SendAndWait<T>(T message)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task SendAndWait<T>(Uri destination, T message)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task RemoveSubscriptionsForThisNodeAsync()\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/Service_registration_specs.cs",
    "content": "﻿using FubuCore.Logging;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing NUnit.Framework;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring\n{\n    [TestFixture]\n    public class Service_registration_specs\n    {\n        [Test]\n        public void registrations()\n        {\n            using (var runtime = FubuRuntime.BasicBus())\n            {\n                var container = runtime.Get<IContainer>();\n\n                container.ShouldHaveRegistration<ILogModifier, PersistentTaskMessageModifier>();\n\n                container.DefaultRegistrationIs<IPersistentTaskController, PersistentTaskController>();\n                container.DefaultRegistrationIs<ITaskMonitoringSource, TaskMonitoringSource>();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/TaskHealthResponseTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring\n{\n    [TestFixture]\n    public class TaskHealthResponseTester\n    {\n        private readonly Uri subject1 = \"foo://1\".ToUri();\n        private readonly Uri subject2 = \"foo://2\".ToUri();\n        private readonly Uri subject3 = \"foo://3\".ToUri();\n        private readonly Uri subject4 = \"foo://4\".ToUri();\n\n        [Test]\n        public void add_missing_subjects_no_change()\n        {\n            var response = new TaskHealthResponse\n            {\n                Tasks = new[]\n                {\n                    new PersistentTaskStatus(subject1, HealthStatus.Active),\n                    new PersistentTaskStatus(subject2, HealthStatus.Active),\n                    new PersistentTaskStatus(subject3, HealthStatus.Active),\n                    new PersistentTaskStatus(subject4, HealthStatus.Active),\n                }\n            };\n\n            response.AddMissingSubjects(new []{subject1, subject2, subject3, subject4});\n\n            response.Tasks.Count().ShouldBe(4);\n        }\n\n        [Test]\n        public void add_missing_subjects_with_gaps()\n        {\n            var response = new TaskHealthResponse\n            {\n                Tasks = new[]\n                {\n                    new PersistentTaskStatus(subject1, HealthStatus.Active),\n                    //new PersistentTaskStatus(subject2, HealthStatus.Active),\n                    //new PersistentTaskStatus(subject3, HealthStatus.Active),\n                    new PersistentTaskStatus(subject4, HealthStatus.Active),\n                }\n            };\n\n            response.AddMissingSubjects(new[] { subject1, subject2, subject3, subject4 });\n\n            response.Tasks.Count().ShouldBe(4);\n\n            response.Tasks.ShouldContain(new PersistentTaskStatus(subject2, HealthStatus.Inactive));\n            response.Tasks.ShouldContain(new PersistentTaskStatus(subject3, HealthStatus.Inactive));\n        }\n\n        [Test]\n        public void build_for_errors()\n        {\n            var response = TaskHealthResponse.ErrorFor(new[] {subject1, subject2, subject3, subject4});\n        \n            response.Tasks.ShouldHaveTheSameElementsAs(\n                new PersistentTaskStatus(subject1, HealthStatus.Error),\n                new PersistentTaskStatus(subject2, HealthStatus.Error),\n                new PersistentTaskStatus(subject3, HealthStatus.Error),\n                new PersistentTaskStatus(subject4, HealthStatus.Error)\n                \n                );\n\n            response.ResponseFailed.ShouldBeTrue();\n        \n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Monitoring/TransportPeerTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Monitoring\n{\n\n    [TestFixture]\n    public class when_unsuccessfully_taking_ownership_because_of_exception : TransportPeerContext\n    {\n        private readonly Uri theSubject = \"subject://1\".ToUri();\n        private OwnershipStatus theStatus;\n        private const string theOriginalOwner = \"elsewhere\";\n\n        protected override void theContextIs()\n        {\n            var request = new TakeOwnershipRequest\n            {\n                Subject = theSubject\n            };\n\n            theServiceBus.ExpectMessage(request)\n            .AtDestination(theNode.Addresses.FirstOrDefault())\n            .Returns(new TakeOwnershipResponse\n            {\n                Status = OwnershipStatus.Exception\n            });\n\n            var task = thePeer.TakeOwnership(theSubject);\n            task.Wait(1.Minutes()); // for debugging\n            theStatus = task.Result;\n        }\n\n        [Test]\n        public void does_not_persist_the_new_ownership()\n        {\n            AssertThatTheNodeWas_Not_Persisted();\n            theNode.OwnedTasks.ShouldNotContain(theSubject);\n        }\n\n        [Test]\n        public void the_status_should_be_returned()\n        {\n            theStatus.ShouldBe(OwnershipStatus.Exception);\n        }\n    }\n\n    [TestFixture]\n    public class when_unsuccessfully_taking_ownership_because_the_remote_node_fails : TransportPeerContext\n    {\n        private readonly Uri theSubject = \"subject://1\".ToUri();\n        private OwnershipStatus theStatus;\n        private const string theOriginalOwner = \"elsewhere\";\n\n        protected override void theContextIs()\n        {\n            var request = new TakeOwnershipRequest\n            {\n                Subject = theSubject\n            };\n\n            theServiceBus.ExpectMessage(request)\n            .AtDestination(theNode.ControlChannel)\n            .Throws(new DivideByZeroException());\n\n            var task = thePeer.TakeOwnership(theSubject);\n            task.Wait(1.Minutes()); // for debugging\n            theStatus = task.Result;\n        }\n\n        [Test]\n        public void does_not_persist_the_new_ownership()\n        {\n            AssertThatTheNodeWas_Not_Persisted();\n            theNode.OwnedTasks.ShouldNotContain(theSubject);\n        }\n\n        [Test]\n        public void the_status_should_be_returned()\n        {\n            theStatus.ShouldBe(OwnershipStatus.Exception);\n        }\n    }\n\n    [TestFixture]\n    public class when_unsuccessfully_taking_ownership_because_of_the_peer_not_recognizing_the_job : TransportPeerContext\n    {\n        private readonly Uri theSubject = \"subject://1\".ToUri();\n        private OwnershipStatus theStatus;\n\n        protected override void theContextIs()\n        {\n            var request = new TakeOwnershipRequest\n            {\n                Subject = theSubject\n            };\n\n            theServiceBus.ExpectMessage(request)\n            .AtDestination(theNode.ControlChannel)\n            .Returns(new TakeOwnershipResponse\n            {\n                Status = OwnershipStatus.UnknownSubject\n            });\n\n            var task = thePeer.TakeOwnership(theSubject);\n            task.Wait(1.Minutes()); // for debugging\n            theStatus = task.Result;\n        }\n\n        [Test]\n        public void does_not_persist_the_new_ownership()\n        {\n            AssertThatTheNodeWas_Not_Persisted();\n            theNode.OwnedTasks.ShouldNotContain(theSubject);\n        }\n\n        [Test]\n        public void the_status_should_be_returned()\n        {\n            theStatus.ShouldBe(OwnershipStatus.UnknownSubject);\n        }\n    }\n\n    [TestFixture]\n    public class when_successfully_taking_ownership_of_a_single_responsibility : TransportPeerContext\n    {\n        private readonly Uri theSubject = \"subject://1\".ToUri();\n        private OwnershipStatus theStatus;\n\n        protected override void theContextIs()\n        {\n            var request = new TakeOwnershipRequest\n            {\n                Subject = theSubject\n            };\n\n            theServiceBus.ExpectMessage(request)\n            .AtDestination(theNode.ControlChannel)\n            .Returns(new TakeOwnershipResponse\n            {\n                Status = OwnershipStatus.OwnershipActivated\n            });\n\n            var task = thePeer.TakeOwnership(theSubject);\n            task.Wait(1.Minutes()); // for debugging\n            theStatus = task.Result;\n        }\n\n        [Test]\n        public void the_status_should_be_returned()\n        {\n            theStatus.ShouldBe(OwnershipStatus.OwnershipActivated);\n        }\n    }\n\n    [TestFixture]\n    public class when_successfully_taking_ownership_and_it_was_already_activated : TransportPeerContext\n    {\n        private readonly Uri theSubject = \"subject://1\".ToUri();\n        private OwnershipStatus theStatus;\n\n        protected override void theContextIs()\n        {\n            var request = new TakeOwnershipRequest\n            {\n                Subject = theSubject\n            };\n\n            theServiceBus.ExpectMessage(request)\n            .AtDestination(theNode.ControlChannel)\n            .Returns(new TakeOwnershipResponse\n            {\n                Status = OwnershipStatus.AlreadyOwned\n            });\n\n            var task = thePeer.TakeOwnership(theSubject);\n            task.Wait(1.Minutes()); // for debugging\n            theStatus = task.Result;\n        }\n\n\n        [Test]\n        public void the_status_should_be_returned()\n        {\n            theStatus.ShouldBe(OwnershipStatus.AlreadyOwned);\n        }\n    }\n\n    [TestFixture]\n    public class when_deactivating_successfully : TransportPeerContext\n    {\n        private readonly Uri theSubject = \"foo://1\".ToUri();\n        private Task<bool> theTask;\n\n        protected override void theContextIs()\n        {\n            theNode.AddOwnership(theSubject);\n\n            theServiceBus.ExpectMessage(new TaskDeactivation(theSubject))\n                .AtDestination(theNode.ControlChannel)\n                .Returns(new TaskDeactivationResponse\n                {\n                    Subject = theSubject,\n                    Success = true\n                });\n\n\n            theTask = thePeer.Deactivate(theSubject);\n            theTask.Wait();\n        }\n\n        [Test]\n        public void should_send_the_deactivation_message_directly_to_the_correct_endpoint()\n        {\n           theServiceBus.AssertThatAllExpectedMessagesWereReceived();\n        }\n\n        [Test]\n        public void the_task_returns_true_to_denote_success()\n        {\n            theTask.Result.ShouldBeTrue();\n        }\n    }\n\n    [TestFixture]\n    public class when_deactivating_unsuccessfully : TransportPeerContext\n    {\n        private readonly Uri theSubject = \"foo://1\".ToUri();\n        private Task<bool> theTask;\n\n        protected override void theContextIs()\n        {\n            theNode.AddOwnership(theSubject);\n\n            theServiceBus.ExpectMessage(new TaskDeactivation(theSubject))\n                .AtDestination(theNode.ControlChannel)\n                .Throws(new DivideByZeroException());\n\n\n            theTask = thePeer.Deactivate(theSubject);\n            theTask.Wait();\n        }\n\n        [Test]\n        public void should_send_the_deactivation_message_directly_to_the_correct_endpoint()\n        {\n            theServiceBus.AssertThatAllExpectedMessagesWereReceived();\n        }\n\n        [Test]\n        public void should_still_have_removed_the_ownership_from_the_node()\n        {\n            theSubscriptions.AssertWasCalled(x => x.RemoveOwnershipFromNode(theNode.Id, theSubject));\n        }\n\n        [Test]\n        public void the_task_should_denote_failure_by_returning_false()\n        {\n            theTask.Result.ShouldBeFalse();\n        }\n    }\n\n    [TestFixture]\n    public class when_requesting_the_task_health_full_happy_path : TransportPeerContext\n    {\n        private readonly Uri subject1 = \"foo://1\".ToUri();\n        private readonly Uri subject2 = \"foo://2\".ToUri();\n        private readonly Uri subject3 = \"foo://3\".ToUri();\n        private readonly Uri subject4 = \"foo://4\".ToUri();\n        private TaskHealthResponse theResponse;\n        private Task<TaskHealthResponse> theReturnedTask;\n\n        protected override void theContextIs()\n        {\n            var subjects = new Uri[] {subject1, subject2, subject3, subject4};\n\n            theNode.OwnedTasks = subjects;\n\n            theResponse = new TaskHealthResponse\n            {\n                Tasks = subjects.Select(x => new PersistentTaskStatus(x, HealthStatus.Active)).ToArray()\n            };\n\n\n            theServiceBus.ExpectMessage(new TaskHealthRequest{Subjects = subjects})\n                .AtDestination(theNode.ControlChannel)\n                .Returns(theResponse);\n\n            theReturnedTask = thePeer.CheckStatusOfOwnedTasks();\n            theReturnedTask.Wait();\n\n            \n        }\n\n        [Test]\n        public void should_just_return_the_response()\n        {\n            theReturnedTask.Result.ShouldBeTheSameAs(theResponse);\n        }\n    }\n\n    [TestFixture]\n    public class when_requesting_the_task_health_has_to_fill_in_missing_status_from_peer : TransportPeerContext\n    {\n        private readonly Uri subject1 = \"foo://1\".ToUri();\n        private readonly Uri subject2 = \"foo://2\".ToUri();\n        private readonly Uri subject3 = \"foo://3\".ToUri();\n        private readonly Uri subject4 = \"foo://4\".ToUri();\n        private TaskHealthResponse theResponse;\n        private Task<TaskHealthResponse> theReturnedTask;\n\n        protected override void theContextIs()\n        {\n            var subjects = new Uri[] { subject1, subject2, subject3, subject4 };\n\n            theNode.OwnedTasks = subjects;\n\n            theResponse = new TaskHealthResponse\n            {\n                Tasks = new PersistentTaskStatus[0]\n            };\n\n\n            theServiceBus.ExpectMessage(new TaskHealthRequest { Subjects = subjects })\n                .AtDestination(theNode.ControlChannel)\n                .Returns(theResponse);\n\n            theReturnedTask = thePeer.CheckStatusOfOwnedTasks();\n            theReturnedTask.Wait();\n\n\n        }\n\n        [Test]\n        public void the_response_should_be_filled_with_inactive_for_the_missing_tasks()\n        {\n            var response = theReturnedTask.Result;\n\n            response.Tasks.ShouldContain(new PersistentTaskStatus(subject1, HealthStatus.Inactive));\n            response.Tasks.ShouldContain(new PersistentTaskStatus(subject2, HealthStatus.Inactive));\n            response.Tasks.ShouldContain(new PersistentTaskStatus(subject3, HealthStatus.Inactive));\n            response.Tasks.ShouldContain(new PersistentTaskStatus(subject4, HealthStatus.Inactive));\n        }\n    }\n\n    [TestFixture]\n    public class when_requesting_the_task_health_and_the_remote_message_returns_missing_tasks : TransportPeerContext\n    {\n        private readonly Uri subject1 = \"foo://1\".ToUri();\n        private readonly Uri subject2 = \"foo://2\".ToUri();\n        private readonly Uri subject3 = \"foo://3\".ToUri();\n        private readonly Uri subject4 = \"foo://4\".ToUri();\n        private TaskHealthResponse theResponse;\n        private Task<TaskHealthResponse> theReturnedTask;\n\n        protected override void theContextIs()\n        {\n            var subjects = new Uri[] { subject1, subject2, subject3, subject4 };\n\n            theNode.OwnedTasks = subjects;\n\n            theResponse = new TaskHealthResponse\n            {\n                Tasks = new PersistentTaskStatus[0]\n            };\n\n\n            theServiceBus.ExpectMessage(new TaskHealthRequest { Subjects = subjects })\n                .AtDestination(theNode.ControlChannel)\n                .Returns(theResponse);\n\n            theReturnedTask = thePeer.CheckStatusOfOwnedTasks();\n            theReturnedTask.Wait();\n\n\n        }\n\n\n        [Test]\n        public void the_response_should_be_filled_with_inactive_for_the_missing_tasks()\n        {\n            var response = theReturnedTask.Result;\n\n            response.Tasks.ShouldContain(new PersistentTaskStatus(subject1, HealthStatus.Inactive));\n            response.Tasks.ShouldContain(new PersistentTaskStatus(subject2, HealthStatus.Inactive));\n            response.Tasks.ShouldContain(new PersistentTaskStatus(subject3, HealthStatus.Inactive));\n            response.Tasks.ShouldContain(new PersistentTaskStatus(subject4, HealthStatus.Inactive));\n        }\n    }\n\n    [TestFixture]\n    public class when_requesting_the_task_health_and_the_remote_message_fails : TransportPeerContext\n    {\n        private readonly Uri subject1 = \"foo://1\".ToUri();\n        private readonly Uri subject2 = \"foo://2\".ToUri();\n        private readonly Uri subject3 = \"foo://3\".ToUri();\n        private readonly Uri subject4 = \"foo://4\".ToUri();\n        private Task<TaskHealthResponse> theReturnedTask;\n\n        protected override void theContextIs()\n        {\n            var subjects = new Uri[] { subject1, subject2, subject3, subject4 };\n\n            theNode.OwnedTasks = subjects;\n\n\n            theServiceBus.ExpectMessage(new TaskHealthRequest { Subjects = subjects })\n                .AtDestination(theNode.Addresses.First())\n                .Throws(new DivideByZeroException());\n\n            theReturnedTask = thePeer.CheckStatusOfOwnedTasks();\n            theReturnedTask.Wait();\n\n\n        }\n\n        [Test]\n        public void the_response_should_be_marked_as_a_failure()\n        {\n            theReturnedTask.Result.ResponseFailed.ShouldBeTrue();\n        }\n\n\n        [Test]\n        public void the_response_should_be_filled_with_inactive_for_the_missing_tasks()\n        {\n            var response = theReturnedTask.Result;\n\n            response.Tasks.ShouldContain(new PersistentTaskStatus(subject1, HealthStatus.Error));\n            response.Tasks.ShouldContain(new PersistentTaskStatus(subject2, HealthStatus.Error));\n            response.Tasks.ShouldContain(new PersistentTaskStatus(subject3, HealthStatus.Error));\n            response.Tasks.ShouldContain(new PersistentTaskStatus(subject4, HealthStatus.Error));\n        }\n    }\n\n\n    [TestFixture]\n    public abstract class TransportPeerContext\n    {\n        protected readonly TransportNode theNode = new TransportNode { Id = \"node1\", NodeName = \"foo\", Addresses = new []{\"reply://1\".ToUri()}};\n        protected RiggedServiceBus theServiceBus;\n        protected ISubscriptionRepository theSubscriptions;\n        protected TransportPeer thePeer;\n        private RecordingLogger theLogger;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theServiceBus = new RiggedServiceBus();\n            theSubscriptions = MockRepository.GenerateMock<ISubscriptionRepository>();\n            theLogger = new RecordingLogger();\n            thePeer = new TransportPeer(new HealthMonitoringSettings(), theNode, theSubscriptions, theServiceBus, theLogger);\n\n            theSubscriptions.Stub(x => x.FindPeer(theNode.Id))\n                .Return(theNode);\n\n            theContextIs();\n        }\n\n        protected void AssertThatTheNodeWasPersisted()\n        {\n            theSubscriptions.AssertWasCalled(x => x.Persist(theNode));\n        }\n\n        protected void AssertThatTheNodeWas_Not_Persisted()\n        {\n            theSubscriptions.AssertWasNotCalled(x => x.Persist(theNode));\n        }\n\n        protected virtual void theContextIs()\n        {\n            \n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ObjectMother.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing Rhino.Mocks;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    public static class ObjectMother\n    {\n         public static Envelope Envelope()\n         {\n             return new Envelope\n             {\n                 Data = new byte[] { 1, 2, 3, 4 },\n                 Callback = MockRepository.GenerateMock<IMessageCallback>()\n             };\n         }\n\n        public static Envelope EnvelopeWithMessage()\n        {\n            var envelope = Envelope();\n            envelope.Message = new Message1();\n\n            return envelope;\n        }\n\n        public static Envelope EnvelopeWithSerializationError()\n        {\n            var envelope = Envelope();\n            envelope.UseSerializer(new ThrowingEnvelopeSerializer());\n            return envelope;\n        }\n\n        public static InvocationContext InvocationContext()\n        {\n            var envelope = Envelope();\n            envelope.Message = new Message();\n\n            return new InvocationContext(envelope, new HandlerChain());\n        }\n\n        public static Subscription NewSubscription(string nodeName = null)\n        {\n            return new Subscription\n            {\n                MessageType = Guid.NewGuid().ToString(),\n                NodeName = nodeName ?? \"TheNode\",\n                Receiver = \"memory://receiver\".ToUri(),\n                Source = \"memory://source\".ToUri(),\n                Role = SubscriptionRole.Subscribes\n\n            };\n        }\n\n        public static Subscription ExistingSubscription(string nodeName = null)\n        {\n            var subscription = NewSubscription();\n            subscription.Id = Guid.NewGuid();\n\n            if (nodeName.IsNotEmpty())\n            {\n                subscription.NodeName = nodeName;\n            }\n\n            return subscription;\n        }\n\n\n    }\n\n    public class ThrowingEnvelopeSerializer : IEnvelopeSerializer\n    {\n        public object Deserialize(Envelope envelope)\n        {\n            throw new EnvelopeDeserializationException(\"Error\");\n        }\n\n        public void Serialize(Envelope envelope, ChannelNode node)\n        {\n            throw new EnvelopeDeserializationException(\"Error\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Polling/DefaultTimerTester.cs",
    "content": "﻿using System.Threading;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Polling\n{\n    [TestFixture]\n    public class DefaultTimerTester\n    {\n        [Test]\n        public void start_and_callback()\n        {\n            var reset = new ManualResetEvent(false);\n\n            var timer = new DefaultTimer();\n\n            int i = 0;\n\n            timer.Start(() => {\n                i++;\n                reset.Set();\n                timer.Stop();\n            }, 500);\n\n            reset.WaitOne(1000);\n\n            i.ShouldBe(1);\n\n            // Should only fire once because timer.Stop was called\n            reset.Reset();\n            reset.WaitOne(1000);\n\n            i.ShouldBe(1);\n\n            timer.Dispose();\n        }\n\n        [Test]\n        public void polls()\n        {\n            var reset = new ManualResetEvent(false);\n\n            var timer = new DefaultTimer();\n\n            int i = 0;\n\n            timer.Start(() =>\n            {\n                i++;\n                if (i == 5)\n                {\n                    reset.Set();\n                    timer.Stop();\n                }\n            }, 100);\n\n            reset.WaitOne();\n\n            i.ShouldBe(5);\n\n            timer.Dispose();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Polling/EnvelopeToken_is_polling_job_related_Tester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Polling\n{\n    [TestFixture]\n    public class EnvelopeToken_is_polling_job_related_Tester\n    {\n        [Test]\n        public void is_not_related_to_a_job_with_no_message_at_all()\n        {\n            new EnvelopeToken().IsPollingJobRelated()\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void is_not_related_to_a_job_with_a_normal_message()\n        {\n            new EnvelopeToken{Message = new Message1()}\n                .IsPollingJobRelated()\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void is_related_to_a_job_if_the_message_is_polling_job_request()\n        {\n            new EnvelopeToken\n            {\n                Message   = new JobRequest<APollingJob>()\n            }.IsPollingJobRelated()\n            .ShouldBeTrue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Polling/JobTimeoutTester.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Polling\n{\n    [TestFixture]\n    public class JobTimeoutTester\n    {\n        [Test]\n        public void run_to_completion_within_the_time()\n        {\n            var timeout = new JobTimeout(5.Seconds());\n            var job = new FakeJob(1.Seconds());\n\n            var task = timeout.Execute(job);\n            task.Wait();\n\n            task.IsCanceled.ShouldBeFalse();\n            task.IsFaulted.ShouldBeFalse();\n            task.Exception.ShouldBeNull();\n\n            job.Finished.ShouldBeTrue();\n        }\n\n        [Test]\n        public void run_over_the_allowed_time()\n        {\n            var timeout = new JobTimeout(1.Seconds());\n            var job = new FakeJob(10.Seconds());\n\n            var task = timeout.Execute(job);\n\n            Exception<TimeoutException>.ShouldBeThrownBy(() => {\n                task.Wait();\n            });\n\n\n\n            task.Exception.InnerException.ShouldBeOfType<TimeoutException>();\n            job.Finished.ShouldBeFalse();\n        }\n    }\n\n    public class FakeJob : IJob\n    {\n        private readonly TimeSpan _timeToRun;\n        public bool WasCancelled;\n        public bool Finished;\n\n        public FakeJob(TimeSpan timeToRun)\n        {\n            _timeToRun = timeToRun;\n        }\n\n        public void Execute(CancellationToken cancellation)\n        {\n            var ending = DateTime.UtcNow.Add(_timeToRun);\n            while (DateTime.UtcNow <= ending)\n            {\n                Thread.Sleep(100);\n                if (cancellation.IsCancellationRequested)\n                {\n                    WasCancelled = true;\n                    cancellation.ThrowIfCancellationRequested();\n                }\n            }\n\n            Finished = true;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Polling/PollingJobActivatorTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Tests.ServiceBus.ScheduledJobs;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.ServiceBus.Polling\n{\n    [TestFixture]\n    public class PollingJobActivatorTester : InteractionContext<PollingJobActivator>\n    {\n        private IPollingJob[] theJobs;\n        private NotImplementedException ex1;\n        private NotSupportedException ex2;\n        private IActivationLog theLog;\n\n        protected override void beforeEach()\n        {\n            theLog = MockFor<IActivationLog>();\n\n            theJobs = Services.CreateMockArrayFor<IPollingJob>(5);\n            foreach (var pollingJob in theJobs)\n            {\n                pollingJob.Stub(_ => _.JobType).Return(typeof (AJob));\n            }\n\n            Services.Inject<IPollingJobs>(new PollingJobs(theJobs));\n\n            ex1 = new NotImplementedException();\n            ex2 = new NotSupportedException();\n\n            theJobs[1].Expect(x => x.Start()).Throw(ex1);\n            theJobs[2].Expect(x => x.Start()).Throw(ex2);\n\n            ClassUnderTest.Activate(theLog, null);\n        }\n\n        [Test]\n        public void should_start_all_the_jobs()\n        {\n            theJobs.Each(x => x.AssertWasCalled(job => job.Start()));\n        }\n\n        [Test]\n        public void should_log_failures_for_both_of_the_failing_jobs()\n        {\n            theLog.AssertWasCalled(x => x.MarkFailure(ex1));\n            theLog.AssertWasCalled(x => x.MarkFailure(ex2));\n        }\n    }\n\n    [TestFixture]\n    public class PollingJobDeactivatorTester : InteractionContext<PollingJobDeactivator>\n    {\n        private IPollingJob[] theJobs;\n        private NotImplementedException ex1;\n        private NotSupportedException ex2;\n        private IActivationLog theLog;\n\n        protected override void beforeEach()\n        {\n            theLog = MockFor<IActivationLog>();\n\n            theJobs = Services.CreateMockArrayFor<IPollingJob>(5);\n            Services.Inject<IPollingJobs>(new PollingJobs(theJobs));\n\n            ex1 = new NotImplementedException();\n            ex2 = new NotSupportedException();\n\n            theJobs[1].Expect(x => x.Dispose()).Throw(ex1);\n            theJobs[2].Expect(x => x.Dispose()).Throw(ex2);\n\n            ClassUnderTest.Deactivate(theLog);\n        }\n\n        [Test]\n        public void should_stop_all_the_jobs()\n        {\n            theJobs.Each(x => x.AssertWasCalled(job => job.Dispose()));\n        }\n\n        [Test]\n        public void should_log_failures_for_both_of_the_failing_jobs()\n        {\n            theLog.AssertWasCalled(x => x.MarkFailure(ex1));\n            theLog.AssertWasCalled(x => x.MarkFailure(ex2));\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Polling/PollingJobChainTester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Tests.ServiceBus.ScheduledJobs;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Polling\n{\n    [TestFixture]\n    public class PollingJobChainTester\n    {\n        [Test]\n        public void chain_is_definitely_a_polling_job()\n        {\n            PollingJobChain.For<AJob, TransportSettings>(x => x.DelayMessagePolling)\n                .IsPollingJob().ShouldBeTrue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Polling/PollingJobIntegrationTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.ServiceBus.Polling\n{\n    [TestFixture]\n    public class PollingJobIntegrationTester\n    {\n        private IContainer container;\n        private FubuRuntime theRuntime;\n\n        [TestFixtureSetUp]\n        public void SetUp()\n        {\n            OneJob.Executed = TwoJob.Executed = ThreeJob.Executed = 0;\n\n            theRuntime = FubuRuntime.For<PollingRegistry>();\n            theRuntime.Behaviors.PollingJobs.Any().ShouldBeTrue();\n\n            container = theRuntime.Get<IContainer>();\n\n            Wait.Until(() => ThreeJob.Executed > 10, timeoutInMilliseconds: 6000);\n        }\n\n        [TestFixtureTearDown]\n        public void Teardown()\n        {\n            theRuntime.Dispose();\n        }\n\n        [Test]\n        public void the_polling_job_chains_are_tagged_for_no_tracing()\n        {\n            var graph = theRuntime.Get<BehaviorGraph>();\n            var chains = graph.PollingJobs;\n\n            chains.Each(x => x.IsTagged(BehaviorChain.NoTracing).ShouldBeTrue());\n        }\n\n        [Test]\n        public void there_are_polling_jobs_registered()\n        {\n            // The polling job for delayed messages & one for the expired listeners are registered by default.\n            // Plus 1 for health monitoring\n            // And another for subscription refresh\n\n            var pollingJobs = container.GetInstance<IPollingJobs>();\n\n            pollingJobs.Count()\n                .ShouldBe(8);\n        }\n\n        [Test]\n        public void should_have_executed_all_the_jobs_several_times()\n        {\n            OneJob.Executed.ShouldBeGreaterThan(10);\n            TwoJob.Executed.ShouldBeGreaterThan(10);\n            ThreeJob.Executed.ShouldBeGreaterThan(10);\n        }\n\n        [Test]\n        public void\n            should_have_executed_one_more_than_two_and_two_more_than_three_because_of_the_polling_interval_differences()\n        {\n            OneJob.Executed.ShouldBeGreaterThan(TwoJob.Executed);\n            TwoJob.Executed.ShouldBeGreaterThan(ThreeJob.Executed);\n        }\n\n        [Test]\n        public void jobs_that_are_not_disabled_should_be_active()\n        {\n            var pollingJobs = theRuntime.Get<IPollingJobs>();\n            pollingJobs.IsActive<TwoJob>().ShouldBeTrue();\n            pollingJobs.IsActive<ThreeJob>().ShouldBeTrue();\n        }\n\n        [Test]\n        public void disabled_job_should_not_be_active()\n        {\n            var pollingJobs = theRuntime.Get<IPollingJobs>();\n            pollingJobs\n                .IsActive<DisabledJob>().ShouldBeFalse();\n        }\n\n        [Test]\n        public void nonexistent_job_is_not_active()\n        {\n            var pollingJobs = theRuntime.Get<IPollingJobs>();\n            pollingJobs\n                .IsActive<MissingJob>().ShouldBeFalse();\n        }\n    }\n\n    public class MissingJob : IJob\n    {\n        public void Execute(CancellationToken cancellation)\n        {\n        }\n    }\n\n    public class PollingRegistry : FubuRegistry\n    {\n        public PollingRegistry()\n        {\n            ServiceBus.Enable(true);\n\n            ServiceBus.EnableInMemoryTransport();\n\n            Polling.RunJob<OneJob>().ScheduledAtInterval<PollingSettings>(x => x.OneInterval);\n            Polling.RunJob<TwoJob>().ScheduledAtInterval<PollingSettings>(x => x.TwoInterval);\n            Polling.RunJob<ThreeJob>().ScheduledAtInterval<PollingSettings>(x => x.ThreeInterval).RunImmediately();\n\n            Polling.RunJob<DisabledJob>().ScheduledAtInterval<PollingSettings>(x => x.DisabledInterval).Disabled();\n\n            Services.ReplaceService<IPollingJobLogger, RecordingPollingJobLogger>();\n        }\n    }\n\n    public class PollingSettings\n    {\n        public PollingSettings()\n        {\n            OneInterval = 100;\n            TwoInterval = 200;\n            ThreeInterval = 300;\n            DisabledInterval = 400;\n        }\n\n        public double OneInterval { get; set; }\n        public double TwoInterval { get; set; }\n        public double ThreeInterval { get; set; }\n        public double DisabledInterval { get; set; }\n    }\n\n    public class OneJob : IJob\n    {\n        public static int Executed = 0;\n\n        public void Execute(CancellationToken cancellation)\n        {\n            Executed++;\n        }\n    }\n\n    public class TwoJob : IJob\n    {\n        public static int Executed = 0;\n\n        public void Execute(CancellationToken cancellation)\n        {\n            Executed++;\n        }\n    }\n\n    public class ThreeJob : IJob\n    {\n        public static int Executed = 0;\n\n        public void Execute(CancellationToken cancellation)\n        {\n            Executed++;\n        }\n    }\n\n    public class DisabledJob : IJob\n    {\n        public static int Executed = 0;\n\n        public void Execute(CancellationToken cancellation)\n        {\n            Executed++;\n        }\n    }\n\n    public class RecordingPollingJobLogger : IPollingJobLogger\n    {\n        public readonly IList<Type> Stopped = new List<Type>();\n        public readonly IList<IJob> Started = new List<IJob>();\n        public readonly IList<IJob> Succeeded = new List<IJob>();\n\n        public void Stopping(Type jobType)\n        {\n            Stopped.Add(jobType);\n        }\n\n        public void Starting(Guid id, IJob job)\n        {\n            Started.Add(job);\n        }\n\n        public void Successful(Guid id, IJob job)\n        {\n            Succeeded.Add(job);\n        }\n\n        public void Failed(Guid id, IJob job, Exception ex)\n        {\n            Assert.Fail(\"Got an exception for {0}\\n{1}\", job, ex);\n        }\n\n        public void FailedToSchedule(Type jobType, Exception exception)\n        {\n            Assert.Fail(\"Failed to schedule {0}\\n{1}\", jobType, exception);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Polling/PollingJobRunImmediatelyIntegrationTester.cs",
    "content": "﻿using System.Threading;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Polling\n{\n    [TestFixture]\n    public class PollingJobRunImmediatelyIntegrationTester\n    {\n        private FubuRuntime theRuntime;\n\n        [TestFixtureSetUp]\n        public void SetUp()\n        {\n            ImmediateJob.Executed = DelayJob.Executed = DisabledJob.Executed = 0;\n\n            theRuntime = FubuRuntime.For<PollingImmediateRegistry>()\n                                      \n                                      ;\n        }\n\n        [TestFixtureTearDown]\n        public void Teardown()\n        {\n            theRuntime.Dispose();\n        }\n\n        [Test]\n        public void should_only_execute_ImmediateJob_now_and_interval_should_still_work()\n        {\n            DelayJob.Executed.ShouldBe(0);\n            ImmediateJob.Executed.ShouldBe(1);\n\n            Wait.Until(() => ImmediateJob.Executed > 1, timeoutInMilliseconds: 6000);\n            ImmediateJob.Executed.ShouldBeGreaterThan(1);\n        }\n\n        [Test]\n        public void disabled_jobs_are_not_executed_or_started()\n        {\n            DisabledJob.Executed.ShouldBe(0);\n            theRuntime.Get<IPollingJobs>().IsActive<DisabledJob>()\n                .ShouldBeFalse();\n\n        }\n    }\n\n    public class PollingImmediateRegistry : FubuRegistry\n    {\n        public PollingImmediateRegistry()\n        {\n            ServiceBus.Enable(true);\n\n            ServiceBus.EnableInMemoryTransport();\n\n            Polling.RunJob<ImmediateJob>().ScheduledAtInterval<PollingImmediateSettings>(x => x.ImmediateInterval).RunImmediately();\n            Polling.RunJob<DelayJob>().ScheduledAtInterval<PollingImmediateSettings>(x => x.DelayInterval);\n        }\n    }\n\n    public class PollingImmediateSettings\n    {\n        public PollingImmediateSettings()\n        {\n            // Make these sufficiently high to allow bootstrapping to finish before any jobs hit their timer\n            ImmediateInterval = 5000;\n            DelayInterval = 5000;\n        }\n\n        public double ImmediateInterval { get; set; }\n        public double DelayInterval { get; set; }\n    }\n\n\n\n    public class ImmediateJob : IJob\n    {\n        public static int Executed = 0;\n\n        public void Execute(CancellationToken token)\n        {\n            Executed++;\n        }\n    }\n\n    public class DelayJob : IJob\n    {\n        public static int Executed = 0;\n\n        public void Execute(CancellationToken token)\n        {\n            Executed++;\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Polling/PollingJobTester.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Polling\n{\n    [System.ComponentModel.Description(\"A polling job just for testing purposes\")]\n    public class APollingJob : IJob\n    {\n        public void Execute(CancellationToken cancellation)\n        {\n            \n        }\n    }\n\n    [TestFixture]\n    public class PollingJobTester : InteractionContext<PollingJob<APollingJob, PollingJobSettings>>\n    {\n        protected override void beforeEach()\n        {\n            var definition = PollingJobChain.For<APollingJob, PollingJobSettings>(x => x.Polling);\n            Services.Inject(definition);\n        }\n\n        [Test]\n        public void run_now_successfully()\n        {\n            ClassUnderTest.RunNow();\n\n            MockFor<IServiceBus>().AssertWasCalled(x => x.Consume(new JobRequest<APollingJob>()), x => x.IgnoreArguments());\n        }\n\n        [Test]\n        public void run_now_with_a_failure()\n        {\n            var ex = new NotImplementedException();\n            MockFor<IServiceBus>().Expect(x => x.Consume(new JobRequest<APollingJob>()))\n                                  .IgnoreArguments()\n                                  .Throw(ex);\n\n            ClassUnderTest.RunNow();\n\n            MockFor<IPollingJobLogger>().AssertWasCalled(x => x.FailedToSchedule(typeof(APollingJob), ex));\n        }\n\n        [Test]\n        public void smoke_test_describe()\n        {\n            var description = Description.For(ClassUnderTest);\n            description.Title.ShouldBe(\"Polling Job for APollingJob\");\n            description.ShortDescription.ShouldBe(\"A polling job just for testing purposes\");\n            description.Properties[\"Interval\"].ShouldBe(\"350 ms\");\n            description.Properties[\"Config\"].ShouldBe(\"x => x.Polling\");\n            description.Properties[\"Scheduled Execution\"].ShouldBe(\"WaitUntilInterval\");\n        }\n    }\n\n    public class PollingJobSettings : DescribesItself\n    {\n        public PollingJobSettings()\n        {\n            Polling = 350;\n        }\n\n        public double Polling { get; set; }\n        public void Describe(Description description)\n        {\n            description.Properties[nameof(Polling)] = $\"{Polling} ms\";\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Polling/PollingServicesRegistry_spec.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing NUnit.Framework;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.ServiceBus.Polling\n{\n    [TestFixture]\n    public class PollingServicesRegistry_spec\n    {\n        [Test]\n        public void service_registrations()\n        {\n            using (var runtime = FubuRuntime.BasicBus())\n            {\n                var container = runtime.Get<IContainer>();\n\n                container.DefaultRegistrationIs<ITimer, DefaultTimer>();\n                container.DefaultRegistrationIs<IPollingJobLogger, PollingJobLogger>();\n\n                container.ShouldHaveRegistration<IDeactivator, PollingJobDeactivator>();\n\n                container.DefaultSingletonIs<IPollingJobs, PollingJobs>();\n            }\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Publishing/EventPublisherTester.cs",
    "content": "﻿using FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Web;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Publishing\n{\n    [TestFixture]\n    public class publishing_a_message_successfully : InteractionContext<SendMessageBehavior<Message1>>\n    {\n        private Message1 theMessage;\n        private InMemoryFubuRequest theRequest;\n\n        protected override void beforeEach()\n        {\n            theMessage = new Message1();\n            theRequest = new InMemoryFubuRequest();\n            theRequest.Set(theMessage);\n            Services.Inject<IFubuRequest>(theRequest);\n\n            ClassUnderTest.InsideBehavior = MockFor<IActionBehavior>();\n\n            ClassUnderTest.Invoke();\n        }\n\n        [Test]\n        public void should_send_the_message_to_the_service_bus()\n        {\n            MockFor<IServiceBus>().AssertWasCalled(x => x.Send(theMessage));\n        }\n\n        [Test]\n        public void should_call_through_to_the_inner_behavior()\n        {\n            MockFor<IActionBehavior>().AssertWasCalled(x => x.Invoke());\n        }\n\n        [Test]\n        public void should_return_a_successful_ajax_continuation()\n        {\n            var continuation = theRequest.Get<AjaxContinuation>();\n            continuation.Success.ShouldBeTrue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/RecordingChannel.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    public class RecordingChannel : IChannel\n    {\n        public readonly IList<Envelope> Sent = new List<Envelope>();\n\n        public void Dispose()\n        {\n            throw new NotImplementedException();\n        }\n\n        public bool RequiresPolling {get { return false; }}\n        public Uri Address { get; private set; }\n        public ReceivingState Receive(IReceiver receiver)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void Send(byte[] data, IHeaders headers)\n        {\n            var envelope = new Envelope(headers) {Data = data};\n            Sent.Add(envelope);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/RecordingEnvelopeSender.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Cascading;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    public class RecordingEnvelopeSender : IEnvelopeSender, IOutgoingSender\n    {\n        public readonly IList<Envelope> Sent = new List<Envelope>(); \n        public readonly IList<object> Outgoing = new List<object>(); \n\n        \n\n        public string Send(Envelope envelope)\n        {\n            Sent.Add(envelope);\n\n            return envelope.CorrelationId;\n        }\n\n        public void SendOutgoingMessages(Envelope original, IEnumerable<object> cascadingMessages)\n        {\n            Outgoing.AddRange(cascadingMessages);\n        }\n\n        public void SendFailureAcknowledgement(Envelope original, string message)\n        {\n            FailureAcknowledgementMessage = message;\n        }\n\n        void IOutgoingSender.Send(Envelope envelope)\n        {\n            Sent.Add(envelope);\n        }\n\n        public string Send(Envelope envelope, IMessageCallback callback)\n        {\n            Sent.Add(envelope);\n            return envelope.CorrelationId;\n        }\n\n        public string FailureAcknowledgementMessage { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/RecordingReceiver.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    public class RecordingReceiver : IReceiver\n    {\n        // An immutable list would be useful here, if we were using the immutable library.\n        private readonly IList<Envelope> _received = new List<Envelope>(); \n\n        public IList<Envelope> Received\n        {\n            get\n            {\n                lock (_received)\n                {\n                    return _received.ToList(); \n                }\n            }\n        }\n\n        public void Receive(byte[] data, IHeaders headers, IMessageCallback callback)\n        {\n            var envelope = new Envelope(data, headers, callback);\n            lock (_received)\n            {\n                _received.Add(envelope); \n            }\n\n            envelope.Callback.MarkSuccessful();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/RecordingServiceBusTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    [TestFixture]\n    public class RecordingServiceBusTester\n    {\n        [Test]\n        public void send_records()\n        {\n            var message = new Message1();\n            var bus = new RecordingServiceBus();\n\n            bus.Send(message);\n\n            bus.Sent.Single().ShouldBeTheSameAs(message);\n        }\n\n        [Test]\n        public void consumed_messages()\n        {\n            var message = new Message1();\n            var bus = new RecordingServiceBus();\n\n            bus.Consume(message);\n\n            bus.Consumed.Single().ShouldBeTheSameAs(message);\n        }\n\n        [Test]\n        public void send_delayed_by_time_span()\n        {\n            var message = new Message1();\n            var bus = new RecordingServiceBus();\n\n            bus.DelaySend(message, 5.Minutes());\n\n            bus.DelayedSent.Single().Message.ShouldBeTheSameAs(message);\n            bus.DelayedSent.Single().Delay.ShouldBe(5.Minutes());\n        }\n\n        [Test]\n        public void send_delayed_by_time()\n        {\n            var time = DateTime.Today.AddHours(5);\n\n            var message = new Message1();\n            var bus = new RecordingServiceBus();\n\n            bus.DelaySend(message, time);\n\n            bus.DelayedSent.Single().Message.ShouldBeTheSameAs(message);\n            bus.DelayedSent.Single().Time.ShouldBe(time);\n\n        }\n\n        [Test]\n        public void send_and_wait()\n        {\n            var message = new Message1();\n            var bus = new RecordingServiceBus();\n\n            bus.SendAndWait(message).Wait();\n\n            // Checking for messages sent\n            bus.Sent.Single().ShouldBeTheSameAs(message);\n\n            // Checking for awaited calls\n            bus.Await.Single().ShouldBeTheSameAs(message);\n        }\n\n        [Test]\n        public void send_to_destination()\n        {\n            var destination = new Uri(\"memory://blah\");\n            var message = new Message1();\n            var bus = new RecordingServiceBus();\n\n            bus.Send(destination, message);\n\n            var sentTo = bus.SentDirectlyTo.Single();\n            sentTo.Destination.ShouldBe(destination);\n            sentTo.Message.ShouldBeTheSameAs(message);\n        }\n\n        [Test]\n        public void send_to_destination_and_wait()\n        {\n            var destination = new Uri(\"memory://blah\");\n            var message = new Message1();\n            var bus = new RecordingServiceBus();\n\n            bus.SendAndWait(destination, message);\n\n            var sentTo = bus.SentDirectlyTo.Single();\n            sentTo.Destination.ShouldBe(destination);\n            sentTo.Message.ShouldBeTheSameAs(message);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Registration/FuncBuilderTester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Registration;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Registration\n{\n    [TestFixture]\n    public class FuncBuilderTester\n    {\n        [Test]\n        public void can_compile_getter()\n        {\n            var sample = new SampleClass {Message = \"Success!\"};\n\n            var func = FuncBuilder.CompileGetter(sample.GetType().GetProperty(\"Message\")).As<Func<SampleClass, string>>();\n            var result = func(sample);\n            result.ShouldBe(sample.Message);\n        }\n\n        [Test]\n        public void can_compile_setter()\n        {\n            var message = \"Success!\";\n            var sample = new SampleClass {Message = \"Failed!\"};\n\n            var func = FuncBuilder.CompileSetter(sample.GetType().GetProperty(\"Message\")).As<Action<SampleClass, string>>();\n            func(sample, message);\n            sample.Message.ShouldBe(message);\n        }\n    }\n\n    public class SampleClass\n    {\n        public string Message { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Registration/HandlerSourceTester.cs",
    "content": "﻿using System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Registration;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Registration\n{\n    [TestFixture]\n    public class HandlerSourceTester\n    {\n        [Test]\n        public void apply_to_single_assembly_looking_for_Handler()\n        {\n            var source = new HandlerSource();\n            source.ExcludeTypes(x => x.Namespace != \"FubuMVC.Tests.ServiceBus.Registration\");\n\n            source.UseThisAssembly();\n            source.IncludeClassesSuffixedWithConsumer();\n\n            var findCalls = source.As<IHandlerSource>().FindCalls(GetType().Assembly);\n            findCalls.Wait();\n\n            var descriptions = findCalls.Result.Select(x => x.Description);\n            descriptions\n                .ShouldHaveTheSameElementsAs(\n                \"MyConsumer.M1(M1 input) : void\",\n\"MyConsumer.M2(M2 input) : void\",\n\"MyConsumer.M3(M3 input) : void\",\n\"MyOtherConsumer.M2(M2 input) : void\",\n\"MyOtherConsumer.M3(M3 input) : void\",\n\"MyOtherConsumer.M4(M4 input) : void\");\n        }\n\n        [Test]\n        public void uses_the_containing_assembly_by_default()\n        {\n            var source = new HandlerSource();\n            source.ExcludeTypes(x => x.Namespace != \"FubuMVC.Tests.ServiceBus.Registration\");\n\n            source.IncludeClassesSuffixedWithConsumer();\n\n            var descriptions = source.As<IHandlerSource>().FindCalls(GetType().Assembly).Result().Select(x => x.Description);\n            descriptions\n                .ShouldHaveTheSameElementsAs(\n                \"MyConsumer.M1(M1 input) : void\",\n\"MyConsumer.M2(M2 input) : void\",\n\"MyConsumer.M3(M3 input) : void\",\n\"MyOtherConsumer.M2(M2 input) : void\",\n\"MyOtherConsumer.M3(M3 input) : void\",\n\"MyOtherConsumer.M4(M4 input) : void\");\n        }\n\n        [Test]\n        public void custom_type_filter_on_excludes()\n        {\n            var source = new HandlerSource();\n            source.ExcludeTypes(x => x.Namespace != \"FubuMVC.Tests.ServiceBus.Registration\");\n\n            source.IncludeClassesSuffixedWithConsumer();\n            source.ExcludeTypes(x => x.Name == \"MyOtherConsumer\");\n\n            var descriptions = source.As<IHandlerSource>().FindCalls(GetType().Assembly).Result().Select(x => x.Description);\n            descriptions\n                .ShouldHaveTheSameElementsAs(\n                    \"MyConsumer.M1(M1 input) : void\",\n                    \"MyConsumer.M2(M2 input) : void\",\n                    \"MyConsumer.M3(M3 input) : void\");\n        }\n\n        [Test]\n        public void custom_type_filter_on_includeds()\n        {\n            var source = new HandlerSource();\n            source.ExcludeTypes(x => x.Namespace != \"FubuMVC.Tests.ServiceBus.Registration\");\n            source.IncludeTypes(x => x.Name == \"MyConsumer\");\n\n            var descriptions = source.As<IHandlerSource>().FindCalls(GetType().Assembly).Result().Select(x => x.Description);\n            descriptions\n                .ShouldHaveTheSameElementsAs(\n                    \"MyConsumer.M1(M1 input) : void\",\n                    \"MyConsumer.M2(M2 input) : void\",\n                    \"MyConsumer.M3(M3 input) : void\");\n        }\n\n        [Test]\n        public void custom_method_inclusion()\n        {\n            var source = new HandlerSource();\n            source.ExcludeTypes(x => x.Namespace != \"FubuMVC.Tests.ServiceBus.Registration\");\n            source.IncludeClassesSuffixedWithConsumer();\n            source.IncludeMethods(x => x.Name == \"M2\");\n\n            var descriptions = source.As<IHandlerSource>().FindCalls(GetType().Assembly).Result().Select(x => x.Description);\n            descriptions\n                .ShouldHaveTheSameElementsAs(\n\"MyConsumer.M2(M2 input) : void\",\n\"MyOtherConsumer.M2(M2 input) : void\");\n        }\n\n        [Test]\n        public void custom_method_exclusion()\n        {\n            var source = new HandlerSource();\n            source.ExcludeTypes(x => x.Namespace != \"FubuMVC.Tests.ServiceBus.Registration\");\n            source.IncludeClassesSuffixedWithConsumer();\n            source.ExcludeMethods(x => x.Name == \"M2\");\n\n            var descriptions = source.As<IHandlerSource>().FindCalls(GetType().Assembly).Result().Select(x => x.Description);\n            descriptions\n                .ShouldHaveTheSameElementsAs(\n                \"MyConsumer.M1(M1 input) : void\",\n\"MyConsumer.M3(M3 input) : void\",\n\"MyOtherConsumer.M3(M3 input) : void\",\n\"MyOtherConsumer.M4(M4 input) : void\");\n        }\n    }\n\n    public class MyConsumer\n    {\n        public void M1(M1 input){}\n        public void M2(M2 input){}\n        public void M3(M3 input){}\n\n        [NotHandler]\n        public void ShouldBeIgnored(M3 input){}\n    }\n\n    public class MyOtherConsumer\n    {\n        public void M2(M2 input) { }\n        public void M3(M3 input) { }        \n        public void M4(M4 input) { }        \n    }\n\n\n\n    public class M1{}\n    public class M2{}\n    public class M3{}\n    public class M4{}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Registration/Nodes/HandlerCallTester.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing NUnit.Framework;\nusing Shouldly;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.Tests.ServiceBus.Registration.Nodes\n{\n    [TestFixture]\n    public class HandlerCallTester\n    {\n        [Test]\n        public void handler_call_should_not_match_property_setters()\n        {\n            var handlerType = typeof (ITargetHandler);\n            var property = handlerType.GetProperty(\"Message\");\n            var method = property.GetSetMethod();\n            HandlerCall.IsCandidate(method).ShouldBeFalse();\n        }\n\n\n        [Test]\n        public void throws_chunks_if_you_try_to_use_a_method_with_no_inputs()\n        {\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(\n                () => { HandlerCall.For<ITargetHandler>(x => x.ZeroInZeroOut()); });\n        }\n\n        [Test]\n        public void is_candidate()\n        {\n            HandlerCall.IsCandidate(ReflectionHelper.GetMethod<ITargetHandler>(x => x.ZeroInZeroOut())).ShouldBeFalse();\n            HandlerCall.IsCandidate(ReflectionHelper.GetMethod<ITargetHandler>(x => x.OneInOneOut(null))).ShouldBeTrue();\n            HandlerCall.IsCandidate(ReflectionHelper.GetMethod<ITargetHandler>(x => x.OneInZeroOut(null)))\n                .ShouldBeTrue();\n            HandlerCall.IsCandidate(ReflectionHelper.GetMethod<ITargetHandler>(x => x.ManyIn(null, null)))\n                .ShouldBeFalse();\n            HandlerCall.IsCandidate(ReflectionHelper.GetMethod<ITargetHandler>(x => x.ReturnsValueType(null)))\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void is_candidate_allows_interface_return_types()\n        {\n            HandlerCall.IsCandidate(ReflectionHelper.GetMethod<ITargetHandler>(x => x.ReturnsInterface(null)))\n                .ShouldBeTrue();\n        }\n\n        [Test]\n        public void could_handle()\n        {\n            var handler1 = HandlerCall.For<SomeHandler>(x => x.Interface(null));\n            var handler2 = HandlerCall.For<SomeHandler>(x => x.BaseClass(null));\n\n            handler1.CouldHandleOtherMessageType(typeof (Input1)).ShouldBeTrue();\n            handler2.CouldHandleOtherMessageType(typeof (Input1)).ShouldBeTrue();\n\n            handler1.CouldHandleOtherMessageType(typeof (Input2)).ShouldBeFalse();\n            handler1.CouldHandleOtherMessageType(typeof (Input2)).ShouldBeFalse();\n        }\n\n        [Test]\n        public void could_handle_is_false_for_its_own_input_type()\n        {\n            var handler = HandlerCall.For<ITargetHandler>(x => x.OneInOneOut(null));\n            handler.CouldHandleOtherMessageType(typeof (Input)).ShouldBeFalse();\n        }\n\n        [Test]\n        public void handler_equals()\n        {\n            var handler1 = HandlerCall.For<SomeHandler>(x => x.Interface(null));\n            var handler2 = HandlerCall.For<SomeHandler>(x => x.Interface(null));\n            var handler3 = HandlerCall.For<SomeHandler>(x => x.Interface(null));\n\n            handler1.ShouldBe(handler2);\n            handler1.ShouldBe(handler3);\n            handler3.ShouldBe(handler2);\n            handler2.ShouldBe(handler1);\n        }\n\n        [Test]\n        public void handler_is_async_negative()\n        {\n            HandlerCall.For<SomeHandler>(x => x.Interface(null)).IsAsync.ShouldBeFalse();\n        }\n\n        [Test]\n        public void handler_is_async_positive()\n        {\n            HandlerCall.For<TaskHandler>(x => x.Go(null)).IsAsync.ShouldBeTrue();\n            HandlerCall.For<TaskHandler>(x => x.Other(null)).IsAsync.ShouldBeTrue();\n        }\n\n        public class TaskHandler\n        {\n            public Task Go(Message message)\n            {\n                return null;\n            }\n\n            public Task<Message1> Other(Message message)\n            {\n                return null;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Cascading/DelayedResponseTester.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Cascading;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Cascading\n{\n    [TestFixture]\n    public class DelayedResponseTester\n    {\n        [Test]\n        public void create_and_send_with_timespan_delayed()\n        {\n            var message = new Message1();\n            var delayed = new DelayedResponse(message, 5.Minutes());\n\n            var original = MockRepository.GenerateMock<Envelope>();\n            var response = new Envelope();\n\n            original.Stub(x => x.ForResponse(message)).Return(response);\n\n            delayed.CreateEnvelope(original).ShouldBeTheSameAs(response);\n            response.ExecutionTime.ShouldBe(delayed.Time);\n        }\n    }\n}   "
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Cascading/OutgoingSenderTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Cascading;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Cascading\n{\n    [TestFixture]\n    public class OutgoingSenderTester : InteractionContext<OutgoingSender>\n    {\n        [Test]\n        public void swallows_and_logs_exceptions_on_send()\n        {\n            // ONLY FOR NOW\n            var ex = new NotImplementedException();\n            var envelope = new Envelope();\n\n            MockFor<IEnvelopeSender>().Stub(x => x.Send(envelope)).Throw(ex);\n\n            ClassUnderTest.Send(envelope);\n\n            MockFor<ILogger>().AssertWasCalled(x => x.Error(envelope.OriginalId, \"Failure while trying to send a cascading message\", ex));\n        }\n\n        [Test]\n        public void use_envelope_from_the_original_if_not_ISendMyself()\n        {\n            var original = MockRepository.GenerateMock<Envelope>();\n            var message = new Message1();\n\n            var resulting = new Envelope();\n\n            original.Expect(x => x.ForResponse(message)).Return(resulting);\n\n            ClassUnderTest.SendOutgoingMessage(original, message);\n\n            MockFor<IEnvelopeSender>().AssertWasCalled(x => x.Send(resulting));\n        }\n\n        [Test]\n        public void use_envelope_from_ISendMySelf()\n        {\n            var message = MockRepository.GenerateMock<ISendMyself>();\n            var original = new Envelope();\n            var resulting = new Envelope();\n\n            message.Stub(x => x.CreateEnvelope(original)).Return(resulting);\n\n            ClassUnderTest.SendOutgoingMessage(original, message);\n\n            MockFor<IEnvelopeSender>().AssertWasCalled(x => x.Send(resulting));\n        }\n\n        [Test]\n        public void if_original_envelope_is_ack_requested_send_ack_back()\n        {\n            var original = new Envelope\n            {\n                ReplyUri = \"foo://bar\".ToUri(),\n                AckRequested = true,\n                CorrelationId = Guid.NewGuid().ToString()\n            };\n\n            ClassUnderTest.SendOutgoingMessages(original, new object[0]);\n\n            var envelope = MockFor<IEnvelopeSender>().GetArgumentsForCallsMadeOn(x => x.Send(null))[0][0]\n                .As<Envelope>();\n            envelope.ShouldNotBeNull();\n\n            envelope.ResponseId.ShouldBe(original.CorrelationId);\n            envelope.Destination.ShouldBe(original.ReplyUri);\n            envelope.Message.ShouldBe(new Acknowledgement {CorrelationId = original.CorrelationId});\n            envelope.ParentId.ShouldBe(original.CorrelationId);\n        }\n\n        [Test]\n        public void do_not_send_ack_if_no_ack_is_requested()\n        {\n            var original = new Envelope\n            {\n                ReplyUri = \"foo://bar\".ToUri(),\n                AckRequested = false,\n                CorrelationId = Guid.NewGuid().ToString()\n            };\n\n            ClassUnderTest.SendOutgoingMessages(original, new object[0]);\n\n            MockFor<IEnvelopeSender>().AssertWasNotCalled(x => x.Send(null), x => x.IgnoreArguments());\n        }\n\n        [Test]\n        public void when_sending_a_failure_ack_if_no_ack_or_response_is_requested_do_nothing()\n        {\n            var original = new Envelope\n            {\n                ReplyUri = \"foo://bar\".ToUri(),\n                AckRequested = false,\n                ReplyRequested = null,\n                CorrelationId = Guid.NewGuid().ToString()\n            };\n\n            var recordingSender = new RecordingEnvelopeSender();\n            new OutgoingSender(recordingSender, new RecordingLogger())\n                .SendFailureAcknowledgement(original, \"you stink\");\n\n            recordingSender.Outgoing.Any()\n                .ShouldBeFalse();\n        }\n\n\n    }\n\n    [TestFixture]\n    public class when_sending_a_failure_ack_and_ack_is_requested\n    {\n        private FailureAcknowledgement theAck;\n        private Envelope theSentEnvelope;\n        private Envelope original;\n\n        [SetUp]\n        public void SetUp()\n        {\n            original = new Envelope\n            {\n                ReplyUri = \"foo://bar\".ToUri(),\n                AckRequested = true,\n                CorrelationId = Guid.NewGuid().ToString()\n            };\n\n            var recordingSender = new RecordingEnvelopeSender();\n            new OutgoingSender(recordingSender, new RecordingLogger())\n                .SendFailureAcknowledgement(original, \"you stink\");\n\n            theSentEnvelope = recordingSender.Sent.Single();\n            theAck = theSentEnvelope.Message as FailureAcknowledgement;\n        }\n\n        [Test]\n        public void should_have_sent_a_failure_ack()\n        {\n            theAck.ShouldNotBeNull();\n        }\n\n        [Test]\n        public void the_message_should_be_what_was_requested()\n        {\n            theAck.Message.ShouldBe(\"you stink\");\n        }\n\n        [Test]\n        public void should_have_The_parent_id_set_to_the_original_id_for_tracking()\n        {\n            theSentEnvelope.ParentId.ShouldBe(original.CorrelationId);\n        }\n\n        [Test]\n        public void should_have_The_correlation_id_from_the_original_envelope()\n        {\n            theAck.CorrelationId.ShouldBe(original.CorrelationId);\n        }\n\n        [Test]\n        public void should_be_sent_back_to_the_requester()\n        {\n            theSentEnvelope.Destination.ShouldBe(original.ReplyUri);\n        }\n\n        [Test]\n        public void the_response_id_going_back_should_be_the_original_correlation_id()\n        {\n            theSentEnvelope.ResponseId.ShouldBe(original.CorrelationId);\n        }\n    }\n\n\n    [TestFixture]\n    public class when_sending_a_failure_ack_and_response_is_requested\n    {\n        private FailureAcknowledgement theAck;\n        private Envelope theSentEnvelope;\n        private Envelope original;\n\n        [SetUp]\n        public void SetUp()\n        {\n            original = new Envelope\n            {\n                ReplyUri = \"foo://bar\".ToUri(),\n                AckRequested = false,\n                ReplyRequested = \"Message1\",\n                CorrelationId = Guid.NewGuid().ToString()\n            };\n\n            var recordingSender = new RecordingEnvelopeSender();\n            new OutgoingSender(recordingSender, new RecordingLogger())\n                .SendFailureAcknowledgement(original, \"you stink\");\n\n            theSentEnvelope = recordingSender.Sent.Single();\n            theAck = theSentEnvelope.Message as FailureAcknowledgement;\n        }\n\n        [Test]\n        public void should_have_sent_a_failure_ack()\n        {\n            theAck.ShouldNotBeNull();\n        }\n\n        [Test]\n        public void the_message_should_be_what_was_requested()\n        {\n            theAck.Message.ShouldBe(\"you stink\");\n        }\n\n        [Test]\n        public void should_have_The_correlation_id_from_the_original_envelope()\n        {\n            theAck.CorrelationId.ShouldBe(original.CorrelationId);\n        }\n\n        [Test]\n        public void should_be_sent_back_to_the_requester()\n        {\n            theSentEnvelope.Destination.ShouldBe(original.ReplyUri);\n        }\n\n        [Test]\n        public void the_response_id_going_back_should_be_the_original_correlation_id()\n        {\n            theSentEnvelope.ResponseId.ShouldBe(original.CorrelationId);\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Cascading/RespondTester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Cascading;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Cascading\n{\n    [TestFixture]\n    public class RespondTester\n    {\n        private Message1 theMessage;\n        private Envelope theOriginalEnvelope;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theMessage = new Message1();\n            theOriginalEnvelope = new Envelope\n            {\n                ReplyUri = \"lq://foo\".ToUri()\n            };\n        }\n\n        [Test]\n        public void respond_gets_the_message_on_the_new_envelope()\n        {\n            Respond.With(theMessage).CreateEnvelope(theOriginalEnvelope)\n                .Message.ShouldBeTheSameAs(theMessage);\n        }\n\n        [Test]\n        public void with_headers()\n        {\n            var response = Respond.With(theMessage).WithHeader(\"A\", \"1\").WithHeader(\"B\", \"2\");\n            var envelope = response\n                .CreateEnvelope(theOriginalEnvelope);\n\n            envelope.Headers[\"A\"].ShouldBe(\"1\");\n            envelope.Headers[\"B\"].ShouldBe(\"2\");\n        \n            response.ToString().ShouldContain(\"A='1'\");\n            response.ToString().ShouldContain(\"B='2'\");\n        }\n\n        [Test]\n        public void to_sender()\n        {\n            var response = Respond.With(theMessage).ToSender();\n            var envelope = response.CreateEnvelope(theOriginalEnvelope);\n\n            envelope.Destination.ShouldBe(theOriginalEnvelope.ReplyUri);\n\n            response.ToString().ShouldContain(\"respond to sender\");\n        }\n\n        [Test]\n        public void to_destination()\n        {\n            var uri = \"lq://bar\".ToUri();\n\n            var response = Respond.With(theMessage).To(uri);\n            var envelope = response.CreateEnvelope(theOriginalEnvelope);\n\n            envelope.Destination.ShouldBe(uri);\n\n            response.ToString().ShouldContain(\"Destination=\" + uri);\n        }\n\n        [Test]\n        public void delayed_until()\n        {\n            var time = DateTime.Today.ToUniversalTime();\n            var response = Respond.With(theMessage).DelayedUntil(time);\n            var envelope = response.CreateEnvelope(theOriginalEnvelope);\n\n            envelope.ExecutionTime.ShouldBe(time);\n\n\n        }\n\n        [Test]\n        public void delay_by()\n        {\n            var now = DateTime.UtcNow;\n\n            var response = Respond.With(theMessage).DelayedBy(5.Minutes());\n            var envelope = response.CreateEnvelope(theOriginalEnvelope);\n\n            // Fuzzy match and I'm being lazy.  You can't trust equals on DateTime\n            // and we're not faking the clock\n            (envelope.ExecutionTime > now.AddMinutes(4)).ShouldBeTrue();\n            (envelope.ExecutionTime < now.AddMinutes(6)).ShouldBeTrue();\n        }\n\n        [Test]\n        public void assert_was_sent_back_to_sender_happy_path()\n        {\n            Respond.With(new Message1()).ToSender()\n                .AssertWasSentBackToSender();\n        }\n\n        [Test]\n        public void assert_was_sent_back_to_sender_sad_path()\n        {\n            Exception<Exception>.ShouldBeThrownBy(() => {\n                Respond.With(new Message1())\n                    .AssertWasSentBackToSender();\n            }).Message.ShouldContain(\"Was NOT sent back to the sender\");\n        }\n    }\n\n    \n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Cascading/RespondToSenderTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Cascading;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Cascading\n{\n    [TestFixture]\n    public class RespondToSenderTester\n    {\n        [Test]\n        public void has_to_set_the_destination_header()\n        {\n            var message = new Message1();\n            var respondToSender = new RespondToSender(message);\n\n            var original = MockRepository.GenerateMock<Envelope>();\n            original.ReplyUri = new Uri(\"memory://me/reply\");\n\n            var response = new Envelope();\n\n\n            original.Stub(x => x.ForResponse(message)).Return(response);\n\n\n            respondToSender.CreateEnvelope(original).ShouldBeTheSameAs(response);\n            response.Destination.ShouldBe(original.ReplyUri);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Cascading/SendDirectlyToTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Cascading;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Cascading\n{\n    [TestFixture]\n    public class SendDirectlyToTester\n    {\n        [Test]\n        public void create_and_send_to_correct_destination()\n        {\n            var destination = new Uri(\"memory://blah\");\n            var message = new Message1();\n            var sendDirectlyTo = new SendDirectlyTo(destination, message);\n\n            var original = MockRepository.GenerateMock<Envelope>();\n            var response = new Envelope();\n\n            original.Stub(x => x.ForSend(message)).Return(response);\n\n            sendDirectlyTo.CreateEnvelope(original).ShouldBeTheSameAs(response);\n            response.Destination.ShouldBe(destination);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Delayed/DelayedEnvelopeProcessorTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Delayed;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Delayed\n{\n    [TestFixture]\n    public class DelayedEnvelopeProcessorTester : InteractionContext<DelayedEnvelopeProcessor>\n    {\n        [Test]\n        public void dequeue_from_all_the_transports()\n        {\n            var transports = Services.CreateMockArrayFor<ITransport>(4);\n\n            LocalSystemTime = DateTime.Today.AddHours(5);\n\n            ClassUnderTest.Execute(new CancellationToken());\n\n            transports.Each(transport => {\n                transport.AssertWasCalled(x => x.ReplayDelayed(UtcSystemTime));\n            });\n        }\n\n        [Test]\n        public void dequeue_a_single_transport_should_log_all_the_requeued_envelopes()\n        {\n            var logger = new RecordingLogger();\n            Services.Inject<ILogger>(logger);\n\n            var envelopes = new EnvelopeToken[] {new EnvelopeToken(), new EnvelopeToken(), new EnvelopeToken()};\n            LocalSystemTime = DateTime.Today.AddHours(5);\n            var theTransport = MockFor<ITransport>();\n\n            theTransport.Stub(x => x.ReplayDelayed(UtcSystemTime))\n                        .Return(envelopes);\n\n            ClassUnderTest.DequeuFromTransport(theTransport, UtcSystemTime);\n\n            envelopes.Each(env => {\n                logger.InfoMessages.ShouldContain(new DelayedEnvelopeAddedBackToQueue{Envelope = env});\n            });\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/EnvelopeModifierTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing Shouldly;\nusing NUnit.Framework;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime\n{\n    [TestFixture]\n    public class EnvelopeModifierTester\n    {\n        [Test]\n        public void abstract_modifier_is_actually_useful()\n        {\n            FakeEnvelopeModifier.Modified.Clear();\n\n            var modifier = new FakeEnvelopeModifier();\n\n            modifier.Modify(new Envelope{Message = new Message()});\n            modifier.Modify(new Envelope{Message = new OneMessage()});\n            modifier.Modify(new Envelope{Message = new TwoMessage()});\n            modifier.Modify(new Envelope{Message = new GreenFoo()});\n\n            FakeEnvelopeModifier.Modified.Select(x => x.GetType())\n                .ShouldHaveTheSameElementsAs(typeof(Message), typeof(OneMessage), typeof(TwoMessage));\n        }\n    }\n\n    public class FakeEnvelopeModifier : EnvelopeModifier<Message>\n    {\n        public static readonly IList<Message> Modified = new List<Message>();\n\n        public override void Modify(Envelope envelope, Message target)\n        {\n            Modified.Add(target);\n        }\n    }\n\n    public class GreenFoo { }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/EnvelopeSenderTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime\n{\n    [TestFixture]\n    public class when_sending_a_message : InteractionContext<EnvelopeSender>\n    {\n        private StubChannelNode node1;\n        private StubChannelNode node2;\n        private StubChannelNode node3;\n        private Message theMessage;\n        private Envelope theEnvelope;\n        private string correlationId;\n        private RecordingLogger theLogger;\n        private IEnvelopeModifier[] modifiers;\n\n        protected override void beforeEach()\n        {\n            node1 = new StubChannelNode();\n            node2 = new StubChannelNode();\n            node3 = new StubChannelNode();\n\n            theMessage = new Message();\n            theEnvelope = new Envelope {Message = theMessage};\n\n            theLogger = new RecordingLogger();\n            Services.Inject<ILogger>(theLogger);\n\n            modifiers = Services.CreateMockArrayFor<IEnvelopeModifier>(5);\n\n            MockFor<ISubscriptionCache>().Stub(x => x.FindDestinationChannels(theEnvelope))\n                                     .Return(new ChannelNode[] { node1, node2, node3 });\n\n            correlationId = ClassUnderTest.Send(theEnvelope);\n\n        }\n\n        [Test]\n        public void adds_the_message_type_header()\n        {\n            theEnvelope.Headers[Envelope.MessageTypeKey].ShouldBe(theMessage.GetType().FullName);\n        }\n\n        [Test]\n        public void calls_all_the_modifiers_to_optionally_enhance_the_envelope()\n        {\n            modifiers.Each(x => x.AssertWasCalled(o => o.Modify(theEnvelope)));\n        }\n\n        [Test]\n        public void should_audit_each_node_sender_for_the_envelope()\n        {\n            theLogger.InfoMessages.ShouldContain(new EnvelopeSent(theEnvelope.ToToken(), node1));\n            theLogger.InfoMessages.ShouldContain(new EnvelopeSent(theEnvelope.ToToken(), node2));\n            theLogger.InfoMessages.ShouldContain(new EnvelopeSent(theEnvelope.ToToken(), node3));\n        }\n\n        [Test]\n        public void all_nodes_receive_teh_message()\n        {\n            node1.LastEnvelope.ShouldBeTheSameAs(theEnvelope);\n            node2.LastEnvelope.ShouldBeTheSameAs(theEnvelope);\n            node3.LastEnvelope.ShouldBeTheSameAs(theEnvelope);\n        }\n\n        [Test]\n        public void adds_a_correlation_id_to_the_envelope()\n        {\n            Guid.Parse(theEnvelope.CorrelationId)\n                .ShouldNotBe(Guid.Empty);\n\n            theEnvelope.CorrelationId.ShouldBe(correlationId);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/EnvelopeTester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime\n{\n    [TestFixture]\n    public class EnvelopeTester\n    {\n        [Test]\n        public void has_a_correlation_id_by_default()\n        {\n            new Envelope().CorrelationId.ShouldNotBeNull();\n\n            new Envelope().CorrelationId.ShouldNotBe(new Envelope().CorrelationId);\n            new Envelope().CorrelationId.ShouldNotBe(new Envelope().CorrelationId);\n            new Envelope().CorrelationId.ShouldNotBe(new Envelope().CorrelationId);\n            new Envelope().CorrelationId.ShouldNotBe(new Envelope().CorrelationId);\n            new Envelope().CorrelationId.ShouldNotBe(new Envelope().CorrelationId);\n        }\n\n        [Test]\n        public void does_not_override_an_existing_correlation_id()\n        {\n            var headers = new NameValueHeaders();\n            headers[Envelope.IdKey] = \"FOO\";\n\n            var envelope = new Envelope(headers);\n            envelope.CorrelationId.ShouldBe(\"FOO\");\n        }\n\n        [Test]\n        public void will_assign_a_new_correlation_id_if_none_in_headers()\n        {\n            new Envelope(new NameValueHeaders()).CorrelationId\n                .IsEmpty().ShouldBeFalse();\n        }\n\n        [Test]\n        public void default_values_for_original_and_parent_id_are_null()\n        {\n            var parent = new Envelope\n            {\n                CorrelationId = Guid.NewGuid().ToString()\n            };\n\n            parent.OriginalId.ShouldBeNull();\n            parent.ParentId.ShouldBeNull();\n        }\n\n        [Test]\n        public void original_message_creating_child_envelope()\n        {\n            var parent = new Envelope\n            {\n                CorrelationId = Guid.NewGuid().ToString()\n            };\n\n            var childMessage = new Message1();\n\n            var child = parent.ForResponse(childMessage);\n\n            child.Message.ShouldBeTheSameAs(childMessage);\n\n            child.OriginalId.ShouldBe(parent.CorrelationId);\n            child.ParentId.ShouldBe(parent.CorrelationId);\n        }\n\n        [Test]\n        public void parent_that_is_not_original_creating_child_envelope()\n        {\n            var parent = new Envelope\n            {\n                CorrelationId = Guid.NewGuid().ToString(),\n                OriginalId = Guid.NewGuid().ToString()\n            };\n\n            var childMessage = new Message1();\n\n            var child = parent.ForResponse(childMessage);\n\n            child.Message.ShouldBeTheSameAs(childMessage);\n\n            child.OriginalId.ShouldBe(parent.OriginalId);\n            child.ParentId.ShouldBe(parent.CorrelationId);\n        }\n\n        [Test]\n        public void if_reply_requested_header_exists_in_parent_and_matches_the_message_type()\n        {\n            var parent = new Envelope\n            {\n                CorrelationId = Guid.NewGuid().ToString(),\n                OriginalId = Guid.NewGuid().ToString(),\n                ReplyUri = \"foo://bar\".ToUri(),\n                ReplyRequested = typeof(Message1).Name\n            };\n\n            var childMessage = new Message1();\n\n            var child = parent.ForResponse(childMessage);\n\n            child.Headers[Envelope.ResponseIdKey].ShouldBe(parent.CorrelationId);\n            child.Destination.ShouldBe(parent.ReplyUri);\n        }\n\n\n        [Test]\n        public void if_reply_requested_header_exists_in_parent_and_does_NOT_match_the_message_type()\n        {\n            var parent = new Envelope\n            {\n                CorrelationId = Guid.NewGuid().ToString(),\n                OriginalId = Guid.NewGuid().ToString(),\n                ReplyUri = \"foo://bar\".ToUri(),\n                ReplyRequested = typeof(Message2).Name\n            };\n\n            var childMessage = new Message1();\n\n            var child = parent.ForResponse(childMessage);\n\n            child.Headers.Has(Envelope.ResponseIdKey).ShouldBeFalse();\n            child.Destination.ShouldBeNull();\n        }\n\n        [Test]\n        public void do_not_set_destination_or_response_if_requested_header_does_not_exist_in_parent()\n        {\n            var parent = new Envelope\n            {\n                CorrelationId = Guid.NewGuid().ToString(),\n                OriginalId = Guid.NewGuid().ToString(),\n                Source = \"foo://bar\".ToUri()\n            };\n\n            parent.Headers.Has(Envelope.ReplyRequestedKey).ShouldBeFalse();\n\n            var childMessage = new Message1();\n\n            var child = parent.ForResponse(childMessage);\n\n            child.Headers.Has(Envelope.ResponseIdKey).ShouldBeFalse();\n            child.Destination.ShouldBeNull();\n        }\n\n        [Test]\n        public void source_property()\n        {\n            var envelope = new Envelope();\n\n            envelope.Source.ShouldBeNull();\n\n            var uri = \"fake://thing\".ToUri();\n            envelope.Source = uri;\n\n            envelope.Headers[Envelope.SourceKey].ShouldBe(uri.ToString());\n            envelope.Source.ShouldBe(uri);\n        }\n\n        [Test]\n        public void reply_uri_property()\n        {\n            var envelope = new Envelope();\n\n            envelope.ReplyUri.ShouldBeNull();\n\n            var uri = \"fake://thing\".ToUri();\n            envelope.ReplyUri = uri;\n\n            envelope.Headers[Envelope.ReplyUriKey].ShouldBe(uri.ToString());\n            envelope.ReplyUri.ShouldBe(uri);\n        }\n\n\n        [Test]\n        public void content_type()\n        {\n            var envelope = new Envelope();\n            envelope.ContentType.ShouldBe(null);\n\n            envelope.ContentType = \"text/xml\";\n\n            envelope.Headers[Envelope.ContentTypeKey].ShouldBe(\"text/xml\");\n            envelope.ContentType.ShouldBe(\"text/xml\");\n        }\n\n        [Test]\n        public void original_id()\n        {\n            var envelope = new Envelope();\n            envelope.OriginalId.ShouldBeNull();\n\n            var originalId = Guid.NewGuid().ToString();\n            envelope.OriginalId = originalId;\n\n            envelope.Headers[Envelope.OriginalIdKey].ShouldBe(originalId);\n            envelope.OriginalId.ShouldBe(originalId);\n        }\n\n        [Test]\n        public void ParentId()\n        {\n            var envelope = new Envelope();\n            envelope.ParentId.ShouldBeNull();\n\n            var parentId = Guid.NewGuid().ToString();\n            envelope.ParentId = parentId;\n\n            envelope.Headers[Envelope.ParentIdKey].ShouldBe(parentId);\n            envelope.ParentId.ShouldBe(parentId);\n        }\n\n        [Test]\n        public void ResponseId()\n        {\n            var envelope = new Envelope();\n            envelope.ResponseId.ShouldBeNull();\n\n            var responseId = Guid.NewGuid().ToString();\n            envelope.ResponseId = responseId;\n\n            envelope.Headers[Envelope.ResponseIdKey].ShouldBe(responseId);\n            envelope.ResponseId.ShouldBe(responseId);\n        }\n\n        [Test]\n        public void destination_property()\n        {\n            var envelope = new Envelope();\n\n            envelope.Destination.ShouldBeNull();\n\n            var uri = \"fake://thing\".ToUri();\n            envelope.Destination = uri;\n\n            envelope.Headers[Envelope.DestinationKey].ShouldBe(uri.ToString());\n            envelope.Destination.ShouldBe(uri);\n        }\n\n        [Test]\n        public void received_at_property()\n        {\n            var envelope = new Envelope();\n\n            envelope.ReceivedAt.ShouldBeNull();\n\n            var uri = \"fake://thing\".ToUri();\n            envelope.ReceivedAt = uri;\n\n            envelope.Headers[Envelope.ReceivedAtKey].ShouldBe(uri.ToString());\n            envelope.ReceivedAt.ShouldBe(uri);\n        }\n\n        [Test]\n        public void reply_requested()\n        {\n            var envelope = new Envelope();\n            envelope.ReplyRequested.ShouldBeNull();\n\n\n            envelope.ReplyRequested = \"Foo\";\n            envelope.Headers[Envelope.ReplyRequestedKey].ShouldBe(\"Foo\");\n            envelope.ReplyRequested.ShouldBe(\"Foo\");\n\n            envelope.ReplyRequested = null;\n            envelope.ReplyRequested.ShouldBeNull();\n        }\n\n        [Test]\n        public void ack_requested()\n        {\n            var envelope = new Envelope();\n            envelope.AckRequested.ShouldBeFalse();\n\n\n            envelope.AckRequested = true;\n            envelope.Headers[Envelope.AckRequestedKey].ShouldBe(\"true\");\n            envelope.AckRequested.ShouldBeTrue();\n\n            envelope.AckRequested = false;\n            envelope.Headers.Has(Envelope.AckRequestedKey).ShouldBeFalse();\n        }\n\n        [Test]\n        public void execution_time_is_null_by_default()\n        {\n            new Envelope().ExecutionTime.ShouldBeNull();\n        }\n\n        [Test]\n        public void execution_time_set_and_get()\n        {\n            var time = DateTime.Today.AddHours(8).ToUniversalTime();\n\n            var envelope = new Envelope();\n            envelope.ExecutionTime = time;\n\n            envelope.ExecutionTime.ShouldBe(time);\n        }\n\n        [Test]\n        public void nulling_out_the_execution_time()\n        {\n            var time = DateTime.Today.AddHours(8).ToUniversalTime();\n\n            var envelope = new Envelope();\n            envelope.ExecutionTime = time;\n\n            envelope.ExecutionTime = null;\n\n            envelope.ExecutionTime.ShouldBeNull();\n        }\n\n        [Test]\n        public void use_serializer()\n        {\n            var envelope = new Envelope\n            {\n                Data = new byte[] {1, 2, 3, 4}\n            };\n\n            var serializer = MockRepository.GenerateMock<IEnvelopeSerializer>();\n            var theExpectedMessage = new object();\n            serializer.Stub(x => x.Deserialize(envelope)).Return(theExpectedMessage);\n\n            envelope.UseSerializer(serializer);\n\n            envelope.Message.ShouldBeTheSameAs(theExpectedMessage);\n        }\n\n        [Test]\n        public void to_token()\n        {\n            var envelope = new Envelope\n            {\n                Data = new byte[] {1, 3, 4, 4},\n                Message = new Message1()\n            };\n\n            var token = envelope.ToToken();\n\n            // Hey, this HAS to work, so we're UT'ing it.\n            token.Headers.ShouldBeTheSameAs(envelope.Headers);\n            token.Message.ShouldBe(envelope.Message);\n            token.Data.ShouldBe(envelope.Data);\n        }\n\n        [Test]\n        public void attempts()\n        {\n            var envelope = new Envelope();\n            envelope.Attempts.ShouldBe(0);\n\n            envelope.Attempts++;\n\n            envelope.Attempts.ShouldBe(1);\n        }\n\n        [Test]\n        public void cloning_an_envelope()\n        {\n            var envelope = new Envelope();\n            envelope.Message = new Message1();\n            envelope.Headers[\"a\"] = \"1\";\n            envelope.Headers[\"b\"] = \"2\";\n\n            var clone = envelope.Clone();\n\n            clone.ShouldNotBeTheSameAs(envelope);\n            clone.Message.ShouldBeTheSameAs(envelope.Message);\n            clone.Headers.ShouldNotBeTheSameAs(envelope.Headers);\n\n            clone.Headers[\"a\"].ShouldBe(\"1\");\n            clone.Headers[\"b\"].ShouldBe(\"2\");\n        }\n    }\n\n    \n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Headers/Headers_testing.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.Specialized;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Headers\n{\n    [TestFixture]\n    public class Headers_testing\n    {\n        [Test]\n        public void get_and_set_with_name_value_collection()\n        {\n            var values = new NameValueCollection();\n            values[\"a\"] = \"1\";\n            values[\"b\"] = \"2\";\n\n            var headers = new NameValueHeaders(values);\n            headers[\"a\"].ShouldBe(\"1\");\n            headers[\"b\"].ShouldBe(\"2\");\n\n            headers[\"c\"] = \"3\";\n\n            values[\"c\"].ShouldBe(\"3\");\n        }\n\n        [Test]\n        public void name_value_has()\n        {\n            var values = new NameValueCollection();\n            values[\"a\"] = \"1\";\n            values[\"b\"] = \"2\";\n\n            var headers = new NameValueHeaders(values);\n\n            headers.Has(\"a\").ShouldBeTrue();\n            headers.Has(\"c\").ShouldBeFalse();\n        }\n\n        [Test]\n        public void get_keys_from_name_value_collection()\n        {\n            var values = new NameValueCollection();\n            values[\"a\"] = \"1\";\n            values[\"b\"] = \"2\";\n            values[\"c\"] = \"3\";\n\n            var headers = new NameValueHeaders(values);\n        \n            headers.Keys().ShouldHaveTheSameElementsAs(\"a\", \"b\", \"c\");\n        }\n\n        [Test]\n        public void get_and_set_with_dictionary()\n        {\n            var values = new Dictionary<string, string>{{\"a\", \"1\"}, {\"b\", \"2\"}};\n\n            var headers = new DictionaryHeaders(values);\n            headers[\"a\"].ShouldBe(\"1\");\n            headers[\"b\"].ShouldBe(\"2\");\n\n            headers[\"c\"] = \"3\";\n\n            values[\"c\"].ShouldBe(\"3\");\n        }\n\n        [Test]\n        public void dictionary_has()\n        {\n            var values = new Dictionary<string, string> { { \"a\", \"1\" }, { \"b\", \"2\" } };\n\n            var headers = new DictionaryHeaders(values);\n\n            headers.Has(\"a\").ShouldBeTrue();\n            headers.Has(\"c\").ShouldBeFalse();\n        }\n\n        [Test]\n        public void to_name_values_for_dictionary()\n        {\n            var values = new Dictionary<string, string> { { \"a\", \"1\" }, { \"b\", \"2\" } };\n\n            var headers = new DictionaryHeaders(values);\n\n            var collection = headers.ToNameValues();\n            collection[\"a\"].ShouldBe(\"1\");\n            collection[\"b\"].ShouldBe(\"2\");\n        }\n\n        [Test]\n        public void get_keys_from_dictionary()\n        {\n            var values = new Dictionary<string, string> { { \"a\", \"1\" }, { \"b\", \"2\" }, {\"c\", \"3\"} };\n\n            var headers = new DictionaryHeaders(values);\n\n            headers.Keys().ShouldHaveTheSameElementsAs(\"a\", \"b\", \"c\");\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/ChainExecutionEnvelopeHandlerTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    [TestFixture]\n    public class when_the_chain_does_not_exist : InteractionContext<ChainExecutionEnvelopeHandler>\n    {\n        private Envelope theEnvelope;\n        private IChainInvoker theInvoker;\n\n        protected override void beforeEach()\n        {\n            theEnvelope = ObjectMother.Envelope();\n            theInvoker = MockFor<IChainInvoker>();\n\n            theInvoker.Stub(x => x.FindChain(theEnvelope))\n                      .Return(null);\n        }\n\n        [Test]\n        public void should_not_return_any_continuation()\n        {\n            ClassUnderTest.Handle(theEnvelope).GetAwaiter().GetResult().ShouldBeNull();\n        }\n    }\n\n\n    [TestFixture]\n    public class when_there_is_a_chain : InteractionContext<ChainExecutionEnvelopeHandler>\n    {\n        private Envelope theEnvelope;\n        private IChainInvoker theInvoker;\n        private HandlerChain theChain;\n\n        protected override void beforeEach()\n        {\n            theEnvelope = ObjectMother.Envelope();\n            theInvoker = MockFor<IChainInvoker>();\n            theChain = new HandlerChain();\n\n            theInvoker.Stub(x => x.FindChain(theEnvelope))\n                      .Return(theChain);\n        }\n\n        [Test]\n        public void if_the_chain_invocation_succeeds_and_there_is_no_explicit_continuation_use_successful_continuation()\n        {\n            theInvoker.Expect(x => x.ExecuteChain(theEnvelope, theChain))\n                      .Return(MockFor<IInvocationContext>().ToCompletionTask());\n\n            MockFor<IInvocationContext>().Stub(x => x.Continuation).Return(null);\n\n\n            ClassUnderTest.Handle(theEnvelope).GetAwaiter().GetResult()\n                          .ShouldBeOfType<ChainSuccessContinuation>()\n                          .Context.ShouldBeTheSameAs(MockFor<IInvocationContext>());\n\n        }\n\n        [Test]\n        public void if_the_chain_invocation_succeeds_and_there_is_an_explicit_continuation()\n        {\n            theInvoker.Expect(x => x.ExecuteChain(theEnvelope, theChain))\n                      .Return(MockFor<IInvocationContext>().ToCompletionTask());\n\n            var explicitContinuation = MockRepository.GenerateMock<IContinuation>();\n            MockFor<IInvocationContext>().Stub(x => x.Continuation).Return(explicitContinuation);\n\n\n            ClassUnderTest.Handle(theEnvelope).GetAwaiter().GetResult()\n                          .ShouldBeTheSameAs(explicitContinuation);\n        }\n\n        [Test]\n        public void if_the_chain_invocation_blows_up_return_a_chain_failure_continuation()\n        {\n            var exception = new NotImplementedException();\n\n            theInvoker.Expect(x => x.ExecuteChain(theEnvelope, theChain))\n                      .Throw(exception);\n\n            ClassUnderTest.Handle(theEnvelope).GetAwaiter().GetResult()\n                          .ShouldBeOfType<ChainFailureContinuation>()\n                          .Exception.ShouldBeTheSameAs(exception);\n\n        }\n\n        [Test]\n        public void if_the_chain_throws_a_deserialization_continuation()\n        {\n            var exception = new EnvelopeDeserializationException(\"I blew up!\");\n\n            theInvoker.Expect(x => x.ExecuteChain(theEnvelope, theChain))\n                .Throw(exception);\n\n            ClassUnderTest.Handle(theEnvelope).GetAwaiter().GetResult()\n                .ShouldBeOfType<DeserializationFailureContinuation>()\n                .Exception.ShouldBeTheSameAs(exception);\n        }\n    }\n\n\n    [TestFixture]\n    public class when_finding_a_chain_errors : InteractionContext<ChainExecutionEnvelopeHandler>\n    {\n        private Envelope theEnvelope;\n        private IChainInvoker theInvoker;\n        private EnvelopeDeserializationException theException;\n\n        protected override void beforeEach()\n        {\n            theEnvelope = ObjectMother.Envelope();\n            theInvoker = MockFor<IChainInvoker>();\n\n            theException = new EnvelopeDeserializationException(\"I failed!\");\n            theInvoker.Stub(x => x.FindChain(theEnvelope))\n                .Throw(theException);\n        }\n\n        [Test]\n        public void returns_a_deserialization_failure_continuation()\n        {\n            ClassUnderTest.Handle(theEnvelope).GetAwaiter().GetResult()\n                .ShouldBeOfType<DeserializationFailureContinuation>()\n                .Exception.ShouldBeTheSameAs(theException);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/ChainFailureContinuationTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    [TestFixture]\n    public class when_the_ChainFailureContinuation_Executes\n    {\n        private Exception theException;\n        private ChainFailureContinuation theContinuation;\n        private Envelope theEnvelope;\n        private TestEnvelopeContext theContext;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theException = new Exception();\n\n            theContinuation = new ChainFailureContinuation(theException);\n\n            theEnvelope = ObjectMother.Envelope();\n\n            theContext = new TestEnvelopeContext();\n\n            theContinuation.Execute(theEnvelope, theContext);\n        }\n\n        [Test]\n        public void should_mark_the_envelope_as_failed()\n        {\n            // TODO -- should this be going to the error or dead letter queue instead?\n        \n            theEnvelope.Callback.AssertWasCalled(x => x.MarkFailed(theException));\n        }\n\n        [Test]\n        public void should_log_the_message_failed()\n        {\n            theContext.RecordedLogs.InfoMessages.Single().ShouldBe(new MessageFailed\n            {\n                Envelope = theEnvelope.ToToken(),\n                Exception = theException\n            });\n        }\n\n        [Test]\n        public void should_log_the_actual_exception()\n        {\n            var report = theContext.RecordedLogs.ErrorMessages.Single()\n                .ShouldBeOfType<FubuCore.Logging.ExceptionReport>();\n\n            report.ExceptionText.ShouldBe(theException.ToString());\n        }\n\n        [Test]\n        public void should_send_a_failure_ack()\n        {\n            theContext.RecordedOutgoing.FailureAcknowledgementMessage.ShouldBe(\"Chain execution failed\");\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/ChainInvokerTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore.Logging;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    [TestFixture]\n    public class find_the_chain_by_envelope_message_type\n    {\n        [Test]\n        public void can_find_chain_for_input_type()\n        {\n            using (var runtime = FubuRuntime.BasicBus(x =>\n            {\n                x.Handlers.Include<OneHandler>();\n                x.Handlers.Include<TwoHandler>();\n\n                x.Handlers.DisableDefaultHandlerSource();\n            }))\n            {\n                var graph = runtime.Behaviors;\n\n\n                var invoker = new ChainInvoker(null, new ChainResolutionCache(graph), null, null, null);\n\n                invoker.FindChain(new Envelope { Message = new OneMessage() })\n                       .OfType<HandlerCall>().Single()\n                       .HandlerType.ShouldBe(typeof(OneHandler));\n            }\n        }\n\n        \n    }\n\n    [TestFixture]\n    public class when_executing_the_chain_happy_path : MessageInvokerContext\n    {\n        private IDisposableBehavior theBehavior;\n        private FubuMVC.Core.ServiceBus.Runtime.Invocation.InvocationContext _invocationContext;\n\n        protected override void theContextIs()\n        {\n            theBehavior = MockFor<IDisposableBehavior>();\n            theChain = new HandlerChain();\n\n            _invocationContext = new FubuMVC.Core.ServiceBus.Runtime.Invocation.InvocationContext(theEnvelope, new HandlerChain());\n\n            MockFor<IServiceFactory>().Stub(x => x.BuildBehavior(_invocationContext, theChain.UniqueId))\n                .Return(theBehavior);\n\n            Services.Inject(new BehaviorGraph());\n\n            ClassUnderTest.ExecuteChain(theEnvelope, theChain);\n        }\n\n        [Test]\n        public void does_run_the_behavior_found_from_the_factory()\n        {\n            theBehavior.AssertWasCalled(x => x.Invoke());\n        }\n\n        [Test]\n        public void the_behavior_should_be_disposed_to_dispose_The_inner_nested_container()\n        {\n            theBehavior.AssertWasCalled(x => x.Dispose());\n        }\n\n\n    }\n\n    public interface IDisposableBehavior : IActionBehavior, IDisposable{}\n\n    \n    public abstract class MessageInvokerContext : InteractionContext<ChainInvoker>\n    {\n        protected RecordingLogger theLogger;\n        protected IMessageCallback theCallback;\n        private HandlerChain _chain;\n        protected byte[] theData;\n        protected OneMessage theMessage;\n        protected NameValueHeaders theHeaders;\n        protected Envelope theEnvelope;\n\n\n        protected sealed override void beforeEach()\n        {\n            theData = new byte[] {1, 2, 3, 4};\n            theMessage = new OneMessage();\n            theCallback = MockFor<IMessageCallback>();\n            theHeaders = new NameValueHeaders();\n\n            theLogger = new RecordingLogger();\n\n            theEnvelope = new Envelope(theData, theHeaders, theCallback) {Message = theMessage};\n            theEnvelope.Message.ShouldBeTheSameAs(theMessage);\n\n            Services.Inject<ILogger>(theLogger);\n\n            Services.Inject(new BehaviorGraph());\n\n            Services.PartialMockTheClassUnderTest();\n            theContextIs();\n        }\n\n        protected virtual void theContextIs()\n        {\n            \n        }\n\n        protected HandlerChain theChain\n        {\n            set\n            {\n                ClassUnderTest.Stub(x => x.FindChain(theEnvelope))\n                              .Return(value);\n\n                _chain = value;\n            }\n            get { return _chain; }\n        }\n\n        protected void assertInfoMessageWasLogged(object log)\n        {\n            theLogger.InfoMessages.ShouldContain(log);\n        }\n\n        protected void assertInfoMessageWasNotLogged(object log)\n        {\n            theLogger.InfoMessages.ShouldNotContain(log);\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/ChainSuccessContinuationTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    [TestFixture]\n    public class ChainSuccessContinuationTester\n    {\n        private Envelope theEnvelope;\n        private FubuMVC.Core.ServiceBus.Runtime.Invocation.InvocationContext theContext;\n        private RecordingEnvelopeSender theSender;\n        private ChainSuccessContinuation theContinuation;\n        private RecordingLogger theLogger;\n        private TestEnvelopeContext theEnvelopeContext;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theEnvelope = ObjectMother.Envelope();\n            theEnvelope.Message = new object();\n\n            theEnvelopeContext = new TestEnvelopeContext();\n\n            theContext = new FubuMVC.Core.ServiceBus.Runtime.Invocation.InvocationContext(theEnvelope, new HandlerChain());\n\n            theContext.EnqueueCascading(new object());\n            theContext.EnqueueCascading(new object());\n            theContext.EnqueueCascading(new object());\n\n            theSender = new RecordingEnvelopeSender();\n\n            theContinuation = new ChainSuccessContinuation(theContext);\n\n            theLogger = new RecordingLogger();\n\n            theContinuation.Execute(theEnvelope, theEnvelopeContext);\n        }\n\n        [Test]\n        public void should_mark_the_message_as_successful()\n        {\n            theEnvelope.Callback.AssertWasCalled(x => x.MarkSuccessful());\n        }\n\n        [Test]\n        public void should_log_the_chain_success()\n        {\n            theEnvelopeContext.RecordedLogs.InfoMessages.Single()\n                .ShouldBe(new MessageSuccessful { Envelope = theEnvelope.ToToken() });\n        }\n    }\n\n    [TestFixture]\n    public class ChainSuccessContinuation_failure_Tester\n    {\n        private Envelope theEnvelope;\n        private FubuMVC.Core.ServiceBus.Runtime.Invocation.InvocationContext theContext;\n        private ChainSuccessContinuation theContinuation;\n        private TestEnvelopeContext theEnvelopeContext;\n        private Exception theException;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theEnvelope = ObjectMother.Envelope();\n            theEnvelope.Message = new object();\n            theException = new Exception(\"Failure\");\n            theEnvelope.Callback.Stub(x => x.MarkSuccessful()).Throw(theException);\n\n            theEnvelopeContext = new TestEnvelopeContext();\n\n            theContext = new FubuMVC.Core.ServiceBus.Runtime.Invocation.InvocationContext(theEnvelope, new HandlerChain());\n            theContext.EnqueueCascading(new object());\n\n            theContinuation = new ChainSuccessContinuation(theContext);\n            theContinuation.Execute(theEnvelope, theEnvelopeContext);\n        }\n\n        [Test]\n        public void should_not_log_success()\n        {\n            theEnvelopeContext.RecordedLogs.InfoMessages.ShouldNotContain(\n                new MessageSuccessful { Envelope = theEnvelope.ToToken() });\n        }\n\n        [Test]\n        public void should_move_the_envelope_to_the_error_queue()\n        {\n            theEnvelope.Callback.AssertWasCalled(x => x.MoveToErrors(new ErrorReport(theEnvelope, theException)));\n        }\n\n        [Test]\n        public void should_log_the_exception()\n        {\n            var report = theEnvelopeContext.RecordedLogs.ErrorMessages.Single()\n                .As<ExceptionReport>();\n\n            report.ExceptionText.ShouldBe(theException.ToString());\n        }\n\n        [Test]\n        public void should_send_a_failure_ack()\n        {\n            theEnvelopeContext.RecordedOutgoing.FailureAcknowledgementMessage\n                .ShouldBe(\"Sending cascading message failed: Failure\");\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/CompositeContinuationConfigurationTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime.Cascading;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    [TestFixture]\n    public class CompositeContinuationConfigurationTester\n    {\n        [Test]\n        public void should_place_composite_error_handler()\n        {\n            var registry = new FubuRegistry();\n            registry.ServiceBus.Enable(true);\n            registry.Handlers.Include<MyConsumer>();\n            registry.ServiceBus.EnableInMemoryTransport();\n\n            registry.Policies.Global.Add<RespondThenMoveToErrorsPolicy>();\n\n            using (var runtime = registry.ToRuntime())\n            {\n                runtime.Behaviors.Handlers.Each(x =>\n                {\n                    x.ErrorHandlers.Count.ShouldBe(1);\n                });\n            }\n        }\n    }\n\n    public class RespondThenMoveToErrorsPolicy : HandlerChainPolicy\n    {\n        public override void Configure(HandlerChain handlerChain)\n        {\n            handlerChain.MaximumAttempts = 2;\n            handlerChain.OnException<UnauthorizedAccessException>()\n                .RespondWithMessage((ex, envelope) => new RespondToSender(new ErrorResponse { Message = ex.Message }))\n                .Then.MoveToErrorQueue();\n        }\n    }\n\n    public class ErrorResponse\n    {\n        public string Message { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/CompositeContinuationTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Cascading;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    [TestFixture]\n    public class CompositeContinuationTester : InteractionContext<CompositeContinuation>\n    {\n        private IContinuation[] inners;\n        private Envelope envelope;\n        private TestEnvelopeContext theContext;\n\n        protected override void beforeEach()\n        {\n            inners = Services.CreateMockArrayFor<IContinuation>(5);\n\n            envelope = new Envelope();\n            theContext = new TestEnvelopeContext();\n\n            ClassUnderTest.Execute(envelope, theContext);\n        }\n\n        [Test]\n        public void should_have_delegated_to_all_inners()\n        {\n            inners.Each(inner => {\n                inner.AssertWasCalled(x => x.Execute(envelope, theContext));\n            });\n        }\n    }\n\n\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/DelayedEnvelopeHandlerTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore.Dates;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Delayed;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    [TestFixture]\n    public class DelayedEnvelopeHandlerTester\n    {\n        [Test]\n        public void matches_positive()\n        {\n            var systemTime = SystemTime.Default();\n            var envelope = new Envelope();\n            envelope.ExecutionTime = systemTime.UtcNow().AddHours(1);\n\n            var handler = new DelayedEnvelopeHandler(systemTime);\n\n            envelope.IsDelayed(systemTime.UtcNow()).ShouldBeTrue();\n            handler.Matches(envelope).ShouldBeTrue();\n        }\n\n        [Test]\n        public void matches_negative_with_no_execution_time_header()\n        {\n            var systemTime = SystemTime.Default();\n            var envelope = new Envelope();\n\n            var handler = new DelayedEnvelopeHandler(systemTime);\n\n            envelope.IsDelayed(systemTime.UtcNow()).ShouldBeFalse();\n            handler.Matches(envelope).ShouldBeFalse();\n        }\n\n        [Test]\n        public void matches_negative_when_the_execution_time_is_in_the_past()\n        {\n            var systemTime = SystemTime.Default();\n            var envelope = new Envelope();\n            envelope.ExecutionTime = systemTime.UtcNow().AddHours(-1);\n\n            var handler = new DelayedEnvelopeHandler(systemTime);\n\n            envelope.IsDelayed(systemTime.UtcNow()).ShouldBeFalse();\n            handler.Matches(envelope).ShouldBeFalse();\n        }\n\n        [Test]\n        public void execute_happy_path()\n        {\n            var context = new TestEnvelopeContext();\n            var envelope = ObjectMother.Envelope();\n            envelope.ExecutionTime = DateTime.Today;\n\n            new DelayedEnvelopeHandler(null).Execute(envelope, context);\n\n            envelope.Callback.AssertWasCalled(x => x.MoveToDelayedUntil(envelope.ExecutionTime.Value));\n\n            context.RecordedLogs.InfoMessages.Single().ShouldBeOfType<DelayedEnvelopeReceived>()\n                  .Envelope.ShouldBe(envelope.ToToken());\n        }\n\n        [Test]\n        public void execute_sad_path()\n        {\n            var context = new TestEnvelopeContext();\n            var envelope = ObjectMother.Envelope();\n            envelope.ExecutionTime = DateTime.Today;\n\n            var exception = new NotImplementedException();\n            envelope.Callback.Stub(x => x.MoveToDelayedUntil(envelope.ExecutionTime.Value)).Throw(exception);\n\n            new DelayedEnvelopeHandler(SystemTime.Default()).Execute(envelope, context);\n\n            envelope.Callback.AssertWasCalled(x => x.MarkFailed(exception));\n\n\n            var report = context.RecordedLogs.ErrorMessages.Single().ShouldBeOfType<FubuCore.Logging.ExceptionReport>();\n            report.CorrelationId.ShouldBe(envelope.CorrelationId);\n            report.ExceptionText.ShouldBe(exception.ToString());\n\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/DeserializationFailureContinuationTester.cs",
    "content": "﻿using System.Linq;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    [TestFixture]\n    public class DeserializationFailureContinuationTester\n    {\n        private EnvelopeDeserializationException theException;\n        private TestEnvelopeContext theContext;\n        private Envelope theEnvelope;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theException = new EnvelopeDeserializationException(\"foo\");\n            theContext = new TestEnvelopeContext();\n\n            theEnvelope = ObjectMother.EnvelopeWithSerializationError();\n\n\n            new DeserializationFailureContinuation(theException)\n                .Execute(theEnvelope, theContext);\n        }\n\n        [Test]\n        public void should_move_the_envelope_to_the_error_queue()\n        {\n            theEnvelope.Callback.AssertWasCalled(x => x.MoveToErrors(new ErrorReport(theEnvelope, theException)));\n        }\n\n        [Test]\n        public void should_log_the_exception()\n        {\n            var report = theContext.RecordedLogs.ErrorMessages.Single()\n                .As<ExceptionReport>();\n\n            report.ExceptionText.ShouldBe(theException.ToString());\n        }\n\n        [Test]\n        public void should_send_a_failure_ack()\n        {\n            theContext.RecordedOutgoing.FailureAcknowledgementMessage.ShouldBe(\"Deserialization failed\");\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/HandlerPipelineTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    [TestFixture]\n    public class when_invoking_an_envelope : InteractionContext<HandlerPipeline>\n    {\n        private IContinuation theContinuation;\n        private Envelope theEnvelope;\n        private TestEnvelopeContext theContext;\n\n        protected override void beforeEach()\n        {\n            Services.Inject<IEnumerable<IEnvelopeHandler>>(new IEnvelopeHandler[0]);\n\n            theContext = new TestEnvelopeContext();\n            Services.Inject<EnvelopeContext>(theContext);\n\n            theContinuation = MockFor<IContinuation>();\n            theEnvelope = ObjectMother.Envelope();\n            theEnvelope.Attempts = 1;\n\n            theEnvelope.Callback = MockFor<IMessageCallback>();\n\n            Services.PartialMockTheClassUnderTest();\n            ClassUnderTest.Expect(x => x.FindContinuation(theEnvelope, theContext))\n                          .Return(theContinuation.ToCompletionTask());\n\n            ClassUnderTest.Invoke(theEnvelope, theContext).GetAwaiter().GetResult();\n        }\n\n        [Test]\n        public void should_have_incremented_the_attempt_count()\n        {\n            theEnvelope.Attempts.ShouldBe(2);\n        }\n\n        [Test]\n        public void should_invoke_the_continuation()\n        {\n            theContinuation.AssertWasCalled(x => x.Execute(theEnvelope, theContext));\n        }\n    }\n\n    [TestFixture]\n    public class when_invoking_an_envelope_with_serialization_error : InteractionContext<HandlerPipeline>\n    {\n        private Envelope theEnvelope;\n        private TestEnvelopeContext theContext;\n\n        protected override void beforeEach()\n        {\n            Services.Inject<IEnumerable<IEnvelopeHandler>>(new IEnvelopeHandler[0]);\n\n            MockFor<IEnvelopeHandler>().Stub(x => x.Handle(null)).Return(Task.FromResult<IContinuation>(null)).IgnoreArguments();\n\n            theContext = new TestEnvelopeContext();\n            Services.Inject<EnvelopeContext>(theContext);\n\n            theEnvelope = ObjectMother.EnvelopeWithSerializationError();\n            theEnvelope.Attempts = 1;\n\n            theEnvelope.Callback = MockFor<IMessageCallback>();\n        }\n\n        [Test]\n        public void exception_is_handled()\n        {\n            ClassUnderTest.Invoke(theEnvelope, new TestEnvelopeContext()).Wait();\n            // Just testing that no exception bubbles up.\n        }\n    }\n\n    [TestFixture]\n    public class when_receiving_an_envelope : InteractionContext<HandlerPipeline>\n    {\n        private IContinuation theContinuation;\n        private Envelope theEnvelope;\n        private TestEnvelopeContext theContext;\n\n        protected override void beforeEach()\n        {\n            Services.Inject<IEnumerable<IEnvelopeHandler>>(new IEnvelopeHandler[0]);\n\n            theContext = new TestEnvelopeContext();\n            Services.Inject<EnvelopeContext>(theContext);\n\n            theContinuation = MockFor<IContinuation>();\n            theEnvelope = ObjectMother.Envelope();\n            theEnvelope.Attempts = 1;\n\n            theEnvelope.Callback = MockFor<IMessageCallback>();\n\n            Services.PartialMockTheClassUnderTest();\n            ClassUnderTest.Expect(x => x.FindContinuation(theEnvelope, theContext))\n                          .Return(theContinuation.ToCompletionTask());\n\n            MockFor<IEnvelopeLifecycle>().Stub(x => x.StartNew(ClassUnderTest, theEnvelope))\n                .Return(theContext);\n\n            ClassUnderTest.Receive(theEnvelope).GetAwaiter().GetResult();\n        }\n\n        [Test]\n        public void the_serializer_should_be_set_on_the_envelope()\n        {\n            var theExpectedMessage = new object();\n\n            MockFor<IEnvelopeSerializer>().Stub(x => x.Deserialize(theEnvelope))\n                                          .Return(theExpectedMessage);\n\n            theEnvelope.Message.ShouldBeTheSameAs(theExpectedMessage);\n        }\n\n        [Test]\n        public void log_the_envelope_received()\n        {\n            theContext.RecordedLogs.InfoMessages.ShouldContain(new EnvelopeReceived\n            {\n                Envelope = theEnvelope.ToToken()\n            });\n        }\n\n        [Test]\n        public void should_invoke()\n        {\n            ClassUnderTest.AssertWasCalled(x => x.Invoke(theEnvelope, theContext));\n        }\n    }\n\n\n\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/InvocationContext.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    public abstract class InvocationContext\n    {\n        private FubuRegistry theTransportRegistry;\n        private Lazy<IChainInvoker> _invoker;\n\n        protected IMessageCallback theCallback;\n\n        private FubuRuntime theRuntime;\n            \n            \n            \n        [SetUp]\n        public void SetUp()\n        {\n            theTransportRegistry = new FubuRegistry();\n            theTransportRegistry.ServiceBus.Enable(true);\n\n            theTransportRegistry.Handlers.DisableDefaultHandlerSource();\n            theTransportRegistry.ServiceBus.EnableInMemoryTransport();\n\n            TestMessageRecorder.Clear();\n\n            _invoker = new Lazy<IChainInvoker>(() =>\n            {\n                theRuntime = theTransportRegistry.ToRuntime();\n\n                return theRuntime.Get<IChainInvoker>();\n            });\n\n            theCallback = MockRepository.GenerateMock<IMessageCallback>();\n\n            theContextIs();\n\n        }\n\n        [TearDown]\n        public void Teardown()\n        {\n            theRuntime.Dispose();\n        }\n\n        protected virtual void theContextIs()\n        {\n            \n        }\n\n\n        protected void handler<T>()\n        {\n            handlersAre(typeof(T));\n        }\n\n        protected void handler<T, T1, T2, T3>()\n        {\n            handlersAre(typeof(T), typeof(T1), typeof(T2), typeof(T3));\n        }\n\n\n        protected void handlersAre(params Type[] handlers)\n        {\n            theTransportRegistry.Handlers.Include(handlers);\n        }\n\n        protected Envelope sendMessage(params Message[] message)\n        {\n            return message.Select(o => sendOneMessage(o)).FirstOrDefault();\n        }\n\n        protected Envelope sendOneMessage(object message)\n        {\n            var envelope = new Envelope();\n            envelope.Callback = theCallback;\n            envelope.Message = message;\n\n            sendEnvelope(envelope);\n\n            return envelope;\n        }\n\n\n        protected void sendEnvelope(Envelope envelope)\n        {\n            _invoker.Value.Invoke(envelope);\n        }\n\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/InvocationContextTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    [TestFixture]\n    public class InvocationContextTester\n    {\n        [Test]\n        public void registers_a_CurrentChain_service_for_diagnostic_purposes()\n        {\n            var chain = new HandlerChain();\n            var context = new FubuMVC.Core.ServiceBus.Runtime.Invocation.InvocationContext(ObjectMother.EnvelopeWithMessage(), chain);\n\n            context.Get<ICurrentChain>().Current.ShouldBeTheSameAs(chain);\n\n        }\n\n        [Test]\n        public void enqueue()\n        {\n            var messages = new FubuMVC.Core.ServiceBus.Runtime.Invocation.InvocationContext(new Envelope{Message = new Message1()}, new HandlerChain());\n            var m1 = new Message1();\n            var m2 = new Message2();\n\n            messages.EnqueueCascading(m1);\n            messages.EnqueueCascading(m2);\n\n            messages.OutgoingMessages().ShouldHaveTheSameElementsAs(m1, m2);\n        }\n\n        [Test]\n        public void ignores_nulls_just_fine()\n        {\n            var messages = new FubuMVC.Core.ServiceBus.Runtime.Invocation.InvocationContext(new Envelope { Message = new Message1() }, new HandlerChain());\n            messages.EnqueueCascading(null);\n\n            messages.OutgoingMessages().Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void enqueue_an_oject_array()\n        {\n            var messages = new FubuMVC.Core.ServiceBus.Runtime.Invocation.InvocationContext(new Envelope{Message = new Message1()}, new HandlerChain());\n            var m1 = new Message1();\n            var m2 = new Message2();\n\n            messages.EnqueueCascading(new object[]{m1, m2});\n\n            messages.OutgoingMessages().ShouldHaveTheSameElementsAs(m1, m2);\n        }\n    }\n\n    [TestFixture]\n    public class when_building_a_new_handler_arguments_object\n    {\n        private Envelope theEnvelope;\n        private FubuMVC.Core.ServiceBus.Runtime.Invocation.InvocationContext theArgs;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theEnvelope = new Envelope{Message = new Message2()};\n\n            theArgs = new FubuMVC.Core.ServiceBus.Runtime.Invocation.InvocationContext(theEnvelope, new HandlerChain());\n        }\n\n        [Test]\n        public void should_set_an_IFubuRequest_with_the_message_set()\n        {\n            theArgs.Get<IFubuRequest>().Get<Message2>()\n                   .ShouldBeTheSameAs(theEnvelope.Message);\n        }\n\n        [Test]\n        public void registers_itself_as_the_outgoing_messages()\n        {\n            theArgs.Get<IInvocationContext>().ShouldBeTheSameAs(theArgs);\n        }\n\n        [Test]\n        public void registers_The_envelope()\n        {\n            theArgs.Get<Envelope>().ShouldBeTheSameAs(theEnvelope);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/NoSubscriberHandlerTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    [TestFixture]\n    public class when_handling_a_message\n    {\n        private TestEnvelopeContext theContext;\n        private Envelope theEnvelope;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theContext = new TestEnvelopeContext();\n            theEnvelope = ObjectMother.Envelope();\n\n            new NoSubscriberHandler().Execute(theEnvelope, theContext);\n        }\n\n        [Test]\n        public void should_mark_the_dequeue_as_successful()\n        {\n            theEnvelope.Callback.AssertWasCalled(x => x.MarkSuccessful());\n        }\n\n        [Test]\n        public void should_have_sent_a_failure_ack()\n        {\n            theContext.RecordedOutgoing.FailureAcknowledgementMessage\n                .ShouldBe(\"No subscriber\");\n        }\n\n        [Test]\n        public void should_log_a_message_for_there_being_no_handler()\n        {\n            var log = theContext.RecordedLogs.InfoMessages.OfType<NoHandlerForMessage>()\n                .Single();\n\n            log.ShouldNotBeNull();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/ResponseEnvelopeHandlerTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    [TestFixture]\n    public class ResponseEnvelopeHandlerTester\n    {\n        [Test]\n        public void matches_positive()\n        {\n            var envelope = ObjectMother.Envelope();\n            envelope.ResponseId = Guid.NewGuid().ToString();\n\n            new ResponseEnvelopeHandler().Matches(envelope)\n                .ShouldBeTrue();\n        }\n\n        [Test]\n        public void matches_negative()\n        {\n            var envelope = ObjectMother.Envelope();\n            envelope.ResponseId = null;\n\n            new ResponseEnvelopeHandler().Matches(envelope)\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void handle()\n        {\n            // pretty simple.  Effectively just shuts things down.\n            var context = new TestEnvelopeContext();\n\n                        var envelope = ObjectMother.Envelope();\n            envelope.ResponseId = Guid.NewGuid().ToString();\n\n            new ResponseEnvelopeHandler().Execute(envelope, context);\n\n            envelope.Callback.AssertWasCalled(x => x.MarkSuccessful());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/StubServiceFactory.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuCore.Binding;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing Shouldly;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    public class StubServiceFactory : IServiceFactory\n    {\n        private readonly HandlerChain _chain;\n        private readonly IActionBehavior _behavior;\n        private readonly object[] _cascadingMessages;\n        public FubuMVC.Core.ServiceBus.Runtime.Invocation.InvocationContext Arguments;\n\n        public StubServiceFactory(HandlerChain chain, IActionBehavior behavior, params object[] cascadingMessages)\n        {\n            _chain = chain;\n            _behavior = behavior;\n            _cascadingMessages = cascadingMessages;\n        }\n\n        public void Dispose()\n        {\n            throw new NotImplementedException();\n        }\n\n        public IActionBehavior BuildBehavior(TypeArguments arguments, Guid behaviorId)\n        {\n            Arguments = arguments.ShouldBeOfType<FubuMVC.Core.ServiceBus.Runtime.Invocation.InvocationContext>();\n            _cascadingMessages.Each(x => Arguments.EnqueueCascading(x));\n\n            _chain.UniqueId.ShouldBe(behaviorId);\n\n            return _behavior;\n        }\n\n        public T Build<T>(TypeArguments arguments)\n        {\n            throw new NotImplementedException();\n        }\n\n        public T Get<T>()\n        {\n            throw new NotImplementedException();\n        }\n\n        public IEnumerable<T> GetAll<T>()\n        {\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/WhenInvokingWithNoHandlerForMessageType.cs",
    "content": "﻿using System.Threading.Tasks;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.ErrorHandling;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    [TestFixture]\n    public class WhenInvokingWithNoHandlerForMessageType : InteractionContext<HandlerPipeline>\n    {\n\n\n        [Test]\n        public void should_move_message_to_error_queue()\n        {\n            using (var runtime = FubuRuntime.BasicBus(x =>\n            {\n                x.Handlers.DisableDefaultHandlerSource();\n                x.Handlers.Include<OneHandler>();\n                x.Handlers.Include<TwoHandler>();\n                x.Handlers.Include<ThreeHandler>();\n                x.Handlers.Include<FourHandler>();\n\n            }))\n            {\n                Services.Inject(runtime.Behaviors);\n\n                MockFor<IEnvelopeHandler>().Stub(x => x.Handle(null)).IgnoreArguments().Return(Task.FromResult<IContinuation>(null));\n\n                var envelope = ObjectMother.Envelope();\n                envelope.Message = new Message1();\n                ClassUnderTest.Invoke(envelope, new TestEnvelopeContext()).GetAwaiter().GetResult(); // we don't have a handler for this type\n\n                envelope.Callback.AssertWasCalled(x => x.MoveToErrors(\n                    new ErrorReport(envelope, new NoHandlerException(typeof(Message1)))));\n            }\n\n\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/multiple_handlers_for_one_message.cs",
    "content": "﻿using System.Linq;\nusing NUnit.Framework;\nusing Shouldly;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    [TestFixture]\n    public class multiple_handlers_for_one_message : InvocationContext\n    {\n        [Test]\n        public void multiple_handlers_should_fire_for_message()\n        {\n            handler<OneHandler, DifferentOneHandler, AnotherOneHandler, TwoHandler>();\n\n            var theMessage = new OneMessage();\n            sendMessage(theMessage);\n\n            TestMessageRecorder.AllProcessed.Count().ShouldBe(3);\n            TestMessageRecorder.AllProcessed.ElementAt(0).ShouldMatch<OneHandler>(theMessage);\n            TestMessageRecorder.AllProcessed.ElementAt(1).ShouldMatch<DifferentOneHandler>(theMessage);\n            TestMessageRecorder.AllProcessed.ElementAt(2).ShouldMatch<AnotherOneHandler>(theMessage);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/sending_a_message_with_no_consumer.cs",
    "content": "﻿using FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    [TestFixture]\n    public class sending_a_message_with_no_consumer : InteractionContext<MessageExecutor>\n    {\n        [Test]\n        public void tryexecute_chooses_the_right_path()\n        {\n            var fakeMessage = new FakeMessage();\n            var consumerCalled = false;\n            var fakeEnvelope = new Envelope();\n\n            Services.Inject(fakeEnvelope);\n            Services.PartialMockTheClassUnderTest();\n\n            ClassUnderTest.TryExecute(fakeMessage, _ => consumerCalled = true);\n            consumerCalled.ShouldBeTrue();\n            ClassUnderTest.AssertWasNotCalled(x => x.Execute(fakeMessage));\n        }\n\n        [Test]\n        public void should_call_execute_method()\n        {\n            var fakeMessage = new FakeMessage();\n            var consumerCalled = false;\n            var fakeEnvelope = new Envelope();\n\n\n            var chain = HandlerChain.For<FakeHandler>(x => x.FakeMethod(null));\n            MockFor<IChainResolver>().Stub(x => x.FindUniqueByType(typeof (FakeMessage))).Return(chain);\n\n            \n            Services.Inject(fakeEnvelope);\n            Services.PartialMockTheClassUnderTest();\n            ClassUnderTest.Expect(x => x.Execute(fakeMessage));\n\n            ClassUnderTest.TryExecute(fakeMessage, _ => consumerCalled = true);\n            \n            consumerCalled.ShouldBeFalse();\n            ClassUnderTest.AssertWasCalled(x => x.Execute(fakeMessage));\n        }\n\n        public class FakeMessage\n        {\n            \n        }\n\n        public class FakeHandler\n        {\n            public void FakeMethod(FakeMessage fake)\n            {\n                \n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Invocation/simplest_possible_invocation.cs",
    "content": "﻿using System.Linq;\nusing NUnit.Framework;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Invocation\n{\n    [TestFixture]\n    public class simplest_possible_invocation : InvocationContext\n    {\n        [Test]\n        public void single_message_for_single_handler_one()\n        {\n            handler<OneHandler, TwoHandler, ThreeHandler, FourHandler>();\n\n            var theMessage = new OneMessage();\n            sendMessage(theMessage);\n\n            TestMessageRecorder.AllProcessed.Single()\n                               .ShouldMatch<OneHandler>(theMessage);\n        }\n\n        [Test]\n        public void single_message_for_single_handler_two()\n        {\n            handler<OneHandler, TwoHandler, ThreeHandler, FourHandler>();\n\n            var theMessage = new TwoMessage();\n            sendMessage(theMessage);\n\n            TestMessageRecorder.AllProcessed.Single()\n                               .ShouldMatch<TwoHandler>(theMessage);\n\n\n        }\n\n        [Test]\n        public void single_message_for_single_handler_three()\n        {\n            handler<OneHandler, TwoHandler, ThreeHandler, FourHandler>();\n\n            var theMessage = new ThreeMessage();\n            sendMessage(theMessage);\n\n            TestMessageRecorder.AllProcessed.Single()\n                               .ShouldMatch<ThreeHandler>(theMessage);\n        }\n\n        [Test]\n        public void single_message_for_single_handler_four()\n        {\n            handler<OneHandler, TwoHandler, ThreeHandler, FourHandler>();\n\n            var theMessage = new FourMessage();\n            sendMessage(theMessage);\n\n            TestMessageRecorder.AllProcessed.Single()\n                               .ShouldMatch<FourHandler>(theMessage);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/ReceiverTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime\n{\n    [TestFixture]\n    public class ReceiverContentTypeHandling\n    {\n        private ChannelGraph theGraph;\n        private ChannelNode theNode;\n        private RecordingHandlerPipeline theInvoker;\n        private Receiver theReceiver;\n        private IMessageCallback theCallback;\n        private RecordingLogger theLogger;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theGraph = new ChannelGraph();\n            theNode = new ChannelNode();\n            theNode.Channel = new InMemoryChannel(new Uri(\"memory://foo\"));\n\n            theInvoker = new RecordingHandlerPipeline();\n\n            theCallback = MockRepository.GenerateMock<IMessageCallback>();\n            theLogger = new RecordingLogger();\n\n            theReceiver = new Receiver(theInvoker, theGraph, theNode);\n        }\n\n        [Test]\n        public void if_no_content_type_is_specified_on_envelope_or_channel_use_graph_default()\n        {\n            theGraph.DefaultContentType = \"text/json\";\n            theNode.DefaultContentType = null;\n\n            var headers = new NameValueHeaders();\n            theReceiver.Receive(new byte[0], headers, MockRepository.GenerateMock<IMessageCallback>());\n\n            headers[Envelope.ContentTypeKey].ShouldBe(\"text/json\");\n        }\n\n        [Test]\n        public void if_no_content_type_is_specified_use_channel_default_when_it_exists()\n        {\n            theGraph.DefaultContentType = \"text/json\";\n            theNode.DefaultContentType = \"text/xml\";\n\n\n            var headers = new NameValueHeaders();\n            theReceiver.Receive(new byte[0], headers, MockRepository.GenerateMock<IMessageCallback>());\n\n            headers[Envelope.ContentTypeKey].ShouldBe(\"text/xml\");\n        }\n\n        [Test]\n        public void the_envelope_content_type_wins()\n        {\n            theGraph.DefaultContentType = \"text/json\";\n            theNode.DefaultContentType = \"text/xml\";\n\n\n            var headers = new NameValueHeaders();\n            headers[Envelope.ContentTypeKey] = \"text/plain\";\n            theReceiver.Receive(new byte[0], headers, MockRepository.GenerateMock<IMessageCallback>());\n\n            headers[Envelope.ContentTypeKey].ShouldBe(\"text/plain\");\n        }\n\n    }\n\n    public class RecordingHandlerPipeline : IHandlerPipeline, IInvocationContext\n    {\n        public IList<Envelope> Invoked = new List<Envelope>();\n\n        public IList<object> Responses = new List<object>(); \n\n\n        public Task Invoke(Envelope envelope, IEnvelopeContext context)\n        {\n            Invoked.Add(envelope);\n\n            return Task.CompletedTask;\n        }\n\n        public Task Receive(Envelope envelope)\n        {\n            return Invoke(envelope, null);\n        }\n\n        public Task InvokeNow(Envelope envelope)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void InvokeNow<T>(T message)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void ExecuteChain(Envelope envelope, HandlerChain chain)\n        {\n            throw new NotImplementedException();\n        }\n\n        public HandlerChain FindChain(Envelope envelope)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IEnumerator<object> GetEnumerator()\n        {\n            return Responses.GetEnumerator();\n        }\n\n        public void EnqueueCascading(object message)\n        {\n            Responses.Add(message);\n        }\n\n        public IEnumerable<object> OutgoingMessages()\n        {\n            return Responses;\n        }\n\n        // just to satisfy the interface\n        public Envelope Envelope { get; set; }\n        public IContinuation Continuation { get; set; }\n\n        public bool Matches(Envelope envelope)\n        {\n            throw new NotImplementedException();\n        }\n\n        public IContinuation Handle(Envelope envelope)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n\n    [TestFixture]\n    public class when_receiving_a_message : InteractionContext<Receiver>\n    {\n        Envelope envelope = new Envelope();\n        Uri address = new Uri(\"foo://bar\");\n        private IChannel theChannel;\n        private ChannelNode theNode;\n        private IMessageCallback theCallback;\n        private byte[] theData;\n        private NameValueHeaders theHeaders;\n\n        protected override void beforeEach()\n        {\n            theChannel = MockFor<IChannel>();\n            theChannel.Stub(x => x.Address).Return(address);\n\n            theNode = new ChannelNode\n            {\n                DefaultContentType = \"application/json\",\n                Channel = theChannel,\n                Uri = address\n            };\n\n            Services.Inject(theNode);\n\n            MockFor<IChainInvoker>().Stub(x => x.Invoke(null)).IgnoreArguments();\n\n            theCallback = MockRepository.GenerateMock<IMessageCallback>();\n            theData = new byte[] {1, 2, 3};\n            theHeaders = new NameValueHeaders();\n            theHeaders[Envelope.AttemptsKey] = \"2\";\n\n            ClassUnderTest.Receive(theData, theHeaders, theCallback);\n        }\n\n        [Test]\n        public void should_copy_the_channel_address_to_the_envelope()\n        {\n            new HeaderWrapper{Headers = theHeaders}.ReceivedAt.ShouldBe(address);\n        }\n\n        [Test]\n        public void should_call_through_to_the_pipeline()\n        {\n            MockFor<IHandlerPipeline>().AssertWasCalled(x => x.Receive(new Envelope(theData, theHeaders, theCallback)));\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/ReplyListenerTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Events;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime\n{\n    [TestFixture]\n    public class ReplayListener_expiration_logic_Tester\n    {\n        [Test]\n        public void uses_the_expiration_time()\n        {\n            var listener = new ReplyListener<Message1>(null, Guid.NewGuid().ToString(), 10.Minutes());\n\n            listener.IsExpired.ShouldBeFalse();\n\n            listener.ExpiresAt.HasValue.ShouldBeTrue();\n            (listener.ExpiresAt > DateTime.UtcNow.AddMinutes(9)).ShouldBeTrue();\n            (listener.ExpiresAt < DateTime.UtcNow.AddMinutes(11)).ShouldBeTrue();\n        }\n    }\n\n    [TestFixture]\n    public class when_receiving_a_matching_failure_ack\n    {\n        private IEventAggregator theEvents;\n        public readonly string correlationId = Guid.NewGuid().ToString();\n        private ReplyListener<Message1> theListener;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theEvents = MockRepository.GenerateMock<IEventAggregator>();\n\n            theListener = new ReplyListener<Message1>(theEvents, correlationId, 10.Minutes());\n\n            var envelope = new EnvelopeToken\n            {\n                Message = new FailureAcknowledgement\n                {\n                    CorrelationId = correlationId,\n                    Message = \"No soup for you!\"\n                }\n            };\n\n            envelope.Headers[Envelope.ResponseIdKey] = correlationId;\n\n            theListener.Handle(new EnvelopeReceived\n            {\n                Envelope = envelope\n            });\n        }\n\n        [Test]\n        public void the_listener_should_set_a_failure_on_the_task()\n        {\n            theListener.Completion.Exception\n                .Flatten()\n                .InnerExceptions.Single()\n                .ShouldBeOfType<ReplyFailureException>()\n                .Message.ShouldBe(\"No soup for you!\");\n        }\n\n        [Test]\n        public void should_remove_itself_from_the_event_aggregator()\n        {\n            theEvents.AssertWasCalled(x => x.RemoveListener(theListener));\n        }\n\n        [Test]\n        public void should_be_expired()\n        {\n            theListener.IsExpired.ShouldBeTrue();\n        }\n    }\n\n    [TestFixture]\n    public class when_receiving_a_failure_ack_that_does_not_match\n    {\n        private IEventAggregator theEvents;\n        public readonly string correlationId = Guid.NewGuid().ToString();\n        private ReplyListener<Message1> theListener;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theEvents = MockRepository.GenerateMock<IEventAggregator>();\n\n            theListener = new ReplyListener<Message1>(theEvents, correlationId, 10.Minutes());\n\n            var envelope = new EnvelopeToken\n            {\n                Message = new FailureAcknowledgement\n                {\n                    CorrelationId = Guid.NewGuid().ToString(),\n                    Message = \"No soup for you!\"\n                }\n            };\n\n            envelope.Headers[Envelope.ResponseIdKey] = correlationId;\n\n            theListener.Handle(new EnvelopeReceived\n            {\n                Envelope = envelope\n            });\n        }\n\n        [Test]\n        public void the_listener_should_not_be_expired()\n        {\n            theListener.IsExpired.ShouldBeFalse();\n        }\n\n        [Test]\n        public void the_listener_should_not_complete_the_task_in_any_way()\n        {\n            theListener.Completion.IsCompleted.ShouldBeFalse();\n            theListener.Completion.IsFaulted.ShouldBeFalse();\n        }\n\n        [Test]\n        public void should_NOT_remove_itself_from_the_event_aggregator()\n        {\n            theEvents.AssertWasNotCalled(x => x.RemoveListener(theListener));\n        }\n    }\n\n\n    [TestFixture]\n    public class when_receiving_the_matching_reply\n    {\n        private IEventAggregator theEvents;\n        public readonly string correlationId = Guid.NewGuid().ToString();\n        private ReplyListener<Message1> theListener;\n        private Message1 theMessage;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theEvents = MockRepository.GenerateMock<IEventAggregator>();\n\n            theListener = new ReplyListener<Message1>(theEvents, correlationId, 10.Minutes());\n\n            theMessage = new Message1();\n            \n            var envelope = new EnvelopeToken\n            {\n                Message = theMessage\n            };\n\n            envelope.Headers[Envelope.ResponseIdKey] = correlationId;\n\n            theListener.Handle(new EnvelopeReceived\n            {\n                Envelope = envelope\n            });\n        }\n\n        [Test]\n        public void should_set_the_completion_value()\n        {\n            theListener.Completion.Result.ShouldBeTheSameAs(theMessage);\n        }\n\n        [Test]\n        public void should_remove_itself_from_the_event_aggregator()\n        {\n            theEvents.AssertWasCalled(x => x.RemoveListener(theListener));\n        }\n    }\n\n    [TestFixture]\n    public class ReplyListenerMatchesTester\n    {\n        private IEventAggregator theEvents;\n        public readonly string correlationId = Guid.NewGuid().ToString();\n        private ReplyListener<Message1> theListener;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theEvents = MockRepository.GenerateMock<IEventAggregator>();\n            theListener = new ReplyListener<Message1>(theEvents, correlationId, 10.Minutes());\n        }\n\n        [Test]\n        public void matches_if_type_is_right_and_correlation_id_matches()\n        {\n            theListener.Matches(new EnvelopeToken\n            {\n                ResponseId = correlationId,\n                Message = new Message1()\n            }).ShouldBeTrue();\n        }\n\n        [Test]\n        public void does_not_match_if_correlation_id_is_wrong()\n        {\n            theListener.Matches(new EnvelopeToken\n            {\n                ResponseId = Guid.NewGuid().ToString(),\n                Message = new Message1()\n            }).ShouldBeFalse();\n        }\n\n        [Test]\n        public void does_not_match_if_the_message_type_is_wrong()\n        {\n            theListener.Matches(new EnvelopeToken\n            {\n                ResponseId = correlationId,\n                Message = new Message2()\n            }).ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Routing/AssemblyRuleTester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime.Routing;\nusing Shouldly;\nusing NUnit.Framework;\nusing TestMessages;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Routing\n{\n    [TestFixture]\n    public class AssemblyRuleTester\n    {\n        [Test]\n        public void positive_test()\n        {\n            var rule = AssemblyRule.For<NewUser>();\n            rule.Matches(typeof(NewUser)).ShouldBeTrue();\n            rule.Matches(typeof(EditUser)).ShouldBeTrue();\n            rule.Matches(typeof(DeleteUser)).ShouldBeTrue();\n        }\n\n        [Test]\n        public void negative_test()\n        {\n            var rule = AssemblyRule.For<NewUser>();\n            rule.Matches(typeof(Red.Message1)).ShouldBeFalse();\n            rule.Matches(typeof(Red.Message2)).ShouldBeFalse();\n            rule.Matches(GetType()).ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Routing/LambdaRoutingRuleTester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime.Routing;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Routing\n{\n    [TestFixture]\n    public class LambdaRoutingRuleTester\n    {\n        [Test]\n        public void positive_match()\n        {\n            var rule = new LambdaRoutingRule(type => type == typeof (BusSettings));\n            rule.Matches(typeof(BusSettings)).ShouldBeTrue();\n        }\n\n        [Test]\n        public void negative_match()\n        {\n            var rule = new LambdaRoutingRule(type => type == typeof(BusSettings));\n            rule.Matches(GetType()).ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Routing/NamespaceRuleTester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime.Routing;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Routing\n{\n    [TestFixture]\n    public class NamespaceRuleTester\n    {\n        [Test]\n        public void positive_test()\n        {\n            var rule = NamespaceRule.For<Red.Message1>();\n            rule.Matches(typeof(Red.Message1)).ShouldBeTrue();\n            rule.Matches(typeof(Red.Message2)).ShouldBeTrue();\n            rule.Matches(typeof(Red.Message3)).ShouldBeTrue();\n        }\n\n        [Test]\n        public void negative_test()\n        {\n            var rule = NamespaceRule.For<Red.Message1>();\n            rule.Matches(typeof(Green.Message1)).ShouldBeFalse();\n            rule.Matches(typeof(Green.Message2)).ShouldBeFalse();\n            rule.Matches(typeof(Green.Message3)).ShouldBeFalse();\n        }\n    }\n}\n\nnamespace Red\n{\n    public class Message1{}\n    public class Message2{}\n    public class Message3{}\n\n}\n\nnamespace Green\n{\n\n    public class Message1 { }\n    public class Message2 { }\n    public class Message3 { }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Routing/SingleTypeRoutingRuleTester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime.Routing;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Routing\n{\n    [TestFixture]\n    public class SingleTypeRoutingRuleTester\n    {\n        [Test]\n        public void positive_match()\n        {\n            new SingleTypeRoutingRule<BusSettings>().Matches(typeof(BusSettings))\n                                                    .ShouldBeTrue();\n        }\n\n        [Test]\n        public void negative_match()\n        {\n            new SingleTypeRoutingRule<BusSettings>().Matches(GetType())\n                                                    .ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Serializers/BasicJsonMessageSerializerTester.cs",
    "content": "﻿using System;\nusing System.IO;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Serializers\n{\n    [TestFixture]\n    public class BasicJsonMessageSerializerTester\n    {\n        [Test]\n        public void can_round_trip()\n        {\n            var address1 = new Address\n            {\n                City = \"Austin\",\n                State = \"Texas\"\n            };\n\n            var stream = new MemoryStream();\n            var serializer = new BasicJsonMessageSerializer();\n            serializer.Serialize(address1, stream);\n\n            stream.Position = 0;\n\n            var address2 = serializer.Deserialize(stream).ShouldBeOfType<Address>();\n            address1.ShouldBe(address2);\n        }\n    }\n\n    [Serializable]\n    public class Address\n    {\n        public string City { get; set; }\n        public string State { get; set; }\n\n        protected bool Equals(Address other)\n        {\n            return string.Equals(City, other.City) && string.Equals(State, other.State);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((Address) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                return ((City != null ? City.GetHashCode() : 0)*397) ^ (State != null ? State.GetHashCode() : 0);\n            }\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"City: {0}, State: {1}\", City, State);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Serializers/BinarySerializerTester.cs",
    "content": "﻿using System.IO;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Serializers\n{\n    [TestFixture]\n    public class BinarySerializerTester\n    {\n        [Test]\n        public void can_round_trip()\n        {\n            var address1 = new Address\n            {\n                City = \"Austin\",\n                State = \"Texas\"\n            };\n\n            var stream = new MemoryStream();\n            var serializer = new BinarySerializer();\n            serializer.Serialize(address1, stream);\n\n            stream.Position = 0;\n\n            var address2 = serializer.Deserialize(stream).ShouldBeOfType<Address>();\n            address1.ShouldBe(address2);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Serializers/EnvelopeSerializerIntegratedTester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Serializers\n{\n    [TestFixture]\n    public class EnvelopeSerializerIntegratedTester\n    {\n        private IMessageSerializer[] messageSerializers;\n        private EnvelopeSerializer theSerializer;\n        private Address theAddress;\n        private ChannelGraph theGraph;\n\n        [SetUp]\n        public void SetUp()\n        {\n            messageSerializers = new IMessageSerializer[]\n            {new BinarySerializer(), new BasicJsonMessageSerializer(), new XmlMessageSerializer()};\n            theGraph = new ChannelGraph();\n            theSerializer = new EnvelopeSerializer(theGraph, messageSerializers);\n\n            theAddress = new Address {City = \"Jasper\", State = \"Missouri\"};\n        }\n\n        private void assertRoundTrips(int index)\n        {\n            var contentType = messageSerializers[index].ContentType;\n            var envelope = new Envelope()\n            {\n                Message = theAddress,\n                ContentType = contentType\n            };\n\n            theSerializer.Serialize(envelope, new ChannelNode());\n\n            envelope.Message = theSerializer.Deserialize(envelope);\n\n            envelope.Message.ShouldNotBeTheSameAs(theAddress);\n            envelope.Message.ShouldBe(theAddress);\n        }\n\n        [Test]\n        public void can_round_trip_with_each_serializer_type()\n        {\n            assertRoundTrips(0);\n            assertRoundTrips(1);\n            assertRoundTrips(2);\n        }\n\n        [Test]\n        public void happily_chooses_the_default_content_type_for_the_graph_if_none_is_on_the_envelope()\n        {\n            var envelope = new Envelope()\n            {\n                Message = theAddress,\n                ContentType = null\n            };\n\n            theSerializer.Serialize(envelope, new ChannelNode());\n\n            envelope.ContentType.ShouldBe(theGraph.DefaultContentType);\n\n            envelope.Message = theSerializer.Deserialize(envelope);\n\n            envelope.Message.ShouldNotBeTheSameAs(theAddress);\n            envelope.Message.ShouldBe(theAddress);\n\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Serializers/EnvelopeSerializerTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Serializers\n{\n    [TestFixture]\n    public class EnvelopeSerializerTester : InteractionContext<EnvelopeSerializer>\n    {\n        private IMessageSerializer[] serializers;\n        private Envelope theEnvelope;\n        private ChannelGraph theGraph;\n\n        protected override void beforeEach()\n        {\n            theGraph = MockRepository.GenerateMock<ChannelGraph>();\n            Services.Inject(theGraph);\n\n            serializers = Services.CreateMockArrayFor<IMessageSerializer>(5);\n            for (int i = 0; i < serializers.Length; i++)\n            {\n                serializers[i].Stub(x => x.ContentType).Return(\"text/\" + i);\n            }\n\n            theEnvelope = new Envelope()\n            {\n                Data = new byte[0]\n            };\n        }\n\n        [Test]\n        public void chooses_by_mimetype()\n        {\n            theEnvelope.ContentType = serializers[3].ContentType;\n            var o = new object();\n            serializers[3].Stub(x => x.Deserialize(null)).IgnoreArguments().Return(o);\n\n            ClassUnderTest.Deserialize(theEnvelope).ShouldBeTheSameAs(o);\n        }\n\n        [Test]\n        public void throws_on_unknown_content_type()\n        {\n            theEnvelope.ContentType = \"random/nonexistent\";\n            theEnvelope.Message = new object();\n\n            Exception<EnvelopeDeserializationException>.ShouldBeThrownBy(() => {\n                ClassUnderTest.Serialize(theEnvelope, new ChannelNode());\n            }).Message.ShouldContain(\"random/nonexistent\");\n        }\n        \n        [Test]\n        public void throws_on_serialize_with_no_message()\n        {\n            Exception<InvalidOperationException>.ShouldBeThrownBy(() => {\n                ClassUnderTest.Serialize(new Envelope(), new ChannelNode());\n            }).Message.ShouldBe(\"No message on this envelope to serialize\");\n        }\n\n        [Test]\n        public void throws_on_deserialize_with_no_data()\n        {\n            Exception<EnvelopeDeserializationException>.ShouldBeThrownBy(() =>\n            {\n                ClassUnderTest.Deserialize(new Envelope());\n            }).Message.ShouldBe(\"No data on this envelope to deserialize\");\n        }\n\n        [Test]\n        public void throws_on_deserialize_of_bad_message()\n        {\n            Exception<EnvelopeDeserializationException>.ShouldBeThrownBy(() =>\n            {\n                var messageSerializer = new BasicJsonMessageSerializer();\n                var serializer = new EnvelopeSerializer(null, new[] { messageSerializer });\n                var envelope = new Envelope(new byte[10], new NameValueHeaders(), null);\n                envelope.ContentType = messageSerializer.ContentType;\n                serializer.Deserialize(envelope);\n            }).Message.ShouldBe(\"Message serializer has failed\");\n        }\n\n        [Test]\n        public void select_serializer_uses_the_envelope_override_if_it_exists()\n        {\n            var node = new ChannelNode\n            {\n                DefaultContentType = serializers[1].ContentType\n            };\n            theGraph.DefaultContentType = serializers[4].ContentType;\n\n            theEnvelope.ContentType = serializers[3].ContentType;\n\n            ClassUnderTest.SelectSerializer(theEnvelope, node)\n                .ShouldBeTheSameAs(serializers[3]);\n        }\n\n        [Test]\n        public void select_the_graph_default_in_the_absence_of_everything_else()\n        {\n            theGraph.DefaultContentType = serializers[4].ContentType;\n            ClassUnderTest.SelectSerializer(theEnvelope, new ChannelNode())\n                .ShouldBeTheSameAs(serializers[4]);\n\n        }\n\n        [Test]\n        public void use_channel_node_default_content_type_if_it_exists_and_not_set_on_the_envelope()\n        {\n            theGraph.DefaultContentType = serializers[4].ContentType;\n            var node = new ChannelNode\n            {\n                DefaultContentType = serializers[1].ContentType\n            };\n\n            ClassUnderTest.SelectSerializer(theEnvelope, node)\n                .ShouldBeTheSameAs(serializers[1]);\n        }\n\n        [Test]\n        public void use_a_serializer_on_the_channel_node_as_the_default_if_content_type_is_not_explicitly_set()\n        {\n            theGraph.DefaultContentType = serializers[4].ContentType;\n            var node = new ChannelNode\n            {\n                DefaultSerializer = MockRepository.GenerateMock<IMessageSerializer>()\n            };\n\n            ClassUnderTest.SelectSerializer(theEnvelope, node)\n                .ShouldBeTheSameAs(node.DefaultSerializer);\n        }\n\n        [Test]\n        public void ask_for_a_content_type_that_does_not_exist()\n        {\n            theEnvelope.ContentType = \"weird\";\n            Exception<EnvelopeDeserializationException>.ShouldBeThrownBy(() => {\n                ClassUnderTest.SelectSerializer(theEnvelope, new ChannelNode());\n            });\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Serializers/JsonMessageSerializerTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Serializers\n{\n    [TestFixture]\n    public class JsonMessageSerializerTester\n    {\n        private readonly JsonMessageSerializer _serializer;\n\n        public JsonMessageSerializerTester()\n        {\n            _serializer = new JsonMessageSerializer(new TransportSettings());\n        }\n\n        [Test]\n        public void can_round_trip()\n        {\n            var employee1 = new Employee()\n            {\n                Name = \"Austin\"\n            };\n\n            var stream = new MemoryStream();\n            _serializer.Serialize(employee1, stream);\n\n            stream.Position = 0;\n\n            var employee2 = _serializer.Deserialize(stream).ShouldBeOfType<Employee>();\n            employee1.ShouldBe(employee2);\n        }\n\n        [Test]\n        public void can_round_trip_circular_dependencies()\n        {\n            var employee = new Employee\n            {\n                Name = \"Jim\"\n            };\n            var boss = new Employee\n            {\n                Name = \"Boss\",\n                Subordinates = { employee }\n            };\n            employee.Supervisor = boss;\n\n\n            var stream = new MemoryStream();\n            _serializer.Serialize(new List<Employee> { boss, employee }, stream);\n\n            stream.Position = 0;\n\n            var employees = _serializer.Deserialize(stream).ShouldBeOfType<List<Employee>>();\n            var newBoss = employees.First();\n            var newEmployee = employees.Last();\n\n            newBoss.ShouldBe(boss);\n            newEmployee.ShouldBe(employee);\n            //Same object reference\n            newEmployee.Supervisor.ShouldBeTheSameAs(newBoss);\n        }\n    }\n\n    [Serializable]\n    public class Employee\n    {\n        public Employee()\n        {\n            Subordinates = new List<Employee>();\n        }\n\n        public string Name { get; set; }\n        public Employee Supervisor { get; set; }\n        public List<Employee> Subordinates { get; set; }\n\n        protected bool Equals(Employee other)\n        {\n            return string.Equals(Name, other.Name) && Equals(Supervisor, other.Supervisor);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((Employee) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                var hashCode = (Name != null ? Name.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (Supervisor != null ? Supervisor.GetHashCode() : 0);\n                return hashCode;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Serializers/XmlMessageSerializerRhinoMessageTester.cs",
    "content": "﻿using System.IO;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Serializers\n{\n    [TestFixture]\n    public class XmlMessageSerializerRhinoMessageTester\n    {\n        private readonly XmlMessageSerializer _serializer;\n        private readonly MemoryStream _stream;\n\n        private const string XmlInput = @\"<?xml version=\"\"1.0\"\" encoding=\"\"UTF-8\"\"?>\n            <esb:messages xmlns:esb=\"\"http://servicebus.hibernatingrhinos.com/2008/12/20/esb\"\"\n                xmlns:commands.testrhinotoftserialization=\"\"FubuMVC.Tests.ServiceBus.Runtime.Serializers.TestRhinoToFtSerialization, FubuMVC.Tests\"\"\n                xmlns:System.Int32=\"\"System.Int32\"\">\n              <commands.testrhinotoftserialization:TestRhinoToFtSerialization>\n                <System.Int32:Id>1</System.Int32:Id>\n              </commands.testrhinotoftserialization:TestRhinoToFtSerialization>\n            </esb:messages>\";\n\n\n        public XmlMessageSerializerRhinoMessageTester()\n        {\n            _serializer = new XmlMessageSerializer();\n            _stream = new MemoryStream();\n        }\n\n        [Test]\n        public void can_deserialize_rhino_esb_message()\n        {\n            var writer = new StreamWriter(_stream);\n            writer.Write(XmlInput);\n            writer.Flush();\n            _stream.Position = 0;\n\n            var result = (TestRhinoToFtSerialization) _serializer.Deserialize(_stream);\n            result.Id.ShouldBe(1);\n        }\n    }\n\n    public class TestRhinoToFtSerialization\n    {\n        public int Id { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/Serializers/XmlMessageSerializerTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime.Serializers\n{\n    //Copied from RSB for backwards compatibility\n    [TestFixture]\n    public class XmlMessageSerializerTester\n    {\n        private readonly Order sample = new Order\n        {\n            Url = new Uri(\"msmq://www.ayende.com/\"),\n            At = DateTime.Today,\n            Count = 5,\n            OrderId = new Guid(\"1909994f-8173-452c-a651-14725bb09cb6\"),\n            OrderLines = new[]\n            {\n                new OrderLine\n                {\n                    Product = \"milk\",\n                    Fubar = new List<int> {1, 2, 3}\n                },\n                new OrderLine\n                {\n                    Product = \"butter\",\n                    Fubar = new List<int> {4, 5, 6}\n                }\n            },\n            TimeToDelivery = TimeSpan.FromDays(1),\n        };\n\n        private readonly Order sample2 = new Order\n        {\n            Url = new Uri(\"msmq://www.ayende.com/\"),\n            At = DateTime.Today,\n            Count = 5,\n            OrderId = new Guid(\"99B5810B-CC5A-4728-B20E-66D6B0022D64\"),\n            OrderLines = new[]\n            {\n                new OrderLine\n                {\n                    Product = \"milk\",\n                    Fubar = new List<int> {1, 2, 3}\n                },\n                new OrderLine\n                {\n                    Product = \"butter\",\n                    Fubar = new List<int> {4, 5, 6}\n                }\n            },\n            TimeToDelivery = TimeSpan.FromDays(1),\n        };\n\n        [Test]\n        public void can_round_trip_object_array()\n        {\n            var messages = new object[] {sample, sample2, new Address {City = \"SLC\", State = \"Utah\"}};\n\n            var serializer = new XmlMessageSerializer();\n            var stream = new MemoryStream();\n            serializer.Serialize(messages, stream);\n\n            stream.Position = 0;\n\n            var actual = serializer.Deserialize(stream).ShouldBeOfType<object[]>();\n            actual[0].ShouldBeOfType<Order>();\n            actual[1].ShouldBeOfType<Order>();\n            actual[2].ShouldBeOfType<Address>();\n\n        }\n\n        [Test]\n        public void can_round_trip_single_message()\n        {\n            var serializer = new XmlMessageSerializer();\n            var stream = new MemoryStream();\n            serializer.Serialize(sample, stream);\n\n            stream.Position = 0;\n\n            var actual = serializer.Deserialize(stream).ShouldBeOfType<Order>();\n            actual.OrderId.ShouldBe(sample.OrderId);\n        }\n\n        [Test]\n        public void Can_serialize_and_deserialize_primitive()\n        {\n            long ticks = DateTime.Now.Ticks;\n            var serializer = new XmlMessageSerializer();\n            var stream = new MemoryStream();\n            serializer.Serialize(new object[] { ticks }, stream);\n            stream.Position = 0;\n            var actual = (long)serializer.Deserialize(stream).As<long>();\n            ticks.ShouldBe(actual);\n        }\n\n        [Test]\n        public void Can_serialize_and_deserialize_double()\n        {\n            double aDouble = 1.12;\n            var serializer = new XmlMessageSerializer();\n            var stream = new MemoryStream();\n            serializer.Serialize(new object[] { aDouble }, stream);\n            stream.Position = 0;\n            var actual = (double)serializer.Deserialize(stream).As<double>();\n            aDouble.ShouldBe(actual);\n        }\n\n        [Test]\n        public void Can_serialize_and_deserialize_float()\n        {\n            float aFloat = 1.12f;\n            var serializer = new XmlMessageSerializer();\n            var stream = new MemoryStream();\n            serializer.Serialize(new object[] { aFloat }, stream);\n            stream.Position = 0;\n            var actual = (float)serializer.Deserialize(stream).As<float>();\n            aFloat.ShouldBe(actual);\n        }\n\n        [Test]\n        public void Can_serialize_and_deserialize_byte_array()\n        {\n            var serializer = new XmlMessageSerializer();\n            var stream = new MemoryStream();\n            serializer.Serialize(new object[] { new byte[] { 1, 2, 3, 4 } }, stream);\n            stream.Position = 0;\n            var actual = (byte[])serializer.Deserialize(stream).As<byte[]>();\n            new byte[] { 1, 2, 3, 4 }.ShouldBe(actual);\n        }\n\n        [Test]\n        public void Can_serialize_and_deserialize_DateTimeOffset()\n        {\n            var value = DateTimeOffset.Now;\n            var serializer = new XmlMessageSerializer();\n            var stream = new MemoryStream();\n            serializer.Serialize(new object[] { value }, stream);\n            stream.Position = 0;\n            var actual = (DateTimeOffset)serializer.Deserialize(stream).As<DateTimeOffset>();\n            value.ShouldBe(actual);\n        }\n\n        [Test]\n        public void Can_serialize_and_deserialize_array()\n        {\n            var serializer = new XmlMessageSerializer();\n            var stream = new MemoryStream();\n            serializer.Serialize(new object[]\n            {\n                new ClassWithObjectArray\n                {\n                    Items = new object[] {new OrderLine {Product = \"ayende\"}}\n                }\n            }, stream);\n            stream.Position = 0;\n            var actual = serializer.Deserialize(stream).As<ClassWithObjectArray>();\n            \"ayende\".ShouldBe(actual.Items[0].As<OrderLine>().Product);\n        }\n\n        [Test]\n        public void can_serialize_and_deserialize_dictionary()\n        {\n            var serializer = new XmlMessageSerializer();\n            var stream = new MemoryStream();\n            serializer.Serialize(new object[]\n            {\n                new ClassWithDictionary\n                {\n                    DictionaryItems = new Dictionary<string, object[]>\n                    {\n                        {\"products\", new object[] {new OrderLine {Product = \"ayende\"}}}\n                    }\n                }\n            }, stream);\n            stream.Position = 0;\n            var actual = serializer.Deserialize(stream).As<ClassWithDictionary>();\n            \"ayende\".ShouldBe(actual.DictionaryItems[\"products\"][0].As<OrderLine>().Product);\n        }\n\n        [Test]\n        public void can_serialize_and_deserialize_when_dictionary_property_null()\n        {\n            var serializer = new XmlMessageSerializer();\n            var stream = new MemoryStream();\n            serializer.Serialize(new object[]\n            {\n                new ClassWithDictionary\n                {\n                    DictionaryItems = null\n                }\n            }, stream);\n\n            stream.Position = 0;\n            var actual = serializer.Deserialize(stream).As<ClassWithDictionary>();\n            actual.DictionaryItems.ShouldBeNull();\n        }\n\n        [Test]\n        public void Can_deserialize_complex_object_graph()\n        {\n            var serializer = new XmlMessageSerializer();\n            var stream = new MemoryStream();\n            serializer.Serialize(new[] { sample }, stream);\n            stream.Position = 0;\n\n            var order = serializer.Deserialize(stream).As<Order>();\n\n            sample.Url.ShouldBe(order.Url);\n            sample.At.ShouldBe(order.At);\n            sample.Count.ShouldBe(order.Count);\n            sample.OrderId.ShouldBe(order.OrderId);\n            sample.TimeToDelivery.ShouldBe(order.TimeToDelivery);\n            order.OrderLines.ShouldHaveCount(2);\n\n            sample.OrderLines[0].Product.ShouldBe(order.OrderLines[0].Product);\n            sample.OrderLines[1].Product.ShouldBe(order.OrderLines[1].Product);\n        }\n\n        public class ClassWithDictionary\n        {\n            public Dictionary<string, object[]> DictionaryItems { get; set; }\n        }\n\n        #region Nested type: ClassWithObjectArray\n\n        public class ClassWithObjectArray\n        {\n            public object[] Items { get; set; }\n        }\n\n        #endregion\n\n        #region Nested type: Order\n\n        public class Order\n        {\n            public Uri Url { get; set; }\n            public int Count { get; set; }\n            public Guid OrderId { get; set; }\n            public DateTime At { get; set; }\n            public TimeSpan TimeToDelivery { get; set; }\n\n            public OrderLine[] OrderLines { get; set; }\n        }\n\n        #endregion\n\n        #region Nested type: OrderLine\n\n        public class OrderLine\n        {\n            public string Product { get; set; }\n            public List<int> Fubar { get; set; }\n        }\n\n        #endregion \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/generic_handlers_are_called_for_messages_that_match.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Tests.ServiceBus.Runtime.Invocation;\nusing NUnit.Framework;\nusing Shouldly;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime\n{\n    [TestFixture]\n    public class generic_handlers_are_called_for_messages_that_match : InvocationContext\n    {\n        [Test]\n        public void generic_handler_is_applied_at_end()\n        {\n            handler<OneHandler, TwoHandler, ThreeHandler, GenericHandler>();\n\n            var message1 = new OneMessage();\n            var message2 = new TwoMessage();\n            var message3 = new ThreeMessage();\n\n            sendMessage(message1);\n            sendMessage(message2);\n            sendMessage(message3);\n\n            TestMessageRecorder.AllProcessed.Count().ShouldBe(6);\n            TestMessageRecorder.AllProcessed[0].ShouldMatch<OneHandler>(message1);\n            TestMessageRecorder.AllProcessed[1].ShouldMatch<GenericHandler>(message1);\n            TestMessageRecorder.AllProcessed[2].ShouldMatch<TwoHandler>(message2);\n            TestMessageRecorder.AllProcessed[3].ShouldMatch<GenericHandler>(message2);\n            TestMessageRecorder.AllProcessed[4].ShouldMatch<ThreeHandler>(message3);\n            TestMessageRecorder.AllProcessed[5].ShouldMatch<GenericHandler>(message3);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/when_requesting_a_response.cs",
    "content": "﻿using System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Events;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime\n{\n    [TestFixture]\n    public class when_requesting_a_response : InteractionContext<Core.ServiceBus.ServiceBus>\n    {\n        private RecordingEnvelopeSender theSender;\n        private Message1 theRequest;\n        private Task<Message2> theTask;\n        private Envelope theEnvelope;\n\n        protected override void beforeEach()\n        {\n            theSender = new RecordingEnvelopeSender();\n            Services.Inject<IEnvelopeSender>(theSender);\n\n            theRequest = new Message1();\n            theTask = ClassUnderTest.Request<Message2>(theRequest);\n\n            theEnvelope = theSender.Sent.Single();\n        }\n\n        [Test]\n        public void the_envelope_is_sent_with_reply_requested_header()\n        {\n            theEnvelope.ReplyRequested.ShouldBe(typeof(Message2).Name);\n        }\n\n        [Test]\n        public void should_register_a_reply_listener()\n        {\n            var events = MockFor<IEventAggregator>();\n            var expectedListener = new ReplyListener<Message2>(events,\n                                                               theEnvelope.CorrelationId, 10.Minutes());\n\n\n            events.AssertWasCalled(x => x.AddListener(expectedListener));\n        }\n\n        [Test]\n        public void sends_the_envelope_to_the_sender()\n        {\n            theEnvelope.ShouldNotBeNull();\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Runtime/when_sending_with_the_expectation_of_a_response.cs",
    "content": "﻿using System;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.Tests.ServiceBus.Runtime\n{\n    [TestFixture]\n    public class when_sending_with_the_expectation_of_a_response : InteractionContext<EnvelopeSender>\n    {\n        private StubChannelNode destinationNode;\n        private Message theMessage;\n        private Envelope theEnvelope;\n        private RecordingLogger theLogger;\n        private Uri replyUri;\n\n        protected override void beforeEach()\n        {\n            destinationNode = new StubChannelNode(\"fake\");\n\n            replyUri = \"fake://foo\".ToUri();\n\n            theMessage = new Message();\n            theEnvelope = new Envelope { Message = theMessage, ReplyRequested = theMessage.GetType().Name};\n\n            theLogger = new RecordingLogger();\n            Services.Inject<ILogger>(theLogger);\n\n            MockFor<ISubscriptionCache>().Stub(x => x.FindDestinationChannels(theEnvelope))\n                                     .Return(new ChannelNode[] { destinationNode });\n\n            MockFor<ISubscriptionCache>().Stub(x => x.ReplyUriFor(destinationNode)).Return(replyUri);\n\n            ClassUnderTest.Send(theEnvelope);\n        }\n\n        [Test]\n        public void should_have_associated_the_reply_channel_with_the_envelope()\n        {\n            theEnvelope.ReplyUri.ShouldBe(replyUri);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Sagas/SagaBehaviorTester.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.ServiceBus.Sagas;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.ServiceBus.Sagas\n{\n    [TestFixture]\n    public class when_the_state_can_be_found_and_not_completed : SagaBehaviorContext\n    {\n        protected override void theContextIs()\n        {\n            theInitialStateCanBeFound();\n            theHandlerHasStateAfterTheMessageIsProcessed();\n            isSagaCompletedByThisMessage = false;\n        }\n\n        [Test]\n        public void should_set_the_state_on_the_handler()\n        {\n            theHandler.AssertWasCalled(x => x.State = theInitialState);\n        }\n\n        [Test]\n        public void should_call_the_inner_behavior()\n        {\n            theInnerBehavior.AssertWasCalled(x => x.Invoke());\n        }\n\n        [Test]\n        public void should_persist_the_state()\n        {\n            theRepository.AssertWasCalled(x => x.Save(theResultingState, theMessage));\n        }\n    }\n\n    [TestFixture]\n    public class when_the_state_can_be_found_and_is_completed_by_the_message : SagaBehaviorContext\n    {\n        protected override void theContextIs()\n        {\n            theInitialStateCanBeFound();\n            theHandlerHasStateAfterTheMessageIsProcessed();\n            isSagaCompletedByThisMessage = true;\n        }\n\n        [Test]\n        public void should_set_the_state_on_the_handler()\n        {\n            theHandler.AssertWasCalled(x => x.State = theInitialState);\n        }\n\n        [Test]\n        public void should_call_the_inner_behavior()\n        {\n            theInnerBehavior.AssertWasCalled(x => x.Invoke());\n        }\n\n        [Test]\n        public void should_delete_the_state()\n        {\n            theRepository.AssertWasCalled(x => x.Delete(theResultingState, theMessage));\n        }\n    }\n\n    [TestFixture]\n    public class when_the_state_cannot_be_found_and_is_not_created_by_the_message : SagaBehaviorContext\n    {\n        protected override void theContextIs()\n        {\n            theInitialStateCannotBeFound();\n            theHandlerHasNoStateAfterTheMessageIsProcessed();\n            \n\n            ClassUnderTest.Invoke().Wait();\n        }\n\n        [Test]\n        public void should_call_the_inner_behavior()\n        {\n            theInnerBehavior.AssertWasCalled(x => x.Invoke());\n        }\n\n\n        [Test]\n        public void updates_and_deletes_nothing()\n        {\n            theRepository.AssertWasNotCalled(x => x.Save(null, theMessage), x => x.IgnoreArguments());\n            theRepository.AssertWasNotCalled(x => x.Delete(null, theMessage), x => x.IgnoreArguments());\n        }\n    }\n\n\n    public abstract class SagaBehaviorContext : InteractionContext<SagaBehavior<SagaState, Message1, ITestingSagaHandler>>\n    {\n        protected Message1 theMessage;\n        protected SagaState theInitialState;\n        protected ITestingSagaHandler theHandler;\n        protected IActionBehavior theInnerBehavior;\n        protected SagaState theResultingState = new SagaState();\n        protected ISagaRepository<SagaState, Message1> theRepository;\n\n        protected override void beforeEach()\n        {\n            theMessage = new Message1();\n\n            var request = new InMemoryFubuRequest();\n            request.Set(theMessage);\n            Services.Inject<IFubuRequest>(request);\n\n            theInitialState = new SagaState();\n\n            theHandler = MockFor<ITestingSagaHandler>();\n\n            theInnerBehavior = MockFor<IActionBehavior>();\n            ClassUnderTest.Inner = theInnerBehavior;\n\n            theInnerBehavior.Stub(x => x.Invoke()).Return(Task.CompletedTask);\n\n            theRepository = MockFor<ISagaRepository<SagaState, Message1>>();\n\n            theContextIs();\n\n            ClassUnderTest.Invoke().Wait();\n        }\n\n        protected abstract void theContextIs();\n\n        protected bool isSagaCompletedByThisMessage\n        {\n            set { theHandler.Stub(x => x.IsCompleted()).Return(value); }\n        }\n\n        protected void theHandlerHasStateAfterTheMessageIsProcessed()\n        {\n            theHandler.Stub(x => x.State).Return(theResultingState);\n        }\n\n        protected void theHandlerHasNoStateAfterTheMessageIsProcessed()\n        {\n            // no - op\n        }\n\n        protected void theInitialStateCanBeFound()\n        {\n            MockFor<ISagaRepository<SagaState, Message1>>()\n                .Stub(x => x.Find(theMessage)).Return(theInitialState);\n        }\n\n        protected void theInitialStateCannotBeFound()\n        {\n            // nothing\n        }\n\n\n    }\n\n\n\n    public class SagaState\n    {\n        public Guid CorrelationId { get; set; }\n    }\n\n    public interface ITestingSagaHandler : IStatefulSaga<SagaState>\n    {\n        \n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Sagas/SagaIntegrationTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Events;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Sagas;\nusing FubuMVC.Core.ServiceBus.Scheduling;\nusing FubuMVC.Core.ServiceBus.TestSupport;\nusing FubuMVC.Core.Services.Messaging.Tracking;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.ServiceBus.Sagas\n{\n    [TestFixture, Explicit(\"About to be converted to ST\")]\n    public class SagaIntegrationTester\n    {\n        private SagaLogger theLogger;\n        private Container theContainer;\n        private FubuRuntime theRuntime;\n\n        [SetUp]\n        public void SetUp()\n        {\n\n            theLogger = new SagaLogger();\n            theContainer = new Container(x =>\n            {\n                x.For<SagaSettings>().Use(InMemoryTransport.ToInMemory<SagaSettings>());\n                x.For<SagaLogger>().Use(theLogger);\n            });\n\n            var registry = new SagaTestRegistry();\n            registry.StructureMap(theContainer);\n            registry.Mode = \"testing\";\n\n            theRuntime = registry.ToRuntime();\n\n        }\n\n        [TearDown]\n        public void TearDown()\n        {\n            theRuntime.Dispose();\n        }\n\n\n        [Test]\n        public void try_to_run_the_saga_from_beginning_to_end()\n        {\n            var serviceBus = theContainer.GetInstance<IServiceBus>();\n            serviceBus.Send(new TestSagaStart { Name = \"Jeremy\" });\n\n            Wait.Until(() => !MessageHistory.Outstanding().Any(), timeoutInMilliseconds: 60000);\n\n            var messages = theLogger.Traces.Select(x => x.Message);\n\n            theLogger.Traces.Select(x => x.Id).Distinct()\n                     .Count().ShouldBe(1); // should be the same correlation id all the way through\n\n            messages\n                .ShouldHaveTheSameElementsAs(\"Started Jeremy\", \"Updated Jeremy\", \"Finished with Updated Jeremy!\");\n        }\n\n        [Test]\n        public void try_to_run_the_saga_from_beginning_to_end_with_implementing_class()\n        {\n            var serviceBus = theContainer.GetInstance<IServiceBus>();\n            serviceBus.Send(new ImplementingClass { Name = \"Jeremy\" });\n\n            Wait.Until(() => !MessageHistory.Outstanding().Any(), timeoutInMilliseconds: 60000);\n\n            var messages = theLogger.Traces.Select(x => x.Message);\n\n            theLogger.Traces.Select(x => x.Id).Distinct()\n                     .Count().ShouldBe(1); // should be the same correlation id all the way through\n\n            messages\n                .ShouldHaveTheSameElementsAs(\"Started Jeremy\", \"Updated Jeremy\", \"Finished with Updated Jeremy!\");\n        }\n    }\n\n    [TestFixture]\n    public class Stateful_saga_registration_tester\n    {\n        private SagaLogger theLogger;\n        private Container theContainer;\n        private FubuRuntime theRuntime;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theLogger = new SagaLogger();\n            theContainer = new Container(x =>\n            {\n                x.For<SagaSettings>().Use(InMemoryTransport.ToInMemory<SagaSettings>());\n                x.For<SagaLogger>().Use(theLogger);\n            });\n\n            var registry = new SagaTestRegistry();\n            registry.StructureMap(theContainer);\n            \n\n            theRuntime = registry.ToRuntime();\n\n            MessageHistory.ClearAll();\n        }\n\n        [TearDown]\n        public void Teardown()\n        {\n            theRuntime.Dispose();\n        }\n\n        [Test]\n        public void got_the_handler_chains_for_the_saga()\n        {\n            var graph = theContainer.GetInstance<BehaviorGraph>();\n            graph.ChainFor(typeof(TestSagaStart)).ShouldNotBeNull();\n            graph.ChainFor(typeof(TestSagaUpdate)).ShouldNotBeNull();\n            graph.ChainFor(typeof(TestSagaFinish)).ShouldNotBeNull();\n        }\n\n        [Test]\n        public void there_is_a_saga_node_with_object_def_for_saga_repository()\n        {\n            var graph = theContainer.GetInstance<BehaviorGraph>();\n            graph.ChainFor(typeof(TestSagaStart)).OfType<StatefulSagaNode>().Single().Repository.ShouldNotBeNull();\n            graph.ChainFor(typeof(TestSagaUpdate)).OfType<StatefulSagaNode>().Single().Repository.ShouldNotBeNull();\n            graph.ChainFor(typeof(TestSagaFinish)).OfType<StatefulSagaNode>().Single().Repository.ShouldNotBeNull();\n        }\n\n    }\n\n    public class SagaTestRegistry : FubuTransportRegistry<SagaSettings>\n    {\n        public SagaTestRegistry()\n        {\n            AlterSettings<TransportSettings>(x => x.InMemoryTransport = InMemoryTransportMode.Enabled);\n\n            Channel(x => x.Queue)\n                .AcceptsMessagesInAssemblyContainingType<SagaTestRegistry>()\n                .ReadIncoming(new ThreadScheduler(2));\n        }\n    }\n\n    public class SagaSettings\n    {\n        public Uri Queue { get; set; }\n    }\n\n    public class SagaLogger\n    {\n        public readonly IList<SagaTrace> Traces = new List<SagaTrace>();\n\n        public void Trace(Guid guid, string message)\n        {\n            Traces.Add(new SagaTrace\n            {\n                Id = guid,\n                Message = message\n            });\n        }\n\n        public class SagaTrace\n        {\n            public Guid Id { get; set; }\n            public string Message { get; set; }\n        }\n    }\n\n    public class TestSagaState\n    {\n        public Guid Id { get; set; }\n\n        public string Name { get; set; }\n\n    }\n\n    public class TestSagaHandler : IStatefulSaga<TestSagaState>\n    {\n        private readonly SagaLogger _logger;\n        private bool _isCompleted;\n\n\n        public TestSagaHandler(SagaLogger logger)\n        {\n            _logger = logger;\n        }\n\n        public TestSagaState State { get; set; }\n        public bool IsCompleted()\n        {\n            return _isCompleted;\n        }\n\n        public void Handle(ImplementingClass message)\n        {\n            \n        }\n\n        public TestSagaUpdate Handle(TestSagaStart start)\n        {\n            State = new TestSagaState { Id = Guid.NewGuid(), Name = start.Name };\n            _logger.Trace(State.Id, \"Started \" + start.Name);\n\n            return new TestSagaUpdate { CorrelationId = State.Id };\n        }\n\n        public TestSagaFinish Handle(TestSagaUpdate update)\n        {\n            _logger.Trace(State.Id, \"Updated \" + State.Name);\n\n            State.Name = \"Updated \" + State.Name;\n\n            return new TestSagaFinish { CorrelationId = State.Id };\n        }\n\n        public void Handle(TestSagaFinish finish)\n        {\n            _isCompleted = true;\n            _logger.Trace(State.Id, \"Finished with {0}!\".ToFormat(State.Name));\n        }\n    }\n\n    public class TestSagaStart\n    {\n        public string Name { get; set; }\n    }\n\n    public class ImplementingClass : TestSagaStart\n    {\n        \n    }\n\n    public class TestSagaUpdate\n    {\n        public Guid CorrelationId { get; set; }\n    }\n\n    public class TestSagaFinish\n    {\n        public Guid CorrelationId { get; set; }\n    }\n\n\n\n}\n"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Sagas/SagaTypesTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Sagas;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Sagas\n{\n    [TestFixture]\n    public class SagaTypesTester\n    {\n        [Test]\n        public void saga_types_gives_an_empty_guid_func_if_correlation_id_does_not_exist()\n        {\n            var types = new SagaTypes\n            {\n                MessageType = GetType()\n            };\n\n            var func = types.ToCorrelationIdFunc().ShouldBeOfType<Func<SagaTypesTester, Guid>>();\n            func(this).ShouldBe(Guid.Empty);\n        }\n\n        [Test]\n        public void saga_types_being_able_to_gimme_a_correlation_id_getter_from_the_message_type()\n        {\n            var types = new SagaTypes\n            {\n                MessageType = typeof(SagaMessageOne)\n            };\n\n            var func = types.ToCorrelationIdFunc().ShouldBeOfType<Func<SagaMessageOne, Guid>>();\n\n            var message = new SagaMessageOne\n            {\n                CorrelationId = Guid.NewGuid()\n            };\n\n            func(message).ShouldBe(message.CorrelationId);\n        }\n\n        [Test]\n        public void saga_types_being_able_to_gimme_an_id_getter_for_the_state_object()\n        {\n            var types = new SagaTypes\n            {\n                MessageType = typeof(SagaMessageOne),\n                StateType = typeof(MySagaState)\n            };\n\n            var func = types.ToSagaIdFunc().ShouldBeOfType<Func<MySagaState, Guid>>();\n\n            var state = new MySagaState\n            {\n                Id = Guid.NewGuid()\n            };\n\n            func(state).ShouldBe(state.Id);\n\n        }\n\n        [Test]\n        public void saga_types_matches_idiom()\n        {\n            new SagaTypes\n            {\n                MessageType = typeof(SagaMessageOne),\n                StateType = typeof(MySagaState)\n            }.MatchesStateIdAndMessageCorrelationIdIdiom().ShouldBeTrue();\n        }\n\n        [Test]\n        public void saga_types_does_not_match_idiom_because_of_state_type_not_having_id()\n        {\n            new SagaTypes\n            {\n                MessageType = typeof(SagaMessageOne),\n                StateType = GetType()\n            }.MatchesStateIdAndMessageCorrelationIdIdiom().ShouldBeFalse();\n        }\n\n        [Test]\n        public void saga_types_does_not_match_idiom_because_of_message_type_not_having_correlation_id()\n        {\n            new SagaTypes\n            {\n                MessageType = GetType(),\n                StateType = typeof(MySagaState)\n            }.MatchesStateIdAndMessageCorrelationIdIdiom().ShouldBeFalse();\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Sagas/StatefulSagaConventionTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Registration.Nodes;\nusing FubuMVC.Core.ServiceBus.Sagas;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\nusing StructureMap.Pipeline;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.Tests.ServiceBus.Sagas\n{\n    [TestFixture]\n    public class StatefulSagaConventionTester\n    {\n        [Test]\n        public void is_saga_handler_positive()\n        {\n            StatefulSagaConvention.IsSagaHandler(HandlerCall.For<SimpleSagaHandler>(x => x.Start(null)))\n                .ShouldBeTrue();\n\n            StatefulSagaConvention.IsSagaHandler(HandlerCall.For<SimpleSagaHandler>(x => x.Second(null)))\n                .ShouldBeTrue();\n\n            StatefulSagaConvention.IsSagaHandler(HandlerCall.For<SimpleSagaHandler>(x => x.Last(null)))\n                .ShouldBeTrue();\n        }\n\n        [Test]\n        public void is_saga_handler_negative()\n        {\n            StatefulSagaConvention.IsSagaHandler(HandlerCall.For<SimpleHandler<OneMessage>>(x => x.Handle(null)))\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void is_saga_chain_is_false_for_regular_behavior_chain()\n        {\n            StatefulSagaConvention.IsSagaChain(new BehaviorChain())\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void is_saga_chain_is_false_for_handler_chain_with_no_saga_handlers()\n        {\n            var call = HandlerCall.For<SimpleHandler<OneMessage>>(x => x.Handle(null));\n\n            var chain = new HandlerChain();\n            chain.AddToEnd(call);\n\n            StatefulSagaConvention.IsSagaChain(chain)\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void is_saga_chain_is_true_for_handler_chain_with_a_saga_handler()\n        {\n            var call = HandlerCall.For<SimpleSagaHandler>(x => x.Last(null));\n\n            var chain = new HandlerChain();\n            chain.AddToEnd(call);\n\n            StatefulSagaConvention.IsSagaChain(chain)\n                .ShouldBeTrue();\n        }\n\n        [Test]\n        public void to_saga_types_for_a_handler_call()\n        {\n            var call = HandlerCall.For<SimpleSagaHandler>(x => x.Last(null));\n            var types = StatefulSagaConvention.ToSagaTypes(call);\n\n            types.HandlerType.ShouldBe(typeof (SimpleSagaHandler));\n            types.MessageType.ShouldBe(typeof (SagaMessageThree));\n            types.StateType.ShouldBe(typeof (MySagaState));\n        }\n\n\n        [Test]\n        public void no_registered_storage_and_matches_the_idiom_so_use_in_memory_cache()\n        {\n            var types = new SagaTypes\n            {\n                MessageType = typeof (SagaMessageOne),\n                StateType = typeof (MySagaState)\n            };\n\n            StatefulSagaConvention.DetermineSagaRepositoryInstance(new TransportSettings(), types)\n                                  .ReturnedType.ShouldBe(typeof (InMemorySagaRepository<MySagaState, SagaMessageOne>));\n        }\n\n        [Test]\n        public void use_matching_storage_to_build_the_repository()\n        {\n            var types = new SagaTypes\n            {\n                MessageType = GetType(),\n                StateType = typeof (MySagaState)\n            };\n\n            var storage1 = MockRepository.GenerateMock<ISagaStorage>();\n            var storage2 = MockRepository.GenerateMock<ISagaStorage>();\n            var storage3 = MockRepository.GenerateMock<ISagaStorage>();\n\n            var settings = new TransportSettings();\n            settings.SagaStorageProviders.Add(storage1);\n            settings.SagaStorageProviders.Add(storage2);\n            settings.SagaStorageProviders.Add(storage3);\n\n            var def = new ConfiguredInstance(GetType());\n            storage3.Stub(x => x.RepositoryFor(types))\n                    .Return(def);\n\n            StatefulSagaConvention.DetermineSagaRepositoryInstance(settings, types)\n                                  .ShouldBeTheSameAs(def);\n        }\n\n        [Test]\n        public void use_matching_storage_to_build_the_repository_2()\n        {\n            var types = new SagaTypes\n            {\n                MessageType = GetType(),\n                StateType = typeof(MySagaState)\n            };\n\n            var storage1 = MockRepository.GenerateMock<ISagaStorage>();\n            var storage2 = MockRepository.GenerateMock<ISagaStorage>();\n            var storage3 = MockRepository.GenerateMock<ISagaStorage>();\n\n            var settings = new TransportSettings();\n            settings.SagaStorageProviders.Add(storage1);\n            settings.SagaStorageProviders.Add(storage2);\n            settings.SagaStorageProviders.Add(storage3);\n\n            var def = new ConfiguredInstance(GetType());\n            storage2.Stub(x => x.RepositoryFor(types))\n                    .Return(def);\n\n            StatefulSagaConvention.DetermineSagaRepositoryInstance(settings, types)\n                                  .ShouldBeTheSameAs(def);\n        }\n\n\n        [Test]\n        public void use_matching_storage_to_build_the_repository_3()\n        {\n            var types = new SagaTypes\n            {\n                MessageType = GetType(),\n                StateType = typeof(MySagaState)\n            };\n\n            var storage1 = MockRepository.GenerateMock<ISagaStorage>();\n            var storage2 = MockRepository.GenerateMock<ISagaStorage>();\n            var storage3 = MockRepository.GenerateMock<ISagaStorage>();\n\n            var settings = new TransportSettings();\n            settings.SagaStorageProviders.Add(storage1);\n            settings.SagaStorageProviders.Add(storage2);\n            settings.SagaStorageProviders.Add(storage3);\n\n            var def = new ConfiguredInstance(GetType());\n            storage1.Stub(x => x.RepositoryFor(types))\n                    .Return(def);\n\n            StatefulSagaConvention.DetermineSagaRepositoryInstance(settings, types)\n                                  .ShouldBeTheSameAs(def);\n        }\n\n        [Test]\n        public void unable_to_determine_a_saga_repository_blows_up()\n        {\n            Exception<SagaRepositoryUnresolvableException>.ShouldBeThrownBy(() => {\n                StatefulSagaConvention.DetermineSagaRepositoryInstance(new TransportSettings(), new SagaTypes\n                {\n                    MessageType = GetType(),\n                    StateType = GetType()\n                });\n            });\n        }\n    }\n\n    [TestFixture]\n    public class when_using_a_custom_saga_storage\n    {\n        [Test]\n        public void use_the_special_storage_just_fine()\n        {\n            using (var runtime = FubuRuntime.BasicBus(x => x.ServiceBus.SagaStorage<SpecialSagaStorage>()))\n            {\n                var graph = runtime.Behaviors;\n                var chain = graph.ChainFor(typeof(SagaMessageOne));\n                chain.OfType<StatefulSagaNode>()\n                    .FirstOrDefault()  // there are two saga's using this message, just worry about the first one\n                    .Repository.ReturnedType.ShouldBe(typeof(SpecialSagaRepository<MySagaState, SagaMessageOne>));\n\n                // The saga node should be before the handler calls\n                var sagaNode = chain.OfType<StatefulSagaNode>()\n                    .FirstOrDefault();\n\n                sagaNode.PreviousNodes.Any(x => x is HandlerCall).ShouldBeFalse();\n                sagaNode.Any(x => x is HandlerCall).ShouldBeTrue();\n            }\n\n        }\n\n    }\n\n    public class SpecialSagaStorage : ISagaStorage\n    {\n        public Instance RepositoryFor(SagaTypes sagaTypes)\n        {\n            return new ConfiguredInstance(typeof(SpecialSagaRepository<,>), sagaTypes.StateType, sagaTypes.MessageType);\n        }\n    }\n\n    public class SpecialSagaRepository<TState, TMessage> : ISagaRepository<TState, TMessage>\n    {\n        public void Save(TState state, TMessage message)\n        {\n            throw new NotImplementedException();\n        }\n\n        public TState Find(TMessage message)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void Delete(TState state, TMessage message)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public class MySagaState\n    {\n        public Guid Id { get; set; }\n    }\n\n    public class SagaMessageOne\n    {\n        public Guid CorrelationId { get; set; }\n    }\n\n    public class SagaMessageTwo\n    {\n        public Guid CorrelationId { get; set; }\n    }\n\n    public class SagaMessageThree\n    {\n        public Guid CorrelationId { get; set; }\n    }\n\n    public class SimpleSagaHandler : IStatefulSaga<MySagaState>\n    {\n        public bool IsCompleted()\n        {\n            throw new NotImplementedException();\n        }\n\n        public MySagaState State { get; set; }\n\n        public void Start(SagaMessageOne one)\n        {\n            \n        }\n\n        public void Second(SagaMessageTwo two)\n        {\n            \n        }\n\n        public void Last(SagaMessageThree three)\n        {\n            \n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ScheduledJobs/EveryDayAtSpecificTimeJobSchedulerTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ScheduledJobs\n{\n    [TestFixture]\n    public class when_scheduling_every_day_after_specified_time : InteractionContext<EveryDayAtSpecificTime>\n    {\n        private DateTimeOffset nextScheduledTime;\n\n        protected override void beforeEach()\n        {\n            Container.Inject(new EveryDayAtSpecificTime(hour: 06, minute: 00)); // 6am\n            LocalSystemTime = DateTime.Today.AddHours(7); // 7am\n            nextScheduledTime = ClassUnderTest.ScheduleNextTime(LocalSystemTime, null);\n        }\n\n        [Test]\n        public void next_scheduled_time_should_start_the_next_day()\n        {\n            nextScheduledTime.LocalDateTime.ShouldBe(DateTime.Today.AddDays(1).AddHours(6)); // Tomorrow 6am\n        }\n    }\n\n    [TestFixture]\n    public class when_scheduling_every_day_before_specified_time : InteractionContext<EveryDayAtSpecificTime>\n    {\n        private DateTimeOffset nextScheduledTime;\n\n        protected override void beforeEach()\n        {\n            Container.Inject(new EveryDayAtSpecificTime(hour: 08, minute: 00)); // 8am\n            LocalSystemTime = DateTime.Today.AddHours(7); // 7am\n            nextScheduledTime = ClassUnderTest.ScheduleNextTime(LocalSystemTime, null);\n        }\n\n        [Test]\n        public void next_scheduled_time_should_start_the_same_day()\n        {\n            nextScheduledTime.LocalDateTime.ShouldBe(DateTime.Today.AddHours(8)); // Today 8am\n        }\n    }\n\n    [TestFixture]\n    public class when_scheduling_every_day_at_exactly_specified_time : InteractionContext<EveryDayAtSpecificTime>\n    {\n        private DateTimeOffset nextScheduledTime;\n\n        protected override void beforeEach()\n        {\n            Container.Inject(new EveryDayAtSpecificTime(hour: 07, minute: 33)); // 7:33am\n            LocalSystemTime = DateTime.Today.AddHours(7).AddMinutes(33); // 7:33am\n            nextScheduledTime = ClassUnderTest.ScheduleNextTime(LocalSystemTime, null);\n        }\n\n        [Test]\n        public void next_scheduled_time_should_start_the_next_day()\n        {\n            nextScheduledTime.LocalDateTime.ShouldBe(DateTime.Today.AddDays(1).AddHours(7).AddMinutes(33)); // Tomorrow 7:33am\n        }\n    }\n}\n"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ScheduledJobs/InMemorySchedulePersistenceTester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ScheduledJobs\n{\n    [TestFixture]\n    public class InMemorySchedulePersistenceTester\n    {\n        private JobStatusDTO foo1;\n        private JobStatusDTO foo2;\n        private JobStatusDTO foo3;\n        private JobStatusDTO bar1;\n        private JobStatusDTO bar2;\n        private InMemorySchedulePersistence thePersistence;\n\n        [SetUp]\n        public void SetUp()\n        {\n            foo1 = new JobStatusDTO { JobKey = \"1\", NodeName = \"foo\" };\n            foo2 = new JobStatusDTO { JobKey = \"2\", NodeName = \"foo\" };\n            foo3 = new JobStatusDTO { JobKey = \"3\", NodeName = \"foo\" };\n            bar1 = new JobStatusDTO { JobKey = \"1\", NodeName = \"bar\" };\n            bar2 = new JobStatusDTO { JobKey = \"2\", NodeName = \"bar\" };\n\n            thePersistence = new InMemorySchedulePersistence();\n            thePersistence.Persist(new []{foo1, foo2, foo3, bar1, bar2});\n        }\n\n        [Test]\n        public void store_history()\n        {\n            var record1 = new JobExecutionRecord();\n            var record2 = new JobExecutionRecord();\n            var record3 = new JobExecutionRecord();\n            var record4 = new JobExecutionRecord();\n        \n            thePersistence.RecordHistory(\"foo\", \"1\", record1);\n            thePersistence.RecordHistory(\"foo\", \"1\", record2);\n            thePersistence.RecordHistory(\"foo\", \"2\", record3);\n            thePersistence.RecordHistory(\"foo\", \"2\", record4);\n\n            thePersistence.FindHistory(\"foo\", \"1\").ShouldHaveTheSameElementsAs(record1, record2);\n            thePersistence.FindHistory(\"foo\", \"2\").ShouldHaveTheSameElementsAs(record3, record4);\n        }\n\n        [Test]\n        public void find_all_for_node()\n        {\n            thePersistence.FindAll(\"foo\")\n                .ShouldHaveTheSameElementsAs(foo1, foo2, foo3);\n\n            thePersistence.FindAll(\"bar\")\n                .ShouldHaveTheSameElementsAs(bar1, bar2);\n        }\n\n        [Test]\n        public void find_all_active_for_node()\n        {\n            foo1.Status = foo2.Status = bar1.Status = JobExecutionStatus.Scheduled;\n            foo3.Status = bar2.Status = JobExecutionStatus.Inactive;\n\n            thePersistence.FindAllActive(\"foo\")\n                .ShouldHaveTheSameElementsAs(foo1, foo2);\n\n            thePersistence.FindAllActive(\"bar\")\n                .ShouldHaveTheSameElementsAs(bar1);\n        }\n\n        [Test]\n        public void persist_job_status()\n        {\n            foo1.Status = foo2.Status = foo3.Status = bar1.Status = bar2.Status = JobExecutionStatus.Inactive;\n\n            var change = new JobStatusDTO { JobKey = \"1\", NodeName = \"foo\", Status = JobExecutionStatus.Scheduled };\n\n            thePersistence.Persist(change);\n\n            thePersistence.FindAllActive(\"foo\")\n                .ShouldHaveTheSameElementsAs(change);\n\n            thePersistence.Find(\"foo\", \"1\").ShouldBeTheSameAs(change);\n        }\n\n        [Test]\n        public void find_a_single_status()\n        {\n            thePersistence.Find(\"foo\", \"1\")\n                .ShouldBeTheSameAs(foo1);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ScheduledJobs/JobExecutionRecordTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ScheduledJobs\n{\n    [TestFixture]\n    public class JobExecutionRecordTester\n    {\n        [Test]\n        public void read_normal_exception()\n        {\n            var record = new JobExecutionRecord();\n            var ex = new DivideByZeroException(\"Only Chuck Norris can do that\");\n\n            record.ReadException(ex);\n\n            record.ExceptionText.ShouldBe(ex.ToString());\n        }\n\n        [Test]\n        public void read_aggregate_exception()\n        {\n            var ex1 = new DivideByZeroException(\"Only Chuck Norris can do that\");\n            var ex2 = new RankException(\"You're last!\");\n            var ex3 = new InvalidTimeZoneException(\"You are in the wrong place!\");\n\n            var ex = new AggregateException(ex1, ex2, ex3);\n\n            var record = new JobExecutionRecord();\n            record.ReadException(ex);\n\n            record.ExceptionText.ShouldNotBe(ex.ToString());\n            record.ExceptionText.ShouldContain(ex1.ToString());\n            record.ExceptionText.ShouldContain(ex2.ToString());\n            record.ExceptionText.ShouldContain(ex3.ToString());\n\n            record.ExceptionText.ShouldContain(JobExecutionRecord.ExceptionSeparator);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ScheduledJobs/JobScheduleTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ScheduledJobs\n{\n    [TestFixture]\n    public class JobScheduleTester\n    {\n        [Test]\n        public void remove_obsolete_jobs()\n        {\n            var schedule = new JobSchedule(new[]\n            {\n                new JobStatus(typeof (AJob), DateTime.Today),\n                new JobStatus(typeof (BJob), DateTime.Today),\n            });\n\n            schedule.RemoveObsoleteJobs(new Type[]{typeof(AJob), typeof(CJob)});\n            schedule.Find(typeof (BJob)).Status.ShouldBe(JobExecutionStatus.Inactive);\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ScheduledJobs/JobStatusTester.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ScheduledJobs\n{\n    [TestFixture]\n    public class JobStatusTester\n    {\n        [Test]\n        public void to_status_without_any_attribute()\n        {\n            var status = new JobStatus(typeof (AJob), DateTime.Today)\n            {\n                NextTime = DateTime.Today.AddHours(1),\n                Status = JobExecutionStatus.Scheduled,\n                LastExecution = new JobExecutionRecord\n                {\n                    Duration = 123,\n                    ExceptionText = null,\n                    Finished = DateTime.Today.AddHours(-1),\n                    Success = true,\n                    \n                }\n            };\n\n            var dto = status.ToDTO(\"foo\");\n            dto.NodeName.ShouldBe(\"foo\");\n            dto.JobKey.ShouldBe(\"AJob\");\n            dto.LastExecution.ShouldBe(status.LastExecution);\n            dto.NextTime.ShouldBe(status.NextTime);\n            dto.Status.ShouldBe(JobExecutionStatus.Scheduled);\n        }\n\n        [Test]\n        public void to_status_with_attribute_on_job_type()\n        {\n            var status = new JobStatus(typeof(DecoratedJob), DateTime.Today)\n            {\n                Status = JobExecutionStatus.Executing,\n                NextTime = DateTime.Today.AddHours(1),\n                LastExecution = new JobExecutionRecord\n                {\n                    Duration = 123,\n                    ExceptionText = null,\n                    Finished = DateTime.Today.AddHours(-1),\n                    Success = true\n                }\n            };\n\n            var dto = status.ToDTO(\"foo\");\n            dto.NodeName.ShouldBe(\"foo\");\n            dto.JobKey.ShouldBe(\"Special\");\n            dto.LastExecution.ShouldBe(status.LastExecution);\n            dto.NextTime.ShouldBe(status.NextTime);\n            dto.Status.ShouldBe(JobExecutionStatus.Executing);\n        }\n    }\n\n    [JobKey(\"Special\")]\n    public class DecoratedJob : IJob\n    {\n        public void Execute(CancellationToken cancellation)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ScheduledJobs/JobTimerIntegratedTester.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing FubuCore;\nusing FubuCore.Dates;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ScheduledJobs\n{\n    [TestFixture]\n    public class JobTimerIntegratedTester\n    {\n        [Test]\n        public void TimeExecution_actually_runs()\n        {\n            bool executed = false;\n\n            var execution = new TimedExecution(new RecordingLogger(), GetType(), DateTime.Today, 15, () => {\n                executed = true;\n\n\n            });\n\n            execution.WaitForCompletion(30.Seconds());\n\n            executed.ShouldBeTrue();\n        }\n\n\n        [Test, Explicit(\"It's too slow to be in CI\")]\n        public void smoke_test_of_JobTimer_execution()\n        {\n            var now = DateTimeOffset.UtcNow;\n\n            var ajobTime = now.AddSeconds(50);\n            var bjobTime = now.AddSeconds(25);\n            var cjobTime = now.AddSeconds(10);\n\n            var timer = new JobTimer(SystemTime.Default(), new RecordingLogger());\n            timer.Schedule(typeof(AJob), ajobTime, () => Debug.WriteLine(\"AJob expected at {0} and was at {1}\", ajobTime, DateTime.UtcNow));\n            timer.Schedule(typeof(BJob), bjobTime, () => Debug.WriteLine(\"BJob expected at {0} and was at {1}\", bjobTime, DateTime.UtcNow));\n            timer.Schedule(typeof(CJob), cjobTime, () => Debug.WriteLine(\"CJob expected at {0} and was at {1}\", cjobTime, DateTime.UtcNow));\n\n\n            timer.WaitForJob(typeof (AJob), 100.Seconds());\n            timer.WaitForJob(typeof (BJob), 100.Seconds());\n            timer.WaitForJob(typeof (CJob), 100.Seconds());\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ScheduledJobs/ScheduleRepositoryTester.cs",
    "content": "﻿using NUnit.Framework;\n\nnamespace FubuMVC.Tests.ServiceBus.ScheduledJobs\n{\n    [TestFixture]\n    public class ScheduleRepositoryTester\n    {\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ScheduledJobs/ScheduledJobController_integration_Tester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing FubuCore;\nusing FubuCore.Dates;\nusing FubuCore.Util;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ScheduledJobs\n{\n    [TestFixture, Explicit(\"This test is necessarily *slow*\")]\n    public class ScheduledJobController_integration_Tester\n    {\n        private FubuRuntime runtime;\n        private JobHistory history;\n        private RewindableClock clock;\n        private IScheduledJobController theController;\n        private ISchedulePersistence thePersistence;\n        private IJobTimer theTimer;\n        private DateTimeOffset theStartingTime;\n        private DateTimeOffset theEndingTime;\n\n        [TestFixtureSetUp]\n        public void FixtureSetUp()\n        {\n            //FubuTransport.AllQueuesInMemory = true;\n\n            runtime = FubuRuntime.For<TestingJobRegistry>();\n\n            history = runtime.Get<JobHistory>();\n            clock = runtime.Get<ISystemTime>().As<RewindableClock>();\n            theController = runtime.Get<IScheduledJobController>();\n            thePersistence = runtime.Get<ISchedulePersistence>();\n            theTimer = runtime.Get<IJobTimer>();\n\n            theController.Deactivate();\n            theTimer.ClearAll();\n            history.ClearAll();\n\n            theStartingTime = (DateTimeOffset) DateTime.Today.AddHours(8).ToUniversalTime();\n\n            theEndingTime = theStartingTime.AddSeconds(30);\n\n            addTimes<Job1>(3);\n            addTimes<Job2>(10);\n            addTimes<Job3>(15);\n\n            clock.Reset(theStartingTime.DateTime);\n\n            theController.Activate();\n\n            theController.IsActive().ShouldBeTrue();\n\n            Thread.Sleep(32.Seconds());\n\n            theController.Deactivate();\n        }\n\n        [Test]\n        public void all_the_expected_jobs_ran_successfully()\n        {\n            history.AssertAll();\n        }\n\n        private void addTimes<T>(int seconds) where T : IJob\n        {\n            // START HERE AFTER LUNCH\n            var next = theStartingTime.AddSeconds(seconds);\n            while (next <= theEndingTime)\n            {\n                history.Expect(typeof (T), next);\n                next = next.AddSeconds(seconds);\n            }\n        }\n\n        [TestFixtureTearDown]\n        public void FixtureTearDown()\n        {\n            runtime.Dispose();\n        }\n    }\n\n    public class RewindableClock : ISystemTime\n    {\n        private TimeSpan _offset = 0.Seconds();\n\n        public void Reset(DateTime utc)\n        {\n            _offset = utc.Subtract(DateTime.UtcNow);\n        }\n\n        public DateTime UtcNow()\n        {\n            return DateTime.UtcNow.Add(_offset);\n        }\n\n        public LocalTime LocalTime()\n        {\n            return new LocalTime(UtcNow(), TimeZoneInfo.Local);\n        }\n    }\n\n    public class TestingJobRegistry : FubuTransportRegistry<BusSettings>\n    {\n        public TestingJobRegistry()\n        {\n            ServiceBus.EnableInMemoryTransport();\n\n            Channel(x => x.Upstream).ReadIncoming();\n\n            ScheduledJob.ActivatedOnStartup(false);\n            ScheduledJob.DefaultJobChannel(x => x.Upstream);\n            ScheduledJob.RunJob<Job1>().ScheduledBy(new AtSecondsAfterTheMinute(3));\n            ScheduledJob.RunJob<Job2>().ScheduledBy(new AtSecondsAfterTheMinute(10));\n            ScheduledJob.RunJob<Job3>().ScheduledBy(new AtSecondsAfterTheMinute(15));\n\n            Services.ReplaceService(new JobHistory());\n            Services.ReplaceService<ISystemTime>(new RewindableClock());\n        }\n    }\n\n    public class Job1 : IJob\n    {\n        private readonly JobHistory _history;\n        private readonly ISystemTime _systemTime;\n\n        public Job1(JobHistory history, ISystemTime systemTime)\n        {\n            _history = history;\n            _systemTime = systemTime;\n        }\n\n        public void Execute(CancellationToken cancellation)\n        {\n            _history.CaptureActual(GetType(), _systemTime.UtcNow());\n            Thread.Sleep(250);\n        }\n    }\n\n    public class Job2 : Job1\n    {\n        public Job2(JobHistory history, ISystemTime systemTime) : base(history, systemTime)\n        {\n        }\n    }\n\n    public class Job3 : Job1\n    {\n        public Job3(JobHistory history, ISystemTime systemTime)\n            : base(history, systemTime)\n        {\n        }\n    }\n\n    public class AtSecondsAfterTheMinute : IScheduleRule\n    {\n        private readonly int _seconds;\n\n        public AtSecondsAfterTheMinute(int seconds)\n        {\n            _seconds = seconds;\n        }\n\n        public DateTimeOffset ScheduleNextTime(DateTimeOffset currentTime, JobExecutionRecord lastExecution)\n        {\n            var next = currentTime.Subtract(new TimeSpan(0, 0, 0, currentTime.Second, currentTime.Millisecond));\n\n            while (next < currentTime)\n            {\n                next = next.Add(_seconds.Seconds());\n            }\n\n            return next;\n        }\n    }\n\n\n    public class JobHistory\n    {\n\n\n        private readonly Cache<Type, Expectation> _expectations = new Cache<Type, Expectation>(t => new Expectation(t));\n\n        public void Expect(Type type, DateTimeOffset expected)\n        {\n            _expectations[type].Expect(expected.ToUniversalTime());\n        }\n\n        public void CaptureActual(Type type, DateTimeOffset time)\n        {\n            _expectations[type].CaptureActual(time);\n        }\n\n        public void AssertAll()\n        {\n            var list = new List<string>();\n            _expectations.Each(x => x.Assert(list));\n\n            if (list.Any())\n            {\n                var message = list.Join(System.Environment.NewLine);\n                Assert.Fail(message);\n            }\n        }\n\n        public class Expectation\n        {\n            private readonly Type _type;\n            private readonly IList<DateTimeOffset> _expected = new List<DateTimeOffset>();\n            private readonly IList<DateTimeOffset> _actual = new List<DateTimeOffset>();\n\n            public Expectation(Type type)\n            {\n                _type = type;\n            }\n\n            public Type Type\n            {\n                get { return _type; }\n            }\n\n            public void Expect(DateTimeOffset expected)\n            {\n                _expected.Add(expected);\n            }\n\n            public void CaptureActual(DateTimeOffset actual)\n            {\n                _actual.Add(actual);\n            }\n\n            public void Assert(IList<string> list)\n            {\n                if (_actual.Count > _expected.Count)\n                {\n                    var expectedMessage = _expected.Select(x => x.ToLocalTime().ToString()).Join(\", \");\n                    var actualMessage = _actual.Select(x => x.ToLocalTime().ToString()).Join(\", \");\n                    list.Add(\"More executions of job {0} than expected. Expected {1}, but got {2}\".ToFormat(_type.Name,\n                        expectedMessage, actualMessage));\n                }\n\n                for (var i = 0; i < _expected.Count; i++)\n                {\n                    if (i >= _actual.Count)\n                    {\n                        list.Add(\"Expected execution of job {0} at {1}, but none was recorded\".ToFormat(_type.Name,\n                            _expected[i].ToLocalTime()));\n                    }\n                    else\n                    {\n                        var actual = _actual[i];\n                        var expected = _expected[i];\n\n                        var totalMilliseconds = Math.Abs(actual.Subtract(expected).TotalMilliseconds);\n\n\n                        if (totalMilliseconds > 750)\n                        {\n                            list.Add(\n                                \"Expected execution of job {0} at {1}, but was at {2} / {3} ms different\".ToFormat(\n                                    _type.Name,\n                                    expected.ToLocalTime(), actual.ToLocalTime(), totalMilliseconds));\n                        }\n                    }\n                }\n            }\n        }\n\n        public void ClearAll()\n        {\n            _expectations.ClearAll();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ScheduledJobs/ScheduledJobGraphTester.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ScheduledJobs\n{\n\n    [TestFixture]\n    public class when_scheduling_jobs\n    {\n        private JobSchedule theSchedule;\n        private ScheduledJobGraph theGraph;\n        private StubJobExecutor theExecutor;\n        private readonly DateTimeOffset now = DateTime.Today.AddHours(-1);\n\n        [SetUp]\n        public void SetUp()\n        {\n            theExecutor = new StubJobExecutor();\n\n            theSchedule = new JobSchedule(new[]\n            {\n                JobStatus.For<AJob>(DateTime.Today),\n                JobStatus.For<BJob>(DateTime.Today.AddHours(1)),\n                JobStatus.For<CJob>(DateTime.Today.AddHours(2)),\n            });\n\n            theGraph = new ScheduledJobGraph();\n            theGraph.Jobs.Add(new ScheduledJob<BJob>(new DummyScheduleRule(DateTime.Today.AddHours(1))));\n            theGraph.Jobs.Add(new ScheduledJob<CJob>(new DummyScheduleRule(DateTime.Today.AddHours(3))));\n            theGraph.Jobs.Add(new ScheduledJob<DJob>(new DummyScheduleRule(DateTime.Today.AddHours(4))));\n            theGraph.Jobs.Add(new ScheduledJob<EJob>(new DummyScheduleRule(DateTime.Today.AddHours(5))));\n\n            // not that worried about pushing the time around\n            theGraph.DetermineSchedule(now, theExecutor, theSchedule);\n        }\n\n        [Test]\n        public void changes_the_jobs_that_are_already_scheduled_correcting_where_necessary()\n        {\n            theSchedule.Find(typeof (CJob)).NextTime.ShouldBe((DateTimeOffset) DateTime.Today.AddHours(3));\n            theSchedule.Find(typeof (BJob)).NextTime.ShouldBe((DateTimeOffset) DateTime.Today.AddHours(1));\n        }\n\n        [Test]\n        public void schedules_new_jobs()\n        {\n            theSchedule.Find(typeof (DJob)).NextTime.ShouldBe((DateTimeOffset) DateTime.Today.AddHours(4));\n            theSchedule.Find(typeof (EJob)).NextTime.ShouldBe((DateTimeOffset) DateTime.Today.AddHours(5));\n        }\n\n        [Test]\n        public void removes_obsolete_jobs()\n        {\n            theSchedule.Find(typeof (AJob)).Status.ShouldBe(JobExecutionStatus.Inactive);\n        }\n    }\n\n    public class DummyScheduleRule : IScheduleRule\n    {\n        private readonly DateTimeOffset _nextTime;\n\n        public DummyScheduleRule()\n        {\n            _nextTime = DateTimeOffset.UtcNow.AddDays(1);\n        }\n\n        public DummyScheduleRule(DateTimeOffset nextTime)\n        {\n            _nextTime = nextTime;\n        }\n\n        public DateTimeOffset ScheduleNextTime(DateTimeOffset currentTime, JobExecutionRecord lastExecution)\n        {\n            return _nextTime;\n        }\n    }\n\n    public class DJob : IJob\n    {\n        public void Execute(CancellationToken cancellation)\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n\n    public class EJob : IJob\n    {\n        public void Execute(CancellationToken cancellation)\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ScheduledJobs/ScheduledJobPersistentTaskTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ScheduledJobs\n{\n    [TestFixture]\n    public class ScheduledJobPersistentTaskTester : InteractionContext<ScheduledJobPersistentTask>\n    {\n        [Test]\n        public void protocol()\n        {\n            ClassUnderTest.Protocol.ShouldBe(\"scheduled\");\n        }\n\n        [Test]\n        public void only_permanent_task_is_its_own_uri()\n        {\n            ClassUnderTest.PermanentTasks()\n                .Single()\n                .ShouldBe(ScheduledJobPersistentTask.Uri);\n        }\n\n        [Test]\n        public void creates_itself_as_the_task()\n        {\n            ClassUnderTest.CreateTask(ScheduledJobPersistentTask.Uri)\n                .ShouldBeTheSameAs(ClassUnderTest);\n        }\n\n        [Test]\n        public void assert_available_delegates_through()\n        {\n            ClassUnderTest.AssertAvailable();\n            MockFor<IScheduledJobController>().AssertWasCalled(x => x.PerformHealthChecks());\n        }\n\n        [Test]\n        public void activate_delegates()\n        {\n            ClassUnderTest.Activate();\n            MockFor<IScheduledJobController>().AssertWasCalled(x => x.Activate());\n        }\n\n        [Test]\n        public void deactivate_delegates()\n        {\n            ClassUnderTest.Deactivate();\n            MockFor<IScheduledJobController>().AssertWasCalled(x => x.Deactivate()); \n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ScheduledJobs/ScheduledJobTester.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ScheduledJobs\n{\n    public class AJob : IJob\n    {\n        public void Execute(CancellationToken cancellation)\n        {\n            \n        }\n    }\n\n    public class BJob : IJob\n    {\n        public void Execute(CancellationToken cancellation)\n        {\n\n        }\n    }\n\n    public class CJob : IJob\n    {\n        public void Execute(CancellationToken cancellation)\n        {\n\n        }\n    }\n\n    [TestFixture]\n    public class when_deciding_whether_or_not_to_reschedule_a_job : InteractionContext<ScheduledJob<AJob>>\n    {\n        private StubTimedExecution theExecution;\n        DateTimeOffset expected = DateTime.Today.AddHours(1);\n        DateTimeOffset now = DateTime.Today;\n        private IJobTimer theTimer;\n\n\n        protected override void beforeEach()\n        {\n            theExecution = new StubTimedExecution();\n\n            ClassUnderTest.LastExecution = new JobExecutionRecord();\n\n            MockFor<IScheduleRule>().Stub(x => x.ScheduleNextTime(now, ClassUnderTest.LastExecution)).Return(expected);\n\n            theTimer = MockFor<IJobTimer>();\n        }\n\n        private void timedExecutionIsActive()\n        {\n            theTimer.Stub(x => x.StatusFor(typeof (AJob))).Return(theExecution);\n        }\n\n        private void noTimedExecutionIsActive()\n        {\n            //nothing\n        }\n\n        private void shouldBeRescheduled()\n        {\n            ClassUnderTest.ShouldReschedule(now, MockFor<IJobTimer>())\n                .ShouldBeTrue();\n        }\n\n        private void shouldNotBeRescheduled()\n        {\n            ClassUnderTest.ShouldReschedule(now, MockFor<IJobTimer>())\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void should_reschedule_if_there_is_no_timed_execution()\n        {\n            noTimedExecutionIsActive();\n            shouldBeRescheduled();\n        }\n        \n        [Test]\n        public void does_not_need_to_reschedule_if_the_execution_is_scheduled_correctly()\n        {\n            theExecution.ExpectedTime = expected;\n            theExecution.Status = JobExecutionStatus.Scheduled;\n\n            timedExecutionIsActive();\n\n            shouldNotBeRescheduled();\n\n        }\n\n        [Test]\n        public void does_not_need_to_reschedule_if_the_schedule_time_is_just_flat_out_wrong()\n        {\n            theExecution.ExpectedTime = expected.AddHours(3);\n            theExecution.Status = JobExecutionStatus.Scheduled;\n\n            timedExecutionIsActive();\n\n            // Working under the assumption that the schedule\n            // is manually set\n            shouldNotBeRescheduled();\n        }\n\n        [Test]\n        public void does_not_need_to_reschedule_if_executing_within_the_time_limit()\n        {\n            theExecution.ExpectedTime = expected;\n            theExecution.Status = JobExecutionStatus.Executing;\n\n           timedExecutionIsActive();\n\n            ClassUnderTest.ShouldReschedule(expected.AddMinutes(3), MockFor<IJobTimer>())\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void does_need_to_reschedule_if_executing_past_the_time_limit()\n        {\n            theExecution.ExpectedTime = expected;\n            theExecution.Status = JobExecutionStatus.Executing;\n\n            timedExecutionIsActive();\n\n            ClassUnderTest.ShouldReschedule(expected.Add(ClassUnderTest.MaximumTimeBeforeRescheduling).AddMinutes(1), MockFor<IJobTimer>())\n                .ShouldBeTrue();\n        }\n\n\n    }\n\n    public class StubTimedExecution : ITimedExecution\n    {\n        public JobExecutionStatus Status { get; set; }\n        public Type Type { get; set; }\n        public DateTimeOffset ExpectedTime { get; set; }\n    }\n\n    [TestFixture]\n    public class ScheduledJob_defaults\n    {\n        [Test]\n        public void default_timeout_is_5_minutes()\n        {\n            new ScheduledJob<AJob>(null)\n                .Timeout.ShouldBe(5.Minutes());\n        }\n\n        [Test]\n        public void default_maximum_execution_time_should_be_15_minutes()\n        {\n            new ScheduledJob<AJob>(null)\n                .MaximumTimeBeforeRescheduling.ShouldBe(15.Minutes());\n        }\n    }\n\n    [TestFixture]\n    public class when_initializing_a_job\n    {\n        private JobSchedule theSchedule;\n        private StubbedScheduleRule theRule;\n        private readonly DateTimeOffset now = DateTime.Today;\n        private readonly DateTimeOffset next = DateTime.Today.AddHours(4);\n        private ScheduledJob<AJob> theJob;\n        private StubJobExecutor theExecutor;\n        private JobExecutionRecord theLastRun;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theSchedule = new JobSchedule();\n\n\n            theRule = new StubbedScheduleRule();\n\n            theRule.ScheduledTimes[now] = next;\n\n            theExecutor = new StubJobExecutor();\n\n            theJob = new ScheduledJob<AJob>(theRule);\n\n            theLastRun = new JobExecutionRecord();\n            theSchedule.Find(theJob.JobType)\n                .LastExecution = theLastRun;\n\n            theJob.As<IScheduledJob>().Initialize(now, theExecutor, theSchedule);\n        }\n\n        [Test]\n        public void should_reset_the_new_job_status_time_for_record_keeping()\n        {\n            theSchedule.Find(theJob.JobType)\n                .NextTime.ShouldBe(next);\n        }\n\n        [Test]\n        public void grabs_a_reference_to_the_last_execution_if_if_exists()\n        {\n            theJob.LastExecution.ShouldBeTheSameAs(theLastRun);\n        }\n\n        [Test]\n        public void should_schedule_itself()\n        {\n            theExecutor.Scheduled[theJob.JobType]\n                .ShouldBe(next);\n        }\n    }\n\n    public abstract class ScheduledJobExecutionContext\n    {\n        protected readonly DateTimeOffset now = DateTime.Today;\n        protected readonly DateTimeOffset theNextTimeAccordingToTheSchedulerRule = DateTime.Today.AddHours(4);\n        protected readonly IJobRunTracker TheJobTracker = MockRepository.GenerateMock<IJobRunTracker>();\n        protected Task<RescheduleRequest<RiggedJob>> theTask;\n        protected readonly TimeSpan theConfiguredTimeout = 3.Seconds();\n\n        [TestFixtureSetUp]\n        public void SetUp()\n        {\n            var rule = new StubbedScheduleRule();\n            rule.ScheduledTimes[now] = theNextTimeAccordingToTheSchedulerRule;\n\n            TheJobTracker.Stub(x => x.Now()).Return(now);\n\n            var job = theJobIs();\n\n            var scheduledJob = new ScheduledJob<RiggedJob>(rule);\n            scheduledJob.Timeout = theConfiguredTimeout;\n            theTask = scheduledJob.ToTask(job, TheJobTracker);\n\n            try\n            {\n                theTask.Wait();\n            }\n            catch (Exception)\n            {\n                // okay to swallow because you'll\n                // check it on task itself\n            }\n        }\n\n        protected abstract RiggedJob theJobIs();\n    }\n\n    [TestFixture]\n    public class when_running_a_job_happy_path : ScheduledJobExecutionContext\n    {\n        protected override RiggedJob theJobIs()\n        {\n            return new RiggedJob\n            {\n                Exception = null,\n                TimeToRun = 0.Minutes()\n            };\n        }\n\n        [Test]\n        public void should_mark_the_job_as_executing_correctly_and_reschedules()\n        {\n            TheJobTracker.AssertWasCalled(x => x.Success(theNextTimeAccordingToTheSchedulerRule));\n        }\n\n        [Test]\n        public void should_return_the_reschedule_request_message()\n        {\n            theTask.Result.NextTime.ShouldBe(theNextTimeAccordingToTheSchedulerRule);\n        }\n\n        [Test]\n        public void should_run_the_to_completion()\n        {\n            theTask.IsCompleted.ShouldBeTrue();\n        }\n    }\n\n    [TestFixture]\n    public class when_running_a_job_that_times_out : ScheduledJobExecutionContext\n    {\n        protected override RiggedJob theJobIs()\n        {\n            return new RiggedJob\n            {\n                Exception = null,\n                TimeToRun = theConfiguredTimeout.Add(5.Seconds())\n            };\n        }\n\n        [Test]\n        public void should_fault_with_a_timeout()\n        {\n            theTask.IsFaulted.ShouldBeTrue();\n            theTask.Exception.Flatten().InnerException.ShouldBeOfType<TimeoutException>();\n        }\n\n        [Test]\n        public void should_track_the_job_failure()\n        {\n            var exception = TheJobTracker.GetArgumentsForCallsMadeOn(x => x.Failure(null))\n                [0][0].ShouldBeOfType<AggregateException>();\n\n            exception.Flatten().InnerException.ShouldBeOfType<TimeoutException>();\n        }\n    }\n\n    [TestFixture]\n    public class when_running_a_job_that_fails_before_timing_out : ScheduledJobExecutionContext\n    {\n        protected override RiggedJob theJobIs()\n        {\n            return new RiggedJob\n            {\n                Exception = new DivideByZeroException()\n            };\n        }\n\n        [Test]\n        public void should_fault_with_the_job_exception()\n        {\n            theTask.IsFaulted.ShouldBeTrue();\n            theTask.Exception.Flatten().InnerException.ShouldBeOfType<DivideByZeroException>();\n        }\n\n        [Test]\n        public void should_track_the_job_failure()\n        {\n            var exception = TheJobTracker.GetArgumentsForCallsMadeOn(x => x.Failure(null))\n                [0][0].ShouldBeOfType<AggregateException>();\n\n            exception.Flatten().InnerException.ShouldBeOfType<DivideByZeroException>();\n        }\n    }\n\n\n\n    public class RiggedJob : IJob\n    {\n        public bool WasCancelled;\n        public bool Finished;\n\n        public Exception Exception = null;\n        public TimeSpan TimeToRun = 0.Minutes();\n\n\n        public void Execute(CancellationToken cancellation)\n        {\n            if (Exception != null) throw Exception;\n\n            var ending = DateTime.UtcNow.Add(TimeToRun);\n            while (DateTime.UtcNow <= ending)\n            {\n                Thread.Sleep(100);\n                if (cancellation.IsCancellationRequested)\n                {\n                    WasCancelled = true;\n                    cancellation.ThrowIfCancellationRequested();\n                }\n            }\n\n            Finished = true;\n        }\n    }\n\n    public class StubbedScheduleRule : IScheduleRule\n    {\n        public readonly Cache<DateTimeOffset, DateTimeOffset> ScheduledTimes\n            = new Cache<DateTimeOffset, DateTimeOffset>();\n\n        public DateTimeOffset ScheduleNextTime(DateTimeOffset currentTime, JobExecutionRecord lastExecution)\n        {\n            return ScheduledTimes[currentTime];\n        }\n\n\n        public NextTimeExpression ReschedulesTo(DateTimeOffset nextTime)\n        {\n            return new NextTimeExpression(this, nextTime);\n        }\n\n        public class NextTimeExpression\n        {\n            private readonly StubbedScheduleRule _parent;\n            private readonly DateTimeOffset _next;\n\n            public NextTimeExpression(StubbedScheduleRule parent, DateTimeOffset next)\n            {\n                _parent = parent;\n                _next = next;\n            }\n\n            public StubbedScheduleRule AtTime(DateTimeOffset now)\n            {\n                _parent.ScheduledTimes[now] = _next;\n                return _parent;\n            }\n        }\n    }\n\n\n    public class StubJobExecutor : IJobExecutor\n    {\n\n        public void Execute<T>(TimeSpan timeout) where T : IJob\n        {\n            throw new NotImplementedException();\n        }\n\n        public void Reschedule<T>(IScheduledJob<T> job, DateTimeOffset nextTime, JobExecutionRecord record = null) where T : IJob\n        {\n            Scheduled[typeof(T)] = nextTime;\n        }\n\n        public void Schedule<T>(IScheduledJob<T> job, DateTimeOffset nextTime) where T : IJob\n        {\n            Scheduled[typeof(T)] = nextTime;\n        }\n\n        public readonly Cache<Type, DateTimeOffset> Scheduled = new Cache<Type, DateTimeOffset>();\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ScheduledJobs/ScheduledStatusMonitorTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading;\nusing FubuCore.Dates;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.ScheduledJobs\n{\n    [TestFixture]\n    public class ScheduledStatusMonitorTester\n    {\n        private JobStatusDTO foo1;\n        private JobStatusDTO foo2;\n        private JobStatusDTO foo3;\n        private JobStatusDTO bar1;\n        private JobStatusDTO bar2;\n        private InMemorySchedulePersistence thePersistence;\n        private RecordingLogger theLogger;\n        private ScheduleStatusMonitor theStatusMonitor;\n        private ChannelGraph theChannelGraph = new ChannelGraph {Name = \"foo\"};\n\n        [SetUp]\n        public void SetUp()\n        {\n            foo1 = new JobStatusDTO { JobKey = \"1\", NodeName = \"foo\" };\n            foo2 = new JobStatusDTO { JobKey = \"2\", NodeName = \"foo\" };\n            foo3 = new JobStatusDTO { JobKey = \"3\", NodeName = \"foo\" };\n            bar1 = new JobStatusDTO { JobKey = \"1\", NodeName = \"bar\" };\n            bar2 = new JobStatusDTO { JobKey = \"2\", NodeName = \"bar\" };\n\n            thePersistence = new InMemorySchedulePersistence();\n            thePersistence.Persist(new[] { foo1, foo2, foo3, bar1, bar2 });\n\n            theLogger = new RecordingLogger();\n\n            theStatusMonitor = new ScheduleStatusMonitor(theChannelGraph, new ScheduledJobGraph(), thePersistence, theLogger, SystemTime.Default());\n\n        }\n\n        [Test]\n        public void mark_scheduled_persistence()\n        {\n            var next = (DateTimeOffset)DateTime.Today;\n            theStatusMonitor.MarkScheduled<FooJob1>(next);\n\n            foo1.Status.ShouldBe(JobExecutionStatus.Scheduled);\n            foo1.NextTime.ShouldBe(next);\n        }\n\n        [Test]\n        public void mark_executing_persistence()\n        {\n            foo1.Executor = null;\n\n            theStatusMonitor.MarkExecuting<FooJob1>();\n\n            foo1.Status.ShouldBe(JobExecutionStatus.Executing);\n            foo1.Executor.ShouldBe(theChannelGraph.NodeId);\n\n        }\n\n        [Test]\n        public void mark_completion_persistence()\n        {\n            var record = new JobExecutionRecord{Success = true};\n            theStatusMonitor.MarkCompletion<FooJob1>(record);\n\n            foo1.Status.ShouldBe(JobExecutionStatus.Completed);\n            foo1.LastExecution.ShouldBeTheSameAs(record);\n            foo1.Executor.ShouldBeNull();\n\n            record.Executor.ShouldBe(theChannelGraph.NodeId);\n\n            thePersistence.FindHistory(foo1.NodeName, foo1.JobKey)\n                .ShouldHaveTheSameElementsAs(record);\n        }\n\n        [Test]\n        public void track_and_succeed()\n        {\n            var tracker = theStatusMonitor.TrackJob(3, new FooJob1());\n            var next = (DateTimeOffset)DateTime.Today.AddHours(3);\n            \n            tracker.Success(next);\n\n            foo1.Status.ShouldBe(JobExecutionStatus.Completed);\n            foo1.LastExecution.Executor.ShouldBe(theChannelGraph.NodeId);\n            foo1.LastExecution.Success.ShouldBeTrue();\n            foo1.LastExecution.Attempts.ShouldBe(3);\n            foo1.NextTime.ShouldBe(next);\n            \n            foo1.Executor.ShouldBeNull();\n\n            foo1.LastExecution.Executor.ShouldBe(theChannelGraph.NodeId);\n        }\n\n        [Test]\n        public void track_and_fail()\n        {\n            var tracker = theStatusMonitor.TrackJob(3, new FooJob1());\n\n            var ex = new NotImplementedException();\n            tracker.Failure(ex);\n\n            foo1.Status.ShouldBe(JobExecutionStatus.Failed);\n            foo1.LastExecution.Executor.ShouldBe(theChannelGraph.NodeId);\n            foo1.LastExecution.Success.ShouldBeFalse();\n            foo1.LastExecution.Attempts.ShouldBe(3);\n            foo1.LastExecution.ExceptionText.ShouldBe(ex.ToString());\n\n            foo1.Executor.ShouldBeNull();\n\n            thePersistence.FindHistory(foo1.NodeName, foo1.JobKey)\n                .Single().ShouldBeTheSameAs(foo1.LastExecution);\n\n            foo1.LastExecution.Executor.ShouldBe(theChannelGraph.NodeId);\n        }\n\n        [Test]\n        public void mark_completion_with_failure_persistence()\n        {\n            var record = new JobExecutionRecord\n            {\n                Success = false\n            };\n            theStatusMonitor.MarkCompletion<FooJob1>(record);\n\n            foo1.Status.ShouldBe(JobExecutionStatus.Failed);\n            foo1.LastExecution.ShouldBeTheSameAs(record);\n            foo1.Executor.ShouldBeNull();\n\n            record.Executor.ShouldBe(theChannelGraph.NodeId);\n        }\n\n\n\n\n        [JobKey(\"1\")]\n        public class FooJob1 : IJob\n        {\n            public void Execute(CancellationToken cancellation)\n            {\n                throw new System.NotImplementedException();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Scheduling/TaskSchedulerTester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Scheduling;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Scheduling\n{\n    public class TaskSchedulerTester\n    {\n        [Test]\n        public void can_schedule_work()\n        {\n            var ran = false;\n            using (var scheduler = TaskScheduler.Default())\n            {\n                scheduler.Start(() => ran = true);\n                Wait.Until(() => ran).ShouldBeTrue();\n            }\n        }\n\n        [Test]\n        public void can_use_multiple_tasks()\n        {\n            using (var scheduler = new TaskScheduler(5))\n            {\n                scheduler.Start(() => { });\n                scheduler.Tasks.ShouldHaveCount(5);\n            }\n        }\n\n        [Test]\n        public void unstarted_tasks_should_be_empty()\n        {\n            using (var scheduler = new TaskScheduler(5))\n            {\n                scheduler.Tasks.ShouldHaveCount(0);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Scheduling/ThreadSchedulerTester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Scheduling;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Scheduling\n{\n    [TestFixture]\n    public class ThreadSchedulerTester\n    {\n        [Test]\n        public void can_schedule_work()\n        {\n            var ran = false;\n            using(var scheduler = ThreadScheduler.Default())\n            {\n                scheduler.Start(() => ran = true);\n                Wait.Until(() => ran).ShouldBeTrue();\n            }\n        }\n\n        [Test]\n        public void can_use_multiple_threads()\n        {\n            using (var scheduler = new ThreadScheduler(5))\n            {\n                scheduler.Start(() => { });\n                scheduler.Threads.ShouldHaveCount(5);\n            }\n        }\n\n        [Test]\n        public void unstarted_threads_should_be_empty()\n        {\n            using (var scheduler = new ThreadScheduler(5))\n            {\n                scheduler.Threads.ShouldHaveCount(0);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ServiceBus_Consume_right_now_Mr_Tester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing NUnit.Framework;\nusing Shouldly;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    [TestFixture]\n    public class ServiceBus_Consume_right_now_Tester\n    {\n        [Test]\n        public void send_now_is_handled_right_now()\n        {\n\n            using (var runtime = FubuRuntime.For<FubuRegistry>(x =>\n            {\n                x.ServiceBus.Enable(true);\n                x.ServiceBus.EnableInMemoryTransport();\n                x.Handlers.DisableDefaultHandlerSource();\n                x.Handlers.Include<SimpleHandler<OneMessage>>();\n            }))\n            {\n                var serviceBus = runtime.Get<IServiceBus>();\n\n                TestMessageRecorder.Clear();\n\n                var message = new OneMessage();\n\n                serviceBus.Consume(message);\n\n                TestMessageRecorder.ProcessedFor<OneMessage>().Single().Message\n                    .ShouldBeTheSameAs(message);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ServiceBus_DelaySend_Tester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    [TestFixture]\n    public class ServiceBus_DelaySend_Tester : InteractionContext<Core.ServiceBus.ServiceBus>\n    {\n        protected override void beforeEach()\n        {\n            LocalSystemTime = DateTime.Today.AddHours(4);\n        }\n\n        private Envelope theLastEnvelopeSent\n        {\n            get\n            {\n                return MockFor<IEnvelopeSender>().GetArgumentsForCallsMadeOn(x => x.Send(null))\n                    .Last()[0].As<Envelope>();\n            }\n        }\n\n        [Test]\n        public void send_by_a_time()\n        {\n            var expectedTime = DateTime.Today.AddHours(5);\n            var theMessage = new Message1();\n            ClassUnderTest.DelaySend(theMessage, expectedTime);\n\n            theLastEnvelopeSent.Message.ShouldBeTheSameAs(theMessage);\n            theLastEnvelopeSent.ExecutionTime.ShouldBe(expectedTime.ToUniversalTime());\n        }\n\n        [Test]\n        public void send_by_delay()\n        {\n            var theMessage = new Message1();\n            ClassUnderTest.DelaySend(theMessage, 5.Hours());\n\n            theLastEnvelopeSent.Message.ShouldBeTheSameAs(theMessage);\n            theLastEnvelopeSent.ExecutionTime.ShouldBe(UtcSystemTime.AddHours(5));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ServiceBus_RemoveSubscriptions_Tester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    [TestFixture]\n    public class ServiceBus_RemoveSubscriptions_Tester : InteractionContext<Core.ServiceBus.ServiceBus>\n    {\n        private IList<Envelope> TheEnvelopesSent\n        {\n            get\n            {\n                return MockFor<IEnvelopeSender>().GetArgumentsForCallsMadeOn(x => x.Send(null))\n                    .Select(x => x[0] as Envelope)\n                    .ToList();\n            }\n        }\n\n        [Test]\n        public void sends_subscriptions_removed()\n        {\n            var local = new Uri(\"memory://node1\");\n            var subscriptions = new[]\n            {\n                new Subscription\n                {\n                    Receiver = local,\n                    Source = new Uri(\"memory://node2\"),\n                },\n                new Subscription\n                {\n                    Receiver = local,\n                    Source = new Uri(\"memory://node3\"),\n                }\n            };\n            MockFor<ISubscriptionRepository>().Expect(x => x.LoadSubscriptions(SubscriptionRole.Subscribes))\n                .Return(subscriptions);\n            MockFor<ISubscriptionRepository>().Expect(x => x.RemoveLocalSubscriptions())\n                .Return(subscriptions);\n\n            ClassUnderTest.RemoveSubscriptionsForThisNodeAsync();\n\n            var envelopes = TheEnvelopesSent;\n            envelopes.ShouldHaveCount(2);\n            envelopes.Any(x => x.Destination == new Uri(\"memory://node2\")).ShouldBeTrue();\n            envelopes.Any(x => x.Destination == new Uri(\"memory://node3\")).ShouldBeTrue();\n            envelopes.Each(x => x.Message.As<SubscriptionsRemoved>().Receiver.ShouldBe(local));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/ServiceBus_Send_to_destination_Tester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Events;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    [TestFixture]\n    public class ServiceBus_Send_to_destination_Tester : InteractionContext<Core.ServiceBus.ServiceBus>\n    {\n        private Envelope theLastEnvelopeSent\n        {\n            get\n            {\n                return MockFor<IEnvelopeSender>().GetArgumentsForCallsMadeOn(x => x.Send(null))\n                    .Last()[0].As<Envelope>();\n            }\n        }\n\n        [Test]\n        public void sends_to_appropriate_destination()\n        {\n            var destination = new Uri(\"memory://blah\");\n            var message = new Message1();\n            \n            ClassUnderTest.Send(destination, message);\n\n            theLastEnvelopeSent.Destination.ShouldBe(destination);\n            theLastEnvelopeSent.Message.ShouldBeTheSameAs(message);\n        }\n\n        [Test]\n        public void sends_to_appropriate_destination_and_waits()\n        {\n            var destination = new Uri(\"memory://blah\");\n            var message = new Message1();\n            \n            ClassUnderTest.SendAndWait(destination, message).ShouldNotBeNull();\n\n            theLastEnvelopeSent.Destination.ShouldBe(destination);\n            theLastEnvelopeSent.Message.ShouldBeTheSameAs(message);\n\n            var lastReplyListener = MockFor<IEventAggregator>().GetArgumentsForCallsMadeOn(x => x.AddListener(null))\n                .Last()[0].As<ReplyListener<Acknowledgement>>();\n            lastReplyListener.IsExpired.ShouldBeFalse();\n            MockFor<IEventAggregator>().AssertWasCalled(x => x.AddListener(Arg<ReplyListener<Acknowledgement>>.Is.Anything));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/StubChannelNode.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Headers;\nusing FubuMVC.Core.ServiceBus.Runtime.Serializers;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    public class StubChannelNode : ChannelNode\n    {\n        public Envelope LastEnvelope;\n\n        public StubChannelNode(string protocol = null)\n        {\n            Key = Guid.NewGuid().ToString();\n            Uri = (\"{0}://{1}\".ToFormat(protocol ?? \"fake\", Key)).ToUri();\n        }\n\n        public override IHeaders Send(Envelope envelope, IEnvelopeSerializer serializer, Uri replyUri = null)\n        {\n            if (replyUri != null)\n            {\n                envelope.ReplyUri = replyUri;\n            }\n\n            LastEnvelope = envelope;\n\n            return envelope.Headers;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Subscriptions/SubscriptionCache_clearing_tester.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Subscriptions\n{\n    [TestFixture]\n    public class SubscriptionCache_clearing_tester\n    {\n        private readonly SubscriptionCache _cache = new SubscriptionCache(\n            new ChannelGraph(),\n            new ITransport[] { new InMemoryTransport() });\n\n        [Test]\n        public void clears_all_subscriptions()\n        {\n            var subscriptions = new[]\n            {\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription()\n            };\n\n            _cache.LoadSubscriptions(subscriptions);\n            _cache.ActiveSubscriptions.ShouldHaveTheSameElementsAs(subscriptions);\n\n            _cache.ClearAll();\n            _cache.ActiveSubscriptions.ShouldHaveCount(0);\n        }\n\n        [Test]\n        public void clears_volatile_nodes()\n        {\n            var envelope = ObjectMother.EnvelopeWithMessage();\n            var subscription = ObjectMother.ExistingSubscription();\n            subscription.MessageType = envelope.Message.GetType().FullName;\n\n            _cache.LoadSubscriptions(new[] { subscription });\n            IList<ChannelNode> channels = _cache.FindDestinationChannels(envelope).ToList();\n            channels.ShouldNotBeEmpty();\n            var oldNode = channels.Single();\n\n            _cache.ClearAll();\n            _cache.LoadSubscriptions(new[] { subscription });\n            channels = _cache.FindDestinationChannels(envelope).ToList();\n            channels.ShouldNotBeEmpty();\n            channels.ShouldNotContain(oldNode);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Subscriptions/SubscriptionCache_replace_subscriptions_tester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Subscriptions\n{\n    [TestFixture]\n    public class SubscriptionCache_replace_subscriptions_tester\n    {\n        [Test]\n        public void can_replace_the_subscriptions()\n        {\n            var cache = new SubscriptionCache(new ChannelGraph(), new ITransport[]{new InMemoryTransport(), });\n\n            var subscriptions1 = new Subscription[]\n            {\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription()\n            };\n\n            var subscriptions2 = new Subscription[]\n            {\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription()\n            };\n\n            cache.LoadSubscriptions(subscriptions1);\n\n            cache.ActiveSubscriptions.ShouldHaveTheSameElementsAs(subscriptions1);\n\n            cache.LoadSubscriptions(subscriptions2);\n\n            cache.ActiveSubscriptions.ShouldHaveTheSameElementsAs(subscriptions2);\n        }\n\n        [Test]\n        public void updates_cached_routes()\n        {\n            var cache = new SubscriptionCache(new ChannelGraph(), new ITransport[]{new InMemoryTransport(), });\n\n            var subscriptions1 = new[]\n            {\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription()\n            };\n            subscriptions1[0].MessageType = typeof(string).FullName;\n            subscriptions1[1].MessageType = typeof(int).FullName;\n\n            var subscriptions2 = new[] { ObjectMother.ExistingSubscription() };\n            subscriptions2[0].MessageType = typeof(int).FullName;\n\n            cache.LoadSubscriptions(subscriptions1);\n            cache.FindDestinationChannels(new Envelope { Message = \"Foo\" });\n            cache.FindDestinationChannels(new Envelope { Message = 42 });\n            cache.CachedRoutes.ContainsKey(typeof(string)).ShouldBeTrue();\n            cache.CachedRoutes.ContainsKey(typeof(int)).ShouldBeTrue();\n\n            cache.LoadSubscriptions(subscriptions2);\n            cache.CachedRoutes.ContainsKey(typeof(string)).ShouldBeFalse();\n            cache.CachedRoutes.ContainsKey(typeof(int)).ShouldBeTrue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Subscriptions/SubscriptionCache_routing_with_subscription_Tester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.ServiceBus.Subscriptions\n{\n    [TestFixture]\n    public class SubscriptionCache_routing_with_subscription_Tester\n    {\n        public readonly SubscriptionSettings theSettings = InMemoryTransport.ToInMemory<SubscriptionSettings>();\n        private FubuRuntime _runtime;\n        private SubscriptionCache theCache;\n\n        [SetUp]\n        public void SetUp()\n        {\n            var container = new Container(x => {\n                x.For<SubscriptionSettings>().Use(theSettings);\n            });\n\n            var registry = new SubscriptionRegistry();\n            registry.StructureMap(container);\n\n            _runtime = registry.ToRuntime();\n\n            theCache = _runtime.Get<ISubscriptionCache>().As<SubscriptionCache>();\n        }\n\n        [TearDown]\n        public void TearDown()\n        {\n            _runtime.Dispose();\n        }\n\n        [Test]\n        public void route_without_any_subscriptions()\n        {\n            theCache.FindSubscribingChannelsFor(typeof(Message1)).Select(x => x.Uri)\n                .ShouldHaveTheSameElementsAs(theSettings.Q1);\n\n            theCache.FindSubscribingChannelsFor(typeof(Message2)).Select(x => x.Uri)\n                .ShouldHaveTheSameElementsAs(theSettings.Q1, theSettings.Q2);\n\n            theCache.FindSubscribingChannelsFor(typeof(Message3)).Select(x => x.Uri)\n                .ShouldHaveTheSameElementsAs(theSettings.Q2);\n        }\n\n        [Test]\n        public void route_with_a_single_matching_subscription()\n        {\n            theCache.LoadSubscriptions(new Subscription[]\n            {\n                Subscription.For<Message4>().ReceivedBy(theSettings.Q4),\n                Subscription.For<Message5>().ReceivedBy(theSettings.Q5)\n            });\n\n            theCache.FindSubscribingChannelsFor(typeof(Message4)).Select(x => x.Uri)\n                .ShouldHaveTheSameElementsAs(theSettings.Q4);\n\n\n            theCache.FindSubscribingChannelsFor(typeof(Message5)).Select(x => x.Uri)\n                .ShouldHaveTheSameElementsAs(theSettings.Q5);\n        }\n\n        [Test]\n        public void with_mixed_subscription_and_static_matching_nodes()\n        {\n            theCache.LoadSubscriptions(new Subscription[]\n            {\n                Subscription.For<Message1>().ReceivedBy(theSettings.Q4),\n                Subscription.For<Message1>().ReceivedBy(theSettings.Q5)\n            });\n\n            theCache.FindSubscribingChannelsFor(typeof(Message1)).Select(x => x.Uri)\n                .ShouldHaveTheSameElementsAs(theSettings.Q1, theSettings.Q4, theSettings.Q5);\n        }\n\n        [Test]\n        public void overwrite_subscriptions()\n        {\n            theCache.LoadSubscriptions(new Subscription[]\n            {\n                Subscription.For<Message1>().ReceivedBy(theSettings.Q4),\n                Subscription.For<Message1>().ReceivedBy(theSettings.Q5)\n            });\n\n            theCache.LoadSubscriptions(new Subscription[]\n            {\n                Subscription.For<Message2>().ReceivedBy(theSettings.Q4),\n                Subscription.For<Message1>().ReceivedBy(theSettings.Q5)\n            });\n\n            theCache.FindSubscribingChannelsFor(typeof(Message1)).Select(x => x.Uri)\n                .ShouldHaveTheSameElementsAs(theSettings.Q1, theSettings.Q5);\n        }\n\n\n        public class SubscriptionRegistry : FubuTransportRegistry<SubscriptionSettings>\n        {\n            public SubscriptionRegistry()\n            {\n                ServiceBus.EnableInMemoryTransport();\n\n                Channel(x => x.Q1)\n                    .AcceptsMessage<Message1>()\n                    .AcceptsMessage<Message2>();\n\n                Channel(x => x.Q2)\n                    .AcceptsMessage<Message2>()\n                    .AcceptsMessage<Message3>();\n            }\n        }\n\n        public class SubscriptionSettings\n        {\n            public Uri Q1 { get; set; }\n            public Uri Q2 { get; set; }\n            public Uri Q3 { get; set; }\n            public Uri Q4 { get; set; }\n            public Uri Q5 { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Subscriptions/SubscriptionHandler_is_registered_in_fubu_application_apps.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Subscriptions\n{\n    [TestFixture]\n    public class SubscriptionHandler_is_registered_in_fubu_application_apps\n    {\n        [Test]\n        public void SubscriptionHandler_should_be_part_of_the_application()\n        {\n            using (var runtime = FubuRuntime.BasicBus())\n            {\n                var graph = runtime.Get<BehaviorGraph>();\n                graph.ChainFor(typeof (SubscriptionRequested)).ShouldNotBeNull();\n                graph.ChainFor(typeof (SubscriptionsChanged)).ShouldNotBeNull();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Subscriptions/SubscriptionRepositoryTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Subscriptions\n{\n    [TestFixture]\n    public class SubscriptionRepositoryTester\n    {\n        private InMemorySubscriptionPersistence persistence;\n        private SubscriptionRepository theRepository;\n        private string TheNodeName = \"TheNode\";\n        private ChannelGraph channelGraph;\n\n        [SetUp]\n        public void SetUp()\n        {\n            persistence = new InMemorySubscriptionPersistence();\n            channelGraph = new ChannelGraph{Name = TheNodeName};\n            channelGraph.AddReplyChannel(\"foo\", \"foo://replies\".ToUri());\n            channelGraph.AddReplyChannel(\"bar\", \"bar://replies\".ToUri());\n\n            theRepository = new SubscriptionRepository(channelGraph, persistence);\n        }\n\n        [Test]\n        public void save_the_first_subscriptions()\n        {\n            var subscription = ObjectMother.NewSubscription();\n\n            theRepository.PersistSubscriptions(subscription);\n\n            var requirements = theRepository.LoadSubscriptions(SubscriptionRole.Subscribes);\n            requirements\n                .ShouldHaveTheSameElementsAs(subscription);\n\n            requirements.Single().Id.ShouldNotBe(Guid.Empty);\n        }\n\n        [Test]\n        public void save_a_new_subscription_that_does_not_match_existing()\n        {\n            var existing = ObjectMother.ExistingSubscription();\n            existing.NodeName = TheNodeName;\n\n            persistence.Persist(existing);\n\n            var subscription = ObjectMother.NewSubscription();\n            subscription.NodeName = TheNodeName;\n\n            theRepository.PersistSubscriptions(subscription);\n            var requirements = theRepository.LoadSubscriptions(SubscriptionRole.Subscribes);\n            requirements.Count().ShouldBe(2);\n            requirements.ShouldContain(existing);\n            requirements.ShouldContain(subscription);\n        }\n\n        [Test]\n        public void save_a_new_subscription_with_a_mix_of_existing_subscriptions()\n        {\n            var existing = ObjectMother.ExistingSubscription();\n            existing.NodeName = TheNodeName;\n\n            persistence.Persist(existing);\n            persistence.Persist(ObjectMother.ExistingSubscription(\"Different\"));\n            persistence.Persist(ObjectMother.ExistingSubscription(\"Different\"));\n            persistence.Persist(ObjectMother.ExistingSubscription(\"Different\"));\n            persistence.Persist(ObjectMother.ExistingSubscription(\"Different\"));\n            persistence.Persist(ObjectMother.ExistingSubscription(\"Different\"));\n\n            var subscription = ObjectMother.NewSubscription();\n            subscription.NodeName = TheNodeName;\n\n            theRepository.PersistSubscriptions(subscription);\n\n            var requirements = theRepository.LoadSubscriptions(SubscriptionRole.Subscribes);\n            requirements.Count().ShouldBe(2);\n            requirements.ShouldContain(existing);\n            requirements.ShouldContain(subscription);\n        }\n\n        [Test]\n        public void save_a_subscription_that_already_exists()\n        {\n            var existing = ObjectMother.ExistingSubscription();\n            existing.NodeName = TheNodeName;\n\n            var subscription = existing.Clone();\n\n            theRepository.PersistSubscriptions(subscription);\n\n            theRepository.LoadSubscriptions(SubscriptionRole.Subscribes)\n                .Single()\n                .ShouldBe(existing);\n        }\n\n        [Test]\n        public void save_a_mixed_bag_of_existing_and_new_subscriptions()\n        {\n            var existing = ObjectMother.ExistingSubscription(TheNodeName);\n\n            var anotherExisting = ObjectMother.ExistingSubscription(TheNodeName);\n\n            persistence.Persist(anotherExisting);\n            persistence.Persist(existing);\n            persistence.Persist(ObjectMother.ExistingSubscription(\"Different\"));\n            persistence.Persist(ObjectMother.ExistingSubscription(\"Different\"));\n            persistence.Persist(ObjectMother.ExistingSubscription(\"Different\"));\n            persistence.Persist(ObjectMother.ExistingSubscription(\"Different\"));\n            persistence.Persist(ObjectMother.ExistingSubscription(\"Different\"));\n            persistence.Persist(ObjectMother.ExistingSubscription(\"Different\"));\n\n            var old = existing.Clone();\n            var newSubscription = ObjectMother.NewSubscription(TheNodeName);\n\n            theRepository.PersistSubscriptions(old, newSubscription);\n            var requirements = theRepository.LoadSubscriptions(SubscriptionRole.Subscribes);\n\n            requirements.Count().ShouldBe(3);\n            requirements.ShouldContain(existing);\n            requirements.ShouldContain(newSubscription);\n            requirements.ShouldContain(anotherExisting);\n\n\n        }\n\n        [Test]\n        public void save_transport_node_for_the_first_time()\n        {\n            theRepository.Persist(new TransportNode(channelGraph));\n\n            var node = persistence.NodesForGroup(channelGraph.Name)\n                .Single();\n\n            node.ShouldBe(new TransportNode(channelGraph));\n            node.Id.ShouldNotBe(Guid.Empty.ToString());\n        }\n\n        [Test]\n        public void saving_the_transport_node_is_idempotent()\n        {\n            theRepository.Persist(new TransportNode(channelGraph));\n\n            var id = persistence.NodesForGroup(channelGraph.Name)\n                .Single().Id;\n\n            theRepository.Persist(new TransportNode(channelGraph));\n            theRepository.Persist(new TransportNode(channelGraph));\n            theRepository.Persist(new TransportNode(channelGraph));\n            theRepository.Persist(new TransportNode(channelGraph));\n            theRepository.Persist(new TransportNode(channelGraph));\n            theRepository.Persist(new TransportNode(channelGraph));\n            theRepository.Persist(new TransportNode(channelGraph));\n            theRepository.Persist(new TransportNode(channelGraph));\n            theRepository.Persist(new TransportNode(channelGraph));\n\n            persistence.NodesForGroup(channelGraph.Name)\n                .Single().Id.ShouldBe(id);\n        }\n\n        [Test]\n        public void find_local()\n        {\n            var local = new TransportNode(channelGraph);\n\n            theRepository.Persist(local, new TransportNode{Id=\"Foo\"}, new TransportNode{Id = \"Bar\"});\n\n            theRepository.FindLocal().ShouldBeTheSameAs(local);\n        }\n\n        [Test]\n        public void find_peer()\n        {\n            var local = new TransportNode(channelGraph);\n\n            var fooNode = new TransportNode { Id = \"Foo\" };\n            theRepository.Persist(local, fooNode, new TransportNode { Id = \"Bar\" });\n\n            theRepository.FindPeer(\"Foo\")\n                .ShouldBeTheSameAs(fooNode);\n        }\n\n        [Test]\n        public void record_ownership_to_this_node_singular()\n        {\n            var local = new TransportNode(channelGraph);\n\n            var fooNode = new TransportNode { Id = \"Foo\" };\n            theRepository.Persist(local, fooNode, new TransportNode { Id = \"Bar\" });\n\n            var subject = \"foo://1\".ToUri();\n\n            theRepository.AddOwnershipToThisNode(subject);\n\n            local.OwnedTasks.ShouldContain(subject);\n        }\n\n        [Test]\n        public void record_multiple_ownerships_to_this_node()\n        {\n            var subjects = new Uri[] {\"foo://1\".ToUri(), \"foo://2\".ToUri(), \"bar://1\".ToUri()};\n\n            var local = new TransportNode(channelGraph);\n\n            var fooNode = new TransportNode { Id = \"Foo\" };\n            theRepository.Persist(local, fooNode, new TransportNode { Id = \"Bar\" });\n\n            theRepository.AddOwnershipToThisNode(subjects);\n\n            local.OwnedTasks.ShouldHaveTheSameElementsAs(subjects);\n        }\n\n        [Test]\n        public void remove_ownership_from_the_current_node()\n        {\n            var local = new TransportNode(channelGraph);\n\n            var fooNode = new TransportNode { Id = \"Foo\" };\n            theRepository.Persist(local, fooNode, new TransportNode { Id = \"Bar\" });\n\n            var subject = \"foo://1\".ToUri();\n            local.AddOwnership(subject);\n\n            theRepository.RemoveOwnershipFromThisNode(subject);\n\n            local.OwnedTasks.ShouldNotContain(subject);\n        }\n\n        [Test]\n        public void remove_ownership_from_a_different_node()\n        {\n            var subject = \"foo://1\".ToUri();\n            var local = new TransportNode(channelGraph);\n\n            var fooNode = new TransportNode { Id = \"Foo\" };\n            fooNode.AddOwnership(subject);\n\n            theRepository.Persist(local, fooNode, new TransportNode { Id = \"Bar\" });\n\n\n            theRepository.RemoveOwnershipFromNode(fooNode.Id, subject);\n\n            fooNode.OwnedTasks.ShouldNotContain(subject);\n        }\n\n        [Test]\n        public void remove_local_subscriptions()\n        {\n            var subscriptions = new[] { ObjectMother.NewSubscription(), ObjectMother.NewSubscription() };\n            subscriptions.Each(x =>\n            {\n                x.Receiver = channelGraph.ReplyChannelFor(\"foo\");\n                x.Source = new Uri(\"foo://source\");\n            });\n\n            theRepository.PersistSubscriptions(subscriptions);\n            persistence.LoadSubscriptions(TheNodeName, SubscriptionRole.Subscribes)\n                .ShouldHaveTheSameElementsAs(subscriptions);\n\n            var removed = theRepository.RemoveLocalSubscriptions();\n            removed.ShouldHaveTheSameElementsAs(subscriptions);\n\n            persistence.LoadSubscriptions(TheNodeName, SubscriptionRole.Subscribes)\n                .ShouldHaveCount(0);\n        }\n\n        [Test]\n        public void remove_subscriptions_for_receiver()\n        {\n            var differentNode = ObjectMother.ExistingSubscription(\"DifferentNode\");\n            var differentReceiver = ObjectMother.ExistingSubscription();\n            differentReceiver.Receiver = new Uri(\"memory://other_receiver\");\n\n            var subscriptions = new[]\n            {\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription(),\n                differentNode,\n                differentReceiver\n            };\n\n            subscriptions.Each(x => x.Role = SubscriptionRole.Publishes);\n            persistence.Persist(subscriptions);\n\n            theRepository.RemoveSubscriptionsForReceiver(subscriptions[0].Receiver);\n\n            persistence.LoadSubscriptions(TheNodeName, SubscriptionRole.Publishes)\n                .ShouldHaveTheSameElementsAs(differentReceiver);\n            persistence.LoadSubscriptions(\"DifferentNode\", SubscriptionRole.Publishes)\n                .ShouldHaveTheSameElementsAs(differentNode);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Subscriptions/Subscription_equality_tester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Subscriptions\n{\n    [TestFixture]\n    public class Subscription_equality_tester\n    {\n        [Test]\n        public void equals_if_all_are_equal()\n        {\n            var s1 = new Subscription(typeof(Message1))\n            {\n                NodeName = \"Service1\",\n                Receiver = \"foo://1\".ToUri(),\n                Source = \"foo://2\".ToUri(),\n                Role = SubscriptionRole.Subscribes\n            };\n\n            var s2 = new Subscription(typeof(Message1))\n            {\n                NodeName = s1.NodeName,\n                Receiver = s1.Receiver,\n                Source = s1.Source,\n                Role = SubscriptionRole.Subscribes\n            };\n\n            s1.ShouldBe(s2);\n            s2.ShouldBe(s1);\n\n            s2.NodeName = \"different\";\n            s1.ShouldNotBe(s2);\n\n            s2.NodeName = s1.NodeName;\n            s2.MessageType = typeof (Message2).AssemblyQualifiedName;\n            s2.ShouldNotBe(s1);\n\n            s2.MessageType = s1.MessageType;\n            s2.Receiver = \"foo://3\".ToUri();\n            s2.ShouldNotBe(s1);\n\n            s2.Receiver = s1.Receiver;\n            s2.Source = \"foo://4\".ToUri();\n            s2.ShouldNotBe(s1);\n\n            s2.Source = s1.Source;\n            s2.Role = SubscriptionRole.Publishes;\n            s2.ShouldNotBe(s1);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Subscriptions/Subscription_matches_tester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Subscriptions;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Subscriptions\n{\n    [TestFixture]\n    public class Subscription_matches_tester\n    {\n        [Test]\n        public void fuzzy_matches()\n        {\n            var subscription = Subscription.For<Message1>();\n\n            subscription.Matches(typeof(Message1)).ShouldBeTrue();\n            subscription.Matches(typeof (Message2)).ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Subscriptions/SubscriptionsHandlerTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Subscriptions\n{\n    [TestFixture]\n    public class when_handling_subscriptions_changed : InteractionContext<SubscriptionsHandler>\n    {\n        private Subscription[] theSubscriptions;\n        private ChannelGraph theGraph;\n\n        protected override void beforeEach()\n        {\n            theSubscriptions = new Subscription[]\n            {\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription(),\n                ObjectMother.ExistingSubscription()\n            };\n\n            theGraph = new ChannelGraph {Name = \"TheNode\"};\n            Services.Inject(theGraph);\n\n            MockFor<ISubscriptionRepository>().Stub(x => x.LoadSubscriptions(SubscriptionRole.Publishes))\n                .Return(theSubscriptions);\n\n            ClassUnderTest.Handle(new SubscriptionsChanged());\n        }\n\n        [Test]\n        public void should_load_the_new_subscriptions_into_the_running_cache()\n        {\n            MockFor<ISubscriptionCache>()\n                .AssertWasCalled(x => x.LoadSubscriptions(theSubscriptions));\n        }\n    }\n\n    [TestFixture]\n    public class when_sending_a_subscription_to_a_peer : InteractionContext<SubscriptionsHandler>\n    {\n        private RecordingEnvelopeSender theSender;\n        private TransportNode thePeer;\n\n        protected override void beforeEach()\n        {\n            theSender = new RecordingEnvelopeSender();\n            Services.Inject<IEnvelopeSender>(theSender);\n\n            thePeer = new TransportNode\n            {\n                Addresses = new Uri[] {\"memory://replies\".ToUri()},\n                ControlChannel = \"memory://1\".ToUri()\n            };\n\n            ClassUnderTest.SendSubscriptionChangedToPeer(thePeer);\n        }\n\n        [Test]\n        public void should_have_sent_a_message_to_the_peer_to_reload_subscriptions()\n        {\n            var envelope = theSender.Sent.Single();\n            envelope.Message.ShouldBeOfType<SubscriptionsChanged>();\n            envelope.Destination.ShouldBe(thePeer.ControlChannel);\n        }\n    }\n\n    [TestFixture]\n    public class when_handling_the_subscriptions_changed_message : InteractionContext<SubscriptionsHandler>\n    {\n        private TransportNode[] thePeers;\n        private SubscriptionRequested theMessage;\n\n        protected override void beforeEach()\n        {\n            Services.PartialMockTheClassUnderTest();\n\n            thePeers = new TransportNode[]\n            {\n                new TransportNode(),\n                new TransportNode(),\n                new TransportNode(),\n            };\n\n            ClassUnderTest.Expect(x => x.ReloadSubscriptions());\n            thePeers.Each(peer => ClassUnderTest.Expect(o => o.SendSubscriptionChangedToPeer(peer)));\n\n            MockFor<ISubscriptionRepository>().Stub(x => x.FindPeers())\n                .Return(thePeers);\n\n            theMessage = new SubscriptionRequested\n            {\n                Subscriptions = new Subscription[]\n                {\n                    ObjectMother.ExistingSubscription(),\n                    ObjectMother.ExistingSubscription(),\n                    ObjectMother.ExistingSubscription(),\n                    ObjectMother.ExistingSubscription(),\n                    ObjectMother.ExistingSubscription()\n                }\n            };\n\n            ClassUnderTest.Handle(theMessage);\n        }\n\n        [Test]\n        public void should_persist_the_new_subscriptions()\n        {\n            MockFor<ISubscriptionRepository>()\n                .AssertWasCalled(x => x.PersistPublishing(theMessage.Subscriptions));\n        }\n\n        [Test]\n        public void should_reload_subscriptions()\n        {\n            ClassUnderTest.AssertWasCalled(x => x.ReloadSubscriptions());\n        }\n\n        [Test]\n        public void should_message_all_of_its_peers_to_reload_their_subscriptions()\n        {\n            thePeers.Each(peer => {\n                ClassUnderTest.AssertWasCalled(x => x.SendSubscriptionChangedToPeer(peer));\n            });\n        }\n    }\n\n    [TestFixture]\n    public class when_handling_subscriptions_removed : InteractionContext<SubscriptionsHandler>\n    {\n        private SubscriptionsRemoved theMessage;\n\n        protected override void beforeEach()\n        {\n            Services.PartialMockTheClassUnderTest();\n\n            ClassUnderTest.Expect(x => x.ReloadSubscriptions());\n            ClassUnderTest.Expect(x => x.UpdatePeers());\n\n            theMessage = new SubscriptionsRemoved\n            {\n                Receiver = new Uri(\"memory://receiver\")\n            };\n            ClassUnderTest.Handle(theMessage);\n        }\n\n        [Test]\n        public void should_remove_subscriptions_from_repository()\n        {\n            MockFor<ISubscriptionRepository>()\n                .AssertWasCalled(x => x.RemoveSubscriptionsForReceiver(theMessage.Receiver));\n        }\n\n        [Test]\n        public void should_reload_subscriptions()\n        {\n            ClassUnderTest.AssertWasCalled(x => x.ReloadSubscriptions());\n        }\n\n        [Test]\n        public void should_update_peers()\n        {\n            ClassUnderTest.AssertWasCalled(x => x.UpdatePeers());\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Subscriptions/SubscriptionsIntegrationTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap;\nusing TestMessages.ScenarioSupport;\n\nnamespace FubuMVC.Tests.ServiceBus.Subscriptions\n{\n    [TestFixture]\n    public class SubscriptionsIntegrationTester\n    {\n        private FubuRuntime runtime;\n        private ISubscriptionCache theRouter;\n        private HarnessSettings settings;\n\n        [SetUp]\n        public void SetUp()\n        {\n            var registry = new RoutedRegistry();\n\n            var container = new Container();\n            settings = InMemoryTransport.ToInMemory<HarnessSettings>();\n            container.Inject(settings);\n\n            registry.StructureMap(container);\n\n            runtime = registry.ToRuntime();\n\n            theRouter = runtime.Get<ISubscriptionCache>();\n        }\n\n        [TearDown]\n        public void Teardown()\n        {\n            runtime.Dispose();\n        }\n\n        [Test]\n        public void if_destination_is_set_on_the_envelope_that_is_the_only_channel_returned()\n        {\n            var envelope = new Envelope\n            {\n                Message = new Message1(),\n                Destination = settings.Service4\n            };\n\n            theRouter.FindDestinationChannels(envelope).Single().Uri.ShouldBe(settings.Service4);\n        }\n\n        [Test]\n        public void can_happily_build_and_open_a_new_channel_for_a_destination()\n        {\n            var envelope = new Envelope\n            {\n                Message = new Message1(),\n                Destination = \"memory://dynamic\".ToUri()\n            };\n\n            theRouter.FindDestinationChannels(envelope).Single().Uri.ShouldBe(envelope.Destination);\n        }\n\n        [Test]\n        public void destination_is_specified_but_The_channel_does_not_exist_and_the_transport_is_unknown()\n        {\n            Exception<UnknownChannelException>.ShouldBeThrownBy(() => {\n                var envelope = new Envelope\n                {\n                    Message = new Message1(),\n                    Destination = \"unknown://uri\".ToUri()\n                };\n\n                theRouter.FindDestinationChannels(envelope);\n            });\n        }\n\n        [Test]\n        public void use_type_rules_on_the_channel_graph_1()\n        {\n            var envelope = new Envelope {Message = new Message1()};\n            theRouter.FindDestinationChannels(envelope).Select(x => x.Key)\n                .ShouldHaveTheSameElementsAs(\"Harness:Service1\");\n        }\n\n        [Test]\n        public void use_type_rules_on_the_channel_graph_2()\n        {\n            var envelope = new Envelope { Message = new Message2() };\n            theRouter.FindDestinationChannels(envelope).Select(x => x.Key)\n                .ShouldHaveTheSameElementsAs(\"Harness:Service1\", \"Harness:Service3\");\n        }\n\n        [Test]\n        public void use_type_rules_on_the_channel_graph_3()\n        {\n            var envelope = new Envelope { Message = new Message3() };\n            theRouter.FindDestinationChannels(envelope).Select(x => x.Key)\n                .ShouldHaveTheSameElementsAs(\"Harness:Service2\", \"Harness:Service3\");\n        }\n    }\n\n    public class RoutedRegistry : FubuTransportRegistry<HarnessSettings>\n    {\n        public RoutedRegistry()\n        {\n            ServiceBus.EnableInMemoryTransport();\n\n            Channel(x => x.Service1).AcceptsMessage<Message1>();\n            Channel(x => x.Service1).AcceptsMessage<Message2>();\n\n            Channel(x => x.Service2).AcceptsMessage<Message3>();\n            Channel(x => x.Service2).AcceptsMessage<Message4>();\n            \n            Channel(x => x.Service3).AcceptsMessage<Message2>();\n            Channel(x => x.Service3).AcceptsMessage<Message3>();\n\n            Channel(x => x.Service4).ReadIncoming();\n\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Subscriptions/TransportNodeTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Subscriptions\n{\n    [TestFixture]\n    public class TransportNodeTester\n    {\n        [Test]\n        public void use_the_explicit_control_queue_if_it_exists()\n        {\n            var graph = new ChannelGraph\n            {\n                NodeId = \"Foo@Bar\"\n\n            };\n\n            graph.AddReplyChannel(InMemoryChannel.Protocol, \"memory://localhost/replies\".ToUri());\n\n            graph.ControlChannel = new ChannelNode {Uri = \"memory://1\".ToUri()};\n\n            var node = new TransportNode(graph);\n\n            node.ControlChannel.ShouldBe(\"memory://1\".ToUri());\n        }\n\n        [Test]\n        public void fallback_to_the_first_incoming_channel_for_control_queue_if_no_explicit_control_queue_exists()\n        {\n            var graph = new ChannelGraph\n            {\n                NodeId = \"Foo@Bar\"\n\n            };\n\n            graph.AddReplyChannel(InMemoryChannel.Protocol, \"memory://localhost/replies\".ToUri());\n\n            //graph.ControlChannel = new ChannelNode { Uri = \"memory://1\".ToUri() };\n\n            var node = new TransportNode(graph);\n\n            node.ControlChannel.ShouldBe(\"memory://localhost/replies\".ToUri());\n        }\n\n        [Test]\n        public void build_with_channel_graph_sets_the_id_to_the_node_id()\n        {\n            var graph = new ChannelGraph\n            {\n                NodeId = \"Foo@Bar\"\n                \n            };\n\n            graph.AddReplyChannel(InMemoryChannel.Protocol, \"memory://localhost/replies\".ToUri());\n\n            var node = new TransportNode(graph);\n\n            node.Id.ShouldBe(graph.NodeId);\n        }\n\n        [Test]\n        public void blow_up_if_no_reply_channels()\n        {\n            var graph = new ChannelGraph\n            {\n                NodeId = \"Foo@Bar\"\n\n            };\n\n            Exception<InvalidOperationException>.ShouldBeThrownBy(() => {\n                new TransportNode(graph);\n            }).Message.ShouldBe(\"At least one reply channel is required\");\n        }\n\n        [Test]\n        public void create_a_transport_node_from_a_channel_graph()\n        {\n            var graph = new ChannelGraph\n            {\n                Name = \"Service1\"\n            };\n\n            graph.AddReplyChannel(\"memory\", \"memory://replies\".ToUri());\n            graph.AddReplyChannel(\"foo\", \"foo://replies\".ToUri());\n            graph.AddReplyChannel(\"bar\", \"bar://replies\".ToUri());\n\n            var node = new TransportNode(graph);\n\n            node.NodeName.ShouldBe(\"Service1\");\n\n            node.Addresses.OrderBy(x => x.ToString()).ShouldHaveTheSameElementsAs(\"bar://replies\".ToUri(), \"foo://replies\".ToUri(), \"memory://replies\".ToUri());\n        }\n\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Subscriptions/when_creating_grouped_subscriptions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Subscriptions\n{\n    [TestFixture]\n    public class when_creating_grouped_subscriptions\n    {\n        public BusSettings theSettings = InMemoryTransport.ToInMemory<BusSettings>();\n        private ChannelGraph theGraph;\n        private IEnumerable<Subscription> theSubscriptions;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theGraph = new ChannelGraph { Name = \"FooNode\" };\n\n            var requirement = new GroupSubscriptionRequirement<BusSettings>(x => x.Upstream, x => x.Incoming);\n            requirement.AddType(typeof(FooMessage));\n            requirement.AddType(typeof(BarMessage));\n\n            theSubscriptions = requirement.Determine(theSettings, theGraph);\n        }\n\n        [Test]\n        public void should_set_the_receiver_uri_to_the_explicitly_chosen_uri()\n        {\n            theSubscriptions.First().Receiver\n                .ShouldBe(theSettings.Incoming);\n        }\n\n        [Test]\n        public void sets_the_node_name_from_the_channel_graph()\n        {\n            theSubscriptions.Select(x => x.NodeName).Distinct()\n                .Single().ShouldBe(theGraph.Name);\n        }\n\n        [Test]\n        public void should_set_the_source_uri_to_the_requested_source_from_settings()\n        {\n            theSubscriptions.First().Source\n                .ShouldBe(theSettings.Upstream);\n\n        }\n\n        [Test]\n        public void should_add_a_subscription_for_each_type()\n        {\n            theSubscriptions.Select(x => x.MessageType)\n                .ShouldHaveTheSameElementsAs(typeof(FooMessage).GetFullName(), typeof(BarMessage).GetFullName());\n        }\n\n        public class BusSettings\n        {\n            public Uri Outbound { get; set; }\n            public Uri Incoming { get; set; }\n            public Uri Upstream { get; set; }\n        }\n\n        public class FooMessage { }\n        public class BarMessage { }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/Subscriptions/when_creating_local_subscriptions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.Subscriptions\n{\n    [TestFixture]\n    public class when_creating_local_subscriptions\n    {\n        public BusSettings theSettings = InMemoryTransport.ToInMemory<BusSettings>();\n        private ChannelGraph theGraph;\n        private Uri theLocalReplyUri;\n        private IEnumerable<Subscription> theSubscriptions;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theGraph = new ChannelGraph { Name = \"FooNode\" };\n\n            var requirement = new LocalSubscriptionRequirement<BusSettings>(x => x.Upstream);\n            requirement.AddType(typeof(FooMessage));\n            requirement.AddType(typeof(BarMessage));\n\n            theLocalReplyUri = InMemoryTransport.ReplyUriForGraph(theGraph);\n\n            theGraph.AddReplyChannel(\"Fake2\", \"fake2://2\".ToUri());\n            theGraph.AddReplyChannel(InMemoryChannel.Protocol, theLocalReplyUri);\n            theGraph.AddReplyChannel(\"Fake1\", \"fake1://1\".ToUri());\n\n            theSubscriptions = requirement.Determine(theSettings, theGraph);\n        }\n\n        [Test]\n        public void should_set_the_receiver_uri_to_the_reply_uri_of_the_matching_transport()\n        {\n            theSubscriptions.First().Receiver\n                .ShouldBe(theLocalReplyUri);\n        }\n\n        [Test]\n        public void sets_the_node_name_from_the_channel_graph()\n        {\n            theSubscriptions.Select(x => x.NodeName).Distinct()\n                .Single().ShouldBe(theGraph.Name);\n        }\n\n        [Test]\n        public void should_set_the_source_uri_to_the_requested_source_from_settings()\n        {\n            theSubscriptions.First().Source\n                .ShouldBe(theSettings.Upstream);\n\n        }\n\n        [Test]\n        public void should_add_a_subscription_for_each_type()\n        {\n            theSubscriptions.Select(x => x.MessageType)\n                .ShouldHaveTheSameElementsAs(typeof(FooMessage).GetFullName(), typeof(BarMessage).GetFullName());\n        }\n\n\n        public class BusSettings\n        {\n            public Uri Outbound { get; set; }\n            public Uri Downstream { get; set; }\n            public Uri Upstream { get; set; }\n        }\n\n        public class FooMessage{}\n        public class BarMessage{}\n    }\n\n\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/TestEnvelopeContext.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Dates;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    public class TestEnvelopeContext : EnvelopeContext\n    {\n        public TestEnvelopeContext() : this(MockRepository.GenerateMock<IHandlerPipeline>())\n        {\n            HandlerPipeline.Stub(x => x.Invoke(null, null)).IgnoreArguments().Return(Task.CompletedTask);\n        }\n\n        public TestEnvelopeContext(IHandlerPipeline handlerPipeline)\n            : base(\n                new RecordingLogger(), new SettableClock(), MockRepository.GenerateMock<IChainInvoker>(),\n                new RecordingEnvelopeSender(), handlerPipeline)\n        {\n            SystemTime.As<SettableClock>().LocalNow(DateTime.Today.AddHours(5));\n\n            HandlerPipeline = handlerPipeline;\n        }\n\n        public IHandlerPipeline HandlerPipeline { get; set; }\n\n        public RecordingEnvelopeSender RecordedOutgoing => Outgoing.As<RecordingEnvelopeSender>();\n\n        public RecordingLogger RecordedLogs => logger.As<RecordingLogger>();\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/TestSupport/MessageHistory_Record_Tracking_Tester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.Services.Messaging.Tracking;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus.TestSupport\n{\n    [TestFixture]\n    public class MessageHistory_Record_Tracking_Tester\n    {\n        [Test]\n        public void handle_chain_started()\n        {\n            MessageHistory.ClearHistory();\n\n            var @event = new ChainExecutionStarted\n            {\n                ChainId = Guid.NewGuid(), Envelope = new EnvelopeToken()\n            };\n\n\n            var sent = @event.ToMessageTrack();\n            sent.Id.ShouldBe(@event.Envelope.CorrelationId);\n            sent.Description.ShouldBe(@event.ToString());\n            sent.Type.ShouldBe(MessageLogRecord.MessageTrackType);\n        }\n\n        [Test]\n        public void handle_chain_finished()\n        {\n            MessageHistory.ClearHistory();\n\n            var @event = new ChainExecutionStarted\n            {\n                ChainId = Guid.NewGuid(),\n                Envelope = new EnvelopeToken()\n            };\n\n            var finished = new ChainExecutionFinished\n            {\n                ChainId = @event.ChainId,\n                Envelope = @event.Envelope\n            };\n\n            var received = finished.ToMessageTrack();\n            received.Id.ShouldBe(@event.Envelope.CorrelationId);\n            received.Description.ShouldBe(finished.ToString());\n            received.Type.ShouldBe(MessageLogRecord.MessageTrackType);\n\n            MessageHistory.Outstanding().Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void handle_envelope_sent_then_message_successful_tracking_for_the_same_message_to_multiple_nodes()\n        {\n            MessageHistory.ClearHistory();\n\n            var envelope1 = new EnvelopeToken();\n            var node1 = new StubChannelNode();\n            var node2 = new StubChannelNode();\n\n            MessageHistory.Record(new EnvelopeSent(envelope1, node1).ToMessageTrack());\n            MessageHistory.Record(new EnvelopeSent(envelope1, node2).ToMessageTrack());\n\n            MessageHistory.Outstanding().Count().ShouldBe(2);\n\n            envelope1.Destination = node1.Uri;\n\n\n            MessageHistory.Record(new MessageSuccessful\n            {\n                Envelope = envelope1\n            }.ToMessageTrack());\n\n\n            MessageHistory.Outstanding().Count().ShouldBe(1);\n\n            envelope1.Destination = node2.Uri;\n\n            MessageHistory.Record(new MessageSuccessful\n            {\n                Envelope = envelope1\n            }.ToMessageTrack());\n\n            MessageHistory.Outstanding().Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void handle_envelope_sent_then_message_successful_for_multiple_messages_to_the_same_node()\n        {\n            MessageHistory.ClearHistory();\n\n            var envelope1 = new EnvelopeToken();\n            var envelope2 = new EnvelopeToken();\n            var node1 = new StubChannelNode();\n\n\n            MessageHistory.Record(new EnvelopeSent(envelope1, node1).ToMessageTrack());\n            MessageHistory.Record(new EnvelopeSent(envelope2, node1).ToMessageTrack());\n\n            MessageHistory.Outstanding().Count().ShouldBe(2);\n\n            envelope1.Destination = node1.Uri;\n\n            MessageHistory.Record(new MessageSuccessful\n            {\n                Envelope = envelope1\n            }.ToMessageTrack());\n\n\n            MessageHistory.Outstanding().Count().ShouldBe(1);\n\n            envelope2.Destination = node1.Uri;\n\n            MessageHistory.Record(new MessageSuccessful\n            {\n                Envelope = envelope2\n            }.ToMessageTrack());\n\n            MessageHistory.Outstanding().Any().ShouldBeFalse();\n        }\n\n\n\n        [Test]\n        public void handle_envelope_sent_then_message_failed_tracking_for_the_same_message_to_multiple_nodes()\n        {\n            MessageHistory.ClearHistory();\n\n            var envelope1 = new EnvelopeToken();\n            var node1 = new StubChannelNode();\n            var node2 = new StubChannelNode();\n\n\n            \n\n            MessageHistory.Record(new EnvelopeSent(envelope1, node1));\n            MessageHistory.Record(new EnvelopeSent(envelope1, node2));\n\n            MessageHistory.Outstanding().Count().ShouldBe(2);\n\n            envelope1.Destination = node1.Uri;\n            MessageHistory.Record(new MessageFailed\n            {\n                Envelope = envelope1\n            });\n\n            MessageHistory.Outstanding().Count().ShouldBe(1);\n\n            envelope1.Destination = node2.Uri;\n            MessageHistory.Record(new MessageFailed\n            {\n                Envelope = envelope1\n            });\n\n            MessageHistory.Outstanding().Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void handle_envelope_sent_then_message_failed_for_multiple_messages_to_the_same_node()\n        {\n            MessageHistory.ClearHistory();\n\n            var envelope1 = new EnvelopeToken();\n            var envelope2 = new EnvelopeToken();\n            var node1 = new StubChannelNode();\n\n            MessageHistory.Record(new EnvelopeSent(envelope1, node1));\n            MessageHistory.Record(new EnvelopeSent(envelope2, node1));\n\n            MessageHistory.Outstanding().Count().ShouldBe(2);\n\n            envelope1.Destination = node1.Uri;\n            MessageHistory.Record(new MessageFailed\n            {\n                Envelope = envelope1\n            });\n\n            MessageHistory.Outstanding().Count().ShouldBe(1);\n\n            envelope2.Destination = node1.Uri;\n            MessageHistory.Record(new MessageFailed\n            {\n                Envelope = envelope2\n            });\n\n            MessageHistory.Outstanding().Any().ShouldBeFalse();\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/TestingSupportClasses.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.ServiceBus.Events;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n\n    public class StubListener<T> : IListener<T>\n    {\n        public T LastMessage { get; set; }\n\n        #region IListener<T> Members\n\n        public void Handle(T message)\n        {\n            LastMessage = message;\n        }\n\n        #endregion\n    }\n\n    public class ErrorCausingHandler : IListener<Message1>\n    {\n        public void Handle(Message1 message)\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n\n    public class ExpiringListener : IExpiringListener\n    {\n        public bool IsExpired { get; set; }\n        public DateTime? ExpiresAt { get; set; }\n    }\n\n    public class TaskHandler\n    {\n        public Task AsyncHandle(Message1 message)\n        {\n            return null;\n        }\n\n        public Task<Message2> AsyncReturn(Message1 message)\n        {\n            return null;\n        }\n    }\n\n    public class Message1\n    {\n    }\n\n    public class Message2\n    {\n    }\n\n    public class Message3\n    {\n    }\n\n    public class Message4\n    {\n    }\n\n    public class Message5\n    {\n    }\n\n    public class Message6\n    {\n    }\n\n    public interface IMessageHandler1\n    {\n        void HandleMessage(Message1 message);\n    }\n\n    public interface IMessageHandler2\n    {\n        void HandleMessage(Message2 message);\n    }\n\n\n    public class StubMessage1Handler : IListener<Message1>\n    {\n        public Message1 Message { get; set; }\n\n        #region IListener<Message1> Members\n\n        public void Handle(Message1 message)\n        {\n            Message = message;\n        }\n\n        #endregion\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/TimeoutRunnerTester.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    [TestFixture, Explicit(\"Flaky from the command line\")]\n    public class TimeoutRunnerTester\n    {\n        [Test]\n        public void run_happy_path()\n        {\n            bool wasCalled = false;\n\n            TimeoutRunner.Run(1.Seconds(), () => wasCalled = true, e => {\n                throw e;\n            }).ShouldBe(Completion.Success);\n\n            wasCalled.ShouldBeTrue();\n        }\n\n        [Test]\n        public void run_exception_case()\n        {\n            var ex = new FubuException(400, \"Bad!\");\n\n            var handler = MockRepository.GenerateMock<Action<Exception>>();\n\n            TimeoutRunner.Run(1.Seconds(), () => {\n                throw ex;   \n            },\n                handler).ShouldBe(Completion.Exception);\n        }\n\n        [Test]\n        public void run_timeout()\n        {\n            TimeoutRunner.Run(1.Seconds(), () => Thread.Sleep(2.Seconds()), ex => Assert.Fail(\"should be no exception\"))\n                .ShouldBe(Completion.Timedout);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/TransportActivatorTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    [TestFixture]\n    public class when_activating_the_transport_subsystem : InteractionContext<TransportActivator>\n    {\n        private ChannelGraph theGraph;\n\n        protected override void beforeEach()\n        {\n            theGraph = MockRepository.GenerateMock<ChannelGraph>();\n\n            Services.Inject(theGraph);\n            Services.PartialMockTheClassUnderTest();\n\n             ClassUnderTest.Stub(x => x.OpenChannels());\n            ClassUnderTest.Stub(x => x.ExecuteActivators());\n\n            ClassUnderTest.Activate(new ActivationLog(), null);\n        }\n\n        [Test]\n        public void reads_the_settings()\n        {\n            theGraph.AssertWasCalled(x => x.ReadSettings(MockFor<IServiceLocator>()));\n        }\n\n        [Test]\n        public void should_start_the_channels()\n        {\n            ClassUnderTest.AssertWasCalled(x => x.OpenChannels());\n        }\n\n        [Test]\n        public void should_start_receiving()\n        {\n            theGraph.AssertWasCalled(x => x.StartReceiving(MockFor<IHandlerPipeline>(), MockFor<ILogger>()));\n        }\n\n        [Test]\n        public void should_invoke_activators()\n        {\n            ClassUnderTest.AssertWasCalled(x => x.ExecuteActivators());\n        }\n    }\n\n    [TestFixture]\n    public class when_starting_the_subscriptions : InteractionContext<TransportActivator>\n    {\n        private ChannelGraph theGraph;\n        private ITransport[] theTransports;\n\n        protected override void beforeEach()\n        {\n            theGraph = new ChannelGraph();\n            Services.Inject(theGraph);\n            theTransports = Services.CreateMockArrayFor<ITransport>(5);\n\n            ClassUnderTest.OpenChannels();\n        }\n\n\n        [Test]\n        public void starts_each_transport()\n        {\n            theTransports.Each(transport => transport.AssertWasCalled(x => x.OpenChannels(theGraph)));\n        }\n    }\n\n    [TestFixture]\n    public class when_starting_the_subscriptions_and_there_are_unknown_channels\n    {\n        [Test]\n        public void should_throw_an_exception_listing_the_channels_that_are_missing()\n        {\n            var graph = new ChannelGraph();\n            graph.Add(new ChannelNode\n            {\n                Key = \"Foo:1\",\n                Uri = \"foo://1\".ToUri()\n            });\n\n            graph.Add(new ChannelNode\n            {\n                Key = \"Foo:2\",\n                Uri = \"foo://2\".ToUri()\n            });\n\n            var subscriptions = new TransportActivator(graph, null, null, new RecordingLogger(), \n                new ITransport[] {new InMemoryTransport()},\n                Enumerable.Empty<IFubuTransportActivator>());\n\n\n            Exception<InvalidOrMissingTransportException>.ShouldBeThrownBy(subscriptions.OpenChannels);\n        }\n    }\n\n    [TestFixture]\n    public class when_starting_the_subscriptions_and_there_are_activators :\n        InteractionContext<TransportActivator>\n    {\n        private IFubuTransportActivator[] theActivators;\n\n        protected override void beforeEach()\n        {\n            theActivators = Services.CreateMockArrayFor<IFubuTransportActivator>(5);\n            ClassUnderTest.ExecuteActivators();\n        }\n\n        [Test]\n        public void invokes_each_activator()\n        {\n            theActivators.Each(activator => activator.AssertWasCalled(x => x.Activate()));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/TransportSettingsTester.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    [TestFixture]\n    public class TransportSettingsTester\n    {\n        [Test]\n        public void debug_is_disabled_by_default()\n        {\n            new TransportSettings().DebugEnabled.ShouldBeFalse();\n        }\n\n        [Test]\n        public void the_default_delayed_message_polling_is_5_seconds()\n        {\n            new TransportSettings().DelayMessagePolling.ShouldBe(5000);\n        }\n\n        [Test]\n        public void in_memory_transport_is_disabled_by_default()\n        {\n            new TransportSettings().InMemoryTransport.ShouldBe(InMemoryTransportMode.Disabled);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/TypeExtensionsTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    [TestFixture]\n    public class TypeExtensionsTester\n    {\n        [Test]\n        public void has_property_returns_true_if_property_exists()\n        {\n            typeof(TestSaga).HasProperty(\"CorrelationId\").ShouldBeTrue();\n        }\n\n        [Test]\n        public void has_property_returns_false_if_property_does_not_exists()\n        {\n            typeof(TestSaga).HasProperty(\"State\").ShouldBeFalse();\n        }\n\n        [Test]\n        public void simple_types_do_not_throw()\n        {\n            typeof(int).HasProperty(\"Blah\").ShouldBeFalse();\n        }\n    }\n\n    public class TestSaga\n    {\n        public Guid CorrelationId { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/can_establish_a_control_queue.cs",
    "content": "﻿using FubuMVC.Core.Security.Authentication.Saml2.Xml;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    [TestFixture]\n    public class can_establish_a_control_queue\n    {\n        [Test]\n        public void configure_a_control_queue()\n        {\n            var registry = new ControlQueueRegistry();\n\n            using (var runtime = registry.ToRuntime())\n            {\n                var graph = runtime.Get<ChannelGraph>();\n\n                graph.ControlChannel.Uri.ShouldBe(\"memory://2\".ToUri());\n\n                graph.ChannelFor<BusSettings>(x => x.Upstream)\n                    .Incoming.ShouldBeTrue();\n            }\n\n\n        }\n\n        public class ControlQueueRegistry : FubuTransportRegistry<BusSettings>\n        {\n            public ControlQueueRegistry()\n            {\n                AlterSettings<BusSettings>(x =>\n                {\n                    x.Downstream = \"memory://1\".ToUri();\n                    x.Upstream = \"memory://2\".ToUri();\n                });\n\n                Channel(x => x.Downstream).ReadIncoming();\n                Channel(x => x.Upstream).UseAsControlChannel();\n\n                ServiceBus.EnableInMemoryTransport();\n                \n\n                Mode = \"Testing\";\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/ServiceBus/envelope_handlers_are_registered_in_the_right_order.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.ServiceBus\n{\n    [TestFixture]\n    public class envelope_handlers_are_registered_in_the_right_order\n    {\n        [Test]\n        public void the_order()\n        {\n            using (var runtime = FubuRuntime.For<Defaults>())\n            {\n                var handlers = runtime.Get<IHandlerPipeline>().ShouldBeOfType<HandlerPipeline>().Handlers;\n\n\n                handlers[0].ShouldBeOfType<DelayedEnvelopeHandler>();\n                handlers[1].ShouldBeOfType<ResponseEnvelopeHandler>();\n                handlers[2].ShouldBeOfType<ChainExecutionEnvelopeHandler>();\n                handlers[3].ShouldBeOfType<NoSubscriberHandler>();\n            }\n        }\n\n        public class Defaults : FubuRegistry\n        {\n            public Defaults()\n            {\n                ServiceBus.Enable(true);\n                ServiceBus.EnableInMemoryTransport();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Services/ApplicationLoaderFinderTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Services;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Services\n{\n    [TestFixture]\n    public class ApplicationLoaderFinderTester\n    {\n        [Test]\n        public void concrete_type_of_application_loader_with_default_ctor_is_a_candidate()\n        {\n            ApplicationLoaderFinder.IsLoaderTypeCandidate(typeof (FakeApplicationLoader))\n                .ShouldBeTrue();\n        }\n\n        [Test]\n        public void application_loader_is_not_candidate_if_abstract()\n        {\n            ApplicationLoaderFinder.IsLoaderTypeCandidate(typeof (AbstractApplicationLoader))\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void application_loader_is_not_candidate_if_no_default_ctor()\n        {\n            ApplicationLoaderFinder.IsLoaderTypeCandidate(typeof (TemplatedApplicationLoader))\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void application_source_with_default_ctor_and_concrete_is_candidate()\n        {\n            ApplicationLoaderFinder.IsLoaderTypeCandidate(typeof (GoodApplicationSource))\n                .ShouldBeTrue();\n        }\n\n        [Test]\n        public void application_source_with_no_default_ctor_is_not_candidate()\n        {\n            ApplicationLoaderFinder.IsLoaderTypeCandidate(typeof (AbstractApplicationSource))\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void application_source_without_default_ctor_is_not_a_candidate()\n        {\n            ApplicationLoaderFinder.IsLoaderTypeCandidate(typeof (TemplatedApplicationSource))\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void build_application_loader_for_application_loader_type()\n        {\n            ApplicationLoaderFinder.BuildApplicationLoader(typeof (FakeApplicationLoader))\n                .ShouldBeOfType<FakeApplicationLoader>();\n        }\n\n        [Test]\n        public void building_an_activation_loader_for_a_bad_type_thows()\n        {\n            Exception<ArgumentOutOfRangeException>.ShouldBeThrownBy(\n                () => { ApplicationLoaderFinder.BuildApplicationLoader(GetType()); });\n        }\n\n        [Test]\n        public void find_loader_types()\n        {\n            var types = ApplicationLoaderFinder.FindLoaderTypes();\n            types.ShouldContain(typeof (GoodApplicationSource));\n            types.ShouldContain(typeof (FakeApplicationLoader));\n        }\n\n        [Test]\n        public void finds_bootstrapper_by_name()\n        {\n            ApplicationLoaderFinder.FindLoader(typeof (FakeApplicationLoader).AssemblyQualifiedName)\n                .ShouldBeOfType<FakeApplicationLoader>();\n        }\n\n        [Test]\n        public void blows_up_if_more_than_one_application_source()\n        {\n            Exception<Exception>.ShouldBeThrownBy(() => { ApplicationLoaderFinder.FindLoader(null); })\n                .Message.ShouldContain(\n                    \"Found multiple candidates, you may need to specify an explicit selection in the bottle-service.config file.\");\n        }\n\n        [Test]\n        public void determine_loader_for_fuburegistry()\n        {\n            ApplicationLoaderFinder.DetermineLoaderType(typeof(StandinFubuRegistry))\n                .ShouldBe(typeof(FubuRegistryLoader<StandinFubuRegistry>));\n        }\n\n        [Test]\n        public void build_loader_for_fuburegistry()\n        {\n            ApplicationLoaderFinder.BuildApplicationLoader(typeof (StandinFubuRegistry))\n                .ShouldBeOfType<FubuRegistryLoader<StandinFubuRegistry>>();\n        }\n    }\n\n    public class StandinFubuRegistry : FubuRegistry { }\n\n    public class TemplatedApplicationLoader : IApplicationLoader\n    {\n        public TemplatedApplicationLoader(string name)\n        {\n        }\n\n        public IDisposable Load(Dictionary<string, string> properties)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public abstract class AbstractApplicationLoader : IApplicationLoader\n    {\n        public IDisposable Load(Dictionary<string, string> properties)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public class FakeApplicationLoader : IApplicationLoader\n    {\n        public IDisposable Load(Dictionary<string, string> properties)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public class Application : FubuRegistry\n    {\n        public IDisposable Bootstrap()\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public class GoodApplicationSource : FubuRegistry\n    {\n        public Application BuildApplication(string directory)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public abstract class AbstractApplicationSource : FubuRegistry\n    {\n        public Application BuildApplication(string directory)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public class TemplatedApplicationSource : FubuRegistry\n    {\n        public TemplatedApplicationSource(string name)\n        {\n        }\n\n        public Application BuildApplication(string directory)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Services/Messaging/EventAggregatorTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Services.Messaging;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Services.Messaging\n{\n    [TestFixture]\n    public class EventAggregatorTester\n    {\n        private RecordingListener theListener;\n\n        [TearDown]\n        public void Teardown()\n        {\n            GlobalMessageTracking.Stop();\n        }\n\n        [SetUp]\n        public void SetUp()\n        {\n            theListener = new RecordingListener();\n            var hub = new MessagingHub();\n            hub.AddListener(theListener);\n\n            var remoteListener = new RemoteListener(hub);\n            GlobalMessageTracking.Start(remoteListener);\n        }\n\n        [Test]\n        public void send_message_by_category()\n        {\n            GlobalMessageTracking.SendMessage(\"category1\", \"some message\");\n\n            var expected = new ServiceMessage\n            {\n                Category = \"category1\", Message = \"some message\"\n            };\n\n            Wait.Until(() => theListener.Received.Contains(expected));\n\n            theListener.Received.OfType<ServiceMessage>().Single()\n                       .ShouldBe(expected);\n\n        }\n    }\n\n    public class RecordingListener : IListener\n    {\n        private readonly IList<object> _received = new List<object>();\n\n        public IEnumerable<object> Received\n        {\n            get { return _received; }\n        }\n\n        public void Clear()\n        {\n            _received.Clear();\n        }\n\n        public void Receive<T>(T message)\n        {\n            _received.Add(message);\n        }\n\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Services/Messaging/MessageWaitConditionTester.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Services.Messaging;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Services.Messaging\n{\n    [TestFixture]\n    public class MessageWaitConditionTester\n    {\n        [Test]\n        public void watches_for_the_right_message()\n        {\n            var m1 = new Message();\n            var m2 = new Message();\n            var m3 = new Message();\n            var m4 = new Message();\n\n            var condition = new MessageWaitCondition<Message>(x => x == m4);\n\n            condition.Receive(m1);\n            condition.Received.ShouldBeNull();\n\n            condition.Receive(m2);\n            condition.Received.ShouldBeNull();\n\n            condition.Receive(m3);\n            condition.Received.ShouldBeNull();\n        \n            condition.Receive(m4);\n            condition.Received.ShouldBeTheSameAs(m4);\n        }\n\n        [Test]\n        public void wait_lasts_until_we_get_it()\n        {\n            var m1 = new Message();\n            var m2 = new Message();\n            var m3 = new Message();\n            var m4 = new Message();\n\n            var condition = new MessageWaitCondition<Message>(x => x == m4);\n\n            Task.Factory.StartNew(() => {\n                Thread.Sleep(100);\n                condition.Receive(m1);\n                Thread.Sleep(100);\n                condition.Receive(m2);\n                Thread.Sleep(100);\n                condition.Receive(m3);\n                Thread.Sleep(100);\n                condition.Receive(m4);\n\n            });\n\n            condition.Wait().ShouldBeTheSameAs(m4);\n\n        }\n\n        public class Message\n        {\n            \n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Services/Messaging/MessagingHubTester.cs",
    "content": "﻿using FubuMVC.Core.Services;\nusing FubuMVC.Core.Services.Messaging;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Services.Messaging\n{\n    [TestFixture]\n    public class MessagingHubTester\n    {\n        private MessagingHub theHub;\n        private IListener listener1;\n        private IListener listener2;\n        private IListener listener3;\n        private IListener<Message1> listener4;\n        private IListener<Message1> listener5;\n        private IListener<Message1> listener6;\n        private IListener<Message2> listener7;\n        private IListener<Message2> listener8;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theHub = new MessagingHub();\n\n            listener1 = createListener();\n            listener2 = createListener();\n            listener3 = createListener();\n\n            listener4 = createListener<Message1>();\n            listener5 = createListener<Message1>();\n            listener6 = createListener<Message1>();\n            listener7 = createListener<Message2>();\n            listener8 = createListener<Message2>();\n        }\n\n        private IListener createListener()\n        {\n            var listener = MockRepository.GenerateMock<IListener>();\n            theHub.AddListener(listener);\n\n            return listener;\n        }\n\n        private IListener<T> createListener<T>()\n        {\n            var listener = MockRepository.GenerateMock<IListener<T>>();\n            theHub.AddListener(listener);\n\n            return listener;\n        }\n\n        [Test]\n        public void send_a_message_to_generic_listeners()\n        {\n            var message = new Message1 {Name = \"this one\"};\n\n            theHub.Send(message);\n\n            listener1.AssertWasCalled(x => x.Receive(message));\n            listener2.AssertWasCalled(x => x.Receive(message));\n            listener3.AssertWasCalled(x => x.Receive(message));\n\n        }\n\n        [Test]\n        public void send_a_message_to_all_listeners_for_that_specific_message()\n        {\n            var message = new Message1 { Name = \"this one\" };\n\n            theHub.Send(message);\n\n            listener4.AssertWasCalled(x => x.Receive(message));\n            listener5.AssertWasCalled(x => x.Receive(message));\n            listener6.AssertWasCalled(x => x.Receive(message));\n        }\n\n        [Test]\n        public void send_a_message_to_all_listeners_2()\n        {\n            var message = new Message2 { Name = \"that one\" };\n\n            theHub.Send(message);\n\n            listener1.AssertWasCalled(x => x.Receive(message));\n            listener2.AssertWasCalled(x => x.Receive(message));\n            listener3.AssertWasCalled(x => x.Receive(message));\n            \n            listener7.AssertWasCalled(x => x.Receive(message));\n            listener8.AssertWasCalled(x => x.Receive(message));\n        }\n\n        [Test]\n        public void send_json_message()\n        {\n            var message = new Message2 { Name = \"that one\" };\n\n\n            var json = JsonSerialization.ToJson(message);\n            theHub.SendJson(json);\n\n            listener1.AssertWasCalled(x => x.Receive(message));\n            listener2.AssertWasCalled(x => x.Receive(message));\n            listener3.AssertWasCalled(x => x.Receive(message));\n\n            listener7.AssertWasCalled(x => x.Receive(message));\n            listener8.AssertWasCalled(x => x.Receive(message));\n        }\n    }\n\n    public class Message1\n    {\n        public string Name { get; set; }\n\n        protected bool Equals(Message1 other)\n        {\n            return string.Equals(Name, other.Name);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((Message1) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Name != null ? Name.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Name: {0}\", Name);\n        }\n    }\n\n    public class Message2\n    {\n        public string Name { get; set; }\n\n        protected bool Equals(Message2 other)\n        {\n            return string.Equals(Name, other.Name);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((Message2) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Name != null ? Name.GetHashCode() : 0);\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Name: {0}\", Name);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Services/Messaging/RemoteListenerTester.cs",
    "content": "﻿using System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Services.Messaging;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Services.Messaging\n{\n    [TestFixture]\n    public class RemoteListenerTester\n    {\n        [Test]\n        public void can_wait_for_a_condition()\n        {\n            var hub = new MessagingHub();\n            var listener = new RemoteListener(hub);\n\n            var m1 = new Message(){Number = 1};\n            var m2 = new Message() { Number = 2 };\n            var m3 = new Message() { Number = 3 };\n            var m4 = new Message() { Number = 4 };\n\n            var result = listener.WaitForMessage<Message>(m => m.Number == 4, () => {\n                Task.Factory.StartNew(() =>\n                {\n                    Thread.Sleep(100);\n                    listener.SendObject(m1);\n                    Thread.Sleep(100);\n                    listener.SendObject(m2);\n                    Thread.Sleep(100);\n                    listener.SendObject(m3);\n                    Thread.Sleep(100);\n                    listener.SendObject(m4);\n                });\n            });\n\n            result.ShouldBe(m4);\n            hub.Listeners.Any().ShouldBeFalse(); // want it to remove the condition as it goes\n        }\n\n        public class Message\n        {\n            public int Number { get; set; }\n\n            protected bool Equals(Message other)\n            {\n                return Number == other.Number;\n            }\n\n            public override bool Equals(object obj)\n            {\n                if (ReferenceEquals(null, obj)) return false;\n                if (ReferenceEquals(this, obj)) return true;\n                if (obj.GetType() != this.GetType()) return false;\n                return Equals((Message) obj);\n            }\n\n            public override int GetHashCode()\n            {\n                return Number;\n            }\n\n            public override string ToString()\n            {\n                return string.Format(\"Number: {0}\", Number);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Services/Messaging/Tracking/MessageHistoryTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuMVC.Core.Services.Messaging;\nusing FubuMVC.Core.Services.Messaging.Tracking;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Services.Messaging.Tracking\n{\n    [TestFixture]\n    public class MessageHistoryTester\n    {\n        private IListener<AllMessagesComplete> listener;\n\n        [SetUp]\n        public void SetUp()\n        {\n            MessageHistory.ClearAll();\n\n            listener = MockRepository.GenerateMock<IListener<AllMessagesComplete>>();\n            GlobalMessageTracking.Messaging.AddListener(listener);\n\n        }\n\n        [TearDown]\n        public void TearDown()\n        {\n            GlobalMessageTracking.Messaging.RemoveListener(listener);\n        }\n\n        private void assertHasNotReceivedAllCompleteMessage()\n        {\n            listener.AssertWasNotCalled(x => x.Receive(null), x => x.IgnoreArguments());\n        }\n\n        private void assertAllCompleteMessage()\n        {\n            listener.AssertWasCalled(x => x.Receive(null), x => x.IgnoreArguments());\n        }\n\n        [Test]\n        public void track_outstanding()\n        {\n            var foo1 = new Foo();\n            var foo2 = new Foo();\n            var foo3 = new Foo();\n\n           MessageHistory.Record(MessageTrack.ForSent(foo1));\n           MessageHistory.Record(MessageTrack.ForSent(foo2));\n           MessageHistory.Record(MessageTrack.ForSent(foo3));\n\n            MessageHistory.Outstanding().Select(x => x.Id)\n                .ShouldHaveTheSameElementsAs(foo1.Id.ToString(), foo2.Id.ToString(), foo3.Id.ToString());\n\n            MessageHistory.Record(MessageTrack.ForReceived(foo2));\n\n            MessageHistory.Outstanding().Select(x => x.Id)\n                .ShouldHaveTheSameElementsAs(foo1.Id.ToString(), foo3.Id.ToString());\n\n            MessageHistory.Record(MessageTrack.ForReceived(foo3));\n\n            MessageHistory.Outstanding().Select(x => x.Id)\n                .ShouldHaveTheSameElementsAs(foo1.Id.ToString());\n\n            \n        }\n\n        [Test]\n        public void finish_successfully_with_MessageHistory_WaitForWorkToFinish_positive()\n        {\n            var foo1 = new Foo();\n            var foo2 = new Foo();\n            var foo3 = new Foo();\n\n            MessageHistory.WaitForWorkToFinish(() => {\n                MessageHistory.Record(MessageTrack.ForSent(foo1));\n                MessageHistory.Record(MessageTrack.ForSent(foo2));\n                MessageHistory.Record(MessageTrack.ForSent(foo3));\n\n                MessageHistory.Record(MessageTrack.ForReceived(foo1));\n                MessageHistory.Record(MessageTrack.ForReceived(foo2));\n                MessageHistory.Record(MessageTrack.ForReceived(foo3));\n            }).ShouldBeTrue();\n        }\n\n        [Test]\n        public void timeout_unsuccessful_with_MessageHistory_WaitForWorkToFinish_positive()\n        {\n            var foo1 = new Foo();\n            var foo2 = new Foo();\n            var foo3 = new Foo();\n\n            MessageHistory.WaitForWorkToFinish(() =>\n            {\n                MessageHistory.Record(MessageTrack.ForSent(foo1));\n                MessageHistory.Record(MessageTrack.ForSent(foo2));\n                MessageHistory.Record(MessageTrack.ForSent(foo3));\n\n                MessageHistory.Record(MessageTrack.ForReceived(foo1));\n                MessageHistory.Record(MessageTrack.ForReceived(foo2));\n                //MessageHistory.Record(MessageTrack.ForReceived(foo3));\n            }).ShouldBeFalse();\n        }\n\n        [Test]\n        public void track_received()\n        {\n            var foo1 = new Foo();\n            var foo2 = new Foo();\n            var foo3 = new Foo();\n\n            MessageHistory.Record(MessageTrack.ForReceived(foo1));\n            MessageHistory.Record(MessageTrack.ForReceived(foo2));\n            MessageHistory.Record(MessageTrack.ForReceived(foo3));\n\n            MessageHistory.Received().Select(x => x.Id)\n                .ShouldHaveTheSameElementsAs(foo1.Id.ToString(), foo2.Id.ToString(), foo3.Id.ToString());\n\n        }\n\n        [Test]\n        public void clear_all_absolutely_has_to_work()\n        {\n            var foo1 = new Foo();\n            var foo2 = new Foo();\n            var foo3 = new Foo();\n\n            MessageHistory.Record(MessageTrack.ForReceived(foo1));\n            MessageHistory.Record(MessageTrack.ForReceived(foo2));\n            MessageHistory.Record(MessageTrack.ForReceived(foo3));\n\n            MessageHistory.Record(MessageTrack.ForSent(foo1));\n            MessageHistory.Record(MessageTrack.ForSent(foo2));\n            MessageHistory.Record(MessageTrack.ForSent(foo3));\n\n            MessageHistory.ClearAll();\n\n            MessageHistory.Outstanding().Any().ShouldBeFalse();\n            MessageHistory.Received().Any().ShouldBeFalse();\n            MessageHistory.All().Any().ShouldBeFalse();\n            \n        }\n\n        [Test]\n        public void sends_the_all_clear_message_when_it_gets_everything()\n        {\n            var foo1 = new Foo();\n            var foo2 = new Foo();\n            var foo3 = new Foo();\n\n            MessageHistory.Record(MessageTrack.ForSent(foo1));\n            MessageHistory.Record(MessageTrack.ForSent(foo2));\n            MessageHistory.Record(MessageTrack.ForSent(foo3));\n\n            assertHasNotReceivedAllCompleteMessage();\n\n            MessageHistory.Record(MessageTrack.ForReceived(foo1));\n            assertHasNotReceivedAllCompleteMessage();\n\n            MessageHistory.Record(MessageTrack.ForReceived(foo2));\n            assertHasNotReceivedAllCompleteMessage();\n            \n            MessageHistory.Record(MessageTrack.ForReceived(foo3));\n            assertAllCompleteMessage();\n        }\n\n        [Test]\n        public void clear_history_removes_all()\n        {\n            var foo1 = new Foo();\n            var foo2 = new Foo();\n            var foo3 = new Foo();\n\n            MessageHistory.Record(MessageTrack.ForReceived(foo1));\n            MessageHistory.Record(MessageTrack.ForReceived(foo2));\n            MessageHistory.Record(MessageTrack.ForReceived(foo3));\n\n            MessageHistory.Record(MessageTrack.ForSent(foo1));\n            MessageHistory.Record(MessageTrack.ForSent(foo2));\n            MessageHistory.Record(MessageTrack.ForSent(foo3));\n\n            MessageHistory.ClearHistory();\n\n            MessageHistory.Outstanding().Any().ShouldBeFalse();\n            MessageHistory.Received().Any().ShouldBeFalse();\n            MessageHistory.All().Any().ShouldBeFalse();\n        }\n    }\n\n    public class Foo\n    {\n        public Foo()\n        {\n            Id = Guid.NewGuid();\n        }\n\n        public Guid Id { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Services/Messaging/Tracking/MessageSentTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Services.Messaging.Tracking;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Services.Messaging.Tracking\n{\n    [TestFixture]\n    public class MessageSentTester\n    {\n        [Test]\n        public void record_sent_message()\n        {\n            var message = new MyMessage\n            {\n                Id = Guid.NewGuid(),\n                Name = \"Jeremy\"\n            };\n\n            var sent = MessageTrack.ForSent(message);\n\n            sent.FullName.ShouldBe(typeof (MyMessage).FullName);\n            sent.Type.ShouldBe(typeof (MyMessage).Name);\n            sent.Description.ShouldBe(message.ToString());\n            sent.Id.ShouldBe(message.Id.ToString());\n            sent.Status.ShouldBe(MessageTrack.Sent);\n        }\n\n        [Test]\n        public void record_sent_message_with_id()\n        {\n            var message = new MyMessage\n            {\n                Id = Guid.NewGuid(),\n                Name = \"Jeremy\"\n            };\n\n            var sent = MessageTrack.ForSent(message, \"foo\");\n\n            sent.FullName.ShouldBe(typeof(MyMessage).FullName);\n            sent.Type.ShouldBe(typeof(MyMessage).Name);\n            sent.Description.ShouldBe(message.ToString());\n            sent.Id.ShouldBe(\"foo\");\n            sent.Status.ShouldBe(MessageTrack.Sent);\n        }\n\n        [Test]\n        public void record_received_message()\n        {\n            var message = new MyMessage\n            {\n                Id = Guid.NewGuid(),\n                Name = \"Jeremy\"\n            };\n\n            var sent = MessageTrack.ForReceived(message);\n\n            sent.FullName.ShouldBe(typeof(MyMessage).FullName);\n            sent.Type.ShouldBe(typeof(MyMessage).Name);\n            sent.Description.ShouldBe(message.ToString());\n            sent.Id.ShouldBe(message.Id.ToString());\n            sent.Status.ShouldBe(MessageTrack.Received);\n        }\n\n        [Test]\n        public void record_received_message_with_explicit_id()\n        {\n            var message = new MyMessage\n            {\n                Id = Guid.NewGuid(),\n                Name = \"Jeremy\"\n            };\n\n            var sent = MessageTrack.ForReceived(message, \"bar\");\n\n            sent.FullName.ShouldBe(typeof(MyMessage).FullName);\n            sent.Type.ShouldBe(typeof(MyMessage).Name);\n            sent.Description.ShouldBe(message.ToString());\n            sent.Id.ShouldBe(\"bar\");\n            sent.Status.ShouldBe(MessageTrack.Received);\n        }\n    }\n\n    public class MyMessage\n    {\n        public string Name { get; set; }\n        public Guid Id { get; set; }\n\n        public override string ToString()\n        {\n            return string.Format(\"Name: {0}\", Name);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Services/Messaging/WaitTester.cs",
    "content": "﻿using System;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Services.Messaging\n{\n    [TestFixture]\n    public class WaitTester\n    {\n        [Test]\n        public void Wait_until_should_return_true_immediately()\n        {\n            Wait.Until(() => true)\n                .ShouldBeTrue();\n        }\n        \n        [Test]\n        public void Wait_until_should_return_false_immediately()\n        {\n            Wait.Until(() => false)\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void can_really_wait_until_the_condition_passes_in_subsequent_calls()\n        {\n            int i = 0;\n\n            Func<bool> condition = () => {\n                i++;\n                return i > 3;\n            };\n\n            Wait.Until(condition).ShouldBeTrue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Services/Remote/AssemblyRequirementTester.cs",
    "content": "﻿using FubuMVC.Core.Services.Remote;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Services.Remote\n{\n    [TestFixture]\n    public class AssemblyRequirementTester\n    {\n        [Test]\n        public void is_sem_ver_compatible()\n        {\n            AssemblyRequirement.IsSemVerCompatible(\"1.0\", \"1.1\").ShouldBeTrue();\n            AssemblyRequirement.IsSemVerCompatible(\"1.0\", \"1.2\").ShouldBeTrue();\n            AssemblyRequirement.IsSemVerCompatible(\"1.0\", \"1.3\").ShouldBeTrue();\n            AssemblyRequirement.IsSemVerCompatible(\"1.1\", \"1.3\").ShouldBeTrue();\n            AssemblyRequirement.IsSemVerCompatible(\"1.2\", \"1.3\").ShouldBeTrue();\n            AssemblyRequirement.IsSemVerCompatible(\"1.3\", \"1.3\").ShouldBeTrue();\n            AssemblyRequirement.IsSemVerCompatible(\"1.0\", \"1.4\").ShouldBeTrue();\n            AssemblyRequirement.IsSemVerCompatible(\"1.0\", \"2.0\").ShouldBeFalse();\n            AssemblyRequirement.IsSemVerCompatible(\"1.1\", \"2.0\").ShouldBeFalse();\n            AssemblyRequirement.IsSemVerCompatible(\"1.5\", \"2.0\").ShouldBeFalse();\n            AssemblyRequirement.IsSemVerCompatible(\"1.5\", \"1.4\").ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Services/Remote/BigRemoteServicesIntegrationTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Services;\nusing FubuMVC.Core.Services.Messaging;\nusing FubuMVC.Core.Services.Messaging.Tracking;\nusing FubuMVC.Core.Services.Remote;\nusing Shouldly;\nusing NUnit.Framework;\nusing SampleService;\nusing Foo = FubuMVC.Tests.Services.Messaging.Tracking.Foo;\n\nnamespace FubuMVC.Tests.Services.Remote\n{\n    [Explicit(\"Only for examples\")]\n    public class Examples\n    {\n        [Test]\n        public void loading_a_custom_application_loader()\n        {\n            // SAMPLE: bootstrap-custom-loader\n            var runner = RemoteServiceRunner.For<IApplicationLoader>(x => {\n                // more AppDomain configuration\n            });\n\n            // -- or --\n            runner = new RemoteServiceRunner(x => {\n                // Can be the assembly qualified name of either:\n                // 1. An IApplicationLoader class\n                // 2. An IApplicationSource<,> class\n                // 3. An IBootstrapper class\n                x.BootstrapperName = \"MyLib.AppLoader, MyLib\";\n            });\n            // ENDSAMPLE\n        }\n\n        [Test]\n        public void overriding_the_configuration_file()\n        {\n            // SAMPLE: override-config-file\n            var runner = new RemoteServiceRunner(x => {\n                x.Setup.ConfigurationFile = \"Web.config\";\n            });\n            // ENDSAMPLE\n        }\n\n        // SAMPLE: custom-application-loader\n        public class CustomApplicationLoader : IApplicationLoader, IDisposable\n        {\n            public IDisposable Load(Dictionary<string, string> properties)\n            {\n                // Bootstrap the application or service\n                return this;\n            }\n\n            public void Dispose()\n            {\n                // shutdown\n            }\n        }\n        // ENDSAMPLE\n\n\n        [Test]\n        public void simplest_usage()\n        {\n            // SAMPLE: simple-remote-service-runner\n            var runner = new RemoteServiceRunner(x => {\n                x.ServiceDirectory = @\"c:\\code\\other-service\\src\\other-service\";\n                x.Setup.ShadowCopyFiles = true.ToString();\n            });\n\n            // stop and restart the remote AppDomain\n            runner.Recycle();\n\n            // There is support for event aggregation between\n            // AppDomain's for coordination\n            runner.SendRemotely(new SomeMessage());\n\n            // Shut down and close the remote AppDomain\n            runner.Dispose();\n\n            // ENDSAMPLE\n\n        }\n\n        public class SomeMessage{}\n\n        [Test]\n        public void open_to_a_parallel_directory()\n        {\n            // SAMPLE: parallel-service\n            var runner = new RemoteServiceRunner(x => {\n                x.UseParallelServiceDirectory(\"Service1\");\n            });\n            // ENDSAMPLE\n        }\n\n        [Test]\n        public void control_appdomain_setup()\n        {\n            // SAMPLE: appdomain-setup\n            var runner = new RemoteServiceRunner(x => {\n\n                // ShadowCopyFiles should be either \"true\" or \"false\"\n                x.Setup.ShadowCopyFiles = true.ToString();\n\n                // RemoteServiceRunner makes some guesses about the\n                // PrivateBinPath based on the folders it sees,\n                // but once in a while you may want to override\n                // the bin path\n                x.Setup.PrivateBinPath = \"bin\";\n            });\n            // ENDSAMPLE\n        }\n\n        [Test]\n        public void load_assemblies()\n        {\n            // SAMPLE: require-assemblies\n            var runner = new RemoteServiceRunner(x => {\n                // This line will copy the MyAssembly.dll assembly to the \n                // remote path\n                x.RequireAssembly(\"MyAssembly\");\n            });\n            // ENDSAMPLE\n        }\n    }\n\n    [TestFixture, Explicit(\"These tests do not play nice on the build server\")]\n    public class BigRemoteServicesIntegrationTester\n    {\n        private RemoteServiceRunner start()\n        {\n            return new RemoteServiceRunner(x => {\n                x.LoadAssemblyContainingType<SampleService.SampleService>();\n                x.RequireAssemblyContainingType<BigRemoteServicesIntegrationTester>(); // This is mostly a smoke test\n            });\n        }\n\n        [Test]\n        public void start_with_only_the_folder_name_with_an_IActivator()\n        {\n            var servicePath = \".\".ToFullPath().ParentDirectory().ParentDirectory().ParentDirectory().AppendPath(\"SampleService\");\n            using (var runner = new RemoteServiceRunner(servicePath))\n            {\n                runner.WaitForServiceToStart<SampleService.SampleService>();\n                runner.Started.Any().ShouldBeTrue(); \n            }\n        }\n\n        [Test]\n        public void start_with_only_the_folder_name_with_an_IApplicationLoader()\n        {\n            var servicePath = \".\".ToFullPath().ParentDirectory().ParentDirectory().ParentDirectory().AppendPath(\"ApplicationLoaderService\");\n            using (var runner = new RemoteServiceRunner(servicePath))\n            {\n                runner.WaitForMessage<LoaderStarted>().LoaderTypeName.ShouldContain(\"MyApplicationLoader\");\n            }\n        }\n\n        [Test]\n        public void start_with_a_parallel_folder()\n        {\n            using (var runner = new RemoteServiceRunner(x => {\n                x.UseParallelServiceDirectory(\"ApplicationLoaderService\");\n            }))\n            {\n                runner.WaitForMessage<LoaderStarted>().LoaderTypeName.ShouldContain(\"MyApplicationLoader\");\n            }\n        }\n\n        [Test]\n        public void coordinate_message_history_via_remote_service()\n        {\n            \n\n            using (var runner = RemoteServiceRunner.For<SampleBootstrapper>())\n            {\n                runner.WaitForServiceToStart<SampleService.SampleService>();\n                runner.WaitForServiceToStart<SampleService.RemoteService>();\n\n                MessageHistory.ConnectRemoteListeners(runner);\n\n                var foo = new Foo();\n\n                GlobalMessageTracking.SentMessage(foo);\n\n\n                GlobalMessageTracking.Messaging.WaitForMessage<AllMessagesComplete>(() => runner.SendRemotely(foo), 60000)\n                                   .ShouldNotBeNull();\n\n            }\n        }\n\n        [Test]\n        public void coordinate_message_history_via_remote_service_and_clear_data_does_not_remove_listeners()\n        {\n\n            using (var runner = RemoteServiceRunner.For<SampleBootstrapper>())\n            {\n                runner.WaitForServiceToStart<SampleService.SampleService>();\n                runner.WaitForServiceToStart<SampleService.RemoteService>();\n\n                MessageHistory.ConnectRemoteListeners(runner);\n                MessageHistory.ClearHistory();\n\n                var foo = new Foo();\n\n                GlobalMessageTracking.SentMessage(foo);\n\n\n                GlobalMessageTracking.Messaging.WaitForMessage<AllMessagesComplete>(() => runner.SendRemotely(foo))\n                                   .ShouldNotBeNull();\n            }\n        }\n\n        [Test]\n        public void spin_up_the_remote_service_for_the_sample_and_send_messages_back_and_forth()\n        {\n            using (var runner = start())\n            {\n                runner.WaitForServiceToStart<SampleService.SampleService>();\n                runner.WaitForServiceToStart<SampleService.RemoteService>();\n\n                runner.Started.Any().ShouldBeTrue();\n            }\n        }\n\n        [Test]\n        public void spin_up_and_send_and_receive_messages()\n        {\n            using (var runner = start())\n            {\n                runner.WaitForServiceToStart<SampleService.RemoteService>();\n\n                runner.WaitForMessage<TestResponse>(() => {\n                    runner.SendRemotely(new TestSignal { Number = 1 });\n                }).Number.ShouldBe(1);\n\n\n                runner.WaitForMessage<TestResponse>(() =>\n                {\n                    runner.SendRemotely(new TestSignal { Number = 3 });\n                }).Number.ShouldBe(3);\n\n                runner.WaitForMessage<TestResponse>(() =>\n                {\n                    runner.SendRemotely(new TestSignal { Number = 5 });\n                }).Number.ShouldBe(5);\n\n            }\n        }\n\n        [Test]\n        public void copy_new_remote_assembly_over_old_assembly_when_copymode_always()\n        {\n            using (var runner = new RemoteServiceRunner(x =>\n            {\n                x.AssemblyCopyMode = AssemblyCopyMode.Always;\n                x.UseParallelServiceDirectory(\"ApplicationLoaderService\");\n                x.RequireAssemblyContainingType<SampleService.SampleService>();\n            }))\n            {\n                var path = \".\".ToFullPath();\n                var sampleServiceDll = path.AppendPath(\"bin/Debug/SampleService.dll\");\n\n                File.SetLastWriteTime(sampleServiceDll, new DateTime(2014, 01, 01));\n                var originalWriteTime = File.GetLastWriteTime(sampleServiceDll);\n\n                runner.Recycle();\n\n                var newWriteTime = File.GetLastWriteTime(sampleServiceDll);\n\n                newWriteTime.ShouldBeGreaterThan(originalWriteTime);\n                originalWriteTime.ShouldNotBe(newWriteTime);\n            }\n        }\n\n        [Test]\n        public void copy_assembly_once_by_default()\n        {\n            using (var runner = new RemoteServiceRunner(x =>\n            {\n                x.UseParallelServiceDirectory(\"ApplicationLoaderService\");\n                x.RequireAssemblyContainingType<SampleService.SampleService>();\n            }))\n            {\n                var path = \".\".ToFullPath();\n                var sampleServiceDll = path.AppendPath(\"bin/Debug/SampleService.dll\");\n\n                File.SetLastWriteTime(sampleServiceDll, new DateTime(2014, 01, 01));\n                var originalWriteTime = File.GetLastWriteTime(sampleServiceDll);\n\n                runner.Recycle();\n\n                var newWriteTime = File.GetLastWriteTime(sampleServiceDll);\n\n                newWriteTime.ShouldBe(originalWriteTime);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Services/Remote/RemoteDomainExpressionTester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.Services.Remote;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.Services.Remote\n{\n    [TestFixture]\n    public class RemoteDomainExpressionTester\n    {\n        private string serviceDirectory;\n\n        [SetUp]\n        public void SetUp()\n        {\n            serviceDirectory = Guid.NewGuid().ToString();\n        }\n\n        [TearDown]\n        public void TearDown()\n        {\n            try\n            {\n                new FileSystem().DeleteDirectory(serviceDirectory);\n            }\n            catch (Exception)\n            {\n                // Don't fail the build because of this.\n            }\n        }\n\n        [Test]\n        public void will_use_bin_for_private_bin_path_if_it_exists()\n        {\n            var fileSystem = new FileSystem();\n\n           \n            fileSystem.DeleteDirectory(serviceDirectory);\n\n            fileSystem.CreateDirectory(serviceDirectory);\n            fileSystem.CreateDirectory(serviceDirectory, \"bin\");\n\n            var expression = new RemoteDomainExpression();\n            expression.Setup.PrivateBinPath.ShouldBeNull();\n\n            expression.ServiceDirectory = serviceDirectory;\n\n            expression.Setup.PrivateBinPath.ShouldBe(\"bin\");\n\n            fileSystem.DeleteDirectory(serviceDirectory);\n        }\n\n        [Test]\n        public void will_use_bin_release_for_private_bin_path_if_it_exists_and_release_has_precedence()\n        {\n            var fileSystem = new FileSystem();\n\n            fileSystem.DeleteDirectory(serviceDirectory);\n\n            fileSystem.CreateDirectory(serviceDirectory);\n            fileSystem.CreateDirectory(serviceDirectory, \"bin\");\n            fileSystem.CreateDirectory(serviceDirectory, \"bin\", \"Release\");\n            fileSystem.CreateDirectory(serviceDirectory, \"bin\", \"Debug\");\n\n            var expression = new RemoteDomainExpression();\n            expression.Setup.PrivateBinPath.ShouldBeNull();\n\n            expression.ServiceDirectory = serviceDirectory;\n\n            expression.Setup.PrivateBinPath.ShouldBe(\"bin\".AppendPath(\"Release\"));\n\n            fileSystem.DeleteDirectory(serviceDirectory);\n        }\n\n\n        [Test]\n        public void will_use_bin_debug_for_private_bin_path_if_it_exists_and_release_does_not()\n        {\n            var fileSystem = new FileSystem();\n\n            fileSystem.DeleteDirectory(serviceDirectory);\n\n            fileSystem.CreateDirectory(serviceDirectory);\n            fileSystem.CreateDirectory(serviceDirectory, \"bin\");\n            fileSystem.CreateDirectory(serviceDirectory, \"bin\", \"Debug\");\n\n            var expression = new RemoteDomainExpression();\n            expression.Setup.PrivateBinPath.ShouldBeNull();\n\n            expression.ServiceDirectory = serviceDirectory;\n\n            expression.Setup.PrivateBinPath.ShouldBe(\"bin\".AppendPath(\"Debug\"));\n        }\n\n        [Test]\n        public void do_not_use_bin_for_private_bin_path_if_it_does_not_exist()\n        {\n            var fileSystem = new FileSystem();\n\n            fileSystem.DeleteDirectory(\"Service2\");\n\n            fileSystem.CreateDirectory(\"Service2\");\n\n            var expression = new RemoteDomainExpression();\n            expression.Setup.PrivateBinPath.ShouldBeNull();\n\n            expression.ServiceDirectory = \"Service2\";\n\n            expression.Setup.PrivateBinPath.ShouldBeNull();\n        }\n\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/SpecificationExtensions.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing FubuCore;\n\nnamespace Shouldly\n{\n    public static class Exception<T> where T : Exception\n    {\n        public static T ShouldBeThrownBy(Action action)\n        {\n            T exception = null;\n\n            try\n            {\n                action();\n            }\n            catch (Exception e)\n            {\n                if (e is AggregateException)\n                {\n                    exception =\n                        e.As<AggregateException>().Flatten().InnerExceptions.FirstOrDefault().ShouldBeOfType<T>();\n                }\n                else\n                {\n                    exception = e.ShouldBeOfType<T>();\n                }\n            }\n\n            if (exception == null)\n                throw new Exception(\"An exception was expected, but not thrown by the given action.\");\n\n            return exception;\n        }\n    }\n\n\n    public delegate void MethodThatThrows();\n\n    public static class SpecificationExtensions\n    {\n        public static void ShouldBeTrue(this bool anObject)\n        {\n            anObject.ShouldBe(true);\n        }\n\n        public static void ShouldBeFalse(this bool anObject)\n        {\n            anObject.ShouldBe(false);\n        }\n\n        public static void ShouldBeNull(this object anObject)\n        {\n            anObject.ShouldBe(null);\n        }\n\n        public static T ShouldNotBeNull<T>(this T anObject) where T : class\n        {\n            anObject.ShouldNotBe(null);\n            return anObject;\n        }\n\n\n        public static object ShouldBeTheSameAs(this object actual, object expected)\n        {\n            ReferenceEquals(actual, expected).ShouldBe(true);\n            return expected;\n        }\n\n        public static object ShouldNotBeTheSameAs(this object actual, object expected)\n        {\n            ReferenceEquals(actual, expected).ShouldBe(false);\n            return expected;\n        }\n\n        public static void ShouldHaveTheSameElementsAs<T>(this IEnumerable<T> actual, params T[] expected)\n        {\n            actual.ShouldBe(expected);\n        }\n\n        public static IEnumerable<T> ShouldHaveCount<T>(this IEnumerable<T> enumerable, int expected)\n        {\n            enumerable.Count().ShouldBe(expected);\n            return enumerable;\n        }\n\n        public static void ShouldHaveTheSameElementsAs(this IList actual, IList expected)\n        {\n            try\n            {\n                actual.ShouldNotBeNull();\n                expected.ShouldNotBeNull();\n\n                actual.Count.ShouldBe(expected.Count);\n\n                for (var i = 0; i < actual.Count; i++)\n                {\n                    actual[i].ShouldBe(expected[i]);\n                }\n            }\n            catch (Exception)\n            {\n                Debug.WriteLine(\"Actual values were:\");\n                actual.Each(x => Debug.WriteLine(x));\n                throw;\n            }\n        }\n\n\n        public static void ShouldHaveTheSameElementsAs<T>(this IEnumerable<T> actual, IEnumerable<T> expected)\n        {\n            var actualList = (actual is IList) ? (IList)actual : actual.ToList();\n            var expectedList = (expected is IList) ? (IList)expected : expected.ToList();\n\n            ShouldHaveTheSameElementsAs(actualList, expectedList);\n        }\n    }\n\n\n/*\n\n    public static class Exception<T> where T : Exception\n    {\n        public static T ShouldBeThrownBy(Action action)\n        {\n            T exception = null;\n\n            try\n            {\n                action();\n            }\n            catch (Exception e)\n            {\n                exception = e.ShouldBeOfType<T>();\n            }\n\n            if (exception == null) Assert.Fail(\"An exception was expected, but not thrown by the given action.\");\n\n            return exception;\n        }\n    }\n\n\n    public delegate void MethodThatThrows();\n\n    public static class SpecificationExtensions\n    {\n        public static void ShouldHave<T>(this IEnumerable<T> values, Func<T, bool> func)\n        {\n            values.FirstOrDefault(func).ShouldNotBeNull();\n        }\n\n        public static void ShouldNotHave<T>(this IEnumerable<T> values, Func<T, bool> func)\n        {\n            values.FirstOrDefault(func).ShouldBeNull();\n        }\n\n        public static void ShouldBeFalse(this bool condition)\n        {\n            Assert.IsFalse(condition);\n        }\n\n        public static void ShouldBeTrue(this bool condition)\n        {\n            Assert.IsTrue(condition);\n        }\n\n        public static object ShouldBe(this object actual, object expected)\n        {\n            Assert.AreEqual(expected, actual);\n            return expected;\n        }\n\n        public static object ShouldBe(this string actual, object expected)\n        {\n            Assert.AreEqual((expected != null) ? expected.ToString() : null, actual);\n            return expected;\n        }\n\n        public static object ShouldNotBe(this object actual, object expected)\n        {\n            Assert.AreNotEqual(expected, actual);\n            return expected;\n        }\n\n        public static void ShouldBeNull(this object anObject)\n        {\n            Assert.IsNull(anObject);\n        }\n\n        public static T ShouldNotBeNull<T>(this T anObject)\n        {\n            Assert.IsNotNull(anObject);\n            return anObject;\n        }\n\n        public static void ShouldNotBeNull(this object anObject, string message)\n        {\n            Assert.IsNotNull(anObject, message);\n        }\n\n        public static object ShouldBeTheSameAs(this object actual, object expected)\n        {\n            Assert.AreSame(expected, actual);\n            return expected;\n        }\n\n        public static object ShouldNotBeTheSameAs(this object actual, object expected)\n        {\n            Assert.AreNotSame(expected, actual);\n            return expected;\n        }\n\n        public static T ShouldBeOfType<T>(this object actual)\n        {\n            actual.ShouldNotBeNull();\n            actual.ShouldBeOfType(typeof (T));\n            return (T) actual;\n        }\n\n\n        public static object ShouldBeOfType(this object actual, Type expected)\n        {\n            Assert.IsInstanceOf(expected, actual);\n            return actual;\n        }\n\n        public static void ShouldNotBeOfType(this object actual, Type expected)\n        {\n            Assert.IsNotInstanceOf(expected, actual);\n        }\n\n        public static void ShouldNotBeOfType<T>(this object actual)\n        {\n            Assert.IsNotInstanceOf(typeof (T), actual);\n        }\n\n        public static void ShouldContain(this IList actual, object expected)\n        {\n            Assert.Contains(expected, actual);\n        }\n\n        public static void ShouldContain<T>(this IEnumerable<T> actual, T expected)\n        {\n            if (actual.Count(t => t.Equals(expected)) == 0)\n            {\n                Assert.Fail(\"The item '{0}' was not found in the sequence.\", expected);\n            }\n        }\n\n        public static void ShouldNotBeEmpty<T>(this IEnumerable<T> actual)\n        {\n            Assert.Greater(actual.Count(), 0, \"The list should have at least one element\");\n        }\n\n        public static void ShouldNotContain<T>(this IEnumerable<T> actual, T expected)\n        {\n            if (actual.Count(t => t.Equals(expected)) > 0)\n            {\n                Assert.Fail(\"The item was found in the sequence it should not be in.\");\n            }\n        }\n\n        public static void ShouldHaveTheSameElementsAs(this IList actual, IList expected)\n        {\n            try\n            {\n                actual.ShouldNotBeNull();\n                expected.ShouldNotBeNull();\n\n                actual.Count.ShouldBe(expected.Count);\n\n                for (var i = 0; i < actual.Count; i++)\n                {\n                    actual[i].ShouldBe(expected[i]);\n                }\n            }\n            catch (Exception)\n            {\n                Debug.WriteLine(\"Actual values were:\");\n                actual.Each(x => Debug.WriteLine(x));\n                throw;\n            }\n        }\n\n        public static void ShouldHaveTheSameElementsAs<T>(this IEnumerable<T> actual, params T[] expected)\n        {\n            ShouldHaveTheSameElementsAs(actual, (IEnumerable<T>) expected);\n        }\n\n        public static void ShouldHaveTheSameElementsAs<T>(this IEnumerable<T> actual, IEnumerable<T> expected)\n        {\n            var actualList = (actual is IList) ? (IList) actual : actual.ToList();\n            var expectedList = (expected is IList) ? (IList) expected : expected.ToList();\n\n            ShouldHaveTheSameElementsAs(actualList, expectedList);\n        }\n\n        public static void ShouldHaveTheSameElementKeysAs<ELEMENT, KEY>(this IEnumerable<ELEMENT> actual,\n            IEnumerable expected,\n            Func<ELEMENT, KEY> keySelector)\n        {\n            actual.ShouldNotBeNull();\n            expected.ShouldNotBeNull();\n\n            var actualArray = actual.ToArray();\n            var expectedArray = expected.Cast<object>().ToArray();\n\n            actualArray.Length.ShouldBe(expectedArray.Length);\n\n            for (var i = 0; i < actual.Count(); i++)\n            {\n                keySelector(actualArray[i]).ShouldBe(expectedArray[i]);\n            }\n        }\n\n        public static IComparable ShouldBeGreaterThan(this IComparable arg1, IComparable arg2)\n        {\n            Assert.Greater(arg1, arg2);\n            return arg2;\n        }\n\n        public static IComparable ShouldBeLessThan(this IComparable arg1, IComparable arg2)\n        {\n            Assert.Less(arg1, arg2);\n            return arg2;\n        }\n\n        public static void ShouldBeEmpty(this ICollection collection)\n        {\n            Assert.IsEmpty(collection);\n        }\n\n        public static void ShouldBeEmpty(this string aString)\n        {\n            Assert.IsEmpty(aString);\n        }\n\n        public static void ShouldNotBeEmpty(this string aString)\n        {\n            Assert.IsNotEmpty(aString);\n        }\n\n        public static void ShouldContain(this string actual, string expected)\n        {\n            StringAssert.Contains(expected, actual);\n        }\n\n\n        public static void ShouldEndWith(this string actual, string expected)\n        {\n            StringAssert.EndsWith(expected, actual);\n        }\n\n        public static void ShouldStartWith(this string actual, string expected)\n        {\n            StringAssert.StartsWith(expected, actual);\n        }\n\n\n        public static Exception ShouldBeThrownBy(this Type exceptionType, MethodThatThrows method)\n        {\n            Exception exception = null;\n\n            try\n            {\n                method();\n            }\n            catch (Exception e)\n            {\n                Assert.AreEqual(exceptionType, e.GetType());\n                exception = e;\n            }\n\n            if (exception == null)\n            {\n                Assert.Fail(\"Expected {0} to be thrown.\", exceptionType.FullName);\n            }\n\n            return exception;\n        }\n\n\n        public static IEnumerable<T> ShouldHaveCount<T>(this IEnumerable<T> actual, int expected)\n        {\n            actual.Count().ShouldBe(expected);\n            return actual;\n        }\n\n\n        public class CapturingConstraint : AbstractConstraint\n        {\n            private readonly ArrayList argList = new ArrayList();\n\n            public override string Message\n            {\n                get { return \"\"; }\n            }\n\n            public override bool Eval(object obj)\n            {\n                argList.Add(obj);\n                return true;\n            }\n\n            public T First<T>()\n            {\n                return ArgumentAt<T>(0);\n            }\n\n            public T ArgumentAt<T>(int pos)\n            {\n                return (T) argList[pos];\n            }\n\n            public T Second<T>()\n            {\n                return ArgumentAt<T>(1);\n            }\n        }\n    }\n * */\n}"
  },
  {
    "path": "src/FubuMVC.Tests/StructureMap/Internals/AppSettingProviderRegistrySmokeTester.cs",
    "content": "using FubuCore.Configuration;\nusing FubuCore.Conversion;\nusing FubuMVC.Core.StructureMap;\nusing Shouldly;\nusing NUnit.Framework;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.StructureMap.Internals\n{\n    [TestFixture]\n    public class AppSettingProviderRegistrySmokeTester\n    {\n        [SetUp]\n        public void SetUp()\n        {\n        }\n\n        [Test]\n        public void can_build_an_app_settings_provider_object()\n        {\n            var container = new Container(new AppSettingProviderRegistry());\n            container.GetInstance<AppSettingsProvider>().ShouldNotBeNull();\n        }\n\n        [Test]\n        public void can_build_the_object_converter()\n        {\n            var container = new Container(new AppSettingProviderRegistry());\n            container.GetInstance<IObjectConverter>().ShouldNotBeNull();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/StructureMap/Internals/StructureMapServiceLocatorTester.cs",
    "content": "using FubuMVC.Core.Security;\nusing FubuMVC.Core.Security.Authorization;\nusing FubuMVC.Core.StructureMap;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.StructureMap.Internals\n{\n    [TestFixture]\n    public class StructureMapServiceLocatorTester\n    {\n        #region Setup/Teardown\n\n        [SetUp]\n        public void SetUp()\n        {\n            _testInstanceKey = \"test\";\n\n            _mockSecurityContext = MockRepository.GenerateStub<ISecurityContext>();\n\n            container = new Container(x =>\n            {\n                x.For<ISecurityContext>().Use(_mockSecurityContext);\n                x.For<ISecurityContext>().AddInstances(\n                    s => s.Type<WebSecurityContext>().Named(_testInstanceKey));\n            });\n        }\n\n        #endregion\n\n        private string _testInstanceKey;\n        private ISecurityContext _mockSecurityContext;\n        private IContainer container;\n\n        [Test]\n        public void should_resolve_unnamed_instances()\n        {\n            new StructureMapServiceLocator(container).GetInstance(typeof (ISecurityContext))\n                .ShouldBeTheSameAs(_mockSecurityContext);\n        }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Tests/StructureMap/Internals/StubActivator.cs",
    "content": "using FubuMVC.Core;\nusing FubuMVC.Core.Diagnostics.Packaging;\n\nnamespace FubuMVC.Tests.StructureMap.Internals\n{\n    public class StubActivator : IActivator\n    {\n        private IActivationLog _log;\n\n        public void Activate(IActivationLog log, IPerfTimer timer)\n        {\n            _log = log;\n        }\n\n        public IActivationLog Log\n        {\n            get { return _log; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/StructureMap/Internals/TestController.cs",
    "content": "using System;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Behaviors;\n\nnamespace FubuMVC.Tests.StructureMap.Internals\n{\n    public class TestViewModel\n    {\n        public bool BoolProperty { get; set; }\n        public string StringProperty { get; set; }\n        public int IntProperty { get; set; }\n    }\n\n    public class TestController\n    {\n        public TestOutputModel Index()\n        {\n            return new TestOutputModel();\n        }\n\n        public TestOutputModel SomeAction(TestInputModel value)\n        {\n            return new TestOutputModel\n            {\n                Prop1 = value.Prop1\n            };\n        }\n\n        public TestOutputModel SomeAction(int not_used)\n        {\n            return new TestOutputModel();\n        }\n\n        public TestOutputModel2 AnotherAction(TestInputModel value)\n        {\n            return new TestOutputModel2\n            {\n                Prop1 = value.Prop1,\n                Name = value.Name,\n                Age = value.Age\n            };\n        }\n\n        public TestOutputModel3 ThirdAction(TestInputModel value)\n        {\n            return new TestOutputModel3\n            {\n                Prop1 = value.Prop1\n            };\n        }\n\n        public void RedirectAction(TestInputModel value)\n        {\n        }\n    }\n\n    public class TestInputModel\n    {\n        public int PropInt { get; set; }\n        public string Prop1 { get; set; }\n        public string Name { get; set; }\n        public int Age { get; set; }\n    }\n\n    public class TestOutputModel\n    {\n        public string Prop1 { get; set; }\n    }\n\n    public class TestOutputModel2 : TestOutputModel\n    {\n        public string Name { get; set; }\n        public int Age { get; set; }\n    }\n\n    public class TestOutputModel3 : TestOutputModel\n    {\n    }\n\n    public class TestPartialModel\n    {\n        public string PartialModelProp1 { get; set; }\n    }\n\n    public class TestBehavior2 : IActionBehavior\n    {\n        public IActionBehavior InsideBehavior { get; set; }\n\n        #region IActionBehavior Members\n\n        public Task Invoke()\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task InvokePartial()\n        {\n            throw new NotImplementedException();\n        }\n\n        #endregion\n    }\n\n    public class TestBehavior : IActionBehavior\n    {\n        public IActionBehavior InsideBehavior { get; set; }\n\n        #region IActionBehavior Members\n\n        public Task Invoke()\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task InvokePartial()\n        {\n            throw new NotImplementedException();\n        }\n\n        #endregion\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/StructureMap/Internals/UsesTheIsSingletonPropertyTester.cs",
    "content": "using FubuCore.Dates;\nusing FubuMVC.Core;\nusing Shouldly;\nusing NUnit.Framework;\nusing StructureMap;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Tests.StructureMap.Internals\n{\n    [TestFixture]\n    public class UsesTheIsSingletonPropertyTester\n    {\n        [Test]\n        public void IClock_should_be_a_singleton_just_by_usage_of_the_IsSingleton_property()\n        {\n            using (var runtime = FubuRuntime.Basic())\n            {\n                runtime.Get<IContainer>().Model.For<IClock>().Default.Lifecycle.ShouldBeOfType<SingletonLifecycle>();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/StructureMap/Settings/SettingIntegrationTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuCore.Configuration;\nusing FubuMVC.Core;\nusing Shouldly;\nusing NUnit.Framework;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.StructureMap.Settings\n{\n    [TestFixture]\n    public class SettingIntegrationTester\n    {\n        private FubuRegistry registry;\n        private Lazy<IContainer> container;\n\n        [SetUp]\n        public void SetUp()\n        {\n            registry = new FubuRegistry();\n            container = new Lazy<IContainer>(() => {\n                var c = new Container(x => {\n                    x.For<ISettingsProvider>().Use<SettingsProvider>();\n\n                    x.For<ISettingsSource>().Add<FakeSettingsData>();\n                    x.For<ISettingsSource>().Add(new AppSettingsSettingSource(SettingCategory.core));\n                });\n\n                registry.StructureMap(c);\n\n                registry.ToRuntime();\n\n                return c;\n            });\n\n        }\n\n        public FooSettings TheResultingSettings\n        {\n            get { return container.Value.GetInstance<FooSettings>(); }\n        }\n\n        [Test]\n        public void include_explicitly()\n        {\n            TheResultingSettings.Name.ShouldBe(\"Max\");\n            TheResultingSettings.Age.ShouldBe(9);\n        }\n\n        [Test]\n        public void include_by_settings_convention_in_the_application_assembly()\n        {\n            container.Value.GetInstance<BarSettings>().Direction.ShouldBe(\"North\");\n            TheResultingSettings.Name.ShouldBe(\"Max\");\n            TheResultingSettings.Age.ShouldBe(9);\n        }\n\n        [Test]\n        public void include_by_settings_convention_by_picking_the_assembly()\n        {\n            container.Value.GetInstance<BarSettings>().Direction.ShouldBe(\"North\");\n            TheResultingSettings.Name.ShouldBe(\"Max\");\n            TheResultingSettings.Age.ShouldBe(9);\n        }\n\n        [Test]\n        public void do_not_override_a_setting_class_that_is_configured_inside_the_fubu_registry()\n        {\n            registry.Services.ReplaceService(new BarSettings {Direction = \"West\"});\n\n            container.Value.GetInstance<BarSettings>().Direction.ShouldBe(\"West\");\n        }\n    }\n\n\n    public class FooSettings\n    {\n        public string Name { get; set; }\n        public int Age { get; set; }\n    }\n\n    public class BarSettings\n    {\n        public string Direction { get; set; }\n    }\n\n    public class FakeSettingsData : ISettingsSource\n    {\n        public IEnumerable<SettingsData> FindSettingData()\n        {\n            var data = new SettingsData();\n            data.Child(\"FooSettings\").Set(\"Name\", \"Max\");\n            data.Child(\"FooSettings\").Set(\"Age\", \"9\");\n            data.Child(\"BarSettings\").Set(\"Direction\", \"North\");\n\n            yield return data;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/StructureMap/using_child_containers_for_isolated_overrides.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.StructureMap;\nusing Shouldly;\nusing NUnit.Framework;\nusing StructureMap;\nusing StructureMap.Configuration.DSL;\n\nnamespace FubuMVC.Tests.StructureMap\n{\n    [TestFixture]\n    public class using_child_containers_for_isolated_overrides\n    {\n        [Test]\n        public void override_services()\n        {\n            var registry = new FubuRegistry();\n            registry.Services.IncludeRegistry<ThingRegistry>();\n\n            using (var runtime = registry.ToRuntime())\n            {\n                var container = runtime.Get<IContainer>();\n\n                var facility = container.GetInstance<IServiceFactory>().As<StructureMapServiceFactory>();\n\n                facility.Get<ThingUser>().Thing.ShouldBeOfType<AThing>();\n\n                facility.StartNewScope();\n\n                facility.Container.Role.ShouldBe(ContainerRole.ProfileOrChild);\n\n                facility.Container.Configure(_ => _.For<IThing>().Use<BThing>().Singleton());\n\n                var bthing = facility.Get<ThingUser>().Thing.ShouldBeOfType<BThing>();\n\n                facility.TeardownScope();\n\n                // back to normal\n                facility.Get<ThingUser>().Thing.ShouldBeOfType<AThing>();\n            }\n        }\n    }\n\n    public class ThingRegistry : Registry\n    {\n        public ThingRegistry()\n        {\n            For<IThing>().Use<AThing>().Singleton();\n        }\n    }\n\n    public class ThingUser\n    {\n        public IThing Thing { get; set; }\n\n        public ThingUser(IThing thing)\n        {\n            Thing = thing;\n        }\n    }\n\n    public interface IThing\n    {\n        \n    }\n\n    public class AThing : IThing, IDisposable\n    {\n        public void Dispose()\n        {\n            WasDisposed = true;\n        }\n\n        public bool WasDisposed { get; set; }\n    }\n\n    public class BThing : AThing\n    {\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/TagAttributeTester.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class TagAttributeTester\r\n    {\r\n        [Test]\r\n        public void applies_the_tags()\r\n        {\r\n            var graph = BehaviorGraph.BuildFrom(x => x.Actions.IncludeType<TaggedEndpoint>());\r\n            graph.ChainFor<TaggedEndpoint>(x => x.get_tags())\r\n                .Tags.ShouldHaveTheSameElementsAs(\"foo\", \"bar\");\r\n        }\r\n    }\r\n\r\n    public class TaggedEndpoint\r\n    {\r\n        [Tag(\"foo\", \"bar\")]\r\n        public string get_tags()\r\n        {\r\n            return \"some tags\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/TestController.cs",
    "content": "using System;\r\nusing System.Threading.Tasks;\r\nusing System.Web.UI;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Urls;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    public class TestViewModel\r\n    {\r\n        public bool BoolProperty { get; set; }\r\n        public string StringProperty { get; set; }\r\n        public int IntProperty { get; set; }\r\n    }\r\n\r\n    public class TestController\r\n    {\r\n        public TestOutputModel Index()\r\n        {\r\n            return new TestOutputModel();\r\n        }\r\n\r\n        public TestOutputModel SomeAction(TestInputModel value)\r\n        {\r\n            return new TestOutputModel\r\n            {\r\n                Prop1 = value.Prop1\r\n            };\r\n        }\r\n\r\n        public TestOutputModel SomeOtherAction(NotUsedModel not_used)\r\n        {\r\n            return new TestOutputModel();\r\n        }\r\n\r\n        public TestOutputModel2 AnotherAction(TestInputModel value)\r\n        {\r\n            return new TestOutputModel2\r\n            {\r\n                Prop1 = value.Prop1,\r\n                Name = value.Name,\r\n                Age = value.Age\r\n            };\r\n        }\r\n\r\n        public TestOutputModel3 ThirdAction(TestInputModel value)\r\n        {\r\n            return new TestOutputModel3\r\n            {\r\n                Prop1 = value.Prop1\r\n            };\r\n        }\r\n\r\n        public void RedirectAction(TestInputModel value)\r\n        {\r\n        }\r\n    }\r\n\r\n    public class NotUsedModel\r\n    {\r\n        \r\n    }\r\n\r\n    public class TestInputModel\r\n    {\r\n        public int PropInt { get; set; }\r\n        public string Prop1 { get; set; }\r\n        public string Name { get; set; }\r\n        public int Age { get; set; }\r\n    }\r\n\r\n    public class TestOutputModel\r\n    {\r\n        public string Prop1 { get; set; }\r\n    }\r\n\r\n    public class TestOutputModel2 : TestOutputModel\r\n    {\r\n        public string Name { get; set; }\r\n        public int Age { get; set; }\r\n    }\r\n\r\n    public class TestOutputModel3 : TestOutputModel\r\n    {\r\n    }\r\n\r\n    public class TestPartialModel\r\n    {\r\n        public string PartialModelProp1 { get; set; }\r\n    }\r\n\r\n    public class TestBehavior2 : IActionBehavior\r\n    {\r\n        public IActionBehavior InsideBehavior { get; set; }\r\n\r\n        #region IActionBehavior Members\r\n\r\n        public Task Invoke()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #endregion\r\n    }\r\n\r\n    public class TestBehavior : IActionBehavior\r\n    {\r\n        public IActionBehavior InsideBehavior { get; set; }\r\n\r\n        #region IActionBehavior Members\r\n\r\n        public Task Invoke()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public Task InvokePartial()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/TestSupport/GenericVoidMethod.cs",
    "content": "namespace FubuMVC.Tests.TestSupport\n{\n    public delegate void GenericVoidMethod<T>(T target);\n}"
  },
  {
    "path": "src/FubuMVC.Tests/TestSupport/InteractionContext.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuCore.Dates;\nusing FubuCore.Logging;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing StructureMap;\n\nnamespace FubuMVC.Tests.TestSupport\n{\n    public class InteractionContext<T> where T : class\n    {\n        private SettableClock _clock;\n\n\n\n        public IContainer Container { get { return Services.Container; } }\n        public RhinoAutoMocker<T> Services { get; private set; }\n        public T ClassUnderTest { get { return Services.ClassUnderTest; } }\n\n        [SetUp]\n        public void SetUp()\n        {\n            _clock = new SettableClock();\n\n            Services = new RhinoAutoMocker<T>();\n            Services.Inject<ISystemTime>(_clock);\n            beforeEach();\n        }\n\n        public RecordingLogger RecordLogging()\n        {\n            var logger = new RecordingLogger();\n            Services.Inject<ILogger>(logger);\n\n            return logger;\n        }\n\n        public RecordingLogger RecordedLog()\n        {\n            return MockFor<ILogger>().As<RecordingLogger>();\n        }\n\n        // Override this for context specific setup\n        protected virtual void beforeEach() {}\n\n        public TService MockFor<TService>() where TService : class\n        {\n            return Services.Get<TService>();\n        }\n\n        public void VerifyCallsFor<TMock>() where TMock : class\n        {\n            MockFor<TMock>().VerifyAllExpectations();\n        }\n\n        public DateTime LocalSystemTime\n        {\n            get\n            {\n                return _clock.LocalTime().Time;\n            }\n            set\n            {\n                _clock.LocalNow(value);\n            }\n        }\n\n        public LocalTime LocalTime\n        {\n            get\n            {\n                return _clock.LocalTime();\n            }\n        }\n\n        public DateTime UtcSystemTime\n        {\n            get\n            {\n                return _clock.UtcNow();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/TestSupport/RhinoAutoMocker.cs",
    "content": "using StructureMap.AutoMocking;\n\nnamespace FubuMVC.Tests.TestSupport\n{\n    /// <summary>\n    /// Provides an \"Auto Mocking Container\" for the concrete class TARGETCLASS using Rhino.Mocks\n    /// </summary>\n    /// <typeparam name=\"T\">The concrete class being tested</typeparam>\n    public class RhinoAutoMocker<T> : AutoMocker<T> where T : class\n    {\n        public RhinoAutoMocker()\n            : base(new RhinoMocksAAAServiceLocator())\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/TestSupport/RhinoMockRepositoryProxy.cs",
    "content": "using System;\nusing System.Reflection;\n\nnamespace FubuMVC.Tests.TestSupport\n{\n    public class RhinoMockRepositoryProxy\n    {\n        private readonly Func<Type, object[], object> _DynamicMock;\n        private readonly object _instance;\n        private readonly Func<Type, object[], object> _PartialMock;\n        private readonly Action<object> _Replay;\n\n        public RhinoMockRepositoryProxy()\n        {\n            // We may consider allowing the consumer to pass in the MockRepository Type so we can avoid any possible Assembly conflict issues.\n            // (The assumption being that their test project already has a reference to Rhino.Mocks.)\n            // ex: var myclass = RhinoAutoMocker<MyClass>(MockMode.AAA, typeof(MockRepository)\n            Assembly RhinoMocks = Assembly.Load(\"Rhino.Mocks\");\n            Type mockRepositoryType = RhinoMocks.GetType(\"Rhino.Mocks.MockRepository\");\n            if (mockRepositoryType == null)\n                throw new InvalidOperationException(\"Unable to find Type Rhino.Mocks.MockRepository in assembly \" +\n                                                    RhinoMocks.Location);\n\n            _instance = Activator.CreateInstance(mockRepositoryType);\n            MethodInfo methodInfo = mockRepositoryType.GetMethod(\"DynamicMock\", new[] { typeof(Type), typeof(object[]) });\n            if (methodInfo == null)\n                throw new InvalidOperationException(\n                    \"Unable to find method DynamicMock(Type, object[]) on MockRepository.\");\n            _DynamicMock =\n                (Func<Type, object[], object>)\n                    Delegate.CreateDelegate(typeof(Func<Type, object[], object>), _instance, methodInfo);\n\n            methodInfo = mockRepositoryType.GetMethod(\"PartialMock\", new[] { typeof(Type), typeof(object[]) });\n            if (methodInfo == null)\n                throw new InvalidOperationException(\n                    \"Unable to find method PartialMock(Type, object[] on MockRepository.\");\n            _PartialMock =\n                (Func<Type, object[], object>)\n                    Delegate.CreateDelegate(typeof(Func<Type, object[], object>), _instance, methodInfo);\n\n\n            methodInfo = mockRepositoryType.GetMethod(\"Replay\", new[] { typeof(object) });\n            if (methodInfo == null)\n                throw new InvalidOperationException(\"Unable to find method Replay(object) on MockRepository.\");\n            _Replay = (Action<object>)Delegate.CreateDelegate(typeof(Action<object>), _instance, methodInfo);\n        }\n\n        public object DynamicMock(Type type)\n        {\n            return _DynamicMock(type, null);\n        }\n\n        public object PartialMock(Type type, object[] args)\n        {\n            return _PartialMock(type, args);\n        }\n\n        public void Replay(object mock)\n        {\n            _Replay(mock);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/TestSupport/RhinoMocksAAAServiceLocator.cs",
    "content": "using System;\nusing StructureMap.AutoMocking;\n\nnamespace FubuMVC.Tests.TestSupport\n{\n    public class RhinoMocksAAAServiceLocator : ServiceLocator\n    {\n        private readonly RhinoMockRepositoryProxy _mocks = new RhinoMockRepositoryProxy();\n\n        public T Service<T>() where T : class\n        {\n            var instance = (T)_mocks.DynamicMock(typeof(T));\n            _mocks.Replay(instance);\n            return instance;\n        }\n\n        public object Service(Type serviceType)\n        {\n            object instance = _mocks.DynamicMock(serviceType);\n            _mocks.Replay(instance);\n            return instance;\n        }\n\n        public T PartialMock<T>(params object[] args) where T : class\n        {\n            var instance = (T)_mocks.PartialMock(typeof(T), args);\n            _mocks.Replay(instance);\n            return instance;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/TestSupport/SelfMockingServiceLocator.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuCore;\nusing FubuCore.Util;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.TestSupport\n{\n    public class SelfMockingServiceLocator : IServiceLocator\n    {\n        private readonly Cache<Type, object> _mocks = new Cache<Type, object>(t =>\n        {\n            var makerType = typeof(MockMaker<>).MakeGenericType(t);\n            return Activator.CreateInstance(makerType).As<MockMaker>().Make();\n        });\n\n        private readonly Dictionary<string, object> _namedMocks = new Dictionary<string, object>();\n\n        public TService GetInstance<TService>()\n        {\n            return (TService)_mocks[typeof(TService)];\n        }\n\n        public T MockFor<T>()\n        {\n            return (T)_mocks[typeof(T)];\n        }\n\n        public object GetService(Type serviceType)\n        {\n            return _mocks[serviceType];\n        }\n\n        public object GetInstance(Type serviceType)\n        {\n            return _mocks[serviceType];\n        }\n\n        public T GetInstance<T>(string name)\n        {\n            if (!_namedMocks.ContainsKey(name))\n            {\n                var t = typeof(T);\n                var makerType = typeof(MockMaker<>).MakeGenericType(t);\n                _namedMocks[name] = Activator.CreateInstance(makerType).As<MockMaker>().Make();\n            }\n\n            return (T)_namedMocks[name];\n        }\n\n\n        public void Stub<T>(T stub)\n        {\n            _mocks[typeof(T)] = stub;\n        }\n\n        #region Nested type: MockMaker\n\n        public interface MockMaker\n        {\n            object Make();\n        }\n\n        public class MockMaker<T> : MockMaker where T : class\n        {\n            public object Make()\n            {\n                return MockRepository.GenerateMock<T>();\n            }\n        }\n\n        #endregion\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/TestSupport/VoidMethod.cs",
    "content": "namespace FubuMVC.Tests.TestSupport\n{\n    public delegate void VoidMethod();\n}"
  },
  {
    "path": "src/FubuMVC.Tests/TestSupport/Wait.cs",
    "content": "using System;\nusing System.Diagnostics;\nusing System.Threading;\n\nnamespace FubuMVC.Tests.TestSupport\n{\n    public static class Wait\n    {\n        public static bool Until(Func<bool> condition, int millisecondPolling = 500, int timeoutInMilliseconds = 5000)\n        {\n            if (condition()) return true;\n\n            var clock = new Stopwatch();\n            clock.Start();\n\n            while (clock.ElapsedMilliseconds < timeoutInMilliseconds)\n            {\n                Thread.Yield();\n                Thread.Sleep(500);\n\n                if (condition()) return true;\n            }\n\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/UrlAliasAttributeTester.cs",
    "content": "using System;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests\n{\n    [TestFixture]\n    public class UrlAliasAttributeTester\n    {\n        private BehaviorGraph theGraph;\n\n        [SetUp]\n        public void SetUp()\n        {\n            var registry = new FubuRegistry();\n            registry.Actions.IncludeType<RouteAliasController>();\n\n            theGraph = BehaviorGraph.BuildFrom(registry);\n        }\n\n        [Test]\n        public void adds_the_route_aliases()\n        {\n            var route1 = new RouteDefinition(\"something/else\");\n            var route2 = new RouteDefinition(\"again/something/else\");\n\n            var chain = theGraph.ChainFor<RouteAliasController>(x => x.get_something())\n                .As<RoutedChain>();\n            var routes = chain.AdditionalRoutes;\n\n            routes.ShouldHaveCount(2);\n            routes.ShouldContain(route1);\n            routes.ShouldContain(route2);\n        }\n\n        public class RouteAliasController\n        {\n            [UrlAlias(\"something/else\")]\n            [UrlAlias(\"again/something/else\")]\n            public string get_something()\n            {\n                throw new NotImplementedException();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/UrlExtensionsTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class UrlExtensionsTester\r\n    {\r\n        public class TestObject\r\n        {\r\n            public TestObject Child { get; set; }\r\n            public int Value { get; set; }\r\n            public bool Boolean { get; set; }\r\n        }\r\n\r\n        [Test]\r\n        public void UrlEncode_should_encode_string()\r\n        {\r\n            string test = \"encode test\";\r\n\r\n            test.UrlEncoded().ShouldBe(\"encode%20test\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/UrlPatternAttributeTester.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class UrlPatternAttributeTester\r\n    {\r\n        [Test]\r\n        public void build_route_with_a_single_method_restrictions()\r\n        {\r\n            var attribute = new UrlPatternAttribute(\"GET::foo\");\r\n            var route = attribute.BuildRoute(null);\r\n            route.Pattern.ShouldBe(\"foo\");\r\n            route.AllowedHttpMethods.ShouldHaveTheSameElementsAs(\"GET\");\r\n        }\r\n\r\n        [Test]\r\n        public void build_route_with_multiple_method_restrictions()\r\n        {\r\n            var attribute = new UrlPatternAttribute(\"GET,post,PUT::foo\");\r\n            var route = attribute.BuildRoute(null);\r\n            route.Pattern.ShouldBe(\"foo\");\r\n            route.AllowedHttpMethods.ShouldHaveTheSameElementsAs(\"GET\", \"POST\", \"PUT\");\r\n        }\r\n\r\n        [Test]\r\n        public void GetAttribute()\r\n        {\r\n            var attribute = new GetAttribute(\"foo\");\r\n            var route = attribute.BuildRoute(null);\r\n            route.Pattern.ShouldBe(\"foo\");\r\n            route.AllowedHttpMethods.ShouldHaveTheSameElementsAs(\"GET\");\r\n        }\r\n\r\n        [Test]\r\n        public void PostAttribute()\r\n        {\r\n            var attribute = new PostAttribute(\"foo\");\r\n            var route = attribute.BuildRoute(null);\r\n            route.Pattern.ShouldBe(\"foo\");\r\n            route.AllowedHttpMethods.ShouldHaveTheSameElementsAs(\"POST\");\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void PutAttribute()\r\n        {\r\n            var attribute = new PutAttribute(\"foo\");\r\n            var route = attribute.BuildRoute(null);\r\n            route.Pattern.ShouldBe(\"foo\");\r\n            route.AllowedHttpMethods.ShouldHaveTheSameElementsAs(\"PUT\");\r\n        }\r\n\r\n\r\n\r\n        [Test]\r\n        public void DeleteAttribute()\r\n        {\r\n            var attribute = new DeleteAttribute(\"foo\");\r\n            var route = attribute.BuildRoute(null);\r\n            route.Pattern.ShouldBe(\"foo\");\r\n            route.AllowedHttpMethods.ShouldHaveTheSameElementsAs(\"DELETE\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/UrlStringExtensionsTester.cs",
    "content": "﻿using System;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing FubuMVC.Core;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class UrlStringExtensionsTester\r\n    {\r\n        [Test]\r\n        public void to_absolute_url_when_it_is_already_an_absolute_url()\r\n        {\r\n            \"http://cnn.com\".ToAbsoluteUrl(\"http://localhost:5050\")\r\n                        .ShouldBe(\"http://cnn.com\");\r\n        }\r\n\r\n        [Test]\r\n        public void to_absolute_url_from_relative_to_absolute()\r\n        {\r\n\r\n            \"/foo\".ToAbsoluteUrl(\"http://localhost:5050\")\r\n                  .ShouldBe(\"http://localhost:5050/foo\");\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void to_absolute_url_from_relative_to_absolute_2()\r\n        {\r\n            \"~/foo\".ToAbsoluteUrl(\"http://localhost:5050\")\r\n                  .ShouldBe(\"http://localhost:5050/foo\");\r\n        }\r\n\r\n        [Test]\r\n        public void to_absolute_url_respects_the_template()\r\n        {\r\n            \"http://cnn.com/{script}\".ToAbsoluteUrl(\"http://localhost:5050\")\r\n                                     .ShouldBe(\"http://cnn.com/{script}\");\r\n        }\r\n\r\n        [Test]\r\n        public void url_encoding()\r\n        {\r\n            \"abc/def&ghi=jkl\".UrlEncoded().ShouldBe(\"abc%2Fdef%26ghi%3Djkl\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Urls/BasicUrlRegistrationScanningIntegrationTester.cs",
    "content": "using System;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Querying;\r\nusing FubuMVC.Core.Urls;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Urls\r\n{\r\n    [TestFixture]\r\n    public class BasicUrlRegistrationScanningIntegrationTester\r\n    {\r\n        #region Setup/Teardown\r\n\r\n        [TestFixtureSetUp]\r\n        public void SetUp()\r\n        {\r\n            graph = BehaviorGraph.BuildFrom(x => x.Actions.IncludeClassesSuffixedWithController());\r\n\r\n            var request = OwinHttpRequest.ForTesting().FullUrl(\"http://server/cool\");\r\n\t        var urlResolver = new ChainUrlResolver(request);\r\n\r\n            registry = new UrlRegistry(new ChainResolutionCache(graph), urlResolver, request);\r\n        }\r\n\r\n        #endregion\r\n\r\n        private BehaviorGraph graph;\r\n        private IUrlRegistry registry;\r\n\r\n\r\n        public class SpecialModel : RouteInputModel\r\n        {\r\n        }\r\n\r\n        public class SpecialModelForDefault : RouteInputModel\r\n        {\r\n            [RouteInput]\r\n            public int? PossiblyEmpty { get; set; }\r\n        }\r\n\r\n        public class SpecialController\r\n        {\r\n            // A tiny controller class.  The [UrlPattern] att\r\n            // is only for exception cases and, sigh, Dovetail\r\n            // legacy code\r\n            [UrlPattern(\"special/{Name}/is/{Age}\")]\r\n            public void OverrideMethod(SpecialModel model)\r\n            {\r\n            }\r\n\r\n            [UrlPattern(\"defaultage/{Name}/is/{PossiblyEmpty:10}\")]\r\n            public void OverrideMethodDefaultValue(SpecialModelForDefault model)\r\n            {\r\n            }\r\n\r\n            [UrlPattern(\"override/noargs\")]\r\n            public void OverrideWithNoArgs()\r\n            {\r\n            }\r\n\r\n            public void Querystring(ModelWithQueryStrings query)\r\n            {\r\n            }\r\n\r\n            public void InputWithGuid(ModelWithGuid model)\r\n            {\r\n\r\n            }\r\n\r\n            public string NoArgMethod()\r\n            {\r\n                return \"something\";\r\n            }\r\n\r\n            public string Index()\r\n            {\r\n                return \"the index\";\r\n            }\r\n\r\n            public void Generic<T>()\r\n            {\r\n                // should be ignored\r\n            }\r\n        }\r\n\r\n        public class ModelWithQueryStrings\r\n        {\r\n            [QueryString]\r\n            public string Name { get; set; }\r\n\r\n            [QueryString]\r\n            public int Age { get; set; }\r\n\r\n            public DateTime From { get; set; }\r\n            public DateTime To { get; set; }\r\n        }\r\n\r\n        public class RouteInputModel\r\n        {\r\n            [RouteInput(\"Jeremy\")]\r\n            public string Name { get; set; }\r\n\r\n            [RouteInput]\r\n            public int Age { get; set; }\r\n\r\n            public DateTime From { get; set; }\r\n            public DateTime To { get; set; }\r\n        }\r\n\r\n        public class CaseInputModel : RouteInputModel\r\n        {\r\n        }\r\n\r\n        public class Case : Entity\r\n        {\r\n        }\r\n\r\n        public class Entity\r\n        {\r\n            public long Id { get; set; }\r\n        }\r\n\r\n        [Test]\r\n        public void get_url_for_input_model()\r\n        {\r\n            registry.UrlFor(new SpecialModel\r\n            {\r\n                Name = \"Jeremy\",\r\n                Age = 35\r\n            }).ShouldBe(\"/special/Jeremy/is/35\");\r\n        }\r\n\r\n        [Test]\r\n        public void get_url_for_input_model_default_value()\r\n        {\r\n            registry.UrlFor(new SpecialModelForDefault()\r\n            {\r\n                Name = \"Frank\"\r\n            }).ShouldBe(\"/defaultage/Frank/is/10\");\r\n        }\r\n\r\n        [Test]\r\n        public void get_url_nullable_ok()\r\n        {\r\n            registry.UrlFor(new SpecialModelForDefault()\r\n            {\r\n                Name = \"Frank\",\r\n                PossiblyEmpty = 36\r\n            }).ShouldBe(\"/defaultage/Frank/is/36\");\r\n        }\r\n\r\n        [Test]\r\n        public void has_action_calls_for_actions_with_no_input_args()\r\n        {\r\n            registry.UrlFor<SpecialController>(x => x.NoArgMethod(), null).ShouldBe(\r\n                \"/special/noargmethod\");\r\n            registry.UrlFor<SpecialController>(x => x.Index(), null).ShouldBe(\"/special/index\");\r\n        }\r\n\r\n    }\r\n\r\n    public class ModelWithGuid\r\n    {\r\n        [RouteInput]\r\n        public Guid OtherGuid { get; set; }\r\n\r\n        [RouteInput]\r\n        public Guid Id { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Urls/ChainUrlResolverTester.cs",
    "content": "﻿using System;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Http;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing FubuMVC.Core.Urls;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Urls\r\n{\r\n\t[TestFixture]\r\n\tpublic class ChainUrlResolverTester\r\n\t{\r\n\t\tprivate OwinHttpRequest theHttpRequest;\r\n\t\tprivate ChainUrlResolver theUrlResolver;\r\n\r\n\t\tprivate BehaviorGraph theGraph;\r\n\t\tprivate BehaviorChain theSimpleChain;\r\n\t\tprivate BehaviorChain theChainWithRouteParams;\r\n\r\n\t\t[TestFixtureSetUp]\r\n\t\tpublic void SetUp()\r\n\t\t{\r\n            theHttpRequest = OwinHttpRequest.ForTesting();\r\n\t\t\tUrlContext.Stub(\"http://server\");\r\n\r\n\t\t\ttheUrlResolver = new ChainUrlResolver(theHttpRequest);\r\n\r\n\t\t\ttheGraph = BehaviorGraph.BuildFrom(registry =>\r\n\t\t\t{\r\n\t\t\t\tregistry.Actions.IncludeType<ChainUrlResolverEndpoint>();\r\n\t\t\t});\r\n\r\n\t\t\ttheSimpleChain = theGraph.ChainFor<ChainUrlResolverEndpoint>(x => x.get_index());\r\n\t\t\ttheChainWithRouteParams = theGraph.ChainFor(typeof(ChainUrlParams));\r\n\t\t}\r\n\r\n\t\t[TearDown]\r\n\t\tpublic void TearDown()\r\n\t\t{\r\n\t\t\tUrlContext.Reset();\r\n\t\t}\r\n\r\n\t\t[Test]\r\n\t\tpublic void resolve_a_url_without_route_params()\r\n\t\t{\r\n\t\t\ttheUrlResolver.UrlFor(null, theSimpleChain).ShouldBe(\"/index\");\r\n\t\t}\r\n\r\n\t\t[Test]\r\n\t\tpublic void resolve_a_url_with_route_params_filled_by_input()\r\n\t\t{\r\n\t\t\tvar input = new ChainUrlParams {Name = \"Joel\"};\r\n\t\t\ttheUrlResolver.UrlFor(input, theChainWithRouteParams).ShouldBe(\"/Joel\");\r\n\t\t}\r\n\r\n\t\t[Test]\r\n\t\tpublic void resolve_a_url_with_route_params_explicitly_filled()\r\n\t\t{\r\n\t\t\tvar values = new RouteParameters();\r\n\t\t\tvalues[\"Name\"] = \"Joel\";\r\n\r\n\t\t\ttheUrlResolver.UrlFor(theChainWithRouteParams, values).ShouldBe(\"/Joel\");\r\n\t\t}\r\n\r\n\t\tpublic class ChainUrlResolverEndpoint\r\n\t\t{\r\n\t\t\tpublic string get_Name(ChainUrlParams values)\r\n\t\t\t{\r\n\t\t\t\tthrow new NotImplementedException();\r\n\t\t\t}\r\n\r\n\t\t\tpublic string get_index()\r\n\t\t\t{\r\n\t\t\t\tthrow new NotImplementedException();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic class ChainUrlParams\r\n\t\t{\r\n\t\t\tpublic string Name { get; set; }\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Urls/UrlRegistryIntegrationTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing FubuCore;\r\nusing FubuCore.Reflection;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Querying;\r\nusing FubuMVC.Core.Registration.Routes;\r\nusing FubuMVC.Core.Urls;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.Urls\r\n{\r\n    [TestFixture]\r\n    public class UrlRegistryIntegrationTester\r\n    {\r\n        private BehaviorGraph graph;\r\n        private UrlRegistry urls;\r\n        private OwinHttpRequest theHttpRequest;\r\n\r\n        [TestFixtureSetUp]\r\n        public void SetUp()\r\n        {\r\n            theHttpRequest = OwinHttpRequest.ForTesting();\r\n            theHttpRequest.FullUrl(\"http://server/fubu\");\r\n\r\n\r\n            var registry = new FubuRegistry();\r\n            registry.Actions.IncludeType<OneController>();\r\n            registry.Actions.IncludeType<TwoController>();\r\n            registry.Actions.IncludeType<QueryStringTestController>();\r\n            registry.Actions.IncludeType<OnlyOneActionController>();\r\n\r\n            graph = BehaviorGraph.BuildFrom(registry);\r\n\r\n            var urlResolver = new ChainUrlResolver(theHttpRequest);\r\n\r\n            urls = new UrlRegistry(new ChainResolutionCache(graph), urlResolver, theHttpRequest);\r\n        }\r\n\r\n        [Test]\r\n        public void find_by_handler_type_if_only_one_method()\r\n        {\r\n\r\n            urls.UrlFor<OnlyOneActionController>()\r\n                .ShouldBe(\"/onlyoneaction/go\");\r\n        }\r\n\r\n        [Test]\r\n        public void retrieve_by_controller_action_even_if_it_has_an_input_model()\r\n        {\r\n            urls.UrlFor<OneController>(x => x.M1(null), null).ShouldBe(\"/one/m1\");\r\n        }\r\n\r\n        [Test]\r\n        public void retrieve_a_url_for_a_model_simple_case()\r\n        {\r\n            urls.UrlFor(new Model1()).ShouldBe(\"/one/m1\");\r\n        }\r\n\r\n        [Test]\r\n        public void retrieve_a_url_for_a_inferred_model_simple_case()\r\n        {\r\n            urls.UrlFor<Model1>((string) null).ShouldBe(\"/one/m1\");\r\n        }\r\n\r\n        [Test]\r\n        public void retrieve_a_url_for_a_model_that_does_not_exist()\r\n        {\r\n            Exception<FubuException>.ShouldBeThrownBy(() => { urls.UrlFor(new ModelWithNoChain()); });\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void retrieve_a_url_for_a_model_that_has_route_inputs()\r\n        {\r\n            urls.UrlFor(new ModelWithInputs\r\n            {\r\n                Name = \"Jeremy\"\r\n            }).ShouldBe(\"/find/Jeremy\");\r\n        }\r\n\r\n        [Test]\r\n        public void retrieve_a_url_for_a_model_that_has_querystring_inputs()\r\n        {\r\n            var model = new ModelWithQueryStringInput() {Param = 42};\r\n\r\n            urls.UrlFor(model).ShouldBe(\"/qs/test?Param=42\");\r\n        }\r\n\r\n        [Test]\r\n        public void retrieve_a_url_for_a_model_that_has_mixed_inputs()\r\n        {\r\n            var model = new ModelWithQueryStringAndRouteInput() {Param = 42, RouteParam = 23};\r\n\r\n            urls.UrlFor(model).ShouldBe(\"/qsandroute/test/23?Param=42\");\r\n        }\r\n\r\n        [Test]\r\n        public void retrieve_url_by_input_type_with_parameters()\r\n        {\r\n            var parameters = new RouteParameters<ModelWithInputs>();\r\n            parameters[x => x.Name] = \"Max\";\r\n\r\n            urls.UrlFor<ModelWithInputs>(parameters).ShouldBe(\"/find/Max\");\r\n        }\r\n\r\n        [Test]\r\n        public void retrieve_a_url_for_a_model_and_category()\r\n        {\r\n            urls.UrlFor(new UrlModel(), \"different\").ShouldBe(\"/one/m4\");\r\n        }\r\n\r\n        [Test]\r\n        public void retrieve_a_url_by_action()\r\n        {\r\n            urls.UrlFor<OneController>(x => x.M2(), null).ShouldBe(\"/one/m2\");\r\n        }\r\n\r\n        [Test]\r\n        public void retrieve_a_url_by_action_negative_case()\r\n        {\r\n\r\n            Exception<FubuException>.ShouldBeThrownBy(() => { urls.UrlFor<RandomClass>(x => x.Ignored(), null); });\r\n        }\r\n\r\n        [Test]\r\n        public void url_for_handler_type_and_method_positive()\r\n        {\r\n            var method = ReflectionHelper.GetMethod<OneController>(x => x.M3());\r\n\r\n            urls.UrlFor(typeof (OneController), method, null).ShouldBe(\"/one/m3\");\r\n        }\r\n\r\n        [Test]\r\n        public void url_for_handler_type_and_method_negative_case_should_throw_204()\r\n        {\r\n            Exception<FubuException>.ShouldBeThrownBy(() => {\r\n                var method = ReflectionHelper.GetMethod<RandomClass>(x => x.Ignored());\r\n                urls.UrlFor(typeof (OneController), method, null);\r\n            }).ErrorCode.ShouldBe(2104);\r\n        }\r\n\r\n        [Test]\r\n        public void url_for_new_positive_case()\r\n        {\r\n            urls.UrlForNew<UrlModel>().ShouldBe(\"/two/m2\");\r\n            urls.UrlForNew(typeof (UrlModel)).ShouldBe(\"/two/m2\");\r\n        }\r\n\r\n        [Test]\r\n        public void url_for_new_negative_case_should_throw_2109()\r\n        {\r\n            Exception<FubuException>.ShouldBeThrownBy(() => { urls.UrlForNew<ModelWithoutNewUrl>(); })\r\n                .ErrorCode.ShouldBe(2109);\r\n        }\r\n\r\n        [Test]\r\n        public void has_new_url_positive()\r\n        {\r\n            urls.HasNewUrl(typeof (UrlModel)).ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void has_new_url_negative()\r\n        {\r\n            urls.HasNewUrl(typeof (ModelWithoutNewUrl)).ShouldBeFalse();\r\n        }\r\n\r\n\r\n        [Test]\r\n        public void url_for_route_parameter_by_type_respects_the_absolute_path()\r\n        {\r\n            urls.UrlFor<Model6>(new RouteParameters())\r\n                .ShouldBe(\"/one/a\");\r\n        }\r\n\r\n        [Test]\r\n        public void url_for_route_parameter_by_type_and_category_respects_absolute_path()\r\n        {\r\n            urls.UrlFor<UrlModel>(new RouteParameters(), \"different\")\r\n                .ShouldBe(\"/one/m4\");\r\n        }\r\n    }\r\n\r\n    [TestFixture]\r\n    public class Forwarding_tests\r\n    {\r\n        private BehaviorGraph graph;\r\n        private UrlRegistry urls;\r\n        private OwinHttpRequest theHttpRequest;\r\n\r\n        [TestFixtureSetUp]\r\n        public void SetUp()\r\n        {\r\n            theHttpRequest = OwinHttpRequest.ForTesting();\r\n            theHttpRequest.FullUrl(\"http://server/fubu\");\r\n\r\n\r\n            var registry = new FubuRegistry();\r\n            registry.Actions.IncludeType<OneController>();\r\n            registry.Actions.IncludeType<TwoController>();\r\n            registry.Actions.IncludeType<QueryStringTestController>();\r\n            registry.Actions.IncludeType<OnlyOneActionController>();\r\n\r\n            graph = BehaviorGraph.BuildFrom(registry);\r\n\r\n            var urlResolver = new ChainUrlResolver(theHttpRequest);\r\n\r\n            urls = new UrlRegistry(new ChainResolutionCache(graph), urlResolver, theHttpRequest);\r\n        }\r\n\r\n    }\r\n\r\n    public class RandomClass\r\n    {\r\n        public void Ignored()\r\n        {\r\n        }\r\n    }\r\n\r\n    public class OneController\r\n    {\r\n        [UrlPattern(\"find/{Name}\")]\r\n        public void MethodWithPattern(ModelWithInputs inputs)\r\n        {\r\n        }\r\n\r\n        public void A(Model6 input)\r\n        {\r\n        }\r\n\r\n        public void B(Model7 input)\r\n        {\r\n        }\r\n\r\n\r\n        public void M1(Model1 input)\r\n        {\r\n        }\r\n\r\n        public void M2()\r\n        {\r\n        }\r\n\r\n        public void M3()\r\n        {\r\n        }\r\n\r\n        public void M5(Model3 input)\r\n        {\r\n        }\r\n\r\n        [UrlRegistryCategory(\"different\")]\r\n        public void M4(UrlModel model)\r\n        {\r\n        }\r\n\r\n        public string Default(DefaultModel model)\r\n        {\r\n            return \"welcome to the default view\";\r\n        }\r\n    }\r\n\r\n    public class TwoController\r\n    {\r\n        public void M1()\r\n        {\r\n        }\r\n\r\n        [UrlForNew(typeof (UrlModel))]\r\n        public void M2()\r\n        {\r\n        }\r\n\r\n        public void M3()\r\n        {\r\n        }\r\n\r\n        public void M4(UrlModel model)\r\n        {\r\n        }\r\n    }\r\n\r\n    public class OnlyOneActionController\r\n    {\r\n        public void Go(Model8 input)\r\n        {\r\n        }\r\n    }\r\n\r\n    public class QueryStringTestController\r\n    {\r\n        public void get_qs_test(ModelWithQueryStringInput input)\r\n        {\r\n        }\r\n\r\n        public void get_qsandroute_test_RouteParam(ModelWithQueryStringAndRouteInput input)\r\n        {\r\n        }\r\n    }\r\n\r\n    public class ModelWithInputs\r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    public class Model1\r\n    {\r\n    }\r\n\r\n    public class Model2\r\n    {\r\n    }\r\n\r\n    public class Model3\r\n    {\r\n    }\r\n\r\n    public class Model4\r\n    {\r\n    }\r\n\r\n    public class Model5\r\n    {\r\n    }\r\n\r\n    public class Model6\r\n    {\r\n    }\r\n\r\n    public class Model7\r\n    {\r\n    }\r\n\r\n    public class Model8\r\n    {\r\n    }\r\n\r\n    public class DefaultModel\r\n    {\r\n    }\r\n\r\n    public class ModelWithNoChain\r\n    {\r\n    }\r\n\r\n    public class ModelWithoutNewUrl\r\n    {\r\n    }\r\n\r\n\r\n\r\n    public class UrlModel\r\n    {\r\n        public string Name { get; set; }\r\n        public int Age { get; set; }\r\n    }\r\n\r\n    public class SubclassUrlModel : UrlModel\r\n    {\r\n    }\r\n\r\n    public class ModelWithQueryStringInput\r\n    {\r\n        [QueryString]\r\n        public int Param { get; set; }\r\n    }\r\n\r\n    public class ModelWithQueryStringAndRouteInput\r\n    {\r\n        [QueryString]\r\n        public int Param { get; set; }\r\n\r\n        public int RouteParam { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/ClassValidationRulesTester.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation\n{\n    [TestFixture]\n    public class ClassValidationRulesTester\n    {\n        private ClassValidationRules<ClassValidationRulesTarget> theRules;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theRules = new ClassValidationRules<ClassValidationRulesTarget>();\n        }\n\n        private IEnumerable<IFieldValidationRule> rulesFor(Expression<Func<ClassValidationRulesTarget, object>> expression)\n        {\n            var registry = new FieldRulesRegistry(new IFieldValidationSource[0], new TypeDescriptorCache());\n            var graph = ValidationGraph.For(registry);\n\n            graph.Import(theRules);\n\n            return registry.RulesFor(typeof (ClassValidationRulesTarget)).RulesFor(expression.ToAccessor());\n        }\n\n        private IEnumerable<IValidationRule> classRules()\n        {\n            var graph = ValidationGraph.For(theRules);\n\n            return graph.Sources.SelectMany(source => source.RulesFor(typeof(ClassValidationRulesTarget)));\n        }\n\n        [Test]\n        public void no_rules()\n        {\n            rulesFor(x => x.Name).Any().ShouldBeFalse();\n            rulesFor(x => x.Address1).Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void register_a_single_required_rule()\n        {\n            theRules.Require(x => x.Name);\n\n            rulesFor(x => x.Name).Single().ShouldBeOfType<RequiredFieldRule>();\n        }\n\n        [Test]\n        public void register_a_single_required_rule_with_a_conditional()\n        {\n            theRules.Require(x => x.Province).If(x => x.Country == \"Canada\");\n\n            var conditionalRule = rulesFor(x => x.Province).Single().ShouldBeOfType<ConditionalFieldRule<ClassValidationRulesTarget>>();\n\n            conditionalRule.Inner.ShouldBeOfType<RequiredFieldRule>();\n\n\n\n            conditionalRule.Condition.Matches(null, ValidationContext.For(new ClassValidationRulesTarget() { Country = \"United States\" })).ShouldBeFalse();\n            conditionalRule.Condition.Matches(null, ValidationContext.For(new ClassValidationRulesTarget() { Country = \"Canada\" })).ShouldBeTrue();\n        }\n\n        [Test]\n        public void register_multiple_required_rules()\n        {\n            theRules.Require(x => x.Name, x => x.Address1);\n\n            rulesFor(x => x.Name).Single().ShouldBeOfType<RequiredFieldRule>();\n            rulesFor(x => x.Address1).Single().ShouldBeOfType<RequiredFieldRule>();\n        }\n\n        [Test]\n        public void register_maximum_length()\n        {\n            theRules.Property(x => x.Name).MaximumLength(19);\n            rulesFor(x => x.Name).Single().ShouldBeOfType<MaximumLengthRule>()\n                .Length.ShouldBe(19);\n        }\n\n        [Test]\n        public void register_maximum_length_conditionally()\n        {\n            var filter = FieldRuleCondition.For<ClassValidationRulesTarget>(x => x.Country == \"Canada\");\n            theRules.Property(x => x.Name).MaximumLength(19).If(filter);\n            rulesFor(x => x.Name).Single().ShouldBeOfType<ConditionalFieldRule<ClassValidationRulesTarget>>()\n                .Inner\n                .ShouldBeOfType<MaximumLengthRule>()\n                .Length.ShouldBe(19);\n        }\n\n        [Test]\n        public void register_greater_than_zero()\n        {\n            theRules.Property(x => x.Age).GreaterThanZero();\n            rulesFor(x => x.Age).Single().ShouldBeOfType<GreaterThanZeroRule>();\n        }\n\n        [Test]\n        public void register_greater_or_equal_to_zero()\n        {\n            theRules.Property(x => x.Age).GreaterOrEqualToZero();\n            rulesFor(x => x.Age).Single().ShouldBeOfType<GreaterOrEqualToZeroRule>();\n        }\n\n        [Test]\n        public void register_required_for_a_single_property()\n        {\n            theRules.Property(x => x.Name).Required();\n        }\n\n        [Test]\n        public void register_multiple_rules_for_a_single_property()\n        {\n            theRules.Property(x => x.Name).Required().MaximumLength(10);\n\n            var nameRules = rulesFor(x => x.Name);\n            CoreExtensions.Count(nameRules).ShouldBe(2);\n            nameRules.Any(x => x is RequiredFieldRule).ShouldBeTrue();\n            nameRules.ShouldContain(new MaximumLengthRule(10));\n        }\n\n        [Test]\n        public void register_class_level_rule_by_type()\n        {\n            theRules.Register<SimpleClassLevelRule>();\n\n            var classLevelRules = classRules();\n            classLevelRules.Any(x => x is SimpleClassLevelRule).ShouldBeTrue();\n        }\n\n        [Test]\n        public void register_class_level_rule_by_instance()\n        {\n            theRules.Register(new ComplexClassLevelRule<ClassValidationRulesTarget>(x => x.Province, x => x.Country));\n\n            var classLevelRules = classRules();\n            classLevelRules.Any(x => x is ComplexClassLevelRule<ClassValidationRulesTarget>);\n        }\n\n\t\t[Test]\n\t\tpublic void configure_a_field_equality_rule()\n\t\t{\n\t\t\tvar myToken = StringToken.FromKeyString(\"MyKeys:MyToken\", \"Passwords must match\");\n\t\t\t\n\t\t\ttheRules\n\t\t\t\t.Property(x => x.Password)\n\t\t\t\t.Matches(x => x.ConfirmPassword)\n\t\t\t\t.ReportErrorsOn(x => x.ConfirmPassword)\n\t\t\t\t.UseToken(myToken);\n\n\t\t\tvar rule = theRules.As<IValidationSource>().RulesFor(typeof(ClassValidationRulesTarget)).OfType<FieldEqualityRule>().Single();\n\t\t\t\n\t\t\trule.Property1.ShouldBe(SingleProperty.Build<ClassValidationRulesTarget>(x => x.Password));\n\t\t\trule.Property2.ShouldBe(SingleProperty.Build<ClassValidationRulesTarget>(x => x.ConfirmPassword));\n\n\t\t\trule.Token.ShouldBe(myToken);\n\t\t}\n    }\n\n    public class ClassValidationRulesTarget\n    {\n        public string Name { get; set; }\n        public string Address1 { get; set; }\n        public string Province { get; set;}\n        public string Country { get; set; }\n\n\t\tpublic string Password { get; set; }\n\t\tpublic string ConfirmPassword { get; set; }\n\n        public int Age { get; set; }\n    }\n\n    public class SimpleClassLevelRule : IValidationRule\n    {\n        public void Validate(ValidationContext context)\n        {\n            \n        }\n    }\n\n    public class ComplexClassLevelRule<T> : IValidationRule where T : class\n    {\n        private readonly Accessor _firstAccessor;\n        private readonly Accessor _secondAccessor;\n\n        public ComplexClassLevelRule(Expression<Func<T, object>> firstField, Expression<Func<T, object>> secondField)\n        {\n            _firstAccessor = firstField.ToAccessor();\n            _secondAccessor = secondField.ToAccessor();\n        }\n\n\n        public void Validate(ValidationContext context)\n        {\n           \n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/ContinuationRuleTester.cs",
    "content": "using System.Collections.Generic;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Tests.Validation.Models;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation\n{\n    [TestFixture]\n    public class ContinuationRuleTester\n    {\n        private IValidator _provider;\n\n        [SetUp]\n        public void SetUp()\n        {\n            _provider = Validator.BasicValidator();\n        }\n\n        [Test]\n        public void should_validate_properties_on_ancillary_models_marked_as_continue()\n        {\n            var model = new CompositeModelWithAttribute {Contact = new ContactModel()};\n            var notification = _provider.Validate(model);\n\n            notification.MessagesFor<CompositeModelWithAttribute>(x => x.Contact.FirstName).ShouldHaveCount(1);\n            notification.MessagesFor<CompositeModelWithAttribute>(x => x.Contact.LastName).ShouldHaveCount(1);\n        }\n\n        public class CompositeModelWithAttribute\n        {\n            public int Id { get; set; }\n\n            [ContinueValidation]\n            public ContactModel Contact { get; set; }\n        }\n\n        public class ContactModel\n        {\n            public ContactModel()\n            {\n                Addresses = new List<AddressModel>();\n            }\n\n            [Required]\n            public string FirstName { get; set; }\n            [Required]\n            public string LastName { get; set; }\n\n            [CollectionLength(1)]\n            public IEnumerable<AddressModel> Addresses { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/FieldEqualityRuleTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Validation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation\n{\n\tpublic class FieldEqualityTarget\n\t{\n\t\tpublic string Value1 { get; set; }\n\t\tpublic string Value2 { get; set; }\n\n\t\tpublic string Other { get; set; }\n\n\t\tpublic int DifferentType { get; set; }\n\t}\n\n\t[TestFixture]\n\tpublic class FieldEqualityRuleTester\n\t{\n\t\tprivate FieldEqualityTarget theTarget;\n\t\tprivate FieldEqualityRule theRule;\n\n\t\t[SetUp]\n\t\tpublic void SetUp()\n\t\t{\n\t\t\ttheTarget = new FieldEqualityTarget();\n\t\t\ttheRule = FieldEqualityRule.For<FieldEqualityTarget>(t => t.Value1, t => t.Value2);\n\t\t}\n\n\t\tprivate Notification theNotification\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tvar scenario = ValidationScenario<FieldEqualityTarget>.For(x =>\n\t\t\t\t{\n\t\t\t\t\tx.Model = theTarget;\n\t\t\t\t\tx.Rule(theRule);\n\t\t\t\t});\n\n\t\t\t\treturn scenario.Notification;\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void throws_when_property_types_do_not_match()\n\t\t{\n\t\t\tException<InvalidOperationException>\n\t\t\t\t.ShouldBeThrownBy(() => FieldEqualityRule.For<FieldEqualityTarget>(x => x.Value1, x => x.DifferentType));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void throws_when_targeting_messages_to_an_unknown_accessor()\n\t\t{\n\t\t\tvar rule = FieldEqualityRule.For<FieldEqualityTarget>(x => x.Value1, x => x.Value2);\n\t\t\tvar accessor = SingleProperty.Build<FieldEqualityTarget>(x => x.Other);\n\n\t\t\tException<ArgumentOutOfRangeException>\n\t\t\t\t.ShouldBeThrownBy(() => rule.ReportMessagesFor(accessor));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void uses_the_default_token()\n\t\t{\n\t\t\tFieldEqualityRule.For<FieldEqualityTarget>(t => t.Value1, t => t.Value2)\n\t\t\t                 .Token.ShouldBe(ValidationKeys.FieldEquality);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void registers_a_message_for_property1_when_property1_is_specified()\n\t\t{\n\t\t\ttheTarget.Value1 = \"hello//\";\n\n\t\t\ttheRule.ReportMessagesFor(theRule.Property1);\n\n\t\t\tvar messages = theNotification.MessagesFor<FieldEqualityTarget>(x => x.Value1);\n\t\t\tmessages.Single().StringToken.ShouldBe(ValidationKeys.FieldEquality);\n\n\t\t\ttheNotification.MessagesFor<FieldEqualityTarget>(x => x.Value2).ShouldHaveCount(0);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void registers_a_message_for_property2_when_property2_is_specified()\n\t\t{\n\t\t\ttheTarget.Value1 = \"hello\";\n\n\t\t\ttheRule.ReportMessagesFor(theRule.Property2);\n\n\t\t\tvar messages = theNotification.MessagesFor<FieldEqualityTarget>(x => x.Value2);\n\t\t\tmessages.Single().StringToken.ShouldBe(ValidationKeys.FieldEquality);\n\n\t\t\ttheNotification.MessagesFor<FieldEqualityTarget>(x => x.Value1).ShouldHaveCount(0);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void registers_a_message_for_both_proeprties_when_both_are_specified()\n\t\t{\n\t\t\ttheTarget.Value1 = \"hello\";\n\n\t\t\ttheRule.ReportMessagesFor(theRule.Property1);\n\t\t\ttheRule.ReportMessagesFor(theRule.Property2);\n\n\t\t\ttheNotification\n\t\t\t\t.MessagesFor<FieldEqualityTarget>(x => x.Value1)\n\t\t\t\t.Single()\n\t\t\t\t.StringToken\n\t\t\t\t.ShouldBe(ValidationKeys.FieldEquality);\n\n\t\t\ttheNotification\n\t\t\t\t.MessagesFor<FieldEqualityTarget>(x => x.Value2)\n\t\t\t\t.Single()\n\t\t\t\t.StringToken\n\t\t\t\t.ShouldBe(ValidationKeys.FieldEquality);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void no_message_when_the_properties_match()\n\t\t{\n\t\t\ttheTarget.Value1 = \"hello\";\n\t\t\ttheTarget.Value2 = \"hello\";\n\n\t\t\ttheRule.ReportMessagesFor(theRule.Property1);\n\t\t\ttheRule.ReportMessagesFor(theRule.Property2);\n\n\t\t\ttheNotification.MessagesFor<FieldEqualityTarget>(x => x.Value1).Any().ShouldBeFalse();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void renders_the_substitutions()\n\t\t{\n\t\t\ttheTarget.Value1 = \"hello\";\n\t\t\ttheTarget.Value2 = \"asdf\";\n\n\t\t\ttheRule.ReportMessagesFor(theRule.Property1);\n\n\t\t\tvar message = theNotification.MessagesFor<FieldEqualityTarget>(x => x.Value1).Single();\n\t\t\tmessage.GetMessage().ShouldBe(\"Value1 must equal Value2\");\n\t\t}\n\n\t\t[Test]\n\t\tpublic void no_message_when_the_value_is_empty()\n\t\t{\n\t\t\ttheTarget.Value1 = \"\";\n\n\t\t\ttheRule.ReportMessagesFor(theRule.Property1);\n\t\t\ttheRule.ReportMessagesFor(theRule.Property2);\n\n\t\t\ttheNotification.MessagesFor<FieldEqualityTarget>(x => x.Value1).Any().ShouldBeFalse();\n\t\t}\t\n\n\t\t[Test]\n\t\tpublic void builds_the_localized_properties()\n\t\t{\n\t\t\tvar values = theRule.ToValues();\n\t\t\t\n\t\t\tvar prop1 = values.Child(\"property1\");\n\t\t\tprop1.Get<string>(\"field\").ShouldBe(theRule.Property1.Name);\n\t\t\tprop1.Get<string>(\"label\").ShouldBe(LocalizationManager.GetHeader(theRule.Property1.InnerProperty));\n\n\t\t\tvar prop2 = values.Child(\"property2\");\n\t\t\tprop2.Get<string>(\"field\").ShouldBe(theRule.Property2.Name);\n\t\t\tprop2.Get<string>(\"label\").ShouldBe(LocalizationManager.GetHeader(theRule.Property2.InnerProperty));\n\t\t}\n\n\t\t[Test]\n\t\tpublic void builds_the_token()\n\t\t{\n\t\t\tvar values = theRule.ToValues();\n\n\t\t\tvalues.Get<string>(\"message\").ShouldBe(theRule.Token.ToString());\n\t\t}\n\n\t\t[Test]\n\t\tpublic void builds_the_targets()\n\t\t{\n\t\t\ttheRule.ReportMessagesFor(theRule.Property1);\n\t\t\ttheRule.ReportMessagesFor(theRule.Property2);\n\n\t\t\tvar values = theRule.ToValues();\n\n\t\t\tvalues.Get<IEnumerable<string>>(\"targets\").ShouldHaveTheSameElementsAs(theRule.Property1.Name, theRule.Property2.Name);\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Fields/CollectionLengthRuleTester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Fields\n{\n    [TestFixture]\n    public class CollectionLengthRuleTester\n    {\n        [Test]\n        public void do_not_log_any_messages_when_the_collection_is_valid()\n        {\n            var target = new CollectionLengthTarget(){\n                Names = new[]{\"a\"}\n            };\n\n            var rule = new CollectionLengthRule(1);\n            rule.ValidateProperty(target, x => x.Names).MessagesFor<CollectionLengthTarget>(x => x.Names).Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void log_message_when_collection_is_wrong_length()\n        {\n            var target = new CollectionLengthTarget(){\n                Names = new string[0]\n            };\n\n            var rule = new CollectionLengthRule(1);\n            rule.ValidateProperty(target, x => x.Names).MessagesFor<CollectionLengthTarget>(x => x.Names).Single().GetMessage()\n                .ShouldBe(\"Must be exactly 1 element(s)\"); \n        }\n\n        [Test]\n        public void log_message_when_collection_is_null()\n        {\n            var target = new CollectionLengthTarget()\n            {\n                Names = null\n            };\n\n            var rule = new CollectionLengthRule(1);\n            rule.ValidateProperty(target, x => x.Names).MessagesFor<CollectionLengthTarget>(x => x.Names).Single().GetMessage()\n                .ShouldBe(\"Must be exactly 1 element(s)\");\n        }\n\n\n        [Test]\n        public void log_message_when_collection_is_wrong_length_w()\n        {\n            var target = new CollectionLengthTarget()\n            {\n                Names = new string[] { \"a\"}\n            };\n\n            var rule = new CollectionLengthRule(2);\n            rule.ValidateProperty(target, x => x.Names).MessagesFor<CollectionLengthTarget>(x => x.Names).Single().GetMessage()\n                .ShouldBe(\"Must be exactly 2 element(s)\");\n        }\n\n\t\t[Test]\n\t\tpublic void uses_default_collection_length_token()\n\t\t{\n\t\t\tnew CollectionLengthRule(0).Token.ShouldBe(ValidationKeys.CollectionLength);\n\t\t}\n    }\n    \n    public class CollectionLengthTarget\n    {\n        public string[] Names { get; set; }\n    }\n\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Fields/ConditionalFieldRuleTester.cs",
    "content": "using FubuCore.Reflection;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Validation.Fields\n{\n    [TestFixture]\n    public class ConditionalFieldRuleTester\n    {\n        private IFieldValidationRule theInnerRule;\n        private ConditionalFieldRule<ConditionalFieldRuleTester> theConditionalRule;\n\n        [SetUp]\n        public void SetUp()\n        {\n            var condition = FieldRuleCondition.For<ConditionalFieldRuleTester>(x => x.Matches);\n            \n            theInnerRule = MockRepository.GenerateMock<IFieldValidationRule>();\n            theConditionalRule = new ConditionalFieldRule<ConditionalFieldRuleTester>(condition, theInnerRule);\n        }\n\n        [Test]\n        public void execute_the_inner_rule_if_the_condition_is_met()\n        {\n            Matches = true;\n            var context = new ValidationContext(null, new Notification(), this);\n\n            var accessor = ReflectionHelper.GetAccessor<ConditionalFieldRuleTester>(x => x.Matches);\n\n            theConditionalRule.Validate(accessor, context);\n\n            theInnerRule.AssertWasCalled(x => x.Validate(accessor, context));\n        }\n\n        [Test]\n        public void should_not_execute_the_inner_rule_if_the_condition_is_not_met()\n        {\n            Matches = false;\n            var context = new ValidationContext(null, new Notification(), this);\n\n            var accessor = ReflectionHelper.GetAccessor<ConditionalFieldRuleTester>(x => x.Matches);\n\n            theConditionalRule.Validate(accessor, context);\n\n            theInnerRule.AssertWasNotCalled(x => x.Validate(accessor, context));\n        }\n\n        public bool Matches { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Fields/EmailFieldRuleTester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Fields\n{\n    [TestFixture]\n    public class EmailFieldRuleTester\n    {\n        private EmailTarget theTarget;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theTarget = new EmailTarget();\n        }\n\n        private Notification theNotification\n        {\n            get\n            {\n                var scenario = ValidationScenario<EmailTarget>.For(x =>\n                {\n                    x.Model = theTarget;\n                    x.FieldRule(new EmailFieldRule());\n                });\n\n                return scenario.Notification;\n            }\n        }\n\n        [Test]\n        public void default_token_is_email_key()\n        {\n            new EmailFieldRule().Token.ShouldBe(ValidationKeys.Email);\n        }\n\n        [Test]\n        public void no_message_if_email_is_valid()\n        {\n            AssertEmailValidationReturnsNoMessage(\"joel+paulus@arnold.com\").ShouldBeTrue();\n            AssertEmailValidationReturnsNoMessage(\"user@domain.com\").ShouldBeTrue();\n            AssertEmailValidationReturnsNoMessage(\"user@sub.domain.com\").ShouldBeTrue();\n            AssertEmailValidationReturnsNoMessage(\"first.last@sub.domain.com\").ShouldBeTrue();\n            AssertEmailValidationReturnsNoMessage(\"gmail+style@sub.domain.com\").ShouldBeTrue();\n        }\n\n        [Test]\n        public void registers_message_if_email_is_invalid()\n        {\n            theTarget.Email = \"something\";\n            var messages = theNotification.MessagesFor<EmailTarget>(x => x.Email);\n            messages.Single().StringToken.ShouldBe(ValidationKeys.Email);\n        }\n\n        [Test]\n        public void uppercase_letters_are_valid()\n        {\n            theTarget.Email = \"Something@there.com\";\n            theNotification.MessagesFor<EmailTarget>(x => x.Email).Any().ShouldBeFalse();\n        }\n        \n        [Test]\n        public void no_message_if_email_is_empty()\n        {\n            AssertEmailValidationReturnsNoMessage(string.Empty).ShouldBeTrue();\n        }\n\n        private bool AssertEmailValidationReturnsNoMessage(string email)\n        {\n            theTarget.Email = email;\n            return theNotification.MessagesFor<EmailTarget>(x => x.Email).Any() == false;\n        }\n\n        public class EmailTarget\n        {\n            public string Email { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Fields/FieldAccessRuleRegistryTester.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuCore.Util;\nusing FubuMVC.Core.Validation.Fields;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Fields\n{\n    [TestFixture]\n    public class when_fetching_rules_for_a_type\n    {\n        private StubFieldValidationSource<FieldAccessRuleRegistryTarget> source1;\n        private StubFieldValidationSource<FieldAccessRuleRegistryTarget> source2;\n        private FieldRulesRegistry theRegistry;\n\n        [SetUp]\n        public void SetUp()\n        {\n            source1 = new StubFieldValidationSource<FieldAccessRuleRegistryTarget>();\n            source2 = new StubFieldValidationSource<FieldAccessRuleRegistryTarget>();\n        \n            source1.Register<RequiredFieldRule>(x => x.Name);\n            source2.Register<RequiredFieldRule>(x => x.Name);\n            source2.Register<GreaterThanZeroRule>(x => x.Age);\n            source1.Register<GreaterOrEqualToZeroRule>(x => x.Children);\n\n            theRegistry = new FieldRulesRegistry(new IFieldValidationSource[]{source1, source2},\n                                                      new TypeDescriptorCache());\n        }\n\n        private IEnumerable<IFieldValidationRule> rulesFor(Expression<Func<FieldAccessRuleRegistryTarget, object>> property)\n        {\n            var rules = theRegistry.RulesFor<FieldAccessRuleRegistryTarget>();\n            return rules.RulesFor(property.ToAccessor());\n        }\n\n        [Test]\n        public void should_not_duplicate_rules()\n        {\n            rulesFor(x => x.Name).Single().ShouldBeOfType<RequiredFieldRule>();\n        }\n\n        [Test]\n        public void should_use_all_sources_to_find_field_rules()\n        {\n            rulesFor(x => x.Age).Single().ShouldBeOfType<GreaterThanZeroRule>();\n            rulesFor(x => x.Children).Single().ShouldBeOfType<GreaterOrEqualToZeroRule>();\n        }\n\n        [Test]\n        public void has_rule_positive()\n        {\n            var accessor = ReflectionHelper.GetAccessor<FieldAccessRuleRegistryTarget>(x => x.Name);\n            theRegistry.HasRule<RequiredFieldRule>(accessor).ShouldBeTrue();\n        }\n\n        [Test]\n        public void has_rule_negative()\n        {\n            var accessor = ReflectionHelper.GetAccessor<FieldAccessRuleRegistryTarget>(x => x.Name);\n            theRegistry.HasRule<GreaterThanZeroRule>(accessor).ShouldBeFalse(); \n        }\n\n        [Test]\n        public void for_rule_continuation_when_found()\n        {\n            var accessor = ReflectionHelper.GetAccessor<FieldAccessRuleRegistryTarget>(x => x.Name);\n            var action = MockRepository.GenerateMock<Action<RequiredFieldRule>>();\n            theRegistry.ForRule<RequiredFieldRule>(accessor, action);\n\n            action.AssertWasCalled(x => x.Invoke(new RequiredFieldRule()));\n        }\n\n        [Test]\n        public void for_rule_continuation_should_not_be_called_when_the_rule_can_not_found()\n        {\n            var accessor = ReflectionHelper.GetAccessor<FieldAccessRuleRegistryTarget>(x => x.Age);\n            var action = MockRepository.GenerateMock<Action<RequiredFieldRule>>();\n            theRegistry.ForRule(accessor, action);\n\n            action.AssertWasNotCalled(x => x.Invoke(new RequiredFieldRule()));\n        }\n    }\n\n    public class FieldAccessRuleRegistryTarget\n    {\n        public string Name { get; set; }\n        public int Age { get; set; }\n        public int Children { get; set; }\n    }\n\n    public class PropertyHolder\n    {\n        public PropertyHolder(PropertyInfo property)\n        {\n            Property = property;\n        }\n\n        public PropertyInfo Property{ get; set;}\n\n        public bool Equals(PropertyHolder other)\n        {\n            if (ReferenceEquals(null, other)) return false;\n            if (ReferenceEquals(this, other)) return true;\n            return other.Property.PropertyMatches(Property);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != typeof (PropertyHolder)) return false;\n            return Equals((PropertyHolder) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return (Property != null ? Property.GetHashCode() : 0);\n        }\n    }\n\n    public class StubFieldValidationSource<T> : IFieldValidationSource\n    {\n        private readonly Cache<PropertyHolder, IList<IFieldValidationRule>> _rules \n            = new Cache<PropertyHolder, IList<IFieldValidationRule>>(x => new List<IFieldValidationRule>());\n\n        public void Register<TRule>(Expression<Func<T, object>> property) where TRule: IFieldValidationRule, new()\n        {\n            var holder = new PropertyHolder(property.ToAccessor().InnerProperty);\n            _rules[holder].Add(new TRule());\n        }\n\n        public IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property)\n        {\n            var holder = new PropertyHolder(property);\n            return _rules[holder];\n        }\n\n        public void AssertIsValid()\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n\n"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Fields/FieldRulesRegistryTester.cs",
    "content": "﻿using FubuCore.Reflection;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Tests.Validation.Models;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Fields\n{\n    [TestFixture]\n    public class FieldRulesRegistryTester\n    {\n        private FieldRulesRegistry theRegistry;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theRegistry = new FieldRulesRegistry(new IFieldValidationSource[0], new TypeDescriptorCache());\n        }\n\n        [Test]\n        public void registers_the_attribute_field_validation_source_by_default()\n        {\n            var theAccessor = ReflectionHelper.GetAccessor<ContactModel>(x => x.FirstName);\n            theRegistry.HasRule<RequiredFieldRule>(theAccessor).ShouldBeTrue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Fields/FieldValidationQueryTester.cs",
    "content": "using FubuCore.Reflection;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Tests.Validation.Models;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Fields\n{\n    [TestFixture]\n    public class FieldValidationQueryTester\n    {\n        private FieldValidationQuery _query;\n\n        [SetUp]\n        public void setup()\n        {\n            var registry = new FieldRulesRegistry(new[] {new AttributeFieldValidationSource()},\n                                                  new TypeDescriptorCache());\n            _query = new FieldValidationQuery(registry);\n        }\n\n        [Test]\n        public void should_find_basic_rules()\n        {\n            _query\n                .RulesFor<AddressModel>(m => m.Address1)\n                .ShouldHaveCount(1);\n        }\n\n        [Test]\n        public void should_have_basic_rules()\n        {\n            _query\n                .HasRule<RequiredFieldRule>(typeof(AddressModel), ReflectionHelper.GetAccessor<AddressModel>(a => a.Address1))\n                .ShouldBeTrue();\n        }\n\n        [Test]\n        public void should_continue_and_find_rules_for_ancillary_objects()\n        {\n            _query\n                .RulesFor<CompositeModel>(m => m.Contact.FirstName)\n                .ShouldHaveCount(1);\n        }\n\n        [Test]\n        public void should_continue_and_find_rules_for_nested__continued_ancillary_objects()\n        {\n            _query\n                .RulesFor<UserModel>(m => m.Site.Contact.FirstName)\n                .ShouldHaveCount(1);\n        }\n\n        [Test]\n        public void should_not_get_rules_for_ancillary_objects_without_a_continue_validation()\n        {\n            _query\n                .RulesFor<CompositeModel>(m => m.RestrictedContact.FirstName)\n                .ShouldHaveCount(0);\n        }\n\n        [Test]\n        public void should_not_get_rules_for_nested_ancillary_objects_without_a_continue_validation()\n        {\n            _query\n                .RulesFor<UserModel>(m => m.Site.AlternateContact.FirstName)\n                .ShouldHaveCount(0);\n        }\n\n        [Test]\n        public void should_call_continuation_for_rules()\n        {\n            var found = false;\n            var accessor = ReflectionHelper.GetAccessor<CompositeModel>(m => m.Contact.FirstName);\n            _query\n                .ForRule<RequiredFieldRule>(typeof(CompositeModel), accessor, rule => { found = true; });\n            found.ShouldBeTrue();\n        }\n\n        [Test]\n        public void should_not_get_rules_for_ancillary_objects_in_collection()\n        {\n            _query\n                .RulesFor<CompositeModel>(m => m.Contacts[0])\n                .ShouldHaveCount(0);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Fields/GreaterOrEqualtoZeroRuleTester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Tests.Validation.Models;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Fields\n{\n    [TestFixture]\n    public class GreaterOrEqualToZeroRuleTester\n    {\n        private SimpleModel theModel;\n        private GreaterOrEqualToZeroRule theRule;\n\n        [SetUp]\n        public void BeforeEach()\n        {\n            theRule = new GreaterOrEqualToZeroRule();\n            theModel = new SimpleModel();\n        }\n\n\t\t[Test]\n\t\tpublic void uses_default_token()\n\t\t{\n\t\t\ttheRule.Token.ShouldBe(ValidationKeys.GreaterThanOrEqualToZero);\n\t\t}\n\n        [Test]\n        public void should_register_message_if_value_is_less_than_zero()\n        {\n            theModel.GreaterOrEqualToZero = -1;\n            theRule.ValidateProperty(theModel, x => x.GreaterOrEqualToZero)\n                .MessagesFor<SimpleModel>(x => x.GreaterOrEqualToZero).Select(x => x.StringToken)\n                .ShouldHaveTheSameElementsAs(ValidationKeys.GreaterThanOrEqualToZero);\n        }\n\n        [Test]\n        public void should_not_register_a_message_if_value_is_zero()\n        {\n            theModel.GreaterOrEqualToZero = 0;\n            theRule.ValidateProperty(theModel, x => x.GreaterOrEqualToZero)\n                .MessagesFor<SimpleModel>(x => x.GreaterOrEqualToZero).Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void should_not_register_a_message_if_value_is_greater_than_zero()\n        {\n            theModel.GreaterOrEqualToZero = 10;\n            theRule.ValidateProperty(theModel, x => x.GreaterOrEqualToZero)\n                .MessagesFor<SimpleModel>(x => x.GreaterOrEqualToZero).Any().ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Fields/GreaterThanZeroRuleTester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Tests.Validation.Models;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Fields\n{\n    [TestFixture]\n    public class GreaterThanZeroRuleTester\n    {\n        private SimpleModel theModel;\n        private GreaterThanZeroRule theRule;\n\n        [SetUp]\n        public void BeforeEach()\n        {\n            theRule = new GreaterThanZeroRule();\n            theModel = new SimpleModel();\n        }\n\n\t\t[Test]\n\t\tpublic void uses_the_default_token()\n\t\t{\n\t\t\ttheRule.Token.ShouldBe(ValidationKeys.GreaterThanZero);\n\t\t}\n\n        [Test]\n        public void should_register_message_if_value_is_less_than_zero()\n        {\n            theModel.GreaterThanZero = -1;\n            theRule.ValidateProperty(theModel, x => x.GreaterThanZero)\n                .MessagesFor<SimpleModel>(x => x.GreaterThanZero).Select(x => x.StringToken).ShouldHaveTheSameElementsAs(ValidationKeys.GreaterThanZero);\n        }\n\n        [Test]\n        public void should_register_a_message_if_value_is_zero()\n        {\n            theModel.GreaterThanZero = 0;\n            theRule.ValidateProperty(theModel, x => x.GreaterThanZero)\n                .MessagesFor<SimpleModel>(x => x.GreaterThanZero)\n                .Select(x => x.StringToken).ShouldHaveTheSameElementsAs(ValidationKeys.GreaterThanZero);\n        }\n\n        [Test]\n        public void should_not_register_a_message_if_value_is_greater_than_zero()\n        {\n            theModel.GreaterThanZero = 10;\n            theRule.ValidateProperty(theModel, x => x.GreaterThanZero)\n                .MessagesFor<SimpleModel>(x => x.GreaterThanZero).Any().ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Fields/LambdaFieldValidationSourceTester.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Fields\n{\n    [TestFixture]\n    public class LambdaFieldValidationSourceTester\n    {\n        private LambdaFieldValidationSource theSource = null;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theSource = null;\n        }\n\n        private IEnumerable<IFieldValidationRule> rulesFor(Expression<Func<LambdaFieldValidationSourceTarget, object>> expression)\n        {\n            var registry = new FieldRulesRegistry(new IFieldValidationSource[]{theSource}, new TypeDescriptorCache());\n            return registry.RulesFor<LambdaFieldValidationSourceTarget>(expression);\n        }\n\n        [Test]\n        public void invoke_lambda_source_without_specifying_a_filter_should_throw_exception()\n        {\n            theSource = new LambdaFieldValidationSource(new RequiredFieldRule());\n\n            Exception<FubuValidationException>.ShouldBeThrownBy(() => theSource.As<IFieldValidationSource>().AssertIsValid())\n                .Message.ShouldBe(\"Missing filter on validation convention\");\n        }\n\n        [Test]\n        public void register_simple_rules_by_filter()\n        {\n            theSource = new LambdaFieldValidationSource(new RequiredFieldRule());\n            theSource.If(a => a.Name.StartsWith(\"Address\"));\n\n            rulesFor(x => x.Name).Any().ShouldBeFalse();\n            rulesFor(x => x.Address1).Single().ShouldBeOfType<RequiredFieldRule>();\n            rulesFor(x => x.Address2).Single().ShouldBeOfType<RequiredFieldRule>();\n        }\n\n        [Test]\n        public void register_simple_rules_by_property_type()\n        {\n            theSource = new LambdaFieldValidationSource(new GreaterThanZeroRule());\n            theSource.IfPropertyType<int>();\n\n            rulesFor(x => x.Name).Any().ShouldBeFalse();\n            rulesFor(x => x.NullableAge).Any().ShouldBeFalse();\n            rulesFor(x => x.Age).Single().ShouldBeOfType<GreaterThanZeroRule>();\n        }\n\n\n        [Test]\n        public void register_simple_rules_by_property_type_filter()\n        {\n            theSource = new LambdaFieldValidationSource(new GreaterThanZeroRule());\n            theSource.IfPropertyType(type => type.IsIntegerBased());\n\n            rulesFor(x => x.Name).Any().ShouldBeFalse();\n            rulesFor(x => x.NullableAge).Single().ShouldBeOfType<GreaterThanZeroRule>();\n            rulesFor(x => x.Age).Single().ShouldBeOfType<GreaterThanZeroRule>();\n        }\n\n        [Test]\n        public void register_simple_rules_by_rule_func()\n        {\n            theSource = new LambdaFieldValidationSource(a =>\n            {\n                var length = int.Parse(a.Name.Substring(7, 1));\n                return new MaximumLengthRule(length);\n            });\n\n            theSource.If(a => a.Name.StartsWith(\"Address\"));\n\n            rulesFor(x => x.Name).Any().ShouldBeFalse();\n            rulesFor(x => x.Address1).Single().ShouldBeOfType<MaximumLengthRule>().Length.ShouldBe(1);\n            rulesFor(x => x.Address2).Single().ShouldBeOfType<MaximumLengthRule>().Length.ShouldBe(2);\n        }\n    }\n\n    public class LambdaFieldValidationSourceTarget\n    {\n        public string Name { get; set; }\n        public string Address1 { get; set; }\n        public string Address2 { get; set; }\n\n        public int Age { get; set; }\n        public int? NullableAge { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Fields/MaxValueFieldRuleTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Fields\n{\n    [TestFixture]\n    public class MaxValueFieldRuleTester\n    {\n        private MaxValueTarget theTarget;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theTarget = new MaxValueTarget();\n        }\n\n        private Notification theNotification\n        {\n            get\n            {\n                var scenario = ValidationScenario<MaxValueTarget>.For(x =>\n                {\n                    x.Model = theTarget;\n                    x.FieldRule(new MaxValueFieldRule(5));\n                });\n\n                return scenario.Notification;\n            }\n        }\n\n\t\t[Test]\n\t\tpublic void uses_the_default_token()\n\t\t{\n\t\t\tnew MaxValueFieldRule(0).Token.ShouldBe(ValidationKeys.MaxValue);\n\t\t}\n\n        [Test]\n        public void registers_a_message_when_the_value_is_greater_than_max()\n        {\n            theTarget.Value = 6;\n            var messages = theNotification.MessagesFor<MaxValueTarget>(x => x.Value);\n            messages.Single().StringToken.ShouldBe(ValidationKeys.MaxValue);\n        }\n\n        [Test]\n        public void no_message_when_equal_to_max()\n        {\n            theTarget.Value = 5;\n            theNotification.MessagesFor<MaxValueTarget>(x => x.Value).Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void no_message_when_less_than_max()\n        {\n            theTarget.Value = 1;\n            theNotification.MessagesFor<MaxValueTarget>(x => x.Value).Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void renders_the_substitutions()\n        {\n            theTarget.Value = 7;\n            var message = theNotification.MessagesFor<MaxValueTarget>(x => x.Value).Single();\n            message.GetMessage().ShouldBe(\"Value must be less than or equal to 5\");\n        }\n\n\n        public class MaxValueTarget\n        {\n            public int Value { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Fields/MaximumLengthRuleTester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Tests.Validation.Models;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Fields\n{\n    [TestFixture]\n    public class MaximumLengthRuleTester\n    {\n        private AddressModel theModel;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theModel = new AddressModel();\n        }\n\n        private Notification theNotification\n        {\n            get\n            {\n                var scenario = ValidationScenario<AddressModel>.For(x =>\n                {\n                    x.Model = theModel;\n                    x.FieldRule(new MaximumLengthRule(5));\n                });\n\n                return scenario.Notification;\n            }\n        }\n\n\t\t[Test]\n\t\tpublic void uses_the_default_token()\n\t\t{\n\t\t\tnew MaximumLengthRule(0).Token.ShouldBe(ValidationKeys.MaxLength);\n\t\t}\n\n        [Test]\n        public void should_not_register_message_if_value_is_null()\n        {\n            theModel.Address1 = null;\n            theNotification.AllMessages.Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void should_register_message_if_string_is_greater_than_limit()\n        {\n            theModel.Address1 = \"Invalid property value\";\n            var theMessage = theNotification.MessagesFor<AddressModel>(x => x.Address1).Single();\n            theMessage.GetMessage().ShouldBe(\"Maximum length exceeded. Must be less than or equal to 5\");\n        }\n\n        [Test]\n        public void should_not_register_a_message_if_property_is_valid()\n        {\n            theModel.Address1 = \"Valid\";\n            theNotification.AllMessages.Any().ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Fields/MinValueFieldRuleTester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Fields\n{\n    [TestFixture]\n    public class MinValueFieldRuleTester\n    {\n        private MinValueTarget theTarget;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theTarget = new MinValueTarget();\n        }\n\n        private Notification theNotification\n        {\n            get\n            {\n                var scenario = ValidationScenario<MinValueTarget>.For(x =>\n                {\n                    x.Model = theTarget;\n                    x.FieldRule(new MinValueFieldRule(10));\n                });\n\n                return scenario.Notification;\n            }\n        }\n\n\t\t[Test]\n\t\tpublic void uses_the_default_token()\n\t\t{\n\t\t\tnew MinValueFieldRule(0).Token.ShouldBe(ValidationKeys.MinValue);\n\t\t}\n\n        [Test]\n        public void registers_a_message_when_the_value_is_less_than_min()\n        {\n            theTarget.Value = 6;\n            var messages = theNotification.MessagesFor<MinValueTarget>(x => x.Value);\n            messages.Single().StringToken.ShouldBe(ValidationKeys.MinValue);\n        }\n\n        [Test]\n        public void no_message_when_equal_to_min()\n        {\n            theTarget.Value = 10;\n            theNotification.MessagesFor<MinValueTarget>(x => x.Value).Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void no_message_when_greater_than_min()\n        {\n            theTarget.Value = 11;\n            theNotification.MessagesFor<MinValueTarget>(x => x.Value).Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void renders_the_substitutions()\n        {\n            theTarget.Value = 7;\n            var message = theNotification.MessagesFor<MinValueTarget>(x => x.Value).Single();\n            message.GetMessage().ShouldBe(\"Value must be greater than or equal to 10\");\n        }\n\n\n        public class MinValueTarget\n        {\n            public int Value { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Fields/MinimumLengthRuleTester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Tests.Validation.Models;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Fields\n{\n    [TestFixture]\n    public class MinimumLengthRuleTester\n    {\n        private AddressModel theModel;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theModel = new AddressModel();\n        }\n\n        private Notification theNotification\n        {\n            get\n            {\n                var scenario = ValidationScenario<AddressModel>.For(x =>\n                {\n                    x.Model = theModel;\n                    x.FieldRule(new MinimumLengthRule(5));\n                });\n\n                return scenario.Notification;\n            }\n        }\n\n\t\t[Test]\n\t\tpublic void uses_the_default_token()\n\t\t{\n\t\t\tnew MinimumLengthRule(0).Token.ShouldBe(ValidationKeys.MinLength);\n\t\t}\n\n        [Test]\n        public void should_not_register_message_if_value_is_null()\n        {\n            theModel.Address1 = null;\n            theNotification.AllMessages.Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void should_register_message_if_string_is_less_than_limit()\n        {\n            theModel.Address1 = \"Inva\";\n            var theMessage = theNotification.MessagesFor<AddressModel>(x => x.Address1).Single();\n            theMessage.GetMessage().ShouldBe(\"Minimum length not met. Must be greater than or equal to 5\");\n        }\n\n        [Test]\n        public void should_not_register_a_message_if_property_is_valid()\n        {\n            theModel.Address1 = \"Valid\";\n            theNotification.AllMessages.Any().ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Fields/RangeLengthFieldRuleTester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Fields\n{\n    [TestFixture]\n    public class RangeLengthFieldRuleTester\n    {\n        private RangeLengthTarget theTarget;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theTarget = new RangeLengthTarget();\n        }\n\n        private Notification theNotification\n        {\n            get\n            {\n                var scenario = ValidationScenario<RangeLengthTarget>.For(x =>\n                {\n                    x.Model = theTarget;\n                    x.FieldRule(new RangeLengthFieldRule(5, 10));\n                });\n\n                return scenario.Notification;\n            }\n        }\n\n\t\t[Test]\n\t\tpublic void uses_the_default_token()\n\t\t{\n\t\t\tnew RangeLengthFieldRule(0, 0).Token.ShouldBe(ValidationKeys.RangeLength);\n\t\t}\n\n        [Test]\n        public void registers_a_message_when_the_length_is_less_than_min()\n        {\n            theTarget.Value = \"1234\";\n            var messages = theNotification.MessagesFor<RangeLengthTarget>(x => x.Value);\n            messages.Single().StringToken.ShouldBe(ValidationKeys.RangeLength);\n        }\n\n        [Test]\n        public void no_message_when_equal_to_min()\n        {\n            theTarget.Value = \"12345\";\n            theNotification.MessagesFor<RangeLengthTarget>(x => x.Value).Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void no_message_when_greater_than_min_and_less_than_max()\n        {\n            theTarget.Value = \"123456789\";\n            theNotification.MessagesFor<RangeLengthTarget>(x => x.Value).Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void no_message_when_equal_to_max()\n        {\n            theTarget.Value = \"1234567890\";\n            theNotification.MessagesFor<RangeLengthTarget>(x => x.Value).Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void registers_a_message_when_the_length_is_greater_than_max()\n        {\n            theTarget.Value = \"12345678910\";\n            var messages = theNotification.MessagesFor<RangeLengthTarget>(x => x.Value);\n            messages.Single().StringToken.ShouldBe(ValidationKeys.RangeLength);\n        }\n\n        [Test]\n        public void renders_the_substitutions()\n        {\n            theTarget.Value = \"1234\";\n            var message = theNotification.MessagesFor<RangeLengthTarget>(x => x.Value).Single();\n            message.GetMessage().ShouldBe(\"Value must be between 5 and 10 characters\");\n        }\n\n\n        public class RangeLengthTarget\n        {\n            public string Value { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Fields/RegularExpressionFieldRuleTester.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Fields\n{\n\t[TestFixture]\n\tpublic class RegularExpressionFieldRuleTester\n\t{\n\t\tprivate RegExTarget theTarget;\n\n\t\t[SetUp]\n\t\tpublic void SetUp()\n\t\t{\n\t\t\ttheTarget = new RegExTarget();\n\t\t}\n\n\t\tprivate Notification theNotification\n\t\t{\n\t\t\tget\n\t\t\t{\n\t\t\t\tvar scenario = ValidationScenario<RegExTarget>.For(x =>\n\t\t\t\t{\n\t\t\t\t\tx.Model = theTarget;\n\t\t\t\t\tx.FieldRule(new RegularExpressionFieldRule(\"[a-zA-Z0-9]+$\"));\n\t\t\t\t});\n\n\t\t\t\treturn scenario.Notification;\n\t\t\t}\n\t\t}\n\n\t\t[Test]\n\t\tpublic void uses_the_default_token()\n\t\t{\n\t\t\tnew RegularExpressionFieldRule(\"[a-zA-Z0-9]+$\").Token.ShouldBe(ValidationKeys.RegEx);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void registers_a_message_when_the_expression_does_not_match()\n\t\t{\n\t\t\ttheTarget.Value = \"hello//\";\n\t\t\tvar messages = theNotification.MessagesFor<RegExTarget>(x => x.Value);\n\t\t\tmessages.Single().StringToken.ShouldBe(ValidationKeys.RegEx);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void no_message_when_the_expression_matches()\n\t\t{\n\t\t\ttheTarget.Value = \"hello\";\n\t\t\ttheNotification.MessagesFor<RegExTarget>(x => x.Value).Any().ShouldBeFalse();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void no_message_when_the_value_is_empty()\n\t\t{\n\t\t\ttheTarget.Value = \"\";\n\t\t\ttheNotification.MessagesFor<RegExTarget>(x => x.Value).Any().ShouldBeFalse();\n\t\t}\n\n\n\t\tpublic class RegExTarget\n\t\t{\n\t\t\tpublic string Value { get; set; }\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Fields/RequiredFieldRuleTester.cs",
    "content": "using System.Linq;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Tests.Validation.Models;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Fields\n{\n    [TestFixture]\n    public class RequiredFieldRuleTester\n    {\n        private AddressModel theTarget;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theTarget = new AddressModel();\n        }\n\n        private Notification theNotification\n        {\n            get\n            {\n                var scenario = ValidationScenario<AddressModel>.For(x =>\n                {\n                    x.Model = theTarget;\n                    x.FieldRule(new RequiredFieldRule());\n                });\n\n                return scenario.Notification;\n            }\n        }\n\n\t\t[Test]\n\t\tpublic void defaults_to_required_key()\n\t\t{\n\t\t\tnew RequiredFieldRule().Token.ShouldBe(ValidationKeys.Required);\n\t\t}\n\n        [Test]\n        public void no_message_if_property_is_valid()\n        {\n            theTarget.Address1 = \"1234 Test Lane\";\n            theNotification.MessagesFor<AddressModel>(x => x.Address1).Any().ShouldBeFalse();\n        }\n\n        [Test]\n        public void registers_message_if_string_value_is_empty()\n        {\n            theTarget.Address1 = \"\";\n            var messages = theNotification.MessagesFor<AddressModel>(x => x.Address1);\n            messages.Single().StringToken.ShouldBe(ValidationKeys.Required);\n        }\n\n        [Test]\n        public void registers_message_if_value_is_null()\n        {\n            theTarget.Address1 = null;\n            theNotification.MessagesFor<AddressModel>(x => x.Address1).Single().StringToken.ShouldBe(ValidationKeys.Required);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Fields/attribute_scanning_tester.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Fields\n{\n    [TestFixture]\n    public class attribute_scanning_tester\n    {\n        private FieldRulesRegistry theRegistry;\n        private ClassFieldValidationRules theRules;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theRegistry = new FieldRulesRegistry(new [] { new AttributeFieldValidationSource()},\n                                                 new TypeDescriptorCache());\n\n            theRules = theRegistry.RulesFor<AttributeScanningTarget>();\n        }\n\n        private IEnumerable<IFieldValidationRule> rulesFor(Expression<Func<AttributeScanningTarget, object>> expression)\n        {\n            return theRules.RulesFor(expression.ToAccessor());\n        }\n\n        [Test]\n        public void found_required_rule()\n        {\n            rulesFor(x => x.Name).Any(x => x is RequiredFieldRule).ShouldBeTrue();\n        }\n\n        [Test]\n        public void found_maximum_string_length_rule()\n        {\n            rulesFor(x => x.Name).OfType<MaximumLengthRule>().Single().Length.ShouldBe(45);\n        }\n\n        [Test]\n        public void found_greater_than_zero()\n        {\n            rulesFor(x => x.Age).Single().ShouldBeOfType<GreaterThanZeroRule>();\n        }\n\n        [Test]\n        public void found_greater_or_equal_to_zero_rule()\n        {\n            rulesFor(x => x.NumberOfChildren).Single().ShouldBeOfType<GreaterOrEqualToZeroRule>();\n        }\n\n        [Test]\n        public void found_collection_length_rule()\n        {\n            rulesFor(x => x.Names).Single().ShouldBeOfType<CollectionLengthRule>()\n                .Length.ShouldBe(2);\n        }\n    }\n\n    public class AttributeScanningTarget\n    {\n        [Required, MaximumStringLength(45)]\n        public string Name { get; set; }\n\n        [GreaterThanZero]\n        public int Age { get; set; }\n\n        [GreaterOrEqualToZero]\n        public int NumberOfChildren { get; set; }\n\n        [CollectionLength(2)]\n        public string[] Names { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/IValidatedRuleSourceTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.Validation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation\n{\n    [TestFixture]\n    public class IValidatedRuleSourceTester\n    {\n        private IValidator theValidator;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theValidator = Validator.BasicValidator();\n        }\n\n        [Test]\n        public void validator_should_call_through_to_validate_method()\n        {\n            theValidator.Validate(new ValidatedClass { IsValid = true }).IsValid().ShouldBeTrue();\n            theValidator.Validate(new ValidatedClass\n            {\n                IsValid = false\n            }).MessagesFor<ValidatedClass>(x => x.Name)\n                .Single().StringToken.ShouldBe(ValidationKeys.Required);\n        }\n    }\n\n    [TestFixture]\n    public class when_building_the_description_for_a_self_validating_class_rule\n    {\n        private Type theType;\n        private SelfValidatingClassRule theRule;\n        private Description theDescription;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theType = typeof (ValidatedClass);\n            theRule = new SelfValidatingClassRule(theType);\n\n            theDescription = Description.For(theRule);\n        }\n\n        [Test]\n        public void sets_the_short_description()\n        {\n            theDescription.ShortDescription.ShouldBe(\"Self Validating Rule: {0}.Validate\".ToFormat(theType.Name));\n        }\n    }\n\n    public class ValidatedClass : IValidated\n    {\n        public void Validate(ValidationContext context)\n        {\n            if (!IsValid)\n            {\n                context.Notification.RegisterMessage<ValidatedClass>(x => x.Name, ValidationKeys.Required);\n            }\n        }\n\n        public bool IsValid { get; set; }\n        public string Name { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/IsValidTester.cs",
    "content": "﻿using FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation\n{\n    [TestFixture]\n    public class IsValidTester\n    {\n        private ValidationContext theContext;\n        private Accessor theAccessor;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theAccessor = ReflectionHelper.GetAccessor<IsValidTarget>(x => x.Name);\n            theContext = ValidationContext.For(new object());\n        }\n\n        [Test]\n        public void invalid()\n        {\n            theContext.Notification.RegisterMessage(theAccessor, StringToken.FromKeyString(\"Test\", \"Test\"));\n            new IsValid().Matches(theAccessor, theContext).ShouldBeFalse();\n        }\n\n        [Test]\n        public void valid()\n        {\n            var otherAccessor = ReflectionHelper.GetAccessor<IsValidTarget>(x => x.Other);\n            theContext.Notification.RegisterMessage(otherAccessor, StringToken.FromKeyString(\"Test\", \"Test\"));\n            new IsValid().Matches(theAccessor, theContext).ShouldBeTrue();\n        }\n\n        public class IsValidTarget\n        {\n            public string Name { get; set; }\n            public string Other { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Models/AddressModel.cs",
    "content": "﻿using FubuMVC.Core.Validation;\n\nnamespace FubuMVC.Tests.Validation.Models\n{\n    public class AddressModel\n    {\n        [Required]\n        public string Address1 { get; set; }\n        public string Address2 { get; set; }\n        [Required]\n        public string City { get; set; }\n        [Required]\n        public string StateOrProvince { get; set; }\n        [Required]\n        public string Country { get; set; }\n        [Required, MaximumStringLength(5)]\n        public string PostalCode { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Models/CompositeModel.cs",
    "content": "using System.Collections.Generic;\nusing FubuMVC.Core.Validation;\n\nnamespace FubuMVC.Tests.Validation.Models\n{\n    public class CompositeModel\n    {\n        public int Id { get; set; }\n        [ContinueValidation]\n        public ContactModel Contact { get; set; }\n        public ContactModel RestrictedContact { get; set; }\n        public IList<ContactModel> Contacts { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Models/ContactModel.cs",
    "content": "using System.Collections.Generic;\nusing FubuMVC.Core.Validation;\n\nnamespace FubuMVC.Tests.Validation.Models\n{\n    public class ContactModel\n    {\n        public ContactModel()\n        {\n            Addresses = new List<AddressModel>();\n        }\n\n        [Required]\n        public string FirstName { get; set; }\n        [Required]\n        public string LastName { get; set; }\n\n        [CollectionLength(1)]\n        public IEnumerable<AddressModel> Addresses { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Models/ModelWithNoAttributes.cs",
    "content": "﻿namespace FubuMVC.Tests.Validation.Models\n{\n    public class ModelWithNoAttributes\n    {\n        public int Id { get; set; }\n        public int AncillaryId { get; set; }\n        public string SomeRequiredString { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Models/SimpleModel.cs",
    "content": "﻿using FubuMVC.Core.Validation;\n\nnamespace FubuMVC.Tests.Validation.Models\n{\n    public class SimpleModel\n    {\n        [GreaterOrEqualToZero]\n        public int GreaterOrEqualToZero { get; set; }\n        [GreaterThanZero]\n        public int GreaterThanZero { get; set; }\n        [MaximumStringLength(10)]\n        public int NoMoreThanTen { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Models/SiteModel.cs",
    "content": "using FubuMVC.Core.Validation;\n\nnamespace FubuMVC.Tests.Validation.Models\n{\n    public class UserModel\n    {\n        [Required]\n        public string Login { get; set; }\n\n        [ContinueValidation]\n        public SiteModel Site { get; set; }\n    }\n\n    public class SiteModel\n    {\n        [Required]\n        public string Name { get; set; }\n\n        [ContinueValidation]\n        public ContactModel Contact { get; set; }\n\n        public ContactModel AlternateContact { get; set; }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/NotificationMessageTester.cs",
    "content": "using System.Linq;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Tests.Validation.Models;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation\n{\n    [TestFixture]\n    public class NotificationMessageTester\n    {\n        [Test]\n        public void create_by_string()\n        {\n            var message = new NotificationMessage(\"Some message\");\n            message.GetMessage().ShouldBe(\"Some message\");\n        }\n\n        [Test]\n        public void get_message_without_subsitutions()\n        {\n            var message = new NotificationMessage(NotificationMessageKeys.NO_SUBSTITUTION);\n            message.GetMessage().ShouldBe(NotificationMessageKeys.NO_SUBSTITUTION.ToString());\n        }\n\n        [Test]\n        public void get_message_with_substitutions()\n        {\n            var message = new NotificationMessage(NotificationMessageKeys.SUBSTITUTE_NAME_AND_AGE)\n                .AddSubstitution(\"Name\", \"Max\")\n                .AddSubstitution(\"Age\", \"7\");\n\n            message.GetMessage().ShouldBe(\"Max is 7 years old\");\n        }\n\n        [Test]\n        public void prepend_property()\n        {\n            var message = new NotificationMessage(ValidationKeys.Required);\n            message.AddAccessor(ReflectionHelper.GetAccessor<ContinuationRuleTester.ContactModel>(x => x.FirstName));\n            message.AddAccessor(ReflectionHelper.GetAccessor<ContinuationRuleTester.ContactModel>(x => x.LastName));\n\n            var property = ReflectionHelper.GetAccessor<CompositeModel>(x => x.Contact);\n\n            var prepended = message.Prepend(property);\n\n            prepended.ShouldNotBeTheSameAs(message);\n            prepended.Accessors.Select(x => x.Name).ShouldHaveTheSameElementsAs(\"ContactFirstName\", \"ContactLastName\");\n            prepended.StringToken.ShouldBe(ValidationKeys.Required);\n        }\n\n        [Test]\n        public void equality_check()\n        {\n            var token = StringToken.FromKeyString(\"Test\", \"1...2...3\");\n            var v1 = TemplateValue.For(\"FirstName\", \"Joel\");\n            var v2 = TemplateValue.For(\"LastName\", \"Arnold\");\n\n            var message1 = new NotificationMessage(token, v1, v2);\n            var message2 = new NotificationMessage(token, v1, v2);\n\n            message1.ShouldBe(message2);\n        }\n\n        [Test]\n        public void equality_check_negative()\n        {\n            var token = StringToken.FromKeyString(\"Test\", \"1...2...3\");\n            var v1 = TemplateValue.For(\"FirstName\", \"Joel\");\n            var v2 = TemplateValue.For(\"LastName\", \"Arnold\");\n\n            var message1 = new NotificationMessage(token, v1, v2);\n            var message2 = new NotificationMessage(token, v1);\n\n            message1.ShouldNotBe(message2);\n        }\n    }\n\n\n\n    public class NotificationMessageKeys : StringToken\n    {\n        protected NotificationMessageKeys(string key, string defaultValue) : base(key, defaultValue)\n        {\n        }\n\n        public static NotificationMessageKeys NO_SUBSTITUTION = new NotificationMessageKeys(\"NO_SUBSTITUTION\", \"Just as it is\");\n        public static NotificationMessageKeys SUBSTITUTE_NAME_AND_AGE = new NotificationMessageKeys(\"SUBSTITUTE_NAME_AND_AGE\", \"{Name} is {Age} years old\");\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/NotificationSnippets.cs",
    "content": "﻿using FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Validation;\n\nnamespace FubuMVC.Tests.Validation\n{\n\tpublic class NotificationSnippets\n\t{\n\t\t public static void RegisterMessages()\n\t\t {\n\t\t\t Accessor accessor = null;\n\t\t\t var notification = new Notification();\n\n\t\t// SAMPLE: RegisteringNotificationMessages\n    // Registering a message\n    notification.RegisterMessage(new NotificationMessage(MyTokens.MyKey));\n\n\t// Helper to register a message for a given StringToken\n\tnotification.RegisterMessage(MyTokens.MyKey);\n\n\t// Register a message for the specific accessor (e.g., \"Username is required\")\n\tnotification.RegisterMessage(accessor, MyTokens.MyKey);\n\t\t// ENDSAMPLE\n\t\t \n\t\t }\n\n\t\tpublic class MyTokens : StringToken\n\t\t{\n\t\t\tpublic static readonly MyTokens MyKey = new MyTokens(\"My Key\");\n\n\t\t\tprotected MyTokens(string defaultValue)\n\t\t\t\t: base(null, defaultValue, namespaceByType: true)\n\t\t\t{\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/NotificationTester.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Tests.Validation.Models;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation\n{\n    [TestFixture]\n    public class NotificationTester\n    {\n        [Test]\n        public void should_ignore_duplicates()\n        {\n            var notification = new Notification();\n            notification.RegisterMessage<EntityToValidate>(e => e.Something, StringToken.FromKeyString(\"test\"));\n            notification.RegisterMessage<EntityToValidate>(e => e.Something, StringToken.FromKeyString(\"test\"));\n            notification.RegisterMessage<EntityToValidate>(e => e.Something, StringToken.FromKeyString(\"test\"));\n            notification.RegisterMessage<EntityToValidate>(e => e.Something, StringToken.FromKeyString(\"test\"));\n            notification.RegisterMessage<EntityToValidate>(e => e.Something, StringToken.FromKeyString(\"test\"));\n\n            notification\n                .AllMessages\n                .ShouldHaveCount(1);\n        }\n\n        [Test]\n        public void valid_should_return_valid_notification()\n        {\n            var notification = new Notification();\n            notification\n                .IsValid()\n                .ShouldBeTrue();\n        }\n\n        [Test]\n        public void should_be_invalid_if_any_messages_are_registered()\n        {\n            var notification = new Notification();\n            notification.RegisterMessage<EntityToValidate>(e => e.Something, StringToken.FromKeyString(\"test\"));\n\n            notification\n                .IsValid()\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void should_return_registered_messages()\n        {\n            var notification = new Notification();\n            notification.RegisterMessage<EntityToValidate>(e => e.Something, StringToken.FromKeyString(\"test1\"));\n            notification.RegisterMessage<EntityToValidate>(e => e.Something, StringToken.FromKeyString(\"test2\"));\n            notification.RegisterMessage<EntityToValidate>(e => e.Something, StringToken.FromKeyString(\"test3\"));\n\n\n            notification\n                .MessagesFor<EntityToValidate>(e => e.Something)\n                .ShouldHaveCount(3);\n        }\n\n        [Test]\n        public void to_validation_error_simple()\n        {\n            var notification = new Notification();\n            notification.RegisterMessage<EntityToValidate>(e => e.Something, StringToken.FromKeyString(\"test1\", \"test1\"));\n            notification.RegisterMessage<EntityToValidate>(e => e.Something, StringToken.FromKeyString(\"test2\", \"test2\"));\n            notification.RegisterMessage<EntityToValidate>(e => e.Something, StringToken.FromKeyString(\"test3\", \"test3\"));\n\n            var errors = notification.ToValidationErrors();\n            CoreExtensions.Count(errors).ShouldBe(3);\n            errors.First().message.ShouldBe(\"test1\");\n            errors.First().field.ShouldBe(\"Something\");\n\n        }\n\n        [Test]\n        public void to_validation_error_when_an_error_is_registered_without_an_accessor()\n        {\n            var notification = new Notification();\n            notification.RegisterMessage(StringToken.FromKeyString(\"test1\", \"test1\"));\n\n            var error = notification.ToValidationErrors().Single();\n            error.message.ShouldBe(\"test1\");\n            error.field.ShouldBeEmpty();\n        }\n\n        [Test]\n        public void to_validation_error_with_localization()\n        {\n            LocalizationManager.Stub();\n\n            var notification = new Notification();\n            notification.RegisterMessage<EntityToValidate>(e => e.Something, StringToken.FromKeyString(\"test1\", \"test1\"));\n\n            var errors = notification.ToValidationErrors();\n            errors.First().label.ShouldBe(\"en-US_Something\");\n        }\n\n        [Test]\n        public void to_validation_error_if_multiple_accessors_match_a_message()\n        {\n            var notification = new Notification();\n            var token = StringToken.FromKeyString(\"test1\", \"test1\");\n            var message = new NotificationMessage(token);\n            message.AddAccessor(ReflectionHelper.GetAccessor<EntityToValidate>(x => x.Something));\n            message.AddAccessor(ReflectionHelper.GetAccessor<EntityToValidate>(x => x.Else));\n\n            notification.RegisterMessage(message);\n\n            var errors = notification.ToValidationErrors();\n            errors.Length.ShouldBe(2);\n\n            errors.Each(x => x.message.ShouldBe(\"test1\"));\n\n            errors.First().field.ShouldBe(\"Something\");\n            errors.Last().field.ShouldBe(\"Else\");\n        }\n\n        [Test]\n        public void add_child()\n        {\n            var child = new Notification();\n            child.RegisterMessage<ContactModel>(x => x.FirstName, ValidationKeys.Required);\n            child.RegisterMessage<ContactModel>(x => x.LastName, ValidationKeys.Required);\n\n            var notification = new Notification(typeof(CompositeModel));\n            var property = ReflectionHelper.GetAccessor<CompositeModel>(x => x.Contact);\n\n            notification.AddChild(property, child);\n\n            notification.MessagesFor<CompositeModel>(x => x.Contact.FirstName).Single().StringToken.ShouldBe(ValidationKeys.Required);\n            notification.MessagesFor<CompositeModel>(x => x.Contact.LastName).Single().StringToken.ShouldBe(ValidationKeys.Required);\n        }\n\n        [Test]\n        public void registering_a_message_adds_the_default_field_template_value()\n        {\n            var accessor = ReflectionHelper.GetAccessor<EntityToValidate>(x => x.Something);\n            var notification = new Notification();\n            notification.RegisterMessage(accessor, new NotificationMessage(StringToken.FromKeyString(\"Test\", \"{field}\")));\n\n            var message = notification.MessagesFor(accessor).Single();\n            message.GetMessage().ShouldBe(LocalizationManager.GetText(accessor.InnerProperty));\n        }\n\n        [Test]\n        public void registering_a_message_with_a_lambda_adds_the_message_to_the_notification()\n        {\n            Expression<Func<EntityToValidate, object>> somethingGetter = x => x.Something;\n            var accessor = ReflectionHelper.GetAccessor(somethingGetter);\n            var notification = new Notification();\n            notification.RegisterMessage(somethingGetter, \"a value\");\n\n            var message = notification.MessagesFor(accessor).Single();\n            message.GetMessage().ShouldBe(\"a value\");\n        }\n\n        #region Nested Type: EntityToValidate\n        public class EntityToValidate\n        {\n            public string Something { get; set; }\n            public string Else { get; set; }\n            public EntityToValidate Child { get; set; }\n        }\n        #endregion\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/RuleSnippets.cs",
    "content": "﻿using FubuMVC.Core.Validation;\n\nnamespace FubuMVC.Tests.Validation\n{\n\tpublic class RuleSnippets\n\t{\n// SAMPLE: GreaterThanZeroRuleAttribute\npublic int GreaterThanZero { get; set; }\n// ENDSAMPLE\n\n// SAMPLE: GreaterThanOrEqualToZeroRuleAttribute\npublic int GreaterOrEqualToZero { get; set; }\n// ENDSAMPLE\n\n// SAMPLE: MinLengthRuleAttribute\npublic string LongerThanTen { get; set; }\n// ENDSAMPLE\n\n// SAMPLE: MaxLengthRuleAttribute\npublic string NoMoreThanFiveCharacters { get; set; }\n// ENDSAMPLE\n\n// SAMPLE: RangeLengthRuleAttribute\npublic string AtLeastFiveButNotTen { get; set; }\n// ENDSAMPLE\n\n// SAMPLE: MinValueRuleAttribute\npublic int GreaterThanFive { get; set; }\n// ENDSAMPLE\n\n// SAMPLE: MaxValueRuleAttribute\npublic double LessThanFifteen { get; set; }\n// ENDSAMPLE\n\n// SAMPLE: EmailRuleAttribute\npublic string Email { get; set; }\n// ENDSAMPLE\n\n// SAMPLE: RequiredRuleAttribute\n[Required]\npublic string Required { get; set; }\n// ENDSAMPLE\n\t}\n\n\tpublic class RuleSnippetsDsl : ClassValidationRules<RuleSnippets>\n\t{\n\t\tpublic RuleSnippetsDsl()\n\t\t{\n// SAMPLE: GreaterThanZeroRuleDsl\nProperty(x => x.GreaterThanZero).GreaterThanZero();\n// ENDSAMPLE\n\n// SAMPLE: GreaterThanOrEqualToZeroRuleDsl\nProperty(x => x.GreaterOrEqualToZero).GreaterOrEqualToZero();\n// ENDSAMPLE\n\n// SAMPLE: MinLengthRuleDsl\nProperty(x => x.LongerThanTen).MinimumLength(10);\n// ENDSAMPLE\n\n// SAMPLE: MaxLengthRuleDsl\nProperty(x => x.NoMoreThanFiveCharacters).MaximumLength(5);\n// ENDSAMPLE\n\n// SAMPLE: RangeLengthRuleDsl\nProperty(x => x.AtLeastFiveButNotTen).RangeLength(5, 10);\n// ENDSAMPLE\n\n// SAMPLE: MinValueRuleDsl\nProperty(x => x.GreaterThanFive).MinValue(5);\n// ENDSAMPLE\n\n// SAMPLE: MaxValueRuleDsl\nProperty(x => x.LessThanFifteen).MaxValue(15);\n// ENDSAMPLE\n\n// SAMPLE: EmailRuleDsl\nProperty(x => x.Email).Email();\n// ENDSAMPLE\n\n// SAMPLE: RequiredRuleDsl\nProperty(x => x.Required).Required();\n// ENDSAMPLE\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/TemplateValueTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Validation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation\n{\n    [TestFixture]\n    public class TemplateValueTester\n    {\n        [Test]\n        public void equals_other_value()\n        {\n            var theTemplate = TemplateValue.For(\"Test\", \"123\");\n            theTemplate.ShouldBe(TemplateValue.For(\"Test\", \"123\"));\n        }\n\n        [Test]\n        public void does_not_equal_value()\n        {\n            var theTemplate = TemplateValue.For(\"Test\", \"123\");\n            theTemplate.ShouldNotBe(TemplateValue.For(\"Test2\", \"1234\"));\n        }\n    }\n\n    [TestFixture]\n    public class TemplateValueCollectionTester\n    {\n        [Test]\n        public void gets_the_values()\n        {\n            var values = new List<TemplateValue>\n            {\n                TemplateValue.For(\"FirstName\", \"Joel\"),\n                TemplateValue.For(\"LastName\", \"Arnold\")\n            };\n\n            var collection = new TemplateValueCollection(values);\n            collection.ShouldHaveTheSameElementsAs(values);\n        }\n\n        [Test]\n        public void gets_the_values_from_the_static_builder()\n        {\n            var v1 = TemplateValue.For(\"FirstName\", \"Joel\");\n            var v2 = TemplateValue.For(\"LastName\", \"Arnold\");\n\n            var collection = TemplateValueCollection.For(v1, v2);\n            collection.ShouldHaveTheSameElementsAs(v1, v2);\n        }\n\n        [Test]\n        public void adds_the_value()\n        {\n            var v1 = TemplateValue.For(\"FirstName\", \"Joel\");\n            var v2 = TemplateValue.For(\"LastName\", \"Arnold\");\n\n            var collection = new TemplateValueCollection();\n            collection.Add(v1);\n            collection.Add(v2);\n\n            collection.ShouldHaveTheSameElementsAs(v1, v2);\n        }\n\n        [Test]\n        public void only_adds_the_value_once()\n        {\n            var v1 = TemplateValue.For(\"FirstName\", \"Joel\");\n\n            var collection = new TemplateValueCollection();\n            collection.Add(v1);\n            collection.Add(v1);\n\n            collection.ShouldHaveTheSameElementsAs(v1);\n        }\n\n        [Test]\n        public void equality_check()\n        {\n            var v1 = TemplateValue.For(\"FirstName\", \"Joel\");\n            var v2 = TemplateValue.For(\"LastName\", \"Arnold\");\n\n            var collection1 = TemplateValueCollection.For(v1, v2);\n            var collection2 = TemplateValueCollection.For(v1, v2);\n\n            collection1.ShouldBe(collection2);\n        }\n\n        [Test]\n        public void equality_check_negative()\n        {\n            var v1 = TemplateValue.For(\"FirstName\", \"Joel\");\n            var v2 = TemplateValue.For(\"LastName\", \"Arnold\");\n\n            var collection1 = TemplateValueCollection.For(v1, v2);\n            var collection2 = TemplateValueCollection.For(v1);\n\n            collection1.ShouldNotBe(collection2);\n        }\n\n        [Test]\n        public void builds_the_dictionary()\n        {\n            var v1 = TemplateValue.For(\"FirstName\", \"Joel\");\n            var v2 = TemplateValue.For(\"LastName\", \"Arnold\");\n\n            var values = TemplateValueCollection.For(v1, v2).ToDictionary();\n            values[\"FirstName\"].ShouldBe(\"Joel\");\n            values[\"LastName\"].ShouldBe(\"Arnold\");\n        }\n    }\n\n    [TestFixture]\n    public class TemplateTester\n    {\n        [Test]\n        public void renders_the_template()\n        {\n            var theValue = TemplateValue.For(\"field\", \"FirstName\");\n            var theTemplate = new Template(StringToken.FromKeyString(\"Test\", \"{field} is required\"), theValue);\n\n            theTemplate.Render().ShouldBe(\"FirstName is required\");\n        }\n\n        [Test]\n        public void equality_check()\n        {\n            var theValue = TemplateValue.For(\"field\", \"FirstName\");\n            var template1 = new Template(StringToken.FromKeyString(\"Test\", \"{field} is required\"), theValue);\n\n            var template2 = new Template(StringToken.FromKeyString(\"Test\", \"{field} is required\"));\n            template2.Values.Add(theValue);\n\n            template1.ShouldBe(template2);\n        }\n\n        [Test]\n        public void equality_check_negative()\n        {\n            var theValue = TemplateValue.For(\"field\", \"FirstName\");\n            var template1 = new Template(StringToken.FromKeyString(\"Test\", \"{field} is required\"), theValue);\n\n            var template2 = new Template(StringToken.FromKeyString(\"Test2\", \"{field} is invalid\"));\n            template2.Values.Add(theValue);\n\n            template1.ShouldNotBe(template2);\n\n            var template3 = new Template(StringToken.FromKeyString(\"Test3\", \"{field} is required\"));\n            template1.ShouldNotBe(template3);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/ValidationCompilerTester.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.Validation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation\n{\n    [TestFixture]\n    public class ValidationCompilerTester\n    {\n        [Test]\n        public void picks_up_all_the_validation_registrations()\n        {\n            using (var runtime = FubuRuntime.Basic())\n            {\n                var graph = runtime.Get<ValidationGraph>();\n\n                FakeValidationRegistration.Configured.ShouldBeSameAs(graph);\n                FakeValidationRegistration2.Configured.ShouldBeSameAs(graph);\n                FakeValidationRegistration3.Configured.ShouldBeSameAs(graph);\n            }\n        }\n    }\n\n    public class FakeValidationRegistration : IValidationRegistration\n    {\n        public static ValidationGraph Configured;\n\n        public void Register(ValidationGraph graph)\n        {\n            Configured = graph;\n        }\n    }\n\n    public class FakeValidationRegistration2 : IValidationRegistration\n    {\n        public static ValidationGraph Configured;\n\n        public void Register(ValidationGraph graph)\n        {\n            Configured = graph;\n        }\n    }\n\n    public class FakeValidationRegistration3 : IValidationRegistration\n    {\n        public static ValidationGraph Configured;\n\n        public void Register(ValidationGraph graph)\n        {\n            Configured = graph;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/ValidationContextTester.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Validation;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation\n{\n    [TestFixture]\n    public class ValidationContextTester\n    {\n        private ValidationContextTarget theTarget;\n        private ValidationContext theContext;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theTarget = new ValidationContextTarget(){\n                Name = \"Jeremy\",\n                Number = 25\n            };\n\n            theContext = new ValidationContext(null, new Notification(), theTarget);\n        }\n\n        private T get<T>(Expression<Func<ValidationContextTarget, object>> property)\n        {\n            var accessor = ReflectionHelper.GetAccessor(property);\n            return theContext.GetFieldValue<T>(accessor);\n        }\n\n        [Test]\n        public void get_value_when_the_type_is_correct()\n        {\n            get<string>(x => x.Name).ShouldBe(\"Jeremy\");\n        }\n\n        [Test]\n        public void get_value_when_the_type_matches_2()\n        {\n            get<int>(x => x.Number).ShouldBe(25);\n        }\n\n        [Test]\n        public void services_defaults_to_in_memory()\n        {\n            theContext.ServiceLocator.ShouldBeOfType<InMemoryServiceLocator>();\n        }\n\n        [Test]\n        public void gets_the_service()\n        {\n            var theServices = new InMemoryServiceLocator();\n            var theService = new TestService();\n            theServices.Add(theService);\n\n            theContext.ServiceLocator = theServices;\n\n            theContext.Service<TestService>().ShouldBeTheSameAs(theService);\n        }\n\n        public class TestService\n        {\n        }\n    }\n\n    public class ValidationContextTarget\n    {\n        public string Name { get; set; }\n        public int Number { get; set; }\n        \n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/ValidationGraphTester.cs",
    "content": "﻿using FubuCore.Reflection;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation\n{\n    [TestFixture]\n    public class ValidationGraphTester\n    {\n        private SelfValidatingClassRuleSource theSelfValidatingSource;\n        private ValidationGraph theGraph;\n        private FieldRulesRegistry theFieldRegistry;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theSelfValidatingSource = new SelfValidatingClassRuleSource();\n\n            theFieldRegistry = new FieldRulesRegistry(new IFieldValidationSource[0], new TypeDescriptorCache());\n            theGraph = new ValidationGraph(theFieldRegistry, new IValidationSource[0]);\n        }\n\n        [Test]\n        public void adds_the_SelfValidatingClassRuleSource_by_default()\n        {\n            theGraph.Sources.ShouldContain(theSelfValidatingSource);\n        }\n\n        [Test]\n        public void adds_the_field_rule_source_by_default()\n        {\n            theGraph.Sources.ShouldContain(s => s is FieldRuleSource);\n        }\n\n        [Test]\n        public void adds_the_source()\n        {\n            var theSource = MockRepository.GenerateStub<IValidationSource>();\n            theGraph.RegisterSource(theSource);\n            theGraph.Sources.ShouldContain(theSource);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/ValidationPlanTester.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Tests.Validation.Models;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation\n{\n    [TestFixture]\n    public class ValidationPlanTester\n    {\n        private ValidationPlan thePlan;\n        private ValidationGraph theGraph;\n        private ConfiguredValidationSource theMatchingSource;\n        private ConfiguredValidationSource theOtherSource;\n\n        private Type theType;\n\n        private IValidationRule r1;\n        private IValidationRule r2;\n        private IValidationRule r3;\n\n        private object theModel;\n        private ValidationContext theContext;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theModel = new ContactModel();\n            theType = theModel.GetType();\n\n            r1 = MockRepository.GenerateStub<IValidationRule>();\n            r2 = MockRepository.GenerateStub<IValidationRule>();\n            r3 = MockRepository.GenerateStub<IValidationRule>();\n\n            theMatchingSource = ConfiguredValidationSource.For(type => type == theType, r1, r2);\n            theOtherSource = ConfiguredValidationSource.For(type => type == typeof(int), r3);\n\n            theGraph = ValidationGraph.BasicGraph();\n            theGraph.RegisterSource(theMatchingSource);\n            theGraph.RegisterSource(theOtherSource);\n\n            theContext = ValidationContext.For(theModel);\n\n            thePlan = ValidationPlan.For(theType, theGraph);\n        }\n\n        [Test]\n        public void creates_a_step_for_each_rule()\n        {\n            Debug.WriteLine(thePlan.ToDescriptionText());\n            var theStep = thePlan.Steps.Single(x => x.Source == typeof(ConfiguredValidationSource));\n            theStep.Rules.ShouldHaveTheSameElementsAs(r1, r2);\n        }\n\n        [Test]\n        public void executes_each_step()\n        {\n            thePlan.Execute(theContext);\n\n            r1.AssertWasCalled(x => x.Validate(theContext));\n            r2.AssertWasCalled(x => x.Validate(theContext));\n        }\n\n        [Test]\n        public void builds_up_the_field_rules()\n        {\n            thePlan.FieldRules.HasRule<RequiredFieldRule>(ReflectionHelper.GetAccessor<ContactModel>(x => x.FirstName)).ShouldBeTrue();\n        }\n\n\t\t[Test]\n\t\tpublic void finds_the_rules_from_all_steps()\n\t\t{\n\t\t\tvar r1 = new StubRule();\n\t\t\tvar r2 = new StubRule();\n\t\t\tvar r3 = new ClassFieldValidationRules();\n\t\t\tvar r4 = new ClassFieldValidationRules();\n\n\t\t\tvar src1 = new ConfiguredValidationSource(new IValidationRule[] { r1, r3 });\n\t\t\tvar src2 = new ConfiguredValidationSource(new IValidationRule[] { r2, r4 });\n\n\t\t\tvar step1 = ValidationStep.FromSource(typeof(object), src1);\n\t\t\tvar step2 = ValidationStep.FromSource(typeof(object), src2);\n\n\t\t\tvar plan = new ValidationPlan(typeof (object), new[] {step1, step2});\n\t\t\tplan.FindRules<StubRule>().ShouldHaveTheSameElementsAs(r1, r2);\n\t\t}\n    }\n\n    [TestFixture]\n    public class when_building_the_description_for_the_validation_plan\n    {\n        private ValidationPlan thePlan;\n        private Description theDescription;\n        private BulletList theStepList;\n\n        [SetUp]\n        public void SetUp()\n        {\n            thePlan = new ValidationPlan(typeof(string), new ValidationStep[0]);\n\n            theDescription = Description.For(thePlan);\n            theStepList = theDescription.BulletLists.Single();\n        }\n\n        [Test]\n        public void the_short_description_of_the_plan()\n        {\n            theDescription.ShortDescription.ShouldBe(\"Validate {0}\".ToFormat(typeof (string).Name));\n        }\n\n        [Test]\n        public void the_name_and_the_label_of_the_validation_step_list()\n        {\n            theStepList.Name.ShouldBe(\"ValidationSteps\");\n            theStepList.Label.ShouldBe(\"Validation Steps\");\n        }\n\n        [Test]\n        public void the_validation_step_list_must_be_marked_as_order_dependent()\n        {\n            theStepList.IsOrderDependent.ShouldBeTrue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/ValidationStepTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Descriptions;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Tests.Validation.Models;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation\n{\n    [TestFixture]\n    public class ValidationStepTester\n    {\n        private ValidationStep theStep;\n        private object theModel;\n        private Type theSource;\n        private IValidationRule r1;\n        private IValidationRule r2;\n        private ValidationContext theContext;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theModel = new SimpleModel();\n\n            r1 = MockRepository.GenerateStub<IValidationRule>();\n            r2 = MockRepository.GenerateStub<IValidationRule>();\n            theSource = typeof(ConfiguredValidationSource);\n\n            theContext = ValidationContext.For(theModel);\n\n            theStep = new ValidationStep(theModel.GetType(), theSource, new[] { r1, r2 });\n        }\n\n        [Test]\n        public void the_source()\n        {\n            theStep.Source.ShouldBe(theSource);\n        }\n\n        [Test]\n        public void sets_the_rules()\n        {\n            theStep.Rules.ShouldHaveTheSameElementsAs(r1, r2);\n        }\n\n        [Test]\n        public void executes_each_rule()\n        {\n            theStep.Execute(theContext);\n\n            r1.AssertWasCalled(x => x.Validate(theContext));\n            r2.AssertWasCalled(x => x.Validate(theContext));\n        }\n\n\t\t[Test]\n\t\tpublic void finds_the_rules()\n\t\t{\n\t\t\tvar r1 = new StubRule();\n\t\t\tvar r2 = new StubRule();\n\t\t\tvar r3 = new ClassFieldValidationRules();\n\n\t\t\tvar src = new ConfiguredValidationSource(new IValidationRule[] {r1, r2, r3});\n\t\t\tvar step = ValidationStep.FromSource(typeof (object), src);\n\n\t\t\tstep.FindRules<StubRule>().ShouldHaveTheSameElementsAs(r1, r2);\n\t\t}\n    }\n\n\tpublic class StubRule : IValidationRule\n\t{\n\t\tpublic void Validate(ValidationContext context)\n\t\t{\n\t\t\tthrow new NotImplementedException();\n\t\t}\n\t}\n\n    [TestFixture]\n    public class when_building_the_description_for_the_validation_step\n    {\n        private ValidationStep theStep;\n        private Description theDescription;\n        private BulletList theRuleList;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theStep = new ValidationStep(typeof(string), typeof(ConfiguredValidationSource), new IValidationRule[] { new Rule1(), new Rule2()  });\n\n            theDescription = Description.For(theStep);\n            theRuleList = theDescription.BulletLists.Single();\n        }\n\n        [Test]\n        public void the_short_description_of_the_step()\n        {\n            theDescription.ShortDescription.ShouldBe(\"Validate {0} from {1}\".ToFormat(typeof(string).Name, typeof(ConfiguredValidationSource).Name));\n        }\n\n        [Test]\n        public void the_name_and_the_label_of_the_validation_rule_list()\n        {\n            theRuleList.Name.ShouldBe(\"ValidationRules\");\n            theRuleList.Label.ShouldBe(\"Validation Rules\");\n        }\n\n        [Test]\n        public void the_validation_rules_list_must_be_marked_as_order_dependent()\n        {\n            theRuleList.IsOrderDependent.ShouldBeTrue();\n        }\n\n        public class Rule1 : IValidationRule\n        {\n            public void Validate(ValidationContext context)\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        public class Rule2 : IValidationRule\n        {\n            public void Validate(ValidationContext context)\n            {\n                throw new NotImplementedException();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/ValidatorTester.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Tests.TestSupport;\nusing FubuMVC.Tests.Validation.Models;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation\n{\n    [TestFixture]\n    public class ValidatorTester : InteractionContext<Validator>\n    {\n        private SimpleModel theModel;\n        private RecordingValidationRule theRecordingRule;\n        private ValidationContext theContext;\n        private ValidationGraph theGraph;\n\n        protected override void beforeEach()\n        {\n            theModel = new SimpleModel();\n            theRecordingRule = new RecordingValidationRule();\n\n            var theSource = ConfiguredValidationSource.For(theModel.GetType(), theRecordingRule);\n            theGraph = ValidationGraph.For(theSource);\n\n            Services.Inject<ITypeResolver>(new TypeResolver());\n            Services.Inject(theGraph);\n\n            ClassUnderTest.Validate(theModel);\n\n            theContext = theRecordingRule.Context;\n        }\n\n        [Test]\n        public void sets_the_target_type()\n        {\n            theContext.TargetType.ShouldBe(theModel.GetType());\n        }\n\n        [Test]\n        public void sets_the_type_resolver()\n        {\n            theContext.Resolver.ShouldBe(MockFor<ITypeResolver>());\n        }\n\n        [Test]\n        public void sets_the_service_locator()\n        {\n            theContext.ServiceLocator.ShouldBe(MockFor<IServiceLocator>());\n        }\n\n        public class RecordingValidationRule : IValidationRule\n        {\n            public ValidationContext Context;\n\n            public void Validate(ValidationContext context)\n            {\n                Context = context;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/AccessorRulesFieldSourceTester.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n    [TestFixture]\n    public class AccessorRulesFieldSourceTester\n    {\n        private AccessorRules theRules;\n        private AccessorRulesFieldSource theSource;\n        private Accessor a1;\n        private Accessor a2;\n        private Accessor a3;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theRules = new AccessorRules();\n            a1 = accessor(x => x.Prop1);\n            a2 = accessor(x => x.Prop2);\n            a3 = accessor(x => x.Prop3);\n\n            theRules.Add(a1, new RequiredFieldRule());\n            theRules.Add(a3, new EmailFieldRule());\n            theRules.Add(a3, new GreaterThanZeroRule());\n\n            theSource = new AccessorRulesFieldSource(theRules);\n        }\n\n        private Accessor accessor(Expression<Func<AccessorRulesTarget, object>> expression)\n        {\n            return ReflectionHelper.GetAccessor(expression);\n        }\n\n        [Test]\n        public void gets_the_rules_by_accessor()\n        {\n            theSource.RulesFor(a1.InnerProperty).ShouldHaveTheSameElementsAs(new RequiredFieldRule());\n            theSource.RulesFor(a2.InnerProperty).ShouldHaveCount(0);\n            theSource.RulesFor(a3.InnerProperty).ShouldHaveTheSameElementsAs(new EmailFieldRule(), new GreaterThanZeroRule());\n        }\n\n\n        public class AccessorRulesTarget\n        {\n            public string Prop1 { get; set; }\n            public string Prop2 { get; set; }\n            public string Prop3 { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/AccessorRulesValidationModePolicyTester.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n\t[TestFixture]\n\tpublic class AccessorRulesValidationModePolicyTester\n\t{\n\t\tprivate IServiceLocator services()\n\t\t{\n\t\t\tvar rules = new AccessorRules();\n\n\t\t\tvar overrides = new AccessorRulesValidationOverrides();\n\t\t\toverrides.As<IAccessorRulesRegistration>().AddRules(rules);\n\n\t\t\tvar services = new InMemoryServiceLocator();\n\t\t\tservices.Add(rules);\n\n\t\t\treturn services;\n\t\t}\n\n\t\tprivate ValidationMode modeFor(Expression<Func<AccessorRulesValidationModeTarget, object>> expression)\n\t\t{\n\t\t\tvar accessor = SingleProperty.Build(expression);\n\t\t\treturn new AccessorRulesValidationModePolicy().DetermineMode(services(), accessor);\n\t\t}\n\n\t\tprivate bool matches(Expression<Func<AccessorRulesValidationModeTarget, object>> expression)\n\t\t{\n\t\t\tvar accessor = SingleProperty.Build(expression);\n\t\t\treturn new AccessorRulesValidationModePolicy().Matches(services(), accessor);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void matches_requests_for_properties_with_live_validation()\n\t\t{\n\t\t\tmatches(x => x.Live).ShouldBeTrue();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void matches_requests_for_properties_with_triggered_validation()\n\t\t{\n\t\t\tmatches(x => x.Triggered).ShouldBeTrue();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void matches_requests_for_properties_with_no_validation_mode()\n\t\t{\n\t\t\tmatches(x => x.Ignored).ShouldBeFalse();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void mode_is_determined_from_accessor_rules_live()\n\t\t{\n\t\t\tmodeFor(x => x.Live).ShouldBe(ValidationMode.Live);\n\t\t}\n\n\n\t\t[Test]\n\t\tpublic void mode_is_determined_from_accessor_rules_triggered()\n\t\t{\n\t\t\tmodeFor(x => x.Triggered).ShouldBe(ValidationMode.Triggered);\n\t\t}\n\n\t\tpublic class AccessorRulesValidationModeTarget\n\t\t{\n\t\t\tpublic string Live { get; set; }\n\t\t\tpublic string Triggered { get; set; }\n\t\t\tpublic string Ignored { get; set; }\n\t\t}\n\n\t\tpublic class AccessorRulesValidationOverrides : OverridesFor<AccessorRulesValidationModeTarget>\n\t\t{\n\t\t\tpublic AccessorRulesValidationOverrides()\n\t\t\t{\n\t\t\t\tProperty(x => x.Live).LiveValidation();\n\t\t\t\tProperty(x => x.Triggered).TriggeredValidation();\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/AjaxContinuationResolverTester.cs",
    "content": "using FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n    [TestFixture]\n    public class AjaxContinuationResolverTester\n    {\n        private AjaxContinuationResolver theResolver;\n        private RecordingAjaxContinuationModifier theModifier;\n        private Notification theNotification;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theModifier = new RecordingAjaxContinuationModifier();\n            theResolver = new AjaxContinuationResolver(new[] { theModifier });\n            theNotification = new Notification();\n\n            theResolver.Resolve(theNotification);\n        }\n\n        [Test]\n        public void modifies_the_continuation()\n        {\n            theModifier.Continuation.ShouldNotBeNull();\n            theModifier.Notification.ShouldBeTheSameAs(theNotification);\n        }\n\n        public class RecordingAjaxContinuationModifier : IAjaxContinuationModifier\n        {\n            public AjaxContinuation Continuation { get; private set; }\n            public Notification Notification { get; private set; }\n\n            public void Modify(AjaxContinuation continuation, Notification notification)\n            {\n                Continuation = continuation;\n                Notification = notification;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/AjaxValidationActionFilterTester.cs",
    "content": "﻿using FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Behaviors;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n    [TestFixture]\n    public class AjaxValidationBehaviorTester : InteractionContext<AjaxValidationBehavior<SampleInputModel>>\n    {\n        private SampleInputModel theInput;\n        private Notification theNotification;\n        private AjaxContinuation theAjaxContinuation;\n\n        protected override void beforeEach()\n        {\n            theInput = new SampleInputModel();\n            theNotification = new Notification();\n            theAjaxContinuation = new AjaxContinuation();\n\n            ClassUnderTest.InsideBehavior = MockFor<IActionBehavior>();\n            MockFor<IFubuRequest>().Stub(x => x.Get<SampleInputModel>()).Return(theInput);\n            MockFor<IValidationFilter<SampleInputModel>>().Stub(x => x.Validate(theInput)).Return(theNotification);\n            MockFor<IAjaxContinuationResolver>().Stub(x => x.Resolve(theNotification)).Return(theAjaxContinuation);\n        }\n\n        [Test]\n        public void continues_to_next_behavior_when_validation_succeeds()\n        {\n            ClassUnderTest.Invoke();\n            MockFor<IActionBehavior>().AssertWasCalled(x => x.Invoke());\n        }\n\n        [Test]\n        public void writes_the_ajax_continuation_when_validation_fails()\n        {\n            theNotification.RegisterMessage(StringToken.FromKeyString(\"Test\"));\n            ClassUnderTest.Invoke();\n\n            MockFor<IAjaxValidationFailureHandler>().AssertWasCalled(x => x.Handle(theNotification));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/AjaxValidationFailureHandlerTester.cs",
    "content": "﻿using System.Net;\nusing FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n    [TestFixture]\n    public class AjaxValidationFailureHandlerTester : InteractionContext<AjaxValidationFailureHandler>\n    {\n        private AjaxContinuation theAjaxContinuation;\n        private Notification theNotification;\n        private ValidationSettings theSettings;\n\n        protected override void beforeEach()\n        {\n            theNotification = new Notification();\n            theAjaxContinuation = new AjaxContinuation();\n\n            theSettings = new ValidationSettings();\n            theSettings.FailAjaxRequestsWith(HttpStatusCode.SeeOther);\n\n            Services.Inject(theSettings);\n\n            MockFor<IAjaxContinuationResolver>().Stub(x => x.Resolve(theNotification)).Return(theAjaxContinuation);\n            ClassUnderTest.Handle(theNotification);\n        }\n\n        [Test]\n        public void writes_bad_request_status_code()\n        {\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.WriteResponseCode(theSettings.StatusCode));\n        }\n\n        [Test]\n        public void sets_the_continuation_in_the_request()\n        {\n            MockFor<IFubuRequest>().AssertWasCalled(x => x.Set(theAjaxContinuation));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/AjaxValidationTester.cs",
    "content": "using FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n    [TestFixture]\n    public class AjaxValidationTester\n    {\n        private Notification theNotification;\n\n        [SetUp]\n        public void SetUp()\n        {\n\t\t\tLocalizationManager.Stub();\n\n            theNotification = new Notification(typeof(SampleInputModel));\n            theNotification.RegisterMessage<SampleInputModel>(m => m.Field, StringToken.FromKeyString(\"Field\", \"Message\"));\n        }\n\n\n        [Test]\n        public void should_add_corresponding_errors()\n        {\n            theContinuation\n                .Errors\n                .ShouldHaveCount(1);\n        }\n\n        [Test]\n        public void should_set_field_for_errors()\n        {\n            theContinuation\n                .Errors\n                .ShouldContain(e => e.field.Equals(\"Field\"));\n        }\n\n\t\t[Test]\n\t\tpublic void sets_the_label()\n\t\t{\n\t\t\ttheContinuation\n\t\t\t\t.Errors\n\t\t\t\t.ShouldContain(e => e.label.Equals(\"en-US_Field\"));\n\t\t}\n\n        [Test]\n        public void should_set_messages_for_errors()\n        {\n            theContinuation\n                .Errors\n                .ShouldContain(e => e.message.Equals(\"Message\"));\n        }\n\n        [Test]\n        public void should_set_success_flag()\n        {\n            theContinuation\n                .Success\n                .ShouldBeFalse();\n\n            theNotification = new Notification(typeof(SampleInputModel));\n\n            theContinuation\n                .Success\n                .ShouldBeTrue();\n        }\n\n        private AjaxContinuation theContinuation\n        {\n            get { return AjaxValidation.BuildContinuation(theNotification); }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/Bugs/defining_field_rules_on_a_base_class_is_not_catching_on_the_subclass.cs",
    "content": "﻿using FubuCore.Descriptions;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.Bugs\n{\n    [TestFixture]\n    public class defining_field_rules_on_a_base_class_is_not_catching_on_the_subclass\n    {\n        [Test, Explicit]\n        public void should_be_able_to_resolve_the_field_rules()\n        {\n            using (var runtime = FubuRuntime.Basic(_ => _.Features.Validation.Enable(true)))\n            {\n                var graph = runtime.Get<ValidationGraph>();\n\n                var plan = graph.PlanFor(typeof (MySubclass));\n\n                plan.FieldRules.RulesFor<MySubclass>(x => x.FirstName).Count().ShouldBe(2);\n\n                plan.WriteDescriptionToConsole();\n\n                var query = runtime.Get<FieldValidationQuery>();\n                query.RulesFor<MySubclass>(x => x.FirstName).Count().ShouldBe(2);\n            }\n        }\n    }\n\n    public class MyBase\n    {\n        public string FirstName { get; set; }\n    }\n\n    public class MySubclass : MyBase\n    {\n        \n    }\n\n    public class MySubclassRules : MyBaseRules<MySubclass>\n    {\n        public MySubclassRules()\n        {\n            Property(x => x.FirstName).MaximumLength(50);\n        }\n    }\n\n    public class MyBaseRules<T> : ClassValidationRules<T> where T : MyBase\n    {\n        public MyBaseRules()\n        {\n            Require(x => x.FirstName);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/ModelBindingErrorsTester.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.Binding;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n    [TestFixture]\n    public class ModelBindingErrorsTester : InteractionContext<ModelBindingErrors>\n    {\n        [Test]\n        public void should_place_problems_into_the_notification()\n        {\n            MockFor<IFubuRequest>().Stub(x => x.ProblemsFor<ValidationTarget>()).Return(problems());\n\n            var notification = new Notification();\n\n            ClassUnderTest.AddAnyErrors<ValidationTarget>(notification);\n\n            notification.MessagesFor<ValidationTarget>(x => x.Number).Single().StringToken.ShouldBe(ValidationKeys.InvalidFormat);\n            notification.MessagesFor<ValidationTarget>(x => x.Time).Single().StringToken.ShouldBe(ValidationKeys.InvalidFormat);\n            \n            notification.MessagesFor<ValidationTarget>(x => x.Other)\n                .Any().ShouldBeFalse();\n        \n        }\n\n        private IEnumerable<ConvertProblem> problems()\n        {\n            yield return new ConvertProblem{Property = ReflectionHelper.GetProperty<ValidationTarget>(x => x.Number)};\n            yield return new ConvertProblem{Property = ReflectionHelper.GetProperty<ValidationTarget>(x => x.Time)};\n        }\n\n        public class ValidationTarget\n        {\n            public int Number { get; set; }\n            public DateTime Time { get; set; }\n            public int Other { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/Remote/RemoteFieldRuleTester.cs",
    "content": "using System;\nusing System.Linq.Expressions;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web.Remote;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.Remote\n{\n    [TestFixture]\n    public class RemoteFieldRuleTester\n    {\n        private Accessor accessorFor(Expression<Func<RemoteFieldModel, object>> expression)\n        {\n            return expression.ToAccessor();\n        }\n\n        [Test]\n        public void equality_check()\n        {\n            var accessor = accessorFor(x => x.Name);\n\n\t        var r1 = RemoteFieldRule.For<RequiredFieldRule>(accessor);\n\t\t\tvar r2 = RemoteFieldRule.For<RequiredFieldRule>(accessor);\n\n            r1.ShouldBe(r2);\n        }\n\n        [Test]\n        public void equality_check_negative_accessor()\n        {\n            var r1 = RemoteFieldRule.For<RequiredFieldRule>(accessorFor(x => x.Name));\n            var r2 = RemoteFieldRule.For<RequiredFieldRule>(accessorFor(x => x.Test));\n\n            r1.ShouldNotBe(r2);\n        }\n\n        [Test]\n        public void equality_check_negative_type()\n        {\n            var accessor = accessorFor(x => x.Name);\n\n\t\t\tvar r1 = RemoteFieldRule.For<RequiredFieldRule>(accessor);\n\t\t\tvar r2 = RemoteFieldRule.For<EmailFieldRule>(accessor);\n\n            r1.ShouldNotBe(r2);\n        }\n\n        [Test]\n        public void hash_is_repeatable()\n        {\n\t\t\tvar r1 = RemoteFieldRule.For<RequiredFieldRule>(accessorFor(x => x.Name));\n\t\t\tvar r2 = RemoteFieldRule.For<RequiredFieldRule>(accessorFor(x => x.Name));\n\n            r1.ToHash().ShouldBe(r2.ToHash());\n        }\n\n        [Test]\n        public void hash_is_unique_by_rule_model_and_accessor()\n        {\n            var r1 = RemoteFieldRule.For<RequiredFieldRule>(SingleProperty.Build<SomeNamespace.Model>(e => e.Property));\n\t\t\tvar r2 = RemoteFieldRule.For<RequiredFieldRule>(SingleProperty.Build<OtherNamespace.Model>(e => e.Property));\n\n            r1.ToHash().ShouldNotBe(r2.ToHash());\n        }\n\n        public class RemoteFieldModel\n        {\n            public string Name { get; set; }\n            public string Test { get; set; }\n        }\n    }\n\n    namespace SomeNamespace\n    {\n        public class Model\n        {\n            public string Property { get; set; }\n        }\n    }\n\n    namespace OtherNamespace\n    {\n        public class Model\n        {\n            public string Property { get; set; }\n        }\n    }\n\n}\n"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/Remote/RemoteFieldValidationRuleFilterTester.cs",
    "content": "﻿using FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web.Remote;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.Remote\n{\n    [TestFixture]\n    public class RemoteFieldValidationRuleFilterTester\n    {\n        private RemoteFieldValidationRuleFilter theFilter;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theFilter = new RemoteFieldValidationRuleFilter();\n        }\n\n        [Test]\n        public void matches_rules_that_implment_IRemoteFieldValidationRule()\n        {\n            theFilter.Matches(new RemoteRuleStub()).ShouldBeTrue();\n        }\n\n        [Test]\n        public void does_not_match_rules_that_do_not_implement_IRemoteFieldValidationRule()\n        {\n            theFilter.Matches(new RequiredFieldRule()).ShouldBeFalse();\n        }\n\n        public class RemoteRuleStub : IRemoteFieldValidationRule\n        {\n\t        public StringToken Token { get; set; }\n\n\t\t\tpublic ValidationMode Mode { get; set; }\n\n\t        public void Validate(Accessor accessor, ValidationContext context)\n            {\n                throw new System.NotImplementedException();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/Remote/RemoteRuleAttributeFilterTester.cs",
    "content": "﻿using FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web.Remote;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.Remote\n{\n    [TestFixture]\n    public class RemoteRuleAttributeFilterTester\n    {\n        private RemoteRuleAttributeFilter theFilter;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theFilter = new RemoteRuleAttributeFilter();\n        }\n\n        [Test]\n        public void matches_rules_with_the_remote_attribute()\n        {\n            theFilter.Matches(new RuleWithRemoteAttribute()).ShouldBeTrue();\n        }\n\n        [Test]\n        public void does_not_match_rules_without_the_rule_attribute()\n        {\n            theFilter.Matches(new RequiredFieldRule()).ShouldBeFalse();\n        }\n\n        [Remote]\n        public class RuleWithRemoteAttribute : IFieldValidationRule\n        {\n\t        public StringToken Token { get; set; }\n\n\t\t\tpublic ValidationMode Mode { get; set; }\n\n\t        public void Validate(Accessor accessor, ValidationContext context)\n            {\n                throw new System.NotImplementedException();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/Remote/RemoteRuleGraphTester.cs",
    "content": "using FubuCore.Reflection;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web.Remote;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.Remote\n{\n    [TestFixture]\n    public class RemoteRuleGraphTester\n    {\n        private RemoteRuleGraph theGraph;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theGraph = new RemoteRuleGraph();\n        }\n\n        [Test]\n        public void registers_rules()\n        {\n            var a1 = ReflectionHelper.GetAccessor<RuleGraphModel>(x => x.FirstName);\n            var a2 = ReflectionHelper.GetAccessor<RuleGraphModel>(x => x.LastName);\n            \n            var r1 = new RequiredFieldRule();\n            var r2 = new MinimumLengthRule(5);\n\n            theGraph.RegisterRule(a1, r1);\n            theGraph.RegisterRule(a1, r2);\n\n            theGraph.RegisterRule(a2, r1);\n\n            theGraph.RulesFor(a1).ShouldHaveTheSameElementsAs(RemoteFieldRule.For(a1, r1), RemoteFieldRule.For(a1, r2));\n            theGraph.RulesFor(a2).ShouldHaveTheSameElementsAs(RemoteFieldRule.For(a2, r1));\n        }\n\n        [Test]\n        public void finds_the_rule_by_the_hash()\n        {\n            var a1 = ReflectionHelper.GetAccessor<RuleGraphModel>(x => x.FirstName);\n            var r1 = new RequiredFieldRule();\n\n            theGraph.RegisterRule(a1, r1);\n\n            var remote = RemoteFieldRule.For(a1, r1);\n\n            theGraph.RuleFor(remote.ToHash()).ShouldBe(remote);\n        }\n\n        public class RuleGraphModel\n        {\n            public string FirstName { get; set; }\n            public string LastName { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/Remote/RemoteRuleQueryTester.cs",
    "content": "﻿using FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web.Remote;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.Remote\n{\n    [TestFixture]\n    public class RemoteRuleQueryTester\n    {\n        private RequiredFieldRule theRule;\n        private IRemoteRuleFilter f1;\n        private IRemoteRuleFilter f2;\n        private RemoteRuleQuery theQuery;\n\n\n        [SetUp]\n        public void SetUp()\n        {\n            theRule = new RequiredFieldRule();\n            f1 = MockRepository.GenerateStub<IRemoteRuleFilter>();\n            f2 = MockRepository.GenerateStub<IRemoteRuleFilter>();\n\n            theQuery = new RemoteRuleQuery(new[] { f1, f2 });\n        }\n\n\n        [Test]\n        public void matches_if_any_filters_match()\n        {\n            f1.Stub(x => x.Matches(theRule)).Return(true);\n            f2.Stub(x => x.Matches(theRule)).Return(false);\n\n            theQuery.IsRemote(theRule).ShouldBeTrue();\n        }\n\n        [Test]\n        public void does_not_match_no_filters_match()\n        {\n            f1.Stub(x => x.Matches(theRule)).Return(false);\n            f2.Stub(x => x.Matches(theRule)).Return(false);\n\n            theQuery.IsRemote(theRule).ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/Remote/RuleRunnerTester.cs",
    "content": "﻿using FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web.Remote;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.Remote\n{\n    [TestFixture]\n    public class RuleRunnerTester : InteractionContext<RuleRunner>\n    {\n        private RecordingFieldValidationRule theRule;\n        private ValidationContext theContext;\n        private RunnerTarget theTarget;\n        private Accessor theAccessor;\n        private RemoteFieldRule theRemoteRule;\n        private string theValue;\n\n        protected override void beforeEach()\n        {\n            theValue = \"Testing\";\n            theAccessor = ReflectionHelper.GetAccessor<RunnerTarget>(x => x.Name);\n            theTarget = new RunnerTarget();\n            theContext = ValidationContext.For(theTarget);\n            theRule = new RecordingFieldValidationRule();\n\n            theRemoteRule = RemoteFieldRule.For(theAccessor, theRule);\n\n            MockFor<IValidationTargetResolver>().Stub(x => x.Resolve(theAccessor, theValue)).Return(theTarget);\n\n            MockFor<IValidator>().Stub(x => x.ContextFor(Arg<object>.Is.Same(theTarget), Arg<Notification>.Is.NotNull)).Return(theContext);\n\n            ClassUnderTest.Run(theRemoteRule, theValue);\n        }\n\n        [Test]\n        public void invokes_the_rule()\n        {\n            theRule.Accessor.ShouldBe(theAccessor);\n            theRule.Context.ShouldBeTheSameAs(theContext);\n        }\n\n        public class RunnerTarget\n        {\n            public string Name { get; set; }\n        }\n\n        public class RecordingFieldValidationRule : IFieldValidationRule\n        {\n            public Accessor Accessor;\n            public ValidationContext Context;\n\n\t        public StringToken Token { get; set; }\n\n\t\t\tpublic ValidationMode Mode { get; set; }\n\n\t        public void Validate(Accessor accessor, ValidationContext context)\n            {\n                Accessor = accessor;\n                Context = context;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/Remote/ValidateFieldEndpointTester.cs",
    "content": "using FubuCore.Reflection;\nusing FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Core.Validation.Web.Remote;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.Remote\n{\n    [TestFixture]\n    public class ValidateFieldEndpointTester : InteractionContext<ValidateFieldEndpoint>\n    {\n        private RemoteRuleGraph theGraph;\n        private AjaxContinuation theContinuation;\n        private Notification theNotification;\n        private RemoteFieldRule theRemoteRule;\n        private ValidateField theInputModel;\n\n        protected override void beforeEach()\n        {\n            var theAccessor = ReflectionHelper.GetAccessor<ValidateFieldTarget>(x => x.Name);\n            \n            theGraph = new RemoteRuleGraph();\n            theGraph.RegisterRule(theAccessor, new RequiredFieldRule());\n\n            Services.Inject(theGraph);\n\n            theRemoteRule = RemoteFieldRule.For(theAccessor, new RequiredFieldRule());\n\n            theInputModel = new ValidateField {Hash = theRemoteRule.ToHash(), Value = \"Test\"};\n\n            theNotification = new Notification();\n            theContinuation = new AjaxContinuation();\n\n            MockFor<IRuleRunner>().Stub(x => x.Run(theRemoteRule, theInputModel.Value)).Return(theNotification);\n            MockFor<IAjaxContinuationResolver>().Stub(x => x.Resolve(theNotification)).Return(theContinuation);\n        }\n\n        [Test]\n        public void builds_the_continuation()\n        {\n            ClassUnderTest.Validate(theInputModel).ShouldBeTheSameAs(theContinuation);\n        }\n\n        public class ValidateFieldTarget\n        {\n            public string Name { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/Remote/ValidationTargetResolverTester.cs",
    "content": "﻿using FubuCore;\nusing FubuCore.Binding;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Validation.Web.Remote;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.Remote\n{\n    [TestFixture]\n    public class ValidationTargetResolverTester\n    {\n        private IObjectResolver theObjectResolver;\n        private ValidationTargetResolver theResolver;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theObjectResolver = ObjectResolver.Basic();\n            theResolver = new ValidationTargetResolver(theObjectResolver);\n        }\n\n        [Test]\n        public void target_with_simple_string_property()\n        {\n            var value = \"Test\";\n            var accessor = ReflectionHelper.GetAccessor<ExampleModel>(x => x.FirstName);\n            \n            var model = theResolver.Resolve(accessor, value).As<ExampleModel>();\n            model.FirstName.ShouldBe(value);\n        }\n\n        [Test]\n        public void target_with_simple_int_property()\n        {\n            var accessor = ReflectionHelper.GetAccessor<ExampleModel>(x => x.Count);\n\n            var model = theResolver.Resolve(accessor, \"10\").As<ExampleModel>();\n            model.Count.ShouldBe(10);\n        }\n\n        [Test]\n        public void target_with_value_type()\n        {\n            var value = \"Test\";\n            var accessor = ReflectionHelper.GetAccessor<ExampleModel>(x => x.Nested);\n\n            var model = theResolver.Resolve(accessor, value).As<ExampleModel>();\n            model.Nested.Value.ShouldBe(value);\n        }\n\n        public class ExampleModel\n        {\n            public string FirstName { get; set; }\n            public int Count { get; set; }\n            public ExampleValueObject Nested { get; set; }\n        }\n\n        public class ExampleValueObject\n        {\n            public ExampleValueObject(string value)\n            {\n                Value = value;\n            }\n\n            public string Value { get; private set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/RemoteRuleExpressionTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Core.Validation.Web.Remote;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n    [TestFixture]\n    public class RemoteRuleExpressionTester\n    {\n        private RemoteRuleExpression theExpression;\n        private IList<IRemoteRuleFilter> theFilters;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theFilters = new List<IRemoteRuleFilter>();\n            theExpression = new RemoteRuleExpression(theFilters);\n        }\n\n        private bool matches(IFieldValidationRule rule)\n        {\n            return theFilter.Matches(rule);\n        }\n\n        private IRemoteRuleFilter theFilter\n        {\n            get { return theFilters.Single(); }\n        }\n\n        [Test]\n        public void finds_with_generic()\n        {\n            theExpression.FindWith<RemoteRuleAttributeFilter>();\n            theFilter.ShouldBeOfType<RemoteRuleAttributeFilter>();\n        }\n\n        [Test]\n        public void finds_with_custom()\n        {\n            theExpression.FindWith(new RemoteFieldValidationRuleFilter());\n            theFilter.ShouldBeOfType<RemoteFieldValidationRuleFilter>();\n        }\n\n        [Test]\n        public void include_specific_rule_type()\n        {\n            theExpression.Include<RequiredFieldRule>();\n            matches(new RequiredFieldRule()).ShouldBeTrue();\n            matches(new GreaterThanZeroRule()).ShouldBeFalse();\n        }\n\n        [Test]\n        public void include_rule_lambda()\n        {\n            theExpression.IncludeIf(rule => rule is GreaterThanZeroRule);\n            matches(new GreaterThanZeroRule()).ShouldBeTrue();\n            matches(new RequiredFieldRule()).ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/RemoteRuleGraphActivatorTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Core.Validation.Web.Remote;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n    [TestFixture]\n    public class RemoteRuleGraphActivatorTester\n    {\n        private ValidationGraph theValidationGraph;\n        private RemoteRuleGraph theRuleGraph;\n        private BehaviorGraph theBehaviorGraph;\n        private RemoteRuleQuery theQuery;\n        private RemoteRuleGraphActivator theActivator;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theBehaviorGraph = BehaviorGraph.BuildFrom(r =>\n            {\n                r.Actions.IncludeType<RemoteRuleGraphEndpoint>();\n                r.Features.Validation.Enable(true);\n            });\n\n            theValidationGraph = ValidationGraph.BasicGraph();\n            theRuleGraph = new RemoteRuleGraph();\n            theQuery = RemoteRuleQuery.Basic();\n\n            theActivator = new RemoteRuleGraphActivator(theValidationGraph, theRuleGraph, theBehaviorGraph, theQuery, new TypeDescriptorCache());\n\n            theActivator.Activate(new ActivationLog(), new PerfTimer());\n        }\n\n        [Test]\n        public void fills_the_rules_in_the_rule_graph()\n        {\n            var rule = theRuleGraph.RulesFor(ReflectionHelper.GetAccessor<ActivatorTargetWithRemotes>(x => x.Username)).Single();\n            rule.Type.ShouldBe(typeof(UniqueUsernameRule));\n\n            theRuleGraph.RulesFor(ReflectionHelper.GetAccessor<ActivatorTargetWithRemotes>(x => x.Name)).ShouldHaveCount(0);\n            theRuleGraph.RulesFor(ReflectionHelper.GetAccessor<ActivatorTargetNoRemotes>(x => x.Name)).ShouldHaveCount(0);\n        }\n\n        public class RemoteRuleGraphEndpoint\n        {\n            public AjaxContinuation get_remotes(ActivatorTargetWithRemotes request)\n            {\n                throw new NotImplementedException();\n            }\n\n            public AjaxContinuation get_no_remotes(ActivatorTargetNoRemotes request)\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        public class ActivatorTargetWithRemotes\n        {\n            [UniqueUsername]\n            public string Username { get; set; }\n\n            public string Name { get; set; }\n        }\n\n        public class ActivatorTargetNoRemotes\n        {\n            [Required]\n            public string Name { get; set; }\n        }\n\n\n    }\n\n    public class UniqueUsernameRule : IRemoteFieldValidationRule\n    {\n\t    public StringToken Token { get; set; }\n\n\t\tpublic ValidationMode Mode { get; set; }\n\n\t    public void Validate(Accessor accessor, ValidationContext context)\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n\n    public class UniqueUsernameAttribute : FieldValidationAttribute\n    {\n        public override IEnumerable<IFieldValidationRule> RulesFor(PropertyInfo property)\n        {\n            yield return new UniqueUsernameRule();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/SampleInputModel.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.Ajax;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n    public class SampleInputModel\n    {\n        public string Field { get; set; }\n\n        public SampleInputModel Test()\n        {\n            return this;\n        }\n\n        public SampleInputModel Test(string input)\n        {\n            return this;\n        }\n\n        public SampleInputModel Test(int input)\n        {\n            return this;\n        }\n    }\n\n    public class SampleAjaxModel\n    {\n        public string Name { get; set; }\n\n        public AjaxContinuation post_model(SampleAjaxModel input)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/CssValidationAnnotationStrategyTester.cs",
    "content": "﻿using FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web.UI;\nusing HtmlTags;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class CssValidationAnnotationStrategyTester\n    {\n        private CssValidationAnnotationStrategy theStrategy;\n        private HtmlTag theTag;\n        private ElementRequest theRequest;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theStrategy = new CssValidationAnnotationStrategy();\n            theTag = new HtmlTag(\"input\");\n\n            theRequest = ElementRequest.For<CssTarget>(x => x.Name);\n            theRequest.ReplaceTag(theTag);\n        }\n\n        [Test]\n        public void matches_required_rules()\n        {\n            theStrategy.Matches(new RequiredFieldRule()).ShouldBeTrue();\n        }\n\n        [Test]\n        public void matches_greater_than_zero_rules()\n        {\n            theStrategy.Matches(new GreaterThanZeroRule()).ShouldBeTrue();\n        }\n\n        [Test]\n        public void matches_greater_than_or_equal_tozero_rules()\n        {\n            theStrategy.Matches(new GreaterOrEqualToZeroRule()).ShouldBeTrue();\n        }\n\n        [Test]\n        public void matches_email_rule()\n        {\n            theStrategy.Matches(new EmailFieldRule()).ShouldBeTrue();\n        }\n\n        [Test]\n        public void does_not_match_others()\n        {\n            theStrategy.Matches(new MinimumLengthRule(5)).ShouldBeFalse();\n        }\n\n        [Test]\n        public void adds_the_required_css_class()\n        {\n            theStrategy.Modify(theRequest, new RequiredFieldRule());\n            theTag.HasClass(\"required\").ShouldBeTrue();\n        }\n\n        [Test]\n        public void adds_the_greater_than_zero_css_class()\n        {\n            theStrategy.Modify(theRequest, new GreaterThanZeroRule());\n            theTag.HasClass(\"greater-than-zero\").ShouldBeTrue();\n        }\n\n        [Test]\n        public void adds_the_greater_or_equal_to_zero_css_class()\n        {\n            theStrategy.Modify(theRequest, new GreaterOrEqualToZeroRule());\n            theTag.HasClass(\"greater-equal-zero\").ShouldBeTrue();\n        }\n\n        [Test]\n        public void adds_the_email_css_class()\n        {\n            theStrategy.Modify(theRequest, new EmailFieldRule());\n            theTag.HasClass(\"email\").ShouldBeTrue();\n        }\n\n        public class CssTarget\n        {\n            public string Name { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/DateElementModifierTester.cs",
    "content": "﻿using System;\nusing FubuCore.Dates;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation.Web.UI;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class DateElementModifierTester : ValidationElementModifierContext<DateElementModifier>\n    {\n        [Test]\n        public void adds_the_date_css_class_for_fubucore_date()\n        {\n            tagFor(ElementRequest.For<DateElementTarget>(x => x.FubuCoreDate)).HasClass(\"date\").ShouldBeTrue();\n        }\n\n        [Test]\n        public void adds_the_date_css_class_for_DateTime()\n        {\n            tagFor(ElementRequest.For<DateElementTarget>(x => x.Date)).HasClass(\"date\").ShouldBeTrue();\n        }\n\n        [Test]\n        public void no_date_for_other_types()\n        {\n            new DateElementModifier().Matches(ElementRequest.For<DateElementTarget>(x => x.NoDate)).ShouldBeFalse();\n        }\n\n\n        public class DateElementTarget\n        {\n            public string NoDate { get; set; }\n            public DateTime Date { get; set; }\n            public Date FubuCoreDate { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/DefaultValidationSummaryWriterTester.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Core.Validation.Web.UI;\nusing FubuMVC.Tests.TestSupport;\nusing HtmlTags;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class DefaultValidationSummaryWriterTester : InteractionContext<DefaultValidationSummaryWriter>\n    {\n        [Test]\n        public void builds_the_summary_tag()\n        {\n            ClassUnderTest.BuildSummary().ToString()\n                .ShouldBe(\"<div class=\\\"alert alert-error validation-container\\\" style=\\\"display:none\\\"><p>{0}</p><ul class=\\\"validation-summary\\\"></ul></div>\".ToFormat(ValidationKeys.Summary.ToString()));\n        }\n\n        [Test]\n        public void writes_the_summary_tag()\n        {\n            var theTag = new LiteralTag(\"testing\");\n            Services.PartialMockTheClassUnderTest();\n            ClassUnderTest.Stub(x => x.BuildSummary()).Return(theTag);\n            ClassUnderTest.Write(MimeType.Html.Value, Container.GetInstance<FubuRequestContext>(), new ValidationSummary());\n\n            MockFor<IOutputWriter>().AssertWasCalled(x => x.Write(MimeType.Html.ToString(), theTag.ToString()));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/ElementLocalizationMessagesTester.cs",
    "content": "﻿using FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web.UI;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n\t[TestFixture]\n\tpublic class ElementLocalizationMessagesTester\n\t{\n\t\tprivate ElementLocalizationMessages theMessages;\n\n\t\t[SetUp]\n\t\tpublic void SetUp()\n\t\t{\n\t\t\ttheMessages = new ElementLocalizationMessages();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void adds_the_rules()\n\t\t{\n\t\t\ttheMessages.Add(new RequiredFieldRule());\n\t\t\ttheMessages.Add(new EmailFieldRule());\n\n\t\t\tvar messages = theMessages.Messages;\n\n\t\t\tmessages[\"required\"].ShouldBe(ValidationKeys.Required.ToString());\n\t\t\tmessages[\"email\"].ShouldBe(ValidationKeys.Email.ToString());\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/FieldEqualityFormModifierTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuCore;\nusing FubuMVC.Core.Http.Owin;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.UI.Forms;\nusing FubuMVC.Core.Urls;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Core.Validation.Web.UI;\nusing HtmlTags;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n\t[TestFixture]\n\tpublic class FieldEqualityFormModifierTester\n\t{\n\t\tprivate BehaviorGraph theGraph;\n\t\tprivate ValidationGraph theValidationGraph;\n\n\t\tprivate FieldEqualityRule rule1;\n\t\tprivate FieldEqualityRule rule2;\n\n\t\tprivate StringToken token1;\n\t\tprivate StringToken token2;\n\n\t\t[SetUp]\n\t\tpublic void SetUp()\n\t\t{\n\t\t\ttoken1 = StringToken.FromKeyString(\"TestKeys:Key1\", \"Token 1\");\n\t\t\ttoken2 = StringToken.FromKeyString(\"TestKeys:Key2\", \"Token 2\");\n\n\t\t\trule1 = FieldEqualityRule.For<LoFiTarget>(x => x.Value1, x => x.Value2);\n\t\t\trule1.Token = token1;\n\n\t\t\trule2 = FieldEqualityRule.For<LoFiTarget>(x => x.Value1, x => x.Value2);\n\t\t\trule2.Token = token2;\n\n\t\t\tvar source = new ConfiguredValidationSource(new IValidationRule[] {rule1, rule2});\n\n\t\t\ttheValidationGraph = ValidationGraph.For(source);\n\t\t\t\n\t\t\ttheGraph = BehaviorGraph.BuildFrom(x =>\n\t\t\t{\n\t\t\t\tx.Actions.IncludeType<FormValidationModeEndpoint>();\n\t\t\t    x.Features.Validation.Enable(true);\n                x.Policies.Local.Add<ValidationPolicy>();\n\t\t\t});\n\t\t}\n\n\t\tprivate FormRequest requestFor<T>() where T : class, new()\n\t\t{\n\t\t\tvar services = new InMemoryServiceLocator();\n\t\t\tservices.Add<IChainResolver>(new ChainResolutionCache(theGraph));\n\t\t\tservices.Add(theValidationGraph);\n\t\t\tservices.Add<IChainUrlResolver>(new ChainUrlResolver(new OwinHttpRequest()));\n\n\t\t\tvar request = new FormRequest(new ChainSearch { Type = typeof(T) }, new T());\n\t\t\trequest.Attach(services);\n\t\t\trequest.ReplaceTag(new FormTag(\"test\"));\n\n\t\t\treturn request;\n\t\t}\n\n\t\t[Test]\n\t\tpublic void modifies_the_form()\n\t\t{\n\t\t\tvar theRequest = requestFor<AjaxTarget>();\n\n\t\t\tvar modifier = new FieldEqualityFormModifier();\n\t\t\tmodifier.Modify(theRequest);\n\n\t\t\tvar rawValues = theRequest\n\t\t\t\t.CurrentTag\n\t\t\t\t.Data(FieldEqualityFormModifier.FieldEquality)\n\t\t\t\t.As<IDictionary<string, object>>();\n\n\t\t\tvar values = rawValues.Children(\"rules\");\n\t\t\tvalues.ShouldHaveCount(2);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void no_strategies()\n\t\t{\n\t\t\tvar theRequest = requestFor<AjaxTarget>();\n\t\t\ttheRequest.Chain.ValidationNode().Clear();\n\n\t\t\tvar modifier = new FieldEqualityFormModifier();\n\t\t\tmodifier.Modify(theRequest);\n\n\t\t\ttheRequest.CurrentTag.Data(FieldEqualityFormModifier.FieldEquality).ShouldBeNull();\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/FieldValidationElementModifierTester.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web.UI;\nusing HtmlTags;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class FieldValidationElementModifierTester\n    {\n        private ElementRequest theRequest;\n        private FieldValidationElementModifier theModifier;\n        private InMemoryServiceLocator theServices;\n\n        private IFieldValidationModifier theFieldModifier;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theRequest = ElementRequest.For<FieldValidationModifierTarget>(x => x.Name);\n            theModifier = new FieldValidationElementModifier();\n            theFieldModifier = MockRepository.GenerateStub<IFieldValidationModifier>();\n\n            theRequest.ReplaceTag(new HtmlTag(\"input\"));\n\n            theServices = new InMemoryServiceLocator();\n            theServices.Add(ValidationGraph.BasicGraph());\n            theServices.Add(theFieldModifier);\n\n            theRequest.Attach(theServices);\n        }\n\n        [Test]\n        public void always_matches()\n        {\n            theModifier.Matches(null).ShouldBeTrue();\n        }\n\n        [Test]\n        public void runs_the_modifier_against_the_field_rules()\n        {\n            theModifier.Modify(theRequest);\n            theFieldModifier.AssertWasCalled(x => x.ModifyFor(new RequiredFieldRule(), theRequest));\n        }\n\n        public class FieldValidationModifierTarget\n        {\n            [Required]\n            public string Name { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/FieldValidationModifierTester.cs",
    "content": "﻿using FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web.UI;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class FieldValidationModifierTester\n    {\n        private RequiredFieldRule theRule;\n        private ElementRequest theElementRequest;\n        private IValidationAnnotationStrategy theMatchingStrategy;\n        private IValidationAnnotationStrategy theOtherStrategy;\n        private FieldValidationModifier theModifier;\n        \n        [SetUp]\n        public void SetUp()\n        {\n            theRule = new RequiredFieldRule();\n            theElementRequest = ElementRequest.For<FieldValidationModifierTarget>(x => x.Name);\n            theMatchingStrategy = MockRepository.GenerateStub<IValidationAnnotationStrategy>();\n            theOtherStrategy = MockRepository.GenerateStub<IValidationAnnotationStrategy>();\n\n            theMatchingStrategy.Stub(x => x.Matches(theRule)).Return(true);\n            theOtherStrategy.Stub(x => x.Matches(theRule)).Return(false);\n\n            theModifier = new FieldValidationModifier(new[] { theMatchingStrategy, theOtherStrategy });\n            theModifier.ModifyFor(theRule, theElementRequest);\n        }\n\n        [Test]\n        public void calls_the_matching_strategy()\n        {\n            theMatchingStrategy.AssertWasCalled(x => x.Modify(theElementRequest, theRule));\n        }\n\n        [Test]\n        public void does_not_call_the_other_strategy()\n        {\n            theOtherStrategy.AssertWasNotCalled(x => x.Modify(theElementRequest, theRule));\n        }\n\n        public class FieldValidationModifierTarget\n        {\n            public string Name { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/FormValidationModifierTester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Http.Owin;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.UI.Forms;\nusing FubuMVC.Core.Urls;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Core.Validation.Web.UI;\nusing HtmlTags;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class FormValidationModifierTester\n    {\n        private BehaviorGraph theGraph;\n        private ValidationSettings theSettings;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theSettings = new ValidationSettings();\n            theGraph = BehaviorGraph.BuildFrom(x =>\n            {\n                x.Actions.IncludeType<FormValidationModeEndpoint>();\n                x.Features.Validation.Enable(true);\n                x.Policies.Local.Add<ValidationPolicy>();\n            });\n        }\n\n        private FormRequest requestFor<T>() where T : class, new()\n        {\n            var services = new InMemoryServiceLocator();\n            services.Add<IChainResolver>(new ChainResolutionCache(theGraph));\n            services.Add<IChainUrlResolver>(new ChainUrlResolver(new OwinHttpRequest()));\n            services.Add<ITypeResolver>(new TypeResolver());\n            services.Add(new AccessorRules());\n            services.Add<ITypeDescriptorCache>(new TypeDescriptorCache());\n            services.Add(theSettings);\n\n            var request = new FormRequest(new ChainSearch { Type = typeof(T) }, new T());\n            request.Attach(services);\n            request.ReplaceTag(new FormTag(\"test\"));\n\n            return request;\n        }\n\n        [Test]\n        public void modifies_the_form()\n        {\n            var theRequest = requestFor<AjaxTarget>();\n\n            var modifier = new FormValidationModifier();\n            modifier.Modify(theRequest);\n\n            theRequest.CurrentTag.Data(\"validation-summary\").ShouldBe(true);\n            theRequest.CurrentTag.Data(\"validation-highlight\").ShouldBe(true);\n            theRequest.CurrentTag.HasClass(\"validated-form\").ShouldBeTrue();\n        }\n\n        [Test]\n        public void excluded_from_activation()\n        {\n            theSettings.ExcludeFormActivation = chain => chain.InputType() == typeof(AjaxTarget);\n                \n            var theRequest = requestFor<AjaxTarget>();\n\n            var modifier = new FormValidationModifier();\n            modifier.Modify(theRequest);\n\n            theRequest.CurrentTag.Data(\"validation-summary\").ShouldBe(true);\n            theRequest.CurrentTag.Data(\"validation-highlight\").ShouldBe(true);\n            theRequest.CurrentTag.HasClass(\"validated-form\").ShouldBeTrue();\n        }\n\n        [Test]\n        public void no_strategies()\n        {\n            var theRequest = requestFor<AjaxTarget>();\n            theRequest.Chain.ValidationNode().Clear();\n\n            var modifier = new FormValidationModifier();\n            modifier.Modify(theRequest);\n\n            theRequest.CurrentTag.HasClass(\"validated-form\").ShouldBeFalse();\n        }\n\n        [Test]\n        public void adds_the_validation_options()\n        {\n            var theRequest = requestFor<AjaxTarget>();\n            var modifier = new FormValidationModifier();\n            modifier.Modify(theRequest);\n\n            var options = ValidationOptions.For(theRequest);\n\n            theRequest.CurrentTag.Data(ValidationOptions.Data).ShouldBe(options);\n        }\n\n        [Test]\n        public void writes_the_validation_activator_requirement()\n        {\n            var theRequest = requestFor<AjaxTarget>();\n            var modifier = new FormValidationModifier();\n            modifier.Modify(theRequest);\n        }\n    }\n\n    public class LoFiTarget\n    {\n        public string Value1 { get; set; }\n        public string Value2 { get; set; }\n    }\n\n    public class AjaxTarget { }\n    [NotValidated]\n    public class NoneTarget { }\n    public class IgnoredTarget { }\n\n    public class FormValidationModeEndpoint\n    {\n        public NoneTarget post_none(NoneTarget target)\n        {\n            throw new NotImplementedException();\n        }\n\n        [NotValidated]\n        public IgnoredTarget post_ignored(IgnoredTarget target)\n        {\n            throw new NotImplementedException();\n        }\n\n        public LoFiTarget post_lofi(LoFiTarget target)\n        {\n            throw new NotImplementedException();\n        }\n\n        public AjaxContinuation post_ajax(AjaxTarget target)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/FormValidationSummaryModifierTester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.StructureMap;\nusing FubuMVC.Core.UI.Forms;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Core.Validation.Web.UI;\nusing FubuMVC.Tests.TestSupport;\nusing HtmlTags;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class FormValidationSummaryModifierTester : InteractionContext<FormValidationSummaryModifier>\n    {\n        private BehaviorGraph theGraph;\n        private FormRequest theRequest;\n\n        private const string theValidationSummary = \"<div>summary</div>\";\n\n        protected override void beforeEach()\n        {\n            theGraph = BehaviorGraph.BuildFrom(x => x.Actions.IncludeType<ValidationSummaryTargetEndpoint>());\n            Services.Inject<IChainResolver>(new ChainResolutionCache(theGraph));\n\n\n            theRequest = new FormRequest(new ChainSearch {Type = typeof (ValidationSummaryTarget)},\n                new ValidationSummaryTarget());\n            theRequest.Attach(new StructureMapServiceLocator(Services.Container));\n\n            ValidationPolicy.ApplyValidation(theRequest.Chain.FirstCall(), new ValidationSettings());\n            theRequest.Chain.ValidationNode().Clear();\n            theRequest.Chain.ValidationNode().RegisterStrategy(RenderingStrategies.Summary);\n\n            var theForm = new FormTag(\"test\");\n            theForm.Append(new HtmlTag(\"input\").Attr(\"type\", \"text\").Attr(\"name\", \"Name\"));\n\n            theRequest.ReplaceTag(theForm);\n\n            MockFor<IPartialInvoker>().Stub(x => x.Invoke<ValidationSummary>()).Return(theValidationSummary.ToCompletionTask());\n        }\n\n        [Test]\n        public void no_summary_if_the_summary_strategy_is_not_registered()\n        {\n            theRequest.Chain.ValidationNode().Clear();\n            ClassUnderTest.Modify(theRequest);\n            theRequest.CurrentTag.Children.Count.ShouldBe(1);\n            theRequest.CurrentTag.Children[0].TagName().ShouldBe(\"input\");\n        }\n\n        [Test]\n        public void prepends_the_validation_summary()\n        {\n            ClassUnderTest.Modify(theRequest);\n            theRequest.CurrentTag.Children.Count.ShouldBe(2);\n\n            theRequest.CurrentTag.Children[0].ToString().ShouldBe(theValidationSummary);\n\n            theRequest.CurrentTag.Children[1].TagName().ShouldBe(\"input\");\n        }\n\n        public class ValidationSummaryTarget\n        {\n        }\n\n        public class ValidationSummaryTargetEndpoint\n        {\n            public void post_summary_target(ValidationSummaryTarget target)\n            {\n                throw new NotImplementedException();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/IntegratedValidationOptionsTester.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Http.Owin;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.UI.Forms;\nusing FubuMVC.Core.Urls;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Core.Validation.Web.UI;\nusing HtmlTags;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n\t[TestFixture]\n\tpublic class IntegratedValidationOptionsTester\n\t{\n\t\tprivate BehaviorGraph theGraph;\n\n\t\t[SetUp]\n\t\tpublic void SetUp()\n\t\t{\n\t\t\ttheGraph = BehaviorGraph.BuildFrom(x =>\n\t\t\t{\n\t\t\t\tx.Actions.IncludeType<ValidationOptionsEndpoint>();\n\t\t\t    x.Features.Validation.Enable(true);\n\t\t\t});\n\t\t}\n\n\t\tprivate ValidationOptions theOptions\n\t\t{\n\t\t\tget { return ValidationOptions.For(createRequest()); }\n\t\t}\n\n\t\tprivate FieldOptions field(Expression<Func<ValidationOptionsTarget, object>> expression, ValidationMode mode, params FieldRuleOptions[] rules)\n\t\t{\n\t\t\treturn new FieldOptions\n\t\t\t{\n\t\t\t\tfield = expression.ToAccessor().Name,\n\t\t\t\tmode = mode.Mode,\n\t\t\t\trules = rules\n\t\t\t};\n\t\t}\n\n\t\tprivate FieldRuleOptions rule<T>(ValidationMode mode)\n\t\t\twhere T : IFieldValidationRule\n\t\t{\n\t\t\treturn new FieldRuleOptions\n\t\t\t{\n\t\t\t\trule = RuleAliases.AliasFor(typeof(T)),\n\t\t\t\tmode = mode.Mode\n\t\t\t};\n\t\t}\n\n\t\t[Test]\n\t\tpublic void verify_the_fields()\n\t\t{\n\t\t\ttheOptions.fields.ShouldHaveTheSameElementsAs(\n\n\t\t\t\tfield(x => x.Default, ValidationMode.Live),\n\t\t\t\tfield(x => x.LiveAttribute, ValidationMode.Live),\n\n\t\t\t\tfield(x => x.LiveRule, ValidationMode.Live, \n\t\t\t\t\trule<EmailFieldRule>(ValidationMode.Live),\n\t\t\t\t\trule<RequiredFieldRule>(ValidationMode.Triggered)),\n\t\t\t\t\n\t\t\t\tfield(x => x.TriggeredAttribute, ValidationMode.Triggered),\n\t\t\t\tfield(x => x.TriggeredRule, ValidationMode.Triggered)\n\t\t\t\n\t\t\t);\n\t\t}\n\n\t\tprivate FormRequest createRequest()\n\t\t{\n\t\t\tvar rules = new AccessorRules();\n\t\t\tvar overrides = new ValidationOptionsTargetOverrides().As<IAccessorRulesRegistration>();\n\t\t\t\n\t\t\toverrides.AddRules(rules);\n\n\t\t\tvar services = new InMemoryServiceLocator();\n\t\t\tservices.Add<IChainResolver>(new ChainResolutionCache(theGraph));\n\t\t\tservices.Add(rules);\n\t\t\tservices.Add<IChainUrlResolver>(new ChainUrlResolver(new OwinHttpRequest()));\n\t\t\tservices.Add<ITypeResolver>(new TypeResolver());\n\t\t\tservices.Add<ITypeDescriptorCache>(new TypeDescriptorCache());\n\n\t\t\tvar graph = ValidationGraph.BasicGraph();\n\t\t\tgraph.Fields.FindWith(new AccessorRulesFieldSource(rules));\n\n\t\t\tservices.Add(graph);\n\n\t\t\tvar request = new FormRequest(new ChainSearch { Type = typeof(ValidationOptionsTarget) }, new ValidationOptionsTarget());\n\t\t\trequest.Attach(services);\n\t\t\trequest.ReplaceTag(new FormTag(\"test\"));\n\n\t\t\treturn request;\n\t\t}\n\n\t\tpublic class ValidationOptionsEndpoint\n\t\t{\n\t\t\tpublic ValidationOptionsTarget post_target(ValidationOptionsTarget target)\n\t\t\t{\n\t\t\t\treturn target;\n\t\t\t}\n\t\t}\n\n\t\tpublic class ValidationOptionsTarget\n\t\t{\n\t\t\tpublic string Default { get; set; }\n\n\t\t\t[LiveValidation]\n\t\t\tpublic string LiveAttribute { get; set; }\n\t\t\tpublic string LiveRule { get; set; }\n\n\t\t\t[TriggeredValidation]\n\t\t\tpublic string TriggeredAttribute { get; set; }\n\t\t\tpublic string TriggeredRule { get; set; }\n\t\t}\n\n\t\tpublic class ValidationOptionsTargetOverrides : OverridesFor<ValidationOptionsTarget>\n\t\t{\n\t\t\tpublic ValidationOptionsTargetOverrides()\n\t\t\t{\n\t\t\t\tProperty(x => x.LiveRule).LiveValidation();\n\t\t\t\tProperty(x => x.TriggeredRule).TriggeredValidation();\n\n\t\t\t\tProperty(x => x.LiveRule).Email();\n\t\t\t\t// Override the default mode for a specific property/rule combination\n\t\t\t\tProperty(x => x.LiveRule).Required(ValidationMode.Triggered);\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/LocalizationAnnotationStrategyTester.cs",
    "content": "﻿using FubuMVC.Core.Validation.Fields;\nusing FubuMVC.Core.Validation.Web.UI;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n\t[TestFixture]\n\tpublic class LocalizationAnnotationStrategyTester\n\t{\n\t\tprivate LocalizationAnnotationStrategy theStrategy;\n\n\t\t[SetUp]\n\t\tpublic void SetUp()\n\t\t{\n\t\t\ttheStrategy = new LocalizationAnnotationStrategy();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void matches_when_token_is_not_null()\n\t\t{\n\t\t\tvar theRule = new RequiredFieldRule();\n\t\t\ttheStrategy.Matches(theRule).ShouldBeTrue();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void does_not_match_conditional_field_rules()\n\t\t{\n\t\t\tvar theRule = new ConditionalFieldRule<AjaxTarget>(new IsValid(), new RequiredFieldRule());\n\t\t\ttheStrategy.Matches(theRule).ShouldBeFalse();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void no_match_when_token_is_null()\n\t\t{\n\t\t\tvar theRule = new RequiredFieldRule();\n\t\t\ttheRule.Token = null;\n\t\t\ttheStrategy.Matches(theRule).ShouldBeFalse();\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/LocalizationLabelModifierTester.cs",
    "content": "﻿using FubuMVC.Core.Localization;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation.Web.UI;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class LocalizationLabelModifierTester : ValidationElementModifierContext<LocalizationLabelModifier>\n    {\n        [Test]\n        public void adds_the_localized_label_data_attribute()\n        {\n            var theRequest = ElementRequest.For(new TargetModel(), x => x.FirstName);\n            var label = LocalizationManager.GetHeader(theRequest.Accessor.InnerProperty);\n            tagFor(theRequest).Data(LocalizationLabelModifier.LocalizedLabelKey).ShouldBe(label);\n        }\n\n        public class TargetModel\n        {\n            public string FirstName { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/MaxValueModifierTester.cs",
    "content": "using FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web.UI;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class MaxValueModifierTester : ValidationElementModifierContext<MaxValueModifier>\n    {\n        [Test]\n        public void adds_the_max_data_attribute_for_min_value_rule()\n        {\n            var theRequest = ElementRequest.For(new TargetWithMaxValue(), x => x.Value);\n            tagFor(theRequest).Data(\"max\").ShouldBe(20);\n        }\n\n        [Test]\n        public void no_data_attribute_when_rule_does_not_exist()\n        {\n            var theRequest = ElementRequest.For(new TargetWithNoMaxValue(), x => x.Value);\n            tagFor(theRequest).Data(\"max\").ShouldBeNull();\n        }\n\n\n        public class TargetWithMaxValue\n        {\n            [MaxValue(20)]\n            public string Value { get; set; }\n        }\n\n        public class TargetWithNoMaxValue\n        {\n            public string Value { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/MaximumLengthModifierTester.cs",
    "content": "using FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web.UI;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class MaximumLengthModifierTester : ValidationElementModifierContext<MaximumLengthModifier>\n    {\n        [Test]\n        public void adds_the_maxlength_attribute_for_maximum_length_rule()\n        {\n            var theRequest = ElementRequest.For(new TargetWithMaxLength(), x => x.Value);\n            tagFor(theRequest).Data<object>(\"maxlength\", x => x.ShouldBe(\"10\"));\n        }\n\n        [Test]\n        public void no_maxlength_attribute_when_rule_does_not_exist()\n        {\n            var theRequest = ElementRequest.For(new TargetWithNoMaxLength(), x => x.Value);\n            tagFor(theRequest).Attr(\"maxlength\").ShouldBeEmpty();\n        }\n\n\n        public class TargetWithMaxLength\n        {\n            [MaximumStringLength(10)]\n            public string Value { get; set; }\n        }\n\n        public class TargetWithNoMaxLength\n        {\n            public string Value { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/MinValueModifierTester.cs",
    "content": "﻿using FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web.UI;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class MinValueModifierTester : ValidationElementModifierContext<MinValueModifier>\n    {\n        [Test]\n        public void adds_the_min_data_attribute_for_min_value_rule()\n        {\n            var theRequest = ElementRequest.For(new TargetWithMinValue(), x => x.Value);\n            tagFor(theRequest).Data(\"min\").ShouldBe(10);\n        }\n\n        [Test]\n        public void no_data_attribute_when_rule_does_not_exist()\n        {\n            var theRequest = ElementRequest.For(new TargetWithNoMinValue(), x => x.Value);\n            tagFor(theRequest).Data(\"min\").ShouldBeNull();\n        }\n\n\n        public class TargetWithMinValue\n        {\n            [MinValue(10)]\n            public string Value { get; set; }\n        }\n\n        public class TargetWithNoMinValue\n        {\n            public string Value { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/MinimumLengthModifierTester.cs",
    "content": "﻿using FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web.UI;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class MinimumLengthModifierTester : ValidationElementModifierContext<MinimumLengthModifier>\n    {\n        [Test]\n        public void adds_the_min_length_data_attribute_for_minimum_length_rule()\n        {\n            var theRequest = ElementRequest.For(new TargetWithMinLength(), x => x.Value);\n            tagFor(theRequest).Data(\"minlength\").ShouldBe(10);\n        }\n\n        [Test]\n        public void no_data_attribute_when_rule_does_not_exist()\n        {\n            var theRequest = ElementRequest.For(new TargetWithNoMinLength(), x => x.Value);\n            tagFor(theRequest).Data(\"minlength\").ShouldBeNull();\n        }\n\n\n        public class TargetWithMinLength\n        {\n            [MinimumStringLength(10)]\n            public string Value { get; set; }\n        }\n\n        public class TargetWithNoMinLength\n        {\n            public string Value { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/NotificationSerializationModifierTester.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Http.Owin;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Registration;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.UI.Forms;\nusing FubuMVC.Core.Urls;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Core.Validation.Web.UI;\nusing HtmlTags;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class NotificationSerializationModifierTester\n    {\n        private BehaviorGraph theGraph;\n        private NotificationSerializationModifier theModifier;\n        private Notification theNotification;\n        private IFubuRequest theRequest;\n\n        private AjaxContinuation theContinuation;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theGraph = BehaviorGraph.BuildFrom(x =>\n            {\n                x.Actions.IncludeType<FormValidationModeEndpoint>();\n                x.Features.Validation.Enable(true);\n                x.Policies.Local.Add<ValidationPolicy>();\n            });\n\n            theModifier = new NotificationSerializationModifier();\n        }\n\n        private FormRequest requestFor<T>() where T : class, new()\n        {\n            var services = new InMemoryServiceLocator();\n            services.Add<IChainResolver>(new ChainResolutionCache(theGraph));\n            services.Add<IChainUrlResolver>(new ChainUrlResolver(new OwinHttpRequest()));\n\n            theRequest = new InMemoryFubuRequest();\n            theNotification = Notification.Valid();\n            theRequest.Set(theNotification);\n\n            services.Add(theRequest);\n\n            var request = new FormRequest(new ChainSearch {Type = typeof (T)}, new T());\n            request.Attach(services);\n            request.ReplaceTag(new FormTag(\"test\"));\n\n            theContinuation = AjaxContinuation.Successful();\n            theContinuation.ShouldRefresh = true;\n\n            var resolver = MockRepository.GenerateStub<IAjaxContinuationResolver>();\n            resolver.Stub(x => x.Resolve(theNotification)).Return(theContinuation);\n\n            services.Add(resolver);\n\n            return request;\n        }\n\n        [Test]\n        public void does_nothing_if_the_notification_is_valid()\n        {\n            var request = requestFor<LoFiTarget>();\n            theModifier.Modify(request);\n\n            request.CurrentTag.Data(\"validation-results\").ShouldBeNull();\n        }\n\n        [Test]\n        public void serializes_the_continuation_if_the_notification_is_invalid()\n        {\n            var request = requestFor<LoFiTarget>();\n            theNotification.RegisterMessage(StringToken.FromKeyString(\"Test\", \"Test\"));\n            theModifier.Modify(request);\n\n            request.CurrentTag.Data(\"validation-results\").ShouldBe(theContinuation.ToDictionary());\n        }\n\n        [Test]\n        public void writes_the_validation_results_activator_requirement()\n        {\n            var request = requestFor<LoFiTarget>();\n            theNotification.RegisterMessage(StringToken.FromKeyString(\"Test\", \"Test\"));\n            theModifier.Modify(request);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/NumberElementModifierTester.cs",
    "content": "using FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation.Web.UI;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class NumberElementModifierTester : ValidationElementModifierContext<NumberElementModifier>\n    {\n        [Test]\n        public void adds_the_number_css_class_for_numeric_types()\n        {\n            tagFor(ElementRequest.For<NumberElementTarget>(x => x.Integer)).HasClass(\"number\").ShouldBeTrue();\n            tagFor(ElementRequest.For<NumberElementTarget>(x => x.Double)).HasClass(\"number\").ShouldBeTrue();\n            tagFor(ElementRequest.For<NumberElementTarget>(x => x.Decimal)).HasClass(\"number\").ShouldBeTrue();\n            tagFor(ElementRequest.For<NumberElementTarget>(x => x.Float)).HasClass(\"number\").ShouldBeTrue();\n        }\n\n        [Test]\n        public void no_number_class_for_other_types()\n        {\n            new NumberElementModifier().Matches(ElementRequest.For<NumberElementTarget>(x => x.NoNumber)).ShouldBeFalse();\n        }\n\n\n        public class NumberElementTarget\n        {\n            public string NoNumber { get; set; }\n            public int Integer { get; set; }\n            public double Double { get; set; }\n            public decimal Decimal { get; set; }\n            public float Float { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/RangeLengthModifierTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuCore;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web.UI;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class RangeLengthModifierTester : ValidationElementModifierContext<RangeLengthModifier>\n    {\n        [Test]\n        public void adds_the_rangelength_data_attribute_for_range_length_rule()\n        {\n            var theRequest = ElementRequest.For(new TargetWithRangeLength(), x => x.Value);\n            var values = tagFor(theRequest).Data(\"rangelength\").As<IDictionary<string, object>>();\n\n            values[\"min\"].ShouldBe(5);\n            values[\"max\"].ShouldBe(10);\n        }\n\n        [Test]\n        public void no_rangelength_data_attribute_when_rule_does_not_exist()\n        {\n            var theRequest = ElementRequest.For(new TargetWithNoRangeLength(), x => x.Value);\n            tagFor(theRequest).Data(\"rangelength\").ShouldBeNull();\n        }\n\n\n        public class TargetWithRangeLength\n        {\n            [RangeLength(5, 10)]\n            public string Value { get; set; }\n        }\n\n        public class TargetWithNoRangeLength\n        {\n            public string Value { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/RegularExpressionModifierTester.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web.UI;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n\t[TestFixture]\n\tpublic class RegularExpressionModifierTester : ValidationElementModifierContext<RegularExpressionModifier>\n\t{\n\t\tpublic const string Expression = \"[a-zA-Z0-9]+$\";\n\n\t\t[Test]\n\t\tpublic void adds_the_rangelength_data_attribute_for_range_length_rule()\n\t\t{\n\t\t\tvar theRequest = ElementRequest.For(new TargetWithRegex(), x => x.Value);\n\t\t\tvar value = tagFor(theRequest).Data(\"regex\").As<string>();\n\n\t\t\tvalue.ShouldBe(Expression);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void no_rangelength_data_attribute_when_rule_does_not_exist()\n\t\t{\n\t\t\tvar theRequest = ElementRequest.For(new TargetWithNoRegex(), x => x.Value);\n\t\t\ttagFor(theRequest).Data(\"rangelength\").ShouldBeNull();\n\t\t}\n\n\n\t\tpublic class TargetWithRegex\n\t\t{\n\t\t\t[RegularExpression(Expression)]\n\t\t\tpublic string Value { get; set; }\n\t\t}\n\n\t\tpublic class TargetWithNoRegex\n\t\t{\n\t\t\tpublic string Value { get; set; }\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/RemoteValidationElementModifierTester.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Urls;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Core.Validation.Web.Remote;\nusing FubuMVC.Core.Validation.Web.UI;\nusing HtmlTags;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class RemoteValidationElementModifierTester\n    {\n        private RemoteValidationElementModifier theModifier;\n        private HtmlTag theTag;\n        private ElementRequest theRequest;\n        private RemoteRuleGraph theRemoteGraph;\n        private InMemoryServiceLocator theServices;\n        private IUrlRegistry theUrls;\n        private RemoteFieldRule theRemoteRule;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theModifier = new RemoteValidationElementModifier();\n            theTag = new HtmlTag(\"input\");\n\n            theRequest = ElementRequest.For<RemoteTarget>(x => x.Username);\n            theRequest.ReplaceTag(theTag);\n\n            theRemoteGraph = new RemoteRuleGraph();\n            theRemoteRule = theRemoteGraph.RegisterRule(theRequest.Accessor, new UniqueUsernameRule());\n\n            theUrls = new StubUrlRegistry();\n\n            theServices = new InMemoryServiceLocator();\n            theServices.Add(theRemoteGraph);\n            theServices.Add(theUrls);\n\n            theRequest.Attach(theServices);\n        }\n\n        [Test]\n        public void always_matches()\n        {\n            theModifier.Matches(null).ShouldBeTrue();\n        }\n\n        [Test]\n        public void registers_the_validation_def()\n        {\n            theModifier.Modify(theRequest);\n\n            var def = theRequest.CurrentTag.Data(\"remote-rule\").As<RemoteValidationDef>();\n            def.url.ShouldBe(theUrls.RemoteRule());\n            def.rules.ShouldHaveTheSameElementsAs(theRemoteRule.ToHash());\n        }\n        \n        [Test]\n        public void no_registration_when_no_rules_are_found()\n        {\n            theRemoteGraph = new RemoteRuleGraph();\n            theServices.Add(theRemoteGraph);\n\n            theModifier.Modify(theRequest);\n\n            theRequest.CurrentTag.Data(\"remote-rule\").ShouldBeNull();\n        }\n\n        public class RemoteTarget\n        {\n            public string Username { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/RenderingStrategyTester.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.UI.Forms;\nusing FubuMVC.Core.Validation.Web.UI;\nusing HtmlTags;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class RenderingStrategyTester\n    {\n        private FormRequest theRequest;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theRequest = new FormRequest(new ChainSearch {Type = typeof (object)}, new object());\n            var theForm = new FormTag(\"test\");\n            theRequest.ReplaceTag(theForm);\n        }\n\n        [Test]\n        public void summary_strategy_adds_the_validation_summary_attribute()\n        {\n            RenderingStrategies.Summary.Modify(theRequest);\n            theRequest.CurrentTag.Data(\"validation-summary\").As<bool>().ShouldBeTrue();\n        }\n\n        [Test]\n        public void highlight_strategy_adds_the_validation_highlight_attribute()\n        {\n            RenderingStrategies.Highlight.Modify(theRequest);\n            theRequest.CurrentTag.Data(\"validation-highlight\").As<bool>().ShouldBeTrue();\n        }\n\n        [Test]\n        public void inline_strategy_adds_the_validation_inline_attribute()\n        {\n            RenderingStrategies.Inline.Modify(theRequest);\n            theRequest.CurrentTag.Data(\"validation-inline\").As<bool>().ShouldBeTrue();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/ValidationElementModifierContext.cs",
    "content": "using FubuMVC.Core.UI.Elements;\nusing HtmlTags;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    public abstract class ValidationElementModifierContext<T> where T : IElementModifier, new()\n    {\n        protected HtmlTag tagFor(ElementRequest request)\n        {\n            return ValidationElementModifierScenario<T>.For(x => { x.Request = request; }).Tag;\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/ValidationElementModifierScenario.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuMVC.Core.UI.Elements;\nusing FubuMVC.Core.Validation;\nusing HtmlTags;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    public class ValidationElementModifierScenario<T>\n        where T : IElementModifier, new()\n    {\n        public ElementRequest Request { get; private set; }\n        public HtmlTag Tag { get; private set; }\n        public T Modifier { get; private set; }\n\n        public static ValidationElementModifierScenario<T> For(Action<ScenarioDefinition> configure)\n        {\n            var definition = new ScenarioDefinition();\n            configure(definition);\n\n            if(definition.Request.CurrentTag == null)\n            {\n                definition.Request.ReplaceTag(definition.Tag);\n            }\n\n            definition.Request.Attach(definition.Services);\n\n            definition.Modifier.Modify(definition.Request);\n\n            return new ValidationElementModifierScenario<T>\n            {\n                Tag = definition.Tag,\n                Request = definition.Request,\n                Modifier = definition.Modifier\n            };\n        }\n\n        public class ScenarioDefinition\n        {\n            public ScenarioDefinition()\n            {\n                Tag = new HtmlTag(\"input\");\n                Services = new InMemoryServiceLocator();\n                Modifier = new T();\n                Services.Add(ValidationGraph.BasicGraph());\n                Services.Add<ITypeResolver>(new TypeResolver());\n            }\n\n            public InMemoryServiceLocator Services { get; private set; }\n            public ElementRequest Request { get; set; }\n            public HtmlTag Tag { get; set; }\n            public T Modifier { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/UI/ValidationNodeTester.cs",
    "content": "﻿using FubuMVC.Core.Validation.Web;\nusing FubuMVC.Core.Validation.Web.UI;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web.UI\n{\n    [TestFixture]\n    public class ValidationNodeTester\n    {\n        private ValidationNode theValidationNode;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theValidationNode = new ValidationNode();\n        }\n\n        [Test]\n        public void no_duplicates()\n        {\n            var s1 = MockRepository.GenerateStub<IRenderingStrategy>();\n            theValidationNode.RegisterStrategy(s1);\n\n            theValidationNode.ShouldHaveTheSameElementsAs(s1);\n        }\n\n        [Test]\n        public void clears_the_strategies()\n        {\n            var s1 = MockRepository.GenerateStub<IRenderingStrategy>();\n            var s2 = MockRepository.GenerateStub<IRenderingStrategy>();\n\t\t\t\n            theValidationNode.RegisterStrategy(s1);\n            theValidationNode.RegisterStrategy(s2);\n\n            theValidationNode.Clear();\n\n            theValidationNode.ShouldHaveCount(0);\n        }\n\n        [Test]\n        public void defaults()\n        {\n            var strategies = ValidationNode.Default();\n            strategies.ShouldHaveTheSameElementsAs(RenderingStrategies.Summary, RenderingStrategies.Highlight);\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/ValidationActionFilterTester.cs",
    "content": "﻿using FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n    [TestFixture]\n    public class ValidationActionFilterTester : InteractionContext<ValidationActionFilter<ActionFilterTarget>>\n    {\n        private ActionFilterTarget theTarget;\n        private Notification theNotification;\n\n        protected override void beforeEach()\n        {\n            theTarget = new ActionFilterTarget();\n            theNotification = new Notification();\n            MockFor<IValidationFilter<ActionFilterTarget>>().Stub(x => x.Validate(theTarget)).Return(theNotification);\n        }\n\n        private FubuContinuation theContinuation { get { return ClassUnderTest.Validate(theTarget); } }\n\n        [Test]\n        public void continues_to_next_behavior_when_validation_succeeds()\n        {\n            theContinuation.AssertWasContinuedToNextBehavior();\n        }\n\n        [Test]\n        public void transfers_to_GET_category_of_input_type_when_validation_fails()\n        {\n            theNotification.RegisterMessage(StringToken.FromKeyString(\"Test\"));\n            theContinuation.AssertWasTransferedTo(theTarget, \"GET\");\n        }\n\n        [Test]\n        public void sets_the_notification_in_the_request()\n        {\n            theNotification.RegisterMessage(StringToken.FromKeyString(\"Test\"));\n            ClassUnderTest.Validate(theTarget);\n            MockFor<IFubuRequest>().AssertWasCalled(x => x.Set(theNotification));\n        }\n    }\n\n    public class ActionFilterTarget\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/ValidationAjaxExtensionsTester.cs",
    "content": "﻿using FubuMVC.Core.Ajax;\nusing FubuMVC.Core.Validation.Web;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n\t[TestFixture]\n\tpublic class ValidationAjaxExtensionsTester\n\t{\n\t\t[Test]\n\t\tpublic void gets_and_sets_the_validation_origin()\n\t\t{\n\t\t\tvar continuation = new AjaxContinuation();\n\n\t\t\tcontinuation.ValidationOrigin(ValidationOrigin.Server);\n\t\t\tcontinuation.ValidationOrigin().ShouldBe(ValidationOrigin.Server);\n\n\t\t\tcontinuation.ValidationOrigin(ValidationOrigin.Client);\n\t\t\tcontinuation.ValidationOrigin().ShouldBe(ValidationOrigin.Client);\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/ValidationBehaviorChainExtensionsTester.cs",
    "content": "﻿using FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Validation.Web;\nusing NUnit.Framework;\nusing Shouldly;\nusing StructureMap.Pipeline;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n    [TestFixture]\n    public class ValidationBehaviorChainExtensionsTester\n    {\n        [Test]\n        public void finds_the_validation_node()\n        {\n            var stub = new StubValidationBehaviorNode\n            {\n                Validation = ValidationNode.Default()\n            };\n\n            var chain = new BehaviorChain();\n            chain.AddToEnd(stub);\n\n            chain.ValidationNode().ShouldBe(stub.Validation);\n        }\n\n        [Test]\n        public void returns_empty_if_no_validation_node_exists()\n        {\n            var chain = new BehaviorChain();\n            chain.ValidationNode().ShouldBe(ValidationNode.Empty());\n        }\n\n        public class StubValidationBehaviorNode : BehaviorNode, IHaveValidation\n        {\n            protected override IConfiguredInstance buildInstance()\n            {\n                throw new System.NotImplementedException();\n            }\n\n            public override BehaviorCategory Category\n            {\n                get { throw new System.NotImplementedException(); }\n            }\n\n            public ValidationNode Validation { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/ValidationConventionTester.cs",
    "content": "﻿using System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Core.Validation.Web.UI;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n    [TestFixture]\n    public class ValidationConventionTester\n    {\n        [Test]\n        public void adds_validation_action_filter_for_lofi_endpoints()\n        {\n            var call = ActionCall.For<SampleInputModel>(x => x.Test(null));\n            \n            var chain = new BehaviorChain();\n            chain.AddToEnd(call);\n\n            ValidationPolicy.ApplyValidation(call, new ValidationSettings());\n\n            var nodes = chain.ToArray();\n\t\t\tvar node = nodes[0].As<IHaveValidation>();\n\n\t\t\tnode.As<ActionFilter>().HandlerType.ShouldBe(typeof (ValidationActionFilter<string>));\n        }\n\n        [Test]\n        public void adds_ajax_validation_action_filter_for_ajax_endpoints()\n        {\n            var call = ActionCall.For<SampleAjaxModel>(x => x.post_model(null));\n\n            var chain = new BehaviorChain();\n            chain.AddToEnd(call);\n\n            ValidationPolicy.ApplyValidation(call, new ValidationSettings());\n\n            var nodes = chain.ToArray();\n        \tvar node = nodes[0].As<IHaveValidation>();\n\n        \tnode.ShouldBeOfType<AjaxValidationNode>();\n        }\n\n\t\t[Test, Explicit] // Might just make all of this go away by changing how this is all done\n\t\tpublic void applies_modifications_from_the_settings()\n\t\t{\n\t\t\tvar call = ActionCall.For<SampleInputModel>(x => x.Test(null));\n\n\t\t\tvar chain = new BehaviorChain();\n\t\t\tchain.AddToEnd(call);\n\n\t\t\tvar settings = new ValidationSettings();\n\t\t\tsettings.ForInputType<string>(x =>\n\t\t\t{\n\t\t\t\tx.Clear();\n\t\t\t\tx.RegisterStrategy(RenderingStrategies.Inline);\n\t\t\t});\n\n\t\t\tValidationPolicy.ApplyValidation(call, settings);\n\n\t\t\tchain.ValidationNode().ShouldHaveTheSameElementsAs(RenderingStrategies.Inline);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void no_modifications_from_the_settings()\n\t\t{\n\t\t\tvar call = ActionCall.For<SampleInputModel>(x => x.Test(null));\n\n\t\t\tvar chain = new BehaviorChain();\n\t\t\tchain.AddToEnd(call);\n\n\t\t\tvar settings = new ValidationSettings();\n\t\t\tsettings.ForInputType<int>(x =>\n\t\t\t{\n\t\t\t\tx.Clear();\n\t\t\t\tx.RegisterStrategy(RenderingStrategies.Inline);\n\t\t\t});\n\n\t\t\tValidationPolicy.ApplyValidation(call, settings);\n\n\t\t\tchain.ValidationNode().ShouldHaveTheSameElementsAs(RenderingStrategies.Summary, RenderingStrategies.Highlight);\n\t\t}\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/ValidationFilterTester.cs",
    "content": "﻿using FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Tests.TestSupport;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n    [TestFixture]\n    public class ValidationFilterTester : InteractionContext<ValidationFilter<SampleInputModel>>\n    {\n        private SampleInputModel theInput;\n        private Notification theNotification;\n\n        protected override void beforeEach()\n        {\n            theInput = new SampleInputModel();\n            theNotification = new Notification();\n\n            MockFor<IValidator>().Stub(x => x.Validate(theInput)).Return(theNotification);\n        }\n\n        [Test]\n        public void builds_up_the_notification()\n        {\n            ClassUnderTest.Validate(theInput).ShouldBeTheSameAs(theNotification);\n        }\n\n        [Test]\n        public void adds_model_binding_errors()\n        {\n            ClassUnderTest.Validate(theInput);\n\n            MockFor<IModelBindingErrors>().AssertWasCalled(x => x.AddAnyErrors<SampleInputModel>(theNotification));\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/ValidationModeAttributePolicyTester.cs",
    "content": "﻿using System;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n\t[TestFixture]\n\tpublic class ValidationModeAttributePolicyTester\n\t{\n\t\tprivate Accessor accessorFor<T>(Expression<Func<T, object>> expression)\n\t\t{\n\t\t\treturn SingleProperty.Build(expression);\n\t\t}\n\n\t\tprivate bool matches<T>(Expression<Func<T, object>> expression)\n\t\t{\n\t\t\tvar accessor = accessorFor(expression);\n\t\t\treturn new ValidationModeAttributePolicy().Matches(new InMemoryServiceLocator(), accessor);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void matches_accessors_for_properties_with_live_validation_attribute()\n\t\t{\n\t\t\tmatches<ValidationModeAttributeTarget>(x => x.Live).ShouldBeTrue();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void matches_accessors_for_properties_with_triggered_validation_attribute()\n\t\t{\n\t\t\tmatches<ValidationModeAttributeTarget>(x => x.Triggered).ShouldBeTrue();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void matches_accessors_for_properties_belonging_to_a_class_with_validation_attribute()\n\t\t{\n\t\t\tmatches<ClassLevelValidationModeAttributeTarget>(x => x.Property).ShouldBeTrue();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void matches_accessors_for_properties_with_no_validation_mode_attributes()\n\t\t{\n\t\t\tmatches<ValidationModeAttributeTarget>(x => x.Ignored).ShouldBeFalse();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void mode_is_determined_from_live_attribute()\n\t\t{\n\t\t\tvar accessor = accessorFor<ValidationModeAttributeTarget>(x => x.Live);\n\t\t\tnew ValidationModeAttributePolicy()\n\t\t\t\t.DetermineMode(new InMemoryServiceLocator(), accessor)\n\t\t\t\t.ShouldBe(ValidationMode.Live);\n\t\t}\n\n\n\t\t[Test]\n\t\tpublic void mode_is_determined_from_triggered_attribute()\n\t\t{\n\t\t\tvar accessor = accessorFor<ValidationModeAttributeTarget>(x => x.Triggered);\n\t\t\tnew ValidationModeAttributePolicy()\n\t\t\t\t.DetermineMode(new InMemoryServiceLocator(), accessor)\n\t\t\t\t.ShouldBe(ValidationMode.Triggered);\n\t\t}\n\n\t\t[Test]\n\t\tpublic void mode_is_determined_from_class_level_attribute()\n\t\t{\n\t\t\tvar accessor = accessorFor<ClassLevelValidationModeAttributeTarget>(x => x.Property);\n\t\t\tnew ValidationModeAttributePolicy()\n\t\t\t\t.DetermineMode(new InMemoryServiceLocator(), accessor)\n\t\t\t\t.ShouldBe(ValidationMode.Triggered);\n\t\t}\n\n\t\tpublic class ValidationModeAttributeTarget\n\t\t{\n\t\t\t[TriggeredValidation]\n\t\t\tpublic string Triggered { get; set; }\n\n\t\t\t[LiveValidation]\n\t\t\tpublic string Live { get; set; }\n\n\t\t\tpublic string Ignored { get; set; }\n\t\t}\n\n\t\t[TriggeredValidation]\n\t\tpublic class ClassLevelValidationModeAttributeTarget\n\t\t{\n\t\t\tpublic string Property { get; set; }\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/ValidationNodeModificationTester.cs",
    "content": "﻿using FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Tests.Validation.Web.UI;\nusing NUnit.Framework;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n\t[TestFixture]\n\tpublic class ValidationNodeModificationTester\n\t{\n\t\t[Test]\n\t\tpublic void matches()\n\t\t{\n\t\t\tnew ValidationNodeModification(x => true, null).Matches(new BehaviorChain()).ShouldBeTrue();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void matches_negative()\n\t\t{\n\t\t\tnew ValidationNodeModification(x => false, null).Matches(new BehaviorChain()).ShouldBeFalse();\n\t\t}\n\n\t\t[Test]\n\t\tpublic void modifies_the_validation_node()\n\t\t{\n\t\t\tvar modification = new ValidationNodeModification(null, x => x.Clear());\n\t\t\tvar node = new AjaxValidationNode(ActionCall.For<FormValidationModeEndpoint>(x => x.post_ajax(null)));\n\t\t\t\n\t\t\tvar chain = new BehaviorChain();\n\t\t\tchain.AddToEnd(node);\n\n\t\t\tmodification.Modify(chain);\n\n\t\t\tnode.ShouldHaveCount(0);\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/Web/ValidationNodeTester.cs",
    "content": "﻿using FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Registration.Nodes;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Web;\nusing FubuMVC.Tests.Validation.Web.UI;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation.Web\n{\n    [TestFixture]\n    public class ValidationNodeTester\n    {\n        [Test]\n        public void default_rendering_strategies()\n        {\n            new AjaxValidationNode(ActionCall.For<FormValidationModeEndpoint>(x => x.post_ajax(null)))\n                .Validation\n                .ShouldHaveTheSameElementsAs(ValidationNode.Default());\n\n            new ValidationActionFilter(null, null)\n                .Validation\n                .ShouldHaveTheSameElementsAs(ValidationNode.Default());\n        }\n\n        [Test]\n        public void is_empty()\n        {\n            ValidationNode.Empty().IsEmpty().ShouldBeTrue();\n        }\n\n        [Test]\n        public void is_empty_negative()\n        {\n            ValidationNode.Default().IsEmpty().ShouldBeFalse();\n        }\n\n        [Test]\n        public void default_mode_is_live()\n        {\n            new ValidationNode().Mode.ShouldBe(ValidationMode.Live);\n        }\n\n        [Test]\n        public void override_the_default_mode()\n        {\n            var node = new ValidationNode();\n            node.DefaultMode(ValidationMode.Triggered);\n            node.Mode.ShouldBe(ValidationMode.Triggered);\n        }\n\n        [Test]\n        public void determine_the_mode_uses_the_matching_policy()\n        {\n            var accessor = SingleProperty.Build<ValidationModeTarget>(x => x.Property);\n            var services = new InMemoryServiceLocator();\n            services.Add(new AccessorRules());\n            var mode = ValidationMode.Triggered;\n\n            var p1 = MockRepository.GenerateStub<IValidationModePolicy>();\n            p1.Stub(x => x.Matches(services, accessor)).Return(true);\n            p1.Stub(x => x.DetermineMode(services, accessor)).Return(mode);\n\n            var node = new ValidationNode();\n            node.DefaultMode(ValidationMode.Live);\n            node.RegisterPolicy(p1);\n\n            node.As<IValidationNode>().DetermineMode(services, accessor).ShouldBe(mode);\n        }\n\n        [Test]\n        public void determine_the_mode_uses_the_last_matching_policy()\n        {\n            var accessor = SingleProperty.Build<ValidationModeTarget>(x => x.Property);\n            var services = new InMemoryServiceLocator();\n            services.Add(new AccessorRules());\n            var mode = ValidationMode.Triggered;\n\n            var p1 = MockRepository.GenerateStub<IValidationModePolicy>();\n            p1.Stub(x => x.Matches(services, accessor)).Return(true);\n            p1.Stub(x => x.DetermineMode(services, accessor)).Return(ValidationMode.Live);\n\n            var p2 = MockRepository.GenerateStub<IValidationModePolicy>();\n            p2.Stub(x => x.Matches(services, accessor)).Return(true);\n            p2.Stub(x => x.DetermineMode(services, accessor)).Return(mode);\n\n            var node = new ValidationNode();\n            node.DefaultMode(ValidationMode.Live);\n            node.RegisterPolicy(p1);\n            node.RegisterPolicy(p2);\n\n            node.As<IValidationNode>().DetermineMode(services, accessor).ShouldBe(mode);\n        }\n\n        [Test]\n        public void determine_the_mode_uses_the_default_when_no_policies_match()\n        {\n            var accessor = SingleProperty.Build<ValidationModeTarget>(x => x.Property);\n            var services = new InMemoryServiceLocator();\n            services.Add(new AccessorRules());\n\n            var p1 = MockRepository.GenerateStub<IValidationModePolicy>();\n            p1.Stub(x => x.Matches(services, accessor)).Return(false);\n            p1.Stub(x => x.DetermineMode(services, accessor)).Return(ValidationMode.Triggered);\n\n            var node = new ValidationNode();\n            node.DefaultMode(ValidationMode.Live);\n            node.RegisterPolicy(p1);\n\n            node.As<IValidationNode>().DetermineMode(services, accessor).ShouldBe(ValidationMode.Live);\n        }\n\n        [Test]\n        public void default_element_timeout_is_500ms()\n        {\n            new ValidationNode().ElementTimeout.ShouldBe(ValidationNode.DefaultTimeout);\n        }\n\n        public class ValidationModeTarget\n        {\n            public string Property { get; set; }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/Validation/intregated_rule_using_service_tester.cs",
    "content": "using FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Localization;\nusing FubuMVC.Core.Validation;\nusing FubuMVC.Core.Validation.Fields;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Shouldly;\n\nnamespace FubuMVC.Tests.Validation\n{\n    [TestFixture]\n    public class intregated_rule_using_service_tester\n    {\n        private CreateUser theModel;\n        private IUserService theService;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theModel = new CreateUser { Username = \"test\" };\n            theService = MockRepository.GenerateStub<IUserService>();\n        }\n\n        private Notification theNotification\n        {\n            get\n            {\n                var scenario = ValidationScenario<CreateUser>.For(x =>\n                {\n                    x.Model = theModel;\n                    x.Service(theService);\n                    x.FieldRule(new UniqueUserNameRule());\n                });\n\n                return scenario.Notification;\n            }\n        }\n\n        [Test]\n        public void fails_if_external_service_reports_failure()\n        {\n            theService.Stub(service => service.ExistsByUsername(theModel.Username)).Return(true);\n            theNotification.MessagesFor<CreateUser>(m => m.Username).ShouldHaveCount(1);\n        }\n\n        [Test]\n        public void succeeds_if_external_service_reports_success()\n        {\n            theService.Stub(service => service.ExistsByUsername(theModel.Username)).Return(false);\n            theNotification.MessagesFor<CreateUser>(m => m.Username).ShouldHaveCount(0);\n        }\n\n        public class CreateUser\n        {\n            public string Username { get; set; }\n        }\n\n        public interface IUserService\n        {\n            bool ExistsByUsername(string username);\n        }\n\n        public class UniqueUserNameRule : IFieldValidationRule\n        {\n            public static readonly string FIELD = \"field\";\n\n\t        public StringToken Token { get; set; }\n\n\t\t\tpublic ValidationMode Mode { get; set; }\n\n\t        public void Validate(Accessor accessor, ValidationContext context)\n            {\n                var username = context.GetFieldValue<string>(accessor);\n                var userService = context.Service<IUserService>();\n                \n                if (userService.ExistsByUsername(username))\n                {\n                    var token = new ValidationKeys(\"Username {0} is already in use.\".ToFormat(FIELD.AsTemplateField()));\n                    var msg = new NotificationMessage(token);\n                    msg.AddSubstitution(FIELD, username);\n\n                    context.Notification.RegisterMessage(accessor, msg);\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/View/Attachment/FakeViewToken.cs",
    "content": "using System;\nusing FubuMVC.Core.View;\nusing FubuMVC.Core.View.Model;\nusing FubuMVC.Core.View.Rendering;\n\nnamespace FubuMVC.Tests.View.Attachment\n{\n    public class FakeViewToken : IViewToken, ITemplateFile\n    {\n        public string Namespace { get; set; }\n        public Type ViewModel { get; set; }\n        public string ProfileName { get; set; }\n\n        public string ViewName { get; set; }\n        public string Name()\n        {\n            return ViewName;\n        }\n\n        public void AttachViewModels(ViewTypePool types, ITemplateLogger logger)\n        {\n            throw new NotImplementedException();\n        }\n\n        public string FilePath { get; set; }\n        public string ViewPath { get; private set; }\n        public Parsing Parsing { get; private set; }\n        public string RelativePath()\n        {\n            throw new NotImplementedException();\n        }\n\n        public string DirectoryPath()\n        {\n            throw new NotImplementedException();\n        }\n\n        public string RelativeDirectoryPath()\n        {\n            throw new NotImplementedException();\n        }\n\n        public bool IsPartial()\n        {\n            throw new NotImplementedException();\n        }\n\n        public ITemplateFile Master { get; set; }\n        public IRenderableView GetView()\n        {\n            throw new NotImplementedException();\n        }\n\n        public IRenderableView GetPartialView()\n        {\n            throw new NotImplementedException();\n        }\n\n        public void AttachLayouts(string defaultLayoutName, IViewFacility facility, ITemplateFolder folder)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/View/Attachment/ViewExclusionTester.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.View;\r\nusing FubuMVC.Core.View.Model;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.View.Attachment\r\n{\r\n    [TestFixture]\r\n    public class ViewExclusionTester\r\n    {\r\n        [Test]\r\n        public void do_not_use_the_excluded_views()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.AlterSettings<ViewEngineSettings>(x => {\r\n                x.AddFacility(new FakeViewEngine1());\r\n                x.AddFacility(new FakeViewEngine2());\r\n\r\n                x.ExcludeViews(v => v.Name().StartsWith(\"A\"));\r\n                x.ExcludeViews(v => v.Name().StartsWith(\"C\"));\r\n            });\r\n\r\n            var graph = BehaviorGraph.BuildFrom(registry);\r\n            var views = graph.Settings.Get<ViewEngineSettings>().BuildViewBag(graph, new ActivationDiagnostics(), FubuApplicationFiles.ForDefault());\r\n\r\n            views.Result.OrderBy(x => x.Name()).Select(x => x.Name())\r\n                .ShouldHaveTheSameElementsAs(\"B1\", \"B2\", \"B3\", \"B4\", \"B5\", \"B6\");\r\n        }\r\n    }\r\n\r\n    public class FakeViewEngine1 : IViewFacility\r\n    {\r\n        private List<ITemplateFile> _views;\r\n\r\n        private static IEnumerable<ITemplateFile> tokens()\r\n        {\r\n            yield return new FakeViewToken {ViewName = \"A1\"};\r\n            yield return new FakeViewToken {ViewName = \"A2\"};\r\n            yield return new FakeViewToken {ViewName = \"A3\"};\r\n            yield return new FakeViewToken {ViewName = \"B1\"};\r\n            yield return new FakeViewToken {ViewName = \"B2\"};\r\n            yield return new FakeViewToken {ViewName = \"B3\"};\r\n            yield return new FakeViewToken {ViewName = \"C1\"};\r\n            yield return new FakeViewToken {ViewName = \"C2\"};\r\n            yield return new FakeViewToken {ViewName = \"C3\"};\r\n            yield return new FakeViewToken {ViewName = \"C4\"};\r\n        }\r\n\r\n        public void AttachLayouts(ViewEngineSettings settings)\r\n        {\r\n            \r\n        }\r\n\r\n\r\n        public void Fill(ViewEngineSettings settings, BehaviorGraph graph, IPerfTimer timer, IFubuApplicationFiles files)\r\n        {\r\n            _views = tokens().Where(x => !graph.Settings.Get<ViewEngineSettings>().IsExcluded(x)).ToList();\r\n        }\r\n\r\n        public IEnumerable<IViewToken> AllViews()\r\n        {\r\n            return _views;\r\n        }\r\n\r\n        public ITemplateFile FindInShared(string viewName)\r\n        {\r\n            throw new System.NotImplementedException();\r\n        }\r\n\r\n        public ViewEngineSettings Settings { get; set; }\r\n        public Type TemplateType { get; private set; }\r\n\r\n        public Task LayoutAttachment\r\n        {\r\n            get\r\n            {\r\n                return Task.Factory.StartNew(() => Console.WriteLine(\"Hello from view engine 1\"))\r\n                ;\r\n            }\r\n        }\r\n\r\n        public void AttachViewModels(ViewTypePool types, ITemplateLogger logger)\r\n        {\r\n        }\r\n\r\n        public void ReadSharedNamespaces(CommonViewNamespaces namespaces)\r\n        {\r\n        }\r\n    }\r\n\r\n    public class FakeViewEngine2 : IViewFacility\r\n    {\r\n        private List<ITemplateFile> _views;\r\n\r\n        private static IEnumerable<ITemplateFile> tokens()\r\n        {\r\n            yield return new FakeViewToken {ViewName = \"A4\"};\r\n            yield return new FakeViewToken {ViewName = \"A5\"};\r\n            yield return new FakeViewToken {ViewName = \"A6\"};\r\n            yield return new FakeViewToken {ViewName = \"B4\"};\r\n            yield return new FakeViewToken {ViewName = \"B5\"};\r\n            yield return new FakeViewToken {ViewName = \"B6\"};\r\n            yield return new FakeViewToken {ViewName = \"C5\"};\r\n            yield return new FakeViewToken {ViewName = \"C6\"};\r\n            yield return new FakeViewToken {ViewName = \"C7\"};\r\n            yield return new FakeViewToken {ViewName = \"C8\"};\r\n        }\r\n\r\n        public void Fill(ViewEngineSettings settings, BehaviorGraph graph, IPerfTimer timer, IFubuApplicationFiles files)\r\n        {\r\n            _views = tokens().Where(x => !graph.Settings.Get<ViewEngineSettings>().IsExcluded(x)).ToList();\r\n        }\r\n\r\n        public IEnumerable<IViewToken> AllViews()\r\n        {\r\n            return _views;\r\n        }\r\n\r\n        public ITemplateFile FindInShared(string viewName)\r\n        {\r\n            throw new System.NotImplementedException();\r\n        }\r\n\r\n        public ViewEngineSettings Settings { get; set; }\r\n        public Type TemplateType { get; private set; }\r\n        public Task LayoutAttachment\r\n        {\r\n            get\r\n            {\r\n                return Task.Factory.StartNew(() => Console.WriteLine(\"Hello from view engine 2\"))\r\n                ;\r\n            }\r\n        }\r\n\r\n        public void AttachViewModels(ViewTypePool types, ITemplateLogger logger)\r\n        {\r\n        }\r\n\r\n        public void ReadSharedNamespaces(CommonViewNamespaces namespaces)\r\n        {\r\n        }\r\n\r\n        public void AttachLayouts(ViewEngineSettings settings)\r\n        {\r\n            \r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/View/AuthorizationOnPageExtensionsTester.cs",
    "content": "using FubuMVC.Core.Security;\nusing FubuMVC.Core.Security.Authorization;\nusing FubuMVC.Core.View;\nusing Shouldly;\nusing HtmlTags;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.UI\n{\n    [TestFixture]\n    public class ReadOnlyIfNotAuthorizedTester\n    {\n        [Test]\n        public void do_nothing_to_a_div()\n        {\n            var tag = new HtmlTag(\"div\").Authorized(false)\n                .ReadOnlyIfNotAuthorized();\n\n            tag.Authorized().ShouldBeFalse();\n            tag.TagName().ShouldBe(\"div\");\n            \n        }\n\n        [Test]\n        public void do_nothing_to_a_link_that_is_authorized()\n        {\n            var tag = new HtmlTag(\"a\").Authorized(true)\n                .ReadOnlyIfNotAuthorized();\n\n            tag.Authorized().ShouldBeTrue();\n            tag.TagName().ShouldBe(\"a\");\n        }\n\n        [Test]\n        public void change_an_unauthorized_link_to_a_span_and_authorize_the_span()\n        {\n            var tag = new HtmlTag(\"a\").Authorized(false)\n                .ReadOnlyIfNotAuthorized();\n\n            tag.Authorized().ShouldBeTrue();\n            tag.TagName().ShouldBe(\"span\");\n        }\n    }\n\n    [TestFixture]\n    public class RequiresAccessToTester\n    {\n        [SetUp]\n        public void SetUp()\n        {\n            PrincipalRoles.SetCurrentRolesForTesting(\"a\", \"b\");\n        }\n\n        [Test]\n        public void positive_case_starting_from_authorized()\n        {\n            new HtmlTag(\"a\").Authorized(true).RequiresAccessTo(\"a\", \"b\")\n                .Authorized().ShouldBeTrue();\n        }\n\n        [Test]\n        public void positive_case_starting_from_not_authorized()\n        {\n            new HtmlTag(\"a\").Authorized(false).RequiresAccessTo(\"a\", \"b\")\n                .Authorized().ShouldBeFalse();\n        }\n\n        [Test]\n        public void negative_case_starting_from_authorized()\n        {\n            new HtmlTag(\"a\").Authorized(true).RequiresAccessTo(\"not a current role of this user\")\n                .Authorized().ShouldBeFalse();\n        }\n\n        [Test]\n        public void negative_case_starting_from_not_authorized()\n        {\n            new HtmlTag(\"a\").Authorized(false).RequiresAccessTo(\"not a current role of this user\")\n                .Authorized().ShouldBeFalse();\n        }\n    }\n\n    [TestFixture]\n    public class ReadOnlyTester\n    {\n        [Test]\n        public void sets_the_disabled_attribute()\n        {\n            new HtmlTag(\"a\").ReadOnly()\n                .Attr(\"disabled\").ShouldBe(\"disabled\");\n        }\n\n        [Test]\n        public void set_the_disabled_attribute_if_the_condition_is_true()\n        {\n            new HtmlTag(\"a\").ReadOnly(true)\n                .Attr(\"disabled\").ShouldBe(\"disabled\");\n        }\n\n        [Test]\n        public void do_not_set_the_disabled_attribute_if_the_condition_is_not_true()\n        {\n            new HtmlTag(\"a\").ReadOnly(false).HasAttr(\"disabled\").ShouldBeFalse();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/View/AuthorizedLinkExpressionsTester.cs",
    "content": "using System;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.View;\nusing Shouldly;\nusing HtmlTags;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.UI\n{\n    [TestFixture]\n    public class AuthorizedLinkExpressionsTester\n    {\n        private IFubuPage page;\n        private IEndpointService endpoints;\n        private Endpoint theEndpoint;\n\n\n        [SetUp]\n        public void SetUp()\n        {\n            _resultingTag = null;\n\n            page = MockRepository.GenerateMock<IFubuPage>();\n            endpoints = MockRepository.GenerateMock<IEndpointService>();\n\n            page.Expect(x => x.Get<IEndpointService>()).Return(endpoints);\n\n            theFinder = s => s.EndpointForNew<SomeEntity>();\n\n            theEndpoint = new Endpoint(){\n                IsAuthorized = false,\n                Url = \"some url\"\n            };\n\n            endpoints.Expect(x => x.EndpointForNew<SomeEntity>()).Return(theEndpoint);\n        }\n\n        private HtmlTag _resultingTag;\n        private Func<IEndpointService, Endpoint> theFinder;\n\n        private HtmlTag theResultingTag\n        {\n            get\n            {\n                if (_resultingTag == null)\n                {\n                    _resultingTag = page.AuthorizedLinkTo(theFinder);\n                }\n\n                return _resultingTag;\n            }\n        }\n\n        [Test]\n        public void get_a_link_for_an_authorized_endpoint()\n        {\n            theEndpoint.IsAuthorized = true;\n\n            theResultingTag.Attr(\"href\").ShouldBe(theEndpoint.Url);\n            theResultingTag.Authorized().ShouldBeTrue();\n\n            theResultingTag.ToString().ShouldNotBeEmpty();\n        }\n\n        [Test]\n        public void get_a_link_for_an_endpoint_that_is_not_authorized()\n        {\n            theEndpoint.IsAuthorized = false;\n\n            theResultingTag.Authorized().ShouldBeFalse();\n\n            theResultingTag.ToString().ShouldBeEmpty();\n        }\n\n    }\n\n    public class SomeEntity{}\n}"
  },
  {
    "path": "src/FubuMVC.Tests/View/AutoImportModelNamespacesConventionTester.cs",
    "content": "﻿using FakeTestNamespaceForAutoImport;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.View;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.View\r\n{\r\n    [TestFixture]\n    public class AutoImportModelNamespacesConventionTester\n    {\n        private FubuRegistry _registry;\n\n        [SetUp]\n        public void Setup()\n        {\n            _registry = new FubuRegistry();\n            _registry.Policies.Local.Add<AutoImportModelNamespacesConvention>();\n            _registry.Actions.IncludeType<FakeController>();\n            _registry.Actions.IncludeType<FakeAction>();\n        }\n\n        [Test]\n        public void when_auto_import_is_true_namespaces_are_added()\n        {\n            var graph = BehaviorGraph.BuildFrom(_registry);\n            var commonViewNamespaces = graph.Settings.Get<CommonViewNamespaces>();\r\n            commonViewNamespaces.Namespaces.ShouldContain(\"FakeTestNamespaceForAutoImport\");\r\n            commonViewNamespaces.Namespaces.ShouldContain(typeof(FakeAction).Namespace);\n        }\n\n        [Test]\n        public void when_auto_import_is_false_namespaces_are_not_added()\n        {\n            _registry.AlterSettings<CommonViewNamespaces>(x => x.DontAutoImportWhenNamespaceStartsWith(\"Fubu\"));\n\n            var graph = BehaviorGraph.BuildFrom(_registry);\n            var commonViewNamespaces = graph.Settings.Get<CommonViewNamespaces>();\n            commonViewNamespaces.Namespaces.ShouldContain(\"FakeTestNamespaceForAutoImport\");\n            commonViewNamespaces.Namespaces.ShouldNotContain(typeof(FakeAction).Namespace);\n        }\n    }\r\n\r\n    public class FakeAction\r\n    {\r\n        public FakeViewModel Execute(FakeInputModel input)\r\n        {\r\n            return new FakeViewModel();\r\n        }\r\n    }\r\n\r\n    public class FakeInputModel\r\n    {\r\n    }\r\n\r\n    public class FakeViewModel\r\n    {\r\n    }\n\n\r\n}\r\n\r\n\r\nnamespace FakeTestNamespaceForAutoImport\r\n{\r\n    public class FakeController\r\n    {\r\n        public FakeViewModel Execute(FakeInputModel input)\r\n        {\r\n            return new FakeViewModel();\r\n        }\r\n    }\r\n\r\n    public class FakeInputModel\r\n    {\r\n    }\r\n\r\n    public class FakeViewModel\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/View/CommonViewNamespaces_is_registered.cs",
    "content": "﻿using System.Linq;\r\nusing System.Web;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.View;\r\nusing Shouldly;\r\nusing HtmlTags;\r\nusing NUnit.Framework;\r\nusing StructureMap;\r\n\r\nnamespace FubuMVC.Tests.View\r\n{\r\n    [TestFixture]\r\n    public class CommonViewNamespaces_is_registered\r\n    {\r\n        [Test]\r\n        public void is_registered()\r\n        {\r\n            var registry = new FubuRegistry();\r\n            registry.AlterSettings<CommonViewNamespaces>(x =>\r\n            {\r\n                x.Add(\"Foo\");\r\n                x.Add(\"Bar\");\r\n            });\r\n\r\n            using (var runtime = registry.ToRuntime())\r\n            {\r\n                var container = runtime.Get<IContainer>();\r\n\r\n                var useNamespaces = container.GetInstance<CommonViewNamespaces>();\r\n\r\n                useNamespaces.Namespaces.ShouldContain(typeof (VirtualPathUtility).Namespace);\r\n                useNamespaces.Namespaces.ShouldContain(typeof (string).Namespace);\r\n                useNamespaces.Namespaces.ShouldContain(typeof (FileSet).Namespace);\r\n                useNamespaces.Namespaces.ShouldContain(typeof (ParallelQuery).Namespace);\r\n                useNamespaces.Namespaces.ShouldContain(typeof (HtmlTag).Namespace);\r\n                useNamespaces.Namespaces.ShouldContain(\"FubuMVC.Tests.Http.Hosting\");\r\n                useNamespaces.Namespaces.ShouldContain(\"Foo\");\r\n                useNamespaces.Namespaces.ShouldContain(\"Bar\");\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/View/FakeViews/Folder1/A.aspx",
    "content": "﻿<%@ Page Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"A.aspx.cs\" Inherits=\"FubuMVC.Tests.View.FakeViews.Folder1.A\" %>\r\n\r\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\" >\r\n<head runat=\"server\">\r\n    <title>Untitled Page</title>\r\n</head>\r\n<body>\r\n    <div>\r\n    \r\n    </div>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "src/FubuMVC.Tests/View/FakeViews/Folder1/A.aspx.cs",
    "content": "using System;\r\nusing System.Web.UI;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Urls;\r\nusing FubuMVC.Core.View;\r\n\r\nnamespace FubuMVC.Tests.View.FakeViews.Folder1\r\n{\r\n    public class A : Page, IFubuPage<ViewModel1>\r\n    {\r\n        \r\n        public ViewModel1 Model { get; set; }\r\n\r\n        public string ElementPrefix\r\n        {\r\n            get { throw new NotImplementedException(); }\r\n            set { throw new NotImplementedException(); }\r\n        }\r\n\r\n        public IServiceLocator ServiceLocator\r\n        {\r\n            get { throw new NotImplementedException(); }\r\n            set { throw new NotImplementedException(); }\r\n        }\r\n\r\n        public T Get<T>()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public T GetNew<T>()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void Write(object content)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public object GetModel()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public IUrlRegistry Urls\r\n        {\r\n            get { throw new NotImplementedException(); }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/View/FakeViews/Folder1/ViewModel3.aspx",
    "content": "﻿<%@ Page Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"ViewModel3.aspx.cs\" Inherits=\"FubuMVC.Tests.View.FakeViews.Folder1.ViewModel3\" %>\r\n\r\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\" >\r\n<head runat=\"server\">\r\n    <title>Untitled Page</title>\r\n</head>\r\n<body>\r\n    <div>\r\n    \r\n    </div>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "src/FubuMVC.Tests/View/FakeViews/Folder1/ViewModel3.aspx.cs",
    "content": "using System;\r\nusing System.Web.UI;\r\nusing FubuCore;\r\nusing FubuMVC.Core.Urls;\r\nusing FubuMVC.Core.View;\r\n\r\nnamespace FubuMVC.Tests.View.FakeViews.Folder1\r\n{\r\n    public class ViewModel3 : Page, IFubuPage<ViewModel3>\r\n    {\r\n\r\n        public ViewModel3 Model { get; set; }\r\n\r\n        public string ElementPrefix\r\n        {\r\n            get { throw new NotImplementedException(); }\r\n            set { throw new NotImplementedException(); }\r\n        }\r\n\r\n        public IServiceLocator ServiceLocator\r\n        {\r\n            get { throw new NotImplementedException(); }\r\n            set { throw new NotImplementedException(); }\r\n        }\r\n\r\n        public T Get<T>()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public T GetNew<T>()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void Write(object content)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public object GetModel()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public IUrlRegistry Urls\r\n        {\r\n            get { throw new NotImplementedException(); }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/View/FakeViews/ModelsAndControllers.cs",
    "content": "namespace FubuMVC.Tests.View.FakeViews\r\n{\r\n    public class ViewModel1\r\n    {\r\n    }\r\n\r\n    public class ViewModel2\r\n    {\r\n    }\r\n\r\n    public class ViewModel3\r\n    {\r\n    }\r\n\r\n    public class ViewModel4\r\n    {\r\n    }\r\n\r\n    public class ViewModel5\r\n    {\r\n    }\r\n\r\n\r\n    public class Controller1\r\n    {\r\n        public ViewModel1 A()\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public ViewModel2 B()\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public ViewModel3 C()\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public ViewModel3 D()\r\n        {\r\n            return null;\r\n        }\r\n\r\n        public ViewModel3 E()\r\n        {\r\n            return null;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/View/FubuPageExtensionsTester.cs",
    "content": "using System;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core.Urls;\nusing FubuMVC.Core.View;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\n\nnamespace FubuMVC.Tests.UI\n{\n\n\n    [TestFixture]\n    public class when_calling_link_variable\n    {\n        #region Setup/Teardown\n\n        [SetUp]\n        public void SetUp()\n        {\n            _page = MockRepository.GenerateMock<IFubuPage>();\n            _urls = new StubUrlRegistry();\n\n\n            _page.Expect(p => p.Urls).Return(_urls);\n            _model = new InputModel();\n            //_urls.Stub(u => u.UrlFor(Arg<InputModel>.Is.NotNull)).Return(\"some url\");\n        }\n\n        #endregion\n\n        private IFubuPage _page;\n        private IUrlRegistry _urls;\n        private InputModel _model;\n\n        [Test]\n        public void should_return_formatted_link_variable()\n        {\n            _page.LinkVariable(\"variable\", _model).ShouldBe(\"var {0} = '{1}';\".ToFormat(\"variable\",\n                                                                                           \"url for FubuMVC.Tests.UI.InputModel, category GET\"));\n            _page.VerifyAllExpectations();\n        }\n\n        [Test]\n        public void should_return_formatted_link_variable_of_new_model()\n        {\n            _page.LinkVariable<InputModel>(\"variable\").ShouldBe(\"var {0} = '{1}';\".ToFormat(\"variable\",\n                                                                                               \"url for FubuMVC.Tests.UI.InputModel, category GET\"));\n            _page.VerifyAllExpectations();\n        }\n    }\n\n    public class ViewModel\n    {\n    }\n\n    public class InputModel\n    {\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/View/HtmlTagExtensionsTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core.View;\nusing Shouldly;\nusing HtmlTags;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests.UI\n{\n    [TestFixture]\n    public class HtmlTagExtensionsTester\n    {\n\n        [Test]\n        public void find_first_child()\n        {\n            var tag = new HtmlTag(\"a\");\n            tag.Add(\"span\");\n            tag.Add(\"span\");\n            var div = tag.Add(\"div\");\n            tag.Add(\"input\");\n            tag.Add(\"button\");\n\n            \n\n            new TagHolder(tag).ForChild(\"div\").ShouldBeTheSameAs(div);\n        }\n\n        [Test]\n        public void mustache_attr()\n        {\n            var tag = new HtmlTag(\"a\");\n            tag.MustacheAttr(\"href\", \"url\");\n\n            tag.ToString().ShouldBe(\"<a href=\\\"{{url}}\\\"></a>\");\n        }\n\n        [Test]\n        public void mustache_value()\n        {\n            var tag = new TextboxTag();\n            tag.MustacheValue(\"prop\");\n\n            tag.ToString().ShouldBe(\"<input type=\\\"text\\\" value=\\\"{{prop}}\\\" />\");\n        }\n\n        [Test]\n        public void mustache_text()\n        {\n            var tag = new HtmlTag(\"span\");\n            tag.MustacheText(\"prop\");\n\n            tag.ToString().ShouldBe(\"<span>{{prop}}</span>\");\n        }\n\n        public class TagHolder : ITagSource\n        {\n            private readonly HtmlTag _inner;\n\n            public TagHolder(HtmlTag inner)\n            {\n                _inner = inner;\n            }\n\n            public IEnumerable<HtmlTag> AllTags()\n            {\n                return _inner.Children;\n            }\n        }\n    }\n\n\n\n    [TestFixture]\n    public class TextIfEmptyTester\n    {\n        [Test]\n        public void trying_to_set_the_default_text_on_an_input_element_should_throw_an_exception()\n        {\n            Exception<InvalidOperationException>.ShouldBeThrownBy(() =>\n            {\n                new HtmlTag(\"input\").TextIfEmpty(\"something\");\n            });\n        }\n\n        [Test]\n        public void do_nothing_if_the_tag_already_has_text()\n        {\n            new HtmlTag(\"div\").Text(\"original\").TextIfEmpty(\"different\")\n                .Text().ShouldBe(\"original\");\n        }\n\n        [Test]\n        public void set_the_text_if_the_tag_text_is_initially_null()\n        {\n            new HtmlTag(\"div\").TextIfEmpty(\"defaulted\")\n                .Text().ShouldBe(\"defaulted\");\n        }\n\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/View/OutputNodeExtensionsTester.cs",
    "content": "﻿using System;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Resources.Conneg;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Runtime.Conditionals;\r\nusing FubuMVC.Core.View;\r\nusing FubuMVC.Core.View.Model;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing Rhino.Mocks;\r\n\r\nnamespace FubuMVC.Tests.View\r\n{\r\n    [TestFixture]\r\n    public class OutputNodeExtensionsTester\r\n    {\r\n\r\n\r\n        [Test]\r\n        public void has_view_is_false_when_it_is_empty()\r\n        {\r\n            var node = new OutputNode(typeof(Address));\r\n            node.HasView().ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void has_view_is_positive_with_always()\r\n        {\r\n            var node = new OutputNode(typeof(Address));\r\n            var viewToken = MockRepository.GenerateMock<ITemplateFile>();\r\n            node.AddView(viewToken);\r\n\r\n            node.HasView().ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void has_view_positive_with_different_conditional()\r\n        {\r\n            var condition = new FakeConditional();\r\n\r\n            var node = new OutputNode(typeof(Address));\r\n            var viewToken = MockRepository.GenerateMock<ITemplateFile>();\r\n            node.AddView(viewToken);\r\n\r\n            node.HasView().ShouldBeTrue();\r\n        }\r\n       \r\n\r\n        public class FakeConditional : IConditional\r\n        {\r\n            public bool ShouldExecute(IFubuRequestContext context)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        public class Address\r\n        {\r\n            public Address()\r\n            {\r\n                StateOrProvince = string.Empty;\r\n                Country = string.Empty;\r\n                AddressType = string.Empty;\r\n            }\r\n\r\n            public int Order { get; set; }\r\n\r\n            public bool IsActive { get; set; }\r\n\r\n            public string AddressType { get; set; }\r\n\r\n            public string Address1 { get; set; }\r\n\r\n            public string Address2 { get; set; }\r\n\r\n            public string City { get; set; }\r\n\r\n            public string StateOrProvince { get; set; }\r\n\r\n            public string Country { get; set; }\r\n\r\n            public string PostalCode { get; set; }\r\n\r\n            //[Required]\r\n            //public TimeZoneInfo TimeZone { get; set; }\r\n\r\n\r\n            public DateTime DateEntered { get; set; }\r\n\r\n            public ColorEnum Color { get; set; }\r\n            public Guid Guid { get; set; }\r\n        }\r\n\r\n        public enum ColorEnum\r\n        {\r\n            red,\r\n            blue,\r\n            green\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/View/Registration/GenericParserTester.cs",
    "content": "using System;\r\nusing System.CodeDom.Compiler;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing FubuMVC.Core.View.Registration;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.View.Registration\r\n{\r\n    [TestFixture]\r\n    public class GenericParserTester\r\n    {\r\n        private GenericParser ClassUnderTest;\r\n\r\n        [SetUp]\r\n        public void beforeEach()\r\n        {\r\n            var duplicatedGenericExtraAssembly = generateAssembly(\"namespace FubuMVC.Tests.View.Registration{public class DuplicatedGeneric<T>{} public class Duplicated{} }\");\r\n\r\n            ClassUnderTest = new GenericParser(new[] { typeof(Bar).Assembly, typeof(String).Assembly, duplicatedGenericExtraAssembly });\r\n        }\r\n\r\n        private static Assembly generateAssembly(string source)\r\n        {\r\n            var parms = new CompilerParameters\r\n            {\r\n                GenerateExecutable = false,\r\n                GenerateInMemory = true,\r\n                IncludeDebugInformation = false\r\n            };\r\n\r\n            return CodeDomProvider\r\n                .CreateProvider(\"CSharp\")\r\n                .CompileAssemblyFromSource(parms, source)\r\n                .CompiledAssembly;\r\n        } \r\n\r\n        [Test]\r\n        public void should_return_null_when_type_is_not_in_assemblies()\r\n        {\r\n            ClassUnderTest = new GenericParser(new[] { typeof(String).Assembly });\r\n\r\n            const string typeName = \"FubuMVC.Tests.View.Registration.Generic<FubuMVC.Tests.View.Registration.Baz>\";\r\n\r\n            var type = ClassUnderTest.Parse(typeName);\r\n\r\n            type.ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void should_return_null_when_generic_argument_type_is_not_in_assemblies()\r\n        {\r\n            ClassUnderTest = new GenericParser(new[] { typeof(Bar).Assembly });\r\n\r\n            const string typeName = \"FubuMVC.Tests.View.Registration.Generic<FubuMVC.Tests.View.Registration.Baz, System.String>\";\r\n\r\n            var type = ClassUnderTest.Parse(typeName);\r\n\r\n            type.ShouldBeNull();\r\n        }\r\n\r\n        [Test]\r\n        public void should_parse_a_single_generic_argument()\r\n        {\r\n            const string typeName = \"FubuMVC.Tests.View.Registration.Generic<FubuMVC.Tests.View.Registration.Baz>\";\r\n\r\n            var type = ClassUnderTest.Parse(typeName);\r\n\r\n            type.ShouldBe(typeof(Generic<Baz>));\r\n        }\r\n\r\n        [Test]\r\n        public void should_parse_a_mutiple_generic_arguments()\r\n        {\r\n            const string typeName = \"FubuMVC.Tests.View.Registration.Generic<FubuMVC.Tests.View.Registration.Baz, FubuMVC.Tests.View.Registration.Bar>\";\r\n\r\n            var type = ClassUnderTest.Parse(typeName);\r\n\r\n            type.ShouldBe(typeof(Generic<Baz, Bar>));\r\n        }\r\n\r\n        [Test]\r\n        public void should_parse_a_mutiple_generic_arguments_across_different_assemblies()\r\n        {\r\n            const string typeName = \"FubuMVC.Tests.View.Registration.Generic<FubuMVC.Tests.View.Registration.Baz, System.String>\";\r\n\r\n            var type = ClassUnderTest.Parse(typeName);\r\n\r\n            type.ShouldBe(typeof(Generic<Baz, string>));\r\n        }\r\n\r\n        [Test]\r\n        public void should_detect_if_type_name_is_generic()\r\n        {\r\n            GenericParser.IsGeneric(\"System.String\").ShouldBeFalse();\r\n            GenericParser.IsGeneric(\"System.Collections.List<System.String>\").ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void finding_open_type_should_add_error_when_no_matching_type_is_found()\r\n        {\r\n            var typeDefinition = new GenericTypeDefinition {OpenTypeName = \"NotFound\", ArgumentTypeNames = new[] {\"System.String\"}};\r\n\r\n            var result = ClassUnderTest.findOpenType(typeDefinition);\r\n\r\n            result.ShouldBeNull();\r\n            ClassUnderTest.ParseErrors.First().ShouldContain(\"No generic type matching\");\r\n        }\r\n\r\n        [Test]\r\n        public void finding_open_type_should_add_error_when_multiple_matching_types_are_found()\r\n        {\r\n            var typeDefinition = new GenericTypeDefinition { OpenTypeName = \"FubuMVC.Tests.View.Registration.DuplicatedGeneric`1\", ArgumentTypeNames = new[] { \"System.String\" } };\r\n\r\n            var result = ClassUnderTest.findOpenType(typeDefinition);\r\n\r\n            result.ShouldBeNull();\r\n            ClassUnderTest.ParseErrors.First().ShouldContain(\"More than one generic types matching\");\r\n        }\r\n\r\n        [Test]\r\n        public void finding_generic_arguments_should_add_error_when_no_matching_type_is_found()\r\n        {\r\n            var typeDefinition = new GenericTypeDefinition { OpenTypeName = \"FubuMVC.Tests.View.Registration.Generic`1\", ArgumentTypeNames = new[] { \"NOTFOUND\" } };\r\n\r\n            var result = ClassUnderTest.findGenericArgumentTypes(typeDefinition);\r\n\r\n            result.ShouldBeNull();\r\n            ClassUnderTest.ParseErrors.First().ShouldContain(\"No generic argument type matching\");\r\n        }\r\n\r\n        [Test]\r\n        public void finding_generic_arguments_should_add_error_when_multiple_matching_types_are_found()\r\n        {\r\n            var typeDefinition = new GenericTypeDefinition { OpenTypeName = \"FubuMVC.Tests.View.Registration.Generic`1\", ArgumentTypeNames = new[] { \"FubuMVC.Tests.View.Registration.Duplicated\" } };\r\n\r\n            var result = ClassUnderTest.findGenericArgumentTypes(typeDefinition);\r\n\r\n            result.ShouldBeNull();\r\n            ClassUnderTest.ParseErrors.First().ShouldContain(\"More than one generic argument types matching\");\r\n        }\r\n\r\n    }\r\n\r\n    public class Bar{}\r\n\r\n    public class Baz\r\n    {\r\n    }\r\n\r\n    public class Generic<T>{}\r\n    public class DuplicatedGeneric<T>{}\r\n    public class Generic<T1, T2>{}\r\n\r\n    public class Duplicated\r\n    {\r\n\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/View/SimplePage.cs",
    "content": "﻿using System;\r\nusing FubuCore;\r\nusing FubuCore.Util;\r\nusing FubuMVC.Core.Runtime;\r\nusing FubuMVC.Core.Urls;\r\nusing FubuMVC.Core.View;\r\n\r\nnamespace FubuMVC.Tests.View\n{\n    public class SimpleFubuPage<TViewModel> : IFubuPage<TViewModel> where TViewModel : class\n    {\n        private readonly Cache<Type, object> _services = new Cache<Type, object>();\n\n        public SimpleFubuPage()\n        {\n            _services.OnMissing = type => ServiceLocator.GetInstance(type);\n        }\n\n        public string ElementPrefix { get; set; }\n\n        public IServiceLocator ServiceLocator { get; set; }\n\n        public IUrlRegistry Urls\n        {\n            get { return ServiceLocator.GetInstance<IUrlRegistry>(); }\n        }\n\n        public T Get<T>()\n        {\n            return (T)_services[typeof(T)];\n        }\n\n        public T GetNew<T>()\n        {\n            return ServiceLocator.GetInstance<T>();\n        }\n\n        public void Write(object content)\n        {\n            ServiceLocator.GetInstance<IOutputWriter>().WriteHtml(content);\n        }\n\n        public object GetModel()\n        {\n            return Model;\n        }\n\n        public TViewModel Model { get; set; }\n\n        public void SetModel(IFubuRequest request)\n        {\n            Model = request.Get<TViewModel>();\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/View/ViewEngineSettingsTester.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\nusing FubuMVC.Core.Registration;\r\nusing FubuMVC.Core.Registration.Nodes;\r\nusing FubuMVC.Core.Runtime.Files;\r\nusing FubuMVC.Core.View;\r\nusing FubuMVC.Core.View.Model;\r\nusing FubuMVC.Core.View.Rendering;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests.View\r\n{\r\n    [TestFixture]\r\n    public class ViewEngineSettingsTester\r\n    {\r\n        private ViewEngineSettings _runner;\r\n\r\n        [SetUp]\r\n        public void Setup()\r\n        {\r\n            _runner = new ViewEngineSettings();\r\n        }\r\n\r\n        [Test]\r\n        public void the_default_shared_folders_are_just_Shared()\r\n        {\r\n            _runner.SharedLayoutFolders.Single().ShouldBe(\"Shared\");\r\n        }\r\n\r\n        [Test]\r\n        public void the_default_application_layout_is_Application()\r\n        {\r\n            _runner.ApplicationLayoutName.ShouldBe(\"Application\");\r\n        }\r\n\r\n        [Test]\r\n        public void should_not_add_same_type_of_facility_more_than_once()\r\n        {\r\n            _runner.AddFacility(new TestViewFacility());\r\n            _runner.AddFacility(new TestViewFacility());\r\n\r\n            _runner.Facilities.ShouldHaveCount(1);\r\n        }\r\n\r\n        [Test]\r\n        public void default_logic_for_is_shared()\r\n        {\r\n            _runner.IsSharedFolder(@\"foo/bar/Shared\").ShouldBeTrue();\r\n            _runner.IsSharedFolder(\"Shared\").ShouldBeTrue();\r\n\r\n            _runner.IsSharedFolder(\"Shared/Something\").ShouldBeFalse();\r\n            _runner.IsSharedFolder(\"Foo/Bar\").ShouldBeFalse();\r\n        }\r\n\r\n        [Test]\r\n        public void customize_is_shared_logic()\r\n        {\r\n            _runner.SharedLayoutFolders.Clear();\r\n            _runner.SharedLayoutFolders.Add(\"Layouts\");\r\n            _runner.SharedLayoutFolders.Add(\"Layouts2\");\r\n\r\n            _runner.IsSharedFolder(\"Shared\").ShouldBeFalse();\r\n            _runner.IsSharedFolder(\"Layouts\").ShouldBeTrue();\r\n            _runner.IsSharedFolder(\"Layouts2\").ShouldBeTrue();\r\n        }\r\n\r\n        [Test]\r\n        public void should_ignore_folders()\r\n        {\r\n            var settings = new ViewEngineSettings();\r\n            settings.FolderShouldBeIgnored(\"/foo/fubu-content/\").ShouldBeTrue();\r\n            settings.FolderShouldBeIgnored(\"/foo/fubu-content\").ShouldBeTrue();\r\n            settings.FolderShouldBeIgnored(\"fubu-content\").ShouldBeTrue();\r\n            settings.FolderShouldBeIgnored(\"bin\").ShouldBeTrue();\r\n            settings.FolderShouldBeIgnored(\"obj\").ShouldBeTrue();\r\n            settings.FolderShouldBeIgnored(\"node_modules\").ShouldBeTrue();\r\n            settings.FolderShouldBeIgnored(\"node_modules/\").ShouldBeTrue();\r\n            settings.FolderShouldBeIgnored(\"/foo/node_modules/\").ShouldBeTrue();\r\n            settings.FolderShouldBeIgnored(\"/foo/bar/node_modules/\").ShouldBeTrue();\r\n\r\n            settings.FolderShouldBeIgnored(\"ok\").ShouldBeFalse();\r\n            settings.FolderShouldBeIgnored(\"ok/\").ShouldBeFalse();\r\n            settings.FolderShouldBeIgnored(\"/ok\").ShouldBeFalse();\r\n            settings.FolderShouldBeIgnored(\"/ok/good/alright\").ShouldBeFalse();\r\n        }\r\n\r\n        public class TestViewToken : ITemplateFile\r\n        {\r\n            public IRenderableView GetView()\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public IRenderableView GetPartialView()\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public void AttachLayouts(string defaultLayoutName, IViewFacility facility, ITemplateFolder folder)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public string ProfileName { get; set; }\r\n            public string FilePath { get; private set; }\r\n            public string RootPath { get; private set; }\r\n            public string Origin { get; private set; }\r\n            public string ViewPath { get; private set; }\r\n            public Parsing Parsing { get; private set; }\r\n\r\n            public string RelativePath()\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public string DirectoryPath()\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public string RelativeDirectoryPath()\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public bool FromHost()\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public bool IsPartial()\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public string FullName()\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public void AttachViewModels(ViewTypePool types, ITemplateLogger logger)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public ITemplateFile Master { get; set; }\r\n\r\n            public Type ViewModel\r\n            {\r\n                get { throw new NotImplementedException(); }\r\n            }\r\n\r\n            public string Name()\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public string Namespace\r\n            {\r\n                get { throw new NotImplementedException(); }\r\n            }\r\n\r\n            public override bool Equals(object obj)\r\n            {\r\n                return obj.GetType() == GetType();\r\n            }\r\n\r\n            public bool Equals(TestViewToken other)\r\n            {\r\n                return !ReferenceEquals(null, other);\r\n            }\r\n\r\n            public override int GetHashCode()\r\n            {\r\n                return 0;\r\n            }\r\n        }\r\n\r\n        public class TestViewFacility : IViewFacility\r\n        {\r\n            public Task<IEnumerable<ITemplateFile>> FindViews(BehaviorGraph graph)\r\n            {\r\n                return\r\n                    Task.Factory.StartNew(\r\n                        () => { return new ITemplateFile[] {new TestViewToken()} as IEnumerable<ITemplateFile>; });\r\n            }\r\n\r\n            public BehaviorNode CreateViewNode(Type type)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            public void Fill(ViewEngineSettings settings, BehaviorGraph graph, IPerfTimer timer, IFubuApplicationFiles files)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public IEnumerable<IViewToken> AllViews()\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public ITemplateFile FindInShared(string viewName)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public ViewEngineSettings Settings { get; set; }\r\n            public Type TemplateType { get; private set; }\r\n            public Task LayoutAttachment { get; private set; }\r\n\r\n            public void AttachViewModels(ViewTypePool types, ITemplateLogger logger)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public void ReadSharedNamespaces(CommonViewNamespaces namespaces)\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n\r\n            public void AttachLayouts(ViewEngineSettings settings)\r\n            {\r\n                \r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/can_find_and_load_bottles_with_the_FubuModule_attribute.cs",
    "content": "using AssemblyPackage;\r\nusing FubuMVC.Core;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class can_find_and_load_extensions_with_the_FubuModule_attribute\r\n    {\r\n        [Test]\r\n        public void find_assembly_extensions()\r\n        {\r\n            using (var runtime = FubuRuntime.Basic())\r\n            {\r\n                var assembly = typeof (AssemblyPackageMarker).Assembly;\r\n\r\n                runtime.Behaviors.PackageAssemblies.ShouldContain(assembly);\r\n            }\r\n            ;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/client_message_mechanics_Tester.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.Registration.Nodes;\nusing Shouldly;\nusing NUnit.Framework;\n\nnamespace FubuMVC.Tests\n{\n    [TestFixture]\n    public class client_message_mechanics_Tester\n    {\n        [Test]\n        public void is_client_message_false_with_no_att_or_base_class_match()\n        {\n            GetType().IsClientMessage().ShouldBeFalse();\n        }\n\n        [Test]\n        public void is_client_message_true_when_derived_from_client_message()\n        {\n            typeof(ClientA).IsClientMessage().ShouldBeTrue();\n        }\n\n        [Test]\n        public void is_client_message_with_att()\n        {\n            typeof(ClientC).IsClientMessage().ShouldBeTrue();\n        }\n\n        [Test]\n        public void get_message_name()\n        {\n            typeof (ClientA).GetMessageName().ShouldBe(\"a\");\n            typeof (ClientB).GetMessageName().ShouldBe(\"b\");\n            typeof (ClientC).GetMessageName().ShouldBe(\"c\");\n            typeof (NotClient).GetMessageName().ShouldBe(\"not-client\");\n        }\n\n        [Test]\n        public void chain_is_aggregated_chain()\n        {\n            BehaviorChain.For<ChainTarget>(x => x.get_B(null)).IsAggregatedChain().ShouldBeTrue();\n            BehaviorChain.For<ChainTarget>(x => x.get_C1()).IsAggregatedChain().ShouldBeTrue();\n            BehaviorChain.For<ChainTarget>(x => x.get_C2(null)).IsAggregatedChain().ShouldBeTrue();\n            BehaviorChain.For<ChainTarget>(x => x.get_not_client()).IsAggregatedChain().ShouldBeFalse();\n        }\n    }\n\n    public class ChainTarget\n    {\n        public ClientB get_B(ClientA input)\n        {\n            return new ClientB();\n        }\n\n        public ClientC get_C1()\n        {\n            return new ClientC();\n        }\n\n        public ClientC get_C2(NotClient input)\n        {\n            return new ClientC();\n        }\n\n        public NotClient get_not_client()\n        {\n            return new NotClient();\n        }\n    }\n\n    public class ClientA : ClientMessage\n    {\n        public ClientA() : base(\"a\")\n        {\n        }\n    }\n\n    public class ClientB : ClientMessage\n    {\n        public ClientB()\n            : base(\"b\")\n        {\n        }\n    }\n\n    [ClientMessage(\"c\")]\n    public class ClientC\n    {\n        \n    }\n\n    public class NotClient { }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/deactivators_are_called_in_fuburuntime_dispose.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Diagnostics.Packaging;\r\nusing Shouldly;\r\nusing NUnit.Framework;\r\nusing StructureMap;\r\n\r\nnamespace FubuMVC.Tests\r\n{\r\n    [TestFixture]\r\n    public class deactivators_are_called_in_fuburuntime_dispose\r\n    {\r\n        [Test]\r\n        public void disposing_the_fubu_runtime_should_run_all_the_deactivators()\r\n        {\r\n            FakeDeactivator.Messages.Clear();\r\n\r\n            var container = new Container(x =>\r\n            {\r\n                x.For<IDeactivator>().Add(new FakeDeactivator(\"red\"));\r\n                x.For<IDeactivator>().Add(new FakeDeactivator(\"green\"));\r\n                x.For<IDeactivator>().Add(new FakeDeactivator(\"blue\"));\r\n            });\r\n\r\n            FubuRuntime.Basic(x => x.StructureMap(container)).Dispose();\r\n\r\n            FakeDeactivator.Messages.ShouldHaveTheSameElementsAs(\"red\", \"green\", \"blue\");\r\n        }\r\n    }\r\n\r\n    public class FakeDeactivator : IDeactivator\r\n    {\r\n        private readonly string _name;\r\n        public static readonly IList<string> Messages = new List<string>();\r\n\r\n        public FakeDeactivator(string name)\r\n        {\r\n            _name = name;\r\n        }\r\n\r\n        public void Deactivate(IActivationLog log)\r\n        {\r\n            Messages.Add(_name);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/FubuMVC.Tests/paket.references",
    "content": "Fixie\nFubuCore\nHtmlTags\nNewtonsoft.Json\nRhinoMocks\nShouldly\nstructuremap"
  },
  {
    "path": "src/FubuMVC.Tests/public/1.0.1/d.js",
    "content": "﻿"
  },
  {
    "path": "src/FubuMVC.Tests/public/1.0.1/e.js",
    "content": "﻿"
  },
  {
    "path": "src/FubuMVC.Tests/public/1.0.1/f.js",
    "content": "﻿"
  },
  {
    "path": "src/FubuMVC.Tests/public/javascript/a.js",
    "content": "﻿"
  },
  {
    "path": "src/FubuMVC.Tests/public/javascript/b.js",
    "content": "﻿"
  },
  {
    "path": "src/FubuMVC.Tests/public/javascript/c.js",
    "content": "﻿"
  },
  {
    "path": "src/FubuMVC.Tests/required_service_registrations.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing FubuCore;\nusing FubuCore.Binding;\nusing FubuCore.Binding.InMemory;\nusing FubuCore.Conversion;\nusing FubuCore.Formatting;\nusing FubuCore.Logging;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Assets;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.Diagnostics;\nusing FubuMVC.Core.Diagnostics.Assets;\nusing FubuMVC.Core.Http;\nusing FubuMVC.Core.Http.Cookies;\nusing FubuMVC.Core.Json;\nusing FubuMVC.Core.Registration.Querying;\nusing FubuMVC.Core.Resources.Conneg;\nusing FubuMVC.Core.Resources.PathBased;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Runtime.Aggregation;\nusing FubuMVC.Core.Runtime.Conditionals;\nusing FubuMVC.Core.Runtime.Files;\nusing FubuMVC.Core.Runtime.SessionState;\nusing FubuMVC.Core.Security;\nusing FubuMVC.Core.Security.Authorization;\nusing FubuMVC.Core.Urls;\nusing FubuMVC.Core.View;\nusing NUnit.Framework;\nusing StructureMap;\n\nnamespace FubuMVC.Tests\n{\n    [TestFixture]\n    public class required_service_registrations\n    {\n        [Test]\n        public void all_default_service_registrations()\n        {\n            using (var runtime = FubuRuntime.Basic())\n            {\n                var _ = runtime.Get<IContainer>();\n\n\n                Debug.WriteLine(_.WhatDoIHave());\n\n                // Model Binding registrations\n                _.DefaultRegistrationIs<IBindingContext, BindingContext>();\n                _.DefaultRegistrationIs<IObjectResolver, ObjectResolver>();\n                _.DefaultRegistrationIs<IBindingLogger, NulloBindingLogger>();\n                _.ShouldHaveRegistration<IModelBinder, ResourcePathBinder>();\n                _.ShouldHaveRegistration<IConverterFamily, AspNetPassthroughConverter>();\n\n\n                // Core services\n                _.DefaultRegistrationIs<IAggregator, Aggregator>();\n                _.DefaultRegistrationIs<IFubuRequestContext, FubuRequestContext>();\n                _.DefaultRegistrationIs<IRequestData, FubuMvcRequestData>();\n                _.DefaultRegistrationIs<IExceptionHandlingObserver, ExceptionHandlingObserver>();\n                _.DefaultRegistrationIs<ICookies, Cookies>();\n                _.DefaultRegistrationIs<IFlash, FlashProvider>();\n                _.DefaultRegistrationIs<IOutputWriter, OutputWriter>();\n                _.DefaultRegistrationIs<IPartialFactory, PartialFactory>();\n                _.DefaultRegistrationIs<IPartialInvoker, PartialInvoker>();\n                _.DefaultRegistrationIs<IRequestDataProvider, RequestDataProvider>();\n                _.DefaultRegistrationIs<Stringifier, Stringifier>(); // it's goofy, but assert that it exists\n\n                _.ShouldHaveRegistration<IActivator, DisplayConversionRegistryActivator>();\n\n                _.DefaultSingletonIs<IChainResolver, ChainResolutionCache>();\n                _.DefaultSingletonIs<IClientMessageCache, ClientMessageCache>();\n\n                _.DefaultRegistrationIs<IDisplayFormatter, DisplayFormatter>();\n                _.DefaultRegistrationIs<IEndpointService, EndpointService>();\n                _.DefaultRegistrationIs<IFileSystem, FileSystem>();\n\n                _.ShouldHaveRegistration<ILogModifier, LogRecordModifier>();\n\n                _.DefaultRegistrationIs<IObjectConverter, ObjectConverter>();\n                _.DefaultRegistrationIs<ISetterBinder, SetterBinder>();\n\n                _.DefaultRegistrationIs<IFubuApplicationFiles, FubuApplicationFiles>();\n\n                _.DefaultRegistrationIs<IUrlRegistry, UrlRegistry>();\n                _.DefaultRegistrationIs<IChainUrlResolver, ChainUrlResolver>();\n                _.DefaultRegistrationIs<AppReloaded, AppReloaded>();\n\n                _.DefaultRegistrationIs<ILogger, Logger>();\n\n                // Conneg\n                _.DefaultRegistrationIs<IResourceNotFoundHandler, DefaultResourceNotFoundHandler>();\n\n\n\n                // Conditionals\n                _.DefaultRegistrationIs<IContinuationProcessor, ContinuationProcessor>();\n                _.DefaultRegistrationIs<IConditionalService, ConditionalService>();\n\n                // Assets\n                _.DefaultRegistrationIs<IAssetTagBuilder, AssetTagBuilder>();\n                _.DefaultSingletonIs<IAssetFinder, AssetFinderCache>();\n\n                // Diagnostics\n                _.DefaultSingletonIs<IDiagnosticAssets, DiagnosticAssetsCache>();\n\n                // Security\n                _.DefaultRegistrationIs<IAuthenticationContext, WebAuthenticationContext>();\n                _.DefaultRegistrationIs<ISecurityContext, WebSecurityContext>();\n                _.DefaultRegistrationIs<IAuthorizationPreviewService, AuthorizationPreviewService>();\n                _.DefaultRegistrationIs<IChainAuthorizor, ChainAuthorizor>();\n                _.DefaultRegistrationIs<IAuthorizationFailureHandler, DefaultAuthorizationFailureHandler>();\n\n\n                // Json\n                _.DefaultRegistrationIs<IJsonSerializer, NewtonSoftJsonSerializer>();\n            }\n        }\n\n        [Test]\n        public void IAssetTagBuilder_is_registered_in_development_mode()\n        {\n            using (var runtime = FubuRuntime.Basic(_ => _.Mode = \"development\"))\n            {\n                runtime.Get<IContainer>().DefaultRegistrationIs<IAssetTagBuilder, DevelopmentModeAssetTagBuilder>();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/FubuMVC.Tests/sample.xml",
    "content": "<?xml version=\"1.0\" ?>\n<samlp:Response Destination=\"https://qa2.online.com/qa2/sso/saml\" ID=\"A5092bc640a235880200023f80002aa33\" IssueInstant=\"2012-11-01T18:16:04Z\" Version=\"2.0\" xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\">\n <saml:Issuer xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">urn:idp:fakecompany:nbpartgenoutbds20:uat</saml:Issuer>\n <samlp:Status xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\">\n  <samlp:StatusCode Value=\"urn:oasis:names:tc:SAML:2.0:status:Success\" xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\"/>\n </samlp:Status>\n <saml:Assertion ID=\"A5092bc640a235880200023f80001aa33\" IssueInstant=\"2012-11-01T18:16:04Z\" Version=\"2.0\" xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">\n  <saml:Issuer xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">urn:idp:fakecompany:nbpartgenoutbds20:uat</saml:Issuer>\n  <dsig:Signature xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">\n   <dsig:SignedInfo>\n    <dsig:CanonicalizationMethod Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>\n    <dsig:SignatureMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/>\n    <dsig:Reference URI=\"#A5092bc640a235880200023f80001aa33\">\n     <dsig:Transforms>\n      <dsig:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/>\n      <dsig:Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>\n     </dsig:Transforms>\n     <dsig:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>\n     <dsig:DigestValue>u7qV24NzNKNylFopTuOLtxtERXE=</dsig:DigestValue>\n    </dsig:Reference>\n   </dsig:SignedInfo>\n   <dsig:SignatureValue>PBbRZPrV+DCcf27wJy4GnwkXKKS1i4fvOkoURqzfaRRZs0lSgGBnTdWdDrg7qUcKMv/Gr2a4nqvk2Drnw8/RHry4a69U2wFfvr2t9Ozb3qS4eQX2njv83Oy24voy9DyeLv4CUwRQgYgF3tmoruAOzEA7ZYyCbeDvD+SyRMj97O2FrRme3U69jaf35Y1sgYGDU6ELfWT9ansaLYvMuU7mJp2SSNOv76QJN1qLLfmuOZMtR3qDyLwUunpWXJxBKui1p/h2McRoM2QCTodeWrs3zilBBuyiedGDqcsuawvLJ5LeWoteCKGA/YjYr7tlmV0OGnXhBnhLqeyxAuWb6EO+Yw==</dsig:SignatureValue>\n   <dsig:KeyInfo>\n    <dsig:X509Data>\n     <dsig:X509Certificate>MIIFVTCCBD2gAwIBAgIQQHTa0Xj8yQTuFvvrZcTuMzANBgkqhkiG9w0BAQUFADCBtTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykxMDEvMC0GA1UEAxMmVmVyaVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzMwHhcNMTIwODE3MDAwMDAwWhcNMTMwODE4MjM1OTU5WjCBijELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxDzANBgNVBAcUBkJvc3RvbjEdMBsGA1UEChQURmlkZWxpdHkgSW52ZXN0bWVudHMxEDAOBgNVBAsUB1BXSSBPUFMxITAfBgNVBAMUGHNhbWxzc28teHFhLmZpZGVsaXR5LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJlg65XETv8nkTNPAoEoTw9Nnsz+2EJcywDXvtEx+zQ6Lhmcb9Sm0/MT+/A0RpVZ32ex+8JNQ83K36sqSClebYAaNsuCviSKuatcqSQUEmw3Y5mMxKgGReTfo5qv/x9s96vXq5jtcsX5oLQZprYU5yqqI21eJRQSh4HlgdVdlPpCUdFqdw1AWCWR1Hfq56QBnxuu7X/CMIK4Tk73ppyVC7cTEswSRz+5/znsmHfmereQ/GM469qsxU9NpZKusp0VZfhK08rEc+Gh+3q2dzzYKrBHd/XGnQsZYykbJ9tE4nCFqqPVN/siLuqSyvv+ayyOtB3GRr5aur5FT6n3ezOg3sECAwEAAaOCAYgwggGEMCMGA1UdEQQcMBqCGHNhbWxzc28teHFhLmZpZGVsaXR5LmNvbTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIFoDBFBgNVHR8EPjA8MDqgOKA2hjRodHRwOi8vU1ZSU2VjdXJlLUczLWNybC52ZXJpc2lnbi5jb20vU1ZSU2VjdXJlRzMuY3JsMEMGA1UdIAQ8MDowOAYKYIZIAYb4RQEHNjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vY3BzMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAfBgNVHSMEGDAWgBQNRFwWU0TBgn4dIKsl9AFj2L55pTB2BggrBgEFBQcBAQRqMGgwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlzaWduLmNvbTBABggrBgEFBQcwAoY0aHR0cDovL1NWUlNlY3VyZS1HMy1haWEudmVyaXNpZ24uY29tL1NWUlNlY3VyZUczLmNlcjANBgkqhkiG9w0BAQUFAAOCAQEAcAtfdy2ZPOfF1IXK+txdjkFQg8k8VdI57goX6HgblDMezwz4bYFuBhCPBuBYE+39DETC/zxmPGpzQCyuWUZNNKMueisGjeFVxcHWnekBLBeEW6QuJoB+WOo4FZ9f7HDSUrgjRtV2/RXmnsSEkrBaBCS17YD16+W8anti2cuymvWlEPWCFUkkteIgDSVaXLHWaTICYB7r7LwH8lpyS8EMMmW6ExCzs2G+hfBw/ts9SljzqLdo49zfKYmQgB0atVzkRhVsKI4rEjgAak1Wzy+u3bEmG3XnHvdRLQWSRXENjGp9CgHZyldlYPFd+TMDDaabwI8Im6E/ieZp2j+kkvQ5pQ==</dsig:X509Certificate>\n     <dsig:X509IssuerSerial>\n      <dsig:X509IssuerName>CN=VeriSign Class 3 Secure Server CA - G3,OU=Terms of use at https://www.verisign.com/rpa (c)10,OU=VeriSign Trust Network,O=VeriSign\\, Inc.,C=US</dsig:X509IssuerName>\n      <dsig:X509SerialNumber>85677336327248017187862671695081172531</dsig:X509SerialNumber>\n     </dsig:X509IssuerSerial>\n     <dsig:X509SubjectName>CN=samlsso-xqa.company.com,OU=PWI OPS,O=Company,L=Boston,ST=Massachusetts,C=US</dsig:X509SubjectName>\n    </dsig:X509Data>\n   </dsig:KeyInfo>\n  </dsig:Signature>\n  <saml:Subject xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">\n   <saml:NameID Format=\"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent\" NameQualifier=\"urn:idp:fakecompany:nbpartgenoutbds20:uat\" SPNameQualifier=\"https://qa2.online.com/qa2/sso/saml\" xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">aa50045c6d0a233e7c20003d7d0000aa33</saml:NameID>\n   <saml:SubjectConfirmation Method=\"urn:oasis:names:tc:SAML:2.0:cm:bearer\" xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">\n    <saml:NameID Format=\"urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified\">aa50045c6d0a233e7c20003d7d0000aa33</saml:NameID>\n    <saml:SubjectConfirmationData NotOnOrAfter=\"2012-11-01T18:19:04Z\" Recipient=\"https://qa2.online.com/qa2/sso/saml\" xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\"/>\n   </saml:SubjectConfirmation>\n  </saml:Subject>\n  <saml:Conditions NotBefore=\"2012-11-01T18:13:04Z\" NotOnOrAfter=\"2012-11-01T18:19:04Z\" xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">\n   <saml:AudienceRestriction xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">\n    <saml:Audience>https://qa2.online.com/qa2/sso/saml</saml:Audience>\n   </saml:AudienceRestriction>\n  </saml:Conditions>\n  <saml:AuthnStatement AuthnInstant=\"2012-11-01T18:15:47Z\" SessionIndex=\"21171a497ffc16b87b8179afd5f9b69fc3f8cd8c\" SessionNotOnOrAfter=\"2012-11-02T04:15:47Z\" xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">\n   <saml:AuthnContext xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">\n    <saml:AuthnContextDeclRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextDeclRef>\n    <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml:AuthnContextClassRef>\n   </saml:AuthnContext>\n  </saml:AuthnStatement>\n  <saml:AttributeStatement xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">\n   <saml:Attribute Name=\"ClientId\" NameFormat=\"urn:oasis:names:tc:SAML:2.0:attrname-format:basic\" xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n    <saml:AttributeValue xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xsi:type=\"xs:string\">000012345</saml:AttributeValue>\n   </saml:Attribute>\n   <saml:Attribute Name=\"CustomerId\" NameFormat=\"urn:oasis:names:tc:SAML:2.0:attrname-format:basic\" xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n    <saml:AttributeValue xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xsi:type=\"xs:string\">001010111</saml:AttributeValue>\n   </saml:Attribute>\n  </saml:AttributeStatement>\n </saml:Assertion>\n</samlp:Response>\n\n"
  },
  {
    "path": "src/FubuMVC.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 14\r\nVisualStudioVersion = 14.0.25420.1\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"__Build_Utilities\", \"__Build_Utilities\", \"{7AC4D197-535A-4686-8E21-18257B2ADB3A}\"\r\n\tProjectSection(SolutionItems) = preProject\r\n\t\t..\\packaging\\nuget\\fubumvc.aspnet.nuspec = ..\\packaging\\nuget\\fubumvc.aspnet.nuspec\r\n\t\t..\\packaging\\nuget\\fubumvc.core.nuspec = ..\\packaging\\nuget\\fubumvc.core.nuspec\r\n\t\t..\\packaging\\nuget\\fubumvc.lightningqueues.nuspec = ..\\packaging\\nuget\\fubumvc.lightningqueues.nuspec\r\n\t\t..\\packaging\\nuget\\fubumvc.marten.nuspec = ..\\packaging\\nuget\\fubumvc.marten.nuspec\r\n\t\t..\\packaging\\nuget\\fubumvc.razor.nuspec = ..\\packaging\\nuget\\fubumvc.razor.nuspec\r\n\t\t..\\packaging\\nuget\\fubumvc.spark.nuspec = ..\\packaging\\nuget\\fubumvc.spark.nuspec\r\n\t\t..\\packaging\\nuget\\jasperservice.nuspec = ..\\packaging\\nuget\\jasperservice.nuspec\r\n\t\t..\\paket.dependencies = ..\\paket.dependencies\r\n\t\t..\\rakefile.rb = ..\\rakefile.rb\r\n\t\t..\\packaging\\nuget\\serenity.nuspec = ..\\packaging\\nuget\\serenity.nuspec\r\n\t\t..\\packaging\\nuget\\web.config.transform = ..\\packaging\\nuget\\web.config.transform\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"ViewEngines\", \"ViewEngines\", \"{5600609A-D061-40E7-9CB2-92D3350EA31B}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"FubuMVC.Core\", \"FubuMVC.Core\\FubuMVC.Core.csproj\", \"{E18FD922-0E7A-49CD-B89F-473826077B9D}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"FubuMVC.Tests\", \"FubuMVC.Tests\\FubuMVC.Tests.csproj\", \"{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"TestPackage1\", \"TestPackage1\\TestPackage1.csproj\", \"{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"AssemblyPackage\", \"AssemblyPackage\\AssemblyPackage.csproj\", \"{99DBA82A-E811-4DA0-983C-12E8317F8642}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"FubuMVC.IntegrationTesting\", \"FubuMVC.IntegrationTesting\\FubuMVC.IntegrationTesting.csproj\", \"{022C7B24-4417-493F-9F70-E3F4035FBEDA}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"OwinBottle\", \"OwinBottle\\OwinBottle.csproj\", \"{60B6139B-6BDA-4860-A475-9675D47888F7}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"FubuMVC.Spark\", \"FubuMVC.Spark\\FubuMVC.Spark.csproj\", \"{9D6BF559-6461-4EAC-BB16-F976FF43E8DA}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"TestHarnessApp\", \"TestHarnessApp\\TestHarnessApp.csproj\", \"{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Fubu\", \"Fubu\\Fubu.csproj\", \"{90DBE31C-948D-47AF-8C17-0056511A7313}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"TestProjects\", \"TestProjects\", \"{DE130877-DDCB-425C-9C20-BF1B73D4191D}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RemoteService\", \"RemoteService\\RemoteService.csproj\", \"{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"LQ\", \"LQ\", \"{79F0A938-58F7-47CB-B800-0BB3990E1A3A}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"FubuMVC.LightningQueues\", \"FubuMVC.LightningQueues\\FubuMVC.LightningQueues.csproj\", \"{F151167C-4736-4C67-9697-7876574C05D0}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DiagnosticsHarness\", \"DiagnosticsHarness\\DiagnosticsHarness.csproj\", \"{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ServiceNode\", \"ServiceNode\\ServiceNode.csproj\", \"{C71136AE-8197-4A9A-AA5F-9102F657C502}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"TestMessages\", \"TestMessages\\TestMessages.csproj\", \"{3735A25A-28B6-4DA3-A4CF-7606538E0155}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ScheduledJobHarness\", \"ScheduledJobHarness\\ScheduledJobHarness.csproj\", \"{B1066655-D67C-44EE-AEA4-32C7CE17A745}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"SampleService\", \"SampleService\\SampleService.csproj\", \"{EDDD686C-2DB1-411C-833F-ABAFCAE5498D}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"FubuMVC.LightningQueues.Testing\", \"FubuMVC.LightningQueues.Testing\\FubuMVC.LightningQueues.Testing.csproj\", \"{289E231C-190E-4595-BD10-4007CA10CEE2}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"JasperService\", \"JasperService\\JasperService.csproj\", \"{8C498075-DAFE-4DAB-91AB-4919BBF7365B}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Serenity\", \"Serenity\\Serenity.csproj\", \"{900A0419-3579-4DAE-85BE-71A3E4B34239}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Marten\", \"Marten\", \"{0437EB5A-0401-4C38-A4B9-2DA6AA23A953}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"FubuMVC.Marten\", \"FubuMVC.Marten\\FubuMVC.Marten.csproj\", \"{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"FubuMVC.Marten.Tests\", \"FubuMVC.Marten.Tests\\FubuMVC.Marten.Tests.csproj\", \"{32C9310D-75D0-4616-9017-42BDC6C3EFDA}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tDebug|Mixed Platforms = Debug|Mixed Platforms\r\n\t\tDebug|x86 = Debug|x86\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\t\tRelease|Mixed Platforms = Release|Mixed Platforms\r\n\t\tRelease|x86 = Release|x86\r\n\t\tRetail|Any CPU = Retail|Any CPU\r\n\t\tRetail|Mixed Platforms = Retail|Mixed Platforms\r\n\t\tRetail|x86 = Retail|x86\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{E18FD922-0E7A-49CD-B89F-473826077B9D}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{FEB91F9F-ECE2-480C-B39C-A44BBF1F7B01}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{99DBA82A-E811-4DA0-983C-12E8317F8642}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{99DBA82A-E811-4DA0-983C-12E8317F8642}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{99DBA82A-E811-4DA0-983C-12E8317F8642}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{99DBA82A-E811-4DA0-983C-12E8317F8642}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{99DBA82A-E811-4DA0-983C-12E8317F8642}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{99DBA82A-E811-4DA0-983C-12E8317F8642}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{99DBA82A-E811-4DA0-983C-12E8317F8642}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{99DBA82A-E811-4DA0-983C-12E8317F8642}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{99DBA82A-E811-4DA0-983C-12E8317F8642}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{99DBA82A-E811-4DA0-983C-12E8317F8642}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{99DBA82A-E811-4DA0-983C-12E8317F8642}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{99DBA82A-E811-4DA0-983C-12E8317F8642}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{99DBA82A-E811-4DA0-983C-12E8317F8642}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{99DBA82A-E811-4DA0-983C-12E8317F8642}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{99DBA82A-E811-4DA0-983C-12E8317F8642}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{022C7B24-4417-493F-9F70-E3F4035FBEDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{022C7B24-4417-493F-9F70-E3F4035FBEDA}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{022C7B24-4417-493F-9F70-E3F4035FBEDA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{022C7B24-4417-493F-9F70-E3F4035FBEDA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{022C7B24-4417-493F-9F70-E3F4035FBEDA}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{022C7B24-4417-493F-9F70-E3F4035FBEDA}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{022C7B24-4417-493F-9F70-E3F4035FBEDA}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{022C7B24-4417-493F-9F70-E3F4035FBEDA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{022C7B24-4417-493F-9F70-E3F4035FBEDA}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{022C7B24-4417-493F-9F70-E3F4035FBEDA}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{022C7B24-4417-493F-9F70-E3F4035FBEDA}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{022C7B24-4417-493F-9F70-E3F4035FBEDA}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{022C7B24-4417-493F-9F70-E3F4035FBEDA}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{022C7B24-4417-493F-9F70-E3F4035FBEDA}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{022C7B24-4417-493F-9F70-E3F4035FBEDA}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{60B6139B-6BDA-4860-A475-9675D47888F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{60B6139B-6BDA-4860-A475-9675D47888F7}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{60B6139B-6BDA-4860-A475-9675D47888F7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{60B6139B-6BDA-4860-A475-9675D47888F7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{60B6139B-6BDA-4860-A475-9675D47888F7}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{60B6139B-6BDA-4860-A475-9675D47888F7}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{60B6139B-6BDA-4860-A475-9675D47888F7}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{60B6139B-6BDA-4860-A475-9675D47888F7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{60B6139B-6BDA-4860-A475-9675D47888F7}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{60B6139B-6BDA-4860-A475-9675D47888F7}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{60B6139B-6BDA-4860-A475-9675D47888F7}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{60B6139B-6BDA-4860-A475-9675D47888F7}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{60B6139B-6BDA-4860-A475-9675D47888F7}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{60B6139B-6BDA-4860-A475-9675D47888F7}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{60B6139B-6BDA-4860-A475-9675D47888F7}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{9D6BF559-6461-4EAC-BB16-F976FF43E8DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{9D6BF559-6461-4EAC-BB16-F976FF43E8DA}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{9D6BF559-6461-4EAC-BB16-F976FF43E8DA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{9D6BF559-6461-4EAC-BB16-F976FF43E8DA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{9D6BF559-6461-4EAC-BB16-F976FF43E8DA}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{9D6BF559-6461-4EAC-BB16-F976FF43E8DA}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{9D6BF559-6461-4EAC-BB16-F976FF43E8DA}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{9D6BF559-6461-4EAC-BB16-F976FF43E8DA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{9D6BF559-6461-4EAC-BB16-F976FF43E8DA}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{9D6BF559-6461-4EAC-BB16-F976FF43E8DA}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{9D6BF559-6461-4EAC-BB16-F976FF43E8DA}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{9D6BF559-6461-4EAC-BB16-F976FF43E8DA}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{9D6BF559-6461-4EAC-BB16-F976FF43E8DA}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{9D6BF559-6461-4EAC-BB16-F976FF43E8DA}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{9D6BF559-6461-4EAC-BB16-F976FF43E8DA}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{90DBE31C-948D-47AF-8C17-0056511A7313}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{90DBE31C-948D-47AF-8C17-0056511A7313}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{90DBE31C-948D-47AF-8C17-0056511A7313}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{90DBE31C-948D-47AF-8C17-0056511A7313}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{90DBE31C-948D-47AF-8C17-0056511A7313}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{90DBE31C-948D-47AF-8C17-0056511A7313}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{90DBE31C-948D-47AF-8C17-0056511A7313}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{90DBE31C-948D-47AF-8C17-0056511A7313}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{90DBE31C-948D-47AF-8C17-0056511A7313}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{90DBE31C-948D-47AF-8C17-0056511A7313}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{90DBE31C-948D-47AF-8C17-0056511A7313}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{90DBE31C-948D-47AF-8C17-0056511A7313}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{90DBE31C-948D-47AF-8C17-0056511A7313}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{90DBE31C-948D-47AF-8C17-0056511A7313}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{90DBE31C-948D-47AF-8C17-0056511A7313}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{F151167C-4736-4C67-9697-7876574C05D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{F151167C-4736-4C67-9697-7876574C05D0}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{F151167C-4736-4C67-9697-7876574C05D0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{F151167C-4736-4C67-9697-7876574C05D0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{F151167C-4736-4C67-9697-7876574C05D0}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{F151167C-4736-4C67-9697-7876574C05D0}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{F151167C-4736-4C67-9697-7876574C05D0}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{F151167C-4736-4C67-9697-7876574C05D0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{F151167C-4736-4C67-9697-7876574C05D0}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{F151167C-4736-4C67-9697-7876574C05D0}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{F151167C-4736-4C67-9697-7876574C05D0}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{F151167C-4736-4C67-9697-7876574C05D0}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{F151167C-4736-4C67-9697-7876574C05D0}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{F151167C-4736-4C67-9697-7876574C05D0}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{F151167C-4736-4C67-9697-7876574C05D0}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{C71136AE-8197-4A9A-AA5F-9102F657C502}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{C71136AE-8197-4A9A-AA5F-9102F657C502}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{C71136AE-8197-4A9A-AA5F-9102F657C502}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{C71136AE-8197-4A9A-AA5F-9102F657C502}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{C71136AE-8197-4A9A-AA5F-9102F657C502}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{C71136AE-8197-4A9A-AA5F-9102F657C502}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{C71136AE-8197-4A9A-AA5F-9102F657C502}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{C71136AE-8197-4A9A-AA5F-9102F657C502}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{C71136AE-8197-4A9A-AA5F-9102F657C502}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{C71136AE-8197-4A9A-AA5F-9102F657C502}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{C71136AE-8197-4A9A-AA5F-9102F657C502}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{C71136AE-8197-4A9A-AA5F-9102F657C502}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{C71136AE-8197-4A9A-AA5F-9102F657C502}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{C71136AE-8197-4A9A-AA5F-9102F657C502}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{C71136AE-8197-4A9A-AA5F-9102F657C502}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{3735A25A-28B6-4DA3-A4CF-7606538E0155}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{3735A25A-28B6-4DA3-A4CF-7606538E0155}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{3735A25A-28B6-4DA3-A4CF-7606538E0155}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{3735A25A-28B6-4DA3-A4CF-7606538E0155}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{3735A25A-28B6-4DA3-A4CF-7606538E0155}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{3735A25A-28B6-4DA3-A4CF-7606538E0155}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{3735A25A-28B6-4DA3-A4CF-7606538E0155}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{3735A25A-28B6-4DA3-A4CF-7606538E0155}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{3735A25A-28B6-4DA3-A4CF-7606538E0155}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{3735A25A-28B6-4DA3-A4CF-7606538E0155}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{3735A25A-28B6-4DA3-A4CF-7606538E0155}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{3735A25A-28B6-4DA3-A4CF-7606538E0155}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{3735A25A-28B6-4DA3-A4CF-7606538E0155}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{3735A25A-28B6-4DA3-A4CF-7606538E0155}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{3735A25A-28B6-4DA3-A4CF-7606538E0155}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{B1066655-D67C-44EE-AEA4-32C7CE17A745}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{B1066655-D67C-44EE-AEA4-32C7CE17A745}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{B1066655-D67C-44EE-AEA4-32C7CE17A745}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{B1066655-D67C-44EE-AEA4-32C7CE17A745}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{B1066655-D67C-44EE-AEA4-32C7CE17A745}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{B1066655-D67C-44EE-AEA4-32C7CE17A745}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{B1066655-D67C-44EE-AEA4-32C7CE17A745}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{B1066655-D67C-44EE-AEA4-32C7CE17A745}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{B1066655-D67C-44EE-AEA4-32C7CE17A745}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{B1066655-D67C-44EE-AEA4-32C7CE17A745}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{B1066655-D67C-44EE-AEA4-32C7CE17A745}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{B1066655-D67C-44EE-AEA4-32C7CE17A745}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{B1066655-D67C-44EE-AEA4-32C7CE17A745}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{B1066655-D67C-44EE-AEA4-32C7CE17A745}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{B1066655-D67C-44EE-AEA4-32C7CE17A745}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{EDDD686C-2DB1-411C-833F-ABAFCAE5498D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{EDDD686C-2DB1-411C-833F-ABAFCAE5498D}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{EDDD686C-2DB1-411C-833F-ABAFCAE5498D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{EDDD686C-2DB1-411C-833F-ABAFCAE5498D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{EDDD686C-2DB1-411C-833F-ABAFCAE5498D}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{EDDD686C-2DB1-411C-833F-ABAFCAE5498D}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{EDDD686C-2DB1-411C-833F-ABAFCAE5498D}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{EDDD686C-2DB1-411C-833F-ABAFCAE5498D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{EDDD686C-2DB1-411C-833F-ABAFCAE5498D}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{EDDD686C-2DB1-411C-833F-ABAFCAE5498D}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{EDDD686C-2DB1-411C-833F-ABAFCAE5498D}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{EDDD686C-2DB1-411C-833F-ABAFCAE5498D}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{EDDD686C-2DB1-411C-833F-ABAFCAE5498D}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{EDDD686C-2DB1-411C-833F-ABAFCAE5498D}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{EDDD686C-2DB1-411C-833F-ABAFCAE5498D}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{289E231C-190E-4595-BD10-4007CA10CEE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{289E231C-190E-4595-BD10-4007CA10CEE2}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{289E231C-190E-4595-BD10-4007CA10CEE2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{289E231C-190E-4595-BD10-4007CA10CEE2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{289E231C-190E-4595-BD10-4007CA10CEE2}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{289E231C-190E-4595-BD10-4007CA10CEE2}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{289E231C-190E-4595-BD10-4007CA10CEE2}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{289E231C-190E-4595-BD10-4007CA10CEE2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{289E231C-190E-4595-BD10-4007CA10CEE2}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{289E231C-190E-4595-BD10-4007CA10CEE2}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{289E231C-190E-4595-BD10-4007CA10CEE2}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{289E231C-190E-4595-BD10-4007CA10CEE2}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{289E231C-190E-4595-BD10-4007CA10CEE2}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{289E231C-190E-4595-BD10-4007CA10CEE2}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{289E231C-190E-4595-BD10-4007CA10CEE2}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{8C498075-DAFE-4DAB-91AB-4919BBF7365B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{8C498075-DAFE-4DAB-91AB-4919BBF7365B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{8C498075-DAFE-4DAB-91AB-4919BBF7365B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{8C498075-DAFE-4DAB-91AB-4919BBF7365B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{8C498075-DAFE-4DAB-91AB-4919BBF7365B}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{8C498075-DAFE-4DAB-91AB-4919BBF7365B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{8C498075-DAFE-4DAB-91AB-4919BBF7365B}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{8C498075-DAFE-4DAB-91AB-4919BBF7365B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{8C498075-DAFE-4DAB-91AB-4919BBF7365B}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{8C498075-DAFE-4DAB-91AB-4919BBF7365B}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{8C498075-DAFE-4DAB-91AB-4919BBF7365B}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{8C498075-DAFE-4DAB-91AB-4919BBF7365B}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{8C498075-DAFE-4DAB-91AB-4919BBF7365B}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{8C498075-DAFE-4DAB-91AB-4919BBF7365B}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{8C498075-DAFE-4DAB-91AB-4919BBF7365B}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{900A0419-3579-4DAE-85BE-71A3E4B34239}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{900A0419-3579-4DAE-85BE-71A3E4B34239}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{900A0419-3579-4DAE-85BE-71A3E4B34239}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{900A0419-3579-4DAE-85BE-71A3E4B34239}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{900A0419-3579-4DAE-85BE-71A3E4B34239}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{900A0419-3579-4DAE-85BE-71A3E4B34239}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{900A0419-3579-4DAE-85BE-71A3E4B34239}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{900A0419-3579-4DAE-85BE-71A3E4B34239}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{900A0419-3579-4DAE-85BE-71A3E4B34239}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{900A0419-3579-4DAE-85BE-71A3E4B34239}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{900A0419-3579-4DAE-85BE-71A3E4B34239}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{900A0419-3579-4DAE-85BE-71A3E4B34239}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{900A0419-3579-4DAE-85BE-71A3E4B34239}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{900A0419-3579-4DAE-85BE-71A3E4B34239}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{900A0419-3579-4DAE-85BE-71A3E4B34239}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A}.Retail|x86.Build.0 = Release|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Release|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Retail|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Retail|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Retail|Mixed Platforms.ActiveCfg = Release|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Retail|Mixed Platforms.Build.0 = Release|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Retail|x86.ActiveCfg = Release|Any CPU\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA}.Retail|x86.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(NestedProjects) = preSolution\r\n\t\t{1F18D6EB-4D9C-407A-BD70-C5D525E377B6} = {DE130877-DDCB-425C-9C20-BF1B73D4191D}\r\n\t\t{99DBA82A-E811-4DA0-983C-12E8317F8642} = {DE130877-DDCB-425C-9C20-BF1B73D4191D}\r\n\t\t{60B6139B-6BDA-4860-A475-9675D47888F7} = {DE130877-DDCB-425C-9C20-BF1B73D4191D}\r\n\t\t{9D6BF559-6461-4EAC-BB16-F976FF43E8DA} = {5600609A-D061-40E7-9CB2-92D3350EA31B}\r\n\t\t{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E} = {DE130877-DDCB-425C-9C20-BF1B73D4191D}\r\n\t\t{F8186EC7-237A-4C24-AA48-1CFCDD099A8D} = {DE130877-DDCB-425C-9C20-BF1B73D4191D}\r\n\t\t{F151167C-4736-4C67-9697-7876574C05D0} = {79F0A938-58F7-47CB-B800-0BB3990E1A3A}\r\n\t\t{5A9E17DD-A8E3-4ABD-AC6C-9A6A97F6CDA9} = {DE130877-DDCB-425C-9C20-BF1B73D4191D}\r\n\t\t{C71136AE-8197-4A9A-AA5F-9102F657C502} = {DE130877-DDCB-425C-9C20-BF1B73D4191D}\r\n\t\t{3735A25A-28B6-4DA3-A4CF-7606538E0155} = {DE130877-DDCB-425C-9C20-BF1B73D4191D}\r\n\t\t{B1066655-D67C-44EE-AEA4-32C7CE17A745} = {DE130877-DDCB-425C-9C20-BF1B73D4191D}\r\n\t\t{EDDD686C-2DB1-411C-833F-ABAFCAE5498D} = {DE130877-DDCB-425C-9C20-BF1B73D4191D}\r\n\t\t{289E231C-190E-4595-BD10-4007CA10CEE2} = {79F0A938-58F7-47CB-B800-0BB3990E1A3A}\r\n\t\t{1431A58D-34DC-4EFB-9E3D-DC545D51BE6A} = {0437EB5A-0401-4C38-A4B9-2DA6AA23A953}\r\n\t\t{32C9310D-75D0-4616-9017-42BDC6C3EFDA} = {0437EB5A-0401-4C38-A4B9-2DA6AA23A953}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "src/JasperService/EventLogFactory.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing FubuCore;\nusing FubuMVC.Core.Services;\nusing Topshelf.HostConfigurators;\nusing Topshelf.Logging;\n\nnamespace JasperService\n{\n    public static class HostConfiguratorLogExtensions\n    {\n        public static void UseEventLog(this HostConfigurator configurator, JasperServiceConfiguration settings)\n        {\n            HostLogger.UseLogger(new EventLogFactoryConfigurator(settings));\n        }\n\n        public class EventLogFactoryConfigurator : HostLoggerConfigurator\n        {\n            private readonly JasperServiceConfiguration _settings;\n\n            public EventLogFactoryConfigurator(JasperServiceConfiguration settings)\n            {\n                _settings = settings;\n            }\n\n            public LogWriterFactory CreateLogWriterFactory()\n            {\n                return new EventLogFactory(_settings);\n            }\n        }\n    }\n\n    public class EventLogFactory : LogWriterFactory\n    {\n        private readonly JasperServiceConfiguration _settings;\n\n        public EventLogFactory(JasperServiceConfiguration settings)\n        {\n            _settings = settings;\n            if (!EventLog.SourceExists(_settings.Name))\n                EventLog.CreateEventSource(_settings.Name, \"Application\");\n        }\n\n        public LogWriter Get(string name)\n        {\n            return new EventLogWriter(_settings, name);\n        }\n\n        public void Shutdown()\n        {\n            //no-op\n        }\n    }\n\n    public class EventLogWriter : LogWriter\n    {\n        private readonly JasperServiceConfiguration _settings;\n        private readonly string _name;\n\n        public EventLogWriter(JasperServiceConfiguration settings, string name)\n        {\n            _settings = settings;\n            _name = name;\n        }\n\n        public void Log(LoggingLevel level, object obj)\n        {\n            // no-op\n        }\n\n        public void Log(LoggingLevel level, object obj, Exception exception)\n        {\n            // no-op\n        }\n\n        public void Log(LoggingLevel level, LogWriterOutputProvider messageProvider)\n        {\n            // no-op\n        }\n\n        public void LogFormat(LoggingLevel level, IFormatProvider formatProvider, string format, params object[] args)\n        {\n            // no-op\n        }\n\n        public void LogFormat(LoggingLevel level, string format, params object[] args)\n        {\n            // no-op\n        }\n\n        public void Debug(object obj)\n        {\n            // no-op\n        }\n\n        public void Debug(object obj, Exception exception)\n        {\n            // no-op\n        }\n\n        public void Debug(LogWriterOutputProvider messageProvider)\n        {\n            // no-op\n        }\n\n        public void DebugFormat(IFormatProvider formatProvider, string format, params object[] args)\n        {\n            // no-op\n        }\n\n        public void DebugFormat(string format, params object[] args)\n        {\n            // no-op\n        }\n\n        public void Info(object obj)\n        {\n            // no-op\n        }\n\n        public void Info(object obj, Exception exception)\n        {\n            // no-op\n        }\n\n        public void Info(LogWriterOutputProvider messageProvider)\n        {\n            // no-op\n        }\n\n        public void InfoFormat(IFormatProvider formatProvider, string format, params object[] args)\n        {\n            // no-op\n        }\n\n        public void InfoFormat(string format, params object[] args)\n        {\n            // no-op\n        }\n\n        public void Warn(object obj)\n        {\n            // no-op\n        }\n\n        public void Warn(object obj, Exception exception)\n        {\n            // no-op\n        }\n\n        public void Warn(LogWriterOutputProvider messageProvider)\n        {\n            // no-op\n        }\n\n        public void WarnFormat(IFormatProvider formatProvider, string format, params object[] args)\n        {\n            // no-op\n        }\n\n        public void WarnFormat(string format, params object[] args)\n        {\n            // no-op\n        }\n\n        public void Error(object obj)\n        {\n            Log(obj, EventLogEntryType.Error);\n        }\n\n        public void Error(object obj, Exception exception)\n        {\n            Log(\"{0}{1}{2}\".ToFormat(obj, Environment.NewLine, exception), EventLogEntryType.Error);\n        }\n\n        public void Error(LogWriterOutputProvider messageProvider)\n        {\n            Error(messageProvider());\n        }\n\n        public void ErrorFormat(IFormatProvider formatProvider, string format, params object[] args)\n        {\n            Error(string.Format(formatProvider, format, args));\n        }\n\n        public void ErrorFormat(string format, params object[] args)\n        {\n            Error(format.ToFormat(args));\n        }\n\n        public void Fatal(object obj)\n        {\n            Error(obj);\n        }\n\n        public void Fatal(object obj, Exception exception)\n        {\n            Error(obj, exception);\n        }\n\n        public void Fatal(LogWriterOutputProvider messageProvider)\n        {\n            Error(messageProvider());\n        }\n\n        public void FatalFormat(IFormatProvider formatProvider, string format, params object[] args)\n        {\n            ErrorFormat(formatProvider, format, args);\n        }\n\n        public void FatalFormat(string format, params object[] args)\n        {\n            ErrorFormat(format, args);\n        }\n\n        public bool IsDebugEnabled { get { return false; } }\n        public bool IsInfoEnabled { get { return false; } }\n        public bool IsWarnEnabled { get { return false; } }\n        public bool IsErrorEnabled { get { return true; } }\n        public bool IsFatalEnabled { get { return true; } }\n\n        private void Log(object obj, EventLogEntryType type)\n        {\n            // Event Log's max message size is 31839 characters\n            string message = \"[{0}]: {1}\".ToFormat(_name, obj);\n            message = message.Substring(0, Math.Min(message.Length, 31839));\n            EventLog.WriteEntry(_settings.Name, message, type);\n        }\n    }\n}\n"
  },
  {
    "path": "src/JasperService/JasperService.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x64</Platform>\n    <ProjectGuid>{8C498075-DAFE-4DAB-91AB-4919BBF7365B}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>JasperService</RootNamespace>\n    <AssemblyName>JasperService</AssemblyName>\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>x64</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>x64</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"EventLogFactory.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <None Include=\"app.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Topshelf\">\n          <HintPath>..\\..\\packages\\Topshelf\\lib\\net452\\Topshelf.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/JasperService/Program.cs",
    "content": "﻿using FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Services;\nusing Topshelf;\n\nnamespace JasperService\n{\n    internal static class Program\n    {\n        public static void Main(params string[] args)\n        {\n\t        var settings = serviceConfiguration();\n\n            HostFactory.Run(x => {\n                x.SetServiceName(settings.Name);\n                x.SetDisplayName(settings.DisplayName);\n                x.SetDescription(settings.Description);\n\n                if (Platform.IsUnix ())\n                {\n                    x.RunAsPrompt();\n                } else\n                {\n                    x.RunAsLocalService();\n                }\n\n\t\t\t\tif (settings.UseEventLog)\n\t\t\t\t{\n\t\t\t\t\tx.UseEventLog(settings);\n\t\t\t\t}\n\n\t\t\t\tx.Service<JasperServiceRuntime>(s =>\n\t\t\t\t{\n                    s.ConstructUsing(name => new JasperServiceRuntime(settings));\n                    s.WhenStarted(r => r.Start());\n                    s.WhenStopped(r => r.Stop());\n                    s.WhenPaused(r => r.Stop());\n                    s.WhenContinued(r => r.Start());\n                    s.WhenShutdown(r => r.Stop());\n                });\n\n                x.StartAutomatically();\n            });\n        }\n\n\t\tprivate static JasperServiceConfiguration serviceConfiguration()\n\t\t{\n\t\t    var directory = FubuRuntime.DefaultApplicationPath();\n\t\t\tvar fileSystem = new FileSystem();\n\n\t\t\treturn fileSystem.LoadFromFile<JasperServiceConfiguration>(directory, JasperServiceConfiguration.FILE);\n\t\t}\n    }\n}\n"
  },
  {
    "path": "src/JasperService/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"JasperService\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Towers Watson\")]\n[assembly: AssemblyProduct(\"JasperService\")]\n[assembly: AssemblyCopyright(\"Copyright © Towers Watson 2015\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"96f5f9cf-84cc-4bf7-99ce-dd10a62f94be\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/JasperService/app.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.6\"/></startup></configuration>\n"
  },
  {
    "path": "src/JasperService/paket.references",
    "content": "FubuCore\nTopShelf"
  },
  {
    "path": "src/OwinBottle/BondVillainMiddleware.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing FubuMVC.Core.Http.Owin;\r\nusing FubuMVC.Core.Http.Owin.Middleware;\r\n\r\nnamespace OwinBottle\r\n{\r\n    public class BondVillainMiddleware : IOwinMiddleware\r\n    {\r\n        private readonly Func<IDictionary<string, object>, Task> _inner;\r\n\r\n        public BondVillainMiddleware(Func<IDictionary<string, object>, Task> inner)\r\n        {\r\n            _inner = inner;\r\n        }\r\n\r\n        public Task Invoke(IDictionary<string, object> environment)\r\n        {\r\n            var writer = new OwinHttpResponse(environment);\r\n            writer.AppendHeader(\"Slow-Moving\", \"Laser\");\r\n\r\n            return _inner(environment);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/OwinBottle/OwinBottle.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProjectGuid>{60B6139B-6BDA-4860-A475-9675D47888F7}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>OwinBottle</RootNamespace>\r\n    <AssemblyName>OwinBottle</AssemblyName>\r\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <TargetFrameworkProfile />\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"System.Xml\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"BondVillainMiddleware.cs\" />\r\n    <Compile Include=\"RegisterBondVillainMiddleware.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\r\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\r\n      <Name>FubuMVC.Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\r\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\r\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\r\n  </Target>\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n  <ItemGroup>\r\n    <Reference Include=\"FubuCore\">\r\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\r\n      <Private>True</Private>\r\n      <Paket>True</Paket>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Win32.Primitives\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.AppContext\">\r\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Buffers\">\r\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Console\">\r\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tools\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Calendars\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression.ZipFile\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Http\">\r\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"mscorlib\">\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Resources.ResourceManager\">\r\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Handles\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Loader\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Numerics\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Cng\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Csp\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Timer\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n</Project>"
  },
  {
    "path": "src/OwinBottle/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\nusing FubuMVC.Core;\r\n\r\n[assembly: AssemblyTitle(\"OwinBottle\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"Extend Health Inc\")]\r\n[assembly: AssemblyProduct(\"OwinBottle\")]\r\n[assembly: AssemblyCopyright(\"Copyright © Extend Health Inc 2014\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"26df9be1-1e2a-4a45-a979-4fb5b03ecf52\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Build and Revision Numbers \r\n// by using the '*' as shown below:\r\n// [assembly: AssemblyVersion(\"1.0.*\")]\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n\r\n[assembly:FubuModule]\r\n"
  },
  {
    "path": "src/OwinBottle/RegisterBondVillainMiddleware.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.Core.Http.Owin;\r\n\r\nnamespace OwinBottle\r\n{\r\n    public class RegisterBondVillainMiddleware : IFubuRegistryExtension\r\n    {\r\n        public void Configure(FubuRegistry registry)\r\n        {\r\n            registry.AlterSettings<OwinSettings>(x => { x.AddMiddleware<BondVillainMiddleware>(); });\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/OwinBottle/paket.references",
    "content": "structuremap\nFubuCore"
  },
  {
    "path": "src/QuickStart/Global.asax",
    "content": "﻿<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"QuickStart.Global\" Language=\"C#\" %>\r\n"
  },
  {
    "path": "src/QuickStart/Global.asax.cs",
    "content": "﻿// SAMPLE: asp-net-hello-world-application\r\nusing System;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.StructureMap;\r\n\r\nnamespace QuickStart\r\n{\r\n    public class Global : System.Web.HttpApplication\r\n    {\r\n        private FubuRuntime _runtime;\r\n\r\n        protected void Application_Start(object sender, EventArgs e)\r\n        {\r\n            _runtime = FubuApplication\r\n                .DefaultPolicies()  // Use the default FubuMVC conventions\r\n                .StructureMap()     // Use a new StructureMap container\r\n                .Bootstrap();    \r\n        }\r\n\r\n        protected void Application_End(object sender, EventArgs e)\r\n        {\r\n            _runtime.Dispose();\r\n        }\r\n    }\r\n}\r\n// ENDSAMPLE"
  },
  {
    "path": "src/QuickStart/HelloWorldApplication.cs",
    "content": "﻿using FubuMVC.Core;\r\nusing FubuMVC.StructureMap;\r\n\r\nnamespace QuickStart\r\n{\r\n    // SAMPLE: hello-world-application\r\n    public class HelloWorldApplication : IApplicationSource\r\n    {\r\n        public FubuApplication BuildApplication()\r\n        {\r\n            return FubuApplication.DefaultPolicies().StructureMap();\r\n        }\r\n    }\r\n    // ENDSAMPLE\r\n\r\n    // SAMPLE: hello-world-home\r\n    public class HomeEndpoint\r\n    {\r\n        public string Index()\r\n        {\r\n            return \"Hello World!\";\r\n        }\r\n    }\r\n    // ENDSAMPLE\r\n}"
  },
  {
    "path": "src/QuickStart/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"QuickStart\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"Extend Health Inc\")]\r\n[assembly: AssemblyProduct(\"QuickStart\")]\r\n[assembly: AssemblyCopyright(\"Copyright © Extend Health Inc 2013\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"451cee6d-a9eb-44bd-92d2-ab5c6eca10c9\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Revision and Build Numbers \r\n// by using the '*' as shown below:\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n"
  },
  {
    "path": "src/QuickStart/QuickStart.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>\n    </ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{6FD195B6-E84C-4E4A-B197-1AD72E98FEEE}</ProjectGuid>\n    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>QuickStart</RootNamespace>\n    <AssemblyName>QuickStart</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <UseIISExpress>false</UseIISExpress>\n    <FileUpgradeFlags>\n    </FileUpgradeFlags>\n    <OldToolsVersion>4.0</OldToolsVersion>\n    <UpgradeBackupLocation>\n    </UpgradeBackupLocation>\n    <IISExpressSSLPort />\n    <IISExpressAnonymousAuthentication />\n    <IISExpressWindowsAuthentication />\n    <IISExpressUseClassicPipelineMode />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Bottles\">\n      <HintPath>..\\packages\\Bottles\\lib\\Bottles.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.EnterpriseServices\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Web.ApplicationServices\" />\n    <Reference Include=\"System.Web.DynamicData\" />\n    <Reference Include=\"System.Web.Entity\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Web.Services\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Global.asax\" />\n    <Content Include=\"Web.config\" />\n    <Content Include=\"Web.Debug.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n    <Content Include=\"Web.Release.config\">\n      <DependentUpon>Web.config</DependentUpon>\n    </Content>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Global.asax.cs\">\n      <DependentUpon>Global.asax</DependentUpon>\n    </Compile>\n    <Compile Include=\"HelloWorldApplication.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"ripple.dependencies.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{E18FD922-0E7A-49CD-B89F-473826077B9D}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\n  </Target>\n  <ProjectExtensions>\n    <VisualStudio>\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\n        <WebProjectProperties>\n          <UseIIS>False</UseIIS>\n          <AutoAssignPort>True</AutoAssignPort>\n          <DevelopmentServerPort>52108</DevelopmentServerPort>\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\n          <IISUrl>\n          </IISUrl>\n          <NTLMAuthentication>False</NTLMAuthentication>\n          <UseCustomServer>False</UseCustomServer>\n          <CustomServerUrl>\n          </CustomServerUrl>\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n        </WebProjectProperties>\n      </FlavorProperties>\n    </VisualStudio>\n  </ProjectExtensions>\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v10.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Primitives\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.AppContext\">\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Buffers\">\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Console\">\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tools\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Calendars\">\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Extensions\">\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression\">\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression.ZipFile\">\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http\">\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Primitives\">\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Extensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Primitives\">\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Resources.ResourceManager\">\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Handles\">\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Loader\">\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Numerics\">\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Cng\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Csp\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Timer\">\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/QuickStart/Web.Debug.config",
    "content": "﻿<?xml version=\"1.0\"?>\r\n\r\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\r\n\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n  <!--\r\n    In the example below, the \"SetAttributes\" transform will change the value of \r\n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \r\n    finds an atrribute \"name\" that has a value of \"MyDB\".\r\n    \r\n    <connectionStrings>\r\n      <add name=\"MyDB\" \r\n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \r\n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\r\n    </connectionStrings>\r\n  -->\r\n  <system.web>\r\n    <!--\r\n      In the example below, the \"Replace\" transform will replace the entire \r\n      <customErrors> section of your web.config file.\r\n      Note that because there is only one customErrors section under the \r\n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\r\n      \r\n      <customErrors defaultRedirect=\"GenericError.htm\"\r\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\r\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\r\n      </customErrors>\r\n    -->\r\n  </system.web>\r\n</configuration>"
  },
  {
    "path": "src/QuickStart/Web.Release.config",
    "content": "﻿<?xml version=\"1.0\"?>\r\n\r\n<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->\r\n\r\n<configuration xmlns:xdt=\"http://schemas.microsoft.com/XML-Document-Transform\">\r\n  <!--\r\n    In the example below, the \"SetAttributes\" transform will change the value of \r\n    \"connectionString\" to use \"ReleaseSQLServer\" only when the \"Match\" locator \r\n    finds an atrribute \"name\" that has a value of \"MyDB\".\r\n    \r\n    <connectionStrings>\r\n      <add name=\"MyDB\" \r\n        connectionString=\"Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True\" \r\n        xdt:Transform=\"SetAttributes\" xdt:Locator=\"Match(name)\"/>\r\n    </connectionStrings>\r\n  -->\r\n  <system.web>\r\n    <compilation xdt:Transform=\"RemoveAttributes(debug)\" />\r\n    <!--\r\n      In the example below, the \"Replace\" transform will replace the entire \r\n      <customErrors> section of your web.config file.\r\n      Note that because there is only one customErrors section under the \r\n      <system.web> node, there is no need to use the \"xdt:Locator\" attribute.\r\n      \r\n      <customErrors defaultRedirect=\"GenericError.htm\"\r\n        mode=\"RemoteOnly\" xdt:Transform=\"Replace\">\r\n        <error statusCode=\"500\" redirect=\"InternalError.htm\"/>\r\n      </customErrors>\r\n    -->\r\n  </system.web>\r\n</configuration>"
  },
  {
    "path": "src/QuickStart/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\r\n\r\n<!--\r\n  For more information on how to configure your ASP.NET application, please visit\r\n  http://go.microsoft.com/fwlink/?LinkId=169433\r\n  -->\r\n\r\n<configuration>\r\n    <system.web>\r\n        <compilation debug=\"true\" targetFramework=\"4.0\" />\r\n    </system.web>\r\n\r\n</configuration>\r\n"
  },
  {
    "path": "src/QuickStart/paket.references",
    "content": "FubuCore\nstructuremap"
  },
  {
    "path": "src/RemoteService/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"RemoteService\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Extend Health Inc\")]\n[assembly: AssemblyProduct(\"RemoteService\")]\n[assembly: AssemblyCopyright(\"Copyright © Extend Health Inc 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"efb1c639-26b6-4610-abf2-60940efd021d\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/RemoteService/RemoteApplication.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Services;\nusing FubuMVC.Core.Services.Messaging;\n\nnamespace RemoteService\n{\n    public class RemoteGo\n    {\n        public Guid Id = Guid.NewGuid();\n\n        protected bool Equals(RemoteGo other)\n        {\n            return Id.Equals(other.Id);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((RemoteGo) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return Id.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Id: {0}\", Id);\n        }\n    }\n\n    public class RemoteApplication : IApplicationLoader, IDisposable, IListener<RemoteGo>\n    {\n        public IDisposable Load(Dictionary<string, string> properties)\n        {\n            GlobalMessageTracking.Messaging.AddListener(this);\n            return this;\n        }\n\n        public void Dispose()\n        {\n            \n        }\n\n        public void Receive(RemoteGo message)\n        {\n            Task.Factory.StartNew(() =>\n            {\n                Thread.Sleep(500);\n                GlobalMessageTracking.ReceivedMessage(message);\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/RemoteService/RemoteService.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>RemoteService</RootNamespace>\n    <AssemblyName>RemoteService</AssemblyName>\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"RemoteApplication.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Dynamic.Runtime;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Runtime.Serialization.Primitives;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Primitives\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net20\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net35\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net40\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\netstandard1.0\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0') Or ($(TargetFrameworkProfile) == 'Profile5') Or ($(TargetFrameworkProfile) == 'Profile6') Or ($(TargetFrameworkProfile) == 'Profile14') Or ($(TargetFrameworkProfile) == 'Profile19') Or ($(TargetFrameworkProfile) == 'Profile24') Or ($(TargetFrameworkProfile) == 'Profile37') Or ($(TargetFrameworkProfile) == 'Profile42') Or ($(TargetFrameworkProfile) == 'Profile47') Or ($(TargetFrameworkProfile) == 'Profile92') Or ($(TargetFrameworkProfile) == 'Profile102') Or ($(TargetFrameworkProfile) == 'Profile136') Or ($(TargetFrameworkProfile) == 'Profile147') Or ($(TargetFrameworkProfile) == 'Profile158') Or ($(TargetFrameworkProfile) == 'Profile225') Or ($(TargetFrameworkProfile) == 'Profile240') Or ($(TargetFrameworkProfile) == 'Profile255') Or ($(TargetFrameworkProfile) == 'Profile328') Or ($(TargetFrameworkProfile) == 'Profile336') Or ($(TargetFrameworkProfile) == 'Profile344')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net40+sl5+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'MonoAndroid') Or ($(TargetFrameworkIdentifier) == 'MonoTouch') Or ($(TargetFrameworkIdentifier) == 'Xamarin.iOS') Or ($(TargetFrameworkIdentifier) == 'Xamarin.Mac') Or ($(TargetFrameworkProfile) == 'Profile7') Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile32') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile78') Or ($(TargetFrameworkProfile) == 'Profile111') Or ($(TargetFrameworkProfile) == 'Profile151') Or ($(TargetFrameworkProfile) == 'Profile157') Or ($(TargetFrameworkProfile) == 'Profile259')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.AppContext\">\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Buffers\">\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Console\">\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tools\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.0\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.3\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Calendars\">\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Extensions\">\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression\">\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression.ZipFile\">\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http\">\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Primitives\">\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Extensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Primitives\">\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Resources.ResourceManager\">\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Handles\">\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Loader\">\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Numerics\">\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.0\\System.Runtime.Serialization.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.3\\System.Runtime.Serialization.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Cng\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Csp\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Timer\">\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/RemoteService/paket.references",
    "content": "FubuCore\nNewtonsoft.Json\nstructuremap"
  },
  {
    "path": "src/SampleService/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"SampleService\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Extend Health Inc\")]\n[assembly: AssemblyProduct(\"SampleService\")]\n[assembly: AssemblyCopyright(\"Copyright © Extend Health Inc 2012\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"b3ce8ce5-5fce-494f-a9c2-790ea877d0e9\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/SampleService/Sample.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Diagnostics.Packaging;\nusing FubuMVC.Core.Services;\nusing FubuMVC.Core.Services.Messaging;\nusing FubuMVC.Core.Services.Remote;\nusing StructureMap;\nusing StructureMap.Configuration.DSL;\nusing StructureMap.Graph;\n\nnamespace SampleService\n{\n    public class Foo\n    {\n        public Foo()\n        {\n            Id = Guid.NewGuid();\n        }\n\n        public Guid Id { get; set; }\n    }\n\n\n    public class SampleRegistry : Registry\n    {\n        public SampleRegistry()\n        {\n            Scan(x =>\n            {\n                x.TheCallingAssembly();\n                x.WithDefaultConventions();\n            });\n        }\n    }\n\n    public interface IDependency\n    {\n    }\n\n    public class Dependency : IDependency\n    {\n    }\n\n    public class SampleBootstrapper : IApplicationLoader, IDisposable\n    {\n        public IDisposable Load(Dictionary<string, string> properties)\n        {\n            //ObjectFactory.Initialize(x => x.AddRegistry<SampleRegistry>());\n            GlobalMessageTracking.SendMessage(new ServiceStarted{ActivatorTypeName = typeof(SampleService).AssemblyQualifiedName});\n            GlobalMessageTracking.SendMessage(new ServiceStarted{ActivatorTypeName = typeof(RemoteService).AssemblyQualifiedName});\n\n            return this;\n        }\n\n        public void Dispose()\n        {\n            \n        }\n    }\n\n\n    public class SampleService : IActivator, IDeactivator, IListener<Foo>\n    {\n        private readonly IDependency _dependency;\n\n        public SampleService(IDependency dependency)\n        {\n            _dependency = dependency;\n        }\n\n        public void Activate(IActivationLog log, IPerfTimer timer)\n        {\n            Write(\"Starting SampleService...\");\n\n            GlobalMessageTracking.Messaging.AddListener(this);\n        }\n\n        public void Deactivate(IActivationLog log)\n        {\n            Write(\"Stopping SampleService...\");\n        }\n\n        public void Write(string message)\n        {\n            Console.WriteLine(\"From {0}: {1}\", GetType().Name, message);\n        }\n\n        public void Receive(Foo message)\n        {\n            Task.Factory.StartNew(() =>\n            {\n                Thread.Sleep(500);\n                GlobalMessageTracking.ReceivedMessage(message);\n            });\n        }\n    }\n\n    public class RemoteService : IActivator, IDeactivator, IListener<TestSignal>\n    {\n        public void Activate(IActivationLog log, IPerfTimer timer)\n        {\n            GlobalMessageTracking.Messaging.AddListener(this);\n        }\n\n\n        public void Deactivate(IActivationLog log)\n        {\n        }\n\n        public void Receive(TestSignal message)\n        {\n            GlobalMessageTracking.SendMessage(new TestResponse {Number = message.Number});\n        }\n    }\n\n    public class TestSignal\n    {\n        public int Number { get; set; }\n\n        protected bool Equals(TestSignal other)\n        {\n            return Number == other.Number;\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != GetType()) return false;\n            return Equals((TestSignal) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return Number;\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Signal: {0}\", Number);\n        }\n    }\n\n    public class TestResponse\n    {\n        public int Number { get; set; }\n\n        protected bool Equals(TestResponse other)\n        {\n            return Number == other.Number;\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != GetType()) return false;\n            return Equals((TestResponse) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return Number;\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"Response: {0}\", Number);\n        }\n    }\n}"
  },
  {
    "path": "src/SampleService/SampleService.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{EDDD686C-2DB1-411C-833F-ABAFCAE5498D}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>SampleService</RootNamespace>\n    <AssemblyName>SampleService</AssemblyName>\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Sample.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Primitives\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.AppContext\">\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Buffers\">\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Console\">\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tools\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Calendars\">\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Extensions\">\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression\">\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression.ZipFile\">\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http\">\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Primitives\">\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Extensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Primitives\">\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Resources.ResourceManager\">\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Handles\">\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Loader\">\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Numerics\">\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Cng\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Csp\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Timer\">\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/SampleService/paket.references",
    "content": "structuremap"
  },
  {
    "path": "src/SampleService/text.txt",
    "content": "some text"
  },
  {
    "path": "src/ScheduledJobHarness/AlwaysGoodJob.cs",
    "content": "﻿using System.Threading;\nusing FubuMVC.Core.ServiceBus.Polling;\n\nnamespace ScheduledJobHarness\n{\n    public class AlwaysGoodJob : IJob\n    {\n        public void Execute(CancellationToken cancellation)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/ScheduledJobHarness/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.6\"/>\n    </startup>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.WindowsAzure.Storage\" publicKeyToken=\"31bf3856ad364e35\" culture=\"neutral\"/>\n        <bindingRedirect oldVersion=\"0.0.0.0-3.0.1.0\" newVersion=\"3.0.1.0\"/>\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>\n"
  },
  {
    "path": "src/ScheduledJobHarness/AtSecondsAfterTheMinute.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\n\nnamespace ScheduledJobHarness\n{\n    public class AtSecondsAfterTheMinute : IScheduleRule\n    {\n        private readonly int _seconds;\n\n        public AtSecondsAfterTheMinute(int seconds)\n        {\n            _seconds = seconds;\n        }\n\n        public DateTimeOffset ScheduleNextTime(DateTimeOffset currentTime, JobExecutionRecord lastExecution)\n        {\n            var next = currentTime.Subtract(new TimeSpan(0, 0, 0, currentTime.Second, currentTime.Millisecond));\n\n            while (next < currentTime)\n            {\n                next = next.Add(_seconds.Seconds());\n            }\n\n            return next;\n        }\n    }\n}"
  },
  {
    "path": "src/ScheduledJobHarness/FailsFirstTwoTimes.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace ScheduledJobHarness\n{\n    public class FailsFirstTwoTimes : IJob\n    {\n        private readonly Envelope _envelope;\n\n        public FailsFirstTwoTimes(Envelope envelope)\n        {\n            _envelope = envelope;\n        }\n\n        public void Execute(CancellationToken cancellation)\n        {\n            if (_envelope.Attempts < 3)\n            {\n                throw new DivideByZeroException(\"I fail on the first and second attempts\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/ScheduledJobHarness/FailsSometimes.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing FubuMVC.Core.ServiceBus.Polling;\n\nnamespace ScheduledJobHarness\n{\n    public class FailsSometimes : IJob\n    {\n        private readonly Random _random = new Random();\n\n        public void Execute(CancellationToken cancellation)\n        {\n            var next = _random.Next(0, 100);\n            if (next > 50)\n            {\n                throw new DivideByZeroException(\"I fail sometimes\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/ScheduledJobHarness/FiveMinuteIncrements.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\n\nnamespace ScheduledJobHarness\n{\n    public class FiveMinuteIncrements : IScheduleRule\n    {\n        public DateTimeOffset ScheduleNextTime(DateTimeOffset currentTime, JobExecutionRecord lastExecution)\n        {\n            var hour = new DateTimeOffset(currentTime.Year, currentTime.Month, currentTime.Day, currentTime.Hour, 0, 0,\n                currentTime.Offset);\n\n\n\n            while (hour < currentTime)\n            {\n                hour = hour.AddMinutes(5);\n            }\n\n            return hour;\n        }\n    }\n}"
  },
  {
    "path": "src/ScheduledJobHarness/MonitoredNode.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing Raven.Client;\n\nnamespace ScheduledJobHarness\n{\n    public class ErrorHandlingPolicy : HandlerChainPolicy\n    {\n        public override void Configure(HandlerChain handlerChain)\n        {\n            //when retrying, do so a maximum of 5 times\n            handlerChain.MaximumAttempts = 3;\n\n            //retry now\n            handlerChain.OnException<DivideByZeroException>()\n                .RetryLater(5.Seconds());\n        }\n    }\n\n    public class MonitoredNode : FubuTransportRegistry<MonitoringSettings>, IDisposable\n    {\n        public static readonly Random Random = new Random(100);\n\n        public const string HealthyAndFunctional = \"Healthy and Functional\";\n        public const string TimesOutOnStartupOrHealthCheck = \"Times out on startup or health check\";\n        public const string ThrowsExceptionOnStartupOrHealthCheck = \"Throws exception on startup or health check\";\n        public const string IsInactive = \"Is inactive\";\n\n        private readonly string _nodeId;\n        private FubuRuntime _runtime;\n\n        public MonitoredNode(string nodeId, Uri incoming, IDocumentStore store)\n        {\n            Policies.Local.Add<ErrorHandlingPolicy>();\n\n            AlterSettings<MonitoringSettings>(x => x.Incoming = \"memory://jobs\".ToUri());\n\n            Channel(x => x.Incoming).ReadIncoming();\n\n            NodeName = \"Monitoring\";\n            NodeId = nodeId;\n\n            _nodeId = nodeId;\n\n            ServiceBus.EnableInMemoryTransport(incoming);\n\n\n            Services.ReplaceService(store);\n\n            Services.AddService<ILogListener, ScheduledJobListener>();\n\n\n            ScheduledJob.DefaultJobChannel(x => x.Incoming);\n            ScheduledJob.RunJob<AlwaysGoodJob>().ScheduledBy<TenMinuteIncrements>();\n            ScheduledJob.RunJob<FailsFirstTwoTimes>().ScheduledBy<SevenMinuteIncrements>();\n            ScheduledJob.RunJob<FailsSometimes>().ScheduledBy<FiveMinuteIncrements>();\n            ScheduledJob.RunJob<TimesOutSometimes>().ScheduledBy<ThreeMinuteIncrements>().Timeout(10.Seconds());\n        }\n\n        public string Id\n        {\n            get { return _nodeId; }\n        }\n\n        public ScheduledJobGraph Jobs\n        {\n            get { return _runtime.Get<ScheduledJobGraph>(); }\n        }\n\n        public void Startup(ISubscriptionPersistence subscriptions, ISchedulePersistence schedules)\n        {\n            Services.ReplaceService(subscriptions);\n            Services.ReplaceService(schedules);\n\n            _runtime = ToRuntime();\n        }\n\n        void IDisposable.Dispose()\n        {\n            _runtime.Dispose();\n        }\n\n        public void Shutdown()\n        {\n            _runtime.Dispose();\n        }\n    }\n}"
  },
  {
    "path": "src/ScheduledJobHarness/MonitoredNodeGroup.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Runtime;\n\nnamespace ScheduledJobHarness\n{\n    public class MonitoredNodeGroup : FubuRegistry, IDisposable\n    {\n        private readonly Cache<string, MonitoredNode> _nodes = new Cache<string, MonitoredNode>();\n\n        // TODO -- replace w/ RavenDb later\n        //private readonly ISubscriptionPersistence _subscriptions;\n        //private readonly ISchedulePersistence _schedules;\n        //private readonly FubuRuntime _runtime;\n        private readonly ManualResetEvent _reset = new ManualResetEvent(false);\n        //private readonly Container container;\n        //private readonly IDocumentStore _store;\n\n        public MonitoredNodeGroup()\n        {\n            Port = PortFinder.FindPort(5500);\n\n            throw new Exception(\"Change this below\");\n\n            /*\n            AlterSettings<KatanaSettings>(_ =>\n            {\n                _.AutoHostingEnabled = true;\n                _.Port = _port;\n            });\n             \n\n            Services.ReplaceService<ISchedulePersistence, RavenDbSchedulePersistence>();\n            Services.ReplaceService<ISubscriptionPersistence, RavenDbSubscriptionPersistence>();\n\n\n            ReplaceSettings(RavenDbSettings.InMemory());\n\n            ServiceBus.Configure(x =>\n            {\n                x.Enabled = true;\n                x.EnableInMemoryTransport = true;\n            });\n\n            container = new Container(_ => _.ForSingletonOf<MonitoredNodeGroup>().Use(this));\n            this.StructureMap(container);\n\n            _runtime = ToRuntime();\n\n            _runtime.Get<ChannelGraph>().Name = \"Monitoring\";\n            _subscriptions = _runtime.Get<ISubscriptionPersistence>();\n            _schedules = _runtime.Get<ISchedulePersistence>();\n            _store = _runtime.Get<IDocumentStore>();\n             * */\n        }\n\n        public void Dispose()\n        {\n            _nodes.Each(x => x.SafeDispose());\n            //_runtime.Dispose();\n        }\n\n        public IEnumerable<MonitoredNode> Nodes()\n        {\n            return _nodes;\n        }\n\n        public void Shutdown()\n        {\n            _reset.Set();\n        }\n\n        public void Add(string nodeId, Uri incoming)\n        {\n            //var node = new MonitoredNode(nodeId, incoming, _store);\n            //_nodes[nodeId] = node;\n        }\n\n        public MonitoredNode NodeFor(string id)\n        {\n            return _nodes[id];\n        }\n\n        public void Startup()\n        {\n            //_nodes.Each(node => node.Startup(_subscriptions, _schedules));\n            //var jobs = _nodes.First.Jobs;\n            //container.Configure(_ => _.For<ScheduledJobGraph>().Use(jobs));\n        }\n\n        public void ShutdownNode(string node)\n        {\n            _nodes[node].Shutdown();\n            _nodes.Remove(node);\n        }\n\n        public void WaitForShutdown()\n        {\n            _reset.WaitOne();\n        }\n    }\n\n    public class TaskState\n    {\n        public Uri Task { get; set; }\n        public string Node { get; set; }\n    }\n}"
  },
  {
    "path": "src/ScheduledJobHarness/MonitoringSettings.cs",
    "content": "﻿using System;\n\nnamespace ScheduledJobHarness\n{\n    public class MonitoringSettings\n    {\n        public Uri Incoming { get; set; }\n    }\n}"
  },
  {
    "path": "src/ScheduledJobHarness/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing FubuCore;\nusing FubuMVC.Core.Continuations;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Diagnostics.Visualization;\nusing FubuMVC.Core.Urls;\nusing FubuMVC.Core.View;\nusing HtmlTags;\n\nnamespace ScheduledJobHarness\n{\n    internal class Program\n    {\n        private static void Main(string[] args)\n        {\n            var group = new MonitoredNodeGroup();\n            group.Add(\"Node1\", \"memory://1\".ToUri());\n            group.Add(\"Node2\", \"memory://2\".ToUri());\n            group.Add(\"Node3\", \"memory://3\".ToUri());\n            group.Add(\"Node4\", \"memory://4\".ToUri());\n\n            group.Startup();\n\n            var url = \"http://localhost:\" + group.Port;\n            Process.Start(url);\n\n            Console.WriteLine(\"Running the harness...\");\n\n            group.WaitForShutdown();\n\n            Console.WriteLine(\"Shutting down the harness\");\n\n            group.SafeDispose();\n        }\n    }\n\n    public class HomeEndpoint\n    {\n        private readonly FubuHtmlDocument _document;\n        private readonly MonitoredNodeGroup _group;\n        private readonly IUrlRegistry _urls;\n\n        public HomeEndpoint(FubuHtmlDocument document, MonitoredNodeGroup group, IUrlRegistry urls)\n        {\n            _document = document;\n            _group = @group;\n            _urls = urls;\n        }\n\n        public HtmlDocument Index()\n        {\n            _document.Title = \"Scheduled Job Testing Harness\";\n\n            _document.Add(\"p\").Text(\"The running nodes are:\");\n            _document.Push(\"ul\");\n\n            _group.Nodes().Each(node =>\n            {\n                var url = _urls.UrlFor(new ShutdownRequest {Node = node.Id});\n                _document.Add(\"li/a\").Text(\"Shutdown \" + node.Id).Attr(\"href\", url);\n            });\n\n\n            _document.Add(\"p/a\").Text(\"Scheduled Job Diagnostics\")\n                .Attr(\"href\", _urls.UrlFor<ScheduledJobsFubuDiagnostics>(x => x.get_scheduled_jobs()));\n\n\n            _document.Add(\"p/a\").Text(\"Quit the harness\").Attr(\"href\", _urls.UrlFor<HomeEndpoint>(x => x.get_quit()));\n\n            return _document;\n        }\n\n        public FubuContinuation get_shutdown_Node(ShutdownRequest request)\n        {\n            _group.ShutdownNode(request.Node);\n\n            return FubuContinuation.RedirectTo(\"\");\n        }\n\n        public string get_quit()\n        {\n            _group.Shutdown();\n            return \"Quitting...\";\n        }\n    }\n\n    public class ShutdownRequest\n    {\n        public string Node { get; set; }\n    }\n}"
  },
  {
    "path": "src/ScheduledJobHarness/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"ScheduledJobHarness\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Extend Health Inc\")]\n[assembly: AssemblyProduct(\"ScheduledJobHarness\")]\n[assembly: AssemblyCopyright(\"Copyright © Extend Health Inc 2014\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"3b1881e4-8510-45bd-8e4e-a26330a40a69\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/ScheduledJobHarness/ScheduledJobHarness.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{B1066655-D67C-44EE-AEA4-32C7CE17A745}</ProjectGuid>\n    <OutputType>Exe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>ScheduledJobHarness</RootNamespace>\n    <AssemblyName>ScheduledJobHarness</AssemblyName>\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup>\n    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"AlwaysGoodJob.cs\" />\n    <Compile Include=\"AtSecondsAfterTheMinute.cs\" />\n    <Compile Include=\"FailsFirstTwoTimes.cs\" />\n    <Compile Include=\"FailsSometimes.cs\" />\n    <Compile Include=\"FiveMinuteIncrements.cs\" />\n    <Compile Include=\"MonitoredNode.cs\" />\n    <Compile Include=\"MonitoredNodeGroup.cs\" />\n    <Compile Include=\"MonitoringSettings.cs\" />\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"ScheduledJobListener.cs\" />\n    <Compile Include=\"SevenMinuteIncrements.cs\" />\n    <Compile Include=\"TenMinuteIncrements.cs\" />\n    <Compile Include=\"ThreeMinuteIncrements.cs\" />\n    <Compile Include=\"TimesOutSometimes.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Dynamic.Runtime;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Runtime.Serialization.Primitives;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"HtmlTags\">\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.CompilerServices.AsyncTargetingPack.Net4\">\n          <HintPath>..\\..\\packages\\Microsoft.CompilerServices.AsyncTargetingPack\\lib\\net40\\Microsoft.CompilerServices.AsyncTargetingPack.Net4.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.CompilerServices.AsyncTargetingPack.Net45\">\n          <HintPath>..\\..\\packages\\Microsoft.CompilerServices.AsyncTargetingPack\\lib\\net45\\Microsoft.CompilerServices.AsyncTargetingPack.Net45.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0'\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.CompilerServices.AsyncTargetingPack.Silverlight5\">\n          <HintPath>..\\..\\packages\\Microsoft.CompilerServices.AsyncTargetingPack\\lib\\sl50\\Microsoft.CompilerServices.AsyncTargetingPack.Silverlight5.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Data.Edm\">\n          <HintPath>..\\..\\packages\\Microsoft.Data.Edm\\lib\\net40\\Microsoft.Data.Edm.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile5') Or ($(TargetFrameworkProfile) == 'Profile6') Or ($(TargetFrameworkProfile) == 'Profile7') Or ($(TargetFrameworkProfile) == 'Profile14') Or ($(TargetFrameworkProfile) == 'Profile19') Or ($(TargetFrameworkProfile) == 'Profile24') Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile37') Or ($(TargetFrameworkProfile) == 'Profile42') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile47') Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile78') Or ($(TargetFrameworkProfile) == 'Profile147') Or ($(TargetFrameworkProfile) == 'Profile158')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Data.Edm.Portable\">\n          <HintPath>..\\..\\packages\\Microsoft.Data.Edm\\lib\\portable-net40+sl5+wp8+win8\\Microsoft.Data.Edm.Portable.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v5.0')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Data.Edm.SL\">\n          <HintPath>..\\..\\packages\\Microsoft.Data.Edm\\lib\\sl4\\Microsoft.Data.Edm.SL.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Data.OData\">\n          <HintPath>..\\..\\packages\\Microsoft.Data.OData\\lib\\net40\\Microsoft.Data.OData.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile5') Or ($(TargetFrameworkProfile) == 'Profile6') Or ($(TargetFrameworkProfile) == 'Profile7') Or ($(TargetFrameworkProfile) == 'Profile14') Or ($(TargetFrameworkProfile) == 'Profile19') Or ($(TargetFrameworkProfile) == 'Profile24') Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile37') Or ($(TargetFrameworkProfile) == 'Profile42') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile47') Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile78') Or ($(TargetFrameworkProfile) == 'Profile147') Or ($(TargetFrameworkProfile) == 'Profile158')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Data.OData.Portable\">\n          <HintPath>..\\..\\packages\\Microsoft.Data.OData\\lib\\portable-net40+sl5+wp8+win8\\Microsoft.Data.OData.Portable.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v5.0')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Data.OData.SL\">\n          <HintPath>..\\..\\packages\\Microsoft.Data.OData\\lib\\sl4\\Microsoft.Data.OData.SL.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Data.Services.Client\">\n          <HintPath>..\\..\\packages\\Microsoft.Data.Services.Client\\lib\\net40\\Microsoft.Data.Services.Client.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkIdentifier) == 'MonoAndroid') Or ($(TargetFrameworkIdentifier) == 'MonoTouch') Or ($(TargetFrameworkIdentifier) == 'Xamarin.iOS') Or ($(TargetFrameworkIdentifier) == 'Xamarin.Mac') Or ($(TargetFrameworkProfile) == 'Profile7') Or ($(TargetFrameworkProfile) == 'Profile24') Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile47') Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile78') Or ($(TargetFrameworkProfile) == 'Profile158')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Data.Services.Client.Portable\">\n          <HintPath>..\\..\\packages\\Microsoft.Data.Services.Client\\lib\\portable-net45+sl5+wp8+win8\\Microsoft.Data.Services.Client.Portable.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v5.0')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Data.Services.Client.SL\">\n          <HintPath>..\\..\\packages\\Microsoft.Data.Services.Client\\lib\\sl4\\Microsoft.Data.Services.Client.SL.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Windows\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Primitives\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.WindowsAzure.Configuration\">\n          <HintPath>..\\..\\packages\\Microsoft.WindowsAzure.ConfigurationManager\\lib\\net40\\Microsoft.WindowsAzure.Configuration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net20\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net35\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net40\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\netstandard1.0\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0') Or ($(TargetFrameworkProfile) == 'Profile5') Or ($(TargetFrameworkProfile) == 'Profile6') Or ($(TargetFrameworkProfile) == 'Profile14') Or ($(TargetFrameworkProfile) == 'Profile19') Or ($(TargetFrameworkProfile) == 'Profile24') Or ($(TargetFrameworkProfile) == 'Profile37') Or ($(TargetFrameworkProfile) == 'Profile42') Or ($(TargetFrameworkProfile) == 'Profile47') Or ($(TargetFrameworkProfile) == 'Profile92') Or ($(TargetFrameworkProfile) == 'Profile102') Or ($(TargetFrameworkProfile) == 'Profile136') Or ($(TargetFrameworkProfile) == 'Profile147') Or ($(TargetFrameworkProfile) == 'Profile158') Or ($(TargetFrameworkProfile) == 'Profile225') Or ($(TargetFrameworkProfile) == 'Profile240') Or ($(TargetFrameworkProfile) == 'Profile255') Or ($(TargetFrameworkProfile) == 'Profile328') Or ($(TargetFrameworkProfile) == 'Profile336') Or ($(TargetFrameworkProfile) == 'Profile344')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net40+sl5+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'MonoAndroid') Or ($(TargetFrameworkIdentifier) == 'MonoTouch') Or ($(TargetFrameworkIdentifier) == 'Xamarin.iOS') Or ($(TargetFrameworkIdentifier) == 'Xamarin.Mac') Or ($(TargetFrameworkProfile) == 'Profile7') Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile32') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile78') Or ($(TargetFrameworkProfile) == 'Profile111') Or ($(TargetFrameworkProfile) == 'Profile151') Or ($(TargetFrameworkProfile) == 'Profile157') Or ($(TargetFrameworkProfile) == 'Profile259')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Owin\">\n          <HintPath>..\\..\\packages\\Owin\\lib\\net40\\Owin.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"Raven.Abstractions\">\n          <HintPath>..\\..\\packages\\RavenDB.Client\\lib\\net40\\Raven.Abstractions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"Raven.Client.Lightweight\">\n          <HintPath>..\\..\\packages\\RavenDB.Client\\lib\\net40\\Raven.Client.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.ComponentModel.Composition\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Raven.Abstractions\">\n          <HintPath>..\\..\\packages\\RavenDB.Client\\lib\\net45\\Raven.Abstractions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"Raven.Client.Lightweight\">\n          <HintPath>..\\..\\packages\\RavenDB.Client\\lib\\net45\\Raven.Client.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0'\">\n      <ItemGroup>\n        <Reference Include=\"Raven.Client.Silverlight\">\n          <HintPath>..\\..\\packages\\RavenDB.Client\\lib\\sl50\\Raven.Client.Silverlight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"Raven.Abstractions\">\n          <HintPath>..\\..\\packages\\RavenDB.Database\\lib\\net40\\Raven.Abstractions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"Raven.Database\">\n          <HintPath>..\\..\\packages\\RavenDB.Database\\lib\\net40\\Raven.Database.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.ComponentModel.Composition\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Raven.Abstractions\">\n          <HintPath>..\\..\\packages\\RavenDB.Database\\lib\\net45\\Raven.Abstractions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"Raven.Database\">\n          <HintPath>..\\..\\packages\\RavenDB.Database\\lib\\net45\\Raven.Database.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"Raven.Client.Embedded\">\n          <HintPath>..\\..\\packages\\RavenDB.Embedded\\lib\\net40\\Raven.Client.Embedded.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Raven.Client.Embedded\">\n          <HintPath>..\\..\\packages\\RavenDB.Embedded\\lib\\net45\\Raven.Client.Embedded.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.AppContext\">\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Buffers\">\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Console\">\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tools\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.0\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.3\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Calendars\">\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Extensions\">\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression\">\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression.ZipFile\">\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http\">\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Primitives\">\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Extensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Primitives\">\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Resources.ResourceManager\">\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Handles\">\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Loader\">\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Numerics\">\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.0\\System.Runtime.Serialization.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.3\\System.Runtime.Serialization.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Cng\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Csp\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Spatial\">\n          <HintPath>..\\..\\packages\\System.Spatial\\lib\\net40\\System.Spatial.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile5') Or ($(TargetFrameworkProfile) == 'Profile6') Or ($(TargetFrameworkProfile) == 'Profile7') Or ($(TargetFrameworkProfile) == 'Profile14') Or ($(TargetFrameworkProfile) == 'Profile19') Or ($(TargetFrameworkProfile) == 'Profile24') Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile37') Or ($(TargetFrameworkProfile) == 'Profile42') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile47') Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile78') Or ($(TargetFrameworkProfile) == 'Profile147') Or ($(TargetFrameworkProfile) == 'Profile158')\">\n      <ItemGroup>\n        <Reference Include=\"System.Spatial.Portable\">\n          <HintPath>..\\..\\packages\\System.Spatial\\lib\\portable-net40+sl5+wp8+win8\\System.Spatial.Portable.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v5.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Spatial.SL\">\n          <HintPath>..\\..\\packages\\System.Spatial\\lib\\sl4\\System.Spatial.SL.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Timer\">\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.WindowsAzure.Storage\">\n          <HintPath>..\\..\\packages\\WindowsAzure.Storage\\lib\\net40\\Microsoft.WindowsAzure.Storage.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Data.Services.Client\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/ScheduledJobHarness/ScheduledJobListener.cs",
    "content": "﻿using System;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\n\nnamespace ScheduledJobHarness\n{\n    public class ScheduledJobListener : ILogListener\n    {\n        public bool ListensFor(Type type)\n        {\n            return type.Namespace == typeof (ScheduledJobRecord).Namespace;\n        }\n\n        public void DebugMessage(object message)\n        {\n        }\n\n        public void InfoMessage(object message)\n        {\n            Console.WriteLine(message);\n        }\n\n        public void Debug(string message)\n        {\n        }\n\n        public void Info(string message)\n        {\n        }\n\n        public void Error(string message, Exception ex)\n        {\n        }\n\n        public void Error(object correlationId, string message, Exception ex)\n        {\n        }\n\n        public bool IsDebugEnabled { get { return true; } }\n        public bool IsInfoEnabled { get { return true; } }\n    }\n}"
  },
  {
    "path": "src/ScheduledJobHarness/SevenMinuteIncrements.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\n\nnamespace ScheduledJobHarness\n{\n    public class SevenMinuteIncrements : IScheduleRule\n    {\n        public DateTimeOffset ScheduleNextTime(DateTimeOffset currentTime, JobExecutionRecord lastExecution)\n        {\n            var hour = new DateTimeOffset(currentTime.Year, currentTime.Month, currentTime.Day, currentTime.Hour, 0, 0,\n                currentTime.Offset);\n\n\n\n            while (hour < currentTime)\n            {\n                hour = hour.AddMinutes(7);\n            }\n\n            return hour;\n        }\n    }\n}"
  },
  {
    "path": "src/ScheduledJobHarness/TenMinuteIncrements.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\n\nnamespace ScheduledJobHarness\n{\n    public class TenMinuteIncrements : IScheduleRule\n    {\n        public DateTimeOffset ScheduleNextTime(DateTimeOffset currentTime, JobExecutionRecord lastExecution)\n        {\n            var hour = new DateTimeOffset(currentTime.Year, currentTime.Month, currentTime.Day, currentTime.Hour, 0, 0,\n                currentTime.Offset);\n\n\n            while (hour < currentTime)\n            {\n                hour = hour.AddMinutes(10);\n            }\n\n            return hour;\n        }\n    }\n}"
  },
  {
    "path": "src/ScheduledJobHarness/ThreeMinuteIncrements.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Execution;\nusing FubuMVC.Core.ServiceBus.ScheduledJobs.Persistence;\n\nnamespace ScheduledJobHarness\n{\n    public class ThreeMinuteIncrements : IScheduleRule\n    {\n        public DateTimeOffset ScheduleNextTime(DateTimeOffset currentTime, JobExecutionRecord lastExecution)\n        {\n            var hour = new DateTimeOffset(currentTime.Year, currentTime.Month, currentTime.Day, currentTime.Hour, 0, 0,\n                currentTime.Offset);\n\n\n\n            while (hour < currentTime)\n            {\n                hour = hour.AddMinutes(3);\n            }\n\n            return hour;\n        }\n    }\n}"
  },
  {
    "path": "src/ScheduledJobHarness/TimesOutSometimes.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Polling;\n\nnamespace ScheduledJobHarness\n{\n    public class TimesOutSometimes : IJob\n    {\n        private readonly Random _random = new Random();\n\n        public void Execute(CancellationToken cancellation)\n        {\n            var next = _random.Next(0, 100);\n            if (next > 50)\n            {\n                Thread.Sleep(1.Minutes());\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/ScheduledJobHarness/paket.references",
    "content": "FubuCore\nHtmlTags\nMicrosoft.CompilerServices.AsyncTargetingPack\nMicrosoft.Data.Edm\nMicrosoft.Data.OData\nMicrosoft.Data.Services.Client\nMicrosoft.WindowsAzure.ConfigurationManager\nNewtonsoft.Json\nOwin\nRavenDB.Client\nRavenDb.Database\nRavenDB.Embedded\nStructureMap\nSystem.Spatial\nWindowsAzure.Storage"
  },
  {
    "path": "src/Serenity/AssetTagsState.cs",
    "content": "using System.Collections.Generic;\nusing OpenQA.Selenium;\n\nnamespace Serenity\n{\n    public class AssetTagsState\n    {\n        public IList<IWebElement> Scripts { get; set; }\n        public IList<IWebElement> Styles { get; set; }\n    }\n}"
  },
  {
    "path": "src/Serenity/BrowserFactory.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing StoryTeller;\n\nnamespace Serenity\n{\n    public static class BrowserFactory\n    {\n        public static IBrowserLifecycle GetBrowserLifecyle(BrowserType browserType)\n        {\n            switch (browserType)\n            {\n                case BrowserType.Chrome:\n                    return new ChromeBrowser();\n\n                case BrowserType.IE:\n                    return new InternetExplorerBrowser();\n\n                case BrowserType.Firefox:\n                    return new FirefoxBrowser();\n\n                case BrowserType.Phantom:\n                    return new PhantomBrowser();\n\n                default:\n                    throw new ArgumentOutOfRangeException(\"Unrecognized browser\");\n            }\n        }\n\n        public static BrowserType DetermineBrowserType(BrowserType? @default)\n        {\n            return selectForProfile() ?? @default ?? BrowserType.Chrome;\n        }\n\n        private static BrowserType? selectForProfile()\n        {\n            if (Project.CurrentProfile.IsEmpty()) return null;\n\n            var parts = Project.CurrentProfile.Split('/');\n\n            BrowserType browser;\n            foreach (var part in parts)\n            {\n                if (Enum.TryParse(part, true, out browser))\n                {\n                    return browser;\n                }\n            }\n\n            return null;\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/BrowserLifecycle.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing OpenQA.Selenium;\n\nnamespace Serenity\n{\n    public abstract class BrowserLifecycle : IBrowserLifecycle\n    {\n        private Lazy<IWebDriver> _driver;\n        private readonly IList<IBrowserSessionInitializer> _initializers = new List<IBrowserSessionInitializer>();\n\n        // This is a stop gap to deal with instantiating multiple instances of any BrowserLifecycle within one process concurrently.\n        // Ideally we should create the different WebDriverService instances in singleton scope, then create WebDrivers pointing at \n        // the existing service. The Serenity.Test project is an example consumer of this need. \n        // Chrome See: https://sites.google.com/a/chromium.org/chromedriver/getting-started for setup with Chrome specifically \n        //             the Controlling ChromeDriver's lifetime section - Note the ChromeDriverService usage\n        // Firefox need to investigate best approach for this.\n        private static readonly object _runningLifecyclesLock = new object();\n        private static readonly IDictionary<Type, int> _runningLifecycles = new Dictionary<Type, int>();\n\n        public abstract string BrowserName { get; }\n\n        protected BrowserLifecycle()\n        {\n            Recycle();\n        }\n\n        private bool cleanUpFlag()\n        {\n            bool cleanUp;\n            Boolean.TryParse(Environment.GetEnvironmentVariable(\"serenityci\"), out cleanUp);\n            return cleanUp;\n        }\n\n        private IWebDriver initializeDriver()\n        {\n            if (cleanUpFlag()) { aggressiveCleanup(); }\n\n            var driver = BuildDriverAndIncrementLifecycleCount();\n            _initializers.Each(x => x.InitializeSession(driver));\n\n            return driver;\n        }\n\n        protected abstract IWebDriver buildDriver();\n\n        public void Dispose()\n        {\n            if (_driver == null || !_driver.IsValueCreated)\n                return;\n\n            lock (_runningLifecyclesLock)\n            {\n                var type = GetType();\n                if (!_runningLifecycles.ContainsKey(type))\n                {\n                    throw new Exception(\"Should never happen, but if you try to decrement the lifecycle and the key does not exist\");\n                }\n\n                _runningLifecycles[type]--;\n\n                var task = Task.Factory.StartNew(() =>\n                {\n                    try\n                    {\n                        _driver.Value.Quit();\n                        _driver.Value.Dispose();\n                        _driver = null;\n                        return true;\n                    }\n                    catch (Exception e)\n                    {\n                        Console.WriteLine(e);\n                        return false;\n                    }\n                });\n\n                var timeout = TimeSpan.FromMinutes(1);\n\n                var timedout = !task.Wait(timeout);\n                var failed = false;\n\n                if (!timedout)\n                {\n                    failed = !task.Result;\n                }\n\n                if (_runningLifecycles[type] < 0)\n                {\n                    throw new Exception(\"Decrement has been called too many times?\");\n                }\n\n                if (_runningLifecycles[type] == 0 && (timedout || failed))\n                {\n                    Console.WriteLine(\"{0} Cleanup {1} proceeding with aggressive cleanup (Killing Processes)\",\n                        BrowserName,\n                        timedout\n                            ? \"timed out after {0:c}\".ToFormat(timeout)\n                            : \"failed\");\n                    aggressiveCleanup();\n                    _driver = null;\n                }\n            }\n        }\n\n        ~BrowserLifecycle()\n        {\n            this.SafeDispose();\n        }\n\n        protected abstract void aggressiveCleanup();\n\n        public void UseInitializer(IBrowserSessionInitializer initializer)\n        {\n            _initializers.Add(initializer);\n        }\n\n        public IWebDriver Driver\n        {\n            get { return _driver.Value; }\n        }\n\n        public void Recycle()\n        {\n            Dispose();\n            _driver = new Lazy<IWebDriver>(initializeDriver, LazyThreadSafetyMode.ExecutionAndPublication);\n        }\n\n        public bool HasBeenStarted()\n        {\n            return _driver.IsValueCreated;\n        }\n\n\n        private IWebDriver BuildDriverAndIncrementLifecycleCount()\n        {\n            lock (_runningLifecyclesLock)\n            {\n                var type = GetType();\n                if (!_runningLifecycles.ContainsKey(type))\n                {\n                    _runningLifecycles[type] = 0;\n                }\n\n                _runningLifecycles[type]++;\n\n                return buildDriver();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/BrowserType.cs",
    "content": "namespace Serenity\n{\n    public enum BrowserType\n    {\n        Firefox,\n        IE,\n        Chrome,\n\t\tPhantom\n    }\n}"
  },
  {
    "path": "src/Serenity/ChromeBrowser.cs",
    "content": "using System;\nusing FubuCore;\nusing OpenQA.Selenium;\nusing OpenQA.Selenium.Chrome;\nusing Serenity.WebDriver.EmbeddedDrivers;\n\nnamespace Serenity\n{\n    public class ChromeBrowser : EmbeddedBrowserLifecycle<ChromeEmbeddedDriver>\n    {\n        public const string ChromeProcess = \"chrome\";\n        public const string DriverProcess = \"chromedriver\";\n        public const string File = \"chromedriver.exe\";\n\n        public override string BrowserName { get { return \"Chrome\"; } }\n\n        protected override IWebDriver constructDriver()\n        {\n            var fileSystem = new FileSystem();\n\n            var workingDir = AppDomain.CurrentDomain.BaseDirectory;\n            return fileSystem.FileExists(workingDir, File)\n                ? new ChromeDriver(workingDir)\n                : new ChromeDriver();\n        }\n\n        protected override void aggressiveCleanup()\n        {\n            Kill.Processes(DriverProcess, File, ChromeProcess);\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/ContextualNavigationLogger.cs",
    "content": "using System;\nusing StoryTeller;\n\nnamespace Serenity\n{\n    public class ContextualNavigationLogger : INavigationLogger\n    {\n        private readonly ISpecContext _context;\n\n        public ContextualNavigationLogger(ISpecContext context)\n        {\n            _context = context;\n        }\n\n        public void Navigating(string url, Action action)\n        {\n            using (_context.Timings.Subject(\"Navigation\", url))\n            {\n                action();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/FirefoxBrowser.cs",
    "content": "using OpenQA.Selenium;\nusing OpenQA.Selenium.Firefox;\n\nnamespace Serenity\n{\n    public class FirefoxBrowser : BrowserLifecycle\n    {\n        public const string Process = \"firefox\";\n\n        public override string BrowserName { get { return \"FireFox\"; } }\n\n        protected override IWebDriver buildDriver()\n        {\n            return new FirefoxDriver();\n        }\n\n        protected override void aggressiveCleanup()\n        {\n            Kill.Processes(Process);\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/Fixtures/Grammars/CheckValueGrammar.cs",
    "content": "using System.Collections.Generic;\nusing System.Text;\nusing OpenQA.Selenium;\nusing Serenity.Fixtures.Handlers;\nusing StoryTeller.Conversion;\nusing StoryTeller.Results;\n\nnamespace Serenity.Fixtures.Grammars\n{\n    public class CheckValueGrammar : SimpleElementGesture\n    {\n        public CheckValueGrammar(ScreenFixture fixture, GestureConfig config) : base(fixture, config)\n        {\n            \n        }\n\n        protected override IEnumerable<CellResult> execute(IWebElement element, StepValues values)\n        {\n            var handler = ElementHandlers.FindHandler(element);\n            var expectedValue = values.Get(Cell.Key);\n\n            var matchingHandler = handler as IMatchingHandler ?? new BasicMatchingHandler(handler);\n            if (matchingHandler.MatchesData(element, expectedValue))\n            {\n                return new [] { new CellResult(Cell.Key, ResultStatus.success) };\n            }\n            else\n            {\n                return new [] { new CellResult(Cell.Key, ResultStatus.failed){actual = handler.GetData(SearchContext, element)} };\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/Fixtures/Grammars/ClickGrammar.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing OpenQA.Selenium;\nusing StoryTeller.Conversion;\nusing StoryTeller.Results;\n\nnamespace Serenity.Fixtures.Grammars\n{\n    public class ClickGrammar : SimpleElementGesture\n    {\n        public ClickGrammar(ScreenFixture fixture, GestureConfig config) : base(fixture, config)\n        {\n        }\n\n        protected override IEnumerable<CellResult> execute(IWebElement element, StepValues values)\n        {\n            assertCondition(element.Enabled, DisabledElementMessage);\n            assertCondition(element.Displayed, HiddenElementMessage);\n\n            element.Click();\n\n            return new [] { CellResult.Ok(Cell.Key) };\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/Serenity/Fixtures/Grammars/EnterValueGrammar.cs",
    "content": "using System.Collections.Generic;\nusing System.Text;\nusing OpenQA.Selenium;\nusing Serenity.Fixtures.Handlers;\nusing StoryTeller.Conversion;\nusing StoryTeller.Results;\n\nnamespace Serenity.Fixtures.Grammars\n{\n    public class EnterValueGrammar : SimpleElementGesture\n    {\n        public EnterValueGrammar(ScreenFixture fixture, GestureConfig def) : base(fixture, def)\n        {\n        }\n\n        protected override IEnumerable<CellResult> execute(IWebElement element, StepValues values)\n        {\n            var handler = ElementHandlers.FindHandler(element);\n            handler.EnterData(SearchContext, element, values.Get(Cell.Key));\n\n            return new [] {CellResult.Ok(Cell.Key)};\n        }\n    }\n}\n"
  },
  {
    "path": "src/Serenity/Fixtures/Grammars/GestureConfig.cs",
    "content": "using System;\nusing System.Linq.Expressions;\nusing OpenQA.Selenium;\nusing FubuCore.Reflection;\n\nnamespace Serenity.Fixtures.Grammars\n{\n    public class GestureConfig\n    {\n        public string CellName = \"value\";\n        public Type CellType = typeof(string);\n        public string Template;\n        public string Description;\n        public Func<ISearchContext, IWebElement> Finder;\n\n        public static GestureConfig ByName(string name)\n        {\n            return new GestureConfig{\n                Finder = driver =>\n                {\n                    return driver.FindElementOrNull(By.Name(name)) ?? driver.FindElementOrNull(By.Id(name));\n                },\n                CellName = name,\n                Description = \"Name/Id=\" + name\n            };\n        }\n\n        public static GestureConfig ByProperty<T>(Expression<Func<T, object>> expression)\n        {\n            var accessor = expression.ToAccessor();\n            return ByName(accessor.Name);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Serenity/Fixtures/Grammars/SimpleElementGesture.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuCore;\nusing OpenQA.Selenium;\nusing StoryTeller;\nusing StoryTeller.Conversion;\nusing StoryTeller.Grammars.Lines;\nusing StoryTeller.Model;\nusing StoryTeller.Results;\n\nnamespace Serenity.Fixtures.Grammars\n{\n    public abstract class SimpleElementGesture : LineGrammar\n    {\n        private readonly ScreenFixture _fixture;\n        private readonly GestureConfig _config;\n\n        public static readonly string DisabledElementMessage =\n            \"Found the element, but it was disabled and could not be manipulated\";\n\n        public static readonly string HiddenElementMessage =\n            \"Found the element, but it was not visible and should not be manipulated\";\n\n        public static readonly string NonexistentElementMessage = \"Could not find the element\";\n        private Cell _cell;\n\n\n        public SimpleElementGesture(ScreenFixture fixture, GestureConfig config)\n        {\n            _fixture = fixture;\n            _config = config;\n        }\n\n        protected ISearchContext SearchContext\n        {\n            get { return _fixture.SearchContext; }\n        }\n\n        public GestureConfig Config\n        {\n            get { return _config; }\n        }\n\n        protected override string format()\n        {\n            return _config.Template;\n        }\n\n        protected override IEnumerable<Cell> buildCells(CellHandling cellHandling, Fixture fixture)\n        {\n            _cell = new Cell(cellHandling, _config.CellName, _config.CellType) {output = isOutput};\n\n            yield return _cell;\n        }\n\n        public Cell Cell\n        {\n            get { return _cell; }\n        }\n\n        protected virtual bool isOutput\n        {\n            get { return false; }\n        }\n\n        public override IEnumerable<CellResult> Execute(StepValues values, ISpecContext context)\n        {\n            var element = _config.Finder(SearchContext);\n            StoryTellerAssert.Fail(element == null, \"Could not find an element w/ description: \" + _config.Description);\n\n            try\n            {\n                return execute(element, values);\n            }\n            catch (Exception ex)\n            {\n                // TODO: Use exception metadata with and add a custom exception formatter to show exception metadata\n                //       See: https://github.com/storyteller/Storyteller/issues/400\n                // ex.Data.Add(\"Gesture Description\", _config.Description);\n                throw new Exception(\"Gesture failed. [Description: {0}]\".ToFormat(_config.Description), ex);\n            }\n        }\n\n        protected void assertCondition(bool condition, string message)\n        {\n            if (condition) return;\n\n            if (_config.Description.IsNotEmpty())\n            {\n                message += \"\\nElement at --> \" + _config.Description;\n            }\n\n            StoryTellerAssert.Fail(message);\n        }\n\n        protected abstract IEnumerable<CellResult> execute(IWebElement element, StepValues values);\n    }\n}\n"
  },
  {
    "path": "src/Serenity/Fixtures/Handlers/BasicMatchingHandler.cs",
    "content": "using OpenQA.Selenium;\nusing StoryTeller.Equivalence;\n\nnamespace Serenity.Fixtures.Handlers\n{\n    public class BasicMatchingHandler : IMatchingHandler\n    {\n        private readonly IElementHandler _inner;\n        private static readonly EquivalenceChecker checker = new EquivalenceChecker(); \n\n        public BasicMatchingHandler(IElementHandler inner)\n        {\n            _inner = inner;\n        }\n\n        public bool MatchesData(IWebElement element, object expected)\n        {\n            var actual = _inner.GetData(null, element);\n            return checker.IsEqual(expected, actual);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Serenity/Fixtures/Handlers/CheckboxHandler.cs",
    "content": "﻿using System;\nusing OpenQA.Selenium;\nusing FubuCore;\n\nnamespace Serenity.Fixtures.Handlers\n{\n    public class CheckboxHandler : IElementHandler\n    {\n        public bool Matches(IWebElement element)\n        {\n            return element.TagName.Equals(\"input\", StringComparison.InvariantCultureIgnoreCase) &&\n                   element.GetAttribute(\"type\").Equals(\"checkbox\", StringComparison.InvariantCultureIgnoreCase);\n        }\n\n        public void EnterData(ISearchContext context, IWebElement element, object data)\n        {\n            bool value;\n            bool.TryParse(data.ToString(), out value);\n\n            var isChecked = IsChecked(element);\n\n            if (value != isChecked)\n            {\n                element.Click();\n            }\n        }\n\n        public string GetData(ISearchContext context, IWebElement element)\n        {\n            return IsChecked(element).ToString();\n        }\n\n        public static bool IsEnabled(IWebElement checkbox)\n        {\n            return checkbox.GetAttribute(\"disabled\") == null;\n        }\n\n        public static bool IsChecked(IWebElement checkbox)\n        {\n            // This is a fun one. The value of the checked attribute changes depending on the browser?\n            var @checked = checkbox.GetAttribute(\"checked\");\n            return @checked == \"checked\" || @checked == \"true\";\n        }\n\n        public static void Check(IWebElement checkbox)\n        {\n            if (!IsChecked(checkbox))\n            {\n                checkbox.Click();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/Fixtures/Handlers/DefaultElementHandler.cs",
    "content": "using System;\nusing OpenQA.Selenium;\n\nnamespace Serenity.Fixtures.Handlers\n{\n    public class DefaultElementHandler : IElementHandler\n    {\n        public bool Matches(IWebElement element)\n        {\n            return true;\n        }\n\n        public void EnterData(ISearchContext context, IWebElement element, object data)\n        {\n            throw new NotSupportedException(\"Failed to match a better handler\");\n        }\n\n        public string GetData(ISearchContext context, IWebElement element)\n        {\n            return element.Text;\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/Fixtures/Handlers/ElementHandlerWrapper.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing OpenQA.Selenium;\n\nnamespace Serenity.Fixtures.Handlers\n{\n    public abstract class ElementHandlerWrapper : IElementHandler\n    {\n        public static Func<IEnumerable<IElementHandler>> AllHandlers { get; set; }\n\n        static ElementHandlerWrapper()\n        {\n            ResetAllHandlers();\n        }\n\n        public static void ResetAllHandlers()\n        {\n            AllHandlers = () => ElementHandlers.AllHandlers;\n        }\n\n        private IEnumerable<IElementHandler> FollowOnHandlers\n        {\n            get { return AllHandlers().SkipWhile(x => !ReferenceEquals(this, x)).Skip(1); }\n        }\n\n        public bool Matches(IWebElement element)\n        {\n            return WrapperMatches(element) && FollowOnHandlers.Any(x => x.Matches(element));\n        }\n\n        protected abstract bool WrapperMatches(IWebElement element);\n\n        public abstract void EnterData(ISearchContext context, IWebElement element, object data);\n\n        protected void EnterDataNested(ISearchContext context, IWebElement element, object data)\n        {\n            FollowOnHandlers.First(x => x.Matches(element)).EnterData(context, element, data);\n        }\n\n        public abstract string GetData(ISearchContext context, IWebElement element);\n\n        protected string GetDataNested(ISearchContext context, IWebElement element)\n        {\n            return FollowOnHandlers.First(x => x.Matches(element)).GetData(context, element);\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/Fixtures/Handlers/ElementHandlers.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing OpenQA.Selenium;\n\nnamespace Serenity.Fixtures.Handlers\n{\n    public static class ElementHandlers\n    {\n        private static readonly IList<IElementHandler> _handlers = new List<IElementHandler>();\n        private static readonly IList<IElementHandler> _defaultHandlers = new List<IElementHandler>{new CheckboxHandler(),new SelectElementHandler(), new TextboxElementHandler(), new TextAreaElementHandler(), new DefaultElementHandler()};\n\n        public static IList<IElementHandler> Handlers\n        {\n            get { return _handlers; }\n        }\n\n        public static IEnumerable<IElementHandler> AllHandlers\n        {\n            get { return _handlers.Union(_defaultHandlers); }\n        } \n\n        public static IElementHandler FindHandler(IWebElement element)\n        {\n            return AllHandlers.First(x => x.Matches(element));\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/Fixtures/Handlers/IElementHandler.cs",
    "content": "using OpenQA.Selenium;\n\nnamespace Serenity.Fixtures.Handlers\n{\n    public interface IElementHandler\n    {\n        bool Matches(IWebElement element);\n        void EnterData(ISearchContext context, IWebElement element, object data);\n        string GetData(ISearchContext context, IWebElement element);\n    }\n}"
  },
  {
    "path": "src/Serenity/Fixtures/Handlers/IMatchingHandler.cs",
    "content": "using OpenQA.Selenium;\n\nnamespace Serenity.Fixtures.Handlers\n{\n    public interface IMatchingHandler\n    {\n        bool MatchesData(IWebElement element, object expected);\n    }\n}"
  },
  {
    "path": "src/Serenity/Fixtures/Handlers/SelectElementHandler.cs",
    "content": "using OpenQA.Selenium;\nusing FubuCore;\nusing System.Linq;\nusing System.Collections.Generic;\nusing StoryTeller;\n\nnamespace Serenity.Fixtures.Handlers\n{\n    public class SelectElementHandler : IElementHandler, IMatchingHandler\n    {\n        public bool Matches(IWebElement element)\n        {\n            return element.TagName.ToLower() == \"select\";\n        }\n\n        public void EnterData(ISearchContext context, IWebElement element, object data)\n        {\n            var options = findOptions(element);\n            foreach (var option in options)\n            {\n                if (option.Text == data.ToString())\n                {\n                    option.Click();\n                    element.SendKeys(Keys.Tab);\n                    return;\n                }\n            }\n\n            foreach (var option in options)\n            {\n                if (option.GetAttribute(\"value\") == data.ToString())\n                {\n                    option.Click();\n                    element.SendKeys(Keys.Tab);\n                    return;\n                }\n            }\n\n            var message = \"Cannot find the desired option\\nThe available options are\\nDisplay/Key\\n\";\n            foreach (var option in options)\n            {\n                message += \"\\n\" + \"{0}/{1}\".ToFormat(option.Text, option.GetAttribute(\"value\"));\n            }\n\n            StoryTellerAssert.Fail(message);\n\n        }\n\n        private static IEnumerable<IWebElement> findOptions(IWebElement element)\n        {\n            return element.FindElements(By.TagName(\"option\"));\n        }\n\n        public string GetData(ISearchContext context, IWebElement element)\n        {\n            var selected = findSelected(element);\n\n            if (selected == null) return \"Nothing\";\n\n            var value = selected.GetAttribute(\"value\");\n            return value.IsEmpty() ? selected.Text : \"{0}={1}\".ToFormat(selected.Text, value);\n        }\n\n        private IWebElement findSelected(IWebElement element)\n        {\n            var options = findOptions(element);\n            return options.FirstOrDefault(x => x.GetAttribute(\"selected\").IsNotEmpty());\n        }\n\n        public bool MatchesData(IWebElement element, object expected)\n        {\n            var expectedValue = expected.ToString();\n            var selected = findSelected(element);\n\n            if (selected == null) return false;\n\n            \n            if (selected.GetAttribute(\"value\") == expectedValue) return true;\n\n            if (findOptions(element).Select(x => x.GetAttribute(\"value\")).Contains(expectedValue))\n            {\n                return false;\n            }\n\n            return selected.Text == expectedValue;\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/Fixtures/Handlers/TextAreaElementHandler.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing FubuCore;\nusing OpenQA.Selenium;\n\nnamespace Serenity.Fixtures.Handlers\n{\n    public class TextAreaElementHandler : IElementHandler\n    {\n        public bool Matches(IWebElement element)\n        {\n            return element.TagName.ToLower() == \"textarea\";\n        }\n\n        public void EnterData(ISearchContext context, IWebElement element, object data)\n        {\n            if (element.Text.IsNotEmpty() || element.GetAttribute(\"value\").IsNotEmpty())\n            {\n                element.Clear();\n            }\n                \n\n            element.SendKeys(data as string ?? string.Empty);\n        }\n\n        public string GetData(ISearchContext context, IWebElement element)\n        {\n            return element.GetAttribute(\"value\") ?? element.Text;\n        }\n    }\n}\n"
  },
  {
    "path": "src/Serenity/Fixtures/Handlers/TextboxElementHandler.cs",
    "content": "using System;\nusing FubuCore;\nusing OpenQA.Selenium;\n\nnamespace Serenity.Fixtures.Handlers\n{\n    public class TextboxElementHandler : IElementHandler\n    {\n        public virtual bool Matches(IWebElement element)\n        {\n            // TODO --- Change to psuedo CSS class?  Less repeated logic\n            var tagName = element.TagName.ToLower();\n            var type = element.GetAttribute(\"type\");\n            type = type == null ? null : type.ToLower();\n            return tagName == \"input\" && (type == \"text\" || type == \"password\");\n       }\n\n        public virtual void EraseData(ISearchContext context, IWebElement element)\n        {\n            if (element.GetAttribute(\"value\").IsNotEmpty())\n            {\n\n                try\n                {\n                    element.Click();\n                }\n                catch (Exception)\n                {\n                    // nothing\n                }\n                element.SendKeys(Keys.Home + Keys.Shift + Keys.End + Keys.Backspace);\n            }\n        }\n\n        public virtual void EnterData(ISearchContext context, IWebElement element, object data)\n        {\n            EraseData(context, element);\n            element.SendKeys(data as string ?? string.Empty);\n        }\n\n        public virtual string GetData(ISearchContext context, IWebElement element)\n        {\n            return element.GetAttribute(\"value\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/Serenity/Fixtures/ScreenFixture.cs",
    "content": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Registration.Routes;\nusing FubuMVC.Core.Urls;\nusing OpenQA.Selenium;\nusing Serenity.Fixtures.Grammars;\nusing StoryTeller;\nusing StoryTeller.Grammars;\n\nnamespace Serenity.Fixtures\n{\n    public class ScreenFixture : SerenityFixture\n    {\n        private readonly Stack<ISearchContext> _searchContexts = new Stack<ISearchContext>();\n\n        public ISearchContext SearchContext\n        {\n            get\n            {\n                if (_searchContexts.Count == 0)\n                {\n                    return Driver;\n                }\n\n                return _searchContexts.Peek();\n            }\n        }\n\n        protected void PushElementContext(ISearchContext context)\n        {\n            _searchContexts.Push(context);\n        }\n\n        protected void PushElementContext(By selector)\n        {\n            var element = SearchContext.FindElement(selector);\n            StoryTellerAssert.Fail(element == null, () => \"Unable to find element with \" + selector);\n\n            PushElementContext(element);\n        }\n\n        protected void PopElementContext()\n        {\n            if (_searchContexts.Any()) _searchContexts.Pop();\n        }\n\n        protected NavigationDriver Navigation\n        {\n            get { return Retrieve<NavigationDriver>(); }\n        }\n\n        protected internal IWebDriver Driver\n        {\n            get { return Browser.Driver; }\n        }\n\n        protected IBrowserLifecycle Browser\n        {\n            get { return Retrieve<IBrowserLifecycle>(); }\n        }\n\n        protected string RootUrl\n        {\n            get { return Context.Service<FubuRuntime>().BaseAddress; }\n        }\n\n        protected IUrlRegistry Urls\n        {\n            get { return Context.Service<IUrlRegistry>(); }\n        }\n\n        public override sealed void SetUp()\n        {\n            // TODO -- optimize this a bit by finding IBrowserLifecycle early\n\n            _searchContexts.Clear();\n\n            beforeRunning();\n        }\n\n        protected virtual void beforeRunning()\n        {\n        }\n\n        protected IGrammar Click(By selector = null, string id = null, string css = null, string name = null,\n            string label = null, string template = null)\n        {\n            var by = selector ?? id.ById() ?? css.ByCss() ?? name.ByName();\n\n            if (by == null)\n                throw new InvalidOperationException(\"Must specify either the selector, css, or name property\");\n\n            label = label ?? by.ToString().Replace(\"By.\", \"\");\n\n\n            return Do(label, c => SearchContext.FindElement(by).Click());\n        }\n\n        // TODO -- UT this some how\n        // TODO -- Convert to use Serenity.WebDriver.JavaScript\n        protected IGrammar JQueryClick(string template, string id = null, string className = null, string css = null,\n            string tagName = null)\n        {\n            var command = buildJQuerySearch(css, id, className, tagName);\n\n            return Do(template, c => { Retry.Twice(() => Driver.InjectJavascript(command)); });\n        }\n\n        private static string buildJQuerySearch(string css, string id, string className, string tagName)\n        {\n            var search = css;\n\n            if (id.IsNotEmpty())\n            {\n                search = \"#\" + id;\n            }\n\n            if (className.IsNotEmpty())\n            {\n                search = \".\" + className;\n            }\n\n            if (tagName.IsNotEmpty())\n            {\n                search = tagName + search;\n            }\n\n            return \"$('{0}').click();\".ToFormat(search);\n        }\n\n        protected void ClickWithJQuery(string id = null, string className = null, string css = null,\n            string tagName = null)\n        {\n            var command = buildJQuerySearch(css, id, className, tagName);\n\n            Retry.Twice(() => Driver.InjectJavascript(command));\n        }\n\n\n        protected void waitForElement(By elementSearch, int millisecondPolling = 500, int timeoutInMilliseconds = 5000)\n        {\n            SearchContext.WaitForElement(elementSearch, TimeSpan.FromMilliseconds(timeoutInMilliseconds),\n                TimeSpan.FromMilliseconds(millisecondPolling));\n        }\n\n        protected string GetData(IWebElement element)\n        {\n            return SearchContext.GetData(element);\n        }\n\n        protected string GetData(By finder)\n        {\n            var element = SearchContext.FindElement(finder);\n            return SearchContext.GetData(element);\n        }\n\n        protected void SetData(IWebElement element, string data)\n        {\n            SearchContext.SetData(element, data);\n        }\n\n        protected void SetData(By finder, string data)\n        {\n            var element = SearchContext.FindElement(finder);\n            SetData(element, data);\n        }\n\n        protected IGrammar BrowserIsAt(object model, string title, string categoryOrHttpMethod = null)\n        {\n            return BrowserIsAt(x => x.UrlFor(model, categoryOrHttpMethod), title);\n        }\n\n        protected IGrammar BrowserIsAt<T>(string title, string categoryOrHttpMethod = null) where T : class\n        {\n            return BrowserIsAt(x => x.UrlFor<T>(categoryOrHttpMethod), title);\n        }\n\n        protected IGrammar BrowserIsAt(Type handlerType, string title, MethodInfo method = null,\n            string categoryOrHttpMethodOrHttpMethod = null)\n        {\n            return BrowserIsAt(x => x.UrlFor(handlerType, method, categoryOrHttpMethodOrHttpMethod), title);\n        }\n\n        protected IGrammar BrowserIsAt<TController>(Expression<Action<TController>> expression, string title,\n            string categoryOrHttpMethod = null)\n        {\n            return BrowserIsAt(x => x.UrlFor(expression, categoryOrHttpMethod), title);\n        }\n\n        protected IGrammar BrowserIsAt(Type modelType, RouteParameters parameters, string title,\n            string categoryOrHttpMethod = null)\n        {\n            return BrowserIsAt(x => x.UrlFor(modelType, parameters, categoryOrHttpMethod), title);\n        }\n\n        protected IGrammar BrowserIsAt(Func<IUrlRegistry, string> toUrl, string title)\n        {\n            return new FactGrammar(title, c => Driver.Url.Matches(toUrl(Urls)));\n        }\n\n        protected string[] JavascriptErrorsInBrowser()\n        {\n            return Driver\n                .InjectJavascript(\"return SerenityErrorCollector.errors\")\n                .As<IEnumerable<object>>().Select(x =>\n                {\n                    if (x is Dictionary<string, object>)\n                    {\n                        var dict = x.As<Dictionary<string, object>>();\n                        return dict.Select(pair => \"{0} = '{1}'\".ToFormat(pair.Key, pair.Value)).Join(\", \");\n                    }\n\n                    return x.ToString();\n                }).ToArray();\n        }\r\n\r\n        protected bool AssertIsOnScreen<TInput>(TInput input)\n        {\n            var expected = Urls.UrlFor(input, \"GET\");\n            var actual = Driver.Url;\n\n            if (!expected.Matches(Driver.Url))\n            {\n                StoryTellerAssert.Fail(\"The actual Url of the browser is \" + actual.Canonize());\n            }\n\n            return true;\n        }\n\n        protected bool AssertIsOnScreen(string expected)\n        {\n            var actual = Driver.Url;\n\n            if (!expected.Matches(Driver.Url))\n            {\n                StoryTellerAssert.Fail(\"The actual Url of the browser is \" + actual.Canonize());\n            }\n\n            return true;\n        }\n\n        protected bool AssertIsNotOnScreen<TInput>(TInput input)\n        {\n            var actual = new Uri(Driver.Url).AbsolutePath;\n            var expected = Urls.UrlFor(input, \"GET\");\n\n            return !expected.Matches(actual);\n        }\n    }\n\n    public class ScreenFixture<T> : ScreenFixture\n    {\n        protected void enterValue(Expression<Func<T, object>> expression, string value)\n        {\n            // TODO -- use the field naming convention?\n            var name = expression.ToAccessor().Name;\n            SetData(By.Name(name), value);\n        }\n\n        protected string readValue(Expression<Func<T, object>> expression)\n        {\n            var name = expression.ToAccessor().Name;\n            return GetData(By.Name(name));\n        }\n\n        private GestureConfig getGesture(Expression<Func<T, object>> expression, string label = null, string key = null)\n        {\n            // TODO -- later on, use the naming convention from fubu instead of pretending\n            // that this rule is always true\n            var config = GestureForProperty(expression);\n            if (key.IsNotEmpty())\n            {\n                config.CellName = key;\n            }\n\n            return config;\n        }\n\n\n        protected IGrammar EnterScreenValue(Expression<Func<T, object>> expression, string label = null,\n            string key = null)\n        {\n            var config = getGesture(expression, label, key);\n\n            config.Template = \"Enter {\" + config.CellName + \"} for \" + config.CellName;\n            config.Description = \"Enter data for property \" + expression.ToAccessor().Name;\n\n            return new EnterValueGrammar(this, config);\n        }\n\n        protected IGrammar CheckScreenValue(Expression<Func<T, object>> expression, string label = null,\n            string key = null)\n        {\n            var config = getGesture(expression, label, key);\n\n            config.Template = \"The text of \" + (label ?? config.CellName) + \" should be {\" + config.CellName + \"}\";\n            config.Description = \"Check data for property \" + expression.ToAccessor().Name;\n\n            return new CheckValueGrammar(this, config);\n        }\n\n\n        protected GestureConfig GestureForProperty(Expression<Func<T, object>> expression)\n        {\n            return GestureConfig.ByProperty(expression);\n        }\n\n        protected void EditableElement(Expression<Func<T, object>> expression, string label = null)\n        {\n            var accessor = expression.ToAccessor();\n            var name = accessor.Name;\n\n            this[\"Check\" + name] = CheckScreenValue(expression, label);\n            this[\"Enter\" + name] = EnterScreenValue(expression, label);\n        }\n\n        protected void EditableElementsForAllImmediateProperties()\n        {\n            typeof (T)\n                .GetProperties(BindingFlags.Public | BindingFlags.Instance)\n                .Where(x => x.CanRead && x.CanWrite)\n                .Each(prop =>\n                {\n                    var accessor = new SingleProperty(prop);\n                    var expression = accessor.ToExpression<T>();\n\n                    EditableElement(expression);\n                });\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/Fixtures/SerenityFixture.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuCore.Dates;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Security.Authorization;\nusing StoryTeller;\n\nnamespace Serenity.Fixtures\n{\n    public class SerenityFixture : Fixture\n    {\n        protected void DisableAllSecurity()\n        {\n            Runtime.Get<SecuritySettings>().Disable();\n        }\n\n        protected void EnableAllSecurity()\n        {\n            Runtime.Get<SecuritySettings>().Reset();\n        }\n\n        protected FubuRuntime Runtime\n        {\n            get\n            {\n                if (Context == null) throw new InvalidOperationException(\"The Runtime is only available during specification execution\");\n\n                return Retrieve<FubuRuntime>();\n            }\n        }\n\n        protected void ResetTheClock()\n        {\n            Runtime.Get<IClock>().As<Clock>().Live();\n        }\n\n\n        protected void AdvanceTheClock(TimeSpan timespan)\n        {\n            var clock = Runtime.Get<IClock>().As<Clock>();\n            var time = clock.UtcNow().Add(timespan).ToLocalTime();\n\n            clock.LocalNow(time);\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/Fixtures/WebDriverExtensions.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuCore.Reflection;\nusing OpenQA.Selenium;\nusing OpenQA.Selenium.Internal;\nusing OpenQA.Selenium.Support.UI;\nusing Serenity.Fixtures.Handlers;\nusing SeleniumBy = OpenQA.Selenium.By;\n\nnamespace Serenity.Fixtures\n{\n    public static class WebDriverExtensions\n    {\n        public static SeleniumBy ByCss(this string css)\n        {\n            return css.IsEmpty() ? null : By.CssSelector(css);\n        }\n\n        public static SeleniumBy ByName(this string name)\n        {\n            return name.IsEmpty() ? null : By.Name(name);\n        }\n\n        public static SeleniumBy ById(this string id)\n        {\n            return id.IsEmpty() ? null : By.Id(id);\n        }\n\n        // the interface just isn't very discoverable\n        public static object InjectJavascript(this IWebDriver driver, string script)\n        {\n            return ((IJavaScriptExecutor)driver).ExecuteScript(script);\n        }\n\n        public static T InjectJavascript<T>(this IWebDriver driver, string script)\n        {\n            return (T)driver.InjectJavascript(script);\n        }\n\n        public static IWebElement FindElementOrNull(this ISearchContext context, By selector)\n        {\n            try\n            {\n                return context.FindElement(selector);\n            }\n            catch (NoSuchElementException)\n            {\n                return null;\n            }\n        }\n\n        public static IWebElement FindElementByData(this IWebDriver driver, string attribute, string value)\n        {\n            return driver.FindElement(By.CssSelector(CssSelectorByData(attribute, value)));\n        }\n\n        public static ReadOnlyCollection<IWebElement> FindElementsByData(this IWebDriver driver, string attribute, string value)\n        {\n            return driver.FindElements(By.CssSelector(CssSelectorByData(attribute, value)));\n        }\n\n        public static string CssSelectorByData(string attribute, string value)\n        {\n            return \"*[data-{0}={1}]\".ToFormat(attribute, value);\n        }\n\n        public static IWebElement WaitUntil(this IWebDriver driver, Func<IWebElement> condition, int timeoutSeconds = 10)\n        {\n            var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutSeconds));\n            return wait.Until(d => condition());\n        }\n\n        public static readonly Type[] WaitForElementIgnoreExceptions =\n        {\n            typeof(NoSuchElementException),\n            typeof(NotFoundException)\n        };\n\n        public static IWebElement WaitForElement(this ISearchContext context, By selector, TimeSpan? timeout = null, TimeSpan? pollingInterval = null)\n        {\n            try\n            {\n                return Wait.For(() => context.FindElement(selector),\n                    pollingInterval: pollingInterval,\n                    timeout: timeout,\n                    ignoreExceptions: WaitForElementIgnoreExceptions);\n            }\n            catch (WebDriverTimeoutException timeoutException)\n            {\n                throw new NoSuchElementException(\"Unable to locate element: {0}\".ToFormat(selector), timeoutException);\n            }\n        }\n\n        public static IWebElement InputFor<T>(this ISearchContext context, Expression<Func<T, object>> property)\n        {\n            return context.FindElement(By.Name(property.ToAccessor().Name));\n        }\n\n        public static IWebElement LabelFor<T>(this ISearchContext context, Expression<Func<T, object>> property)\n        {\n            return context.FindElement(By.CssSelector(\"label[for='{0}']\".ToFormat(property.ToAccessor().Name)));\n        }\n\n        public static string Data(this IWebElement element, string attribute)\n        {\n            return element.GetAttribute(\"data-{0}\".ToFormat(attribute));\n        }\n\n        public static IWebElement Parent(this IWebElement element)\n        {\n            return element.FindElement(By.XPath(\"..\"));\n        }\n\n        public static IEnumerable<string> GetClasses(this IWebElement element)\n        {\n            return element\n                .GetAttribute(\"class\")\n                .Split(' ');\n        }\n\n        public static bool HasClass(this IWebElement element, string className)\n        {\n            return element\n                .GetClasses()\n                .Contains(className);\n        }\n\n        public static bool HasAttribute(this IWebElement element, string attributeName)\n        {\n            return element.GetAttribute(attributeName) != null;\n        }\n\n        public static string Value(this IWebElement element)\n        {\n            return element.GetAttribute(\"value\");\n        }\n\n        public static string Id(this IWebElement element)\n        {\n            return element.GetAttribute(\"id\");\n        }\n\n        public static string FindClasses(this IWebElement element, params string[] classes)\n        {\n            return classes.Where(c => element.HasClass(c)).Join(\" \");\n        }\n\n        public static string GetData(this ISearchContext context, IWebElement element)\n        {\n            return ElementHandlers.FindHandler(element).GetData(context, element);\n        }\n\n        public static void SetData(this ISearchContext context, IWebElement element, string value)\n        {\n            ElementHandlers.FindHandler(element).EnterData(context, element, value);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Serenity/IAfterNavigation.cs",
    "content": "using OpenQA.Selenium;\n\nnamespace Serenity\n{\n    /// <summary>\n    /// Called immediately after navigating the browser to a new url.\n    /// Useful as a way to deal with login pages in a web application\n    /// </summary>\n    public interface IAfterNavigation\n    {\n        void AfterNavigation(IWebDriver driver, string desiredUrl);\n    }\n}"
  },
  {
    "path": "src/Serenity/IBrowserLifecycle.cs",
    "content": "using System;\nusing OpenQA.Selenium;\n\nnamespace Serenity\n{\n    public interface IBrowserLifecycle : IDisposable\n    {\n        string BrowserName { get; }\n\n        void UseInitializer(IBrowserSessionInitializer initializer);\n\n        IWebDriver Driver { get; }\n        void Recycle();\n        bool HasBeenStarted();\n    }\n}"
  },
  {
    "path": "src/Serenity/IBrowserSessionInitializer.cs",
    "content": "using OpenQA.Selenium;\n\nnamespace Serenity\n{\n    public interface IBrowserSessionInitializer\n    {\n        void InitializeSession(IWebDriver driver);\n    }\n}"
  },
  {
    "path": "src/Serenity/INavigationLogger.cs",
    "content": "using System;\n\nnamespace Serenity\n{\n    public interface INavigationLogger\n    {\n        void Navigating(string url, Action action);\n    }\n}"
  },
  {
    "path": "src/Serenity/IRemoteSubsystems.cs",
    "content": "using System.Collections.Generic;\n\nnamespace Serenity\n{\n    public interface IRemoteSubsystems\n    {\n        RemoteSubSystem RemoteSubSystemFor(string name);\n        IEnumerable<RemoteSubSystem> RemoteSubSystems { get; }\n    }\n}"
  },
  {
    "path": "src/Serenity/ISubSystem.cs",
    "content": "using System.Threading.Tasks;\nusing FubuCore;\n\nnamespace Serenity\n{\n    public interface ISubSystem\n    {\n        Task Start();\n        Task Stop();\n    }\n}"
  },
  {
    "path": "src/Serenity/InternetExplorerBrowser.cs",
    "content": "using OpenQA.Selenium;\nusing OpenQA.Selenium.IE;\n\nnamespace Serenity\n{\n    public class InternetExplorerBrowser : BrowserLifecycle\n    {\n        public const string Process = \"IEXPLORE\";\n\n        public override string BrowserName { get { return \"Internet Explorer\"; } }\n\n        protected override IWebDriver buildDriver()\n        {\n            return new InternetExplorerDriver();\n        }\n\n        protected override void aggressiveCleanup()\n        {\n            Kill.Processes(Process);\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/Kill.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\n\nnamespace Serenity\n{\n    public static class Kill\n    {\n        public static void Processes(params string[] names)\n        {\n            names.Each(process =>\n            {\n                try\n                {\n                    Process.GetProcessesByName(process).Each(x =>\n                    {\n                        Console.WriteLine(\"Trying to kill process \" + x);\n                        x.Kill();\n                    });\n                }\n                catch (Exception e)\n                {\n                    // send it out to Console, but otherwise just kill it\n                    Console.WriteLine(e);\n                }\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/NavigationDriver.cs",
    "content": "using System;\nusing System.Linq.Expressions;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Urls;\nusing OpenQA.Selenium;\nusing StoryTeller;\n\nnamespace Serenity\n{\n    public class NavigationDriver\n    {\n        private readonly IBrowserLifecycle _browserLifecycle;\n        private readonly IUrlRegistry _urls;\n        private readonly IAfterNavigation _afterNavigation = new NulloAfterNavigation();\n        private readonly FubuRuntime _runtime;\n\n        public NavigationDriver(IBrowserLifecycle browserLifecycle, IUrlRegistry urls, IAfterNavigation afterNavigation,\n            FubuRuntime runtime)\n        {\n            _browserLifecycle = browserLifecycle;\n            _urls = urls;\n            _afterNavigation = afterNavigation;\n            _runtime = runtime;\n        }\n\n        internal INavigationLogger Logger = new NulloNavigationLogger();\n\n        public void NavigateTo<TInputModel>() where TInputModel : class\n        {\n            var url = _urls.UrlFor<TInputModel>();\n            NavigateToUrl(url);\n        }\n\n        public void NavigateTo(object target)\n        {\n            var url = _urls.UrlFor(target, \"GET\");\n\n            NavigateToUrl(url);\n        }\n\n        private string correctUrl(string url)\n        {\n            if (Uri.IsWellFormedUriString(url, UriKind.Absolute)) return url;\n\n            if (url.StartsWith(\"~/\"))\n            {\n                url = url.TrimStart('~');\n            }\n\n            return _runtime.BaseAddress.AppendUrl(url);\n        }\n\n        public void NavigateToUrl(string url)\n        {\n            url = correctUrl(url);\n\n            var driver = _browserLifecycle.Driver;\n\n            Logger.Navigating(url, () => driver.Navigate().GoToUrl(url));\n\n            string title = \"\";\n\n            try\n            {\n                title = driver.Title;\n            }\n            catch (Exception)\n            {\n                // don't throw here.\n            }\n            \n\n            if (title == \"Exception!\")\n            {\n                var element = driver.FindElement(By.Id(\"error\"));\n                StoryTellerAssert.Fail(element == null ? driver.PageSource : element.Text);\n            }\n\n\n            _afterNavigation.AfterNavigation(driver, url);\n        }\n\n        public void NavigateTo<T>(Expression<Action<T>> expression)\n        {\n            var url = _urls.UrlFor(expression, \"GET\");\n            NavigateToUrl(url);\n        }\n\n        public string AssetUrlFor(string file)\n        {\n            return _runtime.BaseAddress + (\"/_content/\" + file).Replace(\"//\", \"/\");\n        }\n\n        public string GetCurrentUrl()\n        {\n            return Driver.Url;\n        }\n\n        public void NavigateToHome()\n        {\n            NavigateToUrl(_runtime.BaseAddress);\n        }\n\n        // \n        public IWebDriver Driver\n        {\n            get { return _browserLifecycle.Driver; }\n        }\n\n        public ScreenDriver GetCurrentScreen()\n        {\n            return new ScreenDriver(Driver);\n        }\n\n        public IAfterNavigation AfterNavigation\n        {\n            get { return _afterNavigation; }\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/NulloAfterNavigation.cs",
    "content": "using OpenQA.Selenium;\n\nnamespace Serenity\n{\n    public class NulloAfterNavigation : IAfterNavigation\n    {\n        public void AfterNavigation(IWebDriver driver, string desiredUrl)\n        {\n            // Do nothing!\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/NulloNavigationLogger.cs",
    "content": "using System;\nusing System.Diagnostics;\n\nnamespace Serenity\n{\n    public class NulloNavigationLogger : INavigationLogger\n    {\n        public void Navigating(string url, Action action)\n        {\n            Debug.WriteLine(\"Navigating the browser to \" + url);\n            action();\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/PhantomBrowser.cs",
    "content": "using System;\nusing FubuCore;\nusing OpenQA.Selenium;\nusing OpenQA.Selenium.PhantomJS;\nusing Serenity.WebDriver.EmbeddedDrivers;\nusing StoryTeller;\n\nnamespace Serenity\n{\n    public class PhantomBrowser : EmbeddedBrowserLifecycle<PhantomEmbeddedDriver>\n    {\n        public const string Process = \"phantomjs\";\n        public const string File = \"phantomjs.exe\";\n\n        public override string BrowserName { get { return \"Phantom\"; } }\n\n        protected override IWebDriver constructDriver()\n        {\n            return new PhantomJSDriver(AppDomain.CurrentDomain.BaseDirectory);\n        }\n\n        protected override void aggressiveCleanup()\n        {\n            Kill.Processes(Process, File);\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Serenity\")]\n\n"
  },
  {
    "path": "src/Serenity/RemoteSubSystem.cs",
    "content": "using System;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.Services.Remote;\n\nnamespace Serenity\n{\n    public class RemoteSubSystem : ISubSystem\n    {\n        private readonly Func<RemoteServiceRunner> _source;\n        private RemoteServiceRunner _runner;\n\n        public RemoteSubSystem(Func<RemoteServiceRunner> source)\n        {\n            _source = source;\n        }\n\n        public Task Start()\n        {\n            return Task.Factory.StartNew(() => {\n                _runner = _source();\n                _runner.WaitForMessage<LoaderStarted>();\n            });\n        }\n\n        public Task Stop()\n        {\n            return Task.Factory.StartNew(() => {\n                if (_runner != null) _runner.Dispose();\n            });\n        }\n\n        public RemoteServiceRunner Runner\n        {\n            get\n            {\n                return _runner;\n            }\n        }\n\n        /// <summary>\n        /// Sends a message to a remote SubSystem w/ the \n        /// remote EventAggregator\n        /// </summary>\n        /// <typeparam name=\"T\"></typeparam>\n        /// <param name=\"message\"></param>\n        public void SendMessage<T>(T message)\n        {\n            _runner.SendRemotely(message);\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/RequestReporter.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Diagnostics;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.Diagnostics.Runtime;\nusing FubuMVC.Core.Registration.Nodes;\nusing HtmlTags;\nusing StoryTeller.Results;\n\nnamespace Serenity\n{\n    public class RequestReporter : Report\n    {\n        private readonly FubuRuntime _runtime;\n        private readonly List<ChainExecutionLog> _logs = new List<ChainExecutionLog>();\n\n        public RequestReporter(FubuRuntime runtime)\n        {\n            _runtime = runtime;\n        }\n\n        public string ShortTitle\n        {\n            get { return \"FubuMVC\"; }\n        }\n\n        public int Count\n        {\n            get { return _logs.Count; }\n        }\n\n\n        public string ToHtml()\n        {\n            var table = new TableTag();\n            table.AddClass(\"table\");\n            table.AddClass(\"table-striped\");\n            table.AddHeaderRow(row =>\n            {\n                row.Header(\"Details\");\n                row.Header(\"Duration (ms)\");\n                row.Header(\"Method\");\n                row.Header(\"Endpoint\");\n                row.Header(\"Status\");\n                row.Header(\"Content Type\");\n            });\n\n            _logs.Each(log =>\n            {\n                var url = _runtime.BaseAddress.TrimEnd('/') + \"/_fubu/#/fubumvc/request-details/\" + log.Id;\n\n                table.AddBodyRow(row =>\n                {\n                    row.Cell().Add(\"a\").Text(\"Details\").Attr(\"href\", url).Attr(\"target\", \"_blank\");\n                    row.Cell(log.ExecutionTime.ToString()).Attr(\"align\", \"right\");\n\n                    var summary = new HttpRequestSummary(log);\n                    row.Cell(summary.method);\n                    row.Cell(log.Title());\n                    row.Cell(summary.status.ToString());\n                    row.Cell(summary.contentType);\n                });\n            });\n\n\n            return table.ToString();\n        }\n\n        public string Title\n        {\n            get { return \"HTTP Requests During the Specification Execution\"; }\n        }\n\n        public void Append(ChainExecutionLog[] requests)\n        {\n            _logs.AddRange(requests.Where(x => x.RootChain is RoutedChain));\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/Retry.cs",
    "content": "using System;\nusing System.Threading;\n\nnamespace Serenity\n{\n    public static class Retry\n    {\n        public static T Twice<T>(Func<T> func)\n        {\n            try\n            {\n                return func();\n            }\n            catch (Exception)\n            {\n                Thread.Sleep(100);\n                return func();\n            }\n        }\n\n        public static void Twice(Action action)\n        {\n            try\n            {\n                action();\n            }\n            catch (Exception)\n            {\n                Thread.Sleep(100);\n                action();\n            }\n        }\n\n        public static T FiveTimes<T>(Func<T> func)\n        {\n            var count = 0;\n            while (count < 5)\n            {\n                try\n                {\n                    return func();\n                }\n                catch (Exception)\n                {\n                    if (count >= 4)\n                    {\n                        throw;\n                    }\n\n                    count++;\n                    Thread.Sleep(100);\n                }\n            }\n\n            throw new InvalidOperationException(\"Just did not work\");\n        }\n\n        public static void FiveTimes(Action action)\n        {\n            var count = 0;\n            while (count < 5)\n            {\n                try\n                {\n                    action();\n                }\n                catch (Exception)\n                {\n                    if (count >= 4)\n                    {\n                        throw;\n                    }\n\n                    count++;\n                    Thread.Sleep(100);\n                }\n            }\n\n            throw new InvalidOperationException(\"Just did not work\");\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/ScreenDriver.cs",
    "content": "using System;\nusing System.Linq;\nusing OpenQA.Selenium;\n\nnamespace Serenity\n{\n    public class ScreenDriver\n    {\n        private readonly IWebDriver _browser;\n        private readonly Lazy<IWebElement> _head;\n\n        public ScreenDriver(IWebDriver browser)\n        {\n            _browser = browser;\n            _head = new Lazy<IWebElement>(() => _browser.FindElement(By.TagName(\"head\")));\n        }\n\n        private IWebElement head\n        {\n            get { return _head.Value; }\n        }\n\n        private IWebElement elementFor(string name)\n        {\n            return _browser.FindElement(By.Id(name)) ?? _browser.FindElement(By.Name(name));\n        }\n\n        public AssetTagsState GetAssetDeclarationsFromTheHead()\n        {\n            return new AssetTagsState\n            {\n                Scripts = head.FindElements(By.TagName(\"script\")).ToList(),\n                Styles = head.FindElements(By.TagName(\"link\")).Where(x => x.IsCssLink()).ToList()\n            };\n        }\n\n        public AssetTagsState GetAssetDeclarations()\n        {\n            return new AssetTagsState\n            {\n                Scripts = _browser.FindElements(By.TagName(\"script\")).ToList(),\n                Styles = _browser.FindElements(By.TagName(\"link\")).Where(x => x.IsCssLink()).ToList()\n            };\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/Serenity.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{900A0419-3579-4DAE-85BE-71A3E4B34239}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Serenity</RootNamespace>\n    <AssemblyName>Serenity</AssemblyName>\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Web.Extensions\" />\n    <Reference Include=\"System.Web.Routing\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\CommonAssemblyInfo.cs\">\n      <Link>CommonAssemblyInfo.cs</Link>\n    </Compile>\n    <Compile Include=\"AssetTagsState.cs\" />\n    <Compile Include=\"BrowserFactory.cs\" />\n    <Compile Include=\"BrowserLifecycle.cs\" />\n    <Compile Include=\"BrowserType.cs\" />\n    <Compile Include=\"ChromeBrowser.cs\" />\n    <Compile Include=\"ContextualNavigationLogger.cs\" />\n    <Compile Include=\"FirefoxBrowser.cs\" />\n    <Compile Include=\"Fixtures\\Grammars\\CheckValueGrammar.cs\" />\n    <Compile Include=\"Fixtures\\Grammars\\ClickGrammar.cs\" />\n    <Compile Include=\"Fixtures\\Grammars\\EnterValueGrammar.cs\" />\n    <Compile Include=\"Fixtures\\Grammars\\GestureConfig.cs\" />\n    <Compile Include=\"Fixtures\\Grammars\\SimpleElementGesture.cs\" />\n    <Compile Include=\"Fixtures\\Handlers\\BasicMatchingHandler.cs\" />\n    <Compile Include=\"Fixtures\\Handlers\\CheckboxHandler.cs\" />\n    <Compile Include=\"Fixtures\\Handlers\\DefaultElementHandler.cs\" />\n    <Compile Include=\"Fixtures\\Handlers\\ElementHandlers.cs\" />\n    <Compile Include=\"Fixtures\\Handlers\\ElementHandlerWrapper.cs\" />\n    <Compile Include=\"Fixtures\\Handlers\\IElementHandler.cs\" />\n    <Compile Include=\"Fixtures\\Handlers\\IMatchingHandler.cs\" />\n    <Compile Include=\"Fixtures\\Handlers\\SelectElementHandler.cs\" />\n    <Compile Include=\"Fixtures\\Handlers\\TextAreaElementHandler.cs\" />\n    <Compile Include=\"Fixtures\\Handlers\\TextboxElementHandler.cs\" />\n    <Compile Include=\"Fixtures\\ScreenFixture.cs\" />\n    <Compile Include=\"Fixtures\\SerenityFixture.cs\" />\n    <Compile Include=\"Fixtures\\WebDriverExtensions.cs\" />\n    <Compile Include=\"IAfterNavigation.cs\" />\n    <Compile Include=\"INavigationLogger.cs\" />\n    <Compile Include=\"IRemoteSubsystems.cs\" />\n    <Compile Include=\"NulloAfterNavigation.cs\" />\n    <Compile Include=\"NulloNavigationLogger.cs\" />\n    <Compile Include=\"RequestReporter.cs\" />\n    <Compile Include=\"ScreenDriver.cs\" />\n    <Compile Include=\"SerenitySystem.cs\" />\n    <Compile Include=\"SerenitySystem.Context.cs\" />\n    <Compile Include=\"ServiceBus\\ExternalNode.cs\" />\n    <Compile Include=\"ServiceBus\\ExternalNodeFixture.cs\" />\n    <Compile Include=\"ServiceBus\\FubuTransportFixture.cs\" />\n    <Compile Include=\"ServiceBus\\MessageContextualInfoProvider.cs\" />\n    <Compile Include=\"ServiceBus\\MessageRecorder.cs\" />\n    <Compile Include=\"ServiceBus\\TestNodes.cs\" />\n    <Compile Include=\"UrlExtensions.cs\" />\n    <Compile Include=\"WebDriver\\EmbeddedDrivers\\ChromeEmbeddedDriver.cs\" />\n    <Compile Include=\"WebDriver\\EmbeddedDrivers\\EmbeddedBrowserLifecycle.cs\" />\n    <Compile Include=\"WebDriver\\EmbeddedDrivers\\EmbeddedDriverExtractor.cs\" />\n    <Compile Include=\"WebDriver\\EmbeddedDrivers\\IEmbeddedDriver.cs\" />\n    <Compile Include=\"WebDriver\\EmbeddedDrivers\\IEmbeddedDriverExtractor.cs\" />\n    <Compile Include=\"WebDriver\\EmbeddedDrivers\\PhantomEmbeddedDriver.cs\" />\n    <Compile Include=\"WebDriver\\JavaScriptBuilders\\DefaultJavaScriptBuilder.cs\" />\n    <Compile Include=\"WebDriver\\JavaScriptBuilders\\IJavaScriptBuilder.cs\" />\n    <Compile Include=\"WebDriver\\ISearchContextToJavaScriptExecutor.cs\" />\n    <Compile Include=\"WebDriver\\JavaScript.cs\" />\n    <Compile Include=\"WebDriver\\By.cs\" />\n    <Compile Include=\"WebDriver\\JavaScriptBuilders\\WebElementJavaScriptBuilder.cs\" />\n    <Compile Include=\"WebDriver\\JavaScriptBy.cs\" />\n    <Compile Include=\"WebDriver\\JavaScriptExtensionMethods.cs\" />\n    <Compile Include=\"WebDriver\\JavaScriptStringExtensions.cs\" />\n    <Compile Include=\"WebDriver\\JQuery.cs\" />\n    <Compile Include=\"WebDriver\\JavaScriptBuilders\\NullObjectJavaScriptBuilder.cs\" />\n    <Compile Include=\"WebDriver\\SearchContextToJavaScriptExecutor.cs\" />\n    <Compile Include=\"IBrowserLifecycle.cs\" />\n    <Compile Include=\"IBrowserSessionInitializer.cs\" />\n    <Compile Include=\"InternetExplorerBrowser.cs\" />\n    <Compile Include=\"ISubSystem.cs\" />\n    <Compile Include=\"Kill.cs\" />\n    <Compile Include=\"NavigationDriver.cs\" />\n    <Compile Include=\"PhantomBrowser.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"RemoteSubSystem.cs\" />\n    <Compile Include=\"Retry.cs\" />\n    <Compile Include=\"Wait.cs\" />\n    <Compile Include=\"WebDriver\\JavaScriptBuilders\\StringJavaScriptBuilder.cs\" />\n    <Compile Include=\"WebElementExtensions.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"..\\..\\lib\\chromedriver.exe\">\n      <Link>WebDriver\\EmbeddedDrivers\\chromedriver.exe</Link>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"..\\..\\lib\\phantomjs.exe\">\n      <Link>WebDriver\\EmbeddedDrivers\\phantomjs.exe</Link>\n    </EmbeddedResource>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Dynamic.Runtime;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Runtime.Serialization.Primitives;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"errorCollector.js\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"SerenitySystem.Remotes.cs\" />\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Castle.Core\">\n          <HintPath>..\\..\\packages\\Castle.Core\\lib\\net35\\Castle.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"Castle.Core\">\n          <HintPath>..\\..\\packages\\Castle.Core\\lib\\net40-client\\Castle.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Castle.Core\">\n          <HintPath>..\\..\\packages\\Castle.Core\\lib\\net45\\Castle.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"Castle.Core\">\n          <HintPath>..\\..\\packages\\Castle.Core\\lib\\sl4\\Castle.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0'\">\n      <ItemGroup>\n        <Reference Include=\"Castle.Core\">\n          <HintPath>..\\..\\packages\\Castle.Core\\lib\\sl5\\Castle.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"HtmlTags\">\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Primitives\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net20\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net35\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net40\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\netstandard1.0\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0') Or ($(TargetFrameworkProfile) == 'Profile5') Or ($(TargetFrameworkProfile) == 'Profile6') Or ($(TargetFrameworkProfile) == 'Profile14') Or ($(TargetFrameworkProfile) == 'Profile19') Or ($(TargetFrameworkProfile) == 'Profile24') Or ($(TargetFrameworkProfile) == 'Profile37') Or ($(TargetFrameworkProfile) == 'Profile42') Or ($(TargetFrameworkProfile) == 'Profile47') Or ($(TargetFrameworkProfile) == 'Profile92') Or ($(TargetFrameworkProfile) == 'Profile102') Or ($(TargetFrameworkProfile) == 'Profile136') Or ($(TargetFrameworkProfile) == 'Profile147') Or ($(TargetFrameworkProfile) == 'Profile158') Or ($(TargetFrameworkProfile) == 'Profile225') Or ($(TargetFrameworkProfile) == 'Profile240') Or ($(TargetFrameworkProfile) == 'Profile255') Or ($(TargetFrameworkProfile) == 'Profile328') Or ($(TargetFrameworkProfile) == 'Profile336') Or ($(TargetFrameworkProfile) == 'Profile344')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net40+sl5+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'MonoAndroid') Or ($(TargetFrameworkIdentifier) == 'MonoTouch') Or ($(TargetFrameworkIdentifier) == 'Xamarin.iOS') Or ($(TargetFrameworkIdentifier) == 'Xamarin.Mac') Or ($(TargetFrameworkProfile) == 'Profile7') Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile32') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile78') Or ($(TargetFrameworkProfile) == 'Profile111') Or ($(TargetFrameworkProfile) == 'Profile151') Or ($(TargetFrameworkProfile) == 'Profile157') Or ($(TargetFrameworkProfile) == 'Profile259')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Owin\">\n          <HintPath>..\\..\\packages\\Owin\\lib\\net40\\Owin.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"ThoughtWorks.Selenium.Core\">\n          <HintPath>..\\..\\packages\\Selenium.RC\\lib\\net35\\ThoughtWorks.Selenium.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"ThoughtWorks.Selenium.Core\">\n          <HintPath>..\\..\\packages\\Selenium.RC\\lib\\net40\\ThoughtWorks.Selenium.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"WebDriver.Support\">\n          <HintPath>..\\..\\packages\\Selenium.Support\\lib\\net35\\WebDriver.Support.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"WebDriver.Support\">\n          <HintPath>..\\..\\packages\\Selenium.Support\\lib\\net40\\WebDriver.Support.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"WebDriver\">\n          <HintPath>..\\..\\packages\\Selenium.WebDriver\\lib\\net35\\WebDriver.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"WebDriver\">\n          <HintPath>..\\..\\packages\\Selenium.WebDriver\\lib\\net40\\WebDriver.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Selenium.WebDriverBackedSelenium\">\n          <HintPath>..\\..\\packages\\Selenium.WebDriverBackedSelenium\\lib\\net35\\Selenium.WebDriverBackedSelenium.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Selenium.WebDriverBackedSelenium\">\n          <HintPath>..\\..\\packages\\Selenium.WebDriverBackedSelenium\\lib\\net40\\Selenium.WebDriverBackedSelenium.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StoryTeller\">\n          <HintPath>..\\..\\packages\\Storyteller\\lib\\net45\\StoryTeller.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.AppContext\">\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Buffers\">\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Console\">\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tools\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.0\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.3\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Calendars\">\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Extensions\">\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression\">\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression.ZipFile\">\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http\">\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Primitives\">\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Extensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Primitives\">\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Resources.ResourceManager\">\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Handles\">\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Loader\">\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Numerics\">\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.0\\System.Runtime.Serialization.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.3\\System.Runtime.Serialization.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Cng\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Csp\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Timer\">\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/Serenity/SerenitySystem.Context.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuMVC.Core.Diagnostics.Instrumentation;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Diagnostics;\nusing Serenity.ServiceBus;\nusing StoryTeller;\nusing StoryTeller.Engine;\n\nnamespace Serenity\n{\n    public partial class SerenitySystem<T>\n    {\n        public class SerenityContext : IExecutionContext\n        {\n            private readonly string _sessionTag = Guid.NewGuid().ToString();\n            private readonly SerenitySystem<T> _parent;\n\n            public SerenityContext(SerenitySystem<T> parent)\n            {\n                _parent = parent;\n            }\n\n            void IDisposable.Dispose()\n            {\n            }\n\n            public void BeforeExecution(ISpecContext context)\n            {\n                GetService<IChainExecutionHistory>().CurrentSessionTag = _sessionTag;\n            }\n\n            public void AfterExecution(ISpecContext context)\n            {\n                var reporter = new RequestReporter(_parent._runtime);\n                var requestLogs =\n                    GetService<IChainExecutionHistory>()\n                        .RecentReports()\n                        .Where(x => x.SessionTag == _sessionTag)\n                        .ToArray();\n\n                reporter.Append(requestLogs);\n\n                context.Reporting.Log(reporter);\n\n                if (_parent._runtime.Get<TransportSettings>().Enabled)\n                {\n                    var session = GetService<IMessagingSession>();\n                    context.Reporting.Log(new MessageContextualInfoProvider(session));\n\n                }\n\n\n                _parent.afterEach(_parent._factory.Container, context);\n\n                _parent._factory.TeardownScope();\n            }\n\n            public TService GetService<TService>()\n            {\n                return _parent._runtime.Get<TService>();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/SerenitySystem.Remotes.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuCore.Util;\nusing FubuMVC.Core.Services.Remote;\n\nnamespace Serenity\n{\n    public partial class SerenitySystem<T>\n    {\n        private readonly IList<ISubSystem> _subSystems = new List<ISubSystem>();\n        private readonly Cache<string, RemoteSubSystem> _remoteSubSystems = new Cache<string, RemoteSubSystem>();\n\n        public RemoteSubSystem RemoteSubSystemFor(string name)\n        {\n            return _remoteSubSystems[name];\n        }\n\n        public IEnumerable<RemoteSubSystem> RemoteSubSystems\n        {\n            get { return _remoteSubSystems; }\n        }\n\n        public void AddRemoteSubSystem(string name, Action<RemoteDomainExpression> configuration)\n        {\n\n            var system = new RemoteSubSystem(() => new RemoteServiceRunner(x =>\n            {\n                x.Properties[\"Mode\"] = \"testing\";\n                configuration(x);\n            }));\n\n            _remoteSubSystems[name] = system;\n\n            _subSystems.Add(system);\n        }\n\n        public void AddSubSystem<TSubsystem>() where TSubsystem : ISubSystem, new()\n        {\n            AddSubSystem(new TSubsystem());\n        }\n\n        public void AddSubSystem(ISubSystem subSystem)\n        {\n            _subSystems.Add(subSystem);\n        }\n\n    }\n}"
  },
  {
    "path": "src/Serenity/SerenitySystem.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.CommandLine;\nusing FubuCore.Dates;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Http.Owin;\nusing FubuMVC.Core.Http.Owin.Middleware;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Security.Authorization;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.TestSupport;\nusing FubuMVC.Core.Services.Messaging;\nusing FubuMVC.Core.StructureMap;\nusing HtmlTags;\nusing OpenQA.Selenium;\nusing Serenity.ServiceBus;\nusing StoryTeller;\nusing StoryTeller.Conversion;\nusing StoryTeller.Engine;\nusing StoryTeller.Equivalence;\nusing StructureMap;\nusing MessageHistory = FubuMVC.Core.Services.Messaging.Tracking.MessageHistory;\n\nnamespace Serenity\n{\n    /* TODO\n     * \n     * 1.) Subsystems for remote work, add to FubuRegistry\n\n     * 14.) Look closely at TestNodes\n     */\n\n    public class SerenitySystem : SerenitySystem<FubuRegistry>\n    {\n    }\n\n    public partial class SerenitySystem<T> : ISystem, ISubSystem, IRemoteSubsystems where T : FubuRegistry, new()\n    {\n        public readonly CellHandling CellHandling = new CellHandling(new EquivalenceChecker(), new Conversions());\n        public readonly T Registry;\n        private FubuRuntime _runtime;\n        private Task _warmup;\n        private StructureMapServiceFactory _factory;\n\n        public SerenitySystem(T registry)\n        {\n            Registry = registry;\n\n            Registry.Services.ReplaceService<ISystemTime, SystemTime>().Singleton();\n            Registry.Services.ReplaceService<IClock, Clock>().Singleton();\n            Registry.Features.Diagnostics.Enable(TraceLevel.Verbose);\n            Registry.Services.ForSingletonOf<SecuritySettings>();\n            Registry.Services.For<IAfterNavigation>().Use<NulloAfterNavigation>();\n            Registry.Services.ForSingletonOf<IBrowserLifecycle>().Use(\"Browser Lifecycle\", () =>\n            {\n                var browserType = BrowserFactory.DetermineBrowserType(DefaultBrowser);\n                return BrowserFactory.GetBrowserLifecyle(browserType);\n            });\n\n            Registry.Services.For<IWebDriver>().Use(c => c.GetInstance<IBrowserLifecycle>().Driver);\n\n            injectJavascriptErrorDetection();\n\n            Registry.Mode = \"testing\";\n\n            _subSystems.Add(this);\n        }\n\n        public SerenitySystem() : this(new T())\n        {\n            \n\n\n        }\n\n\n        private bool _isDisposed;\n\n\n        ~SerenitySystem()\n        {\n            if (_isDisposed) return;\n\n            this.SafeDispose();\n        }\n\n\n        private void injectJavascriptErrorDetection()\n        {\n            var js =\n                Assembly.GetExecutingAssembly()\n                    .GetManifestResourceStream(typeof (SerenitySystem), \"errorCollector.js\")\n                    .ReadAllText();\n            var text =\n                new HtmlTag(\"script\").Attr(\"type\", \"text/javascript\")\n                    .Text(\"\\n\\n\" + js + \"\\n\\n\")\n                    .Encoded(false)\n                    .ToString();\n            Registry.AlterSettings<OwinSettings>(owin =>\n            {\n                owin.AddMiddleware<HtmlHeadInjectionMiddleware>().Arguments.Set(new InjectionOptions\n                {\n                    Content = c => text\n                });\n            });\n        }\n\n        public BrowserType? DefaultBrowser { get; set; }\n\n        /// <summary>\n        /// Register a policy about what to do after navigating the browser to handle issues\n        /// like being redirected to a login screen\n        /// </summary>\n        public void AfterNavigation<TNavigation>() where TNavigation : IAfterNavigation\n        {\n            Registry.Services.ReplaceService<IAfterNavigation, TNavigation>();\n        }\n\n        public void AfterNavigation(IAfterNavigation navigation)\n        {\n            Registry.Services.ReplaceService(navigation);\n        }\n\n        public FubuRuntime Runtime\n        {\n            get\n            {\n                if (_runtime == null)\n                {\n                    throw new InvalidOperationException(\n                        \"This property is not available until Storyteller either \\\"warms up\\\" the system or until the first specification is executed\");\n                }\n\n                return _runtime;\n            }\n        }\n\n\n        protected virtual void beforeAll()\n        {\n            // Nothing\n        }\n\n        protected virtual void afterEach(IContainer scope, ISpecContext context)\n        {\n            // nothing\n        }\n\n        protected virtual void beforeEach(IContainer scope)\n        {\n            // nothing\n        }\n\n        protected virtual void afterAll()\n        {\n            // nothing\n        }\n\n        void IDisposable.Dispose()\n        {\n            if (_runtime != null)\n            {\n                afterAll();\n                GlobalMessageTracking.Stop();\n                stopAll();\n                _isDisposed = true;\n            }\n        }\n\n        protected virtual void stopAll()\n        {\n            var succeeded = Task.WaitAll(_subSystems.Select(x => x.Stop()).ToArray(), TimeSpan.FromMinutes(1));\n\n            if (!succeeded)\n            {\n                // TODO: Replace with a logger\n                ConsoleWriter.Write(ConsoleColor.Yellow,\n                    \"WARNING: Failed to stop SerenitySystem and/or registered subsystems\");\n            }\n        }\n\n\n        CellHandling ISystem.Start()\n        {\n            return CellHandling;\n        }\n\n        Task ISubSystem.Stop()\n        {\n            return Task.Factory.StartNew(() =>\n            {\n                if (_runtime != null)\n                {\n                    _runtime.SafeDispose();\n                    _runtime = null;\n                }\n            });\n        }\n\n\n        IExecutionContext ISystem.CreateContext()\n        {\n            if (_warmup != null)\n            {\n                _warmup.Wait();\n            }\n            else if (_runtime == null)\n            {\n                startAll();\n            }\n\n            if (_runtime.Get<TransportSettings>().Enabled)\n            {\n                _factory.Get<TransportCleanup>().ClearAll();\n                RemoteSubSystems.Each(x => x.Runner.SendRemotely(new ClearAllTransports()));\n                var messaging = _factory.Get<IMessagingSession>();\n                messaging.ClearAll();\n                RemoteSubSystems.Each(sys => sys.Runner.Messaging.AddListener(messaging));\n            }\n\n\n            Runtime.Get<IClock>().As<Clock>().Live();\n            _factory.Get<SecuritySettings>().Reset();\n            _factory.StartNewScope();\n\n\n\n\n            TestNodes.Reset();\n\n            beforeEach(_factory.Container);\n\n            return new SerenityContext(this);\n        }\n\n        private void startAll()\n        {\n            Task.WaitAll(_subSystems.Select(x => x.Start()).ToArray());\n\n\n            MessageHistory.ConnectRemoteListeners(_remoteSubSystems.Select(x => x.Runner).ToArray());\n\n            beforeAll();\n        }\n\n\n        Task ISystem.Warmup()\n        {\n            _warmup = Task.Factory.StartNew(startAll);\n            return _warmup;\n        }\n\n\n        Task ISubSystem.Start()\n        {\n            return Task.Factory.StartNew(() =>\n            {\n                _runtime = new FubuRuntime(Registry);\n                _factory = _runtime.Get<IServiceFactory>().As<StructureMapServiceFactory>();\n                _factory.Get<SecuritySettings>().Reset(); // force it to be created from the parent\n\n                if (_runtime.Get<TransportSettings>().Enabled)\n                {\n                    var messaging = _runtime.Get<IMessagingSession>();\n                    GlobalMessageTracking.Messaging.AddListener(messaging);\n                }\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/ServiceBus/ExternalNode.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Events;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing StructureMap;\n\nnamespace Serenity.ServiceBus\n{\n    public class ExternalNode : IDisposable\n    {\n        private readonly string _name;\n        private readonly ChannelGraph _systemUnderTest;\n        private readonly Type _registryType;\n        private bool _isStarted;\n        private IMessagingSession _messageListener;\n        private IMessageRecorder _recorder;\n\n        public ExternalNode(string name, Type registryType, ChannelGraph systemUnderTest)\n        {\n            _registryType = registryType;\n            _name = name;\n            _systemUnderTest = systemUnderTest;\n\n            if (!IsValidRegistryType(_registryType))\n            {\n                throw new ArgumentException(\"Registry type must extend FubuTransportRegistry\", \"registryType\");\n            }\n        }\n\n        private bool IsValidRegistryType(Type type)\n        {\n            return type.IsConcreteTypeOf<FubuRegistry>();\n        }\n\n        public FubuRuntime Runtime { get; private set; }\n        public Uri Uri { get; private set; }\n\n        public void ClearReceivedMessages()\n        {\n            _recorder.Clear();\n        }\n\n        public void Dispose()\n        {\n            _isStarted = false;\n            if (Runtime != null)\n            {\n                FubuMVC.Core.Services.Messaging.GlobalMessageTracking.Messaging.RemoveListener(_messageListener);\n                Runtime.Dispose();\n                Runtime = null;\n            }\n        }\n\n        public bool ReceivedMessage<T>(Func<T, bool> predicate = null)\n        {\n            return _recorder.ReceivedMessages\n                .Any(x => x.GetType().CanBeCastTo<T>()\n                          && (predicate == null || predicate(x.As<T>())));\n        }\n\n        public IEnumerable<T> ReceivedMessages<T>()\n        {\n            return _recorder.ReceivedMessages\n                .OfType<T>();\n        }\n\n        /// <summary>\n        /// Sends a message from this node to the system under test.\n        /// </summary>\n        public void Send<T>(T message)\n        {\n            var channelNode = _systemUnderTest.FirstOrDefault(x => x.Publishes(typeof(T)));\n            if (channelNode == null)\n                throw new ArgumentException(\"Cannot find destination channel for message type {0}. Have you configured the channel with AcceptsMessage()?\".ToFormat(typeof(T)), \"message\");\n\n            Uri destination = channelNode.Uri;\n            var bus = Runtime.Get<IServiceBus>();\n            bus.Send(destination, message);\n        }\n\n        /// <summary>\n        /// Simulate a response from this endpoint to the last received request of type TRequest.\n        /// An example can be found in FubuTransportation.Serenity.Samples.\n        /// </summary>\n        /// <param name=\"message\">The response message.</param>\n        public void RespondToRequestWithMessage<TRequest>(object message)\n        {\n            var request = _recorder.ReceivedEnvelopes\n                .LastOrDefault(x => x.Message is TRequest);\n            if (request == null)\n            {\n                throw new InvalidOperationException(\"This node hasn't received a message of type {0}\".ToFormat(typeof(TRequest)));\n            }\n\n            SendResponseMessage(message, request);\n        }\n\n        /// <summary>\n        /// Simulate a response to a received request from this endpoint.\n        /// </summary>\n        /// <param name=\"requestSelector\">Given the envelopes received by this endpoint, selects the envelope the response is for.</param>\n        /// <param name=\"message\">The response message.</param>\n        public void RespondToRequestWithMessage(\n            Func<IEnumerable<EnvelopeToken>, EnvelopeToken> requestSelector,\n            object message)\n        {\n            var request = requestSelector(_recorder.ReceivedEnvelopes);\n            SendResponseMessage(message, request);\n        }\n\n        private void SendResponseMessage(object message, EnvelopeToken request)\n        {\n            var sender = Runtime.Get<IEnvelopeSender>();\n            var response = new Envelope\n            {\n                Message = message,\n                Destination = request.ReplyUri,\n                OriginalId = request.OriginalId ?? request.CorrelationId,\n                ParentId = request.CorrelationId,\n                ResponseId = request.CorrelationId\n            };\n            sender.Send(response);\n        }\n\n        public void Start()\n        {\n            if (_isStarted)\n                return;\n            _isStarted = true;\n\n            var registry = Activator.CreateInstance(_registryType).As<FubuRegistry>();\n            registry.NodeName = _name;\n            registry.ServiceBus.EnableInMemoryTransport();\n            registry.Services.ReplaceService<IEnvelopeHandler, ExternalNodeEnvelopeHandler>();\n            TestNodes.Alterations.Each(x => x(registry));\n\n\n            var container = new Container(x =>\n            {\n                x.ForSingletonOf<IMessageRecorder>().Use<MessageRecorder>();\n                x.Forward<IMessageRecorder, IListener>();\n            });\n\n            registry.StructureMap(container);\n\n            Runtime = registry.ToRuntime();\n            Uri = Runtime.Get<ChannelGraph>().ReplyUriList().First();\n            _recorder = Runtime.Get<IMessageRecorder>();\n\n            // Wireup the messaging session so the MessageHistory gets notified of messages on this node\n            _messageListener = Runtime.Get<IMessagingSession>();\n            FubuMVC.Core.Services.Messaging.GlobalMessageTracking.Messaging.AddListener(_messageListener);\n        }\n    }\n\n    // Prevents our fake node from returning FailureAcknowledgements because we don't \n    // have actual message handlers on this end.\n    public class ExternalNodeEnvelopeHandler : SimpleEnvelopeHandler\n    {\n        public override bool Matches(Envelope envelope)\n        {\n            return true;\n        }\n\n        public override void Execute(Envelope envelope, IEnvelopeContext context)\n        {\n            envelope.Callback.MarkSuccessful();\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/ServiceBus/ExternalNodeFixture.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing StoryTeller;\n\nnamespace Serenity.ServiceBus\n{\n    public abstract class ExternalNodeFixture : Fixture\n    {\n        protected ExternalNode AddTestNode<T>(string name) where T : FubuRegistry\n        {\n            var graph = Context.Service<ChannelGraph>();\n            var node = new ExternalNode(name, typeof(T), graph);\n            node = TestNodes.AddNode(name, node);\n            return node;\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/ServiceBus/FubuTransportFixture.cs",
    "content": "﻿using System.Linq;\nusing FubuMVC.Core.Services.Messaging.Tracking;\nusing StoryTeller;\n\nnamespace Serenity.ServiceBus\n{\n    public abstract class FubuTransportActFixture : Fixture\n    {\n        public int TimeoutInMilliseconds = 3000;\n\n        public sealed override void SetUp()\n        {\n            startListening();\n            setup();\n        }\n\n        protected static void startListening()\n        {\n            MessageHistory.ClearHistory();\n        }\n\n        protected virtual void setup()\n        {\n            \n        }\n\n        public sealed override void TearDown()\n        {\n            teardown();\n            waitForTheMessageProcessingToFinish();\n        }\n\n        protected void waitForTheMessageProcessingToFinish()\n        {\n            Wait.Until(() => !MessageHistory.Outstanding().Any() && MessageHistory.All().Any(),\n                timeoutInMilliseconds: TimeoutInMilliseconds);\n        }\n\n        protected virtual void teardown()\n        {\n            \n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/ServiceBus/MessageContextualInfoProvider.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus.Diagnostics;\nusing HtmlTags;\nusing StoryTeller.Results;\n\nnamespace Serenity.ServiceBus\n{\n    public class MessageContextualInfoProvider : Report\n    {\n        private readonly IMessagingSession _session;\n\n        public MessageContextualInfoProvider(IMessagingSession session)\n        {\n            _session = session;\n\n            Title = \"Messaging Log\";\n            ShortTitle = \"ServiceBus\";\n        }\n\n\n        public string ToHtml()\n        {\n            return GenerateReports().ToTagList().ToString();\n        }\n\n        public string Title { get; set; }\n\n        public string ShortTitle { get; set; }\n\n        public int Count\n        {\n            get { return _session.TopLevelMessages().Count(); }\n        }\n\n        public IEnumerable<HtmlTag> GenerateReports()\n        {\n            yield return new HtmlTag(\"h3\").Text(\"Message History\");\n\n            yield return new HtmlTag(\"ol\", x =>\n            {\n                foreach (MessageLog topLevelMessage in _session.TopLevelMessages().ToList())\n                {\n                    x.Append(topLevelMessage.ToLeafTag());\n                }\n            });\n\n            foreach (MessageLog history in _session.AllMessages().ToList())\n            {\n                yield return new MessageHistoryTableTag(history);\n            }\n        }\n    }\n\n}"
  },
  {
    "path": "src/Serenity/ServiceBus/MessageRecorder.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Events;\nusing FubuMVC.Core.ServiceBus.Logging;\nusing FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.Services.Messaging.Tracking;\n\nnamespace Serenity.ServiceBus\n{\n    public interface IMessageRecorder\n    {\n        IEnumerable<EnvelopeToken> ReceivedEnvelopes { get; }\n        IEnumerable<object> ReceivedMessages { get; }\n        void Clear();\n    }\n\n    public class MessageRecorder : IMessageRecorder, IListener, IListener<EnvelopeReceived>\n    {\n        private readonly IList<EnvelopeToken> _receivedEnvelopes = new List<EnvelopeToken>();\n\n        public void Handle(EnvelopeReceived message)\n        {\n            EnvelopeToken envelope = message.Envelope;\n            _receivedEnvelopes.Add(envelope);\n\n            // Acknowledge that the message was received so it doesn't \n            // get stuck as Outstanding in the MessageHistory\n            // Sometimes this happens in the wrong order so we need to \n            // wait for it to be in the pending list first.\n            FubuMVC.Core.Services.Wait.Until(() => MessageHistory.Outstanding().Any(x => x.Id == envelope.CorrelationId),\n                millisecondPolling: 50, \n                timeoutInMilliseconds: 1000);\n            var track = new MessageTrack\n            {\n                FullName = \"{0}@{1}\".ToFormat(envelope.CorrelationId, envelope.Destination),\n                Id = envelope.CorrelationId,\n                Status = MessageTrack.Received,\n                Type = \"OutstandingEnvelope\"\n            };\n            FubuMVC.Core.Services.Messaging.GlobalMessageTracking.SendMessage(track);\n        }\n\n        public IEnumerable<EnvelopeToken> ReceivedEnvelopes\n        {\n            get { return _receivedEnvelopes; }\n        }\n\n        public IEnumerable<object> ReceivedMessages\n        {\n            get { return _receivedEnvelopes.Select(x => x.Message); }\n        }\n\n        public void Clear()\n        {\n            _receivedEnvelopes.Clear();\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/ServiceBus/TestNodes.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace Serenity.ServiceBus\n{\n    public static class TestNodes\n    {\n        internal static readonly IList<Action<FubuRegistry>> Alterations = new List<Action<FubuRegistry>>(); \n        private static readonly IDictionary<string, ExternalNode> Nodes = new Dictionary<string, ExternalNode>();\n\n        public static string[] Registries\n        {\n            get\n            {\n                return Assembly.GetExecutingAssembly()\n                    .ExportedTypes.Where(x => x.IsConcreteTypeOf<FubuRegistry>())\n                    .Select(x => x.Name)\n                    .ToArray();\n            }\n        }\n\n        public static ExternalNode AddNode(string name, ExternalNode node)\n        {\n            ExternalNode actualNode;\n            if (Nodes.TryGetValue(name, out actualNode))\n                return actualNode;\n\n            node.Start();\n            Nodes[name] = node;\n            return node;\n        }\n\n        public static void ClearReceivedMessages()\n        {\n            Nodes.Values.Each(x => x.ClearReceivedMessages());\n        }\n\n        public static void Reset()\n        {\n            Nodes.Values.Each(x => x.SafeDispose());\n            Nodes.Clear();\n        }\n\n        public static void OnNodeCreation(Action<FubuRegistry> alteration)\n        {\n            Alterations.Add(alteration);\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/UrlExtensions.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore;\n\nnamespace Serenity\n{\n    public static class UrlExtensions\n    {\n        /// <summary>\n        /// Does the absolute path *minus* the querystring of the two url's match\n        /// </summary>\n        /// <param name=\"browserUrl\"></param>\n        /// <param name=\"url\"></param>\n        /// <returns></returns>\n        public static bool Matches(this string browserUrl, string url)\n        {\n            if (url.IsEmpty()) return false;\n\n            return browserUrl.Canonize().EqualsIgnoreCase(url.Canonize());\n        }\n\n        /// <summary>\n        /// Does the absolute path including the querystring of the two url's match\n        /// </summary>\n        /// <param name=\"browserUrl\"></param>\n        /// <param name=\"url\"></param>\n        /// <returns></returns>\n        public static bool MatchesWithQuerystring(this string browserUrl, string url)\n        {\n            if (url.IsEmpty()) return false;\n\n            return browserUrl.CanonizeExact().EqualsIgnoreCase(url.CanonizeExact());\n        }\n\n        public static string CanonizeExact(this string url)\n        {\n            if (Uri.IsWellFormedUriString(url, UriKind.Absolute))\n            {\n                var uri = new Uri(url);\n                return uri.PathAndQuery;\n            }\n\n            return url;\n        }\n\n        public static string Canonize(this string url)\n        {\n            if (Uri.IsWellFormedUriString(url, UriKind.Absolute))\n            {\n                var uri = new Uri(url);\n                return uri.AbsolutePath;\n            }\n            else\n            {\n                var parts = url.Split('?');\n                return parts.First();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/Wait.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading;\nusing OpenQA.Selenium.Support.UI;\n\nnamespace Serenity\n{\n    public static class Wait\n    {\n        public static bool Until(Func<bool> condition, int millisecondPolling = 500, int timeoutInMilliseconds = 5000)\n        {\n            if (condition()) return true;\n\n            var clock = new Stopwatch();\n            clock.Start();\n\n            return Until(condition, clock, millisecondPolling, timeoutInMilliseconds);\n        }\n\n        private static readonly object _NO_OP_ = new object();\n\n        public static T For<T>(Func<T> condition, TimeSpan? pollingInterval = null, TimeSpan? timeout = null, Type[] ignoreExceptions = null)\n        {\n            var wait = new DefaultWait<object>(_NO_OP_);\n\n            if (ignoreExceptions != null)\n            {\n                wait.IgnoreExceptionTypes(ignoreExceptions.ToArray());\n            }\n\n            wait.PollingInterval = pollingInterval ?? TimeSpan.FromMilliseconds(500);\n            wait.Timeout = timeout ?? TimeSpan.FromSeconds(5);\n\n            return wait.Until(x => condition());\n        }\n\n        public static bool Until(IEnumerable<Func<bool>> conditions, int millisecondPolling = 500, int timeoutInMilliseconds = 5000)\n        {\n            if (conditions == null)\n                throw new ArgumentNullException(\"conditions\");\n\n            var clock = new Stopwatch();\n            clock.Start();\n\n            return conditions\n                .Where(condition => !condition())\n                .All(condition => Until(condition, clock, millisecondPolling, timeoutInMilliseconds));\n        }\n\n        private static bool Until(Func<bool> condition, Stopwatch clock, int millisecondPolling, int timeoutInMilliseconds)\n        {\n            while (clock.ElapsedMilliseconds < timeoutInMilliseconds)\n            {\n                Thread.Yield();\n                Thread.Sleep(millisecondPolling);\n\n                if (condition()) return true;\n            }\n\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/By.cs",
    "content": "﻿namespace Serenity.WebDriver\n{\n    public class By : OpenQA.Selenium.By\n    {\n        /// <summary>\n        /// jQuery selector\n        /// </summary>\n        public static dynamic jQuery(string selector)\n        {\n            return JavaScript.CreateJQuery(selector);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Serenity/WebDriver/EmbeddedDrivers/ChromeEmbeddedDriver.cs",
    "content": "﻿using System;\n\nnamespace Serenity.WebDriver.EmbeddedDrivers\n{\n    public class ChromeEmbeddedDriver : IEmbeddedDriver\n    {\n        private Version _version;\n        public Version Version { get { return _version ?? (_version = new Version(\"2.0\")); } }\n        public string ResourceName { get { return \"chromedriver.exe\"; } }\n        public string ExtractedFileName { get { return \"chromedriver.exe\"; } }\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/EmbeddedDrivers/EmbeddedBrowserLifecycle.cs",
    "content": "﻿using FubuCore;\nusing OpenQA.Selenium;\nusing StoryTeller;\n\nnamespace Serenity.WebDriver.EmbeddedDrivers\n{\n    public abstract class EmbeddedBrowserLifecycle<TEmbeddedDriver> : BrowserLifecycle where TEmbeddedDriver : IEmbeddedDriver, new()\n    {\n        private readonly IEmbeddedDriverExtractor<TEmbeddedDriver> _extractor;\n\n        protected EmbeddedBrowserLifecycle()\n        {\n            _extractor = new EmbeddedDriverExtractor<TEmbeddedDriver>(new FileSystem());\n        }\n\n        protected override IWebDriver buildDriver()\n        {\n            if (_extractor.ShouldExtract())\n            {\n                _extractor.Extract();\n            }\n\n            return constructDriver();\n        }\n\n        protected abstract IWebDriver constructDriver();\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/EmbeddedDrivers/EmbeddedDriverExtractor.cs",
    "content": "﻿using System;\nusing System.IO;\nusing FubuCore;\n\nnamespace Serenity.WebDriver.EmbeddedDrivers\n{\n    public class EmbeddedDriverExtractor<TEmbeddedDriver> : IEmbeddedDriverExtractor<TEmbeddedDriver> where TEmbeddedDriver : IEmbeddedDriver, new()\n    {\n        private readonly IFileSystem _fileSystem;\n        private readonly IEmbeddedDriver _embeddedDriver;\n\n        public string PathToVersionDeclarationFile { get; private set; }\n\n        public string PathToDriver { get; private set; }\n\n        public EmbeddedDriverExtractor(IFileSystem fileSystem)\n        {\n            _fileSystem = fileSystem;\n            _embeddedDriver = new TEmbeddedDriver();\n\n            PathToDriver = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, _embeddedDriver.ExtractedFileName);\n            PathToVersionDeclarationFile = PathToDriver + \".version\";\n        }\n\n        public bool ShouldExtract()\n        {\n            if (!_fileSystem.FileExists(PathToVersionDeclarationFile) || !_fileSystem.FileExists(PathToDriver))\n                return true;\n\n            var currentVersion = new Version(_fileSystem.ReadStringFromFile(PathToVersionDeclarationFile));\n\n            return currentVersion < _embeddedDriver.Version;\n        }\n\n        public void Extract()\n        {\n            _fileSystem.DeleteFile(PathToDriver);\n            _fileSystem.DeleteFile(PathToVersionDeclarationFile);\n\n            var type = GetType();\n\n            using (var driverStream = type.Assembly.GetManifestResourceStream(type, _embeddedDriver.ResourceName))\n            {\n                _fileSystem.WriteStreamToFile(PathToDriver, driverStream);\n                _fileSystem.WriteStringToFile(PathToVersionDeclarationFile, _embeddedDriver.Version.ToString());\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/EmbeddedDrivers/IEmbeddedDriver.cs",
    "content": "﻿using System;\n\nnamespace Serenity.WebDriver.EmbeddedDrivers\n{\n    public interface IEmbeddedDriver\n    {\n        Version Version { get; }\n        string ResourceName { get; }\n        string ExtractedFileName { get; }\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/EmbeddedDrivers/IEmbeddedDriverExtractor.cs",
    "content": "﻿namespace Serenity.WebDriver.EmbeddedDrivers\n{\n    public interface IEmbeddedDriverExtractor<TEmbeddedDriver>\n    {\n        bool ShouldExtract();\n        void Extract();\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/EmbeddedDrivers/PhantomEmbeddedDriver.cs",
    "content": "﻿using System;\n\nnamespace Serenity.WebDriver.EmbeddedDrivers\n{\n    public class PhantomEmbeddedDriver : IEmbeddedDriver\n    {\n        private Version _version;\n        public Version Version { get { return _version ?? (_version = new Version(\"1.9.2.0\")); } }\n        public string ResourceName { get { return \"phantomjs.exe\"; } }\n        public string ExtractedFileName { get { return \"phantomjs.exe\"; } }\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/ISearchContextToJavaScriptExecutor.cs",
    "content": "﻿using OpenQA.Selenium;\n\nnamespace Serenity.WebDriver\n{\n    public interface ISearchContextToJavaScriptExecutor\n    {\n        IJavaScriptExecutor Convert(ISearchContext context);\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/JQuery.cs",
    "content": "using FubuCore;\n\nnamespace Serenity.WebDriver\n{\n    public static class JQuery\n    {\n        public static dynamic HasTextFilterFunction(string text)\n        {\n            return JavaScript.Function(\"$(this)\".ToJQueryJS().Text().Trim().ModifyStatement(\"return {{0}} === '{0}';\".ToFormat(text)));\n        }\n\n        public static dynamic DoesNotHaveTextFilterFunction(string text)\n        {\n            return JavaScript.Function(\"$(this)\".ToJQueryJS().Text().Trim().ModifyStatement(\"return {{0}} !== '{0}';\".ToFormat(text)));\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/JavaScript.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Dynamic;\nusing System.Linq;\nusing FubuCore;\nusing OpenQA.Selenium;\nusing Serenity.WebDriver.JavaScriptBuilders;\n\nnamespace Serenity.WebDriver\n{\n    public class JavaScript : DynamicObject\n    {\n        const string Return_Template = \"__result = {0};\\n__callback(__result);\";\n        const string Void_Template = \"{0};\\n__callback();\";\n\n        public string Statement { get; private set; }\n        public int JQueryCheckCount { get; set; }\n        public TimeSpan JQueryCheckInterval { get; set; }\n        public bool CheckForJQuery { get; set; }\n\n        private IList<IWebElement> Arguments { get; set; }\n\n        protected static IList<IJavaScriptBuilder> JavaScriptBuilders { get; private set; }\n\n        static JavaScript()\n        {\n            JavaScriptBuilders = new ReadOnlyCollection<IJavaScriptBuilder>(new IJavaScriptBuilder[]\n            {\n                new NullObjectJavaScriptBuilder(),\n                new StringJavaScriptBuilder(),\n                new WebElementJavaScriptBuilder(),\n                new DefaultJavaScriptBuilder()\n            });\n        }\n\n        public JavaScript(string statement) : this(statement, new IWebElement[0]) { }\n\n        public JavaScript(string statement, params IWebElement[] arguments)\n        {\n            Statement = statement;\n            Arguments = new List<IWebElement>(arguments);\n            JQueryCheckCount = 3;\n            JQueryCheckInterval = TimeSpan.FromMilliseconds(100.0);\n            CheckForJQuery = false;\n        }\n\n        public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)\n        {\n            var javascriptFriendlyName = JavaScriptFriendlyName(binder.Name);\n            result = CreateWith(\n                AppendFunction(javascriptFriendlyName, args),\n                CheckForJQuery,\n                JQueryCheckCount,\n                JQueryCheckInterval,\n                Arguments.Union(args.Where(x => x is IWebElement).Cast<IWebElement>()).ToArray());\n            return true;\n        }\n\n        public override bool TryGetMember(GetMemberBinder binder, out object result)\n        {\n            var javascriptFriendlyName = JavaScriptFriendlyName(binder.Name);\n            result = CreateWith(\n                \"{0}.{1}\".ToFormat(Statement, javascriptFriendlyName),\n                CheckForJQuery,\n                JQueryCheckCount,\n                JQueryCheckInterval,\n                Arguments.ToArray());\n            return true;\n        }\n\n        public object ExecuteAndGet(IWebDriver driver)\n        {\n            return ExecuteAndGet((IJavaScriptExecutor) driver);\n        }\n\n        public object ExecuteAndGet(IJavaScriptExecutor executor)\n        {\n            return ExecuteAndGetPrivate(executor, true);\n        }\n\n        private object ExecuteAndGetPrivate(IJavaScriptExecutor executor, bool returnValue)\n        {\n\n            var statement = StatementWithArguments(returnValue);\n\n            var executeTemplate = returnValue\n                ? Return_Template.ToFormat(statement)\n                : Void_Template.ToFormat(statement);\n\n            var script = ScriptWithoutJQueryCheck(executeTemplate);\n\n            if (CheckForJQuery)\n            {\n                script = ScriptWithJQueryCheck(executeTemplate, JQueryCheckCount, JQueryCheckInterval);\n            }\n\n            var result = executor.ExecuteAsyncScript(script, Arguments.Cast<object>().ToArray());\n\n            CheckForReferenceError(result);\n\n            return result;\n        }\n\n        private string ScriptWithJQueryCheck(string executeTemplate, int checkCount, TimeSpan checkInterval)\n        {\n            const string checkJQueryTemplate = \"var __callback = arguments[arguments.length - 1], __checkCount = 0, __result;\\n\" +\n                                    \"function __checkForJQuery() {{\\n\" +\n                                    \"  __checkCount++;\\n\" +\n                                    \"  if(!window.jQuery && __checkCount < {1}) {{\\n\" +\n                                    \"    window.setTimeout(__checkForJQuery, {2});\\n\" +\n                                    \"  }}\\n\" +\n                                    \"  else {{\\n\" +\n                                    \"    try {{\\n\" +\n                                    \"      {0}\\n\" +\n                                    \"    }} catch(err) {{\\n\" +\n                                    \"      var errstr = err.toString();\\n\" +\n                                    \"      __callback(errstr);\\n\" +\n                                    \"    }}\\n\" +\n                                    \"  }}\\n\" +\n                                    \"}}\\n\" +\n                                    \"if (!window.jQuery) {{\\n\" +\n                                    \"  window.setTimeout(__checkForJQuery, {2});\\n\" +\n                                    \"}}\\n\" +\n                                    \"else {{\" +\n                                    \"  {0}\" +\n                                    \" }}\";\n\n            return checkJQueryTemplate.ToFormat(executeTemplate, checkCount, checkInterval.TotalMilliseconds);\n        }\n\n        private string ScriptWithoutJQueryCheck(string executeTemplate)\n        {\n\n            const string basicTemplate = \"var __callback = arguments[arguments.length - 1];\\n {0}\";\n            return basicTemplate.ToFormat(executeTemplate);\n        }\n\n        private void CheckForReferenceError(object result)\n        {\n            var resultStr = result as string;\n\n            if (!string.IsNullOrWhiteSpace(resultStr) && resultStr.StartsWith(\"ReferenceError\"))\n            {\n                throw new InvalidOperationException(resultStr);\n            }\n        }\n\n        public T ExecuteAndGet<T>(IWebDriver driver)\n        {\n            return ExecuteAndGet<T>((IJavaScriptExecutor) driver);\n        }\n\n        public T ExecuteAndGet<T>(IJavaScriptExecutor executor)\n        {\n            return (T) ExecuteAndGet(executor);\n        }\n\n        public void Execute(IWebDriver driver)\n        {\n            Execute((IJavaScriptExecutor) driver);\n        }\n\n        public void Execute(IJavaScriptExecutor executor)\n        {\n            ExecuteAndGetPrivate(executor, false);\n        }\n\n        private string StatementWithArguments(bool returnValue)\n        {\n            if (Arguments == null || Arguments.Count == 0)\n            {\n                return Statement;\n            }\n\n            var argumentVariables = Arguments.Select((element, index) => new\n            {\n                ParameterName = \"__element__argument__{0}\".ToFormat(index),\n                ParameterRetrieval = \"arguments[{0}]\".ToFormat(index)\n            }).ToList();\n\n            var correctedStatement = argumentVariables\n                .Select(x => x.ParameterName)\n                .Aggregate(Statement, (statement, arg) => WebElementJavaScriptBuilder.MarkerRgx.Replace(statement, arg, 1));\n\n            return \"(function({0}) {{ {1}{2} }})({3})\".ToFormat(\n                argumentVariables.Select(x => x.ParameterName).Join(\", \"),\n                returnValue ? \"return \" : \"\",\n                correctedStatement,\n                argumentVariables.Select(x => x.ParameterRetrieval).Join(\", \"));\n        }\n\n        public dynamic ModifyStatement(string format)\n        {\n            return CreateWith(\n                format.ToFormat(Statement),\n                CheckForJQuery,\n                JQueryCheckCount,\n                JQueryCheckInterval,\n                Arguments.ToArray());\n        }\n\n        public override string ToString()\n        {\n            return Statement;\n        }\n\n        private string JavaScriptFriendlyName(string name)\n        {\n            return char.ToLowerInvariant(name[0]) + name.Substring(1);\n        }\n\n        private string AppendFunction(string func, params object[] args)\n        {\n            var argsString = args == null\n                ? \"\"\n                : args\n                    .Reverse()\n                    .SkipWhile(arg => arg == null)\n                    .Reverse()\n                    .Select(arg => JavaScriptBuilders.First(x => x.Matches(arg)).Build(arg))\n                    .Join(\", \");\n\n            return \"{0}.{1}({2})\".ToFormat(Statement, func, argsString);\n        }\n\n        public static dynamic Create(string javaScript)\n        {\n            return new JavaScript(javaScript);\n        }\n\n        public static dynamic CreateJQuery(string selector)\n        {\n            return new JavaScript(\"$(\\\"\" + selector + \"\\\")\") {CheckForJQuery = true};\n        }\n\n        public static dynamic CreateWithJQueryCheck(string javaScript)\n        {\n            return new JavaScript(javaScript) {CheckForJQuery = true};\n        }\n\n        public static dynamic CreateWith(string statement, bool checkForJQuery, int jQueryCheckCount, TimeSpan jQueryCheckInterval, params IWebElement[] arguments)\n        {\n            var js = new JavaScript(statement, arguments);\n            js.CheckForJQuery = checkForJQuery;\n            js.JQueryCheckCount = jQueryCheckCount;\n            js.JQueryCheckInterval = jQueryCheckInterval;\n            return js;\n        }\n\n        public static dynamic JQueryFrom(IWebElement element)\n        {\n            return new JavaScript(\"$({0})\".ToFormat(WebElementJavaScriptBuilder.Marker), element)\n            {\n                CheckForJQuery = true\n            };\n        }\n\n        public static dynamic Function(JavaScript body)\n        {\n            return Function(Enumerable.Empty<string>(), body);\n        }\n\n        public static dynamic Function(IEnumerable<string> args, JavaScript body)\n        {\n            if (args == null)\n                throw new ArgumentNullException(\"args\");\n\n            return CreateWith(\n                \"function({0}) {{ {1} }}\".ToFormat(args.Join(\", \"), body.Statement),\n                body.CheckForJQuery,\n                body.JQueryCheckCount,\n                body.JQueryCheckInterval);\n        }\n\n        public static implicit operator By(JavaScript source)\n        {\n            return (JavaScriptBy) source;\n        }\n\n        public static implicit operator OpenQA.Selenium.By(JavaScript source)\n        {\n            return (JavaScriptBy) source;\n        }\n\n        public static implicit operator JavaScriptBy(JavaScript source)\n        {\n            return new JavaScriptBy(source);\n        }\n\n        public static implicit operator JavaScript(JavaScriptBy source)\n        {\n            return (JavaScript) source.JavaScript;\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/JavaScriptBuilders/DefaultJavaScriptBuilder.cs",
    "content": "namespace Serenity.WebDriver.JavaScriptBuilders\n{\n    public class DefaultJavaScriptBuilder : IJavaScriptBuilder\n    {\n        public bool Matches(object obj)\n        {\n            return true;\n        }\n\n        public string Build(object obj)\n        {\n            if (obj == null)\n            {\n                return \"null\";\n            }\n\n            return obj.ToString();\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/JavaScriptBuilders/IJavaScriptBuilder.cs",
    "content": "namespace Serenity.WebDriver.JavaScriptBuilders\n{\n    public interface IJavaScriptBuilder\n    {\n        bool Matches(object obj);\n        string Build(object obj);\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/JavaScriptBuilders/NullObjectJavaScriptBuilder.cs",
    "content": "namespace Serenity.WebDriver.JavaScriptBuilders\n{\n    public class NullObjectJavaScriptBuilder : IJavaScriptBuilder\n    {\n        public bool Matches(object obj)\n        {\n            return obj == null;\n        }\n\n        public string Build(object obj)\n        {\n            return \"null\";\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/JavaScriptBuilders/StringJavaScriptBuilder.cs",
    "content": "using FubuCore;\n\nnamespace Serenity.WebDriver.JavaScriptBuilders\n{\n    public class StringJavaScriptBuilder : IJavaScriptBuilder\n    {\n        public bool Matches(object obj)\n        {\n            return obj is string;\n        }\n\n        public string Build(object obj)\n        {\n            return \"\\\"{0}\\\"\".ToFormat(obj);\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/JavaScriptBuilders/WebElementJavaScriptBuilder.cs",
    "content": "﻿using System.Text.RegularExpressions;\nusing OpenQA.Selenium;\n\nnamespace Serenity.WebDriver.JavaScriptBuilders\n{\n    public class WebElementJavaScriptBuilder : IJavaScriptBuilder\n    {\n        public const string Marker = \"::arg::\";\n        public static readonly Regex MarkerRgx = new Regex(Regex.Escape(Marker));\n\n        public bool Matches(object obj)\n        {\n            return obj is IWebElement;\n        }\n\n        public string Build(object obj)\n        {\n            return Marker;\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/JavaScriptBy.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing FubuCore;\nusing OpenQA.Selenium;\n\nnamespace Serenity.WebDriver\n{\n    public class JavaScriptBy : By\n    {\n        public dynamic JavaScript { get; private set; }\n\n        public static ISearchContextToJavaScriptExecutor SearchContextConverter { get; set; }\n\n        static JavaScriptBy()\n        {\n            ResetConverter();\n        }\n\n        public JavaScriptBy(dynamic javaScript)\n        {\n            JavaScript = javaScript;\n        }\n\n        public static void ResetConverter()\n        {\n            SearchContextConverter = new SearchContextToJavaScriptExecutor();\n        }\n\n        public override IWebElement FindElement(ISearchContext context)\n        {\n            var element = Execute<IWebElement>(context, JavaScript.Get(0));\n\n            if (element != null)\n            {\n                return element;\n            }\n\n            throw new NoSuchElementException(\"No element found with JavaScript command: \" + JavaScript.Statement);\n        }\n\n        public override ReadOnlyCollection<IWebElement> FindElements(ISearchContext context)\n        {\n            var rawCollection = Execute<object>(context, JavaScript.Get());\n\n            var collection = rawCollection as ReadOnlyCollection<IWebElement>;\n\n            //Unlike FindElement, FindElements does not throw an exception if no elements are found\n            //and instead returns an empty list\n            return collection ?? (new ReadOnlyCollection<IWebElement>(new List<IWebElement>()));\n        }\n\n        static T Execute<T>(ISearchContext context, dynamic jquery) where T : class\n        {\n            var executor = SearchContextConverter.Convert(context);\n            return jquery.ExecuteAndGet<T>(executor);\n        }\n\n        public override string ToString()\n        {\n            return \"By.JavaScript: {0}\".ToFormat((string) JavaScript.Statement);\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/JavaScriptExtensionMethods.cs",
    "content": "﻿using OpenQA.Selenium;\n\nnamespace Serenity.WebDriver\n{\n    public static class JavaScriptExtensionMethods\n    {\n        public static void Execute(this IWebDriver driver, JavaScript script)\n        {\n            script.Execute((IJavaScriptExecutor) driver);\n        }\n\n        public static object ExecuteAndGet(this IWebDriver driver, JavaScript script)\n        {\n            return script.ExecuteAndGet((IJavaScriptExecutor) driver);\n        }\n\n        public static T ExecuteAndGet<T>(this IWebDriver driver, JavaScript script) where T : class\n        {\n            return script.ExecuteAndGet<T>((IJavaScriptExecutor) driver);\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/JavaScriptStringExtensions.cs",
    "content": "using OpenQA.Selenium;\n\nnamespace Serenity.WebDriver\n{\n    public static class JavaScriptExtensions\n    {\n        public static dynamic ToJS(this string str)\n        {\n            return JavaScript.Create(str);\n        }\n\n        public static dynamic ToJQueryJS(this string str)\n        {\n            return JavaScript.CreateWithJQueryCheck(str);\n        }\n\n        public static dynamic ToJQueryBy(this IWebElement element)\n        {\n            return JavaScript.JQueryFrom(element);\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/WebDriver/SearchContextToJavaScriptExecutor.cs",
    "content": "﻿using System;\nusing OpenQA.Selenium;\nusing OpenQA.Selenium.Internal;\n\nnamespace Serenity.WebDriver\n{\n    public class SearchContextToJavaScriptExecutor : ISearchContextToJavaScriptExecutor\n    {\n        public IJavaScriptExecutor Convert(ISearchContext context)\n        {\n            var executor = context as IJavaScriptExecutor;\n\n            if (executor != null)\n            {\n                return executor;\n            }\n\n            var wrappedDriver = context as IWrapsDriver;\n\n            if (wrappedDriver != null)\n            {\n                executor = wrappedDriver.WrappedDriver as IJavaScriptExecutor;\n            }\n\n            if (executor == null)\n            {\n                throw new ArgumentException(\"Search context must be an IJavaScriptExecutor or an IWrapsDriver that wraps an IJavaScriptExecutor\", \"context\");\n            }\n\n            return executor;\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/WebElementExtensions.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.Assets;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Urls;\nusing OpenQA.Selenium;\n\nnamespace Serenity\n{\n    public static class WebElementExtensions\n    {\n        public static bool IsCssLink(this IWebElement element)\n        {\n            return element.TagName == \"link\" &&\n                   element.GetMimeType() == MimeType.Css;\n        }\n\n        public static string Href(this IWebElement element)\n        {\n            return element.GetAttribute(\"href\");\n        }\n\n\n        public static MimeType GetMimeType(this IWebElement element)\n        {\n            return MimeType.MimeTypeByFileName(element.Href());\n        }\n\n        public static bool IsHiddenInput(this IWebElement element)\n        {\n            return element.TagName == \"input\" && element.GetAttribute(\"type\") == \"hidden\";\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/errorCollector.js",
    "content": "﻿'use strict';\n/*globals console:true, ErrorCollector:true*/\nif (typeof console === \"undefined\") {\n    console = {\n        log: function () { },\n        debug: function () { },\n        info: function () { },\n        warn: function () { },\n        error: function () { },\n        trace: function () { }\n    };\n}\n\nvar SerenityErrorCollector = (function (global, console) {\n    var self = {\n        errors: [],\n        registerError: function (msg) {\n            self.errors.push(msg);\n        }\n    };\n\n    var log = function (msg) {\n        self.registerError(msg);\n    };\n\n    function decorateWithLog(callback) {\n        return function (msg) {\n            log(msg);\n            if (callback) {\n                global.onerror = log; //callback(msg);\n            }\n        };\n    }\n\n    global.onerror = decorateWithLog(global.onerror);\n\n    if (window.onerror) {\n        window.onerror = decorateWithLog(window.onerror);\n    }\n    else if (window) {\n        window.onerror = function(msg) {\n            log(msg);\n        }\n    }\n\n    console.error = decorateWithLog(console.error);\n\n    // TODO -- track warning separately\n    //console.warn = decorateWithLog(console.warn);\n\n    return self;\n})(window, console);"
  },
  {
    "path": "src/Serenity/paket.references",
    "content": "Castle.Core\nFubuCore\nHtmlTags\nNewtonsoft.Json\nOwin\nSelenium.RC\nSelenium.Support\nSelenium.WebDriver\nSelenium.WebDriverBackedSelenium\nStoryteller\nstructuremap"
  },
  {
    "path": "src/Serenity/ve-4B7E.tmp",
    "content": "using System;\nusing System.Net;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Endpoints;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.Urls;\nusing OpenQA.Selenium;\n\nnamespace Serenity\n{\n    public class ApplicationUnderTest : IApplicationUnderTest\n    {\n        private readonly string _name;\n        private readonly string _rootUrl;\n        private readonly IBrowserLifecycle _browser;\n        private readonly Lazy<IServiceFactory> _container;\n        private readonly Lazy<IUrlRegistry> _urls;\n        private readonly Lazy<IServiceLocator> _services;\n        private readonly Lazy<NavigationDriver> _navigation;\n\n\n        public ApplicationUnderTest(FubuRuntime runtime, ApplicationSettings settings, IBrowserLifecycle browser)\n            : this(settings.Name, settings.RootUrl, browser, () => runtime.Factory)\n        {\n        }\n\n        public ApplicationUnderTest(IApplicationSource source, ApplicationSettings settings, IBrowserLifecycle browser)\n            : this(source.GetType().Name, settings.RootUrl, browser, () =>\n            {\n                var app = source.BuildApplication();\n                return app.Bootstrap().Factory;\n            })\n        {\n        }\n\n        private ApplicationUnderTest(string name, string rootUrl, IBrowserLifecycle browser,\n            Func<IServiceFactory> factorySource)\n        {\n            _name = name;\n            _rootUrl = rootUrl;\n            _browser = browser;\n\n            _container = new Lazy<IServiceFactory>(factorySource);\n\n            _urls = new Lazy<IUrlRegistry>(() => _container.Value.Get<IUrlRegistry>());\n\n            _navigation = new Lazy<NavigationDriver>(() => new NavigationDriver(this));\n\n            _services = new Lazy<IServiceLocator>(() => _container.Value.Get<IServiceLocator>());\n        }\n\n        public string Name\n        {\n            get { return _name; }\n        }\n\n        public string RootUrl\n        {\n            get { return _rootUrl; }\n        }\n\n        public IServiceLocator Services\n        {\n            get { return _services.Value; }\n        }\n\n        public IBrowserLifecycle Browser\n        {\n            get { return _browser; }\n        }\n\n        public IUrlRegistry Urls\n        {\n            get { return _urls.Value; }\n        }\n\n\n        public void Ping()\n        {\n            var client = new WebClient();\n            if (_rootUrl != null) client.DownloadDataAsync(new Uri(_rootUrl));\n        }\n\n        public void Teardown()\n        {\n            _browser.SafeDispose();\n        }\n\n        public virtual NavigationDriver Navigation\n        {\n            get { return _navigation.Value; }\n        }\n\n        public virtual EndpointDriver Endpoints()\n        {\n            return new EndpointDriver(Urls, _rootUrl);\n        }\n\n        public IWebDriver Driver\n        {\n            get { return _browser.Driver; }\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity/web.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <system.webServer>\n    <validation validateIntegratedModeConfiguration=\"false\" />\n    <modules runAllManagedModulesForAllRequests=\"true\">\n      <!-- To prevent static content from being run thru ASP.NET, we want to set runAllManagedModulesForAllRequests=\"false\"\n\t\t\t   However, UrlRoutingModel will stop working, unless you patch IIS to support extensionless routing (introduced in .NET 4)\n\t\t\t   Download the patch at http://support.microsoft.com/kb/980368  -->\n      <!-- To prevent static content from being run thru ASP.NET, we want to set runAllManagedModulesForAllRequests=\"false\"\n\t\t\t   However, UrlRoutingModel will stop working, unless you patch IIS to support extensionless routing (introduced in .NET 4)\n\t\t\t   Download the patch at http://support.microsoft.com/kb/980368  -->\n      <!-- To prevent static content from being run thru ASP.NET, we want to set runAllManagedModulesForAllRequests=\"false\"\n\t\t\t   However, UrlRoutingModel will stop working, unless you patch IIS to support extensionless routing (introduced in .NET 4)\n\t\t\t   Download the patch at http://support.microsoft.com/kb/980368  -->\n      <!-- To prevent static content from being run thru ASP.NET, we want to set runAllManagedModulesForAllRequests=\"false\"\n\t\t\t   However, UrlRoutingModel will stop working, unless you patch IIS to support extensionless routing (introduced in .NET 4)\n\t\t\t   Download the patch at http://support.microsoft.com/kb/980368  -->\n      <remove name=\"UrlRoutingModule\" />\n      <add name=\"UrlRoutingModule\" type=\"System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" preCondition=\"managedHandler\" />\n    </modules>\n  </system.webServer>\n</configuration>"
  },
  {
    "path": "src/Serenity.Testing/BrowserForTesting.cs",
    "content": "﻿using System;\nusing FubuCore.Util;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\n\nnamespace Serenity.Testing\n{\n    [SetUpFixture]\n    public class BrowserForTesting\n    {\n        private static readonly Cache<Type, IBrowserLifecycle> Browsers = new Cache<Type, IBrowserLifecycle>();\n\n        public static IWebDriver Driver { get; private set; }\n\n        public static IBrowserLifecycle Use<TBrowser>() where TBrowser : IBrowserLifecycle, new()\n        {\n            var type = typeof (TBrowser);\n\n            if (!Browsers.Has(type))\n            {\n                Browsers.Fill(type, key => new TBrowser());\n            }\n\n            var lifecycle = Browsers[type];\n\n            Driver = lifecycle.Driver;\n            return lifecycle;\n        }\n\n        [TearDown]\n        public void Teardown()\n        {\n            Browsers.Each(x => x.Dispose());\n            Browsers.ClearAll();\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/BrowserType_selection_tester.cs",
    "content": "﻿using FubuMVC.Core;\nusing Shouldly;\nusing NUnit.Framework;\nusing StoryTeller;\n\nnamespace Serenity.Testing\n{\n    [TestFixture]\n    public class BrowserType_selection_tester\n    {\n        private FubuMvcSystem theSystem;\n\n        [SetUp]\n        public void SetUp()\n        {\n            theSystem = new FubuMvcSystem(() => { return null; });\n            theSystem.DefaultBrowser = BrowserType.Chrome;\n        }\n\n        [Test]\n        public void use_profile_if_it_exists()\n        {\n            Project.CurrentProject = new Project{Profile = BrowserType.Phantom.ToString()};\n\n            theSystem.ChooseBrowserType().ShouldBe(BrowserType.Phantom);\n        }\n\n        [Test]\n        public void use_the_project_default_if_it_exists_and_no_profile()\n        {\n            Project.CurrentProject = new Project{Profile = null};\n            WebDriverSettings.Current.Browser = BrowserType.Chrome;\n\n            theSystem.DefaultBrowser = BrowserType.IE;\n\n            theSystem.ChooseBrowserType().ShouldBe(BrowserType.IE);\n        }\n\n        [Test]\n        public void fall_back_to_the_webdriver_settings_current_if_no_profile_or_default()\n        {\n            Project.CurrentProject = new Project { Profile = null };\n            WebDriverSettings.Current.Browser = BrowserType.Chrome;\n\n            theSystem.DefaultBrowser = null;\n\n            theSystem.ChooseBrowserType().ShouldBe(BrowserType.Chrome);\n        }\n\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/FakeSystem/IntegratedTester.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Conversion;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Runtime;\nusing FubuMVC.Core.StructureMap;\nusing FubuMVC.Core.View;\nusing Shouldly;\nusing HtmlTags;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\nusing Rhino.Mocks;\nusing Serenity.Fixtures;\nusing StoryTeller;\nusing StructureMap;\n\nnamespace Serenity.Testing.FakeSystem\n{\n    [TestFixture, Explicit]\n    public class IntegratedTester\n    {\n        [Test]\n        public void register_a_custom_after_navigation()\n        {\n            var context = new FakeSerenitySystem().CreateContext();\n            context.GetService<IApplicationUnderTest>()\n                .Navigation.AfterNavigation.ShouldBeOfType<FakeAfterNavigation>();\n        }\n\n        [Test]\n        public void smoke_test_the_on_start_up()\n        {\n            var system = new FakeSerenitySystem();\n            system.CreateContext().ShouldNotBeNull();\n            system.TheContainer.ShouldNotBeNull();\n        }\n\n        [Test]\n        public void calls_subsystem_start_on_each()\n        {\n            var system = new FakeSerenitySystem();\n            system.SubSystems.Each(x => { x.AssertWasCalled(o => o.Start()); });\n        }\n\n        [Test]\n        public void calls_syssystem_stop_on_each_when_disposing()\n        {\n            var system = new FakeSerenitySystem();\n            system.CreateContext();\n\n            system.Application.ShouldNotBeNull();\n\n            system.Dispose();\n\n            system.SubSystems.Each(x => { x.AssertWasCalled(o => o.Stop()); });\n        }\n\n    }\n\n    public class FakeSerenitySystem : FubuMvcSystem<FakeSerenitySource>\n    {\n        public IContainer TheContainer;\n\n        public IList<ISubSystem> SubSystems = new List<ISubSystem>();\n\n        public FakeSerenitySystem()\n        {\n            AfterNavigation = new FakeAfterNavigation();\n\n            OnStartup<IContainer>(c => TheContainer = c);\n\n            AddSubSystem(MockedSubSystem());\n            AddSubSystem(MockedSubSystem());\n            AddSubSystem(MockedSubSystem());\n        }\n\n        public ISubSystem MockedSubSystem()\n        {\n            var system = MockRepository.GenerateMock<ISubSystem>();\n            system.Stub(x => x.Start()).Return(Task.Factory.StartNew(() => { }));\n            system.Stub(x => x.Stop()).Return(Task.Factory.StartNew(() => { }));\n\n            return system;\n        }\n    }\n\n\n    public class FakeAfterNavigation : IAfterNavigation\n    {\n        public void AfterNavigation(IWebDriver driver, string desiredUrl)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    public class RandomTypeConverter : StatelessConverter<RandomType>\n    {\n        protected override RandomType convert(string text)\n        {\n            return new RandomType {Name = text};\n        }\n    }\n\n    public class RandomType\n    {\n        public string Name { get; set; }\n    }\n\n\n\n    public class FakeSerenitySource : IApplicationSource\n    {\n        public FubuApplication BuildApplication(string directory)\n        {\n            return FubuApplication.For<FakeSerenityRegistry>();\n        }\n    }\n\n    public class FakeSerenityRegistry : FubuRegistry\n    {\n        public FakeSerenityRegistry()\n        {\n            Actions.IncludeType<FakeSerenityActions>();\n        }\n    }\n\n    public class TextModel\n    {\n        public string Name { get; set; }\n    }\n\n    public class FakeSerenityActions\n    {\n        private readonly IServiceLocator _services;\n\n        public FakeSerenityActions(IServiceLocator services)\n        {\n            _services = services;\n        }\n\n        public HtmlDocument get_person_Name(TextModel model)\n        {\n            var document = new FubuHtmlDocument<TextModel>(_services, new InMemoryFubuRequest())\n            {\n                Model = model\n            };\n\n            document.Title = \"Persion:\" + model.Name;\n\n            document.Push(\"p\");\n            document.Add(\"span\").Text(document.Model.Name);\n            document.Add(\"input\").Attr(\"type\", \"text\").Id(\"Name\").Name(\"Name\").Value(model.Name);\n\n            return document;\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/FakeSystem/SampleSystem.cs",
    "content": "﻿using FubuMVC.Core;\nusing Serenity;\n\nnamespace Serenity.Testing.FakeSystem\n{\n    public class SampleSystem : FubuMvcSystem<MyApplication>\n    {\n         \n    }\n\n    public class MyApplication : IApplicationSource\n    {\n        public FubuApplication BuildApplication(string directory)\n        {\n            throw new System.NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/Fixtures/BrowserIsAtTester.cs",
    "content": "using System;\nusing System.Linq.Expressions;\nusing System.Reflection;\nusing FubuMVC.Core.Registration.Routes;\nusing FubuMVC.Core.Urls;\nusing Shouldly;\nusing NUnit.Framework;\nusing Serenity.Fixtures;\n\nnamespace Serenity.Testing.Fixtures\n{\n    [TestFixture]\n    public class BrowserIsAtTester : ScreenFixture\n    {\n        [Test]\n        public void canonize()\n        {\n            \"http://localhost\".Canonize().ShouldBe(\"/\");\n            \"http://localhost:5500\".Canonize().ShouldBe(\"/\");\n            \"http://localhost:5500/a\".Canonize().ShouldBe(\"/a\");\n            \"/a\".Canonize().ShouldBe(\"/a\");\n\n            \"http://host.com/a/b\".Canonize().ShouldBe(\"/a/b\");\n        }\n\n        [Test]\n        public void is_exact_url_match()\n        {\n\n            \"http://localhost:5500/?a=b\".MatchesWithQuerystring(\"/?a=b\").ShouldBeTrue();\n            \"http://localhost:5500/?a=b\".MatchesWithQuerystring(\"/?a=c\").ShouldBeFalse();\n\n\n        }\n\n        [Test]\n        public void is_url_match()\n        {\n            \"http://localhost:5500\".Matches(\"/\").ShouldBeTrue();\n            \"http://localhost:5500/\".Matches(\"/\").ShouldBeTrue();\n            \"http://localhost:5500\".Matches(\"/?a=b\").ShouldBeTrue();\n            \"http://localhost:5500/home?a=b\".Matches(\"/\").ShouldBeFalse();\n\n\n        }\n    }\n\n    public class StubHttpUrlRegistry : IUrlRegistry\n    {\n        public IUrlRegistry _stubRegistry = new StubUrlRegistry();\n        private const string _baseAddress = \"abc://local/\";\n\n        public string UrlFor<TInput>(string categoryOrHttpMethod) where TInput : class\n        {\n            return _baseAddress + _stubRegistry.UrlFor<TInput>(categoryOrHttpMethod);\n        }\n\n        public string UrlFor(object model, string category = null)\n        {\n            return _baseAddress + _stubRegistry.UrlFor(model, category);\n        }\n\n        public string UrlFor(Type modelType, RouteParameters parameters)\n        {\n            return _baseAddress + _stubRegistry.UrlFor(modelType, parameters);\n        }\n\n        public string UrlFor(Type modelType, RouteParameters parameters, string categoryOrHttpMethod)\n        {\n            return _baseAddress + _stubRegistry.UrlFor(modelType, parameters, categoryOrHttpMethod);\n        }\n\n        public string UrlFor<TController>(Expression<Action<TController>> expression, string categoryOrHttpMethod)\n        {\n            return _baseAddress + _stubRegistry.UrlFor(expression, categoryOrHttpMethod);\n        }\n\n        public string UrlForNew(Type entityType)\n        {\n            return _baseAddress + _stubRegistry.UrlForNew(entityType);\n        }\n\n        public bool HasNewUrl(Type type)\n        {\n            throw new NotImplementedException();\n        }\n\n        public string UrlFor(Type handlerType, MethodInfo method, string categoryOrHttpMethodOrHttpMethod)\n        {\n            return _baseAddress + _stubRegistry.UrlFor(handlerType, method, categoryOrHttpMethodOrHttpMethod);\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/Fixtures/Grammars/SimpleElementGestureTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\nusing Rhino.Mocks;\nusing Serenity.Fixtures;\nusing Serenity.Fixtures.Grammars;\nusing StoryTeller;\nusing StoryTeller.Conversion;\nusing StoryTeller.Results;\n\nnamespace Serenity.Testing.Fixtures.Grammars\n{\n    public class SimpleElementGestureTester\n    {\n        [TestFixture]\n        public class ErrorScenarios : InteractionContext<ErrorGeneratingGesture>\n        {\n            [Test]\n            public void AddsGestureConfigDescriptionOnError()\n            {\n                const string name = \"Test-Name\";\n\n                var gesture = GestureConfig.ByName(name);\n                gesture.Finder = driver => MockFor<IWebElement>();\n\n                Services.Inject(gesture);\n\n                var specContext = MockFor<ISpecContext>();\n                var applicationUnderTest = MockFor<IApplicationUnderTest>();\n                var fixture = MockFor<ScreenFixture>();\n\n                fixture.Context = specContext;\n                specContext.Stub(x => x.Service<IApplicationUnderTest>()).Return(applicationUnderTest);\n                applicationUnderTest.Stub(x => x.Driver).Return(MockFor<IWebDriver>());\n\n                var stepValues = new StepValues(\"id\");\n\n                fixture.SetUp();\n                Services.Inject(fixture);\n\n                var exception = Exception<Exception>.ShouldBeThrownBy(() => {\n                    ClassUnderTest.Execute(stepValues, null);\n                });\n\n                exception.ToString().ShouldContain(name);\n            }\n        }\n\n        public class ErrorGeneratingGesture : SimpleElementGesture\n        {\n            public ErrorGeneratingGesture(ScreenFixture fixture, GestureConfig config) : base(fixture, config)\n            {\n            }\n\n            protected override IEnumerable<CellResult> execute(IWebElement element, StepValues values)\n            {\n                throw new Exception(\"Test exception handling\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Serenity.Testing/Fixtures/Handlers/CheckboxHandlerTester.cs",
    "content": "﻿using HtmlTags;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\nusing Serenity.Fixtures.Handlers;\nusing Shouldly;\n\nnamespace Serenity.Testing.Fixtures.Handlers\n{\n    public class CheckboxHandlerTester<TBrowser> : ScreenManipulationTester<TBrowser> where TBrowser : IBrowserLifecycle, new()\n    {\n        private readonly CheckboxHandler _handler = new CheckboxHandler();\n\n        private const string Disabled = \"disabled\";\n        private const string CheckedAttr = \"checked\";\n        private const string Enabled = \"enabled\";\n        private const string NotChecked = \"not-checked\";\n\n        private const string Target1 = \"target1\";\n        private const string Target2 = \"target2\";\n        private const string Target3 = \"target3\";\n        private const string Target4 = \"target4\";\n        private const string Div1 = \"div1\";\n        private const string Text1 = \"text1\";\n\n        private readonly By _disabledById = By.Id(Disabled);\n        private readonly By _checkedById = By.Id(CheckedAttr);\n        private readonly By _enabledById = By.Id(Enabled);\n        private readonly By _notCheckedById = By.Id(NotChecked);\n        private readonly By _div1ById = By.Id(Div1);\n        private readonly By _text1ById = By.Id(Text1);\n        \n        private readonly By _target1ById = By.Id(Target1);\n        private readonly By _target2ById = By.Id(Target2);\n        private readonly By _target3ById = By.Id(Target3);\n        private readonly By _target4ById = By.Id(Target4);\n\n        protected override void ConfigureDocument(HtmlDocument document)\n        {\n            document.Add(new CheckboxTag(true).Id(CheckedAttr));\n            document.Add(new CheckboxTag(false).Id(NotChecked));\n            document.Add(new CheckboxTag(false).Attr(Disabled, Disabled).Id(Disabled));\n            document.Add(new CheckboxTag(true).Id(Enabled));\n            document.Add(new CheckboxTag(false).Id(Target1));\n            document.Add(new CheckboxTag(false).Id(Target2));\n            document.Add(new CheckboxTag(true).Id(Target3));\n            document.Add(new CheckboxTag(false).Id(Target4));\n            document.Add(new DivTag(Div1));\n            document.Add(new TextboxTag().Id(Text1));\n        }\n\n        [Test]\n        public void matches_negative()\n        {\n            _handler.Matches(Driver.FindElement(_text1ById)).ShouldBeFalse();\n            _handler.Matches(Driver.FindElement(_div1ById)).ShouldBeFalse();\n        }\n\n        [Test]\n        public void matches_positive()\n        {\n            _handler.Matches(Driver.FindElement(_checkedById)).ShouldBeTrue();\n        }\n\n        [Test]\n        public void enabled_positive()\n        {\n            CheckboxHandler.IsEnabled(Driver.FindElement(_enabledById))\n                .ShouldBeTrue();\n        }\n\n        [Test]\n        public void enabled_negative()\n        {\n            CheckboxHandler.IsEnabled(Driver.FindElement(_disabledById))\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void is_checked_negative()\n        {\n            CheckboxHandler.IsChecked(Driver.FindElement(_notCheckedById))\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void is_checked_positive()\n        {\n            CheckboxHandler.IsChecked(Driver.FindElement(_checkedById))\n                .ShouldBeTrue();\n        }\n\n        [Test]\n        public void check_a_checkbox()\n        {\n            var target = Driver.FindElement(_target1ById);\n            CheckboxHandler.IsChecked(target).ShouldBeFalse();\n            \n            CheckboxHandler.Check(target);\n\n            CheckboxHandler.IsChecked(target).ShouldBeTrue();\n        }\n\n        [Test]\n        public void enter_data_true()\n        {\n            var target = Driver.FindElement(_target2ById);\n\n            CheckboxHandler.IsChecked(target).ShouldBeFalse();\n\n            _handler.EnterData(null, target, true);\n            CheckboxHandler.IsChecked(target).ShouldBeTrue();\n\n            _handler.EnterData(null, target, true);\n            CheckboxHandler.IsChecked(target).ShouldBeTrue();\n        }\n\n        [Test]\n        public void enter_data_false()\n        {\n            var target = Driver.FindElement(_target3ById);\n\n            CheckboxHandler.IsChecked(target).ShouldBeTrue();\n\n            _handler.EnterData(null, target, false);\n            CheckboxHandler.IsChecked(target).ShouldBeFalse();\n\n            _handler.EnterData(null, target, false);\n            CheckboxHandler.IsChecked(target).ShouldBeFalse();\n        }\n\n        [Test]\n        public void enter_data_true_string()\n        {\n            var target = Driver.FindElement(_target2ById);\n\n            CheckboxHandler.IsChecked(target).ShouldBeFalse();\n\n            _handler.EnterData(null, target, \"true\");\n            CheckboxHandler.IsChecked(target).ShouldBeTrue();\n\n            _handler.EnterData(null, target, \"True\");\n            CheckboxHandler.IsChecked(target).ShouldBeTrue();\n        }\n\n        [Test]\n        public void enter_data_false_string()\n        {\n            var target = Driver.FindElement(_target3ById);\n\n            CheckboxHandler.IsChecked(target).ShouldBeTrue();\n\n            _handler.EnterData(null, target, \"false\");\n            CheckboxHandler.IsChecked(target).ShouldBeFalse();\n\n            _handler.EnterData(null, target, \"False\");\n            CheckboxHandler.IsChecked(target).ShouldBeFalse();\n        }\n\n        [Test]\n        public void enter_data_empty_string()\n        {\n            var target = Driver.FindElement(_target3ById);\n\n            CheckboxHandler.IsChecked(target).ShouldBeTrue();\n\n            _handler.EnterData(null, target, string.Empty);\n            CheckboxHandler.IsChecked(target).ShouldBeFalse();\n        }\n\n        [Test]\n        public void get_data()\n        {\n            _handler.GetData(Driver, Driver.FindElement(_checkedById)).ShouldBe(true.ToString());\n            _handler.GetData(Driver, Driver.FindElement(_notCheckedById)).ShouldBe(false.ToString());\n        }\n    }\n}\n"
  },
  {
    "path": "src/Serenity.Testing/Fixtures/Handlers/ElementHandlerWrapperTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\nusing Rhino.Mocks;\nusing Serenity.Fixtures.Handlers;\n\nnamespace Serenity.Testing.Fixtures.Handlers\n{\n    public class ElementHandlerWrapperTester : InteractionContext<ElementHandlerWrapperTester.TestElementHandlerWrapper>\n    {\n        private const string Result = \"Some returned text\";\n\n        private IWebElement _element;\n        private ISearchContext _context;\n        private object _data;\n\n        protected override void beforeEach()\n        {\n            _element = MockFor<IWebElement>();\n            _context = MockFor<ISearchContext>();\n            _data = new object();\n\n            ClassUnderTest.Element = _element;\n        }\n\n        [Test]\n        public void DoesNotCallNestedMatchesIfWrapperDoesNotMatch()\n        {\n            ElementHandlerWrapper.AllHandlers = () =>\n            {\n                throw new Exception(\"Should not attempt to get all handlers\");\n            };\n\n            ClassUnderTest.MatchesResult = false;\n\n            ClassUnderTest.Matches(_element).ShouldBeFalse();\n        }\n\n        [Test]\n        public void DoesNotMatchIfThereAreNoMatchingInnerHandlers()\n        {\n            var handlers = new List<IElementHandler>\n            {\n                ClassUnderTest,\n                MockedHandler(false),\n                MockedHandler(false)\n            };\n\n            ElementHandlerWrapper.AllHandlers = () => handlers;\n\n            ClassUnderTest.Matches(_element).ShouldBeFalse();\n            handlers[1].AssertWasCalled(x => x.Matches(_element));\n            handlers[2].AssertWasCalled(x => x.Matches(_element));\n        }\n\n        [Test]\n        public void MatchesOnlyConsidersHandlersAfterItself()\n        {\n            var handlers = new List<IElementHandler>\n            {\n                MockedHandler(true),\n                ClassUnderTest,\n                MockedHandler(false)\n            };\n\n            ElementHandlerWrapper.AllHandlers = () => handlers;\n\n            ClassUnderTest.Matches(_element).ShouldBeFalse();\n            handlers[0].AssertWasNotCalled(x => x.Matches(_element));\n            handlers[2].AssertWasCalled(x => x.Matches(_element));\n        }\n\n        [Test]\n        public void Matches()\n        {\n            var handlers = new List<IElementHandler>\n            {\n                ClassUnderTest,\n                MockedHandler(false),\n                MockedHandler(true),\n                MockedHandler(false)\n            };\n\n            ElementHandlerWrapper.AllHandlers = () => handlers;\n\n            ClassUnderTest.Matches(_element).ShouldBeTrue();\n            handlers[1].AssertWasCalled(x => x.Matches(_element));\n            handlers[2].AssertWasCalled(x => x.Matches(_element));\n            handlers[3].AssertWasNotCalled(x => x.Matches(_element));\n        }\n\n        [Test]\n        public void EnterDataEntersNestedData()\n        {\n            var handlers = new List<IElementHandler>\n            {\n                ClassUnderTest,\n                MockedHandler(false),\n                MockedHandler(true),\n                MockedHandler(false)\n            };\n\n            ElementHandlerWrapper.AllHandlers = () => handlers;\n\n            ClassUnderTest.EnterData(_context, _element, _data);\n\n            handlers[1].AssertWasCalled(x => x.Matches(_element));\n            handlers[2].AssertWasCalled(x => x.Matches(_element));\n            handlers[3].AssertWasNotCalled(x => x.Matches(_element));\n\n            handlers[1].AssertWasNotCalled(x => x.EnterData(_context, _element, _data));\n            handlers[2].AssertWasCalled(x => x.EnterData(_context, _element, _data));\n            handlers[3].AssertWasNotCalled(x => x.EnterData(_context, _element, _data));\n        }\n\n        [Test]\n        public void GetDataGetsNestedData()\n        {\n            var handlers = new List<IElementHandler>\n            {\n                ClassUnderTest,\n                MockedHandler(false),\n                MockedHandler(true),\n                MockedHandler(false)\n            };\n\n            ElementHandlerWrapper.AllHandlers = () => handlers;\n\n            ClassUnderTest.GetData(_context, _element).ShouldBe(Result);\n\n            handlers[1].AssertWasCalled(x => x.Matches(_element));\n            handlers[2].AssertWasCalled(x => x.Matches(_element));\n            handlers[3].AssertWasNotCalled(x => x.Matches(_element));\n\n            handlers[1].AssertWasNotCalled(x => x.GetData(_context, _element));\n            handlers[2].AssertWasCalled(x => x.GetData(_context, _element));\n            handlers[3].AssertWasNotCalled(x => x.GetData(_context, _element));\n        }\n\n        private IElementHandler MockedHandler(bool matches)\n        {\n            var handler = MockedHandler();\n            handler.Stub(x => x.Matches(_element)).Return(matches);\n\n            if (matches)\n            {\n                handler.Stub(x => x.GetData(_context, _element)).Return(Result);\n            }\n\n            return handler;\n        }\n\n        private IElementHandler MockedHandler()\n        {\n            return Services.AddAdditionalMockFor<IElementHandler>();\n        }\n\n        [TestFixtureTearDown]\n        public void TestFixtureTearDown()\n        {\n            ElementHandlerWrapper.ResetAllHandlers();\n        }\n\n        public class TestElementHandlerWrapper : ElementHandlerWrapper\n        {\n            public bool MatchesResult { get; set; }\n\n            public IWebElement Element { get; set; }\n\n            public TestElementHandlerWrapper()\n            {\n                MatchesResult = true;\n            }\n\n            protected override bool WrapperMatches(IWebElement element)\n            {\n                ReferenceEquals(Element, element).ShouldBeTrue();\n                return MatchesResult;\n            }\n\n            public override void EnterData(ISearchContext context, IWebElement element, object data)\n            {\n                EnterDataNested(context, element, data);\n            }\n\n            public override string GetData(ISearchContext context, IWebElement element)\n            {\n                return GetDataNested(context, element);\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/Fixtures/Handlers/SelectElementHandlerTester.cs",
    "content": "using Shouldly;\nusing HtmlTags;\nusing HtmlTags.Extended.Attributes;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\nusing Serenity.Fixtures.Handlers;\n\nnamespace Serenity.Testing.Fixtures.Handlers\n{\n    public class SelectElementHandlerTester<TBrowser> : ScreenManipulationTester<TBrowser> where TBrowser : IBrowserLifecycle, new()\n    {\n        private readonly SelectElementHandler _handler = new SelectElementHandler();\n\n        private const string A = \"a\";\n        private const string B = \"b\";\n        private const string C = \"c\";\n\n        private const string Select1Id = \"select1\";\n        private const string Select2Id = \"select2\";\n        private const string Select3Id = \"select3\";\n        private const string Select4Id = \"select4\";\n\n        private readonly By _select1ById = By.Id(Select1Id);\n        private readonly By _select2ById = By.Id(Select2Id);\n        private readonly By _select3ById = By.Id(Select3Id);\n        private readonly By _select4ById = By.Id(Select4Id);\n\n        protected override void ConfigureDocument(HtmlDocument document)\n        {\n            const string option = \"option\";\n            const string selected = \"selected\";\n            const string valueAttr = \"value\";\n\n            const int two = 2;\n            const int three = 3;\n\n            document.Add(new SelectTag(tag =>\n            {\n                tag.Option(A, A);\n                tag.Option(B, two.ToString()).Id(B);\n                tag.Option(C, three).Id(C);\n\n                tag.SelectByValue(two.ToString());\n            }).Name(Select1Id).Id(Select1Id));\n\n            document.Add(new SelectTag(tag =>\n            {\n                tag.Option(A, A);\n                tag.Option(B, two).Id(B);\n                tag.Option(C, three).Id(C);\n\n            }).Name(Select2Id).Id(Select2Id));\n\n            document.Add(new SelectTag(tag =>\n            {\n                tag.Add(option).Text(A);\n                tag.Add(option).Text(B).Attr(selected, selected);\n                tag.Add(option).Text(C);\n\n            }).Name(Select3Id).Id(Select3Id));\n\n            document.Add(new SelectTag(tag =>\n            {\n                tag.Option(A, A);\n                tag.Option(B, two).Id(B);\n                tag.Option(C, three).Id(C);\n                tag.Option(valueAttr, B).Id(C);\n\n                tag.SelectByValue(two);\n            }).Name(Select4Id).Id(Select4Id));\n        }\n\n        [Test]\n        public void get_data_with_selected_option_with_both_value_and_text()\n        {\n            var select1 = Driver.FindElement(_select1ById);\n            const string result = \"b=2\";\n\n            _handler.GetData(null, select1).ShouldBe(result);\n        }\n\n        [Test]\n        public void get_data_with_selected_option_that_has_only_text()\n        {\n            var select3 = Driver.FindElement(_select3ById);\n            const string result = \"b=b\";\n\n            _handler.GetData(null, select3).ShouldBe(result);\n        }\n\n        [Test]\n        public void match_against_value_is_default()\n        {\n            var select1 = Driver.FindElement(_select1ById);\n            const int expectTrue = 2;\n            const int expectFalse = 3;\n\n            _handler.MatchesData(select1, expectTrue).ShouldBeTrue();\n            _handler.MatchesData(select1, expectFalse).ShouldBeFalse();\n        }\n\n        [Test]\n        public void can_fall_thru_to_checking_against_display_if_value_does_not_exist()\n        {\n            var select1 = Driver.FindElement(_select1ById);\n            const string expectTrue = \"b\";\n            const string expectFalse = \"c\";\n\n            _handler.MatchesData(select1, expectTrue).ShouldBeTrue();\n            _handler.MatchesData(select1, expectFalse).ShouldBeFalse();\n        }\n\n        [Test]\n        public void match_by_display_if_value_does_not_exist()\n        {\n            var select1 = Driver.FindElement(_select1ById);\n            const string expectTrue = \"b\";\n            const string expectFalse = \"c\";\n\n            _handler.MatchesData(select1, expectTrue).ShouldBeTrue();\n            _handler.MatchesData(select1, expectFalse).ShouldBeFalse();\n        }\n\n        [Test]\n        public void does_not_fall_thru_to_display_if_the_expected_value_is_a_value()\n        {\n            var select4 = Driver.FindElement(_select4ById);\n            const string expectFalse = \"b\";\n\n            _handler.MatchesData(select4, expectFalse).ShouldBeFalse();\n        }\n\n        [Test]\n        public void matches_has_to_be_false_when_nothing_is_selected()\n        {\n            var nothingSelectedElement = Driver.FindElement(_select2ById);\n            const string expectFalse = \"anything\";\n\n            _handler.MatchesData(nothingSelectedElement, expectFalse).ShouldBeFalse();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Serenity.Testing/Fixtures/Handlers/TextAreaElementHandlerTester.cs",
    "content": "﻿using Shouldly;\nusing HtmlTags;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\nusing Serenity.Fixtures.Handlers;\n\nnamespace Serenity.Testing.Fixtures.Handlers\n{\n    public class TextAreaElementHandlerTester<TBrowser> : ScreenManipulationTester<TBrowser> where TBrowser : IBrowserLifecycle, new()\n    {\n        private readonly TextAreaElementHandler _handler = new TextAreaElementHandler();\n\n        private const string TheText = \"Test data within the textarea\";\n        private const string Id = \"textbox1\";\n        private readonly By _byId = By.Id(Id);\n\n        protected override void ConfigureDocument(HtmlDocument document)\n        {\n            document.Add(new HtmlTag(\"textarea\", tag =>\n            {\n                tag.Id(Id);\n                tag.Text(TheText);\n            }));\n        }\n\n        [Test]\n        public void should_be_able_to_read_write()\n        {\n            var textarea1 = Driver.FindElement(_byId);\n            _handler.EnterData(null, textarea1, \"New Data\");\n            _handler.GetData(null, textarea1).ShouldBe(\"New Data\");\n        }\n\n        [Test]\n        public void clearing_data_should_return_clear_and_not_original_text()\n        {\n            var textarea1 = Driver.FindElement(_byId);\n            _handler.EnterData(null, textarea1, \"\");\n            _handler.GetData(null, textarea1).ShouldBe(\"\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/Serenity.Testing/Fixtures/Handlers/TextboxElementHandlerTester.cs",
    "content": "﻿using Shouldly;\nusing HtmlTags;\nusing HtmlTags.Extended.Attributes;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\nusing Serenity.Fixtures.Handlers;\n\nnamespace Serenity.Testing.Fixtures.Handlers\n{\n    public class TextboxElementHandlerTester<TBrowser> : ScreenManipulationTester<TBrowser> where TBrowser : IBrowserLifecycle, new()\n    {\n        private readonly TextboxElementHandler _handler = new TextboxElementHandler();\n\n        private const string TheText = \"(100)444-9898\";\n\n        private const string TextboxId = \"textbox1\";\n        private const string SelectId = \"select1\";\n        private const string SubmitId = \"submit1\";\n        private const string PasswordTextboxId = \"pwdtextbox1\";\n\n        private readonly By _textboxById = By.Id(TextboxId);\n        private readonly By _selectById = By.Id(SelectId);\n        private readonly By _submitById = By.Id(SubmitId);\n        private readonly By _passwordTextboxById = By.Id(PasswordTextboxId);\n\n        protected override void ConfigureDocument(HtmlDocument document)\n        {\n            document.Add(new HtmlTag(\"input\", tag =>\n            {\n                tag.Value(TheText);\n                tag.Id(TextboxId);\n            }));\n\n            document.Add(new SelectTag(tag =>\n            {\n                tag.Id(SelectId);\n            }));\n\n            document.Add(new HtmlTag(\"input\", tag =>\n            {\n                tag.Value(\"Submit button\");\n                tag.Id(SubmitId);\n                tag.Attr(\"type\", \"submit\");\n            }));\n\n            document.Add(new HtmlTag(\"input\", tag =>\n            {\n                tag.Value(TheText);\n                tag.Id(PasswordTextboxId);\n                tag.Attr(\"type\", \"password\");\n            }));\n        }\n\n        [Test]\n        public void should_be_able_to_clear_original_text()\n        {\n            var textbox1 = Driver.FindElement(_textboxById);\n            _handler.EraseData(null, textbox1);\n            _handler.GetData(null, textbox1).ShouldBeEmpty();\n        }\n\n        [Test]\n        public void should_be_able_to_clear_original_text_password()\n        {\n            var textbox1 = Driver.FindElement(_passwordTextboxById);\n            _handler.EraseData(null, textbox1);\n            _handler.GetData(null, textbox1).ShouldBeEmpty();\n        }\n\n        [Test]\n        public void should_be_able_to_get_text_from_field()\n        {\n            var textbox1 = Driver.FindElement(_textboxById);\n            _handler.GetData(null, textbox1).ShouldBe(TheText);\n        }\n\n        [Test]\n        public void should_be_able_to_get_text_from_field_password()\n        {\n            var textbox1 = Driver.FindElement(_passwordTextboxById);\n            _handler.GetData(null, textbox1).ShouldBe(TheText);\n        }\n\n        [Test]\n        public void should_be_able_to_write_to_a_clean_field()\n        {\n            const string input = \"Index There\";\n            var textbox1 = Driver.FindElement(_textboxById);\n            _handler.EnterData(null, textbox1, input);\n            _handler.GetData(null, textbox1).ShouldBe(input);\n        }\n\n        [Test]\n        public void should_be_able_to_write_to_a_clean_field_password()\n        {\n            const string input = \"Index There\";\n            var textbox1 = Driver.FindElement(_passwordTextboxById);\n            _handler.EnterData(null, textbox1, input);\n            _handler.GetData(null, textbox1).ShouldBe(input);\n        }\n\n        [Test]\n        public void should_match_textbox()\n        {\n            var element = Driver.FindElement(_textboxById);\n            _handler.Matches(element).ShouldBeTrue();\n        }\n\n        [Test]\n        public void should_not_match_select()\n        {\n            var element = Driver.FindElement(_selectById);\n            _handler.Matches(element).ShouldBeFalse();\n        }\n\n        [Test]\n        public void should_not_match_submit()\n        {\n            var element = Driver.FindElement(_submitById);\n            _handler.Matches(element).ShouldBeFalse();\n        }\n\n        [Test]\n        public void should_match_password_textbox()\n        {\n            var element = Driver.FindElement(_passwordTextboxById);\n            _handler.Matches(element).ShouldBeTrue();\n        }\n    }\n}\n"
  },
  {
    "path": "src/Serenity.Testing/Fixtures/ScreenFixtureCommonGrammarsTester.cs",
    "content": "using System;\nusing FubuCore;\nusing FubuMVC.Core.Endpoints;\nusing FubuMVC.Core.Urls;\nusing HtmlTags;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\nusing Serenity.Fixtures;\nusing StoryTeller;\nusing StoryTeller.Engine;\n\n\nnamespace Serenity.Testing.Fixtures\n{\n    [TestFixture(typeof(FirefoxBrowser))]\n    [TestFixture(typeof(ChromeBrowser))]\n    // TODO: Uncomment when we setup the IE Browser\n    // [TestFixture(typeof(InternetExplorerBrowser))]\n    [TestFixture(typeof(PhantomBrowser))]\n    public abstract class ScreenManipulationTester<TBrowser> : ScreenFixture where TBrowser : IBrowserLifecycle, new()\n    {\n        [TestFixtureSetUp]\n        public void FixtureSetup()\n        {\n            var lifecycle = BrowserForTesting.Use<TBrowser>();\n\n            var simpleExecutionContext = new SimpleExecutionContext();\n            Context = new SpecContext(null, new Timings(), new NulloResultObserver(), new StopConditions(), simpleExecutionContext);\n            \n\n            var applicationUnderTest = new StubbedApplicationUnderTest\n            {\n                Browser = lifecycle\n            };\n\n            applicationUnderTest.Driver.Manage().Timeouts().SetScriptTimeout(TimeSpan.FromMilliseconds(1000));\n\n            simpleExecutionContext.Register<IApplicationUnderTest>(applicationUnderTest);\n\n            SetUp();\n        }\n\n        [SetUp]\n        public void BeforeTesting()\n        {\n            new FileSystem().DeleteFile(\"screenfixture.htm\");\n\n            var document = new HtmlDocument();\n            ConfigureDocument(document);\n\n            document.WriteToFile(\"screenfixture.htm\");\n\n            Driver.Navigate().GoToUrl(\"file:///\" + \"screenfixture.htm\".ToFullPath());\n            BeforeEach();\n        }\n\n        protected abstract void ConfigureDocument(HtmlDocument document);\n        protected virtual void BeforeEach() { }\n\n        private class StubbedApplicationUnderTest : IApplicationUnderTest\n        {\n            public string Name { get; set; }\n            public IUrlRegistry Urls { get; set; }\n\n            public IWebDriver Driver { get { return Browser.Driver; } }\n\n            public string RootUrl { get; set; }\n            public IServiceLocator Services { get; set; }\n            public IBrowserLifecycle Browser { get; set; }\n\n            public void Ping()\n            {\n                throw new System.NotSupportedException();\n            }\n\n            public void Teardown()\n            {\n                throw new System.NotSupportedException();\n            }\n\n            public NavigationDriver Navigation { get; set; }\n\n            public EndpointDriver Endpoints()\n            {\n                throw new System.NotSupportedException();\n            }\n        }\n    }\n\n    public static class TestingExtensions\n    {\n\n\n        public static void ShouldEqual(this Counts counts, int rights, int wrongs, int exceptions, int syntaxErrors)\n        {\n            var expected = new Counts\n                           {\n                               Rights = rights,\n                               Wrongs = wrongs,\n                               Exceptions = exceptions,\n                               SyntaxErrors = syntaxErrors\n                           };\n\n            Assert.AreEqual(expected, counts);\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/FubuMvcSystemTester.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.StructureMap;\nusing Shouldly;\nusing KayakTestApplication;\nusing NUnit.Framework;\nusing StructureMap;\n\nnamespace Serenity.Testing\n{\n    [TestFixture]\n    public class FubuMvcSystemTester\n    {\n        [Test]\n        public void register_a_remote_subsystem()\n        {\n            var system = new FubuMvcSystem(() => null);\n            system.AddRemoteSubSystem(\"foo\", x => { });\n\n            system.RemoteSubSystemFor(\"foo\").ShouldNotBeNull();\n            system.SubSystems.OfType<RemoteSubSystem>().Single().ShouldBeOfType<RemoteSubSystem>();\n        }\n\n        [Test]\n        public void registers_the_IRemoveSubsystems_with_the_container()\n        {\n            //FubuApplication.RootPath = \".\".ToFullPath();\n\n            using (var system = new FubuMvcSystem<TargetApplication>())\n            {\n                using (var context = system.CreateContext())\n                {\n                    context.GetService<IRemoteSubsystems>()\n                        .ShouldBeTheSameAs(system);\n                }\n            }\n        }\n\n\n        [Test]\n        public void modify_the_underlying_container()\n        {\n            using (var system = new FubuMvcSystem<TargetApplication>())\n            {\n                system.ModifyContainer(x => x.For<IColor>().Use<Green>());\n\n                system.CreateContext().GetService<IColor>()\n                    .ShouldBeOfType<Green>();\n            }\n        }\n\n        [Test]\n        public void uses_explicit_physical_path_if_if_exists()\n        {\n            using (var system = new FubuMvcSystem<TargetApplication>(physicalPath: \"c:\\\\foo\"))\n            {\n                system.Settings.PhysicalPath.ShouldBe(\"c:\\\\foo\");\n            }\n        }\n\n        [Test]\n        public void parallel_path()\n        {\n            using (var system = new FubuMvcSystem<KayakApplication>(\"foo\"))\n            {\n                // assembly name\n                system.Settings.PhysicalPath.ShouldEndWith(\"foo\");\n            }\n        }\n\n        [Test]\n        public void can_recycle()\n        {\n            using (var system = new FubuMvcSystem<TargetApplication>())\n            {\n                using (var context = system.CreateContext())\n                {\n                    context.GetService<IApplicationUnderTest>().ShouldNotBeNull();\n                    system.Recycle();\n                    context.GetService<IApplicationUnderTest>().ShouldNotBeNull();\n                }\n\n                using (var context = system.CreateContext())\n                {\n                    context.GetService<IApplicationUnderTest>().ShouldNotBeNull();\n                    system.Recycle();\n                    context.GetService<IApplicationUnderTest>().ShouldNotBeNull();\n                }\n            }\n        }\n    }\n\n\n    public class TargetApplication : IApplicationSource\n    {\n        public FubuApplication BuildApplication(string directory)\n        {\n            var container = new Container(x => { x.For<IColor>().Use<Red>(); });\n            throw new Exception(\"NWO\");\n            //return FubuApplication.Basic(container);\n        }\n    }\n\n    public interface IColor\n    {\n    }\n\n    public class Red : IColor\n    {\n    }\n\n    public class Green : IColor\n    {\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/HTMLPage1.htm",
    "content": "﻿<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n<html>\n\t<head>\n\t\t<title></title>\n\t</head>\n\t<body>\n\t    <ul>\n            <li><span>folder1</span>\n                <ul>\n                    <li>file1</li>\n                    <li>file2</li>\n                    <li>file3</li>\n                </ul>\n            </li>\n            <li><span>folder1</span>\n                <ul>\n                    <li>file1</li>\n                    <li>file2</li>\n                    <li>file3</li>\n                </ul>\n            </li>\n\n        </ul>\n\n        <input id=\"theText\" value=\"the value\" />\n\t</body>\n</html>"
  },
  {
    "path": "src/Serenity.Testing/Kayak.application.config",
    "content": "ApplicationSettings.ApplicationSourceName=KayakTestApplication.KayakApplication, KayakTestApplication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\nApplicationSettings.Port=5500\nApplicationSettings.Name=Kayak\nApplicationSettings.RootUrl=http://localhost/kayak\nApplicationSettings.PhysicalPath=../../../KayakTestApplication\n"
  },
  {
    "path": "src/Serenity.Testing/KayakApplication.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing FubuMVC.Core;\nusing FubuMVC.Core.StructureMap;\nusing StructureMap;\n\nnamespace KayakTestApplication\n{\n    public class KayakApplication : IApplicationSource\n    {\n        public FubuApplication BuildApplication(string directory)\n        {\n            return FubuApplication\n                .For<KayakRegistry>()\n                ;\n        }\n    }\n\n    public class KayakRegistry : FubuRegistry\n    {\n        public KayakRegistry()\n        {\n            Actions.IncludeClassesSuffixedWithController();\n            Actions.IncludeType<NameModelEndpoint>();\n        }\n    }\n\n    public class NameModelEndpoint\n    {\n        public NameModel get_name_model(NameModel input)\n        {\n            return input;\n        }\n    }\n\n    public class NameModel\n    {\n        public string Name { get; set; }\n    }\n\n    public class HomeEndpoint\n    {\n        public string Index()\n        {\n            return \"Hello, it's \" + DateTime.Now;\n        }\n\n        public NameModel get_say_Name(NameModel model)\n        {\n            return model;\n        }\n\n        public Dictionary<string, object> post_name(NameModel model)\n        {\n            return new Dictionary<string, object>{{\"name\", model.Name}};\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/MessageWatching_over_remote_AppDomain_integration_tester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Services.Messaging.Tracking;\nusing FubuMVC.Core.StructureMap;\nusing Shouldly;\nusing NUnit.Framework;\nusing RemoteService;\n\nnamespace Serenity.Testing\n{\n    [TestFixture]\n    public class MessageWatching_over_remote_AppDomain_integration_tester\n    {\n        [Test]\n        public void listens_and_finishes_after_receiving_the_all_clear()\n        {\n            // trying to get the asset pipeline to shut up about\n            // non-existent assets\n            var settings = new ApplicationSettings\n            {\n                PhysicalPath = Environment.CurrentDirectory\n                    .ParentDirectory().ParentDirectory().ParentDirectory()\n                    .AppendPath(\"RemoteService\")\n            };\n\n            var system = new FubuMvcSystem(() => FubuRuntime.Basic());\n\n            system.AddRemoteSubSystem(\"Remote\", x => { x.UseParallelServiceDirectory(\"RemoteService\"); });\n\n            using (var context = system.CreateContext())\n            {\n                system.StartListeningForMessages();\n                var message = new RemoteGo();\n                MessageHistory.Record(MessageTrack.ForSent(message));\n\n                var waitForWorkToFinish =\n                    MessageHistory.WaitForWorkToFinish(\n                        () => { system.RemoteSubSystemFor(\"Remote\").Runner.SendRemotely(message); }, 30000);\n                waitForWorkToFinish.ShouldBeTrue();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/NavigationDriverTester.cs",
    "content": "using NUnit.Framework;\nusing Shouldly;\n\nnamespace Serenity.Testing\n{\n    [TestFixture]\n    public class NavigationDriverTester\n    {\n        [Test]\n        public void by_default_uses_a_nullo_after_navigation()\n        {\n            var driver = new NavigationDriver(null);\n            driver.AfterNavigation.ShouldBeOfType<NulloAfterNavigation>();\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Serenity.Testing\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Microsoft\")]\n[assembly: AssemblyProduct(\"Serenity.Testing\")]\n[assembly: AssemblyCopyright(\"Copyright © Microsoft 2011\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"084e65fa-2fdf-446a-89c6-ca64452f3893\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/Serenity.Testing/Serenity.Testing.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{5E69E72A-B92F-47BE-B7F7-6E6A926EC90F}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Serenity.Testing</RootNamespace>\n    <AssemblyName>Serenity.Testing</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"nunit.framework\">\n      <HintPath>..\\packages\\NUnit\\lib\\nunit.framework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"BrowserForTesting.cs\" />\n    <Compile Include=\"BrowserType_selection_tester.cs\" />\n    <Compile Include=\"FakeSystem\\SampleSystem.cs\" />\n    <Compile Include=\"Fixtures\\BrowserIsAtTester.cs\" />\n    <Compile Include=\"Fixtures\\Grammars\\SimpleElementGestureTester.cs\" />\n    <Compile Include=\"Fixtures\\Handlers\\ElementHandlerWrapperTester.cs\" />\n    <Compile Include=\"Fixtures\\Handlers\\TextboxElementHandlerTester.cs\" />\n    <Compile Include=\"KayakApplication.cs\" />\n    <Compile Include=\"NavigationDriverTester.cs\" />\n    <Compile Include=\"WebDriver\\Benchmarks\\WebDriverBenchmarkFiveElementTests.cs\" />\n    <Compile Include=\"WebDriver\\Benchmarks\\WebDriverBenchmarkGetAttributeTests.cs\" />\n    <Compile Include=\"WebDriver\\ByJQuerySamples.cs\" />\n    <Compile Include=\"WebDriver\\ByJqueryTester.cs\" />\n    <Compile Include=\"WebDriver\\EmbeddedDrivers\\EmbeddedDriverExtractorTester.cs\" />\n    <Compile Include=\"WebDriver\\JavaScriptBuilders\\DefaultJavaScriptBuilderTester.cs\" />\n    <Compile Include=\"WebDriver\\JavaScriptBuilders\\NullObjectJavaScriptBuilderTester.cs\" />\n    <Compile Include=\"WebDriver\\JavaScriptBuilders\\StringJavaScriptBuildertTester.cs\" />\n    <Compile Include=\"WebDriver\\JavaScriptBuilders\\WebElementJavaScriptBuilderTester.cs\" />\n    <Compile Include=\"WebDriver\\JavascriptReferenceErrorTests.cs\" />\n    <Compile Include=\"WebDriver\\JavaScriptTester.cs\" />\n    <Compile Include=\"WebDriver\\JavaScriptByFindTester.cs\" />\n    <Compile Include=\"FakeSystem\\IntegratedTester.cs\" />\n    <Compile Include=\"Fixtures\\Handlers\\CheckboxHandlerTester.cs\" />\n    <Compile Include=\"Fixtures\\Handlers\\TextAreaElementHandlerTester.cs\" />\n    <Compile Include=\"Fixtures\\ScreenFixtureCommonGrammarsTester.cs\" />\n    <Compile Include=\"Fixtures\\Handlers\\SelectElementHandlerTester.cs\" />\n    <Compile Include=\"FubuMvcSystemTester.cs\" />\n    <Compile Include=\"MessageWatching_over_remote_AppDomain_integration_tester.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"WaitTester.cs\" />\n    <Compile Include=\"WebDriverSettingsTester.cs\" />\n    <Compile Include=\"WebDriver\\JQueryTester.cs\" />\n    <Compile Include=\"WebDriver\\SearchContextToJavaScriptExecutorTester.cs\" />\n    <Compile Include=\"WebDriver\\Benchmarks\\WebDriverBenchmarkBase.cs\" />\n    <Compile Include=\"WebDriver\\Benchmarks\\WebDriverBenchmarkOneElementTests.cs\" />\n    <Compile Include=\"WebDriver\\WebDriverExtensionsTester.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\FubuMVC.Spark\\FubuMVC.Spark.csproj\">\n      <Project>{9d6bf559-6461-4eac-bb16-f976ff43e8da}</Project>\n      <Name>FubuMVC.Spark</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\FubuMVC.Tests\\FubuMVC.Tests.csproj\">\n      <Project>{feb91f9f-ece2-480c-b39c-a44bbf1f7b01}</Project>\n      <Name>FubuMVC.Tests</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\RemoteService\\RemoteService.csproj\">\n      <Project>{F8186EC7-237A-4C24-AA48-1CFCDD099A8D}</Project>\n      <Name>RemoteService</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Serenity\\Serenity.csproj\">\n      <Project>{900A0419-3579-4DAE-85BE-71A3E4B34239}</Project>\n      <Name>Serenity</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"get_say_Name.spark\" />\n    <None Include=\"Serenity.Testing.dll.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n      <SubType>Designer</SubType>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"HTMLPage1.htm\" />\n    <Content Include=\"jquery-2.0.3.min.js\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Dynamic.Runtime;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Runtime.Serialization.Primitives;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Castle.Core\">\n          <HintPath>..\\..\\packages\\Castle.Core\\lib\\net35\\Castle.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"Castle.Core\">\n          <HintPath>..\\..\\packages\\Castle.Core\\lib\\net40-client\\Castle.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Castle.Core\">\n          <HintPath>..\\..\\packages\\Castle.Core\\lib\\net45\\Castle.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"Castle.Core\">\n          <HintPath>..\\..\\packages\\Castle.Core\\lib\\sl4\\Castle.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0'\">\n      <ItemGroup>\n        <Reference Include=\"Castle.Core\">\n          <HintPath>..\\..\\packages\\Castle.Core\\lib\\sl5\\Castle.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0' Or $(TargetFrameworkVersion) == 'v3.5' Or $(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"DotNetZip\">\n          <HintPath>..\\..\\packages\\DotNetZip\\lib\\net20\\DotNetZip.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"HtmlTags\">\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http.Formatting\">\n          <HintPath>..\\..\\packages\\Microsoft.AspNet.WebApi.Client\\lib\\net40\\System.Net.Http.Formatting.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Web.Http\">\n          <HintPath>..\\..\\packages\\Microsoft.AspNet.WebApi.Core\\lib\\net40\\System.Web.Http.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Web.Http.SelfHost\">\n          <HintPath>..\\..\\packages\\Microsoft.AspNet.WebApi.SelfHost\\lib\\net40\\System.Web.Http.SelfHost.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http.WebRequest\">\n          <HintPath>..\\..\\packages\\Microsoft.Net.Http\\lib\\net40\\System.Net.Http.WebRequest.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Net.Http\">\n          <HintPath>..\\..\\packages\\Microsoft.Net.Http\\lib\\net40\\System.Net.Http.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http\">\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Net.Http.WebRequest\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Owin\">\n          <HintPath>..\\..\\packages\\Microsoft.Owin\\lib\\net45\\Microsoft.Owin.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Owin.Host.HttpListener\">\n          <HintPath>..\\..\\packages\\Microsoft.Owin.Host.HttpListener\\lib\\net45\\Microsoft.Owin.Host.HttpListener.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Owin.Hosting\">\n          <HintPath>..\\..\\packages\\Microsoft.Owin.Hosting\\lib\\net45\\Microsoft.Owin.Hosting.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Primitives\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net20\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net35\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net40\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\netstandard1.0\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0') Or ($(TargetFrameworkProfile) == 'Profile5') Or ($(TargetFrameworkProfile) == 'Profile6') Or ($(TargetFrameworkProfile) == 'Profile14') Or ($(TargetFrameworkProfile) == 'Profile19') Or ($(TargetFrameworkProfile) == 'Profile24') Or ($(TargetFrameworkProfile) == 'Profile37') Or ($(TargetFrameworkProfile) == 'Profile42') Or ($(TargetFrameworkProfile) == 'Profile47') Or ($(TargetFrameworkProfile) == 'Profile92') Or ($(TargetFrameworkProfile) == 'Profile102') Or ($(TargetFrameworkProfile) == 'Profile136') Or ($(TargetFrameworkProfile) == 'Profile147') Or ($(TargetFrameworkProfile) == 'Profile158') Or ($(TargetFrameworkProfile) == 'Profile225') Or ($(TargetFrameworkProfile) == 'Profile240') Or ($(TargetFrameworkProfile) == 'Profile255') Or ($(TargetFrameworkProfile) == 'Profile328') Or ($(TargetFrameworkProfile) == 'Profile336') Or ($(TargetFrameworkProfile) == 'Profile344')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net40+sl5+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'MonoAndroid') Or ($(TargetFrameworkIdentifier) == 'MonoTouch') Or ($(TargetFrameworkIdentifier) == 'Xamarin.iOS') Or ($(TargetFrameworkIdentifier) == 'Xamarin.Mac') Or ($(TargetFrameworkProfile) == 'Profile7') Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile32') Or ($(TargetFrameworkProfile) == 'Profile44') Or ($(TargetFrameworkProfile) == 'Profile78') Or ($(TargetFrameworkProfile) == 'Profile111') Or ($(TargetFrameworkProfile) == 'Profile151') Or ($(TargetFrameworkProfile) == 'Profile157') Or ($(TargetFrameworkProfile) == 'Profile259')\">\n      <ItemGroup>\n        <Reference Include=\"Newtonsoft.Json\">\n          <HintPath>..\\..\\packages\\Newtonsoft.Json\\lib\\portable-net45+wp80+win8+wpa81\\Newtonsoft.Json.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Owin\">\n          <HintPath>..\\..\\packages\\Owin\\lib\\net40\\Owin.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0' Or $(TargetFrameworkVersion) == 'v3.5' Or $(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Rhino.Mocks\">\n          <HintPath>..\\..\\packages\\RhinoMocks\\lib\\net\\Rhino.Mocks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"ThoughtWorks.Selenium.Core\">\n          <HintPath>..\\..\\packages\\Selenium.RC\\lib\\net35\\ThoughtWorks.Selenium.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"ThoughtWorks.Selenium.Core\">\n          <HintPath>..\\..\\packages\\Selenium.RC\\lib\\net40\\ThoughtWorks.Selenium.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"WebDriver.Support\">\n          <HintPath>..\\..\\packages\\Selenium.Support\\lib\\net35\\WebDriver.Support.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"WebDriver.Support\">\n          <HintPath>..\\..\\packages\\Selenium.Support\\lib\\net40\\WebDriver.Support.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"WebDriver\">\n          <HintPath>..\\..\\packages\\Selenium.WebDriver\\lib\\net35\\WebDriver.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"WebDriver\">\n          <HintPath>..\\..\\packages\\Selenium.WebDriver\\lib\\net40\\WebDriver.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Selenium.WebDriverBackedSelenium\">\n          <HintPath>..\\..\\packages\\Selenium.WebDriverBackedSelenium\\lib\\net35\\Selenium.WebDriverBackedSelenium.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Selenium.WebDriverBackedSelenium\">\n          <HintPath>..\\..\\packages\\Selenium.WebDriverBackedSelenium\\lib\\net40\\Selenium.WebDriverBackedSelenium.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Shouldly\">\n          <HintPath>..\\..\\packages\\Shouldly\\lib\\net35\\Shouldly.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Shouldly\">\n          <HintPath>..\\..\\packages\\Shouldly\\lib\\net40\\Shouldly.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StoryTeller\">\n          <HintPath>..\\..\\packages\\Storyteller\\lib\\net45\\StoryTeller.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.AppContext\">\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Buffers\">\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Console\">\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tools\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.0\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.3\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Calendars\">\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Extensions\">\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression\">\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression.ZipFile\">\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http\">\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Primitives\">\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Extensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Primitives\">\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Resources.ResourceManager\">\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Handles\">\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Loader\">\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Numerics\">\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.0\\System.Runtime.Serialization.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Serialization.Primitives\">\n          <HintPath>..\\..\\packages\\System.Runtime.Serialization.Primitives\\ref\\netstandard1.3\\System.Runtime.Serialization.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Cng\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Csp\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Timer\">\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/Serenity.Testing/Serenity.Testing.dll.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" />\n        <bindingRedirect oldVersion=\"1.0.0.0-4.0.8.0\" newVersion=\"4.5.0.0\" />\n        <bindingRedirect oldVersion=\"4.0.6.0\" newVersion=\"4.5.0.0\" />\n      </dependentAssembly>\n\n      <dependentAssembly>\n        <assemblyIdentity name=\"StructureMap\"\n                          publicKeyToken=\"e60ad81abae3c223\"\n                           />\n        <!-- Assembly versions can be redirected in application, publisher policy, or machine configuration files. -->\n        <bindingRedirect oldVersion=\"2.6.2.0\"\n                         newVersion=\"2.6.3.0\"/>\n      </dependentAssembly>\n\n    </assemblyBinding>\n\n\n  </runtime>\n</configuration>"
  },
  {
    "path": "src/Serenity.Testing/WaitTester.cs",
    "content": "﻿using System;\nusing Shouldly;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\n\nnamespace Serenity.Testing\n{\n    [TestFixture]\n    public class WaitTester\n    {\n        [Test]\n        public void immediately_true()\n        {\n            Wait.Until(() => true).\n                ShouldBeTrue();\n        }\n\n        [Test]\n        public void always_going_to_be_false()\n        {\n            Wait.Until(() => false, timeoutInMilliseconds:1000)\n                .ShouldBeFalse();\n        }\n\n        [Test]\n        public void eventually_true()\n        {\n            int i = 0;\n\n            Wait.Until(() => {\n                i++;\n                return i > 4;\n            })\n            .ShouldBeTrue();\n        }\n\n        [Test]\n        public void not_true_within_timeout()\n        {\n            int i = 0;\n\n            Wait.Until(() => {\n                i++;\n                return i > 4;\n            }, timeoutInMilliseconds: 1000)\n            .ShouldBeFalse();\n\n            i.ShouldBeGreaterThan(1);\n        }\n\n        [Test]\n        public void immediately_true_many_conditions()\n        {\n            Wait.Until(new Func<bool>[]\n            {\n                () => true,\n                () => true,\n                () => true,\n                () => true\n            }).ShouldBeTrue();\n        }\n\n        [Test]\n        public void false_prevents_follow_on_conditions()\n        {\n            Wait.Until(new Func<bool>[]\n            {\n                () => true,\n                () => false,\n                () => { throw new Exception(\"Should never reach this exception\"); }\n            }, timeoutInMilliseconds: 1000).ShouldBeFalse();\n        }\n\n        [Test]\n        public void eventually_true_many_conditions()\n        {\n            var i = 0;\n\n            Wait.Until(new Func<bool>[]\n            {\n                () => { i++; return i > 2; },\n                () => { i++; return i > 4; },\n                () => { i++; return i > 6; },\n                () => { i++; return i > 8; },\n            }).ShouldBeTrue();\n        }\n\n        [Test]\n        public void not_true_within_timeout_many_conditions()\n        {\n            var i = 0;\n\n            Wait.Until(new Func<bool>[]\n            {\n                () => { i++; return i > 4; },\n                () => { i++; return i > 8; },\n                () => { i++; return i > 12; },\n                () => { i++; return i > 16; },\n            }).ShouldBeFalse();\n\n            i.ShouldBeGreaterThan(4);\n        }\n\n        [Test]\n        public void immediately_true_generic()\n        {\n            var obj = new object();\n            Wait.For(() => obj).ShouldBeTheSameAs(obj);\n        }\n\n        [Test]\n        public void throws_timeout_exception_generic()\n        {\n            var result = new object();\n            Exception<WebDriverTimeoutException>.ShouldBeThrownBy(() =>\n            {\n                result = Wait.For<object>(() => null, timeout: TimeSpan.FromSeconds(1));\n            });\n\n            result.ShouldNotBeNull();\n        }\n\n        [Test]\n        public void eventually_true_generic()\n        {\n            var i = 0;\n            var obj = new object();\n\n            Wait.For(() => {\n                i++;\n                return i > 4 ? obj : null;\n            }).ShouldBeTheSameAs(obj);\n\n            i.ShouldBeGreaterThan(4);\n        }\n\n        [Test]\n        public void not_true_within_timeout_generic()\n        {\n            var i = 0;\n            var result = new object();\n\n            Exception<WebDriverTimeoutException>.ShouldBeThrownBy(() =>\n            {\n                result = Wait.For(() =>\n                {\n                    i++;\n                    return i > 4 ? new object() : null;\n                }, timeout: TimeSpan.FromSeconds(1));\n            });\n\n            i.ShouldBeGreaterThan(1);\n            result.ShouldNotBeNull();\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/WebDriver/Benchmarks/WebDriverBenchmarkBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing NUnit.Framework;\nusing Serenity.Testing.Fixtures;\n\nnamespace Serenity.Testing.WebDriver.Benchmarks\n{\n    public abstract class WebDriverBenchmarkBase<TBrowser, TData> : ScreenManipulationTester<TBrowser> where TBrowser : IBrowserLifecycle, new()\n    {\n        [Explicit]\n        [TestCaseSource(\"Cases\")]\n        public void Benchmark(object data)\n        {\n            IList<TimeSpan> times = new List<TimeSpan>();\n            var dataCast = (TData) data;\n\n            var totalTime = Stopwatch.StartNew();\n\n            for (var i = 0; i < 250; i++)\n            {\n                var stopwatch = Stopwatch.StartNew();\n                ActionToBenchmark(dataCast);\n                stopwatch.Stop();\n                times.Add(stopwatch.Elapsed);\n            }\n\n            totalTime.Stop();\n\n            var averageTime = TimeSpan.FromTicks((long) times.Select(x => x.Ticks).Average());\n\n            Console.WriteLine(\"Average: {0} [Milliseconds: {1:N2}]\", averageTime, averageTime.TotalMilliseconds);\n            Console.WriteLine(\"Total: {0}\", totalTime.Elapsed);\n        }\n\n        protected abstract void ActionToBenchmark(TData data);\n\n        public abstract IEnumerable<TestCaseData> Cases();\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/WebDriver/Benchmarks/WebDriverBenchmarkFiveElementTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuCore;\nusing HtmlTags;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\n\nnamespace Serenity.Testing.WebDriver.Benchmarks\n{\n    public class WebDriverBenchmarkFiveElementTests<TBrowser> : WebDriverBenchmarkBase<TBrowser, By> where TBrowser : IBrowserLifecycle, new()\n    {\n        private const string InputClass = \"some-input-class\";\n        private const string InputName = \"somename\";\n\n        protected override void ConfigureDocument(HtmlDocument document)\n        {\n            for (var i = 0; i < 5; i++)\n            {\n                document.Add(new HtmlTag(\"input\", tag =>\n                {\n                    tag.AddClass(InputClass);\n                    tag.Attr(\"name\", InputName);\n                }));\n            }\n\n            document.ReferenceJavaScriptFile(\"file:///\" + \"jquery-2.0.3.min.js\".ToFullPath());\n        }\n\n        protected override void ActionToBenchmark(By selector)\n        {\n            var elements = Driver.FindElements(selector);\n        }\n\n        public override IEnumerable<TestCaseData> Cases()\n        {\n            yield return new TestCaseData(By.ClassName(InputClass));\n            yield return new TestCaseData(By.CssSelector(\".{0}\".ToFormat(InputClass)));\n            yield return new TestCaseData((By) Serenity.WebDriver.By.jQuery(\".{0}\".ToFormat(InputClass)));\n            yield return new TestCaseData(By.Name(InputName));\n            yield return new TestCaseData(By.CssSelector(\"input[name=\\\"{0}\\\"]\".ToFormat(InputName)));\n            yield return new TestCaseData((By) Serenity.WebDriver.By.jQuery(\"input[name='{0}']\".ToFormat(InputName)));\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/WebDriver/Benchmarks/WebDriverBenchmarkGetAttributeTests.cs",
    "content": "using System.Collections.Generic;\nusing FubuCore;\nusing HtmlTags;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\n\nnamespace Serenity.Testing.WebDriver.Benchmarks\n{\n    public class WebDriverBenchmarkGetAttributeTests<TBrowser> : WebDriverBenchmarkBase<TBrowser, By> where TBrowser : IBrowserLifecycle, new()\n    {\n        private const string InputId = \"inputid\";\n        private const string InputClass = \"some-input-class\";\n        private const string InputName = \"somename\";\n        private const string Attribute = \"data-interesting\";\n\n        protected override void ConfigureDocument(HtmlDocument document)\n        {\n            document.Add(new HtmlTag(\"input\", tag =>\n            {\n                tag.Id(InputId);\n                tag.AddClass(InputClass);\n                tag.Attr(\"name\", InputName);\n                tag.Attr(Attribute, \"wow that is interesting\");\n            }));\n\n            document.ReferenceJavaScriptFile(\"file:///\" + \"jquery-2.0.3.min.js\".ToFullPath());\n        }\n\n        protected override void ActionToBenchmark(By selector)\n        {\n            var attribute = Driver.FindElement(selector).GetAttribute(Attribute);\n        }\n\n        public override IEnumerable<TestCaseData> Cases()\n        {\n            yield return new TestCaseData(By.Id(InputId));\n            yield return new TestCaseData(By.CssSelector(\"#{0}\".ToFormat(InputId))); \n            yield return new TestCaseData((By) Serenity.WebDriver.By.jQuery(\"#{0}\".ToFormat(InputId)));\n            yield return new TestCaseData(By.ClassName(InputClass));\n            yield return new TestCaseData(By.CssSelector(\".{0}\".ToFormat(InputClass)));\n            yield return new TestCaseData((By) Serenity.WebDriver.By.jQuery(\".{0}\".ToFormat(InputClass)));\n            yield return new TestCaseData(By.Name(InputName));\n            yield return new TestCaseData(By.CssSelector(\"input[name=\\\"{0}\\\"]\".ToFormat(InputName)));\n            yield return new TestCaseData((By) Serenity.WebDriver.By.jQuery(\"input[name='{0}']\".ToFormat(InputName)));\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/WebDriver/Benchmarks/WebDriverBenchmarkOneElementTests.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuCore;\nusing HtmlTags;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\n\nnamespace Serenity.Testing.WebDriver.Benchmarks\n{\n    public class WebDriverBenchmarkOneElementTests<TBrowser> : WebDriverBenchmarkBase<TBrowser, By> where TBrowser : IBrowserLifecycle, new()\n    {\n        private const string InputId = \"inputid\";\n        private const string InputClass = \"some-input-class\";\n        private const string InputName = \"somename\";\n\n        protected override void ConfigureDocument(HtmlDocument document)\n        {\n            document.Add(new HtmlTag(\"input\", tag =>\n            {\n                tag.Id(InputId);\n                tag.AddClass(InputClass);\n                tag.Attr(\"name\", InputName);\n            }));\n\n            document.ReferenceJavaScriptFile(\"file:///\" + \"jquery-2.0.3.min.js\".ToFullPath());\n        }\n\n        protected override void ActionToBenchmark(By selector)\n        {\n            var element = Driver.FindElement(selector);\n        }\n\n        public override IEnumerable<TestCaseData> Cases()\n        {\n            yield return new TestCaseData(By.Id(InputId));\n            yield return new TestCaseData(By.CssSelector(\"#{0}\".ToFormat(InputId))); \n            yield return new TestCaseData((By) Serenity.WebDriver.By.jQuery(\"#{0}\".ToFormat(InputId)));\n            yield return new TestCaseData(By.ClassName(InputClass));\n            yield return new TestCaseData(By.CssSelector(\".{0}\".ToFormat(InputClass)));\n            yield return new TestCaseData((By) Serenity.WebDriver.By.jQuery(\".{0}\".ToFormat(InputClass)));\n            yield return new TestCaseData(By.Name(InputName));\n            yield return new TestCaseData(By.CssSelector(\"input[name=\\\"{0}\\\"]\".ToFormat(InputName)));\n            yield return new TestCaseData((By) Serenity.WebDriver.By.jQuery(\"input[name='{0}']\".ToFormat(InputName)));\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/WebDriver/ByJQuerySamples.cs",
    "content": "﻿using Serenity.Fixtures;\nusing Serenity.WebDriver;\nusing StoryTeller;\nusing StoryTeller.Engine;\n\nnamespace Serenity.Testing.WebDriver\n{\n    // SAMPLE: simpleByJQuery\n    public class ByJQueryExample : ScreenFixture\n    {\n        [FormatAs(\"Some grammar that clicks an element\")]\n        public void ClickButtonSimple()\n        {\n            // Generates JavaScript: return $(\".button-class\");\n            Driver.FindElement((By) By.jQuery(\".button-class\")).Click();\n        }\n\n        [FormatAs(\"Some grammar that walks DOM to find element and then clicks it\")]\n        public void ClickButtonAdvanced()\n        {\n            // Generates JavaScript: return $(\".some-label\").filter(function() { return $(this).text().trim() === \"Label Text\"; }).parents(\".parent-class\").find(\".button-class\");\n            Driver.FindElement((By) By.jQuery(\".some-label\")\n                    .Filter(JQuery.HasTextFilterFunction(\"Label Text\"))\n                    .Parents(\".parent-class\")\n                    .Find(\".button-class\"))\n                .Click();\n        }\n\n        [FormatAs(\"Use jQuery to to start your search from an IWebElement you have already retrieved\")]\n        public void WebElementToSelector()\n        {\n            var element = Driver.FindElement(By.ClassName(\"some-class\"));\n\n            // Generates JavaScript: return (function(__element__argument__1) { return $(__element__argument__1).sibling(\".sibling-element\") })(arguments[0]);\n            Driver.FindElement((By) element.ToJQueryBy().Sibling(\".sibling-element\"));\n        }\n    }\n    // ENDSAMPLE\n}"
  },
  {
    "path": "src/Serenity.Testing/WebDriver/ByJqueryTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing Shouldly;\nusing HtmlTags;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\nusing Serenity.Testing.Fixtures;\nusing Serenity.WebDriver;\nusing By = Serenity.WebDriver.By;\n\nnamespace Serenity.Testing.WebDriver\n{\n    public class ByJqueryPageTester<TBrowser> : ScreenManipulationTester<TBrowser> where TBrowser : IBrowserLifecycle, new()\n    {\n        private const string RootText = \"Welcome to WebDriver jQuery selectors.\";\n\n        protected override void ConfigureDocument(HtmlDocument document)\n        {\n            document.Add(\"h1\").AddClass(\"root-marker\").Text(RootText);\n\n            document.Add(BuildTestDiv(new Stack<int>(new[] {0}), 0));\n\n            document.ReferenceJavaScriptFile(\"file:///\" + \"jquery-2.0.3.min.js\".ToFullPath());\n        }\n\n        [TestCase(\".root-marker\", Result = RootText)]\n        [TestCase(\".depth-level-2 > span\", Result = \"--Div at depth 2 index 0\")]\n        [TestCase(\".depth-level-2:nth-of-type(2) > span\", Result = \"--Div at depth 2 index 1\")]\n        public string CanRetrieveElementBySelectorWithJQuery(string selector)\n        {\n            return Driver.FindElement((By) By.jQuery(selector)).Text;\n        }\n\n        [Test, ExpectedException(typeof (NoSuchElementException))]\n        public void NoElementFoundWithJQuery()\n        {\n            Driver.FindElement((By) By.jQuery(\".no-such-element\"));\n        }\n\n        [Test]\n        public void CanRetrieveElementsComplex()\n        {\n            By selector = By.jQuery(\".depth-level-3-0-0-0\").Parents(\".depth-level\").Children(\"span\");\n            var textForParents = Driver.FindElements(selector).Select(x => x.Text).ToList();\n\n            textForParents.ShouldHaveTheSameElementsAs(\n                \"--Div at depth 2 index 0\",\n                \"-Div at depth 1 index 0\",\n                \"Div at depth 0 index 0\");\n        }\n\n        [Test]\n        public void JQueryFindByText()\n        {\n            By selector = By.jQuery(\".depth-level-2 > span\")\n                .Filter(JQuery.HasTextFilterFunction(\"--Div at depth 2 index 1\"))\n                .Parent()\n                .Find(\".depth-level-3 > span\")\n                .Filter(JQuery.HasTextFilterFunction(\"---Div at depth 3 index 1\"));\n\n            var textFromFoundElements = Driver.FindElements(selector).Select(x => x.Text).ToList();\n\n            textFromFoundElements.ShouldHaveTheSameElementsAs(\n                \"---Div at depth 3 index 1\",\n                \"---Div at depth 3 index 1\",\n                \"---Div at depth 3 index 1\");\n        }\n\n        [Test]\n        public void JQueryFindByDoesNotHaveText()\n        {\n            By selector = By.jQuery(\".depth-level-1-0 .depth-level-2 > span\")\n                .Filter(JQuery.DoesNotHaveTextFilterFunction(\"--Div at depth 2 index 1\"))\n                .Parent()\n                .Find(\".depth-level-3 > span\")\n                .Filter(JQuery.DoesNotHaveTextFilterFunction(\"---Div at depth 3 index 1\"));\n\n            var textFromFoundElements = Driver.FindElements(selector).Select(x => x.Text).ToList();\n\n            textFromFoundElements.ShouldHaveTheSameElementsAs(\n                \"---Div at depth 3 index 0\",\n                \"---Div at depth 3 index 2\",\n                \"---Div at depth 3 index 0\",\n                \"---Div at depth 3 index 2\");\n        }\n\n        [Test]\n        public void WebElementToJQuerySelector()\n        {\n            var element = Driver.FindElement(By.CssSelector(\".depth-level-2 > span\"));\n\n            By selector = element.ToJQueryBy().Parent().Find(\".depth-level-3 > span\");\n\n            Driver.FindElement(selector).Text.ShouldBe(\"---Div at depth 3 index 0\");\n        }\n\n        [Test]\n        public void CanRetrievePrimitiveTypeData()\n        {\n            JavaScript selector = By.jQuery(\".depth-level-3-0-0-0\").Parents(\".depth-level\").Children(\"span\").Length;\n            selector.ExecuteAndGet<long>(Driver).ShouldBe(3);\n        }\n\n        [Test]\n        public void JQueryByFromElementCanRetrievePrimitiveTypeData()\n        {\n            var element = Driver.FindElement((By) By.jQuery(\".depth-level-3-0-0-0\"));\n            JavaScript selector = element.ToJQueryBy().Parents(\".depth-level\").Children(\"span\").Length;\n            selector.ExecuteAndGet<long>(Driver).ShouldBe(3);\n        }\n\n        [Test]\n        public void CanSetText()\n        {\n            JavaScript js = \"$(\\\".root-marker\\\").text('alternate text')\".ToJQueryJS();\n            js.Execute(Driver);\n            Driver.FindElement((By) By.jQuery(\".root-marker\")).Text.ShouldBe(\"alternate text\");\n        }\n\n        private static DivTag BuildTestDiv(Stack<int> indexes, int depth)\n        {\n            var div = new DivTag();\n            div.AddClass(\"depth-level\");\n            var classToAdd = \"depth-level-{0}\".ToFormat(depth);\n            div.AddClass(classToAdd);\n\n            indexes.Each(x =>\n            {\n                classToAdd += \"-\" + x;\n                div.AddClass(classToAdd);\n            });\n\n            var span = new HtmlTag(\"span\");\n            span.Text(\"{0}Div at depth {1} index {2}\".ToFormat(new String('-', depth), depth, indexes.Peek()));\n\n            div.Children.Add(span);\n\n            if (depth < 3)\n            {\n                for (var i = 0; i < 3; i++)\n                {\n                    indexes.Push(i);\n                    var childDiv = BuildTestDiv(indexes, depth + 1);\n                    indexes.Pop();\n                    div.Children.Add(childDiv);\n                }\n            }\n\n            return div;\n        }\n    }\n\n    public class ByJqueryWithNoJQueryOnPageTester<TBrowser> : ScreenManipulationTester<TBrowser> where TBrowser : IBrowserLifecycle, new()\n    {\n        private const string RootText = \"Welcome to WebDriver jQuery selectors. (No JQuery Here)\";\n\n        protected override void ConfigureDocument(HtmlDocument document)\n        {\n            document.Add(\"h1\").AddClass(\"root-marker\").Text(RootText);\n        }\n\n        [Test, ExpectedException(typeof (InvalidOperationException))]\n        public void NoJQueryOnPageThrows()\n        {\n            Driver.FindElement((By) By.jQuery(\".root-marker\"));\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/WebDriver/EmbeddedDrivers/EmbeddedDriverExtractorTester.cs",
    "content": "﻿using System;\nusing System.IO;\nusing FubuCore;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Rhino.Mocks;\nusing Serenity.WebDriver.EmbeddedDrivers;\n\nnamespace Serenity.Testing.WebDriver.EmbeddedDrivers\n{\n    [TestFixture(typeof(ChromeEmbeddedDriver))]\n    [TestFixture(typeof(PhantomEmbeddedDriver))]\n    public class EmbeddedDriverExtractorTester<TEmbeddedDriver> : InteractionContext<EmbeddedDriverExtractor<TEmbeddedDriver>> where TEmbeddedDriver : IEmbeddedDriver, new()\n    {\n        private readonly string WorkingDir = AppDomain.CurrentDomain.BaseDirectory;\n        private readonly IEmbeddedDriver _embeddedDriver = new TEmbeddedDriver();\n\n\n        [Test]\n        public void VersionDeclarationFilePathInWorkingDirectory()\n        {\n            ClassUnderTest.PathToVersionDeclarationFile.ShouldBe(Path.Combine(WorkingDir, _embeddedDriver.ExtractedFileName + \".version\"));\n        }\n\n        [Test]\n        public void DriverPathIsInWorkingDirectoty()\n        {\n            ClassUnderTest.PathToDriver.ShouldBe(Path.Combine(WorkingDir, _embeddedDriver.ExtractedFileName));\n        }\n\n        [Test]\n        public void ShouldExtractIfNoVersion()\n        {\n            MockFor<IFileSystem>().Stub(x => x.FileExists(ClassUnderTest.PathToVersionDeclarationFile)).Return(false);\n            MockFor<IFileSystem>().Stub(x => x.FileExists(ClassUnderTest.PathToDriver)).Return(true);\n\n            ClassUnderTest.ShouldExtract().ShouldBeTrue();\n        }\n\n        [Test]\n        public void ShouldExtractIfNoDriver()\n        {\n            MockFor<IFileSystem>().Stub(x => x.FileExists(ClassUnderTest.PathToVersionDeclarationFile)).Return(true);\n            MockFor<IFileSystem>().Stub(x => x.FileExists(ClassUnderTest.PathToDriver)).Return(false);\n\n            ClassUnderTest.ShouldExtract().ShouldBeTrue();\n        }\n\n        [Test]\n        public void ShouldExtractIfExtractedVersionIsLessThenEmbedded()\n        {\n            MockFor<IFileSystem>().Stub(x => x.FileExists(ClassUnderTest.PathToVersionDeclarationFile)).Return(true);\n            MockFor<IFileSystem>().Stub(x => x.FileExists(ClassUnderTest.PathToDriver)).Return(true);\n            MockFor<IFileSystem>().Stub(x => x.ReadStringFromFile(ClassUnderTest.PathToVersionDeclarationFile)).Return(\"1.0\");\n\n            ClassUnderTest.ShouldExtract().ShouldBeTrue();\n        }\n\n        [Test]\n        public void ShouldNotExtractIfExtractedVersionIsEqualToEmbedded()\n        {\n            MockFor<IFileSystem>().Stub(x => x.FileExists(ClassUnderTest.PathToVersionDeclarationFile)).Return(true);\n            MockFor<IFileSystem>().Stub(x => x.FileExists(ClassUnderTest.PathToDriver)).Return(true);\n            MockFor<IFileSystem>().Stub(x => x.ReadStringFromFile(ClassUnderTest.PathToVersionDeclarationFile)).Return(_embeddedDriver.Version.ToString());\n\n            ClassUnderTest.ShouldExtract().ShouldBeFalse();\n        }\n\n        [Test]\n        public void ShouldNotExtractIfExtractedVersionIsGreaterThenEmbedded()\n        {\n            MockFor<IFileSystem>().Stub(x => x.FileExists(ClassUnderTest.PathToVersionDeclarationFile)).Return(true);\n            MockFor<IFileSystem>().Stub(x => x.FileExists(ClassUnderTest.PathToDriver)).Return(true);\n            MockFor<IFileSystem>().Stub(x => x.ReadStringFromFile(ClassUnderTest.PathToVersionDeclarationFile)).Return(\"99.0\");\n\n            ClassUnderTest.ShouldExtract().ShouldBeFalse();\n        }\n\n        [Test]\n        public void ExtractingDeletesOldDriver()\n        {\n            ClassUnderTest.Extract();\n            MockFor<IFileSystem>().AssertWasCalled(x => x.DeleteFile(ClassUnderTest.PathToDriver));\n        }\n\n        [Test]\n        public void ExtractingDeletesOldVersion()\n        {\n            ClassUnderTest.Extract();\n            MockFor<IFileSystem>().AssertWasCalled(x => x.DeleteFile(ClassUnderTest.PathToVersionDeclarationFile));\n        }\n\n        [Test]\n        public void ExtractingWritesDriverStreamToFile()\n        {\n            MockFor<IFileSystem>().Expect(x => x.WriteStreamToFile(\n                Arg<string>.Matches(path => path == ClassUnderTest.PathToDriver),\n                Arg<Stream>.Matches(stream => stream.Length > 0)));\n            ClassUnderTest.Extract();\n\n            MockFor<IFileSystem>().VerifyAllExpectations();\n        }\n\n        [Test]\n        public void ExtractingWritesVersionToFile()\n        {\n            ClassUnderTest.Extract();\n            MockFor<IFileSystem>().AssertWasCalled(x => x.WriteStringToFile(\n                ClassUnderTest.PathToVersionDeclarationFile,\n                _embeddedDriver.Version.ToString()));\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/WebDriver/JQueryTester.cs",
    "content": "﻿using Shouldly;\nusing NUnit.Framework;\nusing Serenity.WebDriver;\n\nnamespace Serenity.Testing.WebDriver\n{\n    public class JQueryTester\n    {\n        [Test]\n        public void BuildsFilterHasTextFunction()\n        {\n            string function = JQuery.HasTextFilterFunction(\"some text\").Statement;\n            function.ShouldBe(\"function() { return $(this).text().trim() === 'some text'; }\");\n        }\n\n        [Test]\n        public void BuildsFilterDoesNotHaveTextFunction()\n        {\n            string function = JQuery.DoesNotHaveTextFilterFunction(\"some text\").Statement;\n            function.ShouldBe(\"function() { return $(this).text().trim() !== 'some text'; }\");\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/WebDriver/JavaScriptBuilders/DefaultJavaScriptBuilderTester.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Serenity.WebDriver.JavaScriptBuilders;\n\nnamespace Serenity.Testing.WebDriver.JavaScriptBuilders\n{\n    public class DefaultJavaScriptBuilderTester : InteractionContext<DefaultJavaScriptBuilder>\n    {\n        [TestCaseSource(\"TestCases\")]\n        public void MatchesAnything(object obj)\n        {\n            ClassUnderTest.Matches(obj).ShouldBeTrue();\n        }\n\n        public IEnumerable TestCases()\n        {\n            yield return null;\n            yield return \"some string\";\n            yield return 1;\n            yield return HttpStatusCode.OK;\n            yield return new Object();\n            yield return new ToStringOverride();\n        }\n\n        [TestCaseSource(\"BuildTestCases\")]\n        public string ReturnsToStringOfObjectPassedIn(object obj)\n        {\n            return ClassUnderTest.Build(obj);\n        }\n\n        public IEnumerable<TestCaseData> BuildTestCases()\n        {\n            return TestCases().Cast<object>().Select<object, TestCaseData>(x => new TestCaseData(x).Returns(x == null ? \"null\" : x.ToString()));\n        }\n\n        public class ToStringOverride\n        {\n            public override string ToString()\n            {\n                return \"Simple to string method\";\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/WebDriver/JavaScriptBuilders/NullObjectJavaScriptBuilderTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Serenity.WebDriver.JavaScriptBuilders;\n\nnamespace Serenity.Testing.WebDriver.JavaScriptBuilders\n{\n    public class NullObjectJavaScriptBuilderTester : InteractionContext<NullObjectJavaScriptBuilder>\n    {\n        [TestCaseSource(\"MatchTestCases\")]\n        public bool Matches(object obj)\n        {\n            return ClassUnderTest.Matches(obj);\n        }\n\n        public IEnumerable<TestCaseData> MatchTestCases()\n        {\n            yield return new TestCaseData(null).Returns(true);\n            yield return new TestCaseData(\"string\").Returns(false);\n            yield return new TestCaseData(\"\").Returns(false);\n            yield return new TestCaseData(1).Returns(false);\n            yield return new TestCaseData(new object()).Returns(false);\n        }\n\n        [Test]\n        public void ReturnsNullAsString()\n        {\n            ClassUnderTest.Build(null).ShouldBe(\"null\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/Serenity.Testing/WebDriver/JavaScriptBuilders/StringJavaScriptBuildertTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing Serenity.WebDriver.JavaScriptBuilders;\n\nnamespace Serenity.Testing.WebDriver.JavaScriptBuilders\n{\n    public class StringJavaScriptBuilderTester : InteractionContext<StringJavaScriptBuilder>\n    {\n        [TestCaseSource(\"MatchTestCases\")]\n        public bool Matches(object obj)\n        {\n            return ClassUnderTest.Matches(obj);\n        }\n\n        public IEnumerable<TestCaseData> MatchTestCases()\n        {\n            yield return new TestCaseData(null).Returns(false);\n            yield return new TestCaseData((string) null).Returns(false);\n            yield return new TestCaseData(\"string\").Returns(true);\n            yield return new TestCaseData(\"\").Returns(true);\n            yield return new TestCaseData(1).Returns(false);\n            yield return new TestCaseData(new object()).Returns(false);\n        }\n\n        [Test]\n        public void WrapsStringWithQuotes()\n        {\n            ClassUnderTest.Build(\"some string\").ShouldBe(\"\\\"some string\\\"\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/Serenity.Testing/WebDriver/JavaScriptBuilders/WebElementJavaScriptBuilderTester.cs",
    "content": "﻿using System.Collections.ObjectModel;\nusing System.Drawing;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\nusing Serenity.WebDriver.JavaScriptBuilders;\nusing System.Collections.Generic;\n\nnamespace Serenity.Testing.WebDriver.JavaScriptBuilders\n{\n    public class WebElementJavaScriptBuilderTester : InteractionContext<WebElementJavaScriptBuilder>\n    {\n        [TestCaseSource(\"MatchTestCases\")]\n        public bool Matches(object obj)\n        {\n            return ClassUnderTest.Matches(obj);\n        }\n\n        public IEnumerable<TestCaseData> MatchTestCases()\n        {\n            yield return new TestCaseData(null).Returns(false);\n            yield return new TestCaseData(\"string\").Returns(false);\n            yield return new TestCaseData(\"\").Returns(false);\n            yield return new TestCaseData(1).Returns(false);\n            yield return new TestCaseData(new object()).Returns(false);\n            yield return new TestCaseData(new FakeWebElement()).Returns(true);\n        }\n\n        [Test]\n        public void ReturnsNullAsString()\n        {\n            ClassUnderTest.Build(MockFor<IWebElement>()).ShouldBe(WebElementJavaScriptBuilder.Marker);\n        }\n\n        public class FakeWebElement : IWebElement\n        {\n            public IWebElement FindElement(By @by)\n            {\n                throw new System.NotSupportedException();\n            }\n\n            public ReadOnlyCollection<IWebElement> FindElements(By @by)\n            {\n                throw new System.NotSupportedException();\n            }\n\n            public void Clear()\n            {\n                throw new System.NotSupportedException();\n            }\n\n            public void SendKeys(string text)\n            {\n                throw new System.NotSupportedException();\n            }\n\n            public void Submit()\n            {\n                throw new System.NotSupportedException();\n            }\n\n            public void Click()\n            {\n                throw new System.NotSupportedException();\n            }\n\n            public string GetAttribute(string attributeName)\n            {\n                throw new System.NotSupportedException();\n            }\n\n            public string GetCssValue(string propertyName)\n            {\n                throw new System.NotSupportedException();\n            }\n\n            public string TagName { get; private set; }\n            public string Text { get; private set; }\n            public bool Enabled { get; private set; }\n            public bool Selected { get; private set; }\n            public Point Location { get; private set; }\n            public Size Size { get; private set; }\n            public bool Displayed { get; private set; }\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/WebDriver/JavaScriptByFindTester.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\nusing Rhino.Mocks;\nusing Serenity.WebDriver;\nusing By = Serenity.WebDriver.By;\n\nnamespace Serenity.Testing.WebDriver\n{\n    public abstract class JavaScriptByFindTester<TExpected, TActual> : InteractionContext<JavaScriptBy>\n    {\n        private ISearchContext _searchContext;\n\n        protected abstract TExpected ExpectedResult { get; }\n        protected TActual FoundResult { get; private set; }\n        protected JavaScriptBy Selector { get; set; }\n\n        protected bool ExecuteFind = true;\n\n        protected override void beforeEach()\n        {\n            var javascriptExecutor = MockFor<IJavaScriptExecutor>();\n            javascriptExecutor.Stub(x => x.ExecuteScript(Arg<string>.Is.Anything, Arg<object[]>.Is.Anything)).Return(ExpectedResult);\n            javascriptExecutor.Stub(x => x.ExecuteAsyncScript(Arg<string>.Is.Anything, Arg<object[]>.Is.Anything)).Return(ExpectedResult);\n\n            _searchContext = MockFor<ISearchContext>();\n\n            var converter = MockFor<ISearchContextToJavaScriptExecutor>();\n            converter.Stub(x => x.Convert(_searchContext)).Return(javascriptExecutor);\n            JavaScriptBy.SearchContextConverter = converter;\n\n            Selector = By.jQuery(\".test\");\n\n            if (ExecuteFind)\n            {\n                Execute();\n            }\n        }\n\n        protected void Execute()\n        {\n            FoundResult = Find(_searchContext);\n        }\n\n        protected abstract TActual Find(ISearchContext context);\n\n        [TestFixtureTearDown]\n        public void ResetConverter()\n        {\n            JavaScriptBy.ResetConverter();\n        }\n    }\n\n    public abstract class JavaScriptByFindTester<T> : JavaScriptByFindTester<T, T> { }\n\n    public class JQueryByFindElementTester : JavaScriptByFindTester<IWebElement>\n    {\n        private IWebElement _expectedResult;\n        protected override IWebElement ExpectedResult\n        {\n            get { return _expectedResult ?? (_expectedResult = MockFor<IWebElement>()); }\n        }\n\n        protected override IWebElement Find(ISearchContext context)\n        {\n            return Selector.FindElement(context);\n        }\n\n        [Test]\n        public void ReturnsAnElement()\n        {\n            FoundResult.ShouldNotBeNull();\n        }\n\n        [Test]\n        public void ReturnsTheExpectedElement()\n        {\n            FoundResult.ShouldBeTheSameAs(ExpectedResult);\n        }\n    }\n\n    public class JQueryByFindElementNull : JavaScriptByFindTester<IWebElement>\n    {\n        protected override IWebElement ExpectedResult\n        {\n            get { return null; }\n        }\n\n        protected override void beforeEach()\n        {\n            ExecuteFind = false;\n            base.beforeEach();\n        }\n\n        protected override IWebElement Find(ISearchContext context)\n        {\n            return Selector.FindElement(context);\n        }\n\n        [Test, ExpectedException(typeof(NoSuchElementException))]\n        public void ThrowsNoSuchElementException()\n        {\n            Execute();\n        }\n    }\n\n    public class JQueryByFindElementsNone : JavaScriptByFindTester<ReadOnlyCollection<object>, ReadOnlyCollection<IWebElement>>\n    {\n        protected override ReadOnlyCollection<object> ExpectedResult\n        {\n            get { return new ReadOnlyCollection<object>(new List<object>()); }\n        }\n\n        protected override ReadOnlyCollection<IWebElement> Find(ISearchContext context)\n        {\n            return Selector.FindElements(context);\n        }\n\n        [Test]\n        public void ReturnsCollection()\n        {\n            FoundResult.ShouldNotBeNull();\n        }\n\n        [Test]\n        public void ReturnedCollectionIsEmpty()\n        {\n            FoundResult.ShouldBeEmpty();\n        }\n    }\n\n    public class JQueryByFindElementsWithResults : JavaScriptByFindTester<ReadOnlyCollection<IWebElement>, ReadOnlyCollection<IWebElement>>\n    {\n        private ReadOnlyCollection<IWebElement> _expectedResult; \n        protected override ReadOnlyCollection<IWebElement> ExpectedResult\n        {\n            get\n            {\n                return _expectedResult ?? (_expectedResult = new ReadOnlyCollection<IWebElement>(new []\n                {\n                    Services.AddAdditionalMockFor<IWebElement>(),\n                    Services.AddAdditionalMockFor<IWebElement>()\n                }));\n            }\n        }\n\n        protected override ReadOnlyCollection<IWebElement> Find(ISearchContext context)\n        {\n            return Selector.FindElements(context);\n        }\n\n        [Test]\n        public void ReturnsCollection()\n        {\n            FoundResult.ShouldNotBeNull();\n        }\n\n        [Test]\n        public void ReturnedCollectionHasItems()\n        {\n            FoundResult.Count.ShouldBe(2);\n        }\n\n        [Test]\n        public void CollectionContainsExpectedElements()\n        {\n            FoundResult.ShouldHaveTheSameElementsAs(ExpectedResult[0], ExpectedResult[1]);\n        }\n    }\n}\n"
  },
  {
    "path": "src/Serenity.Testing/WebDriver/JavaScriptTester.cs",
    "content": "using System.Collections.Generic;\nusing System.Linq;\nusing Shouldly;\nusing NUnit.Framework;\nusing Serenity.WebDriver;\nusing Serenity.WebDriver.JavaScriptBuilders;\nusing By = Serenity.WebDriver.By;\n\nnamespace Serenity.Testing.WebDriver\n{\n    public class JavaScriptTester\n    {\n        [TestCase(\"does nothing to this string\", Result = \"$(\\\"does nothing to this string\\\")\")]\n        [TestCase(\".test\", Result = \"$(\\\".test\\\")\")]\n        public string CreatesJQueryByWithGivenSelector(string selector)\n        {\n            return (string) JavaScript.CreateJQuery(selector).Statement;\n        }\n\n        [Test]\n        public void JQueryByCanBeImplicitlyCastToSeleniumBy()\n        {\n            OpenQA.Selenium.By implicitCast = By.jQuery(\".test\");\n            implicitCast.ShouldNotBeNull();\n            implicitCast.ShouldBeOfType<JavaScriptBy>();\n        }\n\n        [Test]\n        public void JQueryByCanBeImplicitlyCastToSerenityJqueryBy()\n        {\n            By implicitCast = By.jQuery(\".test\");\n            implicitCast.ShouldNotBeNull();\n            implicitCast.ShouldBeOfType<JavaScriptBy>();\n        }\n\n        [Test]\n        public void ByJQueryBuildsSelector()\n        {\n            string selector = By.jQuery(\".test\").Statement;\n            selector.ShouldBe(\"$(\\\".test\\\")\");\n        }\n\n        [Test]\n        public void BuildsStatementWithAdditionalMethod()\n        {\n            dynamic javaScript = new JavaScript(\"$(\\\".test\\\")\");\n            string statement = javaScript.Find().Statement;\n            statement.ShouldBe(\"$(\\\".test\\\").find()\");\n        }\n\n        [TestCase(null, Result=\"$(\\\".test\\\").find()\")]\n        [TestCase(\"\", Result=\"$(\\\".test\\\").find(\\\"\\\")\")]\n        [TestCase(\".child\", Result=\"$(\\\".test\\\").find(\\\".child\\\")\")]\n        [TestCase(123, Result=\"$(\\\".test\\\").find(123)\")]\n        [TestCase(123.45, Result=\"$(\\\".test\\\").find(123.45)\")]\n        // TODO: Test DateTime?\n        public string BuildsSelectorWithAdditionalMethodOneParameter(object param)\n        {\n            dynamic javaScript = new JavaScript(\"$(\\\".test\\\")\");\n            return (string) javaScript.Find(param).Statement;\n        }\n\n        [TestCase(null, null, Result=\"$(\\\".test\\\").find()\")]\n        [TestCase(\"\", null, Result=\"$(\\\".test\\\").find(\\\"\\\")\")]\n        [TestCase(\".child\", null, Result=\"$(\\\".test\\\").find(\\\".child\\\")\")]\n        [TestCase(123, null, Result=\"$(\\\".test\\\").find(123)\")]\n        [TestCase(123.45, null, Result=\"$(\\\".test\\\").find(123.45)\")]\n\n        [TestCase(null, \"\", Result=\"$(\\\".test\\\").find(null, \\\"\\\")\")]\n        [TestCase(null, \".child\", Result=\"$(\\\".test\\\").find(null, \\\".child\\\")\")]\n        [TestCase(null, 123, Result=\"$(\\\".test\\\").find(null, 123)\")]\n        [TestCase(null, 123.45, Result=\"$(\\\".test\\\").find(null, 123.45)\")]\n\n        [TestCase(\"\", \"\", Result=\"$(\\\".test\\\").find(\\\"\\\", \\\"\\\")\")]\n        [TestCase(123, \"\", Result=\"$(\\\".test\\\").find(123, \\\"\\\")\")]\n        [TestCase(\"\", 123, Result=\"$(\\\".test\\\").find(\\\"\\\", 123)\")]\n        // TODO: Test DateTime?\n        public string BuildsSelectorWithAdditionalMethodTwoParameters(object param1, object param2)\n        {\n            dynamic javaScript = new JavaScript(\"$(\\\".test\\\")\");\n            return (string) javaScript.Find(param1, param2).Statement;\n        }\n\n        [Test]\n        public void TestJavaScriptFunctionAsParameter()\n        {\n            var javaScript = JavaScript.Create(\"$(this)\")\n                .Filter(JavaScript.Function(new[]{ \"x\" },\n                    JavaScript.Create(\"$(this)\").Text().Trim().ModifyStatement(\"return {0} === x;\")));\n\n            string raw = javaScript.Statement;\n            raw.ShouldBe(\"$(this).filter(function(x) { return $(this).text().trim() === x; })\");\n        }\n\n        [Test]\n        public void TestGetProperty()\n        {\n            string script = JavaScript.Create(\"$('.test')\").Length.Statement;\n            script.ShouldBe(\"$('.test').length\");\n        }\n\n\n        [Test]\n        public void LowerCasesFirstLetterOnly()\n        {\n            dynamic javaScript = new JavaScript(\"$(\\\".test\\\")\");\n            string selector = javaScript.CamelCaseWords().Statement;\n            selector.ShouldBe(\"$(\\\".test\\\").camelCaseWords()\");\n        }\n\n        [Test]\n        public void RegistersJavaScriptBuilders()\n        {\n            TestJavaScript.Builders.Select(x => x.GetType()).ShouldHaveTheSameElementsAs(\n                typeof(NullObjectJavaScriptBuilder),\n                typeof(StringJavaScriptBuilder),\n                typeof(WebElementJavaScriptBuilder),\n                typeof(DefaultJavaScriptBuilder));\n        }\n\n\n        public class TestJavaScript : JavaScript\n        {\n            public TestJavaScript(string statement) : base(statement) { }\n\n            public static IList<IJavaScriptBuilder> Builders { get { return JavaScriptBuilders; } }\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/WebDriver/JavascriptReferenceErrorTests.cs",
    "content": "using System;\nusing Shouldly;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\nusing Rhino.Mocks;\nusing Serenity.WebDriver;\n\nnamespace Serenity.Testing.WebDriver\n{\n    [TestFixture]\n    public class JavascriptReferenceErrorTests\n    {\n        private JavaScript ClassUnderTest;\n        private IJavaScriptExecutor _executor;\n\n        [SetUp]\n        public void Setup()\n        {\n            ClassUnderTest = JavaScript.CreateJQuery(\"$(.test)\");\n            _executor = MockRepository.GenerateMock<IJavaScriptExecutor>();\n        }\n\n        [Test, ExpectedException(typeof(InvalidOperationException))]\n        public void ThrowsInvalidOperationExceptionForReferenceError()\n        {\n            _executor.Stub(x => x.ExecuteAsyncScript(Arg<string>.Is.Anything, Arg<object[]>.Is.Anything)).Return(\"ReferenceError\");\n            ClassUnderTest.ExecuteAndGet(_executor);\n        }\n\n        [Test]\n        public void DoesNotThrowInvalidOperationExceptionForNull()\n        {\n            _executor.Stub(x => x.ExecuteAsyncScript(Arg<string>.Is.Anything, Arg<object[]>.Is.Anything)).Return(null);\n            ClassUnderTest.ExecuteAndGet(_executor).ShouldBeNull();\n        }\n\n        [Test]\n        public void DoesNotThrowInvalidOperationExceptionForEmptyString()\n        {\n            _executor.Stub(x => x.ExecuteAsyncScript(Arg<string>.Is.Anything, Arg<object[]>.Is.Anything)).Return(string.Empty);\n            ClassUnderTest.ExecuteAndGet(_executor).ShouldBe(string.Empty);\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/WebDriver/SearchContextToJavaScriptExecutorTester.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Text;\nusing FubuMVC.Tests.TestSupport;\nusing Shouldly;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\nusing OpenQA.Selenium.Internal;\nusing Serenity.WebDriver;\nusing By = OpenQA.Selenium.By;\n\nnamespace Serenity.Testing.WebDriver\n{\n    public class SearchContextToJavaScriptExecutorTester : InteractionContext<SearchContextToJavaScriptExecutor>\n    {\n        [Test]\n        public void SearchContextIsJavaScriptExecutor()\n        {\n            var context = new FakeJavaScriptExecutor();\n            var convertedContext = ClassUnderTest.Convert(context);\n            convertedContext.ShouldNotBeNull();\n            convertedContext.ShouldBeOfType<FakeJavaScriptExecutor>();\n            convertedContext.ShouldBeTheSameAs(context);\n        }\n\n        [Test]\n        public void SearchContextIsWrappedDriver()\n        {\n            var executor = new FakeJavaScriptExecutor();\n            var context = new FakeWrapsDriver(executor);\n            var convertedContext = ClassUnderTest.Convert(context);\n            convertedContext.ShouldNotBeNull();\n            convertedContext.ShouldBeOfType<FakeJavaScriptExecutor>();\n            convertedContext.ShouldBeTheSameAs(executor);\n        }\n\n        [Test, ExpectedException(typeof (ArgumentException))]\n        public void ThrowsIfCannotConvertToJavaScriptExecutor()\n        {\n            ClassUnderTest.Convert(new FakeSearchContextOnly());\n        }\n\n        public class FakeSearchContextOnly : ISearchContext\n        {\n            public IWebElement FindElement(By @by)\n            {\n                throw new NotSupportedException();\n            }\n\n            public ReadOnlyCollection<IWebElement> FindElements(By @by)\n            {\n                throw new NotSupportedException();\n            }\n        }\n\n        public class FakeJavaScriptExecutor : IJavaScriptExecutor, IWebDriver\n        {\n            public IWebElement FindElement(By @by)\n            {\n                throw new NotSupportedException();\n            }\n\n            public ReadOnlyCollection<IWebElement> FindElements(By @by)\n            {\n                throw new NotSupportedException();\n            }\n\n            public object ExecuteScript(string script, params object[] args)\n            {\n                throw new NotSupportedException();\n            }\n\n            public object ExecuteAsyncScript(string script, params object[] args)\n            {\n                throw new NotSupportedException();\n            }\n\n            public void Dispose()\n            {\n                throw new NotSupportedException();\n            }\n\n            public void Close()\n            {\n                throw new NotSupportedException();\n            }\n\n            public void Quit()\n            {\n                throw new NotSupportedException();\n            }\n\n            public IOptions Manage()\n            {\n                throw new NotSupportedException();\n            }\n\n            public INavigation Navigate()\n            {\n                throw new NotSupportedException();\n            }\n\n            public ITargetLocator SwitchTo()\n            {\n                throw new NotSupportedException();\n            }\n\n            public string Url { get; set; }\n            public string Title { get; private set; }\n            public string PageSource { get; private set; }\n            public string CurrentWindowHandle { get; private set; }\n            public ReadOnlyCollection<string> WindowHandles { get; private set; }\n        }\n\n        public class FakeWrapsDriver : ISearchContext, IWrapsDriver\n        {\n            public FakeWrapsDriver(FakeJavaScriptExecutor executor)\n            {\n                WrappedDriver = executor;\n            }\n\n            public IWebElement FindElement(By @by)\n            {\n                throw new NotSupportedException();\n            }\n\n            public ReadOnlyCollection<IWebElement> FindElements(By @by)\n            {\n                throw new NotSupportedException();\n            }\n\n            public IWebDriver WrappedDriver { get; private set; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/Serenity.Testing/WebDriver/WebDriverExtensionsTester.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing Shouldly;\nusing HtmlTags;\nusing NUnit.Framework;\nusing OpenQA.Selenium;\nusing Serenity.Fixtures;\nusing Serenity.Testing.Fixtures;\n\nnamespace Serenity.Testing.WebDriver\n{\n    public class WebDriverExtensionsTester<TBrowser> : ScreenManipulationTester<TBrowser> where TBrowser : IBrowserLifecycle, new()\n    {\n        private const string EmptyTextboxId = \"emptytextboxid\";\n        private const string EmptyTextboxName = \"emptytextboxname\";\n\n        private const string DelayAddElementButtonId = \"delayAddButton\";\n        private const string AddedElementsClass = \"added-elements\";\n\n        protected override void ConfigureDocument(HtmlDocument document)\n        {\n            var textbox = new TextboxTag(EmptyTextboxName, string.Empty)\n                .Id(EmptyTextboxId)\n                .Data(\"value\", \"some value\");\n\n            document.Add(textbox);\n\n            var button = new HtmlTag(\"button\")\n                .Id(DelayAddElementButtonId)\n                .Text(\"Append element\");\n\n            document.Add(button);\n\n            var appendedElementsDiv = new DivTag().AddClass(AddedElementsClass);\n\n            document.Add(appendedElementsDiv);\n\n            document.ReferenceJavaScriptFile(\"file:///\" + \"jquery-2.0.3.min.js\".ToFullPath());\n\n            document.AddJavaScript(\"$(function() { $('#\" + DelayAddElementButtonId + \"').click(function() { setTimeout(function() { $('.\" + AddedElementsClass + \"').append('<p>blah</p>'); }, 3000); }); });\");\n        }\n\n        [Test]\n        public void HasAttributeReturnsTrue()\n        {\n            Driver.FindElement(By.Id(EmptyTextboxId)).HasAttribute(\"data-value\").ShouldBeTrue();\n        }\n\n        [Test]\n        public void HasAttributeReturnsFalse()\n        {\n            Driver.FindElement(By.Id(EmptyTextboxId)).HasAttribute(\"data-is-not-there\").ShouldBeFalse();\n        }\n\n        [Test]\n        public void WaitForElementWaitsForElementToBeOnTheDom()\n        {\n            Driver.FindElement(By.Id(DelayAddElementButtonId)).Click();\n            Driver.WaitForElement(By.CssSelector(\".{0} p\".ToFormat(AddedElementsClass))).ShouldNotBeNull();\n        }\n\n        [Test]\n        public void WaitForElementWaitsForElementToBeOnTheDomNeverShowsUp()\n        {\n            Exception<NoSuchElementException>.ShouldBeThrownBy(() =>\n            {\n                Driver.WaitForElement(By.CssSelector(\".there-is-no-element\".ToFormat(AddedElementsClass)), timeout: TimeSpan.FromSeconds(2));\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/WebDriverSettingsTester.cs",
    "content": "using System.Reflection;\nusing FubuCore;\nusing NUnit.Framework;\nusing Shouldly;\nusing OpenQA.Selenium;\nusing OpenQA.Selenium.Chrome;\nusing OpenQA.Selenium.Firefox;\nusing OpenQA.Selenium.IE;\nusing OpenQA.Selenium.PhantomJS;\n\nnamespace Serenity.Testing\n{\n    [TestFixture]\n    public class WebDriverSettingsTester\n    {\n\n        [Test]\n        public void read_website_settings_if_there_is_no_file()\n        {\n            new FileSystem().DeleteFile(WebDriverSettings.Filename);\n\n            WebDriverSettings.Read().Browser.ShouldBe(new WebDriverSettings().Browser);\n        }\n\n        [Test]\n        public void read_website_settings()\n        {\n            new FileSystem().AlterFlatFile(WebDriverSettings.Filename, list => list.Add(\"WebDriverSettings.Browser=IE\"));\n\n            WebDriverSettings.Read().Browser.ShouldBe(BrowserType.IE);\n        }\n\n\n\n        [Test]\n        public void default_browser_is_firefox()\n        {\n            // It's this way because the web driver for firefox works best on my\n            // box and I'm the one who wants this to work quickly today\n            // - Jeremy 10/5/2011\n\n            new WebDriverSettings().Browser.ShouldBe(BrowserType.Firefox);\n        }\n\n        [Test]\n        public void build_firefox_driver()\n        {\n            using (var browser = WebDriverSettings.GetBrowserLifecyle(BrowserType.Firefox))\n            {\n                browser.ShouldBeOfType<FirefoxBrowser>();\n            }\n        }\n\n        [Test]\n        public void build_chrome_driver()\n        {\n            using (var browser = WebDriverSettings.GetBrowserLifecyle(BrowserType.Chrome))\n            {\n                browser.ShouldBeOfType<ChromeBrowser>();\n            }\n        }\n\n\n        [Test]\n        public void build_phantom_driver()\n        {\n            using (var browser = WebDriverSettings.GetBrowserLifecyle(BrowserType.Phantom))\n            {\n                browser.ShouldBeOfType<PhantomBrowser>();\n            }\n        }\n\n        // Before you run this, make sure that IE opens without the F12 tools visible because\n        // WebDriver things that's a modal dialog box and throws up\n        [Test, Ignore(\"Need to do the IE Driver thing like Chrome\")]\n        public void build_IE_driver_because_you_know_you_will_have_to_do_this_at_some_point()\n        {\n            using (var browser = WebDriverSettings.GetBrowserLifecyle(BrowserType.IE))\n            {\n                browser.ShouldBeOfType<InternetExplorerDriver>();\n            }\n\n        }\n    }\n}"
  },
  {
    "path": "src/Serenity.Testing/get_say_Name.spark",
    "content": "﻿<use namespace=\"KayakTestApplication\" />\n<viewdata model=\"KayakTestApplication.NameModel\" />\n\n<html>\n\t<head><title>Saying my name</title></head>\n\t<body>\n\t\t<h1>My name is ${Model.Name}</h1>\n\n\n\t</body>\n</html>"
  },
  {
    "path": "src/Serenity.Testing/paket.references",
    "content": "Castle.Core\nDotNetZip\nFubuCore\nHtmlTags\nMicrosoft.AspNet.WebApi.Client\nMicrosoft.AspNet.WebApi.Core\nMicrosoft.AspNet.WebApi.SelfHost\nMicrosoft.Net.Http\nMicrosoft.Owin\nMicrosoft.Owin.Host.HttpListener\nMicrosoft.Owin.Hosting\nNewtonsoft.Json\nOwin\nRhinoMocks\nSelenium.RC\nSelenium.Support\nSelenium.WebDriver\nSelenium.WebDriverBackedSelenium\nShouldly\nStoryteller\nstructuremap"
  },
  {
    "path": "src/Serenity.Testing/web.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <system.webServer>\n    <validation validateIntegratedModeConfiguration=\"false\" />\n    <modules runAllManagedModulesForAllRequests=\"true\">\n      <!-- To prevent static content from being run thru ASP.NET, we want to set runAllManagedModulesForAllRequests=\"false\"\n\t\t\t   However, UrlRoutingModel will stop working, unless you patch IIS to support extensionless routing (introduced in .NET 4)\n\t\t\t   Download the patch at http://support.microsoft.com/kb/980368  -->\n      <!-- To prevent static content from being run thru ASP.NET, we want to set runAllManagedModulesForAllRequests=\"false\"\n\t\t\t   However, UrlRoutingModel will stop working, unless you patch IIS to support extensionless routing (introduced in .NET 4)\n\t\t\t   Download the patch at http://support.microsoft.com/kb/980368  -->\n      <!-- To prevent static content from being run thru ASP.NET, we want to set runAllManagedModulesForAllRequests=\"false\"\n\t\t\t   However, UrlRoutingModel will stop working, unless you patch IIS to support extensionless routing (introduced in .NET 4)\n\t\t\t   Download the patch at http://support.microsoft.com/kb/980368  -->\n      <!-- To prevent static content from being run thru ASP.NET, we want to set runAllManagedModulesForAllRequests=\"false\"\n\t\t\t   However, UrlRoutingModel will stop working, unless you patch IIS to support extensionless routing (introduced in .NET 4)\n\t\t\t   Download the patch at http://support.microsoft.com/kb/980368  -->\n      <remove name=\"UrlRoutingModule\" />\n      <add name=\"UrlRoutingModule\" type=\"System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" preCondition=\"managedHandler\" />\n    </modules>\n  </system.webServer>\n</configuration>"
  },
  {
    "path": "src/SerenityDemonstrator/DemoSystem.cs",
    "content": "﻿using Serenity;\n\nnamespace SerenityDemonstrator\n{\n    public class DemoSystem : FubuMvcSystem<DemonstratorApplication>\n    {\n         \n    }\n}"
  },
  {
    "path": "src/SerenityDemonstrator/DemonstratorApplication.cs",
    "content": "﻿using System;\nusing FubuMVC.Core;\nusing FubuMVC.Core.StructureMap;\n\nnamespace SerenityDemonstrator\n{\n    public class DemonstratorApplication : IApplicationSource\n    {\n        public FubuApplication BuildApplication(string directory)\n        {\n            FubuMode.SetUpForDevelopmentMode();\n            \n            throw new Exception(\"NWO\");\n            //return FubuRuntime.Basic();\n        }\n    }\n}"
  },
  {
    "path": "src/SerenityDemonstrator/Endpoints/SimpleEndpoints.cs",
    "content": "﻿using HtmlTags;\n\nnamespace SerenityDemonstrator.Endpoints\n{\n    public class SimpleEndpoints\n    {\n        public HtmlDocument get_blue()\n        {\n            var document = new HtmlDocument()\n            {\n                Title = \"Blue!\"\n            };\n\n            document.Add(\"h1\").Text(\"Blue\");\n\n            return document;\n        }\n\n        public string get_green()\n        {\n            return \"the color is green\";\n        }\n\n        public string post_color_Name(ColorInput input)\n        {\n            return \"the color is \" + input.Name;\n        }\n    }\n\n    public class ColorInput\n    {\n        public string Name { get; set; }\n    }\n}"
  },
  {
    "path": "src/SerenityDemonstrator/Fixtures/ColorEndpointFixture.cs",
    "content": "﻿using System.Diagnostics;\nusing Serenity.Fixtures;\nusing SerenityDemonstrator.Endpoints;\nusing StoryTeller;\n\nnamespace SerenityDemonstrator.Fixtures\n{\n    public class ColorEndpointFixture : ScreenFixture\n    {\n        [FormatAs(\"Fetch /blue\")]\n        public void FetchBlue()\n        {\n            var text = Endpoints.Get<SimpleEndpoints>(x => x.get_blue())\n                .ReadAsText();\n\n            Debug.WriteLine(\"Got from /blue:\");\n            Debug.WriteLine(text);\n        }\n\n        [FormatAs(\"Fetch /green\")]\n        public void FetchGreen()\n        {\n            var text = Endpoints.Get<SimpleEndpoints>(x => x.get_green())\n                .ReadAsText();\n\n            Debug.WriteLine(\"Got from /green:\");\n            Debug.WriteLine(text);\n        }\n\n        [FormatAs(\"Fetching /color/{color} should return text {text}\")]\n        public void FetchColor(string color)\n        {\n            var text = Endpoints.PostJson(new ColorInput {Name = color})\n                .ReadAsText();\n\n            Debug.WriteLine(\"Got from /color/\" + color + \":\");\n            Debug.WriteLine(text);\n        }\n\n    }\n}"
  },
  {
    "path": "src/SerenityDemonstrator/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"SerenityDemonstrator\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Towers Watson\")]\n[assembly: AssemblyProduct(\"SerenityDemonstrator\")]\n[assembly: AssemblyCopyright(\"Copyright © Towers Watson 2015\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"6d50dfef-d720-4872-bd96-c7b7c1adf1d7\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/SerenityDemonstrator/SerenityDemonstrator.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{6820385C-0843-4DB0-B694-F9169646350E}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>SerenityDemonstrator</RootNamespace>\n    <AssemblyName>SerenityDemonstrator</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Bottles\">\n      <HintPath>..\\packages\\Bottles\\lib\\Bottles.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"DemonstratorApplication.cs\" />\n    <Compile Include=\"DemoSystem.cs\" />\n    <Compile Include=\"Endpoints\\SimpleEndpoints.cs\" />\n    <Compile Include=\"Fixtures\\ColorEndpointFixture.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Serenity\\Serenity.csproj\">\n      <Project>{900a0419-3579-4dae-85be-71a3e4b34239}</Project>\n      <Name>Serenity</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"HtmlTags\">\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Owin\">\n          <HintPath>..\\..\\packages\\Microsoft.Owin\\lib\\net45\\Microsoft.Owin.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Owin.Host.HttpListener\">\n          <HintPath>..\\..\\packages\\Microsoft.Owin.Host.HttpListener\\lib\\net45\\Microsoft.Owin.Host.HttpListener.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Owin.Hosting\">\n          <HintPath>..\\..\\packages\\Microsoft.Owin.Hosting\\lib\\net45\\Microsoft.Owin.Hosting.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Primitives\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Owin\">\n          <HintPath>..\\..\\packages\\Owin\\lib\\net40\\Owin.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StoryTeller\">\n          <HintPath>..\\..\\packages\\Storyteller\\lib\\net45\\StoryTeller.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.AppContext\">\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Buffers\">\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Console\">\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tools\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Calendars\">\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Extensions\">\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression\">\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression.ZipFile\">\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http\">\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Primitives\">\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Extensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Primitives\">\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Resources.ResourceManager\">\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Handles\">\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Loader\">\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Numerics\">\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Cng\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Csp\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Timer\">\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/SerenityDemonstrator/Specs/Diagnostics/Log_Http_requests_in_the_Storyteller_output.xml",
    "content": "<Spec id=\"4a77d799-2649-4a9c-8744-b476155abd6e\" maxRetries=\"0\" tags=\"\" lifecycle=\"Acceptance\" name=\"Log Http requests in the Storyteller output\">\n  <ColorEndpoint id=\"469eb761-e099-412f-a876-f0c7354d1b96\">\n    <FetchBlue />\n    <FetchGreen />\n    <FetchColor color=\"yellow\" text=\"yellow\" />\n    <FetchColor color=\"purple\" text=\"purple\" />\n  </ColorEndpoint>\n</Spec>"
  },
  {
    "path": "src/SerenityDemonstrator/paket.references",
    "content": "FubuCore\nHtmlTags\nMicrosoft.Owin\nMicrosoft.Owin.Host.HttpListener\nMicrosoft.Owin.Hosting\nOwin\nStoryteller\nStructureMap"
  },
  {
    "path": "src/ServiceBusSerenitySamples/Fixtures/MultipleEndpointsFixture.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus;\nusing Serenity;\nusing Serenity.ServiceBus;\nusing ServiceBusSerenitySamples.Setup;\nusing ServiceBusSerenitySamples.SystemUnderTest;\nusing ServiceBusSerenitySamples.SystemUnderTest.Subscriptions;\nusing StoryTeller;\n\nnamespace ServiceBusSerenitySamples.Fixtures\n{\n    public class MultipleEndpointsFixture : ExternalNodeFixture\n    {\n        private TestResponse _responseFromExternalService;\n\n        public MultipleEndpointsFixture()\n        {\n            Title = \"Multiple Endpoints\";\n        }\n\n        [FormatAs(\"Add another service that communicates with the system under test\")]\n        public void SetupAnotherService()\n        {\n            AddOtherService();\n        }\n\n        [FormatAs(\"Send SomeCommand from node {name}\")]\n        public void SendCommandFromNode(string name)\n        {\n            var node = AddTestNode<ClientRegistry>(name);\n            node.Send(new SomeCommand());\n        }\n\n        [FormatAs(\"Send message from node {name}\")]\n        public void SendMessageFromNode(string name)\n        {\n            var node = AddTestNode<ClientRegistry>(name);\n            node.Send(new TestMessage());\n        }\n\n        [FormatAs(\"Send message from the system under test to the external service\")]\n        public void SendMessageToOtherService()\n        {\n            Retrieve<IServiceBus>().Send(new MessageForExternalService());\n        }\n\n        [FormatAs(\"Await a response to a request sent to the external service\")]\n        public void SendRequestToOtherService()\n        {\n            var node = AddOtherService();\n            node.ClearReceivedMessages();\n\n            var task = Retrieve<IServiceBus>().Request<TestResponse>(new MessageForExternalService());\n            ShortWait(() => node.ReceivedMessages<MessageForExternalService>().Any());\n\n            node.RespondToRequestWithMessage<MessageForExternalService>(new TestResponse());\n\n            if (task.Wait(TimeSpan.FromSeconds(1)))\n            {\n                _responseFromExternalService = task.Result;\n            }\n        }\n\n        [FormatAs(\"Node {name} received a response\")]\n        public bool NodeReceivedMessage(string name)\n        {\n            var node = AddTestNode<ClientRegistry>(name);\n            return ShortWait(() => node.ReceivedMessage<TestResponse>());\n        }\n\n        [FormatAs(\"External service received the event\")]\n        public bool OtherServiceReceivedEvent()\n        {\n            return OtherServiceReceivedMessage<PublishedEvent>();\n        }\n\n        [FormatAs(\"External service received the message\")]\n        public bool OtherServiceReceivedMessage()\n        {\n            return OtherServiceReceivedMessage<MessageForExternalService>();\n        }\n\n        private bool OtherServiceReceivedMessage<T>()\n        {\n            var node = AddOtherService();\n            return ShortWait(() => node.ReceivedMessage<T>());\n        }\n\n        [FormatAs(\"The system under test should receive the message\")]\n        public bool SystemReceivedMessage()\n        {\n            var messages = Context.Service<SystemUnderTest.MessageRecorder>().Messages;\n            return ShortWait(() => messages.Any(x => x is TestMessage));\n        }\n\n        [FormatAs(\"The system under test should receive the response to the request\")]\n        public bool SystemReceivedRequestedResponse()\n        {\n            return _responseFromExternalService != null;\n        }\n\n        private ExternalNode AddOtherService()\n        {\n            return AddTestNode<AnotherServiceRegistry>(\"AnotherService\");\n        }\n\n        private bool ShortWait(Func<bool> condition)\n        {\n            return Wait.Until(condition, 200, 2000);\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSerenitySamples/Properties/AssemblyInfo.cs",
    "content": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"ServiceBusSerenitySamples\")]\n"
  },
  {
    "path": "src/ServiceBusSerenitySamples/SampleSystem.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Configuration;\nusing Serenity.ServiceBus;\nusing ServiceBusSerenitySamples.SystemUnderTest;\n\nnamespace ServiceBusSerenitySamples\n{\n    public class SampleSystem : FubuTransportSystem<TestApplication>\n    {\n        public SampleSystem()\n        {\n            OnContextCreation<SystemUnderTest.MessageRecorder>(x => x.Messages.Clear());\n            FubuTransport.SetupForInMemoryTesting<TestSettings>();\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSerenitySamples/ServiceBusSerenitySamples.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{61C504B7-4D55-4CB3-9FD2-B0726E09F425}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <RootNamespace>ServiceBusSerenitySamples</RootNamespace>\n    <AssemblyName>ServiceBusSerenitySamples</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\CommonAssemblyInfo.cs\">\n      <Link>CommonAssemblyInfo.cs</Link>\n    </Compile>\n    <Compile Include=\"Fixtures\\MultipleEndpointsFixture.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"SampleSystem.cs\" />\n    <Compile Include=\"Setup\\Registries.cs\" />\n    <Compile Include=\"Setup\\MessageForExternalService.cs\" />\n    <Compile Include=\"Setup\\MultipleEndpointsSettings.cs\" />\n    <Compile Include=\"SystemUnderTest\\MessageRecorder.cs\" />\n    <Compile Include=\"SystemUnderTest\\Subscriptions\\CommandHandler.cs\" />\n    <Compile Include=\"SystemUnderTest\\Subscriptions\\PublishedEvent.cs\" />\n    <Compile Include=\"SystemUnderTest\\Subscriptions\\SomeCommand.cs\" />\n    <Compile Include=\"SystemUnderTest\\TestApplication.cs\" />\n    <Compile Include=\"SystemUnderTest\\TestMessage.cs\" />\n    <Compile Include=\"SystemUnderTest\\TestMessageHandler.cs\" />\n    <Compile Include=\"SystemUnderTest\\TestRegistry.cs\" />\n    <Compile Include=\"SystemUnderTest\\TestResponse.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Serenity\\Serenity.csproj\">\n      <Project>{900a0419-3579-4dae-85be-71a3e4b34239}</Project>\n      <Name>Serenity</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"HtmlTags\">\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Primitives\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Owin\">\n          <HintPath>..\\..\\packages\\Owin\\lib\\net40\\Owin.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"ThoughtWorks.Selenium.Core\">\n          <HintPath>..\\..\\packages\\Selenium.RC\\lib\\net35\\ThoughtWorks.Selenium.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Drawing\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"ThoughtWorks.Selenium.Core\">\n          <HintPath>..\\..\\packages\\Selenium.RC\\lib\\net40\\ThoughtWorks.Selenium.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Drawing\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"WebDriver.Support\">\n          <HintPath>..\\..\\packages\\Selenium.Support\\lib\\net35\\WebDriver.Support.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Drawing\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"WebDriver.Support\">\n          <HintPath>..\\..\\packages\\Selenium.Support\\lib\\net40\\WebDriver.Support.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Drawing\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"WebDriver\">\n          <HintPath>..\\..\\packages\\Selenium.WebDriver\\lib\\net35\\WebDriver.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Drawing\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"WebDriver\">\n          <HintPath>..\\..\\packages\\Selenium.WebDriver\\lib\\net40\\WebDriver.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Drawing\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Selenium.WebDriverBackedSelenium\">\n          <HintPath>..\\..\\packages\\Selenium.WebDriverBackedSelenium\\lib\\net35\\Selenium.WebDriverBackedSelenium.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Drawing\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Selenium.WebDriverBackedSelenium\">\n          <HintPath>..\\..\\packages\\Selenium.WebDriverBackedSelenium\\lib\\net40\\Selenium.WebDriverBackedSelenium.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Drawing\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StoryTeller\">\n          <HintPath>..\\..\\packages\\Storyteller\\lib\\net45\\StoryTeller.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.AppContext\">\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Buffers\">\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Console\">\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tools\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Calendars\">\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Extensions\">\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression\">\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression.ZipFile\">\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http\">\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Primitives\">\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Extensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Primitives\">\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Resources.ResourceManager\">\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Handles\">\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Loader\">\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Numerics\">\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Cng\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Csp\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Timer\">\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/ServiceBusSerenitySamples/Setup/MessageForExternalService.cs",
    "content": "﻿namespace ServiceBusSerenitySamples.Setup\n{\n    public class MessageForExternalService\n    {\n    }\n}"
  },
  {
    "path": "src/ServiceBusSerenitySamples/Setup/MultipleEndpointsSettings.cs",
    "content": "using System;\n\nnamespace ServiceBusSerenitySamples.Setup\n{\n    public class MultipleEndpointsSettings\n    {\n        // For any properties that match the TestRegistry, the in-memory setup \n        // will ensure the URIs match up.\n        public Uri AnotherService { get; set; }\n        public Uri Client { get; set; }\n        public Uri SystemUnderTest { get; set; }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSerenitySamples/Setup/Registries.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Configuration;\nusing ServiceBusSerenitySamples.SystemUnderTest.Subscriptions;\n\nnamespace ServiceBusSerenitySamples.Setup\n{\n    public class ClientRegistry : FubuTransportRegistry<MultipleEndpointsSettings>\n    {\n        public ClientRegistry()\n        {\n            Channel(x => x.Client)\n                .AcceptsMessage<MessageForExternalService>()\n                .ReadIncoming();\n        }\n    }\n\n    public class AnotherServiceRegistry : FubuTransportRegistry<MultipleEndpointsSettings>\n    {\n        public AnotherServiceRegistry()\n        {\n            Channel(x => x.AnotherService)\n                .ReadIncoming();\n\n            SubscribeLocally()\n                .ToSource(x => x.SystemUnderTest)\n                .ToMessage<PublishedEvent>();\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSerenitySamples/SystemUnderTest/MessageRecorder.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace ServiceBusSerenitySamples.SystemUnderTest\n{\n    public class MessageRecorder\n    {\n        public readonly IList<object> Messages = new List<object>();\n    }\n}"
  },
  {
    "path": "src/ServiceBusSerenitySamples/SystemUnderTest/Subscriptions/CommandHandler.cs",
    "content": "﻿namespace ServiceBusSerenitySamples.SystemUnderTest.Subscriptions\n{\n    public class CommandHandler\n    {\n        public PublishedEvent Handle(SomeCommand message)\n        {\n            return new PublishedEvent();\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSerenitySamples/SystemUnderTest/Subscriptions/PublishedEvent.cs",
    "content": "﻿namespace ServiceBusSerenitySamples.SystemUnderTest.Subscriptions\n{\n    public class PublishedEvent\n    {\n    }\n}"
  },
  {
    "path": "src/ServiceBusSerenitySamples/SystemUnderTest/Subscriptions/SomeCommand.cs",
    "content": "﻿namespace ServiceBusSerenitySamples.SystemUnderTest.Subscriptions\n{\n    public class SomeCommand\n    {\n    }\n}"
  },
  {
    "path": "src/ServiceBusSerenitySamples/SystemUnderTest/TestApplication.cs",
    "content": "﻿using FubuMVC.Core;\n\nnamespace ServiceBusSerenitySamples.SystemUnderTest\n{\n    public class TestApplication : IApplicationSource\n    {\n        public FubuApplication BuildApplication(string directory)\n        {\n            return FubuApplication.For<TestRegistry>(x => x.Services.For<MessageRecorder>().Singleton());\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSerenitySamples/SystemUnderTest/TestMessage.cs",
    "content": "﻿namespace ServiceBusSerenitySamples.SystemUnderTest\n{\n    public class TestMessage\n    {\n    }\n}"
  },
  {
    "path": "src/ServiceBusSerenitySamples/SystemUnderTest/TestMessageHandler.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime.Cascading;\n\nnamespace ServiceBusSerenitySamples.SystemUnderTest\n{\n    public class TestMessageHandler\n    {\n        private readonly MessageRecorder _messageRecorder;\n\n        public TestMessageHandler(MessageRecorder messageRecorder)\n        {\n            _messageRecorder = messageRecorder;\n        }\n\n        public Respond Handle(TestMessage message)\n        {\n            _messageRecorder.Messages.Add(message);\n            return Respond.With(new TestResponse()).ToSender();\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSerenitySamples/SystemUnderTest/TestRegistry.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing ServiceBusSerenitySamples.Setup;\nusing ServiceBusSerenitySamples.SystemUnderTest.Subscriptions;\n\nnamespace ServiceBusSerenitySamples.SystemUnderTest\n{\n    public class TestRegistry : FubuTransportRegistry<TestSettings>\n    {\n        public static bool InMemory;\n        public TestRegistry()\n        {\n            Channel(x => x.SystemUnderTest)\n                .AcceptsMessage<SomeCommand>()\n                .AcceptsMessage<TestMessage>()\n                .ReadIncoming();\n\n            Channel(x => x.AnotherService)\n                .AcceptsMessage<MessageForExternalService>();\n        }\n    }\n\n    public class TestSettings\n    {\n        public Uri AnotherService { get; set; }\n        public Uri SystemUnderTest { get; set; }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSerenitySamples/SystemUnderTest/TestResponse.cs",
    "content": "﻿namespace ServiceBusSerenitySamples.SystemUnderTest\n{\n    public class TestResponse\n    {\n    }\n}"
  },
  {
    "path": "src/ServiceBusSerenitySamples/Tests/ExternalNodes/Request-Response_with_an_external_node.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Request-Response with an external node\" lifecycle=\"Acceptance\" retryAttemptNumber=\"0\">\n  <MultipleEndpoints>\n    <SetupAnotherService isStep=\"True\" />\n    <SendRequestToOtherService isStep=\"True\" />\n    <SystemReceivedRequestedResponse isStep=\"True\" />\n  </MultipleEndpoints>\n</Test>"
  },
  {
    "path": "src/ServiceBusSerenitySamples/Tests/ExternalNodes/Sending_from_external_nodes.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Sending from external nodes\" lifecycle=\"Regression\" retryAttemptNumber=\"0\">\n  <MultipleEndpoints>\n    <SendMessageFromNode isStep=\"True\" name=\"Client 1\" />\n    <SystemReceivedMessage isStep=\"True\" />\n    <NodeReceivedMessage isStep=\"True\" name=\"Client 1\" />\n  </MultipleEndpoints>\n</Test>"
  },
  {
    "path": "src/ServiceBusSerenitySamples/Tests/ExternalNodes/Sending_from_the_system_under_test.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Sending from the system under test\" lifecycle=\"Regression\" retryAttemptNumber=\"0\">\n  <MultipleEndpoints>\n    <SetupAnotherService isStep=\"True\" />\n    <SendMessageToOtherService isStep=\"True\" />\n    <OtherServiceReceivedMessage isStep=\"True\" />\n  </MultipleEndpoints>\n</Test>"
  },
  {
    "path": "src/ServiceBusSerenitySamples/Tests/ExternalNodes/Subscribing_to_events_published_from_the_system_under_test.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Subscribing to events published from the system under test\" lifecycle=\"Regression\" retryAttemptNumber=\"0\">\n  <MultipleEndpoints>\n    <SetupAnotherService isStep=\"True\" />\n    <SendCommandFromNode isStep=\"True\" name=\"Client 1\" />\n    <OtherServiceReceivedEvent isStep=\"True\" />\n  </MultipleEndpoints>\n</Test>"
  },
  {
    "path": "src/ServiceBusSerenitySamples/fubu.templates.config",
    "content": "%ASSEMBLY_NAME%=FubuTransportation.Serenity.Samples\n%SHORT_NAME%=Samples\n%RAKE_TASK_PREFIX%=samples\n%PROJECT_PATH%=src/FubuTransportation.Serenity.Samples/FubuTransportation.Serenity.Samples.csproj\n%PROJECT_FOLDER%=src/FubuTransportation.Serenity.Samples\n"
  },
  {
    "path": "src/ServiceBusSerenitySamples/paket.references",
    "content": "FubuCore\nHtmlTags\nOwin\nSelenium.RC\nSelenium.Support\nSelenium.WebDriver\nSelenium.WebDriverBackedSelenium\nStoryteller\nStructureMap"
  },
  {
    "path": "src/ServiceBusSpecifications/Fixtures/BatchMessageFixture.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus;\nusing Serenity.ServiceBus;\nusing ServiceNode;\nusing StoryTeller;\n\nnamespace ServiceBusSpecifications.Fixtures\n{\n    public class BatchMessageFixture : Fixture\n    {\n        public BatchMessageFixture()\n        {\n            Title = \"Batch Message Mechanics\";\n        }\n\n        public IGrammar SendBatch()\n        {\n            return Embed<DefineBatchMessageFixture>(\"Send a batch of messages\");\n        }\n\n        public IGrammar TheRecordedMessagesAre()\n        {\n            return\n                VerifyStringList(() => TextFileWriter.Read())\n                    .Titled(\"The recorded message log from the service should be\");\n        }\n    }\n\n    [Hidden]\n    public class DefineBatchMessageFixture : FubuTransportActFixture\n    {\n        private MessageBatch _batch;\n\n        protected override void setup()\n        {\n            _batch = new MessageBatch();\n        }\n\n        [FormatAs(\"Description is {description}\")]\n        public void DescriptionIs(string description)\n        {\n            _batch.Description = description;\n        }\n\n        [FormatAs(\"Add color {color}\")]\n        public void SendColor(string color)\n        {\n            _batch.Add(new ColorMessage {Color = color});\n        }\n\n        [FormatAs(\"Add direction {direction}\")]\n        public void SendDirection(string direction)\n        {\n            _batch.Add(new DirectionMessage {Direction = direction});\n        }\n\n        [FormatAs(\"Add state {state}\")]\n        public void SendState(string state)\n        {\n            _batch.Add(new StateMessage {State = state});\n        }\n\n        [FormatAs(\"Add team {team}\")]\n        public void SendTeam(string team)\n        {\n            _batch.Add(new TeamMessage {Team = team});\n        }\n\n        protected override void teardown()\n        {\n            Retrieve<IServiceBus>().Send(_batch);\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Fixtures/Monitoring/FakePersistentTask.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing OpenQA.Selenium.Safari.Internal;\nusing StoryTeller;\n\nnamespace ServiceBusSpecifications.Fixtures.Monitoring\n{\n    public class FakePersistentTask : IPersistentTask\n    {\n        private IEnumerable<string> _preferredNodes = new string[0];\n        public Exception ActivationException = null;\n        public Exception AssertAvailableException = null;\n        public Exception DeactivateException = null;\n\n        public FakePersistentTask(Uri subject)\n        {\n            Subject = subject;\n        }\n\n        public void IsFullyFunctional()\n        {\n            Timesout = false;\n            ActivationException = AssertAvailableException = null;\n        }\n\n        public IEnumerable<string> PreferredNodes\n        {\n            get { return _preferredNodes; }\n            set { _preferredNodes = value; }\n        }\n\n        public Uri Subject { get; private set; }\n\n        public void AssertAvailable()\n        {\n            if (Timesout)\n            {\n                Debug.WriteLine(\"Trying to timeout task \" + Subject);\n                Thread.Sleep(1.Minutes());\n            }\n            Thread.Sleep(10);\n            if (AssertAvailableException != null) throw AssertAvailableException;\n        }\n\n        public void Activate()\n        {\n            Thread.Sleep(10);\n            if (Timesout)\n            {\n                Thread.Sleep(1.Minutes());\n            }\n            if (ActivationException != null) throw ActivationException;\n\n            IsActive = true;\n        }\n\n        public void Deactivate()\n        {\n            if (DeactivateException != null) throw DeactivateException;\n\n            IsActive = false;\n        }\n\n        public bool IsActive { get; set; }\n\n        public Task<ITransportPeer> SelectOwner(IEnumerable<ITransportPeer> peers)\n        {\n            var ordered = _preferredNodes.Select(x => peers.FirstOrDefault(_ => _.NodeId == x))\n                .Where(x => x != null);\n\n            StoryTellerAssert.Fail(!ordered.Any(), \"No preferred nodes established for this test node\");\n\n            var assignment = new OrderedAssignment(Subject, ordered);\n\n            return assignment.SelectOwner();\n        }\n\n        public void IsFullyFunctionalAndActive()\n        {\n            IsFullyFunctional();\n            IsActive = true;\n        }\n\n        public void IsActiveButNotFunctional(Exception exception)\n        {\n            IsActive = true;\n            AssertAvailableException = exception;\n        }\n\n        public void IsNotActive()\n        {\n            IsActive = false;\n        }\n\n        public void SetState(string state, ISubscriptionPersistence persistence, string nodeId)\n        {\n            Timesout = false;\n\n            switch (state)\n            {\n                case MonitoredNode.HealthyAndFunctional:\n                    IsFullyFunctionalAndActive();\n                    persistence.Alter(nodeId, node => node.AddOwnership(Subject));\n\n                    break;\n\n                case MonitoredNode.ThrowsExceptionOnStartupOrHealthCheck:\n                    ActivationException = new DivideByZeroException();\n                    AssertAvailableException = new HandshakeException();\n                    break;\n\n                case MonitoredNode.TimesOutOnStartupOrHealthCheck:\n                    Timesout = true;\n                    break;\n\n                case MonitoredNode.IsInactive:\n                    IsFullyFunctional();\n                    IsActive = false;\n                    break;\n            }\n        }\n\n        public bool Timesout { get; set; }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Fixtures/Monitoring/FakePersistentTaskSource.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore.Util;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Monitoring;\n\nnamespace ServiceBusSpecifications.Fixtures.Monitoring\n{\n    public class FakePersistentTaskSource : IPersistentTaskSource\n    {\n        private readonly Cache<Uri, FakePersistentTask> _tasks\n            = new Cache<Uri, FakePersistentTask>();\n\n        public FakePersistentTaskSource(string protocol)\n        {\n            Protocol = protocol;\n            _tasks.OnMissing = uri => new FakePersistentTask(uri);\n        }\n\n        public FakePersistentTask this[string name]\n        {\n            get { return _tasks[name.ToUri()]; }\n        }\n\n        public FakePersistentTask this[Uri subject]\n        {\n            get { return _tasks[subject]; }\n        }\n\n        public string Protocol { get; private set; }\n\n        public IEnumerable<FakePersistentTask> FakeTasks()\n        {\n            return _tasks;\n        }\n\n        public IEnumerable<Uri> PermanentTasks()\n        {\n            return _tasks.Select(x => x.Subject);\n        }\n\n        public IPersistentTask CreateTask(Uri uri)\n        {\n            return _tasks[uri];\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Fixtures/Monitoring/MonitoredNode.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuCore.Util;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing FubuMVC.Core.ServiceBus.Polling;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing FubuMVC.LightningQueues;\n\nnamespace ServiceBusSpecifications.Fixtures.Monitoring\n{\n    public class MonitoredNode : FubuTransportRegistry<MonitoringSettings>, IDisposable\n    {\n        public static readonly Random Random = new Random(100);\n\n        public const string HealthyAndFunctional = \"Healthy and Functional\";\n        public const string TimesOutOnStartupOrHealthCheck = \"Times out on startup or health check\";\n        public const string ThrowsExceptionOnStartupOrHealthCheck = \"Throws exception on startup or health check\";\n        public const string IsInactive = \"Is inactive\";\n\n        private readonly string _nodeId;\n        private FubuRuntime _runtime;\n\n        private readonly IList<Uri> _initialTasks = new List<Uri>();\n\n        private readonly Cache<string, FakePersistentTaskSource> _sources =\n            new Cache<string, FakePersistentTaskSource>(scheme => new FakePersistentTaskSource(scheme));\n\n        public MonitoredNode(string nodeId, Uri incoming, PersistentTaskMessageListener listener)\n        {\n            AlterSettings<MonitoringSettings>(x => x.Incoming = incoming);\n            NodeName = \"Monitoring\";\n            NodeId = nodeId;\n\n            _nodeId = nodeId;\n\n            ServiceBus.EnableInMemoryTransport(incoming);\n\n            Services.AddService<ILogListener>(listener);\n\n            AlterSettings<HealthMonitoringSettings>(_ =>\n            {\n                _.TakeOwnershipMessageTimeout = 3.Seconds();\n                _.HealthCheckMessageTimeout = 1.Seconds();\n                _.DeactivationMessageTimeout = 3.Seconds();\n                _.TaskAvailabilityCheckTimeout = 5.Seconds();\n            });\n        }\n\n        public FakePersistentTask TaskFor(string uriString)\n        {\n            return TaskFor(uriString.ToUri());\n        }\n\n        public FakePersistentTask TaskFor(Uri uri)\n        {\n            return _sources[uri.Scheme][uri];\n        }\n\n        public string Id\n        {\n            get { return _nodeId; }\n        }\n\n        public void Startup(bool monitoringEnabled, ISubscriptionPersistence persistence)\n        {\n            AlterSettings<LightningQueueSettings>(x => x.DisableIfNoChannels = true);\n\n            _sources.Each(x => Services.AddService<IPersistentTaskSource>(x));\n\n            Services.ReplaceService(persistence);\n            ServiceBus.HealthMonitoring\n                .ScheduledExecution(monitoringEnabled\n                    ? ScheduledExecution.WaitUntilInterval\n                    : ScheduledExecution.Disabled)\n                .IntervalSeed(3);\n\n            _runtime = ToRuntime();\n            var controller = _runtime.Factory.Get<IPersistentTaskController>();\n\n            _initialTasks.Each(subject => controller.TakeOwnership(subject).Wait(1.Seconds()));\n        }\n\n        void IDisposable.Dispose()\n        {\n            _runtime.Dispose();\n        }\n\n        public void AddTask(Uri subject, IEnumerable<string> preferredNodes)\n        {\n            TaskFor(subject).PreferredNodes = preferredNodes;\n        }\n\n        public Task ActivateTask(Uri subject)\n        {\n            return _runtime.Factory.Get<IPersistentTaskController>().TakeOwnership(subject);\n        }\n\n        public void AddInitialTask(Uri subject)\n        {\n            _initialTasks.Add(subject);\n        }\n\n        public IEnumerable<TaskState> AssignedTasks()\n        {\n            var controller = _runtime.Factory.Get<IPersistentTaskController>();\n            return controller.ActiveTasks().Select(uri => new TaskState {Node = Id, Task = uri});\n        }\n\n        public Task WaitForHealthCheck()\n        {\n            var jobs = _runtime.Factory.Get<IPollingJobs>();\n            if (jobs.IsActive<HealthMonitorPollingJob>())\n            {\n                return jobs.WaitForJobToExecute<HealthMonitorPollingJob>();\n            }\n\n            return jobs.ExecuteJob<HealthMonitorPollingJob>();\n        }\n\n        public void Shutdown()\n        {\n            _runtime.Dispose();\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Fixtures/Monitoring/MonitoredNodeGroup.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\n\nnamespace ServiceBusSpecifications.Fixtures.Monitoring\n{\n    public class MonitoredNodeGroup : IDisposable\n    {\n        private readonly Cache<string, MonitoredNode> _nodes = new Cache<string, MonitoredNode>();\n        private readonly InMemorySubscriptionPersistence _persistence = new InMemorySubscriptionPersistence();\n\n        private readonly System.Collections.Generic.IList<Action<MonitoredNode>> _configurations =\n            new System.Collections.Generic.List<Action<MonitoredNode>>();\n\n        private readonly PersistentTaskMessageListener _listener = new PersistentTaskMessageListener();\n\n        public void Add(string nodeId, Uri incoming)\n        {\n            var node = new MonitoredNode(nodeId, incoming, _listener);\n            _nodes[nodeId] = node;\n        }\n\n        public void AddTask(Uri subject, string initialNode,\n            System.Collections.Generic.IEnumerable<string> preferredNodes)\n        {\n            _configurations.Add(node => node.AddTask(subject, preferredNodes));\n\n            if (!initialNode.EqualsIgnoreCase(\"none\"))\n            {\n                _nodes[initialNode].AddInitialTask(subject);\n            }\n        }\n\n        public bool MonitoringEnabled { get; set; }\n\n        public System.Collections.Generic.IEnumerable<PersistentTaskMessage> LoggedEvents()\n        {\n            return _listener.LoggedEvents().Where(x => x.Subject.Scheme != \"scheduled\").ToArray();\n        }\n\n        public MonitoredNode NodeFor(string id)\n        {\n            return _nodes[id];\n        }\n\n        public void Startup()\n        {\n            _nodes.Each(node =>\n            {\n                _configurations.Each(x => x(node));\n                node.Startup(MonitoringEnabled, _persistence);\n            });\n        }\n\n        public void Dispose()\n        {\n            _nodes.Each(x => x.SafeDispose());\n        }\n\n        public void SetTaskState(Uri subject, string node, string state)\n        {\n            var task = _nodes[node].TaskFor(subject);\n            task.SetState(state, _persistence, node);\n        }\n\n        public System.Collections.Generic.IEnumerable<TaskState> AssignedTasks()\n        {\n            return _nodes.SelectMany(x => x.AssignedTasks()).Where(x => x.Task.Scheme != \"scheduled\");\n        }\n\n        public System.Collections.Generic.IEnumerable<TaskState> PersistedTasks()\n        {\n            return\n                _persistence.AllNodes()\n                    .SelectMany(\n                        node => { return node.OwnedTasks.Select(x => new TaskState {Node = node.Id, Task = x}); })\n                    .Where(x => x.Task.Scheme != \"scheduled\");\n        }\n\n        public void WaitForAllHealthChecks()\n        {\n            var tasks =\n                _nodes.Select(\n                    x =>\n                    {\n                        return\n                            Task.Delay(MonitoredNode.Random.Next(25, 200))\n                                .ContinueWith(t => { return x.WaitForHealthCheck(); })\n                                .Unwrap();\n                    });\n\n            Task.WaitAll(tasks.ToArray(), 15.Seconds());\n        }\n\n        public void ShutdownNode(string node)\n        {\n            _nodes[node].Shutdown();\n            _nodes.Remove(node);\n        }\n\n        public System.Collections.Generic.IEnumerable<TransportNode> GetPersistedNodes()\n        {\n            return _persistence.NodesForGroup(\"Monitoring\");\n        }\n\n        public void WaitForHealthChecksOn(string node)\n        {\n            _nodes[node].WaitForHealthCheck().Wait(15.Seconds());\n        }\n    }\n\n    public class TaskState\n    {\n        public Uri Task { get; set; }\n        public string Node { get; set; }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Fixtures/Monitoring/MonitoringFixture.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuMVC.Core.ServiceBus.Monitoring;\nusing HtmlTags;\nusing Serenity.ServiceBus;\nusing StoryTeller;\nusing StoryTeller.Grammars.Tables;\n\nnamespace ServiceBusSpecifications.Fixtures.Monitoring\n{\n    public class MonitoringFixture : FubuTransportActFixture\n    {\n        private MonitoredNodeGroup _nodes;\n\n        public MonitoringFixture()\n        {\n            Title = \"Health Monitoring, Failover, and Task Assignment\";\n\n            this[\"Context\"] = Embed<MonitoringSetupFixture>(\"If the nodes and tasks are\");\n        }\n\n        protected override void setup()\n        {\n            _nodes = new MonitoredNodeGroup();\n            Context.State.Store(_nodes);\n        }\n\n        protected override void teardown()\n        {\n            var messages = _nodes.LoggedEvents().ToArray();\n            var table = new TableTag();\n            table.AddHeaderRow(_ =>\n            {\n                _.Header(\"Node\");\n                _.Header(\"Subject\");\n                _.Header(\"Type\");\n                _.Header(\"Message\");\n            });\n\n            messages.Each(message =>\n            {\n                table.AddBodyRow(_ =>\n                {\n                    _.Cell(message.NodeId);\n                    _.Cell(message.Subject.ToString());\n                    _.Cell(message.GetType().Name);\n                    _.Cell(message.ToString());\n                });\n            });\n\n\n            Context.Reporting.Log(\"Monitored Node Group\", table.ToString());\n\n            _nodes.Dispose();\n        }\n\n        [ExposeAsTable(\"If the task state is\")]\n        public void TaskStateIs(\n            Uri Task,\n            string Node,\n            [SelectionValues(MonitoredNode.HealthyAndFunctional, MonitoredNode.TimesOutOnStartupOrHealthCheck,\n                MonitoredNode.ThrowsExceptionOnStartupOrHealthCheck, MonitoredNode.IsInactive)] string State)\n        {\n            _nodes.SetTaskState(Task, Node, State);\n        }\n\n        [FormatAs(\"After the health checks run on all nodes\")]\n        public void AfterTheHealthChecksRunOnAllNodes()\n        {\n            _nodes.WaitForAllHealthChecks();\n\n            waitForTheMessageProcessingToFinish();\n        }\n\n        [FormatAs(\"Task {task} was not reassigned\")]\n        public bool TaskWasNotReassigned(Uri task)\n        {\n            var events = _nodes.LoggedEvents().OfType<ReassigningTask>()\n                .Where(x => x.Subject == task);\n\n            if (events.Any())\n            {\n                StoryTellerAssert.Fail(\"Task {0} was reassigned: \" + events.Select(x => x.ToString()).Join(\"\\n\"));\n            }\n\n            return true;\n        }\n\n        [FormatAs(\"After the health checks run on node {node}\")]\n        public void AfterTheHealthChecksRunOnNode(string node)\n        {\n            _nodes.WaitForHealthChecksOn(node);\n\n            waitForTheMessageProcessingToFinish();\n        }\n\n        [FormatAs(\"Node {Node} drops offline\")]\n        public void NodeDropsOffline(string Node)\n        {\n            _nodes.ShutdownNode(Node);\n        }\n\n        public IGrammar TheTaskAssignmentsShouldBe()\n        {\n            return VerifySetOf(() => _nodes.AssignedTasks())\n                .Titled(\"The task assignments should be\")\n                .MatchOn(x => x.Task, x => x.Node);\n        }\n\n        public IGrammar ThePersistedAssignmentsShouldBe()\n        {\n            return VerifySetOf(() => _nodes.PersistedTasks())\n                .Titled(\"The persisted task assignments should be\")\n                .MatchOn(x => x.Task, x => x.Node);\n        }\n\n        public IGrammar ThePersistedNodesShouldBe()\n        {\n            return VerifySetOf(() => _nodes.GetPersistedNodes())\n                .Titled(\"The persisted nodes should be\")\n                .MatchOn(x => x.Id, x => x.ControlChannel);\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Fixtures/Monitoring/MonitoringSettings.cs",
    "content": "﻿using System;\n\nnamespace ServiceBusSpecifications.Fixtures.Monitoring\n{\n    public class MonitoringSettings\n    {\n        public Uri Incoming { get; set; }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Fixtures/Monitoring/MonitoringSetupFixture.cs",
    "content": "﻿using System;\nusing StoryTeller;\nusing StoryTeller.Grammars.Tables;\n\nnamespace ServiceBusSpecifications.Fixtures.Monitoring\n{\n    public class MonitoringSetupFixture : Fixture\n    {\n        private MonitoredNodeGroup _nodes;\n\n        public MonitoringSetupFixture()\n        {\n            Title = \"If the nodes within a cluster are\";\n        }\n\n        public override void SetUp()\n        {\n            _nodes = Context.State.Retrieve<MonitoredNodeGroup>();\n        }\n\n        public override void TearDown()\n        {\n            _nodes.Startup();\n        }\n\n        [FormatAs(\"The Health Monitoring job is enabled in all nodes\")]\n        public void HealthMonitoringIsEnabled()\n        {\n            _nodes.MonitoringEnabled = true;\n        }\n\n\n        [FormatAs(\"The Health Monitoring job is initially disabled in all nodes\")]\n        public void HealthMonitoringIsDisabled()\n        {\n            _nodes.MonitoringEnabled = false;\n        }\n\n        [ExposeAsTable(\"The nodes in this group are\")]\n        public void TheNodesAre([Header(\"Node Id\")] string id, [Header(\"Incoming Uri\")] Uri incoming)\n        {\n            _nodes.Add(id, incoming);\n        }\n\n        [ExposeAsTable(\"The permanent tasks are\")]\n        public void TheTasksAre([Header(\"Task Uri\")] Uri task, [Header(\"Initial Assigned Node\")] string node,\n            [Header(\"Preferred Nodes in Order\")] string[] nodes)\n        {\n            _nodes.AddTask(task, node, nodes);\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Fixtures/Monitoring/PersistentTaskMessageListener.cs",
    "content": "﻿using System;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing System.Linq;\nusing FubuCore;\nusing FubuCore.Logging;\nusing FubuMVC.Core.ServiceBus.Monitoring;\n\nnamespace ServiceBusSpecifications.Fixtures.Monitoring\n{\n    public class PersistentTaskMessageListener : ILogListener\n    {\n        private readonly ConcurrentBag<PersistentTaskMessage> _messages = new ConcurrentBag<PersistentTaskMessage>();\n\n        public bool ListensFor(Type type)\n        {\n            return type.CanBeCastTo<PersistentTaskMessage>();\n        }\n\n        public void DebugMessage(object message)\n        {\n            _messages.Add((PersistentTaskMessage) message);\n        }\n\n        public void InfoMessage(object message)\n        {\n            _messages.Add((PersistentTaskMessage)message);\n        }\n\n        public void Debug(string message)\n        {\n            Console.WriteLine(message);\n        }\n\n        public void Info(string message)\n        {\n            Console.WriteLine(message);\n        }\n\n        public void Error(string message, Exception ex)\n        {\n            Console.WriteLine(message);\n            Console.WriteLine(ex);\n        }\n\n        public void Error(object correlationId, string message, Exception ex)\n        {\n            Console.WriteLine(correlationId);\n            Console.WriteLine(message);\n\n            Console.WriteLine(ex);\n        }\n\n        public bool IsDebugEnabled\n        {\n            get\n            {\n                return true;\n            }\n        }\n\n        public bool IsInfoEnabled\n        {\n            get\n            {\n                return true;\n            }\n        }\n\n        public IEnumerable<PersistentTaskMessage> LoggedEvents()\n        {\n            return _messages.ToArray().OrderBy(x => x.Time);\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Fixtures/RunningNode.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing FubuMVC.LightningQueues;\n\nnamespace ServiceBusSpecifications.Fixtures\n{\n    public class RunningNode\n    {\n        private readonly Uri _replyUri;\n\n        public static readonly HarnessSettings Settings\n            = InMemoryTransport.ToInMemory<HarnessSettings>();\n\n        public static Cache<string, InMemorySubscriptionPersistence> Subscriptions =\n            new Cache<string, InMemorySubscriptionPersistence>(name => new InMemorySubscriptionPersistence());\n\n        private readonly Type _registryType;\n        private readonly string _contents;\n        private FubuRuntime _runtime;\n        private InMemorySubscriptionPersistence _persistence;\n\n        public string Name { get; set; }\n\n        public RunningNode(string typeName, Uri replyUri)\n        {\n            _replyUri = replyUri;\n\n\n            _registryType =\n                Assembly.GetExecutingAssembly()\n                    .ExportedTypes.Where(x => x.IsConcreteTypeOf<FubuRegistry>())\n                    .FirstOrDefault(x => x.Name.EqualsIgnoreCase(typeName));\n\n            var file =\n                new FileSystem().FindFiles(Environment.CurrentDirectory.ParentDirectory().ParentDirectory(),\n                    FileSet.Deep(_registryType.Name + \".cs\")).FirstOrDefault();\n\n            if (file != null)\n            {\n                _contents = new FileSystem().ReadStringFromFile(file);\n            }\n        }\n\n        public void Start()\n        {\n            var registry = Activator.CreateInstance(_registryType).As<FubuRegistry>();\n\n            _persistence = Subscriptions[registry.NodeName];\n            registry.Services.ReplaceService<ISubscriptionPersistence>(_persistence);\n            registry.Services.ReplaceService(Settings);\n\n            registry.AlterSettings<LightningQueueSettings>(x => x.Disabled = true);\n\n            registry.ServiceBus.EnableInMemoryTransport(_replyUri);\n\n            _runtime = registry.ToRuntime();\n        }\n\n        public InMemorySubscriptionPersistence Persistence\n        {\n            get { return _persistence; }\n        }\n\n        public IEnumerable<Subscription> LoadedSubscriptions()\n        {\n            return _runtime.Factory.Get<ISubscriptionCache>()\n                .ActiveSubscriptions;\n        }\n\n        public IEnumerable<Subscription> PersistedSubscriptions(SubscriptionRole role = SubscriptionRole.Publishes)\n        {\n            return _runtime.Factory.Get<ISubscriptionRepository>().LoadSubscriptions(role);\n        }\n\n\n        public void Dispose()\n        {\n            _runtime.Dispose();\n        }\n\n        public string Contents\n        {\n            get { return _contents; }\n        }\n\n        public IEnumerable<TransportNode> PersistedNodes()\n        {\n            return _runtime.Factory.Get<ISubscriptionPersistence>()\n                .NodesForGroup(_runtime.Factory.Get<ChannelGraph>().Name);\n        }\n\n        public void RemoveSubscriptions()\n        {\n            _runtime.Factory.Get<IServiceBus>().RemoveSubscriptionsForThisNodeAsync().Wait();\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Fixtures/SendAndAwaitFixture.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing FubuMVC.Core.ServiceBus;\nusing Serenity.Fixtures;\nusing ServiceNode;\nusing StoryTeller;\n\nnamespace ServiceBusSpecifications.Fixtures\n{\n    public class SendAndAwaitFixture : Fixture\n    {\n        private Task _task;\n\n        public SendAndAwaitFixture()\n        {\n            Title = \"Send and Await an Acknowledgement\";\n        }\n\n        [FormatAs(\"Send a message that we expect to succeed and wait for the ack\")]\n        public void SendMessageSuccessfully()\n        {\n            _task = Retrieve<IServiceBus>().SendAndWait(new SimpleMessage());\n        }\n\n        [FormatAs(\"Send a message that will fail with an AmbiguousMatchException exception\")]\n        public void SendMessageUnsuccessfully()\n        {\n            _task = Retrieve<IServiceBus>().SendAndWait(new ServiceNode.ErrorMessage());\n        }\n\n        [FormatAs(\"The acknowledgement was received within {seconds} seconds\")]\n        public bool AckIsReceived(int seconds)\n        {\n            var sw = Stopwatch.StartNew();\n            try\n            {\n                _task.Wait(seconds.Seconds());\n            }\n            catch (Exception)\n            {\n            }\n            sw.Stop();\n            return sw.Elapsed.Seconds < seconds;\n        }\n\n        [FormatAs(\"The acknowledgement was successful\")]\n        public bool AckWasSuccessful()\n        {\n            StoryTellerAssert.Fail(_task.IsFaulted, () => _task.Exception.ToString());\n\n            return true;\n        }\n\n        [FormatAs(\"The acknowledgment failed and contained the message {message}\")]\n        public bool TheAckFailedWithMessage(string message)\n        {\n            StoryTellerAssert.Fail(_task.Exception == null, \"The task exception is null\");\n\n            StoryTellerAssert.Fail(!_task.Exception.InnerExceptions.First().ToString().Contains(message), \"The actual exception text was:\\n\" + _task.Exception.ToString());\n\n            return true;\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Fixtures/Subscriptions/HasGlobalSubscriptionsRegistry.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Configuration;\nusing ServiceBusSpecifications.Support;\n\nnamespace ServiceBusSpecifications.Fixtures.Subscriptions\n{\n    public class HasGlobalSubscriptionsRegistry : FubuTransportRegistry<HarnessSettings>\n    {\n        public HasGlobalSubscriptionsRegistry()\n        {\n            NodeName = \"GlobalSubscriber\";\n            Channel(x => x.Subscriber1).ReadIncoming();\n\n            SubscribeAt(x => x.Subscriber1)\n                .ToSource(x => x.Publisher1)\n                .ToMessage<OneMessage>();\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Fixtures/Subscriptions/HasLocalSubscriptionsRegistry.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Configuration;\nusing ServiceBusSpecifications.Support;\n\nnamespace ServiceBusSpecifications.Fixtures.Subscriptions\n{\n    public class HasLocalSubscriptionsRegistry : FubuTransportRegistry<HarnessSettings>\n    {\n        public HasLocalSubscriptionsRegistry()\n        {\n            NodeName = \"LocalSubscriber\";\n            Channel(x => x.Subscriber1).ReadIncoming();\n\n            SubscribeLocally()\n                .ToSource(x => x.Publisher1)\n                .ToMessage<OneMessage>()\n                .ToMessage<TwoMessage>();\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Fixtures/Subscriptions/PublishingRegistry.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Configuration;\n\nnamespace ServiceBusSpecifications.Fixtures.Subscriptions\n{\n    public class PublishingRegistry : FubuTransportRegistry<HarnessSettings>\n    {\n        public PublishingRegistry()\n        {\n            NodeName = \"Publishing\";\n            Channel(x => x.Publisher1).ReadIncoming();\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Fixtures/Subscriptions/SubscriptionsFixture.cs",
    "content": "﻿using System.Linq;\nusing System.Reflection;\nusing FubuCore;\nusing FubuCore.Util;\nusing FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.InMemory;\nusing FubuMVC.Core.ServiceBus.Subscriptions;\nusing FubuMVC.Core.Services.Messaging.Tracking;\nusing HtmlTags;\nusing StoryTeller;\n\nnamespace ServiceBusSpecifications.Fixtures.Subscriptions\n{\n    public class SubscriptionsFixture : Fixture\n    {\n        private readonly Cache<string, RunningNode> _nodes = new Cache<string, RunningNode>();\n        private RunningNode _node;\n\n        public SubscriptionsFixture()\n        {\n            AddSelectionValues(\"FubuTransportRegistries\",\n                Assembly.GetExecutingAssembly()\n                    .ExportedTypes.Where(x => x.IsConcreteTypeOf<FubuRegistry>())\n                    .Select(x => x.Name)\n                    .ToArray());\n        }\n\n        public override void SetUp()\n        {\n            RunningNode.Subscriptions.ClearAll();\n            MessageHistory.ClearAll();\n            InMemoryQueueManager.ClearAll();\n            FubuTransport.ApplyMessageHistoryWatching = true;\n        }\n\n        public override void TearDown()\n        {\n            _nodes.Each(x => x.Dispose());\n        }\n\n        [FormatAs(\"Load a node {Key} from {Registry} with reply Uri {ReplyUri}\")]\n        public void LoadNode(string Key, [SelectionList(\"FubuTransportRegistries\")] string Registry, string ReplyUri)\n        {\n            MessageHistory.WaitForWorkToFinish(() =>\n            {\n                var node = new RunningNode(Registry, ReplyUri.ToUri());\n                node.Start();\n\n                _nodes[Key] = node;\n\n                Context.Reporting.Log(\"RunningNode: \" + Key, new CodeTag(Key, node.Contents).ToString());\n            });\n        }\n\n        [FormatAs(\"For node {Key}\")]\n        public void ForNode(string Key)\n        {\n            _node = _nodes[Key];\n        }\n\n        public IGrammar TheActiveSubscriptionsAre()\n        {\n            return VerifySetOf(() => _node.LoadedSubscriptions())\n                .Titled(\"The active subscriptions for publishing are\")\n                .MatchOn(x => x.NodeName, x => x.MessageType, x => x.Source, x => x.Receiver);\n        }\n\n        public IGrammar ThePersistedSubscriptionsAre()\n        {\n            return VerifySetOf(() => _node.PersistedSubscriptions())\n                .Titled(\"The persisted subscriptions for publishing are\")\n                .MatchOn(x => x.NodeName, x => x.MessageType, x => x.Source, x => x.Receiver);\n        }\n\n        public IGrammar TheLocalSubscriptionsAre()\n        {\n            return VerifySetOf(() => _node.PersistedSubscriptions(SubscriptionRole.Subscribes))\n                .Titled(\"The persisted roles for subscribing are\")\n                .MatchOn(x => x.NodeName, x => x.MessageType, x => x.Source, x => x.Receiver);\n        }\n\n        public IGrammar ThePersistedTransportNodesAre()\n        {\n            return VerifySetOf(() => _node.PersistedNodes().Select(x => new TransportNodeItem(x)))\n                .Titled(\"The persisted transport nodes are\")\n                .MatchOn(x => x.NodeName, x => x.Address);\n        }\n\n        [FormatAs(\"Node {Key} removes local subscriptions\")]\n        public void NodeRemovesLocalSubscritpions(string Key)\n        {\n            _nodes[Key].RemoveSubscriptions();\n        }\n    }\n\n    public class TransportNodeItem\n    {\n        public TransportNodeItem(TransportNode node)\n        {\n            NodeName = node.NodeName;\n            Address = node.Addresses.FirstOrDefault(x => x.Scheme == InMemoryChannel.Protocol).ToString();\n        }\n\n        public string NodeName { get; set; }\n        public string Address { get; set; }\n    }\n\n\n    public class CodeTag : HtmlTag\n    {\n        public CodeTag(string name, string code) : base(\"h4\")\n        {\n            Text(name);\n            Next = new HtmlTag(\"pre\", tag =>\n            {\n                tag.Style(\"border\", \"thin solid black\");\n                tag.Style(\"padding\", \"5px\");\n                tag.Text(code);\n                tag.Next = new HtmlTag(\"hr\");\n            });\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/HarnessSettings.cs",
    "content": "﻿using System;\n\nnamespace ServiceBusSpecifications\n{\n    public class HarnessSettings\n    {\n        public Uri Website1 { get; set; }\n        public Uri Website2 { get; set; }\n        public Uri Website3 { get; set; }\n        public Uri Website4 { get; set; }\n\n\n        public Uri Publisher1 { get; set; }\n        public Uri Subscriber1 { get; set; }\n        public Uri Service3 { get; set; }\n        public Uri Service4 { get; set; }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"ServiceBusSpecifications\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Extend Health Inc\")]\n[assembly: AssemblyProduct(\"ServiceBusSpecifications\")]\n[assembly: AssemblyCopyright(\"Copyright © Extend Health Inc 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"0576656f-e629-4e4c-9c92-9bb434ca26df\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/ServiceBusSpecifications/ServiceBusSpecifications.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{A668016A-282F-4EDF-930B-0CCBFD744EC5}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>ServiceBusSpecifications</RootNamespace>\n    <AssemblyName>ServiceBusSpecifications</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"Spark\">\n      <HintPath>..\\packages\\Spark\\lib\\NET40\\Spark.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Fixtures\\BatchMessageFixture.cs\" />\n    <Compile Include=\"Fixtures\\Monitoring\\FakePersistentTask.cs\" />\n    <Compile Include=\"Fixtures\\Monitoring\\FakePersistentTaskSource.cs\" />\n    <Compile Include=\"Fixtures\\Monitoring\\MonitoredNode.cs\" />\n    <Compile Include=\"Fixtures\\Monitoring\\MonitoredNodeGroup.cs\" />\n    <Compile Include=\"Fixtures\\Monitoring\\MonitoringFixture.cs\" />\n    <Compile Include=\"Fixtures\\Monitoring\\MonitoringSettings.cs\" />\n    <Compile Include=\"Fixtures\\Monitoring\\MonitoringSetupFixture.cs\" />\n    <Compile Include=\"Fixtures\\Monitoring\\PersistentTaskMessageListener.cs\" />\n    <Compile Include=\"Fixtures\\Subscriptions\\HasGlobalSubscriptionsRegistry.cs\" />\n    <Compile Include=\"Fixtures\\Subscriptions\\HasLocalSubscriptionsRegistry.cs\" />\n    <Compile Include=\"Fixtures\\Subscriptions\\PublishingRegistry.cs\" />\n    <Compile Include=\"Fixtures\\Subscriptions\\SubscriptionsFixture.cs\" />\n    <Compile Include=\"Fixtures\\RunningNode.cs\" />\n    <Compile Include=\"Fixtures\\SendAndAwaitFixture.cs\" />\n    <Compile Include=\"ServiceBusStorytellerSystem.cs\" />\n    <Compile Include=\"HarnessSettings.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Support\\FourMessage.cs\" />\n    <Compile Include=\"Support\\Message.cs\" />\n    <Compile Include=\"Support\\OneMessage.cs\" />\n    <Compile Include=\"Support\\ThreeMessage.cs\" />\n    <Compile Include=\"Support\\TwoMessage.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"Tests\\LightningQueues\\SendAndAwait\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\FubuMVC.LightningQueues\\FubuMVC.LightningQueues.csproj\">\n      <Project>{f151167c-4736-4c67-9697-7876574c05d0}</Project>\n      <Name>FubuMVC.LightningQueues</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Serenity\\Serenity.csproj\">\n      <Project>{900a0419-3579-4dae-85be-71a3e4b34239}</Project>\n      <Name>Serenity</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Serenity\\Serenity.csproj\">\n      <Project>{900a0419-3579-4dae-85be-71a3e4b34239}</Project>\n      <Name>Serenity</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\ServiceNode\\ServiceNode.csproj\">\n      <Project>{c71136ae-8197-4a9a-aa5f-9102f657c502}</Project>\n      <Name>ServiceNode</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Dynamic.Runtime;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Runtime.InteropServices.WindowsRuntime;System.Runtime.WindowsRuntime;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.\n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"HtmlTags\">\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"LightningQueues\">\n          <HintPath>..\\..\\packages\\LightningQueues\\lib\\net46\\LightningQueues.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"LightningQueues\">\n          <HintPath>..\\..\\packages\\LightningQueues\\lib\\netstandard1.3\\LightningQueues.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Esent.Interop\">\n          <HintPath>..\\..\\packages\\ManagedEsent\\lib\\net40\\Esent.Interop.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore'\">\n      <ItemGroup>\n        <Reference Include=\"Esent.Interop.Wsa\">\n          <HintPath>..\\..\\packages\\ManagedEsent\\lib\\netcore45\\Esent.Interop.Wsa.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Primitives\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0')\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net20\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net35\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net40\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net45\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v3.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl3\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl4\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v7.1' Or $(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl4-windowsphone71\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl5\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Owin\">\n          <HintPath>..\\..\\packages\\Owin\\lib\\net40\\Owin.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"ThoughtWorks.Selenium.Core\">\n          <HintPath>..\\..\\packages\\Selenium.RC\\lib\\net35\\ThoughtWorks.Selenium.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Drawing\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"ThoughtWorks.Selenium.Core\">\n          <HintPath>..\\..\\packages\\Selenium.RC\\lib\\net40\\ThoughtWorks.Selenium.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Drawing\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"WebDriver.Support\">\n          <HintPath>..\\..\\packages\\Selenium.Support\\lib\\net35\\WebDriver.Support.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Drawing\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"WebDriver.Support\">\n          <HintPath>..\\..\\packages\\Selenium.Support\\lib\\net40\\WebDriver.Support.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Drawing\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"WebDriver\">\n          <HintPath>..\\..\\packages\\Selenium.WebDriver\\lib\\net35\\WebDriver.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Drawing\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"WebDriver\">\n          <HintPath>..\\..\\packages\\Selenium.WebDriver\\lib\\net40\\WebDriver.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Drawing\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Selenium.WebDriverBackedSelenium\">\n          <HintPath>..\\..\\packages\\Selenium.WebDriverBackedSelenium\\lib\\net35\\Selenium.WebDriverBackedSelenium.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Drawing\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Selenium.WebDriverBackedSelenium\">\n          <HintPath>..\\..\\packages\\Selenium.WebDriverBackedSelenium\\lib\\net40\\Selenium.WebDriverBackedSelenium.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"System.Drawing\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StoryTeller\">\n          <HintPath>..\\..\\packages\\Storyteller\\lib\\net45\\StoryTeller.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.AppContext\">\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Buffers\">\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.ComponentModel\">\n          <HintPath>..\\..\\packages\\System.ComponentModel\\ref\\netstandard1.0\\System.ComponentModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Console\">\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tools\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.0\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Dynamic.Runtime\">\n          <HintPath>..\\..\\packages\\System.Dynamic.Runtime\\ref\\netstandard1.3\\System.Dynamic.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Calendars\">\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Extensions\">\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression\">\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression.ZipFile\">\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http\">\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Primitives\">\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\net45\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\net46\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netcore451\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netcoreapp1.0\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netstandard1.0\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netstandard1.1\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\netstandard1.3\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Core\">\n          <HintPath>..\\..\\packages\\System.Reactive.Core\\lib\\wpa81\\System.Reactive.Core.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Interfaces\">\n          <HintPath>..\\..\\packages\\System.Reactive.Interfaces\\lib\\net45\\System.Reactive.Interfaces.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Interfaces\">\n          <HintPath>..\\..\\packages\\System.Reactive.Interfaces\\lib\\netstandard1.0\\System.Reactive.Interfaces.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\net45\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\net46\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\netstandard1.0\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2'))\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\netstandard1.1\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Linq\">\n          <HintPath>..\\..\\packages\\System.Reactive.Linq\\lib\\netstandard1.3\\System.Reactive.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\net45\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\net46\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netcore451\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netcoreapp1.0\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile84')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netstandard1.0\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\netstandard1.3\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.PlatformServices\">\n          <HintPath>..\\..\\packages\\System.Reactive.PlatformServices\\lib\\wpa81\\System.Reactive.PlatformServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Windows.Threading\">\n          <HintPath>..\\..\\packages\\System.Reactive.Windows.Threading\\lib\\net45\\System.Reactive.Windows.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"WindowsBase\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Windows.Threading\">\n          <HintPath>..\\..\\packages\\System.Reactive.Windows.Threading\\lib\\netcore451\\System.Reactive.Windows.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.Windows.Threading\">\n          <HintPath>..\\..\\packages\\System.Reactive.Windows.Threading\\lib\\wpa81\\System.Reactive.Windows.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETCore' And $(TargetFrameworkVersion) == 'v4.5.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.WindowsRuntime\">\n          <HintPath>..\\..\\packages\\System.Reactive.WindowsRuntime\\lib\\netcore451\\System.Reactive.WindowsRuntime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhoneApp'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reactive.WindowsRuntime\">\n          <HintPath>..\\..\\packages\\System.Reactive.WindowsRuntime\\lib\\wpa81\\System.Reactive.WindowsRuntime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Extensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Primitives\">\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Resources.ResourceManager\">\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Handles\">\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.WindowsRuntime\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.WindowsRuntime\\ref\\netstandard1.0\\System.Runtime.InteropServices.WindowsRuntime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Loader\">\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Numerics\">\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.WindowsRuntime\">\n          <HintPath>..\\..\\packages\\System.Runtime.WindowsRuntime\\ref\\netstandard1.2\\System.Runtime.WindowsRuntime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Cng\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Csp\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Thread\">\n          <HintPath>..\\..\\packages\\System.Threading.Thread\\ref\\netstandard1.3\\System.Threading.Thread.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.ThreadPool\">\n          <HintPath>..\\..\\packages\\System.Threading.ThreadPool\\ref\\netstandard1.3\\System.Threading.ThreadPool.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Timer\">\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/ServiceBusSpecifications/ServiceBusStorytellerSystem.cs",
    "content": "﻿using Serenity.ServiceBus;\nusing ServiceNode;\nusing WebsiteNode;\n\nnamespace ServiceBusSpecifications\n{\n    public class ServiceBusStorytellerSystem : FubuTransportSystem<WebsiteApplication>\n    {\n        public ServiceBusStorytellerSystem()\n        {\n            AddRemoteSubSystem(\"ServiceNode\", x => {\n                x.UseParallelServiceDirectory(\"ServiceNode\");\n                x.Setup.ShadowCopyFiles = false.ToString();\n            });\n\n            \n\n            OnContextCreation(TextFileWriter.Clear);\n\n            OnContextCreation<WebsiteNode.MessageRecorder>(x => x.Messages.Clear());\n        }\n\n\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/HealthMonitoring/A_running_task_goes_down_and_gets_reassigned.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"A running task goes down and gets reassigned\" lifecycle=\"Acceptance\" retryAttemptNumber=\"0\">\n  <Monitoring>\n    <Context isStep=\"True\">\n      <MonitoringSetup>\n        <TheNodesAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" id=\"Node1\" incoming=\"memory://1\" />\n            <row isStep=\"True\" id=\"Node2\" incoming=\"memory://2\" />\n            <row isStep=\"True\" id=\"Node3\" incoming=\"memory://3\" />\n            <row isStep=\"True\" id=\"Node4\" incoming=\"memory://4\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled isStep=\"True\" />\n        <TheTasksAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" task=\"foo://1\" node=\"Node4\" nodes=\"Node1, Node2, Node3, Node4\" />\n            <row isStep=\"True\" task=\"foo://2\" node=\"Node4\" nodes=\"Node2, Node1, Node3, Node4\" />\n            <row isStep=\"True\" task=\"foo://3\" node=\"NONE\" nodes=\"Node3, Node1, Node2, Node4\" />\n            <row isStep=\"True\" task=\"foo://4\" node=\"Node4\" nodes=\"Node4, Node1, Node2, Node3\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <Comment><![CDATA[The initial state should look like this]]></Comment>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node4\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node4\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <Comment><![CDATA[Now, Node4 drops offline and its owned tasks should be reassigned]]></Comment>\n    <TaskStateIs isStep=\"True\">\n      <table>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node4\" State=\"Throws exception on startup or health check\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node4\" State=\"Throws exception on startup or health check\" />\n      </table>\n    </TaskStateIs>\n    <AfterTheHealthChecksRunOnNode node=\"Node1\" isStep=\"True\" />\n    <ThePersistedAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node2\" />\n        <row isStep=\"True\" Task=\"foo://3\" Node=\"Node3\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node2\" />\n        <row isStep=\"True\" Task=\"foo://3\" Node=\"Node3\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n  </Monitoring>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/HealthMonitoring/A_running_task_times_out_on_health_checks_and_gets_reassigned.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"A running task times out on health checks and gets reassigned\" lifecycle=\"Acceptance\" retryAttemptNumber=\"0\">\n  <Monitoring>\n    <Context isStep=\"True\">\n      <MonitoringSetup>\n        <TheNodesAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" id=\"Node1\" incoming=\"memory://1\" />\n            <row isStep=\"True\" id=\"Node2\" incoming=\"memory://2\" />\n            <row isStep=\"True\" id=\"Node3\" incoming=\"memory://3\" />\n            <row isStep=\"True\" id=\"Node4\" incoming=\"memory://4\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled isStep=\"True\" />\n        <TheTasksAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" task=\"foo://1\" node=\"Node4\" nodes=\"Node1, Node2, Node3, Node4\" />\n            <row isStep=\"True\" task=\"foo://2\" node=\"Node4\" nodes=\"Node2, Node1, Node3, Node4\" />\n            <row isStep=\"True\" task=\"foo://3\" node=\"NONE\" nodes=\"Node3, Node1, Node2, Node4\" />\n            <row isStep=\"True\" task=\"foo://4\" node=\"Node4\" nodes=\"Node4, Node1, Node2, Node3\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <Comment><![CDATA[The initial state should look like this]]></Comment>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node4\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node4\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <Comment><![CDATA[Now, these two jobs will become unresponsive on Node4]]></Comment>\n    <TaskStateIs isStep=\"True\">\n      <table>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node4\" State=\"Times out on startup or health check\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node4\" State=\"Times out on startup or health check\" />\n      </table>\n    </TaskStateIs>\n    <AfterTheHealthChecksRunOnNode node=\"Node1\" isStep=\"True\" />\n    <ThePersistedAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node2\" />\n        <row isStep=\"True\" Task=\"foo://3\" Node=\"Node3\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node2\" />\n        <row isStep=\"True\" Task=\"foo://3\" Node=\"Node3\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n  </Monitoring>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/HealthMonitoring/An_inactive_task_should_get_reassigned.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"An inactive task should get reassigned\" lifecycle=\"Acceptance\" retryAttemptNumber=\"0\">\n  <Monitoring>\n    <Context isStep=\"True\">\n      <MonitoringSetup>\n        <TheNodesAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" id=\"Node1\" incoming=\"memory://1\" />\n            <row isStep=\"True\" id=\"Node2\" incoming=\"memory://2\" />\n            <row isStep=\"True\" id=\"Node3\" incoming=\"memory://3\" />\n            <row isStep=\"True\" id=\"Node4\" incoming=\"memory://4\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled isStep=\"True\" />\n        <TheTasksAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" task=\"foo://1\" node=\"Node4\" nodes=\"Node1, Node2, Node3, Node4\" />\n            <row isStep=\"True\" task=\"foo://2\" node=\"Node4\" nodes=\"Node2, Node1, Node3, Node4\" />\n            <row isStep=\"True\" task=\"foo://3\" node=\"NONE\" nodes=\"Node3, Node1, Node2, Node4\" />\n            <row isStep=\"True\" task=\"foo://4\" node=\"Node4\" nodes=\"Node4, Node1, Node2, Node3\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <Comment><![CDATA[The initial state should look like this]]></Comment>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node4\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node4\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <Comment><![CDATA[Now, Node4 drops offline and its owned tasks should be reassigned]]></Comment>\n    <TaskStateIs isStep=\"True\">\n      <table>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node4\" State=\"Is inactive\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node4\" State=\"Is inactive\" />\n      </table>\n    </TaskStateIs>\n    <AfterTheHealthChecksRunOnNode node=\"Node1\" isStep=\"True\" />\n    <ThePersistedAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node2\" />\n        <row isStep=\"True\" Task=\"foo://3\" Node=\"Node3\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node2\" />\n        <row isStep=\"True\" Task=\"foo://3\" Node=\"Node3\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n  </Monitoring>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/HealthMonitoring/Assign_on_order_of_preference_when_some_nodes_are_down.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Assign on order of preference when some nodes are down\" lifecycle=\"Acceptance\" retryAttemptNumber=\"0\">\n  <Monitoring>\n    <Context isStep=\"True\">\n      <MonitoringSetup>\n        <TheNodesAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" id=\"Node1\" incoming=\"memory://1\" />\n            <row isStep=\"True\" id=\"Node2\" incoming=\"memory://2\" />\n            <row isStep=\"True\" id=\"Node3\" incoming=\"memory://3\" />\n            <row isStep=\"True\" id=\"Node4\" incoming=\"memory://4\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled isStep=\"True\" />\n        <TheTasksAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" task=\"foo://1\" node=\"NONE\" nodes=\"Node1, Node2, Node3, Node4\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <NodeDropsOffline isStep=\"True\" Node=\"Node1\" />\n    <NodeDropsOffline isStep=\"True\" Node=\"Node2\" />\n    <AfterTheHealthChecksRunOnNode node=\"Node3\" isStep=\"True\" />\n    <ThePersistedNodesShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Id=\"Node1\" ControlChannel=\"memory://1\" />\n        <row isStep=\"True\" Id=\"Node2\" ControlChannel=\"memory://2\" />\n        <row isStep=\"True\" Id=\"Node3\" ControlChannel=\"memory://3\" />\n        <row isStep=\"True\" Id=\"Node4\" ControlChannel=\"memory://4\" />\n      </rows>\n    </ThePersistedNodesShouldBe>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node3\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <ThePersistedAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node3\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n  </Monitoring>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/HealthMonitoring/Assign_on_order_of_preference_when_some_nodes_fail.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Assign on order of preference when some nodes fail\" lifecycle=\"Acceptance\" retryAttemptNumber=\"0\">\n  <Monitoring>\n    <Context isStep=\"True\">\n      <MonitoringSetup>\n        <TheNodesAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" id=\"Node1\" incoming=\"memory://1\" />\n            <row isStep=\"True\" id=\"Node2\" incoming=\"memory://2\" />\n            <row isStep=\"True\" id=\"Node3\" incoming=\"memory://3\" />\n            <row isStep=\"True\" id=\"Node4\" incoming=\"memory://4\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled isStep=\"True\" />\n        <TheTasksAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" task=\"foo://1\" node=\"NONE\" nodes=\"Node1, Node2, Node3, Node4\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <TaskStateIs isStep=\"True\">\n      <table>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" State=\"Throws exception on startup or health check\" />\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node2\" State=\"Throws exception on startup or health check\" />\n      </table>\n    </TaskStateIs>\n    <AfterTheHealthChecksRunOnNode node=\"Node1\" isStep=\"True\" />\n    <ThePersistedNodesShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Id=\"Node1\" ControlChannel=\"memory://1\" />\n        <row isStep=\"True\" Id=\"Node2\" ControlChannel=\"memory://2\" />\n        <row isStep=\"True\" Id=\"Node3\" ControlChannel=\"memory://3\" />\n        <row isStep=\"True\" Id=\"Node4\" ControlChannel=\"memory://4\" />\n      </rows>\n    </ThePersistedNodesShouldBe>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node3\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <ThePersistedAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node3\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n  </Monitoring>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/HealthMonitoring/Assign_on_order_or_preference_when_some_nodes_timeout_on_activation.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Assign on order or preference when some nodes timeout on activation\" lifecycle=\"Acceptance\" retryAttemptNumber=\"0\">\n  <Monitoring>\n    <Context isStep=\"True\">\n      <MonitoringSetup>\n        <TheNodesAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" id=\"Node1\" incoming=\"memory://1\" />\n            <row isStep=\"True\" id=\"Node2\" incoming=\"memory://2\" />\n            <row isStep=\"True\" id=\"Node3\" incoming=\"memory://3\" />\n            <row isStep=\"True\" id=\"Node4\" incoming=\"memory://4\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled isStep=\"True\" />\n        <TheTasksAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" task=\"foo://1\" node=\"NONE\" nodes=\"Node1, Node2, Node3, Node4\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <TaskStateIs isStep=\"True\">\n      <table>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" State=\"Times out on startup or health check\" />\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node2\" State=\"Times out on startup or health check\" />\n      </table>\n    </TaskStateIs>\n    <AfterTheHealthChecksRunOnNode node=\"Node1\" isStep=\"True\" />\n    <ThePersistedNodesShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Id=\"Node1\" ControlChannel=\"memory://1\" />\n        <row isStep=\"True\" Id=\"Node2\" ControlChannel=\"memory://2\" />\n        <row isStep=\"True\" Id=\"Node3\" ControlChannel=\"memory://3\" />\n        <row isStep=\"True\" Id=\"Node4\" ControlChannel=\"memory://4\" />\n      </rows>\n    </ThePersistedNodesShouldBe>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node3\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <ThePersistedAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node3\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n  </Monitoring>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/HealthMonitoring/Do_not_reassign_a_task_that_is_running.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Do not reassign a task that is running\" lifecycle=\"Acceptance\" retryAttemptNumber=\"0\">\n  <Monitoring>\n    <Context isStep=\"True\">\n      <MonitoringSetup>\n        <TheNodesAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" id=\"Node1\" incoming=\"memory://1\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled isStep=\"True\" />\n        <TheTasksAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" task=\"foo://1\" node=\"NONE\" nodes=\"Node1\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <TaskStateIs isStep=\"True\">\n      <table>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" State=\"Healthy and Functional\" />\n      </table>\n    </TaskStateIs>\n    <AfterTheHealthChecksRunOnAllNodes isStep=\"True\" />\n    <TaskWasNotReassigned task=\"foo://1\" />\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <ThePersistedAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n  </Monitoring>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/HealthMonitoring/Mixed_assigned_and_unassigned_tasks.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Mixed assigned and unassigned tasks\" lifecycle=\"Acceptance\" retryAttemptNumber=\"0\">\n  <Monitoring>\n    <Context isStep=\"True\">\n      <MonitoringSetup>\n        <TheNodesAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" id=\"Node1\" incoming=\"memory://1\" />\n            <row isStep=\"True\" id=\"Node2\" incoming=\"memory://2\" />\n            <row isStep=\"True\" id=\"Node3\" incoming=\"memory://3\" />\n            <row isStep=\"True\" id=\"Node4\" incoming=\"memory://4\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled isStep=\"True\" />\n        <TheTasksAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" task=\"foo://1\" node=\"Node4\" nodes=\"Node1, Node2, Node3, Node4\" />\n            <row isStep=\"True\" task=\"foo://2\" node=\"Node4\" nodes=\"Node2, Node1, Node3, Node4\" />\n            <row isStep=\"True\" task=\"foo://3\" node=\"NONE\" nodes=\"Node3, Node1, Node2, Node4\" />\n            <row isStep=\"True\" task=\"foo://4\" node=\"NONE\" nodes=\"Node4, Node1, Node2, Node3\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <AfterTheHealthChecksRunOnNode node=\"Node1\" isStep=\"True\" />\n    <ThePersistedAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node4\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node4\" />\n        <row isStep=\"True\" Task=\"foo://3\" Node=\"Node3\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node4\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node4\" />\n        <row isStep=\"True\" Task=\"foo://3\" Node=\"Node3\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n  </Monitoring>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/HealthMonitoring/Node_goes_down_and_its_jobs_get_reassigned.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Node goes down and its jobs get reassigned\" lifecycle=\"Acceptance\" retryAttemptNumber=\"0\">\n  <Monitoring>\n    <Context isStep=\"True\">\n      <MonitoringSetup>\n        <TheNodesAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" id=\"Node1\" incoming=\"memory://1\" />\n            <row isStep=\"True\" id=\"Node2\" incoming=\"memory://2\" />\n            <row isStep=\"True\" id=\"Node3\" incoming=\"memory://3\" />\n            <row isStep=\"True\" id=\"Node4\" incoming=\"memory://4\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled isStep=\"True\" />\n        <TheTasksAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" task=\"foo://1\" node=\"Node4\" nodes=\"Node1, Node2, Node3, Node4\" />\n            <row isStep=\"True\" task=\"foo://2\" node=\"Node4\" nodes=\"Node2, Node1, Node3, Node4\" />\n            <row isStep=\"True\" task=\"foo://3\" node=\"NONE\" nodes=\"Node3, Node1, Node2, Node4\" />\n            <row isStep=\"True\" task=\"foo://4\" node=\"NONE\" nodes=\"Node4, Node1, Node2, Node3\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <Comment><![CDATA[The initial state should look like this]]></Comment>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node4\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n\t<Comment>Now, Node4 drops offline and its owned tasks should be reassigned</Comment>\n    <NodeDropsOffline isStep=\"True\" Node=\"Node4\" />\n    <AfterTheHealthChecksRunOnNode node=\"Node1\" isStep=\"True\" />\n    <ThePersistedAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node2\" />\n        <row isStep=\"True\" Task=\"foo://3\" Node=\"Node3\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node1\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node2\" />\n        <row isStep=\"True\" Task=\"foo://3\" Node=\"Node3\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node1\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n  </Monitoring>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/HealthMonitoring/Reassign_a_job_running_on_multiple_nodes.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Reassign a job running on multiple nodes\" lifecycle=\"Acceptance\" retryAttemptNumber=\"0\">\n  <Monitoring>\n    <Context isStep=\"True\">\n      <MonitoringSetup>\n        <TheNodesAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" id=\"Node1\" incoming=\"memory://1\" />\n            <row isStep=\"True\" id=\"Node2\" incoming=\"memory://2\" />\n            <row isStep=\"True\" id=\"Node3\" incoming=\"memory://3\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled isStep=\"True\" />\n        <TheTasksAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" task=\"foo://1\" node=\"NONE\" nodes=\"Node1\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <TaskStateIs isStep=\"True\">\n      <table>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node2\" State=\"Healthy and Functional\" />\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node3\" State=\"Healthy and Functional\" />\n      </table>\n    </TaskStateIs>\n    <AfterTheHealthChecksRunOnAllNodes isStep=\"True\" />\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <ThePersistedAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n  </Monitoring>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/HealthMonitoring/Reassign_a_single_dormant_task.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Reassign a single dormant task\" lifecycle=\"Acceptance\" retryAttemptNumber=\"0\">\n  <Monitoring>\n    <Context isStep=\"True\">\n      <MonitoringSetup>\n        <TheNodesAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" id=\"Node1\" incoming=\"memory://1\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled isStep=\"True\" />\n        <TheTasksAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" task=\"foo://1\" node=\"NONE\" nodes=\"Node1\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <AfterTheHealthChecksRunOnAllNodes isStep=\"True\" />\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <ThePersistedAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n  </Monitoring>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/HealthMonitoring/Simple_assignment_of_dormant_tasks.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Simple assignment of dormant tasks\" lifecycle=\"Acceptance\" retryAttemptNumber=\"0\">\n  <Monitoring>\n    <Context isStep=\"True\">\n      <MonitoringSetup>\n        <TheNodesAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" id=\"Node1\" incoming=\"memory://1\" />\n            <row isStep=\"True\" id=\"Node2\" incoming=\"memory://2\" />\n            <row isStep=\"True\" id=\"Node3\" incoming=\"memory://3\" />\n            <row isStep=\"True\" id=\"Node4\" incoming=\"memory://4\" />\n          </table>\n        </TheNodesAre>\n        <HealthMonitoringIsDisabled isStep=\"True\" />\n        <TheTasksAre isStep=\"True\">\n          <table>\n            <row isStep=\"True\" task=\"foo://1\" node=\"NONE\" nodes=\"Node1, Node2, Node3, Node4\" />\n            <row isStep=\"True\" task=\"foo://2\" node=\"NONE\" nodes=\"Node2, Node1, Node3, Node4\" />\n            <row isStep=\"True\" task=\"foo://3\" node=\"NONE\" nodes=\"Node3, Node1, Node2, Node4\" />\n            <row isStep=\"True\" task=\"foo://4\" node=\"NONE\" nodes=\"Node4, Node1, Node2, Node3\" />\n          </table>\n        </TheTasksAre>\n      </MonitoringSetup>\n    </Context>\n    <AfterTheHealthChecksRunOnNode node=\"Node1\" />\n    <ThePersistedNodesShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Id=\"Node1\" ControlChannel=\"memory://1\" />\n        <row isStep=\"True\" Id=\"Node2\" ControlChannel=\"memory://2\"/>\n        <row isStep=\"True\" Id=\"Node3\" ControlChannel=\"memory://3\"/>\n        <row isStep=\"True\" Id=\"Node4\" ControlChannel=\"memory://4\"/>\n      </rows>\n    </ThePersistedNodesShouldBe>\n    <TheTaskAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node2\" />\n        <row isStep=\"True\" Task=\"foo://3\" Node=\"Node3\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </TheTaskAssignmentsShouldBe>\n    <ThePersistedAssignmentsShouldBe isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" Task=\"foo://1\" Node=\"Node1\" />\n        <row isStep=\"True\" Task=\"foo://2\" Node=\"Node2\" />\n        <row isStep=\"True\" Task=\"foo://3\" Node=\"Node3\" />\n        <row isStep=\"True\" Task=\"foo://4\" Node=\"Node4\" />\n      </rows>\n    </ThePersistedAssignmentsShouldBe>\n  </Monitoring>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/LightningQueues/Batch Messages/All_messages_in_a_batch_are_processed.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"All messages in a batch are processed\" lifecycle=\"Regression\" retryAttemptNumber=\"0\">\n  <BatchMessage>\n    <SendBatch isStep=\"True\">\n      <DefineBatchMessage>\n        <DescriptionIs isStep=\"True\" description=\"The batch\" />\n        <SendColor isStep=\"True\" color=\"Red\" />\n        <SendDirection isStep=\"True\" direction=\"North\" />\n        <SendState isStep=\"True\" state=\"Texas\" />\n        <SendTeam isStep=\"True\" team=\"Chiefs\" />\n      </DefineBatchMessage>\n    </SendBatch>\n    <TheRecordedMessagesAre isStep=\"True\">\n      <Rows>\n        <row isStep=\"True\" expected=\"Starting: The batch\" />\n        <row isStep=\"True\" expected=\"Color: Red\" />\n        <row isStep=\"True\" expected=\"Direction: North\" />\n        <row isStep=\"True\" expected=\"State: Texas\" />\n        <row isStep=\"True\" expected=\"Team: Chiefs\" />\n        <row isStep=\"True\" expected=\"Finishing: The batch\" />\n      </Rows>\n    </TheRecordedMessagesAre>\n  </BatchMessage>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/LightningQueues/SendAndAwait/SendAndAwait_Happy_Path.xml",
    "content": "<Spec id=\"58c5db69-890b-4f98-a4f7-ac079c19f001\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"SendAndAwait Happy Path\">\n  <SendAndAwait id=\"a99a506f-2679-4e11-a6cf-9390ba89dcc2\">\n    <SendMessageSuccessfully />\n    <AckIsReceived seconds=\"10\" />\n    <AckWasSuccessful />\n  </SendAndAwait>\n</Spec>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/LightningQueues/SendAndAwait/SendAndAwait_Sad_Path_Exception_reporting.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"SendAndAwait Sad Path Exception reporting\" lifecycle=\"Regression\">\n  <SendAndAwait>\n    <SendMessageUnsuccessfully isStep=\"True\" />\n    <AckIsReceived isStep=\"True\" seconds=\"10\" />\n    <TheAckFailedWithMessage isStep=\"True\" message=\"AmbiguousMatchException\" />\n  </SendAndAwait>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/Subscriptions/2nd_publisher_with_global_subscriptions_is_brought_online.xml",
    "content": "<Spec id=\"2349b85e-1ff3-492a-891f-4ec93a19cc9b\" maxRetries=\"0\" tags=\"\" lifecycle=\"Acceptance\" name=\"2nd publisher with global subscriptions is brought online\">\n  <Subscriptions id=\"47bff81e-ed23-45d8-9581-26f17e27acf5\">\n    <LoadNode Key=\"Publisher\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher1\" />\n    <LoadNode Key=\"Subscriber\" Registry=\"HasGlobalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber1\" />\n    <LoadNode Key=\"PublisherTwo\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher2\" />\n    <ForNode Key=\"PublisherTwo\" />\n    <TheActiveSubscriptionsAre>\n      <rows id=\"c98a2ef9-a908-4e4c-b226-d36ede7ce419\">\n        <TheActiveSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n    <ThePersistedSubscriptionsAre>\n      <rows id=\"51d6d0b6-3651-4b93-96b7-65b21f8f8c0f\">\n        <ThePersistedSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </ThePersistedSubscriptionsAre>\n    <ThePersistedTransportNodesAre>\n      <rows id=\"303a13ea-2fb5-4c81-9d7c-2d48ddbd0292\">\n        <ThePersistedTransportNodesAre-row NodeName=\"Publishing\" Address=\"memory://publisher1/\" />\n        <ThePersistedTransportNodesAre-row NodeName=\"Publishing\" Address=\"memory://publisher2/\" />\n      </rows>\n    </ThePersistedTransportNodesAre>\n  </Subscriptions>\n</Spec>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/Subscriptions/Multiple_nodes_of_global_subscriptions_does_not_duplicate_entries.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Multiple nodes of global subscriptions does not duplicate entries\" lifecycle=\"Regression\">\n  <Subscriptions>\n    <LoadNode isStep=\"True\" Key=\"Publisher\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher1\" />\n    <LoadNode isStep=\"True\" Key=\"Subscriber\" Registry=\"HasGlobalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber1\" />\n    <LoadNode isStep=\"True\" Key=\"Subscriber\" Registry=\"HasGlobalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber2\" />\n    <LoadNode isStep=\"True\" Key=\"Subscriber\" Registry=\"HasGlobalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber3\" />\n    <ForNode isStep=\"True\" Key=\"Publisher\" />\n    <TheActiveSubscriptionsAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n    <ThePersistedSubscriptionsAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </ThePersistedSubscriptionsAre>\n    <ThePersistedTransportNodesAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"Publishing\" Address=\"memory://publisher1/\" />\n      </rows>\n    </ThePersistedTransportNodesAre>\n    <ForNode isStep=\"True\" Key=\"Subscriber\" />\n    <ThePersistedTransportNodesAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"GlobalSubscriber\" Address=\"memory://subscriber1/\" />\n        <row isStep=\"True\" NodeName=\"GlobalSubscriber\" Address=\"memory://subscriber2/\" />\n        <row isStep=\"True\" NodeName=\"GlobalSubscriber\" Address=\"memory://subscriber3/\" />\n      </rows>\n    </ThePersistedTransportNodesAre>\n  </Subscriptions>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/Subscriptions/Multiple_publishers_all_get_new_subscriptions.xml",
    "content": "<Spec id=\"ee67cd60-cdec-4d31-8db1-26938175fe49\" maxRetries=\"0\" tags=\"\" lifecycle=\"Regression\" name=\"Multiple publishers all get new subscriptions\">\n  <Subscriptions id=\"cb0dc688-3408-41d4-ba77-7140e5570061\">\n    <LoadNode Key=\"Publisher\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher1\" />\n    <LoadNode Key=\"PublisherTwo\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher2\" />\n    <LoadNode Key=\"PublisherThree\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher3\" />\n    <LoadNode Key=\"Subscriber\" Registry=\"HasGlobalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber1\" />\n    <ForNode Key=\"Publisher\" />\n    <TheActiveSubscriptionsAre>\n      <rows id=\"a1fc2ea7-38e3-4419-85b8-b99261918745\">\n        <TheActiveSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n    <ForNode Key=\"PublisherTwo\" />\n    <TheActiveSubscriptionsAre>\n      <rows id=\"8780079d-33c4-4c0d-a8b2-704960d46b38\">\n        <TheActiveSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n    <ForNode Key=\"PublisherThree\" />\n    <TheActiveSubscriptionsAre>\n      <rows id=\"777007e5-c9ef-4103-bee4-e3a029eebf9b\">\n        <TheActiveSubscriptionsAre-row NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n  </Subscriptions>\n</Spec>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/Subscriptions/Remove_local_subscriptions.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Remove local subscriptions\" lifecycle=\"Regression\" retryAttemptNumber=\"0\">\n  <Subscriptions>\n    <LoadNode isStep=\"True\" Key=\"Publisher\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher1\" />\n    <LoadNode isStep=\"True\" Key=\"Subscriber\" Registry=\"HasLocalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber1\" />\n    <LoadNode isStep=\"True\" Key=\"SubscriberTwo\" Registry=\"HasLocalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber2\" />\n    <NodeRemovesLocalSubscritpions isStep=\"True\" Key=\"Subscriber\" />\n    <ForNode isStep=\"True\" Key=\"Publisher\" />\n    <TheActiveSubscriptionsAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n    <ThePersistedSubscriptionsAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n      </rows>\n    </ThePersistedSubscriptionsAre>\n    <ForNode isStep=\"True\" Key=\"Subscriber\" />\n    <Comment><![CDATA[The other \"LocalSubscriber\" node will still have its subscriptions.]]></Comment>\n    <TheLocalSubscriptionsAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"LocalSubscriber\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n        <row isStep=\"True\" NodeName=\"LocalSubscriber\" MessageType=\"FubuTransportation.Storyteller.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n      </rows>\n    </TheLocalSubscriptionsAre>\n  </Subscriptions>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/Subscriptions/Simple_global_subscriptions_from_one_node_to_another.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Simple global subscriptions from one node to another\" lifecycle=\"Regression\">\n  <Subscriptions>\n    <LoadNode isStep=\"True\" Key=\"Publisher\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher1\" />\n    <LoadNode isStep=\"True\" Key=\"Subscriber\" Registry=\"HasGlobalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber1\" />\n    <ForNode isStep=\"True\" Key=\"Publisher\" />\n    <TheActiveSubscriptionsAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n    <ThePersistedSubscriptionsAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://harness/subscriber1\" />\n      </rows>\n    </ThePersistedSubscriptionsAre>\n    <ThePersistedTransportNodesAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"Publishing\" Address=\"memory://publisher1/\" />\n      </rows>\n    </ThePersistedTransportNodesAre>\n    <ForNode isStep=\"True\" Key=\"Subscriber\" />\n    <ThePersistedTransportNodesAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"GlobalSubscriber\" Address=\"memory://subscriber1/\" />\n      </rows>\n    </ThePersistedTransportNodesAre>\n  </Subscriptions>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Specs/Subscriptions/Simple_local_subscription.xml",
    "content": "<?xml version=\"1.0\"?>\n<Test name=\"Simple local subscription\" lifecycle=\"Regression\" retryAttemptNumber=\"0\">\n  <Subscriptions>\n    <LoadNode isStep=\"True\" Key=\"Publisher\" Registry=\"PublishingRegistry\" ReplyUri=\"memory://publisher1\" />\n    <LoadNode isStep=\"True\" Key=\"Subscriber\" Registry=\"HasLocalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber1\" />\n    <ForNode isStep=\"True\" Key=\"Publisher\" />\n    <TheActiveSubscriptionsAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber1\" />\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber1\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n    <ThePersistedSubscriptionsAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber1\" />\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber1\" />\n      </rows>\n    </ThePersistedSubscriptionsAre>\n    <LoadNode isStep=\"True\" Key=\"SubscriberTwo\" Registry=\"HasLocalSubscriptionsRegistry\" ReplyUri=\"memory://subscriber2\" />\n    <ForNode isStep=\"True\" Key=\"Publisher\" />\n    <TheActiveSubscriptionsAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber1\" />\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber1\" />\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n      </rows>\n    </TheActiveSubscriptionsAre>\n    <ThePersistedSubscriptionsAre isStep=\"True\">\n      <rows>\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber1\" />\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber1\" />\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.OneMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n        <row isStep=\"True\" NodeName=\"Publishing\" MessageType=\"FubuTransportation.Storyteller.Support.TwoMessage\" Source=\"memory://harness/publisher1\" Receiver=\"memory://subscriber2\" />\n      </rows>\n    </ThePersistedSubscriptionsAre>\n  </Subscriptions>\n</Test>"
  },
  {
    "path": "src/ServiceBusSpecifications/Support/FourMessage.cs",
    "content": "﻿namespace ServiceBusSpecifications.Support\n{\n    public class FourMessage : Message\n    {\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Support/Message.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace ServiceBusSpecifications.Support\n{\n    public class Message\n    {\n        public Message()\n        {\n            Id = Guid.NewGuid();\n        }\n\n        public Guid Id { get; set; }\n        public Uri Source { get; set; }\n        public string Key { get; set; }\n\n        public Envelope Envelope { get; set; }\n\n        protected bool Equals(Message other)\n        {\n            return Id.Equals(other.Id);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != GetType()) return false;\n            return Equals((Message) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return Id.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            if (Source == null || Key == null)\n            {\n                return \"{0} ({1})\".ToFormat(GetType().Name, Id);\n            }\n\n            return string.Format(\"{0} ({1}) from {2}/{3}\", GetType().Name, Id, Source, Key);\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Support/OneMessage.cs",
    "content": "﻿namespace ServiceBusSpecifications.Support\n{\n    public class OneMessage : Message\n    {\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Support/ThreeMessage.cs",
    "content": "﻿namespace ServiceBusSpecifications.Support\n{\n    public class ThreeMessage : Message\n    {\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/Support/TwoMessage.cs",
    "content": "﻿namespace ServiceBusSpecifications.Support\n{\n    public class TwoMessage : Message\n    {\n    }\n}"
  },
  {
    "path": "src/ServiceBusSpecifications/paket.references",
    "content": "FubuCore\nHtmlTags\nLightningQueues\nManagedEsent\nNLog\nOwin\nSelenium.RC\nSelenium.Support\nSelenium.WebDriver\nSelenium.WebDriverBackedSelenium\nStoryteller\nStructureMap"
  },
  {
    "path": "src/ServiceNode/ErrorMessage.cs",
    "content": "﻿namespace ServiceNode\n{\n    public class ErrorMessage\n    {\n        \n    }\n}"
  },
  {
    "path": "src/ServiceNode/ErrorMessageHandler.cs",
    "content": "﻿using System.Reflection;\n\nnamespace ServiceNode\n{\n    public class ErrorMessageHandler\n    {\n        public void Handle(ErrorMessage message)\n        {\n            throw new AmbiguousMatchException();\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceNode/Messages.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime.Invocation;\nusing FubuMVC.Core.ServiceBus.Runtime.Invocation.Batching;\n\nnamespace ServiceNode\n{\n    public class DirectionMessage\n    {\n        public string Direction { get; set; }\n\n        public override string ToString()\n        {\n            return $\"Direction: {Direction}\";\n        }\n    }\n\n    public class ColorMessage\n    {\n        public string Color { get; set; }\n\n        public override string ToString()\n        {\n            return $\"Color: {Color}\";\n        }\n    }\n\n    public class StateMessage\n    {\n        public string State { get; set; }\n\n        public override string ToString()\n        {\n            return $\"State: {State}\";\n        }\n    }\n\n    public class TeamMessage\n    {\n        public string Team { get; set; }\n\n        public override string ToString()\n        {\n            return $\"Team: {Team}\";\n        }\n    }\n\n    public abstract class RecordingHandler<T>\n    {\n        public void Handle(T message)\n        {\n            TextFileWriter.Write(message.ToString());\n        }\n    }\n\n    public class DirectionHandler : RecordingHandler<DirectionMessage>{}\n    public class ColorHandler : RecordingHandler<ColorMessage>{}\n    public class StateHandler : RecordingHandler<StateMessage>{}\n    public class TeamHandler : RecordingHandler<TeamMessage>{}\n\n\n    public class MessageBatch : BatchMessage\n    {\n        public string Description { get; set; }\n    }\n\n    public class MessageBatchConsumer : BatchConsumer<MessageBatch>\n    {\n        public MessageBatchConsumer(IMessageExecutor executor) : base(executor)\n        {\n        }\n\n        public override void BatchStart(MessageBatch batch)\n        {\n            TextFileWriter.Write(\"Starting: \" + batch.Description);\n        }\n\n        public override void BatchFinish(MessageBatch batch)\n        {\n            TextFileWriter.Write(\"Finishing: \" + batch.Description);\n        }\n    }\n\n}"
  },
  {
    "path": "src/ServiceNode/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"ServiceNode\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Extend Health Inc\")]\n[assembly: AssemblyProduct(\"ServiceNode\")]\n[assembly: AssemblyCopyright(\"Copyright © Extend Health Inc 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"42a48bca-1904-475c-b2a7-9e9f1b65ecdf\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/ServiceNode/ServiceApplication.cs",
    "content": "﻿using FubuMVC.Core;\nusing FubuMVC.Core.ServiceBus.Configuration;\nusing FubuMVC.Core.ServiceBus.Polling;\n\nnamespace ServiceNode\n{\n    public class ServiceRegistry : FubuTransportRegistry<TestBusSettings>\n    {\n        public ServiceRegistry()\n        {\n            ServiceBus.Enable(true);\n            Channel(x => x.Service).ReadIncoming();\n            ServiceBus.HealthMonitoring.ScheduledExecution(ScheduledExecution.Disabled);\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceNode/ServiceNode.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{C71136AE-8197-4A9A-AA5F-9102F657C502}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>ServiceNode</RootNamespace>\n    <AssemblyName>ServiceNode</AssemblyName>\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"ErrorMessage.cs\" />\n    <Compile Include=\"ErrorMessageHandler.cs\" />\n    <Compile Include=\"Messages.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"ServiceApplication.cs\" />\n    <Compile Include=\"SimpleHandler.cs\" />\n    <Compile Include=\"SimpleMessage.cs\" />\n    <Compile Include=\"SimpleMessageHandler.cs\" />\n    <Compile Include=\"TestBusSettings.cs\" />\n    <Compile Include=\"TextFileWriter.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\FubuMVC.LightningQueues\\FubuMVC.LightningQueues.csproj\">\n      <Project>{f151167c-4736-4c67-9697-7876574c05d0}</Project>\n      <Name>FubuMVC.LightningQueues</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\n  </Target>\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <Content Include=\"bin\\Debug\\lmdb.dll\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"HtmlTags\">\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"Microsoft.Win32.Primitives\">\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0')\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net20\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net35\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net40\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\net45\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v3.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl3\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v4.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl4\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v7.1' Or $(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl4-windowsphone71\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0'\">\n      <ItemGroup>\n        <Reference Include=\"NLog\">\n          <HintPath>..\\..\\packages\\NLog\\lib\\sl5\\NLog.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Owin\">\n          <HintPath>..\\..\\packages\\Owin\\lib\\net40\\Owin.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"StructureMap\">\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.AppContext\">\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Buffers\">\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections\">\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Collections.Concurrent\">\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Console\">\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Debug\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tools\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Diagnostics.Tracing\">\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization\">\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Calendars\">\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Globalization.Extensions\">\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO\">\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression\">\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.Compression.ZipFile\">\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq\">\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Linq.Expressions\">\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Http\">\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Primitives\">\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n        <Reference Include=\"mscorlib\">\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Net.Sockets\">\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.ObjectModel\">\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection\">\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Extensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.Primitives\">\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Reflection.TypeExtensions\">\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Resources.ResourceManager\">\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime\">\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Extensions\">\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Handles\">\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Loader\">\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Runtime.Numerics\">\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Cng\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Csp\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.Encoding.Extensions\">\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\n      <ItemGroup>\n        <Reference Include=\"System.Text.RegularExpressions\">\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading\">\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\n      <ItemGroup>\n        <Reference Include=\"System.Threading.Timer\">\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.ReaderWriter\">\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\n      <ItemGroup>\n        <Reference Include=\"System.Xml.XDocument\">\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/ServiceNode/SimpleHandler.cs",
    "content": "﻿namespace ServiceNode\n{\n    public abstract class SimpleHandler<T>\n    {\n        public void Handle(T message)\n        {\n            // do nothing for now\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceNode/SimpleMessage.cs",
    "content": "﻿namespace ServiceNode\n{\n    public class SimpleMessage\n    {\n         \n    }\n}"
  },
  {
    "path": "src/ServiceNode/SimpleMessageHandler.cs",
    "content": "﻿namespace ServiceNode\n{\n    public class SimpleMessageHandler : SimpleHandler<SimpleMessage>\n    {\n        \n    }\n}"
  },
  {
    "path": "src/ServiceNode/TestBusSettings.cs",
    "content": "﻿using System;\nusing FubuMVC.Core.ServiceBus;\n\nnamespace ServiceNode\n{\n    public class TestBusSettings\n    {\n        public TestBusSettings()\n        {\n            Service = \"lq.tcp://localhost:2215/service\".ToUri();\n            Website = \"lq.tcp://localhost:2216/website\".ToUri();\n        }\n\n        public Uri Service { get; set; }\n        public Uri Website { get; set; }\n    }\n}"
  },
  {
    "path": "src/ServiceNode/TextFileWriter.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing FubuCore;\n\nnamespace ServiceNode\n{\n    public static class TextFileWriter\n    {\n        private static readonly string _file =\n            AppDomain.CurrentDomain.BaseDirectory.ToFullPath().ParentDirectory().AppendPath(\"test-state.txt\");\n\n        public static void Clear()\n        {\n            new FileSystem().DeleteFile(_file);\n        }\n\n        public static void Write(string text)\n        {\n            new FileSystem().AlterFlatFile(_file, list => list.Add(text));\n        }\n\n        public static IEnumerable<string> Read()\n        {\n            if (!File.Exists(_file)) return new string[0];\n\n            return\n                new FileSystem().ReadStringFromFile(_file)\n                    .Split(Environment.NewLine.ToCharArray())\n                    .Where(x => x.IsNotEmpty());\n        }\n    }\n}"
  },
  {
    "path": "src/ServiceNode/paket.references",
    "content": "FubuCore\nHtmlTags\nNLog\nOwin\nStructureMap"
  },
  {
    "path": "src/TestHarnessApp/.gitignore",
    "content": "# See http://help.github.com/ignore-files/ for more about ignoring\n# files.\n#\n# If you find yourself ignoring temp files generated by your text editor\n# or operating system, you probably want to add a global ignore instead:\n#   git config --global core.excludesfile ~/.gitignore\n\n# Ignore npm packaging\n/.node_modules\n/node_modules\n\n# Ignore all logfiles and tempfiles.\n*.log\n/tmp\n\n## Ignore all generated files\n/.mimosa\n/coverage\n/rdoc\n/wiki\n/packaging\nnpm-debug.log\n*.tmproj\nazure_error\nwhat\n*.sublime-workspace\n\n# Output folder\n/public\n/dist\n/.mimosa/require/tracking.json\n\n# Numerous always-ignore extensions\n*~\n*.diff\n*.patch\n*.err\n*.orig\n*.log\n*.rej\n*.swo\n*.swp\n*.vi\n*~\n*.sass-cache\n\n# OS or Editor folders\n.DS_Store\n.cache\n.project\n.settings\n.tmproj\nnbproject\nThumbs.db\n\nassets/javascripts/vendor/\nassets/stylesheets/vendor/\n.idea"
  },
  {
    "path": "src/TestHarnessApp/AggregationEndpoint.cs",
    "content": "﻿using System.Linq;\nusing System.Threading.Tasks;\nusing FubuMVC.Core;\nusing FubuMVC.Core.Runtime.Aggregation;\n\nnamespace TestHarnessApp\n{\n    public class AggregationEndpoint\n    {\n        private readonly IAggregator _aggregator;\n\n        public AggregationEndpoint(IAggregator aggregator)\n        {\n            _aggregator = aggregator;\n        }\n\n        public Resource1 get_query1_Name(Query1 query)\n        {\n            return new Resource1 { Name = query.Name };\n        }\n\n        public Resource2 get_second_resource()\n        {\n            return new Resource2();\n        }\n\n        public Resource3 get_third_resource(Input2 input)\n        {\n            return new Resource3();\n        }\n\n        public Resource4 get_fourth_resource()\n        {\n            return new Resource4();\n        }\n\n        public Task<AggregationResponse> post_aggregated_query(AggregatedQuery query)\n        {\n            return _aggregator.QueryAggregate(query);\n        }\n\n        public async Task<string[]> get_aggregation()\n        {\n            // The call to IAggregator.Fetch() will return an array\n            // of objects. My assumption now is that you'd do this in\n            // the main endpoint method, tack the data store data on\n            // to the view model sent to the main spark view, and\n            // render it to the view with a page helper there.\n            // This is so common now that I think we put a json variable\n            // helper into FubuMVC.Core. \n            return (await _aggregator.Fetch(_ =>\n            {\n                // By an input query\n                _.Query(new Query1 { Name = \"Jeremy Maclin\" });\n\n                // By the resource type\n                _.Resource<Resource2>();\n\n                // By the input type as a marker\n                _.Input<Input2>();\n\n                // By action method\n                _.Action<AggregationEndpoint>(x => x.get_fourth_resource());\n            }).ConfigureAwait(false))\n            .Select(x => x.ToString())\n            .ToArray();\n        }\n\n        [ClientMessage]\n        public class Input1\n        {\n\n        }\n\n        [ClientMessage]\n        public class Resource2\n        {\n            public override string ToString()\n            {\n                return \"I am Resource2\";\n            }\n        }\n\n        [ClientMessage]\n        public class Input2 { }\n\n        [ClientMessage]\n        public class Resource3\n        {\n            public override string ToString()\n            {\n                return \"Resource3 from input type 2\";\n            }\n        }\n\n        [ClientMessage]\n        public class Resource4\n        {\n            public override string ToString()\n            {\n                return \"Resource4 from an action identified by expression\";\n            }\n        }\n\n        [ClientMessage]\n        public class Query1\n        {\n            public string Name { get; set; }\n        }\n\n        [ClientMessage]\n        public class Resource1\n        {\n            public string Name { get; set; }\n\n            public override string ToString()\n            {\n                return \"Resource1: \" + Name;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/TestHarnessApp/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n    <startup> \r\n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.6\"/>\r\n    </startup>\r\n</configuration>\r\n"
  },
  {
    "path": "src/TestHarnessApp/BlowsUpEndpoint.cs",
    "content": "﻿using System;\r\n\r\nnamespace TestHarnessApp\r\n{\r\n    public class BlowsUpEndpoint\r\n    {\r\n        public string get_ysod()\r\n        {\r\n            throw new NotImplementedException(\"you cannot pass!\");\r\n        } \r\n    }\r\n}"
  },
  {
    "path": "src/TestHarnessApp/Content/scripts/Go.js",
    "content": "﻿$(document).ready(function() {\r\n    $('#script-div').html('I was put here by a Javascript handler, with some new text');\r\n});\r\n"
  },
  {
    "path": "src/TestHarnessApp/Content/styles/myStyles.css",
    "content": "﻿body\r\n{\r\n}\r\n\r\n.green {\r\n    background-color: green;\r\n}"
  },
  {
    "path": "src/TestHarnessApp/Instrumentation/ErrorEndpoint.cs",
    "content": "﻿using System;\r\n\r\nnamespace TestHarnessApp.Instrumentation\r\n{\r\n    public class ErrorEndpoint\r\n    {\r\n        public ErrorViewModel get_exception()\r\n        {\r\n            throw new Exception(\"boom\");\r\n        }\r\n    }\r\n\r\n    public class ErrorViewModel\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/TestHarnessApp/Instrumentation/HelloTextBehavior.cs",
    "content": "﻿using System.Threading.Tasks;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Behaviors;\r\nusing FubuMVC.Core.Runtime;\r\n\r\nnamespace TestHarnessApp.Instrumentation\r\n{\r\n    public class HelloTextBehavior: BasicBehavior\r\n    {\r\n        private readonly IFubuRequest _request;\r\n\r\n        public HelloTextBehavior(IFubuRequest request) : base(PartialBehavior.Executes)\r\n        {\r\n            _request = request;\r\n        }\r\n\r\n        protected override Task<DoNext> performInvoke()\r\n        {\r\n            var model = _request.Get<OtherInputModel>();\r\n\r\n            model.HelloText = $\"You said: {model.HelloText}\";\r\n\r\n            return Task.FromResult(DoNext.Continue);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/TestHarnessApp/Instrumentation/InstrumentationEndpoint.cs",
    "content": "﻿using System;\r\nusing System.Threading;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Continuations;\r\nusing FubuMVC.Core.Urls;\r\nusing FubuMVC.Core.View;\r\nusing HtmlTags;\r\n\r\nnamespace TestHarnessApp.Instrumentation\r\n{\r\n    public class InstrumentationEndpoint\r\n    {\r\n        private readonly FubuHtmlDocument _document;\r\n        private readonly IUrlRegistry _urls;\r\n\r\n        public InstrumentationEndpoint(FubuHtmlDocument document, IUrlRegistry urls)\r\n        {\r\n            _document = document;\r\n            _urls = urls;\r\n        }\r\n\r\n        public HtmlDocument get_instrumentation(HomeInputModel inputModel)\r\n        {\r\n            _document.Title = \"Instrumentation Samples\";\r\n            _document.Add(\"h1\").Text(\"Hello!\");\r\n            _document.Add(\"a\").Attr(\"href\", \"/_fubu#instrumentation\").Text(\"Go to instrumentation\");\r\n\r\n            _document.Push(\"ul\");\r\n\r\n            _document.Add(\"li/a\")\r\n                .Text(\"Make a really long request\")\r\n                .Attr(\"href\", _urls.UrlFor<InstrumentationEndpoint>(x => x.get_really_long_request()));\r\n\r\n            _document.Add(\"li/a\")\r\n                .Text(\"Throw an exception\")\r\n                .Attr(\"href\", _urls.UrlFor<ErrorEndpoint>(x => x.get_exception()));\r\n\r\n            _document.Add(\"li/a\")\r\n                .Text(\"Make a request with a custom behavior\")\r\n                .Attr(\"href\", _urls.UrlFor(new OtherInputModel{HelloText = \"Nothing\"}));\r\n\r\n            _document.Add(\"li/a\")\r\n                .Text(\"Make a request that occasionally throws an error\")\r\n                .Attr(\"href\", _urls.UrlFor(new OccasionalInput{HelloText = \"Hello\"}));\r\n\r\n\r\n            return _document;\r\n\r\n        }\r\n\r\n        [WrapWith(typeof(HelloTextBehavior))]\r\n        public string get_other_HelloText(OtherInputModel inputModel)\r\n        {\r\n            return inputModel.HelloText;\r\n        }\r\n\r\n        public FubuContinuation get_really_long_request()\r\n        {\r\n            Thread.Sleep(10000);\r\n            return FubuContinuation.RedirectTo(\"/instrumentation\");\r\n        }\r\n\r\n        [WrapWith(typeof(HelloTextBehavior))]\r\n        public HtmlDocument get_occasional_error_HelloText(OccasionalInput inputModel)\r\n        {\r\n            var rand = new Random();\r\n            if (rand.Next(0, 100) < 10)\r\n            {\r\n                throw new Exception(\"Boom\");\r\n            }\r\n\r\n            var document = new HtmlDocument();\r\n            document.Add(\"h1\").Text(inputModel.HelloText);\r\n\r\n            return document;\r\n        }\r\n    }\r\n\r\n    public class OccasionalInput\r\n    {\r\n        public string HelloText { get; set; }\r\n    }\r\n\r\n    public class HomeInputModel\r\n    {\r\n    }\r\n\r\n    public class OtherInputModel\r\n    {\r\n        public string HelloText { get; set; }\r\n    }\r\n\r\n    public class HomeViewModel\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/TestHarnessApp/Instrumentation/ReallyLongRequestResourceModel.cs",
    "content": "namespace TestHarnessApp.Instrumentation\r\n{\r\n    public class ReallyLongRequestResourceModel\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/TestHarnessApp/Program.cs",
    "content": "﻿using System;\r\nusing System.Diagnostics;\r\nusing FubuCore;\r\nusing FubuMVC.Core;\r\nusing FubuMVC.Core.Assets;\r\nusing FubuMVC.Core.Http.Hosting;\r\nusing FubuMVC.Core.View;\r\nusing TraceLevel = FubuMVC.Core.TraceLevel;\r\n\r\nnamespace TestHarnessApp\r\n{\r\n    internal class Program\r\n    {\r\n        private static void Main(string[] args)\r\n        {\r\n            using (var server = FubuRuntime.For<TestHarnessRegistry>(_ => _.HostWith<Katana>()))\r\n            {\r\n                Process.Start(server.BaseAddress);\r\n\r\n                Console.WriteLine(\"Press any key to quit\");\r\n                Console.ReadLine();\r\n            }\r\n        }\r\n    }\r\n\r\n    public class TestHarnessRegistry : FubuRegistry\r\n    {\r\n        public TestHarnessRegistry()\r\n        {\r\n            Debug.WriteLine(\"Some really different stuff\");\r\n\r\n            AlterSettings<DiagnosticsSettings>(x => { x.TraceLevel = TraceLevel.Verbose; });\r\n\r\n            AlterSettings<AssetSettings>(x =>\r\n            {\r\n                x.CdnAssets.Add(new CdnAsset\r\n                {\r\n                    Url = \"http://code.jquery.com/all-wrong.js\",\r\n                    Fallback = \"typeof jQuery == 'undefined'\",\r\n                    File = \"jquery-2.1.0.min.js\"\r\n                });\r\n                //x.CdnAssets.Add(new CdnAsset { Url = \"http://code.jquery.com/jquery-2.1.0.min.js\", Fallback = \"typeof jQuery == 'undefined'\" });\r\n            });\r\n        }\r\n    }\r\n\r\n    public class HomeEndpoint\r\n    {\r\n        private readonly FubuHtmlDocument _document;\r\n\r\n        public HomeEndpoint(FubuHtmlDocument document)\r\n        {\r\n            _document = document;\r\n        }\r\n\r\n        public FubuHtmlDocument Index()\r\n        {\r\n            _document.Title = \"FubuMVC Demonstrator\";\r\n            _document.Head.Append(_document.Css(\"myStyles.css\"));\r\n\r\n            _document.Add(\"h1\").Text(\"FubuMVC Demonstrator\");\r\n\r\n            _document.Add(\"p\").Text(\"Generated at \" + DateTime.Now);\r\n\r\n            _document.Add(\"hr\");\r\n            _document.Add(\"h2\").Text(\"Images\");\r\n\r\n            _document.Add(\"p\").Text(\"There should be a picture of the Serenity right below me...\");\r\n            _document.Add(x => x.Image(\"Firefly.jpg\"));\r\n            _document.Add(\"p\").Text(\"The url of the image above is '{0}'\".ToFormat(_document.ImageUrl(\"Firefly.jpg\")));\r\n\r\n            _document.Add(\"hr\");\r\n            _document.Add(\"h1\").Text(\"Stylesheets\");\r\n\r\n            _document.Add(\"div\")\r\n                .Text(\"This text should be green because of the .green class in myStyles.css\")\r\n                .AddClass(\"green\");\r\n\r\n            _document.Add(\"hr\");\r\n            _document.Add(\"p\").Text(\"If the script tags are working, you should see text right below me\");\r\n\r\n            _document.Add(\"div\").Id(\"script-div\");\r\n\r\n            _document.Push(\"footer\");\r\n\r\n            _document.Add(x => x.Script(\"jquery-2.1.0.min.js\", \"Go.js\"));\r\n\r\n            return _document;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/TestHarnessApp/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"TestHarnessApp\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"Extend Health Inc\")]\r\n[assembly: AssemblyProduct(\"TestHarnessApp\")]\r\n[assembly: AssemblyCopyright(\"Copyright © Extend Health Inc 2014\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"d2c6629c-74dc-406c-a1d7-30e8b010c955\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Build and Revision Numbers \r\n// by using the '*' as shown below:\r\n// [assembly: AssemblyVersion(\"1.0.*\")]\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n"
  },
  {
    "path": "src/TestHarnessApp/SayHelloEndpoint.cs",
    "content": "﻿using FubuMVC.Core.Http;\r\n\r\nnamespace TestHarnessApp\r\n{\r\n    public class SayHelloEndpoint\r\n    {\r\n        private readonly IHttpRequest _request;\r\n\r\n        public SayHelloEndpoint(IHttpRequest request)\r\n        {\r\n            _request = request;\r\n        }\r\n\r\n        public string get_hello()\r\n        {\r\n            var name = _request.QueryString[\"name\"];\r\n\r\n            return \"Hello, \" + name;\r\n        } \r\n    }\r\n}"
  },
  {
    "path": "src/TestHarnessApp/Something.spark",
    "content": "﻿more change"
  },
  {
    "path": "src/TestHarnessApp/TestHarnessApp.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProjectGuid>{F6CAF85F-ED02-44F2-AE6B-08170DF1E13E}</ProjectGuid>\r\n    <OutputType>Exe</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>TestHarnessApp</RootNamespace>\r\n    <AssemblyName>TestHarnessApp</AssemblyName>\r\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <TargetFrameworkProfile />\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <PlatformTarget>AnyCPU</PlatformTarget>\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <PlatformTarget>AnyCPU</PlatformTarget>\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"System.Web\" />\r\n    <Reference Include=\"System.Xml\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"AggregationEndpoint.cs\" />\r\n    <Compile Include=\"BlowsUpEndpoint.cs\" />\r\n    <Compile Include=\"Instrumentation\\HelloTextBehavior.cs\" />\r\n    <Compile Include=\"Instrumentation\\ErrorEndpoint.cs\" />\r\n    <Compile Include=\"Instrumentation\\InstrumentationEndpoint.cs\" />\r\n    <Compile Include=\"Instrumentation\\ReallyLongRequestResourceModel.cs\" />\r\n    <Compile Include=\"Program.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"SayHelloEndpoint.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"App.config\" />\r\n    <None Include=\"Something.spark\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\r\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\r\n      <Name>FubuMVC.Core</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\FubuMVC.Spark\\FubuMVC.Spark.csproj\">\r\n      <Project>{9d6bf559-6461-4eac-bb16-f976ff43e8da}</Project>\r\n      <Name>FubuMVC.Spark</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"Content\\images\\Firefly.jpg\" />\r\n    <Content Include=\"Content\\scripts\\Go.js\" />\r\n    <Content Include=\"Content\\scripts\\jquery-2.1.0.min.js\" />\r\n    <Content Include=\"Content\\styles\\myStyles.css\" />\r\n    <Content Include=\"fubu-diagnostics\\jquery.min.js\" />\r\n    <Content Include=\"fubu-diagnostics\\root.js\" />\r\n    <Content Include=\"fubu-diagnostics\\structuremap.js\" />\r\n    <Content Include=\"fubu-diagnostics\\typeahead.bundle.min.js\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\r\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\r\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\r\n  </Target>\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n  <ItemGroup>\r\n    <Reference Include=\"FubuCore\">\r\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\r\n      <Private>True</Private>\r\n      <Paket>True</Paket>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"HtmlTags\">\r\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Owin\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Owin\\lib\\net45\\Microsoft.Owin.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Owin.Host.HttpListener\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Owin.Host.HttpListener\\lib\\net45\\Microsoft.Owin.Host.HttpListener.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Owin.Hosting\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Owin.Hosting\\lib\\net45\\Microsoft.Owin.Hosting.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Win32.Primitives\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Owin\">\r\n          <HintPath>..\\..\\packages\\Owin\\lib\\net40\\Owin.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.AppContext\">\r\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Buffers\">\r\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Console\">\r\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tools\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Calendars\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression.ZipFile\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Http\">\r\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"mscorlib\">\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Resources.ResourceManager\">\r\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Handles\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Loader\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Numerics\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Cng\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Csp\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Timer\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n</Project>"
  },
  {
    "path": "src/TestHarnessApp/assets/javascripts/app/app.js",
    "content": "define(['angular'], function (angular) {\n\n  var app = angular.module('myApp',[])\n\n  app.controller('MainCtrl', ['$scope', function ($scope) {\n    $scope.message = \"message goes here\"\n  }])\n\n  return app;\n})\n"
  },
  {
    "path": "src/TestHarnessApp/assets/javascripts/main.js",
    "content": "(function() {\n  'use strict';\n\n  window.name = 'NG_DEFER_BOOTSTRAP!';\n\n  require({\n    urlArgs: \"b=\" + ((new Date()).getTime()),\n    paths: {\n      jquery: 'vendor/jquery/jquery',\n      angular: 'vendor/angular/angular',\n      bootstrap: 'vendor/bootstrap/bootstrap'\n    },\n    shim: {\n      'angular' : {\n        deps: ['jquery'],\n        exports: 'angular'\n      },\n      'bootstrap': {\n        deps: ['jquery']\n      }\n    },\n    deps: ['angular']\n  }, ['jquery','angular', 'app/app'], function($, angular, app) {\n    $(document).ready(function () {\n      angular.resumeBootstrap();\n    });\n  });\n\n}).call(this);\n"
  },
  {
    "path": "src/TestHarnessApp/assets/stylesheets/style.less",
    "content": "@blue: #5B83AD;\n@yellow: #FFFFE0;\n\nbody {\n  padding: 50px;\n  font: 14px \"Lucida Grande\", Helvetica, Arial, sans-serif;\n\n  .template {\n    background-color: @yellow;\n  }\n\n  .helper {\n    border:1px solid @blue;\n  }\n\n  .styled {\n    -webkit-transform: rotate(-30deg);\n    -moz-transform: rotate(-30deg);\n    -ms-transform: rotate(-30deg);\n    -o-transform: rotate(-30deg);\n    transform: rotate(-30deg);\n\n    margin-top: 100px;\n    position: absolute;\n  }\n}\n"
  },
  {
    "path": "src/TestHarnessApp/bower.json",
    "content": "{\n  \"name\": \"personal\",\n  \"version\": \"0.1.0\",\n  \"dependencies\": {\n    \"jquery\": \"2.0.3\",\n    \"requirejs\": \"2.1.8\",\n    \"bootstrap\": \"~3.1.1\",\n    \"angular\": \"~1.2.14\",\n    \"angular-mocks\": \"~1.2.14\",\n    \"almond\": \"~0.2.9\"\n  }\n}\n"
  },
  {
    "path": "src/TestHarnessApp/fubu-diagnostics/root.js",
    "content": "/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/client/public/javascript/\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!*****************************!*\\\n  !*** ./javascript/root.jsx ***!\n  \\*****************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = __webpack_require__(/*! react */ 1);\\r\\nvar _ = __webpack_require__(/*! lodash */ 148);\\r\\nvar $ = __webpack_require__(/*! jquery */ 150);\\r\\n\\r\\nvar Router = __webpack_require__(/*! react-router */ 151); // or var Router = ReactRouter; in browsers\\r\\nvar Route = Router.Route, DefaultRoute = Router.DefaultRoute,\\r\\n  Link=Router.Link, RouteHandler = Router.RouteHandler;\\r\\n\\r\\n\\r\\n\\r\\nvar FubuDiagnosticsSection = __webpack_require__(/*! ./fubu-diagnostics-section */ 201);\\r\\n\\r\\n\\r\\n_.assign(FubuDiagnostics, {\\r\\n    cache: {},\\r\\n\\r\\n    // TODO -- cache if there are no params?\\r\\n    get: function (key, params, callback) {\\r\\n        var url = this.toUrl(key, params);\\r\\n        $.get(url, function(data){\\r\\n            var parsed = JSON.parse(JSON.stringify(data));\\r\\n            callback(parsed);\\r\\n        });\\r\\n    },\\r\\n\\r\\n    toUrl: function (key, params) {\\r\\n        var route = this.routes[key];\\r\\n        var url = route.url;\\r\\n        _.each(route.params, function (param) {\\r\\n            url = url.replace('{' + param.Name + '}', params[param.Name]);\\r\\n        });\\r\\n\\r\\n        return url;\\r\\n    },\\r\\n\\r\\n    sections: [],\\r\\n\\r\\n    addSection: function(data){\\r\\n\\t\\tvar section = new FubuDiagnosticsSection(data);\\r\\n\\t\\tthis.sections.push(section);\\r\\n\\r\\n\\t\\treturn section;\\r\\n\\t},\\r\\n\\r\\n\\tsection: function(key){\\r\\n\\t\\treturn _.find(this.sections, function(s)  {return s.key == key;});\\r\\n\\t},\\r\\n\\r\\n\\tTextScreen: __webpack_require__(/*! ./text-screen */ 205),\\r\\n\\tHtmlScreen: __webpack_require__(/*! ./html-screen */ 206),\\r\\n\\tReact: React\\r\\n});\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n__webpack_require__(/*! ./appdomain */ 207);\\r\\n__webpack_require__(/*! ./assets */ 208);\\r\\n\\r\\n\\r\\nFubuDiagnostics.addSection({    \\r\\n    title: 'FubuMVC',\\r\\n    description: 'Core Diagnostics for FubuMVC Applications',\\r\\n    key: 'fubumvc'\\r\\n}).add({\\r\\n\\ttitle: 'Model Binding',\\r\\n\\tdescription: 'All the configured model binding converters, property binders, and custom model binders',\\r\\n\\tkey: 'model-binding',\\r\\n\\tcomponent: __webpack_require__(/*! ./model-binding */ 209)\\r\\n});\\r\\n\\r\\n__webpack_require__(/*! ./endpoint-explorer */ 270);\\r\\n__webpack_require__(/*! ./chain-details */ 271);\\r\\n__webpack_require__(/*! ./request-table.jsx */ 272);\\r\\n__webpack_require__(/*! ./request-details.jsx */ 273);\\r\\n__webpack_require__(/*! ./packaging */ 274);\\r\\n__webpack_require__(/*! ./client-messages */ 275);\\r\\n\\r\\n\\r\\n\\r\\nvar Shell = __webpack_require__(/*! ./shell */ 276);\\r\\n\\r\\n$(document).ready(function()  {return Shell.start();});\\r\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/root.jsx\\n ** module id = 0\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/root.jsx?\");\n\n/***/ },\n/* 1 */\n/*!**************************!*\\\n  !*** ./~/react/react.js ***!\n  \\**************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"module.exports = __webpack_require__(/*! ./lib/React */ 2);\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/react.js\\n ** module id = 1\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/react.js?\");\n\n/***/ },\n/* 2 */\n/*!******************************!*\\\n  !*** ./~/react/lib/React.js ***!\n  \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule React\\n */\\n\\n\\\"use strict\\\";\\n\\nvar DOMPropertyOperations = __webpack_require__(/*! ./DOMPropertyOperations */ 7);\\nvar EventPluginUtils = __webpack_require__(/*! ./EventPluginUtils */ 13);\\nvar ReactChildren = __webpack_require__(/*! ./ReactChildren */ 16);\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 23);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactContext = __webpack_require__(/*! ./ReactContext */ 20);\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 22);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactElementValidator = __webpack_require__(/*! ./ReactElementValidator */ 31);\\nvar ReactDOM = __webpack_require__(/*! ./ReactDOM */ 45);\\nvar ReactDOMComponent = __webpack_require__(/*! ./ReactDOMComponent */ 46);\\nvar ReactDefaultInjection = __webpack_require__(/*! ./ReactDefaultInjection */ 75);\\nvar ReactInstanceHandles = __webpack_require__(/*! ./ReactInstanceHandles */ 4);\\nvar ReactLegacyElement = __webpack_require__(/*! ./ReactLegacyElement */ 36);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar ReactMultiChild = __webpack_require__(/*! ./ReactMultiChild */ 71);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\nvar ReactPropTypes = __webpack_require__(/*! ./ReactPropTypes */ 120);\\nvar ReactServerRendering = __webpack_require__(/*! ./ReactServerRendering */ 145);\\nvar ReactTextComponent = __webpack_require__(/*! ./ReactTextComponent */ 74);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar deprecated = __webpack_require__(/*! ./deprecated */ 69);\\nvar onlyChild = __webpack_require__(/*! ./onlyChild */ 147);\\n\\nReactDefaultInjection.inject();\\n\\nvar createElement = ReactElement.createElement;\\nvar createFactory = ReactElement.createFactory;\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  createElement = ReactElementValidator.createElement;\\n  createFactory = ReactElementValidator.createFactory;\\n}\\n\\n// TODO: Drop legacy elements once classes no longer export these factories\\ncreateElement = ReactLegacyElement.wrapCreateElement(\\n  createElement\\n);\\ncreateFactory = ReactLegacyElement.wrapCreateFactory(\\n  createFactory\\n);\\n\\nvar render = ReactPerf.measure('React', 'render', ReactMount.render);\\n\\nvar React = {\\n  Children: {\\n    map: ReactChildren.map,\\n    forEach: ReactChildren.forEach,\\n    count: ReactChildren.count,\\n    only: onlyChild\\n  },\\n  DOM: ReactDOM,\\n  PropTypes: ReactPropTypes,\\n  initializeTouchEvents: function(shouldUseTouch) {\\n    EventPluginUtils.useTouchEvents = shouldUseTouch;\\n  },\\n  createClass: ReactCompositeComponent.createClass,\\n  createElement: createElement,\\n  createFactory: createFactory,\\n  constructAndRenderComponent: ReactMount.constructAndRenderComponent,\\n  constructAndRenderComponentByID: ReactMount.constructAndRenderComponentByID,\\n  render: render,\\n  renderToString: ReactServerRendering.renderToString,\\n  renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup,\\n  unmountComponentAtNode: ReactMount.unmountComponentAtNode,\\n  isValidClass: ReactLegacyElement.isValidClass,\\n  isValidElement: ReactElement.isValidElement,\\n  withContext: ReactContext.withContext,\\n\\n  // Hook for JSX spread, don't use this for anything else.\\n  __spread: assign,\\n\\n  // Deprecations (remove for 0.13)\\n  renderComponent: deprecated(\\n    'React',\\n    'renderComponent',\\n    'render',\\n    this,\\n    render\\n  ),\\n  renderComponentToString: deprecated(\\n    'React',\\n    'renderComponentToString',\\n    'renderToString',\\n    this,\\n    ReactServerRendering.renderToString\\n  ),\\n  renderComponentToStaticMarkup: deprecated(\\n    'React',\\n    'renderComponentToStaticMarkup',\\n    'renderToStaticMarkup',\\n    this,\\n    ReactServerRendering.renderToStaticMarkup\\n  ),\\n  isValidComponent: deprecated(\\n    'React',\\n    'isValidComponent',\\n    'isValidElement',\\n    this,\\n    ReactElement.isValidElement\\n  )\\n};\\n\\n// Inject the runtime into a devtools global hook regardless of browser.\\n// Allows for debugging when the hook is injected on the page.\\nif (\\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {\\n  __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({\\n    Component: ReactComponent,\\n    CurrentOwner: ReactCurrentOwner,\\n    DOMComponent: ReactDOMComponent,\\n    DOMPropertyOperations: DOMPropertyOperations,\\n    InstanceHandles: ReactInstanceHandles,\\n    Mount: ReactMount,\\n    MultiChild: ReactMultiChild,\\n    TextComponent: ReactTextComponent\\n  });\\n}\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  var ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n  if (ExecutionEnvironment.canUseDOM && window.top === window.self) {\\n\\n    // If we're in Chrome, look for the devtools marker and provide a download\\n    // link if not installed.\\n    if (navigator.userAgent.indexOf('Chrome') > -1) {\\n      if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\\n        console.debug(\\n          'Download the React DevTools for a better development experience: ' +\\n          'http://fb.me/react-devtools'\\n        );\\n      }\\n    }\\n\\n    var expectedFeatures = [\\n      // shims\\n      Array.isArray,\\n      Array.prototype.every,\\n      Array.prototype.forEach,\\n      Array.prototype.indexOf,\\n      Array.prototype.map,\\n      Date.now,\\n      Function.prototype.bind,\\n      Object.keys,\\n      String.prototype.split,\\n      String.prototype.trim,\\n\\n      // shams\\n      Object.create,\\n      Object.freeze\\n    ];\\n\\n    for (var i = 0; i < expectedFeatures.length; i++) {\\n      if (!expectedFeatures[i]) {\\n        console.error(\\n          'One or more ES5 shim/shams expected by React are not available: ' +\\n          'http://fb.me/react-warning-polyfills'\\n        );\\n        break;\\n      }\\n    }\\n  }\\n}\\n\\n// Version exists only in the open-source version of React, not in Facebook's\\n// internal version.\\nReact.version = '0.12.2';\\n\\nmodule.exports = React;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/React.js\\n ** module id = 2\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/React.js?\");\n\n/***/ },\n/* 3 */\n/*!**********************************************************!*\\\n  !*** (webpack)/~/node-libs-browser/~/process/browser.js ***!\n  \\**********************************************************/\n/***/ function(module, exports) {\n\n\teval(\"// shim for using process in browser\\n\\nvar process = module.exports = {};\\nvar queue = [];\\nvar draining = false;\\nvar currentQueue;\\nvar queueIndex = -1;\\n\\nfunction cleanUpNextTick() {\\n    draining = false;\\n    if (currentQueue.length) {\\n        queue = currentQueue.concat(queue);\\n    } else {\\n        queueIndex = -1;\\n    }\\n    if (queue.length) {\\n        drainQueue();\\n    }\\n}\\n\\nfunction drainQueue() {\\n    if (draining) {\\n        return;\\n    }\\n    var timeout = setTimeout(cleanUpNextTick);\\n    draining = true;\\n\\n    var len = queue.length;\\n    while(len) {\\n        currentQueue = queue;\\n        queue = [];\\n        while (++queueIndex < len) {\\n            currentQueue[queueIndex].run();\\n        }\\n        queueIndex = -1;\\n        len = queue.length;\\n    }\\n    currentQueue = null;\\n    draining = false;\\n    clearTimeout(timeout);\\n}\\n\\nprocess.nextTick = function (fun) {\\n    var args = new Array(arguments.length - 1);\\n    if (arguments.length > 1) {\\n        for (var i = 1; i < arguments.length; i++) {\\n            args[i - 1] = arguments[i];\\n        }\\n    }\\n    queue.push(new Item(fun, args));\\n    if (queue.length === 1 && !draining) {\\n        setTimeout(drainQueue, 0);\\n    }\\n};\\n\\n// v8 likes predictible objects\\nfunction Item(fun, array) {\\n    this.fun = fun;\\n    this.array = array;\\n}\\nItem.prototype.run = function () {\\n    this.fun.apply(null, this.array);\\n};\\nprocess.title = 'browser';\\nprocess.browser = true;\\nprocess.env = {};\\nprocess.argv = [];\\nprocess.version = ''; // empty string to avoid regexp issues\\nprocess.versions = {};\\n\\nfunction noop() {}\\n\\nprocess.on = noop;\\nprocess.addListener = noop;\\nprocess.once = noop;\\nprocess.off = noop;\\nprocess.removeListener = noop;\\nprocess.removeAllListeners = noop;\\nprocess.emit = noop;\\n\\nprocess.binding = function (name) {\\n    throw new Error('process.binding is not supported');\\n};\\n\\n// TODO(shtylman)\\nprocess.cwd = function () { return '/' };\\nprocess.chdir = function (dir) {\\n    throw new Error('process.chdir is not supported');\\n};\\nprocess.umask = function() { return 0; };\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** (webpack)/~/node-libs-browser/~/process/browser.js\\n ** module id = 3\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///(webpack)/~/node-libs-browser/~/process/browser.js?\");\n\n/***/ },\n/* 4 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ReactInstanceHandles.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactInstanceHandles\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactRootIndex = __webpack_require__(/*! ./ReactRootIndex */ 5);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nvar SEPARATOR = '.';\\nvar SEPARATOR_LENGTH = SEPARATOR.length;\\n\\n/**\\n * Maximum depth of traversals before we consider the possibility of a bad ID.\\n */\\nvar MAX_TREE_DEPTH = 100;\\n\\n/**\\n * Creates a DOM ID prefix to use when mounting React components.\\n *\\n * @param {number} index A unique integer\\n * @return {string} React root ID.\\n * @internal\\n */\\nfunction getReactRootIDString(index) {\\n  return SEPARATOR + index.toString(36);\\n}\\n\\n/**\\n * Checks if a character in the supplied ID is a separator or the end.\\n *\\n * @param {string} id A React DOM ID.\\n * @param {number} index Index of the character to check.\\n * @return {boolean} True if the character is a separator or end of the ID.\\n * @private\\n */\\nfunction isBoundary(id, index) {\\n  return id.charAt(index) === SEPARATOR || index === id.length;\\n}\\n\\n/**\\n * Checks if the supplied string is a valid React DOM ID.\\n *\\n * @param {string} id A React DOM ID, maybe.\\n * @return {boolean} True if the string is a valid React DOM ID.\\n * @private\\n */\\nfunction isValidID(id) {\\n  return id === '' || (\\n    id.charAt(0) === SEPARATOR && id.charAt(id.length - 1) !== SEPARATOR\\n  );\\n}\\n\\n/**\\n * Checks if the first ID is an ancestor of or equal to the second ID.\\n *\\n * @param {string} ancestorID\\n * @param {string} descendantID\\n * @return {boolean} True if `ancestorID` is an ancestor of `descendantID`.\\n * @internal\\n */\\nfunction isAncestorIDOf(ancestorID, descendantID) {\\n  return (\\n    descendantID.indexOf(ancestorID) === 0 &&\\n    isBoundary(descendantID, ancestorID.length)\\n  );\\n}\\n\\n/**\\n * Gets the parent ID of the supplied React DOM ID, `id`.\\n *\\n * @param {string} id ID of a component.\\n * @return {string} ID of the parent, or an empty string.\\n * @private\\n */\\nfunction getParentID(id) {\\n  return id ? id.substr(0, id.lastIndexOf(SEPARATOR)) : '';\\n}\\n\\n/**\\n * Gets the next DOM ID on the tree path from the supplied `ancestorID` to the\\n * supplied `destinationID`. If they are equal, the ID is returned.\\n *\\n * @param {string} ancestorID ID of an ancestor node of `destinationID`.\\n * @param {string} destinationID ID of the destination node.\\n * @return {string} Next ID on the path from `ancestorID` to `destinationID`.\\n * @private\\n */\\nfunction getNextDescendantID(ancestorID, destinationID) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    isValidID(ancestorID) && isValidID(destinationID),\\n    'getNextDescendantID(%s, %s): Received an invalid React DOM ID.',\\n    ancestorID,\\n    destinationID\\n  ) : invariant(isValidID(ancestorID) && isValidID(destinationID)));\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    isAncestorIDOf(ancestorID, destinationID),\\n    'getNextDescendantID(...): React has made an invalid assumption about ' +\\n    'the DOM hierarchy. Expected `%s` to be an ancestor of `%s`.',\\n    ancestorID,\\n    destinationID\\n  ) : invariant(isAncestorIDOf(ancestorID, destinationID)));\\n  if (ancestorID === destinationID) {\\n    return ancestorID;\\n  }\\n  // Skip over the ancestor and the immediate separator. Traverse until we hit\\n  // another separator or we reach the end of `destinationID`.\\n  var start = ancestorID.length + SEPARATOR_LENGTH;\\n  for (var i = start; i < destinationID.length; i++) {\\n    if (isBoundary(destinationID, i)) {\\n      break;\\n    }\\n  }\\n  return destinationID.substr(0, i);\\n}\\n\\n/**\\n * Gets the nearest common ancestor ID of two IDs.\\n *\\n * Using this ID scheme, the nearest common ancestor ID is the longest common\\n * prefix of the two IDs that immediately preceded a \\\"marker\\\" in both strings.\\n *\\n * @param {string} oneID\\n * @param {string} twoID\\n * @return {string} Nearest common ancestor ID, or the empty string if none.\\n * @private\\n */\\nfunction getFirstCommonAncestorID(oneID, twoID) {\\n  var minLength = Math.min(oneID.length, twoID.length);\\n  if (minLength === 0) {\\n    return '';\\n  }\\n  var lastCommonMarkerIndex = 0;\\n  // Use `<=` to traverse until the \\\"EOL\\\" of the shorter string.\\n  for (var i = 0; i <= minLength; i++) {\\n    if (isBoundary(oneID, i) && isBoundary(twoID, i)) {\\n      lastCommonMarkerIndex = i;\\n    } else if (oneID.charAt(i) !== twoID.charAt(i)) {\\n      break;\\n    }\\n  }\\n  var longestCommonID = oneID.substr(0, lastCommonMarkerIndex);\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    isValidID(longestCommonID),\\n    'getFirstCommonAncestorID(%s, %s): Expected a valid React DOM ID: %s',\\n    oneID,\\n    twoID,\\n    longestCommonID\\n  ) : invariant(isValidID(longestCommonID)));\\n  return longestCommonID;\\n}\\n\\n/**\\n * Traverses the parent path between two IDs (either up or down). The IDs must\\n * not be the same, and there must exist a parent path between them. If the\\n * callback returns `false`, traversal is stopped.\\n *\\n * @param {?string} start ID at which to start traversal.\\n * @param {?string} stop ID at which to end traversal.\\n * @param {function} cb Callback to invoke each ID with.\\n * @param {?boolean} skipFirst Whether or not to skip the first node.\\n * @param {?boolean} skipLast Whether or not to skip the last node.\\n * @private\\n */\\nfunction traverseParentPath(start, stop, cb, arg, skipFirst, skipLast) {\\n  start = start || '';\\n  stop = stop || '';\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    start !== stop,\\n    'traverseParentPath(...): Cannot traverse from and to the same ID, `%s`.',\\n    start\\n  ) : invariant(start !== stop));\\n  var traverseUp = isAncestorIDOf(stop, start);\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    traverseUp || isAncestorIDOf(start, stop),\\n    'traverseParentPath(%s, %s, ...): Cannot traverse from two IDs that do ' +\\n    'not have a parent path.',\\n    start,\\n    stop\\n  ) : invariant(traverseUp || isAncestorIDOf(start, stop)));\\n  // Traverse from `start` to `stop` one depth at a time.\\n  var depth = 0;\\n  var traverse = traverseUp ? getParentID : getNextDescendantID;\\n  for (var id = start; /* until break */; id = traverse(id, stop)) {\\n    var ret;\\n    if ((!skipFirst || id !== start) && (!skipLast || id !== stop)) {\\n      ret = cb(id, traverseUp, arg);\\n    }\\n    if (ret === false || id === stop) {\\n      // Only break //after// visiting `stop`.\\n      break;\\n    }\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      depth++ < MAX_TREE_DEPTH,\\n      'traverseParentPath(%s, %s, ...): Detected an infinite loop while ' +\\n      'traversing the React DOM ID tree. This may be due to malformed IDs: %s',\\n      start, stop\\n    ) : invariant(depth++ < MAX_TREE_DEPTH));\\n  }\\n}\\n\\n/**\\n * Manages the IDs assigned to DOM representations of React components. This\\n * uses a specific scheme in order to traverse the DOM efficiently (e.g. in\\n * order to simulate events).\\n *\\n * @internal\\n */\\nvar ReactInstanceHandles = {\\n\\n  /**\\n   * Constructs a React root ID\\n   * @return {string} A React root ID.\\n   */\\n  createReactRootID: function() {\\n    return getReactRootIDString(ReactRootIndex.createReactRootIndex());\\n  },\\n\\n  /**\\n   * Constructs a React ID by joining a root ID with a name.\\n   *\\n   * @param {string} rootID Root ID of a parent component.\\n   * @param {string} name A component's name (as flattened children).\\n   * @return {string} A React ID.\\n   * @internal\\n   */\\n  createReactID: function(rootID, name) {\\n    return rootID + name;\\n  },\\n\\n  /**\\n   * Gets the DOM ID of the React component that is the root of the tree that\\n   * contains the React component with the supplied DOM ID.\\n   *\\n   * @param {string} id DOM ID of a React component.\\n   * @return {?string} DOM ID of the React component that is the root.\\n   * @internal\\n   */\\n  getReactRootIDFromNodeID: function(id) {\\n    if (id && id.charAt(0) === SEPARATOR && id.length > 1) {\\n      var index = id.indexOf(SEPARATOR, 1);\\n      return index > -1 ? id.substr(0, index) : id;\\n    }\\n    return null;\\n  },\\n\\n  /**\\n   * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that\\n   * should would receive a `mouseEnter` or `mouseLeave` event.\\n   *\\n   * NOTE: Does not invoke the callback on the nearest common ancestor because\\n   * nothing \\\"entered\\\" or \\\"left\\\" that element.\\n   *\\n   * @param {string} leaveID ID being left.\\n   * @param {string} enterID ID being entered.\\n   * @param {function} cb Callback to invoke on each entered/left ID.\\n   * @param {*} upArg Argument to invoke the callback with on left IDs.\\n   * @param {*} downArg Argument to invoke the callback with on entered IDs.\\n   * @internal\\n   */\\n  traverseEnterLeave: function(leaveID, enterID, cb, upArg, downArg) {\\n    var ancestorID = getFirstCommonAncestorID(leaveID, enterID);\\n    if (ancestorID !== leaveID) {\\n      traverseParentPath(leaveID, ancestorID, cb, upArg, false, true);\\n    }\\n    if (ancestorID !== enterID) {\\n      traverseParentPath(ancestorID, enterID, cb, downArg, true, false);\\n    }\\n  },\\n\\n  /**\\n   * Simulates the traversal of a two-phase, capture/bubble event dispatch.\\n   *\\n   * NOTE: This traversal happens on IDs without touching the DOM.\\n   *\\n   * @param {string} targetID ID of the target node.\\n   * @param {function} cb Callback to invoke.\\n   * @param {*} arg Argument to invoke the callback with.\\n   * @internal\\n   */\\n  traverseTwoPhase: function(targetID, cb, arg) {\\n    if (targetID) {\\n      traverseParentPath('', targetID, cb, arg, true, false);\\n      traverseParentPath(targetID, '', cb, arg, false, true);\\n    }\\n  },\\n\\n  /**\\n   * Traverse a node ID, calling the supplied `cb` for each ancestor ID. For\\n   * example, passing `.0.$row-0.1` would result in `cb` getting called\\n   * with `.0`, `.0.$row-0`, and `.0.$row-0.1`.\\n   *\\n   * NOTE: This traversal happens on IDs without touching the DOM.\\n   *\\n   * @param {string} targetID ID of the target node.\\n   * @param {function} cb Callback to invoke.\\n   * @param {*} arg Argument to invoke the callback with.\\n   * @internal\\n   */\\n  traverseAncestors: function(targetID, cb, arg) {\\n    traverseParentPath('', targetID, cb, arg, true, false);\\n  },\\n\\n  /**\\n   * Exposed for unit testing.\\n   * @private\\n   */\\n  _getFirstCommonAncestorID: getFirstCommonAncestorID,\\n\\n  /**\\n   * Exposed for unit testing.\\n   * @private\\n   */\\n  _getNextDescendantID: getNextDescendantID,\\n\\n  isAncestorIDOf: isAncestorIDOf,\\n\\n  SEPARATOR: SEPARATOR\\n\\n};\\n\\nmodule.exports = ReactInstanceHandles;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactInstanceHandles.js\\n ** module id = 4\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactInstanceHandles.js?\");\n\n/***/ },\n/* 5 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactRootIndex.js ***!\n  \\***************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactRootIndex\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactRootIndexInjection = {\\n  /**\\n   * @param {function} _createReactRootIndex\\n   */\\n  injectCreateReactRootIndex: function(_createReactRootIndex) {\\n    ReactRootIndex.createReactRootIndex = _createReactRootIndex;\\n  }\\n};\\n\\nvar ReactRootIndex = {\\n  createReactRootIndex: null,\\n  injection: ReactRootIndexInjection\\n};\\n\\nmodule.exports = ReactRootIndex;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactRootIndex.js\\n ** module id = 5\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactRootIndex.js?\");\n\n/***/ },\n/* 6 */\n/*!**********************************!*\\\n  !*** ./~/react/lib/invariant.js ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule invariant\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Use invariant() to assert state which your program assumes to be true.\\n *\\n * Provide sprintf-style format (only %s is supported) and arguments\\n * to provide information about what broke and what you were\\n * expecting.\\n *\\n * The invariant message will be stripped in production, but the invariant\\n * will remain to ensure logic does not differ in production.\\n */\\n\\nvar invariant = function(condition, format, a, b, c, d, e, f) {\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    if (format === undefined) {\\n      throw new Error('invariant requires an error message argument');\\n    }\\n  }\\n\\n  if (!condition) {\\n    var error;\\n    if (format === undefined) {\\n      error = new Error(\\n        'Minified exception occurred; use the non-minified dev environment ' +\\n        'for the full error message and additional helpful warnings.'\\n      );\\n    } else {\\n      var args = [a, b, c, d, e, f];\\n      var argIndex = 0;\\n      error = new Error(\\n        'Invariant Violation: ' +\\n        format.replace(/%s/g, function() { return args[argIndex++]; })\\n      );\\n    }\\n\\n    error.framesToPop = 1; // we don't care about invariant's own frame\\n    throw error;\\n  }\\n};\\n\\nmodule.exports = invariant;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/invariant.js\\n ** module id = 6\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/invariant.js?\");\n\n/***/ },\n/* 7 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/DOMPropertyOperations.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule DOMPropertyOperations\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 8);\\n\\nvar escapeTextForBrowser = __webpack_require__(/*! ./escapeTextForBrowser */ 9);\\nvar memoizeStringOnly = __webpack_require__(/*! ./memoizeStringOnly */ 10);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nfunction shouldIgnoreValue(name, value) {\\n  return value == null ||\\n    (DOMProperty.hasBooleanValue[name] && !value) ||\\n    (DOMProperty.hasNumericValue[name] && isNaN(value)) ||\\n    (DOMProperty.hasPositiveNumericValue[name] && (value < 1)) ||\\n    (DOMProperty.hasOverloadedBooleanValue[name] && value === false);\\n}\\n\\nvar processAttributeNameAndPrefix = memoizeStringOnly(function(name) {\\n  return escapeTextForBrowser(name) + '=\\\"';\\n});\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  var reactProps = {\\n    children: true,\\n    dangerouslySetInnerHTML: true,\\n    key: true,\\n    ref: true\\n  };\\n  var warnedProperties = {};\\n\\n  var warnUnknownProperty = function(name) {\\n    if (reactProps.hasOwnProperty(name) && reactProps[name] ||\\n        warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {\\n      return;\\n    }\\n\\n    warnedProperties[name] = true;\\n    var lowerCasedName = name.toLowerCase();\\n\\n    // data-* attributes should be lowercase; suggest the lowercase version\\n    var standardName = (\\n      DOMProperty.isCustomAttribute(lowerCasedName) ?\\n        lowerCasedName :\\n      DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ?\\n        DOMProperty.getPossibleStandardName[lowerCasedName] :\\n        null\\n    );\\n\\n    // For now, only warn when we have a suggested correction. This prevents\\n    // logging too much when using transferPropsTo.\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      standardName == null,\\n      'Unknown DOM property ' + name + '. Did you mean ' + standardName + '?'\\n    ) : null);\\n\\n  };\\n}\\n\\n/**\\n * Operations for dealing with DOM properties.\\n */\\nvar DOMPropertyOperations = {\\n\\n  /**\\n   * Creates markup for the ID property.\\n   *\\n   * @param {string} id Unescaped ID.\\n   * @return {string} Markup string.\\n   */\\n  createMarkupForID: function(id) {\\n    return processAttributeNameAndPrefix(DOMProperty.ID_ATTRIBUTE_NAME) +\\n      escapeTextForBrowser(id) + '\\\"';\\n  },\\n\\n  /**\\n   * Creates markup for a property.\\n   *\\n   * @param {string} name\\n   * @param {*} value\\n   * @return {?string} Markup string, or null if the property was invalid.\\n   */\\n  createMarkupForProperty: function(name, value) {\\n    if (DOMProperty.isStandardName.hasOwnProperty(name) &&\\n        DOMProperty.isStandardName[name]) {\\n      if (shouldIgnoreValue(name, value)) {\\n        return '';\\n      }\\n      var attributeName = DOMProperty.getAttributeName[name];\\n      if (DOMProperty.hasBooleanValue[name] ||\\n          (DOMProperty.hasOverloadedBooleanValue[name] && value === true)) {\\n        return escapeTextForBrowser(attributeName);\\n      }\\n      return processAttributeNameAndPrefix(attributeName) +\\n        escapeTextForBrowser(value) + '\\\"';\\n    } else if (DOMProperty.isCustomAttribute(name)) {\\n      if (value == null) {\\n        return '';\\n      }\\n      return processAttributeNameAndPrefix(name) +\\n        escapeTextForBrowser(value) + '\\\"';\\n    } else if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      warnUnknownProperty(name);\\n    }\\n    return null;\\n  },\\n\\n  /**\\n   * Sets the value for a property on a node.\\n   *\\n   * @param {DOMElement} node\\n   * @param {string} name\\n   * @param {*} value\\n   */\\n  setValueForProperty: function(node, name, value) {\\n    if (DOMProperty.isStandardName.hasOwnProperty(name) &&\\n        DOMProperty.isStandardName[name]) {\\n      var mutationMethod = DOMProperty.getMutationMethod[name];\\n      if (mutationMethod) {\\n        mutationMethod(node, value);\\n      } else if (shouldIgnoreValue(name, value)) {\\n        this.deleteValueForProperty(node, name);\\n      } else if (DOMProperty.mustUseAttribute[name]) {\\n        // `setAttribute` with objects becomes only `[object]` in IE8/9,\\n        // ('' + value) makes it output the correct toString()-value.\\n        node.setAttribute(DOMProperty.getAttributeName[name], '' + value);\\n      } else {\\n        var propName = DOMProperty.getPropertyName[name];\\n        // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the\\n        // property type before comparing; only `value` does and is string.\\n        if (!DOMProperty.hasSideEffects[name] ||\\n            ('' + node[propName]) !== ('' + value)) {\\n          // Contrary to `setAttribute`, object properties are properly\\n          // `toString`ed by IE8/9.\\n          node[propName] = value;\\n        }\\n      }\\n    } else if (DOMProperty.isCustomAttribute(name)) {\\n      if (value == null) {\\n        node.removeAttribute(name);\\n      } else {\\n        node.setAttribute(name, '' + value);\\n      }\\n    } else if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      warnUnknownProperty(name);\\n    }\\n  },\\n\\n  /**\\n   * Deletes the value for a property on a node.\\n   *\\n   * @param {DOMElement} node\\n   * @param {string} name\\n   */\\n  deleteValueForProperty: function(node, name) {\\n    if (DOMProperty.isStandardName.hasOwnProperty(name) &&\\n        DOMProperty.isStandardName[name]) {\\n      var mutationMethod = DOMProperty.getMutationMethod[name];\\n      if (mutationMethod) {\\n        mutationMethod(node, undefined);\\n      } else if (DOMProperty.mustUseAttribute[name]) {\\n        node.removeAttribute(DOMProperty.getAttributeName[name]);\\n      } else {\\n        var propName = DOMProperty.getPropertyName[name];\\n        var defaultValue = DOMProperty.getDefaultValueForProperty(\\n          node.nodeName,\\n          propName\\n        );\\n        if (!DOMProperty.hasSideEffects[name] ||\\n            ('' + node[propName]) !== defaultValue) {\\n          node[propName] = defaultValue;\\n        }\\n      }\\n    } else if (DOMProperty.isCustomAttribute(name)) {\\n      node.removeAttribute(name);\\n    } else if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      warnUnknownProperty(name);\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = DOMPropertyOperations;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/DOMPropertyOperations.js\\n ** module id = 7\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/DOMPropertyOperations.js?\");\n\n/***/ },\n/* 8 */\n/*!************************************!*\\\n  !*** ./~/react/lib/DOMProperty.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule DOMProperty\\n * @typechecks static-only\\n */\\n\\n/*jslint bitwise: true */\\n\\n\\\"use strict\\\";\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nfunction checkMask(value, bitmask) {\\n  return (value & bitmask) === bitmask;\\n}\\n\\nvar DOMPropertyInjection = {\\n  /**\\n   * Mapping from normalized, camelcased property names to a configuration that\\n   * specifies how the associated DOM property should be accessed or rendered.\\n   */\\n  MUST_USE_ATTRIBUTE: 0x1,\\n  MUST_USE_PROPERTY: 0x2,\\n  HAS_SIDE_EFFECTS: 0x4,\\n  HAS_BOOLEAN_VALUE: 0x8,\\n  HAS_NUMERIC_VALUE: 0x10,\\n  HAS_POSITIVE_NUMERIC_VALUE: 0x20 | 0x10,\\n  HAS_OVERLOADED_BOOLEAN_VALUE: 0x40,\\n\\n  /**\\n   * Inject some specialized knowledge about the DOM. This takes a config object\\n   * with the following properties:\\n   *\\n   * isCustomAttribute: function that given an attribute name will return true\\n   * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*\\n   * attributes where it's impossible to enumerate all of the possible\\n   * attribute names,\\n   *\\n   * Properties: object mapping DOM property name to one of the\\n   * DOMPropertyInjection constants or null. If your attribute isn't in here,\\n   * it won't get written to the DOM.\\n   *\\n   * DOMAttributeNames: object mapping React attribute name to the DOM\\n   * attribute name. Attribute names not specified use the **lowercase**\\n   * normalized name.\\n   *\\n   * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.\\n   * Property names not specified use the normalized name.\\n   *\\n   * DOMMutationMethods: Properties that require special mutation methods. If\\n   * `value` is undefined, the mutation method should unset the property.\\n   *\\n   * @param {object} domPropertyConfig the config as described above.\\n   */\\n  injectDOMPropertyConfig: function(domPropertyConfig) {\\n    var Properties = domPropertyConfig.Properties || {};\\n    var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};\\n    var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};\\n    var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};\\n\\n    if (domPropertyConfig.isCustomAttribute) {\\n      DOMProperty._isCustomAttributeFunctions.push(\\n        domPropertyConfig.isCustomAttribute\\n      );\\n    }\\n\\n    for (var propName in Properties) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        !DOMProperty.isStandardName.hasOwnProperty(propName),\\n        'injectDOMPropertyConfig(...): You\\\\'re trying to inject DOM property ' +\\n        '\\\\'%s\\\\' which has already been injected. You may be accidentally ' +\\n        'injecting the same DOM property config twice, or you may be ' +\\n        'injecting two configs that have conflicting property names.',\\n        propName\\n      ) : invariant(!DOMProperty.isStandardName.hasOwnProperty(propName)));\\n\\n      DOMProperty.isStandardName[propName] = true;\\n\\n      var lowerCased = propName.toLowerCase();\\n      DOMProperty.getPossibleStandardName[lowerCased] = propName;\\n\\n      if (DOMAttributeNames.hasOwnProperty(propName)) {\\n        var attributeName = DOMAttributeNames[propName];\\n        DOMProperty.getPossibleStandardName[attributeName] = propName;\\n        DOMProperty.getAttributeName[propName] = attributeName;\\n      } else {\\n        DOMProperty.getAttributeName[propName] = lowerCased;\\n      }\\n\\n      DOMProperty.getPropertyName[propName] =\\n        DOMPropertyNames.hasOwnProperty(propName) ?\\n          DOMPropertyNames[propName] :\\n          propName;\\n\\n      if (DOMMutationMethods.hasOwnProperty(propName)) {\\n        DOMProperty.getMutationMethod[propName] = DOMMutationMethods[propName];\\n      } else {\\n        DOMProperty.getMutationMethod[propName] = null;\\n      }\\n\\n      var propConfig = Properties[propName];\\n      DOMProperty.mustUseAttribute[propName] =\\n        checkMask(propConfig, DOMPropertyInjection.MUST_USE_ATTRIBUTE);\\n      DOMProperty.mustUseProperty[propName] =\\n        checkMask(propConfig, DOMPropertyInjection.MUST_USE_PROPERTY);\\n      DOMProperty.hasSideEffects[propName] =\\n        checkMask(propConfig, DOMPropertyInjection.HAS_SIDE_EFFECTS);\\n      DOMProperty.hasBooleanValue[propName] =\\n        checkMask(propConfig, DOMPropertyInjection.HAS_BOOLEAN_VALUE);\\n      DOMProperty.hasNumericValue[propName] =\\n        checkMask(propConfig, DOMPropertyInjection.HAS_NUMERIC_VALUE);\\n      DOMProperty.hasPositiveNumericValue[propName] =\\n        checkMask(propConfig, DOMPropertyInjection.HAS_POSITIVE_NUMERIC_VALUE);\\n      DOMProperty.hasOverloadedBooleanValue[propName] =\\n        checkMask(propConfig, DOMPropertyInjection.HAS_OVERLOADED_BOOLEAN_VALUE);\\n\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        !DOMProperty.mustUseAttribute[propName] ||\\n          !DOMProperty.mustUseProperty[propName],\\n        'DOMProperty: Cannot require using both attribute and property: %s',\\n        propName\\n      ) : invariant(!DOMProperty.mustUseAttribute[propName] ||\\n        !DOMProperty.mustUseProperty[propName]));\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        DOMProperty.mustUseProperty[propName] ||\\n          !DOMProperty.hasSideEffects[propName],\\n        'DOMProperty: Properties that have side effects must use property: %s',\\n        propName\\n      ) : invariant(DOMProperty.mustUseProperty[propName] ||\\n        !DOMProperty.hasSideEffects[propName]));\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        !!DOMProperty.hasBooleanValue[propName] +\\n          !!DOMProperty.hasNumericValue[propName] +\\n          !!DOMProperty.hasOverloadedBooleanValue[propName] <= 1,\\n        'DOMProperty: Value can be one of boolean, overloaded boolean, or ' +\\n        'numeric value, but not a combination: %s',\\n        propName\\n      ) : invariant(!!DOMProperty.hasBooleanValue[propName] +\\n        !!DOMProperty.hasNumericValue[propName] +\\n        !!DOMProperty.hasOverloadedBooleanValue[propName] <= 1));\\n    }\\n  }\\n};\\nvar defaultValueCache = {};\\n\\n/**\\n * DOMProperty exports lookup objects that can be used like functions:\\n *\\n *   > DOMProperty.isValid['id']\\n *   true\\n *   > DOMProperty.isValid['foobar']\\n *   undefined\\n *\\n * Although this may be confusing, it performs better in general.\\n *\\n * @see http://jsperf.com/key-exists\\n * @see http://jsperf.com/key-missing\\n */\\nvar DOMProperty = {\\n\\n  ID_ATTRIBUTE_NAME: 'data-reactid',\\n\\n  /**\\n   * Checks whether a property name is a standard property.\\n   * @type {Object}\\n   */\\n  isStandardName: {},\\n\\n  /**\\n   * Mapping from lowercase property names to the properly cased version, used\\n   * to warn in the case of missing properties.\\n   * @type {Object}\\n   */\\n  getPossibleStandardName: {},\\n\\n  /**\\n   * Mapping from normalized names to attribute names that differ. Attribute\\n   * names are used when rendering markup or with `*Attribute()`.\\n   * @type {Object}\\n   */\\n  getAttributeName: {},\\n\\n  /**\\n   * Mapping from normalized names to properties on DOM node instances.\\n   * (This includes properties that mutate due to external factors.)\\n   * @type {Object}\\n   */\\n  getPropertyName: {},\\n\\n  /**\\n   * Mapping from normalized names to mutation methods. This will only exist if\\n   * mutation cannot be set simply by the property or `setAttribute()`.\\n   * @type {Object}\\n   */\\n  getMutationMethod: {},\\n\\n  /**\\n   * Whether the property must be accessed and mutated as an object property.\\n   * @type {Object}\\n   */\\n  mustUseAttribute: {},\\n\\n  /**\\n   * Whether the property must be accessed and mutated using `*Attribute()`.\\n   * (This includes anything that fails `<propName> in <element>`.)\\n   * @type {Object}\\n   */\\n  mustUseProperty: {},\\n\\n  /**\\n   * Whether or not setting a value causes side effects such as triggering\\n   * resources to be loaded or text selection changes. We must ensure that\\n   * the value is only set if it has changed.\\n   * @type {Object}\\n   */\\n  hasSideEffects: {},\\n\\n  /**\\n   * Whether the property should be removed when set to a falsey value.\\n   * @type {Object}\\n   */\\n  hasBooleanValue: {},\\n\\n  /**\\n   * Whether the property must be numeric or parse as a\\n   * numeric and should be removed when set to a falsey value.\\n   * @type {Object}\\n   */\\n  hasNumericValue: {},\\n\\n  /**\\n   * Whether the property must be positive numeric or parse as a positive\\n   * numeric and should be removed when set to a falsey value.\\n   * @type {Object}\\n   */\\n  hasPositiveNumericValue: {},\\n\\n  /**\\n   * Whether the property can be used as a flag as well as with a value. Removed\\n   * when strictly equal to false; present without a value when strictly equal\\n   * to true; present with a value otherwise.\\n   * @type {Object}\\n   */\\n  hasOverloadedBooleanValue: {},\\n\\n  /**\\n   * All of the isCustomAttribute() functions that have been injected.\\n   */\\n  _isCustomAttributeFunctions: [],\\n\\n  /**\\n   * Checks whether a property name is a custom attribute.\\n   * @method\\n   */\\n  isCustomAttribute: function(attributeName) {\\n    for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {\\n      var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];\\n      if (isCustomAttributeFn(attributeName)) {\\n        return true;\\n      }\\n    }\\n    return false;\\n  },\\n\\n  /**\\n   * Returns the default property value for a DOM property (i.e., not an\\n   * attribute). Most default values are '' or false, but not all. Worse yet,\\n   * some (in particular, `type`) vary depending on the type of element.\\n   *\\n   * TODO: Is it better to grab all the possible properties when creating an\\n   * element to avoid having to create the same element twice?\\n   */\\n  getDefaultValueForProperty: function(nodeName, prop) {\\n    var nodeDefaults = defaultValueCache[nodeName];\\n    var testElement;\\n    if (!nodeDefaults) {\\n      defaultValueCache[nodeName] = nodeDefaults = {};\\n    }\\n    if (!(prop in nodeDefaults)) {\\n      testElement = document.createElement(nodeName);\\n      nodeDefaults[prop] = testElement[prop];\\n    }\\n    return nodeDefaults[prop];\\n  },\\n\\n  injection: DOMPropertyInjection\\n};\\n\\nmodule.exports = DOMProperty;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/DOMProperty.js\\n ** module id = 8\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/DOMProperty.js?\");\n\n/***/ },\n/* 9 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/escapeTextForBrowser.js ***!\n  \\*********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule escapeTextForBrowser\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ESCAPE_LOOKUP = {\\n  \\\"&\\\": \\\"&amp;\\\",\\n  \\\">\\\": \\\"&gt;\\\",\\n  \\\"<\\\": \\\"&lt;\\\",\\n  \\\"\\\\\\\"\\\": \\\"&quot;\\\",\\n  \\\"'\\\": \\\"&#x27;\\\"\\n};\\n\\nvar ESCAPE_REGEX = /[&><\\\"']/g;\\n\\nfunction escaper(match) {\\n  return ESCAPE_LOOKUP[match];\\n}\\n\\n/**\\n * Escapes text to prevent scripting attacks.\\n *\\n * @param {*} text Text value to escape.\\n * @return {string} An escaped string.\\n */\\nfunction escapeTextForBrowser(text) {\\n  return ('' + text).replace(ESCAPE_REGEX, escaper);\\n}\\n\\nmodule.exports = escapeTextForBrowser;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/escapeTextForBrowser.js\\n ** module id = 9\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/escapeTextForBrowser.js?\");\n\n/***/ },\n/* 10 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/memoizeStringOnly.js ***!\n  \\******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule memoizeStringOnly\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Memoizes the return value of a function that accepts one string argument.\\n *\\n * @param {function} callback\\n * @return {function}\\n */\\nfunction memoizeStringOnly(callback) {\\n  var cache = {};\\n  return function(string) {\\n    if (cache.hasOwnProperty(string)) {\\n      return cache[string];\\n    } else {\\n      return cache[string] = callback.call(this, string);\\n    }\\n  };\\n}\\n\\nmodule.exports = memoizeStringOnly;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/memoizeStringOnly.js\\n ** module id = 10\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/memoizeStringOnly.js?\");\n\n/***/ },\n/* 11 */\n/*!********************************!*\\\n  !*** ./~/react/lib/warning.js ***!\n  \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule warning\\n */\\n\\n\\\"use strict\\\";\\n\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\n\\n/**\\n * Similar to invariant but only logs a warning if the condition is not met.\\n * This can be used to log issues in development environments in critical\\n * paths. Removing the logging code for production environments will keep the\\n * same logic and follow the same code paths.\\n */\\n\\nvar warning = emptyFunction;\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  warning = function(condition, format ) {for (var args=[],$__0=2,$__1=arguments.length;$__0<$__1;$__0++) args.push(arguments[$__0]);\\n    if (format === undefined) {\\n      throw new Error(\\n        '`warning(condition, format, ...args)` requires a warning ' +\\n        'message argument'\\n      );\\n    }\\n\\n    if (!condition) {\\n      var argIndex = 0;\\n      console.warn('Warning: ' + format.replace(/%s/g, function()  {return args[argIndex++];}));\\n    }\\n  };\\n}\\n\\nmodule.exports = warning;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/warning.js\\n ** module id = 11\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/warning.js?\");\n\n/***/ },\n/* 12 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/emptyFunction.js ***!\n  \\**************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule emptyFunction\\n */\\n\\nfunction makeEmptyFunction(arg) {\\n  return function() {\\n    return arg;\\n  };\\n}\\n\\n/**\\n * This function accepts and discards inputs; it has no side effects. This is\\n * primarily useful idiomatically for overridable function endpoints which\\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\\n */\\nfunction emptyFunction() {}\\n\\nemptyFunction.thatReturns = makeEmptyFunction;\\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\\nemptyFunction.thatReturnsThis = function() { return this; };\\nemptyFunction.thatReturnsArgument = function(arg) { return arg; };\\n\\nmodule.exports = emptyFunction;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/emptyFunction.js\\n ** module id = 12\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/emptyFunction.js?\");\n\n/***/ },\n/* 13 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/EventPluginUtils.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule EventPluginUtils\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Injected dependencies:\\n */\\n\\n/**\\n * - `Mount`: [required] Module that can convert between React dom IDs and\\n *   actual node references.\\n */\\nvar injection = {\\n  Mount: null,\\n  injectMount: function(InjectedMount) {\\n    injection.Mount = InjectedMount;\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        InjectedMount && InjectedMount.getNode,\\n        'EventPluginUtils.injection.injectMount(...): Injected Mount module ' +\\n        'is missing getNode.'\\n      ) : invariant(InjectedMount && InjectedMount.getNode));\\n    }\\n  }\\n};\\n\\nvar topLevelTypes = EventConstants.topLevelTypes;\\n\\nfunction isEndish(topLevelType) {\\n  return topLevelType === topLevelTypes.topMouseUp ||\\n         topLevelType === topLevelTypes.topTouchEnd ||\\n         topLevelType === topLevelTypes.topTouchCancel;\\n}\\n\\nfunction isMoveish(topLevelType) {\\n  return topLevelType === topLevelTypes.topMouseMove ||\\n         topLevelType === topLevelTypes.topTouchMove;\\n}\\nfunction isStartish(topLevelType) {\\n  return topLevelType === topLevelTypes.topMouseDown ||\\n         topLevelType === topLevelTypes.topTouchStart;\\n}\\n\\n\\nvar validateEventDispatches;\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  validateEventDispatches = function(event) {\\n    var dispatchListeners = event._dispatchListeners;\\n    var dispatchIDs = event._dispatchIDs;\\n\\n    var listenersIsArr = Array.isArray(dispatchListeners);\\n    var idsIsArr = Array.isArray(dispatchIDs);\\n    var IDsLen = idsIsArr ? dispatchIDs.length : dispatchIDs ? 1 : 0;\\n    var listenersLen = listenersIsArr ?\\n      dispatchListeners.length :\\n      dispatchListeners ? 1 : 0;\\n\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      idsIsArr === listenersIsArr && IDsLen === listenersLen,\\n      'EventPluginUtils: Invalid `event`.'\\n    ) : invariant(idsIsArr === listenersIsArr && IDsLen === listenersLen));\\n  };\\n}\\n\\n/**\\n * Invokes `cb(event, listener, id)`. Avoids using call if no scope is\\n * provided. The `(listener,id)` pair effectively forms the \\\"dispatch\\\" but are\\n * kept separate to conserve memory.\\n */\\nfunction forEachEventDispatch(event, cb) {\\n  var dispatchListeners = event._dispatchListeners;\\n  var dispatchIDs = event._dispatchIDs;\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    validateEventDispatches(event);\\n  }\\n  if (Array.isArray(dispatchListeners)) {\\n    for (var i = 0; i < dispatchListeners.length; i++) {\\n      if (event.isPropagationStopped()) {\\n        break;\\n      }\\n      // Listeners and IDs are two parallel arrays that are always in sync.\\n      cb(event, dispatchListeners[i], dispatchIDs[i]);\\n    }\\n  } else if (dispatchListeners) {\\n    cb(event, dispatchListeners, dispatchIDs);\\n  }\\n}\\n\\n/**\\n * Default implementation of PluginModule.executeDispatch().\\n * @param {SyntheticEvent} SyntheticEvent to handle\\n * @param {function} Application-level callback\\n * @param {string} domID DOM id to pass to the callback.\\n */\\nfunction executeDispatch(event, listener, domID) {\\n  event.currentTarget = injection.Mount.getNode(domID);\\n  var returnValue = listener(event, domID);\\n  event.currentTarget = null;\\n  return returnValue;\\n}\\n\\n/**\\n * Standard/simple iteration through an event's collected dispatches.\\n */\\nfunction executeDispatchesInOrder(event, executeDispatch) {\\n  forEachEventDispatch(event, executeDispatch);\\n  event._dispatchListeners = null;\\n  event._dispatchIDs = null;\\n}\\n\\n/**\\n * Standard/simple iteration through an event's collected dispatches, but stops\\n * at the first dispatch execution returning true, and returns that id.\\n *\\n * @return id of the first dispatch execution who's listener returns true, or\\n * null if no listener returned true.\\n */\\nfunction executeDispatchesInOrderStopAtTrueImpl(event) {\\n  var dispatchListeners = event._dispatchListeners;\\n  var dispatchIDs = event._dispatchIDs;\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    validateEventDispatches(event);\\n  }\\n  if (Array.isArray(dispatchListeners)) {\\n    for (var i = 0; i < dispatchListeners.length; i++) {\\n      if (event.isPropagationStopped()) {\\n        break;\\n      }\\n      // Listeners and IDs are two parallel arrays that are always in sync.\\n      if (dispatchListeners[i](event, dispatchIDs[i])) {\\n        return dispatchIDs[i];\\n      }\\n    }\\n  } else if (dispatchListeners) {\\n    if (dispatchListeners(event, dispatchIDs)) {\\n      return dispatchIDs;\\n    }\\n  }\\n  return null;\\n}\\n\\n/**\\n * @see executeDispatchesInOrderStopAtTrueImpl\\n */\\nfunction executeDispatchesInOrderStopAtTrue(event) {\\n  var ret = executeDispatchesInOrderStopAtTrueImpl(event);\\n  event._dispatchIDs = null;\\n  event._dispatchListeners = null;\\n  return ret;\\n}\\n\\n/**\\n * Execution of a \\\"direct\\\" dispatch - there must be at most one dispatch\\n * accumulated on the event or it is considered an error. It doesn't really make\\n * sense for an event with multiple dispatches (bubbled) to keep track of the\\n * return values at each dispatch execution, but it does tend to make sense when\\n * dealing with \\\"direct\\\" dispatches.\\n *\\n * @return The return value of executing the single dispatch.\\n */\\nfunction executeDirectDispatch(event) {\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    validateEventDispatches(event);\\n  }\\n  var dispatchListener = event._dispatchListeners;\\n  var dispatchID = event._dispatchIDs;\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    !Array.isArray(dispatchListener),\\n    'executeDirectDispatch(...): Invalid `event`.'\\n  ) : invariant(!Array.isArray(dispatchListener)));\\n  var res = dispatchListener ?\\n    dispatchListener(event, dispatchID) :\\n    null;\\n  event._dispatchListeners = null;\\n  event._dispatchIDs = null;\\n  return res;\\n}\\n\\n/**\\n * @param {SyntheticEvent} event\\n * @return {bool} True iff number of dispatches accumulated is greater than 0.\\n */\\nfunction hasDispatches(event) {\\n  return !!event._dispatchListeners;\\n}\\n\\n/**\\n * General utilities that are useful in creating custom Event Plugins.\\n */\\nvar EventPluginUtils = {\\n  isEndish: isEndish,\\n  isMoveish: isMoveish,\\n  isStartish: isStartish,\\n\\n  executeDirectDispatch: executeDirectDispatch,\\n  executeDispatch: executeDispatch,\\n  executeDispatchesInOrder: executeDispatchesInOrder,\\n  executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,\\n  hasDispatches: hasDispatches,\\n  injection: injection,\\n  useTouchEvents: false\\n};\\n\\nmodule.exports = EventPluginUtils;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/EventPluginUtils.js\\n ** module id = 13\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/EventPluginUtils.js?\");\n\n/***/ },\n/* 14 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/EventConstants.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule EventConstants\\n */\\n\\n\\\"use strict\\\";\\n\\nvar keyMirror = __webpack_require__(/*! ./keyMirror */ 15);\\n\\nvar PropagationPhases = keyMirror({bubbled: null, captured: null});\\n\\n/**\\n * Types of raw signals from the browser caught at the top level.\\n */\\nvar topLevelTypes = keyMirror({\\n  topBlur: null,\\n  topChange: null,\\n  topClick: null,\\n  topCompositionEnd: null,\\n  topCompositionStart: null,\\n  topCompositionUpdate: null,\\n  topContextMenu: null,\\n  topCopy: null,\\n  topCut: null,\\n  topDoubleClick: null,\\n  topDrag: null,\\n  topDragEnd: null,\\n  topDragEnter: null,\\n  topDragExit: null,\\n  topDragLeave: null,\\n  topDragOver: null,\\n  topDragStart: null,\\n  topDrop: null,\\n  topError: null,\\n  topFocus: null,\\n  topInput: null,\\n  topKeyDown: null,\\n  topKeyPress: null,\\n  topKeyUp: null,\\n  topLoad: null,\\n  topMouseDown: null,\\n  topMouseMove: null,\\n  topMouseOut: null,\\n  topMouseOver: null,\\n  topMouseUp: null,\\n  topPaste: null,\\n  topReset: null,\\n  topScroll: null,\\n  topSelectionChange: null,\\n  topSubmit: null,\\n  topTextInput: null,\\n  topTouchCancel: null,\\n  topTouchEnd: null,\\n  topTouchMove: null,\\n  topTouchStart: null,\\n  topWheel: null\\n});\\n\\nvar EventConstants = {\\n  topLevelTypes: topLevelTypes,\\n  PropagationPhases: PropagationPhases\\n};\\n\\nmodule.exports = EventConstants;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/EventConstants.js\\n ** module id = 14\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/EventConstants.js?\");\n\n/***/ },\n/* 15 */\n/*!**********************************!*\\\n  !*** ./~/react/lib/keyMirror.js ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule keyMirror\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Constructs an enumeration with keys equal to their value.\\n *\\n * For example:\\n *\\n *   var COLORS = keyMirror({blue: null, red: null});\\n *   var myColor = COLORS.blue;\\n *   var isColorValid = !!COLORS[myColor];\\n *\\n * The last line could not be performed if the values of the generated enum were\\n * not equal to their keys.\\n *\\n *   Input:  {key1: val1, key2: val2}\\n *   Output: {key1: key1, key2: key2}\\n *\\n * @param {object} obj\\n * @return {object}\\n */\\nvar keyMirror = function(obj) {\\n  var ret = {};\\n  var key;\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    obj instanceof Object && !Array.isArray(obj),\\n    'keyMirror(...): Argument must be an object.'\\n  ) : invariant(obj instanceof Object && !Array.isArray(obj)));\\n  for (key in obj) {\\n    if (!obj.hasOwnProperty(key)) {\\n      continue;\\n    }\\n    ret[key] = key;\\n  }\\n  return ret;\\n};\\n\\nmodule.exports = keyMirror;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/keyMirror.js\\n ** module id = 15\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/keyMirror.js?\");\n\n/***/ },\n/* 16 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/ReactChildren.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactChildren\\n */\\n\\n\\\"use strict\\\";\\n\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 17);\\n\\nvar traverseAllChildren = __webpack_require__(/*! ./traverseAllChildren */ 18);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\\nvar threeArgumentPooler = PooledClass.threeArgumentPooler;\\n\\n/**\\n * PooledClass representing the bookkeeping associated with performing a child\\n * traversal. Allows avoiding binding callbacks.\\n *\\n * @constructor ForEachBookKeeping\\n * @param {!function} forEachFunction Function to perform traversal with.\\n * @param {?*} forEachContext Context to perform context with.\\n */\\nfunction ForEachBookKeeping(forEachFunction, forEachContext) {\\n  this.forEachFunction = forEachFunction;\\n  this.forEachContext = forEachContext;\\n}\\nPooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);\\n\\nfunction forEachSingleChild(traverseContext, child, name, i) {\\n  var forEachBookKeeping = traverseContext;\\n  forEachBookKeeping.forEachFunction.call(\\n    forEachBookKeeping.forEachContext, child, i);\\n}\\n\\n/**\\n * Iterates through children that are typically specified as `props.children`.\\n *\\n * The provided forEachFunc(child, index) will be called for each\\n * leaf child.\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} forEachFunc.\\n * @param {*} forEachContext Context for forEachContext.\\n */\\nfunction forEachChildren(children, forEachFunc, forEachContext) {\\n  if (children == null) {\\n    return children;\\n  }\\n\\n  var traverseContext =\\n    ForEachBookKeeping.getPooled(forEachFunc, forEachContext);\\n  traverseAllChildren(children, forEachSingleChild, traverseContext);\\n  ForEachBookKeeping.release(traverseContext);\\n}\\n\\n/**\\n * PooledClass representing the bookkeeping associated with performing a child\\n * mapping. Allows avoiding binding callbacks.\\n *\\n * @constructor MapBookKeeping\\n * @param {!*} mapResult Object containing the ordered map of results.\\n * @param {!function} mapFunction Function to perform mapping with.\\n * @param {?*} mapContext Context to perform mapping with.\\n */\\nfunction MapBookKeeping(mapResult, mapFunction, mapContext) {\\n  this.mapResult = mapResult;\\n  this.mapFunction = mapFunction;\\n  this.mapContext = mapContext;\\n}\\nPooledClass.addPoolingTo(MapBookKeeping, threeArgumentPooler);\\n\\nfunction mapSingleChildIntoContext(traverseContext, child, name, i) {\\n  var mapBookKeeping = traverseContext;\\n  var mapResult = mapBookKeeping.mapResult;\\n\\n  var keyUnique = !mapResult.hasOwnProperty(name);\\n  (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n    keyUnique,\\n    'ReactChildren.map(...): Encountered two children with the same key, ' +\\n    '`%s`. Child keys must be unique; when two children share a key, only ' +\\n    'the first child will be used.',\\n    name\\n  ) : null);\\n\\n  if (keyUnique) {\\n    var mappedChild =\\n      mapBookKeeping.mapFunction.call(mapBookKeeping.mapContext, child, i);\\n    mapResult[name] = mappedChild;\\n  }\\n}\\n\\n/**\\n * Maps children that are typically specified as `props.children`.\\n *\\n * The provided mapFunction(child, key, index) will be called for each\\n * leaf child.\\n *\\n * TODO: This may likely break any calls to `ReactChildren.map` that were\\n * previously relying on the fact that we guarded against null children.\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} mapFunction.\\n * @param {*} mapContext Context for mapFunction.\\n * @return {object} Object containing the ordered map of results.\\n */\\nfunction mapChildren(children, func, context) {\\n  if (children == null) {\\n    return children;\\n  }\\n\\n  var mapResult = {};\\n  var traverseContext = MapBookKeeping.getPooled(mapResult, func, context);\\n  traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\\n  MapBookKeeping.release(traverseContext);\\n  return mapResult;\\n}\\n\\nfunction forEachSingleChildDummy(traverseContext, child, name, i) {\\n  return null;\\n}\\n\\n/**\\n * Count the number of children that are typically specified as\\n * `props.children`.\\n *\\n * @param {?*} children Children tree container.\\n * @return {number} The number of children.\\n */\\nfunction countChildren(children, context) {\\n  return traverseAllChildren(children, forEachSingleChildDummy, null);\\n}\\n\\nvar ReactChildren = {\\n  forEach: forEachChildren,\\n  map: mapChildren,\\n  count: countChildren\\n};\\n\\nmodule.exports = ReactChildren;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactChildren.js\\n ** module id = 16\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactChildren.js?\");\n\n/***/ },\n/* 17 */\n/*!************************************!*\\\n  !*** ./~/react/lib/PooledClass.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule PooledClass\\n */\\n\\n\\\"use strict\\\";\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Static poolers. Several custom versions for each potential number of\\n * arguments. A completely generic pooler is easy to implement, but would\\n * require accessing the `arguments` object. In each of these, `this` refers to\\n * the Class itself, not an instance. If any others are needed, simply add them\\n * here, or in their own files.\\n */\\nvar oneArgumentPooler = function(copyFieldsFrom) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, copyFieldsFrom);\\n    return instance;\\n  } else {\\n    return new Klass(copyFieldsFrom);\\n  }\\n};\\n\\nvar twoArgumentPooler = function(a1, a2) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2);\\n  }\\n};\\n\\nvar threeArgumentPooler = function(a1, a2, a3) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2, a3);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2, a3);\\n  }\\n};\\n\\nvar fiveArgumentPooler = function(a1, a2, a3, a4, a5) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2, a3, a4, a5);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2, a3, a4, a5);\\n  }\\n};\\n\\nvar standardReleaser = function(instance) {\\n  var Klass = this;\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    instance instanceof Klass,\\n    'Trying to release an instance into a pool of a different type.'\\n  ) : invariant(instance instanceof Klass));\\n  if (instance.destructor) {\\n    instance.destructor();\\n  }\\n  if (Klass.instancePool.length < Klass.poolSize) {\\n    Klass.instancePool.push(instance);\\n  }\\n};\\n\\nvar DEFAULT_POOL_SIZE = 10;\\nvar DEFAULT_POOLER = oneArgumentPooler;\\n\\n/**\\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\\n * you give this may have a `poolSize` property, and will look for a\\n * prototypical `destructor` on instances (optional).\\n *\\n * @param {Function} CopyConstructor Constructor that can be used to reset.\\n * @param {Function} pooler Customizable pooler.\\n */\\nvar addPoolingTo = function(CopyConstructor, pooler) {\\n  var NewKlass = CopyConstructor;\\n  NewKlass.instancePool = [];\\n  NewKlass.getPooled = pooler || DEFAULT_POOLER;\\n  if (!NewKlass.poolSize) {\\n    NewKlass.poolSize = DEFAULT_POOL_SIZE;\\n  }\\n  NewKlass.release = standardReleaser;\\n  return NewKlass;\\n};\\n\\nvar PooledClass = {\\n  addPoolingTo: addPoolingTo,\\n  oneArgumentPooler: oneArgumentPooler,\\n  twoArgumentPooler: twoArgumentPooler,\\n  threeArgumentPooler: threeArgumentPooler,\\n  fiveArgumentPooler: fiveArgumentPooler\\n};\\n\\nmodule.exports = PooledClass;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/PooledClass.js\\n ** module id = 17\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/PooledClass.js?\");\n\n/***/ },\n/* 18 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/traverseAllChildren.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule traverseAllChildren\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactInstanceHandles = __webpack_require__(/*! ./ReactInstanceHandles */ 4);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nvar SEPARATOR = ReactInstanceHandles.SEPARATOR;\\nvar SUBSEPARATOR = ':';\\n\\n/**\\n * TODO: Test that:\\n * 1. `mapChildren` transforms strings and numbers into `ReactTextComponent`.\\n * 2. it('should fail when supplied duplicate key', function() {\\n * 3. That a single child and an array with one item have the same key pattern.\\n * });\\n */\\n\\nvar userProvidedKeyEscaperLookup = {\\n  '=': '=0',\\n  '.': '=1',\\n  ':': '=2'\\n};\\n\\nvar userProvidedKeyEscapeRegex = /[=.:]/g;\\n\\nfunction userProvidedKeyEscaper(match) {\\n  return userProvidedKeyEscaperLookup[match];\\n}\\n\\n/**\\n * Generate a key string that identifies a component within a set.\\n *\\n * @param {*} component A component that could contain a manual key.\\n * @param {number} index Index that is used if a manual key is not provided.\\n * @return {string}\\n */\\nfunction getComponentKey(component, index) {\\n  if (component && component.key != null) {\\n    // Explicit key\\n    return wrapUserProvidedKey(component.key);\\n  }\\n  // Implicit key determined by the index in the set\\n  return index.toString(36);\\n}\\n\\n/**\\n * Escape a component key so that it is safe to use in a reactid.\\n *\\n * @param {*} key Component key to be escaped.\\n * @return {string} An escaped string.\\n */\\nfunction escapeUserProvidedKey(text) {\\n  return ('' + text).replace(\\n    userProvidedKeyEscapeRegex,\\n    userProvidedKeyEscaper\\n  );\\n}\\n\\n/**\\n * Wrap a `key` value explicitly provided by the user to distinguish it from\\n * implicitly-generated keys generated by a component's index in its parent.\\n *\\n * @param {string} key Value of a user-provided `key` attribute\\n * @return {string}\\n */\\nfunction wrapUserProvidedKey(key) {\\n  return '$' + escapeUserProvidedKey(key);\\n}\\n\\n/**\\n * @param {?*} children Children tree container.\\n * @param {!string} nameSoFar Name of the key path so far.\\n * @param {!number} indexSoFar Number of children encountered until this point.\\n * @param {!function} callback Callback to invoke with each child found.\\n * @param {?*} traverseContext Used to pass information throughout the traversal\\n * process.\\n * @return {!number} The number of children in this subtree.\\n */\\nvar traverseAllChildrenImpl =\\n  function(children, nameSoFar, indexSoFar, callback, traverseContext) {\\n    var nextName, nextIndex;\\n    var subtreeCount = 0;  // Count of children found in the current subtree.\\n    if (Array.isArray(children)) {\\n      for (var i = 0; i < children.length; i++) {\\n        var child = children[i];\\n        nextName = (\\n          nameSoFar +\\n          (nameSoFar ? SUBSEPARATOR : SEPARATOR) +\\n          getComponentKey(child, i)\\n        );\\n        nextIndex = indexSoFar + subtreeCount;\\n        subtreeCount += traverseAllChildrenImpl(\\n          child,\\n          nextName,\\n          nextIndex,\\n          callback,\\n          traverseContext\\n        );\\n      }\\n    } else {\\n      var type = typeof children;\\n      var isOnlyChild = nameSoFar === '';\\n      // If it's the only child, treat the name as if it was wrapped in an array\\n      // so that it's consistent if the number of children grows\\n      var storageName =\\n        isOnlyChild ? SEPARATOR + getComponentKey(children, 0) : nameSoFar;\\n      if (children == null || type === 'boolean') {\\n        // All of the above are perceived as null.\\n        callback(traverseContext, null, storageName, indexSoFar);\\n        subtreeCount = 1;\\n      } else if (type === 'string' || type === 'number' ||\\n                 ReactElement.isValidElement(children)) {\\n        callback(traverseContext, children, storageName, indexSoFar);\\n        subtreeCount = 1;\\n      } else if (type === 'object') {\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          !children || children.nodeType !== 1,\\n          'traverseAllChildren(...): Encountered an invalid child; DOM ' +\\n          'elements are not valid children of React components.'\\n        ) : invariant(!children || children.nodeType !== 1));\\n        for (var key in children) {\\n          if (children.hasOwnProperty(key)) {\\n            nextName = (\\n              nameSoFar + (nameSoFar ? SUBSEPARATOR : SEPARATOR) +\\n              wrapUserProvidedKey(key) + SUBSEPARATOR +\\n              getComponentKey(children[key], 0)\\n            );\\n            nextIndex = indexSoFar + subtreeCount;\\n            subtreeCount += traverseAllChildrenImpl(\\n              children[key],\\n              nextName,\\n              nextIndex,\\n              callback,\\n              traverseContext\\n            );\\n          }\\n        }\\n      }\\n    }\\n    return subtreeCount;\\n  };\\n\\n/**\\n * Traverses children that are typically specified as `props.children`, but\\n * might also be specified through attributes:\\n *\\n * - `traverseAllChildren(this.props.children, ...)`\\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\\n *\\n * The `traverseContext` is an optional argument that is passed through the\\n * entire traversal. It can be used to store accumulations or anything else that\\n * the callback might find relevant.\\n *\\n * @param {?*} children Children tree object.\\n * @param {!function} callback To invoke upon traversing each child.\\n * @param {?*} traverseContext Context for traversal.\\n * @return {!number} The number of children in this subtree.\\n */\\nfunction traverseAllChildren(children, callback, traverseContext) {\\n  if (children == null) {\\n    return 0;\\n  }\\n\\n  return traverseAllChildrenImpl(children, '', 0, callback, traverseContext);\\n}\\n\\nmodule.exports = traverseAllChildren;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/traverseAllChildren.js\\n ** module id = 18\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/traverseAllChildren.js?\");\n\n/***/ },\n/* 19 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/ReactElement.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactElement\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactContext = __webpack_require__(/*! ./ReactContext */ 20);\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 22);\\n\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar RESERVED_PROPS = {\\n  key: true,\\n  ref: true\\n};\\n\\n/**\\n * Warn for mutations.\\n *\\n * @internal\\n * @param {object} object\\n * @param {string} key\\n */\\nfunction defineWarningProperty(object, key) {\\n  Object.defineProperty(object, key, {\\n\\n    configurable: false,\\n    enumerable: true,\\n\\n    get: function() {\\n      if (!this._store) {\\n        return null;\\n      }\\n      return this._store[key];\\n    },\\n\\n    set: function(value) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n        false,\\n        'Don\\\\'t set the ' + key + ' property of the component. ' +\\n        'Mutate the existing props object instead.'\\n      ) : null);\\n      this._store[key] = value;\\n    }\\n\\n  });\\n}\\n\\n/**\\n * This is updated to true if the membrane is successfully created.\\n */\\nvar useMutationMembrane = false;\\n\\n/**\\n * Warn for mutations.\\n *\\n * @internal\\n * @param {object} element\\n */\\nfunction defineMutationMembrane(prototype) {\\n  try {\\n    var pseudoFrozenProperties = {\\n      props: true\\n    };\\n    for (var key in pseudoFrozenProperties) {\\n      defineWarningProperty(prototype, key);\\n    }\\n    useMutationMembrane = true;\\n  } catch (x) {\\n    // IE will fail on defineProperty\\n  }\\n}\\n\\n/**\\n * Base constructor for all React elements. This is only used to make this\\n * work with a dynamic instanceof check. Nothing should live on this prototype.\\n *\\n * @param {*} type\\n * @param {string|object} ref\\n * @param {*} key\\n * @param {*} props\\n * @internal\\n */\\nvar ReactElement = function(type, key, ref, owner, context, props) {\\n  // Built-in properties that belong on the element\\n  this.type = type;\\n  this.key = key;\\n  this.ref = ref;\\n\\n  // Record the component responsible for creating this element.\\n  this._owner = owner;\\n\\n  // TODO: Deprecate withContext, and then the context becomes accessible\\n  // through the owner.\\n  this._context = context;\\n\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    // The validation flag and props are currently mutative. We put them on\\n    // an external backing store so that we can freeze the whole object.\\n    // This can be replaced with a WeakMap once they are implemented in\\n    // commonly used development environments.\\n    this._store = { validated: false, props: props };\\n\\n    // We're not allowed to set props directly on the object so we early\\n    // return and rely on the prototype membrane to forward to the backing\\n    // store.\\n    if (useMutationMembrane) {\\n      Object.freeze(this);\\n      return;\\n    }\\n  }\\n\\n  this.props = props;\\n};\\n\\n// We intentionally don't expose the function on the constructor property.\\n// ReactElement should be indistinguishable from a plain object.\\nReactElement.prototype = {\\n  _isReactElement: true\\n};\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  defineMutationMembrane(ReactElement.prototype);\\n}\\n\\nReactElement.createElement = function(type, config, children) {\\n  var propName;\\n\\n  // Reserved names are extracted\\n  var props = {};\\n\\n  var key = null;\\n  var ref = null;\\n\\n  if (config != null) {\\n    ref = config.ref === undefined ? null : config.ref;\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n        config.key !== null,\\n        'createElement(...): Encountered component with a `key` of null. In ' +\\n        'a future version, this will be treated as equivalent to the string ' +\\n        '\\\\'null\\\\'; instead, provide an explicit key or use undefined.'\\n      ) : null);\\n    }\\n    // TODO: Change this back to `config.key === undefined`\\n    key = config.key == null ? null : '' + config.key;\\n    // Remaining properties are added to a new props object\\n    for (propName in config) {\\n      if (config.hasOwnProperty(propName) &&\\n          !RESERVED_PROPS.hasOwnProperty(propName)) {\\n        props[propName] = config[propName];\\n      }\\n    }\\n  }\\n\\n  // Children can be more than one argument, and those are transferred onto\\n  // the newly allocated props object.\\n  var childrenLength = arguments.length - 2;\\n  if (childrenLength === 1) {\\n    props.children = children;\\n  } else if (childrenLength > 1) {\\n    var childArray = Array(childrenLength);\\n    for (var i = 0; i < childrenLength; i++) {\\n      childArray[i] = arguments[i + 2];\\n    }\\n    props.children = childArray;\\n  }\\n\\n  // Resolve default props\\n  if (type && type.defaultProps) {\\n    var defaultProps = type.defaultProps;\\n    for (propName in defaultProps) {\\n      if (typeof props[propName] === 'undefined') {\\n        props[propName] = defaultProps[propName];\\n      }\\n    }\\n  }\\n\\n  return new ReactElement(\\n    type,\\n    key,\\n    ref,\\n    ReactCurrentOwner.current,\\n    ReactContext.current,\\n    props\\n  );\\n};\\n\\nReactElement.createFactory = function(type) {\\n  var factory = ReactElement.createElement.bind(null, type);\\n  // Expose the type on the factory and the prototype so that it can be\\n  // easily accessed on elements. E.g. <Foo />.type === Foo.type.\\n  // This should not be named `constructor` since this may not be the function\\n  // that created the element, and it may not even be a constructor.\\n  factory.type = type;\\n  return factory;\\n};\\n\\nReactElement.cloneAndReplaceProps = function(oldElement, newProps) {\\n  var newElement = new ReactElement(\\n    oldElement.type,\\n    oldElement.key,\\n    oldElement.ref,\\n    oldElement._owner,\\n    oldElement._context,\\n    newProps\\n  );\\n\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    // If the key on the original is valid, then the clone is valid\\n    newElement._store.validated = oldElement._store.validated;\\n  }\\n  return newElement;\\n};\\n\\n/**\\n * @param {?object} object\\n * @return {boolean} True if `object` is a valid component.\\n * @final\\n */\\nReactElement.isValidElement = function(object) {\\n  // ReactTestUtils is often used outside of beforeEach where as React is\\n  // within it. This leads to two different instances of React on the same\\n  // page. To identify a element from a different React instance we use\\n  // a flag instead of an instanceof check.\\n  var isElement = !!(object && object._isReactElement);\\n  // if (isElement && !(object instanceof ReactElement)) {\\n  // This is an indicator that you're using multiple versions of React at the\\n  // same time. This will screw with ownership and stuff. Fix it, please.\\n  // TODO: We could possibly warn here.\\n  // }\\n  return isElement;\\n};\\n\\nmodule.exports = ReactElement;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactElement.js\\n ** module id = 19\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactElement.js?\");\n\n/***/ },\n/* 20 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/ReactContext.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactContext\\n */\\n\\n\\\"use strict\\\";\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\n\\n/**\\n * Keeps track of the current context.\\n *\\n * The context is automatically passed down the component ownership hierarchy\\n * and is accessible via `this.context` on ReactCompositeComponents.\\n */\\nvar ReactContext = {\\n\\n  /**\\n   * @internal\\n   * @type {object}\\n   */\\n  current: {},\\n\\n  /**\\n   * Temporarily extends the current context while executing scopedCallback.\\n   *\\n   * A typical use case might look like\\n   *\\n   *  render: function() {\\n   *    var children = ReactContext.withContext({foo: 'foo'}, () => (\\n   *\\n   *    ));\\n   *    return <div>{children}</div>;\\n   *  }\\n   *\\n   * @param {object} newContext New context to merge into the existing context\\n   * @param {function} scopedCallback Callback to run with the new context\\n   * @return {ReactComponent|array<ReactComponent>}\\n   */\\n  withContext: function(newContext, scopedCallback) {\\n    var result;\\n    var previousContext = ReactContext.current;\\n    ReactContext.current = assign({}, previousContext, newContext);\\n    try {\\n      result = scopedCallback();\\n    } finally {\\n      ReactContext.current = previousContext;\\n    }\\n    return result;\\n  }\\n\\n};\\n\\nmodule.exports = ReactContext;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactContext.js\\n ** module id = 20\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactContext.js?\");\n\n/***/ },\n/* 21 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/Object.assign.js ***!\n  \\**************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule Object.assign\\n */\\n\\n// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign\\n\\nfunction assign(target, sources) {\\n  if (target == null) {\\n    throw new TypeError('Object.assign target cannot be null or undefined');\\n  }\\n\\n  var to = Object(target);\\n  var hasOwnProperty = Object.prototype.hasOwnProperty;\\n\\n  for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) {\\n    var nextSource = arguments[nextIndex];\\n    if (nextSource == null) {\\n      continue;\\n    }\\n\\n    var from = Object(nextSource);\\n\\n    // We don't currently support accessors nor proxies. Therefore this\\n    // copy cannot throw. If we ever supported this then we must handle\\n    // exceptions and side-effects. We don't support symbols so they won't\\n    // be transferred.\\n\\n    for (var key in from) {\\n      if (hasOwnProperty.call(from, key)) {\\n        to[key] = from[key];\\n      }\\n    }\\n  }\\n\\n  return to;\\n};\\n\\nmodule.exports = assign;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/Object.assign.js\\n ** module id = 21\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/Object.assign.js?\");\n\n/***/ },\n/* 22 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/ReactCurrentOwner.js ***!\n  \\******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactCurrentOwner\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Keeps track of the current owner.\\n *\\n * The current owner is the component who should own any components that are\\n * currently being constructed.\\n *\\n * The depth indicate how many composite components are above this render level.\\n */\\nvar ReactCurrentOwner = {\\n\\n  /**\\n   * @internal\\n   * @type {ReactComponent}\\n   */\\n  current: null\\n\\n};\\n\\nmodule.exports = ReactCurrentOwner;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactCurrentOwner.js\\n ** module id = 22\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactCurrentOwner.js?\");\n\n/***/ },\n/* 23 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactComponent.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactComponent\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactOwner = __webpack_require__(/*! ./ReactOwner */ 24);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar keyMirror = __webpack_require__(/*! ./keyMirror */ 15);\\n\\n/**\\n * Every React component is in one of these life cycles.\\n */\\nvar ComponentLifeCycle = keyMirror({\\n  /**\\n   * Mounted components have a DOM node representation and are capable of\\n   * receiving new props.\\n   */\\n  MOUNTED: null,\\n  /**\\n   * Unmounted components are inactive and cannot receive new props.\\n   */\\n  UNMOUNTED: null\\n});\\n\\nvar injected = false;\\n\\n/**\\n * Optionally injectable environment dependent cleanup hook. (server vs.\\n * browser etc). Example: A browser system caches DOM nodes based on component\\n * ID and must remove that cache entry when this instance is unmounted.\\n *\\n * @private\\n */\\nvar unmountIDFromEnvironment = null;\\n\\n/**\\n * The \\\"image\\\" of a component tree, is the platform specific (typically\\n * serialized) data that represents a tree of lower level UI building blocks.\\n * On the web, this \\\"image\\\" is HTML markup which describes a construction of\\n * low level `div` and `span` nodes. Other platforms may have different\\n * encoding of this \\\"image\\\". This must be injected.\\n *\\n * @private\\n */\\nvar mountImageIntoNode = null;\\n\\n/**\\n * Components are the basic units of composition in React.\\n *\\n * Every component accepts a set of keyed input parameters known as \\\"props\\\" that\\n * are initialized by the constructor. Once a component is mounted, the props\\n * can be mutated using `setProps` or `replaceProps`.\\n *\\n * Every component is capable of the following operations:\\n *\\n *   `mountComponent`\\n *     Initializes the component, renders markup, and registers event listeners.\\n *\\n *   `receiveComponent`\\n *     Updates the rendered DOM nodes to match the given component.\\n *\\n *   `unmountComponent`\\n *     Releases any resources allocated by this component.\\n *\\n * Components can also be \\\"owned\\\" by other components. Being owned by another\\n * component means being constructed by that component. This is different from\\n * being the child of a component, which means having a DOM representation that\\n * is a child of the DOM representation of that component.\\n *\\n * @class ReactComponent\\n */\\nvar ReactComponent = {\\n\\n  injection: {\\n    injectEnvironment: function(ReactComponentEnvironment) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        !injected,\\n        'ReactComponent: injectEnvironment() can only be called once.'\\n      ) : invariant(!injected));\\n      mountImageIntoNode = ReactComponentEnvironment.mountImageIntoNode;\\n      unmountIDFromEnvironment =\\n        ReactComponentEnvironment.unmountIDFromEnvironment;\\n      ReactComponent.BackendIDOperations =\\n        ReactComponentEnvironment.BackendIDOperations;\\n      injected = true;\\n    }\\n  },\\n\\n  /**\\n   * @internal\\n   */\\n  LifeCycle: ComponentLifeCycle,\\n\\n  /**\\n   * Injected module that provides ability to mutate individual properties.\\n   * Injected into the base class because many different subclasses need access\\n   * to this.\\n   *\\n   * @internal\\n   */\\n  BackendIDOperations: null,\\n\\n  /**\\n   * Base functionality for every ReactComponent constructor. Mixed into the\\n   * `ReactComponent` prototype, but exposed statically for easy access.\\n   *\\n   * @lends {ReactComponent.prototype}\\n   */\\n  Mixin: {\\n\\n    /**\\n     * Checks whether or not this component is mounted.\\n     *\\n     * @return {boolean} True if mounted, false otherwise.\\n     * @final\\n     * @protected\\n     */\\n    isMounted: function() {\\n      return this._lifeCycleState === ComponentLifeCycle.MOUNTED;\\n    },\\n\\n    /**\\n     * Sets a subset of the props.\\n     *\\n     * @param {object} partialProps Subset of the next props.\\n     * @param {?function} callback Called after props are updated.\\n     * @final\\n     * @public\\n     */\\n    setProps: function(partialProps, callback) {\\n      // Merge with the pending element if it exists, otherwise with existing\\n      // element props.\\n      var element = this._pendingElement || this._currentElement;\\n      this.replaceProps(\\n        assign({}, element.props, partialProps),\\n        callback\\n      );\\n    },\\n\\n    /**\\n     * Replaces all of the props.\\n     *\\n     * @param {object} props New props.\\n     * @param {?function} callback Called after props are updated.\\n     * @final\\n     * @public\\n     */\\n    replaceProps: function(props, callback) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        this.isMounted(),\\n        'replaceProps(...): Can only update a mounted component.'\\n      ) : invariant(this.isMounted()));\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        this._mountDepth === 0,\\n        'replaceProps(...): You called `setProps` or `replaceProps` on a ' +\\n        'component with a parent. This is an anti-pattern since props will ' +\\n        'get reactively updated when rendered. Instead, change the owner\\\\'s ' +\\n        '`render` method to pass the correct value as props to the component ' +\\n        'where it is created.'\\n      ) : invariant(this._mountDepth === 0));\\n      // This is a deoptimized path. We optimize for always having a element.\\n      // This creates an extra internal element.\\n      this._pendingElement = ReactElement.cloneAndReplaceProps(\\n        this._pendingElement || this._currentElement,\\n        props\\n      );\\n      ReactUpdates.enqueueUpdate(this, callback);\\n    },\\n\\n    /**\\n     * Schedule a partial update to the props. Only used for internal testing.\\n     *\\n     * @param {object} partialProps Subset of the next props.\\n     * @param {?function} callback Called after props are updated.\\n     * @final\\n     * @internal\\n     */\\n    _setPropsInternal: function(partialProps, callback) {\\n      // This is a deoptimized path. We optimize for always having a element.\\n      // This creates an extra internal element.\\n      var element = this._pendingElement || this._currentElement;\\n      this._pendingElement = ReactElement.cloneAndReplaceProps(\\n        element,\\n        assign({}, element.props, partialProps)\\n      );\\n      ReactUpdates.enqueueUpdate(this, callback);\\n    },\\n\\n    /**\\n     * Base constructor for all React components.\\n     *\\n     * Subclasses that override this method should make sure to invoke\\n     * `ReactComponent.Mixin.construct.call(this, ...)`.\\n     *\\n     * @param {ReactElement} element\\n     * @internal\\n     */\\n    construct: function(element) {\\n      // This is the public exposed props object after it has been processed\\n      // with default props. The element's props represents the true internal\\n      // state of the props.\\n      this.props = element.props;\\n      // Record the component responsible for creating this component.\\n      // This is accessible through the element but we maintain an extra\\n      // field for compatibility with devtools and as a way to make an\\n      // incremental update. TODO: Consider deprecating this field.\\n      this._owner = element._owner;\\n\\n      // All components start unmounted.\\n      this._lifeCycleState = ComponentLifeCycle.UNMOUNTED;\\n\\n      // See ReactUpdates.\\n      this._pendingCallbacks = null;\\n\\n      // We keep the old element and a reference to the pending element\\n      // to track updates.\\n      this._currentElement = element;\\n      this._pendingElement = null;\\n    },\\n\\n    /**\\n     * Initializes the component, renders markup, and registers event listeners.\\n     *\\n     * NOTE: This does not insert any nodes into the DOM.\\n     *\\n     * Subclasses that override this method should make sure to invoke\\n     * `ReactComponent.Mixin.mountComponent.call(this, ...)`.\\n     *\\n     * @param {string} rootID DOM ID of the root node.\\n     * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n     * @param {number} mountDepth number of components in the owner hierarchy.\\n     * @return {?string} Rendered markup to be inserted into the DOM.\\n     * @internal\\n     */\\n    mountComponent: function(rootID, transaction, mountDepth) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        !this.isMounted(),\\n        'mountComponent(%s, ...): Can only mount an unmounted component. ' +\\n        'Make sure to avoid storing components between renders or reusing a ' +\\n        'single component instance in multiple places.',\\n        rootID\\n      ) : invariant(!this.isMounted()));\\n      var ref = this._currentElement.ref;\\n      if (ref != null) {\\n        var owner = this._currentElement._owner;\\n        ReactOwner.addComponentAsRefTo(this, ref, owner);\\n      }\\n      this._rootNodeID = rootID;\\n      this._lifeCycleState = ComponentLifeCycle.MOUNTED;\\n      this._mountDepth = mountDepth;\\n      // Effectively: return '';\\n    },\\n\\n    /**\\n     * Releases any resources allocated by `mountComponent`.\\n     *\\n     * NOTE: This does not remove any nodes from the DOM.\\n     *\\n     * Subclasses that override this method should make sure to invoke\\n     * `ReactComponent.Mixin.unmountComponent.call(this)`.\\n     *\\n     * @internal\\n     */\\n    unmountComponent: function() {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        this.isMounted(),\\n        'unmountComponent(): Can only unmount a mounted component.'\\n      ) : invariant(this.isMounted()));\\n      var ref = this._currentElement.ref;\\n      if (ref != null) {\\n        ReactOwner.removeComponentAsRefFrom(this, ref, this._owner);\\n      }\\n      unmountIDFromEnvironment(this._rootNodeID);\\n      this._rootNodeID = null;\\n      this._lifeCycleState = ComponentLifeCycle.UNMOUNTED;\\n    },\\n\\n    /**\\n     * Given a new instance of this component, updates the rendered DOM nodes\\n     * as if that instance was rendered instead.\\n     *\\n     * Subclasses that override this method should make sure to invoke\\n     * `ReactComponent.Mixin.receiveComponent.call(this, ...)`.\\n     *\\n     * @param {object} nextComponent Next set of properties.\\n     * @param {ReactReconcileTransaction} transaction\\n     * @internal\\n     */\\n    receiveComponent: function(nextElement, transaction) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        this.isMounted(),\\n        'receiveComponent(...): Can only update a mounted component.'\\n      ) : invariant(this.isMounted()));\\n      this._pendingElement = nextElement;\\n      this.performUpdateIfNecessary(transaction);\\n    },\\n\\n    /**\\n     * If `_pendingElement` is set, update the component.\\n     *\\n     * @param {ReactReconcileTransaction} transaction\\n     * @internal\\n     */\\n    performUpdateIfNecessary: function(transaction) {\\n      if (this._pendingElement == null) {\\n        return;\\n      }\\n      var prevElement = this._currentElement;\\n      var nextElement = this._pendingElement;\\n      this._currentElement = nextElement;\\n      this.props = nextElement.props;\\n      this._owner = nextElement._owner;\\n      this._pendingElement = null;\\n      this.updateComponent(transaction, prevElement);\\n    },\\n\\n    /**\\n     * Updates the component's currently mounted representation.\\n     *\\n     * @param {ReactReconcileTransaction} transaction\\n     * @param {object} prevElement\\n     * @internal\\n     */\\n    updateComponent: function(transaction, prevElement) {\\n      var nextElement = this._currentElement;\\n\\n      // If either the owner or a `ref` has changed, make sure the newest owner\\n      // has stored a reference to `this`, and the previous owner (if different)\\n      // has forgotten the reference to `this`. We use the element instead\\n      // of the public this.props because the post processing cannot determine\\n      // a ref. The ref conceptually lives on the element.\\n\\n      // TODO: Should this even be possible? The owner cannot change because\\n      // it's forbidden by shouldUpdateReactComponent. The ref can change\\n      // if you swap the keys of but not the refs. Reconsider where this check\\n      // is made. It probably belongs where the key checking and\\n      // instantiateReactComponent is done.\\n\\n      if (nextElement._owner !== prevElement._owner ||\\n          nextElement.ref !== prevElement.ref) {\\n        if (prevElement.ref != null) {\\n          ReactOwner.removeComponentAsRefFrom(\\n            this, prevElement.ref, prevElement._owner\\n          );\\n        }\\n        // Correct, even if the owner is the same, and only the ref has changed.\\n        if (nextElement.ref != null) {\\n          ReactOwner.addComponentAsRefTo(\\n            this,\\n            nextElement.ref,\\n            nextElement._owner\\n          );\\n        }\\n      }\\n    },\\n\\n    /**\\n     * Mounts this component and inserts it into the DOM.\\n     *\\n     * @param {string} rootID DOM ID of the root node.\\n     * @param {DOMElement} container DOM element to mount into.\\n     * @param {boolean} shouldReuseMarkup If true, do not insert markup\\n     * @final\\n     * @internal\\n     * @see {ReactMount.render}\\n     */\\n    mountComponentIntoNode: function(rootID, container, shouldReuseMarkup) {\\n      var transaction = ReactUpdates.ReactReconcileTransaction.getPooled();\\n      transaction.perform(\\n        this._mountComponentIntoNode,\\n        this,\\n        rootID,\\n        container,\\n        transaction,\\n        shouldReuseMarkup\\n      );\\n      ReactUpdates.ReactReconcileTransaction.release(transaction);\\n    },\\n\\n    /**\\n     * @param {string} rootID DOM ID of the root node.\\n     * @param {DOMElement} container DOM element to mount into.\\n     * @param {ReactReconcileTransaction} transaction\\n     * @param {boolean} shouldReuseMarkup If true, do not insert markup\\n     * @final\\n     * @private\\n     */\\n    _mountComponentIntoNode: function(\\n        rootID,\\n        container,\\n        transaction,\\n        shouldReuseMarkup) {\\n      var markup = this.mountComponent(rootID, transaction, 0);\\n      mountImageIntoNode(markup, container, shouldReuseMarkup);\\n    },\\n\\n    /**\\n     * Checks if this component is owned by the supplied `owner` component.\\n     *\\n     * @param {ReactComponent} owner Component to check.\\n     * @return {boolean} True if `owners` owns this component.\\n     * @final\\n     * @internal\\n     */\\n    isOwnedBy: function(owner) {\\n      return this._owner === owner;\\n    },\\n\\n    /**\\n     * Gets another component, that shares the same owner as this one, by ref.\\n     *\\n     * @param {string} ref of a sibling Component.\\n     * @return {?ReactComponent} the actual sibling Component.\\n     * @final\\n     * @internal\\n     */\\n    getSiblingByRef: function(ref) {\\n      var owner = this._owner;\\n      if (!owner || !owner.refs) {\\n        return null;\\n      }\\n      return owner.refs[ref];\\n    }\\n  }\\n};\\n\\nmodule.exports = ReactComponent;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactComponent.js\\n ** module id = 23\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactComponent.js?\");\n\n/***/ },\n/* 24 */\n/*!***********************************!*\\\n  !*** ./~/react/lib/ReactOwner.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactOwner\\n */\\n\\n\\\"use strict\\\";\\n\\nvar emptyObject = __webpack_require__(/*! ./emptyObject */ 25);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * ReactOwners are capable of storing references to owned components.\\n *\\n * All components are capable of //being// referenced by owner components, but\\n * only ReactOwner components are capable of //referencing// owned components.\\n * The named reference is known as a \\\"ref\\\".\\n *\\n * Refs are available when mounted and updated during reconciliation.\\n *\\n *   var MyComponent = React.createClass({\\n *     render: function() {\\n *       return (\\n *         <div onClick={this.handleClick}>\\n *           <CustomComponent ref=\\\"custom\\\" />\\n *         </div>\\n *       );\\n *     },\\n *     handleClick: function() {\\n *       this.refs.custom.handleClick();\\n *     },\\n *     componentDidMount: function() {\\n *       this.refs.custom.initialize();\\n *     }\\n *   });\\n *\\n * Refs should rarely be used. When refs are used, they should only be done to\\n * control data that is not handled by React's data flow.\\n *\\n * @class ReactOwner\\n */\\nvar ReactOwner = {\\n\\n  /**\\n   * @param {?object} object\\n   * @return {boolean} True if `object` is a valid owner.\\n   * @final\\n   */\\n  isValidOwner: function(object) {\\n    return !!(\\n      object &&\\n      typeof object.attachRef === 'function' &&\\n      typeof object.detachRef === 'function'\\n    );\\n  },\\n\\n  /**\\n   * Adds a component by ref to an owner component.\\n   *\\n   * @param {ReactComponent} component Component to reference.\\n   * @param {string} ref Name by which to refer to the component.\\n   * @param {ReactOwner} owner Component on which to record the ref.\\n   * @final\\n   * @internal\\n   */\\n  addComponentAsRefTo: function(component, ref, owner) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      ReactOwner.isValidOwner(owner),\\n      'addComponentAsRefTo(...): Only a ReactOwner can have refs. This ' +\\n      'usually means that you\\\\'re trying to add a ref to a component that ' +\\n      'doesn\\\\'t have an owner (that is, was not created inside of another ' +\\n      'component\\\\'s `render` method). Try rendering this component inside of ' +\\n      'a new top-level component which will hold the ref.'\\n    ) : invariant(ReactOwner.isValidOwner(owner)));\\n    owner.attachRef(ref, component);\\n  },\\n\\n  /**\\n   * Removes a component by ref from an owner component.\\n   *\\n   * @param {ReactComponent} component Component to dereference.\\n   * @param {string} ref Name of the ref to remove.\\n   * @param {ReactOwner} owner Component on which the ref is recorded.\\n   * @final\\n   * @internal\\n   */\\n  removeComponentAsRefFrom: function(component, ref, owner) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      ReactOwner.isValidOwner(owner),\\n      'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. This ' +\\n      'usually means that you\\\\'re trying to remove a ref to a component that ' +\\n      'doesn\\\\'t have an owner (that is, was not created inside of another ' +\\n      'component\\\\'s `render` method). Try rendering this component inside of ' +\\n      'a new top-level component which will hold the ref.'\\n    ) : invariant(ReactOwner.isValidOwner(owner)));\\n    // Check that `component` is still the current ref because we do not want to\\n    // detach the ref if another component stole it.\\n    if (owner.refs[ref] === component) {\\n      owner.detachRef(ref);\\n    }\\n  },\\n\\n  /**\\n   * A ReactComponent must mix this in to have refs.\\n   *\\n   * @lends {ReactOwner.prototype}\\n   */\\n  Mixin: {\\n\\n    construct: function() {\\n      this.refs = emptyObject;\\n    },\\n\\n    /**\\n     * Lazily allocates the refs object and stores `component` as `ref`.\\n     *\\n     * @param {string} ref Reference name.\\n     * @param {component} component Component to store as `ref`.\\n     * @final\\n     * @private\\n     */\\n    attachRef: function(ref, component) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        component.isOwnedBy(this),\\n        'attachRef(%s, ...): Only a component\\\\'s owner can store a ref to it.',\\n        ref\\n      ) : invariant(component.isOwnedBy(this)));\\n      var refs = this.refs === emptyObject ? (this.refs = {}) : this.refs;\\n      refs[ref] = component;\\n    },\\n\\n    /**\\n     * Detaches a reference name.\\n     *\\n     * @param {string} ref Name to dereference.\\n     * @final\\n     * @private\\n     */\\n    detachRef: function(ref) {\\n      delete this.refs[ref];\\n    }\\n\\n  }\\n\\n};\\n\\nmodule.exports = ReactOwner;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactOwner.js\\n ** module id = 24\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactOwner.js?\");\n\n/***/ },\n/* 25 */\n/*!************************************!*\\\n  !*** ./~/react/lib/emptyObject.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule emptyObject\\n */\\n\\n\\\"use strict\\\";\\n\\nvar emptyObject = {};\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  Object.freeze(emptyObject);\\n}\\n\\nmodule.exports = emptyObject;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/emptyObject.js\\n ** module id = 25\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/emptyObject.js?\");\n\n/***/ },\n/* 26 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/ReactUpdates.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactUpdates\\n */\\n\\n\\\"use strict\\\";\\n\\nvar CallbackQueue = __webpack_require__(/*! ./CallbackQueue */ 28);\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 17);\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 22);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\nvar Transaction = __webpack_require__(/*! ./Transaction */ 27);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar dirtyComponents = [];\\nvar asapCallbackQueue = CallbackQueue.getPooled();\\nvar asapEnqueued = false;\\n\\nvar batchingStrategy = null;\\n\\nfunction ensureInjected() {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    ReactUpdates.ReactReconcileTransaction && batchingStrategy,\\n    'ReactUpdates: must inject a reconcile transaction class and batching ' +\\n    'strategy'\\n  ) : invariant(ReactUpdates.ReactReconcileTransaction && batchingStrategy));\\n}\\n\\nvar NESTED_UPDATES = {\\n  initialize: function() {\\n    this.dirtyComponentsLength = dirtyComponents.length;\\n  },\\n  close: function() {\\n    if (this.dirtyComponentsLength !== dirtyComponents.length) {\\n      // Additional updates were enqueued by componentDidUpdate handlers or\\n      // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run\\n      // these new updates so that if A's componentDidUpdate calls setState on\\n      // B, B will update before the callback A's updater provided when calling\\n      // setState.\\n      dirtyComponents.splice(0, this.dirtyComponentsLength);\\n      flushBatchedUpdates();\\n    } else {\\n      dirtyComponents.length = 0;\\n    }\\n  }\\n};\\n\\nvar UPDATE_QUEUEING = {\\n  initialize: function() {\\n    this.callbackQueue.reset();\\n  },\\n  close: function() {\\n    this.callbackQueue.notifyAll();\\n  }\\n};\\n\\nvar TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];\\n\\nfunction ReactUpdatesFlushTransaction() {\\n  this.reinitializeTransaction();\\n  this.dirtyComponentsLength = null;\\n  this.callbackQueue = CallbackQueue.getPooled();\\n  this.reconcileTransaction =\\n    ReactUpdates.ReactReconcileTransaction.getPooled();\\n}\\n\\nassign(\\n  ReactUpdatesFlushTransaction.prototype,\\n  Transaction.Mixin, {\\n  getTransactionWrappers: function() {\\n    return TRANSACTION_WRAPPERS;\\n  },\\n\\n  destructor: function() {\\n    this.dirtyComponentsLength = null;\\n    CallbackQueue.release(this.callbackQueue);\\n    this.callbackQueue = null;\\n    ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);\\n    this.reconcileTransaction = null;\\n  },\\n\\n  perform: function(method, scope, a) {\\n    // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`\\n    // with this transaction's wrappers around it.\\n    return Transaction.Mixin.perform.call(\\n      this,\\n      this.reconcileTransaction.perform,\\n      this.reconcileTransaction,\\n      method,\\n      scope,\\n      a\\n    );\\n  }\\n});\\n\\nPooledClass.addPoolingTo(ReactUpdatesFlushTransaction);\\n\\nfunction batchedUpdates(callback, a, b) {\\n  ensureInjected();\\n  batchingStrategy.batchedUpdates(callback, a, b);\\n}\\n\\n/**\\n * Array comparator for ReactComponents by owner depth\\n *\\n * @param {ReactComponent} c1 first component you're comparing\\n * @param {ReactComponent} c2 second component you're comparing\\n * @return {number} Return value usable by Array.prototype.sort().\\n */\\nfunction mountDepthComparator(c1, c2) {\\n  return c1._mountDepth - c2._mountDepth;\\n}\\n\\nfunction runBatchedUpdates(transaction) {\\n  var len = transaction.dirtyComponentsLength;\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    len === dirtyComponents.length,\\n    'Expected flush transaction\\\\'s stored dirty-components length (%s) to ' +\\n    'match dirty-components array length (%s).',\\n    len,\\n    dirtyComponents.length\\n  ) : invariant(len === dirtyComponents.length));\\n\\n  // Since reconciling a component higher in the owner hierarchy usually (not\\n  // always -- see shouldComponentUpdate()) will reconcile children, reconcile\\n  // them before their children by sorting the array.\\n  dirtyComponents.sort(mountDepthComparator);\\n\\n  for (var i = 0; i < len; i++) {\\n    // If a component is unmounted before pending changes apply, ignore them\\n    // TODO: Queue unmounts in the same list to avoid this happening at all\\n    var component = dirtyComponents[i];\\n    if (component.isMounted()) {\\n      // If performUpdateIfNecessary happens to enqueue any new updates, we\\n      // shouldn't execute the callbacks until the next render happens, so\\n      // stash the callbacks first\\n      var callbacks = component._pendingCallbacks;\\n      component._pendingCallbacks = null;\\n      component.performUpdateIfNecessary(transaction.reconcileTransaction);\\n\\n      if (callbacks) {\\n        for (var j = 0; j < callbacks.length; j++) {\\n          transaction.callbackQueue.enqueue(\\n            callbacks[j],\\n            component\\n          );\\n        }\\n      }\\n    }\\n  }\\n}\\n\\nvar flushBatchedUpdates = ReactPerf.measure(\\n  'ReactUpdates',\\n  'flushBatchedUpdates',\\n  function() {\\n    // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents\\n    // array and perform any updates enqueued by mount-ready handlers (i.e.,\\n    // componentDidUpdate) but we need to check here too in order to catch\\n    // updates enqueued by setState callbacks and asap calls.\\n    while (dirtyComponents.length || asapEnqueued) {\\n      if (dirtyComponents.length) {\\n        var transaction = ReactUpdatesFlushTransaction.getPooled();\\n        transaction.perform(runBatchedUpdates, null, transaction);\\n        ReactUpdatesFlushTransaction.release(transaction);\\n      }\\n\\n      if (asapEnqueued) {\\n        asapEnqueued = false;\\n        var queue = asapCallbackQueue;\\n        asapCallbackQueue = CallbackQueue.getPooled();\\n        queue.notifyAll();\\n        CallbackQueue.release(queue);\\n      }\\n    }\\n  }\\n);\\n\\n/**\\n * Mark a component as needing a rerender, adding an optional callback to a\\n * list of functions which will be executed once the rerender occurs.\\n */\\nfunction enqueueUpdate(component, callback) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    !callback || typeof callback === \\\"function\\\",\\n    'enqueueUpdate(...): You called `setProps`, `replaceProps`, ' +\\n    '`setState`, `replaceState`, or `forceUpdate` with a callback that ' +\\n    'isn\\\\'t callable.'\\n  ) : invariant(!callback || typeof callback === \\\"function\\\"));\\n  ensureInjected();\\n\\n  // Various parts of our code (such as ReactCompositeComponent's\\n  // _renderValidatedComponent) assume that calls to render aren't nested;\\n  // verify that that's the case. (This is called by each top-level update\\n  // function, like setProps, setState, forceUpdate, etc.; creation and\\n  // destruction of top-level components is guarded in ReactMount.)\\n  (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n    ReactCurrentOwner.current == null,\\n    'enqueueUpdate(): Render methods should be a pure function of props ' +\\n    'and state; triggering nested component updates from render is not ' +\\n    'allowed. If necessary, trigger nested updates in ' +\\n    'componentDidUpdate.'\\n  ) : null);\\n\\n  if (!batchingStrategy.isBatchingUpdates) {\\n    batchingStrategy.batchedUpdates(enqueueUpdate, component, callback);\\n    return;\\n  }\\n\\n  dirtyComponents.push(component);\\n\\n  if (callback) {\\n    if (component._pendingCallbacks) {\\n      component._pendingCallbacks.push(callback);\\n    } else {\\n      component._pendingCallbacks = [callback];\\n    }\\n  }\\n}\\n\\n/**\\n * Enqueue a callback to be run at the end of the current batching cycle. Throws\\n * if no updates are currently being performed.\\n */\\nfunction asap(callback, context) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    batchingStrategy.isBatchingUpdates,\\n    'ReactUpdates.asap: Can\\\\'t enqueue an asap callback in a context where' +\\n    'updates are not being batched.'\\n  ) : invariant(batchingStrategy.isBatchingUpdates));\\n  asapCallbackQueue.enqueue(callback, context);\\n  asapEnqueued = true;\\n}\\n\\nvar ReactUpdatesInjection = {\\n  injectReconcileTransaction: function(ReconcileTransaction) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      ReconcileTransaction,\\n      'ReactUpdates: must provide a reconcile transaction class'\\n    ) : invariant(ReconcileTransaction));\\n    ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;\\n  },\\n\\n  injectBatchingStrategy: function(_batchingStrategy) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      _batchingStrategy,\\n      'ReactUpdates: must provide a batching strategy'\\n    ) : invariant(_batchingStrategy));\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      typeof _batchingStrategy.batchedUpdates === 'function',\\n      'ReactUpdates: must provide a batchedUpdates() function'\\n    ) : invariant(typeof _batchingStrategy.batchedUpdates === 'function'));\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      typeof _batchingStrategy.isBatchingUpdates === 'boolean',\\n      'ReactUpdates: must provide an isBatchingUpdates boolean attribute'\\n    ) : invariant(typeof _batchingStrategy.isBatchingUpdates === 'boolean'));\\n    batchingStrategy = _batchingStrategy;\\n  }\\n};\\n\\nvar ReactUpdates = {\\n  /**\\n   * React references `ReactReconcileTransaction` using this property in order\\n   * to allow dependency injection.\\n   *\\n   * @internal\\n   */\\n  ReactReconcileTransaction: null,\\n\\n  batchedUpdates: batchedUpdates,\\n  enqueueUpdate: enqueueUpdate,\\n  flushBatchedUpdates: flushBatchedUpdates,\\n  injection: ReactUpdatesInjection,\\n  asap: asap\\n};\\n\\nmodule.exports = ReactUpdates;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactUpdates.js\\n ** module id = 26\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactUpdates.js?\");\n\n/***/ },\n/* 27 */\n/*!************************************!*\\\n  !*** ./~/react/lib/Transaction.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule Transaction\\n */\\n\\n\\\"use strict\\\";\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * `Transaction` creates a black box that is able to wrap any method such that\\n * certain invariants are maintained before and after the method is invoked\\n * (Even if an exception is thrown while invoking the wrapped method). Whoever\\n * instantiates a transaction can provide enforcers of the invariants at\\n * creation time. The `Transaction` class itself will supply one additional\\n * automatic invariant for you - the invariant that any transaction instance\\n * should not be run while it is already being run. You would typically create a\\n * single instance of a `Transaction` for reuse multiple times, that potentially\\n * is used to wrap several different methods. Wrappers are extremely simple -\\n * they only require implementing two methods.\\n *\\n * <pre>\\n *                       wrappers (injected at creation time)\\n *                                      +        +\\n *                                      |        |\\n *                    +-----------------|--------|--------------+\\n *                    |                 v        |              |\\n *                    |      +---------------+   |              |\\n *                    |   +--|    wrapper1   |---|----+         |\\n *                    |   |  +---------------+   v    |         |\\n *                    |   |          +-------------+  |         |\\n *                    |   |     +----|   wrapper2  |--------+   |\\n *                    |   |     |    +-------------+  |     |   |\\n *                    |   |     |                     |     |   |\\n *                    |   v     v                     v     v   | wrapper\\n *                    | +---+ +---+   +---------+   +---+ +---+ | invariants\\n * perform(anyMethod) | |   | |   |   |         |   |   | |   | | maintained\\n * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->\\n *                    | |   | |   |   |         |   |   | |   | |\\n *                    | |   | |   |   |         |   |   | |   | |\\n *                    | |   | |   |   |         |   |   | |   | |\\n *                    | +---+ +---+   +---------+   +---+ +---+ |\\n *                    |  initialize                    close    |\\n *                    +-----------------------------------------+\\n * </pre>\\n *\\n * Use cases:\\n * - Preserving the input selection ranges before/after reconciliation.\\n *   Restoring selection even in the event of an unexpected error.\\n * - Deactivating events while rearranging the DOM, preventing blurs/focuses,\\n *   while guaranteeing that afterwards, the event system is reactivated.\\n * - Flushing a queue of collected DOM mutations to the main UI thread after a\\n *   reconciliation takes place in a worker thread.\\n * - Invoking any collected `componentDidUpdate` callbacks after rendering new\\n *   content.\\n * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue\\n *   to preserve the `scrollTop` (an automatic scroll aware DOM).\\n * - (Future use case): Layout calculations before and after DOM upates.\\n *\\n * Transactional plugin API:\\n * - A module that has an `initialize` method that returns any precomputation.\\n * - and a `close` method that accepts the precomputation. `close` is invoked\\n *   when the wrapped process is completed, or has failed.\\n *\\n * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules\\n * that implement `initialize` and `close`.\\n * @return {Transaction} Single transaction for reuse in thread.\\n *\\n * @class Transaction\\n */\\nvar Mixin = {\\n  /**\\n   * Sets up this instance so that it is prepared for collecting metrics. Does\\n   * so such that this setup method may be used on an instance that is already\\n   * initialized, in a way that does not consume additional memory upon reuse.\\n   * That can be useful if you decide to make your subclass of this mixin a\\n   * \\\"PooledClass\\\".\\n   */\\n  reinitializeTransaction: function() {\\n    this.transactionWrappers = this.getTransactionWrappers();\\n    if (!this.wrapperInitData) {\\n      this.wrapperInitData = [];\\n    } else {\\n      this.wrapperInitData.length = 0;\\n    }\\n    this._isInTransaction = false;\\n  },\\n\\n  _isInTransaction: false,\\n\\n  /**\\n   * @abstract\\n   * @return {Array<TransactionWrapper>} Array of transaction wrappers.\\n   */\\n  getTransactionWrappers: null,\\n\\n  isInTransaction: function() {\\n    return !!this._isInTransaction;\\n  },\\n\\n  /**\\n   * Executes the function within a safety window. Use this for the top level\\n   * methods that result in large amounts of computation/mutations that would\\n   * need to be safety checked.\\n   *\\n   * @param {function} method Member of scope to call.\\n   * @param {Object} scope Scope to invoke from.\\n   * @param {Object?=} args... Arguments to pass to the method (optional).\\n   *                           Helps prevent need to bind in many cases.\\n   * @return Return value from `method`.\\n   */\\n  perform: function(method, scope, a, b, c, d, e, f) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      !this.isInTransaction(),\\n      'Transaction.perform(...): Cannot initialize a transaction when there ' +\\n      'is already an outstanding transaction.'\\n    ) : invariant(!this.isInTransaction()));\\n    var errorThrown;\\n    var ret;\\n    try {\\n      this._isInTransaction = true;\\n      // Catching errors makes debugging more difficult, so we start with\\n      // errorThrown set to true before setting it to false after calling\\n      // close -- if it's still set to true in the finally block, it means\\n      // one of these calls threw.\\n      errorThrown = true;\\n      this.initializeAll(0);\\n      ret = method.call(scope, a, b, c, d, e, f);\\n      errorThrown = false;\\n    } finally {\\n      try {\\n        if (errorThrown) {\\n          // If `method` throws, prefer to show that stack trace over any thrown\\n          // by invoking `closeAll`.\\n          try {\\n            this.closeAll(0);\\n          } catch (err) {\\n          }\\n        } else {\\n          // Since `method` didn't throw, we don't want to silence the exception\\n          // here.\\n          this.closeAll(0);\\n        }\\n      } finally {\\n        this._isInTransaction = false;\\n      }\\n    }\\n    return ret;\\n  },\\n\\n  initializeAll: function(startIndex) {\\n    var transactionWrappers = this.transactionWrappers;\\n    for (var i = startIndex; i < transactionWrappers.length; i++) {\\n      var wrapper = transactionWrappers[i];\\n      try {\\n        // Catching errors makes debugging more difficult, so we start with the\\n        // OBSERVED_ERROR state before overwriting it with the real return value\\n        // of initialize -- if it's still set to OBSERVED_ERROR in the finally\\n        // block, it means wrapper.initialize threw.\\n        this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;\\n        this.wrapperInitData[i] = wrapper.initialize ?\\n          wrapper.initialize.call(this) :\\n          null;\\n      } finally {\\n        if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) {\\n          // The initializer for wrapper i threw an error; initialize the\\n          // remaining wrappers but silence any exceptions from them to ensure\\n          // that the first error is the one to bubble up.\\n          try {\\n            this.initializeAll(i + 1);\\n          } catch (err) {\\n          }\\n        }\\n      }\\n    }\\n  },\\n\\n  /**\\n   * Invokes each of `this.transactionWrappers.close[i]` functions, passing into\\n   * them the respective return values of `this.transactionWrappers.init[i]`\\n   * (`close`rs that correspond to initializers that failed will not be\\n   * invoked).\\n   */\\n  closeAll: function(startIndex) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      this.isInTransaction(),\\n      'Transaction.closeAll(): Cannot close transaction when none are open.'\\n    ) : invariant(this.isInTransaction()));\\n    var transactionWrappers = this.transactionWrappers;\\n    for (var i = startIndex; i < transactionWrappers.length; i++) {\\n      var wrapper = transactionWrappers[i];\\n      var initData = this.wrapperInitData[i];\\n      var errorThrown;\\n      try {\\n        // Catching errors makes debugging more difficult, so we start with\\n        // errorThrown set to true before setting it to false after calling\\n        // close -- if it's still set to true in the finally block, it means\\n        // wrapper.close threw.\\n        errorThrown = true;\\n        if (initData !== Transaction.OBSERVED_ERROR) {\\n          wrapper.close && wrapper.close.call(this, initData);\\n        }\\n        errorThrown = false;\\n      } finally {\\n        if (errorThrown) {\\n          // The closer for wrapper i threw an error; close the remaining\\n          // wrappers but silence any exceptions from them to ensure that the\\n          // first error is the one to bubble up.\\n          try {\\n            this.closeAll(i + 1);\\n          } catch (e) {\\n          }\\n        }\\n      }\\n    }\\n    this.wrapperInitData.length = 0;\\n  }\\n};\\n\\nvar Transaction = {\\n\\n  Mixin: Mixin,\\n\\n  /**\\n   * Token to look for to determine if an error occured.\\n   */\\n  OBSERVED_ERROR: {}\\n\\n};\\n\\nmodule.exports = Transaction;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/Transaction.js\\n ** module id = 27\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/Transaction.js?\");\n\n/***/ },\n/* 28 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/CallbackQueue.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule CallbackQueue\\n */\\n\\n\\\"use strict\\\";\\n\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 17);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * A specialized pseudo-event module to help keep track of components waiting to\\n * be notified when their DOM representations are available for use.\\n *\\n * This implements `PooledClass`, so you should never need to instantiate this.\\n * Instead, use `CallbackQueue.getPooled()`.\\n *\\n * @class ReactMountReady\\n * @implements PooledClass\\n * @internal\\n */\\nfunction CallbackQueue() {\\n  this._callbacks = null;\\n  this._contexts = null;\\n}\\n\\nassign(CallbackQueue.prototype, {\\n\\n  /**\\n   * Enqueues a callback to be invoked when `notifyAll` is invoked.\\n   *\\n   * @param {function} callback Invoked when `notifyAll` is invoked.\\n   * @param {?object} context Context to call `callback` with.\\n   * @internal\\n   */\\n  enqueue: function(callback, context) {\\n    this._callbacks = this._callbacks || [];\\n    this._contexts = this._contexts || [];\\n    this._callbacks.push(callback);\\n    this._contexts.push(context);\\n  },\\n\\n  /**\\n   * Invokes all enqueued callbacks and clears the queue. This is invoked after\\n   * the DOM representation of a component has been created or updated.\\n   *\\n   * @internal\\n   */\\n  notifyAll: function() {\\n    var callbacks = this._callbacks;\\n    var contexts = this._contexts;\\n    if (callbacks) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        callbacks.length === contexts.length,\\n        \\\"Mismatched list of contexts in callback queue\\\"\\n      ) : invariant(callbacks.length === contexts.length));\\n      this._callbacks = null;\\n      this._contexts = null;\\n      for (var i = 0, l = callbacks.length; i < l; i++) {\\n        callbacks[i].call(contexts[i]);\\n      }\\n      callbacks.length = 0;\\n      contexts.length = 0;\\n    }\\n  },\\n\\n  /**\\n   * Resets the internal queue.\\n   *\\n   * @internal\\n   */\\n  reset: function() {\\n    this._callbacks = null;\\n    this._contexts = null;\\n  },\\n\\n  /**\\n   * `PooledClass` looks for this.\\n   */\\n  destructor: function() {\\n    this.reset();\\n  }\\n\\n});\\n\\nPooledClass.addPoolingTo(CallbackQueue);\\n\\nmodule.exports = CallbackQueue;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/CallbackQueue.js\\n ** module id = 28\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/CallbackQueue.js?\");\n\n/***/ },\n/* 29 */\n/*!**********************************!*\\\n  !*** ./~/react/lib/ReactPerf.js ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactPerf\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * ReactPerf is a general AOP system designed to measure performance. This\\n * module only has the hooks: see ReactDefaultPerf for the analysis tool.\\n */\\nvar ReactPerf = {\\n  /**\\n   * Boolean to enable/disable measurement. Set to false by default to prevent\\n   * accidental logging and perf loss.\\n   */\\n  enableMeasure: false,\\n\\n  /**\\n   * Holds onto the measure function in use. By default, don't measure\\n   * anything, but we'll override this if we inject a measure function.\\n   */\\n  storedMeasure: _noMeasure,\\n\\n  /**\\n   * Use this to wrap methods you want to measure. Zero overhead in production.\\n   *\\n   * @param {string} objName\\n   * @param {string} fnName\\n   * @param {function} func\\n   * @return {function}\\n   */\\n  measure: function(objName, fnName, func) {\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      var measuredFunc = null;\\n      var wrapper = function() {\\n        if (ReactPerf.enableMeasure) {\\n          if (!measuredFunc) {\\n            measuredFunc = ReactPerf.storedMeasure(objName, fnName, func);\\n          }\\n          return measuredFunc.apply(this, arguments);\\n        }\\n        return func.apply(this, arguments);\\n      };\\n      wrapper.displayName = objName + '_' + fnName;\\n      return wrapper;\\n    }\\n    return func;\\n  },\\n\\n  injection: {\\n    /**\\n     * @param {function} measure\\n     */\\n    injectMeasure: function(measure) {\\n      ReactPerf.storedMeasure = measure;\\n    }\\n  }\\n};\\n\\n/**\\n * Simply passes through the measured function, without measuring it.\\n *\\n * @param {string} objName\\n * @param {string} fnName\\n * @param {function} func\\n * @return {function}\\n */\\nfunction _noMeasure(objName, fnName, func) {\\n  return func;\\n}\\n\\nmodule.exports = ReactPerf;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactPerf.js\\n ** module id = 29\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactPerf.js?\");\n\n/***/ },\n/* 30 */\n/*!************************************************!*\\\n  !*** ./~/react/lib/ReactCompositeComponent.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactCompositeComponent\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 23);\\nvar ReactContext = __webpack_require__(/*! ./ReactContext */ 20);\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 22);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactElementValidator = __webpack_require__(/*! ./ReactElementValidator */ 31);\\nvar ReactEmptyComponent = __webpack_require__(/*! ./ReactEmptyComponent */ 34);\\nvar ReactErrorUtils = __webpack_require__(/*! ./ReactErrorUtils */ 35);\\nvar ReactLegacyElement = __webpack_require__(/*! ./ReactLegacyElement */ 36);\\nvar ReactOwner = __webpack_require__(/*! ./ReactOwner */ 24);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\nvar ReactPropTransferer = __webpack_require__(/*! ./ReactPropTransferer */ 37);\\nvar ReactPropTypeLocations = __webpack_require__(/*! ./ReactPropTypeLocations */ 32);\\nvar ReactPropTypeLocationNames = __webpack_require__(/*! ./ReactPropTypeLocationNames */ 39);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar instantiateReactComponent = __webpack_require__(/*! ./instantiateReactComponent */ 40);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar keyMirror = __webpack_require__(/*! ./keyMirror */ 15);\\nvar keyOf = __webpack_require__(/*! ./keyOf */ 42);\\nvar monitorCodeUse = __webpack_require__(/*! ./monitorCodeUse */ 33);\\nvar mapObject = __webpack_require__(/*! ./mapObject */ 43);\\nvar shouldUpdateReactComponent = __webpack_require__(/*! ./shouldUpdateReactComponent */ 44);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar MIXINS_KEY = keyOf({mixins: null});\\n\\n/**\\n * Policies that describe methods in `ReactCompositeComponentInterface`.\\n */\\nvar SpecPolicy = keyMirror({\\n  /**\\n   * These methods may be defined only once by the class specification or mixin.\\n   */\\n  DEFINE_ONCE: null,\\n  /**\\n   * These methods may be defined by both the class specification and mixins.\\n   * Subsequent definitions will be chained. These methods must return void.\\n   */\\n  DEFINE_MANY: null,\\n  /**\\n   * These methods are overriding the base ReactCompositeComponent class.\\n   */\\n  OVERRIDE_BASE: null,\\n  /**\\n   * These methods are similar to DEFINE_MANY, except we assume they return\\n   * objects. We try to merge the keys of the return values of all the mixed in\\n   * functions. If there is a key conflict we throw.\\n   */\\n  DEFINE_MANY_MERGED: null\\n});\\n\\n\\nvar injectedMixins = [];\\n\\n/**\\n * Composite components are higher-level components that compose other composite\\n * or native components.\\n *\\n * To create a new type of `ReactCompositeComponent`, pass a specification of\\n * your new class to `React.createClass`. The only requirement of your class\\n * specification is that you implement a `render` method.\\n *\\n *   var MyComponent = React.createClass({\\n *     render: function() {\\n *       return <div>Hello World</div>;\\n *     }\\n *   });\\n *\\n * The class specification supports a specific protocol of methods that have\\n * special meaning (e.g. `render`). See `ReactCompositeComponentInterface` for\\n * more the comprehensive protocol. Any other properties and methods in the\\n * class specification will available on the prototype.\\n *\\n * @interface ReactCompositeComponentInterface\\n * @internal\\n */\\nvar ReactCompositeComponentInterface = {\\n\\n  /**\\n   * An array of Mixin objects to include when defining your component.\\n   *\\n   * @type {array}\\n   * @optional\\n   */\\n  mixins: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * An object containing properties and methods that should be defined on\\n   * the component's constructor instead of its prototype (static methods).\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  statics: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * Definition of prop types for this component.\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  propTypes: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * Definition of context types for this component.\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  contextTypes: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * Definition of context types this component sets for its children.\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  childContextTypes: SpecPolicy.DEFINE_MANY,\\n\\n  // ==== Definition methods ====\\n\\n  /**\\n   * Invoked when the component is mounted. Values in the mapping will be set on\\n   * `this.props` if that prop is not specified (i.e. using an `in` check).\\n   *\\n   * This method is invoked before `getInitialState` and therefore cannot rely\\n   * on `this.state` or use `this.setState`.\\n   *\\n   * @return {object}\\n   * @optional\\n   */\\n  getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,\\n\\n  /**\\n   * Invoked once before the component is mounted. The return value will be used\\n   * as the initial value of `this.state`.\\n   *\\n   *   getInitialState: function() {\\n   *     return {\\n   *       isOn: false,\\n   *       fooBaz: new BazFoo()\\n   *     }\\n   *   }\\n   *\\n   * @return {object}\\n   * @optional\\n   */\\n  getInitialState: SpecPolicy.DEFINE_MANY_MERGED,\\n\\n  /**\\n   * @return {object}\\n   * @optional\\n   */\\n  getChildContext: SpecPolicy.DEFINE_MANY_MERGED,\\n\\n  /**\\n   * Uses props from `this.props` and state from `this.state` to render the\\n   * structure of the component.\\n   *\\n   * No guarantees are made about when or how often this method is invoked, so\\n   * it must not have side effects.\\n   *\\n   *   render: function() {\\n   *     var name = this.props.name;\\n   *     return <div>Hello, {name}!</div>;\\n   *   }\\n   *\\n   * @return {ReactComponent}\\n   * @nosideeffects\\n   * @required\\n   */\\n  render: SpecPolicy.DEFINE_ONCE,\\n\\n\\n\\n  // ==== Delegate methods ====\\n\\n  /**\\n   * Invoked when the component is initially created and about to be mounted.\\n   * This may have side effects, but any external subscriptions or data created\\n   * by this method must be cleaned up in `componentWillUnmount`.\\n   *\\n   * @optional\\n   */\\n  componentWillMount: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * Invoked when the component has been mounted and has a DOM representation.\\n   * However, there is no guarantee that the DOM node is in the document.\\n   *\\n   * Use this as an opportunity to operate on the DOM when the component has\\n   * been mounted (initialized and rendered) for the first time.\\n   *\\n   * @param {DOMElement} rootNode DOM element representing the component.\\n   * @optional\\n   */\\n  componentDidMount: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * Invoked before the component receives new props.\\n   *\\n   * Use this as an opportunity to react to a prop transition by updating the\\n   * state using `this.setState`. Current props are accessed via `this.props`.\\n   *\\n   *   componentWillReceiveProps: function(nextProps, nextContext) {\\n   *     this.setState({\\n   *       likesIncreasing: nextProps.likeCount > this.props.likeCount\\n   *     });\\n   *   }\\n   *\\n   * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\\n   * transition may cause a state change, but the opposite is not true. If you\\n   * need it, you are probably looking for `componentWillUpdate`.\\n   *\\n   * @param {object} nextProps\\n   * @optional\\n   */\\n  componentWillReceiveProps: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * Invoked while deciding if the component should be updated as a result of\\n   * receiving new props, state and/or context.\\n   *\\n   * Use this as an opportunity to `return false` when you're certain that the\\n   * transition to the new props/state/context will not require a component\\n   * update.\\n   *\\n   *   shouldComponentUpdate: function(nextProps, nextState, nextContext) {\\n   *     return !equal(nextProps, this.props) ||\\n   *       !equal(nextState, this.state) ||\\n   *       !equal(nextContext, this.context);\\n   *   }\\n   *\\n   * @param {object} nextProps\\n   * @param {?object} nextState\\n   * @param {?object} nextContext\\n   * @return {boolean} True if the component should update.\\n   * @optional\\n   */\\n  shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,\\n\\n  /**\\n   * Invoked when the component is about to update due to a transition from\\n   * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\\n   * and `nextContext`.\\n   *\\n   * Use this as an opportunity to perform preparation before an update occurs.\\n   *\\n   * NOTE: You **cannot** use `this.setState()` in this method.\\n   *\\n   * @param {object} nextProps\\n   * @param {?object} nextState\\n   * @param {?object} nextContext\\n   * @param {ReactReconcileTransaction} transaction\\n   * @optional\\n   */\\n  componentWillUpdate: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * Invoked when the component's DOM representation has been updated.\\n   *\\n   * Use this as an opportunity to operate on the DOM when the component has\\n   * been updated.\\n   *\\n   * @param {object} prevProps\\n   * @param {?object} prevState\\n   * @param {?object} prevContext\\n   * @param {DOMElement} rootNode DOM element representing the component.\\n   * @optional\\n   */\\n  componentDidUpdate: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * Invoked when the component is about to be removed from its parent and have\\n   * its DOM representation destroyed.\\n   *\\n   * Use this as an opportunity to deallocate any external resources.\\n   *\\n   * NOTE: There is no `componentDidUnmount` since your component will have been\\n   * destroyed by that point.\\n   *\\n   * @optional\\n   */\\n  componentWillUnmount: SpecPolicy.DEFINE_MANY,\\n\\n\\n\\n  // ==== Advanced methods ====\\n\\n  /**\\n   * Updates the component's currently mounted DOM representation.\\n   *\\n   * By default, this implements React's rendering and reconciliation algorithm.\\n   * Sophisticated clients may wish to override this.\\n   *\\n   * @param {ReactReconcileTransaction} transaction\\n   * @internal\\n   * @overridable\\n   */\\n  updateComponent: SpecPolicy.OVERRIDE_BASE\\n\\n};\\n\\n/**\\n * Mapping from class specification keys to special processing functions.\\n *\\n * Although these are declared like instance properties in the specification\\n * when defining classes using `React.createClass`, they are actually static\\n * and are accessible on the constructor instead of the prototype. Despite\\n * being static, they must be defined outside of the \\\"statics\\\" key under\\n * which all other static methods are defined.\\n */\\nvar RESERVED_SPEC_KEYS = {\\n  displayName: function(Constructor, displayName) {\\n    Constructor.displayName = displayName;\\n  },\\n  mixins: function(Constructor, mixins) {\\n    if (mixins) {\\n      for (var i = 0; i < mixins.length; i++) {\\n        mixSpecIntoComponent(Constructor, mixins[i]);\\n      }\\n    }\\n  },\\n  childContextTypes: function(Constructor, childContextTypes) {\\n    validateTypeDef(\\n      Constructor,\\n      childContextTypes,\\n      ReactPropTypeLocations.childContext\\n    );\\n    Constructor.childContextTypes = assign(\\n      {},\\n      Constructor.childContextTypes,\\n      childContextTypes\\n    );\\n  },\\n  contextTypes: function(Constructor, contextTypes) {\\n    validateTypeDef(\\n      Constructor,\\n      contextTypes,\\n      ReactPropTypeLocations.context\\n    );\\n    Constructor.contextTypes = assign(\\n      {},\\n      Constructor.contextTypes,\\n      contextTypes\\n    );\\n  },\\n  /**\\n   * Special case getDefaultProps which should move into statics but requires\\n   * automatic merging.\\n   */\\n  getDefaultProps: function(Constructor, getDefaultProps) {\\n    if (Constructor.getDefaultProps) {\\n      Constructor.getDefaultProps = createMergedResultFunction(\\n        Constructor.getDefaultProps,\\n        getDefaultProps\\n      );\\n    } else {\\n      Constructor.getDefaultProps = getDefaultProps;\\n    }\\n  },\\n  propTypes: function(Constructor, propTypes) {\\n    validateTypeDef(\\n      Constructor,\\n      propTypes,\\n      ReactPropTypeLocations.prop\\n    );\\n    Constructor.propTypes = assign(\\n      {},\\n      Constructor.propTypes,\\n      propTypes\\n    );\\n  },\\n  statics: function(Constructor, statics) {\\n    mixStaticSpecIntoComponent(Constructor, statics);\\n  }\\n};\\n\\nfunction getDeclarationErrorAddendum(component) {\\n  var owner = component._owner || null;\\n  if (owner && owner.constructor && owner.constructor.displayName) {\\n    return ' Check the render method of `' + owner.constructor.displayName +\\n      '`.';\\n  }\\n  return '';\\n}\\n\\nfunction validateTypeDef(Constructor, typeDef, location) {\\n  for (var propName in typeDef) {\\n    if (typeDef.hasOwnProperty(propName)) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        typeof typeDef[propName] == 'function',\\n        '%s: %s type `%s` is invalid; it must be a function, usually from ' +\\n        'React.PropTypes.',\\n        Constructor.displayName || 'ReactCompositeComponent',\\n        ReactPropTypeLocationNames[location],\\n        propName\\n      ) : invariant(typeof typeDef[propName] == 'function'));\\n    }\\n  }\\n}\\n\\nfunction validateMethodOverride(proto, name) {\\n  var specPolicy = ReactCompositeComponentInterface.hasOwnProperty(name) ?\\n    ReactCompositeComponentInterface[name] :\\n    null;\\n\\n  // Disallow overriding of base class methods unless explicitly allowed.\\n  if (ReactCompositeComponentMixin.hasOwnProperty(name)) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      specPolicy === SpecPolicy.OVERRIDE_BASE,\\n      'ReactCompositeComponentInterface: You are attempting to override ' +\\n      '`%s` from your class specification. Ensure that your method names ' +\\n      'do not overlap with React methods.',\\n      name\\n    ) : invariant(specPolicy === SpecPolicy.OVERRIDE_BASE));\\n  }\\n\\n  // Disallow defining methods more than once unless explicitly allowed.\\n  if (proto.hasOwnProperty(name)) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      specPolicy === SpecPolicy.DEFINE_MANY ||\\n      specPolicy === SpecPolicy.DEFINE_MANY_MERGED,\\n      'ReactCompositeComponentInterface: You are attempting to define ' +\\n      '`%s` on your component more than once. This conflict may be due ' +\\n      'to a mixin.',\\n      name\\n    ) : invariant(specPolicy === SpecPolicy.DEFINE_MANY ||\\n    specPolicy === SpecPolicy.DEFINE_MANY_MERGED));\\n  }\\n}\\n\\nfunction validateLifeCycleOnReplaceState(instance) {\\n  var compositeLifeCycleState = instance._compositeLifeCycleState;\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    instance.isMounted() ||\\n      compositeLifeCycleState === CompositeLifeCycle.MOUNTING,\\n    'replaceState(...): Can only update a mounted or mounting component.'\\n  ) : invariant(instance.isMounted() ||\\n    compositeLifeCycleState === CompositeLifeCycle.MOUNTING));\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    ReactCurrentOwner.current == null,\\n    'replaceState(...): Cannot update during an existing state transition ' +\\n    '(such as within `render`). Render methods should be a pure function ' +\\n    'of props and state.'\\n  ) : invariant(ReactCurrentOwner.current == null));\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(compositeLifeCycleState !== CompositeLifeCycle.UNMOUNTING,\\n    'replaceState(...): Cannot update while unmounting component. This ' +\\n    'usually means you called setState() on an unmounted component.'\\n  ) : invariant(compositeLifeCycleState !== CompositeLifeCycle.UNMOUNTING));\\n}\\n\\n/**\\n * Mixin helper which handles policy validation and reserved\\n * specification keys when building `ReactCompositeComponent` classses.\\n */\\nfunction mixSpecIntoComponent(Constructor, spec) {\\n  if (!spec) {\\n    return;\\n  }\\n\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    !ReactLegacyElement.isValidFactory(spec),\\n    'ReactCompositeComponent: You\\\\'re attempting to ' +\\n    'use a component class as a mixin. Instead, just use a regular object.'\\n  ) : invariant(!ReactLegacyElement.isValidFactory(spec)));\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    !ReactElement.isValidElement(spec),\\n    'ReactCompositeComponent: You\\\\'re attempting to ' +\\n    'use a component as a mixin. Instead, just use a regular object.'\\n  ) : invariant(!ReactElement.isValidElement(spec)));\\n\\n  var proto = Constructor.prototype;\\n\\n  // By handling mixins before any other properties, we ensure the same\\n  // chaining order is applied to methods with DEFINE_MANY policy, whether\\n  // mixins are listed before or after these methods in the spec.\\n  if (spec.hasOwnProperty(MIXINS_KEY)) {\\n    RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\\n  }\\n\\n  for (var name in spec) {\\n    if (!spec.hasOwnProperty(name)) {\\n      continue;\\n    }\\n\\n    if (name === MIXINS_KEY) {\\n      // We have already handled mixins in a special case above\\n      continue;\\n    }\\n\\n    var property = spec[name];\\n    validateMethodOverride(proto, name);\\n\\n    if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\\n      RESERVED_SPEC_KEYS[name](Constructor, property);\\n    } else {\\n      // Setup methods on prototype:\\n      // The following member methods should not be automatically bound:\\n      // 1. Expected ReactCompositeComponent methods (in the \\\"interface\\\").\\n      // 2. Overridden methods (that were mixed in).\\n      var isCompositeComponentMethod =\\n        ReactCompositeComponentInterface.hasOwnProperty(name);\\n      var isAlreadyDefined = proto.hasOwnProperty(name);\\n      var markedDontBind = property && property.__reactDontBind;\\n      var isFunction = typeof property === 'function';\\n      var shouldAutoBind =\\n        isFunction &&\\n        !isCompositeComponentMethod &&\\n        !isAlreadyDefined &&\\n        !markedDontBind;\\n\\n      if (shouldAutoBind) {\\n        if (!proto.__reactAutoBindMap) {\\n          proto.__reactAutoBindMap = {};\\n        }\\n        proto.__reactAutoBindMap[name] = property;\\n        proto[name] = property;\\n      } else {\\n        if (isAlreadyDefined) {\\n          var specPolicy = ReactCompositeComponentInterface[name];\\n\\n          // These cases should already be caught by validateMethodOverride\\n          (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n            isCompositeComponentMethod && (\\n              specPolicy === SpecPolicy.DEFINE_MANY_MERGED ||\\n              specPolicy === SpecPolicy.DEFINE_MANY\\n            ),\\n            'ReactCompositeComponent: Unexpected spec policy %s for key %s ' +\\n            'when mixing in component specs.',\\n            specPolicy,\\n            name\\n          ) : invariant(isCompositeComponentMethod && (\\n            specPolicy === SpecPolicy.DEFINE_MANY_MERGED ||\\n            specPolicy === SpecPolicy.DEFINE_MANY\\n          )));\\n\\n          // For methods which are defined more than once, call the existing\\n          // methods before calling the new property, merging if appropriate.\\n          if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) {\\n            proto[name] = createMergedResultFunction(proto[name], property);\\n          } else if (specPolicy === SpecPolicy.DEFINE_MANY) {\\n            proto[name] = createChainedFunction(proto[name], property);\\n          }\\n        } else {\\n          proto[name] = property;\\n          if (\\\"production\\\" !== process.env.NODE_ENV) {\\n            // Add verbose displayName to the function, which helps when looking\\n            // at profiling tools.\\n            if (typeof property === 'function' && spec.displayName) {\\n              proto[name].displayName = spec.displayName + '_' + name;\\n            }\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\n\\nfunction mixStaticSpecIntoComponent(Constructor, statics) {\\n  if (!statics) {\\n    return;\\n  }\\n  for (var name in statics) {\\n    var property = statics[name];\\n    if (!statics.hasOwnProperty(name)) {\\n      continue;\\n    }\\n\\n    var isReserved = name in RESERVED_SPEC_KEYS;\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      !isReserved,\\n      'ReactCompositeComponent: You are attempting to define a reserved ' +\\n      'property, `%s`, that shouldn\\\\'t be on the \\\"statics\\\" key. Define it ' +\\n      'as an instance property instead; it will still be accessible on the ' +\\n      'constructor.',\\n      name\\n    ) : invariant(!isReserved));\\n\\n    var isInherited = name in Constructor;\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      !isInherited,\\n      'ReactCompositeComponent: You are attempting to define ' +\\n      '`%s` on your component more than once. This conflict may be ' +\\n      'due to a mixin.',\\n      name\\n    ) : invariant(!isInherited));\\n    Constructor[name] = property;\\n  }\\n}\\n\\n/**\\n * Merge two objects, but throw if both contain the same key.\\n *\\n * @param {object} one The first object, which is mutated.\\n * @param {object} two The second object\\n * @return {object} one after it has been mutated to contain everything in two.\\n */\\nfunction mergeObjectsWithNoDuplicateKeys(one, two) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    one && two && typeof one === 'object' && typeof two === 'object',\\n    'mergeObjectsWithNoDuplicateKeys(): Cannot merge non-objects'\\n  ) : invariant(one && two && typeof one === 'object' && typeof two === 'object'));\\n\\n  mapObject(two, function(value, key) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      one[key] === undefined,\\n      'mergeObjectsWithNoDuplicateKeys(): ' +\\n      'Tried to merge two objects with the same key: `%s`. This conflict ' +\\n      'may be due to a mixin; in particular, this may be caused by two ' +\\n      'getInitialState() or getDefaultProps() methods returning objects ' +\\n      'with clashing keys.',\\n      key\\n    ) : invariant(one[key] === undefined));\\n    one[key] = value;\\n  });\\n  return one;\\n}\\n\\n/**\\n * Creates a function that invokes two functions and merges their return values.\\n *\\n * @param {function} one Function to invoke first.\\n * @param {function} two Function to invoke second.\\n * @return {function} Function that invokes the two argument functions.\\n * @private\\n */\\nfunction createMergedResultFunction(one, two) {\\n  return function mergedResult() {\\n    var a = one.apply(this, arguments);\\n    var b = two.apply(this, arguments);\\n    if (a == null) {\\n      return b;\\n    } else if (b == null) {\\n      return a;\\n    }\\n    return mergeObjectsWithNoDuplicateKeys(a, b);\\n  };\\n}\\n\\n/**\\n * Creates a function that invokes two functions and ignores their return vales.\\n *\\n * @param {function} one Function to invoke first.\\n * @param {function} two Function to invoke second.\\n * @return {function} Function that invokes the two argument functions.\\n * @private\\n */\\nfunction createChainedFunction(one, two) {\\n  return function chainedFunction() {\\n    one.apply(this, arguments);\\n    two.apply(this, arguments);\\n  };\\n}\\n\\n/**\\n * `ReactCompositeComponent` maintains an auxiliary life cycle state in\\n * `this._compositeLifeCycleState` (which can be null).\\n *\\n * This is different from the life cycle state maintained by `ReactComponent` in\\n * `this._lifeCycleState`. The following diagram shows how the states overlap in\\n * time. There are times when the CompositeLifeCycle is null - at those times it\\n * is only meaningful to look at ComponentLifeCycle alone.\\n *\\n * Top Row: ReactComponent.ComponentLifeCycle\\n * Low Row: ReactComponent.CompositeLifeCycle\\n *\\n * +-------+---------------------------------+--------+\\n * |  UN   |             MOUNTED             |   UN   |\\n * |MOUNTED|                                 | MOUNTED|\\n * +-------+---------------------------------+--------+\\n * |       ^--------+   +-------+   +--------^        |\\n * |       |        |   |       |   |        |        |\\n * |    0--|MOUNTING|-0-|RECEIVE|-0-|   UN   |--->0   |\\n * |       |        |   |PROPS  |   |MOUNTING|        |\\n * |       |        |   |       |   |        |        |\\n * |       |        |   |       |   |        |        |\\n * |       +--------+   +-------+   +--------+        |\\n * |       |                                 |        |\\n * +-------+---------------------------------+--------+\\n */\\nvar CompositeLifeCycle = keyMirror({\\n  /**\\n   * Components in the process of being mounted respond to state changes\\n   * differently.\\n   */\\n  MOUNTING: null,\\n  /**\\n   * Components in the process of being unmounted are guarded against state\\n   * changes.\\n   */\\n  UNMOUNTING: null,\\n  /**\\n   * Components that are mounted and receiving new props respond to state\\n   * changes differently.\\n   */\\n  RECEIVING_PROPS: null\\n});\\n\\n/**\\n * @lends {ReactCompositeComponent.prototype}\\n */\\nvar ReactCompositeComponentMixin = {\\n\\n  /**\\n   * Base constructor for all composite component.\\n   *\\n   * @param {ReactElement} element\\n   * @final\\n   * @internal\\n   */\\n  construct: function(element) {\\n    // Children can be either an array or more than one argument\\n    ReactComponent.Mixin.construct.apply(this, arguments);\\n    ReactOwner.Mixin.construct.apply(this, arguments);\\n\\n    this.state = null;\\n    this._pendingState = null;\\n\\n    // This is the public post-processed context. The real context and pending\\n    // context lives on the element.\\n    this.context = null;\\n\\n    this._compositeLifeCycleState = null;\\n  },\\n\\n  /**\\n   * Checks whether or not this composite component is mounted.\\n   * @return {boolean} True if mounted, false otherwise.\\n   * @protected\\n   * @final\\n   */\\n  isMounted: function() {\\n    return ReactComponent.Mixin.isMounted.call(this) &&\\n      this._compositeLifeCycleState !== CompositeLifeCycle.MOUNTING;\\n  },\\n\\n  /**\\n   * Initializes the component, renders markup, and registers event listeners.\\n   *\\n   * @param {string} rootID DOM ID of the root node.\\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n   * @param {number} mountDepth number of components in the owner hierarchy\\n   * @return {?string} Rendered markup to be inserted into the DOM.\\n   * @final\\n   * @internal\\n   */\\n  mountComponent: ReactPerf.measure(\\n    'ReactCompositeComponent',\\n    'mountComponent',\\n    function(rootID, transaction, mountDepth) {\\n      ReactComponent.Mixin.mountComponent.call(\\n        this,\\n        rootID,\\n        transaction,\\n        mountDepth\\n      );\\n      this._compositeLifeCycleState = CompositeLifeCycle.MOUNTING;\\n\\n      if (this.__reactAutoBindMap) {\\n        this._bindAutoBindMethods();\\n      }\\n\\n      this.context = this._processContext(this._currentElement._context);\\n      this.props = this._processProps(this.props);\\n\\n      this.state = this.getInitialState ? this.getInitialState() : null;\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        typeof this.state === 'object' && !Array.isArray(this.state),\\n        '%s.getInitialState(): must return an object or null',\\n        this.constructor.displayName || 'ReactCompositeComponent'\\n      ) : invariant(typeof this.state === 'object' && !Array.isArray(this.state)));\\n\\n      this._pendingState = null;\\n      this._pendingForceUpdate = false;\\n\\n      if (this.componentWillMount) {\\n        this.componentWillMount();\\n        // When mounting, calls to `setState` by `componentWillMount` will set\\n        // `this._pendingState` without triggering a re-render.\\n        if (this._pendingState) {\\n          this.state = this._pendingState;\\n          this._pendingState = null;\\n        }\\n      }\\n\\n      this._renderedComponent = instantiateReactComponent(\\n        this._renderValidatedComponent(),\\n        this._currentElement.type // The wrapping type\\n      );\\n\\n      // Done with mounting, `setState` will now trigger UI changes.\\n      this._compositeLifeCycleState = null;\\n      var markup = this._renderedComponent.mountComponent(\\n        rootID,\\n        transaction,\\n        mountDepth + 1\\n      );\\n      if (this.componentDidMount) {\\n        transaction.getReactMountReady().enqueue(this.componentDidMount, this);\\n      }\\n      return markup;\\n    }\\n  ),\\n\\n  /**\\n   * Releases any resources allocated by `mountComponent`.\\n   *\\n   * @final\\n   * @internal\\n   */\\n  unmountComponent: function() {\\n    this._compositeLifeCycleState = CompositeLifeCycle.UNMOUNTING;\\n    if (this.componentWillUnmount) {\\n      this.componentWillUnmount();\\n    }\\n    this._compositeLifeCycleState = null;\\n\\n    this._renderedComponent.unmountComponent();\\n    this._renderedComponent = null;\\n\\n    ReactComponent.Mixin.unmountComponent.call(this);\\n\\n    // Some existing components rely on this.props even after they've been\\n    // destroyed (in event handlers).\\n    // TODO: this.props = null;\\n    // TODO: this.state = null;\\n  },\\n\\n  /**\\n   * Sets a subset of the state. Always use this or `replaceState` to mutate\\n   * state. You should treat `this.state` as immutable.\\n   *\\n   * There is no guarantee that `this.state` will be immediately updated, so\\n   * accessing `this.state` after calling this method may return the old value.\\n   *\\n   * There is no guarantee that calls to `setState` will run synchronously,\\n   * as they may eventually be batched together.  You can provide an optional\\n   * callback that will be executed when the call to setState is actually\\n   * completed.\\n   *\\n   * @param {object} partialState Next partial state to be merged with state.\\n   * @param {?function} callback Called after state is updated.\\n   * @final\\n   * @protected\\n   */\\n  setState: function(partialState, callback) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      typeof partialState === 'object' || partialState == null,\\n      'setState(...): takes an object of state variables to update.'\\n    ) : invariant(typeof partialState === 'object' || partialState == null));\\n    if (\\\"production\\\" !== process.env.NODE_ENV){\\n      (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n        partialState != null,\\n        'setState(...): You passed an undefined or null state object; ' +\\n        'instead, use forceUpdate().'\\n      ) : null);\\n    }\\n    // Merge with `_pendingState` if it exists, otherwise with existing state.\\n    this.replaceState(\\n      assign({}, this._pendingState || this.state, partialState),\\n      callback\\n    );\\n  },\\n\\n  /**\\n   * Replaces all of the state. Always use this or `setState` to mutate state.\\n   * You should treat `this.state` as immutable.\\n   *\\n   * There is no guarantee that `this.state` will be immediately updated, so\\n   * accessing `this.state` after calling this method may return the old value.\\n   *\\n   * @param {object} completeState Next state.\\n   * @param {?function} callback Called after state is updated.\\n   * @final\\n   * @protected\\n   */\\n  replaceState: function(completeState, callback) {\\n    validateLifeCycleOnReplaceState(this);\\n    this._pendingState = completeState;\\n    if (this._compositeLifeCycleState !== CompositeLifeCycle.MOUNTING) {\\n      // If we're in a componentWillMount handler, don't enqueue a rerender\\n      // because ReactUpdates assumes we're in a browser context (which is wrong\\n      // for server rendering) and we're about to do a render anyway.\\n      // TODO: The callback here is ignored when setState is called from\\n      // componentWillMount. Either fix it or disallow doing so completely in\\n      // favor of getInitialState.\\n      ReactUpdates.enqueueUpdate(this, callback);\\n    }\\n  },\\n\\n  /**\\n   * Filters the context object to only contain keys specified in\\n   * `contextTypes`, and asserts that they are valid.\\n   *\\n   * @param {object} context\\n   * @return {?object}\\n   * @private\\n   */\\n  _processContext: function(context) {\\n    var maskedContext = null;\\n    var contextTypes = this.constructor.contextTypes;\\n    if (contextTypes) {\\n      maskedContext = {};\\n      for (var contextName in contextTypes) {\\n        maskedContext[contextName] = context[contextName];\\n      }\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        this._checkPropTypes(\\n          contextTypes,\\n          maskedContext,\\n          ReactPropTypeLocations.context\\n        );\\n      }\\n    }\\n    return maskedContext;\\n  },\\n\\n  /**\\n   * @param {object} currentContext\\n   * @return {object}\\n   * @private\\n   */\\n  _processChildContext: function(currentContext) {\\n    var childContext = this.getChildContext && this.getChildContext();\\n    var displayName = this.constructor.displayName || 'ReactCompositeComponent';\\n    if (childContext) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        typeof this.constructor.childContextTypes === 'object',\\n        '%s.getChildContext(): childContextTypes must be defined in order to ' +\\n        'use getChildContext().',\\n        displayName\\n      ) : invariant(typeof this.constructor.childContextTypes === 'object'));\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        this._checkPropTypes(\\n          this.constructor.childContextTypes,\\n          childContext,\\n          ReactPropTypeLocations.childContext\\n        );\\n      }\\n      for (var name in childContext) {\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          name in this.constructor.childContextTypes,\\n          '%s.getChildContext(): key \\\"%s\\\" is not defined in childContextTypes.',\\n          displayName,\\n          name\\n        ) : invariant(name in this.constructor.childContextTypes));\\n      }\\n      return assign({}, currentContext, childContext);\\n    }\\n    return currentContext;\\n  },\\n\\n  /**\\n   * Processes props by setting default values for unspecified props and\\n   * asserting that the props are valid. Does not mutate its argument; returns\\n   * a new props object with defaults merged in.\\n   *\\n   * @param {object} newProps\\n   * @return {object}\\n   * @private\\n   */\\n  _processProps: function(newProps) {\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      var propTypes = this.constructor.propTypes;\\n      if (propTypes) {\\n        this._checkPropTypes(propTypes, newProps, ReactPropTypeLocations.prop);\\n      }\\n    }\\n    return newProps;\\n  },\\n\\n  /**\\n   * Assert that the props are valid\\n   *\\n   * @param {object} propTypes Map of prop name to a ReactPropType\\n   * @param {object} props\\n   * @param {string} location e.g. \\\"prop\\\", \\\"context\\\", \\\"child context\\\"\\n   * @private\\n   */\\n  _checkPropTypes: function(propTypes, props, location) {\\n    // TODO: Stop validating prop types here and only use the element\\n    // validation.\\n    var componentName = this.constructor.displayName;\\n    for (var propName in propTypes) {\\n      if (propTypes.hasOwnProperty(propName)) {\\n        var error =\\n          propTypes[propName](props, propName, componentName, location);\\n        if (error instanceof Error) {\\n          // We may want to extend this logic for similar errors in\\n          // renderComponent calls, so I'm abstracting it away into\\n          // a function to minimize refactoring in the future\\n          var addendum = getDeclarationErrorAddendum(this);\\n          (\\\"production\\\" !== process.env.NODE_ENV ? warning(false, error.message + addendum) : null);\\n        }\\n      }\\n    }\\n  },\\n\\n  /**\\n   * If any of `_pendingElement`, `_pendingState`, or `_pendingForceUpdate`\\n   * is set, update the component.\\n   *\\n   * @param {ReactReconcileTransaction} transaction\\n   * @internal\\n   */\\n  performUpdateIfNecessary: function(transaction) {\\n    var compositeLifeCycleState = this._compositeLifeCycleState;\\n    // Do not trigger a state transition if we are in the middle of mounting or\\n    // receiving props because both of those will already be doing this.\\n    if (compositeLifeCycleState === CompositeLifeCycle.MOUNTING ||\\n        compositeLifeCycleState === CompositeLifeCycle.RECEIVING_PROPS) {\\n      return;\\n    }\\n\\n    if (this._pendingElement == null &&\\n        this._pendingState == null &&\\n        !this._pendingForceUpdate) {\\n      return;\\n    }\\n\\n    var nextContext = this.context;\\n    var nextProps = this.props;\\n    var nextElement = this._currentElement;\\n    if (this._pendingElement != null) {\\n      nextElement = this._pendingElement;\\n      nextContext = this._processContext(nextElement._context);\\n      nextProps = this._processProps(nextElement.props);\\n      this._pendingElement = null;\\n\\n      this._compositeLifeCycleState = CompositeLifeCycle.RECEIVING_PROPS;\\n      if (this.componentWillReceiveProps) {\\n        this.componentWillReceiveProps(nextProps, nextContext);\\n      }\\n    }\\n\\n    this._compositeLifeCycleState = null;\\n\\n    var nextState = this._pendingState || this.state;\\n    this._pendingState = null;\\n\\n    var shouldUpdate =\\n      this._pendingForceUpdate ||\\n      !this.shouldComponentUpdate ||\\n      this.shouldComponentUpdate(nextProps, nextState, nextContext);\\n\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      if (typeof shouldUpdate === \\\"undefined\\\") {\\n        console.warn(\\n          (this.constructor.displayName || 'ReactCompositeComponent') +\\n          '.shouldComponentUpdate(): Returned undefined instead of a ' +\\n          'boolean value. Make sure to return true or false.'\\n        );\\n      }\\n    }\\n\\n    if (shouldUpdate) {\\n      this._pendingForceUpdate = false;\\n      // Will set `this.props`, `this.state` and `this.context`.\\n      this._performComponentUpdate(\\n        nextElement,\\n        nextProps,\\n        nextState,\\n        nextContext,\\n        transaction\\n      );\\n    } else {\\n      // If it's determined that a component should not update, we still want\\n      // to set props and state.\\n      this._currentElement = nextElement;\\n      this.props = nextProps;\\n      this.state = nextState;\\n      this.context = nextContext;\\n\\n      // Owner cannot change because shouldUpdateReactComponent doesn't allow\\n      // it. TODO: Remove this._owner completely.\\n      this._owner = nextElement._owner;\\n    }\\n  },\\n\\n  /**\\n   * Merges new props and state, notifies delegate methods of update and\\n   * performs update.\\n   *\\n   * @param {ReactElement} nextElement Next element\\n   * @param {object} nextProps Next public object to set as properties.\\n   * @param {?object} nextState Next object to set as state.\\n   * @param {?object} nextContext Next public object to set as context.\\n   * @param {ReactReconcileTransaction} transaction\\n   * @private\\n   */\\n  _performComponentUpdate: function(\\n    nextElement,\\n    nextProps,\\n    nextState,\\n    nextContext,\\n    transaction\\n  ) {\\n    var prevElement = this._currentElement;\\n    var prevProps = this.props;\\n    var prevState = this.state;\\n    var prevContext = this.context;\\n\\n    if (this.componentWillUpdate) {\\n      this.componentWillUpdate(nextProps, nextState, nextContext);\\n    }\\n\\n    this._currentElement = nextElement;\\n    this.props = nextProps;\\n    this.state = nextState;\\n    this.context = nextContext;\\n\\n    // Owner cannot change because shouldUpdateReactComponent doesn't allow\\n    // it. TODO: Remove this._owner completely.\\n    this._owner = nextElement._owner;\\n\\n    this.updateComponent(\\n      transaction,\\n      prevElement\\n    );\\n\\n    if (this.componentDidUpdate) {\\n      transaction.getReactMountReady().enqueue(\\n        this.componentDidUpdate.bind(this, prevProps, prevState, prevContext),\\n        this\\n      );\\n    }\\n  },\\n\\n  receiveComponent: function(nextElement, transaction) {\\n    if (nextElement === this._currentElement &&\\n        nextElement._owner != null) {\\n      // Since elements are immutable after the owner is rendered,\\n      // we can do a cheap identity compare here to determine if this is a\\n      // superfluous reconcile. It's possible for state to be mutable but such\\n      // change should trigger an update of the owner which would recreate\\n      // the element. We explicitly check for the existence of an owner since\\n      // it's possible for a element created outside a composite to be\\n      // deeply mutated and reused.\\n      return;\\n    }\\n\\n    ReactComponent.Mixin.receiveComponent.call(\\n      this,\\n      nextElement,\\n      transaction\\n    );\\n  },\\n\\n  /**\\n   * Updates the component's currently mounted DOM representation.\\n   *\\n   * By default, this implements React's rendering and reconciliation algorithm.\\n   * Sophisticated clients may wish to override this.\\n   *\\n   * @param {ReactReconcileTransaction} transaction\\n   * @param {ReactElement} prevElement\\n   * @internal\\n   * @overridable\\n   */\\n  updateComponent: ReactPerf.measure(\\n    'ReactCompositeComponent',\\n    'updateComponent',\\n    function(transaction, prevParentElement) {\\n      ReactComponent.Mixin.updateComponent.call(\\n        this,\\n        transaction,\\n        prevParentElement\\n      );\\n\\n      var prevComponentInstance = this._renderedComponent;\\n      var prevElement = prevComponentInstance._currentElement;\\n      var nextElement = this._renderValidatedComponent();\\n      if (shouldUpdateReactComponent(prevElement, nextElement)) {\\n        prevComponentInstance.receiveComponent(nextElement, transaction);\\n      } else {\\n        // These two IDs are actually the same! But nothing should rely on that.\\n        var thisID = this._rootNodeID;\\n        var prevComponentID = prevComponentInstance._rootNodeID;\\n        prevComponentInstance.unmountComponent();\\n        this._renderedComponent = instantiateReactComponent(\\n          nextElement,\\n          this._currentElement.type\\n        );\\n        var nextMarkup = this._renderedComponent.mountComponent(\\n          thisID,\\n          transaction,\\n          this._mountDepth + 1\\n        );\\n        ReactComponent.BackendIDOperations.dangerouslyReplaceNodeWithMarkupByID(\\n          prevComponentID,\\n          nextMarkup\\n        );\\n      }\\n    }\\n  ),\\n\\n  /**\\n   * Forces an update. This should only be invoked when it is known with\\n   * certainty that we are **not** in a DOM transaction.\\n   *\\n   * You may want to call this when you know that some deeper aspect of the\\n   * component's state has changed but `setState` was not called.\\n   *\\n   * This will not invoke `shouldUpdateComponent`, but it will invoke\\n   * `componentWillUpdate` and `componentDidUpdate`.\\n   *\\n   * @param {?function} callback Called after update is complete.\\n   * @final\\n   * @protected\\n   */\\n  forceUpdate: function(callback) {\\n    var compositeLifeCycleState = this._compositeLifeCycleState;\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      this.isMounted() ||\\n        compositeLifeCycleState === CompositeLifeCycle.MOUNTING,\\n      'forceUpdate(...): Can only force an update on mounted or mounting ' +\\n        'components.'\\n    ) : invariant(this.isMounted() ||\\n      compositeLifeCycleState === CompositeLifeCycle.MOUNTING));\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      compositeLifeCycleState !== CompositeLifeCycle.UNMOUNTING &&\\n      ReactCurrentOwner.current == null,\\n      'forceUpdate(...): Cannot force an update while unmounting component ' +\\n      'or within a `render` function.'\\n    ) : invariant(compositeLifeCycleState !== CompositeLifeCycle.UNMOUNTING &&\\n    ReactCurrentOwner.current == null));\\n    this._pendingForceUpdate = true;\\n    ReactUpdates.enqueueUpdate(this, callback);\\n  },\\n\\n  /**\\n   * @private\\n   */\\n  _renderValidatedComponent: ReactPerf.measure(\\n    'ReactCompositeComponent',\\n    '_renderValidatedComponent',\\n    function() {\\n      var renderedComponent;\\n      var previousContext = ReactContext.current;\\n      ReactContext.current = this._processChildContext(\\n        this._currentElement._context\\n      );\\n      ReactCurrentOwner.current = this;\\n      try {\\n        renderedComponent = this.render();\\n        if (renderedComponent === null || renderedComponent === false) {\\n          renderedComponent = ReactEmptyComponent.getEmptyComponent();\\n          ReactEmptyComponent.registerNullComponentID(this._rootNodeID);\\n        } else {\\n          ReactEmptyComponent.deregisterNullComponentID(this._rootNodeID);\\n        }\\n      } finally {\\n        ReactContext.current = previousContext;\\n        ReactCurrentOwner.current = null;\\n      }\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        ReactElement.isValidElement(renderedComponent),\\n        '%s.render(): A valid ReactComponent must be returned. You may have ' +\\n          'returned undefined, an array or some other invalid object.',\\n        this.constructor.displayName || 'ReactCompositeComponent'\\n      ) : invariant(ReactElement.isValidElement(renderedComponent)));\\n      return renderedComponent;\\n    }\\n  ),\\n\\n  /**\\n   * @private\\n   */\\n  _bindAutoBindMethods: function() {\\n    for (var autoBindKey in this.__reactAutoBindMap) {\\n      if (!this.__reactAutoBindMap.hasOwnProperty(autoBindKey)) {\\n        continue;\\n      }\\n      var method = this.__reactAutoBindMap[autoBindKey];\\n      this[autoBindKey] = this._bindAutoBindMethod(ReactErrorUtils.guard(\\n        method,\\n        this.constructor.displayName + '.' + autoBindKey\\n      ));\\n    }\\n  },\\n\\n  /**\\n   * Binds a method to the component.\\n   *\\n   * @param {function} method Method to be bound.\\n   * @private\\n   */\\n  _bindAutoBindMethod: function(method) {\\n    var component = this;\\n    var boundMethod = method.bind(component);\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      boundMethod.__reactBoundContext = component;\\n      boundMethod.__reactBoundMethod = method;\\n      boundMethod.__reactBoundArguments = null;\\n      var componentName = component.constructor.displayName;\\n      var _bind = boundMethod.bind;\\n      boundMethod.bind = function(newThis ) {for (var args=[],$__0=1,$__1=arguments.length;$__0<$__1;$__0++) args.push(arguments[$__0]);\\n        // User is trying to bind() an autobound method; we effectively will\\n        // ignore the value of \\\"this\\\" that the user is trying to use, so\\n        // let's warn.\\n        if (newThis !== component && newThis !== null) {\\n          monitorCodeUse('react_bind_warning', { component: componentName });\\n          console.warn(\\n            'bind(): React component methods may only be bound to the ' +\\n            'component instance. See ' + componentName\\n          );\\n        } else if (!args.length) {\\n          monitorCodeUse('react_bind_warning', { component: componentName });\\n          console.warn(\\n            'bind(): You are binding a component method to the component. ' +\\n            'React does this for you automatically in a high-performance ' +\\n            'way, so you can safely remove this call. See ' + componentName\\n          );\\n          return boundMethod;\\n        }\\n        var reboundMethod = _bind.apply(boundMethod, arguments);\\n        reboundMethod.__reactBoundContext = component;\\n        reboundMethod.__reactBoundMethod = method;\\n        reboundMethod.__reactBoundArguments = args;\\n        return reboundMethod;\\n      };\\n    }\\n    return boundMethod;\\n  }\\n};\\n\\nvar ReactCompositeComponentBase = function() {};\\nassign(\\n  ReactCompositeComponentBase.prototype,\\n  ReactComponent.Mixin,\\n  ReactOwner.Mixin,\\n  ReactPropTransferer.Mixin,\\n  ReactCompositeComponentMixin\\n);\\n\\n/**\\n * Module for creating composite components.\\n *\\n * @class ReactCompositeComponent\\n * @extends ReactComponent\\n * @extends ReactOwner\\n * @extends ReactPropTransferer\\n */\\nvar ReactCompositeComponent = {\\n\\n  LifeCycle: CompositeLifeCycle,\\n\\n  Base: ReactCompositeComponentBase,\\n\\n  /**\\n   * Creates a composite component class given a class specification.\\n   *\\n   * @param {object} spec Class specification (which must define `render`).\\n   * @return {function} Component constructor function.\\n   * @public\\n   */\\n  createClass: function(spec) {\\n    var Constructor = function(props) {\\n      // This constructor is overridden by mocks. The argument is used\\n      // by mocks to assert on what gets mounted. This will later be used\\n      // by the stand-alone class implementation.\\n    };\\n    Constructor.prototype = new ReactCompositeComponentBase();\\n    Constructor.prototype.constructor = Constructor;\\n\\n    injectedMixins.forEach(\\n      mixSpecIntoComponent.bind(null, Constructor)\\n    );\\n\\n    mixSpecIntoComponent(Constructor, spec);\\n\\n    // Initialize the defaultProps property after all mixins have been merged\\n    if (Constructor.getDefaultProps) {\\n      Constructor.defaultProps = Constructor.getDefaultProps();\\n    }\\n\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      Constructor.prototype.render,\\n      'createClass(...): Class specification must implement a `render` method.'\\n    ) : invariant(Constructor.prototype.render));\\n\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      if (Constructor.prototype.componentShouldUpdate) {\\n        monitorCodeUse(\\n          'react_component_should_update_warning',\\n          { component: spec.displayName }\\n        );\\n        console.warn(\\n          (spec.displayName || 'A component') + ' has a method called ' +\\n          'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' +\\n          'The name is phrased as a question because the function is ' +\\n          'expected to return a value.'\\n         );\\n      }\\n    }\\n\\n    // Reduce time spent doing lookups by setting these on the prototype.\\n    for (var methodName in ReactCompositeComponentInterface) {\\n      if (!Constructor.prototype[methodName]) {\\n        Constructor.prototype[methodName] = null;\\n      }\\n    }\\n\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      return ReactLegacyElement.wrapFactory(\\n        ReactElementValidator.createFactory(Constructor)\\n      );\\n    }\\n    return ReactLegacyElement.wrapFactory(\\n      ReactElement.createFactory(Constructor)\\n    );\\n  },\\n\\n  injection: {\\n    injectMixin: function(mixin) {\\n      injectedMixins.push(mixin);\\n    }\\n  }\\n};\\n\\nmodule.exports = ReactCompositeComponent;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactCompositeComponent.js\\n ** module id = 30\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactCompositeComponent.js?\");\n\n/***/ },\n/* 31 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/ReactElementValidator.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactElementValidator\\n */\\n\\n/**\\n * ReactElementValidator provides a wrapper around a element factory\\n * which validates the props passed to the element. This is intended to be\\n * used only in DEV and could be replaced by a static type checker for languages\\n * that support it.\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactPropTypeLocations = __webpack_require__(/*! ./ReactPropTypeLocations */ 32);\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 22);\\n\\nvar monitorCodeUse = __webpack_require__(/*! ./monitorCodeUse */ 33);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\n/**\\n * Warn if there's no key explicitly set on dynamic arrays of children or\\n * object keys are not valid. This allows us to keep track of children between\\n * updates.\\n */\\nvar ownerHasKeyUseWarning = {\\n  'react_key_warning': {},\\n  'react_numeric_key_warning': {}\\n};\\nvar ownerHasMonitoredObjectMap = {};\\n\\nvar loggedTypeFailures = {};\\n\\nvar NUMERIC_PROPERTY_REGEX = /^\\\\d+$/;\\n\\n/**\\n * Gets the current owner's displayName for use in warnings.\\n *\\n * @internal\\n * @return {?string} Display name or undefined\\n */\\nfunction getCurrentOwnerDisplayName() {\\n  var current = ReactCurrentOwner.current;\\n  return current && current.constructor.displayName || undefined;\\n}\\n\\n/**\\n * Warn if the component doesn't have an explicit key assigned to it.\\n * This component is in an array. The array could grow and shrink or be\\n * reordered. All children that haven't already been validated are required to\\n * have a \\\"key\\\" property assigned to it.\\n *\\n * @internal\\n * @param {ReactComponent} component Component that requires a key.\\n * @param {*} parentType component's parent's type.\\n */\\nfunction validateExplicitKey(component, parentType) {\\n  if (component._store.validated || component.key != null) {\\n    return;\\n  }\\n  component._store.validated = true;\\n\\n  warnAndMonitorForKeyUse(\\n    'react_key_warning',\\n    'Each child in an array should have a unique \\\"key\\\" prop.',\\n    component,\\n    parentType\\n  );\\n}\\n\\n/**\\n * Warn if the key is being defined as an object property but has an incorrect\\n * value.\\n *\\n * @internal\\n * @param {string} name Property name of the key.\\n * @param {ReactComponent} component Component that requires a key.\\n * @param {*} parentType component's parent's type.\\n */\\nfunction validatePropertyKey(name, component, parentType) {\\n  if (!NUMERIC_PROPERTY_REGEX.test(name)) {\\n    return;\\n  }\\n  warnAndMonitorForKeyUse(\\n    'react_numeric_key_warning',\\n    'Child objects should have non-numeric keys so ordering is preserved.',\\n    component,\\n    parentType\\n  );\\n}\\n\\n/**\\n * Shared warning and monitoring code for the key warnings.\\n *\\n * @internal\\n * @param {string} warningID The id used when logging.\\n * @param {string} message The base warning that gets output.\\n * @param {ReactComponent} component Component that requires a key.\\n * @param {*} parentType component's parent's type.\\n */\\nfunction warnAndMonitorForKeyUse(warningID, message, component, parentType) {\\n  var ownerName = getCurrentOwnerDisplayName();\\n  var parentName = parentType.displayName;\\n\\n  var useName = ownerName || parentName;\\n  var memoizer = ownerHasKeyUseWarning[warningID];\\n  if (memoizer.hasOwnProperty(useName)) {\\n    return;\\n  }\\n  memoizer[useName] = true;\\n\\n  message += ownerName ?\\n    (\\\" Check the render method of \\\" + ownerName + \\\".\\\") :\\n    (\\\" Check the renderComponent call using <\\\" + parentName + \\\">.\\\");\\n\\n  // Usually the current owner is the offender, but if it accepts children as a\\n  // property, it may be the creator of the child that's responsible for\\n  // assigning it a key.\\n  var childOwnerName = null;\\n  if (component._owner && component._owner !== ReactCurrentOwner.current) {\\n    // Name of the component that originally created this child.\\n    childOwnerName = component._owner.constructor.displayName;\\n\\n    message += (\\\" It was passed a child from \\\" + childOwnerName + \\\".\\\");\\n  }\\n\\n  message += ' See http://fb.me/react-warning-keys for more information.';\\n  monitorCodeUse(warningID, {\\n    component: useName,\\n    componentOwner: childOwnerName\\n  });\\n  console.warn(message);\\n}\\n\\n/**\\n * Log that we're using an object map. We're considering deprecating this\\n * feature and replace it with proper Map and ImmutableMap data structures.\\n *\\n * @internal\\n */\\nfunction monitorUseOfObjectMap() {\\n  var currentName = getCurrentOwnerDisplayName() || '';\\n  if (ownerHasMonitoredObjectMap.hasOwnProperty(currentName)) {\\n    return;\\n  }\\n  ownerHasMonitoredObjectMap[currentName] = true;\\n  monitorCodeUse('react_object_map_children');\\n}\\n\\n/**\\n * Ensure that every component either is passed in a static location, in an\\n * array with an explicit keys property defined, or in an object literal\\n * with valid key property.\\n *\\n * @internal\\n * @param {*} component Statically passed child of any type.\\n * @param {*} parentType component's parent's type.\\n * @return {boolean}\\n */\\nfunction validateChildKeys(component, parentType) {\\n  if (Array.isArray(component)) {\\n    for (var i = 0; i < component.length; i++) {\\n      var child = component[i];\\n      if (ReactElement.isValidElement(child)) {\\n        validateExplicitKey(child, parentType);\\n      }\\n    }\\n  } else if (ReactElement.isValidElement(component)) {\\n    // This component was passed in a valid location.\\n    component._store.validated = true;\\n  } else if (component && typeof component === 'object') {\\n    monitorUseOfObjectMap();\\n    for (var name in component) {\\n      validatePropertyKey(name, component[name], parentType);\\n    }\\n  }\\n}\\n\\n/**\\n * Assert that the props are valid\\n *\\n * @param {string} componentName Name of the component for error messages.\\n * @param {object} propTypes Map of prop name to a ReactPropType\\n * @param {object} props\\n * @param {string} location e.g. \\\"prop\\\", \\\"context\\\", \\\"child context\\\"\\n * @private\\n */\\nfunction checkPropTypes(componentName, propTypes, props, location) {\\n  for (var propName in propTypes) {\\n    if (propTypes.hasOwnProperty(propName)) {\\n      var error;\\n      // Prop type validation may throw. In case they do, we don't want to\\n      // fail the render phase where it didn't fail before. So we log it.\\n      // After these have been cleaned up, we'll let them throw.\\n      try {\\n        error = propTypes[propName](props, propName, componentName, location);\\n      } catch (ex) {\\n        error = ex;\\n      }\\n      if (error instanceof Error && !(error.message in loggedTypeFailures)) {\\n        // Only monitor this failure once because there tends to be a lot of the\\n        // same error.\\n        loggedTypeFailures[error.message] = true;\\n        // This will soon use the warning module\\n        monitorCodeUse(\\n          'react_failed_descriptor_type_check',\\n          { message: error.message }\\n        );\\n      }\\n    }\\n  }\\n}\\n\\nvar ReactElementValidator = {\\n\\n  createElement: function(type, props, children) {\\n    // We warn in this case but don't throw. We expect the element creation to\\n    // succeed and there will likely be errors in render.\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      type != null,\\n      'React.createElement: type should not be null or undefined. It should ' +\\n        'be a string (for DOM elements) or a ReactClass (for composite ' +\\n        'components).'\\n    ) : null);\\n\\n    var element = ReactElement.createElement.apply(this, arguments);\\n\\n    // The result can be nullish if a mock or a custom function is used.\\n    // TODO: Drop this when these are no longer allowed as the type argument.\\n    if (element == null) {\\n      return element;\\n    }\\n\\n    for (var i = 2; i < arguments.length; i++) {\\n      validateChildKeys(arguments[i], type);\\n    }\\n\\n    if (type) {\\n      var name = type.displayName;\\n      if (type.propTypes) {\\n        checkPropTypes(\\n          name,\\n          type.propTypes,\\n          element.props,\\n          ReactPropTypeLocations.prop\\n        );\\n      }\\n      if (type.contextTypes) {\\n        checkPropTypes(\\n          name,\\n          type.contextTypes,\\n          element._context,\\n          ReactPropTypeLocations.context\\n        );\\n      }\\n    }\\n    return element;\\n  },\\n\\n  createFactory: function(type) {\\n    var validatedFactory = ReactElementValidator.createElement.bind(\\n      null,\\n      type\\n    );\\n    validatedFactory.type = type;\\n    return validatedFactory;\\n  }\\n\\n};\\n\\nmodule.exports = ReactElementValidator;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactElementValidator.js\\n ** module id = 31\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactElementValidator.js?\");\n\n/***/ },\n/* 32 */\n/*!***********************************************!*\\\n  !*** ./~/react/lib/ReactPropTypeLocations.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactPropTypeLocations\\n */\\n\\n\\\"use strict\\\";\\n\\nvar keyMirror = __webpack_require__(/*! ./keyMirror */ 15);\\n\\nvar ReactPropTypeLocations = keyMirror({\\n  prop: null,\\n  context: null,\\n  childContext: null\\n});\\n\\nmodule.exports = ReactPropTypeLocations;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactPropTypeLocations.js\\n ** module id = 32\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactPropTypeLocations.js?\");\n\n/***/ },\n/* 33 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/monitorCodeUse.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule monitorCodeUse\\n */\\n\\n\\\"use strict\\\";\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Provides open-source compatible instrumentation for monitoring certain API\\n * uses before we're ready to issue a warning or refactor. It accepts an event\\n * name which may only contain the characters [a-z0-9_] and an optional data\\n * object with further information.\\n */\\n\\nfunction monitorCodeUse(eventName, data) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    eventName && !/[^a-z0-9_]/.test(eventName),\\n    'You must provide an eventName using only the characters [a-z0-9_]'\\n  ) : invariant(eventName && !/[^a-z0-9_]/.test(eventName)));\\n}\\n\\nmodule.exports = monitorCodeUse;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/monitorCodeUse.js\\n ** module id = 33\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/monitorCodeUse.js?\");\n\n/***/ },\n/* 34 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/ReactEmptyComponent.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactEmptyComponent\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nvar component;\\n// This registry keeps track of the React IDs of the components that rendered to\\n// `null` (in reality a placeholder such as `noscript`)\\nvar nullComponentIdsRegistry = {};\\n\\nvar ReactEmptyComponentInjection = {\\n  injectEmptyComponent: function(emptyComponent) {\\n    component = ReactElement.createFactory(emptyComponent);\\n  }\\n};\\n\\n/**\\n * @return {ReactComponent} component The injected empty component.\\n */\\nfunction getEmptyComponent() {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    component,\\n    'Trying to return null from a render, but no null placeholder component ' +\\n    'was injected.'\\n  ) : invariant(component));\\n  return component();\\n}\\n\\n/**\\n * Mark the component as having rendered to null.\\n * @param {string} id Component's `_rootNodeID`.\\n */\\nfunction registerNullComponentID(id) {\\n  nullComponentIdsRegistry[id] = true;\\n}\\n\\n/**\\n * Unmark the component as having rendered to null: it renders to something now.\\n * @param {string} id Component's `_rootNodeID`.\\n */\\nfunction deregisterNullComponentID(id) {\\n  delete nullComponentIdsRegistry[id];\\n}\\n\\n/**\\n * @param {string} id Component's `_rootNodeID`.\\n * @return {boolean} True if the component is rendered to null.\\n */\\nfunction isNullComponentID(id) {\\n  return nullComponentIdsRegistry[id];\\n}\\n\\nvar ReactEmptyComponent = {\\n  deregisterNullComponentID: deregisterNullComponentID,\\n  getEmptyComponent: getEmptyComponent,\\n  injection: ReactEmptyComponentInjection,\\n  isNullComponentID: isNullComponentID,\\n  registerNullComponentID: registerNullComponentID\\n};\\n\\nmodule.exports = ReactEmptyComponent;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactEmptyComponent.js\\n ** module id = 34\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactEmptyComponent.js?\");\n\n/***/ },\n/* 35 */\n/*!****************************************!*\\\n  !*** ./~/react/lib/ReactErrorUtils.js ***!\n  \\****************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactErrorUtils\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactErrorUtils = {\\n  /**\\n   * Creates a guarded version of a function. This is supposed to make debugging\\n   * of event handlers easier. To aid debugging with the browser's debugger,\\n   * this currently simply returns the original function.\\n   *\\n   * @param {function} func Function to be executed\\n   * @param {string} name The name of the guard\\n   * @return {function}\\n   */\\n  guard: function(func, name) {\\n    return func;\\n  }\\n};\\n\\nmodule.exports = ReactErrorUtils;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactErrorUtils.js\\n ** module id = 35\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactErrorUtils.js?\");\n\n/***/ },\n/* 36 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/ReactLegacyElement.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactLegacyElement\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 22);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar monitorCodeUse = __webpack_require__(/*! ./monitorCodeUse */ 33);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar legacyFactoryLogs = {};\\nfunction warnForLegacyFactoryCall() {\\n  if (!ReactLegacyElementFactory._isLegacyCallWarningEnabled) {\\n    return;\\n  }\\n  var owner = ReactCurrentOwner.current;\\n  var name = owner && owner.constructor ? owner.constructor.displayName : '';\\n  if (!name) {\\n    name = 'Something';\\n  }\\n  if (legacyFactoryLogs.hasOwnProperty(name)) {\\n    return;\\n  }\\n  legacyFactoryLogs[name] = true;\\n  (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n    false,\\n    name + ' is calling a React component directly. ' +\\n    'Use a factory or JSX instead. See: http://fb.me/react-legacyfactory'\\n  ) : null);\\n  monitorCodeUse('react_legacy_factory_call', { version: 3, name: name });\\n}\\n\\nfunction warnForPlainFunctionType(type) {\\n  var isReactClass =\\n    type.prototype &&\\n    typeof type.prototype.mountComponent === 'function' &&\\n    typeof type.prototype.receiveComponent === 'function';\\n  if (isReactClass) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      false,\\n      'Did not expect to get a React class here. Use `Component` instead ' +\\n      'of `Component.type` or `this.constructor`.'\\n    ) : null);\\n  } else {\\n    if (!type._reactWarnedForThisType) {\\n      try {\\n        type._reactWarnedForThisType = true;\\n      } catch (x) {\\n        // just incase this is a frozen object or some special object\\n      }\\n      monitorCodeUse(\\n        'react_non_component_in_jsx',\\n        { version: 3, name: type.name }\\n      );\\n    }\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      false,\\n      'This JSX uses a plain function. Only React components are ' +\\n      'valid in React\\\\'s JSX transform.'\\n    ) : null);\\n  }\\n}\\n\\nfunction warnForNonLegacyFactory(type) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n    false,\\n    'Do not pass React.DOM.' + type.type + ' to JSX or createFactory. ' +\\n    'Use the string \\\"' + type.type + '\\\" instead.'\\n  ) : null);\\n}\\n\\n/**\\n * Transfer static properties from the source to the target. Functions are\\n * rebound to have this reflect the original source.\\n */\\nfunction proxyStaticMethods(target, source) {\\n  if (typeof source !== 'function') {\\n    return;\\n  }\\n  for (var key in source) {\\n    if (source.hasOwnProperty(key)) {\\n      var value = source[key];\\n      if (typeof value === 'function') {\\n        var bound = value.bind(source);\\n        // Copy any properties defined on the function, such as `isRequired` on\\n        // a PropTypes validator.\\n        for (var k in value) {\\n          if (value.hasOwnProperty(k)) {\\n            bound[k] = value[k];\\n          }\\n        }\\n        target[key] = bound;\\n      } else {\\n        target[key] = value;\\n      }\\n    }\\n  }\\n}\\n\\n// We use an object instead of a boolean because booleans are ignored by our\\n// mocking libraries when these factories gets mocked.\\nvar LEGACY_MARKER = {};\\nvar NON_LEGACY_MARKER = {};\\n\\nvar ReactLegacyElementFactory = {};\\n\\nReactLegacyElementFactory.wrapCreateFactory = function(createFactory) {\\n  var legacyCreateFactory = function(type) {\\n    if (typeof type !== 'function') {\\n      // Non-function types cannot be legacy factories\\n      return createFactory(type);\\n    }\\n\\n    if (type.isReactNonLegacyFactory) {\\n      // This is probably a factory created by ReactDOM we unwrap it to get to\\n      // the underlying string type. It shouldn't have been passed here so we\\n      // warn.\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        warnForNonLegacyFactory(type);\\n      }\\n      return createFactory(type.type);\\n    }\\n\\n    if (type.isReactLegacyFactory) {\\n      // This is probably a legacy factory created by ReactCompositeComponent.\\n      // We unwrap it to get to the underlying class.\\n      return createFactory(type.type);\\n    }\\n\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      warnForPlainFunctionType(type);\\n    }\\n\\n    // Unless it's a legacy factory, then this is probably a plain function,\\n    // that is expecting to be invoked by JSX. We can just return it as is.\\n    return type;\\n  };\\n  return legacyCreateFactory;\\n};\\n\\nReactLegacyElementFactory.wrapCreateElement = function(createElement) {\\n  var legacyCreateElement = function(type, props, children) {\\n    if (typeof type !== 'function') {\\n      // Non-function types cannot be legacy factories\\n      return createElement.apply(this, arguments);\\n    }\\n\\n    var args;\\n\\n    if (type.isReactNonLegacyFactory) {\\n      // This is probably a factory created by ReactDOM we unwrap it to get to\\n      // the underlying string type. It shouldn't have been passed here so we\\n      // warn.\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        warnForNonLegacyFactory(type);\\n      }\\n      args = Array.prototype.slice.call(arguments, 0);\\n      args[0] = type.type;\\n      return createElement.apply(this, args);\\n    }\\n\\n    if (type.isReactLegacyFactory) {\\n      // This is probably a legacy factory created by ReactCompositeComponent.\\n      // We unwrap it to get to the underlying class.\\n      if (type._isMockFunction) {\\n        // If this is a mock function, people will expect it to be called. We\\n        // will actually call the original mock factory function instead. This\\n        // future proofs unit testing that assume that these are classes.\\n        type.type._mockedReactClassConstructor = type;\\n      }\\n      args = Array.prototype.slice.call(arguments, 0);\\n      args[0] = type.type;\\n      return createElement.apply(this, args);\\n    }\\n\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      warnForPlainFunctionType(type);\\n    }\\n\\n    // This is being called with a plain function we should invoke it\\n    // immediately as if this was used with legacy JSX.\\n    return type.apply(null, Array.prototype.slice.call(arguments, 1));\\n  };\\n  return legacyCreateElement;\\n};\\n\\nReactLegacyElementFactory.wrapFactory = function(factory) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    typeof factory === 'function',\\n    'This is suppose to accept a element factory'\\n  ) : invariant(typeof factory === 'function'));\\n  var legacyElementFactory = function(config, children) {\\n    // This factory should not be called when JSX is used. Use JSX instead.\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      warnForLegacyFactoryCall();\\n    }\\n    return factory.apply(this, arguments);\\n  };\\n  proxyStaticMethods(legacyElementFactory, factory.type);\\n  legacyElementFactory.isReactLegacyFactory = LEGACY_MARKER;\\n  legacyElementFactory.type = factory.type;\\n  return legacyElementFactory;\\n};\\n\\n// This is used to mark a factory that will remain. E.g. we're allowed to call\\n// it as a function. However, you're not suppose to pass it to createElement\\n// or createFactory, so it will warn you if you do.\\nReactLegacyElementFactory.markNonLegacyFactory = function(factory) {\\n  factory.isReactNonLegacyFactory = NON_LEGACY_MARKER;\\n  return factory;\\n};\\n\\n// Checks if a factory function is actually a legacy factory pretending to\\n// be a class.\\nReactLegacyElementFactory.isValidFactory = function(factory) {\\n  // TODO: This will be removed and moved into a class validator or something.\\n  return typeof factory === 'function' &&\\n    factory.isReactLegacyFactory === LEGACY_MARKER;\\n};\\n\\nReactLegacyElementFactory.isValidClass = function(factory) {\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      false,\\n      'isValidClass is deprecated and will be removed in a future release. ' +\\n      'Use a more specific validator instead.'\\n    ) : null);\\n  }\\n  return ReactLegacyElementFactory.isValidFactory(factory);\\n};\\n\\nReactLegacyElementFactory._isLegacyCallWarningEnabled = true;\\n\\nmodule.exports = ReactLegacyElementFactory;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactLegacyElement.js\\n ** module id = 36\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactLegacyElement.js?\");\n\n/***/ },\n/* 37 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/ReactPropTransferer.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactPropTransferer\\n */\\n\\n\\\"use strict\\\";\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar joinClasses = __webpack_require__(/*! ./joinClasses */ 38);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar didWarn = false;\\n\\n/**\\n * Creates a transfer strategy that will merge prop values using the supplied\\n * `mergeStrategy`. If a prop was previously unset, this just sets it.\\n *\\n * @param {function} mergeStrategy\\n * @return {function}\\n */\\nfunction createTransferStrategy(mergeStrategy) {\\n  return function(props, key, value) {\\n    if (!props.hasOwnProperty(key)) {\\n      props[key] = value;\\n    } else {\\n      props[key] = mergeStrategy(props[key], value);\\n    }\\n  };\\n}\\n\\nvar transferStrategyMerge = createTransferStrategy(function(a, b) {\\n  // `merge` overrides the first object's (`props[key]` above) keys using the\\n  // second object's (`value`) keys. An object's style's existing `propA` would\\n  // get overridden. Flip the order here.\\n  return assign({}, b, a);\\n});\\n\\n/**\\n * Transfer strategies dictate how props are transferred by `transferPropsTo`.\\n * NOTE: if you add any more exceptions to this list you should be sure to\\n * update `cloneWithProps()` accordingly.\\n */\\nvar TransferStrategies = {\\n  /**\\n   * Never transfer `children`.\\n   */\\n  children: emptyFunction,\\n  /**\\n   * Transfer the `className` prop by merging them.\\n   */\\n  className: createTransferStrategy(joinClasses),\\n  /**\\n   * Transfer the `style` prop (which is an object) by merging them.\\n   */\\n  style: transferStrategyMerge\\n};\\n\\n/**\\n * Mutates the first argument by transferring the properties from the second\\n * argument.\\n *\\n * @param {object} props\\n * @param {object} newProps\\n * @return {object}\\n */\\nfunction transferInto(props, newProps) {\\n  for (var thisKey in newProps) {\\n    if (!newProps.hasOwnProperty(thisKey)) {\\n      continue;\\n    }\\n\\n    var transferStrategy = TransferStrategies[thisKey];\\n\\n    if (transferStrategy && TransferStrategies.hasOwnProperty(thisKey)) {\\n      transferStrategy(props, thisKey, newProps[thisKey]);\\n    } else if (!props.hasOwnProperty(thisKey)) {\\n      props[thisKey] = newProps[thisKey];\\n    }\\n  }\\n  return props;\\n}\\n\\n/**\\n * ReactPropTransferer are capable of transferring props to another component\\n * using a `transferPropsTo` method.\\n *\\n * @class ReactPropTransferer\\n */\\nvar ReactPropTransferer = {\\n\\n  TransferStrategies: TransferStrategies,\\n\\n  /**\\n   * Merge two props objects using TransferStrategies.\\n   *\\n   * @param {object} oldProps original props (they take precedence)\\n   * @param {object} newProps new props to merge in\\n   * @return {object} a new object containing both sets of props merged.\\n   */\\n  mergeProps: function(oldProps, newProps) {\\n    return transferInto(assign({}, oldProps), newProps);\\n  },\\n\\n  /**\\n   * @lends {ReactPropTransferer.prototype}\\n   */\\n  Mixin: {\\n\\n    /**\\n     * Transfer props from this component to a target component.\\n     *\\n     * Props that do not have an explicit transfer strategy will be transferred\\n     * only if the target component does not already have the prop set.\\n     *\\n     * This is usually used to pass down props to a returned root component.\\n     *\\n     * @param {ReactElement} element Component receiving the properties.\\n     * @return {ReactElement} The supplied `component`.\\n     * @final\\n     * @protected\\n     */\\n    transferPropsTo: function(element) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        element._owner === this,\\n        '%s: You can\\\\'t call transferPropsTo() on a component that you ' +\\n        'don\\\\'t own, %s. This usually means you are calling ' +\\n        'transferPropsTo() on a component passed in as props or children.',\\n        this.constructor.displayName,\\n        typeof element.type === 'string' ?\\n        element.type :\\n        element.type.displayName\\n      ) : invariant(element._owner === this));\\n\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        if (!didWarn) {\\n          didWarn = true;\\n          (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n            false,\\n            'transferPropsTo is deprecated. ' +\\n            'See http://fb.me/react-transferpropsto for more information.'\\n          ) : null);\\n        }\\n      }\\n\\n      // Because elements are immutable we have to merge into the existing\\n      // props object rather than clone it.\\n      transferInto(element.props, this.props);\\n\\n      return element;\\n    }\\n\\n  }\\n};\\n\\nmodule.exports = ReactPropTransferer;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactPropTransferer.js\\n ** module id = 37\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactPropTransferer.js?\");\n\n/***/ },\n/* 38 */\n/*!************************************!*\\\n  !*** ./~/react/lib/joinClasses.js ***!\n  \\************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule joinClasses\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Combines multiple className strings into one.\\n * http://jsperf.com/joinclasses-args-vs-array\\n *\\n * @param {...?string} classes\\n * @return {string}\\n */\\nfunction joinClasses(className/*, ... */) {\\n  if (!className) {\\n    className = '';\\n  }\\n  var nextClass;\\n  var argLength = arguments.length;\\n  if (argLength > 1) {\\n    for (var ii = 1; ii < argLength; ii++) {\\n      nextClass = arguments[ii];\\n      if (nextClass) {\\n        className = (className ? className + ' ' : '') + nextClass;\\n      }\\n    }\\n  }\\n  return className;\\n}\\n\\nmodule.exports = joinClasses;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/joinClasses.js\\n ** module id = 38\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/joinClasses.js?\");\n\n/***/ },\n/* 39 */\n/*!***************************************************!*\\\n  !*** ./~/react/lib/ReactPropTypeLocationNames.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactPropTypeLocationNames\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactPropTypeLocationNames = {};\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  ReactPropTypeLocationNames = {\\n    prop: 'prop',\\n    context: 'context',\\n    childContext: 'child context'\\n  };\\n}\\n\\nmodule.exports = ReactPropTypeLocationNames;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactPropTypeLocationNames.js\\n ** module id = 39\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactPropTypeLocationNames.js?\");\n\n/***/ },\n/* 40 */\n/*!**************************************************!*\\\n  !*** ./~/react/lib/instantiateReactComponent.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule instantiateReactComponent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactLegacyElement = __webpack_require__(/*! ./ReactLegacyElement */ 36);\\nvar ReactNativeComponent = __webpack_require__(/*! ./ReactNativeComponent */ 41);\\nvar ReactEmptyComponent = __webpack_require__(/*! ./ReactEmptyComponent */ 34);\\n\\n/**\\n * Given an `element` create an instance that will actually be mounted.\\n *\\n * @param {object} element\\n * @param {*} parentCompositeType The composite type that resolved this.\\n * @return {object} A new instance of the element's constructor.\\n * @protected\\n */\\nfunction instantiateReactComponent(element, parentCompositeType) {\\n  var instance;\\n\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      element && (typeof element.type === 'function' ||\\n                     typeof element.type === 'string'),\\n      'Only functions or strings can be mounted as React components.'\\n    ) : null);\\n\\n    // Resolve mock instances\\n    if (element.type._mockedReactClassConstructor) {\\n      // If this is a mocked class, we treat the legacy factory as if it was the\\n      // class constructor for future proofing unit tests. Because this might\\n      // be mocked as a legacy factory, we ignore any warnings triggerd by\\n      // this temporary hack.\\n      ReactLegacyElement._isLegacyCallWarningEnabled = false;\\n      try {\\n        instance = new element.type._mockedReactClassConstructor(\\n          element.props\\n        );\\n      } finally {\\n        ReactLegacyElement._isLegacyCallWarningEnabled = true;\\n      }\\n\\n      // If the mock implementation was a legacy factory, then it returns a\\n      // element. We need to turn this into a real component instance.\\n      if (ReactElement.isValidElement(instance)) {\\n        instance = new instance.type(instance.props);\\n      }\\n\\n      var render = instance.render;\\n      if (!render) {\\n        // For auto-mocked factories, the prototype isn't shimmed and therefore\\n        // there is no render function on the instance. We replace the whole\\n        // component with an empty component instance instead.\\n        element = ReactEmptyComponent.getEmptyComponent();\\n      } else {\\n        if (render._isMockFunction && !render._getMockImplementation()) {\\n          // Auto-mocked components may have a prototype with a mocked render\\n          // function. For those, we'll need to mock the result of the render\\n          // since we consider undefined to be invalid results from render.\\n          render.mockImplementation(\\n            ReactEmptyComponent.getEmptyComponent\\n          );\\n        }\\n        instance.construct(element);\\n        return instance;\\n      }\\n    }\\n  }\\n\\n  // Special case string values\\n  if (typeof element.type === 'string') {\\n    instance = ReactNativeComponent.createInstanceForTag(\\n      element.type,\\n      element.props,\\n      parentCompositeType\\n    );\\n  } else {\\n    // Normal case for non-mocks and non-strings\\n    instance = new element.type(element.props);\\n  }\\n\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      typeof instance.construct === 'function' &&\\n      typeof instance.mountComponent === 'function' &&\\n      typeof instance.receiveComponent === 'function',\\n      'Only React Components can be mounted.'\\n    ) : null);\\n  }\\n\\n  // This actually sets up the internal instance. This will become decoupled\\n  // from the public instance in a future diff.\\n  instance.construct(element);\\n\\n  return instance;\\n}\\n\\nmodule.exports = instantiateReactComponent;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/instantiateReactComponent.js\\n ** module id = 40\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/instantiateReactComponent.js?\");\n\n/***/ },\n/* 41 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ReactNativeComponent.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactNativeComponent\\n */\\n\\n\\\"use strict\\\";\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nvar genericComponentClass = null;\\n// This registry keeps track of wrapper classes around native tags\\nvar tagToComponentClass = {};\\n\\nvar ReactNativeComponentInjection = {\\n  // This accepts a class that receives the tag string. This is a catch all\\n  // that can render any kind of tag.\\n  injectGenericComponentClass: function(componentClass) {\\n    genericComponentClass = componentClass;\\n  },\\n  // This accepts a keyed object with classes as values. Each key represents a\\n  // tag. That particular tag will use this class instead of the generic one.\\n  injectComponentClasses: function(componentClasses) {\\n    assign(tagToComponentClass, componentClasses);\\n  }\\n};\\n\\n/**\\n * Create an internal class for a specific tag.\\n *\\n * @param {string} tag The tag for which to create an internal instance.\\n * @param {any} props The props passed to the instance constructor.\\n * @return {ReactComponent} component The injected empty component.\\n */\\nfunction createInstanceForTag(tag, props, parentType) {\\n  var componentClass = tagToComponentClass[tag];\\n  if (componentClass == null) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      genericComponentClass,\\n      'There is no registered component for the tag %s',\\n      tag\\n    ) : invariant(genericComponentClass));\\n    return new genericComponentClass(tag, props);\\n  }\\n  if (parentType === tag) {\\n    // Avoid recursion\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      genericComponentClass,\\n      'There is no registered component for the tag %s',\\n      tag\\n    ) : invariant(genericComponentClass));\\n    return new genericComponentClass(tag, props);\\n  }\\n  // Unwrap legacy factories\\n  return new componentClass.type(props);\\n}\\n\\nvar ReactNativeComponent = {\\n  createInstanceForTag: createInstanceForTag,\\n  injection: ReactNativeComponentInjection\\n};\\n\\nmodule.exports = ReactNativeComponent;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactNativeComponent.js\\n ** module id = 41\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactNativeComponent.js?\");\n\n/***/ },\n/* 42 */\n/*!******************************!*\\\n  !*** ./~/react/lib/keyOf.js ***!\n  \\******************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule keyOf\\n */\\n\\n/**\\n * Allows extraction of a minified key. Let's the build system minify keys\\n * without loosing the ability to dynamically use key strings as values\\n * themselves. Pass in an object with a single key/val pair and it will return\\n * you the string key of that single record. Suppose you want to grab the\\n * value for a key 'className' inside of an object. Key/val minification may\\n * have aliased that key to be 'xa12'. keyOf({className: null}) will return\\n * 'xa12' in that case. Resolve keys you want to use once at startup time, then\\n * reuse those resolutions.\\n */\\nvar keyOf = function(oneKeyObj) {\\n  var key;\\n  for (key in oneKeyObj) {\\n    if (!oneKeyObj.hasOwnProperty(key)) {\\n      continue;\\n    }\\n    return key;\\n  }\\n  return null;\\n};\\n\\n\\nmodule.exports = keyOf;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/keyOf.js\\n ** module id = 42\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/keyOf.js?\");\n\n/***/ },\n/* 43 */\n/*!**********************************!*\\\n  !*** ./~/react/lib/mapObject.js ***!\n  \\**********************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule mapObject\\n */\\n\\n'use strict';\\n\\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\\n\\n/**\\n * Executes the provided `callback` once for each enumerable own property in the\\n * object and constructs a new object from the results. The `callback` is\\n * invoked with three arguments:\\n *\\n *  - the property value\\n *  - the property name\\n *  - the object being traversed\\n *\\n * Properties that are added after the call to `mapObject` will not be visited\\n * by `callback`. If the values of existing properties are changed, the value\\n * passed to `callback` will be the value at the time `mapObject` visits them.\\n * Properties that are deleted before being visited are not visited.\\n *\\n * @grep function objectMap()\\n * @grep function objMap()\\n *\\n * @param {?object} object\\n * @param {function} callback\\n * @param {*} context\\n * @return {?object}\\n */\\nfunction mapObject(object, callback, context) {\\n  if (!object) {\\n    return null;\\n  }\\n  var result = {};\\n  for (var name in object) {\\n    if (hasOwnProperty.call(object, name)) {\\n      result[name] = callback.call(context, object[name], name, object);\\n    }\\n  }\\n  return result;\\n}\\n\\nmodule.exports = mapObject;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/mapObject.js\\n ** module id = 43\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/mapObject.js?\");\n\n/***/ },\n/* 44 */\n/*!***************************************************!*\\\n  !*** ./~/react/lib/shouldUpdateReactComponent.js ***!\n  \\***************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule shouldUpdateReactComponent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Given a `prevElement` and `nextElement`, determines if the existing\\n * instance should be updated as opposed to being destroyed or replaced by a new\\n * instance. Both arguments are elements. This ensures that this logic can\\n * operate on stateless trees without any backing instance.\\n *\\n * @param {?object} prevElement\\n * @param {?object} nextElement\\n * @return {boolean} True if the existing instance should be updated.\\n * @protected\\n */\\nfunction shouldUpdateReactComponent(prevElement, nextElement) {\\n  if (prevElement && nextElement &&\\n      prevElement.type === nextElement.type &&\\n      prevElement.key === nextElement.key &&\\n      prevElement._owner === nextElement._owner) {\\n    return true;\\n  }\\n  return false;\\n}\\n\\nmodule.exports = shouldUpdateReactComponent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/shouldUpdateReactComponent.js\\n ** module id = 44\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/shouldUpdateReactComponent.js?\");\n\n/***/ },\n/* 45 */\n/*!*********************************!*\\\n  !*** ./~/react/lib/ReactDOM.js ***!\n  \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOM\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactElementValidator = __webpack_require__(/*! ./ReactElementValidator */ 31);\\nvar ReactLegacyElement = __webpack_require__(/*! ./ReactLegacyElement */ 36);\\n\\nvar mapObject = __webpack_require__(/*! ./mapObject */ 43);\\n\\n/**\\n * Create a factory that creates HTML tag elements.\\n *\\n * @param {string} tag Tag name (e.g. `div`).\\n * @private\\n */\\nfunction createDOMFactory(tag) {\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    return ReactLegacyElement.markNonLegacyFactory(\\n      ReactElementValidator.createFactory(tag)\\n    );\\n  }\\n  return ReactLegacyElement.markNonLegacyFactory(\\n    ReactElement.createFactory(tag)\\n  );\\n}\\n\\n/**\\n * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.\\n * This is also accessible via `React.DOM`.\\n *\\n * @public\\n */\\nvar ReactDOM = mapObject({\\n  a: 'a',\\n  abbr: 'abbr',\\n  address: 'address',\\n  area: 'area',\\n  article: 'article',\\n  aside: 'aside',\\n  audio: 'audio',\\n  b: 'b',\\n  base: 'base',\\n  bdi: 'bdi',\\n  bdo: 'bdo',\\n  big: 'big',\\n  blockquote: 'blockquote',\\n  body: 'body',\\n  br: 'br',\\n  button: 'button',\\n  canvas: 'canvas',\\n  caption: 'caption',\\n  cite: 'cite',\\n  code: 'code',\\n  col: 'col',\\n  colgroup: 'colgroup',\\n  data: 'data',\\n  datalist: 'datalist',\\n  dd: 'dd',\\n  del: 'del',\\n  details: 'details',\\n  dfn: 'dfn',\\n  dialog: 'dialog',\\n  div: 'div',\\n  dl: 'dl',\\n  dt: 'dt',\\n  em: 'em',\\n  embed: 'embed',\\n  fieldset: 'fieldset',\\n  figcaption: 'figcaption',\\n  figure: 'figure',\\n  footer: 'footer',\\n  form: 'form',\\n  h1: 'h1',\\n  h2: 'h2',\\n  h3: 'h3',\\n  h4: 'h4',\\n  h5: 'h5',\\n  h6: 'h6',\\n  head: 'head',\\n  header: 'header',\\n  hr: 'hr',\\n  html: 'html',\\n  i: 'i',\\n  iframe: 'iframe',\\n  img: 'img',\\n  input: 'input',\\n  ins: 'ins',\\n  kbd: 'kbd',\\n  keygen: 'keygen',\\n  label: 'label',\\n  legend: 'legend',\\n  li: 'li',\\n  link: 'link',\\n  main: 'main',\\n  map: 'map',\\n  mark: 'mark',\\n  menu: 'menu',\\n  menuitem: 'menuitem',\\n  meta: 'meta',\\n  meter: 'meter',\\n  nav: 'nav',\\n  noscript: 'noscript',\\n  object: 'object',\\n  ol: 'ol',\\n  optgroup: 'optgroup',\\n  option: 'option',\\n  output: 'output',\\n  p: 'p',\\n  param: 'param',\\n  picture: 'picture',\\n  pre: 'pre',\\n  progress: 'progress',\\n  q: 'q',\\n  rp: 'rp',\\n  rt: 'rt',\\n  ruby: 'ruby',\\n  s: 's',\\n  samp: 'samp',\\n  script: 'script',\\n  section: 'section',\\n  select: 'select',\\n  small: 'small',\\n  source: 'source',\\n  span: 'span',\\n  strong: 'strong',\\n  style: 'style',\\n  sub: 'sub',\\n  summary: 'summary',\\n  sup: 'sup',\\n  table: 'table',\\n  tbody: 'tbody',\\n  td: 'td',\\n  textarea: 'textarea',\\n  tfoot: 'tfoot',\\n  th: 'th',\\n  thead: 'thead',\\n  time: 'time',\\n  title: 'title',\\n  tr: 'tr',\\n  track: 'track',\\n  u: 'u',\\n  ul: 'ul',\\n  'var': 'var',\\n  video: 'video',\\n  wbr: 'wbr',\\n\\n  // SVG\\n  circle: 'circle',\\n  defs: 'defs',\\n  ellipse: 'ellipse',\\n  g: 'g',\\n  line: 'line',\\n  linearGradient: 'linearGradient',\\n  mask: 'mask',\\n  path: 'path',\\n  pattern: 'pattern',\\n  polygon: 'polygon',\\n  polyline: 'polyline',\\n  radialGradient: 'radialGradient',\\n  rect: 'rect',\\n  stop: 'stop',\\n  svg: 'svg',\\n  text: 'text',\\n  tspan: 'tspan'\\n\\n}, createDOMFactory);\\n\\nmodule.exports = ReactDOM;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOM.js\\n ** module id = 45\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOM.js?\");\n\n/***/ },\n/* 46 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/ReactDOMComponent.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMComponent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar CSSPropertyOperations = __webpack_require__(/*! ./CSSPropertyOperations */ 47);\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 8);\\nvar DOMPropertyOperations = __webpack_require__(/*! ./DOMPropertyOperations */ 7);\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 23);\\nvar ReactBrowserEventEmitter = __webpack_require__(/*! ./ReactBrowserEventEmitter */ 60);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar ReactMultiChild = __webpack_require__(/*! ./ReactMultiChild */ 71);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar escapeTextForBrowser = __webpack_require__(/*! ./escapeTextForBrowser */ 9);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar isEventSupported = __webpack_require__(/*! ./isEventSupported */ 68);\\nvar keyOf = __webpack_require__(/*! ./keyOf */ 42);\\nvar monitorCodeUse = __webpack_require__(/*! ./monitorCodeUse */ 33);\\n\\nvar deleteListener = ReactBrowserEventEmitter.deleteListener;\\nvar listenTo = ReactBrowserEventEmitter.listenTo;\\nvar registrationNameModules = ReactBrowserEventEmitter.registrationNameModules;\\n\\n// For quickly matching children type, to test if can be treated as content.\\nvar CONTENT_TYPES = {'string': true, 'number': true};\\n\\nvar STYLE = keyOf({style: null});\\n\\nvar ELEMENT_NODE_TYPE = 1;\\n\\n/**\\n * @param {?object} props\\n */\\nfunction assertValidProps(props) {\\n  if (!props) {\\n    return;\\n  }\\n  // Note the use of `==` which checks for null or undefined.\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    props.children == null || props.dangerouslySetInnerHTML == null,\\n    'Can only set one of `children` or `props.dangerouslySetInnerHTML`.'\\n  ) : invariant(props.children == null || props.dangerouslySetInnerHTML == null));\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    if (props.contentEditable && props.children != null) {\\n      console.warn(\\n        'A component is `contentEditable` and contains `children` managed by ' +\\n        'React. It is now your responsibility to guarantee that none of those '+\\n        'nodes are unexpectedly modified or duplicated. This is probably not ' +\\n        'intentional.'\\n      );\\n    }\\n  }\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    props.style == null || typeof props.style === 'object',\\n    'The `style` prop expects a mapping from style properties to values, ' +\\n    'not a string.'\\n  ) : invariant(props.style == null || typeof props.style === 'object'));\\n}\\n\\nfunction putListener(id, registrationName, listener, transaction) {\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    // IE8 has no API for event capturing and the `onScroll` event doesn't\\n    // bubble.\\n    if (registrationName === 'onScroll' &&\\n        !isEventSupported('scroll', true)) {\\n      monitorCodeUse('react_no_scroll_event');\\n      console.warn('This browser doesn\\\\'t support the `onScroll` event');\\n    }\\n  }\\n  var container = ReactMount.findReactContainerForID(id);\\n  if (container) {\\n    var doc = container.nodeType === ELEMENT_NODE_TYPE ?\\n      container.ownerDocument :\\n      container;\\n    listenTo(registrationName, doc);\\n  }\\n  transaction.getPutListenerQueue().enqueuePutListener(\\n    id,\\n    registrationName,\\n    listener\\n  );\\n}\\n\\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\\n// those special cased tags.\\n\\nvar omittedCloseTags = {\\n  'area': true,\\n  'base': true,\\n  'br': true,\\n  'col': true,\\n  'embed': true,\\n  'hr': true,\\n  'img': true,\\n  'input': true,\\n  'keygen': true,\\n  'link': true,\\n  'meta': true,\\n  'param': true,\\n  'source': true,\\n  'track': true,\\n  'wbr': true\\n  // NOTE: menuitem's close tag should be omitted, but that causes problems.\\n};\\n\\n// We accept any tag to be rendered but since this gets injected into abitrary\\n// HTML, we want to make sure that it's a safe tag.\\n// http://www.w3.org/TR/REC-xml/#NT-Name\\n\\nvar VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\\\\.\\\\-\\\\d]*$/; // Simplified subset\\nvar validatedTagCache = {};\\nvar hasOwnProperty = {}.hasOwnProperty;\\n\\nfunction validateDangerousTag(tag) {\\n  if (!hasOwnProperty.call(validatedTagCache, tag)) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(VALID_TAG_REGEX.test(tag), 'Invalid tag: %s', tag) : invariant(VALID_TAG_REGEX.test(tag)));\\n    validatedTagCache[tag] = true;\\n  }\\n}\\n\\n/**\\n * Creates a new React class that is idempotent and capable of containing other\\n * React components. It accepts event listeners and DOM properties that are\\n * valid according to `DOMProperty`.\\n *\\n *  - Event listeners: `onClick`, `onMouseDown`, etc.\\n *  - DOM properties: `className`, `name`, `title`, etc.\\n *\\n * The `style` property functions differently from the DOM API. It accepts an\\n * object mapping of style properties to values.\\n *\\n * @constructor ReactDOMComponent\\n * @extends ReactComponent\\n * @extends ReactMultiChild\\n */\\nfunction ReactDOMComponent(tag) {\\n  validateDangerousTag(tag);\\n  this._tag = tag;\\n  this.tagName = tag.toUpperCase();\\n}\\n\\nReactDOMComponent.displayName = 'ReactDOMComponent';\\n\\nReactDOMComponent.Mixin = {\\n\\n  /**\\n   * Generates root tag markup then recurses. This method has side effects and\\n   * is not idempotent.\\n   *\\n   * @internal\\n   * @param {string} rootID The root DOM ID for this node.\\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n   * @param {number} mountDepth number of components in the owner hierarchy\\n   * @return {string} The computed markup.\\n   */\\n  mountComponent: ReactPerf.measure(\\n    'ReactDOMComponent',\\n    'mountComponent',\\n    function(rootID, transaction, mountDepth) {\\n      ReactComponent.Mixin.mountComponent.call(\\n        this,\\n        rootID,\\n        transaction,\\n        mountDepth\\n      );\\n      assertValidProps(this.props);\\n      var closeTag = omittedCloseTags[this._tag] ? '' : '</' + this._tag + '>';\\n      return (\\n        this._createOpenTagMarkupAndPutListeners(transaction) +\\n        this._createContentMarkup(transaction) +\\n        closeTag\\n      );\\n    }\\n  ),\\n\\n  /**\\n   * Creates markup for the open tag and all attributes.\\n   *\\n   * This method has side effects because events get registered.\\n   *\\n   * Iterating over object properties is faster than iterating over arrays.\\n   * @see http://jsperf.com/obj-vs-arr-iteration\\n   *\\n   * @private\\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n   * @return {string} Markup of opening tag.\\n   */\\n  _createOpenTagMarkupAndPutListeners: function(transaction) {\\n    var props = this.props;\\n    var ret = '<' + this._tag;\\n\\n    for (var propKey in props) {\\n      if (!props.hasOwnProperty(propKey)) {\\n        continue;\\n      }\\n      var propValue = props[propKey];\\n      if (propValue == null) {\\n        continue;\\n      }\\n      if (registrationNameModules.hasOwnProperty(propKey)) {\\n        putListener(this._rootNodeID, propKey, propValue, transaction);\\n      } else {\\n        if (propKey === STYLE) {\\n          if (propValue) {\\n            propValue = props.style = assign({}, props.style);\\n          }\\n          propValue = CSSPropertyOperations.createMarkupForStyles(propValue);\\n        }\\n        var markup =\\n          DOMPropertyOperations.createMarkupForProperty(propKey, propValue);\\n        if (markup) {\\n          ret += ' ' + markup;\\n        }\\n      }\\n    }\\n\\n    // For static pages, no need to put React ID and checksum. Saves lots of\\n    // bytes.\\n    if (transaction.renderToStaticMarkup) {\\n      return ret + '>';\\n    }\\n\\n    var markupForID = DOMPropertyOperations.createMarkupForID(this._rootNodeID);\\n    return ret + ' ' + markupForID + '>';\\n  },\\n\\n  /**\\n   * Creates markup for the content between the tags.\\n   *\\n   * @private\\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n   * @return {string} Content markup.\\n   */\\n  _createContentMarkup: function(transaction) {\\n    // Intentional use of != to avoid catching zero/false.\\n    var innerHTML = this.props.dangerouslySetInnerHTML;\\n    if (innerHTML != null) {\\n      if (innerHTML.__html != null) {\\n        return innerHTML.__html;\\n      }\\n    } else {\\n      var contentToUse =\\n        CONTENT_TYPES[typeof this.props.children] ? this.props.children : null;\\n      var childrenToUse = contentToUse != null ? null : this.props.children;\\n      if (contentToUse != null) {\\n        return escapeTextForBrowser(contentToUse);\\n      } else if (childrenToUse != null) {\\n        var mountImages = this.mountChildren(\\n          childrenToUse,\\n          transaction\\n        );\\n        return mountImages.join('');\\n      }\\n    }\\n    return '';\\n  },\\n\\n  receiveComponent: function(nextElement, transaction) {\\n    if (nextElement === this._currentElement &&\\n        nextElement._owner != null) {\\n      // Since elements are immutable after the owner is rendered,\\n      // we can do a cheap identity compare here to determine if this is a\\n      // superfluous reconcile. It's possible for state to be mutable but such\\n      // change should trigger an update of the owner which would recreate\\n      // the element. We explicitly check for the existence of an owner since\\n      // it's possible for a element created outside a composite to be\\n      // deeply mutated and reused.\\n      return;\\n    }\\n\\n    ReactComponent.Mixin.receiveComponent.call(\\n      this,\\n      nextElement,\\n      transaction\\n    );\\n  },\\n\\n  /**\\n   * Updates a native DOM component after it has already been allocated and\\n   * attached to the DOM. Reconciles the root DOM node, then recurses.\\n   *\\n   * @param {ReactReconcileTransaction} transaction\\n   * @param {ReactElement} prevElement\\n   * @internal\\n   * @overridable\\n   */\\n  updateComponent: ReactPerf.measure(\\n    'ReactDOMComponent',\\n    'updateComponent',\\n    function(transaction, prevElement) {\\n      assertValidProps(this._currentElement.props);\\n      ReactComponent.Mixin.updateComponent.call(\\n        this,\\n        transaction,\\n        prevElement\\n      );\\n      this._updateDOMProperties(prevElement.props, transaction);\\n      this._updateDOMChildren(prevElement.props, transaction);\\n    }\\n  ),\\n\\n  /**\\n   * Reconciles the properties by detecting differences in property values and\\n   * updating the DOM as necessary. This function is probably the single most\\n   * critical path for performance optimization.\\n   *\\n   * TODO: Benchmark whether checking for changed values in memory actually\\n   *       improves performance (especially statically positioned elements).\\n   * TODO: Benchmark the effects of putting this at the top since 99% of props\\n   *       do not change for a given reconciliation.\\n   * TODO: Benchmark areas that can be improved with caching.\\n   *\\n   * @private\\n   * @param {object} lastProps\\n   * @param {ReactReconcileTransaction} transaction\\n   */\\n  _updateDOMProperties: function(lastProps, transaction) {\\n    var nextProps = this.props;\\n    var propKey;\\n    var styleName;\\n    var styleUpdates;\\n    for (propKey in lastProps) {\\n      if (nextProps.hasOwnProperty(propKey) ||\\n         !lastProps.hasOwnProperty(propKey)) {\\n        continue;\\n      }\\n      if (propKey === STYLE) {\\n        var lastStyle = lastProps[propKey];\\n        for (styleName in lastStyle) {\\n          if (lastStyle.hasOwnProperty(styleName)) {\\n            styleUpdates = styleUpdates || {};\\n            styleUpdates[styleName] = '';\\n          }\\n        }\\n      } else if (registrationNameModules.hasOwnProperty(propKey)) {\\n        deleteListener(this._rootNodeID, propKey);\\n      } else if (\\n          DOMProperty.isStandardName[propKey] ||\\n          DOMProperty.isCustomAttribute(propKey)) {\\n        ReactComponent.BackendIDOperations.deletePropertyByID(\\n          this._rootNodeID,\\n          propKey\\n        );\\n      }\\n    }\\n    for (propKey in nextProps) {\\n      var nextProp = nextProps[propKey];\\n      var lastProp = lastProps[propKey];\\n      if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp) {\\n        continue;\\n      }\\n      if (propKey === STYLE) {\\n        if (nextProp) {\\n          nextProp = nextProps.style = assign({}, nextProp);\\n        }\\n        if (lastProp) {\\n          // Unset styles on `lastProp` but not on `nextProp`.\\n          for (styleName in lastProp) {\\n            if (lastProp.hasOwnProperty(styleName) &&\\n                (!nextProp || !nextProp.hasOwnProperty(styleName))) {\\n              styleUpdates = styleUpdates || {};\\n              styleUpdates[styleName] = '';\\n            }\\n          }\\n          // Update styles that changed since `lastProp`.\\n          for (styleName in nextProp) {\\n            if (nextProp.hasOwnProperty(styleName) &&\\n                lastProp[styleName] !== nextProp[styleName]) {\\n              styleUpdates = styleUpdates || {};\\n              styleUpdates[styleName] = nextProp[styleName];\\n            }\\n          }\\n        } else {\\n          // Relies on `updateStylesByID` not mutating `styleUpdates`.\\n          styleUpdates = nextProp;\\n        }\\n      } else if (registrationNameModules.hasOwnProperty(propKey)) {\\n        putListener(this._rootNodeID, propKey, nextProp, transaction);\\n      } else if (\\n          DOMProperty.isStandardName[propKey] ||\\n          DOMProperty.isCustomAttribute(propKey)) {\\n        ReactComponent.BackendIDOperations.updatePropertyByID(\\n          this._rootNodeID,\\n          propKey,\\n          nextProp\\n        );\\n      }\\n    }\\n    if (styleUpdates) {\\n      ReactComponent.BackendIDOperations.updateStylesByID(\\n        this._rootNodeID,\\n        styleUpdates\\n      );\\n    }\\n  },\\n\\n  /**\\n   * Reconciles the children with the various properties that affect the\\n   * children content.\\n   *\\n   * @param {object} lastProps\\n   * @param {ReactReconcileTransaction} transaction\\n   */\\n  _updateDOMChildren: function(lastProps, transaction) {\\n    var nextProps = this.props;\\n\\n    var lastContent =\\n      CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null;\\n    var nextContent =\\n      CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null;\\n\\n    var lastHtml =\\n      lastProps.dangerouslySetInnerHTML &&\\n      lastProps.dangerouslySetInnerHTML.__html;\\n    var nextHtml =\\n      nextProps.dangerouslySetInnerHTML &&\\n      nextProps.dangerouslySetInnerHTML.__html;\\n\\n    // Note the use of `!=` which checks for null or undefined.\\n    var lastChildren = lastContent != null ? null : lastProps.children;\\n    var nextChildren = nextContent != null ? null : nextProps.children;\\n\\n    // If we're switching from children to content/html or vice versa, remove\\n    // the old content\\n    var lastHasContentOrHtml = lastContent != null || lastHtml != null;\\n    var nextHasContentOrHtml = nextContent != null || nextHtml != null;\\n    if (lastChildren != null && nextChildren == null) {\\n      this.updateChildren(null, transaction);\\n    } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {\\n      this.updateTextContent('');\\n    }\\n\\n    if (nextContent != null) {\\n      if (lastContent !== nextContent) {\\n        this.updateTextContent('' + nextContent);\\n      }\\n    } else if (nextHtml != null) {\\n      if (lastHtml !== nextHtml) {\\n        ReactComponent.BackendIDOperations.updateInnerHTMLByID(\\n          this._rootNodeID,\\n          nextHtml\\n        );\\n      }\\n    } else if (nextChildren != null) {\\n      this.updateChildren(nextChildren, transaction);\\n    }\\n  },\\n\\n  /**\\n   * Destroys all event registrations for this instance. Does not remove from\\n   * the DOM. That must be done by the parent.\\n   *\\n   * @internal\\n   */\\n  unmountComponent: function() {\\n    this.unmountChildren();\\n    ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID);\\n    ReactComponent.Mixin.unmountComponent.call(this);\\n  }\\n\\n};\\n\\nassign(\\n  ReactDOMComponent.prototype,\\n  ReactComponent.Mixin,\\n  ReactDOMComponent.Mixin,\\n  ReactMultiChild.Mixin,\\n  ReactBrowserComponentMixin\\n);\\n\\nmodule.exports = ReactDOMComponent;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMComponent.js\\n ** module id = 46\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMComponent.js?\");\n\n/***/ },\n/* 47 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/CSSPropertyOperations.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule CSSPropertyOperations\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar CSSProperty = __webpack_require__(/*! ./CSSProperty */ 48);\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar camelizeStyleName = __webpack_require__(/*! ./camelizeStyleName */ 50);\\nvar dangerousStyleValue = __webpack_require__(/*! ./dangerousStyleValue */ 52);\\nvar hyphenateStyleName = __webpack_require__(/*! ./hyphenateStyleName */ 53);\\nvar memoizeStringOnly = __webpack_require__(/*! ./memoizeStringOnly */ 10);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar processStyleName = memoizeStringOnly(function(styleName) {\\n  return hyphenateStyleName(styleName);\\n});\\n\\nvar styleFloatAccessor = 'cssFloat';\\nif (ExecutionEnvironment.canUseDOM) {\\n  // IE8 only supports accessing cssFloat (standard) as styleFloat\\n  if (document.documentElement.style.cssFloat === undefined) {\\n    styleFloatAccessor = 'styleFloat';\\n  }\\n}\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  var warnedStyleNames = {};\\n\\n  var warnHyphenatedStyleName = function(name) {\\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\\n      return;\\n    }\\n\\n    warnedStyleNames[name] = true;\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      false,\\n      'Unsupported style property ' + name + '. Did you mean ' +\\n      camelizeStyleName(name) + '?'\\n    ) : null);\\n  };\\n}\\n\\n/**\\n * Operations for dealing with CSS properties.\\n */\\nvar CSSPropertyOperations = {\\n\\n  /**\\n   * Serializes a mapping of style properties for use as inline styles:\\n   *\\n   *   > createMarkupForStyles({width: '200px', height: 0})\\n   *   \\\"width:200px;height:0;\\\"\\n   *\\n   * Undefined values are ignored so that declarative programming is easier.\\n   * The result should be HTML-escaped before insertion into the DOM.\\n   *\\n   * @param {object} styles\\n   * @return {?string}\\n   */\\n  createMarkupForStyles: function(styles) {\\n    var serialized = '';\\n    for (var styleName in styles) {\\n      if (!styles.hasOwnProperty(styleName)) {\\n        continue;\\n      }\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        if (styleName.indexOf('-') > -1) {\\n          warnHyphenatedStyleName(styleName);\\n        }\\n      }\\n      var styleValue = styles[styleName];\\n      if (styleValue != null) {\\n        serialized += processStyleName(styleName) + ':';\\n        serialized += dangerousStyleValue(styleName, styleValue) + ';';\\n      }\\n    }\\n    return serialized || null;\\n  },\\n\\n  /**\\n   * Sets the value for multiple styles on a node.  If a value is specified as\\n   * '' (empty string), the corresponding style property will be unset.\\n   *\\n   * @param {DOMElement} node\\n   * @param {object} styles\\n   */\\n  setValueForStyles: function(node, styles) {\\n    var style = node.style;\\n    for (var styleName in styles) {\\n      if (!styles.hasOwnProperty(styleName)) {\\n        continue;\\n      }\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        if (styleName.indexOf('-') > -1) {\\n          warnHyphenatedStyleName(styleName);\\n        }\\n      }\\n      var styleValue = dangerousStyleValue(styleName, styles[styleName]);\\n      if (styleName === 'float') {\\n        styleName = styleFloatAccessor;\\n      }\\n      if (styleValue) {\\n        style[styleName] = styleValue;\\n      } else {\\n        var expansion = CSSProperty.shorthandPropertyExpansions[styleName];\\n        if (expansion) {\\n          // Shorthand property that IE8 won't like unsetting, so unset each\\n          // component to placate it\\n          for (var individualStyleName in expansion) {\\n            style[individualStyleName] = '';\\n          }\\n        } else {\\n          style[styleName] = '';\\n        }\\n      }\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = CSSPropertyOperations;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/CSSPropertyOperations.js\\n ** module id = 47\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/CSSPropertyOperations.js?\");\n\n/***/ },\n/* 48 */\n/*!************************************!*\\\n  !*** ./~/react/lib/CSSProperty.js ***!\n  \\************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule CSSProperty\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * CSS properties which accept numbers but are not in units of \\\"px\\\".\\n */\\nvar isUnitlessNumber = {\\n  columnCount: true,\\n  flex: true,\\n  flexGrow: true,\\n  flexShrink: true,\\n  fontWeight: true,\\n  lineClamp: true,\\n  lineHeight: true,\\n  opacity: true,\\n  order: true,\\n  orphans: true,\\n  widows: true,\\n  zIndex: true,\\n  zoom: true,\\n\\n  // SVG-related properties\\n  fillOpacity: true,\\n  strokeOpacity: true\\n};\\n\\n/**\\n * @param {string} prefix vendor-specific prefix, eg: Webkit\\n * @param {string} key style name, eg: transitionDuration\\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\\n * WebkitTransitionDuration\\n */\\nfunction prefixKey(prefix, key) {\\n  return prefix + key.charAt(0).toUpperCase() + key.substring(1);\\n}\\n\\n/**\\n * Support style names that may come passed in prefixed by adding permutations\\n * of vendor prefixes.\\n */\\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\\n\\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\\n// infinite loop, because it iterates over the newly added props too.\\nObject.keys(isUnitlessNumber).forEach(function(prop) {\\n  prefixes.forEach(function(prefix) {\\n    isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\\n  });\\n});\\n\\n/**\\n * Most style properties can be unset by doing .style[prop] = '' but IE8\\n * doesn't like doing that with shorthand properties so for the properties that\\n * IE8 breaks on, which are listed here, we instead unset each of the\\n * individual properties. See http://bugs.jquery.com/ticket/12385.\\n * The 4-value 'clock' properties like margin, padding, border-width seem to\\n * behave without any problems. Curiously, list-style works too without any\\n * special prodding.\\n */\\nvar shorthandPropertyExpansions = {\\n  background: {\\n    backgroundImage: true,\\n    backgroundPosition: true,\\n    backgroundRepeat: true,\\n    backgroundColor: true\\n  },\\n  border: {\\n    borderWidth: true,\\n    borderStyle: true,\\n    borderColor: true\\n  },\\n  borderBottom: {\\n    borderBottomWidth: true,\\n    borderBottomStyle: true,\\n    borderBottomColor: true\\n  },\\n  borderLeft: {\\n    borderLeftWidth: true,\\n    borderLeftStyle: true,\\n    borderLeftColor: true\\n  },\\n  borderRight: {\\n    borderRightWidth: true,\\n    borderRightStyle: true,\\n    borderRightColor: true\\n  },\\n  borderTop: {\\n    borderTopWidth: true,\\n    borderTopStyle: true,\\n    borderTopColor: true\\n  },\\n  font: {\\n    fontStyle: true,\\n    fontVariant: true,\\n    fontWeight: true,\\n    fontSize: true,\\n    lineHeight: true,\\n    fontFamily: true\\n  }\\n};\\n\\nvar CSSProperty = {\\n  isUnitlessNumber: isUnitlessNumber,\\n  shorthandPropertyExpansions: shorthandPropertyExpansions\\n};\\n\\nmodule.exports = CSSProperty;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/CSSProperty.js\\n ** module id = 48\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/CSSProperty.js?\");\n\n/***/ },\n/* 49 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ExecutionEnvironment.js ***!\n  \\*********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ExecutionEnvironment\\n */\\n\\n/*jslint evil: true */\\n\\n\\\"use strict\\\";\\n\\nvar canUseDOM = !!(\\n  typeof window !== 'undefined' &&\\n  window.document &&\\n  window.document.createElement\\n);\\n\\n/**\\n * Simple, lightweight module assisting with the detection and context of\\n * Worker. Helps avoid circular dependencies and allows code to reason about\\n * whether or not they are in a Worker, even if they never include the main\\n * `ReactWorker` dependency.\\n */\\nvar ExecutionEnvironment = {\\n\\n  canUseDOM: canUseDOM,\\n\\n  canUseWorkers: typeof Worker !== 'undefined',\\n\\n  canUseEventListeners:\\n    canUseDOM && !!(window.addEventListener || window.attachEvent),\\n\\n  canUseViewport: canUseDOM && !!window.screen,\\n\\n  isInWorker: !canUseDOM // For now, this is true - might change in the future.\\n\\n};\\n\\nmodule.exports = ExecutionEnvironment;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ExecutionEnvironment.js\\n ** module id = 49\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ExecutionEnvironment.js?\");\n\n/***/ },\n/* 50 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/camelizeStyleName.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule camelizeStyleName\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\nvar camelize = __webpack_require__(/*! ./camelize */ 51);\\n\\nvar msPattern = /^-ms-/;\\n\\n/**\\n * Camelcases a hyphenated CSS property name, for example:\\n *\\n *   > camelizeStyleName('background-color')\\n *   < \\\"backgroundColor\\\"\\n *   > camelizeStyleName('-moz-transition')\\n *   < \\\"MozTransition\\\"\\n *   > camelizeStyleName('-ms-transition')\\n *   < \\\"msTransition\\\"\\n *\\n * As Andi Smith suggests\\n * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\\n * is converted to lowercase `ms`.\\n *\\n * @param {string} string\\n * @return {string}\\n */\\nfunction camelizeStyleName(string) {\\n  return camelize(string.replace(msPattern, 'ms-'));\\n}\\n\\nmodule.exports = camelizeStyleName;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/camelizeStyleName.js\\n ** module id = 50\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/camelizeStyleName.js?\");\n\n/***/ },\n/* 51 */\n/*!*********************************!*\\\n  !*** ./~/react/lib/camelize.js ***!\n  \\*********************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule camelize\\n * @typechecks\\n */\\n\\nvar _hyphenPattern = /-(.)/g;\\n\\n/**\\n * Camelcases a hyphenated string, for example:\\n *\\n *   > camelize('background-color')\\n *   < \\\"backgroundColor\\\"\\n *\\n * @param {string} string\\n * @return {string}\\n */\\nfunction camelize(string) {\\n  return string.replace(_hyphenPattern, function(_, character) {\\n    return character.toUpperCase();\\n  });\\n}\\n\\nmodule.exports = camelize;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/camelize.js\\n ** module id = 51\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/camelize.js?\");\n\n/***/ },\n/* 52 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/dangerousStyleValue.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule dangerousStyleValue\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar CSSProperty = __webpack_require__(/*! ./CSSProperty */ 48);\\n\\nvar isUnitlessNumber = CSSProperty.isUnitlessNumber;\\n\\n/**\\n * Convert a value into the proper css writable value. The style name `name`\\n * should be logical (no hyphens), as specified\\n * in `CSSProperty.isUnitlessNumber`.\\n *\\n * @param {string} name CSS property name such as `topMargin`.\\n * @param {*} value CSS property value such as `10px`.\\n * @return {string} Normalized style value with dimensions applied.\\n */\\nfunction dangerousStyleValue(name, value) {\\n  // Note that we've removed escapeTextForBrowser() calls here since the\\n  // whole string will be escaped when the attribute is injected into\\n  // the markup. If you provide unsafe user data here they can inject\\n  // arbitrary CSS which may be problematic (I couldn't repro this):\\n  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\\n  // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\\n  // This is not an XSS hole but instead a potential CSS injection issue\\n  // which has lead to a greater discussion about how we're going to\\n  // trust URLs moving forward. See #2115901\\n\\n  var isEmpty = value == null || typeof value === 'boolean' || value === '';\\n  if (isEmpty) {\\n    return '';\\n  }\\n\\n  var isNonNumeric = isNaN(value);\\n  if (isNonNumeric || value === 0 ||\\n      isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {\\n    return '' + value; // cast to string\\n  }\\n\\n  if (typeof value === 'string') {\\n    value = value.trim();\\n  }\\n  return value + 'px';\\n}\\n\\nmodule.exports = dangerousStyleValue;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/dangerousStyleValue.js\\n ** module id = 52\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/dangerousStyleValue.js?\");\n\n/***/ },\n/* 53 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/hyphenateStyleName.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule hyphenateStyleName\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\nvar hyphenate = __webpack_require__(/*! ./hyphenate */ 54);\\n\\nvar msPattern = /^ms-/;\\n\\n/**\\n * Hyphenates a camelcased CSS property name, for example:\\n *\\n *   > hyphenateStyleName('backgroundColor')\\n *   < \\\"background-color\\\"\\n *   > hyphenateStyleName('MozTransition')\\n *   < \\\"-moz-transition\\\"\\n *   > hyphenateStyleName('msTransition')\\n *   < \\\"-ms-transition\\\"\\n *\\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\\n * is converted to `-ms-`.\\n *\\n * @param {string} string\\n * @return {string}\\n */\\nfunction hyphenateStyleName(string) {\\n  return hyphenate(string).replace(msPattern, '-ms-');\\n}\\n\\nmodule.exports = hyphenateStyleName;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/hyphenateStyleName.js\\n ** module id = 53\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/hyphenateStyleName.js?\");\n\n/***/ },\n/* 54 */\n/*!**********************************!*\\\n  !*** ./~/react/lib/hyphenate.js ***!\n  \\**********************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule hyphenate\\n * @typechecks\\n */\\n\\nvar _uppercasePattern = /([A-Z])/g;\\n\\n/**\\n * Hyphenates a camelcased string, for example:\\n *\\n *   > hyphenate('backgroundColor')\\n *   < \\\"background-color\\\"\\n *\\n * For CSS style names, use `hyphenateStyleName` instead which works properly\\n * with all vendor prefixes, including `ms`.\\n *\\n * @param {string} string\\n * @return {string}\\n */\\nfunction hyphenate(string) {\\n  return string.replace(_uppercasePattern, '-$1').toLowerCase();\\n}\\n\\nmodule.exports = hyphenate;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/hyphenate.js\\n ** module id = 54\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/hyphenate.js?\");\n\n/***/ },\n/* 55 */\n/*!***************************************************!*\\\n  !*** ./~/react/lib/ReactBrowserComponentMixin.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactBrowserComponentMixin\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactEmptyComponent = __webpack_require__(/*! ./ReactEmptyComponent */ 34);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nvar ReactBrowserComponentMixin = {\\n  /**\\n   * Returns the DOM node rendered by this component.\\n   *\\n   * @return {DOMElement} The root node of this component.\\n   * @final\\n   * @protected\\n   */\\n  getDOMNode: function() {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      this.isMounted(),\\n      'getDOMNode(): A component must be mounted to have a DOM node.'\\n    ) : invariant(this.isMounted()));\\n    if (ReactEmptyComponent.isNullComponentID(this._rootNodeID)) {\\n      return null;\\n    }\\n    return ReactMount.getNode(this._rootNodeID);\\n  }\\n};\\n\\nmodule.exports = ReactBrowserComponentMixin;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactBrowserComponentMixin.js\\n ** module id = 55\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactBrowserComponentMixin.js?\");\n\n/***/ },\n/* 56 */\n/*!***********************************!*\\\n  !*** ./~/react/lib/ReactMount.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactMount\\n */\\n\\n\\\"use strict\\\";\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 8);\\nvar ReactBrowserEventEmitter = __webpack_require__(/*! ./ReactBrowserEventEmitter */ 60);\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 22);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactLegacyElement = __webpack_require__(/*! ./ReactLegacyElement */ 36);\\nvar ReactInstanceHandles = __webpack_require__(/*! ./ReactInstanceHandles */ 4);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\n\\nvar containsNode = __webpack_require__(/*! ./containsNode */ 57);\\nvar deprecated = __webpack_require__(/*! ./deprecated */ 69);\\nvar getReactRootElementInContainer = __webpack_require__(/*! ./getReactRootElementInContainer */ 70);\\nvar instantiateReactComponent = __webpack_require__(/*! ./instantiateReactComponent */ 40);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar shouldUpdateReactComponent = __webpack_require__(/*! ./shouldUpdateReactComponent */ 44);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar createElement = ReactLegacyElement.wrapCreateElement(\\n  ReactElement.createElement\\n);\\n\\nvar SEPARATOR = ReactInstanceHandles.SEPARATOR;\\n\\nvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\\nvar nodeCache = {};\\n\\nvar ELEMENT_NODE_TYPE = 1;\\nvar DOC_NODE_TYPE = 9;\\n\\n/** Mapping from reactRootID to React component instance. */\\nvar instancesByReactRootID = {};\\n\\n/** Mapping from reactRootID to `container` nodes. */\\nvar containersByReactRootID = {};\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  /** __DEV__-only mapping from reactRootID to root elements. */\\n  var rootElementsByReactRootID = {};\\n}\\n\\n// Used to store breadth-first search state in findComponentRoot.\\nvar findComponentRootReusableArray = [];\\n\\n/**\\n * @param {DOMElement} container DOM element that may contain a React component.\\n * @return {?string} A \\\"reactRoot\\\" ID, if a React component is rendered.\\n */\\nfunction getReactRootID(container) {\\n  var rootElement = getReactRootElementInContainer(container);\\n  return rootElement && ReactMount.getID(rootElement);\\n}\\n\\n/**\\n * Accessing node[ATTR_NAME] or calling getAttribute(ATTR_NAME) on a form\\n * element can return its control whose name or ID equals ATTR_NAME. All\\n * DOM nodes support `getAttributeNode` but this can also get called on\\n * other objects so just return '' if we're given something other than a\\n * DOM node (such as window).\\n *\\n * @param {?DOMElement|DOMWindow|DOMDocument|DOMTextNode} node DOM node.\\n * @return {string} ID of the supplied `domNode`.\\n */\\nfunction getID(node) {\\n  var id = internalGetID(node);\\n  if (id) {\\n    if (nodeCache.hasOwnProperty(id)) {\\n      var cached = nodeCache[id];\\n      if (cached !== node) {\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          !isValid(cached, id),\\n          'ReactMount: Two valid but unequal nodes with the same `%s`: %s',\\n          ATTR_NAME, id\\n        ) : invariant(!isValid(cached, id)));\\n\\n        nodeCache[id] = node;\\n      }\\n    } else {\\n      nodeCache[id] = node;\\n    }\\n  }\\n\\n  return id;\\n}\\n\\nfunction internalGetID(node) {\\n  // If node is something like a window, document, or text node, none of\\n  // which support attributes or a .getAttribute method, gracefully return\\n  // the empty string, as if the attribute were missing.\\n  return node && node.getAttribute && node.getAttribute(ATTR_NAME) || '';\\n}\\n\\n/**\\n * Sets the React-specific ID of the given node.\\n *\\n * @param {DOMElement} node The DOM node whose ID will be set.\\n * @param {string} id The value of the ID attribute.\\n */\\nfunction setID(node, id) {\\n  var oldID = internalGetID(node);\\n  if (oldID !== id) {\\n    delete nodeCache[oldID];\\n  }\\n  node.setAttribute(ATTR_NAME, id);\\n  nodeCache[id] = node;\\n}\\n\\n/**\\n * Finds the node with the supplied React-generated DOM ID.\\n *\\n * @param {string} id A React-generated DOM ID.\\n * @return {DOMElement} DOM node with the suppled `id`.\\n * @internal\\n */\\nfunction getNode(id) {\\n  if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {\\n    nodeCache[id] = ReactMount.findReactNodeByID(id);\\n  }\\n  return nodeCache[id];\\n}\\n\\n/**\\n * A node is \\\"valid\\\" if it is contained by a currently mounted container.\\n *\\n * This means that the node does not have to be contained by a document in\\n * order to be considered valid.\\n *\\n * @param {?DOMElement} node The candidate DOM node.\\n * @param {string} id The expected ID of the node.\\n * @return {boolean} Whether the node is contained by a mounted container.\\n */\\nfunction isValid(node, id) {\\n  if (node) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      internalGetID(node) === id,\\n      'ReactMount: Unexpected modification of `%s`',\\n      ATTR_NAME\\n    ) : invariant(internalGetID(node) === id));\\n\\n    var container = ReactMount.findReactContainerForID(id);\\n    if (container && containsNode(container, node)) {\\n      return true;\\n    }\\n  }\\n\\n  return false;\\n}\\n\\n/**\\n * Causes the cache to forget about one React-specific ID.\\n *\\n * @param {string} id The ID to forget.\\n */\\nfunction purgeID(id) {\\n  delete nodeCache[id];\\n}\\n\\nvar deepestNodeSoFar = null;\\nfunction findDeepestCachedAncestorImpl(ancestorID) {\\n  var ancestor = nodeCache[ancestorID];\\n  if (ancestor && isValid(ancestor, ancestorID)) {\\n    deepestNodeSoFar = ancestor;\\n  } else {\\n    // This node isn't populated in the cache, so presumably none of its\\n    // descendants are. Break out of the loop.\\n    return false;\\n  }\\n}\\n\\n/**\\n * Return the deepest cached node whose ID is a prefix of `targetID`.\\n */\\nfunction findDeepestCachedAncestor(targetID) {\\n  deepestNodeSoFar = null;\\n  ReactInstanceHandles.traverseAncestors(\\n    targetID,\\n    findDeepestCachedAncestorImpl\\n  );\\n\\n  var foundNode = deepestNodeSoFar;\\n  deepestNodeSoFar = null;\\n  return foundNode;\\n}\\n\\n/**\\n * Mounting is the process of initializing a React component by creatings its\\n * representative DOM elements and inserting them into a supplied `container`.\\n * Any prior content inside `container` is destroyed in the process.\\n *\\n *   ReactMount.render(\\n *     component,\\n *     document.getElementById('container')\\n *   );\\n *\\n *   <div id=\\\"container\\\">                   <-- Supplied `container`.\\n *     <div data-reactid=\\\".3\\\">              <-- Rendered reactRoot of React\\n *       // ...                                 component.\\n *     </div>\\n *   </div>\\n *\\n * Inside of `container`, the first element rendered is the \\\"reactRoot\\\".\\n */\\nvar ReactMount = {\\n  /** Exposed for debugging purposes **/\\n  _instancesByReactRootID: instancesByReactRootID,\\n\\n  /**\\n   * This is a hook provided to support rendering React components while\\n   * ensuring that the apparent scroll position of its `container` does not\\n   * change.\\n   *\\n   * @param {DOMElement} container The `container` being rendered into.\\n   * @param {function} renderCallback This must be called once to do the render.\\n   */\\n  scrollMonitor: function(container, renderCallback) {\\n    renderCallback();\\n  },\\n\\n  /**\\n   * Take a component that's already mounted into the DOM and replace its props\\n   * @param {ReactComponent} prevComponent component instance already in the DOM\\n   * @param {ReactComponent} nextComponent component instance to render\\n   * @param {DOMElement} container container to render into\\n   * @param {?function} callback function triggered on completion\\n   */\\n  _updateRootComponent: function(\\n      prevComponent,\\n      nextComponent,\\n      container,\\n      callback) {\\n    var nextProps = nextComponent.props;\\n    ReactMount.scrollMonitor(container, function() {\\n      prevComponent.replaceProps(nextProps, callback);\\n    });\\n\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      // Record the root element in case it later gets transplanted.\\n      rootElementsByReactRootID[getReactRootID(container)] =\\n        getReactRootElementInContainer(container);\\n    }\\n\\n    return prevComponent;\\n  },\\n\\n  /**\\n   * Register a component into the instance map and starts scroll value\\n   * monitoring\\n   * @param {ReactComponent} nextComponent component instance to render\\n   * @param {DOMElement} container container to render into\\n   * @return {string} reactRoot ID prefix\\n   */\\n  _registerComponent: function(nextComponent, container) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      container && (\\n        container.nodeType === ELEMENT_NODE_TYPE ||\\n        container.nodeType === DOC_NODE_TYPE\\n      ),\\n      '_registerComponent(...): Target container is not a DOM element.'\\n    ) : invariant(container && (\\n      container.nodeType === ELEMENT_NODE_TYPE ||\\n      container.nodeType === DOC_NODE_TYPE\\n    )));\\n\\n    ReactBrowserEventEmitter.ensureScrollValueMonitoring();\\n\\n    var reactRootID = ReactMount.registerContainer(container);\\n    instancesByReactRootID[reactRootID] = nextComponent;\\n    return reactRootID;\\n  },\\n\\n  /**\\n   * Render a new component into the DOM.\\n   * @param {ReactComponent} nextComponent component instance to render\\n   * @param {DOMElement} container container to render into\\n   * @param {boolean} shouldReuseMarkup if we should skip the markup insertion\\n   * @return {ReactComponent} nextComponent\\n   */\\n  _renderNewRootComponent: ReactPerf.measure(\\n    'ReactMount',\\n    '_renderNewRootComponent',\\n    function(\\n        nextComponent,\\n        container,\\n        shouldReuseMarkup) {\\n      // Various parts of our code (such as ReactCompositeComponent's\\n      // _renderValidatedComponent) assume that calls to render aren't nested;\\n      // verify that that's the case.\\n      (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n        ReactCurrentOwner.current == null,\\n        '_renderNewRootComponent(): Render methods should be a pure function ' +\\n        'of props and state; triggering nested component updates from ' +\\n        'render is not allowed. If necessary, trigger nested updates in ' +\\n        'componentDidUpdate.'\\n      ) : null);\\n\\n      var componentInstance = instantiateReactComponent(nextComponent, null);\\n      var reactRootID = ReactMount._registerComponent(\\n        componentInstance,\\n        container\\n      );\\n      componentInstance.mountComponentIntoNode(\\n        reactRootID,\\n        container,\\n        shouldReuseMarkup\\n      );\\n\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        // Record the root element in case it later gets transplanted.\\n        rootElementsByReactRootID[reactRootID] =\\n          getReactRootElementInContainer(container);\\n      }\\n\\n      return componentInstance;\\n    }\\n  ),\\n\\n  /**\\n   * Renders a React component into the DOM in the supplied `container`.\\n   *\\n   * If the React component was previously rendered into `container`, this will\\n   * perform an update on it and only mutate the DOM as necessary to reflect the\\n   * latest React component.\\n   *\\n   * @param {ReactElement} nextElement Component element to render.\\n   * @param {DOMElement} container DOM element to render into.\\n   * @param {?function} callback function triggered on completion\\n   * @return {ReactComponent} Component instance rendered in `container`.\\n   */\\n  render: function(nextElement, container, callback) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      ReactElement.isValidElement(nextElement),\\n      'renderComponent(): Invalid component element.%s',\\n      (\\n        typeof nextElement === 'string' ?\\n          ' Instead of passing an element string, make sure to instantiate ' +\\n          'it by passing it to React.createElement.' :\\n        ReactLegacyElement.isValidFactory(nextElement) ?\\n          ' Instead of passing a component class, make sure to instantiate ' +\\n          'it by passing it to React.createElement.' :\\n        // Check if it quacks like a element\\n        typeof nextElement.props !== \\\"undefined\\\" ?\\n          ' This may be caused by unintentionally loading two independent ' +\\n          'copies of React.' :\\n          ''\\n      )\\n    ) : invariant(ReactElement.isValidElement(nextElement)));\\n\\n    var prevComponent = instancesByReactRootID[getReactRootID(container)];\\n\\n    if (prevComponent) {\\n      var prevElement = prevComponent._currentElement;\\n      if (shouldUpdateReactComponent(prevElement, nextElement)) {\\n        return ReactMount._updateRootComponent(\\n          prevComponent,\\n          nextElement,\\n          container,\\n          callback\\n        );\\n      } else {\\n        ReactMount.unmountComponentAtNode(container);\\n      }\\n    }\\n\\n    var reactRootElement = getReactRootElementInContainer(container);\\n    var containerHasReactMarkup =\\n      reactRootElement && ReactMount.isRenderedByReact(reactRootElement);\\n\\n    var shouldReuseMarkup = containerHasReactMarkup && !prevComponent;\\n\\n    var component = ReactMount._renderNewRootComponent(\\n      nextElement,\\n      container,\\n      shouldReuseMarkup\\n    );\\n    callback && callback.call(component);\\n    return component;\\n  },\\n\\n  /**\\n   * Constructs a component instance of `constructor` with `initialProps` and\\n   * renders it into the supplied `container`.\\n   *\\n   * @param {function} constructor React component constructor.\\n   * @param {?object} props Initial props of the component instance.\\n   * @param {DOMElement} container DOM element to render into.\\n   * @return {ReactComponent} Component instance rendered in `container`.\\n   */\\n  constructAndRenderComponent: function(constructor, props, container) {\\n    var element = createElement(constructor, props);\\n    return ReactMount.render(element, container);\\n  },\\n\\n  /**\\n   * Constructs a component instance of `constructor` with `initialProps` and\\n   * renders it into a container node identified by supplied `id`.\\n   *\\n   * @param {function} componentConstructor React component constructor\\n   * @param {?object} props Initial props of the component instance.\\n   * @param {string} id ID of the DOM element to render into.\\n   * @return {ReactComponent} Component instance rendered in the container node.\\n   */\\n  constructAndRenderComponentByID: function(constructor, props, id) {\\n    var domNode = document.getElementById(id);\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      domNode,\\n      'Tried to get element with id of \\\"%s\\\" but it is not present on the page.',\\n      id\\n    ) : invariant(domNode));\\n    return ReactMount.constructAndRenderComponent(constructor, props, domNode);\\n  },\\n\\n  /**\\n   * Registers a container node into which React components will be rendered.\\n   * This also creates the \\\"reactRoot\\\" ID that will be assigned to the element\\n   * rendered within.\\n   *\\n   * @param {DOMElement} container DOM element to register as a container.\\n   * @return {string} The \\\"reactRoot\\\" ID of elements rendered within.\\n   */\\n  registerContainer: function(container) {\\n    var reactRootID = getReactRootID(container);\\n    if (reactRootID) {\\n      // If one exists, make sure it is a valid \\\"reactRoot\\\" ID.\\n      reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID);\\n    }\\n    if (!reactRootID) {\\n      // No valid \\\"reactRoot\\\" ID found, create one.\\n      reactRootID = ReactInstanceHandles.createReactRootID();\\n    }\\n    containersByReactRootID[reactRootID] = container;\\n    return reactRootID;\\n  },\\n\\n  /**\\n   * Unmounts and destroys the React component rendered in the `container`.\\n   *\\n   * @param {DOMElement} container DOM element containing a React component.\\n   * @return {boolean} True if a component was found in and unmounted from\\n   *                   `container`\\n   */\\n  unmountComponentAtNode: function(container) {\\n    // Various parts of our code (such as ReactCompositeComponent's\\n    // _renderValidatedComponent) assume that calls to render aren't nested;\\n    // verify that that's the case. (Strictly speaking, unmounting won't cause a\\n    // render but we still don't expect to be in a render call here.)\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      ReactCurrentOwner.current == null,\\n      'unmountComponentAtNode(): Render methods should be a pure function of ' +\\n      'props and state; triggering nested component updates from render is ' +\\n      'not allowed. If necessary, trigger nested updates in ' +\\n      'componentDidUpdate.'\\n    ) : null);\\n\\n    var reactRootID = getReactRootID(container);\\n    var component = instancesByReactRootID[reactRootID];\\n    if (!component) {\\n      return false;\\n    }\\n    ReactMount.unmountComponentFromNode(component, container);\\n    delete instancesByReactRootID[reactRootID];\\n    delete containersByReactRootID[reactRootID];\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      delete rootElementsByReactRootID[reactRootID];\\n    }\\n    return true;\\n  },\\n\\n  /**\\n   * Unmounts a component and removes it from the DOM.\\n   *\\n   * @param {ReactComponent} instance React component instance.\\n   * @param {DOMElement} container DOM element to unmount from.\\n   * @final\\n   * @internal\\n   * @see {ReactMount.unmountComponentAtNode}\\n   */\\n  unmountComponentFromNode: function(instance, container) {\\n    instance.unmountComponent();\\n\\n    if (container.nodeType === DOC_NODE_TYPE) {\\n      container = container.documentElement;\\n    }\\n\\n    // http://jsperf.com/emptying-a-node\\n    while (container.lastChild) {\\n      container.removeChild(container.lastChild);\\n    }\\n  },\\n\\n  /**\\n   * Finds the container DOM element that contains React component to which the\\n   * supplied DOM `id` belongs.\\n   *\\n   * @param {string} id The ID of an element rendered by a React component.\\n   * @return {?DOMElement} DOM element that contains the `id`.\\n   */\\n  findReactContainerForID: function(id) {\\n    var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(id);\\n    var container = containersByReactRootID[reactRootID];\\n\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      var rootElement = rootElementsByReactRootID[reactRootID];\\n      if (rootElement && rootElement.parentNode !== container) {\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          // Call internalGetID here because getID calls isValid which calls\\n          // findReactContainerForID (this function).\\n          internalGetID(rootElement) === reactRootID,\\n          'ReactMount: Root element ID differed from reactRootID.'\\n        ) : invariant(// Call internalGetID here because getID calls isValid which calls\\n        // findReactContainerForID (this function).\\n        internalGetID(rootElement) === reactRootID));\\n\\n        var containerChild = container.firstChild;\\n        if (containerChild &&\\n            reactRootID === internalGetID(containerChild)) {\\n          // If the container has a new child with the same ID as the old\\n          // root element, then rootElementsByReactRootID[reactRootID] is\\n          // just stale and needs to be updated. The case that deserves a\\n          // warning is when the container is empty.\\n          rootElementsByReactRootID[reactRootID] = containerChild;\\n        } else {\\n          console.warn(\\n            'ReactMount: Root element has been removed from its original ' +\\n            'container. New container:', rootElement.parentNode\\n          );\\n        }\\n      }\\n    }\\n\\n    return container;\\n  },\\n\\n  /**\\n   * Finds an element rendered by React with the supplied ID.\\n   *\\n   * @param {string} id ID of a DOM node in the React component.\\n   * @return {DOMElement} Root DOM node of the React component.\\n   */\\n  findReactNodeByID: function(id) {\\n    var reactRoot = ReactMount.findReactContainerForID(id);\\n    return ReactMount.findComponentRoot(reactRoot, id);\\n  },\\n\\n  /**\\n   * True if the supplied `node` is rendered by React.\\n   *\\n   * @param {*} node DOM Element to check.\\n   * @return {boolean} True if the DOM Element appears to be rendered by React.\\n   * @internal\\n   */\\n  isRenderedByReact: function(node) {\\n    if (node.nodeType !== 1) {\\n      // Not a DOMElement, therefore not a React component\\n      return false;\\n    }\\n    var id = ReactMount.getID(node);\\n    return id ? id.charAt(0) === SEPARATOR : false;\\n  },\\n\\n  /**\\n   * Traverses up the ancestors of the supplied node to find a node that is a\\n   * DOM representation of a React component.\\n   *\\n   * @param {*} node\\n   * @return {?DOMEventTarget}\\n   * @internal\\n   */\\n  getFirstReactDOM: function(node) {\\n    var current = node;\\n    while (current && current.parentNode !== current) {\\n      if (ReactMount.isRenderedByReact(current)) {\\n        return current;\\n      }\\n      current = current.parentNode;\\n    }\\n    return null;\\n  },\\n\\n  /**\\n   * Finds a node with the supplied `targetID` inside of the supplied\\n   * `ancestorNode`.  Exploits the ID naming scheme to perform the search\\n   * quickly.\\n   *\\n   * @param {DOMEventTarget} ancestorNode Search from this root.\\n   * @pararm {string} targetID ID of the DOM representation of the component.\\n   * @return {DOMEventTarget} DOM node with the supplied `targetID`.\\n   * @internal\\n   */\\n  findComponentRoot: function(ancestorNode, targetID) {\\n    var firstChildren = findComponentRootReusableArray;\\n    var childIndex = 0;\\n\\n    var deepestAncestor = findDeepestCachedAncestor(targetID) || ancestorNode;\\n\\n    firstChildren[0] = deepestAncestor.firstChild;\\n    firstChildren.length = 1;\\n\\n    while (childIndex < firstChildren.length) {\\n      var child = firstChildren[childIndex++];\\n      var targetChild;\\n\\n      while (child) {\\n        var childID = ReactMount.getID(child);\\n        if (childID) {\\n          // Even if we find the node we're looking for, we finish looping\\n          // through its siblings to ensure they're cached so that we don't have\\n          // to revisit this node again. Otherwise, we make n^2 calls to getID\\n          // when visiting the many children of a single node in order.\\n\\n          if (targetID === childID) {\\n            targetChild = child;\\n          } else if (ReactInstanceHandles.isAncestorIDOf(childID, targetID)) {\\n            // If we find a child whose ID is an ancestor of the given ID,\\n            // then we can be sure that we only want to search the subtree\\n            // rooted at this child, so we can throw out the rest of the\\n            // search state.\\n            firstChildren.length = childIndex = 0;\\n            firstChildren.push(child.firstChild);\\n          }\\n\\n        } else {\\n          // If this child had no ID, then there's a chance that it was\\n          // injected automatically by the browser, as when a `<table>`\\n          // element sprouts an extra `<tbody>` child as a side effect of\\n          // `.innerHTML` parsing. Optimistically continue down this\\n          // branch, but not before examining the other siblings.\\n          firstChildren.push(child.firstChild);\\n        }\\n\\n        child = child.nextSibling;\\n      }\\n\\n      if (targetChild) {\\n        // Emptying firstChildren/findComponentRootReusableArray is\\n        // not necessary for correctness, but it helps the GC reclaim\\n        // any nodes that were left at the end of the search.\\n        firstChildren.length = 0;\\n\\n        return targetChild;\\n      }\\n    }\\n\\n    firstChildren.length = 0;\\n\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      false,\\n      'findComponentRoot(..., %s): Unable to find element. This probably ' +\\n      'means the DOM was unexpectedly mutated (e.g., by the browser), ' +\\n      'usually due to forgetting a <tbody> when using tables, nesting tags ' +\\n      'like <form>, <p>, or <a>, or using non-SVG elements in an <svg> ' +\\n      'parent. ' +\\n      'Try inspecting the child nodes of the element with React ID `%s`.',\\n      targetID,\\n      ReactMount.getID(ancestorNode)\\n    ) : invariant(false));\\n  },\\n\\n\\n  /**\\n   * React ID utilities.\\n   */\\n\\n  getReactRootID: getReactRootID,\\n\\n  getID: getID,\\n\\n  setID: setID,\\n\\n  getNode: getNode,\\n\\n  purgeID: purgeID\\n};\\n\\n// Deprecations (remove for 0.13)\\nReactMount.renderComponent = deprecated(\\n  'ReactMount',\\n  'renderComponent',\\n  'render',\\n  this,\\n  ReactMount.render\\n);\\n\\nmodule.exports = ReactMount;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactMount.js\\n ** module id = 56\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactMount.js?\");\n\n/***/ },\n/* 57 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/containsNode.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule containsNode\\n * @typechecks\\n */\\n\\nvar isTextNode = __webpack_require__(/*! ./isTextNode */ 58);\\n\\n/*jslint bitwise:true */\\n\\n/**\\n * Checks if a given DOM node contains or is another DOM node.\\n *\\n * @param {?DOMNode} outerNode Outer DOM node.\\n * @param {?DOMNode} innerNode Inner DOM node.\\n * @return {boolean} True if `outerNode` contains or is `innerNode`.\\n */\\nfunction containsNode(outerNode, innerNode) {\\n  if (!outerNode || !innerNode) {\\n    return false;\\n  } else if (outerNode === innerNode) {\\n    return true;\\n  } else if (isTextNode(outerNode)) {\\n    return false;\\n  } else if (isTextNode(innerNode)) {\\n    return containsNode(outerNode, innerNode.parentNode);\\n  } else if (outerNode.contains) {\\n    return outerNode.contains(innerNode);\\n  } else if (outerNode.compareDocumentPosition) {\\n    return !!(outerNode.compareDocumentPosition(innerNode) & 16);\\n  } else {\\n    return false;\\n  }\\n}\\n\\nmodule.exports = containsNode;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/containsNode.js\\n ** module id = 57\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/containsNode.js?\");\n\n/***/ },\n/* 58 */\n/*!***********************************!*\\\n  !*** ./~/react/lib/isTextNode.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule isTextNode\\n * @typechecks\\n */\\n\\nvar isNode = __webpack_require__(/*! ./isNode */ 59);\\n\\n/**\\n * @param {*} object The object to check.\\n * @return {boolean} Whether or not the object is a DOM text node.\\n */\\nfunction isTextNode(object) {\\n  return isNode(object) && object.nodeType == 3;\\n}\\n\\nmodule.exports = isTextNode;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/isTextNode.js\\n ** module id = 58\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/isTextNode.js?\");\n\n/***/ },\n/* 59 */\n/*!*******************************!*\\\n  !*** ./~/react/lib/isNode.js ***!\n  \\*******************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule isNode\\n * @typechecks\\n */\\n\\n/**\\n * @param {*} object The object to check.\\n * @return {boolean} Whether or not the object is a DOM node.\\n */\\nfunction isNode(object) {\\n  return !!(object && (\\n    typeof Node === 'function' ? object instanceof Node :\\n      typeof object === 'object' &&\\n      typeof object.nodeType === 'number' &&\\n      typeof object.nodeName === 'string'\\n  ));\\n}\\n\\nmodule.exports = isNode;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/isNode.js\\n ** module id = 59\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/isNode.js?\");\n\n/***/ },\n/* 60 */\n/*!*************************************************!*\\\n  !*** ./~/react/lib/ReactBrowserEventEmitter.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactBrowserEventEmitter\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar EventPluginHub = __webpack_require__(/*! ./EventPluginHub */ 61);\\nvar EventPluginRegistry = __webpack_require__(/*! ./EventPluginRegistry */ 62);\\nvar ReactEventEmitterMixin = __webpack_require__(/*! ./ReactEventEmitterMixin */ 65);\\nvar ViewportMetrics = __webpack_require__(/*! ./ViewportMetrics */ 66);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar isEventSupported = __webpack_require__(/*! ./isEventSupported */ 68);\\n\\n/**\\n * Summary of `ReactBrowserEventEmitter` event handling:\\n *\\n *  - Top-level delegation is used to trap most native browser events. This\\n *    may only occur in the main thread and is the responsibility of\\n *    ReactEventListener, which is injected and can therefore support pluggable\\n *    event sources. This is the only work that occurs in the main thread.\\n *\\n *  - We normalize and de-duplicate events to account for browser quirks. This\\n *    may be done in the worker thread.\\n *\\n *  - Forward these native events (with the associated top-level type used to\\n *    trap it) to `EventPluginHub`, which in turn will ask plugins if they want\\n *    to extract any synthetic events.\\n *\\n *  - The `EventPluginHub` will then process each event by annotating them with\\n *    \\\"dispatches\\\", a sequence of listeners and IDs that care about that event.\\n *\\n *  - The `EventPluginHub` then dispatches the events.\\n *\\n * Overview of React and the event system:\\n *\\n * +------------+    .\\n * |    DOM     |    .\\n * +------------+    .\\n *       |           .\\n *       v           .\\n * +------------+    .\\n * | ReactEvent |    .\\n * |  Listener  |    .\\n * +------------+    .                         +-----------+\\n *       |           .               +--------+|SimpleEvent|\\n *       |           .               |         |Plugin     |\\n * +-----|------+    .               v         +-----------+\\n * |     |      |    .    +--------------+                    +------------+\\n * |     +-----------.--->|EventPluginHub|                    |    Event   |\\n * |            |    .    |              |     +-----------+  | Propagators|\\n * | ReactEvent |    .    |              |     |TapEvent   |  |------------|\\n * |  Emitter   |    .    |              |<---+|Plugin     |  |other plugin|\\n * |            |    .    |              |     +-----------+  |  utilities |\\n * |     +-----------.--->|              |                    +------------+\\n * |     |      |    .    +--------------+\\n * +-----|------+    .                ^        +-----------+\\n *       |           .                |        |Enter/Leave|\\n *       +           .                +-------+|Plugin     |\\n * +-------------+   .                         +-----------+\\n * | application |   .\\n * |-------------|   .\\n * |             |   .\\n * |             |   .\\n * +-------------+   .\\n *                   .\\n *    React Core     .  General Purpose Event Plugin System\\n */\\n\\nvar alreadyListeningTo = {};\\nvar isMonitoringScrollValue = false;\\nvar reactTopListenersCounter = 0;\\n\\n// For events like 'submit' which don't consistently bubble (which we trap at a\\n// lower node than `document`), binding at `document` would cause duplicate\\n// events so we don't include them here\\nvar topEventMapping = {\\n  topBlur: 'blur',\\n  topChange: 'change',\\n  topClick: 'click',\\n  topCompositionEnd: 'compositionend',\\n  topCompositionStart: 'compositionstart',\\n  topCompositionUpdate: 'compositionupdate',\\n  topContextMenu: 'contextmenu',\\n  topCopy: 'copy',\\n  topCut: 'cut',\\n  topDoubleClick: 'dblclick',\\n  topDrag: 'drag',\\n  topDragEnd: 'dragend',\\n  topDragEnter: 'dragenter',\\n  topDragExit: 'dragexit',\\n  topDragLeave: 'dragleave',\\n  topDragOver: 'dragover',\\n  topDragStart: 'dragstart',\\n  topDrop: 'drop',\\n  topFocus: 'focus',\\n  topInput: 'input',\\n  topKeyDown: 'keydown',\\n  topKeyPress: 'keypress',\\n  topKeyUp: 'keyup',\\n  topMouseDown: 'mousedown',\\n  topMouseMove: 'mousemove',\\n  topMouseOut: 'mouseout',\\n  topMouseOver: 'mouseover',\\n  topMouseUp: 'mouseup',\\n  topPaste: 'paste',\\n  topScroll: 'scroll',\\n  topSelectionChange: 'selectionchange',\\n  topTextInput: 'textInput',\\n  topTouchCancel: 'touchcancel',\\n  topTouchEnd: 'touchend',\\n  topTouchMove: 'touchmove',\\n  topTouchStart: 'touchstart',\\n  topWheel: 'wheel'\\n};\\n\\n/**\\n * To ensure no conflicts with other potential React instances on the page\\n */\\nvar topListenersIDKey = \\\"_reactListenersID\\\" + String(Math.random()).slice(2);\\n\\nfunction getListeningForDocument(mountAt) {\\n  // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`\\n  // directly.\\n  if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {\\n    mountAt[topListenersIDKey] = reactTopListenersCounter++;\\n    alreadyListeningTo[mountAt[topListenersIDKey]] = {};\\n  }\\n  return alreadyListeningTo[mountAt[topListenersIDKey]];\\n}\\n\\n/**\\n * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For\\n * example:\\n *\\n *   ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction);\\n *\\n * This would allocate a \\\"registration\\\" of `('onClick', myFunction)` on 'myID'.\\n *\\n * @internal\\n */\\nvar ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, {\\n\\n  /**\\n   * Injectable event backend\\n   */\\n  ReactEventListener: null,\\n\\n  injection: {\\n    /**\\n     * @param {object} ReactEventListener\\n     */\\n    injectReactEventListener: function(ReactEventListener) {\\n      ReactEventListener.setHandleTopLevel(\\n        ReactBrowserEventEmitter.handleTopLevel\\n      );\\n      ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;\\n    }\\n  },\\n\\n  /**\\n   * Sets whether or not any created callbacks should be enabled.\\n   *\\n   * @param {boolean} enabled True if callbacks should be enabled.\\n   */\\n  setEnabled: function(enabled) {\\n    if (ReactBrowserEventEmitter.ReactEventListener) {\\n      ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);\\n    }\\n  },\\n\\n  /**\\n   * @return {boolean} True if callbacks are enabled.\\n   */\\n  isEnabled: function() {\\n    return !!(\\n      ReactBrowserEventEmitter.ReactEventListener &&\\n      ReactBrowserEventEmitter.ReactEventListener.isEnabled()\\n    );\\n  },\\n\\n  /**\\n   * We listen for bubbled touch events on the document object.\\n   *\\n   * Firefox v8.01 (and possibly others) exhibited strange behavior when\\n   * mounting `onmousemove` events at some node that was not the document\\n   * element. The symptoms were that if your mouse is not moving over something\\n   * contained within that mount point (for example on the background) the\\n   * top-level listeners for `onmousemove` won't be called. However, if you\\n   * register the `mousemove` on the document object, then it will of course\\n   * catch all `mousemove`s. This along with iOS quirks, justifies restricting\\n   * top-level listeners to the document object only, at least for these\\n   * movement types of events and possibly all events.\\n   *\\n   * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\\n   *\\n   * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but\\n   * they bubble to document.\\n   *\\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\\n   * @param {object} contentDocumentHandle Document which owns the container\\n   */\\n  listenTo: function(registrationName, contentDocumentHandle) {\\n    var mountAt = contentDocumentHandle;\\n    var isListening = getListeningForDocument(mountAt);\\n    var dependencies = EventPluginRegistry.\\n      registrationNameDependencies[registrationName];\\n\\n    var topLevelTypes = EventConstants.topLevelTypes;\\n    for (var i = 0, l = dependencies.length; i < l; i++) {\\n      var dependency = dependencies[i];\\n      if (!(\\n            isListening.hasOwnProperty(dependency) &&\\n            isListening[dependency]\\n          )) {\\n        if (dependency === topLevelTypes.topWheel) {\\n          if (isEventSupported('wheel')) {\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\\n              topLevelTypes.topWheel,\\n              'wheel',\\n              mountAt\\n            );\\n          } else if (isEventSupported('mousewheel')) {\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\\n              topLevelTypes.topWheel,\\n              'mousewheel',\\n              mountAt\\n            );\\n          } else {\\n            // Firefox needs to capture a different mouse scroll event.\\n            // @see http://www.quirksmode.org/dom/events/tests/scroll.html\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\\n              topLevelTypes.topWheel,\\n              'DOMMouseScroll',\\n              mountAt\\n            );\\n          }\\n        } else if (dependency === topLevelTypes.topScroll) {\\n\\n          if (isEventSupported('scroll', true)) {\\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(\\n              topLevelTypes.topScroll,\\n              'scroll',\\n              mountAt\\n            );\\n          } else {\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\\n              topLevelTypes.topScroll,\\n              'scroll',\\n              ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE\\n            );\\n          }\\n        } else if (dependency === topLevelTypes.topFocus ||\\n            dependency === topLevelTypes.topBlur) {\\n\\n          if (isEventSupported('focus', true)) {\\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(\\n              topLevelTypes.topFocus,\\n              'focus',\\n              mountAt\\n            );\\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(\\n              topLevelTypes.topBlur,\\n              'blur',\\n              mountAt\\n            );\\n          } else if (isEventSupported('focusin')) {\\n            // IE has `focusin` and `focusout` events which bubble.\\n            // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\\n              topLevelTypes.topFocus,\\n              'focusin',\\n              mountAt\\n            );\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\\n              topLevelTypes.topBlur,\\n              'focusout',\\n              mountAt\\n            );\\n          }\\n\\n          // to make sure blur and focus event listeners are only attached once\\n          isListening[topLevelTypes.topBlur] = true;\\n          isListening[topLevelTypes.topFocus] = true;\\n        } else if (topEventMapping.hasOwnProperty(dependency)) {\\n          ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\\n            dependency,\\n            topEventMapping[dependency],\\n            mountAt\\n          );\\n        }\\n\\n        isListening[dependency] = true;\\n      }\\n    }\\n  },\\n\\n  trapBubbledEvent: function(topLevelType, handlerBaseName, handle) {\\n    return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\\n      topLevelType,\\n      handlerBaseName,\\n      handle\\n    );\\n  },\\n\\n  trapCapturedEvent: function(topLevelType, handlerBaseName, handle) {\\n    return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(\\n      topLevelType,\\n      handlerBaseName,\\n      handle\\n    );\\n  },\\n\\n  /**\\n   * Listens to window scroll and resize events. We cache scroll values so that\\n   * application code can access them without triggering reflows.\\n   *\\n   * NOTE: Scroll events do not bubble.\\n   *\\n   * @see http://www.quirksmode.org/dom/events/scroll.html\\n   */\\n  ensureScrollValueMonitoring: function(){\\n    if (!isMonitoringScrollValue) {\\n      var refresh = ViewportMetrics.refreshScrollValues;\\n      ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);\\n      isMonitoringScrollValue = true;\\n    }\\n  },\\n\\n  eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs,\\n\\n  registrationNameModules: EventPluginHub.registrationNameModules,\\n\\n  putListener: EventPluginHub.putListener,\\n\\n  getListener: EventPluginHub.getListener,\\n\\n  deleteListener: EventPluginHub.deleteListener,\\n\\n  deleteAllListeners: EventPluginHub.deleteAllListeners\\n\\n});\\n\\nmodule.exports = ReactBrowserEventEmitter;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactBrowserEventEmitter.js\\n ** module id = 60\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactBrowserEventEmitter.js?\");\n\n/***/ },\n/* 61 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/EventPluginHub.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule EventPluginHub\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventPluginRegistry = __webpack_require__(/*! ./EventPluginRegistry */ 62);\\nvar EventPluginUtils = __webpack_require__(/*! ./EventPluginUtils */ 13);\\n\\nvar accumulateInto = __webpack_require__(/*! ./accumulateInto */ 63);\\nvar forEachAccumulated = __webpack_require__(/*! ./forEachAccumulated */ 64);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Internal store for event listeners\\n */\\nvar listenerBank = {};\\n\\n/**\\n * Internal queue of events that have accumulated their dispatches and are\\n * waiting to have their dispatches executed.\\n */\\nvar eventQueue = null;\\n\\n/**\\n * Dispatches an event and releases it back into the pool, unless persistent.\\n *\\n * @param {?object} event Synthetic event to be dispatched.\\n * @private\\n */\\nvar executeDispatchesAndRelease = function(event) {\\n  if (event) {\\n    var executeDispatch = EventPluginUtils.executeDispatch;\\n    // Plugins can provide custom behavior when dispatching events.\\n    var PluginModule = EventPluginRegistry.getPluginModuleForEvent(event);\\n    if (PluginModule && PluginModule.executeDispatch) {\\n      executeDispatch = PluginModule.executeDispatch;\\n    }\\n    EventPluginUtils.executeDispatchesInOrder(event, executeDispatch);\\n\\n    if (!event.isPersistent()) {\\n      event.constructor.release(event);\\n    }\\n  }\\n};\\n\\n/**\\n * - `InstanceHandle`: [required] Module that performs logical traversals of DOM\\n *   hierarchy given ids of the logical DOM elements involved.\\n */\\nvar InstanceHandle = null;\\n\\nfunction validateInstanceHandle() {\\n  var invalid = !InstanceHandle||\\n    !InstanceHandle.traverseTwoPhase ||\\n    !InstanceHandle.traverseEnterLeave;\\n  if (invalid) {\\n    throw new Error('InstanceHandle not injected before use!');\\n  }\\n}\\n\\n/**\\n * This is a unified interface for event plugins to be installed and configured.\\n *\\n * Event plugins can implement the following properties:\\n *\\n *   `extractEvents` {function(string, DOMEventTarget, string, object): *}\\n *     Required. When a top-level event is fired, this method is expected to\\n *     extract synthetic events that will in turn be queued and dispatched.\\n *\\n *   `eventTypes` {object}\\n *     Optional, plugins that fire events must publish a mapping of registration\\n *     names that are used to register listeners. Values of this mapping must\\n *     be objects that contain `registrationName` or `phasedRegistrationNames`.\\n *\\n *   `executeDispatch` {function(object, function, string)}\\n *     Optional, allows plugins to override how an event gets dispatched. By\\n *     default, the listener is simply invoked.\\n *\\n * Each plugin that is injected into `EventsPluginHub` is immediately operable.\\n *\\n * @public\\n */\\nvar EventPluginHub = {\\n\\n  /**\\n   * Methods for injecting dependencies.\\n   */\\n  injection: {\\n\\n    /**\\n     * @param {object} InjectedMount\\n     * @public\\n     */\\n    injectMount: EventPluginUtils.injection.injectMount,\\n\\n    /**\\n     * @param {object} InjectedInstanceHandle\\n     * @public\\n     */\\n    injectInstanceHandle: function(InjectedInstanceHandle) {\\n      InstanceHandle = InjectedInstanceHandle;\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        validateInstanceHandle();\\n      }\\n    },\\n\\n    getInstanceHandle: function() {\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        validateInstanceHandle();\\n      }\\n      return InstanceHandle;\\n    },\\n\\n    /**\\n     * @param {array} InjectedEventPluginOrder\\n     * @public\\n     */\\n    injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,\\n\\n    /**\\n     * @param {object} injectedNamesToPlugins Map from names to plugin modules.\\n     */\\n    injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName\\n\\n  },\\n\\n  eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs,\\n\\n  registrationNameModules: EventPluginRegistry.registrationNameModules,\\n\\n  /**\\n   * Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent.\\n   *\\n   * @param {string} id ID of the DOM element.\\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\\n   * @param {?function} listener The callback to store.\\n   */\\n  putListener: function(id, registrationName, listener) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      !listener || typeof listener === 'function',\\n      'Expected %s listener to be a function, instead got type %s',\\n      registrationName, typeof listener\\n    ) : invariant(!listener || typeof listener === 'function'));\\n\\n    var bankForRegistrationName =\\n      listenerBank[registrationName] || (listenerBank[registrationName] = {});\\n    bankForRegistrationName[id] = listener;\\n  },\\n\\n  /**\\n   * @param {string} id ID of the DOM element.\\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\\n   * @return {?function} The stored callback.\\n   */\\n  getListener: function(id, registrationName) {\\n    var bankForRegistrationName = listenerBank[registrationName];\\n    return bankForRegistrationName && bankForRegistrationName[id];\\n  },\\n\\n  /**\\n   * Deletes a listener from the registration bank.\\n   *\\n   * @param {string} id ID of the DOM element.\\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\\n   */\\n  deleteListener: function(id, registrationName) {\\n    var bankForRegistrationName = listenerBank[registrationName];\\n    if (bankForRegistrationName) {\\n      delete bankForRegistrationName[id];\\n    }\\n  },\\n\\n  /**\\n   * Deletes all listeners for the DOM element with the supplied ID.\\n   *\\n   * @param {string} id ID of the DOM element.\\n   */\\n  deleteAllListeners: function(id) {\\n    for (var registrationName in listenerBank) {\\n      delete listenerBank[registrationName][id];\\n    }\\n  },\\n\\n  /**\\n   * Allows registered plugins an opportunity to extract events from top-level\\n   * native browser events.\\n   *\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native browser event.\\n   * @return {*} An accumulation of synthetic events.\\n   * @internal\\n   */\\n  extractEvents: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n    var events;\\n    var plugins = EventPluginRegistry.plugins;\\n    for (var i = 0, l = plugins.length; i < l; i++) {\\n      // Not every plugin in the ordering may be loaded at runtime.\\n      var possiblePlugin = plugins[i];\\n      if (possiblePlugin) {\\n        var extractedEvents = possiblePlugin.extractEvents(\\n          topLevelType,\\n          topLevelTarget,\\n          topLevelTargetID,\\n          nativeEvent\\n        );\\n        if (extractedEvents) {\\n          events = accumulateInto(events, extractedEvents);\\n        }\\n      }\\n    }\\n    return events;\\n  },\\n\\n  /**\\n   * Enqueues a synthetic event that should be dispatched when\\n   * `processEventQueue` is invoked.\\n   *\\n   * @param {*} events An accumulation of synthetic events.\\n   * @internal\\n   */\\n  enqueueEvents: function(events) {\\n    if (events) {\\n      eventQueue = accumulateInto(eventQueue, events);\\n    }\\n  },\\n\\n  /**\\n   * Dispatches all synthetic events on the event queue.\\n   *\\n   * @internal\\n   */\\n  processEventQueue: function() {\\n    // Set `eventQueue` to null before processing it so that we can tell if more\\n    // events get enqueued while processing.\\n    var processingEventQueue = eventQueue;\\n    eventQueue = null;\\n    forEachAccumulated(processingEventQueue, executeDispatchesAndRelease);\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      !eventQueue,\\n      'processEventQueue(): Additional events were enqueued while processing ' +\\n      'an event queue. Support for this has not yet been implemented.'\\n    ) : invariant(!eventQueue));\\n  },\\n\\n  /**\\n   * These are needed for tests only. Do not use!\\n   */\\n  __purge: function() {\\n    listenerBank = {};\\n  },\\n\\n  __getListenerBank: function() {\\n    return listenerBank;\\n  }\\n\\n};\\n\\nmodule.exports = EventPluginHub;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/EventPluginHub.js\\n ** module id = 61\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/EventPluginHub.js?\");\n\n/***/ },\n/* 62 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/EventPluginRegistry.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule EventPluginRegistry\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Injectable ordering of event plugins.\\n */\\nvar EventPluginOrder = null;\\n\\n/**\\n * Injectable mapping from names to event plugin modules.\\n */\\nvar namesToPlugins = {};\\n\\n/**\\n * Recomputes the plugin list using the injected plugins and plugin ordering.\\n *\\n * @private\\n */\\nfunction recomputePluginOrdering() {\\n  if (!EventPluginOrder) {\\n    // Wait until an `EventPluginOrder` is injected.\\n    return;\\n  }\\n  for (var pluginName in namesToPlugins) {\\n    var PluginModule = namesToPlugins[pluginName];\\n    var pluginIndex = EventPluginOrder.indexOf(pluginName);\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      pluginIndex > -1,\\n      'EventPluginRegistry: Cannot inject event plugins that do not exist in ' +\\n      'the plugin ordering, `%s`.',\\n      pluginName\\n    ) : invariant(pluginIndex > -1));\\n    if (EventPluginRegistry.plugins[pluginIndex]) {\\n      continue;\\n    }\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      PluginModule.extractEvents,\\n      'EventPluginRegistry: Event plugins must implement an `extractEvents` ' +\\n      'method, but `%s` does not.',\\n      pluginName\\n    ) : invariant(PluginModule.extractEvents));\\n    EventPluginRegistry.plugins[pluginIndex] = PluginModule;\\n    var publishedEvents = PluginModule.eventTypes;\\n    for (var eventName in publishedEvents) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        publishEventForPlugin(\\n          publishedEvents[eventName],\\n          PluginModule,\\n          eventName\\n        ),\\n        'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.',\\n        eventName,\\n        pluginName\\n      ) : invariant(publishEventForPlugin(\\n        publishedEvents[eventName],\\n        PluginModule,\\n        eventName\\n      )));\\n    }\\n  }\\n}\\n\\n/**\\n * Publishes an event so that it can be dispatched by the supplied plugin.\\n *\\n * @param {object} dispatchConfig Dispatch configuration for the event.\\n * @param {object} PluginModule Plugin publishing the event.\\n * @return {boolean} True if the event was successfully published.\\n * @private\\n */\\nfunction publishEventForPlugin(dispatchConfig, PluginModule, eventName) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    !EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName),\\n    'EventPluginHub: More than one plugin attempted to publish the same ' +\\n    'event name, `%s`.',\\n    eventName\\n  ) : invariant(!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName)));\\n  EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;\\n\\n  var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\\n  if (phasedRegistrationNames) {\\n    for (var phaseName in phasedRegistrationNames) {\\n      if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\\n        var phasedRegistrationName = phasedRegistrationNames[phaseName];\\n        publishRegistrationName(\\n          phasedRegistrationName,\\n          PluginModule,\\n          eventName\\n        );\\n      }\\n    }\\n    return true;\\n  } else if (dispatchConfig.registrationName) {\\n    publishRegistrationName(\\n      dispatchConfig.registrationName,\\n      PluginModule,\\n      eventName\\n    );\\n    return true;\\n  }\\n  return false;\\n}\\n\\n/**\\n * Publishes a registration name that is used to identify dispatched events and\\n * can be used with `EventPluginHub.putListener` to register listeners.\\n *\\n * @param {string} registrationName Registration name to add.\\n * @param {object} PluginModule Plugin publishing the event.\\n * @private\\n */\\nfunction publishRegistrationName(registrationName, PluginModule, eventName) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    !EventPluginRegistry.registrationNameModules[registrationName],\\n    'EventPluginHub: More than one plugin attempted to publish the same ' +\\n    'registration name, `%s`.',\\n    registrationName\\n  ) : invariant(!EventPluginRegistry.registrationNameModules[registrationName]));\\n  EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;\\n  EventPluginRegistry.registrationNameDependencies[registrationName] =\\n    PluginModule.eventTypes[eventName].dependencies;\\n}\\n\\n/**\\n * Registers plugins so that they can extract and dispatch events.\\n *\\n * @see {EventPluginHub}\\n */\\nvar EventPluginRegistry = {\\n\\n  /**\\n   * Ordered list of injected plugins.\\n   */\\n  plugins: [],\\n\\n  /**\\n   * Mapping from event name to dispatch config\\n   */\\n  eventNameDispatchConfigs: {},\\n\\n  /**\\n   * Mapping from registration name to plugin module\\n   */\\n  registrationNameModules: {},\\n\\n  /**\\n   * Mapping from registration name to event name\\n   */\\n  registrationNameDependencies: {},\\n\\n  /**\\n   * Injects an ordering of plugins (by plugin name). This allows the ordering\\n   * to be decoupled from injection of the actual plugins so that ordering is\\n   * always deterministic regardless of packaging, on-the-fly injection, etc.\\n   *\\n   * @param {array} InjectedEventPluginOrder\\n   * @internal\\n   * @see {EventPluginHub.injection.injectEventPluginOrder}\\n   */\\n  injectEventPluginOrder: function(InjectedEventPluginOrder) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      !EventPluginOrder,\\n      'EventPluginRegistry: Cannot inject event plugin ordering more than ' +\\n      'once. You are likely trying to load more than one copy of React.'\\n    ) : invariant(!EventPluginOrder));\\n    // Clone the ordering so it cannot be dynamically mutated.\\n    EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);\\n    recomputePluginOrdering();\\n  },\\n\\n  /**\\n   * Injects plugins to be used by `EventPluginHub`. The plugin names must be\\n   * in the ordering injected by `injectEventPluginOrder`.\\n   *\\n   * Plugins can be injected as part of page initialization or on-the-fly.\\n   *\\n   * @param {object} injectedNamesToPlugins Map from names to plugin modules.\\n   * @internal\\n   * @see {EventPluginHub.injection.injectEventPluginsByName}\\n   */\\n  injectEventPluginsByName: function(injectedNamesToPlugins) {\\n    var isOrderingDirty = false;\\n    for (var pluginName in injectedNamesToPlugins) {\\n      if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\\n        continue;\\n      }\\n      var PluginModule = injectedNamesToPlugins[pluginName];\\n      if (!namesToPlugins.hasOwnProperty(pluginName) ||\\n          namesToPlugins[pluginName] !== PluginModule) {\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          !namesToPlugins[pluginName],\\n          'EventPluginRegistry: Cannot inject two different event plugins ' +\\n          'using the same name, `%s`.',\\n          pluginName\\n        ) : invariant(!namesToPlugins[pluginName]));\\n        namesToPlugins[pluginName] = PluginModule;\\n        isOrderingDirty = true;\\n      }\\n    }\\n    if (isOrderingDirty) {\\n      recomputePluginOrdering();\\n    }\\n  },\\n\\n  /**\\n   * Looks up the plugin for the supplied event.\\n   *\\n   * @param {object} event A synthetic event.\\n   * @return {?object} The plugin that created the supplied event.\\n   * @internal\\n   */\\n  getPluginModuleForEvent: function(event) {\\n    var dispatchConfig = event.dispatchConfig;\\n    if (dispatchConfig.registrationName) {\\n      return EventPluginRegistry.registrationNameModules[\\n        dispatchConfig.registrationName\\n      ] || null;\\n    }\\n    for (var phase in dispatchConfig.phasedRegistrationNames) {\\n      if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {\\n        continue;\\n      }\\n      var PluginModule = EventPluginRegistry.registrationNameModules[\\n        dispatchConfig.phasedRegistrationNames[phase]\\n      ];\\n      if (PluginModule) {\\n        return PluginModule;\\n      }\\n    }\\n    return null;\\n  },\\n\\n  /**\\n   * Exposed for unit testing.\\n   * @private\\n   */\\n  _resetEventPlugins: function() {\\n    EventPluginOrder = null;\\n    for (var pluginName in namesToPlugins) {\\n      if (namesToPlugins.hasOwnProperty(pluginName)) {\\n        delete namesToPlugins[pluginName];\\n      }\\n    }\\n    EventPluginRegistry.plugins.length = 0;\\n\\n    var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;\\n    for (var eventName in eventNameDispatchConfigs) {\\n      if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {\\n        delete eventNameDispatchConfigs[eventName];\\n      }\\n    }\\n\\n    var registrationNameModules = EventPluginRegistry.registrationNameModules;\\n    for (var registrationName in registrationNameModules) {\\n      if (registrationNameModules.hasOwnProperty(registrationName)) {\\n        delete registrationNameModules[registrationName];\\n      }\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = EventPluginRegistry;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/EventPluginRegistry.js\\n ** module id = 62\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/EventPluginRegistry.js?\");\n\n/***/ },\n/* 63 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/accumulateInto.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule accumulateInto\\n */\\n\\n\\\"use strict\\\";\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n *\\n * Accumulates items that must not be null or undefined into the first one. This\\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\\n * API cleanness. Since `current` can be null before being passed in and not\\n * null after this function, make sure to assign it back to `current`:\\n *\\n * `a = accumulateInto(a, b);`\\n *\\n * This API should be sparingly used. Try `accumulate` for something cleaner.\\n *\\n * @return {*|array<*>} An accumulation of items.\\n */\\n\\nfunction accumulateInto(current, next) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    next != null,\\n    'accumulateInto(...): Accumulated items must not be null or undefined.'\\n  ) : invariant(next != null));\\n  if (current == null) {\\n    return next;\\n  }\\n\\n  // Both are not empty. Warning: Never call x.concat(y) when you are not\\n  // certain that x is an Array (x could be a string with concat method).\\n  var currentIsArray = Array.isArray(current);\\n  var nextIsArray = Array.isArray(next);\\n\\n  if (currentIsArray && nextIsArray) {\\n    current.push.apply(current, next);\\n    return current;\\n  }\\n\\n  if (currentIsArray) {\\n    current.push(next);\\n    return current;\\n  }\\n\\n  if (nextIsArray) {\\n    // A bit too dangerous to mutate `next`.\\n    return [current].concat(next);\\n  }\\n\\n  return [current, next];\\n}\\n\\nmodule.exports = accumulateInto;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/accumulateInto.js\\n ** module id = 63\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/accumulateInto.js?\");\n\n/***/ },\n/* 64 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/forEachAccumulated.js ***!\n  \\*******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule forEachAccumulated\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * @param {array} an \\\"accumulation\\\" of items which is either an Array or\\n * a single item. Useful when paired with the `accumulate` module. This is a\\n * simple utility that allows us to reason about a collection of items, but\\n * handling the case when there is exactly one item (and we do not need to\\n * allocate an array).\\n */\\nvar forEachAccumulated = function(arr, cb, scope) {\\n  if (Array.isArray(arr)) {\\n    arr.forEach(cb, scope);\\n  } else if (arr) {\\n    cb.call(scope, arr);\\n  }\\n};\\n\\nmodule.exports = forEachAccumulated;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/forEachAccumulated.js\\n ** module id = 64\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/forEachAccumulated.js?\");\n\n/***/ },\n/* 65 */\n/*!***********************************************!*\\\n  !*** ./~/react/lib/ReactEventEmitterMixin.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactEventEmitterMixin\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventPluginHub = __webpack_require__(/*! ./EventPluginHub */ 61);\\n\\nfunction runEventQueueInBatch(events) {\\n  EventPluginHub.enqueueEvents(events);\\n  EventPluginHub.processEventQueue();\\n}\\n\\nvar ReactEventEmitterMixin = {\\n\\n  /**\\n   * Streams a fired top-level event to `EventPluginHub` where plugins have the\\n   * opportunity to create `ReactEvent`s to be dispatched.\\n   *\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {object} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native environment event.\\n   */\\n  handleTopLevel: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n    var events = EventPluginHub.extractEvents(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent\\n    );\\n\\n    runEventQueueInBatch(events);\\n  }\\n};\\n\\nmodule.exports = ReactEventEmitterMixin;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactEventEmitterMixin.js\\n ** module id = 65\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactEventEmitterMixin.js?\");\n\n/***/ },\n/* 66 */\n/*!****************************************!*\\\n  !*** ./~/react/lib/ViewportMetrics.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ViewportMetrics\\n */\\n\\n\\\"use strict\\\";\\n\\nvar getUnboundedScrollPosition = __webpack_require__(/*! ./getUnboundedScrollPosition */ 67);\\n\\nvar ViewportMetrics = {\\n\\n  currentScrollLeft: 0,\\n\\n  currentScrollTop: 0,\\n\\n  refreshScrollValues: function() {\\n    var scrollPosition = getUnboundedScrollPosition(window);\\n    ViewportMetrics.currentScrollLeft = scrollPosition.x;\\n    ViewportMetrics.currentScrollTop = scrollPosition.y;\\n  }\\n\\n};\\n\\nmodule.exports = ViewportMetrics;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ViewportMetrics.js\\n ** module id = 66\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ViewportMetrics.js?\");\n\n/***/ },\n/* 67 */\n/*!***************************************************!*\\\n  !*** ./~/react/lib/getUnboundedScrollPosition.js ***!\n  \\***************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getUnboundedScrollPosition\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Gets the scroll position of the supplied element or window.\\n *\\n * The return values are unbounded, unlike `getScrollPosition`. This means they\\n * may be negative or exceed the element boundaries (which is possible using\\n * inertial scrolling).\\n *\\n * @param {DOMWindow|DOMElement} scrollable\\n * @return {object} Map with `x` and `y` keys.\\n */\\nfunction getUnboundedScrollPosition(scrollable) {\\n  if (scrollable === window) {\\n    return {\\n      x: window.pageXOffset || document.documentElement.scrollLeft,\\n      y: window.pageYOffset || document.documentElement.scrollTop\\n    };\\n  }\\n  return {\\n    x: scrollable.scrollLeft,\\n    y: scrollable.scrollTop\\n  };\\n}\\n\\nmodule.exports = getUnboundedScrollPosition;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getUnboundedScrollPosition.js\\n ** module id = 67\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getUnboundedScrollPosition.js?\");\n\n/***/ },\n/* 68 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/isEventSupported.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule isEventSupported\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar useHasFeature;\\nif (ExecutionEnvironment.canUseDOM) {\\n  useHasFeature =\\n    document.implementation &&\\n    document.implementation.hasFeature &&\\n    // always returns true in newer browsers as per the standard.\\n    // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\\n    document.implementation.hasFeature('', '') !== true;\\n}\\n\\n/**\\n * Checks if an event is supported in the current execution environment.\\n *\\n * NOTE: This will not work correctly for non-generic events such as `change`,\\n * `reset`, `load`, `error`, and `select`.\\n *\\n * Borrows from Modernizr.\\n *\\n * @param {string} eventNameSuffix Event name, e.g. \\\"click\\\".\\n * @param {?boolean} capture Check if the capture phase is supported.\\n * @return {boolean} True if the event is supported.\\n * @internal\\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\\n */\\nfunction isEventSupported(eventNameSuffix, capture) {\\n  if (!ExecutionEnvironment.canUseDOM ||\\n      capture && !('addEventListener' in document)) {\\n    return false;\\n  }\\n\\n  var eventName = 'on' + eventNameSuffix;\\n  var isSupported = eventName in document;\\n\\n  if (!isSupported) {\\n    var element = document.createElement('div');\\n    element.setAttribute(eventName, 'return;');\\n    isSupported = typeof element[eventName] === 'function';\\n  }\\n\\n  if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\\n    // This is the only way to test support for the `wheel` event in IE9+.\\n    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\\n  }\\n\\n  return isSupported;\\n}\\n\\nmodule.exports = isEventSupported;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/isEventSupported.js\\n ** module id = 68\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/isEventSupported.js?\");\n\n/***/ },\n/* 69 */\n/*!***********************************!*\\\n  !*** ./~/react/lib/deprecated.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule deprecated\\n */\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\n/**\\n * This will log a single deprecation notice per function and forward the call\\n * on to the new API.\\n *\\n * @param {string} namespace The namespace of the call, eg 'React'\\n * @param {string} oldName The old function name, eg 'renderComponent'\\n * @param {string} newName The new function name, eg 'render'\\n * @param {*} ctx The context this forwarded call should run in\\n * @param {function} fn The function to forward on to\\n * @return {*} Will be the value as returned from `fn`\\n */\\nfunction deprecated(namespace, oldName, newName, ctx, fn) {\\n  var warned = false;\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    var newFn = function() {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n        warned,\\n        (namespace + \\\".\\\" + oldName + \\\" will be deprecated in a future version. \\\") +\\n        (\\\"Use \\\" + namespace + \\\".\\\" + newName + \\\" instead.\\\")\\n      ) : null);\\n      warned = true;\\n      return fn.apply(ctx, arguments);\\n    };\\n    newFn.displayName = (namespace + \\\"_\\\" + oldName);\\n    // We need to make sure all properties of the original fn are copied over.\\n    // In particular, this is needed to support PropTypes\\n    return assign(newFn, fn);\\n  }\\n\\n  return fn;\\n}\\n\\nmodule.exports = deprecated;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/deprecated.js\\n ** module id = 69\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/deprecated.js?\");\n\n/***/ },\n/* 70 */\n/*!*******************************************************!*\\\n  !*** ./~/react/lib/getReactRootElementInContainer.js ***!\n  \\*******************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getReactRootElementInContainer\\n */\\n\\n\\\"use strict\\\";\\n\\nvar DOC_NODE_TYPE = 9;\\n\\n/**\\n * @param {DOMElement|DOMDocument} container DOM element that may contain\\n *                                           a React component\\n * @return {?*} DOM element that may have the reactRoot ID, or null.\\n */\\nfunction getReactRootElementInContainer(container) {\\n  if (!container) {\\n    return null;\\n  }\\n\\n  if (container.nodeType === DOC_NODE_TYPE) {\\n    return container.documentElement;\\n  } else {\\n    return container.firstChild;\\n  }\\n}\\n\\nmodule.exports = getReactRootElementInContainer;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getReactRootElementInContainer.js\\n ** module id = 70\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getReactRootElementInContainer.js?\");\n\n/***/ },\n/* 71 */\n/*!****************************************!*\\\n  !*** ./~/react/lib/ReactMultiChild.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactMultiChild\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 23);\\nvar ReactMultiChildUpdateTypes = __webpack_require__(/*! ./ReactMultiChildUpdateTypes */ 72);\\n\\nvar flattenChildren = __webpack_require__(/*! ./flattenChildren */ 73);\\nvar instantiateReactComponent = __webpack_require__(/*! ./instantiateReactComponent */ 40);\\nvar shouldUpdateReactComponent = __webpack_require__(/*! ./shouldUpdateReactComponent */ 44);\\n\\n/**\\n * Updating children of a component may trigger recursive updates. The depth is\\n * used to batch recursive updates to render markup more efficiently.\\n *\\n * @type {number}\\n * @private\\n */\\nvar updateDepth = 0;\\n\\n/**\\n * Queue of update configuration objects.\\n *\\n * Each object has a `type` property that is in `ReactMultiChildUpdateTypes`.\\n *\\n * @type {array<object>}\\n * @private\\n */\\nvar updateQueue = [];\\n\\n/**\\n * Queue of markup to be rendered.\\n *\\n * @type {array<string>}\\n * @private\\n */\\nvar markupQueue = [];\\n\\n/**\\n * Enqueues markup to be rendered and inserted at a supplied index.\\n *\\n * @param {string} parentID ID of the parent component.\\n * @param {string} markup Markup that renders into an element.\\n * @param {number} toIndex Destination index.\\n * @private\\n */\\nfunction enqueueMarkup(parentID, markup, toIndex) {\\n  // NOTE: Null values reduce hidden classes.\\n  updateQueue.push({\\n    parentID: parentID,\\n    parentNode: null,\\n    type: ReactMultiChildUpdateTypes.INSERT_MARKUP,\\n    markupIndex: markupQueue.push(markup) - 1,\\n    textContent: null,\\n    fromIndex: null,\\n    toIndex: toIndex\\n  });\\n}\\n\\n/**\\n * Enqueues moving an existing element to another index.\\n *\\n * @param {string} parentID ID of the parent component.\\n * @param {number} fromIndex Source index of the existing element.\\n * @param {number} toIndex Destination index of the element.\\n * @private\\n */\\nfunction enqueueMove(parentID, fromIndex, toIndex) {\\n  // NOTE: Null values reduce hidden classes.\\n  updateQueue.push({\\n    parentID: parentID,\\n    parentNode: null,\\n    type: ReactMultiChildUpdateTypes.MOVE_EXISTING,\\n    markupIndex: null,\\n    textContent: null,\\n    fromIndex: fromIndex,\\n    toIndex: toIndex\\n  });\\n}\\n\\n/**\\n * Enqueues removing an element at an index.\\n *\\n * @param {string} parentID ID of the parent component.\\n * @param {number} fromIndex Index of the element to remove.\\n * @private\\n */\\nfunction enqueueRemove(parentID, fromIndex) {\\n  // NOTE: Null values reduce hidden classes.\\n  updateQueue.push({\\n    parentID: parentID,\\n    parentNode: null,\\n    type: ReactMultiChildUpdateTypes.REMOVE_NODE,\\n    markupIndex: null,\\n    textContent: null,\\n    fromIndex: fromIndex,\\n    toIndex: null\\n  });\\n}\\n\\n/**\\n * Enqueues setting the text content.\\n *\\n * @param {string} parentID ID of the parent component.\\n * @param {string} textContent Text content to set.\\n * @private\\n */\\nfunction enqueueTextContent(parentID, textContent) {\\n  // NOTE: Null values reduce hidden classes.\\n  updateQueue.push({\\n    parentID: parentID,\\n    parentNode: null,\\n    type: ReactMultiChildUpdateTypes.TEXT_CONTENT,\\n    markupIndex: null,\\n    textContent: textContent,\\n    fromIndex: null,\\n    toIndex: null\\n  });\\n}\\n\\n/**\\n * Processes any enqueued updates.\\n *\\n * @private\\n */\\nfunction processQueue() {\\n  if (updateQueue.length) {\\n    ReactComponent.BackendIDOperations.dangerouslyProcessChildrenUpdates(\\n      updateQueue,\\n      markupQueue\\n    );\\n    clearQueue();\\n  }\\n}\\n\\n/**\\n * Clears any enqueued updates.\\n *\\n * @private\\n */\\nfunction clearQueue() {\\n  updateQueue.length = 0;\\n  markupQueue.length = 0;\\n}\\n\\n/**\\n * ReactMultiChild are capable of reconciling multiple children.\\n *\\n * @class ReactMultiChild\\n * @internal\\n */\\nvar ReactMultiChild = {\\n\\n  /**\\n   * Provides common functionality for components that must reconcile multiple\\n   * children. This is used by `ReactDOMComponent` to mount, update, and\\n   * unmount child components.\\n   *\\n   * @lends {ReactMultiChild.prototype}\\n   */\\n  Mixin: {\\n\\n    /**\\n     * Generates a \\\"mount image\\\" for each of the supplied children. In the case\\n     * of `ReactDOMComponent`, a mount image is a string of markup.\\n     *\\n     * @param {?object} nestedChildren Nested child maps.\\n     * @return {array} An array of mounted representations.\\n     * @internal\\n     */\\n    mountChildren: function(nestedChildren, transaction) {\\n      var children = flattenChildren(nestedChildren);\\n      var mountImages = [];\\n      var index = 0;\\n      this._renderedChildren = children;\\n      for (var name in children) {\\n        var child = children[name];\\n        if (children.hasOwnProperty(name)) {\\n          // The rendered children must be turned into instances as they're\\n          // mounted.\\n          var childInstance = instantiateReactComponent(child, null);\\n          children[name] = childInstance;\\n          // Inlined for performance, see `ReactInstanceHandles.createReactID`.\\n          var rootID = this._rootNodeID + name;\\n          var mountImage = childInstance.mountComponent(\\n            rootID,\\n            transaction,\\n            this._mountDepth + 1\\n          );\\n          childInstance._mountIndex = index;\\n          mountImages.push(mountImage);\\n          index++;\\n        }\\n      }\\n      return mountImages;\\n    },\\n\\n    /**\\n     * Replaces any rendered children with a text content string.\\n     *\\n     * @param {string} nextContent String of content.\\n     * @internal\\n     */\\n    updateTextContent: function(nextContent) {\\n      updateDepth++;\\n      var errorThrown = true;\\n      try {\\n        var prevChildren = this._renderedChildren;\\n        // Remove any rendered children.\\n        for (var name in prevChildren) {\\n          if (prevChildren.hasOwnProperty(name)) {\\n            this._unmountChildByName(prevChildren[name], name);\\n          }\\n        }\\n        // Set new text content.\\n        this.setTextContent(nextContent);\\n        errorThrown = false;\\n      } finally {\\n        updateDepth--;\\n        if (!updateDepth) {\\n          errorThrown ? clearQueue() : processQueue();\\n        }\\n      }\\n    },\\n\\n    /**\\n     * Updates the rendered children with new children.\\n     *\\n     * @param {?object} nextNestedChildren Nested child maps.\\n     * @param {ReactReconcileTransaction} transaction\\n     * @internal\\n     */\\n    updateChildren: function(nextNestedChildren, transaction) {\\n      updateDepth++;\\n      var errorThrown = true;\\n      try {\\n        this._updateChildren(nextNestedChildren, transaction);\\n        errorThrown = false;\\n      } finally {\\n        updateDepth--;\\n        if (!updateDepth) {\\n          errorThrown ? clearQueue() : processQueue();\\n        }\\n      }\\n    },\\n\\n    /**\\n     * Improve performance by isolating this hot code path from the try/catch\\n     * block in `updateChildren`.\\n     *\\n     * @param {?object} nextNestedChildren Nested child maps.\\n     * @param {ReactReconcileTransaction} transaction\\n     * @final\\n     * @protected\\n     */\\n    _updateChildren: function(nextNestedChildren, transaction) {\\n      var nextChildren = flattenChildren(nextNestedChildren);\\n      var prevChildren = this._renderedChildren;\\n      if (!nextChildren && !prevChildren) {\\n        return;\\n      }\\n      var name;\\n      // `nextIndex` will increment for each child in `nextChildren`, but\\n      // `lastIndex` will be the last index visited in `prevChildren`.\\n      var lastIndex = 0;\\n      var nextIndex = 0;\\n      for (name in nextChildren) {\\n        if (!nextChildren.hasOwnProperty(name)) {\\n          continue;\\n        }\\n        var prevChild = prevChildren && prevChildren[name];\\n        var prevElement = prevChild && prevChild._currentElement;\\n        var nextElement = nextChildren[name];\\n        if (shouldUpdateReactComponent(prevElement, nextElement)) {\\n          this.moveChild(prevChild, nextIndex, lastIndex);\\n          lastIndex = Math.max(prevChild._mountIndex, lastIndex);\\n          prevChild.receiveComponent(nextElement, transaction);\\n          prevChild._mountIndex = nextIndex;\\n        } else {\\n          if (prevChild) {\\n            // Update `lastIndex` before `_mountIndex` gets unset by unmounting.\\n            lastIndex = Math.max(prevChild._mountIndex, lastIndex);\\n            this._unmountChildByName(prevChild, name);\\n          }\\n          // The child must be instantiated before it's mounted.\\n          var nextChildInstance = instantiateReactComponent(\\n            nextElement,\\n            null\\n          );\\n          this._mountChildByNameAtIndex(\\n            nextChildInstance, name, nextIndex, transaction\\n          );\\n        }\\n        nextIndex++;\\n      }\\n      // Remove children that are no longer present.\\n      for (name in prevChildren) {\\n        if (prevChildren.hasOwnProperty(name) &&\\n            !(nextChildren && nextChildren[name])) {\\n          this._unmountChildByName(prevChildren[name], name);\\n        }\\n      }\\n    },\\n\\n    /**\\n     * Unmounts all rendered children. This should be used to clean up children\\n     * when this component is unmounted.\\n     *\\n     * @internal\\n     */\\n    unmountChildren: function() {\\n      var renderedChildren = this._renderedChildren;\\n      for (var name in renderedChildren) {\\n        var renderedChild = renderedChildren[name];\\n        // TODO: When is this not true?\\n        if (renderedChild.unmountComponent) {\\n          renderedChild.unmountComponent();\\n        }\\n      }\\n      this._renderedChildren = null;\\n    },\\n\\n    /**\\n     * Moves a child component to the supplied index.\\n     *\\n     * @param {ReactComponent} child Component to move.\\n     * @param {number} toIndex Destination index of the element.\\n     * @param {number} lastIndex Last index visited of the siblings of `child`.\\n     * @protected\\n     */\\n    moveChild: function(child, toIndex, lastIndex) {\\n      // If the index of `child` is less than `lastIndex`, then it needs to\\n      // be moved. Otherwise, we do not need to move it because a child will be\\n      // inserted or moved before `child`.\\n      if (child._mountIndex < lastIndex) {\\n        enqueueMove(this._rootNodeID, child._mountIndex, toIndex);\\n      }\\n    },\\n\\n    /**\\n     * Creates a child component.\\n     *\\n     * @param {ReactComponent} child Component to create.\\n     * @param {string} mountImage Markup to insert.\\n     * @protected\\n     */\\n    createChild: function(child, mountImage) {\\n      enqueueMarkup(this._rootNodeID, mountImage, child._mountIndex);\\n    },\\n\\n    /**\\n     * Removes a child component.\\n     *\\n     * @param {ReactComponent} child Child to remove.\\n     * @protected\\n     */\\n    removeChild: function(child) {\\n      enqueueRemove(this._rootNodeID, child._mountIndex);\\n    },\\n\\n    /**\\n     * Sets this text content string.\\n     *\\n     * @param {string} textContent Text content to set.\\n     * @protected\\n     */\\n    setTextContent: function(textContent) {\\n      enqueueTextContent(this._rootNodeID, textContent);\\n    },\\n\\n    /**\\n     * Mounts a child with the supplied name.\\n     *\\n     * NOTE: This is part of `updateChildren` and is here for readability.\\n     *\\n     * @param {ReactComponent} child Component to mount.\\n     * @param {string} name Name of the child.\\n     * @param {number} index Index at which to insert the child.\\n     * @param {ReactReconcileTransaction} transaction\\n     * @private\\n     */\\n    _mountChildByNameAtIndex: function(child, name, index, transaction) {\\n      // Inlined for performance, see `ReactInstanceHandles.createReactID`.\\n      var rootID = this._rootNodeID + name;\\n      var mountImage = child.mountComponent(\\n        rootID,\\n        transaction,\\n        this._mountDepth + 1\\n      );\\n      child._mountIndex = index;\\n      this.createChild(child, mountImage);\\n      this._renderedChildren = this._renderedChildren || {};\\n      this._renderedChildren[name] = child;\\n    },\\n\\n    /**\\n     * Unmounts a rendered child by name.\\n     *\\n     * NOTE: This is part of `updateChildren` and is here for readability.\\n     *\\n     * @param {ReactComponent} child Component to unmount.\\n     * @param {string} name Name of the child in `this._renderedChildren`.\\n     * @private\\n     */\\n    _unmountChildByName: function(child, name) {\\n      this.removeChild(child);\\n      child._mountIndex = null;\\n      child.unmountComponent();\\n      delete this._renderedChildren[name];\\n    }\\n\\n  }\\n\\n};\\n\\nmodule.exports = ReactMultiChild;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactMultiChild.js\\n ** module id = 71\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactMultiChild.js?\");\n\n/***/ },\n/* 72 */\n/*!***************************************************!*\\\n  !*** ./~/react/lib/ReactMultiChildUpdateTypes.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactMultiChildUpdateTypes\\n */\\n\\n\\\"use strict\\\";\\n\\nvar keyMirror = __webpack_require__(/*! ./keyMirror */ 15);\\n\\n/**\\n * When a component's children are updated, a series of update configuration\\n * objects are created in order to batch and serialize the required changes.\\n *\\n * Enumerates all the possible types of update configurations.\\n *\\n * @internal\\n */\\nvar ReactMultiChildUpdateTypes = keyMirror({\\n  INSERT_MARKUP: null,\\n  MOVE_EXISTING: null,\\n  REMOVE_NODE: null,\\n  TEXT_CONTENT: null\\n});\\n\\nmodule.exports = ReactMultiChildUpdateTypes;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactMultiChildUpdateTypes.js\\n ** module id = 72\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactMultiChildUpdateTypes.js?\");\n\n/***/ },\n/* 73 */\n/*!****************************************!*\\\n  !*** ./~/react/lib/flattenChildren.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule flattenChildren\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactTextComponent = __webpack_require__(/*! ./ReactTextComponent */ 74);\\n\\nvar traverseAllChildren = __webpack_require__(/*! ./traverseAllChildren */ 18);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\n/**\\n * @param {function} traverseContext Context passed through traversal.\\n * @param {?ReactComponent} child React child component.\\n * @param {!string} name String name of key path to child.\\n */\\nfunction flattenSingleChildIntoContext(traverseContext, child, name) {\\n  // We found a component instance.\\n  var result = traverseContext;\\n  var keyUnique = !result.hasOwnProperty(name);\\n  (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n    keyUnique,\\n    'flattenChildren(...): Encountered two children with the same key, ' +\\n    '`%s`. Child keys must be unique; when two children share a key, only ' +\\n    'the first child will be used.',\\n    name\\n  ) : null);\\n  if (keyUnique && child != null) {\\n    var type = typeof child;\\n    var normalizedValue;\\n\\n    if (type === 'string') {\\n      normalizedValue = ReactTextComponent(child);\\n    } else if (type === 'number') {\\n      normalizedValue = ReactTextComponent('' + child);\\n    } else {\\n      normalizedValue = child;\\n    }\\n\\n    result[name] = normalizedValue;\\n  }\\n}\\n\\n/**\\n * Flattens children that are typically specified as `props.children`. Any null\\n * children will not be included in the resulting object.\\n * @return {!object} flattened children keyed by name.\\n */\\nfunction flattenChildren(children) {\\n  if (children == null) {\\n    return children;\\n  }\\n  var result = {};\\n  traverseAllChildren(children, flattenSingleChildIntoContext, result);\\n  return result;\\n}\\n\\nmodule.exports = flattenChildren;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/flattenChildren.js\\n ** module id = 73\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/flattenChildren.js?\");\n\n/***/ },\n/* 74 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/ReactTextComponent.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactTextComponent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar DOMPropertyOperations = __webpack_require__(/*! ./DOMPropertyOperations */ 7);\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 23);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar escapeTextForBrowser = __webpack_require__(/*! ./escapeTextForBrowser */ 9);\\n\\n/**\\n * Text nodes violate a couple assumptions that React makes about components:\\n *\\n *  - When mounting text into the DOM, adjacent text nodes are merged.\\n *  - Text nodes cannot be assigned a React root ID.\\n *\\n * This component is used to wrap strings in elements so that they can undergo\\n * the same reconciliation that is applied to elements.\\n *\\n * TODO: Investigate representing React components in the DOM with text nodes.\\n *\\n * @class ReactTextComponent\\n * @extends ReactComponent\\n * @internal\\n */\\nvar ReactTextComponent = function(props) {\\n  // This constructor and it's argument is currently used by mocks.\\n};\\n\\nassign(ReactTextComponent.prototype, ReactComponent.Mixin, {\\n\\n  /**\\n   * Creates the markup for this text node. This node is not intended to have\\n   * any features besides containing text content.\\n   *\\n   * @param {string} rootID DOM ID of the root node.\\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n   * @param {number} mountDepth number of components in the owner hierarchy\\n   * @return {string} Markup for this text node.\\n   * @internal\\n   */\\n  mountComponent: function(rootID, transaction, mountDepth) {\\n    ReactComponent.Mixin.mountComponent.call(\\n      this,\\n      rootID,\\n      transaction,\\n      mountDepth\\n    );\\n\\n    var escapedText = escapeTextForBrowser(this.props);\\n\\n    if (transaction.renderToStaticMarkup) {\\n      // Normally we'd wrap this in a `span` for the reasons stated above, but\\n      // since this is a situation where React won't take over (static pages),\\n      // we can simply return the text as it is.\\n      return escapedText;\\n    }\\n\\n    return (\\n      '<span ' + DOMPropertyOperations.createMarkupForID(rootID) + '>' +\\n        escapedText +\\n      '</span>'\\n    );\\n  },\\n\\n  /**\\n   * Updates this component by updating the text content.\\n   *\\n   * @param {object} nextComponent Contains the next text content.\\n   * @param {ReactReconcileTransaction} transaction\\n   * @internal\\n   */\\n  receiveComponent: function(nextComponent, transaction) {\\n    var nextProps = nextComponent.props;\\n    if (nextProps !== this.props) {\\n      this.props = nextProps;\\n      ReactComponent.BackendIDOperations.updateTextContentByID(\\n        this._rootNodeID,\\n        nextProps\\n      );\\n    }\\n  }\\n\\n});\\n\\nvar ReactTextComponentFactory = function(text) {\\n  // Bypass validation and configuration\\n  return new ReactElement(ReactTextComponent, null, null, null, null, text);\\n};\\n\\nReactTextComponentFactory.type = ReactTextComponent;\\n\\nmodule.exports = ReactTextComponentFactory;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactTextComponent.js\\n ** module id = 74\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactTextComponent.js?\");\n\n/***/ },\n/* 75 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/ReactDefaultInjection.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDefaultInjection\\n */\\n\\n\\\"use strict\\\";\\n\\nvar BeforeInputEventPlugin = __webpack_require__(/*! ./BeforeInputEventPlugin */ 78);\\nvar ChangeEventPlugin = __webpack_require__(/*! ./ChangeEventPlugin */ 83);\\nvar ClientReactRootIndex = __webpack_require__(/*! ./ClientReactRootIndex */ 85);\\nvar CompositionEventPlugin = __webpack_require__(/*! ./CompositionEventPlugin */ 86);\\nvar DefaultEventPluginOrder = __webpack_require__(/*! ./DefaultEventPluginOrder */ 94);\\nvar EnterLeaveEventPlugin = __webpack_require__(/*! ./EnterLeaveEventPlugin */ 95);\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\nvar HTMLDOMPropertyConfig = __webpack_require__(/*! ./HTMLDOMPropertyConfig */ 99);\\nvar MobileSafariClickEventPlugin = __webpack_require__(/*! ./MobileSafariClickEventPlugin */ 100);\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactComponentBrowserEnvironment =\\n  __webpack_require__(/*! ./ReactComponentBrowserEnvironment */ 101);\\nvar ReactDefaultBatchingStrategy = __webpack_require__(/*! ./ReactDefaultBatchingStrategy */ 114);\\nvar ReactDOMComponent = __webpack_require__(/*! ./ReactDOMComponent */ 46);\\nvar ReactDOMButton = __webpack_require__(/*! ./ReactDOMButton */ 115);\\nvar ReactDOMForm = __webpack_require__(/*! ./ReactDOMForm */ 117);\\nvar ReactDOMImg = __webpack_require__(/*! ./ReactDOMImg */ 76);\\nvar ReactDOMInput = __webpack_require__(/*! ./ReactDOMInput */ 118);\\nvar ReactDOMOption = __webpack_require__(/*! ./ReactDOMOption */ 121);\\nvar ReactDOMSelect = __webpack_require__(/*! ./ReactDOMSelect */ 122);\\nvar ReactDOMTextarea = __webpack_require__(/*! ./ReactDOMTextarea */ 123);\\nvar ReactEventListener = __webpack_require__(/*! ./ReactEventListener */ 124);\\nvar ReactInjection = __webpack_require__(/*! ./ReactInjection */ 126);\\nvar ReactInstanceHandles = __webpack_require__(/*! ./ReactInstanceHandles */ 4);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar SelectEventPlugin = __webpack_require__(/*! ./SelectEventPlugin */ 127);\\nvar ServerReactRootIndex = __webpack_require__(/*! ./ServerReactRootIndex */ 129);\\nvar SimpleEventPlugin = __webpack_require__(/*! ./SimpleEventPlugin */ 130);\\nvar SVGDOMPropertyConfig = __webpack_require__(/*! ./SVGDOMPropertyConfig */ 139);\\n\\nvar createFullPageComponent = __webpack_require__(/*! ./createFullPageComponent */ 140);\\n\\nfunction inject() {\\n  ReactInjection.EventEmitter.injectReactEventListener(\\n    ReactEventListener\\n  );\\n\\n  /**\\n   * Inject modules for resolving DOM hierarchy and plugin ordering.\\n   */\\n  ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);\\n  ReactInjection.EventPluginHub.injectInstanceHandle(ReactInstanceHandles);\\n  ReactInjection.EventPluginHub.injectMount(ReactMount);\\n\\n  /**\\n   * Some important event plugins included by default (without having to require\\n   * them).\\n   */\\n  ReactInjection.EventPluginHub.injectEventPluginsByName({\\n    SimpleEventPlugin: SimpleEventPlugin,\\n    EnterLeaveEventPlugin: EnterLeaveEventPlugin,\\n    ChangeEventPlugin: ChangeEventPlugin,\\n    CompositionEventPlugin: CompositionEventPlugin,\\n    MobileSafariClickEventPlugin: MobileSafariClickEventPlugin,\\n    SelectEventPlugin: SelectEventPlugin,\\n    BeforeInputEventPlugin: BeforeInputEventPlugin\\n  });\\n\\n  ReactInjection.NativeComponent.injectGenericComponentClass(\\n    ReactDOMComponent\\n  );\\n\\n  ReactInjection.NativeComponent.injectComponentClasses({\\n    'button': ReactDOMButton,\\n    'form': ReactDOMForm,\\n    'img': ReactDOMImg,\\n    'input': ReactDOMInput,\\n    'option': ReactDOMOption,\\n    'select': ReactDOMSelect,\\n    'textarea': ReactDOMTextarea,\\n\\n    'html': createFullPageComponent('html'),\\n    'head': createFullPageComponent('head'),\\n    'body': createFullPageComponent('body')\\n  });\\n\\n  // This needs to happen after createFullPageComponent() otherwise the mixin\\n  // gets double injected.\\n  ReactInjection.CompositeComponent.injectMixin(ReactBrowserComponentMixin);\\n\\n  ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);\\n  ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);\\n\\n  ReactInjection.EmptyComponent.injectEmptyComponent('noscript');\\n\\n  ReactInjection.Updates.injectReconcileTransaction(\\n    ReactComponentBrowserEnvironment.ReactReconcileTransaction\\n  );\\n  ReactInjection.Updates.injectBatchingStrategy(\\n    ReactDefaultBatchingStrategy\\n  );\\n\\n  ReactInjection.RootIndex.injectCreateReactRootIndex(\\n    ExecutionEnvironment.canUseDOM ?\\n      ClientReactRootIndex.createReactRootIndex :\\n      ServerReactRootIndex.createReactRootIndex\\n  );\\n\\n  ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);\\n\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    var url = (ExecutionEnvironment.canUseDOM && window.location.href) || '';\\n    if ((/[?&]react_perf\\\\b/).test(url)) {\\n      var ReactDefaultPerf = __webpack_require__(/*! ./ReactDefaultPerf */ 141);\\n      ReactDefaultPerf.start();\\n    }\\n  }\\n}\\n\\nmodule.exports = {\\n  inject: inject\\n};\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDefaultInjection.js\\n ** module id = 75\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDefaultInjection.js?\");\n\n/***/ },\n/* 76 */\n/*!************************************!*\\\n  !*** ./~/react/lib/ReactDOMImg.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMImg\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar LocalEventTrapMixin = __webpack_require__(/*! ./LocalEventTrapMixin */ 77);\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactDOM = __webpack_require__(/*! ./ReactDOM */ 45);\\n\\n// Store a reference to the <img> `ReactDOMComponent`. TODO: use string\\nvar img = ReactElement.createFactory(ReactDOM.img.type);\\n\\n/**\\n * Since onLoad doesn't bubble OR capture on the top level in IE8, we need to\\n * capture it on the <img> element itself. There are lots of hacks we could do\\n * to accomplish this, but the most reliable is to make <img> a composite\\n * component and use `componentDidMount` to attach the event handlers.\\n */\\nvar ReactDOMImg = ReactCompositeComponent.createClass({\\n  displayName: 'ReactDOMImg',\\n  tagName: 'IMG',\\n\\n  mixins: [ReactBrowserComponentMixin, LocalEventTrapMixin],\\n\\n  render: function() {\\n    return img(this.props);\\n  },\\n\\n  componentDidMount: function() {\\n    this.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load');\\n    this.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error');\\n  }\\n});\\n\\nmodule.exports = ReactDOMImg;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMImg.js\\n ** module id = 76\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMImg.js?\");\n\n/***/ },\n/* 77 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/LocalEventTrapMixin.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule LocalEventTrapMixin\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactBrowserEventEmitter = __webpack_require__(/*! ./ReactBrowserEventEmitter */ 60);\\n\\nvar accumulateInto = __webpack_require__(/*! ./accumulateInto */ 63);\\nvar forEachAccumulated = __webpack_require__(/*! ./forEachAccumulated */ 64);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nfunction remove(event) {\\n  event.remove();\\n}\\n\\nvar LocalEventTrapMixin = {\\n  trapBubbledEvent:function(topLevelType, handlerBaseName) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(this.isMounted(), 'Must be mounted to trap events') : invariant(this.isMounted()));\\n    var listener = ReactBrowserEventEmitter.trapBubbledEvent(\\n      topLevelType,\\n      handlerBaseName,\\n      this.getDOMNode()\\n    );\\n    this._localEventListeners =\\n      accumulateInto(this._localEventListeners, listener);\\n  },\\n\\n  // trapCapturedEvent would look nearly identical. We don't implement that\\n  // method because it isn't currently needed.\\n\\n  componentWillUnmount:function() {\\n    if (this._localEventListeners) {\\n      forEachAccumulated(this._localEventListeners, remove);\\n    }\\n  }\\n};\\n\\nmodule.exports = LocalEventTrapMixin;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/LocalEventTrapMixin.js\\n ** module id = 77\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/LocalEventTrapMixin.js?\");\n\n/***/ },\n/* 78 */\n/*!***********************************************!*\\\n  !*** ./~/react/lib/BeforeInputEventPlugin.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013 Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule BeforeInputEventPlugin\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar EventPropagators = __webpack_require__(/*! ./EventPropagators */ 79);\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\nvar SyntheticInputEvent = __webpack_require__(/*! ./SyntheticInputEvent */ 80);\\n\\nvar keyOf = __webpack_require__(/*! ./keyOf */ 42);\\n\\nvar canUseTextInputEvent = (\\n  ExecutionEnvironment.canUseDOM &&\\n  'TextEvent' in window &&\\n  !('documentMode' in document || isPresto())\\n);\\n\\n/**\\n * Opera <= 12 includes TextEvent in window, but does not fire\\n * text input events. Rely on keypress instead.\\n */\\nfunction isPresto() {\\n  var opera = window.opera;\\n  return (\\n    typeof opera === 'object' &&\\n    typeof opera.version === 'function' &&\\n    parseInt(opera.version(), 10) <= 12\\n  );\\n}\\n\\nvar SPACEBAR_CODE = 32;\\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);\\n\\nvar topLevelTypes = EventConstants.topLevelTypes;\\n\\n// Events and their corresponding property names.\\nvar eventTypes = {\\n  beforeInput: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onBeforeInput: null}),\\n      captured: keyOf({onBeforeInputCapture: null})\\n    },\\n    dependencies: [\\n      topLevelTypes.topCompositionEnd,\\n      topLevelTypes.topKeyPress,\\n      topLevelTypes.topTextInput,\\n      topLevelTypes.topPaste\\n    ]\\n  }\\n};\\n\\n// Track characters inserted via keypress and composition events.\\nvar fallbackChars = null;\\n\\n// Track whether we've ever handled a keypress on the space key.\\nvar hasSpaceKeypress = false;\\n\\n/**\\n * Return whether a native keypress event is assumed to be a command.\\n * This is required because Firefox fires `keypress` events for key commands\\n * (cut, copy, select-all, etc.) even though no character is inserted.\\n */\\nfunction isKeypressCommand(nativeEvent) {\\n  return (\\n    (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&\\n    // ctrlKey && altKey is equivalent to AltGr, and is not a command.\\n    !(nativeEvent.ctrlKey && nativeEvent.altKey)\\n  );\\n}\\n\\n/**\\n * Create an `onBeforeInput` event to match\\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\\n *\\n * This event plugin is based on the native `textInput` event\\n * available in Chrome, Safari, Opera, and IE. This event fires after\\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\\n *\\n * `beforeInput` is spec'd but not implemented in any browsers, and\\n * the `input` event does not provide any useful information about what has\\n * actually been added, contrary to the spec. Thus, `textInput` is the best\\n * available event to identify the characters that have actually been inserted\\n * into the target node.\\n */\\nvar BeforeInputEventPlugin = {\\n\\n  eventTypes: eventTypes,\\n\\n  /**\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native browser event.\\n   * @return {*} An accumulation of synthetic events.\\n   * @see {EventPluginHub.extractEvents}\\n   */\\n  extractEvents: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n\\n    var chars;\\n\\n    if (canUseTextInputEvent) {\\n      switch (topLevelType) {\\n        case topLevelTypes.topKeyPress:\\n          /**\\n           * If native `textInput` events are available, our goal is to make\\n           * use of them. However, there is a special case: the spacebar key.\\n           * In Webkit, preventing default on a spacebar `textInput` event\\n           * cancels character insertion, but it *also* causes the browser\\n           * to fall back to its default spacebar behavior of scrolling the\\n           * page.\\n           *\\n           * Tracking at:\\n           * https://code.google.com/p/chromium/issues/detail?id=355103\\n           *\\n           * To avoid this issue, use the keypress event as if no `textInput`\\n           * event is available.\\n           */\\n          var which = nativeEvent.which;\\n          if (which !== SPACEBAR_CODE) {\\n            return;\\n          }\\n\\n          hasSpaceKeypress = true;\\n          chars = SPACEBAR_CHAR;\\n          break;\\n\\n        case topLevelTypes.topTextInput:\\n          // Record the characters to be added to the DOM.\\n          chars = nativeEvent.data;\\n\\n          // If it's a spacebar character, assume that we have already handled\\n          // it at the keypress level and bail immediately. Android Chrome\\n          // doesn't give us keycodes, so we need to blacklist it.\\n          if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\\n            return;\\n          }\\n\\n          // Otherwise, carry on.\\n          break;\\n\\n        default:\\n          // For other native event types, do nothing.\\n          return;\\n      }\\n    } else {\\n      switch (topLevelType) {\\n        case topLevelTypes.topPaste:\\n          // If a paste event occurs after a keypress, throw out the input\\n          // chars. Paste events should not lead to BeforeInput events.\\n          fallbackChars = null;\\n          break;\\n        case topLevelTypes.topKeyPress:\\n          /**\\n           * As of v27, Firefox may fire keypress events even when no character\\n           * will be inserted. A few possibilities:\\n           *\\n           * - `which` is `0`. Arrow keys, Esc key, etc.\\n           *\\n           * - `which` is the pressed key code, but no char is available.\\n           *   Ex: 'AltGr + d` in Polish. There is no modified character for\\n           *   this key combination and no character is inserted into the\\n           *   document, but FF fires the keypress for char code `100` anyway.\\n           *   No `input` event will occur.\\n           *\\n           * - `which` is the pressed key code, but a command combination is\\n           *   being used. Ex: `Cmd+C`. No character is inserted, and no\\n           *   `input` event will occur.\\n           */\\n          if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {\\n            fallbackChars = String.fromCharCode(nativeEvent.which);\\n          }\\n          break;\\n        case topLevelTypes.topCompositionEnd:\\n          fallbackChars = nativeEvent.data;\\n          break;\\n      }\\n\\n      // If no changes have occurred to the fallback string, no relevant\\n      // event has fired and we're done.\\n      if (fallbackChars === null) {\\n        return;\\n      }\\n\\n      chars = fallbackChars;\\n    }\\n\\n    // If no characters are being inserted, no BeforeInput event should\\n    // be fired.\\n    if (!chars) {\\n      return;\\n    }\\n\\n    var event = SyntheticInputEvent.getPooled(\\n      eventTypes.beforeInput,\\n      topLevelTargetID,\\n      nativeEvent\\n    );\\n\\n    event.data = chars;\\n    fallbackChars = null;\\n    EventPropagators.accumulateTwoPhaseDispatches(event);\\n    return event;\\n  }\\n};\\n\\nmodule.exports = BeforeInputEventPlugin;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/BeforeInputEventPlugin.js\\n ** module id = 78\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/BeforeInputEventPlugin.js?\");\n\n/***/ },\n/* 79 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/EventPropagators.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule EventPropagators\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar EventPluginHub = __webpack_require__(/*! ./EventPluginHub */ 61);\\n\\nvar accumulateInto = __webpack_require__(/*! ./accumulateInto */ 63);\\nvar forEachAccumulated = __webpack_require__(/*! ./forEachAccumulated */ 64);\\n\\nvar PropagationPhases = EventConstants.PropagationPhases;\\nvar getListener = EventPluginHub.getListener;\\n\\n/**\\n * Some event types have a notion of different registration names for different\\n * \\\"phases\\\" of propagation. This finds listeners by a given phase.\\n */\\nfunction listenerAtPhase(id, event, propagationPhase) {\\n  var registrationName =\\n    event.dispatchConfig.phasedRegistrationNames[propagationPhase];\\n  return getListener(id, registrationName);\\n}\\n\\n/**\\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\\n * here, allows us to not have to bind or create functions for each event.\\n * Mutating the event's members allows us to not have to create a wrapping\\n * \\\"dispatch\\\" object that pairs the event with the listener.\\n */\\nfunction accumulateDirectionalDispatches(domID, upwards, event) {\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    if (!domID) {\\n      throw new Error('Dispatching id must not be null');\\n    }\\n  }\\n  var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;\\n  var listener = listenerAtPhase(domID, event, phase);\\n  if (listener) {\\n    event._dispatchListeners =\\n      accumulateInto(event._dispatchListeners, listener);\\n    event._dispatchIDs = accumulateInto(event._dispatchIDs, domID);\\n  }\\n}\\n\\n/**\\n * Collect dispatches (must be entirely collected before dispatching - see unit\\n * tests). Lazily allocate the array to conserve memory.  We must loop through\\n * each event and perform the traversal for each one. We can not perform a\\n * single traversal for the entire collection of events because each event may\\n * have a different target.\\n */\\nfunction accumulateTwoPhaseDispatchesSingle(event) {\\n  if (event && event.dispatchConfig.phasedRegistrationNames) {\\n    EventPluginHub.injection.getInstanceHandle().traverseTwoPhase(\\n      event.dispatchMarker,\\n      accumulateDirectionalDispatches,\\n      event\\n    );\\n  }\\n}\\n\\n\\n/**\\n * Accumulates without regard to direction, does not look for phased\\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\\n */\\nfunction accumulateDispatches(id, ignoredDirection, event) {\\n  if (event && event.dispatchConfig.registrationName) {\\n    var registrationName = event.dispatchConfig.registrationName;\\n    var listener = getListener(id, registrationName);\\n    if (listener) {\\n      event._dispatchListeners =\\n        accumulateInto(event._dispatchListeners, listener);\\n      event._dispatchIDs = accumulateInto(event._dispatchIDs, id);\\n    }\\n  }\\n}\\n\\n/**\\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\\n * `dispatchMarker`.\\n * @param {SyntheticEvent} event\\n */\\nfunction accumulateDirectDispatchesSingle(event) {\\n  if (event && event.dispatchConfig.registrationName) {\\n    accumulateDispatches(event.dispatchMarker, null, event);\\n  }\\n}\\n\\nfunction accumulateTwoPhaseDispatches(events) {\\n  forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\\n}\\n\\nfunction accumulateEnterLeaveDispatches(leave, enter, fromID, toID) {\\n  EventPluginHub.injection.getInstanceHandle().traverseEnterLeave(\\n    fromID,\\n    toID,\\n    accumulateDispatches,\\n    leave,\\n    enter\\n  );\\n}\\n\\n\\nfunction accumulateDirectDispatches(events) {\\n  forEachAccumulated(events, accumulateDirectDispatchesSingle);\\n}\\n\\n\\n\\n/**\\n * A small set of propagation patterns, each of which will accept a small amount\\n * of information, and generate a set of \\\"dispatch ready event objects\\\" - which\\n * are sets of events that have already been annotated with a set of dispatched\\n * listener functions/ids. The API is designed this way to discourage these\\n * propagation strategies from actually executing the dispatches, since we\\n * always want to collect the entire set of dispatches before executing event a\\n * single one.\\n *\\n * @constructor EventPropagators\\n */\\nvar EventPropagators = {\\n  accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,\\n  accumulateDirectDispatches: accumulateDirectDispatches,\\n  accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches\\n};\\n\\nmodule.exports = EventPropagators;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/EventPropagators.js\\n ** module id = 79\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/EventPropagators.js?\");\n\n/***/ },\n/* 80 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/SyntheticInputEvent.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013 Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticInputEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 81);\\n\\n/**\\n * @interface Event\\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\\n *      /#events-inputevents\\n */\\nvar InputEventInterface = {\\n  data: null\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticInputEvent(\\n  dispatchConfig,\\n  dispatchMarker,\\n  nativeEvent) {\\n  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticEvent.augmentClass(\\n  SyntheticInputEvent,\\n  InputEventInterface\\n);\\n\\nmodule.exports = SyntheticInputEvent;\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticInputEvent.js\\n ** module id = 80\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticInputEvent.js?\");\n\n/***/ },\n/* 81 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/SyntheticEvent.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 17);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\nvar getEventTarget = __webpack_require__(/*! ./getEventTarget */ 82);\\n\\n/**\\n * @interface Event\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar EventInterface = {\\n  type: null,\\n  target: getEventTarget,\\n  // currentTarget is set when dispatching; no use in copying it here\\n  currentTarget: emptyFunction.thatReturnsNull,\\n  eventPhase: null,\\n  bubbles: null,\\n  cancelable: null,\\n  timeStamp: function(event) {\\n    return event.timeStamp || Date.now();\\n  },\\n  defaultPrevented: null,\\n  isTrusted: null\\n};\\n\\n/**\\n * Synthetic events are dispatched by event plugins, typically in response to a\\n * top-level event delegation handler.\\n *\\n * These systems should generally use pooling to reduce the frequency of garbage\\n * collection. The system should check `isPersistent` to determine whether the\\n * event should be released into the pool after being dispatched. Users that\\n * need a persisted event should invoke `persist`.\\n *\\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\\n * DOM interface; custom application-specific events can also subclass this.\\n *\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n */\\nfunction SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  this.dispatchConfig = dispatchConfig;\\n  this.dispatchMarker = dispatchMarker;\\n  this.nativeEvent = nativeEvent;\\n\\n  var Interface = this.constructor.Interface;\\n  for (var propName in Interface) {\\n    if (!Interface.hasOwnProperty(propName)) {\\n      continue;\\n    }\\n    var normalize = Interface[propName];\\n    if (normalize) {\\n      this[propName] = normalize(nativeEvent);\\n    } else {\\n      this[propName] = nativeEvent[propName];\\n    }\\n  }\\n\\n  var defaultPrevented = nativeEvent.defaultPrevented != null ?\\n    nativeEvent.defaultPrevented :\\n    nativeEvent.returnValue === false;\\n  if (defaultPrevented) {\\n    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\\n  } else {\\n    this.isDefaultPrevented = emptyFunction.thatReturnsFalse;\\n  }\\n  this.isPropagationStopped = emptyFunction.thatReturnsFalse;\\n}\\n\\nassign(SyntheticEvent.prototype, {\\n\\n  preventDefault: function() {\\n    this.defaultPrevented = true;\\n    var event = this.nativeEvent;\\n    event.preventDefault ? event.preventDefault() : event.returnValue = false;\\n    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\\n  },\\n\\n  stopPropagation: function() {\\n    var event = this.nativeEvent;\\n    event.stopPropagation ? event.stopPropagation() : event.cancelBubble = true;\\n    this.isPropagationStopped = emptyFunction.thatReturnsTrue;\\n  },\\n\\n  /**\\n   * We release all dispatched `SyntheticEvent`s after each event loop, adding\\n   * them back into the pool. This allows a way to hold onto a reference that\\n   * won't be added back into the pool.\\n   */\\n  persist: function() {\\n    this.isPersistent = emptyFunction.thatReturnsTrue;\\n  },\\n\\n  /**\\n   * Checks if this event should be released back into the pool.\\n   *\\n   * @return {boolean} True if this should not be released, false otherwise.\\n   */\\n  isPersistent: emptyFunction.thatReturnsFalse,\\n\\n  /**\\n   * `PooledClass` looks for `destructor` on each instance it releases.\\n   */\\n  destructor: function() {\\n    var Interface = this.constructor.Interface;\\n    for (var propName in Interface) {\\n      this[propName] = null;\\n    }\\n    this.dispatchConfig = null;\\n    this.dispatchMarker = null;\\n    this.nativeEvent = null;\\n  }\\n\\n});\\n\\nSyntheticEvent.Interface = EventInterface;\\n\\n/**\\n * Helper to reduce boilerplate when creating subclasses.\\n *\\n * @param {function} Class\\n * @param {?object} Interface\\n */\\nSyntheticEvent.augmentClass = function(Class, Interface) {\\n  var Super = this;\\n\\n  var prototype = Object.create(Super.prototype);\\n  assign(prototype, Class.prototype);\\n  Class.prototype = prototype;\\n  Class.prototype.constructor = Class;\\n\\n  Class.Interface = assign({}, Super.Interface, Interface);\\n  Class.augmentClass = Super.augmentClass;\\n\\n  PooledClass.addPoolingTo(Class, PooledClass.threeArgumentPooler);\\n};\\n\\nPooledClass.addPoolingTo(SyntheticEvent, PooledClass.threeArgumentPooler);\\n\\nmodule.exports = SyntheticEvent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticEvent.js\\n ** module id = 81\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticEvent.js?\");\n\n/***/ },\n/* 82 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/getEventTarget.js ***!\n  \\***************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getEventTarget\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Gets the target node from a native browser event by accounting for\\n * inconsistencies in browser DOM APIs.\\n *\\n * @param {object} nativeEvent Native browser event.\\n * @return {DOMEventTarget} Target node.\\n */\\nfunction getEventTarget(nativeEvent) {\\n  var target = nativeEvent.target || nativeEvent.srcElement || window;\\n  // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\\n  // @see http://www.quirksmode.org/js/events_properties.html\\n  return target.nodeType === 3 ? target.parentNode : target;\\n}\\n\\nmodule.exports = getEventTarget;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getEventTarget.js\\n ** module id = 82\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getEventTarget.js?\");\n\n/***/ },\n/* 83 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/ChangeEventPlugin.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ChangeEventPlugin\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar EventPluginHub = __webpack_require__(/*! ./EventPluginHub */ 61);\\nvar EventPropagators = __webpack_require__(/*! ./EventPropagators */ 79);\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 81);\\n\\nvar isEventSupported = __webpack_require__(/*! ./isEventSupported */ 68);\\nvar isTextInputElement = __webpack_require__(/*! ./isTextInputElement */ 84);\\nvar keyOf = __webpack_require__(/*! ./keyOf */ 42);\\n\\nvar topLevelTypes = EventConstants.topLevelTypes;\\n\\nvar eventTypes = {\\n  change: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onChange: null}),\\n      captured: keyOf({onChangeCapture: null})\\n    },\\n    dependencies: [\\n      topLevelTypes.topBlur,\\n      topLevelTypes.topChange,\\n      topLevelTypes.topClick,\\n      topLevelTypes.topFocus,\\n      topLevelTypes.topInput,\\n      topLevelTypes.topKeyDown,\\n      topLevelTypes.topKeyUp,\\n      topLevelTypes.topSelectionChange\\n    ]\\n  }\\n};\\n\\n/**\\n * For IE shims\\n */\\nvar activeElement = null;\\nvar activeElementID = null;\\nvar activeElementValue = null;\\nvar activeElementValueProp = null;\\n\\n/**\\n * SECTION: handle `change` event\\n */\\nfunction shouldUseChangeEvent(elem) {\\n  return (\\n    elem.nodeName === 'SELECT' ||\\n    (elem.nodeName === 'INPUT' && elem.type === 'file')\\n  );\\n}\\n\\nvar doesChangeEventBubble = false;\\nif (ExecutionEnvironment.canUseDOM) {\\n  // See `handleChange` comment below\\n  doesChangeEventBubble = isEventSupported('change') && (\\n    !('documentMode' in document) || document.documentMode > 8\\n  );\\n}\\n\\nfunction manualDispatchChangeEvent(nativeEvent) {\\n  var event = SyntheticEvent.getPooled(\\n    eventTypes.change,\\n    activeElementID,\\n    nativeEvent\\n  );\\n  EventPropagators.accumulateTwoPhaseDispatches(event);\\n\\n  // If change and propertychange bubbled, we'd just bind to it like all the\\n  // other events and have it go through ReactBrowserEventEmitter. Since it\\n  // doesn't, we manually listen for the events and so we have to enqueue and\\n  // process the abstract event manually.\\n  //\\n  // Batching is necessary here in order to ensure that all event handlers run\\n  // before the next rerender (including event handlers attached to ancestor\\n  // elements instead of directly on the input). Without this, controlled\\n  // components don't work properly in conjunction with event bubbling because\\n  // the component is rerendered and the value reverted before all the event\\n  // handlers can run. See https://github.com/facebook/react/issues/708.\\n  ReactUpdates.batchedUpdates(runEventInBatch, event);\\n}\\n\\nfunction runEventInBatch(event) {\\n  EventPluginHub.enqueueEvents(event);\\n  EventPluginHub.processEventQueue();\\n}\\n\\nfunction startWatchingForChangeEventIE8(target, targetID) {\\n  activeElement = target;\\n  activeElementID = targetID;\\n  activeElement.attachEvent('onchange', manualDispatchChangeEvent);\\n}\\n\\nfunction stopWatchingForChangeEventIE8() {\\n  if (!activeElement) {\\n    return;\\n  }\\n  activeElement.detachEvent('onchange', manualDispatchChangeEvent);\\n  activeElement = null;\\n  activeElementID = null;\\n}\\n\\nfunction getTargetIDForChangeEvent(\\n    topLevelType,\\n    topLevelTarget,\\n    topLevelTargetID) {\\n  if (topLevelType === topLevelTypes.topChange) {\\n    return topLevelTargetID;\\n  }\\n}\\nfunction handleEventsForChangeEventIE8(\\n    topLevelType,\\n    topLevelTarget,\\n    topLevelTargetID) {\\n  if (topLevelType === topLevelTypes.topFocus) {\\n    // stopWatching() should be a noop here but we call it just in case we\\n    // missed a blur event somehow.\\n    stopWatchingForChangeEventIE8();\\n    startWatchingForChangeEventIE8(topLevelTarget, topLevelTargetID);\\n  } else if (topLevelType === topLevelTypes.topBlur) {\\n    stopWatchingForChangeEventIE8();\\n  }\\n}\\n\\n\\n/**\\n * SECTION: handle `input` event\\n */\\nvar isInputEventSupported = false;\\nif (ExecutionEnvironment.canUseDOM) {\\n  // IE9 claims to support the input event but fails to trigger it when\\n  // deleting text, so we ignore its input events\\n  isInputEventSupported = isEventSupported('input') && (\\n    !('documentMode' in document) || document.documentMode > 9\\n  );\\n}\\n\\n/**\\n * (For old IE.) Replacement getter/setter for the `value` property that gets\\n * set on the active element.\\n */\\nvar newValueProp =  {\\n  get: function() {\\n    return activeElementValueProp.get.call(this);\\n  },\\n  set: function(val) {\\n    // Cast to a string so we can do equality checks.\\n    activeElementValue = '' + val;\\n    activeElementValueProp.set.call(this, val);\\n  }\\n};\\n\\n/**\\n * (For old IE.) Starts tracking propertychange events on the passed-in element\\n * and override the value property so that we can distinguish user events from\\n * value changes in JS.\\n */\\nfunction startWatchingForValueChange(target, targetID) {\\n  activeElement = target;\\n  activeElementID = targetID;\\n  activeElementValue = target.value;\\n  activeElementValueProp = Object.getOwnPropertyDescriptor(\\n    target.constructor.prototype,\\n    'value'\\n  );\\n\\n  Object.defineProperty(activeElement, 'value', newValueProp);\\n  activeElement.attachEvent('onpropertychange', handlePropertyChange);\\n}\\n\\n/**\\n * (For old IE.) Removes the event listeners from the currently-tracked element,\\n * if any exists.\\n */\\nfunction stopWatchingForValueChange() {\\n  if (!activeElement) {\\n    return;\\n  }\\n\\n  // delete restores the original property definition\\n  delete activeElement.value;\\n  activeElement.detachEvent('onpropertychange', handlePropertyChange);\\n\\n  activeElement = null;\\n  activeElementID = null;\\n  activeElementValue = null;\\n  activeElementValueProp = null;\\n}\\n\\n/**\\n * (For old IE.) Handles a propertychange event, sending a `change` event if\\n * the value of the active element has changed.\\n */\\nfunction handlePropertyChange(nativeEvent) {\\n  if (nativeEvent.propertyName !== 'value') {\\n    return;\\n  }\\n  var value = nativeEvent.srcElement.value;\\n  if (value === activeElementValue) {\\n    return;\\n  }\\n  activeElementValue = value;\\n\\n  manualDispatchChangeEvent(nativeEvent);\\n}\\n\\n/**\\n * If a `change` event should be fired, returns the target's ID.\\n */\\nfunction getTargetIDForInputEvent(\\n    topLevelType,\\n    topLevelTarget,\\n    topLevelTargetID) {\\n  if (topLevelType === topLevelTypes.topInput) {\\n    // In modern browsers (i.e., not IE8 or IE9), the input event is exactly\\n    // what we want so fall through here and trigger an abstract event\\n    return topLevelTargetID;\\n  }\\n}\\n\\n// For IE8 and IE9.\\nfunction handleEventsForInputEventIE(\\n    topLevelType,\\n    topLevelTarget,\\n    topLevelTargetID) {\\n  if (topLevelType === topLevelTypes.topFocus) {\\n    // In IE8, we can capture almost all .value changes by adding a\\n    // propertychange handler and looking for events with propertyName\\n    // equal to 'value'\\n    // In IE9, propertychange fires for most input events but is buggy and\\n    // doesn't fire when text is deleted, but conveniently, selectionchange\\n    // appears to fire in all of the remaining cases so we catch those and\\n    // forward the event if the value has changed\\n    // In either case, we don't want to call the event handler if the value\\n    // is changed from JS so we redefine a setter for `.value` that updates\\n    // our activeElementValue variable, allowing us to ignore those changes\\n    //\\n    // stopWatching() should be a noop here but we call it just in case we\\n    // missed a blur event somehow.\\n    stopWatchingForValueChange();\\n    startWatchingForValueChange(topLevelTarget, topLevelTargetID);\\n  } else if (topLevelType === topLevelTypes.topBlur) {\\n    stopWatchingForValueChange();\\n  }\\n}\\n\\n// For IE8 and IE9.\\nfunction getTargetIDForInputEventIE(\\n    topLevelType,\\n    topLevelTarget,\\n    topLevelTargetID) {\\n  if (topLevelType === topLevelTypes.topSelectionChange ||\\n      topLevelType === topLevelTypes.topKeyUp ||\\n      topLevelType === topLevelTypes.topKeyDown) {\\n    // On the selectionchange event, the target is just document which isn't\\n    // helpful for us so just check activeElement instead.\\n    //\\n    // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\\n    // propertychange on the first input event after setting `value` from a\\n    // script and fires only keydown, keypress, keyup. Catching keyup usually\\n    // gets it and catching keydown lets us fire an event for the first\\n    // keystroke if user does a key repeat (it'll be a little delayed: right\\n    // before the second keystroke). Other input methods (e.g., paste) seem to\\n    // fire selectionchange normally.\\n    if (activeElement && activeElement.value !== activeElementValue) {\\n      activeElementValue = activeElement.value;\\n      return activeElementID;\\n    }\\n  }\\n}\\n\\n\\n/**\\n * SECTION: handle `click` event\\n */\\nfunction shouldUseClickEvent(elem) {\\n  // Use the `click` event to detect changes to checkbox and radio inputs.\\n  // This approach works across all browsers, whereas `change` does not fire\\n  // until `blur` in IE8.\\n  return (\\n    elem.nodeName === 'INPUT' &&\\n    (elem.type === 'checkbox' || elem.type === 'radio')\\n  );\\n}\\n\\nfunction getTargetIDForClickEvent(\\n    topLevelType,\\n    topLevelTarget,\\n    topLevelTargetID) {\\n  if (topLevelType === topLevelTypes.topClick) {\\n    return topLevelTargetID;\\n  }\\n}\\n\\n/**\\n * This plugin creates an `onChange` event that normalizes change events\\n * across form elements. This event fires at a time when it's possible to\\n * change the element's value without seeing a flicker.\\n *\\n * Supported elements are:\\n * - input (see `isTextInputElement`)\\n * - textarea\\n * - select\\n */\\nvar ChangeEventPlugin = {\\n\\n  eventTypes: eventTypes,\\n\\n  /**\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native browser event.\\n   * @return {*} An accumulation of synthetic events.\\n   * @see {EventPluginHub.extractEvents}\\n   */\\n  extractEvents: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n\\n    var getTargetIDFunc, handleEventFunc;\\n    if (shouldUseChangeEvent(topLevelTarget)) {\\n      if (doesChangeEventBubble) {\\n        getTargetIDFunc = getTargetIDForChangeEvent;\\n      } else {\\n        handleEventFunc = handleEventsForChangeEventIE8;\\n      }\\n    } else if (isTextInputElement(topLevelTarget)) {\\n      if (isInputEventSupported) {\\n        getTargetIDFunc = getTargetIDForInputEvent;\\n      } else {\\n        getTargetIDFunc = getTargetIDForInputEventIE;\\n        handleEventFunc = handleEventsForInputEventIE;\\n      }\\n    } else if (shouldUseClickEvent(topLevelTarget)) {\\n      getTargetIDFunc = getTargetIDForClickEvent;\\n    }\\n\\n    if (getTargetIDFunc) {\\n      var targetID = getTargetIDFunc(\\n        topLevelType,\\n        topLevelTarget,\\n        topLevelTargetID\\n      );\\n      if (targetID) {\\n        var event = SyntheticEvent.getPooled(\\n          eventTypes.change,\\n          targetID,\\n          nativeEvent\\n        );\\n        EventPropagators.accumulateTwoPhaseDispatches(event);\\n        return event;\\n      }\\n    }\\n\\n    if (handleEventFunc) {\\n      handleEventFunc(\\n        topLevelType,\\n        topLevelTarget,\\n        topLevelTargetID\\n      );\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = ChangeEventPlugin;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ChangeEventPlugin.js\\n ** module id = 83\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ChangeEventPlugin.js?\");\n\n/***/ },\n/* 84 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/isTextInputElement.js ***!\n  \\*******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule isTextInputElement\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\\n */\\nvar supportedInputTypes = {\\n  'color': true,\\n  'date': true,\\n  'datetime': true,\\n  'datetime-local': true,\\n  'email': true,\\n  'month': true,\\n  'number': true,\\n  'password': true,\\n  'range': true,\\n  'search': true,\\n  'tel': true,\\n  'text': true,\\n  'time': true,\\n  'url': true,\\n  'week': true\\n};\\n\\nfunction isTextInputElement(elem) {\\n  return elem && (\\n    (elem.nodeName === 'INPUT' && supportedInputTypes[elem.type]) ||\\n    elem.nodeName === 'TEXTAREA'\\n  );\\n}\\n\\nmodule.exports = isTextInputElement;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/isTextInputElement.js\\n ** module id = 84\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/isTextInputElement.js?\");\n\n/***/ },\n/* 85 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ClientReactRootIndex.js ***!\n  \\*********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ClientReactRootIndex\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\nvar nextReactRootIndex = 0;\\n\\nvar ClientReactRootIndex = {\\n  createReactRootIndex: function() {\\n    return nextReactRootIndex++;\\n  }\\n};\\n\\nmodule.exports = ClientReactRootIndex;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ClientReactRootIndex.js\\n ** module id = 85\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ClientReactRootIndex.js?\");\n\n/***/ },\n/* 86 */\n/*!***********************************************!*\\\n  !*** ./~/react/lib/CompositionEventPlugin.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule CompositionEventPlugin\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar EventPropagators = __webpack_require__(/*! ./EventPropagators */ 79);\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\nvar ReactInputSelection = __webpack_require__(/*! ./ReactInputSelection */ 87);\\nvar SyntheticCompositionEvent = __webpack_require__(/*! ./SyntheticCompositionEvent */ 93);\\n\\nvar getTextContentAccessor = __webpack_require__(/*! ./getTextContentAccessor */ 90);\\nvar keyOf = __webpack_require__(/*! ./keyOf */ 42);\\n\\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\\nvar START_KEYCODE = 229;\\n\\nvar useCompositionEvent = (\\n  ExecutionEnvironment.canUseDOM &&\\n  'CompositionEvent' in window\\n);\\n\\n// In IE9+, we have access to composition events, but the data supplied\\n// by the native compositionend event may be incorrect. In Korean, for example,\\n// the compositionend event contains only one character regardless of\\n// how many characters have been composed since compositionstart.\\n// We therefore use the fallback data while still using the native\\n// events as triggers.\\nvar useFallbackData = (\\n  !useCompositionEvent ||\\n  (\\n    'documentMode' in document &&\\n    document.documentMode > 8 &&\\n    document.documentMode <= 11\\n  )\\n);\\n\\nvar topLevelTypes = EventConstants.topLevelTypes;\\nvar currentComposition = null;\\n\\n// Events and their corresponding property names.\\nvar eventTypes = {\\n  compositionEnd: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onCompositionEnd: null}),\\n      captured: keyOf({onCompositionEndCapture: null})\\n    },\\n    dependencies: [\\n      topLevelTypes.topBlur,\\n      topLevelTypes.topCompositionEnd,\\n      topLevelTypes.topKeyDown,\\n      topLevelTypes.topKeyPress,\\n      topLevelTypes.topKeyUp,\\n      topLevelTypes.topMouseDown\\n    ]\\n  },\\n  compositionStart: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onCompositionStart: null}),\\n      captured: keyOf({onCompositionStartCapture: null})\\n    },\\n    dependencies: [\\n      topLevelTypes.topBlur,\\n      topLevelTypes.topCompositionStart,\\n      topLevelTypes.topKeyDown,\\n      topLevelTypes.topKeyPress,\\n      topLevelTypes.topKeyUp,\\n      topLevelTypes.topMouseDown\\n    ]\\n  },\\n  compositionUpdate: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onCompositionUpdate: null}),\\n      captured: keyOf({onCompositionUpdateCapture: null})\\n    },\\n    dependencies: [\\n      topLevelTypes.topBlur,\\n      topLevelTypes.topCompositionUpdate,\\n      topLevelTypes.topKeyDown,\\n      topLevelTypes.topKeyPress,\\n      topLevelTypes.topKeyUp,\\n      topLevelTypes.topMouseDown\\n    ]\\n  }\\n};\\n\\n/**\\n * Translate native top level events into event types.\\n *\\n * @param {string} topLevelType\\n * @return {object}\\n */\\nfunction getCompositionEventType(topLevelType) {\\n  switch (topLevelType) {\\n    case topLevelTypes.topCompositionStart:\\n      return eventTypes.compositionStart;\\n    case topLevelTypes.topCompositionEnd:\\n      return eventTypes.compositionEnd;\\n    case topLevelTypes.topCompositionUpdate:\\n      return eventTypes.compositionUpdate;\\n  }\\n}\\n\\n/**\\n * Does our fallback best-guess model think this event signifies that\\n * composition has begun?\\n *\\n * @param {string} topLevelType\\n * @param {object} nativeEvent\\n * @return {boolean}\\n */\\nfunction isFallbackStart(topLevelType, nativeEvent) {\\n  return (\\n    topLevelType === topLevelTypes.topKeyDown &&\\n    nativeEvent.keyCode === START_KEYCODE\\n  );\\n}\\n\\n/**\\n * Does our fallback mode think that this event is the end of composition?\\n *\\n * @param {string} topLevelType\\n * @param {object} nativeEvent\\n * @return {boolean}\\n */\\nfunction isFallbackEnd(topLevelType, nativeEvent) {\\n  switch (topLevelType) {\\n    case topLevelTypes.topKeyUp:\\n      // Command keys insert or clear IME input.\\n      return (END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1);\\n    case topLevelTypes.topKeyDown:\\n      // Expect IME keyCode on each keydown. If we get any other\\n      // code we must have exited earlier.\\n      return (nativeEvent.keyCode !== START_KEYCODE);\\n    case topLevelTypes.topKeyPress:\\n    case topLevelTypes.topMouseDown:\\n    case topLevelTypes.topBlur:\\n      // Events are not possible without cancelling IME.\\n      return true;\\n    default:\\n      return false;\\n  }\\n}\\n\\n/**\\n * Helper class stores information about selection and document state\\n * so we can figure out what changed at a later date.\\n *\\n * @param {DOMEventTarget} root\\n */\\nfunction FallbackCompositionState(root) {\\n  this.root = root;\\n  this.startSelection = ReactInputSelection.getSelection(root);\\n  this.startValue = this.getText();\\n}\\n\\n/**\\n * Get current text of input.\\n *\\n * @return {string}\\n */\\nFallbackCompositionState.prototype.getText = function() {\\n  return this.root.value || this.root[getTextContentAccessor()];\\n};\\n\\n/**\\n * Text that has changed since the start of composition.\\n *\\n * @return {string}\\n */\\nFallbackCompositionState.prototype.getData = function() {\\n  var endValue = this.getText();\\n  var prefixLength = this.startSelection.start;\\n  var suffixLength = this.startValue.length - this.startSelection.end;\\n\\n  return endValue.substr(\\n    prefixLength,\\n    endValue.length - suffixLength - prefixLength\\n  );\\n};\\n\\n/**\\n * This plugin creates `onCompositionStart`, `onCompositionUpdate` and\\n * `onCompositionEnd` events on inputs, textareas and contentEditable\\n * nodes.\\n */\\nvar CompositionEventPlugin = {\\n\\n  eventTypes: eventTypes,\\n\\n  /**\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native browser event.\\n   * @return {*} An accumulation of synthetic events.\\n   * @see {EventPluginHub.extractEvents}\\n   */\\n  extractEvents: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n\\n    var eventType;\\n    var data;\\n\\n    if (useCompositionEvent) {\\n      eventType = getCompositionEventType(topLevelType);\\n    } else if (!currentComposition) {\\n      if (isFallbackStart(topLevelType, nativeEvent)) {\\n        eventType = eventTypes.compositionStart;\\n      }\\n    } else if (isFallbackEnd(topLevelType, nativeEvent)) {\\n      eventType = eventTypes.compositionEnd;\\n    }\\n\\n    if (useFallbackData) {\\n      // The current composition is stored statically and must not be\\n      // overwritten while composition continues.\\n      if (!currentComposition && eventType === eventTypes.compositionStart) {\\n        currentComposition = new FallbackCompositionState(topLevelTarget);\\n      } else if (eventType === eventTypes.compositionEnd) {\\n        if (currentComposition) {\\n          data = currentComposition.getData();\\n          currentComposition = null;\\n        }\\n      }\\n    }\\n\\n    if (eventType) {\\n      var event = SyntheticCompositionEvent.getPooled(\\n        eventType,\\n        topLevelTargetID,\\n        nativeEvent\\n      );\\n      if (data) {\\n        // Inject data generated from fallback path into the synthetic event.\\n        // This matches the property of native CompositionEventInterface.\\n        event.data = data;\\n      }\\n      EventPropagators.accumulateTwoPhaseDispatches(event);\\n      return event;\\n    }\\n  }\\n};\\n\\nmodule.exports = CompositionEventPlugin;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/CompositionEventPlugin.js\\n ** module id = 86\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/CompositionEventPlugin.js?\");\n\n/***/ },\n/* 87 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/ReactInputSelection.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactInputSelection\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactDOMSelection = __webpack_require__(/*! ./ReactDOMSelection */ 88);\\n\\nvar containsNode = __webpack_require__(/*! ./containsNode */ 57);\\nvar focusNode = __webpack_require__(/*! ./focusNode */ 91);\\nvar getActiveElement = __webpack_require__(/*! ./getActiveElement */ 92);\\n\\nfunction isInDocument(node) {\\n  return containsNode(document.documentElement, node);\\n}\\n\\n/**\\n * @ReactInputSelection: React input selection module. Based on Selection.js,\\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\\n * assume buttons have range selections allowed).\\n * Input selection module for React.\\n */\\nvar ReactInputSelection = {\\n\\n  hasSelectionCapabilities: function(elem) {\\n    return elem && (\\n      (elem.nodeName === 'INPUT' && elem.type === 'text') ||\\n      elem.nodeName === 'TEXTAREA' ||\\n      elem.contentEditable === 'true'\\n    );\\n  },\\n\\n  getSelectionInformation: function() {\\n    var focusedElem = getActiveElement();\\n    return {\\n      focusedElem: focusedElem,\\n      selectionRange:\\n          ReactInputSelection.hasSelectionCapabilities(focusedElem) ?\\n          ReactInputSelection.getSelection(focusedElem) :\\n          null\\n    };\\n  },\\n\\n  /**\\n   * @restoreSelection: If any selection information was potentially lost,\\n   * restore it. This is useful when performing operations that could remove dom\\n   * nodes and place them back in, resulting in focus being lost.\\n   */\\n  restoreSelection: function(priorSelectionInformation) {\\n    var curFocusedElem = getActiveElement();\\n    var priorFocusedElem = priorSelectionInformation.focusedElem;\\n    var priorSelectionRange = priorSelectionInformation.selectionRange;\\n    if (curFocusedElem !== priorFocusedElem &&\\n        isInDocument(priorFocusedElem)) {\\n      if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {\\n        ReactInputSelection.setSelection(\\n          priorFocusedElem,\\n          priorSelectionRange\\n        );\\n      }\\n      focusNode(priorFocusedElem);\\n    }\\n  },\\n\\n  /**\\n   * @getSelection: Gets the selection bounds of a focused textarea, input or\\n   * contentEditable node.\\n   * -@input: Look up selection bounds of this input\\n   * -@return {start: selectionStart, end: selectionEnd}\\n   */\\n  getSelection: function(input) {\\n    var selection;\\n\\n    if ('selectionStart' in input) {\\n      // Modern browser with input or textarea.\\n      selection = {\\n        start: input.selectionStart,\\n        end: input.selectionEnd\\n      };\\n    } else if (document.selection && input.nodeName === 'INPUT') {\\n      // IE8 input.\\n      var range = document.selection.createRange();\\n      // There can only be one selection per document in IE, so it must\\n      // be in our element.\\n      if (range.parentElement() === input) {\\n        selection = {\\n          start: -range.moveStart('character', -input.value.length),\\n          end: -range.moveEnd('character', -input.value.length)\\n        };\\n      }\\n    } else {\\n      // Content editable or old IE textarea.\\n      selection = ReactDOMSelection.getOffsets(input);\\n    }\\n\\n    return selection || {start: 0, end: 0};\\n  },\\n\\n  /**\\n   * @setSelection: Sets the selection bounds of a textarea or input and focuses\\n   * the input.\\n   * -@input     Set selection bounds of this input or textarea\\n   * -@offsets   Object of same form that is returned from get*\\n   */\\n  setSelection: function(input, offsets) {\\n    var start = offsets.start;\\n    var end = offsets.end;\\n    if (typeof end === 'undefined') {\\n      end = start;\\n    }\\n\\n    if ('selectionStart' in input) {\\n      input.selectionStart = start;\\n      input.selectionEnd = Math.min(end, input.value.length);\\n    } else if (document.selection && input.nodeName === 'INPUT') {\\n      var range = input.createTextRange();\\n      range.collapse(true);\\n      range.moveStart('character', start);\\n      range.moveEnd('character', end - start);\\n      range.select();\\n    } else {\\n      ReactDOMSelection.setOffsets(input, offsets);\\n    }\\n  }\\n};\\n\\nmodule.exports = ReactInputSelection;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactInputSelection.js\\n ** module id = 87\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactInputSelection.js?\");\n\n/***/ },\n/* 88 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/ReactDOMSelection.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMSelection\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar getNodeForCharacterOffset = __webpack_require__(/*! ./getNodeForCharacterOffset */ 89);\\nvar getTextContentAccessor = __webpack_require__(/*! ./getTextContentAccessor */ 90);\\n\\n/**\\n * While `isCollapsed` is available on the Selection object and `collapsed`\\n * is available on the Range object, IE11 sometimes gets them wrong.\\n * If the anchor/focus nodes and offsets are the same, the range is collapsed.\\n */\\nfunction isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {\\n  return anchorNode === focusNode && anchorOffset === focusOffset;\\n}\\n\\n/**\\n * Get the appropriate anchor and focus node/offset pairs for IE.\\n *\\n * The catch here is that IE's selection API doesn't provide information\\n * about whether the selection is forward or backward, so we have to\\n * behave as though it's always forward.\\n *\\n * IE text differs from modern selection in that it behaves as though\\n * block elements end with a new line. This means character offsets will\\n * differ between the two APIs.\\n *\\n * @param {DOMElement} node\\n * @return {object}\\n */\\nfunction getIEOffsets(node) {\\n  var selection = document.selection;\\n  var selectedRange = selection.createRange();\\n  var selectedLength = selectedRange.text.length;\\n\\n  // Duplicate selection so we can move range without breaking user selection.\\n  var fromStart = selectedRange.duplicate();\\n  fromStart.moveToElementText(node);\\n  fromStart.setEndPoint('EndToStart', selectedRange);\\n\\n  var startOffset = fromStart.text.length;\\n  var endOffset = startOffset + selectedLength;\\n\\n  return {\\n    start: startOffset,\\n    end: endOffset\\n  };\\n}\\n\\n/**\\n * @param {DOMElement} node\\n * @return {?object}\\n */\\nfunction getModernOffsets(node) {\\n  var selection = window.getSelection && window.getSelection();\\n\\n  if (!selection || selection.rangeCount === 0) {\\n    return null;\\n  }\\n\\n  var anchorNode = selection.anchorNode;\\n  var anchorOffset = selection.anchorOffset;\\n  var focusNode = selection.focusNode;\\n  var focusOffset = selection.focusOffset;\\n\\n  var currentRange = selection.getRangeAt(0);\\n\\n  // If the node and offset values are the same, the selection is collapsed.\\n  // `Selection.isCollapsed` is available natively, but IE sometimes gets\\n  // this value wrong.\\n  var isSelectionCollapsed = isCollapsed(\\n    selection.anchorNode,\\n    selection.anchorOffset,\\n    selection.focusNode,\\n    selection.focusOffset\\n  );\\n\\n  var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length;\\n\\n  var tempRange = currentRange.cloneRange();\\n  tempRange.selectNodeContents(node);\\n  tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);\\n\\n  var isTempRangeCollapsed = isCollapsed(\\n    tempRange.startContainer,\\n    tempRange.startOffset,\\n    tempRange.endContainer,\\n    tempRange.endOffset\\n  );\\n\\n  var start = isTempRangeCollapsed ? 0 : tempRange.toString().length;\\n  var end = start + rangeLength;\\n\\n  // Detect whether the selection is backward.\\n  var detectionRange = document.createRange();\\n  detectionRange.setStart(anchorNode, anchorOffset);\\n  detectionRange.setEnd(focusNode, focusOffset);\\n  var isBackward = detectionRange.collapsed;\\n\\n  return {\\n    start: isBackward ? end : start,\\n    end: isBackward ? start : end\\n  };\\n}\\n\\n/**\\n * @param {DOMElement|DOMTextNode} node\\n * @param {object} offsets\\n */\\nfunction setIEOffsets(node, offsets) {\\n  var range = document.selection.createRange().duplicate();\\n  var start, end;\\n\\n  if (typeof offsets.end === 'undefined') {\\n    start = offsets.start;\\n    end = start;\\n  } else if (offsets.start > offsets.end) {\\n    start = offsets.end;\\n    end = offsets.start;\\n  } else {\\n    start = offsets.start;\\n    end = offsets.end;\\n  }\\n\\n  range.moveToElementText(node);\\n  range.moveStart('character', start);\\n  range.setEndPoint('EndToStart', range);\\n  range.moveEnd('character', end - start);\\n  range.select();\\n}\\n\\n/**\\n * In modern non-IE browsers, we can support both forward and backward\\n * selections.\\n *\\n * Note: IE10+ supports the Selection object, but it does not support\\n * the `extend` method, which means that even in modern IE, it's not possible\\n * to programatically create a backward selection. Thus, for all IE\\n * versions, we use the old IE API to create our selections.\\n *\\n * @param {DOMElement|DOMTextNode} node\\n * @param {object} offsets\\n */\\nfunction setModernOffsets(node, offsets) {\\n  if (!window.getSelection) {\\n    return;\\n  }\\n\\n  var selection = window.getSelection();\\n  var length = node[getTextContentAccessor()].length;\\n  var start = Math.min(offsets.start, length);\\n  var end = typeof offsets.end === 'undefined' ?\\n            start : Math.min(offsets.end, length);\\n\\n  // IE 11 uses modern selection, but doesn't support the extend method.\\n  // Flip backward selections, so we can set with a single range.\\n  if (!selection.extend && start > end) {\\n    var temp = end;\\n    end = start;\\n    start = temp;\\n  }\\n\\n  var startMarker = getNodeForCharacterOffset(node, start);\\n  var endMarker = getNodeForCharacterOffset(node, end);\\n\\n  if (startMarker && endMarker) {\\n    var range = document.createRange();\\n    range.setStart(startMarker.node, startMarker.offset);\\n    selection.removeAllRanges();\\n\\n    if (start > end) {\\n      selection.addRange(range);\\n      selection.extend(endMarker.node, endMarker.offset);\\n    } else {\\n      range.setEnd(endMarker.node, endMarker.offset);\\n      selection.addRange(range);\\n    }\\n  }\\n}\\n\\nvar useIEOffsets = ExecutionEnvironment.canUseDOM && document.selection;\\n\\nvar ReactDOMSelection = {\\n  /**\\n   * @param {DOMElement} node\\n   */\\n  getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,\\n\\n  /**\\n   * @param {DOMElement|DOMTextNode} node\\n   * @param {object} offsets\\n   */\\n  setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets\\n};\\n\\nmodule.exports = ReactDOMSelection;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMSelection.js\\n ** module id = 88\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMSelection.js?\");\n\n/***/ },\n/* 89 */\n/*!**************************************************!*\\\n  !*** ./~/react/lib/getNodeForCharacterOffset.js ***!\n  \\**************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getNodeForCharacterOffset\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Given any node return the first leaf node without children.\\n *\\n * @param {DOMElement|DOMTextNode} node\\n * @return {DOMElement|DOMTextNode}\\n */\\nfunction getLeafNode(node) {\\n  while (node && node.firstChild) {\\n    node = node.firstChild;\\n  }\\n  return node;\\n}\\n\\n/**\\n * Get the next sibling within a container. This will walk up the\\n * DOM if a node's siblings have been exhausted.\\n *\\n * @param {DOMElement|DOMTextNode} node\\n * @return {?DOMElement|DOMTextNode}\\n */\\nfunction getSiblingNode(node) {\\n  while (node) {\\n    if (node.nextSibling) {\\n      return node.nextSibling;\\n    }\\n    node = node.parentNode;\\n  }\\n}\\n\\n/**\\n * Get object describing the nodes which contain characters at offset.\\n *\\n * @param {DOMElement|DOMTextNode} root\\n * @param {number} offset\\n * @return {?object}\\n */\\nfunction getNodeForCharacterOffset(root, offset) {\\n  var node = getLeafNode(root);\\n  var nodeStart = 0;\\n  var nodeEnd = 0;\\n\\n  while (node) {\\n    if (node.nodeType == 3) {\\n      nodeEnd = nodeStart + node.textContent.length;\\n\\n      if (nodeStart <= offset && nodeEnd >= offset) {\\n        return {\\n          node: node,\\n          offset: offset - nodeStart\\n        };\\n      }\\n\\n      nodeStart = nodeEnd;\\n    }\\n\\n    node = getLeafNode(getSiblingNode(node));\\n  }\\n}\\n\\nmodule.exports = getNodeForCharacterOffset;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getNodeForCharacterOffset.js\\n ** module id = 89\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getNodeForCharacterOffset.js?\");\n\n/***/ },\n/* 90 */\n/*!***********************************************!*\\\n  !*** ./~/react/lib/getTextContentAccessor.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getTextContentAccessor\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar contentKey = null;\\n\\n/**\\n * Gets the key used to access text content on a DOM node.\\n *\\n * @return {?string} Key used to access text content.\\n * @internal\\n */\\nfunction getTextContentAccessor() {\\n  if (!contentKey && ExecutionEnvironment.canUseDOM) {\\n    // Prefer textContent to innerText because many browsers support both but\\n    // SVG <text> elements don't support innerText even when <div> does.\\n    contentKey = 'textContent' in document.documentElement ?\\n      'textContent' :\\n      'innerText';\\n  }\\n  return contentKey;\\n}\\n\\nmodule.exports = getTextContentAccessor;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getTextContentAccessor.js\\n ** module id = 90\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getTextContentAccessor.js?\");\n\n/***/ },\n/* 91 */\n/*!**********************************!*\\\n  !*** ./~/react/lib/focusNode.js ***!\n  \\**********************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule focusNode\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * @param {DOMElement} node input/textarea to focus\\n */\\nfunction focusNode(node) {\\n  // IE8 can throw \\\"Can't move focus to the control because it is invisible,\\n  // not enabled, or of a type that does not accept the focus.\\\" for all kinds of\\n  // reasons that are too expensive and fragile to test.\\n  try {\\n    node.focus();\\n  } catch(e) {\\n  }\\n}\\n\\nmodule.exports = focusNode;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/focusNode.js\\n ** module id = 91\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/focusNode.js?\");\n\n/***/ },\n/* 92 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/getActiveElement.js ***!\n  \\*****************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getActiveElement\\n * @typechecks\\n */\\n\\n/**\\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\\n * not safe to call document.activeElement if there is nothing focused.\\n *\\n * The activeElement will be null only if the document body is not yet defined.\\n */\\nfunction getActiveElement() /*?DOMElement*/ {\\n  try {\\n    return document.activeElement || document.body;\\n  } catch (e) {\\n    return document.body;\\n  }\\n}\\n\\nmodule.exports = getActiveElement;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getActiveElement.js\\n ** module id = 92\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getActiveElement.js?\");\n\n/***/ },\n/* 93 */\n/*!**************************************************!*\\\n  !*** ./~/react/lib/SyntheticCompositionEvent.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticCompositionEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 81);\\n\\n/**\\n * @interface Event\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\\n */\\nvar CompositionEventInterface = {\\n  data: null\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticCompositionEvent(\\n  dispatchConfig,\\n  dispatchMarker,\\n  nativeEvent) {\\n  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticEvent.augmentClass(\\n  SyntheticCompositionEvent,\\n  CompositionEventInterface\\n);\\n\\nmodule.exports = SyntheticCompositionEvent;\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticCompositionEvent.js\\n ** module id = 93\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticCompositionEvent.js?\");\n\n/***/ },\n/* 94 */\n/*!************************************************!*\\\n  !*** ./~/react/lib/DefaultEventPluginOrder.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule DefaultEventPluginOrder\\n */\\n\\n\\\"use strict\\\";\\n\\n var keyOf = __webpack_require__(/*! ./keyOf */ 42);\\n\\n/**\\n * Module that is injectable into `EventPluginHub`, that specifies a\\n * deterministic ordering of `EventPlugin`s. A convenient way to reason about\\n * plugins, without having to package every one of them. This is better than\\n * having plugins be ordered in the same order that they are injected because\\n * that ordering would be influenced by the packaging order.\\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\\n */\\nvar DefaultEventPluginOrder = [\\n  keyOf({ResponderEventPlugin: null}),\\n  keyOf({SimpleEventPlugin: null}),\\n  keyOf({TapEventPlugin: null}),\\n  keyOf({EnterLeaveEventPlugin: null}),\\n  keyOf({ChangeEventPlugin: null}),\\n  keyOf({SelectEventPlugin: null}),\\n  keyOf({CompositionEventPlugin: null}),\\n  keyOf({BeforeInputEventPlugin: null}),\\n  keyOf({AnalyticsEventPlugin: null}),\\n  keyOf({MobileSafariClickEventPlugin: null})\\n];\\n\\nmodule.exports = DefaultEventPluginOrder;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/DefaultEventPluginOrder.js\\n ** module id = 94\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/DefaultEventPluginOrder.js?\");\n\n/***/ },\n/* 95 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/EnterLeaveEventPlugin.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule EnterLeaveEventPlugin\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar EventPropagators = __webpack_require__(/*! ./EventPropagators */ 79);\\nvar SyntheticMouseEvent = __webpack_require__(/*! ./SyntheticMouseEvent */ 96);\\n\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar keyOf = __webpack_require__(/*! ./keyOf */ 42);\\n\\nvar topLevelTypes = EventConstants.topLevelTypes;\\nvar getFirstReactDOM = ReactMount.getFirstReactDOM;\\n\\nvar eventTypes = {\\n  mouseEnter: {\\n    registrationName: keyOf({onMouseEnter: null}),\\n    dependencies: [\\n      topLevelTypes.topMouseOut,\\n      topLevelTypes.topMouseOver\\n    ]\\n  },\\n  mouseLeave: {\\n    registrationName: keyOf({onMouseLeave: null}),\\n    dependencies: [\\n      topLevelTypes.topMouseOut,\\n      topLevelTypes.topMouseOver\\n    ]\\n  }\\n};\\n\\nvar extractedEvents = [null, null];\\n\\nvar EnterLeaveEventPlugin = {\\n\\n  eventTypes: eventTypes,\\n\\n  /**\\n   * For almost every interaction we care about, there will be both a top-level\\n   * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\\n   * we do not extract duplicate events. However, moving the mouse into the\\n   * browser from outside will not fire a `mouseout` event. In this case, we use\\n   * the `mouseover` top-level event.\\n   *\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native browser event.\\n   * @return {*} An accumulation of synthetic events.\\n   * @see {EventPluginHub.extractEvents}\\n   */\\n  extractEvents: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n    if (topLevelType === topLevelTypes.topMouseOver &&\\n        (nativeEvent.relatedTarget || nativeEvent.fromElement)) {\\n      return null;\\n    }\\n    if (topLevelType !== topLevelTypes.topMouseOut &&\\n        topLevelType !== topLevelTypes.topMouseOver) {\\n      // Must not be a mouse in or mouse out - ignoring.\\n      return null;\\n    }\\n\\n    var win;\\n    if (topLevelTarget.window === topLevelTarget) {\\n      // `topLevelTarget` is probably a window object.\\n      win = topLevelTarget;\\n    } else {\\n      // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\\n      var doc = topLevelTarget.ownerDocument;\\n      if (doc) {\\n        win = doc.defaultView || doc.parentWindow;\\n      } else {\\n        win = window;\\n      }\\n    }\\n\\n    var from, to;\\n    if (topLevelType === topLevelTypes.topMouseOut) {\\n      from = topLevelTarget;\\n      to =\\n        getFirstReactDOM(nativeEvent.relatedTarget || nativeEvent.toElement) ||\\n        win;\\n    } else {\\n      from = win;\\n      to = topLevelTarget;\\n    }\\n\\n    if (from === to) {\\n      // Nothing pertains to our managed components.\\n      return null;\\n    }\\n\\n    var fromID = from ? ReactMount.getID(from) : '';\\n    var toID = to ? ReactMount.getID(to) : '';\\n\\n    var leave = SyntheticMouseEvent.getPooled(\\n      eventTypes.mouseLeave,\\n      fromID,\\n      nativeEvent\\n    );\\n    leave.type = 'mouseleave';\\n    leave.target = from;\\n    leave.relatedTarget = to;\\n\\n    var enter = SyntheticMouseEvent.getPooled(\\n      eventTypes.mouseEnter,\\n      toID,\\n      nativeEvent\\n    );\\n    enter.type = 'mouseenter';\\n    enter.target = to;\\n    enter.relatedTarget = from;\\n\\n    EventPropagators.accumulateEnterLeaveDispatches(leave, enter, fromID, toID);\\n\\n    extractedEvents[0] = leave;\\n    extractedEvents[1] = enter;\\n\\n    return extractedEvents;\\n  }\\n\\n};\\n\\nmodule.exports = EnterLeaveEventPlugin;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/EnterLeaveEventPlugin.js\\n ** module id = 95\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/EnterLeaveEventPlugin.js?\");\n\n/***/ },\n/* 96 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/SyntheticMouseEvent.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticMouseEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticUIEvent = __webpack_require__(/*! ./SyntheticUIEvent */ 97);\\nvar ViewportMetrics = __webpack_require__(/*! ./ViewportMetrics */ 66);\\n\\nvar getEventModifierState = __webpack_require__(/*! ./getEventModifierState */ 98);\\n\\n/**\\n * @interface MouseEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar MouseEventInterface = {\\n  screenX: null,\\n  screenY: null,\\n  clientX: null,\\n  clientY: null,\\n  ctrlKey: null,\\n  shiftKey: null,\\n  altKey: null,\\n  metaKey: null,\\n  getModifierState: getEventModifierState,\\n  button: function(event) {\\n    // Webkit, Firefox, IE9+\\n    // which:  1 2 3\\n    // button: 0 1 2 (standard)\\n    var button = event.button;\\n    if ('which' in event) {\\n      return button;\\n    }\\n    // IE<9\\n    // which:  undefined\\n    // button: 0 0 0\\n    // button: 1 4 2 (onmouseup)\\n    return button === 2 ? 2 : button === 4 ? 1 : 0;\\n  },\\n  buttons: null,\\n  relatedTarget: function(event) {\\n    return event.relatedTarget || (\\n      event.fromElement === event.srcElement ?\\n        event.toElement :\\n        event.fromElement\\n    );\\n  },\\n  // \\\"Proprietary\\\" Interface.\\n  pageX: function(event) {\\n    return 'pageX' in event ?\\n      event.pageX :\\n      event.clientX + ViewportMetrics.currentScrollLeft;\\n  },\\n  pageY: function(event) {\\n    return 'pageY' in event ?\\n      event.pageY :\\n      event.clientY + ViewportMetrics.currentScrollTop;\\n  }\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);\\n\\nmodule.exports = SyntheticMouseEvent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticMouseEvent.js\\n ** module id = 96\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticMouseEvent.js?\");\n\n/***/ },\n/* 97 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/SyntheticUIEvent.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticUIEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 81);\\n\\nvar getEventTarget = __webpack_require__(/*! ./getEventTarget */ 82);\\n\\n/**\\n * @interface UIEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar UIEventInterface = {\\n  view: function(event) {\\n    if (event.view) {\\n      return event.view;\\n    }\\n\\n    var target = getEventTarget(event);\\n    if (target != null && target.window === target) {\\n      // target is a window object\\n      return target;\\n    }\\n\\n    var doc = target.ownerDocument;\\n    // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\\n    if (doc) {\\n      return doc.defaultView || doc.parentWindow;\\n    } else {\\n      return window;\\n    }\\n  },\\n  detail: function(event) {\\n    return event.detail || 0;\\n  }\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticEvent}\\n */\\nfunction SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);\\n\\nmodule.exports = SyntheticUIEvent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticUIEvent.js\\n ** module id = 97\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticUIEvent.js?\");\n\n/***/ },\n/* 98 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/getEventModifierState.js ***!\n  \\**********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013 Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getEventModifierState\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Translation from modifier key to the associated property in the event.\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\\n */\\n\\nvar modifierKeyToProp = {\\n  'Alt': 'altKey',\\n  'Control': 'ctrlKey',\\n  'Meta': 'metaKey',\\n  'Shift': 'shiftKey'\\n};\\n\\n// IE8 does not implement getModifierState so we simply map it to the only\\n// modifier keys exposed by the event itself, does not support Lock-keys.\\n// Currently, all major browsers except Chrome seems to support Lock-keys.\\nfunction modifierStateGetter(keyArg) {\\n  /*jshint validthis:true */\\n  var syntheticEvent = this;\\n  var nativeEvent = syntheticEvent.nativeEvent;\\n  if (nativeEvent.getModifierState) {\\n    return nativeEvent.getModifierState(keyArg);\\n  }\\n  var keyProp = modifierKeyToProp[keyArg];\\n  return keyProp ? !!nativeEvent[keyProp] : false;\\n}\\n\\nfunction getEventModifierState(nativeEvent) {\\n  return modifierStateGetter;\\n}\\n\\nmodule.exports = getEventModifierState;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getEventModifierState.js\\n ** module id = 98\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getEventModifierState.js?\");\n\n/***/ },\n/* 99 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/HTMLDOMPropertyConfig.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule HTMLDOMPropertyConfig\\n */\\n\\n/*jslint bitwise: true*/\\n\\n\\\"use strict\\\";\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 8);\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;\\nvar MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;\\nvar HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;\\nvar HAS_SIDE_EFFECTS = DOMProperty.injection.HAS_SIDE_EFFECTS;\\nvar HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;\\nvar HAS_POSITIVE_NUMERIC_VALUE =\\n  DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;\\nvar HAS_OVERLOADED_BOOLEAN_VALUE =\\n  DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;\\n\\nvar hasSVG;\\nif (ExecutionEnvironment.canUseDOM) {\\n  var implementation = document.implementation;\\n  hasSVG = (\\n    implementation &&\\n    implementation.hasFeature &&\\n    implementation.hasFeature(\\n      'http://www.w3.org/TR/SVG11/feature#BasicStructure',\\n      '1.1'\\n    )\\n  );\\n}\\n\\n\\nvar HTMLDOMPropertyConfig = {\\n  isCustomAttribute: RegExp.prototype.test.bind(\\n    /^(data|aria)-[a-z_][a-z\\\\d_.\\\\-]*$/\\n  ),\\n  Properties: {\\n    /**\\n     * Standard Properties\\n     */\\n    accept: null,\\n    acceptCharset: null,\\n    accessKey: null,\\n    action: null,\\n    allowFullScreen: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\\n    allowTransparency: MUST_USE_ATTRIBUTE,\\n    alt: null,\\n    async: HAS_BOOLEAN_VALUE,\\n    autoComplete: null,\\n    // autoFocus is polyfilled/normalized by AutoFocusMixin\\n    // autoFocus: HAS_BOOLEAN_VALUE,\\n    autoPlay: HAS_BOOLEAN_VALUE,\\n    cellPadding: null,\\n    cellSpacing: null,\\n    charSet: MUST_USE_ATTRIBUTE,\\n    checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    classID: MUST_USE_ATTRIBUTE,\\n    // To set className on SVG elements, it's necessary to use .setAttribute;\\n    // this works on HTML elements too in all browsers except IE8. Conveniently,\\n    // IE8 doesn't support SVG and so we can simply use the attribute in\\n    // browsers that support SVG and the property in browsers that don't,\\n    // regardless of whether the element is HTML or SVG.\\n    className: hasSVG ? MUST_USE_ATTRIBUTE : MUST_USE_PROPERTY,\\n    cols: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\\n    colSpan: null,\\n    content: null,\\n    contentEditable: null,\\n    contextMenu: MUST_USE_ATTRIBUTE,\\n    controls: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    coords: null,\\n    crossOrigin: null,\\n    data: null, // For `<object />` acts as `src`.\\n    dateTime: MUST_USE_ATTRIBUTE,\\n    defer: HAS_BOOLEAN_VALUE,\\n    dir: null,\\n    disabled: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\\n    download: HAS_OVERLOADED_BOOLEAN_VALUE,\\n    draggable: null,\\n    encType: null,\\n    form: MUST_USE_ATTRIBUTE,\\n    formAction: MUST_USE_ATTRIBUTE,\\n    formEncType: MUST_USE_ATTRIBUTE,\\n    formMethod: MUST_USE_ATTRIBUTE,\\n    formNoValidate: HAS_BOOLEAN_VALUE,\\n    formTarget: MUST_USE_ATTRIBUTE,\\n    frameBorder: MUST_USE_ATTRIBUTE,\\n    height: MUST_USE_ATTRIBUTE,\\n    hidden: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\\n    href: null,\\n    hrefLang: null,\\n    htmlFor: null,\\n    httpEquiv: null,\\n    icon: null,\\n    id: MUST_USE_PROPERTY,\\n    label: null,\\n    lang: null,\\n    list: MUST_USE_ATTRIBUTE,\\n    loop: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    manifest: MUST_USE_ATTRIBUTE,\\n    marginHeight: null,\\n    marginWidth: null,\\n    max: null,\\n    maxLength: MUST_USE_ATTRIBUTE,\\n    media: MUST_USE_ATTRIBUTE,\\n    mediaGroup: null,\\n    method: null,\\n    min: null,\\n    multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    name: null,\\n    noValidate: HAS_BOOLEAN_VALUE,\\n    open: null,\\n    pattern: null,\\n    placeholder: null,\\n    poster: null,\\n    preload: null,\\n    radioGroup: null,\\n    readOnly: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    rel: null,\\n    required: HAS_BOOLEAN_VALUE,\\n    role: MUST_USE_ATTRIBUTE,\\n    rows: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\\n    rowSpan: null,\\n    sandbox: null,\\n    scope: null,\\n    scrolling: null,\\n    seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\\n    selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    shape: null,\\n    size: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\\n    sizes: MUST_USE_ATTRIBUTE,\\n    span: HAS_POSITIVE_NUMERIC_VALUE,\\n    spellCheck: null,\\n    src: null,\\n    srcDoc: MUST_USE_PROPERTY,\\n    srcSet: MUST_USE_ATTRIBUTE,\\n    start: HAS_NUMERIC_VALUE,\\n    step: null,\\n    style: null,\\n    tabIndex: null,\\n    target: null,\\n    title: null,\\n    type: null,\\n    useMap: null,\\n    value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS,\\n    width: MUST_USE_ATTRIBUTE,\\n    wmode: MUST_USE_ATTRIBUTE,\\n\\n    /**\\n     * Non-standard Properties\\n     */\\n    autoCapitalize: null, // Supported in Mobile Safari for keyboard hints\\n    autoCorrect: null, // Supported in Mobile Safari for keyboard hints\\n    itemProp: MUST_USE_ATTRIBUTE, // Microdata: http://schema.org/docs/gs.html\\n    itemScope: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, // Microdata: http://schema.org/docs/gs.html\\n    itemType: MUST_USE_ATTRIBUTE, // Microdata: http://schema.org/docs/gs.html\\n    property: null // Supports OG in meta tags\\n  },\\n  DOMAttributeNames: {\\n    acceptCharset: 'accept-charset',\\n    className: 'class',\\n    htmlFor: 'for',\\n    httpEquiv: 'http-equiv'\\n  },\\n  DOMPropertyNames: {\\n    autoCapitalize: 'autocapitalize',\\n    autoComplete: 'autocomplete',\\n    autoCorrect: 'autocorrect',\\n    autoFocus: 'autofocus',\\n    autoPlay: 'autoplay',\\n    encType: 'enctype',\\n    hrefLang: 'hreflang',\\n    radioGroup: 'radiogroup',\\n    spellCheck: 'spellcheck',\\n    srcDoc: 'srcdoc',\\n    srcSet: 'srcset'\\n  }\\n};\\n\\nmodule.exports = HTMLDOMPropertyConfig;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/HTMLDOMPropertyConfig.js\\n ** module id = 99\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/HTMLDOMPropertyConfig.js?\");\n\n/***/ },\n/* 100 */\n/*!*****************************************************!*\\\n  !*** ./~/react/lib/MobileSafariClickEventPlugin.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule MobileSafariClickEventPlugin\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\n\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\n\\nvar topLevelTypes = EventConstants.topLevelTypes;\\n\\n/**\\n * Mobile Safari does not fire properly bubble click events on non-interactive\\n * elements, which means delegated click listeners do not fire. The workaround\\n * for this bug involves attaching an empty click listener on the target node.\\n *\\n * This particular plugin works around the bug by attaching an empty click\\n * listener on `touchstart` (which does fire on every element).\\n */\\nvar MobileSafariClickEventPlugin = {\\n\\n  eventTypes: null,\\n\\n  /**\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native browser event.\\n   * @return {*} An accumulation of synthetic events.\\n   * @see {EventPluginHub.extractEvents}\\n   */\\n  extractEvents: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n    if (topLevelType === topLevelTypes.topTouchStart) {\\n      var target = nativeEvent.target;\\n      if (target && !target.onclick) {\\n        target.onclick = emptyFunction;\\n      }\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = MobileSafariClickEventPlugin;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/MobileSafariClickEventPlugin.js\\n ** module id = 100\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/MobileSafariClickEventPlugin.js?\");\n\n/***/ },\n/* 101 */\n/*!*********************************************************!*\\\n  !*** ./~/react/lib/ReactComponentBrowserEnvironment.js ***!\n  \\*********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactComponentBrowserEnvironment\\n */\\n\\n/*jslint evil: true */\\n\\n\\\"use strict\\\";\\n\\nvar ReactDOMIDOperations = __webpack_require__(/*! ./ReactDOMIDOperations */ 104);\\nvar ReactMarkupChecksum = __webpack_require__(/*! ./ReactMarkupChecksum */ 112);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\nvar ReactReconcileTransaction = __webpack_require__(/*! ./ReactReconcileTransaction */ 102);\\n\\nvar getReactRootElementInContainer = __webpack_require__(/*! ./getReactRootElementInContainer */ 70);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar setInnerHTML = __webpack_require__(/*! ./setInnerHTML */ 111);\\n\\n\\nvar ELEMENT_NODE_TYPE = 1;\\nvar DOC_NODE_TYPE = 9;\\n\\n\\n/**\\n * Abstracts away all functionality of `ReactComponent` requires knowledge of\\n * the browser context.\\n */\\nvar ReactComponentBrowserEnvironment = {\\n  ReactReconcileTransaction: ReactReconcileTransaction,\\n\\n  BackendIDOperations: ReactDOMIDOperations,\\n\\n  /**\\n   * If a particular environment requires that some resources be cleaned up,\\n   * specify this in the injected Mixin. In the DOM, we would likely want to\\n   * purge any cached node ID lookups.\\n   *\\n   * @private\\n   */\\n  unmountIDFromEnvironment: function(rootNodeID) {\\n    ReactMount.purgeID(rootNodeID);\\n  },\\n\\n  /**\\n   * @param {string} markup Markup string to place into the DOM Element.\\n   * @param {DOMElement} container DOM Element to insert markup into.\\n   * @param {boolean} shouldReuseMarkup Should reuse the existing markup in the\\n   * container if possible.\\n   */\\n  mountImageIntoNode: ReactPerf.measure(\\n    'ReactComponentBrowserEnvironment',\\n    'mountImageIntoNode',\\n    function(markup, container, shouldReuseMarkup) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        container && (\\n          container.nodeType === ELEMENT_NODE_TYPE ||\\n            container.nodeType === DOC_NODE_TYPE\\n        ),\\n        'mountComponentIntoNode(...): Target container is not valid.'\\n      ) : invariant(container && (\\n        container.nodeType === ELEMENT_NODE_TYPE ||\\n          container.nodeType === DOC_NODE_TYPE\\n      )));\\n\\n      if (shouldReuseMarkup) {\\n        if (ReactMarkupChecksum.canReuseMarkup(\\n          markup,\\n          getReactRootElementInContainer(container))) {\\n          return;\\n        } else {\\n          (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n            container.nodeType !== DOC_NODE_TYPE,\\n            'You\\\\'re trying to render a component to the document using ' +\\n            'server rendering but the checksum was invalid. This usually ' +\\n            'means you rendered a different component type or props on ' +\\n            'the client from the one on the server, or your render() ' +\\n            'methods are impure. React cannot handle this case due to ' +\\n            'cross-browser quirks by rendering at the document root. You ' +\\n            'should look for environment dependent code in your components ' +\\n            'and ensure the props are the same client and server side.'\\n          ) : invariant(container.nodeType !== DOC_NODE_TYPE));\\n\\n          if (\\\"production\\\" !== process.env.NODE_ENV) {\\n            console.warn(\\n              'React attempted to use reuse markup in a container but the ' +\\n              'checksum was invalid. This generally means that you are ' +\\n              'using server rendering and the markup generated on the ' +\\n              'server was not what the client was expecting. React injected ' +\\n              'new markup to compensate which works but you have lost many ' +\\n              'of the benefits of server rendering. Instead, figure out ' +\\n              'why the markup being generated is different on the client ' +\\n              'or server.'\\n            );\\n          }\\n        }\\n      }\\n\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        container.nodeType !== DOC_NODE_TYPE,\\n        'You\\\\'re trying to render a component to the document but ' +\\n          'you didn\\\\'t use server rendering. We can\\\\'t do this ' +\\n          'without using server rendering due to cross-browser quirks. ' +\\n          'See renderComponentToString() for server rendering.'\\n      ) : invariant(container.nodeType !== DOC_NODE_TYPE));\\n\\n      setInnerHTML(container, markup);\\n    }\\n  )\\n};\\n\\nmodule.exports = ReactComponentBrowserEnvironment;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactComponentBrowserEnvironment.js\\n ** module id = 101\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactComponentBrowserEnvironment.js?\");\n\n/***/ },\n/* 102 */\n/*!**************************************************!*\\\n  !*** ./~/react/lib/ReactReconcileTransaction.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactReconcileTransaction\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar CallbackQueue = __webpack_require__(/*! ./CallbackQueue */ 28);\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 17);\\nvar ReactBrowserEventEmitter = __webpack_require__(/*! ./ReactBrowserEventEmitter */ 60);\\nvar ReactInputSelection = __webpack_require__(/*! ./ReactInputSelection */ 87);\\nvar ReactPutListenerQueue = __webpack_require__(/*! ./ReactPutListenerQueue */ 103);\\nvar Transaction = __webpack_require__(/*! ./Transaction */ 27);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\n\\n/**\\n * Ensures that, when possible, the selection range (currently selected text\\n * input) is not disturbed by performing the transaction.\\n */\\nvar SELECTION_RESTORATION = {\\n  /**\\n   * @return {Selection} Selection information.\\n   */\\n  initialize: ReactInputSelection.getSelectionInformation,\\n  /**\\n   * @param {Selection} sel Selection information returned from `initialize`.\\n   */\\n  close: ReactInputSelection.restoreSelection\\n};\\n\\n/**\\n * Suppresses events (blur/focus) that could be inadvertently dispatched due to\\n * high level DOM manipulations (like temporarily removing a text input from the\\n * DOM).\\n */\\nvar EVENT_SUPPRESSION = {\\n  /**\\n   * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before\\n   * the reconciliation.\\n   */\\n  initialize: function() {\\n    var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();\\n    ReactBrowserEventEmitter.setEnabled(false);\\n    return currentlyEnabled;\\n  },\\n\\n  /**\\n   * @param {boolean} previouslyEnabled Enabled status of\\n   *   `ReactBrowserEventEmitter` before the reconciliation occured. `close`\\n   *   restores the previous value.\\n   */\\n  close: function(previouslyEnabled) {\\n    ReactBrowserEventEmitter.setEnabled(previouslyEnabled);\\n  }\\n};\\n\\n/**\\n * Provides a queue for collecting `componentDidMount` and\\n * `componentDidUpdate` callbacks during the the transaction.\\n */\\nvar ON_DOM_READY_QUEUEING = {\\n  /**\\n   * Initializes the internal `onDOMReady` queue.\\n   */\\n  initialize: function() {\\n    this.reactMountReady.reset();\\n  },\\n\\n  /**\\n   * After DOM is flushed, invoke all registered `onDOMReady` callbacks.\\n   */\\n  close: function() {\\n    this.reactMountReady.notifyAll();\\n  }\\n};\\n\\nvar PUT_LISTENER_QUEUEING = {\\n  initialize: function() {\\n    this.putListenerQueue.reset();\\n  },\\n\\n  close: function() {\\n    this.putListenerQueue.putListeners();\\n  }\\n};\\n\\n/**\\n * Executed within the scope of the `Transaction` instance. Consider these as\\n * being member methods, but with an implied ordering while being isolated from\\n * each other.\\n */\\nvar TRANSACTION_WRAPPERS = [\\n  PUT_LISTENER_QUEUEING,\\n  SELECTION_RESTORATION,\\n  EVENT_SUPPRESSION,\\n  ON_DOM_READY_QUEUEING\\n];\\n\\n/**\\n * Currently:\\n * - The order that these are listed in the transaction is critical:\\n * - Suppresses events.\\n * - Restores selection range.\\n *\\n * Future:\\n * - Restore document/overflow scroll positions that were unintentionally\\n *   modified via DOM insertions above the top viewport boundary.\\n * - Implement/integrate with customized constraint based layout system and keep\\n *   track of which dimensions must be remeasured.\\n *\\n * @class ReactReconcileTransaction\\n */\\nfunction ReactReconcileTransaction() {\\n  this.reinitializeTransaction();\\n  // Only server-side rendering really needs this option (see\\n  // `ReactServerRendering`), but server-side uses\\n  // `ReactServerRenderingTransaction` instead. This option is here so that it's\\n  // accessible and defaults to false when `ReactDOMComponent` and\\n  // `ReactTextComponent` checks it in `mountComponent`.`\\n  this.renderToStaticMarkup = false;\\n  this.reactMountReady = CallbackQueue.getPooled(null);\\n  this.putListenerQueue = ReactPutListenerQueue.getPooled();\\n}\\n\\nvar Mixin = {\\n  /**\\n   * @see Transaction\\n   * @abstract\\n   * @final\\n   * @return {array<object>} List of operation wrap proceedures.\\n   *   TODO: convert to array<TransactionWrapper>\\n   */\\n  getTransactionWrappers: function() {\\n    return TRANSACTION_WRAPPERS;\\n  },\\n\\n  /**\\n   * @return {object} The queue to collect `onDOMReady` callbacks with.\\n   */\\n  getReactMountReady: function() {\\n    return this.reactMountReady;\\n  },\\n\\n  getPutListenerQueue: function() {\\n    return this.putListenerQueue;\\n  },\\n\\n  /**\\n   * `PooledClass` looks for this, and will invoke this before allowing this\\n   * instance to be resused.\\n   */\\n  destructor: function() {\\n    CallbackQueue.release(this.reactMountReady);\\n    this.reactMountReady = null;\\n\\n    ReactPutListenerQueue.release(this.putListenerQueue);\\n    this.putListenerQueue = null;\\n  }\\n};\\n\\n\\nassign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);\\n\\nPooledClass.addPoolingTo(ReactReconcileTransaction);\\n\\nmodule.exports = ReactReconcileTransaction;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactReconcileTransaction.js\\n ** module id = 102\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactReconcileTransaction.js?\");\n\n/***/ },\n/* 103 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/ReactPutListenerQueue.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactPutListenerQueue\\n */\\n\\n\\\"use strict\\\";\\n\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 17);\\nvar ReactBrowserEventEmitter = __webpack_require__(/*! ./ReactBrowserEventEmitter */ 60);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\n\\nfunction ReactPutListenerQueue() {\\n  this.listenersToPut = [];\\n}\\n\\nassign(ReactPutListenerQueue.prototype, {\\n  enqueuePutListener: function(rootNodeID, propKey, propValue) {\\n    this.listenersToPut.push({\\n      rootNodeID: rootNodeID,\\n      propKey: propKey,\\n      propValue: propValue\\n    });\\n  },\\n\\n  putListeners: function() {\\n    for (var i = 0; i < this.listenersToPut.length; i++) {\\n      var listenerToPut = this.listenersToPut[i];\\n      ReactBrowserEventEmitter.putListener(\\n        listenerToPut.rootNodeID,\\n        listenerToPut.propKey,\\n        listenerToPut.propValue\\n      );\\n    }\\n  },\\n\\n  reset: function() {\\n    this.listenersToPut.length = 0;\\n  },\\n\\n  destructor: function() {\\n    this.reset();\\n  }\\n});\\n\\nPooledClass.addPoolingTo(ReactPutListenerQueue);\\n\\nmodule.exports = ReactPutListenerQueue;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactPutListenerQueue.js\\n ** module id = 103\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactPutListenerQueue.js?\");\n\n/***/ },\n/* 104 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ReactDOMIDOperations.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMIDOperations\\n * @typechecks static-only\\n */\\n\\n/*jslint evil: true */\\n\\n\\\"use strict\\\";\\n\\nvar CSSPropertyOperations = __webpack_require__(/*! ./CSSPropertyOperations */ 47);\\nvar DOMChildrenOperations = __webpack_require__(/*! ./DOMChildrenOperations */ 105);\\nvar DOMPropertyOperations = __webpack_require__(/*! ./DOMPropertyOperations */ 7);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar setInnerHTML = __webpack_require__(/*! ./setInnerHTML */ 111);\\n\\n/**\\n * Errors for properties that should not be updated with `updatePropertyById()`.\\n *\\n * @type {object}\\n * @private\\n */\\nvar INVALID_PROPERTY_ERRORS = {\\n  dangerouslySetInnerHTML:\\n    '`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.',\\n  style: '`style` must be set using `updateStylesByID()`.'\\n};\\n\\n/**\\n * Operations used to process updates to DOM nodes. This is made injectable via\\n * `ReactComponent.BackendIDOperations`.\\n */\\nvar ReactDOMIDOperations = {\\n\\n  /**\\n   * Updates a DOM node with new property values. This should only be used to\\n   * update DOM properties in `DOMProperty`.\\n   *\\n   * @param {string} id ID of the node to update.\\n   * @param {string} name A valid property name, see `DOMProperty`.\\n   * @param {*} value New value of the property.\\n   * @internal\\n   */\\n  updatePropertyByID: ReactPerf.measure(\\n    'ReactDOMIDOperations',\\n    'updatePropertyByID',\\n    function(id, name, value) {\\n      var node = ReactMount.getNode(id);\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        !INVALID_PROPERTY_ERRORS.hasOwnProperty(name),\\n        'updatePropertyByID(...): %s',\\n        INVALID_PROPERTY_ERRORS[name]\\n      ) : invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name)));\\n\\n      // If we're updating to null or undefined, we should remove the property\\n      // from the DOM node instead of inadvertantly setting to a string. This\\n      // brings us in line with the same behavior we have on initial render.\\n      if (value != null) {\\n        DOMPropertyOperations.setValueForProperty(node, name, value);\\n      } else {\\n        DOMPropertyOperations.deleteValueForProperty(node, name);\\n      }\\n    }\\n  ),\\n\\n  /**\\n   * Updates a DOM node to remove a property. This should only be used to remove\\n   * DOM properties in `DOMProperty`.\\n   *\\n   * @param {string} id ID of the node to update.\\n   * @param {string} name A property name to remove, see `DOMProperty`.\\n   * @internal\\n   */\\n  deletePropertyByID: ReactPerf.measure(\\n    'ReactDOMIDOperations',\\n    'deletePropertyByID',\\n    function(id, name, value) {\\n      var node = ReactMount.getNode(id);\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        !INVALID_PROPERTY_ERRORS.hasOwnProperty(name),\\n        'updatePropertyByID(...): %s',\\n        INVALID_PROPERTY_ERRORS[name]\\n      ) : invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name)));\\n      DOMPropertyOperations.deleteValueForProperty(node, name, value);\\n    }\\n  ),\\n\\n  /**\\n   * Updates a DOM node with new style values. If a value is specified as '',\\n   * the corresponding style property will be unset.\\n   *\\n   * @param {string} id ID of the node to update.\\n   * @param {object} styles Mapping from styles to values.\\n   * @internal\\n   */\\n  updateStylesByID: ReactPerf.measure(\\n    'ReactDOMIDOperations',\\n    'updateStylesByID',\\n    function(id, styles) {\\n      var node = ReactMount.getNode(id);\\n      CSSPropertyOperations.setValueForStyles(node, styles);\\n    }\\n  ),\\n\\n  /**\\n   * Updates a DOM node's innerHTML.\\n   *\\n   * @param {string} id ID of the node to update.\\n   * @param {string} html An HTML string.\\n   * @internal\\n   */\\n  updateInnerHTMLByID: ReactPerf.measure(\\n    'ReactDOMIDOperations',\\n    'updateInnerHTMLByID',\\n    function(id, html) {\\n      var node = ReactMount.getNode(id);\\n      setInnerHTML(node, html);\\n    }\\n  ),\\n\\n  /**\\n   * Updates a DOM node's text content set by `props.content`.\\n   *\\n   * @param {string} id ID of the node to update.\\n   * @param {string} content Text content.\\n   * @internal\\n   */\\n  updateTextContentByID: ReactPerf.measure(\\n    'ReactDOMIDOperations',\\n    'updateTextContentByID',\\n    function(id, content) {\\n      var node = ReactMount.getNode(id);\\n      DOMChildrenOperations.updateTextContent(node, content);\\n    }\\n  ),\\n\\n  /**\\n   * Replaces a DOM node that exists in the document with markup.\\n   *\\n   * @param {string} id ID of child to be replaced.\\n   * @param {string} markup Dangerous markup to inject in place of child.\\n   * @internal\\n   * @see {Danger.dangerouslyReplaceNodeWithMarkup}\\n   */\\n  dangerouslyReplaceNodeWithMarkupByID: ReactPerf.measure(\\n    'ReactDOMIDOperations',\\n    'dangerouslyReplaceNodeWithMarkupByID',\\n    function(id, markup) {\\n      var node = ReactMount.getNode(id);\\n      DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup(node, markup);\\n    }\\n  ),\\n\\n  /**\\n   * Updates a component's children by processing a series of updates.\\n   *\\n   * @param {array<object>} updates List of update configurations.\\n   * @param {array<string>} markup List of markup strings.\\n   * @internal\\n   */\\n  dangerouslyProcessChildrenUpdates: ReactPerf.measure(\\n    'ReactDOMIDOperations',\\n    'dangerouslyProcessChildrenUpdates',\\n    function(updates, markup) {\\n      for (var i = 0; i < updates.length; i++) {\\n        updates[i].parentNode = ReactMount.getNode(updates[i].parentID);\\n      }\\n      DOMChildrenOperations.processUpdates(updates, markup);\\n    }\\n  )\\n};\\n\\nmodule.exports = ReactDOMIDOperations;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMIDOperations.js\\n ** module id = 104\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMIDOperations.js?\");\n\n/***/ },\n/* 105 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/DOMChildrenOperations.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule DOMChildrenOperations\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar Danger = __webpack_require__(/*! ./Danger */ 106);\\nvar ReactMultiChildUpdateTypes = __webpack_require__(/*! ./ReactMultiChildUpdateTypes */ 72);\\n\\nvar getTextContentAccessor = __webpack_require__(/*! ./getTextContentAccessor */ 90);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * The DOM property to use when setting text content.\\n *\\n * @type {string}\\n * @private\\n */\\nvar textContentAccessor = getTextContentAccessor();\\n\\n/**\\n * Inserts `childNode` as a child of `parentNode` at the `index`.\\n *\\n * @param {DOMElement} parentNode Parent node in which to insert.\\n * @param {DOMElement} childNode Child node to insert.\\n * @param {number} index Index at which to insert the child.\\n * @internal\\n */\\nfunction insertChildAt(parentNode, childNode, index) {\\n  // By exploiting arrays returning `undefined` for an undefined index, we can\\n  // rely exclusively on `insertBefore(node, null)` instead of also using\\n  // `appendChild(node)`. However, using `undefined` is not allowed by all\\n  // browsers so we must replace it with `null`.\\n  parentNode.insertBefore(\\n    childNode,\\n    parentNode.childNodes[index] || null\\n  );\\n}\\n\\nvar updateTextContent;\\nif (textContentAccessor === 'textContent') {\\n  /**\\n   * Sets the text content of `node` to `text`.\\n   *\\n   * @param {DOMElement} node Node to change\\n   * @param {string} text New text content\\n   */\\n  updateTextContent = function(node, text) {\\n    node.textContent = text;\\n  };\\n} else {\\n  /**\\n   * Sets the text content of `node` to `text`.\\n   *\\n   * @param {DOMElement} node Node to change\\n   * @param {string} text New text content\\n   */\\n  updateTextContent = function(node, text) {\\n    // In order to preserve newlines correctly, we can't use .innerText to set\\n    // the contents (see #1080), so we empty the element then append a text node\\n    while (node.firstChild) {\\n      node.removeChild(node.firstChild);\\n    }\\n    if (text) {\\n      var doc = node.ownerDocument || document;\\n      node.appendChild(doc.createTextNode(text));\\n    }\\n  };\\n}\\n\\n/**\\n * Operations for updating with DOM children.\\n */\\nvar DOMChildrenOperations = {\\n\\n  dangerouslyReplaceNodeWithMarkup: Danger.dangerouslyReplaceNodeWithMarkup,\\n\\n  updateTextContent: updateTextContent,\\n\\n  /**\\n   * Updates a component's children by processing a series of updates. The\\n   * update configurations are each expected to have a `parentNode` property.\\n   *\\n   * @param {array<object>} updates List of update configurations.\\n   * @param {array<string>} markupList List of markup strings.\\n   * @internal\\n   */\\n  processUpdates: function(updates, markupList) {\\n    var update;\\n    // Mapping from parent IDs to initial child orderings.\\n    var initialChildren = null;\\n    // List of children that will be moved or removed.\\n    var updatedChildren = null;\\n\\n    for (var i = 0; update = updates[i]; i++) {\\n      if (update.type === ReactMultiChildUpdateTypes.MOVE_EXISTING ||\\n          update.type === ReactMultiChildUpdateTypes.REMOVE_NODE) {\\n        var updatedIndex = update.fromIndex;\\n        var updatedChild = update.parentNode.childNodes[updatedIndex];\\n        var parentID = update.parentID;\\n\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          updatedChild,\\n          'processUpdates(): Unable to find child %s of element. This ' +\\n          'probably means the DOM was unexpectedly mutated (e.g., by the ' +\\n          'browser), usually due to forgetting a <tbody> when using tables, ' +\\n          'nesting tags like <form>, <p>, or <a>, or using non-SVG elements '+\\n          'in an <svg> parent. Try inspecting the child nodes of the element ' +\\n          'with React ID `%s`.',\\n          updatedIndex,\\n          parentID\\n        ) : invariant(updatedChild));\\n\\n        initialChildren = initialChildren || {};\\n        initialChildren[parentID] = initialChildren[parentID] || [];\\n        initialChildren[parentID][updatedIndex] = updatedChild;\\n\\n        updatedChildren = updatedChildren || [];\\n        updatedChildren.push(updatedChild);\\n      }\\n    }\\n\\n    var renderedMarkup = Danger.dangerouslyRenderMarkup(markupList);\\n\\n    // Remove updated children first so that `toIndex` is consistent.\\n    if (updatedChildren) {\\n      for (var j = 0; j < updatedChildren.length; j++) {\\n        updatedChildren[j].parentNode.removeChild(updatedChildren[j]);\\n      }\\n    }\\n\\n    for (var k = 0; update = updates[k]; k++) {\\n      switch (update.type) {\\n        case ReactMultiChildUpdateTypes.INSERT_MARKUP:\\n          insertChildAt(\\n            update.parentNode,\\n            renderedMarkup[update.markupIndex],\\n            update.toIndex\\n          );\\n          break;\\n        case ReactMultiChildUpdateTypes.MOVE_EXISTING:\\n          insertChildAt(\\n            update.parentNode,\\n            initialChildren[update.parentID][update.fromIndex],\\n            update.toIndex\\n          );\\n          break;\\n        case ReactMultiChildUpdateTypes.TEXT_CONTENT:\\n          updateTextContent(\\n            update.parentNode,\\n            update.textContent\\n          );\\n          break;\\n        case ReactMultiChildUpdateTypes.REMOVE_NODE:\\n          // Already removed by the for-loop above.\\n          break;\\n      }\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = DOMChildrenOperations;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/DOMChildrenOperations.js\\n ** module id = 105\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/DOMChildrenOperations.js?\");\n\n/***/ },\n/* 106 */\n/*!*******************************!*\\\n  !*** ./~/react/lib/Danger.js ***!\n  \\*******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule Danger\\n * @typechecks static-only\\n */\\n\\n/*jslint evil: true, sub: true */\\n\\n\\\"use strict\\\";\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar createNodesFromMarkup = __webpack_require__(/*! ./createNodesFromMarkup */ 107);\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\nvar getMarkupWrap = __webpack_require__(/*! ./getMarkupWrap */ 110);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nvar OPEN_TAG_NAME_EXP = /^(<[^ \\\\/>]+)/;\\nvar RESULT_INDEX_ATTR = 'data-danger-index';\\n\\n/**\\n * Extracts the `nodeName` from a string of markup.\\n *\\n * NOTE: Extracting the `nodeName` does not require a regular expression match\\n * because we make assumptions about React-generated markup (i.e. there are no\\n * spaces surrounding the opening tag and there is at least one attribute).\\n *\\n * @param {string} markup String of markup.\\n * @return {string} Node name of the supplied markup.\\n * @see http://jsperf.com/extract-nodename\\n */\\nfunction getNodeName(markup) {\\n  return markup.substring(1, markup.indexOf(' '));\\n}\\n\\nvar Danger = {\\n\\n  /**\\n   * Renders markup into an array of nodes. The markup is expected to render\\n   * into a list of root nodes. Also, the length of `resultList` and\\n   * `markupList` should be the same.\\n   *\\n   * @param {array<string>} markupList List of markup strings to render.\\n   * @return {array<DOMElement>} List of rendered nodes.\\n   * @internal\\n   */\\n  dangerouslyRenderMarkup: function(markupList) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      ExecutionEnvironment.canUseDOM,\\n      'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' +\\n      'thread. Make sure `window` and `document` are available globally ' +\\n      'before requiring React when unit testing or use ' +\\n      'React.renderToString for server rendering.'\\n    ) : invariant(ExecutionEnvironment.canUseDOM));\\n    var nodeName;\\n    var markupByNodeName = {};\\n    // Group markup by `nodeName` if a wrap is necessary, else by '*'.\\n    for (var i = 0; i < markupList.length; i++) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        markupList[i],\\n        'dangerouslyRenderMarkup(...): Missing markup.'\\n      ) : invariant(markupList[i]));\\n      nodeName = getNodeName(markupList[i]);\\n      nodeName = getMarkupWrap(nodeName) ? nodeName : '*';\\n      markupByNodeName[nodeName] = markupByNodeName[nodeName] || [];\\n      markupByNodeName[nodeName][i] = markupList[i];\\n    }\\n    var resultList = [];\\n    var resultListAssignmentCount = 0;\\n    for (nodeName in markupByNodeName) {\\n      if (!markupByNodeName.hasOwnProperty(nodeName)) {\\n        continue;\\n      }\\n      var markupListByNodeName = markupByNodeName[nodeName];\\n\\n      // This for-in loop skips the holes of the sparse array. The order of\\n      // iteration should follow the order of assignment, which happens to match\\n      // numerical index order, but we don't rely on that.\\n      for (var resultIndex in markupListByNodeName) {\\n        if (markupListByNodeName.hasOwnProperty(resultIndex)) {\\n          var markup = markupListByNodeName[resultIndex];\\n\\n          // Push the requested markup with an additional RESULT_INDEX_ATTR\\n          // attribute.  If the markup does not start with a < character, it\\n          // will be discarded below (with an appropriate console.error).\\n          markupListByNodeName[resultIndex] = markup.replace(\\n            OPEN_TAG_NAME_EXP,\\n            // This index will be parsed back out below.\\n            '$1 ' + RESULT_INDEX_ATTR + '=\\\"' + resultIndex + '\\\" '\\n          );\\n        }\\n      }\\n\\n      // Render each group of markup with similar wrapping `nodeName`.\\n      var renderNodes = createNodesFromMarkup(\\n        markupListByNodeName.join(''),\\n        emptyFunction // Do nothing special with <script> tags.\\n      );\\n\\n      for (i = 0; i < renderNodes.length; ++i) {\\n        var renderNode = renderNodes[i];\\n        if (renderNode.hasAttribute &&\\n            renderNode.hasAttribute(RESULT_INDEX_ATTR)) {\\n\\n          resultIndex = +renderNode.getAttribute(RESULT_INDEX_ATTR);\\n          renderNode.removeAttribute(RESULT_INDEX_ATTR);\\n\\n          (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n            !resultList.hasOwnProperty(resultIndex),\\n            'Danger: Assigning to an already-occupied result index.'\\n          ) : invariant(!resultList.hasOwnProperty(resultIndex)));\\n\\n          resultList[resultIndex] = renderNode;\\n\\n          // This should match resultList.length and markupList.length when\\n          // we're done.\\n          resultListAssignmentCount += 1;\\n\\n        } else if (\\\"production\\\" !== process.env.NODE_ENV) {\\n          console.error(\\n            \\\"Danger: Discarding unexpected node:\\\",\\n            renderNode\\n          );\\n        }\\n      }\\n    }\\n\\n    // Although resultList was populated out of order, it should now be a dense\\n    // array.\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      resultListAssignmentCount === resultList.length,\\n      'Danger: Did not assign to every index of resultList.'\\n    ) : invariant(resultListAssignmentCount === resultList.length));\\n\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      resultList.length === markupList.length,\\n      'Danger: Expected markup to render %s nodes, but rendered %s.',\\n      markupList.length,\\n      resultList.length\\n    ) : invariant(resultList.length === markupList.length));\\n\\n    return resultList;\\n  },\\n\\n  /**\\n   * Replaces a node with a string of markup at its current position within its\\n   * parent. The markup must render into a single root node.\\n   *\\n   * @param {DOMElement} oldChild Child node to replace.\\n   * @param {string} markup Markup to render in place of the child node.\\n   * @internal\\n   */\\n  dangerouslyReplaceNodeWithMarkup: function(oldChild, markup) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      ExecutionEnvironment.canUseDOM,\\n      'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a ' +\\n      'worker thread. Make sure `window` and `document` are available ' +\\n      'globally before requiring React when unit testing or use ' +\\n      'React.renderToString for server rendering.'\\n    ) : invariant(ExecutionEnvironment.canUseDOM));\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(markup, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : invariant(markup));\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      oldChild.tagName.toLowerCase() !== 'html',\\n      'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the ' +\\n      '<html> node. This is because browser quirks make this unreliable ' +\\n      'and/or slow. If you want to render to the root you must use ' +\\n      'server rendering. See renderComponentToString().'\\n    ) : invariant(oldChild.tagName.toLowerCase() !== 'html'));\\n\\n    var newChild = createNodesFromMarkup(markup, emptyFunction)[0];\\n    oldChild.parentNode.replaceChild(newChild, oldChild);\\n  }\\n\\n};\\n\\nmodule.exports = Danger;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/Danger.js\\n ** module id = 106\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/Danger.js?\");\n\n/***/ },\n/* 107 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/createNodesFromMarkup.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule createNodesFromMarkup\\n * @typechecks\\n */\\n\\n/*jslint evil: true, sub: true */\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar createArrayFrom = __webpack_require__(/*! ./createArrayFrom */ 108);\\nvar getMarkupWrap = __webpack_require__(/*! ./getMarkupWrap */ 110);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Dummy container used to render all markup.\\n */\\nvar dummyNode =\\n  ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\\n\\n/**\\n * Pattern used by `getNodeName`.\\n */\\nvar nodeNamePattern = /^\\\\s*<(\\\\w+)/;\\n\\n/**\\n * Extracts the `nodeName` of the first element in a string of markup.\\n *\\n * @param {string} markup String of markup.\\n * @return {?string} Node name of the supplied markup.\\n */\\nfunction getNodeName(markup) {\\n  var nodeNameMatch = markup.match(nodeNamePattern);\\n  return nodeNameMatch && nodeNameMatch[1].toLowerCase();\\n}\\n\\n/**\\n * Creates an array containing the nodes rendered from the supplied markup. The\\n * optionally supplied `handleScript` function will be invoked once for each\\n * <script> element that is rendered. If no `handleScript` function is supplied,\\n * an exception is thrown if any <script> elements are rendered.\\n *\\n * @param {string} markup A string of valid HTML markup.\\n * @param {?function} handleScript Invoked once for each rendered <script>.\\n * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.\\n */\\nfunction createNodesFromMarkup(markup, handleScript) {\\n  var node = dummyNode;\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(!!dummyNode, 'createNodesFromMarkup dummy not initialized') : invariant(!!dummyNode));\\n  var nodeName = getNodeName(markup);\\n\\n  var wrap = nodeName && getMarkupWrap(nodeName);\\n  if (wrap) {\\n    node.innerHTML = wrap[1] + markup + wrap[2];\\n\\n    var wrapDepth = wrap[0];\\n    while (wrapDepth--) {\\n      node = node.lastChild;\\n    }\\n  } else {\\n    node.innerHTML = markup;\\n  }\\n\\n  var scripts = node.getElementsByTagName('script');\\n  if (scripts.length) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      handleScript,\\n      'createNodesFromMarkup(...): Unexpected <script> element rendered.'\\n    ) : invariant(handleScript));\\n    createArrayFrom(scripts).forEach(handleScript);\\n  }\\n\\n  var nodes = createArrayFrom(node.childNodes);\\n  while (node.lastChild) {\\n    node.removeChild(node.lastChild);\\n  }\\n  return nodes;\\n}\\n\\nmodule.exports = createNodesFromMarkup;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/createNodesFromMarkup.js\\n ** module id = 107\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/createNodesFromMarkup.js?\");\n\n/***/ },\n/* 108 */\n/*!****************************************!*\\\n  !*** ./~/react/lib/createArrayFrom.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule createArrayFrom\\n * @typechecks\\n */\\n\\nvar toArray = __webpack_require__(/*! ./toArray */ 109);\\n\\n/**\\n * Perform a heuristic test to determine if an object is \\\"array-like\\\".\\n *\\n *   A monk asked Joshu, a Zen master, \\\"Has a dog Buddha nature?\\\"\\n *   Joshu replied: \\\"Mu.\\\"\\n *\\n * This function determines if its argument has \\\"array nature\\\": it returns\\n * true if the argument is an actual array, an `arguments' object, or an\\n * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).\\n *\\n * It will return false for other array-like objects like Filelist.\\n *\\n * @param {*} obj\\n * @return {boolean}\\n */\\nfunction hasArrayNature(obj) {\\n  return (\\n    // not null/false\\n    !!obj &&\\n    // arrays are objects, NodeLists are functions in Safari\\n    (typeof obj == 'object' || typeof obj == 'function') &&\\n    // quacks like an array\\n    ('length' in obj) &&\\n    // not window\\n    !('setInterval' in obj) &&\\n    // no DOM node should be considered an array-like\\n    // a 'select' element has 'length' and 'item' properties on IE8\\n    (typeof obj.nodeType != 'number') &&\\n    (\\n      // a real array\\n      (// HTMLCollection/NodeList\\n      (Array.isArray(obj) ||\\n      // arguments\\n      ('callee' in obj) || 'item' in obj))\\n    )\\n  );\\n}\\n\\n/**\\n * Ensure that the argument is an array by wrapping it in an array if it is not.\\n * Creates a copy of the argument if it is already an array.\\n *\\n * This is mostly useful idiomatically:\\n *\\n *   var createArrayFrom = require('createArrayFrom');\\n *\\n *   function takesOneOrMoreThings(things) {\\n *     things = createArrayFrom(things);\\n *     ...\\n *   }\\n *\\n * This allows you to treat `things' as an array, but accept scalars in the API.\\n *\\n * If you need to convert an array-like object, like `arguments`, into an array\\n * use toArray instead.\\n *\\n * @param {*} obj\\n * @return {array}\\n */\\nfunction createArrayFrom(obj) {\\n  if (!hasArrayNature(obj)) {\\n    return [obj];\\n  } else if (Array.isArray(obj)) {\\n    return obj.slice();\\n  } else {\\n    return toArray(obj);\\n  }\\n}\\n\\nmodule.exports = createArrayFrom;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/createArrayFrom.js\\n ** module id = 108\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/createArrayFrom.js?\");\n\n/***/ },\n/* 109 */\n/*!********************************!*\\\n  !*** ./~/react/lib/toArray.js ***!\n  \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule toArray\\n * @typechecks\\n */\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Convert array-like objects to arrays.\\n *\\n * This API assumes the caller knows the contents of the data type. For less\\n * well defined inputs use createArrayFrom.\\n *\\n * @param {object|function|filelist} obj\\n * @return {array}\\n */\\nfunction toArray(obj) {\\n  var length = obj.length;\\n\\n  // Some browse builtin objects can report typeof 'function' (e.g. NodeList in\\n  // old versions of Safari).\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    !Array.isArray(obj) &&\\n    (typeof obj === 'object' || typeof obj === 'function'),\\n    'toArray: Array-like object expected'\\n  ) : invariant(!Array.isArray(obj) &&\\n  (typeof obj === 'object' || typeof obj === 'function')));\\n\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    typeof length === 'number',\\n    'toArray: Object needs a length property'\\n  ) : invariant(typeof length === 'number'));\\n\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    length === 0 ||\\n    (length - 1) in obj,\\n    'toArray: Object should have keys for indices'\\n  ) : invariant(length === 0 ||\\n  (length - 1) in obj));\\n\\n  // Old IE doesn't give collections access to hasOwnProperty. Assume inputs\\n  // without method will throw during the slice call and skip straight to the\\n  // fallback.\\n  if (obj.hasOwnProperty) {\\n    try {\\n      return Array.prototype.slice.call(obj);\\n    } catch (e) {\\n      // IE < 9 does not support Array#slice on collections objects\\n    }\\n  }\\n\\n  // Fall back to copying key by key. This assumes all keys have a value,\\n  // so will not preserve sparsely populated inputs.\\n  var ret = Array(length);\\n  for (var ii = 0; ii < length; ii++) {\\n    ret[ii] = obj[ii];\\n  }\\n  return ret;\\n}\\n\\nmodule.exports = toArray;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/toArray.js\\n ** module id = 109\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/toArray.js?\");\n\n/***/ },\n/* 110 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/getMarkupWrap.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getMarkupWrap\\n */\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Dummy container used to detect which wraps are necessary.\\n */\\nvar dummyNode =\\n  ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\\n\\n/**\\n * Some browsers cannot use `innerHTML` to render certain elements standalone,\\n * so we wrap them, render the wrapped nodes, then extract the desired node.\\n *\\n * In IE8, certain elements cannot render alone, so wrap all elements ('*').\\n */\\nvar shouldWrap = {\\n  // Force wrapping for SVG elements because if they get created inside a <div>,\\n  // they will be initialized in the wrong namespace (and will not display).\\n  'circle': true,\\n  'defs': true,\\n  'ellipse': true,\\n  'g': true,\\n  'line': true,\\n  'linearGradient': true,\\n  'path': true,\\n  'polygon': true,\\n  'polyline': true,\\n  'radialGradient': true,\\n  'rect': true,\\n  'stop': true,\\n  'text': true\\n};\\n\\nvar selectWrap = [1, '<select multiple=\\\"true\\\">', '</select>'];\\nvar tableWrap = [1, '<table>', '</table>'];\\nvar trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];\\n\\nvar svgWrap = [1, '<svg>', '</svg>'];\\n\\nvar markupWrap = {\\n  '*': [1, '?<div>', '</div>'],\\n\\n  'area': [1, '<map>', '</map>'],\\n  'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],\\n  'legend': [1, '<fieldset>', '</fieldset>'],\\n  'param': [1, '<object>', '</object>'],\\n  'tr': [2, '<table><tbody>', '</tbody></table>'],\\n\\n  'optgroup': selectWrap,\\n  'option': selectWrap,\\n\\n  'caption': tableWrap,\\n  'colgroup': tableWrap,\\n  'tbody': tableWrap,\\n  'tfoot': tableWrap,\\n  'thead': tableWrap,\\n\\n  'td': trWrap,\\n  'th': trWrap,\\n\\n  'circle': svgWrap,\\n  'defs': svgWrap,\\n  'ellipse': svgWrap,\\n  'g': svgWrap,\\n  'line': svgWrap,\\n  'linearGradient': svgWrap,\\n  'path': svgWrap,\\n  'polygon': svgWrap,\\n  'polyline': svgWrap,\\n  'radialGradient': svgWrap,\\n  'rect': svgWrap,\\n  'stop': svgWrap,\\n  'text': svgWrap\\n};\\n\\n/**\\n * Gets the markup wrap configuration for the supplied `nodeName`.\\n *\\n * NOTE: This lazily detects which wraps are necessary for the current browser.\\n *\\n * @param {string} nodeName Lowercase `nodeName`.\\n * @return {?array} Markup wrap configuration, if applicable.\\n */\\nfunction getMarkupWrap(nodeName) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(!!dummyNode, 'Markup wrapping node not initialized') : invariant(!!dummyNode));\\n  if (!markupWrap.hasOwnProperty(nodeName)) {\\n    nodeName = '*';\\n  }\\n  if (!shouldWrap.hasOwnProperty(nodeName)) {\\n    if (nodeName === '*') {\\n      dummyNode.innerHTML = '<link />';\\n    } else {\\n      dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';\\n    }\\n    shouldWrap[nodeName] = !dummyNode.firstChild;\\n  }\\n  return shouldWrap[nodeName] ? markupWrap[nodeName] : null;\\n}\\n\\n\\nmodule.exports = getMarkupWrap;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getMarkupWrap.js\\n ** module id = 110\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getMarkupWrap.js?\");\n\n/***/ },\n/* 111 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/setInnerHTML.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule setInnerHTML\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar WHITESPACE_TEST = /^[ \\\\r\\\\n\\\\t\\\\f]/;\\nvar NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \\\\r\\\\n\\\\t\\\\f\\\\/>]/;\\n\\n/**\\n * Set the innerHTML property of a node, ensuring that whitespace is preserved\\n * even in IE8.\\n *\\n * @param {DOMElement} node\\n * @param {string} html\\n * @internal\\n */\\nvar setInnerHTML = function(node, html) {\\n  node.innerHTML = html;\\n};\\n\\nif (ExecutionEnvironment.canUseDOM) {\\n  // IE8: When updating a just created node with innerHTML only leading\\n  // whitespace is removed. When updating an existing node with innerHTML\\n  // whitespace in root TextNodes is also collapsed.\\n  // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html\\n\\n  // Feature detection; only IE8 is known to behave improperly like this.\\n  var testElement = document.createElement('div');\\n  testElement.innerHTML = ' ';\\n  if (testElement.innerHTML === '') {\\n    setInnerHTML = function(node, html) {\\n      // Magic theory: IE8 supposedly differentiates between added and updated\\n      // nodes when processing innerHTML, innerHTML on updated nodes suffers\\n      // from worse whitespace behavior. Re-adding a node like this triggers\\n      // the initial and more favorable whitespace behavior.\\n      // TODO: What to do on a detached node?\\n      if (node.parentNode) {\\n        node.parentNode.replaceChild(node, node);\\n      }\\n\\n      // We also implement a workaround for non-visible tags disappearing into\\n      // thin air on IE8, this only happens if there is no visible text\\n      // in-front of the non-visible tags. Piggyback on the whitespace fix\\n      // and simply check if any non-visible tags appear in the source.\\n      if (WHITESPACE_TEST.test(html) ||\\n          html[0] === '<' && NONVISIBLE_TEST.test(html)) {\\n        // Recover leading whitespace by temporarily prepending any character.\\n        // \\\\uFEFF has the potential advantage of being zero-width/invisible.\\n        node.innerHTML = '\\\\uFEFF' + html;\\n\\n        // deleteData leaves an empty `TextNode` which offsets the index of all\\n        // children. Definitely want to avoid this.\\n        var textNode = node.firstChild;\\n        if (textNode.data.length === 1) {\\n          node.removeChild(textNode);\\n        } else {\\n          textNode.deleteData(0, 1);\\n        }\\n      } else {\\n        node.innerHTML = html;\\n      }\\n    };\\n  }\\n}\\n\\nmodule.exports = setInnerHTML;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/setInnerHTML.js\\n ** module id = 111\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/setInnerHTML.js?\");\n\n/***/ },\n/* 112 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/ReactMarkupChecksum.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactMarkupChecksum\\n */\\n\\n\\\"use strict\\\";\\n\\nvar adler32 = __webpack_require__(/*! ./adler32 */ 113);\\n\\nvar ReactMarkupChecksum = {\\n  CHECKSUM_ATTR_NAME: 'data-react-checksum',\\n\\n  /**\\n   * @param {string} markup Markup string\\n   * @return {string} Markup string with checksum attribute attached\\n   */\\n  addChecksumToMarkup: function(markup) {\\n    var checksum = adler32(markup);\\n    return markup.replace(\\n      '>',\\n      ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '=\\\"' + checksum + '\\\">'\\n    );\\n  },\\n\\n  /**\\n   * @param {string} markup to use\\n   * @param {DOMElement} element root React element\\n   * @returns {boolean} whether or not the markup is the same\\n   */\\n  canReuseMarkup: function(markup, element) {\\n    var existingChecksum = element.getAttribute(\\n      ReactMarkupChecksum.CHECKSUM_ATTR_NAME\\n    );\\n    existingChecksum = existingChecksum && parseInt(existingChecksum, 10);\\n    var markupChecksum = adler32(markup);\\n    return markupChecksum === existingChecksum;\\n  }\\n};\\n\\nmodule.exports = ReactMarkupChecksum;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactMarkupChecksum.js\\n ** module id = 112\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactMarkupChecksum.js?\");\n\n/***/ },\n/* 113 */\n/*!********************************!*\\\n  !*** ./~/react/lib/adler32.js ***!\n  \\********************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule adler32\\n */\\n\\n/* jslint bitwise:true */\\n\\n\\\"use strict\\\";\\n\\nvar MOD = 65521;\\n\\n// This is a clean-room implementation of adler32 designed for detecting\\n// if markup is not what we expect it to be. It does not need to be\\n// cryptographically strong, only reasonably good at detecting if markup\\n// generated on the server is different than that on the client.\\nfunction adler32(data) {\\n  var a = 1;\\n  var b = 0;\\n  for (var i = 0; i < data.length; i++) {\\n    a = (a + data.charCodeAt(i)) % MOD;\\n    b = (b + a) % MOD;\\n  }\\n  return a | (b << 16);\\n}\\n\\nmodule.exports = adler32;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/adler32.js\\n ** module id = 113\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/adler32.js?\");\n\n/***/ },\n/* 114 */\n/*!*****************************************************!*\\\n  !*** ./~/react/lib/ReactDefaultBatchingStrategy.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDefaultBatchingStrategy\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\nvar Transaction = __webpack_require__(/*! ./Transaction */ 27);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\n\\nvar RESET_BATCHED_UPDATES = {\\n  initialize: emptyFunction,\\n  close: function() {\\n    ReactDefaultBatchingStrategy.isBatchingUpdates = false;\\n  }\\n};\\n\\nvar FLUSH_BATCHED_UPDATES = {\\n  initialize: emptyFunction,\\n  close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)\\n};\\n\\nvar TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];\\n\\nfunction ReactDefaultBatchingStrategyTransaction() {\\n  this.reinitializeTransaction();\\n}\\n\\nassign(\\n  ReactDefaultBatchingStrategyTransaction.prototype,\\n  Transaction.Mixin,\\n  {\\n    getTransactionWrappers: function() {\\n      return TRANSACTION_WRAPPERS;\\n    }\\n  }\\n);\\n\\nvar transaction = new ReactDefaultBatchingStrategyTransaction();\\n\\nvar ReactDefaultBatchingStrategy = {\\n  isBatchingUpdates: false,\\n\\n  /**\\n   * Call the provided function in a context within which calls to `setState`\\n   * and friends are batched such that components aren't updated unnecessarily.\\n   */\\n  batchedUpdates: function(callback, a, b) {\\n    var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;\\n\\n    ReactDefaultBatchingStrategy.isBatchingUpdates = true;\\n\\n    // The code is written this way to avoid extra allocations\\n    if (alreadyBatchingUpdates) {\\n      callback(a, b);\\n    } else {\\n      transaction.perform(callback, null, a, b);\\n    }\\n  }\\n};\\n\\nmodule.exports = ReactDefaultBatchingStrategy;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDefaultBatchingStrategy.js\\n ** module id = 114\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDefaultBatchingStrategy.js?\");\n\n/***/ },\n/* 115 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactDOMButton.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMButton\\n */\\n\\n\\\"use strict\\\";\\n\\nvar AutoFocusMixin = __webpack_require__(/*! ./AutoFocusMixin */ 116);\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactDOM = __webpack_require__(/*! ./ReactDOM */ 45);\\n\\nvar keyMirror = __webpack_require__(/*! ./keyMirror */ 15);\\n\\n// Store a reference to the <button> `ReactDOMComponent`. TODO: use string\\nvar button = ReactElement.createFactory(ReactDOM.button.type);\\n\\nvar mouseListenerNames = keyMirror({\\n  onClick: true,\\n  onDoubleClick: true,\\n  onMouseDown: true,\\n  onMouseMove: true,\\n  onMouseUp: true,\\n  onClickCapture: true,\\n  onDoubleClickCapture: true,\\n  onMouseDownCapture: true,\\n  onMouseMoveCapture: true,\\n  onMouseUpCapture: true\\n});\\n\\n/**\\n * Implements a <button> native component that does not receive mouse events\\n * when `disabled` is set.\\n */\\nvar ReactDOMButton = ReactCompositeComponent.createClass({\\n  displayName: 'ReactDOMButton',\\n\\n  mixins: [AutoFocusMixin, ReactBrowserComponentMixin],\\n\\n  render: function() {\\n    var props = {};\\n\\n    // Copy the props; except the mouse listeners if we're disabled\\n    for (var key in this.props) {\\n      if (this.props.hasOwnProperty(key) &&\\n          (!this.props.disabled || !mouseListenerNames[key])) {\\n        props[key] = this.props[key];\\n      }\\n    }\\n\\n    return button(props, this.props.children);\\n  }\\n\\n});\\n\\nmodule.exports = ReactDOMButton;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMButton.js\\n ** module id = 115\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMButton.js?\");\n\n/***/ },\n/* 116 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/AutoFocusMixin.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule AutoFocusMixin\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar focusNode = __webpack_require__(/*! ./focusNode */ 91);\\n\\nvar AutoFocusMixin = {\\n  componentDidMount: function() {\\n    if (this.props.autoFocus) {\\n      focusNode(this.getDOMNode());\\n    }\\n  }\\n};\\n\\nmodule.exports = AutoFocusMixin;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/AutoFocusMixin.js\\n ** module id = 116\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/AutoFocusMixin.js?\");\n\n/***/ },\n/* 117 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/ReactDOMForm.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMForm\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar LocalEventTrapMixin = __webpack_require__(/*! ./LocalEventTrapMixin */ 77);\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactDOM = __webpack_require__(/*! ./ReactDOM */ 45);\\n\\n// Store a reference to the <form> `ReactDOMComponent`. TODO: use string\\nvar form = ReactElement.createFactory(ReactDOM.form.type);\\n\\n/**\\n * Since onSubmit doesn't bubble OR capture on the top level in IE8, we need\\n * to capture it on the <form> element itself. There are lots of hacks we could\\n * do to accomplish this, but the most reliable is to make <form> a\\n * composite component and use `componentDidMount` to attach the event handlers.\\n */\\nvar ReactDOMForm = ReactCompositeComponent.createClass({\\n  displayName: 'ReactDOMForm',\\n\\n  mixins: [ReactBrowserComponentMixin, LocalEventTrapMixin],\\n\\n  render: function() {\\n    // TODO: Instead of using `ReactDOM` directly, we should use JSX. However,\\n    // `jshint` fails to parse JSX so in order for linting to work in the open\\n    // source repo, we need to just use `ReactDOM.form`.\\n    return form(this.props);\\n  },\\n\\n  componentDidMount: function() {\\n    this.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset');\\n    this.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit');\\n  }\\n});\\n\\nmodule.exports = ReactDOMForm;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMForm.js\\n ** module id = 117\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMForm.js?\");\n\n/***/ },\n/* 118 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/ReactDOMInput.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMInput\\n */\\n\\n\\\"use strict\\\";\\n\\nvar AutoFocusMixin = __webpack_require__(/*! ./AutoFocusMixin */ 116);\\nvar DOMPropertyOperations = __webpack_require__(/*! ./DOMPropertyOperations */ 7);\\nvar LinkedValueUtils = __webpack_require__(/*! ./LinkedValueUtils */ 119);\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactDOM = __webpack_require__(/*! ./ReactDOM */ 45);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n// Store a reference to the <input> `ReactDOMComponent`. TODO: use string\\nvar input = ReactElement.createFactory(ReactDOM.input.type);\\n\\nvar instancesByReactID = {};\\n\\nfunction forceUpdateIfMounted() {\\n  /*jshint validthis:true */\\n  if (this.isMounted()) {\\n    this.forceUpdate();\\n  }\\n}\\n\\n/**\\n * Implements an <input> native component that allows setting these optional\\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\\n *\\n * If `checked` or `value` are not supplied (or null/undefined), user actions\\n * that affect the checked state or value will trigger updates to the element.\\n *\\n * If they are supplied (and not null/undefined), the rendered element will not\\n * trigger updates to the element. Instead, the props must change in order for\\n * the rendered element to be updated.\\n *\\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\\n * with an empty value (or `defaultValue`).\\n *\\n * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\\n */\\nvar ReactDOMInput = ReactCompositeComponent.createClass({\\n  displayName: 'ReactDOMInput',\\n\\n  mixins: [AutoFocusMixin, LinkedValueUtils.Mixin, ReactBrowserComponentMixin],\\n\\n  getInitialState: function() {\\n    var defaultValue = this.props.defaultValue;\\n    return {\\n      initialChecked: this.props.defaultChecked || false,\\n      initialValue: defaultValue != null ? defaultValue : null\\n    };\\n  },\\n\\n  render: function() {\\n    // Clone `this.props` so we don't mutate the input.\\n    var props = assign({}, this.props);\\n\\n    props.defaultChecked = null;\\n    props.defaultValue = null;\\n\\n    var value = LinkedValueUtils.getValue(this);\\n    props.value = value != null ? value : this.state.initialValue;\\n\\n    var checked = LinkedValueUtils.getChecked(this);\\n    props.checked = checked != null ? checked : this.state.initialChecked;\\n\\n    props.onChange = this._handleChange;\\n\\n    return input(props, this.props.children);\\n  },\\n\\n  componentDidMount: function() {\\n    var id = ReactMount.getID(this.getDOMNode());\\n    instancesByReactID[id] = this;\\n  },\\n\\n  componentWillUnmount: function() {\\n    var rootNode = this.getDOMNode();\\n    var id = ReactMount.getID(rootNode);\\n    delete instancesByReactID[id];\\n  },\\n\\n  componentDidUpdate: function(prevProps, prevState, prevContext) {\\n    var rootNode = this.getDOMNode();\\n    if (this.props.checked != null) {\\n      DOMPropertyOperations.setValueForProperty(\\n        rootNode,\\n        'checked',\\n        this.props.checked || false\\n      );\\n    }\\n\\n    var value = LinkedValueUtils.getValue(this);\\n    if (value != null) {\\n      // Cast `value` to a string to ensure the value is set correctly. While\\n      // browsers typically do this as necessary, jsdom doesn't.\\n      DOMPropertyOperations.setValueForProperty(rootNode, 'value', '' + value);\\n    }\\n  },\\n\\n  _handleChange: function(event) {\\n    var returnValue;\\n    var onChange = LinkedValueUtils.getOnChange(this);\\n    if (onChange) {\\n      returnValue = onChange.call(this, event);\\n    }\\n    // Here we use asap to wait until all updates have propagated, which\\n    // is important when using controlled components within layers:\\n    // https://github.com/facebook/react/issues/1698\\n    ReactUpdates.asap(forceUpdateIfMounted, this);\\n\\n    var name = this.props.name;\\n    if (this.props.type === 'radio' && name != null) {\\n      var rootNode = this.getDOMNode();\\n      var queryRoot = rootNode;\\n\\n      while (queryRoot.parentNode) {\\n        queryRoot = queryRoot.parentNode;\\n      }\\n\\n      // If `rootNode.form` was non-null, then we could try `form.elements`,\\n      // but that sometimes behaves strangely in IE8. We could also try using\\n      // `form.getElementsByName`, but that will only return direct children\\n      // and won't include inputs that use the HTML5 `form=` attribute. Since\\n      // the input might not even be in a form, let's just use the global\\n      // `querySelectorAll` to ensure we don't miss anything.\\n      var group = queryRoot.querySelectorAll(\\n        'input[name=' + JSON.stringify('' + name) + '][type=\\\"radio\\\"]');\\n\\n      for (var i = 0, groupLen = group.length; i < groupLen; i++) {\\n        var otherNode = group[i];\\n        if (otherNode === rootNode ||\\n            otherNode.form !== rootNode.form) {\\n          continue;\\n        }\\n        var otherID = ReactMount.getID(otherNode);\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          otherID,\\n          'ReactDOMInput: Mixing React and non-React radio inputs with the ' +\\n          'same `name` is not supported.'\\n        ) : invariant(otherID));\\n        var otherInstance = instancesByReactID[otherID];\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          otherInstance,\\n          'ReactDOMInput: Unknown radio button ID %s.',\\n          otherID\\n        ) : invariant(otherInstance));\\n        // If this is a controlled radio button group, forcing the input that\\n        // was previously checked to update will cause it to be come re-checked\\n        // as appropriate.\\n        ReactUpdates.asap(forceUpdateIfMounted, otherInstance);\\n      }\\n    }\\n\\n    return returnValue;\\n  }\\n\\n});\\n\\nmodule.exports = ReactDOMInput;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMInput.js\\n ** module id = 118\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMInput.js?\");\n\n/***/ },\n/* 119 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/LinkedValueUtils.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule LinkedValueUtils\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactPropTypes = __webpack_require__(/*! ./ReactPropTypes */ 120);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nvar hasReadOnlyValue = {\\n  'button': true,\\n  'checkbox': true,\\n  'image': true,\\n  'hidden': true,\\n  'radio': true,\\n  'reset': true,\\n  'submit': true\\n};\\n\\nfunction _assertSingleLink(input) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    input.props.checkedLink == null || input.props.valueLink == null,\\n    'Cannot provide a checkedLink and a valueLink. If you want to use ' +\\n    'checkedLink, you probably don\\\\'t want to use valueLink and vice versa.'\\n  ) : invariant(input.props.checkedLink == null || input.props.valueLink == null));\\n}\\nfunction _assertValueLink(input) {\\n  _assertSingleLink(input);\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    input.props.value == null && input.props.onChange == null,\\n    'Cannot provide a valueLink and a value or onChange event. If you want ' +\\n    'to use value or onChange, you probably don\\\\'t want to use valueLink.'\\n  ) : invariant(input.props.value == null && input.props.onChange == null));\\n}\\n\\nfunction _assertCheckedLink(input) {\\n  _assertSingleLink(input);\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    input.props.checked == null && input.props.onChange == null,\\n    'Cannot provide a checkedLink and a checked property or onChange event. ' +\\n    'If you want to use checked or onChange, you probably don\\\\'t want to ' +\\n    'use checkedLink'\\n  ) : invariant(input.props.checked == null && input.props.onChange == null));\\n}\\n\\n/**\\n * @param {SyntheticEvent} e change event to handle\\n */\\nfunction _handleLinkedValueChange(e) {\\n  /*jshint validthis:true */\\n  this.props.valueLink.requestChange(e.target.value);\\n}\\n\\n/**\\n  * @param {SyntheticEvent} e change event to handle\\n  */\\nfunction _handleLinkedCheckChange(e) {\\n  /*jshint validthis:true */\\n  this.props.checkedLink.requestChange(e.target.checked);\\n}\\n\\n/**\\n * Provide a linked `value` attribute for controlled forms. You should not use\\n * this outside of the ReactDOM controlled form components.\\n */\\nvar LinkedValueUtils = {\\n  Mixin: {\\n    propTypes: {\\n      value: function(props, propName, componentName) {\\n        if (!props[propName] ||\\n            hasReadOnlyValue[props.type] ||\\n            props.onChange ||\\n            props.readOnly ||\\n            props.disabled) {\\n          return;\\n        }\\n        return new Error(\\n          'You provided a `value` prop to a form field without an ' +\\n          '`onChange` handler. This will render a read-only field. If ' +\\n          'the field should be mutable use `defaultValue`. Otherwise, ' +\\n          'set either `onChange` or `readOnly`.'\\n        );\\n      },\\n      checked: function(props, propName, componentName) {\\n        if (!props[propName] ||\\n            props.onChange ||\\n            props.readOnly ||\\n            props.disabled) {\\n          return;\\n        }\\n        return new Error(\\n          'You provided a `checked` prop to a form field without an ' +\\n          '`onChange` handler. This will render a read-only field. If ' +\\n          'the field should be mutable use `defaultChecked`. Otherwise, ' +\\n          'set either `onChange` or `readOnly`.'\\n        );\\n      },\\n      onChange: ReactPropTypes.func\\n    }\\n  },\\n\\n  /**\\n   * @param {ReactComponent} input Form component\\n   * @return {*} current value of the input either from value prop or link.\\n   */\\n  getValue: function(input) {\\n    if (input.props.valueLink) {\\n      _assertValueLink(input);\\n      return input.props.valueLink.value;\\n    }\\n    return input.props.value;\\n  },\\n\\n  /**\\n   * @param {ReactComponent} input Form component\\n   * @return {*} current checked status of the input either from checked prop\\n   *             or link.\\n   */\\n  getChecked: function(input) {\\n    if (input.props.checkedLink) {\\n      _assertCheckedLink(input);\\n      return input.props.checkedLink.value;\\n    }\\n    return input.props.checked;\\n  },\\n\\n  /**\\n   * @param {ReactComponent} input Form component\\n   * @return {function} change callback either from onChange prop or link.\\n   */\\n  getOnChange: function(input) {\\n    if (input.props.valueLink) {\\n      _assertValueLink(input);\\n      return _handleLinkedValueChange;\\n    } else if (input.props.checkedLink) {\\n      _assertCheckedLink(input);\\n      return _handleLinkedCheckChange;\\n    }\\n    return input.props.onChange;\\n  }\\n};\\n\\nmodule.exports = LinkedValueUtils;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/LinkedValueUtils.js\\n ** module id = 119\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/LinkedValueUtils.js?\");\n\n/***/ },\n/* 120 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactPropTypes.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactPropTypes\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactPropTypeLocationNames = __webpack_require__(/*! ./ReactPropTypeLocationNames */ 39);\\n\\nvar deprecated = __webpack_require__(/*! ./deprecated */ 69);\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\n\\n/**\\n * Collection of methods that allow declaration and validation of props that are\\n * supplied to React components. Example usage:\\n *\\n *   var Props = require('ReactPropTypes');\\n *   var MyArticle = React.createClass({\\n *     propTypes: {\\n *       // An optional string prop named \\\"description\\\".\\n *       description: Props.string,\\n *\\n *       // A required enum prop named \\\"category\\\".\\n *       category: Props.oneOf(['News','Photos']).isRequired,\\n *\\n *       // A prop named \\\"dialog\\\" that requires an instance of Dialog.\\n *       dialog: Props.instanceOf(Dialog).isRequired\\n *     },\\n *     render: function() { ... }\\n *   });\\n *\\n * A more formal specification of how these methods are used:\\n *\\n *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\\n *   decl := ReactPropTypes.{type}(.isRequired)?\\n *\\n * Each and every declaration produces a function with the same signature. This\\n * allows the creation of custom validation functions. For example:\\n *\\n *  var MyLink = React.createClass({\\n *    propTypes: {\\n *      // An optional string or URI prop named \\\"href\\\".\\n *      href: function(props, propName, componentName) {\\n *        var propValue = props[propName];\\n *        if (propValue != null && typeof propValue !== 'string' &&\\n *            !(propValue instanceof URI)) {\\n *          return new Error(\\n *            'Expected a string or an URI for ' + propName + ' in ' +\\n *            componentName\\n *          );\\n *        }\\n *      }\\n *    },\\n *    render: function() {...}\\n *  });\\n *\\n * @internal\\n */\\n\\nvar ANONYMOUS = '<<anonymous>>';\\n\\nvar elementTypeChecker = createElementTypeChecker();\\nvar nodeTypeChecker = createNodeChecker();\\n\\nvar ReactPropTypes = {\\n  array: createPrimitiveTypeChecker('array'),\\n  bool: createPrimitiveTypeChecker('boolean'),\\n  func: createPrimitiveTypeChecker('function'),\\n  number: createPrimitiveTypeChecker('number'),\\n  object: createPrimitiveTypeChecker('object'),\\n  string: createPrimitiveTypeChecker('string'),\\n\\n  any: createAnyTypeChecker(),\\n  arrayOf: createArrayOfTypeChecker,\\n  element: elementTypeChecker,\\n  instanceOf: createInstanceTypeChecker,\\n  node: nodeTypeChecker,\\n  objectOf: createObjectOfTypeChecker,\\n  oneOf: createEnumTypeChecker,\\n  oneOfType: createUnionTypeChecker,\\n  shape: createShapeTypeChecker,\\n\\n  component: deprecated(\\n    'React.PropTypes',\\n    'component',\\n    'element',\\n    this,\\n    elementTypeChecker\\n  ),\\n  renderable: deprecated(\\n    'React.PropTypes',\\n    'renderable',\\n    'node',\\n    this,\\n    nodeTypeChecker\\n  )\\n};\\n\\nfunction createChainableTypeChecker(validate) {\\n  function checkType(isRequired, props, propName, componentName, location) {\\n    componentName = componentName || ANONYMOUS;\\n    if (props[propName] == null) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      if (isRequired) {\\n        return new Error(\\n          (\\\"Required \\\" + locationName + \\\" `\\\" + propName + \\\"` was not specified in \\\")+\\n          (\\\"`\\\" + componentName + \\\"`.\\\")\\n        );\\n      }\\n    } else {\\n      return validate(props, propName, componentName, location);\\n    }\\n  }\\n\\n  var chainedCheckType = checkType.bind(null, false);\\n  chainedCheckType.isRequired = checkType.bind(null, true);\\n\\n  return chainedCheckType;\\n}\\n\\nfunction createPrimitiveTypeChecker(expectedType) {\\n  function validate(props, propName, componentName, location) {\\n    var propValue = props[propName];\\n    var propType = getPropType(propValue);\\n    if (propType !== expectedType) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      // `propValue` being instance of, say, date/regexp, pass the 'object'\\n      // check, but we can offer a more precise error message here rather than\\n      // 'of type `object`'.\\n      var preciseType = getPreciseType(propValue);\\n\\n      return new Error(\\n        (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` of type `\\\" + preciseType + \\\"` \\\") +\\n        (\\\"supplied to `\\\" + componentName + \\\"`, expected `\\\" + expectedType + \\\"`.\\\")\\n      );\\n    }\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createAnyTypeChecker() {\\n  return createChainableTypeChecker(emptyFunction.thatReturns());\\n}\\n\\nfunction createArrayOfTypeChecker(typeChecker) {\\n  function validate(props, propName, componentName, location) {\\n    var propValue = props[propName];\\n    if (!Array.isArray(propValue)) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      var propType = getPropType(propValue);\\n      return new Error(\\n        (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` of type \\\") +\\n        (\\\"`\\\" + propType + \\\"` supplied to `\\\" + componentName + \\\"`, expected an array.\\\")\\n      );\\n    }\\n    for (var i = 0; i < propValue.length; i++) {\\n      var error = typeChecker(propValue, i, componentName, location);\\n      if (error instanceof Error) {\\n        return error;\\n      }\\n    }\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createElementTypeChecker() {\\n  function validate(props, propName, componentName, location) {\\n    if (!ReactElement.isValidElement(props[propName])) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      return new Error(\\n        (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` supplied to \\\") +\\n        (\\\"`\\\" + componentName + \\\"`, expected a ReactElement.\\\")\\n      );\\n    }\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createInstanceTypeChecker(expectedClass) {\\n  function validate(props, propName, componentName, location) {\\n    if (!(props[propName] instanceof expectedClass)) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      var expectedClassName = expectedClass.name || ANONYMOUS;\\n      return new Error(\\n        (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` supplied to \\\") +\\n        (\\\"`\\\" + componentName + \\\"`, expected instance of `\\\" + expectedClassName + \\\"`.\\\")\\n      );\\n    }\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createEnumTypeChecker(expectedValues) {\\n  function validate(props, propName, componentName, location) {\\n    var propValue = props[propName];\\n    for (var i = 0; i < expectedValues.length; i++) {\\n      if (propValue === expectedValues[i]) {\\n        return;\\n      }\\n    }\\n\\n    var locationName = ReactPropTypeLocationNames[location];\\n    var valuesString = JSON.stringify(expectedValues);\\n    return new Error(\\n      (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` of value `\\\" + propValue + \\\"` \\\") +\\n      (\\\"supplied to `\\\" + componentName + \\\"`, expected one of \\\" + valuesString + \\\".\\\")\\n    );\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createObjectOfTypeChecker(typeChecker) {\\n  function validate(props, propName, componentName, location) {\\n    var propValue = props[propName];\\n    var propType = getPropType(propValue);\\n    if (propType !== 'object') {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      return new Error(\\n        (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` of type \\\") +\\n        (\\\"`\\\" + propType + \\\"` supplied to `\\\" + componentName + \\\"`, expected an object.\\\")\\n      );\\n    }\\n    for (var key in propValue) {\\n      if (propValue.hasOwnProperty(key)) {\\n        var error = typeChecker(propValue, key, componentName, location);\\n        if (error instanceof Error) {\\n          return error;\\n        }\\n      }\\n    }\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createUnionTypeChecker(arrayOfTypeCheckers) {\\n  function validate(props, propName, componentName, location) {\\n    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\\n      var checker = arrayOfTypeCheckers[i];\\n      if (checker(props, propName, componentName, location) == null) {\\n        return;\\n      }\\n    }\\n\\n    var locationName = ReactPropTypeLocationNames[location];\\n    return new Error(\\n      (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` supplied to \\\") +\\n      (\\\"`\\\" + componentName + \\\"`.\\\")\\n    );\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createNodeChecker() {\\n  function validate(props, propName, componentName, location) {\\n    if (!isNode(props[propName])) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      return new Error(\\n        (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` supplied to \\\") +\\n        (\\\"`\\\" + componentName + \\\"`, expected a ReactNode.\\\")\\n      );\\n    }\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createShapeTypeChecker(shapeTypes) {\\n  function validate(props, propName, componentName, location) {\\n    var propValue = props[propName];\\n    var propType = getPropType(propValue);\\n    if (propType !== 'object') {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      return new Error(\\n        (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` of type `\\\" + propType + \\\"` \\\") +\\n        (\\\"supplied to `\\\" + componentName + \\\"`, expected `object`.\\\")\\n      );\\n    }\\n    for (var key in shapeTypes) {\\n      var checker = shapeTypes[key];\\n      if (!checker) {\\n        continue;\\n      }\\n      var error = checker(propValue, key, componentName, location);\\n      if (error) {\\n        return error;\\n      }\\n    }\\n  }\\n  return createChainableTypeChecker(validate, 'expected `object`');\\n}\\n\\nfunction isNode(propValue) {\\n  switch(typeof propValue) {\\n    case 'number':\\n    case 'string':\\n      return true;\\n    case 'boolean':\\n      return !propValue;\\n    case 'object':\\n      if (Array.isArray(propValue)) {\\n        return propValue.every(isNode);\\n      }\\n      if (ReactElement.isValidElement(propValue)) {\\n        return true;\\n      }\\n      for (var k in propValue) {\\n        if (!isNode(propValue[k])) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    default:\\n      return false;\\n  }\\n}\\n\\n// Equivalent of `typeof` but with special handling for array and regexp.\\nfunction getPropType(propValue) {\\n  var propType = typeof propValue;\\n  if (Array.isArray(propValue)) {\\n    return 'array';\\n  }\\n  if (propValue instanceof RegExp) {\\n    // Old webkits (at least until Android 4.0) return 'function' rather than\\n    // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\\n    // passes PropTypes.object.\\n    return 'object';\\n  }\\n  return propType;\\n}\\n\\n// This handles more types than `getPropType`. Only used for error messages.\\n// See `createPrimitiveTypeChecker`.\\nfunction getPreciseType(propValue) {\\n  var propType = getPropType(propValue);\\n  if (propType === 'object') {\\n    if (propValue instanceof Date) {\\n      return 'date';\\n    } else if (propValue instanceof RegExp) {\\n      return 'regexp';\\n    }\\n  }\\n  return propType;\\n}\\n\\nmodule.exports = ReactPropTypes;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactPropTypes.js\\n ** module id = 120\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactPropTypes.js?\");\n\n/***/ },\n/* 121 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactDOMOption.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMOption\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactDOM = __webpack_require__(/*! ./ReactDOM */ 45);\\n\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\n// Store a reference to the <option> `ReactDOMComponent`. TODO: use string\\nvar option = ReactElement.createFactory(ReactDOM.option.type);\\n\\n/**\\n * Implements an <option> native component that warns when `selected` is set.\\n */\\nvar ReactDOMOption = ReactCompositeComponent.createClass({\\n  displayName: 'ReactDOMOption',\\n\\n  mixins: [ReactBrowserComponentMixin],\\n\\n  componentWillMount: function() {\\n    // TODO (yungsters): Remove support for `selected` in <option>.\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n        this.props.selected == null,\\n        'Use the `defaultValue` or `value` props on <select> instead of ' +\\n        'setting `selected` on <option>.'\\n      ) : null);\\n    }\\n  },\\n\\n  render: function() {\\n    return option(this.props, this.props.children);\\n  }\\n\\n});\\n\\nmodule.exports = ReactDOMOption;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMOption.js\\n ** module id = 121\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMOption.js?\");\n\n/***/ },\n/* 122 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactDOMSelect.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMSelect\\n */\\n\\n\\\"use strict\\\";\\n\\nvar AutoFocusMixin = __webpack_require__(/*! ./AutoFocusMixin */ 116);\\nvar LinkedValueUtils = __webpack_require__(/*! ./LinkedValueUtils */ 119);\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactDOM = __webpack_require__(/*! ./ReactDOM */ 45);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\n\\n// Store a reference to the <select> `ReactDOMComponent`. TODO: use string\\nvar select = ReactElement.createFactory(ReactDOM.select.type);\\n\\nfunction updateWithPendingValueIfMounted() {\\n  /*jshint validthis:true */\\n  if (this.isMounted()) {\\n    this.setState({value: this._pendingValue});\\n    this._pendingValue = 0;\\n  }\\n}\\n\\n/**\\n * Validation function for `value` and `defaultValue`.\\n * @private\\n */\\nfunction selectValueType(props, propName, componentName) {\\n  if (props[propName] == null) {\\n    return;\\n  }\\n  if (props.multiple) {\\n    if (!Array.isArray(props[propName])) {\\n      return new Error(\\n        (\\\"The `\\\" + propName + \\\"` prop supplied to <select> must be an array if \\\") +\\n        (\\\"`multiple` is true.\\\")\\n      );\\n    }\\n  } else {\\n    if (Array.isArray(props[propName])) {\\n      return new Error(\\n        (\\\"The `\\\" + propName + \\\"` prop supplied to <select> must be a scalar \\\") +\\n        (\\\"value if `multiple` is false.\\\")\\n      );\\n    }\\n  }\\n}\\n\\n/**\\n * If `value` is supplied, updates <option> elements on mount and update.\\n * @param {ReactComponent} component Instance of ReactDOMSelect\\n * @param {?*} propValue For uncontrolled components, null/undefined. For\\n * controlled components, a string (or with `multiple`, a list of strings).\\n * @private\\n */\\nfunction updateOptions(component, propValue) {\\n  var multiple = component.props.multiple;\\n  var value = propValue != null ? propValue : component.state.value;\\n  var options = component.getDOMNode().options;\\n  var selectedValue, i, l;\\n  if (multiple) {\\n    selectedValue = {};\\n    for (i = 0, l = value.length; i < l; ++i) {\\n      selectedValue['' + value[i]] = true;\\n    }\\n  } else {\\n    selectedValue = '' + value;\\n  }\\n  for (i = 0, l = options.length; i < l; i++) {\\n    var selected = multiple ?\\n      selectedValue.hasOwnProperty(options[i].value) :\\n      options[i].value === selectedValue;\\n\\n    if (selected !== options[i].selected) {\\n      options[i].selected = selected;\\n    }\\n  }\\n}\\n\\n/**\\n * Implements a <select> native component that allows optionally setting the\\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\\n * string. If `multiple` is true, the prop must be an array of strings.\\n *\\n * If `value` is not supplied (or null/undefined), user actions that change the\\n * selected option will trigger updates to the rendered options.\\n *\\n * If it is supplied (and not null/undefined), the rendered options will not\\n * update in response to user actions. Instead, the `value` prop must change in\\n * order for the rendered options to update.\\n *\\n * If `defaultValue` is provided, any options with the supplied values will be\\n * selected.\\n */\\nvar ReactDOMSelect = ReactCompositeComponent.createClass({\\n  displayName: 'ReactDOMSelect',\\n\\n  mixins: [AutoFocusMixin, LinkedValueUtils.Mixin, ReactBrowserComponentMixin],\\n\\n  propTypes: {\\n    defaultValue: selectValueType,\\n    value: selectValueType\\n  },\\n\\n  getInitialState: function() {\\n    return {value: this.props.defaultValue || (this.props.multiple ? [] : '')};\\n  },\\n\\n  componentWillMount: function() {\\n    this._pendingValue = null;\\n  },\\n\\n  componentWillReceiveProps: function(nextProps) {\\n    if (!this.props.multiple && nextProps.multiple) {\\n      this.setState({value: [this.state.value]});\\n    } else if (this.props.multiple && !nextProps.multiple) {\\n      this.setState({value: this.state.value[0]});\\n    }\\n  },\\n\\n  render: function() {\\n    // Clone `this.props` so we don't mutate the input.\\n    var props = assign({}, this.props);\\n\\n    props.onChange = this._handleChange;\\n    props.value = null;\\n\\n    return select(props, this.props.children);\\n  },\\n\\n  componentDidMount: function() {\\n    updateOptions(this, LinkedValueUtils.getValue(this));\\n  },\\n\\n  componentDidUpdate: function(prevProps) {\\n    var value = LinkedValueUtils.getValue(this);\\n    var prevMultiple = !!prevProps.multiple;\\n    var multiple = !!this.props.multiple;\\n    if (value != null || prevMultiple !== multiple) {\\n      updateOptions(this, value);\\n    }\\n  },\\n\\n  _handleChange: function(event) {\\n    var returnValue;\\n    var onChange = LinkedValueUtils.getOnChange(this);\\n    if (onChange) {\\n      returnValue = onChange.call(this, event);\\n    }\\n\\n    var selectedValue;\\n    if (this.props.multiple) {\\n      selectedValue = [];\\n      var options = event.target.options;\\n      for (var i = 0, l = options.length; i < l; i++) {\\n        if (options[i].selected) {\\n          selectedValue.push(options[i].value);\\n        }\\n      }\\n    } else {\\n      selectedValue = event.target.value;\\n    }\\n\\n    this._pendingValue = selectedValue;\\n    ReactUpdates.asap(updateWithPendingValueIfMounted, this);\\n    return returnValue;\\n  }\\n\\n});\\n\\nmodule.exports = ReactDOMSelect;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMSelect.js\\n ** module id = 122\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMSelect.js?\");\n\n/***/ },\n/* 123 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/ReactDOMTextarea.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMTextarea\\n */\\n\\n\\\"use strict\\\";\\n\\nvar AutoFocusMixin = __webpack_require__(/*! ./AutoFocusMixin */ 116);\\nvar DOMPropertyOperations = __webpack_require__(/*! ./DOMPropertyOperations */ 7);\\nvar LinkedValueUtils = __webpack_require__(/*! ./LinkedValueUtils */ 119);\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactDOM = __webpack_require__(/*! ./ReactDOM */ 45);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\n// Store a reference to the <textarea> `ReactDOMComponent`. TODO: use string\\nvar textarea = ReactElement.createFactory(ReactDOM.textarea.type);\\n\\nfunction forceUpdateIfMounted() {\\n  /*jshint validthis:true */\\n  if (this.isMounted()) {\\n    this.forceUpdate();\\n  }\\n}\\n\\n/**\\n * Implements a <textarea> native component that allows setting `value`, and\\n * `defaultValue`. This differs from the traditional DOM API because value is\\n * usually set as PCDATA children.\\n *\\n * If `value` is not supplied (or null/undefined), user actions that affect the\\n * value will trigger updates to the element.\\n *\\n * If `value` is supplied (and not null/undefined), the rendered element will\\n * not trigger updates to the element. Instead, the `value` prop must change in\\n * order for the rendered element to be updated.\\n *\\n * The rendered element will be initialized with an empty value, the prop\\n * `defaultValue` if specified, or the children content (deprecated).\\n */\\nvar ReactDOMTextarea = ReactCompositeComponent.createClass({\\n  displayName: 'ReactDOMTextarea',\\n\\n  mixins: [AutoFocusMixin, LinkedValueUtils.Mixin, ReactBrowserComponentMixin],\\n\\n  getInitialState: function() {\\n    var defaultValue = this.props.defaultValue;\\n    // TODO (yungsters): Remove support for children content in <textarea>.\\n    var children = this.props.children;\\n    if (children != null) {\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n          false,\\n          'Use the `defaultValue` or `value` props instead of setting ' +\\n          'children on <textarea>.'\\n        ) : null);\\n      }\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        defaultValue == null,\\n        'If you supply `defaultValue` on a <textarea>, do not pass children.'\\n      ) : invariant(defaultValue == null));\\n      if (Array.isArray(children)) {\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          children.length <= 1,\\n          '<textarea> can only have at most one child.'\\n        ) : invariant(children.length <= 1));\\n        children = children[0];\\n      }\\n\\n      defaultValue = '' + children;\\n    }\\n    if (defaultValue == null) {\\n      defaultValue = '';\\n    }\\n    var value = LinkedValueUtils.getValue(this);\\n    return {\\n      // We save the initial value so that `ReactDOMComponent` doesn't update\\n      // `textContent` (unnecessary since we update value).\\n      // The initial value can be a boolean or object so that's why it's\\n      // forced to be a string.\\n      initialValue: '' + (value != null ? value : defaultValue)\\n    };\\n  },\\n\\n  render: function() {\\n    // Clone `this.props` so we don't mutate the input.\\n    var props = assign({}, this.props);\\n\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      props.dangerouslySetInnerHTML == null,\\n      '`dangerouslySetInnerHTML` does not make sense on <textarea>.'\\n    ) : invariant(props.dangerouslySetInnerHTML == null));\\n\\n    props.defaultValue = null;\\n    props.value = null;\\n    props.onChange = this._handleChange;\\n\\n    // Always set children to the same thing. In IE9, the selection range will\\n    // get reset if `textContent` is mutated.\\n    return textarea(props, this.state.initialValue);\\n  },\\n\\n  componentDidUpdate: function(prevProps, prevState, prevContext) {\\n    var value = LinkedValueUtils.getValue(this);\\n    if (value != null) {\\n      var rootNode = this.getDOMNode();\\n      // Cast `value` to a string to ensure the value is set correctly. While\\n      // browsers typically do this as necessary, jsdom doesn't.\\n      DOMPropertyOperations.setValueForProperty(rootNode, 'value', '' + value);\\n    }\\n  },\\n\\n  _handleChange: function(event) {\\n    var returnValue;\\n    var onChange = LinkedValueUtils.getOnChange(this);\\n    if (onChange) {\\n      returnValue = onChange.call(this, event);\\n    }\\n    ReactUpdates.asap(forceUpdateIfMounted, this);\\n    return returnValue;\\n  }\\n\\n});\\n\\nmodule.exports = ReactDOMTextarea;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMTextarea.js\\n ** module id = 123\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMTextarea.js?\");\n\n/***/ },\n/* 124 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/ReactEventListener.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactEventListener\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventListener = __webpack_require__(/*! ./EventListener */ 125);\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 17);\\nvar ReactInstanceHandles = __webpack_require__(/*! ./ReactInstanceHandles */ 4);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar getEventTarget = __webpack_require__(/*! ./getEventTarget */ 82);\\nvar getUnboundedScrollPosition = __webpack_require__(/*! ./getUnboundedScrollPosition */ 67);\\n\\n/**\\n * Finds the parent React component of `node`.\\n *\\n * @param {*} node\\n * @return {?DOMEventTarget} Parent container, or `null` if the specified node\\n *                           is not nested.\\n */\\nfunction findParent(node) {\\n  // TODO: It may be a good idea to cache this to prevent unnecessary DOM\\n  // traversal, but caching is difficult to do correctly without using a\\n  // mutation observer to listen for all DOM changes.\\n  var nodeID = ReactMount.getID(node);\\n  var rootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);\\n  var container = ReactMount.findReactContainerForID(rootID);\\n  var parent = ReactMount.getFirstReactDOM(container);\\n  return parent;\\n}\\n\\n// Used to store ancestor hierarchy in top level callback\\nfunction TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {\\n  this.topLevelType = topLevelType;\\n  this.nativeEvent = nativeEvent;\\n  this.ancestors = [];\\n}\\nassign(TopLevelCallbackBookKeeping.prototype, {\\n  destructor: function() {\\n    this.topLevelType = null;\\n    this.nativeEvent = null;\\n    this.ancestors.length = 0;\\n  }\\n});\\nPooledClass.addPoolingTo(\\n  TopLevelCallbackBookKeeping,\\n  PooledClass.twoArgumentPooler\\n);\\n\\nfunction handleTopLevelImpl(bookKeeping) {\\n  var topLevelTarget = ReactMount.getFirstReactDOM(\\n    getEventTarget(bookKeeping.nativeEvent)\\n  ) || window;\\n\\n  // Loop through the hierarchy, in case there's any nested components.\\n  // It's important that we build the array of ancestors before calling any\\n  // event handlers, because event handlers can modify the DOM, leading to\\n  // inconsistencies with ReactMount's node cache. See #1105.\\n  var ancestor = topLevelTarget;\\n  while (ancestor) {\\n    bookKeeping.ancestors.push(ancestor);\\n    ancestor = findParent(ancestor);\\n  }\\n\\n  for (var i = 0, l = bookKeeping.ancestors.length; i < l; i++) {\\n    topLevelTarget = bookKeeping.ancestors[i];\\n    var topLevelTargetID = ReactMount.getID(topLevelTarget) || '';\\n    ReactEventListener._handleTopLevel(\\n      bookKeeping.topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      bookKeeping.nativeEvent\\n    );\\n  }\\n}\\n\\nfunction scrollValueMonitor(cb) {\\n  var scrollPosition = getUnboundedScrollPosition(window);\\n  cb(scrollPosition);\\n}\\n\\nvar ReactEventListener = {\\n  _enabled: true,\\n  _handleTopLevel: null,\\n\\n  WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,\\n\\n  setHandleTopLevel: function(handleTopLevel) {\\n    ReactEventListener._handleTopLevel = handleTopLevel;\\n  },\\n\\n  setEnabled: function(enabled) {\\n    ReactEventListener._enabled = !!enabled;\\n  },\\n\\n  isEnabled: function() {\\n    return ReactEventListener._enabled;\\n  },\\n\\n\\n  /**\\n   * Traps top-level events by using event bubbling.\\n   *\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {string} handlerBaseName Event name (e.g. \\\"click\\\").\\n   * @param {object} handle Element on which to attach listener.\\n   * @return {object} An object with a remove function which will forcefully\\n   *                  remove the listener.\\n   * @internal\\n   */\\n  trapBubbledEvent: function(topLevelType, handlerBaseName, handle) {\\n    var element = handle;\\n    if (!element) {\\n      return;\\n    }\\n    return EventListener.listen(\\n      element,\\n      handlerBaseName,\\n      ReactEventListener.dispatchEvent.bind(null, topLevelType)\\n    );\\n  },\\n\\n  /**\\n   * Traps a top-level event by using event capturing.\\n   *\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {string} handlerBaseName Event name (e.g. \\\"click\\\").\\n   * @param {object} handle Element on which to attach listener.\\n   * @return {object} An object with a remove function which will forcefully\\n   *                  remove the listener.\\n   * @internal\\n   */\\n  trapCapturedEvent: function(topLevelType, handlerBaseName, handle) {\\n    var element = handle;\\n    if (!element) {\\n      return;\\n    }\\n    return EventListener.capture(\\n      element,\\n      handlerBaseName,\\n      ReactEventListener.dispatchEvent.bind(null, topLevelType)\\n    );\\n  },\\n\\n  monitorScrollValue: function(refresh) {\\n    var callback = scrollValueMonitor.bind(null, refresh);\\n    EventListener.listen(window, 'scroll', callback);\\n    EventListener.listen(window, 'resize', callback);\\n  },\\n\\n  dispatchEvent: function(topLevelType, nativeEvent) {\\n    if (!ReactEventListener._enabled) {\\n      return;\\n    }\\n\\n    var bookKeeping = TopLevelCallbackBookKeeping.getPooled(\\n      topLevelType,\\n      nativeEvent\\n    );\\n    try {\\n      // Event queue being processed in the same cycle allows\\n      // `preventDefault`.\\n      ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);\\n    } finally {\\n      TopLevelCallbackBookKeeping.release(bookKeeping);\\n    }\\n  }\\n};\\n\\nmodule.exports = ReactEventListener;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactEventListener.js\\n ** module id = 124\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactEventListener.js?\");\n\n/***/ },\n/* 125 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/EventListener.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014 Facebook, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n *\\n * @providesModule EventListener\\n * @typechecks\\n */\\n\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\n\\n/**\\n * Upstream version of event listener. Does not take into account specific\\n * nature of platform.\\n */\\nvar EventListener = {\\n  /**\\n   * Listen to DOM events during the bubble phase.\\n   *\\n   * @param {DOMEventTarget} target DOM element to register listener on.\\n   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\\n   * @param {function} callback Callback function.\\n   * @return {object} Object with a `remove` method.\\n   */\\n  listen: function(target, eventType, callback) {\\n    if (target.addEventListener) {\\n      target.addEventListener(eventType, callback, false);\\n      return {\\n        remove: function() {\\n          target.removeEventListener(eventType, callback, false);\\n        }\\n      };\\n    } else if (target.attachEvent) {\\n      target.attachEvent('on' + eventType, callback);\\n      return {\\n        remove: function() {\\n          target.detachEvent('on' + eventType, callback);\\n        }\\n      };\\n    }\\n  },\\n\\n  /**\\n   * Listen to DOM events during the capture phase.\\n   *\\n   * @param {DOMEventTarget} target DOM element to register listener on.\\n   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\\n   * @param {function} callback Callback function.\\n   * @return {object} Object with a `remove` method.\\n   */\\n  capture: function(target, eventType, callback) {\\n    if (!target.addEventListener) {\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        console.error(\\n          'Attempted to listen to events during the capture phase on a ' +\\n          'browser that does not support the capture phase. Your application ' +\\n          'will not receive some events.'\\n        );\\n      }\\n      return {\\n        remove: emptyFunction\\n      };\\n    } else {\\n      target.addEventListener(eventType, callback, true);\\n      return {\\n        remove: function() {\\n          target.removeEventListener(eventType, callback, true);\\n        }\\n      };\\n    }\\n  },\\n\\n  registerDefault: function() {}\\n};\\n\\nmodule.exports = EventListener;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/EventListener.js\\n ** module id = 125\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/EventListener.js?\");\n\n/***/ },\n/* 126 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactInjection.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactInjection\\n */\\n\\n\\\"use strict\\\";\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 8);\\nvar EventPluginHub = __webpack_require__(/*! ./EventPluginHub */ 61);\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 23);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactEmptyComponent = __webpack_require__(/*! ./ReactEmptyComponent */ 34);\\nvar ReactBrowserEventEmitter = __webpack_require__(/*! ./ReactBrowserEventEmitter */ 60);\\nvar ReactNativeComponent = __webpack_require__(/*! ./ReactNativeComponent */ 41);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\nvar ReactRootIndex = __webpack_require__(/*! ./ReactRootIndex */ 5);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\n\\nvar ReactInjection = {\\n  Component: ReactComponent.injection,\\n  CompositeComponent: ReactCompositeComponent.injection,\\n  DOMProperty: DOMProperty.injection,\\n  EmptyComponent: ReactEmptyComponent.injection,\\n  EventPluginHub: EventPluginHub.injection,\\n  EventEmitter: ReactBrowserEventEmitter.injection,\\n  NativeComponent: ReactNativeComponent.injection,\\n  Perf: ReactPerf.injection,\\n  RootIndex: ReactRootIndex.injection,\\n  Updates: ReactUpdates.injection\\n};\\n\\nmodule.exports = ReactInjection;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactInjection.js\\n ** module id = 126\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactInjection.js?\");\n\n/***/ },\n/* 127 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/SelectEventPlugin.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SelectEventPlugin\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar EventPropagators = __webpack_require__(/*! ./EventPropagators */ 79);\\nvar ReactInputSelection = __webpack_require__(/*! ./ReactInputSelection */ 87);\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 81);\\n\\nvar getActiveElement = __webpack_require__(/*! ./getActiveElement */ 92);\\nvar isTextInputElement = __webpack_require__(/*! ./isTextInputElement */ 84);\\nvar keyOf = __webpack_require__(/*! ./keyOf */ 42);\\nvar shallowEqual = __webpack_require__(/*! ./shallowEqual */ 128);\\n\\nvar topLevelTypes = EventConstants.topLevelTypes;\\n\\nvar eventTypes = {\\n  select: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onSelect: null}),\\n      captured: keyOf({onSelectCapture: null})\\n    },\\n    dependencies: [\\n      topLevelTypes.topBlur,\\n      topLevelTypes.topContextMenu,\\n      topLevelTypes.topFocus,\\n      topLevelTypes.topKeyDown,\\n      topLevelTypes.topMouseDown,\\n      topLevelTypes.topMouseUp,\\n      topLevelTypes.topSelectionChange\\n    ]\\n  }\\n};\\n\\nvar activeElement = null;\\nvar activeElementID = null;\\nvar lastSelection = null;\\nvar mouseDown = false;\\n\\n/**\\n * Get an object which is a unique representation of the current selection.\\n *\\n * The return value will not be consistent across nodes or browsers, but\\n * two identical selections on the same node will return identical objects.\\n *\\n * @param {DOMElement} node\\n * @param {object}\\n */\\nfunction getSelection(node) {\\n  if ('selectionStart' in node &&\\n      ReactInputSelection.hasSelectionCapabilities(node)) {\\n    return {\\n      start: node.selectionStart,\\n      end: node.selectionEnd\\n    };\\n  } else if (window.getSelection) {\\n    var selection = window.getSelection();\\n    return {\\n      anchorNode: selection.anchorNode,\\n      anchorOffset: selection.anchorOffset,\\n      focusNode: selection.focusNode,\\n      focusOffset: selection.focusOffset\\n    };\\n  } else if (document.selection) {\\n    var range = document.selection.createRange();\\n    return {\\n      parentElement: range.parentElement(),\\n      text: range.text,\\n      top: range.boundingTop,\\n      left: range.boundingLeft\\n    };\\n  }\\n}\\n\\n/**\\n * Poll selection to see whether it's changed.\\n *\\n * @param {object} nativeEvent\\n * @return {?SyntheticEvent}\\n */\\nfunction constructSelectEvent(nativeEvent) {\\n  // Ensure we have the right element, and that the user is not dragging a\\n  // selection (this matches native `select` event behavior). In HTML5, select\\n  // fires only on input and textarea thus if there's no focused element we\\n  // won't dispatch.\\n  if (mouseDown ||\\n      activeElement == null ||\\n      activeElement != getActiveElement()) {\\n    return;\\n  }\\n\\n  // Only fire when selection has actually changed.\\n  var currentSelection = getSelection(activeElement);\\n  if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\\n    lastSelection = currentSelection;\\n\\n    var syntheticEvent = SyntheticEvent.getPooled(\\n      eventTypes.select,\\n      activeElementID,\\n      nativeEvent\\n    );\\n\\n    syntheticEvent.type = 'select';\\n    syntheticEvent.target = activeElement;\\n\\n    EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);\\n\\n    return syntheticEvent;\\n  }\\n}\\n\\n/**\\n * This plugin creates an `onSelect` event that normalizes select events\\n * across form elements.\\n *\\n * Supported elements are:\\n * - input (see `isTextInputElement`)\\n * - textarea\\n * - contentEditable\\n *\\n * This differs from native browser implementations in the following ways:\\n * - Fires on contentEditable fields as well as inputs.\\n * - Fires for collapsed selection.\\n * - Fires after user input.\\n */\\nvar SelectEventPlugin = {\\n\\n  eventTypes: eventTypes,\\n\\n  /**\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native browser event.\\n   * @return {*} An accumulation of synthetic events.\\n   * @see {EventPluginHub.extractEvents}\\n   */\\n  extractEvents: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n\\n    switch (topLevelType) {\\n      // Track the input node that has focus.\\n      case topLevelTypes.topFocus:\\n        if (isTextInputElement(topLevelTarget) ||\\n            topLevelTarget.contentEditable === 'true') {\\n          activeElement = topLevelTarget;\\n          activeElementID = topLevelTargetID;\\n          lastSelection = null;\\n        }\\n        break;\\n      case topLevelTypes.topBlur:\\n        activeElement = null;\\n        activeElementID = null;\\n        lastSelection = null;\\n        break;\\n\\n      // Don't fire the event while the user is dragging. This matches the\\n      // semantics of the native select event.\\n      case topLevelTypes.topMouseDown:\\n        mouseDown = true;\\n        break;\\n      case topLevelTypes.topContextMenu:\\n      case topLevelTypes.topMouseUp:\\n        mouseDown = false;\\n        return constructSelectEvent(nativeEvent);\\n\\n      // Chrome and IE fire non-standard event when selection is changed (and\\n      // sometimes when it hasn't).\\n      // Firefox doesn't support selectionchange, so check selection status\\n      // after each key entry. The selection changes after keydown and before\\n      // keyup, but we check on keydown as well in the case of holding down a\\n      // key, when multiple keydown events are fired but only one keyup is.\\n      case topLevelTypes.topSelectionChange:\\n      case topLevelTypes.topKeyDown:\\n      case topLevelTypes.topKeyUp:\\n        return constructSelectEvent(nativeEvent);\\n    }\\n  }\\n};\\n\\nmodule.exports = SelectEventPlugin;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SelectEventPlugin.js\\n ** module id = 127\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SelectEventPlugin.js?\");\n\n/***/ },\n/* 128 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/shallowEqual.js ***!\n  \\*************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule shallowEqual\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Performs equality by iterating through keys on an object and returning\\n * false when any key has values which are not strictly equal between\\n * objA and objB. Returns true when the values of all keys are strictly equal.\\n *\\n * @return {boolean}\\n */\\nfunction shallowEqual(objA, objB) {\\n  if (objA === objB) {\\n    return true;\\n  }\\n  var key;\\n  // Test for A's keys different from B.\\n  for (key in objA) {\\n    if (objA.hasOwnProperty(key) &&\\n        (!objB.hasOwnProperty(key) || objA[key] !== objB[key])) {\\n      return false;\\n    }\\n  }\\n  // Test for B's keys missing from A.\\n  for (key in objB) {\\n    if (objB.hasOwnProperty(key) && !objA.hasOwnProperty(key)) {\\n      return false;\\n    }\\n  }\\n  return true;\\n}\\n\\nmodule.exports = shallowEqual;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/shallowEqual.js\\n ** module id = 128\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/shallowEqual.js?\");\n\n/***/ },\n/* 129 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ServerReactRootIndex.js ***!\n  \\*********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ServerReactRootIndex\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Size of the reactRoot ID space. We generate random numbers for React root\\n * IDs and if there's a collision the events and DOM update system will\\n * get confused. In the future we need a way to generate GUIDs but for\\n * now this will work on a smaller scale.\\n */\\nvar GLOBAL_MOUNT_POINT_MAX = Math.pow(2, 53);\\n\\nvar ServerReactRootIndex = {\\n  createReactRootIndex: function() {\\n    return Math.ceil(Math.random() * GLOBAL_MOUNT_POINT_MAX);\\n  }\\n};\\n\\nmodule.exports = ServerReactRootIndex;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ServerReactRootIndex.js\\n ** module id = 129\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ServerReactRootIndex.js?\");\n\n/***/ },\n/* 130 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/SimpleEventPlugin.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SimpleEventPlugin\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar EventPluginUtils = __webpack_require__(/*! ./EventPluginUtils */ 13);\\nvar EventPropagators = __webpack_require__(/*! ./EventPropagators */ 79);\\nvar SyntheticClipboardEvent = __webpack_require__(/*! ./SyntheticClipboardEvent */ 132);\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 81);\\nvar SyntheticFocusEvent = __webpack_require__(/*! ./SyntheticFocusEvent */ 133);\\nvar SyntheticKeyboardEvent = __webpack_require__(/*! ./SyntheticKeyboardEvent */ 134);\\nvar SyntheticMouseEvent = __webpack_require__(/*! ./SyntheticMouseEvent */ 96);\\nvar SyntheticDragEvent = __webpack_require__(/*! ./SyntheticDragEvent */ 131);\\nvar SyntheticTouchEvent = __webpack_require__(/*! ./SyntheticTouchEvent */ 137);\\nvar SyntheticUIEvent = __webpack_require__(/*! ./SyntheticUIEvent */ 97);\\nvar SyntheticWheelEvent = __webpack_require__(/*! ./SyntheticWheelEvent */ 138);\\n\\nvar getEventCharCode = __webpack_require__(/*! ./getEventCharCode */ 135);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar keyOf = __webpack_require__(/*! ./keyOf */ 42);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar topLevelTypes = EventConstants.topLevelTypes;\\n\\nvar eventTypes = {\\n  blur: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onBlur: true}),\\n      captured: keyOf({onBlurCapture: true})\\n    }\\n  },\\n  click: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onClick: true}),\\n      captured: keyOf({onClickCapture: true})\\n    }\\n  },\\n  contextMenu: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onContextMenu: true}),\\n      captured: keyOf({onContextMenuCapture: true})\\n    }\\n  },\\n  copy: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onCopy: true}),\\n      captured: keyOf({onCopyCapture: true})\\n    }\\n  },\\n  cut: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onCut: true}),\\n      captured: keyOf({onCutCapture: true})\\n    }\\n  },\\n  doubleClick: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDoubleClick: true}),\\n      captured: keyOf({onDoubleClickCapture: true})\\n    }\\n  },\\n  drag: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDrag: true}),\\n      captured: keyOf({onDragCapture: true})\\n    }\\n  },\\n  dragEnd: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDragEnd: true}),\\n      captured: keyOf({onDragEndCapture: true})\\n    }\\n  },\\n  dragEnter: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDragEnter: true}),\\n      captured: keyOf({onDragEnterCapture: true})\\n    }\\n  },\\n  dragExit: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDragExit: true}),\\n      captured: keyOf({onDragExitCapture: true})\\n    }\\n  },\\n  dragLeave: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDragLeave: true}),\\n      captured: keyOf({onDragLeaveCapture: true})\\n    }\\n  },\\n  dragOver: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDragOver: true}),\\n      captured: keyOf({onDragOverCapture: true})\\n    }\\n  },\\n  dragStart: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDragStart: true}),\\n      captured: keyOf({onDragStartCapture: true})\\n    }\\n  },\\n  drop: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDrop: true}),\\n      captured: keyOf({onDropCapture: true})\\n    }\\n  },\\n  focus: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onFocus: true}),\\n      captured: keyOf({onFocusCapture: true})\\n    }\\n  },\\n  input: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onInput: true}),\\n      captured: keyOf({onInputCapture: true})\\n    }\\n  },\\n  keyDown: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onKeyDown: true}),\\n      captured: keyOf({onKeyDownCapture: true})\\n    }\\n  },\\n  keyPress: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onKeyPress: true}),\\n      captured: keyOf({onKeyPressCapture: true})\\n    }\\n  },\\n  keyUp: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onKeyUp: true}),\\n      captured: keyOf({onKeyUpCapture: true})\\n    }\\n  },\\n  load: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onLoad: true}),\\n      captured: keyOf({onLoadCapture: true})\\n    }\\n  },\\n  error: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onError: true}),\\n      captured: keyOf({onErrorCapture: true})\\n    }\\n  },\\n  // Note: We do not allow listening to mouseOver events. Instead, use the\\n  // onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`.\\n  mouseDown: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onMouseDown: true}),\\n      captured: keyOf({onMouseDownCapture: true})\\n    }\\n  },\\n  mouseMove: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onMouseMove: true}),\\n      captured: keyOf({onMouseMoveCapture: true})\\n    }\\n  },\\n  mouseOut: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onMouseOut: true}),\\n      captured: keyOf({onMouseOutCapture: true})\\n    }\\n  },\\n  mouseOver: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onMouseOver: true}),\\n      captured: keyOf({onMouseOverCapture: true})\\n    }\\n  },\\n  mouseUp: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onMouseUp: true}),\\n      captured: keyOf({onMouseUpCapture: true})\\n    }\\n  },\\n  paste: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onPaste: true}),\\n      captured: keyOf({onPasteCapture: true})\\n    }\\n  },\\n  reset: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onReset: true}),\\n      captured: keyOf({onResetCapture: true})\\n    }\\n  },\\n  scroll: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onScroll: true}),\\n      captured: keyOf({onScrollCapture: true})\\n    }\\n  },\\n  submit: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onSubmit: true}),\\n      captured: keyOf({onSubmitCapture: true})\\n    }\\n  },\\n  touchCancel: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onTouchCancel: true}),\\n      captured: keyOf({onTouchCancelCapture: true})\\n    }\\n  },\\n  touchEnd: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onTouchEnd: true}),\\n      captured: keyOf({onTouchEndCapture: true})\\n    }\\n  },\\n  touchMove: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onTouchMove: true}),\\n      captured: keyOf({onTouchMoveCapture: true})\\n    }\\n  },\\n  touchStart: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onTouchStart: true}),\\n      captured: keyOf({onTouchStartCapture: true})\\n    }\\n  },\\n  wheel: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onWheel: true}),\\n      captured: keyOf({onWheelCapture: true})\\n    }\\n  }\\n};\\n\\nvar topLevelEventsToDispatchConfig = {\\n  topBlur:        eventTypes.blur,\\n  topClick:       eventTypes.click,\\n  topContextMenu: eventTypes.contextMenu,\\n  topCopy:        eventTypes.copy,\\n  topCut:         eventTypes.cut,\\n  topDoubleClick: eventTypes.doubleClick,\\n  topDrag:        eventTypes.drag,\\n  topDragEnd:     eventTypes.dragEnd,\\n  topDragEnter:   eventTypes.dragEnter,\\n  topDragExit:    eventTypes.dragExit,\\n  topDragLeave:   eventTypes.dragLeave,\\n  topDragOver:    eventTypes.dragOver,\\n  topDragStart:   eventTypes.dragStart,\\n  topDrop:        eventTypes.drop,\\n  topError:       eventTypes.error,\\n  topFocus:       eventTypes.focus,\\n  topInput:       eventTypes.input,\\n  topKeyDown:     eventTypes.keyDown,\\n  topKeyPress:    eventTypes.keyPress,\\n  topKeyUp:       eventTypes.keyUp,\\n  topLoad:        eventTypes.load,\\n  topMouseDown:   eventTypes.mouseDown,\\n  topMouseMove:   eventTypes.mouseMove,\\n  topMouseOut:    eventTypes.mouseOut,\\n  topMouseOver:   eventTypes.mouseOver,\\n  topMouseUp:     eventTypes.mouseUp,\\n  topPaste:       eventTypes.paste,\\n  topReset:       eventTypes.reset,\\n  topScroll:      eventTypes.scroll,\\n  topSubmit:      eventTypes.submit,\\n  topTouchCancel: eventTypes.touchCancel,\\n  topTouchEnd:    eventTypes.touchEnd,\\n  topTouchMove:   eventTypes.touchMove,\\n  topTouchStart:  eventTypes.touchStart,\\n  topWheel:       eventTypes.wheel\\n};\\n\\nfor (var topLevelType in topLevelEventsToDispatchConfig) {\\n  topLevelEventsToDispatchConfig[topLevelType].dependencies = [topLevelType];\\n}\\n\\nvar SimpleEventPlugin = {\\n\\n  eventTypes: eventTypes,\\n\\n  /**\\n   * Same as the default implementation, except cancels the event when return\\n   * value is false. This behavior will be disabled in a future release.\\n   *\\n   * @param {object} Event to be dispatched.\\n   * @param {function} Application-level callback.\\n   * @param {string} domID DOM ID to pass to the callback.\\n   */\\n  executeDispatch: function(event, listener, domID) {\\n    var returnValue = EventPluginUtils.executeDispatch(event, listener, domID);\\n\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      typeof returnValue !== 'boolean',\\n      'Returning `false` from an event handler is deprecated and will be ' +\\n      'ignored in a future release. Instead, manually call ' +\\n      'e.stopPropagation() or e.preventDefault(), as appropriate.'\\n    ) : null);\\n\\n    if (returnValue === false) {\\n      event.stopPropagation();\\n      event.preventDefault();\\n    }\\n  },\\n\\n  /**\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native browser event.\\n   * @return {*} An accumulation of synthetic events.\\n   * @see {EventPluginHub.extractEvents}\\n   */\\n  extractEvents: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n    var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];\\n    if (!dispatchConfig) {\\n      return null;\\n    }\\n    var EventConstructor;\\n    switch (topLevelType) {\\n      case topLevelTypes.topInput:\\n      case topLevelTypes.topLoad:\\n      case topLevelTypes.topError:\\n      case topLevelTypes.topReset:\\n      case topLevelTypes.topSubmit:\\n        // HTML Events\\n        // @see http://www.w3.org/TR/html5/index.html#events-0\\n        EventConstructor = SyntheticEvent;\\n        break;\\n      case topLevelTypes.topKeyPress:\\n        // FireFox creates a keypress event for function keys too. This removes\\n        // the unwanted keypress events. Enter is however both printable and\\n        // non-printable. One would expect Tab to be as well (but it isn't).\\n        if (getEventCharCode(nativeEvent) === 0) {\\n          return null;\\n        }\\n        /* falls through */\\n      case topLevelTypes.topKeyDown:\\n      case topLevelTypes.topKeyUp:\\n        EventConstructor = SyntheticKeyboardEvent;\\n        break;\\n      case topLevelTypes.topBlur:\\n      case topLevelTypes.topFocus:\\n        EventConstructor = SyntheticFocusEvent;\\n        break;\\n      case topLevelTypes.topClick:\\n        // Firefox creates a click event on right mouse clicks. This removes the\\n        // unwanted click events.\\n        if (nativeEvent.button === 2) {\\n          return null;\\n        }\\n        /* falls through */\\n      case topLevelTypes.topContextMenu:\\n      case topLevelTypes.topDoubleClick:\\n      case topLevelTypes.topMouseDown:\\n      case topLevelTypes.topMouseMove:\\n      case topLevelTypes.topMouseOut:\\n      case topLevelTypes.topMouseOver:\\n      case topLevelTypes.topMouseUp:\\n        EventConstructor = SyntheticMouseEvent;\\n        break;\\n      case topLevelTypes.topDrag:\\n      case topLevelTypes.topDragEnd:\\n      case topLevelTypes.topDragEnter:\\n      case topLevelTypes.topDragExit:\\n      case topLevelTypes.topDragLeave:\\n      case topLevelTypes.topDragOver:\\n      case topLevelTypes.topDragStart:\\n      case topLevelTypes.topDrop:\\n        EventConstructor = SyntheticDragEvent;\\n        break;\\n      case topLevelTypes.topTouchCancel:\\n      case topLevelTypes.topTouchEnd:\\n      case topLevelTypes.topTouchMove:\\n      case topLevelTypes.topTouchStart:\\n        EventConstructor = SyntheticTouchEvent;\\n        break;\\n      case topLevelTypes.topScroll:\\n        EventConstructor = SyntheticUIEvent;\\n        break;\\n      case topLevelTypes.topWheel:\\n        EventConstructor = SyntheticWheelEvent;\\n        break;\\n      case topLevelTypes.topCopy:\\n      case topLevelTypes.topCut:\\n      case topLevelTypes.topPaste:\\n        EventConstructor = SyntheticClipboardEvent;\\n        break;\\n    }\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      EventConstructor,\\n      'SimpleEventPlugin: Unhandled event type, `%s`.',\\n      topLevelType\\n    ) : invariant(EventConstructor));\\n    var event = EventConstructor.getPooled(\\n      dispatchConfig,\\n      topLevelTargetID,\\n      nativeEvent\\n    );\\n    EventPropagators.accumulateTwoPhaseDispatches(event);\\n    return event;\\n  }\\n\\n};\\n\\nmodule.exports = SimpleEventPlugin;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SimpleEventPlugin.js\\n ** module id = 130\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SimpleEventPlugin.js?\");\n\n/***/ },\n/* 131 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/SyntheticDragEvent.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticDragEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticMouseEvent = __webpack_require__(/*! ./SyntheticMouseEvent */ 96);\\n\\n/**\\n * @interface DragEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar DragEventInterface = {\\n  dataTransfer: null\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);\\n\\nmodule.exports = SyntheticDragEvent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticDragEvent.js\\n ** module id = 131\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticDragEvent.js?\");\n\n/***/ },\n/* 132 */\n/*!************************************************!*\\\n  !*** ./~/react/lib/SyntheticClipboardEvent.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticClipboardEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 81);\\n\\n/**\\n * @interface Event\\n * @see http://www.w3.org/TR/clipboard-apis/\\n */\\nvar ClipboardEventInterface = {\\n  clipboardData: function(event) {\\n    return (\\n      'clipboardData' in event ?\\n        event.clipboardData :\\n        window.clipboardData\\n    );\\n  }\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);\\n\\nmodule.exports = SyntheticClipboardEvent;\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticClipboardEvent.js\\n ** module id = 132\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticClipboardEvent.js?\");\n\n/***/ },\n/* 133 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/SyntheticFocusEvent.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticFocusEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticUIEvent = __webpack_require__(/*! ./SyntheticUIEvent */ 97);\\n\\n/**\\n * @interface FocusEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar FocusEventInterface = {\\n  relatedTarget: null\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);\\n\\nmodule.exports = SyntheticFocusEvent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticFocusEvent.js\\n ** module id = 133\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticFocusEvent.js?\");\n\n/***/ },\n/* 134 */\n/*!***********************************************!*\\\n  !*** ./~/react/lib/SyntheticKeyboardEvent.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticKeyboardEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticUIEvent = __webpack_require__(/*! ./SyntheticUIEvent */ 97);\\n\\nvar getEventCharCode = __webpack_require__(/*! ./getEventCharCode */ 135);\\nvar getEventKey = __webpack_require__(/*! ./getEventKey */ 136);\\nvar getEventModifierState = __webpack_require__(/*! ./getEventModifierState */ 98);\\n\\n/**\\n * @interface KeyboardEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar KeyboardEventInterface = {\\n  key: getEventKey,\\n  location: null,\\n  ctrlKey: null,\\n  shiftKey: null,\\n  altKey: null,\\n  metaKey: null,\\n  repeat: null,\\n  locale: null,\\n  getModifierState: getEventModifierState,\\n  // Legacy Interface\\n  charCode: function(event) {\\n    // `charCode` is the result of a KeyPress event and represents the value of\\n    // the actual printable character.\\n\\n    // KeyPress is deprecated, but its replacement is not yet final and not\\n    // implemented in any major browser. Only KeyPress has charCode.\\n    if (event.type === 'keypress') {\\n      return getEventCharCode(event);\\n    }\\n    return 0;\\n  },\\n  keyCode: function(event) {\\n    // `keyCode` is the result of a KeyDown/Up event and represents the value of\\n    // physical keyboard key.\\n\\n    // The actual meaning of the value depends on the users' keyboard layout\\n    // which cannot be detected. Assuming that it is a US keyboard layout\\n    // provides a surprisingly accurate mapping for US and European users.\\n    // Due to this, it is left to the user to implement at this time.\\n    if (event.type === 'keydown' || event.type === 'keyup') {\\n      return event.keyCode;\\n    }\\n    return 0;\\n  },\\n  which: function(event) {\\n    // `which` is an alias for either `keyCode` or `charCode` depending on the\\n    // type of the event.\\n    if (event.type === 'keypress') {\\n      return getEventCharCode(event);\\n    }\\n    if (event.type === 'keydown' || event.type === 'keyup') {\\n      return event.keyCode;\\n    }\\n    return 0;\\n  }\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);\\n\\nmodule.exports = SyntheticKeyboardEvent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticKeyboardEvent.js\\n ** module id = 134\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticKeyboardEvent.js?\");\n\n/***/ },\n/* 135 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/getEventCharCode.js ***!\n  \\*****************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getEventCharCode\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * `charCode` represents the actual \\\"character code\\\" and is safe to use with\\n * `String.fromCharCode`. As such, only keys that correspond to printable\\n * characters produce a valid `charCode`, the only exception to this is Enter.\\n * The Tab-key is considered non-printable and does not have a `charCode`,\\n * presumably because it does not produce a tab-character in browsers.\\n *\\n * @param {object} nativeEvent Native browser event.\\n * @return {string} Normalized `charCode` property.\\n */\\nfunction getEventCharCode(nativeEvent) {\\n  var charCode;\\n  var keyCode = nativeEvent.keyCode;\\n\\n  if ('charCode' in nativeEvent) {\\n    charCode = nativeEvent.charCode;\\n\\n    // FF does not set `charCode` for the Enter-key, check against `keyCode`.\\n    if (charCode === 0 && keyCode === 13) {\\n      charCode = 13;\\n    }\\n  } else {\\n    // IE8 does not implement `charCode`, but `keyCode` has the correct value.\\n    charCode = keyCode;\\n  }\\n\\n  // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\\n  // Must not discard the (non-)printable Enter-key.\\n  if (charCode >= 32 || charCode === 13) {\\n    return charCode;\\n  }\\n\\n  return 0;\\n}\\n\\nmodule.exports = getEventCharCode;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getEventCharCode.js\\n ** module id = 135\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getEventCharCode.js?\");\n\n/***/ },\n/* 136 */\n/*!************************************!*\\\n  !*** ./~/react/lib/getEventKey.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getEventKey\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar getEventCharCode = __webpack_require__(/*! ./getEventCharCode */ 135);\\n\\n/**\\n * Normalization of deprecated HTML5 `key` values\\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\\n */\\nvar normalizeKey = {\\n  'Esc': 'Escape',\\n  'Spacebar': ' ',\\n  'Left': 'ArrowLeft',\\n  'Up': 'ArrowUp',\\n  'Right': 'ArrowRight',\\n  'Down': 'ArrowDown',\\n  'Del': 'Delete',\\n  'Win': 'OS',\\n  'Menu': 'ContextMenu',\\n  'Apps': 'ContextMenu',\\n  'Scroll': 'ScrollLock',\\n  'MozPrintableKey': 'Unidentified'\\n};\\n\\n/**\\n * Translation from legacy `keyCode` to HTML5 `key`\\n * Only special keys supported, all others depend on keyboard layout or browser\\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\\n */\\nvar translateToKey = {\\n  8: 'Backspace',\\n  9: 'Tab',\\n  12: 'Clear',\\n  13: 'Enter',\\n  16: 'Shift',\\n  17: 'Control',\\n  18: 'Alt',\\n  19: 'Pause',\\n  20: 'CapsLock',\\n  27: 'Escape',\\n  32: ' ',\\n  33: 'PageUp',\\n  34: 'PageDown',\\n  35: 'End',\\n  36: 'Home',\\n  37: 'ArrowLeft',\\n  38: 'ArrowUp',\\n  39: 'ArrowRight',\\n  40: 'ArrowDown',\\n  45: 'Insert',\\n  46: 'Delete',\\n  112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',\\n  118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',\\n  144: 'NumLock',\\n  145: 'ScrollLock',\\n  224: 'Meta'\\n};\\n\\n/**\\n * @param {object} nativeEvent Native browser event.\\n * @return {string} Normalized `key` property.\\n */\\nfunction getEventKey(nativeEvent) {\\n  if (nativeEvent.key) {\\n    // Normalize inconsistent values reported by browsers due to\\n    // implementations of a working draft specification.\\n\\n    // FireFox implements `key` but returns `MozPrintableKey` for all\\n    // printable characters (normalized to `Unidentified`), ignore it.\\n    var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\\n    if (key !== 'Unidentified') {\\n      return key;\\n    }\\n  }\\n\\n  // Browser does not implement `key`, polyfill as much of it as we can.\\n  if (nativeEvent.type === 'keypress') {\\n    var charCode = getEventCharCode(nativeEvent);\\n\\n    // The enter-key is technically both printable and non-printable and can\\n    // thus be captured by `keypress`, no other non-printable key should.\\n    return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\\n  }\\n  if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\\n    // While user keyboard layout determines the actual meaning of each\\n    // `keyCode` value, almost all function keys have a universal value.\\n    return translateToKey[nativeEvent.keyCode] || 'Unidentified';\\n  }\\n  return '';\\n}\\n\\nmodule.exports = getEventKey;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getEventKey.js\\n ** module id = 136\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getEventKey.js?\");\n\n/***/ },\n/* 137 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/SyntheticTouchEvent.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticTouchEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticUIEvent = __webpack_require__(/*! ./SyntheticUIEvent */ 97);\\n\\nvar getEventModifierState = __webpack_require__(/*! ./getEventModifierState */ 98);\\n\\n/**\\n * @interface TouchEvent\\n * @see http://www.w3.org/TR/touch-events/\\n */\\nvar TouchEventInterface = {\\n  touches: null,\\n  targetTouches: null,\\n  changedTouches: null,\\n  altKey: null,\\n  metaKey: null,\\n  ctrlKey: null,\\n  shiftKey: null,\\n  getModifierState: getEventModifierState\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);\\n\\nmodule.exports = SyntheticTouchEvent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticTouchEvent.js\\n ** module id = 137\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticTouchEvent.js?\");\n\n/***/ },\n/* 138 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/SyntheticWheelEvent.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticWheelEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticMouseEvent = __webpack_require__(/*! ./SyntheticMouseEvent */ 96);\\n\\n/**\\n * @interface WheelEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar WheelEventInterface = {\\n  deltaX: function(event) {\\n    return (\\n      'deltaX' in event ? event.deltaX :\\n      // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\\n      'wheelDeltaX' in event ? -event.wheelDeltaX : 0\\n    );\\n  },\\n  deltaY: function(event) {\\n    return (\\n      'deltaY' in event ? event.deltaY :\\n      // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\\n      'wheelDeltaY' in event ? -event.wheelDeltaY :\\n      // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\\n      'wheelDelta' in event ? -event.wheelDelta : 0\\n    );\\n  },\\n  deltaZ: null,\\n\\n  // Browsers without \\\"deltaMode\\\" is reporting in raw wheel delta where one\\n  // notch on the scroll is always +/- 120, roughly equivalent to pixels.\\n  // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\\n  // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\\n  deltaMode: null\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticMouseEvent}\\n */\\nfunction SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);\\n\\nmodule.exports = SyntheticWheelEvent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticWheelEvent.js\\n ** module id = 138\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticWheelEvent.js?\");\n\n/***/ },\n/* 139 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/SVGDOMPropertyConfig.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SVGDOMPropertyConfig\\n */\\n\\n/*jslint bitwise: true*/\\n\\n\\\"use strict\\\";\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 8);\\n\\nvar MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;\\n\\nvar SVGDOMPropertyConfig = {\\n  Properties: {\\n    cx: MUST_USE_ATTRIBUTE,\\n    cy: MUST_USE_ATTRIBUTE,\\n    d: MUST_USE_ATTRIBUTE,\\n    dx: MUST_USE_ATTRIBUTE,\\n    dy: MUST_USE_ATTRIBUTE,\\n    fill: MUST_USE_ATTRIBUTE,\\n    fillOpacity: MUST_USE_ATTRIBUTE,\\n    fontFamily: MUST_USE_ATTRIBUTE,\\n    fontSize: MUST_USE_ATTRIBUTE,\\n    fx: MUST_USE_ATTRIBUTE,\\n    fy: MUST_USE_ATTRIBUTE,\\n    gradientTransform: MUST_USE_ATTRIBUTE,\\n    gradientUnits: MUST_USE_ATTRIBUTE,\\n    markerEnd: MUST_USE_ATTRIBUTE,\\n    markerMid: MUST_USE_ATTRIBUTE,\\n    markerStart: MUST_USE_ATTRIBUTE,\\n    offset: MUST_USE_ATTRIBUTE,\\n    opacity: MUST_USE_ATTRIBUTE,\\n    patternContentUnits: MUST_USE_ATTRIBUTE,\\n    patternUnits: MUST_USE_ATTRIBUTE,\\n    points: MUST_USE_ATTRIBUTE,\\n    preserveAspectRatio: MUST_USE_ATTRIBUTE,\\n    r: MUST_USE_ATTRIBUTE,\\n    rx: MUST_USE_ATTRIBUTE,\\n    ry: MUST_USE_ATTRIBUTE,\\n    spreadMethod: MUST_USE_ATTRIBUTE,\\n    stopColor: MUST_USE_ATTRIBUTE,\\n    stopOpacity: MUST_USE_ATTRIBUTE,\\n    stroke: MUST_USE_ATTRIBUTE,\\n    strokeDasharray: MUST_USE_ATTRIBUTE,\\n    strokeLinecap: MUST_USE_ATTRIBUTE,\\n    strokeOpacity: MUST_USE_ATTRIBUTE,\\n    strokeWidth: MUST_USE_ATTRIBUTE,\\n    textAnchor: MUST_USE_ATTRIBUTE,\\n    transform: MUST_USE_ATTRIBUTE,\\n    version: MUST_USE_ATTRIBUTE,\\n    viewBox: MUST_USE_ATTRIBUTE,\\n    x1: MUST_USE_ATTRIBUTE,\\n    x2: MUST_USE_ATTRIBUTE,\\n    x: MUST_USE_ATTRIBUTE,\\n    y1: MUST_USE_ATTRIBUTE,\\n    y2: MUST_USE_ATTRIBUTE,\\n    y: MUST_USE_ATTRIBUTE\\n  },\\n  DOMAttributeNames: {\\n    fillOpacity: 'fill-opacity',\\n    fontFamily: 'font-family',\\n    fontSize: 'font-size',\\n    gradientTransform: 'gradientTransform',\\n    gradientUnits: 'gradientUnits',\\n    markerEnd: 'marker-end',\\n    markerMid: 'marker-mid',\\n    markerStart: 'marker-start',\\n    patternContentUnits: 'patternContentUnits',\\n    patternUnits: 'patternUnits',\\n    preserveAspectRatio: 'preserveAspectRatio',\\n    spreadMethod: 'spreadMethod',\\n    stopColor: 'stop-color',\\n    stopOpacity: 'stop-opacity',\\n    strokeDasharray: 'stroke-dasharray',\\n    strokeLinecap: 'stroke-linecap',\\n    strokeOpacity: 'stroke-opacity',\\n    strokeWidth: 'stroke-width',\\n    textAnchor: 'text-anchor',\\n    viewBox: 'viewBox'\\n  }\\n};\\n\\nmodule.exports = SVGDOMPropertyConfig;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SVGDOMPropertyConfig.js\\n ** module id = 139\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SVGDOMPropertyConfig.js?\");\n\n/***/ },\n/* 140 */\n/*!************************************************!*\\\n  !*** ./~/react/lib/createFullPageComponent.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule createFullPageComponent\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\n// Defeat circular references by requiring this directly.\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Create a component that will throw an exception when unmounted.\\n *\\n * Components like <html> <head> and <body> can't be removed or added\\n * easily in a cross-browser way, however it's valuable to be able to\\n * take advantage of React's reconciliation for styling and <title>\\n * management. So we just document it and throw in dangerous cases.\\n *\\n * @param {string} tag The tag to wrap\\n * @return {function} convenience constructor of new component\\n */\\nfunction createFullPageComponent(tag) {\\n  var elementFactory = ReactElement.createFactory(tag);\\n\\n  var FullPageComponent = ReactCompositeComponent.createClass({\\n    displayName: 'ReactFullPageComponent' + tag,\\n\\n    componentWillUnmount: function() {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        false,\\n        '%s tried to unmount. Because of cross-browser quirks it is ' +\\n        'impossible to unmount some top-level components (eg <html>, <head>, ' +\\n        'and <body>) reliably and efficiently. To fix this, have a single ' +\\n        'top-level component that never unmounts render these elements.',\\n        this.constructor.displayName\\n      ) : invariant(false));\\n    },\\n\\n    render: function() {\\n      return elementFactory(this.props);\\n    }\\n  });\\n\\n  return FullPageComponent;\\n}\\n\\nmodule.exports = createFullPageComponent;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/createFullPageComponent.js\\n ** module id = 140\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/createFullPageComponent.js?\");\n\n/***/ },\n/* 141 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/ReactDefaultPerf.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDefaultPerf\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 8);\\nvar ReactDefaultPerfAnalysis = __webpack_require__(/*! ./ReactDefaultPerfAnalysis */ 142);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\n\\nvar performanceNow = __webpack_require__(/*! ./performanceNow */ 143);\\n\\nfunction roundFloat(val) {\\n  return Math.floor(val * 100) / 100;\\n}\\n\\nfunction addValue(obj, key, val) {\\n  obj[key] = (obj[key] || 0) + val;\\n}\\n\\nvar ReactDefaultPerf = {\\n  _allMeasurements: [], // last item in the list is the current one\\n  _mountStack: [0],\\n  _injected: false,\\n\\n  start: function() {\\n    if (!ReactDefaultPerf._injected) {\\n      ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure);\\n    }\\n\\n    ReactDefaultPerf._allMeasurements.length = 0;\\n    ReactPerf.enableMeasure = true;\\n  },\\n\\n  stop: function() {\\n    ReactPerf.enableMeasure = false;\\n  },\\n\\n  getLastMeasurements: function() {\\n    return ReactDefaultPerf._allMeasurements;\\n  },\\n\\n  printExclusive: function(measurements) {\\n    measurements = measurements || ReactDefaultPerf._allMeasurements;\\n    var summary = ReactDefaultPerfAnalysis.getExclusiveSummary(measurements);\\n    console.table(summary.map(function(item) {\\n      return {\\n        'Component class name': item.componentName,\\n        'Total inclusive time (ms)': roundFloat(item.inclusive),\\n        'Exclusive mount time (ms)': roundFloat(item.exclusive),\\n        'Exclusive render time (ms)': roundFloat(item.render),\\n        'Mount time per instance (ms)': roundFloat(item.exclusive / item.count),\\n        'Render time per instance (ms)': roundFloat(item.render / item.count),\\n        'Instances': item.count\\n      };\\n    }));\\n    // TODO: ReactDefaultPerfAnalysis.getTotalTime() does not return the correct\\n    // number.\\n  },\\n\\n  printInclusive: function(measurements) {\\n    measurements = measurements || ReactDefaultPerf._allMeasurements;\\n    var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements);\\n    console.table(summary.map(function(item) {\\n      return {\\n        'Owner > component': item.componentName,\\n        'Inclusive time (ms)': roundFloat(item.time),\\n        'Instances': item.count\\n      };\\n    }));\\n    console.log(\\n      'Total time:',\\n      ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms'\\n    );\\n  },\\n\\n  getMeasurementsSummaryMap: function(measurements) {\\n    var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(\\n      measurements,\\n      true\\n    );\\n    return summary.map(function(item) {\\n      return {\\n        'Owner > component': item.componentName,\\n        'Wasted time (ms)': item.time,\\n        'Instances': item.count\\n      };\\n    });\\n  },\\n\\n  printWasted: function(measurements) {\\n    measurements = measurements || ReactDefaultPerf._allMeasurements;\\n    console.table(ReactDefaultPerf.getMeasurementsSummaryMap(measurements));\\n    console.log(\\n      'Total time:',\\n      ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms'\\n    );\\n  },\\n\\n  printDOM: function(measurements) {\\n    measurements = measurements || ReactDefaultPerf._allMeasurements;\\n    var summary = ReactDefaultPerfAnalysis.getDOMSummary(measurements);\\n    console.table(summary.map(function(item) {\\n      var result = {};\\n      result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id;\\n      result['type'] = item.type;\\n      result['args'] = JSON.stringify(item.args);\\n      return result;\\n    }));\\n    console.log(\\n      'Total time:',\\n      ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms'\\n    );\\n  },\\n\\n  _recordWrite: function(id, fnName, totalTime, args) {\\n    // TODO: totalTime isn't that useful since it doesn't count paints/reflows\\n    var writes =\\n      ReactDefaultPerf\\n        ._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1]\\n        .writes;\\n    writes[id] = writes[id] || [];\\n    writes[id].push({\\n      type: fnName,\\n      time: totalTime,\\n      args: args\\n    });\\n  },\\n\\n  measure: function(moduleName, fnName, func) {\\n    return function() {for (var args=[],$__0=0,$__1=arguments.length;$__0<$__1;$__0++) args.push(arguments[$__0]);\\n      var totalTime;\\n      var rv;\\n      var start;\\n\\n      if (fnName === '_renderNewRootComponent' ||\\n          fnName === 'flushBatchedUpdates') {\\n        // A \\\"measurement\\\" is a set of metrics recorded for each flush. We want\\n        // to group the metrics for a given flush together so we can look at the\\n        // components that rendered and the DOM operations that actually\\n        // happened to determine the amount of \\\"wasted work\\\" performed.\\n        ReactDefaultPerf._allMeasurements.push({\\n          exclusive: {},\\n          inclusive: {},\\n          render: {},\\n          counts: {},\\n          writes: {},\\n          displayNames: {},\\n          totalTime: 0\\n        });\\n        start = performanceNow();\\n        rv = func.apply(this, args);\\n        ReactDefaultPerf._allMeasurements[\\n          ReactDefaultPerf._allMeasurements.length - 1\\n        ].totalTime = performanceNow() - start;\\n        return rv;\\n      } else if (moduleName === 'ReactDOMIDOperations' ||\\n        moduleName === 'ReactComponentBrowserEnvironment') {\\n        start = performanceNow();\\n        rv = func.apply(this, args);\\n        totalTime = performanceNow() - start;\\n\\n        if (fnName === 'mountImageIntoNode') {\\n          var mountID = ReactMount.getID(args[1]);\\n          ReactDefaultPerf._recordWrite(mountID, fnName, totalTime, args[0]);\\n        } else if (fnName === 'dangerouslyProcessChildrenUpdates') {\\n          // special format\\n          args[0].forEach(function(update) {\\n            var writeArgs = {};\\n            if (update.fromIndex !== null) {\\n              writeArgs.fromIndex = update.fromIndex;\\n            }\\n            if (update.toIndex !== null) {\\n              writeArgs.toIndex = update.toIndex;\\n            }\\n            if (update.textContent !== null) {\\n              writeArgs.textContent = update.textContent;\\n            }\\n            if (update.markupIndex !== null) {\\n              writeArgs.markup = args[1][update.markupIndex];\\n            }\\n            ReactDefaultPerf._recordWrite(\\n              update.parentID,\\n              update.type,\\n              totalTime,\\n              writeArgs\\n            );\\n          });\\n        } else {\\n          // basic format\\n          ReactDefaultPerf._recordWrite(\\n            args[0],\\n            fnName,\\n            totalTime,\\n            Array.prototype.slice.call(args, 1)\\n          );\\n        }\\n        return rv;\\n      } else if (moduleName === 'ReactCompositeComponent' && (\\n        fnName === 'mountComponent' ||\\n        fnName === 'updateComponent' || // TODO: receiveComponent()?\\n        fnName === '_renderValidatedComponent')) {\\n\\n        var rootNodeID = fnName === 'mountComponent' ?\\n          args[0] :\\n          this._rootNodeID;\\n        var isRender = fnName === '_renderValidatedComponent';\\n        var isMount = fnName === 'mountComponent';\\n\\n        var mountStack = ReactDefaultPerf._mountStack;\\n        var entry = ReactDefaultPerf._allMeasurements[\\n          ReactDefaultPerf._allMeasurements.length - 1\\n        ];\\n\\n        if (isRender) {\\n          addValue(entry.counts, rootNodeID, 1);\\n        } else if (isMount) {\\n          mountStack.push(0);\\n        }\\n\\n        start = performanceNow();\\n        rv = func.apply(this, args);\\n        totalTime = performanceNow() - start;\\n\\n        if (isRender) {\\n          addValue(entry.render, rootNodeID, totalTime);\\n        } else if (isMount) {\\n          var subMountTime = mountStack.pop();\\n          mountStack[mountStack.length - 1] += totalTime;\\n          addValue(entry.exclusive, rootNodeID, totalTime - subMountTime);\\n          addValue(entry.inclusive, rootNodeID, totalTime);\\n        } else {\\n          addValue(entry.inclusive, rootNodeID, totalTime);\\n        }\\n\\n        entry.displayNames[rootNodeID] = {\\n          current: this.constructor.displayName,\\n          owner: this._owner ? this._owner.constructor.displayName : '<root>'\\n        };\\n\\n        return rv;\\n      } else {\\n        return func.apply(this, args);\\n      }\\n    };\\n  }\\n};\\n\\nmodule.exports = ReactDefaultPerf;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDefaultPerf.js\\n ** module id = 141\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDefaultPerf.js?\");\n\n/***/ },\n/* 142 */\n/*!*************************************************!*\\\n  !*** ./~/react/lib/ReactDefaultPerfAnalysis.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDefaultPerfAnalysis\\n */\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\n\\n// Don't try to save users less than 1.2ms (a number I made up)\\nvar DONT_CARE_THRESHOLD = 1.2;\\nvar DOM_OPERATION_TYPES = {\\n  'mountImageIntoNode': 'set innerHTML',\\n  INSERT_MARKUP: 'set innerHTML',\\n  MOVE_EXISTING: 'move',\\n  REMOVE_NODE: 'remove',\\n  TEXT_CONTENT: 'set textContent',\\n  'updatePropertyByID': 'update attribute',\\n  'deletePropertyByID': 'delete attribute',\\n  'updateStylesByID': 'update styles',\\n  'updateInnerHTMLByID': 'set innerHTML',\\n  'dangerouslyReplaceNodeWithMarkupByID': 'replace'\\n};\\n\\nfunction getTotalTime(measurements) {\\n  // TODO: return number of DOM ops? could be misleading.\\n  // TODO: measure dropped frames after reconcile?\\n  // TODO: log total time of each reconcile and the top-level component\\n  // class that triggered it.\\n  var totalTime = 0;\\n  for (var i = 0; i < measurements.length; i++) {\\n    var measurement = measurements[i];\\n    totalTime += measurement.totalTime;\\n  }\\n  return totalTime;\\n}\\n\\nfunction getDOMSummary(measurements) {\\n  var items = [];\\n  for (var i = 0; i < measurements.length; i++) {\\n    var measurement = measurements[i];\\n    var id;\\n\\n    for (id in measurement.writes) {\\n      measurement.writes[id].forEach(function(write) {\\n        items.push({\\n          id: id,\\n          type: DOM_OPERATION_TYPES[write.type] || write.type,\\n          args: write.args\\n        });\\n      });\\n    }\\n  }\\n  return items;\\n}\\n\\nfunction getExclusiveSummary(measurements) {\\n  var candidates = {};\\n  var displayName;\\n\\n  for (var i = 0; i < measurements.length; i++) {\\n    var measurement = measurements[i];\\n    var allIDs = assign(\\n      {},\\n      measurement.exclusive,\\n      measurement.inclusive\\n    );\\n\\n    for (var id in allIDs) {\\n      displayName = measurement.displayNames[id].current;\\n\\n      candidates[displayName] = candidates[displayName] || {\\n        componentName: displayName,\\n        inclusive: 0,\\n        exclusive: 0,\\n        render: 0,\\n        count: 0\\n      };\\n      if (measurement.render[id]) {\\n        candidates[displayName].render += measurement.render[id];\\n      }\\n      if (measurement.exclusive[id]) {\\n        candidates[displayName].exclusive += measurement.exclusive[id];\\n      }\\n      if (measurement.inclusive[id]) {\\n        candidates[displayName].inclusive += measurement.inclusive[id];\\n      }\\n      if (measurement.counts[id]) {\\n        candidates[displayName].count += measurement.counts[id];\\n      }\\n    }\\n  }\\n\\n  // Now make a sorted array with the results.\\n  var arr = [];\\n  for (displayName in candidates) {\\n    if (candidates[displayName].exclusive >= DONT_CARE_THRESHOLD) {\\n      arr.push(candidates[displayName]);\\n    }\\n  }\\n\\n  arr.sort(function(a, b) {\\n    return b.exclusive - a.exclusive;\\n  });\\n\\n  return arr;\\n}\\n\\nfunction getInclusiveSummary(measurements, onlyClean) {\\n  var candidates = {};\\n  var inclusiveKey;\\n\\n  for (var i = 0; i < measurements.length; i++) {\\n    var measurement = measurements[i];\\n    var allIDs = assign(\\n      {},\\n      measurement.exclusive,\\n      measurement.inclusive\\n    );\\n    var cleanComponents;\\n\\n    if (onlyClean) {\\n      cleanComponents = getUnchangedComponents(measurement);\\n    }\\n\\n    for (var id in allIDs) {\\n      if (onlyClean && !cleanComponents[id]) {\\n        continue;\\n      }\\n\\n      var displayName = measurement.displayNames[id];\\n\\n      // Inclusive time is not useful for many components without knowing where\\n      // they are instantiated. So we aggregate inclusive time with both the\\n      // owner and current displayName as the key.\\n      inclusiveKey = displayName.owner + ' > ' + displayName.current;\\n\\n      candidates[inclusiveKey] = candidates[inclusiveKey] || {\\n        componentName: inclusiveKey,\\n        time: 0,\\n        count: 0\\n      };\\n\\n      if (measurement.inclusive[id]) {\\n        candidates[inclusiveKey].time += measurement.inclusive[id];\\n      }\\n      if (measurement.counts[id]) {\\n        candidates[inclusiveKey].count += measurement.counts[id];\\n      }\\n    }\\n  }\\n\\n  // Now make a sorted array with the results.\\n  var arr = [];\\n  for (inclusiveKey in candidates) {\\n    if (candidates[inclusiveKey].time >= DONT_CARE_THRESHOLD) {\\n      arr.push(candidates[inclusiveKey]);\\n    }\\n  }\\n\\n  arr.sort(function(a, b) {\\n    return b.time - a.time;\\n  });\\n\\n  return arr;\\n}\\n\\nfunction getUnchangedComponents(measurement) {\\n  // For a given reconcile, look at which components did not actually\\n  // render anything to the DOM and return a mapping of their ID to\\n  // the amount of time it took to render the entire subtree.\\n  var cleanComponents = {};\\n  var dirtyLeafIDs = Object.keys(measurement.writes);\\n  var allIDs = assign({}, measurement.exclusive, measurement.inclusive);\\n\\n  for (var id in allIDs) {\\n    var isDirty = false;\\n    // For each component that rendered, see if a component that triggered\\n    // a DOM op is in its subtree.\\n    for (var i = 0; i < dirtyLeafIDs.length; i++) {\\n      if (dirtyLeafIDs[i].indexOf(id) === 0) {\\n        isDirty = true;\\n        break;\\n      }\\n    }\\n    if (!isDirty && measurement.counts[id] > 0) {\\n      cleanComponents[id] = true;\\n    }\\n  }\\n  return cleanComponents;\\n}\\n\\nvar ReactDefaultPerfAnalysis = {\\n  getExclusiveSummary: getExclusiveSummary,\\n  getInclusiveSummary: getInclusiveSummary,\\n  getDOMSummary: getDOMSummary,\\n  getTotalTime: getTotalTime\\n};\\n\\nmodule.exports = ReactDefaultPerfAnalysis;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDefaultPerfAnalysis.js\\n ** module id = 142\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDefaultPerfAnalysis.js?\");\n\n/***/ },\n/* 143 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/performanceNow.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule performanceNow\\n * @typechecks\\n */\\n\\nvar performance = __webpack_require__(/*! ./performance */ 144);\\n\\n/**\\n * Detect if we can use `window.performance.now()` and gracefully fallback to\\n * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now\\n * because of Facebook's testing infrastructure.\\n */\\nif (!performance || !performance.now) {\\n  performance = Date;\\n}\\n\\nvar performanceNow = performance.now.bind(performance);\\n\\nmodule.exports = performanceNow;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/performanceNow.js\\n ** module id = 143\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/performanceNow.js?\");\n\n/***/ },\n/* 144 */\n/*!************************************!*\\\n  !*** ./~/react/lib/performance.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule performance\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar performance;\\n\\nif (ExecutionEnvironment.canUseDOM) {\\n  performance =\\n    window.performance ||\\n    window.msPerformance ||\\n    window.webkitPerformance;\\n}\\n\\nmodule.exports = performance || {};\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/performance.js\\n ** module id = 144\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/performance.js?\");\n\n/***/ },\n/* 145 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ReactServerRendering.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @typechecks static-only\\n * @providesModule ReactServerRendering\\n */\\n\\\"use strict\\\";\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactInstanceHandles = __webpack_require__(/*! ./ReactInstanceHandles */ 4);\\nvar ReactMarkupChecksum = __webpack_require__(/*! ./ReactMarkupChecksum */ 112);\\nvar ReactServerRenderingTransaction =\\n  __webpack_require__(/*! ./ReactServerRenderingTransaction */ 146);\\n\\nvar instantiateReactComponent = __webpack_require__(/*! ./instantiateReactComponent */ 40);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * @param {ReactElement} element\\n * @return {string} the HTML markup\\n */\\nfunction renderToString(element) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    ReactElement.isValidElement(element),\\n    'renderToString(): You must pass a valid ReactElement.'\\n  ) : invariant(ReactElement.isValidElement(element)));\\n\\n  var transaction;\\n  try {\\n    var id = ReactInstanceHandles.createReactRootID();\\n    transaction = ReactServerRenderingTransaction.getPooled(false);\\n\\n    return transaction.perform(function() {\\n      var componentInstance = instantiateReactComponent(element, null);\\n      var markup = componentInstance.mountComponent(id, transaction, 0);\\n      return ReactMarkupChecksum.addChecksumToMarkup(markup);\\n    }, null);\\n  } finally {\\n    ReactServerRenderingTransaction.release(transaction);\\n  }\\n}\\n\\n/**\\n * @param {ReactElement} element\\n * @return {string} the HTML markup, without the extra React ID and checksum\\n * (for generating static pages)\\n */\\nfunction renderToStaticMarkup(element) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    ReactElement.isValidElement(element),\\n    'renderToStaticMarkup(): You must pass a valid ReactElement.'\\n  ) : invariant(ReactElement.isValidElement(element)));\\n\\n  var transaction;\\n  try {\\n    var id = ReactInstanceHandles.createReactRootID();\\n    transaction = ReactServerRenderingTransaction.getPooled(true);\\n\\n    return transaction.perform(function() {\\n      var componentInstance = instantiateReactComponent(element, null);\\n      return componentInstance.mountComponent(id, transaction, 0);\\n    }, null);\\n  } finally {\\n    ReactServerRenderingTransaction.release(transaction);\\n  }\\n}\\n\\nmodule.exports = {\\n  renderToString: renderToString,\\n  renderToStaticMarkup: renderToStaticMarkup\\n};\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactServerRendering.js\\n ** module id = 145\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactServerRendering.js?\");\n\n/***/ },\n/* 146 */\n/*!********************************************************!*\\\n  !*** ./~/react/lib/ReactServerRenderingTransaction.js ***!\n  \\********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactServerRenderingTransaction\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 17);\\nvar CallbackQueue = __webpack_require__(/*! ./CallbackQueue */ 28);\\nvar ReactPutListenerQueue = __webpack_require__(/*! ./ReactPutListenerQueue */ 103);\\nvar Transaction = __webpack_require__(/*! ./Transaction */ 27);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\n\\n/**\\n * Provides a `CallbackQueue` queue for collecting `onDOMReady` callbacks\\n * during the performing of the transaction.\\n */\\nvar ON_DOM_READY_QUEUEING = {\\n  /**\\n   * Initializes the internal `onDOMReady` queue.\\n   */\\n  initialize: function() {\\n    this.reactMountReady.reset();\\n  },\\n\\n  close: emptyFunction\\n};\\n\\nvar PUT_LISTENER_QUEUEING = {\\n  initialize: function() {\\n    this.putListenerQueue.reset();\\n  },\\n\\n  close: emptyFunction\\n};\\n\\n/**\\n * Executed within the scope of the `Transaction` instance. Consider these as\\n * being member methods, but with an implied ordering while being isolated from\\n * each other.\\n */\\nvar TRANSACTION_WRAPPERS = [\\n  PUT_LISTENER_QUEUEING,\\n  ON_DOM_READY_QUEUEING\\n];\\n\\n/**\\n * @class ReactServerRenderingTransaction\\n * @param {boolean} renderToStaticMarkup\\n */\\nfunction ReactServerRenderingTransaction(renderToStaticMarkup) {\\n  this.reinitializeTransaction();\\n  this.renderToStaticMarkup = renderToStaticMarkup;\\n  this.reactMountReady = CallbackQueue.getPooled(null);\\n  this.putListenerQueue = ReactPutListenerQueue.getPooled();\\n}\\n\\nvar Mixin = {\\n  /**\\n   * @see Transaction\\n   * @abstract\\n   * @final\\n   * @return {array} Empty list of operation wrap proceedures.\\n   */\\n  getTransactionWrappers: function() {\\n    return TRANSACTION_WRAPPERS;\\n  },\\n\\n  /**\\n   * @return {object} The queue to collect `onDOMReady` callbacks with.\\n   */\\n  getReactMountReady: function() {\\n    return this.reactMountReady;\\n  },\\n\\n  getPutListenerQueue: function() {\\n    return this.putListenerQueue;\\n  },\\n\\n  /**\\n   * `PooledClass` looks for this, and will invoke this before allowing this\\n   * instance to be resused.\\n   */\\n  destructor: function() {\\n    CallbackQueue.release(this.reactMountReady);\\n    this.reactMountReady = null;\\n\\n    ReactPutListenerQueue.release(this.putListenerQueue);\\n    this.putListenerQueue = null;\\n  }\\n};\\n\\n\\nassign(\\n  ReactServerRenderingTransaction.prototype,\\n  Transaction.Mixin,\\n  Mixin\\n);\\n\\nPooledClass.addPoolingTo(ReactServerRenderingTransaction);\\n\\nmodule.exports = ReactServerRenderingTransaction;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactServerRenderingTransaction.js\\n ** module id = 146\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactServerRenderingTransaction.js?\");\n\n/***/ },\n/* 147 */\n/*!**********************************!*\\\n  !*** ./~/react/lib/onlyChild.js ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule onlyChild\\n */\\n\\\"use strict\\\";\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Returns the first child in a collection of children and verifies that there\\n * is only one child in the collection. The current implementation of this\\n * function assumes that a single child gets passed without a wrapper, but the\\n * purpose of this helper function is to abstract away the particular structure\\n * of children.\\n *\\n * @param {?object} children Child collection structure.\\n * @return {ReactComponent} The first and only `ReactComponent` contained in the\\n * structure.\\n */\\nfunction onlyChild(children) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    ReactElement.isValidElement(children),\\n    'onlyChild must be passed a children with exactly one child.'\\n  ) : invariant(ReactElement.isValidElement(children)));\\n  return children;\\n}\\n\\nmodule.exports = onlyChild;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/onlyChild.js\\n ** module id = 147\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/onlyChild.js?\");\n\n/***/ },\n/* 148 */\n/*!***************************!*\\\n  !*** ./~/lodash/index.js ***!\n  \\***************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/**\\n * @license\\n * lodash 3.10.0 (Custom Build) <https://lodash.com/>\\n * Build: `lodash modern -d -o ./index.js`\\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\\n * Available under MIT license <https://lodash.com/license>\\n */\\n;(function() {\\n\\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\\n  var undefined;\\n\\n  /** Used as the semantic version number. */\\n  var VERSION = '3.10.0';\\n\\n  /** Used to compose bitmasks for wrapper metadata. */\\n  var BIND_FLAG = 1,\\n      BIND_KEY_FLAG = 2,\\n      CURRY_BOUND_FLAG = 4,\\n      CURRY_FLAG = 8,\\n      CURRY_RIGHT_FLAG = 16,\\n      PARTIAL_FLAG = 32,\\n      PARTIAL_RIGHT_FLAG = 64,\\n      ARY_FLAG = 128,\\n      REARG_FLAG = 256;\\n\\n  /** Used as default options for `_.trunc`. */\\n  var DEFAULT_TRUNC_LENGTH = 30,\\n      DEFAULT_TRUNC_OMISSION = '...';\\n\\n  /** Used to detect when a function becomes hot. */\\n  var HOT_COUNT = 150,\\n      HOT_SPAN = 16;\\n\\n  /** Used as the size to enable large array optimizations. */\\n  var LARGE_ARRAY_SIZE = 200;\\n\\n  /** Used to indicate the type of lazy iteratees. */\\n  var LAZY_FILTER_FLAG = 1,\\n      LAZY_MAP_FLAG = 2;\\n\\n  /** Used as the `TypeError` message for \\\"Functions\\\" methods. */\\n  var FUNC_ERROR_TEXT = 'Expected a function';\\n\\n  /** Used as the internal argument placeholder. */\\n  var PLACEHOLDER = '__lodash_placeholder__';\\n\\n  /** `Object#toString` result references. */\\n  var argsTag = '[object Arguments]',\\n      arrayTag = '[object Array]',\\n      boolTag = '[object Boolean]',\\n      dateTag = '[object Date]',\\n      errorTag = '[object Error]',\\n      funcTag = '[object Function]',\\n      mapTag = '[object Map]',\\n      numberTag = '[object Number]',\\n      objectTag = '[object Object]',\\n      regexpTag = '[object RegExp]',\\n      setTag = '[object Set]',\\n      stringTag = '[object String]',\\n      weakMapTag = '[object WeakMap]';\\n\\n  var arrayBufferTag = '[object ArrayBuffer]',\\n      float32Tag = '[object Float32Array]',\\n      float64Tag = '[object Float64Array]',\\n      int8Tag = '[object Int8Array]',\\n      int16Tag = '[object Int16Array]',\\n      int32Tag = '[object Int32Array]',\\n      uint8Tag = '[object Uint8Array]',\\n      uint8ClampedTag = '[object Uint8ClampedArray]',\\n      uint16Tag = '[object Uint16Array]',\\n      uint32Tag = '[object Uint32Array]';\\n\\n  /** Used to match empty string literals in compiled template source. */\\n  var reEmptyStringLeading = /\\\\b__p \\\\+= '';/g,\\n      reEmptyStringMiddle = /\\\\b(__p \\\\+=) '' \\\\+/g,\\n      reEmptyStringTrailing = /(__e\\\\(.*?\\\\)|\\\\b__t\\\\)) \\\\+\\\\n'';/g;\\n\\n  /** Used to match HTML entities and HTML characters. */\\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g,\\n      reUnescapedHtml = /[&<>\\\"'`]/g,\\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\\n\\n  /** Used to match template delimiters. */\\n  var reEscape = /<%-([\\\\s\\\\S]+?)%>/g,\\n      reEvaluate = /<%([\\\\s\\\\S]+?)%>/g,\\n      reInterpolate = /<%=([\\\\s\\\\S]+?)%>/g;\\n\\n  /** Used to match property names within property paths. */\\n  var reIsDeepProp = /\\\\.|\\\\[(?:[^[\\\\]]*|([\\\"'])(?:(?!\\\\1)[^\\\\n\\\\\\\\]|\\\\\\\\.)*?\\\\1)\\\\]/,\\n      reIsPlainProp = /^\\\\w*$/,\\n      rePropName = /[^.[\\\\]]+|\\\\[(?:(-?\\\\d+(?:\\\\.\\\\d+)?)|([\\\"'])((?:(?!\\\\2)[^\\\\n\\\\\\\\]|\\\\\\\\.)*?)\\\\2)\\\\]/g;\\n\\n  /**\\n   * Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns)\\n   * and those outlined by [`EscapeRegExpPattern`](http://ecma-international.org/ecma-262/6.0/#sec-escaperegexppattern).\\n   */\\n  var reRegExpChars = /^[:!,]|[\\\\\\\\^$.*+?()[\\\\]{}|\\\\/]|(^[0-9a-fA-Fnrtuvx])|([\\\\n\\\\r\\\\u2028\\\\u2029])/g,\\n      reHasRegExpChars = RegExp(reRegExpChars.source);\\n\\n  /** Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). */\\n  var reComboMark = /[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23]/g;\\n\\n  /** Used to match backslashes in property paths. */\\n  var reEscapeChar = /\\\\\\\\(\\\\\\\\)?/g;\\n\\n  /** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */\\n  var reEsTemplate = /\\\\$\\\\{([^\\\\\\\\}]*(?:\\\\\\\\.[^\\\\\\\\}]*)*)\\\\}/g;\\n\\n  /** Used to match `RegExp` flags from their coerced string values. */\\n  var reFlags = /\\\\w*$/;\\n\\n  /** Used to detect hexadecimal string values. */\\n  var reHasHexPrefix = /^0[xX]/;\\n\\n  /** Used to detect host constructors (Safari > 5). */\\n  var reIsHostCtor = /^\\\\[object .+?Constructor\\\\]$/;\\n\\n  /** Used to detect unsigned integer values. */\\n  var reIsUint = /^\\\\d+$/;\\n\\n  /** Used to match latin-1 supplementary letters (excluding mathematical operators). */\\n  var reLatin1 = /[\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]/g;\\n\\n  /** Used to ensure capturing order of template delimiters. */\\n  var reNoMatch = /($^)/;\\n\\n  /** Used to match unescaped characters in compiled string literals. */\\n  var reUnescapedString = /['\\\\n\\\\r\\\\u2028\\\\u2029\\\\\\\\]/g;\\n\\n  /** Used to match words to create compound words. */\\n  var reWords = (function() {\\n    var upper = '[A-Z\\\\\\\\xc0-\\\\\\\\xd6\\\\\\\\xd8-\\\\\\\\xde]',\\n        lower = '[a-z\\\\\\\\xdf-\\\\\\\\xf6\\\\\\\\xf8-\\\\\\\\xff]+';\\n\\n    return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g');\\n  }());\\n\\n  /** Used to assign default `context` object properties. */\\n  var contextProps = [\\n    'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array',\\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number',\\n    'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite',\\n    'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array',\\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap'\\n  ];\\n\\n  /** Used to make template sourceURLs easier to identify. */\\n  var templateCounter = -1;\\n\\n  /** Used to identify `toStringTag` values of typed arrays. */\\n  var typedArrayTags = {};\\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\\n  typedArrayTags[uint32Tag] = true;\\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\\n  typedArrayTags[dateTag] = typedArrayTags[errorTag] =\\n  typedArrayTags[funcTag] = typedArrayTags[mapTag] =\\n  typedArrayTags[numberTag] = typedArrayTags[objectTag] =\\n  typedArrayTags[regexpTag] = typedArrayTags[setTag] =\\n  typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\\n\\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\\n  var cloneableTags = {};\\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\\n  cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =\\n  cloneableTags[dateTag] = cloneableTags[float32Tag] =\\n  cloneableTags[float64Tag] = cloneableTags[int8Tag] =\\n  cloneableTags[int16Tag] = cloneableTags[int32Tag] =\\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\\n  cloneableTags[regexpTag] = cloneableTags[stringTag] =\\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\\n  cloneableTags[mapTag] = cloneableTags[setTag] =\\n  cloneableTags[weakMapTag] = false;\\n\\n  /** Used to map latin-1 supplementary letters to basic latin letters. */\\n  var deburredLetters = {\\n    '\\\\xc0': 'A',  '\\\\xc1': 'A', '\\\\xc2': 'A', '\\\\xc3': 'A', '\\\\xc4': 'A', '\\\\xc5': 'A',\\n    '\\\\xe0': 'a',  '\\\\xe1': 'a', '\\\\xe2': 'a', '\\\\xe3': 'a', '\\\\xe4': 'a', '\\\\xe5': 'a',\\n    '\\\\xc7': 'C',  '\\\\xe7': 'c',\\n    '\\\\xd0': 'D',  '\\\\xf0': 'd',\\n    '\\\\xc8': 'E',  '\\\\xc9': 'E', '\\\\xca': 'E', '\\\\xcb': 'E',\\n    '\\\\xe8': 'e',  '\\\\xe9': 'e', '\\\\xea': 'e', '\\\\xeb': 'e',\\n    '\\\\xcC': 'I',  '\\\\xcd': 'I', '\\\\xce': 'I', '\\\\xcf': 'I',\\n    '\\\\xeC': 'i',  '\\\\xed': 'i', '\\\\xee': 'i', '\\\\xef': 'i',\\n    '\\\\xd1': 'N',  '\\\\xf1': 'n',\\n    '\\\\xd2': 'O',  '\\\\xd3': 'O', '\\\\xd4': 'O', '\\\\xd5': 'O', '\\\\xd6': 'O', '\\\\xd8': 'O',\\n    '\\\\xf2': 'o',  '\\\\xf3': 'o', '\\\\xf4': 'o', '\\\\xf5': 'o', '\\\\xf6': 'o', '\\\\xf8': 'o',\\n    '\\\\xd9': 'U',  '\\\\xda': 'U', '\\\\xdb': 'U', '\\\\xdc': 'U',\\n    '\\\\xf9': 'u',  '\\\\xfa': 'u', '\\\\xfb': 'u', '\\\\xfc': 'u',\\n    '\\\\xdd': 'Y',  '\\\\xfd': 'y', '\\\\xff': 'y',\\n    '\\\\xc6': 'Ae', '\\\\xe6': 'ae',\\n    '\\\\xde': 'Th', '\\\\xfe': 'th',\\n    '\\\\xdf': 'ss'\\n  };\\n\\n  /** Used to map characters to HTML entities. */\\n  var htmlEscapes = {\\n    '&': '&amp;',\\n    '<': '&lt;',\\n    '>': '&gt;',\\n    '\\\"': '&quot;',\\n    \\\"'\\\": '&#39;',\\n    '`': '&#96;'\\n  };\\n\\n  /** Used to map HTML entities to characters. */\\n  var htmlUnescapes = {\\n    '&amp;': '&',\\n    '&lt;': '<',\\n    '&gt;': '>',\\n    '&quot;': '\\\"',\\n    '&#39;': \\\"'\\\",\\n    '&#96;': '`'\\n  };\\n\\n  /** Used to determine if values are of the language type `Object`. */\\n  var objectTypes = {\\n    'function': true,\\n    'object': true\\n  };\\n\\n  /** Used to escape characters for inclusion in compiled regexes. */\\n  var regexpEscapes = {\\n    '0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34',\\n    '5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39',\\n    'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46',\\n    'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66',\\n    'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78'\\n  };\\n\\n  /** Used to escape characters for inclusion in compiled string literals. */\\n  var stringEscapes = {\\n    '\\\\\\\\': '\\\\\\\\',\\n    \\\"'\\\": \\\"'\\\",\\n    '\\\\n': 'n',\\n    '\\\\r': 'r',\\n    '\\\\u2028': 'u2028',\\n    '\\\\u2029': 'u2029'\\n  };\\n\\n  /** Detect free variable `exports`. */\\n  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\\n\\n  /** Detect free variable `module`. */\\n  var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\\n\\n  /** Detect free variable `global` from Node.js. */\\n  var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;\\n\\n  /** Detect free variable `self`. */\\n  var freeSelf = objectTypes[typeof self] && self && self.Object && self;\\n\\n  /** Detect free variable `window`. */\\n  var freeWindow = objectTypes[typeof window] && window && window.Object && window;\\n\\n  /** Detect the popular CommonJS extension `module.exports`. */\\n  var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;\\n\\n  /**\\n   * Used as a reference to the global object.\\n   *\\n   * The `this` value is used if it's the global object to avoid Greasemonkey's\\n   * restricted `window` object, otherwise the `window` object is used.\\n   */\\n  var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;\\n\\n  /*--------------------------------------------------------------------------*/\\n\\n  /**\\n   * The base implementation of `compareAscending` which compares values and\\n   * sorts them in ascending order without guaranteeing a stable sort.\\n   *\\n   * @private\\n   * @param {*} value The value to compare.\\n   * @param {*} other The other value to compare.\\n   * @returns {number} Returns the sort order indicator for `value`.\\n   */\\n  function baseCompareAscending(value, other) {\\n    if (value !== other) {\\n      var valIsNull = value === null,\\n          valIsUndef = value === undefined,\\n          valIsReflexive = value === value;\\n\\n      var othIsNull = other === null,\\n          othIsUndef = other === undefined,\\n          othIsReflexive = other === other;\\n\\n      if ((value > other && !othIsNull) || !valIsReflexive ||\\n          (valIsNull && !othIsUndef && othIsReflexive) ||\\n          (valIsUndef && othIsReflexive)) {\\n        return 1;\\n      }\\n      if ((value < other && !valIsNull) || !othIsReflexive ||\\n          (othIsNull && !valIsUndef && valIsReflexive) ||\\n          (othIsUndef && valIsReflexive)) {\\n        return -1;\\n      }\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\\n   * support for callback shorthands and `this` binding.\\n   *\\n   * @private\\n   * @param {Array} array The array to search.\\n   * @param {Function} predicate The function invoked per iteration.\\n   * @param {boolean} [fromRight] Specify iterating from right to left.\\n   * @returns {number} Returns the index of the matched value, else `-1`.\\n   */\\n  function baseFindIndex(array, predicate, fromRight) {\\n    var length = array.length,\\n        index = fromRight ? length : -1;\\n\\n    while ((fromRight ? index-- : ++index < length)) {\\n      if (predicate(array[index], index, array)) {\\n        return index;\\n      }\\n    }\\n    return -1;\\n  }\\n\\n  /**\\n   * The base implementation of `_.indexOf` without support for binary searches.\\n   *\\n   * @private\\n   * @param {Array} array The array to search.\\n   * @param {*} value The value to search for.\\n   * @param {number} fromIndex The index to search from.\\n   * @returns {number} Returns the index of the matched value, else `-1`.\\n   */\\n  function baseIndexOf(array, value, fromIndex) {\\n    if (value !== value) {\\n      return indexOfNaN(array, fromIndex);\\n    }\\n    var index = fromIndex - 1,\\n        length = array.length;\\n\\n    while (++index < length) {\\n      if (array[index] === value) {\\n        return index;\\n      }\\n    }\\n    return -1;\\n  }\\n\\n  /**\\n   * The base implementation of `_.isFunction` without support for environments\\n   * with incorrect `typeof` results.\\n   *\\n   * @private\\n   * @param {*} value The value to check.\\n   * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n   */\\n  function baseIsFunction(value) {\\n    // Avoid a Chakra JIT bug in compatibility modes of IE 11.\\n    // See https://github.com/jashkenas/underscore/issues/1621 for more details.\\n    return typeof value == 'function' || false;\\n  }\\n\\n  /**\\n   * Converts `value` to a string if it's not one. An empty string is returned\\n   * for `null` or `undefined` values.\\n   *\\n   * @private\\n   * @param {*} value The value to process.\\n   * @returns {string} Returns the string.\\n   */\\n  function baseToString(value) {\\n    return value == null ? '' : (value + '');\\n  }\\n\\n  /**\\n   * Used by `_.trim` and `_.trimLeft` to get the index of the first character\\n   * of `string` that is not found in `chars`.\\n   *\\n   * @private\\n   * @param {string} string The string to inspect.\\n   * @param {string} chars The characters to find.\\n   * @returns {number} Returns the index of the first character not found in `chars`.\\n   */\\n  function charsLeftIndex(string, chars) {\\n    var index = -1,\\n        length = string.length;\\n\\n    while (++index < length && chars.indexOf(string.charAt(index)) > -1) {}\\n    return index;\\n  }\\n\\n  /**\\n   * Used by `_.trim` and `_.trimRight` to get the index of the last character\\n   * of `string` that is not found in `chars`.\\n   *\\n   * @private\\n   * @param {string} string The string to inspect.\\n   * @param {string} chars The characters to find.\\n   * @returns {number} Returns the index of the last character not found in `chars`.\\n   */\\n  function charsRightIndex(string, chars) {\\n    var index = string.length;\\n\\n    while (index-- && chars.indexOf(string.charAt(index)) > -1) {}\\n    return index;\\n  }\\n\\n  /**\\n   * Used by `_.sortBy` to compare transformed elements of a collection and stable\\n   * sort them in ascending order.\\n   *\\n   * @private\\n   * @param {Object} object The object to compare.\\n   * @param {Object} other The other object to compare.\\n   * @returns {number} Returns the sort order indicator for `object`.\\n   */\\n  function compareAscending(object, other) {\\n    return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index);\\n  }\\n\\n  /**\\n   * Used by `_.sortByOrder` to compare multiple properties of a value to another\\n   * and stable sort them.\\n   *\\n   * If `orders` is unspecified, all valuess are sorted in ascending order. Otherwise,\\n   * a value is sorted in ascending order if its corresponding order is \\\"asc\\\", and\\n   * descending if \\\"desc\\\".\\n   *\\n   * @private\\n   * @param {Object} object The object to compare.\\n   * @param {Object} other The other object to compare.\\n   * @param {boolean[]} orders The order to sort by for each property.\\n   * @returns {number} Returns the sort order indicator for `object`.\\n   */\\n  function compareMultiple(object, other, orders) {\\n    var index = -1,\\n        objCriteria = object.criteria,\\n        othCriteria = other.criteria,\\n        length = objCriteria.length,\\n        ordersLength = orders.length;\\n\\n    while (++index < length) {\\n      var result = baseCompareAscending(objCriteria[index], othCriteria[index]);\\n      if (result) {\\n        if (index >= ordersLength) {\\n          return result;\\n        }\\n        var order = orders[index];\\n        return result * ((order === 'asc' || order === true) ? 1 : -1);\\n      }\\n    }\\n    // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\\n    // that causes it, under certain circumstances, to provide the same value for\\n    // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\\n    // for more details.\\n    //\\n    // This also ensures a stable sort in V8 and other engines.\\n    // See https://code.google.com/p/v8/issues/detail?id=90 for more details.\\n    return object.index - other.index;\\n  }\\n\\n  /**\\n   * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters.\\n   *\\n   * @private\\n   * @param {string} letter The matched letter to deburr.\\n   * @returns {string} Returns the deburred letter.\\n   */\\n  function deburrLetter(letter) {\\n    return deburredLetters[letter];\\n  }\\n\\n  /**\\n   * Used by `_.escape` to convert characters to HTML entities.\\n   *\\n   * @private\\n   * @param {string} chr The matched character to escape.\\n   * @returns {string} Returns the escaped character.\\n   */\\n  function escapeHtmlChar(chr) {\\n    return htmlEscapes[chr];\\n  }\\n\\n  /**\\n   * Used by `_.escapeRegExp` to escape characters for inclusion in compiled regexes.\\n   *\\n   * @private\\n   * @param {string} chr The matched character to escape.\\n   * @param {string} leadingChar The capture group for a leading character.\\n   * @param {string} whitespaceChar The capture group for a whitespace character.\\n   * @returns {string} Returns the escaped character.\\n   */\\n  function escapeRegExpChar(chr, leadingChar, whitespaceChar) {\\n    if (leadingChar) {\\n      chr = regexpEscapes[chr];\\n    } else if (whitespaceChar) {\\n      chr = stringEscapes[chr];\\n    }\\n    return '\\\\\\\\' + chr;\\n  }\\n\\n  /**\\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\\n   *\\n   * @private\\n   * @param {string} chr The matched character to escape.\\n   * @returns {string} Returns the escaped character.\\n   */\\n  function escapeStringChar(chr) {\\n    return '\\\\\\\\' + stringEscapes[chr];\\n  }\\n\\n  /**\\n   * Gets the index at which the first occurrence of `NaN` is found in `array`.\\n   *\\n   * @private\\n   * @param {Array} array The array to search.\\n   * @param {number} fromIndex The index to search from.\\n   * @param {boolean} [fromRight] Specify iterating from right to left.\\n   * @returns {number} Returns the index of the matched `NaN`, else `-1`.\\n   */\\n  function indexOfNaN(array, fromIndex, fromRight) {\\n    var length = array.length,\\n        index = fromIndex + (fromRight ? 0 : -1);\\n\\n    while ((fromRight ? index-- : ++index < length)) {\\n      var other = array[index];\\n      if (other !== other) {\\n        return index;\\n      }\\n    }\\n    return -1;\\n  }\\n\\n  /**\\n   * Checks if `value` is object-like.\\n   *\\n   * @private\\n   * @param {*} value The value to check.\\n   * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\\n   */\\n  function isObjectLike(value) {\\n    return !!value && typeof value == 'object';\\n  }\\n\\n  /**\\n   * Used by `trimmedLeftIndex` and `trimmedRightIndex` to determine if a\\n   * character code is whitespace.\\n   *\\n   * @private\\n   * @param {number} charCode The character code to inspect.\\n   * @returns {boolean} Returns `true` if `charCode` is whitespace, else `false`.\\n   */\\n  function isSpace(charCode) {\\n    return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 ||\\n      (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279)));\\n  }\\n\\n  /**\\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\\n   * and returns an array of their indexes.\\n   *\\n   * @private\\n   * @param {Array} array The array to modify.\\n   * @param {*} placeholder The placeholder to replace.\\n   * @returns {Array} Returns the new array of placeholder indexes.\\n   */\\n  function replaceHolders(array, placeholder) {\\n    var index = -1,\\n        length = array.length,\\n        resIndex = -1,\\n        result = [];\\n\\n    while (++index < length) {\\n      if (array[index] === placeholder) {\\n        array[index] = PLACEHOLDER;\\n        result[++resIndex] = index;\\n      }\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * An implementation of `_.uniq` optimized for sorted arrays without support\\n   * for callback shorthands and `this` binding.\\n   *\\n   * @private\\n   * @param {Array} array The array to inspect.\\n   * @param {Function} [iteratee] The function invoked per iteration.\\n   * @returns {Array} Returns the new duplicate-value-free array.\\n   */\\n  function sortedUniq(array, iteratee) {\\n    var seen,\\n        index = -1,\\n        length = array.length,\\n        resIndex = -1,\\n        result = [];\\n\\n    while (++index < length) {\\n      var value = array[index],\\n          computed = iteratee ? iteratee(value, index, array) : value;\\n\\n      if (!index || seen !== computed) {\\n        seen = computed;\\n        result[++resIndex] = value;\\n      }\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * Used by `_.trim` and `_.trimLeft` to get the index of the first non-whitespace\\n   * character of `string`.\\n   *\\n   * @private\\n   * @param {string} string The string to inspect.\\n   * @returns {number} Returns the index of the first non-whitespace character.\\n   */\\n  function trimmedLeftIndex(string) {\\n    var index = -1,\\n        length = string.length;\\n\\n    while (++index < length && isSpace(string.charCodeAt(index))) {}\\n    return index;\\n  }\\n\\n  /**\\n   * Used by `_.trim` and `_.trimRight` to get the index of the last non-whitespace\\n   * character of `string`.\\n   *\\n   * @private\\n   * @param {string} string The string to inspect.\\n   * @returns {number} Returns the index of the last non-whitespace character.\\n   */\\n  function trimmedRightIndex(string) {\\n    var index = string.length;\\n\\n    while (index-- && isSpace(string.charCodeAt(index))) {}\\n    return index;\\n  }\\n\\n  /**\\n   * Used by `_.unescape` to convert HTML entities to characters.\\n   *\\n   * @private\\n   * @param {string} chr The matched character to unescape.\\n   * @returns {string} Returns the unescaped character.\\n   */\\n  function unescapeHtmlChar(chr) {\\n    return htmlUnescapes[chr];\\n  }\\n\\n  /*--------------------------------------------------------------------------*/\\n\\n  /**\\n   * Create a new pristine `lodash` function using the given `context` object.\\n   *\\n   * @static\\n   * @memberOf _\\n   * @category Utility\\n   * @param {Object} [context=root] The context object.\\n   * @returns {Function} Returns a new `lodash` function.\\n   * @example\\n   *\\n   * _.mixin({ 'foo': _.constant('foo') });\\n   *\\n   * var lodash = _.runInContext();\\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\\n   *\\n   * _.isFunction(_.foo);\\n   * // => true\\n   * _.isFunction(_.bar);\\n   * // => false\\n   *\\n   * lodash.isFunction(lodash.foo);\\n   * // => false\\n   * lodash.isFunction(lodash.bar);\\n   * // => true\\n   *\\n   * // using `context` to mock `Date#getTime` use in `_.now`\\n   * var mock = _.runInContext({\\n   *   'Date': function() {\\n   *     return { 'getTime': getTimeMock };\\n   *   }\\n   * });\\n   *\\n   * // or creating a suped-up `defer` in Node.js\\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\\n   */\\n  function runInContext(context) {\\n    // Avoid issues with some ES3 environments that attempt to use values, named\\n    // after built-in constructors like `Object`, for the creation of literals.\\n    // ES5 clears this up by stating that literals must use built-in constructors.\\n    // See https://es5.github.io/#x11.1.5 for more details.\\n    context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;\\n\\n    /** Native constructor references. */\\n    var Array = context.Array,\\n        Date = context.Date,\\n        Error = context.Error,\\n        Function = context.Function,\\n        Math = context.Math,\\n        Number = context.Number,\\n        Object = context.Object,\\n        RegExp = context.RegExp,\\n        String = context.String,\\n        TypeError = context.TypeError;\\n\\n    /** Used for native method references. */\\n    var arrayProto = Array.prototype,\\n        objectProto = Object.prototype,\\n        stringProto = String.prototype;\\n\\n    /** Used to resolve the decompiled source of functions. */\\n    var fnToString = Function.prototype.toString;\\n\\n    /** Used to check objects for own properties. */\\n    var hasOwnProperty = objectProto.hasOwnProperty;\\n\\n    /** Used to generate unique IDs. */\\n    var idCounter = 0;\\n\\n    /**\\n     * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\\n     * of values.\\n     */\\n    var objToString = objectProto.toString;\\n\\n    /** Used to restore the original `_` reference in `_.noConflict`. */\\n    var oldDash = root._;\\n\\n    /** Used to detect if a method is native. */\\n    var reIsNative = RegExp('^' +\\n      fnToString.call(hasOwnProperty).replace(/[\\\\\\\\^$.*+?()[\\\\]{}|]/g, '\\\\\\\\$&')\\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\\\\\\\()| for .+?(?=\\\\\\\\\\\\])/g, '$1.*?') + '$'\\n    );\\n\\n    /** Native method references. */\\n    var ArrayBuffer = context.ArrayBuffer,\\n        clearTimeout = context.clearTimeout,\\n        parseFloat = context.parseFloat,\\n        pow = Math.pow,\\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\\n        Set = getNative(context, 'Set'),\\n        setTimeout = context.setTimeout,\\n        splice = arrayProto.splice,\\n        Uint8Array = context.Uint8Array,\\n        WeakMap = getNative(context, 'WeakMap');\\n\\n    /* Native method references for those with the same name as other `lodash` methods. */\\n    var nativeCeil = Math.ceil,\\n        nativeCreate = getNative(Object, 'create'),\\n        nativeFloor = Math.floor,\\n        nativeIsArray = getNative(Array, 'isArray'),\\n        nativeIsFinite = context.isFinite,\\n        nativeKeys = getNative(Object, 'keys'),\\n        nativeMax = Math.max,\\n        nativeMin = Math.min,\\n        nativeNow = getNative(Date, 'now'),\\n        nativeParseInt = context.parseInt,\\n        nativeRandom = Math.random;\\n\\n    /** Used as references for `-Infinity` and `Infinity`. */\\n    var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY,\\n        POSITIVE_INFINITY = Number.POSITIVE_INFINITY;\\n\\n    /** Used as references for the maximum length and index of an array. */\\n    var MAX_ARRAY_LENGTH = 4294967295,\\n        MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\\n        HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\\n\\n    /**\\n     * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\\n     * of an array-like value.\\n     */\\n    var MAX_SAFE_INTEGER = 9007199254740991;\\n\\n    /** Used to store function metadata. */\\n    var metaMap = WeakMap && new WeakMap;\\n\\n    /** Used to lookup unminified function names. */\\n    var realNames = {};\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a `lodash` object which wraps `value` to enable implicit chaining.\\n     * Methods that operate on and return arrays, collections, and functions can\\n     * be chained together. Methods that retrieve a single value or may return a\\n     * primitive value will automatically end the chain returning the unwrapped\\n     * value. Explicit chaining may be enabled using `_.chain`. The execution of\\n     * chained methods is lazy, that is, execution is deferred until `_#value`\\n     * is implicitly or explicitly called.\\n     *\\n     * Lazy evaluation allows several methods to support shortcut fusion. Shortcut\\n     * fusion is an optimization strategy which merge iteratee calls; this can help\\n     * to avoid the creation of intermediate data structures and greatly reduce the\\n     * number of iteratee executions.\\n     *\\n     * Chaining is supported in custom builds as long as the `_#value` method is\\n     * directly or indirectly included in the build.\\n     *\\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\\n     *\\n     * The wrapper `Array` methods are:\\n     * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`,\\n     * `splice`, and `unshift`\\n     *\\n     * The wrapper `String` methods are:\\n     * `replace` and `split`\\n     *\\n     * The wrapper methods that support shortcut fusion are:\\n     * `compact`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`,\\n     * `first`, `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`,\\n     * `slice`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `toArray`,\\n     * and `where`\\n     *\\n     * The chainable wrapper methods are:\\n     * `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`,\\n     * `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`,\\n     * `countBy`, `create`, `curry`, `debounce`, `defaults`, `defaultsDeep`,\\n     * `defer`, `delay`, `difference`, `drop`, `dropRight`, `dropRightWhile`,\\n     * `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`,\\n     * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,\\n     * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,\\n     * `invoke`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`,\\n     * `matchesProperty`, `memoize`, `merge`, `method`, `methodOf`, `mixin`,\\n     * `modArgs`, `negate`, `omit`, `once`, `pairs`, `partial`, `partialRight`,\\n     * `partition`, `pick`, `plant`, `pluck`, `property`, `propertyOf`, `pull`,\\n     * `pullAt`, `push`, `range`, `rearg`, `reject`, `remove`, `rest`, `restParam`,\\n     * `reverse`, `set`, `shuffle`, `slice`, `sort`, `sortBy`, `sortByAll`,\\n     * `sortByOrder`, `splice`, `spread`, `take`, `takeRight`, `takeRightWhile`,\\n     * `takeWhile`, `tap`, `throttle`, `thru`, `times`, `toArray`, `toPlainObject`,\\n     * `transform`, `union`, `uniq`, `unshift`, `unzip`, `unzipWith`, `values`,\\n     * `valuesIn`, `where`, `without`, `wrap`, `xor`, `zip`, `zipObject`, `zipWith`\\n     *\\n     * The wrapper methods that are **not** chainable by default are:\\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clone`, `cloneDeep`,\\n     * `deburr`, `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`,\\n     * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`,\\n     * `floor`, `get`, `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`,\\n     * `inRange`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,\\n     * `isEmpty`, `isEqual`, `isError`, `isFinite` `isFunction`, `isMatch`,\\n     * `isNative`, `isNaN`, `isNull`, `isNumber`, `isObject`, `isPlainObject`,\\n     * `isRegExp`, `isString`, `isUndefined`, `isTypedArray`, `join`, `kebabCase`,\\n     * `last`, `lastIndexOf`, `lt`, `lte`, `max`, `min`, `noConflict`, `noop`,\\n     * `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`, `random`, `reduce`,\\n     * `reduceRight`, `repeat`, `result`, `round`, `runInContext`, `shift`, `size`,\\n     * `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`, `startCase`,\\n     * `startsWith`, `sum`, `template`, `trim`, `trimLeft`, `trimRight`, `trunc`,\\n     * `unescape`, `uniqueId`, `value`, and `words`\\n     *\\n     * The wrapper method `sample` will return a wrapped value when `n` is provided,\\n     * otherwise an unwrapped value is returned.\\n     *\\n     * @name _\\n     * @constructor\\n     * @category Chain\\n     * @param {*} value The value to wrap in a `lodash` instance.\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var wrapped = _([1, 2, 3]);\\n     *\\n     * // returns an unwrapped value\\n     * wrapped.reduce(function(total, n) {\\n     *   return total + n;\\n     * });\\n     * // => 6\\n     *\\n     * // returns a wrapped value\\n     * var squares = wrapped.map(function(n) {\\n     *   return n * n;\\n     * });\\n     *\\n     * _.isArray(squares);\\n     * // => false\\n     *\\n     * _.isArray(squares.value());\\n     * // => true\\n     */\\n    function lodash(value) {\\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\\n        if (value instanceof LodashWrapper) {\\n          return value;\\n        }\\n        if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) {\\n          return wrapperClone(value);\\n        }\\n      }\\n      return new LodashWrapper(value);\\n    }\\n\\n    /**\\n     * The function whose prototype all chaining wrappers inherit from.\\n     *\\n     * @private\\n     */\\n    function baseLodash() {\\n      // No operation performed.\\n    }\\n\\n    /**\\n     * The base constructor for creating `lodash` wrapper objects.\\n     *\\n     * @private\\n     * @param {*} value The value to wrap.\\n     * @param {boolean} [chainAll] Enable chaining for all wrapper methods.\\n     * @param {Array} [actions=[]] Actions to peform to resolve the unwrapped value.\\n     */\\n    function LodashWrapper(value, chainAll, actions) {\\n      this.__wrapped__ = value;\\n      this.__actions__ = actions || [];\\n      this.__chain__ = !!chainAll;\\n    }\\n\\n    /**\\n     * An object environment feature flags.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @type Object\\n     */\\n    var support = lodash.support = {};\\n\\n    /**\\n     * By default, the template delimiters used by lodash are like those in\\n     * embedded Ruby (ERB). Change the following template settings to use\\n     * alternative delimiters.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @type Object\\n     */\\n    lodash.templateSettings = {\\n\\n      /**\\n       * Used to detect `data` property values to be HTML-escaped.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type RegExp\\n       */\\n      'escape': reEscape,\\n\\n      /**\\n       * Used to detect code to be evaluated.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type RegExp\\n       */\\n      'evaluate': reEvaluate,\\n\\n      /**\\n       * Used to detect `data` property values to inject.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type RegExp\\n       */\\n      'interpolate': reInterpolate,\\n\\n      /**\\n       * Used to reference the data object in the template text.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type string\\n       */\\n      'variable': '',\\n\\n      /**\\n       * Used to import variables into the compiled template.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type Object\\n       */\\n      'imports': {\\n\\n        /**\\n         * A reference to the `lodash` function.\\n         *\\n         * @memberOf _.templateSettings.imports\\n         * @type Function\\n         */\\n        '_': lodash\\n      }\\n    };\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\\n     *\\n     * @private\\n     * @param {*} value The value to wrap.\\n     */\\n    function LazyWrapper(value) {\\n      this.__wrapped__ = value;\\n      this.__actions__ = [];\\n      this.__dir__ = 1;\\n      this.__filtered__ = false;\\n      this.__iteratees__ = [];\\n      this.__takeCount__ = POSITIVE_INFINITY;\\n      this.__views__ = [];\\n    }\\n\\n    /**\\n     * Creates a clone of the lazy wrapper object.\\n     *\\n     * @private\\n     * @name clone\\n     * @memberOf LazyWrapper\\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\\n     */\\n    function lazyClone() {\\n      var result = new LazyWrapper(this.__wrapped__);\\n      result.__actions__ = arrayCopy(this.__actions__);\\n      result.__dir__ = this.__dir__;\\n      result.__filtered__ = this.__filtered__;\\n      result.__iteratees__ = arrayCopy(this.__iteratees__);\\n      result.__takeCount__ = this.__takeCount__;\\n      result.__views__ = arrayCopy(this.__views__);\\n      return result;\\n    }\\n\\n    /**\\n     * Reverses the direction of lazy iteration.\\n     *\\n     * @private\\n     * @name reverse\\n     * @memberOf LazyWrapper\\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\\n     */\\n    function lazyReverse() {\\n      if (this.__filtered__) {\\n        var result = new LazyWrapper(this);\\n        result.__dir__ = -1;\\n        result.__filtered__ = true;\\n      } else {\\n        result = this.clone();\\n        result.__dir__ *= -1;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Extracts the unwrapped value from its lazy wrapper.\\n     *\\n     * @private\\n     * @name value\\n     * @memberOf LazyWrapper\\n     * @returns {*} Returns the unwrapped value.\\n     */\\n    function lazyValue() {\\n      var array = this.__wrapped__.value(),\\n          dir = this.__dir__,\\n          isArr = isArray(array),\\n          isRight = dir < 0,\\n          arrLength = isArr ? array.length : 0,\\n          view = getView(0, arrLength, this.__views__),\\n          start = view.start,\\n          end = view.end,\\n          length = end - start,\\n          index = isRight ? end : (start - 1),\\n          iteratees = this.__iteratees__,\\n          iterLength = iteratees.length,\\n          resIndex = 0,\\n          takeCount = nativeMin(length, this.__takeCount__);\\n\\n      if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) {\\n        return baseWrapperValue((isRight && isArr) ? array.reverse() : array, this.__actions__);\\n      }\\n      var result = [];\\n\\n      outer:\\n      while (length-- && resIndex < takeCount) {\\n        index += dir;\\n\\n        var iterIndex = -1,\\n            value = array[index];\\n\\n        while (++iterIndex < iterLength) {\\n          var data = iteratees[iterIndex],\\n              iteratee = data.iteratee,\\n              type = data.type,\\n              computed = iteratee(value);\\n\\n          if (type == LAZY_MAP_FLAG) {\\n            value = computed;\\n          } else if (!computed) {\\n            if (type == LAZY_FILTER_FLAG) {\\n              continue outer;\\n            } else {\\n              break outer;\\n            }\\n          }\\n        }\\n        result[resIndex++] = value;\\n      }\\n      return result;\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a cache object to store key/value pairs.\\n     *\\n     * @private\\n     * @static\\n     * @name Cache\\n     * @memberOf _.memoize\\n     */\\n    function MapCache() {\\n      this.__data__ = {};\\n    }\\n\\n    /**\\n     * Removes `key` and its value from the cache.\\n     *\\n     * @private\\n     * @name delete\\n     * @memberOf _.memoize.Cache\\n     * @param {string} key The key of the value to remove.\\n     * @returns {boolean} Returns `true` if the entry was removed successfully, else `false`.\\n     */\\n    function mapDelete(key) {\\n      return this.has(key) && delete this.__data__[key];\\n    }\\n\\n    /**\\n     * Gets the cached value for `key`.\\n     *\\n     * @private\\n     * @name get\\n     * @memberOf _.memoize.Cache\\n     * @param {string} key The key of the value to get.\\n     * @returns {*} Returns the cached value.\\n     */\\n    function mapGet(key) {\\n      return key == '__proto__' ? undefined : this.__data__[key];\\n    }\\n\\n    /**\\n     * Checks if a cached value for `key` exists.\\n     *\\n     * @private\\n     * @name has\\n     * @memberOf _.memoize.Cache\\n     * @param {string} key The key of the entry to check.\\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\\n     */\\n    function mapHas(key) {\\n      return key != '__proto__' && hasOwnProperty.call(this.__data__, key);\\n    }\\n\\n    /**\\n     * Sets `value` to `key` of the cache.\\n     *\\n     * @private\\n     * @name set\\n     * @memberOf _.memoize.Cache\\n     * @param {string} key The key of the value to cache.\\n     * @param {*} value The value to cache.\\n     * @returns {Object} Returns the cache object.\\n     */\\n    function mapSet(key, value) {\\n      if (key != '__proto__') {\\n        this.__data__[key] = value;\\n      }\\n      return this;\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     *\\n     * Creates a cache object to store unique values.\\n     *\\n     * @private\\n     * @param {Array} [values] The values to cache.\\n     */\\n    function SetCache(values) {\\n      var length = values ? values.length : 0;\\n\\n      this.data = { 'hash': nativeCreate(null), 'set': new Set };\\n      while (length--) {\\n        this.push(values[length]);\\n      }\\n    }\\n\\n    /**\\n     * Checks if `value` is in `cache` mimicking the return signature of\\n     * `_.indexOf` by returning `0` if the value is found, else `-1`.\\n     *\\n     * @private\\n     * @param {Object} cache The cache to search.\\n     * @param {*} value The value to search for.\\n     * @returns {number} Returns `0` if `value` is found, else `-1`.\\n     */\\n    function cacheIndexOf(cache, value) {\\n      var data = cache.data,\\n          result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value];\\n\\n      return result ? 0 : -1;\\n    }\\n\\n    /**\\n     * Adds `value` to the cache.\\n     *\\n     * @private\\n     * @name push\\n     * @memberOf SetCache\\n     * @param {*} value The value to cache.\\n     */\\n    function cachePush(value) {\\n      var data = this.data;\\n      if (typeof value == 'string' || isObject(value)) {\\n        data.set.add(value);\\n      } else {\\n        data.hash[value] = true;\\n      }\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a new array joining `array` with `other`.\\n     *\\n     * @private\\n     * @param {Array} array The array to join.\\n     * @param {Array} other The other array to join.\\n     * @returns {Array} Returns the new concatenated array.\\n     */\\n    function arrayConcat(array, other) {\\n      var index = -1,\\n          length = array.length,\\n          othIndex = -1,\\n          othLength = other.length,\\n          result = Array(length + othLength);\\n\\n      while (++index < length) {\\n        result[index] = array[index];\\n      }\\n      while (++othIndex < othLength) {\\n        result[index++] = other[othIndex];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Copies the values of `source` to `array`.\\n     *\\n     * @private\\n     * @param {Array} source The array to copy values from.\\n     * @param {Array} [array=[]] The array to copy values to.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function arrayCopy(source, array) {\\n      var index = -1,\\n          length = source.length;\\n\\n      array || (array = Array(length));\\n      while (++index < length) {\\n        array[index] = source[index];\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * A specialized version of `_.forEach` for arrays without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function arrayEach(array, iteratee) {\\n      var index = -1,\\n          length = array.length;\\n\\n      while (++index < length) {\\n        if (iteratee(array[index], index, array) === false) {\\n          break;\\n        }\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * A specialized version of `_.forEachRight` for arrays without support for\\n     * callback shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function arrayEachRight(array, iteratee) {\\n      var length = array.length;\\n\\n      while (length--) {\\n        if (iteratee(array[length], length, array) === false) {\\n          break;\\n        }\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * A specialized version of `_.every` for arrays without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\\n     *  else `false`.\\n     */\\n    function arrayEvery(array, predicate) {\\n      var index = -1,\\n          length = array.length;\\n\\n      while (++index < length) {\\n        if (!predicate(array[index], index, array)) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    }\\n\\n    /**\\n     * A specialized version of `baseExtremum` for arrays which invokes `iteratee`\\n     * with one argument: (value).\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {Function} comparator The function used to compare values.\\n     * @param {*} exValue The initial extremum value.\\n     * @returns {*} Returns the extremum value.\\n     */\\n    function arrayExtremum(array, iteratee, comparator, exValue) {\\n      var index = -1,\\n          length = array.length,\\n          computed = exValue,\\n          result = computed;\\n\\n      while (++index < length) {\\n        var value = array[index],\\n            current = +iteratee(value);\\n\\n        if (comparator(current, computed)) {\\n          computed = current;\\n          result = value;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * A specialized version of `_.filter` for arrays without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {Array} Returns the new filtered array.\\n     */\\n    function arrayFilter(array, predicate) {\\n      var index = -1,\\n          length = array.length,\\n          resIndex = -1,\\n          result = [];\\n\\n      while (++index < length) {\\n        var value = array[index];\\n        if (predicate(value, index, array)) {\\n          result[++resIndex] = value;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * A specialized version of `_.map` for arrays without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array} Returns the new mapped array.\\n     */\\n    function arrayMap(array, iteratee) {\\n      var index = -1,\\n          length = array.length,\\n          result = Array(length);\\n\\n      while (++index < length) {\\n        result[index] = iteratee(array[index], index, array);\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Appends the elements of `values` to `array`.\\n     *\\n     * @private\\n     * @param {Array} array The array to modify.\\n     * @param {Array} values The values to append.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function arrayPush(array, values) {\\n      var index = -1,\\n          length = values.length,\\n          offset = array.length;\\n\\n      while (++index < length) {\\n        array[offset + index] = values[index];\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * A specialized version of `_.reduce` for arrays without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {*} [accumulator] The initial value.\\n     * @param {boolean} [initFromArray] Specify using the first element of `array`\\n     *  as the initial value.\\n     * @returns {*} Returns the accumulated value.\\n     */\\n    function arrayReduce(array, iteratee, accumulator, initFromArray) {\\n      var index = -1,\\n          length = array.length;\\n\\n      if (initFromArray && length) {\\n        accumulator = array[++index];\\n      }\\n      while (++index < length) {\\n        accumulator = iteratee(accumulator, array[index], index, array);\\n      }\\n      return accumulator;\\n    }\\n\\n    /**\\n     * A specialized version of `_.reduceRight` for arrays without support for\\n     * callback shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {*} [accumulator] The initial value.\\n     * @param {boolean} [initFromArray] Specify using the last element of `array`\\n     *  as the initial value.\\n     * @returns {*} Returns the accumulated value.\\n     */\\n    function arrayReduceRight(array, iteratee, accumulator, initFromArray) {\\n      var length = array.length;\\n      if (initFromArray && length) {\\n        accumulator = array[--length];\\n      }\\n      while (length--) {\\n        accumulator = iteratee(accumulator, array[length], length, array);\\n      }\\n      return accumulator;\\n    }\\n\\n    /**\\n     * A specialized version of `_.some` for arrays without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\\n     *  else `false`.\\n     */\\n    function arraySome(array, predicate) {\\n      var index = -1,\\n          length = array.length;\\n\\n      while (++index < length) {\\n        if (predicate(array[index], index, array)) {\\n          return true;\\n        }\\n      }\\n      return false;\\n    }\\n\\n    /**\\n     * A specialized version of `_.sum` for arrays without support for callback\\n     * shorthands and `this` binding..\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {number} Returns the sum.\\n     */\\n    function arraySum(array, iteratee) {\\n      var length = array.length,\\n          result = 0;\\n\\n      while (length--) {\\n        result += +iteratee(array[length]) || 0;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Used by `_.defaults` to customize its `_.assign` use.\\n     *\\n     * @private\\n     * @param {*} objectValue The destination object property value.\\n     * @param {*} sourceValue The source object property value.\\n     * @returns {*} Returns the value to assign to the destination object.\\n     */\\n    function assignDefaults(objectValue, sourceValue) {\\n      return objectValue === undefined ? sourceValue : objectValue;\\n    }\\n\\n    /**\\n     * Used by `_.template` to customize its `_.assign` use.\\n     *\\n     * **Note:** This function is like `assignDefaults` except that it ignores\\n     * inherited property values when checking if a property is `undefined`.\\n     *\\n     * @private\\n     * @param {*} objectValue The destination object property value.\\n     * @param {*} sourceValue The source object property value.\\n     * @param {string} key The key associated with the object and source values.\\n     * @param {Object} object The destination object.\\n     * @returns {*} Returns the value to assign to the destination object.\\n     */\\n    function assignOwnDefaults(objectValue, sourceValue, key, object) {\\n      return (objectValue === undefined || !hasOwnProperty.call(object, key))\\n        ? sourceValue\\n        : objectValue;\\n    }\\n\\n    /**\\n     * A specialized version of `_.assign` for customizing assigned values without\\n     * support for argument juggling, multiple sources, and `this` binding `customizer`\\n     * functions.\\n     *\\n     * @private\\n     * @param {Object} object The destination object.\\n     * @param {Object} source The source object.\\n     * @param {Function} customizer The function to customize assigned values.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function assignWith(object, source, customizer) {\\n      var index = -1,\\n          props = keys(source),\\n          length = props.length;\\n\\n      while (++index < length) {\\n        var key = props[index],\\n            value = object[key],\\n            result = customizer(value, source[key], key, object, source);\\n\\n        if ((result === result ? (result !== value) : (value === value)) ||\\n            (value === undefined && !(key in object))) {\\n          object[key] = result;\\n        }\\n      }\\n      return object;\\n    }\\n\\n    /**\\n     * The base implementation of `_.assign` without support for argument juggling,\\n     * multiple sources, and `customizer` functions.\\n     *\\n     * @private\\n     * @param {Object} object The destination object.\\n     * @param {Object} source The source object.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseAssign(object, source) {\\n      return source == null\\n        ? object\\n        : baseCopy(source, keys(source), object);\\n    }\\n\\n    /**\\n     * The base implementation of `_.at` without support for string collections\\n     * and individual key arguments.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {number[]|string[]} props The property names or indexes of elements to pick.\\n     * @returns {Array} Returns the new array of picked elements.\\n     */\\n    function baseAt(collection, props) {\\n      var index = -1,\\n          isNil = collection == null,\\n          isArr = !isNil && isArrayLike(collection),\\n          length = isArr ? collection.length : 0,\\n          propsLength = props.length,\\n          result = Array(propsLength);\\n\\n      while(++index < propsLength) {\\n        var key = props[index];\\n        if (isArr) {\\n          result[index] = isIndex(key, length) ? collection[key] : undefined;\\n        } else {\\n          result[index] = isNil ? undefined : collection[key];\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Copies properties of `source` to `object`.\\n     *\\n     * @private\\n     * @param {Object} source The object to copy properties from.\\n     * @param {Array} props The property names to copy.\\n     * @param {Object} [object={}] The object to copy properties to.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseCopy(source, props, object) {\\n      object || (object = {});\\n\\n      var index = -1,\\n          length = props.length;\\n\\n      while (++index < length) {\\n        var key = props[index];\\n        object[key] = source[key];\\n      }\\n      return object;\\n    }\\n\\n    /**\\n     * The base implementation of `_.callback` which supports specifying the\\n     * number of arguments to provide to `func`.\\n     *\\n     * @private\\n     * @param {*} [func=_.identity] The value to convert to a callback.\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @param {number} [argCount] The number of arguments to provide to `func`.\\n     * @returns {Function} Returns the callback.\\n     */\\n    function baseCallback(func, thisArg, argCount) {\\n      var type = typeof func;\\n      if (type == 'function') {\\n        return thisArg === undefined\\n          ? func\\n          : bindCallback(func, thisArg, argCount);\\n      }\\n      if (func == null) {\\n        return identity;\\n      }\\n      if (type == 'object') {\\n        return baseMatches(func);\\n      }\\n      return thisArg === undefined\\n        ? property(func)\\n        : baseMatchesProperty(func, thisArg);\\n    }\\n\\n    /**\\n     * The base implementation of `_.clone` without support for argument juggling\\n     * and `this` binding `customizer` functions.\\n     *\\n     * @private\\n     * @param {*} value The value to clone.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @param {Function} [customizer] The function to customize cloning values.\\n     * @param {string} [key] The key of `value`.\\n     * @param {Object} [object] The object `value` belongs to.\\n     * @param {Array} [stackA=[]] Tracks traversed source objects.\\n     * @param {Array} [stackB=[]] Associates clones with source counterparts.\\n     * @returns {*} Returns the cloned value.\\n     */\\n    function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {\\n      var result;\\n      if (customizer) {\\n        result = object ? customizer(value, key, object) : customizer(value);\\n      }\\n      if (result !== undefined) {\\n        return result;\\n      }\\n      if (!isObject(value)) {\\n        return value;\\n      }\\n      var isArr = isArray(value);\\n      if (isArr) {\\n        result = initCloneArray(value);\\n        if (!isDeep) {\\n          return arrayCopy(value, result);\\n        }\\n      } else {\\n        var tag = objToString.call(value),\\n            isFunc = tag == funcTag;\\n\\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\\n          result = initCloneObject(isFunc ? {} : value);\\n          if (!isDeep) {\\n            return baseAssign(result, value);\\n          }\\n        } else {\\n          return cloneableTags[tag]\\n            ? initCloneByTag(value, tag, isDeep)\\n            : (object ? value : {});\\n        }\\n      }\\n      // Check for circular references and return its corresponding clone.\\n      stackA || (stackA = []);\\n      stackB || (stackB = []);\\n\\n      var length = stackA.length;\\n      while (length--) {\\n        if (stackA[length] == value) {\\n          return stackB[length];\\n        }\\n      }\\n      // Add the source value to the stack of traversed objects and associate it with its clone.\\n      stackA.push(value);\\n      stackB.push(result);\\n\\n      // Recursively populate clone (susceptible to call stack limits).\\n      (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {\\n        result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.create` without support for assigning\\n     * properties to the created object.\\n     *\\n     * @private\\n     * @param {Object} prototype The object to inherit from.\\n     * @returns {Object} Returns the new object.\\n     */\\n    var baseCreate = (function() {\\n      function object() {}\\n      return function(prototype) {\\n        if (isObject(prototype)) {\\n          object.prototype = prototype;\\n          var result = new object;\\n          object.prototype = undefined;\\n        }\\n        return result || {};\\n      };\\n    }());\\n\\n    /**\\n     * The base implementation of `_.delay` and `_.defer` which accepts an index\\n     * of where to slice the arguments to provide to `func`.\\n     *\\n     * @private\\n     * @param {Function} func The function to delay.\\n     * @param {number} wait The number of milliseconds to delay invocation.\\n     * @param {Object} args The arguments provide to `func`.\\n     * @returns {number} Returns the timer id.\\n     */\\n    function baseDelay(func, wait, args) {\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\\n    }\\n\\n    /**\\n     * The base implementation of `_.difference` which accepts a single array\\n     * of values to exclude.\\n     *\\n     * @private\\n     * @param {Array} array The array to inspect.\\n     * @param {Array} values The values to exclude.\\n     * @returns {Array} Returns the new array of filtered values.\\n     */\\n    function baseDifference(array, values) {\\n      var length = array ? array.length : 0,\\n          result = [];\\n\\n      if (!length) {\\n        return result;\\n      }\\n      var index = -1,\\n          indexOf = getIndexOf(),\\n          isCommon = indexOf == baseIndexOf,\\n          cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null,\\n          valuesLength = values.length;\\n\\n      if (cache) {\\n        indexOf = cacheIndexOf;\\n        isCommon = false;\\n        values = cache;\\n      }\\n      outer:\\n      while (++index < length) {\\n        var value = array[index];\\n\\n        if (isCommon && value === value) {\\n          var valuesIndex = valuesLength;\\n          while (valuesIndex--) {\\n            if (values[valuesIndex] === value) {\\n              continue outer;\\n            }\\n          }\\n          result.push(value);\\n        }\\n        else if (indexOf(values, value, 0) < 0) {\\n          result.push(value);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.forEach` without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array|Object|string} Returns `collection`.\\n     */\\n    var baseEach = createBaseEach(baseForOwn);\\n\\n    /**\\n     * The base implementation of `_.forEachRight` without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array|Object|string} Returns `collection`.\\n     */\\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\\n\\n    /**\\n     * The base implementation of `_.every` without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\\n     *  else `false`\\n     */\\n    function baseEvery(collection, predicate) {\\n      var result = true;\\n      baseEach(collection, function(value, index, collection) {\\n        result = !!predicate(value, index, collection);\\n        return result;\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the extremum value of `collection` invoking `iteratee` for each value\\n     * in `collection` to generate the criterion by which the value is ranked.\\n     * The `iteratee` is invoked with three arguments: (value, index|key, collection).\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {Function} comparator The function used to compare values.\\n     * @param {*} exValue The initial extremum value.\\n     * @returns {*} Returns the extremum value.\\n     */\\n    function baseExtremum(collection, iteratee, comparator, exValue) {\\n      var computed = exValue,\\n          result = computed;\\n\\n      baseEach(collection, function(value, index, collection) {\\n        var current = +iteratee(value, index, collection);\\n        if (comparator(current, computed) || (current === exValue && current === result)) {\\n          computed = current;\\n          result = value;\\n        }\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.fill` without an iteratee call guard.\\n     *\\n     * @private\\n     * @param {Array} array The array to fill.\\n     * @param {*} value The value to fill `array` with.\\n     * @param {number} [start=0] The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function baseFill(array, value, start, end) {\\n      var length = array.length;\\n\\n      start = start == null ? 0 : (+start || 0);\\n      if (start < 0) {\\n        start = -start > length ? 0 : (length + start);\\n      }\\n      end = (end === undefined || end > length) ? length : (+end || 0);\\n      if (end < 0) {\\n        end += length;\\n      }\\n      length = start > end ? 0 : (end >>> 0);\\n      start >>>= 0;\\n\\n      while (start < length) {\\n        array[start++] = value;\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * The base implementation of `_.filter` without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {Array} Returns the new filtered array.\\n     */\\n    function baseFilter(collection, predicate) {\\n      var result = [];\\n      baseEach(collection, function(value, index, collection) {\\n        if (predicate(value, index, collection)) {\\n          result.push(value);\\n        }\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`,\\n     * without support for callback shorthands and `this` binding, which iterates\\n     * over `collection` using the provided `eachFunc`.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to search.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @param {Function} eachFunc The function to iterate over `collection`.\\n     * @param {boolean} [retKey] Specify returning the key of the found element\\n     *  instead of the element itself.\\n     * @returns {*} Returns the found element or its key, else `undefined`.\\n     */\\n    function baseFind(collection, predicate, eachFunc, retKey) {\\n      var result;\\n      eachFunc(collection, function(value, key, collection) {\\n        if (predicate(value, key, collection)) {\\n          result = retKey ? key : value;\\n          return false;\\n        }\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.flatten` with added support for restricting\\n     * flattening and specifying the start index.\\n     *\\n     * @private\\n     * @param {Array} array The array to flatten.\\n     * @param {boolean} [isDeep] Specify a deep flatten.\\n     * @param {boolean} [isStrict] Restrict flattening to arrays-like objects.\\n     * @param {Array} [result=[]] The initial result value.\\n     * @returns {Array} Returns the new flattened array.\\n     */\\n    function baseFlatten(array, isDeep, isStrict, result) {\\n      result || (result = []);\\n\\n      var index = -1,\\n          length = array.length;\\n\\n      while (++index < length) {\\n        var value = array[index];\\n        if (isObjectLike(value) && isArrayLike(value) &&\\n            (isStrict || isArray(value) || isArguments(value))) {\\n          if (isDeep) {\\n            // Recursively flatten arrays (susceptible to call stack limits).\\n            baseFlatten(value, isDeep, isStrict, result);\\n          } else {\\n            arrayPush(result, value);\\n          }\\n        } else if (!isStrict) {\\n          result[result.length] = value;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `baseForIn` and `baseForOwn` which iterates\\n     * over `object` properties returned by `keysFunc` invoking `iteratee` for\\n     * each property. Iteratee functions may exit iteration early by explicitly\\n     * returning `false`.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {Function} keysFunc The function to get the keys of `object`.\\n     * @returns {Object} Returns `object`.\\n     */\\n    var baseFor = createBaseFor();\\n\\n    /**\\n     * This function is like `baseFor` except that it iterates over properties\\n     * in the opposite order.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {Function} keysFunc The function to get the keys of `object`.\\n     * @returns {Object} Returns `object`.\\n     */\\n    var baseForRight = createBaseFor(true);\\n\\n    /**\\n     * The base implementation of `_.forIn` without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseForIn(object, iteratee) {\\n      return baseFor(object, iteratee, keysIn);\\n    }\\n\\n    /**\\n     * The base implementation of `_.forOwn` without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseForOwn(object, iteratee) {\\n      return baseFor(object, iteratee, keys);\\n    }\\n\\n    /**\\n     * The base implementation of `_.forOwnRight` without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseForOwnRight(object, iteratee) {\\n      return baseForRight(object, iteratee, keys);\\n    }\\n\\n    /**\\n     * The base implementation of `_.functions` which creates an array of\\n     * `object` function property names filtered from those provided.\\n     *\\n     * @private\\n     * @param {Object} object The object to inspect.\\n     * @param {Array} props The property names to filter.\\n     * @returns {Array} Returns the new array of filtered property names.\\n     */\\n    function baseFunctions(object, props) {\\n      var index = -1,\\n          length = props.length,\\n          resIndex = -1,\\n          result = [];\\n\\n      while (++index < length) {\\n        var key = props[index];\\n        if (isFunction(object[key])) {\\n          result[++resIndex] = key;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `get` without support for string paths\\n     * and default values.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {Array} path The path of the property to get.\\n     * @param {string} [pathKey] The key representation of path.\\n     * @returns {*} Returns the resolved value.\\n     */\\n    function baseGet(object, path, pathKey) {\\n      if (object == null) {\\n        return;\\n      }\\n      if (pathKey !== undefined && pathKey in toObject(object)) {\\n        path = [pathKey];\\n      }\\n      var index = 0,\\n          length = path.length;\\n\\n      while (object != null && index < length) {\\n        object = object[path[index++]];\\n      }\\n      return (index && index == length) ? object : undefined;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isEqual` without support for `this` binding\\n     * `customizer` functions.\\n     *\\n     * @private\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @param {Function} [customizer] The function to customize comparing values.\\n     * @param {boolean} [isLoose] Specify performing partial comparisons.\\n     * @param {Array} [stackA] Tracks traversed `value` objects.\\n     * @param {Array} [stackB] Tracks traversed `other` objects.\\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\\n     */\\n    function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {\\n      if (value === other) {\\n        return true;\\n      }\\n      if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\\n        return value !== value && other !== other;\\n      }\\n      return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);\\n    }\\n\\n    /**\\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\\n     * deep comparisons and tracks traversed objects enabling objects with circular\\n     * references to be compared.\\n     *\\n     * @private\\n     * @param {Object} object The object to compare.\\n     * @param {Object} other The other object to compare.\\n     * @param {Function} equalFunc The function to determine equivalents of values.\\n     * @param {Function} [customizer] The function to customize comparing objects.\\n     * @param {boolean} [isLoose] Specify performing partial comparisons.\\n     * @param {Array} [stackA=[]] Tracks traversed `value` objects.\\n     * @param {Array} [stackB=[]] Tracks traversed `other` objects.\\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\\n     */\\n    function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\\n      var objIsArr = isArray(object),\\n          othIsArr = isArray(other),\\n          objTag = arrayTag,\\n          othTag = arrayTag;\\n\\n      if (!objIsArr) {\\n        objTag = objToString.call(object);\\n        if (objTag == argsTag) {\\n          objTag = objectTag;\\n        } else if (objTag != objectTag) {\\n          objIsArr = isTypedArray(object);\\n        }\\n      }\\n      if (!othIsArr) {\\n        othTag = objToString.call(other);\\n        if (othTag == argsTag) {\\n          othTag = objectTag;\\n        } else if (othTag != objectTag) {\\n          othIsArr = isTypedArray(other);\\n        }\\n      }\\n      var objIsObj = objTag == objectTag,\\n          othIsObj = othTag == objectTag,\\n          isSameTag = objTag == othTag;\\n\\n      if (isSameTag && !(objIsArr || objIsObj)) {\\n        return equalByTag(object, other, objTag);\\n      }\\n      if (!isLoose) {\\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\\n\\n        if (objIsWrapped || othIsWrapped) {\\n          return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);\\n        }\\n      }\\n      if (!isSameTag) {\\n        return false;\\n      }\\n      // Assume cyclic values are equal.\\n      // For more information on detecting circular references see https://es5.github.io/#JO.\\n      stackA || (stackA = []);\\n      stackB || (stackB = []);\\n\\n      var length = stackA.length;\\n      while (length--) {\\n        if (stackA[length] == object) {\\n          return stackB[length] == other;\\n        }\\n      }\\n      // Add `object` and `other` to the stack of traversed objects.\\n      stackA.push(object);\\n      stackB.push(other);\\n\\n      var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);\\n\\n      stackA.pop();\\n      stackB.pop();\\n\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isMatch` without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Object} object The object to inspect.\\n     * @param {Array} matchData The propery names, values, and compare flags to match.\\n     * @param {Function} [customizer] The function to customize comparing objects.\\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\\n     */\\n    function baseIsMatch(object, matchData, customizer) {\\n      var index = matchData.length,\\n          length = index,\\n          noCustomizer = !customizer;\\n\\n      if (object == null) {\\n        return !length;\\n      }\\n      object = toObject(object);\\n      while (index--) {\\n        var data = matchData[index];\\n        if ((noCustomizer && data[2])\\n              ? data[1] !== object[data[0]]\\n              : !(data[0] in object)\\n            ) {\\n          return false;\\n        }\\n      }\\n      while (++index < length) {\\n        data = matchData[index];\\n        var key = data[0],\\n            objValue = object[key],\\n            srcValue = data[1];\\n\\n        if (noCustomizer && data[2]) {\\n          if (objValue === undefined && !(key in object)) {\\n            return false;\\n          }\\n        } else {\\n          var result = customizer ? customizer(objValue, srcValue, key) : undefined;\\n          if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {\\n            return false;\\n          }\\n        }\\n      }\\n      return true;\\n    }\\n\\n    /**\\n     * The base implementation of `_.map` without support for callback shorthands\\n     * and `this` binding.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array} Returns the new mapped array.\\n     */\\n    function baseMap(collection, iteratee) {\\n      var index = -1,\\n          result = isArrayLike(collection) ? Array(collection.length) : [];\\n\\n      baseEach(collection, function(value, key, collection) {\\n        result[++index] = iteratee(value, key, collection);\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.matches` which does not clone `source`.\\n     *\\n     * @private\\n     * @param {Object} source The object of property values to match.\\n     * @returns {Function} Returns the new function.\\n     */\\n    function baseMatches(source) {\\n      var matchData = getMatchData(source);\\n      if (matchData.length == 1 && matchData[0][2]) {\\n        var key = matchData[0][0],\\n            value = matchData[0][1];\\n\\n        return function(object) {\\n          if (object == null) {\\n            return false;\\n          }\\n          return object[key] === value && (value !== undefined || (key in toObject(object)));\\n        };\\n      }\\n      return function(object) {\\n        return baseIsMatch(object, matchData);\\n      };\\n    }\\n\\n    /**\\n     * The base implementation of `_.matchesProperty` which does not clone `srcValue`.\\n     *\\n     * @private\\n     * @param {string} path The path of the property to get.\\n     * @param {*} srcValue The value to compare.\\n     * @returns {Function} Returns the new function.\\n     */\\n    function baseMatchesProperty(path, srcValue) {\\n      var isArr = isArray(path),\\n          isCommon = isKey(path) && isStrictComparable(srcValue),\\n          pathKey = (path + '');\\n\\n      path = toPath(path);\\n      return function(object) {\\n        if (object == null) {\\n          return false;\\n        }\\n        var key = pathKey;\\n        object = toObject(object);\\n        if ((isArr || !isCommon) && !(key in object)) {\\n          object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\\n          if (object == null) {\\n            return false;\\n          }\\n          key = last(path);\\n          object = toObject(object);\\n        }\\n        return object[key] === srcValue\\n          ? (srcValue !== undefined || (key in object))\\n          : baseIsEqual(srcValue, object[key], undefined, true);\\n      };\\n    }\\n\\n    /**\\n     * The base implementation of `_.merge` without support for argument juggling,\\n     * multiple sources, and `this` binding `customizer` functions.\\n     *\\n     * @private\\n     * @param {Object} object The destination object.\\n     * @param {Object} source The source object.\\n     * @param {Function} [customizer] The function to customize merged values.\\n     * @param {Array} [stackA=[]] Tracks traversed source objects.\\n     * @param {Array} [stackB=[]] Associates values with source counterparts.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseMerge(object, source, customizer, stackA, stackB) {\\n      if (!isObject(object)) {\\n        return object;\\n      }\\n      var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),\\n          props = isSrcArr ? undefined : keys(source);\\n\\n      arrayEach(props || source, function(srcValue, key) {\\n        if (props) {\\n          key = srcValue;\\n          srcValue = source[key];\\n        }\\n        if (isObjectLike(srcValue)) {\\n          stackA || (stackA = []);\\n          stackB || (stackB = []);\\n          baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\\n        }\\n        else {\\n          var value = object[key],\\n              result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\\n              isCommon = result === undefined;\\n\\n          if (isCommon) {\\n            result = srcValue;\\n          }\\n          if ((result !== undefined || (isSrcArr && !(key in object))) &&\\n              (isCommon || (result === result ? (result !== value) : (value === value)))) {\\n            object[key] = result;\\n          }\\n        }\\n      });\\n      return object;\\n    }\\n\\n    /**\\n     * A specialized version of `baseMerge` for arrays and objects which performs\\n     * deep merges and tracks traversed objects enabling objects with circular\\n     * references to be merged.\\n     *\\n     * @private\\n     * @param {Object} object The destination object.\\n     * @param {Object} source The source object.\\n     * @param {string} key The key of the value to merge.\\n     * @param {Function} mergeFunc The function to merge values.\\n     * @param {Function} [customizer] The function to customize merged values.\\n     * @param {Array} [stackA=[]] Tracks traversed source objects.\\n     * @param {Array} [stackB=[]] Associates values with source counterparts.\\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\\n     */\\n    function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\\n      var length = stackA.length,\\n          srcValue = source[key];\\n\\n      while (length--) {\\n        if (stackA[length] == srcValue) {\\n          object[key] = stackB[length];\\n          return;\\n        }\\n      }\\n      var value = object[key],\\n          result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\\n          isCommon = result === undefined;\\n\\n      if (isCommon) {\\n        result = srcValue;\\n        if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {\\n          result = isArray(value)\\n            ? value\\n            : (isArrayLike(value) ? arrayCopy(value) : []);\\n        }\\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\\n          result = isArguments(value)\\n            ? toPlainObject(value)\\n            : (isPlainObject(value) ? value : {});\\n        }\\n        else {\\n          isCommon = false;\\n        }\\n      }\\n      // Add the source value to the stack of traversed objects and associate\\n      // it with its merged value.\\n      stackA.push(srcValue);\\n      stackB.push(result);\\n\\n      if (isCommon) {\\n        // Recursively merge objects and arrays (susceptible to call stack limits).\\n        object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\\n      } else if (result === result ? (result !== value) : (value === value)) {\\n        object[key] = result;\\n      }\\n    }\\n\\n    /**\\n     * The base implementation of `_.property` without support for deep paths.\\n     *\\n     * @private\\n     * @param {string} key The key of the property to get.\\n     * @returns {Function} Returns the new function.\\n     */\\n    function baseProperty(key) {\\n      return function(object) {\\n        return object == null ? undefined : object[key];\\n      };\\n    }\\n\\n    /**\\n     * A specialized version of `baseProperty` which supports deep paths.\\n     *\\n     * @private\\n     * @param {Array|string} path The path of the property to get.\\n     * @returns {Function} Returns the new function.\\n     */\\n    function basePropertyDeep(path) {\\n      var pathKey = (path + '');\\n      path = toPath(path);\\n      return function(object) {\\n        return baseGet(object, path, pathKey);\\n      };\\n    }\\n\\n    /**\\n     * The base implementation of `_.pullAt` without support for individual\\n     * index arguments and capturing the removed elements.\\n     *\\n     * @private\\n     * @param {Array} array The array to modify.\\n     * @param {number[]} indexes The indexes of elements to remove.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function basePullAt(array, indexes) {\\n      var length = array ? indexes.length : 0;\\n      while (length--) {\\n        var index = indexes[length];\\n        if (index != previous && isIndex(index)) {\\n          var previous = index;\\n          splice.call(array, index, 1);\\n        }\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * The base implementation of `_.random` without support for argument juggling\\n     * and returning floating-point numbers.\\n     *\\n     * @private\\n     * @param {number} min The minimum possible value.\\n     * @param {number} max The maximum possible value.\\n     * @returns {number} Returns the random number.\\n     */\\n    function baseRandom(min, max) {\\n      return min + nativeFloor(nativeRandom() * (max - min + 1));\\n    }\\n\\n    /**\\n     * The base implementation of `_.reduce` and `_.reduceRight` without support\\n     * for callback shorthands and `this` binding, which iterates over `collection`\\n     * using the provided `eachFunc`.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {*} accumulator The initial value.\\n     * @param {boolean} initFromCollection Specify using the first or last element\\n     *  of `collection` as the initial value.\\n     * @param {Function} eachFunc The function to iterate over `collection`.\\n     * @returns {*} Returns the accumulated value.\\n     */\\n    function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) {\\n      eachFunc(collection, function(value, index, collection) {\\n        accumulator = initFromCollection\\n          ? (initFromCollection = false, value)\\n          : iteratee(accumulator, value, index, collection);\\n      });\\n      return accumulator;\\n    }\\n\\n    /**\\n     * The base implementation of `setData` without support for hot loop detection.\\n     *\\n     * @private\\n     * @param {Function} func The function to associate metadata with.\\n     * @param {*} data The metadata.\\n     * @returns {Function} Returns `func`.\\n     */\\n    var baseSetData = !metaMap ? identity : function(func, data) {\\n      metaMap.set(func, data);\\n      return func;\\n    };\\n\\n    /**\\n     * The base implementation of `_.slice` without an iteratee call guard.\\n     *\\n     * @private\\n     * @param {Array} array The array to slice.\\n     * @param {number} [start=0] The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns the slice of `array`.\\n     */\\n    function baseSlice(array, start, end) {\\n      var index = -1,\\n          length = array.length;\\n\\n      start = start == null ? 0 : (+start || 0);\\n      if (start < 0) {\\n        start = -start > length ? 0 : (length + start);\\n      }\\n      end = (end === undefined || end > length) ? length : (+end || 0);\\n      if (end < 0) {\\n        end += length;\\n      }\\n      length = start > end ? 0 : ((end - start) >>> 0);\\n      start >>>= 0;\\n\\n      var result = Array(length);\\n      while (++index < length) {\\n        result[index] = array[index + start];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.some` without support for callback shorthands\\n     * and `this` binding.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\\n     *  else `false`.\\n     */\\n    function baseSome(collection, predicate) {\\n      var result;\\n\\n      baseEach(collection, function(value, index, collection) {\\n        result = predicate(value, index, collection);\\n        return !result;\\n      });\\n      return !!result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.sortBy` which uses `comparer` to define\\n     * the sort order of `array` and replaces criteria objects with their\\n     * corresponding values.\\n     *\\n     * @private\\n     * @param {Array} array The array to sort.\\n     * @param {Function} comparer The function to define sort order.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function baseSortBy(array, comparer) {\\n      var length = array.length;\\n\\n      array.sort(comparer);\\n      while (length--) {\\n        array[length] = array[length].value;\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * The base implementation of `_.sortByOrder` without param guards.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\\n     * @param {boolean[]} orders The sort orders of `iteratees`.\\n     * @returns {Array} Returns the new sorted array.\\n     */\\n    function baseSortByOrder(collection, iteratees, orders) {\\n      var callback = getCallback(),\\n          index = -1;\\n\\n      iteratees = arrayMap(iteratees, function(iteratee) { return callback(iteratee); });\\n\\n      var result = baseMap(collection, function(value) {\\n        var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); });\\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\\n      });\\n\\n      return baseSortBy(result, function(object, other) {\\n        return compareMultiple(object, other, orders);\\n      });\\n    }\\n\\n    /**\\n     * The base implementation of `_.sum` without support for callback shorthands\\n     * and `this` binding.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {number} Returns the sum.\\n     */\\n    function baseSum(collection, iteratee) {\\n      var result = 0;\\n      baseEach(collection, function(value, index, collection) {\\n        result += +iteratee(value, index, collection) || 0;\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.uniq` without support for callback shorthands\\n     * and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to inspect.\\n     * @param {Function} [iteratee] The function invoked per iteration.\\n     * @returns {Array} Returns the new duplicate-value-free array.\\n     */\\n    function baseUniq(array, iteratee) {\\n      var index = -1,\\n          indexOf = getIndexOf(),\\n          length = array.length,\\n          isCommon = indexOf == baseIndexOf,\\n          isLarge = isCommon && length >= LARGE_ARRAY_SIZE,\\n          seen = isLarge ? createCache() : null,\\n          result = [];\\n\\n      if (seen) {\\n        indexOf = cacheIndexOf;\\n        isCommon = false;\\n      } else {\\n        isLarge = false;\\n        seen = iteratee ? [] : result;\\n      }\\n      outer:\\n      while (++index < length) {\\n        var value = array[index],\\n            computed = iteratee ? iteratee(value, index, array) : value;\\n\\n        if (isCommon && value === value) {\\n          var seenIndex = seen.length;\\n          while (seenIndex--) {\\n            if (seen[seenIndex] === computed) {\\n              continue outer;\\n            }\\n          }\\n          if (iteratee) {\\n            seen.push(computed);\\n          }\\n          result.push(value);\\n        }\\n        else if (indexOf(seen, computed, 0) < 0) {\\n          if (iteratee || isLarge) {\\n            seen.push(computed);\\n          }\\n          result.push(value);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.values` and `_.valuesIn` which creates an\\n     * array of `object` property values corresponding to the property names\\n     * of `props`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {Array} props The property names to get values for.\\n     * @returns {Object} Returns the array of property values.\\n     */\\n    function baseValues(object, props) {\\n      var index = -1,\\n          length = props.length,\\n          result = Array(length);\\n\\n      while (++index < length) {\\n        result[index] = object[props[index]];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.dropRightWhile`, `_.dropWhile`, `_.takeRightWhile`,\\n     * and `_.takeWhile` without support for callback shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to query.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Array} Returns the slice of `array`.\\n     */\\n    function baseWhile(array, predicate, isDrop, fromRight) {\\n      var length = array.length,\\n          index = fromRight ? length : -1;\\n\\n      while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {}\\n      return isDrop\\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\\n    }\\n\\n    /**\\n     * The base implementation of `wrapperValue` which returns the result of\\n     * performing a sequence of actions on the unwrapped `value`, where each\\n     * successive action is supplied the return value of the previous.\\n     *\\n     * @private\\n     * @param {*} value The unwrapped value.\\n     * @param {Array} actions Actions to peform to resolve the unwrapped value.\\n     * @returns {*} Returns the resolved value.\\n     */\\n    function baseWrapperValue(value, actions) {\\n      var result = value;\\n      if (result instanceof LazyWrapper) {\\n        result = result.value();\\n      }\\n      var index = -1,\\n          length = actions.length;\\n\\n      while (++index < length) {\\n        var action = actions[index];\\n        result = action.func.apply(action.thisArg, arrayPush([result], action.args));\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Performs a binary search of `array` to determine the index at which `value`\\n     * should be inserted into `array` in order to maintain its sort order.\\n     *\\n     * @private\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     */\\n    function binaryIndex(array, value, retHighest) {\\n      var low = 0,\\n          high = array ? array.length : low;\\n\\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\\n        while (low < high) {\\n          var mid = (low + high) >>> 1,\\n              computed = array[mid];\\n\\n          if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) {\\n            low = mid + 1;\\n          } else {\\n            high = mid;\\n          }\\n        }\\n        return high;\\n      }\\n      return binaryIndexBy(array, value, identity, retHighest);\\n    }\\n\\n    /**\\n     * This function is like `binaryIndex` except that it invokes `iteratee` for\\n     * `value` and each element of `array` to compute their sort ranking. The\\n     * iteratee is invoked with one argument; (value).\\n     *\\n     * @private\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     */\\n    function binaryIndexBy(array, value, iteratee, retHighest) {\\n      value = iteratee(value);\\n\\n      var low = 0,\\n          high = array ? array.length : 0,\\n          valIsNaN = value !== value,\\n          valIsNull = value === null,\\n          valIsUndef = value === undefined;\\n\\n      while (low < high) {\\n        var mid = nativeFloor((low + high) / 2),\\n            computed = iteratee(array[mid]),\\n            isDef = computed !== undefined,\\n            isReflexive = computed === computed;\\n\\n        if (valIsNaN) {\\n          var setLow = isReflexive || retHighest;\\n        } else if (valIsNull) {\\n          setLow = isReflexive && isDef && (retHighest || computed != null);\\n        } else if (valIsUndef) {\\n          setLow = isReflexive && (retHighest || isDef);\\n        } else if (computed == null) {\\n          setLow = false;\\n        } else {\\n          setLow = retHighest ? (computed <= value) : (computed < value);\\n        }\\n        if (setLow) {\\n          low = mid + 1;\\n        } else {\\n          high = mid;\\n        }\\n      }\\n      return nativeMin(high, MAX_ARRAY_INDEX);\\n    }\\n\\n    /**\\n     * A specialized version of `baseCallback` which only supports `this` binding\\n     * and specifying the number of arguments to provide to `func`.\\n     *\\n     * @private\\n     * @param {Function} func The function to bind.\\n     * @param {*} thisArg The `this` binding of `func`.\\n     * @param {number} [argCount] The number of arguments to provide to `func`.\\n     * @returns {Function} Returns the callback.\\n     */\\n    function bindCallback(func, thisArg, argCount) {\\n      if (typeof func != 'function') {\\n        return identity;\\n      }\\n      if (thisArg === undefined) {\\n        return func;\\n      }\\n      switch (argCount) {\\n        case 1: return function(value) {\\n          return func.call(thisArg, value);\\n        };\\n        case 3: return function(value, index, collection) {\\n          return func.call(thisArg, value, index, collection);\\n        };\\n        case 4: return function(accumulator, value, index, collection) {\\n          return func.call(thisArg, accumulator, value, index, collection);\\n        };\\n        case 5: return function(value, other, key, object, source) {\\n          return func.call(thisArg, value, other, key, object, source);\\n        };\\n      }\\n      return function() {\\n        return func.apply(thisArg, arguments);\\n      };\\n    }\\n\\n    /**\\n     * Creates a clone of the given array buffer.\\n     *\\n     * @private\\n     * @param {ArrayBuffer} buffer The array buffer to clone.\\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\\n     */\\n    function bufferClone(buffer) {\\n      var result = new ArrayBuffer(buffer.byteLength),\\n          view = new Uint8Array(result);\\n\\n      view.set(new Uint8Array(buffer));\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an array that is the composition of partially applied arguments,\\n     * placeholders, and provided arguments into a single array of arguments.\\n     *\\n     * @private\\n     * @param {Array|Object} args The provided arguments.\\n     * @param {Array} partials The arguments to prepend to those provided.\\n     * @param {Array} holders The `partials` placeholder indexes.\\n     * @returns {Array} Returns the new array of composed arguments.\\n     */\\n    function composeArgs(args, partials, holders) {\\n      var holdersLength = holders.length,\\n          argsIndex = -1,\\n          argsLength = nativeMax(args.length - holdersLength, 0),\\n          leftIndex = -1,\\n          leftLength = partials.length,\\n          result = Array(leftLength + argsLength);\\n\\n      while (++leftIndex < leftLength) {\\n        result[leftIndex] = partials[leftIndex];\\n      }\\n      while (++argsIndex < holdersLength) {\\n        result[holders[argsIndex]] = args[argsIndex];\\n      }\\n      while (argsLength--) {\\n        result[leftIndex++] = args[argsIndex++];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * This function is like `composeArgs` except that the arguments composition\\n     * is tailored for `_.partialRight`.\\n     *\\n     * @private\\n     * @param {Array|Object} args The provided arguments.\\n     * @param {Array} partials The arguments to append to those provided.\\n     * @param {Array} holders The `partials` placeholder indexes.\\n     * @returns {Array} Returns the new array of composed arguments.\\n     */\\n    function composeArgsRight(args, partials, holders) {\\n      var holdersIndex = -1,\\n          holdersLength = holders.length,\\n          argsIndex = -1,\\n          argsLength = nativeMax(args.length - holdersLength, 0),\\n          rightIndex = -1,\\n          rightLength = partials.length,\\n          result = Array(argsLength + rightLength);\\n\\n      while (++argsIndex < argsLength) {\\n        result[argsIndex] = args[argsIndex];\\n      }\\n      var offset = argsIndex;\\n      while (++rightIndex < rightLength) {\\n        result[offset + rightIndex] = partials[rightIndex];\\n      }\\n      while (++holdersIndex < holdersLength) {\\n        result[offset + holders[holdersIndex]] = args[argsIndex++];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Creates a `_.countBy`, `_.groupBy`, `_.indexBy`, or `_.partition` function.\\n     *\\n     * @private\\n     * @param {Function} setter The function to set keys and values of the accumulator object.\\n     * @param {Function} [initializer] The function to initialize the accumulator object.\\n     * @returns {Function} Returns the new aggregator function.\\n     */\\n    function createAggregator(setter, initializer) {\\n      return function(collection, iteratee, thisArg) {\\n        var result = initializer ? initializer() : {};\\n        iteratee = getCallback(iteratee, thisArg, 3);\\n\\n        if (isArray(collection)) {\\n          var index = -1,\\n              length = collection.length;\\n\\n          while (++index < length) {\\n            var value = collection[index];\\n            setter(result, value, iteratee(value, index, collection), collection);\\n          }\\n        } else {\\n          baseEach(collection, function(value, key, collection) {\\n            setter(result, value, iteratee(value, key, collection), collection);\\n          });\\n        }\\n        return result;\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.assign`, `_.defaults`, or `_.merge` function.\\n     *\\n     * @private\\n     * @param {Function} assigner The function to assign values.\\n     * @returns {Function} Returns the new assigner function.\\n     */\\n    function createAssigner(assigner) {\\n      return restParam(function(object, sources) {\\n        var index = -1,\\n            length = object == null ? 0 : sources.length,\\n            customizer = length > 2 ? sources[length - 2] : undefined,\\n            guard = length > 2 ? sources[2] : undefined,\\n            thisArg = length > 1 ? sources[length - 1] : undefined;\\n\\n        if (typeof customizer == 'function') {\\n          customizer = bindCallback(customizer, thisArg, 5);\\n          length -= 2;\\n        } else {\\n          customizer = typeof thisArg == 'function' ? thisArg : undefined;\\n          length -= (customizer ? 1 : 0);\\n        }\\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\\n          customizer = length < 3 ? undefined : customizer;\\n          length = 1;\\n        }\\n        while (++index < length) {\\n          var source = sources[index];\\n          if (source) {\\n            assigner(object, source, customizer);\\n          }\\n        }\\n        return object;\\n      });\\n    }\\n\\n    /**\\n     * Creates a `baseEach` or `baseEachRight` function.\\n     *\\n     * @private\\n     * @param {Function} eachFunc The function to iterate over a collection.\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new base function.\\n     */\\n    function createBaseEach(eachFunc, fromRight) {\\n      return function(collection, iteratee) {\\n        var length = collection ? getLength(collection) : 0;\\n        if (!isLength(length)) {\\n          return eachFunc(collection, iteratee);\\n        }\\n        var index = fromRight ? length : -1,\\n            iterable = toObject(collection);\\n\\n        while ((fromRight ? index-- : ++index < length)) {\\n          if (iteratee(iterable[index], index, iterable) === false) {\\n            break;\\n          }\\n        }\\n        return collection;\\n      };\\n    }\\n\\n    /**\\n     * Creates a base function for `_.forIn` or `_.forInRight`.\\n     *\\n     * @private\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new base function.\\n     */\\n    function createBaseFor(fromRight) {\\n      return function(object, iteratee, keysFunc) {\\n        var iterable = toObject(object),\\n            props = keysFunc(object),\\n            length = props.length,\\n            index = fromRight ? length : -1;\\n\\n        while ((fromRight ? index-- : ++index < length)) {\\n          var key = props[index];\\n          if (iteratee(iterable[key], key, iterable) === false) {\\n            break;\\n          }\\n        }\\n        return object;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that wraps `func` and invokes it with the `this`\\n     * binding of `thisArg`.\\n     *\\n     * @private\\n     * @param {Function} func The function to bind.\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @returns {Function} Returns the new bound function.\\n     */\\n    function createBindWrapper(func, thisArg) {\\n      var Ctor = createCtorWrapper(func);\\n\\n      function wrapper() {\\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\\n        return fn.apply(thisArg, arguments);\\n      }\\n      return wrapper;\\n    }\\n\\n    /**\\n     * Creates a `Set` cache object to optimize linear searches of large arrays.\\n     *\\n     * @private\\n     * @param {Array} [values] The values to cache.\\n     * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`.\\n     */\\n    function createCache(values) {\\n      return (nativeCreate && Set) ? new SetCache(values) : null;\\n    }\\n\\n    /**\\n     * Creates a function that produces compound words out of the words in a\\n     * given string.\\n     *\\n     * @private\\n     * @param {Function} callback The function to combine each word.\\n     * @returns {Function} Returns the new compounder function.\\n     */\\n    function createCompounder(callback) {\\n      return function(string) {\\n        var index = -1,\\n            array = words(deburr(string)),\\n            length = array.length,\\n            result = '';\\n\\n        while (++index < length) {\\n          result = callback(result, array[index], index);\\n        }\\n        return result;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that produces an instance of `Ctor` regardless of\\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\\n     *\\n     * @private\\n     * @param {Function} Ctor The constructor to wrap.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createCtorWrapper(Ctor) {\\n      return function() {\\n        // Use a `switch` statement to work with class constructors.\\n        // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\\n        // for more details.\\n        var args = arguments;\\n        switch (args.length) {\\n          case 0: return new Ctor;\\n          case 1: return new Ctor(args[0]);\\n          case 2: return new Ctor(args[0], args[1]);\\n          case 3: return new Ctor(args[0], args[1], args[2]);\\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\\n        }\\n        var thisBinding = baseCreate(Ctor.prototype),\\n            result = Ctor.apply(thisBinding, args);\\n\\n        // Mimic the constructor's `return` behavior.\\n        // See https://es5.github.io/#x13.2.2 for more details.\\n        return isObject(result) ? result : thisBinding;\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.curry` or `_.curryRight` function.\\n     *\\n     * @private\\n     * @param {boolean} flag The curry bit flag.\\n     * @returns {Function} Returns the new curry function.\\n     */\\n    function createCurry(flag) {\\n      function curryFunc(func, arity, guard) {\\n        if (guard && isIterateeCall(func, arity, guard)) {\\n          arity = undefined;\\n        }\\n        var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity);\\n        result.placeholder = curryFunc.placeholder;\\n        return result;\\n      }\\n      return curryFunc;\\n    }\\n\\n    /**\\n     * Creates a `_.defaults` or `_.defaultsDeep` function.\\n     *\\n     * @private\\n     * @param {Function} assigner The function to assign values.\\n     * @param {Function} customizer The function to customize assigned values.\\n     * @returns {Function} Returns the new defaults function.\\n     */\\n    function createDefaults(assigner, customizer) {\\n      return restParam(function(args) {\\n        var object = args[0];\\n        if (object == null) {\\n          return object;\\n        }\\n        args.push(customizer);\\n        return assigner.apply(undefined, args);\\n      });\\n    }\\n\\n    /**\\n     * Creates a `_.max` or `_.min` function.\\n     *\\n     * @private\\n     * @param {Function} comparator The function used to compare values.\\n     * @param {*} exValue The initial extremum value.\\n     * @returns {Function} Returns the new extremum function.\\n     */\\n    function createExtremum(comparator, exValue) {\\n      return function(collection, iteratee, thisArg) {\\n        if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\\n          iteratee = undefined;\\n        }\\n        iteratee = getCallback(iteratee, thisArg, 3);\\n        if (iteratee.length == 1) {\\n          collection = isArray(collection) ? collection : toIterable(collection);\\n          var result = arrayExtremum(collection, iteratee, comparator, exValue);\\n          if (!(collection.length && result === exValue)) {\\n            return result;\\n          }\\n        }\\n        return baseExtremum(collection, iteratee, comparator, exValue);\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.find` or `_.findLast` function.\\n     *\\n     * @private\\n     * @param {Function} eachFunc The function to iterate over a collection.\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new find function.\\n     */\\n    function createFind(eachFunc, fromRight) {\\n      return function(collection, predicate, thisArg) {\\n        predicate = getCallback(predicate, thisArg, 3);\\n        if (isArray(collection)) {\\n          var index = baseFindIndex(collection, predicate, fromRight);\\n          return index > -1 ? collection[index] : undefined;\\n        }\\n        return baseFind(collection, predicate, eachFunc);\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.findIndex` or `_.findLastIndex` function.\\n     *\\n     * @private\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new find function.\\n     */\\n    function createFindIndex(fromRight) {\\n      return function(array, predicate, thisArg) {\\n        if (!(array && array.length)) {\\n          return -1;\\n        }\\n        predicate = getCallback(predicate, thisArg, 3);\\n        return baseFindIndex(array, predicate, fromRight);\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.findKey` or `_.findLastKey` function.\\n     *\\n     * @private\\n     * @param {Function} objectFunc The function to iterate over an object.\\n     * @returns {Function} Returns the new find function.\\n     */\\n    function createFindKey(objectFunc) {\\n      return function(object, predicate, thisArg) {\\n        predicate = getCallback(predicate, thisArg, 3);\\n        return baseFind(object, predicate, objectFunc, true);\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.flow` or `_.flowRight` function.\\n     *\\n     * @private\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new flow function.\\n     */\\n    function createFlow(fromRight) {\\n      return function() {\\n        var wrapper,\\n            length = arguments.length,\\n            index = fromRight ? length : -1,\\n            leftIndex = 0,\\n            funcs = Array(length);\\n\\n        while ((fromRight ? index-- : ++index < length)) {\\n          var func = funcs[leftIndex++] = arguments[index];\\n          if (typeof func != 'function') {\\n            throw new TypeError(FUNC_ERROR_TEXT);\\n          }\\n          if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') {\\n            wrapper = new LodashWrapper([], true);\\n          }\\n        }\\n        index = wrapper ? -1 : length;\\n        while (++index < length) {\\n          func = funcs[index];\\n\\n          var funcName = getFuncName(func),\\n              data = funcName == 'wrapper' ? getData(func) : undefined;\\n\\n          if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) {\\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\\n          } else {\\n            wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func);\\n          }\\n        }\\n        return function() {\\n          var args = arguments,\\n              value = args[0];\\n\\n          if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) {\\n            return wrapper.plant(value).value();\\n          }\\n          var index = 0,\\n              result = length ? funcs[index].apply(this, args) : value;\\n\\n          while (++index < length) {\\n            result = funcs[index].call(this, result);\\n          }\\n          return result;\\n        };\\n      };\\n    }\\n\\n    /**\\n     * Creates a function for `_.forEach` or `_.forEachRight`.\\n     *\\n     * @private\\n     * @param {Function} arrayFunc The function to iterate over an array.\\n     * @param {Function} eachFunc The function to iterate over a collection.\\n     * @returns {Function} Returns the new each function.\\n     */\\n    function createForEach(arrayFunc, eachFunc) {\\n      return function(collection, iteratee, thisArg) {\\n        return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\\n          ? arrayFunc(collection, iteratee)\\n          : eachFunc(collection, bindCallback(iteratee, thisArg, 3));\\n      };\\n    }\\n\\n    /**\\n     * Creates a function for `_.forIn` or `_.forInRight`.\\n     *\\n     * @private\\n     * @param {Function} objectFunc The function to iterate over an object.\\n     * @returns {Function} Returns the new each function.\\n     */\\n    function createForIn(objectFunc) {\\n      return function(object, iteratee, thisArg) {\\n        if (typeof iteratee != 'function' || thisArg !== undefined) {\\n          iteratee = bindCallback(iteratee, thisArg, 3);\\n        }\\n        return objectFunc(object, iteratee, keysIn);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function for `_.forOwn` or `_.forOwnRight`.\\n     *\\n     * @private\\n     * @param {Function} objectFunc The function to iterate over an object.\\n     * @returns {Function} Returns the new each function.\\n     */\\n    function createForOwn(objectFunc) {\\n      return function(object, iteratee, thisArg) {\\n        if (typeof iteratee != 'function' || thisArg !== undefined) {\\n          iteratee = bindCallback(iteratee, thisArg, 3);\\n        }\\n        return objectFunc(object, iteratee);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function for `_.mapKeys` or `_.mapValues`.\\n     *\\n     * @private\\n     * @param {boolean} [isMapKeys] Specify mapping keys instead of values.\\n     * @returns {Function} Returns the new map function.\\n     */\\n    function createObjectMapper(isMapKeys) {\\n      return function(object, iteratee, thisArg) {\\n        var result = {};\\n        iteratee = getCallback(iteratee, thisArg, 3);\\n\\n        baseForOwn(object, function(value, key, object) {\\n          var mapped = iteratee(value, key, object);\\n          key = isMapKeys ? mapped : key;\\n          value = isMapKeys ? value : mapped;\\n          result[key] = value;\\n        });\\n        return result;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function for `_.padLeft` or `_.padRight`.\\n     *\\n     * @private\\n     * @param {boolean} [fromRight] Specify padding from the right.\\n     * @returns {Function} Returns the new pad function.\\n     */\\n    function createPadDir(fromRight) {\\n      return function(string, length, chars) {\\n        string = baseToString(string);\\n        return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string);\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.partial` or `_.partialRight` function.\\n     *\\n     * @private\\n     * @param {boolean} flag The partial bit flag.\\n     * @returns {Function} Returns the new partial function.\\n     */\\n    function createPartial(flag) {\\n      var partialFunc = restParam(function(func, partials) {\\n        var holders = replaceHolders(partials, partialFunc.placeholder);\\n        return createWrapper(func, flag, undefined, partials, holders);\\n      });\\n      return partialFunc;\\n    }\\n\\n    /**\\n     * Creates a function for `_.reduce` or `_.reduceRight`.\\n     *\\n     * @private\\n     * @param {Function} arrayFunc The function to iterate over an array.\\n     * @param {Function} eachFunc The function to iterate over a collection.\\n     * @returns {Function} Returns the new each function.\\n     */\\n    function createReduce(arrayFunc, eachFunc) {\\n      return function(collection, iteratee, accumulator, thisArg) {\\n        var initFromArray = arguments.length < 3;\\n        return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\\n          ? arrayFunc(collection, iteratee, accumulator, initFromArray)\\n          : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that wraps `func` and invokes it with optional `this`\\n     * binding of, partial application, and currying.\\n     *\\n     * @private\\n     * @param {Function|string} func The function or method name to reference.\\n     * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @param {Array} [partials] The arguments to prepend to those provided to the new function.\\n     * @param {Array} [holders] The `partials` placeholder indexes.\\n     * @param {Array} [partialsRight] The arguments to append to those provided to the new function.\\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\\n     * @param {Array} [argPos] The argument positions of the new function.\\n     * @param {number} [ary] The arity cap of `func`.\\n     * @param {number} [arity] The arity of `func`.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\\n      var isAry = bitmask & ARY_FLAG,\\n          isBind = bitmask & BIND_FLAG,\\n          isBindKey = bitmask & BIND_KEY_FLAG,\\n          isCurry = bitmask & CURRY_FLAG,\\n          isCurryBound = bitmask & CURRY_BOUND_FLAG,\\n          isCurryRight = bitmask & CURRY_RIGHT_FLAG,\\n          Ctor = isBindKey ? undefined : createCtorWrapper(func);\\n\\n      function wrapper() {\\n        // Avoid `arguments` object use disqualifying optimizations by\\n        // converting it to an array before providing it to other functions.\\n        var length = arguments.length,\\n            index = length,\\n            args = Array(length);\\n\\n        while (index--) {\\n          args[index] = arguments[index];\\n        }\\n        if (partials) {\\n          args = composeArgs(args, partials, holders);\\n        }\\n        if (partialsRight) {\\n          args = composeArgsRight(args, partialsRight, holdersRight);\\n        }\\n        if (isCurry || isCurryRight) {\\n          var placeholder = wrapper.placeholder,\\n              argsHolders = replaceHolders(args, placeholder);\\n\\n          length -= argsHolders.length;\\n          if (length < arity) {\\n            var newArgPos = argPos ? arrayCopy(argPos) : undefined,\\n                newArity = nativeMax(arity - length, 0),\\n                newsHolders = isCurry ? argsHolders : undefined,\\n                newHoldersRight = isCurry ? undefined : argsHolders,\\n                newPartials = isCurry ? args : undefined,\\n                newPartialsRight = isCurry ? undefined : args;\\n\\n            bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);\\n            bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);\\n\\n            if (!isCurryBound) {\\n              bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);\\n            }\\n            var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity],\\n                result = createHybridWrapper.apply(undefined, newData);\\n\\n            if (isLaziable(func)) {\\n              setData(result, newData);\\n            }\\n            result.placeholder = placeholder;\\n            return result;\\n          }\\n        }\\n        var thisBinding = isBind ? thisArg : this,\\n            fn = isBindKey ? thisBinding[func] : func;\\n\\n        if (argPos) {\\n          args = reorder(args, argPos);\\n        }\\n        if (isAry && ary < args.length) {\\n          args.length = ary;\\n        }\\n        if (this && this !== root && this instanceof wrapper) {\\n          fn = Ctor || createCtorWrapper(func);\\n        }\\n        return fn.apply(thisBinding, args);\\n      }\\n      return wrapper;\\n    }\\n\\n    /**\\n     * Creates the padding required for `string` based on the given `length`.\\n     * The `chars` string is truncated if the number of characters exceeds `length`.\\n     *\\n     * @private\\n     * @param {string} string The string to create padding for.\\n     * @param {number} [length=0] The padding length.\\n     * @param {string} [chars=' '] The string used as padding.\\n     * @returns {string} Returns the pad for `string`.\\n     */\\n    function createPadding(string, length, chars) {\\n      var strLength = string.length;\\n      length = +length;\\n\\n      if (strLength >= length || !nativeIsFinite(length)) {\\n        return '';\\n      }\\n      var padLength = length - strLength;\\n      chars = chars == null ? ' ' : (chars + '');\\n      return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength);\\n    }\\n\\n    /**\\n     * Creates a function that wraps `func` and invokes it with the optional `this`\\n     * binding of `thisArg` and the `partials` prepended to those provided to\\n     * the wrapper.\\n     *\\n     * @private\\n     * @param {Function} func The function to partially apply arguments to.\\n     * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.\\n     * @param {*} thisArg The `this` binding of `func`.\\n     * @param {Array} partials The arguments to prepend to those provided to the new function.\\n     * @returns {Function} Returns the new bound function.\\n     */\\n    function createPartialWrapper(func, bitmask, thisArg, partials) {\\n      var isBind = bitmask & BIND_FLAG,\\n          Ctor = createCtorWrapper(func);\\n\\n      function wrapper() {\\n        // Avoid `arguments` object use disqualifying optimizations by\\n        // converting it to an array before providing it `func`.\\n        var argsIndex = -1,\\n            argsLength = arguments.length,\\n            leftIndex = -1,\\n            leftLength = partials.length,\\n            args = Array(leftLength + argsLength);\\n\\n        while (++leftIndex < leftLength) {\\n          args[leftIndex] = partials[leftIndex];\\n        }\\n        while (argsLength--) {\\n          args[leftIndex++] = arguments[++argsIndex];\\n        }\\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\\n        return fn.apply(isBind ? thisArg : this, args);\\n      }\\n      return wrapper;\\n    }\\n\\n    /**\\n     * Creates a `_.ceil`, `_.floor`, or `_.round` function.\\n     *\\n     * @private\\n     * @param {string} methodName The name of the `Math` method to use when rounding.\\n     * @returns {Function} Returns the new round function.\\n     */\\n    function createRound(methodName) {\\n      var func = Math[methodName];\\n      return function(number, precision) {\\n        precision = precision === undefined ? 0 : (+precision || 0);\\n        if (precision) {\\n          precision = pow(10, precision);\\n          return func(number * precision) / precision;\\n        }\\n        return func(number);\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.sortedIndex` or `_.sortedLastIndex` function.\\n     *\\n     * @private\\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\\n     * @returns {Function} Returns the new index function.\\n     */\\n    function createSortedIndex(retHighest) {\\n      return function(array, value, iteratee, thisArg) {\\n        var callback = getCallback(iteratee);\\n        return (iteratee == null && callback === baseCallback)\\n          ? binaryIndex(array, value, retHighest)\\n          : binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that either curries or invokes `func` with optional\\n     * `this` binding and partially applied arguments.\\n     *\\n     * @private\\n     * @param {Function|string} func The function or method name to reference.\\n     * @param {number} bitmask The bitmask of flags.\\n     *  The bitmask may be composed of the following flags:\\n     *     1 - `_.bind`\\n     *     2 - `_.bindKey`\\n     *     4 - `_.curry` or `_.curryRight` of a bound function\\n     *     8 - `_.curry`\\n     *    16 - `_.curryRight`\\n     *    32 - `_.partial`\\n     *    64 - `_.partialRight`\\n     *   128 - `_.rearg`\\n     *   256 - `_.ary`\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @param {Array} [partials] The arguments to be partially applied.\\n     * @param {Array} [holders] The `partials` placeholder indexes.\\n     * @param {Array} [argPos] The argument positions of the new function.\\n     * @param {number} [ary] The arity cap of `func`.\\n     * @param {number} [arity] The arity of `func`.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\\n      var isBindKey = bitmask & BIND_KEY_FLAG;\\n      if (!isBindKey && typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      var length = partials ? partials.length : 0;\\n      if (!length) {\\n        bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);\\n        partials = holders = undefined;\\n      }\\n      length -= (holders ? holders.length : 0);\\n      if (bitmask & PARTIAL_RIGHT_FLAG) {\\n        var partialsRight = partials,\\n            holdersRight = holders;\\n\\n        partials = holders = undefined;\\n      }\\n      var data = isBindKey ? undefined : getData(func),\\n          newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];\\n\\n      if (data) {\\n        mergeData(newData, data);\\n        bitmask = newData[1];\\n        arity = newData[9];\\n      }\\n      newData[9] = arity == null\\n        ? (isBindKey ? 0 : func.length)\\n        : (nativeMax(arity - length, 0) || 0);\\n\\n      if (bitmask == BIND_FLAG) {\\n        var result = createBindWrapper(newData[0], newData[2]);\\n      } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) {\\n        result = createPartialWrapper.apply(undefined, newData);\\n      } else {\\n        result = createHybridWrapper.apply(undefined, newData);\\n      }\\n      var setter = data ? baseSetData : setData;\\n      return setter(result, newData);\\n    }\\n\\n    /**\\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\\n     * partial deep comparisons.\\n     *\\n     * @private\\n     * @param {Array} array The array to compare.\\n     * @param {Array} other The other array to compare.\\n     * @param {Function} equalFunc The function to determine equivalents of values.\\n     * @param {Function} [customizer] The function to customize comparing arrays.\\n     * @param {boolean} [isLoose] Specify performing partial comparisons.\\n     * @param {Array} [stackA] Tracks traversed `value` objects.\\n     * @param {Array} [stackB] Tracks traversed `other` objects.\\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\\n     */\\n    function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {\\n      var index = -1,\\n          arrLength = array.length,\\n          othLength = other.length;\\n\\n      if (arrLength != othLength && !(isLoose && othLength > arrLength)) {\\n        return false;\\n      }\\n      // Ignore non-index properties.\\n      while (++index < arrLength) {\\n        var arrValue = array[index],\\n            othValue = other[index],\\n            result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;\\n\\n        if (result !== undefined) {\\n          if (result) {\\n            continue;\\n          }\\n          return false;\\n        }\\n        // Recursively compare arrays (susceptible to call stack limits).\\n        if (isLoose) {\\n          if (!arraySome(other, function(othValue) {\\n                return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\\n              })) {\\n            return false;\\n          }\\n        } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    }\\n\\n    /**\\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\\n     * the same `toStringTag`.\\n     *\\n     * **Note:** This function only supports comparing values with tags of\\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\\n     *\\n     * @private\\n     * @param {Object} object The object to compare.\\n     * @param {Object} other The other object to compare.\\n     * @param {string} tag The `toStringTag` of the objects to compare.\\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\\n     */\\n    function equalByTag(object, other, tag) {\\n      switch (tag) {\\n        case boolTag:\\n        case dateTag:\\n          // Coerce dates and booleans to numbers, dates to milliseconds and booleans\\n          // to `1` or `0` treating invalid dates coerced to `NaN` as not equal.\\n          return +object == +other;\\n\\n        case errorTag:\\n          return object.name == other.name && object.message == other.message;\\n\\n        case numberTag:\\n          // Treat `NaN` vs. `NaN` as equal.\\n          return (object != +object)\\n            ? other != +other\\n            : object == +other;\\n\\n        case regexpTag:\\n        case stringTag:\\n          // Coerce regexes to strings and treat strings primitives and string\\n          // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details.\\n          return object == (other + '');\\n      }\\n      return false;\\n    }\\n\\n    /**\\n     * A specialized version of `baseIsEqualDeep` for objects with support for\\n     * partial deep comparisons.\\n     *\\n     * @private\\n     * @param {Object} object The object to compare.\\n     * @param {Object} other The other object to compare.\\n     * @param {Function} equalFunc The function to determine equivalents of values.\\n     * @param {Function} [customizer] The function to customize comparing values.\\n     * @param {boolean} [isLoose] Specify performing partial comparisons.\\n     * @param {Array} [stackA] Tracks traversed `value` objects.\\n     * @param {Array} [stackB] Tracks traversed `other` objects.\\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\\n     */\\n    function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\\n      var objProps = keys(object),\\n          objLength = objProps.length,\\n          othProps = keys(other),\\n          othLength = othProps.length;\\n\\n      if (objLength != othLength && !isLoose) {\\n        return false;\\n      }\\n      var index = objLength;\\n      while (index--) {\\n        var key = objProps[index];\\n        if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {\\n          return false;\\n        }\\n      }\\n      var skipCtor = isLoose;\\n      while (++index < objLength) {\\n        key = objProps[index];\\n        var objValue = object[key],\\n            othValue = other[key],\\n            result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;\\n\\n        // Recursively compare objects (susceptible to call stack limits).\\n        if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {\\n          return false;\\n        }\\n        skipCtor || (skipCtor = key == 'constructor');\\n      }\\n      if (!skipCtor) {\\n        var objCtor = object.constructor,\\n            othCtor = other.constructor;\\n\\n        // Non `Object` object instances with different constructors are not equal.\\n        if (objCtor != othCtor &&\\n            ('constructor' in object && 'constructor' in other) &&\\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    }\\n\\n    /**\\n     * Gets the appropriate \\\"callback\\\" function. If the `_.callback` method is\\n     * customized this function returns the custom method, otherwise it returns\\n     * the `baseCallback` function. If arguments are provided the chosen function\\n     * is invoked with them and its result is returned.\\n     *\\n     * @private\\n     * @returns {Function} Returns the chosen function or its result.\\n     */\\n    function getCallback(func, thisArg, argCount) {\\n      var result = lodash.callback || callback;\\n      result = result === callback ? baseCallback : result;\\n      return argCount ? result(func, thisArg, argCount) : result;\\n    }\\n\\n    /**\\n     * Gets metadata for `func`.\\n     *\\n     * @private\\n     * @param {Function} func The function to query.\\n     * @returns {*} Returns the metadata for `func`.\\n     */\\n    var getData = !metaMap ? noop : function(func) {\\n      return metaMap.get(func);\\n    };\\n\\n    /**\\n     * Gets the name of `func`.\\n     *\\n     * @private\\n     * @param {Function} func The function to query.\\n     * @returns {string} Returns the function name.\\n     */\\n    function getFuncName(func) {\\n      var result = func.name,\\n          array = realNames[result],\\n          length = array ? array.length : 0;\\n\\n      while (length--) {\\n        var data = array[length],\\n            otherFunc = data.func;\\n        if (otherFunc == null || otherFunc == func) {\\n          return data.name;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the appropriate \\\"indexOf\\\" function. If the `_.indexOf` method is\\n     * customized this function returns the custom method, otherwise it returns\\n     * the `baseIndexOf` function. If arguments are provided the chosen function\\n     * is invoked with them and its result is returned.\\n     *\\n     * @private\\n     * @returns {Function|number} Returns the chosen function or its result.\\n     */\\n    function getIndexOf(collection, target, fromIndex) {\\n      var result = lodash.indexOf || indexOf;\\n      result = result === indexOf ? baseIndexOf : result;\\n      return collection ? result(collection, target, fromIndex) : result;\\n    }\\n\\n    /**\\n     * Gets the \\\"length\\\" property value of `object`.\\n     *\\n     * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\\n     * that affects Safari on at least iOS 8.1-8.3 ARM64.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {*} Returns the \\\"length\\\" value.\\n     */\\n    var getLength = baseProperty('length');\\n\\n    /**\\n     * Gets the propery names, values, and compare flags of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the match data of `object`.\\n     */\\n    function getMatchData(object) {\\n      var result = pairs(object),\\n          length = result.length;\\n\\n      while (length--) {\\n        result[length][2] = isStrictComparable(result[length][1]);\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the native function at `key` of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {string} key The key of the method to get.\\n     * @returns {*} Returns the function if it's native, else `undefined`.\\n     */\\n    function getNative(object, key) {\\n      var value = object == null ? undefined : object[key];\\n      return isNative(value) ? value : undefined;\\n    }\\n\\n    /**\\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\\n     *\\n     * @private\\n     * @param {number} start The start of the view.\\n     * @param {number} end The end of the view.\\n     * @param {Array} transforms The transformations to apply to the view.\\n     * @returns {Object} Returns an object containing the `start` and `end`\\n     *  positions of the view.\\n     */\\n    function getView(start, end, transforms) {\\n      var index = -1,\\n          length = transforms.length;\\n\\n      while (++index < length) {\\n        var data = transforms[index],\\n            size = data.size;\\n\\n        switch (data.type) {\\n          case 'drop':      start += size; break;\\n          case 'dropRight': end -= size; break;\\n          case 'take':      end = nativeMin(end, start + size); break;\\n          case 'takeRight': start = nativeMax(start, end - size); break;\\n        }\\n      }\\n      return { 'start': start, 'end': end };\\n    }\\n\\n    /**\\n     * Initializes an array clone.\\n     *\\n     * @private\\n     * @param {Array} array The array to clone.\\n     * @returns {Array} Returns the initialized clone.\\n     */\\n    function initCloneArray(array) {\\n      var length = array.length,\\n          result = new array.constructor(length);\\n\\n      // Add array properties assigned by `RegExp#exec`.\\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\\n        result.index = array.index;\\n        result.input = array.input;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Initializes an object clone.\\n     *\\n     * @private\\n     * @param {Object} object The object to clone.\\n     * @returns {Object} Returns the initialized clone.\\n     */\\n    function initCloneObject(object) {\\n      var Ctor = object.constructor;\\n      if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {\\n        Ctor = Object;\\n      }\\n      return new Ctor;\\n    }\\n\\n    /**\\n     * Initializes an object clone based on its `toStringTag`.\\n     *\\n     * **Note:** This function only supports cloning values with tags of\\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\\n     *\\n     * @private\\n     * @param {Object} object The object to clone.\\n     * @param {string} tag The `toStringTag` of the object to clone.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @returns {Object} Returns the initialized clone.\\n     */\\n    function initCloneByTag(object, tag, isDeep) {\\n      var Ctor = object.constructor;\\n      switch (tag) {\\n        case arrayBufferTag:\\n          return bufferClone(object);\\n\\n        case boolTag:\\n        case dateTag:\\n          return new Ctor(+object);\\n\\n        case float32Tag: case float64Tag:\\n        case int8Tag: case int16Tag: case int32Tag:\\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\\n          var buffer = object.buffer;\\n          return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);\\n\\n        case numberTag:\\n        case stringTag:\\n          return new Ctor(object);\\n\\n        case regexpTag:\\n          var result = new Ctor(object.source, reFlags.exec(object));\\n          result.lastIndex = object.lastIndex;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Invokes the method at `path` on `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path of the method to invoke.\\n     * @param {Array} args The arguments to invoke the method with.\\n     * @returns {*} Returns the result of the invoked method.\\n     */\\n    function invokePath(object, path, args) {\\n      if (object != null && !isKey(path, object)) {\\n        path = toPath(path);\\n        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\\n        path = last(path);\\n      }\\n      var func = object == null ? object : object[path];\\n      return func == null ? undefined : func.apply(object, args);\\n    }\\n\\n    /**\\n     * Checks if `value` is array-like.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\\n     */\\n    function isArrayLike(value) {\\n      return value != null && isLength(getLength(value));\\n    }\\n\\n    /**\\n     * Checks if `value` is a valid array-like index.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\\n     */\\n    function isIndex(value, length) {\\n      value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\\n      length = length == null ? MAX_SAFE_INTEGER : length;\\n      return value > -1 && value % 1 == 0 && value < length;\\n    }\\n\\n    /**\\n     * Checks if the provided arguments are from an iteratee call.\\n     *\\n     * @private\\n     * @param {*} value The potential iteratee value argument.\\n     * @param {*} index The potential iteratee index or key argument.\\n     * @param {*} object The potential iteratee object argument.\\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\\n     */\\n    function isIterateeCall(value, index, object) {\\n      if (!isObject(object)) {\\n        return false;\\n      }\\n      var type = typeof index;\\n      if (type == 'number'\\n          ? (isArrayLike(object) && isIndex(index, object.length))\\n          : (type == 'string' && index in object)) {\\n        var other = object[index];\\n        return value === value ? (value === other) : (other !== other);\\n      }\\n      return false;\\n    }\\n\\n    /**\\n     * Checks if `value` is a property name and not a property path.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @param {Object} [object] The object to query keys on.\\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\\n     */\\n    function isKey(value, object) {\\n      var type = typeof value;\\n      if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {\\n        return true;\\n      }\\n      if (isArray(value)) {\\n        return false;\\n      }\\n      var result = !reIsDeepProp.test(value);\\n      return result || (object != null && value in toObject(object));\\n    }\\n\\n    /**\\n     * Checks if `func` has a lazy counterpart.\\n     *\\n     * @private\\n     * @param {Function} func The function to check.\\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`.\\n     */\\n    function isLaziable(func) {\\n      var funcName = getFuncName(func);\\n      if (!(funcName in LazyWrapper.prototype)) {\\n        return false;\\n      }\\n      var other = lodash[funcName];\\n      if (func === other) {\\n        return true;\\n      }\\n      var data = getData(other);\\n      return !!data && func === data[0];\\n    }\\n\\n    /**\\n     * Checks if `value` is a valid array-like length.\\n     *\\n     * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\\n     */\\n    function isLength(value) {\\n      return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\\n    }\\n\\n    /**\\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\\n     *  equality comparisons, else `false`.\\n     */\\n    function isStrictComparable(value) {\\n      return value === value && !isObject(value);\\n    }\\n\\n    /**\\n     * Merges the function metadata of `source` into `data`.\\n     *\\n     * Merging metadata reduces the number of wrappers required to invoke a function.\\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\\n     * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg`\\n     * augment function arguments, making the order in which they are executed important,\\n     * preventing the merging of metadata. However, we make an exception for a safe\\n     * common case where curried functions have `_.ary` and or `_.rearg` applied.\\n     *\\n     * @private\\n     * @param {Array} data The destination metadata.\\n     * @param {Array} source The source metadata.\\n     * @returns {Array} Returns `data`.\\n     */\\n    function mergeData(data, source) {\\n      var bitmask = data[1],\\n          srcBitmask = source[1],\\n          newBitmask = bitmask | srcBitmask,\\n          isCommon = newBitmask < ARY_FLAG;\\n\\n      var isCombo =\\n        (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) ||\\n        (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) ||\\n        (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG);\\n\\n      // Exit early if metadata can't be merged.\\n      if (!(isCommon || isCombo)) {\\n        return data;\\n      }\\n      // Use source `thisArg` if available.\\n      if (srcBitmask & BIND_FLAG) {\\n        data[2] = source[2];\\n        // Set when currying a bound function.\\n        newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG;\\n      }\\n      // Compose partial arguments.\\n      var value = source[3];\\n      if (value) {\\n        var partials = data[3];\\n        data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value);\\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]);\\n      }\\n      // Compose partial right arguments.\\n      value = source[5];\\n      if (value) {\\n        partials = data[5];\\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value);\\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]);\\n      }\\n      // Use source `argPos` if available.\\n      value = source[7];\\n      if (value) {\\n        data[7] = arrayCopy(value);\\n      }\\n      // Use source `ary` if it's smaller.\\n      if (srcBitmask & ARY_FLAG) {\\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\\n      }\\n      // Use source `arity` if one is not provided.\\n      if (data[9] == null) {\\n        data[9] = source[9];\\n      }\\n      // Use source `func` and merge bitmasks.\\n      data[0] = source[0];\\n      data[1] = newBitmask;\\n\\n      return data;\\n    }\\n\\n    /**\\n     * Used by `_.defaultsDeep` to customize its `_.merge` use.\\n     *\\n     * @private\\n     * @param {*} objectValue The destination object property value.\\n     * @param {*} sourceValue The source object property value.\\n     * @returns {*} Returns the value to assign to the destination object.\\n     */\\n    function mergeDefaults(objectValue, sourceValue) {\\n      return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults);\\n    }\\n\\n    /**\\n     * A specialized version of `_.pick` which picks `object` properties specified\\n     * by `props`.\\n     *\\n     * @private\\n     * @param {Object} object The source object.\\n     * @param {string[]} props The property names to pick.\\n     * @returns {Object} Returns the new object.\\n     */\\n    function pickByArray(object, props) {\\n      object = toObject(object);\\n\\n      var index = -1,\\n          length = props.length,\\n          result = {};\\n\\n      while (++index < length) {\\n        var key = props[index];\\n        if (key in object) {\\n          result[key] = object[key];\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * A specialized version of `_.pick` which picks `object` properties `predicate`\\n     * returns truthy for.\\n     *\\n     * @private\\n     * @param {Object} object The source object.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {Object} Returns the new object.\\n     */\\n    function pickByCallback(object, predicate) {\\n      var result = {};\\n      baseForIn(object, function(value, key, object) {\\n        if (predicate(value, key, object)) {\\n          result[key] = value;\\n        }\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * Reorder `array` according to the specified indexes where the element at\\n     * the first index is assigned as the first element, the element at\\n     * the second index is assigned as the second element, and so on.\\n     *\\n     * @private\\n     * @param {Array} array The array to reorder.\\n     * @param {Array} indexes The arranged array indexes.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function reorder(array, indexes) {\\n      var arrLength = array.length,\\n          length = nativeMin(indexes.length, arrLength),\\n          oldArray = arrayCopy(array);\\n\\n      while (length--) {\\n        var index = indexes[length];\\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * Sets metadata for `func`.\\n     *\\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\\n     * period of time, it will trip its breaker and transition to an identity function\\n     * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070)\\n     * for more details.\\n     *\\n     * @private\\n     * @param {Function} func The function to associate metadata with.\\n     * @param {*} data The metadata.\\n     * @returns {Function} Returns `func`.\\n     */\\n    var setData = (function() {\\n      var count = 0,\\n          lastCalled = 0;\\n\\n      return function(key, value) {\\n        var stamp = now(),\\n            remaining = HOT_SPAN - (stamp - lastCalled);\\n\\n        lastCalled = stamp;\\n        if (remaining > 0) {\\n          if (++count >= HOT_COUNT) {\\n            return key;\\n          }\\n        } else {\\n          count = 0;\\n        }\\n        return baseSetData(key, value);\\n      };\\n    }());\\n\\n    /**\\n     * A fallback implementation of `Object.keys` which creates an array of the\\n     * own enumerable property names of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names.\\n     */\\n    function shimKeys(object) {\\n      var props = keysIn(object),\\n          propsLength = props.length,\\n          length = propsLength && object.length;\\n\\n      var allowIndexes = !!length && isLength(length) &&\\n        (isArray(object) || isArguments(object));\\n\\n      var index = -1,\\n          result = [];\\n\\n      while (++index < propsLength) {\\n        var key = props[index];\\n        if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\\n          result.push(key);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Converts `value` to an array-like object if it's not one.\\n     *\\n     * @private\\n     * @param {*} value The value to process.\\n     * @returns {Array|Object} Returns the array-like object.\\n     */\\n    function toIterable(value) {\\n      if (value == null) {\\n        return [];\\n      }\\n      if (!isArrayLike(value)) {\\n        return values(value);\\n      }\\n      return isObject(value) ? value : Object(value);\\n    }\\n\\n    /**\\n     * Converts `value` to an object if it's not one.\\n     *\\n     * @private\\n     * @param {*} value The value to process.\\n     * @returns {Object} Returns the object.\\n     */\\n    function toObject(value) {\\n      return isObject(value) ? value : Object(value);\\n    }\\n\\n    /**\\n     * Converts `value` to property path array if it's not one.\\n     *\\n     * @private\\n     * @param {*} value The value to process.\\n     * @returns {Array} Returns the property path array.\\n     */\\n    function toPath(value) {\\n      if (isArray(value)) {\\n        return value;\\n      }\\n      var result = [];\\n      baseToString(value).replace(rePropName, function(match, number, quote, string) {\\n        result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * Creates a clone of `wrapper`.\\n     *\\n     * @private\\n     * @param {Object} wrapper The wrapper to clone.\\n     * @returns {Object} Returns the cloned wrapper.\\n     */\\n    function wrapperClone(wrapper) {\\n      return wrapper instanceof LazyWrapper\\n        ? wrapper.clone()\\n        : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__));\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates an array of elements split into groups the length of `size`.\\n     * If `collection` can't be split evenly, the final chunk will be the remaining\\n     * elements.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to process.\\n     * @param {number} [size=1] The length of each chunk.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Array} Returns the new array containing chunks.\\n     * @example\\n     *\\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\\n     * // => [['a', 'b'], ['c', 'd']]\\n     *\\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\\n     * // => [['a', 'b', 'c'], ['d']]\\n     */\\n    function chunk(array, size, guard) {\\n      if (guard ? isIterateeCall(array, size, guard) : size == null) {\\n        size = 1;\\n      } else {\\n        size = nativeMax(nativeFloor(size) || 1, 1);\\n      }\\n      var index = 0,\\n          length = array ? array.length : 0,\\n          resIndex = -1,\\n          result = Array(nativeCeil(length / size));\\n\\n      while (index < length) {\\n        result[++resIndex] = baseSlice(array, index, (index += size));\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an array with all falsey values removed. The values `false`, `null`,\\n     * `0`, `\\\"\\\"`, `undefined`, and `NaN` are falsey.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to compact.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @example\\n     *\\n     * _.compact([0, 1, false, 2, '', 3]);\\n     * // => [1, 2, 3]\\n     */\\n    function compact(array) {\\n      var index = -1,\\n          length = array ? array.length : 0,\\n          resIndex = -1,\\n          result = [];\\n\\n      while (++index < length) {\\n        var value = array[index];\\n        if (value) {\\n          result[++resIndex] = value;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an array of unique `array` values not included in the other\\n     * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {...Array} [values] The arrays of values to exclude.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @example\\n     *\\n     * _.difference([1, 2, 3], [4, 2]);\\n     * // => [1, 3]\\n     */\\n    var difference = restParam(function(array, values) {\\n      return (isObjectLike(array) && isArrayLike(array))\\n        ? baseDifference(array, baseFlatten(values, false, true))\\n        : [];\\n    });\\n\\n    /**\\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=1] The number of elements to drop.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.drop([1, 2, 3]);\\n     * // => [2, 3]\\n     *\\n     * _.drop([1, 2, 3], 2);\\n     * // => [3]\\n     *\\n     * _.drop([1, 2, 3], 5);\\n     * // => []\\n     *\\n     * _.drop([1, 2, 3], 0);\\n     * // => [1, 2, 3]\\n     */\\n    function drop(array, n, guard) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return [];\\n      }\\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\\n        n = 1;\\n      }\\n      return baseSlice(array, n < 0 ? 0 : n);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with `n` elements dropped from the end.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=1] The number of elements to drop.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.dropRight([1, 2, 3]);\\n     * // => [1, 2]\\n     *\\n     * _.dropRight([1, 2, 3], 2);\\n     * // => [1]\\n     *\\n     * _.dropRight([1, 2, 3], 5);\\n     * // => []\\n     *\\n     * _.dropRight([1, 2, 3], 0);\\n     * // => [1, 2, 3]\\n     */\\n    function dropRight(array, n, guard) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return [];\\n      }\\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\\n        n = 1;\\n      }\\n      n = length - (+n || 0);\\n      return baseSlice(array, 0, n < 0 ? 0 : n);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` excluding elements dropped from the end.\\n     * Elements are dropped until `predicate` returns falsey. The predicate is\\n     * bound to `thisArg` and invoked with three arguments: (value, index, array).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that match the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.dropRightWhile([1, 2, 3], function(n) {\\n     *   return n > 1;\\n     * });\\n     * // => [1]\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': true },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': false }\\n     * ];\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.pluck(_.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');\\n     * // => ['barney', 'fred']\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.pluck(_.dropRightWhile(users, 'active', false), 'user');\\n     * // => ['barney']\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.pluck(_.dropRightWhile(users, 'active'), 'user');\\n     * // => ['barney', 'fred', 'pebbles']\\n     */\\n    function dropRightWhile(array, predicate, thisArg) {\\n      return (array && array.length)\\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), true, true)\\n        : [];\\n    }\\n\\n    /**\\n     * Creates a slice of `array` excluding elements dropped from the beginning.\\n     * Elements are dropped until `predicate` returns falsey. The predicate is\\n     * bound to `thisArg` and invoked with three arguments: (value, index, array).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.dropWhile([1, 2, 3], function(n) {\\n     *   return n < 3;\\n     * });\\n     * // => [3]\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': false },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': true }\\n     * ];\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user');\\n     * // => ['fred', 'pebbles']\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.pluck(_.dropWhile(users, 'active', false), 'user');\\n     * // => ['pebbles']\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.pluck(_.dropWhile(users, 'active'), 'user');\\n     * // => ['barney', 'fred', 'pebbles']\\n     */\\n    function dropWhile(array, predicate, thisArg) {\\n      return (array && array.length)\\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), true)\\n        : [];\\n    }\\n\\n    /**\\n     * Fills elements of `array` with `value` from `start` up to, but not\\n     * including, `end`.\\n     *\\n     * **Note:** This method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to fill.\\n     * @param {*} value The value to fill `array` with.\\n     * @param {number} [start=0] The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns `array`.\\n     * @example\\n     *\\n     * var array = [1, 2, 3];\\n     *\\n     * _.fill(array, 'a');\\n     * console.log(array);\\n     * // => ['a', 'a', 'a']\\n     *\\n     * _.fill(Array(3), 2);\\n     * // => [2, 2, 2]\\n     *\\n     * _.fill([4, 6, 8], '*', 1, 2);\\n     * // => [4, '*', 8]\\n     */\\n    function fill(array, value, start, end) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return [];\\n      }\\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\\n        start = 0;\\n        end = length;\\n      }\\n      return baseFill(array, value, start, end);\\n    }\\n\\n    /**\\n     * This method is like `_.find` except that it returns the index of the first\\n     * element `predicate` returns truthy for instead of the element itself.\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to search.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {number} Returns the index of the found element, else `-1`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': false },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': true }\\n     * ];\\n     *\\n     * _.findIndex(users, function(chr) {\\n     *   return chr.user == 'barney';\\n     * });\\n     * // => 0\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\\n     * // => 1\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.findIndex(users, 'active', false);\\n     * // => 0\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.findIndex(users, 'active');\\n     * // => 2\\n     */\\n    var findIndex = createFindIndex();\\n\\n    /**\\n     * This method is like `_.findIndex` except that it iterates over elements\\n     * of `collection` from right to left.\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to search.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {number} Returns the index of the found element, else `-1`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': true },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': false }\\n     * ];\\n     *\\n     * _.findLastIndex(users, function(chr) {\\n     *   return chr.user == 'pebbles';\\n     * });\\n     * // => 2\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\\n     * // => 0\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.findLastIndex(users, 'active', false);\\n     * // => 2\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.findLastIndex(users, 'active');\\n     * // => 0\\n     */\\n    var findLastIndex = createFindIndex(true);\\n\\n    /**\\n     * Gets the first element of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias head\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @returns {*} Returns the first element of `array`.\\n     * @example\\n     *\\n     * _.first([1, 2, 3]);\\n     * // => 1\\n     *\\n     * _.first([]);\\n     * // => undefined\\n     */\\n    function first(array) {\\n      return array ? array[0] : undefined;\\n    }\\n\\n    /**\\n     * Flattens a nested array. If `isDeep` is `true` the array is recursively\\n     * flattened, otherwise it is only flattened a single level.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to flatten.\\n     * @param {boolean} [isDeep] Specify a deep flatten.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Array} Returns the new flattened array.\\n     * @example\\n     *\\n     * _.flatten([1, [2, 3, [4]]]);\\n     * // => [1, 2, 3, [4]]\\n     *\\n     * // using `isDeep`\\n     * _.flatten([1, [2, 3, [4]]], true);\\n     * // => [1, 2, 3, 4]\\n     */\\n    function flatten(array, isDeep, guard) {\\n      var length = array ? array.length : 0;\\n      if (guard && isIterateeCall(array, isDeep, guard)) {\\n        isDeep = false;\\n      }\\n      return length ? baseFlatten(array, isDeep) : [];\\n    }\\n\\n    /**\\n     * Recursively flattens a nested array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to recursively flatten.\\n     * @returns {Array} Returns the new flattened array.\\n     * @example\\n     *\\n     * _.flattenDeep([1, [2, 3, [4]]]);\\n     * // => [1, 2, 3, 4]\\n     */\\n    function flattenDeep(array) {\\n      var length = array ? array.length : 0;\\n      return length ? baseFlatten(array, true) : [];\\n    }\\n\\n    /**\\n     * Gets the index at which the first occurrence of `value` is found in `array`\\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\\n     * for equality comparisons. If `fromIndex` is negative, it is used as the offset\\n     * from the end of `array`. If `array` is sorted providing `true` for `fromIndex`\\n     * performs a faster binary search.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to search.\\n     * @param {*} value The value to search for.\\n     * @param {boolean|number} [fromIndex=0] The index to search from or `true`\\n     *  to perform a binary search on a sorted array.\\n     * @returns {number} Returns the index of the matched value, else `-1`.\\n     * @example\\n     *\\n     * _.indexOf([1, 2, 1, 2], 2);\\n     * // => 1\\n     *\\n     * // using `fromIndex`\\n     * _.indexOf([1, 2, 1, 2], 2, 2);\\n     * // => 3\\n     *\\n     * // performing a binary search\\n     * _.indexOf([1, 1, 2, 2], 2, true);\\n     * // => 2\\n     */\\n    function indexOf(array, value, fromIndex) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return -1;\\n      }\\n      if (typeof fromIndex == 'number') {\\n        fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;\\n      } else if (fromIndex) {\\n        var index = binaryIndex(array, value);\\n        if (index < length &&\\n            (value === value ? (value === array[index]) : (array[index] !== array[index]))) {\\n          return index;\\n        }\\n        return -1;\\n      }\\n      return baseIndexOf(array, value, fromIndex || 0);\\n    }\\n\\n    /**\\n     * Gets all but the last element of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.initial([1, 2, 3]);\\n     * // => [1, 2]\\n     */\\n    function initial(array) {\\n      return dropRight(array, 1);\\n    }\\n\\n    /**\\n     * Creates an array of unique values that are included in all of the provided\\n     * arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @returns {Array} Returns the new array of shared values.\\n     * @example\\n     * _.intersection([1, 2], [4, 2], [2, 1]);\\n     * // => [2]\\n     */\\n    var intersection = restParam(function(arrays) {\\n      var othLength = arrays.length,\\n          othIndex = othLength,\\n          caches = Array(length),\\n          indexOf = getIndexOf(),\\n          isCommon = indexOf == baseIndexOf,\\n          result = [];\\n\\n      while (othIndex--) {\\n        var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : [];\\n        caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null;\\n      }\\n      var array = arrays[0],\\n          index = -1,\\n          length = array ? array.length : 0,\\n          seen = caches[0];\\n\\n      outer:\\n      while (++index < length) {\\n        value = array[index];\\n        if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) {\\n          var othIndex = othLength;\\n          while (--othIndex) {\\n            var cache = caches[othIndex];\\n            if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) {\\n              continue outer;\\n            }\\n          }\\n          if (seen) {\\n            seen.push(value);\\n          }\\n          result.push(value);\\n        }\\n      }\\n      return result;\\n    });\\n\\n    /**\\n     * Gets the last element of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @returns {*} Returns the last element of `array`.\\n     * @example\\n     *\\n     * _.last([1, 2, 3]);\\n     * // => 3\\n     */\\n    function last(array) {\\n      var length = array ? array.length : 0;\\n      return length ? array[length - 1] : undefined;\\n    }\\n\\n    /**\\n     * This method is like `_.indexOf` except that it iterates over elements of\\n     * `array` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to search.\\n     * @param {*} value The value to search for.\\n     * @param {boolean|number} [fromIndex=array.length-1] The index to search from\\n     *  or `true` to perform a binary search on a sorted array.\\n     * @returns {number} Returns the index of the matched value, else `-1`.\\n     * @example\\n     *\\n     * _.lastIndexOf([1, 2, 1, 2], 2);\\n     * // => 3\\n     *\\n     * // using `fromIndex`\\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\\n     * // => 1\\n     *\\n     * // performing a binary search\\n     * _.lastIndexOf([1, 1, 2, 2], 2, true);\\n     * // => 3\\n     */\\n    function lastIndexOf(array, value, fromIndex) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return -1;\\n      }\\n      var index = length;\\n      if (typeof fromIndex == 'number') {\\n        index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1;\\n      } else if (fromIndex) {\\n        index = binaryIndex(array, value, true) - 1;\\n        var other = array[index];\\n        if (value === value ? (value === other) : (other !== other)) {\\n          return index;\\n        }\\n        return -1;\\n      }\\n      if (value !== value) {\\n        return indexOfNaN(array, index, true);\\n      }\\n      while (index--) {\\n        if (array[index] === value) {\\n          return index;\\n        }\\n      }\\n      return -1;\\n    }\\n\\n    /**\\n     * Removes all provided values from `array` using\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * **Note:** Unlike `_.without`, this method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {...*} [values] The values to remove.\\n     * @returns {Array} Returns `array`.\\n     * @example\\n     *\\n     * var array = [1, 2, 3, 1, 2, 3];\\n     *\\n     * _.pull(array, 2, 3);\\n     * console.log(array);\\n     * // => [1, 1]\\n     */\\n    function pull() {\\n      var args = arguments,\\n          array = args[0];\\n\\n      if (!(array && array.length)) {\\n        return array;\\n      }\\n      var index = 0,\\n          indexOf = getIndexOf(),\\n          length = args.length;\\n\\n      while (++index < length) {\\n        var fromIndex = 0,\\n            value = args[index];\\n\\n        while ((fromIndex = indexOf(array, value, fromIndex)) > -1) {\\n          splice.call(array, fromIndex, 1);\\n        }\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * Removes elements from `array` corresponding to the given indexes and returns\\n     * an array of the removed elements. Indexes may be specified as an array of\\n     * indexes or as individual arguments.\\n     *\\n     * **Note:** Unlike `_.at`, this method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove,\\n     *  specified as individual indexes or arrays of indexes.\\n     * @returns {Array} Returns the new array of removed elements.\\n     * @example\\n     *\\n     * var array = [5, 10, 15, 20];\\n     * var evens = _.pullAt(array, 1, 3);\\n     *\\n     * console.log(array);\\n     * // => [5, 15]\\n     *\\n     * console.log(evens);\\n     * // => [10, 20]\\n     */\\n    var pullAt = restParam(function(array, indexes) {\\n      indexes = baseFlatten(indexes);\\n\\n      var result = baseAt(array, indexes);\\n      basePullAt(array, indexes.sort(baseCompareAscending));\\n      return result;\\n    });\\n\\n    /**\\n     * Removes all elements from `array` that `predicate` returns truthy for\\n     * and returns an array of the removed elements. The predicate is bound to\\n     * `thisArg` and invoked with three arguments: (value, index, array).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * **Note:** Unlike `_.filter`, this method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Array} Returns the new array of removed elements.\\n     * @example\\n     *\\n     * var array = [1, 2, 3, 4];\\n     * var evens = _.remove(array, function(n) {\\n     *   return n % 2 == 0;\\n     * });\\n     *\\n     * console.log(array);\\n     * // => [1, 3]\\n     *\\n     * console.log(evens);\\n     * // => [2, 4]\\n     */\\n    function remove(array, predicate, thisArg) {\\n      var result = [];\\n      if (!(array && array.length)) {\\n        return result;\\n      }\\n      var index = -1,\\n          indexes = [],\\n          length = array.length;\\n\\n      predicate = getCallback(predicate, thisArg, 3);\\n      while (++index < length) {\\n        var value = array[index];\\n        if (predicate(value, index, array)) {\\n          result.push(value);\\n          indexes.push(index);\\n        }\\n      }\\n      basePullAt(array, indexes);\\n      return result;\\n    }\\n\\n    /**\\n     * Gets all but the first element of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias tail\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.rest([1, 2, 3]);\\n     * // => [2, 3]\\n     */\\n    function rest(array) {\\n      return drop(array, 1);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\\n     *\\n     * **Note:** This method is used instead of `Array#slice` to support node\\n     * lists in IE < 9 and to ensure dense arrays are returned.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to slice.\\n     * @param {number} [start=0] The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns the slice of `array`.\\n     */\\n    function slice(array, start, end) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return [];\\n      }\\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\\n        start = 0;\\n        end = length;\\n      }\\n      return baseSlice(array, start, end);\\n    }\\n\\n    /**\\n     * Uses a binary search to determine the lowest index at which `value` should\\n     * be inserted into `array` in order to maintain its sort order. If an iteratee\\n     * function is provided it is invoked for `value` and each element of `array`\\n     * to compute their sort ranking. The iteratee is bound to `thisArg` and\\n     * invoked with one argument; (value).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     * @example\\n     *\\n     * _.sortedIndex([30, 50], 40);\\n     * // => 1\\n     *\\n     * _.sortedIndex([4, 4, 5, 5], 5);\\n     * // => 2\\n     *\\n     * var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } };\\n     *\\n     * // using an iteratee function\\n     * _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) {\\n     *   return this.data[word];\\n     * }, dict);\\n     * // => 1\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');\\n     * // => 1\\n     */\\n    var sortedIndex = createSortedIndex();\\n\\n    /**\\n     * This method is like `_.sortedIndex` except that it returns the highest\\n     * index at which `value` should be inserted into `array` in order to\\n     * maintain its sort order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     * @example\\n     *\\n     * _.sortedLastIndex([4, 4, 5, 5], 5);\\n     * // => 4\\n     */\\n    var sortedLastIndex = createSortedIndex(true);\\n\\n    /**\\n     * Creates a slice of `array` with `n` elements taken from the beginning.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=1] The number of elements to take.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.take([1, 2, 3]);\\n     * // => [1]\\n     *\\n     * _.take([1, 2, 3], 2);\\n     * // => [1, 2]\\n     *\\n     * _.take([1, 2, 3], 5);\\n     * // => [1, 2, 3]\\n     *\\n     * _.take([1, 2, 3], 0);\\n     * // => []\\n     */\\n    function take(array, n, guard) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return [];\\n      }\\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\\n        n = 1;\\n      }\\n      return baseSlice(array, 0, n < 0 ? 0 : n);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with `n` elements taken from the end.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=1] The number of elements to take.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.takeRight([1, 2, 3]);\\n     * // => [3]\\n     *\\n     * _.takeRight([1, 2, 3], 2);\\n     * // => [2, 3]\\n     *\\n     * _.takeRight([1, 2, 3], 5);\\n     * // => [1, 2, 3]\\n     *\\n     * _.takeRight([1, 2, 3], 0);\\n     * // => []\\n     */\\n    function takeRight(array, n, guard) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return [];\\n      }\\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\\n        n = 1;\\n      }\\n      n = length - (+n || 0);\\n      return baseSlice(array, n < 0 ? 0 : n);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with elements taken from the end. Elements are\\n     * taken until `predicate` returns falsey. The predicate is bound to `thisArg`\\n     * and invoked with three arguments: (value, index, array).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.takeRightWhile([1, 2, 3], function(n) {\\n     *   return n > 1;\\n     * });\\n     * // => [2, 3]\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': true },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': false }\\n     * ];\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.pluck(_.takeRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');\\n     * // => ['pebbles']\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.pluck(_.takeRightWhile(users, 'active', false), 'user');\\n     * // => ['fred', 'pebbles']\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.pluck(_.takeRightWhile(users, 'active'), 'user');\\n     * // => []\\n     */\\n    function takeRightWhile(array, predicate, thisArg) {\\n      return (array && array.length)\\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), false, true)\\n        : [];\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with elements taken from the beginning. Elements\\n     * are taken until `predicate` returns falsey. The predicate is bound to\\n     * `thisArg` and invoked with three arguments: (value, index, array).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.takeWhile([1, 2, 3], function(n) {\\n     *   return n < 3;\\n     * });\\n     * // => [1, 2]\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': false },\\n     *   { 'user': 'fred',    'active': false},\\n     *   { 'user': 'pebbles', 'active': true }\\n     * ];\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.pluck(_.takeWhile(users, { 'user': 'barney', 'active': false }), 'user');\\n     * // => ['barney']\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.pluck(_.takeWhile(users, 'active', false), 'user');\\n     * // => ['barney', 'fred']\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.pluck(_.takeWhile(users, 'active'), 'user');\\n     * // => []\\n     */\\n    function takeWhile(array, predicate, thisArg) {\\n      return (array && array.length)\\n        ? baseWhile(array, getCallback(predicate, thisArg, 3))\\n        : [];\\n    }\\n\\n    /**\\n     * Creates an array of unique values, in order, from all of the provided arrays\\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @returns {Array} Returns the new array of combined values.\\n     * @example\\n     *\\n     * _.union([1, 2], [4, 2], [2, 1]);\\n     * // => [1, 2, 4]\\n     */\\n    var union = restParam(function(arrays) {\\n      return baseUniq(baseFlatten(arrays, false, true));\\n    });\\n\\n    /**\\n     * Creates a duplicate-free version of an array, using\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\\n     * for equality comparisons, in which only the first occurence of each element\\n     * is kept. Providing `true` for `isSorted` performs a faster search algorithm\\n     * for sorted arrays. If an iteratee function is provided it is invoked for\\n     * each element in the array to generate the criterion by which uniqueness\\n     * is computed. The `iteratee` is bound to `thisArg` and invoked with three\\n     * arguments: (value, index, array).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias unique\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {boolean} [isSorted] Specify the array is sorted.\\n     * @param {Function|Object|string} [iteratee] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Array} Returns the new duplicate-value-free array.\\n     * @example\\n     *\\n     * _.uniq([2, 1, 2]);\\n     * // => [2, 1]\\n     *\\n     * // using `isSorted`\\n     * _.uniq([1, 1, 2], true);\\n     * // => [1, 2]\\n     *\\n     * // using an iteratee function\\n     * _.uniq([1, 2.5, 1.5, 2], function(n) {\\n     *   return this.floor(n);\\n     * }, Math);\\n     * // => [1, 2.5]\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\\n     * // => [{ 'x': 1 }, { 'x': 2 }]\\n     */\\n    function uniq(array, isSorted, iteratee, thisArg) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return [];\\n      }\\n      if (isSorted != null && typeof isSorted != 'boolean') {\\n        thisArg = iteratee;\\n        iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted;\\n        isSorted = false;\\n      }\\n      var callback = getCallback();\\n      if (!(iteratee == null && callback === baseCallback)) {\\n        iteratee = callback(iteratee, thisArg, 3);\\n      }\\n      return (isSorted && getIndexOf() == baseIndexOf)\\n        ? sortedUniq(array, iteratee)\\n        : baseUniq(array, iteratee);\\n    }\\n\\n    /**\\n     * This method is like `_.zip` except that it accepts an array of grouped\\n     * elements and creates an array regrouping the elements to their pre-zip\\n     * configuration.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array of grouped elements to process.\\n     * @returns {Array} Returns the new array of regrouped elements.\\n     * @example\\n     *\\n     * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]);\\n     * // => [['fred', 30, true], ['barney', 40, false]]\\n     *\\n     * _.unzip(zipped);\\n     * // => [['fred', 'barney'], [30, 40], [true, false]]\\n     */\\n    function unzip(array) {\\n      if (!(array && array.length)) {\\n        return [];\\n      }\\n      var index = -1,\\n          length = 0;\\n\\n      array = arrayFilter(array, function(group) {\\n        if (isArrayLike(group)) {\\n          length = nativeMax(group.length, length);\\n          return true;\\n        }\\n      });\\n      var result = Array(length);\\n      while (++index < length) {\\n        result[index] = arrayMap(array, baseProperty(index));\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * This method is like `_.unzip` except that it accepts an iteratee to specify\\n     * how regrouped values should be combined. The `iteratee` is bound to `thisArg`\\n     * and invoked with four arguments: (accumulator, value, index, group).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array of grouped elements to process.\\n     * @param {Function} [iteratee] The function to combine regrouped values.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Array} Returns the new array of regrouped elements.\\n     * @example\\n     *\\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\\n     * // => [[1, 10, 100], [2, 20, 200]]\\n     *\\n     * _.unzipWith(zipped, _.add);\\n     * // => [3, 30, 300]\\n     */\\n    function unzipWith(array, iteratee, thisArg) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return [];\\n      }\\n      var result = unzip(array);\\n      if (iteratee == null) {\\n        return result;\\n      }\\n      iteratee = bindCallback(iteratee, thisArg, 4);\\n      return arrayMap(result, function(group) {\\n        return arrayReduce(group, iteratee, undefined, true);\\n      });\\n    }\\n\\n    /**\\n     * Creates an array excluding all provided values using\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to filter.\\n     * @param {...*} [values] The values to exclude.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @example\\n     *\\n     * _.without([1, 2, 1, 3], 1, 2);\\n     * // => [3]\\n     */\\n    var without = restParam(function(array, values) {\\n      return isArrayLike(array)\\n        ? baseDifference(array, values)\\n        : [];\\n    });\\n\\n    /**\\n     * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\\n     * of the provided arrays.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @returns {Array} Returns the new array of values.\\n     * @example\\n     *\\n     * _.xor([1, 2], [4, 2]);\\n     * // => [1, 4]\\n     */\\n    function xor() {\\n      var index = -1,\\n          length = arguments.length;\\n\\n      while (++index < length) {\\n        var array = arguments[index];\\n        if (isArrayLike(array)) {\\n          var result = result\\n            ? arrayPush(baseDifference(result, array), baseDifference(array, result))\\n            : array;\\n        }\\n      }\\n      return result ? baseUniq(result) : [];\\n    }\\n\\n    /**\\n     * Creates an array of grouped elements, the first of which contains the first\\n     * elements of the given arrays, the second of which contains the second elements\\n     * of the given arrays, and so on.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to process.\\n     * @returns {Array} Returns the new array of grouped elements.\\n     * @example\\n     *\\n     * _.zip(['fred', 'barney'], [30, 40], [true, false]);\\n     * // => [['fred', 30, true], ['barney', 40, false]]\\n     */\\n    var zip = restParam(unzip);\\n\\n    /**\\n     * The inverse of `_.pairs`; this method returns an object composed from arrays\\n     * of property names and values. Provide either a single two dimensional array,\\n     * e.g. `[[key1, value1], [key2, value2]]` or two arrays, one of property names\\n     * and one of corresponding values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias object\\n     * @category Array\\n     * @param {Array} props The property names.\\n     * @param {Array} [values=[]] The property values.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * _.zipObject([['fred', 30], ['barney', 40]]);\\n     * // => { 'fred': 30, 'barney': 40 }\\n     *\\n     * _.zipObject(['fred', 'barney'], [30, 40]);\\n     * // => { 'fred': 30, 'barney': 40 }\\n     */\\n    function zipObject(props, values) {\\n      var index = -1,\\n          length = props ? props.length : 0,\\n          result = {};\\n\\n      if (length && !values && !isArray(props[0])) {\\n        values = [];\\n      }\\n      while (++index < length) {\\n        var key = props[index];\\n        if (values) {\\n          result[key] = values[index];\\n        } else if (key) {\\n          result[key[0]] = key[1];\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * This method is like `_.zip` except that it accepts an iteratee to specify\\n     * how grouped values should be combined. The `iteratee` is bound to `thisArg`\\n     * and invoked with four arguments: (accumulator, value, index, group).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to process.\\n     * @param {Function} [iteratee] The function to combine grouped values.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Array} Returns the new array of grouped elements.\\n     * @example\\n     *\\n     * _.zipWith([1, 2], [10, 20], [100, 200], _.add);\\n     * // => [111, 222]\\n     */\\n    var zipWith = restParam(function(arrays) {\\n      var length = arrays.length,\\n          iteratee = length > 2 ? arrays[length - 2] : undefined,\\n          thisArg = length > 1 ? arrays[length - 1] : undefined;\\n\\n      if (length > 2 && typeof iteratee == 'function') {\\n        length -= 2;\\n      } else {\\n        iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined;\\n        thisArg = undefined;\\n      }\\n      arrays.length = length;\\n      return unzipWith(arrays, iteratee, thisArg);\\n    });\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a `lodash` object that wraps `value` with explicit method\\n     * chaining enabled.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Chain\\n     * @param {*} value The value to wrap.\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'age': 36 },\\n     *   { 'user': 'fred',    'age': 40 },\\n     *   { 'user': 'pebbles', 'age': 1 }\\n     * ];\\n     *\\n     * var youngest = _.chain(users)\\n     *   .sortBy('age')\\n     *   .map(function(chr) {\\n     *     return chr.user + ' is ' + chr.age;\\n     *   })\\n     *   .first()\\n     *   .value();\\n     * // => 'pebbles is 1'\\n     */\\n    function chain(value) {\\n      var result = lodash(value);\\n      result.__chain__ = true;\\n      return result;\\n    }\\n\\n    /**\\n     * This method invokes `interceptor` and returns `value`. The interceptor is\\n     * bound to `thisArg` and invoked with one argument; (value). The purpose of\\n     * this method is to \\\"tap into\\\" a method chain in order to perform operations\\n     * on intermediate results within the chain.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Chain\\n     * @param {*} value The value to provide to `interceptor`.\\n     * @param {Function} interceptor The function to invoke.\\n     * @param {*} [thisArg] The `this` binding of `interceptor`.\\n     * @returns {*} Returns `value`.\\n     * @example\\n     *\\n     * _([1, 2, 3])\\n     *  .tap(function(array) {\\n     *    array.pop();\\n     *  })\\n     *  .reverse()\\n     *  .value();\\n     * // => [2, 1]\\n     */\\n    function tap(value, interceptor, thisArg) {\\n      interceptor.call(thisArg, value);\\n      return value;\\n    }\\n\\n    /**\\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Chain\\n     * @param {*} value The value to provide to `interceptor`.\\n     * @param {Function} interceptor The function to invoke.\\n     * @param {*} [thisArg] The `this` binding of `interceptor`.\\n     * @returns {*} Returns the result of `interceptor`.\\n     * @example\\n     *\\n     * _('  abc  ')\\n     *  .chain()\\n     *  .trim()\\n     *  .thru(function(value) {\\n     *    return [value];\\n     *  })\\n     *  .value();\\n     * // => ['abc']\\n     */\\n    function thru(value, interceptor, thisArg) {\\n      return interceptor.call(thisArg, value);\\n    }\\n\\n    /**\\n     * Enables explicit method chaining on the wrapper object.\\n     *\\n     * @name chain\\n     * @memberOf _\\n     * @category Chain\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36 },\\n     *   { 'user': 'fred',   'age': 40 }\\n     * ];\\n     *\\n     * // without explicit chaining\\n     * _(users).first();\\n     * // => { 'user': 'barney', 'age': 36 }\\n     *\\n     * // with explicit chaining\\n     * _(users).chain()\\n     *   .first()\\n     *   .pick('user')\\n     *   .value();\\n     * // => { 'user': 'barney' }\\n     */\\n    function wrapperChain() {\\n      return chain(this);\\n    }\\n\\n    /**\\n     * Executes the chained sequence and returns the wrapped result.\\n     *\\n     * @name commit\\n     * @memberOf _\\n     * @category Chain\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var array = [1, 2];\\n     * var wrapped = _(array).push(3);\\n     *\\n     * console.log(array);\\n     * // => [1, 2]\\n     *\\n     * wrapped = wrapped.commit();\\n     * console.log(array);\\n     * // => [1, 2, 3]\\n     *\\n     * wrapped.last();\\n     * // => 3\\n     *\\n     * console.log(array);\\n     * // => [1, 2, 3]\\n     */\\n    function wrapperCommit() {\\n      return new LodashWrapper(this.value(), this.__chain__);\\n    }\\n\\n    /**\\n     * Creates a new array joining a wrapped array with any additional arrays\\n     * and/or values.\\n     *\\n     * @name concat\\n     * @memberOf _\\n     * @category Chain\\n     * @param {...*} [values] The values to concatenate.\\n     * @returns {Array} Returns the new concatenated array.\\n     * @example\\n     *\\n     * var array = [1];\\n     * var wrapped = _(array).concat(2, [3], [[4]]);\\n     *\\n     * console.log(wrapped.value());\\n     * // => [1, 2, 3, [4]]\\n     *\\n     * console.log(array);\\n     * // => [1]\\n     */\\n    var wrapperConcat = restParam(function(values) {\\n      values = baseFlatten(values);\\n      return this.thru(function(array) {\\n        return arrayConcat(isArray(array) ? array : [toObject(array)], values);\\n      });\\n    });\\n\\n    /**\\n     * Creates a clone of the chained sequence planting `value` as the wrapped value.\\n     *\\n     * @name plant\\n     * @memberOf _\\n     * @category Chain\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var array = [1, 2];\\n     * var wrapped = _(array).map(function(value) {\\n     *   return Math.pow(value, 2);\\n     * });\\n     *\\n     * var other = [3, 4];\\n     * var otherWrapped = wrapped.plant(other);\\n     *\\n     * otherWrapped.value();\\n     * // => [9, 16]\\n     *\\n     * wrapped.value();\\n     * // => [1, 4]\\n     */\\n    function wrapperPlant(value) {\\n      var result,\\n          parent = this;\\n\\n      while (parent instanceof baseLodash) {\\n        var clone = wrapperClone(parent);\\n        if (result) {\\n          previous.__wrapped__ = clone;\\n        } else {\\n          result = clone;\\n        }\\n        var previous = clone;\\n        parent = parent.__wrapped__;\\n      }\\n      previous.__wrapped__ = value;\\n      return result;\\n    }\\n\\n    /**\\n     * Reverses the wrapped array so the first element becomes the last, the\\n     * second element becomes the second to last, and so on.\\n     *\\n     * **Note:** This method mutates the wrapped array.\\n     *\\n     * @name reverse\\n     * @memberOf _\\n     * @category Chain\\n     * @returns {Object} Returns the new reversed `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var array = [1, 2, 3];\\n     *\\n     * _(array).reverse().value()\\n     * // => [3, 2, 1]\\n     *\\n     * console.log(array);\\n     * // => [3, 2, 1]\\n     */\\n    function wrapperReverse() {\\n      var value = this.__wrapped__;\\n\\n      var interceptor = function(value) {\\n        return (wrapped && wrapped.__dir__ < 0) ? value : value.reverse();\\n      };\\n      if (value instanceof LazyWrapper) {\\n        var wrapped = value;\\n        if (this.__actions__.length) {\\n          wrapped = new LazyWrapper(this);\\n        }\\n        wrapped = wrapped.reverse();\\n        wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\\n        return new LodashWrapper(wrapped, this.__chain__);\\n      }\\n      return this.thru(interceptor);\\n    }\\n\\n    /**\\n     * Produces the result of coercing the unwrapped value to a string.\\n     *\\n     * @name toString\\n     * @memberOf _\\n     * @category Chain\\n     * @returns {string} Returns the coerced string value.\\n     * @example\\n     *\\n     * _([1, 2, 3]).toString();\\n     * // => '1,2,3'\\n     */\\n    function wrapperToString() {\\n      return (this.value() + '');\\n    }\\n\\n    /**\\n     * Executes the chained sequence to extract the unwrapped value.\\n     *\\n     * @name value\\n     * @memberOf _\\n     * @alias run, toJSON, valueOf\\n     * @category Chain\\n     * @returns {*} Returns the resolved unwrapped value.\\n     * @example\\n     *\\n     * _([1, 2, 3]).value();\\n     * // => [1, 2, 3]\\n     */\\n    function wrapperValue() {\\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates an array of elements corresponding to the given keys, or indexes,\\n     * of `collection`. Keys may be specified as individual arguments or as arrays\\n     * of keys.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {...(number|number[]|string|string[])} [props] The property names\\n     *  or indexes of elements to pick, specified individually or in arrays.\\n     * @returns {Array} Returns the new array of picked elements.\\n     * @example\\n     *\\n     * _.at(['a', 'b', 'c'], [0, 2]);\\n     * // => ['a', 'c']\\n     *\\n     * _.at(['barney', 'fred', 'pebbles'], 0, 2);\\n     * // => ['barney', 'pebbles']\\n     */\\n    var at = restParam(function(collection, props) {\\n      return baseAt(collection, baseFlatten(props));\\n    });\\n\\n    /**\\n     * Creates an object composed of keys generated from the results of running\\n     * each element of `collection` through `iteratee`. The corresponding value\\n     * of each key is the number of times the key was returned by `iteratee`.\\n     * The `iteratee` is bound to `thisArg` and invoked with three arguments:\\n     * (value, index|key, collection).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns the composed aggregate object.\\n     * @example\\n     *\\n     * _.countBy([4.3, 6.1, 6.4], function(n) {\\n     *   return Math.floor(n);\\n     * });\\n     * // => { '4': 1, '6': 2 }\\n     *\\n     * _.countBy([4.3, 6.1, 6.4], function(n) {\\n     *   return this.floor(n);\\n     * }, Math);\\n     * // => { '4': 1, '6': 2 }\\n     *\\n     * _.countBy(['one', 'two', 'three'], 'length');\\n     * // => { '3': 2, '5': 1 }\\n     */\\n    var countBy = createAggregator(function(result, value, key) {\\n      hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1);\\n    });\\n\\n    /**\\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\\n     * The predicate is bound to `thisArg` and invoked with three arguments:\\n     * (value, index|key, collection).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias all\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.every([true, 1, null, 'yes'], Boolean);\\n     * // => false\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'active': false },\\n     *   { 'user': 'fred',   'active': false }\\n     * ];\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.every(users, { 'user': 'barney', 'active': false });\\n     * // => false\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.every(users, 'active', false);\\n     * // => true\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.every(users, 'active');\\n     * // => false\\n     */\\n    function every(collection, predicate, thisArg) {\\n      var func = isArray(collection) ? arrayEvery : baseEvery;\\n      if (thisArg && isIterateeCall(collection, predicate, thisArg)) {\\n        predicate = undefined;\\n      }\\n      if (typeof predicate != 'function' || thisArg !== undefined) {\\n        predicate = getCallback(predicate, thisArg, 3);\\n      }\\n      return func(collection, predicate);\\n    }\\n\\n    /**\\n     * Iterates over elements of `collection`, returning an array of all elements\\n     * `predicate` returns truthy for. The predicate is bound to `thisArg` and\\n     * invoked with three arguments: (value, index|key, collection).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias select\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Array} Returns the new filtered array.\\n     * @example\\n     *\\n     * _.filter([4, 5, 6], function(n) {\\n     *   return n % 2 == 0;\\n     * });\\n     * // => [4, 6]\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': true },\\n     *   { 'user': 'fred',   'age': 40, 'active': false }\\n     * ];\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user');\\n     * // => ['barney']\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.pluck(_.filter(users, 'active', false), 'user');\\n     * // => ['fred']\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.pluck(_.filter(users, 'active'), 'user');\\n     * // => ['barney']\\n     */\\n    function filter(collection, predicate, thisArg) {\\n      var func = isArray(collection) ? arrayFilter : baseFilter;\\n      predicate = getCallback(predicate, thisArg, 3);\\n      return func(collection, predicate);\\n    }\\n\\n    /**\\n     * Iterates over elements of `collection`, returning the first element\\n     * `predicate` returns truthy for. The predicate is bound to `thisArg` and\\n     * invoked with three arguments: (value, index|key, collection).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias detect\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to search.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {*} Returns the matched element, else `undefined`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'age': 36, 'active': true },\\n     *   { 'user': 'fred',    'age': 40, 'active': false },\\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\\n     * ];\\n     *\\n     * _.result(_.find(users, function(chr) {\\n     *   return chr.age < 40;\\n     * }), 'user');\\n     * // => 'barney'\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.result(_.find(users, { 'age': 1, 'active': true }), 'user');\\n     * // => 'pebbles'\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.result(_.find(users, 'active', false), 'user');\\n     * // => 'fred'\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.result(_.find(users, 'active'), 'user');\\n     * // => 'barney'\\n     */\\n    var find = createFind(baseEach);\\n\\n    /**\\n     * This method is like `_.find` except that it iterates over elements of\\n     * `collection` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to search.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {*} Returns the matched element, else `undefined`.\\n     * @example\\n     *\\n     * _.findLast([1, 2, 3, 4], function(n) {\\n     *   return n % 2 == 1;\\n     * });\\n     * // => 3\\n     */\\n    var findLast = createFind(baseEachRight, true);\\n\\n    /**\\n     * Performs a deep comparison between each element in `collection` and the\\n     * source object, returning the first element that has equivalent property\\n     * values.\\n     *\\n     * **Note:** This method supports comparing arrays, booleans, `Date` objects,\\n     * numbers, `Object` objects, regexes, and strings. Objects are compared by\\n     * their own, not inherited, enumerable properties. For comparing a single\\n     * own or inherited property value see `_.matchesProperty`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to search.\\n     * @param {Object} source The object of property values to match.\\n     * @returns {*} Returns the matched element, else `undefined`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': true },\\n     *   { 'user': 'fred',   'age': 40, 'active': false }\\n     * ];\\n     *\\n     * _.result(_.findWhere(users, { 'age': 36, 'active': true }), 'user');\\n     * // => 'barney'\\n     *\\n     * _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user');\\n     * // => 'fred'\\n     */\\n    function findWhere(collection, source) {\\n      return find(collection, baseMatches(source));\\n    }\\n\\n    /**\\n     * Iterates over elements of `collection` invoking `iteratee` for each element.\\n     * The `iteratee` is bound to `thisArg` and invoked with three arguments:\\n     * (value, index|key, collection). Iteratee functions may exit iteration early\\n     * by explicitly returning `false`.\\n     *\\n     * **Note:** As with other \\\"Collections\\\" methods, objects with a \\\"length\\\" property\\n     * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`\\n     * may be used for object iteration.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias each\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Array|Object|string} Returns `collection`.\\n     * @example\\n     *\\n     * _([1, 2]).forEach(function(n) {\\n     *   console.log(n);\\n     * }).value();\\n     * // => logs each value from left to right and returns the array\\n     *\\n     * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) {\\n     *   console.log(n, key);\\n     * });\\n     * // => logs each value-key pair and returns the object (iteration order is not guaranteed)\\n     */\\n    var forEach = createForEach(arrayEach, baseEach);\\n\\n    /**\\n     * This method is like `_.forEach` except that it iterates over elements of\\n     * `collection` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias eachRight\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Array|Object|string} Returns `collection`.\\n     * @example\\n     *\\n     * _([1, 2]).forEachRight(function(n) {\\n     *   console.log(n);\\n     * }).value();\\n     * // => logs each value from right to left and returns the array\\n     */\\n    var forEachRight = createForEach(arrayEachRight, baseEachRight);\\n\\n    /**\\n     * Creates an object composed of keys generated from the results of running\\n     * each element of `collection` through `iteratee`. The corresponding value\\n     * of each key is an array of the elements responsible for generating the key.\\n     * The `iteratee` is bound to `thisArg` and invoked with three arguments:\\n     * (value, index|key, collection).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns the composed aggregate object.\\n     * @example\\n     *\\n     * _.groupBy([4.2, 6.1, 6.4], function(n) {\\n     *   return Math.floor(n);\\n     * });\\n     * // => { '4': [4.2], '6': [6.1, 6.4] }\\n     *\\n     * _.groupBy([4.2, 6.1, 6.4], function(n) {\\n     *   return this.floor(n);\\n     * }, Math);\\n     * // => { '4': [4.2], '6': [6.1, 6.4] }\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.groupBy(['one', 'two', 'three'], 'length');\\n     * // => { '3': ['one', 'two'], '5': ['three'] }\\n     */\\n    var groupBy = createAggregator(function(result, value, key) {\\n      if (hasOwnProperty.call(result, key)) {\\n        result[key].push(value);\\n      } else {\\n        result[key] = [value];\\n      }\\n    });\\n\\n    /**\\n     * Checks if `value` is in `collection` using\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\\n     * for equality comparisons. If `fromIndex` is negative, it is used as the offset\\n     * from the end of `collection`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias contains, include\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to search.\\n     * @param {*} target The value to search for.\\n     * @param {number} [fromIndex=0] The index to search from.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.\\n     * @returns {boolean} Returns `true` if a matching element is found, else `false`.\\n     * @example\\n     *\\n     * _.includes([1, 2, 3], 1);\\n     * // => true\\n     *\\n     * _.includes([1, 2, 3], 1, 2);\\n     * // => false\\n     *\\n     * _.includes({ 'user': 'fred', 'age': 40 }, 'fred');\\n     * // => true\\n     *\\n     * _.includes('pebbles', 'eb');\\n     * // => true\\n     */\\n    function includes(collection, target, fromIndex, guard) {\\n      var length = collection ? getLength(collection) : 0;\\n      if (!isLength(length)) {\\n        collection = values(collection);\\n        length = collection.length;\\n      }\\n      if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {\\n        fromIndex = 0;\\n      } else {\\n        fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);\\n      }\\n      return (typeof collection == 'string' || !isArray(collection) && isString(collection))\\n        ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1)\\n        : (!!length && getIndexOf(collection, target, fromIndex) > -1);\\n    }\\n\\n    /**\\n     * Creates an object composed of keys generated from the results of running\\n     * each element of `collection` through `iteratee`. The corresponding value\\n     * of each key is the last element responsible for generating the key. The\\n     * iteratee function is bound to `thisArg` and invoked with three arguments:\\n     * (value, index|key, collection).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns the composed aggregate object.\\n     * @example\\n     *\\n     * var keyData = [\\n     *   { 'dir': 'left', 'code': 97 },\\n     *   { 'dir': 'right', 'code': 100 }\\n     * ];\\n     *\\n     * _.indexBy(keyData, 'dir');\\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\\n     *\\n     * _.indexBy(keyData, function(object) {\\n     *   return String.fromCharCode(object.code);\\n     * });\\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\\n     *\\n     * _.indexBy(keyData, function(object) {\\n     *   return this.fromCharCode(object.code);\\n     * }, String);\\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\\n     */\\n    var indexBy = createAggregator(function(result, value, key) {\\n      result[key] = value;\\n    });\\n\\n    /**\\n     * Invokes the method at `path` of each element in `collection`, returning\\n     * an array of the results of each invoked method. Any additional arguments\\n     * are provided to each invoked method. If `methodName` is a function it is\\n     * invoked for, and `this` bound to, each element in `collection`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Array|Function|string} path The path of the method to invoke or\\n     *  the function invoked per iteration.\\n     * @param {...*} [args] The arguments to invoke the method with.\\n     * @returns {Array} Returns the array of results.\\n     * @example\\n     *\\n     * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');\\n     * // => [[1, 5, 7], [1, 2, 3]]\\n     *\\n     * _.invoke([123, 456], String.prototype.split, '');\\n     * // => [['1', '2', '3'], ['4', '5', '6']]\\n     */\\n    var invoke = restParam(function(collection, path, args) {\\n      var index = -1,\\n          isFunc = typeof path == 'function',\\n          isProp = isKey(path),\\n          result = isArrayLike(collection) ? Array(collection.length) : [];\\n\\n      baseEach(collection, function(value) {\\n        var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined);\\n        result[++index] = func ? func.apply(value, args) : invokePath(value, path, args);\\n      });\\n      return result;\\n    });\\n\\n    /**\\n     * Creates an array of values by running each element in `collection` through\\n     * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three\\n     * arguments: (value, index|key, collection).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * Many lodash methods are guarded to work as iteratees for methods like\\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\\n     *\\n     * The guarded methods are:\\n     * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`,\\n     * `drop`, `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`,\\n     * `parseInt`, `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`,\\n     * `trimLeft`, `trimRight`, `trunc`, `random`, `range`, `sample`, `some`,\\n     * `sum`, `uniq`, and `words`\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias collect\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Array} Returns the new mapped array.\\n     * @example\\n     *\\n     * function timesThree(n) {\\n     *   return n * 3;\\n     * }\\n     *\\n     * _.map([1, 2], timesThree);\\n     * // => [3, 6]\\n     *\\n     * _.map({ 'a': 1, 'b': 2 }, timesThree);\\n     * // => [3, 6] (iteration order is not guaranteed)\\n     *\\n     * var users = [\\n     *   { 'user': 'barney' },\\n     *   { 'user': 'fred' }\\n     * ];\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.map(users, 'user');\\n     * // => ['barney', 'fred']\\n     */\\n    function map(collection, iteratee, thisArg) {\\n      var func = isArray(collection) ? arrayMap : baseMap;\\n      iteratee = getCallback(iteratee, thisArg, 3);\\n      return func(collection, iteratee);\\n    }\\n\\n    /**\\n     * Creates an array of elements split into two groups, the first of which\\n     * contains elements `predicate` returns truthy for, while the second of which\\n     * contains elements `predicate` returns falsey for. The predicate is bound\\n     * to `thisArg` and invoked with three arguments: (value, index|key, collection).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Array} Returns the array of grouped elements.\\n     * @example\\n     *\\n     * _.partition([1, 2, 3], function(n) {\\n     *   return n % 2;\\n     * });\\n     * // => [[1, 3], [2]]\\n     *\\n     * _.partition([1.2, 2.3, 3.4], function(n) {\\n     *   return this.floor(n) % 2;\\n     * }, Math);\\n     * // => [[1.2, 3.4], [2.3]]\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'age': 36, 'active': false },\\n     *   { 'user': 'fred',    'age': 40, 'active': true },\\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\\n     * ];\\n     *\\n     * var mapper = function(array) {\\n     *   return _.pluck(array, 'user');\\n     * };\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.map(_.partition(users, { 'age': 1, 'active': false }), mapper);\\n     * // => [['pebbles'], ['barney', 'fred']]\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.map(_.partition(users, 'active', false), mapper);\\n     * // => [['barney', 'pebbles'], ['fred']]\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.map(_.partition(users, 'active'), mapper);\\n     * // => [['fred'], ['barney', 'pebbles']]\\n     */\\n    var partition = createAggregator(function(result, value, key) {\\n      result[key ? 0 : 1].push(value);\\n    }, function() { return [[], []]; });\\n\\n    /**\\n     * Gets the property value of `path` from all elements in `collection`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Array|string} path The path of the property to pluck.\\n     * @returns {Array} Returns the property values.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36 },\\n     *   { 'user': 'fred',   'age': 40 }\\n     * ];\\n     *\\n     * _.pluck(users, 'user');\\n     * // => ['barney', 'fred']\\n     *\\n     * var userIndex = _.indexBy(users, 'user');\\n     * _.pluck(userIndex, 'age');\\n     * // => [36, 40] (iteration order is not guaranteed)\\n     */\\n    function pluck(collection, path) {\\n      return map(collection, property(path));\\n    }\\n\\n    /**\\n     * Reduces `collection` to a value which is the accumulated result of running\\n     * each element in `collection` through `iteratee`, where each successive\\n     * invocation is supplied the return value of the previous. If `accumulator`\\n     * is not provided the first element of `collection` is used as the initial\\n     * value. The `iteratee` is bound to `thisArg` and invoked with four arguments:\\n     * (accumulator, value, index|key, collection).\\n     *\\n     * Many lodash methods are guarded to work as iteratees for methods like\\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\\n     *\\n     * The guarded methods are:\\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `sortByAll`,\\n     * and `sortByOrder`\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias foldl, inject\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [accumulator] The initial value.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {*} Returns the accumulated value.\\n     * @example\\n     *\\n     * _.reduce([1, 2], function(total, n) {\\n     *   return total + n;\\n     * });\\n     * // => 3\\n     *\\n     * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) {\\n     *   result[key] = n * 3;\\n     *   return result;\\n     * }, {});\\n     * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed)\\n     */\\n    var reduce = createReduce(arrayReduce, baseEach);\\n\\n    /**\\n     * This method is like `_.reduce` except that it iterates over elements of\\n     * `collection` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias foldr\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [accumulator] The initial value.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {*} Returns the accumulated value.\\n     * @example\\n     *\\n     * var array = [[0, 1], [2, 3], [4, 5]];\\n     *\\n     * _.reduceRight(array, function(flattened, other) {\\n     *   return flattened.concat(other);\\n     * }, []);\\n     * // => [4, 5, 2, 3, 0, 1]\\n     */\\n    var reduceRight = createReduce(arrayReduceRight, baseEachRight);\\n\\n    /**\\n     * The opposite of `_.filter`; this method returns the elements of `collection`\\n     * that `predicate` does **not** return truthy for.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Array} Returns the new filtered array.\\n     * @example\\n     *\\n     * _.reject([1, 2, 3, 4], function(n) {\\n     *   return n % 2 == 0;\\n     * });\\n     * // => [1, 3]\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': false },\\n     *   { 'user': 'fred',   'age': 40, 'active': true }\\n     * ];\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user');\\n     * // => ['barney']\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.pluck(_.reject(users, 'active', false), 'user');\\n     * // => ['fred']\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.pluck(_.reject(users, 'active'), 'user');\\n     * // => ['barney']\\n     */\\n    function reject(collection, predicate, thisArg) {\\n      var func = isArray(collection) ? arrayFilter : baseFilter;\\n      predicate = getCallback(predicate, thisArg, 3);\\n      return func(collection, function(value, index, collection) {\\n        return !predicate(value, index, collection);\\n      });\\n    }\\n\\n    /**\\n     * Gets a random element or `n` random elements from a collection.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to sample.\\n     * @param {number} [n] The number of elements to sample.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {*} Returns the random sample(s).\\n     * @example\\n     *\\n     * _.sample([1, 2, 3, 4]);\\n     * // => 2\\n     *\\n     * _.sample([1, 2, 3, 4], 2);\\n     * // => [3, 1]\\n     */\\n    function sample(collection, n, guard) {\\n      if (guard ? isIterateeCall(collection, n, guard) : n == null) {\\n        collection = toIterable(collection);\\n        var length = collection.length;\\n        return length > 0 ? collection[baseRandom(0, length - 1)] : undefined;\\n      }\\n      var index = -1,\\n          result = toArray(collection),\\n          length = result.length,\\n          lastIndex = length - 1;\\n\\n      n = nativeMin(n < 0 ? 0 : (+n || 0), length);\\n      while (++index < n) {\\n        var rand = baseRandom(index, lastIndex),\\n            value = result[rand];\\n\\n        result[rand] = result[index];\\n        result[index] = value;\\n      }\\n      result.length = n;\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an array of shuffled values, using a version of the\\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to shuffle.\\n     * @returns {Array} Returns the new shuffled array.\\n     * @example\\n     *\\n     * _.shuffle([1, 2, 3, 4]);\\n     * // => [4, 1, 3, 2]\\n     */\\n    function shuffle(collection) {\\n      return sample(collection, POSITIVE_INFINITY);\\n    }\\n\\n    /**\\n     * Gets the size of `collection` by returning its length for array-like\\n     * values or the number of own enumerable properties for objects.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to inspect.\\n     * @returns {number} Returns the size of `collection`.\\n     * @example\\n     *\\n     * _.size([1, 2, 3]);\\n     * // => 3\\n     *\\n     * _.size({ 'a': 1, 'b': 2 });\\n     * // => 2\\n     *\\n     * _.size('pebbles');\\n     * // => 7\\n     */\\n    function size(collection) {\\n      var length = collection ? getLength(collection) : 0;\\n      return isLength(length) ? length : keys(collection).length;\\n    }\\n\\n    /**\\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\\n     * The function returns as soon as it finds a passing value and does not iterate\\n     * over the entire collection. The predicate is bound to `thisArg` and invoked\\n     * with three arguments: (value, index|key, collection).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias any\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.some([null, 0, 'yes', false], Boolean);\\n     * // => true\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'active': true },\\n     *   { 'user': 'fred',   'active': false }\\n     * ];\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.some(users, { 'user': 'barney', 'active': false });\\n     * // => false\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.some(users, 'active', false);\\n     * // => true\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.some(users, 'active');\\n     * // => true\\n     */\\n    function some(collection, predicate, thisArg) {\\n      var func = isArray(collection) ? arraySome : baseSome;\\n      if (thisArg && isIterateeCall(collection, predicate, thisArg)) {\\n        predicate = undefined;\\n      }\\n      if (typeof predicate != 'function' || thisArg !== undefined) {\\n        predicate = getCallback(predicate, thisArg, 3);\\n      }\\n      return func(collection, predicate);\\n    }\\n\\n    /**\\n     * Creates an array of elements, sorted in ascending order by the results of\\n     * running each element in a collection through `iteratee`. This method performs\\n     * a stable sort, that is, it preserves the original sort order of equal elements.\\n     * The `iteratee` is bound to `thisArg` and invoked with three arguments:\\n     * (value, index|key, collection).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Array} Returns the new sorted array.\\n     * @example\\n     *\\n     * _.sortBy([1, 2, 3], function(n) {\\n     *   return Math.sin(n);\\n     * });\\n     * // => [3, 1, 2]\\n     *\\n     * _.sortBy([1, 2, 3], function(n) {\\n     *   return this.sin(n);\\n     * }, Math);\\n     * // => [3, 1, 2]\\n     *\\n     * var users = [\\n     *   { 'user': 'fred' },\\n     *   { 'user': 'pebbles' },\\n     *   { 'user': 'barney' }\\n     * ];\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.pluck(_.sortBy(users, 'user'), 'user');\\n     * // => ['barney', 'fred', 'pebbles']\\n     */\\n    function sortBy(collection, iteratee, thisArg) {\\n      if (collection == null) {\\n        return [];\\n      }\\n      if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\\n        iteratee = undefined;\\n      }\\n      var index = -1;\\n      iteratee = getCallback(iteratee, thisArg, 3);\\n\\n      var result = baseMap(collection, function(value, key, collection) {\\n        return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value };\\n      });\\n      return baseSortBy(result, compareAscending);\\n    }\\n\\n    /**\\n     * This method is like `_.sortBy` except that it can sort by multiple iteratees\\n     * or property names.\\n     *\\n     * If a property name is provided for an iteratee the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If an object is provided for an iteratee the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {...(Function|Function[]|Object|Object[]|string|string[])} iteratees\\n     *  The iteratees to sort by, specified as individual values or arrays of values.\\n     * @returns {Array} Returns the new sorted array.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'fred',   'age': 48 },\\n     *   { 'user': 'barney', 'age': 36 },\\n     *   { 'user': 'fred',   'age': 42 },\\n     *   { 'user': 'barney', 'age': 34 }\\n     * ];\\n     *\\n     * _.map(_.sortByAll(users, ['user', 'age']), _.values);\\n     * // => [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]]\\n     *\\n     * _.map(_.sortByAll(users, 'user', function(chr) {\\n     *   return Math.floor(chr.age / 10);\\n     * }), _.values);\\n     * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]\\n     */\\n    var sortByAll = restParam(function(collection, iteratees) {\\n      if (collection == null) {\\n        return [];\\n      }\\n      var guard = iteratees[2];\\n      if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) {\\n        iteratees.length = 1;\\n      }\\n      return baseSortByOrder(collection, baseFlatten(iteratees), []);\\n    });\\n\\n    /**\\n     * This method is like `_.sortByAll` except that it allows specifying the\\n     * sort orders of the iteratees to sort by. If `orders` is unspecified, all\\n     * values are sorted in ascending order. Otherwise, a value is sorted in\\n     * ascending order if its corresponding order is \\\"asc\\\", and descending if \\\"desc\\\".\\n     *\\n     * If a property name is provided for an iteratee the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If an object is provided for an iteratee the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\\n     * @param {boolean[]} [orders] The sort orders of `iteratees`.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.\\n     * @returns {Array} Returns the new sorted array.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'fred',   'age': 48 },\\n     *   { 'user': 'barney', 'age': 34 },\\n     *   { 'user': 'fred',   'age': 42 },\\n     *   { 'user': 'barney', 'age': 36 }\\n     * ];\\n     *\\n     * // sort by `user` in ascending order and by `age` in descending order\\n     * _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values);\\n     * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]\\n     */\\n    function sortByOrder(collection, iteratees, orders, guard) {\\n      if (collection == null) {\\n        return [];\\n      }\\n      if (guard && isIterateeCall(iteratees, orders, guard)) {\\n        orders = undefined;\\n      }\\n      if (!isArray(iteratees)) {\\n        iteratees = iteratees == null ? [] : [iteratees];\\n      }\\n      if (!isArray(orders)) {\\n        orders = orders == null ? [] : [orders];\\n      }\\n      return baseSortByOrder(collection, iteratees, orders);\\n    }\\n\\n    /**\\n     * Performs a deep comparison between each element in `collection` and the\\n     * source object, returning an array of all elements that have equivalent\\n     * property values.\\n     *\\n     * **Note:** This method supports comparing arrays, booleans, `Date` objects,\\n     * numbers, `Object` objects, regexes, and strings. Objects are compared by\\n     * their own, not inherited, enumerable properties. For comparing a single\\n     * own or inherited property value see `_.matchesProperty`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to search.\\n     * @param {Object} source The object of property values to match.\\n     * @returns {Array} Returns the new filtered array.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy'] },\\n     *   { 'user': 'fred',   'age': 40, 'active': true, 'pets': ['baby puss', 'dino'] }\\n     * ];\\n     *\\n     * _.pluck(_.where(users, { 'age': 36, 'active': false }), 'user');\\n     * // => ['barney']\\n     *\\n     * _.pluck(_.where(users, { 'pets': ['dino'] }), 'user');\\n     * // => ['fred']\\n     */\\n    function where(collection, source) {\\n      return filter(collection, baseMatches(source));\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Gets the number of milliseconds that have elapsed since the Unix epoch\\n     * (1 January 1970 00:00:00 UTC).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Date\\n     * @example\\n     *\\n     * _.defer(function(stamp) {\\n     *   console.log(_.now() - stamp);\\n     * }, _.now());\\n     * // => logs the number of milliseconds it took for the deferred function to be invoked\\n     */\\n    var now = nativeNow || function() {\\n      return new Date().getTime();\\n    };\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * The opposite of `_.before`; this method creates a function that invokes\\n     * `func` once it is called `n` or more times.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {number} n The number of calls before `func` is invoked.\\n     * @param {Function} func The function to restrict.\\n     * @returns {Function} Returns the new restricted function.\\n     * @example\\n     *\\n     * var saves = ['profile', 'settings'];\\n     *\\n     * var done = _.after(saves.length, function() {\\n     *   console.log('done saving!');\\n     * });\\n     *\\n     * _.forEach(saves, function(type) {\\n     *   asyncSave({ 'type': type, 'complete': done });\\n     * });\\n     * // => logs 'done saving!' after the two async saves have completed\\n     */\\n    function after(n, func) {\\n      if (typeof func != 'function') {\\n        if (typeof n == 'function') {\\n          var temp = n;\\n          n = func;\\n          func = temp;\\n        } else {\\n          throw new TypeError(FUNC_ERROR_TEXT);\\n        }\\n      }\\n      n = nativeIsFinite(n = +n) ? n : 0;\\n      return function() {\\n        if (--n < 1) {\\n          return func.apply(this, arguments);\\n        }\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that accepts up to `n` arguments ignoring any\\n     * additional arguments.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to cap arguments for.\\n     * @param {number} [n=func.length] The arity cap.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\\n     * // => [6, 8, 10]\\n     */\\n    function ary(func, n, guard) {\\n      if (guard && isIterateeCall(func, n, guard)) {\\n        n = undefined;\\n      }\\n      n = (func && n == null) ? func.length : nativeMax(+n || 0, 0);\\n      return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func`, with the `this` binding and arguments\\n     * of the created function, while it is called less than `n` times. Subsequent\\n     * calls to the created function return the result of the last `func` invocation.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {number} n The number of calls at which `func` is no longer invoked.\\n     * @param {Function} func The function to restrict.\\n     * @returns {Function} Returns the new restricted function.\\n     * @example\\n     *\\n     * jQuery('#add').on('click', _.before(5, addContactToList));\\n     * // => allows adding up to 4 contacts to the list\\n     */\\n    function before(n, func) {\\n      var result;\\n      if (typeof func != 'function') {\\n        if (typeof n == 'function') {\\n          var temp = n;\\n          n = func;\\n          func = temp;\\n        } else {\\n          throw new TypeError(FUNC_ERROR_TEXT);\\n        }\\n      }\\n      return function() {\\n        if (--n > 0) {\\n          result = func.apply(this, arguments);\\n        }\\n        if (n <= 1) {\\n          func = undefined;\\n        }\\n        return result;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\\n     * and prepends any additional `_.bind` arguments to those provided to the\\n     * bound function.\\n     *\\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\\n     * may be used as a placeholder for partially applied arguments.\\n     *\\n     * **Note:** Unlike native `Function#bind` this method does not set the \\\"length\\\"\\n     * property of bound functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to bind.\\n     * @param {*} thisArg The `this` binding of `func`.\\n     * @param {...*} [partials] The arguments to be partially applied.\\n     * @returns {Function} Returns the new bound function.\\n     * @example\\n     *\\n     * var greet = function(greeting, punctuation) {\\n     *   return greeting + ' ' + this.user + punctuation;\\n     * };\\n     *\\n     * var object = { 'user': 'fred' };\\n     *\\n     * var bound = _.bind(greet, object, 'hi');\\n     * bound('!');\\n     * // => 'hi fred!'\\n     *\\n     * // using placeholders\\n     * var bound = _.bind(greet, object, _, '!');\\n     * bound('hi');\\n     * // => 'hi fred!'\\n     */\\n    var bind = restParam(function(func, thisArg, partials) {\\n      var bitmask = BIND_FLAG;\\n      if (partials.length) {\\n        var holders = replaceHolders(partials, bind.placeholder);\\n        bitmask |= PARTIAL_FLAG;\\n      }\\n      return createWrapper(func, bitmask, thisArg, partials, holders);\\n    });\\n\\n    /**\\n     * Binds methods of an object to the object itself, overwriting the existing\\n     * method. Method names may be specified as individual arguments or as arrays\\n     * of method names. If no method names are provided all enumerable function\\n     * properties, own and inherited, of `object` are bound.\\n     *\\n     * **Note:** This method does not set the \\\"length\\\" property of bound functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Object} object The object to bind and assign the bound methods to.\\n     * @param {...(string|string[])} [methodNames] The object method names to bind,\\n     *  specified as individual method names or arrays of method names.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var view = {\\n     *   'label': 'docs',\\n     *   'onClick': function() {\\n     *     console.log('clicked ' + this.label);\\n     *   }\\n     * };\\n     *\\n     * _.bindAll(view);\\n     * jQuery('#docs').on('click', view.onClick);\\n     * // => logs 'clicked docs' when the element is clicked\\n     */\\n    var bindAll = restParam(function(object, methodNames) {\\n      methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object);\\n\\n      var index = -1,\\n          length = methodNames.length;\\n\\n      while (++index < length) {\\n        var key = methodNames[index];\\n        object[key] = createWrapper(object[key], BIND_FLAG, object);\\n      }\\n      return object;\\n    });\\n\\n    /**\\n     * Creates a function that invokes the method at `object[key]` and prepends\\n     * any additional `_.bindKey` arguments to those provided to the bound function.\\n     *\\n     * This method differs from `_.bind` by allowing bound functions to reference\\n     * methods that may be redefined or don't yet exist.\\n     * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\\n     * for more details.\\n     *\\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\\n     * builds, may be used as a placeholder for partially applied arguments.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Object} object The object the method belongs to.\\n     * @param {string} key The key of the method.\\n     * @param {...*} [partials] The arguments to be partially applied.\\n     * @returns {Function} Returns the new bound function.\\n     * @example\\n     *\\n     * var object = {\\n     *   'user': 'fred',\\n     *   'greet': function(greeting, punctuation) {\\n     *     return greeting + ' ' + this.user + punctuation;\\n     *   }\\n     * };\\n     *\\n     * var bound = _.bindKey(object, 'greet', 'hi');\\n     * bound('!');\\n     * // => 'hi fred!'\\n     *\\n     * object.greet = function(greeting, punctuation) {\\n     *   return greeting + 'ya ' + this.user + punctuation;\\n     * };\\n     *\\n     * bound('!');\\n     * // => 'hiya fred!'\\n     *\\n     * // using placeholders\\n     * var bound = _.bindKey(object, 'greet', _, '!');\\n     * bound('hi');\\n     * // => 'hiya fred!'\\n     */\\n    var bindKey = restParam(function(object, key, partials) {\\n      var bitmask = BIND_FLAG | BIND_KEY_FLAG;\\n      if (partials.length) {\\n        var holders = replaceHolders(partials, bindKey.placeholder);\\n        bitmask |= PARTIAL_FLAG;\\n      }\\n      return createWrapper(key, bitmask, object, partials, holders);\\n    });\\n\\n    /**\\n     * Creates a function that accepts one or more arguments of `func` that when\\n     * called either invokes `func` returning its result, if all `func` arguments\\n     * have been provided, or returns a function that accepts one or more of the\\n     * remaining `func` arguments, and so on. The arity of `func` may be specified\\n     * if `func.length` is not sufficient.\\n     *\\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\\n     * may be used as a placeholder for provided arguments.\\n     *\\n     * **Note:** This method does not set the \\\"length\\\" property of curried functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to curry.\\n     * @param {number} [arity=func.length] The arity of `func`.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Function} Returns the new curried function.\\n     * @example\\n     *\\n     * var abc = function(a, b, c) {\\n     *   return [a, b, c];\\n     * };\\n     *\\n     * var curried = _.curry(abc);\\n     *\\n     * curried(1)(2)(3);\\n     * // => [1, 2, 3]\\n     *\\n     * curried(1, 2)(3);\\n     * // => [1, 2, 3]\\n     *\\n     * curried(1, 2, 3);\\n     * // => [1, 2, 3]\\n     *\\n     * // using placeholders\\n     * curried(1)(_, 3)(2);\\n     * // => [1, 2, 3]\\n     */\\n    var curry = createCurry(CURRY_FLAG);\\n\\n    /**\\n     * This method is like `_.curry` except that arguments are applied to `func`\\n     * in the manner of `_.partialRight` instead of `_.partial`.\\n     *\\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\\n     * builds, may be used as a placeholder for provided arguments.\\n     *\\n     * **Note:** This method does not set the \\\"length\\\" property of curried functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to curry.\\n     * @param {number} [arity=func.length] The arity of `func`.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Function} Returns the new curried function.\\n     * @example\\n     *\\n     * var abc = function(a, b, c) {\\n     *   return [a, b, c];\\n     * };\\n     *\\n     * var curried = _.curryRight(abc);\\n     *\\n     * curried(3)(2)(1);\\n     * // => [1, 2, 3]\\n     *\\n     * curried(2, 3)(1);\\n     * // => [1, 2, 3]\\n     *\\n     * curried(1, 2, 3);\\n     * // => [1, 2, 3]\\n     *\\n     * // using placeholders\\n     * curried(3)(1, _)(2);\\n     * // => [1, 2, 3]\\n     */\\n    var curryRight = createCurry(CURRY_RIGHT_FLAG);\\n\\n    /**\\n     * Creates a debounced function that delays invoking `func` until after `wait`\\n     * milliseconds have elapsed since the last time the debounced function was\\n     * invoked. The debounced function comes with a `cancel` method to cancel\\n     * delayed invocations. Provide an options object to indicate that `func`\\n     * should be invoked on the leading and/or trailing edge of the `wait` timeout.\\n     * Subsequent calls to the debounced function return the result of the last\\n     * `func` invocation.\\n     *\\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\\n     * on the trailing edge of the timeout only if the the debounced function is\\n     * invoked more than once during the `wait` timeout.\\n     *\\n     * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\\n     * for details over the differences between `_.debounce` and `_.throttle`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to debounce.\\n     * @param {number} [wait=0] The number of milliseconds to delay.\\n     * @param {Object} [options] The options object.\\n     * @param {boolean} [options.leading=false] Specify invoking on the leading\\n     *  edge of the timeout.\\n     * @param {number} [options.maxWait] The maximum time `func` is allowed to be\\n     *  delayed before it is invoked.\\n     * @param {boolean} [options.trailing=true] Specify invoking on the trailing\\n     *  edge of the timeout.\\n     * @returns {Function} Returns the new debounced function.\\n     * @example\\n     *\\n     * // avoid costly calculations while the window size is in flux\\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\\n     *\\n     * // invoke `sendMail` when the click event is fired, debouncing subsequent calls\\n     * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\\n     *   'leading': true,\\n     *   'trailing': false\\n     * }));\\n     *\\n     * // ensure `batchLog` is invoked once after 1 second of debounced calls\\n     * var source = new EventSource('/stream');\\n     * jQuery(source).on('message', _.debounce(batchLog, 250, {\\n     *   'maxWait': 1000\\n     * }));\\n     *\\n     * // cancel a debounced call\\n     * var todoChanges = _.debounce(batchLog, 1000);\\n     * Object.observe(models.todo, todoChanges);\\n     *\\n     * Object.observe(models, function(changes) {\\n     *   if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {\\n     *     todoChanges.cancel();\\n     *   }\\n     * }, ['delete']);\\n     *\\n     * // ...at some point `models.todo` is changed\\n     * models.todo.completed = true;\\n     *\\n     * // ...before 1 second has passed `models.todo` is deleted\\n     * // which cancels the debounced `todoChanges` call\\n     * delete models.todo;\\n     */\\n    function debounce(func, wait, options) {\\n      var args,\\n          maxTimeoutId,\\n          result,\\n          stamp,\\n          thisArg,\\n          timeoutId,\\n          trailingCall,\\n          lastCalled = 0,\\n          maxWait = false,\\n          trailing = true;\\n\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      wait = wait < 0 ? 0 : (+wait || 0);\\n      if (options === true) {\\n        var leading = true;\\n        trailing = false;\\n      } else if (isObject(options)) {\\n        leading = !!options.leading;\\n        maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\\n      }\\n\\n      function cancel() {\\n        if (timeoutId) {\\n          clearTimeout(timeoutId);\\n        }\\n        if (maxTimeoutId) {\\n          clearTimeout(maxTimeoutId);\\n        }\\n        lastCalled = 0;\\n        maxTimeoutId = timeoutId = trailingCall = undefined;\\n      }\\n\\n      function complete(isCalled, id) {\\n        if (id) {\\n          clearTimeout(id);\\n        }\\n        maxTimeoutId = timeoutId = trailingCall = undefined;\\n        if (isCalled) {\\n          lastCalled = now();\\n          result = func.apply(thisArg, args);\\n          if (!timeoutId && !maxTimeoutId) {\\n            args = thisArg = undefined;\\n          }\\n        }\\n      }\\n\\n      function delayed() {\\n        var remaining = wait - (now() - stamp);\\n        if (remaining <= 0 || remaining > wait) {\\n          complete(trailingCall, maxTimeoutId);\\n        } else {\\n          timeoutId = setTimeout(delayed, remaining);\\n        }\\n      }\\n\\n      function maxDelayed() {\\n        complete(trailing, timeoutId);\\n      }\\n\\n      function debounced() {\\n        args = arguments;\\n        stamp = now();\\n        thisArg = this;\\n        trailingCall = trailing && (timeoutId || !leading);\\n\\n        if (maxWait === false) {\\n          var leadingCall = leading && !timeoutId;\\n        } else {\\n          if (!maxTimeoutId && !leading) {\\n            lastCalled = stamp;\\n          }\\n          var remaining = maxWait - (stamp - lastCalled),\\n              isCalled = remaining <= 0 || remaining > maxWait;\\n\\n          if (isCalled) {\\n            if (maxTimeoutId) {\\n              maxTimeoutId = clearTimeout(maxTimeoutId);\\n            }\\n            lastCalled = stamp;\\n            result = func.apply(thisArg, args);\\n          }\\n          else if (!maxTimeoutId) {\\n            maxTimeoutId = setTimeout(maxDelayed, remaining);\\n          }\\n        }\\n        if (isCalled && timeoutId) {\\n          timeoutId = clearTimeout(timeoutId);\\n        }\\n        else if (!timeoutId && wait !== maxWait) {\\n          timeoutId = setTimeout(delayed, wait);\\n        }\\n        if (leadingCall) {\\n          isCalled = true;\\n          result = func.apply(thisArg, args);\\n        }\\n        if (isCalled && !timeoutId && !maxTimeoutId) {\\n          args = thisArg = undefined;\\n        }\\n        return result;\\n      }\\n      debounced.cancel = cancel;\\n      return debounced;\\n    }\\n\\n    /**\\n     * Defers invoking the `func` until the current call stack has cleared. Any\\n     * additional arguments are provided to `func` when it is invoked.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to defer.\\n     * @param {...*} [args] The arguments to invoke the function with.\\n     * @returns {number} Returns the timer id.\\n     * @example\\n     *\\n     * _.defer(function(text) {\\n     *   console.log(text);\\n     * }, 'deferred');\\n     * // logs 'deferred' after one or more milliseconds\\n     */\\n    var defer = restParam(function(func, args) {\\n      return baseDelay(func, 1, args);\\n    });\\n\\n    /**\\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\\n     * provided to `func` when it is invoked.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to delay.\\n     * @param {number} wait The number of milliseconds to delay invocation.\\n     * @param {...*} [args] The arguments to invoke the function with.\\n     * @returns {number} Returns the timer id.\\n     * @example\\n     *\\n     * _.delay(function(text) {\\n     *   console.log(text);\\n     * }, 1000, 'later');\\n     * // => logs 'later' after one second\\n     */\\n    var delay = restParam(function(func, wait, args) {\\n      return baseDelay(func, wait, args);\\n    });\\n\\n    /**\\n     * Creates a function that returns the result of invoking the provided\\n     * functions with the `this` binding of the created function, where each\\n     * successive invocation is supplied the return value of the previous.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {...Function} [funcs] Functions to invoke.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * var addSquare = _.flow(_.add, square);\\n     * addSquare(1, 2);\\n     * // => 9\\n     */\\n    var flow = createFlow();\\n\\n    /**\\n     * This method is like `_.flow` except that it creates a function that\\n     * invokes the provided functions from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias backflow, compose\\n     * @category Function\\n     * @param {...Function} [funcs] Functions to invoke.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * var addSquare = _.flowRight(square, _.add);\\n     * addSquare(1, 2);\\n     * // => 9\\n     */\\n    var flowRight = createFlow(true);\\n\\n    /**\\n     * Creates a function that memoizes the result of `func`. If `resolver` is\\n     * provided it determines the cache key for storing the result based on the\\n     * arguments provided to the memoized function. By default, the first argument\\n     * provided to the memoized function is coerced to a string and used as the\\n     * cache key. The `func` is invoked with the `this` binding of the memoized\\n     * function.\\n     *\\n     * **Note:** The cache is exposed as the `cache` property on the memoized\\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\\n     * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object)\\n     * method interface of `get`, `has`, and `set`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to have its output memoized.\\n     * @param {Function} [resolver] The function to resolve the cache key.\\n     * @returns {Function} Returns the new memoizing function.\\n     * @example\\n     *\\n     * var upperCase = _.memoize(function(string) {\\n     *   return string.toUpperCase();\\n     * });\\n     *\\n     * upperCase('fred');\\n     * // => 'FRED'\\n     *\\n     * // modifying the result cache\\n     * upperCase.cache.set('fred', 'BARNEY');\\n     * upperCase('fred');\\n     * // => 'BARNEY'\\n     *\\n     * // replacing `_.memoize.Cache`\\n     * var object = { 'user': 'fred' };\\n     * var other = { 'user': 'barney' };\\n     * var identity = _.memoize(_.identity);\\n     *\\n     * identity(object);\\n     * // => { 'user': 'fred' }\\n     * identity(other);\\n     * // => { 'user': 'fred' }\\n     *\\n     * _.memoize.Cache = WeakMap;\\n     * var identity = _.memoize(_.identity);\\n     *\\n     * identity(object);\\n     * // => { 'user': 'fred' }\\n     * identity(other);\\n     * // => { 'user': 'barney' }\\n     */\\n    function memoize(func, resolver) {\\n      if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      var memoized = function() {\\n        var args = arguments,\\n            key = resolver ? resolver.apply(this, args) : args[0],\\n            cache = memoized.cache;\\n\\n        if (cache.has(key)) {\\n          return cache.get(key);\\n        }\\n        var result = func.apply(this, args);\\n        memoized.cache = cache.set(key, result);\\n        return result;\\n      };\\n      memoized.cache = new memoize.Cache;\\n      return memoized;\\n    }\\n\\n    /**\\n     * Creates a function that runs each argument through a corresponding\\n     * transform function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to wrap.\\n     * @param {...(Function|Function[])} [transforms] The functions to transform\\n     * arguments, specified as individual functions or arrays of functions.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * function doubled(n) {\\n     *   return n * 2;\\n     * }\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * var modded = _.modArgs(function(x, y) {\\n     *   return [x, y];\\n     * }, square, doubled);\\n     *\\n     * modded(1, 2);\\n     * // => [1, 4]\\n     *\\n     * modded(5, 10);\\n     * // => [25, 20]\\n     */\\n    var modArgs = restParam(function(func, transforms) {\\n      transforms = baseFlatten(transforms);\\n      if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      var length = transforms.length;\\n      return restParam(function(args) {\\n        var index = nativeMin(args.length, length);\\n        while (index--) {\\n          args[index] = transforms[index](args[index]);\\n        }\\n        return func.apply(this, args);\\n      });\\n    });\\n\\n    /**\\n     * Creates a function that negates the result of the predicate `func`. The\\n     * `func` predicate is invoked with the `this` binding and arguments of the\\n     * created function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} predicate The predicate to negate.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * function isEven(n) {\\n     *   return n % 2 == 0;\\n     * }\\n     *\\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\\n     * // => [1, 3, 5]\\n     */\\n    function negate(predicate) {\\n      if (typeof predicate != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      return function() {\\n        return !predicate.apply(this, arguments);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\\n     * to the function return the value of the first call. The `func` is invoked\\n     * with the `this` binding and arguments of the created function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to restrict.\\n     * @returns {Function} Returns the new restricted function.\\n     * @example\\n     *\\n     * var initialize = _.once(createApplication);\\n     * initialize();\\n     * initialize();\\n     * // `initialize` invokes `createApplication` once\\n     */\\n    function once(func) {\\n      return before(2, func);\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func` with `partial` arguments prepended\\n     * to those provided to the new function. This method is like `_.bind` except\\n     * it does **not** alter the `this` binding.\\n     *\\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\\n     * builds, may be used as a placeholder for partially applied arguments.\\n     *\\n     * **Note:** This method does not set the \\\"length\\\" property of partially\\n     * applied functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to partially apply arguments to.\\n     * @param {...*} [partials] The arguments to be partially applied.\\n     * @returns {Function} Returns the new partially applied function.\\n     * @example\\n     *\\n     * var greet = function(greeting, name) {\\n     *   return greeting + ' ' + name;\\n     * };\\n     *\\n     * var sayHelloTo = _.partial(greet, 'hello');\\n     * sayHelloTo('fred');\\n     * // => 'hello fred'\\n     *\\n     * // using placeholders\\n     * var greetFred = _.partial(greet, _, 'fred');\\n     * greetFred('hi');\\n     * // => 'hi fred'\\n     */\\n    var partial = createPartial(PARTIAL_FLAG);\\n\\n    /**\\n     * This method is like `_.partial` except that partially applied arguments\\n     * are appended to those provided to the new function.\\n     *\\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\\n     * builds, may be used as a placeholder for partially applied arguments.\\n     *\\n     * **Note:** This method does not set the \\\"length\\\" property of partially\\n     * applied functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to partially apply arguments to.\\n     * @param {...*} [partials] The arguments to be partially applied.\\n     * @returns {Function} Returns the new partially applied function.\\n     * @example\\n     *\\n     * var greet = function(greeting, name) {\\n     *   return greeting + ' ' + name;\\n     * };\\n     *\\n     * var greetFred = _.partialRight(greet, 'fred');\\n     * greetFred('hi');\\n     * // => 'hi fred'\\n     *\\n     * // using placeholders\\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\\n     * sayHelloTo('fred');\\n     * // => 'hello fred'\\n     */\\n    var partialRight = createPartial(PARTIAL_RIGHT_FLAG);\\n\\n    /**\\n     * Creates a function that invokes `func` with arguments arranged according\\n     * to the specified indexes where the argument value at the first index is\\n     * provided as the first argument, the argument value at the second index is\\n     * provided as the second argument, and so on.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to rearrange arguments for.\\n     * @param {...(number|number[])} indexes The arranged argument indexes,\\n     *  specified as individual indexes or arrays of indexes.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var rearged = _.rearg(function(a, b, c) {\\n     *   return [a, b, c];\\n     * }, 2, 0, 1);\\n     *\\n     * rearged('b', 'c', 'a')\\n     * // => ['a', 'b', 'c']\\n     *\\n     * var map = _.rearg(_.map, [1, 0]);\\n     * map(function(n) {\\n     *   return n * 3;\\n     * }, [1, 2, 3]);\\n     * // => [3, 6, 9]\\n     */\\n    var rearg = restParam(function(func, indexes) {\\n      return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes));\\n    });\\n\\n    /**\\n     * Creates a function that invokes `func` with the `this` binding of the\\n     * created function and arguments from `start` and beyond provided as an array.\\n     *\\n     * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to apply a rest parameter to.\\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var say = _.restParam(function(what, names) {\\n     *   return what + ' ' + _.initial(names).join(', ') +\\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\\n     * });\\n     *\\n     * say('hello', 'fred', 'barney', 'pebbles');\\n     * // => 'hello fred, barney, & pebbles'\\n     */\\n    function restParam(func, start) {\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\\n      return function() {\\n        var args = arguments,\\n            index = -1,\\n            length = nativeMax(args.length - start, 0),\\n            rest = Array(length);\\n\\n        while (++index < length) {\\n          rest[index] = args[start + index];\\n        }\\n        switch (start) {\\n          case 0: return func.call(this, rest);\\n          case 1: return func.call(this, args[0], rest);\\n          case 2: return func.call(this, args[0], args[1], rest);\\n        }\\n        var otherArgs = Array(start + 1);\\n        index = -1;\\n        while (++index < start) {\\n          otherArgs[index] = args[index];\\n        }\\n        otherArgs[start] = rest;\\n        return func.apply(this, otherArgs);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func` with the `this` binding of the created\\n     * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3).\\n     *\\n     * **Note:** This method is based on the [spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to spread arguments over.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var say = _.spread(function(who, what) {\\n     *   return who + ' says ' + what;\\n     * });\\n     *\\n     * say(['fred', 'hello']);\\n     * // => 'fred says hello'\\n     *\\n     * // with a Promise\\n     * var numbers = Promise.all([\\n     *   Promise.resolve(40),\\n     *   Promise.resolve(36)\\n     * ]);\\n     *\\n     * numbers.then(_.spread(function(x, y) {\\n     *   return x + y;\\n     * }));\\n     * // => a Promise of 76\\n     */\\n    function spread(func) {\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      return function(array) {\\n        return func.apply(this, array);\\n      };\\n    }\\n\\n    /**\\n     * Creates a throttled function that only invokes `func` at most once per\\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\\n     * method to cancel delayed invocations. Provide an options object to indicate\\n     * that `func` should be invoked on the leading and/or trailing edge of the\\n     * `wait` timeout. Subsequent calls to the throttled function return the\\n     * result of the last `func` call.\\n     *\\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\\n     * on the trailing edge of the timeout only if the the throttled function is\\n     * invoked more than once during the `wait` timeout.\\n     *\\n     * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\\n     * for details over the differences between `_.throttle` and `_.debounce`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to throttle.\\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\\n     * @param {Object} [options] The options object.\\n     * @param {boolean} [options.leading=true] Specify invoking on the leading\\n     *  edge of the timeout.\\n     * @param {boolean} [options.trailing=true] Specify invoking on the trailing\\n     *  edge of the timeout.\\n     * @returns {Function} Returns the new throttled function.\\n     * @example\\n     *\\n     * // avoid excessively updating the position while scrolling\\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\\n     *\\n     * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes\\n     * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {\\n     *   'trailing': false\\n     * }));\\n     *\\n     * // cancel a trailing throttled call\\n     * jQuery(window).on('popstate', throttled.cancel);\\n     */\\n    function throttle(func, wait, options) {\\n      var leading = true,\\n          trailing = true;\\n\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      if (options === false) {\\n        leading = false;\\n      } else if (isObject(options)) {\\n        leading = 'leading' in options ? !!options.leading : leading;\\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\\n      }\\n      return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });\\n    }\\n\\n    /**\\n     * Creates a function that provides `value` to the wrapper function as its\\n     * first argument. Any additional arguments provided to the function are\\n     * appended to those provided to the wrapper function. The wrapper is invoked\\n     * with the `this` binding of the created function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {*} value The value to wrap.\\n     * @param {Function} wrapper The wrapper function.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var p = _.wrap(_.escape, function(func, text) {\\n     *   return '<p>' + func(text) + '</p>';\\n     * });\\n     *\\n     * p('fred, barney, & pebbles');\\n     * // => '<p>fred, barney, &amp; pebbles</p>'\\n     */\\n    function wrap(value, wrapper) {\\n      wrapper = wrapper == null ? identity : wrapper;\\n      return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []);\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a clone of `value`. If `isDeep` is `true` nested objects are cloned,\\n     * otherwise they are assigned by reference. If `customizer` is provided it is\\n     * invoked to produce the cloned values. If `customizer` returns `undefined`\\n     * cloning is handled by the method instead. The `customizer` is bound to\\n     * `thisArg` and invoked with two argument; (value [, index|key, object]).\\n     *\\n     * **Note:** This method is loosely based on the\\n     * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).\\n     * The enumerable properties of `arguments` objects and objects created by\\n     * constructors other than `Object` are cloned to plain `Object` objects. An\\n     * empty object is returned for uncloneable values such as functions, DOM nodes,\\n     * Maps, Sets, and WeakMaps.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to clone.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @param {Function} [customizer] The function to customize cloning values.\\n     * @param {*} [thisArg] The `this` binding of `customizer`.\\n     * @returns {*} Returns the cloned value.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney' },\\n     *   { 'user': 'fred' }\\n     * ];\\n     *\\n     * var shallow = _.clone(users);\\n     * shallow[0] === users[0];\\n     * // => true\\n     *\\n     * var deep = _.clone(users, true);\\n     * deep[0] === users[0];\\n     * // => false\\n     *\\n     * // using a customizer callback\\n     * var el = _.clone(document.body, function(value) {\\n     *   if (_.isElement(value)) {\\n     *     return value.cloneNode(false);\\n     *   }\\n     * });\\n     *\\n     * el === document.body\\n     * // => false\\n     * el.nodeName\\n     * // => BODY\\n     * el.childNodes.length;\\n     * // => 0\\n     */\\n    function clone(value, isDeep, customizer, thisArg) {\\n      if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) {\\n        isDeep = false;\\n      }\\n      else if (typeof isDeep == 'function') {\\n        thisArg = customizer;\\n        customizer = isDeep;\\n        isDeep = false;\\n      }\\n      return typeof customizer == 'function'\\n        ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 1))\\n        : baseClone(value, isDeep);\\n    }\\n\\n    /**\\n     * Creates a deep clone of `value`. If `customizer` is provided it is invoked\\n     * to produce the cloned values. If `customizer` returns `undefined` cloning\\n     * is handled by the method instead. The `customizer` is bound to `thisArg`\\n     * and invoked with two argument; (value [, index|key, object]).\\n     *\\n     * **Note:** This method is loosely based on the\\n     * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).\\n     * The enumerable properties of `arguments` objects and objects created by\\n     * constructors other than `Object` are cloned to plain `Object` objects. An\\n     * empty object is returned for uncloneable values such as functions, DOM nodes,\\n     * Maps, Sets, and WeakMaps.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to deep clone.\\n     * @param {Function} [customizer] The function to customize cloning values.\\n     * @param {*} [thisArg] The `this` binding of `customizer`.\\n     * @returns {*} Returns the deep cloned value.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney' },\\n     *   { 'user': 'fred' }\\n     * ];\\n     *\\n     * var deep = _.cloneDeep(users);\\n     * deep[0] === users[0];\\n     * // => false\\n     *\\n     * // using a customizer callback\\n     * var el = _.cloneDeep(document.body, function(value) {\\n     *   if (_.isElement(value)) {\\n     *     return value.cloneNode(true);\\n     *   }\\n     * });\\n     *\\n     * el === document.body\\n     * // => false\\n     * el.nodeName\\n     * // => BODY\\n     * el.childNodes.length;\\n     * // => 20\\n     */\\n    function cloneDeep(value, customizer, thisArg) {\\n      return typeof customizer == 'function'\\n        ? baseClone(value, true, bindCallback(customizer, thisArg, 1))\\n        : baseClone(value, true);\\n    }\\n\\n    /**\\n     * Checks if `value` is greater than `other`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`.\\n     * @example\\n     *\\n     * _.gt(3, 1);\\n     * // => true\\n     *\\n     * _.gt(3, 3);\\n     * // => false\\n     *\\n     * _.gt(1, 3);\\n     * // => false\\n     */\\n    function gt(value, other) {\\n      return value > other;\\n    }\\n\\n    /**\\n     * Checks if `value` is greater than or equal to `other`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`.\\n     * @example\\n     *\\n     * _.gte(3, 1);\\n     * // => true\\n     *\\n     * _.gte(3, 3);\\n     * // => true\\n     *\\n     * _.gte(1, 3);\\n     * // => false\\n     */\\n    function gte(value, other) {\\n      return value >= other;\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as an `arguments` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isArguments(function() { return arguments; }());\\n     * // => true\\n     *\\n     * _.isArguments([1, 2, 3]);\\n     * // => false\\n     */\\n    function isArguments(value) {\\n      return isObjectLike(value) && isArrayLike(value) &&\\n        hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as an `Array` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isArray([1, 2, 3]);\\n     * // => true\\n     *\\n     * _.isArray(function() { return arguments; }());\\n     * // => false\\n     */\\n    var isArray = nativeIsArray || function(value) {\\n      return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\\n    };\\n\\n    /**\\n     * Checks if `value` is classified as a boolean primitive or object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isBoolean(false);\\n     * // => true\\n     *\\n     * _.isBoolean(null);\\n     * // => false\\n     */\\n    function isBoolean(value) {\\n      return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag);\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `Date` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isDate(new Date);\\n     * // => true\\n     *\\n     * _.isDate('Mon April 23 2012');\\n     * // => false\\n     */\\n    function isDate(value) {\\n      return isObjectLike(value) && objToString.call(value) == dateTag;\\n    }\\n\\n    /**\\n     * Checks if `value` is a DOM element.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\\n     * @example\\n     *\\n     * _.isElement(document.body);\\n     * // => true\\n     *\\n     * _.isElement('<body>');\\n     * // => false\\n     */\\n    function isElement(value) {\\n      return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);\\n    }\\n\\n    /**\\n     * Checks if `value` is empty. A value is considered empty unless it is an\\n     * `arguments` object, array, string, or jQuery-like collection with a length\\n     * greater than `0` or an object with own enumerable properties.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {Array|Object|string} value The value to inspect.\\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\\n     * @example\\n     *\\n     * _.isEmpty(null);\\n     * // => true\\n     *\\n     * _.isEmpty(true);\\n     * // => true\\n     *\\n     * _.isEmpty(1);\\n     * // => true\\n     *\\n     * _.isEmpty([1, 2, 3]);\\n     * // => false\\n     *\\n     * _.isEmpty({ 'a': 1 });\\n     * // => false\\n     */\\n    function isEmpty(value) {\\n      if (value == null) {\\n        return true;\\n      }\\n      if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) ||\\n          (isObjectLike(value) && isFunction(value.splice)))) {\\n        return !value.length;\\n      }\\n      return !keys(value).length;\\n    }\\n\\n    /**\\n     * Performs a deep comparison between two values to determine if they are\\n     * equivalent. If `customizer` is provided it is invoked to compare values.\\n     * If `customizer` returns `undefined` comparisons are handled by the method\\n     * instead. The `customizer` is bound to `thisArg` and invoked with three\\n     * arguments: (value, other [, index|key]).\\n     *\\n     * **Note:** This method supports comparing arrays, booleans, `Date` objects,\\n     * numbers, `Object` objects, regexes, and strings. Objects are compared by\\n     * their own, not inherited, enumerable properties. Functions and DOM nodes\\n     * are **not** supported. Provide a customizer function to extend support\\n     * for comparing other values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias eq\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @param {Function} [customizer] The function to customize value comparisons.\\n     * @param {*} [thisArg] The `this` binding of `customizer`.\\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\\n     * @example\\n     *\\n     * var object = { 'user': 'fred' };\\n     * var other = { 'user': 'fred' };\\n     *\\n     * object == other;\\n     * // => false\\n     *\\n     * _.isEqual(object, other);\\n     * // => true\\n     *\\n     * // using a customizer callback\\n     * var array = ['hello', 'goodbye'];\\n     * var other = ['hi', 'goodbye'];\\n     *\\n     * _.isEqual(array, other, function(value, other) {\\n     *   if (_.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/)) {\\n     *     return true;\\n     *   }\\n     * });\\n     * // => true\\n     */\\n    function isEqual(value, other, customizer, thisArg) {\\n      customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;\\n      var result = customizer ? customizer(value, other) : undefined;\\n      return  result === undefined ? baseIsEqual(value, other, customizer) : !!result;\\n    }\\n\\n    /**\\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\\n     * `SyntaxError`, `TypeError`, or `URIError` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\\n     * @example\\n     *\\n     * _.isError(new Error);\\n     * // => true\\n     *\\n     * _.isError(Error);\\n     * // => false\\n     */\\n    function isError(value) {\\n      return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag;\\n    }\\n\\n    /**\\n     * Checks if `value` is a finite primitive number.\\n     *\\n     * **Note:** This method is based on [`Number.isFinite`](http://ecma-international.org/ecma-262/6.0/#sec-number.isfinite).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\\n     * @example\\n     *\\n     * _.isFinite(10);\\n     * // => true\\n     *\\n     * _.isFinite('10');\\n     * // => false\\n     *\\n     * _.isFinite(true);\\n     * // => false\\n     *\\n     * _.isFinite(Object(10));\\n     * // => false\\n     *\\n     * _.isFinite(Infinity);\\n     * // => false\\n     */\\n    function isFinite(value) {\\n      return typeof value == 'number' && nativeIsFinite(value);\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `Function` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isFunction(_);\\n     * // => true\\n     *\\n     * _.isFunction(/abc/);\\n     * // => false\\n     */\\n    function isFunction(value) {\\n      // The use of `Object#toString` avoids issues with the `typeof` operator\\n      // in older versions of Chrome and Safari which return 'function' for regexes\\n      // and Safari 8 equivalents which return 'object' for typed array constructors.\\n      return isObject(value) && objToString.call(value) == funcTag;\\n    }\\n\\n    /**\\n     * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\\n     * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\\n     * @example\\n     *\\n     * _.isObject({});\\n     * // => true\\n     *\\n     * _.isObject([1, 2, 3]);\\n     * // => true\\n     *\\n     * _.isObject(1);\\n     * // => false\\n     */\\n    function isObject(value) {\\n      // Avoid a V8 JIT bug in Chrome 19-20.\\n      // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\\n      var type = typeof value;\\n      return !!value && (type == 'object' || type == 'function');\\n    }\\n\\n    /**\\n     * Performs a deep comparison between `object` and `source` to determine if\\n     * `object` contains equivalent property values. If `customizer` is provided\\n     * it is invoked to compare values. If `customizer` returns `undefined`\\n     * comparisons are handled by the method instead. The `customizer` is bound\\n     * to `thisArg` and invoked with three arguments: (value, other, index|key).\\n     *\\n     * **Note:** This method supports comparing properties of arrays, booleans,\\n     * `Date` objects, numbers, `Object` objects, regexes, and strings. Functions\\n     * and DOM nodes are **not** supported. Provide a customizer function to extend\\n     * support for comparing other values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {Object} object The object to inspect.\\n     * @param {Object} source The object of property values to match.\\n     * @param {Function} [customizer] The function to customize value comparisons.\\n     * @param {*} [thisArg] The `this` binding of `customizer`.\\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\\n     * @example\\n     *\\n     * var object = { 'user': 'fred', 'age': 40 };\\n     *\\n     * _.isMatch(object, { 'age': 40 });\\n     * // => true\\n     *\\n     * _.isMatch(object, { 'age': 36 });\\n     * // => false\\n     *\\n     * // using a customizer callback\\n     * var object = { 'greeting': 'hello' };\\n     * var source = { 'greeting': 'hi' };\\n     *\\n     * _.isMatch(object, source, function(value, other) {\\n     *   return _.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/) || undefined;\\n     * });\\n     * // => true\\n     */\\n    function isMatch(object, source, customizer, thisArg) {\\n      customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;\\n      return baseIsMatch(object, getMatchData(source), customizer);\\n    }\\n\\n    /**\\n     * Checks if `value` is `NaN`.\\n     *\\n     * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4)\\n     * which returns `true` for `undefined` and other non-numeric values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\\n     * @example\\n     *\\n     * _.isNaN(NaN);\\n     * // => true\\n     *\\n     * _.isNaN(new Number(NaN));\\n     * // => true\\n     *\\n     * isNaN(undefined);\\n     * // => true\\n     *\\n     * _.isNaN(undefined);\\n     * // => false\\n     */\\n    function isNaN(value) {\\n      // An `NaN` primitive is the only value that is not equal to itself.\\n      // Perform the `toStringTag` check first to avoid errors with some host objects in IE.\\n      return isNumber(value) && value != +value;\\n    }\\n\\n    /**\\n     * Checks if `value` is a native function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\\n     * @example\\n     *\\n     * _.isNative(Array.prototype.push);\\n     * // => true\\n     *\\n     * _.isNative(_);\\n     * // => false\\n     */\\n    function isNative(value) {\\n      if (value == null) {\\n        return false;\\n      }\\n      if (isFunction(value)) {\\n        return reIsNative.test(fnToString.call(value));\\n      }\\n      return isObjectLike(value) && reIsHostCtor.test(value);\\n    }\\n\\n    /**\\n     * Checks if `value` is `null`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\\n     * @example\\n     *\\n     * _.isNull(null);\\n     * // => true\\n     *\\n     * _.isNull(void 0);\\n     * // => false\\n     */\\n    function isNull(value) {\\n      return value === null;\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `Number` primitive or object.\\n     *\\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified\\n     * as numbers, use the `_.isFinite` method.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isNumber(8.4);\\n     * // => true\\n     *\\n     * _.isNumber(NaN);\\n     * // => true\\n     *\\n     * _.isNumber('8.4');\\n     * // => false\\n     */\\n    function isNumber(value) {\\n      return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag);\\n    }\\n\\n    /**\\n     * Checks if `value` is a plain object, that is, an object created by the\\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\\n     *\\n     * **Note:** This method assumes objects created by the `Object` constructor\\n     * have no inherited enumerable properties.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     * }\\n     *\\n     * _.isPlainObject(new Foo);\\n     * // => false\\n     *\\n     * _.isPlainObject([1, 2, 3]);\\n     * // => false\\n     *\\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\\n     * // => true\\n     *\\n     * _.isPlainObject(Object.create(null));\\n     * // => true\\n     */\\n    function isPlainObject(value) {\\n      var Ctor;\\n\\n      // Exit early for non `Object` objects.\\n      if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) ||\\n          (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\\n        return false;\\n      }\\n      // IE < 9 iterates inherited properties before own properties. If the first\\n      // iterated property is an object's own property then there are no inherited\\n      // enumerable properties.\\n      var result;\\n      // In most environments an object's own properties are iterated before\\n      // its inherited properties. If the last iterated property is an object's\\n      // own property then there are no inherited enumerable properties.\\n      baseForIn(value, function(subValue, key) {\\n        result = key;\\n      });\\n      return result === undefined || hasOwnProperty.call(value, result);\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `RegExp` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isRegExp(/abc/);\\n     * // => true\\n     *\\n     * _.isRegExp('/abc/');\\n     * // => false\\n     */\\n    function isRegExp(value) {\\n      return isObject(value) && objToString.call(value) == regexpTag;\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `String` primitive or object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isString('abc');\\n     * // => true\\n     *\\n     * _.isString(1);\\n     * // => false\\n     */\\n    function isString(value) {\\n      return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a typed array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isTypedArray(new Uint8Array);\\n     * // => true\\n     *\\n     * _.isTypedArray([]);\\n     * // => false\\n     */\\n    function isTypedArray(value) {\\n      return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\\n    }\\n\\n    /**\\n     * Checks if `value` is `undefined`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\\n     * @example\\n     *\\n     * _.isUndefined(void 0);\\n     * // => true\\n     *\\n     * _.isUndefined(null);\\n     * // => false\\n     */\\n    function isUndefined(value) {\\n      return value === undefined;\\n    }\\n\\n    /**\\n     * Checks if `value` is less than `other`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`.\\n     * @example\\n     *\\n     * _.lt(1, 3);\\n     * // => true\\n     *\\n     * _.lt(3, 3);\\n     * // => false\\n     *\\n     * _.lt(3, 1);\\n     * // => false\\n     */\\n    function lt(value, other) {\\n      return value < other;\\n    }\\n\\n    /**\\n     * Checks if `value` is less than or equal to `other`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is less than or equal to `other`, else `false`.\\n     * @example\\n     *\\n     * _.lte(1, 3);\\n     * // => true\\n     *\\n     * _.lte(3, 3);\\n     * // => true\\n     *\\n     * _.lte(3, 1);\\n     * // => false\\n     */\\n    function lte(value, other) {\\n      return value <= other;\\n    }\\n\\n    /**\\n     * Converts `value` to an array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {Array} Returns the converted array.\\n     * @example\\n     *\\n     * (function() {\\n     *   return _.toArray(arguments).slice(1);\\n     * }(1, 2, 3));\\n     * // => [2, 3]\\n     */\\n    function toArray(value) {\\n      var length = value ? getLength(value) : 0;\\n      if (!isLength(length)) {\\n        return values(value);\\n      }\\n      if (!length) {\\n        return [];\\n      }\\n      return arrayCopy(value);\\n    }\\n\\n    /**\\n     * Converts `value` to a plain object flattening inherited enumerable\\n     * properties of `value` to own properties of the plain object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {Object} Returns the converted plain object.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.assign({ 'a': 1 }, new Foo);\\n     * // => { 'a': 1, 'b': 2 }\\n     *\\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\\n     */\\n    function toPlainObject(value) {\\n      return baseCopy(value, keysIn(value));\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Recursively merges own enumerable properties of the source object(s), that\\n     * don't resolve to `undefined` into the destination object. Subsequent sources\\n     * overwrite property assignments of previous sources. If `customizer` is\\n     * provided it is invoked to produce the merged values of the destination and\\n     * source properties. If `customizer` returns `undefined` merging is handled\\n     * by the method instead. The `customizer` is bound to `thisArg` and invoked\\n     * with five arguments: (objectValue, sourceValue, key, object, source).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @param {Function} [customizer] The function to customize assigned values.\\n     * @param {*} [thisArg] The `this` binding of `customizer`.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var users = {\\n     *   'data': [{ 'user': 'barney' }, { 'user': 'fred' }]\\n     * };\\n     *\\n     * var ages = {\\n     *   'data': [{ 'age': 36 }, { 'age': 40 }]\\n     * };\\n     *\\n     * _.merge(users, ages);\\n     * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }\\n     *\\n     * // using a customizer callback\\n     * var object = {\\n     *   'fruits': ['apple'],\\n     *   'vegetables': ['beet']\\n     * };\\n     *\\n     * var other = {\\n     *   'fruits': ['banana'],\\n     *   'vegetables': ['carrot']\\n     * };\\n     *\\n     * _.merge(object, other, function(a, b) {\\n     *   if (_.isArray(a)) {\\n     *     return a.concat(b);\\n     *   }\\n     * });\\n     * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }\\n     */\\n    var merge = createAssigner(baseMerge);\\n\\n    /**\\n     * Assigns own enumerable properties of source object(s) to the destination\\n     * object. Subsequent sources overwrite property assignments of previous sources.\\n     * If `customizer` is provided it is invoked to produce the assigned values.\\n     * The `customizer` is bound to `thisArg` and invoked with five arguments:\\n     * (objectValue, sourceValue, key, object, source).\\n     *\\n     * **Note:** This method mutates `object` and is based on\\n     * [`Object.assign`](http://ecma-international.org/ecma-262/6.0/#sec-object.assign).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias extend\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @param {Function} [customizer] The function to customize assigned values.\\n     * @param {*} [thisArg] The `this` binding of `customizer`.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });\\n     * // => { 'user': 'fred', 'age': 40 }\\n     *\\n     * // using a customizer callback\\n     * var defaults = _.partialRight(_.assign, function(value, other) {\\n     *   return _.isUndefined(value) ? other : value;\\n     * });\\n     *\\n     * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });\\n     * // => { 'user': 'barney', 'age': 36 }\\n     */\\n    var assign = createAssigner(function(object, source, customizer) {\\n      return customizer\\n        ? assignWith(object, source, customizer)\\n        : baseAssign(object, source);\\n    });\\n\\n    /**\\n     * Creates an object that inherits from the given `prototype` object. If a\\n     * `properties` object is provided its own enumerable properties are assigned\\n     * to the created object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} prototype The object to inherit from.\\n     * @param {Object} [properties] The properties to assign to the object.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * function Shape() {\\n     *   this.x = 0;\\n     *   this.y = 0;\\n     * }\\n     *\\n     * function Circle() {\\n     *   Shape.call(this);\\n     * }\\n     *\\n     * Circle.prototype = _.create(Shape.prototype, {\\n     *   'constructor': Circle\\n     * });\\n     *\\n     * var circle = new Circle;\\n     * circle instanceof Circle;\\n     * // => true\\n     *\\n     * circle instanceof Shape;\\n     * // => true\\n     */\\n    function create(prototype, properties, guard) {\\n      var result = baseCreate(prototype);\\n      if (guard && isIterateeCall(prototype, properties, guard)) {\\n        properties = undefined;\\n      }\\n      return properties ? baseAssign(result, properties) : result;\\n    }\\n\\n    /**\\n     * Assigns own enumerable properties of source object(s) to the destination\\n     * object for all destination properties that resolve to `undefined`. Once a\\n     * property is set, additional values of the same property are ignored.\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });\\n     * // => { 'user': 'barney', 'age': 36 }\\n     */\\n    var defaults = createDefaults(assign, assignDefaults);\\n\\n    /**\\n     * This method is like `_.defaults` except that it recursively assigns\\n     * default properties.\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } });\\n     * // => { 'user': { 'name': 'barney', 'age': 36 } }\\n     *\\n     */\\n    var defaultsDeep = createDefaults(merge, mergeDefaults);\\n\\n    /**\\n     * This method is like `_.find` except that it returns the key of the first\\n     * element `predicate` returns truthy for instead of the element itself.\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to search.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {string|undefined} Returns the key of the matched element, else `undefined`.\\n     * @example\\n     *\\n     * var users = {\\n     *   'barney':  { 'age': 36, 'active': true },\\n     *   'fred':    { 'age': 40, 'active': false },\\n     *   'pebbles': { 'age': 1,  'active': true }\\n     * };\\n     *\\n     * _.findKey(users, function(chr) {\\n     *   return chr.age < 40;\\n     * });\\n     * // => 'barney' (iteration order is not guaranteed)\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.findKey(users, { 'age': 1, 'active': true });\\n     * // => 'pebbles'\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.findKey(users, 'active', false);\\n     * // => 'fred'\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.findKey(users, 'active');\\n     * // => 'barney'\\n     */\\n    var findKey = createFindKey(baseForOwn);\\n\\n    /**\\n     * This method is like `_.findKey` except that it iterates over elements of\\n     * a collection in the opposite order.\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to search.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {string|undefined} Returns the key of the matched element, else `undefined`.\\n     * @example\\n     *\\n     * var users = {\\n     *   'barney':  { 'age': 36, 'active': true },\\n     *   'fred':    { 'age': 40, 'active': false },\\n     *   'pebbles': { 'age': 1,  'active': true }\\n     * };\\n     *\\n     * _.findLastKey(users, function(chr) {\\n     *   return chr.age < 40;\\n     * });\\n     * // => returns `pebbles` assuming `_.findKey` returns `barney`\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.findLastKey(users, { 'age': 36, 'active': true });\\n     * // => 'barney'\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.findLastKey(users, 'active', false);\\n     * // => 'fred'\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.findLastKey(users, 'active');\\n     * // => 'pebbles'\\n     */\\n    var findLastKey = createFindKey(baseForOwnRight);\\n\\n    /**\\n     * Iterates over own and inherited enumerable properties of an object invoking\\n     * `iteratee` for each property. The `iteratee` is bound to `thisArg` and invoked\\n     * with three arguments: (value, key, object). Iteratee functions may exit\\n     * iteration early by explicitly returning `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.forIn(new Foo, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => logs 'a', 'b', and 'c' (iteration order is not guaranteed)\\n     */\\n    var forIn = createForIn(baseFor);\\n\\n    /**\\n     * This method is like `_.forIn` except that it iterates over properties of\\n     * `object` in the opposite order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.forInRight(new Foo, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c'\\n     */\\n    var forInRight = createForIn(baseForRight);\\n\\n    /**\\n     * Iterates over own enumerable properties of an object invoking `iteratee`\\n     * for each property. The `iteratee` is bound to `thisArg` and invoked with\\n     * three arguments: (value, key, object). Iteratee functions may exit iteration\\n     * early by explicitly returning `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.forOwn(new Foo, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => logs 'a' and 'b' (iteration order is not guaranteed)\\n     */\\n    var forOwn = createForOwn(baseForOwn);\\n\\n    /**\\n     * This method is like `_.forOwn` except that it iterates over properties of\\n     * `object` in the opposite order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.forOwnRight(new Foo, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b'\\n     */\\n    var forOwnRight = createForOwn(baseForOwnRight);\\n\\n    /**\\n     * Creates an array of function property names from all enumerable properties,\\n     * own and inherited, of `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias methods\\n     * @category Object\\n     * @param {Object} object The object to inspect.\\n     * @returns {Array} Returns the new array of property names.\\n     * @example\\n     *\\n     * _.functions(_);\\n     * // => ['after', 'ary', 'assign', ...]\\n     */\\n    function functions(object) {\\n      return baseFunctions(object, keysIn(object));\\n    }\\n\\n    /**\\n     * Gets the property value at `path` of `object`. If the resolved value is\\n     * `undefined` the `defaultValue` is used in its place.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path of the property to get.\\n     * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.\\n     * @returns {*} Returns the resolved value.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\\n     *\\n     * _.get(object, 'a[0].b.c');\\n     * // => 3\\n     *\\n     * _.get(object, ['a', '0', 'b', 'c']);\\n     * // => 3\\n     *\\n     * _.get(object, 'a.b.c', 'default');\\n     * // => 'default'\\n     */\\n    function get(object, path, defaultValue) {\\n      var result = object == null ? undefined : baseGet(object, toPath(path), path + '');\\n      return result === undefined ? defaultValue : result;\\n    }\\n\\n    /**\\n     * Checks if `path` is a direct property.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path to check.\\n     * @returns {boolean} Returns `true` if `path` is a direct property, else `false`.\\n     * @example\\n     *\\n     * var object = { 'a': { 'b': { 'c': 3 } } };\\n     *\\n     * _.has(object, 'a');\\n     * // => true\\n     *\\n     * _.has(object, 'a.b.c');\\n     * // => true\\n     *\\n     * _.has(object, ['a', 'b', 'c']);\\n     * // => true\\n     */\\n    function has(object, path) {\\n      if (object == null) {\\n        return false;\\n      }\\n      var result = hasOwnProperty.call(object, path);\\n      if (!result && !isKey(path)) {\\n        path = toPath(path);\\n        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\\n        if (object == null) {\\n          return false;\\n        }\\n        path = last(path);\\n        result = hasOwnProperty.call(object, path);\\n      }\\n      return result || (isLength(object.length) && isIndex(path, object.length) &&\\n        (isArray(object) || isArguments(object)));\\n    }\\n\\n    /**\\n     * Creates an object composed of the inverted keys and values of `object`.\\n     * If `object` contains duplicate values, subsequent values overwrite property\\n     * assignments of previous values unless `multiValue` is `true`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to invert.\\n     * @param {boolean} [multiValue] Allow multiple values per key.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Object} Returns the new inverted object.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\\n     *\\n     * _.invert(object);\\n     * // => { '1': 'c', '2': 'b' }\\n     *\\n     * // with `multiValue`\\n     * _.invert(object, true);\\n     * // => { '1': ['a', 'c'], '2': ['b'] }\\n     */\\n    function invert(object, multiValue, guard) {\\n      if (guard && isIterateeCall(object, multiValue, guard)) {\\n        multiValue = undefined;\\n      }\\n      var index = -1,\\n          props = keys(object),\\n          length = props.length,\\n          result = {};\\n\\n      while (++index < length) {\\n        var key = props[index],\\n            value = object[key];\\n\\n        if (multiValue) {\\n          if (hasOwnProperty.call(result, value)) {\\n            result[value].push(key);\\n          } else {\\n            result[value] = [key];\\n          }\\n        }\\n        else {\\n          result[value] = key;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an array of the own enumerable property names of `object`.\\n     *\\n     * **Note:** Non-object values are coerced to objects. See the\\n     * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\\n     * for more details.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.keys(new Foo);\\n     * // => ['a', 'b'] (iteration order is not guaranteed)\\n     *\\n     * _.keys('hi');\\n     * // => ['0', '1']\\n     */\\n    var keys = !nativeKeys ? shimKeys : function(object) {\\n      var Ctor = object == null ? undefined : object.constructor;\\n      if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\\n          (typeof object != 'function' && isArrayLike(object))) {\\n        return shimKeys(object);\\n      }\\n      return isObject(object) ? nativeKeys(object) : [];\\n    };\\n\\n    /**\\n     * Creates an array of the own and inherited enumerable property names of `object`.\\n     *\\n     * **Note:** Non-object values are coerced to objects.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.keysIn(new Foo);\\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\\n     */\\n    function keysIn(object) {\\n      if (object == null) {\\n        return [];\\n      }\\n      if (!isObject(object)) {\\n        object = Object(object);\\n      }\\n      var length = object.length;\\n      length = (length && isLength(length) &&\\n        (isArray(object) || isArguments(object)) && length) || 0;\\n\\n      var Ctor = object.constructor,\\n          index = -1,\\n          isProto = typeof Ctor == 'function' && Ctor.prototype === object,\\n          result = Array(length),\\n          skipIndexes = length > 0;\\n\\n      while (++index < length) {\\n        result[index] = (index + '');\\n      }\\n      for (var key in object) {\\n        if (!(skipIndexes && isIndex(key, length)) &&\\n            !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\\n          result.push(key);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The opposite of `_.mapValues`; this method creates an object with the\\n     * same values as `object` and keys generated by running each own enumerable\\n     * property of `object` through `iteratee`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns the new mapped object.\\n     * @example\\n     *\\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\\n     *   return key + value;\\n     * });\\n     * // => { 'a1': 1, 'b2': 2 }\\n     */\\n    var mapKeys = createObjectMapper(true);\\n\\n    /**\\n     * Creates an object with the same keys as `object` and values generated by\\n     * running each own enumerable property of `object` through `iteratee`. The\\n     * iteratee function is bound to `thisArg` and invoked with three arguments:\\n     * (value, key, object).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns the new mapped object.\\n     * @example\\n     *\\n     * _.mapValues({ 'a': 1, 'b': 2 }, function(n) {\\n     *   return n * 3;\\n     * });\\n     * // => { 'a': 3, 'b': 6 }\\n     *\\n     * var users = {\\n     *   'fred':    { 'user': 'fred',    'age': 40 },\\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\\n     * };\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.mapValues(users, 'age');\\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\\n     */\\n    var mapValues = createObjectMapper();\\n\\n    /**\\n     * The opposite of `_.pick`; this method creates an object composed of the\\n     * own and inherited enumerable properties of `object` that are not omitted.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The source object.\\n     * @param {Function|...(string|string[])} [predicate] The function invoked per\\n     *  iteration or property names to omit, specified as individual property\\n     *  names or arrays of property names.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * var object = { 'user': 'fred', 'age': 40 };\\n     *\\n     * _.omit(object, 'age');\\n     * // => { 'user': 'fred' }\\n     *\\n     * _.omit(object, _.isNumber);\\n     * // => { 'user': 'fred' }\\n     */\\n    var omit = restParam(function(object, props) {\\n      if (object == null) {\\n        return {};\\n      }\\n      if (typeof props[0] != 'function') {\\n        var props = arrayMap(baseFlatten(props), String);\\n        return pickByArray(object, baseDifference(keysIn(object), props));\\n      }\\n      var predicate = bindCallback(props[0], props[1], 3);\\n      return pickByCallback(object, function(value, key, object) {\\n        return !predicate(value, key, object);\\n      });\\n    });\\n\\n    /**\\n     * Creates a two dimensional array of the key-value pairs for `object`,\\n     * e.g. `[[key1, value1], [key2, value2]]`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the new array of key-value pairs.\\n     * @example\\n     *\\n     * _.pairs({ 'barney': 36, 'fred': 40 });\\n     * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed)\\n     */\\n    function pairs(object) {\\n      object = toObject(object);\\n\\n      var index = -1,\\n          props = keys(object),\\n          length = props.length,\\n          result = Array(length);\\n\\n      while (++index < length) {\\n        var key = props[index];\\n        result[index] = [key, object[key]];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an object composed of the picked `object` properties. Property\\n     * names may be specified as individual arguments or as arrays of property\\n     * names. If `predicate` is provided it is invoked for each property of `object`\\n     * picking the properties `predicate` returns truthy for. The predicate is\\n     * bound to `thisArg` and invoked with three arguments: (value, key, object).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The source object.\\n     * @param {Function|...(string|string[])} [predicate] The function invoked per\\n     *  iteration or property names to pick, specified as individual property\\n     *  names or arrays of property names.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * var object = { 'user': 'fred', 'age': 40 };\\n     *\\n     * _.pick(object, 'user');\\n     * // => { 'user': 'fred' }\\n     *\\n     * _.pick(object, _.isString);\\n     * // => { 'user': 'fred' }\\n     */\\n    var pick = restParam(function(object, props) {\\n      if (object == null) {\\n        return {};\\n      }\\n      return typeof props[0] == 'function'\\n        ? pickByCallback(object, bindCallback(props[0], props[1], 3))\\n        : pickByArray(object, baseFlatten(props));\\n    });\\n\\n    /**\\n     * This method is like `_.get` except that if the resolved value is a function\\n     * it is invoked with the `this` binding of its parent object and its result\\n     * is returned.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path of the property to resolve.\\n     * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.\\n     * @returns {*} Returns the resolved value.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\\n     *\\n     * _.result(object, 'a[0].b.c1');\\n     * // => 3\\n     *\\n     * _.result(object, 'a[0].b.c2');\\n     * // => 4\\n     *\\n     * _.result(object, 'a.b.c', 'default');\\n     * // => 'default'\\n     *\\n     * _.result(object, 'a.b.c', _.constant('default'));\\n     * // => 'default'\\n     */\\n    function result(object, path, defaultValue) {\\n      var result = object == null ? undefined : object[path];\\n      if (result === undefined) {\\n        if (object != null && !isKey(path, object)) {\\n          path = toPath(path);\\n          object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\\n          result = object == null ? undefined : object[last(path)];\\n        }\\n        result = result === undefined ? defaultValue : result;\\n      }\\n      return isFunction(result) ? result.call(object) : result;\\n    }\\n\\n    /**\\n     * Sets the property value of `path` on `object`. If a portion of `path`\\n     * does not exist it is created.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to augment.\\n     * @param {Array|string} path The path of the property to set.\\n     * @param {*} value The value to set.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\\n     *\\n     * _.set(object, 'a[0].b.c', 4);\\n     * console.log(object.a[0].b.c);\\n     * // => 4\\n     *\\n     * _.set(object, 'x[0].y.z', 5);\\n     * console.log(object.x[0].y.z);\\n     * // => 5\\n     */\\n    function set(object, path, value) {\\n      if (object == null) {\\n        return object;\\n      }\\n      var pathKey = (path + '');\\n      path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path);\\n\\n      var index = -1,\\n          length = path.length,\\n          lastIndex = length - 1,\\n          nested = object;\\n\\n      while (nested != null && ++index < length) {\\n        var key = path[index];\\n        if (isObject(nested)) {\\n          if (index == lastIndex) {\\n            nested[key] = value;\\n          } else if (nested[key] == null) {\\n            nested[key] = isIndex(path[index + 1]) ? [] : {};\\n          }\\n        }\\n        nested = nested[key];\\n      }\\n      return object;\\n    }\\n\\n    /**\\n     * An alternative to `_.reduce`; this method transforms `object` to a new\\n     * `accumulator` object which is the result of running each of its own enumerable\\n     * properties through `iteratee`, with each invocation potentially mutating\\n     * the `accumulator` object. The `iteratee` is bound to `thisArg` and invoked\\n     * with four arguments: (accumulator, value, key, object). Iteratee functions\\n     * may exit iteration early by explicitly returning `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Array|Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [accumulator] The custom accumulator value.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {*} Returns the accumulated value.\\n     * @example\\n     *\\n     * _.transform([2, 3, 4], function(result, n) {\\n     *   result.push(n *= n);\\n     *   return n % 2 == 0;\\n     * });\\n     * // => [4, 9]\\n     *\\n     * _.transform({ 'a': 1, 'b': 2 }, function(result, n, key) {\\n     *   result[key] = n * 3;\\n     * });\\n     * // => { 'a': 3, 'b': 6 }\\n     */\\n    function transform(object, iteratee, accumulator, thisArg) {\\n      var isArr = isArray(object) || isTypedArray(object);\\n      iteratee = getCallback(iteratee, thisArg, 4);\\n\\n      if (accumulator == null) {\\n        if (isArr || isObject(object)) {\\n          var Ctor = object.constructor;\\n          if (isArr) {\\n            accumulator = isArray(object) ? new Ctor : [];\\n          } else {\\n            accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined);\\n          }\\n        } else {\\n          accumulator = {};\\n        }\\n      }\\n      (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) {\\n        return iteratee(accumulator, value, index, object);\\n      });\\n      return accumulator;\\n    }\\n\\n    /**\\n     * Creates an array of the own enumerable property values of `object`.\\n     *\\n     * **Note:** Non-object values are coerced to objects.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property values.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.values(new Foo);\\n     * // => [1, 2] (iteration order is not guaranteed)\\n     *\\n     * _.values('hi');\\n     * // => ['h', 'i']\\n     */\\n    function values(object) {\\n      return baseValues(object, keys(object));\\n    }\\n\\n    /**\\n     * Creates an array of the own and inherited enumerable property values\\n     * of `object`.\\n     *\\n     * **Note:** Non-object values are coerced to objects.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property values.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.valuesIn(new Foo);\\n     * // => [1, 2, 3] (iteration order is not guaranteed)\\n     */\\n    function valuesIn(object) {\\n      return baseValues(object, keysIn(object));\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Checks if `n` is between `start` and up to but not including, `end`. If\\n     * `end` is not specified it is set to `start` with `start` then set to `0`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Number\\n     * @param {number} n The number to check.\\n     * @param {number} [start=0] The start of the range.\\n     * @param {number} end The end of the range.\\n     * @returns {boolean} Returns `true` if `n` is in the range, else `false`.\\n     * @example\\n     *\\n     * _.inRange(3, 2, 4);\\n     * // => true\\n     *\\n     * _.inRange(4, 8);\\n     * // => true\\n     *\\n     * _.inRange(4, 2);\\n     * // => false\\n     *\\n     * _.inRange(2, 2);\\n     * // => false\\n     *\\n     * _.inRange(1.2, 2);\\n     * // => true\\n     *\\n     * _.inRange(5.2, 4);\\n     * // => false\\n     */\\n    function inRange(value, start, end) {\\n      start = +start || 0;\\n      if (end === undefined) {\\n        end = start;\\n        start = 0;\\n      } else {\\n        end = +end || 0;\\n      }\\n      return value >= nativeMin(start, end) && value < nativeMax(start, end);\\n    }\\n\\n    /**\\n     * Produces a random number between `min` and `max` (inclusive). If only one\\n     * argument is provided a number between `0` and the given number is returned.\\n     * If `floating` is `true`, or either `min` or `max` are floats, a floating-point\\n     * number is returned instead of an integer.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Number\\n     * @param {number} [min=0] The minimum possible value.\\n     * @param {number} [max=1] The maximum possible value.\\n     * @param {boolean} [floating] Specify returning a floating-point number.\\n     * @returns {number} Returns the random number.\\n     * @example\\n     *\\n     * _.random(0, 5);\\n     * // => an integer between 0 and 5\\n     *\\n     * _.random(5);\\n     * // => also an integer between 0 and 5\\n     *\\n     * _.random(5, true);\\n     * // => a floating-point number between 0 and 5\\n     *\\n     * _.random(1.2, 5.2);\\n     * // => a floating-point number between 1.2 and 5.2\\n     */\\n    function random(min, max, floating) {\\n      if (floating && isIterateeCall(min, max, floating)) {\\n        max = floating = undefined;\\n      }\\n      var noMin = min == null,\\n          noMax = max == null;\\n\\n      if (floating == null) {\\n        if (noMax && typeof min == 'boolean') {\\n          floating = min;\\n          min = 1;\\n        }\\n        else if (typeof max == 'boolean') {\\n          floating = max;\\n          noMax = true;\\n        }\\n      }\\n      if (noMin && noMax) {\\n        max = 1;\\n        noMax = false;\\n      }\\n      min = +min || 0;\\n      if (noMax) {\\n        max = min;\\n        min = 0;\\n      } else {\\n        max = +max || 0;\\n      }\\n      if (floating || min % 1 || max % 1) {\\n        var rand = nativeRandom();\\n        return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max);\\n      }\\n      return baseRandom(min, max);\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the camel cased string.\\n     * @example\\n     *\\n     * _.camelCase('Foo Bar');\\n     * // => 'fooBar'\\n     *\\n     * _.camelCase('--foo-bar');\\n     * // => 'fooBar'\\n     *\\n     * _.camelCase('__foo_bar__');\\n     * // => 'fooBar'\\n     */\\n    var camelCase = createCompounder(function(result, word, index) {\\n      word = word.toLowerCase();\\n      return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word);\\n    });\\n\\n    /**\\n     * Capitalizes the first character of `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to capitalize.\\n     * @returns {string} Returns the capitalized string.\\n     * @example\\n     *\\n     * _.capitalize('fred');\\n     * // => 'Fred'\\n     */\\n    function capitalize(string) {\\n      string = baseToString(string);\\n      return string && (string.charAt(0).toUpperCase() + string.slice(1));\\n    }\\n\\n    /**\\n     * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\\n     * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to deburr.\\n     * @returns {string} Returns the deburred string.\\n     * @example\\n     *\\n     * _.deburr('déjà vu');\\n     * // => 'deja vu'\\n     */\\n    function deburr(string) {\\n      string = baseToString(string);\\n      return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, '');\\n    }\\n\\n    /**\\n     * Checks if `string` ends with the given target string.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to search.\\n     * @param {string} [target] The string to search for.\\n     * @param {number} [position=string.length] The position to search from.\\n     * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`.\\n     * @example\\n     *\\n     * _.endsWith('abc', 'c');\\n     * // => true\\n     *\\n     * _.endsWith('abc', 'b');\\n     * // => false\\n     *\\n     * _.endsWith('abc', 'b', 2);\\n     * // => true\\n     */\\n    function endsWith(string, target, position) {\\n      string = baseToString(string);\\n      target = (target + '');\\n\\n      var length = string.length;\\n      position = position === undefined\\n        ? length\\n        : nativeMin(position < 0 ? 0 : (+position || 0), length);\\n\\n      position -= target.length;\\n      return position >= 0 && string.indexOf(target, position) == position;\\n    }\\n\\n    /**\\n     * Converts the characters \\\"&\\\", \\\"<\\\", \\\">\\\", '\\\"', \\\"'\\\", and \\\"\\\\`\\\", in `string` to\\n     * their corresponding HTML entities.\\n     *\\n     * **Note:** No other characters are escaped. To escape additional characters\\n     * use a third-party library like [_he_](https://mths.be/he).\\n     *\\n     * Though the \\\">\\\" character is escaped for symmetry, characters like\\n     * \\\">\\\" and \\\"/\\\" don't need escaping in HTML and have no special meaning\\n     * unless they're part of a tag or unquoted attribute value.\\n     * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\\n     * (under \\\"semi-related fun fact\\\") for more details.\\n     *\\n     * Backticks are escaped because in Internet Explorer < 9, they can break out\\n     * of attribute values or HTML comments. See [#59](https://html5sec.org/#59),\\n     * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and\\n     * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/)\\n     * for more details.\\n     *\\n     * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping)\\n     * to reduce XSS vectors.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to escape.\\n     * @returns {string} Returns the escaped string.\\n     * @example\\n     *\\n     * _.escape('fred, barney, & pebbles');\\n     * // => 'fred, barney, &amp; pebbles'\\n     */\\n    function escape(string) {\\n      // Reset `lastIndex` because in IE < 9 `String#replace` does not.\\n      string = baseToString(string);\\n      return (string && reHasUnescapedHtml.test(string))\\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\\n        : string;\\n    }\\n\\n    /**\\n     * Escapes the `RegExp` special characters \\\"\\\\\\\", \\\"/\\\", \\\"^\\\", \\\"$\\\", \\\".\\\", \\\"|\\\", \\\"?\\\",\\n     * \\\"*\\\", \\\"+\\\", \\\"(\\\", \\\")\\\", \\\"[\\\", \\\"]\\\", \\\"{\\\" and \\\"}\\\" in `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to escape.\\n     * @returns {string} Returns the escaped string.\\n     * @example\\n     *\\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\\n     * // => '\\\\[lodash\\\\]\\\\(https:\\\\/\\\\/lodash\\\\.com\\\\/\\\\)'\\n     */\\n    function escapeRegExp(string) {\\n      string = baseToString(string);\\n      return (string && reHasRegExpChars.test(string))\\n        ? string.replace(reRegExpChars, escapeRegExpChar)\\n        : (string || '(?:)');\\n    }\\n\\n    /**\\n     * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the kebab cased string.\\n     * @example\\n     *\\n     * _.kebabCase('Foo Bar');\\n     * // => 'foo-bar'\\n     *\\n     * _.kebabCase('fooBar');\\n     * // => 'foo-bar'\\n     *\\n     * _.kebabCase('__foo_bar__');\\n     * // => 'foo-bar'\\n     */\\n    var kebabCase = createCompounder(function(result, word, index) {\\n      return result + (index ? '-' : '') + word.toLowerCase();\\n    });\\n\\n    /**\\n     * Pads `string` on the left and right sides if it's shorter than `length`.\\n     * Padding characters are truncated if they can't be evenly divided by `length`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to pad.\\n     * @param {number} [length=0] The padding length.\\n     * @param {string} [chars=' '] The string used as padding.\\n     * @returns {string} Returns the padded string.\\n     * @example\\n     *\\n     * _.pad('abc', 8);\\n     * // => '  abc   '\\n     *\\n     * _.pad('abc', 8, '_-');\\n     * // => '_-abc_-_'\\n     *\\n     * _.pad('abc', 3);\\n     * // => 'abc'\\n     */\\n    function pad(string, length, chars) {\\n      string = baseToString(string);\\n      length = +length;\\n\\n      var strLength = string.length;\\n      if (strLength >= length || !nativeIsFinite(length)) {\\n        return string;\\n      }\\n      var mid = (length - strLength) / 2,\\n          leftLength = nativeFloor(mid),\\n          rightLength = nativeCeil(mid);\\n\\n      chars = createPadding('', rightLength, chars);\\n      return chars.slice(0, leftLength) + string + chars;\\n    }\\n\\n    /**\\n     * Pads `string` on the left side if it's shorter than `length`. Padding\\n     * characters are truncated if they exceed `length`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to pad.\\n     * @param {number} [length=0] The padding length.\\n     * @param {string} [chars=' '] The string used as padding.\\n     * @returns {string} Returns the padded string.\\n     * @example\\n     *\\n     * _.padLeft('abc', 6);\\n     * // => '   abc'\\n     *\\n     * _.padLeft('abc', 6, '_-');\\n     * // => '_-_abc'\\n     *\\n     * _.padLeft('abc', 3);\\n     * // => 'abc'\\n     */\\n    var padLeft = createPadDir();\\n\\n    /**\\n     * Pads `string` on the right side if it's shorter than `length`. Padding\\n     * characters are truncated if they exceed `length`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to pad.\\n     * @param {number} [length=0] The padding length.\\n     * @param {string} [chars=' '] The string used as padding.\\n     * @returns {string} Returns the padded string.\\n     * @example\\n     *\\n     * _.padRight('abc', 6);\\n     * // => 'abc   '\\n     *\\n     * _.padRight('abc', 6, '_-');\\n     * // => 'abc_-_'\\n     *\\n     * _.padRight('abc', 3);\\n     * // => 'abc'\\n     */\\n    var padRight = createPadDir(true);\\n\\n    /**\\n     * Converts `string` to an integer of the specified radix. If `radix` is\\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal,\\n     * in which case a `radix` of `16` is used.\\n     *\\n     * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#E)\\n     * of `parseInt`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} string The string to convert.\\n     * @param {number} [radix] The radix to interpret `value` by.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {number} Returns the converted integer.\\n     * @example\\n     *\\n     * _.parseInt('08');\\n     * // => 8\\n     *\\n     * _.map(['6', '08', '10'], _.parseInt);\\n     * // => [6, 8, 10]\\n     */\\n    function parseInt(string, radix, guard) {\\n      // Firefox < 21 and Opera < 15 follow ES3 for `parseInt`.\\n      // Chrome fails to trim leading <BOM> whitespace characters.\\n      // See https://code.google.com/p/v8/issues/detail?id=3109 for more details.\\n      if (guard ? isIterateeCall(string, radix, guard) : radix == null) {\\n        radix = 0;\\n      } else if (radix) {\\n        radix = +radix;\\n      }\\n      string = trim(string);\\n      return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10));\\n    }\\n\\n    /**\\n     * Repeats the given string `n` times.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to repeat.\\n     * @param {number} [n=0] The number of times to repeat the string.\\n     * @returns {string} Returns the repeated string.\\n     * @example\\n     *\\n     * _.repeat('*', 3);\\n     * // => '***'\\n     *\\n     * _.repeat('abc', 2);\\n     * // => 'abcabc'\\n     *\\n     * _.repeat('abc', 0);\\n     * // => ''\\n     */\\n    function repeat(string, n) {\\n      var result = '';\\n      string = baseToString(string);\\n      n = +n;\\n      if (n < 1 || !string || !nativeIsFinite(n)) {\\n        return result;\\n      }\\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\\n      do {\\n        if (n % 2) {\\n          result += string;\\n        }\\n        n = nativeFloor(n / 2);\\n        string += string;\\n      } while (n);\\n\\n      return result;\\n    }\\n\\n    /**\\n     * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the snake cased string.\\n     * @example\\n     *\\n     * _.snakeCase('Foo Bar');\\n     * // => 'foo_bar'\\n     *\\n     * _.snakeCase('fooBar');\\n     * // => 'foo_bar'\\n     *\\n     * _.snakeCase('--foo-bar');\\n     * // => 'foo_bar'\\n     */\\n    var snakeCase = createCompounder(function(result, word, index) {\\n      return result + (index ? '_' : '') + word.toLowerCase();\\n    });\\n\\n    /**\\n     * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the start cased string.\\n     * @example\\n     *\\n     * _.startCase('--foo-bar');\\n     * // => 'Foo Bar'\\n     *\\n     * _.startCase('fooBar');\\n     * // => 'Foo Bar'\\n     *\\n     * _.startCase('__foo_bar__');\\n     * // => 'Foo Bar'\\n     */\\n    var startCase = createCompounder(function(result, word, index) {\\n      return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1));\\n    });\\n\\n    /**\\n     * Checks if `string` starts with the given target string.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to search.\\n     * @param {string} [target] The string to search for.\\n     * @param {number} [position=0] The position to search from.\\n     * @returns {boolean} Returns `true` if `string` starts with `target`, else `false`.\\n     * @example\\n     *\\n     * _.startsWith('abc', 'a');\\n     * // => true\\n     *\\n     * _.startsWith('abc', 'b');\\n     * // => false\\n     *\\n     * _.startsWith('abc', 'b', 1);\\n     * // => true\\n     */\\n    function startsWith(string, target, position) {\\n      string = baseToString(string);\\n      position = position == null\\n        ? 0\\n        : nativeMin(position < 0 ? 0 : (+position || 0), string.length);\\n\\n      return string.lastIndexOf(target, position) == position;\\n    }\\n\\n    /**\\n     * Creates a compiled template function that can interpolate data properties\\n     * in \\\"interpolate\\\" delimiters, HTML-escape interpolated data properties in\\n     * \\\"escape\\\" delimiters, and execute JavaScript in \\\"evaluate\\\" delimiters. Data\\n     * properties may be accessed as free variables in the template. If a setting\\n     * object is provided it takes precedence over `_.templateSettings` values.\\n     *\\n     * **Note:** In the development build `_.template` utilizes\\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\\n     * for easier debugging.\\n     *\\n     * For more information on precompiling templates see\\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\\n     *\\n     * For more information on Chrome extension sandboxes see\\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The template string.\\n     * @param {Object} [options] The options object.\\n     * @param {RegExp} [options.escape] The HTML \\\"escape\\\" delimiter.\\n     * @param {RegExp} [options.evaluate] The \\\"evaluate\\\" delimiter.\\n     * @param {Object} [options.imports] An object to import into the template as free variables.\\n     * @param {RegExp} [options.interpolate] The \\\"interpolate\\\" delimiter.\\n     * @param {string} [options.sourceURL] The sourceURL of the template's compiled source.\\n     * @param {string} [options.variable] The data object variable name.\\n     * @param- {Object} [otherOptions] Enables the legacy `options` param signature.\\n     * @returns {Function} Returns the compiled template function.\\n     * @example\\n     *\\n     * // using the \\\"interpolate\\\" delimiter to create a compiled template\\n     * var compiled = _.template('hello <%= user %>!');\\n     * compiled({ 'user': 'fred' });\\n     * // => 'hello fred!'\\n     *\\n     * // using the HTML \\\"escape\\\" delimiter to escape data property values\\n     * var compiled = _.template('<b><%- value %></b>');\\n     * compiled({ 'value': '<script>' });\\n     * // => '<b>&lt;script&gt;</b>'\\n     *\\n     * // using the \\\"evaluate\\\" delimiter to execute JavaScript and generate HTML\\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\\n     * compiled({ 'users': ['fred', 'barney'] });\\n     * // => '<li>fred</li><li>barney</li>'\\n     *\\n     * // using the internal `print` function in \\\"evaluate\\\" delimiters\\n     * var compiled = _.template('<% print(\\\"hello \\\" + user); %>!');\\n     * compiled({ 'user': 'barney' });\\n     * // => 'hello barney!'\\n     *\\n     * // using the ES delimiter as an alternative to the default \\\"interpolate\\\" delimiter\\n     * var compiled = _.template('hello ${ user }!');\\n     * compiled({ 'user': 'pebbles' });\\n     * // => 'hello pebbles!'\\n     *\\n     * // using custom template delimiters\\n     * _.templateSettings.interpolate = /{{([\\\\s\\\\S]+?)}}/g;\\n     * var compiled = _.template('hello {{ user }}!');\\n     * compiled({ 'user': 'mustache' });\\n     * // => 'hello mustache!'\\n     *\\n     * // using backslashes to treat delimiters as plain text\\n     * var compiled = _.template('<%= \\\"\\\\\\\\<%- value %\\\\\\\\>\\\" %>');\\n     * compiled({ 'value': 'ignored' });\\n     * // => '<%- value %>'\\n     *\\n     * // using the `imports` option to import `jQuery` as `jq`\\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\\n     * compiled({ 'users': ['fred', 'barney'] });\\n     * // => '<li>fred</li><li>barney</li>'\\n     *\\n     * // using the `sourceURL` option to specify a custom sourceURL for the template\\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\\n     * compiled(data);\\n     * // => find the source of \\\"greeting.jst\\\" under the Sources tab or Resources panel of the web inspector\\n     *\\n     * // using the `variable` option to ensure a with-statement isn't used in the compiled template\\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\\n     * compiled.source;\\n     * // => function(data) {\\n     * //   var __t, __p = '';\\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\\n     * //   return __p;\\n     * // }\\n     *\\n     * // using the `source` property to inline compiled templates for meaningful\\n     * // line numbers in error messages and a stack trace\\n     * fs.writeFileSync(path.join(cwd, 'jst.js'), '\\\\\\n     *   var JST = {\\\\\\n     *     \\\"main\\\": ' + _.template(mainText).source + '\\\\\\n     *   };\\\\\\n     * ');\\n     */\\n    function template(string, options, otherOptions) {\\n      // Based on John Resig's `tmpl` implementation (http://ejohn.org/blog/javascript-micro-templating/)\\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\\n      var settings = lodash.templateSettings;\\n\\n      if (otherOptions && isIterateeCall(string, options, otherOptions)) {\\n        options = otherOptions = undefined;\\n      }\\n      string = baseToString(string);\\n      options = assignWith(baseAssign({}, otherOptions || options), settings, assignOwnDefaults);\\n\\n      var imports = assignWith(baseAssign({}, options.imports), settings.imports, assignOwnDefaults),\\n          importsKeys = keys(imports),\\n          importsValues = baseValues(imports, importsKeys);\\n\\n      var isEscaping,\\n          isEvaluating,\\n          index = 0,\\n          interpolate = options.interpolate || reNoMatch,\\n          source = \\\"__p += '\\\";\\n\\n      // Compile the regexp to match each delimiter.\\n      var reDelimiters = RegExp(\\n        (options.escape || reNoMatch).source + '|' +\\n        interpolate.source + '|' +\\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\\n        (options.evaluate || reNoMatch).source + '|$'\\n      , 'g');\\n\\n      // Use a sourceURL for easier debugging.\\n      var sourceURL = '//# sourceURL=' +\\n        ('sourceURL' in options\\n          ? options.sourceURL\\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\\n        ) + '\\\\n';\\n\\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\\n        interpolateValue || (interpolateValue = esTemplateValue);\\n\\n        // Escape characters that can't be included in string literals.\\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\\n\\n        // Replace delimiters with snippets.\\n        if (escapeValue) {\\n          isEscaping = true;\\n          source += \\\"' +\\\\n__e(\\\" + escapeValue + \\\") +\\\\n'\\\";\\n        }\\n        if (evaluateValue) {\\n          isEvaluating = true;\\n          source += \\\"';\\\\n\\\" + evaluateValue + \\\";\\\\n__p += '\\\";\\n        }\\n        if (interpolateValue) {\\n          source += \\\"' +\\\\n((__t = (\\\" + interpolateValue + \\\")) == null ? '' : __t) +\\\\n'\\\";\\n        }\\n        index = offset + match.length;\\n\\n        // The JS engine embedded in Adobe products requires returning the `match`\\n        // string in order to produce the correct `offset` value.\\n        return match;\\n      });\\n\\n      source += \\\"';\\\\n\\\";\\n\\n      // If `variable` is not specified wrap a with-statement around the generated\\n      // code to add the data object to the top of the scope chain.\\n      var variable = options.variable;\\n      if (!variable) {\\n        source = 'with (obj) {\\\\n' + source + '\\\\n}\\\\n';\\n      }\\n      // Cleanup code by stripping empty strings.\\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\\n        .replace(reEmptyStringMiddle, '$1')\\n        .replace(reEmptyStringTrailing, '$1;');\\n\\n      // Frame code as the function body.\\n      source = 'function(' + (variable || 'obj') + ') {\\\\n' +\\n        (variable\\n          ? ''\\n          : 'obj || (obj = {});\\\\n'\\n        ) +\\n        \\\"var __t, __p = ''\\\" +\\n        (isEscaping\\n           ? ', __e = _.escape'\\n           : ''\\n        ) +\\n        (isEvaluating\\n          ? ', __j = Array.prototype.join;\\\\n' +\\n            \\\"function print() { __p += __j.call(arguments, '') }\\\\n\\\"\\n          : ';\\\\n'\\n        ) +\\n        source +\\n        'return __p\\\\n}';\\n\\n      var result = attempt(function() {\\n        return Function(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues);\\n      });\\n\\n      // Provide the compiled function's source by its `toString` method or\\n      // the `source` property as a convenience for inlining compiled templates.\\n      result.source = source;\\n      if (isError(result)) {\\n        throw result;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Removes leading and trailing whitespace or specified characters from `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to trim.\\n     * @param {string} [chars=whitespace] The characters to trim.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {string} Returns the trimmed string.\\n     * @example\\n     *\\n     * _.trim('  abc  ');\\n     * // => 'abc'\\n     *\\n     * _.trim('-_-abc-_-', '_-');\\n     * // => 'abc'\\n     *\\n     * _.map(['  foo  ', '  bar  '], _.trim);\\n     * // => ['foo', 'bar']\\n     */\\n    function trim(string, chars, guard) {\\n      var value = string;\\n      string = baseToString(string);\\n      if (!string) {\\n        return string;\\n      }\\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\\n        return string.slice(trimmedLeftIndex(string), trimmedRightIndex(string) + 1);\\n      }\\n      chars = (chars + '');\\n      return string.slice(charsLeftIndex(string, chars), charsRightIndex(string, chars) + 1);\\n    }\\n\\n    /**\\n     * Removes leading whitespace or specified characters from `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to trim.\\n     * @param {string} [chars=whitespace] The characters to trim.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {string} Returns the trimmed string.\\n     * @example\\n     *\\n     * _.trimLeft('  abc  ');\\n     * // => 'abc  '\\n     *\\n     * _.trimLeft('-_-abc-_-', '_-');\\n     * // => 'abc-_-'\\n     */\\n    function trimLeft(string, chars, guard) {\\n      var value = string;\\n      string = baseToString(string);\\n      if (!string) {\\n        return string;\\n      }\\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\\n        return string.slice(trimmedLeftIndex(string));\\n      }\\n      return string.slice(charsLeftIndex(string, (chars + '')));\\n    }\\n\\n    /**\\n     * Removes trailing whitespace or specified characters from `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to trim.\\n     * @param {string} [chars=whitespace] The characters to trim.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {string} Returns the trimmed string.\\n     * @example\\n     *\\n     * _.trimRight('  abc  ');\\n     * // => '  abc'\\n     *\\n     * _.trimRight('-_-abc-_-', '_-');\\n     * // => '-_-abc'\\n     */\\n    function trimRight(string, chars, guard) {\\n      var value = string;\\n      string = baseToString(string);\\n      if (!string) {\\n        return string;\\n      }\\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\\n        return string.slice(0, trimmedRightIndex(string) + 1);\\n      }\\n      return string.slice(0, charsRightIndex(string, (chars + '')) + 1);\\n    }\\n\\n    /**\\n     * Truncates `string` if it's longer than the given maximum string length.\\n     * The last characters of the truncated string are replaced with the omission\\n     * string which defaults to \\\"...\\\".\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to truncate.\\n     * @param {Object|number} [options] The options object or maximum string length.\\n     * @param {number} [options.length=30] The maximum string length.\\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {string} Returns the truncated string.\\n     * @example\\n     *\\n     * _.trunc('hi-diddly-ho there, neighborino');\\n     * // => 'hi-diddly-ho there, neighbo...'\\n     *\\n     * _.trunc('hi-diddly-ho there, neighborino', 24);\\n     * // => 'hi-diddly-ho there, n...'\\n     *\\n     * _.trunc('hi-diddly-ho there, neighborino', {\\n     *   'length': 24,\\n     *   'separator': ' '\\n     * });\\n     * // => 'hi-diddly-ho there,...'\\n     *\\n     * _.trunc('hi-diddly-ho there, neighborino', {\\n     *   'length': 24,\\n     *   'separator': /,? +/\\n     * });\\n     * // => 'hi-diddly-ho there...'\\n     *\\n     * _.trunc('hi-diddly-ho there, neighborino', {\\n     *   'omission': ' [...]'\\n     * });\\n     * // => 'hi-diddly-ho there, neig [...]'\\n     */\\n    function trunc(string, options, guard) {\\n      if (guard && isIterateeCall(string, options, guard)) {\\n        options = undefined;\\n      }\\n      var length = DEFAULT_TRUNC_LENGTH,\\n          omission = DEFAULT_TRUNC_OMISSION;\\n\\n      if (options != null) {\\n        if (isObject(options)) {\\n          var separator = 'separator' in options ? options.separator : separator;\\n          length = 'length' in options ? (+options.length || 0) : length;\\n          omission = 'omission' in options ? baseToString(options.omission) : omission;\\n        } else {\\n          length = +options || 0;\\n        }\\n      }\\n      string = baseToString(string);\\n      if (length >= string.length) {\\n        return string;\\n      }\\n      var end = length - omission.length;\\n      if (end < 1) {\\n        return omission;\\n      }\\n      var result = string.slice(0, end);\\n      if (separator == null) {\\n        return result + omission;\\n      }\\n      if (isRegExp(separator)) {\\n        if (string.slice(end).search(separator)) {\\n          var match,\\n              newEnd,\\n              substring = string.slice(0, end);\\n\\n          if (!separator.global) {\\n            separator = RegExp(separator.source, (reFlags.exec(separator) || '') + 'g');\\n          }\\n          separator.lastIndex = 0;\\n          while ((match = separator.exec(substring))) {\\n            newEnd = match.index;\\n          }\\n          result = result.slice(0, newEnd == null ? end : newEnd);\\n        }\\n      } else if (string.indexOf(separator, end) != end) {\\n        var index = result.lastIndexOf(separator);\\n        if (index > -1) {\\n          result = result.slice(0, index);\\n        }\\n      }\\n      return result + omission;\\n    }\\n\\n    /**\\n     * The inverse of `_.escape`; this method converts the HTML entities\\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, `&#39;`, and `&#96;` in `string` to their\\n     * corresponding characters.\\n     *\\n     * **Note:** No other HTML entities are unescaped. To unescape additional HTML\\n     * entities use a third-party library like [_he_](https://mths.be/he).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to unescape.\\n     * @returns {string} Returns the unescaped string.\\n     * @example\\n     *\\n     * _.unescape('fred, barney, &amp; pebbles');\\n     * // => 'fred, barney, & pebbles'\\n     */\\n    function unescape(string) {\\n      string = baseToString(string);\\n      return (string && reHasEscapedHtml.test(string))\\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\\n        : string;\\n    }\\n\\n    /**\\n     * Splits `string` into an array of its words.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to inspect.\\n     * @param {RegExp|string} [pattern] The pattern to match words.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Array} Returns the words of `string`.\\n     * @example\\n     *\\n     * _.words('fred, barney, & pebbles');\\n     * // => ['fred', 'barney', 'pebbles']\\n     *\\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\\n     * // => ['fred', 'barney', '&', 'pebbles']\\n     */\\n    function words(string, pattern, guard) {\\n      if (guard && isIterateeCall(string, pattern, guard)) {\\n        pattern = undefined;\\n      }\\n      string = baseToString(string);\\n      return string.match(pattern || reWords) || [];\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Attempts to invoke `func`, returning either the result or the caught error\\n     * object. Any additional arguments are provided to `func` when it is invoked.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {Function} func The function to attempt.\\n     * @returns {*} Returns the `func` result or error object.\\n     * @example\\n     *\\n     * // avoid throwing errors for invalid selectors\\n     * var elements = _.attempt(function(selector) {\\n     *   return document.querySelectorAll(selector);\\n     * }, '>_>');\\n     *\\n     * if (_.isError(elements)) {\\n     *   elements = [];\\n     * }\\n     */\\n    var attempt = restParam(function(func, args) {\\n      try {\\n        return func.apply(undefined, args);\\n      } catch(e) {\\n        return isError(e) ? e : new Error(e);\\n      }\\n    });\\n\\n    /**\\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\\n     * and arguments of the created function. If `func` is a property name the\\n     * created callback returns the property value for a given element. If `func`\\n     * is an object the created callback returns `true` for elements that contain\\n     * the equivalent object properties, otherwise it returns `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias iteratee\\n     * @category Utility\\n     * @param {*} [func=_.identity] The value to convert to a callback.\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Function} Returns the callback.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36 },\\n     *   { 'user': 'fred',   'age': 40 }\\n     * ];\\n     *\\n     * // wrap to create custom callback shorthands\\n     * _.callback = _.wrap(_.callback, function(callback, func, thisArg) {\\n     *   var match = /^(.+?)__([gl]t)(.+)$/.exec(func);\\n     *   if (!match) {\\n     *     return callback(func, thisArg);\\n     *   }\\n     *   return function(object) {\\n     *     return match[2] == 'gt'\\n     *       ? object[match[1]] > match[3]\\n     *       : object[match[1]] < match[3];\\n     *   };\\n     * });\\n     *\\n     * _.filter(users, 'age__gt36');\\n     * // => [{ 'user': 'fred', 'age': 40 }]\\n     */\\n    function callback(func, thisArg, guard) {\\n      if (guard && isIterateeCall(func, thisArg, guard)) {\\n        thisArg = undefined;\\n      }\\n      return isObjectLike(func)\\n        ? matches(func)\\n        : baseCallback(func, thisArg);\\n    }\\n\\n    /**\\n     * Creates a function that returns `value`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {*} value The value to return from the new function.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var object = { 'user': 'fred' };\\n     * var getter = _.constant(object);\\n     *\\n     * getter() === object;\\n     * // => true\\n     */\\n    function constant(value) {\\n      return function() {\\n        return value;\\n      };\\n    }\\n\\n    /**\\n     * This method returns the first argument provided to it.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {*} value Any value.\\n     * @returns {*} Returns `value`.\\n     * @example\\n     *\\n     * var object = { 'user': 'fred' };\\n     *\\n     * _.identity(object) === object;\\n     * // => true\\n     */\\n    function identity(value) {\\n      return value;\\n    }\\n\\n    /**\\n     * Creates a function that performs a deep comparison between a given object\\n     * and `source`, returning `true` if the given object has equivalent property\\n     * values, else `false`.\\n     *\\n     * **Note:** This method supports comparing arrays, booleans, `Date` objects,\\n     * numbers, `Object` objects, regexes, and strings. Objects are compared by\\n     * their own, not inherited, enumerable properties. For comparing a single\\n     * own or inherited property value see `_.matchesProperty`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {Object} source The object of property values to match.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': true },\\n     *   { 'user': 'fred',   'age': 40, 'active': false }\\n     * ];\\n     *\\n     * _.filter(users, _.matches({ 'age': 40, 'active': false }));\\n     * // => [{ 'user': 'fred', 'age': 40, 'active': false }]\\n     */\\n    function matches(source) {\\n      return baseMatches(baseClone(source, true));\\n    }\\n\\n    /**\\n     * Creates a function that compares the property value of `path` on a given\\n     * object to `value`.\\n     *\\n     * **Note:** This method supports comparing arrays, booleans, `Date` objects,\\n     * numbers, `Object` objects, regexes, and strings. Objects are compared by\\n     * their own, not inherited, enumerable properties.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {Array|string} path The path of the property to get.\\n     * @param {*} srcValue The value to match.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney' },\\n     *   { 'user': 'fred' }\\n     * ];\\n     *\\n     * _.find(users, _.matchesProperty('user', 'fred'));\\n     * // => { 'user': 'fred' }\\n     */\\n    function matchesProperty(path, srcValue) {\\n      return baseMatchesProperty(path, baseClone(srcValue, true));\\n    }\\n\\n    /**\\n     * Creates a function that invokes the method at `path` on a given object.\\n     * Any additional arguments are provided to the invoked method.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {Array|string} path The path of the method to invoke.\\n     * @param {...*} [args] The arguments to invoke the method with.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var objects = [\\n     *   { 'a': { 'b': { 'c': _.constant(2) } } },\\n     *   { 'a': { 'b': { 'c': _.constant(1) } } }\\n     * ];\\n     *\\n     * _.map(objects, _.method('a.b.c'));\\n     * // => [2, 1]\\n     *\\n     * _.invoke(_.sortBy(objects, _.method(['a', 'b', 'c'])), 'a.b.c');\\n     * // => [1, 2]\\n     */\\n    var method = restParam(function(path, args) {\\n      return function(object) {\\n        return invokePath(object, path, args);\\n      };\\n    });\\n\\n    /**\\n     * The opposite of `_.method`; this method creates a function that invokes\\n     * the method at a given path on `object`. Any additional arguments are\\n     * provided to the invoked method.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {Object} object The object to query.\\n     * @param {...*} [args] The arguments to invoke the method with.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var array = _.times(3, _.constant),\\n     *     object = { 'a': array, 'b': array, 'c': array };\\n     *\\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\\n     * // => [2, 0]\\n     *\\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\\n     * // => [2, 0]\\n     */\\n    var methodOf = restParam(function(object, args) {\\n      return function(path) {\\n        return invokePath(object, path, args);\\n      };\\n    });\\n\\n    /**\\n     * Adds all own enumerable function properties of a source object to the\\n     * destination object. If `object` is a function then methods are added to\\n     * its prototype as well.\\n     *\\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\\n     * avoid conflicts caused by modifying the original.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {Function|Object} [object=lodash] The destination object.\\n     * @param {Object} source The object of functions to add.\\n     * @param {Object} [options] The options object.\\n     * @param {boolean} [options.chain=true] Specify whether the functions added\\n     *  are chainable.\\n     * @returns {Function|Object} Returns `object`.\\n     * @example\\n     *\\n     * function vowels(string) {\\n     *   return _.filter(string, function(v) {\\n     *     return /[aeiou]/i.test(v);\\n     *   });\\n     * }\\n     *\\n     * _.mixin({ 'vowels': vowels });\\n     * _.vowels('fred');\\n     * // => ['e']\\n     *\\n     * _('fred').vowels().value();\\n     * // => ['e']\\n     *\\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\\n     * _('fred').vowels();\\n     * // => ['e']\\n     */\\n    function mixin(object, source, options) {\\n      if (options == null) {\\n        var isObj = isObject(source),\\n            props = isObj ? keys(source) : undefined,\\n            methodNames = (props && props.length) ? baseFunctions(source, props) : undefined;\\n\\n        if (!(methodNames ? methodNames.length : isObj)) {\\n          methodNames = false;\\n          options = source;\\n          source = object;\\n          object = this;\\n        }\\n      }\\n      if (!methodNames) {\\n        methodNames = baseFunctions(source, keys(source));\\n      }\\n      var chain = true,\\n          index = -1,\\n          isFunc = isFunction(object),\\n          length = methodNames.length;\\n\\n      if (options === false) {\\n        chain = false;\\n      } else if (isObject(options) && 'chain' in options) {\\n        chain = options.chain;\\n      }\\n      while (++index < length) {\\n        var methodName = methodNames[index],\\n            func = source[methodName];\\n\\n        object[methodName] = func;\\n        if (isFunc) {\\n          object.prototype[methodName] = (function(func) {\\n            return function() {\\n              var chainAll = this.__chain__;\\n              if (chain || chainAll) {\\n                var result = object(this.__wrapped__),\\n                    actions = result.__actions__ = arrayCopy(this.__actions__);\\n\\n                actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\\n                result.__chain__ = chainAll;\\n                return result;\\n              }\\n              return func.apply(object, arrayPush([this.value()], arguments));\\n            };\\n          }(func));\\n        }\\n      }\\n      return object;\\n    }\\n\\n    /**\\n     * Reverts the `_` variable to its previous value and returns a reference to\\n     * the `lodash` function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @returns {Function} Returns the `lodash` function.\\n     * @example\\n     *\\n     * var lodash = _.noConflict();\\n     */\\n    function noConflict() {\\n      root._ = oldDash;\\n      return this;\\n    }\\n\\n    /**\\n     * A no-operation function that returns `undefined` regardless of the\\n     * arguments it receives.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @example\\n     *\\n     * var object = { 'user': 'fred' };\\n     *\\n     * _.noop(object) === undefined;\\n     * // => true\\n     */\\n    function noop() {\\n      // No operation performed.\\n    }\\n\\n    /**\\n     * Creates a function that returns the property value at `path` on a\\n     * given object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {Array|string} path The path of the property to get.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var objects = [\\n     *   { 'a': { 'b': { 'c': 2 } } },\\n     *   { 'a': { 'b': { 'c': 1 } } }\\n     * ];\\n     *\\n     * _.map(objects, _.property('a.b.c'));\\n     * // => [2, 1]\\n     *\\n     * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c');\\n     * // => [1, 2]\\n     */\\n    function property(path) {\\n      return isKey(path) ? baseProperty(path) : basePropertyDeep(path);\\n    }\\n\\n    /**\\n     * The opposite of `_.property`; this method creates a function that returns\\n     * the property value at a given path on `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {Object} object The object to query.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var array = [0, 1, 2],\\n     *     object = { 'a': array, 'b': array, 'c': array };\\n     *\\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\\n     * // => [2, 0]\\n     *\\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\\n     * // => [2, 0]\\n     */\\n    function propertyOf(object) {\\n      return function(path) {\\n        return baseGet(object, toPath(path), path + '');\\n      };\\n    }\\n\\n    /**\\n     * Creates an array of numbers (positive and/or negative) progressing from\\n     * `start` up to, but not including, `end`. If `end` is not specified it is\\n     * set to `start` with `start` then set to `0`. If `end` is less than `start`\\n     * a zero-length range is created unless a negative `step` is specified.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {number} [start=0] The start of the range.\\n     * @param {number} end The end of the range.\\n     * @param {number} [step=1] The value to increment or decrement by.\\n     * @returns {Array} Returns the new array of numbers.\\n     * @example\\n     *\\n     * _.range(4);\\n     * // => [0, 1, 2, 3]\\n     *\\n     * _.range(1, 5);\\n     * // => [1, 2, 3, 4]\\n     *\\n     * _.range(0, 20, 5);\\n     * // => [0, 5, 10, 15]\\n     *\\n     * _.range(0, -4, -1);\\n     * // => [0, -1, -2, -3]\\n     *\\n     * _.range(1, 4, 0);\\n     * // => [1, 1, 1]\\n     *\\n     * _.range(0);\\n     * // => []\\n     */\\n    function range(start, end, step) {\\n      if (step && isIterateeCall(start, end, step)) {\\n        end = step = undefined;\\n      }\\n      start = +start || 0;\\n      step = step == null ? 1 : (+step || 0);\\n\\n      if (end == null) {\\n        end = start;\\n        start = 0;\\n      } else {\\n        end = +end || 0;\\n      }\\n      // Use `Array(length)` so engines like Chakra and V8 avoid slower modes.\\n      // See https://youtu.be/XAqIpGU8ZZk#t=17m25s for more details.\\n      var index = -1,\\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\\n          result = Array(length);\\n\\n      while (++index < length) {\\n        result[index] = start;\\n        start += step;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Invokes the iteratee function `n` times, returning an array of the results\\n     * of each invocation. The `iteratee` is bound to `thisArg` and invoked with\\n     * one argument; (index).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {number} n The number of times to invoke `iteratee`.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Array} Returns the array of results.\\n     * @example\\n     *\\n     * var diceRolls = _.times(3, _.partial(_.random, 1, 6, false));\\n     * // => [3, 6, 4]\\n     *\\n     * _.times(3, function(n) {\\n     *   mage.castSpell(n);\\n     * });\\n     * // => invokes `mage.castSpell(n)` three times with `n` of `0`, `1`, and `2`\\n     *\\n     * _.times(3, function(n) {\\n     *   this.cast(n);\\n     * }, mage);\\n     * // => also invokes `mage.castSpell(n)` three times\\n     */\\n    function times(n, iteratee, thisArg) {\\n      n = nativeFloor(n);\\n\\n      // Exit early to avoid a JSC JIT bug in Safari 8\\n      // where `Array(0)` is treated as `Array(1)`.\\n      if (n < 1 || !nativeIsFinite(n)) {\\n        return [];\\n      }\\n      var index = -1,\\n          result = Array(nativeMin(n, MAX_ARRAY_LENGTH));\\n\\n      iteratee = bindCallback(iteratee, thisArg, 1);\\n      while (++index < n) {\\n        if (index < MAX_ARRAY_LENGTH) {\\n          result[index] = iteratee(index);\\n        } else {\\n          iteratee(index);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Generates a unique ID. If `prefix` is provided the ID is appended to it.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {string} [prefix] The value to prefix the ID with.\\n     * @returns {string} Returns the unique ID.\\n     * @example\\n     *\\n     * _.uniqueId('contact_');\\n     * // => 'contact_104'\\n     *\\n     * _.uniqueId();\\n     * // => '105'\\n     */\\n    function uniqueId(prefix) {\\n      var id = ++idCounter;\\n      return baseToString(prefix) + id;\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Adds two numbers.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Math\\n     * @param {number} augend The first number to add.\\n     * @param {number} addend The second number to add.\\n     * @returns {number} Returns the sum.\\n     * @example\\n     *\\n     * _.add(6, 4);\\n     * // => 10\\n     */\\n    function add(augend, addend) {\\n      return (+augend || 0) + (+addend || 0);\\n    }\\n\\n    /**\\n     * Calculates `n` rounded up to `precision`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Math\\n     * @param {number} n The number to round up.\\n     * @param {number} [precision=0] The precision to round up to.\\n     * @returns {number} Returns the rounded up number.\\n     * @example\\n     *\\n     * _.ceil(4.006);\\n     * // => 5\\n     *\\n     * _.ceil(6.004, 2);\\n     * // => 6.01\\n     *\\n     * _.ceil(6040, -2);\\n     * // => 6100\\n     */\\n    var ceil = createRound('ceil');\\n\\n    /**\\n     * Calculates `n` rounded down to `precision`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Math\\n     * @param {number} n The number to round down.\\n     * @param {number} [precision=0] The precision to round down to.\\n     * @returns {number} Returns the rounded down number.\\n     * @example\\n     *\\n     * _.floor(4.006);\\n     * // => 4\\n     *\\n     * _.floor(0.046, 2);\\n     * // => 0.04\\n     *\\n     * _.floor(4060, -2);\\n     * // => 4000\\n     */\\n    var floor = createRound('floor');\\n\\n    /**\\n     * Gets the maximum value of `collection`. If `collection` is empty or falsey\\n     * `-Infinity` is returned. If an iteratee function is provided it is invoked\\n     * for each value in `collection` to generate the criterion by which the value\\n     * is ranked. The `iteratee` is bound to `thisArg` and invoked with three\\n     * arguments: (value, index, collection).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Math\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [iteratee] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {*} Returns the maximum value.\\n     * @example\\n     *\\n     * _.max([4, 2, 8, 6]);\\n     * // => 8\\n     *\\n     * _.max([]);\\n     * // => -Infinity\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36 },\\n     *   { 'user': 'fred',   'age': 40 }\\n     * ];\\n     *\\n     * _.max(users, function(chr) {\\n     *   return chr.age;\\n     * });\\n     * // => { 'user': 'fred', 'age': 40 }\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.max(users, 'age');\\n     * // => { 'user': 'fred', 'age': 40 }\\n     */\\n    var max = createExtremum(gt, NEGATIVE_INFINITY);\\n\\n    /**\\n     * Gets the minimum value of `collection`. If `collection` is empty or falsey\\n     * `Infinity` is returned. If an iteratee function is provided it is invoked\\n     * for each value in `collection` to generate the criterion by which the value\\n     * is ranked. The `iteratee` is bound to `thisArg` and invoked with three\\n     * arguments: (value, index, collection).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Math\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [iteratee] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {*} Returns the minimum value.\\n     * @example\\n     *\\n     * _.min([4, 2, 8, 6]);\\n     * // => 2\\n     *\\n     * _.min([]);\\n     * // => Infinity\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36 },\\n     *   { 'user': 'fred',   'age': 40 }\\n     * ];\\n     *\\n     * _.min(users, function(chr) {\\n     *   return chr.age;\\n     * });\\n     * // => { 'user': 'barney', 'age': 36 }\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.min(users, 'age');\\n     * // => { 'user': 'barney', 'age': 36 }\\n     */\\n    var min = createExtremum(lt, POSITIVE_INFINITY);\\n\\n    /**\\n     * Calculates `n` rounded to `precision`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Math\\n     * @param {number} n The number to round.\\n     * @param {number} [precision=0] The precision to round to.\\n     * @returns {number} Returns the rounded number.\\n     * @example\\n     *\\n     * _.round(4.006);\\n     * // => 4\\n     *\\n     * _.round(4.006, 2);\\n     * // => 4.01\\n     *\\n     * _.round(4060, -2);\\n     * // => 4100\\n     */\\n    var round = createRound('round');\\n\\n    /**\\n     * Gets the sum of the values in `collection`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Math\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [iteratee] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {number} Returns the sum.\\n     * @example\\n     *\\n     * _.sum([4, 6]);\\n     * // => 10\\n     *\\n     * _.sum({ 'a': 4, 'b': 6 });\\n     * // => 10\\n     *\\n     * var objects = [\\n     *   { 'n': 4 },\\n     *   { 'n': 6 }\\n     * ];\\n     *\\n     * _.sum(objects, function(object) {\\n     *   return object.n;\\n     * });\\n     * // => 10\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.sum(objects, 'n');\\n     * // => 10\\n     */\\n    function sum(collection, iteratee, thisArg) {\\n      if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\\n        iteratee = undefined;\\n      }\\n      iteratee = getCallback(iteratee, thisArg, 3);\\n      return iteratee.length == 1\\n        ? arraySum(isArray(collection) ? collection : toIterable(collection), iteratee)\\n        : baseSum(collection, iteratee);\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    // Ensure wrappers are instances of `baseLodash`.\\n    lodash.prototype = baseLodash.prototype;\\n\\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\\n    LodashWrapper.prototype.constructor = LodashWrapper;\\n\\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\\n    LazyWrapper.prototype.constructor = LazyWrapper;\\n\\n    // Add functions to the `Map` cache.\\n    MapCache.prototype['delete'] = mapDelete;\\n    MapCache.prototype.get = mapGet;\\n    MapCache.prototype.has = mapHas;\\n    MapCache.prototype.set = mapSet;\\n\\n    // Add functions to the `Set` cache.\\n    SetCache.prototype.push = cachePush;\\n\\n    // Assign cache to `_.memoize`.\\n    memoize.Cache = MapCache;\\n\\n    // Add functions that return wrapped values when chaining.\\n    lodash.after = after;\\n    lodash.ary = ary;\\n    lodash.assign = assign;\\n    lodash.at = at;\\n    lodash.before = before;\\n    lodash.bind = bind;\\n    lodash.bindAll = bindAll;\\n    lodash.bindKey = bindKey;\\n    lodash.callback = callback;\\n    lodash.chain = chain;\\n    lodash.chunk = chunk;\\n    lodash.compact = compact;\\n    lodash.constant = constant;\\n    lodash.countBy = countBy;\\n    lodash.create = create;\\n    lodash.curry = curry;\\n    lodash.curryRight = curryRight;\\n    lodash.debounce = debounce;\\n    lodash.defaults = defaults;\\n    lodash.defaultsDeep = defaultsDeep;\\n    lodash.defer = defer;\\n    lodash.delay = delay;\\n    lodash.difference = difference;\\n    lodash.drop = drop;\\n    lodash.dropRight = dropRight;\\n    lodash.dropRightWhile = dropRightWhile;\\n    lodash.dropWhile = dropWhile;\\n    lodash.fill = fill;\\n    lodash.filter = filter;\\n    lodash.flatten = flatten;\\n    lodash.flattenDeep = flattenDeep;\\n    lodash.flow = flow;\\n    lodash.flowRight = flowRight;\\n    lodash.forEach = forEach;\\n    lodash.forEachRight = forEachRight;\\n    lodash.forIn = forIn;\\n    lodash.forInRight = forInRight;\\n    lodash.forOwn = forOwn;\\n    lodash.forOwnRight = forOwnRight;\\n    lodash.functions = functions;\\n    lodash.groupBy = groupBy;\\n    lodash.indexBy = indexBy;\\n    lodash.initial = initial;\\n    lodash.intersection = intersection;\\n    lodash.invert = invert;\\n    lodash.invoke = invoke;\\n    lodash.keys = keys;\\n    lodash.keysIn = keysIn;\\n    lodash.map = map;\\n    lodash.mapKeys = mapKeys;\\n    lodash.mapValues = mapValues;\\n    lodash.matches = matches;\\n    lodash.matchesProperty = matchesProperty;\\n    lodash.memoize = memoize;\\n    lodash.merge = merge;\\n    lodash.method = method;\\n    lodash.methodOf = methodOf;\\n    lodash.mixin = mixin;\\n    lodash.modArgs = modArgs;\\n    lodash.negate = negate;\\n    lodash.omit = omit;\\n    lodash.once = once;\\n    lodash.pairs = pairs;\\n    lodash.partial = partial;\\n    lodash.partialRight = partialRight;\\n    lodash.partition = partition;\\n    lodash.pick = pick;\\n    lodash.pluck = pluck;\\n    lodash.property = property;\\n    lodash.propertyOf = propertyOf;\\n    lodash.pull = pull;\\n    lodash.pullAt = pullAt;\\n    lodash.range = range;\\n    lodash.rearg = rearg;\\n    lodash.reject = reject;\\n    lodash.remove = remove;\\n    lodash.rest = rest;\\n    lodash.restParam = restParam;\\n    lodash.set = set;\\n    lodash.shuffle = shuffle;\\n    lodash.slice = slice;\\n    lodash.sortBy = sortBy;\\n    lodash.sortByAll = sortByAll;\\n    lodash.sortByOrder = sortByOrder;\\n    lodash.spread = spread;\\n    lodash.take = take;\\n    lodash.takeRight = takeRight;\\n    lodash.takeRightWhile = takeRightWhile;\\n    lodash.takeWhile = takeWhile;\\n    lodash.tap = tap;\\n    lodash.throttle = throttle;\\n    lodash.thru = thru;\\n    lodash.times = times;\\n    lodash.toArray = toArray;\\n    lodash.toPlainObject = toPlainObject;\\n    lodash.transform = transform;\\n    lodash.union = union;\\n    lodash.uniq = uniq;\\n    lodash.unzip = unzip;\\n    lodash.unzipWith = unzipWith;\\n    lodash.values = values;\\n    lodash.valuesIn = valuesIn;\\n    lodash.where = where;\\n    lodash.without = without;\\n    lodash.wrap = wrap;\\n    lodash.xor = xor;\\n    lodash.zip = zip;\\n    lodash.zipObject = zipObject;\\n    lodash.zipWith = zipWith;\\n\\n    // Add aliases.\\n    lodash.backflow = flowRight;\\n    lodash.collect = map;\\n    lodash.compose = flowRight;\\n    lodash.each = forEach;\\n    lodash.eachRight = forEachRight;\\n    lodash.extend = assign;\\n    lodash.iteratee = callback;\\n    lodash.methods = functions;\\n    lodash.object = zipObject;\\n    lodash.select = filter;\\n    lodash.tail = rest;\\n    lodash.unique = uniq;\\n\\n    // Add functions to `lodash.prototype`.\\n    mixin(lodash, lodash);\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    // Add functions that return unwrapped values when chaining.\\n    lodash.add = add;\\n    lodash.attempt = attempt;\\n    lodash.camelCase = camelCase;\\n    lodash.capitalize = capitalize;\\n    lodash.ceil = ceil;\\n    lodash.clone = clone;\\n    lodash.cloneDeep = cloneDeep;\\n    lodash.deburr = deburr;\\n    lodash.endsWith = endsWith;\\n    lodash.escape = escape;\\n    lodash.escapeRegExp = escapeRegExp;\\n    lodash.every = every;\\n    lodash.find = find;\\n    lodash.findIndex = findIndex;\\n    lodash.findKey = findKey;\\n    lodash.findLast = findLast;\\n    lodash.findLastIndex = findLastIndex;\\n    lodash.findLastKey = findLastKey;\\n    lodash.findWhere = findWhere;\\n    lodash.first = first;\\n    lodash.floor = floor;\\n    lodash.get = get;\\n    lodash.gt = gt;\\n    lodash.gte = gte;\\n    lodash.has = has;\\n    lodash.identity = identity;\\n    lodash.includes = includes;\\n    lodash.indexOf = indexOf;\\n    lodash.inRange = inRange;\\n    lodash.isArguments = isArguments;\\n    lodash.isArray = isArray;\\n    lodash.isBoolean = isBoolean;\\n    lodash.isDate = isDate;\\n    lodash.isElement = isElement;\\n    lodash.isEmpty = isEmpty;\\n    lodash.isEqual = isEqual;\\n    lodash.isError = isError;\\n    lodash.isFinite = isFinite;\\n    lodash.isFunction = isFunction;\\n    lodash.isMatch = isMatch;\\n    lodash.isNaN = isNaN;\\n    lodash.isNative = isNative;\\n    lodash.isNull = isNull;\\n    lodash.isNumber = isNumber;\\n    lodash.isObject = isObject;\\n    lodash.isPlainObject = isPlainObject;\\n    lodash.isRegExp = isRegExp;\\n    lodash.isString = isString;\\n    lodash.isTypedArray = isTypedArray;\\n    lodash.isUndefined = isUndefined;\\n    lodash.kebabCase = kebabCase;\\n    lodash.last = last;\\n    lodash.lastIndexOf = lastIndexOf;\\n    lodash.lt = lt;\\n    lodash.lte = lte;\\n    lodash.max = max;\\n    lodash.min = min;\\n    lodash.noConflict = noConflict;\\n    lodash.noop = noop;\\n    lodash.now = now;\\n    lodash.pad = pad;\\n    lodash.padLeft = padLeft;\\n    lodash.padRight = padRight;\\n    lodash.parseInt = parseInt;\\n    lodash.random = random;\\n    lodash.reduce = reduce;\\n    lodash.reduceRight = reduceRight;\\n    lodash.repeat = repeat;\\n    lodash.result = result;\\n    lodash.round = round;\\n    lodash.runInContext = runInContext;\\n    lodash.size = size;\\n    lodash.snakeCase = snakeCase;\\n    lodash.some = some;\\n    lodash.sortedIndex = sortedIndex;\\n    lodash.sortedLastIndex = sortedLastIndex;\\n    lodash.startCase = startCase;\\n    lodash.startsWith = startsWith;\\n    lodash.sum = sum;\\n    lodash.template = template;\\n    lodash.trim = trim;\\n    lodash.trimLeft = trimLeft;\\n    lodash.trimRight = trimRight;\\n    lodash.trunc = trunc;\\n    lodash.unescape = unescape;\\n    lodash.uniqueId = uniqueId;\\n    lodash.words = words;\\n\\n    // Add aliases.\\n    lodash.all = every;\\n    lodash.any = some;\\n    lodash.contains = includes;\\n    lodash.eq = isEqual;\\n    lodash.detect = find;\\n    lodash.foldl = reduce;\\n    lodash.foldr = reduceRight;\\n    lodash.head = first;\\n    lodash.include = includes;\\n    lodash.inject = reduce;\\n\\n    mixin(lodash, (function() {\\n      var source = {};\\n      baseForOwn(lodash, function(func, methodName) {\\n        if (!lodash.prototype[methodName]) {\\n          source[methodName] = func;\\n        }\\n      });\\n      return source;\\n    }()), false);\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    // Add functions capable of returning wrapped and unwrapped values when chaining.\\n    lodash.sample = sample;\\n\\n    lodash.prototype.sample = function(n) {\\n      if (!this.__chain__ && n == null) {\\n        return sample(this.value());\\n      }\\n      return this.thru(function(value) {\\n        return sample(value, n);\\n      });\\n    };\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * The semantic version number.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @type string\\n     */\\n    lodash.VERSION = VERSION;\\n\\n    // Assign default placeholders.\\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\\n      lodash[methodName].placeholder = lodash;\\n    });\\n\\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\\n    arrayEach(['drop', 'take'], function(methodName, index) {\\n      LazyWrapper.prototype[methodName] = function(n) {\\n        var filtered = this.__filtered__;\\n        if (filtered && !index) {\\n          return new LazyWrapper(this);\\n        }\\n        n = n == null ? 1 : nativeMax(nativeFloor(n) || 0, 0);\\n\\n        var result = this.clone();\\n        if (filtered) {\\n          result.__takeCount__ = nativeMin(result.__takeCount__, n);\\n        } else {\\n          result.__views__.push({ 'size': n, 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') });\\n        }\\n        return result;\\n      };\\n\\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\\n        return this.reverse()[methodName](n).reverse();\\n      };\\n    });\\n\\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\\n      var type = index + 1,\\n          isFilter = type != LAZY_MAP_FLAG;\\n\\n      LazyWrapper.prototype[methodName] = function(iteratee, thisArg) {\\n        var result = this.clone();\\n        result.__iteratees__.push({ 'iteratee': getCallback(iteratee, thisArg, 1), 'type': type });\\n        result.__filtered__ = result.__filtered__ || isFilter;\\n        return result;\\n      };\\n    });\\n\\n    // Add `LazyWrapper` methods for `_.first` and `_.last`.\\n    arrayEach(['first', 'last'], function(methodName, index) {\\n      var takeName = 'take' + (index ? 'Right' : '');\\n\\n      LazyWrapper.prototype[methodName] = function() {\\n        return this[takeName](1).value()[0];\\n      };\\n    });\\n\\n    // Add `LazyWrapper` methods for `_.initial` and `_.rest`.\\n    arrayEach(['initial', 'rest'], function(methodName, index) {\\n      var dropName = 'drop' + (index ? '' : 'Right');\\n\\n      LazyWrapper.prototype[methodName] = function() {\\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\\n      };\\n    });\\n\\n    // Add `LazyWrapper` methods for `_.pluck` and `_.where`.\\n    arrayEach(['pluck', 'where'], function(methodName, index) {\\n      var operationName = index ? 'filter' : 'map',\\n          createCallback = index ? baseMatches : property;\\n\\n      LazyWrapper.prototype[methodName] = function(value) {\\n        return this[operationName](createCallback(value));\\n      };\\n    });\\n\\n    LazyWrapper.prototype.compact = function() {\\n      return this.filter(identity);\\n    };\\n\\n    LazyWrapper.prototype.reject = function(predicate, thisArg) {\\n      predicate = getCallback(predicate, thisArg, 1);\\n      return this.filter(function(value) {\\n        return !predicate(value);\\n      });\\n    };\\n\\n    LazyWrapper.prototype.slice = function(start, end) {\\n      start = start == null ? 0 : (+start || 0);\\n\\n      var result = this;\\n      if (result.__filtered__ && (start > 0 || end < 0)) {\\n        return new LazyWrapper(result);\\n      }\\n      if (start < 0) {\\n        result = result.takeRight(-start);\\n      } else if (start) {\\n        result = result.drop(start);\\n      }\\n      if (end !== undefined) {\\n        end = (+end || 0);\\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\\n      }\\n      return result;\\n    };\\n\\n    LazyWrapper.prototype.takeRightWhile = function(predicate, thisArg) {\\n      return this.reverse().takeWhile(predicate, thisArg).reverse();\\n    };\\n\\n    LazyWrapper.prototype.toArray = function() {\\n      return this.take(POSITIVE_INFINITY);\\n    };\\n\\n    // Add `LazyWrapper` methods to `lodash.prototype`.\\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\\n      var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName),\\n          retUnwrapped = /^(?:first|last)$/.test(methodName),\\n          lodashFunc = lodash[retUnwrapped ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName];\\n\\n      if (!lodashFunc) {\\n        return;\\n      }\\n      lodash.prototype[methodName] = function() {\\n        var args = retUnwrapped ? [1] : arguments,\\n            chainAll = this.__chain__,\\n            value = this.__wrapped__,\\n            isHybrid = !!this.__actions__.length,\\n            isLazy = value instanceof LazyWrapper,\\n            iteratee = args[0],\\n            useLazy = isLazy || isArray(value);\\n\\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\\n          // Avoid lazy use if the iteratee has a \\\"length\\\" value other than `1`.\\n          isLazy = useLazy = false;\\n        }\\n        var interceptor = function(value) {\\n          return (retUnwrapped && chainAll)\\n            ? lodashFunc(value, 1)[0]\\n            : lodashFunc.apply(undefined, arrayPush([value], args));\\n        };\\n\\n        var action = { 'func': thru, 'args': [interceptor], 'thisArg': undefined },\\n            onlyLazy = isLazy && !isHybrid;\\n\\n        if (retUnwrapped && !chainAll) {\\n          if (onlyLazy) {\\n            value = value.clone();\\n            value.__actions__.push(action);\\n            return func.call(value);\\n          }\\n          return lodashFunc.call(undefined, this.value())[0];\\n        }\\n        if (!retUnwrapped && useLazy) {\\n          value = onlyLazy ? value : new LazyWrapper(this);\\n          var result = func.apply(value, args);\\n          result.__actions__.push(action);\\n          return new LodashWrapper(result, chainAll);\\n        }\\n        return this.thru(interceptor);\\n      };\\n    });\\n\\n    // Add `Array` and `String` methods to `lodash.prototype`.\\n    arrayEach(['join', 'pop', 'push', 'replace', 'shift', 'sort', 'splice', 'split', 'unshift'], function(methodName) {\\n      var func = (/^(?:replace|split)$/.test(methodName) ? stringProto : arrayProto)[methodName],\\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\\n          retUnwrapped = /^(?:join|pop|replace|shift)$/.test(methodName);\\n\\n      lodash.prototype[methodName] = function() {\\n        var args = arguments;\\n        if (retUnwrapped && !this.__chain__) {\\n          return func.apply(this.value(), args);\\n        }\\n        return this[chainName](function(value) {\\n          return func.apply(value, args);\\n        });\\n      };\\n    });\\n\\n    // Map minified function names to their real names.\\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\\n      var lodashFunc = lodash[methodName];\\n      if (lodashFunc) {\\n        var key = lodashFunc.name,\\n            names = realNames[key] || (realNames[key] = []);\\n\\n        names.push({ 'name': methodName, 'func': lodashFunc });\\n      }\\n    });\\n\\n    realNames[createHybridWrapper(undefined, BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': undefined }];\\n\\n    // Add functions to the lazy wrapper.\\n    LazyWrapper.prototype.clone = lazyClone;\\n    LazyWrapper.prototype.reverse = lazyReverse;\\n    LazyWrapper.prototype.value = lazyValue;\\n\\n    // Add chaining functions to the `lodash` wrapper.\\n    lodash.prototype.chain = wrapperChain;\\n    lodash.prototype.commit = wrapperCommit;\\n    lodash.prototype.concat = wrapperConcat;\\n    lodash.prototype.plant = wrapperPlant;\\n    lodash.prototype.reverse = wrapperReverse;\\n    lodash.prototype.toString = wrapperToString;\\n    lodash.prototype.run = lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\\n\\n    // Add function aliases to the `lodash` wrapper.\\n    lodash.prototype.collect = lodash.prototype.map;\\n    lodash.prototype.head = lodash.prototype.first;\\n    lodash.prototype.select = lodash.prototype.filter;\\n    lodash.prototype.tail = lodash.prototype.rest;\\n\\n    return lodash;\\n  }\\n\\n  /*--------------------------------------------------------------------------*/\\n\\n  // Export lodash.\\n  var _ = runInContext();\\n\\n  // Some AMD build optimizers like r.js check for condition patterns like the following:\\n  if (true) {\\n    // Expose lodash to the global object when an AMD loader is present to avoid\\n    // errors in cases where lodash is loaded by a script tag and not intended\\n    // as an AMD module. See http://requirejs.org/docs/errors.html#mismatch for\\n    // more details.\\n    root._ = _;\\n\\n    // Define as an anonymous module so, through path mapping, it can be\\n    // referenced as the \\\"underscore\\\" module.\\n    !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {\\n      return _;\\n    }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n  }\\n  // Check for `exports` after `define` in case a build optimizer adds an `exports` object.\\n  else if (freeExports && freeModule) {\\n    // Export for Node.js or RingoJS.\\n    if (moduleExports) {\\n      (freeModule.exports = _)._ = _;\\n    }\\n    // Export for Rhino with CommonJS support.\\n    else {\\n      freeExports._ = _;\\n    }\\n  }\\n  else {\\n    // Export for a browser or Rhino.\\n    root._ = _;\\n  }\\n}.call(this));\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/buildin/module.js */ 149)(module), (function() { return this; }())))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/lodash/index.js\\n ** module id = 148\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/lodash/index.js?\");\n\n/***/ },\n/* 149 */\n/*!***********************************!*\\\n  !*** (webpack)/buildin/module.js ***!\n  \\***********************************/\n/***/ function(module, exports) {\n\n\teval(\"module.exports = function(module) {\\r\\n\\tif(!module.webpackPolyfill) {\\r\\n\\t\\tmodule.deprecate = function() {};\\r\\n\\t\\tmodule.paths = [];\\r\\n\\t\\t// module.parent = undefined by default\\r\\n\\t\\tmodule.children = [];\\r\\n\\t\\tmodule.webpackPolyfill = 1;\\r\\n\\t}\\r\\n\\treturn module;\\r\\n}\\r\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** (webpack)/buildin/module.js\\n ** module id = 149\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///(webpack)/buildin/module.js?\");\n\n/***/ },\n/* 150 */\n/*!*************************!*\\\n  !*** external \"jQuery\" ***!\n  \\*************************/\n/***/ function(module, exports) {\n\n\teval(\"module.exports = jQuery;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** external \\\"jQuery\\\"\\n ** module id = 150\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///external_%22jQuery%22?\");\n\n/***/ },\n/* 151 */\n/*!*****************************************!*\\\n  !*** ./~/react-router/modules/index.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"exports.DefaultRoute = __webpack_require__(/*! ./components/DefaultRoute */ 166);\\nexports.Link = __webpack_require__(/*! ./components/Link */ 169);\\nexports.NotFoundRoute = __webpack_require__(/*! ./components/NotFoundRoute */ 173);\\nexports.Redirect = __webpack_require__(/*! ./components/Redirect */ 174);\\nexports.Route = __webpack_require__(/*! ./components/Route */ 175);\\nexports.RouteHandler = __webpack_require__(/*! ./components/RouteHandler */ 176);\\n\\nexports.HashLocation = __webpack_require__(/*! ./locations/HashLocation */ 178);\\nexports.HistoryLocation = __webpack_require__(/*! ./locations/HistoryLocation */ 153);\\nexports.RefreshLocation = __webpack_require__(/*! ./locations/RefreshLocation */ 152);\\n\\nexports.ImitateBrowserBehavior = __webpack_require__(/*! ./behaviors/ImitateBrowserBehavior */ 179);\\nexports.ScrollToTopBehavior = __webpack_require__(/*! ./behaviors/ScrollToTopBehavior */ 180);\\n\\nexports.Navigation = __webpack_require__(/*! ./mixins/Navigation */ 171);\\nexports.State = __webpack_require__(/*! ./mixins/State */ 172);\\n\\nexports.create = __webpack_require__(/*! ./utils/createRouter */ 181);\\nexports.run = __webpack_require__(/*! ./utils/runRouter */ 200);\\n\\nexports.History = __webpack_require__(/*! ./utils/History */ 155);\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/index.js\\n ** module id = 151\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/index.js?\");\n\n/***/ },\n/* 152 */\n/*!*************************************************************!*\\\n  !*** ./~/react-router/modules/locations/RefreshLocation.js ***!\n  \\*************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var HistoryLocation = __webpack_require__(/*! ./HistoryLocation */ 153);\\nvar History = __webpack_require__(/*! ../utils/History */ 155);\\nvar Path = __webpack_require__(/*! ../utils/Path */ 156);\\n\\n/**\\n * A Location that uses full page refreshes. This is used as\\n * the fallback for HistoryLocation in browsers that do not\\n * support the HTML5 history API.\\n */\\nvar RefreshLocation = {\\n\\n  push: function (path) {\\n    window.location = Path.encode(path);\\n  },\\n\\n  replace: function (path) {\\n    window.location.replace(Path.encode(path));\\n  },\\n\\n  pop: History.back,\\n\\n  getCurrentPath: HistoryLocation.getCurrentPath,\\n\\n  toString: function () {\\n    return '<RefreshLocation>';\\n  }\\n\\n};\\n\\nmodule.exports = RefreshLocation;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/locations/RefreshLocation.js\\n ** module id = 152\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/locations/RefreshLocation.js?\");\n\n/***/ },\n/* 153 */\n/*!*************************************************************!*\\\n  !*** ./~/react-router/modules/locations/HistoryLocation.js ***!\n  \\*************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var LocationActions = __webpack_require__(/*! ../actions/LocationActions */ 154);\\nvar History = __webpack_require__(/*! ../utils/History */ 155);\\nvar Path = __webpack_require__(/*! ../utils/Path */ 156);\\n\\n/**\\n * Returns the current URL path from `window.location`, including query string.\\n */\\nfunction getWindowPath() {\\n  return Path.decode(\\n    window.location.pathname + window.location.search\\n  );\\n}\\n\\nvar _changeListeners = [];\\n\\nfunction notifyChange(type) {\\n  var change = {\\n    path: getWindowPath(),\\n    type: type\\n  };\\n\\n  _changeListeners.forEach(function (listener) {\\n    listener(change);\\n  });\\n}\\n\\nvar _isListening = false;\\n\\nfunction onPopState() {\\n  notifyChange(LocationActions.POP);\\n}\\n\\n/**\\n * A Location that uses HTML5 history.\\n */\\nvar HistoryLocation = {\\n\\n  addChangeListener: function (listener) {\\n    _changeListeners.push(listener);\\n\\n    if (_isListening)\\n      return;\\n\\n    if (window.addEventListener) {\\n      window.addEventListener('popstate', onPopState, false);\\n    } else {\\n      window.attachEvent('popstate', onPopState);\\n    }\\n\\n    _isListening = true;\\n  },\\n\\n  removeChangeListener: function(listener) {\\n    for (var i = 0, l = _changeListeners.length; i < l; i ++) {\\n      if (_changeListeners[i] === listener) {\\n        _changeListeners.splice(i, 1);\\n        break;\\n      }\\n    }\\n\\n    if (window.addEventListener) {\\n      window.removeEventListener('popstate', onPopState);\\n    } else {\\n      window.removeEvent('popstate', onPopState);\\n    }\\n\\n    if (_changeListeners.length === 0)\\n      _isListening = false;\\n  },\\n\\n\\n\\n  push: function (path) {\\n    window.history.pushState({ path: path }, '', Path.encode(path));\\n    History.length += 1;\\n    notifyChange(LocationActions.PUSH);\\n  },\\n\\n  replace: function (path) {\\n    window.history.replaceState({ path: path }, '', Path.encode(path));\\n    notifyChange(LocationActions.REPLACE);\\n  },\\n\\n  pop: History.back,\\n\\n  getCurrentPath: getWindowPath,\\n\\n  toString: function () {\\n    return '<HistoryLocation>';\\n  }\\n\\n};\\n\\nmodule.exports = HistoryLocation;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/locations/HistoryLocation.js\\n ** module id = 153\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/locations/HistoryLocation.js?\");\n\n/***/ },\n/* 154 */\n/*!***********************************************************!*\\\n  !*** ./~/react-router/modules/actions/LocationActions.js ***!\n  \\***********************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Actions that modify the URL.\\n */\\nvar LocationActions = {\\n\\n  /**\\n   * Indicates a new location is being pushed to the history stack.\\n   */\\n  PUSH: 'push',\\n\\n  /**\\n   * Indicates the current location should be replaced.\\n   */\\n  REPLACE: 'replace',\\n\\n  /**\\n   * Indicates the most recent entry should be removed from the history stack.\\n   */\\n  POP: 'pop'\\n\\n};\\n\\nmodule.exports = LocationActions;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/actions/LocationActions.js\\n ** module id = 154\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/actions/LocationActions.js?\");\n\n/***/ },\n/* 155 */\n/*!*************************************************!*\\\n  !*** ./~/react-router/modules/utils/History.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var invariant = __webpack_require__(/*! react/lib/invariant */ 6);\\nvar canUseDOM = __webpack_require__(/*! react/lib/ExecutionEnvironment */ 49).canUseDOM;\\n\\nvar History = {\\n\\n  /**\\n   * Sends the browser back one entry in the history.\\n   */\\n  back: function () {\\n    invariant(\\n      canUseDOM,\\n      'Cannot use History.back without a DOM'\\n    );\\n\\n    // Do this first so that History.length will\\n    // be accurate in location change listeners.\\n    History.length -= 1;\\n\\n    window.history.back();\\n  },\\n\\n  /**\\n   * The current number of entries in the history.\\n   */\\n  length: 1\\n\\n};\\n\\nmodule.exports = History;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/History.js\\n ** module id = 155\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/History.js?\");\n\n/***/ },\n/* 156 */\n/*!**********************************************!*\\\n  !*** ./~/react-router/modules/utils/Path.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var invariant = __webpack_require__(/*! react/lib/invariant */ 6);\\nvar merge = __webpack_require__(/*! qs/lib/utils */ 157).merge;\\nvar qs = __webpack_require__(/*! qs */ 162);\\n\\nvar paramCompileMatcher = /:([a-zA-Z_$][a-zA-Z0-9_$]*)|[*.()\\\\[\\\\]\\\\\\\\+|{}^$]/g;\\nvar paramInjectMatcher = /:([a-zA-Z_$][a-zA-Z0-9_$?]*[?]?)|[*]/g;\\nvar paramInjectTrailingSlashMatcher = /\\\\/\\\\/\\\\?|\\\\/\\\\?/g;\\nvar queryMatcher = /\\\\?(.+)/;\\n\\nvar _compiledPatterns = {};\\n\\nfunction compilePattern(pattern) {\\n  if (!(pattern in _compiledPatterns)) {\\n    var paramNames = [];\\n    var source = pattern.replace(paramCompileMatcher, function (match, paramName) {\\n      if (paramName) {\\n        paramNames.push(paramName);\\n        return '([^/?#]+)';\\n      } else if (match === '*') {\\n        paramNames.push('splat');\\n        return '(.*?)';\\n      } else {\\n        return '\\\\\\\\' + match;\\n      }\\n    });\\n\\n    _compiledPatterns[pattern] = {\\n      matcher: new RegExp('^' + source + '$', 'i'),\\n      paramNames: paramNames\\n    };\\n  }\\n\\n  return _compiledPatterns[pattern];\\n}\\n\\nvar Path = {\\n\\n  /**\\n   * Safely decodes special characters in the given URL path.\\n   */\\n  decode: function (path) {\\n    return decodeURI(path.replace(/\\\\+/g, ' '));\\n  },\\n\\n  /**\\n   * Safely encodes special characters in the given URL path.\\n   */\\n  encode: function (path) {\\n    return encodeURI(path).replace(/%20/g, '+');\\n  },\\n\\n  /**\\n   * Returns an array of the names of all parameters in the given pattern.\\n   */\\n  extractParamNames: function (pattern) {\\n    return compilePattern(pattern).paramNames;\\n  },\\n\\n  /**\\n   * Extracts the portions of the given URL path that match the given pattern\\n   * and returns an object of param name => value pairs. Returns null if the\\n   * pattern does not match the given path.\\n   */\\n  extractParams: function (pattern, path) {\\n    var object = compilePattern(pattern);\\n    var match = path.match(object.matcher);\\n\\n    if (!match)\\n      return null;\\n\\n    var params = {};\\n\\n    object.paramNames.forEach(function (paramName, index) {\\n      params[paramName] = match[index + 1];\\n    });\\n\\n    return params;\\n  },\\n\\n  /**\\n   * Returns a version of the given route path with params interpolated. Throws\\n   * if there is a dynamic segment of the route path for which there is no param.\\n   */\\n  injectParams: function (pattern, params) {\\n    params = params || {};\\n\\n    var splatIndex = 0;\\n\\n    return pattern.replace(paramInjectMatcher, function (match, paramName) {\\n      paramName = paramName || 'splat';\\n\\n      // If param is optional don't check for existence\\n      if (paramName.slice(-1) !== '?') {\\n        invariant(\\n          params[paramName] != null,\\n          'Missing \\\"' + paramName + '\\\" parameter for path \\\"' + pattern + '\\\"'\\n        );\\n      } else {\\n        paramName = paramName.slice(0, -1);\\n\\n        if (params[paramName] == null)\\n          return '';\\n      }\\n\\n      var segment;\\n      if (paramName === 'splat' && Array.isArray(params[paramName])) {\\n        segment = params[paramName][splatIndex++];\\n\\n        invariant(\\n          segment != null,\\n          'Missing splat # ' + splatIndex + ' for path \\\"' + pattern + '\\\"'\\n        );\\n      } else {\\n        segment = params[paramName];\\n      }\\n\\n      return segment;\\n    }).replace(paramInjectTrailingSlashMatcher, '/');\\n  },\\n\\n  /**\\n   * Returns an object that is the result of parsing any query string contained\\n   * in the given path, null if the path contains no query string.\\n   */\\n  extractQuery: function (path) {\\n    var match = path.match(queryMatcher);\\n    return match && qs.parse(match[1]);\\n  },\\n\\n  /**\\n   * Returns a version of the given path without the query string.\\n   */\\n  withoutQuery: function (path) {\\n    return path.replace(queryMatcher, '');\\n  },\\n\\n  /**\\n   * Returns a version of the given path with the parameters in the given\\n   * query merged into the query string.\\n   */\\n  withQuery: function (path, query) {\\n    var existingQuery = Path.extractQuery(path);\\n\\n    if (existingQuery)\\n      query = query ? merge(existingQuery, query) : existingQuery;\\n\\n    var queryString = query && qs.stringify(query);\\n\\n    if (queryString)\\n      return Path.withoutQuery(path) + '?' + queryString;\\n\\n    return path;\\n  },\\n\\n  /**\\n   * Returns true if the given path is absolute.\\n   */\\n  isAbsolute: function (path) {\\n    return path.charAt(0) === '/';\\n  },\\n\\n  /**\\n   * Returns a normalized version of the given path.\\n   */\\n  normalize: function (path, parentRoute) {\\n    return path.replace(/^\\\\/*/, '/');\\n  },\\n\\n  /**\\n   * Joins two URL paths together.\\n   */\\n  join: function (a, b) {\\n    return a.replace(/\\\\/*$/, '/') + b;\\n  }\\n\\n};\\n\\nmodule.exports = Path;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/Path.js\\n ** module id = 156\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/Path.js?\");\n\n/***/ },\n/* 157 */\n/*!******************************************!*\\\n  !*** ./~/react-router/~/qs/lib/utils.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {// Load modules\\n\\n\\n// Declare internals\\n\\nvar internals = {};\\n\\n\\nexports.arrayToObject = function (source) {\\n\\n    var obj = {};\\n    for (var i = 0, il = source.length; i < il; ++i) {\\n        if (typeof source[i] !== 'undefined') {\\n\\n            obj[i] = source[i];\\n        }\\n    }\\n\\n    return obj;\\n};\\n\\n\\nexports.merge = function (target, source) {\\n\\n    if (!source) {\\n        return target;\\n    }\\n\\n    if (Array.isArray(source)) {\\n        for (var i = 0, il = source.length; i < il; ++i) {\\n            if (typeof source[i] !== 'undefined') {\\n                if (typeof target[i] === 'object') {\\n                    target[i] = exports.merge(target[i], source[i]);\\n                }\\n                else {\\n                    target[i] = source[i];\\n                }\\n            }\\n        }\\n\\n        return target;\\n    }\\n\\n    if (Array.isArray(target)) {\\n        if (typeof source !== 'object') {\\n            target.push(source);\\n            return target;\\n        }\\n        else {\\n            target = exports.arrayToObject(target);\\n        }\\n    }\\n\\n    var keys = Object.keys(source);\\n    for (var k = 0, kl = keys.length; k < kl; ++k) {\\n        var key = keys[k];\\n        var value = source[key];\\n\\n        if (value &&\\n            typeof value === 'object') {\\n\\n            if (!target[key]) {\\n                target[key] = value;\\n            }\\n            else {\\n                target[key] = exports.merge(target[key], value);\\n            }\\n        }\\n        else {\\n            target[key] = value;\\n        }\\n    }\\n\\n    return target;\\n};\\n\\n\\nexports.decode = function (str) {\\n\\n    try {\\n        return decodeURIComponent(str.replace(/\\\\+/g, ' '));\\n    } catch (e) {\\n        return str;\\n    }\\n};\\n\\n\\nexports.compact = function (obj, refs) {\\n\\n    if (typeof obj !== 'object' ||\\n        obj === null) {\\n\\n        return obj;\\n    }\\n\\n    refs = refs || [];\\n    var lookup = refs.indexOf(obj);\\n    if (lookup !== -1) {\\n        return refs[lookup];\\n    }\\n\\n    refs.push(obj);\\n\\n    if (Array.isArray(obj)) {\\n        var compacted = [];\\n\\n        for (var i = 0, l = obj.length; i < l; ++i) {\\n            if (typeof obj[i] !== 'undefined') {\\n                compacted.push(obj[i]);\\n            }\\n        }\\n\\n        return compacted;\\n    }\\n\\n    var keys = Object.keys(obj);\\n    for (var i = 0, il = keys.length; i < il; ++i) {\\n        var key = keys[i];\\n        obj[key] = exports.compact(obj[key], refs);\\n    }\\n\\n    return obj;\\n};\\n\\n\\nexports.isRegExp = function (obj) {\\n    return Object.prototype.toString.call(obj) === '[object RegExp]';\\n};\\n\\n\\nexports.isBuffer = function (obj) {\\n\\n    if (typeof Buffer !== 'undefined') {\\n        return Buffer.isBuffer(obj);\\n    }\\n    else {\\n        return false;\\n    }\\n};\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/buffer/index.js */ 158).Buffer))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/qs/lib/utils.js\\n ** module id = 157\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/qs/lib/utils.js?\");\n\n/***/ },\n/* 158 */\n/*!*******************************************************!*\\\n  !*** (webpack)/~/node-libs-browser/~/buffer/index.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {/*!\\n * The buffer module from node.js, for the browser.\\n *\\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\\n * @license  MIT\\n */\\n\\nvar base64 = __webpack_require__(/*! base64-js */ 159)\\nvar ieee754 = __webpack_require__(/*! ieee754 */ 160)\\nvar isArray = __webpack_require__(/*! is-array */ 161)\\n\\nexports.Buffer = Buffer\\nexports.SlowBuffer = SlowBuffer\\nexports.INSPECT_MAX_BYTES = 50\\nBuffer.poolSize = 8192 // not used by this implementation\\n\\nvar rootParent = {}\\n\\n/**\\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\\n *   === true    Use Uint8Array implementation (fastest)\\n *   === false   Use Object implementation (most compatible, even IE6)\\n *\\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\\n * Opera 11.6+, iOS 4.2+.\\n *\\n * Note:\\n *\\n * - Implementation must support adding new properties to `Uint8Array` instances.\\n *   Firefox 4-29 lacked support, fixed in Firefox 30+.\\n *   See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\\n *\\n *  - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\\n *\\n *  - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\\n *    incorrect length in some situations.\\n *\\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they will\\n * get the Object implementation, which is slower but will work correctly.\\n */\\nBuffer.TYPED_ARRAY_SUPPORT = (function () {\\n  function Foo () {}\\n  try {\\n    var buf = new ArrayBuffer(0)\\n    var arr = new Uint8Array(buf)\\n    arr.foo = function () { return 42 }\\n    arr.constructor = Foo\\n    return arr.foo() === 42 && // typed array instances can be augmented\\n        arr.constructor === Foo && // constructor can be set\\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\\n        new Uint8Array(1).subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\\n  } catch (e) {\\n    return false\\n  }\\n})()\\n\\nfunction kMaxLength () {\\n  return Buffer.TYPED_ARRAY_SUPPORT\\n    ? 0x7fffffff\\n    : 0x3fffffff\\n}\\n\\n/**\\n * Class: Buffer\\n * =============\\n *\\n * The Buffer constructor returns instances of `Uint8Array` that are augmented\\n * with function properties for all the node `Buffer` API functions. We use\\n * `Uint8Array` so that square bracket notation works as expected -- it returns\\n * a single octet.\\n *\\n * By augmenting the instances, we can avoid modifying the `Uint8Array`\\n * prototype.\\n */\\nfunction Buffer (arg) {\\n  if (!(this instanceof Buffer)) {\\n    // Avoid going through an ArgumentsAdaptorTrampoline in the common case.\\n    if (arguments.length > 1) return new Buffer(arg, arguments[1])\\n    return new Buffer(arg)\\n  }\\n\\n  this.length = 0\\n  this.parent = undefined\\n\\n  // Common case.\\n  if (typeof arg === 'number') {\\n    return fromNumber(this, arg)\\n  }\\n\\n  // Slightly less common case.\\n  if (typeof arg === 'string') {\\n    return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')\\n  }\\n\\n  // Unusual.\\n  return fromObject(this, arg)\\n}\\n\\nfunction fromNumber (that, length) {\\n  that = allocate(that, length < 0 ? 0 : checked(length) | 0)\\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\\n    for (var i = 0; i < length; i++) {\\n      that[i] = 0\\n    }\\n  }\\n  return that\\n}\\n\\nfunction fromString (that, string, encoding) {\\n  if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'\\n\\n  // Assumption: byteLength() return value is always < kMaxLength.\\n  var length = byteLength(string, encoding) | 0\\n  that = allocate(that, length)\\n\\n  that.write(string, encoding)\\n  return that\\n}\\n\\nfunction fromObject (that, object) {\\n  if (Buffer.isBuffer(object)) return fromBuffer(that, object)\\n\\n  if (isArray(object)) return fromArray(that, object)\\n\\n  if (object == null) {\\n    throw new TypeError('must start with number, buffer, array or string')\\n  }\\n\\n  if (typeof ArrayBuffer !== 'undefined' && object.buffer instanceof ArrayBuffer) {\\n    return fromTypedArray(that, object)\\n  }\\n\\n  if (object.length) return fromArrayLike(that, object)\\n\\n  return fromJsonObject(that, object)\\n}\\n\\nfunction fromBuffer (that, buffer) {\\n  var length = checked(buffer.length) | 0\\n  that = allocate(that, length)\\n  buffer.copy(that, 0, 0, length)\\n  return that\\n}\\n\\nfunction fromArray (that, array) {\\n  var length = checked(array.length) | 0\\n  that = allocate(that, length)\\n  for (var i = 0; i < length; i += 1) {\\n    that[i] = array[i] & 255\\n  }\\n  return that\\n}\\n\\n// Duplicate of fromArray() to keep fromArray() monomorphic.\\nfunction fromTypedArray (that, array) {\\n  var length = checked(array.length) | 0\\n  that = allocate(that, length)\\n  // Truncating the elements is probably not what people expect from typed\\n  // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior\\n  // of the old Buffer constructor.\\n  for (var i = 0; i < length; i += 1) {\\n    that[i] = array[i] & 255\\n  }\\n  return that\\n}\\n\\nfunction fromArrayLike (that, array) {\\n  var length = checked(array.length) | 0\\n  that = allocate(that, length)\\n  for (var i = 0; i < length; i += 1) {\\n    that[i] = array[i] & 255\\n  }\\n  return that\\n}\\n\\n// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.\\n// Returns a zero-length buffer for inputs that don't conform to the spec.\\nfunction fromJsonObject (that, object) {\\n  var array\\n  var length = 0\\n\\n  if (object.type === 'Buffer' && isArray(object.data)) {\\n    array = object.data\\n    length = checked(array.length) | 0\\n  }\\n  that = allocate(that, length)\\n\\n  for (var i = 0; i < length; i += 1) {\\n    that[i] = array[i] & 255\\n  }\\n  return that\\n}\\n\\nfunction allocate (that, length) {\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    // Return an augmented `Uint8Array` instance, for best performance\\n    that = Buffer._augment(new Uint8Array(length))\\n  } else {\\n    // Fallback: Return an object instance of the Buffer class\\n    that.length = length\\n    that._isBuffer = true\\n  }\\n\\n  var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1\\n  if (fromPool) that.parent = rootParent\\n\\n  return that\\n}\\n\\nfunction checked (length) {\\n  // Note: cannot use `length < kMaxLength` here because that fails when\\n  // length is NaN (which is otherwise coerced to zero.)\\n  if (length >= kMaxLength()) {\\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\\n  }\\n  return length | 0\\n}\\n\\nfunction SlowBuffer (subject, encoding) {\\n  if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)\\n\\n  var buf = new Buffer(subject, encoding)\\n  delete buf.parent\\n  return buf\\n}\\n\\nBuffer.isBuffer = function isBuffer (b) {\\n  return !!(b != null && b._isBuffer)\\n}\\n\\nBuffer.compare = function compare (a, b) {\\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\\n    throw new TypeError('Arguments must be Buffers')\\n  }\\n\\n  if (a === b) return 0\\n\\n  var x = a.length\\n  var y = b.length\\n\\n  var i = 0\\n  var len = Math.min(x, y)\\n  while (i < len) {\\n    if (a[i] !== b[i]) break\\n\\n    ++i\\n  }\\n\\n  if (i !== len) {\\n    x = a[i]\\n    y = b[i]\\n  }\\n\\n  if (x < y) return -1\\n  if (y < x) return 1\\n  return 0\\n}\\n\\nBuffer.isEncoding = function isEncoding (encoding) {\\n  switch (String(encoding).toLowerCase()) {\\n    case 'hex':\\n    case 'utf8':\\n    case 'utf-8':\\n    case 'ascii':\\n    case 'binary':\\n    case 'base64':\\n    case 'raw':\\n    case 'ucs2':\\n    case 'ucs-2':\\n    case 'utf16le':\\n    case 'utf-16le':\\n      return true\\n    default:\\n      return false\\n  }\\n}\\n\\nBuffer.concat = function concat (list, length) {\\n  if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')\\n\\n  if (list.length === 0) {\\n    return new Buffer(0)\\n  } else if (list.length === 1) {\\n    return list[0]\\n  }\\n\\n  var i\\n  if (length === undefined) {\\n    length = 0\\n    for (i = 0; i < list.length; i++) {\\n      length += list[i].length\\n    }\\n  }\\n\\n  var buf = new Buffer(length)\\n  var pos = 0\\n  for (i = 0; i < list.length; i++) {\\n    var item = list[i]\\n    item.copy(buf, pos)\\n    pos += item.length\\n  }\\n  return buf\\n}\\n\\nfunction byteLength (string, encoding) {\\n  if (typeof string !== 'string') string = '' + string\\n\\n  var len = string.length\\n  if (len === 0) return 0\\n\\n  // Use a for loop to avoid recursion\\n  var loweredCase = false\\n  for (;;) {\\n    switch (encoding) {\\n      case 'ascii':\\n      case 'binary':\\n      // Deprecated\\n      case 'raw':\\n      case 'raws':\\n        return len\\n      case 'utf8':\\n      case 'utf-8':\\n        return utf8ToBytes(string).length\\n      case 'ucs2':\\n      case 'ucs-2':\\n      case 'utf16le':\\n      case 'utf-16le':\\n        return len * 2\\n      case 'hex':\\n        return len >>> 1\\n      case 'base64':\\n        return base64ToBytes(string).length\\n      default:\\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\\n        encoding = ('' + encoding).toLowerCase()\\n        loweredCase = true\\n    }\\n  }\\n}\\nBuffer.byteLength = byteLength\\n\\n// pre-set for values that may exist in the future\\nBuffer.prototype.length = undefined\\nBuffer.prototype.parent = undefined\\n\\nfunction slowToString (encoding, start, end) {\\n  var loweredCase = false\\n\\n  start = start | 0\\n  end = end === undefined || end === Infinity ? this.length : end | 0\\n\\n  if (!encoding) encoding = 'utf8'\\n  if (start < 0) start = 0\\n  if (end > this.length) end = this.length\\n  if (end <= start) return ''\\n\\n  while (true) {\\n    switch (encoding) {\\n      case 'hex':\\n        return hexSlice(this, start, end)\\n\\n      case 'utf8':\\n      case 'utf-8':\\n        return utf8Slice(this, start, end)\\n\\n      case 'ascii':\\n        return asciiSlice(this, start, end)\\n\\n      case 'binary':\\n        return binarySlice(this, start, end)\\n\\n      case 'base64':\\n        return base64Slice(this, start, end)\\n\\n      case 'ucs2':\\n      case 'ucs-2':\\n      case 'utf16le':\\n      case 'utf-16le':\\n        return utf16leSlice(this, start, end)\\n\\n      default:\\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\\n        encoding = (encoding + '').toLowerCase()\\n        loweredCase = true\\n    }\\n  }\\n}\\n\\nBuffer.prototype.toString = function toString () {\\n  var length = this.length | 0\\n  if (length === 0) return ''\\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\\n  return slowToString.apply(this, arguments)\\n}\\n\\nBuffer.prototype.equals = function equals (b) {\\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\\n  if (this === b) return true\\n  return Buffer.compare(this, b) === 0\\n}\\n\\nBuffer.prototype.inspect = function inspect () {\\n  var str = ''\\n  var max = exports.INSPECT_MAX_BYTES\\n  if (this.length > 0) {\\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\\n    if (this.length > max) str += ' ... '\\n  }\\n  return '<Buffer ' + str + '>'\\n}\\n\\nBuffer.prototype.compare = function compare (b) {\\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\\n  if (this === b) return 0\\n  return Buffer.compare(this, b)\\n}\\n\\nBuffer.prototype.indexOf = function indexOf (val, byteOffset) {\\n  if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff\\n  else if (byteOffset < -0x80000000) byteOffset = -0x80000000\\n  byteOffset >>= 0\\n\\n  if (this.length === 0) return -1\\n  if (byteOffset >= this.length) return -1\\n\\n  // Negative offsets start from the end of the buffer\\n  if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)\\n\\n  if (typeof val === 'string') {\\n    if (val.length === 0) return -1 // special case: looking for empty string always fails\\n    return String.prototype.indexOf.call(this, val, byteOffset)\\n  }\\n  if (Buffer.isBuffer(val)) {\\n    return arrayIndexOf(this, val, byteOffset)\\n  }\\n  if (typeof val === 'number') {\\n    if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {\\n      return Uint8Array.prototype.indexOf.call(this, val, byteOffset)\\n    }\\n    return arrayIndexOf(this, [ val ], byteOffset)\\n  }\\n\\n  function arrayIndexOf (arr, val, byteOffset) {\\n    var foundIndex = -1\\n    for (var i = 0; byteOffset + i < arr.length; i++) {\\n      if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {\\n        if (foundIndex === -1) foundIndex = i\\n        if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex\\n      } else {\\n        foundIndex = -1\\n      }\\n    }\\n    return -1\\n  }\\n\\n  throw new TypeError('val must be string, number or Buffer')\\n}\\n\\n// `get` will be removed in Node 0.13+\\nBuffer.prototype.get = function get (offset) {\\n  console.log('.get() is deprecated. Access using array indexes instead.')\\n  return this.readUInt8(offset)\\n}\\n\\n// `set` will be removed in Node 0.13+\\nBuffer.prototype.set = function set (v, offset) {\\n  console.log('.set() is deprecated. Access using array indexes instead.')\\n  return this.writeUInt8(v, offset)\\n}\\n\\nfunction hexWrite (buf, string, offset, length) {\\n  offset = Number(offset) || 0\\n  var remaining = buf.length - offset\\n  if (!length) {\\n    length = remaining\\n  } else {\\n    length = Number(length)\\n    if (length > remaining) {\\n      length = remaining\\n    }\\n  }\\n\\n  // must be an even number of digits\\n  var strLen = string.length\\n  if (strLen % 2 !== 0) throw new Error('Invalid hex string')\\n\\n  if (length > strLen / 2) {\\n    length = strLen / 2\\n  }\\n  for (var i = 0; i < length; i++) {\\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\\n    if (isNaN(parsed)) throw new Error('Invalid hex string')\\n    buf[offset + i] = parsed\\n  }\\n  return i\\n}\\n\\nfunction utf8Write (buf, string, offset, length) {\\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\\n}\\n\\nfunction asciiWrite (buf, string, offset, length) {\\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\\n}\\n\\nfunction binaryWrite (buf, string, offset, length) {\\n  return asciiWrite(buf, string, offset, length)\\n}\\n\\nfunction base64Write (buf, string, offset, length) {\\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\\n}\\n\\nfunction ucs2Write (buf, string, offset, length) {\\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\\n}\\n\\nBuffer.prototype.write = function write (string, offset, length, encoding) {\\n  // Buffer#write(string)\\n  if (offset === undefined) {\\n    encoding = 'utf8'\\n    length = this.length\\n    offset = 0\\n  // Buffer#write(string, encoding)\\n  } else if (length === undefined && typeof offset === 'string') {\\n    encoding = offset\\n    length = this.length\\n    offset = 0\\n  // Buffer#write(string, offset[, length][, encoding])\\n  } else if (isFinite(offset)) {\\n    offset = offset | 0\\n    if (isFinite(length)) {\\n      length = length | 0\\n      if (encoding === undefined) encoding = 'utf8'\\n    } else {\\n      encoding = length\\n      length = undefined\\n    }\\n  // legacy write(string, encoding, offset, length) - remove in v0.13\\n  } else {\\n    var swap = encoding\\n    encoding = offset\\n    offset = length | 0\\n    length = swap\\n  }\\n\\n  var remaining = this.length - offset\\n  if (length === undefined || length > remaining) length = remaining\\n\\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\\n    throw new RangeError('attempt to write outside buffer bounds')\\n  }\\n\\n  if (!encoding) encoding = 'utf8'\\n\\n  var loweredCase = false\\n  for (;;) {\\n    switch (encoding) {\\n      case 'hex':\\n        return hexWrite(this, string, offset, length)\\n\\n      case 'utf8':\\n      case 'utf-8':\\n        return utf8Write(this, string, offset, length)\\n\\n      case 'ascii':\\n        return asciiWrite(this, string, offset, length)\\n\\n      case 'binary':\\n        return binaryWrite(this, string, offset, length)\\n\\n      case 'base64':\\n        // Warning: maxLength not taken into account in base64Write\\n        return base64Write(this, string, offset, length)\\n\\n      case 'ucs2':\\n      case 'ucs-2':\\n      case 'utf16le':\\n      case 'utf-16le':\\n        return ucs2Write(this, string, offset, length)\\n\\n      default:\\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\\n        encoding = ('' + encoding).toLowerCase()\\n        loweredCase = true\\n    }\\n  }\\n}\\n\\nBuffer.prototype.toJSON = function toJSON () {\\n  return {\\n    type: 'Buffer',\\n    data: Array.prototype.slice.call(this._arr || this, 0)\\n  }\\n}\\n\\nfunction base64Slice (buf, start, end) {\\n  if (start === 0 && end === buf.length) {\\n    return base64.fromByteArray(buf)\\n  } else {\\n    return base64.fromByteArray(buf.slice(start, end))\\n  }\\n}\\n\\nfunction utf8Slice (buf, start, end) {\\n  var res = ''\\n  var tmp = ''\\n  end = Math.min(buf.length, end)\\n\\n  for (var i = start; i < end; i++) {\\n    if (buf[i] <= 0x7F) {\\n      res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i])\\n      tmp = ''\\n    } else {\\n      tmp += '%' + buf[i].toString(16)\\n    }\\n  }\\n\\n  return res + decodeUtf8Char(tmp)\\n}\\n\\nfunction asciiSlice (buf, start, end) {\\n  var ret = ''\\n  end = Math.min(buf.length, end)\\n\\n  for (var i = start; i < end; i++) {\\n    ret += String.fromCharCode(buf[i] & 0x7F)\\n  }\\n  return ret\\n}\\n\\nfunction binarySlice (buf, start, end) {\\n  var ret = ''\\n  end = Math.min(buf.length, end)\\n\\n  for (var i = start; i < end; i++) {\\n    ret += String.fromCharCode(buf[i])\\n  }\\n  return ret\\n}\\n\\nfunction hexSlice (buf, start, end) {\\n  var len = buf.length\\n\\n  if (!start || start < 0) start = 0\\n  if (!end || end < 0 || end > len) end = len\\n\\n  var out = ''\\n  for (var i = start; i < end; i++) {\\n    out += toHex(buf[i])\\n  }\\n  return out\\n}\\n\\nfunction utf16leSlice (buf, start, end) {\\n  var bytes = buf.slice(start, end)\\n  var res = ''\\n  for (var i = 0; i < bytes.length; i += 2) {\\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\\n  }\\n  return res\\n}\\n\\nBuffer.prototype.slice = function slice (start, end) {\\n  var len = this.length\\n  start = ~~start\\n  end = end === undefined ? len : ~~end\\n\\n  if (start < 0) {\\n    start += len\\n    if (start < 0) start = 0\\n  } else if (start > len) {\\n    start = len\\n  }\\n\\n  if (end < 0) {\\n    end += len\\n    if (end < 0) end = 0\\n  } else if (end > len) {\\n    end = len\\n  }\\n\\n  if (end < start) end = start\\n\\n  var newBuf\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    newBuf = Buffer._augment(this.subarray(start, end))\\n  } else {\\n    var sliceLen = end - start\\n    newBuf = new Buffer(sliceLen, undefined)\\n    for (var i = 0; i < sliceLen; i++) {\\n      newBuf[i] = this[i + start]\\n    }\\n  }\\n\\n  if (newBuf.length) newBuf.parent = this.parent || this\\n\\n  return newBuf\\n}\\n\\n/*\\n * Need to make sure that buffer isn't trying to write out of bounds.\\n */\\nfunction checkOffset (offset, ext, length) {\\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\\n}\\n\\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\\n  offset = offset | 0\\n  byteLength = byteLength | 0\\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\\n\\n  var val = this[offset]\\n  var mul = 1\\n  var i = 0\\n  while (++i < byteLength && (mul *= 0x100)) {\\n    val += this[offset + i] * mul\\n  }\\n\\n  return val\\n}\\n\\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\\n  offset = offset | 0\\n  byteLength = byteLength | 0\\n  if (!noAssert) {\\n    checkOffset(offset, byteLength, this.length)\\n  }\\n\\n  var val = this[offset + --byteLength]\\n  var mul = 1\\n  while (byteLength > 0 && (mul *= 0x100)) {\\n    val += this[offset + --byteLength] * mul\\n  }\\n\\n  return val\\n}\\n\\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 1, this.length)\\n  return this[offset]\\n}\\n\\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 2, this.length)\\n  return this[offset] | (this[offset + 1] << 8)\\n}\\n\\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 2, this.length)\\n  return (this[offset] << 8) | this[offset + 1]\\n}\\n\\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 4, this.length)\\n\\n  return ((this[offset]) |\\n      (this[offset + 1] << 8) |\\n      (this[offset + 2] << 16)) +\\n      (this[offset + 3] * 0x1000000)\\n}\\n\\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 4, this.length)\\n\\n  return (this[offset] * 0x1000000) +\\n    ((this[offset + 1] << 16) |\\n    (this[offset + 2] << 8) |\\n    this[offset + 3])\\n}\\n\\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\\n  offset = offset | 0\\n  byteLength = byteLength | 0\\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\\n\\n  var val = this[offset]\\n  var mul = 1\\n  var i = 0\\n  while (++i < byteLength && (mul *= 0x100)) {\\n    val += this[offset + i] * mul\\n  }\\n  mul *= 0x80\\n\\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\\n\\n  return val\\n}\\n\\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\\n  offset = offset | 0\\n  byteLength = byteLength | 0\\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\\n\\n  var i = byteLength\\n  var mul = 1\\n  var val = this[offset + --i]\\n  while (i > 0 && (mul *= 0x100)) {\\n    val += this[offset + --i] * mul\\n  }\\n  mul *= 0x80\\n\\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\\n\\n  return val\\n}\\n\\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 1, this.length)\\n  if (!(this[offset] & 0x80)) return (this[offset])\\n  return ((0xff - this[offset] + 1) * -1)\\n}\\n\\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 2, this.length)\\n  var val = this[offset] | (this[offset + 1] << 8)\\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\\n}\\n\\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 2, this.length)\\n  var val = this[offset + 1] | (this[offset] << 8)\\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\\n}\\n\\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 4, this.length)\\n\\n  return (this[offset]) |\\n    (this[offset + 1] << 8) |\\n    (this[offset + 2] << 16) |\\n    (this[offset + 3] << 24)\\n}\\n\\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 4, this.length)\\n\\n  return (this[offset] << 24) |\\n    (this[offset + 1] << 16) |\\n    (this[offset + 2] << 8) |\\n    (this[offset + 3])\\n}\\n\\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 4, this.length)\\n  return ieee754.read(this, offset, true, 23, 4)\\n}\\n\\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 4, this.length)\\n  return ieee754.read(this, offset, false, 23, 4)\\n}\\n\\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 8, this.length)\\n  return ieee754.read(this, offset, true, 52, 8)\\n}\\n\\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 8, this.length)\\n  return ieee754.read(this, offset, false, 52, 8)\\n}\\n\\nfunction checkInt (buf, value, offset, ext, max, min) {\\n  if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')\\n  if (value > max || value < min) throw new RangeError('value is out of bounds')\\n  if (offset + ext > buf.length) throw new RangeError('index out of range')\\n}\\n\\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  byteLength = byteLength | 0\\n  if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\\n\\n  var mul = 1\\n  var i = 0\\n  this[offset] = value & 0xFF\\n  while (++i < byteLength && (mul *= 0x100)) {\\n    this[offset + i] = (value / mul) & 0xFF\\n  }\\n\\n  return offset + byteLength\\n}\\n\\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  byteLength = byteLength | 0\\n  if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\\n\\n  var i = byteLength - 1\\n  var mul = 1\\n  this[offset + i] = value & 0xFF\\n  while (--i >= 0 && (mul *= 0x100)) {\\n    this[offset + i] = (value / mul) & 0xFF\\n  }\\n\\n  return offset + byteLength\\n}\\n\\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\\n  this[offset] = value\\n  return offset + 1\\n}\\n\\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\\n  if (value < 0) value = 0xffff + value + 1\\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {\\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\\n      (littleEndian ? i : 1 - i) * 8\\n  }\\n}\\n\\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    this[offset] = value\\n    this[offset + 1] = (value >>> 8)\\n  } else {\\n    objectWriteUInt16(this, value, offset, true)\\n  }\\n  return offset + 2\\n}\\n\\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    this[offset] = (value >>> 8)\\n    this[offset + 1] = value\\n  } else {\\n    objectWriteUInt16(this, value, offset, false)\\n  }\\n  return offset + 2\\n}\\n\\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\\n  if (value < 0) value = 0xffffffff + value + 1\\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {\\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\\n  }\\n}\\n\\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    this[offset + 3] = (value >>> 24)\\n    this[offset + 2] = (value >>> 16)\\n    this[offset + 1] = (value >>> 8)\\n    this[offset] = value\\n  } else {\\n    objectWriteUInt32(this, value, offset, true)\\n  }\\n  return offset + 4\\n}\\n\\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    this[offset] = (value >>> 24)\\n    this[offset + 1] = (value >>> 16)\\n    this[offset + 2] = (value >>> 8)\\n    this[offset + 3] = value\\n  } else {\\n    objectWriteUInt32(this, value, offset, false)\\n  }\\n  return offset + 4\\n}\\n\\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) {\\n    var limit = Math.pow(2, 8 * byteLength - 1)\\n\\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\\n  }\\n\\n  var i = 0\\n  var mul = 1\\n  var sub = value < 0 ? 1 : 0\\n  this[offset] = value & 0xFF\\n  while (++i < byteLength && (mul *= 0x100)) {\\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\\n  }\\n\\n  return offset + byteLength\\n}\\n\\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) {\\n    var limit = Math.pow(2, 8 * byteLength - 1)\\n\\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\\n  }\\n\\n  var i = byteLength - 1\\n  var mul = 1\\n  var sub = value < 0 ? 1 : 0\\n  this[offset + i] = value & 0xFF\\n  while (--i >= 0 && (mul *= 0x100)) {\\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\\n  }\\n\\n  return offset + byteLength\\n}\\n\\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\\n  if (value < 0) value = 0xff + value + 1\\n  this[offset] = value\\n  return offset + 1\\n}\\n\\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    this[offset] = value\\n    this[offset + 1] = (value >>> 8)\\n  } else {\\n    objectWriteUInt16(this, value, offset, true)\\n  }\\n  return offset + 2\\n}\\n\\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    this[offset] = (value >>> 8)\\n    this[offset + 1] = value\\n  } else {\\n    objectWriteUInt16(this, value, offset, false)\\n  }\\n  return offset + 2\\n}\\n\\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    this[offset] = value\\n    this[offset + 1] = (value >>> 8)\\n    this[offset + 2] = (value >>> 16)\\n    this[offset + 3] = (value >>> 24)\\n  } else {\\n    objectWriteUInt32(this, value, offset, true)\\n  }\\n  return offset + 4\\n}\\n\\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\\n  if (value < 0) value = 0xffffffff + value + 1\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    this[offset] = (value >>> 24)\\n    this[offset + 1] = (value >>> 16)\\n    this[offset + 2] = (value >>> 8)\\n    this[offset + 3] = value\\n  } else {\\n    objectWriteUInt32(this, value, offset, false)\\n  }\\n  return offset + 4\\n}\\n\\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\\n  if (value > max || value < min) throw new RangeError('value is out of bounds')\\n  if (offset + ext > buf.length) throw new RangeError('index out of range')\\n  if (offset < 0) throw new RangeError('index out of range')\\n}\\n\\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\\n  if (!noAssert) {\\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\\n  }\\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\\n  return offset + 4\\n}\\n\\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\\n  return writeFloat(this, value, offset, true, noAssert)\\n}\\n\\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\\n  return writeFloat(this, value, offset, false, noAssert)\\n}\\n\\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\\n  if (!noAssert) {\\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\\n  }\\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\\n  return offset + 8\\n}\\n\\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\\n  return writeDouble(this, value, offset, true, noAssert)\\n}\\n\\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\\n  return writeDouble(this, value, offset, false, noAssert)\\n}\\n\\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\\n  if (!start) start = 0\\n  if (!end && end !== 0) end = this.length\\n  if (targetStart >= target.length) targetStart = target.length\\n  if (!targetStart) targetStart = 0\\n  if (end > 0 && end < start) end = start\\n\\n  // Copy 0 bytes; we're done\\n  if (end === start) return 0\\n  if (target.length === 0 || this.length === 0) return 0\\n\\n  // Fatal error conditions\\n  if (targetStart < 0) {\\n    throw new RangeError('targetStart out of bounds')\\n  }\\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\\n\\n  // Are we oob?\\n  if (end > this.length) end = this.length\\n  if (target.length - targetStart < end - start) {\\n    end = target.length - targetStart + start\\n  }\\n\\n  var len = end - start\\n\\n  if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\\n    for (var i = 0; i < len; i++) {\\n      target[i + targetStart] = this[i + start]\\n    }\\n  } else {\\n    target._set(this.subarray(start, start + len), targetStart)\\n  }\\n\\n  return len\\n}\\n\\n// fill(value, start=0, end=buffer.length)\\nBuffer.prototype.fill = function fill (value, start, end) {\\n  if (!value) value = 0\\n  if (!start) start = 0\\n  if (!end) end = this.length\\n\\n  if (end < start) throw new RangeError('end < start')\\n\\n  // Fill 0 bytes; we're done\\n  if (end === start) return\\n  if (this.length === 0) return\\n\\n  if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')\\n  if (end < 0 || end > this.length) throw new RangeError('end out of bounds')\\n\\n  var i\\n  if (typeof value === 'number') {\\n    for (i = start; i < end; i++) {\\n      this[i] = value\\n    }\\n  } else {\\n    var bytes = utf8ToBytes(value.toString())\\n    var len = bytes.length\\n    for (i = start; i < end; i++) {\\n      this[i] = bytes[i % len]\\n    }\\n  }\\n\\n  return this\\n}\\n\\n/**\\n * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.\\n * Added in Node 0.12. Only available in browsers that support ArrayBuffer.\\n */\\nBuffer.prototype.toArrayBuffer = function toArrayBuffer () {\\n  if (typeof Uint8Array !== 'undefined') {\\n    if (Buffer.TYPED_ARRAY_SUPPORT) {\\n      return (new Buffer(this)).buffer\\n    } else {\\n      var buf = new Uint8Array(this.length)\\n      for (var i = 0, len = buf.length; i < len; i += 1) {\\n        buf[i] = this[i]\\n      }\\n      return buf.buffer\\n    }\\n  } else {\\n    throw new TypeError('Buffer.toArrayBuffer not supported in this browser')\\n  }\\n}\\n\\n// HELPER FUNCTIONS\\n// ================\\n\\nvar BP = Buffer.prototype\\n\\n/**\\n * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods\\n */\\nBuffer._augment = function _augment (arr) {\\n  arr.constructor = Buffer\\n  arr._isBuffer = true\\n\\n  // save reference to original Uint8Array set method before overwriting\\n  arr._set = arr.set\\n\\n  // deprecated, will be removed in node 0.13+\\n  arr.get = BP.get\\n  arr.set = BP.set\\n\\n  arr.write = BP.write\\n  arr.toString = BP.toString\\n  arr.toLocaleString = BP.toString\\n  arr.toJSON = BP.toJSON\\n  arr.equals = BP.equals\\n  arr.compare = BP.compare\\n  arr.indexOf = BP.indexOf\\n  arr.copy = BP.copy\\n  arr.slice = BP.slice\\n  arr.readUIntLE = BP.readUIntLE\\n  arr.readUIntBE = BP.readUIntBE\\n  arr.readUInt8 = BP.readUInt8\\n  arr.readUInt16LE = BP.readUInt16LE\\n  arr.readUInt16BE = BP.readUInt16BE\\n  arr.readUInt32LE = BP.readUInt32LE\\n  arr.readUInt32BE = BP.readUInt32BE\\n  arr.readIntLE = BP.readIntLE\\n  arr.readIntBE = BP.readIntBE\\n  arr.readInt8 = BP.readInt8\\n  arr.readInt16LE = BP.readInt16LE\\n  arr.readInt16BE = BP.readInt16BE\\n  arr.readInt32LE = BP.readInt32LE\\n  arr.readInt32BE = BP.readInt32BE\\n  arr.readFloatLE = BP.readFloatLE\\n  arr.readFloatBE = BP.readFloatBE\\n  arr.readDoubleLE = BP.readDoubleLE\\n  arr.readDoubleBE = BP.readDoubleBE\\n  arr.writeUInt8 = BP.writeUInt8\\n  arr.writeUIntLE = BP.writeUIntLE\\n  arr.writeUIntBE = BP.writeUIntBE\\n  arr.writeUInt16LE = BP.writeUInt16LE\\n  arr.writeUInt16BE = BP.writeUInt16BE\\n  arr.writeUInt32LE = BP.writeUInt32LE\\n  arr.writeUInt32BE = BP.writeUInt32BE\\n  arr.writeIntLE = BP.writeIntLE\\n  arr.writeIntBE = BP.writeIntBE\\n  arr.writeInt8 = BP.writeInt8\\n  arr.writeInt16LE = BP.writeInt16LE\\n  arr.writeInt16BE = BP.writeInt16BE\\n  arr.writeInt32LE = BP.writeInt32LE\\n  arr.writeInt32BE = BP.writeInt32BE\\n  arr.writeFloatLE = BP.writeFloatLE\\n  arr.writeFloatBE = BP.writeFloatBE\\n  arr.writeDoubleLE = BP.writeDoubleLE\\n  arr.writeDoubleBE = BP.writeDoubleBE\\n  arr.fill = BP.fill\\n  arr.inspect = BP.inspect\\n  arr.toArrayBuffer = BP.toArrayBuffer\\n\\n  return arr\\n}\\n\\nvar INVALID_BASE64_RE = /[^+\\\\/0-9A-z\\\\-]/g\\n\\nfunction base64clean (str) {\\n  // Node strips out invalid characters like \\\\n and \\\\t from the string, base64-js does not\\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\\n  // Node converts strings with length < 2 to ''\\n  if (str.length < 2) return ''\\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\\n  while (str.length % 4 !== 0) {\\n    str = str + '='\\n  }\\n  return str\\n}\\n\\nfunction stringtrim (str) {\\n  if (str.trim) return str.trim()\\n  return str.replace(/^\\\\s+|\\\\s+$/g, '')\\n}\\n\\nfunction toHex (n) {\\n  if (n < 16) return '0' + n.toString(16)\\n  return n.toString(16)\\n}\\n\\nfunction utf8ToBytes (string, units) {\\n  units = units || Infinity\\n  var codePoint\\n  var length = string.length\\n  var leadSurrogate = null\\n  var bytes = []\\n  var i = 0\\n\\n  for (; i < length; i++) {\\n    codePoint = string.charCodeAt(i)\\n\\n    // is surrogate component\\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\\n      // last char was a lead\\n      if (leadSurrogate) {\\n        // 2 leads in a row\\n        if (codePoint < 0xDC00) {\\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\\n          leadSurrogate = codePoint\\n          continue\\n        } else {\\n          // valid surrogate pair\\n          codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000\\n          leadSurrogate = null\\n        }\\n      } else {\\n        // no lead yet\\n\\n        if (codePoint > 0xDBFF) {\\n          // unexpected trail\\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\\n          continue\\n        } else if (i + 1 === length) {\\n          // unpaired lead\\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\\n          continue\\n        } else {\\n          // valid lead\\n          leadSurrogate = codePoint\\n          continue\\n        }\\n      }\\n    } else if (leadSurrogate) {\\n      // valid bmp char, but last char was a lead\\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\\n      leadSurrogate = null\\n    }\\n\\n    // encode utf8\\n    if (codePoint < 0x80) {\\n      if ((units -= 1) < 0) break\\n      bytes.push(codePoint)\\n    } else if (codePoint < 0x800) {\\n      if ((units -= 2) < 0) break\\n      bytes.push(\\n        codePoint >> 0x6 | 0xC0,\\n        codePoint & 0x3F | 0x80\\n      )\\n    } else if (codePoint < 0x10000) {\\n      if ((units -= 3) < 0) break\\n      bytes.push(\\n        codePoint >> 0xC | 0xE0,\\n        codePoint >> 0x6 & 0x3F | 0x80,\\n        codePoint & 0x3F | 0x80\\n      )\\n    } else if (codePoint < 0x200000) {\\n      if ((units -= 4) < 0) break\\n      bytes.push(\\n        codePoint >> 0x12 | 0xF0,\\n        codePoint >> 0xC & 0x3F | 0x80,\\n        codePoint >> 0x6 & 0x3F | 0x80,\\n        codePoint & 0x3F | 0x80\\n      )\\n    } else {\\n      throw new Error('Invalid code point')\\n    }\\n  }\\n\\n  return bytes\\n}\\n\\nfunction asciiToBytes (str) {\\n  var byteArray = []\\n  for (var i = 0; i < str.length; i++) {\\n    // Node's code seems to be doing this and not & 0x7F..\\n    byteArray.push(str.charCodeAt(i) & 0xFF)\\n  }\\n  return byteArray\\n}\\n\\nfunction utf16leToBytes (str, units) {\\n  var c, hi, lo\\n  var byteArray = []\\n  for (var i = 0; i < str.length; i++) {\\n    if ((units -= 2) < 0) break\\n\\n    c = str.charCodeAt(i)\\n    hi = c >> 8\\n    lo = c % 256\\n    byteArray.push(lo)\\n    byteArray.push(hi)\\n  }\\n\\n  return byteArray\\n}\\n\\nfunction base64ToBytes (str) {\\n  return base64.toByteArray(base64clean(str))\\n}\\n\\nfunction blitBuffer (src, dst, offset, length) {\\n  for (var i = 0; i < length; i++) {\\n    if ((i + offset >= dst.length) || (i >= src.length)) break\\n    dst[i + offset] = src[i]\\n  }\\n  return i\\n}\\n\\nfunction decodeUtf8Char (str) {\\n  try {\\n    return decodeURIComponent(str)\\n  } catch (err) {\\n    return String.fromCharCode(0xFFFD) // UTF 8 invalid char\\n  }\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/buffer/index.js */ 158).Buffer))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** (webpack)/~/node-libs-browser/~/buffer/index.js\\n ** module id = 158\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///(webpack)/~/node-libs-browser/~/buffer/index.js?\");\n\n/***/ },\n/* 159 */\n/*!*********************************************************************!*\\\n  !*** (webpack)/~/node-libs-browser/~/buffer/~/base64-js/lib/b64.js ***!\n  \\*********************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\\n\\n;(function (exports) {\\n\\t'use strict';\\n\\n  var Arr = (typeof Uint8Array !== 'undefined')\\n    ? Uint8Array\\n    : Array\\n\\n\\tvar PLUS   = '+'.charCodeAt(0)\\n\\tvar SLASH  = '/'.charCodeAt(0)\\n\\tvar NUMBER = '0'.charCodeAt(0)\\n\\tvar LOWER  = 'a'.charCodeAt(0)\\n\\tvar UPPER  = 'A'.charCodeAt(0)\\n\\tvar PLUS_URL_SAFE = '-'.charCodeAt(0)\\n\\tvar SLASH_URL_SAFE = '_'.charCodeAt(0)\\n\\n\\tfunction decode (elt) {\\n\\t\\tvar code = elt.charCodeAt(0)\\n\\t\\tif (code === PLUS ||\\n\\t\\t    code === PLUS_URL_SAFE)\\n\\t\\t\\treturn 62 // '+'\\n\\t\\tif (code === SLASH ||\\n\\t\\t    code === SLASH_URL_SAFE)\\n\\t\\t\\treturn 63 // '/'\\n\\t\\tif (code < NUMBER)\\n\\t\\t\\treturn -1 //no match\\n\\t\\tif (code < NUMBER + 10)\\n\\t\\t\\treturn code - NUMBER + 26 + 26\\n\\t\\tif (code < UPPER + 26)\\n\\t\\t\\treturn code - UPPER\\n\\t\\tif (code < LOWER + 26)\\n\\t\\t\\treturn code - LOWER + 26\\n\\t}\\n\\n\\tfunction b64ToByteArray (b64) {\\n\\t\\tvar i, j, l, tmp, placeHolders, arr\\n\\n\\t\\tif (b64.length % 4 > 0) {\\n\\t\\t\\tthrow new Error('Invalid string. Length must be a multiple of 4')\\n\\t\\t}\\n\\n\\t\\t// the number of equal signs (place holders)\\n\\t\\t// if there are two placeholders, than the two characters before it\\n\\t\\t// represent one byte\\n\\t\\t// if there is only one, then the three characters before it represent 2 bytes\\n\\t\\t// this is just a cheap hack to not do indexOf twice\\n\\t\\tvar len = b64.length\\n\\t\\tplaceHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0\\n\\n\\t\\t// base64 is 4/3 + up to two characters of the original data\\n\\t\\tarr = new Arr(b64.length * 3 / 4 - placeHolders)\\n\\n\\t\\t// if there are placeholders, only get up to the last complete 4 chars\\n\\t\\tl = placeHolders > 0 ? b64.length - 4 : b64.length\\n\\n\\t\\tvar L = 0\\n\\n\\t\\tfunction push (v) {\\n\\t\\t\\tarr[L++] = v\\n\\t\\t}\\n\\n\\t\\tfor (i = 0, j = 0; i < l; i += 4, j += 3) {\\n\\t\\t\\ttmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))\\n\\t\\t\\tpush((tmp & 0xFF0000) >> 16)\\n\\t\\t\\tpush((tmp & 0xFF00) >> 8)\\n\\t\\t\\tpush(tmp & 0xFF)\\n\\t\\t}\\n\\n\\t\\tif (placeHolders === 2) {\\n\\t\\t\\ttmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)\\n\\t\\t\\tpush(tmp & 0xFF)\\n\\t\\t} else if (placeHolders === 1) {\\n\\t\\t\\ttmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)\\n\\t\\t\\tpush((tmp >> 8) & 0xFF)\\n\\t\\t\\tpush(tmp & 0xFF)\\n\\t\\t}\\n\\n\\t\\treturn arr\\n\\t}\\n\\n\\tfunction uint8ToBase64 (uint8) {\\n\\t\\tvar i,\\n\\t\\t\\textraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes\\n\\t\\t\\toutput = \\\"\\\",\\n\\t\\t\\ttemp, length\\n\\n\\t\\tfunction encode (num) {\\n\\t\\t\\treturn lookup.charAt(num)\\n\\t\\t}\\n\\n\\t\\tfunction tripletToBase64 (num) {\\n\\t\\t\\treturn encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)\\n\\t\\t}\\n\\n\\t\\t// go through the array every three bytes, we'll deal with trailing stuff later\\n\\t\\tfor (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {\\n\\t\\t\\ttemp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\\n\\t\\t\\toutput += tripletToBase64(temp)\\n\\t\\t}\\n\\n\\t\\t// pad the end with zeros, but make sure to not forget the extra bytes\\n\\t\\tswitch (extraBytes) {\\n\\t\\t\\tcase 1:\\n\\t\\t\\t\\ttemp = uint8[uint8.length - 1]\\n\\t\\t\\t\\toutput += encode(temp >> 2)\\n\\t\\t\\t\\toutput += encode((temp << 4) & 0x3F)\\n\\t\\t\\t\\toutput += '=='\\n\\t\\t\\t\\tbreak\\n\\t\\t\\tcase 2:\\n\\t\\t\\t\\ttemp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])\\n\\t\\t\\t\\toutput += encode(temp >> 10)\\n\\t\\t\\t\\toutput += encode((temp >> 4) & 0x3F)\\n\\t\\t\\t\\toutput += encode((temp << 2) & 0x3F)\\n\\t\\t\\t\\toutput += '='\\n\\t\\t\\t\\tbreak\\n\\t\\t}\\n\\n\\t\\treturn output\\n\\t}\\n\\n\\texports.toByteArray = b64ToByteArray\\n\\texports.fromByteArray = uint8ToBase64\\n}( false ? (this.base64js = {}) : exports))\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** (webpack)/~/node-libs-browser/~/buffer/~/base64-js/lib/b64.js\\n ** module id = 159\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///(webpack)/~/node-libs-browser/~/buffer/~/base64-js/lib/b64.js?\");\n\n/***/ },\n/* 160 */\n/*!*****************************************************************!*\\\n  !*** (webpack)/~/node-libs-browser/~/buffer/~/ieee754/index.js ***!\n  \\*****************************************************************/\n/***/ function(module, exports) {\n\n\teval(\"exports.read = function (buffer, offset, isLE, mLen, nBytes) {\\n  var e, m\\n  var eLen = nBytes * 8 - mLen - 1\\n  var eMax = (1 << eLen) - 1\\n  var eBias = eMax >> 1\\n  var nBits = -7\\n  var i = isLE ? (nBytes - 1) : 0\\n  var d = isLE ? -1 : 1\\n  var s = buffer[offset + i]\\n\\n  i += d\\n\\n  e = s & ((1 << (-nBits)) - 1)\\n  s >>= (-nBits)\\n  nBits += eLen\\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\\n\\n  m = e & ((1 << (-nBits)) - 1)\\n  e >>= (-nBits)\\n  nBits += mLen\\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\\n\\n  if (e === 0) {\\n    e = 1 - eBias\\n  } else if (e === eMax) {\\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\\n  } else {\\n    m = m + Math.pow(2, mLen)\\n    e = e - eBias\\n  }\\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\\n}\\n\\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\\n  var e, m, c\\n  var eLen = nBytes * 8 - mLen - 1\\n  var eMax = (1 << eLen) - 1\\n  var eBias = eMax >> 1\\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\\n  var i = isLE ? 0 : (nBytes - 1)\\n  var d = isLE ? 1 : -1\\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\\n\\n  value = Math.abs(value)\\n\\n  if (isNaN(value) || value === Infinity) {\\n    m = isNaN(value) ? 1 : 0\\n    e = eMax\\n  } else {\\n    e = Math.floor(Math.log(value) / Math.LN2)\\n    if (value * (c = Math.pow(2, -e)) < 1) {\\n      e--\\n      c *= 2\\n    }\\n    if (e + eBias >= 1) {\\n      value += rt / c\\n    } else {\\n      value += rt * Math.pow(2, 1 - eBias)\\n    }\\n    if (value * c >= 2) {\\n      e++\\n      c /= 2\\n    }\\n\\n    if (e + eBias >= eMax) {\\n      m = 0\\n      e = eMax\\n    } else if (e + eBias >= 1) {\\n      m = (value * c - 1) * Math.pow(2, mLen)\\n      e = e + eBias\\n    } else {\\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\\n      e = 0\\n    }\\n  }\\n\\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\\n\\n  e = (e << mLen) | m\\n  eLen += mLen\\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\\n\\n  buffer[offset + i - d] |= s * 128\\n}\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** (webpack)/~/node-libs-browser/~/buffer/~/ieee754/index.js\\n ** module id = 160\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///(webpack)/~/node-libs-browser/~/buffer/~/ieee754/index.js?\");\n\n/***/ },\n/* 161 */\n/*!******************************************************************!*\\\n  !*** (webpack)/~/node-libs-browser/~/buffer/~/is-array/index.js ***!\n  \\******************************************************************/\n/***/ function(module, exports) {\n\n\teval(\"\\n/**\\n * isArray\\n */\\n\\nvar isArray = Array.isArray;\\n\\n/**\\n * toString\\n */\\n\\nvar str = Object.prototype.toString;\\n\\n/**\\n * Whether or not the given `val`\\n * is an array.\\n *\\n * example:\\n *\\n *        isArray([]);\\n *        // > true\\n *        isArray(arguments);\\n *        // > false\\n *        isArray('');\\n *        // > false\\n *\\n * @param {mixed} val\\n * @return {bool}\\n */\\n\\nmodule.exports = isArray || function (val) {\\n  return !! val && '[object Array]' == str.call(val);\\n};\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** (webpack)/~/node-libs-browser/~/buffer/~/is-array/index.js\\n ** module id = 161\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///(webpack)/~/node-libs-browser/~/buffer/~/is-array/index.js?\");\n\n/***/ },\n/* 162 */\n/*!**************************************!*\\\n  !*** ./~/react-router/~/qs/index.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"module.exports = __webpack_require__(/*! ./lib */ 163);\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/qs/index.js\\n ** module id = 162\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/qs/index.js?\");\n\n/***/ },\n/* 163 */\n/*!******************************************!*\\\n  !*** ./~/react-router/~/qs/lib/index.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// Load modules\\n\\nvar Stringify = __webpack_require__(/*! ./stringify */ 164);\\nvar Parse = __webpack_require__(/*! ./parse */ 165);\\n\\n\\n// Declare internals\\n\\nvar internals = {};\\n\\n\\nmodule.exports = {\\n    stringify: Stringify,\\n    parse: Parse\\n};\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/qs/lib/index.js\\n ** module id = 163\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/qs/lib/index.js?\");\n\n/***/ },\n/* 164 */\n/*!**********************************************!*\\\n  !*** ./~/react-router/~/qs/lib/stringify.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// Load modules\\n\\nvar Utils = __webpack_require__(/*! ./utils */ 157);\\n\\n\\n// Declare internals\\n\\nvar internals = {\\n    delimiter: '&'\\n};\\n\\n\\ninternals.stringify = function (obj, prefix) {\\n\\n    if (Utils.isBuffer(obj)) {\\n        obj = obj.toString();\\n    }\\n    else if (obj instanceof Date) {\\n        obj = obj.toISOString();\\n    }\\n    else if (obj === null) {\\n        obj = '';\\n    }\\n\\n    if (typeof obj === 'string' ||\\n        typeof obj === 'number' ||\\n        typeof obj === 'boolean') {\\n\\n        return [encodeURIComponent(prefix) + '=' + encodeURIComponent(obj)];\\n    }\\n\\n    var values = [];\\n\\n    for (var key in obj) {\\n        if (obj.hasOwnProperty(key)) {\\n            values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']'));\\n        }\\n    }\\n\\n    return values;\\n};\\n\\n\\nmodule.exports = function (obj, options) {\\n\\n    options = options || {};\\n    var delimiter = typeof options.delimiter === 'undefined' ? internals.delimiter : options.delimiter;\\n\\n    var keys = [];\\n\\n    for (var key in obj) {\\n        if (obj.hasOwnProperty(key)) {\\n            keys = keys.concat(internals.stringify(obj[key], key));\\n        }\\n    }\\n\\n    return keys.join(delimiter);\\n};\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/qs/lib/stringify.js\\n ** module id = 164\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/qs/lib/stringify.js?\");\n\n/***/ },\n/* 165 */\n/*!******************************************!*\\\n  !*** ./~/react-router/~/qs/lib/parse.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// Load modules\\n\\nvar Utils = __webpack_require__(/*! ./utils */ 157);\\n\\n\\n// Declare internals\\n\\nvar internals = {\\n    delimiter: '&',\\n    depth: 5,\\n    arrayLimit: 20,\\n    parameterLimit: 1000\\n};\\n\\n\\ninternals.parseValues = function (str, options) {\\n\\n    var obj = {};\\n    var parts = str.split(options.delimiter, options.parameterLimit === Infinity ? undefined : options.parameterLimit);\\n\\n    for (var i = 0, il = parts.length; i < il; ++i) {\\n        var part = parts[i];\\n        var pos = part.indexOf(']=') === -1 ? part.indexOf('=') : part.indexOf(']=') + 1;\\n\\n        if (pos === -1) {\\n            obj[Utils.decode(part)] = '';\\n        }\\n        else {\\n            var key = Utils.decode(part.slice(0, pos));\\n            var val = Utils.decode(part.slice(pos + 1));\\n\\n            if (!obj[key]) {\\n                obj[key] = val;\\n            }\\n            else {\\n                obj[key] = [].concat(obj[key]).concat(val);\\n            }\\n        }\\n    }\\n\\n    return obj;\\n};\\n\\n\\ninternals.parseObject = function (chain, val, options) {\\n\\n    if (!chain.length) {\\n        return val;\\n    }\\n\\n    var root = chain.shift();\\n\\n    var obj = {};\\n    if (root === '[]') {\\n        obj = [];\\n        obj = obj.concat(internals.parseObject(chain, val, options));\\n    }\\n    else {\\n        var cleanRoot = root[0] === '[' && root[root.length - 1] === ']' ? root.slice(1, root.length - 1) : root;\\n        var index = parseInt(cleanRoot, 10);\\n        if (!isNaN(index) &&\\n            root !== cleanRoot &&\\n            index <= options.arrayLimit) {\\n\\n            obj = [];\\n            obj[index] = internals.parseObject(chain, val, options);\\n        }\\n        else {\\n            obj[cleanRoot] = internals.parseObject(chain, val, options);\\n        }\\n    }\\n\\n    return obj;\\n};\\n\\n\\ninternals.parseKeys = function (key, val, options) {\\n\\n    if (!key) {\\n        return;\\n    }\\n\\n    // The regex chunks\\n\\n    var parent = /^([^\\\\[\\\\]]*)/;\\n    var child = /(\\\\[[^\\\\[\\\\]]*\\\\])/g;\\n\\n    // Get the parent\\n\\n    var segment = parent.exec(key);\\n\\n    // Don't allow them to overwrite object prototype properties\\n\\n    if (Object.prototype.hasOwnProperty(segment[1])) {\\n        return;\\n    }\\n\\n    // Stash the parent if it exists\\n\\n    var keys = [];\\n    if (segment[1]) {\\n        keys.push(segment[1]);\\n    }\\n\\n    // Loop through children appending to the array until we hit depth\\n\\n    var i = 0;\\n    while ((segment = child.exec(key)) !== null && i < options.depth) {\\n\\n        ++i;\\n        if (!Object.prototype.hasOwnProperty(segment[1].replace(/\\\\[|\\\\]/g, ''))) {\\n            keys.push(segment[1]);\\n        }\\n    }\\n\\n    // If there's a remainder, just add whatever is left\\n\\n    if (segment) {\\n        keys.push('[' + key.slice(segment.index) + ']');\\n    }\\n\\n    return internals.parseObject(keys, val, options);\\n};\\n\\n\\nmodule.exports = function (str, options) {\\n\\n    if (str === '' ||\\n        str === null ||\\n        typeof str === 'undefined') {\\n\\n        return {};\\n    }\\n\\n    options = options || {};\\n    options.delimiter = typeof options.delimiter === 'string' || Utils.isRegExp(options.delimiter) ? options.delimiter : internals.delimiter;\\n    options.depth = typeof options.depth === 'number' ? options.depth : internals.depth;\\n    options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : internals.arrayLimit;\\n    options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : internals.parameterLimit;\\n\\n    var tempObj = typeof str === 'string' ? internals.parseValues(str, options) : str;\\n    var obj = {};\\n\\n    // Iterate over the keys and setup the new object\\n\\n    var keys = Object.keys(tempObj);\\n    for (var i = 0, il = keys.length; i < il; ++i) {\\n        var key = keys[i];\\n        var newObj = internals.parseKeys(key, tempObj[key], options);\\n        obj = Utils.merge(obj, newObj);\\n    }\\n\\n    return Utils.compact(obj);\\n};\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/qs/lib/parse.js\\n ** module id = 165\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/qs/lib/parse.js?\");\n\n/***/ },\n/* 166 */\n/*!***********************************************************!*\\\n  !*** ./~/react-router/modules/components/DefaultRoute.js ***!\n  \\***********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar FakeNode = __webpack_require__(/*! ../mixins/FakeNode */ 167);\\nvar PropTypes = __webpack_require__(/*! ../utils/PropTypes */ 168);\\n\\n/**\\n * A <DefaultRoute> component is a special kind of <Route> that\\n * renders when its parent matches but none of its siblings do.\\n * Only one such route may be used at any given level in the\\n * route hierarchy.\\n */\\nvar DefaultRoute = React.createClass({\\n\\n  displayName: 'DefaultRoute',\\n\\n  mixins: [ FakeNode ],\\n\\n  propTypes: {\\n    name: React.PropTypes.string,\\n    path: PropTypes.falsy,\\n    handler: React.PropTypes.func.isRequired\\n  }\\n\\n});\\n\\nmodule.exports = DefaultRoute;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/components/DefaultRoute.js\\n ** module id = 166\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/components/DefaultRoute.js?\");\n\n/***/ },\n/* 167 */\n/*!***************************************************!*\\\n  !*** ./~/react-router/modules/mixins/FakeNode.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var invariant = __webpack_require__(/*! react/lib/invariant */ 6);\\n\\nvar FakeNode = {\\n\\n  render: function () {\\n    invariant(\\n      false,\\n      '%s elements should not be rendered',\\n      this.constructor.displayName\\n    );\\n  }\\n\\n};\\n\\nmodule.exports = FakeNode;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/mixins/FakeNode.js\\n ** module id = 167\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/mixins/FakeNode.js?\");\n\n/***/ },\n/* 168 */\n/*!***************************************************!*\\\n  !*** ./~/react-router/modules/utils/PropTypes.js ***!\n  \\***************************************************/\n/***/ function(module, exports) {\n\n\teval(\"var PropTypes = {\\n\\n  /**\\n   * Requires that the value of a prop be falsy.\\n   */\\n  falsy: function (props, propName, componentName) {\\n    if (props[propName])\\n      return new Error('<' + componentName + '> may not have a \\\"' + propName + '\\\" prop');\\n  }\\n\\n};\\n\\nmodule.exports = PropTypes;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/PropTypes.js\\n ** module id = 168\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/PropTypes.js?\");\n\n/***/ },\n/* 169 */\n/*!***************************************************!*\\\n  !*** ./~/react-router/modules/components/Link.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar classSet = __webpack_require__(/*! react/lib/cx */ 170);\\nvar assign = __webpack_require__(/*! react/lib/Object.assign */ 21);\\nvar Navigation = __webpack_require__(/*! ../mixins/Navigation */ 171);\\nvar State = __webpack_require__(/*! ../mixins/State */ 172);\\n\\nfunction isLeftClickEvent(event) {\\n  return event.button === 0;\\n}\\n\\nfunction isModifiedEvent(event) {\\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\\n}\\n\\n/**\\n * <Link> components are used to create an <a> element that links to a route.\\n * When that route is active, the link gets an \\\"active\\\" class name (or the\\n * value of its `activeClassName` prop).\\n *\\n * For example, assuming you have the following route:\\n *\\n *   <Route name=\\\"showPost\\\" path=\\\"/posts/:postID\\\" handler={Post}/>\\n *\\n * You could use the following component to link to that route:\\n *\\n *   <Link to=\\\"showPost\\\" params={{ postID: \\\"123\\\" }} />\\n *\\n * In addition to params, links may pass along query string parameters\\n * using the `query` prop.\\n *\\n *   <Link to=\\\"showPost\\\" params={{ postID: \\\"123\\\" }} query={{ show:true }}/>\\n */\\nvar Link = React.createClass({\\n\\n  displayName: 'Link',\\n\\n  mixins: [ Navigation, State ],\\n\\n  propTypes: {\\n    activeClassName: React.PropTypes.string.isRequired,\\n    to: React.PropTypes.string.isRequired,\\n    params: React.PropTypes.object,\\n    query: React.PropTypes.object,\\n    onClick: React.PropTypes.func\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      activeClassName: 'active'\\n    };\\n  },\\n\\n  handleClick: function (event) {\\n    var allowTransition = true;\\n    var clickResult;\\n\\n    if (this.props.onClick)\\n      clickResult = this.props.onClick(event);\\n\\n    if (isModifiedEvent(event) || !isLeftClickEvent(event))\\n      return;\\n\\n    if (clickResult === false || event.defaultPrevented === true)\\n      allowTransition = false;\\n\\n    event.preventDefault();\\n\\n    if (allowTransition)\\n      this.transitionTo(this.props.to, this.props.params, this.props.query);\\n  },\\n\\n  /**\\n   * Returns the value of the \\\"href\\\" attribute to use on the DOM element.\\n   */\\n  getHref: function () {\\n    return this.makeHref(this.props.to, this.props.params, this.props.query);\\n  },\\n\\n  /**\\n   * Returns the value of the \\\"class\\\" attribute to use on the DOM element, which contains\\n   * the value of the activeClassName property when this <Link> is active.\\n   */\\n  getClassName: function () {\\n    var classNames = {};\\n\\n    if (this.props.className)\\n      classNames[this.props.className] = true;\\n\\n    if (this.isActive(this.props.to, this.props.params, this.props.query))\\n      classNames[this.props.activeClassName] = true;\\n\\n    return classSet(classNames);\\n  },\\n\\n  render: function () {\\n    var props = assign({}, this.props, {\\n      href: this.getHref(),\\n      className: this.getClassName(),\\n      onClick: this.handleClick\\n    });\\n\\n    return React.DOM.a(props, this.props.children);\\n  }\\n\\n});\\n\\nmodule.exports = Link;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/components/Link.js\\n ** module id = 169\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/components/Link.js?\");\n\n/***/ },\n/* 170 */\n/*!***************************!*\\\n  !*** ./~/react/lib/cx.js ***!\n  \\***************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule cx\\n */\\n\\n/**\\n * This function is used to mark string literals representing CSS class names\\n * so that they can be transformed statically. This allows for modularization\\n * and minification of CSS class names.\\n *\\n * In static_upstream, this function is actually implemented, but it should\\n * eventually be replaced with something more descriptive, and the transform\\n * that is used in the main stack should be ported for use elsewhere.\\n *\\n * @param string|object className to modularize, or an object of key/values.\\n *                      In the object case, the values are conditions that\\n *                      determine if the className keys should be included.\\n * @param [string ...]  Variable list of classNames in the string case.\\n * @return string       Renderable space-separated CSS className.\\n */\\nfunction cx(classNames) {\\n  if (typeof classNames == 'object') {\\n    return Object.keys(classNames).filter(function(className) {\\n      return classNames[className];\\n    }).join(' ');\\n  } else {\\n    return Array.prototype.join.call(arguments, ' ');\\n  }\\n}\\n\\nmodule.exports = cx;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/cx.js\\n ** module id = 170\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/cx.js?\");\n\n/***/ },\n/* 171 */\n/*!*****************************************************!*\\\n  !*** ./~/react-router/modules/mixins/Navigation.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\n\\n/**\\n * A mixin for components that modify the URL.\\n *\\n * Example:\\n *\\n *   var MyLink = React.createClass({\\n *     mixins: [ Router.Navigation ],\\n *     handleClick: function (event) {\\n *       event.preventDefault();\\n *       this.transitionTo('aRoute', { the: 'params' }, { the: 'query' });\\n *     },\\n *     render: function () {\\n *       return (\\n *         <a onClick={this.handleClick}>Click me!</a>\\n *       );\\n *     }\\n *   });\\n */\\nvar Navigation = {\\n\\n  contextTypes: {\\n    makePath: React.PropTypes.func.isRequired,\\n    makeHref: React.PropTypes.func.isRequired,\\n    transitionTo: React.PropTypes.func.isRequired,\\n    replaceWith: React.PropTypes.func.isRequired,\\n    goBack: React.PropTypes.func.isRequired\\n  },\\n\\n  /**\\n   * Returns an absolute URL path created from the given route\\n   * name, URL parameters, and query values.\\n   */\\n  makePath: function (to, params, query) {\\n    return this.context.makePath(to, params, query);\\n  },\\n\\n  /**\\n   * Returns a string that may safely be used as the href of a\\n   * link to the route with the given name.\\n   */\\n  makeHref: function (to, params, query) {\\n    return this.context.makeHref(to, params, query);\\n  },\\n\\n  /**\\n   * Transitions to the URL specified in the arguments by pushing\\n   * a new URL onto the history stack.\\n   */\\n  transitionTo: function (to, params, query) {\\n    this.context.transitionTo(to, params, query);\\n  },\\n\\n  /**\\n   * Transitions to the URL specified in the arguments by replacing\\n   * the current URL in the history stack.\\n   */\\n  replaceWith: function (to, params, query) {\\n    this.context.replaceWith(to, params, query);\\n  },\\n\\n  /**\\n   * Transitions to the previous URL.\\n   */\\n  goBack: function () {\\n    this.context.goBack();\\n  }\\n\\n};\\n\\nmodule.exports = Navigation;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/mixins/Navigation.js\\n ** module id = 171\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/mixins/Navigation.js?\");\n\n/***/ },\n/* 172 */\n/*!************************************************!*\\\n  !*** ./~/react-router/modules/mixins/State.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\n\\n/**\\n * A mixin for components that need to know the path, routes, URL\\n * params and query that are currently active.\\n *\\n * Example:\\n *\\n *   var AboutLink = React.createClass({\\n *     mixins: [ Router.State ],\\n *     render: function () {\\n *       var className = this.props.className;\\n *   \\n *       if (this.isActive('about'))\\n *         className += ' is-active';\\n *   \\n *       return React.DOM.a({ className: className }, this.props.children);\\n *     }\\n *   });\\n */\\nvar State = {\\n\\n  contextTypes: {\\n    getCurrentPath: React.PropTypes.func.isRequired,\\n    getCurrentRoutes: React.PropTypes.func.isRequired,\\n    getCurrentPathname: React.PropTypes.func.isRequired,\\n    getCurrentParams: React.PropTypes.func.isRequired,\\n    getCurrentQuery: React.PropTypes.func.isRequired,\\n    isActive: React.PropTypes.func.isRequired\\n  },\\n\\n  /**\\n   * Returns the current URL path.\\n   */\\n  getPath: function () {\\n    return this.context.getCurrentPath();\\n  },\\n\\n  /**\\n   * Returns an array of the routes that are currently active.\\n   */\\n  getRoutes: function () {\\n    return this.context.getCurrentRoutes();\\n  },\\n\\n  /**\\n   * Returns the current URL path without the query string.\\n   */\\n  getPathname: function () {\\n    return this.context.getCurrentPathname();\\n  },\\n\\n  /**\\n   * Returns an object of the URL params that are currently active.\\n   */\\n  getParams: function () {\\n    return this.context.getCurrentParams();\\n  },\\n\\n  /**\\n   * Returns an object of the query params that are currently active.\\n   */\\n  getQuery: function () {\\n    return this.context.getCurrentQuery();\\n  },\\n\\n  /**\\n   * A helper method to determine if a given route, params, and query\\n   * are active.\\n   */\\n  isActive: function (to, params, query) {\\n    return this.context.isActive(to, params, query);\\n  }\\n\\n};\\n\\nmodule.exports = State;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/mixins/State.js\\n ** module id = 172\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/mixins/State.js?\");\n\n/***/ },\n/* 173 */\n/*!************************************************************!*\\\n  !*** ./~/react-router/modules/components/NotFoundRoute.js ***!\n  \\************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar FakeNode = __webpack_require__(/*! ../mixins/FakeNode */ 167);\\nvar PropTypes = __webpack_require__(/*! ../utils/PropTypes */ 168);\\n\\n/**\\n * A <NotFoundRoute> is a special kind of <Route> that\\n * renders when the beginning of its parent's path matches\\n * but none of its siblings do, including any <DefaultRoute>.\\n * Only one such route may be used at any given level in the\\n * route hierarchy.\\n */\\nvar NotFoundRoute = React.createClass({\\n\\n  displayName: 'NotFoundRoute',\\n\\n  mixins: [ FakeNode ],\\n\\n  propTypes: {\\n    name: React.PropTypes.string,\\n    path: PropTypes.falsy,\\n    handler: React.PropTypes.func.isRequired\\n  }\\n\\n});\\n\\nmodule.exports = NotFoundRoute;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/components/NotFoundRoute.js\\n ** module id = 173\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/components/NotFoundRoute.js?\");\n\n/***/ },\n/* 174 */\n/*!*******************************************************!*\\\n  !*** ./~/react-router/modules/components/Redirect.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar FakeNode = __webpack_require__(/*! ../mixins/FakeNode */ 167);\\nvar PropTypes = __webpack_require__(/*! ../utils/PropTypes */ 168);\\n\\n/**\\n * A <Redirect> component is a special kind of <Route> that always\\n * redirects to another route when it matches.\\n */\\nvar Redirect = React.createClass({\\n\\n  displayName: 'Redirect',\\n\\n  mixins: [ FakeNode ],\\n\\n  propTypes: {\\n    path: React.PropTypes.string,\\n    from: React.PropTypes.string, // Alias for path.\\n    to: React.PropTypes.string,\\n    handler: PropTypes.falsy\\n  }\\n\\n});\\n\\nmodule.exports = Redirect;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/components/Redirect.js\\n ** module id = 174\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/components/Redirect.js?\");\n\n/***/ },\n/* 175 */\n/*!****************************************************!*\\\n  !*** ./~/react-router/modules/components/Route.js ***!\n  \\****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar FakeNode = __webpack_require__(/*! ../mixins/FakeNode */ 167);\\n\\n/**\\n * <Route> components specify components that are rendered to the page when the\\n * URL matches a given pattern.\\n *\\n * Routes are arranged in a nested tree structure. When a new URL is requested,\\n * the tree is searched depth-first to find a route whose path matches the URL.\\n * When one is found, all routes in the tree that lead to it are considered\\n * \\\"active\\\" and their components are rendered into the DOM, nested in the same\\n * order as they are in the tree.\\n *\\n * The preferred way to configure a router is using JSX. The XML-like syntax is\\n * a great way to visualize how routes are laid out in an application.\\n *\\n *   var routes = [\\n *     <Route handler={App}>\\n *       <Route name=\\\"login\\\" handler={Login}/>\\n *       <Route name=\\\"logout\\\" handler={Logout}/>\\n *       <Route name=\\\"about\\\" handler={About}/>\\n *     </Route>\\n *   ];\\n *   \\n *   Router.run(routes, function (Handler) {\\n *     React.render(<Handler/>, document.body);\\n *   });\\n *\\n * Handlers for Route components that contain children can render their active\\n * child route using a <RouteHandler> element.\\n *\\n *   var App = React.createClass({\\n *     render: function () {\\n *       return (\\n *         <div class=\\\"application\\\">\\n *           <RouteHandler/>\\n *         </div>\\n *       );\\n *     }\\n *   });\\n */\\nvar Route = React.createClass({\\n\\n  displayName: 'Route',\\n\\n  mixins: [ FakeNode ],\\n\\n  propTypes: {\\n    name: React.PropTypes.string,\\n    path: React.PropTypes.string,\\n    handler: React.PropTypes.func.isRequired,\\n    ignoreScrollBehavior: React.PropTypes.bool\\n  }\\n\\n});\\n\\nmodule.exports = Route;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/components/Route.js\\n ** module id = 175\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/components/Route.js?\");\n\n/***/ },\n/* 176 */\n/*!***********************************************************!*\\\n  !*** ./~/react-router/modules/components/RouteHandler.js ***!\n  \\***********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar RouteHandlerMixin = __webpack_require__(/*! ../mixins/RouteHandler */ 177);\\n\\n/**\\n * A <RouteHandler> component renders the active child route handler\\n * when routes are nested.\\n */\\nvar RouteHandler = React.createClass({\\n\\n  displayName: 'RouteHandler',\\n\\n  mixins: [RouteHandlerMixin],\\n\\n  getDefaultProps: function () {\\n    return {\\n      ref: '__routeHandler__'\\n    };\\n  },\\n\\n  render: function () {\\n    return this.getRouteHandler();\\n  }\\n\\n});\\n\\nmodule.exports = RouteHandler;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/components/RouteHandler.js\\n ** module id = 176\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/components/RouteHandler.js?\");\n\n/***/ },\n/* 177 */\n/*!*******************************************************!*\\\n  !*** ./~/react-router/modules/mixins/RouteHandler.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\n\\nmodule.exports = {\\n  contextTypes: {\\n    getRouteAtDepth: React.PropTypes.func.isRequired,\\n    getRouteComponents: React.PropTypes.func.isRequired,\\n    routeHandlers: React.PropTypes.array.isRequired\\n  },\\n\\n  childContextTypes: {\\n    routeHandlers: React.PropTypes.array.isRequired\\n  },\\n\\n  getChildContext: function () {\\n    return {\\n      routeHandlers: this.context.routeHandlers.concat([ this ])\\n    };\\n  },\\n\\n  getRouteDepth: function () {\\n    return this.context.routeHandlers.length - 1;\\n  },\\n\\n  componentDidMount: function () {\\n    this._updateRouteComponent();\\n  },\\n\\n  componentDidUpdate: function () {\\n    this._updateRouteComponent();\\n  },\\n\\n  _updateRouteComponent: function () {\\n    var depth = this.getRouteDepth();\\n    var components = this.context.getRouteComponents();\\n    components[depth] = this.refs[this.props.ref || '__routeHandler__'];\\n  },\\n\\n  getRouteHandler: function (props) {\\n    var route = this.context.getRouteAtDepth(this.getRouteDepth());\\n    return route ? React.createElement(route.handler, props || this.props) : null;\\n  }\\n};\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/mixins/RouteHandler.js\\n ** module id = 177\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/mixins/RouteHandler.js?\");\n\n/***/ },\n/* 178 */\n/*!**********************************************************!*\\\n  !*** ./~/react-router/modules/locations/HashLocation.js ***!\n  \\**********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var LocationActions = __webpack_require__(/*! ../actions/LocationActions */ 154);\\nvar History = __webpack_require__(/*! ../utils/History */ 155);\\nvar Path = __webpack_require__(/*! ../utils/Path */ 156);\\n\\n/**\\n * Returns the current URL path from the `hash` portion of the URL, including\\n * query string.\\n */\\nfunction getHashPath() {\\n  return Path.decode(\\n    // We can't use window.location.hash here because it's not\\n    // consistent across browsers - Firefox will pre-decode it!\\n    window.location.href.split('#')[1] || ''\\n  );\\n}\\n\\nvar _actionType;\\n\\nfunction ensureSlash() {\\n  var path = getHashPath();\\n\\n  if (path.charAt(0) === '/')\\n    return true;\\n\\n  HashLocation.replace('/' + path);\\n\\n  return false;\\n}\\n\\nvar _changeListeners = [];\\n\\nfunction notifyChange(type) {\\n  if (type === LocationActions.PUSH)\\n    History.length += 1;\\n\\n  var change = {\\n    path: getHashPath(),\\n    type: type\\n  };\\n\\n  _changeListeners.forEach(function (listener) {\\n    listener(change);\\n  });\\n}\\n\\nvar _isListening = false;\\n\\nfunction onHashChange() {\\n  if (ensureSlash()) {\\n    // If we don't have an _actionType then all we know is the hash\\n    // changed. It was probably caused by the user clicking the Back\\n    // button, but may have also been the Forward button or manual\\n    // manipulation. So just guess 'pop'.\\n    notifyChange(_actionType || LocationActions.POP);\\n    _actionType = null;\\n  }\\n}\\n\\n/**\\n * A Location that uses `window.location.hash`.\\n */\\nvar HashLocation = {\\n\\n  addChangeListener: function (listener) {\\n    _changeListeners.push(listener);\\n\\n    // Do this BEFORE listening for hashchange.\\n    ensureSlash();\\n\\n    if (_isListening)\\n      return;\\n\\n    if (window.addEventListener) {\\n      window.addEventListener('hashchange', onHashChange, false);\\n    } else {\\n      window.attachEvent('onhashchange', onHashChange);\\n    }\\n\\n    _isListening = true;\\n  },\\n\\n  removeChangeListener: function(listener) {\\n    for (var i = 0, l = _changeListeners.length; i < l; i ++) {\\n      if (_changeListeners[i] === listener) {\\n        _changeListeners.splice(i, 1);\\n        break;\\n      }\\n    }\\n\\n    if (window.removeEventListener) {\\n      window.removeEventListener('hashchange', onHashChange, false);\\n    } else {\\n      window.removeEvent('onhashchange', onHashChange);\\n    }\\n\\n    if (_changeListeners.length === 0)\\n      _isListening = false;\\n  },\\n\\n\\n\\n  push: function (path) {\\n    _actionType = LocationActions.PUSH;\\n    window.location.hash = Path.encode(path);\\n  },\\n\\n  replace: function (path) {\\n    _actionType = LocationActions.REPLACE;\\n    window.location.replace(window.location.pathname + '#' + Path.encode(path));\\n  },\\n\\n  pop: function () {\\n    _actionType = LocationActions.POP;\\n    History.back();\\n  },\\n\\n  getCurrentPath: getHashPath,\\n\\n  toString: function () {\\n    return '<HashLocation>';\\n  }\\n\\n};\\n\\nmodule.exports = HashLocation;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/locations/HashLocation.js\\n ** module id = 178\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/locations/HashLocation.js?\");\n\n/***/ },\n/* 179 */\n/*!********************************************************************!*\\\n  !*** ./~/react-router/modules/behaviors/ImitateBrowserBehavior.js ***!\n  \\********************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var LocationActions = __webpack_require__(/*! ../actions/LocationActions */ 154);\\n\\n/**\\n * A scroll behavior that attempts to imitate the default behavior\\n * of modern browsers.\\n */\\nvar ImitateBrowserBehavior = {\\n\\n  updateScrollPosition: function (position, actionType) {\\n    switch (actionType) {\\n      case LocationActions.PUSH:\\n      case LocationActions.REPLACE:\\n        window.scrollTo(0, 0);\\n        break;\\n      case LocationActions.POP:\\n        if (position) {\\n          window.scrollTo(position.x, position.y);\\n        } else {\\n          window.scrollTo(0, 0);\\n        }\\n        break;\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = ImitateBrowserBehavior;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/behaviors/ImitateBrowserBehavior.js\\n ** module id = 179\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/behaviors/ImitateBrowserBehavior.js?\");\n\n/***/ },\n/* 180 */\n/*!*****************************************************************!*\\\n  !*** ./~/react-router/modules/behaviors/ScrollToTopBehavior.js ***!\n  \\*****************************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * A scroll behavior that always scrolls to the top of the page\\n * after a transition.\\n */\\nvar ScrollToTopBehavior = {\\n\\n  updateScrollPosition: function () {\\n    window.scrollTo(0, 0);\\n  }\\n\\n};\\n\\nmodule.exports = ScrollToTopBehavior;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/behaviors/ScrollToTopBehavior.js\\n ** module id = 180\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/behaviors/ScrollToTopBehavior.js?\");\n\n/***/ },\n/* 181 */\n/*!******************************************************!*\\\n  !*** ./~/react-router/modules/utils/createRouter.js ***!\n  \\******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/* jshint -W058 */\\nvar React = __webpack_require__(/*! react */ 1);\\nvar warning = __webpack_require__(/*! react/lib/warning */ 11);\\nvar invariant = __webpack_require__(/*! react/lib/invariant */ 6);\\nvar canUseDOM = __webpack_require__(/*! react/lib/ExecutionEnvironment */ 49).canUseDOM;\\nvar ImitateBrowserBehavior = __webpack_require__(/*! ../behaviors/ImitateBrowserBehavior */ 179);\\nvar RouteHandler = __webpack_require__(/*! ../components/RouteHandler */ 176);\\nvar LocationActions = __webpack_require__(/*! ../actions/LocationActions */ 154);\\nvar HashLocation = __webpack_require__(/*! ../locations/HashLocation */ 178);\\nvar HistoryLocation = __webpack_require__(/*! ../locations/HistoryLocation */ 153);\\nvar RefreshLocation = __webpack_require__(/*! ../locations/RefreshLocation */ 152);\\nvar NavigationContext = __webpack_require__(/*! ../mixins/NavigationContext */ 182);\\nvar StateContext = __webpack_require__(/*! ../mixins/StateContext */ 183);\\nvar Scrolling = __webpack_require__(/*! ../mixins/Scrolling */ 184);\\nvar createRoutesFromChildren = __webpack_require__(/*! ./createRoutesFromChildren */ 186);\\nvar supportsHistory = __webpack_require__(/*! ./supportsHistory */ 187);\\nvar Transition = __webpack_require__(/*! ./Transition */ 188);\\nvar PropTypes = __webpack_require__(/*! ./PropTypes */ 168);\\nvar Redirect = __webpack_require__(/*! ./Redirect */ 190);\\nvar History = __webpack_require__(/*! ./History */ 155);\\nvar Cancellation = __webpack_require__(/*! ./Cancellation */ 199);\\nvar Path = __webpack_require__(/*! ./Path */ 156);\\n\\n/**\\n * The default location for new routers.\\n */\\nvar DEFAULT_LOCATION = canUseDOM ? HashLocation : '/';\\n\\n/**\\n * The default scroll behavior for new routers.\\n */\\nvar DEFAULT_SCROLL_BEHAVIOR = canUseDOM ? ImitateBrowserBehavior : null;\\n\\n/**\\n * The default error handler for new routers.\\n */\\nfunction defaultErrorHandler(error) {\\n  // Throw so we don't silently swallow async errors.\\n  throw error; // This error probably originated in a transition hook.\\n}\\n\\n/**\\n * The default aborted transition handler for new routers.\\n */\\nfunction defaultAbortHandler(abortReason, location) {\\n  if (typeof location === 'string')\\n    throw new Error('Unhandled aborted transition! Reason: ' + abortReason);\\n\\n  if (abortReason instanceof Cancellation) {\\n    return;\\n  } else if (abortReason instanceof Redirect) {\\n    location.replace(this.makePath(abortReason.to, abortReason.params, abortReason.query));\\n  } else {\\n    location.pop();\\n  }\\n}\\n\\nfunction findMatch(pathname, routes, defaultRoute, notFoundRoute) {\\n  var match, route, params;\\n\\n  for (var i = 0, len = routes.length; i < len; ++i) {\\n    route = routes[i];\\n\\n    // Check the subtree first to find the most deeply-nested match.\\n    match = findMatch(pathname, route.childRoutes, route.defaultRoute, route.notFoundRoute);\\n\\n    if (match != null) {\\n      match.routes.unshift(route);\\n      return match;\\n    }\\n\\n    // No routes in the subtree matched, so check this route.\\n    params = Path.extractParams(route.path, pathname);\\n\\n    if (params)\\n      return createMatch(route, params);\\n  }\\n\\n  // No routes matched, so try the default route if there is one.\\n  if (defaultRoute && (params = Path.extractParams(defaultRoute.path, pathname)))\\n    return createMatch(defaultRoute, params);\\n\\n  // Last attempt: does the \\\"not found\\\" route match?\\n  if (notFoundRoute && (params = Path.extractParams(notFoundRoute.path, pathname)))\\n    return createMatch(notFoundRoute, params);\\n\\n  return match;\\n}\\n\\nfunction createMatch(route, params) {\\n  return { routes: [ route ], params: params };\\n}\\n\\nfunction hasProperties(object, properties) {\\n  for (var propertyName in properties)\\n    if (properties.hasOwnProperty(propertyName) && object[propertyName] !== properties[propertyName])\\n      return false;\\n\\n  return true;\\n}\\n\\nfunction hasMatch(routes, route, prevParams, nextParams, prevQuery, nextQuery) {\\n  return routes.some(function (r) {\\n    if (r !== route)\\n      return false;\\n\\n    var paramNames = route.paramNames;\\n    var paramName;\\n\\n    // Ensure that all params the route cares about did not change.\\n    for (var i = 0, len = paramNames.length; i < len; ++i) {\\n      paramName = paramNames[i];\\n\\n      if (nextParams[paramName] !== prevParams[paramName])\\n        return false;\\n    }\\n\\n    // Ensure the query hasn't changed.\\n    return hasProperties(prevQuery, nextQuery) && hasProperties(nextQuery, prevQuery);\\n  });\\n}\\n\\n/**\\n * Creates and returns a new router using the given options. A router\\n * is a ReactComponent class that knows how to react to changes in the\\n * URL and keep the contents of the page in sync.\\n *\\n * Options may be any of the following:\\n *\\n * - routes           (required) The route config\\n * - location         The location to use. Defaults to HashLocation when\\n *                    the DOM is available, \\\"/\\\" otherwise\\n * - scrollBehavior   The scroll behavior to use. Defaults to ImitateBrowserBehavior\\n *                    when the DOM is available, null otherwise\\n * - onError          A function that is used to handle errors\\n * - onAbort          A function that is used to handle aborted transitions\\n *\\n * When rendering in a server-side environment, the location should simply\\n * be the URL path that was used in the request, including the query string.\\n */\\nfunction createRouter(options) {\\n  options = options || {};\\n\\n  if (typeof options === 'function') {\\n    options = { routes: options }; // Router.create(<Route>)\\n  } else if (Array.isArray(options)) {\\n    options = { routes: options }; // Router.create([ <Route>, <Route> ])\\n  }\\n\\n  var routes = [];\\n  var namedRoutes = {};\\n  var components = [];\\n  var location = options.location || DEFAULT_LOCATION;\\n  var scrollBehavior = options.scrollBehavior || DEFAULT_SCROLL_BEHAVIOR;\\n  var onError = options.onError || defaultErrorHandler;\\n  var onAbort = options.onAbort || defaultAbortHandler;\\n  var state = {};\\n  var nextState = {};\\n  var pendingTransition = null;\\n\\n  function updateState() {\\n    state = nextState;\\n    nextState = {};\\n  }\\n\\n  if (typeof location === 'string') {\\n    warning(\\n      !canUseDOM || process.env.NODE_ENV === 'test',\\n      'You should not use a static location in a DOM environment because ' +\\n      'the router will not be kept in sync with the current URL'\\n    );\\n  } else {\\n    invariant(\\n      canUseDOM,\\n      'You cannot use %s without a DOM',\\n      location\\n    );\\n  }\\n\\n  // Automatically fall back to full page refreshes in\\n  // browsers that don't support the HTML history API.\\n  if (location === HistoryLocation && !supportsHistory())\\n    location = RefreshLocation;\\n\\n  var router = React.createClass({\\n\\n    displayName: 'Router',\\n\\n    mixins: [ NavigationContext, StateContext, Scrolling ],\\n\\n    statics: {\\n\\n      defaultRoute: null,\\n      notFoundRoute: null,\\n\\n      /**\\n       * Adds routes to this router from the given children object (see ReactChildren).\\n       */\\n      addRoutes: function (children) {\\n        routes.push.apply(routes, createRoutesFromChildren(children, this, namedRoutes));\\n      },\\n\\n      /**\\n       * Returns an absolute URL path created from the given route\\n       * name, URL parameters, and query.\\n       */\\n      makePath: function (to, params, query) {\\n        var path;\\n        if (Path.isAbsolute(to)) {\\n          path = Path.normalize(to);\\n        } else {\\n          var route = namedRoutes[to];\\n\\n          invariant(\\n            route,\\n            'Unable to find <Route name=\\\"%s\\\">',\\n            to\\n          );\\n\\n          path = route.path;\\n        }\\n\\n        return Path.withQuery(Path.injectParams(path, params), query);\\n      },\\n\\n      /**\\n       * Returns a string that may safely be used as the href of a link\\n       * to the route with the given name, URL parameters, and query.\\n       */\\n      makeHref: function (to, params, query) {\\n        var path = this.makePath(to, params, query);\\n        return (location === HashLocation) ? '#' + path : path;\\n      },\\n\\n      /**\\n       * Transitions to the URL specified in the arguments by pushing\\n       * a new URL onto the history stack.\\n       */\\n      transitionTo: function (to, params, query) {\\n        invariant(\\n          typeof location !== 'string',\\n          'You cannot use transitionTo with a static location'\\n        );\\n\\n        var path = this.makePath(to, params, query);\\n\\n        if (pendingTransition) {\\n          // Replace so pending location does not stay in history.\\n          location.replace(path);\\n        } else {\\n          location.push(path);\\n        }\\n      },\\n\\n      /**\\n       * Transitions to the URL specified in the arguments by replacing\\n       * the current URL in the history stack.\\n       */\\n      replaceWith: function (to, params, query) {\\n        invariant(\\n          typeof location !== 'string',\\n          'You cannot use replaceWith with a static location'\\n        );\\n\\n        location.replace(this.makePath(to, params, query));\\n      },\\n\\n      /**\\n       * Transitions to the previous URL if one is available. Returns true if the\\n       * router was able to go back, false otherwise.\\n       *\\n       * Note: The router only tracks history entries in your application, not the\\n       * current browser session, so you can safely call this function without guarding\\n       * against sending the user back to some other site. However, when using\\n       * RefreshLocation (which is the fallback for HistoryLocation in browsers that\\n       * don't support HTML5 history) this method will *always* send the client back\\n       * because we cannot reliably track history length.\\n       */\\n      goBack: function () {\\n        invariant(\\n          typeof location !== 'string',\\n          'You cannot use goBack with a static location'\\n        );\\n\\n        if (History.length > 1 || location === RefreshLocation) {\\n          location.pop();\\n          return true;\\n        }\\n\\n        warning(false, 'goBack() was ignored because there is no router history');\\n\\n        return false;\\n      },\\n\\n      /**\\n       * Performs a match of the given pathname against this router and returns an object\\n       * with the { routes, params } that match. Returns null if no match can be made.\\n       */\\n      match: function (pathname) {\\n        return findMatch(pathname, routes, this.defaultRoute, this.notFoundRoute) || null;\\n      },\\n\\n      /**\\n       * Performs a transition to the given path and calls callback(error, abortReason)\\n       * when the transition is finished. If both arguments are null the router's state\\n       * was updated. Otherwise the transition did not complete.\\n       *\\n       * In a transition, a router first determines which routes are involved by beginning\\n       * with the current route, up the route tree to the first parent route that is shared\\n       * with the destination route, and back down the tree to the destination route. The\\n       * willTransitionFrom hook is invoked on all route handlers we're transitioning away\\n       * from, in reverse nesting order. Likewise, the willTransitionTo hook is invoked on\\n       * all route handlers we're transitioning to.\\n       *\\n       * Both willTransitionFrom and willTransitionTo hooks may either abort or redirect the\\n       * transition. To resolve asynchronously, they may use transition.wait(promise). If no\\n       * hooks wait, the transition is fully synchronous.\\n       */\\n      dispatch: function (path, action, callback) {\\n        if (pendingTransition) {\\n          pendingTransition.abort(new Cancellation);\\n          pendingTransition = null;\\n        }\\n\\n        var prevPath = state.path;\\n        if (prevPath === path)\\n          return; // Nothing to do!\\n\\n        // Record the scroll position as early as possible to\\n        // get it before browsers try update it automatically.\\n        if (prevPath && action !== LocationActions.REPLACE)\\n          this.recordScrollPosition(prevPath);\\n\\n        var pathname = Path.withoutQuery(path);\\n        var match = this.match(pathname);\\n\\n        warning(\\n          match != null,\\n          'No route matches path \\\"%s\\\". Make sure you have <Route path=\\\"%s\\\"> somewhere in your routes',\\n          path, path\\n        );\\n\\n        if (match == null)\\n          match = {};\\n\\n        var prevRoutes = state.routes || [];\\n        var prevParams = state.params || {};\\n        var prevQuery = state.query || {};\\n\\n        var nextRoutes = match.routes || [];\\n        var nextParams = match.params || {};\\n        var nextQuery = Path.extractQuery(path) || {};\\n\\n        var fromRoutes, toRoutes;\\n        if (prevRoutes.length) {\\n          fromRoutes = prevRoutes.filter(function (route) {\\n            return !hasMatch(nextRoutes, route, prevParams, nextParams, prevQuery, nextQuery);\\n          });\\n\\n          toRoutes = nextRoutes.filter(function (route) {\\n            return !hasMatch(prevRoutes, route, prevParams, nextParams, prevQuery, nextQuery);\\n          });\\n        } else {\\n          fromRoutes = [];\\n          toRoutes = nextRoutes;\\n        }\\n\\n        var transition = new Transition(path, this.replaceWith.bind(this, path));\\n        pendingTransition = transition;\\n\\n        transition.from(fromRoutes, components, function (error) {\\n          if (error || transition.isAborted)\\n            return callback.call(router, error, transition);\\n\\n          transition.to(toRoutes, nextParams, nextQuery, function (error) {\\n            if (error || transition.isAborted)\\n              return callback.call(router, error, transition);\\n\\n            nextState.path = path;\\n            nextState.action = action;\\n            nextState.pathname = pathname;\\n            nextState.routes = nextRoutes;\\n            nextState.params = nextParams;\\n            nextState.query = nextQuery;\\n\\n            callback.call(router, null, transition);\\n          });\\n        });\\n      },\\n\\n      /**\\n       * Starts this router and calls callback(router, state) when the route changes.\\n       *\\n       * If the router's location is static (i.e. a URL path in a server environment)\\n       * the callback is called only once. Otherwise, the location should be one of the\\n       * Router.*Location objects (e.g. Router.HashLocation or Router.HistoryLocation).\\n       */\\n      run: function (callback) {\\n        var dispatchHandler = function (error, transition) {\\n          pendingTransition = null;\\n\\n          if (error) {\\n            onError.call(router, error);\\n          } else if (transition.isAborted) {\\n            onAbort.call(router, transition.abortReason, location);\\n          } else {\\n            callback.call(router, router, nextState);\\n          }\\n        };\\n\\n        if (typeof location === 'string') {\\n          router.dispatch(location, null, dispatchHandler);\\n        } else {\\n          // Listen for changes to the location.\\n          var changeListener = function (change) {\\n            router.dispatch(change.path, change.type, dispatchHandler);\\n          };\\n\\n          if (location.addChangeListener)\\n            location.addChangeListener(changeListener);\\n\\n          // Bootstrap using the current path.\\n          router.dispatch(location.getCurrentPath(), null, dispatchHandler);\\n        }\\n      },\\n\\n      teardown: function() {\\n        location.removeChangeListener(this.changeListener);\\n      }\\n\\n    },\\n\\n    propTypes: {\\n      children: PropTypes.falsy\\n    },\\n\\n    getLocation: function () {\\n      return location;\\n    },\\n\\n    getScrollBehavior: function () {\\n      return scrollBehavior;\\n    },\\n\\n    getRouteAtDepth: function (depth) {\\n      var routes = this.state.routes;\\n      return routes && routes[depth];\\n    },\\n\\n    getRouteComponents: function () {\\n      return components;\\n    },\\n\\n    getInitialState: function () {\\n      updateState();\\n      return state;\\n    },\\n\\n    componentWillReceiveProps: function () {\\n      updateState();\\n      this.setState(state);\\n    },\\n\\n    componentWillUnmount: function() {\\n      router.teardown();\\n    },\\n\\n    render: function () {\\n      return this.getRouteAtDepth(0) ? React.createElement(RouteHandler, this.props) : null;\\n    },\\n\\n    childContextTypes: {\\n      getRouteAtDepth: React.PropTypes.func.isRequired,\\n      getRouteComponents: React.PropTypes.func.isRequired,\\n      routeHandlers: React.PropTypes.array.isRequired\\n    },\\n\\n    getChildContext: function () {\\n      return {\\n        getRouteComponents: this.getRouteComponents,\\n        getRouteAtDepth: this.getRouteAtDepth,\\n        routeHandlers: [ this ]\\n      };\\n    }\\n\\n  });\\n\\n  if (options.routes)\\n    router.addRoutes(options.routes);\\n\\n  return router;\\n}\\n\\nmodule.exports = createRouter;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/createRouter.js\\n ** module id = 181\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/createRouter.js?\");\n\n/***/ },\n/* 182 */\n/*!************************************************************!*\\\n  !*** ./~/react-router/modules/mixins/NavigationContext.js ***!\n  \\************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\n\\n/**\\n * Provides the router with context for Router.Navigation.\\n */\\nvar NavigationContext = {\\n\\n  childContextTypes: {\\n    makePath: React.PropTypes.func.isRequired,\\n    makeHref: React.PropTypes.func.isRequired,\\n    transitionTo: React.PropTypes.func.isRequired,\\n    replaceWith: React.PropTypes.func.isRequired,\\n    goBack: React.PropTypes.func.isRequired\\n  },\\n\\n  getChildContext: function () {\\n    return {\\n      makePath: this.constructor.makePath,\\n      makeHref: this.constructor.makeHref,\\n      transitionTo: this.constructor.transitionTo,\\n      replaceWith: this.constructor.replaceWith,\\n      goBack: this.constructor.goBack\\n    };\\n  }\\n\\n};\\n\\nmodule.exports = NavigationContext;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/mixins/NavigationContext.js\\n ** module id = 182\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/mixins/NavigationContext.js?\");\n\n/***/ },\n/* 183 */\n/*!*******************************************************!*\\\n  !*** ./~/react-router/modules/mixins/StateContext.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar assign = __webpack_require__(/*! react/lib/Object.assign */ 21);\\nvar Path = __webpack_require__(/*! ../utils/Path */ 156);\\n\\nfunction routeIsActive(activeRoutes, routeName) {\\n  return activeRoutes.some(function (route) {\\n    return route.name === routeName;\\n  });\\n}\\n\\nfunction paramsAreActive(activeParams, params) {\\n  for (var property in params)\\n    if (String(activeParams[property]) !== String(params[property]))\\n      return false;\\n\\n  return true;\\n}\\n\\nfunction queryIsActive(activeQuery, query) {\\n  for (var property in query)\\n    if (String(activeQuery[property]) !== String(query[property]))\\n      return false;\\n\\n  return true;\\n}\\n\\n/**\\n * Provides the router with context for Router.State.\\n */\\nvar StateContext = {\\n\\n  /**\\n   * Returns the current URL path + query string.\\n   */\\n  getCurrentPath: function () {\\n    return this.state.path;\\n  },\\n\\n  /**\\n   * Returns a read-only array of the currently active routes.\\n   */\\n  getCurrentRoutes: function () {\\n    return this.state.routes.slice(0);\\n  },\\n\\n  /**\\n   * Returns the current URL path without the query string.\\n   */\\n  getCurrentPathname: function () {\\n    return this.state.pathname;\\n  },\\n\\n  /**\\n   * Returns a read-only object of the currently active URL parameters.\\n   */\\n  getCurrentParams: function () {\\n    return assign({}, this.state.params);\\n  },\\n\\n  /**\\n   * Returns a read-only object of the currently active query parameters.\\n   */\\n  getCurrentQuery: function () {\\n    return assign({}, this.state.query);\\n  },\\n\\n  /**\\n   * Returns true if the given route, params, and query are active.\\n   */\\n  isActive: function (to, params, query) {\\n    if (Path.isAbsolute(to))\\n      return to === this.state.path;\\n\\n    return routeIsActive(this.state.routes, to) &&\\n      paramsAreActive(this.state.params, params) &&\\n      (query == null || queryIsActive(this.state.query, query));\\n  },\\n\\n  childContextTypes: {\\n    getCurrentPath: React.PropTypes.func.isRequired,\\n    getCurrentRoutes: React.PropTypes.func.isRequired,\\n    getCurrentPathname: React.PropTypes.func.isRequired,\\n    getCurrentParams: React.PropTypes.func.isRequired,\\n    getCurrentQuery: React.PropTypes.func.isRequired,\\n    isActive: React.PropTypes.func.isRequired\\n  },\\n\\n  getChildContext: function () {\\n    return {\\n      getCurrentPath: this.getCurrentPath,\\n      getCurrentRoutes: this.getCurrentRoutes,\\n      getCurrentPathname: this.getCurrentPathname,\\n      getCurrentParams: this.getCurrentParams,\\n      getCurrentQuery: this.getCurrentQuery,\\n      isActive: this.isActive\\n    };\\n  }\\n\\n};\\n\\nmodule.exports = StateContext;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/mixins/StateContext.js\\n ** module id = 183\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/mixins/StateContext.js?\");\n\n/***/ },\n/* 184 */\n/*!****************************************************!*\\\n  !*** ./~/react-router/modules/mixins/Scrolling.js ***!\n  \\****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var invariant = __webpack_require__(/*! react/lib/invariant */ 6);\\nvar canUseDOM = __webpack_require__(/*! react/lib/ExecutionEnvironment */ 49).canUseDOM;\\nvar getWindowScrollPosition = __webpack_require__(/*! ../utils/getWindowScrollPosition */ 185);\\n\\nfunction shouldUpdateScroll(state, prevState) {\\n  if (!prevState)\\n    return true;\\n\\n  // Don't update scroll position when only the query has changed.\\n  if (state.pathname === prevState.pathname)\\n    return false;\\n\\n  var routes = state.routes;\\n  var prevRoutes = prevState.routes;\\n\\n  var sharedAncestorRoutes = routes.filter(function (route) {\\n    return prevRoutes.indexOf(route) !== -1;\\n  });\\n\\n  return !sharedAncestorRoutes.some(function (route) {\\n    return route.ignoreScrollBehavior;\\n  });\\n}\\n\\n/**\\n * Provides the router with the ability to manage window scroll position\\n * according to its scroll behavior.\\n */\\nvar Scrolling = {\\n\\n  statics: {\\n    /**\\n     * Records curent scroll position as the last known position for the given URL path.\\n     */\\n    recordScrollPosition: function (path) {\\n      if (!this.scrollHistory)\\n        this.scrollHistory = {};\\n\\n      this.scrollHistory[path] = getWindowScrollPosition();\\n    },\\n\\n    /**\\n     * Returns the last known scroll position for the given URL path.\\n     */\\n    getScrollPosition: function (path) {\\n      if (!this.scrollHistory)\\n        this.scrollHistory = {};\\n\\n      return this.scrollHistory[path] || null;\\n    }\\n  },\\n\\n  componentWillMount: function () {\\n    invariant(\\n      this.getScrollBehavior() == null || canUseDOM,\\n      'Cannot use scroll behavior without a DOM'\\n    );\\n  },\\n\\n  componentDidMount: function () {\\n    this._updateScroll();\\n  },\\n\\n  componentDidUpdate: function (prevProps, prevState) {\\n    this._updateScroll(prevState);\\n  },\\n\\n  _updateScroll: function (prevState) {\\n    if (!shouldUpdateScroll(this.state, prevState))\\n      return;\\n\\n    var scrollBehavior = this.getScrollBehavior();\\n\\n    if (scrollBehavior)\\n      scrollBehavior.updateScrollPosition(\\n        this.constructor.getScrollPosition(this.state.path),\\n        this.state.action\\n      );\\n  }\\n\\n};\\n\\nmodule.exports = Scrolling;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/mixins/Scrolling.js\\n ** module id = 184\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/mixins/Scrolling.js?\");\n\n/***/ },\n/* 185 */\n/*!*****************************************************************!*\\\n  !*** ./~/react-router/modules/utils/getWindowScrollPosition.js ***!\n  \\*****************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var invariant = __webpack_require__(/*! react/lib/invariant */ 6);\\nvar canUseDOM = __webpack_require__(/*! react/lib/ExecutionEnvironment */ 49).canUseDOM;\\n\\n/**\\n * Returns the current scroll position of the window as { x, y }.\\n */\\nfunction getWindowScrollPosition() {\\n  invariant(\\n    canUseDOM,\\n    'Cannot get current scroll position without a DOM'\\n  );\\n\\n  return {\\n    x: window.pageXOffset || document.documentElement.scrollLeft,\\n    y: window.pageYOffset || document.documentElement.scrollTop\\n  };\\n}\\n\\nmodule.exports = getWindowScrollPosition;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/getWindowScrollPosition.js\\n ** module id = 185\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/getWindowScrollPosition.js?\");\n\n/***/ },\n/* 186 */\n/*!******************************************************************!*\\\n  !*** ./~/react-router/modules/utils/createRoutesFromChildren.js ***!\n  \\******************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* jshint -W084 */\\nvar React = __webpack_require__(/*! react */ 1);\\nvar warning = __webpack_require__(/*! react/lib/warning */ 11);\\nvar invariant = __webpack_require__(/*! react/lib/invariant */ 6);\\nvar DefaultRoute = __webpack_require__(/*! ../components/DefaultRoute */ 166);\\nvar NotFoundRoute = __webpack_require__(/*! ../components/NotFoundRoute */ 173);\\nvar Redirect = __webpack_require__(/*! ../components/Redirect */ 174);\\nvar Route = __webpack_require__(/*! ../components/Route */ 175);\\nvar Path = __webpack_require__(/*! ./Path */ 156);\\n\\nvar CONFIG_ELEMENT_TYPES = [\\n  DefaultRoute.type,\\n  NotFoundRoute.type,\\n  Redirect.type,\\n  Route.type\\n];\\n\\nfunction createRedirectHandler(to, _params, _query) {\\n  return React.createClass({\\n    statics: {\\n      willTransitionTo: function (transition, params, query) {\\n        transition.redirect(to, _params || params, _query || query);\\n      }\\n    },\\n\\n    render: function () {\\n      return null;\\n    }\\n  });\\n}\\n\\nfunction checkPropTypes(componentName, propTypes, props) {\\n  for (var propName in propTypes) {\\n    if (propTypes.hasOwnProperty(propName)) {\\n      var error = propTypes[propName](props, propName, componentName);\\n\\n      if (error instanceof Error)\\n        warning(false, error.message);\\n    }\\n  }\\n}\\n\\nfunction createRoute(element, parentRoute, namedRoutes) {\\n  var type = element.type;\\n  var props = element.props;\\n  var componentName = (type && type.displayName) || 'UnknownComponent';\\n\\n  invariant(\\n    CONFIG_ELEMENT_TYPES.indexOf(type) !== -1,\\n    'Unrecognized route configuration element \\\"<%s>\\\"',\\n    componentName\\n  );\\n\\n  if (type.propTypes)\\n    checkPropTypes(componentName, type.propTypes, props);\\n\\n  var route = { name: props.name };\\n\\n  if (props.ignoreScrollBehavior) {\\n    route.ignoreScrollBehavior = true;\\n  }\\n\\n  if (type === Redirect.type) {\\n    route.handler = createRedirectHandler(props.to, props.params, props.query);\\n    props.path = props.path || props.from || '*';\\n  } else {\\n    route.handler = props.handler;\\n  }\\n\\n  var parentPath = (parentRoute && parentRoute.path) || '/';\\n\\n  if ((props.path || props.name) && type !== DefaultRoute.type && type !== NotFoundRoute.type) {\\n    var path = props.path || props.name;\\n\\n    // Relative paths extend their parent.\\n    if (!Path.isAbsolute(path))\\n      path = Path.join(parentPath, path);\\n\\n    route.path = Path.normalize(path);\\n  } else {\\n    route.path = parentPath;\\n\\n    if (type === NotFoundRoute.type)\\n      route.path += '*';\\n  }\\n\\n  route.paramNames = Path.extractParamNames(route.path);\\n\\n  // Make sure the route's path has all params its parent needs.\\n  if (parentRoute && Array.isArray(parentRoute.paramNames)) {\\n    parentRoute.paramNames.forEach(function (paramName) {\\n      invariant(\\n        route.paramNames.indexOf(paramName) !== -1,\\n        'The nested route path \\\"%s\\\" is missing the \\\"%s\\\" parameter of its parent path \\\"%s\\\"',\\n        route.path, paramName, parentRoute.path\\n      );\\n    });\\n  }\\n\\n  // Make sure the route can be looked up by <Link>s.\\n  if (props.name) {\\n    invariant(\\n      namedRoutes[props.name] == null,\\n      'You cannot use the name \\\"%s\\\" for more than one route',\\n      props.name\\n    );\\n\\n    namedRoutes[props.name] = route;\\n  }\\n\\n  // Handle <NotFoundRoute>.\\n  if (type === NotFoundRoute.type) {\\n    invariant(\\n      parentRoute,\\n      '<NotFoundRoute> must have a parent <Route>'\\n    );\\n\\n    invariant(\\n      parentRoute.notFoundRoute == null,\\n      'You may not have more than one <NotFoundRoute> per <Route>'\\n    );\\n\\n    parentRoute.notFoundRoute = route;\\n\\n    return null;\\n  }\\n\\n  // Handle <DefaultRoute>.\\n  if (type === DefaultRoute.type) {\\n    invariant(\\n      parentRoute,\\n      '<DefaultRoute> must have a parent <Route>'\\n    );\\n\\n    invariant(\\n      parentRoute.defaultRoute == null,\\n      'You may not have more than one <DefaultRoute> per <Route>'\\n    );\\n\\n    parentRoute.defaultRoute = route;\\n\\n    return null;\\n  }\\n\\n  route.childRoutes = createRoutesFromChildren(props.children, route, namedRoutes);\\n\\n  return route;\\n}\\n\\n/**\\n * Creates and returns an array of route objects from the given ReactChildren.\\n */\\nfunction createRoutesFromChildren(children, parentRoute, namedRoutes) {\\n  var routes = [];\\n\\n  React.Children.forEach(children, function (child) {\\n    // Exclude <DefaultRoute>s and <NotFoundRoute>s.\\n    if (child = createRoute(child, parentRoute, namedRoutes))\\n      routes.push(child);\\n  });\\n\\n  return routes;\\n}\\n\\nmodule.exports = createRoutesFromChildren;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/createRoutesFromChildren.js\\n ** module id = 186\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/createRoutesFromChildren.js?\");\n\n/***/ },\n/* 187 */\n/*!*********************************************************!*\\\n  !*** ./~/react-router/modules/utils/supportsHistory.js ***!\n  \\*********************************************************/\n/***/ function(module, exports) {\n\n\teval(\"function supportsHistory() {\\n  /*! taken from modernizr\\n   * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\\n   * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\\n   * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586\\n   */\\n  var ua = navigator.userAgent;\\n  if ((ua.indexOf('Android 2.') !== -1 ||\\n      (ua.indexOf('Android 4.0') !== -1)) &&\\n      ua.indexOf('Mobile Safari') !== -1 &&\\n      ua.indexOf('Chrome') === -1 &&\\n      ua.indexOf('Windows Phone') === -1) {\\n    return false;\\n  }\\n  return (window.history && 'pushState' in window.history);\\n}\\n\\nmodule.exports = supportsHistory;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/supportsHistory.js\\n ** module id = 187\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/supportsHistory.js?\");\n\n/***/ },\n/* 188 */\n/*!****************************************************!*\\\n  !*** ./~/react-router/modules/utils/Transition.js ***!\n  \\****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var assign = __webpack_require__(/*! react/lib/Object.assign */ 21);\\nvar reversedArray = __webpack_require__(/*! ./reversedArray */ 189);\\nvar Redirect = __webpack_require__(/*! ./Redirect */ 190);\\nvar Promise = __webpack_require__(/*! ./Promise */ 191);\\n\\n/**\\n * Runs all hook functions serially and calls callback(error) when finished.\\n * A hook may return a promise if it needs to execute asynchronously.\\n */\\nfunction runHooks(hooks, callback) {\\n  var promise;\\n  try {\\n    promise = hooks.reduce(function (promise, hook) {\\n      // The first hook to use transition.wait makes the rest\\n      // of the transition async from that point forward.\\n      return promise ? promise.then(hook) : hook();\\n    }, null);\\n  } catch (error) {\\n    return callback(error); // Sync error.\\n  }\\n\\n  if (promise) {\\n    // Use setTimeout to break the promise chain.\\n    promise.then(function () {\\n      setTimeout(callback);\\n    }, function (error) {\\n      setTimeout(function () {\\n        callback(error);\\n      });\\n    });\\n  } else {\\n    callback();\\n  }\\n}\\n\\n/**\\n * Calls the willTransitionFrom hook of all handlers in the given matches\\n * serially in reverse with the transition object and the current instance of\\n * the route's handler, so that the deepest nested handlers are called first.\\n * Calls callback(error) when finished.\\n */\\nfunction runTransitionFromHooks(transition, routes, components, callback) {\\n  components = reversedArray(components);\\n\\n  var hooks = reversedArray(routes).map(function (route, index) {\\n    return function () {\\n      var handler = route.handler;\\n\\n      if (!transition.isAborted && handler.willTransitionFrom)\\n        return handler.willTransitionFrom(transition, components[index]);\\n\\n      var promise = transition._promise;\\n      transition._promise = null;\\n\\n      return promise;\\n    };\\n  });\\n\\n  runHooks(hooks, callback);\\n}\\n\\n/**\\n * Calls the willTransitionTo hook of all handlers in the given matches\\n * serially with the transition object and any params that apply to that\\n * handler. Calls callback(error) when finished.\\n */\\nfunction runTransitionToHooks(transition, routes, params, query, callback) {\\n  var hooks = routes.map(function (route) {\\n    return function () {\\n      var handler = route.handler;\\n\\n      if (!transition.isAborted && handler.willTransitionTo)\\n        handler.willTransitionTo(transition, params, query);\\n\\n      var promise = transition._promise;\\n      transition._promise = null;\\n\\n      return promise;\\n    };\\n  });\\n\\n  runHooks(hooks, callback);\\n}\\n\\n/**\\n * Encapsulates a transition to a given path.\\n *\\n * The willTransitionTo and willTransitionFrom handlers receive\\n * an instance of this class as their first argument.\\n */\\nfunction Transition(path, retry) {\\n  this.path = path;\\n  this.abortReason = null;\\n  this.isAborted = false;\\n  this.retry = retry.bind(this);\\n  this._promise = null;\\n}\\n\\nassign(Transition.prototype, {\\n\\n  abort: function (reason) {\\n    if (this.isAborted) {\\n      // First abort wins.\\n      return;\\n    }\\n\\n    this.abortReason = reason;\\n    this.isAborted = true;\\n  },\\n\\n  redirect: function (to, params, query) {\\n    this.abort(new Redirect(to, params, query));\\n  },\\n\\n  wait: function (value) {\\n    this._promise = Promise.resolve(value);\\n  },\\n\\n  from: function (routes, components, callback) {\\n    return runTransitionFromHooks(this, routes, components, callback);\\n  },\\n\\n  to: function (routes, params, query, callback) {\\n    return runTransitionToHooks(this, routes, params, query, callback);\\n  }\\n\\n});\\n\\nmodule.exports = Transition;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/Transition.js\\n ** module id = 188\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/Transition.js?\");\n\n/***/ },\n/* 189 */\n/*!*******************************************************!*\\\n  !*** ./~/react-router/modules/utils/reversedArray.js ***!\n  \\*******************************************************/\n/***/ function(module, exports) {\n\n\teval(\"function reversedArray(array) {\\n  return array.slice(0).reverse();\\n}\\n\\nmodule.exports = reversedArray;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/reversedArray.js\\n ** module id = 189\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/reversedArray.js?\");\n\n/***/ },\n/* 190 */\n/*!**************************************************!*\\\n  !*** ./~/react-router/modules/utils/Redirect.js ***!\n  \\**************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Encapsulates a redirect to the given route.\\n */\\nfunction Redirect(to, params, query) {\\n  this.to = to;\\n  this.params = params;\\n  this.query = query;\\n}\\n\\nmodule.exports = Redirect;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/Redirect.js\\n ** module id = 190\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/Redirect.js?\");\n\n/***/ },\n/* 191 */\n/*!*************************************************!*\\\n  !*** ./~/react-router/modules/utils/Promise.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var Promise = __webpack_require__(/*! when/lib/Promise */ 192);\\n\\n// TODO: Use process.env.NODE_ENV check + envify to enable\\n// when's promise monitor here when in dev.\\n\\nmodule.exports = Promise;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/Promise.js\\n ** module id = 191\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/Promise.js?\");\n\n/***/ },\n/* 192 */\n/*!**********************************************!*\\\n  !*** ./~/react-router/~/when/lib/Promise.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */\\n/** @author Brian Cavalier */\\n/** @author John Hann */\\n\\n(function(define) { 'use strict';\\n!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {\\n\\n\\tvar makePromise = __webpack_require__(/*! ./makePromise */ 194);\\n\\tvar Scheduler = __webpack_require__(/*! ./Scheduler */ 195);\\n\\tvar async = __webpack_require__(/*! ./async */ 197);\\n\\n\\treturn makePromise({\\n\\t\\tscheduler: new Scheduler(async)\\n\\t});\\n\\n}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n})(__webpack_require__(/*! !webpack amd define */ 193));\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/when/lib/Promise.js\\n ** module id = 192\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/when/lib/Promise.js?\");\n\n/***/ },\n/* 193 */\n/*!***************************************!*\\\n  !*** (webpack)/buildin/amd-define.js ***!\n  \\***************************************/\n/***/ function(module, exports) {\n\n\teval(\"module.exports = function() { throw new Error(\\\"define cannot be used indirect\\\"); };\\r\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** (webpack)/buildin/amd-define.js\\n ** module id = 193\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///(webpack)/buildin/amd-define.js?\");\n\n/***/ },\n/* 194 */\n/*!**************************************************!*\\\n  !*** ./~/react-router/~/when/lib/makePromise.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */\\n/** @author Brian Cavalier */\\n/** @author John Hann */\\n\\n(function(define) { 'use strict';\\n!(__WEBPACK_AMD_DEFINE_RESULT__ = function() {\\n\\n\\treturn function makePromise(environment) {\\n\\n\\t\\tvar tasks = environment.scheduler;\\n\\n\\t\\tvar objectCreate = Object.create ||\\n\\t\\t\\tfunction(proto) {\\n\\t\\t\\t\\tfunction Child() {}\\n\\t\\t\\t\\tChild.prototype = proto;\\n\\t\\t\\t\\treturn new Child();\\n\\t\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * Create a promise whose fate is determined by resolver\\n\\t\\t * @constructor\\n\\t\\t * @returns {Promise} promise\\n\\t\\t * @name Promise\\n\\t\\t */\\n\\t\\tfunction Promise(resolver, handler) {\\n\\t\\t\\tthis._handler = resolver === Handler ? handler : init(resolver);\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Run the supplied resolver\\n\\t\\t * @param resolver\\n\\t\\t * @returns {Pending}\\n\\t\\t */\\n\\t\\tfunction init(resolver) {\\n\\t\\t\\tvar handler = new Pending();\\n\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tresolver(promiseResolve, promiseReject, promiseNotify);\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\tpromiseReject(e);\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn handler;\\n\\n\\t\\t\\t/**\\n\\t\\t\\t * Transition from pre-resolution state to post-resolution state, notifying\\n\\t\\t\\t * all listeners of the ultimate fulfillment or rejection\\n\\t\\t\\t * @param {*} x resolution value\\n\\t\\t\\t */\\n\\t\\t\\tfunction promiseResolve (x) {\\n\\t\\t\\t\\thandler.resolve(x);\\n\\t\\t\\t}\\n\\t\\t\\t/**\\n\\t\\t\\t * Reject this promise with reason, which will be used verbatim\\n\\t\\t\\t * @param {Error|*} reason rejection reason, strongly suggested\\n\\t\\t\\t *   to be an Error type\\n\\t\\t\\t */\\n\\t\\t\\tfunction promiseReject (reason) {\\n\\t\\t\\t\\thandler.reject(reason);\\n\\t\\t\\t}\\n\\n\\t\\t\\t/**\\n\\t\\t\\t * Issue a progress event, notifying all progress listeners\\n\\t\\t\\t * @param {*} x progress event payload to pass to all listeners\\n\\t\\t\\t */\\n\\t\\t\\tfunction promiseNotify (x) {\\n\\t\\t\\t\\thandler.notify(x);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Creation\\n\\n\\t\\tPromise.resolve = resolve;\\n\\t\\tPromise.reject = reject;\\n\\t\\tPromise.never = never;\\n\\n\\t\\tPromise._defer = defer;\\n\\t\\tPromise._handler = getHandler;\\n\\n\\t\\t/**\\n\\t\\t * Returns a trusted promise. If x is already a trusted promise, it is\\n\\t\\t * returned, otherwise returns a new trusted Promise which follows x.\\n\\t\\t * @param  {*} x\\n\\t\\t * @return {Promise} promise\\n\\t\\t */\\n\\t\\tfunction resolve(x) {\\n\\t\\t\\treturn isPromise(x) ? x\\n\\t\\t\\t\\t: new Promise(Handler, new Async(getHandler(x)));\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Return a reject promise with x as its reason (x is used verbatim)\\n\\t\\t * @param {*} x\\n\\t\\t * @returns {Promise} rejected promise\\n\\t\\t */\\n\\t\\tfunction reject(x) {\\n\\t\\t\\treturn new Promise(Handler, new Async(new Rejected(x)));\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Return a promise that remains pending forever\\n\\t\\t * @returns {Promise} forever-pending promise.\\n\\t\\t */\\n\\t\\tfunction never() {\\n\\t\\t\\treturn foreverPendingPromise; // Should be frozen\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Creates an internal {promise, resolver} pair\\n\\t\\t * @private\\n\\t\\t * @returns {Promise}\\n\\t\\t */\\n\\t\\tfunction defer() {\\n\\t\\t\\treturn new Promise(Handler, new Pending());\\n\\t\\t}\\n\\n\\t\\t// Transformation and flow control\\n\\n\\t\\t/**\\n\\t\\t * Transform this promise's fulfillment value, returning a new Promise\\n\\t\\t * for the transformed result.  If the promise cannot be fulfilled, onRejected\\n\\t\\t * is called with the reason.  onProgress *may* be called with updates toward\\n\\t\\t * this promise's fulfillment.\\n\\t\\t * @param {function=} onFulfilled fulfillment handler\\n\\t\\t * @param {function=} onRejected rejection handler\\n\\t\\t * @deprecated @param {function=} onProgress progress handler\\n\\t\\t * @return {Promise} new promise\\n\\t\\t */\\n\\t\\tPromise.prototype.then = function(onFulfilled, onRejected) {\\n\\t\\t\\tvar parent = this._handler;\\n\\t\\t\\tvar state = parent.join().state();\\n\\n\\t\\t\\tif ((typeof onFulfilled !== 'function' && state > 0) ||\\n\\t\\t\\t\\t(typeof onRejected !== 'function' && state < 0)) {\\n\\t\\t\\t\\t// Short circuit: value will not change, simply share handler\\n\\t\\t\\t\\treturn new this.constructor(Handler, parent);\\n\\t\\t\\t}\\n\\n\\t\\t\\tvar p = this._beget();\\n\\t\\t\\tvar child = p._handler;\\n\\n\\t\\t\\tparent.chain(child, parent.receiver, onFulfilled, onRejected,\\n\\t\\t\\t\\t\\targuments.length > 2 ? arguments[2] : void 0);\\n\\n\\t\\t\\treturn p;\\n\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * If this promise cannot be fulfilled due to an error, call onRejected to\\n\\t\\t * handle the error. Shortcut for .then(undefined, onRejected)\\n\\t\\t * @param {function?} onRejected\\n\\t\\t * @return {Promise}\\n\\t\\t */\\n\\t\\tPromise.prototype['catch'] = function(onRejected) {\\n\\t\\t\\treturn this.then(void 0, onRejected);\\n\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * Creates a new, pending promise of the same type as this promise\\n\\t\\t * @private\\n\\t\\t * @returns {Promise}\\n\\t\\t */\\n\\t\\tPromise.prototype._beget = function() {\\n\\t\\t\\tvar parent = this._handler;\\n\\t\\t\\tvar child = new Pending(parent.receiver, parent.join().context);\\n\\t\\t\\treturn new this.constructor(Handler, child);\\n\\t\\t};\\n\\n\\t\\t// Array combinators\\n\\n\\t\\tPromise.all = all;\\n\\t\\tPromise.race = race;\\n\\n\\t\\t/**\\n\\t\\t * Return a promise that will fulfill when all promises in the\\n\\t\\t * input array have fulfilled, or will reject when one of the\\n\\t\\t * promises rejects.\\n\\t\\t * @param {array} promises array of promises\\n\\t\\t * @returns {Promise} promise for array of fulfillment values\\n\\t\\t */\\n\\t\\tfunction all(promises) {\\n\\t\\t\\t/*jshint maxcomplexity:8*/\\n\\t\\t\\tvar resolver = new Pending();\\n\\t\\t\\tvar pending = promises.length >>> 0;\\n\\t\\t\\tvar results = new Array(pending);\\n\\n\\t\\t\\tvar i, h, x, s;\\n\\t\\t\\tfor (i = 0; i < promises.length; ++i) {\\n\\t\\t\\t\\tx = promises[i];\\n\\n\\t\\t\\t\\tif (x === void 0 && !(i in promises)) {\\n\\t\\t\\t\\t\\t--pending;\\n\\t\\t\\t\\t\\tcontinue;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tif (maybeThenable(x)) {\\n\\t\\t\\t\\t\\th = getHandlerMaybeThenable(x);\\n\\n\\t\\t\\t\\t\\ts = h.state();\\n\\t\\t\\t\\t\\tif (s === 0) {\\n\\t\\t\\t\\t\\t\\th.fold(settleAt, i, results, resolver);\\n\\t\\t\\t\\t\\t} else if (s > 0) {\\n\\t\\t\\t\\t\\t\\tresults[i] = h.value;\\n\\t\\t\\t\\t\\t\\t--pending;\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tunreportRemaining(promises, i+1, h);\\n\\t\\t\\t\\t\\t\\tresolver.become(h);\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tresults[i] = x;\\n\\t\\t\\t\\t\\t--pending;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tif(pending === 0) {\\n\\t\\t\\t\\tresolver.become(new Fulfilled(results));\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn new Promise(Handler, resolver);\\n\\n\\t\\t\\tfunction settleAt(i, x, resolver) {\\n\\t\\t\\t\\t/*jshint validthis:true*/\\n\\t\\t\\t\\tthis[i] = x;\\n\\t\\t\\t\\tif(--pending === 0) {\\n\\t\\t\\t\\t\\tresolver.become(new Fulfilled(this));\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tfunction unreportRemaining(promises, start, rejectedHandler) {\\n\\t\\t\\tvar i, h, x;\\n\\t\\t\\tfor(i=start; i<promises.length; ++i) {\\n\\t\\t\\t\\tx = promises[i];\\n\\t\\t\\t\\tif(maybeThenable(x)) {\\n\\t\\t\\t\\t\\th = getHandlerMaybeThenable(x);\\n\\n\\t\\t\\t\\t\\tif(h !== rejectedHandler) {\\n\\t\\t\\t\\t\\t\\th.visit(h, void 0, h._unreport);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Fulfill-reject competitive race. Return a promise that will settle\\n\\t\\t * to the same state as the earliest input promise to settle.\\n\\t\\t *\\n\\t\\t * WARNING: The ES6 Promise spec requires that race()ing an empty array\\n\\t\\t * must return a promise that is pending forever.  This implementation\\n\\t\\t * returns a singleton forever-pending promise, the same singleton that is\\n\\t\\t * returned by Promise.never(), thus can be checked with ===\\n\\t\\t *\\n\\t\\t * @param {array} promises array of promises to race\\n\\t\\t * @returns {Promise} if input is non-empty, a promise that will settle\\n\\t\\t * to the same outcome as the earliest input promise to settle. if empty\\n\\t\\t * is empty, returns a promise that will never settle.\\n\\t\\t */\\n\\t\\tfunction race(promises) {\\n\\t\\t\\t// Sigh, race([]) is untestable unless we return *something*\\n\\t\\t\\t// that is recognizable without calling .then() on it.\\n\\t\\t\\tif(Object(promises) === promises && promises.length === 0) {\\n\\t\\t\\t\\treturn never();\\n\\t\\t\\t}\\n\\n\\t\\t\\tvar h = new Pending();\\n\\t\\t\\tvar i, x;\\n\\t\\t\\tfor(i=0; i<promises.length; ++i) {\\n\\t\\t\\t\\tx = promises[i];\\n\\t\\t\\t\\tif (x !== void 0 && i in promises) {\\n\\t\\t\\t\\t\\tgetHandler(x).visit(h, h.resolve, h.reject);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\treturn new Promise(Handler, h);\\n\\t\\t}\\n\\n\\t\\t// Promise internals\\n\\t\\t// Below this, everything is @private\\n\\n\\t\\t/**\\n\\t\\t * Get an appropriate handler for x, without checking for cycles\\n\\t\\t * @param {*} x\\n\\t\\t * @returns {object} handler\\n\\t\\t */\\n\\t\\tfunction getHandler(x) {\\n\\t\\t\\tif(isPromise(x)) {\\n\\t\\t\\t\\treturn x._handler.join();\\n\\t\\t\\t}\\n\\t\\t\\treturn maybeThenable(x) ? getHandlerUntrusted(x) : new Fulfilled(x);\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Get a handler for thenable x.\\n\\t\\t * NOTE: You must only call this if maybeThenable(x) == true\\n\\t\\t * @param {object|function|Promise} x\\n\\t\\t * @returns {object} handler\\n\\t\\t */\\n\\t\\tfunction getHandlerMaybeThenable(x) {\\n\\t\\t\\treturn isPromise(x) ? x._handler.join() : getHandlerUntrusted(x);\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Get a handler for potentially untrusted thenable x\\n\\t\\t * @param {*} x\\n\\t\\t * @returns {object} handler\\n\\t\\t */\\n\\t\\tfunction getHandlerUntrusted(x) {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tvar untrustedThen = x.then;\\n\\t\\t\\t\\treturn typeof untrustedThen === 'function'\\n\\t\\t\\t\\t\\t? new Thenable(untrustedThen, x)\\n\\t\\t\\t\\t\\t: new Fulfilled(x);\\n\\t\\t\\t} catch(e) {\\n\\t\\t\\t\\treturn new Rejected(e);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Handler for a promise that is pending forever\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction Handler() {}\\n\\n\\t\\tHandler.prototype.when\\n\\t\\t\\t= Handler.prototype.become\\n\\t\\t\\t= Handler.prototype.notify\\n\\t\\t\\t= Handler.prototype.fail\\n\\t\\t\\t= Handler.prototype._unreport\\n\\t\\t\\t= Handler.prototype._report\\n\\t\\t\\t= noop;\\n\\n\\t\\tHandler.prototype._state = 0;\\n\\n\\t\\tHandler.prototype.state = function() {\\n\\t\\t\\treturn this._state;\\n\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * Recursively collapse handler chain to find the handler\\n\\t\\t * nearest to the fully resolved value.\\n\\t\\t * @returns {object} handler nearest the fully resolved value\\n\\t\\t */\\n\\t\\tHandler.prototype.join = function() {\\n\\t\\t\\tvar h = this;\\n\\t\\t\\twhile(h.handler !== void 0) {\\n\\t\\t\\t\\th = h.handler;\\n\\t\\t\\t}\\n\\t\\t\\treturn h;\\n\\t\\t};\\n\\n\\t\\tHandler.prototype.chain = function(to, receiver, fulfilled, rejected, progress) {\\n\\t\\t\\tthis.when({\\n\\t\\t\\t\\tresolver: to,\\n\\t\\t\\t\\treceiver: receiver,\\n\\t\\t\\t\\tfulfilled: fulfilled,\\n\\t\\t\\t\\trejected: rejected,\\n\\t\\t\\t\\tprogress: progress\\n\\t\\t\\t});\\n\\t\\t};\\n\\n\\t\\tHandler.prototype.visit = function(receiver, fulfilled, rejected, progress) {\\n\\t\\t\\tthis.chain(failIfRejected, receiver, fulfilled, rejected, progress);\\n\\t\\t};\\n\\n\\t\\tHandler.prototype.fold = function(f, z, c, to) {\\n\\t\\t\\tthis.visit(to, function(x) {\\n\\t\\t\\t\\tf.call(c, z, x, this);\\n\\t\\t\\t}, to.reject, to.notify);\\n\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * Handler that invokes fail() on any handler it becomes\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction FailIfRejected() {}\\n\\n\\t\\tinherit(Handler, FailIfRejected);\\n\\n\\t\\tFailIfRejected.prototype.become = function(h) {\\n\\t\\t\\th.fail();\\n\\t\\t};\\n\\n\\t\\tvar failIfRejected = new FailIfRejected();\\n\\n\\t\\t/**\\n\\t\\t * Handler that manages a queue of consumers waiting on a pending promise\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction Pending(receiver, inheritedContext) {\\n\\t\\t\\tPromise.createContext(this, inheritedContext);\\n\\n\\t\\t\\tthis.consumers = void 0;\\n\\t\\t\\tthis.receiver = receiver;\\n\\t\\t\\tthis.handler = void 0;\\n\\t\\t\\tthis.resolved = false;\\n\\t\\t}\\n\\n\\t\\tinherit(Handler, Pending);\\n\\n\\t\\tPending.prototype._state = 0;\\n\\n\\t\\tPending.prototype.resolve = function(x) {\\n\\t\\t\\tthis.become(getHandler(x));\\n\\t\\t};\\n\\n\\t\\tPending.prototype.reject = function(x) {\\n\\t\\t\\tif(this.resolved) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\n\\t\\t\\tthis.become(new Rejected(x));\\n\\t\\t};\\n\\n\\t\\tPending.prototype.join = function() {\\n\\t\\t\\tif (!this.resolved) {\\n\\t\\t\\t\\treturn this;\\n\\t\\t\\t}\\n\\n\\t\\t\\tvar h = this;\\n\\n\\t\\t\\twhile (h.handler !== void 0) {\\n\\t\\t\\t\\th = h.handler;\\n\\t\\t\\t\\tif (h === this) {\\n\\t\\t\\t\\t\\treturn this.handler = cycle();\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn h;\\n\\t\\t};\\n\\n\\t\\tPending.prototype.run = function() {\\n\\t\\t\\tvar q = this.consumers;\\n\\t\\t\\tvar handler = this.join();\\n\\t\\t\\tthis.consumers = void 0;\\n\\n\\t\\t\\tfor (var i = 0; i < q.length; ++i) {\\n\\t\\t\\t\\thandler.when(q[i]);\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\tPending.prototype.become = function(handler) {\\n\\t\\t\\tif(this.resolved) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\n\\t\\t\\tthis.resolved = true;\\n\\t\\t\\tthis.handler = handler;\\n\\t\\t\\tif(this.consumers !== void 0) {\\n\\t\\t\\t\\ttasks.enqueue(this);\\n\\t\\t\\t}\\n\\n\\t\\t\\tif(this.context !== void 0) {\\n\\t\\t\\t\\thandler._report(this.context);\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\tPending.prototype.when = function(continuation) {\\n\\t\\t\\tif(this.resolved) {\\n\\t\\t\\t\\ttasks.enqueue(new ContinuationTask(continuation, this.handler));\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tif(this.consumers === void 0) {\\n\\t\\t\\t\\t\\tthis.consumers = [continuation];\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tthis.consumers.push(continuation);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\tPending.prototype.notify = function(x) {\\n\\t\\t\\tif(!this.resolved) {\\n\\t\\t\\t\\ttasks.enqueue(new ProgressTask(x, this));\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\tPending.prototype.fail = function(context) {\\n\\t\\t\\tvar c = typeof context === 'undefined' ? this.context : context;\\n\\t\\t\\tthis.resolved && this.handler.join().fail(c);\\n\\t\\t};\\n\\n\\t\\tPending.prototype._report = function(context) {\\n\\t\\t\\tthis.resolved && this.handler.join()._report(context);\\n\\t\\t};\\n\\n\\t\\tPending.prototype._unreport = function() {\\n\\t\\t\\tthis.resolved && this.handler.join()._unreport();\\n\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * Wrap another handler and force it into a future stack\\n\\t\\t * @param {object} handler\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction Async(handler) {\\n\\t\\t\\tthis.handler = handler;\\n\\t\\t}\\n\\n\\t\\tinherit(Handler, Async);\\n\\n\\t\\tAsync.prototype.when = function(continuation) {\\n\\t\\t\\ttasks.enqueue(new ContinuationTask(continuation, this));\\n\\t\\t};\\n\\n\\t\\tAsync.prototype._report = function(context) {\\n\\t\\t\\tthis.join()._report(context);\\n\\t\\t};\\n\\n\\t\\tAsync.prototype._unreport = function() {\\n\\t\\t\\tthis.join()._unreport();\\n\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * Handler that wraps an untrusted thenable and assimilates it in a future stack\\n\\t\\t * @param {function} then\\n\\t\\t * @param {{then: function}} thenable\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction Thenable(then, thenable) {\\n\\t\\t\\tPending.call(this);\\n\\t\\t\\ttasks.enqueue(new AssimilateTask(then, thenable, this));\\n\\t\\t}\\n\\n\\t\\tinherit(Pending, Thenable);\\n\\n\\t\\t/**\\n\\t\\t * Handler for a fulfilled promise\\n\\t\\t * @param {*} x fulfillment value\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction Fulfilled(x) {\\n\\t\\t\\tPromise.createContext(this);\\n\\t\\t\\tthis.value = x;\\n\\t\\t}\\n\\n\\t\\tinherit(Handler, Fulfilled);\\n\\n\\t\\tFulfilled.prototype._state = 1;\\n\\n\\t\\tFulfilled.prototype.fold = function(f, z, c, to) {\\n\\t\\t\\trunContinuation3(f, z, this, c, to);\\n\\t\\t};\\n\\n\\t\\tFulfilled.prototype.when = function(cont) {\\n\\t\\t\\trunContinuation1(cont.fulfilled, this, cont.receiver, cont.resolver);\\n\\t\\t};\\n\\n\\t\\tvar errorId = 0;\\n\\n\\t\\t/**\\n\\t\\t * Handler for a rejected promise\\n\\t\\t * @param {*} x rejection reason\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction Rejected(x) {\\n\\t\\t\\tPromise.createContext(this);\\n\\n\\t\\t\\tthis.id = ++errorId;\\n\\t\\t\\tthis.value = x;\\n\\t\\t\\tthis.handled = false;\\n\\t\\t\\tthis.reported = false;\\n\\n\\t\\t\\tthis._report();\\n\\t\\t}\\n\\n\\t\\tinherit(Handler, Rejected);\\n\\n\\t\\tRejected.prototype._state = -1;\\n\\n\\t\\tRejected.prototype.fold = function(f, z, c, to) {\\n\\t\\t\\tto.become(this);\\n\\t\\t};\\n\\n\\t\\tRejected.prototype.when = function(cont) {\\n\\t\\t\\tif(typeof cont.rejected === 'function') {\\n\\t\\t\\t\\tthis._unreport();\\n\\t\\t\\t}\\n\\t\\t\\trunContinuation1(cont.rejected, this, cont.receiver, cont.resolver);\\n\\t\\t};\\n\\n\\t\\tRejected.prototype._report = function(context) {\\n\\t\\t\\ttasks.afterQueue(new ReportTask(this, context));\\n\\t\\t};\\n\\n\\t\\tRejected.prototype._unreport = function() {\\n\\t\\t\\tthis.handled = true;\\n\\t\\t\\ttasks.afterQueue(new UnreportTask(this));\\n\\t\\t};\\n\\n\\t\\tRejected.prototype.fail = function(context) {\\n\\t\\t\\tPromise.onFatalRejection(this, context === void 0 ? this.context : context);\\n\\t\\t};\\n\\n\\t\\tfunction ReportTask(rejection, context) {\\n\\t\\t\\tthis.rejection = rejection;\\n\\t\\t\\tthis.context = context;\\n\\t\\t}\\n\\n\\t\\tReportTask.prototype.run = function() {\\n\\t\\t\\tif(!this.rejection.handled) {\\n\\t\\t\\t\\tthis.rejection.reported = true;\\n\\t\\t\\t\\tPromise.onPotentiallyUnhandledRejection(this.rejection, this.context);\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\tfunction UnreportTask(rejection) {\\n\\t\\t\\tthis.rejection = rejection;\\n\\t\\t}\\n\\n\\t\\tUnreportTask.prototype.run = function() {\\n\\t\\t\\tif(this.rejection.reported) {\\n\\t\\t\\t\\tPromise.onPotentiallyUnhandledRejectionHandled(this.rejection);\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\t// Unhandled rejection hooks\\n\\t\\t// By default, everything is a noop\\n\\n\\t\\t// TODO: Better names: \\\"annotate\\\"?\\n\\t\\tPromise.createContext\\n\\t\\t\\t= Promise.enterContext\\n\\t\\t\\t= Promise.exitContext\\n\\t\\t\\t= Promise.onPotentiallyUnhandledRejection\\n\\t\\t\\t= Promise.onPotentiallyUnhandledRejectionHandled\\n\\t\\t\\t= Promise.onFatalRejection\\n\\t\\t\\t= noop;\\n\\n\\t\\t// Errors and singletons\\n\\n\\t\\tvar foreverPendingHandler = new Handler();\\n\\t\\tvar foreverPendingPromise = new Promise(Handler, foreverPendingHandler);\\n\\n\\t\\tfunction cycle() {\\n\\t\\t\\treturn new Rejected(new TypeError('Promise cycle'));\\n\\t\\t}\\n\\n\\t\\t// Task runners\\n\\n\\t\\t/**\\n\\t\\t * Run a single consumer\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction ContinuationTask(continuation, handler) {\\n\\t\\t\\tthis.continuation = continuation;\\n\\t\\t\\tthis.handler = handler;\\n\\t\\t}\\n\\n\\t\\tContinuationTask.prototype.run = function() {\\n\\t\\t\\tthis.handler.join().when(this.continuation);\\n\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * Run a queue of progress handlers\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction ProgressTask(value, handler) {\\n\\t\\t\\tthis.handler = handler;\\n\\t\\t\\tthis.value = value;\\n\\t\\t}\\n\\n\\t\\tProgressTask.prototype.run = function() {\\n\\t\\t\\tvar q = this.handler.consumers;\\n\\t\\t\\tif(q === void 0) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\n\\t\\t\\tfor (var c, i = 0; i < q.length; ++i) {\\n\\t\\t\\t\\tc = q[i];\\n\\t\\t\\t\\trunNotify(c.progress, this.value, this.handler, c.receiver, c.resolver);\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * Assimilate a thenable, sending it's value to resolver\\n\\t\\t * @param {function} then\\n\\t\\t * @param {object|function} thenable\\n\\t\\t * @param {object} resolver\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction AssimilateTask(then, thenable, resolver) {\\n\\t\\t\\tthis._then = then;\\n\\t\\t\\tthis.thenable = thenable;\\n\\t\\t\\tthis.resolver = resolver;\\n\\t\\t}\\n\\n\\t\\tAssimilateTask.prototype.run = function() {\\n\\t\\t\\tvar h = this.resolver;\\n\\t\\t\\ttryAssimilate(this._then, this.thenable, _resolve, _reject, _notify);\\n\\n\\t\\t\\tfunction _resolve(x) { h.resolve(x); }\\n\\t\\t\\tfunction _reject(x)  { h.reject(x); }\\n\\t\\t\\tfunction _notify(x)  { h.notify(x); }\\n\\t\\t};\\n\\n\\t\\tfunction tryAssimilate(then, thenable, resolve, reject, notify) {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tthen.call(thenable, resolve, reject, notify);\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\treject(e);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Other helpers\\n\\n\\t\\t/**\\n\\t\\t * @param {*} x\\n\\t\\t * @returns {boolean} true iff x is a trusted Promise\\n\\t\\t */\\n\\t\\tfunction isPromise(x) {\\n\\t\\t\\treturn x instanceof Promise;\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Test just enough to rule out primitives, in order to take faster\\n\\t\\t * paths in some code\\n\\t\\t * @param {*} x\\n\\t\\t * @returns {boolean} false iff x is guaranteed *not* to be a thenable\\n\\t\\t */\\n\\t\\tfunction maybeThenable(x) {\\n\\t\\t\\treturn (typeof x === 'object' || typeof x === 'function') && x !== null;\\n\\t\\t}\\n\\n\\t\\tfunction runContinuation1(f, h, receiver, next) {\\n\\t\\t\\tif(typeof f !== 'function') {\\n\\t\\t\\t\\treturn next.become(h);\\n\\t\\t\\t}\\n\\n\\t\\t\\tPromise.enterContext(h);\\n\\t\\t\\ttryCatchReject(f, h.value, receiver, next);\\n\\t\\t\\tPromise.exitContext();\\n\\t\\t}\\n\\n\\t\\tfunction runContinuation3(f, x, h, receiver, next) {\\n\\t\\t\\tif(typeof f !== 'function') {\\n\\t\\t\\t\\treturn next.become(h);\\n\\t\\t\\t}\\n\\n\\t\\t\\tPromise.enterContext(h);\\n\\t\\t\\ttryCatchReject3(f, x, h.value, receiver, next);\\n\\t\\t\\tPromise.exitContext();\\n\\t\\t}\\n\\n\\t\\tfunction runNotify(f, x, h, receiver, next) {\\n\\t\\t\\tif(typeof f !== 'function') {\\n\\t\\t\\t\\treturn next.notify(x);\\n\\t\\t\\t}\\n\\n\\t\\t\\tPromise.enterContext(h);\\n\\t\\t\\ttryCatchReturn(f, x, receiver, next);\\n\\t\\t\\tPromise.exitContext();\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Return f.call(thisArg, x), or if it throws return a rejected promise for\\n\\t\\t * the thrown exception\\n\\t\\t */\\n\\t\\tfunction tryCatchReject(f, x, thisArg, next) {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tnext.become(getHandler(f.call(thisArg, x)));\\n\\t\\t\\t} catch(e) {\\n\\t\\t\\t\\tnext.become(new Rejected(e));\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Same as above, but includes the extra argument parameter.\\n\\t\\t */\\n\\t\\tfunction tryCatchReject3(f, x, y, thisArg, next) {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tf.call(thisArg, x, y, next);\\n\\t\\t\\t} catch(e) {\\n\\t\\t\\t\\tnext.become(new Rejected(e));\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Return f.call(thisArg, x), or if it throws, *return* the exception\\n\\t\\t */\\n\\t\\tfunction tryCatchReturn(f, x, thisArg, next) {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tnext.notify(f.call(thisArg, x));\\n\\t\\t\\t} catch(e) {\\n\\t\\t\\t\\tnext.notify(e);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tfunction inherit(Parent, Child) {\\n\\t\\t\\tChild.prototype = objectCreate(Parent.prototype);\\n\\t\\t\\tChild.prototype.constructor = Child;\\n\\t\\t}\\n\\n\\t\\tfunction noop() {}\\n\\n\\t\\treturn Promise;\\n\\t};\\n}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n}(__webpack_require__(/*! !webpack amd define */ 193)));\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/when/lib/makePromise.js\\n ** module id = 194\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/when/lib/makePromise.js?\");\n\n/***/ },\n/* 195 */\n/*!************************************************!*\\\n  !*** ./~/react-router/~/when/lib/Scheduler.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */\\n/** @author Brian Cavalier */\\n/** @author John Hann */\\n\\n(function(define) { 'use strict';\\n!(__WEBPACK_AMD_DEFINE_RESULT__ = function(require) {\\n\\n\\tvar Queue = __webpack_require__(/*! ./Queue */ 196);\\n\\n\\t// Credit to Twisol (https://github.com/Twisol) for suggesting\\n\\t// this type of extensible queue + trampoline approach for next-tick conflation.\\n\\n\\t/**\\n\\t * Async task scheduler\\n\\t * @param {function} async function to schedule a single async function\\n\\t * @constructor\\n\\t */\\n\\tfunction Scheduler(async) {\\n\\t\\tthis._async = async;\\n\\t\\tthis._queue = new Queue(15);\\n\\t\\tthis._afterQueue = new Queue(5);\\n\\t\\tthis._running = false;\\n\\n\\t\\tvar self = this;\\n\\t\\tthis.drain = function() {\\n\\t\\t\\tself._drain();\\n\\t\\t};\\n\\t}\\n\\n\\t/**\\n\\t * Enqueue a task\\n\\t * @param {{ run:function }} task\\n\\t */\\n\\tScheduler.prototype.enqueue = function(task) {\\n\\t\\tthis._add(this._queue, task);\\n\\t};\\n\\n\\t/**\\n\\t * Enqueue a task to run after the main task queue\\n\\t * @param {{ run:function }} task\\n\\t */\\n\\tScheduler.prototype.afterQueue = function(task) {\\n\\t\\tthis._add(this._afterQueue, task);\\n\\t};\\n\\n\\t/**\\n\\t * Drain the handler queue entirely, and then the after queue\\n\\t */\\n\\tScheduler.prototype._drain = function() {\\n\\t\\trunQueue(this._queue);\\n\\t\\tthis._running = false;\\n\\t\\trunQueue(this._afterQueue);\\n\\t};\\n\\n\\t/**\\n\\t * Add a task to the q, and schedule drain if not already scheduled\\n\\t * @param {Queue} queue\\n\\t * @param {{run:function}} task\\n\\t * @private\\n\\t */\\n\\tScheduler.prototype._add = function(queue, task) {\\n\\t\\tqueue.push(task);\\n\\t\\tif(!this._running) {\\n\\t\\t\\tthis._running = true;\\n\\t\\t\\tthis._async(this.drain);\\n\\t\\t}\\n\\t};\\n\\n\\t/**\\n\\t * Run all the tasks in the q\\n\\t * @param queue\\n\\t */\\n\\tfunction runQueue(queue) {\\n\\t\\twhile(queue.length > 0) {\\n\\t\\t\\tqueue.shift().run();\\n\\t\\t}\\n\\t}\\n\\n\\treturn Scheduler;\\n\\n}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n}(__webpack_require__(/*! !webpack amd define */ 193)));\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/when/lib/Scheduler.js\\n ** module id = 195\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/when/lib/Scheduler.js?\");\n\n/***/ },\n/* 196 */\n/*!********************************************!*\\\n  !*** ./~/react-router/~/when/lib/Queue.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */\\n/** @author Brian Cavalier */\\n/** @author John Hann */\\n\\n(function(define) { 'use strict';\\n!(__WEBPACK_AMD_DEFINE_RESULT__ = function() {\\n\\t/**\\n\\t * Circular queue\\n\\t * @param {number} capacityPow2 power of 2 to which this queue's capacity\\n\\t *  will be set initially. eg when capacityPow2 == 3, queue capacity\\n\\t *  will be 8.\\n\\t * @constructor\\n\\t */\\n\\tfunction Queue(capacityPow2) {\\n\\t\\tthis.head = this.tail = this.length = 0;\\n\\t\\tthis.buffer = new Array(1 << capacityPow2);\\n\\t}\\n\\n\\tQueue.prototype.push = function(x) {\\n\\t\\tif(this.length === this.buffer.length) {\\n\\t\\t\\tthis._ensureCapacity(this.length * 2);\\n\\t\\t}\\n\\n\\t\\tthis.buffer[this.tail] = x;\\n\\t\\tthis.tail = (this.tail + 1) & (this.buffer.length - 1);\\n\\t\\t++this.length;\\n\\t\\treturn this.length;\\n\\t};\\n\\n\\tQueue.prototype.shift = function() {\\n\\t\\tvar x = this.buffer[this.head];\\n\\t\\tthis.buffer[this.head] = void 0;\\n\\t\\tthis.head = (this.head + 1) & (this.buffer.length - 1);\\n\\t\\t--this.length;\\n\\t\\treturn x;\\n\\t};\\n\\n\\tQueue.prototype._ensureCapacity = function(capacity) {\\n\\t\\tvar head = this.head;\\n\\t\\tvar buffer = this.buffer;\\n\\t\\tvar newBuffer = new Array(capacity);\\n\\t\\tvar i = 0;\\n\\t\\tvar len;\\n\\n\\t\\tif(head === 0) {\\n\\t\\t\\tlen = this.length;\\n\\t\\t\\tfor(; i<len; ++i) {\\n\\t\\t\\t\\tnewBuffer[i] = buffer[i];\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tcapacity = buffer.length;\\n\\t\\t\\tlen = this.tail;\\n\\t\\t\\tfor(; head<capacity; ++i, ++head) {\\n\\t\\t\\t\\tnewBuffer[i] = buffer[head];\\n\\t\\t\\t}\\n\\n\\t\\t\\tfor(head=0; head<len; ++i, ++head) {\\n\\t\\t\\t\\tnewBuffer[i] = buffer[head];\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tthis.buffer = newBuffer;\\n\\t\\tthis.head = 0;\\n\\t\\tthis.tail = this.length;\\n\\t};\\n\\n\\treturn Queue;\\n\\n}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n}(__webpack_require__(/*! !webpack amd define */ 193)));\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/when/lib/Queue.js\\n ** module id = 196\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/when/lib/Queue.js?\");\n\n/***/ },\n/* 197 */\n/*!********************************************!*\\\n  !*** ./~/react-router/~/when/lib/async.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var __WEBPACK_AMD_DEFINE_RESULT__;var require;/* WEBPACK VAR INJECTION */(function(process) {/** @license MIT License (c) copyright 2010-2014 original author or authors */\\n/** @author Brian Cavalier */\\n/** @author John Hann */\\n\\n(function(define) { 'use strict';\\n!(__WEBPACK_AMD_DEFINE_RESULT__ = function(require) {\\n\\n\\t// Sniff \\\"best\\\" async scheduling option\\n\\t// Prefer process.nextTick or MutationObserver, then check for\\n\\t// vertx and finally fall back to setTimeout\\n\\n\\t/*jshint maxcomplexity:6*/\\n\\t/*global process,document,setTimeout,MutationObserver,WebKitMutationObserver*/\\n\\tvar nextTick, MutationObs;\\n\\n\\tif (typeof process !== 'undefined' && process !== null &&\\n\\t\\ttypeof process.nextTick === 'function') {\\n\\t\\tnextTick = function(f) {\\n\\t\\t\\tprocess.nextTick(f);\\n\\t\\t};\\n\\n\\t} else if (MutationObs =\\n\\t\\t(typeof MutationObserver === 'function' && MutationObserver) ||\\n\\t\\t(typeof WebKitMutationObserver === 'function' && WebKitMutationObserver)) {\\n\\t\\tnextTick = (function (document, MutationObserver) {\\n\\t\\t\\tvar scheduled;\\n\\t\\t\\tvar el = document.createElement('div');\\n\\t\\t\\tvar o = new MutationObserver(run);\\n\\t\\t\\to.observe(el, { attributes: true });\\n\\n\\t\\t\\tfunction run() {\\n\\t\\t\\t\\tvar f = scheduled;\\n\\t\\t\\t\\tscheduled = void 0;\\n\\t\\t\\t\\tf();\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn function (f) {\\n\\t\\t\\t\\tscheduled = f;\\n\\t\\t\\t\\tel.setAttribute('class', 'x');\\n\\t\\t\\t};\\n\\t\\t}(document, MutationObs));\\n\\n\\t} else {\\n\\t\\tnextTick = (function(cjsRequire) {\\n\\t\\t\\tvar vertx;\\n\\t\\t\\ttry {\\n\\t\\t\\t\\t// vert.x 1.x || 2.x\\n\\t\\t\\t\\tvertx = __webpack_require__(/*! vertx */ 198);\\n\\t\\t\\t} catch (ignore) {}\\n\\n\\t\\t\\tif (vertx) {\\n\\t\\t\\t\\tif (typeof vertx.runOnLoop === 'function') {\\n\\t\\t\\t\\t\\treturn vertx.runOnLoop;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (typeof vertx.runOnContext === 'function') {\\n\\t\\t\\t\\t\\treturn vertx.runOnContext;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t// capture setTimeout to avoid being caught by fake timers\\n\\t\\t\\t// used in time based tests\\n\\t\\t\\tvar capturedSetTimeout = setTimeout;\\n\\t\\t\\treturn function (t) {\\n\\t\\t\\t\\tcapturedSetTimeout(t, 0);\\n\\t\\t\\t};\\n\\t\\t}(require));\\n\\t}\\n\\n\\treturn nextTick;\\n}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n}(__webpack_require__(/*! !webpack amd define */ 193)));\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/when/lib/async.js\\n ** module id = 197\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/when/lib/async.js?\");\n\n/***/ },\n/* 198 */\n/*!***********************!*\\\n  !*** vertx (ignored) ***!\n  \\***********************/\n/***/ function(module, exports) {\n\n\teval(\"/* (ignored) */\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** vertx (ignored)\\n ** module id = 198\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///vertx_(ignored)?\");\n\n/***/ },\n/* 199 */\n/*!******************************************************!*\\\n  !*** ./~/react-router/modules/utils/Cancellation.js ***!\n  \\******************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Represents a cancellation caused by navigating away\\n * before the previous transition has fully resolved.\\n */\\nfunction Cancellation() { }\\n\\nmodule.exports = Cancellation;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/Cancellation.js\\n ** module id = 199\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/Cancellation.js?\");\n\n/***/ },\n/* 200 */\n/*!***************************************************!*\\\n  !*** ./~/react-router/modules/utils/runRouter.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var createRouter = __webpack_require__(/*! ./createRouter */ 181);\\n\\n/**\\n * A high-level convenience method that creates, configures, and\\n * runs a router in one shot. The method signature is:\\n *\\n *   Router.run(routes[, location ], callback);\\n *\\n * Using `window.location.hash` to manage the URL, you could do:\\n *\\n *   Router.run(routes, function (Handler) {\\n *     React.render(<Handler/>, document.body);\\n *   });\\n * \\n * Using HTML5 history and a custom \\\"cursor\\\" prop:\\n * \\n *   Router.run(routes, Router.HistoryLocation, function (Handler) {\\n *     React.render(<Handler cursor={cursor}/>, document.body);\\n *   });\\n *\\n * Returns the newly created router.\\n *\\n * Note: If you need to specify further options for your router such\\n * as error/abort handling or custom scroll behavior, use Router.create\\n * instead.\\n *\\n *   var router = Router.create(options);\\n *   router.run(function (Handler) {\\n *     // ...\\n *   });\\n */\\nfunction runRouter(routes, location, callback) {\\n  if (typeof location === 'function') {\\n    callback = location;\\n    location = null;\\n  }\\n\\n  var router = createRouter({\\n    routes: routes,\\n    location: location\\n  });\\n\\n  router.run(callback);\\n\\n  return router;\\n}\\n\\nmodule.exports = runRouter;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/runRouter.js\\n ** module id = 200\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/runRouter.js?\");\n\n/***/ },\n/* 201 */\n/*!*************************************************!*\\\n  !*** ./javascript/fubu-diagnostics-section.jsx ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = __webpack_require__(/*! react */ 1);\\r\\n\\r\\n\\r\\nvar Router = __webpack_require__(/*! react-router */ 151); // or var Router = ReactRouter; in browsers\\r\\nvar Route = Router.Route, DefaultRoute = Router.DefaultRoute,\\r\\n  Link=Router.Link, RouteHandler = Router.RouteHandler;\\r\\n\\r\\nvar SectionLinks = __webpack_require__(/*! ./section-links */ 202);\\r\\n\\r\\n\\r\\n\\r\\n\\tfunction FubuDiagnosticsSection(section){\\\"use strict\\\";\\r\\n\\t\\tthis.title = section.title;\\r\\n\\t\\tthis.description = section.description;\\r\\n\\t\\tthis.key = section.key;\\r\\n\\t\\t\\r\\n\\t\\tthis.url = '/' + this.key;\\r\\n\\t\\tthis.views = [];\\r\\n\\t\\tthis.anchor = '#' + this.key;\\r\\n\\r\\n\\t\\tthis.component = section.component || __webpack_require__(/*! ./active-section-view */ 203);\\r\\n\\t}\\r\\n\\t\\r\\n\\tObject.defineProperty(FubuDiagnosticsSection.prototype,\\\"add\\\",{writable:true,configurable:true,value:function(data){\\\"use strict\\\";\\r\\n\\t\\tvar FubuDiagnosticsView = __webpack_require__(/*! ./fubu-diagnostics-view */ 204);\\r\\n\\t\\tvar view = new FubuDiagnosticsView(data, this);\\r\\n\\t\\tthis.views.push(view);\\r\\n\\r\\n\\t\\treturn this;\\r\\n\\t}});\\r\\n\\t\\r\\n\\tObject.defineProperty(FubuDiagnosticsSection.prototype,\\\"activeViews\\\",{writable:true,configurable:true,value:function(){\\\"use strict\\\";\\r\\n\\t\\treturn this.views.filter(function(v)  {return !v.hasParameters;});\\r\\n\\t}});\\r\\n\\t\\r\\n\\tObject.defineProperty(FubuDiagnosticsSection.prototype,\\\"toRoutes\\\",{writable:true,configurable:true,value:function(){\\\"use strict\\\";\\r\\n\\t\\tvar React = __webpack_require__(/*! react */ 1); // workaround for babel+webpack problem\\r\\n\\r\\n\\t\\tvar Router = __webpack_require__(/*! react-router */ 151); // or var Router = ReactRouter; in browsers\\r\\n\\t\\tvar Route = Router.Route;\\r\\n\\r\\n\\t\\tvar routes = this.views.map(function(view)  {return view.route;});\\r\\n\\t\\tif (this.component){\\r\\n\\t\\t\\tvar sectionRoute = (React.createElement(Route, {name: this.key, path: this.url, handler: this.component}));\\r\\n\\t\\t\\troutes.push(sectionRoute);\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn routes;\\r\\n\\t}});\\r\\n\\r\\n\\r\\nmodule.exports = FubuDiagnosticsSection;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/fubu-diagnostics-section.jsx\\n ** module id = 201\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/fubu-diagnostics-section.jsx?\");\n\n/***/ },\n/* 202 */\n/*!**************************************!*\\\n  !*** ./javascript/section-links.jsx ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = __webpack_require__(/*! react */ 1);\\r\\n\\r\\n\\r\\nvar SectionLinks = React.createClass({displayName: \\\"SectionLinks\\\",\\r\\n\\trender: function(){\\r\\n\\t\\tvar items = this.props.section.activeViews().map(function(view)  {\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(\\\"div\\\", null, \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"dt\\\", null, React.createElement(\\\"a\\\", {href: view.anchor}, view.title)), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"dd\\\", null, \\\" \\\", view.description)\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t);\\r\\n\\t\\t});\\r\\n\\t\\r\\n\\t\\treturn (\\r\\n\\r\\n\\t\\t\\tReact.createElement(\\\"dl\\\", {className: \\\"dl-horizontal\\\"}, \\r\\n\\t\\t\\t\\titems\\r\\n\\t\\t\\t)\\r\\n\\r\\n\\t\\t);\\r\\n\\r\\n\\t}\\r\\n});\\r\\n\\r\\nmodule.exports = SectionLinks;\\r\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/section-links.jsx\\n ** module id = 202\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/section-links.jsx?\");\n\n/***/ },\n/* 203 */\n/*!********************************************!*\\\n  !*** ./javascript/active-section-view.jsx ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = __webpack_require__(/*! react */ 1);\\r\\n\\r\\nvar Router = __webpack_require__(/*! react-router */ 151); // or var Router = ReactRouter; in browsers\\r\\nvar Route = Router.Route, DefaultRoute = Router.DefaultRoute,\\r\\n  Link=Router.Link, RouteHandler = Router.RouteHandler;\\r\\n\\r\\nvar SectionLinks = __webpack_require__(/*! ./section-links */ 202);\\r\\n\\r\\nvar ActiveSectionView = React.createClass({displayName: \\\"ActiveSectionView\\\",\\r\\n\\tmixins: [ Router.State ],\\r\\n\\r\\n\\trender: function(){\\r\\n\\t\\tvar path = this.getPathname();\\r\\n\\t\\tvar sectionKey = path.split('/')[1];\\r\\n\\t\\tvar activeSection = FubuDiagnostics.section(sectionKey);\\r\\n\\r\\n\\r\\n\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"div\\\", {style: {marginLeft: '300px'}}, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"h2\\\", null, activeSection.title, \\\" \\\", React.createElement(\\\"small\\\", null, activeSection.description)), \\r\\n\\t\\t\\t\\tReact.createElement(SectionLinks, {section: activeSection})\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\nmodule.exports = ActiveSectionView;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/active-section-view.jsx\\n ** module id = 203\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/active-section-view.jsx?\");\n\n/***/ },\n/* 204 */\n/*!**********************************************!*\\\n  !*** ./javascript/fubu-diagnostics-view.jsx ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\tfunction FubuDiagnosticsView(view, section){\\\"use strict\\\";\\r\\n\\t\\tvar React = __webpack_require__(/*! react */ 1);\\r\\n\\r\\n\\t\\tthis.url = section.key + '/' + view.key;\\r\\n\\t\\tthis.key = view.key;\\r\\n\\r\\n\\t\\tvar routeName = section.key + ':' + view.key;\\r\\n\\r\\n\\t\\tthis.anchor = '#' + this.url;\\r\\n\\t\\tthis.hasParameters = false;\\r\\n\\t\\tthis.description = view.description;\\r\\n\\t\\tthis.title = view.title;\\r\\n\\r\\n\\r\\n\\t\\tvar component = view.component;\\r\\n\\t\\tif (view.hasOwnProperty('render')){\\r\\n\\t\\t\\tcomponent = React.createClass({displayName: \\\"component\\\",\\r\\n\\t\\t\\t\\trender: view.render\\r\\n\\t\\t\\t});\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tif (!component){\\r\\n\\t\\t\\tthrow new Error(\\\"You need to either specify a React in view.component or pass in a render() function\\\");\\r\\n\\t\\t}\\r\\n\\r\\n\\r\\n\\t\\tif (view.route){\\r\\n\\t\\t\\tvar route = FubuDiagnostics.routes[view.route];\\r\\n\\t\\t\\tif (route.params.length > 0){\\r\\n\\t\\t\\t\\tthis.hasParameters = true;\\r\\n\\t\\t\\t\\troute.params.forEach(function(x)  {\\r\\n\\t\\t\\t\\t\\tthis.url = this.url + '/:' + x.Name;\\r\\n\\t\\t\\t\\t}.bind(this));\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tvar Router = __webpack_require__(/*! react-router */ 151); // or var Router = ReactRouter; in browsers\\r\\n\\r\\n\\t\\tvar Route = Router.Route, DefaultRoute = Router.DefaultRoute,\\r\\n\\t\\t  Link=Router.Link, RouteHandler = Router.RouteHandler;\\r\\n\\r\\n\\t\\tthis.route = (React.createElement(Route, {name: routeName, path: this.url, handler: component}));\\r\\n\\t\\t\\r\\n\\r\\n\\t}\\r\\n\\r\\n\\r\\nmodule.exports = FubuDiagnosticsView;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/fubu-diagnostics-view.jsx\\n ** module id = 204\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/fubu-diagnostics-view.jsx?\");\n\n/***/ },\n/* 205 */\n/*!************************************!*\\\n  !*** ./javascript/text-screen.jsx ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = __webpack_require__(/*! react */ 1);\\r\\n\\r\\n\\r\\nvar TextScreen = React.createClass({displayName: \\\"TextScreen\\\",\\r\\n\\tgetInitialState: function(){\\r\\n\\t\\treturn {\\r\\n\\t\\t\\ttext: 'Loading...'\\r\\n\\t\\t}\\r\\n\\t},\\r\\n\\r\\n\\tcomponentDidMount: function(){\\r\\n\\t\\tFubuDiagnostics.get(route, {}, function(data)  {\\r\\n\\t\\t\\tthis.setState({text: data});\\r\\n\\t\\t}.bind(this));\\r\\n\\t},\\r\\n\\r\\n\\trender: function(){\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"pre\\\", null, this.state.text)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\n\\r\\nmodule.exports = TextScreen;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/text-screen.jsx\\n ** module id = 205\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/text-screen.jsx?\");\n\n/***/ },\n/* 206 */\n/*!************************************!*\\\n  !*** ./javascript/html-screen.jsx ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = __webpack_require__(/*! react */ 1);\\r\\n\\r\\nvar HtmlScreen = React.createClass({displayName: \\\"HtmlScreen\\\",\\r\\n\\tgetInitialState: function(){\\r\\n\\t\\treturn {\\r\\n\\t\\t\\thtml: 'Loading...'\\r\\n\\t\\t}\\r\\n\\t},\\r\\n\\r\\n\\tcomponentDidMount: function(){\\r\\n\\t\\t// TODO -- add parameters into this someday\\r\\n\\t\\tFubuDiagnostics.get(this.props.route, {}, function(data)  {\\r\\n\\t\\t\\tthis.setState({html: data});\\r\\n\\t\\t}.bind(this));\\r\\n\\t},\\r\\n\\r\\n\\trender: function(){\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"div\\\", {dangerouslySetInnerHTML: {__html: this.state.html}})\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\nmodule.exports = HtmlScreen;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/html-screen.jsx\\n ** module id = 206\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/html-screen.jsx?\");\n\n/***/ },\n/* 207 */\n/*!**********************************!*\\\n  !*** ./javascript/appdomain.jsx ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = __webpack_require__(/*! react */ 1);\\r\\nvar _ = __webpack_require__(/*! lodash */ 148);\\r\\n\\r\\nfunction Detail(header, prop){\\r\\n\\tthis.header = header;\\r\\n\\tthis.prop = prop;\\r\\n\\t\\r\\n\\tthis.toRow = function(data){\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, this.header), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, data[this.prop])\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n}\\r\\n\\r\\nvar AppDomain = React.createClass({displayName: \\\"AppDomain\\\",\\r\\n\\tgetInitialState: function(){\\r\\n\\t\\treturn {\\r\\n\\t\\t\\tloading: true\\r\\n\\t\\t}\\r\\n\\t},\\r\\n\\r\\n\\tcomponentDidMount: function(){\\r\\n\\t\\t// TODO -- add parameters into this someday\\r\\n\\t\\tFubuDiagnostics.get('AppDomain:appdomain', {}, function(data)  {\\r\\n\\t\\t\\t_.assign(data, {loading: false});\\r\\n\\r\\n\\t\\t\\tthis.setState(data);\\r\\n\\t\\t}.bind(this));\\r\\n\\t},\\r\\n\\r\\n\\trender: function(){\\r\\n\\t\\tif (this.state.loading){\\r\\n\\t\\t\\treturn (React.createElement(\\\"p\\\", null, \\\"Loading...\\\"));\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tvar assemblies = this.state.assemblies.map(function(a, i){\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, a.name), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, a.version), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, a.location)\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t);\\r\\n\\t\\t});\\r\\n\\t\\t\\r\\n\\t\\tvar details = [\\r\\n\\t\\t\\tnew Detail('Reloaded at', 'reloaded'),\\r\\n\\t\\t\\tnew Detail('FubuMVC Path', 'fubuPath'),\\r\\n\\t\\t\\tnew Detail('AppDomain Base Directory', 'baseDirectory'),\\r\\n\\t\\t\\tnew Detail('AppDomain Bin Path', 'binPath'),\\r\\n\\t\\t\\tnew Detail('Configuration File', 'config')\\r\\n\\t\\t];\\r\\n\\t\\t\\r\\n\\t\\tvar detailRows = details.map(function(d)  {\\r\\n\\t\\t\\treturn d.toRow(this.state);\\r\\n\\t\\t}.bind(this));\\r\\n\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"div\\\", null, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"h3\\\", null, \\\"Application Properties\\\"), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"table\\\", {className: \\\"table table-striped details\\\", style: {width: 'auto'}}, \\r\\n\\t\\t\\t\\t\\tdetailRows\\r\\n\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\tReact.createElement(\\\"h3\\\", null, \\\"Loaded Assemblies\\\"), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"table\\\", {className: \\\"table table-striped\\\"}, \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Name\\\"), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Version\\\"), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Location\\\")\\r\\n\\t\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\t\\tassemblies\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t)\\r\\n\\t\\t\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\nFubuDiagnostics.addSection({\\r\\n    title: 'AppDomain',\\r\\n    description: 'Properties and Assemblies of the current AppDomain',\\r\\n    key: 'appdomain',\\r\\n\\tcomponent: AppDomain\\r\\n});\\r\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/appdomain.jsx\\n ** module id = 207\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/appdomain.jsx?\");\n\n/***/ },\n/* 208 */\n/*!*******************************!*\\\n  !*** ./javascript/assets.jsx ***!\n  \\*******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = __webpack_require__(/*! react */ 1);\\r\\n\\r\\nvar AssetsTable = React.createClass({displayName: \\\"AssetsTable\\\",\\r\\n\\tgetInitialState: function(){\\r\\n\\t\\treturn {\\r\\n\\t\\t\\tloading: true\\r\\n\\t\\t}\\r\\n\\t},\\r\\n\\r\\n\\tcomponentDidMount: function(){\\r\\n\\t\\t// TODO -- add parameters into this someday\\r\\n\\t\\tFubuDiagnostics.get('Asset:assets', {}, function(data)  {\\r\\n\\t\\t\\t_.assign(data, {loading: false});\\r\\n\\r\\n\\t\\t\\tthis.setState(data);\\r\\n\\t\\t}.bind(this));\\r\\n\\t},\\r\\n\\r\\n\\trender: function(){\\r\\n\\t\\tif (this.state.loading){\\r\\n\\t\\t\\treturn (React.createElement(\\\"p\\\", null, \\\"Loading...\\\"));\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tvar rows = this.state.assets.map(function(a)  {\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, a.file), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, a.url), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, a.mimetype), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, a.provenance), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, a.cdn)\\r\\n\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t);\\r\\n\\t\\t});\\r\\n\\t\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"table\\\", {className: \\\"table table-striped\\\"}, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"File\\\"), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Url\\\"), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Mimetype\\\"), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Provenance\\\"), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"CDN\\\")\\r\\n\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\trows\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\t\\r\\n\\r\\n\\r\\nFubuDiagnostics.addSection({\\r\\n    title: 'Assets',\\r\\n    description: 'All known client side assets',\\r\\n    key: 'assets',\\r\\n\\tcomponent: AssetsTable\\r\\n\\r\\n});\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/assets.jsx\\n ** module id = 208\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/assets.jsx?\");\n\n/***/ },\n/* 209 */\n/*!**************************************!*\\\n  !*** ./javascript/model-binding.jsx ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = __webpack_require__(/*! react */ 1);\\r\\nvar $__0=    __webpack_require__(/*! react-bootstrap */ 210),Grid=$__0.Grid,Col=$__0.Col,Row=$__0.Row;\\r\\nvar HtmlScreen = __webpack_require__(/*! ./html-screen */ 206);\\r\\n\\r\\nvar ModelBinding = React.createClass({displayName: \\\"ModelBinding\\\",\\r\\n\\trender: function(){\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(Row, null, \\r\\n\\t\\t\\t\\tReact.createElement(Col, {xs: 3, md: 2}, \\n\\t\\t\\t      \\\"Model Binding in \\\", React.createElement(\\\"a\\\", {href: \\\"https://github.com/DarthFubuMVC/fubucore\\\"}, \\\"FubuCore\\\"), \\\" is generally done by invoking the \\\", React.createElement(\\\"code\\\", null, \\\"IObjectResolver\\\"), \\\" service.  Model binding in FubuMVC can be heavily customized and extended by plugging in additional implementations of these finer-grained services to handle types, handle properties, and converting values in new ways:\\\", \\n\\t\\t\\t      React.createElement(\\\"br\\\", null), \\r\\n\\t\\t\\t      React.createElement(\\\"ol\\\", null, \\r\\n\\t\\t\\t        React.createElement(\\\"li\\\", null, \\r\\n\\t\\t\\t          React.createElement(\\\"b\\\", null, \\\"IModelBinder:  \\\"), \\\"The most coarse-grained level of customization.  An \\\", React.createElement(\\\"code\\\", null, \\\"IModelBinder\\\"), \\\" implementation \\\\\\\"knows\\\\\\\" how to create an object from the request data.  Most types will be handled by the StandardModelBinder that just calls a public constructor and delegates to \\\", React.createElement(\\\"code\\\", null, \\\"IPropertyBinder\\\"), \\\" services for each public setter.\\\"), \\r\\n\\t\\t\\t        React.createElement(\\\"li\\\", null, \\r\\n\\t\\t\\t          React.createElement(\\\"b\\\", null, \\\"IPropertyBinder:  \\\"), \\\"A model binding policy that can handle the model binding to one property at a time.  Most properties will be handled by the \\\", React.createElement(\\\"code\\\", null, \\\"ConversionPropertyBinder\\\"), \\\" that just finds the raw data from the request that matches the property name, converts or coerces the raw data to the property type, and sets the property value accordingly.  You might use custom \\\", React.createElement(\\\"code\\\", null, \\\"IPropertyBinder\\\"), \\\" services for information that isn't available in the http request.\\\"\\n\\t\\t\\t      ), \\r\\n\\t\\t\\t        React.createElement(\\\"li\\\", null, \\r\\n\\t\\t\\t          React.createElement(\\\"b\\\", null, \\\"IConversionFamily:  \\\"), \\\"A fine grained service that \\\\\\\"knows\\\\\\\" how to coerce (or find) a raw string value into a requested type.\\\"  \\n\\t\\t\\t        )\\r\\n\\t\\t\\t      ), \\r\\n\\r\\n\\t\\t\\t      React.createElement(\\\"p\\\", null, \\\"These services can be directly plugged in via your application's IoC container or through the \\\", React.createElement(\\\"code\\\", null, \\\"FubuRegisty.Model.******\\\"), \\\" methods in your FubuRegistry class.  Do keep in mind that ordering is important.  If two or more model binders / property binders / converter families could handle a scenario, the first one will always be used.\\\" \\n\\t\\t\\t    )\\r\\n\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\tReact.createElement(Col, {xs: 9, md: 9}, \\r\\n\\t\\t\\t\\t\\tReact.createElement(HtmlScreen, {route: \\\"ModelBinding:binding_all\\\"})\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\nmodule.exports = ModelBinding;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/model-binding.jsx\\n ** module id = 209\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/model-binding.jsx?\");\n\n/***/ },\n/* 210 */\n/*!***************************************!*\\\n  !*** ./~/react-bootstrap/lib/main.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"module.exports = {\\n  Accordion: __webpack_require__(/*! ./Accordion */ 219),\\n  Affix: __webpack_require__(/*! ./Affix */ 221),\\n  AffixMixin: __webpack_require__(/*! ./AffixMixin */ 222),\\n  Alert: __webpack_require__(/*! ./Alert */ 225),\\n  BootstrapMixin: __webpack_require__(/*! ./BootstrapMixin */ 214),\\n  Badge: __webpack_require__(/*! ./Badge */ 226),\\n  Button: __webpack_require__(/*! ./Button */ 227),\\n  ButtonGroup: __webpack_require__(/*! ./ButtonGroup */ 228),\\n  ButtonToolbar: __webpack_require__(/*! ./ButtonToolbar */ 229),\\n  Carousel: __webpack_require__(/*! ./Carousel */ 230),\\n  CarouselItem: __webpack_require__(/*! ./CarouselItem */ 231),\\n  Col: __webpack_require__(/*! ./Col */ 233),\\n  CollapsableMixin: __webpack_require__(/*! ./CollapsableMixin */ 234),\\n  DropdownButton: __webpack_require__(/*! ./DropdownButton */ 235),\\n  DropdownMenu: __webpack_require__(/*! ./DropdownMenu */ 238),\\n  DropdownStateMixin: __webpack_require__(/*! ./DropdownStateMixin */ 237),\\n  FadeMixin: __webpack_require__(/*! ./FadeMixin */ 239),\\n  Glyphicon: __webpack_require__(/*! ./Glyphicon */ 240),\\n  Grid: __webpack_require__(/*! ./Grid */ 241),\\n  Input: __webpack_require__(/*! ./Input */ 242),\\n  Interpolate: __webpack_require__(/*! ./Interpolate */ 243),\\n  Jumbotron: __webpack_require__(/*! ./Jumbotron */ 244),\\n  Label: __webpack_require__(/*! ./Label */ 245),\\n  ListGroup: __webpack_require__(/*! ./ListGroup */ 246),\\n  ListGroupItem: __webpack_require__(/*! ./ListGroupItem */ 211),\\n  MenuItem: __webpack_require__(/*! ./MenuItem */ 247),\\n  Modal: __webpack_require__(/*! ./Modal */ 248),\\n  Nav: __webpack_require__(/*! ./Nav */ 249),\\n  Navbar: __webpack_require__(/*! ./Navbar */ 250),\\n  NavItem: __webpack_require__(/*! ./NavItem */ 251),\\n  ModalTrigger: __webpack_require__(/*! ./ModalTrigger */ 252),\\n  OverlayTrigger: __webpack_require__(/*! ./OverlayTrigger */ 255),\\n  OverlayMixin: __webpack_require__(/*! ./OverlayMixin */ 253),\\n  PageHeader: __webpack_require__(/*! ./PageHeader */ 256),\\n  Panel: __webpack_require__(/*! ./Panel */ 257),\\n  PanelGroup: __webpack_require__(/*! ./PanelGroup */ 220),\\n  PageItem: __webpack_require__(/*! ./PageItem */ 258),\\n  Pager: __webpack_require__(/*! ./Pager */ 259),\\n  Popover: __webpack_require__(/*! ./Popover */ 260),\\n  ProgressBar: __webpack_require__(/*! ./ProgressBar */ 261),\\n  Row: __webpack_require__(/*! ./Row */ 262),\\n  SplitButton: __webpack_require__(/*! ./SplitButton */ 263),\\n  SubNav: __webpack_require__(/*! ./SubNav */ 264),\\n  TabbedArea: __webpack_require__(/*! ./TabbedArea */ 265),\\n  Table: __webpack_require__(/*! ./Table */ 266),\\n  TabPane: __webpack_require__(/*! ./TabPane */ 267),\\n  Tooltip: __webpack_require__(/*! ./Tooltip */ 268),\\n  Well: __webpack_require__(/*! ./Well */ 269)\\n};\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/main.js\\n ** module id = 210\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/main.js?\");\n\n/***/ },\n/* 211 */\n/*!************************************************!*\\\n  !*** ./~/react-bootstrap/lib/ListGroupItem.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar cloneWithProps = __webpack_require__(/*! ./utils/cloneWithProps */ 216);\\n\\nvar ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 218);\\n\\nvar ListGroupItem = React.createClass({displayName: \\\"ListGroupItem\\\",\\n  mixins: [BootstrapMixin],\\n\\n  propTypes: {\\n    bsStyle: React.PropTypes.oneOf(['danger','info','success','warning']),\\n    active: React.PropTypes.any,\\n    disabled: React.PropTypes.any,\\n    header: React.PropTypes.node,\\n    onClick: React.PropTypes.func,\\n    eventKey: React.PropTypes.any,\\n    href: React.PropTypes.string,\\n    target: React.PropTypes.string\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      bsClass: 'list-group-item'\\n    };\\n  },\\n\\n  render: function () {\\n    var classes = this.getBsClassSet();\\n\\n    classes['active'] = this.props.active;\\n    classes['disabled'] = this.props.disabled;\\n\\n    if (this.props.href || this.props.target || this.props.onClick) {\\n      return this.renderAnchor(classes);\\n    } else {\\n      return this.renderSpan(classes);\\n    }\\n  },\\n\\n  renderSpan: function (classes) {\\n    return (\\n      React.createElement(\\\"span\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes))}), \\n        this.props.header ? this.renderStructuredContent() : this.props.children\\n      )\\n    );\\n  },\\n\\n  renderAnchor: function (classes) {\\n    return (\\n      React.createElement(\\\"a\\\", React.__spread({}, \\n        this.props, \\n        {className: joinClasses(this.props.className, classSet(classes))\\n      }), \\n        this.props.header ? this.renderStructuredContent() : this.props.children\\n      )\\n    );\\n  },\\n\\n  renderStructuredContent: function () {\\n    var header;\\n    if (React.isValidElement(this.props.header)) {\\n      header = cloneWithProps(this.props.header, {\\n        className: 'list-group-item-heading'\\n      });\\n    } else {\\n      header = (\\n        React.createElement(\\\"h4\\\", {className: \\\"list-group-item-heading\\\"}, \\n          this.props.header\\n        )\\n      );\\n    }\\n\\n    var content = (\\n      React.createElement(\\\"p\\\", {className: \\\"list-group-item-text\\\"}, \\n        this.props.children\\n      )\\n    );\\n\\n    return {\\n      header: header,\\n      content: content\\n    };\\n  }\\n});\\n\\nmodule.exports = ListGroupItem;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/ListGroupItem.js\\n ** module id = 211\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ListGroupItem.js?\");\n\n/***/ },\n/* 212 */\n/*!*************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/classSet.js ***!\n  \\*************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This file contains an unmodified version of:\\n * https://github.com/facebook/react/blob/v0.12.0/src/vendor/stubs/cx.js\\n *\\n * This source code is licensed under the BSD-style license found here:\\n * https://github.com/facebook/react/blob/v0.12.0/LICENSE\\n * An additional grant of patent rights can be found here:\\n * https://github.com/facebook/react/blob/v0.12.0/PATENTS\\n */\\n\\n/**\\n * This function is used to mark string literals representing CSS class names\\n * so that they can be transformed statically. This allows for modularization\\n * and minification of CSS class names.\\n *\\n * In static_upstream, this function is actually implemented, but it should\\n * eventually be replaced with something more descriptive, and the transform\\n * that is used in the main stack should be ported for use elsewhere.\\n *\\n * @param string|object className to modularize, or an object of key/values.\\n *                      In the object case, the values are conditions that\\n *                      determine if the className keys should be included.\\n * @param [string ...]  Variable list of classNames in the string case.\\n * @return string       Renderable space-separated CSS className.\\n */\\nfunction cx(classNames) {\\n  if (typeof classNames == 'object') {\\n    return Object.keys(classNames).filter(function(className) {\\n      return classNames[className];\\n    }).join(' ');\\n  } else {\\n    return Array.prototype.join.call(arguments, ' ');\\n  }\\n}\\n\\nmodule.exports = cx;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/utils/classSet.js\\n ** module id = 212\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/classSet.js?\");\n\n/***/ },\n/* 213 */\n/*!****************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/joinClasses.js ***!\n  \\****************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This file contains an unmodified version of:\\n * https://github.com/facebook/react/blob/v0.12.0/src/utils/joinClasses.js\\n *\\n * This source code is licensed under the BSD-style license found here:\\n * https://github.com/facebook/react/blob/v0.12.0/LICENSE\\n * An additional grant of patent rights can be found here:\\n * https://github.com/facebook/react/blob/v0.12.0/PATENTS\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Combines multiple className strings into one.\\n * http://jsperf.com/joinclasses-args-vs-array\\n *\\n * @param {...?string} classes\\n * @return {string}\\n */\\nfunction joinClasses(className/*, ... */) {\\n  if (!className) {\\n    className = '';\\n  }\\n  var nextClass;\\n  var argLength = arguments.length;\\n  if (argLength > 1) {\\n    for (var ii = 1; ii < argLength; ii++) {\\n      nextClass = arguments[ii];\\n      if (nextClass) {\\n        className = (className ? className + ' ' : '') + nextClass;\\n      }\\n    }\\n  }\\n  return className;\\n}\\n\\nmodule.exports = joinClasses;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/utils/joinClasses.js\\n ** module id = 213\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/joinClasses.js?\");\n\n/***/ },\n/* 214 */\n/*!*************************************************!*\\\n  !*** ./~/react-bootstrap/lib/BootstrapMixin.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar constants = __webpack_require__(/*! ./constants */ 215);\\n\\nvar BootstrapMixin = {\\n  propTypes: {\\n    bsClass: React.PropTypes.oneOf(Object.keys(constants.CLASSES)),\\n    bsStyle: React.PropTypes.oneOf(Object.keys(constants.STYLES)),\\n    bsSize: React.PropTypes.oneOf(Object.keys(constants.SIZES))\\n  },\\n\\n  getBsClassSet: function () {\\n    var classes = {};\\n\\n    var bsClass = this.props.bsClass && constants.CLASSES[this.props.bsClass];\\n    if (bsClass) {\\n      classes[bsClass] = true;\\n\\n      var prefix = bsClass + '-';\\n\\n      var bsSize = this.props.bsSize && constants.SIZES[this.props.bsSize];\\n      if (bsSize) {\\n        classes[prefix + bsSize] = true;\\n      }\\n\\n      var bsStyle = this.props.bsStyle && constants.STYLES[this.props.bsStyle];\\n      if (this.props.bsStyle) {\\n        classes[prefix + bsStyle] = true;\\n      }\\n    }\\n\\n    return classes;\\n  }\\n};\\n\\nmodule.exports = BootstrapMixin;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/BootstrapMixin.js\\n ** module id = 214\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/BootstrapMixin.js?\");\n\n/***/ },\n/* 215 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/constants.js ***!\n  \\********************************************/\n/***/ function(module, exports) {\n\n\teval(\"module.exports = {\\n  CLASSES: {\\n    'alert': 'alert',\\n    'button': 'btn',\\n    'button-group': 'btn-group',\\n    'button-toolbar': 'btn-toolbar',\\n    'column': 'col',\\n    'input-group': 'input-group',\\n    'form': 'form',\\n    'glyphicon': 'glyphicon',\\n    'label': 'label',\\n    'list-group-item': 'list-group-item',\\n    'panel': 'panel',\\n    'panel-group': 'panel-group',\\n    'progress-bar': 'progress-bar',\\n    'nav': 'nav',\\n    'navbar': 'navbar',\\n    'modal': 'modal',\\n    'row': 'row',\\n    'well': 'well'\\n  },\\n  STYLES: {\\n    'default': 'default',\\n    'primary': 'primary',\\n    'success': 'success',\\n    'info': 'info',\\n    'warning': 'warning',\\n    'danger': 'danger',\\n    'link': 'link',\\n    'inline': 'inline',\\n    'tabs': 'tabs',\\n    'pills': 'pills'\\n  },\\n  SIZES: {\\n    'large': 'lg',\\n    'medium': 'md',\\n    'small': 'sm',\\n    'xsmall': 'xs'\\n  },\\n  GLYPHS: [\\n    'asterisk',\\n    'plus',\\n    'euro',\\n    'eur',\\n    'minus',\\n    'cloud',\\n    'envelope',\\n    'pencil',\\n    'glass',\\n    'music',\\n    'search',\\n    'heart',\\n    'star',\\n    'star-empty',\\n    'user',\\n    'film',\\n    'th-large',\\n    'th',\\n    'th-list',\\n    'ok',\\n    'remove',\\n    'zoom-in',\\n    'zoom-out',\\n    'off',\\n    'signal',\\n    'cog',\\n    'trash',\\n    'home',\\n    'file',\\n    'time',\\n    'road',\\n    'download-alt',\\n    'download',\\n    'upload',\\n    'inbox',\\n    'play-circle',\\n    'repeat',\\n    'refresh',\\n    'list-alt',\\n    'lock',\\n    'flag',\\n    'headphones',\\n    'volume-off',\\n    'volume-down',\\n    'volume-up',\\n    'qrcode',\\n    'barcode',\\n    'tag',\\n    'tags',\\n    'book',\\n    'bookmark',\\n    'print',\\n    'camera',\\n    'font',\\n    'bold',\\n    'italic',\\n    'text-height',\\n    'text-width',\\n    'align-left',\\n    'align-center',\\n    'align-right',\\n    'align-justify',\\n    'list',\\n    'indent-left',\\n    'indent-right',\\n    'facetime-video',\\n    'picture',\\n    'map-marker',\\n    'adjust',\\n    'tint',\\n    'edit',\\n    'share',\\n    'check',\\n    'move',\\n    'step-backward',\\n    'fast-backward',\\n    'backward',\\n    'play',\\n    'pause',\\n    'stop',\\n    'forward',\\n    'fast-forward',\\n    'step-forward',\\n    'eject',\\n    'chevron-left',\\n    'chevron-right',\\n    'plus-sign',\\n    'minus-sign',\\n    'remove-sign',\\n    'ok-sign',\\n    'question-sign',\\n    'info-sign',\\n    'screenshot',\\n    'remove-circle',\\n    'ok-circle',\\n    'ban-circle',\\n    'arrow-left',\\n    'arrow-right',\\n    'arrow-up',\\n    'arrow-down',\\n    'share-alt',\\n    'resize-full',\\n    'resize-small',\\n    'exclamation-sign',\\n    'gift',\\n    'leaf',\\n    'fire',\\n    'eye-open',\\n    'eye-close',\\n    'warning-sign',\\n    'plane',\\n    'calendar',\\n    'random',\\n    'comment',\\n    'magnet',\\n    'chevron-up',\\n    'chevron-down',\\n    'retweet',\\n    'shopping-cart',\\n    'folder-close',\\n    'folder-open',\\n    'resize-vertical',\\n    'resize-horizontal',\\n    'hdd',\\n    'bullhorn',\\n    'bell',\\n    'certificate',\\n    'thumbs-up',\\n    'thumbs-down',\\n    'hand-right',\\n    'hand-left',\\n    'hand-up',\\n    'hand-down',\\n    'circle-arrow-right',\\n    'circle-arrow-left',\\n    'circle-arrow-up',\\n    'circle-arrow-down',\\n    'globe',\\n    'wrench',\\n    'tasks',\\n    'filter',\\n    'briefcase',\\n    'fullscreen',\\n    'dashboard',\\n    'paperclip',\\n    'heart-empty',\\n    'link',\\n    'phone',\\n    'pushpin',\\n    'usd',\\n    'gbp',\\n    'sort',\\n    'sort-by-alphabet',\\n    'sort-by-alphabet-alt',\\n    'sort-by-order',\\n    'sort-by-order-alt',\\n    'sort-by-attributes',\\n    'sort-by-attributes-alt',\\n    'unchecked',\\n    'expand',\\n    'collapse-down',\\n    'collapse-up',\\n    'log-in',\\n    'flash',\\n    'log-out',\\n    'new-window',\\n    'record',\\n    'save',\\n    'open',\\n    'saved',\\n    'import',\\n    'export',\\n    'send',\\n    'floppy-disk',\\n    'floppy-saved',\\n    'floppy-remove',\\n    'floppy-save',\\n    'floppy-open',\\n    'credit-card',\\n    'transfer',\\n    'cutlery',\\n    'header',\\n    'compressed',\\n    'earphone',\\n    'phone-alt',\\n    'tower',\\n    'stats',\\n    'sd-video',\\n    'hd-video',\\n    'subtitles',\\n    'sound-stereo',\\n    'sound-dolby',\\n    'sound-5-1',\\n    'sound-6-1',\\n    'sound-7-1',\\n    'copyright-mark',\\n    'registration-mark',\\n    'cloud-download',\\n    'cloud-upload',\\n    'tree-conifer',\\n    'tree-deciduous',\\n    'cd',\\n    'save-file',\\n    'open-file',\\n    'level-up',\\n    'copy',\\n    'paste',\\n    'alert',\\n    'equalizer',\\n    'king',\\n    'queen',\\n    'pawn',\\n    'bishop',\\n    'knight',\\n    'baby-formula',\\n    'tent',\\n    'blackboard',\\n    'bed',\\n    'apple',\\n    'erase',\\n    'hourglass',\\n    'lamp',\\n    'duplicate',\\n    'piggy-bank',\\n    'scissors',\\n    'bitcoin',\\n    'yen',\\n    'ruble',\\n    'scale',\\n    'ice-lolly',\\n    'ice-lolly-tasted',\\n    'education',\\n    'option-horizontal',\\n    'option-vertical',\\n    'menu-hamburger',\\n    'modal-window',\\n    'oil',\\n    'grain',\\n    'sunglasses',\\n    'text-size',\\n    'text-color',\\n    'text-background',\\n    'object-align-top',\\n    'object-align-bottom',\\n    'object-align-horizontal',\\n    'object-align-left',\\n    'object-align-vertical',\\n    'object-align-right',\\n    'triangle-right',\\n    'triangle-left',\\n    'triangle-bottom',\\n    'triangle-top',\\n    'console',\\n    'superscript',\\n    'subscript',\\n    'menu-left',\\n    'menu-right',\\n    'menu-down',\\n    'menu-up'\\n  ]\\n};\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/constants.js\\n ** module id = 215\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/constants.js?\");\n\n/***/ },\n/* 216 */\n/*!*******************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/cloneWithProps.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This file contains modified versions of:\\n * https://github.com/facebook/react/blob/v0.12.0/src/utils/cloneWithProps.js\\n * https://github.com/facebook/react/blob/v0.12.0/src/core/ReactPropTransferer.js\\n *\\n * This source code is licensed under the BSD-style license found here:\\n * https://github.com/facebook/react/blob/v0.12.0/LICENSE\\n * An additional grant of patent rights can be found here:\\n * https://github.com/facebook/react/blob/v0.12.0/PATENTS\\n *\\n * TODO: This should be replaced as soon as cloneWithProps is available via\\n *  the core React package or a separate package.\\n *  @see https://github.com/facebook/react/issues/1906\\n */\\n\\nvar React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./joinClasses */ 213);\\nvar assign = __webpack_require__(/*! ./Object.assign */ 217);\\n\\n/**\\n * Creates a transfer strategy that will merge prop values using the supplied\\n * `mergeStrategy`. If a prop was previously unset, this just sets it.\\n *\\n * @param {function} mergeStrategy\\n * @return {function}\\n */\\nfunction createTransferStrategy(mergeStrategy) {\\n  return function(props, key, value) {\\n    if (!props.hasOwnProperty(key)) {\\n      props[key] = value;\\n    } else {\\n      props[key] = mergeStrategy(props[key], value);\\n    }\\n  };\\n}\\n\\nvar transferStrategyMerge = createTransferStrategy(function(a, b) {\\n  // `merge` overrides the first object's (`props[key]` above) keys using the\\n  // second object's (`value`) keys. An object's style's existing `propA` would\\n  // get overridden. Flip the order here.\\n  return assign({}, b, a);\\n});\\n\\nfunction emptyFunction() {}\\n\\n/**\\n * Transfer strategies dictate how props are transferred by `transferPropsTo`.\\n * NOTE: if you add any more exceptions to this list you should be sure to\\n * update `cloneWithProps()` accordingly.\\n */\\nvar TransferStrategies = {\\n  /**\\n   * Never transfer `children`.\\n   */\\n  children: emptyFunction,\\n  /**\\n   * Transfer the `className` prop by merging them.\\n   */\\n  className: createTransferStrategy(joinClasses),\\n  /**\\n   * Transfer the `style` prop (which is an object) by merging them.\\n   */\\n  style: transferStrategyMerge\\n};\\n\\n/**\\n * Mutates the first argument by transferring the properties from the second\\n * argument.\\n *\\n * @param {object} props\\n * @param {object} newProps\\n * @return {object}\\n */\\nfunction transferInto(props, newProps) {\\n  for (var thisKey in newProps) {\\n    if (!newProps.hasOwnProperty(thisKey)) {\\n      continue;\\n    }\\n\\n    var transferStrategy = TransferStrategies[thisKey];\\n\\n    if (transferStrategy && TransferStrategies.hasOwnProperty(thisKey)) {\\n      transferStrategy(props, thisKey, newProps[thisKey]);\\n    } else if (!props.hasOwnProperty(thisKey)) {\\n      props[thisKey] = newProps[thisKey];\\n    }\\n  }\\n  return props;\\n}\\n\\n/**\\n * Merge two props objects using TransferStrategies.\\n *\\n * @param {object} oldProps original props (they take precedence)\\n * @param {object} newProps new props to merge in\\n * @return {object} a new object containing both sets of props merged.\\n */\\nfunction mergeProps(oldProps, newProps) {\\n  return transferInto(assign({}, oldProps), newProps);\\n}\\n\\n\\nvar ReactPropTransferer = {\\n  mergeProps: mergeProps\\n};\\n\\nvar CHILDREN_PROP = 'children';\\n\\n/**\\n * Sometimes you want to change the props of a child passed to you. Usually\\n * this is to add a CSS class.\\n *\\n * @param {object} child child component you'd like to clone\\n * @param {object} props props you'd like to modify. They will be merged\\n * as if you used `transferPropsTo()`.\\n * @return {object} a clone of child with props merged in.\\n */\\nfunction cloneWithProps(child, props) {\\n  var newProps = ReactPropTransferer.mergeProps(props, child.props);\\n\\n  // Use `child.props.children` if it is provided.\\n  if (!newProps.hasOwnProperty(CHILDREN_PROP) &&\\n    child.props.hasOwnProperty(CHILDREN_PROP)) {\\n    newProps.children = child.props.children;\\n  }\\n\\n  if (React.version.substr(0, 4) === '0.12'){\\n    var mockLegacyFactory = function(){};\\n    mockLegacyFactory.isReactLegacyFactory = true;\\n    mockLegacyFactory.type = child.type;\\n\\n    return React.createElement(mockLegacyFactory, newProps);\\n  }\\n\\n  // The current API doesn't retain _owner and _context, which is why this\\n  // doesn't use ReactElement.cloneAndReplaceProps.\\n  return React.createElement(child.type, newProps);\\n}\\n\\nmodule.exports = cloneWithProps;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/utils/cloneWithProps.js\\n ** module id = 216\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/cloneWithProps.js?\");\n\n/***/ },\n/* 217 */\n/*!******************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/Object.assign.js ***!\n  \\******************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This file contains an unmodified version of:\\n * https://github.com/facebook/react/blob/v0.12.0/src/vendor/stubs/Object.assign.js\\n *\\n * This source code is licensed under the BSD-style license found here:\\n * https://github.com/facebook/react/blob/v0.12.0/LICENSE\\n * An additional grant of patent rights can be found here:\\n * https://github.com/facebook/react/blob/v0.12.0/PATENTS\\n */\\n\\n// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign\\n\\nfunction assign(target, sources) {\\n  if (target == null) {\\n    throw new TypeError('Object.assign target cannot be null or undefined');\\n  }\\n\\n  var to = Object(target);\\n  var hasOwnProperty = Object.prototype.hasOwnProperty;\\n\\n  for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) {\\n    var nextSource = arguments[nextIndex];\\n    if (nextSource == null) {\\n      continue;\\n    }\\n\\n    var from = Object(nextSource);\\n\\n    // We don't currently support accessors nor proxies. Therefore this\\n    // copy cannot throw. If we ever supported this then we must handle\\n    // exceptions and side-effects. We don't support symbols so they won't\\n    // be transferred.\\n\\n    for (var key in from) {\\n      if (hasOwnProperty.call(from, key)) {\\n        to[key] = from[key];\\n      }\\n    }\\n  }\\n\\n  return to;\\n};\\n\\nmodule.exports = assign;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/utils/Object.assign.js\\n ** module id = 217\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/Object.assign.js?\");\n\n/***/ },\n/* 218 */\n/*!***************************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/ValidComponentChildren.js ***!\n  \\***************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\n\\n/**\\n * Maps children that are typically specified as `props.children`,\\n * but only iterates over children that are \\\"valid components\\\".\\n *\\n * The mapFunction provided index will be normalised to the components mapped,\\n * so an invalid component would not increase the index.\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} mapFunction.\\n * @param {*} mapContext Context for mapFunction.\\n * @return {object} Object containing the ordered map of results.\\n */\\nfunction mapValidComponents(children, func, context) {\\n  var index = 0;\\n\\n  return React.Children.map(children, function (child) {\\n    if (React.isValidElement(child)) {\\n      var lastIndex = index;\\n      index++;\\n      return func.call(context, child, lastIndex);\\n    }\\n\\n    return child;\\n  });\\n}\\n\\n/**\\n * Iterates through children that are typically specified as `props.children`,\\n * but only iterates over children that are \\\"valid components\\\".\\n *\\n * The provided forEachFunc(child, index) will be called for each\\n * leaf child with the index reflecting the position relative to \\\"valid components\\\".\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} forEachFunc.\\n * @param {*} forEachContext Context for forEachContext.\\n */\\nfunction forEachValidComponents(children, func, context) {\\n  var index = 0;\\n\\n  return React.Children.forEach(children, function (child) {\\n    if (React.isValidElement(child)) {\\n      func.call(context, child, index);\\n      index++;\\n    }\\n  });\\n}\\n\\n/**\\n * Count the number of \\\"valid components\\\" in the Children container.\\n *\\n * @param {?*} children Children tree container.\\n * @returns {number}\\n */\\nfunction numberOfValidComponents(children) {\\n  var count = 0;\\n\\n  React.Children.forEach(children, function (child) {\\n    if (React.isValidElement(child)) { count++; }\\n  });\\n\\n  return count;\\n}\\n\\n/**\\n * Determine if the Child container has one or more \\\"valid components\\\".\\n *\\n * @param {?*} children Children tree container.\\n * @returns {boolean}\\n */\\nfunction hasValidComponent(children) {\\n  var hasValid = false;\\n\\n  React.Children.forEach(children, function (child) {\\n    if (!hasValid && React.isValidElement(child)) {\\n      hasValid = true;\\n    }\\n  });\\n\\n  return hasValid;\\n}\\n\\nmodule.exports = {\\n  map: mapValidComponents,\\n  forEach: forEachValidComponents,\\n  numberOf: numberOfValidComponents,\\n  hasValidComponent: hasValidComponent\\n};\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/utils/ValidComponentChildren.js\\n ** module id = 218\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/ValidComponentChildren.js?\");\n\n/***/ },\n/* 219 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/Accordion.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar PanelGroup = __webpack_require__(/*! ./PanelGroup */ 220);\\n\\nvar Accordion = React.createClass({displayName: \\\"Accordion\\\",\\n  render: function () {\\n    return (\\n      React.createElement(PanelGroup, React.__spread({},  this.props, {accordion: true}), \\n        this.props.children\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = Accordion;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Accordion.js\\n ** module id = 219\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Accordion.js?\");\n\n/***/ },\n/* 220 */\n/*!*********************************************!*\\\n  !*** ./~/react-bootstrap/lib/PanelGroup.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar cloneWithProps = __webpack_require__(/*! ./utils/cloneWithProps */ 216);\\n\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\nvar ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 218);\\n\\nvar PanelGroup = React.createClass({displayName: \\\"PanelGroup\\\",\\n  mixins: [BootstrapMixin],\\n\\n  propTypes: {\\n    collapsable: React.PropTypes.bool,\\n    activeKey: React.PropTypes.any,\\n    defaultActiveKey: React.PropTypes.any,\\n    onSelect: React.PropTypes.func\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      bsClass: 'panel-group'\\n    };\\n  },\\n\\n  getInitialState: function () {\\n    var defaultActiveKey = this.props.defaultActiveKey;\\n\\n    return {\\n      activeKey: defaultActiveKey\\n    };\\n  },\\n\\n  render: function () {\\n    var classes = this.getBsClassSet();\\n    return (\\n      React.createElement(\\\"div\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes)), onSelect: null}), \\n        ValidComponentChildren.map(this.props.children, this.renderPanel)\\n      )\\n    );\\n  },\\n\\n  renderPanel: function (child, index) {\\n    var activeKey =\\n      this.props.activeKey != null ? this.props.activeKey : this.state.activeKey;\\n\\n    var props = {\\n      bsStyle: child.props.bsStyle || this.props.bsStyle,\\n      key: child.key ? child.key : index,\\n      ref: child.ref\\n    };\\n\\n    if (this.props.accordion) {\\n      props.collapsable = true;\\n      props.expanded = (child.props.eventKey === activeKey);\\n      props.onSelect = this.handleSelect;\\n    }\\n\\n    return cloneWithProps(\\n      child,\\n      props\\n    );\\n  },\\n\\n  shouldComponentUpdate: function() {\\n    // Defer any updates to this component during the `onSelect` handler.\\n    return !this._isChanging;\\n  },\\n\\n  handleSelect: function (key) {\\n    if (this.props.onSelect) {\\n      this._isChanging = true;\\n      this.props.onSelect(key);\\n      this._isChanging = false;\\n    }\\n\\n    if (this.state.activeKey === key) {\\n      key = null;\\n    }\\n\\n    this.setState({\\n      activeKey: key\\n    });\\n  }\\n});\\n\\nmodule.exports = PanelGroup;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/PanelGroup.js\\n ** module id = 220\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/PanelGroup.js?\");\n\n/***/ },\n/* 221 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Affix.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar AffixMixin = __webpack_require__(/*! ./AffixMixin */ 222);\\nvar domUtils = __webpack_require__(/*! ./utils/domUtils */ 223);\\n\\nvar Affix = React.createClass({displayName: \\\"Affix\\\",\\n  statics: {\\n    domUtils: domUtils\\n  },\\n\\n  mixins: [AffixMixin],\\n\\n  render: function () {\\n    var holderStyle = {top: this.state.affixPositionTop};\\n    return (\\n      React.createElement(\\\"div\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, this.state.affixClass), style: holderStyle}), \\n        this.props.children\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = Affix;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Affix.js\\n ** module id = 221\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Affix.js?\");\n\n/***/ },\n/* 222 */\n/*!*********************************************!*\\\n  !*** ./~/react-bootstrap/lib/AffixMixin.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* global window, document */\\n\\nvar React = __webpack_require__(/*! react */ 1);\\nvar domUtils = __webpack_require__(/*! ./utils/domUtils */ 223);\\nvar EventListener = __webpack_require__(/*! ./utils/EventListener */ 224);\\n\\nvar AffixMixin = {\\n  propTypes: {\\n    offset: React.PropTypes.number,\\n    offsetTop: React.PropTypes.number,\\n    offsetBottom: React.PropTypes.number\\n  },\\n\\n  getInitialState: function () {\\n    return {\\n      affixClass: 'affix-top'\\n    };\\n  },\\n\\n  getPinnedOffset: function (DOMNode) {\\n    if (this.pinnedOffset) {\\n      return this.pinnedOffset;\\n    }\\n\\n    DOMNode.className = DOMNode.className.replace(/affix-top|affix-bottom|affix/, '');\\n    DOMNode.className += DOMNode.className.length ? ' affix' : 'affix';\\n\\n    this.pinnedOffset = domUtils.getOffset(DOMNode).top - window.pageYOffset;\\n\\n    return this.pinnedOffset;\\n  },\\n\\n  checkPosition: function () {\\n    var DOMNode, scrollHeight, scrollTop, position, offsetTop, offsetBottom,\\n        affix, affixType, affixPositionTop;\\n\\n    // TODO: or not visible\\n    if (!this.isMounted()) {\\n      return;\\n    }\\n\\n    DOMNode = this.getDOMNode();\\n    scrollHeight = document.documentElement.offsetHeight;\\n    scrollTop = window.pageYOffset;\\n    position = domUtils.getOffset(DOMNode);\\n    offsetTop;\\n    offsetBottom;\\n\\n    if (this.affixed === 'top') {\\n      position.top += scrollTop;\\n    }\\n\\n    offsetTop = this.props.offsetTop != null ?\\n      this.props.offsetTop : this.props.offset;\\n    offsetBottom = this.props.offsetBottom != null ?\\n      this.props.offsetBottom : this.props.offset;\\n\\n    if (offsetTop == null && offsetBottom == null) {\\n      return;\\n    }\\n    if (offsetTop == null) {\\n      offsetTop = 0;\\n    }\\n    if (offsetBottom == null) {\\n      offsetBottom = 0;\\n    }\\n\\n    if (this.unpin != null && (scrollTop + this.unpin <= position.top)) {\\n      affix = false;\\n    } else if (offsetBottom != null && (position.top + DOMNode.offsetHeight >= scrollHeight - offsetBottom)) {\\n      affix = 'bottom';\\n    } else if (offsetTop != null && (scrollTop <= offsetTop)) {\\n      affix = 'top';\\n    } else {\\n      affix = false;\\n    }\\n\\n    if (this.affixed === affix) {\\n      return;\\n    }\\n\\n    if (this.unpin != null) {\\n      DOMNode.style.top = '';\\n    }\\n\\n    affixType = 'affix' + (affix ? '-' + affix : '');\\n\\n    this.affixed = affix;\\n    this.unpin = affix === 'bottom' ?\\n      this.getPinnedOffset(DOMNode) : null;\\n\\n    if (affix === 'bottom') {\\n      DOMNode.className = DOMNode.className.replace(/affix-top|affix-bottom|affix/, 'affix-bottom');\\n      affixPositionTop = scrollHeight - offsetBottom - DOMNode.offsetHeight - domUtils.getOffset(DOMNode).top;\\n    }\\n\\n    this.setState({\\n      affixClass: affixType,\\n      affixPositionTop: affixPositionTop\\n    });\\n  },\\n\\n  checkPositionWithEventLoop: function () {\\n    setTimeout(this.checkPosition, 0);\\n  },\\n\\n  componentDidMount: function () {\\n    this._onWindowScrollListener =\\n      EventListener.listen(window, 'scroll', this.checkPosition);\\n    this._onDocumentClickListener =\\n      EventListener.listen(document, 'click', this.checkPositionWithEventLoop);\\n  },\\n\\n  componentWillUnmount: function () {\\n    if (this._onWindowScrollListener) {\\n      this._onWindowScrollListener.remove();\\n    }\\n\\n    if (this._onDocumentClickListener) {\\n      this._onDocumentClickListener.remove();\\n    }\\n  },\\n\\n  componentDidUpdate: function (prevProps, prevState) {\\n    if (prevState.affixClass === this.state.affixClass) {\\n      this.checkPositionWithEventLoop();\\n    }\\n  }\\n};\\n\\nmodule.exports = AffixMixin;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/AffixMixin.js\\n ** module id = 222\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/AffixMixin.js?\");\n\n/***/ },\n/* 223 */\n/*!*************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/domUtils.js ***!\n  \\*************************************************/\n/***/ function(module, exports) {\n\n\teval(\"\\n/**\\n * Shortcut to compute element style\\n *\\n * @param {HTMLElement} elem\\n * @returns {CssStyle}\\n */\\nfunction getComputedStyles(elem) {\\n  return elem.ownerDocument.defaultView.getComputedStyle(elem, null);\\n}\\n\\n/**\\n * Get elements offset\\n *\\n * TODO: REMOVE JQUERY!\\n *\\n * @param {HTMLElement} DOMNode\\n * @returns {{top: number, left: number}}\\n */\\nfunction getOffset(DOMNode) {\\n  if (window.jQuery) {\\n    return window.jQuery(DOMNode).offset();\\n  }\\n\\n  var docElem = document.documentElement;\\n  var box = { top: 0, left: 0 };\\n\\n  // If we don't have gBCR, just use 0,0 rather than error\\n  // BlackBerry 5, iOS 3 (original iPhone)\\n  if ( typeof DOMNode.getBoundingClientRect !== 'undefined' ) {\\n    box = DOMNode.getBoundingClientRect();\\n  }\\n\\n  return {\\n    top: box.top + window.pageYOffset - docElem.clientTop,\\n    left: box.left + window.pageXOffset - docElem.clientLeft\\n  };\\n}\\n\\n/**\\n * Get elements position\\n *\\n * TODO: REMOVE JQUERY!\\n *\\n * @param {HTMLElement} elem\\n * @param {HTMLElement?} offsetParent\\n * @returns {{top: number, left: number}}\\n */\\nfunction getPosition(elem, offsetParent) {\\n  if (window.jQuery) {\\n    return window.jQuery(elem).position();\\n  }\\n\\n  var offset,\\n      parentOffset = {top: 0, left: 0};\\n\\n  // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent\\n  if (getComputedStyles(elem).position === 'fixed' ) {\\n    // We assume that getBoundingClientRect is available when computed position is fixed\\n    offset = elem.getBoundingClientRect();\\n\\n  } else {\\n    if (!offsetParent) {\\n      // Get *real* offsetParent\\n      offsetParent = offsetParent(elem);\\n    }\\n\\n    // Get correct offsets\\n    offset = getOffset(elem);\\n    if ( offsetParent.nodeName !== 'HTML') {\\n      parentOffset = getOffset(offsetParent);\\n    }\\n\\n    // Add offsetParent borders\\n    parentOffset.top += parseInt(getComputedStyles(offsetParent).borderTopWidth, 10);\\n    parentOffset.left += parseInt(getComputedStyles(offsetParent).borderLeftWidth, 10);\\n  }\\n\\n  // Subtract parent offsets and element margins\\n  return {\\n    top: offset.top - parentOffset.top - parseInt(getComputedStyles(elem).marginTop, 10),\\n    left: offset.left - parentOffset.left - parseInt(getComputedStyles(elem).marginLeft, 10)\\n  };\\n}\\n\\n/**\\n * Get parent element\\n *\\n * @param {HTMLElement?} elem\\n * @returns {HTMLElement}\\n */\\nfunction offsetParent(elem) {\\n  var docElem = document.documentElement;\\n  var offsetParent = elem.offsetParent || docElem;\\n\\n  while ( offsetParent && ( offsetParent.nodeName !== 'HTML' &&\\n    getComputedStyles(offsetParent).position === 'static' ) ) {\\n    offsetParent = offsetParent.offsetParent;\\n  }\\n\\n  return offsetParent || docElem;\\n}\\n\\nmodule.exports = {\\n  getComputedStyles: getComputedStyles,\\n  getOffset: getOffset,\\n  getPosition: getPosition,\\n  offsetParent: offsetParent\\n};\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/utils/domUtils.js\\n ** module id = 223\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/domUtils.js?\");\n\n/***/ },\n/* 224 */\n/*!******************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/EventListener.js ***!\n  \\******************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014 Facebook, Inc.\\n *\\n * This file contains a modified version of:\\n * https://github.com/facebook/react/blob/v0.12.0/src/vendor/stubs/EventListener.js\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n *\\n * TODO: remove in favour of solution provided by:\\n *  https://github.com/facebook/react/issues/285\\n */\\n\\n/**\\n * Does not take into account specific nature of platform.\\n */\\nvar EventListener = {\\n  /**\\n   * Listen to DOM events during the bubble phase.\\n   *\\n   * @param {DOMEventTarget} target DOM element to register listener on.\\n   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\\n   * @param {function} callback Callback function.\\n   * @return {object} Object with a `remove` method.\\n   */\\n  listen: function(target, eventType, callback) {\\n    if (target.addEventListener) {\\n      target.addEventListener(eventType, callback, false);\\n      return {\\n        remove: function() {\\n          target.removeEventListener(eventType, callback, false);\\n        }\\n      };\\n    } else if (target.attachEvent) {\\n      target.attachEvent('on' + eventType, callback);\\n      return {\\n        remove: function() {\\n          target.detachEvent('on' + eventType, callback);\\n        }\\n      };\\n    }\\n  }\\n};\\n\\nmodule.exports = EventListener;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/utils/EventListener.js\\n ** module id = 224\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/EventListener.js?\");\n\n/***/ },\n/* 225 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Alert.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\n\\n\\nvar Alert = React.createClass({displayName: \\\"Alert\\\",\\n  mixins: [BootstrapMixin],\\n\\n  propTypes: {\\n    onDismiss: React.PropTypes.func,\\n    dismissAfter: React.PropTypes.number\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      bsClass: 'alert',\\n      bsStyle: 'info'\\n    };\\n  },\\n\\n  renderDismissButton: function () {\\n    return (\\n      React.createElement(\\\"button\\\", {\\n        type: \\\"button\\\", \\n        className: \\\"close\\\", \\n        onClick: this.props.onDismiss, \\n        \\\"aria-hidden\\\": \\\"true\\\"}, \\n        \\\"×\\\"\\n      )\\n    );\\n  },\\n\\n  render: function () {\\n    var classes = this.getBsClassSet();\\n    var isDismissable = !!this.props.onDismiss;\\n\\n    classes['alert-dismissable'] = isDismissable;\\n\\n    return (\\n      React.createElement(\\\"div\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes))}), \\n        isDismissable ? this.renderDismissButton() : null, \\n        this.props.children\\n      )\\n    );\\n  },\\n\\n  componentDidMount: function() {\\n    if (this.props.dismissAfter && this.props.onDismiss) {\\n      this.dismissTimer = setTimeout(this.props.onDismiss, this.props.dismissAfter);\\n    }\\n  },\\n\\n  componentWillUnmount: function() {\\n    clearTimeout(this.dismissTimer);\\n  }\\n});\\n\\nmodule.exports = Alert;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Alert.js\\n ** module id = 225\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Alert.js?\");\n\n/***/ },\n/* 226 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Badge.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 218);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\n\\nvar Badge = React.createClass({displayName: \\\"Badge\\\",\\n  propTypes: {\\n    pullRight: React.PropTypes.bool\\n  },\\n\\n  hasContent: function () {\\n    return ValidComponentChildren.hasValidComponent(this.props.children) ||\\n      (typeof this.props.children === 'string') ||\\n      (typeof this.props.children === 'number')\\n  },\\n\\n  render: function () {\\n    var classes = {\\n      'pull-right': this.props.pullRight,\\n      'badge': this.hasContent()\\n    };\\n    return (\\n      React.createElement(\\\"span\\\", React.__spread({}, \\n        this.props, \\n        {className: joinClasses(this.props.className, classSet(classes))}), \\n        this.props.children\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = Badge;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Badge.js\\n ** module id = 226\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Badge.js?\");\n\n/***/ },\n/* 227 */\n/*!*****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Button.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\n\\nvar Button = React.createClass({displayName: \\\"Button\\\",\\n  mixins: [BootstrapMixin],\\n\\n  propTypes: {\\n    active:   React.PropTypes.bool,\\n    disabled: React.PropTypes.bool,\\n    block:    React.PropTypes.bool,\\n    navItem:    React.PropTypes.bool,\\n    navDropdown: React.PropTypes.bool,\\n    componentClass: React.PropTypes.node,\\n    href: React.PropTypes.string,\\n    target: React.PropTypes.string\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      bsClass: 'button',\\n      bsStyle: 'default',\\n      type: 'button'\\n    };\\n  },\\n\\n  render: function () {\\n    var classes = this.props.navDropdown ? {} : this.getBsClassSet();\\n    var renderFuncName;\\n\\n    classes['active'] = this.props.active;\\n    classes['btn-block'] = this.props.block;\\n\\n    if (this.props.navItem) {\\n      return this.renderNavItem(classes);\\n    }\\n\\n    renderFuncName = this.props.href || this.props.target || this.props.navDropdown ?\\n      'renderAnchor' : 'renderButton';\\n\\n    return this[renderFuncName](classes);\\n  },\\n\\n  renderAnchor: function (classes) {\\n\\n    var Component = this.props.componentClass || 'a';\\n    var href = this.props.href || '#';\\n    classes['disabled'] = this.props.disabled;\\n\\n    return (\\n      React.createElement(Component, React.__spread({}, \\n        this.props, \\n        {href: href, \\n        className: joinClasses(this.props.className, classSet(classes)), \\n        role: \\\"button\\\"}), \\n        this.props.children\\n      )\\n    );\\n  },\\n\\n  renderButton: function (classes) {\\n    var Component = this.props.componentClass || 'button';\\n\\n    return (\\n      React.createElement(Component, React.__spread({}, \\n        this.props, \\n        {className: joinClasses(this.props.className, classSet(classes))}), \\n        this.props.children\\n      )\\n    );\\n  },\\n\\n  renderNavItem: function (classes) {\\n    var liClasses = {\\n      active: this.props.active\\n    };\\n\\n    return (\\n      React.createElement(\\\"li\\\", {className: classSet(liClasses)}, \\n        this.renderAnchor(classes)\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = Button;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Button.js\\n ** module id = 227\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Button.js?\");\n\n/***/ },\n/* 228 */\n/*!**********************************************!*\\\n  !*** ./~/react-bootstrap/lib/ButtonGroup.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\nvar Button = __webpack_require__(/*! ./Button */ 227);\\n\\nvar ButtonGroup = React.createClass({displayName: \\\"ButtonGroup\\\",\\n  mixins: [BootstrapMixin],\\n\\n  propTypes: {\\n    vertical:  React.PropTypes.bool,\\n    justified: React.PropTypes.bool\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      bsClass: 'button-group'\\n    };\\n  },\\n\\n  render: function () {\\n    var classes = this.getBsClassSet();\\n    classes['btn-group'] = !this.props.vertical;\\n    classes['btn-group-vertical'] = this.props.vertical;\\n    classes['btn-group-justified'] = this.props.justified;\\n\\n    return (\\n      React.createElement(\\\"div\\\", React.__spread({}, \\n        this.props, \\n        {className: joinClasses(this.props.className, classSet(classes))}), \\n        this.props.children\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = ButtonGroup;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/ButtonGroup.js\\n ** module id = 228\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ButtonGroup.js?\");\n\n/***/ },\n/* 229 */\n/*!************************************************!*\\\n  !*** ./~/react-bootstrap/lib/ButtonToolbar.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\nvar Button = __webpack_require__(/*! ./Button */ 227);\\n\\nvar ButtonToolbar = React.createClass({displayName: \\\"ButtonToolbar\\\",\\n  mixins: [BootstrapMixin],\\n\\n  getDefaultProps: function () {\\n    return {\\n      bsClass: 'button-toolbar'\\n    };\\n  },\\n\\n  render: function () {\\n    var classes = this.getBsClassSet();\\n\\n    return (\\n      React.createElement(\\\"div\\\", React.__spread({}, \\n        this.props, \\n        {role: \\\"toolbar\\\", \\n        className: joinClasses(this.props.className, classSet(classes))}), \\n        this.props.children\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = ButtonToolbar;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/ButtonToolbar.js\\n ** module id = 229\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ButtonToolbar.js?\");\n\n/***/ },\n/* 230 */\n/*!*******************************************!*\\\n  !*** ./~/react-bootstrap/lib/Carousel.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar cloneWithProps = __webpack_require__(/*! ./utils/cloneWithProps */ 216);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\nvar ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 218);\\n\\nvar Carousel = React.createClass({displayName: \\\"Carousel\\\",\\n  mixins: [BootstrapMixin],\\n\\n  propTypes: {\\n    slide: React.PropTypes.bool,\\n    indicators: React.PropTypes.bool,\\n    controls: React.PropTypes.bool,\\n    pauseOnHover: React.PropTypes.bool,\\n    wrap: React.PropTypes.bool,\\n    onSelect: React.PropTypes.func,\\n    onSlideEnd: React.PropTypes.func,\\n    activeIndex: React.PropTypes.number,\\n    defaultActiveIndex: React.PropTypes.number,\\n    direction: React.PropTypes.oneOf(['prev', 'next'])\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      slide: true,\\n      interval: 5000,\\n      pauseOnHover: true,\\n      wrap: true,\\n      indicators: true,\\n      controls: true\\n    };\\n  },\\n\\n  getInitialState: function () {\\n    return {\\n      activeIndex: this.props.defaultActiveIndex == null ?\\n        0 : this.props.defaultActiveIndex,\\n      previousActiveIndex: null,\\n      direction: null\\n    };\\n  },\\n\\n  getDirection: function (prevIndex, index) {\\n    if (prevIndex === index) {\\n      return null;\\n    }\\n\\n    return prevIndex > index ?\\n      'prev' : 'next';\\n  },\\n\\n  componentWillReceiveProps: function (nextProps) {\\n    var activeIndex = this.getActiveIndex();\\n\\n    if (nextProps.activeIndex != null && nextProps.activeIndex !== activeIndex) {\\n      clearTimeout(this.timeout);\\n      this.setState({\\n        previousActiveIndex: activeIndex,\\n        direction: nextProps.direction != null ?\\n          nextProps.direction : this.getDirection(activeIndex, nextProps.activeIndex)\\n      });\\n    }\\n  },\\n\\n  componentDidMount: function () {\\n    this.waitForNext();\\n  },\\n\\n  componentWillUnmount: function() {\\n    clearTimeout(this.timeout);\\n  },\\n\\n  next: function (e) {\\n    if (e) {\\n      e.preventDefault();\\n    }\\n\\n    var index = this.getActiveIndex() + 1;\\n    var count = ValidComponentChildren.numberOf(this.props.children);\\n\\n    if (index > count - 1) {\\n      if (!this.props.wrap) {\\n        return;\\n      }\\n      index = 0;\\n    }\\n\\n    this.handleSelect(index, 'next');\\n  },\\n\\n  prev: function (e) {\\n    if (e) {\\n      e.preventDefault();\\n    }\\n\\n    var index = this.getActiveIndex() - 1;\\n\\n    if (index < 0) {\\n      if (!this.props.wrap) {\\n        return;\\n      }\\n      index = ValidComponentChildren.numberOf(this.props.children) - 1;\\n    }\\n\\n    this.handleSelect(index, 'prev');\\n  },\\n\\n  pause: function () {\\n    this.isPaused = true;\\n    clearTimeout(this.timeout);\\n  },\\n\\n  play: function () {\\n    this.isPaused = false;\\n    this.waitForNext();\\n  },\\n\\n  waitForNext: function () {\\n    if (!this.isPaused && this.props.slide && this.props.interval &&\\n        this.props.activeIndex == null) {\\n      this.timeout = setTimeout(this.next, this.props.interval);\\n    }\\n  },\\n\\n  handleMouseOver: function () {\\n    if (this.props.pauseOnHover) {\\n      this.pause();\\n    }\\n  },\\n\\n  handleMouseOut: function () {\\n    if (this.isPaused) {\\n      this.play();\\n    }\\n  },\\n\\n  render: function () {\\n    var classes = {\\n      carousel: true,\\n      slide: this.props.slide\\n    };\\n\\n    return (\\n      React.createElement(\\\"div\\\", React.__spread({}, \\n        this.props, \\n        {className: joinClasses(this.props.className, classSet(classes)), \\n        onMouseOver: this.handleMouseOver, \\n        onMouseOut: this.handleMouseOut}), \\n        this.props.indicators ? this.renderIndicators() : null, \\n        React.createElement(\\\"div\\\", {className: \\\"carousel-inner\\\", ref: \\\"inner\\\"}, \\n          ValidComponentChildren.map(this.props.children, this.renderItem)\\n        ), \\n        this.props.controls ? this.renderControls() : null\\n      )\\n    );\\n  },\\n\\n  renderPrev: function () {\\n    return (\\n      React.createElement(\\\"a\\\", {className: \\\"left carousel-control\\\", href: \\\"#prev\\\", key: 0, onClick: this.prev}, \\n        React.createElement(\\\"span\\\", {className: \\\"glyphicon glyphicon-chevron-left\\\"})\\n      )\\n    );\\n  },\\n\\n  renderNext: function () {\\n    return (\\n      React.createElement(\\\"a\\\", {className: \\\"right carousel-control\\\", href: \\\"#next\\\", key: 1, onClick: this.next}, \\n        React.createElement(\\\"span\\\", {className: \\\"glyphicon glyphicon-chevron-right\\\"})\\n      )\\n    );\\n  },\\n\\n  renderControls: function () {\\n    if (this.props.wrap) {\\n      var activeIndex = this.getActiveIndex();\\n      var count = ValidComponentChildren.numberOf(this.props.children);\\n\\n      return [\\n        (activeIndex !== 0) ? this.renderPrev() : null,\\n        (activeIndex !== count - 1) ? this.renderNext() : null\\n      ];\\n    }\\n\\n    return [\\n      this.renderPrev(),\\n      this.renderNext()\\n    ];\\n  },\\n\\n  renderIndicator: function (child, index) {\\n    var className = (index === this.getActiveIndex()) ?\\n      'active' : null;\\n\\n    return (\\n      React.createElement(\\\"li\\\", {\\n        key: index, \\n        className: className, \\n        onClick: this.handleSelect.bind(this, index, null)})\\n    );\\n  },\\n\\n  renderIndicators: function () {\\n    var indicators = [];\\n    ValidComponentChildren\\n      .forEach(this.props.children, function(child, index) {\\n        indicators.push(\\n          this.renderIndicator(child, index),\\n\\n          // Force whitespace between indicator elements, bootstrap\\n          // requires this for correct spacing of elements.\\n          ' '\\n        );\\n      }, this);\\n\\n    return (\\n      React.createElement(\\\"ol\\\", {className: \\\"carousel-indicators\\\"}, \\n        indicators\\n      )\\n    );\\n  },\\n\\n  getActiveIndex: function () {\\n    return this.props.activeIndex != null ? this.props.activeIndex : this.state.activeIndex;\\n  },\\n\\n  handleItemAnimateOutEnd: function () {\\n    this.setState({\\n      previousActiveIndex: null,\\n      direction: null\\n    }, function() {\\n      this.waitForNext();\\n\\n      if (this.props.onSlideEnd) {\\n        this.props.onSlideEnd();\\n      }\\n    });\\n  },\\n\\n  renderItem: function (child, index) {\\n    var activeIndex = this.getActiveIndex();\\n    var isActive = (index === activeIndex);\\n    var isPreviousActive = this.state.previousActiveIndex != null &&\\n            this.state.previousActiveIndex === index && this.props.slide;\\n\\n    return cloneWithProps(\\n        child,\\n        {\\n          active: isActive,\\n          ref: child.ref,\\n          key: child.key ? child.key : index,\\n          index: index,\\n          animateOut: isPreviousActive,\\n          animateIn: isActive && this.state.previousActiveIndex != null && this.props.slide,\\n          direction: this.state.direction,\\n          onAnimateOutEnd: isPreviousActive ? this.handleItemAnimateOutEnd: null\\n        }\\n      );\\n  },\\n\\n  handleSelect: function (index, direction) {\\n    clearTimeout(this.timeout);\\n\\n    var previousActiveIndex = this.getActiveIndex();\\n    direction = direction || this.getDirection(previousActiveIndex, index);\\n\\n    if (this.props.onSelect) {\\n      this.props.onSelect(index, direction);\\n    }\\n\\n    if (this.props.activeIndex == null && index !== previousActiveIndex) {\\n      if (this.state.previousActiveIndex != null) {\\n        // If currently animating don't activate the new index.\\n        // TODO: look into queuing this canceled call and\\n        // animating after the current animation has ended.\\n        return;\\n      }\\n\\n      this.setState({\\n        activeIndex: index,\\n        previousActiveIndex: previousActiveIndex,\\n        direction: direction\\n      });\\n    }\\n  }\\n});\\n\\nmodule.exports = Carousel;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Carousel.js\\n ** module id = 230\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Carousel.js?\");\n\n/***/ },\n/* 231 */\n/*!***********************************************!*\\\n  !*** ./~/react-bootstrap/lib/CarouselItem.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar TransitionEvents = __webpack_require__(/*! ./utils/TransitionEvents */ 232);\\n\\nvar CarouselItem = React.createClass({displayName: \\\"CarouselItem\\\",\\n  propTypes: {\\n    direction: React.PropTypes.oneOf(['prev', 'next']),\\n    onAnimateOutEnd: React.PropTypes.func,\\n    active: React.PropTypes.bool,\\n    caption: React.PropTypes.node\\n  },\\n\\n  getInitialState: function () {\\n    return {\\n      direction: null\\n    };\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      animation: true\\n    };\\n  },\\n\\n  handleAnimateOutEnd: function () {\\n    if (this.props.onAnimateOutEnd && this.isMounted()) {\\n      this.props.onAnimateOutEnd(this.props.index);\\n    }\\n  },\\n\\n  componentWillReceiveProps: function (nextProps) {\\n    if (this.props.active !== nextProps.active) {\\n      this.setState({\\n        direction: null\\n      });\\n    }\\n  },\\n\\n  componentDidUpdate: function (prevProps) {\\n    if (!this.props.active && prevProps.active) {\\n      TransitionEvents.addEndEventListener(\\n        this.getDOMNode(),\\n        this.handleAnimateOutEnd\\n      );\\n    }\\n\\n    if (this.props.active !== prevProps.active) {\\n      setTimeout(this.startAnimation, 20);\\n    }\\n  },\\n\\n  startAnimation: function () {\\n    if (!this.isMounted()) {\\n      return;\\n    }\\n\\n    this.setState({\\n      direction: this.props.direction === 'prev' ?\\n        'right' : 'left'\\n    });\\n  },\\n\\n  render: function () {\\n    var classes = {\\n      item: true,\\n      active: (this.props.active && !this.props.animateIn) || this.props.animateOut,\\n      next: this.props.active && this.props.animateIn && this.props.direction === 'next',\\n      prev: this.props.active && this.props.animateIn && this.props.direction === 'prev'\\n    };\\n\\n    if (this.state.direction && (this.props.animateIn || this.props.animateOut)) {\\n      classes[this.state.direction] = true;\\n    }\\n\\n    return (\\n      React.createElement(\\\"div\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes))}), \\n        this.props.children, \\n        this.props.caption ? this.renderCaption() : null\\n      )\\n    );\\n  },\\n\\n  renderCaption: function () {\\n    return (\\n      React.createElement(\\\"div\\\", {className: \\\"carousel-caption\\\"}, \\n        this.props.caption\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = CarouselItem;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/CarouselItem.js\\n ** module id = 231\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/CarouselItem.js?\");\n\n/***/ },\n/* 232 */\n/*!*********************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/TransitionEvents.js ***!\n  \\*********************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This file contains a modified version of:\\n * https://github.com/facebook/react/blob/v0.12.0/src/addons/transitions/ReactTransitionEvents.js\\n *\\n * This source code is licensed under the BSD-style license found here:\\n * https://github.com/facebook/react/blob/v0.12.0/LICENSE\\n * An additional grant of patent rights can be found here:\\n * https://github.com/facebook/react/blob/v0.12.0/PATENTS\\n */\\n\\nvar canUseDOM = !!(\\n  typeof window !== 'undefined' &&\\n    window.document &&\\n    window.document.createElement\\n  );\\n\\n/**\\n * EVENT_NAME_MAP is used to determine which event fired when a\\n * transition/animation ends, based on the style property used to\\n * define that event.\\n */\\nvar EVENT_NAME_MAP = {\\n  transitionend: {\\n    'transition': 'transitionend',\\n    'WebkitTransition': 'webkitTransitionEnd',\\n    'MozTransition': 'mozTransitionEnd',\\n    'OTransition': 'oTransitionEnd',\\n    'msTransition': 'MSTransitionEnd'\\n  },\\n\\n  animationend: {\\n    'animation': 'animationend',\\n    'WebkitAnimation': 'webkitAnimationEnd',\\n    'MozAnimation': 'mozAnimationEnd',\\n    'OAnimation': 'oAnimationEnd',\\n    'msAnimation': 'MSAnimationEnd'\\n  }\\n};\\n\\nvar endEvents = [];\\n\\nfunction detectEvents() {\\n  var testEl = document.createElement('div');\\n  var style = testEl.style;\\n\\n  // On some platforms, in particular some releases of Android 4.x,\\n  // the un-prefixed \\\"animation\\\" and \\\"transition\\\" properties are defined on the\\n  // style object but the events that fire will still be prefixed, so we need\\n  // to check if the un-prefixed events are useable, and if not remove them\\n  // from the map\\n  if (!('AnimationEvent' in window)) {\\n    delete EVENT_NAME_MAP.animationend.animation;\\n  }\\n\\n  if (!('TransitionEvent' in window)) {\\n    delete EVENT_NAME_MAP.transitionend.transition;\\n  }\\n\\n  for (var baseEventName in EVENT_NAME_MAP) {\\n    var baseEvents = EVENT_NAME_MAP[baseEventName];\\n    for (var styleName in baseEvents) {\\n      if (styleName in style) {\\n        endEvents.push(baseEvents[styleName]);\\n        break;\\n      }\\n    }\\n  }\\n}\\n\\nif (canUseDOM) {\\n  detectEvents();\\n}\\n\\n// We use the raw {add|remove}EventListener() call because EventListener\\n// does not know how to remove event listeners and we really should\\n// clean up. Also, these events are not triggered in older browsers\\n// so we should be A-OK here.\\n\\nfunction addEventListener(node, eventName, eventListener) {\\n  node.addEventListener(eventName, eventListener, false);\\n}\\n\\nfunction removeEventListener(node, eventName, eventListener) {\\n  node.removeEventListener(eventName, eventListener, false);\\n}\\n\\nvar ReactTransitionEvents = {\\n  addEndEventListener: function(node, eventListener) {\\n    if (endEvents.length === 0) {\\n      // If CSS transitions are not supported, trigger an \\\"end animation\\\"\\n      // event immediately.\\n      window.setTimeout(eventListener, 0);\\n      return;\\n    }\\n    endEvents.forEach(function(endEvent) {\\n      addEventListener(node, endEvent, eventListener);\\n    });\\n  },\\n\\n  removeEndEventListener: function(node, eventListener) {\\n    if (endEvents.length === 0) {\\n      return;\\n    }\\n    endEvents.forEach(function(endEvent) {\\n      removeEventListener(node, endEvent, eventListener);\\n    });\\n  }\\n};\\n\\nmodule.exports = ReactTransitionEvents;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/utils/TransitionEvents.js\\n ** module id = 232\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/TransitionEvents.js?\");\n\n/***/ },\n/* 233 */\n/*!**************************************!*\\\n  !*** ./~/react-bootstrap/lib/Col.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar constants = __webpack_require__(/*! ./constants */ 215);\\n\\n\\nvar Col = React.createClass({displayName: \\\"Col\\\",\\n  propTypes: {\\n    xs: React.PropTypes.number,\\n    sm: React.PropTypes.number,\\n    md: React.PropTypes.number,\\n    lg: React.PropTypes.number,\\n    xsOffset: React.PropTypes.number,\\n    smOffset: React.PropTypes.number,\\n    mdOffset: React.PropTypes.number,\\n    lgOffset: React.PropTypes.number,\\n    xsPush: React.PropTypes.number,\\n    smPush: React.PropTypes.number,\\n    mdPush: React.PropTypes.number,\\n    lgPush: React.PropTypes.number,\\n    xsPull: React.PropTypes.number,\\n    smPull: React.PropTypes.number,\\n    mdPull: React.PropTypes.number,\\n    lgPull: React.PropTypes.number,\\n    componentClass: React.PropTypes.node.isRequired\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      componentClass: 'div'\\n    };\\n  },\\n\\n  render: function () {\\n    var ComponentClass = this.props.componentClass;\\n    var classes = {};\\n\\n    Object.keys(constants.SIZES).forEach(function (key) {\\n      var size = constants.SIZES[key];\\n      var prop = size;\\n      var classPart = size + '-';\\n\\n      if (this.props[prop]) {\\n        classes['col-' + classPart + this.props[prop]] = true;\\n      }\\n\\n      prop = size + 'Offset';\\n      classPart = size + '-offset-';\\n      if (this.props[prop]) {\\n        classes['col-' + classPart + this.props[prop]] = true;\\n      }\\n\\n      prop = size + 'Push';\\n      classPart = size + '-push-';\\n      if (this.props[prop]) {\\n        classes['col-' + classPart + this.props[prop]] = true;\\n      }\\n\\n      prop = size + 'Pull';\\n      classPart = size + '-pull-';\\n      if (this.props[prop]) {\\n        classes['col-' + classPart + this.props[prop]] = true;\\n      }\\n    }, this);\\n\\n    return (\\n      React.createElement(ComponentClass, React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes))}), \\n        this.props.children\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = Col;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Col.js\\n ** module id = 233\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Col.js?\");\n\n/***/ },\n/* 234 */\n/*!***************************************************!*\\\n  !*** ./~/react-bootstrap/lib/CollapsableMixin.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar TransitionEvents = __webpack_require__(/*! ./utils/TransitionEvents */ 232);\\n\\nvar CollapsableMixin = {\\n\\n  propTypes: {\\n    collapsable: React.PropTypes.bool,\\n    defaultExpanded: React.PropTypes.bool,\\n    expanded: React.PropTypes.bool\\n  },\\n\\n  getInitialState: function () {\\n    return {\\n      expanded: this.props.defaultExpanded != null ? this.props.defaultExpanded : null,\\n      collapsing: false\\n    };\\n  },\\n\\n  handleTransitionEnd: function () {\\n    this._collapseEnd = true;\\n    this.setState({\\n      collapsing: false\\n    });\\n  },\\n\\n  componentWillReceiveProps: function (newProps) {\\n    if (this.props.collapsable && newProps.expanded !== this.props.expanded) {\\n      this._collapseEnd = false;\\n      this.setState({\\n        collapsing: true\\n      });\\n    }\\n  },\\n\\n  _addEndTransitionListener: function () {\\n    var node = this.getCollapsableDOMNode();\\n\\n    if (node) {\\n      TransitionEvents.addEndEventListener(\\n        node,\\n        this.handleTransitionEnd\\n      );\\n    }\\n  },\\n\\n  _removeEndTransitionListener: function () {\\n    var node = this.getCollapsableDOMNode();\\n\\n    if (node) {\\n      TransitionEvents.removeEndEventListener(\\n        node,\\n        this.handleTransitionEnd\\n      );\\n    }\\n  },\\n\\n  componentDidMount: function () {\\n    this._afterRender();\\n  },\\n\\n  componentWillUnmount: function () {\\n    this._removeEndTransitionListener();\\n  },\\n\\n  componentWillUpdate: function (nextProps) {\\n    var dimension = (typeof this.getCollapsableDimension === 'function') ?\\n      this.getCollapsableDimension() : 'height';\\n    var node = this.getCollapsableDOMNode();\\n\\n    this._removeEndTransitionListener();\\n  },\\n\\n  componentDidUpdate: function (prevProps, prevState) {\\n    this._afterRender();\\n  },\\n\\n  _afterRender: function () {\\n    if (!this.props.collapsable) {\\n      return;\\n    }\\n\\n    this._addEndTransitionListener();\\n    setTimeout(this._updateDimensionAfterRender, 0);\\n  },\\n\\n  _updateDimensionAfterRender: function () {\\n    var node = this.getCollapsableDOMNode();\\n    if (node) {\\n        var dimension = (typeof this.getCollapsableDimension === 'function') ?\\n            this.getCollapsableDimension() : 'height';\\n        node.style[dimension] = this.isExpanded() ?\\n            this.getCollapsableDimensionValue() + 'px' : '0px';\\n    }\\n  },\\n\\n  isExpanded: function () {\\n    return (this.props.expanded != null) ?\\n      this.props.expanded : this.state.expanded;\\n  },\\n\\n  getCollapsableClassSet: function (className) {\\n    var classes = {};\\n\\n    if (typeof className === 'string') {\\n      className.split(' ').forEach(function (className) {\\n        if (className) {\\n          classes[className] = true;\\n        }\\n      });\\n    }\\n\\n    classes.collapsing = this.state.collapsing;\\n    classes.collapse = !this.state.collapsing;\\n    classes['in'] = this.isExpanded() && !this.state.collapsing;\\n\\n    return classes;\\n  }\\n};\\n\\nmodule.exports = CollapsableMixin;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/CollapsableMixin.js\\n ** module id = 234\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/CollapsableMixin.js?\");\n\n/***/ },\n/* 235 */\n/*!*************************************************!*\\\n  !*** ./~/react-bootstrap/lib/DropdownButton.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar cloneWithProps = __webpack_require__(/*! ./utils/cloneWithProps */ 216);\\n\\nvar createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 236);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\nvar DropdownStateMixin = __webpack_require__(/*! ./DropdownStateMixin */ 237);\\nvar Button = __webpack_require__(/*! ./Button */ 227);\\nvar ButtonGroup = __webpack_require__(/*! ./ButtonGroup */ 228);\\nvar DropdownMenu = __webpack_require__(/*! ./DropdownMenu */ 238);\\nvar ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 218);\\n\\n\\nvar DropdownButton = React.createClass({displayName: \\\"DropdownButton\\\",\\n  mixins: [BootstrapMixin, DropdownStateMixin],\\n\\n  propTypes: {\\n    pullRight: React.PropTypes.bool,\\n    dropup:    React.PropTypes.bool,\\n    title:     React.PropTypes.node,\\n    href:      React.PropTypes.string,\\n    onClick:   React.PropTypes.func,\\n    onSelect:  React.PropTypes.func,\\n    navItem:   React.PropTypes.bool,\\n    noCaret:   React.PropTypes.bool\\n  },\\n\\n  render: function () {\\n    var renderMethod = this.props.navItem ?\\n      'renderNavItem' : 'renderButtonGroup';\\n\\n    var caret = this.props.noCaret ?\\n        null : (React.createElement(\\\"span\\\", {className: \\\"caret\\\"}));\\n\\n    return this[renderMethod]([\\n      React.createElement(Button, React.__spread({}, \\n        this.props, \\n        {ref: \\\"dropdownButton\\\", \\n        className: \\\"dropdown-toggle\\\", \\n        onClick: this.handleDropdownClick, \\n        key: 0, \\n        navDropdown: this.props.navItem, \\n        navItem: null, \\n        title: null, \\n        pullRight: null, \\n        dropup: null}), \\n        this.props.title, ' ', \\n        caret\\n      ),\\n      React.createElement(DropdownMenu, {\\n        ref: \\\"menu\\\", \\n        \\\"aria-labelledby\\\": this.props.id, \\n        pullRight: this.props.pullRight, \\n        key: 1}, \\n        ValidComponentChildren.map(this.props.children, this.renderMenuItem)\\n      )\\n    ]);\\n  },\\n\\n  renderButtonGroup: function (children) {\\n    var groupClasses = {\\n        'open': this.state.open,\\n        'dropup': this.props.dropup\\n      };\\n\\n    return (\\n      React.createElement(ButtonGroup, {\\n        bsSize: this.props.bsSize, \\n        className: joinClasses(this.props.className, classSet(groupClasses))}, \\n        children\\n      )\\n    );\\n  },\\n\\n  renderNavItem: function (children) {\\n    var classes = {\\n        'dropdown': true,\\n        'open': this.state.open,\\n        'dropup': this.props.dropup\\n      };\\n\\n    return (\\n      React.createElement(\\\"li\\\", {className: joinClasses(this.props.className, classSet(classes))}, \\n        children\\n      )\\n    );\\n  },\\n\\n  renderMenuItem: function (child, index) {\\n    // Only handle the option selection if an onSelect prop has been set on the\\n    // component or it's child, this allows a user not to pass an onSelect\\n    // handler and have the browser preform the default action.\\n    var handleOptionSelect = this.props.onSelect || child.props.onSelect ?\\n      this.handleOptionSelect : null;\\n\\n    return cloneWithProps(\\n      child,\\n      {\\n        // Capture onSelect events\\n        onSelect: createChainedFunction(child.props.onSelect, handleOptionSelect),\\n\\n        // Force special props to be transferred\\n        key: child.key ? child.key : index,\\n        ref: child.ref\\n      }\\n    );\\n  },\\n\\n  handleDropdownClick: function (e) {\\n    e.preventDefault();\\n\\n    this.setDropdownState(!this.state.open);\\n  },\\n\\n  handleOptionSelect: function (key) {\\n    if (this.props.onSelect) {\\n      this.props.onSelect(key);\\n    }\\n\\n    this.setDropdownState(false);\\n  }\\n});\\n\\nmodule.exports = DropdownButton;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/DropdownButton.js\\n ** module id = 235\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/DropdownButton.js?\");\n\n/***/ },\n/* 236 */\n/*!**************************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/createChainedFunction.js ***!\n  \\**************************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Safe chained function\\n *\\n * Will only create a new function if needed,\\n * otherwise will pass back existing functions or null.\\n *\\n * @param {function} one\\n * @param {function} two\\n * @returns {function|null}\\n */\\nfunction createChainedFunction(one, two) {\\n  var hasOne = typeof one === 'function';\\n  var hasTwo = typeof two === 'function';\\n\\n  if (!hasOne && !hasTwo) { return null; }\\n  if (!hasOne) { return two; }\\n  if (!hasTwo) { return one; }\\n\\n  return function chainedFunction() {\\n    one.apply(this, arguments);\\n    two.apply(this, arguments);\\n  };\\n}\\n\\nmodule.exports = createChainedFunction;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/utils/createChainedFunction.js\\n ** module id = 236\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/createChainedFunction.js?\");\n\n/***/ },\n/* 237 */\n/*!*****************************************************!*\\\n  !*** ./~/react-bootstrap/lib/DropdownStateMixin.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar EventListener = __webpack_require__(/*! ./utils/EventListener */ 224);\\n\\n/**\\n * Checks whether a node is within\\n * a root nodes tree\\n *\\n * @param {DOMElement} node\\n * @param {DOMElement} root\\n * @returns {boolean}\\n */\\nfunction isNodeInRoot(node, root) {\\n  while (node) {\\n    if (node === root) {\\n      return true;\\n    }\\n    node = node.parentNode;\\n  }\\n\\n  return false;\\n}\\n\\nvar DropdownStateMixin = {\\n  getInitialState: function () {\\n    return {\\n      open: false\\n    };\\n  },\\n\\n  setDropdownState: function (newState, onStateChangeComplete) {\\n    if (newState) {\\n      this.bindRootCloseHandlers();\\n    } else {\\n      this.unbindRootCloseHandlers();\\n    }\\n\\n    this.setState({\\n      open: newState\\n    }, onStateChangeComplete);\\n  },\\n\\n  handleDocumentKeyUp: function (e) {\\n    if (e.keyCode === 27) {\\n      this.setDropdownState(false);\\n    }\\n  },\\n\\n  handleDocumentClick: function (e) {\\n    // If the click originated from within this component\\n    // don't do anything.\\n    if (isNodeInRoot(e.target, this.getDOMNode())) {\\n      return;\\n    }\\n\\n    this.setDropdownState(false);\\n  },\\n\\n  bindRootCloseHandlers: function () {\\n    this._onDocumentClickListener =\\n      EventListener.listen(document, 'click', this.handleDocumentClick);\\n    this._onDocumentKeyupListener =\\n      EventListener.listen(document, 'keyup', this.handleDocumentKeyUp);\\n  },\\n\\n  unbindRootCloseHandlers: function () {\\n    if (this._onDocumentClickListener) {\\n      this._onDocumentClickListener.remove();\\n    }\\n\\n    if (this._onDocumentKeyupListener) {\\n      this._onDocumentKeyupListener.remove();\\n    }\\n  },\\n\\n  componentWillUnmount: function () {\\n    this.unbindRootCloseHandlers();\\n  }\\n};\\n\\nmodule.exports = DropdownStateMixin;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/DropdownStateMixin.js\\n ** module id = 237\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/DropdownStateMixin.js?\");\n\n/***/ },\n/* 238 */\n/*!***********************************************!*\\\n  !*** ./~/react-bootstrap/lib/DropdownMenu.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar cloneWithProps = __webpack_require__(/*! ./utils/cloneWithProps */ 216);\\n\\nvar createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 236);\\nvar ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 218);\\n\\nvar DropdownMenu = React.createClass({displayName: \\\"DropdownMenu\\\",\\n  propTypes: {\\n    pullRight: React.PropTypes.bool,\\n    onSelect: React.PropTypes.func\\n  },\\n\\n  render: function () {\\n    var classes = {\\n        'dropdown-menu': true,\\n        'dropdown-menu-right': this.props.pullRight\\n      };\\n\\n    return (\\n        React.createElement(\\\"ul\\\", React.__spread({}, \\n          this.props, \\n          {className: joinClasses(this.props.className, classSet(classes)), \\n          role: \\\"menu\\\"}), \\n          ValidComponentChildren.map(this.props.children, this.renderMenuItem)\\n        )\\n      );\\n  },\\n\\n  renderMenuItem: function (child, index) {\\n    return cloneWithProps(\\n      child,\\n      {\\n        // Capture onSelect events\\n        onSelect: createChainedFunction(child.props.onSelect, this.props.onSelect),\\n\\n        // Force special props to be transferred\\n        key: child.key ? child.key : index,\\n        ref: child.ref\\n      }\\n    );\\n  }\\n});\\n\\nmodule.exports = DropdownMenu;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/DropdownMenu.js\\n ** module id = 238\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/DropdownMenu.js?\");\n\n/***/ },\n/* 239 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/FadeMixin.js ***!\n  \\********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/*global document */\\n// TODO: listen for onTransitionEnd to remove el\\nfunction getElementsAndSelf (root, classes){\\n  var els = root.querySelectorAll('.' + classes.join('.'));\\n\\n  els = [].map.call(els, function(e){ return e; });\\n\\n  for(var i = 0; i < classes.length; i++){\\n    if( !root.className.match(new RegExp('\\\\\\\\b' +  classes[i] + '\\\\\\\\b'))){\\n      return els;\\n    }\\n  }\\n  els.unshift(root);\\n  return els;\\n}\\n\\nmodule.exports = {\\n  _fadeIn: function () {\\n    var els;\\n\\n    if (this.isMounted()) {\\n      els = getElementsAndSelf(this.getDOMNode(), ['fade']);\\n\\n      if (els.length) {\\n        els.forEach(function (el) {\\n          el.className += ' in';\\n        });\\n      }\\n    }\\n  },\\n\\n  _fadeOut: function () {\\n    var els = getElementsAndSelf(this._fadeOutEl, ['fade', 'in']);\\n\\n    if (els.length) {\\n      els.forEach(function (el) {\\n        el.className = el.className.replace(/\\\\bin\\\\b/, '');\\n      });\\n    }\\n\\n    setTimeout(this._handleFadeOutEnd, 300);\\n  },\\n\\n  _handleFadeOutEnd: function () {\\n    if (this._fadeOutEl && this._fadeOutEl.parentNode) {\\n      this._fadeOutEl.parentNode.removeChild(this._fadeOutEl);\\n    }\\n  },\\n\\n  componentDidMount: function () {\\n    if (document.querySelectorAll) {\\n      // Firefox needs delay for transition to be triggered\\n      setTimeout(this._fadeIn, 20);\\n    }\\n  },\\n\\n  componentWillUnmount: function () {\\n    var els = getElementsAndSelf(this.getDOMNode(), ['fade']),\\n        container = (this.props.container && this.props.container.getDOMNode()) || document.body;\\n\\n    if (els.length) {\\n      this._fadeOutEl = document.createElement('div');\\n      container.appendChild(this._fadeOutEl);\\n      this._fadeOutEl.appendChild(this.getDOMNode().cloneNode(true));\\n      // Firefox needs delay for transition to be triggered\\n      setTimeout(this._fadeOut, 20);\\n    }\\n  }\\n};\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/FadeMixin.js\\n ** module id = 239\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/FadeMixin.js?\");\n\n/***/ },\n/* 240 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/Glyphicon.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\nvar constants = __webpack_require__(/*! ./constants */ 215);\\n\\nvar Glyphicon = React.createClass({displayName: \\\"Glyphicon\\\",\\n  mixins: [BootstrapMixin],\\n\\n  propTypes: {\\n    glyph: React.PropTypes.oneOf(constants.GLYPHS).isRequired\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      bsClass: 'glyphicon'\\n    };\\n  },\\n\\n  render: function () {\\n    var classes = this.getBsClassSet();\\n\\n    classes['glyphicon-' + this.props.glyph] = true;\\n\\n    return (\\n      React.createElement(\\\"span\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes))}), \\n        this.props.children\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = Glyphicon;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Glyphicon.js\\n ** module id = 240\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Glyphicon.js?\");\n\n/***/ },\n/* 241 */\n/*!***************************************!*\\\n  !*** ./~/react-bootstrap/lib/Grid.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\n\\nvar Grid = React.createClass({displayName: \\\"Grid\\\",\\n  propTypes: {\\n    fluid: React.PropTypes.bool,\\n    componentClass: React.PropTypes.node.isRequired\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      componentClass: 'div'\\n    };\\n  },\\n\\n  render: function () {\\n    var ComponentClass = this.props.componentClass;\\n    var className = this.props.fluid ? 'container-fluid' : 'container';\\n\\n    return (\\n      React.createElement(ComponentClass, React.__spread({}, \\n        this.props, \\n        {className: joinClasses(this.props.className, className)}), \\n        this.props.children\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = Grid;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Grid.js\\n ** module id = 241\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Grid.js?\");\n\n/***/ },\n/* 242 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Input.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar Button = __webpack_require__(/*! ./Button */ 227);\\n\\nvar Input = React.createClass({displayName: \\\"Input\\\",\\n\\n  propTypes: {\\n    type: React.PropTypes.string,\\n    label: React.PropTypes.node,\\n    help: React.PropTypes.node,\\n    addonBefore: React.PropTypes.node,\\n    addonAfter: React.PropTypes.node,\\n    buttonBefore: React.PropTypes.node,\\n    buttonAfter: React.PropTypes.node,\\n    bsSize: React.PropTypes.oneOf(['small', 'medium', 'large']),\\n    bsStyle: function(props) {\\n      if (props.type === 'submit') {\\n        // Return early if `type=submit` as the `Button` component\\n        // it transfers these props to has its own propType checks.\\n        return;\\n      }\\n\\n      return React.PropTypes.oneOf(['success', 'warning', 'error']).apply(null, arguments);\\n    },\\n    hasFeedback: React.PropTypes.bool,\\n    groupClassName: React.PropTypes.string,\\n    wrapperClassName: React.PropTypes.string,\\n    labelClassName: React.PropTypes.string,\\n    disabled: React.PropTypes.bool\\n  },\\n\\n  getInputDOMNode: function () {\\n    return this.refs.input.getDOMNode();\\n  },\\n\\n  getValue: function () {\\n    if (this.props.type === 'static') {\\n      return this.props.value;\\n    }\\n    else if (this.props.type) {\\n      if (this.props.type == \\\"select\\\" && this.props.multiple) {\\n        return this.getSelectedOptions();\\n      } else {\\n        return this.getInputDOMNode().value;\\n      }\\n    }\\n    else {\\n      throw Error('Cannot use getValue without specifying input type.');\\n    }\\n  },\\n\\n  getChecked: function () {\\n    return this.getInputDOMNode().checked;\\n  },\\n\\n  getSelectedOptions: function () {\\n    var values = [];\\n\\n    Array.prototype.forEach.call(\\n      this.getInputDOMNode().getElementsByTagName('option'),\\n      function (option) {\\n        if (option.selected) {\\n          var value = option.getAttribute('value') || option.innerHTML;\\n\\n          values.push(value);\\n        }\\n      }\\n    );\\n\\n    return values;\\n  },\\n\\n  isCheckboxOrRadio: function () {\\n    return this.props.type === 'radio' || this.props.type === 'checkbox';\\n  },\\n\\n  isFile: function () {\\n    return this.props.type === 'file';\\n  },\\n\\n  renderInput: function () {\\n    var input = null;\\n\\n    if (!this.props.type) {\\n      return this.props.children\\n    }\\n\\n    switch (this.props.type) {\\n      case 'select':\\n        input = (\\n          React.createElement(\\\"select\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, 'form-control'), ref: \\\"input\\\", key: \\\"input\\\"}), \\n            this.props.children\\n          )\\n        );\\n        break;\\n      case 'textarea':\\n        input = React.createElement(\\\"textarea\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, 'form-control'), ref: \\\"input\\\", key: \\\"input\\\"}));\\n        break;\\n      case 'static':\\n        input = (\\n          React.createElement(\\\"p\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, 'form-control-static'), ref: \\\"input\\\", key: \\\"input\\\"}), \\n            this.props.value\\n          )\\n        );\\n        break;\\n      case 'submit':\\n        input = (\\n          React.createElement(Button, React.__spread({},  this.props, {componentClass: \\\"input\\\", ref: \\\"input\\\", key: \\\"input\\\"}))\\n        );\\n        break;\\n      default:\\n        var className = this.isCheckboxOrRadio() || this.isFile() ? '' : 'form-control';\\n        input = React.createElement(\\\"input\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, className), ref: \\\"input\\\", key: \\\"input\\\"}));\\n    }\\n\\n    return input;\\n  },\\n\\n  renderInputGroup: function (children) {\\n    var addonBefore = this.props.addonBefore ? (\\n      React.createElement(\\\"span\\\", {className: \\\"input-group-addon\\\", key: \\\"addonBefore\\\"}, \\n        this.props.addonBefore\\n      )\\n    ) : null;\\n\\n    var addonAfter = this.props.addonAfter ? (\\n      React.createElement(\\\"span\\\", {className: \\\"input-group-addon\\\", key: \\\"addonAfter\\\"}, \\n        this.props.addonAfter\\n      )\\n    ) : null;\\n\\n    var buttonBefore = this.props.buttonBefore ? (\\n      React.createElement(\\\"span\\\", {className: \\\"input-group-btn\\\"}, \\n        this.props.buttonBefore\\n      )\\n    ) : null;\\n\\n    var buttonAfter = this.props.buttonAfter ? (\\n      React.createElement(\\\"span\\\", {className: \\\"input-group-btn\\\"}, \\n        this.props.buttonAfter\\n      )\\n    ) : null;\\n\\n    var inputGroupClassName;\\n    switch (this.props.bsSize) {\\n      case 'small': inputGroupClassName = 'input-group-sm'; break;\\n      case 'large': inputGroupClassName = 'input-group-lg'; break;\\n    }\\n\\n    return addonBefore || addonAfter || buttonBefore || buttonAfter ? (\\n      React.createElement(\\\"div\\\", {className: joinClasses(inputGroupClassName, 'input-group'), key: \\\"input-group\\\"}, \\n        addonBefore, \\n        buttonBefore, \\n        children, \\n        addonAfter, \\n        buttonAfter\\n      )\\n    ) : children;\\n  },\\n\\n  renderIcon: function () {\\n    var classes = {\\n      'glyphicon': true,\\n      'form-control-feedback': true,\\n      'glyphicon-ok': this.props.bsStyle === 'success',\\n      'glyphicon-warning-sign': this.props.bsStyle === 'warning',\\n      'glyphicon-remove': this.props.bsStyle === 'error'\\n    };\\n\\n    return this.props.hasFeedback ? (\\n      React.createElement(\\\"span\\\", {className: classSet(classes), key: \\\"icon\\\"})\\n    ) : null;\\n  },\\n\\n  renderHelp: function () {\\n    return this.props.help ? (\\n      React.createElement(\\\"span\\\", {className: \\\"help-block\\\", key: \\\"help\\\"}, \\n        this.props.help\\n      )\\n    ) : null;\\n  },\\n\\n  renderCheckboxandRadioWrapper: function (children) {\\n    var classes = {\\n      'checkbox': this.props.type === 'checkbox',\\n      'radio': this.props.type === 'radio'\\n    };\\n\\n    return (\\n      React.createElement(\\\"div\\\", {className: classSet(classes), key: \\\"checkboxRadioWrapper\\\"}, \\n        children\\n      )\\n    );\\n  },\\n\\n  renderWrapper: function (children) {\\n    return this.props.wrapperClassName ? (\\n      React.createElement(\\\"div\\\", {className: this.props.wrapperClassName, key: \\\"wrapper\\\"}, \\n        children\\n      )\\n    ) : children;\\n  },\\n\\n  renderLabel: function (children) {\\n    var classes = {\\n      'control-label': !this.isCheckboxOrRadio()\\n    };\\n    classes[this.props.labelClassName] = this.props.labelClassName;\\n\\n    return this.props.label ? (\\n      React.createElement(\\\"label\\\", {htmlFor: this.props.id, className: classSet(classes), key: \\\"label\\\"}, \\n        children, \\n        this.props.label\\n      )\\n    ) : children;\\n  },\\n\\n  renderFormGroup: function (children) {\\n    var classes = {\\n      'form-group': true,\\n      'has-feedback': this.props.hasFeedback,\\n      'has-success': this.props.bsStyle === 'success',\\n      'has-warning': this.props.bsStyle === 'warning',\\n      'has-error': this.props.bsStyle === 'error'\\n    };\\n    classes[this.props.groupClassName] = this.props.groupClassName;\\n\\n    return (\\n      React.createElement(\\\"div\\\", {className: classSet(classes)}, \\n        children\\n      )\\n    );\\n  },\\n\\n  render: function () {\\n    if (this.isCheckboxOrRadio()) {\\n      return this.renderFormGroup(\\n        this.renderWrapper([\\n          this.renderCheckboxandRadioWrapper(\\n            this.renderLabel(\\n              this.renderInput()\\n            )\\n          ),\\n          this.renderHelp()\\n        ])\\n      );\\n    }\\n    else {\\n      return this.renderFormGroup([\\n        this.renderLabel(),\\n        this.renderWrapper([\\n          this.renderInputGroup(\\n            this.renderInput()\\n          ),\\n          this.renderIcon(),\\n          this.renderHelp()\\n        ])\\n      ]);\\n    }\\n  }\\n});\\n\\nmodule.exports = Input;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Input.js\\n ** module id = 242\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Input.js?\");\n\n/***/ },\n/* 243 */\n/*!**********************************************!*\\\n  !*** ./~/react-bootstrap/lib/Interpolate.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// https://www.npmjs.org/package/react-interpolate-component\\n'use strict';\\n\\nvar React = __webpack_require__(/*! react */ 1);\\nvar ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 218);\\nvar assign = __webpack_require__(/*! ./utils/Object.assign */ 217);\\n\\nvar REGEXP = /\\\\%\\\\((.+?)\\\\)s/;\\n\\nvar Interpolate = React.createClass({\\n  displayName: 'Interpolate',\\n\\n  propTypes: {\\n    format: React.PropTypes.string\\n  },\\n\\n  getDefaultProps: function() {\\n    return { component: 'span' };\\n  },\\n\\n  render: function() {\\n    var format = (ValidComponentChildren.hasValidComponent(this.props.children) ||\\n        (typeof this.props.children === 'string')) ?\\n        this.props.children : this.props.format;\\n    var parent = this.props.component;\\n    var unsafe = this.props.unsafe === true;\\n    var props = assign({}, this.props);\\n\\n    delete props.children;\\n    delete props.format;\\n    delete props.component;\\n    delete props.unsafe;\\n\\n    if (unsafe) {\\n      var content = format.split(REGEXP).reduce(function(memo, match, index) {\\n        var html;\\n\\n        if (index % 2 === 0) {\\n          html = match;\\n        } else {\\n          html = props[match];\\n          delete props[match];\\n        }\\n\\n        if (React.isValidElement(html)) {\\n          throw new Error('cannot interpolate a React component into unsafe text');\\n        }\\n\\n        memo += html;\\n\\n        return memo;\\n      }, '');\\n\\n      props.dangerouslySetInnerHTML = { __html: content };\\n\\n      return React.createElement(parent, props);\\n    } else {\\n      var kids = format.split(REGEXP).reduce(function(memo, match, index) {\\n        var child;\\n\\n        if (index % 2 === 0) {\\n          if (match.length === 0) {\\n            return memo;\\n          }\\n\\n          child = match;\\n        } else {\\n          child = props[match];\\n          delete props[match];\\n        }\\n\\n        memo.push(child);\\n\\n        return memo;\\n      }, []);\\n\\n      return React.createElement(parent, props, kids);\\n    }\\n  }\\n});\\n\\nmodule.exports = Interpolate;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Interpolate.js\\n ** module id = 243\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Interpolate.js?\");\n\n/***/ },\n/* 244 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/Jumbotron.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\n\\nvar Jumbotron = React.createClass({displayName: \\\"Jumbotron\\\",\\n\\n  render: function () {\\n    return (\\n      React.createElement(\\\"div\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, 'jumbotron')}), \\n        this.props.children\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = Jumbotron;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Jumbotron.js\\n ** module id = 244\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Jumbotron.js?\");\n\n/***/ },\n/* 245 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Label.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\n\\nvar Label = React.createClass({displayName: \\\"Label\\\",\\n  mixins: [BootstrapMixin],\\n\\n  getDefaultProps: function () {\\n    return {\\n      bsClass: 'label',\\n      bsStyle: 'default'\\n    };\\n  },\\n\\n  render: function () {\\n    var classes = this.getBsClassSet();\\n\\n    return (\\n      React.createElement(\\\"span\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes))}), \\n        this.props.children\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = Label;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Label.js\\n ** module id = 245\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Label.js?\");\n\n/***/ },\n/* 246 */\n/*!********************************************!*\\\n  !*** ./~/react-bootstrap/lib/ListGroup.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar cloneWithProps = __webpack_require__(/*! ./utils/cloneWithProps */ 216);\\n\\nvar ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 218);\\nvar createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 236);\\n\\nvar ListGroup = React.createClass({displayName: \\\"ListGroup\\\",\\n  propTypes: {\\n    onClick: React.PropTypes.func\\n  },\\n\\n  render: function () {\\n    return (\\n      React.createElement(\\\"div\\\", {className: \\\"list-group\\\"}, \\n        ValidComponentChildren.map(this.props.children, this.renderListItem)\\n      )\\n    );\\n  },\\n\\n  renderListItem: function (child, index) {\\n    return cloneWithProps(child, {\\n      ref: child.ref,\\n      key: child.key ? child.key : index\\n    });\\n  }\\n});\\n\\nmodule.exports = ListGroup;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/ListGroup.js\\n ** module id = 246\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ListGroup.js?\");\n\n/***/ },\n/* 247 */\n/*!*******************************************!*\\\n  !*** ./~/react-bootstrap/lib/MenuItem.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\n\\nvar MenuItem = React.createClass({displayName: \\\"MenuItem\\\",\\n  propTypes: {\\n    header:    React.PropTypes.bool,\\n    divider:   React.PropTypes.bool,\\n    href:      React.PropTypes.string,\\n    title:     React.PropTypes.string,\\n    target:    React.PropTypes.string,\\n    onSelect:  React.PropTypes.func,\\n    eventKey:  React.PropTypes.any\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      href: '#'\\n    };\\n  },\\n\\n  handleClick: function (e) {\\n    if (this.props.onSelect) {\\n      e.preventDefault();\\n      this.props.onSelect(this.props.eventKey, this.props.href, this.props.target);\\n    }\\n  },\\n\\n  renderAnchor: function () {\\n    return (\\n      React.createElement(\\\"a\\\", {onClick: this.handleClick, href: this.props.href, target: this.props.target, title: this.props.title, tabIndex: \\\"-1\\\"}, \\n        this.props.children\\n      )\\n    );\\n  },\\n\\n  render: function () {\\n    var classes = {\\n        'dropdown-header': this.props.header,\\n        'divider': this.props.divider\\n      };\\n\\n    var children = null;\\n    if (this.props.header) {\\n      children = this.props.children;\\n    } else if (!this.props.divider) {\\n      children = this.renderAnchor();\\n    }\\n\\n    return (\\n      React.createElement(\\\"li\\\", React.__spread({},  this.props, {role: \\\"presentation\\\", title: null, href: null, \\n        className: joinClasses(this.props.className, classSet(classes))}), \\n        children\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = MenuItem;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/MenuItem.js\\n ** module id = 247\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/MenuItem.js?\");\n\n/***/ },\n/* 248 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Modal.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* global document:false */\\n\\nvar React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\nvar FadeMixin = __webpack_require__(/*! ./FadeMixin */ 239);\\nvar EventListener = __webpack_require__(/*! ./utils/EventListener */ 224);\\n\\n\\n// TODO:\\n// - aria-labelledby\\n// - Add `modal-body` div if only one child passed in that doesn't already have it\\n// - Tests\\n\\nvar Modal = React.createClass({displayName: \\\"Modal\\\",\\n  mixins: [BootstrapMixin, FadeMixin],\\n\\n  propTypes: {\\n    title: React.PropTypes.node,\\n    backdrop: React.PropTypes.oneOf(['static', true, false]),\\n    keyboard: React.PropTypes.bool,\\n    closeButton: React.PropTypes.bool,\\n    animation: React.PropTypes.bool,\\n    onRequestHide: React.PropTypes.func.isRequired\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      bsClass: 'modal',\\n      backdrop: true,\\n      keyboard: true,\\n      animation: true,\\n      closeButton: true\\n    };\\n  },\\n\\n  render: function () {\\n    var modalStyle = {display: 'block'};\\n    var dialogClasses = this.getBsClassSet();\\n    delete dialogClasses.modal;\\n    dialogClasses['modal-dialog'] = true;\\n\\n    var classes = {\\n      modal: true,\\n      fade: this.props.animation,\\n      'in': !this.props.animation || !document.querySelectorAll\\n    };\\n\\n    var modal = (\\n      React.createElement(\\\"div\\\", React.__spread({}, \\n        this.props, \\n        {title: null, \\n        tabIndex: \\\"-1\\\", \\n        role: \\\"dialog\\\", \\n        style: modalStyle, \\n        className: joinClasses(this.props.className, classSet(classes)), \\n        onClick: this.props.backdrop === true ? this.handleBackdropClick : null, \\n        ref: \\\"modal\\\"}), \\n        React.createElement(\\\"div\\\", {className: classSet(dialogClasses)}, \\n          React.createElement(\\\"div\\\", {className: \\\"modal-content\\\", style: {overflow: 'hidden'}}, \\n            this.props.title ? this.renderHeader() : null, \\n            this.props.children\\n          )\\n        )\\n      )\\n    );\\n\\n    return this.props.backdrop ?\\n      this.renderBackdrop(modal) : modal;\\n  },\\n\\n  renderBackdrop: function (modal) {\\n    var classes = {\\n      'modal-backdrop': true,\\n      'fade': this.props.animation\\n    };\\n\\n    classes['in'] = !this.props.animation || !document.querySelectorAll;\\n\\n    var onClick = this.props.backdrop === true ?\\n      this.handleBackdropClick : null;\\n\\n    return (\\n      React.createElement(\\\"div\\\", null, \\n        React.createElement(\\\"div\\\", {className: classSet(classes), ref: \\\"backdrop\\\", onClick: onClick}), \\n        modal\\n      )\\n    );\\n  },\\n\\n  renderHeader: function () {\\n    var closeButton;\\n    if (this.props.closeButton) {\\n      closeButton = (\\n          React.createElement(\\\"button\\\", {type: \\\"button\\\", className: \\\"close\\\", \\\"aria-hidden\\\": \\\"true\\\", onClick: this.props.onRequestHide}, \\\"×\\\")\\n        );\\n    }\\n\\n    var style = this.props.bsStyle;\\n    var classes = {\\n      'modal-header': true\\n    };\\n    classes['bg-' + style] = style;\\n    classes['text-' + style] = style;\\n\\n    var className = classSet(classes);\\n\\n    return (\\n      React.createElement(\\\"div\\\", {className: className}, \\n        closeButton, \\n        this.renderTitle()\\n      )\\n    );\\n  },\\n\\n  renderTitle: function () {\\n    return (\\n      React.isValidElement(this.props.title) ?\\n        this.props.title : React.createElement(\\\"h4\\\", {className: \\\"modal-title\\\"}, this.props.title)\\n    );\\n  },\\n\\n  iosClickHack: function () {\\n    // IOS only allows click events to be delegated to the document on elements\\n    // it considers 'clickable' - anchors, buttons, etc. We fake a click handler on the\\n    // DOM nodes themselves. Remove if handled by React: https://github.com/facebook/react/issues/1169\\n    this.refs.modal.getDOMNode().onclick = function () {};\\n    this.refs.backdrop.getDOMNode().onclick = function () {};\\n  },\\n\\n  componentDidMount: function () {\\n    this._onDocumentKeyupListener =\\n      EventListener.listen(document, 'keyup', this.handleDocumentKeyUp);\\n\\n    var container = (this.props.container && this.props.container.getDOMNode()) || document.body;\\n    container.className += container.className.length ? ' modal-open' : 'modal-open';\\n\\n    if (this.props.backdrop) {\\n      this.iosClickHack();\\n    }\\n  },\\n\\n  componentDidUpdate: function (prevProps) {\\n    if (this.props.backdrop && this.props.backdrop !== prevProps.backdrop) {\\n      this.iosClickHack();\\n    }\\n  },\\n\\n  componentWillUnmount: function () {\\n    this._onDocumentKeyupListener.remove();\\n    var container = (this.props.container && this.props.container.getDOMNode()) || document.body;\\n    container.className = container.className.replace(/ ?modal-open/, '');\\n  },\\n\\n  handleBackdropClick: function (e) {\\n    if (e.target !== e.currentTarget) {\\n      return;\\n    }\\n\\n    this.props.onRequestHide();\\n  },\\n\\n  handleDocumentKeyUp: function (e) {\\n    if (this.props.keyboard && e.keyCode === 27) {\\n      this.props.onRequestHide();\\n    }\\n  }\\n});\\n\\nmodule.exports = Modal;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Modal.js\\n ** module id = 248\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Modal.js?\");\n\n/***/ },\n/* 249 */\n/*!**************************************!*\\\n  !*** ./~/react-bootstrap/lib/Nav.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\nvar CollapsableMixin = __webpack_require__(/*! ./CollapsableMixin */ 234);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar domUtils = __webpack_require__(/*! ./utils/domUtils */ 223);\\nvar cloneWithProps = __webpack_require__(/*! ./utils/cloneWithProps */ 216);\\n\\nvar ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 218);\\nvar createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 236);\\n\\n\\nvar Nav = React.createClass({displayName: \\\"Nav\\\",\\n  mixins: [BootstrapMixin, CollapsableMixin],\\n\\n  propTypes: {\\n    bsStyle: React.PropTypes.oneOf(['tabs','pills']),\\n    stacked: React.PropTypes.bool,\\n    justified: React.PropTypes.bool,\\n    onSelect: React.PropTypes.func,\\n    collapsable: React.PropTypes.bool,\\n    expanded: React.PropTypes.bool,\\n    navbar: React.PropTypes.bool,\\n    eventKey: React.PropTypes.any,\\n    right: React.PropTypes.bool\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      bsClass: 'nav'\\n    };\\n  },\\n\\n  getCollapsableDOMNode: function () {\\n    return this.getDOMNode();\\n  },\\n\\n  getCollapsableDimensionValue: function () {\\n    var node = this.refs.ul.getDOMNode(),\\n        height = node.offsetHeight,\\n        computedStyles = domUtils.getComputedStyles(node);\\n\\n    return height + parseInt(computedStyles.marginTop, 10) + parseInt(computedStyles.marginBottom, 10);\\n  },\\n\\n  render: function () {\\n    var classes = this.props.collapsable ? this.getCollapsableClassSet() : {};\\n\\n    classes['navbar-collapse'] = this.props.collapsable;\\n\\n    if (this.props.navbar && !this.props.collapsable) {\\n      return (this.renderUl());\\n    }\\n\\n    return (\\n      React.createElement(\\\"nav\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes))}), \\n        this.renderUl()\\n      )\\n    );\\n  },\\n\\n  renderUl: function () {\\n    var classes = this.getBsClassSet();\\n\\n    classes['nav-stacked'] = this.props.stacked;\\n    classes['nav-justified'] = this.props.justified;\\n    classes['navbar-nav'] = this.props.navbar;\\n    classes['pull-right'] = this.props.pullRight;\\n    classes['navbar-right'] = this.props.right;\\n\\n    return (\\n      React.createElement(\\\"ul\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes)), ref: \\\"ul\\\"}), \\n        ValidComponentChildren.map(this.props.children, this.renderNavItem)\\n      )\\n    );\\n  },\\n\\n  getChildActiveProp: function (child) {\\n    if (child.props.active) {\\n      return true;\\n    }\\n    if (this.props.activeKey != null) {\\n      if (child.props.eventKey == this.props.activeKey) {\\n        return true;\\n      }\\n    }\\n    if (this.props.activeHref != null) {\\n      if (child.props.href === this.props.activeHref) {\\n        return true;\\n      }\\n    }\\n\\n    return child.props.active;\\n  },\\n\\n  renderNavItem: function (child, index) {\\n    return cloneWithProps(\\n      child,\\n      {\\n        active: this.getChildActiveProp(child),\\n        activeKey: this.props.activeKey,\\n        activeHref: this.props.activeHref,\\n        onSelect: createChainedFunction(child.props.onSelect, this.props.onSelect),\\n        ref: child.ref,\\n        key: child.key ? child.key : index,\\n        navItem: true\\n      }\\n    );\\n  }\\n});\\n\\nmodule.exports = Nav;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Nav.js\\n ** module id = 249\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Nav.js?\");\n\n/***/ },\n/* 250 */\n/*!*****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Navbar.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar cloneWithProps = __webpack_require__(/*! ./utils/cloneWithProps */ 216);\\n\\nvar ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 218);\\nvar createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 236);\\nvar Nav = __webpack_require__(/*! ./Nav */ 249);\\n\\n\\nvar Navbar = React.createClass({displayName: \\\"Navbar\\\",\\n  mixins: [BootstrapMixin],\\n\\n  propTypes: {\\n    fixedTop: React.PropTypes.bool,\\n    fixedBottom: React.PropTypes.bool,\\n    staticTop: React.PropTypes.bool,\\n    inverse: React.PropTypes.bool,\\n    fluid: React.PropTypes.bool,\\n    role: React.PropTypes.string,\\n    componentClass: React.PropTypes.node.isRequired,\\n    brand: React.PropTypes.node,\\n    toggleButton: React.PropTypes.node,\\n    toggleNavKey: React.PropTypes.oneOfType([\\n      React.PropTypes.string,\\n      React.PropTypes.number\\n    ]),\\n    onToggle: React.PropTypes.func,\\n    navExpanded: React.PropTypes.bool,\\n    defaultNavExpanded: React.PropTypes.bool\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      bsClass: 'navbar',\\n      bsStyle: 'default',\\n      role: 'navigation',\\n      componentClass: 'Nav'\\n    };\\n  },\\n\\n  getInitialState: function () {\\n    return {\\n      navExpanded: this.props.defaultNavExpanded\\n    };\\n  },\\n\\n  shouldComponentUpdate: function() {\\n    // Defer any updates to this component during the `onSelect` handler.\\n    return !this._isChanging;\\n  },\\n\\n  handleToggle: function () {\\n    if (this.props.onToggle) {\\n      this._isChanging = true;\\n      this.props.onToggle();\\n      this._isChanging = false;\\n    }\\n\\n    this.setState({\\n      navExpanded: !this.state.navExpanded\\n    });\\n  },\\n\\n  isNavExpanded: function () {\\n    return this.props.navExpanded != null ? this.props.navExpanded : this.state.navExpanded;\\n  },\\n\\n  render: function () {\\n    var classes = this.getBsClassSet();\\n    var ComponentClass = this.props.componentClass;\\n\\n    classes['navbar-fixed-top'] = this.props.fixedTop;\\n    classes['navbar-fixed-bottom'] = this.props.fixedBottom;\\n    classes['navbar-static-top'] = this.props.staticTop;\\n    classes['navbar-inverse'] = this.props.inverse;\\n\\n    return (\\n      React.createElement(ComponentClass, React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes))}), \\n        React.createElement(\\\"div\\\", {className: this.props.fluid ? 'container-fluid' : 'container'}, \\n          (this.props.brand || this.props.toggleButton || this.props.toggleNavKey != null) ? this.renderHeader() : null, \\n          ValidComponentChildren.map(this.props.children, this.renderChild)\\n        )\\n      )\\n    );\\n  },\\n\\n  renderChild: function (child, index) {\\n    return cloneWithProps(child, {\\n      navbar: true,\\n      collapsable: this.props.toggleNavKey != null && this.props.toggleNavKey === child.props.eventKey,\\n      expanded: this.props.toggleNavKey != null && this.props.toggleNavKey === child.props.eventKey && this.isNavExpanded(),\\n      key: child.key ? child.key : index,\\n      ref: child.ref\\n    });\\n  },\\n\\n  renderHeader: function () {\\n    var brand;\\n\\n    if (this.props.brand) {\\n      brand = React.isValidElement(this.props.brand) ?\\n        cloneWithProps(this.props.brand, {\\n          className: 'navbar-brand'\\n        }) : React.createElement(\\\"span\\\", {className: \\\"navbar-brand\\\"}, this.props.brand);\\n    }\\n\\n    return (\\n      React.createElement(\\\"div\\\", {className: \\\"navbar-header\\\"}, \\n        brand, \\n        (this.props.toggleButton || this.props.toggleNavKey != null) ? this.renderToggleButton() : null\\n      )\\n    );\\n  },\\n\\n  renderToggleButton: function () {\\n    var children;\\n\\n    if (React.isValidElement(this.props.toggleButton)) {\\n      return cloneWithProps(this.props.toggleButton, {\\n        className: 'navbar-toggle',\\n        onClick: createChainedFunction(this.handleToggle, this.props.toggleButton.props.onClick)\\n      });\\n    }\\n\\n    children = (this.props.toggleButton != null) ?\\n      this.props.toggleButton : [\\n        React.createElement(\\\"span\\\", {className: \\\"sr-only\\\", key: 0}, \\\"Toggle navigation\\\"),\\n        React.createElement(\\\"span\\\", {className: \\\"icon-bar\\\", key: 1}),\\n        React.createElement(\\\"span\\\", {className: \\\"icon-bar\\\", key: 2}),\\n        React.createElement(\\\"span\\\", {className: \\\"icon-bar\\\", key: 3})\\n    ];\\n\\n    return (\\n      React.createElement(\\\"button\\\", {className: \\\"navbar-toggle\\\", type: \\\"button\\\", onClick: this.handleToggle}, \\n        children\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = Navbar;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Navbar.js\\n ** module id = 250\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Navbar.js?\");\n\n/***/ },\n/* 251 */\n/*!******************************************!*\\\n  !*** ./~/react-bootstrap/lib/NavItem.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\n\\nvar NavItem = React.createClass({displayName: \\\"NavItem\\\",\\n  mixins: [BootstrapMixin],\\n\\n  propTypes: {\\n    onSelect: React.PropTypes.func,\\n    active: React.PropTypes.bool,\\n    disabled: React.PropTypes.bool,\\n    href: React.PropTypes.string,\\n    title: React.PropTypes.string,\\n    eventKey: React.PropTypes.any,\\n    target: React.PropTypes.string\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      href: '#'\\n    };\\n  },\\n\\n  render: function () {\\n    var $__0= \\n        \\n        \\n        \\n        \\n        \\n        \\n           this.props,disabled=$__0.disabled,active=$__0.active,href=$__0.href,title=$__0.title,target=$__0.target,children=$__0.children,props=(function(source, exclusion) {var rest = {};var hasOwn = Object.prototype.hasOwnProperty;if (source == null) {throw new TypeError();}for (var key in source) {if (hasOwn.call(source, key) && !hasOwn.call(exclusion, key)) {rest[key] = source[key];}}return rest;})($__0,{disabled:1,active:1,href:1,title:1,target:1,children:1}),\\n        classes = {\\n          'active': active,\\n          'disabled': disabled\\n        };\\n\\n    return (\\n      React.createElement(\\\"li\\\", React.__spread({},  props, {className: joinClasses(props.className, classSet(classes))}), \\n        React.createElement(\\\"a\\\", {\\n          href: href, \\n          title: title, \\n          target: target, \\n          onClick: this.handleClick, \\n          ref: \\\"anchor\\\"}, \\n          children \\n        )\\n      )\\n    );\\n  },\\n\\n  handleClick: function (e) {\\n    if (this.props.onSelect) {\\n      e.preventDefault();\\n\\n      if (!this.props.disabled) {\\n        this.props.onSelect(this.props.eventKey, this.props.href, this.props.target);\\n      }\\n    }\\n  }\\n});\\n\\nmodule.exports = NavItem;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/NavItem.js\\n ** module id = 251\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/NavItem.js?\");\n\n/***/ },\n/* 252 */\n/*!***********************************************!*\\\n  !*** ./~/react-bootstrap/lib/ModalTrigger.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar OverlayMixin = __webpack_require__(/*! ./OverlayMixin */ 253);\\nvar cloneWithProps = __webpack_require__(/*! ./utils/cloneWithProps */ 216);\\n\\nvar createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 236);\\n\\nvar ModalTrigger = React.createClass({displayName: \\\"ModalTrigger\\\",\\n  mixins: [OverlayMixin],\\n\\n  propTypes: {\\n    modal: React.PropTypes.node.isRequired\\n  },\\n\\n  getInitialState: function () {\\n    return {\\n      isOverlayShown: false\\n    };\\n  },\\n\\n  show: function () {\\n    this.setState({\\n      isOverlayShown: true\\n    });\\n  },\\n\\n  hide: function () {\\n    this.setState({\\n      isOverlayShown: false\\n    });\\n  },\\n\\n  toggle: function () {\\n    this.setState({\\n      isOverlayShown: !this.state.isOverlayShown\\n    });\\n  },\\n\\n  renderOverlay: function () {\\n    if (!this.state.isOverlayShown) {\\n      return React.createElement(\\\"span\\\", null);\\n    }\\n\\n    return cloneWithProps(\\n      this.props.modal,\\n      {\\n        onRequestHide: this.hide\\n      }\\n    );\\n  },\\n\\n  render: function () {\\n    var child = React.Children.only(this.props.children);\\n    return cloneWithProps(\\n      child,\\n      {\\n        onClick: createChainedFunction(child.props.onClick, this.toggle)\\n      }\\n    );\\n  }\\n});\\n\\nmodule.exports = ModalTrigger;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/ModalTrigger.js\\n ** module id = 252\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ModalTrigger.js?\");\n\n/***/ },\n/* 253 */\n/*!***********************************************!*\\\n  !*** ./~/react-bootstrap/lib/OverlayMixin.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar CustomPropTypes = __webpack_require__(/*! ./utils/CustomPropTypes */ 254);\\n\\nmodule.exports = {\\n  propTypes: {\\n    container: CustomPropTypes.mountable\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      container: {\\n        // Provide `getDOMNode` fn mocking a React component API. The `document.body`\\n        // reference needs to be contained within this function so that it is not accessed\\n        // in environments where it would not be defined, e.g. nodejs. Equally this is needed\\n        // before the body is defined where `document.body === null`, this ensures\\n        // `document.body` is only accessed after componentDidMount.\\n        getDOMNode: function getDOMNode() {\\n          return document.body;\\n        }\\n      }\\n    };\\n  },\\n\\n  componentWillUnmount: function () {\\n    this._unrenderOverlay();\\n    if (this._overlayTarget) {\\n      this.getContainerDOMNode()\\n        .removeChild(this._overlayTarget);\\n      this._overlayTarget = null;\\n    }\\n  },\\n\\n  componentDidUpdate: function () {\\n    this._renderOverlay();\\n  },\\n\\n  componentDidMount: function () {\\n    this._renderOverlay();\\n  },\\n\\n  _mountOverlayTarget: function () {\\n    this._overlayTarget = document.createElement('div');\\n    this.getContainerDOMNode()\\n      .appendChild(this._overlayTarget);\\n  },\\n\\n  _renderOverlay: function () {\\n    if (!this._overlayTarget) {\\n      this._mountOverlayTarget();\\n    }\\n\\n    var overlay = this.renderOverlay();\\n\\n    // Save reference to help testing\\n    if (overlay !== null) {\\n      this._overlayInstance = React.render(overlay, this._overlayTarget);\\n    } else {\\n      // Unrender if the component is null for transitions to null\\n      this._unrenderOverlay();\\n    }\\n  },\\n\\n  _unrenderOverlay: function () {\\n    React.unmountComponentAtNode(this._overlayTarget);\\n    this._overlayInstance = null;\\n  },\\n\\n  getOverlayDOMNode: function () {\\n    if (!this.isMounted()) {\\n      throw new Error('getOverlayDOMNode(): A component must be mounted to have a DOM node.');\\n    }\\n\\n    if (this._overlayInstance) {\\n      return this._overlayInstance.getDOMNode();\\n    }\\n\\n    return null;\\n  },\\n\\n  getContainerDOMNode: function () {\\n    return this.props.container.getDOMNode ?\\n      this.props.container.getDOMNode() : this.props.container;\\n  }\\n};\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/OverlayMixin.js\\n ** module id = 253\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/OverlayMixin.js?\");\n\n/***/ },\n/* 254 */\n/*!********************************************************!*\\\n  !*** ./~/react-bootstrap/lib/utils/CustomPropTypes.js ***!\n  \\********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\n\\nvar ANONYMOUS = '<<anonymous>>';\\n\\nvar CustomPropTypes = {\\n  /**\\n   * Checks whether a prop provides a DOM element\\n   *\\n   * The element can be provided in two forms:\\n   * - Directly passed\\n   * - Or passed an object which has a `getDOMNode` method which will return the required DOM element\\n   *\\n   * @param props\\n   * @param propName\\n   * @param componentName\\n   * @returns {Error|undefined}\\n   */\\n  mountable: createMountableChecker()\\n};\\n\\n/**\\n * Create chain-able isRequired validator\\n *\\n * Largely copied directly from:\\n *  https://github.com/facebook/react/blob/0.11-stable/src/core/ReactPropTypes.js#L94\\n */\\nfunction createChainableTypeChecker(validate) {\\n  function checkType(isRequired, props, propName, componentName) {\\n    componentName = componentName || ANONYMOUS;\\n    if (props[propName] == null) {\\n      if (isRequired) {\\n        return new Error(\\n          'Required prop `' + propName + '` was not specified in ' +\\n            '`' + componentName + '`.'\\n        );\\n      }\\n    } else {\\n      return validate(props, propName, componentName);\\n    }\\n  }\\n\\n  var chainedCheckType = checkType.bind(null, false);\\n  chainedCheckType.isRequired = checkType.bind(null, true);\\n\\n  return chainedCheckType;\\n}\\n\\nfunction createMountableChecker() {\\n  function validate(props, propName, componentName) {\\n    if (typeof props[propName] !== 'object' ||\\n      typeof props[propName].getDOMNode !== 'function' && props[propName].nodeType !== 1) {\\n      return new Error(\\n        'Invalid prop `' + propName + '` supplied to ' +\\n          '`' + componentName + '`, expected a DOM element or an object that has a `getDOMNode` method'\\n      );\\n    }\\n  }\\n\\n  return createChainableTypeChecker(validate);\\n}\\n\\nmodule.exports = CustomPropTypes;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/utils/CustomPropTypes.js\\n ** module id = 254\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/utils/CustomPropTypes.js?\");\n\n/***/ },\n/* 255 */\n/*!*************************************************!*\\\n  !*** ./~/react-bootstrap/lib/OverlayTrigger.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar OverlayMixin = __webpack_require__(/*! ./OverlayMixin */ 253);\\nvar domUtils = __webpack_require__(/*! ./utils/domUtils */ 223);\\nvar cloneWithProps = __webpack_require__(/*! ./utils/cloneWithProps */ 216);\\n\\nvar createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 236);\\nvar assign = __webpack_require__(/*! ./utils/Object.assign */ 217);\\n\\n/**\\n * Check if value one is inside or equal to the of value\\n *\\n * @param {string} one\\n * @param {string|array} of\\n * @returns {boolean}\\n */\\nfunction isOneOf(one, of) {\\n  if (Array.isArray(of)) {\\n    return of.indexOf(one) >= 0;\\n  }\\n  return one === of;\\n}\\n\\nvar OverlayTrigger = React.createClass({displayName: \\\"OverlayTrigger\\\",\\n  mixins: [OverlayMixin],\\n\\n  propTypes: {\\n    trigger: React.PropTypes.oneOfType([\\n      React.PropTypes.oneOf(['manual', 'click', 'hover', 'focus']),\\n      React.PropTypes.arrayOf(React.PropTypes.oneOf(['click', 'hover', 'focus']))\\n    ]),\\n    placement: React.PropTypes.oneOf(['top','right', 'bottom', 'left']),\\n    delay: React.PropTypes.number,\\n    delayShow: React.PropTypes.number,\\n    delayHide: React.PropTypes.number,\\n    defaultOverlayShown: React.PropTypes.bool,\\n    overlay: React.PropTypes.node.isRequired\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      placement: 'right',\\n      trigger: ['hover', 'focus']\\n    };\\n  },\\n\\n  getInitialState: function () {\\n    return {\\n      isOverlayShown: this.props.defaultOverlayShown == null ?\\n        false : this.props.defaultOverlayShown,\\n      overlayLeft: null,\\n      overlayTop: null\\n    };\\n  },\\n\\n  show: function () {\\n    this.setState({\\n      isOverlayShown: true\\n    }, function() {\\n      this.updateOverlayPosition();\\n    });\\n  },\\n\\n  hide: function () {\\n    this.setState({\\n      isOverlayShown: false\\n    });\\n  },\\n\\n  toggle: function () {\\n    this.state.isOverlayShown ?\\n      this.hide() : this.show();\\n  },\\n\\n  renderOverlay: function () {\\n    if (!this.state.isOverlayShown) {\\n      return React.createElement(\\\"span\\\", null);\\n    }\\n\\n    return cloneWithProps(\\n      this.props.overlay,\\n      {\\n        onRequestHide: this.hide,\\n        placement: this.props.placement,\\n        positionLeft: this.state.overlayLeft,\\n        positionTop: this.state.overlayTop\\n      }\\n    );\\n  },\\n\\n  render: function () {\\n    if (this.props.trigger === 'manual') {\\n      return React.Children.only(this.props.children);\\n    }\\n\\n    var props = {};\\n\\n    if (isOneOf('click', this.props.trigger)) {\\n      props.onClick = createChainedFunction(this.toggle, this.props.onClick);\\n    }\\n\\n    if (isOneOf('hover', this.props.trigger)) {\\n      props.onMouseOver = createChainedFunction(this.handleDelayedShow, this.props.onMouseOver);\\n      props.onMouseOut = createChainedFunction(this.handleDelayedHide, this.props.onMouseOut);\\n    }\\n\\n    if (isOneOf('focus', this.props.trigger)) {\\n      props.onFocus = createChainedFunction(this.handleDelayedShow, this.props.onFocus);\\n      props.onBlur = createChainedFunction(this.handleDelayedHide, this.props.onBlur);\\n    }\\n\\n    return cloneWithProps(\\n      React.Children.only(this.props.children),\\n      props\\n    );\\n  },\\n\\n  componentWillUnmount: function() {\\n    clearTimeout(this._hoverDelay);\\n  },\\n\\n  componentDidMount: function() {\\n    this.updateOverlayPosition();\\n  },\\n\\n  handleDelayedShow: function () {\\n    if (this._hoverDelay != null) {\\n      clearTimeout(this._hoverDelay);\\n      this._hoverDelay = null;\\n      return;\\n    }\\n\\n    var delay = this.props.delayShow != null ?\\n      this.props.delayShow : this.props.delay;\\n\\n    if (!delay) {\\n      this.show();\\n      return;\\n    }\\n\\n    this._hoverDelay = setTimeout(function() {\\n      this._hoverDelay = null;\\n      this.show();\\n    }.bind(this), delay);\\n  },\\n\\n  handleDelayedHide: function () {\\n    if (this._hoverDelay != null) {\\n      clearTimeout(this._hoverDelay);\\n      this._hoverDelay = null;\\n      return;\\n    }\\n\\n    var delay = this.props.delayHide != null ?\\n      this.props.delayHide : this.props.delay;\\n\\n    if (!delay) {\\n      this.hide();\\n      return;\\n    }\\n\\n    this._hoverDelay = setTimeout(function() {\\n      this._hoverDelay = null;\\n      this.hide();\\n    }.bind(this), delay);\\n  },\\n\\n  updateOverlayPosition: function () {\\n    if (!this.isMounted()) {\\n      return;\\n    }\\n\\n    var pos = this.calcOverlayPosition();\\n\\n    this.setState({\\n      overlayLeft: pos.left,\\n      overlayTop: pos.top\\n    });\\n  },\\n\\n  calcOverlayPosition: function () {\\n    var childOffset = this.getPosition();\\n\\n    var overlayNode = this.getOverlayDOMNode();\\n    var overlayHeight = overlayNode.offsetHeight;\\n    var overlayWidth = overlayNode.offsetWidth;\\n\\n    switch (this.props.placement) {\\n      case 'right':\\n        return {\\n          top: childOffset.top + childOffset.height / 2 - overlayHeight / 2,\\n          left: childOffset.left + childOffset.width\\n        };\\n      case 'left':\\n        return {\\n          top: childOffset.top + childOffset.height / 2 - overlayHeight / 2,\\n          left: childOffset.left - overlayWidth\\n        };\\n      case 'top':\\n        return {\\n          top: childOffset.top - overlayHeight,\\n          left: childOffset.left + childOffset.width / 2 - overlayWidth / 2\\n        };\\n      case 'bottom':\\n        return {\\n          top: childOffset.top + childOffset.height,\\n          left: childOffset.left + childOffset.width / 2 - overlayWidth / 2\\n        };\\n      default:\\n        throw new Error('calcOverlayPosition(): No such placement of \\\"' + this.props.placement + '\\\" found.');\\n    }\\n  },\\n\\n  getPosition: function () {\\n    var node = this.getDOMNode();\\n    var container = this.getContainerDOMNode();\\n\\n    var offset = container.tagName == 'BODY' ?\\n      domUtils.getOffset(node) : domUtils.getPosition(node, container);\\n\\n    return assign({}, offset, {\\n      height: node.offsetHeight,\\n      width: node.offsetWidth\\n    });\\n  }\\n});\\n\\nmodule.exports = OverlayTrigger;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/OverlayTrigger.js\\n ** module id = 255\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/OverlayTrigger.js?\");\n\n/***/ },\n/* 256 */\n/*!*********************************************!*\\\n  !*** ./~/react-bootstrap/lib/PageHeader.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\n\\nvar PageHeader = React.createClass({displayName: \\\"PageHeader\\\",\\n\\n  render: function () {\\n    return (\\n      React.createElement(\\\"div\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, 'page-header')}), \\n        React.createElement(\\\"h1\\\", null, this.props.children)\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = PageHeader;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/PageHeader.js\\n ** module id = 256\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/PageHeader.js?\");\n\n/***/ },\n/* 257 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Panel.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar cloneWithProps = __webpack_require__(/*! ./utils/cloneWithProps */ 216);\\n\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\nvar CollapsableMixin = __webpack_require__(/*! ./CollapsableMixin */ 234);\\n\\nvar Panel = React.createClass({displayName: \\\"Panel\\\",\\n  mixins: [BootstrapMixin, CollapsableMixin],\\n\\n  propTypes: {\\n    onSelect: React.PropTypes.func,\\n    header: React.PropTypes.node,\\n    footer: React.PropTypes.node,\\n    eventKey: React.PropTypes.any\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      bsClass: 'panel',\\n      bsStyle: 'default'\\n    };\\n  },\\n\\n  handleSelect: function (e) {\\n    if (this.props.onSelect) {\\n      this._isChanging = true;\\n      this.props.onSelect(this.props.eventKey);\\n      this._isChanging = false;\\n    }\\n\\n    e.preventDefault();\\n\\n    this.setState({\\n      expanded: !this.state.expanded\\n    });\\n  },\\n\\n  shouldComponentUpdate: function () {\\n    return !this._isChanging;\\n  },\\n\\n  getCollapsableDimensionValue: function () {\\n    return this.refs.panel.getDOMNode().scrollHeight;\\n  },\\n\\n  getCollapsableDOMNode: function () {\\n    if (!this.isMounted() || !this.refs || !this.refs.panel) {\\n      return null;\\n    }\\n\\n    return this.refs.panel.getDOMNode();\\n  },\\n\\n  render: function () {\\n    var classes = this.getBsClassSet();\\n    classes['panel'] = true;\\n\\n    return (\\n      React.createElement(\\\"div\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes)), \\n        id: this.props.collapsable ? null : this.props.id, onSelect: null}), \\n        this.renderHeading(), \\n        this.props.collapsable ? this.renderCollapsableBody() : this.renderBody(), \\n        this.renderFooter()\\n      )\\n    );\\n  },\\n\\n  renderCollapsableBody: function () {\\n    return (\\n      React.createElement(\\\"div\\\", {className: classSet(this.getCollapsableClassSet('panel-collapse')), id: this.props.id, ref: \\\"panel\\\"}, \\n        this.renderBody()\\n      )\\n    );\\n  },\\n\\n  renderBody: function () {\\n    var allChildren = this.props.children;\\n    var bodyElements = [];\\n\\n    function getProps() {\\n      return {key: bodyElements.length};\\n    }\\n\\n    function addPanelChild (child) {\\n      bodyElements.push(cloneWithProps(child, getProps()));\\n    }\\n\\n    function addPanelBody (children) {\\n      bodyElements.push(\\n        React.createElement(\\\"div\\\", React.__spread({className: \\\"panel-body\\\"},  getProps()), \\n          children\\n        )\\n      );\\n    }\\n\\n    // Handle edge cases where we should not iterate through children.\\n    if (!Array.isArray(allChildren) || allChildren.length == 0) {\\n      if (this.shouldRenderFill(allChildren)) {\\n        addPanelChild(allChildren);\\n      } else {\\n        addPanelBody(allChildren);\\n      }\\n    } else {\\n      var panelBodyChildren = [];\\n\\n      function maybeRenderPanelBody () {\\n        if (panelBodyChildren.length == 0) {\\n          return;\\n        }\\n\\n        addPanelBody(panelBodyChildren);\\n        panelBodyChildren = [];\\n      }\\n\\n      allChildren.forEach(function(child) {\\n        if (this.shouldRenderFill(child)) {\\n          maybeRenderPanelBody();\\n\\n          // Separately add the filled element.\\n          addPanelChild(child);\\n        } else {\\n          panelBodyChildren.push(child);\\n        }\\n      }.bind(this));\\n\\n      maybeRenderPanelBody();\\n    }\\n\\n    return bodyElements;\\n  },\\n\\n  shouldRenderFill: function (child) {\\n    return React.isValidElement(child) && child.props.fill != null\\n  },\\n\\n  renderHeading: function () {\\n    var header = this.props.header;\\n\\n    if (!header) {\\n      return null;\\n    }\\n\\n    if (!React.isValidElement(header) || Array.isArray(header)) {\\n      header = this.props.collapsable ?\\n        this.renderCollapsableTitle(header) : header;\\n    } else if (this.props.collapsable) {\\n      header = cloneWithProps(header, {\\n        className: 'panel-title',\\n        children: this.renderAnchor(header.props.children)\\n      });\\n    } else {\\n      header = cloneWithProps(header, {\\n        className: 'panel-title'\\n      });\\n    }\\n\\n    return (\\n      React.createElement(\\\"div\\\", {className: \\\"panel-heading\\\"}, \\n        header\\n      )\\n    );\\n  },\\n\\n  renderAnchor: function (header) {\\n    return (\\n      React.createElement(\\\"a\\\", {\\n        href: '#' + (this.props.id || ''), \\n        className: this.isExpanded() ? null : 'collapsed', \\n        onClick: this.handleSelect}, \\n        header\\n      )\\n    );\\n  },\\n\\n  renderCollapsableTitle: function (header) {\\n    return (\\n      React.createElement(\\\"h4\\\", {className: \\\"panel-title\\\"}, \\n        this.renderAnchor(header)\\n      )\\n    );\\n  },\\n\\n  renderFooter: function () {\\n    if (!this.props.footer) {\\n      return null;\\n    }\\n\\n    return (\\n      React.createElement(\\\"div\\\", {className: \\\"panel-footer\\\"}, \\n        this.props.footer\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = Panel;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Panel.js\\n ** module id = 257\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Panel.js?\");\n\n/***/ },\n/* 258 */\n/*!*******************************************!*\\\n  !*** ./~/react-bootstrap/lib/PageItem.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\n\\nvar PageItem = React.createClass({displayName: \\\"PageItem\\\",\\n\\n  propTypes: {\\n    href: React.PropTypes.string,\\n    target: React.PropTypes.string,\\n    disabled: React.PropTypes.bool,\\n    previous: React.PropTypes.bool,\\n    next: React.PropTypes.bool,\\n    onSelect: React.PropTypes.func,\\n    eventKey: React.PropTypes.any\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      href: '#'\\n    };\\n  },\\n\\n  render: function () {\\n    var classes = {\\n      'disabled': this.props.disabled,\\n      'previous': this.props.previous,\\n      'next': this.props.next\\n    };\\n\\n    return (\\n      React.createElement(\\\"li\\\", React.__spread({}, \\n        this.props, \\n        {className: joinClasses(this.props.className, classSet(classes))}), \\n        React.createElement(\\\"a\\\", {\\n          href: this.props.href, \\n          title: this.props.title, \\n          target: this.props.target, \\n          onClick: this.handleSelect, \\n          ref: \\\"anchor\\\"}, \\n          this.props.children\\n        )\\n      )\\n    );\\n  },\\n\\n  handleSelect: function (e) {\\n    if (this.props.onSelect) {\\n      e.preventDefault();\\n\\n      if (!this.props.disabled) {\\n        this.props.onSelect(this.props.eventKey, this.props.href, this.props.target);\\n      }\\n    }\\n  }\\n});\\n\\nmodule.exports = PageItem;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/PageItem.js\\n ** module id = 258\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/PageItem.js?\");\n\n/***/ },\n/* 259 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Pager.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar cloneWithProps = __webpack_require__(/*! ./utils/cloneWithProps */ 216);\\n\\nvar ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 218);\\nvar createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 236);\\n\\nvar Pager = React.createClass({displayName: \\\"Pager\\\",\\n\\n  propTypes: {\\n    onSelect: React.PropTypes.func\\n  },\\n\\n  render: function () {\\n    return (\\n      React.createElement(\\\"ul\\\", React.__spread({}, \\n        this.props, \\n        {className: joinClasses(this.props.className, 'pager')}), \\n        ValidComponentChildren.map(this.props.children, this.renderPageItem)\\n      )\\n    );\\n  },\\n\\n  renderPageItem: function (child, index) {\\n    return cloneWithProps(\\n      child,\\n      {\\n        onSelect: createChainedFunction(child.props.onSelect, this.props.onSelect),\\n        ref: child.ref,\\n        key: child.key ? child.key : index\\n      }\\n    );\\n  }\\n});\\n\\nmodule.exports = Pager;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Pager.js\\n ** module id = 259\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Pager.js?\");\n\n/***/ },\n/* 260 */\n/*!******************************************!*\\\n  !*** ./~/react-bootstrap/lib/Popover.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\n\\n\\nvar Popover = React.createClass({displayName: \\\"Popover\\\",\\n  mixins: [BootstrapMixin],\\n\\n  propTypes: {\\n    placement: React.PropTypes.oneOf(['top','right', 'bottom', 'left']),\\n    positionLeft: React.PropTypes.number,\\n    positionTop: React.PropTypes.number,\\n    arrowOffsetLeft: React.PropTypes.number,\\n    arrowOffsetTop: React.PropTypes.number,\\n    title: React.PropTypes.node\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      placement: 'right'\\n    };\\n  },\\n\\n  render: function () {\\n    var classes = {};\\n    classes['popover'] = true;\\n    classes[this.props.placement] = true;\\n    classes['in'] = this.props.positionLeft != null || this.props.positionTop != null;\\n\\n    var style = {};\\n    style['left'] = this.props.positionLeft;\\n    style['top'] = this.props.positionTop;\\n    style['display'] = 'block';\\n\\n    var arrowStyle = {};\\n    arrowStyle['left'] = this.props.arrowOffsetLeft;\\n    arrowStyle['top'] = this.props.arrowOffsetTop;\\n\\n    return (\\n      React.createElement(\\\"div\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes)), style: style, title: null}), \\n        React.createElement(\\\"div\\\", {className: \\\"arrow\\\", style: arrowStyle}), \\n        this.props.title ? this.renderTitle() : null, \\n        React.createElement(\\\"div\\\", {className: \\\"popover-content\\\"}, \\n          this.props.children\\n        )\\n      )\\n    );\\n  },\\n\\n  renderTitle: function() {\\n    return (\\n      React.createElement(\\\"h3\\\", {className: \\\"popover-title\\\"}, this.props.title)\\n    );\\n  }\\n});\\n\\nmodule.exports = Popover;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Popover.js\\n ** module id = 260\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Popover.js?\");\n\n/***/ },\n/* 261 */\n/*!**********************************************!*\\\n  !*** ./~/react-bootstrap/lib/ProgressBar.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar Interpolate = __webpack_require__(/*! ./Interpolate */ 243);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar cloneWithProps = __webpack_require__(/*! ./utils/cloneWithProps */ 216);\\n\\nvar ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 218);\\n\\n\\nvar ProgressBar = React.createClass({displayName: \\\"ProgressBar\\\",\\n  propTypes: {\\n    min: React.PropTypes.number,\\n    now: React.PropTypes.number,\\n    max: React.PropTypes.number,\\n    label: React.PropTypes.node,\\n    srOnly: React.PropTypes.bool,\\n    striped: React.PropTypes.bool,\\n    active: React.PropTypes.bool\\n  },\\n\\n  mixins: [BootstrapMixin],\\n\\n  getDefaultProps: function () {\\n    return {\\n      bsClass: 'progress-bar',\\n      min: 0,\\n      max: 100\\n    };\\n  },\\n\\n  getPercentage: function (now, min, max) {\\n    return Math.ceil((now - min) / (max - min) * 100);\\n  },\\n\\n  render: function () {\\n    var classes = {\\n        progress: true\\n      };\\n\\n    if (this.props.active) {\\n      classes['progress-striped'] = true;\\n      classes['active'] = true;\\n    } else if (this.props.striped) {\\n      classes['progress-striped'] = true;\\n    }\\n\\n    if (!ValidComponentChildren.hasValidComponent(this.props.children)) {\\n      if (!this.props.isChild) {\\n        return (\\n          React.createElement(\\\"div\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes))}), \\n            this.renderProgressBar()\\n          )\\n        );\\n      } else {\\n        return (\\n          this.renderProgressBar()\\n        );\\n      }\\n    } else {\\n      return (\\n        React.createElement(\\\"div\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes))}), \\n          ValidComponentChildren.map(this.props.children, this.renderChildBar)\\n        )\\n      );\\n    }\\n  },\\n\\n  renderChildBar: function (child, index) {\\n    return cloneWithProps(child, {\\n      isChild: true,\\n      key: child.key ? child.key : index,\\n      ref: child.ref\\n    });\\n  },\\n\\n  renderProgressBar: function () {\\n    var percentage = this.getPercentage(\\n        this.props.now,\\n        this.props.min,\\n        this.props.max\\n      );\\n\\n    var label;\\n\\n    if (typeof this.props.label === \\\"string\\\") {\\n      label = this.renderLabel(percentage);\\n    } else if (this.props.label) {\\n      label = this.props.label;\\n    }\\n\\n    if (this.props.srOnly) {\\n      label = this.renderScreenReaderOnlyLabel(label);\\n    }\\n\\n    var classes = this.getBsClassSet();\\n\\n    return (\\n      React.createElement(\\\"div\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes)), role: \\\"progressbar\\\", \\n        style: {width: percentage + '%'}, \\n        \\\"aria-valuenow\\\": this.props.now, \\n        \\\"aria-valuemin\\\": this.props.min, \\n        \\\"aria-valuemax\\\": this.props.max}), \\n        label\\n      )\\n    );\\n  },\\n\\n  renderLabel: function (percentage) {\\n    var InterpolateClass = this.props.interpolateClass || Interpolate;\\n\\n    return (\\n      React.createElement(InterpolateClass, {\\n        now: this.props.now, \\n        min: this.props.min, \\n        max: this.props.max, \\n        percent: percentage, \\n        bsStyle: this.props.bsStyle}, \\n        this.props.label\\n      )\\n    );\\n  },\\n\\n  renderScreenReaderOnlyLabel: function (label) {\\n    return (\\n      React.createElement(\\\"span\\\", {className: \\\"sr-only\\\"}, \\n        label\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = ProgressBar;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/ProgressBar.js\\n ** module id = 261\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/ProgressBar.js?\");\n\n/***/ },\n/* 262 */\n/*!**************************************!*\\\n  !*** ./~/react-bootstrap/lib/Row.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\n\\nvar Row = React.createClass({displayName: \\\"Row\\\",\\n  propTypes: {\\n    componentClass: React.PropTypes.node.isRequired\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      componentClass: 'div'\\n    };\\n  },\\n\\n  render: function () {\\n    var ComponentClass = this.props.componentClass;\\n\\n    return (\\n      React.createElement(ComponentClass, React.__spread({},  this.props, {className: joinClasses(this.props.className, 'row')}), \\n        this.props.children\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = Row;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Row.js\\n ** module id = 262\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Row.js?\");\n\n/***/ },\n/* 263 */\n/*!**********************************************!*\\\n  !*** ./~/react-bootstrap/lib/SplitButton.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\nvar DropdownStateMixin = __webpack_require__(/*! ./DropdownStateMixin */ 237);\\nvar Button = __webpack_require__(/*! ./Button */ 227);\\nvar ButtonGroup = __webpack_require__(/*! ./ButtonGroup */ 228);\\nvar DropdownMenu = __webpack_require__(/*! ./DropdownMenu */ 238);\\n\\nvar SplitButton = React.createClass({displayName: \\\"SplitButton\\\",\\n  mixins: [BootstrapMixin, DropdownStateMixin],\\n\\n  propTypes: {\\n    pullRight:     React.PropTypes.bool,\\n    title:         React.PropTypes.node,\\n    href:          React.PropTypes.string,\\n    target:        React.PropTypes.string,\\n    dropdownTitle: React.PropTypes.node,\\n    onClick:       React.PropTypes.func,\\n    onSelect:      React.PropTypes.func,\\n    disabled:      React.PropTypes.bool\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      dropdownTitle: 'Toggle dropdown'\\n    };\\n  },\\n\\n  render: function () {\\n    var groupClasses = {\\n        'open': this.state.open,\\n        'dropup': this.props.dropup\\n      };\\n\\n    var button = (\\n      React.createElement(Button, React.__spread({}, \\n        this.props, \\n        {ref: \\\"button\\\", \\n        onClick: this.handleButtonClick, \\n        title: null, \\n        id: null}), \\n        this.props.title\\n      )\\n    );\\n\\n    var dropdownButton = (\\n      React.createElement(Button, React.__spread({}, \\n        this.props, \\n        {ref: \\\"dropdownButton\\\", \\n        className: joinClasses(this.props.className, 'dropdown-toggle'), \\n        onClick: this.handleDropdownClick, \\n        title: null, \\n        href: null, \\n        target: null, \\n        id: null}), \\n        React.createElement(\\\"span\\\", {className: \\\"sr-only\\\"}, this.props.dropdownTitle), \\n        React.createElement(\\\"span\\\", {className: \\\"caret\\\"})\\n      )\\n    );\\n\\n    return (\\n      React.createElement(ButtonGroup, {\\n        bsSize: this.props.bsSize, \\n        className: classSet(groupClasses), \\n        id: this.props.id}, \\n        button, \\n        dropdownButton, \\n        React.createElement(DropdownMenu, {\\n          ref: \\\"menu\\\", \\n          onSelect: this.handleOptionSelect, \\n          \\\"aria-labelledby\\\": this.props.id, \\n          pullRight: this.props.pullRight}, \\n          this.props.children\\n        )\\n      )\\n    );\\n  },\\n\\n  handleButtonClick: function (e) {\\n    if (this.state.open) {\\n      this.setDropdownState(false);\\n    }\\n\\n    if (this.props.onClick) {\\n      this.props.onClick(e, this.props.href, this.props.target);\\n    }\\n  },\\n\\n  handleDropdownClick: function (e) {\\n    e.preventDefault();\\n\\n    this.setDropdownState(!this.state.open);\\n  },\\n\\n  handleOptionSelect: function (key) {\\n    if (this.props.onSelect) {\\n      this.props.onSelect(key);\\n    }\\n\\n    this.setDropdownState(false);\\n  }\\n});\\n\\nmodule.exports = SplitButton;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/SplitButton.js\\n ** module id = 263\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/SplitButton.js?\");\n\n/***/ },\n/* 264 */\n/*!*****************************************!*\\\n  !*** ./~/react-bootstrap/lib/SubNav.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar cloneWithProps = __webpack_require__(/*! ./utils/cloneWithProps */ 216);\\n\\nvar ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 218);\\nvar createChainedFunction = __webpack_require__(/*! ./utils/createChainedFunction */ 236);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\n\\n\\nvar SubNav = React.createClass({displayName: \\\"SubNav\\\",\\n  mixins: [BootstrapMixin],\\n\\n  propTypes: {\\n    onSelect: React.PropTypes.func,\\n    active: React.PropTypes.bool,\\n    disabled: React.PropTypes.bool,\\n    href: React.PropTypes.string,\\n    title: React.PropTypes.string,\\n    text: React.PropTypes.node,\\n    target: React.PropTypes.string\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      bsClass: 'nav'\\n    };\\n  },\\n\\n  handleClick: function (e) {\\n    if (this.props.onSelect) {\\n      e.preventDefault();\\n\\n      if (!this.props.disabled) {\\n        this.props.onSelect(this.props.eventKey, this.props.href, this.props.target);\\n      }\\n    }\\n  },\\n\\n  isActive: function () {\\n    return this.isChildActive(this);\\n  },\\n\\n  isChildActive: function (child) {\\n    if (child.props.active) {\\n      return true;\\n    }\\n\\n    if (this.props.activeKey != null && this.props.activeKey === child.props.eventKey) {\\n      return true;\\n    }\\n\\n    if (this.props.activeHref != null && this.props.activeHref === child.props.href) {\\n      return true;\\n    }\\n\\n    if (child.props.children) {\\n      var isActive = false;\\n\\n      ValidComponentChildren.forEach(\\n        child.props.children,\\n        function (child) {\\n          if (this.isChildActive(child)) {\\n            isActive = true;\\n          }\\n        },\\n        this\\n      );\\n\\n      return isActive;\\n    }\\n\\n    return false;\\n  },\\n\\n  getChildActiveProp: function (child) {\\n    if (child.props.active) {\\n      return true;\\n    }\\n    if (this.props.activeKey != null) {\\n      if (child.props.eventKey == this.props.activeKey) {\\n        return true;\\n      }\\n    }\\n    if (this.props.activeHref != null) {\\n      if (child.props.href === this.props.activeHref) {\\n        return true;\\n      }\\n    }\\n\\n    return child.props.active;\\n  },\\n\\n  render: function () {\\n    var classes = {\\n      'active': this.isActive(),\\n      'disabled': this.props.disabled\\n    };\\n\\n    return (\\n      React.createElement(\\\"li\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes))}), \\n        React.createElement(\\\"a\\\", {\\n          href: this.props.href, \\n          title: this.props.title, \\n          target: this.props.target, \\n          onClick: this.handleClick, \\n          ref: \\\"anchor\\\"}, \\n          this.props.text\\n        ), \\n        React.createElement(\\\"ul\\\", {className: \\\"nav\\\"}, \\n          ValidComponentChildren.map(this.props.children, this.renderNavItem)\\n        )\\n      )\\n    );\\n  },\\n\\n  renderNavItem: function (child, index) {\\n    return cloneWithProps(\\n      child,\\n      {\\n        active: this.getChildActiveProp(child),\\n        onSelect: createChainedFunction(child.props.onSelect, this.props.onSelect),\\n        ref: child.ref,\\n        key: child.key ? child.key : index\\n      }\\n    );\\n  }\\n});\\n\\nmodule.exports = SubNav;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/SubNav.js\\n ** module id = 264\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/SubNav.js?\");\n\n/***/ },\n/* 265 */\n/*!*********************************************!*\\\n  !*** ./~/react-bootstrap/lib/TabbedArea.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\nvar cloneWithProps = __webpack_require__(/*! ./utils/cloneWithProps */ 216);\\n\\nvar ValidComponentChildren = __webpack_require__(/*! ./utils/ValidComponentChildren */ 218);\\nvar Nav = __webpack_require__(/*! ./Nav */ 249);\\nvar NavItem = __webpack_require__(/*! ./NavItem */ 251);\\n\\nfunction getDefaultActiveKeyFromChildren(children) {\\n  var defaultActiveKey;\\n\\n  ValidComponentChildren.forEach(children, function(child) {\\n    if (defaultActiveKey == null) {\\n      defaultActiveKey = child.props.eventKey;\\n    }\\n  });\\n\\n  return defaultActiveKey;\\n}\\n\\nvar TabbedArea = React.createClass({displayName: \\\"TabbedArea\\\",\\n  mixins: [BootstrapMixin],\\n\\n  propTypes: {\\n    bsStyle: React.PropTypes.oneOf(['tabs','pills']),\\n    animation: React.PropTypes.bool,\\n    onSelect: React.PropTypes.func\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      bsStyle: \\\"tabs\\\",\\n      animation: true\\n    };\\n  },\\n\\n  getInitialState: function () {\\n    var defaultActiveKey = this.props.defaultActiveKey != null ?\\n      this.props.defaultActiveKey : getDefaultActiveKeyFromChildren(this.props.children);\\n\\n    // TODO: In __DEV__ mode warn via `console.warn` if no `defaultActiveKey` has\\n    // been set by this point, invalid children or missing key properties are likely the cause.\\n\\n    return {\\n      activeKey: defaultActiveKey,\\n      previousActiveKey: null\\n    };\\n  },\\n\\n  componentWillReceiveProps: function (nextProps) {\\n    if (nextProps.activeKey != null && nextProps.activeKey !== this.props.activeKey) {\\n      this.setState({\\n        previousActiveKey: this.props.activeKey\\n      });\\n    }\\n  },\\n\\n  handlePaneAnimateOutEnd: function () {\\n    this.setState({\\n      previousActiveKey: null\\n    });\\n  },\\n\\n  render: function () {\\n    var activeKey =\\n      this.props.activeKey != null ? this.props.activeKey : this.state.activeKey;\\n\\n    function renderTabIfSet(child) {\\n      return child.props.tab != null ? this.renderTab(child) : null;\\n    }\\n\\n    var nav = (\\n      React.createElement(Nav, React.__spread({},  this.props, {activeKey: activeKey, onSelect: this.handleSelect, ref: \\\"tabs\\\"}), \\n        ValidComponentChildren.map(this.props.children, renderTabIfSet, this)\\n      )\\n    );\\n\\n    return (\\n      React.createElement(\\\"div\\\", null, \\n        nav, \\n        React.createElement(\\\"div\\\", {id: this.props.id, className: \\\"tab-content\\\", ref: \\\"panes\\\"}, \\n          ValidComponentChildren.map(this.props.children, this.renderPane)\\n        )\\n      )\\n    );\\n  },\\n\\n  getActiveKey: function () {\\n    return this.props.activeKey != null ? this.props.activeKey : this.state.activeKey;\\n  },\\n\\n  renderPane: function (child, index) {\\n    var activeKey = this.getActiveKey();\\n\\n    return cloneWithProps(\\n        child,\\n        {\\n          active: (child.props.eventKey === activeKey &&\\n            (this.state.previousActiveKey == null || !this.props.animation)),\\n          ref: child.ref,\\n          key: child.key ? child.key : index,\\n          animation: this.props.animation,\\n          onAnimateOutEnd: (this.state.previousActiveKey != null &&\\n            child.props.eventKey === this.state.previousActiveKey) ? this.handlePaneAnimateOutEnd: null\\n        }\\n      );\\n  },\\n\\n  renderTab: function (child) {\\n    var key = child.props.eventKey;\\n    return (\\n      React.createElement(NavItem, {\\n        ref: 'tab' + key, \\n        eventKey: key}, \\n        child.props.tab\\n      )\\n    );\\n  },\\n\\n  shouldComponentUpdate: function() {\\n    // Defer any updates to this component during the `onSelect` handler.\\n    return !this._isChanging;\\n  },\\n\\n  handleSelect: function (key) {\\n    if (this.props.onSelect) {\\n      this._isChanging = true;\\n      this.props.onSelect(key);\\n      this._isChanging = false;\\n    } else if (key !== this.getActiveKey()) {\\n      this.setState({\\n        activeKey: key,\\n        previousActiveKey: this.getActiveKey()\\n      });\\n    }\\n  }\\n});\\n\\nmodule.exports = TabbedArea;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/TabbedArea.js\\n ** module id = 265\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/TabbedArea.js?\");\n\n/***/ },\n/* 266 */\n/*!****************************************!*\\\n  !*** ./~/react-bootstrap/lib/Table.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\n\\nvar Table = React.createClass({displayName: \\\"Table\\\",\\n  propTypes: {\\n    striped: React.PropTypes.bool,\\n    bordered: React.PropTypes.bool,\\n    condensed: React.PropTypes.bool,\\n    hover: React.PropTypes.bool,\\n    responsive: React.PropTypes.bool\\n  },\\n\\n  render: function () {\\n    var classes = {\\n      'table': true,\\n      'table-striped': this.props.striped,\\n      'table-bordered': this.props.bordered,\\n      'table-condensed': this.props.condensed,\\n      'table-hover': this.props.hover\\n    };\\n    var table = (\\n      React.createElement(\\\"table\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes))}), \\n        this.props.children\\n      )\\n    );\\n\\n    return this.props.responsive ? (\\n      React.createElement(\\\"div\\\", {className: \\\"table-responsive\\\"}, \\n        table\\n      )\\n    ) : table;\\n  }\\n});\\n\\nmodule.exports = Table;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Table.js\\n ** module id = 266\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Table.js?\");\n\n/***/ },\n/* 267 */\n/*!******************************************!*\\\n  !*** ./~/react-bootstrap/lib/TabPane.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar TransitionEvents = __webpack_require__(/*! ./utils/TransitionEvents */ 232);\\n\\nvar TabPane = React.createClass({displayName: \\\"TabPane\\\",\\n  getDefaultProps: function () {\\n    return {\\n      animation: true\\n    };\\n  },\\n\\n  getInitialState: function () {\\n    return {\\n      animateIn: false,\\n      animateOut: false\\n    };\\n  },\\n\\n  componentWillReceiveProps: function (nextProps) {\\n    if (this.props.animation) {\\n      if (!this.state.animateIn && nextProps.active && !this.props.active) {\\n        this.setState({\\n          animateIn: true\\n        });\\n      } else if (!this.state.animateOut && !nextProps.active && this.props.active) {\\n        this.setState({\\n          animateOut: true\\n        });\\n      }\\n    }\\n  },\\n\\n  componentDidUpdate: function () {\\n    if (this.state.animateIn) {\\n      setTimeout(this.startAnimateIn, 0);\\n    }\\n    if (this.state.animateOut) {\\n      TransitionEvents.addEndEventListener(\\n        this.getDOMNode(),\\n        this.stopAnimateOut\\n      );\\n    }\\n  },\\n\\n  startAnimateIn: function () {\\n    if (this.isMounted()) {\\n      this.setState({\\n        animateIn: false\\n      });\\n    }\\n  },\\n\\n  stopAnimateOut: function () {\\n    if (this.isMounted()) {\\n      this.setState({\\n        animateOut: false\\n      });\\n\\n      if (typeof this.props.onAnimateOutEnd === 'function') {\\n        this.props.onAnimateOutEnd();\\n      }\\n    }\\n  },\\n\\n  render: function () {\\n    var classes = {\\n      'tab-pane': true,\\n      'fade': true,\\n      'active': this.props.active || this.state.animateOut,\\n      'in': this.props.active && !this.state.animateIn\\n    };\\n\\n    return (\\n      React.createElement(\\\"div\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes))}), \\n        this.props.children\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = TabPane;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/TabPane.js\\n ** module id = 267\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/TabPane.js?\");\n\n/***/ },\n/* 268 */\n/*!******************************************!*\\\n  !*** ./~/react-bootstrap/lib/Tooltip.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\n\\n\\nvar Tooltip = React.createClass({displayName: \\\"Tooltip\\\",\\n  mixins: [BootstrapMixin],\\n\\n  propTypes: {\\n    placement: React.PropTypes.oneOf(['top','right', 'bottom', 'left']),\\n    positionLeft: React.PropTypes.number,\\n    positionTop: React.PropTypes.number,\\n    arrowOffsetLeft: React.PropTypes.number,\\n    arrowOffsetTop: React.PropTypes.number\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      placement: 'right'\\n    };\\n  },\\n\\n  render: function () {\\n    var classes = {};\\n    classes['tooltip'] = true;\\n    classes[this.props.placement] = true;\\n    classes['in'] = this.props.positionLeft != null || this.props.positionTop != null;\\n\\n    var style = {};\\n    style['left'] = this.props.positionLeft;\\n    style['top'] = this.props.positionTop;\\n\\n    var arrowStyle = {};\\n    arrowStyle['left'] = this.props.arrowOffsetLeft;\\n    arrowStyle['top'] = this.props.arrowOffsetTop;\\n\\n    return (\\n        React.createElement(\\\"div\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes)), style: style}), \\n          React.createElement(\\\"div\\\", {className: \\\"tooltip-arrow\\\", style: arrowStyle}), \\n          React.createElement(\\\"div\\\", {className: \\\"tooltip-inner\\\"}, \\n            this.props.children\\n          )\\n        )\\n      );\\n  }\\n});\\n\\nmodule.exports = Tooltip;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Tooltip.js\\n ** module id = 268\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Tooltip.js?\");\n\n/***/ },\n/* 269 */\n/*!***************************************!*\\\n  !*** ./~/react-bootstrap/lib/Well.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar joinClasses = __webpack_require__(/*! ./utils/joinClasses */ 213);\\nvar classSet = __webpack_require__(/*! ./utils/classSet */ 212);\\nvar BootstrapMixin = __webpack_require__(/*! ./BootstrapMixin */ 214);\\n\\nvar Well = React.createClass({displayName: \\\"Well\\\",\\n  mixins: [BootstrapMixin],\\n\\n  getDefaultProps: function () {\\n    return {\\n      bsClass: 'well'\\n    };\\n  },\\n\\n  render: function () {\\n    var classes = this.getBsClassSet();\\n\\n    return (\\n      React.createElement(\\\"div\\\", React.__spread({},  this.props, {className: joinClasses(this.props.className, classSet(classes))}), \\n        this.props.children\\n      )\\n    );\\n  }\\n});\\n\\nmodule.exports = Well;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-bootstrap/lib/Well.js\\n ** module id = 269\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./~/react-bootstrap/lib/Well.js?\");\n\n/***/ },\n/* 270 */\n/*!******************************************!*\\\n  !*** ./javascript/endpoint-explorer.jsx ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = __webpack_require__(/*! react */ 1);\\r\\n\\r\\nvar EndpointRow = React.createClass({displayName: \\\"EndpointRow\\\",\\r\\n\\trender: function(){\\r\\n\\t\\tvar hash = '#fubumvc/chain-details/' + this.props.endpoint.hash;\\r\\n\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, React.createElement(\\\"a\\\", {href: hash}, \\\"Details\\\")), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, this.props.endpoint.title), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, this.props.endpoint.actions)\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\nvar EndpointTable = React.createClass({displayName: \\\"EndpointTable\\\",\\r\\n\\tgetInitialState: function(){\\r\\n\\t\\treturn {\\r\\n\\t\\t\\tloading: true\\r\\n\\t\\t}\\r\\n\\t},\\r\\n\\r\\n\\tcomponentDidMount: function(){\\r\\n\\t\\tFubuDiagnostics.get('EndpointExplorer:endpoints', {}, function(data)  {\\r\\n\\t\\t\\t_.assign(data, {loading: false});\\r\\n\\r\\n\\t\\t\\tthis.setState(data);\\r\\n\\t\\t}.bind(this));\\r\\n\\t},\\r\\n\\r\\n\\trender: function(){\\r\\n\\t\\tif (this.state.loading){\\r\\n\\t\\t\\treturn (React.createElement(\\\"p\\\", null, \\\"Loading...\\\"));\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tvar rows = this.state.endpoints.map(function(e, i){\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(EndpointRow, {endpoint: e})\\r\\n\\t\\t\\t);\\r\\n\\t\\t});\\r\\n\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"table\\\", {className: \\\"table\\\"}, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"thead\\\", null, \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"View Details\\\"), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Description\\\"), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Action(s)\\\")\\r\\n\\t\\t\\t\\t\\t)\\r\\n\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"tbody\\\", null, \\r\\n\\t\\t\\t\\t\\trows\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\nFubuDiagnostics.section('fubumvc').add({\\r\\n\\ttitle: 'Endpoints',\\r\\n\\tdescription: 'All the configured endpoint routes, partials, and message handlers in this application',\\r\\n\\tkey: 'endpoints',\\r\\n\\tcomponent: EndpointTable\\r\\n});\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/endpoint-explorer.jsx\\n ** module id = 270\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/endpoint-explorer.jsx?\");\n\n/***/ },\n/* 271 */\n/*!**************************************!*\\\n  !*** ./javascript/chain-details.jsx ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = __webpack_require__(/*! react */ 1);\\r\\nvar _ = __webpack_require__(/*! lodash */ 148);\\r\\nvar Router = __webpack_require__(/*! react-router */ 151);\\r\\nvar $__0=    __webpack_require__(/*! react-bootstrap */ 210),Grid=$__0.Grid,Col=$__0.Col,Row=$__0.Row;\\r\\n\\r\\nvar TypeDisplay = React.createClass({displayName: \\\"TypeDisplay\\\",\\r\\n\\trender: function(){\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"span\\\", {className: \\\"type-display\\\", title: this.props.type['qualified-name']}, this.props.type.name)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\n\\r\\n\\r\\nfunction Cell(title, att, toCell){\\r\\n\\tthis.title = title;\\r\\n\\tthis.toCell = toCell;\\r\\n\\t\\r\\n\\tif (this.toCell == null){\\r\\n\\t\\tthis.toCell = function(data){\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, data[att])\\r\\n\\t\\t\\t);\\r\\n\\t\\t};\\r\\n\\t}\\r\\n\\t\\r\\n\\tthis.applies = function(data){\\r\\n\\t\\treturn data[att] != null;\\r\\n\\t}\\r\\n\\t\\r\\n\\tthis.shouldDisplay = function(data){\\r\\n\\t\\treturn data[att] != null;\\r\\n\\t}\\r\\n}\\r\\n\\r\\nfunction ArrayCell(title, att){\\r\\n\\tvar toCell = function(data){\\r\\n\\t\\tvar display = _(data[att]).join(', ');\\r\\n\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"td\\\", null, display)\\r\\n\\t\\t);\\r\\n\\t};\\r\\n\\r\\n\\tvar cell = new Cell(title, att, toCell);\\r\\n\\t\\r\\n\\tcell.shouldDisplay = function(data){\\r\\n\\t\\tvar actual = data[att];\\r\\n\\t\\t\\r\\n\\t\\treturn actual != null && actual.length > 0;\\r\\n\\t}\\r\\n\\t\\r\\n\\treturn cell;\\r\\n}\\r\\n\\r\\nfunction TypeCell(title, att){\\r\\n\\tvar cell = new Cell(title, att);\\r\\n\\t\\r\\n\\tcell.toCell = function(data){\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"td\\\", null, React.createElement(TypeDisplay, {type: data[att]}))\\r\\n\\t\\t);\\r\\n\\t}\\r\\n\\t\\r\\n\\r\\n\\t\\r\\n\\treturn cell;\\r\\n}\\r\\n\\r\\n\\r\\nfunction toDetailRows(cells, data){\\r\\n\\tvar activeCells = _.filter(cells, function(c, i){\\r\\n\\t\\treturn c.shouldDisplay(data);\\r\\n\\t});\\r\\n\\r\\n\\treturn activeCells.map(function(cell)  {\\r\\n\\t\\tvar td = cell.toCell(data);\\r\\n\\t\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"tr\\\", null, React.createElement(\\\"th\\\", null, cell.title), td)\\r\\n\\t\\t);\\r\\n\\t});\\r\\n}\\r\\n\\r\\n\\r\\nvar DetailsTable = React.createClass({displayName: \\\"DetailsTable\\\",\\r\\n\\trender: function(){\\r\\n\\t\\tvar data = this.props.data;\\r\\n\\t\\tvar activeCells = _.filter(this.props.cells, function(c, i){\\r\\n\\t\\t\\treturn c.shouldDisplay(data);\\r\\n\\t\\t});\\r\\n\\t\\r\\n\\t\\tvar rows = activeCells.map(function(cell, i){\\r\\n\\t\\t\\tvar td = cell.toCell(data);\\r\\n\\t\\t\\t\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, React.createElement(\\\"th\\\", null, cell.title), td)\\r\\n\\t\\t\\t);\\r\\n\\t\\t});\\r\\n\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"table\\\", {className: \\\"details table table-striped\\\", style: {width: 'auto'}}, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"tbody\\\", null, \\r\\n\\t\\t\\t\\trows\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\nfunction toBehaviorRow(node){\\r\\n\\treturn (\\r\\n\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\tReact.createElement(\\\"th\\\", null, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"p\\\", null, node.title), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"p\\\", null, React.createElement(\\\"small\\\", {className: \\\"small\\\"}, \\\"Category: \\\", node.category))\\r\\n\\t\\t\\t), \\r\\n\\t\\t\\tReact.createElement(\\\"td\\\", {dangerouslySetInnerHTML: {__html: node.details}})\\t\\r\\n\\t\\t)\\r\\n\\t);\\r\\n}\\r\\n\\r\\n\\r\\n\\r\\nvar EndpointDetails = React.createClass({displayName: \\\"EndpointDetails\\\",\\r\\n\\tmixins: [Router.State],\\r\\n\\r\\n\\tgetInitialState: function(){\\r\\n\\t\\treturn {\\r\\n\\t\\t\\tloading: true,\\r\\n\\t\\t}\\r\\n\\t},\\r\\n\\r\\n\\tcomponentDidMount: function(){\\r\\n\\t\\tvar params = this.getParams();\\r\\n\\t\\tFubuDiagnostics.get('Chain:chain_details_Hash', params, function(data)  {\\r\\n\\t\\t\\t\\r\\n\\r\\n\\t\\t\\tthis.setState({loading: false, data: data});\\r\\n\\t\\t}.bind(this));\\r\\n\\t},\\r\\n\\t\\r\\n\\trender: function(){\\r\\n\\t\\tif (this.state.loading){\\r\\n\\t\\t\\treturn (React.createElement(\\\"p\\\", null, \\\"Loading...\\\"));\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tif (this.state.data['not-found']){\\r\\n\\t\\t\\treturn (React.createElement(\\\"h1\\\", null, \\\"Chain not found!\\\"));\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tvar detailCells = [\\r\\n\\t\\t\\tnew Cell('Route', 'route'),\\r\\n\\t\\t\\tnew Cell('Url Category', 'category'),\\r\\n\\t\\t\\tnew Cell('Origin', 'origin'),\\r\\n\\t\\t\\tnew TypeCell('Input Type', 'input'),\\r\\n\\t\\t\\tnew TypeCell('Resource Type', 'resource'),\\r\\n\\t\\t\\tnew ArrayCell('Accepts', 'accepts'),\\r\\n\\t\\t\\tnew ArrayCell('Content-Type', 'content-type'),\\r\\n\\t\\t\\tnew ArrayCell('Tags', 'tags'),\\r\\n\\t\\t\\r\\n\\t\\t];\\r\\n\\r\\n\\r\\n\\t\\t\\r\\n\\t\\tvar rows = toDetailRows(detailCells, this.state.data.details);\\r\\n\\t\\tif (this.state.data.route != null){\\r\\n\\t\\t\\tvar routeRow = (\\r\\n\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Route: \\\", this.state.data.details.route), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"td\\\", {dangerouslySetInnerHTML: {__html: this.state.data.route}})\\t\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t);\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tvar behaviorHeader = (\\r\\n\\t\\t\\tReact.createElement(\\\"tr\\\", null, React.createElement(\\\"td\\\", {colSpan: \\\"2\\\"}, React.createElement(\\\"h4\\\", null, \\\"Behaviors\\\")))\\r\\n\\t\\t);\\r\\n\\t\\trows.push(behaviorHeader);\\r\\n\\t\\r\\n\\t\\tthis.state.data.nodes.forEach(function(node, i){\\r\\n\\t\\t\\tvar row = toBehaviorRow(node);\\r\\n\\t\\t\\trows.push(row);\\r\\n\\t\\t});\\r\\n\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(Row, null, \\r\\n\\r\\n\\t\\t\\tReact.createElement(Col, {md: 3, xs: 3}, \\n\\t\\t\\t\\\"This is a visualization of a single behavior chain. We should put more information here some day.\\\"\\n\\t\\t\\t), \\r\\n\\r\\n\\t\\t\\tReact.createElement(Col, {md: 9, xs: 9}, \\r\\n\\r\\n\\t\\t\\tReact.createElement(\\\"table\\\", {className: \\\"details table table-striped\\\", style: {width: 'auto'}}, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"tbody\\\", null, \\r\\n\\t\\t\\t\\trows\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t)\\r\\n\\r\\n\\t\\t\\t)\\r\\n\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\n\\r\\n\\r\\n\\r\\nFubuDiagnostics.section('fubumvc').add({\\r\\n\\ttitle: 'Chain Details',\\r\\n\\tdescription: 'BehaviorChain Visualization',\\r\\n\\tkey: 'chain-details',\\r\\n\\troute: 'Chain:chain_details_Hash',\\r\\n\\tcomponent: EndpointDetails\\r\\n});\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/chain-details.jsx\\n ** module id = 271\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/chain-details.jsx?\");\n\n/***/ },\n/* 272 */\n/*!**************************************!*\\\n  !*** ./javascript/request-table.jsx ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = __webpack_require__(/*! react */ 1);\\r\\n\\r\\nvar RequestRow = React.createClass({displayName: \\\"RequestRow\\\",\\r\\n\\trender: function(){\\r\\n\\t\\tvar details = '#fubumvc/request-details/' + this.props.request.id;\\r\\n\\r\\n\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, React.createElement(\\\"a\\\", {href: details}, \\\"Details\\\")), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, this.props.request.time), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, this.props.request.endpoint), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, this.props.request.method), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, this.props.request.status), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, this.props.request.description), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, this.props.request['content-type']), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", {align: \\\"right\\\"}, this.props.request.duration)\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\nvar RequestTable = React.createClass({displayName: \\\"RequestTable\\\",\\r\\n\\tgetInitialState: function(){\\r\\n\\t\\treturn {\\r\\n\\t\\t\\tloading: true\\r\\n\\t\\t}\\r\\n\\t},\\r\\n\\r\\n\\tcomponentDidMount: function(){\\r\\n\\t\\tFubuDiagnostics.get('Requests:requests', {}, function(data)  {\\r\\n\\t\\t\\t_.assign(data, {loading: false});\\r\\n\\r\\n\\t\\t\\tthis.setState(data);\\r\\n\\t\\t}.bind(this));\\r\\n\\t},\\r\\n\\r\\n\\trender: function(){\\t\\r\\n\\t\\tif (this.state.loading){\\r\\n\\t\\t\\treturn (React.createElement(\\\"p\\\", null, \\\"Loading...\\\"));\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tvar rows = this.state.requests.map(function(r, i){\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(RequestRow, {request: r})\\r\\n\\t\\t\\t);\\r\\n\\t\\t});\\r\\n\\t\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"table\\\", {className: \\\"table table-striped\\\"}, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"thead\\\", null, \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Details\\\"), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Time (Local)\\\"), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Url\\\"), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Method\\\"), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Status\\\"), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Description\\\"), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Content Type\\\"), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Duration (ms)\\\")\\r\\n\\t\\t\\t\\t\\t)\\r\\n\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"tbody\\\", null, \\r\\n\\t\\t\\t\\t\\trows\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\n\\r\\nFubuDiagnostics.section('fubumvc').add({\\r\\n\\ttitle: 'Requests',\\r\\n\\tdescription: 'A history of the most recent requests handled by this application',\\r\\n\\tkey: 'requests',\\r\\n\\tcomponent: RequestTable\\r\\n});\\r\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/request-table.jsx\\n ** module id = 272\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/request-table.jsx?\");\n\n/***/ },\n/* 273 */\n/*!****************************************!*\\\n  !*** ./javascript/request-details.jsx ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = __webpack_require__(/*! react */ 1);\\r\\nvar Router = __webpack_require__(/*! react-router */ 151);\\r\\n\\r\\n\\r\\nvar HeaderTable = React.createClass({displayName: \\\"HeaderTable\\\",\\r\\n\\trender: function(){\\r\\n\\t\\tif (!(this.props.headers) || this.props.headers.length == 0){\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(\\\"div\\\", null)\\r\\n\\t\\t\\t);\\r\\n\\t\\t}\\r\\n\\t\\r\\n\\t\\tvar rows = this.props.headers.map(function(header, i){\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, React.createElement(\\\"th\\\", null, header.key), React.createElement(\\\"td\\\", null, header.values))\\r\\n\\t\\t\\t);\\r\\n\\t\\t});\\r\\n\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"div\\\", null, \\r\\n\\t\\t\\tReact.createElement(\\\"h3\\\", null, this.props.label), \\r\\n\\t\\t\\tReact.createElement(\\\"table\\\", {className: \\\"table table-striped details\\\", style: {width: 'auto'}}, \\r\\n\\t\\t\\t\\trows\\r\\n\\t\\t\\t)\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\nvar PropTable = React.createClass({displayName: \\\"PropTable\\\",\\r\\n\\trender: function(){\\r\\n\\t\\tif (!(this.props.data) || this.props.data.length == 0){\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(\\\"div\\\", null)\\r\\n\\t\\t\\t);\\r\\n\\t\\t}\\r\\n\\t\\r\\n\\t\\tvar rows = this.props.data.map(function(x, i){\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, React.createElement(\\\"th\\\", null, x.key), React.createElement(\\\"td\\\", null, x.value))\\r\\n\\t\\t\\t);\\r\\n\\t\\t});\\r\\n\\t\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"div\\\", null, \\r\\n\\t\\t\\tReact.createElement(\\\"h3\\\", null, this.props.label), \\r\\n\\t\\t\\tReact.createElement(\\\"table\\\", {className: \\\"table table-striped\\\", style: {width: 'auto'}}, \\r\\n\\t\\t\\t\\trows\\r\\n\\t\\t\\t)\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\n\\r\\nvar TabGroup = React.createClass({displayName: \\\"TabGroup\\\",\\r\\n\\trender: function(){\\r\\n\\t\\tvar tabs = this.props.options.map(function(opt, i){\\r\\n\\t\\t\\tif (opt.key == this.props.active){\\r\\n\\t\\t\\t\\treturn (\\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"li\\\", {className: \\\"active\\\"}, React.createElement(\\\"a\\\", {href: opt.anchor}, opt.title))\\r\\n\\t\\t\\t\\t);\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\telse {\\r\\n\\t\\t\\t\\treturn (\\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"li\\\", null, React.createElement(\\\"a\\\", {href: opt.anchor}, opt.title))\\r\\n\\t\\t\\t\\t);\\r\\n\\t\\t\\t}\\r\\n\\t\\t});\\r\\n\\t\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"ul\\\", {className: \\\"nav nav-tabs\\\", role: \\\"tablist\\\"}, \\r\\n\\t\\t\\t\\ttabs\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\nvar RequestDetails = React.createClass({displayName: \\\"RequestDetails\\\",\\r\\n\\tmixins: [Router.State],\\r\\n\\r\\n\\tgetInitialState: function(){\\r\\n\\t\\treturn {\\r\\n\\t\\t\\tloading: true,\\r\\n\\t\\t}\\r\\n\\t},\\r\\n\\r\\n\\tcomponentDidMount: function(){\\r\\n\\t\\tvar params = this.getParams();\\r\\n\\t\\tFubuDiagnostics.get('Requests:request_Id', params, function(data)  {\\r\\n\\t\\t\\tthis.setState({loading: false, data: data});\\r\\n\\t\\t}.bind(this));\\r\\n\\t},\\r\\n\\r\\n\\trender: function(){\\r\\n\\t\\tif (this.state.loading){\\r\\n\\t\\t\\treturn (React.createElement(\\\"p\\\", null, \\\"Loading...\\\"));\\r\\n\\t\\t}\\r\\n\\r\\n\\r\\n\\t\\tif (this.state.data.request == null){\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(\\\"div\\\", null, \\\"Request not found.\\\")\\r\\n\\t\\t\\t);\\r\\n\\t\\t}\\r\\n\\t\\t\\r\\n\\t\\tvar request = this.state.data.request;\\r\\n\\r\\n\\t\\tvar status = request.status;\\r\\n\\t\\tif (request.description){\\r\\n\\t\\t\\tstatus = status + '(' + request.description + ')';\\r\\n\\t\\t}\\r\\n\\t\\t\\t\\t\\r\\n\\t\\tvar chainUrl = '#fubumvc/chain-details/' + request.hash;\\r\\n\\r\\n\\t\\tvar logRows = request.logs.map(function(log)  {\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, log.behavior), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, log.time), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"td\\\", {dangerouslySetInnerHTML: {__html: log.html}})\\t\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t);\\r\\n\\t\\t});\\r\\n\\t\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"div\\\", null, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"table\\\", {className: \\\"table table-striped\\\", style: {width: 'auto'}}, \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, React.createElement(\\\"th\\\", null, \\\"Chain\\\"), React.createElement(\\\"td\\\", null, React.createElement(\\\"a\\\", {href: chainUrl}, request.title)), React.createElement(\\\"th\\\", null, \\\"Status\\\"), React.createElement(\\\"td\\\", null, status)), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, React.createElement(\\\"th\\\", null, \\\"Url\\\"), React.createElement(\\\"td\\\", null, request.endpoint), React.createElement(\\\"th\\\", null, \\\"Request Time\\\"), React.createElement(\\\"td\\\", null, request.time)), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, React.createElement(\\\"th\\\", null, \\\"Method\\\"), React.createElement(\\\"td\\\", null, request.method), React.createElement(\\\"th\\\", null, \\\"Execution Time (ms)\\\"), React.createElement(\\\"td\\\", null, request.duration))\\r\\n\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\t\\r\\n\\r\\n\\t\\t\\t\\tReact.createElement(HeaderTable, {label: \\\"Request Headers\\\", headers: request['request-headers']}), \\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\tReact.createElement(PropTable, {label: \\\"Querystring\\\", data: request.querystring}), \\r\\n\\t\\t\\t\\tReact.createElement(PropTable, {label: \\\"Form Data\\\", data: request.form}), \\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\tReact.createElement(HeaderTable, {label: \\\"Response Headers\\\", headers: request['response-headers']}), \\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\tReact.createElement(\\\"table\\\", {className: \\\"table table-striped\\\"}, \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"thead\\\", null, \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Behavior\\\"), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Time\\\"), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Log\\\")\\r\\n\\t\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"tbody\\\", null, \\r\\n\\t\\t\\t\\t\\t\\tlogRows\\r\\n\\t\\t\\t\\t\\t)\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\n\\r\\nFubuDiagnostics.section('fubumvc').add({\\r\\n\\ttitle: 'Request Details',\\r\\n\\tdescription: 'Http Request Visualization',\\r\\n\\tkey: 'request-details',\\r\\n\\troute: 'Requests:request_Id',\\r\\n\\tcomponent: RequestDetails\\r\\n});\\r\\n\\r\\n\\t\\t\\t\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/request-details.jsx\\n ** module id = 273\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/request-details.jsx?\");\n\n/***/ },\n/* 274 */\n/*!**********************************!*\\\n  !*** ./javascript/packaging.jsx ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"\\r\\n/** @jsx React.DOM */\\r\\n\\r\\nvar React = __webpack_require__(/*! react */ 1);\\r\\n\\r\\n\\r\\n\\r\\nvar Packaging = React.createClass({displayName: \\\"Packaging\\\",\\r\\n\\tgetInitialState: function(){\\r\\n\\t\\treturn {\\r\\n\\t\\t\\tloading: true\\r\\n\\t\\t}\\r\\n\\t},\\r\\n\\r\\n\\tcomponentDidMount: function(){\\r\\n\\t\\tFubuDiagnostics.get('PackageLog:package_logs', {}, function(data)  {\\r\\n\\t\\t\\t_.assign(data, {loading: false});\\r\\n\\r\\n\\t\\t\\tthis.setState(data);\\r\\n\\t\\t}.bind(this));\\r\\n\\t},\\r\\n\\r\\n\\r\\n\\trender: function(){\\r\\n\\t\\tif (this.state.loading){\\r\\n\\t\\t\\treturn (React.createElement(\\\"p\\\", null, \\\"Loading...\\\"));\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tvar rows = this.state.logs.map(function(log)  {\\r\\n\\t\\t\\tvar row = (\\r\\n\\t\\t        React.createElement(\\\"tr\\\", null, \\r\\n\\t\\t          React.createElement(\\\"td\\\", null, log.Type), \\r\\n\\t\\t          React.createElement(\\\"td\\\", null, log.Description), \\r\\n\\t\\t          React.createElement(\\\"td\\\", null, log.Provenance)\\r\\n\\t\\t        )\\r\\n\\t\\t\\t);\\r\\n\\r\\n\\t\\t\\tif (log.FullTraceText != '' && log.FullTraceText != null){\\r\\n\\t\\t\\t\\treturn [row, (\\r\\n\\t\\t          React.createElement(\\\"tr\\\", null, \\r\\n\\t\\t            React.createElement(\\\"td\\\", {colSpan: \\\"4\\\", className: \\\"bg-info\\\"}, \\r\\n\\t\\t              log.FullTraceText\\r\\n\\t\\t            )\\r\\n\\t\\t          )\\r\\n\\t\\t\\t\\t)]\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\treturn row;\\r\\n\\t\\t});\\r\\n\\r\\n\\t\\trows = _.flatten(rows);\\r\\n\\r\\n\\t\\treturn (\\r\\n\\t\\t  React.createElement(\\\"div\\\", null, \\r\\n\\t\\t  React.createElement(\\\"h2\\\", null, \\\"Package Loading Log\\\"), \\r\\n\\t\\t  React.createElement(\\\"table\\\", {className: \\\"table\\\", style: {width: 'auto'}}, \\r\\n\\t\\t    React.createElement(\\\"thead\\\", null, \\r\\n\\t\\t      React.createElement(\\\"tr\\\", null, \\r\\n\\t\\t        React.createElement(\\\"th\\\", null, \\\"Type\\\"), \\r\\n\\t\\t        React.createElement(\\\"th\\\", null, \\\"Description\\\"), \\r\\n\\t\\t        React.createElement(\\\"th\\\", null, \\\"Provenance\\\")\\r\\n\\t\\t      )\\r\\n\\t\\t    ), \\r\\n\\t\\t    React.createElement(\\\"tbody\\\", null, \\r\\n\\t\\t      rows\\r\\n\\t\\t    )\\r\\n\\t\\t  )\\r\\n\\t\\t  )\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\n\\r\\nFubuDiagnostics.section('fubumvc').add({\\r\\n\\ttitle: 'Package Loading',\\r\\n\\tdescription: 'Bottle Loading Logs',\\r\\n\\tkey: 'package-loading',\\r\\n\\tcomponent: Packaging\\r\\n});\\r\\n\\r\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/packaging.jsx\\n ** module id = 274\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/packaging.jsx?\");\n\n/***/ },\n/* 275 */\n/*!****************************************!*\\\n  !*** ./javascript/client-messages.jsx ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\r\\n\\r\\n\\r\\nvar MessageRow = React.createClass({displayName: \\\"MessageRow\\\",\\r\\n\\trender: function(){\\r\\n\\t\\tvar url = '#fubumvc/chain-details/' + this.props.message.chain;\\r\\n\\r\\n\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, React.createElement(\\\"a\\\", {href: url, title: \\\"View the chain visualization for this message type\\\"}, this.props.message.type)), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, this.props.message.query), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, this.props.message.resource)\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\nvar MessageTable = React.createClass({displayName: \\\"MessageTable\\\",\\r\\n\\tgetInitialState: function(){\\r\\n\\t\\treturn {\\r\\n\\t\\t\\tloading: true\\r\\n\\t\\t}\\r\\n\\t},\\r\\n\\r\\n\\tcomponentDidMount: function(){\\r\\n\\t\\tFubuDiagnostics.get('ClientMessages:clientmessages', {}, function(data)  {\\r\\n\\t\\t\\t_.assign(data, {loading: false});\\r\\n\\r\\n\\t\\t\\tthis.setState(data);\\r\\n\\t\\t}.bind(this));\\r\\n\\t},\\r\\n\\r\\n\\trender: function(){\\t\\r\\n\\t\\tif (this.state.loading){\\r\\n\\t\\t\\treturn (React.createElement(\\\"p\\\", null, \\\"Loading...\\\"));\\r\\n\\t\\t}\\r\\n\\t\\t\\r\\n\\t\\tif (this.state.messages.length == 0){\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(\\\"h1\\\", null, \\\"No client messages in this application!\\\")\\r\\n\\t\\t\\t);\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tvar rows = this.state.messages.map(function(r, i){\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(MessageRow, {message: r})\\r\\n\\t\\t\\t);\\r\\n\\t\\t});\\r\\n\\t\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"table\\\", {className: \\\"table table-striped\\\"}, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"thead\\\", null, \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Client Side Name\\\"), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Query Model\\\"), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Resource Model\\\")\\r\\n\\t\\t\\t\\t\\t)\\r\\n\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"tbody\\\", null, \\r\\n\\t\\t\\t\\t\\trows\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\n\\r\\nFubuDiagnostics.section('fubumvc').add({\\r\\n\\ttitle: 'Client Message Types',\\r\\n\\tdescription: 'A list of all the message types available for aggregated querying',\\r\\n\\tkey: 'client-messages',\\r\\n\\tcomponent: MessageTable\\r\\n});\\r\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/client-messages.jsx\\n ** module id = 275\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/client-messages.jsx?\");\n\n/***/ },\n/* 276 */\n/*!******************************!*\\\n  !*** ./javascript/shell.jsx ***!\n  \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = __webpack_require__(/*! react */ 1);\\r\\nvar _ = __webpack_require__(/*! lodash */ 148);\\r\\n\\r\\nvar Router = __webpack_require__(/*! react-router */ 151); // or var Router = ReactRouter; in browsers\\r\\nvar Route = Router.Route, DefaultRoute = Router.DefaultRoute,\\r\\n  Link=Router.Link, RouteHandler = Router.RouteHandler;\\r\\n\\r\\nvar Header = __webpack_require__(/*! ./header */ 277);\\r\\nvar Dashboard = __webpack_require__(/*! ./dashboard */ 278);\\r\\nvar $__0=    __webpack_require__(/*! react-bootstrap */ 210),Grid=$__0.Grid,Col=$__0.Col,Row=$__0.Row;\\r\\n\\r\\nvar count = 0;\\r\\n\\r\\nvar App = React.createClass({displayName: \\\"App\\\",\\r\\n  mixins: [Router.State],\\r\\n\\r\\n  getHandlerKey: function () {\\r\\n  \\tcount++;\\r\\n\\r\\n  \\treturn count;\\r\\n  },\\r\\n\\r\\n\\trender: function(){\\r\\n\\t\\tstyle = {\\r\\n\\t\\t\\tpaddingLeft: '25px'\\r\\n\\t\\t}\\r\\n\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(Grid, {fluid: true}, \\r\\n\\t\\t\\t\\tReact.createElement(Row, null, \\r\\n\\t\\t\\t\\t\\tReact.createElement(Header, null)\\r\\n\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\tReact.createElement(Row, {style: style}, \\r\\n\\t\\t\\t\\t\\tReact.createElement(RouteHandler, {key: this.getHandlerKey()})\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\nmodule.exports = {\\r\\n\\tstart: function(){\\r\\n\\t\\tvar sectionRoutes = _.flatten(FubuDiagnostics.sections.map(function(section)  {return section.toRoutes();}));\\r\\n\\r\\n\\t\\tvar routes = (\\r\\n\\t\\t  React.createElement(Route, {name: \\\"app\\\", path: \\\"/\\\", handler: App}, \\r\\n\\t\\t    React.createElement(DefaultRoute, {handler: Dashboard}), \\r\\n\\t\\t    sectionRoutes\\r\\n\\t\\t  )\\r\\n\\t\\t);\\r\\n\\r\\n\\t\\tRouter.run(routes, function (Handler) {\\r\\n\\t\\t  React.render(React.createElement(Handler, null), document.body);\\r\\n\\t\\t});\\r\\n\\t}\\r\\n}\\r\\n\\r\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/shell.jsx\\n ** module id = 276\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/shell.jsx?\");\n\n/***/ },\n/* 277 */\n/*!*******************************!*\\\n  !*** ./javascript/header.jsx ***!\n  \\*******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = __webpack_require__(/*! react */ 1);\\r\\n\\r\\nvar $__0=      __webpack_require__(/*! react-bootstrap */ 210),Navbar=$__0.Navbar,Nav=$__0.Nav,DropdownButton=$__0.DropdownButton,MenuItem=$__0.MenuItem,NavItem=$__0.NavItem;\\r\\nvar Router = __webpack_require__(/*! react-router */ 151);\\r\\n\\r\\nvar Header = React.createClass({displayName: \\\"Header\\\",\\r\\n\\tmixins: [ Router.State ],\\r\\n\\r\\n\\trender: function(){\\r\\n\\t\\tvar path = this.getPathname();\\r\\n\\t\\tvar sectionLinks = [];\\r\\n\\t\\tif (path != '/'){\\r\\n\\t\\t\\tvar sectionKey = path.split('/')[1];\\r\\n\\t\\t\\tvar activeSection = FubuDiagnostics.section(sectionKey);\\r\\n\\t\\t\\tsectionLinks = activeSection.activeViews().map(function(view)  {\\r\\n\\t\\t\\t\\treturn (\\r\\n\\t\\t\\t\\t\\tReact.createElement(NavItem, {href: view.anchor, title: view.description}, view.title)\\r\\n\\t\\t\\t\\t);\\r\\n\\t\\t\\t});\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tvar sectionItems = FubuDiagnostics.sections.map(function(section)  {\\r\\n\\t\\t\\treturn (React.createElement(NavItem, {href: section.anchor, title: section.description}, section.title));\\r\\n\\t\\t});\\r\\n\\r\\n\\t\\treturn (\\r\\n\\t\\t\\r\\n\\t\\t\\tReact.createElement(\\\"div\\\", null, \\r\\n\\t\\t\\t\\tReact.createElement(Navbar, {inverse: true, id: \\\"top-nav\\\"}, \\r\\n\\t\\t\\t\\t\\tReact.createElement(Nav, null, \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"img\\\", {src: \\\"/_fubu/icon\\\", style: {marginTop: \\\"5px\\\", marginRight: '20px'}})\\r\\n\\t\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\t\\tReact.createElement(Nav, null, \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"a\\\", {className: \\\"navbar-brand\\\", href: \\\"#/\\\"}, \\\"FubuMVC Diagnostics\\\"), \\r\\n\\t\\t\\t\\t\\t\\tsectionLinks\\r\\n\\t\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\t\\tReact.createElement(Nav, {right: true}, \\r\\n\\t\\t\\t\\t\\t    React.createElement(DropdownButton, {eventKey: 1, title: \\\"Sections\\\"}, \\r\\n\\t\\t\\t\\t          sectionItems\\r\\n\\t\\t\\t\\t        )\\r\\n\\t\\t\\t\\t\\t)\\r\\n\\t\\t\\t\\t)\\r\\n\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\nmodule.exports = Header;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/header.jsx\\n ** module id = 277\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/header.jsx?\");\n\n/***/ },\n/* 278 */\n/*!**********************************!*\\\n  !*** ./javascript/dashboard.jsx ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = __webpack_require__(/*! react */ 1);\\r\\nvar $__0=    __webpack_require__(/*! react-bootstrap */ 210),Grid=$__0.Grid,Col=$__0.Col,Row=$__0.Row;\\r\\n\\r\\n\\r\\nvar SectionLinks = __webpack_require__(/*! ./section-links */ 202);\\r\\n\\r\\nAllLinks = React.createClass({displayName: \\\"AllLinks\\\",\\r\\n\\trender: function(){\\r\\n\\t\\tvar style = {\\r\\n\\t\\t\\tmarginLeft: '10px'\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tvar items = FubuDiagnostics.sections.map(function(s)  {\\r\\n\\t\\t\\tvar header = null;\\r\\n\\t\\t\\tif (s.activeViews().length == 0){\\r\\n\\t\\t\\t\\theader = (\\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"h4\\\", null, \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"a\\\", {href: s.anchor}, s.title), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"small\\\", {style: style}, s.description)\\r\\n\\t\\t\\t\\t\\t)\\r\\n\\t\\t\\t\\t);\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\telse{\\r\\n\\t\\t\\t\\theader = (\\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"h4\\\", null, \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"span\\\", null, s.title), \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"small\\\", {style: style}, s.description)\\r\\n\\t\\t\\t\\t\\t)\\r\\n\\t\\t\\t\\t);\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(\\\"div\\\", null, \\r\\n\\t\\t\\t\\t\\theader, \\r\\n\\r\\n\\t\\t\\t\\t\\tReact.createElement(SectionLinks, {section: s}), \\r\\n\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"hr\\\", null)\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t);\\r\\n\\t\\t});\\r\\n\\t\\t\\r\\n\\t\\r\\n\\t\\treturn (\\t\\r\\n\\t\\t\\tReact.createElement(\\\"div\\\", null, items)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\n\\r\\nvar Dashboard = React.createClass({displayName: \\\"Dashboard\\\",\\r\\n\\trender: function(){\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(Row, null, \\r\\n\\t\\t\\t\\tReact.createElement(Col, {xs: 6, md: 6}, \\r\\n\\t\\t\\t\\t  React.createElement(\\\"h3\\\", null, \\\"Getting Started\\\"), \\r\\n\\t\\t\\t\\t  React.createElement(\\\"p\\\", null, \\\"You are viewing the Advanced Diagnostics package that provides detailed insight into the configuration and runtime of your application.\\\"), \\r\\n\\r\\n\\t\\t\\t\\t  React.createElement(\\\"ol\\\", null, \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"li\\\", null, \\r\\n\\t\\t\\t\\t\\t  React.createElement(\\\"strong\\\", null, \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"a\\\", {href: \\\"#fubumvc/endpoints\\\"}, \\\" Explore your application\\\")\\r\\n\\t\\t\\t\\t\\t  ), \\r\\n\\t\\t\\t\\t\\t  React.createElement(\\\"p\\\", null, \\\"The endpoint explorer allows you to sort and filter through the routes, endpoints, and chains within your application. You can also drill into the details and visualize the behavior chain.\\\")\\r\\n\\t\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"li\\\", null, \\r\\n\\t\\t\\t\\t\\t  React.createElement(\\\"strong\\\", null, \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"a\\\", {href: \\\"#fubumvc/requests\\\"}, \\\"Explore the request history\\\")\\r\\n\\t\\t\\t\\t\\t  ), \\r\\n\\t\\t\\t\\t\\t  React.createElement(\\\"p\\\", null, \\\"The requests explorer allows you to see the most recent requests that have been recorded within your application. You can drill into the details of each request to visualize the various steps that were taken to issue the response.\\\")\\r\\n\\t\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"li\\\", null, \\r\\n\\t\\t\\t\\t\\t  React.createElement(\\\"strong\\\", null, \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"a\\\", {href: \\\"http://fubuworld.com/fubumvc/\\\"}, \\\"Browse the documentation\\\")\\r\\n\\t\\t\\t\\t\\t  ), \\r\\n\\t\\t\\t\\t\\t  React.createElement(\\\"p\\\", null, \\\"Browse through our topics and read more about the our APIs.\\\")\\r\\n\\t\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"li\\\", null, \\r\\n\\t\\t\\t\\t\\t  React.createElement(\\\"strong\\\", null, \\r\\n\\t\\t\\t\\t\\t\\tReact.createElement(\\\"a\\\", {href: \\\"https://groups.google.com/forum/#!forum/fubumvc-devel\\\"}, \\\"If you're really stuck\\\")\\r\\n\\t\\t\\t\\t\\t  ), \\r\\n\\t\\t\\t\\t\\t  React.createElement(\\\"p\\\", null, \\\"Visit our user group to learn how to get plugged into our vibrant community. You'll get your questions answered in no time.\\\")\\r\\n\\t\\t\\t\\t\\t)\\r\\n\\t\\t\\t\\t  )\\r\\n\\r\\n\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\tReact.createElement(Col, {xs: 6, md: 6}, \\r\\n\\t\\t\\t\\t\\tReact.createElement(AllLinks, null)\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t)\\r\\n\\t\\t\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\nmodule.exports = Dashboard;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/dashboard.jsx\\n ** module id = 278\\n ** module chunks = 0\\n **/\\n//# sourceURL=webpack:///./javascript/dashboard.jsx?\");\n\n/***/ }\n/******/ ]);"
  },
  {
    "path": "src/TestHarnessApp/fubu-diagnostics/structuremap.js",
    "content": "/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/client/public/javascript/\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!*************************************!*\\\n  !*** ./javascript/structuremap.jsx ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = FubuDiagnostics.React;\\r\\nvar Router = __webpack_require__(/*! react-router */ 151);\\r\\n\\r\\n__webpack_require__(/*! ./settings */ 280);\\r\\nvar Summary = __webpack_require__(/*! ./structuremap-summary */ 281);\\r\\nvar WhatDoIHave = __webpack_require__(/*! ./structuremap-whatdoihave */ 279);\\r\\nvar BuildPlanView = __webpack_require__(/*! ./structuremap-buildplan */ 283);\\r\\nvar SearchResults = __webpack_require__(/*! ./structuremap-searchresults */ 284);\\r\\n\\r\\n\\r\\nFubuDiagnostics.addSection({\\r\\n    title: 'StructureMap',\\r\\n    description: 'Insight into the configuration and state of the application container',\\r\\n    key: 'structuremap'\\r\\n})\\r\\n.add({\\r\\n\\ttitle: 'Summary',\\r\\n\\tdescription: 'Assemblies and Namespaces in the Container',\\r\\n\\tkey: 'summary',\\r\\n\\tcomponent: Summary\\r\\n})\\r\\n.add({\\r\\n\\ttitle: 'StructureMap Search Results',\\r\\n\\tdescription: \\\"Interactive version of StructureMap's WhatDoIHave()\\\",\\r\\n\\tkey: 'search-results',\\r\\n\\troute: 'StructureMap:search_Type_Value',\\r\\n\\tcomponent: SearchResults\\r\\n})\\r\\n.add({\\r\\n\\ttitle: 'What do I have?',\\r\\n\\tdescription: \\\"StructureMap's textual WhatDoIHave() diagnostics\\\",\\r\\n\\tkey: 'whatdoihave',\\r\\n\\tcomponent: WhatDoIHave\\r\\n})\\r\\n.add({\\r\\n\\ttitle: 'Build Plan',\\r\\n\\tdescription: 'How StructureMap will build this Instance',\\r\\n\\tkey: 'buildplan',\\r\\n\\troute: 'StructureMap:build_plan_PluginType_Name',\\r\\n\\tcomponent:  BuildPlanView\\r\\n});\\r\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/structuremap.jsx\\n ** module id = 0\\n ** module chunks = 1\\n **/\\n//# sourceURL=webpack:///./javascript/structuremap.jsx?\");\n\n/***/ },\n/* 1 */\n/*!**************************!*\\\n  !*** ./~/react/react.js ***!\n  \\**************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"module.exports = __webpack_require__(/*! ./lib/React */ 2);\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/react.js\\n ** module id = 1\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/react.js?\");\n\n/***/ },\n/* 2 */\n/*!******************************!*\\\n  !*** ./~/react/lib/React.js ***!\n  \\******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule React\\n */\\n\\n\\\"use strict\\\";\\n\\nvar DOMPropertyOperations = __webpack_require__(/*! ./DOMPropertyOperations */ 7);\\nvar EventPluginUtils = __webpack_require__(/*! ./EventPluginUtils */ 13);\\nvar ReactChildren = __webpack_require__(/*! ./ReactChildren */ 16);\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 23);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactContext = __webpack_require__(/*! ./ReactContext */ 20);\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 22);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactElementValidator = __webpack_require__(/*! ./ReactElementValidator */ 31);\\nvar ReactDOM = __webpack_require__(/*! ./ReactDOM */ 45);\\nvar ReactDOMComponent = __webpack_require__(/*! ./ReactDOMComponent */ 46);\\nvar ReactDefaultInjection = __webpack_require__(/*! ./ReactDefaultInjection */ 75);\\nvar ReactInstanceHandles = __webpack_require__(/*! ./ReactInstanceHandles */ 4);\\nvar ReactLegacyElement = __webpack_require__(/*! ./ReactLegacyElement */ 36);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar ReactMultiChild = __webpack_require__(/*! ./ReactMultiChild */ 71);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\nvar ReactPropTypes = __webpack_require__(/*! ./ReactPropTypes */ 120);\\nvar ReactServerRendering = __webpack_require__(/*! ./ReactServerRendering */ 145);\\nvar ReactTextComponent = __webpack_require__(/*! ./ReactTextComponent */ 74);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar deprecated = __webpack_require__(/*! ./deprecated */ 69);\\nvar onlyChild = __webpack_require__(/*! ./onlyChild */ 147);\\n\\nReactDefaultInjection.inject();\\n\\nvar createElement = ReactElement.createElement;\\nvar createFactory = ReactElement.createFactory;\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  createElement = ReactElementValidator.createElement;\\n  createFactory = ReactElementValidator.createFactory;\\n}\\n\\n// TODO: Drop legacy elements once classes no longer export these factories\\ncreateElement = ReactLegacyElement.wrapCreateElement(\\n  createElement\\n);\\ncreateFactory = ReactLegacyElement.wrapCreateFactory(\\n  createFactory\\n);\\n\\nvar render = ReactPerf.measure('React', 'render', ReactMount.render);\\n\\nvar React = {\\n  Children: {\\n    map: ReactChildren.map,\\n    forEach: ReactChildren.forEach,\\n    count: ReactChildren.count,\\n    only: onlyChild\\n  },\\n  DOM: ReactDOM,\\n  PropTypes: ReactPropTypes,\\n  initializeTouchEvents: function(shouldUseTouch) {\\n    EventPluginUtils.useTouchEvents = shouldUseTouch;\\n  },\\n  createClass: ReactCompositeComponent.createClass,\\n  createElement: createElement,\\n  createFactory: createFactory,\\n  constructAndRenderComponent: ReactMount.constructAndRenderComponent,\\n  constructAndRenderComponentByID: ReactMount.constructAndRenderComponentByID,\\n  render: render,\\n  renderToString: ReactServerRendering.renderToString,\\n  renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup,\\n  unmountComponentAtNode: ReactMount.unmountComponentAtNode,\\n  isValidClass: ReactLegacyElement.isValidClass,\\n  isValidElement: ReactElement.isValidElement,\\n  withContext: ReactContext.withContext,\\n\\n  // Hook for JSX spread, don't use this for anything else.\\n  __spread: assign,\\n\\n  // Deprecations (remove for 0.13)\\n  renderComponent: deprecated(\\n    'React',\\n    'renderComponent',\\n    'render',\\n    this,\\n    render\\n  ),\\n  renderComponentToString: deprecated(\\n    'React',\\n    'renderComponentToString',\\n    'renderToString',\\n    this,\\n    ReactServerRendering.renderToString\\n  ),\\n  renderComponentToStaticMarkup: deprecated(\\n    'React',\\n    'renderComponentToStaticMarkup',\\n    'renderToStaticMarkup',\\n    this,\\n    ReactServerRendering.renderToStaticMarkup\\n  ),\\n  isValidComponent: deprecated(\\n    'React',\\n    'isValidComponent',\\n    'isValidElement',\\n    this,\\n    ReactElement.isValidElement\\n  )\\n};\\n\\n// Inject the runtime into a devtools global hook regardless of browser.\\n// Allows for debugging when the hook is injected on the page.\\nif (\\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\\n  typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {\\n  __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({\\n    Component: ReactComponent,\\n    CurrentOwner: ReactCurrentOwner,\\n    DOMComponent: ReactDOMComponent,\\n    DOMPropertyOperations: DOMPropertyOperations,\\n    InstanceHandles: ReactInstanceHandles,\\n    Mount: ReactMount,\\n    MultiChild: ReactMultiChild,\\n    TextComponent: ReactTextComponent\\n  });\\n}\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  var ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n  if (ExecutionEnvironment.canUseDOM && window.top === window.self) {\\n\\n    // If we're in Chrome, look for the devtools marker and provide a download\\n    // link if not installed.\\n    if (navigator.userAgent.indexOf('Chrome') > -1) {\\n      if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\\n        console.debug(\\n          'Download the React DevTools for a better development experience: ' +\\n          'http://fb.me/react-devtools'\\n        );\\n      }\\n    }\\n\\n    var expectedFeatures = [\\n      // shims\\n      Array.isArray,\\n      Array.prototype.every,\\n      Array.prototype.forEach,\\n      Array.prototype.indexOf,\\n      Array.prototype.map,\\n      Date.now,\\n      Function.prototype.bind,\\n      Object.keys,\\n      String.prototype.split,\\n      String.prototype.trim,\\n\\n      // shams\\n      Object.create,\\n      Object.freeze\\n    ];\\n\\n    for (var i = 0; i < expectedFeatures.length; i++) {\\n      if (!expectedFeatures[i]) {\\n        console.error(\\n          'One or more ES5 shim/shams expected by React are not available: ' +\\n          'http://fb.me/react-warning-polyfills'\\n        );\\n        break;\\n      }\\n    }\\n  }\\n}\\n\\n// Version exists only in the open-source version of React, not in Facebook's\\n// internal version.\\nReact.version = '0.12.2';\\n\\nmodule.exports = React;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/React.js\\n ** module id = 2\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/React.js?\");\n\n/***/ },\n/* 3 */\n/*!**********************************************************!*\\\n  !*** (webpack)/~/node-libs-browser/~/process/browser.js ***!\n  \\**********************************************************/\n/***/ function(module, exports) {\n\n\teval(\"// shim for using process in browser\\n\\nvar process = module.exports = {};\\nvar queue = [];\\nvar draining = false;\\nvar currentQueue;\\nvar queueIndex = -1;\\n\\nfunction cleanUpNextTick() {\\n    draining = false;\\n    if (currentQueue.length) {\\n        queue = currentQueue.concat(queue);\\n    } else {\\n        queueIndex = -1;\\n    }\\n    if (queue.length) {\\n        drainQueue();\\n    }\\n}\\n\\nfunction drainQueue() {\\n    if (draining) {\\n        return;\\n    }\\n    var timeout = setTimeout(cleanUpNextTick);\\n    draining = true;\\n\\n    var len = queue.length;\\n    while(len) {\\n        currentQueue = queue;\\n        queue = [];\\n        while (++queueIndex < len) {\\n            currentQueue[queueIndex].run();\\n        }\\n        queueIndex = -1;\\n        len = queue.length;\\n    }\\n    currentQueue = null;\\n    draining = false;\\n    clearTimeout(timeout);\\n}\\n\\nprocess.nextTick = function (fun) {\\n    var args = new Array(arguments.length - 1);\\n    if (arguments.length > 1) {\\n        for (var i = 1; i < arguments.length; i++) {\\n            args[i - 1] = arguments[i];\\n        }\\n    }\\n    queue.push(new Item(fun, args));\\n    if (queue.length === 1 && !draining) {\\n        setTimeout(drainQueue, 0);\\n    }\\n};\\n\\n// v8 likes predictible objects\\nfunction Item(fun, array) {\\n    this.fun = fun;\\n    this.array = array;\\n}\\nItem.prototype.run = function () {\\n    this.fun.apply(null, this.array);\\n};\\nprocess.title = 'browser';\\nprocess.browser = true;\\nprocess.env = {};\\nprocess.argv = [];\\nprocess.version = ''; // empty string to avoid regexp issues\\nprocess.versions = {};\\n\\nfunction noop() {}\\n\\nprocess.on = noop;\\nprocess.addListener = noop;\\nprocess.once = noop;\\nprocess.off = noop;\\nprocess.removeListener = noop;\\nprocess.removeAllListeners = noop;\\nprocess.emit = noop;\\n\\nprocess.binding = function (name) {\\n    throw new Error('process.binding is not supported');\\n};\\n\\n// TODO(shtylman)\\nprocess.cwd = function () { return '/' };\\nprocess.chdir = function (dir) {\\n    throw new Error('process.chdir is not supported');\\n};\\nprocess.umask = function() { return 0; };\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** (webpack)/~/node-libs-browser/~/process/browser.js\\n ** module id = 3\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///(webpack)/~/node-libs-browser/~/process/browser.js?\");\n\n/***/ },\n/* 4 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ReactInstanceHandles.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactInstanceHandles\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactRootIndex = __webpack_require__(/*! ./ReactRootIndex */ 5);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nvar SEPARATOR = '.';\\nvar SEPARATOR_LENGTH = SEPARATOR.length;\\n\\n/**\\n * Maximum depth of traversals before we consider the possibility of a bad ID.\\n */\\nvar MAX_TREE_DEPTH = 100;\\n\\n/**\\n * Creates a DOM ID prefix to use when mounting React components.\\n *\\n * @param {number} index A unique integer\\n * @return {string} React root ID.\\n * @internal\\n */\\nfunction getReactRootIDString(index) {\\n  return SEPARATOR + index.toString(36);\\n}\\n\\n/**\\n * Checks if a character in the supplied ID is a separator or the end.\\n *\\n * @param {string} id A React DOM ID.\\n * @param {number} index Index of the character to check.\\n * @return {boolean} True if the character is a separator or end of the ID.\\n * @private\\n */\\nfunction isBoundary(id, index) {\\n  return id.charAt(index) === SEPARATOR || index === id.length;\\n}\\n\\n/**\\n * Checks if the supplied string is a valid React DOM ID.\\n *\\n * @param {string} id A React DOM ID, maybe.\\n * @return {boolean} True if the string is a valid React DOM ID.\\n * @private\\n */\\nfunction isValidID(id) {\\n  return id === '' || (\\n    id.charAt(0) === SEPARATOR && id.charAt(id.length - 1) !== SEPARATOR\\n  );\\n}\\n\\n/**\\n * Checks if the first ID is an ancestor of or equal to the second ID.\\n *\\n * @param {string} ancestorID\\n * @param {string} descendantID\\n * @return {boolean} True if `ancestorID` is an ancestor of `descendantID`.\\n * @internal\\n */\\nfunction isAncestorIDOf(ancestorID, descendantID) {\\n  return (\\n    descendantID.indexOf(ancestorID) === 0 &&\\n    isBoundary(descendantID, ancestorID.length)\\n  );\\n}\\n\\n/**\\n * Gets the parent ID of the supplied React DOM ID, `id`.\\n *\\n * @param {string} id ID of a component.\\n * @return {string} ID of the parent, or an empty string.\\n * @private\\n */\\nfunction getParentID(id) {\\n  return id ? id.substr(0, id.lastIndexOf(SEPARATOR)) : '';\\n}\\n\\n/**\\n * Gets the next DOM ID on the tree path from the supplied `ancestorID` to the\\n * supplied `destinationID`. If they are equal, the ID is returned.\\n *\\n * @param {string} ancestorID ID of an ancestor node of `destinationID`.\\n * @param {string} destinationID ID of the destination node.\\n * @return {string} Next ID on the path from `ancestorID` to `destinationID`.\\n * @private\\n */\\nfunction getNextDescendantID(ancestorID, destinationID) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    isValidID(ancestorID) && isValidID(destinationID),\\n    'getNextDescendantID(%s, %s): Received an invalid React DOM ID.',\\n    ancestorID,\\n    destinationID\\n  ) : invariant(isValidID(ancestorID) && isValidID(destinationID)));\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    isAncestorIDOf(ancestorID, destinationID),\\n    'getNextDescendantID(...): React has made an invalid assumption about ' +\\n    'the DOM hierarchy. Expected `%s` to be an ancestor of `%s`.',\\n    ancestorID,\\n    destinationID\\n  ) : invariant(isAncestorIDOf(ancestorID, destinationID)));\\n  if (ancestorID === destinationID) {\\n    return ancestorID;\\n  }\\n  // Skip over the ancestor and the immediate separator. Traverse until we hit\\n  // another separator or we reach the end of `destinationID`.\\n  var start = ancestorID.length + SEPARATOR_LENGTH;\\n  for (var i = start; i < destinationID.length; i++) {\\n    if (isBoundary(destinationID, i)) {\\n      break;\\n    }\\n  }\\n  return destinationID.substr(0, i);\\n}\\n\\n/**\\n * Gets the nearest common ancestor ID of two IDs.\\n *\\n * Using this ID scheme, the nearest common ancestor ID is the longest common\\n * prefix of the two IDs that immediately preceded a \\\"marker\\\" in both strings.\\n *\\n * @param {string} oneID\\n * @param {string} twoID\\n * @return {string} Nearest common ancestor ID, or the empty string if none.\\n * @private\\n */\\nfunction getFirstCommonAncestorID(oneID, twoID) {\\n  var minLength = Math.min(oneID.length, twoID.length);\\n  if (minLength === 0) {\\n    return '';\\n  }\\n  var lastCommonMarkerIndex = 0;\\n  // Use `<=` to traverse until the \\\"EOL\\\" of the shorter string.\\n  for (var i = 0; i <= minLength; i++) {\\n    if (isBoundary(oneID, i) && isBoundary(twoID, i)) {\\n      lastCommonMarkerIndex = i;\\n    } else if (oneID.charAt(i) !== twoID.charAt(i)) {\\n      break;\\n    }\\n  }\\n  var longestCommonID = oneID.substr(0, lastCommonMarkerIndex);\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    isValidID(longestCommonID),\\n    'getFirstCommonAncestorID(%s, %s): Expected a valid React DOM ID: %s',\\n    oneID,\\n    twoID,\\n    longestCommonID\\n  ) : invariant(isValidID(longestCommonID)));\\n  return longestCommonID;\\n}\\n\\n/**\\n * Traverses the parent path between two IDs (either up or down). The IDs must\\n * not be the same, and there must exist a parent path between them. If the\\n * callback returns `false`, traversal is stopped.\\n *\\n * @param {?string} start ID at which to start traversal.\\n * @param {?string} stop ID at which to end traversal.\\n * @param {function} cb Callback to invoke each ID with.\\n * @param {?boolean} skipFirst Whether or not to skip the first node.\\n * @param {?boolean} skipLast Whether or not to skip the last node.\\n * @private\\n */\\nfunction traverseParentPath(start, stop, cb, arg, skipFirst, skipLast) {\\n  start = start || '';\\n  stop = stop || '';\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    start !== stop,\\n    'traverseParentPath(...): Cannot traverse from and to the same ID, `%s`.',\\n    start\\n  ) : invariant(start !== stop));\\n  var traverseUp = isAncestorIDOf(stop, start);\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    traverseUp || isAncestorIDOf(start, stop),\\n    'traverseParentPath(%s, %s, ...): Cannot traverse from two IDs that do ' +\\n    'not have a parent path.',\\n    start,\\n    stop\\n  ) : invariant(traverseUp || isAncestorIDOf(start, stop)));\\n  // Traverse from `start` to `stop` one depth at a time.\\n  var depth = 0;\\n  var traverse = traverseUp ? getParentID : getNextDescendantID;\\n  for (var id = start; /* until break */; id = traverse(id, stop)) {\\n    var ret;\\n    if ((!skipFirst || id !== start) && (!skipLast || id !== stop)) {\\n      ret = cb(id, traverseUp, arg);\\n    }\\n    if (ret === false || id === stop) {\\n      // Only break //after// visiting `stop`.\\n      break;\\n    }\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      depth++ < MAX_TREE_DEPTH,\\n      'traverseParentPath(%s, %s, ...): Detected an infinite loop while ' +\\n      'traversing the React DOM ID tree. This may be due to malformed IDs: %s',\\n      start, stop\\n    ) : invariant(depth++ < MAX_TREE_DEPTH));\\n  }\\n}\\n\\n/**\\n * Manages the IDs assigned to DOM representations of React components. This\\n * uses a specific scheme in order to traverse the DOM efficiently (e.g. in\\n * order to simulate events).\\n *\\n * @internal\\n */\\nvar ReactInstanceHandles = {\\n\\n  /**\\n   * Constructs a React root ID\\n   * @return {string} A React root ID.\\n   */\\n  createReactRootID: function() {\\n    return getReactRootIDString(ReactRootIndex.createReactRootIndex());\\n  },\\n\\n  /**\\n   * Constructs a React ID by joining a root ID with a name.\\n   *\\n   * @param {string} rootID Root ID of a parent component.\\n   * @param {string} name A component's name (as flattened children).\\n   * @return {string} A React ID.\\n   * @internal\\n   */\\n  createReactID: function(rootID, name) {\\n    return rootID + name;\\n  },\\n\\n  /**\\n   * Gets the DOM ID of the React component that is the root of the tree that\\n   * contains the React component with the supplied DOM ID.\\n   *\\n   * @param {string} id DOM ID of a React component.\\n   * @return {?string} DOM ID of the React component that is the root.\\n   * @internal\\n   */\\n  getReactRootIDFromNodeID: function(id) {\\n    if (id && id.charAt(0) === SEPARATOR && id.length > 1) {\\n      var index = id.indexOf(SEPARATOR, 1);\\n      return index > -1 ? id.substr(0, index) : id;\\n    }\\n    return null;\\n  },\\n\\n  /**\\n   * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that\\n   * should would receive a `mouseEnter` or `mouseLeave` event.\\n   *\\n   * NOTE: Does not invoke the callback on the nearest common ancestor because\\n   * nothing \\\"entered\\\" or \\\"left\\\" that element.\\n   *\\n   * @param {string} leaveID ID being left.\\n   * @param {string} enterID ID being entered.\\n   * @param {function} cb Callback to invoke on each entered/left ID.\\n   * @param {*} upArg Argument to invoke the callback with on left IDs.\\n   * @param {*} downArg Argument to invoke the callback with on entered IDs.\\n   * @internal\\n   */\\n  traverseEnterLeave: function(leaveID, enterID, cb, upArg, downArg) {\\n    var ancestorID = getFirstCommonAncestorID(leaveID, enterID);\\n    if (ancestorID !== leaveID) {\\n      traverseParentPath(leaveID, ancestorID, cb, upArg, false, true);\\n    }\\n    if (ancestorID !== enterID) {\\n      traverseParentPath(ancestorID, enterID, cb, downArg, true, false);\\n    }\\n  },\\n\\n  /**\\n   * Simulates the traversal of a two-phase, capture/bubble event dispatch.\\n   *\\n   * NOTE: This traversal happens on IDs without touching the DOM.\\n   *\\n   * @param {string} targetID ID of the target node.\\n   * @param {function} cb Callback to invoke.\\n   * @param {*} arg Argument to invoke the callback with.\\n   * @internal\\n   */\\n  traverseTwoPhase: function(targetID, cb, arg) {\\n    if (targetID) {\\n      traverseParentPath('', targetID, cb, arg, true, false);\\n      traverseParentPath(targetID, '', cb, arg, false, true);\\n    }\\n  },\\n\\n  /**\\n   * Traverse a node ID, calling the supplied `cb` for each ancestor ID. For\\n   * example, passing `.0.$row-0.1` would result in `cb` getting called\\n   * with `.0`, `.0.$row-0`, and `.0.$row-0.1`.\\n   *\\n   * NOTE: This traversal happens on IDs without touching the DOM.\\n   *\\n   * @param {string} targetID ID of the target node.\\n   * @param {function} cb Callback to invoke.\\n   * @param {*} arg Argument to invoke the callback with.\\n   * @internal\\n   */\\n  traverseAncestors: function(targetID, cb, arg) {\\n    traverseParentPath('', targetID, cb, arg, true, false);\\n  },\\n\\n  /**\\n   * Exposed for unit testing.\\n   * @private\\n   */\\n  _getFirstCommonAncestorID: getFirstCommonAncestorID,\\n\\n  /**\\n   * Exposed for unit testing.\\n   * @private\\n   */\\n  _getNextDescendantID: getNextDescendantID,\\n\\n  isAncestorIDOf: isAncestorIDOf,\\n\\n  SEPARATOR: SEPARATOR\\n\\n};\\n\\nmodule.exports = ReactInstanceHandles;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactInstanceHandles.js\\n ** module id = 4\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactInstanceHandles.js?\");\n\n/***/ },\n/* 5 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactRootIndex.js ***!\n  \\***************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactRootIndex\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactRootIndexInjection = {\\n  /**\\n   * @param {function} _createReactRootIndex\\n   */\\n  injectCreateReactRootIndex: function(_createReactRootIndex) {\\n    ReactRootIndex.createReactRootIndex = _createReactRootIndex;\\n  }\\n};\\n\\nvar ReactRootIndex = {\\n  createReactRootIndex: null,\\n  injection: ReactRootIndexInjection\\n};\\n\\nmodule.exports = ReactRootIndex;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactRootIndex.js\\n ** module id = 5\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactRootIndex.js?\");\n\n/***/ },\n/* 6 */\n/*!**********************************!*\\\n  !*** ./~/react/lib/invariant.js ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule invariant\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Use invariant() to assert state which your program assumes to be true.\\n *\\n * Provide sprintf-style format (only %s is supported) and arguments\\n * to provide information about what broke and what you were\\n * expecting.\\n *\\n * The invariant message will be stripped in production, but the invariant\\n * will remain to ensure logic does not differ in production.\\n */\\n\\nvar invariant = function(condition, format, a, b, c, d, e, f) {\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    if (format === undefined) {\\n      throw new Error('invariant requires an error message argument');\\n    }\\n  }\\n\\n  if (!condition) {\\n    var error;\\n    if (format === undefined) {\\n      error = new Error(\\n        'Minified exception occurred; use the non-minified dev environment ' +\\n        'for the full error message and additional helpful warnings.'\\n      );\\n    } else {\\n      var args = [a, b, c, d, e, f];\\n      var argIndex = 0;\\n      error = new Error(\\n        'Invariant Violation: ' +\\n        format.replace(/%s/g, function() { return args[argIndex++]; })\\n      );\\n    }\\n\\n    error.framesToPop = 1; // we don't care about invariant's own frame\\n    throw error;\\n  }\\n};\\n\\nmodule.exports = invariant;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/invariant.js\\n ** module id = 6\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/invariant.js?\");\n\n/***/ },\n/* 7 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/DOMPropertyOperations.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule DOMPropertyOperations\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 8);\\n\\nvar escapeTextForBrowser = __webpack_require__(/*! ./escapeTextForBrowser */ 9);\\nvar memoizeStringOnly = __webpack_require__(/*! ./memoizeStringOnly */ 10);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nfunction shouldIgnoreValue(name, value) {\\n  return value == null ||\\n    (DOMProperty.hasBooleanValue[name] && !value) ||\\n    (DOMProperty.hasNumericValue[name] && isNaN(value)) ||\\n    (DOMProperty.hasPositiveNumericValue[name] && (value < 1)) ||\\n    (DOMProperty.hasOverloadedBooleanValue[name] && value === false);\\n}\\n\\nvar processAttributeNameAndPrefix = memoizeStringOnly(function(name) {\\n  return escapeTextForBrowser(name) + '=\\\"';\\n});\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  var reactProps = {\\n    children: true,\\n    dangerouslySetInnerHTML: true,\\n    key: true,\\n    ref: true\\n  };\\n  var warnedProperties = {};\\n\\n  var warnUnknownProperty = function(name) {\\n    if (reactProps.hasOwnProperty(name) && reactProps[name] ||\\n        warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {\\n      return;\\n    }\\n\\n    warnedProperties[name] = true;\\n    var lowerCasedName = name.toLowerCase();\\n\\n    // data-* attributes should be lowercase; suggest the lowercase version\\n    var standardName = (\\n      DOMProperty.isCustomAttribute(lowerCasedName) ?\\n        lowerCasedName :\\n      DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ?\\n        DOMProperty.getPossibleStandardName[lowerCasedName] :\\n        null\\n    );\\n\\n    // For now, only warn when we have a suggested correction. This prevents\\n    // logging too much when using transferPropsTo.\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      standardName == null,\\n      'Unknown DOM property ' + name + '. Did you mean ' + standardName + '?'\\n    ) : null);\\n\\n  };\\n}\\n\\n/**\\n * Operations for dealing with DOM properties.\\n */\\nvar DOMPropertyOperations = {\\n\\n  /**\\n   * Creates markup for the ID property.\\n   *\\n   * @param {string} id Unescaped ID.\\n   * @return {string} Markup string.\\n   */\\n  createMarkupForID: function(id) {\\n    return processAttributeNameAndPrefix(DOMProperty.ID_ATTRIBUTE_NAME) +\\n      escapeTextForBrowser(id) + '\\\"';\\n  },\\n\\n  /**\\n   * Creates markup for a property.\\n   *\\n   * @param {string} name\\n   * @param {*} value\\n   * @return {?string} Markup string, or null if the property was invalid.\\n   */\\n  createMarkupForProperty: function(name, value) {\\n    if (DOMProperty.isStandardName.hasOwnProperty(name) &&\\n        DOMProperty.isStandardName[name]) {\\n      if (shouldIgnoreValue(name, value)) {\\n        return '';\\n      }\\n      var attributeName = DOMProperty.getAttributeName[name];\\n      if (DOMProperty.hasBooleanValue[name] ||\\n          (DOMProperty.hasOverloadedBooleanValue[name] && value === true)) {\\n        return escapeTextForBrowser(attributeName);\\n      }\\n      return processAttributeNameAndPrefix(attributeName) +\\n        escapeTextForBrowser(value) + '\\\"';\\n    } else if (DOMProperty.isCustomAttribute(name)) {\\n      if (value == null) {\\n        return '';\\n      }\\n      return processAttributeNameAndPrefix(name) +\\n        escapeTextForBrowser(value) + '\\\"';\\n    } else if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      warnUnknownProperty(name);\\n    }\\n    return null;\\n  },\\n\\n  /**\\n   * Sets the value for a property on a node.\\n   *\\n   * @param {DOMElement} node\\n   * @param {string} name\\n   * @param {*} value\\n   */\\n  setValueForProperty: function(node, name, value) {\\n    if (DOMProperty.isStandardName.hasOwnProperty(name) &&\\n        DOMProperty.isStandardName[name]) {\\n      var mutationMethod = DOMProperty.getMutationMethod[name];\\n      if (mutationMethod) {\\n        mutationMethod(node, value);\\n      } else if (shouldIgnoreValue(name, value)) {\\n        this.deleteValueForProperty(node, name);\\n      } else if (DOMProperty.mustUseAttribute[name]) {\\n        // `setAttribute` with objects becomes only `[object]` in IE8/9,\\n        // ('' + value) makes it output the correct toString()-value.\\n        node.setAttribute(DOMProperty.getAttributeName[name], '' + value);\\n      } else {\\n        var propName = DOMProperty.getPropertyName[name];\\n        // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the\\n        // property type before comparing; only `value` does and is string.\\n        if (!DOMProperty.hasSideEffects[name] ||\\n            ('' + node[propName]) !== ('' + value)) {\\n          // Contrary to `setAttribute`, object properties are properly\\n          // `toString`ed by IE8/9.\\n          node[propName] = value;\\n        }\\n      }\\n    } else if (DOMProperty.isCustomAttribute(name)) {\\n      if (value == null) {\\n        node.removeAttribute(name);\\n      } else {\\n        node.setAttribute(name, '' + value);\\n      }\\n    } else if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      warnUnknownProperty(name);\\n    }\\n  },\\n\\n  /**\\n   * Deletes the value for a property on a node.\\n   *\\n   * @param {DOMElement} node\\n   * @param {string} name\\n   */\\n  deleteValueForProperty: function(node, name) {\\n    if (DOMProperty.isStandardName.hasOwnProperty(name) &&\\n        DOMProperty.isStandardName[name]) {\\n      var mutationMethod = DOMProperty.getMutationMethod[name];\\n      if (mutationMethod) {\\n        mutationMethod(node, undefined);\\n      } else if (DOMProperty.mustUseAttribute[name]) {\\n        node.removeAttribute(DOMProperty.getAttributeName[name]);\\n      } else {\\n        var propName = DOMProperty.getPropertyName[name];\\n        var defaultValue = DOMProperty.getDefaultValueForProperty(\\n          node.nodeName,\\n          propName\\n        );\\n        if (!DOMProperty.hasSideEffects[name] ||\\n            ('' + node[propName]) !== defaultValue) {\\n          node[propName] = defaultValue;\\n        }\\n      }\\n    } else if (DOMProperty.isCustomAttribute(name)) {\\n      node.removeAttribute(name);\\n    } else if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      warnUnknownProperty(name);\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = DOMPropertyOperations;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/DOMPropertyOperations.js\\n ** module id = 7\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/DOMPropertyOperations.js?\");\n\n/***/ },\n/* 8 */\n/*!************************************!*\\\n  !*** ./~/react/lib/DOMProperty.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule DOMProperty\\n * @typechecks static-only\\n */\\n\\n/*jslint bitwise: true */\\n\\n\\\"use strict\\\";\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nfunction checkMask(value, bitmask) {\\n  return (value & bitmask) === bitmask;\\n}\\n\\nvar DOMPropertyInjection = {\\n  /**\\n   * Mapping from normalized, camelcased property names to a configuration that\\n   * specifies how the associated DOM property should be accessed or rendered.\\n   */\\n  MUST_USE_ATTRIBUTE: 0x1,\\n  MUST_USE_PROPERTY: 0x2,\\n  HAS_SIDE_EFFECTS: 0x4,\\n  HAS_BOOLEAN_VALUE: 0x8,\\n  HAS_NUMERIC_VALUE: 0x10,\\n  HAS_POSITIVE_NUMERIC_VALUE: 0x20 | 0x10,\\n  HAS_OVERLOADED_BOOLEAN_VALUE: 0x40,\\n\\n  /**\\n   * Inject some specialized knowledge about the DOM. This takes a config object\\n   * with the following properties:\\n   *\\n   * isCustomAttribute: function that given an attribute name will return true\\n   * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*\\n   * attributes where it's impossible to enumerate all of the possible\\n   * attribute names,\\n   *\\n   * Properties: object mapping DOM property name to one of the\\n   * DOMPropertyInjection constants or null. If your attribute isn't in here,\\n   * it won't get written to the DOM.\\n   *\\n   * DOMAttributeNames: object mapping React attribute name to the DOM\\n   * attribute name. Attribute names not specified use the **lowercase**\\n   * normalized name.\\n   *\\n   * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.\\n   * Property names not specified use the normalized name.\\n   *\\n   * DOMMutationMethods: Properties that require special mutation methods. If\\n   * `value` is undefined, the mutation method should unset the property.\\n   *\\n   * @param {object} domPropertyConfig the config as described above.\\n   */\\n  injectDOMPropertyConfig: function(domPropertyConfig) {\\n    var Properties = domPropertyConfig.Properties || {};\\n    var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};\\n    var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};\\n    var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};\\n\\n    if (domPropertyConfig.isCustomAttribute) {\\n      DOMProperty._isCustomAttributeFunctions.push(\\n        domPropertyConfig.isCustomAttribute\\n      );\\n    }\\n\\n    for (var propName in Properties) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        !DOMProperty.isStandardName.hasOwnProperty(propName),\\n        'injectDOMPropertyConfig(...): You\\\\'re trying to inject DOM property ' +\\n        '\\\\'%s\\\\' which has already been injected. You may be accidentally ' +\\n        'injecting the same DOM property config twice, or you may be ' +\\n        'injecting two configs that have conflicting property names.',\\n        propName\\n      ) : invariant(!DOMProperty.isStandardName.hasOwnProperty(propName)));\\n\\n      DOMProperty.isStandardName[propName] = true;\\n\\n      var lowerCased = propName.toLowerCase();\\n      DOMProperty.getPossibleStandardName[lowerCased] = propName;\\n\\n      if (DOMAttributeNames.hasOwnProperty(propName)) {\\n        var attributeName = DOMAttributeNames[propName];\\n        DOMProperty.getPossibleStandardName[attributeName] = propName;\\n        DOMProperty.getAttributeName[propName] = attributeName;\\n      } else {\\n        DOMProperty.getAttributeName[propName] = lowerCased;\\n      }\\n\\n      DOMProperty.getPropertyName[propName] =\\n        DOMPropertyNames.hasOwnProperty(propName) ?\\n          DOMPropertyNames[propName] :\\n          propName;\\n\\n      if (DOMMutationMethods.hasOwnProperty(propName)) {\\n        DOMProperty.getMutationMethod[propName] = DOMMutationMethods[propName];\\n      } else {\\n        DOMProperty.getMutationMethod[propName] = null;\\n      }\\n\\n      var propConfig = Properties[propName];\\n      DOMProperty.mustUseAttribute[propName] =\\n        checkMask(propConfig, DOMPropertyInjection.MUST_USE_ATTRIBUTE);\\n      DOMProperty.mustUseProperty[propName] =\\n        checkMask(propConfig, DOMPropertyInjection.MUST_USE_PROPERTY);\\n      DOMProperty.hasSideEffects[propName] =\\n        checkMask(propConfig, DOMPropertyInjection.HAS_SIDE_EFFECTS);\\n      DOMProperty.hasBooleanValue[propName] =\\n        checkMask(propConfig, DOMPropertyInjection.HAS_BOOLEAN_VALUE);\\n      DOMProperty.hasNumericValue[propName] =\\n        checkMask(propConfig, DOMPropertyInjection.HAS_NUMERIC_VALUE);\\n      DOMProperty.hasPositiveNumericValue[propName] =\\n        checkMask(propConfig, DOMPropertyInjection.HAS_POSITIVE_NUMERIC_VALUE);\\n      DOMProperty.hasOverloadedBooleanValue[propName] =\\n        checkMask(propConfig, DOMPropertyInjection.HAS_OVERLOADED_BOOLEAN_VALUE);\\n\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        !DOMProperty.mustUseAttribute[propName] ||\\n          !DOMProperty.mustUseProperty[propName],\\n        'DOMProperty: Cannot require using both attribute and property: %s',\\n        propName\\n      ) : invariant(!DOMProperty.mustUseAttribute[propName] ||\\n        !DOMProperty.mustUseProperty[propName]));\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        DOMProperty.mustUseProperty[propName] ||\\n          !DOMProperty.hasSideEffects[propName],\\n        'DOMProperty: Properties that have side effects must use property: %s',\\n        propName\\n      ) : invariant(DOMProperty.mustUseProperty[propName] ||\\n        !DOMProperty.hasSideEffects[propName]));\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        !!DOMProperty.hasBooleanValue[propName] +\\n          !!DOMProperty.hasNumericValue[propName] +\\n          !!DOMProperty.hasOverloadedBooleanValue[propName] <= 1,\\n        'DOMProperty: Value can be one of boolean, overloaded boolean, or ' +\\n        'numeric value, but not a combination: %s',\\n        propName\\n      ) : invariant(!!DOMProperty.hasBooleanValue[propName] +\\n        !!DOMProperty.hasNumericValue[propName] +\\n        !!DOMProperty.hasOverloadedBooleanValue[propName] <= 1));\\n    }\\n  }\\n};\\nvar defaultValueCache = {};\\n\\n/**\\n * DOMProperty exports lookup objects that can be used like functions:\\n *\\n *   > DOMProperty.isValid['id']\\n *   true\\n *   > DOMProperty.isValid['foobar']\\n *   undefined\\n *\\n * Although this may be confusing, it performs better in general.\\n *\\n * @see http://jsperf.com/key-exists\\n * @see http://jsperf.com/key-missing\\n */\\nvar DOMProperty = {\\n\\n  ID_ATTRIBUTE_NAME: 'data-reactid',\\n\\n  /**\\n   * Checks whether a property name is a standard property.\\n   * @type {Object}\\n   */\\n  isStandardName: {},\\n\\n  /**\\n   * Mapping from lowercase property names to the properly cased version, used\\n   * to warn in the case of missing properties.\\n   * @type {Object}\\n   */\\n  getPossibleStandardName: {},\\n\\n  /**\\n   * Mapping from normalized names to attribute names that differ. Attribute\\n   * names are used when rendering markup or with `*Attribute()`.\\n   * @type {Object}\\n   */\\n  getAttributeName: {},\\n\\n  /**\\n   * Mapping from normalized names to properties on DOM node instances.\\n   * (This includes properties that mutate due to external factors.)\\n   * @type {Object}\\n   */\\n  getPropertyName: {},\\n\\n  /**\\n   * Mapping from normalized names to mutation methods. This will only exist if\\n   * mutation cannot be set simply by the property or `setAttribute()`.\\n   * @type {Object}\\n   */\\n  getMutationMethod: {},\\n\\n  /**\\n   * Whether the property must be accessed and mutated as an object property.\\n   * @type {Object}\\n   */\\n  mustUseAttribute: {},\\n\\n  /**\\n   * Whether the property must be accessed and mutated using `*Attribute()`.\\n   * (This includes anything that fails `<propName> in <element>`.)\\n   * @type {Object}\\n   */\\n  mustUseProperty: {},\\n\\n  /**\\n   * Whether or not setting a value causes side effects such as triggering\\n   * resources to be loaded or text selection changes. We must ensure that\\n   * the value is only set if it has changed.\\n   * @type {Object}\\n   */\\n  hasSideEffects: {},\\n\\n  /**\\n   * Whether the property should be removed when set to a falsey value.\\n   * @type {Object}\\n   */\\n  hasBooleanValue: {},\\n\\n  /**\\n   * Whether the property must be numeric or parse as a\\n   * numeric and should be removed when set to a falsey value.\\n   * @type {Object}\\n   */\\n  hasNumericValue: {},\\n\\n  /**\\n   * Whether the property must be positive numeric or parse as a positive\\n   * numeric and should be removed when set to a falsey value.\\n   * @type {Object}\\n   */\\n  hasPositiveNumericValue: {},\\n\\n  /**\\n   * Whether the property can be used as a flag as well as with a value. Removed\\n   * when strictly equal to false; present without a value when strictly equal\\n   * to true; present with a value otherwise.\\n   * @type {Object}\\n   */\\n  hasOverloadedBooleanValue: {},\\n\\n  /**\\n   * All of the isCustomAttribute() functions that have been injected.\\n   */\\n  _isCustomAttributeFunctions: [],\\n\\n  /**\\n   * Checks whether a property name is a custom attribute.\\n   * @method\\n   */\\n  isCustomAttribute: function(attributeName) {\\n    for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {\\n      var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];\\n      if (isCustomAttributeFn(attributeName)) {\\n        return true;\\n      }\\n    }\\n    return false;\\n  },\\n\\n  /**\\n   * Returns the default property value for a DOM property (i.e., not an\\n   * attribute). Most default values are '' or false, but not all. Worse yet,\\n   * some (in particular, `type`) vary depending on the type of element.\\n   *\\n   * TODO: Is it better to grab all the possible properties when creating an\\n   * element to avoid having to create the same element twice?\\n   */\\n  getDefaultValueForProperty: function(nodeName, prop) {\\n    var nodeDefaults = defaultValueCache[nodeName];\\n    var testElement;\\n    if (!nodeDefaults) {\\n      defaultValueCache[nodeName] = nodeDefaults = {};\\n    }\\n    if (!(prop in nodeDefaults)) {\\n      testElement = document.createElement(nodeName);\\n      nodeDefaults[prop] = testElement[prop];\\n    }\\n    return nodeDefaults[prop];\\n  },\\n\\n  injection: DOMPropertyInjection\\n};\\n\\nmodule.exports = DOMProperty;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/DOMProperty.js\\n ** module id = 8\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/DOMProperty.js?\");\n\n/***/ },\n/* 9 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/escapeTextForBrowser.js ***!\n  \\*********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule escapeTextForBrowser\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ESCAPE_LOOKUP = {\\n  \\\"&\\\": \\\"&amp;\\\",\\n  \\\">\\\": \\\"&gt;\\\",\\n  \\\"<\\\": \\\"&lt;\\\",\\n  \\\"\\\\\\\"\\\": \\\"&quot;\\\",\\n  \\\"'\\\": \\\"&#x27;\\\"\\n};\\n\\nvar ESCAPE_REGEX = /[&><\\\"']/g;\\n\\nfunction escaper(match) {\\n  return ESCAPE_LOOKUP[match];\\n}\\n\\n/**\\n * Escapes text to prevent scripting attacks.\\n *\\n * @param {*} text Text value to escape.\\n * @return {string} An escaped string.\\n */\\nfunction escapeTextForBrowser(text) {\\n  return ('' + text).replace(ESCAPE_REGEX, escaper);\\n}\\n\\nmodule.exports = escapeTextForBrowser;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/escapeTextForBrowser.js\\n ** module id = 9\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/escapeTextForBrowser.js?\");\n\n/***/ },\n/* 10 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/memoizeStringOnly.js ***!\n  \\******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule memoizeStringOnly\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Memoizes the return value of a function that accepts one string argument.\\n *\\n * @param {function} callback\\n * @return {function}\\n */\\nfunction memoizeStringOnly(callback) {\\n  var cache = {};\\n  return function(string) {\\n    if (cache.hasOwnProperty(string)) {\\n      return cache[string];\\n    } else {\\n      return cache[string] = callback.call(this, string);\\n    }\\n  };\\n}\\n\\nmodule.exports = memoizeStringOnly;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/memoizeStringOnly.js\\n ** module id = 10\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/memoizeStringOnly.js?\");\n\n/***/ },\n/* 11 */\n/*!********************************!*\\\n  !*** ./~/react/lib/warning.js ***!\n  \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule warning\\n */\\n\\n\\\"use strict\\\";\\n\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\n\\n/**\\n * Similar to invariant but only logs a warning if the condition is not met.\\n * This can be used to log issues in development environments in critical\\n * paths. Removing the logging code for production environments will keep the\\n * same logic and follow the same code paths.\\n */\\n\\nvar warning = emptyFunction;\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  warning = function(condition, format ) {for (var args=[],$__0=2,$__1=arguments.length;$__0<$__1;$__0++) args.push(arguments[$__0]);\\n    if (format === undefined) {\\n      throw new Error(\\n        '`warning(condition, format, ...args)` requires a warning ' +\\n        'message argument'\\n      );\\n    }\\n\\n    if (!condition) {\\n      var argIndex = 0;\\n      console.warn('Warning: ' + format.replace(/%s/g, function()  {return args[argIndex++];}));\\n    }\\n  };\\n}\\n\\nmodule.exports = warning;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/warning.js\\n ** module id = 11\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/warning.js?\");\n\n/***/ },\n/* 12 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/emptyFunction.js ***!\n  \\**************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule emptyFunction\\n */\\n\\nfunction makeEmptyFunction(arg) {\\n  return function() {\\n    return arg;\\n  };\\n}\\n\\n/**\\n * This function accepts and discards inputs; it has no side effects. This is\\n * primarily useful idiomatically for overridable function endpoints which\\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\\n */\\nfunction emptyFunction() {}\\n\\nemptyFunction.thatReturns = makeEmptyFunction;\\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\\nemptyFunction.thatReturnsThis = function() { return this; };\\nemptyFunction.thatReturnsArgument = function(arg) { return arg; };\\n\\nmodule.exports = emptyFunction;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/emptyFunction.js\\n ** module id = 12\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/emptyFunction.js?\");\n\n/***/ },\n/* 13 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/EventPluginUtils.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule EventPluginUtils\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Injected dependencies:\\n */\\n\\n/**\\n * - `Mount`: [required] Module that can convert between React dom IDs and\\n *   actual node references.\\n */\\nvar injection = {\\n  Mount: null,\\n  injectMount: function(InjectedMount) {\\n    injection.Mount = InjectedMount;\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        InjectedMount && InjectedMount.getNode,\\n        'EventPluginUtils.injection.injectMount(...): Injected Mount module ' +\\n        'is missing getNode.'\\n      ) : invariant(InjectedMount && InjectedMount.getNode));\\n    }\\n  }\\n};\\n\\nvar topLevelTypes = EventConstants.topLevelTypes;\\n\\nfunction isEndish(topLevelType) {\\n  return topLevelType === topLevelTypes.topMouseUp ||\\n         topLevelType === topLevelTypes.topTouchEnd ||\\n         topLevelType === topLevelTypes.topTouchCancel;\\n}\\n\\nfunction isMoveish(topLevelType) {\\n  return topLevelType === topLevelTypes.topMouseMove ||\\n         topLevelType === topLevelTypes.topTouchMove;\\n}\\nfunction isStartish(topLevelType) {\\n  return topLevelType === topLevelTypes.topMouseDown ||\\n         topLevelType === topLevelTypes.topTouchStart;\\n}\\n\\n\\nvar validateEventDispatches;\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  validateEventDispatches = function(event) {\\n    var dispatchListeners = event._dispatchListeners;\\n    var dispatchIDs = event._dispatchIDs;\\n\\n    var listenersIsArr = Array.isArray(dispatchListeners);\\n    var idsIsArr = Array.isArray(dispatchIDs);\\n    var IDsLen = idsIsArr ? dispatchIDs.length : dispatchIDs ? 1 : 0;\\n    var listenersLen = listenersIsArr ?\\n      dispatchListeners.length :\\n      dispatchListeners ? 1 : 0;\\n\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      idsIsArr === listenersIsArr && IDsLen === listenersLen,\\n      'EventPluginUtils: Invalid `event`.'\\n    ) : invariant(idsIsArr === listenersIsArr && IDsLen === listenersLen));\\n  };\\n}\\n\\n/**\\n * Invokes `cb(event, listener, id)`. Avoids using call if no scope is\\n * provided. The `(listener,id)` pair effectively forms the \\\"dispatch\\\" but are\\n * kept separate to conserve memory.\\n */\\nfunction forEachEventDispatch(event, cb) {\\n  var dispatchListeners = event._dispatchListeners;\\n  var dispatchIDs = event._dispatchIDs;\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    validateEventDispatches(event);\\n  }\\n  if (Array.isArray(dispatchListeners)) {\\n    for (var i = 0; i < dispatchListeners.length; i++) {\\n      if (event.isPropagationStopped()) {\\n        break;\\n      }\\n      // Listeners and IDs are two parallel arrays that are always in sync.\\n      cb(event, dispatchListeners[i], dispatchIDs[i]);\\n    }\\n  } else if (dispatchListeners) {\\n    cb(event, dispatchListeners, dispatchIDs);\\n  }\\n}\\n\\n/**\\n * Default implementation of PluginModule.executeDispatch().\\n * @param {SyntheticEvent} SyntheticEvent to handle\\n * @param {function} Application-level callback\\n * @param {string} domID DOM id to pass to the callback.\\n */\\nfunction executeDispatch(event, listener, domID) {\\n  event.currentTarget = injection.Mount.getNode(domID);\\n  var returnValue = listener(event, domID);\\n  event.currentTarget = null;\\n  return returnValue;\\n}\\n\\n/**\\n * Standard/simple iteration through an event's collected dispatches.\\n */\\nfunction executeDispatchesInOrder(event, executeDispatch) {\\n  forEachEventDispatch(event, executeDispatch);\\n  event._dispatchListeners = null;\\n  event._dispatchIDs = null;\\n}\\n\\n/**\\n * Standard/simple iteration through an event's collected dispatches, but stops\\n * at the first dispatch execution returning true, and returns that id.\\n *\\n * @return id of the first dispatch execution who's listener returns true, or\\n * null if no listener returned true.\\n */\\nfunction executeDispatchesInOrderStopAtTrueImpl(event) {\\n  var dispatchListeners = event._dispatchListeners;\\n  var dispatchIDs = event._dispatchIDs;\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    validateEventDispatches(event);\\n  }\\n  if (Array.isArray(dispatchListeners)) {\\n    for (var i = 0; i < dispatchListeners.length; i++) {\\n      if (event.isPropagationStopped()) {\\n        break;\\n      }\\n      // Listeners and IDs are two parallel arrays that are always in sync.\\n      if (dispatchListeners[i](event, dispatchIDs[i])) {\\n        return dispatchIDs[i];\\n      }\\n    }\\n  } else if (dispatchListeners) {\\n    if (dispatchListeners(event, dispatchIDs)) {\\n      return dispatchIDs;\\n    }\\n  }\\n  return null;\\n}\\n\\n/**\\n * @see executeDispatchesInOrderStopAtTrueImpl\\n */\\nfunction executeDispatchesInOrderStopAtTrue(event) {\\n  var ret = executeDispatchesInOrderStopAtTrueImpl(event);\\n  event._dispatchIDs = null;\\n  event._dispatchListeners = null;\\n  return ret;\\n}\\n\\n/**\\n * Execution of a \\\"direct\\\" dispatch - there must be at most one dispatch\\n * accumulated on the event or it is considered an error. It doesn't really make\\n * sense for an event with multiple dispatches (bubbled) to keep track of the\\n * return values at each dispatch execution, but it does tend to make sense when\\n * dealing with \\\"direct\\\" dispatches.\\n *\\n * @return The return value of executing the single dispatch.\\n */\\nfunction executeDirectDispatch(event) {\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    validateEventDispatches(event);\\n  }\\n  var dispatchListener = event._dispatchListeners;\\n  var dispatchID = event._dispatchIDs;\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    !Array.isArray(dispatchListener),\\n    'executeDirectDispatch(...): Invalid `event`.'\\n  ) : invariant(!Array.isArray(dispatchListener)));\\n  var res = dispatchListener ?\\n    dispatchListener(event, dispatchID) :\\n    null;\\n  event._dispatchListeners = null;\\n  event._dispatchIDs = null;\\n  return res;\\n}\\n\\n/**\\n * @param {SyntheticEvent} event\\n * @return {bool} True iff number of dispatches accumulated is greater than 0.\\n */\\nfunction hasDispatches(event) {\\n  return !!event._dispatchListeners;\\n}\\n\\n/**\\n * General utilities that are useful in creating custom Event Plugins.\\n */\\nvar EventPluginUtils = {\\n  isEndish: isEndish,\\n  isMoveish: isMoveish,\\n  isStartish: isStartish,\\n\\n  executeDirectDispatch: executeDirectDispatch,\\n  executeDispatch: executeDispatch,\\n  executeDispatchesInOrder: executeDispatchesInOrder,\\n  executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,\\n  hasDispatches: hasDispatches,\\n  injection: injection,\\n  useTouchEvents: false\\n};\\n\\nmodule.exports = EventPluginUtils;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/EventPluginUtils.js\\n ** module id = 13\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/EventPluginUtils.js?\");\n\n/***/ },\n/* 14 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/EventConstants.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule EventConstants\\n */\\n\\n\\\"use strict\\\";\\n\\nvar keyMirror = __webpack_require__(/*! ./keyMirror */ 15);\\n\\nvar PropagationPhases = keyMirror({bubbled: null, captured: null});\\n\\n/**\\n * Types of raw signals from the browser caught at the top level.\\n */\\nvar topLevelTypes = keyMirror({\\n  topBlur: null,\\n  topChange: null,\\n  topClick: null,\\n  topCompositionEnd: null,\\n  topCompositionStart: null,\\n  topCompositionUpdate: null,\\n  topContextMenu: null,\\n  topCopy: null,\\n  topCut: null,\\n  topDoubleClick: null,\\n  topDrag: null,\\n  topDragEnd: null,\\n  topDragEnter: null,\\n  topDragExit: null,\\n  topDragLeave: null,\\n  topDragOver: null,\\n  topDragStart: null,\\n  topDrop: null,\\n  topError: null,\\n  topFocus: null,\\n  topInput: null,\\n  topKeyDown: null,\\n  topKeyPress: null,\\n  topKeyUp: null,\\n  topLoad: null,\\n  topMouseDown: null,\\n  topMouseMove: null,\\n  topMouseOut: null,\\n  topMouseOver: null,\\n  topMouseUp: null,\\n  topPaste: null,\\n  topReset: null,\\n  topScroll: null,\\n  topSelectionChange: null,\\n  topSubmit: null,\\n  topTextInput: null,\\n  topTouchCancel: null,\\n  topTouchEnd: null,\\n  topTouchMove: null,\\n  topTouchStart: null,\\n  topWheel: null\\n});\\n\\nvar EventConstants = {\\n  topLevelTypes: topLevelTypes,\\n  PropagationPhases: PropagationPhases\\n};\\n\\nmodule.exports = EventConstants;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/EventConstants.js\\n ** module id = 14\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/EventConstants.js?\");\n\n/***/ },\n/* 15 */\n/*!**********************************!*\\\n  !*** ./~/react/lib/keyMirror.js ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule keyMirror\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Constructs an enumeration with keys equal to their value.\\n *\\n * For example:\\n *\\n *   var COLORS = keyMirror({blue: null, red: null});\\n *   var myColor = COLORS.blue;\\n *   var isColorValid = !!COLORS[myColor];\\n *\\n * The last line could not be performed if the values of the generated enum were\\n * not equal to their keys.\\n *\\n *   Input:  {key1: val1, key2: val2}\\n *   Output: {key1: key1, key2: key2}\\n *\\n * @param {object} obj\\n * @return {object}\\n */\\nvar keyMirror = function(obj) {\\n  var ret = {};\\n  var key;\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    obj instanceof Object && !Array.isArray(obj),\\n    'keyMirror(...): Argument must be an object.'\\n  ) : invariant(obj instanceof Object && !Array.isArray(obj)));\\n  for (key in obj) {\\n    if (!obj.hasOwnProperty(key)) {\\n      continue;\\n    }\\n    ret[key] = key;\\n  }\\n  return ret;\\n};\\n\\nmodule.exports = keyMirror;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/keyMirror.js\\n ** module id = 15\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/keyMirror.js?\");\n\n/***/ },\n/* 16 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/ReactChildren.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactChildren\\n */\\n\\n\\\"use strict\\\";\\n\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 17);\\n\\nvar traverseAllChildren = __webpack_require__(/*! ./traverseAllChildren */ 18);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\\nvar threeArgumentPooler = PooledClass.threeArgumentPooler;\\n\\n/**\\n * PooledClass representing the bookkeeping associated with performing a child\\n * traversal. Allows avoiding binding callbacks.\\n *\\n * @constructor ForEachBookKeeping\\n * @param {!function} forEachFunction Function to perform traversal with.\\n * @param {?*} forEachContext Context to perform context with.\\n */\\nfunction ForEachBookKeeping(forEachFunction, forEachContext) {\\n  this.forEachFunction = forEachFunction;\\n  this.forEachContext = forEachContext;\\n}\\nPooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);\\n\\nfunction forEachSingleChild(traverseContext, child, name, i) {\\n  var forEachBookKeeping = traverseContext;\\n  forEachBookKeeping.forEachFunction.call(\\n    forEachBookKeeping.forEachContext, child, i);\\n}\\n\\n/**\\n * Iterates through children that are typically specified as `props.children`.\\n *\\n * The provided forEachFunc(child, index) will be called for each\\n * leaf child.\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} forEachFunc.\\n * @param {*} forEachContext Context for forEachContext.\\n */\\nfunction forEachChildren(children, forEachFunc, forEachContext) {\\n  if (children == null) {\\n    return children;\\n  }\\n\\n  var traverseContext =\\n    ForEachBookKeeping.getPooled(forEachFunc, forEachContext);\\n  traverseAllChildren(children, forEachSingleChild, traverseContext);\\n  ForEachBookKeeping.release(traverseContext);\\n}\\n\\n/**\\n * PooledClass representing the bookkeeping associated with performing a child\\n * mapping. Allows avoiding binding callbacks.\\n *\\n * @constructor MapBookKeeping\\n * @param {!*} mapResult Object containing the ordered map of results.\\n * @param {!function} mapFunction Function to perform mapping with.\\n * @param {?*} mapContext Context to perform mapping with.\\n */\\nfunction MapBookKeeping(mapResult, mapFunction, mapContext) {\\n  this.mapResult = mapResult;\\n  this.mapFunction = mapFunction;\\n  this.mapContext = mapContext;\\n}\\nPooledClass.addPoolingTo(MapBookKeeping, threeArgumentPooler);\\n\\nfunction mapSingleChildIntoContext(traverseContext, child, name, i) {\\n  var mapBookKeeping = traverseContext;\\n  var mapResult = mapBookKeeping.mapResult;\\n\\n  var keyUnique = !mapResult.hasOwnProperty(name);\\n  (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n    keyUnique,\\n    'ReactChildren.map(...): Encountered two children with the same key, ' +\\n    '`%s`. Child keys must be unique; when two children share a key, only ' +\\n    'the first child will be used.',\\n    name\\n  ) : null);\\n\\n  if (keyUnique) {\\n    var mappedChild =\\n      mapBookKeeping.mapFunction.call(mapBookKeeping.mapContext, child, i);\\n    mapResult[name] = mappedChild;\\n  }\\n}\\n\\n/**\\n * Maps children that are typically specified as `props.children`.\\n *\\n * The provided mapFunction(child, key, index) will be called for each\\n * leaf child.\\n *\\n * TODO: This may likely break any calls to `ReactChildren.map` that were\\n * previously relying on the fact that we guarded against null children.\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} mapFunction.\\n * @param {*} mapContext Context for mapFunction.\\n * @return {object} Object containing the ordered map of results.\\n */\\nfunction mapChildren(children, func, context) {\\n  if (children == null) {\\n    return children;\\n  }\\n\\n  var mapResult = {};\\n  var traverseContext = MapBookKeeping.getPooled(mapResult, func, context);\\n  traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\\n  MapBookKeeping.release(traverseContext);\\n  return mapResult;\\n}\\n\\nfunction forEachSingleChildDummy(traverseContext, child, name, i) {\\n  return null;\\n}\\n\\n/**\\n * Count the number of children that are typically specified as\\n * `props.children`.\\n *\\n * @param {?*} children Children tree container.\\n * @return {number} The number of children.\\n */\\nfunction countChildren(children, context) {\\n  return traverseAllChildren(children, forEachSingleChildDummy, null);\\n}\\n\\nvar ReactChildren = {\\n  forEach: forEachChildren,\\n  map: mapChildren,\\n  count: countChildren\\n};\\n\\nmodule.exports = ReactChildren;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactChildren.js\\n ** module id = 16\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactChildren.js?\");\n\n/***/ },\n/* 17 */\n/*!************************************!*\\\n  !*** ./~/react/lib/PooledClass.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule PooledClass\\n */\\n\\n\\\"use strict\\\";\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Static poolers. Several custom versions for each potential number of\\n * arguments. A completely generic pooler is easy to implement, but would\\n * require accessing the `arguments` object. In each of these, `this` refers to\\n * the Class itself, not an instance. If any others are needed, simply add them\\n * here, or in their own files.\\n */\\nvar oneArgumentPooler = function(copyFieldsFrom) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, copyFieldsFrom);\\n    return instance;\\n  } else {\\n    return new Klass(copyFieldsFrom);\\n  }\\n};\\n\\nvar twoArgumentPooler = function(a1, a2) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2);\\n  }\\n};\\n\\nvar threeArgumentPooler = function(a1, a2, a3) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2, a3);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2, a3);\\n  }\\n};\\n\\nvar fiveArgumentPooler = function(a1, a2, a3, a4, a5) {\\n  var Klass = this;\\n  if (Klass.instancePool.length) {\\n    var instance = Klass.instancePool.pop();\\n    Klass.call(instance, a1, a2, a3, a4, a5);\\n    return instance;\\n  } else {\\n    return new Klass(a1, a2, a3, a4, a5);\\n  }\\n};\\n\\nvar standardReleaser = function(instance) {\\n  var Klass = this;\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    instance instanceof Klass,\\n    'Trying to release an instance into a pool of a different type.'\\n  ) : invariant(instance instanceof Klass));\\n  if (instance.destructor) {\\n    instance.destructor();\\n  }\\n  if (Klass.instancePool.length < Klass.poolSize) {\\n    Klass.instancePool.push(instance);\\n  }\\n};\\n\\nvar DEFAULT_POOL_SIZE = 10;\\nvar DEFAULT_POOLER = oneArgumentPooler;\\n\\n/**\\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\\n * you give this may have a `poolSize` property, and will look for a\\n * prototypical `destructor` on instances (optional).\\n *\\n * @param {Function} CopyConstructor Constructor that can be used to reset.\\n * @param {Function} pooler Customizable pooler.\\n */\\nvar addPoolingTo = function(CopyConstructor, pooler) {\\n  var NewKlass = CopyConstructor;\\n  NewKlass.instancePool = [];\\n  NewKlass.getPooled = pooler || DEFAULT_POOLER;\\n  if (!NewKlass.poolSize) {\\n    NewKlass.poolSize = DEFAULT_POOL_SIZE;\\n  }\\n  NewKlass.release = standardReleaser;\\n  return NewKlass;\\n};\\n\\nvar PooledClass = {\\n  addPoolingTo: addPoolingTo,\\n  oneArgumentPooler: oneArgumentPooler,\\n  twoArgumentPooler: twoArgumentPooler,\\n  threeArgumentPooler: threeArgumentPooler,\\n  fiveArgumentPooler: fiveArgumentPooler\\n};\\n\\nmodule.exports = PooledClass;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/PooledClass.js\\n ** module id = 17\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/PooledClass.js?\");\n\n/***/ },\n/* 18 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/traverseAllChildren.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule traverseAllChildren\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactInstanceHandles = __webpack_require__(/*! ./ReactInstanceHandles */ 4);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nvar SEPARATOR = ReactInstanceHandles.SEPARATOR;\\nvar SUBSEPARATOR = ':';\\n\\n/**\\n * TODO: Test that:\\n * 1. `mapChildren` transforms strings and numbers into `ReactTextComponent`.\\n * 2. it('should fail when supplied duplicate key', function() {\\n * 3. That a single child and an array with one item have the same key pattern.\\n * });\\n */\\n\\nvar userProvidedKeyEscaperLookup = {\\n  '=': '=0',\\n  '.': '=1',\\n  ':': '=2'\\n};\\n\\nvar userProvidedKeyEscapeRegex = /[=.:]/g;\\n\\nfunction userProvidedKeyEscaper(match) {\\n  return userProvidedKeyEscaperLookup[match];\\n}\\n\\n/**\\n * Generate a key string that identifies a component within a set.\\n *\\n * @param {*} component A component that could contain a manual key.\\n * @param {number} index Index that is used if a manual key is not provided.\\n * @return {string}\\n */\\nfunction getComponentKey(component, index) {\\n  if (component && component.key != null) {\\n    // Explicit key\\n    return wrapUserProvidedKey(component.key);\\n  }\\n  // Implicit key determined by the index in the set\\n  return index.toString(36);\\n}\\n\\n/**\\n * Escape a component key so that it is safe to use in a reactid.\\n *\\n * @param {*} key Component key to be escaped.\\n * @return {string} An escaped string.\\n */\\nfunction escapeUserProvidedKey(text) {\\n  return ('' + text).replace(\\n    userProvidedKeyEscapeRegex,\\n    userProvidedKeyEscaper\\n  );\\n}\\n\\n/**\\n * Wrap a `key` value explicitly provided by the user to distinguish it from\\n * implicitly-generated keys generated by a component's index in its parent.\\n *\\n * @param {string} key Value of a user-provided `key` attribute\\n * @return {string}\\n */\\nfunction wrapUserProvidedKey(key) {\\n  return '$' + escapeUserProvidedKey(key);\\n}\\n\\n/**\\n * @param {?*} children Children tree container.\\n * @param {!string} nameSoFar Name of the key path so far.\\n * @param {!number} indexSoFar Number of children encountered until this point.\\n * @param {!function} callback Callback to invoke with each child found.\\n * @param {?*} traverseContext Used to pass information throughout the traversal\\n * process.\\n * @return {!number} The number of children in this subtree.\\n */\\nvar traverseAllChildrenImpl =\\n  function(children, nameSoFar, indexSoFar, callback, traverseContext) {\\n    var nextName, nextIndex;\\n    var subtreeCount = 0;  // Count of children found in the current subtree.\\n    if (Array.isArray(children)) {\\n      for (var i = 0; i < children.length; i++) {\\n        var child = children[i];\\n        nextName = (\\n          nameSoFar +\\n          (nameSoFar ? SUBSEPARATOR : SEPARATOR) +\\n          getComponentKey(child, i)\\n        );\\n        nextIndex = indexSoFar + subtreeCount;\\n        subtreeCount += traverseAllChildrenImpl(\\n          child,\\n          nextName,\\n          nextIndex,\\n          callback,\\n          traverseContext\\n        );\\n      }\\n    } else {\\n      var type = typeof children;\\n      var isOnlyChild = nameSoFar === '';\\n      // If it's the only child, treat the name as if it was wrapped in an array\\n      // so that it's consistent if the number of children grows\\n      var storageName =\\n        isOnlyChild ? SEPARATOR + getComponentKey(children, 0) : nameSoFar;\\n      if (children == null || type === 'boolean') {\\n        // All of the above are perceived as null.\\n        callback(traverseContext, null, storageName, indexSoFar);\\n        subtreeCount = 1;\\n      } else if (type === 'string' || type === 'number' ||\\n                 ReactElement.isValidElement(children)) {\\n        callback(traverseContext, children, storageName, indexSoFar);\\n        subtreeCount = 1;\\n      } else if (type === 'object') {\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          !children || children.nodeType !== 1,\\n          'traverseAllChildren(...): Encountered an invalid child; DOM ' +\\n          'elements are not valid children of React components.'\\n        ) : invariant(!children || children.nodeType !== 1));\\n        for (var key in children) {\\n          if (children.hasOwnProperty(key)) {\\n            nextName = (\\n              nameSoFar + (nameSoFar ? SUBSEPARATOR : SEPARATOR) +\\n              wrapUserProvidedKey(key) + SUBSEPARATOR +\\n              getComponentKey(children[key], 0)\\n            );\\n            nextIndex = indexSoFar + subtreeCount;\\n            subtreeCount += traverseAllChildrenImpl(\\n              children[key],\\n              nextName,\\n              nextIndex,\\n              callback,\\n              traverseContext\\n            );\\n          }\\n        }\\n      }\\n    }\\n    return subtreeCount;\\n  };\\n\\n/**\\n * Traverses children that are typically specified as `props.children`, but\\n * might also be specified through attributes:\\n *\\n * - `traverseAllChildren(this.props.children, ...)`\\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\\n *\\n * The `traverseContext` is an optional argument that is passed through the\\n * entire traversal. It can be used to store accumulations or anything else that\\n * the callback might find relevant.\\n *\\n * @param {?*} children Children tree object.\\n * @param {!function} callback To invoke upon traversing each child.\\n * @param {?*} traverseContext Context for traversal.\\n * @return {!number} The number of children in this subtree.\\n */\\nfunction traverseAllChildren(children, callback, traverseContext) {\\n  if (children == null) {\\n    return 0;\\n  }\\n\\n  return traverseAllChildrenImpl(children, '', 0, callback, traverseContext);\\n}\\n\\nmodule.exports = traverseAllChildren;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/traverseAllChildren.js\\n ** module id = 18\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/traverseAllChildren.js?\");\n\n/***/ },\n/* 19 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/ReactElement.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactElement\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactContext = __webpack_require__(/*! ./ReactContext */ 20);\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 22);\\n\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar RESERVED_PROPS = {\\n  key: true,\\n  ref: true\\n};\\n\\n/**\\n * Warn for mutations.\\n *\\n * @internal\\n * @param {object} object\\n * @param {string} key\\n */\\nfunction defineWarningProperty(object, key) {\\n  Object.defineProperty(object, key, {\\n\\n    configurable: false,\\n    enumerable: true,\\n\\n    get: function() {\\n      if (!this._store) {\\n        return null;\\n      }\\n      return this._store[key];\\n    },\\n\\n    set: function(value) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n        false,\\n        'Don\\\\'t set the ' + key + ' property of the component. ' +\\n        'Mutate the existing props object instead.'\\n      ) : null);\\n      this._store[key] = value;\\n    }\\n\\n  });\\n}\\n\\n/**\\n * This is updated to true if the membrane is successfully created.\\n */\\nvar useMutationMembrane = false;\\n\\n/**\\n * Warn for mutations.\\n *\\n * @internal\\n * @param {object} element\\n */\\nfunction defineMutationMembrane(prototype) {\\n  try {\\n    var pseudoFrozenProperties = {\\n      props: true\\n    };\\n    for (var key in pseudoFrozenProperties) {\\n      defineWarningProperty(prototype, key);\\n    }\\n    useMutationMembrane = true;\\n  } catch (x) {\\n    // IE will fail on defineProperty\\n  }\\n}\\n\\n/**\\n * Base constructor for all React elements. This is only used to make this\\n * work with a dynamic instanceof check. Nothing should live on this prototype.\\n *\\n * @param {*} type\\n * @param {string|object} ref\\n * @param {*} key\\n * @param {*} props\\n * @internal\\n */\\nvar ReactElement = function(type, key, ref, owner, context, props) {\\n  // Built-in properties that belong on the element\\n  this.type = type;\\n  this.key = key;\\n  this.ref = ref;\\n\\n  // Record the component responsible for creating this element.\\n  this._owner = owner;\\n\\n  // TODO: Deprecate withContext, and then the context becomes accessible\\n  // through the owner.\\n  this._context = context;\\n\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    // The validation flag and props are currently mutative. We put them on\\n    // an external backing store so that we can freeze the whole object.\\n    // This can be replaced with a WeakMap once they are implemented in\\n    // commonly used development environments.\\n    this._store = { validated: false, props: props };\\n\\n    // We're not allowed to set props directly on the object so we early\\n    // return and rely on the prototype membrane to forward to the backing\\n    // store.\\n    if (useMutationMembrane) {\\n      Object.freeze(this);\\n      return;\\n    }\\n  }\\n\\n  this.props = props;\\n};\\n\\n// We intentionally don't expose the function on the constructor property.\\n// ReactElement should be indistinguishable from a plain object.\\nReactElement.prototype = {\\n  _isReactElement: true\\n};\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  defineMutationMembrane(ReactElement.prototype);\\n}\\n\\nReactElement.createElement = function(type, config, children) {\\n  var propName;\\n\\n  // Reserved names are extracted\\n  var props = {};\\n\\n  var key = null;\\n  var ref = null;\\n\\n  if (config != null) {\\n    ref = config.ref === undefined ? null : config.ref;\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n        config.key !== null,\\n        'createElement(...): Encountered component with a `key` of null. In ' +\\n        'a future version, this will be treated as equivalent to the string ' +\\n        '\\\\'null\\\\'; instead, provide an explicit key or use undefined.'\\n      ) : null);\\n    }\\n    // TODO: Change this back to `config.key === undefined`\\n    key = config.key == null ? null : '' + config.key;\\n    // Remaining properties are added to a new props object\\n    for (propName in config) {\\n      if (config.hasOwnProperty(propName) &&\\n          !RESERVED_PROPS.hasOwnProperty(propName)) {\\n        props[propName] = config[propName];\\n      }\\n    }\\n  }\\n\\n  // Children can be more than one argument, and those are transferred onto\\n  // the newly allocated props object.\\n  var childrenLength = arguments.length - 2;\\n  if (childrenLength === 1) {\\n    props.children = children;\\n  } else if (childrenLength > 1) {\\n    var childArray = Array(childrenLength);\\n    for (var i = 0; i < childrenLength; i++) {\\n      childArray[i] = arguments[i + 2];\\n    }\\n    props.children = childArray;\\n  }\\n\\n  // Resolve default props\\n  if (type && type.defaultProps) {\\n    var defaultProps = type.defaultProps;\\n    for (propName in defaultProps) {\\n      if (typeof props[propName] === 'undefined') {\\n        props[propName] = defaultProps[propName];\\n      }\\n    }\\n  }\\n\\n  return new ReactElement(\\n    type,\\n    key,\\n    ref,\\n    ReactCurrentOwner.current,\\n    ReactContext.current,\\n    props\\n  );\\n};\\n\\nReactElement.createFactory = function(type) {\\n  var factory = ReactElement.createElement.bind(null, type);\\n  // Expose the type on the factory and the prototype so that it can be\\n  // easily accessed on elements. E.g. <Foo />.type === Foo.type.\\n  // This should not be named `constructor` since this may not be the function\\n  // that created the element, and it may not even be a constructor.\\n  factory.type = type;\\n  return factory;\\n};\\n\\nReactElement.cloneAndReplaceProps = function(oldElement, newProps) {\\n  var newElement = new ReactElement(\\n    oldElement.type,\\n    oldElement.key,\\n    oldElement.ref,\\n    oldElement._owner,\\n    oldElement._context,\\n    newProps\\n  );\\n\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    // If the key on the original is valid, then the clone is valid\\n    newElement._store.validated = oldElement._store.validated;\\n  }\\n  return newElement;\\n};\\n\\n/**\\n * @param {?object} object\\n * @return {boolean} True if `object` is a valid component.\\n * @final\\n */\\nReactElement.isValidElement = function(object) {\\n  // ReactTestUtils is often used outside of beforeEach where as React is\\n  // within it. This leads to two different instances of React on the same\\n  // page. To identify a element from a different React instance we use\\n  // a flag instead of an instanceof check.\\n  var isElement = !!(object && object._isReactElement);\\n  // if (isElement && !(object instanceof ReactElement)) {\\n  // This is an indicator that you're using multiple versions of React at the\\n  // same time. This will screw with ownership and stuff. Fix it, please.\\n  // TODO: We could possibly warn here.\\n  // }\\n  return isElement;\\n};\\n\\nmodule.exports = ReactElement;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactElement.js\\n ** module id = 19\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactElement.js?\");\n\n/***/ },\n/* 20 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/ReactContext.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactContext\\n */\\n\\n\\\"use strict\\\";\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\n\\n/**\\n * Keeps track of the current context.\\n *\\n * The context is automatically passed down the component ownership hierarchy\\n * and is accessible via `this.context` on ReactCompositeComponents.\\n */\\nvar ReactContext = {\\n\\n  /**\\n   * @internal\\n   * @type {object}\\n   */\\n  current: {},\\n\\n  /**\\n   * Temporarily extends the current context while executing scopedCallback.\\n   *\\n   * A typical use case might look like\\n   *\\n   *  render: function() {\\n   *    var children = ReactContext.withContext({foo: 'foo'}, () => (\\n   *\\n   *    ));\\n   *    return <div>{children}</div>;\\n   *  }\\n   *\\n   * @param {object} newContext New context to merge into the existing context\\n   * @param {function} scopedCallback Callback to run with the new context\\n   * @return {ReactComponent|array<ReactComponent>}\\n   */\\n  withContext: function(newContext, scopedCallback) {\\n    var result;\\n    var previousContext = ReactContext.current;\\n    ReactContext.current = assign({}, previousContext, newContext);\\n    try {\\n      result = scopedCallback();\\n    } finally {\\n      ReactContext.current = previousContext;\\n    }\\n    return result;\\n  }\\n\\n};\\n\\nmodule.exports = ReactContext;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactContext.js\\n ** module id = 20\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactContext.js?\");\n\n/***/ },\n/* 21 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/Object.assign.js ***!\n  \\**************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule Object.assign\\n */\\n\\n// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign\\n\\nfunction assign(target, sources) {\\n  if (target == null) {\\n    throw new TypeError('Object.assign target cannot be null or undefined');\\n  }\\n\\n  var to = Object(target);\\n  var hasOwnProperty = Object.prototype.hasOwnProperty;\\n\\n  for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) {\\n    var nextSource = arguments[nextIndex];\\n    if (nextSource == null) {\\n      continue;\\n    }\\n\\n    var from = Object(nextSource);\\n\\n    // We don't currently support accessors nor proxies. Therefore this\\n    // copy cannot throw. If we ever supported this then we must handle\\n    // exceptions and side-effects. We don't support symbols so they won't\\n    // be transferred.\\n\\n    for (var key in from) {\\n      if (hasOwnProperty.call(from, key)) {\\n        to[key] = from[key];\\n      }\\n    }\\n  }\\n\\n  return to;\\n};\\n\\nmodule.exports = assign;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/Object.assign.js\\n ** module id = 21\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/Object.assign.js?\");\n\n/***/ },\n/* 22 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/ReactCurrentOwner.js ***!\n  \\******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactCurrentOwner\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Keeps track of the current owner.\\n *\\n * The current owner is the component who should own any components that are\\n * currently being constructed.\\n *\\n * The depth indicate how many composite components are above this render level.\\n */\\nvar ReactCurrentOwner = {\\n\\n  /**\\n   * @internal\\n   * @type {ReactComponent}\\n   */\\n  current: null\\n\\n};\\n\\nmodule.exports = ReactCurrentOwner;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactCurrentOwner.js\\n ** module id = 22\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactCurrentOwner.js?\");\n\n/***/ },\n/* 23 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactComponent.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactComponent\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactOwner = __webpack_require__(/*! ./ReactOwner */ 24);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar keyMirror = __webpack_require__(/*! ./keyMirror */ 15);\\n\\n/**\\n * Every React component is in one of these life cycles.\\n */\\nvar ComponentLifeCycle = keyMirror({\\n  /**\\n   * Mounted components have a DOM node representation and are capable of\\n   * receiving new props.\\n   */\\n  MOUNTED: null,\\n  /**\\n   * Unmounted components are inactive and cannot receive new props.\\n   */\\n  UNMOUNTED: null\\n});\\n\\nvar injected = false;\\n\\n/**\\n * Optionally injectable environment dependent cleanup hook. (server vs.\\n * browser etc). Example: A browser system caches DOM nodes based on component\\n * ID and must remove that cache entry when this instance is unmounted.\\n *\\n * @private\\n */\\nvar unmountIDFromEnvironment = null;\\n\\n/**\\n * The \\\"image\\\" of a component tree, is the platform specific (typically\\n * serialized) data that represents a tree of lower level UI building blocks.\\n * On the web, this \\\"image\\\" is HTML markup which describes a construction of\\n * low level `div` and `span` nodes. Other platforms may have different\\n * encoding of this \\\"image\\\". This must be injected.\\n *\\n * @private\\n */\\nvar mountImageIntoNode = null;\\n\\n/**\\n * Components are the basic units of composition in React.\\n *\\n * Every component accepts a set of keyed input parameters known as \\\"props\\\" that\\n * are initialized by the constructor. Once a component is mounted, the props\\n * can be mutated using `setProps` or `replaceProps`.\\n *\\n * Every component is capable of the following operations:\\n *\\n *   `mountComponent`\\n *     Initializes the component, renders markup, and registers event listeners.\\n *\\n *   `receiveComponent`\\n *     Updates the rendered DOM nodes to match the given component.\\n *\\n *   `unmountComponent`\\n *     Releases any resources allocated by this component.\\n *\\n * Components can also be \\\"owned\\\" by other components. Being owned by another\\n * component means being constructed by that component. This is different from\\n * being the child of a component, which means having a DOM representation that\\n * is a child of the DOM representation of that component.\\n *\\n * @class ReactComponent\\n */\\nvar ReactComponent = {\\n\\n  injection: {\\n    injectEnvironment: function(ReactComponentEnvironment) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        !injected,\\n        'ReactComponent: injectEnvironment() can only be called once.'\\n      ) : invariant(!injected));\\n      mountImageIntoNode = ReactComponentEnvironment.mountImageIntoNode;\\n      unmountIDFromEnvironment =\\n        ReactComponentEnvironment.unmountIDFromEnvironment;\\n      ReactComponent.BackendIDOperations =\\n        ReactComponentEnvironment.BackendIDOperations;\\n      injected = true;\\n    }\\n  },\\n\\n  /**\\n   * @internal\\n   */\\n  LifeCycle: ComponentLifeCycle,\\n\\n  /**\\n   * Injected module that provides ability to mutate individual properties.\\n   * Injected into the base class because many different subclasses need access\\n   * to this.\\n   *\\n   * @internal\\n   */\\n  BackendIDOperations: null,\\n\\n  /**\\n   * Base functionality for every ReactComponent constructor. Mixed into the\\n   * `ReactComponent` prototype, but exposed statically for easy access.\\n   *\\n   * @lends {ReactComponent.prototype}\\n   */\\n  Mixin: {\\n\\n    /**\\n     * Checks whether or not this component is mounted.\\n     *\\n     * @return {boolean} True if mounted, false otherwise.\\n     * @final\\n     * @protected\\n     */\\n    isMounted: function() {\\n      return this._lifeCycleState === ComponentLifeCycle.MOUNTED;\\n    },\\n\\n    /**\\n     * Sets a subset of the props.\\n     *\\n     * @param {object} partialProps Subset of the next props.\\n     * @param {?function} callback Called after props are updated.\\n     * @final\\n     * @public\\n     */\\n    setProps: function(partialProps, callback) {\\n      // Merge with the pending element if it exists, otherwise with existing\\n      // element props.\\n      var element = this._pendingElement || this._currentElement;\\n      this.replaceProps(\\n        assign({}, element.props, partialProps),\\n        callback\\n      );\\n    },\\n\\n    /**\\n     * Replaces all of the props.\\n     *\\n     * @param {object} props New props.\\n     * @param {?function} callback Called after props are updated.\\n     * @final\\n     * @public\\n     */\\n    replaceProps: function(props, callback) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        this.isMounted(),\\n        'replaceProps(...): Can only update a mounted component.'\\n      ) : invariant(this.isMounted()));\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        this._mountDepth === 0,\\n        'replaceProps(...): You called `setProps` or `replaceProps` on a ' +\\n        'component with a parent. This is an anti-pattern since props will ' +\\n        'get reactively updated when rendered. Instead, change the owner\\\\'s ' +\\n        '`render` method to pass the correct value as props to the component ' +\\n        'where it is created.'\\n      ) : invariant(this._mountDepth === 0));\\n      // This is a deoptimized path. We optimize for always having a element.\\n      // This creates an extra internal element.\\n      this._pendingElement = ReactElement.cloneAndReplaceProps(\\n        this._pendingElement || this._currentElement,\\n        props\\n      );\\n      ReactUpdates.enqueueUpdate(this, callback);\\n    },\\n\\n    /**\\n     * Schedule a partial update to the props. Only used for internal testing.\\n     *\\n     * @param {object} partialProps Subset of the next props.\\n     * @param {?function} callback Called after props are updated.\\n     * @final\\n     * @internal\\n     */\\n    _setPropsInternal: function(partialProps, callback) {\\n      // This is a deoptimized path. We optimize for always having a element.\\n      // This creates an extra internal element.\\n      var element = this._pendingElement || this._currentElement;\\n      this._pendingElement = ReactElement.cloneAndReplaceProps(\\n        element,\\n        assign({}, element.props, partialProps)\\n      );\\n      ReactUpdates.enqueueUpdate(this, callback);\\n    },\\n\\n    /**\\n     * Base constructor for all React components.\\n     *\\n     * Subclasses that override this method should make sure to invoke\\n     * `ReactComponent.Mixin.construct.call(this, ...)`.\\n     *\\n     * @param {ReactElement} element\\n     * @internal\\n     */\\n    construct: function(element) {\\n      // This is the public exposed props object after it has been processed\\n      // with default props. The element's props represents the true internal\\n      // state of the props.\\n      this.props = element.props;\\n      // Record the component responsible for creating this component.\\n      // This is accessible through the element but we maintain an extra\\n      // field for compatibility with devtools and as a way to make an\\n      // incremental update. TODO: Consider deprecating this field.\\n      this._owner = element._owner;\\n\\n      // All components start unmounted.\\n      this._lifeCycleState = ComponentLifeCycle.UNMOUNTED;\\n\\n      // See ReactUpdates.\\n      this._pendingCallbacks = null;\\n\\n      // We keep the old element and a reference to the pending element\\n      // to track updates.\\n      this._currentElement = element;\\n      this._pendingElement = null;\\n    },\\n\\n    /**\\n     * Initializes the component, renders markup, and registers event listeners.\\n     *\\n     * NOTE: This does not insert any nodes into the DOM.\\n     *\\n     * Subclasses that override this method should make sure to invoke\\n     * `ReactComponent.Mixin.mountComponent.call(this, ...)`.\\n     *\\n     * @param {string} rootID DOM ID of the root node.\\n     * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n     * @param {number} mountDepth number of components in the owner hierarchy.\\n     * @return {?string} Rendered markup to be inserted into the DOM.\\n     * @internal\\n     */\\n    mountComponent: function(rootID, transaction, mountDepth) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        !this.isMounted(),\\n        'mountComponent(%s, ...): Can only mount an unmounted component. ' +\\n        'Make sure to avoid storing components between renders or reusing a ' +\\n        'single component instance in multiple places.',\\n        rootID\\n      ) : invariant(!this.isMounted()));\\n      var ref = this._currentElement.ref;\\n      if (ref != null) {\\n        var owner = this._currentElement._owner;\\n        ReactOwner.addComponentAsRefTo(this, ref, owner);\\n      }\\n      this._rootNodeID = rootID;\\n      this._lifeCycleState = ComponentLifeCycle.MOUNTED;\\n      this._mountDepth = mountDepth;\\n      // Effectively: return '';\\n    },\\n\\n    /**\\n     * Releases any resources allocated by `mountComponent`.\\n     *\\n     * NOTE: This does not remove any nodes from the DOM.\\n     *\\n     * Subclasses that override this method should make sure to invoke\\n     * `ReactComponent.Mixin.unmountComponent.call(this)`.\\n     *\\n     * @internal\\n     */\\n    unmountComponent: function() {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        this.isMounted(),\\n        'unmountComponent(): Can only unmount a mounted component.'\\n      ) : invariant(this.isMounted()));\\n      var ref = this._currentElement.ref;\\n      if (ref != null) {\\n        ReactOwner.removeComponentAsRefFrom(this, ref, this._owner);\\n      }\\n      unmountIDFromEnvironment(this._rootNodeID);\\n      this._rootNodeID = null;\\n      this._lifeCycleState = ComponentLifeCycle.UNMOUNTED;\\n    },\\n\\n    /**\\n     * Given a new instance of this component, updates the rendered DOM nodes\\n     * as if that instance was rendered instead.\\n     *\\n     * Subclasses that override this method should make sure to invoke\\n     * `ReactComponent.Mixin.receiveComponent.call(this, ...)`.\\n     *\\n     * @param {object} nextComponent Next set of properties.\\n     * @param {ReactReconcileTransaction} transaction\\n     * @internal\\n     */\\n    receiveComponent: function(nextElement, transaction) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        this.isMounted(),\\n        'receiveComponent(...): Can only update a mounted component.'\\n      ) : invariant(this.isMounted()));\\n      this._pendingElement = nextElement;\\n      this.performUpdateIfNecessary(transaction);\\n    },\\n\\n    /**\\n     * If `_pendingElement` is set, update the component.\\n     *\\n     * @param {ReactReconcileTransaction} transaction\\n     * @internal\\n     */\\n    performUpdateIfNecessary: function(transaction) {\\n      if (this._pendingElement == null) {\\n        return;\\n      }\\n      var prevElement = this._currentElement;\\n      var nextElement = this._pendingElement;\\n      this._currentElement = nextElement;\\n      this.props = nextElement.props;\\n      this._owner = nextElement._owner;\\n      this._pendingElement = null;\\n      this.updateComponent(transaction, prevElement);\\n    },\\n\\n    /**\\n     * Updates the component's currently mounted representation.\\n     *\\n     * @param {ReactReconcileTransaction} transaction\\n     * @param {object} prevElement\\n     * @internal\\n     */\\n    updateComponent: function(transaction, prevElement) {\\n      var nextElement = this._currentElement;\\n\\n      // If either the owner or a `ref` has changed, make sure the newest owner\\n      // has stored a reference to `this`, and the previous owner (if different)\\n      // has forgotten the reference to `this`. We use the element instead\\n      // of the public this.props because the post processing cannot determine\\n      // a ref. The ref conceptually lives on the element.\\n\\n      // TODO: Should this even be possible? The owner cannot change because\\n      // it's forbidden by shouldUpdateReactComponent. The ref can change\\n      // if you swap the keys of but not the refs. Reconsider where this check\\n      // is made. It probably belongs where the key checking and\\n      // instantiateReactComponent is done.\\n\\n      if (nextElement._owner !== prevElement._owner ||\\n          nextElement.ref !== prevElement.ref) {\\n        if (prevElement.ref != null) {\\n          ReactOwner.removeComponentAsRefFrom(\\n            this, prevElement.ref, prevElement._owner\\n          );\\n        }\\n        // Correct, even if the owner is the same, and only the ref has changed.\\n        if (nextElement.ref != null) {\\n          ReactOwner.addComponentAsRefTo(\\n            this,\\n            nextElement.ref,\\n            nextElement._owner\\n          );\\n        }\\n      }\\n    },\\n\\n    /**\\n     * Mounts this component and inserts it into the DOM.\\n     *\\n     * @param {string} rootID DOM ID of the root node.\\n     * @param {DOMElement} container DOM element to mount into.\\n     * @param {boolean} shouldReuseMarkup If true, do not insert markup\\n     * @final\\n     * @internal\\n     * @see {ReactMount.render}\\n     */\\n    mountComponentIntoNode: function(rootID, container, shouldReuseMarkup) {\\n      var transaction = ReactUpdates.ReactReconcileTransaction.getPooled();\\n      transaction.perform(\\n        this._mountComponentIntoNode,\\n        this,\\n        rootID,\\n        container,\\n        transaction,\\n        shouldReuseMarkup\\n      );\\n      ReactUpdates.ReactReconcileTransaction.release(transaction);\\n    },\\n\\n    /**\\n     * @param {string} rootID DOM ID of the root node.\\n     * @param {DOMElement} container DOM element to mount into.\\n     * @param {ReactReconcileTransaction} transaction\\n     * @param {boolean} shouldReuseMarkup If true, do not insert markup\\n     * @final\\n     * @private\\n     */\\n    _mountComponentIntoNode: function(\\n        rootID,\\n        container,\\n        transaction,\\n        shouldReuseMarkup) {\\n      var markup = this.mountComponent(rootID, transaction, 0);\\n      mountImageIntoNode(markup, container, shouldReuseMarkup);\\n    },\\n\\n    /**\\n     * Checks if this component is owned by the supplied `owner` component.\\n     *\\n     * @param {ReactComponent} owner Component to check.\\n     * @return {boolean} True if `owners` owns this component.\\n     * @final\\n     * @internal\\n     */\\n    isOwnedBy: function(owner) {\\n      return this._owner === owner;\\n    },\\n\\n    /**\\n     * Gets another component, that shares the same owner as this one, by ref.\\n     *\\n     * @param {string} ref of a sibling Component.\\n     * @return {?ReactComponent} the actual sibling Component.\\n     * @final\\n     * @internal\\n     */\\n    getSiblingByRef: function(ref) {\\n      var owner = this._owner;\\n      if (!owner || !owner.refs) {\\n        return null;\\n      }\\n      return owner.refs[ref];\\n    }\\n  }\\n};\\n\\nmodule.exports = ReactComponent;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactComponent.js\\n ** module id = 23\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactComponent.js?\");\n\n/***/ },\n/* 24 */\n/*!***********************************!*\\\n  !*** ./~/react/lib/ReactOwner.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactOwner\\n */\\n\\n\\\"use strict\\\";\\n\\nvar emptyObject = __webpack_require__(/*! ./emptyObject */ 25);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * ReactOwners are capable of storing references to owned components.\\n *\\n * All components are capable of //being// referenced by owner components, but\\n * only ReactOwner components are capable of //referencing// owned components.\\n * The named reference is known as a \\\"ref\\\".\\n *\\n * Refs are available when mounted and updated during reconciliation.\\n *\\n *   var MyComponent = React.createClass({\\n *     render: function() {\\n *       return (\\n *         <div onClick={this.handleClick}>\\n *           <CustomComponent ref=\\\"custom\\\" />\\n *         </div>\\n *       );\\n *     },\\n *     handleClick: function() {\\n *       this.refs.custom.handleClick();\\n *     },\\n *     componentDidMount: function() {\\n *       this.refs.custom.initialize();\\n *     }\\n *   });\\n *\\n * Refs should rarely be used. When refs are used, they should only be done to\\n * control data that is not handled by React's data flow.\\n *\\n * @class ReactOwner\\n */\\nvar ReactOwner = {\\n\\n  /**\\n   * @param {?object} object\\n   * @return {boolean} True if `object` is a valid owner.\\n   * @final\\n   */\\n  isValidOwner: function(object) {\\n    return !!(\\n      object &&\\n      typeof object.attachRef === 'function' &&\\n      typeof object.detachRef === 'function'\\n    );\\n  },\\n\\n  /**\\n   * Adds a component by ref to an owner component.\\n   *\\n   * @param {ReactComponent} component Component to reference.\\n   * @param {string} ref Name by which to refer to the component.\\n   * @param {ReactOwner} owner Component on which to record the ref.\\n   * @final\\n   * @internal\\n   */\\n  addComponentAsRefTo: function(component, ref, owner) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      ReactOwner.isValidOwner(owner),\\n      'addComponentAsRefTo(...): Only a ReactOwner can have refs. This ' +\\n      'usually means that you\\\\'re trying to add a ref to a component that ' +\\n      'doesn\\\\'t have an owner (that is, was not created inside of another ' +\\n      'component\\\\'s `render` method). Try rendering this component inside of ' +\\n      'a new top-level component which will hold the ref.'\\n    ) : invariant(ReactOwner.isValidOwner(owner)));\\n    owner.attachRef(ref, component);\\n  },\\n\\n  /**\\n   * Removes a component by ref from an owner component.\\n   *\\n   * @param {ReactComponent} component Component to dereference.\\n   * @param {string} ref Name of the ref to remove.\\n   * @param {ReactOwner} owner Component on which the ref is recorded.\\n   * @final\\n   * @internal\\n   */\\n  removeComponentAsRefFrom: function(component, ref, owner) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      ReactOwner.isValidOwner(owner),\\n      'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. This ' +\\n      'usually means that you\\\\'re trying to remove a ref to a component that ' +\\n      'doesn\\\\'t have an owner (that is, was not created inside of another ' +\\n      'component\\\\'s `render` method). Try rendering this component inside of ' +\\n      'a new top-level component which will hold the ref.'\\n    ) : invariant(ReactOwner.isValidOwner(owner)));\\n    // Check that `component` is still the current ref because we do not want to\\n    // detach the ref if another component stole it.\\n    if (owner.refs[ref] === component) {\\n      owner.detachRef(ref);\\n    }\\n  },\\n\\n  /**\\n   * A ReactComponent must mix this in to have refs.\\n   *\\n   * @lends {ReactOwner.prototype}\\n   */\\n  Mixin: {\\n\\n    construct: function() {\\n      this.refs = emptyObject;\\n    },\\n\\n    /**\\n     * Lazily allocates the refs object and stores `component` as `ref`.\\n     *\\n     * @param {string} ref Reference name.\\n     * @param {component} component Component to store as `ref`.\\n     * @final\\n     * @private\\n     */\\n    attachRef: function(ref, component) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        component.isOwnedBy(this),\\n        'attachRef(%s, ...): Only a component\\\\'s owner can store a ref to it.',\\n        ref\\n      ) : invariant(component.isOwnedBy(this)));\\n      var refs = this.refs === emptyObject ? (this.refs = {}) : this.refs;\\n      refs[ref] = component;\\n    },\\n\\n    /**\\n     * Detaches a reference name.\\n     *\\n     * @param {string} ref Name to dereference.\\n     * @final\\n     * @private\\n     */\\n    detachRef: function(ref) {\\n      delete this.refs[ref];\\n    }\\n\\n  }\\n\\n};\\n\\nmodule.exports = ReactOwner;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactOwner.js\\n ** module id = 24\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactOwner.js?\");\n\n/***/ },\n/* 25 */\n/*!************************************!*\\\n  !*** ./~/react/lib/emptyObject.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule emptyObject\\n */\\n\\n\\\"use strict\\\";\\n\\nvar emptyObject = {};\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  Object.freeze(emptyObject);\\n}\\n\\nmodule.exports = emptyObject;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/emptyObject.js\\n ** module id = 25\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/emptyObject.js?\");\n\n/***/ },\n/* 26 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/ReactUpdates.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactUpdates\\n */\\n\\n\\\"use strict\\\";\\n\\nvar CallbackQueue = __webpack_require__(/*! ./CallbackQueue */ 28);\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 17);\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 22);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\nvar Transaction = __webpack_require__(/*! ./Transaction */ 27);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar dirtyComponents = [];\\nvar asapCallbackQueue = CallbackQueue.getPooled();\\nvar asapEnqueued = false;\\n\\nvar batchingStrategy = null;\\n\\nfunction ensureInjected() {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    ReactUpdates.ReactReconcileTransaction && batchingStrategy,\\n    'ReactUpdates: must inject a reconcile transaction class and batching ' +\\n    'strategy'\\n  ) : invariant(ReactUpdates.ReactReconcileTransaction && batchingStrategy));\\n}\\n\\nvar NESTED_UPDATES = {\\n  initialize: function() {\\n    this.dirtyComponentsLength = dirtyComponents.length;\\n  },\\n  close: function() {\\n    if (this.dirtyComponentsLength !== dirtyComponents.length) {\\n      // Additional updates were enqueued by componentDidUpdate handlers or\\n      // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run\\n      // these new updates so that if A's componentDidUpdate calls setState on\\n      // B, B will update before the callback A's updater provided when calling\\n      // setState.\\n      dirtyComponents.splice(0, this.dirtyComponentsLength);\\n      flushBatchedUpdates();\\n    } else {\\n      dirtyComponents.length = 0;\\n    }\\n  }\\n};\\n\\nvar UPDATE_QUEUEING = {\\n  initialize: function() {\\n    this.callbackQueue.reset();\\n  },\\n  close: function() {\\n    this.callbackQueue.notifyAll();\\n  }\\n};\\n\\nvar TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];\\n\\nfunction ReactUpdatesFlushTransaction() {\\n  this.reinitializeTransaction();\\n  this.dirtyComponentsLength = null;\\n  this.callbackQueue = CallbackQueue.getPooled();\\n  this.reconcileTransaction =\\n    ReactUpdates.ReactReconcileTransaction.getPooled();\\n}\\n\\nassign(\\n  ReactUpdatesFlushTransaction.prototype,\\n  Transaction.Mixin, {\\n  getTransactionWrappers: function() {\\n    return TRANSACTION_WRAPPERS;\\n  },\\n\\n  destructor: function() {\\n    this.dirtyComponentsLength = null;\\n    CallbackQueue.release(this.callbackQueue);\\n    this.callbackQueue = null;\\n    ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);\\n    this.reconcileTransaction = null;\\n  },\\n\\n  perform: function(method, scope, a) {\\n    // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`\\n    // with this transaction's wrappers around it.\\n    return Transaction.Mixin.perform.call(\\n      this,\\n      this.reconcileTransaction.perform,\\n      this.reconcileTransaction,\\n      method,\\n      scope,\\n      a\\n    );\\n  }\\n});\\n\\nPooledClass.addPoolingTo(ReactUpdatesFlushTransaction);\\n\\nfunction batchedUpdates(callback, a, b) {\\n  ensureInjected();\\n  batchingStrategy.batchedUpdates(callback, a, b);\\n}\\n\\n/**\\n * Array comparator for ReactComponents by owner depth\\n *\\n * @param {ReactComponent} c1 first component you're comparing\\n * @param {ReactComponent} c2 second component you're comparing\\n * @return {number} Return value usable by Array.prototype.sort().\\n */\\nfunction mountDepthComparator(c1, c2) {\\n  return c1._mountDepth - c2._mountDepth;\\n}\\n\\nfunction runBatchedUpdates(transaction) {\\n  var len = transaction.dirtyComponentsLength;\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    len === dirtyComponents.length,\\n    'Expected flush transaction\\\\'s stored dirty-components length (%s) to ' +\\n    'match dirty-components array length (%s).',\\n    len,\\n    dirtyComponents.length\\n  ) : invariant(len === dirtyComponents.length));\\n\\n  // Since reconciling a component higher in the owner hierarchy usually (not\\n  // always -- see shouldComponentUpdate()) will reconcile children, reconcile\\n  // them before their children by sorting the array.\\n  dirtyComponents.sort(mountDepthComparator);\\n\\n  for (var i = 0; i < len; i++) {\\n    // If a component is unmounted before pending changes apply, ignore them\\n    // TODO: Queue unmounts in the same list to avoid this happening at all\\n    var component = dirtyComponents[i];\\n    if (component.isMounted()) {\\n      // If performUpdateIfNecessary happens to enqueue any new updates, we\\n      // shouldn't execute the callbacks until the next render happens, so\\n      // stash the callbacks first\\n      var callbacks = component._pendingCallbacks;\\n      component._pendingCallbacks = null;\\n      component.performUpdateIfNecessary(transaction.reconcileTransaction);\\n\\n      if (callbacks) {\\n        for (var j = 0; j < callbacks.length; j++) {\\n          transaction.callbackQueue.enqueue(\\n            callbacks[j],\\n            component\\n          );\\n        }\\n      }\\n    }\\n  }\\n}\\n\\nvar flushBatchedUpdates = ReactPerf.measure(\\n  'ReactUpdates',\\n  'flushBatchedUpdates',\\n  function() {\\n    // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents\\n    // array and perform any updates enqueued by mount-ready handlers (i.e.,\\n    // componentDidUpdate) but we need to check here too in order to catch\\n    // updates enqueued by setState callbacks and asap calls.\\n    while (dirtyComponents.length || asapEnqueued) {\\n      if (dirtyComponents.length) {\\n        var transaction = ReactUpdatesFlushTransaction.getPooled();\\n        transaction.perform(runBatchedUpdates, null, transaction);\\n        ReactUpdatesFlushTransaction.release(transaction);\\n      }\\n\\n      if (asapEnqueued) {\\n        asapEnqueued = false;\\n        var queue = asapCallbackQueue;\\n        asapCallbackQueue = CallbackQueue.getPooled();\\n        queue.notifyAll();\\n        CallbackQueue.release(queue);\\n      }\\n    }\\n  }\\n);\\n\\n/**\\n * Mark a component as needing a rerender, adding an optional callback to a\\n * list of functions which will be executed once the rerender occurs.\\n */\\nfunction enqueueUpdate(component, callback) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    !callback || typeof callback === \\\"function\\\",\\n    'enqueueUpdate(...): You called `setProps`, `replaceProps`, ' +\\n    '`setState`, `replaceState`, or `forceUpdate` with a callback that ' +\\n    'isn\\\\'t callable.'\\n  ) : invariant(!callback || typeof callback === \\\"function\\\"));\\n  ensureInjected();\\n\\n  // Various parts of our code (such as ReactCompositeComponent's\\n  // _renderValidatedComponent) assume that calls to render aren't nested;\\n  // verify that that's the case. (This is called by each top-level update\\n  // function, like setProps, setState, forceUpdate, etc.; creation and\\n  // destruction of top-level components is guarded in ReactMount.)\\n  (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n    ReactCurrentOwner.current == null,\\n    'enqueueUpdate(): Render methods should be a pure function of props ' +\\n    'and state; triggering nested component updates from render is not ' +\\n    'allowed. If necessary, trigger nested updates in ' +\\n    'componentDidUpdate.'\\n  ) : null);\\n\\n  if (!batchingStrategy.isBatchingUpdates) {\\n    batchingStrategy.batchedUpdates(enqueueUpdate, component, callback);\\n    return;\\n  }\\n\\n  dirtyComponents.push(component);\\n\\n  if (callback) {\\n    if (component._pendingCallbacks) {\\n      component._pendingCallbacks.push(callback);\\n    } else {\\n      component._pendingCallbacks = [callback];\\n    }\\n  }\\n}\\n\\n/**\\n * Enqueue a callback to be run at the end of the current batching cycle. Throws\\n * if no updates are currently being performed.\\n */\\nfunction asap(callback, context) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    batchingStrategy.isBatchingUpdates,\\n    'ReactUpdates.asap: Can\\\\'t enqueue an asap callback in a context where' +\\n    'updates are not being batched.'\\n  ) : invariant(batchingStrategy.isBatchingUpdates));\\n  asapCallbackQueue.enqueue(callback, context);\\n  asapEnqueued = true;\\n}\\n\\nvar ReactUpdatesInjection = {\\n  injectReconcileTransaction: function(ReconcileTransaction) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      ReconcileTransaction,\\n      'ReactUpdates: must provide a reconcile transaction class'\\n    ) : invariant(ReconcileTransaction));\\n    ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;\\n  },\\n\\n  injectBatchingStrategy: function(_batchingStrategy) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      _batchingStrategy,\\n      'ReactUpdates: must provide a batching strategy'\\n    ) : invariant(_batchingStrategy));\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      typeof _batchingStrategy.batchedUpdates === 'function',\\n      'ReactUpdates: must provide a batchedUpdates() function'\\n    ) : invariant(typeof _batchingStrategy.batchedUpdates === 'function'));\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      typeof _batchingStrategy.isBatchingUpdates === 'boolean',\\n      'ReactUpdates: must provide an isBatchingUpdates boolean attribute'\\n    ) : invariant(typeof _batchingStrategy.isBatchingUpdates === 'boolean'));\\n    batchingStrategy = _batchingStrategy;\\n  }\\n};\\n\\nvar ReactUpdates = {\\n  /**\\n   * React references `ReactReconcileTransaction` using this property in order\\n   * to allow dependency injection.\\n   *\\n   * @internal\\n   */\\n  ReactReconcileTransaction: null,\\n\\n  batchedUpdates: batchedUpdates,\\n  enqueueUpdate: enqueueUpdate,\\n  flushBatchedUpdates: flushBatchedUpdates,\\n  injection: ReactUpdatesInjection,\\n  asap: asap\\n};\\n\\nmodule.exports = ReactUpdates;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactUpdates.js\\n ** module id = 26\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactUpdates.js?\");\n\n/***/ },\n/* 27 */\n/*!************************************!*\\\n  !*** ./~/react/lib/Transaction.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule Transaction\\n */\\n\\n\\\"use strict\\\";\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * `Transaction` creates a black box that is able to wrap any method such that\\n * certain invariants are maintained before and after the method is invoked\\n * (Even if an exception is thrown while invoking the wrapped method). Whoever\\n * instantiates a transaction can provide enforcers of the invariants at\\n * creation time. The `Transaction` class itself will supply one additional\\n * automatic invariant for you - the invariant that any transaction instance\\n * should not be run while it is already being run. You would typically create a\\n * single instance of a `Transaction` for reuse multiple times, that potentially\\n * is used to wrap several different methods. Wrappers are extremely simple -\\n * they only require implementing two methods.\\n *\\n * <pre>\\n *                       wrappers (injected at creation time)\\n *                                      +        +\\n *                                      |        |\\n *                    +-----------------|--------|--------------+\\n *                    |                 v        |              |\\n *                    |      +---------------+   |              |\\n *                    |   +--|    wrapper1   |---|----+         |\\n *                    |   |  +---------------+   v    |         |\\n *                    |   |          +-------------+  |         |\\n *                    |   |     +----|   wrapper2  |--------+   |\\n *                    |   |     |    +-------------+  |     |   |\\n *                    |   |     |                     |     |   |\\n *                    |   v     v                     v     v   | wrapper\\n *                    | +---+ +---+   +---------+   +---+ +---+ | invariants\\n * perform(anyMethod) | |   | |   |   |         |   |   | |   | | maintained\\n * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->\\n *                    | |   | |   |   |         |   |   | |   | |\\n *                    | |   | |   |   |         |   |   | |   | |\\n *                    | |   | |   |   |         |   |   | |   | |\\n *                    | +---+ +---+   +---------+   +---+ +---+ |\\n *                    |  initialize                    close    |\\n *                    +-----------------------------------------+\\n * </pre>\\n *\\n * Use cases:\\n * - Preserving the input selection ranges before/after reconciliation.\\n *   Restoring selection even in the event of an unexpected error.\\n * - Deactivating events while rearranging the DOM, preventing blurs/focuses,\\n *   while guaranteeing that afterwards, the event system is reactivated.\\n * - Flushing a queue of collected DOM mutations to the main UI thread after a\\n *   reconciliation takes place in a worker thread.\\n * - Invoking any collected `componentDidUpdate` callbacks after rendering new\\n *   content.\\n * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue\\n *   to preserve the `scrollTop` (an automatic scroll aware DOM).\\n * - (Future use case): Layout calculations before and after DOM upates.\\n *\\n * Transactional plugin API:\\n * - A module that has an `initialize` method that returns any precomputation.\\n * - and a `close` method that accepts the precomputation. `close` is invoked\\n *   when the wrapped process is completed, or has failed.\\n *\\n * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules\\n * that implement `initialize` and `close`.\\n * @return {Transaction} Single transaction for reuse in thread.\\n *\\n * @class Transaction\\n */\\nvar Mixin = {\\n  /**\\n   * Sets up this instance so that it is prepared for collecting metrics. Does\\n   * so such that this setup method may be used on an instance that is already\\n   * initialized, in a way that does not consume additional memory upon reuse.\\n   * That can be useful if you decide to make your subclass of this mixin a\\n   * \\\"PooledClass\\\".\\n   */\\n  reinitializeTransaction: function() {\\n    this.transactionWrappers = this.getTransactionWrappers();\\n    if (!this.wrapperInitData) {\\n      this.wrapperInitData = [];\\n    } else {\\n      this.wrapperInitData.length = 0;\\n    }\\n    this._isInTransaction = false;\\n  },\\n\\n  _isInTransaction: false,\\n\\n  /**\\n   * @abstract\\n   * @return {Array<TransactionWrapper>} Array of transaction wrappers.\\n   */\\n  getTransactionWrappers: null,\\n\\n  isInTransaction: function() {\\n    return !!this._isInTransaction;\\n  },\\n\\n  /**\\n   * Executes the function within a safety window. Use this for the top level\\n   * methods that result in large amounts of computation/mutations that would\\n   * need to be safety checked.\\n   *\\n   * @param {function} method Member of scope to call.\\n   * @param {Object} scope Scope to invoke from.\\n   * @param {Object?=} args... Arguments to pass to the method (optional).\\n   *                           Helps prevent need to bind in many cases.\\n   * @return Return value from `method`.\\n   */\\n  perform: function(method, scope, a, b, c, d, e, f) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      !this.isInTransaction(),\\n      'Transaction.perform(...): Cannot initialize a transaction when there ' +\\n      'is already an outstanding transaction.'\\n    ) : invariant(!this.isInTransaction()));\\n    var errorThrown;\\n    var ret;\\n    try {\\n      this._isInTransaction = true;\\n      // Catching errors makes debugging more difficult, so we start with\\n      // errorThrown set to true before setting it to false after calling\\n      // close -- if it's still set to true in the finally block, it means\\n      // one of these calls threw.\\n      errorThrown = true;\\n      this.initializeAll(0);\\n      ret = method.call(scope, a, b, c, d, e, f);\\n      errorThrown = false;\\n    } finally {\\n      try {\\n        if (errorThrown) {\\n          // If `method` throws, prefer to show that stack trace over any thrown\\n          // by invoking `closeAll`.\\n          try {\\n            this.closeAll(0);\\n          } catch (err) {\\n          }\\n        } else {\\n          // Since `method` didn't throw, we don't want to silence the exception\\n          // here.\\n          this.closeAll(0);\\n        }\\n      } finally {\\n        this._isInTransaction = false;\\n      }\\n    }\\n    return ret;\\n  },\\n\\n  initializeAll: function(startIndex) {\\n    var transactionWrappers = this.transactionWrappers;\\n    for (var i = startIndex; i < transactionWrappers.length; i++) {\\n      var wrapper = transactionWrappers[i];\\n      try {\\n        // Catching errors makes debugging more difficult, so we start with the\\n        // OBSERVED_ERROR state before overwriting it with the real return value\\n        // of initialize -- if it's still set to OBSERVED_ERROR in the finally\\n        // block, it means wrapper.initialize threw.\\n        this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;\\n        this.wrapperInitData[i] = wrapper.initialize ?\\n          wrapper.initialize.call(this) :\\n          null;\\n      } finally {\\n        if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) {\\n          // The initializer for wrapper i threw an error; initialize the\\n          // remaining wrappers but silence any exceptions from them to ensure\\n          // that the first error is the one to bubble up.\\n          try {\\n            this.initializeAll(i + 1);\\n          } catch (err) {\\n          }\\n        }\\n      }\\n    }\\n  },\\n\\n  /**\\n   * Invokes each of `this.transactionWrappers.close[i]` functions, passing into\\n   * them the respective return values of `this.transactionWrappers.init[i]`\\n   * (`close`rs that correspond to initializers that failed will not be\\n   * invoked).\\n   */\\n  closeAll: function(startIndex) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      this.isInTransaction(),\\n      'Transaction.closeAll(): Cannot close transaction when none are open.'\\n    ) : invariant(this.isInTransaction()));\\n    var transactionWrappers = this.transactionWrappers;\\n    for (var i = startIndex; i < transactionWrappers.length; i++) {\\n      var wrapper = transactionWrappers[i];\\n      var initData = this.wrapperInitData[i];\\n      var errorThrown;\\n      try {\\n        // Catching errors makes debugging more difficult, so we start with\\n        // errorThrown set to true before setting it to false after calling\\n        // close -- if it's still set to true in the finally block, it means\\n        // wrapper.close threw.\\n        errorThrown = true;\\n        if (initData !== Transaction.OBSERVED_ERROR) {\\n          wrapper.close && wrapper.close.call(this, initData);\\n        }\\n        errorThrown = false;\\n      } finally {\\n        if (errorThrown) {\\n          // The closer for wrapper i threw an error; close the remaining\\n          // wrappers but silence any exceptions from them to ensure that the\\n          // first error is the one to bubble up.\\n          try {\\n            this.closeAll(i + 1);\\n          } catch (e) {\\n          }\\n        }\\n      }\\n    }\\n    this.wrapperInitData.length = 0;\\n  }\\n};\\n\\nvar Transaction = {\\n\\n  Mixin: Mixin,\\n\\n  /**\\n   * Token to look for to determine if an error occured.\\n   */\\n  OBSERVED_ERROR: {}\\n\\n};\\n\\nmodule.exports = Transaction;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/Transaction.js\\n ** module id = 27\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/Transaction.js?\");\n\n/***/ },\n/* 28 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/CallbackQueue.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule CallbackQueue\\n */\\n\\n\\\"use strict\\\";\\n\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 17);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * A specialized pseudo-event module to help keep track of components waiting to\\n * be notified when their DOM representations are available for use.\\n *\\n * This implements `PooledClass`, so you should never need to instantiate this.\\n * Instead, use `CallbackQueue.getPooled()`.\\n *\\n * @class ReactMountReady\\n * @implements PooledClass\\n * @internal\\n */\\nfunction CallbackQueue() {\\n  this._callbacks = null;\\n  this._contexts = null;\\n}\\n\\nassign(CallbackQueue.prototype, {\\n\\n  /**\\n   * Enqueues a callback to be invoked when `notifyAll` is invoked.\\n   *\\n   * @param {function} callback Invoked when `notifyAll` is invoked.\\n   * @param {?object} context Context to call `callback` with.\\n   * @internal\\n   */\\n  enqueue: function(callback, context) {\\n    this._callbacks = this._callbacks || [];\\n    this._contexts = this._contexts || [];\\n    this._callbacks.push(callback);\\n    this._contexts.push(context);\\n  },\\n\\n  /**\\n   * Invokes all enqueued callbacks and clears the queue. This is invoked after\\n   * the DOM representation of a component has been created or updated.\\n   *\\n   * @internal\\n   */\\n  notifyAll: function() {\\n    var callbacks = this._callbacks;\\n    var contexts = this._contexts;\\n    if (callbacks) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        callbacks.length === contexts.length,\\n        \\\"Mismatched list of contexts in callback queue\\\"\\n      ) : invariant(callbacks.length === contexts.length));\\n      this._callbacks = null;\\n      this._contexts = null;\\n      for (var i = 0, l = callbacks.length; i < l; i++) {\\n        callbacks[i].call(contexts[i]);\\n      }\\n      callbacks.length = 0;\\n      contexts.length = 0;\\n    }\\n  },\\n\\n  /**\\n   * Resets the internal queue.\\n   *\\n   * @internal\\n   */\\n  reset: function() {\\n    this._callbacks = null;\\n    this._contexts = null;\\n  },\\n\\n  /**\\n   * `PooledClass` looks for this.\\n   */\\n  destructor: function() {\\n    this.reset();\\n  }\\n\\n});\\n\\nPooledClass.addPoolingTo(CallbackQueue);\\n\\nmodule.exports = CallbackQueue;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/CallbackQueue.js\\n ** module id = 28\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/CallbackQueue.js?\");\n\n/***/ },\n/* 29 */\n/*!**********************************!*\\\n  !*** ./~/react/lib/ReactPerf.js ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactPerf\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * ReactPerf is a general AOP system designed to measure performance. This\\n * module only has the hooks: see ReactDefaultPerf for the analysis tool.\\n */\\nvar ReactPerf = {\\n  /**\\n   * Boolean to enable/disable measurement. Set to false by default to prevent\\n   * accidental logging and perf loss.\\n   */\\n  enableMeasure: false,\\n\\n  /**\\n   * Holds onto the measure function in use. By default, don't measure\\n   * anything, but we'll override this if we inject a measure function.\\n   */\\n  storedMeasure: _noMeasure,\\n\\n  /**\\n   * Use this to wrap methods you want to measure. Zero overhead in production.\\n   *\\n   * @param {string} objName\\n   * @param {string} fnName\\n   * @param {function} func\\n   * @return {function}\\n   */\\n  measure: function(objName, fnName, func) {\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      var measuredFunc = null;\\n      var wrapper = function() {\\n        if (ReactPerf.enableMeasure) {\\n          if (!measuredFunc) {\\n            measuredFunc = ReactPerf.storedMeasure(objName, fnName, func);\\n          }\\n          return measuredFunc.apply(this, arguments);\\n        }\\n        return func.apply(this, arguments);\\n      };\\n      wrapper.displayName = objName + '_' + fnName;\\n      return wrapper;\\n    }\\n    return func;\\n  },\\n\\n  injection: {\\n    /**\\n     * @param {function} measure\\n     */\\n    injectMeasure: function(measure) {\\n      ReactPerf.storedMeasure = measure;\\n    }\\n  }\\n};\\n\\n/**\\n * Simply passes through the measured function, without measuring it.\\n *\\n * @param {string} objName\\n * @param {string} fnName\\n * @param {function} func\\n * @return {function}\\n */\\nfunction _noMeasure(objName, fnName, func) {\\n  return func;\\n}\\n\\nmodule.exports = ReactPerf;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactPerf.js\\n ** module id = 29\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactPerf.js?\");\n\n/***/ },\n/* 30 */\n/*!************************************************!*\\\n  !*** ./~/react/lib/ReactCompositeComponent.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactCompositeComponent\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 23);\\nvar ReactContext = __webpack_require__(/*! ./ReactContext */ 20);\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 22);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactElementValidator = __webpack_require__(/*! ./ReactElementValidator */ 31);\\nvar ReactEmptyComponent = __webpack_require__(/*! ./ReactEmptyComponent */ 34);\\nvar ReactErrorUtils = __webpack_require__(/*! ./ReactErrorUtils */ 35);\\nvar ReactLegacyElement = __webpack_require__(/*! ./ReactLegacyElement */ 36);\\nvar ReactOwner = __webpack_require__(/*! ./ReactOwner */ 24);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\nvar ReactPropTransferer = __webpack_require__(/*! ./ReactPropTransferer */ 37);\\nvar ReactPropTypeLocations = __webpack_require__(/*! ./ReactPropTypeLocations */ 32);\\nvar ReactPropTypeLocationNames = __webpack_require__(/*! ./ReactPropTypeLocationNames */ 39);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar instantiateReactComponent = __webpack_require__(/*! ./instantiateReactComponent */ 40);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar keyMirror = __webpack_require__(/*! ./keyMirror */ 15);\\nvar keyOf = __webpack_require__(/*! ./keyOf */ 42);\\nvar monitorCodeUse = __webpack_require__(/*! ./monitorCodeUse */ 33);\\nvar mapObject = __webpack_require__(/*! ./mapObject */ 43);\\nvar shouldUpdateReactComponent = __webpack_require__(/*! ./shouldUpdateReactComponent */ 44);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar MIXINS_KEY = keyOf({mixins: null});\\n\\n/**\\n * Policies that describe methods in `ReactCompositeComponentInterface`.\\n */\\nvar SpecPolicy = keyMirror({\\n  /**\\n   * These methods may be defined only once by the class specification or mixin.\\n   */\\n  DEFINE_ONCE: null,\\n  /**\\n   * These methods may be defined by both the class specification and mixins.\\n   * Subsequent definitions will be chained. These methods must return void.\\n   */\\n  DEFINE_MANY: null,\\n  /**\\n   * These methods are overriding the base ReactCompositeComponent class.\\n   */\\n  OVERRIDE_BASE: null,\\n  /**\\n   * These methods are similar to DEFINE_MANY, except we assume they return\\n   * objects. We try to merge the keys of the return values of all the mixed in\\n   * functions. If there is a key conflict we throw.\\n   */\\n  DEFINE_MANY_MERGED: null\\n});\\n\\n\\nvar injectedMixins = [];\\n\\n/**\\n * Composite components are higher-level components that compose other composite\\n * or native components.\\n *\\n * To create a new type of `ReactCompositeComponent`, pass a specification of\\n * your new class to `React.createClass`. The only requirement of your class\\n * specification is that you implement a `render` method.\\n *\\n *   var MyComponent = React.createClass({\\n *     render: function() {\\n *       return <div>Hello World</div>;\\n *     }\\n *   });\\n *\\n * The class specification supports a specific protocol of methods that have\\n * special meaning (e.g. `render`). See `ReactCompositeComponentInterface` for\\n * more the comprehensive protocol. Any other properties and methods in the\\n * class specification will available on the prototype.\\n *\\n * @interface ReactCompositeComponentInterface\\n * @internal\\n */\\nvar ReactCompositeComponentInterface = {\\n\\n  /**\\n   * An array of Mixin objects to include when defining your component.\\n   *\\n   * @type {array}\\n   * @optional\\n   */\\n  mixins: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * An object containing properties and methods that should be defined on\\n   * the component's constructor instead of its prototype (static methods).\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  statics: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * Definition of prop types for this component.\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  propTypes: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * Definition of context types for this component.\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  contextTypes: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * Definition of context types this component sets for its children.\\n   *\\n   * @type {object}\\n   * @optional\\n   */\\n  childContextTypes: SpecPolicy.DEFINE_MANY,\\n\\n  // ==== Definition methods ====\\n\\n  /**\\n   * Invoked when the component is mounted. Values in the mapping will be set on\\n   * `this.props` if that prop is not specified (i.e. using an `in` check).\\n   *\\n   * This method is invoked before `getInitialState` and therefore cannot rely\\n   * on `this.state` or use `this.setState`.\\n   *\\n   * @return {object}\\n   * @optional\\n   */\\n  getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,\\n\\n  /**\\n   * Invoked once before the component is mounted. The return value will be used\\n   * as the initial value of `this.state`.\\n   *\\n   *   getInitialState: function() {\\n   *     return {\\n   *       isOn: false,\\n   *       fooBaz: new BazFoo()\\n   *     }\\n   *   }\\n   *\\n   * @return {object}\\n   * @optional\\n   */\\n  getInitialState: SpecPolicy.DEFINE_MANY_MERGED,\\n\\n  /**\\n   * @return {object}\\n   * @optional\\n   */\\n  getChildContext: SpecPolicy.DEFINE_MANY_MERGED,\\n\\n  /**\\n   * Uses props from `this.props` and state from `this.state` to render the\\n   * structure of the component.\\n   *\\n   * No guarantees are made about when or how often this method is invoked, so\\n   * it must not have side effects.\\n   *\\n   *   render: function() {\\n   *     var name = this.props.name;\\n   *     return <div>Hello, {name}!</div>;\\n   *   }\\n   *\\n   * @return {ReactComponent}\\n   * @nosideeffects\\n   * @required\\n   */\\n  render: SpecPolicy.DEFINE_ONCE,\\n\\n\\n\\n  // ==== Delegate methods ====\\n\\n  /**\\n   * Invoked when the component is initially created and about to be mounted.\\n   * This may have side effects, but any external subscriptions or data created\\n   * by this method must be cleaned up in `componentWillUnmount`.\\n   *\\n   * @optional\\n   */\\n  componentWillMount: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * Invoked when the component has been mounted and has a DOM representation.\\n   * However, there is no guarantee that the DOM node is in the document.\\n   *\\n   * Use this as an opportunity to operate on the DOM when the component has\\n   * been mounted (initialized and rendered) for the first time.\\n   *\\n   * @param {DOMElement} rootNode DOM element representing the component.\\n   * @optional\\n   */\\n  componentDidMount: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * Invoked before the component receives new props.\\n   *\\n   * Use this as an opportunity to react to a prop transition by updating the\\n   * state using `this.setState`. Current props are accessed via `this.props`.\\n   *\\n   *   componentWillReceiveProps: function(nextProps, nextContext) {\\n   *     this.setState({\\n   *       likesIncreasing: nextProps.likeCount > this.props.likeCount\\n   *     });\\n   *   }\\n   *\\n   * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\\n   * transition may cause a state change, but the opposite is not true. If you\\n   * need it, you are probably looking for `componentWillUpdate`.\\n   *\\n   * @param {object} nextProps\\n   * @optional\\n   */\\n  componentWillReceiveProps: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * Invoked while deciding if the component should be updated as a result of\\n   * receiving new props, state and/or context.\\n   *\\n   * Use this as an opportunity to `return false` when you're certain that the\\n   * transition to the new props/state/context will not require a component\\n   * update.\\n   *\\n   *   shouldComponentUpdate: function(nextProps, nextState, nextContext) {\\n   *     return !equal(nextProps, this.props) ||\\n   *       !equal(nextState, this.state) ||\\n   *       !equal(nextContext, this.context);\\n   *   }\\n   *\\n   * @param {object} nextProps\\n   * @param {?object} nextState\\n   * @param {?object} nextContext\\n   * @return {boolean} True if the component should update.\\n   * @optional\\n   */\\n  shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,\\n\\n  /**\\n   * Invoked when the component is about to update due to a transition from\\n   * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\\n   * and `nextContext`.\\n   *\\n   * Use this as an opportunity to perform preparation before an update occurs.\\n   *\\n   * NOTE: You **cannot** use `this.setState()` in this method.\\n   *\\n   * @param {object} nextProps\\n   * @param {?object} nextState\\n   * @param {?object} nextContext\\n   * @param {ReactReconcileTransaction} transaction\\n   * @optional\\n   */\\n  componentWillUpdate: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * Invoked when the component's DOM representation has been updated.\\n   *\\n   * Use this as an opportunity to operate on the DOM when the component has\\n   * been updated.\\n   *\\n   * @param {object} prevProps\\n   * @param {?object} prevState\\n   * @param {?object} prevContext\\n   * @param {DOMElement} rootNode DOM element representing the component.\\n   * @optional\\n   */\\n  componentDidUpdate: SpecPolicy.DEFINE_MANY,\\n\\n  /**\\n   * Invoked when the component is about to be removed from its parent and have\\n   * its DOM representation destroyed.\\n   *\\n   * Use this as an opportunity to deallocate any external resources.\\n   *\\n   * NOTE: There is no `componentDidUnmount` since your component will have been\\n   * destroyed by that point.\\n   *\\n   * @optional\\n   */\\n  componentWillUnmount: SpecPolicy.DEFINE_MANY,\\n\\n\\n\\n  // ==== Advanced methods ====\\n\\n  /**\\n   * Updates the component's currently mounted DOM representation.\\n   *\\n   * By default, this implements React's rendering and reconciliation algorithm.\\n   * Sophisticated clients may wish to override this.\\n   *\\n   * @param {ReactReconcileTransaction} transaction\\n   * @internal\\n   * @overridable\\n   */\\n  updateComponent: SpecPolicy.OVERRIDE_BASE\\n\\n};\\n\\n/**\\n * Mapping from class specification keys to special processing functions.\\n *\\n * Although these are declared like instance properties in the specification\\n * when defining classes using `React.createClass`, they are actually static\\n * and are accessible on the constructor instead of the prototype. Despite\\n * being static, they must be defined outside of the \\\"statics\\\" key under\\n * which all other static methods are defined.\\n */\\nvar RESERVED_SPEC_KEYS = {\\n  displayName: function(Constructor, displayName) {\\n    Constructor.displayName = displayName;\\n  },\\n  mixins: function(Constructor, mixins) {\\n    if (mixins) {\\n      for (var i = 0; i < mixins.length; i++) {\\n        mixSpecIntoComponent(Constructor, mixins[i]);\\n      }\\n    }\\n  },\\n  childContextTypes: function(Constructor, childContextTypes) {\\n    validateTypeDef(\\n      Constructor,\\n      childContextTypes,\\n      ReactPropTypeLocations.childContext\\n    );\\n    Constructor.childContextTypes = assign(\\n      {},\\n      Constructor.childContextTypes,\\n      childContextTypes\\n    );\\n  },\\n  contextTypes: function(Constructor, contextTypes) {\\n    validateTypeDef(\\n      Constructor,\\n      contextTypes,\\n      ReactPropTypeLocations.context\\n    );\\n    Constructor.contextTypes = assign(\\n      {},\\n      Constructor.contextTypes,\\n      contextTypes\\n    );\\n  },\\n  /**\\n   * Special case getDefaultProps which should move into statics but requires\\n   * automatic merging.\\n   */\\n  getDefaultProps: function(Constructor, getDefaultProps) {\\n    if (Constructor.getDefaultProps) {\\n      Constructor.getDefaultProps = createMergedResultFunction(\\n        Constructor.getDefaultProps,\\n        getDefaultProps\\n      );\\n    } else {\\n      Constructor.getDefaultProps = getDefaultProps;\\n    }\\n  },\\n  propTypes: function(Constructor, propTypes) {\\n    validateTypeDef(\\n      Constructor,\\n      propTypes,\\n      ReactPropTypeLocations.prop\\n    );\\n    Constructor.propTypes = assign(\\n      {},\\n      Constructor.propTypes,\\n      propTypes\\n    );\\n  },\\n  statics: function(Constructor, statics) {\\n    mixStaticSpecIntoComponent(Constructor, statics);\\n  }\\n};\\n\\nfunction getDeclarationErrorAddendum(component) {\\n  var owner = component._owner || null;\\n  if (owner && owner.constructor && owner.constructor.displayName) {\\n    return ' Check the render method of `' + owner.constructor.displayName +\\n      '`.';\\n  }\\n  return '';\\n}\\n\\nfunction validateTypeDef(Constructor, typeDef, location) {\\n  for (var propName in typeDef) {\\n    if (typeDef.hasOwnProperty(propName)) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        typeof typeDef[propName] == 'function',\\n        '%s: %s type `%s` is invalid; it must be a function, usually from ' +\\n        'React.PropTypes.',\\n        Constructor.displayName || 'ReactCompositeComponent',\\n        ReactPropTypeLocationNames[location],\\n        propName\\n      ) : invariant(typeof typeDef[propName] == 'function'));\\n    }\\n  }\\n}\\n\\nfunction validateMethodOverride(proto, name) {\\n  var specPolicy = ReactCompositeComponentInterface.hasOwnProperty(name) ?\\n    ReactCompositeComponentInterface[name] :\\n    null;\\n\\n  // Disallow overriding of base class methods unless explicitly allowed.\\n  if (ReactCompositeComponentMixin.hasOwnProperty(name)) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      specPolicy === SpecPolicy.OVERRIDE_BASE,\\n      'ReactCompositeComponentInterface: You are attempting to override ' +\\n      '`%s` from your class specification. Ensure that your method names ' +\\n      'do not overlap with React methods.',\\n      name\\n    ) : invariant(specPolicy === SpecPolicy.OVERRIDE_BASE));\\n  }\\n\\n  // Disallow defining methods more than once unless explicitly allowed.\\n  if (proto.hasOwnProperty(name)) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      specPolicy === SpecPolicy.DEFINE_MANY ||\\n      specPolicy === SpecPolicy.DEFINE_MANY_MERGED,\\n      'ReactCompositeComponentInterface: You are attempting to define ' +\\n      '`%s` on your component more than once. This conflict may be due ' +\\n      'to a mixin.',\\n      name\\n    ) : invariant(specPolicy === SpecPolicy.DEFINE_MANY ||\\n    specPolicy === SpecPolicy.DEFINE_MANY_MERGED));\\n  }\\n}\\n\\nfunction validateLifeCycleOnReplaceState(instance) {\\n  var compositeLifeCycleState = instance._compositeLifeCycleState;\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    instance.isMounted() ||\\n      compositeLifeCycleState === CompositeLifeCycle.MOUNTING,\\n    'replaceState(...): Can only update a mounted or mounting component.'\\n  ) : invariant(instance.isMounted() ||\\n    compositeLifeCycleState === CompositeLifeCycle.MOUNTING));\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    ReactCurrentOwner.current == null,\\n    'replaceState(...): Cannot update during an existing state transition ' +\\n    '(such as within `render`). Render methods should be a pure function ' +\\n    'of props and state.'\\n  ) : invariant(ReactCurrentOwner.current == null));\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(compositeLifeCycleState !== CompositeLifeCycle.UNMOUNTING,\\n    'replaceState(...): Cannot update while unmounting component. This ' +\\n    'usually means you called setState() on an unmounted component.'\\n  ) : invariant(compositeLifeCycleState !== CompositeLifeCycle.UNMOUNTING));\\n}\\n\\n/**\\n * Mixin helper which handles policy validation and reserved\\n * specification keys when building `ReactCompositeComponent` classses.\\n */\\nfunction mixSpecIntoComponent(Constructor, spec) {\\n  if (!spec) {\\n    return;\\n  }\\n\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    !ReactLegacyElement.isValidFactory(spec),\\n    'ReactCompositeComponent: You\\\\'re attempting to ' +\\n    'use a component class as a mixin. Instead, just use a regular object.'\\n  ) : invariant(!ReactLegacyElement.isValidFactory(spec)));\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    !ReactElement.isValidElement(spec),\\n    'ReactCompositeComponent: You\\\\'re attempting to ' +\\n    'use a component as a mixin. Instead, just use a regular object.'\\n  ) : invariant(!ReactElement.isValidElement(spec)));\\n\\n  var proto = Constructor.prototype;\\n\\n  // By handling mixins before any other properties, we ensure the same\\n  // chaining order is applied to methods with DEFINE_MANY policy, whether\\n  // mixins are listed before or after these methods in the spec.\\n  if (spec.hasOwnProperty(MIXINS_KEY)) {\\n    RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\\n  }\\n\\n  for (var name in spec) {\\n    if (!spec.hasOwnProperty(name)) {\\n      continue;\\n    }\\n\\n    if (name === MIXINS_KEY) {\\n      // We have already handled mixins in a special case above\\n      continue;\\n    }\\n\\n    var property = spec[name];\\n    validateMethodOverride(proto, name);\\n\\n    if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\\n      RESERVED_SPEC_KEYS[name](Constructor, property);\\n    } else {\\n      // Setup methods on prototype:\\n      // The following member methods should not be automatically bound:\\n      // 1. Expected ReactCompositeComponent methods (in the \\\"interface\\\").\\n      // 2. Overridden methods (that were mixed in).\\n      var isCompositeComponentMethod =\\n        ReactCompositeComponentInterface.hasOwnProperty(name);\\n      var isAlreadyDefined = proto.hasOwnProperty(name);\\n      var markedDontBind = property && property.__reactDontBind;\\n      var isFunction = typeof property === 'function';\\n      var shouldAutoBind =\\n        isFunction &&\\n        !isCompositeComponentMethod &&\\n        !isAlreadyDefined &&\\n        !markedDontBind;\\n\\n      if (shouldAutoBind) {\\n        if (!proto.__reactAutoBindMap) {\\n          proto.__reactAutoBindMap = {};\\n        }\\n        proto.__reactAutoBindMap[name] = property;\\n        proto[name] = property;\\n      } else {\\n        if (isAlreadyDefined) {\\n          var specPolicy = ReactCompositeComponentInterface[name];\\n\\n          // These cases should already be caught by validateMethodOverride\\n          (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n            isCompositeComponentMethod && (\\n              specPolicy === SpecPolicy.DEFINE_MANY_MERGED ||\\n              specPolicy === SpecPolicy.DEFINE_MANY\\n            ),\\n            'ReactCompositeComponent: Unexpected spec policy %s for key %s ' +\\n            'when mixing in component specs.',\\n            specPolicy,\\n            name\\n          ) : invariant(isCompositeComponentMethod && (\\n            specPolicy === SpecPolicy.DEFINE_MANY_MERGED ||\\n            specPolicy === SpecPolicy.DEFINE_MANY\\n          )));\\n\\n          // For methods which are defined more than once, call the existing\\n          // methods before calling the new property, merging if appropriate.\\n          if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) {\\n            proto[name] = createMergedResultFunction(proto[name], property);\\n          } else if (specPolicy === SpecPolicy.DEFINE_MANY) {\\n            proto[name] = createChainedFunction(proto[name], property);\\n          }\\n        } else {\\n          proto[name] = property;\\n          if (\\\"production\\\" !== process.env.NODE_ENV) {\\n            // Add verbose displayName to the function, which helps when looking\\n            // at profiling tools.\\n            if (typeof property === 'function' && spec.displayName) {\\n              proto[name].displayName = spec.displayName + '_' + name;\\n            }\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\n\\nfunction mixStaticSpecIntoComponent(Constructor, statics) {\\n  if (!statics) {\\n    return;\\n  }\\n  for (var name in statics) {\\n    var property = statics[name];\\n    if (!statics.hasOwnProperty(name)) {\\n      continue;\\n    }\\n\\n    var isReserved = name in RESERVED_SPEC_KEYS;\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      !isReserved,\\n      'ReactCompositeComponent: You are attempting to define a reserved ' +\\n      'property, `%s`, that shouldn\\\\'t be on the \\\"statics\\\" key. Define it ' +\\n      'as an instance property instead; it will still be accessible on the ' +\\n      'constructor.',\\n      name\\n    ) : invariant(!isReserved));\\n\\n    var isInherited = name in Constructor;\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      !isInherited,\\n      'ReactCompositeComponent: You are attempting to define ' +\\n      '`%s` on your component more than once. This conflict may be ' +\\n      'due to a mixin.',\\n      name\\n    ) : invariant(!isInherited));\\n    Constructor[name] = property;\\n  }\\n}\\n\\n/**\\n * Merge two objects, but throw if both contain the same key.\\n *\\n * @param {object} one The first object, which is mutated.\\n * @param {object} two The second object\\n * @return {object} one after it has been mutated to contain everything in two.\\n */\\nfunction mergeObjectsWithNoDuplicateKeys(one, two) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    one && two && typeof one === 'object' && typeof two === 'object',\\n    'mergeObjectsWithNoDuplicateKeys(): Cannot merge non-objects'\\n  ) : invariant(one && two && typeof one === 'object' && typeof two === 'object'));\\n\\n  mapObject(two, function(value, key) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      one[key] === undefined,\\n      'mergeObjectsWithNoDuplicateKeys(): ' +\\n      'Tried to merge two objects with the same key: `%s`. This conflict ' +\\n      'may be due to a mixin; in particular, this may be caused by two ' +\\n      'getInitialState() or getDefaultProps() methods returning objects ' +\\n      'with clashing keys.',\\n      key\\n    ) : invariant(one[key] === undefined));\\n    one[key] = value;\\n  });\\n  return one;\\n}\\n\\n/**\\n * Creates a function that invokes two functions and merges their return values.\\n *\\n * @param {function} one Function to invoke first.\\n * @param {function} two Function to invoke second.\\n * @return {function} Function that invokes the two argument functions.\\n * @private\\n */\\nfunction createMergedResultFunction(one, two) {\\n  return function mergedResult() {\\n    var a = one.apply(this, arguments);\\n    var b = two.apply(this, arguments);\\n    if (a == null) {\\n      return b;\\n    } else if (b == null) {\\n      return a;\\n    }\\n    return mergeObjectsWithNoDuplicateKeys(a, b);\\n  };\\n}\\n\\n/**\\n * Creates a function that invokes two functions and ignores their return vales.\\n *\\n * @param {function} one Function to invoke first.\\n * @param {function} two Function to invoke second.\\n * @return {function} Function that invokes the two argument functions.\\n * @private\\n */\\nfunction createChainedFunction(one, two) {\\n  return function chainedFunction() {\\n    one.apply(this, arguments);\\n    two.apply(this, arguments);\\n  };\\n}\\n\\n/**\\n * `ReactCompositeComponent` maintains an auxiliary life cycle state in\\n * `this._compositeLifeCycleState` (which can be null).\\n *\\n * This is different from the life cycle state maintained by `ReactComponent` in\\n * `this._lifeCycleState`. The following diagram shows how the states overlap in\\n * time. There are times when the CompositeLifeCycle is null - at those times it\\n * is only meaningful to look at ComponentLifeCycle alone.\\n *\\n * Top Row: ReactComponent.ComponentLifeCycle\\n * Low Row: ReactComponent.CompositeLifeCycle\\n *\\n * +-------+---------------------------------+--------+\\n * |  UN   |             MOUNTED             |   UN   |\\n * |MOUNTED|                                 | MOUNTED|\\n * +-------+---------------------------------+--------+\\n * |       ^--------+   +-------+   +--------^        |\\n * |       |        |   |       |   |        |        |\\n * |    0--|MOUNTING|-0-|RECEIVE|-0-|   UN   |--->0   |\\n * |       |        |   |PROPS  |   |MOUNTING|        |\\n * |       |        |   |       |   |        |        |\\n * |       |        |   |       |   |        |        |\\n * |       +--------+   +-------+   +--------+        |\\n * |       |                                 |        |\\n * +-------+---------------------------------+--------+\\n */\\nvar CompositeLifeCycle = keyMirror({\\n  /**\\n   * Components in the process of being mounted respond to state changes\\n   * differently.\\n   */\\n  MOUNTING: null,\\n  /**\\n   * Components in the process of being unmounted are guarded against state\\n   * changes.\\n   */\\n  UNMOUNTING: null,\\n  /**\\n   * Components that are mounted and receiving new props respond to state\\n   * changes differently.\\n   */\\n  RECEIVING_PROPS: null\\n});\\n\\n/**\\n * @lends {ReactCompositeComponent.prototype}\\n */\\nvar ReactCompositeComponentMixin = {\\n\\n  /**\\n   * Base constructor for all composite component.\\n   *\\n   * @param {ReactElement} element\\n   * @final\\n   * @internal\\n   */\\n  construct: function(element) {\\n    // Children can be either an array or more than one argument\\n    ReactComponent.Mixin.construct.apply(this, arguments);\\n    ReactOwner.Mixin.construct.apply(this, arguments);\\n\\n    this.state = null;\\n    this._pendingState = null;\\n\\n    // This is the public post-processed context. The real context and pending\\n    // context lives on the element.\\n    this.context = null;\\n\\n    this._compositeLifeCycleState = null;\\n  },\\n\\n  /**\\n   * Checks whether or not this composite component is mounted.\\n   * @return {boolean} True if mounted, false otherwise.\\n   * @protected\\n   * @final\\n   */\\n  isMounted: function() {\\n    return ReactComponent.Mixin.isMounted.call(this) &&\\n      this._compositeLifeCycleState !== CompositeLifeCycle.MOUNTING;\\n  },\\n\\n  /**\\n   * Initializes the component, renders markup, and registers event listeners.\\n   *\\n   * @param {string} rootID DOM ID of the root node.\\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n   * @param {number} mountDepth number of components in the owner hierarchy\\n   * @return {?string} Rendered markup to be inserted into the DOM.\\n   * @final\\n   * @internal\\n   */\\n  mountComponent: ReactPerf.measure(\\n    'ReactCompositeComponent',\\n    'mountComponent',\\n    function(rootID, transaction, mountDepth) {\\n      ReactComponent.Mixin.mountComponent.call(\\n        this,\\n        rootID,\\n        transaction,\\n        mountDepth\\n      );\\n      this._compositeLifeCycleState = CompositeLifeCycle.MOUNTING;\\n\\n      if (this.__reactAutoBindMap) {\\n        this._bindAutoBindMethods();\\n      }\\n\\n      this.context = this._processContext(this._currentElement._context);\\n      this.props = this._processProps(this.props);\\n\\n      this.state = this.getInitialState ? this.getInitialState() : null;\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        typeof this.state === 'object' && !Array.isArray(this.state),\\n        '%s.getInitialState(): must return an object or null',\\n        this.constructor.displayName || 'ReactCompositeComponent'\\n      ) : invariant(typeof this.state === 'object' && !Array.isArray(this.state)));\\n\\n      this._pendingState = null;\\n      this._pendingForceUpdate = false;\\n\\n      if (this.componentWillMount) {\\n        this.componentWillMount();\\n        // When mounting, calls to `setState` by `componentWillMount` will set\\n        // `this._pendingState` without triggering a re-render.\\n        if (this._pendingState) {\\n          this.state = this._pendingState;\\n          this._pendingState = null;\\n        }\\n      }\\n\\n      this._renderedComponent = instantiateReactComponent(\\n        this._renderValidatedComponent(),\\n        this._currentElement.type // The wrapping type\\n      );\\n\\n      // Done with mounting, `setState` will now trigger UI changes.\\n      this._compositeLifeCycleState = null;\\n      var markup = this._renderedComponent.mountComponent(\\n        rootID,\\n        transaction,\\n        mountDepth + 1\\n      );\\n      if (this.componentDidMount) {\\n        transaction.getReactMountReady().enqueue(this.componentDidMount, this);\\n      }\\n      return markup;\\n    }\\n  ),\\n\\n  /**\\n   * Releases any resources allocated by `mountComponent`.\\n   *\\n   * @final\\n   * @internal\\n   */\\n  unmountComponent: function() {\\n    this._compositeLifeCycleState = CompositeLifeCycle.UNMOUNTING;\\n    if (this.componentWillUnmount) {\\n      this.componentWillUnmount();\\n    }\\n    this._compositeLifeCycleState = null;\\n\\n    this._renderedComponent.unmountComponent();\\n    this._renderedComponent = null;\\n\\n    ReactComponent.Mixin.unmountComponent.call(this);\\n\\n    // Some existing components rely on this.props even after they've been\\n    // destroyed (in event handlers).\\n    // TODO: this.props = null;\\n    // TODO: this.state = null;\\n  },\\n\\n  /**\\n   * Sets a subset of the state. Always use this or `replaceState` to mutate\\n   * state. You should treat `this.state` as immutable.\\n   *\\n   * There is no guarantee that `this.state` will be immediately updated, so\\n   * accessing `this.state` after calling this method may return the old value.\\n   *\\n   * There is no guarantee that calls to `setState` will run synchronously,\\n   * as they may eventually be batched together.  You can provide an optional\\n   * callback that will be executed when the call to setState is actually\\n   * completed.\\n   *\\n   * @param {object} partialState Next partial state to be merged with state.\\n   * @param {?function} callback Called after state is updated.\\n   * @final\\n   * @protected\\n   */\\n  setState: function(partialState, callback) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      typeof partialState === 'object' || partialState == null,\\n      'setState(...): takes an object of state variables to update.'\\n    ) : invariant(typeof partialState === 'object' || partialState == null));\\n    if (\\\"production\\\" !== process.env.NODE_ENV){\\n      (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n        partialState != null,\\n        'setState(...): You passed an undefined or null state object; ' +\\n        'instead, use forceUpdate().'\\n      ) : null);\\n    }\\n    // Merge with `_pendingState` if it exists, otherwise with existing state.\\n    this.replaceState(\\n      assign({}, this._pendingState || this.state, partialState),\\n      callback\\n    );\\n  },\\n\\n  /**\\n   * Replaces all of the state. Always use this or `setState` to mutate state.\\n   * You should treat `this.state` as immutable.\\n   *\\n   * There is no guarantee that `this.state` will be immediately updated, so\\n   * accessing `this.state` after calling this method may return the old value.\\n   *\\n   * @param {object} completeState Next state.\\n   * @param {?function} callback Called after state is updated.\\n   * @final\\n   * @protected\\n   */\\n  replaceState: function(completeState, callback) {\\n    validateLifeCycleOnReplaceState(this);\\n    this._pendingState = completeState;\\n    if (this._compositeLifeCycleState !== CompositeLifeCycle.MOUNTING) {\\n      // If we're in a componentWillMount handler, don't enqueue a rerender\\n      // because ReactUpdates assumes we're in a browser context (which is wrong\\n      // for server rendering) and we're about to do a render anyway.\\n      // TODO: The callback here is ignored when setState is called from\\n      // componentWillMount. Either fix it or disallow doing so completely in\\n      // favor of getInitialState.\\n      ReactUpdates.enqueueUpdate(this, callback);\\n    }\\n  },\\n\\n  /**\\n   * Filters the context object to only contain keys specified in\\n   * `contextTypes`, and asserts that they are valid.\\n   *\\n   * @param {object} context\\n   * @return {?object}\\n   * @private\\n   */\\n  _processContext: function(context) {\\n    var maskedContext = null;\\n    var contextTypes = this.constructor.contextTypes;\\n    if (contextTypes) {\\n      maskedContext = {};\\n      for (var contextName in contextTypes) {\\n        maskedContext[contextName] = context[contextName];\\n      }\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        this._checkPropTypes(\\n          contextTypes,\\n          maskedContext,\\n          ReactPropTypeLocations.context\\n        );\\n      }\\n    }\\n    return maskedContext;\\n  },\\n\\n  /**\\n   * @param {object} currentContext\\n   * @return {object}\\n   * @private\\n   */\\n  _processChildContext: function(currentContext) {\\n    var childContext = this.getChildContext && this.getChildContext();\\n    var displayName = this.constructor.displayName || 'ReactCompositeComponent';\\n    if (childContext) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        typeof this.constructor.childContextTypes === 'object',\\n        '%s.getChildContext(): childContextTypes must be defined in order to ' +\\n        'use getChildContext().',\\n        displayName\\n      ) : invariant(typeof this.constructor.childContextTypes === 'object'));\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        this._checkPropTypes(\\n          this.constructor.childContextTypes,\\n          childContext,\\n          ReactPropTypeLocations.childContext\\n        );\\n      }\\n      for (var name in childContext) {\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          name in this.constructor.childContextTypes,\\n          '%s.getChildContext(): key \\\"%s\\\" is not defined in childContextTypes.',\\n          displayName,\\n          name\\n        ) : invariant(name in this.constructor.childContextTypes));\\n      }\\n      return assign({}, currentContext, childContext);\\n    }\\n    return currentContext;\\n  },\\n\\n  /**\\n   * Processes props by setting default values for unspecified props and\\n   * asserting that the props are valid. Does not mutate its argument; returns\\n   * a new props object with defaults merged in.\\n   *\\n   * @param {object} newProps\\n   * @return {object}\\n   * @private\\n   */\\n  _processProps: function(newProps) {\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      var propTypes = this.constructor.propTypes;\\n      if (propTypes) {\\n        this._checkPropTypes(propTypes, newProps, ReactPropTypeLocations.prop);\\n      }\\n    }\\n    return newProps;\\n  },\\n\\n  /**\\n   * Assert that the props are valid\\n   *\\n   * @param {object} propTypes Map of prop name to a ReactPropType\\n   * @param {object} props\\n   * @param {string} location e.g. \\\"prop\\\", \\\"context\\\", \\\"child context\\\"\\n   * @private\\n   */\\n  _checkPropTypes: function(propTypes, props, location) {\\n    // TODO: Stop validating prop types here and only use the element\\n    // validation.\\n    var componentName = this.constructor.displayName;\\n    for (var propName in propTypes) {\\n      if (propTypes.hasOwnProperty(propName)) {\\n        var error =\\n          propTypes[propName](props, propName, componentName, location);\\n        if (error instanceof Error) {\\n          // We may want to extend this logic for similar errors in\\n          // renderComponent calls, so I'm abstracting it away into\\n          // a function to minimize refactoring in the future\\n          var addendum = getDeclarationErrorAddendum(this);\\n          (\\\"production\\\" !== process.env.NODE_ENV ? warning(false, error.message + addendum) : null);\\n        }\\n      }\\n    }\\n  },\\n\\n  /**\\n   * If any of `_pendingElement`, `_pendingState`, or `_pendingForceUpdate`\\n   * is set, update the component.\\n   *\\n   * @param {ReactReconcileTransaction} transaction\\n   * @internal\\n   */\\n  performUpdateIfNecessary: function(transaction) {\\n    var compositeLifeCycleState = this._compositeLifeCycleState;\\n    // Do not trigger a state transition if we are in the middle of mounting or\\n    // receiving props because both of those will already be doing this.\\n    if (compositeLifeCycleState === CompositeLifeCycle.MOUNTING ||\\n        compositeLifeCycleState === CompositeLifeCycle.RECEIVING_PROPS) {\\n      return;\\n    }\\n\\n    if (this._pendingElement == null &&\\n        this._pendingState == null &&\\n        !this._pendingForceUpdate) {\\n      return;\\n    }\\n\\n    var nextContext = this.context;\\n    var nextProps = this.props;\\n    var nextElement = this._currentElement;\\n    if (this._pendingElement != null) {\\n      nextElement = this._pendingElement;\\n      nextContext = this._processContext(nextElement._context);\\n      nextProps = this._processProps(nextElement.props);\\n      this._pendingElement = null;\\n\\n      this._compositeLifeCycleState = CompositeLifeCycle.RECEIVING_PROPS;\\n      if (this.componentWillReceiveProps) {\\n        this.componentWillReceiveProps(nextProps, nextContext);\\n      }\\n    }\\n\\n    this._compositeLifeCycleState = null;\\n\\n    var nextState = this._pendingState || this.state;\\n    this._pendingState = null;\\n\\n    var shouldUpdate =\\n      this._pendingForceUpdate ||\\n      !this.shouldComponentUpdate ||\\n      this.shouldComponentUpdate(nextProps, nextState, nextContext);\\n\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      if (typeof shouldUpdate === \\\"undefined\\\") {\\n        console.warn(\\n          (this.constructor.displayName || 'ReactCompositeComponent') +\\n          '.shouldComponentUpdate(): Returned undefined instead of a ' +\\n          'boolean value. Make sure to return true or false.'\\n        );\\n      }\\n    }\\n\\n    if (shouldUpdate) {\\n      this._pendingForceUpdate = false;\\n      // Will set `this.props`, `this.state` and `this.context`.\\n      this._performComponentUpdate(\\n        nextElement,\\n        nextProps,\\n        nextState,\\n        nextContext,\\n        transaction\\n      );\\n    } else {\\n      // If it's determined that a component should not update, we still want\\n      // to set props and state.\\n      this._currentElement = nextElement;\\n      this.props = nextProps;\\n      this.state = nextState;\\n      this.context = nextContext;\\n\\n      // Owner cannot change because shouldUpdateReactComponent doesn't allow\\n      // it. TODO: Remove this._owner completely.\\n      this._owner = nextElement._owner;\\n    }\\n  },\\n\\n  /**\\n   * Merges new props and state, notifies delegate methods of update and\\n   * performs update.\\n   *\\n   * @param {ReactElement} nextElement Next element\\n   * @param {object} nextProps Next public object to set as properties.\\n   * @param {?object} nextState Next object to set as state.\\n   * @param {?object} nextContext Next public object to set as context.\\n   * @param {ReactReconcileTransaction} transaction\\n   * @private\\n   */\\n  _performComponentUpdate: function(\\n    nextElement,\\n    nextProps,\\n    nextState,\\n    nextContext,\\n    transaction\\n  ) {\\n    var prevElement = this._currentElement;\\n    var prevProps = this.props;\\n    var prevState = this.state;\\n    var prevContext = this.context;\\n\\n    if (this.componentWillUpdate) {\\n      this.componentWillUpdate(nextProps, nextState, nextContext);\\n    }\\n\\n    this._currentElement = nextElement;\\n    this.props = nextProps;\\n    this.state = nextState;\\n    this.context = nextContext;\\n\\n    // Owner cannot change because shouldUpdateReactComponent doesn't allow\\n    // it. TODO: Remove this._owner completely.\\n    this._owner = nextElement._owner;\\n\\n    this.updateComponent(\\n      transaction,\\n      prevElement\\n    );\\n\\n    if (this.componentDidUpdate) {\\n      transaction.getReactMountReady().enqueue(\\n        this.componentDidUpdate.bind(this, prevProps, prevState, prevContext),\\n        this\\n      );\\n    }\\n  },\\n\\n  receiveComponent: function(nextElement, transaction) {\\n    if (nextElement === this._currentElement &&\\n        nextElement._owner != null) {\\n      // Since elements are immutable after the owner is rendered,\\n      // we can do a cheap identity compare here to determine if this is a\\n      // superfluous reconcile. It's possible for state to be mutable but such\\n      // change should trigger an update of the owner which would recreate\\n      // the element. We explicitly check for the existence of an owner since\\n      // it's possible for a element created outside a composite to be\\n      // deeply mutated and reused.\\n      return;\\n    }\\n\\n    ReactComponent.Mixin.receiveComponent.call(\\n      this,\\n      nextElement,\\n      transaction\\n    );\\n  },\\n\\n  /**\\n   * Updates the component's currently mounted DOM representation.\\n   *\\n   * By default, this implements React's rendering and reconciliation algorithm.\\n   * Sophisticated clients may wish to override this.\\n   *\\n   * @param {ReactReconcileTransaction} transaction\\n   * @param {ReactElement} prevElement\\n   * @internal\\n   * @overridable\\n   */\\n  updateComponent: ReactPerf.measure(\\n    'ReactCompositeComponent',\\n    'updateComponent',\\n    function(transaction, prevParentElement) {\\n      ReactComponent.Mixin.updateComponent.call(\\n        this,\\n        transaction,\\n        prevParentElement\\n      );\\n\\n      var prevComponentInstance = this._renderedComponent;\\n      var prevElement = prevComponentInstance._currentElement;\\n      var nextElement = this._renderValidatedComponent();\\n      if (shouldUpdateReactComponent(prevElement, nextElement)) {\\n        prevComponentInstance.receiveComponent(nextElement, transaction);\\n      } else {\\n        // These two IDs are actually the same! But nothing should rely on that.\\n        var thisID = this._rootNodeID;\\n        var prevComponentID = prevComponentInstance._rootNodeID;\\n        prevComponentInstance.unmountComponent();\\n        this._renderedComponent = instantiateReactComponent(\\n          nextElement,\\n          this._currentElement.type\\n        );\\n        var nextMarkup = this._renderedComponent.mountComponent(\\n          thisID,\\n          transaction,\\n          this._mountDepth + 1\\n        );\\n        ReactComponent.BackendIDOperations.dangerouslyReplaceNodeWithMarkupByID(\\n          prevComponentID,\\n          nextMarkup\\n        );\\n      }\\n    }\\n  ),\\n\\n  /**\\n   * Forces an update. This should only be invoked when it is known with\\n   * certainty that we are **not** in a DOM transaction.\\n   *\\n   * You may want to call this when you know that some deeper aspect of the\\n   * component's state has changed but `setState` was not called.\\n   *\\n   * This will not invoke `shouldUpdateComponent`, but it will invoke\\n   * `componentWillUpdate` and `componentDidUpdate`.\\n   *\\n   * @param {?function} callback Called after update is complete.\\n   * @final\\n   * @protected\\n   */\\n  forceUpdate: function(callback) {\\n    var compositeLifeCycleState = this._compositeLifeCycleState;\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      this.isMounted() ||\\n        compositeLifeCycleState === CompositeLifeCycle.MOUNTING,\\n      'forceUpdate(...): Can only force an update on mounted or mounting ' +\\n        'components.'\\n    ) : invariant(this.isMounted() ||\\n      compositeLifeCycleState === CompositeLifeCycle.MOUNTING));\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      compositeLifeCycleState !== CompositeLifeCycle.UNMOUNTING &&\\n      ReactCurrentOwner.current == null,\\n      'forceUpdate(...): Cannot force an update while unmounting component ' +\\n      'or within a `render` function.'\\n    ) : invariant(compositeLifeCycleState !== CompositeLifeCycle.UNMOUNTING &&\\n    ReactCurrentOwner.current == null));\\n    this._pendingForceUpdate = true;\\n    ReactUpdates.enqueueUpdate(this, callback);\\n  },\\n\\n  /**\\n   * @private\\n   */\\n  _renderValidatedComponent: ReactPerf.measure(\\n    'ReactCompositeComponent',\\n    '_renderValidatedComponent',\\n    function() {\\n      var renderedComponent;\\n      var previousContext = ReactContext.current;\\n      ReactContext.current = this._processChildContext(\\n        this._currentElement._context\\n      );\\n      ReactCurrentOwner.current = this;\\n      try {\\n        renderedComponent = this.render();\\n        if (renderedComponent === null || renderedComponent === false) {\\n          renderedComponent = ReactEmptyComponent.getEmptyComponent();\\n          ReactEmptyComponent.registerNullComponentID(this._rootNodeID);\\n        } else {\\n          ReactEmptyComponent.deregisterNullComponentID(this._rootNodeID);\\n        }\\n      } finally {\\n        ReactContext.current = previousContext;\\n        ReactCurrentOwner.current = null;\\n      }\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        ReactElement.isValidElement(renderedComponent),\\n        '%s.render(): A valid ReactComponent must be returned. You may have ' +\\n          'returned undefined, an array or some other invalid object.',\\n        this.constructor.displayName || 'ReactCompositeComponent'\\n      ) : invariant(ReactElement.isValidElement(renderedComponent)));\\n      return renderedComponent;\\n    }\\n  ),\\n\\n  /**\\n   * @private\\n   */\\n  _bindAutoBindMethods: function() {\\n    for (var autoBindKey in this.__reactAutoBindMap) {\\n      if (!this.__reactAutoBindMap.hasOwnProperty(autoBindKey)) {\\n        continue;\\n      }\\n      var method = this.__reactAutoBindMap[autoBindKey];\\n      this[autoBindKey] = this._bindAutoBindMethod(ReactErrorUtils.guard(\\n        method,\\n        this.constructor.displayName + '.' + autoBindKey\\n      ));\\n    }\\n  },\\n\\n  /**\\n   * Binds a method to the component.\\n   *\\n   * @param {function} method Method to be bound.\\n   * @private\\n   */\\n  _bindAutoBindMethod: function(method) {\\n    var component = this;\\n    var boundMethod = method.bind(component);\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      boundMethod.__reactBoundContext = component;\\n      boundMethod.__reactBoundMethod = method;\\n      boundMethod.__reactBoundArguments = null;\\n      var componentName = component.constructor.displayName;\\n      var _bind = boundMethod.bind;\\n      boundMethod.bind = function(newThis ) {for (var args=[],$__0=1,$__1=arguments.length;$__0<$__1;$__0++) args.push(arguments[$__0]);\\n        // User is trying to bind() an autobound method; we effectively will\\n        // ignore the value of \\\"this\\\" that the user is trying to use, so\\n        // let's warn.\\n        if (newThis !== component && newThis !== null) {\\n          monitorCodeUse('react_bind_warning', { component: componentName });\\n          console.warn(\\n            'bind(): React component methods may only be bound to the ' +\\n            'component instance. See ' + componentName\\n          );\\n        } else if (!args.length) {\\n          monitorCodeUse('react_bind_warning', { component: componentName });\\n          console.warn(\\n            'bind(): You are binding a component method to the component. ' +\\n            'React does this for you automatically in a high-performance ' +\\n            'way, so you can safely remove this call. See ' + componentName\\n          );\\n          return boundMethod;\\n        }\\n        var reboundMethod = _bind.apply(boundMethod, arguments);\\n        reboundMethod.__reactBoundContext = component;\\n        reboundMethod.__reactBoundMethod = method;\\n        reboundMethod.__reactBoundArguments = args;\\n        return reboundMethod;\\n      };\\n    }\\n    return boundMethod;\\n  }\\n};\\n\\nvar ReactCompositeComponentBase = function() {};\\nassign(\\n  ReactCompositeComponentBase.prototype,\\n  ReactComponent.Mixin,\\n  ReactOwner.Mixin,\\n  ReactPropTransferer.Mixin,\\n  ReactCompositeComponentMixin\\n);\\n\\n/**\\n * Module for creating composite components.\\n *\\n * @class ReactCompositeComponent\\n * @extends ReactComponent\\n * @extends ReactOwner\\n * @extends ReactPropTransferer\\n */\\nvar ReactCompositeComponent = {\\n\\n  LifeCycle: CompositeLifeCycle,\\n\\n  Base: ReactCompositeComponentBase,\\n\\n  /**\\n   * Creates a composite component class given a class specification.\\n   *\\n   * @param {object} spec Class specification (which must define `render`).\\n   * @return {function} Component constructor function.\\n   * @public\\n   */\\n  createClass: function(spec) {\\n    var Constructor = function(props) {\\n      // This constructor is overridden by mocks. The argument is used\\n      // by mocks to assert on what gets mounted. This will later be used\\n      // by the stand-alone class implementation.\\n    };\\n    Constructor.prototype = new ReactCompositeComponentBase();\\n    Constructor.prototype.constructor = Constructor;\\n\\n    injectedMixins.forEach(\\n      mixSpecIntoComponent.bind(null, Constructor)\\n    );\\n\\n    mixSpecIntoComponent(Constructor, spec);\\n\\n    // Initialize the defaultProps property after all mixins have been merged\\n    if (Constructor.getDefaultProps) {\\n      Constructor.defaultProps = Constructor.getDefaultProps();\\n    }\\n\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      Constructor.prototype.render,\\n      'createClass(...): Class specification must implement a `render` method.'\\n    ) : invariant(Constructor.prototype.render));\\n\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      if (Constructor.prototype.componentShouldUpdate) {\\n        monitorCodeUse(\\n          'react_component_should_update_warning',\\n          { component: spec.displayName }\\n        );\\n        console.warn(\\n          (spec.displayName || 'A component') + ' has a method called ' +\\n          'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' +\\n          'The name is phrased as a question because the function is ' +\\n          'expected to return a value.'\\n         );\\n      }\\n    }\\n\\n    // Reduce time spent doing lookups by setting these on the prototype.\\n    for (var methodName in ReactCompositeComponentInterface) {\\n      if (!Constructor.prototype[methodName]) {\\n        Constructor.prototype[methodName] = null;\\n      }\\n    }\\n\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      return ReactLegacyElement.wrapFactory(\\n        ReactElementValidator.createFactory(Constructor)\\n      );\\n    }\\n    return ReactLegacyElement.wrapFactory(\\n      ReactElement.createFactory(Constructor)\\n    );\\n  },\\n\\n  injection: {\\n    injectMixin: function(mixin) {\\n      injectedMixins.push(mixin);\\n    }\\n  }\\n};\\n\\nmodule.exports = ReactCompositeComponent;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactCompositeComponent.js\\n ** module id = 30\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactCompositeComponent.js?\");\n\n/***/ },\n/* 31 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/ReactElementValidator.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactElementValidator\\n */\\n\\n/**\\n * ReactElementValidator provides a wrapper around a element factory\\n * which validates the props passed to the element. This is intended to be\\n * used only in DEV and could be replaced by a static type checker for languages\\n * that support it.\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactPropTypeLocations = __webpack_require__(/*! ./ReactPropTypeLocations */ 32);\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 22);\\n\\nvar monitorCodeUse = __webpack_require__(/*! ./monitorCodeUse */ 33);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\n/**\\n * Warn if there's no key explicitly set on dynamic arrays of children or\\n * object keys are not valid. This allows us to keep track of children between\\n * updates.\\n */\\nvar ownerHasKeyUseWarning = {\\n  'react_key_warning': {},\\n  'react_numeric_key_warning': {}\\n};\\nvar ownerHasMonitoredObjectMap = {};\\n\\nvar loggedTypeFailures = {};\\n\\nvar NUMERIC_PROPERTY_REGEX = /^\\\\d+$/;\\n\\n/**\\n * Gets the current owner's displayName for use in warnings.\\n *\\n * @internal\\n * @return {?string} Display name or undefined\\n */\\nfunction getCurrentOwnerDisplayName() {\\n  var current = ReactCurrentOwner.current;\\n  return current && current.constructor.displayName || undefined;\\n}\\n\\n/**\\n * Warn if the component doesn't have an explicit key assigned to it.\\n * This component is in an array. The array could grow and shrink or be\\n * reordered. All children that haven't already been validated are required to\\n * have a \\\"key\\\" property assigned to it.\\n *\\n * @internal\\n * @param {ReactComponent} component Component that requires a key.\\n * @param {*} parentType component's parent's type.\\n */\\nfunction validateExplicitKey(component, parentType) {\\n  if (component._store.validated || component.key != null) {\\n    return;\\n  }\\n  component._store.validated = true;\\n\\n  warnAndMonitorForKeyUse(\\n    'react_key_warning',\\n    'Each child in an array should have a unique \\\"key\\\" prop.',\\n    component,\\n    parentType\\n  );\\n}\\n\\n/**\\n * Warn if the key is being defined as an object property but has an incorrect\\n * value.\\n *\\n * @internal\\n * @param {string} name Property name of the key.\\n * @param {ReactComponent} component Component that requires a key.\\n * @param {*} parentType component's parent's type.\\n */\\nfunction validatePropertyKey(name, component, parentType) {\\n  if (!NUMERIC_PROPERTY_REGEX.test(name)) {\\n    return;\\n  }\\n  warnAndMonitorForKeyUse(\\n    'react_numeric_key_warning',\\n    'Child objects should have non-numeric keys so ordering is preserved.',\\n    component,\\n    parentType\\n  );\\n}\\n\\n/**\\n * Shared warning and monitoring code for the key warnings.\\n *\\n * @internal\\n * @param {string} warningID The id used when logging.\\n * @param {string} message The base warning that gets output.\\n * @param {ReactComponent} component Component that requires a key.\\n * @param {*} parentType component's parent's type.\\n */\\nfunction warnAndMonitorForKeyUse(warningID, message, component, parentType) {\\n  var ownerName = getCurrentOwnerDisplayName();\\n  var parentName = parentType.displayName;\\n\\n  var useName = ownerName || parentName;\\n  var memoizer = ownerHasKeyUseWarning[warningID];\\n  if (memoizer.hasOwnProperty(useName)) {\\n    return;\\n  }\\n  memoizer[useName] = true;\\n\\n  message += ownerName ?\\n    (\\\" Check the render method of \\\" + ownerName + \\\".\\\") :\\n    (\\\" Check the renderComponent call using <\\\" + parentName + \\\">.\\\");\\n\\n  // Usually the current owner is the offender, but if it accepts children as a\\n  // property, it may be the creator of the child that's responsible for\\n  // assigning it a key.\\n  var childOwnerName = null;\\n  if (component._owner && component._owner !== ReactCurrentOwner.current) {\\n    // Name of the component that originally created this child.\\n    childOwnerName = component._owner.constructor.displayName;\\n\\n    message += (\\\" It was passed a child from \\\" + childOwnerName + \\\".\\\");\\n  }\\n\\n  message += ' See http://fb.me/react-warning-keys for more information.';\\n  monitorCodeUse(warningID, {\\n    component: useName,\\n    componentOwner: childOwnerName\\n  });\\n  console.warn(message);\\n}\\n\\n/**\\n * Log that we're using an object map. We're considering deprecating this\\n * feature and replace it with proper Map and ImmutableMap data structures.\\n *\\n * @internal\\n */\\nfunction monitorUseOfObjectMap() {\\n  var currentName = getCurrentOwnerDisplayName() || '';\\n  if (ownerHasMonitoredObjectMap.hasOwnProperty(currentName)) {\\n    return;\\n  }\\n  ownerHasMonitoredObjectMap[currentName] = true;\\n  monitorCodeUse('react_object_map_children');\\n}\\n\\n/**\\n * Ensure that every component either is passed in a static location, in an\\n * array with an explicit keys property defined, or in an object literal\\n * with valid key property.\\n *\\n * @internal\\n * @param {*} component Statically passed child of any type.\\n * @param {*} parentType component's parent's type.\\n * @return {boolean}\\n */\\nfunction validateChildKeys(component, parentType) {\\n  if (Array.isArray(component)) {\\n    for (var i = 0; i < component.length; i++) {\\n      var child = component[i];\\n      if (ReactElement.isValidElement(child)) {\\n        validateExplicitKey(child, parentType);\\n      }\\n    }\\n  } else if (ReactElement.isValidElement(component)) {\\n    // This component was passed in a valid location.\\n    component._store.validated = true;\\n  } else if (component && typeof component === 'object') {\\n    monitorUseOfObjectMap();\\n    for (var name in component) {\\n      validatePropertyKey(name, component[name], parentType);\\n    }\\n  }\\n}\\n\\n/**\\n * Assert that the props are valid\\n *\\n * @param {string} componentName Name of the component for error messages.\\n * @param {object} propTypes Map of prop name to a ReactPropType\\n * @param {object} props\\n * @param {string} location e.g. \\\"prop\\\", \\\"context\\\", \\\"child context\\\"\\n * @private\\n */\\nfunction checkPropTypes(componentName, propTypes, props, location) {\\n  for (var propName in propTypes) {\\n    if (propTypes.hasOwnProperty(propName)) {\\n      var error;\\n      // Prop type validation may throw. In case they do, we don't want to\\n      // fail the render phase where it didn't fail before. So we log it.\\n      // After these have been cleaned up, we'll let them throw.\\n      try {\\n        error = propTypes[propName](props, propName, componentName, location);\\n      } catch (ex) {\\n        error = ex;\\n      }\\n      if (error instanceof Error && !(error.message in loggedTypeFailures)) {\\n        // Only monitor this failure once because there tends to be a lot of the\\n        // same error.\\n        loggedTypeFailures[error.message] = true;\\n        // This will soon use the warning module\\n        monitorCodeUse(\\n          'react_failed_descriptor_type_check',\\n          { message: error.message }\\n        );\\n      }\\n    }\\n  }\\n}\\n\\nvar ReactElementValidator = {\\n\\n  createElement: function(type, props, children) {\\n    // We warn in this case but don't throw. We expect the element creation to\\n    // succeed and there will likely be errors in render.\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      type != null,\\n      'React.createElement: type should not be null or undefined. It should ' +\\n        'be a string (for DOM elements) or a ReactClass (for composite ' +\\n        'components).'\\n    ) : null);\\n\\n    var element = ReactElement.createElement.apply(this, arguments);\\n\\n    // The result can be nullish if a mock or a custom function is used.\\n    // TODO: Drop this when these are no longer allowed as the type argument.\\n    if (element == null) {\\n      return element;\\n    }\\n\\n    for (var i = 2; i < arguments.length; i++) {\\n      validateChildKeys(arguments[i], type);\\n    }\\n\\n    if (type) {\\n      var name = type.displayName;\\n      if (type.propTypes) {\\n        checkPropTypes(\\n          name,\\n          type.propTypes,\\n          element.props,\\n          ReactPropTypeLocations.prop\\n        );\\n      }\\n      if (type.contextTypes) {\\n        checkPropTypes(\\n          name,\\n          type.contextTypes,\\n          element._context,\\n          ReactPropTypeLocations.context\\n        );\\n      }\\n    }\\n    return element;\\n  },\\n\\n  createFactory: function(type) {\\n    var validatedFactory = ReactElementValidator.createElement.bind(\\n      null,\\n      type\\n    );\\n    validatedFactory.type = type;\\n    return validatedFactory;\\n  }\\n\\n};\\n\\nmodule.exports = ReactElementValidator;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactElementValidator.js\\n ** module id = 31\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactElementValidator.js?\");\n\n/***/ },\n/* 32 */\n/*!***********************************************!*\\\n  !*** ./~/react/lib/ReactPropTypeLocations.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactPropTypeLocations\\n */\\n\\n\\\"use strict\\\";\\n\\nvar keyMirror = __webpack_require__(/*! ./keyMirror */ 15);\\n\\nvar ReactPropTypeLocations = keyMirror({\\n  prop: null,\\n  context: null,\\n  childContext: null\\n});\\n\\nmodule.exports = ReactPropTypeLocations;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactPropTypeLocations.js\\n ** module id = 32\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactPropTypeLocations.js?\");\n\n/***/ },\n/* 33 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/monitorCodeUse.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule monitorCodeUse\\n */\\n\\n\\\"use strict\\\";\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Provides open-source compatible instrumentation for monitoring certain API\\n * uses before we're ready to issue a warning or refactor. It accepts an event\\n * name which may only contain the characters [a-z0-9_] and an optional data\\n * object with further information.\\n */\\n\\nfunction monitorCodeUse(eventName, data) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    eventName && !/[^a-z0-9_]/.test(eventName),\\n    'You must provide an eventName using only the characters [a-z0-9_]'\\n  ) : invariant(eventName && !/[^a-z0-9_]/.test(eventName)));\\n}\\n\\nmodule.exports = monitorCodeUse;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/monitorCodeUse.js\\n ** module id = 33\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/monitorCodeUse.js?\");\n\n/***/ },\n/* 34 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/ReactEmptyComponent.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactEmptyComponent\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nvar component;\\n// This registry keeps track of the React IDs of the components that rendered to\\n// `null` (in reality a placeholder such as `noscript`)\\nvar nullComponentIdsRegistry = {};\\n\\nvar ReactEmptyComponentInjection = {\\n  injectEmptyComponent: function(emptyComponent) {\\n    component = ReactElement.createFactory(emptyComponent);\\n  }\\n};\\n\\n/**\\n * @return {ReactComponent} component The injected empty component.\\n */\\nfunction getEmptyComponent() {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    component,\\n    'Trying to return null from a render, but no null placeholder component ' +\\n    'was injected.'\\n  ) : invariant(component));\\n  return component();\\n}\\n\\n/**\\n * Mark the component as having rendered to null.\\n * @param {string} id Component's `_rootNodeID`.\\n */\\nfunction registerNullComponentID(id) {\\n  nullComponentIdsRegistry[id] = true;\\n}\\n\\n/**\\n * Unmark the component as having rendered to null: it renders to something now.\\n * @param {string} id Component's `_rootNodeID`.\\n */\\nfunction deregisterNullComponentID(id) {\\n  delete nullComponentIdsRegistry[id];\\n}\\n\\n/**\\n * @param {string} id Component's `_rootNodeID`.\\n * @return {boolean} True if the component is rendered to null.\\n */\\nfunction isNullComponentID(id) {\\n  return nullComponentIdsRegistry[id];\\n}\\n\\nvar ReactEmptyComponent = {\\n  deregisterNullComponentID: deregisterNullComponentID,\\n  getEmptyComponent: getEmptyComponent,\\n  injection: ReactEmptyComponentInjection,\\n  isNullComponentID: isNullComponentID,\\n  registerNullComponentID: registerNullComponentID\\n};\\n\\nmodule.exports = ReactEmptyComponent;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactEmptyComponent.js\\n ** module id = 34\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactEmptyComponent.js?\");\n\n/***/ },\n/* 35 */\n/*!****************************************!*\\\n  !*** ./~/react/lib/ReactErrorUtils.js ***!\n  \\****************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactErrorUtils\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactErrorUtils = {\\n  /**\\n   * Creates a guarded version of a function. This is supposed to make debugging\\n   * of event handlers easier. To aid debugging with the browser's debugger,\\n   * this currently simply returns the original function.\\n   *\\n   * @param {function} func Function to be executed\\n   * @param {string} name The name of the guard\\n   * @return {function}\\n   */\\n  guard: function(func, name) {\\n    return func;\\n  }\\n};\\n\\nmodule.exports = ReactErrorUtils;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactErrorUtils.js\\n ** module id = 35\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactErrorUtils.js?\");\n\n/***/ },\n/* 36 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/ReactLegacyElement.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactLegacyElement\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 22);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar monitorCodeUse = __webpack_require__(/*! ./monitorCodeUse */ 33);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar legacyFactoryLogs = {};\\nfunction warnForLegacyFactoryCall() {\\n  if (!ReactLegacyElementFactory._isLegacyCallWarningEnabled) {\\n    return;\\n  }\\n  var owner = ReactCurrentOwner.current;\\n  var name = owner && owner.constructor ? owner.constructor.displayName : '';\\n  if (!name) {\\n    name = 'Something';\\n  }\\n  if (legacyFactoryLogs.hasOwnProperty(name)) {\\n    return;\\n  }\\n  legacyFactoryLogs[name] = true;\\n  (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n    false,\\n    name + ' is calling a React component directly. ' +\\n    'Use a factory or JSX instead. See: http://fb.me/react-legacyfactory'\\n  ) : null);\\n  monitorCodeUse('react_legacy_factory_call', { version: 3, name: name });\\n}\\n\\nfunction warnForPlainFunctionType(type) {\\n  var isReactClass =\\n    type.prototype &&\\n    typeof type.prototype.mountComponent === 'function' &&\\n    typeof type.prototype.receiveComponent === 'function';\\n  if (isReactClass) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      false,\\n      'Did not expect to get a React class here. Use `Component` instead ' +\\n      'of `Component.type` or `this.constructor`.'\\n    ) : null);\\n  } else {\\n    if (!type._reactWarnedForThisType) {\\n      try {\\n        type._reactWarnedForThisType = true;\\n      } catch (x) {\\n        // just incase this is a frozen object or some special object\\n      }\\n      monitorCodeUse(\\n        'react_non_component_in_jsx',\\n        { version: 3, name: type.name }\\n      );\\n    }\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      false,\\n      'This JSX uses a plain function. Only React components are ' +\\n      'valid in React\\\\'s JSX transform.'\\n    ) : null);\\n  }\\n}\\n\\nfunction warnForNonLegacyFactory(type) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n    false,\\n    'Do not pass React.DOM.' + type.type + ' to JSX or createFactory. ' +\\n    'Use the string \\\"' + type.type + '\\\" instead.'\\n  ) : null);\\n}\\n\\n/**\\n * Transfer static properties from the source to the target. Functions are\\n * rebound to have this reflect the original source.\\n */\\nfunction proxyStaticMethods(target, source) {\\n  if (typeof source !== 'function') {\\n    return;\\n  }\\n  for (var key in source) {\\n    if (source.hasOwnProperty(key)) {\\n      var value = source[key];\\n      if (typeof value === 'function') {\\n        var bound = value.bind(source);\\n        // Copy any properties defined on the function, such as `isRequired` on\\n        // a PropTypes validator.\\n        for (var k in value) {\\n          if (value.hasOwnProperty(k)) {\\n            bound[k] = value[k];\\n          }\\n        }\\n        target[key] = bound;\\n      } else {\\n        target[key] = value;\\n      }\\n    }\\n  }\\n}\\n\\n// We use an object instead of a boolean because booleans are ignored by our\\n// mocking libraries when these factories gets mocked.\\nvar LEGACY_MARKER = {};\\nvar NON_LEGACY_MARKER = {};\\n\\nvar ReactLegacyElementFactory = {};\\n\\nReactLegacyElementFactory.wrapCreateFactory = function(createFactory) {\\n  var legacyCreateFactory = function(type) {\\n    if (typeof type !== 'function') {\\n      // Non-function types cannot be legacy factories\\n      return createFactory(type);\\n    }\\n\\n    if (type.isReactNonLegacyFactory) {\\n      // This is probably a factory created by ReactDOM we unwrap it to get to\\n      // the underlying string type. It shouldn't have been passed here so we\\n      // warn.\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        warnForNonLegacyFactory(type);\\n      }\\n      return createFactory(type.type);\\n    }\\n\\n    if (type.isReactLegacyFactory) {\\n      // This is probably a legacy factory created by ReactCompositeComponent.\\n      // We unwrap it to get to the underlying class.\\n      return createFactory(type.type);\\n    }\\n\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      warnForPlainFunctionType(type);\\n    }\\n\\n    // Unless it's a legacy factory, then this is probably a plain function,\\n    // that is expecting to be invoked by JSX. We can just return it as is.\\n    return type;\\n  };\\n  return legacyCreateFactory;\\n};\\n\\nReactLegacyElementFactory.wrapCreateElement = function(createElement) {\\n  var legacyCreateElement = function(type, props, children) {\\n    if (typeof type !== 'function') {\\n      // Non-function types cannot be legacy factories\\n      return createElement.apply(this, arguments);\\n    }\\n\\n    var args;\\n\\n    if (type.isReactNonLegacyFactory) {\\n      // This is probably a factory created by ReactDOM we unwrap it to get to\\n      // the underlying string type. It shouldn't have been passed here so we\\n      // warn.\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        warnForNonLegacyFactory(type);\\n      }\\n      args = Array.prototype.slice.call(arguments, 0);\\n      args[0] = type.type;\\n      return createElement.apply(this, args);\\n    }\\n\\n    if (type.isReactLegacyFactory) {\\n      // This is probably a legacy factory created by ReactCompositeComponent.\\n      // We unwrap it to get to the underlying class.\\n      if (type._isMockFunction) {\\n        // If this is a mock function, people will expect it to be called. We\\n        // will actually call the original mock factory function instead. This\\n        // future proofs unit testing that assume that these are classes.\\n        type.type._mockedReactClassConstructor = type;\\n      }\\n      args = Array.prototype.slice.call(arguments, 0);\\n      args[0] = type.type;\\n      return createElement.apply(this, args);\\n    }\\n\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      warnForPlainFunctionType(type);\\n    }\\n\\n    // This is being called with a plain function we should invoke it\\n    // immediately as if this was used with legacy JSX.\\n    return type.apply(null, Array.prototype.slice.call(arguments, 1));\\n  };\\n  return legacyCreateElement;\\n};\\n\\nReactLegacyElementFactory.wrapFactory = function(factory) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    typeof factory === 'function',\\n    'This is suppose to accept a element factory'\\n  ) : invariant(typeof factory === 'function'));\\n  var legacyElementFactory = function(config, children) {\\n    // This factory should not be called when JSX is used. Use JSX instead.\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      warnForLegacyFactoryCall();\\n    }\\n    return factory.apply(this, arguments);\\n  };\\n  proxyStaticMethods(legacyElementFactory, factory.type);\\n  legacyElementFactory.isReactLegacyFactory = LEGACY_MARKER;\\n  legacyElementFactory.type = factory.type;\\n  return legacyElementFactory;\\n};\\n\\n// This is used to mark a factory that will remain. E.g. we're allowed to call\\n// it as a function. However, you're not suppose to pass it to createElement\\n// or createFactory, so it will warn you if you do.\\nReactLegacyElementFactory.markNonLegacyFactory = function(factory) {\\n  factory.isReactNonLegacyFactory = NON_LEGACY_MARKER;\\n  return factory;\\n};\\n\\n// Checks if a factory function is actually a legacy factory pretending to\\n// be a class.\\nReactLegacyElementFactory.isValidFactory = function(factory) {\\n  // TODO: This will be removed and moved into a class validator or something.\\n  return typeof factory === 'function' &&\\n    factory.isReactLegacyFactory === LEGACY_MARKER;\\n};\\n\\nReactLegacyElementFactory.isValidClass = function(factory) {\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      false,\\n      'isValidClass is deprecated and will be removed in a future release. ' +\\n      'Use a more specific validator instead.'\\n    ) : null);\\n  }\\n  return ReactLegacyElementFactory.isValidFactory(factory);\\n};\\n\\nReactLegacyElementFactory._isLegacyCallWarningEnabled = true;\\n\\nmodule.exports = ReactLegacyElementFactory;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactLegacyElement.js\\n ** module id = 36\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactLegacyElement.js?\");\n\n/***/ },\n/* 37 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/ReactPropTransferer.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactPropTransferer\\n */\\n\\n\\\"use strict\\\";\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar joinClasses = __webpack_require__(/*! ./joinClasses */ 38);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar didWarn = false;\\n\\n/**\\n * Creates a transfer strategy that will merge prop values using the supplied\\n * `mergeStrategy`. If a prop was previously unset, this just sets it.\\n *\\n * @param {function} mergeStrategy\\n * @return {function}\\n */\\nfunction createTransferStrategy(mergeStrategy) {\\n  return function(props, key, value) {\\n    if (!props.hasOwnProperty(key)) {\\n      props[key] = value;\\n    } else {\\n      props[key] = mergeStrategy(props[key], value);\\n    }\\n  };\\n}\\n\\nvar transferStrategyMerge = createTransferStrategy(function(a, b) {\\n  // `merge` overrides the first object's (`props[key]` above) keys using the\\n  // second object's (`value`) keys. An object's style's existing `propA` would\\n  // get overridden. Flip the order here.\\n  return assign({}, b, a);\\n});\\n\\n/**\\n * Transfer strategies dictate how props are transferred by `transferPropsTo`.\\n * NOTE: if you add any more exceptions to this list you should be sure to\\n * update `cloneWithProps()` accordingly.\\n */\\nvar TransferStrategies = {\\n  /**\\n   * Never transfer `children`.\\n   */\\n  children: emptyFunction,\\n  /**\\n   * Transfer the `className` prop by merging them.\\n   */\\n  className: createTransferStrategy(joinClasses),\\n  /**\\n   * Transfer the `style` prop (which is an object) by merging them.\\n   */\\n  style: transferStrategyMerge\\n};\\n\\n/**\\n * Mutates the first argument by transferring the properties from the second\\n * argument.\\n *\\n * @param {object} props\\n * @param {object} newProps\\n * @return {object}\\n */\\nfunction transferInto(props, newProps) {\\n  for (var thisKey in newProps) {\\n    if (!newProps.hasOwnProperty(thisKey)) {\\n      continue;\\n    }\\n\\n    var transferStrategy = TransferStrategies[thisKey];\\n\\n    if (transferStrategy && TransferStrategies.hasOwnProperty(thisKey)) {\\n      transferStrategy(props, thisKey, newProps[thisKey]);\\n    } else if (!props.hasOwnProperty(thisKey)) {\\n      props[thisKey] = newProps[thisKey];\\n    }\\n  }\\n  return props;\\n}\\n\\n/**\\n * ReactPropTransferer are capable of transferring props to another component\\n * using a `transferPropsTo` method.\\n *\\n * @class ReactPropTransferer\\n */\\nvar ReactPropTransferer = {\\n\\n  TransferStrategies: TransferStrategies,\\n\\n  /**\\n   * Merge two props objects using TransferStrategies.\\n   *\\n   * @param {object} oldProps original props (they take precedence)\\n   * @param {object} newProps new props to merge in\\n   * @return {object} a new object containing both sets of props merged.\\n   */\\n  mergeProps: function(oldProps, newProps) {\\n    return transferInto(assign({}, oldProps), newProps);\\n  },\\n\\n  /**\\n   * @lends {ReactPropTransferer.prototype}\\n   */\\n  Mixin: {\\n\\n    /**\\n     * Transfer props from this component to a target component.\\n     *\\n     * Props that do not have an explicit transfer strategy will be transferred\\n     * only if the target component does not already have the prop set.\\n     *\\n     * This is usually used to pass down props to a returned root component.\\n     *\\n     * @param {ReactElement} element Component receiving the properties.\\n     * @return {ReactElement} The supplied `component`.\\n     * @final\\n     * @protected\\n     */\\n    transferPropsTo: function(element) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        element._owner === this,\\n        '%s: You can\\\\'t call transferPropsTo() on a component that you ' +\\n        'don\\\\'t own, %s. This usually means you are calling ' +\\n        'transferPropsTo() on a component passed in as props or children.',\\n        this.constructor.displayName,\\n        typeof element.type === 'string' ?\\n        element.type :\\n        element.type.displayName\\n      ) : invariant(element._owner === this));\\n\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        if (!didWarn) {\\n          didWarn = true;\\n          (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n            false,\\n            'transferPropsTo is deprecated. ' +\\n            'See http://fb.me/react-transferpropsto for more information.'\\n          ) : null);\\n        }\\n      }\\n\\n      // Because elements are immutable we have to merge into the existing\\n      // props object rather than clone it.\\n      transferInto(element.props, this.props);\\n\\n      return element;\\n    }\\n\\n  }\\n};\\n\\nmodule.exports = ReactPropTransferer;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactPropTransferer.js\\n ** module id = 37\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactPropTransferer.js?\");\n\n/***/ },\n/* 38 */\n/*!************************************!*\\\n  !*** ./~/react/lib/joinClasses.js ***!\n  \\************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule joinClasses\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Combines multiple className strings into one.\\n * http://jsperf.com/joinclasses-args-vs-array\\n *\\n * @param {...?string} classes\\n * @return {string}\\n */\\nfunction joinClasses(className/*, ... */) {\\n  if (!className) {\\n    className = '';\\n  }\\n  var nextClass;\\n  var argLength = arguments.length;\\n  if (argLength > 1) {\\n    for (var ii = 1; ii < argLength; ii++) {\\n      nextClass = arguments[ii];\\n      if (nextClass) {\\n        className = (className ? className + ' ' : '') + nextClass;\\n      }\\n    }\\n  }\\n  return className;\\n}\\n\\nmodule.exports = joinClasses;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/joinClasses.js\\n ** module id = 38\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/joinClasses.js?\");\n\n/***/ },\n/* 39 */\n/*!***************************************************!*\\\n  !*** ./~/react/lib/ReactPropTypeLocationNames.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactPropTypeLocationNames\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactPropTypeLocationNames = {};\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  ReactPropTypeLocationNames = {\\n    prop: 'prop',\\n    context: 'context',\\n    childContext: 'child context'\\n  };\\n}\\n\\nmodule.exports = ReactPropTypeLocationNames;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactPropTypeLocationNames.js\\n ** module id = 39\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactPropTypeLocationNames.js?\");\n\n/***/ },\n/* 40 */\n/*!**************************************************!*\\\n  !*** ./~/react/lib/instantiateReactComponent.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule instantiateReactComponent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactLegacyElement = __webpack_require__(/*! ./ReactLegacyElement */ 36);\\nvar ReactNativeComponent = __webpack_require__(/*! ./ReactNativeComponent */ 41);\\nvar ReactEmptyComponent = __webpack_require__(/*! ./ReactEmptyComponent */ 34);\\n\\n/**\\n * Given an `element` create an instance that will actually be mounted.\\n *\\n * @param {object} element\\n * @param {*} parentCompositeType The composite type that resolved this.\\n * @return {object} A new instance of the element's constructor.\\n * @protected\\n */\\nfunction instantiateReactComponent(element, parentCompositeType) {\\n  var instance;\\n\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      element && (typeof element.type === 'function' ||\\n                     typeof element.type === 'string'),\\n      'Only functions or strings can be mounted as React components.'\\n    ) : null);\\n\\n    // Resolve mock instances\\n    if (element.type._mockedReactClassConstructor) {\\n      // If this is a mocked class, we treat the legacy factory as if it was the\\n      // class constructor for future proofing unit tests. Because this might\\n      // be mocked as a legacy factory, we ignore any warnings triggerd by\\n      // this temporary hack.\\n      ReactLegacyElement._isLegacyCallWarningEnabled = false;\\n      try {\\n        instance = new element.type._mockedReactClassConstructor(\\n          element.props\\n        );\\n      } finally {\\n        ReactLegacyElement._isLegacyCallWarningEnabled = true;\\n      }\\n\\n      // If the mock implementation was a legacy factory, then it returns a\\n      // element. We need to turn this into a real component instance.\\n      if (ReactElement.isValidElement(instance)) {\\n        instance = new instance.type(instance.props);\\n      }\\n\\n      var render = instance.render;\\n      if (!render) {\\n        // For auto-mocked factories, the prototype isn't shimmed and therefore\\n        // there is no render function on the instance. We replace the whole\\n        // component with an empty component instance instead.\\n        element = ReactEmptyComponent.getEmptyComponent();\\n      } else {\\n        if (render._isMockFunction && !render._getMockImplementation()) {\\n          // Auto-mocked components may have a prototype with a mocked render\\n          // function. For those, we'll need to mock the result of the render\\n          // since we consider undefined to be invalid results from render.\\n          render.mockImplementation(\\n            ReactEmptyComponent.getEmptyComponent\\n          );\\n        }\\n        instance.construct(element);\\n        return instance;\\n      }\\n    }\\n  }\\n\\n  // Special case string values\\n  if (typeof element.type === 'string') {\\n    instance = ReactNativeComponent.createInstanceForTag(\\n      element.type,\\n      element.props,\\n      parentCompositeType\\n    );\\n  } else {\\n    // Normal case for non-mocks and non-strings\\n    instance = new element.type(element.props);\\n  }\\n\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      typeof instance.construct === 'function' &&\\n      typeof instance.mountComponent === 'function' &&\\n      typeof instance.receiveComponent === 'function',\\n      'Only React Components can be mounted.'\\n    ) : null);\\n  }\\n\\n  // This actually sets up the internal instance. This will become decoupled\\n  // from the public instance in a future diff.\\n  instance.construct(element);\\n\\n  return instance;\\n}\\n\\nmodule.exports = instantiateReactComponent;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/instantiateReactComponent.js\\n ** module id = 40\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/instantiateReactComponent.js?\");\n\n/***/ },\n/* 41 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ReactNativeComponent.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactNativeComponent\\n */\\n\\n\\\"use strict\\\";\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nvar genericComponentClass = null;\\n// This registry keeps track of wrapper classes around native tags\\nvar tagToComponentClass = {};\\n\\nvar ReactNativeComponentInjection = {\\n  // This accepts a class that receives the tag string. This is a catch all\\n  // that can render any kind of tag.\\n  injectGenericComponentClass: function(componentClass) {\\n    genericComponentClass = componentClass;\\n  },\\n  // This accepts a keyed object with classes as values. Each key represents a\\n  // tag. That particular tag will use this class instead of the generic one.\\n  injectComponentClasses: function(componentClasses) {\\n    assign(tagToComponentClass, componentClasses);\\n  }\\n};\\n\\n/**\\n * Create an internal class for a specific tag.\\n *\\n * @param {string} tag The tag for which to create an internal instance.\\n * @param {any} props The props passed to the instance constructor.\\n * @return {ReactComponent} component The injected empty component.\\n */\\nfunction createInstanceForTag(tag, props, parentType) {\\n  var componentClass = tagToComponentClass[tag];\\n  if (componentClass == null) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      genericComponentClass,\\n      'There is no registered component for the tag %s',\\n      tag\\n    ) : invariant(genericComponentClass));\\n    return new genericComponentClass(tag, props);\\n  }\\n  if (parentType === tag) {\\n    // Avoid recursion\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      genericComponentClass,\\n      'There is no registered component for the tag %s',\\n      tag\\n    ) : invariant(genericComponentClass));\\n    return new genericComponentClass(tag, props);\\n  }\\n  // Unwrap legacy factories\\n  return new componentClass.type(props);\\n}\\n\\nvar ReactNativeComponent = {\\n  createInstanceForTag: createInstanceForTag,\\n  injection: ReactNativeComponentInjection\\n};\\n\\nmodule.exports = ReactNativeComponent;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactNativeComponent.js\\n ** module id = 41\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactNativeComponent.js?\");\n\n/***/ },\n/* 42 */\n/*!******************************!*\\\n  !*** ./~/react/lib/keyOf.js ***!\n  \\******************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule keyOf\\n */\\n\\n/**\\n * Allows extraction of a minified key. Let's the build system minify keys\\n * without loosing the ability to dynamically use key strings as values\\n * themselves. Pass in an object with a single key/val pair and it will return\\n * you the string key of that single record. Suppose you want to grab the\\n * value for a key 'className' inside of an object. Key/val minification may\\n * have aliased that key to be 'xa12'. keyOf({className: null}) will return\\n * 'xa12' in that case. Resolve keys you want to use once at startup time, then\\n * reuse those resolutions.\\n */\\nvar keyOf = function(oneKeyObj) {\\n  var key;\\n  for (key in oneKeyObj) {\\n    if (!oneKeyObj.hasOwnProperty(key)) {\\n      continue;\\n    }\\n    return key;\\n  }\\n  return null;\\n};\\n\\n\\nmodule.exports = keyOf;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/keyOf.js\\n ** module id = 42\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/keyOf.js?\");\n\n/***/ },\n/* 43 */\n/*!**********************************!*\\\n  !*** ./~/react/lib/mapObject.js ***!\n  \\**********************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule mapObject\\n */\\n\\n'use strict';\\n\\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\\n\\n/**\\n * Executes the provided `callback` once for each enumerable own property in the\\n * object and constructs a new object from the results. The `callback` is\\n * invoked with three arguments:\\n *\\n *  - the property value\\n *  - the property name\\n *  - the object being traversed\\n *\\n * Properties that are added after the call to `mapObject` will not be visited\\n * by `callback`. If the values of existing properties are changed, the value\\n * passed to `callback` will be the value at the time `mapObject` visits them.\\n * Properties that are deleted before being visited are not visited.\\n *\\n * @grep function objectMap()\\n * @grep function objMap()\\n *\\n * @param {?object} object\\n * @param {function} callback\\n * @param {*} context\\n * @return {?object}\\n */\\nfunction mapObject(object, callback, context) {\\n  if (!object) {\\n    return null;\\n  }\\n  var result = {};\\n  for (var name in object) {\\n    if (hasOwnProperty.call(object, name)) {\\n      result[name] = callback.call(context, object[name], name, object);\\n    }\\n  }\\n  return result;\\n}\\n\\nmodule.exports = mapObject;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/mapObject.js\\n ** module id = 43\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/mapObject.js?\");\n\n/***/ },\n/* 44 */\n/*!***************************************************!*\\\n  !*** ./~/react/lib/shouldUpdateReactComponent.js ***!\n  \\***************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule shouldUpdateReactComponent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Given a `prevElement` and `nextElement`, determines if the existing\\n * instance should be updated as opposed to being destroyed or replaced by a new\\n * instance. Both arguments are elements. This ensures that this logic can\\n * operate on stateless trees without any backing instance.\\n *\\n * @param {?object} prevElement\\n * @param {?object} nextElement\\n * @return {boolean} True if the existing instance should be updated.\\n * @protected\\n */\\nfunction shouldUpdateReactComponent(prevElement, nextElement) {\\n  if (prevElement && nextElement &&\\n      prevElement.type === nextElement.type &&\\n      prevElement.key === nextElement.key &&\\n      prevElement._owner === nextElement._owner) {\\n    return true;\\n  }\\n  return false;\\n}\\n\\nmodule.exports = shouldUpdateReactComponent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/shouldUpdateReactComponent.js\\n ** module id = 44\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/shouldUpdateReactComponent.js?\");\n\n/***/ },\n/* 45 */\n/*!*********************************!*\\\n  !*** ./~/react/lib/ReactDOM.js ***!\n  \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOM\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactElementValidator = __webpack_require__(/*! ./ReactElementValidator */ 31);\\nvar ReactLegacyElement = __webpack_require__(/*! ./ReactLegacyElement */ 36);\\n\\nvar mapObject = __webpack_require__(/*! ./mapObject */ 43);\\n\\n/**\\n * Create a factory that creates HTML tag elements.\\n *\\n * @param {string} tag Tag name (e.g. `div`).\\n * @private\\n */\\nfunction createDOMFactory(tag) {\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    return ReactLegacyElement.markNonLegacyFactory(\\n      ReactElementValidator.createFactory(tag)\\n    );\\n  }\\n  return ReactLegacyElement.markNonLegacyFactory(\\n    ReactElement.createFactory(tag)\\n  );\\n}\\n\\n/**\\n * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.\\n * This is also accessible via `React.DOM`.\\n *\\n * @public\\n */\\nvar ReactDOM = mapObject({\\n  a: 'a',\\n  abbr: 'abbr',\\n  address: 'address',\\n  area: 'area',\\n  article: 'article',\\n  aside: 'aside',\\n  audio: 'audio',\\n  b: 'b',\\n  base: 'base',\\n  bdi: 'bdi',\\n  bdo: 'bdo',\\n  big: 'big',\\n  blockquote: 'blockquote',\\n  body: 'body',\\n  br: 'br',\\n  button: 'button',\\n  canvas: 'canvas',\\n  caption: 'caption',\\n  cite: 'cite',\\n  code: 'code',\\n  col: 'col',\\n  colgroup: 'colgroup',\\n  data: 'data',\\n  datalist: 'datalist',\\n  dd: 'dd',\\n  del: 'del',\\n  details: 'details',\\n  dfn: 'dfn',\\n  dialog: 'dialog',\\n  div: 'div',\\n  dl: 'dl',\\n  dt: 'dt',\\n  em: 'em',\\n  embed: 'embed',\\n  fieldset: 'fieldset',\\n  figcaption: 'figcaption',\\n  figure: 'figure',\\n  footer: 'footer',\\n  form: 'form',\\n  h1: 'h1',\\n  h2: 'h2',\\n  h3: 'h3',\\n  h4: 'h4',\\n  h5: 'h5',\\n  h6: 'h6',\\n  head: 'head',\\n  header: 'header',\\n  hr: 'hr',\\n  html: 'html',\\n  i: 'i',\\n  iframe: 'iframe',\\n  img: 'img',\\n  input: 'input',\\n  ins: 'ins',\\n  kbd: 'kbd',\\n  keygen: 'keygen',\\n  label: 'label',\\n  legend: 'legend',\\n  li: 'li',\\n  link: 'link',\\n  main: 'main',\\n  map: 'map',\\n  mark: 'mark',\\n  menu: 'menu',\\n  menuitem: 'menuitem',\\n  meta: 'meta',\\n  meter: 'meter',\\n  nav: 'nav',\\n  noscript: 'noscript',\\n  object: 'object',\\n  ol: 'ol',\\n  optgroup: 'optgroup',\\n  option: 'option',\\n  output: 'output',\\n  p: 'p',\\n  param: 'param',\\n  picture: 'picture',\\n  pre: 'pre',\\n  progress: 'progress',\\n  q: 'q',\\n  rp: 'rp',\\n  rt: 'rt',\\n  ruby: 'ruby',\\n  s: 's',\\n  samp: 'samp',\\n  script: 'script',\\n  section: 'section',\\n  select: 'select',\\n  small: 'small',\\n  source: 'source',\\n  span: 'span',\\n  strong: 'strong',\\n  style: 'style',\\n  sub: 'sub',\\n  summary: 'summary',\\n  sup: 'sup',\\n  table: 'table',\\n  tbody: 'tbody',\\n  td: 'td',\\n  textarea: 'textarea',\\n  tfoot: 'tfoot',\\n  th: 'th',\\n  thead: 'thead',\\n  time: 'time',\\n  title: 'title',\\n  tr: 'tr',\\n  track: 'track',\\n  u: 'u',\\n  ul: 'ul',\\n  'var': 'var',\\n  video: 'video',\\n  wbr: 'wbr',\\n\\n  // SVG\\n  circle: 'circle',\\n  defs: 'defs',\\n  ellipse: 'ellipse',\\n  g: 'g',\\n  line: 'line',\\n  linearGradient: 'linearGradient',\\n  mask: 'mask',\\n  path: 'path',\\n  pattern: 'pattern',\\n  polygon: 'polygon',\\n  polyline: 'polyline',\\n  radialGradient: 'radialGradient',\\n  rect: 'rect',\\n  stop: 'stop',\\n  svg: 'svg',\\n  text: 'text',\\n  tspan: 'tspan'\\n\\n}, createDOMFactory);\\n\\nmodule.exports = ReactDOM;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOM.js\\n ** module id = 45\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOM.js?\");\n\n/***/ },\n/* 46 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/ReactDOMComponent.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMComponent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar CSSPropertyOperations = __webpack_require__(/*! ./CSSPropertyOperations */ 47);\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 8);\\nvar DOMPropertyOperations = __webpack_require__(/*! ./DOMPropertyOperations */ 7);\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 23);\\nvar ReactBrowserEventEmitter = __webpack_require__(/*! ./ReactBrowserEventEmitter */ 60);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar ReactMultiChild = __webpack_require__(/*! ./ReactMultiChild */ 71);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar escapeTextForBrowser = __webpack_require__(/*! ./escapeTextForBrowser */ 9);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar isEventSupported = __webpack_require__(/*! ./isEventSupported */ 68);\\nvar keyOf = __webpack_require__(/*! ./keyOf */ 42);\\nvar monitorCodeUse = __webpack_require__(/*! ./monitorCodeUse */ 33);\\n\\nvar deleteListener = ReactBrowserEventEmitter.deleteListener;\\nvar listenTo = ReactBrowserEventEmitter.listenTo;\\nvar registrationNameModules = ReactBrowserEventEmitter.registrationNameModules;\\n\\n// For quickly matching children type, to test if can be treated as content.\\nvar CONTENT_TYPES = {'string': true, 'number': true};\\n\\nvar STYLE = keyOf({style: null});\\n\\nvar ELEMENT_NODE_TYPE = 1;\\n\\n/**\\n * @param {?object} props\\n */\\nfunction assertValidProps(props) {\\n  if (!props) {\\n    return;\\n  }\\n  // Note the use of `==` which checks for null or undefined.\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    props.children == null || props.dangerouslySetInnerHTML == null,\\n    'Can only set one of `children` or `props.dangerouslySetInnerHTML`.'\\n  ) : invariant(props.children == null || props.dangerouslySetInnerHTML == null));\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    if (props.contentEditable && props.children != null) {\\n      console.warn(\\n        'A component is `contentEditable` and contains `children` managed by ' +\\n        'React. It is now your responsibility to guarantee that none of those '+\\n        'nodes are unexpectedly modified or duplicated. This is probably not ' +\\n        'intentional.'\\n      );\\n    }\\n  }\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    props.style == null || typeof props.style === 'object',\\n    'The `style` prop expects a mapping from style properties to values, ' +\\n    'not a string.'\\n  ) : invariant(props.style == null || typeof props.style === 'object'));\\n}\\n\\nfunction putListener(id, registrationName, listener, transaction) {\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    // IE8 has no API for event capturing and the `onScroll` event doesn't\\n    // bubble.\\n    if (registrationName === 'onScroll' &&\\n        !isEventSupported('scroll', true)) {\\n      monitorCodeUse('react_no_scroll_event');\\n      console.warn('This browser doesn\\\\'t support the `onScroll` event');\\n    }\\n  }\\n  var container = ReactMount.findReactContainerForID(id);\\n  if (container) {\\n    var doc = container.nodeType === ELEMENT_NODE_TYPE ?\\n      container.ownerDocument :\\n      container;\\n    listenTo(registrationName, doc);\\n  }\\n  transaction.getPutListenerQueue().enqueuePutListener(\\n    id,\\n    registrationName,\\n    listener\\n  );\\n}\\n\\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\\n// those special cased tags.\\n\\nvar omittedCloseTags = {\\n  'area': true,\\n  'base': true,\\n  'br': true,\\n  'col': true,\\n  'embed': true,\\n  'hr': true,\\n  'img': true,\\n  'input': true,\\n  'keygen': true,\\n  'link': true,\\n  'meta': true,\\n  'param': true,\\n  'source': true,\\n  'track': true,\\n  'wbr': true\\n  // NOTE: menuitem's close tag should be omitted, but that causes problems.\\n};\\n\\n// We accept any tag to be rendered but since this gets injected into abitrary\\n// HTML, we want to make sure that it's a safe tag.\\n// http://www.w3.org/TR/REC-xml/#NT-Name\\n\\nvar VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\\\\.\\\\-\\\\d]*$/; // Simplified subset\\nvar validatedTagCache = {};\\nvar hasOwnProperty = {}.hasOwnProperty;\\n\\nfunction validateDangerousTag(tag) {\\n  if (!hasOwnProperty.call(validatedTagCache, tag)) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(VALID_TAG_REGEX.test(tag), 'Invalid tag: %s', tag) : invariant(VALID_TAG_REGEX.test(tag)));\\n    validatedTagCache[tag] = true;\\n  }\\n}\\n\\n/**\\n * Creates a new React class that is idempotent and capable of containing other\\n * React components. It accepts event listeners and DOM properties that are\\n * valid according to `DOMProperty`.\\n *\\n *  - Event listeners: `onClick`, `onMouseDown`, etc.\\n *  - DOM properties: `className`, `name`, `title`, etc.\\n *\\n * The `style` property functions differently from the DOM API. It accepts an\\n * object mapping of style properties to values.\\n *\\n * @constructor ReactDOMComponent\\n * @extends ReactComponent\\n * @extends ReactMultiChild\\n */\\nfunction ReactDOMComponent(tag) {\\n  validateDangerousTag(tag);\\n  this._tag = tag;\\n  this.tagName = tag.toUpperCase();\\n}\\n\\nReactDOMComponent.displayName = 'ReactDOMComponent';\\n\\nReactDOMComponent.Mixin = {\\n\\n  /**\\n   * Generates root tag markup then recurses. This method has side effects and\\n   * is not idempotent.\\n   *\\n   * @internal\\n   * @param {string} rootID The root DOM ID for this node.\\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n   * @param {number} mountDepth number of components in the owner hierarchy\\n   * @return {string} The computed markup.\\n   */\\n  mountComponent: ReactPerf.measure(\\n    'ReactDOMComponent',\\n    'mountComponent',\\n    function(rootID, transaction, mountDepth) {\\n      ReactComponent.Mixin.mountComponent.call(\\n        this,\\n        rootID,\\n        transaction,\\n        mountDepth\\n      );\\n      assertValidProps(this.props);\\n      var closeTag = omittedCloseTags[this._tag] ? '' : '</' + this._tag + '>';\\n      return (\\n        this._createOpenTagMarkupAndPutListeners(transaction) +\\n        this._createContentMarkup(transaction) +\\n        closeTag\\n      );\\n    }\\n  ),\\n\\n  /**\\n   * Creates markup for the open tag and all attributes.\\n   *\\n   * This method has side effects because events get registered.\\n   *\\n   * Iterating over object properties is faster than iterating over arrays.\\n   * @see http://jsperf.com/obj-vs-arr-iteration\\n   *\\n   * @private\\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n   * @return {string} Markup of opening tag.\\n   */\\n  _createOpenTagMarkupAndPutListeners: function(transaction) {\\n    var props = this.props;\\n    var ret = '<' + this._tag;\\n\\n    for (var propKey in props) {\\n      if (!props.hasOwnProperty(propKey)) {\\n        continue;\\n      }\\n      var propValue = props[propKey];\\n      if (propValue == null) {\\n        continue;\\n      }\\n      if (registrationNameModules.hasOwnProperty(propKey)) {\\n        putListener(this._rootNodeID, propKey, propValue, transaction);\\n      } else {\\n        if (propKey === STYLE) {\\n          if (propValue) {\\n            propValue = props.style = assign({}, props.style);\\n          }\\n          propValue = CSSPropertyOperations.createMarkupForStyles(propValue);\\n        }\\n        var markup =\\n          DOMPropertyOperations.createMarkupForProperty(propKey, propValue);\\n        if (markup) {\\n          ret += ' ' + markup;\\n        }\\n      }\\n    }\\n\\n    // For static pages, no need to put React ID and checksum. Saves lots of\\n    // bytes.\\n    if (transaction.renderToStaticMarkup) {\\n      return ret + '>';\\n    }\\n\\n    var markupForID = DOMPropertyOperations.createMarkupForID(this._rootNodeID);\\n    return ret + ' ' + markupForID + '>';\\n  },\\n\\n  /**\\n   * Creates markup for the content between the tags.\\n   *\\n   * @private\\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n   * @return {string} Content markup.\\n   */\\n  _createContentMarkup: function(transaction) {\\n    // Intentional use of != to avoid catching zero/false.\\n    var innerHTML = this.props.dangerouslySetInnerHTML;\\n    if (innerHTML != null) {\\n      if (innerHTML.__html != null) {\\n        return innerHTML.__html;\\n      }\\n    } else {\\n      var contentToUse =\\n        CONTENT_TYPES[typeof this.props.children] ? this.props.children : null;\\n      var childrenToUse = contentToUse != null ? null : this.props.children;\\n      if (contentToUse != null) {\\n        return escapeTextForBrowser(contentToUse);\\n      } else if (childrenToUse != null) {\\n        var mountImages = this.mountChildren(\\n          childrenToUse,\\n          transaction\\n        );\\n        return mountImages.join('');\\n      }\\n    }\\n    return '';\\n  },\\n\\n  receiveComponent: function(nextElement, transaction) {\\n    if (nextElement === this._currentElement &&\\n        nextElement._owner != null) {\\n      // Since elements are immutable after the owner is rendered,\\n      // we can do a cheap identity compare here to determine if this is a\\n      // superfluous reconcile. It's possible for state to be mutable but such\\n      // change should trigger an update of the owner which would recreate\\n      // the element. We explicitly check for the existence of an owner since\\n      // it's possible for a element created outside a composite to be\\n      // deeply mutated and reused.\\n      return;\\n    }\\n\\n    ReactComponent.Mixin.receiveComponent.call(\\n      this,\\n      nextElement,\\n      transaction\\n    );\\n  },\\n\\n  /**\\n   * Updates a native DOM component after it has already been allocated and\\n   * attached to the DOM. Reconciles the root DOM node, then recurses.\\n   *\\n   * @param {ReactReconcileTransaction} transaction\\n   * @param {ReactElement} prevElement\\n   * @internal\\n   * @overridable\\n   */\\n  updateComponent: ReactPerf.measure(\\n    'ReactDOMComponent',\\n    'updateComponent',\\n    function(transaction, prevElement) {\\n      assertValidProps(this._currentElement.props);\\n      ReactComponent.Mixin.updateComponent.call(\\n        this,\\n        transaction,\\n        prevElement\\n      );\\n      this._updateDOMProperties(prevElement.props, transaction);\\n      this._updateDOMChildren(prevElement.props, transaction);\\n    }\\n  ),\\n\\n  /**\\n   * Reconciles the properties by detecting differences in property values and\\n   * updating the DOM as necessary. This function is probably the single most\\n   * critical path for performance optimization.\\n   *\\n   * TODO: Benchmark whether checking for changed values in memory actually\\n   *       improves performance (especially statically positioned elements).\\n   * TODO: Benchmark the effects of putting this at the top since 99% of props\\n   *       do not change for a given reconciliation.\\n   * TODO: Benchmark areas that can be improved with caching.\\n   *\\n   * @private\\n   * @param {object} lastProps\\n   * @param {ReactReconcileTransaction} transaction\\n   */\\n  _updateDOMProperties: function(lastProps, transaction) {\\n    var nextProps = this.props;\\n    var propKey;\\n    var styleName;\\n    var styleUpdates;\\n    for (propKey in lastProps) {\\n      if (nextProps.hasOwnProperty(propKey) ||\\n         !lastProps.hasOwnProperty(propKey)) {\\n        continue;\\n      }\\n      if (propKey === STYLE) {\\n        var lastStyle = lastProps[propKey];\\n        for (styleName in lastStyle) {\\n          if (lastStyle.hasOwnProperty(styleName)) {\\n            styleUpdates = styleUpdates || {};\\n            styleUpdates[styleName] = '';\\n          }\\n        }\\n      } else if (registrationNameModules.hasOwnProperty(propKey)) {\\n        deleteListener(this._rootNodeID, propKey);\\n      } else if (\\n          DOMProperty.isStandardName[propKey] ||\\n          DOMProperty.isCustomAttribute(propKey)) {\\n        ReactComponent.BackendIDOperations.deletePropertyByID(\\n          this._rootNodeID,\\n          propKey\\n        );\\n      }\\n    }\\n    for (propKey in nextProps) {\\n      var nextProp = nextProps[propKey];\\n      var lastProp = lastProps[propKey];\\n      if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp) {\\n        continue;\\n      }\\n      if (propKey === STYLE) {\\n        if (nextProp) {\\n          nextProp = nextProps.style = assign({}, nextProp);\\n        }\\n        if (lastProp) {\\n          // Unset styles on `lastProp` but not on `nextProp`.\\n          for (styleName in lastProp) {\\n            if (lastProp.hasOwnProperty(styleName) &&\\n                (!nextProp || !nextProp.hasOwnProperty(styleName))) {\\n              styleUpdates = styleUpdates || {};\\n              styleUpdates[styleName] = '';\\n            }\\n          }\\n          // Update styles that changed since `lastProp`.\\n          for (styleName in nextProp) {\\n            if (nextProp.hasOwnProperty(styleName) &&\\n                lastProp[styleName] !== nextProp[styleName]) {\\n              styleUpdates = styleUpdates || {};\\n              styleUpdates[styleName] = nextProp[styleName];\\n            }\\n          }\\n        } else {\\n          // Relies on `updateStylesByID` not mutating `styleUpdates`.\\n          styleUpdates = nextProp;\\n        }\\n      } else if (registrationNameModules.hasOwnProperty(propKey)) {\\n        putListener(this._rootNodeID, propKey, nextProp, transaction);\\n      } else if (\\n          DOMProperty.isStandardName[propKey] ||\\n          DOMProperty.isCustomAttribute(propKey)) {\\n        ReactComponent.BackendIDOperations.updatePropertyByID(\\n          this._rootNodeID,\\n          propKey,\\n          nextProp\\n        );\\n      }\\n    }\\n    if (styleUpdates) {\\n      ReactComponent.BackendIDOperations.updateStylesByID(\\n        this._rootNodeID,\\n        styleUpdates\\n      );\\n    }\\n  },\\n\\n  /**\\n   * Reconciles the children with the various properties that affect the\\n   * children content.\\n   *\\n   * @param {object} lastProps\\n   * @param {ReactReconcileTransaction} transaction\\n   */\\n  _updateDOMChildren: function(lastProps, transaction) {\\n    var nextProps = this.props;\\n\\n    var lastContent =\\n      CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null;\\n    var nextContent =\\n      CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null;\\n\\n    var lastHtml =\\n      lastProps.dangerouslySetInnerHTML &&\\n      lastProps.dangerouslySetInnerHTML.__html;\\n    var nextHtml =\\n      nextProps.dangerouslySetInnerHTML &&\\n      nextProps.dangerouslySetInnerHTML.__html;\\n\\n    // Note the use of `!=` which checks for null or undefined.\\n    var lastChildren = lastContent != null ? null : lastProps.children;\\n    var nextChildren = nextContent != null ? null : nextProps.children;\\n\\n    // If we're switching from children to content/html or vice versa, remove\\n    // the old content\\n    var lastHasContentOrHtml = lastContent != null || lastHtml != null;\\n    var nextHasContentOrHtml = nextContent != null || nextHtml != null;\\n    if (lastChildren != null && nextChildren == null) {\\n      this.updateChildren(null, transaction);\\n    } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {\\n      this.updateTextContent('');\\n    }\\n\\n    if (nextContent != null) {\\n      if (lastContent !== nextContent) {\\n        this.updateTextContent('' + nextContent);\\n      }\\n    } else if (nextHtml != null) {\\n      if (lastHtml !== nextHtml) {\\n        ReactComponent.BackendIDOperations.updateInnerHTMLByID(\\n          this._rootNodeID,\\n          nextHtml\\n        );\\n      }\\n    } else if (nextChildren != null) {\\n      this.updateChildren(nextChildren, transaction);\\n    }\\n  },\\n\\n  /**\\n   * Destroys all event registrations for this instance. Does not remove from\\n   * the DOM. That must be done by the parent.\\n   *\\n   * @internal\\n   */\\n  unmountComponent: function() {\\n    this.unmountChildren();\\n    ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID);\\n    ReactComponent.Mixin.unmountComponent.call(this);\\n  }\\n\\n};\\n\\nassign(\\n  ReactDOMComponent.prototype,\\n  ReactComponent.Mixin,\\n  ReactDOMComponent.Mixin,\\n  ReactMultiChild.Mixin,\\n  ReactBrowserComponentMixin\\n);\\n\\nmodule.exports = ReactDOMComponent;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMComponent.js\\n ** module id = 46\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMComponent.js?\");\n\n/***/ },\n/* 47 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/CSSPropertyOperations.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule CSSPropertyOperations\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar CSSProperty = __webpack_require__(/*! ./CSSProperty */ 48);\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar camelizeStyleName = __webpack_require__(/*! ./camelizeStyleName */ 50);\\nvar dangerousStyleValue = __webpack_require__(/*! ./dangerousStyleValue */ 52);\\nvar hyphenateStyleName = __webpack_require__(/*! ./hyphenateStyleName */ 53);\\nvar memoizeStringOnly = __webpack_require__(/*! ./memoizeStringOnly */ 10);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar processStyleName = memoizeStringOnly(function(styleName) {\\n  return hyphenateStyleName(styleName);\\n});\\n\\nvar styleFloatAccessor = 'cssFloat';\\nif (ExecutionEnvironment.canUseDOM) {\\n  // IE8 only supports accessing cssFloat (standard) as styleFloat\\n  if (document.documentElement.style.cssFloat === undefined) {\\n    styleFloatAccessor = 'styleFloat';\\n  }\\n}\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  var warnedStyleNames = {};\\n\\n  var warnHyphenatedStyleName = function(name) {\\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\\n      return;\\n    }\\n\\n    warnedStyleNames[name] = true;\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      false,\\n      'Unsupported style property ' + name + '. Did you mean ' +\\n      camelizeStyleName(name) + '?'\\n    ) : null);\\n  };\\n}\\n\\n/**\\n * Operations for dealing with CSS properties.\\n */\\nvar CSSPropertyOperations = {\\n\\n  /**\\n   * Serializes a mapping of style properties for use as inline styles:\\n   *\\n   *   > createMarkupForStyles({width: '200px', height: 0})\\n   *   \\\"width:200px;height:0;\\\"\\n   *\\n   * Undefined values are ignored so that declarative programming is easier.\\n   * The result should be HTML-escaped before insertion into the DOM.\\n   *\\n   * @param {object} styles\\n   * @return {?string}\\n   */\\n  createMarkupForStyles: function(styles) {\\n    var serialized = '';\\n    for (var styleName in styles) {\\n      if (!styles.hasOwnProperty(styleName)) {\\n        continue;\\n      }\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        if (styleName.indexOf('-') > -1) {\\n          warnHyphenatedStyleName(styleName);\\n        }\\n      }\\n      var styleValue = styles[styleName];\\n      if (styleValue != null) {\\n        serialized += processStyleName(styleName) + ':';\\n        serialized += dangerousStyleValue(styleName, styleValue) + ';';\\n      }\\n    }\\n    return serialized || null;\\n  },\\n\\n  /**\\n   * Sets the value for multiple styles on a node.  If a value is specified as\\n   * '' (empty string), the corresponding style property will be unset.\\n   *\\n   * @param {DOMElement} node\\n   * @param {object} styles\\n   */\\n  setValueForStyles: function(node, styles) {\\n    var style = node.style;\\n    for (var styleName in styles) {\\n      if (!styles.hasOwnProperty(styleName)) {\\n        continue;\\n      }\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        if (styleName.indexOf('-') > -1) {\\n          warnHyphenatedStyleName(styleName);\\n        }\\n      }\\n      var styleValue = dangerousStyleValue(styleName, styles[styleName]);\\n      if (styleName === 'float') {\\n        styleName = styleFloatAccessor;\\n      }\\n      if (styleValue) {\\n        style[styleName] = styleValue;\\n      } else {\\n        var expansion = CSSProperty.shorthandPropertyExpansions[styleName];\\n        if (expansion) {\\n          // Shorthand property that IE8 won't like unsetting, so unset each\\n          // component to placate it\\n          for (var individualStyleName in expansion) {\\n            style[individualStyleName] = '';\\n          }\\n        } else {\\n          style[styleName] = '';\\n        }\\n      }\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = CSSPropertyOperations;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/CSSPropertyOperations.js\\n ** module id = 47\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/CSSPropertyOperations.js?\");\n\n/***/ },\n/* 48 */\n/*!************************************!*\\\n  !*** ./~/react/lib/CSSProperty.js ***!\n  \\************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule CSSProperty\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * CSS properties which accept numbers but are not in units of \\\"px\\\".\\n */\\nvar isUnitlessNumber = {\\n  columnCount: true,\\n  flex: true,\\n  flexGrow: true,\\n  flexShrink: true,\\n  fontWeight: true,\\n  lineClamp: true,\\n  lineHeight: true,\\n  opacity: true,\\n  order: true,\\n  orphans: true,\\n  widows: true,\\n  zIndex: true,\\n  zoom: true,\\n\\n  // SVG-related properties\\n  fillOpacity: true,\\n  strokeOpacity: true\\n};\\n\\n/**\\n * @param {string} prefix vendor-specific prefix, eg: Webkit\\n * @param {string} key style name, eg: transitionDuration\\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\\n * WebkitTransitionDuration\\n */\\nfunction prefixKey(prefix, key) {\\n  return prefix + key.charAt(0).toUpperCase() + key.substring(1);\\n}\\n\\n/**\\n * Support style names that may come passed in prefixed by adding permutations\\n * of vendor prefixes.\\n */\\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\\n\\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\\n// infinite loop, because it iterates over the newly added props too.\\nObject.keys(isUnitlessNumber).forEach(function(prop) {\\n  prefixes.forEach(function(prefix) {\\n    isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\\n  });\\n});\\n\\n/**\\n * Most style properties can be unset by doing .style[prop] = '' but IE8\\n * doesn't like doing that with shorthand properties so for the properties that\\n * IE8 breaks on, which are listed here, we instead unset each of the\\n * individual properties. See http://bugs.jquery.com/ticket/12385.\\n * The 4-value 'clock' properties like margin, padding, border-width seem to\\n * behave without any problems. Curiously, list-style works too without any\\n * special prodding.\\n */\\nvar shorthandPropertyExpansions = {\\n  background: {\\n    backgroundImage: true,\\n    backgroundPosition: true,\\n    backgroundRepeat: true,\\n    backgroundColor: true\\n  },\\n  border: {\\n    borderWidth: true,\\n    borderStyle: true,\\n    borderColor: true\\n  },\\n  borderBottom: {\\n    borderBottomWidth: true,\\n    borderBottomStyle: true,\\n    borderBottomColor: true\\n  },\\n  borderLeft: {\\n    borderLeftWidth: true,\\n    borderLeftStyle: true,\\n    borderLeftColor: true\\n  },\\n  borderRight: {\\n    borderRightWidth: true,\\n    borderRightStyle: true,\\n    borderRightColor: true\\n  },\\n  borderTop: {\\n    borderTopWidth: true,\\n    borderTopStyle: true,\\n    borderTopColor: true\\n  },\\n  font: {\\n    fontStyle: true,\\n    fontVariant: true,\\n    fontWeight: true,\\n    fontSize: true,\\n    lineHeight: true,\\n    fontFamily: true\\n  }\\n};\\n\\nvar CSSProperty = {\\n  isUnitlessNumber: isUnitlessNumber,\\n  shorthandPropertyExpansions: shorthandPropertyExpansions\\n};\\n\\nmodule.exports = CSSProperty;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/CSSProperty.js\\n ** module id = 48\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/CSSProperty.js?\");\n\n/***/ },\n/* 49 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ExecutionEnvironment.js ***!\n  \\*********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ExecutionEnvironment\\n */\\n\\n/*jslint evil: true */\\n\\n\\\"use strict\\\";\\n\\nvar canUseDOM = !!(\\n  typeof window !== 'undefined' &&\\n  window.document &&\\n  window.document.createElement\\n);\\n\\n/**\\n * Simple, lightweight module assisting with the detection and context of\\n * Worker. Helps avoid circular dependencies and allows code to reason about\\n * whether or not they are in a Worker, even if they never include the main\\n * `ReactWorker` dependency.\\n */\\nvar ExecutionEnvironment = {\\n\\n  canUseDOM: canUseDOM,\\n\\n  canUseWorkers: typeof Worker !== 'undefined',\\n\\n  canUseEventListeners:\\n    canUseDOM && !!(window.addEventListener || window.attachEvent),\\n\\n  canUseViewport: canUseDOM && !!window.screen,\\n\\n  isInWorker: !canUseDOM // For now, this is true - might change in the future.\\n\\n};\\n\\nmodule.exports = ExecutionEnvironment;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ExecutionEnvironment.js\\n ** module id = 49\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ExecutionEnvironment.js?\");\n\n/***/ },\n/* 50 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/camelizeStyleName.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule camelizeStyleName\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\nvar camelize = __webpack_require__(/*! ./camelize */ 51);\\n\\nvar msPattern = /^-ms-/;\\n\\n/**\\n * Camelcases a hyphenated CSS property name, for example:\\n *\\n *   > camelizeStyleName('background-color')\\n *   < \\\"backgroundColor\\\"\\n *   > camelizeStyleName('-moz-transition')\\n *   < \\\"MozTransition\\\"\\n *   > camelizeStyleName('-ms-transition')\\n *   < \\\"msTransition\\\"\\n *\\n * As Andi Smith suggests\\n * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\\n * is converted to lowercase `ms`.\\n *\\n * @param {string} string\\n * @return {string}\\n */\\nfunction camelizeStyleName(string) {\\n  return camelize(string.replace(msPattern, 'ms-'));\\n}\\n\\nmodule.exports = camelizeStyleName;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/camelizeStyleName.js\\n ** module id = 50\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/camelizeStyleName.js?\");\n\n/***/ },\n/* 51 */\n/*!*********************************!*\\\n  !*** ./~/react/lib/camelize.js ***!\n  \\*********************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule camelize\\n * @typechecks\\n */\\n\\nvar _hyphenPattern = /-(.)/g;\\n\\n/**\\n * Camelcases a hyphenated string, for example:\\n *\\n *   > camelize('background-color')\\n *   < \\\"backgroundColor\\\"\\n *\\n * @param {string} string\\n * @return {string}\\n */\\nfunction camelize(string) {\\n  return string.replace(_hyphenPattern, function(_, character) {\\n    return character.toUpperCase();\\n  });\\n}\\n\\nmodule.exports = camelize;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/camelize.js\\n ** module id = 51\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/camelize.js?\");\n\n/***/ },\n/* 52 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/dangerousStyleValue.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule dangerousStyleValue\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar CSSProperty = __webpack_require__(/*! ./CSSProperty */ 48);\\n\\nvar isUnitlessNumber = CSSProperty.isUnitlessNumber;\\n\\n/**\\n * Convert a value into the proper css writable value. The style name `name`\\n * should be logical (no hyphens), as specified\\n * in `CSSProperty.isUnitlessNumber`.\\n *\\n * @param {string} name CSS property name such as `topMargin`.\\n * @param {*} value CSS property value such as `10px`.\\n * @return {string} Normalized style value with dimensions applied.\\n */\\nfunction dangerousStyleValue(name, value) {\\n  // Note that we've removed escapeTextForBrowser() calls here since the\\n  // whole string will be escaped when the attribute is injected into\\n  // the markup. If you provide unsafe user data here they can inject\\n  // arbitrary CSS which may be problematic (I couldn't repro this):\\n  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\\n  // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\\n  // This is not an XSS hole but instead a potential CSS injection issue\\n  // which has lead to a greater discussion about how we're going to\\n  // trust URLs moving forward. See #2115901\\n\\n  var isEmpty = value == null || typeof value === 'boolean' || value === '';\\n  if (isEmpty) {\\n    return '';\\n  }\\n\\n  var isNonNumeric = isNaN(value);\\n  if (isNonNumeric || value === 0 ||\\n      isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {\\n    return '' + value; // cast to string\\n  }\\n\\n  if (typeof value === 'string') {\\n    value = value.trim();\\n  }\\n  return value + 'px';\\n}\\n\\nmodule.exports = dangerousStyleValue;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/dangerousStyleValue.js\\n ** module id = 52\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/dangerousStyleValue.js?\");\n\n/***/ },\n/* 53 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/hyphenateStyleName.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule hyphenateStyleName\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\nvar hyphenate = __webpack_require__(/*! ./hyphenate */ 54);\\n\\nvar msPattern = /^ms-/;\\n\\n/**\\n * Hyphenates a camelcased CSS property name, for example:\\n *\\n *   > hyphenateStyleName('backgroundColor')\\n *   < \\\"background-color\\\"\\n *   > hyphenateStyleName('MozTransition')\\n *   < \\\"-moz-transition\\\"\\n *   > hyphenateStyleName('msTransition')\\n *   < \\\"-ms-transition\\\"\\n *\\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\\n * is converted to `-ms-`.\\n *\\n * @param {string} string\\n * @return {string}\\n */\\nfunction hyphenateStyleName(string) {\\n  return hyphenate(string).replace(msPattern, '-ms-');\\n}\\n\\nmodule.exports = hyphenateStyleName;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/hyphenateStyleName.js\\n ** module id = 53\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/hyphenateStyleName.js?\");\n\n/***/ },\n/* 54 */\n/*!**********************************!*\\\n  !*** ./~/react/lib/hyphenate.js ***!\n  \\**********************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule hyphenate\\n * @typechecks\\n */\\n\\nvar _uppercasePattern = /([A-Z])/g;\\n\\n/**\\n * Hyphenates a camelcased string, for example:\\n *\\n *   > hyphenate('backgroundColor')\\n *   < \\\"background-color\\\"\\n *\\n * For CSS style names, use `hyphenateStyleName` instead which works properly\\n * with all vendor prefixes, including `ms`.\\n *\\n * @param {string} string\\n * @return {string}\\n */\\nfunction hyphenate(string) {\\n  return string.replace(_uppercasePattern, '-$1').toLowerCase();\\n}\\n\\nmodule.exports = hyphenate;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/hyphenate.js\\n ** module id = 54\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/hyphenate.js?\");\n\n/***/ },\n/* 55 */\n/*!***************************************************!*\\\n  !*** ./~/react/lib/ReactBrowserComponentMixin.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactBrowserComponentMixin\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactEmptyComponent = __webpack_require__(/*! ./ReactEmptyComponent */ 34);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nvar ReactBrowserComponentMixin = {\\n  /**\\n   * Returns the DOM node rendered by this component.\\n   *\\n   * @return {DOMElement} The root node of this component.\\n   * @final\\n   * @protected\\n   */\\n  getDOMNode: function() {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      this.isMounted(),\\n      'getDOMNode(): A component must be mounted to have a DOM node.'\\n    ) : invariant(this.isMounted()));\\n    if (ReactEmptyComponent.isNullComponentID(this._rootNodeID)) {\\n      return null;\\n    }\\n    return ReactMount.getNode(this._rootNodeID);\\n  }\\n};\\n\\nmodule.exports = ReactBrowserComponentMixin;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactBrowserComponentMixin.js\\n ** module id = 55\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactBrowserComponentMixin.js?\");\n\n/***/ },\n/* 56 */\n/*!***********************************!*\\\n  !*** ./~/react/lib/ReactMount.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactMount\\n */\\n\\n\\\"use strict\\\";\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 8);\\nvar ReactBrowserEventEmitter = __webpack_require__(/*! ./ReactBrowserEventEmitter */ 60);\\nvar ReactCurrentOwner = __webpack_require__(/*! ./ReactCurrentOwner */ 22);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactLegacyElement = __webpack_require__(/*! ./ReactLegacyElement */ 36);\\nvar ReactInstanceHandles = __webpack_require__(/*! ./ReactInstanceHandles */ 4);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\n\\nvar containsNode = __webpack_require__(/*! ./containsNode */ 57);\\nvar deprecated = __webpack_require__(/*! ./deprecated */ 69);\\nvar getReactRootElementInContainer = __webpack_require__(/*! ./getReactRootElementInContainer */ 70);\\nvar instantiateReactComponent = __webpack_require__(/*! ./instantiateReactComponent */ 40);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar shouldUpdateReactComponent = __webpack_require__(/*! ./shouldUpdateReactComponent */ 44);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar createElement = ReactLegacyElement.wrapCreateElement(\\n  ReactElement.createElement\\n);\\n\\nvar SEPARATOR = ReactInstanceHandles.SEPARATOR;\\n\\nvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\\nvar nodeCache = {};\\n\\nvar ELEMENT_NODE_TYPE = 1;\\nvar DOC_NODE_TYPE = 9;\\n\\n/** Mapping from reactRootID to React component instance. */\\nvar instancesByReactRootID = {};\\n\\n/** Mapping from reactRootID to `container` nodes. */\\nvar containersByReactRootID = {};\\n\\nif (\\\"production\\\" !== process.env.NODE_ENV) {\\n  /** __DEV__-only mapping from reactRootID to root elements. */\\n  var rootElementsByReactRootID = {};\\n}\\n\\n// Used to store breadth-first search state in findComponentRoot.\\nvar findComponentRootReusableArray = [];\\n\\n/**\\n * @param {DOMElement} container DOM element that may contain a React component.\\n * @return {?string} A \\\"reactRoot\\\" ID, if a React component is rendered.\\n */\\nfunction getReactRootID(container) {\\n  var rootElement = getReactRootElementInContainer(container);\\n  return rootElement && ReactMount.getID(rootElement);\\n}\\n\\n/**\\n * Accessing node[ATTR_NAME] or calling getAttribute(ATTR_NAME) on a form\\n * element can return its control whose name or ID equals ATTR_NAME. All\\n * DOM nodes support `getAttributeNode` but this can also get called on\\n * other objects so just return '' if we're given something other than a\\n * DOM node (such as window).\\n *\\n * @param {?DOMElement|DOMWindow|DOMDocument|DOMTextNode} node DOM node.\\n * @return {string} ID of the supplied `domNode`.\\n */\\nfunction getID(node) {\\n  var id = internalGetID(node);\\n  if (id) {\\n    if (nodeCache.hasOwnProperty(id)) {\\n      var cached = nodeCache[id];\\n      if (cached !== node) {\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          !isValid(cached, id),\\n          'ReactMount: Two valid but unequal nodes with the same `%s`: %s',\\n          ATTR_NAME, id\\n        ) : invariant(!isValid(cached, id)));\\n\\n        nodeCache[id] = node;\\n      }\\n    } else {\\n      nodeCache[id] = node;\\n    }\\n  }\\n\\n  return id;\\n}\\n\\nfunction internalGetID(node) {\\n  // If node is something like a window, document, or text node, none of\\n  // which support attributes or a .getAttribute method, gracefully return\\n  // the empty string, as if the attribute were missing.\\n  return node && node.getAttribute && node.getAttribute(ATTR_NAME) || '';\\n}\\n\\n/**\\n * Sets the React-specific ID of the given node.\\n *\\n * @param {DOMElement} node The DOM node whose ID will be set.\\n * @param {string} id The value of the ID attribute.\\n */\\nfunction setID(node, id) {\\n  var oldID = internalGetID(node);\\n  if (oldID !== id) {\\n    delete nodeCache[oldID];\\n  }\\n  node.setAttribute(ATTR_NAME, id);\\n  nodeCache[id] = node;\\n}\\n\\n/**\\n * Finds the node with the supplied React-generated DOM ID.\\n *\\n * @param {string} id A React-generated DOM ID.\\n * @return {DOMElement} DOM node with the suppled `id`.\\n * @internal\\n */\\nfunction getNode(id) {\\n  if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {\\n    nodeCache[id] = ReactMount.findReactNodeByID(id);\\n  }\\n  return nodeCache[id];\\n}\\n\\n/**\\n * A node is \\\"valid\\\" if it is contained by a currently mounted container.\\n *\\n * This means that the node does not have to be contained by a document in\\n * order to be considered valid.\\n *\\n * @param {?DOMElement} node The candidate DOM node.\\n * @param {string} id The expected ID of the node.\\n * @return {boolean} Whether the node is contained by a mounted container.\\n */\\nfunction isValid(node, id) {\\n  if (node) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      internalGetID(node) === id,\\n      'ReactMount: Unexpected modification of `%s`',\\n      ATTR_NAME\\n    ) : invariant(internalGetID(node) === id));\\n\\n    var container = ReactMount.findReactContainerForID(id);\\n    if (container && containsNode(container, node)) {\\n      return true;\\n    }\\n  }\\n\\n  return false;\\n}\\n\\n/**\\n * Causes the cache to forget about one React-specific ID.\\n *\\n * @param {string} id The ID to forget.\\n */\\nfunction purgeID(id) {\\n  delete nodeCache[id];\\n}\\n\\nvar deepestNodeSoFar = null;\\nfunction findDeepestCachedAncestorImpl(ancestorID) {\\n  var ancestor = nodeCache[ancestorID];\\n  if (ancestor && isValid(ancestor, ancestorID)) {\\n    deepestNodeSoFar = ancestor;\\n  } else {\\n    // This node isn't populated in the cache, so presumably none of its\\n    // descendants are. Break out of the loop.\\n    return false;\\n  }\\n}\\n\\n/**\\n * Return the deepest cached node whose ID is a prefix of `targetID`.\\n */\\nfunction findDeepestCachedAncestor(targetID) {\\n  deepestNodeSoFar = null;\\n  ReactInstanceHandles.traverseAncestors(\\n    targetID,\\n    findDeepestCachedAncestorImpl\\n  );\\n\\n  var foundNode = deepestNodeSoFar;\\n  deepestNodeSoFar = null;\\n  return foundNode;\\n}\\n\\n/**\\n * Mounting is the process of initializing a React component by creatings its\\n * representative DOM elements and inserting them into a supplied `container`.\\n * Any prior content inside `container` is destroyed in the process.\\n *\\n *   ReactMount.render(\\n *     component,\\n *     document.getElementById('container')\\n *   );\\n *\\n *   <div id=\\\"container\\\">                   <-- Supplied `container`.\\n *     <div data-reactid=\\\".3\\\">              <-- Rendered reactRoot of React\\n *       // ...                                 component.\\n *     </div>\\n *   </div>\\n *\\n * Inside of `container`, the first element rendered is the \\\"reactRoot\\\".\\n */\\nvar ReactMount = {\\n  /** Exposed for debugging purposes **/\\n  _instancesByReactRootID: instancesByReactRootID,\\n\\n  /**\\n   * This is a hook provided to support rendering React components while\\n   * ensuring that the apparent scroll position of its `container` does not\\n   * change.\\n   *\\n   * @param {DOMElement} container The `container` being rendered into.\\n   * @param {function} renderCallback This must be called once to do the render.\\n   */\\n  scrollMonitor: function(container, renderCallback) {\\n    renderCallback();\\n  },\\n\\n  /**\\n   * Take a component that's already mounted into the DOM and replace its props\\n   * @param {ReactComponent} prevComponent component instance already in the DOM\\n   * @param {ReactComponent} nextComponent component instance to render\\n   * @param {DOMElement} container container to render into\\n   * @param {?function} callback function triggered on completion\\n   */\\n  _updateRootComponent: function(\\n      prevComponent,\\n      nextComponent,\\n      container,\\n      callback) {\\n    var nextProps = nextComponent.props;\\n    ReactMount.scrollMonitor(container, function() {\\n      prevComponent.replaceProps(nextProps, callback);\\n    });\\n\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      // Record the root element in case it later gets transplanted.\\n      rootElementsByReactRootID[getReactRootID(container)] =\\n        getReactRootElementInContainer(container);\\n    }\\n\\n    return prevComponent;\\n  },\\n\\n  /**\\n   * Register a component into the instance map and starts scroll value\\n   * monitoring\\n   * @param {ReactComponent} nextComponent component instance to render\\n   * @param {DOMElement} container container to render into\\n   * @return {string} reactRoot ID prefix\\n   */\\n  _registerComponent: function(nextComponent, container) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      container && (\\n        container.nodeType === ELEMENT_NODE_TYPE ||\\n        container.nodeType === DOC_NODE_TYPE\\n      ),\\n      '_registerComponent(...): Target container is not a DOM element.'\\n    ) : invariant(container && (\\n      container.nodeType === ELEMENT_NODE_TYPE ||\\n      container.nodeType === DOC_NODE_TYPE\\n    )));\\n\\n    ReactBrowserEventEmitter.ensureScrollValueMonitoring();\\n\\n    var reactRootID = ReactMount.registerContainer(container);\\n    instancesByReactRootID[reactRootID] = nextComponent;\\n    return reactRootID;\\n  },\\n\\n  /**\\n   * Render a new component into the DOM.\\n   * @param {ReactComponent} nextComponent component instance to render\\n   * @param {DOMElement} container container to render into\\n   * @param {boolean} shouldReuseMarkup if we should skip the markup insertion\\n   * @return {ReactComponent} nextComponent\\n   */\\n  _renderNewRootComponent: ReactPerf.measure(\\n    'ReactMount',\\n    '_renderNewRootComponent',\\n    function(\\n        nextComponent,\\n        container,\\n        shouldReuseMarkup) {\\n      // Various parts of our code (such as ReactCompositeComponent's\\n      // _renderValidatedComponent) assume that calls to render aren't nested;\\n      // verify that that's the case.\\n      (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n        ReactCurrentOwner.current == null,\\n        '_renderNewRootComponent(): Render methods should be a pure function ' +\\n        'of props and state; triggering nested component updates from ' +\\n        'render is not allowed. If necessary, trigger nested updates in ' +\\n        'componentDidUpdate.'\\n      ) : null);\\n\\n      var componentInstance = instantiateReactComponent(nextComponent, null);\\n      var reactRootID = ReactMount._registerComponent(\\n        componentInstance,\\n        container\\n      );\\n      componentInstance.mountComponentIntoNode(\\n        reactRootID,\\n        container,\\n        shouldReuseMarkup\\n      );\\n\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        // Record the root element in case it later gets transplanted.\\n        rootElementsByReactRootID[reactRootID] =\\n          getReactRootElementInContainer(container);\\n      }\\n\\n      return componentInstance;\\n    }\\n  ),\\n\\n  /**\\n   * Renders a React component into the DOM in the supplied `container`.\\n   *\\n   * If the React component was previously rendered into `container`, this will\\n   * perform an update on it and only mutate the DOM as necessary to reflect the\\n   * latest React component.\\n   *\\n   * @param {ReactElement} nextElement Component element to render.\\n   * @param {DOMElement} container DOM element to render into.\\n   * @param {?function} callback function triggered on completion\\n   * @return {ReactComponent} Component instance rendered in `container`.\\n   */\\n  render: function(nextElement, container, callback) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      ReactElement.isValidElement(nextElement),\\n      'renderComponent(): Invalid component element.%s',\\n      (\\n        typeof nextElement === 'string' ?\\n          ' Instead of passing an element string, make sure to instantiate ' +\\n          'it by passing it to React.createElement.' :\\n        ReactLegacyElement.isValidFactory(nextElement) ?\\n          ' Instead of passing a component class, make sure to instantiate ' +\\n          'it by passing it to React.createElement.' :\\n        // Check if it quacks like a element\\n        typeof nextElement.props !== \\\"undefined\\\" ?\\n          ' This may be caused by unintentionally loading two independent ' +\\n          'copies of React.' :\\n          ''\\n      )\\n    ) : invariant(ReactElement.isValidElement(nextElement)));\\n\\n    var prevComponent = instancesByReactRootID[getReactRootID(container)];\\n\\n    if (prevComponent) {\\n      var prevElement = prevComponent._currentElement;\\n      if (shouldUpdateReactComponent(prevElement, nextElement)) {\\n        return ReactMount._updateRootComponent(\\n          prevComponent,\\n          nextElement,\\n          container,\\n          callback\\n        );\\n      } else {\\n        ReactMount.unmountComponentAtNode(container);\\n      }\\n    }\\n\\n    var reactRootElement = getReactRootElementInContainer(container);\\n    var containerHasReactMarkup =\\n      reactRootElement && ReactMount.isRenderedByReact(reactRootElement);\\n\\n    var shouldReuseMarkup = containerHasReactMarkup && !prevComponent;\\n\\n    var component = ReactMount._renderNewRootComponent(\\n      nextElement,\\n      container,\\n      shouldReuseMarkup\\n    );\\n    callback && callback.call(component);\\n    return component;\\n  },\\n\\n  /**\\n   * Constructs a component instance of `constructor` with `initialProps` and\\n   * renders it into the supplied `container`.\\n   *\\n   * @param {function} constructor React component constructor.\\n   * @param {?object} props Initial props of the component instance.\\n   * @param {DOMElement} container DOM element to render into.\\n   * @return {ReactComponent} Component instance rendered in `container`.\\n   */\\n  constructAndRenderComponent: function(constructor, props, container) {\\n    var element = createElement(constructor, props);\\n    return ReactMount.render(element, container);\\n  },\\n\\n  /**\\n   * Constructs a component instance of `constructor` with `initialProps` and\\n   * renders it into a container node identified by supplied `id`.\\n   *\\n   * @param {function} componentConstructor React component constructor\\n   * @param {?object} props Initial props of the component instance.\\n   * @param {string} id ID of the DOM element to render into.\\n   * @return {ReactComponent} Component instance rendered in the container node.\\n   */\\n  constructAndRenderComponentByID: function(constructor, props, id) {\\n    var domNode = document.getElementById(id);\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      domNode,\\n      'Tried to get element with id of \\\"%s\\\" but it is not present on the page.',\\n      id\\n    ) : invariant(domNode));\\n    return ReactMount.constructAndRenderComponent(constructor, props, domNode);\\n  },\\n\\n  /**\\n   * Registers a container node into which React components will be rendered.\\n   * This also creates the \\\"reactRoot\\\" ID that will be assigned to the element\\n   * rendered within.\\n   *\\n   * @param {DOMElement} container DOM element to register as a container.\\n   * @return {string} The \\\"reactRoot\\\" ID of elements rendered within.\\n   */\\n  registerContainer: function(container) {\\n    var reactRootID = getReactRootID(container);\\n    if (reactRootID) {\\n      // If one exists, make sure it is a valid \\\"reactRoot\\\" ID.\\n      reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID);\\n    }\\n    if (!reactRootID) {\\n      // No valid \\\"reactRoot\\\" ID found, create one.\\n      reactRootID = ReactInstanceHandles.createReactRootID();\\n    }\\n    containersByReactRootID[reactRootID] = container;\\n    return reactRootID;\\n  },\\n\\n  /**\\n   * Unmounts and destroys the React component rendered in the `container`.\\n   *\\n   * @param {DOMElement} container DOM element containing a React component.\\n   * @return {boolean} True if a component was found in and unmounted from\\n   *                   `container`\\n   */\\n  unmountComponentAtNode: function(container) {\\n    // Various parts of our code (such as ReactCompositeComponent's\\n    // _renderValidatedComponent) assume that calls to render aren't nested;\\n    // verify that that's the case. (Strictly speaking, unmounting won't cause a\\n    // render but we still don't expect to be in a render call here.)\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      ReactCurrentOwner.current == null,\\n      'unmountComponentAtNode(): Render methods should be a pure function of ' +\\n      'props and state; triggering nested component updates from render is ' +\\n      'not allowed. If necessary, trigger nested updates in ' +\\n      'componentDidUpdate.'\\n    ) : null);\\n\\n    var reactRootID = getReactRootID(container);\\n    var component = instancesByReactRootID[reactRootID];\\n    if (!component) {\\n      return false;\\n    }\\n    ReactMount.unmountComponentFromNode(component, container);\\n    delete instancesByReactRootID[reactRootID];\\n    delete containersByReactRootID[reactRootID];\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      delete rootElementsByReactRootID[reactRootID];\\n    }\\n    return true;\\n  },\\n\\n  /**\\n   * Unmounts a component and removes it from the DOM.\\n   *\\n   * @param {ReactComponent} instance React component instance.\\n   * @param {DOMElement} container DOM element to unmount from.\\n   * @final\\n   * @internal\\n   * @see {ReactMount.unmountComponentAtNode}\\n   */\\n  unmountComponentFromNode: function(instance, container) {\\n    instance.unmountComponent();\\n\\n    if (container.nodeType === DOC_NODE_TYPE) {\\n      container = container.documentElement;\\n    }\\n\\n    // http://jsperf.com/emptying-a-node\\n    while (container.lastChild) {\\n      container.removeChild(container.lastChild);\\n    }\\n  },\\n\\n  /**\\n   * Finds the container DOM element that contains React component to which the\\n   * supplied DOM `id` belongs.\\n   *\\n   * @param {string} id The ID of an element rendered by a React component.\\n   * @return {?DOMElement} DOM element that contains the `id`.\\n   */\\n  findReactContainerForID: function(id) {\\n    var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(id);\\n    var container = containersByReactRootID[reactRootID];\\n\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      var rootElement = rootElementsByReactRootID[reactRootID];\\n      if (rootElement && rootElement.parentNode !== container) {\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          // Call internalGetID here because getID calls isValid which calls\\n          // findReactContainerForID (this function).\\n          internalGetID(rootElement) === reactRootID,\\n          'ReactMount: Root element ID differed from reactRootID.'\\n        ) : invariant(// Call internalGetID here because getID calls isValid which calls\\n        // findReactContainerForID (this function).\\n        internalGetID(rootElement) === reactRootID));\\n\\n        var containerChild = container.firstChild;\\n        if (containerChild &&\\n            reactRootID === internalGetID(containerChild)) {\\n          // If the container has a new child with the same ID as the old\\n          // root element, then rootElementsByReactRootID[reactRootID] is\\n          // just stale and needs to be updated. The case that deserves a\\n          // warning is when the container is empty.\\n          rootElementsByReactRootID[reactRootID] = containerChild;\\n        } else {\\n          console.warn(\\n            'ReactMount: Root element has been removed from its original ' +\\n            'container. New container:', rootElement.parentNode\\n          );\\n        }\\n      }\\n    }\\n\\n    return container;\\n  },\\n\\n  /**\\n   * Finds an element rendered by React with the supplied ID.\\n   *\\n   * @param {string} id ID of a DOM node in the React component.\\n   * @return {DOMElement} Root DOM node of the React component.\\n   */\\n  findReactNodeByID: function(id) {\\n    var reactRoot = ReactMount.findReactContainerForID(id);\\n    return ReactMount.findComponentRoot(reactRoot, id);\\n  },\\n\\n  /**\\n   * True if the supplied `node` is rendered by React.\\n   *\\n   * @param {*} node DOM Element to check.\\n   * @return {boolean} True if the DOM Element appears to be rendered by React.\\n   * @internal\\n   */\\n  isRenderedByReact: function(node) {\\n    if (node.nodeType !== 1) {\\n      // Not a DOMElement, therefore not a React component\\n      return false;\\n    }\\n    var id = ReactMount.getID(node);\\n    return id ? id.charAt(0) === SEPARATOR : false;\\n  },\\n\\n  /**\\n   * Traverses up the ancestors of the supplied node to find a node that is a\\n   * DOM representation of a React component.\\n   *\\n   * @param {*} node\\n   * @return {?DOMEventTarget}\\n   * @internal\\n   */\\n  getFirstReactDOM: function(node) {\\n    var current = node;\\n    while (current && current.parentNode !== current) {\\n      if (ReactMount.isRenderedByReact(current)) {\\n        return current;\\n      }\\n      current = current.parentNode;\\n    }\\n    return null;\\n  },\\n\\n  /**\\n   * Finds a node with the supplied `targetID` inside of the supplied\\n   * `ancestorNode`.  Exploits the ID naming scheme to perform the search\\n   * quickly.\\n   *\\n   * @param {DOMEventTarget} ancestorNode Search from this root.\\n   * @pararm {string} targetID ID of the DOM representation of the component.\\n   * @return {DOMEventTarget} DOM node with the supplied `targetID`.\\n   * @internal\\n   */\\n  findComponentRoot: function(ancestorNode, targetID) {\\n    var firstChildren = findComponentRootReusableArray;\\n    var childIndex = 0;\\n\\n    var deepestAncestor = findDeepestCachedAncestor(targetID) || ancestorNode;\\n\\n    firstChildren[0] = deepestAncestor.firstChild;\\n    firstChildren.length = 1;\\n\\n    while (childIndex < firstChildren.length) {\\n      var child = firstChildren[childIndex++];\\n      var targetChild;\\n\\n      while (child) {\\n        var childID = ReactMount.getID(child);\\n        if (childID) {\\n          // Even if we find the node we're looking for, we finish looping\\n          // through its siblings to ensure they're cached so that we don't have\\n          // to revisit this node again. Otherwise, we make n^2 calls to getID\\n          // when visiting the many children of a single node in order.\\n\\n          if (targetID === childID) {\\n            targetChild = child;\\n          } else if (ReactInstanceHandles.isAncestorIDOf(childID, targetID)) {\\n            // If we find a child whose ID is an ancestor of the given ID,\\n            // then we can be sure that we only want to search the subtree\\n            // rooted at this child, so we can throw out the rest of the\\n            // search state.\\n            firstChildren.length = childIndex = 0;\\n            firstChildren.push(child.firstChild);\\n          }\\n\\n        } else {\\n          // If this child had no ID, then there's a chance that it was\\n          // injected automatically by the browser, as when a `<table>`\\n          // element sprouts an extra `<tbody>` child as a side effect of\\n          // `.innerHTML` parsing. Optimistically continue down this\\n          // branch, but not before examining the other siblings.\\n          firstChildren.push(child.firstChild);\\n        }\\n\\n        child = child.nextSibling;\\n      }\\n\\n      if (targetChild) {\\n        // Emptying firstChildren/findComponentRootReusableArray is\\n        // not necessary for correctness, but it helps the GC reclaim\\n        // any nodes that were left at the end of the search.\\n        firstChildren.length = 0;\\n\\n        return targetChild;\\n      }\\n    }\\n\\n    firstChildren.length = 0;\\n\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      false,\\n      'findComponentRoot(..., %s): Unable to find element. This probably ' +\\n      'means the DOM was unexpectedly mutated (e.g., by the browser), ' +\\n      'usually due to forgetting a <tbody> when using tables, nesting tags ' +\\n      'like <form>, <p>, or <a>, or using non-SVG elements in an <svg> ' +\\n      'parent. ' +\\n      'Try inspecting the child nodes of the element with React ID `%s`.',\\n      targetID,\\n      ReactMount.getID(ancestorNode)\\n    ) : invariant(false));\\n  },\\n\\n\\n  /**\\n   * React ID utilities.\\n   */\\n\\n  getReactRootID: getReactRootID,\\n\\n  getID: getID,\\n\\n  setID: setID,\\n\\n  getNode: getNode,\\n\\n  purgeID: purgeID\\n};\\n\\n// Deprecations (remove for 0.13)\\nReactMount.renderComponent = deprecated(\\n  'ReactMount',\\n  'renderComponent',\\n  'render',\\n  this,\\n  ReactMount.render\\n);\\n\\nmodule.exports = ReactMount;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactMount.js\\n ** module id = 56\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactMount.js?\");\n\n/***/ },\n/* 57 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/containsNode.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule containsNode\\n * @typechecks\\n */\\n\\nvar isTextNode = __webpack_require__(/*! ./isTextNode */ 58);\\n\\n/*jslint bitwise:true */\\n\\n/**\\n * Checks if a given DOM node contains or is another DOM node.\\n *\\n * @param {?DOMNode} outerNode Outer DOM node.\\n * @param {?DOMNode} innerNode Inner DOM node.\\n * @return {boolean} True if `outerNode` contains or is `innerNode`.\\n */\\nfunction containsNode(outerNode, innerNode) {\\n  if (!outerNode || !innerNode) {\\n    return false;\\n  } else if (outerNode === innerNode) {\\n    return true;\\n  } else if (isTextNode(outerNode)) {\\n    return false;\\n  } else if (isTextNode(innerNode)) {\\n    return containsNode(outerNode, innerNode.parentNode);\\n  } else if (outerNode.contains) {\\n    return outerNode.contains(innerNode);\\n  } else if (outerNode.compareDocumentPosition) {\\n    return !!(outerNode.compareDocumentPosition(innerNode) & 16);\\n  } else {\\n    return false;\\n  }\\n}\\n\\nmodule.exports = containsNode;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/containsNode.js\\n ** module id = 57\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/containsNode.js?\");\n\n/***/ },\n/* 58 */\n/*!***********************************!*\\\n  !*** ./~/react/lib/isTextNode.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule isTextNode\\n * @typechecks\\n */\\n\\nvar isNode = __webpack_require__(/*! ./isNode */ 59);\\n\\n/**\\n * @param {*} object The object to check.\\n * @return {boolean} Whether or not the object is a DOM text node.\\n */\\nfunction isTextNode(object) {\\n  return isNode(object) && object.nodeType == 3;\\n}\\n\\nmodule.exports = isTextNode;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/isTextNode.js\\n ** module id = 58\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/isTextNode.js?\");\n\n/***/ },\n/* 59 */\n/*!*******************************!*\\\n  !*** ./~/react/lib/isNode.js ***!\n  \\*******************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule isNode\\n * @typechecks\\n */\\n\\n/**\\n * @param {*} object The object to check.\\n * @return {boolean} Whether or not the object is a DOM node.\\n */\\nfunction isNode(object) {\\n  return !!(object && (\\n    typeof Node === 'function' ? object instanceof Node :\\n      typeof object === 'object' &&\\n      typeof object.nodeType === 'number' &&\\n      typeof object.nodeName === 'string'\\n  ));\\n}\\n\\nmodule.exports = isNode;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/isNode.js\\n ** module id = 59\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/isNode.js?\");\n\n/***/ },\n/* 60 */\n/*!*************************************************!*\\\n  !*** ./~/react/lib/ReactBrowserEventEmitter.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactBrowserEventEmitter\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar EventPluginHub = __webpack_require__(/*! ./EventPluginHub */ 61);\\nvar EventPluginRegistry = __webpack_require__(/*! ./EventPluginRegistry */ 62);\\nvar ReactEventEmitterMixin = __webpack_require__(/*! ./ReactEventEmitterMixin */ 65);\\nvar ViewportMetrics = __webpack_require__(/*! ./ViewportMetrics */ 66);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar isEventSupported = __webpack_require__(/*! ./isEventSupported */ 68);\\n\\n/**\\n * Summary of `ReactBrowserEventEmitter` event handling:\\n *\\n *  - Top-level delegation is used to trap most native browser events. This\\n *    may only occur in the main thread and is the responsibility of\\n *    ReactEventListener, which is injected and can therefore support pluggable\\n *    event sources. This is the only work that occurs in the main thread.\\n *\\n *  - We normalize and de-duplicate events to account for browser quirks. This\\n *    may be done in the worker thread.\\n *\\n *  - Forward these native events (with the associated top-level type used to\\n *    trap it) to `EventPluginHub`, which in turn will ask plugins if they want\\n *    to extract any synthetic events.\\n *\\n *  - The `EventPluginHub` will then process each event by annotating them with\\n *    \\\"dispatches\\\", a sequence of listeners and IDs that care about that event.\\n *\\n *  - The `EventPluginHub` then dispatches the events.\\n *\\n * Overview of React and the event system:\\n *\\n * +------------+    .\\n * |    DOM     |    .\\n * +------------+    .\\n *       |           .\\n *       v           .\\n * +------------+    .\\n * | ReactEvent |    .\\n * |  Listener  |    .\\n * +------------+    .                         +-----------+\\n *       |           .               +--------+|SimpleEvent|\\n *       |           .               |         |Plugin     |\\n * +-----|------+    .               v         +-----------+\\n * |     |      |    .    +--------------+                    +------------+\\n * |     +-----------.--->|EventPluginHub|                    |    Event   |\\n * |            |    .    |              |     +-----------+  | Propagators|\\n * | ReactEvent |    .    |              |     |TapEvent   |  |------------|\\n * |  Emitter   |    .    |              |<---+|Plugin     |  |other plugin|\\n * |            |    .    |              |     +-----------+  |  utilities |\\n * |     +-----------.--->|              |                    +------------+\\n * |     |      |    .    +--------------+\\n * +-----|------+    .                ^        +-----------+\\n *       |           .                |        |Enter/Leave|\\n *       +           .                +-------+|Plugin     |\\n * +-------------+   .                         +-----------+\\n * | application |   .\\n * |-------------|   .\\n * |             |   .\\n * |             |   .\\n * +-------------+   .\\n *                   .\\n *    React Core     .  General Purpose Event Plugin System\\n */\\n\\nvar alreadyListeningTo = {};\\nvar isMonitoringScrollValue = false;\\nvar reactTopListenersCounter = 0;\\n\\n// For events like 'submit' which don't consistently bubble (which we trap at a\\n// lower node than `document`), binding at `document` would cause duplicate\\n// events so we don't include them here\\nvar topEventMapping = {\\n  topBlur: 'blur',\\n  topChange: 'change',\\n  topClick: 'click',\\n  topCompositionEnd: 'compositionend',\\n  topCompositionStart: 'compositionstart',\\n  topCompositionUpdate: 'compositionupdate',\\n  topContextMenu: 'contextmenu',\\n  topCopy: 'copy',\\n  topCut: 'cut',\\n  topDoubleClick: 'dblclick',\\n  topDrag: 'drag',\\n  topDragEnd: 'dragend',\\n  topDragEnter: 'dragenter',\\n  topDragExit: 'dragexit',\\n  topDragLeave: 'dragleave',\\n  topDragOver: 'dragover',\\n  topDragStart: 'dragstart',\\n  topDrop: 'drop',\\n  topFocus: 'focus',\\n  topInput: 'input',\\n  topKeyDown: 'keydown',\\n  topKeyPress: 'keypress',\\n  topKeyUp: 'keyup',\\n  topMouseDown: 'mousedown',\\n  topMouseMove: 'mousemove',\\n  topMouseOut: 'mouseout',\\n  topMouseOver: 'mouseover',\\n  topMouseUp: 'mouseup',\\n  topPaste: 'paste',\\n  topScroll: 'scroll',\\n  topSelectionChange: 'selectionchange',\\n  topTextInput: 'textInput',\\n  topTouchCancel: 'touchcancel',\\n  topTouchEnd: 'touchend',\\n  topTouchMove: 'touchmove',\\n  topTouchStart: 'touchstart',\\n  topWheel: 'wheel'\\n};\\n\\n/**\\n * To ensure no conflicts with other potential React instances on the page\\n */\\nvar topListenersIDKey = \\\"_reactListenersID\\\" + String(Math.random()).slice(2);\\n\\nfunction getListeningForDocument(mountAt) {\\n  // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`\\n  // directly.\\n  if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {\\n    mountAt[topListenersIDKey] = reactTopListenersCounter++;\\n    alreadyListeningTo[mountAt[topListenersIDKey]] = {};\\n  }\\n  return alreadyListeningTo[mountAt[topListenersIDKey]];\\n}\\n\\n/**\\n * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For\\n * example:\\n *\\n *   ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction);\\n *\\n * This would allocate a \\\"registration\\\" of `('onClick', myFunction)` on 'myID'.\\n *\\n * @internal\\n */\\nvar ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, {\\n\\n  /**\\n   * Injectable event backend\\n   */\\n  ReactEventListener: null,\\n\\n  injection: {\\n    /**\\n     * @param {object} ReactEventListener\\n     */\\n    injectReactEventListener: function(ReactEventListener) {\\n      ReactEventListener.setHandleTopLevel(\\n        ReactBrowserEventEmitter.handleTopLevel\\n      );\\n      ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;\\n    }\\n  },\\n\\n  /**\\n   * Sets whether or not any created callbacks should be enabled.\\n   *\\n   * @param {boolean} enabled True if callbacks should be enabled.\\n   */\\n  setEnabled: function(enabled) {\\n    if (ReactBrowserEventEmitter.ReactEventListener) {\\n      ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);\\n    }\\n  },\\n\\n  /**\\n   * @return {boolean} True if callbacks are enabled.\\n   */\\n  isEnabled: function() {\\n    return !!(\\n      ReactBrowserEventEmitter.ReactEventListener &&\\n      ReactBrowserEventEmitter.ReactEventListener.isEnabled()\\n    );\\n  },\\n\\n  /**\\n   * We listen for bubbled touch events on the document object.\\n   *\\n   * Firefox v8.01 (and possibly others) exhibited strange behavior when\\n   * mounting `onmousemove` events at some node that was not the document\\n   * element. The symptoms were that if your mouse is not moving over something\\n   * contained within that mount point (for example on the background) the\\n   * top-level listeners for `onmousemove` won't be called. However, if you\\n   * register the `mousemove` on the document object, then it will of course\\n   * catch all `mousemove`s. This along with iOS quirks, justifies restricting\\n   * top-level listeners to the document object only, at least for these\\n   * movement types of events and possibly all events.\\n   *\\n   * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\\n   *\\n   * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but\\n   * they bubble to document.\\n   *\\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\\n   * @param {object} contentDocumentHandle Document which owns the container\\n   */\\n  listenTo: function(registrationName, contentDocumentHandle) {\\n    var mountAt = contentDocumentHandle;\\n    var isListening = getListeningForDocument(mountAt);\\n    var dependencies = EventPluginRegistry.\\n      registrationNameDependencies[registrationName];\\n\\n    var topLevelTypes = EventConstants.topLevelTypes;\\n    for (var i = 0, l = dependencies.length; i < l; i++) {\\n      var dependency = dependencies[i];\\n      if (!(\\n            isListening.hasOwnProperty(dependency) &&\\n            isListening[dependency]\\n          )) {\\n        if (dependency === topLevelTypes.topWheel) {\\n          if (isEventSupported('wheel')) {\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\\n              topLevelTypes.topWheel,\\n              'wheel',\\n              mountAt\\n            );\\n          } else if (isEventSupported('mousewheel')) {\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\\n              topLevelTypes.topWheel,\\n              'mousewheel',\\n              mountAt\\n            );\\n          } else {\\n            // Firefox needs to capture a different mouse scroll event.\\n            // @see http://www.quirksmode.org/dom/events/tests/scroll.html\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\\n              topLevelTypes.topWheel,\\n              'DOMMouseScroll',\\n              mountAt\\n            );\\n          }\\n        } else if (dependency === topLevelTypes.topScroll) {\\n\\n          if (isEventSupported('scroll', true)) {\\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(\\n              topLevelTypes.topScroll,\\n              'scroll',\\n              mountAt\\n            );\\n          } else {\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\\n              topLevelTypes.topScroll,\\n              'scroll',\\n              ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE\\n            );\\n          }\\n        } else if (dependency === topLevelTypes.topFocus ||\\n            dependency === topLevelTypes.topBlur) {\\n\\n          if (isEventSupported('focus', true)) {\\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(\\n              topLevelTypes.topFocus,\\n              'focus',\\n              mountAt\\n            );\\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(\\n              topLevelTypes.topBlur,\\n              'blur',\\n              mountAt\\n            );\\n          } else if (isEventSupported('focusin')) {\\n            // IE has `focusin` and `focusout` events which bubble.\\n            // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\\n              topLevelTypes.topFocus,\\n              'focusin',\\n              mountAt\\n            );\\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\\n              topLevelTypes.topBlur,\\n              'focusout',\\n              mountAt\\n            );\\n          }\\n\\n          // to make sure blur and focus event listeners are only attached once\\n          isListening[topLevelTypes.topBlur] = true;\\n          isListening[topLevelTypes.topFocus] = true;\\n        } else if (topEventMapping.hasOwnProperty(dependency)) {\\n          ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\\n            dependency,\\n            topEventMapping[dependency],\\n            mountAt\\n          );\\n        }\\n\\n        isListening[dependency] = true;\\n      }\\n    }\\n  },\\n\\n  trapBubbledEvent: function(topLevelType, handlerBaseName, handle) {\\n    return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\\n      topLevelType,\\n      handlerBaseName,\\n      handle\\n    );\\n  },\\n\\n  trapCapturedEvent: function(topLevelType, handlerBaseName, handle) {\\n    return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(\\n      topLevelType,\\n      handlerBaseName,\\n      handle\\n    );\\n  },\\n\\n  /**\\n   * Listens to window scroll and resize events. We cache scroll values so that\\n   * application code can access them without triggering reflows.\\n   *\\n   * NOTE: Scroll events do not bubble.\\n   *\\n   * @see http://www.quirksmode.org/dom/events/scroll.html\\n   */\\n  ensureScrollValueMonitoring: function(){\\n    if (!isMonitoringScrollValue) {\\n      var refresh = ViewportMetrics.refreshScrollValues;\\n      ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);\\n      isMonitoringScrollValue = true;\\n    }\\n  },\\n\\n  eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs,\\n\\n  registrationNameModules: EventPluginHub.registrationNameModules,\\n\\n  putListener: EventPluginHub.putListener,\\n\\n  getListener: EventPluginHub.getListener,\\n\\n  deleteListener: EventPluginHub.deleteListener,\\n\\n  deleteAllListeners: EventPluginHub.deleteAllListeners\\n\\n});\\n\\nmodule.exports = ReactBrowserEventEmitter;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactBrowserEventEmitter.js\\n ** module id = 60\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactBrowserEventEmitter.js?\");\n\n/***/ },\n/* 61 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/EventPluginHub.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule EventPluginHub\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventPluginRegistry = __webpack_require__(/*! ./EventPluginRegistry */ 62);\\nvar EventPluginUtils = __webpack_require__(/*! ./EventPluginUtils */ 13);\\n\\nvar accumulateInto = __webpack_require__(/*! ./accumulateInto */ 63);\\nvar forEachAccumulated = __webpack_require__(/*! ./forEachAccumulated */ 64);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Internal store for event listeners\\n */\\nvar listenerBank = {};\\n\\n/**\\n * Internal queue of events that have accumulated their dispatches and are\\n * waiting to have their dispatches executed.\\n */\\nvar eventQueue = null;\\n\\n/**\\n * Dispatches an event and releases it back into the pool, unless persistent.\\n *\\n * @param {?object} event Synthetic event to be dispatched.\\n * @private\\n */\\nvar executeDispatchesAndRelease = function(event) {\\n  if (event) {\\n    var executeDispatch = EventPluginUtils.executeDispatch;\\n    // Plugins can provide custom behavior when dispatching events.\\n    var PluginModule = EventPluginRegistry.getPluginModuleForEvent(event);\\n    if (PluginModule && PluginModule.executeDispatch) {\\n      executeDispatch = PluginModule.executeDispatch;\\n    }\\n    EventPluginUtils.executeDispatchesInOrder(event, executeDispatch);\\n\\n    if (!event.isPersistent()) {\\n      event.constructor.release(event);\\n    }\\n  }\\n};\\n\\n/**\\n * - `InstanceHandle`: [required] Module that performs logical traversals of DOM\\n *   hierarchy given ids of the logical DOM elements involved.\\n */\\nvar InstanceHandle = null;\\n\\nfunction validateInstanceHandle() {\\n  var invalid = !InstanceHandle||\\n    !InstanceHandle.traverseTwoPhase ||\\n    !InstanceHandle.traverseEnterLeave;\\n  if (invalid) {\\n    throw new Error('InstanceHandle not injected before use!');\\n  }\\n}\\n\\n/**\\n * This is a unified interface for event plugins to be installed and configured.\\n *\\n * Event plugins can implement the following properties:\\n *\\n *   `extractEvents` {function(string, DOMEventTarget, string, object): *}\\n *     Required. When a top-level event is fired, this method is expected to\\n *     extract synthetic events that will in turn be queued and dispatched.\\n *\\n *   `eventTypes` {object}\\n *     Optional, plugins that fire events must publish a mapping of registration\\n *     names that are used to register listeners. Values of this mapping must\\n *     be objects that contain `registrationName` or `phasedRegistrationNames`.\\n *\\n *   `executeDispatch` {function(object, function, string)}\\n *     Optional, allows plugins to override how an event gets dispatched. By\\n *     default, the listener is simply invoked.\\n *\\n * Each plugin that is injected into `EventsPluginHub` is immediately operable.\\n *\\n * @public\\n */\\nvar EventPluginHub = {\\n\\n  /**\\n   * Methods for injecting dependencies.\\n   */\\n  injection: {\\n\\n    /**\\n     * @param {object} InjectedMount\\n     * @public\\n     */\\n    injectMount: EventPluginUtils.injection.injectMount,\\n\\n    /**\\n     * @param {object} InjectedInstanceHandle\\n     * @public\\n     */\\n    injectInstanceHandle: function(InjectedInstanceHandle) {\\n      InstanceHandle = InjectedInstanceHandle;\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        validateInstanceHandle();\\n      }\\n    },\\n\\n    getInstanceHandle: function() {\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        validateInstanceHandle();\\n      }\\n      return InstanceHandle;\\n    },\\n\\n    /**\\n     * @param {array} InjectedEventPluginOrder\\n     * @public\\n     */\\n    injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,\\n\\n    /**\\n     * @param {object} injectedNamesToPlugins Map from names to plugin modules.\\n     */\\n    injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName\\n\\n  },\\n\\n  eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs,\\n\\n  registrationNameModules: EventPluginRegistry.registrationNameModules,\\n\\n  /**\\n   * Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent.\\n   *\\n   * @param {string} id ID of the DOM element.\\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\\n   * @param {?function} listener The callback to store.\\n   */\\n  putListener: function(id, registrationName, listener) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      !listener || typeof listener === 'function',\\n      'Expected %s listener to be a function, instead got type %s',\\n      registrationName, typeof listener\\n    ) : invariant(!listener || typeof listener === 'function'));\\n\\n    var bankForRegistrationName =\\n      listenerBank[registrationName] || (listenerBank[registrationName] = {});\\n    bankForRegistrationName[id] = listener;\\n  },\\n\\n  /**\\n   * @param {string} id ID of the DOM element.\\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\\n   * @return {?function} The stored callback.\\n   */\\n  getListener: function(id, registrationName) {\\n    var bankForRegistrationName = listenerBank[registrationName];\\n    return bankForRegistrationName && bankForRegistrationName[id];\\n  },\\n\\n  /**\\n   * Deletes a listener from the registration bank.\\n   *\\n   * @param {string} id ID of the DOM element.\\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\\n   */\\n  deleteListener: function(id, registrationName) {\\n    var bankForRegistrationName = listenerBank[registrationName];\\n    if (bankForRegistrationName) {\\n      delete bankForRegistrationName[id];\\n    }\\n  },\\n\\n  /**\\n   * Deletes all listeners for the DOM element with the supplied ID.\\n   *\\n   * @param {string} id ID of the DOM element.\\n   */\\n  deleteAllListeners: function(id) {\\n    for (var registrationName in listenerBank) {\\n      delete listenerBank[registrationName][id];\\n    }\\n  },\\n\\n  /**\\n   * Allows registered plugins an opportunity to extract events from top-level\\n   * native browser events.\\n   *\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native browser event.\\n   * @return {*} An accumulation of synthetic events.\\n   * @internal\\n   */\\n  extractEvents: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n    var events;\\n    var plugins = EventPluginRegistry.plugins;\\n    for (var i = 0, l = plugins.length; i < l; i++) {\\n      // Not every plugin in the ordering may be loaded at runtime.\\n      var possiblePlugin = plugins[i];\\n      if (possiblePlugin) {\\n        var extractedEvents = possiblePlugin.extractEvents(\\n          topLevelType,\\n          topLevelTarget,\\n          topLevelTargetID,\\n          nativeEvent\\n        );\\n        if (extractedEvents) {\\n          events = accumulateInto(events, extractedEvents);\\n        }\\n      }\\n    }\\n    return events;\\n  },\\n\\n  /**\\n   * Enqueues a synthetic event that should be dispatched when\\n   * `processEventQueue` is invoked.\\n   *\\n   * @param {*} events An accumulation of synthetic events.\\n   * @internal\\n   */\\n  enqueueEvents: function(events) {\\n    if (events) {\\n      eventQueue = accumulateInto(eventQueue, events);\\n    }\\n  },\\n\\n  /**\\n   * Dispatches all synthetic events on the event queue.\\n   *\\n   * @internal\\n   */\\n  processEventQueue: function() {\\n    // Set `eventQueue` to null before processing it so that we can tell if more\\n    // events get enqueued while processing.\\n    var processingEventQueue = eventQueue;\\n    eventQueue = null;\\n    forEachAccumulated(processingEventQueue, executeDispatchesAndRelease);\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      !eventQueue,\\n      'processEventQueue(): Additional events were enqueued while processing ' +\\n      'an event queue. Support for this has not yet been implemented.'\\n    ) : invariant(!eventQueue));\\n  },\\n\\n  /**\\n   * These are needed for tests only. Do not use!\\n   */\\n  __purge: function() {\\n    listenerBank = {};\\n  },\\n\\n  __getListenerBank: function() {\\n    return listenerBank;\\n  }\\n\\n};\\n\\nmodule.exports = EventPluginHub;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/EventPluginHub.js\\n ** module id = 61\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/EventPluginHub.js?\");\n\n/***/ },\n/* 62 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/EventPluginRegistry.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule EventPluginRegistry\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Injectable ordering of event plugins.\\n */\\nvar EventPluginOrder = null;\\n\\n/**\\n * Injectable mapping from names to event plugin modules.\\n */\\nvar namesToPlugins = {};\\n\\n/**\\n * Recomputes the plugin list using the injected plugins and plugin ordering.\\n *\\n * @private\\n */\\nfunction recomputePluginOrdering() {\\n  if (!EventPluginOrder) {\\n    // Wait until an `EventPluginOrder` is injected.\\n    return;\\n  }\\n  for (var pluginName in namesToPlugins) {\\n    var PluginModule = namesToPlugins[pluginName];\\n    var pluginIndex = EventPluginOrder.indexOf(pluginName);\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      pluginIndex > -1,\\n      'EventPluginRegistry: Cannot inject event plugins that do not exist in ' +\\n      'the plugin ordering, `%s`.',\\n      pluginName\\n    ) : invariant(pluginIndex > -1));\\n    if (EventPluginRegistry.plugins[pluginIndex]) {\\n      continue;\\n    }\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      PluginModule.extractEvents,\\n      'EventPluginRegistry: Event plugins must implement an `extractEvents` ' +\\n      'method, but `%s` does not.',\\n      pluginName\\n    ) : invariant(PluginModule.extractEvents));\\n    EventPluginRegistry.plugins[pluginIndex] = PluginModule;\\n    var publishedEvents = PluginModule.eventTypes;\\n    for (var eventName in publishedEvents) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        publishEventForPlugin(\\n          publishedEvents[eventName],\\n          PluginModule,\\n          eventName\\n        ),\\n        'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.',\\n        eventName,\\n        pluginName\\n      ) : invariant(publishEventForPlugin(\\n        publishedEvents[eventName],\\n        PluginModule,\\n        eventName\\n      )));\\n    }\\n  }\\n}\\n\\n/**\\n * Publishes an event so that it can be dispatched by the supplied plugin.\\n *\\n * @param {object} dispatchConfig Dispatch configuration for the event.\\n * @param {object} PluginModule Plugin publishing the event.\\n * @return {boolean} True if the event was successfully published.\\n * @private\\n */\\nfunction publishEventForPlugin(dispatchConfig, PluginModule, eventName) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    !EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName),\\n    'EventPluginHub: More than one plugin attempted to publish the same ' +\\n    'event name, `%s`.',\\n    eventName\\n  ) : invariant(!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName)));\\n  EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;\\n\\n  var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\\n  if (phasedRegistrationNames) {\\n    for (var phaseName in phasedRegistrationNames) {\\n      if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\\n        var phasedRegistrationName = phasedRegistrationNames[phaseName];\\n        publishRegistrationName(\\n          phasedRegistrationName,\\n          PluginModule,\\n          eventName\\n        );\\n      }\\n    }\\n    return true;\\n  } else if (dispatchConfig.registrationName) {\\n    publishRegistrationName(\\n      dispatchConfig.registrationName,\\n      PluginModule,\\n      eventName\\n    );\\n    return true;\\n  }\\n  return false;\\n}\\n\\n/**\\n * Publishes a registration name that is used to identify dispatched events and\\n * can be used with `EventPluginHub.putListener` to register listeners.\\n *\\n * @param {string} registrationName Registration name to add.\\n * @param {object} PluginModule Plugin publishing the event.\\n * @private\\n */\\nfunction publishRegistrationName(registrationName, PluginModule, eventName) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    !EventPluginRegistry.registrationNameModules[registrationName],\\n    'EventPluginHub: More than one plugin attempted to publish the same ' +\\n    'registration name, `%s`.',\\n    registrationName\\n  ) : invariant(!EventPluginRegistry.registrationNameModules[registrationName]));\\n  EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;\\n  EventPluginRegistry.registrationNameDependencies[registrationName] =\\n    PluginModule.eventTypes[eventName].dependencies;\\n}\\n\\n/**\\n * Registers plugins so that they can extract and dispatch events.\\n *\\n * @see {EventPluginHub}\\n */\\nvar EventPluginRegistry = {\\n\\n  /**\\n   * Ordered list of injected plugins.\\n   */\\n  plugins: [],\\n\\n  /**\\n   * Mapping from event name to dispatch config\\n   */\\n  eventNameDispatchConfigs: {},\\n\\n  /**\\n   * Mapping from registration name to plugin module\\n   */\\n  registrationNameModules: {},\\n\\n  /**\\n   * Mapping from registration name to event name\\n   */\\n  registrationNameDependencies: {},\\n\\n  /**\\n   * Injects an ordering of plugins (by plugin name). This allows the ordering\\n   * to be decoupled from injection of the actual plugins so that ordering is\\n   * always deterministic regardless of packaging, on-the-fly injection, etc.\\n   *\\n   * @param {array} InjectedEventPluginOrder\\n   * @internal\\n   * @see {EventPluginHub.injection.injectEventPluginOrder}\\n   */\\n  injectEventPluginOrder: function(InjectedEventPluginOrder) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      !EventPluginOrder,\\n      'EventPluginRegistry: Cannot inject event plugin ordering more than ' +\\n      'once. You are likely trying to load more than one copy of React.'\\n    ) : invariant(!EventPluginOrder));\\n    // Clone the ordering so it cannot be dynamically mutated.\\n    EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);\\n    recomputePluginOrdering();\\n  },\\n\\n  /**\\n   * Injects plugins to be used by `EventPluginHub`. The plugin names must be\\n   * in the ordering injected by `injectEventPluginOrder`.\\n   *\\n   * Plugins can be injected as part of page initialization or on-the-fly.\\n   *\\n   * @param {object} injectedNamesToPlugins Map from names to plugin modules.\\n   * @internal\\n   * @see {EventPluginHub.injection.injectEventPluginsByName}\\n   */\\n  injectEventPluginsByName: function(injectedNamesToPlugins) {\\n    var isOrderingDirty = false;\\n    for (var pluginName in injectedNamesToPlugins) {\\n      if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\\n        continue;\\n      }\\n      var PluginModule = injectedNamesToPlugins[pluginName];\\n      if (!namesToPlugins.hasOwnProperty(pluginName) ||\\n          namesToPlugins[pluginName] !== PluginModule) {\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          !namesToPlugins[pluginName],\\n          'EventPluginRegistry: Cannot inject two different event plugins ' +\\n          'using the same name, `%s`.',\\n          pluginName\\n        ) : invariant(!namesToPlugins[pluginName]));\\n        namesToPlugins[pluginName] = PluginModule;\\n        isOrderingDirty = true;\\n      }\\n    }\\n    if (isOrderingDirty) {\\n      recomputePluginOrdering();\\n    }\\n  },\\n\\n  /**\\n   * Looks up the plugin for the supplied event.\\n   *\\n   * @param {object} event A synthetic event.\\n   * @return {?object} The plugin that created the supplied event.\\n   * @internal\\n   */\\n  getPluginModuleForEvent: function(event) {\\n    var dispatchConfig = event.dispatchConfig;\\n    if (dispatchConfig.registrationName) {\\n      return EventPluginRegistry.registrationNameModules[\\n        dispatchConfig.registrationName\\n      ] || null;\\n    }\\n    for (var phase in dispatchConfig.phasedRegistrationNames) {\\n      if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {\\n        continue;\\n      }\\n      var PluginModule = EventPluginRegistry.registrationNameModules[\\n        dispatchConfig.phasedRegistrationNames[phase]\\n      ];\\n      if (PluginModule) {\\n        return PluginModule;\\n      }\\n    }\\n    return null;\\n  },\\n\\n  /**\\n   * Exposed for unit testing.\\n   * @private\\n   */\\n  _resetEventPlugins: function() {\\n    EventPluginOrder = null;\\n    for (var pluginName in namesToPlugins) {\\n      if (namesToPlugins.hasOwnProperty(pluginName)) {\\n        delete namesToPlugins[pluginName];\\n      }\\n    }\\n    EventPluginRegistry.plugins.length = 0;\\n\\n    var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;\\n    for (var eventName in eventNameDispatchConfigs) {\\n      if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {\\n        delete eventNameDispatchConfigs[eventName];\\n      }\\n    }\\n\\n    var registrationNameModules = EventPluginRegistry.registrationNameModules;\\n    for (var registrationName in registrationNameModules) {\\n      if (registrationNameModules.hasOwnProperty(registrationName)) {\\n        delete registrationNameModules[registrationName];\\n      }\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = EventPluginRegistry;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/EventPluginRegistry.js\\n ** module id = 62\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/EventPluginRegistry.js?\");\n\n/***/ },\n/* 63 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/accumulateInto.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule accumulateInto\\n */\\n\\n\\\"use strict\\\";\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n *\\n * Accumulates items that must not be null or undefined into the first one. This\\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\\n * API cleanness. Since `current` can be null before being passed in and not\\n * null after this function, make sure to assign it back to `current`:\\n *\\n * `a = accumulateInto(a, b);`\\n *\\n * This API should be sparingly used. Try `accumulate` for something cleaner.\\n *\\n * @return {*|array<*>} An accumulation of items.\\n */\\n\\nfunction accumulateInto(current, next) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    next != null,\\n    'accumulateInto(...): Accumulated items must not be null or undefined.'\\n  ) : invariant(next != null));\\n  if (current == null) {\\n    return next;\\n  }\\n\\n  // Both are not empty. Warning: Never call x.concat(y) when you are not\\n  // certain that x is an Array (x could be a string with concat method).\\n  var currentIsArray = Array.isArray(current);\\n  var nextIsArray = Array.isArray(next);\\n\\n  if (currentIsArray && nextIsArray) {\\n    current.push.apply(current, next);\\n    return current;\\n  }\\n\\n  if (currentIsArray) {\\n    current.push(next);\\n    return current;\\n  }\\n\\n  if (nextIsArray) {\\n    // A bit too dangerous to mutate `next`.\\n    return [current].concat(next);\\n  }\\n\\n  return [current, next];\\n}\\n\\nmodule.exports = accumulateInto;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/accumulateInto.js\\n ** module id = 63\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/accumulateInto.js?\");\n\n/***/ },\n/* 64 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/forEachAccumulated.js ***!\n  \\*******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule forEachAccumulated\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * @param {array} an \\\"accumulation\\\" of items which is either an Array or\\n * a single item. Useful when paired with the `accumulate` module. This is a\\n * simple utility that allows us to reason about a collection of items, but\\n * handling the case when there is exactly one item (and we do not need to\\n * allocate an array).\\n */\\nvar forEachAccumulated = function(arr, cb, scope) {\\n  if (Array.isArray(arr)) {\\n    arr.forEach(cb, scope);\\n  } else if (arr) {\\n    cb.call(scope, arr);\\n  }\\n};\\n\\nmodule.exports = forEachAccumulated;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/forEachAccumulated.js\\n ** module id = 64\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/forEachAccumulated.js?\");\n\n/***/ },\n/* 65 */\n/*!***********************************************!*\\\n  !*** ./~/react/lib/ReactEventEmitterMixin.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactEventEmitterMixin\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventPluginHub = __webpack_require__(/*! ./EventPluginHub */ 61);\\n\\nfunction runEventQueueInBatch(events) {\\n  EventPluginHub.enqueueEvents(events);\\n  EventPluginHub.processEventQueue();\\n}\\n\\nvar ReactEventEmitterMixin = {\\n\\n  /**\\n   * Streams a fired top-level event to `EventPluginHub` where plugins have the\\n   * opportunity to create `ReactEvent`s to be dispatched.\\n   *\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {object} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native environment event.\\n   */\\n  handleTopLevel: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n    var events = EventPluginHub.extractEvents(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent\\n    );\\n\\n    runEventQueueInBatch(events);\\n  }\\n};\\n\\nmodule.exports = ReactEventEmitterMixin;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactEventEmitterMixin.js\\n ** module id = 65\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactEventEmitterMixin.js?\");\n\n/***/ },\n/* 66 */\n/*!****************************************!*\\\n  !*** ./~/react/lib/ViewportMetrics.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ViewportMetrics\\n */\\n\\n\\\"use strict\\\";\\n\\nvar getUnboundedScrollPosition = __webpack_require__(/*! ./getUnboundedScrollPosition */ 67);\\n\\nvar ViewportMetrics = {\\n\\n  currentScrollLeft: 0,\\n\\n  currentScrollTop: 0,\\n\\n  refreshScrollValues: function() {\\n    var scrollPosition = getUnboundedScrollPosition(window);\\n    ViewportMetrics.currentScrollLeft = scrollPosition.x;\\n    ViewportMetrics.currentScrollTop = scrollPosition.y;\\n  }\\n\\n};\\n\\nmodule.exports = ViewportMetrics;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ViewportMetrics.js\\n ** module id = 66\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ViewportMetrics.js?\");\n\n/***/ },\n/* 67 */\n/*!***************************************************!*\\\n  !*** ./~/react/lib/getUnboundedScrollPosition.js ***!\n  \\***************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getUnboundedScrollPosition\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Gets the scroll position of the supplied element or window.\\n *\\n * The return values are unbounded, unlike `getScrollPosition`. This means they\\n * may be negative or exceed the element boundaries (which is possible using\\n * inertial scrolling).\\n *\\n * @param {DOMWindow|DOMElement} scrollable\\n * @return {object} Map with `x` and `y` keys.\\n */\\nfunction getUnboundedScrollPosition(scrollable) {\\n  if (scrollable === window) {\\n    return {\\n      x: window.pageXOffset || document.documentElement.scrollLeft,\\n      y: window.pageYOffset || document.documentElement.scrollTop\\n    };\\n  }\\n  return {\\n    x: scrollable.scrollLeft,\\n    y: scrollable.scrollTop\\n  };\\n}\\n\\nmodule.exports = getUnboundedScrollPosition;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getUnboundedScrollPosition.js\\n ** module id = 67\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getUnboundedScrollPosition.js?\");\n\n/***/ },\n/* 68 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/isEventSupported.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule isEventSupported\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar useHasFeature;\\nif (ExecutionEnvironment.canUseDOM) {\\n  useHasFeature =\\n    document.implementation &&\\n    document.implementation.hasFeature &&\\n    // always returns true in newer browsers as per the standard.\\n    // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\\n    document.implementation.hasFeature('', '') !== true;\\n}\\n\\n/**\\n * Checks if an event is supported in the current execution environment.\\n *\\n * NOTE: This will not work correctly for non-generic events such as `change`,\\n * `reset`, `load`, `error`, and `select`.\\n *\\n * Borrows from Modernizr.\\n *\\n * @param {string} eventNameSuffix Event name, e.g. \\\"click\\\".\\n * @param {?boolean} capture Check if the capture phase is supported.\\n * @return {boolean} True if the event is supported.\\n * @internal\\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\\n */\\nfunction isEventSupported(eventNameSuffix, capture) {\\n  if (!ExecutionEnvironment.canUseDOM ||\\n      capture && !('addEventListener' in document)) {\\n    return false;\\n  }\\n\\n  var eventName = 'on' + eventNameSuffix;\\n  var isSupported = eventName in document;\\n\\n  if (!isSupported) {\\n    var element = document.createElement('div');\\n    element.setAttribute(eventName, 'return;');\\n    isSupported = typeof element[eventName] === 'function';\\n  }\\n\\n  if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\\n    // This is the only way to test support for the `wheel` event in IE9+.\\n    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\\n  }\\n\\n  return isSupported;\\n}\\n\\nmodule.exports = isEventSupported;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/isEventSupported.js\\n ** module id = 68\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/isEventSupported.js?\");\n\n/***/ },\n/* 69 */\n/*!***********************************!*\\\n  !*** ./~/react/lib/deprecated.js ***!\n  \\***********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule deprecated\\n */\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\n/**\\n * This will log a single deprecation notice per function and forward the call\\n * on to the new API.\\n *\\n * @param {string} namespace The namespace of the call, eg 'React'\\n * @param {string} oldName The old function name, eg 'renderComponent'\\n * @param {string} newName The new function name, eg 'render'\\n * @param {*} ctx The context this forwarded call should run in\\n * @param {function} fn The function to forward on to\\n * @return {*} Will be the value as returned from `fn`\\n */\\nfunction deprecated(namespace, oldName, newName, ctx, fn) {\\n  var warned = false;\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    var newFn = function() {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n        warned,\\n        (namespace + \\\".\\\" + oldName + \\\" will be deprecated in a future version. \\\") +\\n        (\\\"Use \\\" + namespace + \\\".\\\" + newName + \\\" instead.\\\")\\n      ) : null);\\n      warned = true;\\n      return fn.apply(ctx, arguments);\\n    };\\n    newFn.displayName = (namespace + \\\"_\\\" + oldName);\\n    // We need to make sure all properties of the original fn are copied over.\\n    // In particular, this is needed to support PropTypes\\n    return assign(newFn, fn);\\n  }\\n\\n  return fn;\\n}\\n\\nmodule.exports = deprecated;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/deprecated.js\\n ** module id = 69\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/deprecated.js?\");\n\n/***/ },\n/* 70 */\n/*!*******************************************************!*\\\n  !*** ./~/react/lib/getReactRootElementInContainer.js ***!\n  \\*******************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getReactRootElementInContainer\\n */\\n\\n\\\"use strict\\\";\\n\\nvar DOC_NODE_TYPE = 9;\\n\\n/**\\n * @param {DOMElement|DOMDocument} container DOM element that may contain\\n *                                           a React component\\n * @return {?*} DOM element that may have the reactRoot ID, or null.\\n */\\nfunction getReactRootElementInContainer(container) {\\n  if (!container) {\\n    return null;\\n  }\\n\\n  if (container.nodeType === DOC_NODE_TYPE) {\\n    return container.documentElement;\\n  } else {\\n    return container.firstChild;\\n  }\\n}\\n\\nmodule.exports = getReactRootElementInContainer;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getReactRootElementInContainer.js\\n ** module id = 70\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getReactRootElementInContainer.js?\");\n\n/***/ },\n/* 71 */\n/*!****************************************!*\\\n  !*** ./~/react/lib/ReactMultiChild.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactMultiChild\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 23);\\nvar ReactMultiChildUpdateTypes = __webpack_require__(/*! ./ReactMultiChildUpdateTypes */ 72);\\n\\nvar flattenChildren = __webpack_require__(/*! ./flattenChildren */ 73);\\nvar instantiateReactComponent = __webpack_require__(/*! ./instantiateReactComponent */ 40);\\nvar shouldUpdateReactComponent = __webpack_require__(/*! ./shouldUpdateReactComponent */ 44);\\n\\n/**\\n * Updating children of a component may trigger recursive updates. The depth is\\n * used to batch recursive updates to render markup more efficiently.\\n *\\n * @type {number}\\n * @private\\n */\\nvar updateDepth = 0;\\n\\n/**\\n * Queue of update configuration objects.\\n *\\n * Each object has a `type` property that is in `ReactMultiChildUpdateTypes`.\\n *\\n * @type {array<object>}\\n * @private\\n */\\nvar updateQueue = [];\\n\\n/**\\n * Queue of markup to be rendered.\\n *\\n * @type {array<string>}\\n * @private\\n */\\nvar markupQueue = [];\\n\\n/**\\n * Enqueues markup to be rendered and inserted at a supplied index.\\n *\\n * @param {string} parentID ID of the parent component.\\n * @param {string} markup Markup that renders into an element.\\n * @param {number} toIndex Destination index.\\n * @private\\n */\\nfunction enqueueMarkup(parentID, markup, toIndex) {\\n  // NOTE: Null values reduce hidden classes.\\n  updateQueue.push({\\n    parentID: parentID,\\n    parentNode: null,\\n    type: ReactMultiChildUpdateTypes.INSERT_MARKUP,\\n    markupIndex: markupQueue.push(markup) - 1,\\n    textContent: null,\\n    fromIndex: null,\\n    toIndex: toIndex\\n  });\\n}\\n\\n/**\\n * Enqueues moving an existing element to another index.\\n *\\n * @param {string} parentID ID of the parent component.\\n * @param {number} fromIndex Source index of the existing element.\\n * @param {number} toIndex Destination index of the element.\\n * @private\\n */\\nfunction enqueueMove(parentID, fromIndex, toIndex) {\\n  // NOTE: Null values reduce hidden classes.\\n  updateQueue.push({\\n    parentID: parentID,\\n    parentNode: null,\\n    type: ReactMultiChildUpdateTypes.MOVE_EXISTING,\\n    markupIndex: null,\\n    textContent: null,\\n    fromIndex: fromIndex,\\n    toIndex: toIndex\\n  });\\n}\\n\\n/**\\n * Enqueues removing an element at an index.\\n *\\n * @param {string} parentID ID of the parent component.\\n * @param {number} fromIndex Index of the element to remove.\\n * @private\\n */\\nfunction enqueueRemove(parentID, fromIndex) {\\n  // NOTE: Null values reduce hidden classes.\\n  updateQueue.push({\\n    parentID: parentID,\\n    parentNode: null,\\n    type: ReactMultiChildUpdateTypes.REMOVE_NODE,\\n    markupIndex: null,\\n    textContent: null,\\n    fromIndex: fromIndex,\\n    toIndex: null\\n  });\\n}\\n\\n/**\\n * Enqueues setting the text content.\\n *\\n * @param {string} parentID ID of the parent component.\\n * @param {string} textContent Text content to set.\\n * @private\\n */\\nfunction enqueueTextContent(parentID, textContent) {\\n  // NOTE: Null values reduce hidden classes.\\n  updateQueue.push({\\n    parentID: parentID,\\n    parentNode: null,\\n    type: ReactMultiChildUpdateTypes.TEXT_CONTENT,\\n    markupIndex: null,\\n    textContent: textContent,\\n    fromIndex: null,\\n    toIndex: null\\n  });\\n}\\n\\n/**\\n * Processes any enqueued updates.\\n *\\n * @private\\n */\\nfunction processQueue() {\\n  if (updateQueue.length) {\\n    ReactComponent.BackendIDOperations.dangerouslyProcessChildrenUpdates(\\n      updateQueue,\\n      markupQueue\\n    );\\n    clearQueue();\\n  }\\n}\\n\\n/**\\n * Clears any enqueued updates.\\n *\\n * @private\\n */\\nfunction clearQueue() {\\n  updateQueue.length = 0;\\n  markupQueue.length = 0;\\n}\\n\\n/**\\n * ReactMultiChild are capable of reconciling multiple children.\\n *\\n * @class ReactMultiChild\\n * @internal\\n */\\nvar ReactMultiChild = {\\n\\n  /**\\n   * Provides common functionality for components that must reconcile multiple\\n   * children. This is used by `ReactDOMComponent` to mount, update, and\\n   * unmount child components.\\n   *\\n   * @lends {ReactMultiChild.prototype}\\n   */\\n  Mixin: {\\n\\n    /**\\n     * Generates a \\\"mount image\\\" for each of the supplied children. In the case\\n     * of `ReactDOMComponent`, a mount image is a string of markup.\\n     *\\n     * @param {?object} nestedChildren Nested child maps.\\n     * @return {array} An array of mounted representations.\\n     * @internal\\n     */\\n    mountChildren: function(nestedChildren, transaction) {\\n      var children = flattenChildren(nestedChildren);\\n      var mountImages = [];\\n      var index = 0;\\n      this._renderedChildren = children;\\n      for (var name in children) {\\n        var child = children[name];\\n        if (children.hasOwnProperty(name)) {\\n          // The rendered children must be turned into instances as they're\\n          // mounted.\\n          var childInstance = instantiateReactComponent(child, null);\\n          children[name] = childInstance;\\n          // Inlined for performance, see `ReactInstanceHandles.createReactID`.\\n          var rootID = this._rootNodeID + name;\\n          var mountImage = childInstance.mountComponent(\\n            rootID,\\n            transaction,\\n            this._mountDepth + 1\\n          );\\n          childInstance._mountIndex = index;\\n          mountImages.push(mountImage);\\n          index++;\\n        }\\n      }\\n      return mountImages;\\n    },\\n\\n    /**\\n     * Replaces any rendered children with a text content string.\\n     *\\n     * @param {string} nextContent String of content.\\n     * @internal\\n     */\\n    updateTextContent: function(nextContent) {\\n      updateDepth++;\\n      var errorThrown = true;\\n      try {\\n        var prevChildren = this._renderedChildren;\\n        // Remove any rendered children.\\n        for (var name in prevChildren) {\\n          if (prevChildren.hasOwnProperty(name)) {\\n            this._unmountChildByName(prevChildren[name], name);\\n          }\\n        }\\n        // Set new text content.\\n        this.setTextContent(nextContent);\\n        errorThrown = false;\\n      } finally {\\n        updateDepth--;\\n        if (!updateDepth) {\\n          errorThrown ? clearQueue() : processQueue();\\n        }\\n      }\\n    },\\n\\n    /**\\n     * Updates the rendered children with new children.\\n     *\\n     * @param {?object} nextNestedChildren Nested child maps.\\n     * @param {ReactReconcileTransaction} transaction\\n     * @internal\\n     */\\n    updateChildren: function(nextNestedChildren, transaction) {\\n      updateDepth++;\\n      var errorThrown = true;\\n      try {\\n        this._updateChildren(nextNestedChildren, transaction);\\n        errorThrown = false;\\n      } finally {\\n        updateDepth--;\\n        if (!updateDepth) {\\n          errorThrown ? clearQueue() : processQueue();\\n        }\\n      }\\n    },\\n\\n    /**\\n     * Improve performance by isolating this hot code path from the try/catch\\n     * block in `updateChildren`.\\n     *\\n     * @param {?object} nextNestedChildren Nested child maps.\\n     * @param {ReactReconcileTransaction} transaction\\n     * @final\\n     * @protected\\n     */\\n    _updateChildren: function(nextNestedChildren, transaction) {\\n      var nextChildren = flattenChildren(nextNestedChildren);\\n      var prevChildren = this._renderedChildren;\\n      if (!nextChildren && !prevChildren) {\\n        return;\\n      }\\n      var name;\\n      // `nextIndex` will increment for each child in `nextChildren`, but\\n      // `lastIndex` will be the last index visited in `prevChildren`.\\n      var lastIndex = 0;\\n      var nextIndex = 0;\\n      for (name in nextChildren) {\\n        if (!nextChildren.hasOwnProperty(name)) {\\n          continue;\\n        }\\n        var prevChild = prevChildren && prevChildren[name];\\n        var prevElement = prevChild && prevChild._currentElement;\\n        var nextElement = nextChildren[name];\\n        if (shouldUpdateReactComponent(prevElement, nextElement)) {\\n          this.moveChild(prevChild, nextIndex, lastIndex);\\n          lastIndex = Math.max(prevChild._mountIndex, lastIndex);\\n          prevChild.receiveComponent(nextElement, transaction);\\n          prevChild._mountIndex = nextIndex;\\n        } else {\\n          if (prevChild) {\\n            // Update `lastIndex` before `_mountIndex` gets unset by unmounting.\\n            lastIndex = Math.max(prevChild._mountIndex, lastIndex);\\n            this._unmountChildByName(prevChild, name);\\n          }\\n          // The child must be instantiated before it's mounted.\\n          var nextChildInstance = instantiateReactComponent(\\n            nextElement,\\n            null\\n          );\\n          this._mountChildByNameAtIndex(\\n            nextChildInstance, name, nextIndex, transaction\\n          );\\n        }\\n        nextIndex++;\\n      }\\n      // Remove children that are no longer present.\\n      for (name in prevChildren) {\\n        if (prevChildren.hasOwnProperty(name) &&\\n            !(nextChildren && nextChildren[name])) {\\n          this._unmountChildByName(prevChildren[name], name);\\n        }\\n      }\\n    },\\n\\n    /**\\n     * Unmounts all rendered children. This should be used to clean up children\\n     * when this component is unmounted.\\n     *\\n     * @internal\\n     */\\n    unmountChildren: function() {\\n      var renderedChildren = this._renderedChildren;\\n      for (var name in renderedChildren) {\\n        var renderedChild = renderedChildren[name];\\n        // TODO: When is this not true?\\n        if (renderedChild.unmountComponent) {\\n          renderedChild.unmountComponent();\\n        }\\n      }\\n      this._renderedChildren = null;\\n    },\\n\\n    /**\\n     * Moves a child component to the supplied index.\\n     *\\n     * @param {ReactComponent} child Component to move.\\n     * @param {number} toIndex Destination index of the element.\\n     * @param {number} lastIndex Last index visited of the siblings of `child`.\\n     * @protected\\n     */\\n    moveChild: function(child, toIndex, lastIndex) {\\n      // If the index of `child` is less than `lastIndex`, then it needs to\\n      // be moved. Otherwise, we do not need to move it because a child will be\\n      // inserted or moved before `child`.\\n      if (child._mountIndex < lastIndex) {\\n        enqueueMove(this._rootNodeID, child._mountIndex, toIndex);\\n      }\\n    },\\n\\n    /**\\n     * Creates a child component.\\n     *\\n     * @param {ReactComponent} child Component to create.\\n     * @param {string} mountImage Markup to insert.\\n     * @protected\\n     */\\n    createChild: function(child, mountImage) {\\n      enqueueMarkup(this._rootNodeID, mountImage, child._mountIndex);\\n    },\\n\\n    /**\\n     * Removes a child component.\\n     *\\n     * @param {ReactComponent} child Child to remove.\\n     * @protected\\n     */\\n    removeChild: function(child) {\\n      enqueueRemove(this._rootNodeID, child._mountIndex);\\n    },\\n\\n    /**\\n     * Sets this text content string.\\n     *\\n     * @param {string} textContent Text content to set.\\n     * @protected\\n     */\\n    setTextContent: function(textContent) {\\n      enqueueTextContent(this._rootNodeID, textContent);\\n    },\\n\\n    /**\\n     * Mounts a child with the supplied name.\\n     *\\n     * NOTE: This is part of `updateChildren` and is here for readability.\\n     *\\n     * @param {ReactComponent} child Component to mount.\\n     * @param {string} name Name of the child.\\n     * @param {number} index Index at which to insert the child.\\n     * @param {ReactReconcileTransaction} transaction\\n     * @private\\n     */\\n    _mountChildByNameAtIndex: function(child, name, index, transaction) {\\n      // Inlined for performance, see `ReactInstanceHandles.createReactID`.\\n      var rootID = this._rootNodeID + name;\\n      var mountImage = child.mountComponent(\\n        rootID,\\n        transaction,\\n        this._mountDepth + 1\\n      );\\n      child._mountIndex = index;\\n      this.createChild(child, mountImage);\\n      this._renderedChildren = this._renderedChildren || {};\\n      this._renderedChildren[name] = child;\\n    },\\n\\n    /**\\n     * Unmounts a rendered child by name.\\n     *\\n     * NOTE: This is part of `updateChildren` and is here for readability.\\n     *\\n     * @param {ReactComponent} child Component to unmount.\\n     * @param {string} name Name of the child in `this._renderedChildren`.\\n     * @private\\n     */\\n    _unmountChildByName: function(child, name) {\\n      this.removeChild(child);\\n      child._mountIndex = null;\\n      child.unmountComponent();\\n      delete this._renderedChildren[name];\\n    }\\n\\n  }\\n\\n};\\n\\nmodule.exports = ReactMultiChild;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactMultiChild.js\\n ** module id = 71\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactMultiChild.js?\");\n\n/***/ },\n/* 72 */\n/*!***************************************************!*\\\n  !*** ./~/react/lib/ReactMultiChildUpdateTypes.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactMultiChildUpdateTypes\\n */\\n\\n\\\"use strict\\\";\\n\\nvar keyMirror = __webpack_require__(/*! ./keyMirror */ 15);\\n\\n/**\\n * When a component's children are updated, a series of update configuration\\n * objects are created in order to batch and serialize the required changes.\\n *\\n * Enumerates all the possible types of update configurations.\\n *\\n * @internal\\n */\\nvar ReactMultiChildUpdateTypes = keyMirror({\\n  INSERT_MARKUP: null,\\n  MOVE_EXISTING: null,\\n  REMOVE_NODE: null,\\n  TEXT_CONTENT: null\\n});\\n\\nmodule.exports = ReactMultiChildUpdateTypes;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactMultiChildUpdateTypes.js\\n ** module id = 72\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactMultiChildUpdateTypes.js?\");\n\n/***/ },\n/* 73 */\n/*!****************************************!*\\\n  !*** ./~/react/lib/flattenChildren.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule flattenChildren\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactTextComponent = __webpack_require__(/*! ./ReactTextComponent */ 74);\\n\\nvar traverseAllChildren = __webpack_require__(/*! ./traverseAllChildren */ 18);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\n/**\\n * @param {function} traverseContext Context passed through traversal.\\n * @param {?ReactComponent} child React child component.\\n * @param {!string} name String name of key path to child.\\n */\\nfunction flattenSingleChildIntoContext(traverseContext, child, name) {\\n  // We found a component instance.\\n  var result = traverseContext;\\n  var keyUnique = !result.hasOwnProperty(name);\\n  (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n    keyUnique,\\n    'flattenChildren(...): Encountered two children with the same key, ' +\\n    '`%s`. Child keys must be unique; when two children share a key, only ' +\\n    'the first child will be used.',\\n    name\\n  ) : null);\\n  if (keyUnique && child != null) {\\n    var type = typeof child;\\n    var normalizedValue;\\n\\n    if (type === 'string') {\\n      normalizedValue = ReactTextComponent(child);\\n    } else if (type === 'number') {\\n      normalizedValue = ReactTextComponent('' + child);\\n    } else {\\n      normalizedValue = child;\\n    }\\n\\n    result[name] = normalizedValue;\\n  }\\n}\\n\\n/**\\n * Flattens children that are typically specified as `props.children`. Any null\\n * children will not be included in the resulting object.\\n * @return {!object} flattened children keyed by name.\\n */\\nfunction flattenChildren(children) {\\n  if (children == null) {\\n    return children;\\n  }\\n  var result = {};\\n  traverseAllChildren(children, flattenSingleChildIntoContext, result);\\n  return result;\\n}\\n\\nmodule.exports = flattenChildren;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/flattenChildren.js\\n ** module id = 73\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/flattenChildren.js?\");\n\n/***/ },\n/* 74 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/ReactTextComponent.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactTextComponent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar DOMPropertyOperations = __webpack_require__(/*! ./DOMPropertyOperations */ 7);\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 23);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar escapeTextForBrowser = __webpack_require__(/*! ./escapeTextForBrowser */ 9);\\n\\n/**\\n * Text nodes violate a couple assumptions that React makes about components:\\n *\\n *  - When mounting text into the DOM, adjacent text nodes are merged.\\n *  - Text nodes cannot be assigned a React root ID.\\n *\\n * This component is used to wrap strings in elements so that they can undergo\\n * the same reconciliation that is applied to elements.\\n *\\n * TODO: Investigate representing React components in the DOM with text nodes.\\n *\\n * @class ReactTextComponent\\n * @extends ReactComponent\\n * @internal\\n */\\nvar ReactTextComponent = function(props) {\\n  // This constructor and it's argument is currently used by mocks.\\n};\\n\\nassign(ReactTextComponent.prototype, ReactComponent.Mixin, {\\n\\n  /**\\n   * Creates the markup for this text node. This node is not intended to have\\n   * any features besides containing text content.\\n   *\\n   * @param {string} rootID DOM ID of the root node.\\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\\n   * @param {number} mountDepth number of components in the owner hierarchy\\n   * @return {string} Markup for this text node.\\n   * @internal\\n   */\\n  mountComponent: function(rootID, transaction, mountDepth) {\\n    ReactComponent.Mixin.mountComponent.call(\\n      this,\\n      rootID,\\n      transaction,\\n      mountDepth\\n    );\\n\\n    var escapedText = escapeTextForBrowser(this.props);\\n\\n    if (transaction.renderToStaticMarkup) {\\n      // Normally we'd wrap this in a `span` for the reasons stated above, but\\n      // since this is a situation where React won't take over (static pages),\\n      // we can simply return the text as it is.\\n      return escapedText;\\n    }\\n\\n    return (\\n      '<span ' + DOMPropertyOperations.createMarkupForID(rootID) + '>' +\\n        escapedText +\\n      '</span>'\\n    );\\n  },\\n\\n  /**\\n   * Updates this component by updating the text content.\\n   *\\n   * @param {object} nextComponent Contains the next text content.\\n   * @param {ReactReconcileTransaction} transaction\\n   * @internal\\n   */\\n  receiveComponent: function(nextComponent, transaction) {\\n    var nextProps = nextComponent.props;\\n    if (nextProps !== this.props) {\\n      this.props = nextProps;\\n      ReactComponent.BackendIDOperations.updateTextContentByID(\\n        this._rootNodeID,\\n        nextProps\\n      );\\n    }\\n  }\\n\\n});\\n\\nvar ReactTextComponentFactory = function(text) {\\n  // Bypass validation and configuration\\n  return new ReactElement(ReactTextComponent, null, null, null, null, text);\\n};\\n\\nReactTextComponentFactory.type = ReactTextComponent;\\n\\nmodule.exports = ReactTextComponentFactory;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactTextComponent.js\\n ** module id = 74\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactTextComponent.js?\");\n\n/***/ },\n/* 75 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/ReactDefaultInjection.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDefaultInjection\\n */\\n\\n\\\"use strict\\\";\\n\\nvar BeforeInputEventPlugin = __webpack_require__(/*! ./BeforeInputEventPlugin */ 78);\\nvar ChangeEventPlugin = __webpack_require__(/*! ./ChangeEventPlugin */ 83);\\nvar ClientReactRootIndex = __webpack_require__(/*! ./ClientReactRootIndex */ 85);\\nvar CompositionEventPlugin = __webpack_require__(/*! ./CompositionEventPlugin */ 86);\\nvar DefaultEventPluginOrder = __webpack_require__(/*! ./DefaultEventPluginOrder */ 94);\\nvar EnterLeaveEventPlugin = __webpack_require__(/*! ./EnterLeaveEventPlugin */ 95);\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\nvar HTMLDOMPropertyConfig = __webpack_require__(/*! ./HTMLDOMPropertyConfig */ 99);\\nvar MobileSafariClickEventPlugin = __webpack_require__(/*! ./MobileSafariClickEventPlugin */ 100);\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactComponentBrowserEnvironment =\\n  __webpack_require__(/*! ./ReactComponentBrowserEnvironment */ 101);\\nvar ReactDefaultBatchingStrategy = __webpack_require__(/*! ./ReactDefaultBatchingStrategy */ 114);\\nvar ReactDOMComponent = __webpack_require__(/*! ./ReactDOMComponent */ 46);\\nvar ReactDOMButton = __webpack_require__(/*! ./ReactDOMButton */ 115);\\nvar ReactDOMForm = __webpack_require__(/*! ./ReactDOMForm */ 117);\\nvar ReactDOMImg = __webpack_require__(/*! ./ReactDOMImg */ 76);\\nvar ReactDOMInput = __webpack_require__(/*! ./ReactDOMInput */ 118);\\nvar ReactDOMOption = __webpack_require__(/*! ./ReactDOMOption */ 121);\\nvar ReactDOMSelect = __webpack_require__(/*! ./ReactDOMSelect */ 122);\\nvar ReactDOMTextarea = __webpack_require__(/*! ./ReactDOMTextarea */ 123);\\nvar ReactEventListener = __webpack_require__(/*! ./ReactEventListener */ 124);\\nvar ReactInjection = __webpack_require__(/*! ./ReactInjection */ 126);\\nvar ReactInstanceHandles = __webpack_require__(/*! ./ReactInstanceHandles */ 4);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar SelectEventPlugin = __webpack_require__(/*! ./SelectEventPlugin */ 127);\\nvar ServerReactRootIndex = __webpack_require__(/*! ./ServerReactRootIndex */ 129);\\nvar SimpleEventPlugin = __webpack_require__(/*! ./SimpleEventPlugin */ 130);\\nvar SVGDOMPropertyConfig = __webpack_require__(/*! ./SVGDOMPropertyConfig */ 139);\\n\\nvar createFullPageComponent = __webpack_require__(/*! ./createFullPageComponent */ 140);\\n\\nfunction inject() {\\n  ReactInjection.EventEmitter.injectReactEventListener(\\n    ReactEventListener\\n  );\\n\\n  /**\\n   * Inject modules for resolving DOM hierarchy and plugin ordering.\\n   */\\n  ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);\\n  ReactInjection.EventPluginHub.injectInstanceHandle(ReactInstanceHandles);\\n  ReactInjection.EventPluginHub.injectMount(ReactMount);\\n\\n  /**\\n   * Some important event plugins included by default (without having to require\\n   * them).\\n   */\\n  ReactInjection.EventPluginHub.injectEventPluginsByName({\\n    SimpleEventPlugin: SimpleEventPlugin,\\n    EnterLeaveEventPlugin: EnterLeaveEventPlugin,\\n    ChangeEventPlugin: ChangeEventPlugin,\\n    CompositionEventPlugin: CompositionEventPlugin,\\n    MobileSafariClickEventPlugin: MobileSafariClickEventPlugin,\\n    SelectEventPlugin: SelectEventPlugin,\\n    BeforeInputEventPlugin: BeforeInputEventPlugin\\n  });\\n\\n  ReactInjection.NativeComponent.injectGenericComponentClass(\\n    ReactDOMComponent\\n  );\\n\\n  ReactInjection.NativeComponent.injectComponentClasses({\\n    'button': ReactDOMButton,\\n    'form': ReactDOMForm,\\n    'img': ReactDOMImg,\\n    'input': ReactDOMInput,\\n    'option': ReactDOMOption,\\n    'select': ReactDOMSelect,\\n    'textarea': ReactDOMTextarea,\\n\\n    'html': createFullPageComponent('html'),\\n    'head': createFullPageComponent('head'),\\n    'body': createFullPageComponent('body')\\n  });\\n\\n  // This needs to happen after createFullPageComponent() otherwise the mixin\\n  // gets double injected.\\n  ReactInjection.CompositeComponent.injectMixin(ReactBrowserComponentMixin);\\n\\n  ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);\\n  ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);\\n\\n  ReactInjection.EmptyComponent.injectEmptyComponent('noscript');\\n\\n  ReactInjection.Updates.injectReconcileTransaction(\\n    ReactComponentBrowserEnvironment.ReactReconcileTransaction\\n  );\\n  ReactInjection.Updates.injectBatchingStrategy(\\n    ReactDefaultBatchingStrategy\\n  );\\n\\n  ReactInjection.RootIndex.injectCreateReactRootIndex(\\n    ExecutionEnvironment.canUseDOM ?\\n      ClientReactRootIndex.createReactRootIndex :\\n      ServerReactRootIndex.createReactRootIndex\\n  );\\n\\n  ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);\\n\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    var url = (ExecutionEnvironment.canUseDOM && window.location.href) || '';\\n    if ((/[?&]react_perf\\\\b/).test(url)) {\\n      var ReactDefaultPerf = __webpack_require__(/*! ./ReactDefaultPerf */ 141);\\n      ReactDefaultPerf.start();\\n    }\\n  }\\n}\\n\\nmodule.exports = {\\n  inject: inject\\n};\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDefaultInjection.js\\n ** module id = 75\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDefaultInjection.js?\");\n\n/***/ },\n/* 76 */\n/*!************************************!*\\\n  !*** ./~/react/lib/ReactDOMImg.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMImg\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar LocalEventTrapMixin = __webpack_require__(/*! ./LocalEventTrapMixin */ 77);\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactDOM = __webpack_require__(/*! ./ReactDOM */ 45);\\n\\n// Store a reference to the <img> `ReactDOMComponent`. TODO: use string\\nvar img = ReactElement.createFactory(ReactDOM.img.type);\\n\\n/**\\n * Since onLoad doesn't bubble OR capture on the top level in IE8, we need to\\n * capture it on the <img> element itself. There are lots of hacks we could do\\n * to accomplish this, but the most reliable is to make <img> a composite\\n * component and use `componentDidMount` to attach the event handlers.\\n */\\nvar ReactDOMImg = ReactCompositeComponent.createClass({\\n  displayName: 'ReactDOMImg',\\n  tagName: 'IMG',\\n\\n  mixins: [ReactBrowserComponentMixin, LocalEventTrapMixin],\\n\\n  render: function() {\\n    return img(this.props);\\n  },\\n\\n  componentDidMount: function() {\\n    this.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load');\\n    this.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error');\\n  }\\n});\\n\\nmodule.exports = ReactDOMImg;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMImg.js\\n ** module id = 76\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMImg.js?\");\n\n/***/ },\n/* 77 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/LocalEventTrapMixin.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule LocalEventTrapMixin\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactBrowserEventEmitter = __webpack_require__(/*! ./ReactBrowserEventEmitter */ 60);\\n\\nvar accumulateInto = __webpack_require__(/*! ./accumulateInto */ 63);\\nvar forEachAccumulated = __webpack_require__(/*! ./forEachAccumulated */ 64);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nfunction remove(event) {\\n  event.remove();\\n}\\n\\nvar LocalEventTrapMixin = {\\n  trapBubbledEvent:function(topLevelType, handlerBaseName) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(this.isMounted(), 'Must be mounted to trap events') : invariant(this.isMounted()));\\n    var listener = ReactBrowserEventEmitter.trapBubbledEvent(\\n      topLevelType,\\n      handlerBaseName,\\n      this.getDOMNode()\\n    );\\n    this._localEventListeners =\\n      accumulateInto(this._localEventListeners, listener);\\n  },\\n\\n  // trapCapturedEvent would look nearly identical. We don't implement that\\n  // method because it isn't currently needed.\\n\\n  componentWillUnmount:function() {\\n    if (this._localEventListeners) {\\n      forEachAccumulated(this._localEventListeners, remove);\\n    }\\n  }\\n};\\n\\nmodule.exports = LocalEventTrapMixin;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/LocalEventTrapMixin.js\\n ** module id = 77\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/LocalEventTrapMixin.js?\");\n\n/***/ },\n/* 78 */\n/*!***********************************************!*\\\n  !*** ./~/react/lib/BeforeInputEventPlugin.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013 Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule BeforeInputEventPlugin\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar EventPropagators = __webpack_require__(/*! ./EventPropagators */ 79);\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\nvar SyntheticInputEvent = __webpack_require__(/*! ./SyntheticInputEvent */ 80);\\n\\nvar keyOf = __webpack_require__(/*! ./keyOf */ 42);\\n\\nvar canUseTextInputEvent = (\\n  ExecutionEnvironment.canUseDOM &&\\n  'TextEvent' in window &&\\n  !('documentMode' in document || isPresto())\\n);\\n\\n/**\\n * Opera <= 12 includes TextEvent in window, but does not fire\\n * text input events. Rely on keypress instead.\\n */\\nfunction isPresto() {\\n  var opera = window.opera;\\n  return (\\n    typeof opera === 'object' &&\\n    typeof opera.version === 'function' &&\\n    parseInt(opera.version(), 10) <= 12\\n  );\\n}\\n\\nvar SPACEBAR_CODE = 32;\\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);\\n\\nvar topLevelTypes = EventConstants.topLevelTypes;\\n\\n// Events and their corresponding property names.\\nvar eventTypes = {\\n  beforeInput: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onBeforeInput: null}),\\n      captured: keyOf({onBeforeInputCapture: null})\\n    },\\n    dependencies: [\\n      topLevelTypes.topCompositionEnd,\\n      topLevelTypes.topKeyPress,\\n      topLevelTypes.topTextInput,\\n      topLevelTypes.topPaste\\n    ]\\n  }\\n};\\n\\n// Track characters inserted via keypress and composition events.\\nvar fallbackChars = null;\\n\\n// Track whether we've ever handled a keypress on the space key.\\nvar hasSpaceKeypress = false;\\n\\n/**\\n * Return whether a native keypress event is assumed to be a command.\\n * This is required because Firefox fires `keypress` events for key commands\\n * (cut, copy, select-all, etc.) even though no character is inserted.\\n */\\nfunction isKeypressCommand(nativeEvent) {\\n  return (\\n    (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&\\n    // ctrlKey && altKey is equivalent to AltGr, and is not a command.\\n    !(nativeEvent.ctrlKey && nativeEvent.altKey)\\n  );\\n}\\n\\n/**\\n * Create an `onBeforeInput` event to match\\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\\n *\\n * This event plugin is based on the native `textInput` event\\n * available in Chrome, Safari, Opera, and IE. This event fires after\\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\\n *\\n * `beforeInput` is spec'd but not implemented in any browsers, and\\n * the `input` event does not provide any useful information about what has\\n * actually been added, contrary to the spec. Thus, `textInput` is the best\\n * available event to identify the characters that have actually been inserted\\n * into the target node.\\n */\\nvar BeforeInputEventPlugin = {\\n\\n  eventTypes: eventTypes,\\n\\n  /**\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native browser event.\\n   * @return {*} An accumulation of synthetic events.\\n   * @see {EventPluginHub.extractEvents}\\n   */\\n  extractEvents: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n\\n    var chars;\\n\\n    if (canUseTextInputEvent) {\\n      switch (topLevelType) {\\n        case topLevelTypes.topKeyPress:\\n          /**\\n           * If native `textInput` events are available, our goal is to make\\n           * use of them. However, there is a special case: the spacebar key.\\n           * In Webkit, preventing default on a spacebar `textInput` event\\n           * cancels character insertion, but it *also* causes the browser\\n           * to fall back to its default spacebar behavior of scrolling the\\n           * page.\\n           *\\n           * Tracking at:\\n           * https://code.google.com/p/chromium/issues/detail?id=355103\\n           *\\n           * To avoid this issue, use the keypress event as if no `textInput`\\n           * event is available.\\n           */\\n          var which = nativeEvent.which;\\n          if (which !== SPACEBAR_CODE) {\\n            return;\\n          }\\n\\n          hasSpaceKeypress = true;\\n          chars = SPACEBAR_CHAR;\\n          break;\\n\\n        case topLevelTypes.topTextInput:\\n          // Record the characters to be added to the DOM.\\n          chars = nativeEvent.data;\\n\\n          // If it's a spacebar character, assume that we have already handled\\n          // it at the keypress level and bail immediately. Android Chrome\\n          // doesn't give us keycodes, so we need to blacklist it.\\n          if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\\n            return;\\n          }\\n\\n          // Otherwise, carry on.\\n          break;\\n\\n        default:\\n          // For other native event types, do nothing.\\n          return;\\n      }\\n    } else {\\n      switch (topLevelType) {\\n        case topLevelTypes.topPaste:\\n          // If a paste event occurs after a keypress, throw out the input\\n          // chars. Paste events should not lead to BeforeInput events.\\n          fallbackChars = null;\\n          break;\\n        case topLevelTypes.topKeyPress:\\n          /**\\n           * As of v27, Firefox may fire keypress events even when no character\\n           * will be inserted. A few possibilities:\\n           *\\n           * - `which` is `0`. Arrow keys, Esc key, etc.\\n           *\\n           * - `which` is the pressed key code, but no char is available.\\n           *   Ex: 'AltGr + d` in Polish. There is no modified character for\\n           *   this key combination and no character is inserted into the\\n           *   document, but FF fires the keypress for char code `100` anyway.\\n           *   No `input` event will occur.\\n           *\\n           * - `which` is the pressed key code, but a command combination is\\n           *   being used. Ex: `Cmd+C`. No character is inserted, and no\\n           *   `input` event will occur.\\n           */\\n          if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {\\n            fallbackChars = String.fromCharCode(nativeEvent.which);\\n          }\\n          break;\\n        case topLevelTypes.topCompositionEnd:\\n          fallbackChars = nativeEvent.data;\\n          break;\\n      }\\n\\n      // If no changes have occurred to the fallback string, no relevant\\n      // event has fired and we're done.\\n      if (fallbackChars === null) {\\n        return;\\n      }\\n\\n      chars = fallbackChars;\\n    }\\n\\n    // If no characters are being inserted, no BeforeInput event should\\n    // be fired.\\n    if (!chars) {\\n      return;\\n    }\\n\\n    var event = SyntheticInputEvent.getPooled(\\n      eventTypes.beforeInput,\\n      topLevelTargetID,\\n      nativeEvent\\n    );\\n\\n    event.data = chars;\\n    fallbackChars = null;\\n    EventPropagators.accumulateTwoPhaseDispatches(event);\\n    return event;\\n  }\\n};\\n\\nmodule.exports = BeforeInputEventPlugin;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/BeforeInputEventPlugin.js\\n ** module id = 78\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/BeforeInputEventPlugin.js?\");\n\n/***/ },\n/* 79 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/EventPropagators.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule EventPropagators\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar EventPluginHub = __webpack_require__(/*! ./EventPluginHub */ 61);\\n\\nvar accumulateInto = __webpack_require__(/*! ./accumulateInto */ 63);\\nvar forEachAccumulated = __webpack_require__(/*! ./forEachAccumulated */ 64);\\n\\nvar PropagationPhases = EventConstants.PropagationPhases;\\nvar getListener = EventPluginHub.getListener;\\n\\n/**\\n * Some event types have a notion of different registration names for different\\n * \\\"phases\\\" of propagation. This finds listeners by a given phase.\\n */\\nfunction listenerAtPhase(id, event, propagationPhase) {\\n  var registrationName =\\n    event.dispatchConfig.phasedRegistrationNames[propagationPhase];\\n  return getListener(id, registrationName);\\n}\\n\\n/**\\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\\n * here, allows us to not have to bind or create functions for each event.\\n * Mutating the event's members allows us to not have to create a wrapping\\n * \\\"dispatch\\\" object that pairs the event with the listener.\\n */\\nfunction accumulateDirectionalDispatches(domID, upwards, event) {\\n  if (\\\"production\\\" !== process.env.NODE_ENV) {\\n    if (!domID) {\\n      throw new Error('Dispatching id must not be null');\\n    }\\n  }\\n  var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;\\n  var listener = listenerAtPhase(domID, event, phase);\\n  if (listener) {\\n    event._dispatchListeners =\\n      accumulateInto(event._dispatchListeners, listener);\\n    event._dispatchIDs = accumulateInto(event._dispatchIDs, domID);\\n  }\\n}\\n\\n/**\\n * Collect dispatches (must be entirely collected before dispatching - see unit\\n * tests). Lazily allocate the array to conserve memory.  We must loop through\\n * each event and perform the traversal for each one. We can not perform a\\n * single traversal for the entire collection of events because each event may\\n * have a different target.\\n */\\nfunction accumulateTwoPhaseDispatchesSingle(event) {\\n  if (event && event.dispatchConfig.phasedRegistrationNames) {\\n    EventPluginHub.injection.getInstanceHandle().traverseTwoPhase(\\n      event.dispatchMarker,\\n      accumulateDirectionalDispatches,\\n      event\\n    );\\n  }\\n}\\n\\n\\n/**\\n * Accumulates without regard to direction, does not look for phased\\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\\n */\\nfunction accumulateDispatches(id, ignoredDirection, event) {\\n  if (event && event.dispatchConfig.registrationName) {\\n    var registrationName = event.dispatchConfig.registrationName;\\n    var listener = getListener(id, registrationName);\\n    if (listener) {\\n      event._dispatchListeners =\\n        accumulateInto(event._dispatchListeners, listener);\\n      event._dispatchIDs = accumulateInto(event._dispatchIDs, id);\\n    }\\n  }\\n}\\n\\n/**\\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\\n * `dispatchMarker`.\\n * @param {SyntheticEvent} event\\n */\\nfunction accumulateDirectDispatchesSingle(event) {\\n  if (event && event.dispatchConfig.registrationName) {\\n    accumulateDispatches(event.dispatchMarker, null, event);\\n  }\\n}\\n\\nfunction accumulateTwoPhaseDispatches(events) {\\n  forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\\n}\\n\\nfunction accumulateEnterLeaveDispatches(leave, enter, fromID, toID) {\\n  EventPluginHub.injection.getInstanceHandle().traverseEnterLeave(\\n    fromID,\\n    toID,\\n    accumulateDispatches,\\n    leave,\\n    enter\\n  );\\n}\\n\\n\\nfunction accumulateDirectDispatches(events) {\\n  forEachAccumulated(events, accumulateDirectDispatchesSingle);\\n}\\n\\n\\n\\n/**\\n * A small set of propagation patterns, each of which will accept a small amount\\n * of information, and generate a set of \\\"dispatch ready event objects\\\" - which\\n * are sets of events that have already been annotated with a set of dispatched\\n * listener functions/ids. The API is designed this way to discourage these\\n * propagation strategies from actually executing the dispatches, since we\\n * always want to collect the entire set of dispatches before executing event a\\n * single one.\\n *\\n * @constructor EventPropagators\\n */\\nvar EventPropagators = {\\n  accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,\\n  accumulateDirectDispatches: accumulateDirectDispatches,\\n  accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches\\n};\\n\\nmodule.exports = EventPropagators;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/EventPropagators.js\\n ** module id = 79\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/EventPropagators.js?\");\n\n/***/ },\n/* 80 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/SyntheticInputEvent.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013 Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticInputEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 81);\\n\\n/**\\n * @interface Event\\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\\n *      /#events-inputevents\\n */\\nvar InputEventInterface = {\\n  data: null\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticInputEvent(\\n  dispatchConfig,\\n  dispatchMarker,\\n  nativeEvent) {\\n  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticEvent.augmentClass(\\n  SyntheticInputEvent,\\n  InputEventInterface\\n);\\n\\nmodule.exports = SyntheticInputEvent;\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticInputEvent.js\\n ** module id = 80\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticInputEvent.js?\");\n\n/***/ },\n/* 81 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/SyntheticEvent.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 17);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\nvar getEventTarget = __webpack_require__(/*! ./getEventTarget */ 82);\\n\\n/**\\n * @interface Event\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar EventInterface = {\\n  type: null,\\n  target: getEventTarget,\\n  // currentTarget is set when dispatching; no use in copying it here\\n  currentTarget: emptyFunction.thatReturnsNull,\\n  eventPhase: null,\\n  bubbles: null,\\n  cancelable: null,\\n  timeStamp: function(event) {\\n    return event.timeStamp || Date.now();\\n  },\\n  defaultPrevented: null,\\n  isTrusted: null\\n};\\n\\n/**\\n * Synthetic events are dispatched by event plugins, typically in response to a\\n * top-level event delegation handler.\\n *\\n * These systems should generally use pooling to reduce the frequency of garbage\\n * collection. The system should check `isPersistent` to determine whether the\\n * event should be released into the pool after being dispatched. Users that\\n * need a persisted event should invoke `persist`.\\n *\\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\\n * DOM interface; custom application-specific events can also subclass this.\\n *\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n */\\nfunction SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  this.dispatchConfig = dispatchConfig;\\n  this.dispatchMarker = dispatchMarker;\\n  this.nativeEvent = nativeEvent;\\n\\n  var Interface = this.constructor.Interface;\\n  for (var propName in Interface) {\\n    if (!Interface.hasOwnProperty(propName)) {\\n      continue;\\n    }\\n    var normalize = Interface[propName];\\n    if (normalize) {\\n      this[propName] = normalize(nativeEvent);\\n    } else {\\n      this[propName] = nativeEvent[propName];\\n    }\\n  }\\n\\n  var defaultPrevented = nativeEvent.defaultPrevented != null ?\\n    nativeEvent.defaultPrevented :\\n    nativeEvent.returnValue === false;\\n  if (defaultPrevented) {\\n    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\\n  } else {\\n    this.isDefaultPrevented = emptyFunction.thatReturnsFalse;\\n  }\\n  this.isPropagationStopped = emptyFunction.thatReturnsFalse;\\n}\\n\\nassign(SyntheticEvent.prototype, {\\n\\n  preventDefault: function() {\\n    this.defaultPrevented = true;\\n    var event = this.nativeEvent;\\n    event.preventDefault ? event.preventDefault() : event.returnValue = false;\\n    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\\n  },\\n\\n  stopPropagation: function() {\\n    var event = this.nativeEvent;\\n    event.stopPropagation ? event.stopPropagation() : event.cancelBubble = true;\\n    this.isPropagationStopped = emptyFunction.thatReturnsTrue;\\n  },\\n\\n  /**\\n   * We release all dispatched `SyntheticEvent`s after each event loop, adding\\n   * them back into the pool. This allows a way to hold onto a reference that\\n   * won't be added back into the pool.\\n   */\\n  persist: function() {\\n    this.isPersistent = emptyFunction.thatReturnsTrue;\\n  },\\n\\n  /**\\n   * Checks if this event should be released back into the pool.\\n   *\\n   * @return {boolean} True if this should not be released, false otherwise.\\n   */\\n  isPersistent: emptyFunction.thatReturnsFalse,\\n\\n  /**\\n   * `PooledClass` looks for `destructor` on each instance it releases.\\n   */\\n  destructor: function() {\\n    var Interface = this.constructor.Interface;\\n    for (var propName in Interface) {\\n      this[propName] = null;\\n    }\\n    this.dispatchConfig = null;\\n    this.dispatchMarker = null;\\n    this.nativeEvent = null;\\n  }\\n\\n});\\n\\nSyntheticEvent.Interface = EventInterface;\\n\\n/**\\n * Helper to reduce boilerplate when creating subclasses.\\n *\\n * @param {function} Class\\n * @param {?object} Interface\\n */\\nSyntheticEvent.augmentClass = function(Class, Interface) {\\n  var Super = this;\\n\\n  var prototype = Object.create(Super.prototype);\\n  assign(prototype, Class.prototype);\\n  Class.prototype = prototype;\\n  Class.prototype.constructor = Class;\\n\\n  Class.Interface = assign({}, Super.Interface, Interface);\\n  Class.augmentClass = Super.augmentClass;\\n\\n  PooledClass.addPoolingTo(Class, PooledClass.threeArgumentPooler);\\n};\\n\\nPooledClass.addPoolingTo(SyntheticEvent, PooledClass.threeArgumentPooler);\\n\\nmodule.exports = SyntheticEvent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticEvent.js\\n ** module id = 81\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticEvent.js?\");\n\n/***/ },\n/* 82 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/getEventTarget.js ***!\n  \\***************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getEventTarget\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Gets the target node from a native browser event by accounting for\\n * inconsistencies in browser DOM APIs.\\n *\\n * @param {object} nativeEvent Native browser event.\\n * @return {DOMEventTarget} Target node.\\n */\\nfunction getEventTarget(nativeEvent) {\\n  var target = nativeEvent.target || nativeEvent.srcElement || window;\\n  // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\\n  // @see http://www.quirksmode.org/js/events_properties.html\\n  return target.nodeType === 3 ? target.parentNode : target;\\n}\\n\\nmodule.exports = getEventTarget;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getEventTarget.js\\n ** module id = 82\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getEventTarget.js?\");\n\n/***/ },\n/* 83 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/ChangeEventPlugin.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ChangeEventPlugin\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar EventPluginHub = __webpack_require__(/*! ./EventPluginHub */ 61);\\nvar EventPropagators = __webpack_require__(/*! ./EventPropagators */ 79);\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 81);\\n\\nvar isEventSupported = __webpack_require__(/*! ./isEventSupported */ 68);\\nvar isTextInputElement = __webpack_require__(/*! ./isTextInputElement */ 84);\\nvar keyOf = __webpack_require__(/*! ./keyOf */ 42);\\n\\nvar topLevelTypes = EventConstants.topLevelTypes;\\n\\nvar eventTypes = {\\n  change: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onChange: null}),\\n      captured: keyOf({onChangeCapture: null})\\n    },\\n    dependencies: [\\n      topLevelTypes.topBlur,\\n      topLevelTypes.topChange,\\n      topLevelTypes.topClick,\\n      topLevelTypes.topFocus,\\n      topLevelTypes.topInput,\\n      topLevelTypes.topKeyDown,\\n      topLevelTypes.topKeyUp,\\n      topLevelTypes.topSelectionChange\\n    ]\\n  }\\n};\\n\\n/**\\n * For IE shims\\n */\\nvar activeElement = null;\\nvar activeElementID = null;\\nvar activeElementValue = null;\\nvar activeElementValueProp = null;\\n\\n/**\\n * SECTION: handle `change` event\\n */\\nfunction shouldUseChangeEvent(elem) {\\n  return (\\n    elem.nodeName === 'SELECT' ||\\n    (elem.nodeName === 'INPUT' && elem.type === 'file')\\n  );\\n}\\n\\nvar doesChangeEventBubble = false;\\nif (ExecutionEnvironment.canUseDOM) {\\n  // See `handleChange` comment below\\n  doesChangeEventBubble = isEventSupported('change') && (\\n    !('documentMode' in document) || document.documentMode > 8\\n  );\\n}\\n\\nfunction manualDispatchChangeEvent(nativeEvent) {\\n  var event = SyntheticEvent.getPooled(\\n    eventTypes.change,\\n    activeElementID,\\n    nativeEvent\\n  );\\n  EventPropagators.accumulateTwoPhaseDispatches(event);\\n\\n  // If change and propertychange bubbled, we'd just bind to it like all the\\n  // other events and have it go through ReactBrowserEventEmitter. Since it\\n  // doesn't, we manually listen for the events and so we have to enqueue and\\n  // process the abstract event manually.\\n  //\\n  // Batching is necessary here in order to ensure that all event handlers run\\n  // before the next rerender (including event handlers attached to ancestor\\n  // elements instead of directly on the input). Without this, controlled\\n  // components don't work properly in conjunction with event bubbling because\\n  // the component is rerendered and the value reverted before all the event\\n  // handlers can run. See https://github.com/facebook/react/issues/708.\\n  ReactUpdates.batchedUpdates(runEventInBatch, event);\\n}\\n\\nfunction runEventInBatch(event) {\\n  EventPluginHub.enqueueEvents(event);\\n  EventPluginHub.processEventQueue();\\n}\\n\\nfunction startWatchingForChangeEventIE8(target, targetID) {\\n  activeElement = target;\\n  activeElementID = targetID;\\n  activeElement.attachEvent('onchange', manualDispatchChangeEvent);\\n}\\n\\nfunction stopWatchingForChangeEventIE8() {\\n  if (!activeElement) {\\n    return;\\n  }\\n  activeElement.detachEvent('onchange', manualDispatchChangeEvent);\\n  activeElement = null;\\n  activeElementID = null;\\n}\\n\\nfunction getTargetIDForChangeEvent(\\n    topLevelType,\\n    topLevelTarget,\\n    topLevelTargetID) {\\n  if (topLevelType === topLevelTypes.topChange) {\\n    return topLevelTargetID;\\n  }\\n}\\nfunction handleEventsForChangeEventIE8(\\n    topLevelType,\\n    topLevelTarget,\\n    topLevelTargetID) {\\n  if (topLevelType === topLevelTypes.topFocus) {\\n    // stopWatching() should be a noop here but we call it just in case we\\n    // missed a blur event somehow.\\n    stopWatchingForChangeEventIE8();\\n    startWatchingForChangeEventIE8(topLevelTarget, topLevelTargetID);\\n  } else if (topLevelType === topLevelTypes.topBlur) {\\n    stopWatchingForChangeEventIE8();\\n  }\\n}\\n\\n\\n/**\\n * SECTION: handle `input` event\\n */\\nvar isInputEventSupported = false;\\nif (ExecutionEnvironment.canUseDOM) {\\n  // IE9 claims to support the input event but fails to trigger it when\\n  // deleting text, so we ignore its input events\\n  isInputEventSupported = isEventSupported('input') && (\\n    !('documentMode' in document) || document.documentMode > 9\\n  );\\n}\\n\\n/**\\n * (For old IE.) Replacement getter/setter for the `value` property that gets\\n * set on the active element.\\n */\\nvar newValueProp =  {\\n  get: function() {\\n    return activeElementValueProp.get.call(this);\\n  },\\n  set: function(val) {\\n    // Cast to a string so we can do equality checks.\\n    activeElementValue = '' + val;\\n    activeElementValueProp.set.call(this, val);\\n  }\\n};\\n\\n/**\\n * (For old IE.) Starts tracking propertychange events on the passed-in element\\n * and override the value property so that we can distinguish user events from\\n * value changes in JS.\\n */\\nfunction startWatchingForValueChange(target, targetID) {\\n  activeElement = target;\\n  activeElementID = targetID;\\n  activeElementValue = target.value;\\n  activeElementValueProp = Object.getOwnPropertyDescriptor(\\n    target.constructor.prototype,\\n    'value'\\n  );\\n\\n  Object.defineProperty(activeElement, 'value', newValueProp);\\n  activeElement.attachEvent('onpropertychange', handlePropertyChange);\\n}\\n\\n/**\\n * (For old IE.) Removes the event listeners from the currently-tracked element,\\n * if any exists.\\n */\\nfunction stopWatchingForValueChange() {\\n  if (!activeElement) {\\n    return;\\n  }\\n\\n  // delete restores the original property definition\\n  delete activeElement.value;\\n  activeElement.detachEvent('onpropertychange', handlePropertyChange);\\n\\n  activeElement = null;\\n  activeElementID = null;\\n  activeElementValue = null;\\n  activeElementValueProp = null;\\n}\\n\\n/**\\n * (For old IE.) Handles a propertychange event, sending a `change` event if\\n * the value of the active element has changed.\\n */\\nfunction handlePropertyChange(nativeEvent) {\\n  if (nativeEvent.propertyName !== 'value') {\\n    return;\\n  }\\n  var value = nativeEvent.srcElement.value;\\n  if (value === activeElementValue) {\\n    return;\\n  }\\n  activeElementValue = value;\\n\\n  manualDispatchChangeEvent(nativeEvent);\\n}\\n\\n/**\\n * If a `change` event should be fired, returns the target's ID.\\n */\\nfunction getTargetIDForInputEvent(\\n    topLevelType,\\n    topLevelTarget,\\n    topLevelTargetID) {\\n  if (topLevelType === topLevelTypes.topInput) {\\n    // In modern browsers (i.e., not IE8 or IE9), the input event is exactly\\n    // what we want so fall through here and trigger an abstract event\\n    return topLevelTargetID;\\n  }\\n}\\n\\n// For IE8 and IE9.\\nfunction handleEventsForInputEventIE(\\n    topLevelType,\\n    topLevelTarget,\\n    topLevelTargetID) {\\n  if (topLevelType === topLevelTypes.topFocus) {\\n    // In IE8, we can capture almost all .value changes by adding a\\n    // propertychange handler and looking for events with propertyName\\n    // equal to 'value'\\n    // In IE9, propertychange fires for most input events but is buggy and\\n    // doesn't fire when text is deleted, but conveniently, selectionchange\\n    // appears to fire in all of the remaining cases so we catch those and\\n    // forward the event if the value has changed\\n    // In either case, we don't want to call the event handler if the value\\n    // is changed from JS so we redefine a setter for `.value` that updates\\n    // our activeElementValue variable, allowing us to ignore those changes\\n    //\\n    // stopWatching() should be a noop here but we call it just in case we\\n    // missed a blur event somehow.\\n    stopWatchingForValueChange();\\n    startWatchingForValueChange(topLevelTarget, topLevelTargetID);\\n  } else if (topLevelType === topLevelTypes.topBlur) {\\n    stopWatchingForValueChange();\\n  }\\n}\\n\\n// For IE8 and IE9.\\nfunction getTargetIDForInputEventIE(\\n    topLevelType,\\n    topLevelTarget,\\n    topLevelTargetID) {\\n  if (topLevelType === topLevelTypes.topSelectionChange ||\\n      topLevelType === topLevelTypes.topKeyUp ||\\n      topLevelType === topLevelTypes.topKeyDown) {\\n    // On the selectionchange event, the target is just document which isn't\\n    // helpful for us so just check activeElement instead.\\n    //\\n    // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\\n    // propertychange on the first input event after setting `value` from a\\n    // script and fires only keydown, keypress, keyup. Catching keyup usually\\n    // gets it and catching keydown lets us fire an event for the first\\n    // keystroke if user does a key repeat (it'll be a little delayed: right\\n    // before the second keystroke). Other input methods (e.g., paste) seem to\\n    // fire selectionchange normally.\\n    if (activeElement && activeElement.value !== activeElementValue) {\\n      activeElementValue = activeElement.value;\\n      return activeElementID;\\n    }\\n  }\\n}\\n\\n\\n/**\\n * SECTION: handle `click` event\\n */\\nfunction shouldUseClickEvent(elem) {\\n  // Use the `click` event to detect changes to checkbox and radio inputs.\\n  // This approach works across all browsers, whereas `change` does not fire\\n  // until `blur` in IE8.\\n  return (\\n    elem.nodeName === 'INPUT' &&\\n    (elem.type === 'checkbox' || elem.type === 'radio')\\n  );\\n}\\n\\nfunction getTargetIDForClickEvent(\\n    topLevelType,\\n    topLevelTarget,\\n    topLevelTargetID) {\\n  if (topLevelType === topLevelTypes.topClick) {\\n    return topLevelTargetID;\\n  }\\n}\\n\\n/**\\n * This plugin creates an `onChange` event that normalizes change events\\n * across form elements. This event fires at a time when it's possible to\\n * change the element's value without seeing a flicker.\\n *\\n * Supported elements are:\\n * - input (see `isTextInputElement`)\\n * - textarea\\n * - select\\n */\\nvar ChangeEventPlugin = {\\n\\n  eventTypes: eventTypes,\\n\\n  /**\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native browser event.\\n   * @return {*} An accumulation of synthetic events.\\n   * @see {EventPluginHub.extractEvents}\\n   */\\n  extractEvents: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n\\n    var getTargetIDFunc, handleEventFunc;\\n    if (shouldUseChangeEvent(topLevelTarget)) {\\n      if (doesChangeEventBubble) {\\n        getTargetIDFunc = getTargetIDForChangeEvent;\\n      } else {\\n        handleEventFunc = handleEventsForChangeEventIE8;\\n      }\\n    } else if (isTextInputElement(topLevelTarget)) {\\n      if (isInputEventSupported) {\\n        getTargetIDFunc = getTargetIDForInputEvent;\\n      } else {\\n        getTargetIDFunc = getTargetIDForInputEventIE;\\n        handleEventFunc = handleEventsForInputEventIE;\\n      }\\n    } else if (shouldUseClickEvent(topLevelTarget)) {\\n      getTargetIDFunc = getTargetIDForClickEvent;\\n    }\\n\\n    if (getTargetIDFunc) {\\n      var targetID = getTargetIDFunc(\\n        topLevelType,\\n        topLevelTarget,\\n        topLevelTargetID\\n      );\\n      if (targetID) {\\n        var event = SyntheticEvent.getPooled(\\n          eventTypes.change,\\n          targetID,\\n          nativeEvent\\n        );\\n        EventPropagators.accumulateTwoPhaseDispatches(event);\\n        return event;\\n      }\\n    }\\n\\n    if (handleEventFunc) {\\n      handleEventFunc(\\n        topLevelType,\\n        topLevelTarget,\\n        topLevelTargetID\\n      );\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = ChangeEventPlugin;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ChangeEventPlugin.js\\n ** module id = 83\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ChangeEventPlugin.js?\");\n\n/***/ },\n/* 84 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/isTextInputElement.js ***!\n  \\*******************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule isTextInputElement\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\\n */\\nvar supportedInputTypes = {\\n  'color': true,\\n  'date': true,\\n  'datetime': true,\\n  'datetime-local': true,\\n  'email': true,\\n  'month': true,\\n  'number': true,\\n  'password': true,\\n  'range': true,\\n  'search': true,\\n  'tel': true,\\n  'text': true,\\n  'time': true,\\n  'url': true,\\n  'week': true\\n};\\n\\nfunction isTextInputElement(elem) {\\n  return elem && (\\n    (elem.nodeName === 'INPUT' && supportedInputTypes[elem.type]) ||\\n    elem.nodeName === 'TEXTAREA'\\n  );\\n}\\n\\nmodule.exports = isTextInputElement;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/isTextInputElement.js\\n ** module id = 84\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/isTextInputElement.js?\");\n\n/***/ },\n/* 85 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ClientReactRootIndex.js ***!\n  \\*********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ClientReactRootIndex\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\nvar nextReactRootIndex = 0;\\n\\nvar ClientReactRootIndex = {\\n  createReactRootIndex: function() {\\n    return nextReactRootIndex++;\\n  }\\n};\\n\\nmodule.exports = ClientReactRootIndex;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ClientReactRootIndex.js\\n ** module id = 85\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ClientReactRootIndex.js?\");\n\n/***/ },\n/* 86 */\n/*!***********************************************!*\\\n  !*** ./~/react/lib/CompositionEventPlugin.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule CompositionEventPlugin\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar EventPropagators = __webpack_require__(/*! ./EventPropagators */ 79);\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\nvar ReactInputSelection = __webpack_require__(/*! ./ReactInputSelection */ 87);\\nvar SyntheticCompositionEvent = __webpack_require__(/*! ./SyntheticCompositionEvent */ 93);\\n\\nvar getTextContentAccessor = __webpack_require__(/*! ./getTextContentAccessor */ 90);\\nvar keyOf = __webpack_require__(/*! ./keyOf */ 42);\\n\\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\\nvar START_KEYCODE = 229;\\n\\nvar useCompositionEvent = (\\n  ExecutionEnvironment.canUseDOM &&\\n  'CompositionEvent' in window\\n);\\n\\n// In IE9+, we have access to composition events, but the data supplied\\n// by the native compositionend event may be incorrect. In Korean, for example,\\n// the compositionend event contains only one character regardless of\\n// how many characters have been composed since compositionstart.\\n// We therefore use the fallback data while still using the native\\n// events as triggers.\\nvar useFallbackData = (\\n  !useCompositionEvent ||\\n  (\\n    'documentMode' in document &&\\n    document.documentMode > 8 &&\\n    document.documentMode <= 11\\n  )\\n);\\n\\nvar topLevelTypes = EventConstants.topLevelTypes;\\nvar currentComposition = null;\\n\\n// Events and their corresponding property names.\\nvar eventTypes = {\\n  compositionEnd: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onCompositionEnd: null}),\\n      captured: keyOf({onCompositionEndCapture: null})\\n    },\\n    dependencies: [\\n      topLevelTypes.topBlur,\\n      topLevelTypes.topCompositionEnd,\\n      topLevelTypes.topKeyDown,\\n      topLevelTypes.topKeyPress,\\n      topLevelTypes.topKeyUp,\\n      topLevelTypes.topMouseDown\\n    ]\\n  },\\n  compositionStart: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onCompositionStart: null}),\\n      captured: keyOf({onCompositionStartCapture: null})\\n    },\\n    dependencies: [\\n      topLevelTypes.topBlur,\\n      topLevelTypes.topCompositionStart,\\n      topLevelTypes.topKeyDown,\\n      topLevelTypes.topKeyPress,\\n      topLevelTypes.topKeyUp,\\n      topLevelTypes.topMouseDown\\n    ]\\n  },\\n  compositionUpdate: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onCompositionUpdate: null}),\\n      captured: keyOf({onCompositionUpdateCapture: null})\\n    },\\n    dependencies: [\\n      topLevelTypes.topBlur,\\n      topLevelTypes.topCompositionUpdate,\\n      topLevelTypes.topKeyDown,\\n      topLevelTypes.topKeyPress,\\n      topLevelTypes.topKeyUp,\\n      topLevelTypes.topMouseDown\\n    ]\\n  }\\n};\\n\\n/**\\n * Translate native top level events into event types.\\n *\\n * @param {string} topLevelType\\n * @return {object}\\n */\\nfunction getCompositionEventType(topLevelType) {\\n  switch (topLevelType) {\\n    case topLevelTypes.topCompositionStart:\\n      return eventTypes.compositionStart;\\n    case topLevelTypes.topCompositionEnd:\\n      return eventTypes.compositionEnd;\\n    case topLevelTypes.topCompositionUpdate:\\n      return eventTypes.compositionUpdate;\\n  }\\n}\\n\\n/**\\n * Does our fallback best-guess model think this event signifies that\\n * composition has begun?\\n *\\n * @param {string} topLevelType\\n * @param {object} nativeEvent\\n * @return {boolean}\\n */\\nfunction isFallbackStart(topLevelType, nativeEvent) {\\n  return (\\n    topLevelType === topLevelTypes.topKeyDown &&\\n    nativeEvent.keyCode === START_KEYCODE\\n  );\\n}\\n\\n/**\\n * Does our fallback mode think that this event is the end of composition?\\n *\\n * @param {string} topLevelType\\n * @param {object} nativeEvent\\n * @return {boolean}\\n */\\nfunction isFallbackEnd(topLevelType, nativeEvent) {\\n  switch (topLevelType) {\\n    case topLevelTypes.topKeyUp:\\n      // Command keys insert or clear IME input.\\n      return (END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1);\\n    case topLevelTypes.topKeyDown:\\n      // Expect IME keyCode on each keydown. If we get any other\\n      // code we must have exited earlier.\\n      return (nativeEvent.keyCode !== START_KEYCODE);\\n    case topLevelTypes.topKeyPress:\\n    case topLevelTypes.topMouseDown:\\n    case topLevelTypes.topBlur:\\n      // Events are not possible without cancelling IME.\\n      return true;\\n    default:\\n      return false;\\n  }\\n}\\n\\n/**\\n * Helper class stores information about selection and document state\\n * so we can figure out what changed at a later date.\\n *\\n * @param {DOMEventTarget} root\\n */\\nfunction FallbackCompositionState(root) {\\n  this.root = root;\\n  this.startSelection = ReactInputSelection.getSelection(root);\\n  this.startValue = this.getText();\\n}\\n\\n/**\\n * Get current text of input.\\n *\\n * @return {string}\\n */\\nFallbackCompositionState.prototype.getText = function() {\\n  return this.root.value || this.root[getTextContentAccessor()];\\n};\\n\\n/**\\n * Text that has changed since the start of composition.\\n *\\n * @return {string}\\n */\\nFallbackCompositionState.prototype.getData = function() {\\n  var endValue = this.getText();\\n  var prefixLength = this.startSelection.start;\\n  var suffixLength = this.startValue.length - this.startSelection.end;\\n\\n  return endValue.substr(\\n    prefixLength,\\n    endValue.length - suffixLength - prefixLength\\n  );\\n};\\n\\n/**\\n * This plugin creates `onCompositionStart`, `onCompositionUpdate` and\\n * `onCompositionEnd` events on inputs, textareas and contentEditable\\n * nodes.\\n */\\nvar CompositionEventPlugin = {\\n\\n  eventTypes: eventTypes,\\n\\n  /**\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native browser event.\\n   * @return {*} An accumulation of synthetic events.\\n   * @see {EventPluginHub.extractEvents}\\n   */\\n  extractEvents: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n\\n    var eventType;\\n    var data;\\n\\n    if (useCompositionEvent) {\\n      eventType = getCompositionEventType(topLevelType);\\n    } else if (!currentComposition) {\\n      if (isFallbackStart(topLevelType, nativeEvent)) {\\n        eventType = eventTypes.compositionStart;\\n      }\\n    } else if (isFallbackEnd(topLevelType, nativeEvent)) {\\n      eventType = eventTypes.compositionEnd;\\n    }\\n\\n    if (useFallbackData) {\\n      // The current composition is stored statically and must not be\\n      // overwritten while composition continues.\\n      if (!currentComposition && eventType === eventTypes.compositionStart) {\\n        currentComposition = new FallbackCompositionState(topLevelTarget);\\n      } else if (eventType === eventTypes.compositionEnd) {\\n        if (currentComposition) {\\n          data = currentComposition.getData();\\n          currentComposition = null;\\n        }\\n      }\\n    }\\n\\n    if (eventType) {\\n      var event = SyntheticCompositionEvent.getPooled(\\n        eventType,\\n        topLevelTargetID,\\n        nativeEvent\\n      );\\n      if (data) {\\n        // Inject data generated from fallback path into the synthetic event.\\n        // This matches the property of native CompositionEventInterface.\\n        event.data = data;\\n      }\\n      EventPropagators.accumulateTwoPhaseDispatches(event);\\n      return event;\\n    }\\n  }\\n};\\n\\nmodule.exports = CompositionEventPlugin;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/CompositionEventPlugin.js\\n ** module id = 86\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/CompositionEventPlugin.js?\");\n\n/***/ },\n/* 87 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/ReactInputSelection.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactInputSelection\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactDOMSelection = __webpack_require__(/*! ./ReactDOMSelection */ 88);\\n\\nvar containsNode = __webpack_require__(/*! ./containsNode */ 57);\\nvar focusNode = __webpack_require__(/*! ./focusNode */ 91);\\nvar getActiveElement = __webpack_require__(/*! ./getActiveElement */ 92);\\n\\nfunction isInDocument(node) {\\n  return containsNode(document.documentElement, node);\\n}\\n\\n/**\\n * @ReactInputSelection: React input selection module. Based on Selection.js,\\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\\n * assume buttons have range selections allowed).\\n * Input selection module for React.\\n */\\nvar ReactInputSelection = {\\n\\n  hasSelectionCapabilities: function(elem) {\\n    return elem && (\\n      (elem.nodeName === 'INPUT' && elem.type === 'text') ||\\n      elem.nodeName === 'TEXTAREA' ||\\n      elem.contentEditable === 'true'\\n    );\\n  },\\n\\n  getSelectionInformation: function() {\\n    var focusedElem = getActiveElement();\\n    return {\\n      focusedElem: focusedElem,\\n      selectionRange:\\n          ReactInputSelection.hasSelectionCapabilities(focusedElem) ?\\n          ReactInputSelection.getSelection(focusedElem) :\\n          null\\n    };\\n  },\\n\\n  /**\\n   * @restoreSelection: If any selection information was potentially lost,\\n   * restore it. This is useful when performing operations that could remove dom\\n   * nodes and place them back in, resulting in focus being lost.\\n   */\\n  restoreSelection: function(priorSelectionInformation) {\\n    var curFocusedElem = getActiveElement();\\n    var priorFocusedElem = priorSelectionInformation.focusedElem;\\n    var priorSelectionRange = priorSelectionInformation.selectionRange;\\n    if (curFocusedElem !== priorFocusedElem &&\\n        isInDocument(priorFocusedElem)) {\\n      if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {\\n        ReactInputSelection.setSelection(\\n          priorFocusedElem,\\n          priorSelectionRange\\n        );\\n      }\\n      focusNode(priorFocusedElem);\\n    }\\n  },\\n\\n  /**\\n   * @getSelection: Gets the selection bounds of a focused textarea, input or\\n   * contentEditable node.\\n   * -@input: Look up selection bounds of this input\\n   * -@return {start: selectionStart, end: selectionEnd}\\n   */\\n  getSelection: function(input) {\\n    var selection;\\n\\n    if ('selectionStart' in input) {\\n      // Modern browser with input or textarea.\\n      selection = {\\n        start: input.selectionStart,\\n        end: input.selectionEnd\\n      };\\n    } else if (document.selection && input.nodeName === 'INPUT') {\\n      // IE8 input.\\n      var range = document.selection.createRange();\\n      // There can only be one selection per document in IE, so it must\\n      // be in our element.\\n      if (range.parentElement() === input) {\\n        selection = {\\n          start: -range.moveStart('character', -input.value.length),\\n          end: -range.moveEnd('character', -input.value.length)\\n        };\\n      }\\n    } else {\\n      // Content editable or old IE textarea.\\n      selection = ReactDOMSelection.getOffsets(input);\\n    }\\n\\n    return selection || {start: 0, end: 0};\\n  },\\n\\n  /**\\n   * @setSelection: Sets the selection bounds of a textarea or input and focuses\\n   * the input.\\n   * -@input     Set selection bounds of this input or textarea\\n   * -@offsets   Object of same form that is returned from get*\\n   */\\n  setSelection: function(input, offsets) {\\n    var start = offsets.start;\\n    var end = offsets.end;\\n    if (typeof end === 'undefined') {\\n      end = start;\\n    }\\n\\n    if ('selectionStart' in input) {\\n      input.selectionStart = start;\\n      input.selectionEnd = Math.min(end, input.value.length);\\n    } else if (document.selection && input.nodeName === 'INPUT') {\\n      var range = input.createTextRange();\\n      range.collapse(true);\\n      range.moveStart('character', start);\\n      range.moveEnd('character', end - start);\\n      range.select();\\n    } else {\\n      ReactDOMSelection.setOffsets(input, offsets);\\n    }\\n  }\\n};\\n\\nmodule.exports = ReactInputSelection;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactInputSelection.js\\n ** module id = 87\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactInputSelection.js?\");\n\n/***/ },\n/* 88 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/ReactDOMSelection.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMSelection\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar getNodeForCharacterOffset = __webpack_require__(/*! ./getNodeForCharacterOffset */ 89);\\nvar getTextContentAccessor = __webpack_require__(/*! ./getTextContentAccessor */ 90);\\n\\n/**\\n * While `isCollapsed` is available on the Selection object and `collapsed`\\n * is available on the Range object, IE11 sometimes gets them wrong.\\n * If the anchor/focus nodes and offsets are the same, the range is collapsed.\\n */\\nfunction isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {\\n  return anchorNode === focusNode && anchorOffset === focusOffset;\\n}\\n\\n/**\\n * Get the appropriate anchor and focus node/offset pairs for IE.\\n *\\n * The catch here is that IE's selection API doesn't provide information\\n * about whether the selection is forward or backward, so we have to\\n * behave as though it's always forward.\\n *\\n * IE text differs from modern selection in that it behaves as though\\n * block elements end with a new line. This means character offsets will\\n * differ between the two APIs.\\n *\\n * @param {DOMElement} node\\n * @return {object}\\n */\\nfunction getIEOffsets(node) {\\n  var selection = document.selection;\\n  var selectedRange = selection.createRange();\\n  var selectedLength = selectedRange.text.length;\\n\\n  // Duplicate selection so we can move range without breaking user selection.\\n  var fromStart = selectedRange.duplicate();\\n  fromStart.moveToElementText(node);\\n  fromStart.setEndPoint('EndToStart', selectedRange);\\n\\n  var startOffset = fromStart.text.length;\\n  var endOffset = startOffset + selectedLength;\\n\\n  return {\\n    start: startOffset,\\n    end: endOffset\\n  };\\n}\\n\\n/**\\n * @param {DOMElement} node\\n * @return {?object}\\n */\\nfunction getModernOffsets(node) {\\n  var selection = window.getSelection && window.getSelection();\\n\\n  if (!selection || selection.rangeCount === 0) {\\n    return null;\\n  }\\n\\n  var anchorNode = selection.anchorNode;\\n  var anchorOffset = selection.anchorOffset;\\n  var focusNode = selection.focusNode;\\n  var focusOffset = selection.focusOffset;\\n\\n  var currentRange = selection.getRangeAt(0);\\n\\n  // If the node and offset values are the same, the selection is collapsed.\\n  // `Selection.isCollapsed` is available natively, but IE sometimes gets\\n  // this value wrong.\\n  var isSelectionCollapsed = isCollapsed(\\n    selection.anchorNode,\\n    selection.anchorOffset,\\n    selection.focusNode,\\n    selection.focusOffset\\n  );\\n\\n  var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length;\\n\\n  var tempRange = currentRange.cloneRange();\\n  tempRange.selectNodeContents(node);\\n  tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);\\n\\n  var isTempRangeCollapsed = isCollapsed(\\n    tempRange.startContainer,\\n    tempRange.startOffset,\\n    tempRange.endContainer,\\n    tempRange.endOffset\\n  );\\n\\n  var start = isTempRangeCollapsed ? 0 : tempRange.toString().length;\\n  var end = start + rangeLength;\\n\\n  // Detect whether the selection is backward.\\n  var detectionRange = document.createRange();\\n  detectionRange.setStart(anchorNode, anchorOffset);\\n  detectionRange.setEnd(focusNode, focusOffset);\\n  var isBackward = detectionRange.collapsed;\\n\\n  return {\\n    start: isBackward ? end : start,\\n    end: isBackward ? start : end\\n  };\\n}\\n\\n/**\\n * @param {DOMElement|DOMTextNode} node\\n * @param {object} offsets\\n */\\nfunction setIEOffsets(node, offsets) {\\n  var range = document.selection.createRange().duplicate();\\n  var start, end;\\n\\n  if (typeof offsets.end === 'undefined') {\\n    start = offsets.start;\\n    end = start;\\n  } else if (offsets.start > offsets.end) {\\n    start = offsets.end;\\n    end = offsets.start;\\n  } else {\\n    start = offsets.start;\\n    end = offsets.end;\\n  }\\n\\n  range.moveToElementText(node);\\n  range.moveStart('character', start);\\n  range.setEndPoint('EndToStart', range);\\n  range.moveEnd('character', end - start);\\n  range.select();\\n}\\n\\n/**\\n * In modern non-IE browsers, we can support both forward and backward\\n * selections.\\n *\\n * Note: IE10+ supports the Selection object, but it does not support\\n * the `extend` method, which means that even in modern IE, it's not possible\\n * to programatically create a backward selection. Thus, for all IE\\n * versions, we use the old IE API to create our selections.\\n *\\n * @param {DOMElement|DOMTextNode} node\\n * @param {object} offsets\\n */\\nfunction setModernOffsets(node, offsets) {\\n  if (!window.getSelection) {\\n    return;\\n  }\\n\\n  var selection = window.getSelection();\\n  var length = node[getTextContentAccessor()].length;\\n  var start = Math.min(offsets.start, length);\\n  var end = typeof offsets.end === 'undefined' ?\\n            start : Math.min(offsets.end, length);\\n\\n  // IE 11 uses modern selection, but doesn't support the extend method.\\n  // Flip backward selections, so we can set with a single range.\\n  if (!selection.extend && start > end) {\\n    var temp = end;\\n    end = start;\\n    start = temp;\\n  }\\n\\n  var startMarker = getNodeForCharacterOffset(node, start);\\n  var endMarker = getNodeForCharacterOffset(node, end);\\n\\n  if (startMarker && endMarker) {\\n    var range = document.createRange();\\n    range.setStart(startMarker.node, startMarker.offset);\\n    selection.removeAllRanges();\\n\\n    if (start > end) {\\n      selection.addRange(range);\\n      selection.extend(endMarker.node, endMarker.offset);\\n    } else {\\n      range.setEnd(endMarker.node, endMarker.offset);\\n      selection.addRange(range);\\n    }\\n  }\\n}\\n\\nvar useIEOffsets = ExecutionEnvironment.canUseDOM && document.selection;\\n\\nvar ReactDOMSelection = {\\n  /**\\n   * @param {DOMElement} node\\n   */\\n  getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,\\n\\n  /**\\n   * @param {DOMElement|DOMTextNode} node\\n   * @param {object} offsets\\n   */\\n  setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets\\n};\\n\\nmodule.exports = ReactDOMSelection;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMSelection.js\\n ** module id = 88\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMSelection.js?\");\n\n/***/ },\n/* 89 */\n/*!**************************************************!*\\\n  !*** ./~/react/lib/getNodeForCharacterOffset.js ***!\n  \\**************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getNodeForCharacterOffset\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Given any node return the first leaf node without children.\\n *\\n * @param {DOMElement|DOMTextNode} node\\n * @return {DOMElement|DOMTextNode}\\n */\\nfunction getLeafNode(node) {\\n  while (node && node.firstChild) {\\n    node = node.firstChild;\\n  }\\n  return node;\\n}\\n\\n/**\\n * Get the next sibling within a container. This will walk up the\\n * DOM if a node's siblings have been exhausted.\\n *\\n * @param {DOMElement|DOMTextNode} node\\n * @return {?DOMElement|DOMTextNode}\\n */\\nfunction getSiblingNode(node) {\\n  while (node) {\\n    if (node.nextSibling) {\\n      return node.nextSibling;\\n    }\\n    node = node.parentNode;\\n  }\\n}\\n\\n/**\\n * Get object describing the nodes which contain characters at offset.\\n *\\n * @param {DOMElement|DOMTextNode} root\\n * @param {number} offset\\n * @return {?object}\\n */\\nfunction getNodeForCharacterOffset(root, offset) {\\n  var node = getLeafNode(root);\\n  var nodeStart = 0;\\n  var nodeEnd = 0;\\n\\n  while (node) {\\n    if (node.nodeType == 3) {\\n      nodeEnd = nodeStart + node.textContent.length;\\n\\n      if (nodeStart <= offset && nodeEnd >= offset) {\\n        return {\\n          node: node,\\n          offset: offset - nodeStart\\n        };\\n      }\\n\\n      nodeStart = nodeEnd;\\n    }\\n\\n    node = getLeafNode(getSiblingNode(node));\\n  }\\n}\\n\\nmodule.exports = getNodeForCharacterOffset;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getNodeForCharacterOffset.js\\n ** module id = 89\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getNodeForCharacterOffset.js?\");\n\n/***/ },\n/* 90 */\n/*!***********************************************!*\\\n  !*** ./~/react/lib/getTextContentAccessor.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getTextContentAccessor\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar contentKey = null;\\n\\n/**\\n * Gets the key used to access text content on a DOM node.\\n *\\n * @return {?string} Key used to access text content.\\n * @internal\\n */\\nfunction getTextContentAccessor() {\\n  if (!contentKey && ExecutionEnvironment.canUseDOM) {\\n    // Prefer textContent to innerText because many browsers support both but\\n    // SVG <text> elements don't support innerText even when <div> does.\\n    contentKey = 'textContent' in document.documentElement ?\\n      'textContent' :\\n      'innerText';\\n  }\\n  return contentKey;\\n}\\n\\nmodule.exports = getTextContentAccessor;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getTextContentAccessor.js\\n ** module id = 90\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getTextContentAccessor.js?\");\n\n/***/ },\n/* 91 */\n/*!**********************************!*\\\n  !*** ./~/react/lib/focusNode.js ***!\n  \\**********************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule focusNode\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * @param {DOMElement} node input/textarea to focus\\n */\\nfunction focusNode(node) {\\n  // IE8 can throw \\\"Can't move focus to the control because it is invisible,\\n  // not enabled, or of a type that does not accept the focus.\\\" for all kinds of\\n  // reasons that are too expensive and fragile to test.\\n  try {\\n    node.focus();\\n  } catch(e) {\\n  }\\n}\\n\\nmodule.exports = focusNode;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/focusNode.js\\n ** module id = 91\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/focusNode.js?\");\n\n/***/ },\n/* 92 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/getActiveElement.js ***!\n  \\*****************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getActiveElement\\n * @typechecks\\n */\\n\\n/**\\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\\n * not safe to call document.activeElement if there is nothing focused.\\n *\\n * The activeElement will be null only if the document body is not yet defined.\\n */\\nfunction getActiveElement() /*?DOMElement*/ {\\n  try {\\n    return document.activeElement || document.body;\\n  } catch (e) {\\n    return document.body;\\n  }\\n}\\n\\nmodule.exports = getActiveElement;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getActiveElement.js\\n ** module id = 92\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getActiveElement.js?\");\n\n/***/ },\n/* 93 */\n/*!**************************************************!*\\\n  !*** ./~/react/lib/SyntheticCompositionEvent.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticCompositionEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 81);\\n\\n/**\\n * @interface Event\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\\n */\\nvar CompositionEventInterface = {\\n  data: null\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticCompositionEvent(\\n  dispatchConfig,\\n  dispatchMarker,\\n  nativeEvent) {\\n  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticEvent.augmentClass(\\n  SyntheticCompositionEvent,\\n  CompositionEventInterface\\n);\\n\\nmodule.exports = SyntheticCompositionEvent;\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticCompositionEvent.js\\n ** module id = 93\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticCompositionEvent.js?\");\n\n/***/ },\n/* 94 */\n/*!************************************************!*\\\n  !*** ./~/react/lib/DefaultEventPluginOrder.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule DefaultEventPluginOrder\\n */\\n\\n\\\"use strict\\\";\\n\\n var keyOf = __webpack_require__(/*! ./keyOf */ 42);\\n\\n/**\\n * Module that is injectable into `EventPluginHub`, that specifies a\\n * deterministic ordering of `EventPlugin`s. A convenient way to reason about\\n * plugins, without having to package every one of them. This is better than\\n * having plugins be ordered in the same order that they are injected because\\n * that ordering would be influenced by the packaging order.\\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\\n */\\nvar DefaultEventPluginOrder = [\\n  keyOf({ResponderEventPlugin: null}),\\n  keyOf({SimpleEventPlugin: null}),\\n  keyOf({TapEventPlugin: null}),\\n  keyOf({EnterLeaveEventPlugin: null}),\\n  keyOf({ChangeEventPlugin: null}),\\n  keyOf({SelectEventPlugin: null}),\\n  keyOf({CompositionEventPlugin: null}),\\n  keyOf({BeforeInputEventPlugin: null}),\\n  keyOf({AnalyticsEventPlugin: null}),\\n  keyOf({MobileSafariClickEventPlugin: null})\\n];\\n\\nmodule.exports = DefaultEventPluginOrder;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/DefaultEventPluginOrder.js\\n ** module id = 94\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/DefaultEventPluginOrder.js?\");\n\n/***/ },\n/* 95 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/EnterLeaveEventPlugin.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule EnterLeaveEventPlugin\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar EventPropagators = __webpack_require__(/*! ./EventPropagators */ 79);\\nvar SyntheticMouseEvent = __webpack_require__(/*! ./SyntheticMouseEvent */ 96);\\n\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar keyOf = __webpack_require__(/*! ./keyOf */ 42);\\n\\nvar topLevelTypes = EventConstants.topLevelTypes;\\nvar getFirstReactDOM = ReactMount.getFirstReactDOM;\\n\\nvar eventTypes = {\\n  mouseEnter: {\\n    registrationName: keyOf({onMouseEnter: null}),\\n    dependencies: [\\n      topLevelTypes.topMouseOut,\\n      topLevelTypes.topMouseOver\\n    ]\\n  },\\n  mouseLeave: {\\n    registrationName: keyOf({onMouseLeave: null}),\\n    dependencies: [\\n      topLevelTypes.topMouseOut,\\n      topLevelTypes.topMouseOver\\n    ]\\n  }\\n};\\n\\nvar extractedEvents = [null, null];\\n\\nvar EnterLeaveEventPlugin = {\\n\\n  eventTypes: eventTypes,\\n\\n  /**\\n   * For almost every interaction we care about, there will be both a top-level\\n   * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\\n   * we do not extract duplicate events. However, moving the mouse into the\\n   * browser from outside will not fire a `mouseout` event. In this case, we use\\n   * the `mouseover` top-level event.\\n   *\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native browser event.\\n   * @return {*} An accumulation of synthetic events.\\n   * @see {EventPluginHub.extractEvents}\\n   */\\n  extractEvents: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n    if (topLevelType === topLevelTypes.topMouseOver &&\\n        (nativeEvent.relatedTarget || nativeEvent.fromElement)) {\\n      return null;\\n    }\\n    if (topLevelType !== topLevelTypes.topMouseOut &&\\n        topLevelType !== topLevelTypes.topMouseOver) {\\n      // Must not be a mouse in or mouse out - ignoring.\\n      return null;\\n    }\\n\\n    var win;\\n    if (topLevelTarget.window === topLevelTarget) {\\n      // `topLevelTarget` is probably a window object.\\n      win = topLevelTarget;\\n    } else {\\n      // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\\n      var doc = topLevelTarget.ownerDocument;\\n      if (doc) {\\n        win = doc.defaultView || doc.parentWindow;\\n      } else {\\n        win = window;\\n      }\\n    }\\n\\n    var from, to;\\n    if (topLevelType === topLevelTypes.topMouseOut) {\\n      from = topLevelTarget;\\n      to =\\n        getFirstReactDOM(nativeEvent.relatedTarget || nativeEvent.toElement) ||\\n        win;\\n    } else {\\n      from = win;\\n      to = topLevelTarget;\\n    }\\n\\n    if (from === to) {\\n      // Nothing pertains to our managed components.\\n      return null;\\n    }\\n\\n    var fromID = from ? ReactMount.getID(from) : '';\\n    var toID = to ? ReactMount.getID(to) : '';\\n\\n    var leave = SyntheticMouseEvent.getPooled(\\n      eventTypes.mouseLeave,\\n      fromID,\\n      nativeEvent\\n    );\\n    leave.type = 'mouseleave';\\n    leave.target = from;\\n    leave.relatedTarget = to;\\n\\n    var enter = SyntheticMouseEvent.getPooled(\\n      eventTypes.mouseEnter,\\n      toID,\\n      nativeEvent\\n    );\\n    enter.type = 'mouseenter';\\n    enter.target = to;\\n    enter.relatedTarget = from;\\n\\n    EventPropagators.accumulateEnterLeaveDispatches(leave, enter, fromID, toID);\\n\\n    extractedEvents[0] = leave;\\n    extractedEvents[1] = enter;\\n\\n    return extractedEvents;\\n  }\\n\\n};\\n\\nmodule.exports = EnterLeaveEventPlugin;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/EnterLeaveEventPlugin.js\\n ** module id = 95\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/EnterLeaveEventPlugin.js?\");\n\n/***/ },\n/* 96 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/SyntheticMouseEvent.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticMouseEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticUIEvent = __webpack_require__(/*! ./SyntheticUIEvent */ 97);\\nvar ViewportMetrics = __webpack_require__(/*! ./ViewportMetrics */ 66);\\n\\nvar getEventModifierState = __webpack_require__(/*! ./getEventModifierState */ 98);\\n\\n/**\\n * @interface MouseEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar MouseEventInterface = {\\n  screenX: null,\\n  screenY: null,\\n  clientX: null,\\n  clientY: null,\\n  ctrlKey: null,\\n  shiftKey: null,\\n  altKey: null,\\n  metaKey: null,\\n  getModifierState: getEventModifierState,\\n  button: function(event) {\\n    // Webkit, Firefox, IE9+\\n    // which:  1 2 3\\n    // button: 0 1 2 (standard)\\n    var button = event.button;\\n    if ('which' in event) {\\n      return button;\\n    }\\n    // IE<9\\n    // which:  undefined\\n    // button: 0 0 0\\n    // button: 1 4 2 (onmouseup)\\n    return button === 2 ? 2 : button === 4 ? 1 : 0;\\n  },\\n  buttons: null,\\n  relatedTarget: function(event) {\\n    return event.relatedTarget || (\\n      event.fromElement === event.srcElement ?\\n        event.toElement :\\n        event.fromElement\\n    );\\n  },\\n  // \\\"Proprietary\\\" Interface.\\n  pageX: function(event) {\\n    return 'pageX' in event ?\\n      event.pageX :\\n      event.clientX + ViewportMetrics.currentScrollLeft;\\n  },\\n  pageY: function(event) {\\n    return 'pageY' in event ?\\n      event.pageY :\\n      event.clientY + ViewportMetrics.currentScrollTop;\\n  }\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);\\n\\nmodule.exports = SyntheticMouseEvent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticMouseEvent.js\\n ** module id = 96\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticMouseEvent.js?\");\n\n/***/ },\n/* 97 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/SyntheticUIEvent.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticUIEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 81);\\n\\nvar getEventTarget = __webpack_require__(/*! ./getEventTarget */ 82);\\n\\n/**\\n * @interface UIEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar UIEventInterface = {\\n  view: function(event) {\\n    if (event.view) {\\n      return event.view;\\n    }\\n\\n    var target = getEventTarget(event);\\n    if (target != null && target.window === target) {\\n      // target is a window object\\n      return target;\\n    }\\n\\n    var doc = target.ownerDocument;\\n    // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\\n    if (doc) {\\n      return doc.defaultView || doc.parentWindow;\\n    } else {\\n      return window;\\n    }\\n  },\\n  detail: function(event) {\\n    return event.detail || 0;\\n  }\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticEvent}\\n */\\nfunction SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);\\n\\nmodule.exports = SyntheticUIEvent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticUIEvent.js\\n ** module id = 97\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticUIEvent.js?\");\n\n/***/ },\n/* 98 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/getEventModifierState.js ***!\n  \\**********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013 Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getEventModifierState\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Translation from modifier key to the associated property in the event.\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\\n */\\n\\nvar modifierKeyToProp = {\\n  'Alt': 'altKey',\\n  'Control': 'ctrlKey',\\n  'Meta': 'metaKey',\\n  'Shift': 'shiftKey'\\n};\\n\\n// IE8 does not implement getModifierState so we simply map it to the only\\n// modifier keys exposed by the event itself, does not support Lock-keys.\\n// Currently, all major browsers except Chrome seems to support Lock-keys.\\nfunction modifierStateGetter(keyArg) {\\n  /*jshint validthis:true */\\n  var syntheticEvent = this;\\n  var nativeEvent = syntheticEvent.nativeEvent;\\n  if (nativeEvent.getModifierState) {\\n    return nativeEvent.getModifierState(keyArg);\\n  }\\n  var keyProp = modifierKeyToProp[keyArg];\\n  return keyProp ? !!nativeEvent[keyProp] : false;\\n}\\n\\nfunction getEventModifierState(nativeEvent) {\\n  return modifierStateGetter;\\n}\\n\\nmodule.exports = getEventModifierState;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getEventModifierState.js\\n ** module id = 98\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getEventModifierState.js?\");\n\n/***/ },\n/* 99 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/HTMLDOMPropertyConfig.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule HTMLDOMPropertyConfig\\n */\\n\\n/*jslint bitwise: true*/\\n\\n\\\"use strict\\\";\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 8);\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;\\nvar MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;\\nvar HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;\\nvar HAS_SIDE_EFFECTS = DOMProperty.injection.HAS_SIDE_EFFECTS;\\nvar HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;\\nvar HAS_POSITIVE_NUMERIC_VALUE =\\n  DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;\\nvar HAS_OVERLOADED_BOOLEAN_VALUE =\\n  DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;\\n\\nvar hasSVG;\\nif (ExecutionEnvironment.canUseDOM) {\\n  var implementation = document.implementation;\\n  hasSVG = (\\n    implementation &&\\n    implementation.hasFeature &&\\n    implementation.hasFeature(\\n      'http://www.w3.org/TR/SVG11/feature#BasicStructure',\\n      '1.1'\\n    )\\n  );\\n}\\n\\n\\nvar HTMLDOMPropertyConfig = {\\n  isCustomAttribute: RegExp.prototype.test.bind(\\n    /^(data|aria)-[a-z_][a-z\\\\d_.\\\\-]*$/\\n  ),\\n  Properties: {\\n    /**\\n     * Standard Properties\\n     */\\n    accept: null,\\n    acceptCharset: null,\\n    accessKey: null,\\n    action: null,\\n    allowFullScreen: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\\n    allowTransparency: MUST_USE_ATTRIBUTE,\\n    alt: null,\\n    async: HAS_BOOLEAN_VALUE,\\n    autoComplete: null,\\n    // autoFocus is polyfilled/normalized by AutoFocusMixin\\n    // autoFocus: HAS_BOOLEAN_VALUE,\\n    autoPlay: HAS_BOOLEAN_VALUE,\\n    cellPadding: null,\\n    cellSpacing: null,\\n    charSet: MUST_USE_ATTRIBUTE,\\n    checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    classID: MUST_USE_ATTRIBUTE,\\n    // To set className on SVG elements, it's necessary to use .setAttribute;\\n    // this works on HTML elements too in all browsers except IE8. Conveniently,\\n    // IE8 doesn't support SVG and so we can simply use the attribute in\\n    // browsers that support SVG and the property in browsers that don't,\\n    // regardless of whether the element is HTML or SVG.\\n    className: hasSVG ? MUST_USE_ATTRIBUTE : MUST_USE_PROPERTY,\\n    cols: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\\n    colSpan: null,\\n    content: null,\\n    contentEditable: null,\\n    contextMenu: MUST_USE_ATTRIBUTE,\\n    controls: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    coords: null,\\n    crossOrigin: null,\\n    data: null, // For `<object />` acts as `src`.\\n    dateTime: MUST_USE_ATTRIBUTE,\\n    defer: HAS_BOOLEAN_VALUE,\\n    dir: null,\\n    disabled: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\\n    download: HAS_OVERLOADED_BOOLEAN_VALUE,\\n    draggable: null,\\n    encType: null,\\n    form: MUST_USE_ATTRIBUTE,\\n    formAction: MUST_USE_ATTRIBUTE,\\n    formEncType: MUST_USE_ATTRIBUTE,\\n    formMethod: MUST_USE_ATTRIBUTE,\\n    formNoValidate: HAS_BOOLEAN_VALUE,\\n    formTarget: MUST_USE_ATTRIBUTE,\\n    frameBorder: MUST_USE_ATTRIBUTE,\\n    height: MUST_USE_ATTRIBUTE,\\n    hidden: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\\n    href: null,\\n    hrefLang: null,\\n    htmlFor: null,\\n    httpEquiv: null,\\n    icon: null,\\n    id: MUST_USE_PROPERTY,\\n    label: null,\\n    lang: null,\\n    list: MUST_USE_ATTRIBUTE,\\n    loop: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    manifest: MUST_USE_ATTRIBUTE,\\n    marginHeight: null,\\n    marginWidth: null,\\n    max: null,\\n    maxLength: MUST_USE_ATTRIBUTE,\\n    media: MUST_USE_ATTRIBUTE,\\n    mediaGroup: null,\\n    method: null,\\n    min: null,\\n    multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    name: null,\\n    noValidate: HAS_BOOLEAN_VALUE,\\n    open: null,\\n    pattern: null,\\n    placeholder: null,\\n    poster: null,\\n    preload: null,\\n    radioGroup: null,\\n    readOnly: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    rel: null,\\n    required: HAS_BOOLEAN_VALUE,\\n    role: MUST_USE_ATTRIBUTE,\\n    rows: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\\n    rowSpan: null,\\n    sandbox: null,\\n    scope: null,\\n    scrolling: null,\\n    seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\\n    selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\\n    shape: null,\\n    size: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\\n    sizes: MUST_USE_ATTRIBUTE,\\n    span: HAS_POSITIVE_NUMERIC_VALUE,\\n    spellCheck: null,\\n    src: null,\\n    srcDoc: MUST_USE_PROPERTY,\\n    srcSet: MUST_USE_ATTRIBUTE,\\n    start: HAS_NUMERIC_VALUE,\\n    step: null,\\n    style: null,\\n    tabIndex: null,\\n    target: null,\\n    title: null,\\n    type: null,\\n    useMap: null,\\n    value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS,\\n    width: MUST_USE_ATTRIBUTE,\\n    wmode: MUST_USE_ATTRIBUTE,\\n\\n    /**\\n     * Non-standard Properties\\n     */\\n    autoCapitalize: null, // Supported in Mobile Safari for keyboard hints\\n    autoCorrect: null, // Supported in Mobile Safari for keyboard hints\\n    itemProp: MUST_USE_ATTRIBUTE, // Microdata: http://schema.org/docs/gs.html\\n    itemScope: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE, // Microdata: http://schema.org/docs/gs.html\\n    itemType: MUST_USE_ATTRIBUTE, // Microdata: http://schema.org/docs/gs.html\\n    property: null // Supports OG in meta tags\\n  },\\n  DOMAttributeNames: {\\n    acceptCharset: 'accept-charset',\\n    className: 'class',\\n    htmlFor: 'for',\\n    httpEquiv: 'http-equiv'\\n  },\\n  DOMPropertyNames: {\\n    autoCapitalize: 'autocapitalize',\\n    autoComplete: 'autocomplete',\\n    autoCorrect: 'autocorrect',\\n    autoFocus: 'autofocus',\\n    autoPlay: 'autoplay',\\n    encType: 'enctype',\\n    hrefLang: 'hreflang',\\n    radioGroup: 'radiogroup',\\n    spellCheck: 'spellcheck',\\n    srcDoc: 'srcdoc',\\n    srcSet: 'srcset'\\n  }\\n};\\n\\nmodule.exports = HTMLDOMPropertyConfig;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/HTMLDOMPropertyConfig.js\\n ** module id = 99\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/HTMLDOMPropertyConfig.js?\");\n\n/***/ },\n/* 100 */\n/*!*****************************************************!*\\\n  !*** ./~/react/lib/MobileSafariClickEventPlugin.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule MobileSafariClickEventPlugin\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\n\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\n\\nvar topLevelTypes = EventConstants.topLevelTypes;\\n\\n/**\\n * Mobile Safari does not fire properly bubble click events on non-interactive\\n * elements, which means delegated click listeners do not fire. The workaround\\n * for this bug involves attaching an empty click listener on the target node.\\n *\\n * This particular plugin works around the bug by attaching an empty click\\n * listener on `touchstart` (which does fire on every element).\\n */\\nvar MobileSafariClickEventPlugin = {\\n\\n  eventTypes: null,\\n\\n  /**\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native browser event.\\n   * @return {*} An accumulation of synthetic events.\\n   * @see {EventPluginHub.extractEvents}\\n   */\\n  extractEvents: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n    if (topLevelType === topLevelTypes.topTouchStart) {\\n      var target = nativeEvent.target;\\n      if (target && !target.onclick) {\\n        target.onclick = emptyFunction;\\n      }\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = MobileSafariClickEventPlugin;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/MobileSafariClickEventPlugin.js\\n ** module id = 100\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/MobileSafariClickEventPlugin.js?\");\n\n/***/ },\n/* 101 */\n/*!*********************************************************!*\\\n  !*** ./~/react/lib/ReactComponentBrowserEnvironment.js ***!\n  \\*********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactComponentBrowserEnvironment\\n */\\n\\n/*jslint evil: true */\\n\\n\\\"use strict\\\";\\n\\nvar ReactDOMIDOperations = __webpack_require__(/*! ./ReactDOMIDOperations */ 104);\\nvar ReactMarkupChecksum = __webpack_require__(/*! ./ReactMarkupChecksum */ 112);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\nvar ReactReconcileTransaction = __webpack_require__(/*! ./ReactReconcileTransaction */ 102);\\n\\nvar getReactRootElementInContainer = __webpack_require__(/*! ./getReactRootElementInContainer */ 70);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar setInnerHTML = __webpack_require__(/*! ./setInnerHTML */ 111);\\n\\n\\nvar ELEMENT_NODE_TYPE = 1;\\nvar DOC_NODE_TYPE = 9;\\n\\n\\n/**\\n * Abstracts away all functionality of `ReactComponent` requires knowledge of\\n * the browser context.\\n */\\nvar ReactComponentBrowserEnvironment = {\\n  ReactReconcileTransaction: ReactReconcileTransaction,\\n\\n  BackendIDOperations: ReactDOMIDOperations,\\n\\n  /**\\n   * If a particular environment requires that some resources be cleaned up,\\n   * specify this in the injected Mixin. In the DOM, we would likely want to\\n   * purge any cached node ID lookups.\\n   *\\n   * @private\\n   */\\n  unmountIDFromEnvironment: function(rootNodeID) {\\n    ReactMount.purgeID(rootNodeID);\\n  },\\n\\n  /**\\n   * @param {string} markup Markup string to place into the DOM Element.\\n   * @param {DOMElement} container DOM Element to insert markup into.\\n   * @param {boolean} shouldReuseMarkup Should reuse the existing markup in the\\n   * container if possible.\\n   */\\n  mountImageIntoNode: ReactPerf.measure(\\n    'ReactComponentBrowserEnvironment',\\n    'mountImageIntoNode',\\n    function(markup, container, shouldReuseMarkup) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        container && (\\n          container.nodeType === ELEMENT_NODE_TYPE ||\\n            container.nodeType === DOC_NODE_TYPE\\n        ),\\n        'mountComponentIntoNode(...): Target container is not valid.'\\n      ) : invariant(container && (\\n        container.nodeType === ELEMENT_NODE_TYPE ||\\n          container.nodeType === DOC_NODE_TYPE\\n      )));\\n\\n      if (shouldReuseMarkup) {\\n        if (ReactMarkupChecksum.canReuseMarkup(\\n          markup,\\n          getReactRootElementInContainer(container))) {\\n          return;\\n        } else {\\n          (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n            container.nodeType !== DOC_NODE_TYPE,\\n            'You\\\\'re trying to render a component to the document using ' +\\n            'server rendering but the checksum was invalid. This usually ' +\\n            'means you rendered a different component type or props on ' +\\n            'the client from the one on the server, or your render() ' +\\n            'methods are impure. React cannot handle this case due to ' +\\n            'cross-browser quirks by rendering at the document root. You ' +\\n            'should look for environment dependent code in your components ' +\\n            'and ensure the props are the same client and server side.'\\n          ) : invariant(container.nodeType !== DOC_NODE_TYPE));\\n\\n          if (\\\"production\\\" !== process.env.NODE_ENV) {\\n            console.warn(\\n              'React attempted to use reuse markup in a container but the ' +\\n              'checksum was invalid. This generally means that you are ' +\\n              'using server rendering and the markup generated on the ' +\\n              'server was not what the client was expecting. React injected ' +\\n              'new markup to compensate which works but you have lost many ' +\\n              'of the benefits of server rendering. Instead, figure out ' +\\n              'why the markup being generated is different on the client ' +\\n              'or server.'\\n            );\\n          }\\n        }\\n      }\\n\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        container.nodeType !== DOC_NODE_TYPE,\\n        'You\\\\'re trying to render a component to the document but ' +\\n          'you didn\\\\'t use server rendering. We can\\\\'t do this ' +\\n          'without using server rendering due to cross-browser quirks. ' +\\n          'See renderComponentToString() for server rendering.'\\n      ) : invariant(container.nodeType !== DOC_NODE_TYPE));\\n\\n      setInnerHTML(container, markup);\\n    }\\n  )\\n};\\n\\nmodule.exports = ReactComponentBrowserEnvironment;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactComponentBrowserEnvironment.js\\n ** module id = 101\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactComponentBrowserEnvironment.js?\");\n\n/***/ },\n/* 102 */\n/*!**************************************************!*\\\n  !*** ./~/react/lib/ReactReconcileTransaction.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactReconcileTransaction\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar CallbackQueue = __webpack_require__(/*! ./CallbackQueue */ 28);\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 17);\\nvar ReactBrowserEventEmitter = __webpack_require__(/*! ./ReactBrowserEventEmitter */ 60);\\nvar ReactInputSelection = __webpack_require__(/*! ./ReactInputSelection */ 87);\\nvar ReactPutListenerQueue = __webpack_require__(/*! ./ReactPutListenerQueue */ 103);\\nvar Transaction = __webpack_require__(/*! ./Transaction */ 27);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\n\\n/**\\n * Ensures that, when possible, the selection range (currently selected text\\n * input) is not disturbed by performing the transaction.\\n */\\nvar SELECTION_RESTORATION = {\\n  /**\\n   * @return {Selection} Selection information.\\n   */\\n  initialize: ReactInputSelection.getSelectionInformation,\\n  /**\\n   * @param {Selection} sel Selection information returned from `initialize`.\\n   */\\n  close: ReactInputSelection.restoreSelection\\n};\\n\\n/**\\n * Suppresses events (blur/focus) that could be inadvertently dispatched due to\\n * high level DOM manipulations (like temporarily removing a text input from the\\n * DOM).\\n */\\nvar EVENT_SUPPRESSION = {\\n  /**\\n   * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before\\n   * the reconciliation.\\n   */\\n  initialize: function() {\\n    var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();\\n    ReactBrowserEventEmitter.setEnabled(false);\\n    return currentlyEnabled;\\n  },\\n\\n  /**\\n   * @param {boolean} previouslyEnabled Enabled status of\\n   *   `ReactBrowserEventEmitter` before the reconciliation occured. `close`\\n   *   restores the previous value.\\n   */\\n  close: function(previouslyEnabled) {\\n    ReactBrowserEventEmitter.setEnabled(previouslyEnabled);\\n  }\\n};\\n\\n/**\\n * Provides a queue for collecting `componentDidMount` and\\n * `componentDidUpdate` callbacks during the the transaction.\\n */\\nvar ON_DOM_READY_QUEUEING = {\\n  /**\\n   * Initializes the internal `onDOMReady` queue.\\n   */\\n  initialize: function() {\\n    this.reactMountReady.reset();\\n  },\\n\\n  /**\\n   * After DOM is flushed, invoke all registered `onDOMReady` callbacks.\\n   */\\n  close: function() {\\n    this.reactMountReady.notifyAll();\\n  }\\n};\\n\\nvar PUT_LISTENER_QUEUEING = {\\n  initialize: function() {\\n    this.putListenerQueue.reset();\\n  },\\n\\n  close: function() {\\n    this.putListenerQueue.putListeners();\\n  }\\n};\\n\\n/**\\n * Executed within the scope of the `Transaction` instance. Consider these as\\n * being member methods, but with an implied ordering while being isolated from\\n * each other.\\n */\\nvar TRANSACTION_WRAPPERS = [\\n  PUT_LISTENER_QUEUEING,\\n  SELECTION_RESTORATION,\\n  EVENT_SUPPRESSION,\\n  ON_DOM_READY_QUEUEING\\n];\\n\\n/**\\n * Currently:\\n * - The order that these are listed in the transaction is critical:\\n * - Suppresses events.\\n * - Restores selection range.\\n *\\n * Future:\\n * - Restore document/overflow scroll positions that were unintentionally\\n *   modified via DOM insertions above the top viewport boundary.\\n * - Implement/integrate with customized constraint based layout system and keep\\n *   track of which dimensions must be remeasured.\\n *\\n * @class ReactReconcileTransaction\\n */\\nfunction ReactReconcileTransaction() {\\n  this.reinitializeTransaction();\\n  // Only server-side rendering really needs this option (see\\n  // `ReactServerRendering`), but server-side uses\\n  // `ReactServerRenderingTransaction` instead. This option is here so that it's\\n  // accessible and defaults to false when `ReactDOMComponent` and\\n  // `ReactTextComponent` checks it in `mountComponent`.`\\n  this.renderToStaticMarkup = false;\\n  this.reactMountReady = CallbackQueue.getPooled(null);\\n  this.putListenerQueue = ReactPutListenerQueue.getPooled();\\n}\\n\\nvar Mixin = {\\n  /**\\n   * @see Transaction\\n   * @abstract\\n   * @final\\n   * @return {array<object>} List of operation wrap proceedures.\\n   *   TODO: convert to array<TransactionWrapper>\\n   */\\n  getTransactionWrappers: function() {\\n    return TRANSACTION_WRAPPERS;\\n  },\\n\\n  /**\\n   * @return {object} The queue to collect `onDOMReady` callbacks with.\\n   */\\n  getReactMountReady: function() {\\n    return this.reactMountReady;\\n  },\\n\\n  getPutListenerQueue: function() {\\n    return this.putListenerQueue;\\n  },\\n\\n  /**\\n   * `PooledClass` looks for this, and will invoke this before allowing this\\n   * instance to be resused.\\n   */\\n  destructor: function() {\\n    CallbackQueue.release(this.reactMountReady);\\n    this.reactMountReady = null;\\n\\n    ReactPutListenerQueue.release(this.putListenerQueue);\\n    this.putListenerQueue = null;\\n  }\\n};\\n\\n\\nassign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);\\n\\nPooledClass.addPoolingTo(ReactReconcileTransaction);\\n\\nmodule.exports = ReactReconcileTransaction;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactReconcileTransaction.js\\n ** module id = 102\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactReconcileTransaction.js?\");\n\n/***/ },\n/* 103 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/ReactPutListenerQueue.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactPutListenerQueue\\n */\\n\\n\\\"use strict\\\";\\n\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 17);\\nvar ReactBrowserEventEmitter = __webpack_require__(/*! ./ReactBrowserEventEmitter */ 60);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\n\\nfunction ReactPutListenerQueue() {\\n  this.listenersToPut = [];\\n}\\n\\nassign(ReactPutListenerQueue.prototype, {\\n  enqueuePutListener: function(rootNodeID, propKey, propValue) {\\n    this.listenersToPut.push({\\n      rootNodeID: rootNodeID,\\n      propKey: propKey,\\n      propValue: propValue\\n    });\\n  },\\n\\n  putListeners: function() {\\n    for (var i = 0; i < this.listenersToPut.length; i++) {\\n      var listenerToPut = this.listenersToPut[i];\\n      ReactBrowserEventEmitter.putListener(\\n        listenerToPut.rootNodeID,\\n        listenerToPut.propKey,\\n        listenerToPut.propValue\\n      );\\n    }\\n  },\\n\\n  reset: function() {\\n    this.listenersToPut.length = 0;\\n  },\\n\\n  destructor: function() {\\n    this.reset();\\n  }\\n});\\n\\nPooledClass.addPoolingTo(ReactPutListenerQueue);\\n\\nmodule.exports = ReactPutListenerQueue;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactPutListenerQueue.js\\n ** module id = 103\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactPutListenerQueue.js?\");\n\n/***/ },\n/* 104 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ReactDOMIDOperations.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMIDOperations\\n * @typechecks static-only\\n */\\n\\n/*jslint evil: true */\\n\\n\\\"use strict\\\";\\n\\nvar CSSPropertyOperations = __webpack_require__(/*! ./CSSPropertyOperations */ 47);\\nvar DOMChildrenOperations = __webpack_require__(/*! ./DOMChildrenOperations */ 105);\\nvar DOMPropertyOperations = __webpack_require__(/*! ./DOMPropertyOperations */ 7);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar setInnerHTML = __webpack_require__(/*! ./setInnerHTML */ 111);\\n\\n/**\\n * Errors for properties that should not be updated with `updatePropertyById()`.\\n *\\n * @type {object}\\n * @private\\n */\\nvar INVALID_PROPERTY_ERRORS = {\\n  dangerouslySetInnerHTML:\\n    '`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.',\\n  style: '`style` must be set using `updateStylesByID()`.'\\n};\\n\\n/**\\n * Operations used to process updates to DOM nodes. This is made injectable via\\n * `ReactComponent.BackendIDOperations`.\\n */\\nvar ReactDOMIDOperations = {\\n\\n  /**\\n   * Updates a DOM node with new property values. This should only be used to\\n   * update DOM properties in `DOMProperty`.\\n   *\\n   * @param {string} id ID of the node to update.\\n   * @param {string} name A valid property name, see `DOMProperty`.\\n   * @param {*} value New value of the property.\\n   * @internal\\n   */\\n  updatePropertyByID: ReactPerf.measure(\\n    'ReactDOMIDOperations',\\n    'updatePropertyByID',\\n    function(id, name, value) {\\n      var node = ReactMount.getNode(id);\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        !INVALID_PROPERTY_ERRORS.hasOwnProperty(name),\\n        'updatePropertyByID(...): %s',\\n        INVALID_PROPERTY_ERRORS[name]\\n      ) : invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name)));\\n\\n      // If we're updating to null or undefined, we should remove the property\\n      // from the DOM node instead of inadvertantly setting to a string. This\\n      // brings us in line with the same behavior we have on initial render.\\n      if (value != null) {\\n        DOMPropertyOperations.setValueForProperty(node, name, value);\\n      } else {\\n        DOMPropertyOperations.deleteValueForProperty(node, name);\\n      }\\n    }\\n  ),\\n\\n  /**\\n   * Updates a DOM node to remove a property. This should only be used to remove\\n   * DOM properties in `DOMProperty`.\\n   *\\n   * @param {string} id ID of the node to update.\\n   * @param {string} name A property name to remove, see `DOMProperty`.\\n   * @internal\\n   */\\n  deletePropertyByID: ReactPerf.measure(\\n    'ReactDOMIDOperations',\\n    'deletePropertyByID',\\n    function(id, name, value) {\\n      var node = ReactMount.getNode(id);\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        !INVALID_PROPERTY_ERRORS.hasOwnProperty(name),\\n        'updatePropertyByID(...): %s',\\n        INVALID_PROPERTY_ERRORS[name]\\n      ) : invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name)));\\n      DOMPropertyOperations.deleteValueForProperty(node, name, value);\\n    }\\n  ),\\n\\n  /**\\n   * Updates a DOM node with new style values. If a value is specified as '',\\n   * the corresponding style property will be unset.\\n   *\\n   * @param {string} id ID of the node to update.\\n   * @param {object} styles Mapping from styles to values.\\n   * @internal\\n   */\\n  updateStylesByID: ReactPerf.measure(\\n    'ReactDOMIDOperations',\\n    'updateStylesByID',\\n    function(id, styles) {\\n      var node = ReactMount.getNode(id);\\n      CSSPropertyOperations.setValueForStyles(node, styles);\\n    }\\n  ),\\n\\n  /**\\n   * Updates a DOM node's innerHTML.\\n   *\\n   * @param {string} id ID of the node to update.\\n   * @param {string} html An HTML string.\\n   * @internal\\n   */\\n  updateInnerHTMLByID: ReactPerf.measure(\\n    'ReactDOMIDOperations',\\n    'updateInnerHTMLByID',\\n    function(id, html) {\\n      var node = ReactMount.getNode(id);\\n      setInnerHTML(node, html);\\n    }\\n  ),\\n\\n  /**\\n   * Updates a DOM node's text content set by `props.content`.\\n   *\\n   * @param {string} id ID of the node to update.\\n   * @param {string} content Text content.\\n   * @internal\\n   */\\n  updateTextContentByID: ReactPerf.measure(\\n    'ReactDOMIDOperations',\\n    'updateTextContentByID',\\n    function(id, content) {\\n      var node = ReactMount.getNode(id);\\n      DOMChildrenOperations.updateTextContent(node, content);\\n    }\\n  ),\\n\\n  /**\\n   * Replaces a DOM node that exists in the document with markup.\\n   *\\n   * @param {string} id ID of child to be replaced.\\n   * @param {string} markup Dangerous markup to inject in place of child.\\n   * @internal\\n   * @see {Danger.dangerouslyReplaceNodeWithMarkup}\\n   */\\n  dangerouslyReplaceNodeWithMarkupByID: ReactPerf.measure(\\n    'ReactDOMIDOperations',\\n    'dangerouslyReplaceNodeWithMarkupByID',\\n    function(id, markup) {\\n      var node = ReactMount.getNode(id);\\n      DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup(node, markup);\\n    }\\n  ),\\n\\n  /**\\n   * Updates a component's children by processing a series of updates.\\n   *\\n   * @param {array<object>} updates List of update configurations.\\n   * @param {array<string>} markup List of markup strings.\\n   * @internal\\n   */\\n  dangerouslyProcessChildrenUpdates: ReactPerf.measure(\\n    'ReactDOMIDOperations',\\n    'dangerouslyProcessChildrenUpdates',\\n    function(updates, markup) {\\n      for (var i = 0; i < updates.length; i++) {\\n        updates[i].parentNode = ReactMount.getNode(updates[i].parentID);\\n      }\\n      DOMChildrenOperations.processUpdates(updates, markup);\\n    }\\n  )\\n};\\n\\nmodule.exports = ReactDOMIDOperations;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMIDOperations.js\\n ** module id = 104\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMIDOperations.js?\");\n\n/***/ },\n/* 105 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/DOMChildrenOperations.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule DOMChildrenOperations\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar Danger = __webpack_require__(/*! ./Danger */ 106);\\nvar ReactMultiChildUpdateTypes = __webpack_require__(/*! ./ReactMultiChildUpdateTypes */ 72);\\n\\nvar getTextContentAccessor = __webpack_require__(/*! ./getTextContentAccessor */ 90);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * The DOM property to use when setting text content.\\n *\\n * @type {string}\\n * @private\\n */\\nvar textContentAccessor = getTextContentAccessor();\\n\\n/**\\n * Inserts `childNode` as a child of `parentNode` at the `index`.\\n *\\n * @param {DOMElement} parentNode Parent node in which to insert.\\n * @param {DOMElement} childNode Child node to insert.\\n * @param {number} index Index at which to insert the child.\\n * @internal\\n */\\nfunction insertChildAt(parentNode, childNode, index) {\\n  // By exploiting arrays returning `undefined` for an undefined index, we can\\n  // rely exclusively on `insertBefore(node, null)` instead of also using\\n  // `appendChild(node)`. However, using `undefined` is not allowed by all\\n  // browsers so we must replace it with `null`.\\n  parentNode.insertBefore(\\n    childNode,\\n    parentNode.childNodes[index] || null\\n  );\\n}\\n\\nvar updateTextContent;\\nif (textContentAccessor === 'textContent') {\\n  /**\\n   * Sets the text content of `node` to `text`.\\n   *\\n   * @param {DOMElement} node Node to change\\n   * @param {string} text New text content\\n   */\\n  updateTextContent = function(node, text) {\\n    node.textContent = text;\\n  };\\n} else {\\n  /**\\n   * Sets the text content of `node` to `text`.\\n   *\\n   * @param {DOMElement} node Node to change\\n   * @param {string} text New text content\\n   */\\n  updateTextContent = function(node, text) {\\n    // In order to preserve newlines correctly, we can't use .innerText to set\\n    // the contents (see #1080), so we empty the element then append a text node\\n    while (node.firstChild) {\\n      node.removeChild(node.firstChild);\\n    }\\n    if (text) {\\n      var doc = node.ownerDocument || document;\\n      node.appendChild(doc.createTextNode(text));\\n    }\\n  };\\n}\\n\\n/**\\n * Operations for updating with DOM children.\\n */\\nvar DOMChildrenOperations = {\\n\\n  dangerouslyReplaceNodeWithMarkup: Danger.dangerouslyReplaceNodeWithMarkup,\\n\\n  updateTextContent: updateTextContent,\\n\\n  /**\\n   * Updates a component's children by processing a series of updates. The\\n   * update configurations are each expected to have a `parentNode` property.\\n   *\\n   * @param {array<object>} updates List of update configurations.\\n   * @param {array<string>} markupList List of markup strings.\\n   * @internal\\n   */\\n  processUpdates: function(updates, markupList) {\\n    var update;\\n    // Mapping from parent IDs to initial child orderings.\\n    var initialChildren = null;\\n    // List of children that will be moved or removed.\\n    var updatedChildren = null;\\n\\n    for (var i = 0; update = updates[i]; i++) {\\n      if (update.type === ReactMultiChildUpdateTypes.MOVE_EXISTING ||\\n          update.type === ReactMultiChildUpdateTypes.REMOVE_NODE) {\\n        var updatedIndex = update.fromIndex;\\n        var updatedChild = update.parentNode.childNodes[updatedIndex];\\n        var parentID = update.parentID;\\n\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          updatedChild,\\n          'processUpdates(): Unable to find child %s of element. This ' +\\n          'probably means the DOM was unexpectedly mutated (e.g., by the ' +\\n          'browser), usually due to forgetting a <tbody> when using tables, ' +\\n          'nesting tags like <form>, <p>, or <a>, or using non-SVG elements '+\\n          'in an <svg> parent. Try inspecting the child nodes of the element ' +\\n          'with React ID `%s`.',\\n          updatedIndex,\\n          parentID\\n        ) : invariant(updatedChild));\\n\\n        initialChildren = initialChildren || {};\\n        initialChildren[parentID] = initialChildren[parentID] || [];\\n        initialChildren[parentID][updatedIndex] = updatedChild;\\n\\n        updatedChildren = updatedChildren || [];\\n        updatedChildren.push(updatedChild);\\n      }\\n    }\\n\\n    var renderedMarkup = Danger.dangerouslyRenderMarkup(markupList);\\n\\n    // Remove updated children first so that `toIndex` is consistent.\\n    if (updatedChildren) {\\n      for (var j = 0; j < updatedChildren.length; j++) {\\n        updatedChildren[j].parentNode.removeChild(updatedChildren[j]);\\n      }\\n    }\\n\\n    for (var k = 0; update = updates[k]; k++) {\\n      switch (update.type) {\\n        case ReactMultiChildUpdateTypes.INSERT_MARKUP:\\n          insertChildAt(\\n            update.parentNode,\\n            renderedMarkup[update.markupIndex],\\n            update.toIndex\\n          );\\n          break;\\n        case ReactMultiChildUpdateTypes.MOVE_EXISTING:\\n          insertChildAt(\\n            update.parentNode,\\n            initialChildren[update.parentID][update.fromIndex],\\n            update.toIndex\\n          );\\n          break;\\n        case ReactMultiChildUpdateTypes.TEXT_CONTENT:\\n          updateTextContent(\\n            update.parentNode,\\n            update.textContent\\n          );\\n          break;\\n        case ReactMultiChildUpdateTypes.REMOVE_NODE:\\n          // Already removed by the for-loop above.\\n          break;\\n      }\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = DOMChildrenOperations;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/DOMChildrenOperations.js\\n ** module id = 105\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/DOMChildrenOperations.js?\");\n\n/***/ },\n/* 106 */\n/*!*******************************!*\\\n  !*** ./~/react/lib/Danger.js ***!\n  \\*******************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule Danger\\n * @typechecks static-only\\n */\\n\\n/*jslint evil: true, sub: true */\\n\\n\\\"use strict\\\";\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar createNodesFromMarkup = __webpack_require__(/*! ./createNodesFromMarkup */ 107);\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\nvar getMarkupWrap = __webpack_require__(/*! ./getMarkupWrap */ 110);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nvar OPEN_TAG_NAME_EXP = /^(<[^ \\\\/>]+)/;\\nvar RESULT_INDEX_ATTR = 'data-danger-index';\\n\\n/**\\n * Extracts the `nodeName` from a string of markup.\\n *\\n * NOTE: Extracting the `nodeName` does not require a regular expression match\\n * because we make assumptions about React-generated markup (i.e. there are no\\n * spaces surrounding the opening tag and there is at least one attribute).\\n *\\n * @param {string} markup String of markup.\\n * @return {string} Node name of the supplied markup.\\n * @see http://jsperf.com/extract-nodename\\n */\\nfunction getNodeName(markup) {\\n  return markup.substring(1, markup.indexOf(' '));\\n}\\n\\nvar Danger = {\\n\\n  /**\\n   * Renders markup into an array of nodes. The markup is expected to render\\n   * into a list of root nodes. Also, the length of `resultList` and\\n   * `markupList` should be the same.\\n   *\\n   * @param {array<string>} markupList List of markup strings to render.\\n   * @return {array<DOMElement>} List of rendered nodes.\\n   * @internal\\n   */\\n  dangerouslyRenderMarkup: function(markupList) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      ExecutionEnvironment.canUseDOM,\\n      'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' +\\n      'thread. Make sure `window` and `document` are available globally ' +\\n      'before requiring React when unit testing or use ' +\\n      'React.renderToString for server rendering.'\\n    ) : invariant(ExecutionEnvironment.canUseDOM));\\n    var nodeName;\\n    var markupByNodeName = {};\\n    // Group markup by `nodeName` if a wrap is necessary, else by '*'.\\n    for (var i = 0; i < markupList.length; i++) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        markupList[i],\\n        'dangerouslyRenderMarkup(...): Missing markup.'\\n      ) : invariant(markupList[i]));\\n      nodeName = getNodeName(markupList[i]);\\n      nodeName = getMarkupWrap(nodeName) ? nodeName : '*';\\n      markupByNodeName[nodeName] = markupByNodeName[nodeName] || [];\\n      markupByNodeName[nodeName][i] = markupList[i];\\n    }\\n    var resultList = [];\\n    var resultListAssignmentCount = 0;\\n    for (nodeName in markupByNodeName) {\\n      if (!markupByNodeName.hasOwnProperty(nodeName)) {\\n        continue;\\n      }\\n      var markupListByNodeName = markupByNodeName[nodeName];\\n\\n      // This for-in loop skips the holes of the sparse array. The order of\\n      // iteration should follow the order of assignment, which happens to match\\n      // numerical index order, but we don't rely on that.\\n      for (var resultIndex in markupListByNodeName) {\\n        if (markupListByNodeName.hasOwnProperty(resultIndex)) {\\n          var markup = markupListByNodeName[resultIndex];\\n\\n          // Push the requested markup with an additional RESULT_INDEX_ATTR\\n          // attribute.  If the markup does not start with a < character, it\\n          // will be discarded below (with an appropriate console.error).\\n          markupListByNodeName[resultIndex] = markup.replace(\\n            OPEN_TAG_NAME_EXP,\\n            // This index will be parsed back out below.\\n            '$1 ' + RESULT_INDEX_ATTR + '=\\\"' + resultIndex + '\\\" '\\n          );\\n        }\\n      }\\n\\n      // Render each group of markup with similar wrapping `nodeName`.\\n      var renderNodes = createNodesFromMarkup(\\n        markupListByNodeName.join(''),\\n        emptyFunction // Do nothing special with <script> tags.\\n      );\\n\\n      for (i = 0; i < renderNodes.length; ++i) {\\n        var renderNode = renderNodes[i];\\n        if (renderNode.hasAttribute &&\\n            renderNode.hasAttribute(RESULT_INDEX_ATTR)) {\\n\\n          resultIndex = +renderNode.getAttribute(RESULT_INDEX_ATTR);\\n          renderNode.removeAttribute(RESULT_INDEX_ATTR);\\n\\n          (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n            !resultList.hasOwnProperty(resultIndex),\\n            'Danger: Assigning to an already-occupied result index.'\\n          ) : invariant(!resultList.hasOwnProperty(resultIndex)));\\n\\n          resultList[resultIndex] = renderNode;\\n\\n          // This should match resultList.length and markupList.length when\\n          // we're done.\\n          resultListAssignmentCount += 1;\\n\\n        } else if (\\\"production\\\" !== process.env.NODE_ENV) {\\n          console.error(\\n            \\\"Danger: Discarding unexpected node:\\\",\\n            renderNode\\n          );\\n        }\\n      }\\n    }\\n\\n    // Although resultList was populated out of order, it should now be a dense\\n    // array.\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      resultListAssignmentCount === resultList.length,\\n      'Danger: Did not assign to every index of resultList.'\\n    ) : invariant(resultListAssignmentCount === resultList.length));\\n\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      resultList.length === markupList.length,\\n      'Danger: Expected markup to render %s nodes, but rendered %s.',\\n      markupList.length,\\n      resultList.length\\n    ) : invariant(resultList.length === markupList.length));\\n\\n    return resultList;\\n  },\\n\\n  /**\\n   * Replaces a node with a string of markup at its current position within its\\n   * parent. The markup must render into a single root node.\\n   *\\n   * @param {DOMElement} oldChild Child node to replace.\\n   * @param {string} markup Markup to render in place of the child node.\\n   * @internal\\n   */\\n  dangerouslyReplaceNodeWithMarkup: function(oldChild, markup) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      ExecutionEnvironment.canUseDOM,\\n      'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a ' +\\n      'worker thread. Make sure `window` and `document` are available ' +\\n      'globally before requiring React when unit testing or use ' +\\n      'React.renderToString for server rendering.'\\n    ) : invariant(ExecutionEnvironment.canUseDOM));\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(markup, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : invariant(markup));\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      oldChild.tagName.toLowerCase() !== 'html',\\n      'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the ' +\\n      '<html> node. This is because browser quirks make this unreliable ' +\\n      'and/or slow. If you want to render to the root you must use ' +\\n      'server rendering. See renderComponentToString().'\\n    ) : invariant(oldChild.tagName.toLowerCase() !== 'html'));\\n\\n    var newChild = createNodesFromMarkup(markup, emptyFunction)[0];\\n    oldChild.parentNode.replaceChild(newChild, oldChild);\\n  }\\n\\n};\\n\\nmodule.exports = Danger;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/Danger.js\\n ** module id = 106\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/Danger.js?\");\n\n/***/ },\n/* 107 */\n/*!**********************************************!*\\\n  !*** ./~/react/lib/createNodesFromMarkup.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule createNodesFromMarkup\\n * @typechecks\\n */\\n\\n/*jslint evil: true, sub: true */\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar createArrayFrom = __webpack_require__(/*! ./createArrayFrom */ 108);\\nvar getMarkupWrap = __webpack_require__(/*! ./getMarkupWrap */ 110);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Dummy container used to render all markup.\\n */\\nvar dummyNode =\\n  ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\\n\\n/**\\n * Pattern used by `getNodeName`.\\n */\\nvar nodeNamePattern = /^\\\\s*<(\\\\w+)/;\\n\\n/**\\n * Extracts the `nodeName` of the first element in a string of markup.\\n *\\n * @param {string} markup String of markup.\\n * @return {?string} Node name of the supplied markup.\\n */\\nfunction getNodeName(markup) {\\n  var nodeNameMatch = markup.match(nodeNamePattern);\\n  return nodeNameMatch && nodeNameMatch[1].toLowerCase();\\n}\\n\\n/**\\n * Creates an array containing the nodes rendered from the supplied markup. The\\n * optionally supplied `handleScript` function will be invoked once for each\\n * <script> element that is rendered. If no `handleScript` function is supplied,\\n * an exception is thrown if any <script> elements are rendered.\\n *\\n * @param {string} markup A string of valid HTML markup.\\n * @param {?function} handleScript Invoked once for each rendered <script>.\\n * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.\\n */\\nfunction createNodesFromMarkup(markup, handleScript) {\\n  var node = dummyNode;\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(!!dummyNode, 'createNodesFromMarkup dummy not initialized') : invariant(!!dummyNode));\\n  var nodeName = getNodeName(markup);\\n\\n  var wrap = nodeName && getMarkupWrap(nodeName);\\n  if (wrap) {\\n    node.innerHTML = wrap[1] + markup + wrap[2];\\n\\n    var wrapDepth = wrap[0];\\n    while (wrapDepth--) {\\n      node = node.lastChild;\\n    }\\n  } else {\\n    node.innerHTML = markup;\\n  }\\n\\n  var scripts = node.getElementsByTagName('script');\\n  if (scripts.length) {\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      handleScript,\\n      'createNodesFromMarkup(...): Unexpected <script> element rendered.'\\n    ) : invariant(handleScript));\\n    createArrayFrom(scripts).forEach(handleScript);\\n  }\\n\\n  var nodes = createArrayFrom(node.childNodes);\\n  while (node.lastChild) {\\n    node.removeChild(node.lastChild);\\n  }\\n  return nodes;\\n}\\n\\nmodule.exports = createNodesFromMarkup;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/createNodesFromMarkup.js\\n ** module id = 107\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/createNodesFromMarkup.js?\");\n\n/***/ },\n/* 108 */\n/*!****************************************!*\\\n  !*** ./~/react/lib/createArrayFrom.js ***!\n  \\****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule createArrayFrom\\n * @typechecks\\n */\\n\\nvar toArray = __webpack_require__(/*! ./toArray */ 109);\\n\\n/**\\n * Perform a heuristic test to determine if an object is \\\"array-like\\\".\\n *\\n *   A monk asked Joshu, a Zen master, \\\"Has a dog Buddha nature?\\\"\\n *   Joshu replied: \\\"Mu.\\\"\\n *\\n * This function determines if its argument has \\\"array nature\\\": it returns\\n * true if the argument is an actual array, an `arguments' object, or an\\n * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).\\n *\\n * It will return false for other array-like objects like Filelist.\\n *\\n * @param {*} obj\\n * @return {boolean}\\n */\\nfunction hasArrayNature(obj) {\\n  return (\\n    // not null/false\\n    !!obj &&\\n    // arrays are objects, NodeLists are functions in Safari\\n    (typeof obj == 'object' || typeof obj == 'function') &&\\n    // quacks like an array\\n    ('length' in obj) &&\\n    // not window\\n    !('setInterval' in obj) &&\\n    // no DOM node should be considered an array-like\\n    // a 'select' element has 'length' and 'item' properties on IE8\\n    (typeof obj.nodeType != 'number') &&\\n    (\\n      // a real array\\n      (// HTMLCollection/NodeList\\n      (Array.isArray(obj) ||\\n      // arguments\\n      ('callee' in obj) || 'item' in obj))\\n    )\\n  );\\n}\\n\\n/**\\n * Ensure that the argument is an array by wrapping it in an array if it is not.\\n * Creates a copy of the argument if it is already an array.\\n *\\n * This is mostly useful idiomatically:\\n *\\n *   var createArrayFrom = require('createArrayFrom');\\n *\\n *   function takesOneOrMoreThings(things) {\\n *     things = createArrayFrom(things);\\n *     ...\\n *   }\\n *\\n * This allows you to treat `things' as an array, but accept scalars in the API.\\n *\\n * If you need to convert an array-like object, like `arguments`, into an array\\n * use toArray instead.\\n *\\n * @param {*} obj\\n * @return {array}\\n */\\nfunction createArrayFrom(obj) {\\n  if (!hasArrayNature(obj)) {\\n    return [obj];\\n  } else if (Array.isArray(obj)) {\\n    return obj.slice();\\n  } else {\\n    return toArray(obj);\\n  }\\n}\\n\\nmodule.exports = createArrayFrom;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/createArrayFrom.js\\n ** module id = 108\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/createArrayFrom.js?\");\n\n/***/ },\n/* 109 */\n/*!********************************!*\\\n  !*** ./~/react/lib/toArray.js ***!\n  \\********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule toArray\\n * @typechecks\\n */\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Convert array-like objects to arrays.\\n *\\n * This API assumes the caller knows the contents of the data type. For less\\n * well defined inputs use createArrayFrom.\\n *\\n * @param {object|function|filelist} obj\\n * @return {array}\\n */\\nfunction toArray(obj) {\\n  var length = obj.length;\\n\\n  // Some browse builtin objects can report typeof 'function' (e.g. NodeList in\\n  // old versions of Safari).\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    !Array.isArray(obj) &&\\n    (typeof obj === 'object' || typeof obj === 'function'),\\n    'toArray: Array-like object expected'\\n  ) : invariant(!Array.isArray(obj) &&\\n  (typeof obj === 'object' || typeof obj === 'function')));\\n\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    typeof length === 'number',\\n    'toArray: Object needs a length property'\\n  ) : invariant(typeof length === 'number'));\\n\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    length === 0 ||\\n    (length - 1) in obj,\\n    'toArray: Object should have keys for indices'\\n  ) : invariant(length === 0 ||\\n  (length - 1) in obj));\\n\\n  // Old IE doesn't give collections access to hasOwnProperty. Assume inputs\\n  // without method will throw during the slice call and skip straight to the\\n  // fallback.\\n  if (obj.hasOwnProperty) {\\n    try {\\n      return Array.prototype.slice.call(obj);\\n    } catch (e) {\\n      // IE < 9 does not support Array#slice on collections objects\\n    }\\n  }\\n\\n  // Fall back to copying key by key. This assumes all keys have a value,\\n  // so will not preserve sparsely populated inputs.\\n  var ret = Array(length);\\n  for (var ii = 0; ii < length; ii++) {\\n    ret[ii] = obj[ii];\\n  }\\n  return ret;\\n}\\n\\nmodule.exports = toArray;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/toArray.js\\n ** module id = 109\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/toArray.js?\");\n\n/***/ },\n/* 110 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/getMarkupWrap.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getMarkupWrap\\n */\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Dummy container used to detect which wraps are necessary.\\n */\\nvar dummyNode =\\n  ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\\n\\n/**\\n * Some browsers cannot use `innerHTML` to render certain elements standalone,\\n * so we wrap them, render the wrapped nodes, then extract the desired node.\\n *\\n * In IE8, certain elements cannot render alone, so wrap all elements ('*').\\n */\\nvar shouldWrap = {\\n  // Force wrapping for SVG elements because if they get created inside a <div>,\\n  // they will be initialized in the wrong namespace (and will not display).\\n  'circle': true,\\n  'defs': true,\\n  'ellipse': true,\\n  'g': true,\\n  'line': true,\\n  'linearGradient': true,\\n  'path': true,\\n  'polygon': true,\\n  'polyline': true,\\n  'radialGradient': true,\\n  'rect': true,\\n  'stop': true,\\n  'text': true\\n};\\n\\nvar selectWrap = [1, '<select multiple=\\\"true\\\">', '</select>'];\\nvar tableWrap = [1, '<table>', '</table>'];\\nvar trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];\\n\\nvar svgWrap = [1, '<svg>', '</svg>'];\\n\\nvar markupWrap = {\\n  '*': [1, '?<div>', '</div>'],\\n\\n  'area': [1, '<map>', '</map>'],\\n  'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],\\n  'legend': [1, '<fieldset>', '</fieldset>'],\\n  'param': [1, '<object>', '</object>'],\\n  'tr': [2, '<table><tbody>', '</tbody></table>'],\\n\\n  'optgroup': selectWrap,\\n  'option': selectWrap,\\n\\n  'caption': tableWrap,\\n  'colgroup': tableWrap,\\n  'tbody': tableWrap,\\n  'tfoot': tableWrap,\\n  'thead': tableWrap,\\n\\n  'td': trWrap,\\n  'th': trWrap,\\n\\n  'circle': svgWrap,\\n  'defs': svgWrap,\\n  'ellipse': svgWrap,\\n  'g': svgWrap,\\n  'line': svgWrap,\\n  'linearGradient': svgWrap,\\n  'path': svgWrap,\\n  'polygon': svgWrap,\\n  'polyline': svgWrap,\\n  'radialGradient': svgWrap,\\n  'rect': svgWrap,\\n  'stop': svgWrap,\\n  'text': svgWrap\\n};\\n\\n/**\\n * Gets the markup wrap configuration for the supplied `nodeName`.\\n *\\n * NOTE: This lazily detects which wraps are necessary for the current browser.\\n *\\n * @param {string} nodeName Lowercase `nodeName`.\\n * @return {?array} Markup wrap configuration, if applicable.\\n */\\nfunction getMarkupWrap(nodeName) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(!!dummyNode, 'Markup wrapping node not initialized') : invariant(!!dummyNode));\\n  if (!markupWrap.hasOwnProperty(nodeName)) {\\n    nodeName = '*';\\n  }\\n  if (!shouldWrap.hasOwnProperty(nodeName)) {\\n    if (nodeName === '*') {\\n      dummyNode.innerHTML = '<link />';\\n    } else {\\n      dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';\\n    }\\n    shouldWrap[nodeName] = !dummyNode.firstChild;\\n  }\\n  return shouldWrap[nodeName] ? markupWrap[nodeName] : null;\\n}\\n\\n\\nmodule.exports = getMarkupWrap;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getMarkupWrap.js\\n ** module id = 110\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getMarkupWrap.js?\");\n\n/***/ },\n/* 111 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/setInnerHTML.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule setInnerHTML\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar WHITESPACE_TEST = /^[ \\\\r\\\\n\\\\t\\\\f]/;\\nvar NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \\\\r\\\\n\\\\t\\\\f\\\\/>]/;\\n\\n/**\\n * Set the innerHTML property of a node, ensuring that whitespace is preserved\\n * even in IE8.\\n *\\n * @param {DOMElement} node\\n * @param {string} html\\n * @internal\\n */\\nvar setInnerHTML = function(node, html) {\\n  node.innerHTML = html;\\n};\\n\\nif (ExecutionEnvironment.canUseDOM) {\\n  // IE8: When updating a just created node with innerHTML only leading\\n  // whitespace is removed. When updating an existing node with innerHTML\\n  // whitespace in root TextNodes is also collapsed.\\n  // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html\\n\\n  // Feature detection; only IE8 is known to behave improperly like this.\\n  var testElement = document.createElement('div');\\n  testElement.innerHTML = ' ';\\n  if (testElement.innerHTML === '') {\\n    setInnerHTML = function(node, html) {\\n      // Magic theory: IE8 supposedly differentiates between added and updated\\n      // nodes when processing innerHTML, innerHTML on updated nodes suffers\\n      // from worse whitespace behavior. Re-adding a node like this triggers\\n      // the initial and more favorable whitespace behavior.\\n      // TODO: What to do on a detached node?\\n      if (node.parentNode) {\\n        node.parentNode.replaceChild(node, node);\\n      }\\n\\n      // We also implement a workaround for non-visible tags disappearing into\\n      // thin air on IE8, this only happens if there is no visible text\\n      // in-front of the non-visible tags. Piggyback on the whitespace fix\\n      // and simply check if any non-visible tags appear in the source.\\n      if (WHITESPACE_TEST.test(html) ||\\n          html[0] === '<' && NONVISIBLE_TEST.test(html)) {\\n        // Recover leading whitespace by temporarily prepending any character.\\n        // \\\\uFEFF has the potential advantage of being zero-width/invisible.\\n        node.innerHTML = '\\\\uFEFF' + html;\\n\\n        // deleteData leaves an empty `TextNode` which offsets the index of all\\n        // children. Definitely want to avoid this.\\n        var textNode = node.firstChild;\\n        if (textNode.data.length === 1) {\\n          node.removeChild(textNode);\\n        } else {\\n          textNode.deleteData(0, 1);\\n        }\\n      } else {\\n        node.innerHTML = html;\\n      }\\n    };\\n  }\\n}\\n\\nmodule.exports = setInnerHTML;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/setInnerHTML.js\\n ** module id = 111\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/setInnerHTML.js?\");\n\n/***/ },\n/* 112 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/ReactMarkupChecksum.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactMarkupChecksum\\n */\\n\\n\\\"use strict\\\";\\n\\nvar adler32 = __webpack_require__(/*! ./adler32 */ 113);\\n\\nvar ReactMarkupChecksum = {\\n  CHECKSUM_ATTR_NAME: 'data-react-checksum',\\n\\n  /**\\n   * @param {string} markup Markup string\\n   * @return {string} Markup string with checksum attribute attached\\n   */\\n  addChecksumToMarkup: function(markup) {\\n    var checksum = adler32(markup);\\n    return markup.replace(\\n      '>',\\n      ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '=\\\"' + checksum + '\\\">'\\n    );\\n  },\\n\\n  /**\\n   * @param {string} markup to use\\n   * @param {DOMElement} element root React element\\n   * @returns {boolean} whether or not the markup is the same\\n   */\\n  canReuseMarkup: function(markup, element) {\\n    var existingChecksum = element.getAttribute(\\n      ReactMarkupChecksum.CHECKSUM_ATTR_NAME\\n    );\\n    existingChecksum = existingChecksum && parseInt(existingChecksum, 10);\\n    var markupChecksum = adler32(markup);\\n    return markupChecksum === existingChecksum;\\n  }\\n};\\n\\nmodule.exports = ReactMarkupChecksum;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactMarkupChecksum.js\\n ** module id = 112\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactMarkupChecksum.js?\");\n\n/***/ },\n/* 113 */\n/*!********************************!*\\\n  !*** ./~/react/lib/adler32.js ***!\n  \\********************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule adler32\\n */\\n\\n/* jslint bitwise:true */\\n\\n\\\"use strict\\\";\\n\\nvar MOD = 65521;\\n\\n// This is a clean-room implementation of adler32 designed for detecting\\n// if markup is not what we expect it to be. It does not need to be\\n// cryptographically strong, only reasonably good at detecting if markup\\n// generated on the server is different than that on the client.\\nfunction adler32(data) {\\n  var a = 1;\\n  var b = 0;\\n  for (var i = 0; i < data.length; i++) {\\n    a = (a + data.charCodeAt(i)) % MOD;\\n    b = (b + a) % MOD;\\n  }\\n  return a | (b << 16);\\n}\\n\\nmodule.exports = adler32;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/adler32.js\\n ** module id = 113\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/adler32.js?\");\n\n/***/ },\n/* 114 */\n/*!*****************************************************!*\\\n  !*** ./~/react/lib/ReactDefaultBatchingStrategy.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDefaultBatchingStrategy\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\nvar Transaction = __webpack_require__(/*! ./Transaction */ 27);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\n\\nvar RESET_BATCHED_UPDATES = {\\n  initialize: emptyFunction,\\n  close: function() {\\n    ReactDefaultBatchingStrategy.isBatchingUpdates = false;\\n  }\\n};\\n\\nvar FLUSH_BATCHED_UPDATES = {\\n  initialize: emptyFunction,\\n  close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)\\n};\\n\\nvar TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];\\n\\nfunction ReactDefaultBatchingStrategyTransaction() {\\n  this.reinitializeTransaction();\\n}\\n\\nassign(\\n  ReactDefaultBatchingStrategyTransaction.prototype,\\n  Transaction.Mixin,\\n  {\\n    getTransactionWrappers: function() {\\n      return TRANSACTION_WRAPPERS;\\n    }\\n  }\\n);\\n\\nvar transaction = new ReactDefaultBatchingStrategyTransaction();\\n\\nvar ReactDefaultBatchingStrategy = {\\n  isBatchingUpdates: false,\\n\\n  /**\\n   * Call the provided function in a context within which calls to `setState`\\n   * and friends are batched such that components aren't updated unnecessarily.\\n   */\\n  batchedUpdates: function(callback, a, b) {\\n    var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;\\n\\n    ReactDefaultBatchingStrategy.isBatchingUpdates = true;\\n\\n    // The code is written this way to avoid extra allocations\\n    if (alreadyBatchingUpdates) {\\n      callback(a, b);\\n    } else {\\n      transaction.perform(callback, null, a, b);\\n    }\\n  }\\n};\\n\\nmodule.exports = ReactDefaultBatchingStrategy;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDefaultBatchingStrategy.js\\n ** module id = 114\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDefaultBatchingStrategy.js?\");\n\n/***/ },\n/* 115 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactDOMButton.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMButton\\n */\\n\\n\\\"use strict\\\";\\n\\nvar AutoFocusMixin = __webpack_require__(/*! ./AutoFocusMixin */ 116);\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactDOM = __webpack_require__(/*! ./ReactDOM */ 45);\\n\\nvar keyMirror = __webpack_require__(/*! ./keyMirror */ 15);\\n\\n// Store a reference to the <button> `ReactDOMComponent`. TODO: use string\\nvar button = ReactElement.createFactory(ReactDOM.button.type);\\n\\nvar mouseListenerNames = keyMirror({\\n  onClick: true,\\n  onDoubleClick: true,\\n  onMouseDown: true,\\n  onMouseMove: true,\\n  onMouseUp: true,\\n  onClickCapture: true,\\n  onDoubleClickCapture: true,\\n  onMouseDownCapture: true,\\n  onMouseMoveCapture: true,\\n  onMouseUpCapture: true\\n});\\n\\n/**\\n * Implements a <button> native component that does not receive mouse events\\n * when `disabled` is set.\\n */\\nvar ReactDOMButton = ReactCompositeComponent.createClass({\\n  displayName: 'ReactDOMButton',\\n\\n  mixins: [AutoFocusMixin, ReactBrowserComponentMixin],\\n\\n  render: function() {\\n    var props = {};\\n\\n    // Copy the props; except the mouse listeners if we're disabled\\n    for (var key in this.props) {\\n      if (this.props.hasOwnProperty(key) &&\\n          (!this.props.disabled || !mouseListenerNames[key])) {\\n        props[key] = this.props[key];\\n      }\\n    }\\n\\n    return button(props, this.props.children);\\n  }\\n\\n});\\n\\nmodule.exports = ReactDOMButton;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMButton.js\\n ** module id = 115\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMButton.js?\");\n\n/***/ },\n/* 116 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/AutoFocusMixin.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule AutoFocusMixin\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar focusNode = __webpack_require__(/*! ./focusNode */ 91);\\n\\nvar AutoFocusMixin = {\\n  componentDidMount: function() {\\n    if (this.props.autoFocus) {\\n      focusNode(this.getDOMNode());\\n    }\\n  }\\n};\\n\\nmodule.exports = AutoFocusMixin;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/AutoFocusMixin.js\\n ** module id = 116\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/AutoFocusMixin.js?\");\n\n/***/ },\n/* 117 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/ReactDOMForm.js ***!\n  \\*************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMForm\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar LocalEventTrapMixin = __webpack_require__(/*! ./LocalEventTrapMixin */ 77);\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactDOM = __webpack_require__(/*! ./ReactDOM */ 45);\\n\\n// Store a reference to the <form> `ReactDOMComponent`. TODO: use string\\nvar form = ReactElement.createFactory(ReactDOM.form.type);\\n\\n/**\\n * Since onSubmit doesn't bubble OR capture on the top level in IE8, we need\\n * to capture it on the <form> element itself. There are lots of hacks we could\\n * do to accomplish this, but the most reliable is to make <form> a\\n * composite component and use `componentDidMount` to attach the event handlers.\\n */\\nvar ReactDOMForm = ReactCompositeComponent.createClass({\\n  displayName: 'ReactDOMForm',\\n\\n  mixins: [ReactBrowserComponentMixin, LocalEventTrapMixin],\\n\\n  render: function() {\\n    // TODO: Instead of using `ReactDOM` directly, we should use JSX. However,\\n    // `jshint` fails to parse JSX so in order for linting to work in the open\\n    // source repo, we need to just use `ReactDOM.form`.\\n    return form(this.props);\\n  },\\n\\n  componentDidMount: function() {\\n    this.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset');\\n    this.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit');\\n  }\\n});\\n\\nmodule.exports = ReactDOMForm;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMForm.js\\n ** module id = 117\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMForm.js?\");\n\n/***/ },\n/* 118 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/ReactDOMInput.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMInput\\n */\\n\\n\\\"use strict\\\";\\n\\nvar AutoFocusMixin = __webpack_require__(/*! ./AutoFocusMixin */ 116);\\nvar DOMPropertyOperations = __webpack_require__(/*! ./DOMPropertyOperations */ 7);\\nvar LinkedValueUtils = __webpack_require__(/*! ./LinkedValueUtils */ 119);\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactDOM = __webpack_require__(/*! ./ReactDOM */ 45);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n// Store a reference to the <input> `ReactDOMComponent`. TODO: use string\\nvar input = ReactElement.createFactory(ReactDOM.input.type);\\n\\nvar instancesByReactID = {};\\n\\nfunction forceUpdateIfMounted() {\\n  /*jshint validthis:true */\\n  if (this.isMounted()) {\\n    this.forceUpdate();\\n  }\\n}\\n\\n/**\\n * Implements an <input> native component that allows setting these optional\\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\\n *\\n * If `checked` or `value` are not supplied (or null/undefined), user actions\\n * that affect the checked state or value will trigger updates to the element.\\n *\\n * If they are supplied (and not null/undefined), the rendered element will not\\n * trigger updates to the element. Instead, the props must change in order for\\n * the rendered element to be updated.\\n *\\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\\n * with an empty value (or `defaultValue`).\\n *\\n * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\\n */\\nvar ReactDOMInput = ReactCompositeComponent.createClass({\\n  displayName: 'ReactDOMInput',\\n\\n  mixins: [AutoFocusMixin, LinkedValueUtils.Mixin, ReactBrowserComponentMixin],\\n\\n  getInitialState: function() {\\n    var defaultValue = this.props.defaultValue;\\n    return {\\n      initialChecked: this.props.defaultChecked || false,\\n      initialValue: defaultValue != null ? defaultValue : null\\n    };\\n  },\\n\\n  render: function() {\\n    // Clone `this.props` so we don't mutate the input.\\n    var props = assign({}, this.props);\\n\\n    props.defaultChecked = null;\\n    props.defaultValue = null;\\n\\n    var value = LinkedValueUtils.getValue(this);\\n    props.value = value != null ? value : this.state.initialValue;\\n\\n    var checked = LinkedValueUtils.getChecked(this);\\n    props.checked = checked != null ? checked : this.state.initialChecked;\\n\\n    props.onChange = this._handleChange;\\n\\n    return input(props, this.props.children);\\n  },\\n\\n  componentDidMount: function() {\\n    var id = ReactMount.getID(this.getDOMNode());\\n    instancesByReactID[id] = this;\\n  },\\n\\n  componentWillUnmount: function() {\\n    var rootNode = this.getDOMNode();\\n    var id = ReactMount.getID(rootNode);\\n    delete instancesByReactID[id];\\n  },\\n\\n  componentDidUpdate: function(prevProps, prevState, prevContext) {\\n    var rootNode = this.getDOMNode();\\n    if (this.props.checked != null) {\\n      DOMPropertyOperations.setValueForProperty(\\n        rootNode,\\n        'checked',\\n        this.props.checked || false\\n      );\\n    }\\n\\n    var value = LinkedValueUtils.getValue(this);\\n    if (value != null) {\\n      // Cast `value` to a string to ensure the value is set correctly. While\\n      // browsers typically do this as necessary, jsdom doesn't.\\n      DOMPropertyOperations.setValueForProperty(rootNode, 'value', '' + value);\\n    }\\n  },\\n\\n  _handleChange: function(event) {\\n    var returnValue;\\n    var onChange = LinkedValueUtils.getOnChange(this);\\n    if (onChange) {\\n      returnValue = onChange.call(this, event);\\n    }\\n    // Here we use asap to wait until all updates have propagated, which\\n    // is important when using controlled components within layers:\\n    // https://github.com/facebook/react/issues/1698\\n    ReactUpdates.asap(forceUpdateIfMounted, this);\\n\\n    var name = this.props.name;\\n    if (this.props.type === 'radio' && name != null) {\\n      var rootNode = this.getDOMNode();\\n      var queryRoot = rootNode;\\n\\n      while (queryRoot.parentNode) {\\n        queryRoot = queryRoot.parentNode;\\n      }\\n\\n      // If `rootNode.form` was non-null, then we could try `form.elements`,\\n      // but that sometimes behaves strangely in IE8. We could also try using\\n      // `form.getElementsByName`, but that will only return direct children\\n      // and won't include inputs that use the HTML5 `form=` attribute. Since\\n      // the input might not even be in a form, let's just use the global\\n      // `querySelectorAll` to ensure we don't miss anything.\\n      var group = queryRoot.querySelectorAll(\\n        'input[name=' + JSON.stringify('' + name) + '][type=\\\"radio\\\"]');\\n\\n      for (var i = 0, groupLen = group.length; i < groupLen; i++) {\\n        var otherNode = group[i];\\n        if (otherNode === rootNode ||\\n            otherNode.form !== rootNode.form) {\\n          continue;\\n        }\\n        var otherID = ReactMount.getID(otherNode);\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          otherID,\\n          'ReactDOMInput: Mixing React and non-React radio inputs with the ' +\\n          'same `name` is not supported.'\\n        ) : invariant(otherID));\\n        var otherInstance = instancesByReactID[otherID];\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          otherInstance,\\n          'ReactDOMInput: Unknown radio button ID %s.',\\n          otherID\\n        ) : invariant(otherInstance));\\n        // If this is a controlled radio button group, forcing the input that\\n        // was previously checked to update will cause it to be come re-checked\\n        // as appropriate.\\n        ReactUpdates.asap(forceUpdateIfMounted, otherInstance);\\n      }\\n    }\\n\\n    return returnValue;\\n  }\\n\\n});\\n\\nmodule.exports = ReactDOMInput;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMInput.js\\n ** module id = 118\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMInput.js?\");\n\n/***/ },\n/* 119 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/LinkedValueUtils.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule LinkedValueUtils\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactPropTypes = __webpack_require__(/*! ./ReactPropTypes */ 120);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nvar hasReadOnlyValue = {\\n  'button': true,\\n  'checkbox': true,\\n  'image': true,\\n  'hidden': true,\\n  'radio': true,\\n  'reset': true,\\n  'submit': true\\n};\\n\\nfunction _assertSingleLink(input) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    input.props.checkedLink == null || input.props.valueLink == null,\\n    'Cannot provide a checkedLink and a valueLink. If you want to use ' +\\n    'checkedLink, you probably don\\\\'t want to use valueLink and vice versa.'\\n  ) : invariant(input.props.checkedLink == null || input.props.valueLink == null));\\n}\\nfunction _assertValueLink(input) {\\n  _assertSingleLink(input);\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    input.props.value == null && input.props.onChange == null,\\n    'Cannot provide a valueLink and a value or onChange event. If you want ' +\\n    'to use value or onChange, you probably don\\\\'t want to use valueLink.'\\n  ) : invariant(input.props.value == null && input.props.onChange == null));\\n}\\n\\nfunction _assertCheckedLink(input) {\\n  _assertSingleLink(input);\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    input.props.checked == null && input.props.onChange == null,\\n    'Cannot provide a checkedLink and a checked property or onChange event. ' +\\n    'If you want to use checked or onChange, you probably don\\\\'t want to ' +\\n    'use checkedLink'\\n  ) : invariant(input.props.checked == null && input.props.onChange == null));\\n}\\n\\n/**\\n * @param {SyntheticEvent} e change event to handle\\n */\\nfunction _handleLinkedValueChange(e) {\\n  /*jshint validthis:true */\\n  this.props.valueLink.requestChange(e.target.value);\\n}\\n\\n/**\\n  * @param {SyntheticEvent} e change event to handle\\n  */\\nfunction _handleLinkedCheckChange(e) {\\n  /*jshint validthis:true */\\n  this.props.checkedLink.requestChange(e.target.checked);\\n}\\n\\n/**\\n * Provide a linked `value` attribute for controlled forms. You should not use\\n * this outside of the ReactDOM controlled form components.\\n */\\nvar LinkedValueUtils = {\\n  Mixin: {\\n    propTypes: {\\n      value: function(props, propName, componentName) {\\n        if (!props[propName] ||\\n            hasReadOnlyValue[props.type] ||\\n            props.onChange ||\\n            props.readOnly ||\\n            props.disabled) {\\n          return;\\n        }\\n        return new Error(\\n          'You provided a `value` prop to a form field without an ' +\\n          '`onChange` handler. This will render a read-only field. If ' +\\n          'the field should be mutable use `defaultValue`. Otherwise, ' +\\n          'set either `onChange` or `readOnly`.'\\n        );\\n      },\\n      checked: function(props, propName, componentName) {\\n        if (!props[propName] ||\\n            props.onChange ||\\n            props.readOnly ||\\n            props.disabled) {\\n          return;\\n        }\\n        return new Error(\\n          'You provided a `checked` prop to a form field without an ' +\\n          '`onChange` handler. This will render a read-only field. If ' +\\n          'the field should be mutable use `defaultChecked`. Otherwise, ' +\\n          'set either `onChange` or `readOnly`.'\\n        );\\n      },\\n      onChange: ReactPropTypes.func\\n    }\\n  },\\n\\n  /**\\n   * @param {ReactComponent} input Form component\\n   * @return {*} current value of the input either from value prop or link.\\n   */\\n  getValue: function(input) {\\n    if (input.props.valueLink) {\\n      _assertValueLink(input);\\n      return input.props.valueLink.value;\\n    }\\n    return input.props.value;\\n  },\\n\\n  /**\\n   * @param {ReactComponent} input Form component\\n   * @return {*} current checked status of the input either from checked prop\\n   *             or link.\\n   */\\n  getChecked: function(input) {\\n    if (input.props.checkedLink) {\\n      _assertCheckedLink(input);\\n      return input.props.checkedLink.value;\\n    }\\n    return input.props.checked;\\n  },\\n\\n  /**\\n   * @param {ReactComponent} input Form component\\n   * @return {function} change callback either from onChange prop or link.\\n   */\\n  getOnChange: function(input) {\\n    if (input.props.valueLink) {\\n      _assertValueLink(input);\\n      return _handleLinkedValueChange;\\n    } else if (input.props.checkedLink) {\\n      _assertCheckedLink(input);\\n      return _handleLinkedCheckChange;\\n    }\\n    return input.props.onChange;\\n  }\\n};\\n\\nmodule.exports = LinkedValueUtils;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/LinkedValueUtils.js\\n ** module id = 119\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/LinkedValueUtils.js?\");\n\n/***/ },\n/* 120 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactPropTypes.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactPropTypes\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactPropTypeLocationNames = __webpack_require__(/*! ./ReactPropTypeLocationNames */ 39);\\n\\nvar deprecated = __webpack_require__(/*! ./deprecated */ 69);\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\n\\n/**\\n * Collection of methods that allow declaration and validation of props that are\\n * supplied to React components. Example usage:\\n *\\n *   var Props = require('ReactPropTypes');\\n *   var MyArticle = React.createClass({\\n *     propTypes: {\\n *       // An optional string prop named \\\"description\\\".\\n *       description: Props.string,\\n *\\n *       // A required enum prop named \\\"category\\\".\\n *       category: Props.oneOf(['News','Photos']).isRequired,\\n *\\n *       // A prop named \\\"dialog\\\" that requires an instance of Dialog.\\n *       dialog: Props.instanceOf(Dialog).isRequired\\n *     },\\n *     render: function() { ... }\\n *   });\\n *\\n * A more formal specification of how these methods are used:\\n *\\n *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\\n *   decl := ReactPropTypes.{type}(.isRequired)?\\n *\\n * Each and every declaration produces a function with the same signature. This\\n * allows the creation of custom validation functions. For example:\\n *\\n *  var MyLink = React.createClass({\\n *    propTypes: {\\n *      // An optional string or URI prop named \\\"href\\\".\\n *      href: function(props, propName, componentName) {\\n *        var propValue = props[propName];\\n *        if (propValue != null && typeof propValue !== 'string' &&\\n *            !(propValue instanceof URI)) {\\n *          return new Error(\\n *            'Expected a string or an URI for ' + propName + ' in ' +\\n *            componentName\\n *          );\\n *        }\\n *      }\\n *    },\\n *    render: function() {...}\\n *  });\\n *\\n * @internal\\n */\\n\\nvar ANONYMOUS = '<<anonymous>>';\\n\\nvar elementTypeChecker = createElementTypeChecker();\\nvar nodeTypeChecker = createNodeChecker();\\n\\nvar ReactPropTypes = {\\n  array: createPrimitiveTypeChecker('array'),\\n  bool: createPrimitiveTypeChecker('boolean'),\\n  func: createPrimitiveTypeChecker('function'),\\n  number: createPrimitiveTypeChecker('number'),\\n  object: createPrimitiveTypeChecker('object'),\\n  string: createPrimitiveTypeChecker('string'),\\n\\n  any: createAnyTypeChecker(),\\n  arrayOf: createArrayOfTypeChecker,\\n  element: elementTypeChecker,\\n  instanceOf: createInstanceTypeChecker,\\n  node: nodeTypeChecker,\\n  objectOf: createObjectOfTypeChecker,\\n  oneOf: createEnumTypeChecker,\\n  oneOfType: createUnionTypeChecker,\\n  shape: createShapeTypeChecker,\\n\\n  component: deprecated(\\n    'React.PropTypes',\\n    'component',\\n    'element',\\n    this,\\n    elementTypeChecker\\n  ),\\n  renderable: deprecated(\\n    'React.PropTypes',\\n    'renderable',\\n    'node',\\n    this,\\n    nodeTypeChecker\\n  )\\n};\\n\\nfunction createChainableTypeChecker(validate) {\\n  function checkType(isRequired, props, propName, componentName, location) {\\n    componentName = componentName || ANONYMOUS;\\n    if (props[propName] == null) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      if (isRequired) {\\n        return new Error(\\n          (\\\"Required \\\" + locationName + \\\" `\\\" + propName + \\\"` was not specified in \\\")+\\n          (\\\"`\\\" + componentName + \\\"`.\\\")\\n        );\\n      }\\n    } else {\\n      return validate(props, propName, componentName, location);\\n    }\\n  }\\n\\n  var chainedCheckType = checkType.bind(null, false);\\n  chainedCheckType.isRequired = checkType.bind(null, true);\\n\\n  return chainedCheckType;\\n}\\n\\nfunction createPrimitiveTypeChecker(expectedType) {\\n  function validate(props, propName, componentName, location) {\\n    var propValue = props[propName];\\n    var propType = getPropType(propValue);\\n    if (propType !== expectedType) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      // `propValue` being instance of, say, date/regexp, pass the 'object'\\n      // check, but we can offer a more precise error message here rather than\\n      // 'of type `object`'.\\n      var preciseType = getPreciseType(propValue);\\n\\n      return new Error(\\n        (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` of type `\\\" + preciseType + \\\"` \\\") +\\n        (\\\"supplied to `\\\" + componentName + \\\"`, expected `\\\" + expectedType + \\\"`.\\\")\\n      );\\n    }\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createAnyTypeChecker() {\\n  return createChainableTypeChecker(emptyFunction.thatReturns());\\n}\\n\\nfunction createArrayOfTypeChecker(typeChecker) {\\n  function validate(props, propName, componentName, location) {\\n    var propValue = props[propName];\\n    if (!Array.isArray(propValue)) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      var propType = getPropType(propValue);\\n      return new Error(\\n        (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` of type \\\") +\\n        (\\\"`\\\" + propType + \\\"` supplied to `\\\" + componentName + \\\"`, expected an array.\\\")\\n      );\\n    }\\n    for (var i = 0; i < propValue.length; i++) {\\n      var error = typeChecker(propValue, i, componentName, location);\\n      if (error instanceof Error) {\\n        return error;\\n      }\\n    }\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createElementTypeChecker() {\\n  function validate(props, propName, componentName, location) {\\n    if (!ReactElement.isValidElement(props[propName])) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      return new Error(\\n        (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` supplied to \\\") +\\n        (\\\"`\\\" + componentName + \\\"`, expected a ReactElement.\\\")\\n      );\\n    }\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createInstanceTypeChecker(expectedClass) {\\n  function validate(props, propName, componentName, location) {\\n    if (!(props[propName] instanceof expectedClass)) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      var expectedClassName = expectedClass.name || ANONYMOUS;\\n      return new Error(\\n        (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` supplied to \\\") +\\n        (\\\"`\\\" + componentName + \\\"`, expected instance of `\\\" + expectedClassName + \\\"`.\\\")\\n      );\\n    }\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createEnumTypeChecker(expectedValues) {\\n  function validate(props, propName, componentName, location) {\\n    var propValue = props[propName];\\n    for (var i = 0; i < expectedValues.length; i++) {\\n      if (propValue === expectedValues[i]) {\\n        return;\\n      }\\n    }\\n\\n    var locationName = ReactPropTypeLocationNames[location];\\n    var valuesString = JSON.stringify(expectedValues);\\n    return new Error(\\n      (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` of value `\\\" + propValue + \\\"` \\\") +\\n      (\\\"supplied to `\\\" + componentName + \\\"`, expected one of \\\" + valuesString + \\\".\\\")\\n    );\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createObjectOfTypeChecker(typeChecker) {\\n  function validate(props, propName, componentName, location) {\\n    var propValue = props[propName];\\n    var propType = getPropType(propValue);\\n    if (propType !== 'object') {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      return new Error(\\n        (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` of type \\\") +\\n        (\\\"`\\\" + propType + \\\"` supplied to `\\\" + componentName + \\\"`, expected an object.\\\")\\n      );\\n    }\\n    for (var key in propValue) {\\n      if (propValue.hasOwnProperty(key)) {\\n        var error = typeChecker(propValue, key, componentName, location);\\n        if (error instanceof Error) {\\n          return error;\\n        }\\n      }\\n    }\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createUnionTypeChecker(arrayOfTypeCheckers) {\\n  function validate(props, propName, componentName, location) {\\n    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\\n      var checker = arrayOfTypeCheckers[i];\\n      if (checker(props, propName, componentName, location) == null) {\\n        return;\\n      }\\n    }\\n\\n    var locationName = ReactPropTypeLocationNames[location];\\n    return new Error(\\n      (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` supplied to \\\") +\\n      (\\\"`\\\" + componentName + \\\"`.\\\")\\n    );\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createNodeChecker() {\\n  function validate(props, propName, componentName, location) {\\n    if (!isNode(props[propName])) {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      return new Error(\\n        (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` supplied to \\\") +\\n        (\\\"`\\\" + componentName + \\\"`, expected a ReactNode.\\\")\\n      );\\n    }\\n  }\\n  return createChainableTypeChecker(validate);\\n}\\n\\nfunction createShapeTypeChecker(shapeTypes) {\\n  function validate(props, propName, componentName, location) {\\n    var propValue = props[propName];\\n    var propType = getPropType(propValue);\\n    if (propType !== 'object') {\\n      var locationName = ReactPropTypeLocationNames[location];\\n      return new Error(\\n        (\\\"Invalid \\\" + locationName + \\\" `\\\" + propName + \\\"` of type `\\\" + propType + \\\"` \\\") +\\n        (\\\"supplied to `\\\" + componentName + \\\"`, expected `object`.\\\")\\n      );\\n    }\\n    for (var key in shapeTypes) {\\n      var checker = shapeTypes[key];\\n      if (!checker) {\\n        continue;\\n      }\\n      var error = checker(propValue, key, componentName, location);\\n      if (error) {\\n        return error;\\n      }\\n    }\\n  }\\n  return createChainableTypeChecker(validate, 'expected `object`');\\n}\\n\\nfunction isNode(propValue) {\\n  switch(typeof propValue) {\\n    case 'number':\\n    case 'string':\\n      return true;\\n    case 'boolean':\\n      return !propValue;\\n    case 'object':\\n      if (Array.isArray(propValue)) {\\n        return propValue.every(isNode);\\n      }\\n      if (ReactElement.isValidElement(propValue)) {\\n        return true;\\n      }\\n      for (var k in propValue) {\\n        if (!isNode(propValue[k])) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    default:\\n      return false;\\n  }\\n}\\n\\n// Equivalent of `typeof` but with special handling for array and regexp.\\nfunction getPropType(propValue) {\\n  var propType = typeof propValue;\\n  if (Array.isArray(propValue)) {\\n    return 'array';\\n  }\\n  if (propValue instanceof RegExp) {\\n    // Old webkits (at least until Android 4.0) return 'function' rather than\\n    // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\\n    // passes PropTypes.object.\\n    return 'object';\\n  }\\n  return propType;\\n}\\n\\n// This handles more types than `getPropType`. Only used for error messages.\\n// See `createPrimitiveTypeChecker`.\\nfunction getPreciseType(propValue) {\\n  var propType = getPropType(propValue);\\n  if (propType === 'object') {\\n    if (propValue instanceof Date) {\\n      return 'date';\\n    } else if (propValue instanceof RegExp) {\\n      return 'regexp';\\n    }\\n  }\\n  return propType;\\n}\\n\\nmodule.exports = ReactPropTypes;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactPropTypes.js\\n ** module id = 120\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactPropTypes.js?\");\n\n/***/ },\n/* 121 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactDOMOption.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMOption\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactDOM = __webpack_require__(/*! ./ReactDOM */ 45);\\n\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\n// Store a reference to the <option> `ReactDOMComponent`. TODO: use string\\nvar option = ReactElement.createFactory(ReactDOM.option.type);\\n\\n/**\\n * Implements an <option> native component that warns when `selected` is set.\\n */\\nvar ReactDOMOption = ReactCompositeComponent.createClass({\\n  displayName: 'ReactDOMOption',\\n\\n  mixins: [ReactBrowserComponentMixin],\\n\\n  componentWillMount: function() {\\n    // TODO (yungsters): Remove support for `selected` in <option>.\\n    if (\\\"production\\\" !== process.env.NODE_ENV) {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n        this.props.selected == null,\\n        'Use the `defaultValue` or `value` props on <select> instead of ' +\\n        'setting `selected` on <option>.'\\n      ) : null);\\n    }\\n  },\\n\\n  render: function() {\\n    return option(this.props, this.props.children);\\n  }\\n\\n});\\n\\nmodule.exports = ReactDOMOption;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMOption.js\\n ** module id = 121\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMOption.js?\");\n\n/***/ },\n/* 122 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactDOMSelect.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMSelect\\n */\\n\\n\\\"use strict\\\";\\n\\nvar AutoFocusMixin = __webpack_require__(/*! ./AutoFocusMixin */ 116);\\nvar LinkedValueUtils = __webpack_require__(/*! ./LinkedValueUtils */ 119);\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactDOM = __webpack_require__(/*! ./ReactDOM */ 45);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\n\\n// Store a reference to the <select> `ReactDOMComponent`. TODO: use string\\nvar select = ReactElement.createFactory(ReactDOM.select.type);\\n\\nfunction updateWithPendingValueIfMounted() {\\n  /*jshint validthis:true */\\n  if (this.isMounted()) {\\n    this.setState({value: this._pendingValue});\\n    this._pendingValue = 0;\\n  }\\n}\\n\\n/**\\n * Validation function for `value` and `defaultValue`.\\n * @private\\n */\\nfunction selectValueType(props, propName, componentName) {\\n  if (props[propName] == null) {\\n    return;\\n  }\\n  if (props.multiple) {\\n    if (!Array.isArray(props[propName])) {\\n      return new Error(\\n        (\\\"The `\\\" + propName + \\\"` prop supplied to <select> must be an array if \\\") +\\n        (\\\"`multiple` is true.\\\")\\n      );\\n    }\\n  } else {\\n    if (Array.isArray(props[propName])) {\\n      return new Error(\\n        (\\\"The `\\\" + propName + \\\"` prop supplied to <select> must be a scalar \\\") +\\n        (\\\"value if `multiple` is false.\\\")\\n      );\\n    }\\n  }\\n}\\n\\n/**\\n * If `value` is supplied, updates <option> elements on mount and update.\\n * @param {ReactComponent} component Instance of ReactDOMSelect\\n * @param {?*} propValue For uncontrolled components, null/undefined. For\\n * controlled components, a string (or with `multiple`, a list of strings).\\n * @private\\n */\\nfunction updateOptions(component, propValue) {\\n  var multiple = component.props.multiple;\\n  var value = propValue != null ? propValue : component.state.value;\\n  var options = component.getDOMNode().options;\\n  var selectedValue, i, l;\\n  if (multiple) {\\n    selectedValue = {};\\n    for (i = 0, l = value.length; i < l; ++i) {\\n      selectedValue['' + value[i]] = true;\\n    }\\n  } else {\\n    selectedValue = '' + value;\\n  }\\n  for (i = 0, l = options.length; i < l; i++) {\\n    var selected = multiple ?\\n      selectedValue.hasOwnProperty(options[i].value) :\\n      options[i].value === selectedValue;\\n\\n    if (selected !== options[i].selected) {\\n      options[i].selected = selected;\\n    }\\n  }\\n}\\n\\n/**\\n * Implements a <select> native component that allows optionally setting the\\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\\n * string. If `multiple` is true, the prop must be an array of strings.\\n *\\n * If `value` is not supplied (or null/undefined), user actions that change the\\n * selected option will trigger updates to the rendered options.\\n *\\n * If it is supplied (and not null/undefined), the rendered options will not\\n * update in response to user actions. Instead, the `value` prop must change in\\n * order for the rendered options to update.\\n *\\n * If `defaultValue` is provided, any options with the supplied values will be\\n * selected.\\n */\\nvar ReactDOMSelect = ReactCompositeComponent.createClass({\\n  displayName: 'ReactDOMSelect',\\n\\n  mixins: [AutoFocusMixin, LinkedValueUtils.Mixin, ReactBrowserComponentMixin],\\n\\n  propTypes: {\\n    defaultValue: selectValueType,\\n    value: selectValueType\\n  },\\n\\n  getInitialState: function() {\\n    return {value: this.props.defaultValue || (this.props.multiple ? [] : '')};\\n  },\\n\\n  componentWillMount: function() {\\n    this._pendingValue = null;\\n  },\\n\\n  componentWillReceiveProps: function(nextProps) {\\n    if (!this.props.multiple && nextProps.multiple) {\\n      this.setState({value: [this.state.value]});\\n    } else if (this.props.multiple && !nextProps.multiple) {\\n      this.setState({value: this.state.value[0]});\\n    }\\n  },\\n\\n  render: function() {\\n    // Clone `this.props` so we don't mutate the input.\\n    var props = assign({}, this.props);\\n\\n    props.onChange = this._handleChange;\\n    props.value = null;\\n\\n    return select(props, this.props.children);\\n  },\\n\\n  componentDidMount: function() {\\n    updateOptions(this, LinkedValueUtils.getValue(this));\\n  },\\n\\n  componentDidUpdate: function(prevProps) {\\n    var value = LinkedValueUtils.getValue(this);\\n    var prevMultiple = !!prevProps.multiple;\\n    var multiple = !!this.props.multiple;\\n    if (value != null || prevMultiple !== multiple) {\\n      updateOptions(this, value);\\n    }\\n  },\\n\\n  _handleChange: function(event) {\\n    var returnValue;\\n    var onChange = LinkedValueUtils.getOnChange(this);\\n    if (onChange) {\\n      returnValue = onChange.call(this, event);\\n    }\\n\\n    var selectedValue;\\n    if (this.props.multiple) {\\n      selectedValue = [];\\n      var options = event.target.options;\\n      for (var i = 0, l = options.length; i < l; i++) {\\n        if (options[i].selected) {\\n          selectedValue.push(options[i].value);\\n        }\\n      }\\n    } else {\\n      selectedValue = event.target.value;\\n    }\\n\\n    this._pendingValue = selectedValue;\\n    ReactUpdates.asap(updateWithPendingValueIfMounted, this);\\n    return returnValue;\\n  }\\n\\n});\\n\\nmodule.exports = ReactDOMSelect;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMSelect.js\\n ** module id = 122\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMSelect.js?\");\n\n/***/ },\n/* 123 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/ReactDOMTextarea.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDOMTextarea\\n */\\n\\n\\\"use strict\\\";\\n\\nvar AutoFocusMixin = __webpack_require__(/*! ./AutoFocusMixin */ 116);\\nvar DOMPropertyOperations = __webpack_require__(/*! ./DOMPropertyOperations */ 7);\\nvar LinkedValueUtils = __webpack_require__(/*! ./LinkedValueUtils */ 119);\\nvar ReactBrowserComponentMixin = __webpack_require__(/*! ./ReactBrowserComponentMixin */ 55);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactDOM = __webpack_require__(/*! ./ReactDOM */ 45);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\n// Store a reference to the <textarea> `ReactDOMComponent`. TODO: use string\\nvar textarea = ReactElement.createFactory(ReactDOM.textarea.type);\\n\\nfunction forceUpdateIfMounted() {\\n  /*jshint validthis:true */\\n  if (this.isMounted()) {\\n    this.forceUpdate();\\n  }\\n}\\n\\n/**\\n * Implements a <textarea> native component that allows setting `value`, and\\n * `defaultValue`. This differs from the traditional DOM API because value is\\n * usually set as PCDATA children.\\n *\\n * If `value` is not supplied (or null/undefined), user actions that affect the\\n * value will trigger updates to the element.\\n *\\n * If `value` is supplied (and not null/undefined), the rendered element will\\n * not trigger updates to the element. Instead, the `value` prop must change in\\n * order for the rendered element to be updated.\\n *\\n * The rendered element will be initialized with an empty value, the prop\\n * `defaultValue` if specified, or the children content (deprecated).\\n */\\nvar ReactDOMTextarea = ReactCompositeComponent.createClass({\\n  displayName: 'ReactDOMTextarea',\\n\\n  mixins: [AutoFocusMixin, LinkedValueUtils.Mixin, ReactBrowserComponentMixin],\\n\\n  getInitialState: function() {\\n    var defaultValue = this.props.defaultValue;\\n    // TODO (yungsters): Remove support for children content in <textarea>.\\n    var children = this.props.children;\\n    if (children != null) {\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n          false,\\n          'Use the `defaultValue` or `value` props instead of setting ' +\\n          'children on <textarea>.'\\n        ) : null);\\n      }\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        defaultValue == null,\\n        'If you supply `defaultValue` on a <textarea>, do not pass children.'\\n      ) : invariant(defaultValue == null));\\n      if (Array.isArray(children)) {\\n        (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n          children.length <= 1,\\n          '<textarea> can only have at most one child.'\\n        ) : invariant(children.length <= 1));\\n        children = children[0];\\n      }\\n\\n      defaultValue = '' + children;\\n    }\\n    if (defaultValue == null) {\\n      defaultValue = '';\\n    }\\n    var value = LinkedValueUtils.getValue(this);\\n    return {\\n      // We save the initial value so that `ReactDOMComponent` doesn't update\\n      // `textContent` (unnecessary since we update value).\\n      // The initial value can be a boolean or object so that's why it's\\n      // forced to be a string.\\n      initialValue: '' + (value != null ? value : defaultValue)\\n    };\\n  },\\n\\n  render: function() {\\n    // Clone `this.props` so we don't mutate the input.\\n    var props = assign({}, this.props);\\n\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      props.dangerouslySetInnerHTML == null,\\n      '`dangerouslySetInnerHTML` does not make sense on <textarea>.'\\n    ) : invariant(props.dangerouslySetInnerHTML == null));\\n\\n    props.defaultValue = null;\\n    props.value = null;\\n    props.onChange = this._handleChange;\\n\\n    // Always set children to the same thing. In IE9, the selection range will\\n    // get reset if `textContent` is mutated.\\n    return textarea(props, this.state.initialValue);\\n  },\\n\\n  componentDidUpdate: function(prevProps, prevState, prevContext) {\\n    var value = LinkedValueUtils.getValue(this);\\n    if (value != null) {\\n      var rootNode = this.getDOMNode();\\n      // Cast `value` to a string to ensure the value is set correctly. While\\n      // browsers typically do this as necessary, jsdom doesn't.\\n      DOMPropertyOperations.setValueForProperty(rootNode, 'value', '' + value);\\n    }\\n  },\\n\\n  _handleChange: function(event) {\\n    var returnValue;\\n    var onChange = LinkedValueUtils.getOnChange(this);\\n    if (onChange) {\\n      returnValue = onChange.call(this, event);\\n    }\\n    ReactUpdates.asap(forceUpdateIfMounted, this);\\n    return returnValue;\\n  }\\n\\n});\\n\\nmodule.exports = ReactDOMTextarea;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDOMTextarea.js\\n ** module id = 123\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDOMTextarea.js?\");\n\n/***/ },\n/* 124 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/ReactEventListener.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactEventListener\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventListener = __webpack_require__(/*! ./EventListener */ 125);\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 17);\\nvar ReactInstanceHandles = __webpack_require__(/*! ./ReactInstanceHandles */ 4);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar getEventTarget = __webpack_require__(/*! ./getEventTarget */ 82);\\nvar getUnboundedScrollPosition = __webpack_require__(/*! ./getUnboundedScrollPosition */ 67);\\n\\n/**\\n * Finds the parent React component of `node`.\\n *\\n * @param {*} node\\n * @return {?DOMEventTarget} Parent container, or `null` if the specified node\\n *                           is not nested.\\n */\\nfunction findParent(node) {\\n  // TODO: It may be a good idea to cache this to prevent unnecessary DOM\\n  // traversal, but caching is difficult to do correctly without using a\\n  // mutation observer to listen for all DOM changes.\\n  var nodeID = ReactMount.getID(node);\\n  var rootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);\\n  var container = ReactMount.findReactContainerForID(rootID);\\n  var parent = ReactMount.getFirstReactDOM(container);\\n  return parent;\\n}\\n\\n// Used to store ancestor hierarchy in top level callback\\nfunction TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {\\n  this.topLevelType = topLevelType;\\n  this.nativeEvent = nativeEvent;\\n  this.ancestors = [];\\n}\\nassign(TopLevelCallbackBookKeeping.prototype, {\\n  destructor: function() {\\n    this.topLevelType = null;\\n    this.nativeEvent = null;\\n    this.ancestors.length = 0;\\n  }\\n});\\nPooledClass.addPoolingTo(\\n  TopLevelCallbackBookKeeping,\\n  PooledClass.twoArgumentPooler\\n);\\n\\nfunction handleTopLevelImpl(bookKeeping) {\\n  var topLevelTarget = ReactMount.getFirstReactDOM(\\n    getEventTarget(bookKeeping.nativeEvent)\\n  ) || window;\\n\\n  // Loop through the hierarchy, in case there's any nested components.\\n  // It's important that we build the array of ancestors before calling any\\n  // event handlers, because event handlers can modify the DOM, leading to\\n  // inconsistencies with ReactMount's node cache. See #1105.\\n  var ancestor = topLevelTarget;\\n  while (ancestor) {\\n    bookKeeping.ancestors.push(ancestor);\\n    ancestor = findParent(ancestor);\\n  }\\n\\n  for (var i = 0, l = bookKeeping.ancestors.length; i < l; i++) {\\n    topLevelTarget = bookKeeping.ancestors[i];\\n    var topLevelTargetID = ReactMount.getID(topLevelTarget) || '';\\n    ReactEventListener._handleTopLevel(\\n      bookKeeping.topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      bookKeeping.nativeEvent\\n    );\\n  }\\n}\\n\\nfunction scrollValueMonitor(cb) {\\n  var scrollPosition = getUnboundedScrollPosition(window);\\n  cb(scrollPosition);\\n}\\n\\nvar ReactEventListener = {\\n  _enabled: true,\\n  _handleTopLevel: null,\\n\\n  WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,\\n\\n  setHandleTopLevel: function(handleTopLevel) {\\n    ReactEventListener._handleTopLevel = handleTopLevel;\\n  },\\n\\n  setEnabled: function(enabled) {\\n    ReactEventListener._enabled = !!enabled;\\n  },\\n\\n  isEnabled: function() {\\n    return ReactEventListener._enabled;\\n  },\\n\\n\\n  /**\\n   * Traps top-level events by using event bubbling.\\n   *\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {string} handlerBaseName Event name (e.g. \\\"click\\\").\\n   * @param {object} handle Element on which to attach listener.\\n   * @return {object} An object with a remove function which will forcefully\\n   *                  remove the listener.\\n   * @internal\\n   */\\n  trapBubbledEvent: function(topLevelType, handlerBaseName, handle) {\\n    var element = handle;\\n    if (!element) {\\n      return;\\n    }\\n    return EventListener.listen(\\n      element,\\n      handlerBaseName,\\n      ReactEventListener.dispatchEvent.bind(null, topLevelType)\\n    );\\n  },\\n\\n  /**\\n   * Traps a top-level event by using event capturing.\\n   *\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {string} handlerBaseName Event name (e.g. \\\"click\\\").\\n   * @param {object} handle Element on which to attach listener.\\n   * @return {object} An object with a remove function which will forcefully\\n   *                  remove the listener.\\n   * @internal\\n   */\\n  trapCapturedEvent: function(topLevelType, handlerBaseName, handle) {\\n    var element = handle;\\n    if (!element) {\\n      return;\\n    }\\n    return EventListener.capture(\\n      element,\\n      handlerBaseName,\\n      ReactEventListener.dispatchEvent.bind(null, topLevelType)\\n    );\\n  },\\n\\n  monitorScrollValue: function(refresh) {\\n    var callback = scrollValueMonitor.bind(null, refresh);\\n    EventListener.listen(window, 'scroll', callback);\\n    EventListener.listen(window, 'resize', callback);\\n  },\\n\\n  dispatchEvent: function(topLevelType, nativeEvent) {\\n    if (!ReactEventListener._enabled) {\\n      return;\\n    }\\n\\n    var bookKeeping = TopLevelCallbackBookKeeping.getPooled(\\n      topLevelType,\\n      nativeEvent\\n    );\\n    try {\\n      // Event queue being processed in the same cycle allows\\n      // `preventDefault`.\\n      ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);\\n    } finally {\\n      TopLevelCallbackBookKeeping.release(bookKeeping);\\n    }\\n  }\\n};\\n\\nmodule.exports = ReactEventListener;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactEventListener.js\\n ** module id = 124\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactEventListener.js?\");\n\n/***/ },\n/* 125 */\n/*!**************************************!*\\\n  !*** ./~/react/lib/EventListener.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014 Facebook, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n *\\n * @providesModule EventListener\\n * @typechecks\\n */\\n\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\n\\n/**\\n * Upstream version of event listener. Does not take into account specific\\n * nature of platform.\\n */\\nvar EventListener = {\\n  /**\\n   * Listen to DOM events during the bubble phase.\\n   *\\n   * @param {DOMEventTarget} target DOM element to register listener on.\\n   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\\n   * @param {function} callback Callback function.\\n   * @return {object} Object with a `remove` method.\\n   */\\n  listen: function(target, eventType, callback) {\\n    if (target.addEventListener) {\\n      target.addEventListener(eventType, callback, false);\\n      return {\\n        remove: function() {\\n          target.removeEventListener(eventType, callback, false);\\n        }\\n      };\\n    } else if (target.attachEvent) {\\n      target.attachEvent('on' + eventType, callback);\\n      return {\\n        remove: function() {\\n          target.detachEvent('on' + eventType, callback);\\n        }\\n      };\\n    }\\n  },\\n\\n  /**\\n   * Listen to DOM events during the capture phase.\\n   *\\n   * @param {DOMEventTarget} target DOM element to register listener on.\\n   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\\n   * @param {function} callback Callback function.\\n   * @return {object} Object with a `remove` method.\\n   */\\n  capture: function(target, eventType, callback) {\\n    if (!target.addEventListener) {\\n      if (\\\"production\\\" !== process.env.NODE_ENV) {\\n        console.error(\\n          'Attempted to listen to events during the capture phase on a ' +\\n          'browser that does not support the capture phase. Your application ' +\\n          'will not receive some events.'\\n        );\\n      }\\n      return {\\n        remove: emptyFunction\\n      };\\n    } else {\\n      target.addEventListener(eventType, callback, true);\\n      return {\\n        remove: function() {\\n          target.removeEventListener(eventType, callback, true);\\n        }\\n      };\\n    }\\n  },\\n\\n  registerDefault: function() {}\\n};\\n\\nmodule.exports = EventListener;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/EventListener.js\\n ** module id = 125\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/EventListener.js?\");\n\n/***/ },\n/* 126 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/ReactInjection.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactInjection\\n */\\n\\n\\\"use strict\\\";\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 8);\\nvar EventPluginHub = __webpack_require__(/*! ./EventPluginHub */ 61);\\nvar ReactComponent = __webpack_require__(/*! ./ReactComponent */ 23);\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactEmptyComponent = __webpack_require__(/*! ./ReactEmptyComponent */ 34);\\nvar ReactBrowserEventEmitter = __webpack_require__(/*! ./ReactBrowserEventEmitter */ 60);\\nvar ReactNativeComponent = __webpack_require__(/*! ./ReactNativeComponent */ 41);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\nvar ReactRootIndex = __webpack_require__(/*! ./ReactRootIndex */ 5);\\nvar ReactUpdates = __webpack_require__(/*! ./ReactUpdates */ 26);\\n\\nvar ReactInjection = {\\n  Component: ReactComponent.injection,\\n  CompositeComponent: ReactCompositeComponent.injection,\\n  DOMProperty: DOMProperty.injection,\\n  EmptyComponent: ReactEmptyComponent.injection,\\n  EventPluginHub: EventPluginHub.injection,\\n  EventEmitter: ReactBrowserEventEmitter.injection,\\n  NativeComponent: ReactNativeComponent.injection,\\n  Perf: ReactPerf.injection,\\n  RootIndex: ReactRootIndex.injection,\\n  Updates: ReactUpdates.injection\\n};\\n\\nmodule.exports = ReactInjection;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactInjection.js\\n ** module id = 126\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactInjection.js?\");\n\n/***/ },\n/* 127 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/SelectEventPlugin.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SelectEventPlugin\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar EventPropagators = __webpack_require__(/*! ./EventPropagators */ 79);\\nvar ReactInputSelection = __webpack_require__(/*! ./ReactInputSelection */ 87);\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 81);\\n\\nvar getActiveElement = __webpack_require__(/*! ./getActiveElement */ 92);\\nvar isTextInputElement = __webpack_require__(/*! ./isTextInputElement */ 84);\\nvar keyOf = __webpack_require__(/*! ./keyOf */ 42);\\nvar shallowEqual = __webpack_require__(/*! ./shallowEqual */ 128);\\n\\nvar topLevelTypes = EventConstants.topLevelTypes;\\n\\nvar eventTypes = {\\n  select: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onSelect: null}),\\n      captured: keyOf({onSelectCapture: null})\\n    },\\n    dependencies: [\\n      topLevelTypes.topBlur,\\n      topLevelTypes.topContextMenu,\\n      topLevelTypes.topFocus,\\n      topLevelTypes.topKeyDown,\\n      topLevelTypes.topMouseDown,\\n      topLevelTypes.topMouseUp,\\n      topLevelTypes.topSelectionChange\\n    ]\\n  }\\n};\\n\\nvar activeElement = null;\\nvar activeElementID = null;\\nvar lastSelection = null;\\nvar mouseDown = false;\\n\\n/**\\n * Get an object which is a unique representation of the current selection.\\n *\\n * The return value will not be consistent across nodes or browsers, but\\n * two identical selections on the same node will return identical objects.\\n *\\n * @param {DOMElement} node\\n * @param {object}\\n */\\nfunction getSelection(node) {\\n  if ('selectionStart' in node &&\\n      ReactInputSelection.hasSelectionCapabilities(node)) {\\n    return {\\n      start: node.selectionStart,\\n      end: node.selectionEnd\\n    };\\n  } else if (window.getSelection) {\\n    var selection = window.getSelection();\\n    return {\\n      anchorNode: selection.anchorNode,\\n      anchorOffset: selection.anchorOffset,\\n      focusNode: selection.focusNode,\\n      focusOffset: selection.focusOffset\\n    };\\n  } else if (document.selection) {\\n    var range = document.selection.createRange();\\n    return {\\n      parentElement: range.parentElement(),\\n      text: range.text,\\n      top: range.boundingTop,\\n      left: range.boundingLeft\\n    };\\n  }\\n}\\n\\n/**\\n * Poll selection to see whether it's changed.\\n *\\n * @param {object} nativeEvent\\n * @return {?SyntheticEvent}\\n */\\nfunction constructSelectEvent(nativeEvent) {\\n  // Ensure we have the right element, and that the user is not dragging a\\n  // selection (this matches native `select` event behavior). In HTML5, select\\n  // fires only on input and textarea thus if there's no focused element we\\n  // won't dispatch.\\n  if (mouseDown ||\\n      activeElement == null ||\\n      activeElement != getActiveElement()) {\\n    return;\\n  }\\n\\n  // Only fire when selection has actually changed.\\n  var currentSelection = getSelection(activeElement);\\n  if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\\n    lastSelection = currentSelection;\\n\\n    var syntheticEvent = SyntheticEvent.getPooled(\\n      eventTypes.select,\\n      activeElementID,\\n      nativeEvent\\n    );\\n\\n    syntheticEvent.type = 'select';\\n    syntheticEvent.target = activeElement;\\n\\n    EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);\\n\\n    return syntheticEvent;\\n  }\\n}\\n\\n/**\\n * This plugin creates an `onSelect` event that normalizes select events\\n * across form elements.\\n *\\n * Supported elements are:\\n * - input (see `isTextInputElement`)\\n * - textarea\\n * - contentEditable\\n *\\n * This differs from native browser implementations in the following ways:\\n * - Fires on contentEditable fields as well as inputs.\\n * - Fires for collapsed selection.\\n * - Fires after user input.\\n */\\nvar SelectEventPlugin = {\\n\\n  eventTypes: eventTypes,\\n\\n  /**\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native browser event.\\n   * @return {*} An accumulation of synthetic events.\\n   * @see {EventPluginHub.extractEvents}\\n   */\\n  extractEvents: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n\\n    switch (topLevelType) {\\n      // Track the input node that has focus.\\n      case topLevelTypes.topFocus:\\n        if (isTextInputElement(topLevelTarget) ||\\n            topLevelTarget.contentEditable === 'true') {\\n          activeElement = topLevelTarget;\\n          activeElementID = topLevelTargetID;\\n          lastSelection = null;\\n        }\\n        break;\\n      case topLevelTypes.topBlur:\\n        activeElement = null;\\n        activeElementID = null;\\n        lastSelection = null;\\n        break;\\n\\n      // Don't fire the event while the user is dragging. This matches the\\n      // semantics of the native select event.\\n      case topLevelTypes.topMouseDown:\\n        mouseDown = true;\\n        break;\\n      case topLevelTypes.topContextMenu:\\n      case topLevelTypes.topMouseUp:\\n        mouseDown = false;\\n        return constructSelectEvent(nativeEvent);\\n\\n      // Chrome and IE fire non-standard event when selection is changed (and\\n      // sometimes when it hasn't).\\n      // Firefox doesn't support selectionchange, so check selection status\\n      // after each key entry. The selection changes after keydown and before\\n      // keyup, but we check on keydown as well in the case of holding down a\\n      // key, when multiple keydown events are fired but only one keyup is.\\n      case topLevelTypes.topSelectionChange:\\n      case topLevelTypes.topKeyDown:\\n      case topLevelTypes.topKeyUp:\\n        return constructSelectEvent(nativeEvent);\\n    }\\n  }\\n};\\n\\nmodule.exports = SelectEventPlugin;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SelectEventPlugin.js\\n ** module id = 127\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SelectEventPlugin.js?\");\n\n/***/ },\n/* 128 */\n/*!*************************************!*\\\n  !*** ./~/react/lib/shallowEqual.js ***!\n  \\*************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule shallowEqual\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Performs equality by iterating through keys on an object and returning\\n * false when any key has values which are not strictly equal between\\n * objA and objB. Returns true when the values of all keys are strictly equal.\\n *\\n * @return {boolean}\\n */\\nfunction shallowEqual(objA, objB) {\\n  if (objA === objB) {\\n    return true;\\n  }\\n  var key;\\n  // Test for A's keys different from B.\\n  for (key in objA) {\\n    if (objA.hasOwnProperty(key) &&\\n        (!objB.hasOwnProperty(key) || objA[key] !== objB[key])) {\\n      return false;\\n    }\\n  }\\n  // Test for B's keys missing from A.\\n  for (key in objB) {\\n    if (objB.hasOwnProperty(key) && !objA.hasOwnProperty(key)) {\\n      return false;\\n    }\\n  }\\n  return true;\\n}\\n\\nmodule.exports = shallowEqual;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/shallowEqual.js\\n ** module id = 128\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/shallowEqual.js?\");\n\n/***/ },\n/* 129 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ServerReactRootIndex.js ***!\n  \\*********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ServerReactRootIndex\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * Size of the reactRoot ID space. We generate random numbers for React root\\n * IDs and if there's a collision the events and DOM update system will\\n * get confused. In the future we need a way to generate GUIDs but for\\n * now this will work on a smaller scale.\\n */\\nvar GLOBAL_MOUNT_POINT_MAX = Math.pow(2, 53);\\n\\nvar ServerReactRootIndex = {\\n  createReactRootIndex: function() {\\n    return Math.ceil(Math.random() * GLOBAL_MOUNT_POINT_MAX);\\n  }\\n};\\n\\nmodule.exports = ServerReactRootIndex;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ServerReactRootIndex.js\\n ** module id = 129\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ServerReactRootIndex.js?\");\n\n/***/ },\n/* 130 */\n/*!******************************************!*\\\n  !*** ./~/react/lib/SimpleEventPlugin.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SimpleEventPlugin\\n */\\n\\n\\\"use strict\\\";\\n\\nvar EventConstants = __webpack_require__(/*! ./EventConstants */ 14);\\nvar EventPluginUtils = __webpack_require__(/*! ./EventPluginUtils */ 13);\\nvar EventPropagators = __webpack_require__(/*! ./EventPropagators */ 79);\\nvar SyntheticClipboardEvent = __webpack_require__(/*! ./SyntheticClipboardEvent */ 132);\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 81);\\nvar SyntheticFocusEvent = __webpack_require__(/*! ./SyntheticFocusEvent */ 133);\\nvar SyntheticKeyboardEvent = __webpack_require__(/*! ./SyntheticKeyboardEvent */ 134);\\nvar SyntheticMouseEvent = __webpack_require__(/*! ./SyntheticMouseEvent */ 96);\\nvar SyntheticDragEvent = __webpack_require__(/*! ./SyntheticDragEvent */ 131);\\nvar SyntheticTouchEvent = __webpack_require__(/*! ./SyntheticTouchEvent */ 137);\\nvar SyntheticUIEvent = __webpack_require__(/*! ./SyntheticUIEvent */ 97);\\nvar SyntheticWheelEvent = __webpack_require__(/*! ./SyntheticWheelEvent */ 138);\\n\\nvar getEventCharCode = __webpack_require__(/*! ./getEventCharCode */ 135);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\nvar keyOf = __webpack_require__(/*! ./keyOf */ 42);\\nvar warning = __webpack_require__(/*! ./warning */ 11);\\n\\nvar topLevelTypes = EventConstants.topLevelTypes;\\n\\nvar eventTypes = {\\n  blur: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onBlur: true}),\\n      captured: keyOf({onBlurCapture: true})\\n    }\\n  },\\n  click: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onClick: true}),\\n      captured: keyOf({onClickCapture: true})\\n    }\\n  },\\n  contextMenu: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onContextMenu: true}),\\n      captured: keyOf({onContextMenuCapture: true})\\n    }\\n  },\\n  copy: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onCopy: true}),\\n      captured: keyOf({onCopyCapture: true})\\n    }\\n  },\\n  cut: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onCut: true}),\\n      captured: keyOf({onCutCapture: true})\\n    }\\n  },\\n  doubleClick: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDoubleClick: true}),\\n      captured: keyOf({onDoubleClickCapture: true})\\n    }\\n  },\\n  drag: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDrag: true}),\\n      captured: keyOf({onDragCapture: true})\\n    }\\n  },\\n  dragEnd: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDragEnd: true}),\\n      captured: keyOf({onDragEndCapture: true})\\n    }\\n  },\\n  dragEnter: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDragEnter: true}),\\n      captured: keyOf({onDragEnterCapture: true})\\n    }\\n  },\\n  dragExit: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDragExit: true}),\\n      captured: keyOf({onDragExitCapture: true})\\n    }\\n  },\\n  dragLeave: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDragLeave: true}),\\n      captured: keyOf({onDragLeaveCapture: true})\\n    }\\n  },\\n  dragOver: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDragOver: true}),\\n      captured: keyOf({onDragOverCapture: true})\\n    }\\n  },\\n  dragStart: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDragStart: true}),\\n      captured: keyOf({onDragStartCapture: true})\\n    }\\n  },\\n  drop: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onDrop: true}),\\n      captured: keyOf({onDropCapture: true})\\n    }\\n  },\\n  focus: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onFocus: true}),\\n      captured: keyOf({onFocusCapture: true})\\n    }\\n  },\\n  input: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onInput: true}),\\n      captured: keyOf({onInputCapture: true})\\n    }\\n  },\\n  keyDown: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onKeyDown: true}),\\n      captured: keyOf({onKeyDownCapture: true})\\n    }\\n  },\\n  keyPress: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onKeyPress: true}),\\n      captured: keyOf({onKeyPressCapture: true})\\n    }\\n  },\\n  keyUp: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onKeyUp: true}),\\n      captured: keyOf({onKeyUpCapture: true})\\n    }\\n  },\\n  load: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onLoad: true}),\\n      captured: keyOf({onLoadCapture: true})\\n    }\\n  },\\n  error: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onError: true}),\\n      captured: keyOf({onErrorCapture: true})\\n    }\\n  },\\n  // Note: We do not allow listening to mouseOver events. Instead, use the\\n  // onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`.\\n  mouseDown: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onMouseDown: true}),\\n      captured: keyOf({onMouseDownCapture: true})\\n    }\\n  },\\n  mouseMove: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onMouseMove: true}),\\n      captured: keyOf({onMouseMoveCapture: true})\\n    }\\n  },\\n  mouseOut: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onMouseOut: true}),\\n      captured: keyOf({onMouseOutCapture: true})\\n    }\\n  },\\n  mouseOver: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onMouseOver: true}),\\n      captured: keyOf({onMouseOverCapture: true})\\n    }\\n  },\\n  mouseUp: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onMouseUp: true}),\\n      captured: keyOf({onMouseUpCapture: true})\\n    }\\n  },\\n  paste: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onPaste: true}),\\n      captured: keyOf({onPasteCapture: true})\\n    }\\n  },\\n  reset: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onReset: true}),\\n      captured: keyOf({onResetCapture: true})\\n    }\\n  },\\n  scroll: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onScroll: true}),\\n      captured: keyOf({onScrollCapture: true})\\n    }\\n  },\\n  submit: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onSubmit: true}),\\n      captured: keyOf({onSubmitCapture: true})\\n    }\\n  },\\n  touchCancel: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onTouchCancel: true}),\\n      captured: keyOf({onTouchCancelCapture: true})\\n    }\\n  },\\n  touchEnd: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onTouchEnd: true}),\\n      captured: keyOf({onTouchEndCapture: true})\\n    }\\n  },\\n  touchMove: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onTouchMove: true}),\\n      captured: keyOf({onTouchMoveCapture: true})\\n    }\\n  },\\n  touchStart: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onTouchStart: true}),\\n      captured: keyOf({onTouchStartCapture: true})\\n    }\\n  },\\n  wheel: {\\n    phasedRegistrationNames: {\\n      bubbled: keyOf({onWheel: true}),\\n      captured: keyOf({onWheelCapture: true})\\n    }\\n  }\\n};\\n\\nvar topLevelEventsToDispatchConfig = {\\n  topBlur:        eventTypes.blur,\\n  topClick:       eventTypes.click,\\n  topContextMenu: eventTypes.contextMenu,\\n  topCopy:        eventTypes.copy,\\n  topCut:         eventTypes.cut,\\n  topDoubleClick: eventTypes.doubleClick,\\n  topDrag:        eventTypes.drag,\\n  topDragEnd:     eventTypes.dragEnd,\\n  topDragEnter:   eventTypes.dragEnter,\\n  topDragExit:    eventTypes.dragExit,\\n  topDragLeave:   eventTypes.dragLeave,\\n  topDragOver:    eventTypes.dragOver,\\n  topDragStart:   eventTypes.dragStart,\\n  topDrop:        eventTypes.drop,\\n  topError:       eventTypes.error,\\n  topFocus:       eventTypes.focus,\\n  topInput:       eventTypes.input,\\n  topKeyDown:     eventTypes.keyDown,\\n  topKeyPress:    eventTypes.keyPress,\\n  topKeyUp:       eventTypes.keyUp,\\n  topLoad:        eventTypes.load,\\n  topMouseDown:   eventTypes.mouseDown,\\n  topMouseMove:   eventTypes.mouseMove,\\n  topMouseOut:    eventTypes.mouseOut,\\n  topMouseOver:   eventTypes.mouseOver,\\n  topMouseUp:     eventTypes.mouseUp,\\n  topPaste:       eventTypes.paste,\\n  topReset:       eventTypes.reset,\\n  topScroll:      eventTypes.scroll,\\n  topSubmit:      eventTypes.submit,\\n  topTouchCancel: eventTypes.touchCancel,\\n  topTouchEnd:    eventTypes.touchEnd,\\n  topTouchMove:   eventTypes.touchMove,\\n  topTouchStart:  eventTypes.touchStart,\\n  topWheel:       eventTypes.wheel\\n};\\n\\nfor (var topLevelType in topLevelEventsToDispatchConfig) {\\n  topLevelEventsToDispatchConfig[topLevelType].dependencies = [topLevelType];\\n}\\n\\nvar SimpleEventPlugin = {\\n\\n  eventTypes: eventTypes,\\n\\n  /**\\n   * Same as the default implementation, except cancels the event when return\\n   * value is false. This behavior will be disabled in a future release.\\n   *\\n   * @param {object} Event to be dispatched.\\n   * @param {function} Application-level callback.\\n   * @param {string} domID DOM ID to pass to the callback.\\n   */\\n  executeDispatch: function(event, listener, domID) {\\n    var returnValue = EventPluginUtils.executeDispatch(event, listener, domID);\\n\\n    (\\\"production\\\" !== process.env.NODE_ENV ? warning(\\n      typeof returnValue !== 'boolean',\\n      'Returning `false` from an event handler is deprecated and will be ' +\\n      'ignored in a future release. Instead, manually call ' +\\n      'e.stopPropagation() or e.preventDefault(), as appropriate.'\\n    ) : null);\\n\\n    if (returnValue === false) {\\n      event.stopPropagation();\\n      event.preventDefault();\\n    }\\n  },\\n\\n  /**\\n   * @param {string} topLevelType Record from `EventConstants`.\\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\\n   * @param {object} nativeEvent Native browser event.\\n   * @return {*} An accumulation of synthetic events.\\n   * @see {EventPluginHub.extractEvents}\\n   */\\n  extractEvents: function(\\n      topLevelType,\\n      topLevelTarget,\\n      topLevelTargetID,\\n      nativeEvent) {\\n    var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];\\n    if (!dispatchConfig) {\\n      return null;\\n    }\\n    var EventConstructor;\\n    switch (topLevelType) {\\n      case topLevelTypes.topInput:\\n      case topLevelTypes.topLoad:\\n      case topLevelTypes.topError:\\n      case topLevelTypes.topReset:\\n      case topLevelTypes.topSubmit:\\n        // HTML Events\\n        // @see http://www.w3.org/TR/html5/index.html#events-0\\n        EventConstructor = SyntheticEvent;\\n        break;\\n      case topLevelTypes.topKeyPress:\\n        // FireFox creates a keypress event for function keys too. This removes\\n        // the unwanted keypress events. Enter is however both printable and\\n        // non-printable. One would expect Tab to be as well (but it isn't).\\n        if (getEventCharCode(nativeEvent) === 0) {\\n          return null;\\n        }\\n        /* falls through */\\n      case topLevelTypes.topKeyDown:\\n      case topLevelTypes.topKeyUp:\\n        EventConstructor = SyntheticKeyboardEvent;\\n        break;\\n      case topLevelTypes.topBlur:\\n      case topLevelTypes.topFocus:\\n        EventConstructor = SyntheticFocusEvent;\\n        break;\\n      case topLevelTypes.topClick:\\n        // Firefox creates a click event on right mouse clicks. This removes the\\n        // unwanted click events.\\n        if (nativeEvent.button === 2) {\\n          return null;\\n        }\\n        /* falls through */\\n      case topLevelTypes.topContextMenu:\\n      case topLevelTypes.topDoubleClick:\\n      case topLevelTypes.topMouseDown:\\n      case topLevelTypes.topMouseMove:\\n      case topLevelTypes.topMouseOut:\\n      case topLevelTypes.topMouseOver:\\n      case topLevelTypes.topMouseUp:\\n        EventConstructor = SyntheticMouseEvent;\\n        break;\\n      case topLevelTypes.topDrag:\\n      case topLevelTypes.topDragEnd:\\n      case topLevelTypes.topDragEnter:\\n      case topLevelTypes.topDragExit:\\n      case topLevelTypes.topDragLeave:\\n      case topLevelTypes.topDragOver:\\n      case topLevelTypes.topDragStart:\\n      case topLevelTypes.topDrop:\\n        EventConstructor = SyntheticDragEvent;\\n        break;\\n      case topLevelTypes.topTouchCancel:\\n      case topLevelTypes.topTouchEnd:\\n      case topLevelTypes.topTouchMove:\\n      case topLevelTypes.topTouchStart:\\n        EventConstructor = SyntheticTouchEvent;\\n        break;\\n      case topLevelTypes.topScroll:\\n        EventConstructor = SyntheticUIEvent;\\n        break;\\n      case topLevelTypes.topWheel:\\n        EventConstructor = SyntheticWheelEvent;\\n        break;\\n      case topLevelTypes.topCopy:\\n      case topLevelTypes.topCut:\\n      case topLevelTypes.topPaste:\\n        EventConstructor = SyntheticClipboardEvent;\\n        break;\\n    }\\n    (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n      EventConstructor,\\n      'SimpleEventPlugin: Unhandled event type, `%s`.',\\n      topLevelType\\n    ) : invariant(EventConstructor));\\n    var event = EventConstructor.getPooled(\\n      dispatchConfig,\\n      topLevelTargetID,\\n      nativeEvent\\n    );\\n    EventPropagators.accumulateTwoPhaseDispatches(event);\\n    return event;\\n  }\\n\\n};\\n\\nmodule.exports = SimpleEventPlugin;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SimpleEventPlugin.js\\n ** module id = 130\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SimpleEventPlugin.js?\");\n\n/***/ },\n/* 131 */\n/*!*******************************************!*\\\n  !*** ./~/react/lib/SyntheticDragEvent.js ***!\n  \\*******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticDragEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticMouseEvent = __webpack_require__(/*! ./SyntheticMouseEvent */ 96);\\n\\n/**\\n * @interface DragEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar DragEventInterface = {\\n  dataTransfer: null\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);\\n\\nmodule.exports = SyntheticDragEvent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticDragEvent.js\\n ** module id = 131\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticDragEvent.js?\");\n\n/***/ },\n/* 132 */\n/*!************************************************!*\\\n  !*** ./~/react/lib/SyntheticClipboardEvent.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticClipboardEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticEvent = __webpack_require__(/*! ./SyntheticEvent */ 81);\\n\\n/**\\n * @interface Event\\n * @see http://www.w3.org/TR/clipboard-apis/\\n */\\nvar ClipboardEventInterface = {\\n  clipboardData: function(event) {\\n    return (\\n      'clipboardData' in event ?\\n        event.clipboardData :\\n        window.clipboardData\\n    );\\n  }\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);\\n\\nmodule.exports = SyntheticClipboardEvent;\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticClipboardEvent.js\\n ** module id = 132\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticClipboardEvent.js?\");\n\n/***/ },\n/* 133 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/SyntheticFocusEvent.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticFocusEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticUIEvent = __webpack_require__(/*! ./SyntheticUIEvent */ 97);\\n\\n/**\\n * @interface FocusEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar FocusEventInterface = {\\n  relatedTarget: null\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);\\n\\nmodule.exports = SyntheticFocusEvent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticFocusEvent.js\\n ** module id = 133\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticFocusEvent.js?\");\n\n/***/ },\n/* 134 */\n/*!***********************************************!*\\\n  !*** ./~/react/lib/SyntheticKeyboardEvent.js ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticKeyboardEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticUIEvent = __webpack_require__(/*! ./SyntheticUIEvent */ 97);\\n\\nvar getEventCharCode = __webpack_require__(/*! ./getEventCharCode */ 135);\\nvar getEventKey = __webpack_require__(/*! ./getEventKey */ 136);\\nvar getEventModifierState = __webpack_require__(/*! ./getEventModifierState */ 98);\\n\\n/**\\n * @interface KeyboardEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar KeyboardEventInterface = {\\n  key: getEventKey,\\n  location: null,\\n  ctrlKey: null,\\n  shiftKey: null,\\n  altKey: null,\\n  metaKey: null,\\n  repeat: null,\\n  locale: null,\\n  getModifierState: getEventModifierState,\\n  // Legacy Interface\\n  charCode: function(event) {\\n    // `charCode` is the result of a KeyPress event and represents the value of\\n    // the actual printable character.\\n\\n    // KeyPress is deprecated, but its replacement is not yet final and not\\n    // implemented in any major browser. Only KeyPress has charCode.\\n    if (event.type === 'keypress') {\\n      return getEventCharCode(event);\\n    }\\n    return 0;\\n  },\\n  keyCode: function(event) {\\n    // `keyCode` is the result of a KeyDown/Up event and represents the value of\\n    // physical keyboard key.\\n\\n    // The actual meaning of the value depends on the users' keyboard layout\\n    // which cannot be detected. Assuming that it is a US keyboard layout\\n    // provides a surprisingly accurate mapping for US and European users.\\n    // Due to this, it is left to the user to implement at this time.\\n    if (event.type === 'keydown' || event.type === 'keyup') {\\n      return event.keyCode;\\n    }\\n    return 0;\\n  },\\n  which: function(event) {\\n    // `which` is an alias for either `keyCode` or `charCode` depending on the\\n    // type of the event.\\n    if (event.type === 'keypress') {\\n      return getEventCharCode(event);\\n    }\\n    if (event.type === 'keydown' || event.type === 'keyup') {\\n      return event.keyCode;\\n    }\\n    return 0;\\n  }\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);\\n\\nmodule.exports = SyntheticKeyboardEvent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticKeyboardEvent.js\\n ** module id = 134\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticKeyboardEvent.js?\");\n\n/***/ },\n/* 135 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/getEventCharCode.js ***!\n  \\*****************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getEventCharCode\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\n/**\\n * `charCode` represents the actual \\\"character code\\\" and is safe to use with\\n * `String.fromCharCode`. As such, only keys that correspond to printable\\n * characters produce a valid `charCode`, the only exception to this is Enter.\\n * The Tab-key is considered non-printable and does not have a `charCode`,\\n * presumably because it does not produce a tab-character in browsers.\\n *\\n * @param {object} nativeEvent Native browser event.\\n * @return {string} Normalized `charCode` property.\\n */\\nfunction getEventCharCode(nativeEvent) {\\n  var charCode;\\n  var keyCode = nativeEvent.keyCode;\\n\\n  if ('charCode' in nativeEvent) {\\n    charCode = nativeEvent.charCode;\\n\\n    // FF does not set `charCode` for the Enter-key, check against `keyCode`.\\n    if (charCode === 0 && keyCode === 13) {\\n      charCode = 13;\\n    }\\n  } else {\\n    // IE8 does not implement `charCode`, but `keyCode` has the correct value.\\n    charCode = keyCode;\\n  }\\n\\n  // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\\n  // Must not discard the (non-)printable Enter-key.\\n  if (charCode >= 32 || charCode === 13) {\\n    return charCode;\\n  }\\n\\n  return 0;\\n}\\n\\nmodule.exports = getEventCharCode;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getEventCharCode.js\\n ** module id = 135\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getEventCharCode.js?\");\n\n/***/ },\n/* 136 */\n/*!************************************!*\\\n  !*** ./~/react/lib/getEventKey.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule getEventKey\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar getEventCharCode = __webpack_require__(/*! ./getEventCharCode */ 135);\\n\\n/**\\n * Normalization of deprecated HTML5 `key` values\\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\\n */\\nvar normalizeKey = {\\n  'Esc': 'Escape',\\n  'Spacebar': ' ',\\n  'Left': 'ArrowLeft',\\n  'Up': 'ArrowUp',\\n  'Right': 'ArrowRight',\\n  'Down': 'ArrowDown',\\n  'Del': 'Delete',\\n  'Win': 'OS',\\n  'Menu': 'ContextMenu',\\n  'Apps': 'ContextMenu',\\n  'Scroll': 'ScrollLock',\\n  'MozPrintableKey': 'Unidentified'\\n};\\n\\n/**\\n * Translation from legacy `keyCode` to HTML5 `key`\\n * Only special keys supported, all others depend on keyboard layout or browser\\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\\n */\\nvar translateToKey = {\\n  8: 'Backspace',\\n  9: 'Tab',\\n  12: 'Clear',\\n  13: 'Enter',\\n  16: 'Shift',\\n  17: 'Control',\\n  18: 'Alt',\\n  19: 'Pause',\\n  20: 'CapsLock',\\n  27: 'Escape',\\n  32: ' ',\\n  33: 'PageUp',\\n  34: 'PageDown',\\n  35: 'End',\\n  36: 'Home',\\n  37: 'ArrowLeft',\\n  38: 'ArrowUp',\\n  39: 'ArrowRight',\\n  40: 'ArrowDown',\\n  45: 'Insert',\\n  46: 'Delete',\\n  112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',\\n  118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',\\n  144: 'NumLock',\\n  145: 'ScrollLock',\\n  224: 'Meta'\\n};\\n\\n/**\\n * @param {object} nativeEvent Native browser event.\\n * @return {string} Normalized `key` property.\\n */\\nfunction getEventKey(nativeEvent) {\\n  if (nativeEvent.key) {\\n    // Normalize inconsistent values reported by browsers due to\\n    // implementations of a working draft specification.\\n\\n    // FireFox implements `key` but returns `MozPrintableKey` for all\\n    // printable characters (normalized to `Unidentified`), ignore it.\\n    var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\\n    if (key !== 'Unidentified') {\\n      return key;\\n    }\\n  }\\n\\n  // Browser does not implement `key`, polyfill as much of it as we can.\\n  if (nativeEvent.type === 'keypress') {\\n    var charCode = getEventCharCode(nativeEvent);\\n\\n    // The enter-key is technically both printable and non-printable and can\\n    // thus be captured by `keypress`, no other non-printable key should.\\n    return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\\n  }\\n  if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\\n    // While user keyboard layout determines the actual meaning of each\\n    // `keyCode` value, almost all function keys have a universal value.\\n    return translateToKey[nativeEvent.keyCode] || 'Unidentified';\\n  }\\n  return '';\\n}\\n\\nmodule.exports = getEventKey;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/getEventKey.js\\n ** module id = 136\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/getEventKey.js?\");\n\n/***/ },\n/* 137 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/SyntheticTouchEvent.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticTouchEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticUIEvent = __webpack_require__(/*! ./SyntheticUIEvent */ 97);\\n\\nvar getEventModifierState = __webpack_require__(/*! ./getEventModifierState */ 98);\\n\\n/**\\n * @interface TouchEvent\\n * @see http://www.w3.org/TR/touch-events/\\n */\\nvar TouchEventInterface = {\\n  touches: null,\\n  targetTouches: null,\\n  changedTouches: null,\\n  altKey: null,\\n  metaKey: null,\\n  ctrlKey: null,\\n  shiftKey: null,\\n  getModifierState: getEventModifierState\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticUIEvent}\\n */\\nfunction SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);\\n\\nmodule.exports = SyntheticTouchEvent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticTouchEvent.js\\n ** module id = 137\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticTouchEvent.js?\");\n\n/***/ },\n/* 138 */\n/*!********************************************!*\\\n  !*** ./~/react/lib/SyntheticWheelEvent.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SyntheticWheelEvent\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar SyntheticMouseEvent = __webpack_require__(/*! ./SyntheticMouseEvent */ 96);\\n\\n/**\\n * @interface WheelEvent\\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\\n */\\nvar WheelEventInterface = {\\n  deltaX: function(event) {\\n    return (\\n      'deltaX' in event ? event.deltaX :\\n      // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\\n      'wheelDeltaX' in event ? -event.wheelDeltaX : 0\\n    );\\n  },\\n  deltaY: function(event) {\\n    return (\\n      'deltaY' in event ? event.deltaY :\\n      // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\\n      'wheelDeltaY' in event ? -event.wheelDeltaY :\\n      // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\\n      'wheelDelta' in event ? -event.wheelDelta : 0\\n    );\\n  },\\n  deltaZ: null,\\n\\n  // Browsers without \\\"deltaMode\\\" is reporting in raw wheel delta where one\\n  // notch on the scroll is always +/- 120, roughly equivalent to pixels.\\n  // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\\n  // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\\n  deltaMode: null\\n};\\n\\n/**\\n * @param {object} dispatchConfig Configuration used to dispatch this event.\\n * @param {string} dispatchMarker Marker identifying the event target.\\n * @param {object} nativeEvent Native browser event.\\n * @extends {SyntheticMouseEvent}\\n */\\nfunction SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent) {\\n  SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);\\n}\\n\\nSyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);\\n\\nmodule.exports = SyntheticWheelEvent;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SyntheticWheelEvent.js\\n ** module id = 138\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SyntheticWheelEvent.js?\");\n\n/***/ },\n/* 139 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/SVGDOMPropertyConfig.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule SVGDOMPropertyConfig\\n */\\n\\n/*jslint bitwise: true*/\\n\\n\\\"use strict\\\";\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 8);\\n\\nvar MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;\\n\\nvar SVGDOMPropertyConfig = {\\n  Properties: {\\n    cx: MUST_USE_ATTRIBUTE,\\n    cy: MUST_USE_ATTRIBUTE,\\n    d: MUST_USE_ATTRIBUTE,\\n    dx: MUST_USE_ATTRIBUTE,\\n    dy: MUST_USE_ATTRIBUTE,\\n    fill: MUST_USE_ATTRIBUTE,\\n    fillOpacity: MUST_USE_ATTRIBUTE,\\n    fontFamily: MUST_USE_ATTRIBUTE,\\n    fontSize: MUST_USE_ATTRIBUTE,\\n    fx: MUST_USE_ATTRIBUTE,\\n    fy: MUST_USE_ATTRIBUTE,\\n    gradientTransform: MUST_USE_ATTRIBUTE,\\n    gradientUnits: MUST_USE_ATTRIBUTE,\\n    markerEnd: MUST_USE_ATTRIBUTE,\\n    markerMid: MUST_USE_ATTRIBUTE,\\n    markerStart: MUST_USE_ATTRIBUTE,\\n    offset: MUST_USE_ATTRIBUTE,\\n    opacity: MUST_USE_ATTRIBUTE,\\n    patternContentUnits: MUST_USE_ATTRIBUTE,\\n    patternUnits: MUST_USE_ATTRIBUTE,\\n    points: MUST_USE_ATTRIBUTE,\\n    preserveAspectRatio: MUST_USE_ATTRIBUTE,\\n    r: MUST_USE_ATTRIBUTE,\\n    rx: MUST_USE_ATTRIBUTE,\\n    ry: MUST_USE_ATTRIBUTE,\\n    spreadMethod: MUST_USE_ATTRIBUTE,\\n    stopColor: MUST_USE_ATTRIBUTE,\\n    stopOpacity: MUST_USE_ATTRIBUTE,\\n    stroke: MUST_USE_ATTRIBUTE,\\n    strokeDasharray: MUST_USE_ATTRIBUTE,\\n    strokeLinecap: MUST_USE_ATTRIBUTE,\\n    strokeOpacity: MUST_USE_ATTRIBUTE,\\n    strokeWidth: MUST_USE_ATTRIBUTE,\\n    textAnchor: MUST_USE_ATTRIBUTE,\\n    transform: MUST_USE_ATTRIBUTE,\\n    version: MUST_USE_ATTRIBUTE,\\n    viewBox: MUST_USE_ATTRIBUTE,\\n    x1: MUST_USE_ATTRIBUTE,\\n    x2: MUST_USE_ATTRIBUTE,\\n    x: MUST_USE_ATTRIBUTE,\\n    y1: MUST_USE_ATTRIBUTE,\\n    y2: MUST_USE_ATTRIBUTE,\\n    y: MUST_USE_ATTRIBUTE\\n  },\\n  DOMAttributeNames: {\\n    fillOpacity: 'fill-opacity',\\n    fontFamily: 'font-family',\\n    fontSize: 'font-size',\\n    gradientTransform: 'gradientTransform',\\n    gradientUnits: 'gradientUnits',\\n    markerEnd: 'marker-end',\\n    markerMid: 'marker-mid',\\n    markerStart: 'marker-start',\\n    patternContentUnits: 'patternContentUnits',\\n    patternUnits: 'patternUnits',\\n    preserveAspectRatio: 'preserveAspectRatio',\\n    spreadMethod: 'spreadMethod',\\n    stopColor: 'stop-color',\\n    stopOpacity: 'stop-opacity',\\n    strokeDasharray: 'stroke-dasharray',\\n    strokeLinecap: 'stroke-linecap',\\n    strokeOpacity: 'stroke-opacity',\\n    strokeWidth: 'stroke-width',\\n    textAnchor: 'text-anchor',\\n    viewBox: 'viewBox'\\n  }\\n};\\n\\nmodule.exports = SVGDOMPropertyConfig;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/SVGDOMPropertyConfig.js\\n ** module id = 139\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/SVGDOMPropertyConfig.js?\");\n\n/***/ },\n/* 140 */\n/*!************************************************!*\\\n  !*** ./~/react/lib/createFullPageComponent.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule createFullPageComponent\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\n// Defeat circular references by requiring this directly.\\nvar ReactCompositeComponent = __webpack_require__(/*! ./ReactCompositeComponent */ 30);\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Create a component that will throw an exception when unmounted.\\n *\\n * Components like <html> <head> and <body> can't be removed or added\\n * easily in a cross-browser way, however it's valuable to be able to\\n * take advantage of React's reconciliation for styling and <title>\\n * management. So we just document it and throw in dangerous cases.\\n *\\n * @param {string} tag The tag to wrap\\n * @return {function} convenience constructor of new component\\n */\\nfunction createFullPageComponent(tag) {\\n  var elementFactory = ReactElement.createFactory(tag);\\n\\n  var FullPageComponent = ReactCompositeComponent.createClass({\\n    displayName: 'ReactFullPageComponent' + tag,\\n\\n    componentWillUnmount: function() {\\n      (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n        false,\\n        '%s tried to unmount. Because of cross-browser quirks it is ' +\\n        'impossible to unmount some top-level components (eg <html>, <head>, ' +\\n        'and <body>) reliably and efficiently. To fix this, have a single ' +\\n        'top-level component that never unmounts render these elements.',\\n        this.constructor.displayName\\n      ) : invariant(false));\\n    },\\n\\n    render: function() {\\n      return elementFactory(this.props);\\n    }\\n  });\\n\\n  return FullPageComponent;\\n}\\n\\nmodule.exports = createFullPageComponent;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/createFullPageComponent.js\\n ** module id = 140\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/createFullPageComponent.js?\");\n\n/***/ },\n/* 141 */\n/*!*****************************************!*\\\n  !*** ./~/react/lib/ReactDefaultPerf.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDefaultPerf\\n * @typechecks static-only\\n */\\n\\n\\\"use strict\\\";\\n\\nvar DOMProperty = __webpack_require__(/*! ./DOMProperty */ 8);\\nvar ReactDefaultPerfAnalysis = __webpack_require__(/*! ./ReactDefaultPerfAnalysis */ 142);\\nvar ReactMount = __webpack_require__(/*! ./ReactMount */ 56);\\nvar ReactPerf = __webpack_require__(/*! ./ReactPerf */ 29);\\n\\nvar performanceNow = __webpack_require__(/*! ./performanceNow */ 143);\\n\\nfunction roundFloat(val) {\\n  return Math.floor(val * 100) / 100;\\n}\\n\\nfunction addValue(obj, key, val) {\\n  obj[key] = (obj[key] || 0) + val;\\n}\\n\\nvar ReactDefaultPerf = {\\n  _allMeasurements: [], // last item in the list is the current one\\n  _mountStack: [0],\\n  _injected: false,\\n\\n  start: function() {\\n    if (!ReactDefaultPerf._injected) {\\n      ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure);\\n    }\\n\\n    ReactDefaultPerf._allMeasurements.length = 0;\\n    ReactPerf.enableMeasure = true;\\n  },\\n\\n  stop: function() {\\n    ReactPerf.enableMeasure = false;\\n  },\\n\\n  getLastMeasurements: function() {\\n    return ReactDefaultPerf._allMeasurements;\\n  },\\n\\n  printExclusive: function(measurements) {\\n    measurements = measurements || ReactDefaultPerf._allMeasurements;\\n    var summary = ReactDefaultPerfAnalysis.getExclusiveSummary(measurements);\\n    console.table(summary.map(function(item) {\\n      return {\\n        'Component class name': item.componentName,\\n        'Total inclusive time (ms)': roundFloat(item.inclusive),\\n        'Exclusive mount time (ms)': roundFloat(item.exclusive),\\n        'Exclusive render time (ms)': roundFloat(item.render),\\n        'Mount time per instance (ms)': roundFloat(item.exclusive / item.count),\\n        'Render time per instance (ms)': roundFloat(item.render / item.count),\\n        'Instances': item.count\\n      };\\n    }));\\n    // TODO: ReactDefaultPerfAnalysis.getTotalTime() does not return the correct\\n    // number.\\n  },\\n\\n  printInclusive: function(measurements) {\\n    measurements = measurements || ReactDefaultPerf._allMeasurements;\\n    var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements);\\n    console.table(summary.map(function(item) {\\n      return {\\n        'Owner > component': item.componentName,\\n        'Inclusive time (ms)': roundFloat(item.time),\\n        'Instances': item.count\\n      };\\n    }));\\n    console.log(\\n      'Total time:',\\n      ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms'\\n    );\\n  },\\n\\n  getMeasurementsSummaryMap: function(measurements) {\\n    var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(\\n      measurements,\\n      true\\n    );\\n    return summary.map(function(item) {\\n      return {\\n        'Owner > component': item.componentName,\\n        'Wasted time (ms)': item.time,\\n        'Instances': item.count\\n      };\\n    });\\n  },\\n\\n  printWasted: function(measurements) {\\n    measurements = measurements || ReactDefaultPerf._allMeasurements;\\n    console.table(ReactDefaultPerf.getMeasurementsSummaryMap(measurements));\\n    console.log(\\n      'Total time:',\\n      ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms'\\n    );\\n  },\\n\\n  printDOM: function(measurements) {\\n    measurements = measurements || ReactDefaultPerf._allMeasurements;\\n    var summary = ReactDefaultPerfAnalysis.getDOMSummary(measurements);\\n    console.table(summary.map(function(item) {\\n      var result = {};\\n      result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id;\\n      result['type'] = item.type;\\n      result['args'] = JSON.stringify(item.args);\\n      return result;\\n    }));\\n    console.log(\\n      'Total time:',\\n      ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms'\\n    );\\n  },\\n\\n  _recordWrite: function(id, fnName, totalTime, args) {\\n    // TODO: totalTime isn't that useful since it doesn't count paints/reflows\\n    var writes =\\n      ReactDefaultPerf\\n        ._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1]\\n        .writes;\\n    writes[id] = writes[id] || [];\\n    writes[id].push({\\n      type: fnName,\\n      time: totalTime,\\n      args: args\\n    });\\n  },\\n\\n  measure: function(moduleName, fnName, func) {\\n    return function() {for (var args=[],$__0=0,$__1=arguments.length;$__0<$__1;$__0++) args.push(arguments[$__0]);\\n      var totalTime;\\n      var rv;\\n      var start;\\n\\n      if (fnName === '_renderNewRootComponent' ||\\n          fnName === 'flushBatchedUpdates') {\\n        // A \\\"measurement\\\" is a set of metrics recorded for each flush. We want\\n        // to group the metrics for a given flush together so we can look at the\\n        // components that rendered and the DOM operations that actually\\n        // happened to determine the amount of \\\"wasted work\\\" performed.\\n        ReactDefaultPerf._allMeasurements.push({\\n          exclusive: {},\\n          inclusive: {},\\n          render: {},\\n          counts: {},\\n          writes: {},\\n          displayNames: {},\\n          totalTime: 0\\n        });\\n        start = performanceNow();\\n        rv = func.apply(this, args);\\n        ReactDefaultPerf._allMeasurements[\\n          ReactDefaultPerf._allMeasurements.length - 1\\n        ].totalTime = performanceNow() - start;\\n        return rv;\\n      } else if (moduleName === 'ReactDOMIDOperations' ||\\n        moduleName === 'ReactComponentBrowserEnvironment') {\\n        start = performanceNow();\\n        rv = func.apply(this, args);\\n        totalTime = performanceNow() - start;\\n\\n        if (fnName === 'mountImageIntoNode') {\\n          var mountID = ReactMount.getID(args[1]);\\n          ReactDefaultPerf._recordWrite(mountID, fnName, totalTime, args[0]);\\n        } else if (fnName === 'dangerouslyProcessChildrenUpdates') {\\n          // special format\\n          args[0].forEach(function(update) {\\n            var writeArgs = {};\\n            if (update.fromIndex !== null) {\\n              writeArgs.fromIndex = update.fromIndex;\\n            }\\n            if (update.toIndex !== null) {\\n              writeArgs.toIndex = update.toIndex;\\n            }\\n            if (update.textContent !== null) {\\n              writeArgs.textContent = update.textContent;\\n            }\\n            if (update.markupIndex !== null) {\\n              writeArgs.markup = args[1][update.markupIndex];\\n            }\\n            ReactDefaultPerf._recordWrite(\\n              update.parentID,\\n              update.type,\\n              totalTime,\\n              writeArgs\\n            );\\n          });\\n        } else {\\n          // basic format\\n          ReactDefaultPerf._recordWrite(\\n            args[0],\\n            fnName,\\n            totalTime,\\n            Array.prototype.slice.call(args, 1)\\n          );\\n        }\\n        return rv;\\n      } else if (moduleName === 'ReactCompositeComponent' && (\\n        fnName === 'mountComponent' ||\\n        fnName === 'updateComponent' || // TODO: receiveComponent()?\\n        fnName === '_renderValidatedComponent')) {\\n\\n        var rootNodeID = fnName === 'mountComponent' ?\\n          args[0] :\\n          this._rootNodeID;\\n        var isRender = fnName === '_renderValidatedComponent';\\n        var isMount = fnName === 'mountComponent';\\n\\n        var mountStack = ReactDefaultPerf._mountStack;\\n        var entry = ReactDefaultPerf._allMeasurements[\\n          ReactDefaultPerf._allMeasurements.length - 1\\n        ];\\n\\n        if (isRender) {\\n          addValue(entry.counts, rootNodeID, 1);\\n        } else if (isMount) {\\n          mountStack.push(0);\\n        }\\n\\n        start = performanceNow();\\n        rv = func.apply(this, args);\\n        totalTime = performanceNow() - start;\\n\\n        if (isRender) {\\n          addValue(entry.render, rootNodeID, totalTime);\\n        } else if (isMount) {\\n          var subMountTime = mountStack.pop();\\n          mountStack[mountStack.length - 1] += totalTime;\\n          addValue(entry.exclusive, rootNodeID, totalTime - subMountTime);\\n          addValue(entry.inclusive, rootNodeID, totalTime);\\n        } else {\\n          addValue(entry.inclusive, rootNodeID, totalTime);\\n        }\\n\\n        entry.displayNames[rootNodeID] = {\\n          current: this.constructor.displayName,\\n          owner: this._owner ? this._owner.constructor.displayName : '<root>'\\n        };\\n\\n        return rv;\\n      } else {\\n        return func.apply(this, args);\\n      }\\n    };\\n  }\\n};\\n\\nmodule.exports = ReactDefaultPerf;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDefaultPerf.js\\n ** module id = 141\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDefaultPerf.js?\");\n\n/***/ },\n/* 142 */\n/*!*************************************************!*\\\n  !*** ./~/react/lib/ReactDefaultPerfAnalysis.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactDefaultPerfAnalysis\\n */\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\n\\n// Don't try to save users less than 1.2ms (a number I made up)\\nvar DONT_CARE_THRESHOLD = 1.2;\\nvar DOM_OPERATION_TYPES = {\\n  'mountImageIntoNode': 'set innerHTML',\\n  INSERT_MARKUP: 'set innerHTML',\\n  MOVE_EXISTING: 'move',\\n  REMOVE_NODE: 'remove',\\n  TEXT_CONTENT: 'set textContent',\\n  'updatePropertyByID': 'update attribute',\\n  'deletePropertyByID': 'delete attribute',\\n  'updateStylesByID': 'update styles',\\n  'updateInnerHTMLByID': 'set innerHTML',\\n  'dangerouslyReplaceNodeWithMarkupByID': 'replace'\\n};\\n\\nfunction getTotalTime(measurements) {\\n  // TODO: return number of DOM ops? could be misleading.\\n  // TODO: measure dropped frames after reconcile?\\n  // TODO: log total time of each reconcile and the top-level component\\n  // class that triggered it.\\n  var totalTime = 0;\\n  for (var i = 0; i < measurements.length; i++) {\\n    var measurement = measurements[i];\\n    totalTime += measurement.totalTime;\\n  }\\n  return totalTime;\\n}\\n\\nfunction getDOMSummary(measurements) {\\n  var items = [];\\n  for (var i = 0; i < measurements.length; i++) {\\n    var measurement = measurements[i];\\n    var id;\\n\\n    for (id in measurement.writes) {\\n      measurement.writes[id].forEach(function(write) {\\n        items.push({\\n          id: id,\\n          type: DOM_OPERATION_TYPES[write.type] || write.type,\\n          args: write.args\\n        });\\n      });\\n    }\\n  }\\n  return items;\\n}\\n\\nfunction getExclusiveSummary(measurements) {\\n  var candidates = {};\\n  var displayName;\\n\\n  for (var i = 0; i < measurements.length; i++) {\\n    var measurement = measurements[i];\\n    var allIDs = assign(\\n      {},\\n      measurement.exclusive,\\n      measurement.inclusive\\n    );\\n\\n    for (var id in allIDs) {\\n      displayName = measurement.displayNames[id].current;\\n\\n      candidates[displayName] = candidates[displayName] || {\\n        componentName: displayName,\\n        inclusive: 0,\\n        exclusive: 0,\\n        render: 0,\\n        count: 0\\n      };\\n      if (measurement.render[id]) {\\n        candidates[displayName].render += measurement.render[id];\\n      }\\n      if (measurement.exclusive[id]) {\\n        candidates[displayName].exclusive += measurement.exclusive[id];\\n      }\\n      if (measurement.inclusive[id]) {\\n        candidates[displayName].inclusive += measurement.inclusive[id];\\n      }\\n      if (measurement.counts[id]) {\\n        candidates[displayName].count += measurement.counts[id];\\n      }\\n    }\\n  }\\n\\n  // Now make a sorted array with the results.\\n  var arr = [];\\n  for (displayName in candidates) {\\n    if (candidates[displayName].exclusive >= DONT_CARE_THRESHOLD) {\\n      arr.push(candidates[displayName]);\\n    }\\n  }\\n\\n  arr.sort(function(a, b) {\\n    return b.exclusive - a.exclusive;\\n  });\\n\\n  return arr;\\n}\\n\\nfunction getInclusiveSummary(measurements, onlyClean) {\\n  var candidates = {};\\n  var inclusiveKey;\\n\\n  for (var i = 0; i < measurements.length; i++) {\\n    var measurement = measurements[i];\\n    var allIDs = assign(\\n      {},\\n      measurement.exclusive,\\n      measurement.inclusive\\n    );\\n    var cleanComponents;\\n\\n    if (onlyClean) {\\n      cleanComponents = getUnchangedComponents(measurement);\\n    }\\n\\n    for (var id in allIDs) {\\n      if (onlyClean && !cleanComponents[id]) {\\n        continue;\\n      }\\n\\n      var displayName = measurement.displayNames[id];\\n\\n      // Inclusive time is not useful for many components without knowing where\\n      // they are instantiated. So we aggregate inclusive time with both the\\n      // owner and current displayName as the key.\\n      inclusiveKey = displayName.owner + ' > ' + displayName.current;\\n\\n      candidates[inclusiveKey] = candidates[inclusiveKey] || {\\n        componentName: inclusiveKey,\\n        time: 0,\\n        count: 0\\n      };\\n\\n      if (measurement.inclusive[id]) {\\n        candidates[inclusiveKey].time += measurement.inclusive[id];\\n      }\\n      if (measurement.counts[id]) {\\n        candidates[inclusiveKey].count += measurement.counts[id];\\n      }\\n    }\\n  }\\n\\n  // Now make a sorted array with the results.\\n  var arr = [];\\n  for (inclusiveKey in candidates) {\\n    if (candidates[inclusiveKey].time >= DONT_CARE_THRESHOLD) {\\n      arr.push(candidates[inclusiveKey]);\\n    }\\n  }\\n\\n  arr.sort(function(a, b) {\\n    return b.time - a.time;\\n  });\\n\\n  return arr;\\n}\\n\\nfunction getUnchangedComponents(measurement) {\\n  // For a given reconcile, look at which components did not actually\\n  // render anything to the DOM and return a mapping of their ID to\\n  // the amount of time it took to render the entire subtree.\\n  var cleanComponents = {};\\n  var dirtyLeafIDs = Object.keys(measurement.writes);\\n  var allIDs = assign({}, measurement.exclusive, measurement.inclusive);\\n\\n  for (var id in allIDs) {\\n    var isDirty = false;\\n    // For each component that rendered, see if a component that triggered\\n    // a DOM op is in its subtree.\\n    for (var i = 0; i < dirtyLeafIDs.length; i++) {\\n      if (dirtyLeafIDs[i].indexOf(id) === 0) {\\n        isDirty = true;\\n        break;\\n      }\\n    }\\n    if (!isDirty && measurement.counts[id] > 0) {\\n      cleanComponents[id] = true;\\n    }\\n  }\\n  return cleanComponents;\\n}\\n\\nvar ReactDefaultPerfAnalysis = {\\n  getExclusiveSummary: getExclusiveSummary,\\n  getInclusiveSummary: getInclusiveSummary,\\n  getDOMSummary: getDOMSummary,\\n  getTotalTime: getTotalTime\\n};\\n\\nmodule.exports = ReactDefaultPerfAnalysis;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactDefaultPerfAnalysis.js\\n ** module id = 142\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactDefaultPerfAnalysis.js?\");\n\n/***/ },\n/* 143 */\n/*!***************************************!*\\\n  !*** ./~/react/lib/performanceNow.js ***!\n  \\***************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule performanceNow\\n * @typechecks\\n */\\n\\nvar performance = __webpack_require__(/*! ./performance */ 144);\\n\\n/**\\n * Detect if we can use `window.performance.now()` and gracefully fallback to\\n * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now\\n * because of Facebook's testing infrastructure.\\n */\\nif (!performance || !performance.now) {\\n  performance = Date;\\n}\\n\\nvar performanceNow = performance.now.bind(performance);\\n\\nmodule.exports = performanceNow;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/performanceNow.js\\n ** module id = 143\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/performanceNow.js?\");\n\n/***/ },\n/* 144 */\n/*!************************************!*\\\n  !*** ./~/react/lib/performance.js ***!\n  \\************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule performance\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\nvar ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ 49);\\n\\nvar performance;\\n\\nif (ExecutionEnvironment.canUseDOM) {\\n  performance =\\n    window.performance ||\\n    window.msPerformance ||\\n    window.webkitPerformance;\\n}\\n\\nmodule.exports = performance || {};\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/performance.js\\n ** module id = 144\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/performance.js?\");\n\n/***/ },\n/* 145 */\n/*!*********************************************!*\\\n  !*** ./~/react/lib/ReactServerRendering.js ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @typechecks static-only\\n * @providesModule ReactServerRendering\\n */\\n\\\"use strict\\\";\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\nvar ReactInstanceHandles = __webpack_require__(/*! ./ReactInstanceHandles */ 4);\\nvar ReactMarkupChecksum = __webpack_require__(/*! ./ReactMarkupChecksum */ 112);\\nvar ReactServerRenderingTransaction =\\n  __webpack_require__(/*! ./ReactServerRenderingTransaction */ 146);\\n\\nvar instantiateReactComponent = __webpack_require__(/*! ./instantiateReactComponent */ 40);\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * @param {ReactElement} element\\n * @return {string} the HTML markup\\n */\\nfunction renderToString(element) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    ReactElement.isValidElement(element),\\n    'renderToString(): You must pass a valid ReactElement.'\\n  ) : invariant(ReactElement.isValidElement(element)));\\n\\n  var transaction;\\n  try {\\n    var id = ReactInstanceHandles.createReactRootID();\\n    transaction = ReactServerRenderingTransaction.getPooled(false);\\n\\n    return transaction.perform(function() {\\n      var componentInstance = instantiateReactComponent(element, null);\\n      var markup = componentInstance.mountComponent(id, transaction, 0);\\n      return ReactMarkupChecksum.addChecksumToMarkup(markup);\\n    }, null);\\n  } finally {\\n    ReactServerRenderingTransaction.release(transaction);\\n  }\\n}\\n\\n/**\\n * @param {ReactElement} element\\n * @return {string} the HTML markup, without the extra React ID and checksum\\n * (for generating static pages)\\n */\\nfunction renderToStaticMarkup(element) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    ReactElement.isValidElement(element),\\n    'renderToStaticMarkup(): You must pass a valid ReactElement.'\\n  ) : invariant(ReactElement.isValidElement(element)));\\n\\n  var transaction;\\n  try {\\n    var id = ReactInstanceHandles.createReactRootID();\\n    transaction = ReactServerRenderingTransaction.getPooled(true);\\n\\n    return transaction.perform(function() {\\n      var componentInstance = instantiateReactComponent(element, null);\\n      return componentInstance.mountComponent(id, transaction, 0);\\n    }, null);\\n  } finally {\\n    ReactServerRenderingTransaction.release(transaction);\\n  }\\n}\\n\\nmodule.exports = {\\n  renderToString: renderToString,\\n  renderToStaticMarkup: renderToStaticMarkup\\n};\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactServerRendering.js\\n ** module id = 145\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactServerRendering.js?\");\n\n/***/ },\n/* 146 */\n/*!********************************************************!*\\\n  !*** ./~/react/lib/ReactServerRenderingTransaction.js ***!\n  \\********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/**\\n * Copyright 2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule ReactServerRenderingTransaction\\n * @typechecks\\n */\\n\\n\\\"use strict\\\";\\n\\nvar PooledClass = __webpack_require__(/*! ./PooledClass */ 17);\\nvar CallbackQueue = __webpack_require__(/*! ./CallbackQueue */ 28);\\nvar ReactPutListenerQueue = __webpack_require__(/*! ./ReactPutListenerQueue */ 103);\\nvar Transaction = __webpack_require__(/*! ./Transaction */ 27);\\n\\nvar assign = __webpack_require__(/*! ./Object.assign */ 21);\\nvar emptyFunction = __webpack_require__(/*! ./emptyFunction */ 12);\\n\\n/**\\n * Provides a `CallbackQueue` queue for collecting `onDOMReady` callbacks\\n * during the performing of the transaction.\\n */\\nvar ON_DOM_READY_QUEUEING = {\\n  /**\\n   * Initializes the internal `onDOMReady` queue.\\n   */\\n  initialize: function() {\\n    this.reactMountReady.reset();\\n  },\\n\\n  close: emptyFunction\\n};\\n\\nvar PUT_LISTENER_QUEUEING = {\\n  initialize: function() {\\n    this.putListenerQueue.reset();\\n  },\\n\\n  close: emptyFunction\\n};\\n\\n/**\\n * Executed within the scope of the `Transaction` instance. Consider these as\\n * being member methods, but with an implied ordering while being isolated from\\n * each other.\\n */\\nvar TRANSACTION_WRAPPERS = [\\n  PUT_LISTENER_QUEUEING,\\n  ON_DOM_READY_QUEUEING\\n];\\n\\n/**\\n * @class ReactServerRenderingTransaction\\n * @param {boolean} renderToStaticMarkup\\n */\\nfunction ReactServerRenderingTransaction(renderToStaticMarkup) {\\n  this.reinitializeTransaction();\\n  this.renderToStaticMarkup = renderToStaticMarkup;\\n  this.reactMountReady = CallbackQueue.getPooled(null);\\n  this.putListenerQueue = ReactPutListenerQueue.getPooled();\\n}\\n\\nvar Mixin = {\\n  /**\\n   * @see Transaction\\n   * @abstract\\n   * @final\\n   * @return {array} Empty list of operation wrap proceedures.\\n   */\\n  getTransactionWrappers: function() {\\n    return TRANSACTION_WRAPPERS;\\n  },\\n\\n  /**\\n   * @return {object} The queue to collect `onDOMReady` callbacks with.\\n   */\\n  getReactMountReady: function() {\\n    return this.reactMountReady;\\n  },\\n\\n  getPutListenerQueue: function() {\\n    return this.putListenerQueue;\\n  },\\n\\n  /**\\n   * `PooledClass` looks for this, and will invoke this before allowing this\\n   * instance to be resused.\\n   */\\n  destructor: function() {\\n    CallbackQueue.release(this.reactMountReady);\\n    this.reactMountReady = null;\\n\\n    ReactPutListenerQueue.release(this.putListenerQueue);\\n    this.putListenerQueue = null;\\n  }\\n};\\n\\n\\nassign(\\n  ReactServerRenderingTransaction.prototype,\\n  Transaction.Mixin,\\n  Mixin\\n);\\n\\nPooledClass.addPoolingTo(ReactServerRenderingTransaction);\\n\\nmodule.exports = ReactServerRenderingTransaction;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/ReactServerRenderingTransaction.js\\n ** module id = 146\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/ReactServerRenderingTransaction.js?\");\n\n/***/ },\n/* 147 */\n/*!**********************************!*\\\n  !*** ./~/react/lib/onlyChild.js ***!\n  \\**********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule onlyChild\\n */\\n\\\"use strict\\\";\\n\\nvar ReactElement = __webpack_require__(/*! ./ReactElement */ 19);\\n\\nvar invariant = __webpack_require__(/*! ./invariant */ 6);\\n\\n/**\\n * Returns the first child in a collection of children and verifies that there\\n * is only one child in the collection. The current implementation of this\\n * function assumes that a single child gets passed without a wrapper, but the\\n * purpose of this helper function is to abstract away the particular structure\\n * of children.\\n *\\n * @param {?object} children Child collection structure.\\n * @return {ReactComponent} The first and only `ReactComponent` contained in the\\n * structure.\\n */\\nfunction onlyChild(children) {\\n  (\\\"production\\\" !== process.env.NODE_ENV ? invariant(\\n    ReactElement.isValidElement(children),\\n    'onlyChild must be passed a children with exactly one child.'\\n  ) : invariant(ReactElement.isValidElement(children)));\\n  return children;\\n}\\n\\nmodule.exports = onlyChild;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/onlyChild.js\\n ** module id = 147\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/onlyChild.js?\");\n\n/***/ },\n/* 148 */\n/*!***************************!*\\\n  !*** ./~/lodash/index.js ***!\n  \\***************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/**\\n * @license\\n * lodash 3.10.0 (Custom Build) <https://lodash.com/>\\n * Build: `lodash modern -d -o ./index.js`\\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\\n * Available under MIT license <https://lodash.com/license>\\n */\\n;(function() {\\n\\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\\n  var undefined;\\n\\n  /** Used as the semantic version number. */\\n  var VERSION = '3.10.0';\\n\\n  /** Used to compose bitmasks for wrapper metadata. */\\n  var BIND_FLAG = 1,\\n      BIND_KEY_FLAG = 2,\\n      CURRY_BOUND_FLAG = 4,\\n      CURRY_FLAG = 8,\\n      CURRY_RIGHT_FLAG = 16,\\n      PARTIAL_FLAG = 32,\\n      PARTIAL_RIGHT_FLAG = 64,\\n      ARY_FLAG = 128,\\n      REARG_FLAG = 256;\\n\\n  /** Used as default options for `_.trunc`. */\\n  var DEFAULT_TRUNC_LENGTH = 30,\\n      DEFAULT_TRUNC_OMISSION = '...';\\n\\n  /** Used to detect when a function becomes hot. */\\n  var HOT_COUNT = 150,\\n      HOT_SPAN = 16;\\n\\n  /** Used as the size to enable large array optimizations. */\\n  var LARGE_ARRAY_SIZE = 200;\\n\\n  /** Used to indicate the type of lazy iteratees. */\\n  var LAZY_FILTER_FLAG = 1,\\n      LAZY_MAP_FLAG = 2;\\n\\n  /** Used as the `TypeError` message for \\\"Functions\\\" methods. */\\n  var FUNC_ERROR_TEXT = 'Expected a function';\\n\\n  /** Used as the internal argument placeholder. */\\n  var PLACEHOLDER = '__lodash_placeholder__';\\n\\n  /** `Object#toString` result references. */\\n  var argsTag = '[object Arguments]',\\n      arrayTag = '[object Array]',\\n      boolTag = '[object Boolean]',\\n      dateTag = '[object Date]',\\n      errorTag = '[object Error]',\\n      funcTag = '[object Function]',\\n      mapTag = '[object Map]',\\n      numberTag = '[object Number]',\\n      objectTag = '[object Object]',\\n      regexpTag = '[object RegExp]',\\n      setTag = '[object Set]',\\n      stringTag = '[object String]',\\n      weakMapTag = '[object WeakMap]';\\n\\n  var arrayBufferTag = '[object ArrayBuffer]',\\n      float32Tag = '[object Float32Array]',\\n      float64Tag = '[object Float64Array]',\\n      int8Tag = '[object Int8Array]',\\n      int16Tag = '[object Int16Array]',\\n      int32Tag = '[object Int32Array]',\\n      uint8Tag = '[object Uint8Array]',\\n      uint8ClampedTag = '[object Uint8ClampedArray]',\\n      uint16Tag = '[object Uint16Array]',\\n      uint32Tag = '[object Uint32Array]';\\n\\n  /** Used to match empty string literals in compiled template source. */\\n  var reEmptyStringLeading = /\\\\b__p \\\\+= '';/g,\\n      reEmptyStringMiddle = /\\\\b(__p \\\\+=) '' \\\\+/g,\\n      reEmptyStringTrailing = /(__e\\\\(.*?\\\\)|\\\\b__t\\\\)) \\\\+\\\\n'';/g;\\n\\n  /** Used to match HTML entities and HTML characters. */\\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g,\\n      reUnescapedHtml = /[&<>\\\"'`]/g,\\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\\n\\n  /** Used to match template delimiters. */\\n  var reEscape = /<%-([\\\\s\\\\S]+?)%>/g,\\n      reEvaluate = /<%([\\\\s\\\\S]+?)%>/g,\\n      reInterpolate = /<%=([\\\\s\\\\S]+?)%>/g;\\n\\n  /** Used to match property names within property paths. */\\n  var reIsDeepProp = /\\\\.|\\\\[(?:[^[\\\\]]*|([\\\"'])(?:(?!\\\\1)[^\\\\n\\\\\\\\]|\\\\\\\\.)*?\\\\1)\\\\]/,\\n      reIsPlainProp = /^\\\\w*$/,\\n      rePropName = /[^.[\\\\]]+|\\\\[(?:(-?\\\\d+(?:\\\\.\\\\d+)?)|([\\\"'])((?:(?!\\\\2)[^\\\\n\\\\\\\\]|\\\\\\\\.)*?)\\\\2)\\\\]/g;\\n\\n  /**\\n   * Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns)\\n   * and those outlined by [`EscapeRegExpPattern`](http://ecma-international.org/ecma-262/6.0/#sec-escaperegexppattern).\\n   */\\n  var reRegExpChars = /^[:!,]|[\\\\\\\\^$.*+?()[\\\\]{}|\\\\/]|(^[0-9a-fA-Fnrtuvx])|([\\\\n\\\\r\\\\u2028\\\\u2029])/g,\\n      reHasRegExpChars = RegExp(reRegExpChars.source);\\n\\n  /** Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). */\\n  var reComboMark = /[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23]/g;\\n\\n  /** Used to match backslashes in property paths. */\\n  var reEscapeChar = /\\\\\\\\(\\\\\\\\)?/g;\\n\\n  /** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */\\n  var reEsTemplate = /\\\\$\\\\{([^\\\\\\\\}]*(?:\\\\\\\\.[^\\\\\\\\}]*)*)\\\\}/g;\\n\\n  /** Used to match `RegExp` flags from their coerced string values. */\\n  var reFlags = /\\\\w*$/;\\n\\n  /** Used to detect hexadecimal string values. */\\n  var reHasHexPrefix = /^0[xX]/;\\n\\n  /** Used to detect host constructors (Safari > 5). */\\n  var reIsHostCtor = /^\\\\[object .+?Constructor\\\\]$/;\\n\\n  /** Used to detect unsigned integer values. */\\n  var reIsUint = /^\\\\d+$/;\\n\\n  /** Used to match latin-1 supplementary letters (excluding mathematical operators). */\\n  var reLatin1 = /[\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]/g;\\n\\n  /** Used to ensure capturing order of template delimiters. */\\n  var reNoMatch = /($^)/;\\n\\n  /** Used to match unescaped characters in compiled string literals. */\\n  var reUnescapedString = /['\\\\n\\\\r\\\\u2028\\\\u2029\\\\\\\\]/g;\\n\\n  /** Used to match words to create compound words. */\\n  var reWords = (function() {\\n    var upper = '[A-Z\\\\\\\\xc0-\\\\\\\\xd6\\\\\\\\xd8-\\\\\\\\xde]',\\n        lower = '[a-z\\\\\\\\xdf-\\\\\\\\xf6\\\\\\\\xf8-\\\\\\\\xff]+';\\n\\n    return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g');\\n  }());\\n\\n  /** Used to assign default `context` object properties. */\\n  var contextProps = [\\n    'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array',\\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number',\\n    'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite',\\n    'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array',\\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap'\\n  ];\\n\\n  /** Used to make template sourceURLs easier to identify. */\\n  var templateCounter = -1;\\n\\n  /** Used to identify `toStringTag` values of typed arrays. */\\n  var typedArrayTags = {};\\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\\n  typedArrayTags[uint32Tag] = true;\\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\\n  typedArrayTags[dateTag] = typedArrayTags[errorTag] =\\n  typedArrayTags[funcTag] = typedArrayTags[mapTag] =\\n  typedArrayTags[numberTag] = typedArrayTags[objectTag] =\\n  typedArrayTags[regexpTag] = typedArrayTags[setTag] =\\n  typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\\n\\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\\n  var cloneableTags = {};\\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\\n  cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =\\n  cloneableTags[dateTag] = cloneableTags[float32Tag] =\\n  cloneableTags[float64Tag] = cloneableTags[int8Tag] =\\n  cloneableTags[int16Tag] = cloneableTags[int32Tag] =\\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\\n  cloneableTags[regexpTag] = cloneableTags[stringTag] =\\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\\n  cloneableTags[mapTag] = cloneableTags[setTag] =\\n  cloneableTags[weakMapTag] = false;\\n\\n  /** Used to map latin-1 supplementary letters to basic latin letters. */\\n  var deburredLetters = {\\n    '\\\\xc0': 'A',  '\\\\xc1': 'A', '\\\\xc2': 'A', '\\\\xc3': 'A', '\\\\xc4': 'A', '\\\\xc5': 'A',\\n    '\\\\xe0': 'a',  '\\\\xe1': 'a', '\\\\xe2': 'a', '\\\\xe3': 'a', '\\\\xe4': 'a', '\\\\xe5': 'a',\\n    '\\\\xc7': 'C',  '\\\\xe7': 'c',\\n    '\\\\xd0': 'D',  '\\\\xf0': 'd',\\n    '\\\\xc8': 'E',  '\\\\xc9': 'E', '\\\\xca': 'E', '\\\\xcb': 'E',\\n    '\\\\xe8': 'e',  '\\\\xe9': 'e', '\\\\xea': 'e', '\\\\xeb': 'e',\\n    '\\\\xcC': 'I',  '\\\\xcd': 'I', '\\\\xce': 'I', '\\\\xcf': 'I',\\n    '\\\\xeC': 'i',  '\\\\xed': 'i', '\\\\xee': 'i', '\\\\xef': 'i',\\n    '\\\\xd1': 'N',  '\\\\xf1': 'n',\\n    '\\\\xd2': 'O',  '\\\\xd3': 'O', '\\\\xd4': 'O', '\\\\xd5': 'O', '\\\\xd6': 'O', '\\\\xd8': 'O',\\n    '\\\\xf2': 'o',  '\\\\xf3': 'o', '\\\\xf4': 'o', '\\\\xf5': 'o', '\\\\xf6': 'o', '\\\\xf8': 'o',\\n    '\\\\xd9': 'U',  '\\\\xda': 'U', '\\\\xdb': 'U', '\\\\xdc': 'U',\\n    '\\\\xf9': 'u',  '\\\\xfa': 'u', '\\\\xfb': 'u', '\\\\xfc': 'u',\\n    '\\\\xdd': 'Y',  '\\\\xfd': 'y', '\\\\xff': 'y',\\n    '\\\\xc6': 'Ae', '\\\\xe6': 'ae',\\n    '\\\\xde': 'Th', '\\\\xfe': 'th',\\n    '\\\\xdf': 'ss'\\n  };\\n\\n  /** Used to map characters to HTML entities. */\\n  var htmlEscapes = {\\n    '&': '&amp;',\\n    '<': '&lt;',\\n    '>': '&gt;',\\n    '\\\"': '&quot;',\\n    \\\"'\\\": '&#39;',\\n    '`': '&#96;'\\n  };\\n\\n  /** Used to map HTML entities to characters. */\\n  var htmlUnescapes = {\\n    '&amp;': '&',\\n    '&lt;': '<',\\n    '&gt;': '>',\\n    '&quot;': '\\\"',\\n    '&#39;': \\\"'\\\",\\n    '&#96;': '`'\\n  };\\n\\n  /** Used to determine if values are of the language type `Object`. */\\n  var objectTypes = {\\n    'function': true,\\n    'object': true\\n  };\\n\\n  /** Used to escape characters for inclusion in compiled regexes. */\\n  var regexpEscapes = {\\n    '0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34',\\n    '5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39',\\n    'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46',\\n    'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66',\\n    'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78'\\n  };\\n\\n  /** Used to escape characters for inclusion in compiled string literals. */\\n  var stringEscapes = {\\n    '\\\\\\\\': '\\\\\\\\',\\n    \\\"'\\\": \\\"'\\\",\\n    '\\\\n': 'n',\\n    '\\\\r': 'r',\\n    '\\\\u2028': 'u2028',\\n    '\\\\u2029': 'u2029'\\n  };\\n\\n  /** Detect free variable `exports`. */\\n  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\\n\\n  /** Detect free variable `module`. */\\n  var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\\n\\n  /** Detect free variable `global` from Node.js. */\\n  var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;\\n\\n  /** Detect free variable `self`. */\\n  var freeSelf = objectTypes[typeof self] && self && self.Object && self;\\n\\n  /** Detect free variable `window`. */\\n  var freeWindow = objectTypes[typeof window] && window && window.Object && window;\\n\\n  /** Detect the popular CommonJS extension `module.exports`. */\\n  var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;\\n\\n  /**\\n   * Used as a reference to the global object.\\n   *\\n   * The `this` value is used if it's the global object to avoid Greasemonkey's\\n   * restricted `window` object, otherwise the `window` object is used.\\n   */\\n  var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;\\n\\n  /*--------------------------------------------------------------------------*/\\n\\n  /**\\n   * The base implementation of `compareAscending` which compares values and\\n   * sorts them in ascending order without guaranteeing a stable sort.\\n   *\\n   * @private\\n   * @param {*} value The value to compare.\\n   * @param {*} other The other value to compare.\\n   * @returns {number} Returns the sort order indicator for `value`.\\n   */\\n  function baseCompareAscending(value, other) {\\n    if (value !== other) {\\n      var valIsNull = value === null,\\n          valIsUndef = value === undefined,\\n          valIsReflexive = value === value;\\n\\n      var othIsNull = other === null,\\n          othIsUndef = other === undefined,\\n          othIsReflexive = other === other;\\n\\n      if ((value > other && !othIsNull) || !valIsReflexive ||\\n          (valIsNull && !othIsUndef && othIsReflexive) ||\\n          (valIsUndef && othIsReflexive)) {\\n        return 1;\\n      }\\n      if ((value < other && !valIsNull) || !othIsReflexive ||\\n          (othIsNull && !valIsUndef && valIsReflexive) ||\\n          (othIsUndef && valIsReflexive)) {\\n        return -1;\\n      }\\n    }\\n    return 0;\\n  }\\n\\n  /**\\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\\n   * support for callback shorthands and `this` binding.\\n   *\\n   * @private\\n   * @param {Array} array The array to search.\\n   * @param {Function} predicate The function invoked per iteration.\\n   * @param {boolean} [fromRight] Specify iterating from right to left.\\n   * @returns {number} Returns the index of the matched value, else `-1`.\\n   */\\n  function baseFindIndex(array, predicate, fromRight) {\\n    var length = array.length,\\n        index = fromRight ? length : -1;\\n\\n    while ((fromRight ? index-- : ++index < length)) {\\n      if (predicate(array[index], index, array)) {\\n        return index;\\n      }\\n    }\\n    return -1;\\n  }\\n\\n  /**\\n   * The base implementation of `_.indexOf` without support for binary searches.\\n   *\\n   * @private\\n   * @param {Array} array The array to search.\\n   * @param {*} value The value to search for.\\n   * @param {number} fromIndex The index to search from.\\n   * @returns {number} Returns the index of the matched value, else `-1`.\\n   */\\n  function baseIndexOf(array, value, fromIndex) {\\n    if (value !== value) {\\n      return indexOfNaN(array, fromIndex);\\n    }\\n    var index = fromIndex - 1,\\n        length = array.length;\\n\\n    while (++index < length) {\\n      if (array[index] === value) {\\n        return index;\\n      }\\n    }\\n    return -1;\\n  }\\n\\n  /**\\n   * The base implementation of `_.isFunction` without support for environments\\n   * with incorrect `typeof` results.\\n   *\\n   * @private\\n   * @param {*} value The value to check.\\n   * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n   */\\n  function baseIsFunction(value) {\\n    // Avoid a Chakra JIT bug in compatibility modes of IE 11.\\n    // See https://github.com/jashkenas/underscore/issues/1621 for more details.\\n    return typeof value == 'function' || false;\\n  }\\n\\n  /**\\n   * Converts `value` to a string if it's not one. An empty string is returned\\n   * for `null` or `undefined` values.\\n   *\\n   * @private\\n   * @param {*} value The value to process.\\n   * @returns {string} Returns the string.\\n   */\\n  function baseToString(value) {\\n    return value == null ? '' : (value + '');\\n  }\\n\\n  /**\\n   * Used by `_.trim` and `_.trimLeft` to get the index of the first character\\n   * of `string` that is not found in `chars`.\\n   *\\n   * @private\\n   * @param {string} string The string to inspect.\\n   * @param {string} chars The characters to find.\\n   * @returns {number} Returns the index of the first character not found in `chars`.\\n   */\\n  function charsLeftIndex(string, chars) {\\n    var index = -1,\\n        length = string.length;\\n\\n    while (++index < length && chars.indexOf(string.charAt(index)) > -1) {}\\n    return index;\\n  }\\n\\n  /**\\n   * Used by `_.trim` and `_.trimRight` to get the index of the last character\\n   * of `string` that is not found in `chars`.\\n   *\\n   * @private\\n   * @param {string} string The string to inspect.\\n   * @param {string} chars The characters to find.\\n   * @returns {number} Returns the index of the last character not found in `chars`.\\n   */\\n  function charsRightIndex(string, chars) {\\n    var index = string.length;\\n\\n    while (index-- && chars.indexOf(string.charAt(index)) > -1) {}\\n    return index;\\n  }\\n\\n  /**\\n   * Used by `_.sortBy` to compare transformed elements of a collection and stable\\n   * sort them in ascending order.\\n   *\\n   * @private\\n   * @param {Object} object The object to compare.\\n   * @param {Object} other The other object to compare.\\n   * @returns {number} Returns the sort order indicator for `object`.\\n   */\\n  function compareAscending(object, other) {\\n    return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index);\\n  }\\n\\n  /**\\n   * Used by `_.sortByOrder` to compare multiple properties of a value to another\\n   * and stable sort them.\\n   *\\n   * If `orders` is unspecified, all valuess are sorted in ascending order. Otherwise,\\n   * a value is sorted in ascending order if its corresponding order is \\\"asc\\\", and\\n   * descending if \\\"desc\\\".\\n   *\\n   * @private\\n   * @param {Object} object The object to compare.\\n   * @param {Object} other The other object to compare.\\n   * @param {boolean[]} orders The order to sort by for each property.\\n   * @returns {number} Returns the sort order indicator for `object`.\\n   */\\n  function compareMultiple(object, other, orders) {\\n    var index = -1,\\n        objCriteria = object.criteria,\\n        othCriteria = other.criteria,\\n        length = objCriteria.length,\\n        ordersLength = orders.length;\\n\\n    while (++index < length) {\\n      var result = baseCompareAscending(objCriteria[index], othCriteria[index]);\\n      if (result) {\\n        if (index >= ordersLength) {\\n          return result;\\n        }\\n        var order = orders[index];\\n        return result * ((order === 'asc' || order === true) ? 1 : -1);\\n      }\\n    }\\n    // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\\n    // that causes it, under certain circumstances, to provide the same value for\\n    // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\\n    // for more details.\\n    //\\n    // This also ensures a stable sort in V8 and other engines.\\n    // See https://code.google.com/p/v8/issues/detail?id=90 for more details.\\n    return object.index - other.index;\\n  }\\n\\n  /**\\n   * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters.\\n   *\\n   * @private\\n   * @param {string} letter The matched letter to deburr.\\n   * @returns {string} Returns the deburred letter.\\n   */\\n  function deburrLetter(letter) {\\n    return deburredLetters[letter];\\n  }\\n\\n  /**\\n   * Used by `_.escape` to convert characters to HTML entities.\\n   *\\n   * @private\\n   * @param {string} chr The matched character to escape.\\n   * @returns {string} Returns the escaped character.\\n   */\\n  function escapeHtmlChar(chr) {\\n    return htmlEscapes[chr];\\n  }\\n\\n  /**\\n   * Used by `_.escapeRegExp` to escape characters for inclusion in compiled regexes.\\n   *\\n   * @private\\n   * @param {string} chr The matched character to escape.\\n   * @param {string} leadingChar The capture group for a leading character.\\n   * @param {string} whitespaceChar The capture group for a whitespace character.\\n   * @returns {string} Returns the escaped character.\\n   */\\n  function escapeRegExpChar(chr, leadingChar, whitespaceChar) {\\n    if (leadingChar) {\\n      chr = regexpEscapes[chr];\\n    } else if (whitespaceChar) {\\n      chr = stringEscapes[chr];\\n    }\\n    return '\\\\\\\\' + chr;\\n  }\\n\\n  /**\\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\\n   *\\n   * @private\\n   * @param {string} chr The matched character to escape.\\n   * @returns {string} Returns the escaped character.\\n   */\\n  function escapeStringChar(chr) {\\n    return '\\\\\\\\' + stringEscapes[chr];\\n  }\\n\\n  /**\\n   * Gets the index at which the first occurrence of `NaN` is found in `array`.\\n   *\\n   * @private\\n   * @param {Array} array The array to search.\\n   * @param {number} fromIndex The index to search from.\\n   * @param {boolean} [fromRight] Specify iterating from right to left.\\n   * @returns {number} Returns the index of the matched `NaN`, else `-1`.\\n   */\\n  function indexOfNaN(array, fromIndex, fromRight) {\\n    var length = array.length,\\n        index = fromIndex + (fromRight ? 0 : -1);\\n\\n    while ((fromRight ? index-- : ++index < length)) {\\n      var other = array[index];\\n      if (other !== other) {\\n        return index;\\n      }\\n    }\\n    return -1;\\n  }\\n\\n  /**\\n   * Checks if `value` is object-like.\\n   *\\n   * @private\\n   * @param {*} value The value to check.\\n   * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\\n   */\\n  function isObjectLike(value) {\\n    return !!value && typeof value == 'object';\\n  }\\n\\n  /**\\n   * Used by `trimmedLeftIndex` and `trimmedRightIndex` to determine if a\\n   * character code is whitespace.\\n   *\\n   * @private\\n   * @param {number} charCode The character code to inspect.\\n   * @returns {boolean} Returns `true` if `charCode` is whitespace, else `false`.\\n   */\\n  function isSpace(charCode) {\\n    return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 ||\\n      (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279)));\\n  }\\n\\n  /**\\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\\n   * and returns an array of their indexes.\\n   *\\n   * @private\\n   * @param {Array} array The array to modify.\\n   * @param {*} placeholder The placeholder to replace.\\n   * @returns {Array} Returns the new array of placeholder indexes.\\n   */\\n  function replaceHolders(array, placeholder) {\\n    var index = -1,\\n        length = array.length,\\n        resIndex = -1,\\n        result = [];\\n\\n    while (++index < length) {\\n      if (array[index] === placeholder) {\\n        array[index] = PLACEHOLDER;\\n        result[++resIndex] = index;\\n      }\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * An implementation of `_.uniq` optimized for sorted arrays without support\\n   * for callback shorthands and `this` binding.\\n   *\\n   * @private\\n   * @param {Array} array The array to inspect.\\n   * @param {Function} [iteratee] The function invoked per iteration.\\n   * @returns {Array} Returns the new duplicate-value-free array.\\n   */\\n  function sortedUniq(array, iteratee) {\\n    var seen,\\n        index = -1,\\n        length = array.length,\\n        resIndex = -1,\\n        result = [];\\n\\n    while (++index < length) {\\n      var value = array[index],\\n          computed = iteratee ? iteratee(value, index, array) : value;\\n\\n      if (!index || seen !== computed) {\\n        seen = computed;\\n        result[++resIndex] = value;\\n      }\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * Used by `_.trim` and `_.trimLeft` to get the index of the first non-whitespace\\n   * character of `string`.\\n   *\\n   * @private\\n   * @param {string} string The string to inspect.\\n   * @returns {number} Returns the index of the first non-whitespace character.\\n   */\\n  function trimmedLeftIndex(string) {\\n    var index = -1,\\n        length = string.length;\\n\\n    while (++index < length && isSpace(string.charCodeAt(index))) {}\\n    return index;\\n  }\\n\\n  /**\\n   * Used by `_.trim` and `_.trimRight` to get the index of the last non-whitespace\\n   * character of `string`.\\n   *\\n   * @private\\n   * @param {string} string The string to inspect.\\n   * @returns {number} Returns the index of the last non-whitespace character.\\n   */\\n  function trimmedRightIndex(string) {\\n    var index = string.length;\\n\\n    while (index-- && isSpace(string.charCodeAt(index))) {}\\n    return index;\\n  }\\n\\n  /**\\n   * Used by `_.unescape` to convert HTML entities to characters.\\n   *\\n   * @private\\n   * @param {string} chr The matched character to unescape.\\n   * @returns {string} Returns the unescaped character.\\n   */\\n  function unescapeHtmlChar(chr) {\\n    return htmlUnescapes[chr];\\n  }\\n\\n  /*--------------------------------------------------------------------------*/\\n\\n  /**\\n   * Create a new pristine `lodash` function using the given `context` object.\\n   *\\n   * @static\\n   * @memberOf _\\n   * @category Utility\\n   * @param {Object} [context=root] The context object.\\n   * @returns {Function} Returns a new `lodash` function.\\n   * @example\\n   *\\n   * _.mixin({ 'foo': _.constant('foo') });\\n   *\\n   * var lodash = _.runInContext();\\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\\n   *\\n   * _.isFunction(_.foo);\\n   * // => true\\n   * _.isFunction(_.bar);\\n   * // => false\\n   *\\n   * lodash.isFunction(lodash.foo);\\n   * // => false\\n   * lodash.isFunction(lodash.bar);\\n   * // => true\\n   *\\n   * // using `context` to mock `Date#getTime` use in `_.now`\\n   * var mock = _.runInContext({\\n   *   'Date': function() {\\n   *     return { 'getTime': getTimeMock };\\n   *   }\\n   * });\\n   *\\n   * // or creating a suped-up `defer` in Node.js\\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\\n   */\\n  function runInContext(context) {\\n    // Avoid issues with some ES3 environments that attempt to use values, named\\n    // after built-in constructors like `Object`, for the creation of literals.\\n    // ES5 clears this up by stating that literals must use built-in constructors.\\n    // See https://es5.github.io/#x11.1.5 for more details.\\n    context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;\\n\\n    /** Native constructor references. */\\n    var Array = context.Array,\\n        Date = context.Date,\\n        Error = context.Error,\\n        Function = context.Function,\\n        Math = context.Math,\\n        Number = context.Number,\\n        Object = context.Object,\\n        RegExp = context.RegExp,\\n        String = context.String,\\n        TypeError = context.TypeError;\\n\\n    /** Used for native method references. */\\n    var arrayProto = Array.prototype,\\n        objectProto = Object.prototype,\\n        stringProto = String.prototype;\\n\\n    /** Used to resolve the decompiled source of functions. */\\n    var fnToString = Function.prototype.toString;\\n\\n    /** Used to check objects for own properties. */\\n    var hasOwnProperty = objectProto.hasOwnProperty;\\n\\n    /** Used to generate unique IDs. */\\n    var idCounter = 0;\\n\\n    /**\\n     * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\\n     * of values.\\n     */\\n    var objToString = objectProto.toString;\\n\\n    /** Used to restore the original `_` reference in `_.noConflict`. */\\n    var oldDash = root._;\\n\\n    /** Used to detect if a method is native. */\\n    var reIsNative = RegExp('^' +\\n      fnToString.call(hasOwnProperty).replace(/[\\\\\\\\^$.*+?()[\\\\]{}|]/g, '\\\\\\\\$&')\\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\\\\\\\()| for .+?(?=\\\\\\\\\\\\])/g, '$1.*?') + '$'\\n    );\\n\\n    /** Native method references. */\\n    var ArrayBuffer = context.ArrayBuffer,\\n        clearTimeout = context.clearTimeout,\\n        parseFloat = context.parseFloat,\\n        pow = Math.pow,\\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\\n        Set = getNative(context, 'Set'),\\n        setTimeout = context.setTimeout,\\n        splice = arrayProto.splice,\\n        Uint8Array = context.Uint8Array,\\n        WeakMap = getNative(context, 'WeakMap');\\n\\n    /* Native method references for those with the same name as other `lodash` methods. */\\n    var nativeCeil = Math.ceil,\\n        nativeCreate = getNative(Object, 'create'),\\n        nativeFloor = Math.floor,\\n        nativeIsArray = getNative(Array, 'isArray'),\\n        nativeIsFinite = context.isFinite,\\n        nativeKeys = getNative(Object, 'keys'),\\n        nativeMax = Math.max,\\n        nativeMin = Math.min,\\n        nativeNow = getNative(Date, 'now'),\\n        nativeParseInt = context.parseInt,\\n        nativeRandom = Math.random;\\n\\n    /** Used as references for `-Infinity` and `Infinity`. */\\n    var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY,\\n        POSITIVE_INFINITY = Number.POSITIVE_INFINITY;\\n\\n    /** Used as references for the maximum length and index of an array. */\\n    var MAX_ARRAY_LENGTH = 4294967295,\\n        MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\\n        HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\\n\\n    /**\\n     * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\\n     * of an array-like value.\\n     */\\n    var MAX_SAFE_INTEGER = 9007199254740991;\\n\\n    /** Used to store function metadata. */\\n    var metaMap = WeakMap && new WeakMap;\\n\\n    /** Used to lookup unminified function names. */\\n    var realNames = {};\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a `lodash` object which wraps `value` to enable implicit chaining.\\n     * Methods that operate on and return arrays, collections, and functions can\\n     * be chained together. Methods that retrieve a single value or may return a\\n     * primitive value will automatically end the chain returning the unwrapped\\n     * value. Explicit chaining may be enabled using `_.chain`. The execution of\\n     * chained methods is lazy, that is, execution is deferred until `_#value`\\n     * is implicitly or explicitly called.\\n     *\\n     * Lazy evaluation allows several methods to support shortcut fusion. Shortcut\\n     * fusion is an optimization strategy which merge iteratee calls; this can help\\n     * to avoid the creation of intermediate data structures and greatly reduce the\\n     * number of iteratee executions.\\n     *\\n     * Chaining is supported in custom builds as long as the `_#value` method is\\n     * directly or indirectly included in the build.\\n     *\\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\\n     *\\n     * The wrapper `Array` methods are:\\n     * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`,\\n     * `splice`, and `unshift`\\n     *\\n     * The wrapper `String` methods are:\\n     * `replace` and `split`\\n     *\\n     * The wrapper methods that support shortcut fusion are:\\n     * `compact`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`,\\n     * `first`, `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`,\\n     * `slice`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `toArray`,\\n     * and `where`\\n     *\\n     * The chainable wrapper methods are:\\n     * `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`,\\n     * `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`,\\n     * `countBy`, `create`, `curry`, `debounce`, `defaults`, `defaultsDeep`,\\n     * `defer`, `delay`, `difference`, `drop`, `dropRight`, `dropRightWhile`,\\n     * `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`,\\n     * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,\\n     * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,\\n     * `invoke`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`,\\n     * `matchesProperty`, `memoize`, `merge`, `method`, `methodOf`, `mixin`,\\n     * `modArgs`, `negate`, `omit`, `once`, `pairs`, `partial`, `partialRight`,\\n     * `partition`, `pick`, `plant`, `pluck`, `property`, `propertyOf`, `pull`,\\n     * `pullAt`, `push`, `range`, `rearg`, `reject`, `remove`, `rest`, `restParam`,\\n     * `reverse`, `set`, `shuffle`, `slice`, `sort`, `sortBy`, `sortByAll`,\\n     * `sortByOrder`, `splice`, `spread`, `take`, `takeRight`, `takeRightWhile`,\\n     * `takeWhile`, `tap`, `throttle`, `thru`, `times`, `toArray`, `toPlainObject`,\\n     * `transform`, `union`, `uniq`, `unshift`, `unzip`, `unzipWith`, `values`,\\n     * `valuesIn`, `where`, `without`, `wrap`, `xor`, `zip`, `zipObject`, `zipWith`\\n     *\\n     * The wrapper methods that are **not** chainable by default are:\\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clone`, `cloneDeep`,\\n     * `deburr`, `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`,\\n     * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`,\\n     * `floor`, `get`, `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`,\\n     * `inRange`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,\\n     * `isEmpty`, `isEqual`, `isError`, `isFinite` `isFunction`, `isMatch`,\\n     * `isNative`, `isNaN`, `isNull`, `isNumber`, `isObject`, `isPlainObject`,\\n     * `isRegExp`, `isString`, `isUndefined`, `isTypedArray`, `join`, `kebabCase`,\\n     * `last`, `lastIndexOf`, `lt`, `lte`, `max`, `min`, `noConflict`, `noop`,\\n     * `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`, `random`, `reduce`,\\n     * `reduceRight`, `repeat`, `result`, `round`, `runInContext`, `shift`, `size`,\\n     * `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`, `startCase`,\\n     * `startsWith`, `sum`, `template`, `trim`, `trimLeft`, `trimRight`, `trunc`,\\n     * `unescape`, `uniqueId`, `value`, and `words`\\n     *\\n     * The wrapper method `sample` will return a wrapped value when `n` is provided,\\n     * otherwise an unwrapped value is returned.\\n     *\\n     * @name _\\n     * @constructor\\n     * @category Chain\\n     * @param {*} value The value to wrap in a `lodash` instance.\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var wrapped = _([1, 2, 3]);\\n     *\\n     * // returns an unwrapped value\\n     * wrapped.reduce(function(total, n) {\\n     *   return total + n;\\n     * });\\n     * // => 6\\n     *\\n     * // returns a wrapped value\\n     * var squares = wrapped.map(function(n) {\\n     *   return n * n;\\n     * });\\n     *\\n     * _.isArray(squares);\\n     * // => false\\n     *\\n     * _.isArray(squares.value());\\n     * // => true\\n     */\\n    function lodash(value) {\\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\\n        if (value instanceof LodashWrapper) {\\n          return value;\\n        }\\n        if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) {\\n          return wrapperClone(value);\\n        }\\n      }\\n      return new LodashWrapper(value);\\n    }\\n\\n    /**\\n     * The function whose prototype all chaining wrappers inherit from.\\n     *\\n     * @private\\n     */\\n    function baseLodash() {\\n      // No operation performed.\\n    }\\n\\n    /**\\n     * The base constructor for creating `lodash` wrapper objects.\\n     *\\n     * @private\\n     * @param {*} value The value to wrap.\\n     * @param {boolean} [chainAll] Enable chaining for all wrapper methods.\\n     * @param {Array} [actions=[]] Actions to peform to resolve the unwrapped value.\\n     */\\n    function LodashWrapper(value, chainAll, actions) {\\n      this.__wrapped__ = value;\\n      this.__actions__ = actions || [];\\n      this.__chain__ = !!chainAll;\\n    }\\n\\n    /**\\n     * An object environment feature flags.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @type Object\\n     */\\n    var support = lodash.support = {};\\n\\n    /**\\n     * By default, the template delimiters used by lodash are like those in\\n     * embedded Ruby (ERB). Change the following template settings to use\\n     * alternative delimiters.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @type Object\\n     */\\n    lodash.templateSettings = {\\n\\n      /**\\n       * Used to detect `data` property values to be HTML-escaped.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type RegExp\\n       */\\n      'escape': reEscape,\\n\\n      /**\\n       * Used to detect code to be evaluated.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type RegExp\\n       */\\n      'evaluate': reEvaluate,\\n\\n      /**\\n       * Used to detect `data` property values to inject.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type RegExp\\n       */\\n      'interpolate': reInterpolate,\\n\\n      /**\\n       * Used to reference the data object in the template text.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type string\\n       */\\n      'variable': '',\\n\\n      /**\\n       * Used to import variables into the compiled template.\\n       *\\n       * @memberOf _.templateSettings\\n       * @type Object\\n       */\\n      'imports': {\\n\\n        /**\\n         * A reference to the `lodash` function.\\n         *\\n         * @memberOf _.templateSettings.imports\\n         * @type Function\\n         */\\n        '_': lodash\\n      }\\n    };\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\\n     *\\n     * @private\\n     * @param {*} value The value to wrap.\\n     */\\n    function LazyWrapper(value) {\\n      this.__wrapped__ = value;\\n      this.__actions__ = [];\\n      this.__dir__ = 1;\\n      this.__filtered__ = false;\\n      this.__iteratees__ = [];\\n      this.__takeCount__ = POSITIVE_INFINITY;\\n      this.__views__ = [];\\n    }\\n\\n    /**\\n     * Creates a clone of the lazy wrapper object.\\n     *\\n     * @private\\n     * @name clone\\n     * @memberOf LazyWrapper\\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\\n     */\\n    function lazyClone() {\\n      var result = new LazyWrapper(this.__wrapped__);\\n      result.__actions__ = arrayCopy(this.__actions__);\\n      result.__dir__ = this.__dir__;\\n      result.__filtered__ = this.__filtered__;\\n      result.__iteratees__ = arrayCopy(this.__iteratees__);\\n      result.__takeCount__ = this.__takeCount__;\\n      result.__views__ = arrayCopy(this.__views__);\\n      return result;\\n    }\\n\\n    /**\\n     * Reverses the direction of lazy iteration.\\n     *\\n     * @private\\n     * @name reverse\\n     * @memberOf LazyWrapper\\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\\n     */\\n    function lazyReverse() {\\n      if (this.__filtered__) {\\n        var result = new LazyWrapper(this);\\n        result.__dir__ = -1;\\n        result.__filtered__ = true;\\n      } else {\\n        result = this.clone();\\n        result.__dir__ *= -1;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Extracts the unwrapped value from its lazy wrapper.\\n     *\\n     * @private\\n     * @name value\\n     * @memberOf LazyWrapper\\n     * @returns {*} Returns the unwrapped value.\\n     */\\n    function lazyValue() {\\n      var array = this.__wrapped__.value(),\\n          dir = this.__dir__,\\n          isArr = isArray(array),\\n          isRight = dir < 0,\\n          arrLength = isArr ? array.length : 0,\\n          view = getView(0, arrLength, this.__views__),\\n          start = view.start,\\n          end = view.end,\\n          length = end - start,\\n          index = isRight ? end : (start - 1),\\n          iteratees = this.__iteratees__,\\n          iterLength = iteratees.length,\\n          resIndex = 0,\\n          takeCount = nativeMin(length, this.__takeCount__);\\n\\n      if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) {\\n        return baseWrapperValue((isRight && isArr) ? array.reverse() : array, this.__actions__);\\n      }\\n      var result = [];\\n\\n      outer:\\n      while (length-- && resIndex < takeCount) {\\n        index += dir;\\n\\n        var iterIndex = -1,\\n            value = array[index];\\n\\n        while (++iterIndex < iterLength) {\\n          var data = iteratees[iterIndex],\\n              iteratee = data.iteratee,\\n              type = data.type,\\n              computed = iteratee(value);\\n\\n          if (type == LAZY_MAP_FLAG) {\\n            value = computed;\\n          } else if (!computed) {\\n            if (type == LAZY_FILTER_FLAG) {\\n              continue outer;\\n            } else {\\n              break outer;\\n            }\\n          }\\n        }\\n        result[resIndex++] = value;\\n      }\\n      return result;\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a cache object to store key/value pairs.\\n     *\\n     * @private\\n     * @static\\n     * @name Cache\\n     * @memberOf _.memoize\\n     */\\n    function MapCache() {\\n      this.__data__ = {};\\n    }\\n\\n    /**\\n     * Removes `key` and its value from the cache.\\n     *\\n     * @private\\n     * @name delete\\n     * @memberOf _.memoize.Cache\\n     * @param {string} key The key of the value to remove.\\n     * @returns {boolean} Returns `true` if the entry was removed successfully, else `false`.\\n     */\\n    function mapDelete(key) {\\n      return this.has(key) && delete this.__data__[key];\\n    }\\n\\n    /**\\n     * Gets the cached value for `key`.\\n     *\\n     * @private\\n     * @name get\\n     * @memberOf _.memoize.Cache\\n     * @param {string} key The key of the value to get.\\n     * @returns {*} Returns the cached value.\\n     */\\n    function mapGet(key) {\\n      return key == '__proto__' ? undefined : this.__data__[key];\\n    }\\n\\n    /**\\n     * Checks if a cached value for `key` exists.\\n     *\\n     * @private\\n     * @name has\\n     * @memberOf _.memoize.Cache\\n     * @param {string} key The key of the entry to check.\\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\\n     */\\n    function mapHas(key) {\\n      return key != '__proto__' && hasOwnProperty.call(this.__data__, key);\\n    }\\n\\n    /**\\n     * Sets `value` to `key` of the cache.\\n     *\\n     * @private\\n     * @name set\\n     * @memberOf _.memoize.Cache\\n     * @param {string} key The key of the value to cache.\\n     * @param {*} value The value to cache.\\n     * @returns {Object} Returns the cache object.\\n     */\\n    function mapSet(key, value) {\\n      if (key != '__proto__') {\\n        this.__data__[key] = value;\\n      }\\n      return this;\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     *\\n     * Creates a cache object to store unique values.\\n     *\\n     * @private\\n     * @param {Array} [values] The values to cache.\\n     */\\n    function SetCache(values) {\\n      var length = values ? values.length : 0;\\n\\n      this.data = { 'hash': nativeCreate(null), 'set': new Set };\\n      while (length--) {\\n        this.push(values[length]);\\n      }\\n    }\\n\\n    /**\\n     * Checks if `value` is in `cache` mimicking the return signature of\\n     * `_.indexOf` by returning `0` if the value is found, else `-1`.\\n     *\\n     * @private\\n     * @param {Object} cache The cache to search.\\n     * @param {*} value The value to search for.\\n     * @returns {number} Returns `0` if `value` is found, else `-1`.\\n     */\\n    function cacheIndexOf(cache, value) {\\n      var data = cache.data,\\n          result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value];\\n\\n      return result ? 0 : -1;\\n    }\\n\\n    /**\\n     * Adds `value` to the cache.\\n     *\\n     * @private\\n     * @name push\\n     * @memberOf SetCache\\n     * @param {*} value The value to cache.\\n     */\\n    function cachePush(value) {\\n      var data = this.data;\\n      if (typeof value == 'string' || isObject(value)) {\\n        data.set.add(value);\\n      } else {\\n        data.hash[value] = true;\\n      }\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a new array joining `array` with `other`.\\n     *\\n     * @private\\n     * @param {Array} array The array to join.\\n     * @param {Array} other The other array to join.\\n     * @returns {Array} Returns the new concatenated array.\\n     */\\n    function arrayConcat(array, other) {\\n      var index = -1,\\n          length = array.length,\\n          othIndex = -1,\\n          othLength = other.length,\\n          result = Array(length + othLength);\\n\\n      while (++index < length) {\\n        result[index] = array[index];\\n      }\\n      while (++othIndex < othLength) {\\n        result[index++] = other[othIndex];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Copies the values of `source` to `array`.\\n     *\\n     * @private\\n     * @param {Array} source The array to copy values from.\\n     * @param {Array} [array=[]] The array to copy values to.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function arrayCopy(source, array) {\\n      var index = -1,\\n          length = source.length;\\n\\n      array || (array = Array(length));\\n      while (++index < length) {\\n        array[index] = source[index];\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * A specialized version of `_.forEach` for arrays without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function arrayEach(array, iteratee) {\\n      var index = -1,\\n          length = array.length;\\n\\n      while (++index < length) {\\n        if (iteratee(array[index], index, array) === false) {\\n          break;\\n        }\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * A specialized version of `_.forEachRight` for arrays without support for\\n     * callback shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function arrayEachRight(array, iteratee) {\\n      var length = array.length;\\n\\n      while (length--) {\\n        if (iteratee(array[length], length, array) === false) {\\n          break;\\n        }\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * A specialized version of `_.every` for arrays without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\\n     *  else `false`.\\n     */\\n    function arrayEvery(array, predicate) {\\n      var index = -1,\\n          length = array.length;\\n\\n      while (++index < length) {\\n        if (!predicate(array[index], index, array)) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    }\\n\\n    /**\\n     * A specialized version of `baseExtremum` for arrays which invokes `iteratee`\\n     * with one argument: (value).\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {Function} comparator The function used to compare values.\\n     * @param {*} exValue The initial extremum value.\\n     * @returns {*} Returns the extremum value.\\n     */\\n    function arrayExtremum(array, iteratee, comparator, exValue) {\\n      var index = -1,\\n          length = array.length,\\n          computed = exValue,\\n          result = computed;\\n\\n      while (++index < length) {\\n        var value = array[index],\\n            current = +iteratee(value);\\n\\n        if (comparator(current, computed)) {\\n          computed = current;\\n          result = value;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * A specialized version of `_.filter` for arrays without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {Array} Returns the new filtered array.\\n     */\\n    function arrayFilter(array, predicate) {\\n      var index = -1,\\n          length = array.length,\\n          resIndex = -1,\\n          result = [];\\n\\n      while (++index < length) {\\n        var value = array[index];\\n        if (predicate(value, index, array)) {\\n          result[++resIndex] = value;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * A specialized version of `_.map` for arrays without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array} Returns the new mapped array.\\n     */\\n    function arrayMap(array, iteratee) {\\n      var index = -1,\\n          length = array.length,\\n          result = Array(length);\\n\\n      while (++index < length) {\\n        result[index] = iteratee(array[index], index, array);\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Appends the elements of `values` to `array`.\\n     *\\n     * @private\\n     * @param {Array} array The array to modify.\\n     * @param {Array} values The values to append.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function arrayPush(array, values) {\\n      var index = -1,\\n          length = values.length,\\n          offset = array.length;\\n\\n      while (++index < length) {\\n        array[offset + index] = values[index];\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * A specialized version of `_.reduce` for arrays without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {*} [accumulator] The initial value.\\n     * @param {boolean} [initFromArray] Specify using the first element of `array`\\n     *  as the initial value.\\n     * @returns {*} Returns the accumulated value.\\n     */\\n    function arrayReduce(array, iteratee, accumulator, initFromArray) {\\n      var index = -1,\\n          length = array.length;\\n\\n      if (initFromArray && length) {\\n        accumulator = array[++index];\\n      }\\n      while (++index < length) {\\n        accumulator = iteratee(accumulator, array[index], index, array);\\n      }\\n      return accumulator;\\n    }\\n\\n    /**\\n     * A specialized version of `_.reduceRight` for arrays without support for\\n     * callback shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {*} [accumulator] The initial value.\\n     * @param {boolean} [initFromArray] Specify using the last element of `array`\\n     *  as the initial value.\\n     * @returns {*} Returns the accumulated value.\\n     */\\n    function arrayReduceRight(array, iteratee, accumulator, initFromArray) {\\n      var length = array.length;\\n      if (initFromArray && length) {\\n        accumulator = array[--length];\\n      }\\n      while (length--) {\\n        accumulator = iteratee(accumulator, array[length], length, array);\\n      }\\n      return accumulator;\\n    }\\n\\n    /**\\n     * A specialized version of `_.some` for arrays without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\\n     *  else `false`.\\n     */\\n    function arraySome(array, predicate) {\\n      var index = -1,\\n          length = array.length;\\n\\n      while (++index < length) {\\n        if (predicate(array[index], index, array)) {\\n          return true;\\n        }\\n      }\\n      return false;\\n    }\\n\\n    /**\\n     * A specialized version of `_.sum` for arrays without support for callback\\n     * shorthands and `this` binding..\\n     *\\n     * @private\\n     * @param {Array} array The array to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {number} Returns the sum.\\n     */\\n    function arraySum(array, iteratee) {\\n      var length = array.length,\\n          result = 0;\\n\\n      while (length--) {\\n        result += +iteratee(array[length]) || 0;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Used by `_.defaults` to customize its `_.assign` use.\\n     *\\n     * @private\\n     * @param {*} objectValue The destination object property value.\\n     * @param {*} sourceValue The source object property value.\\n     * @returns {*} Returns the value to assign to the destination object.\\n     */\\n    function assignDefaults(objectValue, sourceValue) {\\n      return objectValue === undefined ? sourceValue : objectValue;\\n    }\\n\\n    /**\\n     * Used by `_.template` to customize its `_.assign` use.\\n     *\\n     * **Note:** This function is like `assignDefaults` except that it ignores\\n     * inherited property values when checking if a property is `undefined`.\\n     *\\n     * @private\\n     * @param {*} objectValue The destination object property value.\\n     * @param {*} sourceValue The source object property value.\\n     * @param {string} key The key associated with the object and source values.\\n     * @param {Object} object The destination object.\\n     * @returns {*} Returns the value to assign to the destination object.\\n     */\\n    function assignOwnDefaults(objectValue, sourceValue, key, object) {\\n      return (objectValue === undefined || !hasOwnProperty.call(object, key))\\n        ? sourceValue\\n        : objectValue;\\n    }\\n\\n    /**\\n     * A specialized version of `_.assign` for customizing assigned values without\\n     * support for argument juggling, multiple sources, and `this` binding `customizer`\\n     * functions.\\n     *\\n     * @private\\n     * @param {Object} object The destination object.\\n     * @param {Object} source The source object.\\n     * @param {Function} customizer The function to customize assigned values.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function assignWith(object, source, customizer) {\\n      var index = -1,\\n          props = keys(source),\\n          length = props.length;\\n\\n      while (++index < length) {\\n        var key = props[index],\\n            value = object[key],\\n            result = customizer(value, source[key], key, object, source);\\n\\n        if ((result === result ? (result !== value) : (value === value)) ||\\n            (value === undefined && !(key in object))) {\\n          object[key] = result;\\n        }\\n      }\\n      return object;\\n    }\\n\\n    /**\\n     * The base implementation of `_.assign` without support for argument juggling,\\n     * multiple sources, and `customizer` functions.\\n     *\\n     * @private\\n     * @param {Object} object The destination object.\\n     * @param {Object} source The source object.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseAssign(object, source) {\\n      return source == null\\n        ? object\\n        : baseCopy(source, keys(source), object);\\n    }\\n\\n    /**\\n     * The base implementation of `_.at` without support for string collections\\n     * and individual key arguments.\\n     *\\n     * @private\\n     * @param {Array|Object} collection The collection to iterate over.\\n     * @param {number[]|string[]} props The property names or indexes of elements to pick.\\n     * @returns {Array} Returns the new array of picked elements.\\n     */\\n    function baseAt(collection, props) {\\n      var index = -1,\\n          isNil = collection == null,\\n          isArr = !isNil && isArrayLike(collection),\\n          length = isArr ? collection.length : 0,\\n          propsLength = props.length,\\n          result = Array(propsLength);\\n\\n      while(++index < propsLength) {\\n        var key = props[index];\\n        if (isArr) {\\n          result[index] = isIndex(key, length) ? collection[key] : undefined;\\n        } else {\\n          result[index] = isNil ? undefined : collection[key];\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Copies properties of `source` to `object`.\\n     *\\n     * @private\\n     * @param {Object} source The object to copy properties from.\\n     * @param {Array} props The property names to copy.\\n     * @param {Object} [object={}] The object to copy properties to.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseCopy(source, props, object) {\\n      object || (object = {});\\n\\n      var index = -1,\\n          length = props.length;\\n\\n      while (++index < length) {\\n        var key = props[index];\\n        object[key] = source[key];\\n      }\\n      return object;\\n    }\\n\\n    /**\\n     * The base implementation of `_.callback` which supports specifying the\\n     * number of arguments to provide to `func`.\\n     *\\n     * @private\\n     * @param {*} [func=_.identity] The value to convert to a callback.\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @param {number} [argCount] The number of arguments to provide to `func`.\\n     * @returns {Function} Returns the callback.\\n     */\\n    function baseCallback(func, thisArg, argCount) {\\n      var type = typeof func;\\n      if (type == 'function') {\\n        return thisArg === undefined\\n          ? func\\n          : bindCallback(func, thisArg, argCount);\\n      }\\n      if (func == null) {\\n        return identity;\\n      }\\n      if (type == 'object') {\\n        return baseMatches(func);\\n      }\\n      return thisArg === undefined\\n        ? property(func)\\n        : baseMatchesProperty(func, thisArg);\\n    }\\n\\n    /**\\n     * The base implementation of `_.clone` without support for argument juggling\\n     * and `this` binding `customizer` functions.\\n     *\\n     * @private\\n     * @param {*} value The value to clone.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @param {Function} [customizer] The function to customize cloning values.\\n     * @param {string} [key] The key of `value`.\\n     * @param {Object} [object] The object `value` belongs to.\\n     * @param {Array} [stackA=[]] Tracks traversed source objects.\\n     * @param {Array} [stackB=[]] Associates clones with source counterparts.\\n     * @returns {*} Returns the cloned value.\\n     */\\n    function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {\\n      var result;\\n      if (customizer) {\\n        result = object ? customizer(value, key, object) : customizer(value);\\n      }\\n      if (result !== undefined) {\\n        return result;\\n      }\\n      if (!isObject(value)) {\\n        return value;\\n      }\\n      var isArr = isArray(value);\\n      if (isArr) {\\n        result = initCloneArray(value);\\n        if (!isDeep) {\\n          return arrayCopy(value, result);\\n        }\\n      } else {\\n        var tag = objToString.call(value),\\n            isFunc = tag == funcTag;\\n\\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\\n          result = initCloneObject(isFunc ? {} : value);\\n          if (!isDeep) {\\n            return baseAssign(result, value);\\n          }\\n        } else {\\n          return cloneableTags[tag]\\n            ? initCloneByTag(value, tag, isDeep)\\n            : (object ? value : {});\\n        }\\n      }\\n      // Check for circular references and return its corresponding clone.\\n      stackA || (stackA = []);\\n      stackB || (stackB = []);\\n\\n      var length = stackA.length;\\n      while (length--) {\\n        if (stackA[length] == value) {\\n          return stackB[length];\\n        }\\n      }\\n      // Add the source value to the stack of traversed objects and associate it with its clone.\\n      stackA.push(value);\\n      stackB.push(result);\\n\\n      // Recursively populate clone (susceptible to call stack limits).\\n      (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {\\n        result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.create` without support for assigning\\n     * properties to the created object.\\n     *\\n     * @private\\n     * @param {Object} prototype The object to inherit from.\\n     * @returns {Object} Returns the new object.\\n     */\\n    var baseCreate = (function() {\\n      function object() {}\\n      return function(prototype) {\\n        if (isObject(prototype)) {\\n          object.prototype = prototype;\\n          var result = new object;\\n          object.prototype = undefined;\\n        }\\n        return result || {};\\n      };\\n    }());\\n\\n    /**\\n     * The base implementation of `_.delay` and `_.defer` which accepts an index\\n     * of where to slice the arguments to provide to `func`.\\n     *\\n     * @private\\n     * @param {Function} func The function to delay.\\n     * @param {number} wait The number of milliseconds to delay invocation.\\n     * @param {Object} args The arguments provide to `func`.\\n     * @returns {number} Returns the timer id.\\n     */\\n    function baseDelay(func, wait, args) {\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\\n    }\\n\\n    /**\\n     * The base implementation of `_.difference` which accepts a single array\\n     * of values to exclude.\\n     *\\n     * @private\\n     * @param {Array} array The array to inspect.\\n     * @param {Array} values The values to exclude.\\n     * @returns {Array} Returns the new array of filtered values.\\n     */\\n    function baseDifference(array, values) {\\n      var length = array ? array.length : 0,\\n          result = [];\\n\\n      if (!length) {\\n        return result;\\n      }\\n      var index = -1,\\n          indexOf = getIndexOf(),\\n          isCommon = indexOf == baseIndexOf,\\n          cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null,\\n          valuesLength = values.length;\\n\\n      if (cache) {\\n        indexOf = cacheIndexOf;\\n        isCommon = false;\\n        values = cache;\\n      }\\n      outer:\\n      while (++index < length) {\\n        var value = array[index];\\n\\n        if (isCommon && value === value) {\\n          var valuesIndex = valuesLength;\\n          while (valuesIndex--) {\\n            if (values[valuesIndex] === value) {\\n              continue outer;\\n            }\\n          }\\n          result.push(value);\\n        }\\n        else if (indexOf(values, value, 0) < 0) {\\n          result.push(value);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.forEach` without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array|Object|string} Returns `collection`.\\n     */\\n    var baseEach = createBaseEach(baseForOwn);\\n\\n    /**\\n     * The base implementation of `_.forEachRight` without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array|Object|string} Returns `collection`.\\n     */\\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\\n\\n    /**\\n     * The base implementation of `_.every` without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\\n     *  else `false`\\n     */\\n    function baseEvery(collection, predicate) {\\n      var result = true;\\n      baseEach(collection, function(value, index, collection) {\\n        result = !!predicate(value, index, collection);\\n        return result;\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the extremum value of `collection` invoking `iteratee` for each value\\n     * in `collection` to generate the criterion by which the value is ranked.\\n     * The `iteratee` is invoked with three arguments: (value, index|key, collection).\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {Function} comparator The function used to compare values.\\n     * @param {*} exValue The initial extremum value.\\n     * @returns {*} Returns the extremum value.\\n     */\\n    function baseExtremum(collection, iteratee, comparator, exValue) {\\n      var computed = exValue,\\n          result = computed;\\n\\n      baseEach(collection, function(value, index, collection) {\\n        var current = +iteratee(value, index, collection);\\n        if (comparator(current, computed) || (current === exValue && current === result)) {\\n          computed = current;\\n          result = value;\\n        }\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.fill` without an iteratee call guard.\\n     *\\n     * @private\\n     * @param {Array} array The array to fill.\\n     * @param {*} value The value to fill `array` with.\\n     * @param {number} [start=0] The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function baseFill(array, value, start, end) {\\n      var length = array.length;\\n\\n      start = start == null ? 0 : (+start || 0);\\n      if (start < 0) {\\n        start = -start > length ? 0 : (length + start);\\n      }\\n      end = (end === undefined || end > length) ? length : (+end || 0);\\n      if (end < 0) {\\n        end += length;\\n      }\\n      length = start > end ? 0 : (end >>> 0);\\n      start >>>= 0;\\n\\n      while (start < length) {\\n        array[start++] = value;\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * The base implementation of `_.filter` without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {Array} Returns the new filtered array.\\n     */\\n    function baseFilter(collection, predicate) {\\n      var result = [];\\n      baseEach(collection, function(value, index, collection) {\\n        if (predicate(value, index, collection)) {\\n          result.push(value);\\n        }\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`,\\n     * without support for callback shorthands and `this` binding, which iterates\\n     * over `collection` using the provided `eachFunc`.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to search.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @param {Function} eachFunc The function to iterate over `collection`.\\n     * @param {boolean} [retKey] Specify returning the key of the found element\\n     *  instead of the element itself.\\n     * @returns {*} Returns the found element or its key, else `undefined`.\\n     */\\n    function baseFind(collection, predicate, eachFunc, retKey) {\\n      var result;\\n      eachFunc(collection, function(value, key, collection) {\\n        if (predicate(value, key, collection)) {\\n          result = retKey ? key : value;\\n          return false;\\n        }\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.flatten` with added support for restricting\\n     * flattening and specifying the start index.\\n     *\\n     * @private\\n     * @param {Array} array The array to flatten.\\n     * @param {boolean} [isDeep] Specify a deep flatten.\\n     * @param {boolean} [isStrict] Restrict flattening to arrays-like objects.\\n     * @param {Array} [result=[]] The initial result value.\\n     * @returns {Array} Returns the new flattened array.\\n     */\\n    function baseFlatten(array, isDeep, isStrict, result) {\\n      result || (result = []);\\n\\n      var index = -1,\\n          length = array.length;\\n\\n      while (++index < length) {\\n        var value = array[index];\\n        if (isObjectLike(value) && isArrayLike(value) &&\\n            (isStrict || isArray(value) || isArguments(value))) {\\n          if (isDeep) {\\n            // Recursively flatten arrays (susceptible to call stack limits).\\n            baseFlatten(value, isDeep, isStrict, result);\\n          } else {\\n            arrayPush(result, value);\\n          }\\n        } else if (!isStrict) {\\n          result[result.length] = value;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `baseForIn` and `baseForOwn` which iterates\\n     * over `object` properties returned by `keysFunc` invoking `iteratee` for\\n     * each property. Iteratee functions may exit iteration early by explicitly\\n     * returning `false`.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {Function} keysFunc The function to get the keys of `object`.\\n     * @returns {Object} Returns `object`.\\n     */\\n    var baseFor = createBaseFor();\\n\\n    /**\\n     * This function is like `baseFor` except that it iterates over properties\\n     * in the opposite order.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {Function} keysFunc The function to get the keys of `object`.\\n     * @returns {Object} Returns `object`.\\n     */\\n    var baseForRight = createBaseFor(true);\\n\\n    /**\\n     * The base implementation of `_.forIn` without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseForIn(object, iteratee) {\\n      return baseFor(object, iteratee, keysIn);\\n    }\\n\\n    /**\\n     * The base implementation of `_.forOwn` without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseForOwn(object, iteratee) {\\n      return baseFor(object, iteratee, keys);\\n    }\\n\\n    /**\\n     * The base implementation of `_.forOwnRight` without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseForOwnRight(object, iteratee) {\\n      return baseForRight(object, iteratee, keys);\\n    }\\n\\n    /**\\n     * The base implementation of `_.functions` which creates an array of\\n     * `object` function property names filtered from those provided.\\n     *\\n     * @private\\n     * @param {Object} object The object to inspect.\\n     * @param {Array} props The property names to filter.\\n     * @returns {Array} Returns the new array of filtered property names.\\n     */\\n    function baseFunctions(object, props) {\\n      var index = -1,\\n          length = props.length,\\n          resIndex = -1,\\n          result = [];\\n\\n      while (++index < length) {\\n        var key = props[index];\\n        if (isFunction(object[key])) {\\n          result[++resIndex] = key;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `get` without support for string paths\\n     * and default values.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {Array} path The path of the property to get.\\n     * @param {string} [pathKey] The key representation of path.\\n     * @returns {*} Returns the resolved value.\\n     */\\n    function baseGet(object, path, pathKey) {\\n      if (object == null) {\\n        return;\\n      }\\n      if (pathKey !== undefined && pathKey in toObject(object)) {\\n        path = [pathKey];\\n      }\\n      var index = 0,\\n          length = path.length;\\n\\n      while (object != null && index < length) {\\n        object = object[path[index++]];\\n      }\\n      return (index && index == length) ? object : undefined;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isEqual` without support for `this` binding\\n     * `customizer` functions.\\n     *\\n     * @private\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @param {Function} [customizer] The function to customize comparing values.\\n     * @param {boolean} [isLoose] Specify performing partial comparisons.\\n     * @param {Array} [stackA] Tracks traversed `value` objects.\\n     * @param {Array} [stackB] Tracks traversed `other` objects.\\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\\n     */\\n    function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {\\n      if (value === other) {\\n        return true;\\n      }\\n      if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\\n        return value !== value && other !== other;\\n      }\\n      return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);\\n    }\\n\\n    /**\\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\\n     * deep comparisons and tracks traversed objects enabling objects with circular\\n     * references to be compared.\\n     *\\n     * @private\\n     * @param {Object} object The object to compare.\\n     * @param {Object} other The other object to compare.\\n     * @param {Function} equalFunc The function to determine equivalents of values.\\n     * @param {Function} [customizer] The function to customize comparing objects.\\n     * @param {boolean} [isLoose] Specify performing partial comparisons.\\n     * @param {Array} [stackA=[]] Tracks traversed `value` objects.\\n     * @param {Array} [stackB=[]] Tracks traversed `other` objects.\\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\\n     */\\n    function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\\n      var objIsArr = isArray(object),\\n          othIsArr = isArray(other),\\n          objTag = arrayTag,\\n          othTag = arrayTag;\\n\\n      if (!objIsArr) {\\n        objTag = objToString.call(object);\\n        if (objTag == argsTag) {\\n          objTag = objectTag;\\n        } else if (objTag != objectTag) {\\n          objIsArr = isTypedArray(object);\\n        }\\n      }\\n      if (!othIsArr) {\\n        othTag = objToString.call(other);\\n        if (othTag == argsTag) {\\n          othTag = objectTag;\\n        } else if (othTag != objectTag) {\\n          othIsArr = isTypedArray(other);\\n        }\\n      }\\n      var objIsObj = objTag == objectTag,\\n          othIsObj = othTag == objectTag,\\n          isSameTag = objTag == othTag;\\n\\n      if (isSameTag && !(objIsArr || objIsObj)) {\\n        return equalByTag(object, other, objTag);\\n      }\\n      if (!isLoose) {\\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\\n\\n        if (objIsWrapped || othIsWrapped) {\\n          return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);\\n        }\\n      }\\n      if (!isSameTag) {\\n        return false;\\n      }\\n      // Assume cyclic values are equal.\\n      // For more information on detecting circular references see https://es5.github.io/#JO.\\n      stackA || (stackA = []);\\n      stackB || (stackB = []);\\n\\n      var length = stackA.length;\\n      while (length--) {\\n        if (stackA[length] == object) {\\n          return stackB[length] == other;\\n        }\\n      }\\n      // Add `object` and `other` to the stack of traversed objects.\\n      stackA.push(object);\\n      stackB.push(other);\\n\\n      var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);\\n\\n      stackA.pop();\\n      stackB.pop();\\n\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.isMatch` without support for callback\\n     * shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Object} object The object to inspect.\\n     * @param {Array} matchData The propery names, values, and compare flags to match.\\n     * @param {Function} [customizer] The function to customize comparing objects.\\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\\n     */\\n    function baseIsMatch(object, matchData, customizer) {\\n      var index = matchData.length,\\n          length = index,\\n          noCustomizer = !customizer;\\n\\n      if (object == null) {\\n        return !length;\\n      }\\n      object = toObject(object);\\n      while (index--) {\\n        var data = matchData[index];\\n        if ((noCustomizer && data[2])\\n              ? data[1] !== object[data[0]]\\n              : !(data[0] in object)\\n            ) {\\n          return false;\\n        }\\n      }\\n      while (++index < length) {\\n        data = matchData[index];\\n        var key = data[0],\\n            objValue = object[key],\\n            srcValue = data[1];\\n\\n        if (noCustomizer && data[2]) {\\n          if (objValue === undefined && !(key in object)) {\\n            return false;\\n          }\\n        } else {\\n          var result = customizer ? customizer(objValue, srcValue, key) : undefined;\\n          if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {\\n            return false;\\n          }\\n        }\\n      }\\n      return true;\\n    }\\n\\n    /**\\n     * The base implementation of `_.map` without support for callback shorthands\\n     * and `this` binding.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {Array} Returns the new mapped array.\\n     */\\n    function baseMap(collection, iteratee) {\\n      var index = -1,\\n          result = isArrayLike(collection) ? Array(collection.length) : [];\\n\\n      baseEach(collection, function(value, key, collection) {\\n        result[++index] = iteratee(value, key, collection);\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.matches` which does not clone `source`.\\n     *\\n     * @private\\n     * @param {Object} source The object of property values to match.\\n     * @returns {Function} Returns the new function.\\n     */\\n    function baseMatches(source) {\\n      var matchData = getMatchData(source);\\n      if (matchData.length == 1 && matchData[0][2]) {\\n        var key = matchData[0][0],\\n            value = matchData[0][1];\\n\\n        return function(object) {\\n          if (object == null) {\\n            return false;\\n          }\\n          return object[key] === value && (value !== undefined || (key in toObject(object)));\\n        };\\n      }\\n      return function(object) {\\n        return baseIsMatch(object, matchData);\\n      };\\n    }\\n\\n    /**\\n     * The base implementation of `_.matchesProperty` which does not clone `srcValue`.\\n     *\\n     * @private\\n     * @param {string} path The path of the property to get.\\n     * @param {*} srcValue The value to compare.\\n     * @returns {Function} Returns the new function.\\n     */\\n    function baseMatchesProperty(path, srcValue) {\\n      var isArr = isArray(path),\\n          isCommon = isKey(path) && isStrictComparable(srcValue),\\n          pathKey = (path + '');\\n\\n      path = toPath(path);\\n      return function(object) {\\n        if (object == null) {\\n          return false;\\n        }\\n        var key = pathKey;\\n        object = toObject(object);\\n        if ((isArr || !isCommon) && !(key in object)) {\\n          object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\\n          if (object == null) {\\n            return false;\\n          }\\n          key = last(path);\\n          object = toObject(object);\\n        }\\n        return object[key] === srcValue\\n          ? (srcValue !== undefined || (key in object))\\n          : baseIsEqual(srcValue, object[key], undefined, true);\\n      };\\n    }\\n\\n    /**\\n     * The base implementation of `_.merge` without support for argument juggling,\\n     * multiple sources, and `this` binding `customizer` functions.\\n     *\\n     * @private\\n     * @param {Object} object The destination object.\\n     * @param {Object} source The source object.\\n     * @param {Function} [customizer] The function to customize merged values.\\n     * @param {Array} [stackA=[]] Tracks traversed source objects.\\n     * @param {Array} [stackB=[]] Associates values with source counterparts.\\n     * @returns {Object} Returns `object`.\\n     */\\n    function baseMerge(object, source, customizer, stackA, stackB) {\\n      if (!isObject(object)) {\\n        return object;\\n      }\\n      var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),\\n          props = isSrcArr ? undefined : keys(source);\\n\\n      arrayEach(props || source, function(srcValue, key) {\\n        if (props) {\\n          key = srcValue;\\n          srcValue = source[key];\\n        }\\n        if (isObjectLike(srcValue)) {\\n          stackA || (stackA = []);\\n          stackB || (stackB = []);\\n          baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\\n        }\\n        else {\\n          var value = object[key],\\n              result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\\n              isCommon = result === undefined;\\n\\n          if (isCommon) {\\n            result = srcValue;\\n          }\\n          if ((result !== undefined || (isSrcArr && !(key in object))) &&\\n              (isCommon || (result === result ? (result !== value) : (value === value)))) {\\n            object[key] = result;\\n          }\\n        }\\n      });\\n      return object;\\n    }\\n\\n    /**\\n     * A specialized version of `baseMerge` for arrays and objects which performs\\n     * deep merges and tracks traversed objects enabling objects with circular\\n     * references to be merged.\\n     *\\n     * @private\\n     * @param {Object} object The destination object.\\n     * @param {Object} source The source object.\\n     * @param {string} key The key of the value to merge.\\n     * @param {Function} mergeFunc The function to merge values.\\n     * @param {Function} [customizer] The function to customize merged values.\\n     * @param {Array} [stackA=[]] Tracks traversed source objects.\\n     * @param {Array} [stackB=[]] Associates values with source counterparts.\\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\\n     */\\n    function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\\n      var length = stackA.length,\\n          srcValue = source[key];\\n\\n      while (length--) {\\n        if (stackA[length] == srcValue) {\\n          object[key] = stackB[length];\\n          return;\\n        }\\n      }\\n      var value = object[key],\\n          result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\\n          isCommon = result === undefined;\\n\\n      if (isCommon) {\\n        result = srcValue;\\n        if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {\\n          result = isArray(value)\\n            ? value\\n            : (isArrayLike(value) ? arrayCopy(value) : []);\\n        }\\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\\n          result = isArguments(value)\\n            ? toPlainObject(value)\\n            : (isPlainObject(value) ? value : {});\\n        }\\n        else {\\n          isCommon = false;\\n        }\\n      }\\n      // Add the source value to the stack of traversed objects and associate\\n      // it with its merged value.\\n      stackA.push(srcValue);\\n      stackB.push(result);\\n\\n      if (isCommon) {\\n        // Recursively merge objects and arrays (susceptible to call stack limits).\\n        object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\\n      } else if (result === result ? (result !== value) : (value === value)) {\\n        object[key] = result;\\n      }\\n    }\\n\\n    /**\\n     * The base implementation of `_.property` without support for deep paths.\\n     *\\n     * @private\\n     * @param {string} key The key of the property to get.\\n     * @returns {Function} Returns the new function.\\n     */\\n    function baseProperty(key) {\\n      return function(object) {\\n        return object == null ? undefined : object[key];\\n      };\\n    }\\n\\n    /**\\n     * A specialized version of `baseProperty` which supports deep paths.\\n     *\\n     * @private\\n     * @param {Array|string} path The path of the property to get.\\n     * @returns {Function} Returns the new function.\\n     */\\n    function basePropertyDeep(path) {\\n      var pathKey = (path + '');\\n      path = toPath(path);\\n      return function(object) {\\n        return baseGet(object, path, pathKey);\\n      };\\n    }\\n\\n    /**\\n     * The base implementation of `_.pullAt` without support for individual\\n     * index arguments and capturing the removed elements.\\n     *\\n     * @private\\n     * @param {Array} array The array to modify.\\n     * @param {number[]} indexes The indexes of elements to remove.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function basePullAt(array, indexes) {\\n      var length = array ? indexes.length : 0;\\n      while (length--) {\\n        var index = indexes[length];\\n        if (index != previous && isIndex(index)) {\\n          var previous = index;\\n          splice.call(array, index, 1);\\n        }\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * The base implementation of `_.random` without support for argument juggling\\n     * and returning floating-point numbers.\\n     *\\n     * @private\\n     * @param {number} min The minimum possible value.\\n     * @param {number} max The maximum possible value.\\n     * @returns {number} Returns the random number.\\n     */\\n    function baseRandom(min, max) {\\n      return min + nativeFloor(nativeRandom() * (max - min + 1));\\n    }\\n\\n    /**\\n     * The base implementation of `_.reduce` and `_.reduceRight` without support\\n     * for callback shorthands and `this` binding, which iterates over `collection`\\n     * using the provided `eachFunc`.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {*} accumulator The initial value.\\n     * @param {boolean} initFromCollection Specify using the first or last element\\n     *  of `collection` as the initial value.\\n     * @param {Function} eachFunc The function to iterate over `collection`.\\n     * @returns {*} Returns the accumulated value.\\n     */\\n    function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) {\\n      eachFunc(collection, function(value, index, collection) {\\n        accumulator = initFromCollection\\n          ? (initFromCollection = false, value)\\n          : iteratee(accumulator, value, index, collection);\\n      });\\n      return accumulator;\\n    }\\n\\n    /**\\n     * The base implementation of `setData` without support for hot loop detection.\\n     *\\n     * @private\\n     * @param {Function} func The function to associate metadata with.\\n     * @param {*} data The metadata.\\n     * @returns {Function} Returns `func`.\\n     */\\n    var baseSetData = !metaMap ? identity : function(func, data) {\\n      metaMap.set(func, data);\\n      return func;\\n    };\\n\\n    /**\\n     * The base implementation of `_.slice` without an iteratee call guard.\\n     *\\n     * @private\\n     * @param {Array} array The array to slice.\\n     * @param {number} [start=0] The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns the slice of `array`.\\n     */\\n    function baseSlice(array, start, end) {\\n      var index = -1,\\n          length = array.length;\\n\\n      start = start == null ? 0 : (+start || 0);\\n      if (start < 0) {\\n        start = -start > length ? 0 : (length + start);\\n      }\\n      end = (end === undefined || end > length) ? length : (+end || 0);\\n      if (end < 0) {\\n        end += length;\\n      }\\n      length = start > end ? 0 : ((end - start) >>> 0);\\n      start >>>= 0;\\n\\n      var result = Array(length);\\n      while (++index < length) {\\n        result[index] = array[index + start];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.some` without support for callback shorthands\\n     * and `this` binding.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\\n     *  else `false`.\\n     */\\n    function baseSome(collection, predicate) {\\n      var result;\\n\\n      baseEach(collection, function(value, index, collection) {\\n        result = predicate(value, index, collection);\\n        return !result;\\n      });\\n      return !!result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.sortBy` which uses `comparer` to define\\n     * the sort order of `array` and replaces criteria objects with their\\n     * corresponding values.\\n     *\\n     * @private\\n     * @param {Array} array The array to sort.\\n     * @param {Function} comparer The function to define sort order.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function baseSortBy(array, comparer) {\\n      var length = array.length;\\n\\n      array.sort(comparer);\\n      while (length--) {\\n        array[length] = array[length].value;\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * The base implementation of `_.sortByOrder` without param guards.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\\n     * @param {boolean[]} orders The sort orders of `iteratees`.\\n     * @returns {Array} Returns the new sorted array.\\n     */\\n    function baseSortByOrder(collection, iteratees, orders) {\\n      var callback = getCallback(),\\n          index = -1;\\n\\n      iteratees = arrayMap(iteratees, function(iteratee) { return callback(iteratee); });\\n\\n      var result = baseMap(collection, function(value) {\\n        var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); });\\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\\n      });\\n\\n      return baseSortBy(result, function(object, other) {\\n        return compareMultiple(object, other, orders);\\n      });\\n    }\\n\\n    /**\\n     * The base implementation of `_.sum` without support for callback shorthands\\n     * and `this` binding.\\n     *\\n     * @private\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @returns {number} Returns the sum.\\n     */\\n    function baseSum(collection, iteratee) {\\n      var result = 0;\\n      baseEach(collection, function(value, index, collection) {\\n        result += +iteratee(value, index, collection) || 0;\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.uniq` without support for callback shorthands\\n     * and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to inspect.\\n     * @param {Function} [iteratee] The function invoked per iteration.\\n     * @returns {Array} Returns the new duplicate-value-free array.\\n     */\\n    function baseUniq(array, iteratee) {\\n      var index = -1,\\n          indexOf = getIndexOf(),\\n          length = array.length,\\n          isCommon = indexOf == baseIndexOf,\\n          isLarge = isCommon && length >= LARGE_ARRAY_SIZE,\\n          seen = isLarge ? createCache() : null,\\n          result = [];\\n\\n      if (seen) {\\n        indexOf = cacheIndexOf;\\n        isCommon = false;\\n      } else {\\n        isLarge = false;\\n        seen = iteratee ? [] : result;\\n      }\\n      outer:\\n      while (++index < length) {\\n        var value = array[index],\\n            computed = iteratee ? iteratee(value, index, array) : value;\\n\\n        if (isCommon && value === value) {\\n          var seenIndex = seen.length;\\n          while (seenIndex--) {\\n            if (seen[seenIndex] === computed) {\\n              continue outer;\\n            }\\n          }\\n          if (iteratee) {\\n            seen.push(computed);\\n          }\\n          result.push(value);\\n        }\\n        else if (indexOf(seen, computed, 0) < 0) {\\n          if (iteratee || isLarge) {\\n            seen.push(computed);\\n          }\\n          result.push(value);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.values` and `_.valuesIn` which creates an\\n     * array of `object` property values corresponding to the property names\\n     * of `props`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {Array} props The property names to get values for.\\n     * @returns {Object} Returns the array of property values.\\n     */\\n    function baseValues(object, props) {\\n      var index = -1,\\n          length = props.length,\\n          result = Array(length);\\n\\n      while (++index < length) {\\n        result[index] = object[props[index]];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The base implementation of `_.dropRightWhile`, `_.dropWhile`, `_.takeRightWhile`,\\n     * and `_.takeWhile` without support for callback shorthands and `this` binding.\\n     *\\n     * @private\\n     * @param {Array} array The array to query.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Array} Returns the slice of `array`.\\n     */\\n    function baseWhile(array, predicate, isDrop, fromRight) {\\n      var length = array.length,\\n          index = fromRight ? length : -1;\\n\\n      while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {}\\n      return isDrop\\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\\n    }\\n\\n    /**\\n     * The base implementation of `wrapperValue` which returns the result of\\n     * performing a sequence of actions on the unwrapped `value`, where each\\n     * successive action is supplied the return value of the previous.\\n     *\\n     * @private\\n     * @param {*} value The unwrapped value.\\n     * @param {Array} actions Actions to peform to resolve the unwrapped value.\\n     * @returns {*} Returns the resolved value.\\n     */\\n    function baseWrapperValue(value, actions) {\\n      var result = value;\\n      if (result instanceof LazyWrapper) {\\n        result = result.value();\\n      }\\n      var index = -1,\\n          length = actions.length;\\n\\n      while (++index < length) {\\n        var action = actions[index];\\n        result = action.func.apply(action.thisArg, arrayPush([result], action.args));\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Performs a binary search of `array` to determine the index at which `value`\\n     * should be inserted into `array` in order to maintain its sort order.\\n     *\\n     * @private\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     */\\n    function binaryIndex(array, value, retHighest) {\\n      var low = 0,\\n          high = array ? array.length : low;\\n\\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\\n        while (low < high) {\\n          var mid = (low + high) >>> 1,\\n              computed = array[mid];\\n\\n          if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) {\\n            low = mid + 1;\\n          } else {\\n            high = mid;\\n          }\\n        }\\n        return high;\\n      }\\n      return binaryIndexBy(array, value, identity, retHighest);\\n    }\\n\\n    /**\\n     * This function is like `binaryIndex` except that it invokes `iteratee` for\\n     * `value` and each element of `array` to compute their sort ranking. The\\n     * iteratee is invoked with one argument; (value).\\n     *\\n     * @private\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @param {Function} iteratee The function invoked per iteration.\\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     */\\n    function binaryIndexBy(array, value, iteratee, retHighest) {\\n      value = iteratee(value);\\n\\n      var low = 0,\\n          high = array ? array.length : 0,\\n          valIsNaN = value !== value,\\n          valIsNull = value === null,\\n          valIsUndef = value === undefined;\\n\\n      while (low < high) {\\n        var mid = nativeFloor((low + high) / 2),\\n            computed = iteratee(array[mid]),\\n            isDef = computed !== undefined,\\n            isReflexive = computed === computed;\\n\\n        if (valIsNaN) {\\n          var setLow = isReflexive || retHighest;\\n        } else if (valIsNull) {\\n          setLow = isReflexive && isDef && (retHighest || computed != null);\\n        } else if (valIsUndef) {\\n          setLow = isReflexive && (retHighest || isDef);\\n        } else if (computed == null) {\\n          setLow = false;\\n        } else {\\n          setLow = retHighest ? (computed <= value) : (computed < value);\\n        }\\n        if (setLow) {\\n          low = mid + 1;\\n        } else {\\n          high = mid;\\n        }\\n      }\\n      return nativeMin(high, MAX_ARRAY_INDEX);\\n    }\\n\\n    /**\\n     * A specialized version of `baseCallback` which only supports `this` binding\\n     * and specifying the number of arguments to provide to `func`.\\n     *\\n     * @private\\n     * @param {Function} func The function to bind.\\n     * @param {*} thisArg The `this` binding of `func`.\\n     * @param {number} [argCount] The number of arguments to provide to `func`.\\n     * @returns {Function} Returns the callback.\\n     */\\n    function bindCallback(func, thisArg, argCount) {\\n      if (typeof func != 'function') {\\n        return identity;\\n      }\\n      if (thisArg === undefined) {\\n        return func;\\n      }\\n      switch (argCount) {\\n        case 1: return function(value) {\\n          return func.call(thisArg, value);\\n        };\\n        case 3: return function(value, index, collection) {\\n          return func.call(thisArg, value, index, collection);\\n        };\\n        case 4: return function(accumulator, value, index, collection) {\\n          return func.call(thisArg, accumulator, value, index, collection);\\n        };\\n        case 5: return function(value, other, key, object, source) {\\n          return func.call(thisArg, value, other, key, object, source);\\n        };\\n      }\\n      return function() {\\n        return func.apply(thisArg, arguments);\\n      };\\n    }\\n\\n    /**\\n     * Creates a clone of the given array buffer.\\n     *\\n     * @private\\n     * @param {ArrayBuffer} buffer The array buffer to clone.\\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\\n     */\\n    function bufferClone(buffer) {\\n      var result = new ArrayBuffer(buffer.byteLength),\\n          view = new Uint8Array(result);\\n\\n      view.set(new Uint8Array(buffer));\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an array that is the composition of partially applied arguments,\\n     * placeholders, and provided arguments into a single array of arguments.\\n     *\\n     * @private\\n     * @param {Array|Object} args The provided arguments.\\n     * @param {Array} partials The arguments to prepend to those provided.\\n     * @param {Array} holders The `partials` placeholder indexes.\\n     * @returns {Array} Returns the new array of composed arguments.\\n     */\\n    function composeArgs(args, partials, holders) {\\n      var holdersLength = holders.length,\\n          argsIndex = -1,\\n          argsLength = nativeMax(args.length - holdersLength, 0),\\n          leftIndex = -1,\\n          leftLength = partials.length,\\n          result = Array(leftLength + argsLength);\\n\\n      while (++leftIndex < leftLength) {\\n        result[leftIndex] = partials[leftIndex];\\n      }\\n      while (++argsIndex < holdersLength) {\\n        result[holders[argsIndex]] = args[argsIndex];\\n      }\\n      while (argsLength--) {\\n        result[leftIndex++] = args[argsIndex++];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * This function is like `composeArgs` except that the arguments composition\\n     * is tailored for `_.partialRight`.\\n     *\\n     * @private\\n     * @param {Array|Object} args The provided arguments.\\n     * @param {Array} partials The arguments to append to those provided.\\n     * @param {Array} holders The `partials` placeholder indexes.\\n     * @returns {Array} Returns the new array of composed arguments.\\n     */\\n    function composeArgsRight(args, partials, holders) {\\n      var holdersIndex = -1,\\n          holdersLength = holders.length,\\n          argsIndex = -1,\\n          argsLength = nativeMax(args.length - holdersLength, 0),\\n          rightIndex = -1,\\n          rightLength = partials.length,\\n          result = Array(argsLength + rightLength);\\n\\n      while (++argsIndex < argsLength) {\\n        result[argsIndex] = args[argsIndex];\\n      }\\n      var offset = argsIndex;\\n      while (++rightIndex < rightLength) {\\n        result[offset + rightIndex] = partials[rightIndex];\\n      }\\n      while (++holdersIndex < holdersLength) {\\n        result[offset + holders[holdersIndex]] = args[argsIndex++];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Creates a `_.countBy`, `_.groupBy`, `_.indexBy`, or `_.partition` function.\\n     *\\n     * @private\\n     * @param {Function} setter The function to set keys and values of the accumulator object.\\n     * @param {Function} [initializer] The function to initialize the accumulator object.\\n     * @returns {Function} Returns the new aggregator function.\\n     */\\n    function createAggregator(setter, initializer) {\\n      return function(collection, iteratee, thisArg) {\\n        var result = initializer ? initializer() : {};\\n        iteratee = getCallback(iteratee, thisArg, 3);\\n\\n        if (isArray(collection)) {\\n          var index = -1,\\n              length = collection.length;\\n\\n          while (++index < length) {\\n            var value = collection[index];\\n            setter(result, value, iteratee(value, index, collection), collection);\\n          }\\n        } else {\\n          baseEach(collection, function(value, key, collection) {\\n            setter(result, value, iteratee(value, key, collection), collection);\\n          });\\n        }\\n        return result;\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.assign`, `_.defaults`, or `_.merge` function.\\n     *\\n     * @private\\n     * @param {Function} assigner The function to assign values.\\n     * @returns {Function} Returns the new assigner function.\\n     */\\n    function createAssigner(assigner) {\\n      return restParam(function(object, sources) {\\n        var index = -1,\\n            length = object == null ? 0 : sources.length,\\n            customizer = length > 2 ? sources[length - 2] : undefined,\\n            guard = length > 2 ? sources[2] : undefined,\\n            thisArg = length > 1 ? sources[length - 1] : undefined;\\n\\n        if (typeof customizer == 'function') {\\n          customizer = bindCallback(customizer, thisArg, 5);\\n          length -= 2;\\n        } else {\\n          customizer = typeof thisArg == 'function' ? thisArg : undefined;\\n          length -= (customizer ? 1 : 0);\\n        }\\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\\n          customizer = length < 3 ? undefined : customizer;\\n          length = 1;\\n        }\\n        while (++index < length) {\\n          var source = sources[index];\\n          if (source) {\\n            assigner(object, source, customizer);\\n          }\\n        }\\n        return object;\\n      });\\n    }\\n\\n    /**\\n     * Creates a `baseEach` or `baseEachRight` function.\\n     *\\n     * @private\\n     * @param {Function} eachFunc The function to iterate over a collection.\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new base function.\\n     */\\n    function createBaseEach(eachFunc, fromRight) {\\n      return function(collection, iteratee) {\\n        var length = collection ? getLength(collection) : 0;\\n        if (!isLength(length)) {\\n          return eachFunc(collection, iteratee);\\n        }\\n        var index = fromRight ? length : -1,\\n            iterable = toObject(collection);\\n\\n        while ((fromRight ? index-- : ++index < length)) {\\n          if (iteratee(iterable[index], index, iterable) === false) {\\n            break;\\n          }\\n        }\\n        return collection;\\n      };\\n    }\\n\\n    /**\\n     * Creates a base function for `_.forIn` or `_.forInRight`.\\n     *\\n     * @private\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new base function.\\n     */\\n    function createBaseFor(fromRight) {\\n      return function(object, iteratee, keysFunc) {\\n        var iterable = toObject(object),\\n            props = keysFunc(object),\\n            length = props.length,\\n            index = fromRight ? length : -1;\\n\\n        while ((fromRight ? index-- : ++index < length)) {\\n          var key = props[index];\\n          if (iteratee(iterable[key], key, iterable) === false) {\\n            break;\\n          }\\n        }\\n        return object;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that wraps `func` and invokes it with the `this`\\n     * binding of `thisArg`.\\n     *\\n     * @private\\n     * @param {Function} func The function to bind.\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @returns {Function} Returns the new bound function.\\n     */\\n    function createBindWrapper(func, thisArg) {\\n      var Ctor = createCtorWrapper(func);\\n\\n      function wrapper() {\\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\\n        return fn.apply(thisArg, arguments);\\n      }\\n      return wrapper;\\n    }\\n\\n    /**\\n     * Creates a `Set` cache object to optimize linear searches of large arrays.\\n     *\\n     * @private\\n     * @param {Array} [values] The values to cache.\\n     * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`.\\n     */\\n    function createCache(values) {\\n      return (nativeCreate && Set) ? new SetCache(values) : null;\\n    }\\n\\n    /**\\n     * Creates a function that produces compound words out of the words in a\\n     * given string.\\n     *\\n     * @private\\n     * @param {Function} callback The function to combine each word.\\n     * @returns {Function} Returns the new compounder function.\\n     */\\n    function createCompounder(callback) {\\n      return function(string) {\\n        var index = -1,\\n            array = words(deburr(string)),\\n            length = array.length,\\n            result = '';\\n\\n        while (++index < length) {\\n          result = callback(result, array[index], index);\\n        }\\n        return result;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that produces an instance of `Ctor` regardless of\\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\\n     *\\n     * @private\\n     * @param {Function} Ctor The constructor to wrap.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createCtorWrapper(Ctor) {\\n      return function() {\\n        // Use a `switch` statement to work with class constructors.\\n        // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\\n        // for more details.\\n        var args = arguments;\\n        switch (args.length) {\\n          case 0: return new Ctor;\\n          case 1: return new Ctor(args[0]);\\n          case 2: return new Ctor(args[0], args[1]);\\n          case 3: return new Ctor(args[0], args[1], args[2]);\\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\\n        }\\n        var thisBinding = baseCreate(Ctor.prototype),\\n            result = Ctor.apply(thisBinding, args);\\n\\n        // Mimic the constructor's `return` behavior.\\n        // See https://es5.github.io/#x13.2.2 for more details.\\n        return isObject(result) ? result : thisBinding;\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.curry` or `_.curryRight` function.\\n     *\\n     * @private\\n     * @param {boolean} flag The curry bit flag.\\n     * @returns {Function} Returns the new curry function.\\n     */\\n    function createCurry(flag) {\\n      function curryFunc(func, arity, guard) {\\n        if (guard && isIterateeCall(func, arity, guard)) {\\n          arity = undefined;\\n        }\\n        var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity);\\n        result.placeholder = curryFunc.placeholder;\\n        return result;\\n      }\\n      return curryFunc;\\n    }\\n\\n    /**\\n     * Creates a `_.defaults` or `_.defaultsDeep` function.\\n     *\\n     * @private\\n     * @param {Function} assigner The function to assign values.\\n     * @param {Function} customizer The function to customize assigned values.\\n     * @returns {Function} Returns the new defaults function.\\n     */\\n    function createDefaults(assigner, customizer) {\\n      return restParam(function(args) {\\n        var object = args[0];\\n        if (object == null) {\\n          return object;\\n        }\\n        args.push(customizer);\\n        return assigner.apply(undefined, args);\\n      });\\n    }\\n\\n    /**\\n     * Creates a `_.max` or `_.min` function.\\n     *\\n     * @private\\n     * @param {Function} comparator The function used to compare values.\\n     * @param {*} exValue The initial extremum value.\\n     * @returns {Function} Returns the new extremum function.\\n     */\\n    function createExtremum(comparator, exValue) {\\n      return function(collection, iteratee, thisArg) {\\n        if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\\n          iteratee = undefined;\\n        }\\n        iteratee = getCallback(iteratee, thisArg, 3);\\n        if (iteratee.length == 1) {\\n          collection = isArray(collection) ? collection : toIterable(collection);\\n          var result = arrayExtremum(collection, iteratee, comparator, exValue);\\n          if (!(collection.length && result === exValue)) {\\n            return result;\\n          }\\n        }\\n        return baseExtremum(collection, iteratee, comparator, exValue);\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.find` or `_.findLast` function.\\n     *\\n     * @private\\n     * @param {Function} eachFunc The function to iterate over a collection.\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new find function.\\n     */\\n    function createFind(eachFunc, fromRight) {\\n      return function(collection, predicate, thisArg) {\\n        predicate = getCallback(predicate, thisArg, 3);\\n        if (isArray(collection)) {\\n          var index = baseFindIndex(collection, predicate, fromRight);\\n          return index > -1 ? collection[index] : undefined;\\n        }\\n        return baseFind(collection, predicate, eachFunc);\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.findIndex` or `_.findLastIndex` function.\\n     *\\n     * @private\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new find function.\\n     */\\n    function createFindIndex(fromRight) {\\n      return function(array, predicate, thisArg) {\\n        if (!(array && array.length)) {\\n          return -1;\\n        }\\n        predicate = getCallback(predicate, thisArg, 3);\\n        return baseFindIndex(array, predicate, fromRight);\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.findKey` or `_.findLastKey` function.\\n     *\\n     * @private\\n     * @param {Function} objectFunc The function to iterate over an object.\\n     * @returns {Function} Returns the new find function.\\n     */\\n    function createFindKey(objectFunc) {\\n      return function(object, predicate, thisArg) {\\n        predicate = getCallback(predicate, thisArg, 3);\\n        return baseFind(object, predicate, objectFunc, true);\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.flow` or `_.flowRight` function.\\n     *\\n     * @private\\n     * @param {boolean} [fromRight] Specify iterating from right to left.\\n     * @returns {Function} Returns the new flow function.\\n     */\\n    function createFlow(fromRight) {\\n      return function() {\\n        var wrapper,\\n            length = arguments.length,\\n            index = fromRight ? length : -1,\\n            leftIndex = 0,\\n            funcs = Array(length);\\n\\n        while ((fromRight ? index-- : ++index < length)) {\\n          var func = funcs[leftIndex++] = arguments[index];\\n          if (typeof func != 'function') {\\n            throw new TypeError(FUNC_ERROR_TEXT);\\n          }\\n          if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') {\\n            wrapper = new LodashWrapper([], true);\\n          }\\n        }\\n        index = wrapper ? -1 : length;\\n        while (++index < length) {\\n          func = funcs[index];\\n\\n          var funcName = getFuncName(func),\\n              data = funcName == 'wrapper' ? getData(func) : undefined;\\n\\n          if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) {\\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\\n          } else {\\n            wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func);\\n          }\\n        }\\n        return function() {\\n          var args = arguments,\\n              value = args[0];\\n\\n          if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) {\\n            return wrapper.plant(value).value();\\n          }\\n          var index = 0,\\n              result = length ? funcs[index].apply(this, args) : value;\\n\\n          while (++index < length) {\\n            result = funcs[index].call(this, result);\\n          }\\n          return result;\\n        };\\n      };\\n    }\\n\\n    /**\\n     * Creates a function for `_.forEach` or `_.forEachRight`.\\n     *\\n     * @private\\n     * @param {Function} arrayFunc The function to iterate over an array.\\n     * @param {Function} eachFunc The function to iterate over a collection.\\n     * @returns {Function} Returns the new each function.\\n     */\\n    function createForEach(arrayFunc, eachFunc) {\\n      return function(collection, iteratee, thisArg) {\\n        return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\\n          ? arrayFunc(collection, iteratee)\\n          : eachFunc(collection, bindCallback(iteratee, thisArg, 3));\\n      };\\n    }\\n\\n    /**\\n     * Creates a function for `_.forIn` or `_.forInRight`.\\n     *\\n     * @private\\n     * @param {Function} objectFunc The function to iterate over an object.\\n     * @returns {Function} Returns the new each function.\\n     */\\n    function createForIn(objectFunc) {\\n      return function(object, iteratee, thisArg) {\\n        if (typeof iteratee != 'function' || thisArg !== undefined) {\\n          iteratee = bindCallback(iteratee, thisArg, 3);\\n        }\\n        return objectFunc(object, iteratee, keysIn);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function for `_.forOwn` or `_.forOwnRight`.\\n     *\\n     * @private\\n     * @param {Function} objectFunc The function to iterate over an object.\\n     * @returns {Function} Returns the new each function.\\n     */\\n    function createForOwn(objectFunc) {\\n      return function(object, iteratee, thisArg) {\\n        if (typeof iteratee != 'function' || thisArg !== undefined) {\\n          iteratee = bindCallback(iteratee, thisArg, 3);\\n        }\\n        return objectFunc(object, iteratee);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function for `_.mapKeys` or `_.mapValues`.\\n     *\\n     * @private\\n     * @param {boolean} [isMapKeys] Specify mapping keys instead of values.\\n     * @returns {Function} Returns the new map function.\\n     */\\n    function createObjectMapper(isMapKeys) {\\n      return function(object, iteratee, thisArg) {\\n        var result = {};\\n        iteratee = getCallback(iteratee, thisArg, 3);\\n\\n        baseForOwn(object, function(value, key, object) {\\n          var mapped = iteratee(value, key, object);\\n          key = isMapKeys ? mapped : key;\\n          value = isMapKeys ? value : mapped;\\n          result[key] = value;\\n        });\\n        return result;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function for `_.padLeft` or `_.padRight`.\\n     *\\n     * @private\\n     * @param {boolean} [fromRight] Specify padding from the right.\\n     * @returns {Function} Returns the new pad function.\\n     */\\n    function createPadDir(fromRight) {\\n      return function(string, length, chars) {\\n        string = baseToString(string);\\n        return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string);\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.partial` or `_.partialRight` function.\\n     *\\n     * @private\\n     * @param {boolean} flag The partial bit flag.\\n     * @returns {Function} Returns the new partial function.\\n     */\\n    function createPartial(flag) {\\n      var partialFunc = restParam(function(func, partials) {\\n        var holders = replaceHolders(partials, partialFunc.placeholder);\\n        return createWrapper(func, flag, undefined, partials, holders);\\n      });\\n      return partialFunc;\\n    }\\n\\n    /**\\n     * Creates a function for `_.reduce` or `_.reduceRight`.\\n     *\\n     * @private\\n     * @param {Function} arrayFunc The function to iterate over an array.\\n     * @param {Function} eachFunc The function to iterate over a collection.\\n     * @returns {Function} Returns the new each function.\\n     */\\n    function createReduce(arrayFunc, eachFunc) {\\n      return function(collection, iteratee, accumulator, thisArg) {\\n        var initFromArray = arguments.length < 3;\\n        return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\\n          ? arrayFunc(collection, iteratee, accumulator, initFromArray)\\n          : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that wraps `func` and invokes it with optional `this`\\n     * binding of, partial application, and currying.\\n     *\\n     * @private\\n     * @param {Function|string} func The function or method name to reference.\\n     * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @param {Array} [partials] The arguments to prepend to those provided to the new function.\\n     * @param {Array} [holders] The `partials` placeholder indexes.\\n     * @param {Array} [partialsRight] The arguments to append to those provided to the new function.\\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\\n     * @param {Array} [argPos] The argument positions of the new function.\\n     * @param {number} [ary] The arity cap of `func`.\\n     * @param {number} [arity] The arity of `func`.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\\n      var isAry = bitmask & ARY_FLAG,\\n          isBind = bitmask & BIND_FLAG,\\n          isBindKey = bitmask & BIND_KEY_FLAG,\\n          isCurry = bitmask & CURRY_FLAG,\\n          isCurryBound = bitmask & CURRY_BOUND_FLAG,\\n          isCurryRight = bitmask & CURRY_RIGHT_FLAG,\\n          Ctor = isBindKey ? undefined : createCtorWrapper(func);\\n\\n      function wrapper() {\\n        // Avoid `arguments` object use disqualifying optimizations by\\n        // converting it to an array before providing it to other functions.\\n        var length = arguments.length,\\n            index = length,\\n            args = Array(length);\\n\\n        while (index--) {\\n          args[index] = arguments[index];\\n        }\\n        if (partials) {\\n          args = composeArgs(args, partials, holders);\\n        }\\n        if (partialsRight) {\\n          args = composeArgsRight(args, partialsRight, holdersRight);\\n        }\\n        if (isCurry || isCurryRight) {\\n          var placeholder = wrapper.placeholder,\\n              argsHolders = replaceHolders(args, placeholder);\\n\\n          length -= argsHolders.length;\\n          if (length < arity) {\\n            var newArgPos = argPos ? arrayCopy(argPos) : undefined,\\n                newArity = nativeMax(arity - length, 0),\\n                newsHolders = isCurry ? argsHolders : undefined,\\n                newHoldersRight = isCurry ? undefined : argsHolders,\\n                newPartials = isCurry ? args : undefined,\\n                newPartialsRight = isCurry ? undefined : args;\\n\\n            bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);\\n            bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);\\n\\n            if (!isCurryBound) {\\n              bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);\\n            }\\n            var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity],\\n                result = createHybridWrapper.apply(undefined, newData);\\n\\n            if (isLaziable(func)) {\\n              setData(result, newData);\\n            }\\n            result.placeholder = placeholder;\\n            return result;\\n          }\\n        }\\n        var thisBinding = isBind ? thisArg : this,\\n            fn = isBindKey ? thisBinding[func] : func;\\n\\n        if (argPos) {\\n          args = reorder(args, argPos);\\n        }\\n        if (isAry && ary < args.length) {\\n          args.length = ary;\\n        }\\n        if (this && this !== root && this instanceof wrapper) {\\n          fn = Ctor || createCtorWrapper(func);\\n        }\\n        return fn.apply(thisBinding, args);\\n      }\\n      return wrapper;\\n    }\\n\\n    /**\\n     * Creates the padding required for `string` based on the given `length`.\\n     * The `chars` string is truncated if the number of characters exceeds `length`.\\n     *\\n     * @private\\n     * @param {string} string The string to create padding for.\\n     * @param {number} [length=0] The padding length.\\n     * @param {string} [chars=' '] The string used as padding.\\n     * @returns {string} Returns the pad for `string`.\\n     */\\n    function createPadding(string, length, chars) {\\n      var strLength = string.length;\\n      length = +length;\\n\\n      if (strLength >= length || !nativeIsFinite(length)) {\\n        return '';\\n      }\\n      var padLength = length - strLength;\\n      chars = chars == null ? ' ' : (chars + '');\\n      return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength);\\n    }\\n\\n    /**\\n     * Creates a function that wraps `func` and invokes it with the optional `this`\\n     * binding of `thisArg` and the `partials` prepended to those provided to\\n     * the wrapper.\\n     *\\n     * @private\\n     * @param {Function} func The function to partially apply arguments to.\\n     * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.\\n     * @param {*} thisArg The `this` binding of `func`.\\n     * @param {Array} partials The arguments to prepend to those provided to the new function.\\n     * @returns {Function} Returns the new bound function.\\n     */\\n    function createPartialWrapper(func, bitmask, thisArg, partials) {\\n      var isBind = bitmask & BIND_FLAG,\\n          Ctor = createCtorWrapper(func);\\n\\n      function wrapper() {\\n        // Avoid `arguments` object use disqualifying optimizations by\\n        // converting it to an array before providing it `func`.\\n        var argsIndex = -1,\\n            argsLength = arguments.length,\\n            leftIndex = -1,\\n            leftLength = partials.length,\\n            args = Array(leftLength + argsLength);\\n\\n        while (++leftIndex < leftLength) {\\n          args[leftIndex] = partials[leftIndex];\\n        }\\n        while (argsLength--) {\\n          args[leftIndex++] = arguments[++argsIndex];\\n        }\\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\\n        return fn.apply(isBind ? thisArg : this, args);\\n      }\\n      return wrapper;\\n    }\\n\\n    /**\\n     * Creates a `_.ceil`, `_.floor`, or `_.round` function.\\n     *\\n     * @private\\n     * @param {string} methodName The name of the `Math` method to use when rounding.\\n     * @returns {Function} Returns the new round function.\\n     */\\n    function createRound(methodName) {\\n      var func = Math[methodName];\\n      return function(number, precision) {\\n        precision = precision === undefined ? 0 : (+precision || 0);\\n        if (precision) {\\n          precision = pow(10, precision);\\n          return func(number * precision) / precision;\\n        }\\n        return func(number);\\n      };\\n    }\\n\\n    /**\\n     * Creates a `_.sortedIndex` or `_.sortedLastIndex` function.\\n     *\\n     * @private\\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\\n     * @returns {Function} Returns the new index function.\\n     */\\n    function createSortedIndex(retHighest) {\\n      return function(array, value, iteratee, thisArg) {\\n        var callback = getCallback(iteratee);\\n        return (iteratee == null && callback === baseCallback)\\n          ? binaryIndex(array, value, retHighest)\\n          : binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that either curries or invokes `func` with optional\\n     * `this` binding and partially applied arguments.\\n     *\\n     * @private\\n     * @param {Function|string} func The function or method name to reference.\\n     * @param {number} bitmask The bitmask of flags.\\n     *  The bitmask may be composed of the following flags:\\n     *     1 - `_.bind`\\n     *     2 - `_.bindKey`\\n     *     4 - `_.curry` or `_.curryRight` of a bound function\\n     *     8 - `_.curry`\\n     *    16 - `_.curryRight`\\n     *    32 - `_.partial`\\n     *    64 - `_.partialRight`\\n     *   128 - `_.rearg`\\n     *   256 - `_.ary`\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @param {Array} [partials] The arguments to be partially applied.\\n     * @param {Array} [holders] The `partials` placeholder indexes.\\n     * @param {Array} [argPos] The argument positions of the new function.\\n     * @param {number} [ary] The arity cap of `func`.\\n     * @param {number} [arity] The arity of `func`.\\n     * @returns {Function} Returns the new wrapped function.\\n     */\\n    function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\\n      var isBindKey = bitmask & BIND_KEY_FLAG;\\n      if (!isBindKey && typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      var length = partials ? partials.length : 0;\\n      if (!length) {\\n        bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);\\n        partials = holders = undefined;\\n      }\\n      length -= (holders ? holders.length : 0);\\n      if (bitmask & PARTIAL_RIGHT_FLAG) {\\n        var partialsRight = partials,\\n            holdersRight = holders;\\n\\n        partials = holders = undefined;\\n      }\\n      var data = isBindKey ? undefined : getData(func),\\n          newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];\\n\\n      if (data) {\\n        mergeData(newData, data);\\n        bitmask = newData[1];\\n        arity = newData[9];\\n      }\\n      newData[9] = arity == null\\n        ? (isBindKey ? 0 : func.length)\\n        : (nativeMax(arity - length, 0) || 0);\\n\\n      if (bitmask == BIND_FLAG) {\\n        var result = createBindWrapper(newData[0], newData[2]);\\n      } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) {\\n        result = createPartialWrapper.apply(undefined, newData);\\n      } else {\\n        result = createHybridWrapper.apply(undefined, newData);\\n      }\\n      var setter = data ? baseSetData : setData;\\n      return setter(result, newData);\\n    }\\n\\n    /**\\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\\n     * partial deep comparisons.\\n     *\\n     * @private\\n     * @param {Array} array The array to compare.\\n     * @param {Array} other The other array to compare.\\n     * @param {Function} equalFunc The function to determine equivalents of values.\\n     * @param {Function} [customizer] The function to customize comparing arrays.\\n     * @param {boolean} [isLoose] Specify performing partial comparisons.\\n     * @param {Array} [stackA] Tracks traversed `value` objects.\\n     * @param {Array} [stackB] Tracks traversed `other` objects.\\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\\n     */\\n    function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {\\n      var index = -1,\\n          arrLength = array.length,\\n          othLength = other.length;\\n\\n      if (arrLength != othLength && !(isLoose && othLength > arrLength)) {\\n        return false;\\n      }\\n      // Ignore non-index properties.\\n      while (++index < arrLength) {\\n        var arrValue = array[index],\\n            othValue = other[index],\\n            result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;\\n\\n        if (result !== undefined) {\\n          if (result) {\\n            continue;\\n          }\\n          return false;\\n        }\\n        // Recursively compare arrays (susceptible to call stack limits).\\n        if (isLoose) {\\n          if (!arraySome(other, function(othValue) {\\n                return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\\n              })) {\\n            return false;\\n          }\\n        } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    }\\n\\n    /**\\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\\n     * the same `toStringTag`.\\n     *\\n     * **Note:** This function only supports comparing values with tags of\\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\\n     *\\n     * @private\\n     * @param {Object} object The object to compare.\\n     * @param {Object} other The other object to compare.\\n     * @param {string} tag The `toStringTag` of the objects to compare.\\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\\n     */\\n    function equalByTag(object, other, tag) {\\n      switch (tag) {\\n        case boolTag:\\n        case dateTag:\\n          // Coerce dates and booleans to numbers, dates to milliseconds and booleans\\n          // to `1` or `0` treating invalid dates coerced to `NaN` as not equal.\\n          return +object == +other;\\n\\n        case errorTag:\\n          return object.name == other.name && object.message == other.message;\\n\\n        case numberTag:\\n          // Treat `NaN` vs. `NaN` as equal.\\n          return (object != +object)\\n            ? other != +other\\n            : object == +other;\\n\\n        case regexpTag:\\n        case stringTag:\\n          // Coerce regexes to strings and treat strings primitives and string\\n          // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details.\\n          return object == (other + '');\\n      }\\n      return false;\\n    }\\n\\n    /**\\n     * A specialized version of `baseIsEqualDeep` for objects with support for\\n     * partial deep comparisons.\\n     *\\n     * @private\\n     * @param {Object} object The object to compare.\\n     * @param {Object} other The other object to compare.\\n     * @param {Function} equalFunc The function to determine equivalents of values.\\n     * @param {Function} [customizer] The function to customize comparing values.\\n     * @param {boolean} [isLoose] Specify performing partial comparisons.\\n     * @param {Array} [stackA] Tracks traversed `value` objects.\\n     * @param {Array} [stackB] Tracks traversed `other` objects.\\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\\n     */\\n    function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\\n      var objProps = keys(object),\\n          objLength = objProps.length,\\n          othProps = keys(other),\\n          othLength = othProps.length;\\n\\n      if (objLength != othLength && !isLoose) {\\n        return false;\\n      }\\n      var index = objLength;\\n      while (index--) {\\n        var key = objProps[index];\\n        if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {\\n          return false;\\n        }\\n      }\\n      var skipCtor = isLoose;\\n      while (++index < objLength) {\\n        key = objProps[index];\\n        var objValue = object[key],\\n            othValue = other[key],\\n            result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;\\n\\n        // Recursively compare objects (susceptible to call stack limits).\\n        if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {\\n          return false;\\n        }\\n        skipCtor || (skipCtor = key == 'constructor');\\n      }\\n      if (!skipCtor) {\\n        var objCtor = object.constructor,\\n            othCtor = other.constructor;\\n\\n        // Non `Object` object instances with different constructors are not equal.\\n        if (objCtor != othCtor &&\\n            ('constructor' in object && 'constructor' in other) &&\\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\\n          return false;\\n        }\\n      }\\n      return true;\\n    }\\n\\n    /**\\n     * Gets the appropriate \\\"callback\\\" function. If the `_.callback` method is\\n     * customized this function returns the custom method, otherwise it returns\\n     * the `baseCallback` function. If arguments are provided the chosen function\\n     * is invoked with them and its result is returned.\\n     *\\n     * @private\\n     * @returns {Function} Returns the chosen function or its result.\\n     */\\n    function getCallback(func, thisArg, argCount) {\\n      var result = lodash.callback || callback;\\n      result = result === callback ? baseCallback : result;\\n      return argCount ? result(func, thisArg, argCount) : result;\\n    }\\n\\n    /**\\n     * Gets metadata for `func`.\\n     *\\n     * @private\\n     * @param {Function} func The function to query.\\n     * @returns {*} Returns the metadata for `func`.\\n     */\\n    var getData = !metaMap ? noop : function(func) {\\n      return metaMap.get(func);\\n    };\\n\\n    /**\\n     * Gets the name of `func`.\\n     *\\n     * @private\\n     * @param {Function} func The function to query.\\n     * @returns {string} Returns the function name.\\n     */\\n    function getFuncName(func) {\\n      var result = func.name,\\n          array = realNames[result],\\n          length = array ? array.length : 0;\\n\\n      while (length--) {\\n        var data = array[length],\\n            otherFunc = data.func;\\n        if (otherFunc == null || otherFunc == func) {\\n          return data.name;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the appropriate \\\"indexOf\\\" function. If the `_.indexOf` method is\\n     * customized this function returns the custom method, otherwise it returns\\n     * the `baseIndexOf` function. If arguments are provided the chosen function\\n     * is invoked with them and its result is returned.\\n     *\\n     * @private\\n     * @returns {Function|number} Returns the chosen function or its result.\\n     */\\n    function getIndexOf(collection, target, fromIndex) {\\n      var result = lodash.indexOf || indexOf;\\n      result = result === indexOf ? baseIndexOf : result;\\n      return collection ? result(collection, target, fromIndex) : result;\\n    }\\n\\n    /**\\n     * Gets the \\\"length\\\" property value of `object`.\\n     *\\n     * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\\n     * that affects Safari on at least iOS 8.1-8.3 ARM64.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {*} Returns the \\\"length\\\" value.\\n     */\\n    var getLength = baseProperty('length');\\n\\n    /**\\n     * Gets the propery names, values, and compare flags of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the match data of `object`.\\n     */\\n    function getMatchData(object) {\\n      var result = pairs(object),\\n          length = result.length;\\n\\n      while (length--) {\\n        result[length][2] = isStrictComparable(result[length][1]);\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Gets the native function at `key` of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {string} key The key of the method to get.\\n     * @returns {*} Returns the function if it's native, else `undefined`.\\n     */\\n    function getNative(object, key) {\\n      var value = object == null ? undefined : object[key];\\n      return isNative(value) ? value : undefined;\\n    }\\n\\n    /**\\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\\n     *\\n     * @private\\n     * @param {number} start The start of the view.\\n     * @param {number} end The end of the view.\\n     * @param {Array} transforms The transformations to apply to the view.\\n     * @returns {Object} Returns an object containing the `start` and `end`\\n     *  positions of the view.\\n     */\\n    function getView(start, end, transforms) {\\n      var index = -1,\\n          length = transforms.length;\\n\\n      while (++index < length) {\\n        var data = transforms[index],\\n            size = data.size;\\n\\n        switch (data.type) {\\n          case 'drop':      start += size; break;\\n          case 'dropRight': end -= size; break;\\n          case 'take':      end = nativeMin(end, start + size); break;\\n          case 'takeRight': start = nativeMax(start, end - size); break;\\n        }\\n      }\\n      return { 'start': start, 'end': end };\\n    }\\n\\n    /**\\n     * Initializes an array clone.\\n     *\\n     * @private\\n     * @param {Array} array The array to clone.\\n     * @returns {Array} Returns the initialized clone.\\n     */\\n    function initCloneArray(array) {\\n      var length = array.length,\\n          result = new array.constructor(length);\\n\\n      // Add array properties assigned by `RegExp#exec`.\\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\\n        result.index = array.index;\\n        result.input = array.input;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Initializes an object clone.\\n     *\\n     * @private\\n     * @param {Object} object The object to clone.\\n     * @returns {Object} Returns the initialized clone.\\n     */\\n    function initCloneObject(object) {\\n      var Ctor = object.constructor;\\n      if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {\\n        Ctor = Object;\\n      }\\n      return new Ctor;\\n    }\\n\\n    /**\\n     * Initializes an object clone based on its `toStringTag`.\\n     *\\n     * **Note:** This function only supports cloning values with tags of\\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\\n     *\\n     * @private\\n     * @param {Object} object The object to clone.\\n     * @param {string} tag The `toStringTag` of the object to clone.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @returns {Object} Returns the initialized clone.\\n     */\\n    function initCloneByTag(object, tag, isDeep) {\\n      var Ctor = object.constructor;\\n      switch (tag) {\\n        case arrayBufferTag:\\n          return bufferClone(object);\\n\\n        case boolTag:\\n        case dateTag:\\n          return new Ctor(+object);\\n\\n        case float32Tag: case float64Tag:\\n        case int8Tag: case int16Tag: case int32Tag:\\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\\n          var buffer = object.buffer;\\n          return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);\\n\\n        case numberTag:\\n        case stringTag:\\n          return new Ctor(object);\\n\\n        case regexpTag:\\n          var result = new Ctor(object.source, reFlags.exec(object));\\n          result.lastIndex = object.lastIndex;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Invokes the method at `path` on `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path of the method to invoke.\\n     * @param {Array} args The arguments to invoke the method with.\\n     * @returns {*} Returns the result of the invoked method.\\n     */\\n    function invokePath(object, path, args) {\\n      if (object != null && !isKey(path, object)) {\\n        path = toPath(path);\\n        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\\n        path = last(path);\\n      }\\n      var func = object == null ? object : object[path];\\n      return func == null ? undefined : func.apply(object, args);\\n    }\\n\\n    /**\\n     * Checks if `value` is array-like.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\\n     */\\n    function isArrayLike(value) {\\n      return value != null && isLength(getLength(value));\\n    }\\n\\n    /**\\n     * Checks if `value` is a valid array-like index.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\\n     */\\n    function isIndex(value, length) {\\n      value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\\n      length = length == null ? MAX_SAFE_INTEGER : length;\\n      return value > -1 && value % 1 == 0 && value < length;\\n    }\\n\\n    /**\\n     * Checks if the provided arguments are from an iteratee call.\\n     *\\n     * @private\\n     * @param {*} value The potential iteratee value argument.\\n     * @param {*} index The potential iteratee index or key argument.\\n     * @param {*} object The potential iteratee object argument.\\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\\n     */\\n    function isIterateeCall(value, index, object) {\\n      if (!isObject(object)) {\\n        return false;\\n      }\\n      var type = typeof index;\\n      if (type == 'number'\\n          ? (isArrayLike(object) && isIndex(index, object.length))\\n          : (type == 'string' && index in object)) {\\n        var other = object[index];\\n        return value === value ? (value === other) : (other !== other);\\n      }\\n      return false;\\n    }\\n\\n    /**\\n     * Checks if `value` is a property name and not a property path.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @param {Object} [object] The object to query keys on.\\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\\n     */\\n    function isKey(value, object) {\\n      var type = typeof value;\\n      if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {\\n        return true;\\n      }\\n      if (isArray(value)) {\\n        return false;\\n      }\\n      var result = !reIsDeepProp.test(value);\\n      return result || (object != null && value in toObject(object));\\n    }\\n\\n    /**\\n     * Checks if `func` has a lazy counterpart.\\n     *\\n     * @private\\n     * @param {Function} func The function to check.\\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`.\\n     */\\n    function isLaziable(func) {\\n      var funcName = getFuncName(func);\\n      if (!(funcName in LazyWrapper.prototype)) {\\n        return false;\\n      }\\n      var other = lodash[funcName];\\n      if (func === other) {\\n        return true;\\n      }\\n      var data = getData(other);\\n      return !!data && func === data[0];\\n    }\\n\\n    /**\\n     * Checks if `value` is a valid array-like length.\\n     *\\n     * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\\n     */\\n    function isLength(value) {\\n      return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\\n    }\\n\\n    /**\\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\\n     *\\n     * @private\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\\n     *  equality comparisons, else `false`.\\n     */\\n    function isStrictComparable(value) {\\n      return value === value && !isObject(value);\\n    }\\n\\n    /**\\n     * Merges the function metadata of `source` into `data`.\\n     *\\n     * Merging metadata reduces the number of wrappers required to invoke a function.\\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\\n     * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg`\\n     * augment function arguments, making the order in which they are executed important,\\n     * preventing the merging of metadata. However, we make an exception for a safe\\n     * common case where curried functions have `_.ary` and or `_.rearg` applied.\\n     *\\n     * @private\\n     * @param {Array} data The destination metadata.\\n     * @param {Array} source The source metadata.\\n     * @returns {Array} Returns `data`.\\n     */\\n    function mergeData(data, source) {\\n      var bitmask = data[1],\\n          srcBitmask = source[1],\\n          newBitmask = bitmask | srcBitmask,\\n          isCommon = newBitmask < ARY_FLAG;\\n\\n      var isCombo =\\n        (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) ||\\n        (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) ||\\n        (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG);\\n\\n      // Exit early if metadata can't be merged.\\n      if (!(isCommon || isCombo)) {\\n        return data;\\n      }\\n      // Use source `thisArg` if available.\\n      if (srcBitmask & BIND_FLAG) {\\n        data[2] = source[2];\\n        // Set when currying a bound function.\\n        newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG;\\n      }\\n      // Compose partial arguments.\\n      var value = source[3];\\n      if (value) {\\n        var partials = data[3];\\n        data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value);\\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]);\\n      }\\n      // Compose partial right arguments.\\n      value = source[5];\\n      if (value) {\\n        partials = data[5];\\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value);\\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]);\\n      }\\n      // Use source `argPos` if available.\\n      value = source[7];\\n      if (value) {\\n        data[7] = arrayCopy(value);\\n      }\\n      // Use source `ary` if it's smaller.\\n      if (srcBitmask & ARY_FLAG) {\\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\\n      }\\n      // Use source `arity` if one is not provided.\\n      if (data[9] == null) {\\n        data[9] = source[9];\\n      }\\n      // Use source `func` and merge bitmasks.\\n      data[0] = source[0];\\n      data[1] = newBitmask;\\n\\n      return data;\\n    }\\n\\n    /**\\n     * Used by `_.defaultsDeep` to customize its `_.merge` use.\\n     *\\n     * @private\\n     * @param {*} objectValue The destination object property value.\\n     * @param {*} sourceValue The source object property value.\\n     * @returns {*} Returns the value to assign to the destination object.\\n     */\\n    function mergeDefaults(objectValue, sourceValue) {\\n      return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults);\\n    }\\n\\n    /**\\n     * A specialized version of `_.pick` which picks `object` properties specified\\n     * by `props`.\\n     *\\n     * @private\\n     * @param {Object} object The source object.\\n     * @param {string[]} props The property names to pick.\\n     * @returns {Object} Returns the new object.\\n     */\\n    function pickByArray(object, props) {\\n      object = toObject(object);\\n\\n      var index = -1,\\n          length = props.length,\\n          result = {};\\n\\n      while (++index < length) {\\n        var key = props[index];\\n        if (key in object) {\\n          result[key] = object[key];\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * A specialized version of `_.pick` which picks `object` properties `predicate`\\n     * returns truthy for.\\n     *\\n     * @private\\n     * @param {Object} object The source object.\\n     * @param {Function} predicate The function invoked per iteration.\\n     * @returns {Object} Returns the new object.\\n     */\\n    function pickByCallback(object, predicate) {\\n      var result = {};\\n      baseForIn(object, function(value, key, object) {\\n        if (predicate(value, key, object)) {\\n          result[key] = value;\\n        }\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * Reorder `array` according to the specified indexes where the element at\\n     * the first index is assigned as the first element, the element at\\n     * the second index is assigned as the second element, and so on.\\n     *\\n     * @private\\n     * @param {Array} array The array to reorder.\\n     * @param {Array} indexes The arranged array indexes.\\n     * @returns {Array} Returns `array`.\\n     */\\n    function reorder(array, indexes) {\\n      var arrLength = array.length,\\n          length = nativeMin(indexes.length, arrLength),\\n          oldArray = arrayCopy(array);\\n\\n      while (length--) {\\n        var index = indexes[length];\\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * Sets metadata for `func`.\\n     *\\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\\n     * period of time, it will trip its breaker and transition to an identity function\\n     * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070)\\n     * for more details.\\n     *\\n     * @private\\n     * @param {Function} func The function to associate metadata with.\\n     * @param {*} data The metadata.\\n     * @returns {Function} Returns `func`.\\n     */\\n    var setData = (function() {\\n      var count = 0,\\n          lastCalled = 0;\\n\\n      return function(key, value) {\\n        var stamp = now(),\\n            remaining = HOT_SPAN - (stamp - lastCalled);\\n\\n        lastCalled = stamp;\\n        if (remaining > 0) {\\n          if (++count >= HOT_COUNT) {\\n            return key;\\n          }\\n        } else {\\n          count = 0;\\n        }\\n        return baseSetData(key, value);\\n      };\\n    }());\\n\\n    /**\\n     * A fallback implementation of `Object.keys` which creates an array of the\\n     * own enumerable property names of `object`.\\n     *\\n     * @private\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names.\\n     */\\n    function shimKeys(object) {\\n      var props = keysIn(object),\\n          propsLength = props.length,\\n          length = propsLength && object.length;\\n\\n      var allowIndexes = !!length && isLength(length) &&\\n        (isArray(object) || isArguments(object));\\n\\n      var index = -1,\\n          result = [];\\n\\n      while (++index < propsLength) {\\n        var key = props[index];\\n        if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\\n          result.push(key);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Converts `value` to an array-like object if it's not one.\\n     *\\n     * @private\\n     * @param {*} value The value to process.\\n     * @returns {Array|Object} Returns the array-like object.\\n     */\\n    function toIterable(value) {\\n      if (value == null) {\\n        return [];\\n      }\\n      if (!isArrayLike(value)) {\\n        return values(value);\\n      }\\n      return isObject(value) ? value : Object(value);\\n    }\\n\\n    /**\\n     * Converts `value` to an object if it's not one.\\n     *\\n     * @private\\n     * @param {*} value The value to process.\\n     * @returns {Object} Returns the object.\\n     */\\n    function toObject(value) {\\n      return isObject(value) ? value : Object(value);\\n    }\\n\\n    /**\\n     * Converts `value` to property path array if it's not one.\\n     *\\n     * @private\\n     * @param {*} value The value to process.\\n     * @returns {Array} Returns the property path array.\\n     */\\n    function toPath(value) {\\n      if (isArray(value)) {\\n        return value;\\n      }\\n      var result = [];\\n      baseToString(value).replace(rePropName, function(match, number, quote, string) {\\n        result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\\n      });\\n      return result;\\n    }\\n\\n    /**\\n     * Creates a clone of `wrapper`.\\n     *\\n     * @private\\n     * @param {Object} wrapper The wrapper to clone.\\n     * @returns {Object} Returns the cloned wrapper.\\n     */\\n    function wrapperClone(wrapper) {\\n      return wrapper instanceof LazyWrapper\\n        ? wrapper.clone()\\n        : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__));\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates an array of elements split into groups the length of `size`.\\n     * If `collection` can't be split evenly, the final chunk will be the remaining\\n     * elements.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to process.\\n     * @param {number} [size=1] The length of each chunk.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Array} Returns the new array containing chunks.\\n     * @example\\n     *\\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\\n     * // => [['a', 'b'], ['c', 'd']]\\n     *\\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\\n     * // => [['a', 'b', 'c'], ['d']]\\n     */\\n    function chunk(array, size, guard) {\\n      if (guard ? isIterateeCall(array, size, guard) : size == null) {\\n        size = 1;\\n      } else {\\n        size = nativeMax(nativeFloor(size) || 1, 1);\\n      }\\n      var index = 0,\\n          length = array ? array.length : 0,\\n          resIndex = -1,\\n          result = Array(nativeCeil(length / size));\\n\\n      while (index < length) {\\n        result[++resIndex] = baseSlice(array, index, (index += size));\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an array with all falsey values removed. The values `false`, `null`,\\n     * `0`, `\\\"\\\"`, `undefined`, and `NaN` are falsey.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to compact.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @example\\n     *\\n     * _.compact([0, 1, false, 2, '', 3]);\\n     * // => [1, 2, 3]\\n     */\\n    function compact(array) {\\n      var index = -1,\\n          length = array ? array.length : 0,\\n          resIndex = -1,\\n          result = [];\\n\\n      while (++index < length) {\\n        var value = array[index];\\n        if (value) {\\n          result[++resIndex] = value;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an array of unique `array` values not included in the other\\n     * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {...Array} [values] The arrays of values to exclude.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @example\\n     *\\n     * _.difference([1, 2, 3], [4, 2]);\\n     * // => [1, 3]\\n     */\\n    var difference = restParam(function(array, values) {\\n      return (isObjectLike(array) && isArrayLike(array))\\n        ? baseDifference(array, baseFlatten(values, false, true))\\n        : [];\\n    });\\n\\n    /**\\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=1] The number of elements to drop.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.drop([1, 2, 3]);\\n     * // => [2, 3]\\n     *\\n     * _.drop([1, 2, 3], 2);\\n     * // => [3]\\n     *\\n     * _.drop([1, 2, 3], 5);\\n     * // => []\\n     *\\n     * _.drop([1, 2, 3], 0);\\n     * // => [1, 2, 3]\\n     */\\n    function drop(array, n, guard) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return [];\\n      }\\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\\n        n = 1;\\n      }\\n      return baseSlice(array, n < 0 ? 0 : n);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with `n` elements dropped from the end.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=1] The number of elements to drop.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.dropRight([1, 2, 3]);\\n     * // => [1, 2]\\n     *\\n     * _.dropRight([1, 2, 3], 2);\\n     * // => [1]\\n     *\\n     * _.dropRight([1, 2, 3], 5);\\n     * // => []\\n     *\\n     * _.dropRight([1, 2, 3], 0);\\n     * // => [1, 2, 3]\\n     */\\n    function dropRight(array, n, guard) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return [];\\n      }\\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\\n        n = 1;\\n      }\\n      n = length - (+n || 0);\\n      return baseSlice(array, 0, n < 0 ? 0 : n);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` excluding elements dropped from the end.\\n     * Elements are dropped until `predicate` returns falsey. The predicate is\\n     * bound to `thisArg` and invoked with three arguments: (value, index, array).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that match the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.dropRightWhile([1, 2, 3], function(n) {\\n     *   return n > 1;\\n     * });\\n     * // => [1]\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': true },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': false }\\n     * ];\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.pluck(_.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');\\n     * // => ['barney', 'fred']\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.pluck(_.dropRightWhile(users, 'active', false), 'user');\\n     * // => ['barney']\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.pluck(_.dropRightWhile(users, 'active'), 'user');\\n     * // => ['barney', 'fred', 'pebbles']\\n     */\\n    function dropRightWhile(array, predicate, thisArg) {\\n      return (array && array.length)\\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), true, true)\\n        : [];\\n    }\\n\\n    /**\\n     * Creates a slice of `array` excluding elements dropped from the beginning.\\n     * Elements are dropped until `predicate` returns falsey. The predicate is\\n     * bound to `thisArg` and invoked with three arguments: (value, index, array).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.dropWhile([1, 2, 3], function(n) {\\n     *   return n < 3;\\n     * });\\n     * // => [3]\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': false },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': true }\\n     * ];\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user');\\n     * // => ['fred', 'pebbles']\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.pluck(_.dropWhile(users, 'active', false), 'user');\\n     * // => ['pebbles']\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.pluck(_.dropWhile(users, 'active'), 'user');\\n     * // => ['barney', 'fred', 'pebbles']\\n     */\\n    function dropWhile(array, predicate, thisArg) {\\n      return (array && array.length)\\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), true)\\n        : [];\\n    }\\n\\n    /**\\n     * Fills elements of `array` with `value` from `start` up to, but not\\n     * including, `end`.\\n     *\\n     * **Note:** This method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to fill.\\n     * @param {*} value The value to fill `array` with.\\n     * @param {number} [start=0] The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns `array`.\\n     * @example\\n     *\\n     * var array = [1, 2, 3];\\n     *\\n     * _.fill(array, 'a');\\n     * console.log(array);\\n     * // => ['a', 'a', 'a']\\n     *\\n     * _.fill(Array(3), 2);\\n     * // => [2, 2, 2]\\n     *\\n     * _.fill([4, 6, 8], '*', 1, 2);\\n     * // => [4, '*', 8]\\n     */\\n    function fill(array, value, start, end) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return [];\\n      }\\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\\n        start = 0;\\n        end = length;\\n      }\\n      return baseFill(array, value, start, end);\\n    }\\n\\n    /**\\n     * This method is like `_.find` except that it returns the index of the first\\n     * element `predicate` returns truthy for instead of the element itself.\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to search.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {number} Returns the index of the found element, else `-1`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': false },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': true }\\n     * ];\\n     *\\n     * _.findIndex(users, function(chr) {\\n     *   return chr.user == 'barney';\\n     * });\\n     * // => 0\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\\n     * // => 1\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.findIndex(users, 'active', false);\\n     * // => 0\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.findIndex(users, 'active');\\n     * // => 2\\n     */\\n    var findIndex = createFindIndex();\\n\\n    /**\\n     * This method is like `_.findIndex` except that it iterates over elements\\n     * of `collection` from right to left.\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to search.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {number} Returns the index of the found element, else `-1`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': true },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': false }\\n     * ];\\n     *\\n     * _.findLastIndex(users, function(chr) {\\n     *   return chr.user == 'pebbles';\\n     * });\\n     * // => 2\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\\n     * // => 0\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.findLastIndex(users, 'active', false);\\n     * // => 2\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.findLastIndex(users, 'active');\\n     * // => 0\\n     */\\n    var findLastIndex = createFindIndex(true);\\n\\n    /**\\n     * Gets the first element of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias head\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @returns {*} Returns the first element of `array`.\\n     * @example\\n     *\\n     * _.first([1, 2, 3]);\\n     * // => 1\\n     *\\n     * _.first([]);\\n     * // => undefined\\n     */\\n    function first(array) {\\n      return array ? array[0] : undefined;\\n    }\\n\\n    /**\\n     * Flattens a nested array. If `isDeep` is `true` the array is recursively\\n     * flattened, otherwise it is only flattened a single level.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to flatten.\\n     * @param {boolean} [isDeep] Specify a deep flatten.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Array} Returns the new flattened array.\\n     * @example\\n     *\\n     * _.flatten([1, [2, 3, [4]]]);\\n     * // => [1, 2, 3, [4]]\\n     *\\n     * // using `isDeep`\\n     * _.flatten([1, [2, 3, [4]]], true);\\n     * // => [1, 2, 3, 4]\\n     */\\n    function flatten(array, isDeep, guard) {\\n      var length = array ? array.length : 0;\\n      if (guard && isIterateeCall(array, isDeep, guard)) {\\n        isDeep = false;\\n      }\\n      return length ? baseFlatten(array, isDeep) : [];\\n    }\\n\\n    /**\\n     * Recursively flattens a nested array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to recursively flatten.\\n     * @returns {Array} Returns the new flattened array.\\n     * @example\\n     *\\n     * _.flattenDeep([1, [2, 3, [4]]]);\\n     * // => [1, 2, 3, 4]\\n     */\\n    function flattenDeep(array) {\\n      var length = array ? array.length : 0;\\n      return length ? baseFlatten(array, true) : [];\\n    }\\n\\n    /**\\n     * Gets the index at which the first occurrence of `value` is found in `array`\\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\\n     * for equality comparisons. If `fromIndex` is negative, it is used as the offset\\n     * from the end of `array`. If `array` is sorted providing `true` for `fromIndex`\\n     * performs a faster binary search.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to search.\\n     * @param {*} value The value to search for.\\n     * @param {boolean|number} [fromIndex=0] The index to search from or `true`\\n     *  to perform a binary search on a sorted array.\\n     * @returns {number} Returns the index of the matched value, else `-1`.\\n     * @example\\n     *\\n     * _.indexOf([1, 2, 1, 2], 2);\\n     * // => 1\\n     *\\n     * // using `fromIndex`\\n     * _.indexOf([1, 2, 1, 2], 2, 2);\\n     * // => 3\\n     *\\n     * // performing a binary search\\n     * _.indexOf([1, 1, 2, 2], 2, true);\\n     * // => 2\\n     */\\n    function indexOf(array, value, fromIndex) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return -1;\\n      }\\n      if (typeof fromIndex == 'number') {\\n        fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;\\n      } else if (fromIndex) {\\n        var index = binaryIndex(array, value);\\n        if (index < length &&\\n            (value === value ? (value === array[index]) : (array[index] !== array[index]))) {\\n          return index;\\n        }\\n        return -1;\\n      }\\n      return baseIndexOf(array, value, fromIndex || 0);\\n    }\\n\\n    /**\\n     * Gets all but the last element of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.initial([1, 2, 3]);\\n     * // => [1, 2]\\n     */\\n    function initial(array) {\\n      return dropRight(array, 1);\\n    }\\n\\n    /**\\n     * Creates an array of unique values that are included in all of the provided\\n     * arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @returns {Array} Returns the new array of shared values.\\n     * @example\\n     * _.intersection([1, 2], [4, 2], [2, 1]);\\n     * // => [2]\\n     */\\n    var intersection = restParam(function(arrays) {\\n      var othLength = arrays.length,\\n          othIndex = othLength,\\n          caches = Array(length),\\n          indexOf = getIndexOf(),\\n          isCommon = indexOf == baseIndexOf,\\n          result = [];\\n\\n      while (othIndex--) {\\n        var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : [];\\n        caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null;\\n      }\\n      var array = arrays[0],\\n          index = -1,\\n          length = array ? array.length : 0,\\n          seen = caches[0];\\n\\n      outer:\\n      while (++index < length) {\\n        value = array[index];\\n        if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) {\\n          var othIndex = othLength;\\n          while (--othIndex) {\\n            var cache = caches[othIndex];\\n            if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) {\\n              continue outer;\\n            }\\n          }\\n          if (seen) {\\n            seen.push(value);\\n          }\\n          result.push(value);\\n        }\\n      }\\n      return result;\\n    });\\n\\n    /**\\n     * Gets the last element of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @returns {*} Returns the last element of `array`.\\n     * @example\\n     *\\n     * _.last([1, 2, 3]);\\n     * // => 3\\n     */\\n    function last(array) {\\n      var length = array ? array.length : 0;\\n      return length ? array[length - 1] : undefined;\\n    }\\n\\n    /**\\n     * This method is like `_.indexOf` except that it iterates over elements of\\n     * `array` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to search.\\n     * @param {*} value The value to search for.\\n     * @param {boolean|number} [fromIndex=array.length-1] The index to search from\\n     *  or `true` to perform a binary search on a sorted array.\\n     * @returns {number} Returns the index of the matched value, else `-1`.\\n     * @example\\n     *\\n     * _.lastIndexOf([1, 2, 1, 2], 2);\\n     * // => 3\\n     *\\n     * // using `fromIndex`\\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\\n     * // => 1\\n     *\\n     * // performing a binary search\\n     * _.lastIndexOf([1, 1, 2, 2], 2, true);\\n     * // => 3\\n     */\\n    function lastIndexOf(array, value, fromIndex) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return -1;\\n      }\\n      var index = length;\\n      if (typeof fromIndex == 'number') {\\n        index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1;\\n      } else if (fromIndex) {\\n        index = binaryIndex(array, value, true) - 1;\\n        var other = array[index];\\n        if (value === value ? (value === other) : (other !== other)) {\\n          return index;\\n        }\\n        return -1;\\n      }\\n      if (value !== value) {\\n        return indexOfNaN(array, index, true);\\n      }\\n      while (index--) {\\n        if (array[index] === value) {\\n          return index;\\n        }\\n      }\\n      return -1;\\n    }\\n\\n    /**\\n     * Removes all provided values from `array` using\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * **Note:** Unlike `_.without`, this method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {...*} [values] The values to remove.\\n     * @returns {Array} Returns `array`.\\n     * @example\\n     *\\n     * var array = [1, 2, 3, 1, 2, 3];\\n     *\\n     * _.pull(array, 2, 3);\\n     * console.log(array);\\n     * // => [1, 1]\\n     */\\n    function pull() {\\n      var args = arguments,\\n          array = args[0];\\n\\n      if (!(array && array.length)) {\\n        return array;\\n      }\\n      var index = 0,\\n          indexOf = getIndexOf(),\\n          length = args.length;\\n\\n      while (++index < length) {\\n        var fromIndex = 0,\\n            value = args[index];\\n\\n        while ((fromIndex = indexOf(array, value, fromIndex)) > -1) {\\n          splice.call(array, fromIndex, 1);\\n        }\\n      }\\n      return array;\\n    }\\n\\n    /**\\n     * Removes elements from `array` corresponding to the given indexes and returns\\n     * an array of the removed elements. Indexes may be specified as an array of\\n     * indexes or as individual arguments.\\n     *\\n     * **Note:** Unlike `_.at`, this method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove,\\n     *  specified as individual indexes or arrays of indexes.\\n     * @returns {Array} Returns the new array of removed elements.\\n     * @example\\n     *\\n     * var array = [5, 10, 15, 20];\\n     * var evens = _.pullAt(array, 1, 3);\\n     *\\n     * console.log(array);\\n     * // => [5, 15]\\n     *\\n     * console.log(evens);\\n     * // => [10, 20]\\n     */\\n    var pullAt = restParam(function(array, indexes) {\\n      indexes = baseFlatten(indexes);\\n\\n      var result = baseAt(array, indexes);\\n      basePullAt(array, indexes.sort(baseCompareAscending));\\n      return result;\\n    });\\n\\n    /**\\n     * Removes all elements from `array` that `predicate` returns truthy for\\n     * and returns an array of the removed elements. The predicate is bound to\\n     * `thisArg` and invoked with three arguments: (value, index, array).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * **Note:** Unlike `_.filter`, this method mutates `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to modify.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Array} Returns the new array of removed elements.\\n     * @example\\n     *\\n     * var array = [1, 2, 3, 4];\\n     * var evens = _.remove(array, function(n) {\\n     *   return n % 2 == 0;\\n     * });\\n     *\\n     * console.log(array);\\n     * // => [1, 3]\\n     *\\n     * console.log(evens);\\n     * // => [2, 4]\\n     */\\n    function remove(array, predicate, thisArg) {\\n      var result = [];\\n      if (!(array && array.length)) {\\n        return result;\\n      }\\n      var index = -1,\\n          indexes = [],\\n          length = array.length;\\n\\n      predicate = getCallback(predicate, thisArg, 3);\\n      while (++index < length) {\\n        var value = array[index];\\n        if (predicate(value, index, array)) {\\n          result.push(value);\\n          indexes.push(index);\\n        }\\n      }\\n      basePullAt(array, indexes);\\n      return result;\\n    }\\n\\n    /**\\n     * Gets all but the first element of `array`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias tail\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.rest([1, 2, 3]);\\n     * // => [2, 3]\\n     */\\n    function rest(array) {\\n      return drop(array, 1);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\\n     *\\n     * **Note:** This method is used instead of `Array#slice` to support node\\n     * lists in IE < 9 and to ensure dense arrays are returned.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to slice.\\n     * @param {number} [start=0] The start position.\\n     * @param {number} [end=array.length] The end position.\\n     * @returns {Array} Returns the slice of `array`.\\n     */\\n    function slice(array, start, end) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return [];\\n      }\\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\\n        start = 0;\\n        end = length;\\n      }\\n      return baseSlice(array, start, end);\\n    }\\n\\n    /**\\n     * Uses a binary search to determine the lowest index at which `value` should\\n     * be inserted into `array` in order to maintain its sort order. If an iteratee\\n     * function is provided it is invoked for `value` and each element of `array`\\n     * to compute their sort ranking. The iteratee is bound to `thisArg` and\\n     * invoked with one argument; (value).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     * @example\\n     *\\n     * _.sortedIndex([30, 50], 40);\\n     * // => 1\\n     *\\n     * _.sortedIndex([4, 4, 5, 5], 5);\\n     * // => 2\\n     *\\n     * var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } };\\n     *\\n     * // using an iteratee function\\n     * _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) {\\n     *   return this.data[word];\\n     * }, dict);\\n     * // => 1\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');\\n     * // => 1\\n     */\\n    var sortedIndex = createSortedIndex();\\n\\n    /**\\n     * This method is like `_.sortedIndex` except that it returns the highest\\n     * index at which `value` should be inserted into `array` in order to\\n     * maintain its sort order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The sorted array to inspect.\\n     * @param {*} value The value to evaluate.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {number} Returns the index at which `value` should be inserted\\n     *  into `array`.\\n     * @example\\n     *\\n     * _.sortedLastIndex([4, 4, 5, 5], 5);\\n     * // => 4\\n     */\\n    var sortedLastIndex = createSortedIndex(true);\\n\\n    /**\\n     * Creates a slice of `array` with `n` elements taken from the beginning.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=1] The number of elements to take.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.take([1, 2, 3]);\\n     * // => [1]\\n     *\\n     * _.take([1, 2, 3], 2);\\n     * // => [1, 2]\\n     *\\n     * _.take([1, 2, 3], 5);\\n     * // => [1, 2, 3]\\n     *\\n     * _.take([1, 2, 3], 0);\\n     * // => []\\n     */\\n    function take(array, n, guard) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return [];\\n      }\\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\\n        n = 1;\\n      }\\n      return baseSlice(array, 0, n < 0 ? 0 : n);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with `n` elements taken from the end.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {number} [n=1] The number of elements to take.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.takeRight([1, 2, 3]);\\n     * // => [3]\\n     *\\n     * _.takeRight([1, 2, 3], 2);\\n     * // => [2, 3]\\n     *\\n     * _.takeRight([1, 2, 3], 5);\\n     * // => [1, 2, 3]\\n     *\\n     * _.takeRight([1, 2, 3], 0);\\n     * // => []\\n     */\\n    function takeRight(array, n, guard) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return [];\\n      }\\n      if (guard ? isIterateeCall(array, n, guard) : n == null) {\\n        n = 1;\\n      }\\n      n = length - (+n || 0);\\n      return baseSlice(array, n < 0 ? 0 : n);\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with elements taken from the end. Elements are\\n     * taken until `predicate` returns falsey. The predicate is bound to `thisArg`\\n     * and invoked with three arguments: (value, index, array).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.takeRightWhile([1, 2, 3], function(n) {\\n     *   return n > 1;\\n     * });\\n     * // => [2, 3]\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': true },\\n     *   { 'user': 'fred',    'active': false },\\n     *   { 'user': 'pebbles', 'active': false }\\n     * ];\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.pluck(_.takeRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');\\n     * // => ['pebbles']\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.pluck(_.takeRightWhile(users, 'active', false), 'user');\\n     * // => ['fred', 'pebbles']\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.pluck(_.takeRightWhile(users, 'active'), 'user');\\n     * // => []\\n     */\\n    function takeRightWhile(array, predicate, thisArg) {\\n      return (array && array.length)\\n        ? baseWhile(array, getCallback(predicate, thisArg, 3), false, true)\\n        : [];\\n    }\\n\\n    /**\\n     * Creates a slice of `array` with elements taken from the beginning. Elements\\n     * are taken until `predicate` returns falsey. The predicate is bound to\\n     * `thisArg` and invoked with three arguments: (value, index, array).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to query.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Array} Returns the slice of `array`.\\n     * @example\\n     *\\n     * _.takeWhile([1, 2, 3], function(n) {\\n     *   return n < 3;\\n     * });\\n     * // => [1, 2]\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'active': false },\\n     *   { 'user': 'fred',    'active': false},\\n     *   { 'user': 'pebbles', 'active': true }\\n     * ];\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.pluck(_.takeWhile(users, { 'user': 'barney', 'active': false }), 'user');\\n     * // => ['barney']\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.pluck(_.takeWhile(users, 'active', false), 'user');\\n     * // => ['barney', 'fred']\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.pluck(_.takeWhile(users, 'active'), 'user');\\n     * // => []\\n     */\\n    function takeWhile(array, predicate, thisArg) {\\n      return (array && array.length)\\n        ? baseWhile(array, getCallback(predicate, thisArg, 3))\\n        : [];\\n    }\\n\\n    /**\\n     * Creates an array of unique values, in order, from all of the provided arrays\\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @returns {Array} Returns the new array of combined values.\\n     * @example\\n     *\\n     * _.union([1, 2], [4, 2], [2, 1]);\\n     * // => [1, 2, 4]\\n     */\\n    var union = restParam(function(arrays) {\\n      return baseUniq(baseFlatten(arrays, false, true));\\n    });\\n\\n    /**\\n     * Creates a duplicate-free version of an array, using\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\\n     * for equality comparisons, in which only the first occurence of each element\\n     * is kept. Providing `true` for `isSorted` performs a faster search algorithm\\n     * for sorted arrays. If an iteratee function is provided it is invoked for\\n     * each element in the array to generate the criterion by which uniqueness\\n     * is computed. The `iteratee` is bound to `thisArg` and invoked with three\\n     * arguments: (value, index, array).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias unique\\n     * @category Array\\n     * @param {Array} array The array to inspect.\\n     * @param {boolean} [isSorted] Specify the array is sorted.\\n     * @param {Function|Object|string} [iteratee] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Array} Returns the new duplicate-value-free array.\\n     * @example\\n     *\\n     * _.uniq([2, 1, 2]);\\n     * // => [2, 1]\\n     *\\n     * // using `isSorted`\\n     * _.uniq([1, 1, 2], true);\\n     * // => [1, 2]\\n     *\\n     * // using an iteratee function\\n     * _.uniq([1, 2.5, 1.5, 2], function(n) {\\n     *   return this.floor(n);\\n     * }, Math);\\n     * // => [1, 2.5]\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\\n     * // => [{ 'x': 1 }, { 'x': 2 }]\\n     */\\n    function uniq(array, isSorted, iteratee, thisArg) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return [];\\n      }\\n      if (isSorted != null && typeof isSorted != 'boolean') {\\n        thisArg = iteratee;\\n        iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted;\\n        isSorted = false;\\n      }\\n      var callback = getCallback();\\n      if (!(iteratee == null && callback === baseCallback)) {\\n        iteratee = callback(iteratee, thisArg, 3);\\n      }\\n      return (isSorted && getIndexOf() == baseIndexOf)\\n        ? sortedUniq(array, iteratee)\\n        : baseUniq(array, iteratee);\\n    }\\n\\n    /**\\n     * This method is like `_.zip` except that it accepts an array of grouped\\n     * elements and creates an array regrouping the elements to their pre-zip\\n     * configuration.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array of grouped elements to process.\\n     * @returns {Array} Returns the new array of regrouped elements.\\n     * @example\\n     *\\n     * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]);\\n     * // => [['fred', 30, true], ['barney', 40, false]]\\n     *\\n     * _.unzip(zipped);\\n     * // => [['fred', 'barney'], [30, 40], [true, false]]\\n     */\\n    function unzip(array) {\\n      if (!(array && array.length)) {\\n        return [];\\n      }\\n      var index = -1,\\n          length = 0;\\n\\n      array = arrayFilter(array, function(group) {\\n        if (isArrayLike(group)) {\\n          length = nativeMax(group.length, length);\\n          return true;\\n        }\\n      });\\n      var result = Array(length);\\n      while (++index < length) {\\n        result[index] = arrayMap(array, baseProperty(index));\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * This method is like `_.unzip` except that it accepts an iteratee to specify\\n     * how regrouped values should be combined. The `iteratee` is bound to `thisArg`\\n     * and invoked with four arguments: (accumulator, value, index, group).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array of grouped elements to process.\\n     * @param {Function} [iteratee] The function to combine regrouped values.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Array} Returns the new array of regrouped elements.\\n     * @example\\n     *\\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\\n     * // => [[1, 10, 100], [2, 20, 200]]\\n     *\\n     * _.unzipWith(zipped, _.add);\\n     * // => [3, 30, 300]\\n     */\\n    function unzipWith(array, iteratee, thisArg) {\\n      var length = array ? array.length : 0;\\n      if (!length) {\\n        return [];\\n      }\\n      var result = unzip(array);\\n      if (iteratee == null) {\\n        return result;\\n      }\\n      iteratee = bindCallback(iteratee, thisArg, 4);\\n      return arrayMap(result, function(group) {\\n        return arrayReduce(group, iteratee, undefined, true);\\n      });\\n    }\\n\\n    /**\\n     * Creates an array excluding all provided values using\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\\n     * for equality comparisons.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {Array} array The array to filter.\\n     * @param {...*} [values] The values to exclude.\\n     * @returns {Array} Returns the new array of filtered values.\\n     * @example\\n     *\\n     * _.without([1, 2, 1, 3], 1, 2);\\n     * // => [3]\\n     */\\n    var without = restParam(function(array, values) {\\n      return isArrayLike(array)\\n        ? baseDifference(array, values)\\n        : [];\\n    });\\n\\n    /**\\n     * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\\n     * of the provided arrays.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to inspect.\\n     * @returns {Array} Returns the new array of values.\\n     * @example\\n     *\\n     * _.xor([1, 2], [4, 2]);\\n     * // => [1, 4]\\n     */\\n    function xor() {\\n      var index = -1,\\n          length = arguments.length;\\n\\n      while (++index < length) {\\n        var array = arguments[index];\\n        if (isArrayLike(array)) {\\n          var result = result\\n            ? arrayPush(baseDifference(result, array), baseDifference(array, result))\\n            : array;\\n        }\\n      }\\n      return result ? baseUniq(result) : [];\\n    }\\n\\n    /**\\n     * Creates an array of grouped elements, the first of which contains the first\\n     * elements of the given arrays, the second of which contains the second elements\\n     * of the given arrays, and so on.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to process.\\n     * @returns {Array} Returns the new array of grouped elements.\\n     * @example\\n     *\\n     * _.zip(['fred', 'barney'], [30, 40], [true, false]);\\n     * // => [['fred', 30, true], ['barney', 40, false]]\\n     */\\n    var zip = restParam(unzip);\\n\\n    /**\\n     * The inverse of `_.pairs`; this method returns an object composed from arrays\\n     * of property names and values. Provide either a single two dimensional array,\\n     * e.g. `[[key1, value1], [key2, value2]]` or two arrays, one of property names\\n     * and one of corresponding values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias object\\n     * @category Array\\n     * @param {Array} props The property names.\\n     * @param {Array} [values=[]] The property values.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * _.zipObject([['fred', 30], ['barney', 40]]);\\n     * // => { 'fred': 30, 'barney': 40 }\\n     *\\n     * _.zipObject(['fred', 'barney'], [30, 40]);\\n     * // => { 'fred': 30, 'barney': 40 }\\n     */\\n    function zipObject(props, values) {\\n      var index = -1,\\n          length = props ? props.length : 0,\\n          result = {};\\n\\n      if (length && !values && !isArray(props[0])) {\\n        values = [];\\n      }\\n      while (++index < length) {\\n        var key = props[index];\\n        if (values) {\\n          result[key] = values[index];\\n        } else if (key) {\\n          result[key[0]] = key[1];\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * This method is like `_.zip` except that it accepts an iteratee to specify\\n     * how grouped values should be combined. The `iteratee` is bound to `thisArg`\\n     * and invoked with four arguments: (accumulator, value, index, group).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Array\\n     * @param {...Array} [arrays] The arrays to process.\\n     * @param {Function} [iteratee] The function to combine grouped values.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Array} Returns the new array of grouped elements.\\n     * @example\\n     *\\n     * _.zipWith([1, 2], [10, 20], [100, 200], _.add);\\n     * // => [111, 222]\\n     */\\n    var zipWith = restParam(function(arrays) {\\n      var length = arrays.length,\\n          iteratee = length > 2 ? arrays[length - 2] : undefined,\\n          thisArg = length > 1 ? arrays[length - 1] : undefined;\\n\\n      if (length > 2 && typeof iteratee == 'function') {\\n        length -= 2;\\n      } else {\\n        iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined;\\n        thisArg = undefined;\\n      }\\n      arrays.length = length;\\n      return unzipWith(arrays, iteratee, thisArg);\\n    });\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a `lodash` object that wraps `value` with explicit method\\n     * chaining enabled.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Chain\\n     * @param {*} value The value to wrap.\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'age': 36 },\\n     *   { 'user': 'fred',    'age': 40 },\\n     *   { 'user': 'pebbles', 'age': 1 }\\n     * ];\\n     *\\n     * var youngest = _.chain(users)\\n     *   .sortBy('age')\\n     *   .map(function(chr) {\\n     *     return chr.user + ' is ' + chr.age;\\n     *   })\\n     *   .first()\\n     *   .value();\\n     * // => 'pebbles is 1'\\n     */\\n    function chain(value) {\\n      var result = lodash(value);\\n      result.__chain__ = true;\\n      return result;\\n    }\\n\\n    /**\\n     * This method invokes `interceptor` and returns `value`. The interceptor is\\n     * bound to `thisArg` and invoked with one argument; (value). The purpose of\\n     * this method is to \\\"tap into\\\" a method chain in order to perform operations\\n     * on intermediate results within the chain.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Chain\\n     * @param {*} value The value to provide to `interceptor`.\\n     * @param {Function} interceptor The function to invoke.\\n     * @param {*} [thisArg] The `this` binding of `interceptor`.\\n     * @returns {*} Returns `value`.\\n     * @example\\n     *\\n     * _([1, 2, 3])\\n     *  .tap(function(array) {\\n     *    array.pop();\\n     *  })\\n     *  .reverse()\\n     *  .value();\\n     * // => [2, 1]\\n     */\\n    function tap(value, interceptor, thisArg) {\\n      interceptor.call(thisArg, value);\\n      return value;\\n    }\\n\\n    /**\\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Chain\\n     * @param {*} value The value to provide to `interceptor`.\\n     * @param {Function} interceptor The function to invoke.\\n     * @param {*} [thisArg] The `this` binding of `interceptor`.\\n     * @returns {*} Returns the result of `interceptor`.\\n     * @example\\n     *\\n     * _('  abc  ')\\n     *  .chain()\\n     *  .trim()\\n     *  .thru(function(value) {\\n     *    return [value];\\n     *  })\\n     *  .value();\\n     * // => ['abc']\\n     */\\n    function thru(value, interceptor, thisArg) {\\n      return interceptor.call(thisArg, value);\\n    }\\n\\n    /**\\n     * Enables explicit method chaining on the wrapper object.\\n     *\\n     * @name chain\\n     * @memberOf _\\n     * @category Chain\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36 },\\n     *   { 'user': 'fred',   'age': 40 }\\n     * ];\\n     *\\n     * // without explicit chaining\\n     * _(users).first();\\n     * // => { 'user': 'barney', 'age': 36 }\\n     *\\n     * // with explicit chaining\\n     * _(users).chain()\\n     *   .first()\\n     *   .pick('user')\\n     *   .value();\\n     * // => { 'user': 'barney' }\\n     */\\n    function wrapperChain() {\\n      return chain(this);\\n    }\\n\\n    /**\\n     * Executes the chained sequence and returns the wrapped result.\\n     *\\n     * @name commit\\n     * @memberOf _\\n     * @category Chain\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var array = [1, 2];\\n     * var wrapped = _(array).push(3);\\n     *\\n     * console.log(array);\\n     * // => [1, 2]\\n     *\\n     * wrapped = wrapped.commit();\\n     * console.log(array);\\n     * // => [1, 2, 3]\\n     *\\n     * wrapped.last();\\n     * // => 3\\n     *\\n     * console.log(array);\\n     * // => [1, 2, 3]\\n     */\\n    function wrapperCommit() {\\n      return new LodashWrapper(this.value(), this.__chain__);\\n    }\\n\\n    /**\\n     * Creates a new array joining a wrapped array with any additional arrays\\n     * and/or values.\\n     *\\n     * @name concat\\n     * @memberOf _\\n     * @category Chain\\n     * @param {...*} [values] The values to concatenate.\\n     * @returns {Array} Returns the new concatenated array.\\n     * @example\\n     *\\n     * var array = [1];\\n     * var wrapped = _(array).concat(2, [3], [[4]]);\\n     *\\n     * console.log(wrapped.value());\\n     * // => [1, 2, 3, [4]]\\n     *\\n     * console.log(array);\\n     * // => [1]\\n     */\\n    var wrapperConcat = restParam(function(values) {\\n      values = baseFlatten(values);\\n      return this.thru(function(array) {\\n        return arrayConcat(isArray(array) ? array : [toObject(array)], values);\\n      });\\n    });\\n\\n    /**\\n     * Creates a clone of the chained sequence planting `value` as the wrapped value.\\n     *\\n     * @name plant\\n     * @memberOf _\\n     * @category Chain\\n     * @returns {Object} Returns the new `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var array = [1, 2];\\n     * var wrapped = _(array).map(function(value) {\\n     *   return Math.pow(value, 2);\\n     * });\\n     *\\n     * var other = [3, 4];\\n     * var otherWrapped = wrapped.plant(other);\\n     *\\n     * otherWrapped.value();\\n     * // => [9, 16]\\n     *\\n     * wrapped.value();\\n     * // => [1, 4]\\n     */\\n    function wrapperPlant(value) {\\n      var result,\\n          parent = this;\\n\\n      while (parent instanceof baseLodash) {\\n        var clone = wrapperClone(parent);\\n        if (result) {\\n          previous.__wrapped__ = clone;\\n        } else {\\n          result = clone;\\n        }\\n        var previous = clone;\\n        parent = parent.__wrapped__;\\n      }\\n      previous.__wrapped__ = value;\\n      return result;\\n    }\\n\\n    /**\\n     * Reverses the wrapped array so the first element becomes the last, the\\n     * second element becomes the second to last, and so on.\\n     *\\n     * **Note:** This method mutates the wrapped array.\\n     *\\n     * @name reverse\\n     * @memberOf _\\n     * @category Chain\\n     * @returns {Object} Returns the new reversed `lodash` wrapper instance.\\n     * @example\\n     *\\n     * var array = [1, 2, 3];\\n     *\\n     * _(array).reverse().value()\\n     * // => [3, 2, 1]\\n     *\\n     * console.log(array);\\n     * // => [3, 2, 1]\\n     */\\n    function wrapperReverse() {\\n      var value = this.__wrapped__;\\n\\n      var interceptor = function(value) {\\n        return (wrapped && wrapped.__dir__ < 0) ? value : value.reverse();\\n      };\\n      if (value instanceof LazyWrapper) {\\n        var wrapped = value;\\n        if (this.__actions__.length) {\\n          wrapped = new LazyWrapper(this);\\n        }\\n        wrapped = wrapped.reverse();\\n        wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\\n        return new LodashWrapper(wrapped, this.__chain__);\\n      }\\n      return this.thru(interceptor);\\n    }\\n\\n    /**\\n     * Produces the result of coercing the unwrapped value to a string.\\n     *\\n     * @name toString\\n     * @memberOf _\\n     * @category Chain\\n     * @returns {string} Returns the coerced string value.\\n     * @example\\n     *\\n     * _([1, 2, 3]).toString();\\n     * // => '1,2,3'\\n     */\\n    function wrapperToString() {\\n      return (this.value() + '');\\n    }\\n\\n    /**\\n     * Executes the chained sequence to extract the unwrapped value.\\n     *\\n     * @name value\\n     * @memberOf _\\n     * @alias run, toJSON, valueOf\\n     * @category Chain\\n     * @returns {*} Returns the resolved unwrapped value.\\n     * @example\\n     *\\n     * _([1, 2, 3]).value();\\n     * // => [1, 2, 3]\\n     */\\n    function wrapperValue() {\\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates an array of elements corresponding to the given keys, or indexes,\\n     * of `collection`. Keys may be specified as individual arguments or as arrays\\n     * of keys.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {...(number|number[]|string|string[])} [props] The property names\\n     *  or indexes of elements to pick, specified individually or in arrays.\\n     * @returns {Array} Returns the new array of picked elements.\\n     * @example\\n     *\\n     * _.at(['a', 'b', 'c'], [0, 2]);\\n     * // => ['a', 'c']\\n     *\\n     * _.at(['barney', 'fred', 'pebbles'], 0, 2);\\n     * // => ['barney', 'pebbles']\\n     */\\n    var at = restParam(function(collection, props) {\\n      return baseAt(collection, baseFlatten(props));\\n    });\\n\\n    /**\\n     * Creates an object composed of keys generated from the results of running\\n     * each element of `collection` through `iteratee`. The corresponding value\\n     * of each key is the number of times the key was returned by `iteratee`.\\n     * The `iteratee` is bound to `thisArg` and invoked with three arguments:\\n     * (value, index|key, collection).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns the composed aggregate object.\\n     * @example\\n     *\\n     * _.countBy([4.3, 6.1, 6.4], function(n) {\\n     *   return Math.floor(n);\\n     * });\\n     * // => { '4': 1, '6': 2 }\\n     *\\n     * _.countBy([4.3, 6.1, 6.4], function(n) {\\n     *   return this.floor(n);\\n     * }, Math);\\n     * // => { '4': 1, '6': 2 }\\n     *\\n     * _.countBy(['one', 'two', 'three'], 'length');\\n     * // => { '3': 2, '5': 1 }\\n     */\\n    var countBy = createAggregator(function(result, value, key) {\\n      hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1);\\n    });\\n\\n    /**\\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\\n     * The predicate is bound to `thisArg` and invoked with three arguments:\\n     * (value, index|key, collection).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias all\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.every([true, 1, null, 'yes'], Boolean);\\n     * // => false\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'active': false },\\n     *   { 'user': 'fred',   'active': false }\\n     * ];\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.every(users, { 'user': 'barney', 'active': false });\\n     * // => false\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.every(users, 'active', false);\\n     * // => true\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.every(users, 'active');\\n     * // => false\\n     */\\n    function every(collection, predicate, thisArg) {\\n      var func = isArray(collection) ? arrayEvery : baseEvery;\\n      if (thisArg && isIterateeCall(collection, predicate, thisArg)) {\\n        predicate = undefined;\\n      }\\n      if (typeof predicate != 'function' || thisArg !== undefined) {\\n        predicate = getCallback(predicate, thisArg, 3);\\n      }\\n      return func(collection, predicate);\\n    }\\n\\n    /**\\n     * Iterates over elements of `collection`, returning an array of all elements\\n     * `predicate` returns truthy for. The predicate is bound to `thisArg` and\\n     * invoked with three arguments: (value, index|key, collection).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias select\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Array} Returns the new filtered array.\\n     * @example\\n     *\\n     * _.filter([4, 5, 6], function(n) {\\n     *   return n % 2 == 0;\\n     * });\\n     * // => [4, 6]\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': true },\\n     *   { 'user': 'fred',   'age': 40, 'active': false }\\n     * ];\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user');\\n     * // => ['barney']\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.pluck(_.filter(users, 'active', false), 'user');\\n     * // => ['fred']\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.pluck(_.filter(users, 'active'), 'user');\\n     * // => ['barney']\\n     */\\n    function filter(collection, predicate, thisArg) {\\n      var func = isArray(collection) ? arrayFilter : baseFilter;\\n      predicate = getCallback(predicate, thisArg, 3);\\n      return func(collection, predicate);\\n    }\\n\\n    /**\\n     * Iterates over elements of `collection`, returning the first element\\n     * `predicate` returns truthy for. The predicate is bound to `thisArg` and\\n     * invoked with three arguments: (value, index|key, collection).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias detect\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to search.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {*} Returns the matched element, else `undefined`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'age': 36, 'active': true },\\n     *   { 'user': 'fred',    'age': 40, 'active': false },\\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\\n     * ];\\n     *\\n     * _.result(_.find(users, function(chr) {\\n     *   return chr.age < 40;\\n     * }), 'user');\\n     * // => 'barney'\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.result(_.find(users, { 'age': 1, 'active': true }), 'user');\\n     * // => 'pebbles'\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.result(_.find(users, 'active', false), 'user');\\n     * // => 'fred'\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.result(_.find(users, 'active'), 'user');\\n     * // => 'barney'\\n     */\\n    var find = createFind(baseEach);\\n\\n    /**\\n     * This method is like `_.find` except that it iterates over elements of\\n     * `collection` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to search.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {*} Returns the matched element, else `undefined`.\\n     * @example\\n     *\\n     * _.findLast([1, 2, 3, 4], function(n) {\\n     *   return n % 2 == 1;\\n     * });\\n     * // => 3\\n     */\\n    var findLast = createFind(baseEachRight, true);\\n\\n    /**\\n     * Performs a deep comparison between each element in `collection` and the\\n     * source object, returning the first element that has equivalent property\\n     * values.\\n     *\\n     * **Note:** This method supports comparing arrays, booleans, `Date` objects,\\n     * numbers, `Object` objects, regexes, and strings. Objects are compared by\\n     * their own, not inherited, enumerable properties. For comparing a single\\n     * own or inherited property value see `_.matchesProperty`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to search.\\n     * @param {Object} source The object of property values to match.\\n     * @returns {*} Returns the matched element, else `undefined`.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': true },\\n     *   { 'user': 'fred',   'age': 40, 'active': false }\\n     * ];\\n     *\\n     * _.result(_.findWhere(users, { 'age': 36, 'active': true }), 'user');\\n     * // => 'barney'\\n     *\\n     * _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user');\\n     * // => 'fred'\\n     */\\n    function findWhere(collection, source) {\\n      return find(collection, baseMatches(source));\\n    }\\n\\n    /**\\n     * Iterates over elements of `collection` invoking `iteratee` for each element.\\n     * The `iteratee` is bound to `thisArg` and invoked with three arguments:\\n     * (value, index|key, collection). Iteratee functions may exit iteration early\\n     * by explicitly returning `false`.\\n     *\\n     * **Note:** As with other \\\"Collections\\\" methods, objects with a \\\"length\\\" property\\n     * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`\\n     * may be used for object iteration.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias each\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Array|Object|string} Returns `collection`.\\n     * @example\\n     *\\n     * _([1, 2]).forEach(function(n) {\\n     *   console.log(n);\\n     * }).value();\\n     * // => logs each value from left to right and returns the array\\n     *\\n     * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) {\\n     *   console.log(n, key);\\n     * });\\n     * // => logs each value-key pair and returns the object (iteration order is not guaranteed)\\n     */\\n    var forEach = createForEach(arrayEach, baseEach);\\n\\n    /**\\n     * This method is like `_.forEach` except that it iterates over elements of\\n     * `collection` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias eachRight\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Array|Object|string} Returns `collection`.\\n     * @example\\n     *\\n     * _([1, 2]).forEachRight(function(n) {\\n     *   console.log(n);\\n     * }).value();\\n     * // => logs each value from right to left and returns the array\\n     */\\n    var forEachRight = createForEach(arrayEachRight, baseEachRight);\\n\\n    /**\\n     * Creates an object composed of keys generated from the results of running\\n     * each element of `collection` through `iteratee`. The corresponding value\\n     * of each key is an array of the elements responsible for generating the key.\\n     * The `iteratee` is bound to `thisArg` and invoked with three arguments:\\n     * (value, index|key, collection).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns the composed aggregate object.\\n     * @example\\n     *\\n     * _.groupBy([4.2, 6.1, 6.4], function(n) {\\n     *   return Math.floor(n);\\n     * });\\n     * // => { '4': [4.2], '6': [6.1, 6.4] }\\n     *\\n     * _.groupBy([4.2, 6.1, 6.4], function(n) {\\n     *   return this.floor(n);\\n     * }, Math);\\n     * // => { '4': [4.2], '6': [6.1, 6.4] }\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.groupBy(['one', 'two', 'three'], 'length');\\n     * // => { '3': ['one', 'two'], '5': ['three'] }\\n     */\\n    var groupBy = createAggregator(function(result, value, key) {\\n      if (hasOwnProperty.call(result, key)) {\\n        result[key].push(value);\\n      } else {\\n        result[key] = [value];\\n      }\\n    });\\n\\n    /**\\n     * Checks if `value` is in `collection` using\\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\\n     * for equality comparisons. If `fromIndex` is negative, it is used as the offset\\n     * from the end of `collection`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias contains, include\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to search.\\n     * @param {*} target The value to search for.\\n     * @param {number} [fromIndex=0] The index to search from.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.\\n     * @returns {boolean} Returns `true` if a matching element is found, else `false`.\\n     * @example\\n     *\\n     * _.includes([1, 2, 3], 1);\\n     * // => true\\n     *\\n     * _.includes([1, 2, 3], 1, 2);\\n     * // => false\\n     *\\n     * _.includes({ 'user': 'fred', 'age': 40 }, 'fred');\\n     * // => true\\n     *\\n     * _.includes('pebbles', 'eb');\\n     * // => true\\n     */\\n    function includes(collection, target, fromIndex, guard) {\\n      var length = collection ? getLength(collection) : 0;\\n      if (!isLength(length)) {\\n        collection = values(collection);\\n        length = collection.length;\\n      }\\n      if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {\\n        fromIndex = 0;\\n      } else {\\n        fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);\\n      }\\n      return (typeof collection == 'string' || !isArray(collection) && isString(collection))\\n        ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1)\\n        : (!!length && getIndexOf(collection, target, fromIndex) > -1);\\n    }\\n\\n    /**\\n     * Creates an object composed of keys generated from the results of running\\n     * each element of `collection` through `iteratee`. The corresponding value\\n     * of each key is the last element responsible for generating the key. The\\n     * iteratee function is bound to `thisArg` and invoked with three arguments:\\n     * (value, index|key, collection).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns the composed aggregate object.\\n     * @example\\n     *\\n     * var keyData = [\\n     *   { 'dir': 'left', 'code': 97 },\\n     *   { 'dir': 'right', 'code': 100 }\\n     * ];\\n     *\\n     * _.indexBy(keyData, 'dir');\\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\\n     *\\n     * _.indexBy(keyData, function(object) {\\n     *   return String.fromCharCode(object.code);\\n     * });\\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\\n     *\\n     * _.indexBy(keyData, function(object) {\\n     *   return this.fromCharCode(object.code);\\n     * }, String);\\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\\n     */\\n    var indexBy = createAggregator(function(result, value, key) {\\n      result[key] = value;\\n    });\\n\\n    /**\\n     * Invokes the method at `path` of each element in `collection`, returning\\n     * an array of the results of each invoked method. Any additional arguments\\n     * are provided to each invoked method. If `methodName` is a function it is\\n     * invoked for, and `this` bound to, each element in `collection`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Array|Function|string} path The path of the method to invoke or\\n     *  the function invoked per iteration.\\n     * @param {...*} [args] The arguments to invoke the method with.\\n     * @returns {Array} Returns the array of results.\\n     * @example\\n     *\\n     * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');\\n     * // => [[1, 5, 7], [1, 2, 3]]\\n     *\\n     * _.invoke([123, 456], String.prototype.split, '');\\n     * // => [['1', '2', '3'], ['4', '5', '6']]\\n     */\\n    var invoke = restParam(function(collection, path, args) {\\n      var index = -1,\\n          isFunc = typeof path == 'function',\\n          isProp = isKey(path),\\n          result = isArrayLike(collection) ? Array(collection.length) : [];\\n\\n      baseEach(collection, function(value) {\\n        var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined);\\n        result[++index] = func ? func.apply(value, args) : invokePath(value, path, args);\\n      });\\n      return result;\\n    });\\n\\n    /**\\n     * Creates an array of values by running each element in `collection` through\\n     * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three\\n     * arguments: (value, index|key, collection).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * Many lodash methods are guarded to work as iteratees for methods like\\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\\n     *\\n     * The guarded methods are:\\n     * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`,\\n     * `drop`, `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`,\\n     * `parseInt`, `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`,\\n     * `trimLeft`, `trimRight`, `trunc`, `random`, `range`, `sample`, `some`,\\n     * `sum`, `uniq`, and `words`\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias collect\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Array} Returns the new mapped array.\\n     * @example\\n     *\\n     * function timesThree(n) {\\n     *   return n * 3;\\n     * }\\n     *\\n     * _.map([1, 2], timesThree);\\n     * // => [3, 6]\\n     *\\n     * _.map({ 'a': 1, 'b': 2 }, timesThree);\\n     * // => [3, 6] (iteration order is not guaranteed)\\n     *\\n     * var users = [\\n     *   { 'user': 'barney' },\\n     *   { 'user': 'fred' }\\n     * ];\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.map(users, 'user');\\n     * // => ['barney', 'fred']\\n     */\\n    function map(collection, iteratee, thisArg) {\\n      var func = isArray(collection) ? arrayMap : baseMap;\\n      iteratee = getCallback(iteratee, thisArg, 3);\\n      return func(collection, iteratee);\\n    }\\n\\n    /**\\n     * Creates an array of elements split into two groups, the first of which\\n     * contains elements `predicate` returns truthy for, while the second of which\\n     * contains elements `predicate` returns falsey for. The predicate is bound\\n     * to `thisArg` and invoked with three arguments: (value, index|key, collection).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Array} Returns the array of grouped elements.\\n     * @example\\n     *\\n     * _.partition([1, 2, 3], function(n) {\\n     *   return n % 2;\\n     * });\\n     * // => [[1, 3], [2]]\\n     *\\n     * _.partition([1.2, 2.3, 3.4], function(n) {\\n     *   return this.floor(n) % 2;\\n     * }, Math);\\n     * // => [[1.2, 3.4], [2.3]]\\n     *\\n     * var users = [\\n     *   { 'user': 'barney',  'age': 36, 'active': false },\\n     *   { 'user': 'fred',    'age': 40, 'active': true },\\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\\n     * ];\\n     *\\n     * var mapper = function(array) {\\n     *   return _.pluck(array, 'user');\\n     * };\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.map(_.partition(users, { 'age': 1, 'active': false }), mapper);\\n     * // => [['pebbles'], ['barney', 'fred']]\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.map(_.partition(users, 'active', false), mapper);\\n     * // => [['barney', 'pebbles'], ['fred']]\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.map(_.partition(users, 'active'), mapper);\\n     * // => [['fred'], ['barney', 'pebbles']]\\n     */\\n    var partition = createAggregator(function(result, value, key) {\\n      result[key ? 0 : 1].push(value);\\n    }, function() { return [[], []]; });\\n\\n    /**\\n     * Gets the property value of `path` from all elements in `collection`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Array|string} path The path of the property to pluck.\\n     * @returns {Array} Returns the property values.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36 },\\n     *   { 'user': 'fred',   'age': 40 }\\n     * ];\\n     *\\n     * _.pluck(users, 'user');\\n     * // => ['barney', 'fred']\\n     *\\n     * var userIndex = _.indexBy(users, 'user');\\n     * _.pluck(userIndex, 'age');\\n     * // => [36, 40] (iteration order is not guaranteed)\\n     */\\n    function pluck(collection, path) {\\n      return map(collection, property(path));\\n    }\\n\\n    /**\\n     * Reduces `collection` to a value which is the accumulated result of running\\n     * each element in `collection` through `iteratee`, where each successive\\n     * invocation is supplied the return value of the previous. If `accumulator`\\n     * is not provided the first element of `collection` is used as the initial\\n     * value. The `iteratee` is bound to `thisArg` and invoked with four arguments:\\n     * (accumulator, value, index|key, collection).\\n     *\\n     * Many lodash methods are guarded to work as iteratees for methods like\\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\\n     *\\n     * The guarded methods are:\\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `sortByAll`,\\n     * and `sortByOrder`\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias foldl, inject\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [accumulator] The initial value.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {*} Returns the accumulated value.\\n     * @example\\n     *\\n     * _.reduce([1, 2], function(total, n) {\\n     *   return total + n;\\n     * });\\n     * // => 3\\n     *\\n     * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) {\\n     *   result[key] = n * 3;\\n     *   return result;\\n     * }, {});\\n     * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed)\\n     */\\n    var reduce = createReduce(arrayReduce, baseEach);\\n\\n    /**\\n     * This method is like `_.reduce` except that it iterates over elements of\\n     * `collection` from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias foldr\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [accumulator] The initial value.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {*} Returns the accumulated value.\\n     * @example\\n     *\\n     * var array = [[0, 1], [2, 3], [4, 5]];\\n     *\\n     * _.reduceRight(array, function(flattened, other) {\\n     *   return flattened.concat(other);\\n     * }, []);\\n     * // => [4, 5, 2, 3, 0, 1]\\n     */\\n    var reduceRight = createReduce(arrayReduceRight, baseEachRight);\\n\\n    /**\\n     * The opposite of `_.filter`; this method returns the elements of `collection`\\n     * that `predicate` does **not** return truthy for.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Array} Returns the new filtered array.\\n     * @example\\n     *\\n     * _.reject([1, 2, 3, 4], function(n) {\\n     *   return n % 2 == 0;\\n     * });\\n     * // => [1, 3]\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': false },\\n     *   { 'user': 'fred',   'age': 40, 'active': true }\\n     * ];\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user');\\n     * // => ['barney']\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.pluck(_.reject(users, 'active', false), 'user');\\n     * // => ['fred']\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.pluck(_.reject(users, 'active'), 'user');\\n     * // => ['barney']\\n     */\\n    function reject(collection, predicate, thisArg) {\\n      var func = isArray(collection) ? arrayFilter : baseFilter;\\n      predicate = getCallback(predicate, thisArg, 3);\\n      return func(collection, function(value, index, collection) {\\n        return !predicate(value, index, collection);\\n      });\\n    }\\n\\n    /**\\n     * Gets a random element or `n` random elements from a collection.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to sample.\\n     * @param {number} [n] The number of elements to sample.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {*} Returns the random sample(s).\\n     * @example\\n     *\\n     * _.sample([1, 2, 3, 4]);\\n     * // => 2\\n     *\\n     * _.sample([1, 2, 3, 4], 2);\\n     * // => [3, 1]\\n     */\\n    function sample(collection, n, guard) {\\n      if (guard ? isIterateeCall(collection, n, guard) : n == null) {\\n        collection = toIterable(collection);\\n        var length = collection.length;\\n        return length > 0 ? collection[baseRandom(0, length - 1)] : undefined;\\n      }\\n      var index = -1,\\n          result = toArray(collection),\\n          length = result.length,\\n          lastIndex = length - 1;\\n\\n      n = nativeMin(n < 0 ? 0 : (+n || 0), length);\\n      while (++index < n) {\\n        var rand = baseRandom(index, lastIndex),\\n            value = result[rand];\\n\\n        result[rand] = result[index];\\n        result[index] = value;\\n      }\\n      result.length = n;\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an array of shuffled values, using a version of the\\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to shuffle.\\n     * @returns {Array} Returns the new shuffled array.\\n     * @example\\n     *\\n     * _.shuffle([1, 2, 3, 4]);\\n     * // => [4, 1, 3, 2]\\n     */\\n    function shuffle(collection) {\\n      return sample(collection, POSITIVE_INFINITY);\\n    }\\n\\n    /**\\n     * Gets the size of `collection` by returning its length for array-like\\n     * values or the number of own enumerable properties for objects.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to inspect.\\n     * @returns {number} Returns the size of `collection`.\\n     * @example\\n     *\\n     * _.size([1, 2, 3]);\\n     * // => 3\\n     *\\n     * _.size({ 'a': 1, 'b': 2 });\\n     * // => 2\\n     *\\n     * _.size('pebbles');\\n     * // => 7\\n     */\\n    function size(collection) {\\n      var length = collection ? getLength(collection) : 0;\\n      return isLength(length) ? length : keys(collection).length;\\n    }\\n\\n    /**\\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\\n     * The function returns as soon as it finds a passing value and does not iterate\\n     * over the entire collection. The predicate is bound to `thisArg` and invoked\\n     * with three arguments: (value, index|key, collection).\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias any\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\\n     *  else `false`.\\n     * @example\\n     *\\n     * _.some([null, 0, 'yes', false], Boolean);\\n     * // => true\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'active': true },\\n     *   { 'user': 'fred',   'active': false }\\n     * ];\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.some(users, { 'user': 'barney', 'active': false });\\n     * // => false\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.some(users, 'active', false);\\n     * // => true\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.some(users, 'active');\\n     * // => true\\n     */\\n    function some(collection, predicate, thisArg) {\\n      var func = isArray(collection) ? arraySome : baseSome;\\n      if (thisArg && isIterateeCall(collection, predicate, thisArg)) {\\n        predicate = undefined;\\n      }\\n      if (typeof predicate != 'function' || thisArg !== undefined) {\\n        predicate = getCallback(predicate, thisArg, 3);\\n      }\\n      return func(collection, predicate);\\n    }\\n\\n    /**\\n     * Creates an array of elements, sorted in ascending order by the results of\\n     * running each element in a collection through `iteratee`. This method performs\\n     * a stable sort, that is, it preserves the original sort order of equal elements.\\n     * The `iteratee` is bound to `thisArg` and invoked with three arguments:\\n     * (value, index|key, collection).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Array} Returns the new sorted array.\\n     * @example\\n     *\\n     * _.sortBy([1, 2, 3], function(n) {\\n     *   return Math.sin(n);\\n     * });\\n     * // => [3, 1, 2]\\n     *\\n     * _.sortBy([1, 2, 3], function(n) {\\n     *   return this.sin(n);\\n     * }, Math);\\n     * // => [3, 1, 2]\\n     *\\n     * var users = [\\n     *   { 'user': 'fred' },\\n     *   { 'user': 'pebbles' },\\n     *   { 'user': 'barney' }\\n     * ];\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.pluck(_.sortBy(users, 'user'), 'user');\\n     * // => ['barney', 'fred', 'pebbles']\\n     */\\n    function sortBy(collection, iteratee, thisArg) {\\n      if (collection == null) {\\n        return [];\\n      }\\n      if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\\n        iteratee = undefined;\\n      }\\n      var index = -1;\\n      iteratee = getCallback(iteratee, thisArg, 3);\\n\\n      var result = baseMap(collection, function(value, key, collection) {\\n        return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value };\\n      });\\n      return baseSortBy(result, compareAscending);\\n    }\\n\\n    /**\\n     * This method is like `_.sortBy` except that it can sort by multiple iteratees\\n     * or property names.\\n     *\\n     * If a property name is provided for an iteratee the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If an object is provided for an iteratee the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {...(Function|Function[]|Object|Object[]|string|string[])} iteratees\\n     *  The iteratees to sort by, specified as individual values or arrays of values.\\n     * @returns {Array} Returns the new sorted array.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'fred',   'age': 48 },\\n     *   { 'user': 'barney', 'age': 36 },\\n     *   { 'user': 'fred',   'age': 42 },\\n     *   { 'user': 'barney', 'age': 34 }\\n     * ];\\n     *\\n     * _.map(_.sortByAll(users, ['user', 'age']), _.values);\\n     * // => [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]]\\n     *\\n     * _.map(_.sortByAll(users, 'user', function(chr) {\\n     *   return Math.floor(chr.age / 10);\\n     * }), _.values);\\n     * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]\\n     */\\n    var sortByAll = restParam(function(collection, iteratees) {\\n      if (collection == null) {\\n        return [];\\n      }\\n      var guard = iteratees[2];\\n      if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) {\\n        iteratees.length = 1;\\n      }\\n      return baseSortByOrder(collection, baseFlatten(iteratees), []);\\n    });\\n\\n    /**\\n     * This method is like `_.sortByAll` except that it allows specifying the\\n     * sort orders of the iteratees to sort by. If `orders` is unspecified, all\\n     * values are sorted in ascending order. Otherwise, a value is sorted in\\n     * ascending order if its corresponding order is \\\"asc\\\", and descending if \\\"desc\\\".\\n     *\\n     * If a property name is provided for an iteratee the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If an object is provided for an iteratee the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\\n     * @param {boolean[]} [orders] The sort orders of `iteratees`.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.\\n     * @returns {Array} Returns the new sorted array.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'fred',   'age': 48 },\\n     *   { 'user': 'barney', 'age': 34 },\\n     *   { 'user': 'fred',   'age': 42 },\\n     *   { 'user': 'barney', 'age': 36 }\\n     * ];\\n     *\\n     * // sort by `user` in ascending order and by `age` in descending order\\n     * _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values);\\n     * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]\\n     */\\n    function sortByOrder(collection, iteratees, orders, guard) {\\n      if (collection == null) {\\n        return [];\\n      }\\n      if (guard && isIterateeCall(iteratees, orders, guard)) {\\n        orders = undefined;\\n      }\\n      if (!isArray(iteratees)) {\\n        iteratees = iteratees == null ? [] : [iteratees];\\n      }\\n      if (!isArray(orders)) {\\n        orders = orders == null ? [] : [orders];\\n      }\\n      return baseSortByOrder(collection, iteratees, orders);\\n    }\\n\\n    /**\\n     * Performs a deep comparison between each element in `collection` and the\\n     * source object, returning an array of all elements that have equivalent\\n     * property values.\\n     *\\n     * **Note:** This method supports comparing arrays, booleans, `Date` objects,\\n     * numbers, `Object` objects, regexes, and strings. Objects are compared by\\n     * their own, not inherited, enumerable properties. For comparing a single\\n     * own or inherited property value see `_.matchesProperty`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Collection\\n     * @param {Array|Object|string} collection The collection to search.\\n     * @param {Object} source The object of property values to match.\\n     * @returns {Array} Returns the new filtered array.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy'] },\\n     *   { 'user': 'fred',   'age': 40, 'active': true, 'pets': ['baby puss', 'dino'] }\\n     * ];\\n     *\\n     * _.pluck(_.where(users, { 'age': 36, 'active': false }), 'user');\\n     * // => ['barney']\\n     *\\n     * _.pluck(_.where(users, { 'pets': ['dino'] }), 'user');\\n     * // => ['fred']\\n     */\\n    function where(collection, source) {\\n      return filter(collection, baseMatches(source));\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Gets the number of milliseconds that have elapsed since the Unix epoch\\n     * (1 January 1970 00:00:00 UTC).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Date\\n     * @example\\n     *\\n     * _.defer(function(stamp) {\\n     *   console.log(_.now() - stamp);\\n     * }, _.now());\\n     * // => logs the number of milliseconds it took for the deferred function to be invoked\\n     */\\n    var now = nativeNow || function() {\\n      return new Date().getTime();\\n    };\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * The opposite of `_.before`; this method creates a function that invokes\\n     * `func` once it is called `n` or more times.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {number} n The number of calls before `func` is invoked.\\n     * @param {Function} func The function to restrict.\\n     * @returns {Function} Returns the new restricted function.\\n     * @example\\n     *\\n     * var saves = ['profile', 'settings'];\\n     *\\n     * var done = _.after(saves.length, function() {\\n     *   console.log('done saving!');\\n     * });\\n     *\\n     * _.forEach(saves, function(type) {\\n     *   asyncSave({ 'type': type, 'complete': done });\\n     * });\\n     * // => logs 'done saving!' after the two async saves have completed\\n     */\\n    function after(n, func) {\\n      if (typeof func != 'function') {\\n        if (typeof n == 'function') {\\n          var temp = n;\\n          n = func;\\n          func = temp;\\n        } else {\\n          throw new TypeError(FUNC_ERROR_TEXT);\\n        }\\n      }\\n      n = nativeIsFinite(n = +n) ? n : 0;\\n      return function() {\\n        if (--n < 1) {\\n          return func.apply(this, arguments);\\n        }\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that accepts up to `n` arguments ignoring any\\n     * additional arguments.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to cap arguments for.\\n     * @param {number} [n=func.length] The arity cap.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\\n     * // => [6, 8, 10]\\n     */\\n    function ary(func, n, guard) {\\n      if (guard && isIterateeCall(func, n, guard)) {\\n        n = undefined;\\n      }\\n      n = (func && n == null) ? func.length : nativeMax(+n || 0, 0);\\n      return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func`, with the `this` binding and arguments\\n     * of the created function, while it is called less than `n` times. Subsequent\\n     * calls to the created function return the result of the last `func` invocation.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {number} n The number of calls at which `func` is no longer invoked.\\n     * @param {Function} func The function to restrict.\\n     * @returns {Function} Returns the new restricted function.\\n     * @example\\n     *\\n     * jQuery('#add').on('click', _.before(5, addContactToList));\\n     * // => allows adding up to 4 contacts to the list\\n     */\\n    function before(n, func) {\\n      var result;\\n      if (typeof func != 'function') {\\n        if (typeof n == 'function') {\\n          var temp = n;\\n          n = func;\\n          func = temp;\\n        } else {\\n          throw new TypeError(FUNC_ERROR_TEXT);\\n        }\\n      }\\n      return function() {\\n        if (--n > 0) {\\n          result = func.apply(this, arguments);\\n        }\\n        if (n <= 1) {\\n          func = undefined;\\n        }\\n        return result;\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\\n     * and prepends any additional `_.bind` arguments to those provided to the\\n     * bound function.\\n     *\\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\\n     * may be used as a placeholder for partially applied arguments.\\n     *\\n     * **Note:** Unlike native `Function#bind` this method does not set the \\\"length\\\"\\n     * property of bound functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to bind.\\n     * @param {*} thisArg The `this` binding of `func`.\\n     * @param {...*} [partials] The arguments to be partially applied.\\n     * @returns {Function} Returns the new bound function.\\n     * @example\\n     *\\n     * var greet = function(greeting, punctuation) {\\n     *   return greeting + ' ' + this.user + punctuation;\\n     * };\\n     *\\n     * var object = { 'user': 'fred' };\\n     *\\n     * var bound = _.bind(greet, object, 'hi');\\n     * bound('!');\\n     * // => 'hi fred!'\\n     *\\n     * // using placeholders\\n     * var bound = _.bind(greet, object, _, '!');\\n     * bound('hi');\\n     * // => 'hi fred!'\\n     */\\n    var bind = restParam(function(func, thisArg, partials) {\\n      var bitmask = BIND_FLAG;\\n      if (partials.length) {\\n        var holders = replaceHolders(partials, bind.placeholder);\\n        bitmask |= PARTIAL_FLAG;\\n      }\\n      return createWrapper(func, bitmask, thisArg, partials, holders);\\n    });\\n\\n    /**\\n     * Binds methods of an object to the object itself, overwriting the existing\\n     * method. Method names may be specified as individual arguments or as arrays\\n     * of method names. If no method names are provided all enumerable function\\n     * properties, own and inherited, of `object` are bound.\\n     *\\n     * **Note:** This method does not set the \\\"length\\\" property of bound functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Object} object The object to bind and assign the bound methods to.\\n     * @param {...(string|string[])} [methodNames] The object method names to bind,\\n     *  specified as individual method names or arrays of method names.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var view = {\\n     *   'label': 'docs',\\n     *   'onClick': function() {\\n     *     console.log('clicked ' + this.label);\\n     *   }\\n     * };\\n     *\\n     * _.bindAll(view);\\n     * jQuery('#docs').on('click', view.onClick);\\n     * // => logs 'clicked docs' when the element is clicked\\n     */\\n    var bindAll = restParam(function(object, methodNames) {\\n      methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object);\\n\\n      var index = -1,\\n          length = methodNames.length;\\n\\n      while (++index < length) {\\n        var key = methodNames[index];\\n        object[key] = createWrapper(object[key], BIND_FLAG, object);\\n      }\\n      return object;\\n    });\\n\\n    /**\\n     * Creates a function that invokes the method at `object[key]` and prepends\\n     * any additional `_.bindKey` arguments to those provided to the bound function.\\n     *\\n     * This method differs from `_.bind` by allowing bound functions to reference\\n     * methods that may be redefined or don't yet exist.\\n     * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\\n     * for more details.\\n     *\\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\\n     * builds, may be used as a placeholder for partially applied arguments.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Object} object The object the method belongs to.\\n     * @param {string} key The key of the method.\\n     * @param {...*} [partials] The arguments to be partially applied.\\n     * @returns {Function} Returns the new bound function.\\n     * @example\\n     *\\n     * var object = {\\n     *   'user': 'fred',\\n     *   'greet': function(greeting, punctuation) {\\n     *     return greeting + ' ' + this.user + punctuation;\\n     *   }\\n     * };\\n     *\\n     * var bound = _.bindKey(object, 'greet', 'hi');\\n     * bound('!');\\n     * // => 'hi fred!'\\n     *\\n     * object.greet = function(greeting, punctuation) {\\n     *   return greeting + 'ya ' + this.user + punctuation;\\n     * };\\n     *\\n     * bound('!');\\n     * // => 'hiya fred!'\\n     *\\n     * // using placeholders\\n     * var bound = _.bindKey(object, 'greet', _, '!');\\n     * bound('hi');\\n     * // => 'hiya fred!'\\n     */\\n    var bindKey = restParam(function(object, key, partials) {\\n      var bitmask = BIND_FLAG | BIND_KEY_FLAG;\\n      if (partials.length) {\\n        var holders = replaceHolders(partials, bindKey.placeholder);\\n        bitmask |= PARTIAL_FLAG;\\n      }\\n      return createWrapper(key, bitmask, object, partials, holders);\\n    });\\n\\n    /**\\n     * Creates a function that accepts one or more arguments of `func` that when\\n     * called either invokes `func` returning its result, if all `func` arguments\\n     * have been provided, or returns a function that accepts one or more of the\\n     * remaining `func` arguments, and so on. The arity of `func` may be specified\\n     * if `func.length` is not sufficient.\\n     *\\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\\n     * may be used as a placeholder for provided arguments.\\n     *\\n     * **Note:** This method does not set the \\\"length\\\" property of curried functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to curry.\\n     * @param {number} [arity=func.length] The arity of `func`.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Function} Returns the new curried function.\\n     * @example\\n     *\\n     * var abc = function(a, b, c) {\\n     *   return [a, b, c];\\n     * };\\n     *\\n     * var curried = _.curry(abc);\\n     *\\n     * curried(1)(2)(3);\\n     * // => [1, 2, 3]\\n     *\\n     * curried(1, 2)(3);\\n     * // => [1, 2, 3]\\n     *\\n     * curried(1, 2, 3);\\n     * // => [1, 2, 3]\\n     *\\n     * // using placeholders\\n     * curried(1)(_, 3)(2);\\n     * // => [1, 2, 3]\\n     */\\n    var curry = createCurry(CURRY_FLAG);\\n\\n    /**\\n     * This method is like `_.curry` except that arguments are applied to `func`\\n     * in the manner of `_.partialRight` instead of `_.partial`.\\n     *\\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\\n     * builds, may be used as a placeholder for provided arguments.\\n     *\\n     * **Note:** This method does not set the \\\"length\\\" property of curried functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to curry.\\n     * @param {number} [arity=func.length] The arity of `func`.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Function} Returns the new curried function.\\n     * @example\\n     *\\n     * var abc = function(a, b, c) {\\n     *   return [a, b, c];\\n     * };\\n     *\\n     * var curried = _.curryRight(abc);\\n     *\\n     * curried(3)(2)(1);\\n     * // => [1, 2, 3]\\n     *\\n     * curried(2, 3)(1);\\n     * // => [1, 2, 3]\\n     *\\n     * curried(1, 2, 3);\\n     * // => [1, 2, 3]\\n     *\\n     * // using placeholders\\n     * curried(3)(1, _)(2);\\n     * // => [1, 2, 3]\\n     */\\n    var curryRight = createCurry(CURRY_RIGHT_FLAG);\\n\\n    /**\\n     * Creates a debounced function that delays invoking `func` until after `wait`\\n     * milliseconds have elapsed since the last time the debounced function was\\n     * invoked. The debounced function comes with a `cancel` method to cancel\\n     * delayed invocations. Provide an options object to indicate that `func`\\n     * should be invoked on the leading and/or trailing edge of the `wait` timeout.\\n     * Subsequent calls to the debounced function return the result of the last\\n     * `func` invocation.\\n     *\\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\\n     * on the trailing edge of the timeout only if the the debounced function is\\n     * invoked more than once during the `wait` timeout.\\n     *\\n     * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\\n     * for details over the differences between `_.debounce` and `_.throttle`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to debounce.\\n     * @param {number} [wait=0] The number of milliseconds to delay.\\n     * @param {Object} [options] The options object.\\n     * @param {boolean} [options.leading=false] Specify invoking on the leading\\n     *  edge of the timeout.\\n     * @param {number} [options.maxWait] The maximum time `func` is allowed to be\\n     *  delayed before it is invoked.\\n     * @param {boolean} [options.trailing=true] Specify invoking on the trailing\\n     *  edge of the timeout.\\n     * @returns {Function} Returns the new debounced function.\\n     * @example\\n     *\\n     * // avoid costly calculations while the window size is in flux\\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\\n     *\\n     * // invoke `sendMail` when the click event is fired, debouncing subsequent calls\\n     * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\\n     *   'leading': true,\\n     *   'trailing': false\\n     * }));\\n     *\\n     * // ensure `batchLog` is invoked once after 1 second of debounced calls\\n     * var source = new EventSource('/stream');\\n     * jQuery(source).on('message', _.debounce(batchLog, 250, {\\n     *   'maxWait': 1000\\n     * }));\\n     *\\n     * // cancel a debounced call\\n     * var todoChanges = _.debounce(batchLog, 1000);\\n     * Object.observe(models.todo, todoChanges);\\n     *\\n     * Object.observe(models, function(changes) {\\n     *   if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {\\n     *     todoChanges.cancel();\\n     *   }\\n     * }, ['delete']);\\n     *\\n     * // ...at some point `models.todo` is changed\\n     * models.todo.completed = true;\\n     *\\n     * // ...before 1 second has passed `models.todo` is deleted\\n     * // which cancels the debounced `todoChanges` call\\n     * delete models.todo;\\n     */\\n    function debounce(func, wait, options) {\\n      var args,\\n          maxTimeoutId,\\n          result,\\n          stamp,\\n          thisArg,\\n          timeoutId,\\n          trailingCall,\\n          lastCalled = 0,\\n          maxWait = false,\\n          trailing = true;\\n\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      wait = wait < 0 ? 0 : (+wait || 0);\\n      if (options === true) {\\n        var leading = true;\\n        trailing = false;\\n      } else if (isObject(options)) {\\n        leading = !!options.leading;\\n        maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\\n      }\\n\\n      function cancel() {\\n        if (timeoutId) {\\n          clearTimeout(timeoutId);\\n        }\\n        if (maxTimeoutId) {\\n          clearTimeout(maxTimeoutId);\\n        }\\n        lastCalled = 0;\\n        maxTimeoutId = timeoutId = trailingCall = undefined;\\n      }\\n\\n      function complete(isCalled, id) {\\n        if (id) {\\n          clearTimeout(id);\\n        }\\n        maxTimeoutId = timeoutId = trailingCall = undefined;\\n        if (isCalled) {\\n          lastCalled = now();\\n          result = func.apply(thisArg, args);\\n          if (!timeoutId && !maxTimeoutId) {\\n            args = thisArg = undefined;\\n          }\\n        }\\n      }\\n\\n      function delayed() {\\n        var remaining = wait - (now() - stamp);\\n        if (remaining <= 0 || remaining > wait) {\\n          complete(trailingCall, maxTimeoutId);\\n        } else {\\n          timeoutId = setTimeout(delayed, remaining);\\n        }\\n      }\\n\\n      function maxDelayed() {\\n        complete(trailing, timeoutId);\\n      }\\n\\n      function debounced() {\\n        args = arguments;\\n        stamp = now();\\n        thisArg = this;\\n        trailingCall = trailing && (timeoutId || !leading);\\n\\n        if (maxWait === false) {\\n          var leadingCall = leading && !timeoutId;\\n        } else {\\n          if (!maxTimeoutId && !leading) {\\n            lastCalled = stamp;\\n          }\\n          var remaining = maxWait - (stamp - lastCalled),\\n              isCalled = remaining <= 0 || remaining > maxWait;\\n\\n          if (isCalled) {\\n            if (maxTimeoutId) {\\n              maxTimeoutId = clearTimeout(maxTimeoutId);\\n            }\\n            lastCalled = stamp;\\n            result = func.apply(thisArg, args);\\n          }\\n          else if (!maxTimeoutId) {\\n            maxTimeoutId = setTimeout(maxDelayed, remaining);\\n          }\\n        }\\n        if (isCalled && timeoutId) {\\n          timeoutId = clearTimeout(timeoutId);\\n        }\\n        else if (!timeoutId && wait !== maxWait) {\\n          timeoutId = setTimeout(delayed, wait);\\n        }\\n        if (leadingCall) {\\n          isCalled = true;\\n          result = func.apply(thisArg, args);\\n        }\\n        if (isCalled && !timeoutId && !maxTimeoutId) {\\n          args = thisArg = undefined;\\n        }\\n        return result;\\n      }\\n      debounced.cancel = cancel;\\n      return debounced;\\n    }\\n\\n    /**\\n     * Defers invoking the `func` until the current call stack has cleared. Any\\n     * additional arguments are provided to `func` when it is invoked.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to defer.\\n     * @param {...*} [args] The arguments to invoke the function with.\\n     * @returns {number} Returns the timer id.\\n     * @example\\n     *\\n     * _.defer(function(text) {\\n     *   console.log(text);\\n     * }, 'deferred');\\n     * // logs 'deferred' after one or more milliseconds\\n     */\\n    var defer = restParam(function(func, args) {\\n      return baseDelay(func, 1, args);\\n    });\\n\\n    /**\\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\\n     * provided to `func` when it is invoked.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to delay.\\n     * @param {number} wait The number of milliseconds to delay invocation.\\n     * @param {...*} [args] The arguments to invoke the function with.\\n     * @returns {number} Returns the timer id.\\n     * @example\\n     *\\n     * _.delay(function(text) {\\n     *   console.log(text);\\n     * }, 1000, 'later');\\n     * // => logs 'later' after one second\\n     */\\n    var delay = restParam(function(func, wait, args) {\\n      return baseDelay(func, wait, args);\\n    });\\n\\n    /**\\n     * Creates a function that returns the result of invoking the provided\\n     * functions with the `this` binding of the created function, where each\\n     * successive invocation is supplied the return value of the previous.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {...Function} [funcs] Functions to invoke.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * var addSquare = _.flow(_.add, square);\\n     * addSquare(1, 2);\\n     * // => 9\\n     */\\n    var flow = createFlow();\\n\\n    /**\\n     * This method is like `_.flow` except that it creates a function that\\n     * invokes the provided functions from right to left.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias backflow, compose\\n     * @category Function\\n     * @param {...Function} [funcs] Functions to invoke.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * var addSquare = _.flowRight(square, _.add);\\n     * addSquare(1, 2);\\n     * // => 9\\n     */\\n    var flowRight = createFlow(true);\\n\\n    /**\\n     * Creates a function that memoizes the result of `func`. If `resolver` is\\n     * provided it determines the cache key for storing the result based on the\\n     * arguments provided to the memoized function. By default, the first argument\\n     * provided to the memoized function is coerced to a string and used as the\\n     * cache key. The `func` is invoked with the `this` binding of the memoized\\n     * function.\\n     *\\n     * **Note:** The cache is exposed as the `cache` property on the memoized\\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\\n     * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object)\\n     * method interface of `get`, `has`, and `set`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to have its output memoized.\\n     * @param {Function} [resolver] The function to resolve the cache key.\\n     * @returns {Function} Returns the new memoizing function.\\n     * @example\\n     *\\n     * var upperCase = _.memoize(function(string) {\\n     *   return string.toUpperCase();\\n     * });\\n     *\\n     * upperCase('fred');\\n     * // => 'FRED'\\n     *\\n     * // modifying the result cache\\n     * upperCase.cache.set('fred', 'BARNEY');\\n     * upperCase('fred');\\n     * // => 'BARNEY'\\n     *\\n     * // replacing `_.memoize.Cache`\\n     * var object = { 'user': 'fred' };\\n     * var other = { 'user': 'barney' };\\n     * var identity = _.memoize(_.identity);\\n     *\\n     * identity(object);\\n     * // => { 'user': 'fred' }\\n     * identity(other);\\n     * // => { 'user': 'fred' }\\n     *\\n     * _.memoize.Cache = WeakMap;\\n     * var identity = _.memoize(_.identity);\\n     *\\n     * identity(object);\\n     * // => { 'user': 'fred' }\\n     * identity(other);\\n     * // => { 'user': 'barney' }\\n     */\\n    function memoize(func, resolver) {\\n      if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      var memoized = function() {\\n        var args = arguments,\\n            key = resolver ? resolver.apply(this, args) : args[0],\\n            cache = memoized.cache;\\n\\n        if (cache.has(key)) {\\n          return cache.get(key);\\n        }\\n        var result = func.apply(this, args);\\n        memoized.cache = cache.set(key, result);\\n        return result;\\n      };\\n      memoized.cache = new memoize.Cache;\\n      return memoized;\\n    }\\n\\n    /**\\n     * Creates a function that runs each argument through a corresponding\\n     * transform function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to wrap.\\n     * @param {...(Function|Function[])} [transforms] The functions to transform\\n     * arguments, specified as individual functions or arrays of functions.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * function doubled(n) {\\n     *   return n * 2;\\n     * }\\n     *\\n     * function square(n) {\\n     *   return n * n;\\n     * }\\n     *\\n     * var modded = _.modArgs(function(x, y) {\\n     *   return [x, y];\\n     * }, square, doubled);\\n     *\\n     * modded(1, 2);\\n     * // => [1, 4]\\n     *\\n     * modded(5, 10);\\n     * // => [25, 20]\\n     */\\n    var modArgs = restParam(function(func, transforms) {\\n      transforms = baseFlatten(transforms);\\n      if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      var length = transforms.length;\\n      return restParam(function(args) {\\n        var index = nativeMin(args.length, length);\\n        while (index--) {\\n          args[index] = transforms[index](args[index]);\\n        }\\n        return func.apply(this, args);\\n      });\\n    });\\n\\n    /**\\n     * Creates a function that negates the result of the predicate `func`. The\\n     * `func` predicate is invoked with the `this` binding and arguments of the\\n     * created function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} predicate The predicate to negate.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * function isEven(n) {\\n     *   return n % 2 == 0;\\n     * }\\n     *\\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\\n     * // => [1, 3, 5]\\n     */\\n    function negate(predicate) {\\n      if (typeof predicate != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      return function() {\\n        return !predicate.apply(this, arguments);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\\n     * to the function return the value of the first call. The `func` is invoked\\n     * with the `this` binding and arguments of the created function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to restrict.\\n     * @returns {Function} Returns the new restricted function.\\n     * @example\\n     *\\n     * var initialize = _.once(createApplication);\\n     * initialize();\\n     * initialize();\\n     * // `initialize` invokes `createApplication` once\\n     */\\n    function once(func) {\\n      return before(2, func);\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func` with `partial` arguments prepended\\n     * to those provided to the new function. This method is like `_.bind` except\\n     * it does **not** alter the `this` binding.\\n     *\\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\\n     * builds, may be used as a placeholder for partially applied arguments.\\n     *\\n     * **Note:** This method does not set the \\\"length\\\" property of partially\\n     * applied functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to partially apply arguments to.\\n     * @param {...*} [partials] The arguments to be partially applied.\\n     * @returns {Function} Returns the new partially applied function.\\n     * @example\\n     *\\n     * var greet = function(greeting, name) {\\n     *   return greeting + ' ' + name;\\n     * };\\n     *\\n     * var sayHelloTo = _.partial(greet, 'hello');\\n     * sayHelloTo('fred');\\n     * // => 'hello fred'\\n     *\\n     * // using placeholders\\n     * var greetFred = _.partial(greet, _, 'fred');\\n     * greetFred('hi');\\n     * // => 'hi fred'\\n     */\\n    var partial = createPartial(PARTIAL_FLAG);\\n\\n    /**\\n     * This method is like `_.partial` except that partially applied arguments\\n     * are appended to those provided to the new function.\\n     *\\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\\n     * builds, may be used as a placeholder for partially applied arguments.\\n     *\\n     * **Note:** This method does not set the \\\"length\\\" property of partially\\n     * applied functions.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to partially apply arguments to.\\n     * @param {...*} [partials] The arguments to be partially applied.\\n     * @returns {Function} Returns the new partially applied function.\\n     * @example\\n     *\\n     * var greet = function(greeting, name) {\\n     *   return greeting + ' ' + name;\\n     * };\\n     *\\n     * var greetFred = _.partialRight(greet, 'fred');\\n     * greetFred('hi');\\n     * // => 'hi fred'\\n     *\\n     * // using placeholders\\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\\n     * sayHelloTo('fred');\\n     * // => 'hello fred'\\n     */\\n    var partialRight = createPartial(PARTIAL_RIGHT_FLAG);\\n\\n    /**\\n     * Creates a function that invokes `func` with arguments arranged according\\n     * to the specified indexes where the argument value at the first index is\\n     * provided as the first argument, the argument value at the second index is\\n     * provided as the second argument, and so on.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to rearrange arguments for.\\n     * @param {...(number|number[])} indexes The arranged argument indexes,\\n     *  specified as individual indexes or arrays of indexes.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var rearged = _.rearg(function(a, b, c) {\\n     *   return [a, b, c];\\n     * }, 2, 0, 1);\\n     *\\n     * rearged('b', 'c', 'a')\\n     * // => ['a', 'b', 'c']\\n     *\\n     * var map = _.rearg(_.map, [1, 0]);\\n     * map(function(n) {\\n     *   return n * 3;\\n     * }, [1, 2, 3]);\\n     * // => [3, 6, 9]\\n     */\\n    var rearg = restParam(function(func, indexes) {\\n      return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes));\\n    });\\n\\n    /**\\n     * Creates a function that invokes `func` with the `this` binding of the\\n     * created function and arguments from `start` and beyond provided as an array.\\n     *\\n     * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to apply a rest parameter to.\\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var say = _.restParam(function(what, names) {\\n     *   return what + ' ' + _.initial(names).join(', ') +\\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\\n     * });\\n     *\\n     * say('hello', 'fred', 'barney', 'pebbles');\\n     * // => 'hello fred, barney, & pebbles'\\n     */\\n    function restParam(func, start) {\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\\n      return function() {\\n        var args = arguments,\\n            index = -1,\\n            length = nativeMax(args.length - start, 0),\\n            rest = Array(length);\\n\\n        while (++index < length) {\\n          rest[index] = args[start + index];\\n        }\\n        switch (start) {\\n          case 0: return func.call(this, rest);\\n          case 1: return func.call(this, args[0], rest);\\n          case 2: return func.call(this, args[0], args[1], rest);\\n        }\\n        var otherArgs = Array(start + 1);\\n        index = -1;\\n        while (++index < start) {\\n          otherArgs[index] = args[index];\\n        }\\n        otherArgs[start] = rest;\\n        return func.apply(this, otherArgs);\\n      };\\n    }\\n\\n    /**\\n     * Creates a function that invokes `func` with the `this` binding of the created\\n     * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3).\\n     *\\n     * **Note:** This method is based on the [spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to spread arguments over.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var say = _.spread(function(who, what) {\\n     *   return who + ' says ' + what;\\n     * });\\n     *\\n     * say(['fred', 'hello']);\\n     * // => 'fred says hello'\\n     *\\n     * // with a Promise\\n     * var numbers = Promise.all([\\n     *   Promise.resolve(40),\\n     *   Promise.resolve(36)\\n     * ]);\\n     *\\n     * numbers.then(_.spread(function(x, y) {\\n     *   return x + y;\\n     * }));\\n     * // => a Promise of 76\\n     */\\n    function spread(func) {\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      return function(array) {\\n        return func.apply(this, array);\\n      };\\n    }\\n\\n    /**\\n     * Creates a throttled function that only invokes `func` at most once per\\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\\n     * method to cancel delayed invocations. Provide an options object to indicate\\n     * that `func` should be invoked on the leading and/or trailing edge of the\\n     * `wait` timeout. Subsequent calls to the throttled function return the\\n     * result of the last `func` call.\\n     *\\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\\n     * on the trailing edge of the timeout only if the the throttled function is\\n     * invoked more than once during the `wait` timeout.\\n     *\\n     * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\\n     * for details over the differences between `_.throttle` and `_.debounce`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {Function} func The function to throttle.\\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\\n     * @param {Object} [options] The options object.\\n     * @param {boolean} [options.leading=true] Specify invoking on the leading\\n     *  edge of the timeout.\\n     * @param {boolean} [options.trailing=true] Specify invoking on the trailing\\n     *  edge of the timeout.\\n     * @returns {Function} Returns the new throttled function.\\n     * @example\\n     *\\n     * // avoid excessively updating the position while scrolling\\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\\n     *\\n     * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes\\n     * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {\\n     *   'trailing': false\\n     * }));\\n     *\\n     * // cancel a trailing throttled call\\n     * jQuery(window).on('popstate', throttled.cancel);\\n     */\\n    function throttle(func, wait, options) {\\n      var leading = true,\\n          trailing = true;\\n\\n      if (typeof func != 'function') {\\n        throw new TypeError(FUNC_ERROR_TEXT);\\n      }\\n      if (options === false) {\\n        leading = false;\\n      } else if (isObject(options)) {\\n        leading = 'leading' in options ? !!options.leading : leading;\\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\\n      }\\n      return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });\\n    }\\n\\n    /**\\n     * Creates a function that provides `value` to the wrapper function as its\\n     * first argument. Any additional arguments provided to the function are\\n     * appended to those provided to the wrapper function. The wrapper is invoked\\n     * with the `this` binding of the created function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Function\\n     * @param {*} value The value to wrap.\\n     * @param {Function} wrapper The wrapper function.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var p = _.wrap(_.escape, function(func, text) {\\n     *   return '<p>' + func(text) + '</p>';\\n     * });\\n     *\\n     * p('fred, barney, & pebbles');\\n     * // => '<p>fred, barney, &amp; pebbles</p>'\\n     */\\n    function wrap(value, wrapper) {\\n      wrapper = wrapper == null ? identity : wrapper;\\n      return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []);\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Creates a clone of `value`. If `isDeep` is `true` nested objects are cloned,\\n     * otherwise they are assigned by reference. If `customizer` is provided it is\\n     * invoked to produce the cloned values. If `customizer` returns `undefined`\\n     * cloning is handled by the method instead. The `customizer` is bound to\\n     * `thisArg` and invoked with two argument; (value [, index|key, object]).\\n     *\\n     * **Note:** This method is loosely based on the\\n     * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).\\n     * The enumerable properties of `arguments` objects and objects created by\\n     * constructors other than `Object` are cloned to plain `Object` objects. An\\n     * empty object is returned for uncloneable values such as functions, DOM nodes,\\n     * Maps, Sets, and WeakMaps.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to clone.\\n     * @param {boolean} [isDeep] Specify a deep clone.\\n     * @param {Function} [customizer] The function to customize cloning values.\\n     * @param {*} [thisArg] The `this` binding of `customizer`.\\n     * @returns {*} Returns the cloned value.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney' },\\n     *   { 'user': 'fred' }\\n     * ];\\n     *\\n     * var shallow = _.clone(users);\\n     * shallow[0] === users[0];\\n     * // => true\\n     *\\n     * var deep = _.clone(users, true);\\n     * deep[0] === users[0];\\n     * // => false\\n     *\\n     * // using a customizer callback\\n     * var el = _.clone(document.body, function(value) {\\n     *   if (_.isElement(value)) {\\n     *     return value.cloneNode(false);\\n     *   }\\n     * });\\n     *\\n     * el === document.body\\n     * // => false\\n     * el.nodeName\\n     * // => BODY\\n     * el.childNodes.length;\\n     * // => 0\\n     */\\n    function clone(value, isDeep, customizer, thisArg) {\\n      if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) {\\n        isDeep = false;\\n      }\\n      else if (typeof isDeep == 'function') {\\n        thisArg = customizer;\\n        customizer = isDeep;\\n        isDeep = false;\\n      }\\n      return typeof customizer == 'function'\\n        ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 1))\\n        : baseClone(value, isDeep);\\n    }\\n\\n    /**\\n     * Creates a deep clone of `value`. If `customizer` is provided it is invoked\\n     * to produce the cloned values. If `customizer` returns `undefined` cloning\\n     * is handled by the method instead. The `customizer` is bound to `thisArg`\\n     * and invoked with two argument; (value [, index|key, object]).\\n     *\\n     * **Note:** This method is loosely based on the\\n     * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).\\n     * The enumerable properties of `arguments` objects and objects created by\\n     * constructors other than `Object` are cloned to plain `Object` objects. An\\n     * empty object is returned for uncloneable values such as functions, DOM nodes,\\n     * Maps, Sets, and WeakMaps.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to deep clone.\\n     * @param {Function} [customizer] The function to customize cloning values.\\n     * @param {*} [thisArg] The `this` binding of `customizer`.\\n     * @returns {*} Returns the deep cloned value.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney' },\\n     *   { 'user': 'fred' }\\n     * ];\\n     *\\n     * var deep = _.cloneDeep(users);\\n     * deep[0] === users[0];\\n     * // => false\\n     *\\n     * // using a customizer callback\\n     * var el = _.cloneDeep(document.body, function(value) {\\n     *   if (_.isElement(value)) {\\n     *     return value.cloneNode(true);\\n     *   }\\n     * });\\n     *\\n     * el === document.body\\n     * // => false\\n     * el.nodeName\\n     * // => BODY\\n     * el.childNodes.length;\\n     * // => 20\\n     */\\n    function cloneDeep(value, customizer, thisArg) {\\n      return typeof customizer == 'function'\\n        ? baseClone(value, true, bindCallback(customizer, thisArg, 1))\\n        : baseClone(value, true);\\n    }\\n\\n    /**\\n     * Checks if `value` is greater than `other`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`.\\n     * @example\\n     *\\n     * _.gt(3, 1);\\n     * // => true\\n     *\\n     * _.gt(3, 3);\\n     * // => false\\n     *\\n     * _.gt(1, 3);\\n     * // => false\\n     */\\n    function gt(value, other) {\\n      return value > other;\\n    }\\n\\n    /**\\n     * Checks if `value` is greater than or equal to `other`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`.\\n     * @example\\n     *\\n     * _.gte(3, 1);\\n     * // => true\\n     *\\n     * _.gte(3, 3);\\n     * // => true\\n     *\\n     * _.gte(1, 3);\\n     * // => false\\n     */\\n    function gte(value, other) {\\n      return value >= other;\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as an `arguments` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isArguments(function() { return arguments; }());\\n     * // => true\\n     *\\n     * _.isArguments([1, 2, 3]);\\n     * // => false\\n     */\\n    function isArguments(value) {\\n      return isObjectLike(value) && isArrayLike(value) &&\\n        hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as an `Array` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isArray([1, 2, 3]);\\n     * // => true\\n     *\\n     * _.isArray(function() { return arguments; }());\\n     * // => false\\n     */\\n    var isArray = nativeIsArray || function(value) {\\n      return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\\n    };\\n\\n    /**\\n     * Checks if `value` is classified as a boolean primitive or object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isBoolean(false);\\n     * // => true\\n     *\\n     * _.isBoolean(null);\\n     * // => false\\n     */\\n    function isBoolean(value) {\\n      return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag);\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `Date` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isDate(new Date);\\n     * // => true\\n     *\\n     * _.isDate('Mon April 23 2012');\\n     * // => false\\n     */\\n    function isDate(value) {\\n      return isObjectLike(value) && objToString.call(value) == dateTag;\\n    }\\n\\n    /**\\n     * Checks if `value` is a DOM element.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\\n     * @example\\n     *\\n     * _.isElement(document.body);\\n     * // => true\\n     *\\n     * _.isElement('<body>');\\n     * // => false\\n     */\\n    function isElement(value) {\\n      return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);\\n    }\\n\\n    /**\\n     * Checks if `value` is empty. A value is considered empty unless it is an\\n     * `arguments` object, array, string, or jQuery-like collection with a length\\n     * greater than `0` or an object with own enumerable properties.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {Array|Object|string} value The value to inspect.\\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\\n     * @example\\n     *\\n     * _.isEmpty(null);\\n     * // => true\\n     *\\n     * _.isEmpty(true);\\n     * // => true\\n     *\\n     * _.isEmpty(1);\\n     * // => true\\n     *\\n     * _.isEmpty([1, 2, 3]);\\n     * // => false\\n     *\\n     * _.isEmpty({ 'a': 1 });\\n     * // => false\\n     */\\n    function isEmpty(value) {\\n      if (value == null) {\\n        return true;\\n      }\\n      if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) ||\\n          (isObjectLike(value) && isFunction(value.splice)))) {\\n        return !value.length;\\n      }\\n      return !keys(value).length;\\n    }\\n\\n    /**\\n     * Performs a deep comparison between two values to determine if they are\\n     * equivalent. If `customizer` is provided it is invoked to compare values.\\n     * If `customizer` returns `undefined` comparisons are handled by the method\\n     * instead. The `customizer` is bound to `thisArg` and invoked with three\\n     * arguments: (value, other [, index|key]).\\n     *\\n     * **Note:** This method supports comparing arrays, booleans, `Date` objects,\\n     * numbers, `Object` objects, regexes, and strings. Objects are compared by\\n     * their own, not inherited, enumerable properties. Functions and DOM nodes\\n     * are **not** supported. Provide a customizer function to extend support\\n     * for comparing other values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias eq\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @param {Function} [customizer] The function to customize value comparisons.\\n     * @param {*} [thisArg] The `this` binding of `customizer`.\\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\\n     * @example\\n     *\\n     * var object = { 'user': 'fred' };\\n     * var other = { 'user': 'fred' };\\n     *\\n     * object == other;\\n     * // => false\\n     *\\n     * _.isEqual(object, other);\\n     * // => true\\n     *\\n     * // using a customizer callback\\n     * var array = ['hello', 'goodbye'];\\n     * var other = ['hi', 'goodbye'];\\n     *\\n     * _.isEqual(array, other, function(value, other) {\\n     *   if (_.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/)) {\\n     *     return true;\\n     *   }\\n     * });\\n     * // => true\\n     */\\n    function isEqual(value, other, customizer, thisArg) {\\n      customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;\\n      var result = customizer ? customizer(value, other) : undefined;\\n      return  result === undefined ? baseIsEqual(value, other, customizer) : !!result;\\n    }\\n\\n    /**\\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\\n     * `SyntaxError`, `TypeError`, or `URIError` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\\n     * @example\\n     *\\n     * _.isError(new Error);\\n     * // => true\\n     *\\n     * _.isError(Error);\\n     * // => false\\n     */\\n    function isError(value) {\\n      return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag;\\n    }\\n\\n    /**\\n     * Checks if `value` is a finite primitive number.\\n     *\\n     * **Note:** This method is based on [`Number.isFinite`](http://ecma-international.org/ecma-262/6.0/#sec-number.isfinite).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\\n     * @example\\n     *\\n     * _.isFinite(10);\\n     * // => true\\n     *\\n     * _.isFinite('10');\\n     * // => false\\n     *\\n     * _.isFinite(true);\\n     * // => false\\n     *\\n     * _.isFinite(Object(10));\\n     * // => false\\n     *\\n     * _.isFinite(Infinity);\\n     * // => false\\n     */\\n    function isFinite(value) {\\n      return typeof value == 'number' && nativeIsFinite(value);\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `Function` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isFunction(_);\\n     * // => true\\n     *\\n     * _.isFunction(/abc/);\\n     * // => false\\n     */\\n    function isFunction(value) {\\n      // The use of `Object#toString` avoids issues with the `typeof` operator\\n      // in older versions of Chrome and Safari which return 'function' for regexes\\n      // and Safari 8 equivalents which return 'object' for typed array constructors.\\n      return isObject(value) && objToString.call(value) == funcTag;\\n    }\\n\\n    /**\\n     * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\\n     * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\\n     * @example\\n     *\\n     * _.isObject({});\\n     * // => true\\n     *\\n     * _.isObject([1, 2, 3]);\\n     * // => true\\n     *\\n     * _.isObject(1);\\n     * // => false\\n     */\\n    function isObject(value) {\\n      // Avoid a V8 JIT bug in Chrome 19-20.\\n      // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\\n      var type = typeof value;\\n      return !!value && (type == 'object' || type == 'function');\\n    }\\n\\n    /**\\n     * Performs a deep comparison between `object` and `source` to determine if\\n     * `object` contains equivalent property values. If `customizer` is provided\\n     * it is invoked to compare values. If `customizer` returns `undefined`\\n     * comparisons are handled by the method instead. The `customizer` is bound\\n     * to `thisArg` and invoked with three arguments: (value, other, index|key).\\n     *\\n     * **Note:** This method supports comparing properties of arrays, booleans,\\n     * `Date` objects, numbers, `Object` objects, regexes, and strings. Functions\\n     * and DOM nodes are **not** supported. Provide a customizer function to extend\\n     * support for comparing other values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {Object} object The object to inspect.\\n     * @param {Object} source The object of property values to match.\\n     * @param {Function} [customizer] The function to customize value comparisons.\\n     * @param {*} [thisArg] The `this` binding of `customizer`.\\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\\n     * @example\\n     *\\n     * var object = { 'user': 'fred', 'age': 40 };\\n     *\\n     * _.isMatch(object, { 'age': 40 });\\n     * // => true\\n     *\\n     * _.isMatch(object, { 'age': 36 });\\n     * // => false\\n     *\\n     * // using a customizer callback\\n     * var object = { 'greeting': 'hello' };\\n     * var source = { 'greeting': 'hi' };\\n     *\\n     * _.isMatch(object, source, function(value, other) {\\n     *   return _.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/) || undefined;\\n     * });\\n     * // => true\\n     */\\n    function isMatch(object, source, customizer, thisArg) {\\n      customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;\\n      return baseIsMatch(object, getMatchData(source), customizer);\\n    }\\n\\n    /**\\n     * Checks if `value` is `NaN`.\\n     *\\n     * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4)\\n     * which returns `true` for `undefined` and other non-numeric values.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\\n     * @example\\n     *\\n     * _.isNaN(NaN);\\n     * // => true\\n     *\\n     * _.isNaN(new Number(NaN));\\n     * // => true\\n     *\\n     * isNaN(undefined);\\n     * // => true\\n     *\\n     * _.isNaN(undefined);\\n     * // => false\\n     */\\n    function isNaN(value) {\\n      // An `NaN` primitive is the only value that is not equal to itself.\\n      // Perform the `toStringTag` check first to avoid errors with some host objects in IE.\\n      return isNumber(value) && value != +value;\\n    }\\n\\n    /**\\n     * Checks if `value` is a native function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\\n     * @example\\n     *\\n     * _.isNative(Array.prototype.push);\\n     * // => true\\n     *\\n     * _.isNative(_);\\n     * // => false\\n     */\\n    function isNative(value) {\\n      if (value == null) {\\n        return false;\\n      }\\n      if (isFunction(value)) {\\n        return reIsNative.test(fnToString.call(value));\\n      }\\n      return isObjectLike(value) && reIsHostCtor.test(value);\\n    }\\n\\n    /**\\n     * Checks if `value` is `null`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\\n     * @example\\n     *\\n     * _.isNull(null);\\n     * // => true\\n     *\\n     * _.isNull(void 0);\\n     * // => false\\n     */\\n    function isNull(value) {\\n      return value === null;\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `Number` primitive or object.\\n     *\\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified\\n     * as numbers, use the `_.isFinite` method.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isNumber(8.4);\\n     * // => true\\n     *\\n     * _.isNumber(NaN);\\n     * // => true\\n     *\\n     * _.isNumber('8.4');\\n     * // => false\\n     */\\n    function isNumber(value) {\\n      return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag);\\n    }\\n\\n    /**\\n     * Checks if `value` is a plain object, that is, an object created by the\\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\\n     *\\n     * **Note:** This method assumes objects created by the `Object` constructor\\n     * have no inherited enumerable properties.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     * }\\n     *\\n     * _.isPlainObject(new Foo);\\n     * // => false\\n     *\\n     * _.isPlainObject([1, 2, 3]);\\n     * // => false\\n     *\\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\\n     * // => true\\n     *\\n     * _.isPlainObject(Object.create(null));\\n     * // => true\\n     */\\n    function isPlainObject(value) {\\n      var Ctor;\\n\\n      // Exit early for non `Object` objects.\\n      if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) ||\\n          (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\\n        return false;\\n      }\\n      // IE < 9 iterates inherited properties before own properties. If the first\\n      // iterated property is an object's own property then there are no inherited\\n      // enumerable properties.\\n      var result;\\n      // In most environments an object's own properties are iterated before\\n      // its inherited properties. If the last iterated property is an object's\\n      // own property then there are no inherited enumerable properties.\\n      baseForIn(value, function(subValue, key) {\\n        result = key;\\n      });\\n      return result === undefined || hasOwnProperty.call(value, result);\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `RegExp` object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isRegExp(/abc/);\\n     * // => true\\n     *\\n     * _.isRegExp('/abc/');\\n     * // => false\\n     */\\n    function isRegExp(value) {\\n      return isObject(value) && objToString.call(value) == regexpTag;\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a `String` primitive or object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isString('abc');\\n     * // => true\\n     *\\n     * _.isString(1);\\n     * // => false\\n     */\\n    function isString(value) {\\n      return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);\\n    }\\n\\n    /**\\n     * Checks if `value` is classified as a typed array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\\n     * @example\\n     *\\n     * _.isTypedArray(new Uint8Array);\\n     * // => true\\n     *\\n     * _.isTypedArray([]);\\n     * // => false\\n     */\\n    function isTypedArray(value) {\\n      return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\\n    }\\n\\n    /**\\n     * Checks if `value` is `undefined`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to check.\\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\\n     * @example\\n     *\\n     * _.isUndefined(void 0);\\n     * // => true\\n     *\\n     * _.isUndefined(null);\\n     * // => false\\n     */\\n    function isUndefined(value) {\\n      return value === undefined;\\n    }\\n\\n    /**\\n     * Checks if `value` is less than `other`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`.\\n     * @example\\n     *\\n     * _.lt(1, 3);\\n     * // => true\\n     *\\n     * _.lt(3, 3);\\n     * // => false\\n     *\\n     * _.lt(3, 1);\\n     * // => false\\n     */\\n    function lt(value, other) {\\n      return value < other;\\n    }\\n\\n    /**\\n     * Checks if `value` is less than or equal to `other`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to compare.\\n     * @param {*} other The other value to compare.\\n     * @returns {boolean} Returns `true` if `value` is less than or equal to `other`, else `false`.\\n     * @example\\n     *\\n     * _.lte(1, 3);\\n     * // => true\\n     *\\n     * _.lte(3, 3);\\n     * // => true\\n     *\\n     * _.lte(3, 1);\\n     * // => false\\n     */\\n    function lte(value, other) {\\n      return value <= other;\\n    }\\n\\n    /**\\n     * Converts `value` to an array.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {Array} Returns the converted array.\\n     * @example\\n     *\\n     * (function() {\\n     *   return _.toArray(arguments).slice(1);\\n     * }(1, 2, 3));\\n     * // => [2, 3]\\n     */\\n    function toArray(value) {\\n      var length = value ? getLength(value) : 0;\\n      if (!isLength(length)) {\\n        return values(value);\\n      }\\n      if (!length) {\\n        return [];\\n      }\\n      return arrayCopy(value);\\n    }\\n\\n    /**\\n     * Converts `value` to a plain object flattening inherited enumerable\\n     * properties of `value` to own properties of the plain object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Lang\\n     * @param {*} value The value to convert.\\n     * @returns {Object} Returns the converted plain object.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.assign({ 'a': 1 }, new Foo);\\n     * // => { 'a': 1, 'b': 2 }\\n     *\\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\\n     */\\n    function toPlainObject(value) {\\n      return baseCopy(value, keysIn(value));\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Recursively merges own enumerable properties of the source object(s), that\\n     * don't resolve to `undefined` into the destination object. Subsequent sources\\n     * overwrite property assignments of previous sources. If `customizer` is\\n     * provided it is invoked to produce the merged values of the destination and\\n     * source properties. If `customizer` returns `undefined` merging is handled\\n     * by the method instead. The `customizer` is bound to `thisArg` and invoked\\n     * with five arguments: (objectValue, sourceValue, key, object, source).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @param {Function} [customizer] The function to customize assigned values.\\n     * @param {*} [thisArg] The `this` binding of `customizer`.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var users = {\\n     *   'data': [{ 'user': 'barney' }, { 'user': 'fred' }]\\n     * };\\n     *\\n     * var ages = {\\n     *   'data': [{ 'age': 36 }, { 'age': 40 }]\\n     * };\\n     *\\n     * _.merge(users, ages);\\n     * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }\\n     *\\n     * // using a customizer callback\\n     * var object = {\\n     *   'fruits': ['apple'],\\n     *   'vegetables': ['beet']\\n     * };\\n     *\\n     * var other = {\\n     *   'fruits': ['banana'],\\n     *   'vegetables': ['carrot']\\n     * };\\n     *\\n     * _.merge(object, other, function(a, b) {\\n     *   if (_.isArray(a)) {\\n     *     return a.concat(b);\\n     *   }\\n     * });\\n     * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }\\n     */\\n    var merge = createAssigner(baseMerge);\\n\\n    /**\\n     * Assigns own enumerable properties of source object(s) to the destination\\n     * object. Subsequent sources overwrite property assignments of previous sources.\\n     * If `customizer` is provided it is invoked to produce the assigned values.\\n     * The `customizer` is bound to `thisArg` and invoked with five arguments:\\n     * (objectValue, sourceValue, key, object, source).\\n     *\\n     * **Note:** This method mutates `object` and is based on\\n     * [`Object.assign`](http://ecma-international.org/ecma-262/6.0/#sec-object.assign).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias extend\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @param {Function} [customizer] The function to customize assigned values.\\n     * @param {*} [thisArg] The `this` binding of `customizer`.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });\\n     * // => { 'user': 'fred', 'age': 40 }\\n     *\\n     * // using a customizer callback\\n     * var defaults = _.partialRight(_.assign, function(value, other) {\\n     *   return _.isUndefined(value) ? other : value;\\n     * });\\n     *\\n     * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });\\n     * // => { 'user': 'barney', 'age': 36 }\\n     */\\n    var assign = createAssigner(function(object, source, customizer) {\\n      return customizer\\n        ? assignWith(object, source, customizer)\\n        : baseAssign(object, source);\\n    });\\n\\n    /**\\n     * Creates an object that inherits from the given `prototype` object. If a\\n     * `properties` object is provided its own enumerable properties are assigned\\n     * to the created object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} prototype The object to inherit from.\\n     * @param {Object} [properties] The properties to assign to the object.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * function Shape() {\\n     *   this.x = 0;\\n     *   this.y = 0;\\n     * }\\n     *\\n     * function Circle() {\\n     *   Shape.call(this);\\n     * }\\n     *\\n     * Circle.prototype = _.create(Shape.prototype, {\\n     *   'constructor': Circle\\n     * });\\n     *\\n     * var circle = new Circle;\\n     * circle instanceof Circle;\\n     * // => true\\n     *\\n     * circle instanceof Shape;\\n     * // => true\\n     */\\n    function create(prototype, properties, guard) {\\n      var result = baseCreate(prototype);\\n      if (guard && isIterateeCall(prototype, properties, guard)) {\\n        properties = undefined;\\n      }\\n      return properties ? baseAssign(result, properties) : result;\\n    }\\n\\n    /**\\n     * Assigns own enumerable properties of source object(s) to the destination\\n     * object for all destination properties that resolve to `undefined`. Once a\\n     * property is set, additional values of the same property are ignored.\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });\\n     * // => { 'user': 'barney', 'age': 36 }\\n     */\\n    var defaults = createDefaults(assign, assignDefaults);\\n\\n    /**\\n     * This method is like `_.defaults` except that it recursively assigns\\n     * default properties.\\n     *\\n     * **Note:** This method mutates `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The destination object.\\n     * @param {...Object} [sources] The source objects.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } });\\n     * // => { 'user': { 'name': 'barney', 'age': 36 } }\\n     *\\n     */\\n    var defaultsDeep = createDefaults(merge, mergeDefaults);\\n\\n    /**\\n     * This method is like `_.find` except that it returns the key of the first\\n     * element `predicate` returns truthy for instead of the element itself.\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to search.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {string|undefined} Returns the key of the matched element, else `undefined`.\\n     * @example\\n     *\\n     * var users = {\\n     *   'barney':  { 'age': 36, 'active': true },\\n     *   'fred':    { 'age': 40, 'active': false },\\n     *   'pebbles': { 'age': 1,  'active': true }\\n     * };\\n     *\\n     * _.findKey(users, function(chr) {\\n     *   return chr.age < 40;\\n     * });\\n     * // => 'barney' (iteration order is not guaranteed)\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.findKey(users, { 'age': 1, 'active': true });\\n     * // => 'pebbles'\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.findKey(users, 'active', false);\\n     * // => 'fred'\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.findKey(users, 'active');\\n     * // => 'barney'\\n     */\\n    var findKey = createFindKey(baseForOwn);\\n\\n    /**\\n     * This method is like `_.findKey` except that it iterates over elements of\\n     * a collection in the opposite order.\\n     *\\n     * If a property name is provided for `predicate` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `predicate` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to search.\\n     * @param {Function|Object|string} [predicate=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {string|undefined} Returns the key of the matched element, else `undefined`.\\n     * @example\\n     *\\n     * var users = {\\n     *   'barney':  { 'age': 36, 'active': true },\\n     *   'fred':    { 'age': 40, 'active': false },\\n     *   'pebbles': { 'age': 1,  'active': true }\\n     * };\\n     *\\n     * _.findLastKey(users, function(chr) {\\n     *   return chr.age < 40;\\n     * });\\n     * // => returns `pebbles` assuming `_.findKey` returns `barney`\\n     *\\n     * // using the `_.matches` callback shorthand\\n     * _.findLastKey(users, { 'age': 36, 'active': true });\\n     * // => 'barney'\\n     *\\n     * // using the `_.matchesProperty` callback shorthand\\n     * _.findLastKey(users, 'active', false);\\n     * // => 'fred'\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.findLastKey(users, 'active');\\n     * // => 'pebbles'\\n     */\\n    var findLastKey = createFindKey(baseForOwnRight);\\n\\n    /**\\n     * Iterates over own and inherited enumerable properties of an object invoking\\n     * `iteratee` for each property. The `iteratee` is bound to `thisArg` and invoked\\n     * with three arguments: (value, key, object). Iteratee functions may exit\\n     * iteration early by explicitly returning `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.forIn(new Foo, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => logs 'a', 'b', and 'c' (iteration order is not guaranteed)\\n     */\\n    var forIn = createForIn(baseFor);\\n\\n    /**\\n     * This method is like `_.forIn` except that it iterates over properties of\\n     * `object` in the opposite order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.forInRight(new Foo, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c'\\n     */\\n    var forInRight = createForIn(baseForRight);\\n\\n    /**\\n     * Iterates over own enumerable properties of an object invoking `iteratee`\\n     * for each property. The `iteratee` is bound to `thisArg` and invoked with\\n     * three arguments: (value, key, object). Iteratee functions may exit iteration\\n     * early by explicitly returning `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.forOwn(new Foo, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => logs 'a' and 'b' (iteration order is not guaranteed)\\n     */\\n    var forOwn = createForOwn(baseForOwn);\\n\\n    /**\\n     * This method is like `_.forOwn` except that it iterates over properties of\\n     * `object` in the opposite order.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.forOwnRight(new Foo, function(value, key) {\\n     *   console.log(key);\\n     * });\\n     * // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b'\\n     */\\n    var forOwnRight = createForOwn(baseForOwnRight);\\n\\n    /**\\n     * Creates an array of function property names from all enumerable properties,\\n     * own and inherited, of `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias methods\\n     * @category Object\\n     * @param {Object} object The object to inspect.\\n     * @returns {Array} Returns the new array of property names.\\n     * @example\\n     *\\n     * _.functions(_);\\n     * // => ['after', 'ary', 'assign', ...]\\n     */\\n    function functions(object) {\\n      return baseFunctions(object, keysIn(object));\\n    }\\n\\n    /**\\n     * Gets the property value at `path` of `object`. If the resolved value is\\n     * `undefined` the `defaultValue` is used in its place.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path of the property to get.\\n     * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.\\n     * @returns {*} Returns the resolved value.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\\n     *\\n     * _.get(object, 'a[0].b.c');\\n     * // => 3\\n     *\\n     * _.get(object, ['a', '0', 'b', 'c']);\\n     * // => 3\\n     *\\n     * _.get(object, 'a.b.c', 'default');\\n     * // => 'default'\\n     */\\n    function get(object, path, defaultValue) {\\n      var result = object == null ? undefined : baseGet(object, toPath(path), path + '');\\n      return result === undefined ? defaultValue : result;\\n    }\\n\\n    /**\\n     * Checks if `path` is a direct property.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path to check.\\n     * @returns {boolean} Returns `true` if `path` is a direct property, else `false`.\\n     * @example\\n     *\\n     * var object = { 'a': { 'b': { 'c': 3 } } };\\n     *\\n     * _.has(object, 'a');\\n     * // => true\\n     *\\n     * _.has(object, 'a.b.c');\\n     * // => true\\n     *\\n     * _.has(object, ['a', 'b', 'c']);\\n     * // => true\\n     */\\n    function has(object, path) {\\n      if (object == null) {\\n        return false;\\n      }\\n      var result = hasOwnProperty.call(object, path);\\n      if (!result && !isKey(path)) {\\n        path = toPath(path);\\n        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\\n        if (object == null) {\\n          return false;\\n        }\\n        path = last(path);\\n        result = hasOwnProperty.call(object, path);\\n      }\\n      return result || (isLength(object.length) && isIndex(path, object.length) &&\\n        (isArray(object) || isArguments(object)));\\n    }\\n\\n    /**\\n     * Creates an object composed of the inverted keys and values of `object`.\\n     * If `object` contains duplicate values, subsequent values overwrite property\\n     * assignments of previous values unless `multiValue` is `true`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to invert.\\n     * @param {boolean} [multiValue] Allow multiple values per key.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Object} Returns the new inverted object.\\n     * @example\\n     *\\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\\n     *\\n     * _.invert(object);\\n     * // => { '1': 'c', '2': 'b' }\\n     *\\n     * // with `multiValue`\\n     * _.invert(object, true);\\n     * // => { '1': ['a', 'c'], '2': ['b'] }\\n     */\\n    function invert(object, multiValue, guard) {\\n      if (guard && isIterateeCall(object, multiValue, guard)) {\\n        multiValue = undefined;\\n      }\\n      var index = -1,\\n          props = keys(object),\\n          length = props.length,\\n          result = {};\\n\\n      while (++index < length) {\\n        var key = props[index],\\n            value = object[key];\\n\\n        if (multiValue) {\\n          if (hasOwnProperty.call(result, value)) {\\n            result[value].push(key);\\n          } else {\\n            result[value] = [key];\\n          }\\n        }\\n        else {\\n          result[value] = key;\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an array of the own enumerable property names of `object`.\\n     *\\n     * **Note:** Non-object values are coerced to objects. See the\\n     * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\\n     * for more details.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.keys(new Foo);\\n     * // => ['a', 'b'] (iteration order is not guaranteed)\\n     *\\n     * _.keys('hi');\\n     * // => ['0', '1']\\n     */\\n    var keys = !nativeKeys ? shimKeys : function(object) {\\n      var Ctor = object == null ? undefined : object.constructor;\\n      if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\\n          (typeof object != 'function' && isArrayLike(object))) {\\n        return shimKeys(object);\\n      }\\n      return isObject(object) ? nativeKeys(object) : [];\\n    };\\n\\n    /**\\n     * Creates an array of the own and inherited enumerable property names of `object`.\\n     *\\n     * **Note:** Non-object values are coerced to objects.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property names.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.keysIn(new Foo);\\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\\n     */\\n    function keysIn(object) {\\n      if (object == null) {\\n        return [];\\n      }\\n      if (!isObject(object)) {\\n        object = Object(object);\\n      }\\n      var length = object.length;\\n      length = (length && isLength(length) &&\\n        (isArray(object) || isArguments(object)) && length) || 0;\\n\\n      var Ctor = object.constructor,\\n          index = -1,\\n          isProto = typeof Ctor == 'function' && Ctor.prototype === object,\\n          result = Array(length),\\n          skipIndexes = length > 0;\\n\\n      while (++index < length) {\\n        result[index] = (index + '');\\n      }\\n      for (var key in object) {\\n        if (!(skipIndexes && isIndex(key, length)) &&\\n            !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\\n          result.push(key);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * The opposite of `_.mapValues`; this method creates an object with the\\n     * same values as `object` and keys generated by running each own enumerable\\n     * property of `object` through `iteratee`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns the new mapped object.\\n     * @example\\n     *\\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\\n     *   return key + value;\\n     * });\\n     * // => { 'a1': 1, 'b2': 2 }\\n     */\\n    var mapKeys = createObjectMapper(true);\\n\\n    /**\\n     * Creates an object with the same keys as `object` and values generated by\\n     * running each own enumerable property of `object` through `iteratee`. The\\n     * iteratee function is bound to `thisArg` and invoked with three arguments:\\n     * (value, key, object).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to iterate over.\\n     * @param {Function|Object|string} [iteratee=_.identity] The function invoked\\n     *  per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Object} Returns the new mapped object.\\n     * @example\\n     *\\n     * _.mapValues({ 'a': 1, 'b': 2 }, function(n) {\\n     *   return n * 3;\\n     * });\\n     * // => { 'a': 3, 'b': 6 }\\n     *\\n     * var users = {\\n     *   'fred':    { 'user': 'fred',    'age': 40 },\\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\\n     * };\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.mapValues(users, 'age');\\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\\n     */\\n    var mapValues = createObjectMapper();\\n\\n    /**\\n     * The opposite of `_.pick`; this method creates an object composed of the\\n     * own and inherited enumerable properties of `object` that are not omitted.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The source object.\\n     * @param {Function|...(string|string[])} [predicate] The function invoked per\\n     *  iteration or property names to omit, specified as individual property\\n     *  names or arrays of property names.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * var object = { 'user': 'fred', 'age': 40 };\\n     *\\n     * _.omit(object, 'age');\\n     * // => { 'user': 'fred' }\\n     *\\n     * _.omit(object, _.isNumber);\\n     * // => { 'user': 'fred' }\\n     */\\n    var omit = restParam(function(object, props) {\\n      if (object == null) {\\n        return {};\\n      }\\n      if (typeof props[0] != 'function') {\\n        var props = arrayMap(baseFlatten(props), String);\\n        return pickByArray(object, baseDifference(keysIn(object), props));\\n      }\\n      var predicate = bindCallback(props[0], props[1], 3);\\n      return pickByCallback(object, function(value, key, object) {\\n        return !predicate(value, key, object);\\n      });\\n    });\\n\\n    /**\\n     * Creates a two dimensional array of the key-value pairs for `object`,\\n     * e.g. `[[key1, value1], [key2, value2]]`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the new array of key-value pairs.\\n     * @example\\n     *\\n     * _.pairs({ 'barney': 36, 'fred': 40 });\\n     * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed)\\n     */\\n    function pairs(object) {\\n      object = toObject(object);\\n\\n      var index = -1,\\n          props = keys(object),\\n          length = props.length,\\n          result = Array(length);\\n\\n      while (++index < length) {\\n        var key = props[index];\\n        result[index] = [key, object[key]];\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Creates an object composed of the picked `object` properties. Property\\n     * names may be specified as individual arguments or as arrays of property\\n     * names. If `predicate` is provided it is invoked for each property of `object`\\n     * picking the properties `predicate` returns truthy for. The predicate is\\n     * bound to `thisArg` and invoked with three arguments: (value, key, object).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The source object.\\n     * @param {Function|...(string|string[])} [predicate] The function invoked per\\n     *  iteration or property names to pick, specified as individual property\\n     *  names or arrays of property names.\\n     * @param {*} [thisArg] The `this` binding of `predicate`.\\n     * @returns {Object} Returns the new object.\\n     * @example\\n     *\\n     * var object = { 'user': 'fred', 'age': 40 };\\n     *\\n     * _.pick(object, 'user');\\n     * // => { 'user': 'fred' }\\n     *\\n     * _.pick(object, _.isString);\\n     * // => { 'user': 'fred' }\\n     */\\n    var pick = restParam(function(object, props) {\\n      if (object == null) {\\n        return {};\\n      }\\n      return typeof props[0] == 'function'\\n        ? pickByCallback(object, bindCallback(props[0], props[1], 3))\\n        : pickByArray(object, baseFlatten(props));\\n    });\\n\\n    /**\\n     * This method is like `_.get` except that if the resolved value is a function\\n     * it is invoked with the `this` binding of its parent object and its result\\n     * is returned.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @param {Array|string} path The path of the property to resolve.\\n     * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.\\n     * @returns {*} Returns the resolved value.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\\n     *\\n     * _.result(object, 'a[0].b.c1');\\n     * // => 3\\n     *\\n     * _.result(object, 'a[0].b.c2');\\n     * // => 4\\n     *\\n     * _.result(object, 'a.b.c', 'default');\\n     * // => 'default'\\n     *\\n     * _.result(object, 'a.b.c', _.constant('default'));\\n     * // => 'default'\\n     */\\n    function result(object, path, defaultValue) {\\n      var result = object == null ? undefined : object[path];\\n      if (result === undefined) {\\n        if (object != null && !isKey(path, object)) {\\n          path = toPath(path);\\n          object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\\n          result = object == null ? undefined : object[last(path)];\\n        }\\n        result = result === undefined ? defaultValue : result;\\n      }\\n      return isFunction(result) ? result.call(object) : result;\\n    }\\n\\n    /**\\n     * Sets the property value of `path` on `object`. If a portion of `path`\\n     * does not exist it is created.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to augment.\\n     * @param {Array|string} path The path of the property to set.\\n     * @param {*} value The value to set.\\n     * @returns {Object} Returns `object`.\\n     * @example\\n     *\\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\\n     *\\n     * _.set(object, 'a[0].b.c', 4);\\n     * console.log(object.a[0].b.c);\\n     * // => 4\\n     *\\n     * _.set(object, 'x[0].y.z', 5);\\n     * console.log(object.x[0].y.z);\\n     * // => 5\\n     */\\n    function set(object, path, value) {\\n      if (object == null) {\\n        return object;\\n      }\\n      var pathKey = (path + '');\\n      path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path);\\n\\n      var index = -1,\\n          length = path.length,\\n          lastIndex = length - 1,\\n          nested = object;\\n\\n      while (nested != null && ++index < length) {\\n        var key = path[index];\\n        if (isObject(nested)) {\\n          if (index == lastIndex) {\\n            nested[key] = value;\\n          } else if (nested[key] == null) {\\n            nested[key] = isIndex(path[index + 1]) ? [] : {};\\n          }\\n        }\\n        nested = nested[key];\\n      }\\n      return object;\\n    }\\n\\n    /**\\n     * An alternative to `_.reduce`; this method transforms `object` to a new\\n     * `accumulator` object which is the result of running each of its own enumerable\\n     * properties through `iteratee`, with each invocation potentially mutating\\n     * the `accumulator` object. The `iteratee` is bound to `thisArg` and invoked\\n     * with four arguments: (accumulator, value, key, object). Iteratee functions\\n     * may exit iteration early by explicitly returning `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Array|Object} object The object to iterate over.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [accumulator] The custom accumulator value.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {*} Returns the accumulated value.\\n     * @example\\n     *\\n     * _.transform([2, 3, 4], function(result, n) {\\n     *   result.push(n *= n);\\n     *   return n % 2 == 0;\\n     * });\\n     * // => [4, 9]\\n     *\\n     * _.transform({ 'a': 1, 'b': 2 }, function(result, n, key) {\\n     *   result[key] = n * 3;\\n     * });\\n     * // => { 'a': 3, 'b': 6 }\\n     */\\n    function transform(object, iteratee, accumulator, thisArg) {\\n      var isArr = isArray(object) || isTypedArray(object);\\n      iteratee = getCallback(iteratee, thisArg, 4);\\n\\n      if (accumulator == null) {\\n        if (isArr || isObject(object)) {\\n          var Ctor = object.constructor;\\n          if (isArr) {\\n            accumulator = isArray(object) ? new Ctor : [];\\n          } else {\\n            accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined);\\n          }\\n        } else {\\n          accumulator = {};\\n        }\\n      }\\n      (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) {\\n        return iteratee(accumulator, value, index, object);\\n      });\\n      return accumulator;\\n    }\\n\\n    /**\\n     * Creates an array of the own enumerable property values of `object`.\\n     *\\n     * **Note:** Non-object values are coerced to objects.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property values.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.values(new Foo);\\n     * // => [1, 2] (iteration order is not guaranteed)\\n     *\\n     * _.values('hi');\\n     * // => ['h', 'i']\\n     */\\n    function values(object) {\\n      return baseValues(object, keys(object));\\n    }\\n\\n    /**\\n     * Creates an array of the own and inherited enumerable property values\\n     * of `object`.\\n     *\\n     * **Note:** Non-object values are coerced to objects.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Object\\n     * @param {Object} object The object to query.\\n     * @returns {Array} Returns the array of property values.\\n     * @example\\n     *\\n     * function Foo() {\\n     *   this.a = 1;\\n     *   this.b = 2;\\n     * }\\n     *\\n     * Foo.prototype.c = 3;\\n     *\\n     * _.valuesIn(new Foo);\\n     * // => [1, 2, 3] (iteration order is not guaranteed)\\n     */\\n    function valuesIn(object) {\\n      return baseValues(object, keysIn(object));\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Checks if `n` is between `start` and up to but not including, `end`. If\\n     * `end` is not specified it is set to `start` with `start` then set to `0`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Number\\n     * @param {number} n The number to check.\\n     * @param {number} [start=0] The start of the range.\\n     * @param {number} end The end of the range.\\n     * @returns {boolean} Returns `true` if `n` is in the range, else `false`.\\n     * @example\\n     *\\n     * _.inRange(3, 2, 4);\\n     * // => true\\n     *\\n     * _.inRange(4, 8);\\n     * // => true\\n     *\\n     * _.inRange(4, 2);\\n     * // => false\\n     *\\n     * _.inRange(2, 2);\\n     * // => false\\n     *\\n     * _.inRange(1.2, 2);\\n     * // => true\\n     *\\n     * _.inRange(5.2, 4);\\n     * // => false\\n     */\\n    function inRange(value, start, end) {\\n      start = +start || 0;\\n      if (end === undefined) {\\n        end = start;\\n        start = 0;\\n      } else {\\n        end = +end || 0;\\n      }\\n      return value >= nativeMin(start, end) && value < nativeMax(start, end);\\n    }\\n\\n    /**\\n     * Produces a random number between `min` and `max` (inclusive). If only one\\n     * argument is provided a number between `0` and the given number is returned.\\n     * If `floating` is `true`, or either `min` or `max` are floats, a floating-point\\n     * number is returned instead of an integer.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Number\\n     * @param {number} [min=0] The minimum possible value.\\n     * @param {number} [max=1] The maximum possible value.\\n     * @param {boolean} [floating] Specify returning a floating-point number.\\n     * @returns {number} Returns the random number.\\n     * @example\\n     *\\n     * _.random(0, 5);\\n     * // => an integer between 0 and 5\\n     *\\n     * _.random(5);\\n     * // => also an integer between 0 and 5\\n     *\\n     * _.random(5, true);\\n     * // => a floating-point number between 0 and 5\\n     *\\n     * _.random(1.2, 5.2);\\n     * // => a floating-point number between 1.2 and 5.2\\n     */\\n    function random(min, max, floating) {\\n      if (floating && isIterateeCall(min, max, floating)) {\\n        max = floating = undefined;\\n      }\\n      var noMin = min == null,\\n          noMax = max == null;\\n\\n      if (floating == null) {\\n        if (noMax && typeof min == 'boolean') {\\n          floating = min;\\n          min = 1;\\n        }\\n        else if (typeof max == 'boolean') {\\n          floating = max;\\n          noMax = true;\\n        }\\n      }\\n      if (noMin && noMax) {\\n        max = 1;\\n        noMax = false;\\n      }\\n      min = +min || 0;\\n      if (noMax) {\\n        max = min;\\n        min = 0;\\n      } else {\\n        max = +max || 0;\\n      }\\n      if (floating || min % 1 || max % 1) {\\n        var rand = nativeRandom();\\n        return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max);\\n      }\\n      return baseRandom(min, max);\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the camel cased string.\\n     * @example\\n     *\\n     * _.camelCase('Foo Bar');\\n     * // => 'fooBar'\\n     *\\n     * _.camelCase('--foo-bar');\\n     * // => 'fooBar'\\n     *\\n     * _.camelCase('__foo_bar__');\\n     * // => 'fooBar'\\n     */\\n    var camelCase = createCompounder(function(result, word, index) {\\n      word = word.toLowerCase();\\n      return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word);\\n    });\\n\\n    /**\\n     * Capitalizes the first character of `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to capitalize.\\n     * @returns {string} Returns the capitalized string.\\n     * @example\\n     *\\n     * _.capitalize('fred');\\n     * // => 'Fred'\\n     */\\n    function capitalize(string) {\\n      string = baseToString(string);\\n      return string && (string.charAt(0).toUpperCase() + string.slice(1));\\n    }\\n\\n    /**\\n     * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\\n     * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to deburr.\\n     * @returns {string} Returns the deburred string.\\n     * @example\\n     *\\n     * _.deburr('déjà vu');\\n     * // => 'deja vu'\\n     */\\n    function deburr(string) {\\n      string = baseToString(string);\\n      return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, '');\\n    }\\n\\n    /**\\n     * Checks if `string` ends with the given target string.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to search.\\n     * @param {string} [target] The string to search for.\\n     * @param {number} [position=string.length] The position to search from.\\n     * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`.\\n     * @example\\n     *\\n     * _.endsWith('abc', 'c');\\n     * // => true\\n     *\\n     * _.endsWith('abc', 'b');\\n     * // => false\\n     *\\n     * _.endsWith('abc', 'b', 2);\\n     * // => true\\n     */\\n    function endsWith(string, target, position) {\\n      string = baseToString(string);\\n      target = (target + '');\\n\\n      var length = string.length;\\n      position = position === undefined\\n        ? length\\n        : nativeMin(position < 0 ? 0 : (+position || 0), length);\\n\\n      position -= target.length;\\n      return position >= 0 && string.indexOf(target, position) == position;\\n    }\\n\\n    /**\\n     * Converts the characters \\\"&\\\", \\\"<\\\", \\\">\\\", '\\\"', \\\"'\\\", and \\\"\\\\`\\\", in `string` to\\n     * their corresponding HTML entities.\\n     *\\n     * **Note:** No other characters are escaped. To escape additional characters\\n     * use a third-party library like [_he_](https://mths.be/he).\\n     *\\n     * Though the \\\">\\\" character is escaped for symmetry, characters like\\n     * \\\">\\\" and \\\"/\\\" don't need escaping in HTML and have no special meaning\\n     * unless they're part of a tag or unquoted attribute value.\\n     * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\\n     * (under \\\"semi-related fun fact\\\") for more details.\\n     *\\n     * Backticks are escaped because in Internet Explorer < 9, they can break out\\n     * of attribute values or HTML comments. See [#59](https://html5sec.org/#59),\\n     * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and\\n     * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/)\\n     * for more details.\\n     *\\n     * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping)\\n     * to reduce XSS vectors.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to escape.\\n     * @returns {string} Returns the escaped string.\\n     * @example\\n     *\\n     * _.escape('fred, barney, & pebbles');\\n     * // => 'fred, barney, &amp; pebbles'\\n     */\\n    function escape(string) {\\n      // Reset `lastIndex` because in IE < 9 `String#replace` does not.\\n      string = baseToString(string);\\n      return (string && reHasUnescapedHtml.test(string))\\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\\n        : string;\\n    }\\n\\n    /**\\n     * Escapes the `RegExp` special characters \\\"\\\\\\\", \\\"/\\\", \\\"^\\\", \\\"$\\\", \\\".\\\", \\\"|\\\", \\\"?\\\",\\n     * \\\"*\\\", \\\"+\\\", \\\"(\\\", \\\")\\\", \\\"[\\\", \\\"]\\\", \\\"{\\\" and \\\"}\\\" in `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to escape.\\n     * @returns {string} Returns the escaped string.\\n     * @example\\n     *\\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\\n     * // => '\\\\[lodash\\\\]\\\\(https:\\\\/\\\\/lodash\\\\.com\\\\/\\\\)'\\n     */\\n    function escapeRegExp(string) {\\n      string = baseToString(string);\\n      return (string && reHasRegExpChars.test(string))\\n        ? string.replace(reRegExpChars, escapeRegExpChar)\\n        : (string || '(?:)');\\n    }\\n\\n    /**\\n     * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the kebab cased string.\\n     * @example\\n     *\\n     * _.kebabCase('Foo Bar');\\n     * // => 'foo-bar'\\n     *\\n     * _.kebabCase('fooBar');\\n     * // => 'foo-bar'\\n     *\\n     * _.kebabCase('__foo_bar__');\\n     * // => 'foo-bar'\\n     */\\n    var kebabCase = createCompounder(function(result, word, index) {\\n      return result + (index ? '-' : '') + word.toLowerCase();\\n    });\\n\\n    /**\\n     * Pads `string` on the left and right sides if it's shorter than `length`.\\n     * Padding characters are truncated if they can't be evenly divided by `length`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to pad.\\n     * @param {number} [length=0] The padding length.\\n     * @param {string} [chars=' '] The string used as padding.\\n     * @returns {string} Returns the padded string.\\n     * @example\\n     *\\n     * _.pad('abc', 8);\\n     * // => '  abc   '\\n     *\\n     * _.pad('abc', 8, '_-');\\n     * // => '_-abc_-_'\\n     *\\n     * _.pad('abc', 3);\\n     * // => 'abc'\\n     */\\n    function pad(string, length, chars) {\\n      string = baseToString(string);\\n      length = +length;\\n\\n      var strLength = string.length;\\n      if (strLength >= length || !nativeIsFinite(length)) {\\n        return string;\\n      }\\n      var mid = (length - strLength) / 2,\\n          leftLength = nativeFloor(mid),\\n          rightLength = nativeCeil(mid);\\n\\n      chars = createPadding('', rightLength, chars);\\n      return chars.slice(0, leftLength) + string + chars;\\n    }\\n\\n    /**\\n     * Pads `string` on the left side if it's shorter than `length`. Padding\\n     * characters are truncated if they exceed `length`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to pad.\\n     * @param {number} [length=0] The padding length.\\n     * @param {string} [chars=' '] The string used as padding.\\n     * @returns {string} Returns the padded string.\\n     * @example\\n     *\\n     * _.padLeft('abc', 6);\\n     * // => '   abc'\\n     *\\n     * _.padLeft('abc', 6, '_-');\\n     * // => '_-_abc'\\n     *\\n     * _.padLeft('abc', 3);\\n     * // => 'abc'\\n     */\\n    var padLeft = createPadDir();\\n\\n    /**\\n     * Pads `string` on the right side if it's shorter than `length`. Padding\\n     * characters are truncated if they exceed `length`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to pad.\\n     * @param {number} [length=0] The padding length.\\n     * @param {string} [chars=' '] The string used as padding.\\n     * @returns {string} Returns the padded string.\\n     * @example\\n     *\\n     * _.padRight('abc', 6);\\n     * // => 'abc   '\\n     *\\n     * _.padRight('abc', 6, '_-');\\n     * // => 'abc_-_'\\n     *\\n     * _.padRight('abc', 3);\\n     * // => 'abc'\\n     */\\n    var padRight = createPadDir(true);\\n\\n    /**\\n     * Converts `string` to an integer of the specified radix. If `radix` is\\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal,\\n     * in which case a `radix` of `16` is used.\\n     *\\n     * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#E)\\n     * of `parseInt`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} string The string to convert.\\n     * @param {number} [radix] The radix to interpret `value` by.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {number} Returns the converted integer.\\n     * @example\\n     *\\n     * _.parseInt('08');\\n     * // => 8\\n     *\\n     * _.map(['6', '08', '10'], _.parseInt);\\n     * // => [6, 8, 10]\\n     */\\n    function parseInt(string, radix, guard) {\\n      // Firefox < 21 and Opera < 15 follow ES3 for `parseInt`.\\n      // Chrome fails to trim leading <BOM> whitespace characters.\\n      // See https://code.google.com/p/v8/issues/detail?id=3109 for more details.\\n      if (guard ? isIterateeCall(string, radix, guard) : radix == null) {\\n        radix = 0;\\n      } else if (radix) {\\n        radix = +radix;\\n      }\\n      string = trim(string);\\n      return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10));\\n    }\\n\\n    /**\\n     * Repeats the given string `n` times.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to repeat.\\n     * @param {number} [n=0] The number of times to repeat the string.\\n     * @returns {string} Returns the repeated string.\\n     * @example\\n     *\\n     * _.repeat('*', 3);\\n     * // => '***'\\n     *\\n     * _.repeat('abc', 2);\\n     * // => 'abcabc'\\n     *\\n     * _.repeat('abc', 0);\\n     * // => ''\\n     */\\n    function repeat(string, n) {\\n      var result = '';\\n      string = baseToString(string);\\n      n = +n;\\n      if (n < 1 || !string || !nativeIsFinite(n)) {\\n        return result;\\n      }\\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\\n      do {\\n        if (n % 2) {\\n          result += string;\\n        }\\n        n = nativeFloor(n / 2);\\n        string += string;\\n      } while (n);\\n\\n      return result;\\n    }\\n\\n    /**\\n     * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the snake cased string.\\n     * @example\\n     *\\n     * _.snakeCase('Foo Bar');\\n     * // => 'foo_bar'\\n     *\\n     * _.snakeCase('fooBar');\\n     * // => 'foo_bar'\\n     *\\n     * _.snakeCase('--foo-bar');\\n     * // => 'foo_bar'\\n     */\\n    var snakeCase = createCompounder(function(result, word, index) {\\n      return result + (index ? '_' : '') + word.toLowerCase();\\n    });\\n\\n    /**\\n     * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to convert.\\n     * @returns {string} Returns the start cased string.\\n     * @example\\n     *\\n     * _.startCase('--foo-bar');\\n     * // => 'Foo Bar'\\n     *\\n     * _.startCase('fooBar');\\n     * // => 'Foo Bar'\\n     *\\n     * _.startCase('__foo_bar__');\\n     * // => 'Foo Bar'\\n     */\\n    var startCase = createCompounder(function(result, word, index) {\\n      return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1));\\n    });\\n\\n    /**\\n     * Checks if `string` starts with the given target string.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to search.\\n     * @param {string} [target] The string to search for.\\n     * @param {number} [position=0] The position to search from.\\n     * @returns {boolean} Returns `true` if `string` starts with `target`, else `false`.\\n     * @example\\n     *\\n     * _.startsWith('abc', 'a');\\n     * // => true\\n     *\\n     * _.startsWith('abc', 'b');\\n     * // => false\\n     *\\n     * _.startsWith('abc', 'b', 1);\\n     * // => true\\n     */\\n    function startsWith(string, target, position) {\\n      string = baseToString(string);\\n      position = position == null\\n        ? 0\\n        : nativeMin(position < 0 ? 0 : (+position || 0), string.length);\\n\\n      return string.lastIndexOf(target, position) == position;\\n    }\\n\\n    /**\\n     * Creates a compiled template function that can interpolate data properties\\n     * in \\\"interpolate\\\" delimiters, HTML-escape interpolated data properties in\\n     * \\\"escape\\\" delimiters, and execute JavaScript in \\\"evaluate\\\" delimiters. Data\\n     * properties may be accessed as free variables in the template. If a setting\\n     * object is provided it takes precedence over `_.templateSettings` values.\\n     *\\n     * **Note:** In the development build `_.template` utilizes\\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\\n     * for easier debugging.\\n     *\\n     * For more information on precompiling templates see\\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\\n     *\\n     * For more information on Chrome extension sandboxes see\\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The template string.\\n     * @param {Object} [options] The options object.\\n     * @param {RegExp} [options.escape] The HTML \\\"escape\\\" delimiter.\\n     * @param {RegExp} [options.evaluate] The \\\"evaluate\\\" delimiter.\\n     * @param {Object} [options.imports] An object to import into the template as free variables.\\n     * @param {RegExp} [options.interpolate] The \\\"interpolate\\\" delimiter.\\n     * @param {string} [options.sourceURL] The sourceURL of the template's compiled source.\\n     * @param {string} [options.variable] The data object variable name.\\n     * @param- {Object} [otherOptions] Enables the legacy `options` param signature.\\n     * @returns {Function} Returns the compiled template function.\\n     * @example\\n     *\\n     * // using the \\\"interpolate\\\" delimiter to create a compiled template\\n     * var compiled = _.template('hello <%= user %>!');\\n     * compiled({ 'user': 'fred' });\\n     * // => 'hello fred!'\\n     *\\n     * // using the HTML \\\"escape\\\" delimiter to escape data property values\\n     * var compiled = _.template('<b><%- value %></b>');\\n     * compiled({ 'value': '<script>' });\\n     * // => '<b>&lt;script&gt;</b>'\\n     *\\n     * // using the \\\"evaluate\\\" delimiter to execute JavaScript and generate HTML\\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\\n     * compiled({ 'users': ['fred', 'barney'] });\\n     * // => '<li>fred</li><li>barney</li>'\\n     *\\n     * // using the internal `print` function in \\\"evaluate\\\" delimiters\\n     * var compiled = _.template('<% print(\\\"hello \\\" + user); %>!');\\n     * compiled({ 'user': 'barney' });\\n     * // => 'hello barney!'\\n     *\\n     * // using the ES delimiter as an alternative to the default \\\"interpolate\\\" delimiter\\n     * var compiled = _.template('hello ${ user }!');\\n     * compiled({ 'user': 'pebbles' });\\n     * // => 'hello pebbles!'\\n     *\\n     * // using custom template delimiters\\n     * _.templateSettings.interpolate = /{{([\\\\s\\\\S]+?)}}/g;\\n     * var compiled = _.template('hello {{ user }}!');\\n     * compiled({ 'user': 'mustache' });\\n     * // => 'hello mustache!'\\n     *\\n     * // using backslashes to treat delimiters as plain text\\n     * var compiled = _.template('<%= \\\"\\\\\\\\<%- value %\\\\\\\\>\\\" %>');\\n     * compiled({ 'value': 'ignored' });\\n     * // => '<%- value %>'\\n     *\\n     * // using the `imports` option to import `jQuery` as `jq`\\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\\n     * compiled({ 'users': ['fred', 'barney'] });\\n     * // => '<li>fred</li><li>barney</li>'\\n     *\\n     * // using the `sourceURL` option to specify a custom sourceURL for the template\\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\\n     * compiled(data);\\n     * // => find the source of \\\"greeting.jst\\\" under the Sources tab or Resources panel of the web inspector\\n     *\\n     * // using the `variable` option to ensure a with-statement isn't used in the compiled template\\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\\n     * compiled.source;\\n     * // => function(data) {\\n     * //   var __t, __p = '';\\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\\n     * //   return __p;\\n     * // }\\n     *\\n     * // using the `source` property to inline compiled templates for meaningful\\n     * // line numbers in error messages and a stack trace\\n     * fs.writeFileSync(path.join(cwd, 'jst.js'), '\\\\\\n     *   var JST = {\\\\\\n     *     \\\"main\\\": ' + _.template(mainText).source + '\\\\\\n     *   };\\\\\\n     * ');\\n     */\\n    function template(string, options, otherOptions) {\\n      // Based on John Resig's `tmpl` implementation (http://ejohn.org/blog/javascript-micro-templating/)\\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\\n      var settings = lodash.templateSettings;\\n\\n      if (otherOptions && isIterateeCall(string, options, otherOptions)) {\\n        options = otherOptions = undefined;\\n      }\\n      string = baseToString(string);\\n      options = assignWith(baseAssign({}, otherOptions || options), settings, assignOwnDefaults);\\n\\n      var imports = assignWith(baseAssign({}, options.imports), settings.imports, assignOwnDefaults),\\n          importsKeys = keys(imports),\\n          importsValues = baseValues(imports, importsKeys);\\n\\n      var isEscaping,\\n          isEvaluating,\\n          index = 0,\\n          interpolate = options.interpolate || reNoMatch,\\n          source = \\\"__p += '\\\";\\n\\n      // Compile the regexp to match each delimiter.\\n      var reDelimiters = RegExp(\\n        (options.escape || reNoMatch).source + '|' +\\n        interpolate.source + '|' +\\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\\n        (options.evaluate || reNoMatch).source + '|$'\\n      , 'g');\\n\\n      // Use a sourceURL for easier debugging.\\n      var sourceURL = '//# sourceURL=' +\\n        ('sourceURL' in options\\n          ? options.sourceURL\\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\\n        ) + '\\\\n';\\n\\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\\n        interpolateValue || (interpolateValue = esTemplateValue);\\n\\n        // Escape characters that can't be included in string literals.\\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\\n\\n        // Replace delimiters with snippets.\\n        if (escapeValue) {\\n          isEscaping = true;\\n          source += \\\"' +\\\\n__e(\\\" + escapeValue + \\\") +\\\\n'\\\";\\n        }\\n        if (evaluateValue) {\\n          isEvaluating = true;\\n          source += \\\"';\\\\n\\\" + evaluateValue + \\\";\\\\n__p += '\\\";\\n        }\\n        if (interpolateValue) {\\n          source += \\\"' +\\\\n((__t = (\\\" + interpolateValue + \\\")) == null ? '' : __t) +\\\\n'\\\";\\n        }\\n        index = offset + match.length;\\n\\n        // The JS engine embedded in Adobe products requires returning the `match`\\n        // string in order to produce the correct `offset` value.\\n        return match;\\n      });\\n\\n      source += \\\"';\\\\n\\\";\\n\\n      // If `variable` is not specified wrap a with-statement around the generated\\n      // code to add the data object to the top of the scope chain.\\n      var variable = options.variable;\\n      if (!variable) {\\n        source = 'with (obj) {\\\\n' + source + '\\\\n}\\\\n';\\n      }\\n      // Cleanup code by stripping empty strings.\\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\\n        .replace(reEmptyStringMiddle, '$1')\\n        .replace(reEmptyStringTrailing, '$1;');\\n\\n      // Frame code as the function body.\\n      source = 'function(' + (variable || 'obj') + ') {\\\\n' +\\n        (variable\\n          ? ''\\n          : 'obj || (obj = {});\\\\n'\\n        ) +\\n        \\\"var __t, __p = ''\\\" +\\n        (isEscaping\\n           ? ', __e = _.escape'\\n           : ''\\n        ) +\\n        (isEvaluating\\n          ? ', __j = Array.prototype.join;\\\\n' +\\n            \\\"function print() { __p += __j.call(arguments, '') }\\\\n\\\"\\n          : ';\\\\n'\\n        ) +\\n        source +\\n        'return __p\\\\n}';\\n\\n      var result = attempt(function() {\\n        return Function(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues);\\n      });\\n\\n      // Provide the compiled function's source by its `toString` method or\\n      // the `source` property as a convenience for inlining compiled templates.\\n      result.source = source;\\n      if (isError(result)) {\\n        throw result;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Removes leading and trailing whitespace or specified characters from `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to trim.\\n     * @param {string} [chars=whitespace] The characters to trim.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {string} Returns the trimmed string.\\n     * @example\\n     *\\n     * _.trim('  abc  ');\\n     * // => 'abc'\\n     *\\n     * _.trim('-_-abc-_-', '_-');\\n     * // => 'abc'\\n     *\\n     * _.map(['  foo  ', '  bar  '], _.trim);\\n     * // => ['foo', 'bar']\\n     */\\n    function trim(string, chars, guard) {\\n      var value = string;\\n      string = baseToString(string);\\n      if (!string) {\\n        return string;\\n      }\\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\\n        return string.slice(trimmedLeftIndex(string), trimmedRightIndex(string) + 1);\\n      }\\n      chars = (chars + '');\\n      return string.slice(charsLeftIndex(string, chars), charsRightIndex(string, chars) + 1);\\n    }\\n\\n    /**\\n     * Removes leading whitespace or specified characters from `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to trim.\\n     * @param {string} [chars=whitespace] The characters to trim.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {string} Returns the trimmed string.\\n     * @example\\n     *\\n     * _.trimLeft('  abc  ');\\n     * // => 'abc  '\\n     *\\n     * _.trimLeft('-_-abc-_-', '_-');\\n     * // => 'abc-_-'\\n     */\\n    function trimLeft(string, chars, guard) {\\n      var value = string;\\n      string = baseToString(string);\\n      if (!string) {\\n        return string;\\n      }\\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\\n        return string.slice(trimmedLeftIndex(string));\\n      }\\n      return string.slice(charsLeftIndex(string, (chars + '')));\\n    }\\n\\n    /**\\n     * Removes trailing whitespace or specified characters from `string`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to trim.\\n     * @param {string} [chars=whitespace] The characters to trim.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {string} Returns the trimmed string.\\n     * @example\\n     *\\n     * _.trimRight('  abc  ');\\n     * // => '  abc'\\n     *\\n     * _.trimRight('-_-abc-_-', '_-');\\n     * // => '-_-abc'\\n     */\\n    function trimRight(string, chars, guard) {\\n      var value = string;\\n      string = baseToString(string);\\n      if (!string) {\\n        return string;\\n      }\\n      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {\\n        return string.slice(0, trimmedRightIndex(string) + 1);\\n      }\\n      return string.slice(0, charsRightIndex(string, (chars + '')) + 1);\\n    }\\n\\n    /**\\n     * Truncates `string` if it's longer than the given maximum string length.\\n     * The last characters of the truncated string are replaced with the omission\\n     * string which defaults to \\\"...\\\".\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to truncate.\\n     * @param {Object|number} [options] The options object or maximum string length.\\n     * @param {number} [options.length=30] The maximum string length.\\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {string} Returns the truncated string.\\n     * @example\\n     *\\n     * _.trunc('hi-diddly-ho there, neighborino');\\n     * // => 'hi-diddly-ho there, neighbo...'\\n     *\\n     * _.trunc('hi-diddly-ho there, neighborino', 24);\\n     * // => 'hi-diddly-ho there, n...'\\n     *\\n     * _.trunc('hi-diddly-ho there, neighborino', {\\n     *   'length': 24,\\n     *   'separator': ' '\\n     * });\\n     * // => 'hi-diddly-ho there,...'\\n     *\\n     * _.trunc('hi-diddly-ho there, neighborino', {\\n     *   'length': 24,\\n     *   'separator': /,? +/\\n     * });\\n     * // => 'hi-diddly-ho there...'\\n     *\\n     * _.trunc('hi-diddly-ho there, neighborino', {\\n     *   'omission': ' [...]'\\n     * });\\n     * // => 'hi-diddly-ho there, neig [...]'\\n     */\\n    function trunc(string, options, guard) {\\n      if (guard && isIterateeCall(string, options, guard)) {\\n        options = undefined;\\n      }\\n      var length = DEFAULT_TRUNC_LENGTH,\\n          omission = DEFAULT_TRUNC_OMISSION;\\n\\n      if (options != null) {\\n        if (isObject(options)) {\\n          var separator = 'separator' in options ? options.separator : separator;\\n          length = 'length' in options ? (+options.length || 0) : length;\\n          omission = 'omission' in options ? baseToString(options.omission) : omission;\\n        } else {\\n          length = +options || 0;\\n        }\\n      }\\n      string = baseToString(string);\\n      if (length >= string.length) {\\n        return string;\\n      }\\n      var end = length - omission.length;\\n      if (end < 1) {\\n        return omission;\\n      }\\n      var result = string.slice(0, end);\\n      if (separator == null) {\\n        return result + omission;\\n      }\\n      if (isRegExp(separator)) {\\n        if (string.slice(end).search(separator)) {\\n          var match,\\n              newEnd,\\n              substring = string.slice(0, end);\\n\\n          if (!separator.global) {\\n            separator = RegExp(separator.source, (reFlags.exec(separator) || '') + 'g');\\n          }\\n          separator.lastIndex = 0;\\n          while ((match = separator.exec(substring))) {\\n            newEnd = match.index;\\n          }\\n          result = result.slice(0, newEnd == null ? end : newEnd);\\n        }\\n      } else if (string.indexOf(separator, end) != end) {\\n        var index = result.lastIndexOf(separator);\\n        if (index > -1) {\\n          result = result.slice(0, index);\\n        }\\n      }\\n      return result + omission;\\n    }\\n\\n    /**\\n     * The inverse of `_.escape`; this method converts the HTML entities\\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, `&#39;`, and `&#96;` in `string` to their\\n     * corresponding characters.\\n     *\\n     * **Note:** No other HTML entities are unescaped. To unescape additional HTML\\n     * entities use a third-party library like [_he_](https://mths.be/he).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to unescape.\\n     * @returns {string} Returns the unescaped string.\\n     * @example\\n     *\\n     * _.unescape('fred, barney, &amp; pebbles');\\n     * // => 'fred, barney, & pebbles'\\n     */\\n    function unescape(string) {\\n      string = baseToString(string);\\n      return (string && reHasEscapedHtml.test(string))\\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\\n        : string;\\n    }\\n\\n    /**\\n     * Splits `string` into an array of its words.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category String\\n     * @param {string} [string=''] The string to inspect.\\n     * @param {RegExp|string} [pattern] The pattern to match words.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Array} Returns the words of `string`.\\n     * @example\\n     *\\n     * _.words('fred, barney, & pebbles');\\n     * // => ['fred', 'barney', 'pebbles']\\n     *\\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\\n     * // => ['fred', 'barney', '&', 'pebbles']\\n     */\\n    function words(string, pattern, guard) {\\n      if (guard && isIterateeCall(string, pattern, guard)) {\\n        pattern = undefined;\\n      }\\n      string = baseToString(string);\\n      return string.match(pattern || reWords) || [];\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Attempts to invoke `func`, returning either the result or the caught error\\n     * object. Any additional arguments are provided to `func` when it is invoked.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {Function} func The function to attempt.\\n     * @returns {*} Returns the `func` result or error object.\\n     * @example\\n     *\\n     * // avoid throwing errors for invalid selectors\\n     * var elements = _.attempt(function(selector) {\\n     *   return document.querySelectorAll(selector);\\n     * }, '>_>');\\n     *\\n     * if (_.isError(elements)) {\\n     *   elements = [];\\n     * }\\n     */\\n    var attempt = restParam(function(func, args) {\\n      try {\\n        return func.apply(undefined, args);\\n      } catch(e) {\\n        return isError(e) ? e : new Error(e);\\n      }\\n    });\\n\\n    /**\\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\\n     * and arguments of the created function. If `func` is a property name the\\n     * created callback returns the property value for a given element. If `func`\\n     * is an object the created callback returns `true` for elements that contain\\n     * the equivalent object properties, otherwise it returns `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @alias iteratee\\n     * @category Utility\\n     * @param {*} [func=_.identity] The value to convert to a callback.\\n     * @param {*} [thisArg] The `this` binding of `func`.\\n     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.\\n     * @returns {Function} Returns the callback.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36 },\\n     *   { 'user': 'fred',   'age': 40 }\\n     * ];\\n     *\\n     * // wrap to create custom callback shorthands\\n     * _.callback = _.wrap(_.callback, function(callback, func, thisArg) {\\n     *   var match = /^(.+?)__([gl]t)(.+)$/.exec(func);\\n     *   if (!match) {\\n     *     return callback(func, thisArg);\\n     *   }\\n     *   return function(object) {\\n     *     return match[2] == 'gt'\\n     *       ? object[match[1]] > match[3]\\n     *       : object[match[1]] < match[3];\\n     *   };\\n     * });\\n     *\\n     * _.filter(users, 'age__gt36');\\n     * // => [{ 'user': 'fred', 'age': 40 }]\\n     */\\n    function callback(func, thisArg, guard) {\\n      if (guard && isIterateeCall(func, thisArg, guard)) {\\n        thisArg = undefined;\\n      }\\n      return isObjectLike(func)\\n        ? matches(func)\\n        : baseCallback(func, thisArg);\\n    }\\n\\n    /**\\n     * Creates a function that returns `value`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {*} value The value to return from the new function.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var object = { 'user': 'fred' };\\n     * var getter = _.constant(object);\\n     *\\n     * getter() === object;\\n     * // => true\\n     */\\n    function constant(value) {\\n      return function() {\\n        return value;\\n      };\\n    }\\n\\n    /**\\n     * This method returns the first argument provided to it.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {*} value Any value.\\n     * @returns {*} Returns `value`.\\n     * @example\\n     *\\n     * var object = { 'user': 'fred' };\\n     *\\n     * _.identity(object) === object;\\n     * // => true\\n     */\\n    function identity(value) {\\n      return value;\\n    }\\n\\n    /**\\n     * Creates a function that performs a deep comparison between a given object\\n     * and `source`, returning `true` if the given object has equivalent property\\n     * values, else `false`.\\n     *\\n     * **Note:** This method supports comparing arrays, booleans, `Date` objects,\\n     * numbers, `Object` objects, regexes, and strings. Objects are compared by\\n     * their own, not inherited, enumerable properties. For comparing a single\\n     * own or inherited property value see `_.matchesProperty`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {Object} source The object of property values to match.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36, 'active': true },\\n     *   { 'user': 'fred',   'age': 40, 'active': false }\\n     * ];\\n     *\\n     * _.filter(users, _.matches({ 'age': 40, 'active': false }));\\n     * // => [{ 'user': 'fred', 'age': 40, 'active': false }]\\n     */\\n    function matches(source) {\\n      return baseMatches(baseClone(source, true));\\n    }\\n\\n    /**\\n     * Creates a function that compares the property value of `path` on a given\\n     * object to `value`.\\n     *\\n     * **Note:** This method supports comparing arrays, booleans, `Date` objects,\\n     * numbers, `Object` objects, regexes, and strings. Objects are compared by\\n     * their own, not inherited, enumerable properties.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {Array|string} path The path of the property to get.\\n     * @param {*} srcValue The value to match.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var users = [\\n     *   { 'user': 'barney' },\\n     *   { 'user': 'fred' }\\n     * ];\\n     *\\n     * _.find(users, _.matchesProperty('user', 'fred'));\\n     * // => { 'user': 'fred' }\\n     */\\n    function matchesProperty(path, srcValue) {\\n      return baseMatchesProperty(path, baseClone(srcValue, true));\\n    }\\n\\n    /**\\n     * Creates a function that invokes the method at `path` on a given object.\\n     * Any additional arguments are provided to the invoked method.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {Array|string} path The path of the method to invoke.\\n     * @param {...*} [args] The arguments to invoke the method with.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var objects = [\\n     *   { 'a': { 'b': { 'c': _.constant(2) } } },\\n     *   { 'a': { 'b': { 'c': _.constant(1) } } }\\n     * ];\\n     *\\n     * _.map(objects, _.method('a.b.c'));\\n     * // => [2, 1]\\n     *\\n     * _.invoke(_.sortBy(objects, _.method(['a', 'b', 'c'])), 'a.b.c');\\n     * // => [1, 2]\\n     */\\n    var method = restParam(function(path, args) {\\n      return function(object) {\\n        return invokePath(object, path, args);\\n      };\\n    });\\n\\n    /**\\n     * The opposite of `_.method`; this method creates a function that invokes\\n     * the method at a given path on `object`. Any additional arguments are\\n     * provided to the invoked method.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {Object} object The object to query.\\n     * @param {...*} [args] The arguments to invoke the method with.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var array = _.times(3, _.constant),\\n     *     object = { 'a': array, 'b': array, 'c': array };\\n     *\\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\\n     * // => [2, 0]\\n     *\\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\\n     * // => [2, 0]\\n     */\\n    var methodOf = restParam(function(object, args) {\\n      return function(path) {\\n        return invokePath(object, path, args);\\n      };\\n    });\\n\\n    /**\\n     * Adds all own enumerable function properties of a source object to the\\n     * destination object. If `object` is a function then methods are added to\\n     * its prototype as well.\\n     *\\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\\n     * avoid conflicts caused by modifying the original.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {Function|Object} [object=lodash] The destination object.\\n     * @param {Object} source The object of functions to add.\\n     * @param {Object} [options] The options object.\\n     * @param {boolean} [options.chain=true] Specify whether the functions added\\n     *  are chainable.\\n     * @returns {Function|Object} Returns `object`.\\n     * @example\\n     *\\n     * function vowels(string) {\\n     *   return _.filter(string, function(v) {\\n     *     return /[aeiou]/i.test(v);\\n     *   });\\n     * }\\n     *\\n     * _.mixin({ 'vowels': vowels });\\n     * _.vowels('fred');\\n     * // => ['e']\\n     *\\n     * _('fred').vowels().value();\\n     * // => ['e']\\n     *\\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\\n     * _('fred').vowels();\\n     * // => ['e']\\n     */\\n    function mixin(object, source, options) {\\n      if (options == null) {\\n        var isObj = isObject(source),\\n            props = isObj ? keys(source) : undefined,\\n            methodNames = (props && props.length) ? baseFunctions(source, props) : undefined;\\n\\n        if (!(methodNames ? methodNames.length : isObj)) {\\n          methodNames = false;\\n          options = source;\\n          source = object;\\n          object = this;\\n        }\\n      }\\n      if (!methodNames) {\\n        methodNames = baseFunctions(source, keys(source));\\n      }\\n      var chain = true,\\n          index = -1,\\n          isFunc = isFunction(object),\\n          length = methodNames.length;\\n\\n      if (options === false) {\\n        chain = false;\\n      } else if (isObject(options) && 'chain' in options) {\\n        chain = options.chain;\\n      }\\n      while (++index < length) {\\n        var methodName = methodNames[index],\\n            func = source[methodName];\\n\\n        object[methodName] = func;\\n        if (isFunc) {\\n          object.prototype[methodName] = (function(func) {\\n            return function() {\\n              var chainAll = this.__chain__;\\n              if (chain || chainAll) {\\n                var result = object(this.__wrapped__),\\n                    actions = result.__actions__ = arrayCopy(this.__actions__);\\n\\n                actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\\n                result.__chain__ = chainAll;\\n                return result;\\n              }\\n              return func.apply(object, arrayPush([this.value()], arguments));\\n            };\\n          }(func));\\n        }\\n      }\\n      return object;\\n    }\\n\\n    /**\\n     * Reverts the `_` variable to its previous value and returns a reference to\\n     * the `lodash` function.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @returns {Function} Returns the `lodash` function.\\n     * @example\\n     *\\n     * var lodash = _.noConflict();\\n     */\\n    function noConflict() {\\n      root._ = oldDash;\\n      return this;\\n    }\\n\\n    /**\\n     * A no-operation function that returns `undefined` regardless of the\\n     * arguments it receives.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @example\\n     *\\n     * var object = { 'user': 'fred' };\\n     *\\n     * _.noop(object) === undefined;\\n     * // => true\\n     */\\n    function noop() {\\n      // No operation performed.\\n    }\\n\\n    /**\\n     * Creates a function that returns the property value at `path` on a\\n     * given object.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {Array|string} path The path of the property to get.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var objects = [\\n     *   { 'a': { 'b': { 'c': 2 } } },\\n     *   { 'a': { 'b': { 'c': 1 } } }\\n     * ];\\n     *\\n     * _.map(objects, _.property('a.b.c'));\\n     * // => [2, 1]\\n     *\\n     * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c');\\n     * // => [1, 2]\\n     */\\n    function property(path) {\\n      return isKey(path) ? baseProperty(path) : basePropertyDeep(path);\\n    }\\n\\n    /**\\n     * The opposite of `_.property`; this method creates a function that returns\\n     * the property value at a given path on `object`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {Object} object The object to query.\\n     * @returns {Function} Returns the new function.\\n     * @example\\n     *\\n     * var array = [0, 1, 2],\\n     *     object = { 'a': array, 'b': array, 'c': array };\\n     *\\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\\n     * // => [2, 0]\\n     *\\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\\n     * // => [2, 0]\\n     */\\n    function propertyOf(object) {\\n      return function(path) {\\n        return baseGet(object, toPath(path), path + '');\\n      };\\n    }\\n\\n    /**\\n     * Creates an array of numbers (positive and/or negative) progressing from\\n     * `start` up to, but not including, `end`. If `end` is not specified it is\\n     * set to `start` with `start` then set to `0`. If `end` is less than `start`\\n     * a zero-length range is created unless a negative `step` is specified.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {number} [start=0] The start of the range.\\n     * @param {number} end The end of the range.\\n     * @param {number} [step=1] The value to increment or decrement by.\\n     * @returns {Array} Returns the new array of numbers.\\n     * @example\\n     *\\n     * _.range(4);\\n     * // => [0, 1, 2, 3]\\n     *\\n     * _.range(1, 5);\\n     * // => [1, 2, 3, 4]\\n     *\\n     * _.range(0, 20, 5);\\n     * // => [0, 5, 10, 15]\\n     *\\n     * _.range(0, -4, -1);\\n     * // => [0, -1, -2, -3]\\n     *\\n     * _.range(1, 4, 0);\\n     * // => [1, 1, 1]\\n     *\\n     * _.range(0);\\n     * // => []\\n     */\\n    function range(start, end, step) {\\n      if (step && isIterateeCall(start, end, step)) {\\n        end = step = undefined;\\n      }\\n      start = +start || 0;\\n      step = step == null ? 1 : (+step || 0);\\n\\n      if (end == null) {\\n        end = start;\\n        start = 0;\\n      } else {\\n        end = +end || 0;\\n      }\\n      // Use `Array(length)` so engines like Chakra and V8 avoid slower modes.\\n      // See https://youtu.be/XAqIpGU8ZZk#t=17m25s for more details.\\n      var index = -1,\\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\\n          result = Array(length);\\n\\n      while (++index < length) {\\n        result[index] = start;\\n        start += step;\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Invokes the iteratee function `n` times, returning an array of the results\\n     * of each invocation. The `iteratee` is bound to `thisArg` and invoked with\\n     * one argument; (index).\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {number} n The number of times to invoke `iteratee`.\\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {Array} Returns the array of results.\\n     * @example\\n     *\\n     * var diceRolls = _.times(3, _.partial(_.random, 1, 6, false));\\n     * // => [3, 6, 4]\\n     *\\n     * _.times(3, function(n) {\\n     *   mage.castSpell(n);\\n     * });\\n     * // => invokes `mage.castSpell(n)` three times with `n` of `0`, `1`, and `2`\\n     *\\n     * _.times(3, function(n) {\\n     *   this.cast(n);\\n     * }, mage);\\n     * // => also invokes `mage.castSpell(n)` three times\\n     */\\n    function times(n, iteratee, thisArg) {\\n      n = nativeFloor(n);\\n\\n      // Exit early to avoid a JSC JIT bug in Safari 8\\n      // where `Array(0)` is treated as `Array(1)`.\\n      if (n < 1 || !nativeIsFinite(n)) {\\n        return [];\\n      }\\n      var index = -1,\\n          result = Array(nativeMin(n, MAX_ARRAY_LENGTH));\\n\\n      iteratee = bindCallback(iteratee, thisArg, 1);\\n      while (++index < n) {\\n        if (index < MAX_ARRAY_LENGTH) {\\n          result[index] = iteratee(index);\\n        } else {\\n          iteratee(index);\\n        }\\n      }\\n      return result;\\n    }\\n\\n    /**\\n     * Generates a unique ID. If `prefix` is provided the ID is appended to it.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Utility\\n     * @param {string} [prefix] The value to prefix the ID with.\\n     * @returns {string} Returns the unique ID.\\n     * @example\\n     *\\n     * _.uniqueId('contact_');\\n     * // => 'contact_104'\\n     *\\n     * _.uniqueId();\\n     * // => '105'\\n     */\\n    function uniqueId(prefix) {\\n      var id = ++idCounter;\\n      return baseToString(prefix) + id;\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * Adds two numbers.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Math\\n     * @param {number} augend The first number to add.\\n     * @param {number} addend The second number to add.\\n     * @returns {number} Returns the sum.\\n     * @example\\n     *\\n     * _.add(6, 4);\\n     * // => 10\\n     */\\n    function add(augend, addend) {\\n      return (+augend || 0) + (+addend || 0);\\n    }\\n\\n    /**\\n     * Calculates `n` rounded up to `precision`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Math\\n     * @param {number} n The number to round up.\\n     * @param {number} [precision=0] The precision to round up to.\\n     * @returns {number} Returns the rounded up number.\\n     * @example\\n     *\\n     * _.ceil(4.006);\\n     * // => 5\\n     *\\n     * _.ceil(6.004, 2);\\n     * // => 6.01\\n     *\\n     * _.ceil(6040, -2);\\n     * // => 6100\\n     */\\n    var ceil = createRound('ceil');\\n\\n    /**\\n     * Calculates `n` rounded down to `precision`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Math\\n     * @param {number} n The number to round down.\\n     * @param {number} [precision=0] The precision to round down to.\\n     * @returns {number} Returns the rounded down number.\\n     * @example\\n     *\\n     * _.floor(4.006);\\n     * // => 4\\n     *\\n     * _.floor(0.046, 2);\\n     * // => 0.04\\n     *\\n     * _.floor(4060, -2);\\n     * // => 4000\\n     */\\n    var floor = createRound('floor');\\n\\n    /**\\n     * Gets the maximum value of `collection`. If `collection` is empty or falsey\\n     * `-Infinity` is returned. If an iteratee function is provided it is invoked\\n     * for each value in `collection` to generate the criterion by which the value\\n     * is ranked. The `iteratee` is bound to `thisArg` and invoked with three\\n     * arguments: (value, index, collection).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Math\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [iteratee] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {*} Returns the maximum value.\\n     * @example\\n     *\\n     * _.max([4, 2, 8, 6]);\\n     * // => 8\\n     *\\n     * _.max([]);\\n     * // => -Infinity\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36 },\\n     *   { 'user': 'fred',   'age': 40 }\\n     * ];\\n     *\\n     * _.max(users, function(chr) {\\n     *   return chr.age;\\n     * });\\n     * // => { 'user': 'fred', 'age': 40 }\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.max(users, 'age');\\n     * // => { 'user': 'fred', 'age': 40 }\\n     */\\n    var max = createExtremum(gt, NEGATIVE_INFINITY);\\n\\n    /**\\n     * Gets the minimum value of `collection`. If `collection` is empty or falsey\\n     * `Infinity` is returned. If an iteratee function is provided it is invoked\\n     * for each value in `collection` to generate the criterion by which the value\\n     * is ranked. The `iteratee` is bound to `thisArg` and invoked with three\\n     * arguments: (value, index, collection).\\n     *\\n     * If a property name is provided for `iteratee` the created `_.property`\\n     * style callback returns the property value of the given element.\\n     *\\n     * If a value is also provided for `thisArg` the created `_.matchesProperty`\\n     * style callback returns `true` for elements that have a matching property\\n     * value, else `false`.\\n     *\\n     * If an object is provided for `iteratee` the created `_.matches` style\\n     * callback returns `true` for elements that have the properties of the given\\n     * object, else `false`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Math\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [iteratee] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {*} Returns the minimum value.\\n     * @example\\n     *\\n     * _.min([4, 2, 8, 6]);\\n     * // => 2\\n     *\\n     * _.min([]);\\n     * // => Infinity\\n     *\\n     * var users = [\\n     *   { 'user': 'barney', 'age': 36 },\\n     *   { 'user': 'fred',   'age': 40 }\\n     * ];\\n     *\\n     * _.min(users, function(chr) {\\n     *   return chr.age;\\n     * });\\n     * // => { 'user': 'barney', 'age': 36 }\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.min(users, 'age');\\n     * // => { 'user': 'barney', 'age': 36 }\\n     */\\n    var min = createExtremum(lt, POSITIVE_INFINITY);\\n\\n    /**\\n     * Calculates `n` rounded to `precision`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Math\\n     * @param {number} n The number to round.\\n     * @param {number} [precision=0] The precision to round to.\\n     * @returns {number} Returns the rounded number.\\n     * @example\\n     *\\n     * _.round(4.006);\\n     * // => 4\\n     *\\n     * _.round(4.006, 2);\\n     * // => 4.01\\n     *\\n     * _.round(4060, -2);\\n     * // => 4100\\n     */\\n    var round = createRound('round');\\n\\n    /**\\n     * Gets the sum of the values in `collection`.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @category Math\\n     * @param {Array|Object|string} collection The collection to iterate over.\\n     * @param {Function|Object|string} [iteratee] The function invoked per iteration.\\n     * @param {*} [thisArg] The `this` binding of `iteratee`.\\n     * @returns {number} Returns the sum.\\n     * @example\\n     *\\n     * _.sum([4, 6]);\\n     * // => 10\\n     *\\n     * _.sum({ 'a': 4, 'b': 6 });\\n     * // => 10\\n     *\\n     * var objects = [\\n     *   { 'n': 4 },\\n     *   { 'n': 6 }\\n     * ];\\n     *\\n     * _.sum(objects, function(object) {\\n     *   return object.n;\\n     * });\\n     * // => 10\\n     *\\n     * // using the `_.property` callback shorthand\\n     * _.sum(objects, 'n');\\n     * // => 10\\n     */\\n    function sum(collection, iteratee, thisArg) {\\n      if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\\n        iteratee = undefined;\\n      }\\n      iteratee = getCallback(iteratee, thisArg, 3);\\n      return iteratee.length == 1\\n        ? arraySum(isArray(collection) ? collection : toIterable(collection), iteratee)\\n        : baseSum(collection, iteratee);\\n    }\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    // Ensure wrappers are instances of `baseLodash`.\\n    lodash.prototype = baseLodash.prototype;\\n\\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\\n    LodashWrapper.prototype.constructor = LodashWrapper;\\n\\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\\n    LazyWrapper.prototype.constructor = LazyWrapper;\\n\\n    // Add functions to the `Map` cache.\\n    MapCache.prototype['delete'] = mapDelete;\\n    MapCache.prototype.get = mapGet;\\n    MapCache.prototype.has = mapHas;\\n    MapCache.prototype.set = mapSet;\\n\\n    // Add functions to the `Set` cache.\\n    SetCache.prototype.push = cachePush;\\n\\n    // Assign cache to `_.memoize`.\\n    memoize.Cache = MapCache;\\n\\n    // Add functions that return wrapped values when chaining.\\n    lodash.after = after;\\n    lodash.ary = ary;\\n    lodash.assign = assign;\\n    lodash.at = at;\\n    lodash.before = before;\\n    lodash.bind = bind;\\n    lodash.bindAll = bindAll;\\n    lodash.bindKey = bindKey;\\n    lodash.callback = callback;\\n    lodash.chain = chain;\\n    lodash.chunk = chunk;\\n    lodash.compact = compact;\\n    lodash.constant = constant;\\n    lodash.countBy = countBy;\\n    lodash.create = create;\\n    lodash.curry = curry;\\n    lodash.curryRight = curryRight;\\n    lodash.debounce = debounce;\\n    lodash.defaults = defaults;\\n    lodash.defaultsDeep = defaultsDeep;\\n    lodash.defer = defer;\\n    lodash.delay = delay;\\n    lodash.difference = difference;\\n    lodash.drop = drop;\\n    lodash.dropRight = dropRight;\\n    lodash.dropRightWhile = dropRightWhile;\\n    lodash.dropWhile = dropWhile;\\n    lodash.fill = fill;\\n    lodash.filter = filter;\\n    lodash.flatten = flatten;\\n    lodash.flattenDeep = flattenDeep;\\n    lodash.flow = flow;\\n    lodash.flowRight = flowRight;\\n    lodash.forEach = forEach;\\n    lodash.forEachRight = forEachRight;\\n    lodash.forIn = forIn;\\n    lodash.forInRight = forInRight;\\n    lodash.forOwn = forOwn;\\n    lodash.forOwnRight = forOwnRight;\\n    lodash.functions = functions;\\n    lodash.groupBy = groupBy;\\n    lodash.indexBy = indexBy;\\n    lodash.initial = initial;\\n    lodash.intersection = intersection;\\n    lodash.invert = invert;\\n    lodash.invoke = invoke;\\n    lodash.keys = keys;\\n    lodash.keysIn = keysIn;\\n    lodash.map = map;\\n    lodash.mapKeys = mapKeys;\\n    lodash.mapValues = mapValues;\\n    lodash.matches = matches;\\n    lodash.matchesProperty = matchesProperty;\\n    lodash.memoize = memoize;\\n    lodash.merge = merge;\\n    lodash.method = method;\\n    lodash.methodOf = methodOf;\\n    lodash.mixin = mixin;\\n    lodash.modArgs = modArgs;\\n    lodash.negate = negate;\\n    lodash.omit = omit;\\n    lodash.once = once;\\n    lodash.pairs = pairs;\\n    lodash.partial = partial;\\n    lodash.partialRight = partialRight;\\n    lodash.partition = partition;\\n    lodash.pick = pick;\\n    lodash.pluck = pluck;\\n    lodash.property = property;\\n    lodash.propertyOf = propertyOf;\\n    lodash.pull = pull;\\n    lodash.pullAt = pullAt;\\n    lodash.range = range;\\n    lodash.rearg = rearg;\\n    lodash.reject = reject;\\n    lodash.remove = remove;\\n    lodash.rest = rest;\\n    lodash.restParam = restParam;\\n    lodash.set = set;\\n    lodash.shuffle = shuffle;\\n    lodash.slice = slice;\\n    lodash.sortBy = sortBy;\\n    lodash.sortByAll = sortByAll;\\n    lodash.sortByOrder = sortByOrder;\\n    lodash.spread = spread;\\n    lodash.take = take;\\n    lodash.takeRight = takeRight;\\n    lodash.takeRightWhile = takeRightWhile;\\n    lodash.takeWhile = takeWhile;\\n    lodash.tap = tap;\\n    lodash.throttle = throttle;\\n    lodash.thru = thru;\\n    lodash.times = times;\\n    lodash.toArray = toArray;\\n    lodash.toPlainObject = toPlainObject;\\n    lodash.transform = transform;\\n    lodash.union = union;\\n    lodash.uniq = uniq;\\n    lodash.unzip = unzip;\\n    lodash.unzipWith = unzipWith;\\n    lodash.values = values;\\n    lodash.valuesIn = valuesIn;\\n    lodash.where = where;\\n    lodash.without = without;\\n    lodash.wrap = wrap;\\n    lodash.xor = xor;\\n    lodash.zip = zip;\\n    lodash.zipObject = zipObject;\\n    lodash.zipWith = zipWith;\\n\\n    // Add aliases.\\n    lodash.backflow = flowRight;\\n    lodash.collect = map;\\n    lodash.compose = flowRight;\\n    lodash.each = forEach;\\n    lodash.eachRight = forEachRight;\\n    lodash.extend = assign;\\n    lodash.iteratee = callback;\\n    lodash.methods = functions;\\n    lodash.object = zipObject;\\n    lodash.select = filter;\\n    lodash.tail = rest;\\n    lodash.unique = uniq;\\n\\n    // Add functions to `lodash.prototype`.\\n    mixin(lodash, lodash);\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    // Add functions that return unwrapped values when chaining.\\n    lodash.add = add;\\n    lodash.attempt = attempt;\\n    lodash.camelCase = camelCase;\\n    lodash.capitalize = capitalize;\\n    lodash.ceil = ceil;\\n    lodash.clone = clone;\\n    lodash.cloneDeep = cloneDeep;\\n    lodash.deburr = deburr;\\n    lodash.endsWith = endsWith;\\n    lodash.escape = escape;\\n    lodash.escapeRegExp = escapeRegExp;\\n    lodash.every = every;\\n    lodash.find = find;\\n    lodash.findIndex = findIndex;\\n    lodash.findKey = findKey;\\n    lodash.findLast = findLast;\\n    lodash.findLastIndex = findLastIndex;\\n    lodash.findLastKey = findLastKey;\\n    lodash.findWhere = findWhere;\\n    lodash.first = first;\\n    lodash.floor = floor;\\n    lodash.get = get;\\n    lodash.gt = gt;\\n    lodash.gte = gte;\\n    lodash.has = has;\\n    lodash.identity = identity;\\n    lodash.includes = includes;\\n    lodash.indexOf = indexOf;\\n    lodash.inRange = inRange;\\n    lodash.isArguments = isArguments;\\n    lodash.isArray = isArray;\\n    lodash.isBoolean = isBoolean;\\n    lodash.isDate = isDate;\\n    lodash.isElement = isElement;\\n    lodash.isEmpty = isEmpty;\\n    lodash.isEqual = isEqual;\\n    lodash.isError = isError;\\n    lodash.isFinite = isFinite;\\n    lodash.isFunction = isFunction;\\n    lodash.isMatch = isMatch;\\n    lodash.isNaN = isNaN;\\n    lodash.isNative = isNative;\\n    lodash.isNull = isNull;\\n    lodash.isNumber = isNumber;\\n    lodash.isObject = isObject;\\n    lodash.isPlainObject = isPlainObject;\\n    lodash.isRegExp = isRegExp;\\n    lodash.isString = isString;\\n    lodash.isTypedArray = isTypedArray;\\n    lodash.isUndefined = isUndefined;\\n    lodash.kebabCase = kebabCase;\\n    lodash.last = last;\\n    lodash.lastIndexOf = lastIndexOf;\\n    lodash.lt = lt;\\n    lodash.lte = lte;\\n    lodash.max = max;\\n    lodash.min = min;\\n    lodash.noConflict = noConflict;\\n    lodash.noop = noop;\\n    lodash.now = now;\\n    lodash.pad = pad;\\n    lodash.padLeft = padLeft;\\n    lodash.padRight = padRight;\\n    lodash.parseInt = parseInt;\\n    lodash.random = random;\\n    lodash.reduce = reduce;\\n    lodash.reduceRight = reduceRight;\\n    lodash.repeat = repeat;\\n    lodash.result = result;\\n    lodash.round = round;\\n    lodash.runInContext = runInContext;\\n    lodash.size = size;\\n    lodash.snakeCase = snakeCase;\\n    lodash.some = some;\\n    lodash.sortedIndex = sortedIndex;\\n    lodash.sortedLastIndex = sortedLastIndex;\\n    lodash.startCase = startCase;\\n    lodash.startsWith = startsWith;\\n    lodash.sum = sum;\\n    lodash.template = template;\\n    lodash.trim = trim;\\n    lodash.trimLeft = trimLeft;\\n    lodash.trimRight = trimRight;\\n    lodash.trunc = trunc;\\n    lodash.unescape = unescape;\\n    lodash.uniqueId = uniqueId;\\n    lodash.words = words;\\n\\n    // Add aliases.\\n    lodash.all = every;\\n    lodash.any = some;\\n    lodash.contains = includes;\\n    lodash.eq = isEqual;\\n    lodash.detect = find;\\n    lodash.foldl = reduce;\\n    lodash.foldr = reduceRight;\\n    lodash.head = first;\\n    lodash.include = includes;\\n    lodash.inject = reduce;\\n\\n    mixin(lodash, (function() {\\n      var source = {};\\n      baseForOwn(lodash, function(func, methodName) {\\n        if (!lodash.prototype[methodName]) {\\n          source[methodName] = func;\\n        }\\n      });\\n      return source;\\n    }()), false);\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    // Add functions capable of returning wrapped and unwrapped values when chaining.\\n    lodash.sample = sample;\\n\\n    lodash.prototype.sample = function(n) {\\n      if (!this.__chain__ && n == null) {\\n        return sample(this.value());\\n      }\\n      return this.thru(function(value) {\\n        return sample(value, n);\\n      });\\n    };\\n\\n    /*------------------------------------------------------------------------*/\\n\\n    /**\\n     * The semantic version number.\\n     *\\n     * @static\\n     * @memberOf _\\n     * @type string\\n     */\\n    lodash.VERSION = VERSION;\\n\\n    // Assign default placeholders.\\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\\n      lodash[methodName].placeholder = lodash;\\n    });\\n\\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\\n    arrayEach(['drop', 'take'], function(methodName, index) {\\n      LazyWrapper.prototype[methodName] = function(n) {\\n        var filtered = this.__filtered__;\\n        if (filtered && !index) {\\n          return new LazyWrapper(this);\\n        }\\n        n = n == null ? 1 : nativeMax(nativeFloor(n) || 0, 0);\\n\\n        var result = this.clone();\\n        if (filtered) {\\n          result.__takeCount__ = nativeMin(result.__takeCount__, n);\\n        } else {\\n          result.__views__.push({ 'size': n, 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') });\\n        }\\n        return result;\\n      };\\n\\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\\n        return this.reverse()[methodName](n).reverse();\\n      };\\n    });\\n\\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\\n      var type = index + 1,\\n          isFilter = type != LAZY_MAP_FLAG;\\n\\n      LazyWrapper.prototype[methodName] = function(iteratee, thisArg) {\\n        var result = this.clone();\\n        result.__iteratees__.push({ 'iteratee': getCallback(iteratee, thisArg, 1), 'type': type });\\n        result.__filtered__ = result.__filtered__ || isFilter;\\n        return result;\\n      };\\n    });\\n\\n    // Add `LazyWrapper` methods for `_.first` and `_.last`.\\n    arrayEach(['first', 'last'], function(methodName, index) {\\n      var takeName = 'take' + (index ? 'Right' : '');\\n\\n      LazyWrapper.prototype[methodName] = function() {\\n        return this[takeName](1).value()[0];\\n      };\\n    });\\n\\n    // Add `LazyWrapper` methods for `_.initial` and `_.rest`.\\n    arrayEach(['initial', 'rest'], function(methodName, index) {\\n      var dropName = 'drop' + (index ? '' : 'Right');\\n\\n      LazyWrapper.prototype[methodName] = function() {\\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\\n      };\\n    });\\n\\n    // Add `LazyWrapper` methods for `_.pluck` and `_.where`.\\n    arrayEach(['pluck', 'where'], function(methodName, index) {\\n      var operationName = index ? 'filter' : 'map',\\n          createCallback = index ? baseMatches : property;\\n\\n      LazyWrapper.prototype[methodName] = function(value) {\\n        return this[operationName](createCallback(value));\\n      };\\n    });\\n\\n    LazyWrapper.prototype.compact = function() {\\n      return this.filter(identity);\\n    };\\n\\n    LazyWrapper.prototype.reject = function(predicate, thisArg) {\\n      predicate = getCallback(predicate, thisArg, 1);\\n      return this.filter(function(value) {\\n        return !predicate(value);\\n      });\\n    };\\n\\n    LazyWrapper.prototype.slice = function(start, end) {\\n      start = start == null ? 0 : (+start || 0);\\n\\n      var result = this;\\n      if (result.__filtered__ && (start > 0 || end < 0)) {\\n        return new LazyWrapper(result);\\n      }\\n      if (start < 0) {\\n        result = result.takeRight(-start);\\n      } else if (start) {\\n        result = result.drop(start);\\n      }\\n      if (end !== undefined) {\\n        end = (+end || 0);\\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\\n      }\\n      return result;\\n    };\\n\\n    LazyWrapper.prototype.takeRightWhile = function(predicate, thisArg) {\\n      return this.reverse().takeWhile(predicate, thisArg).reverse();\\n    };\\n\\n    LazyWrapper.prototype.toArray = function() {\\n      return this.take(POSITIVE_INFINITY);\\n    };\\n\\n    // Add `LazyWrapper` methods to `lodash.prototype`.\\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\\n      var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName),\\n          retUnwrapped = /^(?:first|last)$/.test(methodName),\\n          lodashFunc = lodash[retUnwrapped ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName];\\n\\n      if (!lodashFunc) {\\n        return;\\n      }\\n      lodash.prototype[methodName] = function() {\\n        var args = retUnwrapped ? [1] : arguments,\\n            chainAll = this.__chain__,\\n            value = this.__wrapped__,\\n            isHybrid = !!this.__actions__.length,\\n            isLazy = value instanceof LazyWrapper,\\n            iteratee = args[0],\\n            useLazy = isLazy || isArray(value);\\n\\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\\n          // Avoid lazy use if the iteratee has a \\\"length\\\" value other than `1`.\\n          isLazy = useLazy = false;\\n        }\\n        var interceptor = function(value) {\\n          return (retUnwrapped && chainAll)\\n            ? lodashFunc(value, 1)[0]\\n            : lodashFunc.apply(undefined, arrayPush([value], args));\\n        };\\n\\n        var action = { 'func': thru, 'args': [interceptor], 'thisArg': undefined },\\n            onlyLazy = isLazy && !isHybrid;\\n\\n        if (retUnwrapped && !chainAll) {\\n          if (onlyLazy) {\\n            value = value.clone();\\n            value.__actions__.push(action);\\n            return func.call(value);\\n          }\\n          return lodashFunc.call(undefined, this.value())[0];\\n        }\\n        if (!retUnwrapped && useLazy) {\\n          value = onlyLazy ? value : new LazyWrapper(this);\\n          var result = func.apply(value, args);\\n          result.__actions__.push(action);\\n          return new LodashWrapper(result, chainAll);\\n        }\\n        return this.thru(interceptor);\\n      };\\n    });\\n\\n    // Add `Array` and `String` methods to `lodash.prototype`.\\n    arrayEach(['join', 'pop', 'push', 'replace', 'shift', 'sort', 'splice', 'split', 'unshift'], function(methodName) {\\n      var func = (/^(?:replace|split)$/.test(methodName) ? stringProto : arrayProto)[methodName],\\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\\n          retUnwrapped = /^(?:join|pop|replace|shift)$/.test(methodName);\\n\\n      lodash.prototype[methodName] = function() {\\n        var args = arguments;\\n        if (retUnwrapped && !this.__chain__) {\\n          return func.apply(this.value(), args);\\n        }\\n        return this[chainName](function(value) {\\n          return func.apply(value, args);\\n        });\\n      };\\n    });\\n\\n    // Map minified function names to their real names.\\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\\n      var lodashFunc = lodash[methodName];\\n      if (lodashFunc) {\\n        var key = lodashFunc.name,\\n            names = realNames[key] || (realNames[key] = []);\\n\\n        names.push({ 'name': methodName, 'func': lodashFunc });\\n      }\\n    });\\n\\n    realNames[createHybridWrapper(undefined, BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': undefined }];\\n\\n    // Add functions to the lazy wrapper.\\n    LazyWrapper.prototype.clone = lazyClone;\\n    LazyWrapper.prototype.reverse = lazyReverse;\\n    LazyWrapper.prototype.value = lazyValue;\\n\\n    // Add chaining functions to the `lodash` wrapper.\\n    lodash.prototype.chain = wrapperChain;\\n    lodash.prototype.commit = wrapperCommit;\\n    lodash.prototype.concat = wrapperConcat;\\n    lodash.prototype.plant = wrapperPlant;\\n    lodash.prototype.reverse = wrapperReverse;\\n    lodash.prototype.toString = wrapperToString;\\n    lodash.prototype.run = lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\\n\\n    // Add function aliases to the `lodash` wrapper.\\n    lodash.prototype.collect = lodash.prototype.map;\\n    lodash.prototype.head = lodash.prototype.first;\\n    lodash.prototype.select = lodash.prototype.filter;\\n    lodash.prototype.tail = lodash.prototype.rest;\\n\\n    return lodash;\\n  }\\n\\n  /*--------------------------------------------------------------------------*/\\n\\n  // Export lodash.\\n  var _ = runInContext();\\n\\n  // Some AMD build optimizers like r.js check for condition patterns like the following:\\n  if (true) {\\n    // Expose lodash to the global object when an AMD loader is present to avoid\\n    // errors in cases where lodash is loaded by a script tag and not intended\\n    // as an AMD module. See http://requirejs.org/docs/errors.html#mismatch for\\n    // more details.\\n    root._ = _;\\n\\n    // Define as an anonymous module so, through path mapping, it can be\\n    // referenced as the \\\"underscore\\\" module.\\n    !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {\\n      return _;\\n    }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n  }\\n  // Check for `exports` after `define` in case a build optimizer adds an `exports` object.\\n  else if (freeExports && freeModule) {\\n    // Export for Node.js or RingoJS.\\n    if (moduleExports) {\\n      (freeModule.exports = _)._ = _;\\n    }\\n    // Export for Rhino with CommonJS support.\\n    else {\\n      freeExports._ = _;\\n    }\\n  }\\n  else {\\n    // Export for a browser or Rhino.\\n    root._ = _;\\n  }\\n}.call(this));\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/buildin/module.js */ 149)(module), (function() { return this; }())))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/lodash/index.js\\n ** module id = 148\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/lodash/index.js?\");\n\n/***/ },\n/* 149 */\n/*!***********************************!*\\\n  !*** (webpack)/buildin/module.js ***!\n  \\***********************************/\n/***/ function(module, exports) {\n\n\teval(\"module.exports = function(module) {\\r\\n\\tif(!module.webpackPolyfill) {\\r\\n\\t\\tmodule.deprecate = function() {};\\r\\n\\t\\tmodule.paths = [];\\r\\n\\t\\t// module.parent = undefined by default\\r\\n\\t\\tmodule.children = [];\\r\\n\\t\\tmodule.webpackPolyfill = 1;\\r\\n\\t}\\r\\n\\treturn module;\\r\\n}\\r\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** (webpack)/buildin/module.js\\n ** module id = 149\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///(webpack)/buildin/module.js?\");\n\n/***/ },\n/* 150 */,\n/* 151 */\n/*!*****************************************!*\\\n  !*** ./~/react-router/modules/index.js ***!\n  \\*****************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"exports.DefaultRoute = __webpack_require__(/*! ./components/DefaultRoute */ 166);\\nexports.Link = __webpack_require__(/*! ./components/Link */ 169);\\nexports.NotFoundRoute = __webpack_require__(/*! ./components/NotFoundRoute */ 173);\\nexports.Redirect = __webpack_require__(/*! ./components/Redirect */ 174);\\nexports.Route = __webpack_require__(/*! ./components/Route */ 175);\\nexports.RouteHandler = __webpack_require__(/*! ./components/RouteHandler */ 176);\\n\\nexports.HashLocation = __webpack_require__(/*! ./locations/HashLocation */ 178);\\nexports.HistoryLocation = __webpack_require__(/*! ./locations/HistoryLocation */ 153);\\nexports.RefreshLocation = __webpack_require__(/*! ./locations/RefreshLocation */ 152);\\n\\nexports.ImitateBrowserBehavior = __webpack_require__(/*! ./behaviors/ImitateBrowserBehavior */ 179);\\nexports.ScrollToTopBehavior = __webpack_require__(/*! ./behaviors/ScrollToTopBehavior */ 180);\\n\\nexports.Navigation = __webpack_require__(/*! ./mixins/Navigation */ 171);\\nexports.State = __webpack_require__(/*! ./mixins/State */ 172);\\n\\nexports.create = __webpack_require__(/*! ./utils/createRouter */ 181);\\nexports.run = __webpack_require__(/*! ./utils/runRouter */ 200);\\n\\nexports.History = __webpack_require__(/*! ./utils/History */ 155);\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/index.js\\n ** module id = 151\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/index.js?\");\n\n/***/ },\n/* 152 */\n/*!*************************************************************!*\\\n  !*** ./~/react-router/modules/locations/RefreshLocation.js ***!\n  \\*************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var HistoryLocation = __webpack_require__(/*! ./HistoryLocation */ 153);\\nvar History = __webpack_require__(/*! ../utils/History */ 155);\\nvar Path = __webpack_require__(/*! ../utils/Path */ 156);\\n\\n/**\\n * A Location that uses full page refreshes. This is used as\\n * the fallback for HistoryLocation in browsers that do not\\n * support the HTML5 history API.\\n */\\nvar RefreshLocation = {\\n\\n  push: function (path) {\\n    window.location = Path.encode(path);\\n  },\\n\\n  replace: function (path) {\\n    window.location.replace(Path.encode(path));\\n  },\\n\\n  pop: History.back,\\n\\n  getCurrentPath: HistoryLocation.getCurrentPath,\\n\\n  toString: function () {\\n    return '<RefreshLocation>';\\n  }\\n\\n};\\n\\nmodule.exports = RefreshLocation;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/locations/RefreshLocation.js\\n ** module id = 152\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/locations/RefreshLocation.js?\");\n\n/***/ },\n/* 153 */\n/*!*************************************************************!*\\\n  !*** ./~/react-router/modules/locations/HistoryLocation.js ***!\n  \\*************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var LocationActions = __webpack_require__(/*! ../actions/LocationActions */ 154);\\nvar History = __webpack_require__(/*! ../utils/History */ 155);\\nvar Path = __webpack_require__(/*! ../utils/Path */ 156);\\n\\n/**\\n * Returns the current URL path from `window.location`, including query string.\\n */\\nfunction getWindowPath() {\\n  return Path.decode(\\n    window.location.pathname + window.location.search\\n  );\\n}\\n\\nvar _changeListeners = [];\\n\\nfunction notifyChange(type) {\\n  var change = {\\n    path: getWindowPath(),\\n    type: type\\n  };\\n\\n  _changeListeners.forEach(function (listener) {\\n    listener(change);\\n  });\\n}\\n\\nvar _isListening = false;\\n\\nfunction onPopState() {\\n  notifyChange(LocationActions.POP);\\n}\\n\\n/**\\n * A Location that uses HTML5 history.\\n */\\nvar HistoryLocation = {\\n\\n  addChangeListener: function (listener) {\\n    _changeListeners.push(listener);\\n\\n    if (_isListening)\\n      return;\\n\\n    if (window.addEventListener) {\\n      window.addEventListener('popstate', onPopState, false);\\n    } else {\\n      window.attachEvent('popstate', onPopState);\\n    }\\n\\n    _isListening = true;\\n  },\\n\\n  removeChangeListener: function(listener) {\\n    for (var i = 0, l = _changeListeners.length; i < l; i ++) {\\n      if (_changeListeners[i] === listener) {\\n        _changeListeners.splice(i, 1);\\n        break;\\n      }\\n    }\\n\\n    if (window.addEventListener) {\\n      window.removeEventListener('popstate', onPopState);\\n    } else {\\n      window.removeEvent('popstate', onPopState);\\n    }\\n\\n    if (_changeListeners.length === 0)\\n      _isListening = false;\\n  },\\n\\n\\n\\n  push: function (path) {\\n    window.history.pushState({ path: path }, '', Path.encode(path));\\n    History.length += 1;\\n    notifyChange(LocationActions.PUSH);\\n  },\\n\\n  replace: function (path) {\\n    window.history.replaceState({ path: path }, '', Path.encode(path));\\n    notifyChange(LocationActions.REPLACE);\\n  },\\n\\n  pop: History.back,\\n\\n  getCurrentPath: getWindowPath,\\n\\n  toString: function () {\\n    return '<HistoryLocation>';\\n  }\\n\\n};\\n\\nmodule.exports = HistoryLocation;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/locations/HistoryLocation.js\\n ** module id = 153\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/locations/HistoryLocation.js?\");\n\n/***/ },\n/* 154 */\n/*!***********************************************************!*\\\n  !*** ./~/react-router/modules/actions/LocationActions.js ***!\n  \\***********************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Actions that modify the URL.\\n */\\nvar LocationActions = {\\n\\n  /**\\n   * Indicates a new location is being pushed to the history stack.\\n   */\\n  PUSH: 'push',\\n\\n  /**\\n   * Indicates the current location should be replaced.\\n   */\\n  REPLACE: 'replace',\\n\\n  /**\\n   * Indicates the most recent entry should be removed from the history stack.\\n   */\\n  POP: 'pop'\\n\\n};\\n\\nmodule.exports = LocationActions;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/actions/LocationActions.js\\n ** module id = 154\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/actions/LocationActions.js?\");\n\n/***/ },\n/* 155 */\n/*!*************************************************!*\\\n  !*** ./~/react-router/modules/utils/History.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var invariant = __webpack_require__(/*! react/lib/invariant */ 6);\\nvar canUseDOM = __webpack_require__(/*! react/lib/ExecutionEnvironment */ 49).canUseDOM;\\n\\nvar History = {\\n\\n  /**\\n   * Sends the browser back one entry in the history.\\n   */\\n  back: function () {\\n    invariant(\\n      canUseDOM,\\n      'Cannot use History.back without a DOM'\\n    );\\n\\n    // Do this first so that History.length will\\n    // be accurate in location change listeners.\\n    History.length -= 1;\\n\\n    window.history.back();\\n  },\\n\\n  /**\\n   * The current number of entries in the history.\\n   */\\n  length: 1\\n\\n};\\n\\nmodule.exports = History;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/History.js\\n ** module id = 155\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/History.js?\");\n\n/***/ },\n/* 156 */\n/*!**********************************************!*\\\n  !*** ./~/react-router/modules/utils/Path.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var invariant = __webpack_require__(/*! react/lib/invariant */ 6);\\nvar merge = __webpack_require__(/*! qs/lib/utils */ 157).merge;\\nvar qs = __webpack_require__(/*! qs */ 162);\\n\\nvar paramCompileMatcher = /:([a-zA-Z_$][a-zA-Z0-9_$]*)|[*.()\\\\[\\\\]\\\\\\\\+|{}^$]/g;\\nvar paramInjectMatcher = /:([a-zA-Z_$][a-zA-Z0-9_$?]*[?]?)|[*]/g;\\nvar paramInjectTrailingSlashMatcher = /\\\\/\\\\/\\\\?|\\\\/\\\\?/g;\\nvar queryMatcher = /\\\\?(.+)/;\\n\\nvar _compiledPatterns = {};\\n\\nfunction compilePattern(pattern) {\\n  if (!(pattern in _compiledPatterns)) {\\n    var paramNames = [];\\n    var source = pattern.replace(paramCompileMatcher, function (match, paramName) {\\n      if (paramName) {\\n        paramNames.push(paramName);\\n        return '([^/?#]+)';\\n      } else if (match === '*') {\\n        paramNames.push('splat');\\n        return '(.*?)';\\n      } else {\\n        return '\\\\\\\\' + match;\\n      }\\n    });\\n\\n    _compiledPatterns[pattern] = {\\n      matcher: new RegExp('^' + source + '$', 'i'),\\n      paramNames: paramNames\\n    };\\n  }\\n\\n  return _compiledPatterns[pattern];\\n}\\n\\nvar Path = {\\n\\n  /**\\n   * Safely decodes special characters in the given URL path.\\n   */\\n  decode: function (path) {\\n    return decodeURI(path.replace(/\\\\+/g, ' '));\\n  },\\n\\n  /**\\n   * Safely encodes special characters in the given URL path.\\n   */\\n  encode: function (path) {\\n    return encodeURI(path).replace(/%20/g, '+');\\n  },\\n\\n  /**\\n   * Returns an array of the names of all parameters in the given pattern.\\n   */\\n  extractParamNames: function (pattern) {\\n    return compilePattern(pattern).paramNames;\\n  },\\n\\n  /**\\n   * Extracts the portions of the given URL path that match the given pattern\\n   * and returns an object of param name => value pairs. Returns null if the\\n   * pattern does not match the given path.\\n   */\\n  extractParams: function (pattern, path) {\\n    var object = compilePattern(pattern);\\n    var match = path.match(object.matcher);\\n\\n    if (!match)\\n      return null;\\n\\n    var params = {};\\n\\n    object.paramNames.forEach(function (paramName, index) {\\n      params[paramName] = match[index + 1];\\n    });\\n\\n    return params;\\n  },\\n\\n  /**\\n   * Returns a version of the given route path with params interpolated. Throws\\n   * if there is a dynamic segment of the route path for which there is no param.\\n   */\\n  injectParams: function (pattern, params) {\\n    params = params || {};\\n\\n    var splatIndex = 0;\\n\\n    return pattern.replace(paramInjectMatcher, function (match, paramName) {\\n      paramName = paramName || 'splat';\\n\\n      // If param is optional don't check for existence\\n      if (paramName.slice(-1) !== '?') {\\n        invariant(\\n          params[paramName] != null,\\n          'Missing \\\"' + paramName + '\\\" parameter for path \\\"' + pattern + '\\\"'\\n        );\\n      } else {\\n        paramName = paramName.slice(0, -1);\\n\\n        if (params[paramName] == null)\\n          return '';\\n      }\\n\\n      var segment;\\n      if (paramName === 'splat' && Array.isArray(params[paramName])) {\\n        segment = params[paramName][splatIndex++];\\n\\n        invariant(\\n          segment != null,\\n          'Missing splat # ' + splatIndex + ' for path \\\"' + pattern + '\\\"'\\n        );\\n      } else {\\n        segment = params[paramName];\\n      }\\n\\n      return segment;\\n    }).replace(paramInjectTrailingSlashMatcher, '/');\\n  },\\n\\n  /**\\n   * Returns an object that is the result of parsing any query string contained\\n   * in the given path, null if the path contains no query string.\\n   */\\n  extractQuery: function (path) {\\n    var match = path.match(queryMatcher);\\n    return match && qs.parse(match[1]);\\n  },\\n\\n  /**\\n   * Returns a version of the given path without the query string.\\n   */\\n  withoutQuery: function (path) {\\n    return path.replace(queryMatcher, '');\\n  },\\n\\n  /**\\n   * Returns a version of the given path with the parameters in the given\\n   * query merged into the query string.\\n   */\\n  withQuery: function (path, query) {\\n    var existingQuery = Path.extractQuery(path);\\n\\n    if (existingQuery)\\n      query = query ? merge(existingQuery, query) : existingQuery;\\n\\n    var queryString = query && qs.stringify(query);\\n\\n    if (queryString)\\n      return Path.withoutQuery(path) + '?' + queryString;\\n\\n    return path;\\n  },\\n\\n  /**\\n   * Returns true if the given path is absolute.\\n   */\\n  isAbsolute: function (path) {\\n    return path.charAt(0) === '/';\\n  },\\n\\n  /**\\n   * Returns a normalized version of the given path.\\n   */\\n  normalize: function (path, parentRoute) {\\n    return path.replace(/^\\\\/*/, '/');\\n  },\\n\\n  /**\\n   * Joins two URL paths together.\\n   */\\n  join: function (a, b) {\\n    return a.replace(/\\\\/*$/, '/') + b;\\n  }\\n\\n};\\n\\nmodule.exports = Path;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/Path.js\\n ** module id = 156\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/Path.js?\");\n\n/***/ },\n/* 157 */\n/*!******************************************!*\\\n  !*** ./~/react-router/~/qs/lib/utils.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {// Load modules\\n\\n\\n// Declare internals\\n\\nvar internals = {};\\n\\n\\nexports.arrayToObject = function (source) {\\n\\n    var obj = {};\\n    for (var i = 0, il = source.length; i < il; ++i) {\\n        if (typeof source[i] !== 'undefined') {\\n\\n            obj[i] = source[i];\\n        }\\n    }\\n\\n    return obj;\\n};\\n\\n\\nexports.merge = function (target, source) {\\n\\n    if (!source) {\\n        return target;\\n    }\\n\\n    if (Array.isArray(source)) {\\n        for (var i = 0, il = source.length; i < il; ++i) {\\n            if (typeof source[i] !== 'undefined') {\\n                if (typeof target[i] === 'object') {\\n                    target[i] = exports.merge(target[i], source[i]);\\n                }\\n                else {\\n                    target[i] = source[i];\\n                }\\n            }\\n        }\\n\\n        return target;\\n    }\\n\\n    if (Array.isArray(target)) {\\n        if (typeof source !== 'object') {\\n            target.push(source);\\n            return target;\\n        }\\n        else {\\n            target = exports.arrayToObject(target);\\n        }\\n    }\\n\\n    var keys = Object.keys(source);\\n    for (var k = 0, kl = keys.length; k < kl; ++k) {\\n        var key = keys[k];\\n        var value = source[key];\\n\\n        if (value &&\\n            typeof value === 'object') {\\n\\n            if (!target[key]) {\\n                target[key] = value;\\n            }\\n            else {\\n                target[key] = exports.merge(target[key], value);\\n            }\\n        }\\n        else {\\n            target[key] = value;\\n        }\\n    }\\n\\n    return target;\\n};\\n\\n\\nexports.decode = function (str) {\\n\\n    try {\\n        return decodeURIComponent(str.replace(/\\\\+/g, ' '));\\n    } catch (e) {\\n        return str;\\n    }\\n};\\n\\n\\nexports.compact = function (obj, refs) {\\n\\n    if (typeof obj !== 'object' ||\\n        obj === null) {\\n\\n        return obj;\\n    }\\n\\n    refs = refs || [];\\n    var lookup = refs.indexOf(obj);\\n    if (lookup !== -1) {\\n        return refs[lookup];\\n    }\\n\\n    refs.push(obj);\\n\\n    if (Array.isArray(obj)) {\\n        var compacted = [];\\n\\n        for (var i = 0, l = obj.length; i < l; ++i) {\\n            if (typeof obj[i] !== 'undefined') {\\n                compacted.push(obj[i]);\\n            }\\n        }\\n\\n        return compacted;\\n    }\\n\\n    var keys = Object.keys(obj);\\n    for (var i = 0, il = keys.length; i < il; ++i) {\\n        var key = keys[i];\\n        obj[key] = exports.compact(obj[key], refs);\\n    }\\n\\n    return obj;\\n};\\n\\n\\nexports.isRegExp = function (obj) {\\n    return Object.prototype.toString.call(obj) === '[object RegExp]';\\n};\\n\\n\\nexports.isBuffer = function (obj) {\\n\\n    if (typeof Buffer !== 'undefined') {\\n        return Buffer.isBuffer(obj);\\n    }\\n    else {\\n        return false;\\n    }\\n};\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/buffer/index.js */ 158).Buffer))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/qs/lib/utils.js\\n ** module id = 157\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/qs/lib/utils.js?\");\n\n/***/ },\n/* 158 */\n/*!*******************************************************!*\\\n  !*** (webpack)/~/node-libs-browser/~/buffer/index.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {/*!\\n * The buffer module from node.js, for the browser.\\n *\\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\\n * @license  MIT\\n */\\n\\nvar base64 = __webpack_require__(/*! base64-js */ 159)\\nvar ieee754 = __webpack_require__(/*! ieee754 */ 160)\\nvar isArray = __webpack_require__(/*! is-array */ 161)\\n\\nexports.Buffer = Buffer\\nexports.SlowBuffer = SlowBuffer\\nexports.INSPECT_MAX_BYTES = 50\\nBuffer.poolSize = 8192 // not used by this implementation\\n\\nvar rootParent = {}\\n\\n/**\\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\\n *   === true    Use Uint8Array implementation (fastest)\\n *   === false   Use Object implementation (most compatible, even IE6)\\n *\\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\\n * Opera 11.6+, iOS 4.2+.\\n *\\n * Note:\\n *\\n * - Implementation must support adding new properties to `Uint8Array` instances.\\n *   Firefox 4-29 lacked support, fixed in Firefox 30+.\\n *   See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\\n *\\n *  - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\\n *\\n *  - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\\n *    incorrect length in some situations.\\n *\\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they will\\n * get the Object implementation, which is slower but will work correctly.\\n */\\nBuffer.TYPED_ARRAY_SUPPORT = (function () {\\n  function Foo () {}\\n  try {\\n    var buf = new ArrayBuffer(0)\\n    var arr = new Uint8Array(buf)\\n    arr.foo = function () { return 42 }\\n    arr.constructor = Foo\\n    return arr.foo() === 42 && // typed array instances can be augmented\\n        arr.constructor === Foo && // constructor can be set\\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\\n        new Uint8Array(1).subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\\n  } catch (e) {\\n    return false\\n  }\\n})()\\n\\nfunction kMaxLength () {\\n  return Buffer.TYPED_ARRAY_SUPPORT\\n    ? 0x7fffffff\\n    : 0x3fffffff\\n}\\n\\n/**\\n * Class: Buffer\\n * =============\\n *\\n * The Buffer constructor returns instances of `Uint8Array` that are augmented\\n * with function properties for all the node `Buffer` API functions. We use\\n * `Uint8Array` so that square bracket notation works as expected -- it returns\\n * a single octet.\\n *\\n * By augmenting the instances, we can avoid modifying the `Uint8Array`\\n * prototype.\\n */\\nfunction Buffer (arg) {\\n  if (!(this instanceof Buffer)) {\\n    // Avoid going through an ArgumentsAdaptorTrampoline in the common case.\\n    if (arguments.length > 1) return new Buffer(arg, arguments[1])\\n    return new Buffer(arg)\\n  }\\n\\n  this.length = 0\\n  this.parent = undefined\\n\\n  // Common case.\\n  if (typeof arg === 'number') {\\n    return fromNumber(this, arg)\\n  }\\n\\n  // Slightly less common case.\\n  if (typeof arg === 'string') {\\n    return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')\\n  }\\n\\n  // Unusual.\\n  return fromObject(this, arg)\\n}\\n\\nfunction fromNumber (that, length) {\\n  that = allocate(that, length < 0 ? 0 : checked(length) | 0)\\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\\n    for (var i = 0; i < length; i++) {\\n      that[i] = 0\\n    }\\n  }\\n  return that\\n}\\n\\nfunction fromString (that, string, encoding) {\\n  if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'\\n\\n  // Assumption: byteLength() return value is always < kMaxLength.\\n  var length = byteLength(string, encoding) | 0\\n  that = allocate(that, length)\\n\\n  that.write(string, encoding)\\n  return that\\n}\\n\\nfunction fromObject (that, object) {\\n  if (Buffer.isBuffer(object)) return fromBuffer(that, object)\\n\\n  if (isArray(object)) return fromArray(that, object)\\n\\n  if (object == null) {\\n    throw new TypeError('must start with number, buffer, array or string')\\n  }\\n\\n  if (typeof ArrayBuffer !== 'undefined' && object.buffer instanceof ArrayBuffer) {\\n    return fromTypedArray(that, object)\\n  }\\n\\n  if (object.length) return fromArrayLike(that, object)\\n\\n  return fromJsonObject(that, object)\\n}\\n\\nfunction fromBuffer (that, buffer) {\\n  var length = checked(buffer.length) | 0\\n  that = allocate(that, length)\\n  buffer.copy(that, 0, 0, length)\\n  return that\\n}\\n\\nfunction fromArray (that, array) {\\n  var length = checked(array.length) | 0\\n  that = allocate(that, length)\\n  for (var i = 0; i < length; i += 1) {\\n    that[i] = array[i] & 255\\n  }\\n  return that\\n}\\n\\n// Duplicate of fromArray() to keep fromArray() monomorphic.\\nfunction fromTypedArray (that, array) {\\n  var length = checked(array.length) | 0\\n  that = allocate(that, length)\\n  // Truncating the elements is probably not what people expect from typed\\n  // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior\\n  // of the old Buffer constructor.\\n  for (var i = 0; i < length; i += 1) {\\n    that[i] = array[i] & 255\\n  }\\n  return that\\n}\\n\\nfunction fromArrayLike (that, array) {\\n  var length = checked(array.length) | 0\\n  that = allocate(that, length)\\n  for (var i = 0; i < length; i += 1) {\\n    that[i] = array[i] & 255\\n  }\\n  return that\\n}\\n\\n// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.\\n// Returns a zero-length buffer for inputs that don't conform to the spec.\\nfunction fromJsonObject (that, object) {\\n  var array\\n  var length = 0\\n\\n  if (object.type === 'Buffer' && isArray(object.data)) {\\n    array = object.data\\n    length = checked(array.length) | 0\\n  }\\n  that = allocate(that, length)\\n\\n  for (var i = 0; i < length; i += 1) {\\n    that[i] = array[i] & 255\\n  }\\n  return that\\n}\\n\\nfunction allocate (that, length) {\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    // Return an augmented `Uint8Array` instance, for best performance\\n    that = Buffer._augment(new Uint8Array(length))\\n  } else {\\n    // Fallback: Return an object instance of the Buffer class\\n    that.length = length\\n    that._isBuffer = true\\n  }\\n\\n  var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1\\n  if (fromPool) that.parent = rootParent\\n\\n  return that\\n}\\n\\nfunction checked (length) {\\n  // Note: cannot use `length < kMaxLength` here because that fails when\\n  // length is NaN (which is otherwise coerced to zero.)\\n  if (length >= kMaxLength()) {\\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\\n  }\\n  return length | 0\\n}\\n\\nfunction SlowBuffer (subject, encoding) {\\n  if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)\\n\\n  var buf = new Buffer(subject, encoding)\\n  delete buf.parent\\n  return buf\\n}\\n\\nBuffer.isBuffer = function isBuffer (b) {\\n  return !!(b != null && b._isBuffer)\\n}\\n\\nBuffer.compare = function compare (a, b) {\\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\\n    throw new TypeError('Arguments must be Buffers')\\n  }\\n\\n  if (a === b) return 0\\n\\n  var x = a.length\\n  var y = b.length\\n\\n  var i = 0\\n  var len = Math.min(x, y)\\n  while (i < len) {\\n    if (a[i] !== b[i]) break\\n\\n    ++i\\n  }\\n\\n  if (i !== len) {\\n    x = a[i]\\n    y = b[i]\\n  }\\n\\n  if (x < y) return -1\\n  if (y < x) return 1\\n  return 0\\n}\\n\\nBuffer.isEncoding = function isEncoding (encoding) {\\n  switch (String(encoding).toLowerCase()) {\\n    case 'hex':\\n    case 'utf8':\\n    case 'utf-8':\\n    case 'ascii':\\n    case 'binary':\\n    case 'base64':\\n    case 'raw':\\n    case 'ucs2':\\n    case 'ucs-2':\\n    case 'utf16le':\\n    case 'utf-16le':\\n      return true\\n    default:\\n      return false\\n  }\\n}\\n\\nBuffer.concat = function concat (list, length) {\\n  if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')\\n\\n  if (list.length === 0) {\\n    return new Buffer(0)\\n  } else if (list.length === 1) {\\n    return list[0]\\n  }\\n\\n  var i\\n  if (length === undefined) {\\n    length = 0\\n    for (i = 0; i < list.length; i++) {\\n      length += list[i].length\\n    }\\n  }\\n\\n  var buf = new Buffer(length)\\n  var pos = 0\\n  for (i = 0; i < list.length; i++) {\\n    var item = list[i]\\n    item.copy(buf, pos)\\n    pos += item.length\\n  }\\n  return buf\\n}\\n\\nfunction byteLength (string, encoding) {\\n  if (typeof string !== 'string') string = '' + string\\n\\n  var len = string.length\\n  if (len === 0) return 0\\n\\n  // Use a for loop to avoid recursion\\n  var loweredCase = false\\n  for (;;) {\\n    switch (encoding) {\\n      case 'ascii':\\n      case 'binary':\\n      // Deprecated\\n      case 'raw':\\n      case 'raws':\\n        return len\\n      case 'utf8':\\n      case 'utf-8':\\n        return utf8ToBytes(string).length\\n      case 'ucs2':\\n      case 'ucs-2':\\n      case 'utf16le':\\n      case 'utf-16le':\\n        return len * 2\\n      case 'hex':\\n        return len >>> 1\\n      case 'base64':\\n        return base64ToBytes(string).length\\n      default:\\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\\n        encoding = ('' + encoding).toLowerCase()\\n        loweredCase = true\\n    }\\n  }\\n}\\nBuffer.byteLength = byteLength\\n\\n// pre-set for values that may exist in the future\\nBuffer.prototype.length = undefined\\nBuffer.prototype.parent = undefined\\n\\nfunction slowToString (encoding, start, end) {\\n  var loweredCase = false\\n\\n  start = start | 0\\n  end = end === undefined || end === Infinity ? this.length : end | 0\\n\\n  if (!encoding) encoding = 'utf8'\\n  if (start < 0) start = 0\\n  if (end > this.length) end = this.length\\n  if (end <= start) return ''\\n\\n  while (true) {\\n    switch (encoding) {\\n      case 'hex':\\n        return hexSlice(this, start, end)\\n\\n      case 'utf8':\\n      case 'utf-8':\\n        return utf8Slice(this, start, end)\\n\\n      case 'ascii':\\n        return asciiSlice(this, start, end)\\n\\n      case 'binary':\\n        return binarySlice(this, start, end)\\n\\n      case 'base64':\\n        return base64Slice(this, start, end)\\n\\n      case 'ucs2':\\n      case 'ucs-2':\\n      case 'utf16le':\\n      case 'utf-16le':\\n        return utf16leSlice(this, start, end)\\n\\n      default:\\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\\n        encoding = (encoding + '').toLowerCase()\\n        loweredCase = true\\n    }\\n  }\\n}\\n\\nBuffer.prototype.toString = function toString () {\\n  var length = this.length | 0\\n  if (length === 0) return ''\\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\\n  return slowToString.apply(this, arguments)\\n}\\n\\nBuffer.prototype.equals = function equals (b) {\\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\\n  if (this === b) return true\\n  return Buffer.compare(this, b) === 0\\n}\\n\\nBuffer.prototype.inspect = function inspect () {\\n  var str = ''\\n  var max = exports.INSPECT_MAX_BYTES\\n  if (this.length > 0) {\\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\\n    if (this.length > max) str += ' ... '\\n  }\\n  return '<Buffer ' + str + '>'\\n}\\n\\nBuffer.prototype.compare = function compare (b) {\\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\\n  if (this === b) return 0\\n  return Buffer.compare(this, b)\\n}\\n\\nBuffer.prototype.indexOf = function indexOf (val, byteOffset) {\\n  if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff\\n  else if (byteOffset < -0x80000000) byteOffset = -0x80000000\\n  byteOffset >>= 0\\n\\n  if (this.length === 0) return -1\\n  if (byteOffset >= this.length) return -1\\n\\n  // Negative offsets start from the end of the buffer\\n  if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)\\n\\n  if (typeof val === 'string') {\\n    if (val.length === 0) return -1 // special case: looking for empty string always fails\\n    return String.prototype.indexOf.call(this, val, byteOffset)\\n  }\\n  if (Buffer.isBuffer(val)) {\\n    return arrayIndexOf(this, val, byteOffset)\\n  }\\n  if (typeof val === 'number') {\\n    if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {\\n      return Uint8Array.prototype.indexOf.call(this, val, byteOffset)\\n    }\\n    return arrayIndexOf(this, [ val ], byteOffset)\\n  }\\n\\n  function arrayIndexOf (arr, val, byteOffset) {\\n    var foundIndex = -1\\n    for (var i = 0; byteOffset + i < arr.length; i++) {\\n      if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {\\n        if (foundIndex === -1) foundIndex = i\\n        if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex\\n      } else {\\n        foundIndex = -1\\n      }\\n    }\\n    return -1\\n  }\\n\\n  throw new TypeError('val must be string, number or Buffer')\\n}\\n\\n// `get` will be removed in Node 0.13+\\nBuffer.prototype.get = function get (offset) {\\n  console.log('.get() is deprecated. Access using array indexes instead.')\\n  return this.readUInt8(offset)\\n}\\n\\n// `set` will be removed in Node 0.13+\\nBuffer.prototype.set = function set (v, offset) {\\n  console.log('.set() is deprecated. Access using array indexes instead.')\\n  return this.writeUInt8(v, offset)\\n}\\n\\nfunction hexWrite (buf, string, offset, length) {\\n  offset = Number(offset) || 0\\n  var remaining = buf.length - offset\\n  if (!length) {\\n    length = remaining\\n  } else {\\n    length = Number(length)\\n    if (length > remaining) {\\n      length = remaining\\n    }\\n  }\\n\\n  // must be an even number of digits\\n  var strLen = string.length\\n  if (strLen % 2 !== 0) throw new Error('Invalid hex string')\\n\\n  if (length > strLen / 2) {\\n    length = strLen / 2\\n  }\\n  for (var i = 0; i < length; i++) {\\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\\n    if (isNaN(parsed)) throw new Error('Invalid hex string')\\n    buf[offset + i] = parsed\\n  }\\n  return i\\n}\\n\\nfunction utf8Write (buf, string, offset, length) {\\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\\n}\\n\\nfunction asciiWrite (buf, string, offset, length) {\\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\\n}\\n\\nfunction binaryWrite (buf, string, offset, length) {\\n  return asciiWrite(buf, string, offset, length)\\n}\\n\\nfunction base64Write (buf, string, offset, length) {\\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\\n}\\n\\nfunction ucs2Write (buf, string, offset, length) {\\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\\n}\\n\\nBuffer.prototype.write = function write (string, offset, length, encoding) {\\n  // Buffer#write(string)\\n  if (offset === undefined) {\\n    encoding = 'utf8'\\n    length = this.length\\n    offset = 0\\n  // Buffer#write(string, encoding)\\n  } else if (length === undefined && typeof offset === 'string') {\\n    encoding = offset\\n    length = this.length\\n    offset = 0\\n  // Buffer#write(string, offset[, length][, encoding])\\n  } else if (isFinite(offset)) {\\n    offset = offset | 0\\n    if (isFinite(length)) {\\n      length = length | 0\\n      if (encoding === undefined) encoding = 'utf8'\\n    } else {\\n      encoding = length\\n      length = undefined\\n    }\\n  // legacy write(string, encoding, offset, length) - remove in v0.13\\n  } else {\\n    var swap = encoding\\n    encoding = offset\\n    offset = length | 0\\n    length = swap\\n  }\\n\\n  var remaining = this.length - offset\\n  if (length === undefined || length > remaining) length = remaining\\n\\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\\n    throw new RangeError('attempt to write outside buffer bounds')\\n  }\\n\\n  if (!encoding) encoding = 'utf8'\\n\\n  var loweredCase = false\\n  for (;;) {\\n    switch (encoding) {\\n      case 'hex':\\n        return hexWrite(this, string, offset, length)\\n\\n      case 'utf8':\\n      case 'utf-8':\\n        return utf8Write(this, string, offset, length)\\n\\n      case 'ascii':\\n        return asciiWrite(this, string, offset, length)\\n\\n      case 'binary':\\n        return binaryWrite(this, string, offset, length)\\n\\n      case 'base64':\\n        // Warning: maxLength not taken into account in base64Write\\n        return base64Write(this, string, offset, length)\\n\\n      case 'ucs2':\\n      case 'ucs-2':\\n      case 'utf16le':\\n      case 'utf-16le':\\n        return ucs2Write(this, string, offset, length)\\n\\n      default:\\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\\n        encoding = ('' + encoding).toLowerCase()\\n        loweredCase = true\\n    }\\n  }\\n}\\n\\nBuffer.prototype.toJSON = function toJSON () {\\n  return {\\n    type: 'Buffer',\\n    data: Array.prototype.slice.call(this._arr || this, 0)\\n  }\\n}\\n\\nfunction base64Slice (buf, start, end) {\\n  if (start === 0 && end === buf.length) {\\n    return base64.fromByteArray(buf)\\n  } else {\\n    return base64.fromByteArray(buf.slice(start, end))\\n  }\\n}\\n\\nfunction utf8Slice (buf, start, end) {\\n  var res = ''\\n  var tmp = ''\\n  end = Math.min(buf.length, end)\\n\\n  for (var i = start; i < end; i++) {\\n    if (buf[i] <= 0x7F) {\\n      res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i])\\n      tmp = ''\\n    } else {\\n      tmp += '%' + buf[i].toString(16)\\n    }\\n  }\\n\\n  return res + decodeUtf8Char(tmp)\\n}\\n\\nfunction asciiSlice (buf, start, end) {\\n  var ret = ''\\n  end = Math.min(buf.length, end)\\n\\n  for (var i = start; i < end; i++) {\\n    ret += String.fromCharCode(buf[i] & 0x7F)\\n  }\\n  return ret\\n}\\n\\nfunction binarySlice (buf, start, end) {\\n  var ret = ''\\n  end = Math.min(buf.length, end)\\n\\n  for (var i = start; i < end; i++) {\\n    ret += String.fromCharCode(buf[i])\\n  }\\n  return ret\\n}\\n\\nfunction hexSlice (buf, start, end) {\\n  var len = buf.length\\n\\n  if (!start || start < 0) start = 0\\n  if (!end || end < 0 || end > len) end = len\\n\\n  var out = ''\\n  for (var i = start; i < end; i++) {\\n    out += toHex(buf[i])\\n  }\\n  return out\\n}\\n\\nfunction utf16leSlice (buf, start, end) {\\n  var bytes = buf.slice(start, end)\\n  var res = ''\\n  for (var i = 0; i < bytes.length; i += 2) {\\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\\n  }\\n  return res\\n}\\n\\nBuffer.prototype.slice = function slice (start, end) {\\n  var len = this.length\\n  start = ~~start\\n  end = end === undefined ? len : ~~end\\n\\n  if (start < 0) {\\n    start += len\\n    if (start < 0) start = 0\\n  } else if (start > len) {\\n    start = len\\n  }\\n\\n  if (end < 0) {\\n    end += len\\n    if (end < 0) end = 0\\n  } else if (end > len) {\\n    end = len\\n  }\\n\\n  if (end < start) end = start\\n\\n  var newBuf\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    newBuf = Buffer._augment(this.subarray(start, end))\\n  } else {\\n    var sliceLen = end - start\\n    newBuf = new Buffer(sliceLen, undefined)\\n    for (var i = 0; i < sliceLen; i++) {\\n      newBuf[i] = this[i + start]\\n    }\\n  }\\n\\n  if (newBuf.length) newBuf.parent = this.parent || this\\n\\n  return newBuf\\n}\\n\\n/*\\n * Need to make sure that buffer isn't trying to write out of bounds.\\n */\\nfunction checkOffset (offset, ext, length) {\\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\\n}\\n\\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\\n  offset = offset | 0\\n  byteLength = byteLength | 0\\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\\n\\n  var val = this[offset]\\n  var mul = 1\\n  var i = 0\\n  while (++i < byteLength && (mul *= 0x100)) {\\n    val += this[offset + i] * mul\\n  }\\n\\n  return val\\n}\\n\\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\\n  offset = offset | 0\\n  byteLength = byteLength | 0\\n  if (!noAssert) {\\n    checkOffset(offset, byteLength, this.length)\\n  }\\n\\n  var val = this[offset + --byteLength]\\n  var mul = 1\\n  while (byteLength > 0 && (mul *= 0x100)) {\\n    val += this[offset + --byteLength] * mul\\n  }\\n\\n  return val\\n}\\n\\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 1, this.length)\\n  return this[offset]\\n}\\n\\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 2, this.length)\\n  return this[offset] | (this[offset + 1] << 8)\\n}\\n\\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 2, this.length)\\n  return (this[offset] << 8) | this[offset + 1]\\n}\\n\\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 4, this.length)\\n\\n  return ((this[offset]) |\\n      (this[offset + 1] << 8) |\\n      (this[offset + 2] << 16)) +\\n      (this[offset + 3] * 0x1000000)\\n}\\n\\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 4, this.length)\\n\\n  return (this[offset] * 0x1000000) +\\n    ((this[offset + 1] << 16) |\\n    (this[offset + 2] << 8) |\\n    this[offset + 3])\\n}\\n\\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\\n  offset = offset | 0\\n  byteLength = byteLength | 0\\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\\n\\n  var val = this[offset]\\n  var mul = 1\\n  var i = 0\\n  while (++i < byteLength && (mul *= 0x100)) {\\n    val += this[offset + i] * mul\\n  }\\n  mul *= 0x80\\n\\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\\n\\n  return val\\n}\\n\\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\\n  offset = offset | 0\\n  byteLength = byteLength | 0\\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\\n\\n  var i = byteLength\\n  var mul = 1\\n  var val = this[offset + --i]\\n  while (i > 0 && (mul *= 0x100)) {\\n    val += this[offset + --i] * mul\\n  }\\n  mul *= 0x80\\n\\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\\n\\n  return val\\n}\\n\\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 1, this.length)\\n  if (!(this[offset] & 0x80)) return (this[offset])\\n  return ((0xff - this[offset] + 1) * -1)\\n}\\n\\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 2, this.length)\\n  var val = this[offset] | (this[offset + 1] << 8)\\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\\n}\\n\\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 2, this.length)\\n  var val = this[offset + 1] | (this[offset] << 8)\\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\\n}\\n\\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 4, this.length)\\n\\n  return (this[offset]) |\\n    (this[offset + 1] << 8) |\\n    (this[offset + 2] << 16) |\\n    (this[offset + 3] << 24)\\n}\\n\\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 4, this.length)\\n\\n  return (this[offset] << 24) |\\n    (this[offset + 1] << 16) |\\n    (this[offset + 2] << 8) |\\n    (this[offset + 3])\\n}\\n\\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 4, this.length)\\n  return ieee754.read(this, offset, true, 23, 4)\\n}\\n\\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 4, this.length)\\n  return ieee754.read(this, offset, false, 23, 4)\\n}\\n\\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 8, this.length)\\n  return ieee754.read(this, offset, true, 52, 8)\\n}\\n\\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\\n  if (!noAssert) checkOffset(offset, 8, this.length)\\n  return ieee754.read(this, offset, false, 52, 8)\\n}\\n\\nfunction checkInt (buf, value, offset, ext, max, min) {\\n  if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')\\n  if (value > max || value < min) throw new RangeError('value is out of bounds')\\n  if (offset + ext > buf.length) throw new RangeError('index out of range')\\n}\\n\\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  byteLength = byteLength | 0\\n  if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\\n\\n  var mul = 1\\n  var i = 0\\n  this[offset] = value & 0xFF\\n  while (++i < byteLength && (mul *= 0x100)) {\\n    this[offset + i] = (value / mul) & 0xFF\\n  }\\n\\n  return offset + byteLength\\n}\\n\\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  byteLength = byteLength | 0\\n  if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\\n\\n  var i = byteLength - 1\\n  var mul = 1\\n  this[offset + i] = value & 0xFF\\n  while (--i >= 0 && (mul *= 0x100)) {\\n    this[offset + i] = (value / mul) & 0xFF\\n  }\\n\\n  return offset + byteLength\\n}\\n\\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\\n  this[offset] = value\\n  return offset + 1\\n}\\n\\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\\n  if (value < 0) value = 0xffff + value + 1\\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {\\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\\n      (littleEndian ? i : 1 - i) * 8\\n  }\\n}\\n\\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    this[offset] = value\\n    this[offset + 1] = (value >>> 8)\\n  } else {\\n    objectWriteUInt16(this, value, offset, true)\\n  }\\n  return offset + 2\\n}\\n\\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    this[offset] = (value >>> 8)\\n    this[offset + 1] = value\\n  } else {\\n    objectWriteUInt16(this, value, offset, false)\\n  }\\n  return offset + 2\\n}\\n\\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\\n  if (value < 0) value = 0xffffffff + value + 1\\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {\\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\\n  }\\n}\\n\\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    this[offset + 3] = (value >>> 24)\\n    this[offset + 2] = (value >>> 16)\\n    this[offset + 1] = (value >>> 8)\\n    this[offset] = value\\n  } else {\\n    objectWriteUInt32(this, value, offset, true)\\n  }\\n  return offset + 4\\n}\\n\\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    this[offset] = (value >>> 24)\\n    this[offset + 1] = (value >>> 16)\\n    this[offset + 2] = (value >>> 8)\\n    this[offset + 3] = value\\n  } else {\\n    objectWriteUInt32(this, value, offset, false)\\n  }\\n  return offset + 4\\n}\\n\\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) {\\n    var limit = Math.pow(2, 8 * byteLength - 1)\\n\\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\\n  }\\n\\n  var i = 0\\n  var mul = 1\\n  var sub = value < 0 ? 1 : 0\\n  this[offset] = value & 0xFF\\n  while (++i < byteLength && (mul *= 0x100)) {\\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\\n  }\\n\\n  return offset + byteLength\\n}\\n\\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) {\\n    var limit = Math.pow(2, 8 * byteLength - 1)\\n\\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\\n  }\\n\\n  var i = byteLength - 1\\n  var mul = 1\\n  var sub = value < 0 ? 1 : 0\\n  this[offset + i] = value & 0xFF\\n  while (--i >= 0 && (mul *= 0x100)) {\\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\\n  }\\n\\n  return offset + byteLength\\n}\\n\\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\\n  if (value < 0) value = 0xff + value + 1\\n  this[offset] = value\\n  return offset + 1\\n}\\n\\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    this[offset] = value\\n    this[offset + 1] = (value >>> 8)\\n  } else {\\n    objectWriteUInt16(this, value, offset, true)\\n  }\\n  return offset + 2\\n}\\n\\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    this[offset] = (value >>> 8)\\n    this[offset + 1] = value\\n  } else {\\n    objectWriteUInt16(this, value, offset, false)\\n  }\\n  return offset + 2\\n}\\n\\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    this[offset] = value\\n    this[offset + 1] = (value >>> 8)\\n    this[offset + 2] = (value >>> 16)\\n    this[offset + 3] = (value >>> 24)\\n  } else {\\n    objectWriteUInt32(this, value, offset, true)\\n  }\\n  return offset + 4\\n}\\n\\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\\n  value = +value\\n  offset = offset | 0\\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\\n  if (value < 0) value = 0xffffffff + value + 1\\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\\n    this[offset] = (value >>> 24)\\n    this[offset + 1] = (value >>> 16)\\n    this[offset + 2] = (value >>> 8)\\n    this[offset + 3] = value\\n  } else {\\n    objectWriteUInt32(this, value, offset, false)\\n  }\\n  return offset + 4\\n}\\n\\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\\n  if (value > max || value < min) throw new RangeError('value is out of bounds')\\n  if (offset + ext > buf.length) throw new RangeError('index out of range')\\n  if (offset < 0) throw new RangeError('index out of range')\\n}\\n\\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\\n  if (!noAssert) {\\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\\n  }\\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\\n  return offset + 4\\n}\\n\\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\\n  return writeFloat(this, value, offset, true, noAssert)\\n}\\n\\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\\n  return writeFloat(this, value, offset, false, noAssert)\\n}\\n\\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\\n  if (!noAssert) {\\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\\n  }\\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\\n  return offset + 8\\n}\\n\\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\\n  return writeDouble(this, value, offset, true, noAssert)\\n}\\n\\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\\n  return writeDouble(this, value, offset, false, noAssert)\\n}\\n\\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\\n  if (!start) start = 0\\n  if (!end && end !== 0) end = this.length\\n  if (targetStart >= target.length) targetStart = target.length\\n  if (!targetStart) targetStart = 0\\n  if (end > 0 && end < start) end = start\\n\\n  // Copy 0 bytes; we're done\\n  if (end === start) return 0\\n  if (target.length === 0 || this.length === 0) return 0\\n\\n  // Fatal error conditions\\n  if (targetStart < 0) {\\n    throw new RangeError('targetStart out of bounds')\\n  }\\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\\n\\n  // Are we oob?\\n  if (end > this.length) end = this.length\\n  if (target.length - targetStart < end - start) {\\n    end = target.length - targetStart + start\\n  }\\n\\n  var len = end - start\\n\\n  if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\\n    for (var i = 0; i < len; i++) {\\n      target[i + targetStart] = this[i + start]\\n    }\\n  } else {\\n    target._set(this.subarray(start, start + len), targetStart)\\n  }\\n\\n  return len\\n}\\n\\n// fill(value, start=0, end=buffer.length)\\nBuffer.prototype.fill = function fill (value, start, end) {\\n  if (!value) value = 0\\n  if (!start) start = 0\\n  if (!end) end = this.length\\n\\n  if (end < start) throw new RangeError('end < start')\\n\\n  // Fill 0 bytes; we're done\\n  if (end === start) return\\n  if (this.length === 0) return\\n\\n  if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')\\n  if (end < 0 || end > this.length) throw new RangeError('end out of bounds')\\n\\n  var i\\n  if (typeof value === 'number') {\\n    for (i = start; i < end; i++) {\\n      this[i] = value\\n    }\\n  } else {\\n    var bytes = utf8ToBytes(value.toString())\\n    var len = bytes.length\\n    for (i = start; i < end; i++) {\\n      this[i] = bytes[i % len]\\n    }\\n  }\\n\\n  return this\\n}\\n\\n/**\\n * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.\\n * Added in Node 0.12. Only available in browsers that support ArrayBuffer.\\n */\\nBuffer.prototype.toArrayBuffer = function toArrayBuffer () {\\n  if (typeof Uint8Array !== 'undefined') {\\n    if (Buffer.TYPED_ARRAY_SUPPORT) {\\n      return (new Buffer(this)).buffer\\n    } else {\\n      var buf = new Uint8Array(this.length)\\n      for (var i = 0, len = buf.length; i < len; i += 1) {\\n        buf[i] = this[i]\\n      }\\n      return buf.buffer\\n    }\\n  } else {\\n    throw new TypeError('Buffer.toArrayBuffer not supported in this browser')\\n  }\\n}\\n\\n// HELPER FUNCTIONS\\n// ================\\n\\nvar BP = Buffer.prototype\\n\\n/**\\n * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods\\n */\\nBuffer._augment = function _augment (arr) {\\n  arr.constructor = Buffer\\n  arr._isBuffer = true\\n\\n  // save reference to original Uint8Array set method before overwriting\\n  arr._set = arr.set\\n\\n  // deprecated, will be removed in node 0.13+\\n  arr.get = BP.get\\n  arr.set = BP.set\\n\\n  arr.write = BP.write\\n  arr.toString = BP.toString\\n  arr.toLocaleString = BP.toString\\n  arr.toJSON = BP.toJSON\\n  arr.equals = BP.equals\\n  arr.compare = BP.compare\\n  arr.indexOf = BP.indexOf\\n  arr.copy = BP.copy\\n  arr.slice = BP.slice\\n  arr.readUIntLE = BP.readUIntLE\\n  arr.readUIntBE = BP.readUIntBE\\n  arr.readUInt8 = BP.readUInt8\\n  arr.readUInt16LE = BP.readUInt16LE\\n  arr.readUInt16BE = BP.readUInt16BE\\n  arr.readUInt32LE = BP.readUInt32LE\\n  arr.readUInt32BE = BP.readUInt32BE\\n  arr.readIntLE = BP.readIntLE\\n  arr.readIntBE = BP.readIntBE\\n  arr.readInt8 = BP.readInt8\\n  arr.readInt16LE = BP.readInt16LE\\n  arr.readInt16BE = BP.readInt16BE\\n  arr.readInt32LE = BP.readInt32LE\\n  arr.readInt32BE = BP.readInt32BE\\n  arr.readFloatLE = BP.readFloatLE\\n  arr.readFloatBE = BP.readFloatBE\\n  arr.readDoubleLE = BP.readDoubleLE\\n  arr.readDoubleBE = BP.readDoubleBE\\n  arr.writeUInt8 = BP.writeUInt8\\n  arr.writeUIntLE = BP.writeUIntLE\\n  arr.writeUIntBE = BP.writeUIntBE\\n  arr.writeUInt16LE = BP.writeUInt16LE\\n  arr.writeUInt16BE = BP.writeUInt16BE\\n  arr.writeUInt32LE = BP.writeUInt32LE\\n  arr.writeUInt32BE = BP.writeUInt32BE\\n  arr.writeIntLE = BP.writeIntLE\\n  arr.writeIntBE = BP.writeIntBE\\n  arr.writeInt8 = BP.writeInt8\\n  arr.writeInt16LE = BP.writeInt16LE\\n  arr.writeInt16BE = BP.writeInt16BE\\n  arr.writeInt32LE = BP.writeInt32LE\\n  arr.writeInt32BE = BP.writeInt32BE\\n  arr.writeFloatLE = BP.writeFloatLE\\n  arr.writeFloatBE = BP.writeFloatBE\\n  arr.writeDoubleLE = BP.writeDoubleLE\\n  arr.writeDoubleBE = BP.writeDoubleBE\\n  arr.fill = BP.fill\\n  arr.inspect = BP.inspect\\n  arr.toArrayBuffer = BP.toArrayBuffer\\n\\n  return arr\\n}\\n\\nvar INVALID_BASE64_RE = /[^+\\\\/0-9A-z\\\\-]/g\\n\\nfunction base64clean (str) {\\n  // Node strips out invalid characters like \\\\n and \\\\t from the string, base64-js does not\\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\\n  // Node converts strings with length < 2 to ''\\n  if (str.length < 2) return ''\\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\\n  while (str.length % 4 !== 0) {\\n    str = str + '='\\n  }\\n  return str\\n}\\n\\nfunction stringtrim (str) {\\n  if (str.trim) return str.trim()\\n  return str.replace(/^\\\\s+|\\\\s+$/g, '')\\n}\\n\\nfunction toHex (n) {\\n  if (n < 16) return '0' + n.toString(16)\\n  return n.toString(16)\\n}\\n\\nfunction utf8ToBytes (string, units) {\\n  units = units || Infinity\\n  var codePoint\\n  var length = string.length\\n  var leadSurrogate = null\\n  var bytes = []\\n  var i = 0\\n\\n  for (; i < length; i++) {\\n    codePoint = string.charCodeAt(i)\\n\\n    // is surrogate component\\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\\n      // last char was a lead\\n      if (leadSurrogate) {\\n        // 2 leads in a row\\n        if (codePoint < 0xDC00) {\\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\\n          leadSurrogate = codePoint\\n          continue\\n        } else {\\n          // valid surrogate pair\\n          codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000\\n          leadSurrogate = null\\n        }\\n      } else {\\n        // no lead yet\\n\\n        if (codePoint > 0xDBFF) {\\n          // unexpected trail\\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\\n          continue\\n        } else if (i + 1 === length) {\\n          // unpaired lead\\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\\n          continue\\n        } else {\\n          // valid lead\\n          leadSurrogate = codePoint\\n          continue\\n        }\\n      }\\n    } else if (leadSurrogate) {\\n      // valid bmp char, but last char was a lead\\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\\n      leadSurrogate = null\\n    }\\n\\n    // encode utf8\\n    if (codePoint < 0x80) {\\n      if ((units -= 1) < 0) break\\n      bytes.push(codePoint)\\n    } else if (codePoint < 0x800) {\\n      if ((units -= 2) < 0) break\\n      bytes.push(\\n        codePoint >> 0x6 | 0xC0,\\n        codePoint & 0x3F | 0x80\\n      )\\n    } else if (codePoint < 0x10000) {\\n      if ((units -= 3) < 0) break\\n      bytes.push(\\n        codePoint >> 0xC | 0xE0,\\n        codePoint >> 0x6 & 0x3F | 0x80,\\n        codePoint & 0x3F | 0x80\\n      )\\n    } else if (codePoint < 0x200000) {\\n      if ((units -= 4) < 0) break\\n      bytes.push(\\n        codePoint >> 0x12 | 0xF0,\\n        codePoint >> 0xC & 0x3F | 0x80,\\n        codePoint >> 0x6 & 0x3F | 0x80,\\n        codePoint & 0x3F | 0x80\\n      )\\n    } else {\\n      throw new Error('Invalid code point')\\n    }\\n  }\\n\\n  return bytes\\n}\\n\\nfunction asciiToBytes (str) {\\n  var byteArray = []\\n  for (var i = 0; i < str.length; i++) {\\n    // Node's code seems to be doing this and not & 0x7F..\\n    byteArray.push(str.charCodeAt(i) & 0xFF)\\n  }\\n  return byteArray\\n}\\n\\nfunction utf16leToBytes (str, units) {\\n  var c, hi, lo\\n  var byteArray = []\\n  for (var i = 0; i < str.length; i++) {\\n    if ((units -= 2) < 0) break\\n\\n    c = str.charCodeAt(i)\\n    hi = c >> 8\\n    lo = c % 256\\n    byteArray.push(lo)\\n    byteArray.push(hi)\\n  }\\n\\n  return byteArray\\n}\\n\\nfunction base64ToBytes (str) {\\n  return base64.toByteArray(base64clean(str))\\n}\\n\\nfunction blitBuffer (src, dst, offset, length) {\\n  for (var i = 0; i < length; i++) {\\n    if ((i + offset >= dst.length) || (i >= src.length)) break\\n    dst[i + offset] = src[i]\\n  }\\n  return i\\n}\\n\\nfunction decodeUtf8Char (str) {\\n  try {\\n    return decodeURIComponent(str)\\n  } catch (err) {\\n    return String.fromCharCode(0xFFFD) // UTF 8 invalid char\\n  }\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/buffer/index.js */ 158).Buffer))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** (webpack)/~/node-libs-browser/~/buffer/index.js\\n ** module id = 158\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///(webpack)/~/node-libs-browser/~/buffer/index.js?\");\n\n/***/ },\n/* 159 */\n/*!*********************************************************************!*\\\n  !*** (webpack)/~/node-libs-browser/~/buffer/~/base64-js/lib/b64.js ***!\n  \\*********************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\\n\\n;(function (exports) {\\n\\t'use strict';\\n\\n  var Arr = (typeof Uint8Array !== 'undefined')\\n    ? Uint8Array\\n    : Array\\n\\n\\tvar PLUS   = '+'.charCodeAt(0)\\n\\tvar SLASH  = '/'.charCodeAt(0)\\n\\tvar NUMBER = '0'.charCodeAt(0)\\n\\tvar LOWER  = 'a'.charCodeAt(0)\\n\\tvar UPPER  = 'A'.charCodeAt(0)\\n\\tvar PLUS_URL_SAFE = '-'.charCodeAt(0)\\n\\tvar SLASH_URL_SAFE = '_'.charCodeAt(0)\\n\\n\\tfunction decode (elt) {\\n\\t\\tvar code = elt.charCodeAt(0)\\n\\t\\tif (code === PLUS ||\\n\\t\\t    code === PLUS_URL_SAFE)\\n\\t\\t\\treturn 62 // '+'\\n\\t\\tif (code === SLASH ||\\n\\t\\t    code === SLASH_URL_SAFE)\\n\\t\\t\\treturn 63 // '/'\\n\\t\\tif (code < NUMBER)\\n\\t\\t\\treturn -1 //no match\\n\\t\\tif (code < NUMBER + 10)\\n\\t\\t\\treturn code - NUMBER + 26 + 26\\n\\t\\tif (code < UPPER + 26)\\n\\t\\t\\treturn code - UPPER\\n\\t\\tif (code < LOWER + 26)\\n\\t\\t\\treturn code - LOWER + 26\\n\\t}\\n\\n\\tfunction b64ToByteArray (b64) {\\n\\t\\tvar i, j, l, tmp, placeHolders, arr\\n\\n\\t\\tif (b64.length % 4 > 0) {\\n\\t\\t\\tthrow new Error('Invalid string. Length must be a multiple of 4')\\n\\t\\t}\\n\\n\\t\\t// the number of equal signs (place holders)\\n\\t\\t// if there are two placeholders, than the two characters before it\\n\\t\\t// represent one byte\\n\\t\\t// if there is only one, then the three characters before it represent 2 bytes\\n\\t\\t// this is just a cheap hack to not do indexOf twice\\n\\t\\tvar len = b64.length\\n\\t\\tplaceHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0\\n\\n\\t\\t// base64 is 4/3 + up to two characters of the original data\\n\\t\\tarr = new Arr(b64.length * 3 / 4 - placeHolders)\\n\\n\\t\\t// if there are placeholders, only get up to the last complete 4 chars\\n\\t\\tl = placeHolders > 0 ? b64.length - 4 : b64.length\\n\\n\\t\\tvar L = 0\\n\\n\\t\\tfunction push (v) {\\n\\t\\t\\tarr[L++] = v\\n\\t\\t}\\n\\n\\t\\tfor (i = 0, j = 0; i < l; i += 4, j += 3) {\\n\\t\\t\\ttmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))\\n\\t\\t\\tpush((tmp & 0xFF0000) >> 16)\\n\\t\\t\\tpush((tmp & 0xFF00) >> 8)\\n\\t\\t\\tpush(tmp & 0xFF)\\n\\t\\t}\\n\\n\\t\\tif (placeHolders === 2) {\\n\\t\\t\\ttmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)\\n\\t\\t\\tpush(tmp & 0xFF)\\n\\t\\t} else if (placeHolders === 1) {\\n\\t\\t\\ttmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)\\n\\t\\t\\tpush((tmp >> 8) & 0xFF)\\n\\t\\t\\tpush(tmp & 0xFF)\\n\\t\\t}\\n\\n\\t\\treturn arr\\n\\t}\\n\\n\\tfunction uint8ToBase64 (uint8) {\\n\\t\\tvar i,\\n\\t\\t\\textraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes\\n\\t\\t\\toutput = \\\"\\\",\\n\\t\\t\\ttemp, length\\n\\n\\t\\tfunction encode (num) {\\n\\t\\t\\treturn lookup.charAt(num)\\n\\t\\t}\\n\\n\\t\\tfunction tripletToBase64 (num) {\\n\\t\\t\\treturn encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)\\n\\t\\t}\\n\\n\\t\\t// go through the array every three bytes, we'll deal with trailing stuff later\\n\\t\\tfor (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {\\n\\t\\t\\ttemp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\\n\\t\\t\\toutput += tripletToBase64(temp)\\n\\t\\t}\\n\\n\\t\\t// pad the end with zeros, but make sure to not forget the extra bytes\\n\\t\\tswitch (extraBytes) {\\n\\t\\t\\tcase 1:\\n\\t\\t\\t\\ttemp = uint8[uint8.length - 1]\\n\\t\\t\\t\\toutput += encode(temp >> 2)\\n\\t\\t\\t\\toutput += encode((temp << 4) & 0x3F)\\n\\t\\t\\t\\toutput += '=='\\n\\t\\t\\t\\tbreak\\n\\t\\t\\tcase 2:\\n\\t\\t\\t\\ttemp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])\\n\\t\\t\\t\\toutput += encode(temp >> 10)\\n\\t\\t\\t\\toutput += encode((temp >> 4) & 0x3F)\\n\\t\\t\\t\\toutput += encode((temp << 2) & 0x3F)\\n\\t\\t\\t\\toutput += '='\\n\\t\\t\\t\\tbreak\\n\\t\\t}\\n\\n\\t\\treturn output\\n\\t}\\n\\n\\texports.toByteArray = b64ToByteArray\\n\\texports.fromByteArray = uint8ToBase64\\n}( false ? (this.base64js = {}) : exports))\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** (webpack)/~/node-libs-browser/~/buffer/~/base64-js/lib/b64.js\\n ** module id = 159\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///(webpack)/~/node-libs-browser/~/buffer/~/base64-js/lib/b64.js?\");\n\n/***/ },\n/* 160 */\n/*!*****************************************************************!*\\\n  !*** (webpack)/~/node-libs-browser/~/buffer/~/ieee754/index.js ***!\n  \\*****************************************************************/\n/***/ function(module, exports) {\n\n\teval(\"exports.read = function (buffer, offset, isLE, mLen, nBytes) {\\n  var e, m\\n  var eLen = nBytes * 8 - mLen - 1\\n  var eMax = (1 << eLen) - 1\\n  var eBias = eMax >> 1\\n  var nBits = -7\\n  var i = isLE ? (nBytes - 1) : 0\\n  var d = isLE ? -1 : 1\\n  var s = buffer[offset + i]\\n\\n  i += d\\n\\n  e = s & ((1 << (-nBits)) - 1)\\n  s >>= (-nBits)\\n  nBits += eLen\\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\\n\\n  m = e & ((1 << (-nBits)) - 1)\\n  e >>= (-nBits)\\n  nBits += mLen\\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\\n\\n  if (e === 0) {\\n    e = 1 - eBias\\n  } else if (e === eMax) {\\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\\n  } else {\\n    m = m + Math.pow(2, mLen)\\n    e = e - eBias\\n  }\\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\\n}\\n\\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\\n  var e, m, c\\n  var eLen = nBytes * 8 - mLen - 1\\n  var eMax = (1 << eLen) - 1\\n  var eBias = eMax >> 1\\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\\n  var i = isLE ? 0 : (nBytes - 1)\\n  var d = isLE ? 1 : -1\\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\\n\\n  value = Math.abs(value)\\n\\n  if (isNaN(value) || value === Infinity) {\\n    m = isNaN(value) ? 1 : 0\\n    e = eMax\\n  } else {\\n    e = Math.floor(Math.log(value) / Math.LN2)\\n    if (value * (c = Math.pow(2, -e)) < 1) {\\n      e--\\n      c *= 2\\n    }\\n    if (e + eBias >= 1) {\\n      value += rt / c\\n    } else {\\n      value += rt * Math.pow(2, 1 - eBias)\\n    }\\n    if (value * c >= 2) {\\n      e++\\n      c /= 2\\n    }\\n\\n    if (e + eBias >= eMax) {\\n      m = 0\\n      e = eMax\\n    } else if (e + eBias >= 1) {\\n      m = (value * c - 1) * Math.pow(2, mLen)\\n      e = e + eBias\\n    } else {\\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\\n      e = 0\\n    }\\n  }\\n\\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\\n\\n  e = (e << mLen) | m\\n  eLen += mLen\\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\\n\\n  buffer[offset + i - d] |= s * 128\\n}\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** (webpack)/~/node-libs-browser/~/buffer/~/ieee754/index.js\\n ** module id = 160\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///(webpack)/~/node-libs-browser/~/buffer/~/ieee754/index.js?\");\n\n/***/ },\n/* 161 */\n/*!******************************************************************!*\\\n  !*** (webpack)/~/node-libs-browser/~/buffer/~/is-array/index.js ***!\n  \\******************************************************************/\n/***/ function(module, exports) {\n\n\teval(\"\\n/**\\n * isArray\\n */\\n\\nvar isArray = Array.isArray;\\n\\n/**\\n * toString\\n */\\n\\nvar str = Object.prototype.toString;\\n\\n/**\\n * Whether or not the given `val`\\n * is an array.\\n *\\n * example:\\n *\\n *        isArray([]);\\n *        // > true\\n *        isArray(arguments);\\n *        // > false\\n *        isArray('');\\n *        // > false\\n *\\n * @param {mixed} val\\n * @return {bool}\\n */\\n\\nmodule.exports = isArray || function (val) {\\n  return !! val && '[object Array]' == str.call(val);\\n};\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** (webpack)/~/node-libs-browser/~/buffer/~/is-array/index.js\\n ** module id = 161\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///(webpack)/~/node-libs-browser/~/buffer/~/is-array/index.js?\");\n\n/***/ },\n/* 162 */\n/*!**************************************!*\\\n  !*** ./~/react-router/~/qs/index.js ***!\n  \\**************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"module.exports = __webpack_require__(/*! ./lib */ 163);\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/qs/index.js\\n ** module id = 162\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/qs/index.js?\");\n\n/***/ },\n/* 163 */\n/*!******************************************!*\\\n  !*** ./~/react-router/~/qs/lib/index.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// Load modules\\n\\nvar Stringify = __webpack_require__(/*! ./stringify */ 164);\\nvar Parse = __webpack_require__(/*! ./parse */ 165);\\n\\n\\n// Declare internals\\n\\nvar internals = {};\\n\\n\\nmodule.exports = {\\n    stringify: Stringify,\\n    parse: Parse\\n};\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/qs/lib/index.js\\n ** module id = 163\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/qs/lib/index.js?\");\n\n/***/ },\n/* 164 */\n/*!**********************************************!*\\\n  !*** ./~/react-router/~/qs/lib/stringify.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// Load modules\\n\\nvar Utils = __webpack_require__(/*! ./utils */ 157);\\n\\n\\n// Declare internals\\n\\nvar internals = {\\n    delimiter: '&'\\n};\\n\\n\\ninternals.stringify = function (obj, prefix) {\\n\\n    if (Utils.isBuffer(obj)) {\\n        obj = obj.toString();\\n    }\\n    else if (obj instanceof Date) {\\n        obj = obj.toISOString();\\n    }\\n    else if (obj === null) {\\n        obj = '';\\n    }\\n\\n    if (typeof obj === 'string' ||\\n        typeof obj === 'number' ||\\n        typeof obj === 'boolean') {\\n\\n        return [encodeURIComponent(prefix) + '=' + encodeURIComponent(obj)];\\n    }\\n\\n    var values = [];\\n\\n    for (var key in obj) {\\n        if (obj.hasOwnProperty(key)) {\\n            values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']'));\\n        }\\n    }\\n\\n    return values;\\n};\\n\\n\\nmodule.exports = function (obj, options) {\\n\\n    options = options || {};\\n    var delimiter = typeof options.delimiter === 'undefined' ? internals.delimiter : options.delimiter;\\n\\n    var keys = [];\\n\\n    for (var key in obj) {\\n        if (obj.hasOwnProperty(key)) {\\n            keys = keys.concat(internals.stringify(obj[key], key));\\n        }\\n    }\\n\\n    return keys.join(delimiter);\\n};\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/qs/lib/stringify.js\\n ** module id = 164\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/qs/lib/stringify.js?\");\n\n/***/ },\n/* 165 */\n/*!******************************************!*\\\n  !*** ./~/react-router/~/qs/lib/parse.js ***!\n  \\******************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"// Load modules\\n\\nvar Utils = __webpack_require__(/*! ./utils */ 157);\\n\\n\\n// Declare internals\\n\\nvar internals = {\\n    delimiter: '&',\\n    depth: 5,\\n    arrayLimit: 20,\\n    parameterLimit: 1000\\n};\\n\\n\\ninternals.parseValues = function (str, options) {\\n\\n    var obj = {};\\n    var parts = str.split(options.delimiter, options.parameterLimit === Infinity ? undefined : options.parameterLimit);\\n\\n    for (var i = 0, il = parts.length; i < il; ++i) {\\n        var part = parts[i];\\n        var pos = part.indexOf(']=') === -1 ? part.indexOf('=') : part.indexOf(']=') + 1;\\n\\n        if (pos === -1) {\\n            obj[Utils.decode(part)] = '';\\n        }\\n        else {\\n            var key = Utils.decode(part.slice(0, pos));\\n            var val = Utils.decode(part.slice(pos + 1));\\n\\n            if (!obj[key]) {\\n                obj[key] = val;\\n            }\\n            else {\\n                obj[key] = [].concat(obj[key]).concat(val);\\n            }\\n        }\\n    }\\n\\n    return obj;\\n};\\n\\n\\ninternals.parseObject = function (chain, val, options) {\\n\\n    if (!chain.length) {\\n        return val;\\n    }\\n\\n    var root = chain.shift();\\n\\n    var obj = {};\\n    if (root === '[]') {\\n        obj = [];\\n        obj = obj.concat(internals.parseObject(chain, val, options));\\n    }\\n    else {\\n        var cleanRoot = root[0] === '[' && root[root.length - 1] === ']' ? root.slice(1, root.length - 1) : root;\\n        var index = parseInt(cleanRoot, 10);\\n        if (!isNaN(index) &&\\n            root !== cleanRoot &&\\n            index <= options.arrayLimit) {\\n\\n            obj = [];\\n            obj[index] = internals.parseObject(chain, val, options);\\n        }\\n        else {\\n            obj[cleanRoot] = internals.parseObject(chain, val, options);\\n        }\\n    }\\n\\n    return obj;\\n};\\n\\n\\ninternals.parseKeys = function (key, val, options) {\\n\\n    if (!key) {\\n        return;\\n    }\\n\\n    // The regex chunks\\n\\n    var parent = /^([^\\\\[\\\\]]*)/;\\n    var child = /(\\\\[[^\\\\[\\\\]]*\\\\])/g;\\n\\n    // Get the parent\\n\\n    var segment = parent.exec(key);\\n\\n    // Don't allow them to overwrite object prototype properties\\n\\n    if (Object.prototype.hasOwnProperty(segment[1])) {\\n        return;\\n    }\\n\\n    // Stash the parent if it exists\\n\\n    var keys = [];\\n    if (segment[1]) {\\n        keys.push(segment[1]);\\n    }\\n\\n    // Loop through children appending to the array until we hit depth\\n\\n    var i = 0;\\n    while ((segment = child.exec(key)) !== null && i < options.depth) {\\n\\n        ++i;\\n        if (!Object.prototype.hasOwnProperty(segment[1].replace(/\\\\[|\\\\]/g, ''))) {\\n            keys.push(segment[1]);\\n        }\\n    }\\n\\n    // If there's a remainder, just add whatever is left\\n\\n    if (segment) {\\n        keys.push('[' + key.slice(segment.index) + ']');\\n    }\\n\\n    return internals.parseObject(keys, val, options);\\n};\\n\\n\\nmodule.exports = function (str, options) {\\n\\n    if (str === '' ||\\n        str === null ||\\n        typeof str === 'undefined') {\\n\\n        return {};\\n    }\\n\\n    options = options || {};\\n    options.delimiter = typeof options.delimiter === 'string' || Utils.isRegExp(options.delimiter) ? options.delimiter : internals.delimiter;\\n    options.depth = typeof options.depth === 'number' ? options.depth : internals.depth;\\n    options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : internals.arrayLimit;\\n    options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : internals.parameterLimit;\\n\\n    var tempObj = typeof str === 'string' ? internals.parseValues(str, options) : str;\\n    var obj = {};\\n\\n    // Iterate over the keys and setup the new object\\n\\n    var keys = Object.keys(tempObj);\\n    for (var i = 0, il = keys.length; i < il; ++i) {\\n        var key = keys[i];\\n        var newObj = internals.parseKeys(key, tempObj[key], options);\\n        obj = Utils.merge(obj, newObj);\\n    }\\n\\n    return Utils.compact(obj);\\n};\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/qs/lib/parse.js\\n ** module id = 165\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/qs/lib/parse.js?\");\n\n/***/ },\n/* 166 */\n/*!***********************************************************!*\\\n  !*** ./~/react-router/modules/components/DefaultRoute.js ***!\n  \\***********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar FakeNode = __webpack_require__(/*! ../mixins/FakeNode */ 167);\\nvar PropTypes = __webpack_require__(/*! ../utils/PropTypes */ 168);\\n\\n/**\\n * A <DefaultRoute> component is a special kind of <Route> that\\n * renders when its parent matches but none of its siblings do.\\n * Only one such route may be used at any given level in the\\n * route hierarchy.\\n */\\nvar DefaultRoute = React.createClass({\\n\\n  displayName: 'DefaultRoute',\\n\\n  mixins: [ FakeNode ],\\n\\n  propTypes: {\\n    name: React.PropTypes.string,\\n    path: PropTypes.falsy,\\n    handler: React.PropTypes.func.isRequired\\n  }\\n\\n});\\n\\nmodule.exports = DefaultRoute;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/components/DefaultRoute.js\\n ** module id = 166\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/components/DefaultRoute.js?\");\n\n/***/ },\n/* 167 */\n/*!***************************************************!*\\\n  !*** ./~/react-router/modules/mixins/FakeNode.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var invariant = __webpack_require__(/*! react/lib/invariant */ 6);\\n\\nvar FakeNode = {\\n\\n  render: function () {\\n    invariant(\\n      false,\\n      '%s elements should not be rendered',\\n      this.constructor.displayName\\n    );\\n  }\\n\\n};\\n\\nmodule.exports = FakeNode;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/mixins/FakeNode.js\\n ** module id = 167\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/mixins/FakeNode.js?\");\n\n/***/ },\n/* 168 */\n/*!***************************************************!*\\\n  !*** ./~/react-router/modules/utils/PropTypes.js ***!\n  \\***************************************************/\n/***/ function(module, exports) {\n\n\teval(\"var PropTypes = {\\n\\n  /**\\n   * Requires that the value of a prop be falsy.\\n   */\\n  falsy: function (props, propName, componentName) {\\n    if (props[propName])\\n      return new Error('<' + componentName + '> may not have a \\\"' + propName + '\\\" prop');\\n  }\\n\\n};\\n\\nmodule.exports = PropTypes;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/PropTypes.js\\n ** module id = 168\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/PropTypes.js?\");\n\n/***/ },\n/* 169 */\n/*!***************************************************!*\\\n  !*** ./~/react-router/modules/components/Link.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar classSet = __webpack_require__(/*! react/lib/cx */ 170);\\nvar assign = __webpack_require__(/*! react/lib/Object.assign */ 21);\\nvar Navigation = __webpack_require__(/*! ../mixins/Navigation */ 171);\\nvar State = __webpack_require__(/*! ../mixins/State */ 172);\\n\\nfunction isLeftClickEvent(event) {\\n  return event.button === 0;\\n}\\n\\nfunction isModifiedEvent(event) {\\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\\n}\\n\\n/**\\n * <Link> components are used to create an <a> element that links to a route.\\n * When that route is active, the link gets an \\\"active\\\" class name (or the\\n * value of its `activeClassName` prop).\\n *\\n * For example, assuming you have the following route:\\n *\\n *   <Route name=\\\"showPost\\\" path=\\\"/posts/:postID\\\" handler={Post}/>\\n *\\n * You could use the following component to link to that route:\\n *\\n *   <Link to=\\\"showPost\\\" params={{ postID: \\\"123\\\" }} />\\n *\\n * In addition to params, links may pass along query string parameters\\n * using the `query` prop.\\n *\\n *   <Link to=\\\"showPost\\\" params={{ postID: \\\"123\\\" }} query={{ show:true }}/>\\n */\\nvar Link = React.createClass({\\n\\n  displayName: 'Link',\\n\\n  mixins: [ Navigation, State ],\\n\\n  propTypes: {\\n    activeClassName: React.PropTypes.string.isRequired,\\n    to: React.PropTypes.string.isRequired,\\n    params: React.PropTypes.object,\\n    query: React.PropTypes.object,\\n    onClick: React.PropTypes.func\\n  },\\n\\n  getDefaultProps: function () {\\n    return {\\n      activeClassName: 'active'\\n    };\\n  },\\n\\n  handleClick: function (event) {\\n    var allowTransition = true;\\n    var clickResult;\\n\\n    if (this.props.onClick)\\n      clickResult = this.props.onClick(event);\\n\\n    if (isModifiedEvent(event) || !isLeftClickEvent(event))\\n      return;\\n\\n    if (clickResult === false || event.defaultPrevented === true)\\n      allowTransition = false;\\n\\n    event.preventDefault();\\n\\n    if (allowTransition)\\n      this.transitionTo(this.props.to, this.props.params, this.props.query);\\n  },\\n\\n  /**\\n   * Returns the value of the \\\"href\\\" attribute to use on the DOM element.\\n   */\\n  getHref: function () {\\n    return this.makeHref(this.props.to, this.props.params, this.props.query);\\n  },\\n\\n  /**\\n   * Returns the value of the \\\"class\\\" attribute to use on the DOM element, which contains\\n   * the value of the activeClassName property when this <Link> is active.\\n   */\\n  getClassName: function () {\\n    var classNames = {};\\n\\n    if (this.props.className)\\n      classNames[this.props.className] = true;\\n\\n    if (this.isActive(this.props.to, this.props.params, this.props.query))\\n      classNames[this.props.activeClassName] = true;\\n\\n    return classSet(classNames);\\n  },\\n\\n  render: function () {\\n    var props = assign({}, this.props, {\\n      href: this.getHref(),\\n      className: this.getClassName(),\\n      onClick: this.handleClick\\n    });\\n\\n    return React.DOM.a(props, this.props.children);\\n  }\\n\\n});\\n\\nmodule.exports = Link;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/components/Link.js\\n ** module id = 169\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/components/Link.js?\");\n\n/***/ },\n/* 170 */\n/*!***************************!*\\\n  !*** ./~/react/lib/cx.js ***!\n  \\***************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Copyright 2013-2014, Facebook, Inc.\\n * All rights reserved.\\n *\\n * This source code is licensed under the BSD-style license found in the\\n * LICENSE file in the root directory of this source tree. An additional grant\\n * of patent rights can be found in the PATENTS file in the same directory.\\n *\\n * @providesModule cx\\n */\\n\\n/**\\n * This function is used to mark string literals representing CSS class names\\n * so that they can be transformed statically. This allows for modularization\\n * and minification of CSS class names.\\n *\\n * In static_upstream, this function is actually implemented, but it should\\n * eventually be replaced with something more descriptive, and the transform\\n * that is used in the main stack should be ported for use elsewhere.\\n *\\n * @param string|object className to modularize, or an object of key/values.\\n *                      In the object case, the values are conditions that\\n *                      determine if the className keys should be included.\\n * @param [string ...]  Variable list of classNames in the string case.\\n * @return string       Renderable space-separated CSS className.\\n */\\nfunction cx(classNames) {\\n  if (typeof classNames == 'object') {\\n    return Object.keys(classNames).filter(function(className) {\\n      return classNames[className];\\n    }).join(' ');\\n  } else {\\n    return Array.prototype.join.call(arguments, ' ');\\n  }\\n}\\n\\nmodule.exports = cx;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react/lib/cx.js\\n ** module id = 170\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react/lib/cx.js?\");\n\n/***/ },\n/* 171 */\n/*!*****************************************************!*\\\n  !*** ./~/react-router/modules/mixins/Navigation.js ***!\n  \\*****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\n\\n/**\\n * A mixin for components that modify the URL.\\n *\\n * Example:\\n *\\n *   var MyLink = React.createClass({\\n *     mixins: [ Router.Navigation ],\\n *     handleClick: function (event) {\\n *       event.preventDefault();\\n *       this.transitionTo('aRoute', { the: 'params' }, { the: 'query' });\\n *     },\\n *     render: function () {\\n *       return (\\n *         <a onClick={this.handleClick}>Click me!</a>\\n *       );\\n *     }\\n *   });\\n */\\nvar Navigation = {\\n\\n  contextTypes: {\\n    makePath: React.PropTypes.func.isRequired,\\n    makeHref: React.PropTypes.func.isRequired,\\n    transitionTo: React.PropTypes.func.isRequired,\\n    replaceWith: React.PropTypes.func.isRequired,\\n    goBack: React.PropTypes.func.isRequired\\n  },\\n\\n  /**\\n   * Returns an absolute URL path created from the given route\\n   * name, URL parameters, and query values.\\n   */\\n  makePath: function (to, params, query) {\\n    return this.context.makePath(to, params, query);\\n  },\\n\\n  /**\\n   * Returns a string that may safely be used as the href of a\\n   * link to the route with the given name.\\n   */\\n  makeHref: function (to, params, query) {\\n    return this.context.makeHref(to, params, query);\\n  },\\n\\n  /**\\n   * Transitions to the URL specified in the arguments by pushing\\n   * a new URL onto the history stack.\\n   */\\n  transitionTo: function (to, params, query) {\\n    this.context.transitionTo(to, params, query);\\n  },\\n\\n  /**\\n   * Transitions to the URL specified in the arguments by replacing\\n   * the current URL in the history stack.\\n   */\\n  replaceWith: function (to, params, query) {\\n    this.context.replaceWith(to, params, query);\\n  },\\n\\n  /**\\n   * Transitions to the previous URL.\\n   */\\n  goBack: function () {\\n    this.context.goBack();\\n  }\\n\\n};\\n\\nmodule.exports = Navigation;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/mixins/Navigation.js\\n ** module id = 171\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/mixins/Navigation.js?\");\n\n/***/ },\n/* 172 */\n/*!************************************************!*\\\n  !*** ./~/react-router/modules/mixins/State.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\n\\n/**\\n * A mixin for components that need to know the path, routes, URL\\n * params and query that are currently active.\\n *\\n * Example:\\n *\\n *   var AboutLink = React.createClass({\\n *     mixins: [ Router.State ],\\n *     render: function () {\\n *       var className = this.props.className;\\n *   \\n *       if (this.isActive('about'))\\n *         className += ' is-active';\\n *   \\n *       return React.DOM.a({ className: className }, this.props.children);\\n *     }\\n *   });\\n */\\nvar State = {\\n\\n  contextTypes: {\\n    getCurrentPath: React.PropTypes.func.isRequired,\\n    getCurrentRoutes: React.PropTypes.func.isRequired,\\n    getCurrentPathname: React.PropTypes.func.isRequired,\\n    getCurrentParams: React.PropTypes.func.isRequired,\\n    getCurrentQuery: React.PropTypes.func.isRequired,\\n    isActive: React.PropTypes.func.isRequired\\n  },\\n\\n  /**\\n   * Returns the current URL path.\\n   */\\n  getPath: function () {\\n    return this.context.getCurrentPath();\\n  },\\n\\n  /**\\n   * Returns an array of the routes that are currently active.\\n   */\\n  getRoutes: function () {\\n    return this.context.getCurrentRoutes();\\n  },\\n\\n  /**\\n   * Returns the current URL path without the query string.\\n   */\\n  getPathname: function () {\\n    return this.context.getCurrentPathname();\\n  },\\n\\n  /**\\n   * Returns an object of the URL params that are currently active.\\n   */\\n  getParams: function () {\\n    return this.context.getCurrentParams();\\n  },\\n\\n  /**\\n   * Returns an object of the query params that are currently active.\\n   */\\n  getQuery: function () {\\n    return this.context.getCurrentQuery();\\n  },\\n\\n  /**\\n   * A helper method to determine if a given route, params, and query\\n   * are active.\\n   */\\n  isActive: function (to, params, query) {\\n    return this.context.isActive(to, params, query);\\n  }\\n\\n};\\n\\nmodule.exports = State;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/mixins/State.js\\n ** module id = 172\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/mixins/State.js?\");\n\n/***/ },\n/* 173 */\n/*!************************************************************!*\\\n  !*** ./~/react-router/modules/components/NotFoundRoute.js ***!\n  \\************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar FakeNode = __webpack_require__(/*! ../mixins/FakeNode */ 167);\\nvar PropTypes = __webpack_require__(/*! ../utils/PropTypes */ 168);\\n\\n/**\\n * A <NotFoundRoute> is a special kind of <Route> that\\n * renders when the beginning of its parent's path matches\\n * but none of its siblings do, including any <DefaultRoute>.\\n * Only one such route may be used at any given level in the\\n * route hierarchy.\\n */\\nvar NotFoundRoute = React.createClass({\\n\\n  displayName: 'NotFoundRoute',\\n\\n  mixins: [ FakeNode ],\\n\\n  propTypes: {\\n    name: React.PropTypes.string,\\n    path: PropTypes.falsy,\\n    handler: React.PropTypes.func.isRequired\\n  }\\n\\n});\\n\\nmodule.exports = NotFoundRoute;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/components/NotFoundRoute.js\\n ** module id = 173\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/components/NotFoundRoute.js?\");\n\n/***/ },\n/* 174 */\n/*!*******************************************************!*\\\n  !*** ./~/react-router/modules/components/Redirect.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar FakeNode = __webpack_require__(/*! ../mixins/FakeNode */ 167);\\nvar PropTypes = __webpack_require__(/*! ../utils/PropTypes */ 168);\\n\\n/**\\n * A <Redirect> component is a special kind of <Route> that always\\n * redirects to another route when it matches.\\n */\\nvar Redirect = React.createClass({\\n\\n  displayName: 'Redirect',\\n\\n  mixins: [ FakeNode ],\\n\\n  propTypes: {\\n    path: React.PropTypes.string,\\n    from: React.PropTypes.string, // Alias for path.\\n    to: React.PropTypes.string,\\n    handler: PropTypes.falsy\\n  }\\n\\n});\\n\\nmodule.exports = Redirect;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/components/Redirect.js\\n ** module id = 174\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/components/Redirect.js?\");\n\n/***/ },\n/* 175 */\n/*!****************************************************!*\\\n  !*** ./~/react-router/modules/components/Route.js ***!\n  \\****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar FakeNode = __webpack_require__(/*! ../mixins/FakeNode */ 167);\\n\\n/**\\n * <Route> components specify components that are rendered to the page when the\\n * URL matches a given pattern.\\n *\\n * Routes are arranged in a nested tree structure. When a new URL is requested,\\n * the tree is searched depth-first to find a route whose path matches the URL.\\n * When one is found, all routes in the tree that lead to it are considered\\n * \\\"active\\\" and their components are rendered into the DOM, nested in the same\\n * order as they are in the tree.\\n *\\n * The preferred way to configure a router is using JSX. The XML-like syntax is\\n * a great way to visualize how routes are laid out in an application.\\n *\\n *   var routes = [\\n *     <Route handler={App}>\\n *       <Route name=\\\"login\\\" handler={Login}/>\\n *       <Route name=\\\"logout\\\" handler={Logout}/>\\n *       <Route name=\\\"about\\\" handler={About}/>\\n *     </Route>\\n *   ];\\n *   \\n *   Router.run(routes, function (Handler) {\\n *     React.render(<Handler/>, document.body);\\n *   });\\n *\\n * Handlers for Route components that contain children can render their active\\n * child route using a <RouteHandler> element.\\n *\\n *   var App = React.createClass({\\n *     render: function () {\\n *       return (\\n *         <div class=\\\"application\\\">\\n *           <RouteHandler/>\\n *         </div>\\n *       );\\n *     }\\n *   });\\n */\\nvar Route = React.createClass({\\n\\n  displayName: 'Route',\\n\\n  mixins: [ FakeNode ],\\n\\n  propTypes: {\\n    name: React.PropTypes.string,\\n    path: React.PropTypes.string,\\n    handler: React.PropTypes.func.isRequired,\\n    ignoreScrollBehavior: React.PropTypes.bool\\n  }\\n\\n});\\n\\nmodule.exports = Route;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/components/Route.js\\n ** module id = 175\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/components/Route.js?\");\n\n/***/ },\n/* 176 */\n/*!***********************************************************!*\\\n  !*** ./~/react-router/modules/components/RouteHandler.js ***!\n  \\***********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar RouteHandlerMixin = __webpack_require__(/*! ../mixins/RouteHandler */ 177);\\n\\n/**\\n * A <RouteHandler> component renders the active child route handler\\n * when routes are nested.\\n */\\nvar RouteHandler = React.createClass({\\n\\n  displayName: 'RouteHandler',\\n\\n  mixins: [RouteHandlerMixin],\\n\\n  getDefaultProps: function () {\\n    return {\\n      ref: '__routeHandler__'\\n    };\\n  },\\n\\n  render: function () {\\n    return this.getRouteHandler();\\n  }\\n\\n});\\n\\nmodule.exports = RouteHandler;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/components/RouteHandler.js\\n ** module id = 176\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/components/RouteHandler.js?\");\n\n/***/ },\n/* 177 */\n/*!*******************************************************!*\\\n  !*** ./~/react-router/modules/mixins/RouteHandler.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\n\\nmodule.exports = {\\n  contextTypes: {\\n    getRouteAtDepth: React.PropTypes.func.isRequired,\\n    getRouteComponents: React.PropTypes.func.isRequired,\\n    routeHandlers: React.PropTypes.array.isRequired\\n  },\\n\\n  childContextTypes: {\\n    routeHandlers: React.PropTypes.array.isRequired\\n  },\\n\\n  getChildContext: function () {\\n    return {\\n      routeHandlers: this.context.routeHandlers.concat([ this ])\\n    };\\n  },\\n\\n  getRouteDepth: function () {\\n    return this.context.routeHandlers.length - 1;\\n  },\\n\\n  componentDidMount: function () {\\n    this._updateRouteComponent();\\n  },\\n\\n  componentDidUpdate: function () {\\n    this._updateRouteComponent();\\n  },\\n\\n  _updateRouteComponent: function () {\\n    var depth = this.getRouteDepth();\\n    var components = this.context.getRouteComponents();\\n    components[depth] = this.refs[this.props.ref || '__routeHandler__'];\\n  },\\n\\n  getRouteHandler: function (props) {\\n    var route = this.context.getRouteAtDepth(this.getRouteDepth());\\n    return route ? React.createElement(route.handler, props || this.props) : null;\\n  }\\n};\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/mixins/RouteHandler.js\\n ** module id = 177\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/mixins/RouteHandler.js?\");\n\n/***/ },\n/* 178 */\n/*!**********************************************************!*\\\n  !*** ./~/react-router/modules/locations/HashLocation.js ***!\n  \\**********************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var LocationActions = __webpack_require__(/*! ../actions/LocationActions */ 154);\\nvar History = __webpack_require__(/*! ../utils/History */ 155);\\nvar Path = __webpack_require__(/*! ../utils/Path */ 156);\\n\\n/**\\n * Returns the current URL path from the `hash` portion of the URL, including\\n * query string.\\n */\\nfunction getHashPath() {\\n  return Path.decode(\\n    // We can't use window.location.hash here because it's not\\n    // consistent across browsers - Firefox will pre-decode it!\\n    window.location.href.split('#')[1] || ''\\n  );\\n}\\n\\nvar _actionType;\\n\\nfunction ensureSlash() {\\n  var path = getHashPath();\\n\\n  if (path.charAt(0) === '/')\\n    return true;\\n\\n  HashLocation.replace('/' + path);\\n\\n  return false;\\n}\\n\\nvar _changeListeners = [];\\n\\nfunction notifyChange(type) {\\n  if (type === LocationActions.PUSH)\\n    History.length += 1;\\n\\n  var change = {\\n    path: getHashPath(),\\n    type: type\\n  };\\n\\n  _changeListeners.forEach(function (listener) {\\n    listener(change);\\n  });\\n}\\n\\nvar _isListening = false;\\n\\nfunction onHashChange() {\\n  if (ensureSlash()) {\\n    // If we don't have an _actionType then all we know is the hash\\n    // changed. It was probably caused by the user clicking the Back\\n    // button, but may have also been the Forward button or manual\\n    // manipulation. So just guess 'pop'.\\n    notifyChange(_actionType || LocationActions.POP);\\n    _actionType = null;\\n  }\\n}\\n\\n/**\\n * A Location that uses `window.location.hash`.\\n */\\nvar HashLocation = {\\n\\n  addChangeListener: function (listener) {\\n    _changeListeners.push(listener);\\n\\n    // Do this BEFORE listening for hashchange.\\n    ensureSlash();\\n\\n    if (_isListening)\\n      return;\\n\\n    if (window.addEventListener) {\\n      window.addEventListener('hashchange', onHashChange, false);\\n    } else {\\n      window.attachEvent('onhashchange', onHashChange);\\n    }\\n\\n    _isListening = true;\\n  },\\n\\n  removeChangeListener: function(listener) {\\n    for (var i = 0, l = _changeListeners.length; i < l; i ++) {\\n      if (_changeListeners[i] === listener) {\\n        _changeListeners.splice(i, 1);\\n        break;\\n      }\\n    }\\n\\n    if (window.removeEventListener) {\\n      window.removeEventListener('hashchange', onHashChange, false);\\n    } else {\\n      window.removeEvent('onhashchange', onHashChange);\\n    }\\n\\n    if (_changeListeners.length === 0)\\n      _isListening = false;\\n  },\\n\\n\\n\\n  push: function (path) {\\n    _actionType = LocationActions.PUSH;\\n    window.location.hash = Path.encode(path);\\n  },\\n\\n  replace: function (path) {\\n    _actionType = LocationActions.REPLACE;\\n    window.location.replace(window.location.pathname + '#' + Path.encode(path));\\n  },\\n\\n  pop: function () {\\n    _actionType = LocationActions.POP;\\n    History.back();\\n  },\\n\\n  getCurrentPath: getHashPath,\\n\\n  toString: function () {\\n    return '<HashLocation>';\\n  }\\n\\n};\\n\\nmodule.exports = HashLocation;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/locations/HashLocation.js\\n ** module id = 178\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/locations/HashLocation.js?\");\n\n/***/ },\n/* 179 */\n/*!********************************************************************!*\\\n  !*** ./~/react-router/modules/behaviors/ImitateBrowserBehavior.js ***!\n  \\********************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var LocationActions = __webpack_require__(/*! ../actions/LocationActions */ 154);\\n\\n/**\\n * A scroll behavior that attempts to imitate the default behavior\\n * of modern browsers.\\n */\\nvar ImitateBrowserBehavior = {\\n\\n  updateScrollPosition: function (position, actionType) {\\n    switch (actionType) {\\n      case LocationActions.PUSH:\\n      case LocationActions.REPLACE:\\n        window.scrollTo(0, 0);\\n        break;\\n      case LocationActions.POP:\\n        if (position) {\\n          window.scrollTo(position.x, position.y);\\n        } else {\\n          window.scrollTo(0, 0);\\n        }\\n        break;\\n    }\\n  }\\n\\n};\\n\\nmodule.exports = ImitateBrowserBehavior;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/behaviors/ImitateBrowserBehavior.js\\n ** module id = 179\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/behaviors/ImitateBrowserBehavior.js?\");\n\n/***/ },\n/* 180 */\n/*!*****************************************************************!*\\\n  !*** ./~/react-router/modules/behaviors/ScrollToTopBehavior.js ***!\n  \\*****************************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * A scroll behavior that always scrolls to the top of the page\\n * after a transition.\\n */\\nvar ScrollToTopBehavior = {\\n\\n  updateScrollPosition: function () {\\n    window.scrollTo(0, 0);\\n  }\\n\\n};\\n\\nmodule.exports = ScrollToTopBehavior;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/behaviors/ScrollToTopBehavior.js\\n ** module id = 180\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/behaviors/ScrollToTopBehavior.js?\");\n\n/***/ },\n/* 181 */\n/*!******************************************************!*\\\n  !*** ./~/react-router/modules/utils/createRouter.js ***!\n  \\******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* WEBPACK VAR INJECTION */(function(process) {/* jshint -W058 */\\nvar React = __webpack_require__(/*! react */ 1);\\nvar warning = __webpack_require__(/*! react/lib/warning */ 11);\\nvar invariant = __webpack_require__(/*! react/lib/invariant */ 6);\\nvar canUseDOM = __webpack_require__(/*! react/lib/ExecutionEnvironment */ 49).canUseDOM;\\nvar ImitateBrowserBehavior = __webpack_require__(/*! ../behaviors/ImitateBrowserBehavior */ 179);\\nvar RouteHandler = __webpack_require__(/*! ../components/RouteHandler */ 176);\\nvar LocationActions = __webpack_require__(/*! ../actions/LocationActions */ 154);\\nvar HashLocation = __webpack_require__(/*! ../locations/HashLocation */ 178);\\nvar HistoryLocation = __webpack_require__(/*! ../locations/HistoryLocation */ 153);\\nvar RefreshLocation = __webpack_require__(/*! ../locations/RefreshLocation */ 152);\\nvar NavigationContext = __webpack_require__(/*! ../mixins/NavigationContext */ 182);\\nvar StateContext = __webpack_require__(/*! ../mixins/StateContext */ 183);\\nvar Scrolling = __webpack_require__(/*! ../mixins/Scrolling */ 184);\\nvar createRoutesFromChildren = __webpack_require__(/*! ./createRoutesFromChildren */ 186);\\nvar supportsHistory = __webpack_require__(/*! ./supportsHistory */ 187);\\nvar Transition = __webpack_require__(/*! ./Transition */ 188);\\nvar PropTypes = __webpack_require__(/*! ./PropTypes */ 168);\\nvar Redirect = __webpack_require__(/*! ./Redirect */ 190);\\nvar History = __webpack_require__(/*! ./History */ 155);\\nvar Cancellation = __webpack_require__(/*! ./Cancellation */ 199);\\nvar Path = __webpack_require__(/*! ./Path */ 156);\\n\\n/**\\n * The default location for new routers.\\n */\\nvar DEFAULT_LOCATION = canUseDOM ? HashLocation : '/';\\n\\n/**\\n * The default scroll behavior for new routers.\\n */\\nvar DEFAULT_SCROLL_BEHAVIOR = canUseDOM ? ImitateBrowserBehavior : null;\\n\\n/**\\n * The default error handler for new routers.\\n */\\nfunction defaultErrorHandler(error) {\\n  // Throw so we don't silently swallow async errors.\\n  throw error; // This error probably originated in a transition hook.\\n}\\n\\n/**\\n * The default aborted transition handler for new routers.\\n */\\nfunction defaultAbortHandler(abortReason, location) {\\n  if (typeof location === 'string')\\n    throw new Error('Unhandled aborted transition! Reason: ' + abortReason);\\n\\n  if (abortReason instanceof Cancellation) {\\n    return;\\n  } else if (abortReason instanceof Redirect) {\\n    location.replace(this.makePath(abortReason.to, abortReason.params, abortReason.query));\\n  } else {\\n    location.pop();\\n  }\\n}\\n\\nfunction findMatch(pathname, routes, defaultRoute, notFoundRoute) {\\n  var match, route, params;\\n\\n  for (var i = 0, len = routes.length; i < len; ++i) {\\n    route = routes[i];\\n\\n    // Check the subtree first to find the most deeply-nested match.\\n    match = findMatch(pathname, route.childRoutes, route.defaultRoute, route.notFoundRoute);\\n\\n    if (match != null) {\\n      match.routes.unshift(route);\\n      return match;\\n    }\\n\\n    // No routes in the subtree matched, so check this route.\\n    params = Path.extractParams(route.path, pathname);\\n\\n    if (params)\\n      return createMatch(route, params);\\n  }\\n\\n  // No routes matched, so try the default route if there is one.\\n  if (defaultRoute && (params = Path.extractParams(defaultRoute.path, pathname)))\\n    return createMatch(defaultRoute, params);\\n\\n  // Last attempt: does the \\\"not found\\\" route match?\\n  if (notFoundRoute && (params = Path.extractParams(notFoundRoute.path, pathname)))\\n    return createMatch(notFoundRoute, params);\\n\\n  return match;\\n}\\n\\nfunction createMatch(route, params) {\\n  return { routes: [ route ], params: params };\\n}\\n\\nfunction hasProperties(object, properties) {\\n  for (var propertyName in properties)\\n    if (properties.hasOwnProperty(propertyName) && object[propertyName] !== properties[propertyName])\\n      return false;\\n\\n  return true;\\n}\\n\\nfunction hasMatch(routes, route, prevParams, nextParams, prevQuery, nextQuery) {\\n  return routes.some(function (r) {\\n    if (r !== route)\\n      return false;\\n\\n    var paramNames = route.paramNames;\\n    var paramName;\\n\\n    // Ensure that all params the route cares about did not change.\\n    for (var i = 0, len = paramNames.length; i < len; ++i) {\\n      paramName = paramNames[i];\\n\\n      if (nextParams[paramName] !== prevParams[paramName])\\n        return false;\\n    }\\n\\n    // Ensure the query hasn't changed.\\n    return hasProperties(prevQuery, nextQuery) && hasProperties(nextQuery, prevQuery);\\n  });\\n}\\n\\n/**\\n * Creates and returns a new router using the given options. A router\\n * is a ReactComponent class that knows how to react to changes in the\\n * URL and keep the contents of the page in sync.\\n *\\n * Options may be any of the following:\\n *\\n * - routes           (required) The route config\\n * - location         The location to use. Defaults to HashLocation when\\n *                    the DOM is available, \\\"/\\\" otherwise\\n * - scrollBehavior   The scroll behavior to use. Defaults to ImitateBrowserBehavior\\n *                    when the DOM is available, null otherwise\\n * - onError          A function that is used to handle errors\\n * - onAbort          A function that is used to handle aborted transitions\\n *\\n * When rendering in a server-side environment, the location should simply\\n * be the URL path that was used in the request, including the query string.\\n */\\nfunction createRouter(options) {\\n  options = options || {};\\n\\n  if (typeof options === 'function') {\\n    options = { routes: options }; // Router.create(<Route>)\\n  } else if (Array.isArray(options)) {\\n    options = { routes: options }; // Router.create([ <Route>, <Route> ])\\n  }\\n\\n  var routes = [];\\n  var namedRoutes = {};\\n  var components = [];\\n  var location = options.location || DEFAULT_LOCATION;\\n  var scrollBehavior = options.scrollBehavior || DEFAULT_SCROLL_BEHAVIOR;\\n  var onError = options.onError || defaultErrorHandler;\\n  var onAbort = options.onAbort || defaultAbortHandler;\\n  var state = {};\\n  var nextState = {};\\n  var pendingTransition = null;\\n\\n  function updateState() {\\n    state = nextState;\\n    nextState = {};\\n  }\\n\\n  if (typeof location === 'string') {\\n    warning(\\n      !canUseDOM || process.env.NODE_ENV === 'test',\\n      'You should not use a static location in a DOM environment because ' +\\n      'the router will not be kept in sync with the current URL'\\n    );\\n  } else {\\n    invariant(\\n      canUseDOM,\\n      'You cannot use %s without a DOM',\\n      location\\n    );\\n  }\\n\\n  // Automatically fall back to full page refreshes in\\n  // browsers that don't support the HTML history API.\\n  if (location === HistoryLocation && !supportsHistory())\\n    location = RefreshLocation;\\n\\n  var router = React.createClass({\\n\\n    displayName: 'Router',\\n\\n    mixins: [ NavigationContext, StateContext, Scrolling ],\\n\\n    statics: {\\n\\n      defaultRoute: null,\\n      notFoundRoute: null,\\n\\n      /**\\n       * Adds routes to this router from the given children object (see ReactChildren).\\n       */\\n      addRoutes: function (children) {\\n        routes.push.apply(routes, createRoutesFromChildren(children, this, namedRoutes));\\n      },\\n\\n      /**\\n       * Returns an absolute URL path created from the given route\\n       * name, URL parameters, and query.\\n       */\\n      makePath: function (to, params, query) {\\n        var path;\\n        if (Path.isAbsolute(to)) {\\n          path = Path.normalize(to);\\n        } else {\\n          var route = namedRoutes[to];\\n\\n          invariant(\\n            route,\\n            'Unable to find <Route name=\\\"%s\\\">',\\n            to\\n          );\\n\\n          path = route.path;\\n        }\\n\\n        return Path.withQuery(Path.injectParams(path, params), query);\\n      },\\n\\n      /**\\n       * Returns a string that may safely be used as the href of a link\\n       * to the route with the given name, URL parameters, and query.\\n       */\\n      makeHref: function (to, params, query) {\\n        var path = this.makePath(to, params, query);\\n        return (location === HashLocation) ? '#' + path : path;\\n      },\\n\\n      /**\\n       * Transitions to the URL specified in the arguments by pushing\\n       * a new URL onto the history stack.\\n       */\\n      transitionTo: function (to, params, query) {\\n        invariant(\\n          typeof location !== 'string',\\n          'You cannot use transitionTo with a static location'\\n        );\\n\\n        var path = this.makePath(to, params, query);\\n\\n        if (pendingTransition) {\\n          // Replace so pending location does not stay in history.\\n          location.replace(path);\\n        } else {\\n          location.push(path);\\n        }\\n      },\\n\\n      /**\\n       * Transitions to the URL specified in the arguments by replacing\\n       * the current URL in the history stack.\\n       */\\n      replaceWith: function (to, params, query) {\\n        invariant(\\n          typeof location !== 'string',\\n          'You cannot use replaceWith with a static location'\\n        );\\n\\n        location.replace(this.makePath(to, params, query));\\n      },\\n\\n      /**\\n       * Transitions to the previous URL if one is available. Returns true if the\\n       * router was able to go back, false otherwise.\\n       *\\n       * Note: The router only tracks history entries in your application, not the\\n       * current browser session, so you can safely call this function without guarding\\n       * against sending the user back to some other site. However, when using\\n       * RefreshLocation (which is the fallback for HistoryLocation in browsers that\\n       * don't support HTML5 history) this method will *always* send the client back\\n       * because we cannot reliably track history length.\\n       */\\n      goBack: function () {\\n        invariant(\\n          typeof location !== 'string',\\n          'You cannot use goBack with a static location'\\n        );\\n\\n        if (History.length > 1 || location === RefreshLocation) {\\n          location.pop();\\n          return true;\\n        }\\n\\n        warning(false, 'goBack() was ignored because there is no router history');\\n\\n        return false;\\n      },\\n\\n      /**\\n       * Performs a match of the given pathname against this router and returns an object\\n       * with the { routes, params } that match. Returns null if no match can be made.\\n       */\\n      match: function (pathname) {\\n        return findMatch(pathname, routes, this.defaultRoute, this.notFoundRoute) || null;\\n      },\\n\\n      /**\\n       * Performs a transition to the given path and calls callback(error, abortReason)\\n       * when the transition is finished. If both arguments are null the router's state\\n       * was updated. Otherwise the transition did not complete.\\n       *\\n       * In a transition, a router first determines which routes are involved by beginning\\n       * with the current route, up the route tree to the first parent route that is shared\\n       * with the destination route, and back down the tree to the destination route. The\\n       * willTransitionFrom hook is invoked on all route handlers we're transitioning away\\n       * from, in reverse nesting order. Likewise, the willTransitionTo hook is invoked on\\n       * all route handlers we're transitioning to.\\n       *\\n       * Both willTransitionFrom and willTransitionTo hooks may either abort or redirect the\\n       * transition. To resolve asynchronously, they may use transition.wait(promise). If no\\n       * hooks wait, the transition is fully synchronous.\\n       */\\n      dispatch: function (path, action, callback) {\\n        if (pendingTransition) {\\n          pendingTransition.abort(new Cancellation);\\n          pendingTransition = null;\\n        }\\n\\n        var prevPath = state.path;\\n        if (prevPath === path)\\n          return; // Nothing to do!\\n\\n        // Record the scroll position as early as possible to\\n        // get it before browsers try update it automatically.\\n        if (prevPath && action !== LocationActions.REPLACE)\\n          this.recordScrollPosition(prevPath);\\n\\n        var pathname = Path.withoutQuery(path);\\n        var match = this.match(pathname);\\n\\n        warning(\\n          match != null,\\n          'No route matches path \\\"%s\\\". Make sure you have <Route path=\\\"%s\\\"> somewhere in your routes',\\n          path, path\\n        );\\n\\n        if (match == null)\\n          match = {};\\n\\n        var prevRoutes = state.routes || [];\\n        var prevParams = state.params || {};\\n        var prevQuery = state.query || {};\\n\\n        var nextRoutes = match.routes || [];\\n        var nextParams = match.params || {};\\n        var nextQuery = Path.extractQuery(path) || {};\\n\\n        var fromRoutes, toRoutes;\\n        if (prevRoutes.length) {\\n          fromRoutes = prevRoutes.filter(function (route) {\\n            return !hasMatch(nextRoutes, route, prevParams, nextParams, prevQuery, nextQuery);\\n          });\\n\\n          toRoutes = nextRoutes.filter(function (route) {\\n            return !hasMatch(prevRoutes, route, prevParams, nextParams, prevQuery, nextQuery);\\n          });\\n        } else {\\n          fromRoutes = [];\\n          toRoutes = nextRoutes;\\n        }\\n\\n        var transition = new Transition(path, this.replaceWith.bind(this, path));\\n        pendingTransition = transition;\\n\\n        transition.from(fromRoutes, components, function (error) {\\n          if (error || transition.isAborted)\\n            return callback.call(router, error, transition);\\n\\n          transition.to(toRoutes, nextParams, nextQuery, function (error) {\\n            if (error || transition.isAborted)\\n              return callback.call(router, error, transition);\\n\\n            nextState.path = path;\\n            nextState.action = action;\\n            nextState.pathname = pathname;\\n            nextState.routes = nextRoutes;\\n            nextState.params = nextParams;\\n            nextState.query = nextQuery;\\n\\n            callback.call(router, null, transition);\\n          });\\n        });\\n      },\\n\\n      /**\\n       * Starts this router and calls callback(router, state) when the route changes.\\n       *\\n       * If the router's location is static (i.e. a URL path in a server environment)\\n       * the callback is called only once. Otherwise, the location should be one of the\\n       * Router.*Location objects (e.g. Router.HashLocation or Router.HistoryLocation).\\n       */\\n      run: function (callback) {\\n        var dispatchHandler = function (error, transition) {\\n          pendingTransition = null;\\n\\n          if (error) {\\n            onError.call(router, error);\\n          } else if (transition.isAborted) {\\n            onAbort.call(router, transition.abortReason, location);\\n          } else {\\n            callback.call(router, router, nextState);\\n          }\\n        };\\n\\n        if (typeof location === 'string') {\\n          router.dispatch(location, null, dispatchHandler);\\n        } else {\\n          // Listen for changes to the location.\\n          var changeListener = function (change) {\\n            router.dispatch(change.path, change.type, dispatchHandler);\\n          };\\n\\n          if (location.addChangeListener)\\n            location.addChangeListener(changeListener);\\n\\n          // Bootstrap using the current path.\\n          router.dispatch(location.getCurrentPath(), null, dispatchHandler);\\n        }\\n      },\\n\\n      teardown: function() {\\n        location.removeChangeListener(this.changeListener);\\n      }\\n\\n    },\\n\\n    propTypes: {\\n      children: PropTypes.falsy\\n    },\\n\\n    getLocation: function () {\\n      return location;\\n    },\\n\\n    getScrollBehavior: function () {\\n      return scrollBehavior;\\n    },\\n\\n    getRouteAtDepth: function (depth) {\\n      var routes = this.state.routes;\\n      return routes && routes[depth];\\n    },\\n\\n    getRouteComponents: function () {\\n      return components;\\n    },\\n\\n    getInitialState: function () {\\n      updateState();\\n      return state;\\n    },\\n\\n    componentWillReceiveProps: function () {\\n      updateState();\\n      this.setState(state);\\n    },\\n\\n    componentWillUnmount: function() {\\n      router.teardown();\\n    },\\n\\n    render: function () {\\n      return this.getRouteAtDepth(0) ? React.createElement(RouteHandler, this.props) : null;\\n    },\\n\\n    childContextTypes: {\\n      getRouteAtDepth: React.PropTypes.func.isRequired,\\n      getRouteComponents: React.PropTypes.func.isRequired,\\n      routeHandlers: React.PropTypes.array.isRequired\\n    },\\n\\n    getChildContext: function () {\\n      return {\\n        getRouteComponents: this.getRouteComponents,\\n        getRouteAtDepth: this.getRouteAtDepth,\\n        routeHandlers: [ this ]\\n      };\\n    }\\n\\n  });\\n\\n  if (options.routes)\\n    router.addRoutes(options.routes);\\n\\n  return router;\\n}\\n\\nmodule.exports = createRouter;\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/createRouter.js\\n ** module id = 181\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/createRouter.js?\");\n\n/***/ },\n/* 182 */\n/*!************************************************************!*\\\n  !*** ./~/react-router/modules/mixins/NavigationContext.js ***!\n  \\************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\n\\n/**\\n * Provides the router with context for Router.Navigation.\\n */\\nvar NavigationContext = {\\n\\n  childContextTypes: {\\n    makePath: React.PropTypes.func.isRequired,\\n    makeHref: React.PropTypes.func.isRequired,\\n    transitionTo: React.PropTypes.func.isRequired,\\n    replaceWith: React.PropTypes.func.isRequired,\\n    goBack: React.PropTypes.func.isRequired\\n  },\\n\\n  getChildContext: function () {\\n    return {\\n      makePath: this.constructor.makePath,\\n      makeHref: this.constructor.makeHref,\\n      transitionTo: this.constructor.transitionTo,\\n      replaceWith: this.constructor.replaceWith,\\n      goBack: this.constructor.goBack\\n    };\\n  }\\n\\n};\\n\\nmodule.exports = NavigationContext;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/mixins/NavigationContext.js\\n ** module id = 182\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/mixins/NavigationContext.js?\");\n\n/***/ },\n/* 183 */\n/*!*******************************************************!*\\\n  !*** ./~/react-router/modules/mixins/StateContext.js ***!\n  \\*******************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var React = __webpack_require__(/*! react */ 1);\\nvar assign = __webpack_require__(/*! react/lib/Object.assign */ 21);\\nvar Path = __webpack_require__(/*! ../utils/Path */ 156);\\n\\nfunction routeIsActive(activeRoutes, routeName) {\\n  return activeRoutes.some(function (route) {\\n    return route.name === routeName;\\n  });\\n}\\n\\nfunction paramsAreActive(activeParams, params) {\\n  for (var property in params)\\n    if (String(activeParams[property]) !== String(params[property]))\\n      return false;\\n\\n  return true;\\n}\\n\\nfunction queryIsActive(activeQuery, query) {\\n  for (var property in query)\\n    if (String(activeQuery[property]) !== String(query[property]))\\n      return false;\\n\\n  return true;\\n}\\n\\n/**\\n * Provides the router with context for Router.State.\\n */\\nvar StateContext = {\\n\\n  /**\\n   * Returns the current URL path + query string.\\n   */\\n  getCurrentPath: function () {\\n    return this.state.path;\\n  },\\n\\n  /**\\n   * Returns a read-only array of the currently active routes.\\n   */\\n  getCurrentRoutes: function () {\\n    return this.state.routes.slice(0);\\n  },\\n\\n  /**\\n   * Returns the current URL path without the query string.\\n   */\\n  getCurrentPathname: function () {\\n    return this.state.pathname;\\n  },\\n\\n  /**\\n   * Returns a read-only object of the currently active URL parameters.\\n   */\\n  getCurrentParams: function () {\\n    return assign({}, this.state.params);\\n  },\\n\\n  /**\\n   * Returns a read-only object of the currently active query parameters.\\n   */\\n  getCurrentQuery: function () {\\n    return assign({}, this.state.query);\\n  },\\n\\n  /**\\n   * Returns true if the given route, params, and query are active.\\n   */\\n  isActive: function (to, params, query) {\\n    if (Path.isAbsolute(to))\\n      return to === this.state.path;\\n\\n    return routeIsActive(this.state.routes, to) &&\\n      paramsAreActive(this.state.params, params) &&\\n      (query == null || queryIsActive(this.state.query, query));\\n  },\\n\\n  childContextTypes: {\\n    getCurrentPath: React.PropTypes.func.isRequired,\\n    getCurrentRoutes: React.PropTypes.func.isRequired,\\n    getCurrentPathname: React.PropTypes.func.isRequired,\\n    getCurrentParams: React.PropTypes.func.isRequired,\\n    getCurrentQuery: React.PropTypes.func.isRequired,\\n    isActive: React.PropTypes.func.isRequired\\n  },\\n\\n  getChildContext: function () {\\n    return {\\n      getCurrentPath: this.getCurrentPath,\\n      getCurrentRoutes: this.getCurrentRoutes,\\n      getCurrentPathname: this.getCurrentPathname,\\n      getCurrentParams: this.getCurrentParams,\\n      getCurrentQuery: this.getCurrentQuery,\\n      isActive: this.isActive\\n    };\\n  }\\n\\n};\\n\\nmodule.exports = StateContext;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/mixins/StateContext.js\\n ** module id = 183\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/mixins/StateContext.js?\");\n\n/***/ },\n/* 184 */\n/*!****************************************************!*\\\n  !*** ./~/react-router/modules/mixins/Scrolling.js ***!\n  \\****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var invariant = __webpack_require__(/*! react/lib/invariant */ 6);\\nvar canUseDOM = __webpack_require__(/*! react/lib/ExecutionEnvironment */ 49).canUseDOM;\\nvar getWindowScrollPosition = __webpack_require__(/*! ../utils/getWindowScrollPosition */ 185);\\n\\nfunction shouldUpdateScroll(state, prevState) {\\n  if (!prevState)\\n    return true;\\n\\n  // Don't update scroll position when only the query has changed.\\n  if (state.pathname === prevState.pathname)\\n    return false;\\n\\n  var routes = state.routes;\\n  var prevRoutes = prevState.routes;\\n\\n  var sharedAncestorRoutes = routes.filter(function (route) {\\n    return prevRoutes.indexOf(route) !== -1;\\n  });\\n\\n  return !sharedAncestorRoutes.some(function (route) {\\n    return route.ignoreScrollBehavior;\\n  });\\n}\\n\\n/**\\n * Provides the router with the ability to manage window scroll position\\n * according to its scroll behavior.\\n */\\nvar Scrolling = {\\n\\n  statics: {\\n    /**\\n     * Records curent scroll position as the last known position for the given URL path.\\n     */\\n    recordScrollPosition: function (path) {\\n      if (!this.scrollHistory)\\n        this.scrollHistory = {};\\n\\n      this.scrollHistory[path] = getWindowScrollPosition();\\n    },\\n\\n    /**\\n     * Returns the last known scroll position for the given URL path.\\n     */\\n    getScrollPosition: function (path) {\\n      if (!this.scrollHistory)\\n        this.scrollHistory = {};\\n\\n      return this.scrollHistory[path] || null;\\n    }\\n  },\\n\\n  componentWillMount: function () {\\n    invariant(\\n      this.getScrollBehavior() == null || canUseDOM,\\n      'Cannot use scroll behavior without a DOM'\\n    );\\n  },\\n\\n  componentDidMount: function () {\\n    this._updateScroll();\\n  },\\n\\n  componentDidUpdate: function (prevProps, prevState) {\\n    this._updateScroll(prevState);\\n  },\\n\\n  _updateScroll: function (prevState) {\\n    if (!shouldUpdateScroll(this.state, prevState))\\n      return;\\n\\n    var scrollBehavior = this.getScrollBehavior();\\n\\n    if (scrollBehavior)\\n      scrollBehavior.updateScrollPosition(\\n        this.constructor.getScrollPosition(this.state.path),\\n        this.state.action\\n      );\\n  }\\n\\n};\\n\\nmodule.exports = Scrolling;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/mixins/Scrolling.js\\n ** module id = 184\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/mixins/Scrolling.js?\");\n\n/***/ },\n/* 185 */\n/*!*****************************************************************!*\\\n  !*** ./~/react-router/modules/utils/getWindowScrollPosition.js ***!\n  \\*****************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var invariant = __webpack_require__(/*! react/lib/invariant */ 6);\\nvar canUseDOM = __webpack_require__(/*! react/lib/ExecutionEnvironment */ 49).canUseDOM;\\n\\n/**\\n * Returns the current scroll position of the window as { x, y }.\\n */\\nfunction getWindowScrollPosition() {\\n  invariant(\\n    canUseDOM,\\n    'Cannot get current scroll position without a DOM'\\n  );\\n\\n  return {\\n    x: window.pageXOffset || document.documentElement.scrollLeft,\\n    y: window.pageYOffset || document.documentElement.scrollTop\\n  };\\n}\\n\\nmodule.exports = getWindowScrollPosition;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/getWindowScrollPosition.js\\n ** module id = 185\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/getWindowScrollPosition.js?\");\n\n/***/ },\n/* 186 */\n/*!******************************************************************!*\\\n  !*** ./~/react-router/modules/utils/createRoutesFromChildren.js ***!\n  \\******************************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/* jshint -W084 */\\nvar React = __webpack_require__(/*! react */ 1);\\nvar warning = __webpack_require__(/*! react/lib/warning */ 11);\\nvar invariant = __webpack_require__(/*! react/lib/invariant */ 6);\\nvar DefaultRoute = __webpack_require__(/*! ../components/DefaultRoute */ 166);\\nvar NotFoundRoute = __webpack_require__(/*! ../components/NotFoundRoute */ 173);\\nvar Redirect = __webpack_require__(/*! ../components/Redirect */ 174);\\nvar Route = __webpack_require__(/*! ../components/Route */ 175);\\nvar Path = __webpack_require__(/*! ./Path */ 156);\\n\\nvar CONFIG_ELEMENT_TYPES = [\\n  DefaultRoute.type,\\n  NotFoundRoute.type,\\n  Redirect.type,\\n  Route.type\\n];\\n\\nfunction createRedirectHandler(to, _params, _query) {\\n  return React.createClass({\\n    statics: {\\n      willTransitionTo: function (transition, params, query) {\\n        transition.redirect(to, _params || params, _query || query);\\n      }\\n    },\\n\\n    render: function () {\\n      return null;\\n    }\\n  });\\n}\\n\\nfunction checkPropTypes(componentName, propTypes, props) {\\n  for (var propName in propTypes) {\\n    if (propTypes.hasOwnProperty(propName)) {\\n      var error = propTypes[propName](props, propName, componentName);\\n\\n      if (error instanceof Error)\\n        warning(false, error.message);\\n    }\\n  }\\n}\\n\\nfunction createRoute(element, parentRoute, namedRoutes) {\\n  var type = element.type;\\n  var props = element.props;\\n  var componentName = (type && type.displayName) || 'UnknownComponent';\\n\\n  invariant(\\n    CONFIG_ELEMENT_TYPES.indexOf(type) !== -1,\\n    'Unrecognized route configuration element \\\"<%s>\\\"',\\n    componentName\\n  );\\n\\n  if (type.propTypes)\\n    checkPropTypes(componentName, type.propTypes, props);\\n\\n  var route = { name: props.name };\\n\\n  if (props.ignoreScrollBehavior) {\\n    route.ignoreScrollBehavior = true;\\n  }\\n\\n  if (type === Redirect.type) {\\n    route.handler = createRedirectHandler(props.to, props.params, props.query);\\n    props.path = props.path || props.from || '*';\\n  } else {\\n    route.handler = props.handler;\\n  }\\n\\n  var parentPath = (parentRoute && parentRoute.path) || '/';\\n\\n  if ((props.path || props.name) && type !== DefaultRoute.type && type !== NotFoundRoute.type) {\\n    var path = props.path || props.name;\\n\\n    // Relative paths extend their parent.\\n    if (!Path.isAbsolute(path))\\n      path = Path.join(parentPath, path);\\n\\n    route.path = Path.normalize(path);\\n  } else {\\n    route.path = parentPath;\\n\\n    if (type === NotFoundRoute.type)\\n      route.path += '*';\\n  }\\n\\n  route.paramNames = Path.extractParamNames(route.path);\\n\\n  // Make sure the route's path has all params its parent needs.\\n  if (parentRoute && Array.isArray(parentRoute.paramNames)) {\\n    parentRoute.paramNames.forEach(function (paramName) {\\n      invariant(\\n        route.paramNames.indexOf(paramName) !== -1,\\n        'The nested route path \\\"%s\\\" is missing the \\\"%s\\\" parameter of its parent path \\\"%s\\\"',\\n        route.path, paramName, parentRoute.path\\n      );\\n    });\\n  }\\n\\n  // Make sure the route can be looked up by <Link>s.\\n  if (props.name) {\\n    invariant(\\n      namedRoutes[props.name] == null,\\n      'You cannot use the name \\\"%s\\\" for more than one route',\\n      props.name\\n    );\\n\\n    namedRoutes[props.name] = route;\\n  }\\n\\n  // Handle <NotFoundRoute>.\\n  if (type === NotFoundRoute.type) {\\n    invariant(\\n      parentRoute,\\n      '<NotFoundRoute> must have a parent <Route>'\\n    );\\n\\n    invariant(\\n      parentRoute.notFoundRoute == null,\\n      'You may not have more than one <NotFoundRoute> per <Route>'\\n    );\\n\\n    parentRoute.notFoundRoute = route;\\n\\n    return null;\\n  }\\n\\n  // Handle <DefaultRoute>.\\n  if (type === DefaultRoute.type) {\\n    invariant(\\n      parentRoute,\\n      '<DefaultRoute> must have a parent <Route>'\\n    );\\n\\n    invariant(\\n      parentRoute.defaultRoute == null,\\n      'You may not have more than one <DefaultRoute> per <Route>'\\n    );\\n\\n    parentRoute.defaultRoute = route;\\n\\n    return null;\\n  }\\n\\n  route.childRoutes = createRoutesFromChildren(props.children, route, namedRoutes);\\n\\n  return route;\\n}\\n\\n/**\\n * Creates and returns an array of route objects from the given ReactChildren.\\n */\\nfunction createRoutesFromChildren(children, parentRoute, namedRoutes) {\\n  var routes = [];\\n\\n  React.Children.forEach(children, function (child) {\\n    // Exclude <DefaultRoute>s and <NotFoundRoute>s.\\n    if (child = createRoute(child, parentRoute, namedRoutes))\\n      routes.push(child);\\n  });\\n\\n  return routes;\\n}\\n\\nmodule.exports = createRoutesFromChildren;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/createRoutesFromChildren.js\\n ** module id = 186\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/createRoutesFromChildren.js?\");\n\n/***/ },\n/* 187 */\n/*!*********************************************************!*\\\n  !*** ./~/react-router/modules/utils/supportsHistory.js ***!\n  \\*********************************************************/\n/***/ function(module, exports) {\n\n\teval(\"function supportsHistory() {\\n  /*! taken from modernizr\\n   * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\\n   * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\\n   * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586\\n   */\\n  var ua = navigator.userAgent;\\n  if ((ua.indexOf('Android 2.') !== -1 ||\\n      (ua.indexOf('Android 4.0') !== -1)) &&\\n      ua.indexOf('Mobile Safari') !== -1 &&\\n      ua.indexOf('Chrome') === -1 &&\\n      ua.indexOf('Windows Phone') === -1) {\\n    return false;\\n  }\\n  return (window.history && 'pushState' in window.history);\\n}\\n\\nmodule.exports = supportsHistory;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/supportsHistory.js\\n ** module id = 187\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/supportsHistory.js?\");\n\n/***/ },\n/* 188 */\n/*!****************************************************!*\\\n  !*** ./~/react-router/modules/utils/Transition.js ***!\n  \\****************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var assign = __webpack_require__(/*! react/lib/Object.assign */ 21);\\nvar reversedArray = __webpack_require__(/*! ./reversedArray */ 189);\\nvar Redirect = __webpack_require__(/*! ./Redirect */ 190);\\nvar Promise = __webpack_require__(/*! ./Promise */ 191);\\n\\n/**\\n * Runs all hook functions serially and calls callback(error) when finished.\\n * A hook may return a promise if it needs to execute asynchronously.\\n */\\nfunction runHooks(hooks, callback) {\\n  var promise;\\n  try {\\n    promise = hooks.reduce(function (promise, hook) {\\n      // The first hook to use transition.wait makes the rest\\n      // of the transition async from that point forward.\\n      return promise ? promise.then(hook) : hook();\\n    }, null);\\n  } catch (error) {\\n    return callback(error); // Sync error.\\n  }\\n\\n  if (promise) {\\n    // Use setTimeout to break the promise chain.\\n    promise.then(function () {\\n      setTimeout(callback);\\n    }, function (error) {\\n      setTimeout(function () {\\n        callback(error);\\n      });\\n    });\\n  } else {\\n    callback();\\n  }\\n}\\n\\n/**\\n * Calls the willTransitionFrom hook of all handlers in the given matches\\n * serially in reverse with the transition object and the current instance of\\n * the route's handler, so that the deepest nested handlers are called first.\\n * Calls callback(error) when finished.\\n */\\nfunction runTransitionFromHooks(transition, routes, components, callback) {\\n  components = reversedArray(components);\\n\\n  var hooks = reversedArray(routes).map(function (route, index) {\\n    return function () {\\n      var handler = route.handler;\\n\\n      if (!transition.isAborted && handler.willTransitionFrom)\\n        return handler.willTransitionFrom(transition, components[index]);\\n\\n      var promise = transition._promise;\\n      transition._promise = null;\\n\\n      return promise;\\n    };\\n  });\\n\\n  runHooks(hooks, callback);\\n}\\n\\n/**\\n * Calls the willTransitionTo hook of all handlers in the given matches\\n * serially with the transition object and any params that apply to that\\n * handler. Calls callback(error) when finished.\\n */\\nfunction runTransitionToHooks(transition, routes, params, query, callback) {\\n  var hooks = routes.map(function (route) {\\n    return function () {\\n      var handler = route.handler;\\n\\n      if (!transition.isAborted && handler.willTransitionTo)\\n        handler.willTransitionTo(transition, params, query);\\n\\n      var promise = transition._promise;\\n      transition._promise = null;\\n\\n      return promise;\\n    };\\n  });\\n\\n  runHooks(hooks, callback);\\n}\\n\\n/**\\n * Encapsulates a transition to a given path.\\n *\\n * The willTransitionTo and willTransitionFrom handlers receive\\n * an instance of this class as their first argument.\\n */\\nfunction Transition(path, retry) {\\n  this.path = path;\\n  this.abortReason = null;\\n  this.isAborted = false;\\n  this.retry = retry.bind(this);\\n  this._promise = null;\\n}\\n\\nassign(Transition.prototype, {\\n\\n  abort: function (reason) {\\n    if (this.isAborted) {\\n      // First abort wins.\\n      return;\\n    }\\n\\n    this.abortReason = reason;\\n    this.isAborted = true;\\n  },\\n\\n  redirect: function (to, params, query) {\\n    this.abort(new Redirect(to, params, query));\\n  },\\n\\n  wait: function (value) {\\n    this._promise = Promise.resolve(value);\\n  },\\n\\n  from: function (routes, components, callback) {\\n    return runTransitionFromHooks(this, routes, components, callback);\\n  },\\n\\n  to: function (routes, params, query, callback) {\\n    return runTransitionToHooks(this, routes, params, query, callback);\\n  }\\n\\n});\\n\\nmodule.exports = Transition;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/Transition.js\\n ** module id = 188\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/Transition.js?\");\n\n/***/ },\n/* 189 */\n/*!*******************************************************!*\\\n  !*** ./~/react-router/modules/utils/reversedArray.js ***!\n  \\*******************************************************/\n/***/ function(module, exports) {\n\n\teval(\"function reversedArray(array) {\\n  return array.slice(0).reverse();\\n}\\n\\nmodule.exports = reversedArray;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/reversedArray.js\\n ** module id = 189\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/reversedArray.js?\");\n\n/***/ },\n/* 190 */\n/*!**************************************************!*\\\n  !*** ./~/react-router/modules/utils/Redirect.js ***!\n  \\**************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Encapsulates a redirect to the given route.\\n */\\nfunction Redirect(to, params, query) {\\n  this.to = to;\\n  this.params = params;\\n  this.query = query;\\n}\\n\\nmodule.exports = Redirect;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/Redirect.js\\n ** module id = 190\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/Redirect.js?\");\n\n/***/ },\n/* 191 */\n/*!*************************************************!*\\\n  !*** ./~/react-router/modules/utils/Promise.js ***!\n  \\*************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var Promise = __webpack_require__(/*! when/lib/Promise */ 192);\\n\\n// TODO: Use process.env.NODE_ENV check + envify to enable\\n// when's promise monitor here when in dev.\\n\\nmodule.exports = Promise;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/Promise.js\\n ** module id = 191\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/Promise.js?\");\n\n/***/ },\n/* 192 */\n/*!**********************************************!*\\\n  !*** ./~/react-router/~/when/lib/Promise.js ***!\n  \\**********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */\\n/** @author Brian Cavalier */\\n/** @author John Hann */\\n\\n(function(define) { 'use strict';\\n!(__WEBPACK_AMD_DEFINE_RESULT__ = function (require) {\\n\\n\\tvar makePromise = __webpack_require__(/*! ./makePromise */ 194);\\n\\tvar Scheduler = __webpack_require__(/*! ./Scheduler */ 195);\\n\\tvar async = __webpack_require__(/*! ./async */ 197);\\n\\n\\treturn makePromise({\\n\\t\\tscheduler: new Scheduler(async)\\n\\t});\\n\\n}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n})(__webpack_require__(/*! !webpack amd define */ 193));\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/when/lib/Promise.js\\n ** module id = 192\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/when/lib/Promise.js?\");\n\n/***/ },\n/* 193 */\n/*!***************************************!*\\\n  !*** (webpack)/buildin/amd-define.js ***!\n  \\***************************************/\n/***/ function(module, exports) {\n\n\teval(\"module.exports = function() { throw new Error(\\\"define cannot be used indirect\\\"); };\\r\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** (webpack)/buildin/amd-define.js\\n ** module id = 193\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///(webpack)/buildin/amd-define.js?\");\n\n/***/ },\n/* 194 */\n/*!**************************************************!*\\\n  !*** ./~/react-router/~/when/lib/makePromise.js ***!\n  \\**************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */\\n/** @author Brian Cavalier */\\n/** @author John Hann */\\n\\n(function(define) { 'use strict';\\n!(__WEBPACK_AMD_DEFINE_RESULT__ = function() {\\n\\n\\treturn function makePromise(environment) {\\n\\n\\t\\tvar tasks = environment.scheduler;\\n\\n\\t\\tvar objectCreate = Object.create ||\\n\\t\\t\\tfunction(proto) {\\n\\t\\t\\t\\tfunction Child() {}\\n\\t\\t\\t\\tChild.prototype = proto;\\n\\t\\t\\t\\treturn new Child();\\n\\t\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * Create a promise whose fate is determined by resolver\\n\\t\\t * @constructor\\n\\t\\t * @returns {Promise} promise\\n\\t\\t * @name Promise\\n\\t\\t */\\n\\t\\tfunction Promise(resolver, handler) {\\n\\t\\t\\tthis._handler = resolver === Handler ? handler : init(resolver);\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Run the supplied resolver\\n\\t\\t * @param resolver\\n\\t\\t * @returns {Pending}\\n\\t\\t */\\n\\t\\tfunction init(resolver) {\\n\\t\\t\\tvar handler = new Pending();\\n\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tresolver(promiseResolve, promiseReject, promiseNotify);\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\tpromiseReject(e);\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn handler;\\n\\n\\t\\t\\t/**\\n\\t\\t\\t * Transition from pre-resolution state to post-resolution state, notifying\\n\\t\\t\\t * all listeners of the ultimate fulfillment or rejection\\n\\t\\t\\t * @param {*} x resolution value\\n\\t\\t\\t */\\n\\t\\t\\tfunction promiseResolve (x) {\\n\\t\\t\\t\\thandler.resolve(x);\\n\\t\\t\\t}\\n\\t\\t\\t/**\\n\\t\\t\\t * Reject this promise with reason, which will be used verbatim\\n\\t\\t\\t * @param {Error|*} reason rejection reason, strongly suggested\\n\\t\\t\\t *   to be an Error type\\n\\t\\t\\t */\\n\\t\\t\\tfunction promiseReject (reason) {\\n\\t\\t\\t\\thandler.reject(reason);\\n\\t\\t\\t}\\n\\n\\t\\t\\t/**\\n\\t\\t\\t * Issue a progress event, notifying all progress listeners\\n\\t\\t\\t * @param {*} x progress event payload to pass to all listeners\\n\\t\\t\\t */\\n\\t\\t\\tfunction promiseNotify (x) {\\n\\t\\t\\t\\thandler.notify(x);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Creation\\n\\n\\t\\tPromise.resolve = resolve;\\n\\t\\tPromise.reject = reject;\\n\\t\\tPromise.never = never;\\n\\n\\t\\tPromise._defer = defer;\\n\\t\\tPromise._handler = getHandler;\\n\\n\\t\\t/**\\n\\t\\t * Returns a trusted promise. If x is already a trusted promise, it is\\n\\t\\t * returned, otherwise returns a new trusted Promise which follows x.\\n\\t\\t * @param  {*} x\\n\\t\\t * @return {Promise} promise\\n\\t\\t */\\n\\t\\tfunction resolve(x) {\\n\\t\\t\\treturn isPromise(x) ? x\\n\\t\\t\\t\\t: new Promise(Handler, new Async(getHandler(x)));\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Return a reject promise with x as its reason (x is used verbatim)\\n\\t\\t * @param {*} x\\n\\t\\t * @returns {Promise} rejected promise\\n\\t\\t */\\n\\t\\tfunction reject(x) {\\n\\t\\t\\treturn new Promise(Handler, new Async(new Rejected(x)));\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Return a promise that remains pending forever\\n\\t\\t * @returns {Promise} forever-pending promise.\\n\\t\\t */\\n\\t\\tfunction never() {\\n\\t\\t\\treturn foreverPendingPromise; // Should be frozen\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Creates an internal {promise, resolver} pair\\n\\t\\t * @private\\n\\t\\t * @returns {Promise}\\n\\t\\t */\\n\\t\\tfunction defer() {\\n\\t\\t\\treturn new Promise(Handler, new Pending());\\n\\t\\t}\\n\\n\\t\\t// Transformation and flow control\\n\\n\\t\\t/**\\n\\t\\t * Transform this promise's fulfillment value, returning a new Promise\\n\\t\\t * for the transformed result.  If the promise cannot be fulfilled, onRejected\\n\\t\\t * is called with the reason.  onProgress *may* be called with updates toward\\n\\t\\t * this promise's fulfillment.\\n\\t\\t * @param {function=} onFulfilled fulfillment handler\\n\\t\\t * @param {function=} onRejected rejection handler\\n\\t\\t * @deprecated @param {function=} onProgress progress handler\\n\\t\\t * @return {Promise} new promise\\n\\t\\t */\\n\\t\\tPromise.prototype.then = function(onFulfilled, onRejected) {\\n\\t\\t\\tvar parent = this._handler;\\n\\t\\t\\tvar state = parent.join().state();\\n\\n\\t\\t\\tif ((typeof onFulfilled !== 'function' && state > 0) ||\\n\\t\\t\\t\\t(typeof onRejected !== 'function' && state < 0)) {\\n\\t\\t\\t\\t// Short circuit: value will not change, simply share handler\\n\\t\\t\\t\\treturn new this.constructor(Handler, parent);\\n\\t\\t\\t}\\n\\n\\t\\t\\tvar p = this._beget();\\n\\t\\t\\tvar child = p._handler;\\n\\n\\t\\t\\tparent.chain(child, parent.receiver, onFulfilled, onRejected,\\n\\t\\t\\t\\t\\targuments.length > 2 ? arguments[2] : void 0);\\n\\n\\t\\t\\treturn p;\\n\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * If this promise cannot be fulfilled due to an error, call onRejected to\\n\\t\\t * handle the error. Shortcut for .then(undefined, onRejected)\\n\\t\\t * @param {function?} onRejected\\n\\t\\t * @return {Promise}\\n\\t\\t */\\n\\t\\tPromise.prototype['catch'] = function(onRejected) {\\n\\t\\t\\treturn this.then(void 0, onRejected);\\n\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * Creates a new, pending promise of the same type as this promise\\n\\t\\t * @private\\n\\t\\t * @returns {Promise}\\n\\t\\t */\\n\\t\\tPromise.prototype._beget = function() {\\n\\t\\t\\tvar parent = this._handler;\\n\\t\\t\\tvar child = new Pending(parent.receiver, parent.join().context);\\n\\t\\t\\treturn new this.constructor(Handler, child);\\n\\t\\t};\\n\\n\\t\\t// Array combinators\\n\\n\\t\\tPromise.all = all;\\n\\t\\tPromise.race = race;\\n\\n\\t\\t/**\\n\\t\\t * Return a promise that will fulfill when all promises in the\\n\\t\\t * input array have fulfilled, or will reject when one of the\\n\\t\\t * promises rejects.\\n\\t\\t * @param {array} promises array of promises\\n\\t\\t * @returns {Promise} promise for array of fulfillment values\\n\\t\\t */\\n\\t\\tfunction all(promises) {\\n\\t\\t\\t/*jshint maxcomplexity:8*/\\n\\t\\t\\tvar resolver = new Pending();\\n\\t\\t\\tvar pending = promises.length >>> 0;\\n\\t\\t\\tvar results = new Array(pending);\\n\\n\\t\\t\\tvar i, h, x, s;\\n\\t\\t\\tfor (i = 0; i < promises.length; ++i) {\\n\\t\\t\\t\\tx = promises[i];\\n\\n\\t\\t\\t\\tif (x === void 0 && !(i in promises)) {\\n\\t\\t\\t\\t\\t--pending;\\n\\t\\t\\t\\t\\tcontinue;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tif (maybeThenable(x)) {\\n\\t\\t\\t\\t\\th = getHandlerMaybeThenable(x);\\n\\n\\t\\t\\t\\t\\ts = h.state();\\n\\t\\t\\t\\t\\tif (s === 0) {\\n\\t\\t\\t\\t\\t\\th.fold(settleAt, i, results, resolver);\\n\\t\\t\\t\\t\\t} else if (s > 0) {\\n\\t\\t\\t\\t\\t\\tresults[i] = h.value;\\n\\t\\t\\t\\t\\t\\t--pending;\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tunreportRemaining(promises, i+1, h);\\n\\t\\t\\t\\t\\t\\tresolver.become(h);\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tresults[i] = x;\\n\\t\\t\\t\\t\\t--pending;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tif(pending === 0) {\\n\\t\\t\\t\\tresolver.become(new Fulfilled(results));\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn new Promise(Handler, resolver);\\n\\n\\t\\t\\tfunction settleAt(i, x, resolver) {\\n\\t\\t\\t\\t/*jshint validthis:true*/\\n\\t\\t\\t\\tthis[i] = x;\\n\\t\\t\\t\\tif(--pending === 0) {\\n\\t\\t\\t\\t\\tresolver.become(new Fulfilled(this));\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tfunction unreportRemaining(promises, start, rejectedHandler) {\\n\\t\\t\\tvar i, h, x;\\n\\t\\t\\tfor(i=start; i<promises.length; ++i) {\\n\\t\\t\\t\\tx = promises[i];\\n\\t\\t\\t\\tif(maybeThenable(x)) {\\n\\t\\t\\t\\t\\th = getHandlerMaybeThenable(x);\\n\\n\\t\\t\\t\\t\\tif(h !== rejectedHandler) {\\n\\t\\t\\t\\t\\t\\th.visit(h, void 0, h._unreport);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Fulfill-reject competitive race. Return a promise that will settle\\n\\t\\t * to the same state as the earliest input promise to settle.\\n\\t\\t *\\n\\t\\t * WARNING: The ES6 Promise spec requires that race()ing an empty array\\n\\t\\t * must return a promise that is pending forever.  This implementation\\n\\t\\t * returns a singleton forever-pending promise, the same singleton that is\\n\\t\\t * returned by Promise.never(), thus can be checked with ===\\n\\t\\t *\\n\\t\\t * @param {array} promises array of promises to race\\n\\t\\t * @returns {Promise} if input is non-empty, a promise that will settle\\n\\t\\t * to the same outcome as the earliest input promise to settle. if empty\\n\\t\\t * is empty, returns a promise that will never settle.\\n\\t\\t */\\n\\t\\tfunction race(promises) {\\n\\t\\t\\t// Sigh, race([]) is untestable unless we return *something*\\n\\t\\t\\t// that is recognizable without calling .then() on it.\\n\\t\\t\\tif(Object(promises) === promises && promises.length === 0) {\\n\\t\\t\\t\\treturn never();\\n\\t\\t\\t}\\n\\n\\t\\t\\tvar h = new Pending();\\n\\t\\t\\tvar i, x;\\n\\t\\t\\tfor(i=0; i<promises.length; ++i) {\\n\\t\\t\\t\\tx = promises[i];\\n\\t\\t\\t\\tif (x !== void 0 && i in promises) {\\n\\t\\t\\t\\t\\tgetHandler(x).visit(h, h.resolve, h.reject);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\treturn new Promise(Handler, h);\\n\\t\\t}\\n\\n\\t\\t// Promise internals\\n\\t\\t// Below this, everything is @private\\n\\n\\t\\t/**\\n\\t\\t * Get an appropriate handler for x, without checking for cycles\\n\\t\\t * @param {*} x\\n\\t\\t * @returns {object} handler\\n\\t\\t */\\n\\t\\tfunction getHandler(x) {\\n\\t\\t\\tif(isPromise(x)) {\\n\\t\\t\\t\\treturn x._handler.join();\\n\\t\\t\\t}\\n\\t\\t\\treturn maybeThenable(x) ? getHandlerUntrusted(x) : new Fulfilled(x);\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Get a handler for thenable x.\\n\\t\\t * NOTE: You must only call this if maybeThenable(x) == true\\n\\t\\t * @param {object|function|Promise} x\\n\\t\\t * @returns {object} handler\\n\\t\\t */\\n\\t\\tfunction getHandlerMaybeThenable(x) {\\n\\t\\t\\treturn isPromise(x) ? x._handler.join() : getHandlerUntrusted(x);\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Get a handler for potentially untrusted thenable x\\n\\t\\t * @param {*} x\\n\\t\\t * @returns {object} handler\\n\\t\\t */\\n\\t\\tfunction getHandlerUntrusted(x) {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tvar untrustedThen = x.then;\\n\\t\\t\\t\\treturn typeof untrustedThen === 'function'\\n\\t\\t\\t\\t\\t? new Thenable(untrustedThen, x)\\n\\t\\t\\t\\t\\t: new Fulfilled(x);\\n\\t\\t\\t} catch(e) {\\n\\t\\t\\t\\treturn new Rejected(e);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Handler for a promise that is pending forever\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction Handler() {}\\n\\n\\t\\tHandler.prototype.when\\n\\t\\t\\t= Handler.prototype.become\\n\\t\\t\\t= Handler.prototype.notify\\n\\t\\t\\t= Handler.prototype.fail\\n\\t\\t\\t= Handler.prototype._unreport\\n\\t\\t\\t= Handler.prototype._report\\n\\t\\t\\t= noop;\\n\\n\\t\\tHandler.prototype._state = 0;\\n\\n\\t\\tHandler.prototype.state = function() {\\n\\t\\t\\treturn this._state;\\n\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * Recursively collapse handler chain to find the handler\\n\\t\\t * nearest to the fully resolved value.\\n\\t\\t * @returns {object} handler nearest the fully resolved value\\n\\t\\t */\\n\\t\\tHandler.prototype.join = function() {\\n\\t\\t\\tvar h = this;\\n\\t\\t\\twhile(h.handler !== void 0) {\\n\\t\\t\\t\\th = h.handler;\\n\\t\\t\\t}\\n\\t\\t\\treturn h;\\n\\t\\t};\\n\\n\\t\\tHandler.prototype.chain = function(to, receiver, fulfilled, rejected, progress) {\\n\\t\\t\\tthis.when({\\n\\t\\t\\t\\tresolver: to,\\n\\t\\t\\t\\treceiver: receiver,\\n\\t\\t\\t\\tfulfilled: fulfilled,\\n\\t\\t\\t\\trejected: rejected,\\n\\t\\t\\t\\tprogress: progress\\n\\t\\t\\t});\\n\\t\\t};\\n\\n\\t\\tHandler.prototype.visit = function(receiver, fulfilled, rejected, progress) {\\n\\t\\t\\tthis.chain(failIfRejected, receiver, fulfilled, rejected, progress);\\n\\t\\t};\\n\\n\\t\\tHandler.prototype.fold = function(f, z, c, to) {\\n\\t\\t\\tthis.visit(to, function(x) {\\n\\t\\t\\t\\tf.call(c, z, x, this);\\n\\t\\t\\t}, to.reject, to.notify);\\n\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * Handler that invokes fail() on any handler it becomes\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction FailIfRejected() {}\\n\\n\\t\\tinherit(Handler, FailIfRejected);\\n\\n\\t\\tFailIfRejected.prototype.become = function(h) {\\n\\t\\t\\th.fail();\\n\\t\\t};\\n\\n\\t\\tvar failIfRejected = new FailIfRejected();\\n\\n\\t\\t/**\\n\\t\\t * Handler that manages a queue of consumers waiting on a pending promise\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction Pending(receiver, inheritedContext) {\\n\\t\\t\\tPromise.createContext(this, inheritedContext);\\n\\n\\t\\t\\tthis.consumers = void 0;\\n\\t\\t\\tthis.receiver = receiver;\\n\\t\\t\\tthis.handler = void 0;\\n\\t\\t\\tthis.resolved = false;\\n\\t\\t}\\n\\n\\t\\tinherit(Handler, Pending);\\n\\n\\t\\tPending.prototype._state = 0;\\n\\n\\t\\tPending.prototype.resolve = function(x) {\\n\\t\\t\\tthis.become(getHandler(x));\\n\\t\\t};\\n\\n\\t\\tPending.prototype.reject = function(x) {\\n\\t\\t\\tif(this.resolved) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\n\\t\\t\\tthis.become(new Rejected(x));\\n\\t\\t};\\n\\n\\t\\tPending.prototype.join = function() {\\n\\t\\t\\tif (!this.resolved) {\\n\\t\\t\\t\\treturn this;\\n\\t\\t\\t}\\n\\n\\t\\t\\tvar h = this;\\n\\n\\t\\t\\twhile (h.handler !== void 0) {\\n\\t\\t\\t\\th = h.handler;\\n\\t\\t\\t\\tif (h === this) {\\n\\t\\t\\t\\t\\treturn this.handler = cycle();\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn h;\\n\\t\\t};\\n\\n\\t\\tPending.prototype.run = function() {\\n\\t\\t\\tvar q = this.consumers;\\n\\t\\t\\tvar handler = this.join();\\n\\t\\t\\tthis.consumers = void 0;\\n\\n\\t\\t\\tfor (var i = 0; i < q.length; ++i) {\\n\\t\\t\\t\\thandler.when(q[i]);\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\tPending.prototype.become = function(handler) {\\n\\t\\t\\tif(this.resolved) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\n\\t\\t\\tthis.resolved = true;\\n\\t\\t\\tthis.handler = handler;\\n\\t\\t\\tif(this.consumers !== void 0) {\\n\\t\\t\\t\\ttasks.enqueue(this);\\n\\t\\t\\t}\\n\\n\\t\\t\\tif(this.context !== void 0) {\\n\\t\\t\\t\\thandler._report(this.context);\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\tPending.prototype.when = function(continuation) {\\n\\t\\t\\tif(this.resolved) {\\n\\t\\t\\t\\ttasks.enqueue(new ContinuationTask(continuation, this.handler));\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tif(this.consumers === void 0) {\\n\\t\\t\\t\\t\\tthis.consumers = [continuation];\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tthis.consumers.push(continuation);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\tPending.prototype.notify = function(x) {\\n\\t\\t\\tif(!this.resolved) {\\n\\t\\t\\t\\ttasks.enqueue(new ProgressTask(x, this));\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\tPending.prototype.fail = function(context) {\\n\\t\\t\\tvar c = typeof context === 'undefined' ? this.context : context;\\n\\t\\t\\tthis.resolved && this.handler.join().fail(c);\\n\\t\\t};\\n\\n\\t\\tPending.prototype._report = function(context) {\\n\\t\\t\\tthis.resolved && this.handler.join()._report(context);\\n\\t\\t};\\n\\n\\t\\tPending.prototype._unreport = function() {\\n\\t\\t\\tthis.resolved && this.handler.join()._unreport();\\n\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * Wrap another handler and force it into a future stack\\n\\t\\t * @param {object} handler\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction Async(handler) {\\n\\t\\t\\tthis.handler = handler;\\n\\t\\t}\\n\\n\\t\\tinherit(Handler, Async);\\n\\n\\t\\tAsync.prototype.when = function(continuation) {\\n\\t\\t\\ttasks.enqueue(new ContinuationTask(continuation, this));\\n\\t\\t};\\n\\n\\t\\tAsync.prototype._report = function(context) {\\n\\t\\t\\tthis.join()._report(context);\\n\\t\\t};\\n\\n\\t\\tAsync.prototype._unreport = function() {\\n\\t\\t\\tthis.join()._unreport();\\n\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * Handler that wraps an untrusted thenable and assimilates it in a future stack\\n\\t\\t * @param {function} then\\n\\t\\t * @param {{then: function}} thenable\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction Thenable(then, thenable) {\\n\\t\\t\\tPending.call(this);\\n\\t\\t\\ttasks.enqueue(new AssimilateTask(then, thenable, this));\\n\\t\\t}\\n\\n\\t\\tinherit(Pending, Thenable);\\n\\n\\t\\t/**\\n\\t\\t * Handler for a fulfilled promise\\n\\t\\t * @param {*} x fulfillment value\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction Fulfilled(x) {\\n\\t\\t\\tPromise.createContext(this);\\n\\t\\t\\tthis.value = x;\\n\\t\\t}\\n\\n\\t\\tinherit(Handler, Fulfilled);\\n\\n\\t\\tFulfilled.prototype._state = 1;\\n\\n\\t\\tFulfilled.prototype.fold = function(f, z, c, to) {\\n\\t\\t\\trunContinuation3(f, z, this, c, to);\\n\\t\\t};\\n\\n\\t\\tFulfilled.prototype.when = function(cont) {\\n\\t\\t\\trunContinuation1(cont.fulfilled, this, cont.receiver, cont.resolver);\\n\\t\\t};\\n\\n\\t\\tvar errorId = 0;\\n\\n\\t\\t/**\\n\\t\\t * Handler for a rejected promise\\n\\t\\t * @param {*} x rejection reason\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction Rejected(x) {\\n\\t\\t\\tPromise.createContext(this);\\n\\n\\t\\t\\tthis.id = ++errorId;\\n\\t\\t\\tthis.value = x;\\n\\t\\t\\tthis.handled = false;\\n\\t\\t\\tthis.reported = false;\\n\\n\\t\\t\\tthis._report();\\n\\t\\t}\\n\\n\\t\\tinherit(Handler, Rejected);\\n\\n\\t\\tRejected.prototype._state = -1;\\n\\n\\t\\tRejected.prototype.fold = function(f, z, c, to) {\\n\\t\\t\\tto.become(this);\\n\\t\\t};\\n\\n\\t\\tRejected.prototype.when = function(cont) {\\n\\t\\t\\tif(typeof cont.rejected === 'function') {\\n\\t\\t\\t\\tthis._unreport();\\n\\t\\t\\t}\\n\\t\\t\\trunContinuation1(cont.rejected, this, cont.receiver, cont.resolver);\\n\\t\\t};\\n\\n\\t\\tRejected.prototype._report = function(context) {\\n\\t\\t\\ttasks.afterQueue(new ReportTask(this, context));\\n\\t\\t};\\n\\n\\t\\tRejected.prototype._unreport = function() {\\n\\t\\t\\tthis.handled = true;\\n\\t\\t\\ttasks.afterQueue(new UnreportTask(this));\\n\\t\\t};\\n\\n\\t\\tRejected.prototype.fail = function(context) {\\n\\t\\t\\tPromise.onFatalRejection(this, context === void 0 ? this.context : context);\\n\\t\\t};\\n\\n\\t\\tfunction ReportTask(rejection, context) {\\n\\t\\t\\tthis.rejection = rejection;\\n\\t\\t\\tthis.context = context;\\n\\t\\t}\\n\\n\\t\\tReportTask.prototype.run = function() {\\n\\t\\t\\tif(!this.rejection.handled) {\\n\\t\\t\\t\\tthis.rejection.reported = true;\\n\\t\\t\\t\\tPromise.onPotentiallyUnhandledRejection(this.rejection, this.context);\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\tfunction UnreportTask(rejection) {\\n\\t\\t\\tthis.rejection = rejection;\\n\\t\\t}\\n\\n\\t\\tUnreportTask.prototype.run = function() {\\n\\t\\t\\tif(this.rejection.reported) {\\n\\t\\t\\t\\tPromise.onPotentiallyUnhandledRejectionHandled(this.rejection);\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\t// Unhandled rejection hooks\\n\\t\\t// By default, everything is a noop\\n\\n\\t\\t// TODO: Better names: \\\"annotate\\\"?\\n\\t\\tPromise.createContext\\n\\t\\t\\t= Promise.enterContext\\n\\t\\t\\t= Promise.exitContext\\n\\t\\t\\t= Promise.onPotentiallyUnhandledRejection\\n\\t\\t\\t= Promise.onPotentiallyUnhandledRejectionHandled\\n\\t\\t\\t= Promise.onFatalRejection\\n\\t\\t\\t= noop;\\n\\n\\t\\t// Errors and singletons\\n\\n\\t\\tvar foreverPendingHandler = new Handler();\\n\\t\\tvar foreverPendingPromise = new Promise(Handler, foreverPendingHandler);\\n\\n\\t\\tfunction cycle() {\\n\\t\\t\\treturn new Rejected(new TypeError('Promise cycle'));\\n\\t\\t}\\n\\n\\t\\t// Task runners\\n\\n\\t\\t/**\\n\\t\\t * Run a single consumer\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction ContinuationTask(continuation, handler) {\\n\\t\\t\\tthis.continuation = continuation;\\n\\t\\t\\tthis.handler = handler;\\n\\t\\t}\\n\\n\\t\\tContinuationTask.prototype.run = function() {\\n\\t\\t\\tthis.handler.join().when(this.continuation);\\n\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * Run a queue of progress handlers\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction ProgressTask(value, handler) {\\n\\t\\t\\tthis.handler = handler;\\n\\t\\t\\tthis.value = value;\\n\\t\\t}\\n\\n\\t\\tProgressTask.prototype.run = function() {\\n\\t\\t\\tvar q = this.handler.consumers;\\n\\t\\t\\tif(q === void 0) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\n\\t\\t\\tfor (var c, i = 0; i < q.length; ++i) {\\n\\t\\t\\t\\tc = q[i];\\n\\t\\t\\t\\trunNotify(c.progress, this.value, this.handler, c.receiver, c.resolver);\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\t/**\\n\\t\\t * Assimilate a thenable, sending it's value to resolver\\n\\t\\t * @param {function} then\\n\\t\\t * @param {object|function} thenable\\n\\t\\t * @param {object} resolver\\n\\t\\t * @constructor\\n\\t\\t */\\n\\t\\tfunction AssimilateTask(then, thenable, resolver) {\\n\\t\\t\\tthis._then = then;\\n\\t\\t\\tthis.thenable = thenable;\\n\\t\\t\\tthis.resolver = resolver;\\n\\t\\t}\\n\\n\\t\\tAssimilateTask.prototype.run = function() {\\n\\t\\t\\tvar h = this.resolver;\\n\\t\\t\\ttryAssimilate(this._then, this.thenable, _resolve, _reject, _notify);\\n\\n\\t\\t\\tfunction _resolve(x) { h.resolve(x); }\\n\\t\\t\\tfunction _reject(x)  { h.reject(x); }\\n\\t\\t\\tfunction _notify(x)  { h.notify(x); }\\n\\t\\t};\\n\\n\\t\\tfunction tryAssimilate(then, thenable, resolve, reject, notify) {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tthen.call(thenable, resolve, reject, notify);\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\treject(e);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Other helpers\\n\\n\\t\\t/**\\n\\t\\t * @param {*} x\\n\\t\\t * @returns {boolean} true iff x is a trusted Promise\\n\\t\\t */\\n\\t\\tfunction isPromise(x) {\\n\\t\\t\\treturn x instanceof Promise;\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Test just enough to rule out primitives, in order to take faster\\n\\t\\t * paths in some code\\n\\t\\t * @param {*} x\\n\\t\\t * @returns {boolean} false iff x is guaranteed *not* to be a thenable\\n\\t\\t */\\n\\t\\tfunction maybeThenable(x) {\\n\\t\\t\\treturn (typeof x === 'object' || typeof x === 'function') && x !== null;\\n\\t\\t}\\n\\n\\t\\tfunction runContinuation1(f, h, receiver, next) {\\n\\t\\t\\tif(typeof f !== 'function') {\\n\\t\\t\\t\\treturn next.become(h);\\n\\t\\t\\t}\\n\\n\\t\\t\\tPromise.enterContext(h);\\n\\t\\t\\ttryCatchReject(f, h.value, receiver, next);\\n\\t\\t\\tPromise.exitContext();\\n\\t\\t}\\n\\n\\t\\tfunction runContinuation3(f, x, h, receiver, next) {\\n\\t\\t\\tif(typeof f !== 'function') {\\n\\t\\t\\t\\treturn next.become(h);\\n\\t\\t\\t}\\n\\n\\t\\t\\tPromise.enterContext(h);\\n\\t\\t\\ttryCatchReject3(f, x, h.value, receiver, next);\\n\\t\\t\\tPromise.exitContext();\\n\\t\\t}\\n\\n\\t\\tfunction runNotify(f, x, h, receiver, next) {\\n\\t\\t\\tif(typeof f !== 'function') {\\n\\t\\t\\t\\treturn next.notify(x);\\n\\t\\t\\t}\\n\\n\\t\\t\\tPromise.enterContext(h);\\n\\t\\t\\ttryCatchReturn(f, x, receiver, next);\\n\\t\\t\\tPromise.exitContext();\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Return f.call(thisArg, x), or if it throws return a rejected promise for\\n\\t\\t * the thrown exception\\n\\t\\t */\\n\\t\\tfunction tryCatchReject(f, x, thisArg, next) {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tnext.become(getHandler(f.call(thisArg, x)));\\n\\t\\t\\t} catch(e) {\\n\\t\\t\\t\\tnext.become(new Rejected(e));\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Same as above, but includes the extra argument parameter.\\n\\t\\t */\\n\\t\\tfunction tryCatchReject3(f, x, y, thisArg, next) {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tf.call(thisArg, x, y, next);\\n\\t\\t\\t} catch(e) {\\n\\t\\t\\t\\tnext.become(new Rejected(e));\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Return f.call(thisArg, x), or if it throws, *return* the exception\\n\\t\\t */\\n\\t\\tfunction tryCatchReturn(f, x, thisArg, next) {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tnext.notify(f.call(thisArg, x));\\n\\t\\t\\t} catch(e) {\\n\\t\\t\\t\\tnext.notify(e);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tfunction inherit(Parent, Child) {\\n\\t\\t\\tChild.prototype = objectCreate(Parent.prototype);\\n\\t\\t\\tChild.prototype.constructor = Child;\\n\\t\\t}\\n\\n\\t\\tfunction noop() {}\\n\\n\\t\\treturn Promise;\\n\\t};\\n}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n}(__webpack_require__(/*! !webpack amd define */ 193)));\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/when/lib/makePromise.js\\n ** module id = 194\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/when/lib/makePromise.js?\");\n\n/***/ },\n/* 195 */\n/*!************************************************!*\\\n  !*** ./~/react-router/~/when/lib/Scheduler.js ***!\n  \\************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */\\n/** @author Brian Cavalier */\\n/** @author John Hann */\\n\\n(function(define) { 'use strict';\\n!(__WEBPACK_AMD_DEFINE_RESULT__ = function(require) {\\n\\n\\tvar Queue = __webpack_require__(/*! ./Queue */ 196);\\n\\n\\t// Credit to Twisol (https://github.com/Twisol) for suggesting\\n\\t// this type of extensible queue + trampoline approach for next-tick conflation.\\n\\n\\t/**\\n\\t * Async task scheduler\\n\\t * @param {function} async function to schedule a single async function\\n\\t * @constructor\\n\\t */\\n\\tfunction Scheduler(async) {\\n\\t\\tthis._async = async;\\n\\t\\tthis._queue = new Queue(15);\\n\\t\\tthis._afterQueue = new Queue(5);\\n\\t\\tthis._running = false;\\n\\n\\t\\tvar self = this;\\n\\t\\tthis.drain = function() {\\n\\t\\t\\tself._drain();\\n\\t\\t};\\n\\t}\\n\\n\\t/**\\n\\t * Enqueue a task\\n\\t * @param {{ run:function }} task\\n\\t */\\n\\tScheduler.prototype.enqueue = function(task) {\\n\\t\\tthis._add(this._queue, task);\\n\\t};\\n\\n\\t/**\\n\\t * Enqueue a task to run after the main task queue\\n\\t * @param {{ run:function }} task\\n\\t */\\n\\tScheduler.prototype.afterQueue = function(task) {\\n\\t\\tthis._add(this._afterQueue, task);\\n\\t};\\n\\n\\t/**\\n\\t * Drain the handler queue entirely, and then the after queue\\n\\t */\\n\\tScheduler.prototype._drain = function() {\\n\\t\\trunQueue(this._queue);\\n\\t\\tthis._running = false;\\n\\t\\trunQueue(this._afterQueue);\\n\\t};\\n\\n\\t/**\\n\\t * Add a task to the q, and schedule drain if not already scheduled\\n\\t * @param {Queue} queue\\n\\t * @param {{run:function}} task\\n\\t * @private\\n\\t */\\n\\tScheduler.prototype._add = function(queue, task) {\\n\\t\\tqueue.push(task);\\n\\t\\tif(!this._running) {\\n\\t\\t\\tthis._running = true;\\n\\t\\t\\tthis._async(this.drain);\\n\\t\\t}\\n\\t};\\n\\n\\t/**\\n\\t * Run all the tasks in the q\\n\\t * @param queue\\n\\t */\\n\\tfunction runQueue(queue) {\\n\\t\\twhile(queue.length > 0) {\\n\\t\\t\\tqueue.shift().run();\\n\\t\\t}\\n\\t}\\n\\n\\treturn Scheduler;\\n\\n}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n}(__webpack_require__(/*! !webpack amd define */ 193)));\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/when/lib/Scheduler.js\\n ** module id = 195\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/when/lib/Scheduler.js?\");\n\n/***/ },\n/* 196 */\n/*!********************************************!*\\\n  !*** ./~/react-router/~/when/lib/Queue.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var __WEBPACK_AMD_DEFINE_RESULT__;/** @license MIT License (c) copyright 2010-2014 original author or authors */\\n/** @author Brian Cavalier */\\n/** @author John Hann */\\n\\n(function(define) { 'use strict';\\n!(__WEBPACK_AMD_DEFINE_RESULT__ = function() {\\n\\t/**\\n\\t * Circular queue\\n\\t * @param {number} capacityPow2 power of 2 to which this queue's capacity\\n\\t *  will be set initially. eg when capacityPow2 == 3, queue capacity\\n\\t *  will be 8.\\n\\t * @constructor\\n\\t */\\n\\tfunction Queue(capacityPow2) {\\n\\t\\tthis.head = this.tail = this.length = 0;\\n\\t\\tthis.buffer = new Array(1 << capacityPow2);\\n\\t}\\n\\n\\tQueue.prototype.push = function(x) {\\n\\t\\tif(this.length === this.buffer.length) {\\n\\t\\t\\tthis._ensureCapacity(this.length * 2);\\n\\t\\t}\\n\\n\\t\\tthis.buffer[this.tail] = x;\\n\\t\\tthis.tail = (this.tail + 1) & (this.buffer.length - 1);\\n\\t\\t++this.length;\\n\\t\\treturn this.length;\\n\\t};\\n\\n\\tQueue.prototype.shift = function() {\\n\\t\\tvar x = this.buffer[this.head];\\n\\t\\tthis.buffer[this.head] = void 0;\\n\\t\\tthis.head = (this.head + 1) & (this.buffer.length - 1);\\n\\t\\t--this.length;\\n\\t\\treturn x;\\n\\t};\\n\\n\\tQueue.prototype._ensureCapacity = function(capacity) {\\n\\t\\tvar head = this.head;\\n\\t\\tvar buffer = this.buffer;\\n\\t\\tvar newBuffer = new Array(capacity);\\n\\t\\tvar i = 0;\\n\\t\\tvar len;\\n\\n\\t\\tif(head === 0) {\\n\\t\\t\\tlen = this.length;\\n\\t\\t\\tfor(; i<len; ++i) {\\n\\t\\t\\t\\tnewBuffer[i] = buffer[i];\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tcapacity = buffer.length;\\n\\t\\t\\tlen = this.tail;\\n\\t\\t\\tfor(; head<capacity; ++i, ++head) {\\n\\t\\t\\t\\tnewBuffer[i] = buffer[head];\\n\\t\\t\\t}\\n\\n\\t\\t\\tfor(head=0; head<len; ++i, ++head) {\\n\\t\\t\\t\\tnewBuffer[i] = buffer[head];\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tthis.buffer = newBuffer;\\n\\t\\tthis.head = 0;\\n\\t\\tthis.tail = this.length;\\n\\t};\\n\\n\\treturn Queue;\\n\\n}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n}(__webpack_require__(/*! !webpack amd define */ 193)));\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/when/lib/Queue.js\\n ** module id = 196\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/when/lib/Queue.js?\");\n\n/***/ },\n/* 197 */\n/*!********************************************!*\\\n  !*** ./~/react-router/~/when/lib/async.js ***!\n  \\********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var __WEBPACK_AMD_DEFINE_RESULT__;var require;/* WEBPACK VAR INJECTION */(function(process) {/** @license MIT License (c) copyright 2010-2014 original author or authors */\\n/** @author Brian Cavalier */\\n/** @author John Hann */\\n\\n(function(define) { 'use strict';\\n!(__WEBPACK_AMD_DEFINE_RESULT__ = function(require) {\\n\\n\\t// Sniff \\\"best\\\" async scheduling option\\n\\t// Prefer process.nextTick or MutationObserver, then check for\\n\\t// vertx and finally fall back to setTimeout\\n\\n\\t/*jshint maxcomplexity:6*/\\n\\t/*global process,document,setTimeout,MutationObserver,WebKitMutationObserver*/\\n\\tvar nextTick, MutationObs;\\n\\n\\tif (typeof process !== 'undefined' && process !== null &&\\n\\t\\ttypeof process.nextTick === 'function') {\\n\\t\\tnextTick = function(f) {\\n\\t\\t\\tprocess.nextTick(f);\\n\\t\\t};\\n\\n\\t} else if (MutationObs =\\n\\t\\t(typeof MutationObserver === 'function' && MutationObserver) ||\\n\\t\\t(typeof WebKitMutationObserver === 'function' && WebKitMutationObserver)) {\\n\\t\\tnextTick = (function (document, MutationObserver) {\\n\\t\\t\\tvar scheduled;\\n\\t\\t\\tvar el = document.createElement('div');\\n\\t\\t\\tvar o = new MutationObserver(run);\\n\\t\\t\\to.observe(el, { attributes: true });\\n\\n\\t\\t\\tfunction run() {\\n\\t\\t\\t\\tvar f = scheduled;\\n\\t\\t\\t\\tscheduled = void 0;\\n\\t\\t\\t\\tf();\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn function (f) {\\n\\t\\t\\t\\tscheduled = f;\\n\\t\\t\\t\\tel.setAttribute('class', 'x');\\n\\t\\t\\t};\\n\\t\\t}(document, MutationObs));\\n\\n\\t} else {\\n\\t\\tnextTick = (function(cjsRequire) {\\n\\t\\t\\tvar vertx;\\n\\t\\t\\ttry {\\n\\t\\t\\t\\t// vert.x 1.x || 2.x\\n\\t\\t\\t\\tvertx = __webpack_require__(/*! vertx */ 198);\\n\\t\\t\\t} catch (ignore) {}\\n\\n\\t\\t\\tif (vertx) {\\n\\t\\t\\t\\tif (typeof vertx.runOnLoop === 'function') {\\n\\t\\t\\t\\t\\treturn vertx.runOnLoop;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (typeof vertx.runOnContext === 'function') {\\n\\t\\t\\t\\t\\treturn vertx.runOnContext;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t// capture setTimeout to avoid being caught by fake timers\\n\\t\\t\\t// used in time based tests\\n\\t\\t\\tvar capturedSetTimeout = setTimeout;\\n\\t\\t\\treturn function (t) {\\n\\t\\t\\t\\tcapturedSetTimeout(t, 0);\\n\\t\\t\\t};\\n\\t\\t}(require));\\n\\t}\\n\\n\\treturn nextTick;\\n}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n}(__webpack_require__(/*! !webpack amd define */ 193)));\\n\\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(/*! (webpack)/~/node-libs-browser/~/process/browser.js */ 3)))\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/~/when/lib/async.js\\n ** module id = 197\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/~/when/lib/async.js?\");\n\n/***/ },\n/* 198 */\n/*!***********************!*\\\n  !*** vertx (ignored) ***!\n  \\***********************/\n/***/ function(module, exports) {\n\n\teval(\"/* (ignored) */\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** vertx (ignored)\\n ** module id = 198\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///vertx_(ignored)?\");\n\n/***/ },\n/* 199 */\n/*!******************************************************!*\\\n  !*** ./~/react-router/modules/utils/Cancellation.js ***!\n  \\******************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/**\\n * Represents a cancellation caused by navigating away\\n * before the previous transition has fully resolved.\\n */\\nfunction Cancellation() { }\\n\\nmodule.exports = Cancellation;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/Cancellation.js\\n ** module id = 199\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/Cancellation.js?\");\n\n/***/ },\n/* 200 */\n/*!***************************************************!*\\\n  !*** ./~/react-router/modules/utils/runRouter.js ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"var createRouter = __webpack_require__(/*! ./createRouter */ 181);\\n\\n/**\\n * A high-level convenience method that creates, configures, and\\n * runs a router in one shot. The method signature is:\\n *\\n *   Router.run(routes[, location ], callback);\\n *\\n * Using `window.location.hash` to manage the URL, you could do:\\n *\\n *   Router.run(routes, function (Handler) {\\n *     React.render(<Handler/>, document.body);\\n *   });\\n * \\n * Using HTML5 history and a custom \\\"cursor\\\" prop:\\n * \\n *   Router.run(routes, Router.HistoryLocation, function (Handler) {\\n *     React.render(<Handler cursor={cursor}/>, document.body);\\n *   });\\n *\\n * Returns the newly created router.\\n *\\n * Note: If you need to specify further options for your router such\\n * as error/abort handling or custom scroll behavior, use Router.create\\n * instead.\\n *\\n *   var router = Router.create(options);\\n *   router.run(function (Handler) {\\n *     // ...\\n *   });\\n */\\nfunction runRouter(routes, location, callback) {\\n  if (typeof location === 'function') {\\n    callback = location;\\n    location = null;\\n  }\\n\\n  var router = createRouter({\\n    routes: routes,\\n    location: location\\n  });\\n\\n  router.run(callback);\\n\\n  return router;\\n}\\n\\nmodule.exports = runRouter;\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./~/react-router/modules/utils/runRouter.js\\n ** module id = 200\\n ** module chunks = 0 1\\n **/\\n//# sourceURL=webpack:///./~/react-router/modules/utils/runRouter.js?\");\n\n/***/ },\n/* 201 */,\n/* 202 */,\n/* 203 */,\n/* 204 */,\n/* 205 */,\n/* 206 */,\n/* 207 */,\n/* 208 */,\n/* 209 */,\n/* 210 */,\n/* 211 */,\n/* 212 */,\n/* 213 */,\n/* 214 */,\n/* 215 */,\n/* 216 */,\n/* 217 */,\n/* 218 */,\n/* 219 */,\n/* 220 */,\n/* 221 */,\n/* 222 */,\n/* 223 */,\n/* 224 */,\n/* 225 */,\n/* 226 */,\n/* 227 */,\n/* 228 */,\n/* 229 */,\n/* 230 */,\n/* 231 */,\n/* 232 */,\n/* 233 */,\n/* 234 */,\n/* 235 */,\n/* 236 */,\n/* 237 */,\n/* 238 */,\n/* 239 */,\n/* 240 */,\n/* 241 */,\n/* 242 */,\n/* 243 */,\n/* 244 */,\n/* 245 */,\n/* 246 */,\n/* 247 */,\n/* 248 */,\n/* 249 */,\n/* 250 */,\n/* 251 */,\n/* 252 */,\n/* 253 */,\n/* 254 */,\n/* 255 */,\n/* 256 */,\n/* 257 */,\n/* 258 */,\n/* 259 */,\n/* 260 */,\n/* 261 */,\n/* 262 */,\n/* 263 */,\n/* 264 */,\n/* 265 */,\n/* 266 */,\n/* 267 */,\n/* 268 */,\n/* 269 */,\n/* 270 */,\n/* 271 */,\n/* 272 */,\n/* 273 */,\n/* 274 */,\n/* 275 */,\n/* 276 */,\n/* 277 */,\n/* 278 */,\n/* 279 */\n/*!*************************************************!*\\\n  !*** ./javascript/structuremap-whatdoihave.jsx ***!\n  \\*************************************************/\n/***/ function(module, exports) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = FubuDiagnostics.React;\\r\\n\\r\\n\\r\\nvar WhatDoIHave = React.createClass({displayName: \\\"WhatDoIHave\\\",\\r\\n\\tgetInitialState: function(){\\r\\n\\t\\treturn {\\r\\n\\t\\t\\tloading: true\\r\\n\\t\\t}\\r\\n\\t},\\r\\n\\r\\n\\tcomponentDidMount: function(){\\r\\n\\t\\tFubuDiagnostics.get('StructureMap:whatdoihave', {}, function(data)  {\\r\\n\\t\\t\\tthis.setState({text: data, loading: false});\\r\\n\\t\\t}.bind(this));\\r\\n\\t},\\r\\n\\r\\n\\r\\n\\trender: function(){\\r\\n\\t\\tif (this.state.loading){\\r\\n\\t\\t\\treturn (React.createElement(\\\"p\\\", null, \\\"Loading...\\\"));\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn (React.createElement(\\\"pre\\\", null, this.state.text));\\r\\n\\t}\\r\\n});\\r\\n\\r\\nmodule.exports = WhatDoIHave;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/structuremap-whatdoihave.jsx\\n ** module id = 279\\n ** module chunks = 1\\n **/\\n//# sourceURL=webpack:///./javascript/structuremap-whatdoihave.jsx?\");\n\n/***/ },\n/* 280 */\n/*!*********************************!*\\\n  !*** ./javascript/settings.jsx ***!\n  \\*********************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = FubuDiagnostics.React;\\r\\nvar Router = __webpack_require__(/*! react-router */ 151);\\r\\n\\r\\nvar SettingsTable = React.createClass({displayName: \\\"SettingsTable\\\",\\r\\n\\tgetInitialState: function(){\\r\\n\\t\\treturn {\\r\\n\\t\\t\\tloading: true\\r\\n\\t\\t}\\r\\n\\t},\\r\\n\\r\\n\\tcomponentDidMount: function(){\\r\\n\\t\\tFubuDiagnostics.get('Settings:settings', {}, function(data)  {\\r\\n\\t\\t\\t_.assign(data, {loading: false});\\r\\n\\r\\n\\t\\t\\tthis.setState(data);\\r\\n\\t\\t}.bind(this));\\r\\n\\t},\\r\\n\\r\\n\\trender: function(){\\r\\n\\t\\tif (this.state.loading){\\r\\n\\t\\t\\treturn (React.createElement(\\\"p\\\", null, \\\"Loading...\\\"));\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tvar rows = this.state.settings.map(function(s, i){\\r\\n\\t\\t\\tvar url = \\\"#settings/setting-details/\\\" + encodeURIComponent(s.type);\\r\\n\\t\\t\\t\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"td\\\", {title: s.type}, React.createElement(\\\"a\\\", {href: url}, s.name)), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, s.description)\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t);\\r\\n\\t\\t});\\r\\n\\t\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"table\\\", {className: \\\"table table-striped\\\"}, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Type\\\"), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Description\\\")\\r\\n\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\trows\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\nvar SettingsDetail = React.createClass({displayName: \\\"SettingsDetail\\\",\\r\\n\\tmixins: [Router.State],\\r\\n\\r\\n\\tgetInitialState: function(){\\r\\n\\t\\treturn {\\r\\n\\t\\t\\tloading: true\\r\\n\\t\\t}\\r\\n\\t},\\r\\n\\r\\n\\tcomponentDidMount: function(){\\r\\n\\t\\tvar params = this.getParams();\\r\\n\\t\\tFubuDiagnostics.get('Settings:setting_Name', params, function(data)  {\\r\\n\\t\\t\\tthis.setState({data: data, loading: false});\\r\\n\\t\\t}.bind(this));\\r\\n\\t},\\r\\n\\r\\n\\r\\n\\trender: function(){\\r\\n\\t\\tif (this.state.loading){\\r\\n\\t\\t\\treturn (React.createElement(\\\"p\\\", null, \\\"Loading...\\\"));\\r\\n\\t\\t}\\r\\n\\r\\n\\r\\n\\t\\tif (this.state.data.type == 'json'){\\r\\n\\t\\t\\tvar json = JSON.stringify(this.state.data.body, null, 4);\\r\\n\\t\\t\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(\\\"div\\\", null, \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"h3\\\", null, this.state.data.title), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"pre\\\", null, json)\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t);\\r\\n\\t\\t}\\r\\n\\t\\telse{\\r\\n\\t\\t\\treturn (\\r\\n\\t\\t\\t\\tReact.createElement(\\\"div\\\", null, \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"h3\\\", null, this.state.data.title), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"div\\\", {dangerouslySetInnerHTML: {\\r\\n\\t\\t\\t\\t\\t\\t__html: this.state.data.body\\r\\n\\t\\t\\t\\t\\t  }})\\r\\n\\t\\t\\t\\t)\\r\\n\\t\\t\\t);\\r\\n\\t\\t}\\r\\n\\t}\\r\\n});\\r\\n\\r\\nFubuDiagnostics.addSection({\\r\\n    title: 'Settings',\\r\\n    description: \\\"All known 'Settings' types\\\",\\r\\n    key: 'settings',\\r\\n\\tcomponent: SettingsTable\\r\\n})\\r\\n.add({\\r\\n\\ttitle: 'Setting Details',\\r\\n\\tdescription: '',\\r\\n\\tkey: 'setting-details',\\r\\n\\troute: 'Settings:setting_Name',\\r\\n\\tcomponent: SettingsDetail\\r\\n});\\r\\n\\r\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/settings.jsx\\n ** module id = 280\\n ** module chunks = 1\\n **/\\n//# sourceURL=webpack:///./javascript/settings.jsx?\");\n\n/***/ },\n/* 281 */\n/*!*********************************************!*\\\n  !*** ./javascript/structuremap-summary.jsx ***!\n  \\*********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = FubuDiagnostics.React;\\r\\nvar SearchBox = __webpack_require__(/*! ./structuremap-searchbox */ 282);\\r\\n\\r\\nvar AssemblySummaryItem = React.createClass({displayName: \\\"AssemblySummaryItem\\\",\\r\\n\\trender: function(){\\r\\n\\t\\tvar url = '#structuremap/search-results/Assembly/' + this.props.name;\\r\\n\\r\\n\\t\\treturn (\\r\\n\\t\\t  React.createElement(\\\"li\\\", {className: \\\"list-group-item\\\"}, \\r\\n\\t\\t\\tReact.createElement(\\\"span\\\", {className: \\\"badge\\\"}, this.props.count), \\r\\n\\t\\t\\tReact.createElement(\\\"b\\\", null, React.createElement(\\\"a\\\", {href: url}, this.props.name))\\r\\n\\t\\t  )\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\nvar NamespaceSummaryItem = React.createClass({displayName: \\\"NamespaceSummaryItem\\\",\\r\\n\\trender: function(){\\r\\n\\t  var url = '#structuremap/search-results/Namespace/' + this.props.name;\\r\\n\\t\\r\\n\\t  return (\\r\\n\\t\\t  React.createElement(\\\"li\\\", {className: \\\"list-group-item\\\"}, \\r\\n\\t\\t\\tReact.createElement(\\\"span\\\", {className: \\\"badge\\\"}, this.props.count), \\r\\n\\t\\t\\tReact.createElement(\\\"a\\\", {href: url}, this.props.name)\\r\\n\\t\\t  )\\r\\n\\t  );\\r\\n\\t}\\r\\n});\\r\\n\\r\\n\\r\\n\\r\\nvar Summary = React.createClass({displayName: \\\"Summary\\\",\\r\\n\\tgetInitialState: function(){\\r\\n\\t\\treturn {\\r\\n\\t\\t\\tloading: true\\r\\n\\t\\t}\\r\\n\\t},\\r\\n\\r\\n\\tcomponentDidMount: function(){\\r\\n\\t\\tFubuDiagnostics.get('StructureMap:summary', {}, function(data)  {\\r\\n\\t\\t\\t_.assign(data, {loading: false});\\r\\n\\r\\n\\t\\t\\tthis.setState(data);\\r\\n\\t\\t}.bind(this));\\r\\n\\t},\\r\\n\\r\\n\\trender: function(){\\r\\n\\t\\tif (this.state.loading){\\r\\n\\t\\t\\treturn (React.createElement(\\\"p\\\", null, \\\"Loading...\\\"));\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tvar items = [];\\r\\n\\r\\n\\t\\tthis.state.assemblies.forEach(function(assem, i){\\t\\t\\r\\n\\t\\t\\titems.push(AssemblySummaryItem(assem));\\r\\n\\t\\t\\t\\r\\n\\t\\t\\tassem.namespaces.forEach(function(ns){\\r\\n\\t\\t\\t\\titems.push(NamespaceSummaryItem(ns));\\r\\n\\t\\t\\t});\\r\\n\\t\\t\\t\\r\\n\\t\\t});\\r\\n\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"div\\\", null, \\r\\n\\r\\n\\t\\t\\tReact.createElement(SearchBox, null), \\r\\n\\t\\t\\t\\r\\n\\t\\t\\tReact.createElement(\\\"hr\\\", null), \\r\\n\\t\\t\\t\\r\\n\\t\\t\\tReact.createElement(\\\"ul\\\", {className: \\\"list-group\\\"}, \\r\\n\\t\\t\\t\\titems\\r\\n\\t\\t\\t)\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\r\\n\\t}\\r\\n});\\r\\n\\r\\nmodule.exports = Summary;\\r\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/structuremap-summary.jsx\\n ** module id = 281\\n ** module chunks = 1\\n **/\\n//# sourceURL=webpack:///./javascript/structuremap-summary.jsx?\");\n\n/***/ },\n/* 282 */\n/*!***********************************************!*\\\n  !*** ./javascript/structuremap-searchbox.jsx ***!\n  \\***********************************************/\n/***/ function(module, exports) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = FubuDiagnostics.React;\\r\\n\\r\\n\\r\\nfunction StructureMapSearch(){\\r\\n\\tvar self = this;\\r\\n\\t\\r\\n\\tself.options = null;\\r\\n\\t\\r\\n\\tself.find = function(query){\\r\\n\\t\\tquery = query.toLowerCase();\\r\\n\\t\\r\\n\\t\\tvar matches = _.filter(self.options, function(o){\\r\\n\\t\\t\\ttry {\\r\\n\\t\\t\\t\\treturn o.display.toLowerCase().indexOf(query) > -1;\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tcatch (e){\\r\\n\\t\\t\\t\\treturn false;\\r\\n\\t\\t\\t}\\r\\n\\t\\t});\\r\\n\\r\\n\\t\\treturn matches;\\r\\n\\t}\\r\\n\\t\\r\\n\\tself.findMatches = function(query, callback){\\r\\n\\t\\tif (self.options == null){\\r\\n\\t\\t\\tFubuDiagnostics.get('StructureMap:search_options', {}, function(data){\\r\\n\\t\\t\\t\\tif (typeof data == 'string'){\\r\\n\\t\\t\\t\\t\\tdata = JSON.parse(data);\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\tself.options = data;\\r\\n\\t\\t\\t\\tcallback(self.find(query));\\r\\n\\t\\t\\t});\\r\\n\\t\\t}\\r\\n\\t\\telse{\\r\\n\\t\\t\\tcallback(self.find(query));\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\t\\r\\n\\treturn self;\\r\\n}\\r\\n\\r\\n\\r\\nFubuDiagnostics.StructureMapSearch = new StructureMapSearch();\\r\\n\\r\\n\\r\\nvar SearchBox = React.createClass({displayName: \\\"SearchBox\\\",\\r\\n\\tcomponentDidMount: function(){\\r\\n\\t\\r\\n\\t\\tvar element = this.getDOMNode();\\r\\n\\t\\t$(element).typeahead({\\r\\n\\t\\t  minLength: 5,\\r\\n\\t\\t  highlight: true\\r\\n\\t\\t},\\r\\n\\t\\t{\\r\\n\\t\\t  name: 'structuremap',\\r\\n\\t\\t  displayKey: 'value',\\r\\n\\t\\t  \\r\\n\\t\\t  source: FubuDiagnostics.StructureMapSearch.findMatches,\\r\\n\\t\\t  templates: {\\r\\n\\t\\t\\tempty: '<div class=\\\"empty-message\\\">No matches found</div>',\\r\\n\\t\\t\\tsuggestion: _.template('<div><p><%= display%> - <small><%= type%></small></p><p><small><%= value%></small></p></div>')\\r\\n\\t\\t  }\\r\\n\\t\\t});\\r\\n\\t\\t\\r\\n\\t\\t$(element).on('typeahead:selected', function(jquery, option){\\r\\n\\t\\t\\tvar url = '#/structuremap/search-results/' + option.type + '/' + option.value;\\r\\n\\t\\t\\twindow.location = url;\\r\\n\\t\\t});\\r\\n\\t},\\r\\n\\t\\r\\n\\tcomponentWillUnmount: function(){\\r\\n\\t\\tvar element = this.getDOMNode();\\r\\n\\t\\t$(element).typeahead('destroy');\\r\\n\\t},\\r\\n\\r\\n\\trender: function(){\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"input\\\", {type: \\\"search\\\", name: \\\"search\\\", ref: \\\"input\\\", className: \\\"form-control typeahead structuremap-search\\\", placeholder: \\\"Search the application container\\\"})\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\nmodule.exports = SearchBox;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/structuremap-searchbox.jsx\\n ** module id = 282\\n ** module chunks = 1\\n **/\\n//# sourceURL=webpack:///./javascript/structuremap-searchbox.jsx?\");\n\n/***/ },\n/* 283 */\n/*!***********************************************!*\\\n  !*** ./javascript/structuremap-buildplan.jsx ***!\n  \\***********************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = FubuDiagnostics.React;\\r\\nvar Router = __webpack_require__(/*! react-router */ 151);\\r\\n\\r\\nvar BuildPlanView = React.createClass({displayName: \\\"BuildPlanView\\\",\\r\\n\\tmixins: [Router.State],\\r\\n\\r\\n\\tgetInitialState: function(){\\r\\n\\t\\treturn {\\r\\n\\t\\t\\tloading: true\\r\\n\\t\\t}\\r\\n\\t},\\r\\n\\r\\n\\tcomponentDidMount: function(){\\r\\n\\t\\tvar params = this.getParams();\\r\\n\\t\\tFubuDiagnostics.get('StructureMap:build_plan_PluginType_Name', params, function(data)  {\\r\\n\\t\\t\\tthis.setState({text: data, loading: false});\\r\\n\\t\\t}.bind(this));\\r\\n\\t},\\r\\n\\r\\n\\r\\n\\trender: function(){\\r\\n\\t\\tif (this.state.loading){\\r\\n\\t\\t\\treturn (React.createElement(\\\"p\\\", null, \\\"Loading...\\\"));\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tvar params = this.getParams();\\r\\n\\r\\n\\t\\treturn (\\r\\n\\r\\n\\t\\t\\tReact.createElement(\\\"div\\\", null, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"h3\\\", null, \\\"PluginType: \\\", params.PluginType, \\\", Instance \\\", params.Name), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"pre\\\", null, this.state.text)\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\n\\r\\nmodule.exports = BuildPlanView;\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/structuremap-buildplan.jsx\\n ** module id = 283\\n ** module chunks = 1\\n **/\\n//# sourceURL=webpack:///./javascript/structuremap-buildplan.jsx?\");\n\n/***/ },\n/* 284 */\n/*!***************************************************!*\\\n  !*** ./javascript/structuremap-searchresults.jsx ***!\n  \\***************************************************/\n/***/ function(module, exports, __webpack_require__) {\n\n\teval(\"/** @jsx React.DOM */\\r\\n\\r\\nvar React = FubuDiagnostics.React;\\r\\nvar Router = __webpack_require__(/*! react-router */ 151);\\r\\nvar _ = __webpack_require__(/*! lodash */ 148);\\r\\nvar SearchBox = __webpack_require__(/*! ./structuremap-searchbox */ 282);\\r\\n\\r\\nvar InstanceRow = React.createClass({displayName: \\\"InstanceRow\\\",\\r\\n\\trender: function(){\\r\\n\\t\\tvar url = '#structuremap/buildplan/' + this.props._key;\\r\\n\\t\\tvar familyUrl = '#structuremap/search-results/Plugin-Type/' + this.props.pluginType;\\r\\n\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, React.createElement(\\\"a\\\", {href: familyUrl}, this.props.pluginType)), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, React.createElement(\\\"a\\\", {href: url}, this.props.name)), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, this.props.lifecycle), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, this.props.returnedType), \\r\\n\\t\\t\\t\\tReact.createElement(\\\"td\\\", null, this.props.description)\\r\\n\\t\\t\\t)\\t\\t\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\nvar InstanceResults = React.createClass({displayName: \\\"InstanceResults\\\",\\r\\n\\trender: function(){\\r\\n\\t\\tvar items = this.props.instances.map(function(instance, i){\\r\\n\\t\\t\\tinstance._key = instance.key;\\r\\n\\t\\t\\treturn InstanceRow(instance);\\r\\n\\t\\t});\\r\\n\\t\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"table\\\", {className: \\\"table table-striped\\\"}, \\r\\n\\t\\t\\t\\tReact.createElement(\\\"tr\\\", null, \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Plugin Type\\\"), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Name\\\"), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Lifecycle\\\"), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Returned Type\\\"), \\r\\n\\t\\t\\t\\t\\tReact.createElement(\\\"th\\\", null, \\\"Description\\\")\\r\\n\\t\\t\\t\\t), \\r\\n\\t\\t\\t\\titems\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\n\\r\\nfunction BuildPluginTypeData(pluginType){\\r\\n\\tvar items = [];\\r\\n\\t\\r\\n\\tif (pluginType.defaultInstance){\\r\\n\\t\\titems.push(pluginType.defaultInstance);\\r\\n\\t}\\r\\n\\telse{\\r\\n\\t\\titems.push({\\r\\n\\t\\t\\tpluginType: pluginType.pluginType,\\r\\n\\t\\t\\tlifecycle: pluginType.lifecycle,\\r\\n\\t\\t\\treturnedType: '',\\r\\n\\t\\t\\tname: '',\\r\\n\\t\\t\\tdescription: ''\\r\\n\\t\\t});\\r\\n\\t}\\r\\n\\t\\r\\n\\titems = items.concat(pluginType.others);\\r\\n\\t\\r\\n\\tif (pluginType.missingName){\\r\\n\\t\\tpluginType.missingName.name = '(missing named instance)';\\r\\n\\t\\titems.push(pluginType.missingName);\\r\\n\\t}\\r\\n\\t\\r\\n\\tif (pluginType.fallback){\\r\\n\\t\\tpluginType.fallback.name = '(fallback)';\\r\\n\\t\\titems.push(pluginType.fallback);\\r\\n\\t}\\r\\n\\t\\r\\n\\tfor (var i = 1; i < items.length; i++){\\r\\n\\t\\titems[i].pluginType = '';\\r\\n\\t}\\r\\n\\t\\r\\n\\treturn items;\\r\\n}\\r\\n\\r\\n\\r\\nvar SearchTitle = React.createClass({displayName: \\\"SearchTitle\\\",\\r\\n\\trender: function(){\\r\\n\\t\\tvar type = this.props.search.Type.replace('-', ' ');\\r\\n\\t\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"h3\\\", null, \\\"Search Results: \\\", type, \\\"/\\\", this.props.search.Value)\\r\\n\\t\\t);\\r\\n\\t}\\r\\n});\\r\\n\\r\\n\\r\\n\\r\\nvar SearchResults = React.createClass({displayName: \\\"SearchResults\\\",\\r\\n\\tmixins: [Router.State],\\r\\n\\r\\n\\tgetInitialState: function(){\\r\\n\\t\\treturn {\\r\\n\\t\\t\\tloading: true\\r\\n\\t\\t}\\r\\n\\t},\\r\\n\\r\\n\\tcomponentDidMount: function(){\\r\\n\\t\\tvar params = this.getParams();\\r\\n\\t\\tFubuDiagnostics.get('StructureMap:search_Type_Value', params, function(data)  {\\r\\n\\t\\t\\t_.assign(data, {loading: false});\\r\\n\\r\\n\\t\\t\\tthis.setState(data);\\r\\n\\t\\t}.bind(this));\\r\\n\\t},\\r\\n\\r\\n\\r\\n\\trender: function(){\\r\\n\\t\\tif (this.state.loading){\\r\\n\\t\\t\\treturn (React.createElement(\\\"p\\\", null, \\\"Loading...\\\"));\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tvar instances = [];\\r\\n\\t\\r\\n\\t\\tif (this.state.search.Type == 'Returned-Type'){\\r\\n\\t\\t\\tinstances = this.state.instances;\\r\\n\\t\\t}\\r\\n\\t\\telse{\\r\\n\\t\\t\\tinstances = _.flatten(_.map(this.state.pluginTypes, BuildPluginTypeData));\\r\\n\\t\\t}\\r\\n\\t\\t\\r\\n\\t\\treturn (\\r\\n\\t\\t\\tReact.createElement(\\\"div\\\", null, \\r\\n\\t\\t\\t\\tReact.createElement(SearchBox, null), \\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\tReact.createElement(SearchTitle, {search: this.state.search}), \\r\\n\\t\\t\\t\\tReact.createElement(InstanceResults, {instances: instances})\\r\\n\\t\\t\\t)\\r\\n\\t\\t);\\r\\n\\r\\n\\t}\\r\\n});\\r\\n\\r\\n\\r\\n\\r\\nmodule.exports = SearchResults;\\r\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./javascript/structuremap-searchresults.jsx\\n ** module id = 284\\n ** module chunks = 1\\n **/\\n//# sourceURL=webpack:///./javascript/structuremap-searchresults.jsx?\");\n\n/***/ }\n/******/ ]);"
  },
  {
    "path": "src/TestHarnessApp/karma.conf.js",
    "content": "// Karma configuration\n\nmodule.exports = function(config) {\n  config.set({\n\n    // base path, that will be used to resolve files and exclude\n    basePath: '',\n\n\n    // frameworks to use\n    frameworks: ['jasmine', 'requirejs'],\n\n\n    // list of files / patterns to load in the browser\n    files: [\n      'test/test-main.js',\n      {pattern: 'test/**/*Spec.js', included: false},\n      {pattern: 'public/javascripts/**/*.js', included: false}\n    ],\n\n\n    // list of files to exclude\n    exclude: [\n      'public/javascripts/main.js'\n    ],\n\n\n    // test results reporter to use\n    // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage'\n    reporters: ['progress'],\n\n\n    // web server port\n    port: 9876,\n\n\n    // enable / disable colors in the output (reporters and logs)\n    colors: true,\n\n\n    // level of logging\n    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG\n    logLevel: config.LOG_INFO,\n\n\n    // enable / disable watching file and executing tests whenever any file changes\n    autoWatch: true,\n\n\n    // Start these browsers, currently available:\n    // - Chrome\n    // - ChromeCanary\n    // - Firefox\n    // - Opera (has to be installed with `npm install karma-opera-launcher`)\n    // - Safari (only Mac; has to be installed with `npm install karma-safari-launcher`)\n    // - PhantomJS\n    // - IE (only Windows; has to be installed with `npm install karma-ie-launcher`)\n    browsers: ['Chrome'],\n\n\n    // If browser does not capture in given timeout [ms], kill it\n    captureTimeout: 60000,\n\n\n    // Continuous Integration mode\n    // if true, it capture browsers, run tests and exit\n    singleRun: false\n  });\n};\n"
  },
  {
    "path": "src/TestHarnessApp/makefile",
    "content": "watch = mimosa watch\nbuild = mimosa build\n\n.PHONY : start startd build build-opt buildo clean pack package\n\nstart:\n\t@echo \"[x] Building assets and starting development server...\"\n\t@$(watch) -s\n\nstartd:\n\t@echo \"[x] Cleaning compiled directory, building assets and starting development server..\"\n\t@$(watch) -sd\n\nbuild:\n\t@echo \"[x] Building assets...\"\n\t@$(build)\n\nbuild-opt:\n\t@echo \"[x] Building and optimizing assets...\"\n\t@$(build) -o\n\nbuildo:\n\t@echo \"[x] Building and optimizing assets...\"\n\t@$(build) -o\n\nclean:\n\t@echo \"[x] Removing compiled files...\"\n\t@mimosa clean\n\npack:\n\t@echo \"[x] Building and packaging application...\"\n\t@$(build) -omp\n\npackage:\n\t@echo \"[x] Building and packaging application...\"\n\t@$(build) -omp"
  },
  {
    "path": "src/TestHarnessApp/mimosa-config-documented.coffee",
    "content": "# The following is a commented version of the mimosa-config with all of\n# the defaults listed. This file is meant for reference only.\n\nexports.config = {\n\n  # minMimosaVersion:null      # The minimum Mimosa version that must be installed to use the project.\n  # requiredMimosaVersion:null # The Mimosa version that must be installed to use the project.\n\n  ###\n  The list of Mimosa modules to use for this application. The defaults come bundled with Mimosa\n  and do not need to be installed. If a module is listed here that Mimosa is unaware of, Mimosa\n  will attempt to install it.\n  ###\n  modules: [\"server\",\"minify-js\",\"minify-css\",\"jshint\",\"csslint\",\"live-reload\",\"require\",\"bower\",\"copy\",\"less\"]\n\n  # watch:\n    # sourceDir: \"assets\"                # directory location of web assets, can be relative to\n                                         # the project root, or absolute\n    # compiledDir: \"public\"              # directory location of compiled web assets, can be\n                                         # relative to the project root, or absolute\n    # javascriptDir: \"javascripts\"       # Location of precompiled javascript (i.e.\n                                         # coffeescript), must be relative to sourceDir\n    # exclude: [/[/\\\\](\\.|~)[^/\\\\]+$/]   # regexes or strings matching the files to be\n                                         # ignored by mimosa, the default matches all sorts of\n                                         # dot files and temp files. Strings are paths and can\n                                         # be relative to sourceDir or absolute.\n    # throttle: 0                        # number of file adds the watcher handles before\n                                         # taking a 100 millisecond pause to let those files\n                                         # finish their processing. This helps avoid EMFILE\n                                         # issues for projects containing large numbers of\n                                         # files that all get copied at once. If the throttle\n                                         # is set to 0, no throttling is performed. Recommended\n                                         # to leave this set at 0, thedefault, until you start\n                                         # encountering EMFILE problems. throttle has no effect\n                                         # if usePolling is set to false.\n    # usePolling: true                   # WARNING: Do not change this default if you are on\n                                         # *Nix. Windows users, read on.\n                                         # Whether or not to poll for system file changes.\n                                         # Unless you have a lot files and your CPU starts\n                                         # running hot, it is best to leave this setting alone.\n    # interval: 100                      # Interval of file system polling.\n    # binaryInterval: 300                # Interval of file system polling for binary files\n\n  # vendor:                              # settings for vendor assets\n    # javascripts: \"javascripts/vendor\"  # location, relative to the watch.sourceDir, of vendor\n                                         # javascript assets. Unix style slashes please.\n    # stylesheets: \"stylesheets/vendor\"  # location, relative to the watch.sourceDir, of vendor\n                                         # stylesheet assets. Unix style slashes please.\n\t\n\n  # template:                         # overall template object can be set to null if no\n                                      # templates being used\n    # writeLibrary: true              # Whether or not to write a client library for\n                                      # any template compilers\n    # nameTransform: \"fileName\"       # means by which Mimosa creates the name for each\n                                      # template, options: default \"fileName\" is name of file,\n                                      # \"filePath\" is path of file after watch.sourceDir\n                                      # with the extension dropped, a supplied regex can be\n                                      # used to remove any unwanted portions of the filePath,\n                                      # and a provided function will be called with the\n                                      # filePath as input\n    # wrapType: \"amd\"                 # The type of module wrapping for the output templates\n                                      # file. Possible values: \"amd\", \"common\", \"none\".\n    # commonLibPath: null             # Valid when wrapType is 'common'. The path to the\n                                      # client library. Some libraries do not have clients\n                                      # therefore this is not strictly required when choosing\n                                      # the common wrapType.\n    # outputFileName: \"javascripts/templates\"  # the file all templates are compiled into,\n                                               # is relative to watch.sourceDir.\n\n    # outputFileName:                 # outputFileName Alternate Config 1\n      # hogan:\"hogans\"                # Optionally outputFileName can be provided an object of\n      # jade:\"jades\"                  # compiler name to file name in the event you are using\n                                      # multiple templating libraries.\n\n    # output: [{                      # output Alternate Config 2\n    #   folders:[\"\"]                  # Use output instead of outputFileName if you want\n    #   outputFileName: \"\"            # to break up your templates into multiple files, for\n    # }]                              # instance, if you have a two page app and want the\n                                      # templates for each page to be built separately.\n                                      # For each entry, provide an array of folders that\n                                      # contain the templates to combine.  folders entries are\n                                      # relative to watch.sourceDir and must exist.\n                                      # outputFileName works identically to outputFileName\n                                      # above, including the alternate config, however, no\n                                      # default file name is assumed. An output name must be\n                                      # provided for each output entry, and the names\n                                      # must be unique.\n\t\n\n  # logger:                  # logger settings, supported colors:\n                             # https://github.com/loopj/commonjs-ansi-color#supported-colorsformats\n    # info:                  # config for info level logging\n      # enabled: true        # if info level logging is enabled\n      # color: null          # color for info level logging, null is default terminal color\n    # warn:                  # config for warn level logging\n      # enabled: true        # if warn level logging is enabled\n      # color: 'yellow'      # color for warn level logging, null is default terminal color\n    # success:               # config for success level logging\n      # enabled: true        # if success level logging is enabled\n      # color: 'green+bold'  # color for success level logging, null is default terminal color\n    # error:                 # config for error level logging\n      # enabled: true        # if error level logging is enabled\n      # color: 'red+bold'    # color for error level logging, null is default terminal color\n    # debug:                 # config for debug level logging, debug is enabled with mimosa -D flag\n      # color: 'blue'        # color for debug level logging, null is default terminal color\n    # embeddedText:          # config for text surrounded in [[ ]] inside log messages\n      # enabled: true        # transforms [[ ]] and the text inside to just text inside and colorizes\n      # color: 'cyan'    # color for transformed embedded text\n    # growl:                 # Settings for growl notifications\n      # enabled: true        # Whether or not growl notificaations are enabled\n      # onStartup: false     # Controls whether or not to Growl when assets successfully\n                             # compile/copy on startup, If you've got 100 CoffeeScript files,\n                             # and you do a clean and then start watching, you'll get 100 Growl\n                             # notifications.  This is set to false by default to prevent that.\n                             # Growling for every successful file on startup can also cause\n                             # EMFILE issues. See watch.throttle\n      # onSuccess: true      # Controls whether to Growl when assets successfully compile/copy\n\t\n\n  # server:                      # configuration for server when server option is enabled via CLI\n    # defaultServer:\n      # enabled: false           # whether or not mimosa starts a default server for you, when\n                                 # true, mimosa starts its own on the port below, when false,\n                                 # Mimosa will use server provided by path below\n      # onePager: false          # Whether or not your app is a one page application. When set to\n                                 # true, all routes will be pointed at index\n    # path: 'server.coffee'      # valid when defaultServer.enabled: false, path to file for provided\n                                 # server which must contain export startServer method that takes\n                                 # an enriched mimosa-config object\n    # packageJSONDir: null       # If using own server, not default server, this is the location of\n                                 # project's package.json. Defaults to location of mimosa-config.\n    # port: 3000                 # port to start server on\n    # base: ''                   # base of url for the app, if altered should start with a slash\n    # views:                     # configuration for the view layer of your application\n      # compileWith: 'jade'      # Valid options: \"jade\", \"hogan\", \"html\", \"ejs\", \"handlebars\", \"dust\".\n                                 # The compiler for your views.\n      # extension: 'jade'        # extension of your server views\n      # path: 'views'            # This is the path to project views, it can be absolute or\n                                 # relative. If defaultServer.enabled is true, it is relative to the\n                                 # root of the project. If defaultServer.enabled is false it is\n                                 # relative to the server.path setting above.\n\n  # minifyJS:                     # Configuration for minifying/cleaning js using the\n                                  # --minify flag\n    # exclude:[/\\.min\\./]         # List of string paths and regexes to match files to exclude\n                                  # when running minification. Any path with \".min.\" in its name,\n                                  # is assumed to already be minified and is ignored by default.\n                                  # Paths can be relative to the watch.compiledDir, or absolute. \n                                  # Paths are to compiled files,  so '.js' rather than '.coffee'\n\n\n  # minifyCSS:                    # Configuration for minifying/cleaning css using the\n                                  # --minify flag\n    # exclude:[/\\.min\\./]         # List of string paths and regexes to match files to exclude\n                                  # when running minification. Any path with \".min.\" in its name,\n                                  # is assumed to already be minified and is ignored by default.\n                                  # Paths can be relative to the watch.compiledDir, or absolute. \n                                  # Paths are to compiled files,  so '.css' rather than '.styl'\n\n\n  # jshint:                    # settings for javascript hinting\n    # exclude:[]               # array of strings or regexes that match files to not jshint,\n                               # strings are paths that can be relative to the watch.sourceDir\n                               # or absolute\n    # compiled: true           # fire jshint on successful compile of meta-language to javascript\n    # copied: true             # fire jshint for copied javascript files\n    # vendor: false            # fire jshint for copied vendor javascript files (like jquery)\n    # jshintrc: \".jshintrc\"    # This is the path, either relative to the root of the project or\n                               # absolute, to a .jshintrc file. By default mimosa will look at\n                               # the root of the project for this file. The file does not need to\n                               # be present. If it is present, it must be valid JSON.\n    # rules:                   # Settings: http://www.jshint.com/options/, these settings will\n                               # override any settings set up in the jshintrc\n      # plusplus: true         # This is an example override, this is not a default\n\n  # csslint:                    # settings for javascript hinting\n    # exclude:[]               # array of strings or regexes that match files to not csslint,\n                               # strings are paths that can be relative to the watch.sourceDir\n                               # or absolute\n    # compiled: true           # fire csslint on successful compile of meta-language to javascript\n    # copied: true             # fire csslint for copied javascript files\n    # vendor: false            # fire csslint for copied vendor javascript files (like jquery)\n    # rules:                   # Settings: http://www.csslint.com/options/, these settings will\n                               # override any settings set up in the csslintrc\n      # floats: false          # This is an example override, this is not a default\n\t\n\n  # liveReload:                   # Configuration for live-reload\n    # enabled:true                # Whether or not live-reload is enabled\n    # additionalDirs:[\"views\"]    # Additional directories outside the watch.compiledDir\n                                  # that you would like to have trigger a page refresh,\n                                  # like, by default, static views. Is string path,\n                                  # can be relative to project root, or absolute\t\n\n  # require:                 # configuration for requirejs options.\n    # exclude:[]             # Regex or string paths. Paths can be absolute or relative to the\n                             # watch.javascriptDir. These files will be excluded from all\n                             # require module functionality. That includes AMD verification and\n                             # being considered a root level file to be optimized.\n    # commonConfig: \"common\" # The path from 'javascriptDir' to the location of common requirejs\n                             # config. This is config shared across multiple requirejs modules.\n                             # This should be either a require.config({}) or a requirejs.config({})\n                             # function call. Defaults to the value `common` - referring to a file\n                             # named common.js in the root of javascriptDir. Does not need to\n                             #  exist, so can be left alone if a commonConfig is not being used.\n    # tracking:              # every time mimosa starts up, mimosa-require needs to be able to\n                             # build a dependency graph for the codebase. It can do that by\n                             # processing all the files, but that means each file needs to be\n                             # processed when mimosa watch starts which slows down startup.\n                             # tracking allows mimosa-require to write interim state to the file\n                             # system so that from one mimosa run to another it can persist the\n                             # important information and not need the entire application to be\n                             # rebuilt\n      # enabled: true       # whether or not tracking is enabled\n      # path: \".mimosa/require/tracking.json\" # the path to the tracking file relative to the\n                             # root of the project.\n    # verify:                # settings for requirejs path verification\n      # enabled: true        # Whether or not to perform verification\n    # optimize :\n      # inferConfig:true     # Mimosa figures out all you'd need for a simple r.js optimizer run.\n                             # If you rather Mimosa not do that, set inferConfig to false and\n                             # provide your config in the overrides section. See here\n                             # https://github.com/dbashford/mimosa#requirejs-optimizer-defaults\n                             # to see what the defaults are.\n      # modules:             # If using a modules config, place it here. mimosa-require will use\n                             # the modules config directly, but also base many other r.js config\n                             # options based on a modules setup instead of a single file setup.\n      # moduleCachingPath: \".mimosa/require/moduleCaching\" # Only valid if using modules. This\n                             # path is where pristine root module files are kept in between r.js\n                             # runs. This cache allows you to keep \"mimosa watch\" running while\n                             # building and rebuilding your application.\n      # overrides:           # Optimization configuration and Mimosa overrides. If you need to\n                             # make tweaks uncomment this line and add the r.js config\n                             # (http://requirejs.org/docs/optimization.html#options) as new\n                             # paramters inside the overrides ojbect. To unset Mimosa's defaults,\n                             # set a property to null.\n                             #\n                             # overrides can also be a function that takes mimosa-require's\n                             # inferred config for each module. This allows the inferred config\n                             # to be updated and enhanced instead of just overridden.\t\n\n  # bower:                        # Configuration for bower module\n    # watch: true                 # Whether or not to watch the bower.json file to automatically\n                                  # kick off a bower install when it changes.\n    # bowerDir:\n      # path: \".mimosa/bower/bower_components\"  # The location mimosa-bower places temporary\n                                                # bower assets.\n      # clean: true               # whether or not to remove temporary bower assets after install\n\n    # copy:                       # configuration for the copying of assets from bower temp\n                                  # directories into the project\n      # enabled: true             # whether or not to copy the assets out of the bowerDir.path\n                                  # into the project vendor location\n      # trackChanges: true        # When set to true, mimosa-bower will keep track of your\n                                  # bower.json and mimosa-config \"bower\" configuration and kick\n                                  # off installs based on changes. When set to false, bower's\n                                  # default checking is used. This is based on the contents of\n                                  # bowerDir.path. If bowerDir.clean is true, and trackChanges is\n                                  # false, mimosa-bower will not perform installs during \"watch\"\n                                  # and \"build\" because installs would occur every time mimosa\n                                  # starts up.\n      # outRoot: null             # A string path to append to the vendor directory before\n                                  # copying in assets.  All copied assets would go inside this\n                                  # directory. Example: \"bower-managed\". null means no outRoot\n                                  # is applied.\n      # exclude:[]                # An array of string paths or regexes. Files to exclude from\n                                  # copying. Paths should be relative to the bowerdir.path or\n                                  # absolute.\n      # unknownMainFullCopy: false # When set to true, any bower package that does not have main\n                                  # files configured in its bower.json will have its entire\n                                  # folder contents copied in.\n      # mainOverrides: {}         # Occasionally bower packages do not clearly indicate what file\n                                  # is the main library file. In those cases, mimosa cannot find\n                                  # the main files to copy them to the vendor directory. json2 is\n                                  # a good example. mainOverrides allows for setting which files\n                                  # should be copied for a package. The key for this object is\n                                  # the name of the package. The value is an array of path\n                                  # strings representing the package's main files. The paths\n                                  # should be relative to the root of the package. For example:\n                                  # {\"json2\":[\"json2.js\",\"json_parse.js\"]}. The paths can also\n                                  # be to directories. That will include all the directory's\n                                  # files. mainOverrides packages can also be provided an object\n                                  # in addition to string paths. The object maps input paths to\n                                  # output paths and allow for specific placement of files and\n                                  # folders. Ex {\"json2\":[{\"json2.js\":\"json-utils/json2.js\"}]. In\n                                  # this case the \"json2.js\" file will be placed in\n                                  # \"json-utils/json2.js\" in the vendor.javascripts folder.\n      # strategy: \"packageRoot\"   # The copying strategy. \"vendorRoot\" places all files at the\n                                  # root of the vendor directory. \"packageRoot\" places the files\n                                  # in the vendor directory in a folder named for that package.\n                                  # \"none\" will copy the assets into the vendor directory without\n                                  # modification.  strategy can also be an object with keys that\n                                  # match the names of packages and values of strategy types.\n                                  # When using a strategy object, the key of \"*\" provides a\n                                  # default strategy. If only 2 of 10 packages are specified\n                                  # the rest get the \"*\" strategy. If no \"*\" is provided,\n                                  # \"packageRoot\" is the assumed default.\n      # forceLatest: true         # If you are running into a problem where dependency versions\n                                  # are clashing, use forceLatest to make it so the latest\n                                  # version is loaded.  For instance, you might have jquery 2.0.0\n                                  # as a package, but something else depends on 1.8.1.\n      # pathMod: []               # pathMod can be an array of strings or a regex. It is used to\n                                  # strip full pieces of a path from the output file when the\n                                  # selected strategy is \"none\". If a bower package script is in\n                                  # \"packageName/lib/js/foo.js\" and \"pathMod\" is set to\n                                  # ['js', 'lib'] the output path would have \"lib\" and \"js\"\n                                  # stripped. Feel free to suggest additions to this based on\n                                  # your experience!\n\t\n\n  ###\n  # the extensions of files to copy from sourceDir to compiledDir. vendor js/css, images, etc.\n  ###\n  # copy:              # config settings for the coffeescript compiler module\n    # extensions: [\"js\",\"css\",\"png\",\"jpg\",\"jpeg\",\"gif\",\"html\",\"eot\",\"svg\",\"ttf\",\"woff\",\"otf\",\"yaml\",\"kml\",\"ico\",\"htc\",\"htm\",\"json\",\"txt\",\"xml\",\"xsd\",\"map\",\"md\",\"mp4\",\"mp3\"]\n    # exclude: []      # List of regexes or strings to match files that should not be copied\n                       # but that you might still want processed. String paths can be absolute\n                       # or relative to the watch.sourceDir. Regexes are applied to the entire path.\n\t\n\n  less:                  # config settings for the Less compiler module\n    lib: undefined       # use this property to provide a specific version of Less\n    sourceMap: true      # a less compiler option to turn on/off source maps\n    extensions: [\"less\"]   # default extensions for Less files\n\n}"
  },
  {
    "path": "src/TestHarnessApp/mimosa-config.js",
    "content": "exports.config = {\n  \"modules\": [\n    \"copy\",\n    \"server\",\n    \"jshint\",\n    \"csslint\",\n    \"require\",\n    \"minify-js\",\n    \"minify-css\",\n    \"live-reload\",\n    \"bower\",\n    \"less\"\n  ],\n  \"server\": {\n    \"path\": \"server.js\",\n    \"views\": {\n      \"compileWith\": \"html\",\n      \"extension\": \"html\"\n    }\n  }\n}"
  },
  {
    "path": "src/TestHarnessApp/package.json",
    "content": "{\n  \"name\": \"personal\",\n  \"version\": \"0.0.1\",\n  \"description\": \"A Mimosa starter skeleton\",\n  \"dependencies\": {\n    \"consolidate\": \"0.10.0\",\n    \"ejs\": \"0.8.5\",\n    \"express\": \"3.4.7\"\n  },\n  \"devDependencies\": {\n    \"mimosa-less\": \"*\",\n    \"mocha\" : \"latest\"\n  }\n}"
  },
  {
    "path": "src/TestHarnessApp/paket.references",
    "content": "FubuCore\nHtmlTags\nMicrosoft.Owin\nMicrosoft.Owin.Host.HttpListener\nMicrosoft.Owin.Hosting\nOwin\nstructuremap"
  },
  {
    "path": "src/TestHarnessApp/routes/index.js",
    "content": "var index = function(config) {\n  cachebust = ''\n  if (process.env.NODE_ENV !== \"production\") {\n    cachebust = \"?b=\" + (new Date()).getTime()\n  }\n\n  var options = {\n    reload:    config.liveReload.enabled,\n    optimize:  config.isOptimize != null ? config.isOptimize : false,\n    cachebust: cachebust\n  };\n\n  // In the event plain html pages are being used, need to\n  // switch to different page for optimized view\n  var name = \"index\";\n  if (config.isOptimize && config.server.views.html) {\n    name += \"-optimize\";\n  }\n\n  return function(req, res) {\n    res.render(name, options);\n  };\n};\n\nexports.index = index;\n"
  },
  {
    "path": "src/TestHarnessApp/server.js",
    "content": "var express = require('express'),\n    routes = require('./routes'),\n    engines = require('consolidate');\n\nexports.startServer = function(config, callback) {\n\n  var port = process.env.PORT || config.server.port;\n\n\n  var app = express();\n  var server = app.listen(port, function() {\n    console.log(\"Express server listening on port %d in %s mode\", server.address().port, app.settings.env);\n  });\n\n  app.configure(function() {\n    app.set('port', port);\n    app.set('views', config.server.views.path);\n    app.engine(config.server.views.extension, engines[config.server.views.compileWith]);\n    app.set('view engine', config.server.views.extension);\n    app.use(express.favicon());\n    app.use(express.urlencoded());\n    app.use(express.json());\n    app.use(express.methodOverride());\n    app.use(express.compress());\n    app.use(config.server.base, app.router);\n    app.use(express.static(config.watch.compiledDir));\n  });\n\n  app.configure('development', function() {\n    app.use(express.errorHandler());\n  });\n\n  app.get('/', routes.index(config));\n\n  callback(server);\n};\n\n"
  },
  {
    "path": "src/TestHarnessApp/test/MainCtrlSpec.js",
    "content": "define(['angular','angularMocks', 'app/app'], function (angular, mocks) {\n  describe('MainCtrl', function () {\n    var $scope, ctrl;\n\n    beforeEach(module('myApp'))\n\n    beforeEach(inject(function ($controller, $rootScope) {\n      $scope = $rootScope.$new();\n\n      ctrl = $controller('MainCtrl', {\n        '$scope': $scope\n      });\n\n    }))\n\n    it('should set message', function () {\n      expect($scope.message).toBeDefined();\n    })\n\n  })\n})\n"
  },
  {
    "path": "src/TestHarnessApp/test/test-main.js",
    "content": "var tests = [];\nfor (var file in window.__karma__.files) {\n  if (window.__karma__.files.hasOwnProperty(file)) {\n    if (/Spec\\.js$/.test(file)) {\n      tests.push(file);\n    }\n  }\n}\n\nrequire({\n  baseUrl: '/base/public/javascripts',\n  paths: {\n    jquery: 'vendor/jquery/jquery',\n    angular: 'vendor/angular/angular',\n    angularMocks: 'vendor/angular-mocks/angular-mocks'\n  },\n  shim: {\n    'angular': {\n      deps:['jquery'],\n      'exports': 'angular'\n    },\n    'angularMocks': {\n      deps:[\"angular\"],\n      exports: 'angular.mock'\n    }\n  },\n  // ask Require.js to load these files (all our tests)\n  deps: tests,\n\n  // start test run, once Require.js is done\n  callback: window.__karma__.start\n});\n\n\n"
  },
  {
    "path": "src/TestHarnessApp/views/index-optimize.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Mimosa</title>\n\n    <link rel=\"stylesheet\" href=\"/stylesheets/style.css\" />\n\n    <script src=\"/socket.io/socket.io.js\"></script>\n    <script src=\"/javascripts/reload-client.js\"></script>\n\n    <script src=\"/javascripts/main-built.js\"></script>\n\n  </head>\n  <body>\n\n    <p>Welcome to Mimosa</p>\n\n    <p>Optimized mode.  You are getting a single RequireJS optimized JavaScript file which includes all the page dependencies.</p>\n\n  </body>\n</html>"
  },
  {
    "path": "src/TestHarnessApp/views/index.html",
    "content": "<!DOCTYPE html>\n<html ng-app=\"myApp\">\n  <head>\n    <title>Mimosa</title>\n\n    <link rel=\"stylesheet\" href=\"/stylesheets/style.css\" />\n    <link rel=\"stylesheet\" href=\"/stylesheets/vendor/bootstrap/bootstrap.css\" />\n\n    <script src=\"/socket.io/socket.io.js\"></script>\n    <script src=\"/javascripts/reload-client.js\"></script>\n\n    <script src=\"/javascripts/vendor/requirejs/require.js\" data-main=\"/javascripts/main.js\"></script>\n\n  </head>\n  <body>\n\n    <div ng-controller=\"MainCtrl\">\n        {{message}}\n    </div>\n\n  </body>\n</html>"
  },
  {
    "path": "src/TestMessages/Messages.cs",
    "content": "﻿namespace TestMessages\n{\n    public class NewUser{}\n    public class EditUser{}\n    public class DeleteUser{}\n}"
  },
  {
    "path": "src/TestMessages/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"TestMessages\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"Extend Health Inc\")]\n[assembly: AssemblyProduct(\"TestMessages\")]\n[assembly: AssemblyCopyright(\"Copyright © Extend Health Inc 2013\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"3ffa9906-025c-4724-ada4-ad60f6416463\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/AnotherOneHandler.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace TestMessages.ScenarioSupport\n{\n    public class AnotherOneHandler : SimpleHandler<OneMessage>\n    {\n        public AnotherOneHandler(Envelope envelope) : base(envelope)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/DifferentOneHandler.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace TestMessages.ScenarioSupport\n{\n    public class DifferentOneHandler : SimpleHandler<OneMessage>\n    {\n        public DifferentOneHandler(Envelope envelope) : base(envelope)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/FourHandler.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace TestMessages.ScenarioSupport\n{\n    public class FourHandler : SimpleHandler<FourMessage>\n    {\n        public FourHandler(Envelope envelope) : base(envelope)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/FourMessage.cs",
    "content": "﻿namespace TestMessages.ScenarioSupport\n{\n    public class FourMessage : Message\n    {\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/GenericHandler.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace TestMessages.ScenarioSupport\n{\n    public class GenericHandler : SimpleHandler<Message>\n    {\n        public GenericHandler(Envelope envelope) : base(envelope)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/HarnessSettings.cs",
    "content": "﻿using System;\n\nnamespace TestMessages.ScenarioSupport\n{\n    public class HarnessSettings\n    {\n        public Uri Website1 { get; set; }\n        public Uri Website2 { get; set; }\n        public Uri Website3 { get; set; }\n        public Uri Website4 { get; set; }\n\n\n        public Uri Service1 { get; set; }\n        public Uri Service2 { get; set; }\n        public Uri Service3 { get; set; }\n        public Uri Service4 { get; set; }\n    }\n\n    /*\n     * \n     * \nSend a message that raises events\n    Website1\n        Listens to memory://harness/website1 with \n        Listens to memory://localhost/Website1/replies with \n        Publishes to Harness:Service1\n            * OneMessage\n        Handles Message, JobRequest`1, JobRequest`1, JobRequest`1, JobRequest`1, SubscriptionRequested, SubscriptionsChanged, SubscriptionsRemoved, TakeOwnershipRequest, TaskHealthRequest, TaskDeactivation\n\n    Service1\n        Listens to memory://harness/service1 with \n        Listens to memory://localhost/Service1/replies with \n        Publishes to Harness:Service1\n            * TwoMessage\n            * ThreeMessage\n        Handles OneMessage, TwoMessage, ThreeMessage, Message, JobRequest`1, JobRequest`1, JobRequest`1, JobRequest`1, SubscriptionRequested, SubscriptionsChanged, SubscriptionsRemoved, TakeOwnershipRequest, TaskHealthRequest, TaskDeactivation\n        Handling OneMessage raises TwoMessage\n        Handling OneMessage raises ThreeMessage\n\n\n    Actions\n        Node Website1 sends new message of type OneMessage (original message)\n    Messages are all accounted for\n\n    Assertions\n        Message of type OneMessage (original message) should be received by Service1\n        Expecting message of type TwoMessage to be received by node Service1 as a result of message of type OneMessage (original message) being handled\n        Expecting message of type ThreeMessage to be received by node Service1 as a result of message of type OneMessage (original message) being handled\n\n    Messages Received\n    * OneMessage received by memory://harness/service1\n    * TwoMessage received by memory://harness/service1\n    * ThreeMessage received by memory://harness/service1\n     * \n     * \n     * \n     * \n     */\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/ManyResponseHandler.cs",
    "content": "﻿using System.Collections.Generic;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace TestMessages.ScenarioSupport\n{\n    public class ManyResponseHandler<T, TR1, TR2, TR3> where T : Message, new()\n                                                       where TR1 : Message, new()\n                                                       where TR2 : Message, new()\n                                                       where TR3 : Message, new()\n    {\n        private readonly Envelope _envelope;\n\n        public ManyResponseHandler(Envelope envelope)\n        {\n            _envelope = envelope;\n        }\n\n        public IEnumerable<object> Handle(T message)\n        {\n            TestMessageRecorder.Processed(GetType().Name, message, _envelope.ReplyUri);\n\n            yield return new TR1 {Id = message.Id};\n            yield return new TR2 {Id = message.Id};\n            yield return new TR3 {Id = message.Id};\n        }\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/Message.cs",
    "content": "﻿using System;\nusing FubuCore;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace TestMessages.ScenarioSupport\n{\n    public class Message\n    {\n        public Message()\n        {\n            Id = Guid.NewGuid();\n        }\n\n        public Guid Id { get; set; }\n        public Uri Source { get; set; }\n        public string Key { get; set; }\n\n        public Envelope Envelope { get; set; }\n\n        public string Type\n        {\n            get { return GetType().Name; }\n        }\n\n        protected bool Equals(Message other)\n        {\n            return Id.Equals(other.Id);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != GetType()) return false;\n            return Equals((Message) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return Id.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            if (Source == null || Key == null)\n            {\n                return \"{0} ({1})\".ToFormat(GetType().Name, Id);\n            }\n\n            return string.Format(\"{0} ({1}) from {2}/{3}\", GetType().Name, Id, Source, Key);\n        }\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/MessageProcessed.cs",
    "content": "﻿using System;\n\nnamespace TestMessages.ScenarioSupport\n{\n    public class MessageProcessed\n    {\n        public string Description { get; set; }\n        public Message Message { get; set; }\n        public Uri ReceivedAt { get; set; }\n\n        public static MessageProcessed For<T>(Message message)\n        {\n            return new MessageProcessed\n            {\n                Description = typeof (T).Name,\n                Message = message\n            };\n        }\n\n        protected bool Equals(MessageProcessed other)\n        {\n            return string.Equals(Description, other.Description) && Equals(Message, other.Message) && Equals(ReceivedAt, other.ReceivedAt);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != this.GetType()) return false;\n            return Equals((MessageProcessed) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            unchecked\n            {\n                var hashCode = (Description != null ? Description.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (Message != null ? Message.GetHashCode() : 0);\n                hashCode = (hashCode*397) ^ (ReceivedAt != null ? ReceivedAt.GetHashCode() : 0);\n                return hashCode;\n            }\n        }\n\n        public override string ToString()\n        {\n            return string.Format(\"{0} / {1}\", Message, Description);\n        }\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/MirrorMessage.cs",
    "content": "﻿using System;\n\nnamespace TestMessages.ScenarioSupport\n{\n    public class MirrorMessage<T>\n    {\n        public Guid Id { get; set; }\n\n        protected bool Equals(MirrorMessage<T> other)\n        {\n            return Id.Equals(other.Id);\n        }\n\n        public override bool Equals(object obj)\n        {\n            if (ReferenceEquals(null, obj)) return false;\n            if (ReferenceEquals(this, obj)) return true;\n            if (obj.GetType() != GetType()) return false;\n            return Equals((MirrorMessage<T>) obj);\n        }\n\n        public override int GetHashCode()\n        {\n            return Id.GetHashCode();\n        }\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/OneHandler.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace TestMessages.ScenarioSupport\n{\n    public class OneHandler : SimpleHandler<OneMessage>\n    {\n        public OneHandler(Envelope envelope) : base(envelope)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/OneMessage.cs",
    "content": "﻿namespace TestMessages.ScenarioSupport\n{\n    public class OneMessage : Message\n    {\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/RequestResponseHandler.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace TestMessages.ScenarioSupport\n{\n    public class RequestResponseHandler<T> where T : Message\n    {\n        private readonly Envelope _envelope;\n\n        public RequestResponseHandler(Envelope envelope)\n        {\n            _envelope = envelope;\n        }\n\n        public MirrorMessage<T> Handle(T message)\n        {\n            TestMessageRecorder.Processed(GetType().Name, message, _envelope.ReceivedAt);\n            return new MirrorMessage<T> {Id = message.Id};\n        }\n    }\n\n    public class RequestResponseHandler<TRequest, TResponse> where TRequest : Message where TResponse : Message, new()\n    {\n        public TResponse Handle(TRequest request)\n        {\n            return new TResponse\n            {\n                Id = request.Id,\n                Key = request.Key\n            };\n        }\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/SimpleHandler.cs",
    "content": "﻿using System.Diagnostics;\nusing FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace TestMessages.ScenarioSupport\n{\n    public class SimpleHandler<T> where T : Message\n    {\n        private readonly Envelope _envelope;\n\n        public SimpleHandler(Envelope envelope)\n        {\n            _envelope = envelope;\n        }\n\n        public void Handle(T message)\n        {\n            Debug.WriteLine(\"Got message {0}:{1}\", typeof(T).Name, message.Id);\n            TestMessageRecorder.Processed(GetType().Name, message, _envelope.ReceivedAt);\n        }\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/SourceRecordingHandler.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime;\nusing FubuMVC.Core.Services.Messaging.Tracking;\n\nnamespace TestMessages.ScenarioSupport\n{\n    public class SourceRecordingHandler\n    {\n        private readonly Envelope _envelope;\n\n        public SourceRecordingHandler(Envelope envelope)\n        {\n            _envelope = envelope;\n        }\n\n        public void Consume(Message message)\n        {\n            message.Source = _envelope.ReceivedAt;\n            message.Envelope = _envelope;\n\n            MessageHistory.Record(MessageTrack.ForReceived(message, message.Id.ToString()));\n        }\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/TestMessageRecorder.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Shouldly;\n\nnamespace TestMessages.ScenarioSupport\n{\n    public static class TestMessageRecorder\n    {\n        private static readonly IList<MessageProcessed> _processed = new List<MessageProcessed>();\n\n        public static MessageProcessed[] AllProcessed\n        {\n            get { return _processed.ToArray(); }\n        }\n\n        public static void ShouldMatch<THandler>(this MessageProcessed processed, Message message)\n        {\n            processed.Description.ShouldBe(typeof(THandler).Name);\n            processed.Message.ShouldBe(message);\n        }\n\n        public static void Clear()\n        {\n            _processed.Clear();\n        }\n\n        public static bool HasProcessed(Message message)\n        {\n            return _processed.Any(x => message.Equals(x.Message));\n        }\n\n        public static void Processed(string description, Message message, Uri receivedAt = null)\n        {\n            _processed.Fill(new MessageProcessed\n            {\n                Description = description,\n                Message = message,\n                ReceivedAt = receivedAt\n            });\n        }\n\n        public static IEnumerable<MessageProcessed> ProcessedFor<T>() where T : Message\n        {\n            return _processed.Where(x => x.Message is T);\n        }\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/ThreeHandler.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace TestMessages.ScenarioSupport\n{\n    public class ThreeHandler : SimpleHandler<ThreeMessage>\n    {\n        public ThreeHandler(Envelope envelope) : base(envelope)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/ThreeMessage.cs",
    "content": "﻿namespace TestMessages.ScenarioSupport\n{\n    public class ThreeMessage : Message\n    {\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/TwoHandler.cs",
    "content": "﻿using FubuMVC.Core.ServiceBus.Runtime;\n\nnamespace TestMessages.ScenarioSupport\n{\n    public class TwoHandler : SimpleHandler<TwoMessage>\n    {\n        public TwoHandler(Envelope envelope) : base(envelope)\n        {\n        }\n    }\n}"
  },
  {
    "path": "src/TestMessages/ScenarioSupport/TwoMessage.cs",
    "content": "﻿namespace TestMessages.ScenarioSupport\n{\n    public class TwoMessage : Message\n    {\n    }\n}"
  },
  {
    "path": "src/TestMessages/TestMessages.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{3735A25A-28B6-4DA3-A4CF-7606538E0155}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>TestMessages</RootNamespace>\n    <AssemblyName>TestMessages</AssemblyName>\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"System.Xml.Linq\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Messages.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"ScenarioSupport\\AnotherOneHandler.cs\" />\n    <Compile Include=\"ScenarioSupport\\DifferentOneHandler.cs\" />\n    <Compile Include=\"ScenarioSupport\\FourHandler.cs\" />\n    <Compile Include=\"ScenarioSupport\\FourMessage.cs\" />\n    <Compile Include=\"ScenarioSupport\\GenericHandler.cs\" />\n    <Compile Include=\"ScenarioSupport\\HarnessSettings.cs\" />\n    <Compile Include=\"ScenarioSupport\\ManyResponseHandler.cs\" />\n    <Compile Include=\"ScenarioSupport\\Message.cs\" />\n    <Compile Include=\"ScenarioSupport\\MessageProcessed.cs\" />\n    <Compile Include=\"ScenarioSupport\\MirrorMessage.cs\" />\n    <Compile Include=\"ScenarioSupport\\OneHandler.cs\" />\n    <Compile Include=\"ScenarioSupport\\OneMessage.cs\" />\n    <Compile Include=\"ScenarioSupport\\RequestResponseHandler.cs\" />\n    <Compile Include=\"ScenarioSupport\\SimpleHandler.cs\" />\n    <Compile Include=\"ScenarioSupport\\SourceRecordingHandler.cs\" />\n    <Compile Include=\"ScenarioSupport\\TestMessageRecorder.cs\" />\n    <Compile Include=\"ScenarioSupport\\ThreeHandler.cs\" />\n    <Compile Include=\"ScenarioSupport\\ThreeMessage.cs\" />\n    <Compile Include=\"ScenarioSupport\\TwoHandler.cs\" />\n    <Compile Include=\"ScenarioSupport\\TwoMessage.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\n      <Project>{e18fd922-0e7a-49cd-b89f-473826077b9d}</Project>\n      <Name>FubuMVC.Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n  <ItemGroup>\n    <Reference Include=\"FubuCore\">\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\n      <Private>True</Private>\n      <Paket>True</Paket>\n    </Reference>\n  </ItemGroup>\n  <Choose>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v3.5'\">\n      <ItemGroup>\n        <Reference Include=\"Shouldly\">\n          <HintPath>..\\..\\packages\\Shouldly\\lib\\net35\\Shouldly.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\n      <ItemGroup>\n        <Reference Include=\"Shouldly\">\n          <HintPath>..\\..\\packages\\Shouldly\\lib\\net40\\Shouldly.dll</HintPath>\n          <Private>True</Private>\n          <Paket>True</Paket>\n        </Reference>\n      </ItemGroup>\n    </When>\n  </Choose>\n</Project>"
  },
  {
    "path": "src/TestMessages/paket.references",
    "content": "FubuCore\nShouldly"
  },
  {
    "path": "src/TestPackage1/.package-manifest",
    "content": "<?xml version=\"1.0\"?>\r\n<package xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\r\n  <Role>module</Role>\r\n  <Name>pak1</Name>\r\n  <assembly>TestPackage1</assembly>\r\n</package>"
  },
  {
    "path": "src/TestPackage1/FakeControllers/Controllers.cs",
    "content": "namespace TestPackage1.FakeControllers\r\n{\r\n    public class ClassInAnotherAssembly\r\n    {\r\n    }\r\n\r\n    public class SimpleInputModel\r\n    {\r\n    }\r\n\r\n    public class SimpleOutputModel\r\n    {\r\n    }\r\n\r\n    public class OneController\r\n    {\r\n\r\n        public SimpleOutputModel Report()\r\n        {\r\n            return new SimpleOutputModel();\r\n        }\r\n\r\n        public SimpleOutputModel Query(SimpleInputModel model)\r\n        {\r\n            return new SimpleOutputModel();\r\n        }\r\n    }\r\n\r\n    public class TwoController\r\n    {\r\n\r\n        public SimpleOutputModel Report()\r\n        {\r\n            return new SimpleOutputModel();\r\n        }\r\n\r\n        public SimpleOutputModel Query(SimpleInputModel model)\r\n        {\r\n            return new SimpleOutputModel();\r\n        }\r\n    }\r\n\r\n    public class ThreeController\r\n    {\r\n\r\n        public SimpleOutputModel Report()\r\n        {\r\n            return new SimpleOutputModel();\r\n        }\r\n\r\n        public SimpleOutputModel Query(SimpleInputModel model)\r\n        {\r\n            return new SimpleOutputModel();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/TestPackage1/IMultiInstance.cs",
    "content": "namespace TestPackage1\r\n{\r\n    public interface IMultiInstance\r\n    {\r\n        \r\n    }\r\n\r\n    public class Instance1 : IMultiInstance\r\n    {\r\n        \r\n    }\r\n\r\n    public class Instance2 : IMultiInstance\r\n    {\r\n        \r\n    }\r\n}"
  },
  {
    "path": "src/TestPackage1/IOpenType.cs",
    "content": "namespace TestPackage1\r\n{\r\n    public interface IOpenType<T>\r\n    {   \r\n    }\r\n\r\n    public class OpenType<T> : IOpenType<T>\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "src/TestPackage1/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"TestPackage1\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"Microsoft\")]\r\n[assembly: AssemblyProduct(\"TestPackage1\")]\r\n[assembly: AssemblyCopyright(\"Copyright © Microsoft 2010\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible \r\n// to COM components.  If you need to access a type in this assembly from \r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"820576e9-f44d-4a9a-8367-b3035bf9a90c\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version \r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Revision and Build Numbers \r\n// by using the '*' as shown below:\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n"
  },
  {
    "path": "src/TestPackage1/StringController.cs",
    "content": "using FubuMVC.Core;\r\nusing HtmlTags;\r\n\r\nnamespace TestPackage1\r\n{\r\n    public class TestPackage1Registry : FubuPackageRegistry\r\n    {\r\n        public TestPackage1Registry()\r\n        {\r\n            Actions.IncludeClassesSuffixedWithController();\r\n        }\r\n    }\r\n\r\n    public class StringController\r\n    {\r\n        public string SayHello()\r\n        {\r\n            return \"Hello\";\r\n        }\r\n    }\r\n\r\n    public class JsonSerializedMessage \r\n    {\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    public class JsonController\r\n    {\r\n        public JsonSerializedMessage SendMessage(JsonSerializedMessage input)\r\n        {\r\n            return input;\r\n        }\r\n    }\r\n\r\n    public class ViewInput\r\n    {\r\n        [RouteInput]\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    public class ViewController\r\n    {\r\n        public HtmlDocument ShowView(ViewInput input)\r\n        {\r\n            var document = new HtmlDocument();\r\n\r\n            document.Title = input.Name;\r\n\r\n            document.Push(\"p\");\r\n            document.Add(\"span\").Text(\"The input was '\");\r\n            document.Add(\"span\").Id(\"name\").Text(input.Name);\r\n            document.Add(\"span\").Text(\"'\");\r\n\r\n            return document;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "src/TestPackage1/TestPackage1.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>\r\n    </ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{1F18D6EB-4D9C-407A-BD70-C5D525E377B6}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>TestPackage1</RootNamespace>\r\n    <AssemblyName>TestPackage1</AssemblyName>\r\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\r\n    <TargetFrameworkProfile />\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <Prefer32Bit>false</Prefer32Bit>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <Prefer32Bit>false</Prefer32Bit>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Configuration\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Data.DataSetExtensions\" />\r\n    <Reference Include=\"System.Drawing\" />\r\n    <Reference Include=\"System.EnterpriseServices\" />\r\n    <Reference Include=\"System.Web\" />\r\n    <Reference Include=\"System.Web.ApplicationServices\" />\r\n    <Reference Include=\"System.Web.DynamicData\" />\r\n    <Reference Include=\"System.Web.Entity\" />\r\n    <Reference Include=\"System.Web.Extensions\" />\r\n    <Reference Include=\"System.Web.Services\" />\r\n    <Reference Include=\"System.Xml\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"FakeControllers\\Controllers.cs\" />\r\n    <Compile Include=\"IMultiInstance.cs\" />\r\n    <Compile Include=\"IOpenType.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"StringController.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\FubuMVC.Core\\FubuMVC.Core.csproj\">\r\n      <Project>{E18FD922-0E7A-49CD-B89F-473826077B9D}</Project>\r\n      <Name>FubuMVC.Core</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"content\\images\\aaa\\ico-close.gif\" />\r\n    <Content Include=\"content\\images\\icon-add-alt.png\" />\r\n    <Content Include=\"content\\scripts\\Pak1-A.js\" />\r\n    <Content Include=\"content\\scripts\\Script1.js\" />\r\n    <Content Include=\"data\\a.txt\" />\r\n    <Content Include=\"data\\b.txt\" />\r\n    <Content Include=\"data\\c.txt\" />\r\n    <Content Include=\"TestPage.htm\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"data\\d.t2\" />\r\n    <None Include=\"data\\e.t2\" />\r\n    <Content Include=\"pak1.script.config\" />\r\n    <Content Include=\"web.config\" />\r\n    <Content Include=\"ripple.dependencies.config\" />\r\n  </ItemGroup>\r\n  <PropertyGroup>\r\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\r\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\r\n  <UsingTask TaskName=\"CopyRuntimeDependencies\" AssemblyFile=\"..\\..\\.paket\\paket.exe\" />\r\n  <Target Name=\"AfterBuild\" Condition=\"Exists('..\\..\\.paket\\paket.exe')\">\r\n    <CopyRuntimeDependencies OutputPath=\"$(OutDir)\" TargetFramework=\"$(TargetFrameworkIdentifier) - $(TargetFrameworkVersion)\" ProjectsWithRuntimeLibs=\"System.AppContext;System.Globalization.Extensions;System.IO.Compression;System.Linq.Expressions;System.Net.Http;System.Reflection.TypeExtensions;System.Runtime.InteropServices.RuntimeInformation;System.Security.Cryptography.Algorithms;System.Security.Cryptography.Cng;System.Security.Cryptography.Csp;System.Security.Cryptography.Encoding;System.Security.Cryptography.OpenSsl;System.Security.Cryptography.X509Certificates;System.Threading\" />\r\n  </Target>\r\n  <ProjectExtensions />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n  <ItemGroup>\r\n    <Reference Include=\"FubuCore\">\r\n      <HintPath>..\\..\\packages\\FubuCore\\lib\\FubuCore.dll</HintPath>\r\n      <Private>True</Private>\r\n      <Paket>True</Paket>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"HtmlTags\">\r\n          <HintPath>..\\..\\packages\\HtmlTags\\lib\\4.0\\HtmlTags.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"Microsoft.Win32.Primitives\">\r\n          <HintPath>..\\..\\packages\\Microsoft.Win32.Primitives\\ref\\netstandard1.3\\Microsoft.Win32.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\net45\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.3\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"StructureMap\">\r\n          <HintPath>..\\..\\packages\\StructureMap\\lib\\netstandard1.5\\StructureMap.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.AppContext\">\r\n          <HintPath>..\\..\\packages\\System.AppContext\\ref\\netstandard1.3\\System.AppContext.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Buffers\">\r\n          <HintPath>..\\..\\packages\\System.Buffers\\lib\\netstandard1.1\\System.Buffers.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.0\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections\">\r\n          <HintPath>..\\..\\packages\\System.Collections\\ref\\netstandard1.3\\System.Collections.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.1'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.1\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Collections.Concurrent\">\r\n          <HintPath>..\\..\\packages\\System.Collections.Concurrent\\ref\\netstandard1.3\\System.Collections.Concurrent.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Console\">\r\n          <HintPath>..\\..\\packages\\System.Console\\ref\\netstandard1.3\\System.Console.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.0\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Debug\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Debug\\ref\\netstandard1.3\\System.Diagnostics.Debug.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.DiagnosticSource\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.DiagnosticSource\\lib\\netstandard1.3\\System.Diagnostics.DiagnosticSource.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0') Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tools\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tools\\ref\\netstandard1.0\\System.Diagnostics.Tools.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.3\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Diagnostics.Tracing\">\r\n          <HintPath>..\\..\\packages\\System.Diagnostics.Tracing\\ref\\netstandard1.5\\System.Diagnostics.Tracing.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.0\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization\">\r\n          <HintPath>..\\..\\packages\\System.Globalization\\ref\\netstandard1.3\\System.Globalization.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Calendars\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Calendars\\ref\\netstandard1.3\\System.Globalization.Calendars.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Globalization.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Globalization.Extensions\\ref\\netstandard1.3\\System.Globalization.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.0\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.3\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO\">\r\n          <HintPath>..\\..\\packages\\System.IO\\ref\\netstandard1.5\\System.IO.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression\\ref\\netstandard1.3\\System.IO.Compression.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.Compression.ZipFile\">\r\n          <HintPath>..\\..\\packages\\System.IO.Compression.ZipFile\\ref\\netstandard1.3\\System.IO.Compression.ZipFile.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem\\ref\\netstandard1.3\\System.IO.FileSystem.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.IO.FileSystem.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.IO.FileSystem.Primitives\\ref\\netstandard1.3\\System.IO.FileSystem.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.0\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6') Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq\">\r\n          <HintPath>..\\..\\packages\\System.Linq\\ref\\netstandard1.6\\System.Linq.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.0\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.3\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Linq.Expressions\">\r\n          <HintPath>..\\..\\packages\\System.Linq.Expressions\\ref\\netstandard1.6\\System.Linq.Expressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Http\">\r\n          <HintPath>..\\..\\packages\\System.Net.Http\\ref\\netstandard1.3\\System.Net.Http.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Net.Primitives\\ref\\netstandard1.3\\System.Net.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\net46\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n        <Reference Include=\"mscorlib\">\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Net.Sockets\">\r\n          <HintPath>..\\..\\packages\\System.Net.Sockets\\ref\\netstandard1.3\\System.Net.Sockets.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.0\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.ObjectModel\">\r\n          <HintPath>..\\..\\packages\\System.ObjectModel\\ref\\netstandard1.3\\System.ObjectModel.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.0\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.3\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection\">\r\n          <HintPath>..\\..\\packages\\System.Reflection\\ref\\netstandard1.5\\System.Reflection.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit\\ref\\netstandard1.1\\System.Reflection.Emit.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.ILGeneration\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.ILGeneration\\ref\\netstandard1.0\\System.Reflection.Emit.ILGeneration.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Emit.Lightweight\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Emit.Lightweight\\ref\\netstandard1.0\\System.Reflection.Emit.Lightweight.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Extensions\\ref\\netstandard1.0\\System.Reflection.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == 'WindowsPhone' And $(TargetFrameworkVersion) == 'v8.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.Primitives\\ref\\netstandard1.0\\System.Reflection.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.3\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Reflection.TypeExtensions\">\r\n          <HintPath>..\\..\\packages\\System.Reflection.TypeExtensions\\ref\\netstandard1.5\\System.Reflection.TypeExtensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2' Or $(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Resources.ResourceManager\">\r\n          <HintPath>..\\..\\packages\\System.Resources.ResourceManager\\ref\\netstandard1.0\\System.Resources.ResourceManager.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.0\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.2'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.2\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.3\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime\">\r\n          <HintPath>..\\..\\packages\\System.Runtime\\ref\\netstandard1.5\\System.Runtime.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.0\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.3\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Extensions\\ref\\netstandard1.5\\System.Runtime.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Handles\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Handles\\ref\\netstandard1.3\\System.Runtime.Handles.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.3\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices\\ref\\netstandard1.5\\System.Runtime.InteropServices.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.InteropServices.RuntimeInformation\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.InteropServices.RuntimeInformation\\ref\\netstandard1.1\\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Loader\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Loader\\ref\\netstandard1.5\\System.Runtime.Loader.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Runtime.Numerics\">\r\n          <HintPath>..\\..\\packages\\System.Runtime.Numerics\\ref\\netstandard1.1\\System.Runtime.Numerics.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.3\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.4\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Algorithms\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Algorithms\\ref\\netstandard1.6\\System.Security.Cryptography.Algorithms.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Cng\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Cng\\ref\\netstandard1.6\\System.Security.Cryptography.Cng.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Csp\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Csp\\ref\\netstandard1.3\\System.Security.Cryptography.Csp.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Encoding\\ref\\netstandard1.3\\System.Security.Cryptography.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.OpenSsl\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.OpenSsl\\ref\\netstandard1.6\\System.Security.Cryptography.OpenSsl.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.Primitives\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.Primitives\\ref\\netstandard1.3\\System.Security.Cryptography.Primitives.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.3'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.3\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Security.Cryptography.X509Certificates\">\r\n          <HintPath>..\\..\\packages\\System.Security.Cryptography.X509Certificates\\ref\\netstandard1.4\\System.Security.Cryptography.X509Certificates.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.0\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding\\ref\\netstandard1.3\\System.Text.Encoding.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.0\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.Encoding.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Text.Encoding.Extensions\\ref\\netstandard1.3\\System.Text.Encoding.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.0\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.3\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And $(TargetFrameworkVersion) == 'v1.6'\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Text.RegularExpressions\">\r\n          <HintPath>..\\..\\packages\\System.Text.RegularExpressions\\ref\\netstandard1.6\\System.Text.RegularExpressions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.0\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading\">\r\n          <HintPath>..\\..\\packages\\System.Threading\\ref\\netstandard1.3\\System.Threading.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.0\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks\\ref\\netstandard1.3\\System.Threading.Tasks.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Tasks.Extensions\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Tasks.Extensions\\lib\\netstandard1.0\\System.Threading.Tasks.Extensions.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"($(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')) Or ($(TargetFrameworkIdentifier) == '.NETCoreApp' And $(TargetFrameworkVersion) == 'v1.0')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Threading.Timer\">\r\n          <HintPath>..\\..\\packages\\System.Threading.Timer\\ref\\netstandard1.2\\System.Threading.Timer.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.0\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.ReaderWriter\">\r\n          <HintPath>..\\..\\packages\\System.Xml.ReaderWriter\\ref\\netstandard1.3\\System.Xml.ReaderWriter.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n  <Choose>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.0' Or $(TargetFrameworkVersion) == 'v1.1' Or $(TargetFrameworkVersion) == 'v1.2')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.0\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n    <When Condition=\"$(TargetFrameworkIdentifier) == '.NETStandard' And ($(TargetFrameworkVersion) == 'v1.3' Or $(TargetFrameworkVersion) == 'v1.4' Or $(TargetFrameworkVersion) == 'v1.5' Or $(TargetFrameworkVersion) == 'v1.6')\">\r\n      <ItemGroup>\r\n        <Reference Include=\"System.Xml.XDocument\">\r\n          <HintPath>..\\..\\packages\\System.Xml.XDocument\\ref\\netstandard1.3\\System.Xml.XDocument.dll</HintPath>\r\n          <Private>True</Private>\r\n          <Paket>True</Paket>\r\n        </Reference>\r\n      </ItemGroup>\r\n    </When>\r\n  </Choose>\r\n</Project>"
  },
  {
    "path": "src/TestPackage1/TestPage.htm",
    "content": "﻿<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n    <title>Test page for virtual path provider</title>\r\n</head>\r\n<body>\r\n    \r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "src/TestPackage1/data/a.txt",
    "content": "a"
  },
  {
    "path": "src/TestPackage1/data/b.txt",
    "content": "b"
  },
  {
    "path": "src/TestPackage1/data/c.txt",
    "content": "c"
  },
  {
    "path": "src/TestPackage1/data/d.t2",
    "content": "d"
  },
  {
    "path": "src/TestPackage1/data/e.t2",
    "content": "e"
  },
  {
    "path": "src/TestPackage1/pak1.script.config",
    "content": "﻿Pak1Set includes Script1.js, Script2.js, Pak1-A.js"
  },
  {
    "path": "src/TestPackage1/paket.references",
    "content": "FubuCore\nHtmlTags\nstructuremap"
  },
  {
    "path": "src/TestPackage1/web.config",
    "content": "﻿<?xml version=\"1.0\"?>\r\n<configuration>\r\n  <runtime>\r\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\r\n      <dependentAssembly>\r\n        <assemblyIdentity name=\"FubuCore\" culture=\"neutral\"/>\r\n        <bindingRedirect oldVersion=\"0.0.0.0-0.9.1.0\" newVersion=\"0.9.1.0\"/>\r\n      </dependentAssembly>\r\n      <dependentAssembly>\r\n        <assemblyIdentity name=\"FubuCore\" culture=\"neutral\"/>\r\n        <bindingRedirect oldVersion=\"0.0.0.0-0.9.1.0\" newVersion=\"0.9.1.0\"/>\r\n      </dependentAssembly>\r\n      <dependentAssembly>\r\n        <assemblyIdentity name=\"FubuCore\" culture=\"neutral\"/>\r\n        <bindingRedirect oldVersion=\"0.0.0.0-0.9.1.0\" newVersion=\"0.9.1.0\"/>\r\n      </dependentAssembly>\r\n      <dependentAssembly>\r\n        <assemblyIdentity name=\"HtmlTags\" culture=\"neutral\"/>\r\n        <bindingRedirect oldVersion=\"0.0.0.0-1.0.0.0\" newVersion=\"1.0.0.0\"/>\r\n      </dependentAssembly>\r\n      <dependentAssembly>\r\n        <assemblyIdentity name=\"FubuCore\" culture=\"neutral\"/>\r\n        <bindingRedirect oldVersion=\"0.0.0.0-0.9.1.0\" newVersion=\"0.9.1.0\"/>\r\n      </dependentAssembly>\r\n      <dependentAssembly>\r\n        <assemblyIdentity name=\"HtmlTags\" culture=\"neutral\"/>\r\n        <bindingRedirect oldVersion=\"0.0.0.0-1.0.0.0\" newVersion=\"1.0.0.0\"/>\r\n      </dependentAssembly>\r\n      <dependentAssembly>\r\n        <assemblyIdentity name=\"FubuCore\" culture=\"neutral\"/>\r\n        <bindingRedirect oldVersion=\"0.0.0.0-0.9.1.0\" newVersion=\"0.9.1.0\"/>\r\n      </dependentAssembly>\r\n      <dependentAssembly>\r\n        <assemblyIdentity name=\"HtmlTags\" culture=\"neutral\"/>\r\n        <bindingRedirect oldVersion=\"0.0.0.0-1.0.0.0\" newVersion=\"1.0.0.0\"/>\r\n      </dependentAssembly>\r\n      <dependentAssembly>\r\n        <assemblyIdentity name=\"FubuCore\" culture=\"neutral\"/>\r\n        <bindingRedirect oldVersion=\"0.0.0.0-0.9.1.0\" newVersion=\"0.9.1.0\"/>\r\n      </dependentAssembly>\r\n      <dependentAssembly>\r\n        <assemblyIdentity name=\"HtmlTags\" culture=\"neutral\"/>\r\n        <bindingRedirect oldVersion=\"0.0.0.0-1.0.0.0\" newVersion=\"1.0.0.0\"/>\r\n      </dependentAssembly>\r\n      <dependentAssembly>\r\n        <assemblyIdentity name=\"FubuCore\" culture=\"neutral\"/>\r\n        <bindingRedirect oldVersion=\"0.0.0.0-0.9.1.0\" newVersion=\"0.9.1.0\"/>\r\n      </dependentAssembly>\r\n      <dependentAssembly>\r\n        <assemblyIdentity name=\"HtmlTags\" culture=\"neutral\"/>\r\n        <bindingRedirect oldVersion=\"0.0.0.0-1.0.0.0\" newVersion=\"1.0.0.0\"/>\r\n      </dependentAssembly>\r\n    </assemblyBinding>\r\n  </runtime>\r\n  <system.web>\r\n    <compilation targetFramework=\"4.0\"/>\r\n    <pages controlRenderingCompatibilityVersion=\"3.5\" clientIDMode=\"AutoID\"/>\r\n  </system.web>\r\n</configuration>"
  },
  {
    "path": "templates/Templates.xml",
    "content": "<templates>\r\n  <category type=\"new\">\r\n    <project name=\"web-app\" description=\"New FubuMVC application project\" template=\"aspnet\" alterations=\"fubumvc-empty, fubu-rake-tasks\">\r\n      <selection name=\"ioc\" description=\"IoC Container\" >\r\n        <option name=\"structuremap\" description=\"Use StructureMap for IoC\" alterations=\"structuremap\"/>\r\n      </selection>\r\n      <selection name=\"views\" description=\"View Engine\">\r\n        <option name=\"no-views\" description=\"No view engine\" alterations=\"no-views\"/>\r\n        <option name=\"spark\" description=\"Spark view engine\" alterations=\"spark\"/>\r\n        <option name=\"razor\" description=\"Razor view engine\" alterations=\"razor\"/>\r\n      </selection>\r\n    </project>\r\n    <project name=\"web-bottle\" description=\"New FubuMVC Bottle\" template=\"baseline\" alterations=\"fubumvc-bottle\">\r\n      \r\n    </project>\r\n\r\n\t\r\n\t\r\n    <project name=\"library\" description=\"Simple Class Library project\" template=\"baseline\" alterations=\"fubucore\"></project>\r\n\t  <project name=\"service\" description=\"Windows Service using BottlesServiceRunner and TopShelf\" template=\"baseline\" alterations=\"bottle-service, empty-bottle-service\">\r\n\t\r\n\t  </project>\r\n\r\n    <project name=\"transport-service\" description=\"New FubuTransportation application\" template=\"baseline\" alterations=\"bottle-service, fubutransportation, fubu-rake-tasks\" dotnet=\"v4.5\">\r\n      <selection name=\"ioc\" description=\"IoC Container\" >\r\n        <option name=\"structuremap\" description=\"Use StructureMap for IoC\" alterations=\"ft-structuremap\"/>\r\n      </selection>\r\n      <selection name=\"transport\" description=\"Initial transport choice -- you can add additional transports later\">\r\n        <option name=\"lq\" description=\"LightningQueues transport\" alterations=\"ft-lightningqueues\"/>\r\n        <option name=\"in-memory\" description=\"In Memory transport suitable for experimentation or light testing\" alterations=\"ft-in-memory\"/>\r\n      </selection>\r\n    </project>\r\n    \r\n    \r\n  </category>\r\n  <category type=\"add\">\r\n    <project name=\"library\" description=\"Simple Class Library project\" template=\"baseline\" alterations=\"fubucore\"></project>\r\n    <project name=\"web-bottle\" description=\"New FubuMVC Bottle\" template=\"baseline\" alterations=\"fubumvc-bottle\"></project>\r\n\r\n    <project name=\"web-app\" description=\"New FubuMVC application project\" template=\"aspnet\" alterations=\"fubumvc-empty, fubu-rake-tasks\">\r\n      <selection name=\"ioc\" description=\"IoC Container\" >\r\n        <option name=\"structuremap\" description=\"Use StructureMap for IoC\" alterations=\"structuremap\"/>\r\n      </selection>\r\n      <selection name=\"views\" description=\"View Engine\">\r\n        <option name=\"no-views\" description=\"No view engine\" alterations=\"no-views\"/>\r\n        <option name=\"spark\" description=\"Spark view engine\" alterations=\"spark\"/>\r\n        <option name=\"razor\" description=\"Razor view engine\" alterations=\"razor\"/>\r\n      </selection>\r\n    </project>\r\n\r\n    <project name=\"service\" description=\"Windows Service using BottlesServiceRunner and TopShelf\" template=\"baseline\" alterations=\"bottle-service, empty-bottle-service\">\r\n\r\n    </project>\r\n\r\n    <project name=\"transport-service\" description=\"New FubuTransportation application\" template=\"baseline\" alterations=\"bottle-service, fubutransportation, fubu-rake-tasks\" dotnet=\"v4.5\">\r\n      <selection name=\"ioc\" description=\"IoC Container\" >\r\n        <option name=\"structuremap\" description=\"Use StructureMap for IoC\" alterations=\"ft-structuremap\"/>\r\n      </selection>\r\n      <selection name=\"transport\" description=\"Initial transport choice -- you can add additional transports later\">\r\n        <option name=\"lq\" description=\"LightningQueues transport\" alterations=\"ft-lightningqueues\"/>\r\n        <option name=\"in-memory\" description=\"In Memory transport suitable for experimentation or light testing\" alterations=\"ft-in-memory\"/>\r\n      </selection>\r\n    </project>\r\n\t\r\n\t<project name=\"fubudocs\" description=\"New FubuDocs documentation project -- name must end with '.Docs'\" template=\"baseline\" alterations=\"fubudocs\">\r\n\t</project>\r\n  </category>\r\n</templates>"
  },
  {
    "path": "templates/alteration/autofac/nuget.txt",
    "content": "FubuMVC.Autofac"
  },
  {
    "path": "templates/alteration/bottle-service/bottle-service.config",
    "content": "<service>\r\n  <Name>%SERVICE_NAME%</Name>\r\n  <DisplayName>%DISPLAY_NAME%</DisplayName>\r\n  <Description>A Bottles/TopShelf hosted service</Description>\r\n  <UseEventLog>False</UseEventLog>\r\n  \r\n  <!-- Set this if there is an ambiguity about what bootstrapper or IApplicationLoader \r\n       BottleServiceRunner should use -->\r\n  <!--<BootstrapperType>assembly qualified name of a specific bootstrapper type</BootstrapperType>-->\r\n\r\n</service>"
  },
  {
    "path": "templates/alteration/bottle-service/inputs.txt",
    "content": "%SERVICE_NAME%=%SHORT_NAME%,The service name\r\n%DISPLAY_NAME%=%SERVICE_NAME%,The displayed service name in the services control panel\n"
  },
  {
    "path": "templates/alteration/bottle-service/nuget.txt",
    "content": "BottleServiceRunner"
  },
  {
    "path": "templates/alteration/bottle-service/rake.txt",
    "content": "FubuRake::BottleServices.new({\r\n  :prefix => \"%RAKE_TASK_PREFIX%\", \r\n \r\n  :dir => \"%PROJECT_FOLDER%/bin/#{@solution.compilemode}\", \r\n  :name => '%SERVICE_NAME%'\r\n})"
  },
  {
    "path": "templates/alteration/empty-bottle-service/%SERVICE_NAME%Loader.cs",
    "content": "using Bottles.Services;\r\nusing System;\r\n\r\nnamespace %NAMESPACE%\r\n{\r\n\tpublic class %SERVICE_NAME%Loader : IApplicationLoader, IDisposable\r\n\t{\r\n\t\tpublic IDisposable Load()\r\n\t\t{\r\n\t\t\t// Bootstrap your service code in this method\r\n\t\t\t// Returning an IDisposable here is just a way \r\n\t\t\t// to allow BottleServiceRunner to cleanly\r\n\t\t\t// shut down the running application later\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\t\r\n\t\tpublic void Dispose()\r\n\t\t{\r\n\t\t\t// shut down your running code and clean\r\n\t\t\t// up resources\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "templates/alteration/ft-in-memory/FubuTransportationSetup.cs",
    "content": "﻿using System;\r\nusing FubuTransportation;\r\nusing FubuTransportation.Configuration;\r\n\r\nnamespace %NAMESPACE%\r\n{\r\n    public class BusSettings\r\n    {\r\n        public BusSettings()\r\n        {\r\n            Inbound = \"memory://transport/inbound\".ToUri();\r\n            Outbound = \"memory://transport/outbound\".ToUri();\r\n        }\r\n\r\n        public Uri Inbound { get; set; }\r\n        public Uri Outbound { get; set; }\r\n    }\r\n\r\n    public class %TRANSPORT_REGISTRY% : FubuTransportRegistry<BusSettings>\r\n    {\r\n        public %TRANSPORT_REGISTRY%()\r\n        {\r\n            EnableInMemoryTransport();\r\n\r\n            // More options are available for thread or task scheduling\r\n            Channel(x => x.Inbound).ReadIncoming();\r\n\r\n            // Static subscriptions\r\n            Channel(x => x.Outbound)\r\n                .AcceptsMessages(x => true);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "templates/alteration/ft-lightningqueues/FubuTransportationSetup.cs",
    "content": "﻿using System;\r\nusing FubuTransportation;\r\nusing FubuTransportation.Configuration;\r\n\r\nnamespace %NAMESPACE%\r\n{\r\n    public class BusSettings\r\n    {\r\n        public BusSettings()\r\n        {\r\n            Inbound = new Uri(\"lq.tcp://localhost:2200/inbound\");\r\n            Outbound = new Uri(\"lq.tcp://localhost:2201/outbound\");\r\n        }\r\n\r\n        public Uri Inbound { get; set; }\r\n        public Uri Outbound { get; set; }\r\n    }\r\n\r\n    public class %TRANSPORT_REGISTRY% : FubuTransportRegistry<BusSettings>\r\n    {\r\n        public %TRANSPORT_REGISTRY%()\r\n        {\r\n            // More options are available for thread or task scheduling\r\n            Channel(x => x.Inbound).ReadIncoming();\r\n\r\n            // Static subscriptions\r\n            Channel(x => x.Outbound)\r\n                .AcceptsMessages(x => true);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "templates/alteration/ft-lightningqueues/ignore.txt",
    "content": "fubutransportation.esent.*"
  },
  {
    "path": "templates/alteration/ft-lightningqueues/nuget.txt",
    "content": "FubuTransportation.LightningQueues"
  },
  {
    "path": "templates/alteration/ft-structuremap/%APPLICATION_SOURCE%.cs",
    "content": "using FubuMVC.Core;\r\nusing FubuMVC.StructureMap;\r\nusing FubuTransportation.Configuration;\r\nusing StructureMap;\r\n\r\nnamespace %NAMESPACE%\r\n{\r\n\tpublic class %APPLICATION_SOURCE% : IApplicationSource\r\n\t{\r\n\t    public FubuApplication BuildApplication()\r\n\t    {\r\n            return FubuTransport.For<%TRANSPORT_REGISTRY%>()\r\n\t\t\t\t.StructureMap<%STRUCTUREMAP_REGISTRY%>();\r\n\t    }\r\n\t}\r\n}"
  },
  {
    "path": "templates/alteration/ft-structuremap/%STRUCTUREMAP_REGISTRY%.cs",
    "content": "using StructureMap.Configuration.DSL;\r\n\r\nnamespace %NAMESPACE%\r\n{\r\n\tpublic class %STRUCTUREMAP_REGISTRY% : Registry\r\n\t{\r\n\t\tpublic %STRUCTUREMAP_REGISTRY%()\r\n\t\t{\r\n\t\t\t// make any StructureMap configuration here\r\n\t\t\t\r\n            // Sets up the default \"IFoo is Foo\" naming convention\r\n            // for auto-registration within this assembly\r\n            Scan(x => {\r\n                x.TheCallingAssembly();\r\n                x.WithDefaultConventions();\r\n            });\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "templates/alteration/ft-structuremap/inputs.txt",
    "content": "%STRUCTUREMAP_REGISTRY%=%SHORT_NAME%Registry"
  },
  {
    "path": "templates/alteration/ft-structuremap/instructions.txt",
    "content": "\r\n\r\n* StructureMap configuration is in the file %SHORT_NAME%Registry\r\n* StructureMap's default 'IFoo is Foo' conventions are configured for this project\r\n\r\nThe FubuTransportation application is defined in the %APPLICATION_SOURCE% class.  It's unlikely that you'll\r\nneed to customize the application bootstrapping, but %APPLICATION_SOURCE% is where that would\r\nhappen.  You will want to refer to this class later if you use multiple forms of hosting (ASP.Net, \r\nKatana, or Serenity)."
  },
  {
    "path": "templates/alteration/ft-structuremap/nuget.txt",
    "content": "FubuMVC.StructureMap\r\nstructuremap/2.6.3"
  },
  {
    "path": "templates/alteration/fubu-rake-tasks/rake.txt",
    "content": "FubuRake::MvcApp.new({:directory => '%PROJECT_FOLDER%', :name => '%RAKE_TASK_PREFIX%'})"
  },
  {
    "path": "templates/alteration/fubucore/nuget.txt",
    "content": "FubuCore"
  },
  {
    "path": "templates/alteration/fubudocs/instructions.txt",
    "content": "The project %PROJECT_NAME% is a _FubuDocs_ project for living documentation publishing.\r\n\r\n[Getting Started with FubuDocs](http://fubuworld.com/fubudocs/starting/)\r\n\r\n[FubuDocs documentation](http://fubuworld.com/fubudocs) on usage.\r\n\r\n"
  },
  {
    "path": "templates/alteration/fubumvc-bottle/BottleConfiguration.cs",
    "content": "using FubuMVC.Core;\r\n\r\nnamespace %NAMESPACE%\r\n{\r\n\tpublic class %SHORT_NAME%Registry : FubuPackageRegistry\r\n\t{\r\n\t\tpublic %SHORT_NAME%Registry()\r\n\t\t{\r\n\t\t\t// The presence of this class by itself will allow you\r\n\t\t\t// to import Endpoint/Chains from this Bottle into the main\r\n\t\t\t// application\r\n\t\t\r\n\t\t\t// Register any custom FubuMVC policies, inclusions, or \r\n\t\t\t// other FubuMVC configuration here for ONLY this bottle\r\n\t\t\t// Or leave as is to use the default conventions unchanged\r\n\t\t}\r\n\t}\r\n\t\r\n\tpublic class %SHORT_NAME%Extensions : IFubuRegistryExtension\r\n\t{\r\n        public void Configure(FubuRegistry registry)\r\n        {\r\n            // Register any policies or services to be applied\r\n\t\t\t// to the global \r\n        }\r\n\t}\r\n}"
  },
  {
    "path": "templates/alteration/fubumvc-bottle/assembly-info.txt",
    "content": "// Marks this assembly as a Bottle for FubuMVC/FubuTransportation apps\r\n[assembly: FubuMVC.Core.FubuModule]"
  },
  {
    "path": "templates/alteration/fubumvc-bottle/instructions.txt",
    "content": "* Endpoints for this bottle can be configured in %SHORT_NAME%Registry\r\n* Globally applied policies and services can be added in\r\n  %SHORT_NAME%Extensions\r\n* You may need to run 'rake compile' to build out the pak-*.zip files\r\n  before the code will compile"
  },
  {
    "path": "templates/alteration/fubumvc-bottle/nuget.txt",
    "content": "FubuMVC.Core"
  },
  {
    "path": "templates/alteration/fubumvc-empty/%FUBU_REGISTRY%.cs",
    "content": "using FubuMVC.Core;\r\n\r\nnamespace %NAMESPACE%\r\n{\r\n\tpublic class %FUBU_REGISTRY% : FubuRegistry\r\n\t{\r\n\t\tpublic %FUBU_REGISTRY%()\r\n\t\t{\r\n\t\t\t// Register any custom FubuMVC policies, inclusions, or \r\n\t\t\t// other FubuMVC configuration here\r\n\t\t\t// Or leave as is to use the default conventions unchanged\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "templates/alteration/fubumvc-empty/inputs.txt",
    "content": "%FUBU_REGISTRY%=%SHORT_NAME%FubuRegistry,The name of the FubuRegistry class for the application\n"
  },
  {
    "path": "templates/alteration/fubumvc-empty/instructions.txt",
    "content": "* The FubuRegistry class is %FUBU_REGISTRY%.  Use this class to register custom policies or\r\n  configure FubuMVC application settings"
  },
  {
    "path": "templates/alteration/fubumvc-empty/nuget.txt",
    "content": "FubuMVC.Core"
  },
  {
    "path": "templates/alteration/fubutransportation/inputs.txt",
    "content": "%APPLICATION_SOURCE%=%SHORT_NAME%Application\r\n%TRANSPORT_REGISTRY%=%SHORT_NAME%TransportRegistry"
  },
  {
    "path": "templates/alteration/fubutransportation/nuget.txt",
    "content": "FubuTransportation"
  },
  {
    "path": "templates/alteration/no-views/HomeEndpoint.cs",
    "content": "namespace %NAMESPACE%\r\n{\r\n\tpublic class HomeEndpoint\r\n\t{\r\n\t\tpublic string Index()\r\n\t\t{\r\n\t\t\treturn @\"\t\t\r\n%INSTRUCTIONS%\r\n\t\t\t\";\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "templates/alteration/no-views/instructions.txt",
    "content": "* The default '/' route calls the HomeEndpoint.Index() method.  \r\n* Change that method to eliminate these ugly textual instructions with something useful;)"
  },
  {
    "path": "templates/alteration/raven/nuget.txt",
    "content": "StructureMap/2.6.3\r\nFubuMVC.RavenDb/0.9.5.85"
  },
  {
    "path": "templates/alteration/razor/Home.cshtml",
    "content": "@model %NAMESPACE%.HomeModel\r\n\r\n<h4>Instructions</h4>\r\n<pre>\r\n%INSTRUCTIONS%\r\n</pre>\r\n"
  },
  {
    "path": "templates/alteration/razor/HomeEndpoint.cs",
    "content": "namespace %NAMESPACE%\r\n{\r\n\tpublic class HomeEndpoint\r\n\t{\r\n\t\tpublic HomeModel Index(HomeModel model)\r\n\t\t{\r\n\t\t\treturn model;\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "templates/alteration/razor/HomeModel.cs",
    "content": "namespace %NAMESPACE%\r\n{\r\n\tpublic class HomeModel\r\n\t{\r\n\r\n\t}\r\n}"
  },
  {
    "path": "templates/alteration/razor/Shared/Application.cshtml",
    "content": "﻿<!DOCTYPE html>\r\n<html>\r\n    <head>\r\n        <title>Test title</title>\r\n    </head>\r\n    <body>\r\n        @RenderSection(\"header\", false)\r\n        @RenderBody()\r\n        @RenderSection(\"footer\", false)\r\n    </body>\r\n</html>"
  },
  {
    "path": "templates/alteration/razor/instructions.txt",
    "content": "* The home page is served by HomeEndpoint.Index()\r\n* HomeEndpoint.Index() could be eliminated if you choose\r\n  to use Home.cshtml as an 'actionless view'\r\n* Shared/Application.cshtml is the master layout for the application\r\n"
  },
  {
    "path": "templates/alteration/razor/nuget.txt",
    "content": "FubuMVC.Razor\r\nFubuMVC.TwitterBootstrap\r\nFubuMVC.Core.UI\r\n"
  },
  {
    "path": "templates/alteration/serenity/%SHORT_NAME%System.cs",
    "content": "using FubuMVC.Core;\r\nusing Serenity;\r\nusing System;\r\n\r\nnamespace %NAMESPACE%\r\n{\r\n\tpublic class ReplaceWithYourApplicationSource : IApplicationSource\r\n\t{\r\n        public FubuApplication BuildApplication()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\t}\r\n\r\n\tpublic class %SHORT_NAME%System : FubuMvcSystem<ReplaceWithYourApplicationSource>\r\n\t{\r\n\r\n\t}\r\n}"
  },
  {
    "path": "templates/alteration/serenity/instructions.txt",
    "content": "Serenity Integration\r\n\r\n* You will need to change the class %SHORT_NAME%System to connect to\r\n  the real FubuMVC/FubuTransportation application"
  },
  {
    "path": "templates/alteration/serenity/nuget.txt",
    "content": "Serenity"
  },
  {
    "path": "templates/alteration/spark/Home.spark",
    "content": "<viewdata model=\"%NAMESPACE%.HomeModel\" />\r\n\r\n<content:header>\r\n\r\n</content:header>\r\n\r\n<content:main>\r\n\r\n<h4>Instructions</h4>\r\n<pre>\r\n%INSTRUCTIONS%\r\n</pre>\r\n</content:main>\r\n\r\n\r\n<content:footer>\r\n\r\n</content:footer>"
  },
  {
    "path": "templates/alteration/spark/HomeEndpoint.cs",
    "content": "namespace %NAMESPACE%\r\n{\r\n\tpublic class HomeEndpoint\r\n\t{\r\n\t\tpublic HomeModel Index(HomeModel model)\r\n\t\t{\r\n\t\t\treturn model;\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "templates/alteration/spark/HomeModel.cs",
    "content": "namespace %NAMESPACE%\r\n{\r\n\tpublic class HomeModel\r\n\t{\r\n\r\n\t}\r\n}"
  },
  {
    "path": "templates/alteration/spark/Shared/Application.spark",
    "content": "﻿<!doctype html>\r\n<html lang=\"en\">\r\n    <head>\r\n        <meta charset=\"utf-8\"   />\r\n        <Asset src=\"twitterbootstrap\"/>\r\n        <use content=\"head\" />\r\n        <Styles />\r\n    </head>\r\n    <body data-spy=\"scroll\" data-target=\".bs-docs-sidebar\">\r\n        <div id=\"top-menu\" class=\"navbar navbar-fixed-top\">\r\n            <div class=\"navbar-inner\">\r\n                <div class=\"container\">\r\n                    <a class=\"brand\" href=\"#\">%SHORT_NAME%</a>\r\n\r\n                    <use content=\"navigation\" />\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <use content=\"masthead\" />\r\n        <div id=\"Content\" class=\"container\" style=\"margin-top:50px\">\r\n            <use content=\"main\" />\r\n        </div>\r\n        <Scripts />\r\n        <footer class=\"footer\">\r\n            <div class=\"container\">\r\n                <use content=\"footer\" />\r\n              <h4>Standard Footer Content Here</h4>\r\n            </div>\r\n        </footer>\r\n        \r\n    </body>\r\n</html>"
  },
  {
    "path": "templates/alteration/spark/Shared/_global.spark",
    "content": "﻿<use namespace=\"FubuCore\" />\r\n﻿<use namespace=\"FubuMVC.Core.UI\" />\r\n﻿<use namespace=\"FubuMVC.Core.Assets\" />\r\n<use namespace=\"System.Linq\" />"
  },
  {
    "path": "templates/alteration/spark/Shared/bindings.xml",
    "content": "﻿<?xml version=\"1.0\"?>\r\n<bindings>\r\n\t<element name=\"Stylesheet\">#this.Asset('@href');</element>\r\n\t<element name=\"Script\">#this.Asset('@src');</element>\r\n\t<element name=\"Asset\">#this.Asset('@src');</element>\r\n\t<element name=\"Scripts\">this.WriteScriptTags()</element>\r\n\t<element name=\"Styles\">this.WriteCssTags()</element>\r\n\t<element name=\"Image\">this.ImageFor('@src')</element>\r\n\t<element name=\"Partial\">this.Partial&lt;@model&gt;()</element>\r\n\r\n\t<element name=\"Edit\">this.Edit(x => x.@name)</element>\r\n\t<element name=\"Show\">this.Show(x => x.@name)</element>\r\n\t<element name=\"Input\">this.InputFor(x => x.@name)</element>\r\n\t<element name=\"Label\">this.LabelFor(x => x.@name)</element>\r\n\t<element name=\"Display\">this.DisplayFor(x => x.@name)</element>\r\n\r\n\t<element name=\"Form\">\r\n\t\t<start>this.FormFor&lt;@model&gt;()</start>\r\n\t\t<end>this.EndForm()</end>\r\n\t</element>\r\n</bindings>"
  },
  {
    "path": "templates/alteration/spark/instructions.txt",
    "content": "* The home page is served by HomeEndpoint.Index()\r\n* HomeEndpoint.Index() could be eliminated if you choose\r\n  to use Home.Spark as an 'actionless view'\r\n* Shared/Application.spark is the master layout for the application\r\n* Do check out the available Spark bindings in Shared/bindings.xml"
  },
  {
    "path": "templates/alteration/spark/nuget.txt",
    "content": "FubuMVC.Spark\r\nFubuMVC.TwitterBootstrap\r\nFubuMVC.Core.UI\r\nSpark/1.7.5.0"
  },
  {
    "path": "templates/alteration/structuremap/%APPLICATION_SOURCE%.cs",
    "content": "using FubuMVC.Core;\r\nusing FubuMVC.StructureMap;\r\nusing StructureMap;\r\n\r\nnamespace %NAMESPACE%\r\n{\r\n\tpublic class %APPLICATION_SOURCE% : IApplicationSource\r\n\t{\r\n\t    public FubuApplication BuildApplication()\r\n\t    {\r\n            return FubuApplication.For<%SHORT_NAME%FubuRegistry>()\r\n\t\t\t\t.StructureMap<%STRUCTUREMAP_REGISTRY%>();\r\n\t    }\r\n\t}\r\n}"
  },
  {
    "path": "templates/alteration/structuremap/%STRUCTUREMAP_REGISTRY%.cs",
    "content": "using StructureMap.Configuration.DSL;\r\n\r\nnamespace %NAMESPACE%\r\n{\r\n\tpublic class %STRUCTUREMAP_REGISTRY% : Registry\r\n\t{\r\n\t\tpublic %STRUCTUREMAP_REGISTRY%()\r\n\t\t{\r\n\t\t\t// make any StructureMap configuration here\r\n\t\t\t\r\n            // Sets up the default \"IFoo is Foo\" naming convention\r\n            // for auto-registration within this assembly\r\n            Scan(x => {\r\n                x.TheCallingAssembly();\r\n                x.WithDefaultConventions();\r\n            });\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "templates/alteration/structuremap/inputs.txt",
    "content": "%APPLICATION_SOURCE%=%SHORT_NAME%Application\r\n%STRUCTUREMAP_REGISTRY%=%SHORT_NAME%Registry"
  },
  {
    "path": "templates/alteration/structuremap/instructions.txt",
    "content": "\r\n\r\n* StructureMap configuration is in the file %SHORT_NAME%Registry\r\n* StructureMap's default 'IFoo is Foo' conventions are configured for this project\r\n\r\nThe FubuMVC application is defined in the %APPLICATION_SOURCE% class.  It's unlikely that you'll\r\nneed to customize the application bootstrapping, but %APPLICATION_SOURCE% is where that would\r\nhappen.  You will want to refer to this class later if you use multiple forms of hosting (ASP.Net, \r\nKatana, or Serenity)."
  },
  {
    "path": "templates/alteration/structuremap/nuget.txt",
    "content": "FubuMVC.StructureMap\r\nstructuremap/2.6.3"
  },
  {
    "path": "templates/alteration/unit-testing/Standin.cs",
    "content": "using NUnit.Framework;\r\n\r\nnamespace %NAMESPACE%\r\n{\r\n\t[TestFixture]\r\n\tpublic class Standin\r\n\t{\r\n\t\t[Test]\r\n\t\tpublic void delete_me()\r\n\t\t{\r\n\t\t\tAssert.IsTrue(true);\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "templates/alteration/unit-testing/nuget.txt",
    "content": "FubuTestingSupport\r\nstructuremap/2.6.3\r\nstructuremap.automocking/2.6.3"
  },
  {
    "path": "templates/project/aspnet/Global.asax",
    "content": "﻿<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"%ASSEMBLY_NAME%.Global\" Language=\"C#\" %>\r\n"
  },
  {
    "path": "templates/project/aspnet/Global.asax.cs",
    "content": "﻿using System;\r\nusing System.Web;\r\nusing FubuMVC.Core;\r\n\r\nnamespace %ASSEMBLY_NAME%\r\n{\r\n    public class Global : HttpApplication\r\n    {\r\n        private FubuRuntime _runtime;\r\n\r\n        protected void Application_Start(object sender, EventArgs e)\r\n        {\r\n            _runtime = FubuApplication.BootstrapApplication<%APPLICATION_SOURCE%>();\r\n        }\r\n\r\n        protected void Application_End(object sender, EventArgs e)\r\n        {\r\n            _runtime.Dispose();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "templates/project/aspnet/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"%PROJECT_NAME%\")]\r\n"
  },
  {
    "path": "templates/project/aspnet/Web.config",
    "content": "﻿<?xml version=\"1.0\"?>\r\n\r\n<!--\r\n  For more information on how to configure your ASP.NET application, please visit\r\n  http://go.microsoft.com/fwlink/?LinkId=169433\r\n  -->\r\n\r\n<configuration>\r\n    <system.web>\r\n        <compilation debug=\"true\" targetFramework=\"4.0\" />\r\n    </system.web>\r\n  <system.webServer>\r\n    <validation validateIntegratedModeConfiguration=\"false\" />\r\n    <modules runAllManagedModulesForAllRequests=\"true\" />\r\n    <rewrite>\r\n      <rules>\r\n        <rule name=\"HTTP to HTTPS redirect\" stopProcessing=\"true\">\r\n          <match url=\"(.*)\" />\r\n          <conditions>\r\n            <add input=\"{HTTPS}\" pattern=\"off\" ignoreCase=\"true\" />\r\n          </conditions>\r\n          <action type=\"Redirect\" redirectType=\"Found\" url=\"https://{HTTP_HOST}/{R:1}\" />\r\n        </rule>\r\n      </rules>\r\n    </rewrite>\r\n  </system.webServer>\r\n  \r\n  <location path=\"Content\" allowOverride=\"true\">\r\n    <system.web>\r\n      <authorization>\r\n        <allow users=\"*\" />\r\n      </authorization>\r\n    </system.web>\r\n  </location>\r\n  <location path=\"_content\" allowOverride=\"true\">\r\n    <system.web>\r\n      <authorization>\r\n        <allow users=\"*\" />\r\n      </authorization>\r\n    </system.web>\r\n  </location>\r\n  <location path=\"fubu-content\">\r\n    <system.web>\r\n      <authorization>\r\n        <deny users=\"*\" />\r\n      </authorization>\r\n    </system.web>\r\n  </location>\r\n</configuration>\r\n"
  },
  {
    "path": "templates/project/aspnet/csproj.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>GUID</ProjectGuid>\r\n\t<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>\r\n    <OutputType>Library</OutputType>\r\n    <RootNamespace></RootNamespace>\r\n    <AssemblyName></AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <FileUpgradeFlags></FileUpgradeFlags>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Web\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"..\\CommonAssemblyInfo.cs\">\r\n      <Link>CommonAssemblyInfo.cs</Link>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"Web.config\" />\r\n  </ItemGroup>\r\n  <PropertyGroup>\r\n    <VisualStudioVersion Condition=\"'$(VisualStudioVersion)' == ''\">10.0</VisualStudioVersion>\r\n    <VSToolsPath Condition=\"'$(VSToolsPath)' == ''\">$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)</VSToolsPath>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <Import Project=\"$(VSToolsPath)\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"'$(VSToolsPath)' != ''\" />\r\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v11.0\\WebApplications\\Microsoft.WebApplication.targets\" Condition=\"false\" />\r\n    <ProjectExtensions>\r\n    <VisualStudio>\r\n      <FlavorProperties GUID=\"{349c5851-65df-11da-9384-00065b846f21}\">\r\n        <WebProjectProperties>\r\n          <UseIIS>False</UseIIS>\r\n          <AutoAssignPort>True</AutoAssignPort>\r\n          <DevelopmentServerPort>49886</DevelopmentServerPort>\r\n          <DevelopmentServerVPath>/</DevelopmentServerVPath>\r\n          <IISUrl>\r\n          </IISUrl>\r\n          <NTLMAuthentication>False</NTLMAuthentication>\r\n          <UseCustomServer>False</UseCustomServer>\r\n          <CustomServerUrl>\r\n          </CustomServerUrl>\r\n          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\r\n        </WebProjectProperties>\r\n      </FlavorProperties>\r\n    </VisualStudio>\r\n  </ProjectExtensions>\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>\r\n"
  },
  {
    "path": "templates/project/baseline/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following \r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n[assembly: AssemblyTitle(\"%ASSEMBLY_NAME%\")]\r\n"
  },
  {
    "path": "templates/project/baseline/csproj.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>8.0.30703</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{02B43D34-3E1C-42D1-B906-06C99ED80104}</ProjectGuid>\r\n    <OutputType>Library</OutputType>\r\n    <RootNamespace>MyProject</RootNamespace>\r\n    <AssemblyName>MyProject</AssemblyName>\r\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Core\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"..\\CommonAssemblyInfo.cs\">\r\n      <Link>CommonAssemblyInfo.cs</Link>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "templates/solution/baseline/VERSION.txt",
    "content": "BUILD_VERSION = \"0.1.0\""
  },
  {
    "path": "templates/solution/baseline/gems.txt",
    "content": "rake,>=10.0.3\r\nbundler,>=1.3.5\r\nfuburake,~>0.5\r\nripple-cli,~>2.0\r\nfubudocs,~>0.9"
  },
  {
    "path": "templates/solution/baseline/ignore.txt",
    "content": "push.bat\r\nTestResult.xml\r\nbuild\r\nbuild35\r\nartifacts\r\nobj\r\nbin\r\ndeploy\r\ndeploy/*\r\nsrc/CommonAssemblyInfo.cs\r\n_ReSharper.*\r\n*.csproj.user\r\n*.resharper.user\r\n*.ReSharper.user\r\n*.suo\r\n*.cache\r\n~$*\r\n*.userprefs\r\n*.pidb\r\ntest-results\r\nsrc/packages\r\n*.dotCover\r\nsrc/*/repositories.config\r\n.bottle-alias\r\nresults\r\n*.DotSettings.user\r\nGemfile.lock\r\nlogs\r\npak*.zip\r\nfubu-content"
  },
  {
    "path": "templates/solution/baseline/rake.txt",
    "content": "require 'fuburake'\r\n\r\n@solution = FubuRake::Solution.new do |sln|\r\n\tsln.compile = {\r\n\t\t:solutionfile => '%SOLUTION_PATH%'\r\n\t}\r\n\t\t\t\t \r\n\tsln.assembly_info = {\r\n\t\t:product_name => \"%SOLUTION_NAME%\",\r\n\t\t:copyright => 'Copyright 2013. All rights reserved.'\r\n\t}\r\n\t\r\n\tsln.ripple_enabled = true\r\n\tsln.fubudocs_enabled = true\r\nend"
  },
  {
    "path": "templates/solution/edge-ripple/ripple.config",
    "content": "<?xml version=\"1.0\"?>\r\n<ripple xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <Name>%SOLUTION_NAME%</Name>\r\n  <NugetSpecFolder>packaging/nuget</NugetSpecFolder>\r\n  <SourceFolder>src</SourceFolder>\r\n  <BuildCommand>rake</BuildCommand>\r\n  <FastBuildCommand>rake compile</FastBuildCommand>\r\n  <DefaultFloatConstraint>Current</DefaultFloatConstraint>\r\n  <DefaultFixedConstraint>Current,NextMajor</DefaultFixedConstraint>\r\n  <Feeds>\r\n    <Feed Url=\"http://build.fubu-project.org/guestAuth/app/nuget/v1/FeedService.svc\" Mode=\"Fixed\" Stability=\"ReleasedOnly\" />\r\n    <Feed Url=\"http://nuget.org/api/v2\" Mode=\"Fixed\" Stability=\"Anything\" />\r\n    <Feed Url=\"http://packages.nuget.org/v1/FeedService.svc\" Mode=\"Fixed\" Stability=\"ReleasedOnly\" />\r\n  </Feeds>\r\n  <Nugets>\r\n\r\n  </Nugets>\r\n  <Groups />\r\n  <Nuspecs />\r\n</ripple>"
  },
  {
    "path": "templates/solution/floating-ripple/ripple.config",
    "content": "<?xml version=\"1.0\"?>\r\n<ripple xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <Name>%SOLUTION_NAME%</Name>\r\n  <NugetSpecFolder>packaging/nuget</NugetSpecFolder>\r\n  <SourceFolder>src</SourceFolder>\r\n  <BuildCommand>rake</BuildCommand>\r\n  <FastBuildCommand>rake compile</FastBuildCommand>\r\n  <DefaultFloatConstraint>Current</DefaultFloatConstraint>\r\n  <DefaultFixedConstraint>Current,NextMajor</DefaultFixedConstraint>\r\n  <Feeds>\r\n    <Feed Url=\"http://build.fubu-project.org/guestAuth/app/nuget/v1/FeedService.svc\" Mode=\"Float\" Stability=\"ReleasedOnly\" />\r\n    <Feed Url=\"http://nuget.org/api/v2\" Mode=\"Fixed\" Stability=\"Anything\" />\r\n    <Feed Url=\"http://packages.nuget.org/v1/FeedService.svc\" Mode=\"Fixed\" Stability=\"ReleasedOnly\" />\r\n  </Feeds>\r\n  <Nugets>\r\n\r\n  </Nugets>\r\n  <Groups />\r\n  <Nuspecs />\r\n</ripple>"
  },
  {
    "path": "templates/solution/public-ripple/ripple.config",
    "content": "<?xml version=\"1.0\"?>\r\n<ripple xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <Name>%SOLUTION_NAME%</Name>\r\n  <NugetSpecFolder>packaging/nuget</NugetSpecFolder>\r\n  <SourceFolder>src</SourceFolder>\r\n  <BuildCommand>rake</BuildCommand>\r\n  <FastBuildCommand>rake compile</FastBuildCommand>\r\n  <DefaultFloatConstraint>Current</DefaultFloatConstraint>\r\n  <DefaultFixedConstraint>Current,NextMajor</DefaultFixedConstraint>\r\n  <Feeds>\r\n    <Feed Url=\"http://nuget.org/api/v2\" Mode=\"Fixed\" Stability=\"Anything\" />\r\n    <Feed Url=\"http://packages.nuget.org/v1/FeedService.svc\" Mode=\"Fixed\" Stability=\"ReleasedOnly\" />\r\n  </Feeds>\r\n  <Nugets>\r\n\r\n  </Nugets>\r\n  <Groups />\r\n  <Nuspecs />\r\n</ripple>"
  },
  {
    "path": "webpack.config.js",
    "content": "\nmodule.exports = {\n  entry: {\n    \"root\": './javascript/root.jsx',\n\t  \"lq\": './javascript/lightning-queues.jsx',\n    \"marten\": './javascript/marten.jsx'\n  },\n  output: {\n    path: __dirname + '/src/DiagnosticsHarness/fubu-diagnostics',\n    //path: __dirname + '/src/FubuMVC.Core/fubu-diagnostics',\n    filename: \"[name].js\",\n    publicPath: '/client/public/javascript/',\n    pathinfo: true\n  },\n  resolve: {\n    // Allow to omit extensions when requiring these files\n    extensions: ['', '.js', '.jsx']\n  },\n  module: {\n    loaders: [\n      { test: /\\.css$/, loader: \"style!css\" },\n      { test: /\\.jsx$/, loader: 'babel'},\n      { test: /\\.js$/, exclude: /(node_modules)|(-data\\.js$)/, loader: \"babel\"}\n    ]\n  },\n  externals: {\n      // require(\"jquery\") is external and available\n      //  on the global var jQuery\n      \"jquery\": \"jQuery\"\n  },\n\n  devtool: 'eval'\n}\n"
  }
]